peony-extensions/0000775000175000017500000000000015257160277013043 5ustar fengfengpeony-extensions/NEWS0000664000175000017500000000040115257160264013531 0ustar fengfeng### peony-extensions 2.0.0 * Rewrite the plugins according to the peony-2.0.0. ### peony-extensions 1.1.0 * Initial release. * Add archive extension. ### peony-extensions 1.1.4 * Drop peony-admin since python-gi and python-caja depends python2. peony-extensions/test-computer-view/0000775000175000017500000000000015257160264016622 5ustar fengfengpeony-extensions/test-computer-view/main.cpp0000664000175000017500000000162315257160264020254 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2023, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * */ #include "mainwindow.h" #include int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } peony-extensions/test-computer-view/mainwindow.h0000664000175000017500000000205215257160264021146 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2023, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * */ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H peony-extensions/test-computer-view/test-computer-view.pro0000664000175000017500000000201615257160264023126 0ustar fengfengQT += core gui dbus network greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += debug c++11 no_keywords link_pkgconfig plugin PKGCONFIG +=gio-2.0 glib-2.0 gio-unix-2.0 peony udisks2 libnotify # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS include(../common.pri) include(../peony-extension-computer-view/computer-view/computer-view.pri) # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ mainwindow.cpp HEADERS += \ mainwindow.h FORMS += \ mainwindow.ui peony-extensions/test-computer-view/mainwindow.ui0000664000175000017500000000103015257160264021327 0ustar fengfeng MainWindow 0 0 800 600 MainWindow peony-extensions/test-computer-view/mainwindow.cpp0000664000175000017500000000200715257160264021501 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2023, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * */ #include "mainwindow.h" #include "ui_mainwindow.h" #include "computer-view.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); setCentralWidget(new ComputerView); } MainWindow::~MainWindow() { delete ui; } peony-extensions/peony-send-to-device/0000775000175000017500000000000015257160277017001 5ustar fengfengpeony-extensions/peony-send-to-device/send-to-device-plugin.cpp0000664000175000017500000002456315257160277023621 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2019, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Ding Jing * */ #include "send-to-device-plugin.h" #include "file-info.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef KYLIN_COMMON #include #endif #define V10_SP1_EDU "V10SP1-edu" static QString getIconName (GIcon* icons); static void mounted_func (gpointer data, gpointer udata); static void handle_mount_added (GVolumeMonitor* monitor, GMount* mount, gpointer data); static void handle_mount_removed(GVolumeMonitor* monitor, GMount* mount, gpointer data); using namespace Peony; SendToPlugin::SendToPlugin(QObject *parent) : QObject(parent), mEnable(true) { // translator QTranslator *t = new QTranslator(this); t->load(":/translations/peony-send-to-device_"+QLocale::system().name()); QFile file(":/translations/peony-send-to-device_"+QLocale::system().name()+".ts"); QApplication::installTranslator(t); } QList SendToPlugin::menuActions(Types types, const QString &uri, const QStringList &selectionUris) { #ifdef KYLIN_COMMON if (QString::fromStdString(KDKGetPrjCodeName()) == V10_SP1_EDU) { return QList(); } #endif QList l; if (selectionUris.count() <= 0) { return l; } auto info = FileInfo::fromUri(selectionUris.first()); if (selectionUris.first().startsWith("computer:///") || selectionUris.first().startsWith("trash:///") || selectionUris.first().startsWith("filesafe:///") || info->isVirtual()) { return l; } QStringList selectionTargerUris = selectionUris; if (selectionUris.first().startsWith("recent:///")) { selectionTargerUris.clear(); for (auto u : selectionUris){ selectionTargerUris << FileUtils::getTargetUri(u); } } QAction* action = new DriverAction(selectionTargerUris); if (action) { l << action; } Q_UNUSED(uri) Q_UNUSED(types) return l; } DriverItem::DriverItem(QString uri, QIcon icon, QString name, QObject* parent) : QAction(parent), mName(name), mIcon(icon), mUri(uri) { setIcon(mIcon); setText(name); } const QIcon DriverItem::icon() { return mIcon; } const QString DriverItem::name() { return mName; } const QString DriverItem::uri() { return mUri; } static void handle_mount_added(GVolumeMonitor* monitor, GMount* mount, gpointer data) { DriverAction* drivers = (DriverAction*)data; mounted_func (mount, drivers); Q_UNUSED(monitor) } static void handle_mount_removed(GVolumeMonitor* monitor, GMount* mount, gpointer data) { char* path = nullptr; GFile* location = nullptr; if (!mount || !data) return; location = g_mount_get_default_location(mount); if (location) { path = g_file_get_uri(location); } if (nullptr != path) { ((DriverAction*)data)->driverRemove(path); } qDebug() << "remove uri:" << path; if (!path) g_free(path); if (!location) g_object_unref(location); Q_UNUSED(monitor) } static void mounted_func (gpointer data, gpointer udata) { GMount* mount = (GMount*)data; GFile* location = nullptr; char* uri = nullptr; DriverAction* act = (static_cast(udata)); if (!data || !udata || !act) return; if (mount) { location = g_mount_get_default_location(mount); if (location) { uri = g_file_get_uri(location); auto path = g_file_peek_path(location); if (path) { g_autoptr (GUnixMountEntry) entry = g_unix_mount_at(path, NULL); if (entry) { auto fsType = g_unix_mount_get_fs_type(entry); if (QString(fsType).contains("fuse.kyfs")) { return; } } } } } // check permission FileInfoJob* fileInfo = new FileInfoJob(uri); fileInfo->setAutoDelete (); fileInfo->queryAsync (); act->connect(fileInfo, &FileInfoJob::queryAsyncFinished, act, [=] (bool success) { if (success) { GMount* mount = (GMount*)data; if (G_IS_MOUNT (mount)) { g_autofree char* name = g_mount_get_name(mount); GIcon* icons = g_mount_get_icon(mount); QString icon = getIconName (icons); if (icon.isEmpty()) { g_autoptr(GVolume) volume = g_mount_get_volume(mount); g_autoptr(GIcon) g_icon = g_volume_get_icon(volume); icon = FileUtils::getIconStringFromGIcon(g_icon); } if (icon == "drive-harddisk-usb") { double size = FileUtils::getDeviceSize(fileInfo->getInfo()->unixDeviceFile().toUtf8().constData()); if (size > 128) { icon = "drive-harddisk-usb"; } else { icon = "drive-removable-media-usb"; } } std::shared_ptr info = fileInfo->getInfo(); if (uri && name && info.get()->canExecute() && info.get()->canWrite()) { Q_EMIT (static_cast(udata))->driverAdded(uri, name, icon); } qDebug() << "name:" << name << " uri:" << uri << " icons:" << icons << " icon:" << icon; } } }); if (!uri) g_free(uri); if (!location) g_object_unref(location); } static QString getIconName (GIcon* icons) { if (nullptr == icons) { return ""; } QString icon = nullptr; if (G_IS_ICON(icons)) { const gchar* const* iconNames = g_themed_icon_get_names(G_THEMED_ICON (icons)); if (iconNames) { auto p = iconNames; while (*p) { QIcon icont = QIcon::fromTheme(*p); if (!icont.isNull()) { icon = QString (*p); break; } else { p++; } } } g_object_unref(icons); } return icon; } DriverAction::DriverAction(const QStringList& uris, QObject *parent) : QAction(parent) { mMenu = new QMenu(); mVolumeMonitor = g_volume_monitor_get(); mDeviceAdd = g_signal_connect(G_OBJECT(mVolumeMonitor), "mount-added", G_CALLBACK(handle_mount_added), (gpointer)this); mDeviceRemove = g_signal_connect(G_OBJECT(mVolumeMonitor), "mount-removed", G_CALLBACK(handle_mount_removed), (gpointer)this); connect(this, &DriverAction::driverAdded, this, [=] (QString uri, QString name, QString icon) { if (!mDrivers.contains(uri)) { QString curUri = uri; if (curUri.endsWith("/")) { curUri.chop(1); } QString usrName = QStandardPaths::writableLocation(QStandardPaths::HomeLocation).section("/", -1, -1); if ("file:///data" == curUri || "file:///backup" == curUri || "file:///boot" == curUri || "file:///tmp" == curUri || "file:///var" == curUri || "file:///media/" + usrName + "/SYSBOOT" == curUri || "file:///media/" + usrName + "/sysboot" == curUri || "file:///media/" + usrName + "/data" == curUri || "file:///media/" + usrName + "/DATA" == curUri || curUri.startsWith("burn://") || curUri.startsWith("ftp://") || curUri.startsWith("smb://") || curUri.startsWith("file:///media/" + usrName + "/KYLIN-") || curUri.startsWith("file:///media/" + usrName + "/kylin-") ) { return ; } auto it = new DriverItem (uri, QIcon::fromTheme(icon), name); it->connect(it, &QAction::triggered, it, [=] () { qDebug() << "======" << __func__ << "uris:" << uris << "it->uri" << it->uri(); FileCopyOperation* op = new FileCopyOperation(uris, it->uri(), nullptr); op->setAutoDelete(true); FileOperationManager::getInstance()->startOperation(op); }); mMenu->addAction(it); mDrivers[uri] = it; } showAction(); }); connect(this, &DriverAction::driverRemove, this, [=] (QString uri) { if (mDrivers.contains(uri)) { auto it = mDrivers[uri]; mMenu->removeAction(it); it->deleteLater(); mDrivers.remove(uri); } showAction(); }); GList* mounts = g_volume_monitor_get_mounts (mVolumeMonitor); if (mounts) { g_list_foreach (mounts, mounted_func, this); g_list_free_full(mounts, g_object_unref); } setMenu(mMenu); setText(tr("Send to a removable device")); showAction(); } DriverAction::~DriverAction() { //if (mMenu) delete mMenu; if (mVolumeMonitor) { g_signal_handler_disconnect(G_OBJECT(mVolumeMonitor), mDeviceAdd); g_signal_handler_disconnect(G_OBJECT(mVolumeMonitor), mDeviceRemove); g_object_unref(mVolumeMonitor); } for (auto it = mDrivers.begin(); it != mDrivers.end(); ++it) { it.value()->deleteLater(); } if (!mDrivers.isEmpty()) { mDrivers.clear(); } } void DriverAction::showAction() { setVisible(mDrivers.size() > 0 ? true : false); } peony-extensions/peony-send-to-device/translations/0000775000175000017500000000000015257160277021522 5ustar fengfengpeony-extensions/peony-send-to-device/translations/peony-send-to-device_tr.ts0000664000175000017500000000115115257160264026527 0ustar fengfeng Peony::DriverAction Send to a removable device Peony::SendToPlugin Send to a removable device peony-extensions/peony-send-to-device/translations/peony-send-to-device_es.ts0000664000175000017500000000121115257160264026506 0ustar fengfeng Peony::DriverAction Send to a removable device Enviar a un dispositivo extraíble Peony::SendToPlugin Send to a removable device Enviar a un dispositivo extraíble peony-extensions/peony-send-to-device/translations/peony-send-to-device_zh_CN.ts0000664000175000017500000000116215257160264027105 0ustar fengfeng Peony::DriverAction Send to a removable device å�‘é€�到移动设备 Peony::SendToPlugin Send to a removable device å�‘é€�到移动设备 peony-extensions/peony-send-to-device/translations/peony-send-to-device_mn.ts0000664000175000017500000000137715257160264026526 0ustar fengfeng Peony::DriverAction Send to a removable device ᠰᠢᠯᠵᠢᠮᠡᠯ ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ ᠳ᠋ᠤ᠌ ᠢᠯᠡᠬᠡᠬᠦ Peony::SendToPlugin Send to a removable device ᠰᠢᠯᠵᠢᠮᠡᠯ ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ ᠳ᠋ᠤ᠌ ᠢᠯᠡᠬᠡᠬᠦ peony-extensions/peony-send-to-device/translations/peony-send-to-device_kk_KZ.ts0000664000175000017500000000133115257160264027113 0ustar fengfeng Peony::DriverAction Send to a removable device شىعارىپ جىبەرۋگە بولاتٸن اسپاپقا جولداۋ Peony::SendToPlugin Send to a removable device شىعارىپ جىبەرۋگە بولاتٸن اسپاپقا جولداۋ peony-extensions/peony-send-to-device/translations/peony-send-to-device_zh_HK.ts0000664000175000017500000000116515257160264027112 0ustar fengfeng Peony::DriverAction Send to a removable device 發é€�到å�¯è¡Œå‹•è£�ç½® Peony::SendToPlugin Send to a removable device 發é€�到å�¯è¡Œå‹•è£�ç½® peony-extensions/peony-send-to-device/translations/peony-send-to-device_fr.ts0000664000175000017500000000122315257160264026511 0ustar fengfeng Peony::DriverAction Send to a removable device Envoyer vers un périphérique amovible Peony::SendToPlugin Send to a removable device Envoyer vers un périphérique amovible peony-extensions/peony-send-to-device/translations/peony-send-to-device_ky_KG.ts0000664000175000017500000000135115257160264027110 0ustar fengfeng Peony::DriverAction Send to a removable device چىعارىپ جىبەرۉۉگۅ بولوتۇرعان اسباپقا جولدوو Peony::SendToPlugin Send to a removable device چىعارىپ جىبەرۉۉگۅ بولوتۇرعان اسباپقا جولدوو peony-extensions/peony-send-to-device/translations/peony-send-to-device_de.ts0000664000175000017500000000121315257160264026471 0ustar fengfeng Peony::DriverAction Send to a removable device An einen Wechseldatenträger senden Peony::SendToPlugin Send to a removable device An einen Wechseldatenträger senden peony-extensions/peony-send-to-device/translations/peony-send-to-device_bo_CN.ts0000664000175000017500000000136015257160264027064 0ustar fengfeng Peony::DriverAction Send to a removable device སྤོ་སྒུལ་སྒྲིག་ཆས་ལ་སà¾�ྱེལ་བà¼� Peony::SendToPlugin Send to a removable device སྤོ་སྒུལ་སྒྲིག་ཆས་ལ་སà¾�ྱེལ་བà¼� peony-extensions/peony-send-to-device/translations/peony-send-to-device_cs.ts0000664000175000017500000000115115257160264026507 0ustar fengfeng Peony::DriverAction Send to a removable device Peony::SendToPlugin Send to a removable device peony-extensions/peony-send-to-device/translations/peony-send-to-device_ug_CN.ts0000664000175000017500000000133715257160264027103 0ustar fengfeng Peony::DriverAction Send to a removable device چىقىرىۋÛ�تىشكە بولىدىغان ئۈسكۈنىگە يوللاش Peony::SendToPlugin Send to a removable device چىقىرىۋÛ�تىشكە بولىدىغان ئۈسكۈنىگە يوللاش peony-extensions/peony-send-to-device/peony-send-to-device.pro0000664000175000017500000000236615257160277023470 0ustar fengfengQT += core gui widgets concurrent include(../common.pri) TARGET = peony-send-to-device TEMPLATE = lib DEFINES += PEONYADMIN_LIBRARY PKGCONFIG += peony CONFIG += link_pkgconfig no_keywords c++11 plugin debug SOURCES += \ send-to-device-plugin.cpp HEADERS += \ send-to-device-plugin.h TRANSLATIONS += \ translations/peony-send-to-device_cs.ts \ translations/peony-send-to-device_de.ts \ translations/peony-send-to-device_es.ts \ translations/peony-send-to-device_fr.ts \ translations/peony-send-to-device_kk_KZ.ts \ translations/peony-send-to-device_ug_CN.ts \ translations/peony-send-to-device_ky_KG.ts \ translations/peony-send-to-device_tr.ts \ translations/peony-send-to-device_zh_CN.ts \ translations/peony-send-to-device_bo_CN.ts \ translations/peony-send-to-device_mn.ts \ translations/peony-send-to-device_zh_HK.ts #RESOURCES += \ # resources.qrc CONFIG += lrelease embed_translations QM_FILES_RESOURCE_PREFIX = /translations/ target.path = $$[QT_INSTALL_LIBS]/peony-extensions INSTALLS += target SKIP_TEST = $$(EXTENSIONS_SKIP_TEST) isEmpty(SKIP_TEST) { message("build with tests") QMAKE_LFLAGS += -fprofile-arcs -ftest-coverage QMAKE_CXXFLAGS += --coverage LIBS += -lgcov } peony-extensions/peony-send-to-device/send-to-device-plugin.h0000664000175000017500000000573015257160277023261 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2019, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Ding Jing * */ #ifndef ADMINMENUPLUGIN_H #define ADMINMENUPLUGIN_H #include #include #include #undef signals namespace Peony { class DriverItem; class RemoveableDriver; class SendToPlugin : public QObject, public MenuPluginInterface { Q_OBJECT Q_PLUGIN_METADATA(IID MenuPluginInterface_iid FILE "common.json") Q_INTERFACES(Peony::MenuPluginInterface) public: explicit SendToPlugin(QObject *parent = nullptr); QString testPlugin() override {return "";} bool isEnable() override {return mEnable;} void setEnable(bool enable) override {mEnable = enable;} const QString description() override {return tr("Send to a removable device");} const QString name() override {return "Peony Qt Send to a removable device";} const QIcon icon() override {return QIcon::fromTheme("document-send-symbolic");} PluginInterface::PluginType pluginType() override {return PluginInterface::MenuPlugin;} QList menuActions(Types types, const QString &uri, const QStringList &selectionUris) override; private: bool mEnable; }; class DriverAction : public QAction { Q_OBJECT public: explicit DriverAction (const QStringList& uris, QObject* parent = nullptr); ~DriverAction (); Q_SIGNALS: void driverRemove (QString uri); void driverAdded (QString uri, QString name, QString icon); private: void showAction (); private: gulong mDeviceAdd; gulong mDeviceRemove; QMenu* mMenu = nullptr; GVolumeMonitor* mVolumeMonitor = nullptr; QMap mDrivers; }; class DriverItem : public QAction { friend class RemoveableDriverModel; Q_OBJECT public: explicit DriverItem (QString uri, QIcon icon, QString name, QObject* parent = nullptr); const QIcon icon (); const QString uri (); const QString name (); private: bool mConnect; QString mName; QIcon mIcon; QString mUri; }; } #endif peony-extensions/peony-intelligent-data-management-service/0000775000175000017500000000000015257160277023170 5ustar fengfeng././@LongLink0000644000000000000000000000015300000000000011602 Lustar rootrootpeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service_mn.tspeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service0000664000175000017500000002775515257160277033260 0ustar fengfeng AISearchTask Failed to create ai search session. ᠡᠷᠢᠬᠦ ᠬᠤᠷᠠᠯ á ¢ ᠡᠭᠦᠳᠦᠨ ᠪᠠᠶᠢᠭᠤᠯᠬᠤ ᠶᠢᠨ á  á ·á ­á Žá   ᠦᠭᠡᠶ á ƒ Search task cancelled. ᠡᠷᠢᠬᠦ ᠡᠭᠦᠷᠭᠡ ᠨᠢᠭᠡᠨᠲᠡ ᠬᠦᠴᠦᠨ ᠦᠭᠡᠢ ᠪᠣᠯᠵᠠᠢ á ƒ Condition File name contains "%1" ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠸᠷᠢᠶᠠᠯ ᠤᠨ ᠨᠡᠷ᠎ᠡ ᠳᠤ  ã‚¢  ᠪᠠᠭᠲᠠᠨ᠎ᠠ File name without "%1" 《1》 ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ ᠨᠡᠷ᠎ᠡ ᠠᠪᠴᠤ ᠪᠣᠯᠬᠤ ᠦᠭᠡᠶ᠃ File type contains "%1" ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠸᠷᠢᠶᠠᠯ ᠤᠨ ᠳᠦᠷᠦᠯ ᠬᠡᠯᠪᠡᠷᠢ ᠳᠤ  ã‚¢  ᠪᠠᠭᠲᠠᠨ᠎ᠠ By suffix á  á ·á ¤ ᠲᠠᠯ᠎ᠠ ᠪᠠᠷ ᠳᠠᠷᠤ á ƒ Folder ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠬᠠᠪᠤᠳᠠᠷ Plain Text ᠴᠤᠯ ᠳᠠᠢá �ᠢᠰᠺᠸᠲ WPS Document WPS ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ á ƒ PDF PDF ᠬᠡᠯᠪᠡᠷᠢ á ƒ Image ᠵᠢᠷᠤᠭ Video ᠸᠢᠳᠢᠤ᠋ Audio ᠳᠠᠭᠤᠨ á ¤ ᠳᠠᠪᠲᠠᠮᠵᠢ á ƒ File type contains %1 ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ ᠲᠦᠷᠦᠯ ᠬᠡᠯᠪᠡᠷᠢ ᠳᠦ 1 ᠪᠠᠭᠲᠠᠨ᠎ᠠ á ƒ All ᠪᠦᠬᠦᠢᠯᠡ Empty(0K) ᠬᠤᠭᠤᠰᠤᠨ(0K) Tiny(0-16K) ᠵᠢᠵᠢᠭ ᠬᠡᠯᠪᠡᠷᠢ (0-16K) Small(16K-1M) ᠵᠢᠵᠢᠭ ᠨᠣᠮᠧᠷ (16K-1M) Medium(1M-128M) ᠳᠤᠮᠳᠠ ᠵᠡᠷᠭᠡ(1M-128M) Big(128M-1G) ᠶᠡᠬᠡ(128M-1G) Large(1-4G) ᠮᠤᠨᠳᠠᠭ ᠶᠡᠬᠡ(1-4G) Great(>4G) ᠮᠠᠰᠢ á ¶á ¡á ­á ¡(>4G) File size contains %1 ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ ᠶᠡᠬᠡ ᠪᠠᠭ᠎ᠠ ᠳᠤ 1 ᠪᠠᠭᠲᠠᠨ᠎ᠠ á ƒ File size without %1 ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ ᠶᠡᠬᠡ ᠪᠠᠭ᠎ᠠ (〈 1 ᠪᠠᠭᠲᠠᠬᠤ ᠦᠭᠡᠢ ) File content match %1 ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ ᠠᠭᠤᠯᠭ᠎ᠠ ᠨᠢ 1 á ƒ File location contains "%1" ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠸᠷᠢᠶᠠᠯ ᠤᠨ ᠪᠠᠶᠢᠷᠢ ᠳᠤ  ã‚¢  ᠪᠠᠭᠲᠠᠨ᠎ᠠ File location without "%1" 《1》 ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ ᠪᠠᠶᠢᠷᠢ ᠪᠠᠶᠢᠬᠤ ᠦᠭᠡᠶ᠃ Later than "%1" 《1》 á ¡á ´á ¡ ᠬᠣᠵᠢᠮᠳᠠᠭᠰᠠᠨ ᠨᠢ 《1》 á ¡á ´á ¡ ᠬᠣᠵᠢᠮ ᠣᠷᠣᠶᠢᠲᠠ Earlier than "%1" 《 1 》 á ¡á ´á ¡ ᠡᠷᠲᠡ 《 1 》 á ¡á ´á ¡ ᠡᠷᠲᠡ 《 1 》 á ¡á ´á ¡ á ¡á · DatabaseManager New Space %1 ᠰᠢᠨ᠎ᠡ ᠣᠷᠣᠨ ᠵᠠᠶ ᠨᠢ 1 á ƒ File %1 has areally been added to %2 ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ 1 á ¶á ¢ ᠨᠢᠭᠡᠨᠲᠡ ᠵᠢᠩᠬᠢᠨᠢ ᠪᠡᠷ ᠨᠡᠮᠡᠭᠡᠳ 2 ᠪᠣᠯᠲᠠᠯ᠎ᠠ ᠨᠡᠮᠡᠵᠡᠢ á ƒ File %1 doesn't exsit in any space. ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ á ¢ á � 1 ᠶᠠᠮᠠᠷ á ´á ¤ ᠣᠷᠣᠨ ᠵᠠᠶ ᠳᠤ ᠠᠷᠢᠯᠬᠤ ᠦᠭᠡᠢ á ƒ Failed to get space %1's id from query ᠠᠰᠠᠭᠤᠨ ᠯᠠᠪᠯᠠᠬᠤ ᠳᠤᠮᠳᠠ á  á ´á   ᠣᠷᠣᠨ ᠵᠠᠶ ᠶᠢᠨ 1 ᠶᠢᠨ ID ᠣᠯᠵᠤ ᠳᠡᠶᠢᠯᠬᠦ ᠦᠭᠡᠶ á ƒ Failed to get %1's id from query ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠯᠠᠪᠯᠠᠬᠤ ᠳᠤᠮᠳᠠ á  á ´á   1 ᠶᠢᠨ ID ᠣᠯᠵᠤ ᠳᠡᠶᠢᠯᠬᠦ ᠦᠭᠡᠶ á ƒ ModelController Failed to rename space %1 to %2, %2 is existed. ᠣᠷᠣᠨ ᠵᠠᠶ ᠶᠢᠨ ã‚¢ á ¶á ¢ ã‚¢ ᠬᠦᠨᠳᠦ á ¶á ¢ イ ᠭᠡᠵᠦ ᠨᠡᠷᠡᠯᠡᠵᠦ á ‚ ᠣᠷᠣᠰᠢᠵᠤ イ ᠣᠷᠣᠰᠢᠵᠤ ᠪᠠᠶᠢᠨ᠎ᠠ á ƒ Failed to remove space %1, error message: %2 ᠣᠷᠣᠨ ᠵᠠᠶ ᠨᠢ ã‚¢ á ¶á ¢ ᠬᠠᠰᠤᠵᠤ ᠳᠡᠶᠢᠯᠬᠦ ᠦᠭᠡᠶ á ‚ ᠪᠤᠷᠤᠭᠤ ᠮᠡᠳᠡᠭᠡ á „ イ á ƒ New Space %1 ᠰᠢᠨ᠎ᠡ ᠣᠷᠣᠨ ᠵᠠᠶ ᠨᠢ 1 á ƒ Failed to updatestatus space %1, error message: %2 ᠪᠠᠶᠢᠳᠠᠯ ᠤᠨ ᠣᠷᠣᠨ ᠵᠠᠶ á ¶á ¢ ᠰᠢᠨᠡᠳᠬᠡᠬᠦ ᠶᠢᠨ á  á ·á ­á Žá   ᠦᠭᠡᠶ á ‚ ᠪᠤᠷᠤᠭᠤ ᠮᠡᠳᠡᠭᠡ á „ 2 á ƒ QObject %1 %2 %1 %2 Intelligent Data Manager Introduction ᠤᠶᠤᠨᠲᠤ ᠲᠣᠭ᠎ᠠ ᠪᠠᠷᠢᠮᠲᠠ ᠶᠢᠨ ᠬᠠᠮᠢᠶᠠᠷᠤᠯᠲᠠ ᠶᠢᠨ ᠪᠠᠭᠠᠵᠢ ᠶᠢᠨ ᠲᠠᠨᠢᠯᠴᠠᠭᠤᠯᠭ᠎ᠠ á ƒ peony-intelligent-data-management-service ᠮᠦ ᠳ᠋ᠠᠨ á ¤ ᠤᠶᠤᠨᠲᠤ ᠲᠣᠭ᠎ᠠ ᠪᠠᠷᠢᠮᠲᠠ ᠶᠢᠨ ᠬᠠᠮᠢᠶᠠᠷᠤᠯᠲᠠ ᠶᠢᠨ ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠡ á ƒ exit ᠲᠦᠷ ᠳᠠᠬᠢᠨ ᠡᠬᠢᠯᠡᠭᠦᠯᠬᠦ ᠦᠭᠡᠢ UKUI::IDM::FileInfoJob Create Date: %1 ᠡᠭᠦᠳᠦᠨ ᠪᠠᠶᠢᠭᠤᠯᠬᠤ ᠡᠳᠦᠷ ᠬᠤᠭᠤᠴᠠᠭ᠎ᠠ á „ 1 á ƒ Open Date: %1 ᠴᠢᠯᠥᠭᠡᠲᠡᠶ ᠲᠠᠯᠪᠢᠬᠤ ᠡᠳᠦᠷ ᠬᠤᠭᠤᠴᠠᠭ᠎ᠠ á „ 1 á ƒ peony-extensions/peony-intelligent-data-management-service/main.cpp0000664000175000017500000000606615257160264024624 0ustar fengfeng/* * Peony Intelligent Spaces Service * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: He JinQin * */ #include #include #include #include #include "model/modelcontroller.h" #include #include #include #include "model/searchresultmodel.h" #include "3rd-parties/qtsinglecoreapplication.h" #include #include #ifdef KY_SDK_KABASE #include #endif int main(int argc, char *argv[]) { #if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)) QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); #endif #if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); #endif #ifdef KY_SDK_KABASE qInstallMessageHandler(kdk::kabase::Log::logOutput); #else initUkuiLog4qt("peony-intelligent-data-management-service"); #endif QCoreApplication::setApplicationName("peony-intelligent-data-management-service"); QtSingleCoreApplication app("peony-intelligent-data-management-service", argc, argv); if (app.isRunning()) { QString message = app.arguments().join(' '); qDebug() << "send message" << message; if (app.sendMessage(message)) { return 0; } else { qWarning() << "failed to send massage to running program"; } } QTranslator idm; if (idm.load("/usr/share/peony-intelligent-data-management-service/peony-intelligent-data-management-service_"+QLocale::system().name())) app.installTranslator(&idm); QCommandLineParser parser; parser.addHelpOption(); QCommandLineOption quitOption(QStringList() << "q" << "quit", QObject::tr("exit")); parser.addOption(quitOption); parser.process(app); if (parser.isSet(quitOption)) { app.quit(); return 0; } auto mc = ModelController::globalInstance(); mc->setParent(&app); QObject::connect(&app, &QtSingleCoreApplication::messageReceived, &app, [&](const QString & message) { QStringList arguments = message.split(" "); qDebug() << "message recived" << message << "arguments" << arguments; parser.process(arguments); if (parser.isSet(quitOption)) { app.quit(); }}); return app.exec(); } ././@LongLink0000644000000000000000000000015300000000000011602 Lustar rootrootpeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service_kk.tspeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service0000664000175000017500000002371015257160264033237 0ustar fengfeng AISearchTask Failed to create ai search session. ai ٸزدەۋ جوبالاۋدى قۇرۋ جەڭىلىس قالدى. Search task cancelled. ٸزدەۋ مىندەتى كۇشىنەن قالدىرىلدى. Condition File name contains "%1" حۇجات مى «٪1» نى ٶز ىشىنە الادٸ File name without "%1" «٪1» بولماعان حۇجات مى File type contains "%1" حۇجات تيپى «٪1» نى ٶز ىشىنە الادٸ By suffix قوسىمشاسى Folder حۇجات قىسقىش Plain Text تۇنىق تەكىسىت WPS Document WPS حۇجاتى PDF Image راسىم Video سىن Audio Û‡Ù† File type contains %1 حۇجات تيپى Ùª1 نى ٶز ىشىنە الادٸ All جالپىسى Empty(0K) قۇرعاق(0K) Tiny(0-16K) كىشكەنەسىنە (0-16K) Small(16K-1M) كشكەنە (16K-1M) Medium(1M-128M) ورتاشا (1M-128M) Big(128M-1G) ۇلكەن(128M-1G) Large(1-4G) ۇلكەن(1-4G) Great(>4G) كەرەمەت(>4G) File size contains %1 حۇجات ۇلكەندىگى Ùª1 نى ٶز ىشىنە الادٸ File size without %1 حۇجات ۇلكەندىگى Ùª1 جوق File content match %1 حۇجات مازمۇنى Ùª1 بۇرشاق كەلەدى File location contains "%1" حۇجات ورنى «٪1» نى ٶز ىشىنە الادٸ File location without "%1" حۇجات ورنى «٪1» جوق Later than "%1" «٪1» دان كەيىن Earlier than "%1" «٪1» دان بۇرٸنعٸ DatabaseManager New Space %1 جاڭا بوستٸق Ùª1 File %1 has areally been added to %2 حۇجات Ùª1 راسىندا Ùª2 Ú¯Û• قوسىلدى File %1 doesn't exsit in any space. حۇجات Ùª1 ەشقانداي بوستققا شىقپايدى. Failed to get space %1's id from query سۈرۈشتۈرۈشتىن بوستٸق Ùª1 نىڭ ID عا ÙŠÛ• بولعالٸ بولمادى Failed to get %1's id from query سۈرۈشتۈرۈشتىن Ùª1 نىڭ ازاماتتىق كۋالىك الۋ جەڭىلىپ قالدى ModelController Failed to rename space %1 to %2, %2 is existed. بوستقتٸڭ اتاعىن Ùª1 Ú¯Û• Ùª2 ورىنداپ وزگەرتۋ جەڭىلىس قالدى، Ùª2 ساقتالعان. Failed to remove space %1, error message: %2 Ùª1 بوستقتٸ شىعارىپ وتۋ جەڭىلىس قالدى، قاتەلىك حابارى: Ùª2 New Space %1 جاڭا بوستٸق Ùª1 Failed to updatestatus space %1, error message: %2 Ùª1 بەينە بوستٸقتٸ جاڭالاۋ جەڭىلىس قالدى، قاتەلىك حابارى: Ùª2 QObject %1 %2 Intelligent Data Manager Introduction وي قابٸلەتتٸ ساندىق مالىمەت باسقارۋشنىڭ تونۇشتۇرۇشى peony-intelligent-data-management-service پيون وي قابٸلەتتٸ ساندىق مالىمەت باسقارۋ قىزىمەت وتەۋى exit شەگىنۋ UKUI::IDM::FileInfoJob Create Date: %1 چيسىلا قۇرۋ: Ùª1 Open Date: %1 اشىلعان ۋاقىتى: Ùª1 ././@LongLink0000644000000000000000000000015300000000000011602 Lustar rootrootpeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service_ug.tspeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service0000664000175000017500000002376615257160264033252 0ustar fengfeng AISearchTask Failed to create ai search session. ai ئىزدەش مەشغۇلاتىنى قۇرۇش مەغلۇب بولدى. Search task cancelled. ئىزدەش ۋەزىپىسى ئەمەلدىن قالدۇرۇلدى. Condition File name contains "%1" ھۆججەت نامى «٪1» نى ئۆز ئىچىگە ئالىدۇ File name without "%1" «٪1» بولمىغان ھۆججەت نامى File type contains "%1" ھۆججەت تىپى «٪1» نى ئۆز ئىچىگە ئالىدۇ By suffix قوشۇمچىسى Folder ھۆججەت قىسقۇچ Plain Text ساپ تÛ�كىست WPS Document WPS ھۆججىتى PDF PDF Image رەسىم Video سىن Audio ئۈن File type contains %1 ھۆججەت تىپى Ùª1 نى ئۆز ئىچىگە ئالىدۇ All بارلىق Empty(0K) قۇرۇق(0K) Tiny(0-16K) كىچىككىنە (0-16K) Small(16K-1M) كىچىك (16K-1M) Medium(1M-128M) ئوتتۇراھال (1M-128M) Big(128M-1G) Ú†ÙˆÚ­(128M-1G) Large(1-4G) Ú†ÙˆÚ­(1-4G) Great(>4G) قالتىس(>4G) File size contains %1 ھۆججەت چوڭلۇقى Ùª1 نى ئۆز ئىچىگە ئالىدۇ File size without %1 ھۆججەت چوڭلۇقى Ùª1 يوق File content match %1 ھۆججەت مەزمۇنى Ùª1 ماس ÙƒÛ�لىدۇ File location contains "%1" ھۆججەت ئورنى «٪1» نى ئۆز ئىچىگە ئالىدۇ File location without "%1" ھۆججەت ئورنى «٪1» يوق Later than "%1" «٪1» دىن ÙƒÛ�يىن Earlier than "%1" «٪1» دىن بۇرۇنقى DatabaseManager New Space %1 ÙŠÛ�Ú­Ù‰ بوشلۇق Ùª1 File %1 has areally been added to %2 ھۆججەت Ùª1 ھەقىقەتەن Ùª2 Ú¯Û• قوشۇلدى File %1 doesn't exsit in any space. ھۆججەت Ùª1 ھىچقانداق بوشلۇقتا چىقمايدۇ. Failed to get space %1's id from query سۈرۈشتۈرۈشتىن بوشلۇق Ùª1 نىڭ ID غا ئÛ�رىشكىلى بولمىدى Failed to get %1's id from query سۈرۈشتۈرۈشتىن Ùª1 نىڭ كىملىكىنى ئÛ�لىش مەغلۇپ بولدى ModelController Failed to rename space %1 to %2, %2 is existed. بوشلۇقنىڭ نامىنى Ùª1 Ú¯Û• Ùª2 قىلىپ ئۆزگەرتىش مەغلۇب بولدى، Ùª2 مەۋجۇت. Failed to remove space %1, error message: %2 Ùª1 بوشلۇقنى چىقىرىۋÛ�تىش مەغلۇب بولدى، خاتالىق ئۇچۇرى: Ùª2 New Space %1 ÙŠÛ�Ú­Ù‰ بوشلۇق Ùª1 Failed to updatestatus space %1, error message: %2 Ùª1 ھالەت بوشلۇقىنى ÙŠÛ�ڭىلاش مەغلۇب بولدى، خاتالىق ئۇچۇرى: Ùª2 QObject %1 %2 %1 %2 Intelligent Data Manager Introduction ئەقلىي ئىقتىدارلىق سانلىق مەلۇمات باشقۇرغۇچنىڭ تونۇشتۇرۇشى peony-intelligent-data-management-service مودەنگۈل ئەقلىي ئىقتىدارلىق سانلىق مەلۇمات باشقۇرۇش مۇلازىمىتى exit Ú†Û�كىنىش UKUI::IDM::FileInfoJob Create Date: %1 Ú†Û�سلا قۇرۇش: Ùª1 Open Date: %1 ئÛ�چىلغان ۋاقتى: Ùª1 ././@LongLink0000644000000000000000000000015600000000000011605 Lustar rootrootpeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service_bo_CN.tspeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service0000664000175000017500000002716315257160277033251 0ustar fengfeng AISearchTask Failed to create ai search session. འཚོལ་ཞིབ་ཚོགས་འདུ་གསར་འཛུགས་བྱེད་à½�བས་མེདà¼� Search task cancelled. འཚོལ་ཞིབ་ཀྱི་ལས་འགན་མེད་པར་བཟོས་ཟིནà¼� Condition File name contains "%1" ཡིག་ཆའི་མིང་ལ་"1%"འདུས་ཡོདà¼� File name without "%1" "1%"ཡི་ཡིག་ཆའི་མིང་འà½�ྱེར་མི་དགོསà¼� File type contains "%1" ཡིག་ཆའི་རིགས་ལ་"བརྒྱ་ཆ་1"འདུས་ཡོདà¼� By suffix རྗེས་སུ་缀དགོསà¼� Folder ཡིག་སྣོད་ Plain Text ཡིག་དེབ་དངོས་ WPS Document WPSགྱི་ཡིག་ཚགསà¼� PDF PDFཡི་རྣམ་གཞག Image བརྙན་རིས Video བརྙན་ཕབà¼� Audio སྒྲ་ཕབà¼� File type contains %1 ཡིག་ཆའི་རིགས་སུ་བརྒྱ་ཆ་1ཚད་ཡོདà¼� All ཚང་མà¼� Empty(0K) སྟོང་à¼�(0K) Tiny(0-16K) ཆུང་གྲསà¼� (0-16K) Small(16K-1M) ཨང་གྲངས་ཆུང་བà¼� (16K-1M)à¼� Medium(1M-128M) འབྲིང་རིམ་(1M—128M) Big(128M-1G) ཆེà¼�(128M—1G) Large(1-4G) ཤིན་à½�ུ་ཆེ་བà¼�(1-4G) Great(>4G) ཆེà¼�4G File size contains %1 ཡིག་ཆའི་ཆེ་ཆུང་ནང་བརྒྱ་ཆ་1ཚད་ཡོདà¼� File size without %1 ཡིག་ཆའི་ཆེ་ཆུང་(བརྒྱ་ཆ་1མི་འདུསà¼� ) File content match %1 ཡིག་ཆའི་ནང་དོན་ཆ་མà½�ུན་ཡིན་པà¼� File location contains "%1" ཡིག་ཆའི་གོ་གནས་སུ་"1%ཚུད་ཡོདà¼� File location without "%1" "1"ཡི་ཡིག་ཆའི་གོ་གནས་མེདà¼� Later than "%1" "བརྒྱ་ཆ་1"ལས་འཕྱི་བ་རེདà¼� Earlier than "%1" "བརྒྱ་ཆ་1"ལས་སྔ་བ་ཡོདà¼� DatabaseManager New Space %1 བར་སྟོང་གསར་པà¼� བརྒྱ་ཆ་1ཡོདà¼� File %1 has areally been added to %2 ཡིག་ཆའི་1%བརྒྱ་ཆ་2ལ་དངོས་འབྲེལ་à½�་སྣོན་བྱས་ཡོདà¼� File %1 doesn't exsit in any space. ཡིག་ཆའི་བརྒྱ་ཆ་1ནི་བར་སྣང་གང་རུང་དུ་མེད་པར་འགྱུར་མི་སྲིདà¼� Failed to get space %1's id from query འདྲི་རྩད་à½�ྲོད་ནས་བར་སྟོང་བརྒྱ་ཆ་1ཟིན་པའི་IDà½�ོབ་à½�བས་མེདà¼� Failed to get %1's id from query འདྲི་རྩད་à½�ྲོད་ནས་1%ཡི་IDà½�ོབ་à½�བས་མེདà¼� ModelController Failed to rename space %1 to %2, %2 is existed. བར་སྟོང་བརྒྱ་ཆ་1གི་མིང་ལ་མིང་བà½�གས་ནས་བརྒྱ་ཆ་2ཡོད་པ་དང་བརྒྱ་ཆ་2ཡོད་མི་à½�ུབà¼� Failed to remove space %1, error message: %2 བར་སྟོང་གི་བརྒྱ་ཆ་1མེད་པར་བཟོས་པ་དང་à¼� ནོར་འà½�ྲུལ་གྱི་གནས་ཚུལà¼� བརྒྱ་ཆ་2ཡིནà¼� New Space %1 བར་སྟོང་གསར་པà¼� བརྒྱ་ཆ་1ཡོདà¼� Failed to updatestatus space %1, error message: %2 རྣམ་པ་གསར་སྒྱུར་བྱེད་à½�བས་བྲལ་བའི་བར་སྟོང་བརྒྱ་ཆ་1དང་à¼� ནོར་འà½�ྲུལ་གྱི་གནས་ཚུལà¼� 2%བཅས་ཡིནà¼� QObject %1 %2 %1 %2 Intelligent Data Manager Introduction རིག་ནུས་གཞི་གྲངས་དོ་དམ་ཡོ་བྱད་ངོ་སྤྲོད་བྱས་པ་རེད peony-intelligent-data-management-service 牡་à½�ན་རིག་ནུས་ཀྱི་གཞི་གྲངས་དོ་དམ་ཞབས་ཞུ་བྱེད་དགོསà¼� exit འབུད་པà¼� UKUI::IDM::FileInfoJob Create Date: %1 གསར་འཛུགས་བྱས་པའི་ཚེས་གྲངསà¼�བརྒྱ་ཆ་1ཡིནà¼� Open Date: %1 སྒོ་འབྱེད་པའི་དུས་ཚོདà¼� བརྒྱ་ཆ་1ཡིནà¼� peony-extensions/peony-intelligent-data-management-service/conf/0000775000175000017500000000000015257160264024111 5ustar fengfengpeony-extensions/peony-intelligent-data-management-service/conf/com.peony.idm.service0000664000175000017500000000024415257160264030152 0ustar fengfeng[D-BUS Service] Name=com.peony.idm.service Exec=/usr/bin/peony-intelligent-data-management-service SystemdService=peony-intelligent-data-management-service.service ././@LongLink0000644000000000000000000000016200000000000011602 Lustar rootrootpeony-extensions/peony-intelligent-data-management-service/conf/peony-intelligent-data-management-service.servicepeony-extensions/peony-intelligent-data-management-service/conf/peony-intelligent-data-management-se0000664000175000017500000000050015257160264033123 0ustar fengfeng[Unit] Description=Peony Intelligent Space Management Service PartOf=xdg-desktop-autostart.target After=xdg-desktop-autostart.target [Service] ExecStart=/usr/bin/peony-intelligent-data-management-service Restart=on-failure StandardOutput=journal StandardError=journal [Install] WantedBy=xdg-desktop-autostart.target peony-extensions/peony-intelligent-data-management-service/file/0000775000175000017500000000000015257160277024107 5ustar fengfengpeony-extensions/peony-intelligent-data-management-service/file/qtremoteobject/0000775000175000017500000000000015257160264027132 5ustar fengfeng././@LongLink0000644000000000000000000000015000000000000011577 Lustar rootrootpeony-extensions/peony-intelligent-data-management-service/file/qtremoteobject/fileeventhandlerimpl.cpppeony-extensions/peony-intelligent-data-management-service/file/qtremoteobject/fileeventhandlerimpl.0000664000175000017500000000220215257160264033330 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #include "fileeventhandlerimpl.h" #include FileEventHandlerImpl::FileEventHandlerImpl(QObject *parent) : FileEventHandlerSource(parent) { } void FileEventHandlerImpl::handleFileEvent(int eventType, QString arg1, QString arg2) { qDebug() << "server handle file event" << eventType << arg1 << arg2; Q_EMIT reciveClientFileEvent(eventType,arg1,arg2); } ././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootpeony-extensions/peony-intelligent-data-management-service/file/qtremoteobject/fileeventhandlerimpl.hpeony-extensions/peony-intelligent-data-management-service/file/qtremoteobject/fileeventhandlerimpl.0000664000175000017500000000240315257160264033333 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef FILEEVENTHANDLERIMPL_H #define FILEEVENTHANDLERIMPL_H #include #include "rep_fileeventhandler_source.h" class FileEventHandlerImpl : public FileEventHandlerSource { Q_OBJECT public: explicit FileEventHandlerImpl(QObject *parent = nullptr); Q_SIGNALS: void reciveClientFileEvent(int eventType, const QString &arg1, const QString &arg2); public Q_SLOTS: virtual void handleFileEvent(int eventType, QString arg1, QString arg2); }; #endif // FILEEVENTHANDLERIMPL_H peony-extensions/peony-intelligent-data-management-service/file/fileinfojob.h0000664000175000017500000000634315257160264026550 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef FILEINFOJOB_H #define FILEINFOJOB_H #include #include #include "file/fileinfo.h" #include class Condition; class QFileInfo; typedef struct _GFile GFile; /* Dummy typedef */ typedef struct _GFileInfo GFileInfo; namespace UKUI { namespace IDM { class FileInfo; class FileInfoJobPrivate; class FileInfoJob : public QObject, public QRunnable { Q_OBJECT public: static FileInfoJob *fromUris(const QStringList &uris, bool addWatchByDefault = true); static FileInfoJob *fromPaths(const QStringList &paths, bool addWatchByDefault = true); static FileInfoJob *fromInfos(const QList> &infos, bool addWatchByDefault = true); static bool infoMatchCondtions(const QFileInfo &fileinfo, const QList > &andConditions, const QList > &orConditions); static bool queryInfoSyncWithConditions(QSharedPointer &info, const QList> &andConditions, const QList> &orConditions); ~FileInfoJob(); void start(); void cancel(); /*! * \brief setConditions * 设置æ�œç´¢è¿‡æ»¤æ�¡ä»¶ * \param conditions */ void setConditions(const QList> &conditions); void setSpaceId(int spaceId); void setLabels(const QStringList &labels); void setHandleContentCondition(bool handleContentCondition); void run() override; QList> getInfos(); void updateFileInfoDataformat(QSharedPointer &info); Q_SIGNALS: void started(); void finished(); void cancelled(); void errored(const QString &errorMessage); void infoUpdated(const QSharedPointer &info); public Q_SLOTS: void handleCancelWithSpaceId(int spaceId); private: static void updateInfoWithGFileInfo(QSharedPointer &info, GFile *gfile, GFileInfo *gfileinfo); static bool infoMatchCondtions(QSharedPointer &info, const QList > &andConditions, const QList > &orConditions, bool handleContentCondition); bool infoMatchLabels(QSharedPointer &info, const QStringList &labels); explicit FileInfoJob(const QStringList &args, bool isUriFormat, bool addWatchByDefault = true, QObject *parent = nullptr); FileInfoJob(); FileInfoJobPrivate *priv; }; #endif // FILEINFOJOB_H } } peony-extensions/peony-intelligent-data-management-service/file/fileinfomanager.h0000664000175000017500000000431015257160264027400 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef FILEINFOMANAGER_H #define FILEINFOMANAGER_H #include #include namespace UKUI { namespace IDM { class FileInfoManagerPrivate; class FileInfoManager : public QObject { Q_OBJECT public: enum FileEventType { Unknown, FileCreated, FileModified, FileDeleted, FileMoveOut, FileMoveIn, FileMoved, FileAccessed, FileOpened, FileClosed, FileAttrChanged, FileIgnoredAutomatic, FileUnmount, UserAddFile, UserRemoveFile, Other }; Q_ENUM(FileEventType) static FileInfoManager *globalInstance(); void addFileToWatcher(const QString &url, bool *ok = nullptr); QStringList addFilesToWatcher(const QStringList &urls); void removeFileFromWatcher(const QString &url, bool *ok = nullptr); QStringList removeFilesFromWatcher(const QStringList &urls); Q_SIGNALS: void fileChanged(FileEventType type, const QString &arg1, const QString arg2); void remoteFileEvent(int eventType, const QString &arg1, const QString arg2); private: FileInfoManagerPrivate *priv; explicit FileInfoManager(QObject *parent = nullptr); ~FileInfoManager(); friend class FileInfo; QSharedPointer getInfoByUri(const QString &uri); void insertInfo(QSharedPointer info); void removeInfoPtrByUri(const QString &uri); }; } } #endif // FILEINFOMANAGER_H peony-extensions/peony-intelligent-data-management-service/file/fileinfo.cpp0000664000175000017500000001161715257160264026410 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #include "fileinfo.h" #include "fileinfo_p.h" #include "fileinfomanager.h" #include #include #include #include using namespace UKUI::IDM; QSharedPointer FileInfo::fromPath(const QString &filePath, bool addWatch) { QUrl url = QUrl::fromLocalFile(filePath); return fromUri(url.toEncoded(), addWatch); } QSharedPointer FileInfo::fromUri(const QString &uri, bool addWatch) { QSharedPointer info = FileInfoManager::globalInstance()->getInfoByUri(uri); if (info.isNull()) { info = QSharedPointer(new FileInfo); info->priv->uri = uri; FileInfoManager::globalInstance()->insertInfo(info); if (addWatch) FileInfoManager::globalInstance()->addFileToWatcher(uri); } return info; } QSharedPointer FileInfo::fromUrl(const QUrl &url, bool addWatch) { return fromUri(url.toEncoded(), addWatch); } bool FileInfo::isValid() const { QMutexLocker(&priv->mutex); bool isValid = priv->state == FileInfoPrivate::State::Valid; return isValid; } QString FileInfo::uri() const { QMutexLocker(&priv->mutex); QString uri = priv->uri; return uri; } QString FileInfo::path() const { QMutexLocker(&priv->mutex); QString path = priv->path; return path; } QString FileInfo::parentPath() const { QMutexLocker(&priv->mutex); QString path = priv->parentPath; return path; } QString FileInfo::displayName() const { QMutexLocker(&priv->mutex); QString name = priv->name; return name; } QString FileInfo::iconName() const { QMutexLocker(&priv->mutex); QString iconName = priv->iconName; return iconName; } QString FileInfo::createDateString() const { QMutexLocker(&priv->mutex); QString string = priv->createDateString; return string; } QString FileInfo::modifyDateString() const { QMutexLocker(&priv->mutex); QString string = priv->modifyDateString; return string; } QString FileInfo::openDateString() const { QMutexLocker(&priv->mutex); QString string = priv->openDateString; return string; } QString FileInfo::dateString() const { QMutexLocker(&priv->mutex); QString string = priv->dateString; return string; } QString FileInfo::version() const { QMutexLocker(&priv->mutex); QString version = priv->version; return version; } QString FileInfo::mimeType() const { QMutexLocker(&priv->mutex); QString mimeType = priv->mimeType; return mimeType; } QString FileInfo::fileType() const { QMutexLocker(&priv->mutex); QString fileType = priv->fileType; return fileType; } quint64 FileInfo::timeModifiedMsec() const { QMutexLocker(&priv->mutex); quint64 timeModifiedMsec = priv->timeModifiedMsec; return timeModifiedMsec; } quint64 FileInfo::timeAccessMsec() const { QMutexLocker(&priv->mutex); quint64 timeAccessMsec = priv->timeAccessMsec; return timeAccessMsec; } qint64 FileInfo::timeRecentModified() const { QMutexLocker(&priv->mutex); qint64 timeRecentModified = priv->timeRecentModified; return timeRecentModified; } quint64 FileInfo::size() const { QMutexLocker(&priv->mutex); quint64 size = priv->size; return size; } QString FileInfo::sizeFormat() const { QMutexLocker(&priv->mutex); QString sizeFormat = priv->sizeFormat; return sizeFormat; } quint64 FileInfo::openCount() const { QMutexLocker(&priv->mutex); quint64 count = priv->openCount; return count; } QList FileInfo::labelColors() const { QList colors; QMutexLocker(&priv->mutex); colors = priv->labelColors; return colors; } void FileInfo::setChecked(bool flag) { QMutexLocker(&priv->mutex); priv->ischecked = flag; } bool FileInfo::isChecked() const { QMutexLocker(&priv->mutex); bool ischecked = priv->ischecked; return ischecked; } FileInfo::FileInfo() { priv = new FileInfoPrivate; } FileInfo::~FileInfo() { // TODO: 批é‡�异步更新数æ�®åº“ FileInfoManager::globalInstance()->removeFileFromWatcher(this->path()); FileInfoManager::globalInstance()->removeInfoPtrByUri(priv->uri); delete priv; } peony-extensions/peony-intelligent-data-management-service/file/fileinfo.h0000664000175000017500000000411015257160264026043 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef FILEINFO_H #define FILEINFO_H #include #include namespace UKUI { namespace IDM { class FileInfoPrivate; class FileInfo { friend class FileInfoJob; public: static QSharedPointer fromPath(const QString &filePath, bool addWatch = false); static QSharedPointer fromUri(const QString &uri, bool addWatch = false); static QSharedPointer fromUrl(const QUrl &url, bool addWatch = false); bool isValid() const; QString uri() const; QString path() const; QString parentPath() const; QString displayName() const; QString iconName() const; QString createDateString() const; QString modifyDateString() const; QString openDateString() const; QString dateString() const; QString version() const; QString mimeType() const; QString fileType() const; quint64 timeModifiedMsec() const; quint64 timeAccessMsec() const; qint64 timeRecentModified() const; quint64 size() const; QString sizeFormat() const; quint64 openCount() const; QList labelColors() const; void setChecked(bool flag); bool isChecked() const; ~FileInfo(); private: FileInfo(); QSharedPointer getInfoByUri(const QString &uri); FileInfoPrivate *priv; }; } } #endif // FILEINFO_H peony-extensions/peony-intelligent-data-management-service/file/fileinfomanager.cpp0000664000175000017500000001663715257160264027752 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #include "fileinfomanager.h" #include "file/qtremoteobject/fileeventhandlerimpl.h" #include #include #include #include #include #include #include #include #include #include #include #include namespace UKUI { namespace IDM { class FileInfoManagerPrivate { public: FileInfoManagerPrivate(); ~FileInfoManagerPrivate(); QHash> hash; KYSDK_FILEWATCHER::FileWatcher *watcher; QThread *watcherThread; QEventLoop *watcherLoop; QRemoteObjectHost *host; FileEventHandlerImpl *impl; QMutex mutex; QMutex watcherMutex; }; FileInfoManagerPrivate::FileInfoManagerPrivate() { watcher = new KYSDK_FILEWATCHER::FileWatcher; watcherThread = new QThread; watcherLoop = new QEventLoop; host = new QRemoteObjectHost; impl = new FileEventHandlerImpl; } FileInfoManagerPrivate::~FileInfoManagerPrivate() { watcherThread->quit(); watcherThread->wait(); host->disableRemoting(impl); watcherLoop->quit(); watcher->clearWatchList(); watcher->disconnect(); delete watcher; delete watcherLoop; delete watcherThread; delete impl; delete host; } } } using namespace UKUI::IDM; static FileInfoManager *instance = nullptr; FileInfoManager *FileInfoManager::globalInstance() { if (!instance) { instance = new FileInfoManager; } return instance; } FileInfoManager::FileInfoManager(QObject *parent) : QObject(parent) { // 在主线程中åˆ�始化标记model FileLabelModel::getGlobalModel(); priv = new FileInfoManagerPrivate; priv->watcher->moveToThread(priv->watcherThread); priv->watcherLoop->moveToThread(priv->watcherThread); priv->host->moveToThread(priv->watcherThread); priv->impl->moveToThread(priv->watcherThread); connect(priv->watcherThread, &QThread::started, priv->watcherLoop, [=]{ QString displayEnv = (qgetenv("XDG_SESSION_TYPE") == "wayland") ? QLatin1String("WAYLAND_DISPLAY") : QLatin1String("DISPLAY"); QString display(qgetenv(displayEnv.toUtf8().data())); QUrl nodeUrl(QStringLiteral("local:ukui-idm-") + QString(qgetenv("USER")) + display); priv->host->setHostUrl(nodeUrl); priv->host->enableRemoting(priv->impl); priv->watcherLoop->exec(); }); connect(priv->impl, &FileEventHandlerImpl::reciveClientFileEvent, this, &FileInfoManager::remoteFileEvent); qRegisterMetaType("FileEventType"); // connect(priv->watcher, &KYSDK_FILEWATCHER::FileWatcher::fileAccessed, this, [=](QString name, QString parent){ // Q_EMIT fileChanged(FileAccessed, name, parent); // }); connect(priv->watcher, &KYSDK_FILEWATCHER::FileWatcher::fileAttrChanged, this, [=](QString name, QString parent){ Q_EMIT fileChanged(FileAttrChanged, name, parent); }); // connect(priv->watcher, &KYSDK_FILEWATCHER::FileWatcher::fileClosed, this, [=](QString name, QString parent){ // Q_EMIT fileChanged(FileClosed, name, parent); // }); // connect(priv->watcher, &KYSDK_FILEWATCHER::FileWatcher::fileCreated, this, [=](QString name, QString parent){ // Q_EMIT fileChanged(FileCreated, name, parent); // }); connect(priv->watcher, &KYSDK_FILEWATCHER::FileWatcher::fileDeleted, this, [=](QString name, QString parent){ Q_EMIT fileChanged(FileDeleted, name, parent); }); connect(priv->watcher, &KYSDK_FILEWATCHER::FileWatcher::fileIgnoredAutomatic, this, [=](QString name, QString parent){ Q_EMIT fileChanged(FileIgnoredAutomatic, name, parent); }); connect(priv->watcher, &KYSDK_FILEWATCHER::FileWatcher::fileModified, this, [=](QString name, QString parent){ Q_EMIT fileChanged(FileModified, name, parent); }); connect(priv->watcher, &KYSDK_FILEWATCHER::FileWatcher::fileMoveIn, this, [=](QString name, QString parent){ Q_EMIT fileChanged(FileMoveIn, name, parent); }); connect(priv->watcher, &KYSDK_FILEWATCHER::FileWatcher::fileMoveOut, this, [=](QString name, QString parent){ Q_EMIT fileChanged(FileMoveOut, name, parent); }); // connect(priv->watcher, &KYSDK_FILEWATCHER::FileWatcher::fileOpened, this, [=](QString name, QString parent){ // Q_EMIT fileChanged(FileOpened, name, parent); // }); priv->watcherThread->start(); } FileInfoManager::~FileInfoManager() { delete priv; } QSharedPointer FileInfoManager::getInfoByUri(const QString &uri) { QMutexLocker l(&priv->mutex); auto info = priv->hash.value(uri); return info; } void FileInfoManager::insertInfo(QSharedPointer info) { QMutexLocker l(&priv->mutex); priv->hash.insert(info->uri(), info); } void FileInfoManager::removeInfoPtrByUri(const QString &uri) { QMutexLocker l(&priv->mutex); priv->hash.remove(uri); } void FileInfoManager::addFileToWatcher(const QString &url, bool *ok) { if (url.isEmpty()) { if (ok) { *ok = false; } return; } QUrl tmp(url); QString path = tmp.toLocalFile(); if (!path.startsWith("/")) { if (ok) { *ok = false; return; } } QMutexLocker l(&priv->watcherMutex); int ret = priv->watcher->addWatchTarget(path, KYSDK_FILEWATCHER::FileWatcherType::PERIODIC, KYSDK_FILEWATCHER::FileWatcherAttribute::MODIFY|KYSDK_FILEWATCHER::FileWatcherAttribute::DELETE|KYSDK_FILEWATCHER::FileWatcherAttribute::ATTRIB); if (ok) { *ok = !ret; // 为0æ—¶æˆ�功 } } QStringList FileInfoManager::addFilesToWatcher(const QStringList &urls) { QStringList failedFiles; for (auto url : urls) { bool ok = false; addFileToWatcher(url, &ok); if (!ok && !url.isEmpty()) { failedFiles << url; } } return failedFiles; } void FileInfoManager::removeFileFromWatcher(const QString &url, bool *ok) { if (url.isEmpty()) { if (ok) { *ok = false; } return; } QUrl tmp(url); QString path = tmp.toLocalFile(); QMutexLocker l(&priv->watcherMutex); int ret = priv->watcher->removeWatchTarget(path); if (ok) { *ok = !ret; // 为0æ—¶æˆ�功 } } QStringList FileInfoManager::removeFilesFromWatcher(const QStringList &urls) { QStringList failedFiles; for (auto url : urls) { bool ok = false; removeFileFromWatcher(url, &ok); if (!ok && !url.isEmpty()) { failedFiles << url; } } return failedFiles; } peony-extensions/peony-intelligent-data-management-service/file/fileinfojob.cpp0000664000175000017500000005307415257160277027112 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #include "fileinfojob.h" #include "fileinfo_p.h" #include "fileinfomanager.h" #include "condition/condition.h" #include "ai/aiconditionshelper.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #undef signals #include #define PEONY_FILE_TIME_OPENED "metadata::peony-time-opened" #define PEONY_FILE_OPENED_COUNT "metadata::peony-opened-count" namespace UKUI { namespace IDM { class FileInfoJobPrivate{ public: FileInfoJobPrivate() { cancelled = false; canFetchInfos = false; hasCondition = false; } ~FileInfoJobPrivate() { if (conditionsHelper) { delete conditionsHelper; } } QList> infos; QSet> resultInfos; std::atomic_bool cancelled; std::atomic_bool canFetchInfos; bool hasCondition; bool addWatchByDefault; bool handleContentCondition = false; QList> andConditions; QList> orConditions; QStringList labels; AIConditionsHelper *conditionsHelper = nullptr; int spaceId = -1; }; } } using namespace UKUI::IDM; FileInfoJob *FileInfoJob::fromUris(const QStringList &uris, bool addWatchByDefault) { return new FileInfoJob(uris, true, addWatchByDefault); } FileInfoJob *FileInfoJob::fromPaths(const QStringList &paths, bool addWatchByDefault) { return new FileInfoJob(paths, false, addWatchByDefault); } FileInfoJob *FileInfoJob::fromInfos(const QList > &infos, bool addWatchByDefault) { auto job = new FileInfoJob; job->priv->addWatchByDefault = addWatchByDefault; job->priv->infos = infos; return job; } bool FileInfoJob::queryInfoSyncWithConditions(QSharedPointer &info, const QList> &andConditions, const QList> &orConditions) { g_autoptr (GFile) gfile = g_file_new_for_uri(info->priv->uri.toUtf8().constData()); g_autoptr (GFileInfo) gfileinfo = g_file_query_info(gfile, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME"," G_FILE_ATTRIBUTE_STANDARD_ICON"," G_FILE_ATTRIBUTE_STANDARD_TARGET_URI"," G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE"," G_FILE_ATTRIBUTE_STANDARD_SIZE"," G_FILE_ATTRIBUTE_TIME_ACCESS"," G_FILE_ATTRIBUTE_TIME_MODIFIED"," G_FILE_ATTRIBUTE_TIME_CREATED, G_FILE_QUERY_INFO_NONE, nullptr, nullptr); if (!gfileinfo) { return false; } else { updateInfoWithGFileInfo(info, gfile, gfileinfo); if (orConditions.isEmpty() && andConditions.isEmpty()) return true; else return infoMatchCondtions(info, andConditions, orConditions, false); } } FileInfoJob::~FileInfoJob() { delete priv; } void FileInfoJob::start() { // fixme: not use QThreadPool::globalInstance() QThreadPool::globalInstance()->start(this); } void FileInfoJob::cancel() { priv->cancelled = true; } void FileInfoJob::setConditions(const QList > &conditions) { priv->andConditions.clear(); priv->orConditions.clear(); if (conditions.isEmpty()) { priv->hasCondition = false; return; } for (auto condition : conditions) { if (condition->isAndCondition()) { priv->andConditions << condition; } else { priv->orConditions << condition; } } priv->hasCondition = true; if (!priv->conditionsHelper) { priv->conditionsHelper = new AIConditionsHelper; } } void FileInfoJob::setSpaceId(int spaceId) { priv->spaceId = spaceId; } void FileInfoJob::setLabels(const QStringList &labels) { if (labels.isEmpty()) { priv->labels.clear(); return; } priv->labels = labels; if (!priv->conditionsHelper) { priv->conditionsHelper = new AIConditionsHelper; } } void FileInfoJob::setHandleContentCondition(bool handleContentCondition) { priv->handleContentCondition = handleContentCondition; } void FileInfoJob::run() { priv->canFetchInfos = false; Q_EMIT started(); while (!priv->infos.isEmpty()) { auto info = priv->infos.takeFirst(); GError *error = nullptr; g_autoptr (GFile) gfile = g_file_new_for_uri(info->priv->uri.toUtf8().constData()); g_autoptr (GFileInfo) gfileinfo = g_file_query_info(gfile, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME"," G_FILE_ATTRIBUTE_STANDARD_ICON"," G_FILE_ATTRIBUTE_STANDARD_TARGET_URI"," G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE"," G_FILE_ATTRIBUTE_STANDARD_SIZE"," G_FILE_ATTRIBUTE_TIME_ACCESS"," G_FILE_ATTRIBUTE_TIME_MODIFIED"," G_FILE_ATTRIBUTE_TIME_CREATED"," G_FILE_ATTRIBUTE_RECENT_MODIFIED"," PEONY_FILE_OPENED_COUNT"," PEONY_FILE_TIME_OPENED"," "metadata::peony-file-label-ids", G_FILE_QUERY_INFO_NONE, nullptr, &error); if (error) { QString msg = error->message; g_error_free (error); { QMutexLocker l(&info->priv->mutex); info->priv->state = FileInfoPrivate::Invalid; } Q_EMIT errored(msg); continue; } if (priv->cancelled) { priv->infos.clear(); priv->resultInfos.clear(); Q_EMIT cancelled(); return; } updateInfoWithGFileInfo(info, gfile, gfileinfo); bool match = true; if (priv->hasCondition) { match = infoMatchCondtions(info, priv->andConditions, priv->orConditions, priv->handleContentCondition); } if (!priv->labels.isEmpty()) { if (match) { // 如果基本æ�¡ä»¶ä¸�匹é…�则ä¸�å�šæ ‡ç­¾åŒ¹é…� match = infoMatchLabels(info, priv->labels); } } if (match) { if (priv->addWatchByDefault) { FileInfoManager::globalInstance()->addFileToWatcher(info->uri()); } priv->resultInfos << info; Q_EMIT infoUpdated(info); } } priv->canFetchInfos = true; Q_EMIT finished(); } QList > FileInfoJob::getInfos() { if (priv->canFetchInfos) { return priv->resultInfos.values(); } return QList>(); } void FileInfoJob::handleCancelWithSpaceId(int spaceId) { if (spaceId == priv->spaceId) { cancel(); } } void FileInfoJob::updateInfoWithGFileInfo(QSharedPointer &info, GFile *gfile, GFileInfo *gfileinfo) { g_autofree gchar *path = g_file_get_path(gfile); QString displayName = g_file_info_get_attribute_string(gfileinfo, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME); GIcon *gicon = g_file_info_get_icon(gfileinfo); QString iconName = Peony::FileUtils::getIconStringFromGIconThreadSafety(gicon); guint64 timeAcessSec = g_file_info_get_attribute_uint64(gfileinfo, G_FILE_ATTRIBUTE_TIME_ACCESS); guint64 timeModifiedSec = g_file_info_get_attribute_uint64(gfileinfo, G_FILE_ATTRIBUTE_TIME_MODIFIED); guint64 timeCreatedSec = g_file_info_get_attribute_uint64(gfileinfo, G_FILE_ATTRIBUTE_TIME_CREATED); if (g_file_info_has_attribute(gfileinfo, PEONY_FILE_TIME_OPENED)) { QString peonyTimeOpenedString = g_file_info_get_attribute_string(gfileinfo, PEONY_FILE_TIME_OPENED); timeAcessSec = peonyTimeOpenedString.toULongLong(); } int openCount = 0; if (g_file_info_has_attribute(gfileinfo, PEONY_FILE_OPENED_COUNT)) { QString openCountString = g_file_info_get_attribute_string(gfileinfo, PEONY_FILE_OPENED_COUNT); openCount = openCountString.toULongLong(); } guint64 timeAcessMsec = timeAcessSec * 1000; guint64 timeModifiedMsec = timeModifiedSec * 1000; guint64 timeCreatedMsec = timeCreatedSec * 1000; gint64 timeRecentModified = g_file_info_get_attribute_int64(gfileinfo, G_FILE_ATTRIBUTE_RECENT_MODIFIED); const gchar *ctype = g_file_info_get_content_type(gfileinfo); QString contentType = ctype; g_autofree gchar *ftype = g_content_type_get_description(ctype); QString fileType = ftype; g_autofree gchar *formatsize = nullptr; guint64 size = g_file_info_get_size(gfileinfo); if (contentType != "inode/directory") { formatsize = g_format_size(size); } if (!path) { if (g_file_info_has_attribute(gfileinfo, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI)) { QUrl url(g_file_info_get_attribute_as_string(gfileinfo, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI)); path = g_strdup(url.toLocalFile().toUtf8().constData()); } } QString dateString; QString createString = Peony::GlobalSettings::getInstance()->transToSystemTimeFormat(timeCreatedSec); createString = tr("Create Date: %1").arg(createString); QString accessString = Peony::GlobalSettings::getInstance()->transToSystemTimeFormat(timeAcessSec); accessString = tr("Open Date: %1").arg(accessString); QString modifiyString = Peony::GlobalSettings::getInstance()->transToSystemTimeFormat(timeModifiedSec); //modifiyString = tr("Modify Date: %1").arg(modifiyString); if (timeAcessSec > timeModifiedSec) { // 显示打开时间 dateString = accessString; } else if (timeModifiedSec > timeCreatedSec) { // fixme: 由于WPS等文件修改时是以临时文件移动方å¼�进行原文件覆盖,所以创建时间和修改时间在ä¿�å­˜å�Žæ˜¯ä¸€è‡´çš„,这里先显示修改时间,å�Žç»­éœ€è¦�结å�ˆç‰ˆæœ¬åˆ¤æ–­çš„ä¿¡æ�¯æ�¥å¤„ç�†æ­¤å¤„显示的内容 // 显示修改时间 dateString = modifiyString; } else { // 显示创建时间 dateString = createString; } QString parentPath = path; parentPath.truncate(parentPath.lastIndexOf('/')); // 标记信æ�¯ auto metaInfo = Peony::FileMetaInfo::fromGFileInfo(info->priv->uri, gfileinfo); auto labelStrings = metaInfo->getMetaInfoStringList("peony-file-label-ids"); QList labelIds; QList labelColors; // fixme: 线程安全问题 auto labelModel = FileLabelModel::getGlobalModel(); for (QString labelString : labelStrings) { int labelId = labelString.toInt(); auto item = labelModel->itemFromId(labelId); if (item) { labelColors << item->color(); labelIds << labelId; } } QString version = "test"; // thread safety { QMutexLocker l(&info->priv->mutex); info->priv->path = path; info->priv->parentPath = parentPath; info->priv->name = displayName; info->priv->iconName = iconName; info->priv->timeAccessMsec = timeAcessMsec; info->priv->timeModifiedMsec = timeModifiedMsec; info->priv->timeCreatedMsec = timeCreatedMsec; info->priv->openDateString = accessString; info->priv->modifyDateString = modifiyString; info->priv->createDateString = createString; info->priv->dateString = modifiyString; info->priv->version = version; info->priv->mimeType = contentType; info->priv->fileType = fileType; info->priv->size = size; info->priv->sizeFormat = formatsize; info->priv->labelIds = labelIds; info->priv->labelColors = labelColors; info->priv->timeRecentModified = timeRecentModified; info->priv->openCount = openCount; info->priv->state = FileInfoPrivate::State::Valid; //info->priv->ischecked = false; } } bool FileInfoJob::infoMatchCondtions(QSharedPointer &info, const QList > &andConditions, const QList > &orConditions, bool handleContentCondition) { QString displayName = info->displayName(); quint64 size = info->size(); QString contentType = info->mimeType(); quint64 timeModifiedMsec = info->timeModifiedMsec(); QString path = info->path(); bool match = true; // 如果符å�ˆæ‰€æœ‰æ�¡ä»¶, 则match最终会为true, 如果没有或æ�¡ä»¶åˆ™matchåˆ�始值为true, å�¦åˆ™ä¸ºfalse match = orConditions.count() == 0; // 或æ�¡ä»¶, å�ªéœ€è¦�满足其中之一å�³å�¯é€šè¿‡ for (auto condition : orConditions) { // 如果存在æ�¡ä»¶åŒ¹é…�则跳过, 并且设置match为true switch (condition->type()) { case Condition::FileName: { match = condition->isFileNameMatchedWithKeywords(displayName); break; } case Condition::FileContent: { // 或æ�¡ä»¶çš„æ–‡ä»¶å†…容匹é…�ç›®å‰�仅用于普通æ�œç´¢ï¼Œè¿™é‡Œå�¯ä»¥è·³è¿‡ // if (handleContentCondition) { QString contentDecription = condition->getFileContentContent(); AIConditionsHelper helper; match = helper.isFileMatchedWithDescriptionCondition(info->path(), contentDecription); //} break; } case Condition::FileSize: { match = condition->isFileSizeMatchedWithSize(size); break; } case Condition::FileType: { int subType = condition->getFileTypeSelectionType(); if (subType < 0) { match = condition->isFileTypeMatchedWithSuffixes(displayName); } else { match = condition->isFileTypeMatchedWithSubType(subType, displayName, contentType); } break; } case Condition::DateRange: { match = condition->isFileMatchedWithDate(0, timeModifiedMsec); break; } case Condition::SearchLocation: { match = condition->isFileMatchedWithSearchLocation(path); break; } default: { match = false; break; } } // 如果有一个æ�¡ä»¶åŒ¹é…�, 则跳出循环 if (match) { break; } } if (!match) { return match; } else { // 如果存在ä¸�匹é…�的且æ�¡ä»¶, 则跳过此次æµ�程 for (auto condition : andConditions) { // 如果存在æ�¡ä»¶ä¸�匹é…�则跳过, 并且设置match为false switch (condition->type()) { case Condition::FileName: { match = condition->isFileNameMatchedWithKeywords(displayName); break; } case Condition::FileContent: { // 与æ�¡ä»¶çš„æ–‡ä»¶å†…容æ�œç´¢ç›®å‰�结å�ˆè¯­ä¹‰æ�œç´¢ä½¿ç”¨ï¼Œè¿™é‡Œéœ€è¦�区分是语义æ�œç´¢è¿˜æ˜¯åЍæ€�添加场景 //if (handleContentCondition) { QString contentDecription = condition->getFileContentContent(); AIConditionsHelper helper; match = helper.isFileMatchedWithDescriptionCondition(info->path(), contentDecription); //} break; } case Condition::FileType: { int subType = condition->getFileTypeSelectionType(); if (subType < 0) { match = condition->isFileTypeMatchedWithSuffixes(displayName); } else { match = condition->isFileTypeMatchedWithSubType(subType, displayName, contentType); } break; } case Condition::FileSize: { match = condition->isFileSizeMatchedWithSize(size); break; } case Condition::SearchLocation: { match = condition->isFileMatchedWithSearchLocation(path); break; } case Condition::DateRange: { match = condition->isFileMatchedWithDate(0, timeModifiedMsec); break; } default: match = true; break; } // 存在ä¸�匹é…�, 则跳出循环 if (!match) { break; } } } return match; } bool FileInfoJob::infoMatchLabels(QSharedPointer &info, const QStringList &labels) { QUrl url = info->uri(); QString filePath = url.toLocalFile(); return priv->conditionsHelper->isFileMatchedWithLables(filePath, labels); } bool FileInfoJob::infoMatchCondtions(const QFileInfo &fileinfo, const QList> &andConditions, const QList > &orConditions) { QString displayName = fileinfo.fileName(); QString path = fileinfo.absoluteFilePath(); quint64 size = fileinfo.size(); QString contentType; if (fileinfo.isDir()) { contentType = "inode/directory"; } else { //QMimeDatabase db; //QMimeType mimeType = db.mimeTypeForFile(fileinfo.absoluteFilePath(), QMimeDatabase::MatchExtension); // fixme: æ�œç´¢æ ¹ç›®å½•匹é…�时调用此方法内存会飙å�‡ g_autofree gchar *contenttype = g_content_type_guess(path.toUtf8().constData(), nullptr, size, nullptr); contentType = contenttype; } quint64 timeModifiedMsec = fileinfo.fileTime(QFile::FileModificationTime).toMSecsSinceEpoch(); QSharedPointer info = QSharedPointer(new FileInfo); info->priv->name = displayName; info->priv->size = size; info->priv->mimeType = contentType; info->priv->timeModifiedMsec = timeModifiedMsec; info->priv->path = path; return infoMatchCondtions(info, andConditions, orConditions, false); } FileInfoJob::FileInfoJob(const QStringList &args, bool isUriFormat, bool addWatchByDefault, QObject *parent) : QObject(parent), QRunnable() { setAutoDelete(false); priv = new FileInfoJobPrivate; priv->addWatchByDefault = addWatchByDefault; if (isUriFormat) { for (auto arg : args) { priv->infos.append(FileInfo::fromUri(arg)); } } else { for (auto arg : args) { priv->infos.append(FileInfo::fromPath(arg)); } } } void FileInfoJob::updateFileInfoDataformat(QSharedPointer &info) { GError *error = nullptr; g_autoptr (GFile) gfile = g_file_new_for_uri(info->priv->uri.toUtf8().constData()); g_autoptr (GFileInfo) gfileinfo = g_file_query_info(gfile, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME"," G_FILE_ATTRIBUTE_STANDARD_ICON"," G_FILE_ATTRIBUTE_STANDARD_TARGET_URI"," G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE"," G_FILE_ATTRIBUTE_STANDARD_SIZE"," G_FILE_ATTRIBUTE_TIME_ACCESS"," G_FILE_ATTRIBUTE_TIME_MODIFIED"," G_FILE_ATTRIBUTE_TIME_CREATED"," G_FILE_ATTRIBUTE_RECENT_MODIFIED"," PEONY_FILE_OPENED_COUNT"," PEONY_FILE_TIME_OPENED"," "metadata::peony-file-label-ids", G_FILE_QUERY_INFO_NONE, nullptr, &error); if (error) { QString msg = error->message; g_error_free (error); { QMutexLocker l(&info->priv->mutex); info->priv->state = FileInfoPrivate::Invalid; } return; } updateInfoWithGFileInfo(info, gfile, gfileinfo); } FileInfoJob::FileInfoJob() { setAutoDelete(false); priv = new FileInfoJobPrivate; priv->addWatchByDefault = true; } peony-extensions/peony-intelligent-data-management-service/file/fileinfo_p.h0000664000175000017500000000320315257160264026364 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef FILEINFO_P_H #define FILEINFO_P_H #include #include namespace UKUI { namespace IDM { class FileInfoPrivate { public: enum State { Invalid, Valid }; FileInfoPrivate() {} State state = Invalid; QString uri; QString path; QString parentPath; QString name; QString iconName; QString createDateString; QString modifyDateString; QString openDateString; QString dateString; quint64 timeAccessMsec = -1; quint64 timeModifiedMsec = -1; quint64 timeCreatedMsec = -1; qint64 timeRecentModified = -1; QString version; QString mimeType; QString fileType; quint64 size; QString sizeFormat; QList labelIds; QList labelColors; quint64 openCount = 0; bool ischecked = false; QMutex mutex; }; } } #endif // FILEINFO_P_H peony-extensions/peony-intelligent-data-management-service/ai/0000775000175000017500000000000015257160277023561 5ustar fengfengpeony-extensions/peony-intelligent-data-management-service/ai/aiconditionshelper.cpp0000664000175000017500000000672715257160264030160 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #include "aiconditionshelper.h" #include #include #include #include AIConditionsHelper::AIConditionsHelper(QObject *parent) : QObject{parent} { #ifdef USE_AI session = data_management_create_session(); if (session) { inited = true; } #endif } bool AIConditionsHelper::isValid() { return inited; } AIConditionsHelper::~AIConditionsHelper() { #ifdef USE_AI data_management_destroy_session(session); #endif } QJsonDocument AIConditionsHelper::pharseConditions(const QString &description, bool *ok) { QJsonDocument doc; #ifdef USE_AI if (!inited) { setOkResult(ok, false); return doc; } char *results = nullptr; QJsonObject obj; obj["description"] = description; QJsonDocument descriptionDoc(obj); DataManagementStatus ret = data_management_extract_search_conditions(session, descriptionDoc.toJson().constData(), &results); if (!ret.success) { setOkResult(ok, false); return doc; } doc = QJsonDocument::fromJson(results); setOkResult(ok, true); return doc; #else setOkResult(ok, false); return doc; #endif } bool AIConditionsHelper::isFileMatchedWithDescriptionCondition(const QString &filePath, const QString &descriptionCondition, bool *ok) { #ifdef USE_AI bool matched = false; if (!inited) { setOkResult(ok, false); return matched; } QJsonObject obj; obj["file"] = filePath; obj["description"] = descriptionCondition; QJsonDocument doc(obj); bool result = false; auto ret = data_management_is_file_relevant_to_description(session, doc.toJson().constData(), &result); if (!ret.success) { return matched; } if (result == 1) { matched = true; } setOkResult(ok, true); return matched; #else setOkResult(ok, false); return false; #endif } bool AIConditionsHelper::isFileMatchedWithLables(const QString &filePath, const QStringList &labels, bool *ok) { #ifdef USE_AI bool matched = false; if (!inited) { setOkResult(ok, false); return matched; } QJsonObject obj; obj["file"] = filePath; obj["tags"] = QJsonArray::fromStringList(labels); QJsonDocument doc(obj); bool result = false; DataManagementStatus ret = data_management_is_file_relevant_to_tags(session, doc.toJson().constData(), &result); if (!ret.success) { return matched; } if (result == 1) { matched = true; } setOkResult(ok, true); return matched; #else setOkResult(ok, false); return false; #endif } void AIConditionsHelper::setOkResult(bool *ok, bool result) { if (ok) { *ok = result; } } peony-extensions/peony-intelligent-data-management-service/ai/ailabelhelper.cpp0000664000175000017500000001444015257160264027055 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #include "ailabelhelper.h" #include #include #include #include #include #include #include AILabelHelper::AILabelHelper(QObject *parent) : QObject{parent} { #ifdef USE_AI session = data_management_create_session(); if (session) { inited = true; } #endif } AILabelHelper::~AILabelHelper() { #ifdef USE_AI data_management_destroy_session(session); #endif } bool AILabelHelper::isValid() { return inited; } QStringList AILabelHelper::getTopLabels(int maxCount, bool *ok) { QStringList list; #ifdef USE_AI if (!inited) { setOkResult(ok, false); return list; } char *results = nullptr; auto ret = data_management_get_all_tags(session, &results); if (!ret.success) { setOkResult(ok, false); return list; } QJsonDocument doc = QJsonDocument::fromJson(results); if (doc.isObject()) { QJsonObject obj = doc.object(); QJsonValue tagsValue = obj.value("tags"); if (tagsValue.isArray()) { QJsonArray tagsArray = tagsValue.toArray(); for (auto tag : tagsArray) { list << tag.toString(); if (maxCount > 0 && list.count() == maxCount) break; } } } else if (doc.isArray()) { QJsonArray tagsArray = doc.array(); for (auto tag : tagsArray) { list << tag.toString(); if (maxCount > 0 && list.count() == maxCount) break; } } data_management_destroy_result(results); setOkResult(ok, true); return list; #else setOkResult(ok, false); return list; #endif } QStringList AILabelHelper::getSimilarLabels(const QString &label, bool *ok) { QStringList list; #ifdef USE_AI if (!inited) { setOkResult(ok, false); return list; } QJsonObject obj; QStringList labels; labels << label; obj["tags"] = QJsonArray::fromStringList(labels); QJsonDocument tagsDoc(obj); char *results = nullptr; auto ret = data_management_search_similar_tags(session, tagsDoc.toJson().constData(), &results); if (!ret.success) { setOkResult(ok, false); return list; } QJsonDocument doc = QJsonDocument::fromJson(results); if (doc.isObject()) { QJsonObject obj = doc.object(); QJsonValue tagsValue = obj.value("tags"); if (tagsValue.isArray()) { QJsonArray tagsArray = tagsValue.toArray(); for (auto tag : tagsArray) { list << tag.toString(); } } } else if (doc.isArray()) { QJsonArray tagsArray = doc.array(); for (auto tag : tagsArray) { list << tag.toString(); } } data_management_destroy_result(results); setOkResult(ok, true); return list; #else setOkResult(ok, false); return list; #endif } QStringList AILabelHelper::getFileLabels(const QString &filePath, bool *ok) { QStringList list; #ifdef USE_AI if (!inited) { setOkResult(ok, false); return list; } QJsonObject obj; QStringList files; files << filePath; obj["files"] = QJsonArray::fromStringList(files); QJsonDocument doc(obj); char *results = nullptr; auto ret = data_management_get_tags_of_files(session, doc.toJson().constData(), &results); if (!ret.success) { setOkResult(ok, false); return list; } doc = QJsonDocument::fromJson(results); if (doc.isArray()) { QJsonArray resultsArray = doc.array(); for (auto result : resultsArray) { if (result.isObject()) { QJsonObject obj = result.toObject(); QJsonValue tagsValue = obj.value("tags"); if (tagsValue.isArray()) { QJsonArray tagsArray = tagsValue.toArray(); for (auto tag : tagsArray) { list << tag.toString(); } } break; } } } data_management_destroy_result(results); setOkResult(ok, true); return list; #else setOkResult(ok, false); return list; #endif } QStringList AILabelHelper::getFilesByLabels(const QStringList &labels, bool *ok) { QStringList list; #ifdef USE_AI if (!inited) { setOkResult(ok, false); return list; } qDebug() << labels; QJsonArray tagsArray = QJsonArray::fromStringList(labels); QJsonObject obj; obj["tags"] = tagsArray; QJsonDocument doc(obj); char *results = nullptr; qDebug() << doc; auto ret = data_management_search_files_about_tags(session, doc.toJson().constData(), &results); if (!ret.success) { setOkResult(ok, false); return list; } doc = QJsonDocument::fromJson(results); if (doc.isObject()) { obj = doc.object(); QJsonValue value = obj["files"]; if (value.isArray()) { QJsonArray filesArray = value.toArray(); for (auto file : filesArray) { list << file.toString(); } } } else if (doc.isArray()) { QJsonArray filesArray = doc.array(); for (auto file : filesArray) { list << file.toString(); } } data_management_destroy_result(results); setOkResult(ok, true); return list; #else setOkResult(ok, false); return list; #endif } void AILabelHelper::setOkResult(bool *ok, bool result) { if (ok) { *ok = result; } } peony-extensions/peony-intelligent-data-management-service/ai/aiconditionshelper.h0000664000175000017500000000311715257160264027613 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef AICONDITIONSHELPER_H #define AICONDITIONSHELPER_H #include #ifdef USE_AI #include #endif class AIConditionsHelper : public QObject { Q_OBJECT public: explicit AIConditionsHelper(QObject *parent = nullptr); ~AIConditionsHelper(); QJsonDocument pharseConditions(const QString &description, bool *ok = nullptr); bool isFileMatchedWithDescriptionCondition(const QString &filePath, const QString &descriptionCondition, bool *ok = nullptr); bool isFileMatchedWithLables(const QString &filePath, const QStringList &labels, bool *ok = nullptr); bool isValid(); private: void setOkResult(bool *ok, bool result); #ifdef USE_AI DataManagementSession *session = nullptr; #endif bool inited = false; }; #endif // AICONDITIONSHELPER_H peony-extensions/peony-intelligent-data-management-service/ai/aisearchtask.cpp0000664000175000017500000002353515257160277026737 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #include "aisearchtask.h" #include "file/fileinfo.h" #include "file/fileinfojob.h" #include "ai/aiconditionshelper.h" #include "ai/ailabelhelper.h" #include "condition/condition.h" #include #include #include #include #include #include "model/modelcontroller.h" #include AISearchTask::AISearchTask(const QString &description, QObject *parent) : QObject{parent}, m_description{description} { cancelled = false; } void AISearchTask::cancel() { cancelled = true; } void AISearchTask::doQuery() { // connect(this, &AISearchTask::finished, this, [=](bool successed, const QList> &results, const QJsonDocument &conditions, const QString &errorMsg){ // cancel(); // }); QList infos; DataManagementSession *session = data_management_create_session(); if (!session) { Q_EMIT finished(false, infos, QJsonDocument(), tr("Failed to create ai search session.")); return; } if (cancelled) { data_management_destroy_session(session); Q_EMIT finished(false, infos, QJsonDocument(), tr("Search task cancelled.")); return; } QJsonDocument conditionsDoc; if (pharseConditions) { AIConditionsHelper helper; conditionsDoc = helper.pharseConditions(m_description); qDebug() << conditionsDoc; QJsonObject conditionsObj = conditionsDoc.object(); auto conditions = Condition::generateContitionsFromDescription(conditionsObj); //å°†æ�¡ä»¶è¿›è¡Œè½¬æ�¢ã€�AI文件内容返回的type为3对应文管文件内容类型type为7 if(conditions.size()==1 && conditions[0]->type() == Condition::DateRange){ auto fileContentObj = conditionsObj[QString::number(0)].toObject(); fileContentObj["condition type"] = int(Condition::FileContent); fileContentObj["content"] = m_description; fileContentObj["orCondition"] = false; conditionsObj[QString::number(0)] = fileContentObj; } conditions = Condition::generateContitionsFromDescription(conditionsObj); auto labels = Condition::getLabelsFromDescription(conditionsObj); bool hasConditions = false; bool hasLabels = false; bool hasContentConditions = false; QString contentDescription; hasConditions = !conditions.isEmpty(); // 获å�–文件内容æ��è¿°æ�¡ä»¶ for (auto condition : conditions) { if (condition->type() == Condition::FileContent) { hasContentConditions = true; contentDescription = condition->getFileContentContent(); break; } } hasLabels = !labels.isEmpty(); QSet labelsMatchedInfos; QSet contentMatchedInfos; QSet basicMatchedInfos; QSet resultInfos; if (cancelled) { goto out; } if (hasLabels) { // 获å�–标签匹é…�结果 AILabelHelper labelHelper; QStringList files = labelHelper.getFilesByLabels(labels); for (auto path : files) { //auto info = UKUI::IDM::FileInfo::fromPath(path); labelsMatchedInfos << path; } } if (hasContentConditions) { // 获å�–文件内容匹é…�结果,注æ„�这里使用的ä¸�是普通æ�œç´¢æŒ‰å…³é”®å­—的匹é…�æ–¹å¼� QJsonObject obj; obj["text"] = contentDescription; QJsonDocument doc(obj); char* searchresults = nullptr; data_management_similarity_search(session, doc.toJson().constData(), &searchresults); QJsonDocument resultDoc = QJsonDocument::fromJson(searchresults); data_management_destroy_result(searchresults); QJsonArray resultArray = resultDoc.array(); if (cancelled) { goto out; } // 使用语义解æž�获å�–çš„æ�¡ä»¶è¿›è¡Œè¿‡æ»¤ QList> orConditions; QList> andConditions; for (auto condition : conditions) { if (condition->isAndCondition()) { andConditions << condition; } else { orConditions << condition; } } for (auto item : resultArray) { if (cancelled) { goto out; } if (item.isObject()) { auto result = item.toObject(); auto value = result.value("filepath"); QString path = value.toString(); auto info = UKUI::IDM::FileInfo::fromPath(path); if (UKUI::IDM::FileInfoJob::infoMatchCondtions(QFileInfo(path), andConditions, orConditions)) { contentMatchedInfos << path; } } } } else if (!hasContentConditions && hasConditions) { // fixme: ä¸�包å�«å†…容æ��述的语义æ�œç´¢ï¼ŒèŽ·å�–符å�ˆåŸºæœ¬æ�¡ä»¶çš„æ–‡ä»¶ç»“果,这里应该退化æˆ�普通æ�œç´¢çš„æµ�程 } if (!hasConditions) { // 如果å�ªæœ‰æ ‡ç­¾æ�¡ä»¶åˆ™ç›´æŽ¥è¿”回标签结果 infos = labelsMatchedInfos.values(); } else { // 如果å�Œæ—¶æœ‰æ ‡ç­¾æ�¡ä»¶å’ŒåŸºç¡€æ�¡ä»¶ï¼Œåˆ™éœ€è¦�å�–å�„自结果的交集 if (hasContentConditions) { resultInfos = contentMatchedInfos; if (hasLabels) resultInfos = resultInfos.intersect(labelsMatchedInfos); infos = resultInfos.values(); } else if (hasConditions) { resultInfos = basicMatchedInfos; if (hasLabels) resultInfos = resultInfos.intersect(labelsMatchedInfos); infos = resultInfos.values(); } } } else { // 将整段description作为token进行æ�œç´¢ QJsonObject obj; obj["text"] = m_description; QJsonDocument doc(obj); char* searchresults = nullptr; data_management_similarity_search(session, doc.toJson().constData(), &searchresults); QJsonDocument resultDoc = QJsonDocument::fromJson(searchresults); data_management_destroy_result(searchresults); QJsonArray resultArray = resultDoc.array(); if (cancelled) { goto out; } QSet labelsMatchedFiles; QSet conditionsMatchedFiles; bool hasLabels = false; auto labels = Condition::getLabelsFromDescription(m_conditionDescription); if (!labels.isEmpty()) { hasLabels = true; AILabelHelper helper; QStringList filesMatchedLabels = helper.getFilesByLabels(labels); for (auto filePath : filesMatchedLabels) { labelsMatchedFiles << filePath;//UKUI::IDM::FileInfo::fromPath(filePath); } if (cancelled) { goto out; } } // 使用手动设置的æ�¡ä»¶è¿›è¡Œè¿‡æ»¤ auto conditions = Condition::generateContitionsFromDescription(m_conditionDescription); QList> orConditions; QList> andConditions; for (auto condition : conditions) { if (condition->isAndCondition()) { andConditions << condition; } else { orConditions << condition; } } for (auto item : resultArray) { if (cancelled) { goto out; } if (item.isObject()) { auto result = item.toObject(); auto value = result.value("filepath"); QString path = value.toString(); //auto info = UKUI::IDM::FileInfo::fromPath(path); if (UKUI::IDM::FileInfoJob::infoMatchCondtions(QFileInfo(path), andConditions, orConditions)) { conditionsMatchedFiles << path; } } } if (hasLabels) { auto set = conditionsMatchedFiles; set = set.intersect(labelsMatchedFiles); infos = set.values(); } else { infos = conditionsMatchedFiles.values(); } } out: data_management_destroy_session(session); if (cancelled) { infos.clear(); //Q_EMIT finished(false, infos, QJsonDocument(), tr("Search task cancelled.")); } else { Q_EMIT finished(true,infos, conditionsDoc, nullptr); //resultInfos = infos; } } void AISearchTask::cancelWithSpaceId(int spaceId) { if (this->spaceId == spaceId) { cancel(); } } void AISearchTask::setPharseConditions(bool newPharseConditions) { pharseConditions = newPharseConditions; } void AISearchTask::setFilterConditionDescription(const QVariant &conditionDescription) { m_conditionDescription = conditionDescription; } void AISearchTask::setSpaceId(int spaceId) { this->spaceId = spaceId; } peony-extensions/peony-intelligent-data-management-service/ai/aisearchtask.h0000664000175000017500000000461215257160264026373 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef AISEARCHTASK_H #define AISEARCHTASK_H #include #include #include #include #include #include #include namespace UKUI { namespace IDM { class FileInfo; } } class AISearchTask : public QObject { Q_OBJECT public: explicit AISearchTask(const QString &description, QObject *parent = nullptr); /*! * \brief setPharseConditions * 是å�¦å¯¹è¾“入的description进行语义解æž�转为æ�¡ä»¶ä¹‹å�Žå†�进行æ�œç´¢ * \param newPharseConditions */ void setPharseConditions(bool newPharseConditions); /*! * \brief setFilterConditionDescription * 设置用于过滤结果的æ�¡ä»¶é…�置,å�ªæœ‰åœ¨pharseConditions为falseæ—¶æ‰�有效果 * \param conditionDescription */ void setFilterConditionDescription(const QVariant &conditionDescription); void setSpaceId(int spaceId); Q_SIGNALS: void finisheds(bool successed, const QList &results, const QJsonDocument &conditions, const QString &errorMsg); void finished(bool successed, const QList &results, const QJsonDocument &conditions, const QString &errorMsg); void searchcontentload(QString uri, QString modified, QString filetype,QString size); public Q_SLOTS: void cancel(); void doQuery(); void cancelWithSpaceId(int spaceId); private: std::atomic_bool cancelled; bool pharseConditions = false; QString m_description; QVariant m_conditionDescription; QList> resultInfos; int spaceId = -1; }; #endif // AISEARCHTASK_H peony-extensions/peony-intelligent-data-management-service/ai/ailabelhelper.h0000664000175000017500000000303115257160264026514 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef AILABELHELPER_H #define AILABELHELPER_H #include #ifdef USE_AI #include #endif class AILabelHelper : public QObject { Q_OBJECT public: explicit AILabelHelper(QObject *parent = nullptr); ~AILabelHelper(); bool isValid(); QStringList getTopLabels(int maxCount, bool *ok = nullptr); QStringList getSimilarLabels(const QString &label, bool *ok = nullptr); QStringList getFileLabels(const QString &filePath, bool *ok = nullptr); QStringList getFilesByLabels(const QStringList &labels, bool *ok = nullptr); private: void setOkResult(bool *ok, bool result); #ifdef USE_AI DataManagementSession *session = nullptr; #endif bool inited = false; }; #endif // AILABELHELPER_H peony-extensions/peony-intelligent-data-management-service/ai/aipreviewhelper.h0000664000175000017500000000261715257160264027127 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef AIPREVIEWHELPER_H #define AIPREVIEWHELPER_H #include #ifdef USE_AI #include #endif class AIPreviewHelper : public QObject { Q_OBJECT public: explicit AIPreviewHelper(QObject *parent = nullptr); ~AIPreviewHelper(); bool isValid(); QStringList getFileLabels(const QString &filePath, bool *ok = nullptr); QString getFileSummary(const QString &filePath, bool *ok = nullptr); private: void setOkResult(bool *ok, bool result); #ifdef USE_AI DataManagementSession *session = nullptr; #endif bool inited = false; }; #endif // AIPREVIEWHELPER_H peony-extensions/peony-intelligent-data-management-service/ai/aipreviewhelper.cpp0000664000175000017500000000735615257160264027467 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #include "aipreviewhelper.h" #include #include #include #include #include #include #include "model/modelcontroller.h" AIPreviewHelper::AIPreviewHelper(QObject *parent) : QObject{parent} { #ifdef USE_AI session = data_management_create_session(); if (session) { inited = true; } #endif } AIPreviewHelper::~AIPreviewHelper() { #ifdef USE_AI data_management_destroy_session(session); #endif } bool AIPreviewHelper::isValid() { return inited; } QStringList AIPreviewHelper::getFileLabels(const QString &filePath, bool *ok) { QStringList list; #ifdef USE_AI if (!inited) { setOkResult(ok, false); return list; } QJsonObject obj; QStringList files; files << filePath; obj["files"] = QJsonArray::fromStringList(files); QJsonDocument doc(obj); char *results = nullptr; auto ret = data_management_get_tags_of_files(session, doc.toJson().constData(), &results); if (!ret.success) { setOkResult(ok, false); return list; } doc = QJsonDocument::fromJson(results); if (doc.isArray()) { QJsonArray resultsArray = doc.array(); for (auto result : resultsArray) { if (result.isObject()) { QJsonObject obj = result.toObject(); QJsonValue tagsValue = obj.value("tags"); if (tagsValue.isArray()) { QJsonArray tagsArray = tagsValue.toArray(); for (auto tag : tagsArray) { list << tag.toString(); } } break; } } } data_management_destroy_result(results); setOkResult(ok, true); return list; #else setOkResult(ok, false); return list; #endif } QString AIPreviewHelper::getFileSummary(const QString &filePath, bool *ok) { QString summary; #ifdef USE_AI if (!inited) { setOkResult(ok, false); return summary; } QJsonObject obj; QStringList files; files << filePath; obj["files"] = QJsonArray::fromStringList(files); QJsonDocument doc(obj); char *results = nullptr; auto ret = data_management_get_summarys_of_files(session, doc.toJson().constData(), &results); if (!ret.success) { setOkResult(ok, false); return summary; } doc = QJsonDocument::fromJson(results); if (doc.isArray()) { QJsonArray resultsArray = doc.array(); for (auto result : resultsArray) { if (result.isObject()) { QJsonObject obj = result.toObject(); summary = obj["summary"].toString(); break; } } } data_management_destroy_result(results); setOkResult(ok, true); return summary; #else setOkResult(ok, false); return summary; #endif } void AIPreviewHelper::setOkResult(bool *ok, bool result) { if (ok) { *ok = result; } } ././@LongLink0000644000000000000000000000015300000000000011602 Lustar rootrootpeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service_ky.tspeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service0000664000175000017500000002372415257160264033244 0ustar fengfeng AISearchTask Failed to create ai search session. ai ىزدۅۅ ماشعۇلاتىنى قۇرۇۇ جەڭىلۉۉ بولدۇ . Search task cancelled. ىزدۅۅ مىلدەتى ارعادان قالتىرىلدى. Condition File name contains "%1" ۅجۅت ناامى «٪1» نى ۅز ىچىنە الات File name without "%1" «٪1» بولبوعون ۅجۅت ناامى File type contains "%1" ۅجۅت تۉرۉ «٪1» نى ۅز ىچىنە الات By suffix قوشۇمچاسى Folder تىزىمدىك Plain Text تازا تەكىست WPS Document WPS ۅجۅتۉۉ PDF Image سۉرۅت Video ايىپ Audio دووش File type contains %1 ۅجۅت تۉرۉ Ùª1 نى ۅز ىچىنە الات All باردىعى Empty(0K) كۅڭدۅي(0K) Tiny(0-16K) كىچىككىنە (0-16K) Small(16K-1M) كىچىك (16K-1M) Medium(1M-128M) ورتوچو (1M-128M) Big(128M-1G) Ú†ÙˆÚ­(128M-1G) Large(1-4G) Ú†ÙˆÚ­(1-4G) Great(>4G) قالتىس(>4G) File size contains %1 ۅجۅت چوڭدۇعۇ Ùª1 نى ۅز ىچىنە الات File size without %1 ۅجۅت چوڭدۇعۇ Ùª1 جوق File content match %1 ۅجۅت مازمۇنۇ Ùª1 شاي گەلەت File location contains "%1" ۅجۅت وردۇ «٪1» نى ۅز ىچىنە الات File location without "%1" ۅجۅت وردۇ «٪1» جوق Later than "%1" «٪1» نان كىيىن Earlier than "%1" «٪1» نان مۇرۇنقۇ DatabaseManager New Space %1 جاڭى بوشتۇق Ùª1 File %1 has areally been added to %2 ۅجۅت Ùª1 چىنعى Ùª2 Ú¯Û• قوشۇلدۇ File %1 doesn't exsit in any space. ۅجۅت Ùª1 ارقانداي بوشتۇقتا چىقبايت. Failed to get space %1's id from query سۈرۈشتۈرۈشتىن بوشتۇق Ùª1 نىڭ ID عا Û•Û• بولعولۇ بولبودۇ Failed to get %1's id from query سۈرۈشتۈرۈشتىن Ùª1 نىڭ كۉبۅلۉگۉنۉ الۇۇ جەڭىلۉۉ بولدۇ ModelController Failed to rename space %1 to %2, %2 is existed. بوشتۇقتۇن اتاعىن Ùª1 Ú¯Û• Ùª2 جاساپ ۅزگۅرتۉش جەڭىلۉۉ بولدۇ ØŒ Ùª2 باربولۇۇسۇ . Failed to remove space %1, error message: %2 Ùª1 بوشتۇقتۇ چىعارۇۇ جەڭىلۉۉ بولدۇ ØŒ قاتاالىق ۇچۇرۇ : Ùª2 New Space %1 جاڭى بوشتۇق Ùª1 Failed to updatestatus space %1, error message: %2 Ùª1 ابالى بوشتۇعۇن جاڭىلوو جەڭىلۉۉ بولدۇ ØŒ قاتاالىق ۇچۇرۇ : Ùª2 QObject %1 %2 Intelligent Data Manager Introduction روحىي جۅندۅمدۉلۉك ساندۇۇ بايانداما باشقارۇۇچۇنۇن تونۇشتۇرۇشى peony-intelligent-data-management-service پئون روحىي جۅندۅمدۉلۉك ساندۇۇ بايانداما باشقارىش سان قاينارى exit جانىش ØŒ قايتىش UKUI::IDM::FileInfoJob Create Date: %1 چىسلا قۇرۇۇ: Ùª1 Open Date: %1 اچىلعان ۇباقتى: Ùª1 ././@LongLink0000644000000000000000000000015600000000000011605 Lustar rootrootpeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service_zh_HK.tspeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service0000664000175000017500000002172315257160277033245 0ustar fengfeng AISearchTask Failed to create ai search session. 無法創建 ai æ�œç´¢å·¥ä½œéšŽæ®µã€‚ Search task cancelled. æ�œç´¢ä»»å‹™å·²å�–消。 Condition File name contains "%1" 檔å��包å�«ã€Œ%1ã€� File name without "%1" ä¸�帶「%1ã€�的檔å�� File type contains "%1" 檔案類型包å�«ã€Œ%1ã€� By suffix 按後綴 Folder 資料夾 Plain Text 純文本 WPS Document WPS文件 PDF PDFæ ¼å¼� Image 圖åƒ� Video 視頻 Audio 音訊 File type contains %1 檔案類型包å�« %1 All 都 Empty(0K) 空(0K) Tiny(0-16K) å°�型(0-16K) Small(16K-1M) å°�號(16K-1M) Medium(1M-128M) 中型(1M-128M) Big(128M-1G) 大(128M-1G) Large(1-4G) 大號(1-4G) Great(>4G) 很棒(>4G) File size contains %1 檔案大å°�包å�« %1 File size without %1 檔案大å°�(ä¸�å�« %1) File content match %1 檔案內容匹é…� %1 File location contains "%1" 檔案ä½�置包å�«ã€Œ%1ã€� File location without "%1" 沒有%1 的檔案ä½�ç½® Later than "%1" 晚於“%1â€� Earlier than "%1" 早於“%1â€� DatabaseManager New Space %1 新空間 %1 File %1 has areally been added to %2 檔案 %1 已真正添加到 %2 File %1 doesn't exsit in any space. 檔案 %1 ä¸�會在任何空間中消失。 Failed to get space %1's id from query 無法從查詢中ç�²å�–空間 %1 çš„ ID Failed to get %1's id from query 無法從查詢中ç�²å�– %1 çš„ ID ModelController Failed to rename space %1 to %2, %2 is existed. 無法將空間 %1 é‡�新命å��為 %2,存在 %2。 Failed to remove space %1, error message: %2 無法刪除空間 %1,錯誤訊æ�¯ï¼š%2 New Space %1 新空間 %1 Failed to updatestatus space %1, error message: %2 無法更新狀態空間 %1,錯誤訊æ�¯ï¼š%2 QObject %1 %2 %1 %2 Intelligent Data Manager Introduction 智能數據管ç�†å“¡ä»‹ç´¹ peony-intelligent-data-management-service 牡丹智能數據管ç�†æœ�å‹™ exit 退出 UKUI::IDM::FileInfoJob Create Date: %1 創建日期:%1 Open Date: %1 開放日期:%1 ././@LongLink0000644000000000000000000000015600000000000011605 Lustar rootrootpeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service_zh_CN.tspeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service0000664000175000017500000002130515257160277033241 0ustar fengfeng AISearchTask Failed to create ai search session. Search task cancelled. Condition File name contains "%1" File name without "%1" File type contains "%1" By suffix Folder Plain Text WPS Document PDF Image Video Audio File type contains %1 All Empty(0K) Tiny(0-16K) Small(16K-1M) Medium(1M-128M) Big(128M-1G) Large(1-4G) Great(>4G) File size contains %1 File size without %1 File content match %1 File location contains "%1" File location without "%1" Later than "%1" Earlier than "%1" DatabaseManager New Space %1 新建空间 %1 File %1 has areally been added to %2 File %1 doesn't exsit in any space. Failed to get space %1's id from query Failed to get %1's id from query ModelController Failed to rename space %1 to %2, %2 is existed. Failed to remove space %1, error message: %2 New Space %1 新建空间 %1 Failed to updatestatus space %1, error message: %2 QObject %1 %2 Intelligent Data Manager Introduction 智能空间介ç»� exit UKUI::IDM::FileInfoJob Create Date: %1 Open Date: %1 peony-extensions/peony-intelligent-data-management-service/search/0000775000175000017500000000000015257160277024435 5ustar fengfengpeony-extensions/peony-intelligent-data-management-service/search/searchtask.h0000664000175000017500000000632715257160277026746 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef SEARCHTASK_H #define SEARCHTASK_H #include #include #include #include #include "condition/condition.h" #include "file/fileinfo.h" #include #include #define SEARCH_LOAD_BATCH 100 class QReadWriteLock; namespace UKUI { namespace IDM { class FileInfo; } } class SearchTask : public QObject { friend class SearchResultModel; friend class ModelController; Q_OBJECT public: explicit SearchTask(QObject *parent = nullptr); void setSpaceId(int spaceId); ~SearchTask(); const QVariant &getConditionsDescription() const; void setConditionsDescription(const QVariant &newConditionsDescription); QStringList getLabels(); void updateSearchDirs(); void setSearchPath(const QString path); void setNeedSearchFile(bool flag); Q_SIGNALS: void conditionsDescriptionChanged(); void searchFinished(bool successed); void searchContentFinished(bool successed); void searchWithLabelsFinished(bool successed); void finished(); void fileReload(QString uri, QString modified, QString filetype,QString size); void searchLoadBatch(bool finish); public Q_SLOTS: void start(); void cancel(); void handleCancelWithSpaceId(int spaceId); protected: void handleSearchResult(); private: UkuiSearch::UkuiSearchTask *ukuiSearchTask; UkuiSearch::DataQueue *queue; UkuiSearch::UkuiSearchTask *ukuiSearchContentTask; UkuiSearch::DataQueue *contentQueue; QList> resultInfos; QList> contentResultInfos; QDBusInterface* m_interface; bool needSearchFile = false; bool needSearchFileContent = false; bool hasContentSearchAndCondition = false; bool searchDone = false; bool searchContentDone = false; bool cancelled = false; int spaceId = -1; QReadWriteLock rwlock; QVariant conditionsDescription; QList> conditions; QList> andConditions; QList> orConditions; QStringList labels; QStringList indexDirs; QSet filesMatchedWithLabels; QString currentSearchpath; QString m_searchKeyword; Q_PROPERTY(QVariant conditionsDescription READ getConditionsDescription WRITE setConditionsDescription NOTIFY conditionsDescriptionChanged) }; #endif // SEARCHTASK_H peony-extensions/peony-intelligent-data-management-service/search/searchtask.cpp0000664000175000017500000003603715257160277027302 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: JinQin He * */ #include "searchtask.h" #include "condition/condition.h" #include "file/fileinfojob.h" #include "model/modelcontroller.h" #include "ai/ailabelhelper.h" #include #include #include #include #include #include SearchTask::SearchTask(QObject *parent) : QObject{parent} { m_interface = new QDBusInterface("com.ukui.search.fileindex.service", "/org/ukui/search/privateDirWatcher", "org.ukui.search.fileindex", QDBusConnection::sessionBus(), this); // 检查æœ�务是å�¦å�¯ç”¨ if (!m_interface->isValid()) { qWarning() << "DBus interface not valid:" << QDBusConnection::sessionBus().lastError().message(); } ukuiSearchTask = new UkuiSearch::UkuiSearchTask; ukuiSearchTask->setInformNum(100); ukuiSearchTask->setMaxResultNum(); ukuiSearchTask->initSearchPlugin(UkuiSearch::SearchProperty::SearchType::File); queue = ukuiSearchTask->init(); connect(ukuiSearchTask, &UkuiSearch::UkuiSearchTask::searchError, this, [=](){ Q_EMIT searchFinished(false); }); connect(ukuiSearchTask, &UkuiSearch::UkuiSearchTask::reachInformNum, this, &SearchTask::handleSearchResult); connect(ukuiSearchTask, &UkuiSearch::UkuiSearchTask::searchFinished, this, [=](){ qInfo() <<"finish search keyword:=="<setInformNum(100); ukuiSearchContentTask->setMaxResultNum(); ukuiSearchContentTask->initSearchPlugin(UkuiSearch::SearchProperty::SearchType::FileContent); contentQueue = ukuiSearchContentTask->init(); connect(ukuiSearchContentTask, &UkuiSearch::UkuiSearchTask::searchError, this, [=](size_t searchId, QString msg){ qCritical() << "search content failed," << searchId << msg; Q_EMIT searchContentFinished(false); searchContentDone = true; if (searchDone || !needSearchFile) { if (!cancelled) Q_EMIT finished(); } }); connect(ukuiSearchContentTask, &UkuiSearch::UkuiSearchTask::reachInformNum, this, &SearchTask::handleSearchResult); connect(ukuiSearchContentTask, &UkuiSearch::UkuiSearchTask::searchFinished, this, [=](){ handleSearchResult(); searchContentDone = true; Q_EMIT searchContentFinished(true); if (searchDone || !needSearchFile) { if (!cancelled) Q_EMIT finished(); } }); } void SearchTask::setSpaceId(int spaceId) { this->spaceId = spaceId; } SearchTask::~SearchTask() { ukuiSearchTask->stop(); queue->clear(); delete ukuiSearchTask; ukuiSearchContentTask->stop(); contentQueue->clear(); delete ukuiSearchContentTask; resultInfos.clear(); contentResultInfos.clear(); } const QVariant &SearchTask::getConditionsDescription() const { return conditionsDescription; } void SearchTask::setConditionsDescription(const QVariant &newConditionsDescription) { if (conditionsDescription == newConditionsDescription) return; needSearchFile = false; needSearchFileContent = true; hasContentSearchAndCondition = false; conditionsDescription = newConditionsDescription; auto newConditions = Condition::generateContitionsFromDescription(newConditionsDescription); auto newLabels = Condition::getLabelsFromDescription(newConditionsDescription); rwlock.lockForWrite(); andConditions.clear(); orConditions.clear(); conditions = newConditions; labels = newLabels; if (ukuiSearchTask->isSearching(UkuiSearch::SearchProperty::SearchType::File)) { ukuiSearchTask->stop(); } ukuiSearchTask->clearAllConditions(); if (ukuiSearchContentTask->isSearching(UkuiSearch::SearchProperty::SearchType::FileContent)) { ukuiSearchContentTask->stop(); } ukuiSearchContentTask->clearAllConditions(); UkuiSearch::SearchResultProperties properties = {UkuiSearch::SearchProperty::FilePath}; bool hasDateRangeCondition = false; bool hasSearchLocationCondition = false; updateSearchDirs(); int FileNameIndex = -1; int i = 0; for (auto condition : conditions) { bool shouldAddCondition = true; switch (condition->type()) { case Condition::FileName: { auto keywords = condition->getFileNameKeywords(); FileNameIndex = i; if (keywords.isEmpty()) { shouldAddCondition = false; break; }else{ m_searchKeyword = keywords.at(0); } if (condition->getFileNameIsContains()) { needSearchFile = true; for (auto keyword : keywords) { ukuiSearchTask->addKeyword(keyword); } } else{ needSearchFile = true; #ifdef UKUI_SEARCH_HAS_MATCH_ALL ukuiSearchTask->setMatchAllIfNoKeyword(true); #endif } break; } case Condition::FileSize: case Condition::FileType: { needSearchFile = true; #ifdef UKUI_SEARCH_HAS_MATCH_ALL ukuiSearchTask->setMatchAllIfNoKeyword(true); #endif break; } case Condition::FileContent: { auto contentKeyword = condition->getFileContentContent(); if (contentKeyword.isEmpty()) { shouldAddCondition = false; break; } if (condition->isAndCondition()) { hasContentSearchAndCondition = true; } needSearchFileContent = true; ukuiSearchContentTask->addKeyword(condition->getFileContentContent()); break; } case Condition::SearchLocation: { auto path = condition->getSearchLocationPath(); if (path.isEmpty()) { shouldAddCondition = false; break; } needSearchFile = true; //ukuiSearchTask->setMatchAllIfNoKeyword(true); if (condition->getSearchLocationIsContains()) { ukuiSearchTask->addSearchDir(path); ukuiSearchContentTask->addSearchDir(path); } break; } case Condition::DateRange: { // 在线程中查询时间信æ�¯ needSearchFile = true; #ifdef UKUI_SEARCH_HAS_MATCH_ALL ukuiSearchTask->setMatchAllIfNoKeyword(true); #endif hasDateRangeCondition = true; break; } case Condition::ConditionMatchRule: { needSearchFile = true; needSearchFileContent = condition->getConditionMatchRule()==0?true:false; break; } default: break; } if (condition->isAndCondition()) { andConditions << condition; } else { orConditions << condition; } i++; } if(needSearchFileContent && FileNameIndex !=-1){ auto nameCondition = conditions[FileNameIndex]; auto keywords = nameCondition->getFileNameKeywords(); ukuiSearchContentTask->addKeyword(keywords.first()); } if (hasContentSearchAndCondition) { // 如果包å�«äº†ä¸Žé€»è¾‘的文件内容关键字æ�¡ä»¶ï¼Œåˆ™ä¸�进行文件å��æ�œç´¢ needSearchFile = false; } rwlock.unlock(); // æ ¹æ�®æ�¡ä»¶å¯¹æ�œç´¢task进行设置 if (hasDateRangeCondition) properties.append(UkuiSearch::SearchProperty::ModifiedTime); ukuiSearchTask->setResultProperties(UkuiSearch::SearchProperty::SearchType::File, properties); ukuiSearchContentTask->setResultProperties(UkuiSearch::SearchProperty::SearchType::FileContent, properties); ukuiSearchTask->setRecurse(true); ukuiSearchContentTask->setRecurse(true); // 清空旧æ�¡ä»¶çš„结果 queue->clear(); contentQueue->clear(); resultInfos.clear(); contentResultInfos.clear(); Q_EMIT conditionsDescriptionChanged(); } QStringList SearchTask::getLabels() { return labels; } void SearchTask::start() { cancelled = false; filesMatchedWithLabels.clear(); // 如果æ�¡ä»¶ä¸�完全,比如文件å��æ�¡ä»¶æœªè®¾ç½®æ–‡ä»¶å��,æ�œç´¢è·¯å¾„未设置路径,则ä¸�需è¦�执行æ�œç´¢ if (!needSearchFile && !needSearchFileContent && labels.isEmpty()) { if (!cancelled) Q_EMIT finished(); return; } if (!labels.isEmpty()) { bool basicConditionsOnlyHasSearchLocation = true; for (auto condition : andConditions) { if (condition->type() != Condition::SearchLocation) { basicConditionsOnlyHasSearchLocation = false; } } for (auto condition : orConditions) { if (condition->type() != Condition::SearchLocation) { basicConditionsOnlyHasSearchLocation = false; } } // fixme标签æ�œç´¢å¼‚步实现,并且和文件以å�Šå†…容æ�œç´¢å�–交集 AILabelHelper helper; QStringList files = helper.getFilesByLabels(labels); filesMatchedWithLabels = QSet(files.begin(), files.end()); if (!needSearchFile && !needSearchFileContent || basicConditionsOnlyHasSearchLocation) { for (auto path : filesMatchedWithLabels) { auto info = UKUI::IDM::FileInfo::fromPath(path); contentResultInfos << info; } Q_EMIT finished(); } } qInfo() <<"start search keyword:=="<startSearch(UkuiSearch::SearchProperty::SearchType::File); if (needSearchFileContent) ukuiSearchContentTask->startSearch(UkuiSearch::SearchProperty::SearchType::FileContent); } void SearchTask::cancel() { cancelled = true; if (needSearchFile) ukuiSearchTask->stop(); if (needSearchFileContent) ukuiSearchContentTask->stop(); resultInfos.clear(); contentResultInfos.clear(); } void SearchTask::handleCancelWithSpaceId(int spaceId) { if (spaceId == this->spaceId) { cancel(); deleteLater(); } } void SearchTask::handleSearchResult() { while (!queue->isEmpty()) { if(cancelled){ return; } auto item = queue->dequeue(); QString path = item.getValue(UkuiSearch::SearchProperty::FilePath).toString(); if (!labels.isEmpty()) { if (!filesMatchedWithLabels.contains(path)) continue; } QVariant timeVar = item.getValue(UkuiSearch::SearchProperty::ModifiedTime); if (timeVar.isValid()) { QDateTime modificationTimeDate = timeVar.toDateTime(); // fixme: 判断日期相关æ�¡ä»¶ } // fixme: 判断大å°�相关æ�¡ä»¶ // fixme: 判断类型相关æ�¡ä»¶ if (spaceId >= 0) { QFileInfo fileinfo(path); if (UKUI::IDM::FileInfoJob::infoMatchCondtions(fileinfo, andConditions, orConditions)) { auto info = UKUI::IDM::FileInfo::fromPath(path); //ModelController::globalInstance()->fileReload(info->uri(),info->modifyDateString(),info->fileType(),info->sizeFormat()); resultInfos << info; } } else { auto info = UKUI::IDM::FileInfo::fromPath(path); resultInfos << info; if(resultInfos.size() % SEARCH_LOAD_BATCH == 0){ Q_EMIT searchLoadBatch(false); } } } while (!contentQueue->isEmpty()) { if(cancelled){ return; } auto item = contentQueue->dequeue(); QString path = item.getValue(UkuiSearch::SearchProperty::FilePath).toString(); if (!labels.isEmpty()) { if (!filesMatchedWithLabels.contains(path)) continue; } QVariant timeVar = item.getValue(UkuiSearch::SearchProperty::ModifiedTime); if (timeVar.isValid()) { QDateTime modificationTimeDate = timeVar.toDateTime(); // fixme: 判断日期相关æ�¡ä»¶ } // fixme: 判断大å°�相关æ�¡ä»¶ // fixme: 判断类型相关æ�¡ä»¶ if (spaceId >= 0) { QFileInfo fileinfo(path); //file content result don't need check filename condition QList> realandConditions; QList> realOrConditions; for (auto condition:andConditions) { if(condition->type()!= Condition::FileName){ realandConditions<type()!= Condition::FileName){ realOrConditions<clearSearchDir(); //ukuiSearchContentTask->clearSearchDir(); QDBusReply indexDirsRpl = m_interface->call("currentSearchDirs"); if (indexDirsRpl.isValid()) { indexDirs = indexDirsRpl.value(); } if(currentSearchpath.isEmpty()){ ukuiSearchTask->addSearchDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); ukuiSearchContentTask->addSearchDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); } else{ ukuiSearchTask->addSearchDir(currentSearchpath); ukuiSearchContentTask->addSearchDir(currentSearchpath); } // for (auto dir:indexDirs) { // ukuiSearchTask->addSearchDir(dir); // } } void SearchTask::setSearchPath(const QString path) { currentSearchpath = path; } void SearchTask::setNeedSearchFile(bool flag) { needSearchFile = flag; } peony-extensions/peony-intelligent-data-management-service/3rd-parties/0000775000175000017500000000000015257160264025321 5ustar fengfengpeony-extensions/peony-intelligent-data-management-service/3rd-parties/qtlockedfile_unix.cpp0000664000175000017500000000305415257160264031540 0ustar fengfeng// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #include #include #include #include #include "qtlockedfile.h" bool QtLockedFile::lock(LockMode mode, bool block) { if (!isOpen()) { qWarning("QtLockedFile::lock(): file is not opened"); return false; } if (mode == NoLock) return unlock(); if (mode == m_lock_mode) return true; if (m_lock_mode != NoLock) unlock(); struct flock fl; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; fl.l_type = (mode == ReadLock) ? F_RDLCK : F_WRLCK; int cmd = block ? F_SETLKW : F_SETLK; int ret = fcntl(handle(), cmd, &fl); if (ret == -1) { if (errno != EINTR && errno != EAGAIN) qWarning("QtLockedFile::lock(): fcntl: %s", strerror(errno)); return false; } m_lock_mode = mode; return true; } bool QtLockedFile::unlock() { if (!isOpen()) { qWarning("QtLockedFile::unlock(): file is not opened"); return false; } if (!isLocked()) return true; struct flock fl; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; fl.l_type = F_UNLCK; int ret = fcntl(handle(), F_SETLKW, &fl); if (ret == -1) { qWarning("QtLockedFile::lock(): fcntl: %s", strerror(errno)); return false; } m_lock_mode = NoLock; return true; } QtLockedFile::~QtLockedFile() { if (isOpen()) unlock(); } peony-extensions/peony-intelligent-data-management-service/3rd-parties/qtlocalpeer.h0000664000175000017500000000144515257160264030011 0ustar fengfeng// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #ifndef QTLOCALPEER_H #define QTLOCALPEER_H #include #include #include #include "qtlockedfile.h" class QtLocalPeer : public QObject { Q_OBJECT public: QtLocalPeer(QObject *parent = 0, const QString &appId = QString()); bool isClient(); bool sendMessage(const QString &message, int timeout); QString applicationId() const { return id; } Q_SIGNALS: void messageReceived(const QString &message); protected Q_SLOTS: void receiveConnection(); protected: QString id; QString socketName; QLocalServer* server; QtLP_Private::QtLockedFile lockFile; private: static const char* ack; }; #endif // QTLOCALPEER_H peony-extensions/peony-intelligent-data-management-service/3rd-parties/qtlocalpeer.cpp0000664000175000017500000001174715257160264030352 0ustar fengfeng// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #include "qtlocalpeer.h" #include #include #include #include #if defined(Q_OS_WIN) #include #include typedef BOOL(WINAPI*PProcessIdToSessionId)(DWORD,DWORD*); static PProcessIdToSessionId pProcessIdToSessionId = 0; #endif #if defined(Q_OS_UNIX) #include #include #include #endif namespace QtLP_Private { #include "qtlockedfile.cpp" #if defined(Q_OS_WIN) #include "qtlockedfile_win.cpp" #else #include "qtlockedfile_unix.cpp" #endif } const char* QtLocalPeer::ack = "ack"; QtLocalPeer::QtLocalPeer(QObject* parent, const QString &appId) : QObject(parent), id(appId) { QString prefix = id; if (id.isEmpty()) { id = QCoreApplication::applicationFilePath(); #if defined(Q_OS_WIN) id = id.toLower(); #endif prefix = id.section(QLatin1Char('/'), -1); } prefix.remove(QRegularExpression("[^a-zA-Z]")); prefix.truncate(6); QByteArray idc = id.toUtf8(); quint16 idNum = qChecksum(idc.constData(), idc.size()); socketName = QLatin1String("qtsingleapp-") + prefix + QLatin1Char('-') + QString::number(idNum, 16); #if defined(Q_OS_WIN) if (!pProcessIdToSessionId) { QLibrary lib("kernel32"); pProcessIdToSessionId = (PProcessIdToSessionId)lib.resolve("ProcessIdToSessionId"); } if (pProcessIdToSessionId) { DWORD sessionId = 0; pProcessIdToSessionId(GetCurrentProcessId(), &sessionId); socketName += QLatin1Char('-') + QString::number(sessionId, 16); } #else socketName += QLatin1Char('-') + QString::number(::getuid(), 16); #endif server = new QLocalServer(this); QString lockName = QDir(QDir::tempPath()).absolutePath() + QLatin1Char('/') + socketName + QLatin1String("-lockfile"); lockFile.setFileName(lockName); lockFile.open(QIODevice::ReadWrite); } bool QtLocalPeer::isClient() { if (lockFile.isLocked()) return false; if (!lockFile.lock(QtLP_Private::QtLockedFile::WriteLock, false)) return true; bool res = server->listen(socketName); #if defined(Q_OS_UNIX) && (QT_VERSION >= QT_VERSION_CHECK(4,5,0)) // ### Workaround if (!res && server->serverError() == QAbstractSocket::AddressInUseError) { QFile::remove(QDir::cleanPath(QDir::tempPath())+QLatin1Char('/')+socketName); res = server->listen(socketName); } #endif if (!res) qWarning("QtSingleCoreApplication: listen on local socket failed, %s", qPrintable(server->errorString())); QObject::connect(server, SIGNAL(newConnection()), SLOT(receiveConnection())); return false; } bool QtLocalPeer::sendMessage(const QString &message, int timeout) { if (!isClient()) return false; QLocalSocket socket; bool connOk = false; for(int i = 0; i < 2; i++) { // Try twice, in case the other instance is just starting up socket.connectToServer(socketName); connOk = socket.waitForConnected(timeout/2); if (connOk || i) break; int ms = 250; #if defined(Q_OS_WIN) Sleep(DWORD(ms)); #else struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 }; nanosleep(&ts, NULL); #endif } if (!connOk) return false; QByteArray uMsg(message.toUtf8()); QDataStream ds(&socket); ds.writeBytes(uMsg.constData(), uMsg.size()); bool res = socket.waitForBytesWritten(timeout); if (res) { res &= socket.waitForReadyRead(timeout); // wait for ack if (res) res &= (socket.read(qstrlen(ack)) == ack); } return res; } void QtLocalPeer::receiveConnection() { QLocalSocket* socket = server->nextPendingConnection(); if (!socket) return; while (true) { if (socket->state() == QLocalSocket::UnconnectedState) { qWarning("QtLocalPeer: Peer disconnected"); delete socket; return; } if (socket->bytesAvailable() >= qint64(sizeof(quint32))) break; socket->waitForReadyRead(); } QDataStream ds(socket); QByteArray uMsg; quint32 remaining; ds >> remaining; uMsg.resize(remaining); int got = 0; char* uMsgBuf = uMsg.data(); do { got = ds.readRawData(uMsgBuf, remaining); remaining -= got; uMsgBuf += got; } while (remaining && got >= 0 && socket->waitForReadyRead(2000)); if (got < 0) { qWarning("QtLocalPeer: Message reception failed %s", socket->errorString().toLatin1().constData()); delete socket; return; } QString message(QString::fromUtf8(uMsg)); socket->write(ack, qstrlen(ack)); socket->waitForBytesWritten(1000); socket->waitForDisconnected(1000); // make sure client reads ack delete socket; Q_EMIT messageReceived(message); //### (might take a long time to return) } peony-extensions/peony-intelligent-data-management-service/3rd-parties/qtsinglecoreapplication.h0000664000175000017500000000126515257160264032421 0ustar fengfeng// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #ifndef QTSINGLECOREAPPLICATION_H #define QTSINGLECOREAPPLICATION_H #include class QtLocalPeer; class QtSingleCoreApplication : public QCoreApplication { Q_OBJECT public: QtSingleCoreApplication(int &argc, char **argv); QtSingleCoreApplication(const QString &id, int &argc, char **argv); bool isRunning(); QString id() const; public Q_SLOTS: bool sendMessage(const QString &message, int timeout = 5000); Q_SIGNALS: void messageReceived(const QString &message); private: QtLocalPeer* peer; }; #endif // QTSINGLECOREAPPLICATION_H peony-extensions/peony-intelligent-data-management-service/3rd-parties/qtlockedfile.cpp0000664000175000017500000001020215257160264030466 0ustar fengfeng// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #include "qtlockedfile.h" /*! \class QtLockedFile \brief The QtLockedFile class extends QFile with advisory locking functions. A file may be locked in read or write mode. Multiple instances of \e QtLockedFile, created in multiple processes running on the same machine, may have a file locked in read mode. Exactly one instance may have it locked in write mode. A read and a write lock cannot exist simultaneously on the same file. The file locks are advisory. This means that nothing prevents another process from manipulating a locked file using QFile or file system functions offered by the OS. Serialization is only guaranteed if all processes that access the file use QLockedFile. Also, while holding a lock on a file, a process must not open the same file again (through any API), or locks can be unexpectedly lost. The lock provided by an instance of \e QtLockedFile is released whenever the program terminates. This is true even when the program crashes and no destructors are called. */ /*! \enum QtLockedFile::LockMode This enum describes the available lock modes. \value ReadLock A read lock. \value WriteLock A write lock. \value NoLock Neither a read lock nor a write lock. */ /*! Constructs an unlocked \e QtLockedFile object. This constructor behaves in the same way as \e QFile::QFile(). \sa QFile::QFile() */ QtLockedFile::QtLockedFile() : QFile() { #ifdef Q_OS_WIN wmutex = 0; rmutex = 0; #endif m_lock_mode = NoLock; } /*! Constructs an unlocked QtLockedFile object with file \a name. This constructor behaves in the same way as \e QFile::QFile(const QString&). \sa QFile::QFile() */ QtLockedFile::QtLockedFile(const QString &name) : QFile(name) { #ifdef Q_OS_WIN wmutex = 0; rmutex = 0; #endif m_lock_mode = NoLock; } /*! Opens the file in OpenMode \a mode. This is identical to QFile::open(), with the one exception that the Truncate mode flag is disallowed. Truncation would conflict with the advisory file locking, since the file would be modified before the write lock is obtained. If truncation is required, use resize(0) after obtaining the write lock. Returns true if successful; otherwise false. \sa QFile::open(), QFile::resize() */ bool QtLockedFile::open(OpenMode mode) { if (mode & QIODevice::Truncate) { qWarning("QtLockedFile::open(): Truncate mode not allowed."); return false; } return QFile::open(mode); } /*! Returns \e true if this object has a in read or write lock; otherwise returns \e false. \sa lockMode() */ bool QtLockedFile::isLocked() const { return m_lock_mode != NoLock; } /*! Returns the type of lock currently held by this object, or \e QtLockedFile::NoLock. \sa isLocked() */ QtLockedFile::LockMode QtLockedFile::lockMode() const { return m_lock_mode; } /*! \fn bool QtLockedFile::lock(LockMode mode, bool block = true) Obtains a lock of type \a mode. The file must be opened before it can be locked. If \a block is true, this function will block until the lock is aquired. If \a block is false, this function returns \e false immediately if the lock cannot be aquired. If this object already has a lock of type \a mode, this function returns \e true immediately. If this object has a lock of a different type than \a mode, the lock is first released and then a new lock is obtained. This function returns \e true if, after it executes, the file is locked by this object, and \e false otherwise. \sa unlock(), isLocked(), lockMode() */ /*! \fn bool QtLockedFile::unlock() Releases a lock. If the object has no lock, this function returns immediately. This function returns \e true if, after it executes, the file is not locked by this object, and \e false otherwise. \sa lock(), isLocked(), lockMode() */ /*! \fn QtLockedFile::~QtLockedFile() Destroys the \e QtLockedFile object. If any locks were held, they are released. */ peony-extensions/peony-intelligent-data-management-service/3rd-parties/qtlockedfile_win.cpp0000664000175000017500000001112115257160264031344 0ustar fengfeng// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #include "qtlockedfile.h" #include #include #define MUTEX_PREFIX "QtLockedFile mutex " // Maximum number of concurrent read locks. Must not be greater than MAXIMUM_WAIT_OBJECTS #define MAX_READERS MAXIMUM_WAIT_OBJECTS #if QT_VERSION >= 0x050000 #define QT_WA(unicode, ansi) unicode #endif Qt::HANDLE QtLockedFile::getMutexHandle(int idx, bool doCreate) { if (mutexname.isEmpty()) { QFileInfo fi(*this); mutexname = QString::fromLatin1(MUTEX_PREFIX) + fi.absoluteFilePath().toLower(); } QString mname(mutexname); if (idx >= 0) mname += QString::number(idx); Qt::HANDLE mutex; if (doCreate) { QT_WA( { mutex = CreateMutexW(NULL, FALSE, (TCHAR*)mname.utf16()); }, { mutex = CreateMutexA(NULL, FALSE, mname.toLocal8Bit().constData()); } ); if (!mutex) { qErrnoWarning("QtLockedFile::lock(): CreateMutex failed"); return 0; } } else { QT_WA( { mutex = OpenMutexW(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, (TCHAR*)mname.utf16()); }, { mutex = OpenMutexA(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, mname.toLocal8Bit().constData()); } ); if (!mutex) { if (GetLastError() != ERROR_FILE_NOT_FOUND) qErrnoWarning("QtLockedFile::lock(): OpenMutex failed"); return 0; } } return mutex; } bool QtLockedFile::waitMutex(Qt::HANDLE mutex, bool doBlock) { Q_ASSERT(mutex); DWORD res = WaitForSingleObject(mutex, doBlock ? INFINITE : 0); switch (res) { case WAIT_OBJECT_0: case WAIT_ABANDONED: return true; break; case WAIT_TIMEOUT: break; default: qErrnoWarning("QtLockedFile::lock(): WaitForSingleObject failed"); } return false; } bool QtLockedFile::lock(LockMode mode, bool block) { if (!isOpen()) { qWarning("QtLockedFile::lock(): file is not opened"); return false; } if (mode == NoLock) return unlock(); if (mode == m_lock_mode) return true; if (m_lock_mode != NoLock) unlock(); if (!wmutex && !(wmutex = getMutexHandle(-1, true))) return false; if (!waitMutex(wmutex, block)) return false; if (mode == ReadLock) { int idx = 0; for (; idx < MAX_READERS; idx++) { rmutex = getMutexHandle(idx, false); if (!rmutex || waitMutex(rmutex, false)) break; CloseHandle(rmutex); } bool ok = true; if (idx >= MAX_READERS) { qWarning("QtLockedFile::lock(): too many readers"); rmutex = 0; ok = false; } else if (!rmutex) { rmutex = getMutexHandle(idx, true); if (!rmutex || !waitMutex(rmutex, false)) ok = false; } if (!ok && rmutex) { CloseHandle(rmutex); rmutex = 0; } ReleaseMutex(wmutex); if (!ok) return false; } else { Q_ASSERT(rmutexes.isEmpty()); for (int i = 0; i < MAX_READERS; i++) { Qt::HANDLE mutex = getMutexHandle(i, false); if (mutex) rmutexes.append(mutex); } if (rmutexes.size()) { DWORD res = WaitForMultipleObjects(rmutexes.size(), rmutexes.constData(), TRUE, block ? INFINITE : 0); if (res != WAIT_OBJECT_0 && res != WAIT_ABANDONED) { if (res != WAIT_TIMEOUT) qErrnoWarning("QtLockedFile::lock(): WaitForMultipleObjects failed"); m_lock_mode = WriteLock; // trick unlock() to clean up - semiyucky unlock(); return false; } } } m_lock_mode = mode; return true; } bool QtLockedFile::unlock() { if (!isOpen()) { qWarning("QtLockedFile::unlock(): file is not opened"); return false; } if (!isLocked()) return true; if (m_lock_mode == ReadLock) { ReleaseMutex(rmutex); CloseHandle(rmutex); rmutex = 0; } else { foreach(Qt::HANDLE mutex, rmutexes) { ReleaseMutex(mutex); CloseHandle(mutex); } rmutexes.clear(); ReleaseMutex(wmutex); } m_lock_mode = QtLockedFile::NoLock; return true; } QtLockedFile::~QtLockedFile() { if (isOpen()) unlock(); if (wmutex) CloseHandle(wmutex); } peony-extensions/peony-intelligent-data-management-service/3rd-parties/qtlockedfile.h0000664000175000017500000000254715257160264030150 0ustar fengfeng// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #ifndef QTLOCKEDFILE_H #define QTLOCKEDFILE_H #include #ifdef Q_OS_WIN #include #endif #if defined(Q_OS_WIN) # if !defined(QT_QTLOCKEDFILE_EXPORT) && !defined(QT_QTLOCKEDFILE_IMPORT) # define QT_QTLOCKEDFILE_EXPORT # elif defined(QT_QTLOCKEDFILE_IMPORT) # if defined(QT_QTLOCKEDFILE_EXPORT) # undef QT_QTLOCKEDFILE_EXPORT # endif # define QT_QTLOCKEDFILE_EXPORT __declspec(dllimport) # elif defined(QT_QTLOCKEDFILE_EXPORT) # undef QT_QTLOCKEDFILE_EXPORT # define QT_QTLOCKEDFILE_EXPORT __declspec(dllexport) # endif #else # define QT_QTLOCKEDFILE_EXPORT #endif namespace QtLP_Private { class QT_QTLOCKEDFILE_EXPORT QtLockedFile : public QFile { public: enum LockMode { NoLock = 0, ReadLock, WriteLock }; QtLockedFile(); QtLockedFile(const QString &name); ~QtLockedFile(); bool open(OpenMode mode); bool lock(LockMode mode, bool block = true); bool unlock(); bool isLocked() const; LockMode lockMode() const; private: #ifdef Q_OS_WIN Qt::HANDLE wmutex; Qt::HANDLE rmutex; QVector rmutexes; QString mutexname; Qt::HANDLE getMutexHandle(int idx, bool doCreate); bool waitMutex(Qt::HANDLE mutex, bool doBlock); #endif LockMode m_lock_mode; }; } #endif peony-extensions/peony-intelligent-data-management-service/3rd-parties/qtsinglecoreapplication.cpp0000664000175000017500000000661515257160264032760 0ustar fengfeng// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #include "qtsinglecoreapplication.h" #include "qtlocalpeer.h" /*! \class QtSingleCoreApplication qtsinglecoreapplication.h \brief A variant of the QtSingleApplication class for non-GUI applications. This class is a variant of QtSingleApplication suited for use in console (non-GUI) applications. It is an extension of QCoreApplication (instead of QApplication). It does not require the QtGui library. The API and usage is identical to QtSingleApplication, except that functions relating to the "activation window" are not present, for obvious reasons. Please refer to the QtSingleApplication documentation for explanation of the usage. A QtSingleCoreApplication instance can communicate to a QtSingleApplication instance if they share the same application id. Hence, this class can be used to create a light-weight command-line tool that sends commands to a GUI application. \sa QtSingleApplication */ /*! Creates a QtSingleCoreApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc and \a argv are passed on to the QCoreAppliation constructor. */ QtSingleCoreApplication::QtSingleCoreApplication(int &argc, char **argv) : QCoreApplication(argc, argv) { peer = new QtLocalPeer(this); connect(peer, SIGNAL(messageReceived(const QString&)), SIGNAL(messageReceived(const QString&))); } /*! Creates a QtSingleCoreApplication object with the application identifier \a appId. \a argc and \a argv are passed on to the QCoreAppliation constructor. */ QtSingleCoreApplication::QtSingleCoreApplication(const QString &appId, int &argc, char **argv) : QCoreApplication(argc, argv) { peer = new QtLocalPeer(this, appId); connect(peer, SIGNAL(messageReceived(const QString&)), SIGNAL(messageReceived(const QString&))); } /*! Returns true if another instance of this application is running; otherwise false. This function does not find instances of this application that are being run by a different user (on Windows: that are running in another session). \sa sendMessage() */ bool QtSingleCoreApplication::isRunning() { return peer->isClient(); } /*! Tries to send the text \a message to the currently running instance. The QtSingleCoreApplication object in the running instance will emit the messageReceived() signal when it receives the message. This function returns true if the message has been sent to, and processed by, the current instance. If there is no instance currently running, or if the running instance fails to process the message within \a timeout milliseconds, this function return false. \sa isRunning(), messageReceived() */ bool QtSingleCoreApplication::sendMessage(const QString &message, int timeout) { return peer->sendMessage(message, timeout); } /*! Returns the application identifier. Two processes with the same identifier will be regarded as instances of the same application. */ QString QtSingleCoreApplication::id() const { return peer->applicationId(); } /*! \fn void QtSingleCoreApplication::messageReceived(const QString& message) This signal is emitted when the current instance receives a \a message from another instance of this application. \sa sendMessage() */ peony-extensions/peony-intelligent-data-management-service/data/0000775000175000017500000000000015257160277024101 5ustar fengfengpeony-extensions/peony-intelligent-data-management-service/data/智能空间使用手册.pdf0000664000175000017500000415524115257160277035412 0ustar fengfeng%PDF-1.7 %Â³ÇØ 3 0 obj <> endobj 13 0 obj <> endobj 6 0 obj <> /Font <>>> /Type /Page>> endobj 7 0 obj <> stream xœÅ[[«#7 ~/ä?ä¹Ð©$Ë7X sI }Øö@@i ¥§°Û‡þýz’ÉŒ-;3“øœ–²tc<²$ëòIÖ~>àÂߌÿsŒ�?þòzø|×´×�š¿üzøùëã_h@ÿ9Ðñ‡ðçûðç�ËV8þø1|Õ½L¿¾ü~øöü⎬üñå·Ã·Buüýï°ÿåË!| ák¿n YkÍ é /—¿y8"úƯ‡€Àß½üñÕéåðé�B¤\|v­ ‡9ˆ®=‡}Ç—áƒ2Ôæ«t.íåŽð�Ø%€†…jô{�EÔpªšvrqÑZWXe¦Â*’ßKLç|T¸-kƒwì˪F©«]äR”œOù*ªóUjµ¾¬e¡s7£�¶DW�ÝÚ•C"Œbåüšño{ü#£(|(¦vs€ñ«Ôø—•›á/+[F¿Åƒ–­šõ&5Ó˜T&ݧübÛqºLJÈ ýIÈí•Ø�ׂòý�c%ù1FhTó Nï:t&Ë�W´<½sbôï|ŸÊRzZû:z¾QÂLQ(z­3J±ø,¯]�¤zÒãWжW�ýÅèž™}9„¸Ø-®!éYŠcÔ`ÛÐDÌ´pe˜åñ¦ Vw…U8·ù*zöB-ÄçÂ>{³öxUY´ù*SØËˆ…óÕùfýÉiNež�+¶7ªx]o¤tC‰êÎ÷@*d ícŠ!1š‚€D®°Ê7÷�WCºV»„‹D=sàK¾žƒ_²·ã’‚ƒƒ®HC‰×Á Á¶-| ^éÂIª-p– '!SÁœÏM¸ZIh‰L× (V§P–iðTãí£oZðÊ„HºN0ØÊà†Ö;'ÛŠ‚ЋÀE=JÊW3yÚ;‚w'¬t5©;P2.&ˆv† ÞÊ�=•ÈÔO»(ÁFeì%e?ú|$XApððÞ‚9-ù¨•̇(–˜À ÷Æx§Ë°•s2Y+#÷XSc™ ΂qÖ8©2¡ÆDy9&Ûƒ,Ú+Ü�%²ôÝÝÐùFÆÀAABžJœÆf-‘Î=öR9À25A#O¡L�ÌÏ;éWî\Ècଠ s�Má‹ ´Øz‰õœ/À&8©ò…e9ÙŠàNNQ9ë„/ù$o3·)LòåDp7ƒî)g’,«ÎBú°RÂJ Np8 ÊÀ2D.é|ç{QðÈ4KãµCUPâÑ38¶Wºh�Ššaµ®zP³F§``¼ÒÅ7¹Ø Lç bYS.N·ø}ïî™ÜŠqÙþ±~IO"Î+ã:¾Ü^¤ŠŒá¥°‰lFÖªÊdf;mP+­­’Þ¾§Vd‰RvMVä„Z*A…R® ®Ä6ká8’í™ 9”‡$ßÓF²¾­•ÛþÉFX›yC.W”jL‚ l%èR 3Ø¡jZocœ°47iv¨6/\NâŠ@YUqbá¼:N@cMÌþlRm»Ù“Ì ‚=! ÇßÔz©cï„«¨S{’ül»jÌp¼ä�‡,ÊŸÎ5Fví.¾ÝmMÝÅøºvˆ¾4¥–¨nÍãÆ½ÖF{7s¿u#™'4Uáù jn‘e Xö³sÌð\5õ\Ÿ>p(¯Ï+¿ÉOWÕÔ%6±–*í–´í6"Xõxó ëïɶîX|EYß>kv­ÕWóWY·ÏcHÞ"#èäž”ž²â¼'ÁOåUŽÞ£xn í(ë‚Ú²ô¾­¶]¾¢ÎU-<§àXœÚJoA5 "ëäAf8ÐCMÖ!.ÈUEP›qø &èÕ©† ¹4¼ÞNó#RBP™mÍ÷Ydµ}�\Ьd£Nócy1¾ÀD �«YH©¡F›Ê²<µ¸WS©bØÉ€»+rüç¯á5�Òè¹wòVéÖÊ,‰' c©ËL_îYÇPÕC+qX×öpqhå]ÎG¢1þE<à`tÎò¹08B@Ÿ¯&ÆðieöìóÁqÀü:XzЄk\¤qÛSÃiã«€0³’"çÊõ~lvÀ†§Á(#K°€¤õ@6y`µ�d_—>À¯†'ñÇn‹ª’ß”º ç£ÖáÌÛ¸™Õ…gêrÛŒlj—Ÿˆ×ßw$Q3œ`<µ‹Ù�ª°C–Ä1ËÀGÒ.¯ú o#Å�šÆ-…BOP,ì}ü`î s#`n†ÂÝŠÕç&?æüQœúØ?Øž&É‹÷à²Åñ]8iªwŸÇÌW éÜN— §‚š±/)4Ï‚`‹ïL}Wz£ÒËGù’r°·4¤R³Q…“–nãöìÇZu™\f_2BSx/ºcŽ+OÑ©öÜ©À}e&ÄyÇÉÍW:<3g�*8':,8vøÝy«kð_ Þ iü<]¼ƒb+!XŸ�²in7nµbe™r‹|]Ö,:Ûͼifa7$Ü«(Ë-2Æ+¤ÿïz ñ™ÈìVF®w¤b/X­Í]†ÁüQQHIw3Ûã'…*ÁÈ> ²Á‚!ÓŠ¯ ƒÛïý‰ÙìÂÆæ¢þ+6öc¥ùÿacj\üZöa˜¤)v,ßð²ÇWù'p\¡€GÀ±±~~ñÌ’oÕŒÍãŽbéðÌ]öz³c©«J^ã?wHuPçïŠHÐË{ô,Gºó‚¼ ¤ºl(fÇs{ÞýG·íîoïGšže–“¦@îɹ=î{gº x_Zû¬‰Üu%�ÅÕâhðD÷i›bk³ÖBÇ\D ÁùѨŒ¢R%\˜¦†,Å÷Ž+¡'9é�¹ç%  ¯Js$éÖÚÏ'Æß¨9™çá{è¹< ã¿—»e™$ÃÌÒ‡D­®],ËÇ׃Fh<ß~ÿyøéB_ì6ƾۼ{ú}g· …~¼{ú]Ú}k§½^X­ÂUdãÎÓëôëÎÖñH;o½þŠ·Žÿý 0£‰¿ endstream endobj 34 0 obj <> stream ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ¤¶"ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ì| ðÞÁ,-õmaRòiãY#·p qäg'‡ö==«ÑM±�%•º¨è%~•5¼I´PÄ¡c�ªŽÀ RV“©)»É‘ q‚²E°ÙÿϬ÷ìQö?ùõƒþýбEEÙVE°ÙÿϬ÷ìQö?ùõƒþýбEadWû §üúÁÿ~Åa´ÿŸX?ïØ«QvE°ÚϬ÷ìQöOùõƒþýбEadWû §üúÁÿ~Åa´ÿŸX?ïØ«QvE°ÚϬ÷ìQöOùõƒþýбEadWû §üúÁÿ~Åa´ÿŸX?ïØ«QvE°ÚϬ÷ìQöOùõƒþýбEadWû §üúÁÿ~Åa´ÿŸX?ïØ«QvE ­*ÖxX$)ãåd\s\® ®æ¹ ;>L·Ü^¾õ¤%£¹ŽªÄpÚI7* /©éV²øæAŸ÷kDÀRuA¨#"]>XÆ@=ºÕlJè*…ý°Ûç Áþ!ýj£Rú1JÕØ‚“ÐS¨­ Æàz 0=-˜‚ŒAKEÐQ�è)h àz 0=-LAF ¥¢€�è)0=8ÒS0=‚–Š& £hô´SÜAF ¥£˜‚ŒAKE&Ñè)0=:Šn £ÐRÑLB`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z ŠâÎÚî#Äʇ³¨55æ^+ðâèÓ%Å®ãi)Úòcn¸úc§ÐÑ^�uoÄA%@Êp}h®¨bVg<¨&î�B_º>•ƒªÞ\Óm�L|ÊØí“ŸóÚ·—î�¥sú¬‹ÉæKie]½IÝòãÞ¾c2¿³ŠÖÎJöíÔö°ÿïm=H´=^)õ€ÞË)*@WÎ ÏQ“]5rðâÚê"ñÅÈ!2«*íÛžÞæºúô90ÐÓ Û��÷ùœéÕzÖZ˜_Û×Pë6¶wº[[Ay+Ãm1™]™•Y¾etRAÉ÷Åghž5:¥•Î¥<|:}½»Ï#èyÒ¢Ž~xö ¹žµ/¯]ø±¯o¼=r°Û–†Àý¦`�šWÖÜÝ8S´zäÔW¾¾ñ ̳i‘i.�sf̲#ù�(P6íþÁ<àçP3bÏÄ7—-¼Ú;Ãyöu¹‚:·šŒqËp�ÆáÎ20MXÑu™59ï­nmµÕ”Š’ªJ%C¹C 6cÈ YVöÚܗͪO¥D“ÛØ­¢[=Èýñ. ŒÂ�¹ä÷ÛSxSI¸Ón5zéz|í·ÓÕÕ¼¶ï”•]Ù^þõ4ÓQEQEQEQEQE…uâ$ÑYQ 1-i4jJÎ;F'Íí·øºŽà_Òæ¿¸´3ê%»Èå£�NZ4ãÎp[©8àgã'>ãë¬]M6´Ë2)+i LBÀ;HÍ=wAÜ�2+ë{C üéq$lU'Q†‘;ÀnÇgŒà]®vÁ@µûÄšè«›ÓÜ4{©ª_ Ý%–8!y¦‘cŠ5,îç@ä’OA\ܾ1ц¿g kúgØÚÖv”‹¨Èˆ&[<8ïÏ¥tõB[$×ìïÃ/• ¬ð²ž¤»DAß»?˜©fÖîÚúÙ.m."¸�ó¶Xœ:¶àò*GPèÊ{ŒS©“8ŽsØP€Ã¢Š+¬ç JZ((¥£€J(¢�…QL@i)M%’–“(¢Š(¢Šb (¢€ JZ((¢ŠQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÙ ˆœÄªÒv«6ÐO`NàiÕÂy–ÒÇåG.ä#Ë�á_#¡àð~‡é@þ~»ÿ@Ý;ÿßÿŒÖ”eÌHeUY•[p¸#ðÍaÔ§áÏûûÿÚ+£·O.Ú(ü¨âÚ€yqœª`tÐ})!²J(¢˜‚Šl‘¤Ñ Ô¢òà y‡ò:]�Tîk³±æ²ï.¼ã±>àýj•ä?;–úšeTamY2�Š(­ (¢€ (¢€ LRÑ@ E)¤ ’–’€ (¢�QLBQKE%´PQERRÑ@ E-LQŠZ(1E-ÀJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ?J)_¥Àïî�¥-"ýÑô¥®¬(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢‚@=UstIù",=IÅ'Údÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö–z³f€,ÑH¬C)È5WQÔmô»Csr[nBª¨Ë;ŠsN1rv[‰µv[¢¹ñ¬ëÒ ÑxeÊ›ïââ—û[Ä?ô,äüá[ýZ}×þó2öðìþçþFý�ý­âú?ò~?ð£û[Ä?ô,äüáGÕ§ÝàQÿ0öñìþçþFý�ý­âú?ò~?ð£û[Ä?ô,äüáGÕ§ÝàQÿ0öñìþçþFý�ý­âú?ò~?ð£û[Ä?ô,äüáGÕ§ÝàQÿ0öñìþçþFý�ý­âú?ò~?ð£û[Ä?ô,äüáGÕ§ÝàQÿ0öñìþçþFý�ý­âú?ò~?ð£û[Ä?ô,äüáGÕ§ÝàQÿ0öñìþçþFý�ý­âú?ò~?ð£û[Ä?ô,äüáGÕ§ÝàQÿ0öñìþçþFý�ý­âú?ò~?ð£û[Ä?ô,äüáGÕ§ÝàQÿ0öñìþçþFý�ý­âú?ò~?ð£û[Ä?ô,äüáGÕ§ÝàQÿ0öñìþçþFý�ý­âú?ò~?ð£û[Ä?ô,äüáGÕ§ÝàQÿ0öñìþçþFý�ý­âú?ò~?ð£û[Ä?ô,äüáGÕ§ÝàQÿ0öñìþçþFýÏÿkø€rÞ8ï‹èÉü±Z:^­©…H¦‰¶Í£÷ÿ™ÐœW3µ¼š“*5c'oÍ5ù—袊ÄÐ(¢Š(¢Š(¤$*–b$žÕÄÞüGµ†å£´±{ˆÔãÌivgè0x­èáª×mSW±•Zôé+ÍØíè®þgýB?ògÿ°£þgýB?ògÿ°®�ìÌWò~+üÌ>¿‡þoÁÿ‘ßÑ\|KBà>”ʽÊÜdþ[Evzv¡oªXÇwjû¢�qž ÷Þ±­„­A^¤l�ibiUvƒ¹jŠ(®cp¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’}Ñõ¢‰>èúÑM Ž_º>”´‹÷GÒ–�ÂŠä›ÆÑ?‰ntØ­o½‹lº�i÷3±¡wÜÝ{êèì/áÔ`3@—(�¶ââÚH?îȪqÏ\b€-QEQMw¡f @þê–?�ªrê+¨JHcb˜\ƒþzÐê(¢€ (ªz“L¶ry'f™œFp=Í\¢¢ƒÍí›–S�ßÞµ-QE ÑųþΦ¨nÿãÙÿç@ôFMoI†ôYK©Ù%Ù85 ÿw9ªÞ&¹šÓ@�íä1Hï>hë’EBãÝCøUˆtM2 8Ø%ŒÔŒ4l�ƒú–ÏÞ'¹<š¿Ebxmž8µ 1¤†Æñ �Ù²|½ˆàzí.WþRxžú ;A¸ºžöæÍS’ÕU¥'<*†Vž�?*ÕYÙÕY�á€9*qœN§W•ZÜÉ¥½‚O¯x�nµ9L÷¦ÞÄ:†1nÙÎò¢�¾„àcŽ›ÄQÏm¡%õ¶±©5ñŽ8ì#fù³»½®âsó uôW®Å}e­O¬^‹ÇÒ¢òû6§$">pÍå <äôé²ßÞ,’k?l¹ÜšÒØ mÿºòL« zÉ}ÝsßPoLy¢ŽHãy^BB)` 2p;ð3\ŠIuaã8m¾Ñ©$Å6ç½”ã�G5�¬�'м;r…§|{ªá[6ŸrO÷Ícêßò7øwþÞôX®Œ7Æý%ÿ¤³ÿõ_š7‰ $9$Õ=oIÔgx,uK+™“ïGÂ;/Ô‘YÚìk¨kzN‘sÍŒé4óFzLcØ6õS¼±özdU­cG±¼ÒÝY#·x¼¡ZÝ€Èe=±úò¹Í�j*Ž‹y.¡¡i׳ I®-£–EÂÌ ‘ùšnºâ= ùšHâËÉrmÕxêd”úŠ»±Ì›â‘]rFå9~M7F3FÛb�à ރÔ׉h³I4öv¶¯§ß™o¼¹l×]šT�–)ŒŽÈÊØYÏ=c’kg]ÔûDðÅÀM7Fµ¹‚i¢µ’ñ#�T¢�ó4$oÛ#6ñ“Íz²M’IJŒñ²*°% €Gn?�hˆ$H„Tüèê+ɼ2ÓÍu¤ñ]ÞÏ;X²I%òÇR5¼?ëz—“o9 ÙÈàŠ�šßO¾KÛ� KM3™RãeÄ©xPLU™m²^G'Сêz¬–z–‰m”é}zÖò“ÉUóK‘ƒÁÝŽsÁ?Q­^1àùmGˆtKk}3—Ñÿ¥ZÁ I.ë;ì‰)eS�ƒ¸êxé^Ï@Q@Q@Q@Q@Q@•®ùööÚ6׉nöa¤a3í†Dþ%Nœ7P}FAÎðþ£qâkŸíGi¬í­˜Æš{²#–˜}ʽ0CrHÚÓW>€Gñ@¼ 4ÀïîD˜ò®‚°?æ¡Ü+ÿj×EµèÌk}ŸToÑEÎlQX~/·ŽçÃS¤ÒY$K,Éöé<¸RdrŽÄ W¡ëÐÐåæbÓ°¾Ù»ÂÙ¿ÛhûÛ—ì8û/•åïòñ»wï1³¯¿5ØxBÞ;o @�Édñ4³ËØeó Ey�‚#20^ƒîôw\$xR à‹Yô^!^Ý®ÿȽ©ÿפ¿ú¯¯¢É‡?SÅÍ~8ú¿§ÛïðÍÄ¿cµ“y’¶Ò>hø'oœ}õá˜àã";ˆ6ÛJ³´tŸš;ýÌ=ÀóŽO¶ zjº»^vÝ™çûdÿÌįOørIðôù=.›÷ÊW˜W§ü9ÿ‘zãþ¾Ûÿ@JäͿݟª:²ïãü޾Š(¯•>€(¢¸ï‰nðôg^_âçw•k÷‡î¤ÿW'®Ú0̧rãpìh¬K£ÿÆ”;fÞÿèËZÛ I4QHˆdmˆ€ÜÝp=Oò¡f‰¦xVT2  ènPs‚GlàþF¸¯ˆ7Ik>Œç[¸³qu¹míãŽIä�T«1?ÃÇ7® rz8”ÜÆ^ÛÄÆþyⳂø_nóZ™¼ÅûF6îqÊŒñ’q@Ã,ÑBË"F‚)v,x{š}yã£äk¾'Õ!ÑgO>�¢)âo3io+=+ßä`IÍrx—Løu¨jÆöúïPšÙäX®DH-cù˜1Ú€ï ŒöÝØPz·Vî")¡w|¦MUtð±H¡R!`'ùASƒ¼}0Oæ—FøA =Þ·kö»ý–·‹1;m6ÈÙËDH9™úc¢žªõº+ÂRÉ?ƒ4)¥vy$ÓíÙÝŽK’Iõ­ŠdŸt}h¢Oº>´SBc—î�¥-"ýÑô¥¤2¬šu¤º„7íû\*U%RCm=Tãïø9ç­Z¢Š(¢Š)†$2‰JåÀÀ'·ÒŸEQEÉcY¡x›;]JœuÁ§Ñ@Q@Q@CwÿÏø:š™2y‘2zÐ;›ho-e¶¹�d‚T)"7FR0Ec®‘­BŸfƒÄZ�…imCÜ(ônÚ~¥ õÍlù¡x�nàŠ<èÿ½úPv…¥Í£A5™”Mj$2C#­%‰fÆäýî§<ôɹ¨[µÞ�sn›CË"–è  —Î�ûߥtÞý(—mÄLúc®©¥ Ó¹… Œ�Ö3 |Ñž èô«7ž—QÔmu;�nú Ø!òÇÙk“÷™REr¤úäœqšßó£þ÷éG�÷¿JȸðÌrƒq¨KdymžlÇ+.0HÆG* U!O¥=¼7dÚ™½2\m3 “l$ýј Æ3ž|dgæµ<èÿ½úQçGýïÒ€2m|5moÔ—w·FØ0·Žæmëá‚G'Œ±'Ô·ZFýCF–Ùa†ßOw&%@S Ç…hùÑÿ{ô£Î�ûߥekzT×°ZÃd–Ѩ¾†êvbTŸ.E~$•œuÏlV žÖåÕN¤gÓÖ&�n_J˘^e9“Îpq³ã<×gçGýïÒ�:?ï~”Åø—Áë—7÷BÛJ{‹˜M¼fXðcqæ—ÚÅ�p6¨Ú1žsZVž‚ÊãPŽŠ++È|½°D!’>rTÀ+ÉÆFᓃÏ�÷¿J<èÿ½úP1¦ø4Ø\Ep×Þd�.DT)K+³ IÛ€î½ÉdñUï<#y5–�HŽú~–ögmä¶û¤>Ht|•ÄmÁöãÓ¯ó£þ÷éG�÷¿Jâ´ÏjZE÷™:\ŽÍú|ŽÞt(‘ÄŽ¨…çË<î{Ú¦_ ji«]jŸm�î$—ÍØ¥£ó0Å‚3Œ•\$àˆÏ×_çGýïÒ�:?ï~”‹á�ãA±Š o<Ð-a�â*²"ífR{·Œ{šÞ¨üèÿ½úQçGýïÒ€í –x§’Þh³åÈÈ &x8=FjZ�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éGœ§…Ë@({O¹'ûæ±õoùü;ÿo?ú,VÕ¼f8þo¼Ç&²uû[Ÿ>ÃT´ˆÍ-ŒŒZêèà �|Vøf½¥ŸT×Þš1®Ÿ&�sL»ªiqj�F­$�Í ù�\D@xŸddÐ�AH5“yáí[V²–ÇS×�µ‘ ²ÚZYÁìå™ò=@=Aã] Kvñ?tx+õÀ¥ÿ„ÛÃßôÿÈ2ñ4þ©_ùÜÃë�}è×±[¤²‰/|Ÿ´(ÚæBt ™8ç2zÒÞ[-íœÖ­$‘¬¨Qš6ÚÀcïXÿð›x{þ‚ùOþ&�øM¼=ÿAüƒ'ÿGÕkÿ#û˜}b�ó¯½ôÏ FÖúKÁ$‘<òºGHÚG/´…,víY$^¤œŽxªÏá Á£è6‚E’M2ÁíÛ˼šÛ|…cç�æÛòœþÕÿ„ÛÃßôÿÈ2ñ4Âmáïúä?øš>«_ùÜÃë�}èçt�êz,ñ´iSÍåÛ'Û¥vómü¸c�ö!ŒƒŸ,œî^¼ô«�àýIõ»½\ßBÓÈåѲo�—䢑�Gãæ­oøM¼=ÿAüƒ'ÿGü&Þÿ ‡þA“ÿ‰£êµÿ‘ýÌ>±Gù×ÞŒЮtm[ÂuÞò×Û$�rȲ-�Ù,¤àòƒ;Aâ»êç$ñw†&x^[¸Ýá}ñ3[¹(ÛJå~^Öa‘ؑޤÿ„ÛÃßôÿÈ2ñ4}V¿ò?¹‡Ö(ÿ:ûÑ¿E`Âmáïúä?øš?á6ð÷ý?ò ŸüMU¯ü�îaõŠ?ξôoÑXð›x{þ‚ùOþ&�øM¼=ÿAüƒ'ÿGÕkÿ#û˜}b�ó¯½ôVü&Þÿ ‡þA“ÿ‰£þoÐCÿ ÉÿÄÑõZÿÈþæX£üëïFý�ÿ ·‡¿è!ÿ�dÿâhÿ„ÛÃßôÿÈ2ñ4}V¿ò?¹‡Ö(ÿ:ûÑ¿E`Âmáïúä?øš?á6ð÷ý?ò ŸüMU¯ü�îaõŠ?ξôi^é–ú„öÏr]ã·o1aÏîÙøÚÌ;•ÆGlœã >™j±êH^+…C”8'8WðNAê9烛ÿ ·‡¿è!ÿ�dÿâhÿ„ÛÃßôÿÈ2ñ4}V¿ò?¹‡Ö(ÿ:ûÑ¿XóP¿îÿµi?á6ðÿðß=€†LŸüv—HŽ}C[¸×%‚H"h½¼r 3&w#¶OJ¸R�(ÊUZ[]•HTqPwס¿EW!ÒŸ­iÒjºoÙ¡�`•f†xäx÷¨håYT�JykBŠæ?áÔ·}¯ûVÓûKûGíþgØ›ÉÏپϷËós÷yÎþ¾ÜV¾‹§I¥i¿fšužVšiä‘#òÔ´’´‡ IÀÈž•¡Egë¿ò/jõé/þ€kÄkݯí¾Ù§]Z†Úf‰ãϦAÖ¼FöÂëN¹k{¨^)ã :û�Q_A’Î<²�õ;+Ù&Ž4—Í-¹ÎÖ_âR:1ÁÆAÁ lQ@Õçƒmoõ-PEP%}¢kqøƒíÚ|Z|ðh ü\]<-»ì†Ø§¸ÇFÏáŽõ%Œ)³»ÔçfŽÆúäO�í9wˆc�ñïÏú¼öëŽÙ®¦Š£¢éçIÐtí4È$6–ÑÀ\ nØ¡s�¯QE2Oº>´Q'ÝZ)¡1Ë÷GÒ–±ˆ>Qþ‹Ûþzõ©á ÿ§_ü‰ÿÖªä�¹âmQX¿Ûÿôëÿ‘?úÔoÿÓ·þDÿëQÉ ç‰µEbÿoÿÓ·þDÿëQý¿ÿNßùÿ­G$ƒž&Õ‹ÿ ý:ÿäOþµð�Ó¯þDÿëQÉ ç‰µEbÿÂAÿN¿ùÿ­Gü$ôëÿ‘?úÔ¹$ñ6¨¬_øH?é×ÿ"õ¨ÿ„ƒþ�ò'ÿZŽI´Q'ÝZ)¡3��KH: Zê9ÊÖ7Ðjþu»ea†FU�äéVk'M´™õ�VxͳN‚5·vŽ�'«ÿ!Ç5­I •4½F[M†úuŠPJ‰ 0HçúT�yw±Y´˜žTgDÁåWœôþ!ù×¥hMvVù8ÁrÌÇþù4±Edé ³ÕžHVH£ºI§�ìþh.V)Leñ×�ùÖµQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE™-ÌŽä†*;qZu�@ó¥ÿž�ÿ}<éç£ÿßF°§ñG«\i°i÷S@ªìbhTaÁäRGl�Œ‚)`ñI«A¦Ï¤_ÚÍ:³©•¡`G$쑈²F2@  Ï:_ùèÿ÷ѣΗþz?ýôi•“âM3L¾ûÌ—çË”†ÒY°„� ؤTþT³çKÿ=þú4yÒÿÏGÿ¾�dϯXÀªÌÒÏ È!¥#fs�ï úV„sE3H±ÊŽÑ6ɰ%àúqî(o:_ùèÿ÷Ñ M(?ëó¦Q@–ò™bÜzƒƒY>*Ö$Ñ4F¸€9ÜE#!Içò´¬Ô7ûßÐW3ñþEëúû_ýë§μc-®a‰“…J;Øà_ÄÌŽXê·€ŸîÎÀ~@Ònëô¾ÿÀ‡ÿ©oo5ÝÂAoI+œ*¯SS_i·zs º‹fðJ�Á�Ç\H¯®ä¢Ÿ-•þGÎsUkšîĿۺÇýo¿ð!ÿÆ�íÝcþ‚·ßøÿãYôU{*ʾâ}¤û³CûwXÿ ­÷þ?øÑý»¬ÐVûÿük>Š=•?å_p{I÷f‡öî±ÿA[ïüñ£ûwXÿ ­÷þ?øÕ8 –æt‚ÚI\íUQÉ5=ö—y§lûT;çk :ò .Såi_ä5*�s]Ø—ûwXÿ ­÷þ?øÑý»¬ÐVûÿük>НeOùWÜ/i>ìÐþÝÖ?è+}ÿ�þ5$#ÖmæYSºb§8’RàýAâ²è¤èÓz8¯¸Y®¬öíQþÖÑ­oŠ…iWæ `H?¨5¡X ÿ‘BÇþÚèÆ­úøÜDT+N+dßæ}E9SŒží!’}Ñõ¢‰>èúÑY"ÙÆŽ‚–�ÐR×QÎ%CNÔšæY-.â_B2ñg!—³¡î§ô<½,‰ O,ŒK3€¦� Eyêk×wWj“ßê–zL­?6ÖÛü­…enFö=9>ÕnçPÖ¢ð¾¡4fêB·�"šìiDYLÉ$têyŠå;z+‹¼×u¥–ëQŠ (íô±$w6ÍxÙ˜ùjÿ/îñ�O¿=3U5ŸêZíÁƒRÓb_³¶ËY¤‚€0$]¬åÈÇ' ÐÑ̃•�mÞ�¦^ܽÄöå¤�&Ù]V@8ÔŽ9´UU*€ W!á-[Q¸º׆P‘"il%‰î ó‡sޱŒ{×aMj&QE1W²²·ÓíÖÖ?.ÎÕÜN2I<žz“V( Š1KŠJ)h ¢–ŒPQEÀ(¢Š1IKE%´PQEQEÀík˜ñ­Ý½Œ:-ÕÜÑÁo« <’6F×äšéè®3¤â5]~ÇRÔ¬œkM‡Úw]ÙNUZà2mF‘y)$ÿ†*œz•ô–º(ñýæŸc%´Ìׯ–A  pP˜þm¼d’;b½Šóms^hµ%k ëÕžÚâÑM;�:7hÃ0„. •c—c�ÙÆ0*¼¡4–ñP†þöHê�:F×rdÀÏl7…'’Ë»ÓåéÅz�çšÆ¥þ¬~Ýy³ Ò.•bŒDsÅ„ÇÉÑÁ%Ã1û¼ôÅ6öâý?·µ5Õ/•ì5È ‚1ò„möpÊW¸"FëÓ¨Åz-Ÿ¦=³Üj"Þîâv[¢%YI"Ø¿"dp¸Áã#$ÕÙ¿ÔIþéþTúdßê$ÿtÿ*É¢Š(®oƾU¶�¤÷@Ö—0"Nñ¨Vš0û€ 0Ûž ãšé*‹[{´T¸…%Eup®¹�È?PhŽ�C²¼ñM³Ç{«ùSéÍ2±¿¸GåÓ–~ïéY^"½™õñÿ¼?�kQEQEW;㛑ƒµhSKug41-½»ÊwØ íh÷8ÑUMCK²ÕbH¯íÒâ$mÂ99R}ÇCô9 &ÓfÓm•éTPŸC>£=–ŸêÿèóêérZ^<ì#0±d22)nFyë�1ÞÁ··Žgq… #–cŽäžI÷5%¡cþ¡¿Þþ‚¹Ÿˆßò/[ÿ×Úÿè]5�ú†ÿ{ú æ~#Ƚoÿ_Kÿ =uà?Þaêsc?�/C€Ñî=Z²ò�ÂîÚ²° ÜW’:Œ�ƺ£Eöë7ŽÒ;[™V’Æcç”pUr2Oe'·¥qôWÕU£)Ë™;iýu>~�UÙ«�¥å…¬—ñYý’(¦¿±;v©¶ec´€2;p@=êK{]4ËwµªOqhÑÛ…Kt”²¨;ßk2ä–Ï<�1\=�Õ%ksÿ_ðÚýf7¿/õýjnÛÚEsâÉ!´…#ˆ;•†áCcü»Aäú úVä–%ý¤£KI-«ï�!�(ÁðÊÎÒqÛ5ÃQW<<¤×½²·õ©0¯§îõ¿õ¡ºcº²ñqK'µ71¾Sh ;~î ÀôÆzñ[ÚM¨Õ´÷›OKiæ3 ,dpè@Œ�ã<�Ÿ_N+Š«6Òé׉u £:†8$|ÊTôö4U¡7uëkzéêëE=V—¿¡Ô®žfkqego¨æV0†0£iسœdóRO§Z N'[8~ÔöHíÝQæ G*3€~_Q\M?U•þ/ëïØY�òÿ_qÚéöhc¹’ëM‹ûDH¡íâ¶I6Ç·¨BÀ œäŽGµrzˆ…u+•·�ã„JÁñ•èpOO­V¢µ¥EÂNMÞæu*©Å$�_ðOüŠ?öÓÿF5oÖ‚äQ±ÿ¶Ÿú1«~¾Küyú¿Ìúçü†:WtÓF³$M" \T,2Àc$øÈüÅXÌÍ‘ ª¡Šn€9Áǧò¢È\Ìáü'¥ÞZköóM¤%”cNxÙÒÑ!ÜÛ£?1YqàõÚzñéÝÓc‘&�d‰Õãa•e9zƒN¦•„ÝŠ(¦EPEPES¢Š(¢Š(Å&)h ¢–ŠJ(ÅQERb–Ší(¢˜3?Î@ z ä:GÑMÚç£~ŸáFÓÿ=ôÿ uݧþz7éþm?óÑ¿Oð QMÚç£~ŸáFÓÿ=ôÿ u= 7iÿž�ú…OüôoÓü(›Ø¶ï‘†=é¿a—ûÉùš½´ÿÏFý?Â�§þz7éþGì2ÿy?3GØeþò~f¯m?óÑ¿Oð£iÿž�ú…Qû ¿ÞOÌÑö¼Ÿ™«ÛOüôoÓü(Úç£~Ÿá@~Ã/÷“ó4}†_ï'æjöÓÿ=ôÿ 6Ÿùèß§øP°ËýäüÍa—ûÉùš½´ÿÏFý?Â�§þz7éþGì2ÿy?3RÁhcpîA# giÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€E7iÿž�ú…OüôoÓü(ÔSvŸùèß§øQ´ÿÏFý?€Tå²%É�€±íV¶Ÿùèß§øQ´ÿÏFý?€(ý†_ï'æhû ¿ÞOÌÕí§þz7éþm?óÑ¿Oð  ?a—ûÉùš>Ã/÷“ó5{iÿž�ú…OüôoÓü(�Øeþò~f�°ËýäüÍ^Úç£~ŸáFÓÿ=ôÿ £ö¼Ÿ™¥2g–Z»´ÿÏFý?Â�§þz7éþ‘F"Œ(üêž³¤Ã­i²YÎJ†ÁWU‡CWvŸùèß§øQ´ÿÏFý?ª2p’”wB”T“‹ØóGøqª‡!.¬Ù{fòÚi¿ð®u�ùù±ÿ¾ßÿ‰¯MÚç£~ŸáFÓÿ=ôÿ ôµ±=×ÜpÿgPìÏ2ÿ…s¬ÏÍ�ýöÿüMð®u�ùù±ÿ¾ßÿ‰¯MÚç£~ŸáFÓÿ=ôÿ ?µ±=×ÜÙÔ<Ï2ÿ…s¬ÏÍ�ýöÿüMð®u�ùù±ÿ¾ßÿ‰¯MÚç£~ŸáFÓÿ=ôÿ ?µ±=×ÜÙÔ<Ï2ÿ…s¬ÏÍ�ýöÿüMð®u�ùù±ÿ¾ßÿ‰¯MÚç£~ŸáFÓÿ=ôÿ ?µ±=×ÜÙÔ<Ï2ÿ…s¬ÏÍ�ýöÿüMð®u�ùù±ÿ¾ßÿ‰¯MÚç£~ŸáFÓÿ=ôÿ ?µ±=×ÜÙÔ<Ï2ÿ…s¬ÏÍ�ýöÿüMIÃ}DÌ¢âòÕ"ÏÌc,Çðç^“´ÿÏFý?Â�§þz7éþžm‰î¾á¬º‡b8tûm Š%Ú¹ëõ«ݧþz7éþm?óÑ¿Oð¯9¶ÝÙÚ’JÈI>ïãECt^8�Y;½øQB•‚–ºNsL¹¸�P¸Ò®$7&%Èë´žOGþcž+^ ³²‚ÂßÉ�H–fc–v=Y�r}jÇjy^½5ÝΧçí¾»™Ñ…³yrÛËO&•ƒ0ÛÔ°ާîÖÖ³mwáˆ!´¼¾Khf6󼱑&ä�œn2.r‘ŽM^ Þê7h¾šÎÉŒ‚V}66Y™€Ç2±Èãw5£¨x^ÆÿJƒK-µ”D“8ùòRA=ÎOS“ÍE™wGžËwgæµµõö¢.¥Ža8*¹“h”r~\�88b ó¸ç§­Nþµ q>%žæGY„ow$pùŠª*§Ê’¤þ‚�˜]ð„i‡ÄQ HÒêåUT`'|[µ�¡XO§iKorÑ™Œ²ÊþY%Ayð œnÇJÑÅR؇¸QEÄQE0 (¢€ (¢€ (£ (¥Å ¢ŒQ@Q@&)h ¢–Šìé©÷Ÿýïè)ÔÔûÏþ÷ôÈtަG4R—ÈŽcmŽ�ÚÝp}#ó¬í~ÂþÿL‘4ÍN{ ÅVhž%B±À`Ê~\㦽pÚ5¬·ÚÄ#Hñ&²“Þs¬å *¾XB<¬,…—áúô¦–4‘ci;‚UIå±×ñG,s&ø¤W\‘¹NFAÁ�W˜xŽy®øyöÝñ[Ròk{;Åż¢"‰tÌáÓ*�¾R‡©?xdšÈÑôÝO A$¾žîcnK^-H�óóå¤ ùŒÐ«4‘£*»ª³ä('°3ÇáMIá‘ÒTep •`CЊó JØÉáËÍÜ HÐ5ºÜIÇÙ³þ®V'Ž ð3ž3\ÝŒ61Zé®tϵmÒ8î£ó/sÆ[ÊrùU9Ž@w¢Š(¢Š(¢Š(¢Š(¬áYÏÌp?"¥:¢—ýdïŸý¨º…®-d….%·g\ bÛ½=ÆàF~ Ð¼è„â"yÅKˆ÷ ÅAÁ8ôÉ�,’Ç o•Õ nc�’p?ZòÛû[ص ’_j­â{yZ×NL@X¦ «íò¹Pæçƒc©âÉ5-$h¶’L÷ÖbáçžîùãMÒGɪ (h÷Ž6޼Ðz²Æò4k"Êdœ=ð*I. „fY£A¹Wæ`9c…RN­yO…n´½7ÄÒÀ¾:�ã[[4=¹[– )hó³8ö;¾~Iã â�+Z¼Ô'¾²Ôî쑯m¡i/c·Ä„\/—±A*„’Ž[Á4êâD`Ä:�§¡ô£ÌM¥·®É9è+ÎKÕ,ü­és‰¯.[#šÚ+˜'’F'rìTl–<—ûœ@ç/Oðüš-Ö«­˜{;¨¦xìôÇI$�­LjÈqe.Ì1ŒnÙ zÚ:ÈŠèÁ‘€*Êrõê¡¢E$� ¨RHíbWSÕHP«ôQEQEQE×qlç8PIÅ:¢¹ÿ�Y¿ÜoåRÐ%š(B™dHÃ0E.Àe�sO¯=ñ6œbÔ|�wÄú¤:,éçà òEèÈRÛžsÅuZüÖöš¥ô:�ÚÜYͧKJÛ«[Š( AF(¢˜))h ¥¢Š(¢ŠQEQEbŠ((¥¢€ŠZ1@•5>óÿ½ý:šŸyÿÞþ‚¹’–«©< —uojìØ’ib2_öF@ÝõãëXqø>m%ÚóAÕ%‡P—›¦¼ÌÑÞ7÷¤\Œ7¡\`q‚ÕÑ@Vúlñø’ãT‘ã)-Œ6ûW9Þ�#ôùÆ9ìiº&Žl4GÓï3‡¸¸‘—•–I�À Žx` kÑ@­žƒâ y–­¦[ÛMu4ÑÄÚ{ÈU]‰p•GO΋o ´&ƒnƽӖÚ'›'#e,ŽûGä+ª¢€9ˆ|(ŸohæŽ!¦ÅqÛ…•šWe”K½òñØœõã¥tôQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¨?isƒ‚Š3øµgëúdš¾�´NŠVîÞr\œmŽdr8ï…8÷­J(�_9¹‰ßÙì­ãH¡3´¡ŽØØ¨Áe]Ü𬿆/bÕ5=JÓW”Is*M©ù!±¢!;��q�¥tôP9 ørïA¿žTÔæÒg¼ŵšàã.˜à)Nq�ÏZ¥§ø{Å:Zrkºb¤qÂ�9ßÓwš3õÚ>•ØQ@dÞ·Ô,4J+9¢ÓlE¼’yA�ÜFm,8Q’ßP¾• Ÿ‚ïìtq§Ätà&¿·¹�áS¢BÑ0Ø�HËÉ# ää×sEQEQEQEQEG(&HHáò}¾SM»ûOÙ%ûˆ\í>Y˜›»g⦢€9Gðd—3®§y¬\¶ºŸêoaýÄ‹%vá²O¯L]“JÕn×F{û›I.,o�į mºyR Â’pß8'œu­ê(.×M–jZ›:n­­áEî3)$û~ðcèk›ºøsa­jO¬Yéi g)… ‰Ý›#|’ýænsŽy9ÅwPaá+½6ÂöÆÞ*N‚?;û/i™9Ê̈ʃÔ9< Ê_†®º„·~G…�™Gä�¼µÚXîÎáŽìè£Ò½ІÑgKH–éâyÂáÚ(„û)$�øššŠ(¢Š(¢Š(¢Š(;€ZÚP$¡¥IEÌ^øZHãÄW¾u¢±0YÚn…ÿ ³gs8ê:{w§M¡ëSh¾‘qªCyÍœ�ZÍ4E%RÊW÷Œ ŽBƒ]-‘y¥Ms Î¯]>f’PIË‘ü¼z¸<ö¦êZEέ¨Â·W(4˜JÊm‘Néä#{gîÚ:ž¼ š(ôI¡Öä¼²ž4´¼âþÖE$Hvà:~WÀö â ¹ÐîŸTÑ"µ†ÎßHÒäÆÛÌ8‰ãnùÁÎîÝ+¢¢€+ÁcmmwuuAfº*f`OÎTm}*ÅPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPkßõ#ýïèh¢÷ýHÿ{ú)¡3–£ ¢ºNq1F)h FE¯‡,­uzidI*,�”�¤bÌÊ=NqŸOÆšÛ`T¾™@_@ð=‡ûÿ éš•ÄsÜG#:"F rrŠs·œð{÷8ëWµ[§±Ò/nã d‚ %PÝ U$gÛŠá®óÿ½ýq�#¨¢Š(¨//-ôû)¯.æXmáBòHç@¬­Æ:º-ÖÇTµ{‹„Þ–Þrù£Œà¨9£µnQX>1Ò­[Pö�ºzo¹snȉÎÜÀO8Çjfño‡þÇ=ÜZ½¥Ì6û|ß²H'eÜÁWå�'’@é@4W3ÿ ÿ‡¼Á�}æ A³.r\.â¸òúíçœÕ‹ïi:q¶"ý~ÒªÑcO�·n á8l�6žrGÐõ‹Š4÷Ô`±hµfžCF{ ¢G`¥°”/E'¯jÚ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ׿êGûßÐÑEïú‘þ÷ô4SBg.: ()q]'8”RÑ@ÖŸ7:$ZÅÃÛ^Yy@ì*ùl$]À‚ PzàóO„�bί¦¿2¼ÓÜHå&2‚<¢¨ÏÌ[ÈÇ=ElÝéöZ‚ªÞÙÛܪòÑ+�ùŠ–"¶…b‚$Š%áQ(@)X.aøÒâ;_ _J×[Ȩ|—ŽV�¼Ïá©ûW�>«q º™¯¦òÖo-RK‹Œ‚b ¸ÛrFÒAÉÜÛr À8È@=@8æ bæK‘iŸ(Ä’ùcsŒcõ<? N7•ŽÄs-”6ñÁ4ÒÜ5ƒÃvÉ<²BžbíFbÌ@,rNp:ô«º:xZ8´m¿Ñ Kcˆ±”4›Šã�ØÛ“ô®Ú!·�c†(âE Šé�NF§*Ѝr‡0´RÑŠ¢D¢—˜¦E¢€ (¢€ (¢€ (¢€ (¢€ )qE%´b˜ E¢�…Q@ŽÆšŸyÿÞþ‚�MO¼ÿïA\gQ…}¬i7ÒâÆ]RÖàÿ£y Ã'÷$í°õßÛ�sÅjiÑÞÅdƒP�&ºbYÌkµ';W¾LžN3Vè GÇmj–1K=–¥u,gýì¬G+2ª3n;2Œn'Ÿ Ýêðë:uÇ‹4«µÕ.ógªÐx~Fr,ŒÙa%ˆì»[K·ÖtÙl.Œ‚ –19FùX0ÁŽ@éYÑxCKƒP³½�õ5¤†HÄÚ„Ó.J²ò²3Œy>ôç~UÅÏŒµ”K™lå¼µ[15쭹Ąe£c†O–Yû¡1š¹k,pè±I‰3a2È©ËGö²»}ðÊÇþ^ŒÚD&êòå%–9îcDÞ»Iˆ¨`2æ=r=ªá½8è+£Ì’MlT³HVFÚÛÁܘ îçŒP0èšVºö7†5‰¯^8­ÞIR&‚HãbŠ r6qŽ7s\ÇŒ`þ×Õä»Ô´œ]®‹i;DmeŸÉ}ò–BÉmã<œWêG¢ÿ¤TÿÁ½ßÿ¦Ýx3J»•ä’]DµKLG¨LŸ"—#q ŸœýòßÏ º}äógG׎{ºçí|%oiv’&¡|m’sr¶lÑùBC“»îoêIÆìfº (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š­{þ¤½ý ^ÿ©ïCE4&s ¢�ÐQ]'8QE G=¥[êž�e&»}Ý@“4qGÄ, àf2p3Üš™Ò÷MÔ´ÕmVêî+©ÚŽá"*GE9Êß­gªx�HŠ-:Æ´ÚÛF±E/Øã$¨I¹BH´t«z|¾¡{oqª¨�,ä2Å·D.Å:¬Òp8ê*J5uKßìÝ&òûËó>Íͳv7mRqžÝ+‚Ôµýv9.µUûeµ·�§ìñ$ÛFÝÄ�ÒÚ•Èþèã’xÇm¯Ç$ºD±GÔ†L!ŽÙc,ÀðAó]¾¹+Ïcð>¦š¤ò=´F°Ææµ·¿ÊŽÑl.¸ü£9ê0)Jýu:/ê—šlÂ/õf™m£oÜClP³6Å,\–lg=ª-WÔ'Ôí-oïuq9s«,¢*¦ö\§ÍŒ? ¯­Øjz‰òáÓoîDöVêï0…YvO½ƒd„-�Ð:db—AÒµ jÊ)4›˜-–òyĬ!Ú¡ )Èôñ£[†–;ê(¢´ (¢Š(¢Š(¢Š1IŠZ((¥¢€ QEQEQEQEÀ(¢Šì)©÷Ÿýïè)ÕŸy¿Þþ‚¸Î¢z+/Q¿�M´k‰A`GsXð˜Eÿ>mÿ?úÕ�LE:nÒz�4°•«GšœnŽÂŠäáñu»Ì‰, 1Á}ÙÛúWB¬C)HÈ#½U:Щð;‘[V‹J¢µËtVf¡+Á¦]Mm’8]”ã8 +�ÿ„§YÿŸÏü„Ÿá\xÌÊ–J5wíoó<\Ã6¡�’�TÝû[õhõ+Ë¿á)Öçóÿ!'øQÿ N³ÿ?Ÿù ?¸ÿ·ðßË/¹™çÿ­?å—Ü¿Ìõ+Ë¿á)Öçóÿ!'øV–ƒ¯jwºÕ½½ÅÎøŸvåòÔg OaíWK;ÃÔœi¤îݺuùšÑâ<-j‘¥ÊòilºüÎþŠ«E{'¾Z¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«E-ïú‘þ÷ô4TSÿ©ÿ�äh¦„Îtt´‚Šé9‚Š1F(•汦iÒ¬Wº�¥´Œ7žuBG® éSZ_Zj™¬® ¹ˆ¥á�:çÓ#½r–u˜6òLÚŒ“Ýê6fQ©Ü) ÎP? ÇüŸ\Ë£[[�[G½¶7‘-þŸ-ä±I}4¡Ÿ*–ÜÄ1 är==&ì«#¬gTRÎÁTw'£ûU¿ü÷‹þû�ãÒ]Ë‘ã{»eea�ÀΙW1µ´�m$š?‡¾Íuwqj#�NT‰pÛ·ŸÝŽÝèl¹èM4I‘äEC�˜°ž?�Ë»¼¹ö±VÚÀá‡P}ëÌ庒/Z .êºNšélno?°é“Š»ácª¶¨¶/¨ÏÁî.5aL±»8*ÝóÏ^Ôs)ÞµÌ ’´ÑˆâϘå†r{c½H¤2†R# ŽõæQ_<:^µ÷·S5ý›’­¾îE‘H4q°ä“ë]�…®ÆžøÔ®¯ Ebu¸·´,¸Ø§¡œÐ�Á«´QEY!F(¢€b–ŠJ)h ¢–ŠJ)qE%.(¢€ (¢€ (¢˜(ÅP_PI÷›ýïè*z‚O¼ßïA\gQÏx¼íÑTÿÓeþF¸½ÊÈ9Åv4;t%?ôÙ‘®KGYæ’E¶°Ší°3æ¯ øäc5âcuÄrùQ•û¸NgѲ•C|Ý t^× ˆìŒ�ÈÛcõB¥0YÝ,è—Ú-”6ìG˜á‚•^ç;ëJh‡ˆíV-¸Y† àÖTùèÎ-ugEUOJi«Ù_tÿ#Ñ5r‹|IÀòè&¼n-wL™åT½€˜Èì㑎½qõ¯cÖsý‡¨c9û4˜Æ3÷O­|è­$²˜„×ÃtÑŒžAZDbxëËgŽ1ŒñZf¸hV¨¹žËõô?+ΰ�ÄU�;Ùwóôg^×ð­·žVP¥Â(hʳ@½Du›˜F× ¥‘]KnÉ#uÎTñXwÌϤÇ%õÌ“¿x÷²Ä¥B—Q�À/aÖªi’a‡Ù_l¯*‘n%b¾t mØB©ã“ÐñøøÑÀÓprogoëOÐð!–ÒtÜÛÙÛOøkôìuW¥µ¬Æ)|ÐüaV&bÙôÀ9­oêÖ×#ƒÊK¦òÄ„æÚAÑ#‘×Û­r:ô’ kX®Ù¦#ÌŒ)‹÷rs»Œr½úzÖ‡€mîeñtp‰î-£h' ë'+!x’@OÞçúæµÁa)óS©}n¿?C|¿Gž•Võ¼^þkÊç©·�¼=ðE>§¹š:›‡`Û‚6AãÂjy¼Yáè,–òMoO0m�ö”ýæß¼Ÿ˜ŒŽ¨®q� š¤zz]ióÏ$«#$ªªë¿ S»¿ñíç:UÕþ³âmþãT’Õ¦Òç?ºHöJh×åܧ‡[®GÇ9Øð޵«ÞÜGyvŒ–±„Œ,a~Ö¥˜ žœ) €ÝÔm ºŠ( Š( Š( «ÛßÙÞ<©mwïÛ"Å b‡ÐàñS°VR¤`ƒÓç:°†þÓ[¾ÐV8­,´™ì`6Ø_=Ž lª Lê[(¾‡Q±¸·’âÛy Œ�ò$ªUHê ûk»kØ{Kˆ§…¾ì‘8e?B8®L6‡½{)ûöLZe¼“’‰JÈæ2{dqß§µSQ¨�Q»Óln?âsz¡¶(²Û[ìT-†eØ&zð_Ú€;d¿³–Íï"º†Kd ZXÜ2�¹ÝÈôÁÏÒšš�”“Eº„O4~dp³�#/®ÓÏé\‡ÙeðPÑc±–Ò;­R{4Š]¸ò¼éEXô�]~£¸äË}åÕ@Ûý­ÿ ·•ÿ=1º¸ï·ËÝí�ÞôÜ›û5½[&»€]2îò=võÅ2mRÆÚY㸺Šk$¦FÚ¨¬HRXñÎÖïÚ¸�êæÒþ9.SN™îµ«ˆ$ˆÄ~Ò­¹ö¾ìô�¿w=«^;­2>÷IJ#Ç-ã=¸tß(ò£Žå€$ÏÎh¡›S°·´K¹¯­£¶|m™åP�ž˜bpjÀ‘!(u1‘¸0±{¼�n¥¢µP�óå€ÜÌ@\�+ÁÇ µÂIâ{ý4Ë=ÕêO§iÚˆ¶¹ºØª&�á�€Ë#*�¸ZÓÅòDÖ·9›RÓíî/o"HÔ ËWŠ>ž²�‘Éò�½z%ç?ð’xŽjzƒo(šs]Eq/ÙˆIA±»„÷¹ëÍk]ÜjÐx†ÏJ—ÄšÊk™&6ñ™^0‚0 zç�΀; +ÃºŽ§«hú]ô¢Ûd©'ÚÁ!L67sØŠ¿ö·—mæ}‹œßhÛ¿WÍ·gû_w9㯵_ªwú¶�¥">£¨ZÙ«œ!¸™c }·š¹\÷ˆ,m¯59[Y]>æÖ)]ˆÛr¶Ü±oëÔP¸Ô¬ Û0½¶+u�³‘*âlŒ�œüÜzS¯/­4ëcq}u¬€ež@Š éÉâ¸Ù¯QÒ<©ÝÃw’ÞBÄ… €Qúg�§®+²{‹G£I†*d1@FA#¶@â€#°Õ´ÝUôíBÖñc 9·™d O®ÒqO…‘†…幊w ù«‰öSžO�éY ‰[ðj%Ï©ÿ¦Ê@ïò£è«µG°®KÁßk¶¹Ñnõ�Y϶Úi\âÞMÄüÝ·HÁí·è¾·Öô›»Ç³¶Õ,¦ºBCCÂ3©APr1WëÊí…Ô:eµÜ³ØÉe½#-²DVå˜Ý²Œ>â'8 2 Œ÷¯T Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( çÿSÿÈÑDÿêàCù)¡3Ÿ‚Šé9‚Š( y4ýRÑÂEcauWs]A,—�)‘œœ¨�‡FO­M¦é·‘_ZK=µ­­½•£ÚÁ6Cú–EÆ`wÎjýæ©e§Ík ÕÂE%ÔžT*z»žþãÖ®R°îeøƒN¸Õt“kk,qMçE"¼€•$Vè:ýÞŸ¨¬ŸøE¯Rw¹Šm .›qó—GÚù äîó3““ϽtV÷¶÷rÜÅ î{i<©FÚÛCc߆b‹&häfð\RhvH"¶m^Ö hVâBÅTFêÇo¦pÝ<Õ›/jVš“jgSF¼»âøy!|žXìW Îs“šéh¢È.Î=¼%�Í¥æ™|Í{Ç›$—„²QÁÄi´g-íߟ]�N½°}F[ù­åšîçÎÌʸ؋Г�»êk^ŠH/p¢Š)ˆ(¢Š`bŠ(Å¢Š1IŠZ((¥¢€ŠZ((Å-bŒQE£Q@uA'Þo÷¿ ©ê >ó½ýrG-㣷Ãêéºÿ#\UµâG£_@Ò,¯AŽ nÏóéšÆ•³§µ¤ÌÈ ®½TŽõËÿº‹þ‚oÿ~Gø×“ŒÃV�^zjêÖ>�,Çaiá½�iYÞû?&q¾cÿyJ½¡¹>!°�õëÓë]'ü+¨¿è&ÿ÷ä�\Ò¼o§j]½ä“ŽåM�F{É®ZxBšmuî�B¾m‚t¤£+¶ŸFoêàø�mäÿÐMyé¶ŠáÄ_0—ͱ8lcצ;tì„O>™u kºI!uQœd�@®þmgþ|ÿò*�FwN¼êGÙ&ôéÐüƒˆ¨âgVÂ2jÎöOô9Á§DY×dÏ8 ŒîmÄöÿhÕeÑ#Œ*îê6e+#)LÈ 3åOvn˜ë]gü"ÚÏüùÿäTÿ?áÖçÏÿ"§ø×Œ¨ãWØ—ÜÿÈùõC1_òî_ø ÿ#˜mÎIŒŽ®ÄŒ.qÑGþËúŸZÖðÎ�m&± ¼²4©:4Û¶¾ìÆ;t«Gþmgþ|ÿò*�ih:§e­[Ü\[l‰7no1N2¤v>õÑ…¥ŒUéóFVMt}ΜÁbisÂVRŽéè¯ù[s±‚í ŽP$Q¨DUè  Ut­*ßGµk{]þ[9œçØözŠûCô2­•„V-tb.MÌí;î9ÃÇ·©ÙxgFÓïe¾·Ó­ÖòY$•®v4³’[æëÜþ­EcÚøgM·†HåIo ’¤Ì÷²™˜²}Þ[ÓµWoèòï’â9î.Ùƒ Égc:Ócƒ”Ñp=« ¢€0§ð�…Õ¼Ñ\My+N�¤“È‘„LY~a‚9$œT¶ÞÓl¯!»´Yàš1µÙgrfñ&Iß‚x'‘ë[PÇ…ì.u‹[¹`¶{[{G¶[6·RŸ3£†6tÇz}ç‡-/õË{û¨àšmÜ[Ku%�7< lÆ1Þ¶h  ·:m�êÄ·VVÓ¬G1‰bVÙôÈâž–V±É‰m ¼QùQ²ÆDãå°àqì*z(¢Š(¢Š(¢Š(Ddu ¬0TŒ‚=+:Ïú&�p.,t}>ÖpAlˆÀ£ f´¨  -¢éOe%›i–Mk#ox Q›9É\`œ÷¥Óô�3I ;N´³cÙàX÷c¦v�œdþuvФ4«T½‚æ4ò¼�.Ø£P´„rûÜÚn¹©šÊÑïñ­¡7H»VcÞ£Ð7\TôPY4ëG¸’äA]¼f?´¤kæ�ìØÍ@Ú•.™k§\éö×V¶ª«w,�v� àޏïZ4Prh4vfÍ4‹µ/æÙné»n1ž>Õ}c�b*(Œ ¡àLS¨  ‹¥éëdÖKaj-% ®Ãõ\b¤V«1 hDpÑ(Œb28Gn§§­OEVƒO²µ¸–{{;xf—ýd‘ĪÏõ dÓ"Ò´èâ->Ö1q‘>ÈTy¹ë»Ž¹EU}2ÂYážKg–R4JZ<tã�•´ë½[׳·kµYÌJdÐ63Vh £H"ŽY%H‘d”ƒ#*€\��“ߎ*J(ºéöHèëin­�*0Œ®ÙÜÃŽääõ9>µhúcµÃ6�hMÈÛ90/ïG£qó~5vНwagÇyiÊ+nUš0àPzI´ë™áž{+ye‡ýT�³'û¤Ž? ³EW{ )/Rõí k¤Vs.£Ð62(k 6ŠxšÒÙ c’%‡s€>‚¬Q@}ŠÓȆ²ÃäÂU¢�ËP¯Ý*;c¶:Sæ‚+˜^âIbq†GPÊÃܵ%Té– aöcll°ÙÌKåðr>\c¯5*ÚÛ¥ÓÝ,-Ċ岎€ž¤ ŸÎ¥¢€(®�¥¬wºm˜K‘‰Ô@¸—ýî>oƪßxv×R× ÔoâŠÕíþÍ4!Ô–t`ÜúlôïÖ¶( U ¡TÀµ-PUîôû+õU¼´·¹T;”Mp§ÔdUŠ(>ûAѵ9–ký&ÂîU]Š÷É#ë€HéÉãÞ­-¥²y›-â_1B¾ Ê> *j(�üà iQ¨DDPªªtT?ÙöFÕ-~ÇoöxØ2Eå.Å ä1€AçëVh  hZE­ã^[éV0Ý1,ÓÇnŠäž¤°Í_¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŽõ?ð!ü�Oþ§þ?‘¢š9ñÐUkèîÞÕ¾Å2Gp¤2ù‹•l wÁé‘È«C ¢ºsÎóRÔ®£&ÒM>Þõâ` JÿÝ^Û]ÝøÇzÖubŒ¶±3ƒô§Q@mþ‡ºdwÓ¾¡6¡pÐ]Ë04;t5?ôÙ‘®r²Fq^^/R�NX3Ý˰4kQçš»¹ÚÁã;i'DšÝ¢F8/»;}ñŠé•ƒ¨e ©¯ IT7ÍÐ×Má�}­îbÓ¤c$6ØýPŸéK Žn\µ:�•(ÇžŠÛtv”Ïo¥^Mm’8Ôã8!Iç_ð–ëŸóýÿ�“ü+Ðu’‡¨p´Ÿú ¯‹]Ó&yU/`&2û8äc¯\}k‹:ž"5#ì[JÚÚýü�͸†¦*5aõw$­­›ïäuð–ëŸóýÿ�“ü(ÿ„·\ÿŸïü„Ÿá\Û_¶ÞyYB—¡£*ÌI`õÖla\*–Eu,q»$Œ×9SÅxо5í)}ìùÕˆÌ^ÓŸÞΧþÝsþ¿ò…jxwÄZ­ö»mmsu¾ݹ|µÂ’9ÔW qª[ZÌb—ÍÆbf-ŸLšØðf­m?‰­ü¤ºo,J[6ÒˆÙ޾Ýk£ W*ÔÜ¥.V×Wk\êÀ×ÇËIÊSqr�Wk]»EsÍãŸG<OªAng€Î¦åÄX¶à†Á �xÇðšžxrÞÅo$×4á†òßí)ûÍ¿x/?1Q_j~†mQXV3ðÞ£±‡[Ó„·v[µÜ~fæÆ¨cósŒzÕ¹µË(./á‘Øu¹�±ò…;ûúá #éë@TUhïíäÓÅöí°ù^sn꫌óøVoü%zXŽyY¦X`†Þy$hˆ “´žãËdp94·EeêZý†—s ´âêIæF‘#¶´–v*¤qœ °ëëQÚx›O¼¾ŠÉ#¿ŠyƒÅÍ„ðÀÉÁt§½lQEQEQEQEQEQEV¶Ô,¯Tµ¼·�á;dX¥ Pú?³EU‡R°¸·’âÛi`ˆ‘$‰*²¡A àb¤µ»¶¾·[‹Kˆ®!o»$NOÐŽ(j*²jrÙ=äWPËl�‹K†Q·;¹˜9úR&¥c$ðÀ.áÍ›,àHËë´ó�€-QUÚþÍoVÉ®àl»– ÞG¨\çú­…¬³Çqw&ÖIL­µQX°RXñÉVïÚ€.QUfÔôû{4¼žúÚ+gÆÙžUTlôÃVˆÑ C©Œ�ÁÁã¹ô QUcÔì%²kØï­žÕ3ºu•J.:峊š ˆn IíæŽh\ed�ƒ+b:ДV}¾½£Ýßµ…¶­c5â oÂ4€Ž ¨9ã½X·¿³¼–h­®àžH[l«�ŠFð~´bŠÏ¿×´m.uƒPÕ¬-&eܱÜ\¤lFq� ò« f—©d÷p-Û®å€È°õ œ‘@(¢¡ŽîÞ[™­£¸‰ç„)–%pZ0ßwpê3ƒŒõ  ¨ªÑj63„0Þ[Éæ;F›%S¹×;”`òFGl³@Q@UdÔl¤Ô$ÓÒî¼�½¸�Or½@ä~tfН{g¦Û›û¸-`,òPOA’qKi{i¨[‹‹+˜na=$†@êÅOEPEPEPEOPÕôÝ%õ-BÒÍd$#\̱†>ÛˆÍ\¢ª�OO+lÂúØ­Ö>ÎD«‰²26sóqéN½¿³Óm�Íõܰ–y('§'бESÓõ}7VG}7P´¼XÈm¦Y“ë´œSÆ£ba‚aynb�ÂBþjí‘�@§<žÒ€,ÑYöúî‘yzövÚ­Œ÷HJ´\#:‘Ô#¡@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¯Ô�÷¿ÆŠ/Ô�÷¨¦„s`p(¥Ðs‰E-…m>³©,ÓÛ]Ø[·B‘Éhò7îädÉa*ŽJç§zƒÃ']i>ÉwäGªG–Xal€ƒÊ�N žAõ‚Þ Z}3UÇ”Vþ÷ÍýòGŸô‡ÇÞ†Lþ�{ö·j—QëÚR_Iæ\­…ߘÛÃõ– rOöGNýi\£Zúö=>ÔÜKî€àˆ!iòPN+œOAö·–K;ïì©"�­î…ŒØgbFÞœçåÁs]5Ýå­…³\^\E+Õä` ~&¼þÚémõ yn£¹�Â�ܼös<8C÷wŒÅI¨ô6$‘Ðj.KmBÆÚ k‡{ˆäo*KYQÉåíã'ƒÁÆrqF‘â¶ÕuAk°)#C’ qy1ÈY½NéöëíXž&Œê~%Ó¯ÅêA§Å†Þu¸Ú’|»¤%וR0™ŽO¥WÒf´OéBÆ{ÓÎþp´Õæº2 ýåp8^}…+»ŽÊǤÑKEYQKE%´PQKE%´PQKE%´S)qEQE aE.(Å%¸¤Åu”ÔûÏþ÷ôêj}çÿ{ú ä:NsÇ'n€§þ›¯ò5Åèë<ÒH¶Ö]¶|ÕáŒf»�¾SÿM×ùàí¯=ú� exŠ uv˜¯ÒÄëØú¼®X/w¿êŽ�YÝ,è—Ú-”6ìG˜á‚•^ç;ë#Gh‡‰¬Ö-¹Y† àÖ'˜ÿÞ_Ò´4'Äzp$¯NŸZåUT§.¿×c½á¥N”ÛwÑ÷ý[=S[Ïö£Œçì²ãÏÝ>µób´’Êb_ ÓD"2yi‰ã¯-ž8Æ3Å})¬€t=@�m¤ÿÐMxÒé¶ŠáÄ_0—ͱ8lcצ;t¾m‰�‘æWºýOÈ3Ì\0õc̯u§Éœõó3é1É}s$ÁoÞ=ì±)P¥Ôcp Øuªšd˜aöWÛ+Äʤ[‰X¯�(vªxäô<~=XÓ¢Ьë²gœFw6â{´j²è‘Æ•wu2•‘”¦d™Žr§»7Lu¯&8Ê\ŽkÛ×¥¿¯Äð¡˜Qönž×zi§^–·õó3õé%@Ö±]³LG™8Sîäçwå{ôõ­/‡¶÷2øÆ8D÷6±´�dù–B>ð $€Ÿ½Î1õÍ=´k9&2:»0T¹ÇEû/ê}kcº-´ºÜó<ÒRti·í|H�»qŽÝj׋¦§Nœ{®ž×ç©¶IN•(÷�N·þ¿=N…<;{® ÖtÝ\F—h¬Ò·Ú£yÊ�¡Ï•p‹ƒŒ€€}ÍWÕuH®¼á帾ҭ弎Þâhõ+Ö�ÌŒwPìŽ[h9ÉÁ<סÁ vÖñÁ Š%ˆ½@Àªé:M¶�hÖÖ¥ü¶rÿ9Î:°ì+ëϼ8? xÊ)µK˜o/|;åË|ÁÔËÈ ´D¦1¹sÓ‘Ôñ똾mWS�~çۥᨫ^!Ì÷<ÄÅ(Ø>C�§N=;z•–Ÿ ƒ]4Eɹ�§}Ç8b8öàU;/ èš}ô·ÖÚmºÞË,’½ÎÁæ–�’ß?\r å4Ë.uÿ·iVú>žúU²ß[Æ¢S¾àIÊã €9î1\œZm×ö„ñ ’ µ9£667�$¶Ä u�FC3¯Nê+Õm<1¦[C$r¤·¦IRf{ÙLÌY>ç-éŽ*»x+F›|—Ü\^3²Ü9¸B:l� ‹�í@gÄ�<4ÐYÛX}°A¥É ™£&•Ñ#mÒH¤1#òÄrpj§‚�´ñóEý‹m¥<©:lQ´;†$­ÃÁ,¼àï펵è7Óîí§ŠækÙZt…$˜Ü#˜²üÃrI8©m¼-¦Y^Ãwf³Á4ck²Näμñ.Iß‚Iä�ZËÔõyî¼Kaec®Cics§Íqç¢Ç&æW@6³dtcëÀ?Q™câ[V¸Ñ¡“U‹NK­:ây&X�‰9UUÓ~@ ¤·~â:;� é÷ZÍ­ä¶ö¯koi%²Ùµº”ù�0ì1³¦;Óï|5g¨k¶Ú…ÔpM�l-e€:’ÎŒž6cïÖ€9 &ëPÖ¼Q¡_Üê²Z´ÚUÁýÔq„”,ñ®Wržm~¹`Žs³àýsPÖ/nc¼»FKH‚F0¿lRìÏN…À Æwuk¦ºÓ,/V%»±¶¸XŽcÄ®·SÒÊÒ9"‘-aY!�ʉ–0 '(=‡�Ç€'¢Š(¢Š(¢Š(+)V© ô"¼ÛWjšåþ€‘Åic¤Oc¶Âý¡Ž lª Lê[9ô—E‘C+ # �JÍ²ðæ‡¦Ü‹‹Nµœ°Z¢0¨È x6…ˆ/¦?cþÈ‹K·–à� JVG1Û G~žÕIF¤tmJïL°¹ÿ‰Õò»ClQe¶·Ø¨[ ÊŒ=x/þÍvM¢i/e%“ivMi#ox ºvÎrW'=éÚ~�¥éA¦é¶vBLyŸf�cߌã;@Î2:àü:Ë/‚‰„¶qÝê·i»qå¤imcÒ5uúŽãËåÕ€Ûý¯ÿ ¯•ÿ=1º¸ï·ÊÝÓŒn÷®Ùt›D¾·º‰^@—lQ¨T-!œ€>÷Ÿö›9ÍNÖ6�z—�kºEÚ³˜Æõ_@Ý@ F»¹³Ô#’é4餺Öî ’&ˆý©[t›dßž‚5^6ýÌö­ˆî´¸4ëßêñÆñËzÏl$@íò�*1îX@þð×G&›i%Ä—BÞ$»xÌiH×ÍÙ±š®ÞÒfÒítÛ�:ÖêÒÕ!Žæ�.Ñ´×è�Óì…Ÿ‡"¶7M¶­<·PGv¢T€<›Ýt8úU8Ú6ø<‚+oæÜÙ ͶVòGå"ºäðö‹‘²�GÓÖп˜`[d »¦í¸ÆxûV‚ÅÄ"TQBÀ˜ô þÉ/uÝ[û>[¶…ôù‚Lá`šu.J1à•ò»‰Á«^’èϨË%õ¥Œk$p�ñMˆTŸ—¶P+hRýŠò܆òc ióÃÊa¸‡àf½ :ÆÖâ[‹{;xf—ýd‘ĪÏõ dÓ"ÒtØÀ‡O´Œ\äO²nzîÀù¿ä^»w�~lW¡I¦iòÏ òXÛ<Ð"‘¡RÑã¦ÓŽ? VÓl^ùožÊÙ®Ðag1)�@ØÍZ¯7Õ'ºÒ´ÎÜÝjÑkPhók«mºÑïìÁó8ZƒÀU'9l0ç½g¯Š5I´ý/V¹º[[µInEª#°bÄod›Ê`~n{×owag¨F±ÞÚArŠÛ•fŒ8Ô:ÓfÓl.g†yì­¥šõRI³Gþé#�€8ûßêqI©_%ôQý‹RK4ÒÌjLÊYIûÛ˜1eÇÆAæ°u ŲñßÛ7(¿ð’[+~êšß ’�²¾ß õ9ô÷Ó줽K׳·k´Vs—Qè­afñ\DÖ�îX´èc”�,1ó9ôÍx½.AÒ)òáu@¯pB,­¼rÅW=ð¿AU.£Ôô) Û½�œúÍôò½º–ŠÕB7Ï–s±r@¯ö?a´ò!ƒì°y0•h£òÆØÊýÒ£ Çlt§Ï70¼3Ä’Äã ’(eaèAë@4ž(¿Ó ³Ýß$úv›© [›¯-TMÂ'–FU;p*­ŸŠµô‰­n³6§§ÛÜß^B‘(§”¯cŽ™” ŽO”}ë¼:^žÚö{XÚ›,öc ù|�—ëÍJ¶–Éu%ÒÛÄ·(G” Ê:z�2:ó¿øI¼I‡5MA·˜ÓMk¨®%û1 (#'bP‚~÷#y­‹»�^ßÄvZL¾!$ö3ÜÉ9·ˆ|Êñ€ªÀ3uÉÇç]"èºRÇqé–A.F'Qâ_÷†>oƪ_xrÓR×íõ+Ćâ(md·û4ЇRYуdúlÇNýh êZž¯£iWÒ‹o.T“í ‚ à��醯î{ŠÐ�û_˶ó~ÿÎo´mß�+æÛ³ý¯¹œñ×Ú¯*…PªP0è)h®wÄ66׺•”­­®�uk ®ŠDm¹[nX‡�·õ<ŠèªµÞŸe¨*-í�½Ê¡Ü¢h•ŸQ‘Åq“^.¥£ø3S¼†Þ+Éo bB…À(ÿw<…=q]¤—6Ž'�¤ŠC‡–<†(È$vÈUkï躤Ë6¡¤X]ʪ^âÙ$`¼œAã“ǽ[[;dó6[B¾b„| ” }@P‚¢VðÜ“ [�Sý:R•vUÚ£ØW!à¿¶ZÝhwšÈ‰¬®#–ÛM+œ[ɸŸ›¶é6m¸ïϧC VðG¤PÆ¡4Pªªtv¨³¬M¬v¦Îßìñ°d‹Ê]ŠÀä1€Açë@aj.¡Òí¯&žÂK(uù-R"·LÆíÔbMÄNpeAï^±Yöú�iz×¶ÚMŒ7NK4ñÛ¢¹'©,rkB€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€+^ÿ©ïQEïú‘þõÐŽpt´‚Šè9“´PmÆ�£]ÎÓÜéÌÿzIm‘˜ýI5–•§i¥Í�…­©¼`…SwךÁÒîR´°y¼S<7×–é?Ù#û0+¹CaU£-�žäô¤³¼Õ`×a·¸žýíÞí­¿ÒÒ ²*W ¥#Nsîà ë�&è«3§–§P²Æ’(!€udt4â�zƒY)º¸³Ðž[Y¤†S<ï�A`TS€AÁ=«‡±×µk½qôæÕ/c%ت½Ä $Q…,<‚¬Ç?t6FpGÓm!(Üô¥µ·CX"S", ë·Óð§¼QÈñ»ÆŒÑ�ÈYA*qŒ�N �rk·ñÁáYÚ;«Ç»²y'ŠÜ&ébØ%GžýëCÃ×ú‘-m¨iz”m%ÄÒ,óÊ"fE$9< úQt:*(£B (Å.((¥Å”RÑ@ E-˜¥ÅPŠ(¢€ (¢€ (¢€ (¥Å%¸£ÕSSï?ûßÐSª >ó½ýr�%mkH‡[Ó^Îwd†W^ªGzäÿáZEÿAI?ïÈÿêï.á°³šîáöC vÆpe�ÌÀðþ´Aä!óz竇£RWš»;ð¸Ì]rÑ•—Ëõ2?áZEÿAI?ïÈÿ½¤ø ÛLÔ¡¼{Ù'1Ê›Œö'“Kyâå°Ž7ºÐõˆÖIi˜îcÐ’kkOÔ-µK¯,åC Ê‘ü�¡•œ0xu+¨ê½Mªæ8÷§-›/Ñu(^ãJ¼†%Ý$�:(Î2J�+οá×?çÇÿ"§øÖÇŠ5�CNÔã†ÒãËŒÂ�ŠyËãØV/ü%:Ïüþä$ÿ ñ3ó½ýr�&'Š¡–ãÂÚ”0FòÊð�¨ŠY˜ú:ÕÝSQ¿°0­ž�5øe;Œr¢lúî¯%ŸÃzÖ»¬\Ã{ûJx!VÜKÈ7>2Ê0:š”x÷í×c±¸s´³*¨ãÔ°¬9åÑ¢ÂÒI)OÏgÖÝ™Üj³k:¼nþ¹·ûü%|èݤU'vÐQÅT–ê]/ÄV×–Zeõ¥¶£r°ÝÁpб—n‹†8o^9úóPø6çZÒü<öÖÚQÔäŽòhæoµ¬{ íÅ×<þU±­Ü]ÜéÚ4·¶_bœê°f4IŽN>aÅ=ÕÈk’\–VÕoú]³šø‡©YéÚ½¹º�#ß… À—#8ôæ¹´Ô­e‘R <òÄ Â¥ÔgžHà~5¡ñeäMbÄÄ×AÄA�.Tçw=dŠã´æ¸ûB5½íÄpÍv±eˆ’¢Ü09 Gð�Çozù¬v©:—×^¿ðÍó,9Õ©U½núöù3~mVÖ´nfýÀbØ{jî z� 9u+I –h¥$_ÊÈüº×xm…õÊœ–ó.w 1—Ë�ñ�œœž+~ÖI~Á<ÆðÅ1‚Ž–¾Z2OÊÄîôÈǵrUÁS„"ソ­ŸõÜᯗR§Êï[~vèŸõßbÙ×,A7 m –Ò0'и5èÚ¿acáÛ/µ<�†iÕ¤‰•v«1a’0N8¯œÏ-ä“4ÂdcW#ko�nÀ•1ÀëÍz~�e%÷„ô]2âþFžúÐÿ£J<ȃFጌQ•ÈÎÃ`–ëåxjtk·­Ÿæ�w%ÁÒ¡‰n^W}|בÖiþ/ðö§öu¶ÖlZiÔƒí ædŒà¨=}ª㯠õ´þÜÓÉ1 ¢ê?,`�´¶ï¼sœzYšM…þ‡â«{{ýCíPÏg<¡¼û¬)Fˆr%žE õ; NÃT…¦Óï­®âVÚÏo*È õÁ žyj±t=vÇP°I~×¥ù�/”VÊèK~¡C¤¶qŠç4íUxôë¹5HîãT’ɬDH–%uÝ‘ónUPÞ˜;Ðq5ÄíÍ4q™_ËŒ;½°NÑêp ǵG¡euuqmow·Ä ¢Ž@Í=7Èèz×ú…Ö­?†ï®u4&}\�`¨ƒìûReÆ~ñaŒñ“ÐV߀m¦ƒF¼io%¸/¨]¬D"wü g'“ŸÃŠê袊(¢Š(¢Š(¢Š(¢Š(¢Š*½½ý�ãÊ–×pNñ²,R(};e!€*F=1^s«oí5»ícŠÒËIžÆm…óØà¶À:ªÀ>¥±Ò€;èu‹y.!½·’É"J¥TŽ �p1O¶»¶½�g´¸Šx[îɆSô#ŠäÃhqëײŸ±ÿdŦ[É9 ”¬Žc'¶@ú{U5‰Ñõ½6Æãþ'7¡Úb‹-µ¾ÅBØfP‚g¯ý¨¶Kû9lÞò+¨d¶@Å¥�Ã(Û�Ü�Lý)©¨ÙI4P ¨DóGæG 82úí<þ•Áø}–_ ;m#ºÕ'³H¥Û�+Α¤Qµ�HÕ×ê;ŽL·ÞPMT ¿Úßð�[y_óÓ¡ÛŽû|½ÞØÝï@É¿³[Õ²k¸Ó.á�o#×o\S&Õ,m¥ž;‹¨¡0F²JdmªŠÄ…%�íný«ˆÑî®m/ã’å4éžëZ¸‚HŒGí*ÛŸkîÏ@�xÛ÷psÚµãºÓ!Óï|A«"R(³�R±–ͯ#½¶{TÎéÖU(1×-œTÐO Ô =¼±ËŒ¬‘°eaìGZáo¬Òó\Õ~Á-’ÛBö•ÂÁ,ê\”$‚WÊìz/­xrK“6¡+ßZYC&¯òG Ø…CÆ…±üa‰ •n:ÐK¹¤]_5�¾«c5Ú’Þ;„ir çŽõ=½ý�Ü’ÇmwÒBÛeXä Pú0Ö¸ËIbÐolVÃR]RÆøÝNñÆ‘–�pò—FQ’7¼“÷†1Ò¨xu^Î{ä½³…[C—ìwvä7“(KOž¯É†à�šî¯µÝ#L�`Ô5[I™w,w œdGò« f—©f÷p-Ó®å€È°õ ÔŠãüB#²7úý¦· —öÖ1#[�Öb»�A,7ïãiGZͽ��^îøˆ™ÖmEÄ,Ò–U¨(ºNÏ—®ÝÄq@•Tïu;k -£™¾k‰„1óÏL)«•ç><Óì¦×,¤¶Òôמß7š�ÄÖK1Xqå)uÈ.>flg¤Dö€= e�ŽÔŸcYMâ�+D¹ºÔmí"ye… Ì‹æ�Ê62yäÒ¹=3D]KÂþ k;Fg¸†[[«µûB”Á9Üß)~ÎÜô"±4»xàð¯ŒöÛØÚ9�Õ­íX�»g¹?"ŒëÂ�¤IâŸÅi ÔšÕ‚[ÎXE+\(W+÷°sÎ2*¶›ã êžRÛëbid1$2‰·m.yÉ鎹Œµ,í£Õ´˜à’êÕ0¯k$Î…A #Œ·'åcDZÂðëjZÇ•¦A©éZŽ—¥›vk£k.÷•NìgÎûÃ’F2ØÇPe­k¶ª\_ÈU@Še�©Ç¢Œ±=€&¯‰c1,¢D1°6x ôæ¼ëÄ2ê^Ö$ÔZüÞÜÌÑ@žv‹<±Ã’*ŽŽuÎ߼ĞF6<3áô“JžÞúQ}¥ÊäÇau¦< øRX/ <ØPAµe&­>˜% q )1ÜFÖF,<ò§?…:ïU¶²–˜¶%I: À]ÍœsÓÐó{-A¹Öàð‰Ò´¯>Æs$÷b·Ïa‘3÷‹œ¨p{+gï ŸÅ\_ðœi)¤i:x[wó7Z^FT*¯,cxQŽ ½@Ý·ˆ4û»×µŽVóÂùr$&%— ŽÛrqÏ•©^aáøÛIñfš±»È—’¼;eÑ®m(-ÇÒ1-ãã“לW§ÐEPEPP]_ZX¢½ÝÔèÌZi}{ÔõÌxŽÙ“X´Ô•ôÙV³E$ò”PŒP´‹ÁÎ6àŒrQ@ú擥ȑ꥕£¸Ü«qp‘– 2*ëH‰‘ÝV02Xœ=s^k/iáh5ƒ¬¥¾¥e£ÆÒXÑÁs ul°Ý�8 ñÖ»ø®-omLWþZí܃åî‡oÆ€,ÛÜAwOm4sBã)$lX{Á¨†¡da†aynb�ÂDþjâF=”ç“ÁàzV7�Y‚ôÅB¸X±�Û“\§ƒ¾×ms¢Ýë&³ž9m´Ò¹Å¼›‰ù»n�ƒÛn;Ð}o­é7w�gmªYMt„††;„gR:‚ äb¯×•Û ¨tËk¹g±’ÊzF[dˆ­Ë1»e}ÄNpeAï^©@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ïþ§þ?­Oþ§þ?­Й†:QJ: +s(¥¢€9]RÊãUñ<ö¢+I †Î v]‘žPO–0�ƒ©Àõ©,ì&°ñM‚IqŠÖ;cŠŠ4Ä�}Ð2yÏrzT¾´ÕÓP¾½Õ÷y²Ã C%1”2·gð|ünùºæ¦Óü:–:õƪfYQ"¯î°øwV!Û?66€¼ 9¤2θ\h÷bª®çåàÂŽIÞ€°éÚ¼¹L‘ZArðÝ,�Õ§¾7z‚ùІ%PŸ+|ÀnúããÖµ v»Ón­�€ÓBñ‚zAÆMà}ZM$YÿjÂq®Ò÷[xǬå{s”“YcWµ/«hçQÐþÞ IBŽ“�+ÀÌ¥KaPóŒóG‚¯b}>ÁA–äˆ.’çæ;[v1÷kvóL¹}Pê‘ó½ýOPI÷›ýïè+”è<ÇXðޱc>¯©&º¶vÉ4ËI�„“Èx5b‡~"‚æK¨|LÑÏ*…y¸fp ϰ®òöÒû)­.t3!GÆA¬¿øG§ x‹Zp�ÿY:jç|q“q³i|‰ü# Máͬ§¸[‰f”È Œç¿Jg‹?Õiö·þf£œÌÅ­ûlŸüE:/ º‚{­KQ½òÌŽ;™A@ã£`(ɪ³µ’1ç�?´”®ý[Ç–°Üë6þjgd(ÃŽC±ÇQžpxâ¹�§Û©ˆ¢•òæiÆV!�Ïýôk¼ñF�¨j:œsZ[ù‘ˆB“½G9cÜûŠÅÿ„[YÿŸ?üŠŸã_!�£Š–&|‘“Wìì~m™áñ²ÅÔtá'ôNÇ-6�o8Û$’˜÷HÛ20K†ôÏF sJ4¤*Ë=ÍÄû‚�Þç(g®k¨ÿ„[YÿŸ?üŠŸãGü"ÚÏüùÿäTÿæöXïä—ÜÿÈãö9�­ìåÿ€¿ò9xô{h^Jd Ì `$gÔñŽI¯Jð~•gm¤ÙÝŬÝrÄ„ŒHÇväóô•ÎÿÂ-¬ÿÏŸþEOñ®×AµšËE··¸M’¦íË�q–'·Ö½lš•ˆn²i[ª}ÑîäñqÅI׌’å{¦º¢Kí*ÞþêÎâmâKWÞ›N3Ðàûd)ú¨©/¬"Ô1p �']§2œŒûUª+éO¯#’¦1™bG1¶ô, ín™‡“Ͻeh^´Ñ â8%»2LæëÉ ä<ŒûsÉÀÝŽ½«fЍ4­8]¡akö’ÁÌÞJï,:ã9æ§‚ÞhÊA q!fr±¨PYŽIã¹$“îjJ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ddu ¬0TŒ‚=+:Ïú&�p.,t}>ÖpAlˆÀ£ f´¨  -¢éOe%›i–Mk#ox Q›9É\`œ÷¥Óô�3I ;N´³cÙàX÷c¦v�œdþuvФ4«T½‚æ4ò¼�.Ø£P´„rûÜÚn¹©šÊÑïñ­¡7H»VcÞ£Ð7\TôPY4ëG¸’äA]¼f?´¤kæ�ìØÍ@Ú•.™k§\éö×V¶ª«w,�v� àޏïZ4Prh4vfÍ4‹µ/æÙné»n1ž>Õ}c�b*(Œ ¡àLS¨  ‹¥éëdÖKaj-% ®Ãõ\b¤V«1 hDpÑ(Œb28Gn§§­OEVƒO²µ¸–{{;xf—ýd‘ĪÏõ dÓ"Ò´èâ->Ö1q‘>ÈTy¹ë»Ž¹EU}2ÂYážKg–R4JZ<tã�•´ë½[׳·kµYÌJdÐ63Vh ±n¼/¦ÞO4“ öÜIæ\F&`³œóÊ€8_»ÉãšÚ¢€1að®™jÓ-°¸‚Úe*ö‘NÉ=ÕùOû¸ëU¥ð†¥GA¦ù+"•�[Ï$>hÿoc ÿð,×GEcÉá«),ã³óõ¶V,È/¥&Lã†bňã¦qBø_G†îÖêÒÍlæ¶Â£ZŸ+r�àm¿y}ŽkbŠÁ¼ðŽ›~î×3jnA.Ïí;€�ƒn(| Àã(ðÕ¢ÚÍn·š®É¶ï-¨Ìí€zÌJç¡Æ3[4PL¾Ñ¥ÒãÓ�„KmoŒG”hÛûÊÃæ ïœÓŸ@µ–+XåšíþÍÆÎÁØ0Á,ãæÎPA­J(  i–ú�¥ôo~fµvxÄ·ÓL¹(Èr²3Œz`ÖíPEPEPUî¬,ï|¿µÚAqå¶äóc´úŒô5bŠ­>Ÿeuý�?ãÞ|{gÎ8ÎqÅMʱ¹sp¶¶²Îê̱¡bª2Ç8õ”þ*ÒÔ¨FºŸ0¤äÛÚK(Tl•$ªœg¯¥/Šæ[ÝHÚZjEW+nè29ÜÀñ�Œ×�Ø[¾œºDsYµ¡¼’�I_Þ¸[�ÌþÒ¡è0zPÝ�+ž‹sâ�&Ö 9åºUŠéctvù@G«6ì`qKoâm.êüXÃ%Ë\¿c˜ €wÆpq\­o5”,ìÚ‚½¥µ¬2y&2¢Aí�2‡-½@ÎHË�K¹*†W¸»išôÃ;=öð æ†và�PlfŽf¨ôÚ)hª$J)h £´PŠ(¢˜Q@Q@QŠ(¥Å”RÑŠJ)h ¢–Šéé©÷Ÿýïè)ÔÔûÏþ÷ôÌt^ÞA§ÙMyrû … »c8±Ç‰¤` ø{[ ò�ƒù½KâØe¸ðž§ ¼²¼*"–f>€µ.©¨ßØVÏGšü2�Æ9Q6}wT¶îoÅÅivïÖÝŒëÏÇaou¡k1¬’Ó0!ÜÇ $Öæ�¨Úê¶^ÙÊ$‚Q•aü�¡•Ëê³k:¼nþ¹·ûü%|èݤU'vÐQÅV7“i>$¶»±Ó/­-u+•†î „UŒ»p$\1Ãzñƒõæ§™§äjèÆQ²Ò^·-x³\ÔtÍV(lî<¸ÚälSÎæǰ¬øKuÏùþÿÈIþÿ‰•ž�­[©Ò=ð PÌ9vÇ Ï5˦¥k,Š�Iç– f.£<òGñ¯’ÇÕÅÇ>IIFý±ù®i[UNIIFúY»/ü%ºçüÿä$ÿ ?á-×?çûÿ!'øW16«kÚ73~à1l½µw=Hœº•¤�K4R‰’/¿å ä~]k�Ûãm~y}ìàúÎckóÎÞ¬éá-×?çûÿ!'øWwáÛ¹ï´+k›—ß3îÜØ8bØWŒrăpà¶ÐÉm#} ƒ^›áïiö±o,àšui!e]¨ÌXdŒƒÎ+ØÉ§‰uÚ¬åku¿uÜ÷² ˜Éb¤±Mr½Ûî»�u‡§øËÚ§ÙÖ×Z°içPR´¡“$gAëíPøXj iý»§b2™…Ü~XÁimßxç8ô¾”ú󣢪Xjš~« M§_[^D­±žÞe‘CuÁ*O<�έÐEE5ÌíÍ4q™ŸËŒ;½°NÑêp DZ¨íõ+««‹[{È&¸¶ Orh‰é¸GCÖ€,ÑEQEQEQEQEQEQEV¶Ô,¯Tµ¼·�á;dX¥ Pú?³EU‡R°¸·’âÛi`ˆ‘$‰*²¡A àb¤µ»¶¾·[‹Kˆ®!o»$NOÐŽ(j*²jrÙ=äWPËl�‹K†Q·;¹˜9úR&¥c$ðÀ.áÍ›,àHËë´ó�€-QUÚþÍoVÉ®àl»– ÞG¨\çú­…¬³Çqw&ÖIL­µQX°RXñÉVïÚ€.QUfÔôû{4¼žúÚ+gÆÙžUTlôÃVˆÑ C©Œ�ÁÁã¹ô QUcÔì%²kØï­žÕ3ºu•J.:峊š ˆn IíæŽh\ed�ƒ+b:ДV}¾½£Ýßµ…¶­c5â oÂ4€Ž ¨9ã½X·¿³¼–h­®àžH[l«�ŠFð~´bŠÏ¿×´m.uƒPÕ¬-&eܱÜ\¤lFq� ò« f—©d÷p-Û®å€È°õ œ‘@(¢©_j–º|–±Ìß5Ìâ Ž‚yç¦ÐÚ)‹,lp²)>Ʋ[Åz6iuw¨ÛÙÄóK ™=Í”ldóÊŸÒ€6h¬y§Š2ÄöšÐÆbYDˆc` ¾á‚NhôVtzÝŒšÄúX—mÄ0¤çqY°ó‚§?…>óVµ±–˜¾%I:.à.æÎ9éè ^¢²­|E§]Þ½¤R·š&§Ë‘!1,ÙvØÃ“ŽxôέQEQEQUîï­,^òê tv ­4�'°Ïz±Egßëº>•"G¨ê¶6nãr-ÅÂFXz€ÄdUç’8ã2;ªÆK€®hÔTV÷]ۥŴÑÍ Œ¤‘°eaìG£�‰† …幊w ù«¶F=œòx<J³EgÛëºEåëÙÛj¶3Ý!*ÐEpŒêGPTŒV…QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV½ÿR?Þ¢‹ßõ#ýê)¡3t¢€8¢·0 (¢�™ á­9,M»Z�Â"�@ªàìKm¡ØÚÜÇp¿j’Xó°Ü^K0BF Ø€pHϹ¦j7WÿÚÖvÛBf‚ižIài~ãF:õó:çµK¢ÞO{§y·>Y™'š1)Uo.VL€I#;sŒž´´jîÙo,çµrBMFÅz€F8üëO YJVG¹»7ˆ– ÷)hx *TFNAÏåZ÷Ò]ÅlZÊÚ;‰²1“y`Žÿ6ÖþU�¿®Ï©Ýië¡ÙyöÈŽàêG|ãºÿdÐì¿má»+w¶v’âo³/îVWÊ£òL›@yÉçvÅÞ±µ¹ŠíszŽ]îšOÞM‘‚®zàqŒ b²µïÜèÂÒ6];©!43ê4aŸgÝÇ;ûrpqËt�hkFÍæÒ™s ˆ.Ã7ú´`W8óbë�AÇZWAfuôQF*‰ (Å ŠZ((Å-bŠ( Š( Š( Š1F(QKŠ((¥¢€ŠZ(¦¦§Þ÷¿ §SSï?ûßÐW9¹â—>»ÖµýjæØà?ÚSÁ ¶â^A¹ñ�>Q�ÔÓÇ�ï~Ð mv0û›‡;K2ªŽ=K ÙÖ¼¬ØÏ¬ê‰¯-žŸq,“̱´™ØÌO x5$?üEÌ—Pø˜Ç<ªäRá˜À'>¹¹5Ø÷~²¹SU^Ÿð ^ ¹Ö´¿=µ¶”u9#¼š9›ík»GñuÏ?•lëw6$·¶_bœêÐf4I�˜ãæUÏèxsFk)îâF™¥2(#9ǯғÅ?wFÿ°­¿ó5ªMDóåR3¯î¥¾úÿ_�çßÞDÖìLMt[®<ƒ0\©Îîz68ÉÅiÍqö„k{Ûˆášíb*Ë%E¸`r�áŽÞõé¿­a¹×-¼ÔÎȆ ‡b3Ž£<àñÅrƒO·SE+åÌÓŒ¬CŸûè×Ëã±p�YÓk]z/ësó¬ËNªRqÖï¢~kñ8ÛÃl/®Tä·™s½ˆ|¾\‡Œ|àôäñ[ö²Kö æ7†(¡ŒtµòÐ’~V'w¦F=ªäÚ5¼ãl’JcÝ#lÈÁ.Ó=�Í(Ò�«,÷7î ?xT`œ| qž¹®j¸ÊU"—o+õó_×™É_F¬"»[¥úù®ßÓ9‰ÌòÞI0óL&F1…r6¶ùì S¼×ªèv2_øCDÒî5 {ëCþ�(ó" †21FW#8 ‚Yk‘�G¶…á1´ FA �|ÂbF}Oäšõé6vÚ5•äQ‘(·keË1#Û$óë�é^¶W‰…Zî1è¿T{y62ñ.0éù¯ëÌ¡¤Xj‹-­µ GíPÏe<¡¼û¬!Fˆr%žEõ“ xjÏCƒˆàšìÉ3›¯ ,…d•¤ÛžNìuí@ƒê7z¼þ¿¹Õ™õ‚‚¢³íI—ûņ0Ùã' ­Ï‡ÖÓA¢Þ4×’Ü—ÔnÿÖ" ;‚~UÉäçðÀ⺤éÂìÝ�>×í,ÁÌÞJï,:ØÎy<Õˆ-ൌÇo q!fr±¨PYŽIÀîI$žäДQEQEQEQEQEQE#e*À#„W›jâ BÓ\¿Ð8­,t‰ì`6Ø_´1Ám€uT €}Kc§>’è²##¨ea‚¤déY¶^ÐôÛ‘qc¢éÖ³€@– TFõ4ÏУñôÇìÙivò܉JÈæ"{dHïÓÚ©(ÔŽ�©]é–?ñ:¾WhmŠ,¶Öû a™@‘‚g¯ÿٮɴM%줲m.É­$mï·BŽÙÎJãç½;OÑô½ H4Ý6ÎÈI�3ìÐ,{ñœghÆOç@‡Yeð@Ñ"°–Î;½VâÍ"—n<£4�"�¬zF®¿QÜ`™oü š°µÿá!µò¿ç¦7C·öù[ºq�ÞõÛ.“h—Ö÷Q ‹ÈíŠ5 …¤ ³�ÞàóþÓg9©ÚÆÑïRñ­`7H»VsÞ«è¨Àè×w6z„r]&�4—ZÝÄDѵ+n“l›óÐF«Æß¹ƒžÕ±Ö—�{â^8Þ9oY턈¾QåF#ËHŸÞèäÓm$¸’è[Ä—o�í)ù {63UÛÃúLÚ]®›s§ZÝZZ¢¤1ܲÚ6ƒ‚:ã½sº}�³ðäVÆãI¶Õ§–âêîÔJ�“{¢€Ãî‡àã¿J§Fß�B…mãAÛ›!¢Y¶ÊÀ€>B¡Èà|¤W\žÑc²6QèúzÚó l�7tÝ·ÏŸjÐX£X„JŠ#h@8Ó”ÀßÙ%gËb¶Ð¾Ÿ0Iœ,N¥ÉF ¾WcÑ85kÃR]õd¾´±‚McäŽ)± ‡�±üa‰ •n95Õ®•§-‹X­…¨´l–€B¾YϪã ²´X¡ˆZÂ#€†…c‘À*;u==hˆ´š-öÁ,55Õ,/ÍÜïih×1te#qÛÉ?xc*‡†Õì§Óã’öÊm _±^[�ÞL`¡->xb¹L7�ü ×¢A§XÚÜKqogo Òÿ¬’8•Yþ¤ šdZN›¸éö‘‹œ‰öB£ÍÏ]Ø7ã@‡ˆÖ;#¨x‚Ó\†MBÖÂ${fŽ'YÊnu`°ßæq´Ž£­fßHÇX¼¿ÄÌëV‚â?ék*ˆÔ?Ý'gË×nòÍŠô)4Í>YážKgšR4*ZÒíõ;øžüÍhìñ‰¯æ™rQ�ådfôÁ­ê(¢Š(¢Š+–ñ%³&³i©«é’,V“E%¾¡1�B1BÒ.³�¸#ƒÔWSUî¬,_µÚAqå¶äó£´úŒŽ yż/gáK}dëQÛêv:,a¬æ�7:VË�Ù‚šô(®-o­ WþZ‹w!¼½Ã 0=?J’}:Æêâ+‹‹;y¦„æ9$‰Y�û2).tË ÈçŽêÆÚt¸Ûç,±+ 6ò»�ã¶zP7€™‚4µB¸X±�Ûæ5Èø/í–·Zæ²"k+ˆå¶ÓJçòn'æíºE ƒÛn;óèÚ~•§i1¼zm…­œnw2ÛB±†>¤(§gX›XíM�¿Ùã`É”»�È cƒÏÖ€<ÂÔ]C¥Û^M=„–Pëò2Z¤En™�ۨěˆ<œà(Ê‚3Þ½b³íôÒõ¯m´›nœ–iã·ErORX äÖ…QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV½ÿR?Þ¢–÷ýHÿzŠhLÀ( t¢¶1 (¢˜Ði¾)k½^úF�ÒHì¤`‰ jÅY£l(!¿v0I Œ÷§ør “qwwÌÿÙ3;ÉmÈ™fw.Ò0RX퓎}*ÅÇ…t»¸šƒ¨M}ä“R¸e=ú1V­t[[;…š)o™—8ßÏ"ôÇ*ÎAüªGsB¸éôHuk.&–Úò-M½Ô-‡ˆŸ3>Ä ƒÁ®Æ˜°Ä“<Ë,²€Ìq“ß?�7¨®y·Äjκ�ÏÚíâ�ÇÁË3íÞ 2ªœnrw醸cP‡þé Ïq±J(�ÕÕÚáÔ#3fbPpX‘º½*h"¸ŒÇ4I$d‚UÔ�r8>à‰4ëx�,íÕâ,Ѱ‰ABßxŽ8ÏZVÖå_BÍQTHQEQE€(¢Š(Å´À(¢Š(¢Š(¢Š(¢–€ŠZ((¥¢��-5>óÿ½ý: “ï7ûßÐW9°^ÙÁ¨XÏgr›á™ :ç±ÿá”(Qâ=l(à:?粯^]Ãag5ÝÃì†.íŒà Ë!™€+áýhƒÈ>Bæõ.ÝM©ûK{»]Édžeó1kgþÛGÿÄS¡ðÌKwÅΧ©^ùæGÌÊP8èØ 2Fk:óÅËaou¡ë¬’Ó0!ÜÇ ?$ÖÖŸ¨[j–1^YÊ$†A•#ùB=).VTÝh«½¾F‹4=GSÕbšÎßÌ�`NõîcÜûŠÁÿ„K\ÿŸüŠŸã[(Öu ;SŽK�.3b6)ç,;�aX¿ð”ë?óùÿ�“ü+å1ßPúÄý§?5õµ¬~{™f}n~ןšúÛ–ß+Žÿ„K\ÿŸüŠŸãGü"ZçüøÿäTÿoü%:Ïüþä$ÿ ?á)Öçóÿ!'øW/ü&ÿÿ%8¿á#þž䣿á×?çÇÿ"§ø×wáÛIìt+kk”Ù2nܹbG#Ø×ÿ N³ÿ?Ÿù ?»]êkÝÞâá÷Êû·6ÎŽßJõr�ª{wì9¯n¶µ®»ÖCõ¬ËêÜüܯ⵭uÛ©¹EU¢¾ŒúÒÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ןêGûÔTS©ÿ�ëE4#* »»{D×2ˆ¢,{€IÀÉì3ÜñVJl‘Ç4O¨¯‚¬¬2 ŠØÈ†kË{yà†Y–v+c%ˆ<ÀwéRÈâ8ÙÈb…“ô­PÓ4;M*G’4’0د4…ÌqŽ‘©=z~y­*á¯QÖºjåíã¼°ñ»C¤†Î{X#iŒd¢¬k7ñtqA�C]MR%‰E-Ä%´b€ŠZ(˜¥¢Š(¢Š(¢ŒPKŠ( Š( Š( Š( Š( – “ï7ûßÐTõŸy¿Þþ‚°61Q�ÔÔ£À÷¿h6»}ˆÍÃ�¥™UG¥…aÏ.ˆõ’IJ~{>¶ìÎãU›YÕà³wðýͿدà¹+çFí"©;¶€zŽ*¤·Ré~"¶¼²Ó/­-µ•†î „UŒ»p$\1ÃzñÏך‡Á·:Ö—áç¶¶ÒŽ§$w“G3}­cØWhþ.¹çò­�nâîçNÑ¥½²ûçUƒ0ù¢Lrqó)î®C\’ä²¶«Òíœ×Ä=JÏNÕíÍÔéø(fœ¹Ç Ï5ͦ¥k,Š�Iç– f.£<òGñ­‹/"k&&º ò xÁr§;¹èØã$W§5ÇÚ­ïn#†kµˆ«,D•á�ÈR?„;{×Íc°p�IÔ¾ºõÿ€~o™`)έJ­ëw×·É›ój¶°ý£s7îÀûÛWqÔ€iË©ZI³E(™"ûþPÞGåÖ¸ëÃl/®Tä·™s½ˆ|¾\‡Œ|àôäñ[ö²Kö æ7†(¡ŒtµòÐ’~V'w¦F=«’® œ!}íýlÿ®ç |º•8FWzÛó·Dÿ®ûιbÁ¸p[hd¶‘�>€…Á¯FÐuû Ù}©ä€<3N­$L«µY‹ ‘€ÀpyÅx¤æyo$˜y¦#¹[|ƒv©Ž^kÓôk)/¼'¢é—ò4÷Ö‡ýQæD7 dbŒ®Fp°¯_+ÃS£]¸½lÿ4{¹.• Kpzò»ë漎³Oñ‡µ?³­¶³bÓN ¤hO3$gAëíPŸx`_­§öæžIˆÈeQùc ¥·}ãœãÐÌÒl/ô?[Ûßêj†{9å çÝaJ4C‘,ò)âCÛ6Ìò¨FÏL185`H�”:˜ÈÜ1ëšãì,ŧ‡b¶7U¶«<“Ü—J%H¾÷E‡ÝÁÇáU#hÛáP¬‚9·6A‰fÛ+ù ‡#�ò‘@œz•Œ¶myí³Ú¦wN²©A޹l⦂xn IíåŽXœed�ƒ+b:× }f—šæ«ö l–Ú°˜$® gRä¡ ¾WcÑx5kÃ’\™µ ^úÒÊ5’8Hx¦Ä*4-�ã I«qÖ€:X5Í"êù¬mõ[®Ô�ÖñÜ#Hë•wÞ’1–Æ8"€;-k]°Ð-RâþB¨òP£,}N=e‰ì5|K‰e!�€!³Á§5ç^!—Rðþ±&¢×æöæfŠó´YåŽä�)Ttpƒ®výæ ò1±áŸ¤šTö÷Ò‹í.W&; ­1àH?À’’Á}àvÀâ€:õ«)5iôÁ([ˆaIŽâ6²1`9ç•9ü)×z­µ”°¤Å±*HáÐn"îlãžž€×›ÙhÚ Î·„N•¥yö3™'»žx ‰Ÿ¼\åCƒÙ[?xTþ(Òâÿ„ãIM#IÓÂØÛ¿™ºÐ:ò2¡UycÂŒu}êîí¼A§ÝÞ½¬r·˜&§Ë‘!1,¹vØÃ“Žxô­JóÆÚO‹4Õ�ÞD¼•áÛ.�sh!An8F‘ˆéož¼â½>€ (¢€ (¢€ ‚êúÒÅîî ·F`ªÓHè3Þ§®cÄv̚Ŧ¤¯¦È"µš) ¿”¢„b…¤^q·c�zŠØ¿×4�.D�PÕ,­Æå[‹„Œ°õ‘‘WZDHÌŽê±�’ÄàëšóX!{O A¬e-õ+-0Ö’ÆŽ�«e†ì�Á޵ßÅqk{jb¸—òÐÏnä/pÈ ;~4fÞâ ¸{i£šI#`ÊÃØŽ D5 # 3 Ësî'óW1ì§<žÒ±¼ È|¦*ÂŌܚå<ö»k�ïX5œñËm¦•Î-äÜOÍÛt€ÛqÞ€;ë}oI»¼{;mRÊk¤$41Ü#:‘Ô#~¼®Ø]C¦[]Ë=Œ–PëÒ2Û$EnY�Û(Ãî òs€£*ÏzõJ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠdßêàCúÑDßêàCúÑMÆŠ1J:Q[ E-J++]–âÊÔjV÷ ‚×-$$êqòç¨oîŸSŒsZPIç[Ç/–ñïPÛa—#¡´\cè¬~ý,´ÐOúmʤ€f%Ü}]¿ð*å-¼=ö‰8´Å·½d“Î#MHÑÂ�� ª ¶hûÍ‘’qÒ•ÂÇ¡Ó$š(†d‘z³UôËÁ¨éV—€cωd+èHÉ�â¼ûâæ—ˆ¬[=&â@Ë$ë,‚9œ�ºö¨ üܨÝ�+ž‰o}ivî–×PLÑãxŽ@ÅsÓ8éN–Æ%”\Cå³ùa÷ŒÎݹõÏõ®3L×!Ö#´Ômþi¼×ŒG+ƒJ/NyÏQÈ®9n¥ŸDÒÄ‹u-‚¤’È-nš8Õc]áÈÜÀþñ›ä€.aòžÕQÃ<71ù�J’¦JîF 2Èô Šà.lµ{ýDÒ¥ˆ &¸ó.Rõdº_Ýœ—._î )äîÀ¬ÿèš�–¹¥¤––·0É1•¿³Ô©2‡ÄЇœò ÏJw §F)h¦ ¢Š(£Q@QHaEPES¢Š(¢Š(¢Š(¥¨$ûÍþ÷ô=A'Þo÷¿ ¬ O1Ö<#¬XÏ«êI®­�…IJM2ÆÒga$ò^ X‡á߈ ¹’ê4sÊ¡^E.€sì+¼½´†þÊkK…Ý ÈQÆq�k/þéÂ…"Ö€çGÿÄVNš¹ßdÜlÚ_"èxsFk)îâF™¥2(#9ǯҙâÏõZGý…-ÿ™¨Ç‡çó1kGþÛ'ÿN‹Ã¨. žëRÔo|‡ó#ŽæPP8èØ 2Fj¬ídŒyãÏí%+¿C–ñå¬7:Í¿š™Ù 0Á#�ìFqÔgœ8®`iöêb(¥|¹šqƒÕˆ`sÿ}ïâ±áÖçÏÿ"§ø×Ècè⥉Ÿ$dÕû;›fx|l±u8IÆý±ËM£[Î6É$¦=Ò6ÌŒá�=3шÒ�) ²Ïsq>à£÷…F9ÇÊëšê?áÖçÏÿ"§øÑÿ¶³ÿ>ù?ƹ½–;ù%÷?ò8ýŽck{9à/üŽ^=Ú„ÆÒ�‚Aó‰õÙ ~ª*Këµ€L\'I×iÇ̧#>ÕjŠúSëÈä‚)ŒfX‘Ìm½ (;[¦G¡äóïYZ‡-4H8Ž nÌ“9ºòB¹#>Üòp7c¯jÙ¢€* +NFèXZý¤°s7’»Ë‡8Îy©à·†Ú2�CHYœ¬jc’xîI$ûš’Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠGE‘C+ # �Jγð\ ‹Oµœ�["0¨È­*(‹hºSÙIfÚe“ZÈÛÞ”fÎrW'=étý#LÒDƒNÓ­,Ęßöx=Øé� g?�]¢€) *Õ/`¹�<¯ K¶(ÀT-!œ€>÷Ÿö›®jf²´{żkhMÒ.Õ˜Æ7¨ô ×=VM:Ñî$¹D—o�í)ù {63P6ƒ¥K¦Zé×:}µÕ­ªªÅÄK ]£h8#®;Ö�œš�™³M"ÁmKù†¶@›ºnÛŒg�ϵ_XãX„JŠ#h@8Óê(¢ézzÙ5’ØZ‹FÉh+°ýW©•ªÅ BÚ4J#ŒŽQÛ©éëSÑ@ Óì­n%žÞÎÞ¥ÿY$q*³ýH4È´­:8‹OµŒ\dO²nzîãŸÆ®Q@_L°–xg’ÆÙå€�–�Ý8ãð¥m:ÅïVõìíÚíFs™ô ŒÕš(¬[¯ é·“Í$Â}·y—‰˜,çüò îòx涨  X|+¦Z´Ël. ¶™J½¤S²CÏu@~Sþî:Õi|á©QÐi¾JÈ¥dóÉš?ÛØÃü 5ÑÑ@òxjÊK8ìüýAm•‹2 éI“8ᘱb8éœP¾Ñỵº´³[9­°¨Ö§ÊÜ£øoÞ_c𨢀0o<#¦ß»µÌÚ›†�K³ûNà `Û� 08ÀÅJ<5h¶³[­æ«²m»Ëj3;`€³¹èqŒÖÍ“/†4it¸ôãaÛDÛãå6þò°ùƒ{ç4çÐ-eŠÖ9f»³Fñ‡3°v 0K8ù³�ÔkRŠÂ‡ÂZe¾£i}ß™­]ž1-ôÓ.J2¬ŒÃ£˜5»EQEQEU{« ;ß/ív�\ym¹<ØÃí>£= X¢€+O§Ù]O÷vóMÌrI³!ö$dR\é¶‘ÏÕ•´é>ß9e‰XI·îîsŽÙéV¨  –^Ÿ¥FñéÖ¶hçs-¼+cêB�šwö}‘µK_±Ûýž6 ‘yK±H9 `yúÕš(„‘kx×–úUŒ7LK4ñÛ¢¹'©,sW袀 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€7úŸøþ´Q7úŸøþ´SBf8éE(è(­L„¢Š(µÅŒWóL¥Í¹-“ò†?ÅŽäv=²jÍ!e°ÜA g’_æ)h]ÐYšÖcöFkpàGyköˆˆm¹;w/Ì6Œ÷>µ™ÿoý:ø_ÿ_ýºº{«¨,md¹¹�G c,Ç·øŸjÎÿ„—M\ô(Hdú|ñ Ï«2>¤ÒÐ5,èújé:\VJáÄeŽU6(ÜŰ«ÎgdàXÚÿ‡µ I¯¥‚âiíÚÖ(¤-Dޏgb —n˜κz­6£cms´÷–ñO/ú¸¤•UŸè ɦOü#’%ÅÃC|V9àØVH„¦'ùrÈ[8SŽT‚2ª¯à÷œ^¥Ö­qq¶Ò[Àfš#"…v=û£g¹&ºí /³}§í–ÿg/³ÍóÝÛ¶ã9Æwq�^(‹Q±žêKXo-ä¸�ïÄ’©tú€r(Ð.ÎgQðž§©ØÛ[\êVSˆ¦y˜OfÎ¥Š²€“…²<€}ª–›à½3Qµ¼‚ëJI upSO*H˜ÈÈ“¸%�«sí]už³¥j2ìu+;™ÉX'W }©´lEïØ¾Ùoö¼gÈóWýóœÑd;²ÍZëQ±±hÖîòÞݤ8A,ª…¾™<Ôzî‘a?‘yªØÛM€|¹®¾ ¢â±¡ET�T±›ì¾MÜR‹¢ÞCDÛÄ›A'q�Ž¿…KÜÏq OºKv (ÁùIPÀgèAüh5½Ä7P‰­æIc$€èÁ†A Œ�Bü*Z(¨d»‚+˜-�ñ4û¼µÁ;¶ŒŸ§ãëSPEf€ RÒQ@ E%´RQœÐ1h¤£4ÒÓSï?ûßÐS©©÷Ÿýïè+B+ÛÈ4û)¯._d¡wlgV8ñ4Œ_kdAò7©|[ ·Ôá‚7–W€…DRÌÇÐÖ¥Õ5û Ùèó_†S¸Ç*&Ï®ê–ÝÍḭ.ÝúÛ±�yã8ì#�î´-f5’Af;˜ôoäšÜÓµ]VÂ+Û9D�J2¬?‘ô#Ò¹}VmgW‚ÍßÃ÷6ÿb¿‚ä¯�´Š¤îÚê8ªÆòm'Ä–×v:eõ¥®¥r°ÝÁpб—n‹†8o^0~¼Ôó4ü�]Ê6ZKÖå¯kšŽ™ªÅ �Ç—@�ŠyÜøöƒÿ n¹ÿ?ßù ?Ÿñ#R³Óµ«cu:G¾ €'.Ã8ôæ¹tÔ­e‘R <òÄ Â¥ÔgžHà~5òXú¸¸â'É)(ߣv?5Í+c£Š©É)(ßK7c¥ÿ„·\ÿŸïü„ŸáGü%ºçüÿä$ÿ æ&ÕmaûFæoÜ-�÷¶®â©Ó—R´’ fŠQ2E÷ü¡¼�Ë­qû|m¯Ï/½œYÌm~yÛÕ�/ü%ºçüÿä$ÿ îü;w=ö…msrûæ}Û›g @à{ ñƒ®X‚0nÚ-¤`O !pkÓ|=â >ÃÃV"íå€<N­$,«µ‹ ‘€ÀpyÅ{4ñ.»Uœ­n·î»žöAS,T–!É®W»}×s®¢°ôÿxsTû:ÚëV <ê Aö”2dŒà¨=}ªãß Am?·tâLFS0»�Ë m-»ïç€×ÒŸ^ttUK SOÕai´ëëkÈ•¶3Û̲(n¸%Iç‘ùÔó̶öòNë#,jXˆÐ»=A$ûš’ŠÃ�Åšc±šŒ³Ks§\C(’ÎèFRkNÊú øåx +Ï dcæF*Q@hªš~£¥ò@n$·mã21S�lŠsê‘Íâ¬ÐENmWN¶µžê{ëh­àr“Jò¨XÛÑŽx<Ž=èåÔt–5’6WF•”äzN Š( Š( Š*µ¶¡exò¥­å¼ï Û"Å(b‡ÐàñøÐš*¬:•…ż—ÞÛKD‰$IU•ê %­ÝµõºÜZ\Eq }Ù"pê~„q@QU“P³–Éï"º†[d ZXÜ2�¹ÝÈôÁÏÒ‘5+'†wžhüØágF_]§œ~jŠ®×ökz¶Mw»eܰò=Bç8¨çÕl-ež;‹¸¡0F²JemªŠÅ‚’ÇŽJ·~ÔrŠ«6§§ÛÙ¥ä÷ÖÑ[>6Ìòª£g¦œ°$FˆJLdnõÏ¥:Š«§a-“^Ç}lö©�Ó¬ªQq×-œTÐ\CuOo4sBã+$lX{Ö€$¢³íõíîý¬-µk¯°kxî¤uAÏêŽý�ä³EmwòBÛeX¤ Pú0ƒõ  V}þ½£is¬†­ai3.åŽâå#b3Œ€H8È?•Xkû4½K'»�nÝw,@‡¨\䊱EJûTµÓ䵎fù®g \pÄÏ=0¦€.ÑLYcc…‘Iö5’Þ+Ðá³K«½FÞÎ'šXPÜȱîhÜ£c'žTþ”³EcÉâ¿Ei ÜšÞž–Ó–J× ÊýàyÆFj¶™ãŸ ê¾RÛë6bid1$2‰·m.yÉ鎹ÐÑYšÞ½aáûHîoä*’HBŒ±õ8ôQ–'°Ö€–3Ê$CU÷ zs@¢³£ÖìdÖ'ÒÄ»n!…';ˆÚÈÅ€ çœ9ü)÷šµ­Œ°¤Åñ*HáÑww6qÏO@hõ•kâ-:îõí"•¼Ñ0…>\‰ ‰fÈ#¶ÆœsǦuh¢Š(¢Š(¢Š¯w}i`Š÷—P[£°Ui¤ =†{Њ+>ÿ]Ñô©=GU±³w‘n.2ÃÔ#"¯<‘Ç‘ÝV02Xœ=s@¢¢·¸‚îÝ.-¦Žh\e$�ƒ+b85ÔlL0L/-ÌS¸H_Í]²1èç“ÁàzPš+>ß]Ò//^ÎÛU±žé V‚+„gR:‚ äb´(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½çú‘þõ^©ïQLFéE¥©�QE‡âE… ƒËßý¨ý€Ã�0>9ëÆÌ}ìñ�|VÄo³Ççìó¶�3fvîÇ8ÏlÓö©pÛFà�þ@¥ {Ä—‘Ew¤Zʳ2IsçȰÀò¶Ø†áò 'ï˜ûW-go�EΘÑ,‘ÏÝÔ}ÛKr$ïn;àòÇÅw×Ú]®¢Ñ5ÂÊ,ì’Þ'Pq‘¹88g ©ÿå�ü÷Õ?ðksÿÇ)Xi’x~õµØÜIŸ4Ä\‚‘~Vàò>`z×-¯›M3RÕud“LÔ#>X¾°ºÚe]ªòÏ<‘ƒ´ŽOC]­¥¤6©on›"LàIÉ9$“É$’I<’i“i¶Iu5•´·ýÉ^%g_¡#"‹Ê.ŸÿÇÙ …ÓBÿly,1‰�É϶rÿïUm­t}CL±…´íNÒàÉö;È@ûD_+1ߌäc#pǸ®ëȇí?iò£óöy~nÑ»ns·=qžqPÁ¦Ø[\Iq•´SÉ÷äŽ%Vo©&‹Ï7ðøž ?ÜÏ-Œ±oà Rp]nc“¸’@ ëÚ¦Oÿ…s&ÿ'ûw{g§Ú>ÛæqþÖíØü=«½³Ñt�>_6ËL²¶“ß º¡ÇÔ ”éÖ&÷í¿c·û^1çùK¿þúÆh°îs¿Ùßð�øƒû{ìžîöý§n>Ïå�»»øwoÎ;õ¬Øá-àï 5ÄYc©[„2/ÌbóNÀsÏÜÛ]ÍÖ�c|ѵÝ�½ÃFr†X•ÊŸlŽ*Y­á¸&†98tÞ íaÐŒô#Ö‹ æc‹ÆÍ¿jE—º>0t‡yöû©XÖ··�´èôi§Vê2Ü2+1åvF7pF\çœ-tÚ®‡¬ÊÒM4-äÉ´$ÑÈ0Ë’páV®4û+¸ ›H'‰*’ÆTŽ˜‹çz^±¨ÚèZ5�Œ�‹—¼‘®!îr³¶ù¬�Ù=N:w5§7ˆõ­:Õ öÏ´ßØ�gì`.ƒìÀ+�CoFÆN0k¯“JÓ¥´’XZ½°bÂ…JI$íÆ3’OãOk 6X­ +nÁ¡1û¢:ô?J,;œÍä×Q�nýg/>“¦xç*9˜§˜íŒc´\cj›j#Œ¼ê+qq6•ý¡û:.×FLÆ89 ŽrG­uÖÚeµ½µÅ¹_:;™$’a0 ¿y$‚1‚0q�@*eµ·IRT·‰dHü¤p€NÐ{ÔX.ãÄšŽ£ _éW‚+)om,íËD® r<Æ9äýð½GÝ4Ùõ]~É5I_VY“K½†-¦Ù¸WòÉ GLãh;×dšmŒvñÛÇen°FâD�bPªàä0À9ç>´ç°³‘fW´�„ìPуæ0Æ qÉ}ÇO¯ë³xŠî+HØGiv� r`Tt;rÌ]Ä™!ŽÝ£:ó]WüMü¶ÇØwý«�¿�³çÿCÆ}³SK§XÏuÔÖVò\G÷&x”ºý f€ ·û_Ÿsö�#ÉÞ>ÏåçvÜ îÏ|ç§lUŠJ(�âK¹à³ŠéEËùr\[Àò´)Œ±9#€q€N{UhlµC§iÖ·«¥È†DYÍÛ¸Æ@2(Ê·\u>¼nÞé¶:”ký•½Ò)ʬñ+€}@"¢´Ðô�>>ËK²¶›ó!·Dlzd hRQE1-5>óÿ½ý:šŸyÿÞþ‚±42Ê0:šxð=ïÚ ®Æb3pçifUQÇ©a[:׃u›õ�Q5å³Óî%’y–6“;‰äϤ‡á߈ ¹’êç•B¼Š\38çØW7&»ïÖW*j¢KÓþkÁ·:Ö—áç¶¶ÒŽ§$w“G3}­cØWhþ.¹çò­�bâîæÃD–öËìS�Z Ãæ‰1ó|ʹáohÍe=ÂÜHÓ4¦Eg8õúRx§îèßö·þfµI¨ž|ªFuýÔ·ß_ëð<ûâûȚ݉‰®ƒ‹uÇ�cÆ •9ÝÏFÀÇ"¸­9®>Ð�o{q3]¬EYb$¨· B‘ü qÛÞ½7â¬7:å·š™Ù0Á#�ìFqÔgœ8®Piöêb(¥|¹šqƒÕˆ`sÿ}ù|v.«:mk¯Eýn~u™c©ÂµJN:ÝôOÍ~'xm…õÊœ–ó.w 1—Ë�ñ�œœž+~ÖI~Á<ÆðÅ1‚Ž–¾Z2OÊÄîôÈǵ\›F·œm’IL{¤m™%Ãzg£9¥Režæâ}ÁGï Œs�”3×5ÍWJ¤Ríå~¾kúó9+ãèÕ„Wkt¿_5Ûúg19ž[É&i„ÈÆ0®FÖß Ý�*c�ךõ]ÆKÿhš]Æ¡#O}hÑ¥dA£pÆF(Êägá°K-r1èöм&6”È$˜@À,HÏ©ã“^£à½&ÎÛF²¼Š2%íl¹bBF$c€;dž}p=+ÖÊñ0«]Æ=ê�o&ÆB¾%Æ"ÿ5ýy”4‹ CBñeµ¶¡¨ýªì§”7Ÿu„(ÑD³È§‰`F+•¾ñ"ZjVú§†¦7z¤N=T«W ¨Ê#8\ ±Éå�½NûI¶Ô.ìîf.$´}é´ã=¶UOÕE>ûO‡P[u˜¸N“®Ó�™NF}«ß> ¡ ë0êºL—6í§ÜM`ñé·"dÝÔ(b’1Ô¿�I6£1ðõõíÖ›qhÑC#y¤Œ³¹êŒÀgüŠÖ¨o-c½²¸´”°ŽxÚ7ÚppÃ�xo§Ámymd–LÖWq‹KËy$;­ZMØŽÚ6�q´’ß{=k²ÖdÑÃ×qjVößK©^Gh÷‘«-¾é°Ò’~ê®TŸS´u"º¸¼ ¤Û]Auk6£ Ä.dé%ÜÞQˆ1Y .B·§cJÒ¢Òlüˆå–v2<�4ÄvvÜÄàÉôPŽøVßÁzV´ 6öÖ[™a ûe{b’Ÿ*^ä#)·@Bz×£ÙGoqkâsv±É¾úE‘e�–49ö GÖ·l4Ø4è§Ž̳O%Ão üÎÅ�á“PK i÷7¯uoÌž[Kmg7îÊgùOâ²~Ï=枉®û¿á(*n!Ž3¼ñ†ÁdôÏjô—Ó,$°/clÖ``[˜”Æû¸Å ¦ØFЉel¨² UV%8 8ëŽýhÊŒ(ÎZZ( Š( Š( `¬¥X¤`ƒÐŠóm\A¨Zk—úG¥Ž‘=ŒÛ ö†8-°ª�0©ltçÒ]Ddu ¬0TŒ‚=+6ËÚ›r.,t]:ÖpÁjˆÀ£ f€9àÚ~ ¾˜ý�û"-.Þ[‚@1)YÄOl€ ú{U%‘ѵ+½2Âçþ'WÊí ±E–Úßb¡l3(0Lõà¿û5Ù6‰¤½”–M¥Ù5¤�½à6èQÛ9É\`œ÷§iú>—¤ ›¦ÙÙ 1æ}š�~3Œí8Éüèƒðë,¾$VÙÇwªÜY¤RíÇ”f‘¤Qµ�HÕ×ê;Œ-ÿ”Voö¿ü$6¾WüôÆèvã¾ß+wN1»Þ»eÒmúÞê$y]±F¡P´„rûÜÚlç5;XÚ=ê^5¬éjÎcÕ}u€8îæÏPŽK¤Ó¦’ë[¸‚Hš#ö¥mÒm“~zÕxÛ÷0sÚ¶#ºÒàÓ¯|C«ÇÇ-ë=°‘·Ê<¨Äc¹` sûÃ]šm¤—] x’íã1ý¥#_4fÆj»xI›KµÓntë[«KTT†;˜V@»FÐpG\w wO²~ŠØÜi6Ú´òÜ]AÚ‰RòotP}ÐàwéTãhÛàòP­¼h#›sd4K6ÙXÈT9”Šë“ÃÚ,vFÊ=O[Bþa�m�&î›¶ãàsíZ k‰QD`mzcÒ€8û$½×uoìùlVÚÓæ 3…‚iÔ¹(Ä‚WÊìz'­xjK£>£,—Ö–0I¬|‘ÂCÅ6!Pñ£6?Œ1$r­Ç&ºµÒ´å±k°µ�’ÐWË9õ\b¤V‹1 XDpРŒb28Gn§§­q“E ^Ø%†¦º¥…ù»�ã�#-áæ.Œ£$n;y'ï c¥PðÚ½”ú|r^Ù@­¡Kö+ËrÉŒ%§Ï W)†à�šôH4ë[‰n-ìíáš_õ’G«?Ô�“L‹IÓ`>Ò1s‘>ÈTy¹ë»æüh�ñÇduZk�ɨZØD�lÑÄë9MΠŒüÎ6‘Ôu¬Ûéë—ø€Y�jÐ\BÇý-eQ‚‡û¤ìùzíÞAù±^…&™§Ë<3Écló@ŠF…KGŽ›N8ü)[M±{å¾{+f»A…œÄ¦@=c4j¼×Çúu”Ú팖ºV™%žou+‰¬Vr°ãÊRë�\|ÌØÏH‰çW¥V%ß…tËÙæ’apVâO2æ5�‚ÎpÎJ€8_»Éãšä´½ u/ ø‰¬tݤ¸†kK «=m~Ð¥0Nw7Ê_€sƒ·=¬=*Þ(<'ã]¶Ö6Ž`ukkV'nÛ‹‘“ò(ÇðŒg„:IƒÂz]«L¶ÂâÞÖe*öpÎé=Õùû¸ëUeð†%GA¦y+"•”[O$>hÿoc ÿð,Ð~4þÔ³µ�WÒ#‚K«TxÕ^ÖIÜ ‚@GnOÊÇŽcƒá¶ÔõŸ+KƒTÒu-+J6ì×fÒmï2¶í¹ó¾øÀ$‘Œ¶1Á×Iá‹,£²ûF¢¶ÊÅ™üÄÉœpÎX±tÎ(O èÐÞZÝÚY­œöØTkSånQü ·—Øæ€8ÏË©øwY“Rkó{u3EyÚòÇRH¬nŽuÎ߼ĞF6¼1áä—IžÚþQ¥JäÇaw¥¼ ?"JKô vÀâ´ï|¦j;\ͪ8i»?µ. ¸¡ð0@#Œ T£Ã‹i5²ÞêÁ&Û¼¶¥;¶è 1+œàã ?±Ñ|?s®[ø8é:OŸa9–{± [ç�0È™ûÅÎT8=•‰û¬x«J‹þ­!4}#N anþfë0ëÈÊ…E±Œ áF3�-]ܾÑeÒ£ÓNŸ[DÛâå6þò°ùƒµœÓ¤ðý¤°ÚG,×oöhÞ0æá„Ž`–qóg¨ ÐáØßHñv˜±;È—²¼fÑ.lÄ(-‡Ò9Sż|rzóŠõ:Á‡Â]¾£gß™­ž15üÓ.J2¬ŒÃ£˜5½@Q@Q@rÞ$¶dÖm55}2EŠÒh¤·Ô&1¨F(ZE¶q·c�zŠêj½Õ…�÷—ö»H.<¶ÜžtaöŸQ‘Á 8·…ìü)o¬�j;}NÇEŒ5œÑ£‚ç@êÙq» pAàs^…Å­õ¡Šà@_ËCqnä7—¸d§ãéRO§XÝ\Eqqgo4МÇ$‘+2bFE%ΙayñÝXÛN—|å–%a&ÞWp#œvÏJÆð!ðF–¨W 0;|ƹý²ÖëC¼ÖDMeq¶Úi\âÞMÄüÝ·H¡°{mÇ~}OÒ´í&7�M°µ³�Îæ[hV0ÇÔ…4ïìëk©³·ûD[•vª—ÚÜüä�ŽvûW7iw ´–åõ­â pâ(%×bØ¡�•¶ x=ɤØÒ=!X:†R ‘�GqX÷>#··Ô¥±ŽÎúéàÛö‡¶‡zødnç'ŽxŠw…e’o XpY#ò·Ü!*à…àæ°|D“¦§qq¥iúµ¾³ò¬SÛ¦è.°<ÞJàr>lÚ�ÂÆàñ-™¶yWi½ûÙö�3ÍÎ=qŒ|ÙÏÝæ�7Ä–ú¬Ê-ìï¾Ï&ãÓCû©1ès‘Ðã f¨®’Ëñê m)O° P|¿?; ñ»`ÇÒ¨iqÜA®[&“aªXÚ9s}itŸèñü¤ƒ9ÝŽàçµ ºg‹íu#dÆÂþÖã‹i®#M’Œ«×)Éâë•H‚ðY<¾JߘpÍ�£æÎq»�ØÆ{×1 hz…¬^7ÿÚÚ˜D˜ûåH T(;v–làž¼Õ“ ü¾‹ÂGK»KÅD¶iü¿ÜV”?CòŒã®xÅ+±Ù÷‰m¬ï&¶KKÛ··P× kñ##w#œs�“ŽÕï‹`´6­›¨]Ûݲ-½ÅºÆRRã ÎLõ«CqsáÝKWGÓ/oòçíVò[E¼1(ªQ�ð�W©ã« òÃÃþ²hšI­¯âyÄJXF0äôþN3L‚_ο´³“G,Ð4ò$¤…AnÁ#$ž0{JšÂÿíïy¶=±ÛÜ4 û³æqÇl1+ÿ¬kÛÄÒ|Q©_\ §öJÉû^S¹e÷Ú~b²î4—µm=VÂæþÁ-\˼fL]³.Ê=rø=‰íÖ‹…Ž·IÔáÖ4ÈoàGHåÝ…�F¯o¥]¯.]#S.‰Í¤ÂÆ(fY-ä³{ƒ¦RT´jêßw£sŽ}sZ:F©k½¥¿Ú®WX³ŠÒîàÄU¢*@.ã'i13/^ª(¸Xí$¿Û¬A§${™áy�÷cb‚ qß$ŸûäÕÚã/mZ÷BñLö°³î�ì-c�K‘)\(ôѤz «qá‡ûeÕ­…¼Ð,ÚbL%;ˆ7i&äbÇø¸ç¾(¸Xïh¯=“N¼Ö­aÔï4û¨¥¿ÕmüÈ 2¼Vè á±ÊŒ—$ÿµMo5¬7óÚØÝ,öšÄ_aÛ¼ì‡tE¶›~i3Ž:ç¥+ŽÇ¢Q^{“©<×MÑnÓqI�˜ d)1Æä ã9�ŒóU4kËÛ¿µÁ±ûSBEÂùw8‘—‚G^F8àQq�eQ@Ž–šŸyÿÞþ‚�PI÷›ýïè+#@½³ƒP±žÎå7Ã2uÎ2 cÿÂ3(P£ÄzØQÀtÏejÑI¤Ë�IEYcÃ2�ù˜µ³ÿm£ÿâ)Ðøf%»‚âçSÔ¯|‡ó#Žæe(tl#5¥E¨¯m>ç1âÍQÔõX¦³·ó#X½G;˜÷>â°á×?çÇÿ"§ø×¢Ñ^M|š…jޤ›»ôÿ#çq?ù?ƽŠËû üÒû×ùªø?æ—Þ¿Èó¯øDµÏùñÿÈ©þ5ÝøvÒ{ ÚÚå6L›·.AÆX‘Èö5jŠêÁåtp“u)¶ÛVÖßäw`2jŽ­&ÛjÚÛËÉv-QUh¯Hõ‹TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh ^©ïQQMþ§þ?­Äd‚—‚ŠÐÈJ)h ¢³õKùtÁÁ·2ÙE˦KÄ8Ãí÷{½‰,k$n®Ž+)È ô Ш¬Ýnî{kHbµp—WS¥¼LW;rrÍŽøPÇð®Y/õí‰qýËÇ2M%˜‘áq1��®«Ü#kœQq¤wtTV×ÝÚCsÌs"ȇÔ‘\½ÿ‹¦µÖïôx£·’øË 61#qtÜÌç?u}±éÔÐ[Er“x�Q¶¹›H‘-[X71ÇmµG$N3æÝœ(Y3ÏUµ­¡êSjK¨–5û5ô¶É°•R0NOZ.5i+ˆO]LJîn­àû5òL×n€�$+ª+ ž™aœçŽ{WG£êSjê©*Æ¥ë[ǰT"6O=rÆ‹…�J+‡Õ¼c{§êº¼+s¥±xÖ+9C ‹�È­…!ºåˆ)­MgÄ“éºÝ…¬pFmˆW¾wÎaYG0q÷‰Î{EÂÆíÅ•­Û#\ÛÅ1�;|Ä Œõëô•O\üÚ¦¯}ª^ÚhÑÙìJ¤²]î>d…CmP½0É9ëÓŠ£âéìu{Ý,Ånפ[Çeb7É mÛ‰þÀçó"‹ŽÇ]Ecéú�äÚõî›uä²ÛA&ø�®ç}ûº“ÇÊ1üÍaÅâm^ö=`}:ÞKèî^Wž'eS…aÆ2rh¸Xìb†(#ÃF€’’rxäš}rÖ^"ºÔÓJ…QOqw2K$4m$îdÏf!@ôÜ}*á×b¶¾Ôî/.DVòGkÛ’òãs`Y�Ì£û§Þ‹ŽÆíÍéž,¶¸´Ô¯næHí`¾6Ð0�ƒ8Ø„ ¿x¶Xðn•§g®é·óC µÐy&�äEØÃ!X+uHÈ<ûQp4h¬I5•¾›H].}ÑÞJò4›:Ã;°wbƒ?ídVš_Yʰ˜î q9"²æ×o®0zzR¸(¨áž…- ©"†*J0`8#ŽàÔ”Qš«¨_C¦ÙIu>v áTe™‰ÀP;’Hzš­¥jr_y°]Û}’ú<Û}ûð*Á°2<ú‚;P4óFi( š “ï7ûßÐTõŸy¿Þþ‚³,e…{«éW²bÊ]NÖàÿ£y Ã'÷¶Ã×nAíZztw‘Y Ô'I®‰,æ5Ú‹“÷W¾LžOZ¥­x“NÐe¶Žù¦ÍÁ8ÂÒ•3*‚q’«�,*$ñv�%êÙ‰n„Í"E‡±�U]ÀeVb˜RC/޵…ñ"Ö7²µ¸¹’h-•Äo4f'°*»YÒïS[ 3ÃKoÌ·’Ø[*Eog#`…•¥‘gE˜F¼’ *ÒF™5ûNé)+¼rDÑˈñ¿ä`ŒŽÝÇ­r¬:§ü"wz�´–Âù59.‘­nŽ"“i‡oÏ Þw �¿QYz�½ÚèÚ‰¸Šc$6:ª\LÒ‰A�ùï,hpp6ކ€=ÿÅú6›{-¥Ì×"h�ÄvSH0Wr¡ Ž3Þ–ËÅšN¢’½™¾”D¬Í�>q÷N  ËÆÑÏŽ+·ÝxÆ÷OŽ)�N ™_iÚ‘ÇoÉ=2[`¯>ÕNêâîßÁþ#Ò¤ÓîcT·Õ&–y"dAºGh±}ÊäðN1ÏZé-üi¤ÝÅ$–Ñês,Nü½2኱Æ6zëZºf§m«Ù »C!‹{ÆD‘´l¬¬U�V‚#‘^a¡,ú>¼m´x °’ýáBóéò PQØ�Œ#' „9ü+Ñ<9§Ï¦i²Áss Äíu<Ï$*UIyþé'{¦N=MkÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÉ¿ÔÿÀ‡õ¢‰¿ÔÿÀ‡õ¢˜Œ‘ÒŠJ+C0¢Š)CR°“QÛ´þ]™É¸Eᥗ=”óžç§sW4XÑB¢€T`è)ô”ÀçüGg=î›qh/ vÆFafaóC• ¤yß.0\üŠÃ¶Ñ&³ºûU®—­ÁpsûØ­ô¥~zòy®òŠ,2ü;iqa ZÚÝ$ˆ ÅK*n;ÛÆBíg¥dÞøD_êÝÜ�Mx!6— “$Œœ|À:Šê¨¢Ás =&ö]MծŨ– ) œFIýã9\�òðÝqÖ Òì5Ý2þñ-:K+›é. ™ÜH¨ç¦Ý˜ÈõÑÑE‚ç'¦øRx"Ò!¼6ÒÃkisop€’Íe#Œœâ�¡øE¬´ë»=JæYÕïZhd‚æHœ¦ÅEÞT©' ÏQÞºª(°\ãï|9ªÉy­¤i�i©mK—v’ "T?.ÜÁ?zšÞKËmH_Ï$—3F°[H—(XÒ0¨\Ùc�FMv4QaÜæ`Òµý>inl¥ÓÞ[Ô�®ÒrûRu@¥Ð�È8:u¦\xGûBÿV¹½xL·vðGÄjCÅ"Kü?6Ò'§5ÕQE‚ç24ÏAxº•»éÍ}=¤p^$Œâ=èI„.ˆð@íÍEƒbYt8îRÚò×O·™%[ˆÃo‘Ê�ÁH#¨o¦GZê褯Ø5P‚ÝšÞÔÉÅy*²(Á ;nU�S�B¿“GÒ.¢1&§o;^ÉÆB3Èz±#Èé]]%8©ƒµOKÒu„Ö£¾Ôçó<¸š5"郃‚Þ<Ž;·•ÒÑHŠ3Iš`tõŸy¿Þþ‚§¨$ûÍþ÷ô™C(¢Š£ªé6úÅ´p\´ê‰*Ê ´lz|Ë‚?*¥·†lm5/’mBI  \_M2üÉãðÅlÑ@õ׃ì/AK‹‹§€Éq)‡r…-2º±û¹ád`9ïÎiËáXš)ëS¿»,#UyŒ`¢£‡lE�3�MoÑ@5&Ô,ÚÙnî-7u’ßnìw2‘ƒôªW^°»²ÓmOÇ�`¸hœa ™HoºOB+bŠÊÓ|?g¥_Oy—’M4k5ÍÔ“�ªXŒ$ŽXñœS-¼3¥Új+ N$–bKºI:¹ÏRTz@­Š("oYM,ŒZuY.…ÛFä2…61بltÝÍA7…`ŸE}*MBøÃ4Ž÷/¹7ÜoÎàÇf9þ½8­ê(ëÂÚUåô×’-âO9Côð† ª8;Tmá-­.íƒß캷{y ßÍ.ÆŒÃ>ø­Ú(œ—Áš{J³Ãw©Cp…Z9�ÛLÈWvó·�ðÆ1Íkišji–­ Ï4îò4’M1]îÇ©;@ƒ€:UÚ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(“©ÿ�ëE©ÿ�ëE1#¥ƒ ¢¬Ì(¢ŠÊצ¹²µ•½Â µËI‡ :œ|¹êû§ÔãÖŒùÖñËå¼{Ô6ÇeÈÎõ¨®,`º¸·še.mÉhÔŸ”1þ,w#±í“VhÄÏK-4þ�r© ‰AwBoü ¸Û=+™Ñ!Óä‚êdŸ?ñ)[u³q“$¢%'÷›9®Ã^ÐYšÒcöFkpàGyköˆ˜6Ü�»—æF{ŸZËÿ„7þ�|/ÿ‚/þÝ@ÑÑé—£QÒ­/ÇŸ ÈWû¤Œ‘ø+–Ö亳ק»ÔîµK}/ýšæÊOÝA�óy©ƒÕ»�Fjét}5t�.%pâ2Ç*›nbØUç 3€2pªZ‡†mµ)æi¯µ‚ã}ª\~êNÁd)Äc¬š‘ñü#‚âäÀ'þÐûWšw\äG»9ÿYòõû´Ý [›=V;}nïT‹T“ÌâI7Z]u?»ì¸8ùOë¦þÊ·þÖ:�i¿fû.Àp¡7nãŒçñªV¾¶·¼‚áï/î…¶M¼W3ïX‰dq’pHù‰¥aœo…õ;‰¿±~Ëu¬Ozb3ß­Ü’4MÖ—S»h}ë@Í„"ñgö¥ÛÞ2%ËAæ~à«0ýÐNƒƒŒõÏ9®Ž×Ã6Vqi+ · úb”†MÃs¡*ü`ƒÁè9£O X$ª÷†Í%ó–ÀËû…|î.3�ÜíÎ3Ú‹å8mî|C©jîú�íšYÜý–Þ;i6!‹°þ"Kt<`V<Í>«¤xwT’ûP†âþî+{�oy$q°ÃUT€3´=k¨¾ðÕµíä×)w{h÷ ámfØ&`nàóŽ20qެϢYÍo§Ûª´0ØL’À‘(ä0h ™ö±âÅ´óextët3H]‹Êì $òHã'ÔÕ7Y�}ŽÇí—ڣɵ¥ª@HÉbU ��^•¡¬é·7³\iòEÜÙ=œ­!#o9F‘¹ø÷bïÃÖ·i$3ÜÙËk‘–®˜øùAp>˜â€9�3ÆCLðî•ÃG5õÂK+˱ ²˶r{ìzZ©ãky,n®þÊáÊ;»u/ÌáÉ]½8!À^ýA«QxJÎÚÒÎK»Ûi-Ò;ˆ¤aFmÅ[ †õª{Ï ÙßÜé·\<¶bã÷¸*pü|ß2«väQ¨hgj“ÁªIq£éåŒ!ø2¸ÞË»•œJI¼aqj. ÞŽÑ Žì/Ú}¬Ç†^¸ç>µ¡…çèú�•ôŸ>£$­3Ây ß*€Hê(éÚ¬6‡i%鹓ÌrÖbdb6´yÉÏi›â¶¶ºš+m<Ý$wPÙ«¬ÁwÉ"î dc€W¿ñ{sxÂè7+E‹gu ¹V»¨ÆX|ëž�{Õë_ XYé–v)-Ë%­Ð»;‚òH ?1Ç#œqŽ©%ðÝœÐ^BÒO¶îñ/$!†C©Bã§îÇ¿^h™ÿ ݑ׳Õ!1ý¯ì{þÒ¾o™�¹uÛ»Œç߭Ѫf4°ß ×&ßG$y‡Ÿ¹ÆwzPC Åm¨½Õµåä1É)™íRAå3ž§ddò@ fµh k¯´IpžDñy2yy•6‡àËê9Æ}A«”¹  ý_P{+dKdÞÜ7•mè[Ôÿ²Iö¸ªÚeÍÝ¥éÒµ;�´LWÍ·¹(Ï_â)=b­K­h–úäÃpÛV6Ü?q ¼ã$Fðªi²Ñ¯~Õ›Ÿi\}’Ú>¼q+~´½EPIN?3tmÝÏùÇn”©÷Ÿýïè(Lí9ÝœŸ½�_jï?ûßÐTTÕ5(´«¹•Y€!B¯RMsÿð�Eÿ>/ÿøU�¶ÝOý7_äkÏœ}Ã^ÎJµ.y«»ža�­F·$•ŽþÚÉp‰5³Å7ço¾1]B²º†RHÈ ä^0$ù¹S�¥u>ñ Û]E¦ÌZH%m±ú¡?Òž/-Q�=%·A`³IJ|•ºìÎþйƒñÃJc©EyÄLÂ"�Œ�ÁÈÀ^‡ÐœñOtéè¬;h÷~¹Ö­î–k[es*ÄÊî¥sÆ<œdù|j¶§SþÏÜDþ@¸9Æ–Ú2}räh푨x—MÒ¦¼ŽöaÙ-’åÞFUR®]UA$e‰�¸÷VÇÆÚ£%Ävº„3<âá–'Y”‚HUBKÇ 2=h¡¢³îµ«;m>Þø;OopѬMß¿Ý#AÍY²¼ƒP²†îÙ÷Ã2†BAàòµOED×0%Ê[4щäVtˆ°ÜÊ0 ©#ó-QEQEQEQEQEQEQEQU­µ +Ç•-o-çxNÙ)C>‡�Æ€,ÑUaÔ¬.-丆öÚX"$I"J¬¨GPH8©-ní¯­ÖâÒâ+ˆ[îɇSô#ŠšŠ¬š…œ¶OyÔ2Û bÒÆá”mÎîG¦~”‰©XÉ<0 ¸DóGæÇ 82úí<ãð  TUv¿³[Õ²k¸Û.å€È7‘ê9ÅG>«ak,ñÜ]Å ‚5’S+mTV,–ÞÍ/'¾¶ŠÙñ¶g•U=0ÄàÕ�"4BPêc#ppxÇ®}(ÔUXõ; lšö;ëgµLî�eR‹Ž¹l⦂â¨{y£šY#`ÊÃØŽ´%Ÿo¯h÷wíam«XÍx…ƒ[Çp� #¨*xïV-ïìï%š+k¸'’Û*Å b‡Ñ€<­X¢³ïõíK�`Ô5k I™w,w)œdAÆAüªÃ_Ù¥êY=Ü vë¹`2ì=Bç$PŠ(¨c»·–ækhî"yá e‰\Œ7ÝÜ:Œàã=hj*´Z�Œá 7–òyŽÑ¦ÉTîuÎå<‘ƒ‘Û¬ÐEPEY5)5 4ô»�¯#@ïn$ESܯP9�Y¢¢’æe†)f�$˜•‰€2 !Gs€O…Fu %ŠIM帎9D.æUÂÈH Ï ’:䊳EPEEÌM41ÍË *+P�vÈ þ5-QEQP\ÞZÙF$º¹†,4®z žô=Åõ¥¤�Çsu/3m‰d�)�ú(=OÒ¤–Xà‰åšDŽ4gs€£Ô“Ò€EEmsåº\ZÏð¸ÊɆVúÁ¨Æ£ba‚aynb�ÂBþjí‘�@§<žÒ€,ÑYöúî‘yzövÚ­Œ÷HJ´\#:‘Ô#¡@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ï?Ô�÷¨¢óýHÿzŠb0ÇJ)J\Õ�RQ@YC…,7Hä�×ùŠZÃñ"ÂÐAåïþÔ~ÂaÇ™¿õãf>öxǾ+b7ìñùû<í£ÌÙ�»±Î3Û4mÕÔ6²\ÜÈ#†1–cÛüOµgÂM¦® ‚ú$2}>xÐgÕ™Rj¯‰/"ŠïHµ•fd’çÏ‘a�åm± Ãå@Oß1ö®^ÎÄê.´Æ‰dŽxîî`ÓîÚ[‘ ?xqß–8Æ(¸ìzE@×–ªg sû8Ý6dºÎ[ÓŽyªž½mC@²¸“>iˆ,¹ëò·‘óÖ¸}n;Öñ>»9D—Gµ–ÖkèwÌ�ê£,G|b‹‰#¿]OO{7¼KëfµC†˜L¥û¶p*x®!¸äÍ›£ì`v°ê:é\uÍŠÜxÆÚÚ �éz‚®¥,kÈw‹c¶´l}v{Ö‡…f‰N±J�έq…,2y¨¸ìnG¨ÙL`^[¹œ1„,ª|À¿x¯<ã¾:T‘\C9�E,rŸd��€p}ãÞ¼ÊÎÊ{Û/ ý�ö^Ãiy=³ǘ²!û•>ÄÖï…µ‰§³Õï­4Ë›–ŸTbУ"´gÊ� ïeŠ.:y5­*+ß±I©Y¥Ø y :‡Éä|¹ÏqVdº·†ha–x’Y‰#8 ä �£¾¥yƵ ÅÄþ0ýý„6ù�¥K”ýáÄHGÎöiæ�jöïS½}ZÏL¹•4ˆ!xØ:b>Ye �'fÕ8½+ŽÇ¡Ýj6V%Ýå½¹�Ცn>Ù<ÓÍå°i”ÜD(Þ3�H-è0_Jä´ù´›­w\ŸUkV2,O\íÁµ1‚ îþÛóŽýkYŽæ}wX–Í"›F†)îà�¬ð€Ä*ã�»w6;í½;…�F‚öÒé¶ÛÜÃ1زb9|­÷[ŽÇ¾*´Úæ“mRϪYEÙò�îCààí$óƒ×‰c}eŒ5 †¸†;{�:Úh˜*º)“$gÓ#óÏé±ÞÅ&-m­¥•ío\%ÓMŒèÀð¤ô#µ+…�B’þÖ8a™§Cî±ÄÊwféŒu§-Ü/y%¢¾g‰G\•X�9éÎÓùW)g¥É¥jÚ”ïfKË¢±®#I�ª;À¨ŸQ¹EK¸.Ôë:“D.ÝC¡E*˜Œ·—‘ŸïšvQ\CpÒˆeI OåÈ�ØØÐàŽ=êJó[}ZûLµÔ#´¹7\ë¯ Þ ˆ(r7›ŽÜrq׌àVšø‹UÒ`¶Ô5–Å–g‚@|¢X¨ß“ 1ÚÈ@8Î8¢àv7PZù^síód Á;˜ô} M\¾�öÛÝKI‹R“̹²´7w?(f—*‹�Ç æ�ʶ`þ×Ùeçý‡v[í~^üco—Ÿ|g>ô~Нiö¿)þÛäyžcmòs�™ùsžøÆ}êÆh£9¬_ÝÏœP@·J._Ë’{xV…1– '$p0 Ïj£¡Mž¨tý:ÖõtÉÈ‚k9¢[wÈE ×Aϯ ã:ŠJ)3@Ž (Q… “Å"}çÿ{ú u5>óÿ½ýIG/ñ¶øqOý#¶ß )ÿ§”þM\5Ž»–†‘, %üs´�³�²0UFìwn8üëérØËê©Å_Þ>o2åúËRv÷B[«)í–ò9"YðWpê úð}ºÕëEŽßÇQA¥öÕ_@¥fiÚô‘LSPj´–Mò) ²·÷ÔöoçSé÷©yãÛ{ˆÿÕË|s׸ÍwN-.å~‡;ÅÇù—©ìscÈ“vüm9Ù�Ý;cœý+Å&Ö.ô!y¾ž–ñ[K>¡oÍ´×.…!€¨rŒ ³36@-Í{uróxG¼v“P–úîI<ß9Þå£3y‹�Þ^Ü�± ÇN9ó_}‰È«IªéºvžÚu…âÛx… ŽÞêÚKXå_±¼Ÿ:H$e9v# ô*“ø~jW7Z=­Û\ÚÞ¬2ù*æÂDg ghÚ™ÜAÀ;¾£‚¾Ð�±¶žÙî 7Ÿm1ÝÊÓƒ/—åò\’ÃobO?…Z¹ðÆ›qoij©-½�±ÊÚÚÊb…†Ca‘pÈéî}h€×bûŠµÛ¨´(öÙZDÓÏšïæNñ™#ù›p$cr·È=EZð†©y©k“Y‡KVžÖá>Ñ›,Ÿg™bB<æec‡bF2§†äWc{ák-Fkùn§»sz°£b@žZÄåÕP¨|Äœäžx#ŒAoà}Òid�/›°:½ìÎ ÈÁœ�ÌH$®Ig'9 9¿ðõ¿‰í4É$²Žßʹ†õ´�êF}  . ªuã�?„× ÚÞ/‡| mµ¥õµ½Ä‰aT¸û]>ÊÉ¥kK;{v•·Hb‰P¹õ8šå¦Ôoí¼->¦ž$†êçÉŠæ4XcØÄŸõ`(-µÎu`O¶<-sªhæúî\Í,Òf  }— ·Ê¥±ÓŸItY‘Ô2°ÁR2ô¬Û/hzmȸ±ÑtëYÀ Kª#zŒ�šçƒhQø‚úcö?숴»yn Ä¥ds=²$wéíT”jGFÔ®ôË Ÿø�_+´6Å[k}Š…°Ì HÁ3ׂÿì×dÚ&’öRY6—dÖ’6÷€Û¡Glç%q‚sÞ�§èú^�$n›gd$Ç™öh=øÎ3´ ã'ó ì²ø h‘XKgÞ«qf‘K·QšF‘FÖ=#W_¨î0L·þPMX ¿Úÿð�Úù_óÓ¡ÛŽû|­Ý8Æïzí—I´Kë{¨�Eä vÅ…BÒYÈïpyÿi³œÔích÷©xÖ°¤]«9ŒoUô Ô àtk»›=B9.“NšK­nâ "h�Ú•·I¶Mùè#UãoÜÁÏjØŽëKƒN½ñ¯o·¬öÂDß(ò£Žå€$Ïï tri¶’\It-âK·ŒÇö”�|Ð=›ªíáý&m.×M¹Ó­n­-QRîaYíAÁqÞ€9Ý>ÈYør+cq¤ÛjÓËquwj%HɽÑ@a÷C€pqߥS�£oƒÈ!B¶ñ ŽmÍ�Ñ,Ûe`@!Päp>R+®Oh±Ù(ô}=m ù†¶@›ºnÛŒg�ϵh,Q¬B%E�´ é�Jàoì’÷]Õ¿³å±[h_O˜$Î §Rä£ _+±èœµá©.ŒúŒ²_ZXÁ&±òG Ø…CÆŒØþ0Ä�Ê·šê×JӖŬVÂÔZ6K@!_,çÕqŠ�YZ,PÄ-aÀCB‚1ˆÈພž´ÄZM�{`–šê–æîwŽ4Œ´k‡˜º2Œ‘¸í䟼1Ž•CÃjöSéñÉ{e¶…/د-Èo&0P–Ÿ<1\¦€H~kÑ Ó¬mn%¸·³·†iÖIJ¬ÿRM2-'M€\tûHÅÎDû!Qæç®ì›ñ CÄk‘ÔÊKÔ½{;v»Aµg1)u�±‘JÖoÄMiŽå‹N†1‰IÃ1ÀŸA@ç‹tÝJÕ§¸k�¥ÞA,— ,�û§c´÷d$àÅršdÁªéš<ð•}fæßZ•sœ8Y$”~#þ^œörX´�¬Êlû;F {}6ãö§;f¹Šå­á3Ä¥#” ÜŠq�PÔÅ[x�S‘ì¯Úö6ûV¨Ö ¥×1 ‘“9ûÛÔ.óž1œ†£·×5³ Å¨Mª"ý³R{f�[ �Óyõl.Ñž2WƒÎ{eÓì’ù¯–ÎÜ]°ÚÓˆ—Ì#ж3ŠQ§Ù 7³� W,Z,lmÄ–Êã’Iõ&€9Ÿ÷Šï~ÚËu ™ð ¶ N¡xÈéÆ:W]Uíl,ìT­�¤êØÈ†0€à`tôb€ (¢€ æ™-¼6òiÖo?ê£h¬îŒ`~`ÛÀÓG1†3,JV7*7 8Ȱ8�©sFhŽ¥¦G©,–He‚O29bÀe8*q‘Ü)ÑévI¥Å¦µ¼rÚEÆ#•Cª02¥[¬�KÄ–z]ÓA,wyH²ÜIn[tb@g9àpzdàÒ�Ë˦iëk%ªØÛ y^! ìs€9Áàø ?³4ÿ±­ŸØm¾Ê¤”» íÆ:Õ AšÚÔ ¯Ç£´"i"iVS#!q�y?0è(ͽŒV×ww*ÎÒÝ:³–#�ªíÆ~¤ÕœÑX±øšÒ]Kìk È ;Û%à <Ê (sŸ”öÇšC6¨ªZV¢º¦›ÚÆcfÊÉ91º’¬§èÀ�®P{Ý:ÇR�c¾²·ºE9Už%p¨È¨m4M'OŸÏ²Òì­¦Æ<ÈmÑ™®I"EÉ#„D™˜à:“UôíJÓU´6rù‘W%J�Gb~>´jŠ)(ª¦§Þ÷¿ §T}æÿ{ú ‘”õí K{‡tƒ+§UaÐ×ÿ ¦ú Iÿ~ÿ]¥åÜ6s]Ü>ÈaBîØÎ¬±â˜¾Öˆ<ƒä þo]Tqõðñä§+/‘…L¾–!óÎ7üþL?ô“þüþ*´4_‡6ºN© ô—òÜ[r'–nìO&¬^x¹l#�î´=b5’Af;˜ôäšÚÓõ mRÆ+Ë9D�È2¤#èG¥i,×4àç¿’ÿ"?²hR´ù?þf�Äx£YÔ4íN8m.<¸Ì!ˆØ§œ°î=…bÿÂS¬ÿÏçþBO𯚯œÐ£QÓ’w^Ÿæy˜ž ÃaêÊ”ã+®É™ê4W—ÂS¬ÿÏçþBOð£þ�gþ?ò…eý¿†þY}ËüÌ?ÖŒòËî_æz�åßð”ë?óùÿ�“ü+µÐn¦½Ñmî.|¯»s` áˆíô®¬iG7Nši¥}mþgv9¡Ž¨éRM4¯­¼¼ßsrŠ«EzG¬Z¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«EZ¢ªÑ@¨ª´Pª*­jŠ«E:óýHÿzŠŠoõ?ð!ýh¦#t¢�t¢¬�hÍ&hÍeë�Miý›ººÜ‚²M ÊB£6;·÷G¯=«Fü˜#‹{¾Å ½ÎY°1’{švh kÅ7Íg£’m–IÙï.|ˆ·*íU/µ¹ùÉíö®vÖîi-Ëë:%Ä6áÄPK®E±C+lð{“^�Fh°\Èð´ÒKá›7’?+pmÁ¡�îPAîk�ñ^�5Ïü$ s¤ß^ÞÊö|ÐÄΉÕùA)Î쎧=ëѳE€ñ“ë²Ío¥Ü­Ô6æˆíÞBé”ÜD›¶ªãp*•€á-´«ïµË¥Ëk0°ÒâKW(vÌdÊ {”Vuã¡ÅE¥øZ.�Å…Ç“6–~Þ®d Ò�Ñ'=F[ôǵz ó)4ÝZ}7EðÜ=¬vF#–R\4rî8,ŠêÀíÆœ`ôÍhOc¨ÙYjvMoy.«¦ÃoÇ•ÿ-23“³¨l“ëÎk½¢•€óÝWÃó2ø–åm.e¼€[›_%Ö$�§#�LVΣzGŽ4ÇZƒÅo ÐÉ*YÈÈÌ{~`0G' Åu9¢�žimh.¯/•�ßöªë’4w¡ËŽ16_/œcnàW¹=*õ��òøŠÞ²ß ßíe¹�£?cXÈe!é»nÞAÉ$äWkicob²­´{Ò¼Ïó—c–<úš°FA¡¤'…Á67“�û©ïî%‹ÝL„øàŸÆ·*(!ŠÚà†5Ž(Ô""Œ€I@+k�²[$pùöí03ÂSæ( Lq¹8ÎG#ŒóTô{ËÛ¿5Á²û$SBDëåÜâF\mlÉ( duäcŽutf€ 3IIšë* >ó½ýOPI÷›ýïè) ÄñT2Üx[R†ÞY^K3@Z»ªj7ö³Ñæ¿ §qŽTMŸ]Õä³øbïZ×u‹˜oc€ÿiO*Û‰yçÆ@ùFSR�Þý @Úìaö#7v–eUz–‡<º#ÔXZI%)ùìúÛ³;�VmgW‚ÍßÃ÷6ÿb¿‚ä¯�´Š¤îÚê8ª’ÝK¥øŠÚòËL¾´¶ÔnV¸.V2íÀ‘pÇ ëÇ?^jÜëZ_‡žÚÛJ:œ‘ÞMÍöµ�a]£øºçŸÊ¶5»‹»�;F–öËìS�V Ãæ‰1ÉÇÌ8§º¹ rK’ÊÚ­ÿK¶s_õ+=;W·7S¤{àP¡˜rägƒ<×6𕬲*A'žX�˜TºŒóÉÆ´>,¼‰¬X˜šè8€cÈ1ãÊœîç£`cŒ‘\vœ×hF·½¸Ž®Ö"¬±T[†!Hþ8íï_5ŽÁÂu'Rúë×þù¾e€§:µ*·­ß^ß&oͪÚÃö�Ì߸ [ïm]ÄR§.¥i$Í¢d‹ïùCy—Z㯠°¾¹S’ÞeÎô!òùr1óƒÓ“ÅoÚÉ/Ø'˜Þ¢†0QÒ×Ë@IùX�Þ™ö®J¸*p„]÷·õ³þ»œ5òêTá]ëoÎÝþ»ì[:åˆ#áÁm¡’ÚFú½A×ì,|;eö§’ðÍ:´‘2®Õf,2F Áçⓙ弒aæ˜LŒc ämmò ئ8y¯OѬ¤¾ðž‹¦\_ÈÓßZôiG™hÜ1‘Š2¹À8l½|¯ N�vâõ³üÑîä¸:T1-ÁëÊﯚò:Í?ÅþÔþζÚÍ‹M:‚�}¡<Ì‘œ¯µB|uá�~¶ŸÛšy&#!”]GåŒ6–Ý÷Žs�@k3I°¿ÐüUoo¨}ªìç”7Ÿu…(ÑD³È§‰lñ\µïˆ’ÓPžêßSðܦëS‰ÃǪa áUD|.[“Ë {çÔ§a©Øj�´Ú}õµÜJÛYíåY¸$Ï"­V.‡®Øê /Úô¿1¥òŠÙ] c/Ô(b–ÀÎ1\æ�¯ê¯�w&©Ã\j’Y5ˆ‰òÄ®»²>mʪÓ§zî&¸‚Ý¢Y¦Ž3+ùq‡`7¶ Ú=N8ö¨àÔ,®®®-­îà–âØ�4QÈ£'¦à9ZàŸPºÕ§ðÝõΦ„Ï«�,}ŸjL¸ÏÞ,1ƒž2z Ûð ´Ðh×�-ä·õ ¯õˆƒNàŸ” äòsø`q@]Q@Q@Q@Q@Q@Q@W·¿³¼yRÚî Þ#¶EŠ@Å¡Áâ§`¬¤0HÁ¦+Îua ý¦·} ¬qZYi3ØÀm°¾{ØU@˜Ô¶:P}£cqo%Ä7¶òA!äITª‘Ô)ö×v×°,ö—O }Ù"pÊ~„q\˜m=zöSö?옴Ëy'$•‘ÌdöÈã¿Oj¦£Q:>£w¦ØÜÄæô;ClQe¶·Ø¨[ ʰLõ࿵vÉg-›ÞEu –È´±¸es»‘郟¥55)&ŠužhüÈágF_]§ŸÒ¸?²Ëà¡¢Çc-¤wZ¤öi»qåyÒ4Š6±éºýGqÉ–ûÊ ª�·û[þ o+þzct;qßo—»Û½è¹7ökz¶MwºeÜ 2 äzíëŠdÚ¥�´³Çqu&ÖIL�µQX�¤±ã�­ßµq=ÕÍ¥ür\¦�3ÝkWIˆý¥[sí}Ùè/~î{V¼wZd:}ïˆ5dGŽ[Æ{pè¾QåF#ËHŸœÐC6§aoh—s_[GløÛ3Ê¡=0ÄàÕ�"4BPêc#p`xÇ®k�°³žŠØÜiVÚ¬òOs ](• ûÝt8…T�£o„H!B°"æÜÙ%›l¬ä*ŽÊEvqêV2Ùµäw¶Ïj™Ý:Ê¥:峊š áº�'·–9bq•’6 ¬=ˆë\-õš^kš¯Ø%²[h^Â`’¸X%�K’„€pJù]�EàÕ¯IrfÔ%{ëK(dÕþHá!⛨xж?Œ1$r­ÇZé`×4‹«æ±·Õlf»RC[Çp� #®TñÞ§·¿³»’Xí®àšH[l«�ŠF¡ú×i,Z íŠØjKªXß©Þ8Ò2Ñ®RèÊ2Fã·’~ðÆ:U«ÙÏa—¶p«hrýŽî܆òc ióÃù0ÜCð3@Õö»¤i“¬†«ci3.åŽâá#b3Œ€Hã þUa¯ìÒõ,Þîºuܰv¡z‘\ˆDvFÿ_´Öá’þÚÆ$kb‘ºÌWs¨#†ýüm#¨ëY·²«Ýß³:ͨ¸…�úRÊ¢5÷IÙòõÛ¸ƒÎ(Òª�î§ma%´s7Íq0�ㆠžyé…5r¼çÇš}”Úå”–Ú^šóÛæóQ¸šÉf+<¥.¹ÇÌÍŒôˆžÀP¡¬±±Âº“ìk)¼S¢Åh—7Z�½¤O,°¡¹‘cÜѹFÆO<ƒúW'¦h‹©x_Ä c§hÌ÷Ëkcuc`¶¿hR˜';›å/À9ÁÛž„V&—oñžÛ{G0:µ½«·l÷#'äQ�áxAÓ ô‰’iSÛßJ/´¹\˜ì.´Ç� ÿJKô�ÛŠè#Ö¬¤Õ§Ó¡n!…&;ˆÚÈÅ€ çžTçð§]ê¶ÖR“Ä©#‡A¸‹¹³Žzz^oe£h7:Ü:V•çØÎdžìCùàL2&~ñs•elýáSø£K‹þ�%4�'O cnþfë@ëÈÊ…UåŒ`o 1Ô÷¨»¶ñŸwzö±ÊÞ`˜BŸ.D„IJäÛcN9ãÒµ+Ì,ÓV7yòW‡lº5Í …¸áF#¥¼|rzóŠôú(¢Š(¢Š* «ëKW»º‚Ý‚«M @O Ïzž¹�Û2kš’¾› ŠÖh¤‚þRŠŠ‘x9ÆÜŽAê(bÿ\Òt¹=CT²´w•n.2ÃÔFE]i#2;ªÆK€®kÍ`…í<-°u”·Ô¬´xÃZK8 nt­–²:×Å­í©ŠàB_ËC=»�|½Ã 0íøÐ›{ˆ.àIí¦Žh\e$�ƒ+b85Ô,Œ0Ì/-ÌS¸HŸÍ\HDzœòx<JÆð+!ð^˜¨W 0;rk”ðwÚí®t[½`DÖsÇ-¶šW8·“q?7mÒp{mÇzï­õ½&îñìíµK)®��ÐÇpŒêGPTŒUúò»au™mw,ö2YC¯HËl‘¹f7l£¸ƒÉÎŒ¨#=ëÕ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(“©ÿ�ëE©ÿ�ëE0‡JZhéKšÐ�sIšLÑ@u=B]4Ep`2Y‚EæKÄ;>Þê9Ïq×±«©"KÉ«£ÊÊr=ªZ�”š€ŽŸË´9óÑxiGeÏe<ç¹éëWR4TE ŠUQ€   ½~[³omce:ÛÍ+[ ‚¥Œ#Ê‘÷çäãž3šåÚ Í!¯/àñÝKb’\5£‹†WT…IA¾vĈ۰H,9ÇË]6¸ÍúMו4‘[Þ—ɉ¤eS ¨ÕžYG½r«eci¤ëÐYÛês\^@öö~e…À+…P“UåÏ \“ŠLhô,×3©_øŠß_³°·ŸKò¯<Ó’ÚBȃ‰O=±]-eÞé³\ëúUú4b+E˜H�Çz€1ǵ1WÞ$Õìî5—ó4¿#KÙ˜¤GW›1+�­»’HÕ³§ëÞj:´$v‚#Á óƆç×Ó§‡m×_Ôõ;Ë[9žâhÞÞFŒ3Æ5SÉr àÔwš^­©}u¤Ëg¶þ4YEÎàceC.ÑópG:Ð}ÇŠ58¼5§êûô¸ÌöË/‘)}óÈF|¸ÀÕN+K�0è­¾Oö«\¼›à &qÏO¾BãØÐš·ŠF‰¢˜^ê9õ˜b‹Í&)¼ã;Š€«œ’GjÙ¹×´»Kõ±žíRà•v± [î†`0¤öɬOÃz´ÐjÖVRÙMFà\—˜¸‘åÊð#äàöÏCKyá)fÖnç;‹KÉRYRK¹â(@PFÔ;_îäg÷Å7Ó[Ó¤·‚u¸ÊOpm£ù&PH+Œdr§¯¦zUõø`šö{Û‚¶ßj6Ö±¬eÙŠ/Î@PXüÛ‡¶Ú¥.‰sa®]êë¶kV[¸-#¤7 �[Œrç.ióhG@Ó­"ŠÚ[ˆùY^&YXe�2AÜ[ëš@\ÕüQ§iÖ"Ü©¸{fžòÙ²0v–|ªOsŠ"ñE„62j7 ÷ñÌácb«¼u$g<“YmáÝrËK™o¬’Úê[�ÊCª²î]£�wt8隇Sð¾·{¥ÿg¥Õ«AöíÕ^ic‘W v¨Ã‚qËtÇJnßjwÖ¾&Òì•-�•瘎ã eBÜv§­K¤ÞÍ=Æ¥grÁ¦³¹* n�€tüƒmÿ€Ö~¥§ësëzeݬZ{Ac¸�6wV}É´ð��¯>ÕoFŠFÔ5{÷VU¹¹ °ÁÛ„ÏâÁˆöÅlæ—4™¤Í 4RQ@ïï¡Ó¬¤º›;pª2ÌO@îI êj¶—©É}æÁumöKèó`ß¿ò¬ óϨ#µWñ�y~¶�bûf·”ȤÎ#àŒüÑH çÐcÖªišV°šÌwÚœÞg—F¤]#pppBÛÇ‘ÇvãÒ�Î’ŒÒQ@mA'Þo÷¿ ©ê >ó½ýyޱábÆ}_RMulì.%’i–6“; '�:ðjÄ?üEÌ—Pø™£žU ò)pÌàŸa]åí¤7öSZ\.èfBŽ3ŒƒYð�N(ñ´à:?þ"²tÕÎøã&ãfÒùøG@›Ãš3YOp·4Í)‘AÎ=~”ϪÒ?ì)oüÍFù?ƾCG,Lù#&¯ÙØüÛ3Ããe‹¨éÂN7è�ŽZmÞq¶I%1î‘¶d`— 鞌@æ”iHU–{›‰÷¼*0Î>P8Ï\×Qÿ¶³ÿ>ù?Æ�øEµŸùóÿÈ©þ5Íì±ßÉ/¹ÿ‘Çìs[ÙËÿärñèöм&6”È$˜@À,HÏ©ã“^•àý*ÎÛI³»Š2%X ºå‰ ‘ŽíÉçè=+�ÿ„[YÿŸ?üŠŸã]®ƒk5–‹oop›%MÛ— ã,Oo­zÙ41+ÝdÒ·Tû£ÝÈ)â㊓¯%Ê÷MuD—ÚU½ýÕ�ÄÛÄ–¯½6œg¡ÁöÈSõQR_XE¨,bàA:N»N>e9ö«TWÒŸ^G$Lc2ÄŽcmèYAÚÝ2='ŸzÊм9i¢AÄpKvd™Í×’Èyöç“�»{VÍPiZpº7BÂ×í%ƒ™¼•ÞXt9ÆsÍO¼6Ñ”‚âBÌåcP ³“ÇrI'ÜÔ”PEPEPEPEPEPEP:,ˆÈêX`©zVuŸ‡tM:à\Xèú}¬à$‚Ù€=F@ÍiQ@[EÒžÊK6Ó,šÖFÞð£6s’¸Á9ïK§éf’$v�if$Æÿ³À±îÇLí8ÉüêíHiV©{Ìiåy]±F¡i,ä÷¸<ÿ´ÝsS5•£Þ-ã[Bn‘v¬Æ1½G n¸©è  ²iÖ�q%È‚$»xÌiH×ÍÙ±š�´*]2×N¹Óí®­mUV(î"YíAÁqÞ´h  äÐ4hìÍši j_Ì0-²ÝÓvÜc<}ªúÇÄ"TQBÀ˜§Q@KÓÖɬ–ÂÔZ6K@!]‡ê¸ÅH,­V(bЈà!¢QÄdp ŽÝOOZžŠ­Ÿekq,öövðÍ/úÉ#‰UŸê@ɦE¥iÐ ÄZ}¬bã"}�¨ós×wþ5rŠªúe„³Ã<–6Ï,¤h”´xþéÇ…+iÖ/z·¯gn×j0³˜”È lf¬Ñ@bÝx_M¼ži&í¸“Ì¸ŒLÁg8ç•p¿w“Ç5µEbÃá]2Õ¦[aq´ÊUí"�’{ªòŸ÷qÖ«Kà? JŽƒMòVE+ ·žH|ÑþÞÆÿàY®ŽŠÇ“ÃVRYÇgçê l¬Y�_JL™Ç Å‹ÇLâ…ð¾� Ý­Õ¥šÙÍm…Fµ>VåÀÛ~òûÖŃyá6ýÝ®fÔÜ4‚]ŸÚwÜPø �Æ*Qá«EµšÝo5]“mÞ[Q™Ûô˜•ÏCŒf¶h  ™|1£K¥Ç§–Ú&ß�(Ñ·÷•‡Ìß9§>�k,V±Ë5Ûýš7Œ9�ƒ°a‚YÇÍœ ƒZ”P>Ó-õKèÞüÍjìñ‰o¦™rQ�ådfôÁ­Ú( Š( Š( «ÝXYÞùk´‚ãËmÉæÆiõèjÅZ}>Êêx§¸³·šhŽc’H•™±#"’çM°¼Žx§IöùË,JÂM¿wp#œvÏJµET°Òôý*7�N°µ³G;™máXÃR Ó¿³ì�ªZýŽßìñ°d‹Ê]ŠAÈ cƒÏÖ¬Ñ@ д‹[Ƽ·Ò¬aºbY§ŽÝÉ=I`3š¿EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÉ¿ÔÿÀ‡õ¢‰¿ÔÿÀ‡õ¢€0àQš@xf´3ŠnhÍ;4בcBîÁTrK^/f!¶Ó 2húL¢ÛL’o�KÎŒPÏ!”ïö„v  ´VHñ.ŽÚóhƒQ¶ûxPÞOœ»³ÏËŒçvqŽœÔš>½§ë¶×ØKæGÏ œs¹{ãÐŒê  *+›ŸÇz ¬=ÃêBƒ/$šUÒª�RL|V·öÖš,-¯¤½†k•V…ço+~y6yéÖ€/Q@9*!sºkQ4fáPHbÜ7$€ØëŒ‚3ìhZ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ªÖÚ…•ãÊ–·–ó¼'l‹¡ŠCƒÇã@hª°êVò\C{m,$‘%VT#¨$ T–·v×ÖëqiqÄ-÷d‰Ã©úÅMEVMBÎ['¼Šêm�1icpÊ6çw#Ó?JDÔ¬džÜ"y£óc…œ }vžqøPª*»_Ù­êÙ5Üí—rÀdÈõ œâ£ŸU°µ–xî.â„ÁÉ)•¶ª+ K9*ÝûPÊ*¬ÚžŸof—“ß[EløÛ3ʪ�ž˜bpjÀ‘!(u1‘¸8”ê*¬z�„¶M{õ³Ú¦wN²©EÇ\¶qSAq Ô =¼ÑÍ Œ¬‘°eaìGZ’ŠÏ·×´{»ö°¶Õ¬f¼BÁ­ã¸F�Ô¡ekÝjõ¢Ço㨠‹ˆÒûj¯  Ò³4ízH¦)¨µZK&ù�Y[ûê{7ó©ôûÔ¼ñí½Äêå¾¹ë‚Üf»§ –—?ò¿CŠ�âãüËÔönÕåÞ²¾Ö<kqog.Ø4Û8 WvI’mÝ�Œ’9íÍz�svÿü%mm áý=Äj4°+±Ç©#$ûšøÃìLÍÚ÷Zþß_>ïH¬’è²##¨ea‚¤déY¶^ÐôÛ‘qc¢éÖ³€@– TFõ4ÏУñôÇìÙivò܉JÈæ"{dHïÓÚ©(ÔŽ�©]é–?ñ:¾WhmŠ,¶Öû a™@‘‚g¯ÿٮɴM%줲m.É­$mï·BŽÙÎJãç½;OÑô½ H4Ý6ÎÈI�3ìÐ,{ñœghÆOç@‡Yeð@Ñ"°–Î;½VâÍ"—n<£4�"�¬zF®¿QÜ`™oü š°µÿá!µò¿ç¦7C·öù[ºq�ÞõÛ.“h—Ö÷Q ‹ÈíŠ5 …¤ ³�ÞàóþÓg9©ÚÆÑïRñ­`7H»VsÞ«è¨Àè×w6z„r]&�4—ZÝÄDѵ+n“l›óÐF«Æß¹ƒžÕ±Ö—�{â^8Þ9oY턈¾QåF#ËHŸÞèäÓm$¸’è[Ä—o�í)ù {63UÛÃúLÚ]®›s§ZÝZZ¢¤1ܲÚ6ƒ‚:ã½sº}�³ðäVÆãI¶Õ§–âêîÔJ�“{¢€Ãî‡àã¿J§Fß�B…mãAÛ›!¢Y¶ÊÀ€>B¡Èà|¤W\žÑc²6QèúzÚó l�7tÝ·ÏŸjÐX£X„JŠ#h@8Ó”ÀßÙ%gËb¶Ð¾Ÿ0Iœ,N¥ÉF ¾WcÑ85kÃR]õd¾´±‚McäŽ)± ‡�±üa‰ •n95Õ®•§-‹X­…¨´l–€B¾YϪã ²´X¡ˆZÂ#€†…c‘À*;u==hˆ´š-öÁ,55Õ,/ÍÜïih×1te#qÛÉ?xc*‡†Õì§Óã’öÊm _±^[�ÞL`¡->xb¹L7�ü ×¢A§XÚÜKqogo Òÿ¬’8•Yþ¤ šdZN›¸éö‘‹œ‰öB£ÍÏ]Ø7ã@‡ˆÖ;#¨x‚Ó\†MBÖÂ${fŽ'YÊnu`°ßæq´Ž£­fßHÇX¼¿ÄÌëV‚â?ék*ˆÔ?Ý'gË×nòÍŠô)4Í>YážKgšR4*Zžú}”—©zövívƒjÎbRê=c"•¬,Þ+ˆšÒË� c’%†>c€>‚€9Ï2éº&•«Op×K¼‚Y.Y÷NÇhîÈIÀŠå4È%ƒUÓ4yá*úÍ;µ*ç8p²I(ü8Gü ½9ì,ä°6/iY”ÙövŒöúmÆ1íN6vÍsË[Âg‰JG)A¹ã  =¨жñ§#Ù_µìmö­Q¬J®cA#&s÷·¨]çXØÛ‰-•Æ9$“êMs> 5ï+Þýµ–ê3áAl@�Bñ‘ÓŒt®º«ÚØYØ©[;H-Õ±‘ aÀÀéè*ÅQEÌxõ-ÛÂò´Étšp2§ÎL‘žœWOTµ KÕü¿í-6Î÷ÊÏ—ö˜M™Æq¸gò wÆ#N½…ôˆÙµmV!— º(AæVn .N=X€+¦k‹7I£ib”À¡¥MÁŠŒd;d £/…<;>Ï;@Ò¤òÐ"o³ŒíQÐ Žô­ì­b#¶…ŠÂÆåP  OD­á¸5&@·§út¤>ÿ*8쫵G°®CÁlµºÐï5‘Y\G-¶šW8·“q?7mÒ(lÛqߟN†­àŽ#H¡�B$h¡UT èíPÿgX›XíM�¿Ùã`É”»�È cƒÏÖ€<ÂÔ]C¥Û^M=„–Pëò2Z¤En™�ۨěˆ<œà(Ê‚3Þ½b³íôÒõ¯m´›nœ–iã·ErORX äÖ…QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV½ÿR?Þ¢‹ßõ#ýê(–�Fi ð)sZ‹š3MÍ f“4™¤Í;4f›š3@¢›š(Ù£4ÜÒæ€4f“4f�‹š\ÓsE;4f›Fi u.i´f�Í”P1sKšnisHͤ͆.hÍ&hÍ¢“4R´”f’€;:j}çÿ{ú uA'Þo÷¿ ¦"ž½¢Á¯éocpetê¬:ãáTÃÿA‰?ïÀÿâ«°Ôµ´Ë6¸”€u$Öü&‘Ï“ßÏþµzX:¸ØÂÔŸ/ÔóqqÁ9þÿŸèfÿ©‡þƒß�ÿÅV†‹ðæ×IÕ!¾’þ[ƒ nDòÂ�݉äÔÐøÊÙçD–Ý¢F8/»;}ñŠé•Ô2�TŒ‚Uâ1¸ø.J²²~Ÿ¡8|.£æ¤¯o_Ô·EU¢¼£Ô-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVŠ[ßõ#ýê*)ÿÔÿÀ‡õ¢€9px¹¦ƒÀ£5¡˜¹£4™£4¹£4ÜÑ@ͦњvh¦æ—4´RfŒÐæŒÒfŒÐ1sFi(¤1ÔRRÐÑIE!Ž¢“4Rh¤¢�‹š3Iš\ÒsE&hÍ ÑIš)¹¤£4”íj >ó½ýOPI÷›ýïè)�ÍøÍ¶èjé²ÿ#\“�¸k¸ñÛmðúŸún¿È×éÐ ¹‰Zåз<€ª@Çâké2´¾®¯Õ³æ³DÞ!ù$ “æåN>•Òøg^{{˜´éKI ­¶?T'úW5-�Õ”öËy‘,ø+¸uýx>ÝjíºÇoãˆíââ4½Ú«èt®œE:ui¸½toî90Î¥ªKMRûÏQ¬/øM¼-ÿC—ÿ�Iþ5»Ú¼ËÖWº¿ƒín-í%Û›i*ãcLÉ ‘öîÀÆ€N9íÍ|‘ö¡iú¥†­n×uäp«l2A u €q‘ß~t–z­�ýÝå­­ÊK5›ˆçEþ#8ÿ>ãµrú5µæ³ý¼¾}Þ’W&x×a˜¯ÙáùC©`¹àåI8î nˆ—Ú´VS½„úmÚÁg4*ÈÌ19Fï©fbCs’NAæ€7lj4†×[F…·Û†ò¼ÕÎyùqœîÀÎ1Óš~‘®Øk–óÏc/™4/Ç;—¾=Á ŠóÝm¦“ÇwVÑëDý¦ÊT¸KKgßÁ°$.rçv>Pì3–oøn+é!·Ôŵ�•Ôštikd'Ú'Uç�( ¸ch%CryÀÓŸÇ´4ï¨E ³É¥Üª¨õ$ÇÅjléÂÆÞöKØa·¹Uhžvò·g§ ƒžzW¬'ˆué6WÚf‘,b îØßÊavFˆÝrWw‚9'Œ ÖÖoÛLFÕtý=õ«•{kKx¤óîí¹•H^cŒ;ÐRFGJ«›n'š;‡BÁqonó6Ý@N=ñT¬ã›DðÍ�´M©Émpâ@Òm˰½k/ÆòE?ƒÕ/bXâh­ÌñƱ6ðÃ{‘0 àðÀФ^%Ó¥I‹¸Ò¬åƒyÁ8_1Fã…'Ò¯5ô#L:€Ü`ùüJíÝÓ×ãÚ4¶²FËg±22Ï!µžT…–(c {òr+CÅKá›ËK¤Óâ»i-ÕÜ¡UÀX�Hƒw1ÛÀþ}Ez­µÂ]ÚCq!%E‘CuÁ¨?µ´ÿ(J×°$fcgp ÈiQž§ww¯9ð'ü#–½­”v_yFk+¸•YÛreâ.9Þ§wøHô5£y©øaáù[ËyÓäY Ùib,Ù<‚rs@Ú]A%ܶ« 3Īî�¶vŸ¡Ú#RI"EI#ª"ÌÌpI¬+©D~7Ó]“N¹3ÛUá*IöÜß™¬}W–ýõ{x5x,ì­´Õ¸B?Ú„Šüî?Áò�òó“Ö€;XäI¢IcuxÜVS�AèA§W±|¶g‹S‹M‹NÑíîSÌ�[푳»wð  |¸9=zUë}jÿUÔ9o“FH¬mîÚ'D-!�À—þÆ8ÁÏzì(®BßZÔÆ­£5ê›4•ä[�,!Ù³Œewn$s´Ô1®¾€ (¢€ (¢€ ¯ogxò¥µÜ¼Gl‹�ŠCƒÅNÁYH` ‘‚LWœêÂûMnûAXâ´²Òg±€Ûa|ö8-°ª�0©lt úFÆâÞKˆomä‚2CÈ’©U#¨$ Sí®í¯`Yí."žû²Dá”ýâ¹0Úzõì§ìÙ1i–òNH%+#˜Éí�Ç~žÕMF¢t}FïM±¸ÿ‰Íèv†Ø¢Ëmo±P¶”`™ëÁjí’þÎ[7¼Šê-�1icpÊ6çw#Ó?Jjj6RMê<Ñù‘ÂÎŒ¾»O?¥p~e—ÁCEŽÆ[HîµIìÒ)vãÊó¤imcÒ5uúŽã“-÷”Uoö·ü$ÞWüôÆèvã¾ß/w¶7{ÐroìÖõlšît˸@dÈõÛ×ɵKigŽâê(L¬’™j¢±!IcÇ;[¿jâ4{«›Køä¹M:gºÖ® ’#ûJ¶çÚû³Ð ^6ýÜö­xî´ÈtûßjÈ�·ŒöáÐ;|£ÊŒF;–�?9 †mNÂÞÑ.æ¾¶ŽÙñ¶g•B6za‰Á«Dh„¡ÔÆFàÀñ�\×af-<;±¸Ò­µYäžæºQ*@÷º( >èp? ©Fß�B…`D͹² K6ÙXÈT9”ŠìãÔ¬e³kÈïmžÕ3ºu•J uËg4ÃuOo,rÄã+$lX{Ö¸[ë4¼×5_°Kd¶Ð½„Á%p°K:—% à•ò»‹Á«^’äͨJ÷Ö–PÉ«ü‘ÂCÅ6!Pñ¡lbHå[Ž´ÒÁ®iWÍcoªØÍv¤†·Žá@G\¨9ã½Oogw$±Û]Á4�¶ÙV9>ŒCõ®2ÒX´Û°Ô—T±¾7S¼q¤e£\<¥Ñ”d�Ço$ýáŒtªW³žÂ9/láVÐåûݹ äÆ Óç†+òa¸‡àf€;«íwHÓ'X5 VÆÒf]ËÅÂFÄg‘ÆAüªÃ_Ù¥êY½Ü të¹`2ì=Bõ"¸ÿˆì�þ¿i­Ã%ýµŒHÖÅ#u˜®çPF ûøÚGQÖ³od'W»¾"fu›Qq ô¥•Dj åë·qœP¥TIuo-̶ÑÏÏS,Jà²né¸uÁÆjZó­N{­'ÆΩdŒòÜ´ý£‘æÏ&òÞO1Ú4Ù*�ιܣ’0r;`Õšó™4h´m>Ûç‰u�FC3ª,Ä`œ�r£‘W^ÔÇ�îü@5ˆšíìá,Ö$Å»Œâ;~éÝž}(¼¢¹+›­V-f "mqm·Z½Û]˜#Ø0ZƒÀU'«a‡=ë=|M©Ía¦j·7KmdÖÉ%ȵDv X�ì�óyL#oÍÍwµY5 )/ä°K¸ò4ð uSܯP9�rž!Ô£}Fõ/¢O±j)fša�I™K É?{s%qÆ1�y¬;û±eâ ¶.Qá"¶VýÜX4l”í•öù©È¨IqRÅ“F’LJÄŒÀ BŽüxì*3¨Y,RJnàÇ …ØÈ0¯�6“ž$ uÉÏx©—NÑt½VyÚq¦^A,“°²7î�ŽÐÝ�žËi°K©¦éÄUµ‹›}fUÎpà<’�Á£ˆÀ¨Ô¨®ÛÄZ›½�ó^FßiÔÚÅ´±æ42g?{p ¼çŒg¡¨àÖõ“¡E6¦‹ö½EìUš l‚wMçÕ°»FxÉrÛÇq³M sFòBBÊŠÀ”$d;pAüjZäü$k¾&W½ûk-Ô Ï…±u ÆGN1ÒºÊ(¢Š*›Ëk4uq X(i\($ô÷©«šñÒ@Þ•¥XˤИË�•>jd�N(v{û;Yâ‚âîe˜â8ä�+9ôž //­4ëcq}u¬€ež@Š éÉ⹯ >ò'Ò`KfÕuHÄbL ÑD2³v “�V éâÑ–X̱J`PÒ¦àÅF2 ²2ÃVÓuTwÓµ [ÅŒ€æÞe�)>»Iŧþ›)¿Ê�¢®Õ¹/}®ÚçE»ÖMgó½ýOPI÷›ýïè(‘ø„Û|6§þžù5q–:ìZD°,—ñÎÒBÎÈÁU±Ý¸ãó¯M×4h5Ý1ì§v@Heuê¬;×!ÿ º/ú Iÿ~ø×½—â°±Ãû:ÎÍ;ìÿCÄÇaq2¯í(«énŸ©ÎiÚô‘LSPj´–Mò) ²·÷ÔöoçRÙ^¥çŽ ¸�ý\·»×=p[#5½ÿ º/ú Iÿ~øÕíáõ¶—©Ãz÷ÒNa;‘6»ɮʘü Œ¥ jÓ[3’žÍ5¢iîŽÊ¹ËxRÚÞ8W@°pŠ4�+±Ç©#$û×GE|©ôÅ +EÓ´8f‡MµŽÚ¥34qŒ.â¡x 8=½�½¤×SAÙ.¤Ìw¹‚ªçžŸ*¨ãÒ¬Q@&Óm®/㼕 K[Žx(åK?à U4ÏiÚLâkQrαy1™î¥›ËL‚UC±Ú>Uéè=+ZŠÌ�E�uëIwu4«ÇrÙ ±RÁ@Py(½I©oôM+Ut}GL²¼dF¸·Y �A¸Uê(+kk{;t·µ‚( Œa#‰ª�@«jšU¾±l–÷-2¢J²ƒ ­eNG̤øW¨ q<§Û%ÂXÝê6‹<+m¹2ác�æïÆwãðÁæ¶�„Mk ÂÐù<víÛ××fІÚÚ;[X-Ó%!@Š[“€1Y«á}íc¶¼Óíoc…ÜÂ. I<¥fݵr8€=€ô­Š(…¾‘imtÓEª}�m£…TŠ0IÚ Ï?AéO“IÓfX]>ÑÄ ¶ЩòÆ1…ã��J¹EU—LÓç ¬m¤øòCħÊÇM¹~·:}•ëÄ÷Vvó´Gtm,AŠQ‘ÅY¢€+ >ÉUYÛ…ILÊK…�’KŽ8l“Ï^MY¢Š(¢Š(¢ŠGE‘C+ # �Jγð\ ‹Oµœ�["0¨È­*(‹hºSÙIfÚe“ZÈÛÞ”fÎrW'=étý#LÒDƒNÓ­,Ęßöx=Øé� g?�]¢€) *Õ/`¹�<¯ K¶(ÀT-!œ€>÷Ÿö›®jf²´{żkhMÒ.Õ˜Æ7¨ô ×=VM:Ñî$¹D—o�í)ù {63P6ƒ¥K¦Zé×:}µÕ­ªªÅÄK ]£h8#®;Ö�œš�™³M"ÁmKù†¶@›ºnÛŒg�ϵ_XãX„JŠ#h@8Óê(¢ézzÙ5’ØZ‹FÉh+°ýW©•ªÅ BÚ4J#ŒŽQÛ©éëSÑ@ Óì­n%žÞÎÞ¥ÿY$q*³ýH4È´­:8‹OµŒ\dO²nzîãŸÆ®Q@_L°–xg’ÆÙå€�–�Ý8ãð¥m:ÅïVõìíÚíFs™ô ŒÕš(¨Ò£–IR$Y% ÈÊ  `d÷ãŠ’Š®º}’::Ú[«G#ÊŒ#«¶w0ã†99=NO­DÚ>˜ípͧZr6ÎL ûÑèÜ|ß�]¢€+ÝØY߯±ÞZArŠÛ•fŒ8ÔÞ’m:ÆæxgžÊÞYaÿU#ĬÉþé#�¬Ñ@ÞÂÊKÔ½{HéÕœÆ ¨ô ŒŠÂÍ¢ž&´€ÇpŦCĤ€ aÜàÏ «Pw±³’ÄØ½¤ hSg�уßM½1íN6–ÍqÁ·ˆÏ”ŽBƒr)Æ@=@8•MEW[ 5½kÕ´€]°ÚÓˆÆò= c4 1hÖ‚Òlå‹Cå��¸’r½9$“îjÅ^ÖÆÒÅJÚZÁn­Œˆ£Oj±EQEU-CGÓ5o/ûGN´¼òóåý¦“fqœnÀüªí“/…¼=>Ï;AÒäØ�}œgjŽ€dp=ªúYÚÄGm PŽÜ `êã=ÈaŠÞá†4Š(Ô""(UU:*ìû#j–¿c·û•ÔøWÄ/mu›1i •¶Çê„ÿJx¼µF<ô–Ý‚Í%)òVë³;ú(¬øN<)ÿC•ÿ�iþ5âžé¿ETÓµ]?W·k�6öÞîb†H$¡°2;à�Λg«Xjw–¶—),ön#¸E?qˆÎ?Ï¡¨í’”ê*¬z�„¶M{õ³Ú¦wN²©EÇ\¶qSAq Ô =¼ÑÍ Œ¬‘°eaìGZ’ŠÏ·×´{»ö°¶Õ¬f¼BÁ­ã¸F�Ô¡ek“¢iº3æZGk Ò™š8ÆqP¹ áG¬[XÛZOu4ì’êQ,Çq;œ*¦yéòªŽ=(ËõÆšOÝ[E­“ö›)Râ;;Y7ǰE…f…Î\ïÇʆrÀއÃPßÉ ¾¦-lìn¥Ó£K[>ÁpªÏ P@°ÆÐJ†äœàusi–ׄw²¡ic‚KqÏ$*XÿZ©¥økMÑî{QrÒ$^LfâîY¼´È%P;£å^ŸÝ”ÊkIâ-KÅE•ö—£Ë‚{…µ:„¦dh€gýÏ%wp#’x V—‹Dòø2I5{k(¯xJd2ªþù9VeSœuâ·#Ñ#]xêòÞ]O2ÆñE…|¸UÊ– ƒÉEêMO¨hÚ^¯åÿii¶w¾V|¿´À²lÎ3�Àã8•Qñ&¸ºV‡}qk4 w "EF`v+6ß1€9Ú9'ýÓ\�Þ£w¢kºåìz’jw0hÐ0™Ñ@�3IËÀÚ îõÇç]üm�²‚ÊÚ%BǨŒü¼»Éã§4–ºV�b´°µ·Êí>T*™Î82Mrž"Ôôoíhþ-P[ØÇt—-� ;•;ö`oìp­“ÐÕ½RÿPÑôuºƒ[þÔ¹Žæ2¶â(Ã\†ãÊå”öÛÉ#5ÓZéöV0´6–vöñ9%’•‰êH£·ÑôËB†ÛN´„ÆæDòàUÚÄ`°Àà�HϽWðÝÔ×Þ³¼žín¥¸O5�T*©c�€`p¿wžxçšÕ¨ ¶‚Õ-áŽgga‰É'Éäš–€ (¢€ (¢€ (¢€ (¢€ (¢€‚²•` ‘‚B+͵q¡i®_è V–:Dö0l/Úà¶À:ªÀ>¥±ÓŸItY‘Ô2°ÁR2ô¬Û/hzmȸ±ÑtëYÀ Kª#zŒ�šçƒhQø‚úcö?숴»yn Ä¥ds=²$wéíT”jGFÔ®ôË Ÿø�_+´6Å[k}Š…°Ì HÁ3ׂÿì×dÚ&’öRY6—dÖ’6÷€Û¡Glç%q‚sÞ�§èú^�$n›gd$Ç™öh=øÎ3´ ã'ó ì²ø h‘XKgÞ«qf‘K·QšF‘FÖ=#W_¨î0L·þPMX ¿Úÿð�Úù_óÓ¡ÛŽû|­Ý8Æïzí—I´Kë{¨�Eä vÅ…BÒYÈïpyÿi³œÔích÷©xÖ°¤]«9ŒoUô Ô àtk»›=B9.“NšK­nâ "h�Ú•·I¶Mùè#UãoÜÁÏjØŽëKƒN½ñ¯o·¬öÂDß(ò£Žå€$Ïï tri¶’\It-âK·ŒÇö”�|Ð=›ªíáý&m.×M¹Ó­n­-QRîaYíAÁqÞ€9Ý>ÈYør+cq¤ÛjÓËquwj%HɽÑ@a÷C€pqߥS�£oƒÈ!B¶ñ ŽmÍ�Ñ,Ûe`@!Päp>R+®Oh±Ù(ô}=m ù†¶@›ºnÛŒg�ϵh,Q¬B%E�´ é�Jàoì’÷]Õ¿³å±[h_O˜$Î §Rä£ _+±èœµá©.ŒúŒ²_ZXÁ&±òG Ø…CÆŒØþ0Ä�Ê·šê×JӖŬVÂÔZ6K@!_,çÕqŠ�YZ,PÄ-aÀCB‚1ˆÈພž´ÄZM�{`–šê–æîwŽ4Œ´k‡˜º2Œ‘¸í䟼1Ž•CÃjöSéñÉ{e¶…/د-Èo&0P–Ÿ<1\¦€H~kÑ Ó¬mn%¸·³·†iÖIJ¬ÿRM2-'M€\tûHÅÎDû!Qæç®ì›ñ CÄk‘ÔÊKÔ½{;v»Aµg1)u�±‘JÖoÄMiŽå‹N†1‰IÃ1ÀŸA@ç‹tÝJÕ§¸k�¥ÞA,— ,�û§c´÷d$àÅršdÁªéš<ð•}fæßZ•sœ8Y$”~#þ^œörX´�¬Êlû;F {}6ãö§;f¹Šå­á3Ä¥#” ÜŠq�PÔÅ[x�S‘ì¯Úö6ûV¨Ö ¥×1 ‘“9ûÛÔ.óž1œ†£·×5³ Å¨Mª"ý³R{f�[ �Óyõl.Ñž2WƒÎ{eÓì’ù¯–ÎÜ]°ÚÓˆ—Ì#ж3ŠQ§Ù 7³� W,Z,lmÄ–Êã’Iõ&€9Ÿ÷Šï~ÚËu ™ð ¶ N¡xÈéÆ:W]Uíl,ìT­�¤êØÈ†0€à`tôb€ (¢€ æ§þ›¯ò5Ä:D4.A"V¹t-Ï *�1øšúL­/««õlù¬Ñ7ˆ~I$ù¹S�¥t¾×žÞæ-:RÒC+m�Õ þ•ÍKcue=²ÞG$K> îA?^·Z»n±Ûøâ;x¸�/vªúÝ+§N�Zn/]ûŽL3©Fª’ÓT¾óÔk þo ÐÅ¥ÿàR�nö¯2ðå•î¯àû[‹{IvÁ¦ÚA ¸ØÓ2H$}»°1€ €N{s_$}�èZ~©a«[µÆ�yÜ*Û �HC`dwÁ�%ž«cwykkr’Ífâ9Ñ�ˆÎ?ϸí\¾�my¬ÿo/Ÿw¤‡ÕÉž5Øf+öx~PêX.x9RN;ƒF›¢%Åö­”ïa>›v°YÍ ƒ²3 NQ�ûêY˜�Üä“�y  ñâM!µÖц¡mö𡼯5sž~\g;°3Œt柤k¶å¼óØËæGÍ ñÎåï�B0G¨"¼÷[i¤ñÝÕ´zÑ?i²•.ÒÙ÷ǰG…, œ¹Ý�”; å�þŠúHmõ1mgeu&�ZÙ ö‰Õ@ùä nÚ PÜžp4çñƇmÍ;êDƒ,òiw*ª=I1ñ[–—PßYÃunÅ¡™ˆÅJ’¤dGã\6°ž!Ô|O¤Ù_išD±ˆ'¸[c)…Ù ÿuÉ]Üäž0+¥»Õ®ôÝ æâúA©Go4ÑZ[Î_ÍØ¹ÂåTžÙÀã4ª×-Ê[4щÝK¤e†æQŒ�;�‘ùŠ–¼æMBî×]´ÔŽ¢šÅÂhwwIhªýÓ]¼í$`g'ަ¯/ˆµ; ®/#Ö¼ý*ký‘F«åº*£oð¶ârxêh¸¢¸ùu ëo M©/ˆ¡º¸ò£¸�ö“Ÿõ`N×8QÕ�<×ðÅýƧ¤Û©s,³>`ÚÙ°qå2Jã’{ç¶(fŠ( Š( Š( Š( Š( Š( «ÛßÙÞ<©mwïÛ"Å b‡ÐàñS°VR¤`ƒÓç:°†þÓ[¾ÐV8­,´™ì`6Ø_=Ž lª Lê[(¾‡Q±¸·’âÛy Œ�ò$ªUHê ûk»kØ{Kˆ§…¾ì‘8e?B8®L6‡½{)ûöLZe¼“’‰JÈæ2{dqß§µSQ¨�Q»Óln?âsz¡¶(²Û[ìT-†eØ&zð_Ú€;d¿³–Íï"º†Kd ZXÜ2�¹ÝÈôÁÏÒšš�”“Eº„O4~dp³�#/®ÓÏé\‡ÙeðPÑc±–Ò;­R{4Š]¸ò¼éEXô�]~£¸äË}åÕ@Ûý­ÿ ·•ÿ=1º¸ï·ËÝí�ÞôÜ›û5½[&»€]2îò=võÅ2mRÆÚY㸺Šk$¦FÚ¨¬HRXñÎÖïÚ¸�êæÒþ9.SN™îµ«ˆ$ˆÄ~Ò­¹ö¾ìô�¿w=«^;­2>÷IJ#Ç-ã=¸tß(ò£Žå€$ÏÎh¡›S°·´K¹¯­£¶|m™åP�ž˜bpjÀ‘!(u1‘¸0¶Òõ8o^úIÌ'r&À£wby5ÙS�Q”¡-ZkfrSÀã9¢¦´M=ÑÙW9oà/ [[Ç èB†’v8õ$dŸzè试>˜¡¥hºv‡ Ðé¶±ÛC4¦fŽ1…ÜT/ áG§·±·´šêh#Û%Ô‚YŽâw0U\óÓåUzUŠ(¤ÚmµÅüw’¡ic‚KqÏ©`Güj¦™áÍ;IœMj.YÖ/&3=Ô³yi�J¨v;Gʽ=¥kQ@‘è±®¸ui.cxâŽB»!V*X( %©5} …æIž$ic#•”¸=³�ùT”P;}+N´›Î¶Óía—æùâ…U¾lnäøõÀ©-¬,ìšVµ´‚”î�ÅRçÔàrjÅJ=L‰‹G§Z#¤¬ qѺu½jÄVð@ò¼0ÇLÛädP ¶ÉÇS€}ªZ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ddu ¬0TŒ‚=+:Ïú&�p.,t}>ÖpAlˆÀ£ f´¨  -¢éOe%›i–Mk#ox Q›9É\`œ÷¥Óô�3I ;N´³cÙàX÷c¦v�œdþuvФ4«T½‚æ4ò¼�.Ø£P´„rûÜÚn¹©šÊÑïñ­¡7H»VcÞ£Ð7\TôPY4ëG¸’äA]¼f?´¤kæ�ìØÍ@Ú•.™k§\éö×V¶ª«w,�v� àޏïZ4Prh4vfÍ4‹µ/æÙné»n1ž>Õ}c�b*(Œ ¡àLS¨  ‹¥éëdÖKaj-% ®Ãõ\b¤V«1 hDpÑ(Œb28Gn§§­OEVƒO²µ¸–{{;xf—ýd‘ĪÏõ dÓ"Ò´èâ->Ö1q‘>ÈTy¹ë»Ž¹EU}2ÂYážKg–R4JZ<tã�•´ë½[׳·kµYÌJdÐ63Vh £H"ŽY%H‘d”ƒ#*€\��“ߎ*J(ºéöHèëin­�*0Œ®ÙÜÃŽääõ9>µhúcµÃ6�hMÈÛ90/ïG£qó~5vНwagÇyiÊ+nUš0àPzI´ë™áž{+ye‡ýT�³'û¤Ž? ³EW{ )/Rõí k¤Vs.£Ð62(k 6ŠxšÒÙ c’%‡s€>‚¬Q@ÞÆÎKbö�5¡MžCF {}6ôǵ8Ú[5ÄWÞ#óÿ½ý!Ž¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(µïú‘þ÷ô4Q{þ¤½ý €à úS©«÷GÒ–µ3ŠJZQE-”´QE Z))hh¤¥¤KIK@–’ŠZZJ)´RRæ€ Òæ’ŠZ)(¤æ“4f’€“4Rf˜ IE%=šŸyÿÞþ‚�MO¼ÿïARPê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€+^ÿ©ïCE¿êGûßÐÑH?^ƒéN¦�º>”µ©˜´QE-Q@Š( ¢’–€ (¢�‹E%- ŠJZZ))h¥¤¢€ŠJ) Z)( ¢’Š\ÒQšJZJ)(i(¤ G¢ÓSï?ûßÐS©©÷Ÿýïè*JEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPkßõ#ýïèh¢÷ýHÿ{üh ?t})iÝJZ³1h¤´À-%-QE (¢€ŠQE Z))if–’ŠZ\ÓsK@ E%´™¢Š@QI@ IE&h´”RP!i(¤Íz=5>óÿ½ý:šŸyÿÞþ‚¤¡ÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV½ÿR?Þ¢‹ßõ#ýê)çë÷GÒ–‘~èúRÖ¦aEPÑIK@ E%-QE ZJZ(¢Š(¢Š\ÑIE ŠJ(´f“4¹ Í%£4QIE 3IEf’Š(¤¢€="šŸyÿÞþ‚�MO¼ÿïARPê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€+^ÿ©ïQEïú‘þõ†yúýÑô¥¤_º)kS ¢Š( QE-Q@ E%-QE 3E´RQ@ E&hÍ ŠJ(hÍ% 3Fh£4€(¤Í¹¤¢’€’Š3@%P¤ÓSï?ûßÐS©©÷Ÿýïè*JEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPkßõ#ýê)o?Ô�÷¨¤3ÏGÝJZA÷GÒ–µ2ŠQERÒQ@ E&ihÍ-%´RfŒÐÑIEŠJ(hÍ%€3E™ bÑIE.hÍ%€(¤ÍQE%QI@—MO¼ÿïAN¦§Þ÷¿ ©(uQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ï?Ô�÷¨¢óýHÿzŠC<õz¥-4}ÑN­L‚–’ŠZ(¢€ (¢€ (¢€ ZJ(h¤£4´RQ@Å¢’Š3Ef�”Pæ’“4P1h¤¢€’Š)RQE™¢ŠôÊj}çÿ{ú u5>óÿ½ýIC¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯yþ¤½EŸêGûÔRçƒî�¥-Mik%Ü‚8ñÓ$ž€V—öý<ÿãŸýzÒæVfE±ýƒÿO?øçÿ^�ì/úyÿÇ?úô]ÌÇ¢¶?°¿éçÿÿëÑý…ÿO?øçÿ^‹ ³1è­�ì/úyÿÇ?úôaÓÏþ9ÿ×¢è,Ìz+cû þžñÏþ½Ø_ôóÿŽõèº 3ŒÖÇöý<ÿãŸýz?°¿éçÿÿëÑtfFi3[Ø_ôóÿŽõèþÂÿ§Ÿüsÿ¯EÐY˜ôVÇöý<ÿãŸýz?°¿éçÿÿëÑt;34f¶?°¿éçÿÿëÑý…ÿO?øçÿ^‹ ³1è­�ì/úyÿÇ?úô`ÿÓÏþ9ÿ×¥t1¨­ŸìúyÿÇ?úôŸØ?ôóÿ�ÿúô\,Ìz+cûþžòÿ^�ìúyÿÈýz.;ôVÇöý<ÿä?þ½Ø?ôóÿ�ÿúô\,cfŠÙþÁÿ§Ÿü‡ÿ×£ûþžòÿ^‹…ŒjJÚþÀÿ§Ÿü‡ÿפþÀÿ§Ÿü‡ÿ×¥p±�I[_Øôóÿ�ÿúõJûM’È,2q¸ `РSSï?ûßÐS©©÷Ÿýïè) uQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ï?Ô�÷¨¢óýHÿzŠC9M¤ÿEþµµ\‚Oµ.¯£ý‹ì2êj�æ8$�¯¤ùÃ�¹<œúqÒ©îJØéåš("if‘#�ygv©4úó¯êÑx>úÕo¥’êß²G°&nW ÿ6Tà…'$c•æ™<�O¨Aö½D»º™A{­BM“†< BÃ…lHœ ŠC=2’@ ‘Ôg¥-q> †{™5˜dÓcûLšgÊÖ²¼�:îÆÖM£$ã©Á>¸¨ìáÓmµkÛÍ'O¸ÑícÓ_͸y·Ã#ÌL€{ì…õ¡Š9EÔ\ªZ6ó’Aîæ¦GY]20ʲœ‚=ExU½Õ¥öŸ¥-ÚÙÇæ’öÞß~Xº…åˆ\n?75ÚÚ^Meà­*îÏíÖ¶áJ4ˆ-vd>ÐÌ$'“þÉ#9ö ø\Bf0‰£2¯T 73ÓéRWŸé:5Ö£â[©/5Nˆ ½Ú¥Ä6ÂNw§%€B>SÈ<× PEPEPEPEPEPEPEPEPEPEPTµùMÿþb£—X‚Òæho¿Ñ¶‚ñ»¬«ßiõׯN´Ë¹ä¹ÐäšXØ!üÁw gÐã·jëi›X3Ãç‘ÿ×§Ñ@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@ ÃÿyïŸþ½ï/ýóÿ×§Q@OÈ€QÎ~ïÿ^Š•úQHg ¦ØÁ¨ÙÜÛÜ)(v0*ÅYXd†t Ô³x_íÃ$ÚÖ¨ïÌd¼)Æ3��yëÖ³|®ÛjZdW+"âd‰?uÇì:ÕIY‘¡…¨xrÞ] K8ÐMµ„rÌI;˜‚Ì[““ŽMQ¸ðœ·W󬲡µš+�ón>sI6ÑÓŠŠÎxÕÑH£™Ö|3y©ß˜µI ?e[P+Á'ÌsƒÉÚNÑÐNx«òèi&¢_ ØËj-ç·bpÅX#ð.®G¥kÑ@Gü ×7–––×z„¶Ém€m.¦ËÈ£åm¤…]§ž$�ÈäV…LJõk�=)5 x#$ùò¸–áÛ *d|Ž� lv®žŠæî4 LI Öú«KpÉäÜÍ8Æ=á�]€Wæ´rk¤¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šd�Å6Ï6$}Œw(;Xt#ÐÕ]_þAsÀô!Wk/Zº�mÀÈäp;s@mQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ~”VGˆ5I4ø"[p­3¶pÇ.?ÇVr©»3HÓm]?Yë7Z`»¼·«*ÎvŒF6‘�›jàd†=+Ð4ûÉ.ìbžEPÎ2BŽ(¢ºÌ‹[ϵϵP0Þ}¨óµPæj<ÃíEžaö£yö¢Š7Ÿj<ÃíEy‡Ú�0ûQE 0ûQæj( aæj<ÃíEy‡Ú�0ûQEaö¤óµRy‡Ú�0ûQEaö£Ì>ÔQ@ æj<ÃíEy‡Ú�0ûQE0ûQæj( Mó›ÐQç7 ¢Š‘‡œÞ‚�9½PyÍè(ó›ÐQEsz <æôQ@œÞ‚�9½Pç7 £ÎoAEyÍè(ó›ÐQEsz <æôQ@œÞ‚�9½Pç7 £ÎoAEyÍè(ó›ÐQEsz <æôQ@œÞ‚�9½Pç7 ¥ó›ÐQEsz <æôQ@œÞ‚�9½Pç7 £ÎoAEyÍè(ó›ÐQEsz <æôQ@œÞ‚�9½Pç7 £ÍoAEy­è(ó[ÐQEkz <ÖôQ@šÞ‚�5½Pù­è(óÐQEcz <ÆôQ@˜Þ‚�1½Pæ7 £ÌoAEy�è(󠢊_0ûQæj( Ì>Ôy‡ÚŠ(óµaö¢Š<ÃíG˜}¨¢€0ûQæj( Ì>Ôy‡ÚŠ(óµaö¢ŠO0ú <ÆôQ@˜Þ‚�1½Pæ7 £ÌoAEy�è(óÐQEcz <ÆôQ@ æ· £ÍoAEy­è(ó[ÐQEkz <ÖôQ@šÞ‚�5½Pæ· £ÍoAEy­è(ó[ÐQEkz <ÖôQ@šÞ‚�5½Pæ· £ÍoAEy­è(ó[ÐQEkz <ÖôQ@šÞ‚�5½Pæ· £ÍoAEy­è(ó[ÐQEkz <ÖôQ@šÞ‚�5½Pæ· £ÍoAEy­è(ó[ÐQE/šÞ‚�1½Pæ7 £ÌoAEy�è(óÐQEcz <ÆôQ@˜Þ‚�1½Pæ7 £ÌoAEy�è(󠢊_0ûQæj( Ì>Ôy‡ÚŠ(óµaö¢Š<ÃíG˜}¨¢€0ûQæj( Ì>Ôy‡ÚŠ(óµaö¢Š<ÃíG˜}¨¢€0ûQæj( Ì>Ôy‡ÚŠ(Þ}¨Þ}¨¢€ çÚ�çÚŠ(Þ}¨Þ}¨¢€ çÚ�çÚŠ(Þ}¨Þ}¨¢€ çÚ�çÚŠ(Þ}¨Þ}¨¢€ çÚ�çÚŠ(Þ}¨Þ}¨¢€ çÚ�çÚŠ(Þ}©wŸj( yö£yö¢Š7Ÿj7Ÿj( yö£yö¢Š7ŸjÉ×µ[�6ÕŒ³8\°'8õ¢Š™l5¹ÈMs5ÜÍ4î]ÏRh¢ŠóÙÜÿÙ endstream endobj 32 0 obj <> /Font <> /XObject <>>> /Type /Page>> endobj 33 0 obj <> stream xœÅYÛŠ7}Ì?ôsÀÚº©%� ôeÆÄà‡Äþ€�L6a7ùý¨/ÓÓ*i.»½Á,ÃvkJ¥ª£*Õ)ÍÓ+ˆï†^Єê·ÇÝÓn³ÁžŸß}ù±ú+~ãÅÔ•£*8ãm…4Èœ¾¶úwGÕ§øù?ßFEPýú!Îl�óÛó×ÝÃáHR‘@uüc÷ðá3rõõŸ8áø¼CˆÓ!N‡aºaaŠ:GÕ£¥ãB0"U Cªããî=¶�ÿéømÔù.ªíßsMm:B-#-QùaÜý2þ]s=|gò†79ï3ßað]{é#ȃ“³� bSûÁ §#^ËØ^�c§fI‹ ÷X›J6¤†ô[ÔÕ”ª«Ú^ä½ÚÛÆ*/ÑÕ¢"¡ÓhujØÕoˆèÚÂV�0×Ú‹À½�@j­C¯ôіݛ ‰ Mx d+„Ì?ntäy� {§¼±¹l­ïÁŒ!Å`c3‘Ò'�¶¸iU|‚�”¡Ë#DãÞ‘Þ-×õZO£ãŠhŸE¨Ý½[Ø8½7o{VŒL8�ó˜ Ìry=šG¥Èé„OfwM[˜í¤$+ä ²{ÉÎ [�‹U¨0+Q“�ÆjT��iS‹]£¹5ŠÅ¤d{ö£iИ}Œp(ÈuuÊÐu6-?ZÏÉ•Ì^,Ùž%É�K¢%žv´Ð9ܽ5õŒ'Ö‡+ u‹’Œl #ã™�…8`¿!#tKè¹^RKÊW¶ÞgR¿��MîÏœlƒÿ/ádƒŸì&â ]ápÁ¶iùQ�Mß"’‹ùTŸ¨@½¶°RÄQÔuSÐ)�-X/p(XÚBö2è=ËuÉw_ȲrFžó9Ñp©`¾6%îb½ÞË�Ç¥˜Ø¬RJ•ÇBÞsíXu0/­YÈ´´Á¡9Øc°³?WÚË,öÝ›ñA3‹Öj~4µÅd¹Ì©ß„�� ÆMç=C<ج¶â ¸TäÂò œ‚æ[s÷êFÊsêÍÖÆÌש>lAíˆd»vOg†ÎéB�£�ø[<�î‡#ËÓ¶á51|Y#~©:IÅYp�u›‡k‹îãÎ"˜ ó럻ϣv%;T9»žß/HS@S¯¤ç÷’ôx›ó8= b©åâãq~¼ 7,æ&¹éq-·Ôâ�yà¡ ØMê!¶F—s�‘¨Æ…ìâAòå+¢–¹‡äŰϨ…U�†5+ Ýø#Äë“…e ÊÖd™#y…òrݵ xÐd�:ÒrwûrûJ_x¦ø^_B^íènãÅb•‡!㘫ֆ³ìê›ÑÍ‹Óù÷ã, ëXשYI’-V?År(&Ô“åDv¸·‹ åЦáG½‡Ÿ?ÅXêÿ®&úúµûù endstream endobj 38 0 obj <> stream ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ¢½"ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?äIÀ­›/ j•ͨ±ŠK»Y¹·ŒºÃ“† 8Á^xïŽ:Óü#¢7ˆø’{–ŠãOžÚ 2†�Ç IäãéV?áXxƒÉ1y»ˆ+²M»q×;zç�ÏøùÃìϨÁ?ÒœqÓnÖB– ^çˆÁà­F[9ä�%†áCyPªÆáÈRF[xÛ“ÇC×=).¼¨Ã ½ºÉ<ƒî¦só‘É/ÇÊïÔ\z„0¼ï²1“ü«N-.%¼bÇÛ�D±RNí„pñkcÇ#ð6³!Á6Ñ ŠÙ‘ÏSÕ~Py—#¨gðn»¥Ù.ó"•Bý>lÒ½µ´Ûb0�pÆ©\éÏ/Þ£¨î(Ž2W…��—ÁºÚ[Á"Zù’¹o2 è `tÉ-ƒžzP<®4*ÿeUbÄi �r9é^¥E_ÖfGÕàytž ×¾Ëe�.ÜbE²2q“Øðsøf£ÿ„K^ÿ yÿ¿±ÿñUê´SX™ ú¼å_ð‰kßô?÷ö?þ*�øDµïúŸûûÿ^«EZ˜}Z•Â%®ÿÐ<ÿߨÿøªCá=þ�Íÿ£ÿâ«Õ©(úÔÃêÐ<§þ=þ�­ÿ£ÿâ©„üAÿ@Öÿ¿ÑÿñUêôQõ©‡Õ yHðž¿ßMoûýÿV¿á Õþ× eSÉ‘AyU�òÉ‚2 ÁôÍzež&lk Êíü¯Ë*¤–k ž²<ªU~¸$þB®Ÿêàö›ìÿøŠôz)}f þ¯ʇ„õìs§0?õÖ?þ*—þ=wþ�çþþÇÿÅW©ÑН­OÈŸ«@òÏøDõßúŸûûÿGü"zïýÛþþÇÿÅW©ÑGÖ§äV�åŸð‰ë¿ôoûûÿGü"zïýÏýý�ÿНS£þµ?!}Z–Â'®ÿÐ<ÿߨÿøª?á×èïìüUz–(ÅZ˜}Z–ÿÂ'®ÿÐ<ÿߨÿøª?á×èïìüUz–(£ëS«ÀòßøDõßúŸûûÿGü"zïýÏýý�ÿНR¢�­L>¯Ëá×èß÷ö?þ*“þ=wþ�çþþ§ÿ^§EZ˜}^–Â'®ÿÐ<ÿߨÿøª?á×èïìüUz�}jbú¼,ÿ„S]ÿ yÿ¿±ÿñTÂ)®ÿÐ<ÿߨÿøªõ:1GÖ¦W‰åŸðŠk¿ô?÷ö?þ*�øE5ßúŸûûÿ^§Š1GÖfW‰åŸðŠk¿ô?÷ö?þ*�øE5ßúŸûûÿ^§E?¬Ì>¯Ë?á×èïìüUðŠk¿ô?÷ö?þ*½NŠ>³0ú¼O,ÿ„O]ÿ {ߨÿøª_øDõßú·ýý�ÿНR¢�¬Ì>¯Ëá×èïìüUð‰ë¿ôoûûÿ^¥EY˜}^'–ÿÂ'®ÿÐ<ÿߨÿøª?á×èïìüUz•}faõxž[ÿž»ÿ@öÿ¿±ÿñTÂ'®ÿÐ=¿ïìüUz•}faõxž[ÿž»ÿ@óÿcÿâ¨ÿ„O]ÿ yÿ¿©ÿÅW©QGÖfW‰åŸð‰ë¿ô?÷ö?þ*—þ=wþ�çþþÇÿÅW©QGÖfW‰å¿ð‰ë¿ô?÷ö?þ*�øDõßú·ýýOþ*½JŠ>³0ú¼O-ÿ„O]ÿ {ßÔÿâ¨ÿ„O]ÿ {ߨÿøªõ*(úÌÃêñ<·þ=wþ�íÿcÿâ¨ÿ„O]ÿ {ߨÿøªõ*(úÌÃêñ<·þ=wþ�çþþ§ÿGü"zïýÏýý�ÿНR¢�¬Ì>¯Ëá×èß÷ö?þ*�øDõßúŸûúŸüUz•}faõxž[ÿž»ÿ@öÿ¿±ÿñTÂ'®ÿÐ=¿ïêñUêTQõ™‡Õâyoü"zïýÏýý�ÿŠ£þ=wþ�çþþÇÿÅW©QGÖfW‰å¿ð‰ë¿ô?÷ö?þ*�øDõßúŸûûÿ^¥EY˜}^'–ÿÂ'®ÿÐ=¿ïìüUð‰ë¿ô?÷õ?øªõ*(úÌÃêñ<·þ=wþ�çþþ§ÿGü"zïýÏýý�ÿНR¢�¬Ì>¯Ëá×èß÷õ?øª?á×èïìüUz•}faõxž[ÿž»ÿ@öÿ¿±ÿñTÂ'®ÿÐ=¿ïêñUêTQõ™‡Õâyoü"zïýÛþþÇÿÅQÿž»ÿ@öÿ¿±ÿñUêTQõ™‡Õâyoü"zïýÛþþÇÿÅQÿž»ÿ@óÿcÿâ«Ô¨£ë3«ÄòßøDõßúŸûûÿGü"zïýÛþþ§ÿ^¥E/¬Ï°}^'–ÿÂ'®ÿÐ<ÿߨÿøªOøDõßú·ýýOþ*½NŠYŸ`ú¼O-ÿ„O]ÿ {ߨÿøª?á×èïìüUz•}faõxž[ÿž»ÿ@óÿSÿŠ£þ=wþ�çþþÇÿÅW©QGÖfW‰åŸð‰ë¿ô?÷ö?þ*—þ=wþ�íÿSÿНR¢�¬Ì>¯Ëá×èß÷ö?þ*�øE5ßú·ýý�ÿНR¢�¬Ï°}^'–Â'®ÿÐ<ÿߨÿøª_øDõßúŸûûÿ^¥E/¬Ì>¯Ëá×èïìüU'ü"zïýÏýý�ÿНS¢�¬Ì>¯Ë?á×èïìüU/ü"zïýÛþþ§ÿ^¥EYŸ`ú¼O,ÿ„O]ÿ yÿ¿©ÿÅQÿž»ÿ@öÿ¿©ÿÅW©ÑGÖfW‰å¿ð‰ë¿ô?÷ö?þ*�øDõßúŸûûÿ^¥EY˜}^'–Â'®ÿÐ<ÿßÔÿâ©á×èïêñUêTQõ™‡Õâygü"zïýÏýý�ÿŠ¥ÿ„O]ÿ yÿ¿±ÿñUêTQõ™‡Õâyoü"zïýÏýý�ÿŠ£þ=wþ�çþþÇÿÅW©QGÖgØ>¯Ëá×èïìüU'ü"zïýÏýý�ÿНS¢�¬Ì>¯Ë?á×èïìüU/ü"zïýÛþþÇÿÅW©QOë3«ÄòßøDõßú·ýý�ÿŠ£þ=wþ�íÿcÿâ«Ô¨£ë3ìW‰å¿ð‰ë¿ôoûûÿGü"zïýÛþþÇÿÅW©QGÖfW‰å¿ð‰ë¿ôoûúŸüUð‰ë¿ô?÷õ?øªõ*(úÌÃêñ<·þ=wþ�íÿcÿâ¨ÿ„O]ÿ {ߨÿøªõ*(úÌûÕâyoü"zïýÛþþ§ÿIÿž»ÿ@óÿSÿНS¢�¬Ì>¯Ëá×èïìüUð‰ë¿ô?÷ö?þ*½JŠ>³0ú¼O,ÿ„O]ÿ yÿ¿±ÿñTÂ'®ÿÐ<ÿߨÿøªõ:(úÌÃêñ<·þ=wþ�íÿcÿâ¨ÿ„O]ÿ {ߨÿøªõ*(úÌÃêñ<³þ=wþ�çþþ§ÿGü"zïýÏýý�ÿНS¢�¬Ì>¯Ëá×èïìüUð‰ë¿ô?÷õ?øªõ*)}faõxž[ÿž»ÿ@öÿ¿©ÿÅQÿž»ÿ@öÿ¿±ÿñUêTSúÌÃêñ<³þ=wþ�çþþ§ÿKÿž»ÿ@öÿ¿©ÿÅW©QGÖfW‰å¿ð‰ë¿ôoûûÿGü"zïýÛþþÇÿÅW©QGÖfW‰åŸð‰ë¿ô?÷õ?øª?á×èïìüUz�}faõxž[ÿž»ÿ@óÿSÿŠ£þ=wþ�çþþ§ÿ^¥EY˜}^'–ÿÂ'®ÿÐ<ÿßÔÿâ¨ÿ„O]ÿ yÿ¿±ÿñUêTQõ™‡Õâygü"zïýÛþþ§ÿGü"šïýÏýý�ÿНS¢�¬Ì>¯Ëá×èïìüU'ü"šïýÏýý�ÿНS¢�¬Ì>¯Ë?á×èïìüUðŠk¿ô?÷ö?þ*½NŠ>³0ú¼O,ÿ„S]ÿ yÿ¿±ÿñTÂ'®ÿÐ<ÿߨÿøªõ³0ú¼O,ÿ„S]ÿ yÿ¿±ÿñTÂ)®ÿÐ<ÿߨÿøªõ³0ú¼O,ÿ„S]ÿ yÿ¿±ÿñTÂ)®ÿÐ<ÿߨÿøªõ,QŠ>³0ú¼O-ÿ„S]ÿ yÿ¿±ÿñTÂ)®Ð<ÿߨÿøªõ*(úÌÃêñ<·þMwþ�çþþÇÿÅQÿ¦»ÿ@óÿcÿâ«Ô¨£ë3«ÄòßøE5ßúŸûûÿGü"šïýÏýý�ÿНR¢�¬Ì>¯Ëá×èïìüUðŠk¿ô?÷ö?þ*½JŠ>³0ú¼O-ÿ„S]ÿ yÿ¿±ÿñT¿ðŠk¿ô?÷ö?þ*½FŠ>³0ú¼O-ÿ„S\ÿ yÿ¿±ÿñTÂ)®Ð<ÿßÔÿâ«Ô¨£ë3«ÄòßøE5ÏúŸûûÿGü"šçýÏýýOþ*½JŠ>³0ú¼O-ÿ„S\ÿ yÿ¿©ÿÅQÿ¦¹ÿ@óÿcÿâ«Ô¨ÅY˜}^'–ÿÂ)®Ð<ÿßÔÿâ¨ÿ„S\ÿ yÿ¿©ÿÅW¨âŠ>³0ú¼O.ÿ„S\ÿ yÿ¿©ÿÅQÿ¦»ÿ@óÿSÿНQ¢�¬Ì>¯Ë¿á×èïêñTÂ)®Ð<ÿßÔÿâ«Ôh£ë3«ÄòïøE5ÏúŸûûÿGü"šçýÏýý�ÿНQ¢�¬Ì>¯Ë¿á×?èïêñTÂ)®Ð<ÿßÔÿâ«Ôh£ë3«ÄòïøE5ÏúŸûúŸüUðŠkŸô?÷õ?øªõ(úÌÃêñ<»þMsþ�çþþÇÿÅQÿ¦¹ÿ@óÿSÿНQ¢�¬Ì>¯Ë¿á×?èïêñTÂ)®Ð<ÿߨÿøªõ(úÌÃêñ<»þMsþ�çþþÇÿÅQÿ¦¹ÿ@öÿ¿©ÿÅW¨â–�¬Ì>¯È/4Ûí<�wk$ ð ƒøŽ*­{,öñ]@ðOÉŒ2°È5å:Þ›ý“«Mh (0ѓԩéþ…oF·>�s´¹5[wÂùn?ëÅÿô8ëÛëÄ>ÿÈãsÿ^/ÿ¡Ç^ÓtÌ–s²œ0�ˆ#±Åy˜ùrÍ˲= ½4�®í‘нÄJè.*ºº†F §¡ × v¶–ßh•<ÇvÚàp;âº/ ê ¨i!–0�®Ï|ן„úÍj+8¥¶º�U](OÙ'ï#jŠ­}ÔÖ¦;;•¶˜‘ûÖ�~Ñžp ÆqÓ9Ƹé5?\isÃe=ÕËÛêÆÔÞZC –HU2Çk�/!þBx¹'uEq–º½Þ¢Ú^•e«] ¦[™..î-£!…ÕLe„s�œt_|Ô‡ˆuàø5“¨½¬Ê’FÉoe欓£2’Äçdd©ä•Æ~õwTT6’I-”JJñ«?–Ù\‘ÎqSPEPEPEPEPEAylní$�g–aòËa�ƒ�GãØðzŠä­u«ï_¶‚Ó­©€·Úo-دڕN€õðç9CÀ$�À´¬�ÿÈ>?úê?‘­zË×6ÖàôûBÿ#UÉ–Å;Kqo\|Ç–>õ=Núò{A‘¦]^îÎ~ÎÑ Ÿ_1ׯ¶zRnú”•‹”W-á�Ní­#¡êP»ÌÅàÚ™¹“9ýîï—88¡ÆxÏSH ]BÜC>åWäCTë_Vìè{îþ•‘]wFVaEUˆ(¢Š(¢ŠJ)h¤QKŠLPE£ (¢Š”´”À(¢ŠQEQE1 Š\QERâŒPbŒQŠ(1E-”RÑ@„Å¥¢€ QŠ1F(ťŠťŠťŠťŠ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h Å¥Å Å¥Å Å¥Å Å¥Å Å¥Å&(Å£PbŒRÑ@ E-”RÑ@ E- ¢—˜ Š( bŠ(1E-”RÑ@ E.(Å%bŠ(¢Š(¬Ý^_,Cþ™¨[ç?ñçkçné÷¿vøý;õªºtûïQ´µ™³Ÿ’æÃÊŒñݼ•Çæ)\v7(¢Šb (ª×wÐÙóRá·çM¼’ôõا�Y¢¨ÛêÖ×S¬1Çx¬ÙÁ–Êh×ñfPçW¨QE(¬Ilm5]%í¬7)¤5š0áK<¹ „í_ÈTzž‘¦ØAÍžŸim:Þ[$0ª0 2)¡�Æ•Çc~Š(¦ ¢Š£ªy±[}®……­Ár$lFëÜ7§±ê?0A—¨¬M&ò]j·1’ÚIE´'kîÇ&Aô°í.ÚÙ±�ÈzŠÖŠê†RAŸCÁ§(4’c,l¢°·hb,U¦–c¸äî’Fvü2ÇÕf‘�Te˜îj�΢ˆ Âw7¯aR“{ ´ˆ5YƒH±÷y?ZϧX’NIêiµÑecîîQEP‚Š( aEb€ (¢€ (¢€ (¢€ PQEQE(¢ŒPE¥¦!(¥¢€ŠZ((¥¢€ŠZ((Å.(Å&(Å;b€b–ŠLQŠZ(1E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”b–ŠLQŠZ(1F)h âŒS¨ ÑNÅ ÑNÅ&((Å.(Å&)1NÅ&(”RÑ@ E- £bŠLQKE%´PQF( Š( Š(  ×v³\„ò¯î-vç>JÆw}w«~˜¨­ì.!�d“V¼¸QœÇ*BývÆëW¨¢Ã Rb–ŠbŠZ((¥¢€ŠZ(6æÆïûAï,®á…ä‰"‘f€ÈRć\�½{TRiú•щ//í–9JÃhÈÄ£&FÀÊŽÕ¯E+!ÜJ)h¦!*µÍŒWrÂÓnd‰·ˆóò3v$wÇnÝú�‹TPf±ˆß¥â–I‚ìm§EìבÜ~'6h¢�yÏ�ä=ý{/þ„ÕèÕç>=ÿ�ô?õì¿úVô>3*ß³ð€…ñ}É?óâÿúuí¾bzþ•áÿ äm¹ÿ¯'ÿÐÒ½¢¹±ŸÅ7Âÿ ±æ'¯éG˜ž¿¥W¢¹N’ǘž¿¥bzþ•^бæ'¯éG˜ž¿¥W¢€,y‰ëúQæ'¯éUè  bzþ”y‰ëúUz(ǘž¿¥bzþ•^бæ'¯éG˜ž¿¥W¢€,y‰ëúQæ'¯éUè  bzþ”y‰ëúUz(ǘž¿¥TÔ-Òúѡߵ³¹N:}'`zœËi �"Ü0ÿOì›ïùáÿ�¯ø×OEiíÍÇöM÷üðÿÇ×ühþɾÿžøúÿ�tôQí{4sÙ7ßóÃÿ_ñ£û&ûþxãëþ5ÓÑG´aìÑÌd_Ïü}Æ“û"ûþxãëþ5ÔQG´aìÑËÿd_Ïü}Æ—û&ûþxãëþ5ÓÑG´aìÑÌdßÏü}Æ�ì›ïùáÿ�¯ø×OEч"9�ì‹ïùáÿ�¯øÑý‘}ÿ¿ã]E{Fˆåÿ²/¿ç‡þ>¿ãGöE÷üðÿÇ×ük¨¢�jÑ¿öE÷üðÿÇ×ühþȾÿžøúÿ�uQíXr#—þȾÿžøúÿ�ÙßóÃÿ_ñ®¢Š=«fŽ_û"ûþxãëþ4d_Ïü}ƺŠ(ö¬=š9ì‹ïùáÿ�¯øÑý‘}ÿ¿ãGöE÷üðÿÇ×ük¨¢�jÃÙ£—þȾÿžøúÿ�/öEïüðÿÇ×ük§¢�jÅìÑÌd^ÿÏü}Æ�ì‹ßùáÿ�¯ø×OEÕ‡³G1ý‘{ÿ¿ã]={VÍÇöM÷üðÿÇ×ühþɾÿžøúÿ�tôQíX{4sÙ7ßóÃÿ_ñ£û&ûþxãëþ5ÓÑGµaìÑÌdßÏü}Æ�ì›ßùãÿ�/ø×OEÕ‡³G1ý“{ÿ<ñõÿ?²oç�þ>¿ã]={VÍÇöMïüðÿÇ×üi²oç‡þ>¿ã]5{VÍÏöMïüðÿÇ×ühþɽÿžøúÿ�tÔQíX{4s?Ù7¿óÃÿ_ñ£û&÷þxãËþ5ÓQGµaìÑÌÿdÞÿÏüyÆ�ì›ßùáÿ�/ø×MEÕ‡³G3ý“{ÿ¿ã]={VÍÇöMïüñÿÇ—ühþɾÿž?øúÿ�tôQíX{4sÙ7ßóÇÿ_ñ£û&ûþxãëþ5ÓÑGµaìÑÌdßÏü}Æ�ì›ïùáÿ�¯ø×OEÕ‡³G1ý“}ÿ¿ã]={VÍÇöM÷üðÿÇ×ühþȾÿžøúÿ�tôQíX{4sÙßóÃÿ_ñ¤þȾÿžøúÿ�uQíX{4rÿÙßóÃÿ_ñ£û"ûþxãëþ5ÔQGµaìÑËÿd_Ïü}Æ�ì‹ïùáÿ�¯ø×QEÕ‡³G-ý‘}ÿ¿ã]Mý¬ƒÙ£–þÇ¿ÿžøúÿ�Ø÷ÿóÃÿ_ñ®¦Š=¬ƒÙ£–þÇ¿ÿžøúÿ�Ø÷ÿóÃÿ_ñ®¦Š=¬ƒÙ£–þǾÿžøúÿ�'ö=÷üðÿÇ×ükª¢�k öhå±ïÿç‡þ>¿ãGö=ÿüðÿÇ×ükª¢�k öhå±ïÿç‡þ>¿ãGö=ÿüðÿÇ×ükª¢�k öhå±ïÿç‡þ>¿ãGö=ÿüðÿÇ×ükª¢�k öhå±ïÿç‡þ>¿ãGö=ÿüðÿÇ×ükª¢�k öhå±ïÿç‡þ>¿ãGö=ÿüðÿÇ×ükª¢�k öhå±ïÿç‡þ>¿ãGö=ÿüðÿÇ×ükª¢�k öhå±ïÿç‡þ>¿ãGö=ÿüðÿÇ×ükª¢�k öhå±ïÿç‡þ>¿ãGö=ÿüðÿÇ×ükª¢�k öhå±ïÿç‡þ>¿ãGö=ÿüðÿÇ×ükª¢�k öhå±ïÿç‡þ>¿ãGö=ÿüðÿÇ×ükª¢�k öhå±ïÿç‡þ>¿ã^cñÚ[_@“&Ö6ªq�xÜþ•ïâÿÿäl¶ÿ¯$ÿÐÞº0µ©c L…ÅøKÿ#mÏýy?þ†•ìõã ¿äl¹ÿ¯'ÿÐÒ½ž£üR°¿Ã (¢¹N�¢Š(¢Š(¢Š(¢Š(¢“r† ¸n# gšZ(¢Š(¢Šc±*ýãúRl“þzã´ËÇüúÕmKT¶Ó#ŒÍæ<²¶Øa… É+z(©è;‘@vIÿ=ñÚ6Iÿ=ñÚ˶ñr]Emya{§K1ÛÚ•6Èzà23(>Ä‚}+b€#Ù'üõÿÇhÙ'üõÿÇj¾¥©Úé6Þ]>"� °^X�@;š²³FØÔ“Û#4›$ÿž¿øí$ÿž¿øíE£crf^ÛÊ`âQªÞ_ûØ<~5 Ž·¤êfAaªY]˜†é>Ïp’l§Š·²OùëÿŽÑ²OùëÿŽÔ ªiïd׫}jÖŠHiÄÊPcճЖ+«yíÒx®"’IÁVú†€²OùëÿŽÑ²OùëÿŽÕ[-ZÒúK´‰ðm§0>âX*·ò0 ºñ •�åÝ´Â`öɱ—ÞefTU$œ¡íÜ~;$ÿž¿øí$ÿž¿øícØø·I¾YI–[Sm,Ÿj…¢UEm¥·‘´€qœŽø9¨OŽü./VÛûwO%£2y‚å6 0[=yéè ol“þzÿã´l“þzÿãµ�}ãéöÖ×3jÖžMˉ–e!�m¥‡<¨=HéÍOˆ´Ëˈà²�¯ � ÚÆÒÆ™�ΣhàƒÉî(GdŸó×ÿ£dŸó×ÿ¬{¯ivi¨4�)û ÈÏ„ÿY媳„= €<õÏ¡©ÿá#ÒÞÂêöÞä][Ú¶ÙšÙL»zgîç8'èhGdŸó×ÿ£dŸó×ÿ¬ã�xT7ò™ G‹N�Õä\åU‚aˆÚÝ= oÛη6ñ΋"¬Š #(ÀU`>ÄP²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG²OùëÿŽÑ²OùëÿŽÔ”P{$ÿž¿øí$ÿž¿øíIEG—Œ�Ä2žøÆ*JŽoõ-RP2JC¼b™æ¿÷¿JGûíõ¬«Ýn+[¯²Aks}v3CjªJг1 ¹ì É  o5ÿ½úQæ¿÷¿JÌÓõx5 $ƒÊžÚê0íîk€z =Á"´(þkÿ{ô£Íï~•‘¬x‡JÐR&Ô¯!€Êʨ¬à1Ë$y “ØQˆ´Ë™ã†ÎsxÎÀnµC*.FAfPUF<š×ó_ûߥkÿ{ô¬K¯鶆üHòfÉŸ ÔA#*ž…‚‘ÇøIˆ´Éì®nín>Õ¶<ï³)_l.rGp3Ò€5ü×þ÷éGšÿÞý+œohà�†úUi<µx¬'tvôVA?JÛ·�n­ã�EWXÙ}U€#ñcÍï~”y¯ýïÒ™E?Íï~”y¯ýïÒ™E?Íï~”y¯ýïÒ™E?Íï~”y¯ýïÒ™E?Íï~”y¯ýïÒ™E?Íï~”y¯ýïÒ™LŽXåÇ"¸V*Jœàƒ‚> ÐÞkÿ{ô LùëŸÂ Žx¦i)QÌM²@¬ÆÀ8>‡{Š’€-«nP}ii‘«ú(¢Š(¬­KÄzf“;Ãw$ᣈO!ŠÖYV8É`Ù…+rHû§Ò‰¼G¦[ê c$“ùË*@̶²´i#íÚ­ ]€�éÁ?Ä=hV°¼Q¯6‡c…®&%cÝÐÔþ£ó­Úá~#Ì7þÚÿì•×€¥¸ˆÂ{À9±u%NŒ¥Ì3ã-xœý»ÞJñ4Ÿð™kÿóÿÿ�cÿâk ¥žÚ{YwI ‘¸,ˆTã×¾§ê¸}¹Ü�ŸúÅmùŸÞÍ�øLµÿùÿÿÈ1ÿñ5IñÆ£ìk¨H³Û³Ç`R£Ô` äè¥<Qk‘}ÈqÅV‹¿3ûÏt¢Š+㨠(¢€ *„ZÍ„úÄÚLs1½…K:yl!8b6’ˆH#põ«6·p^DÒÛ¾ôY"pGÌŒQ‡>Œ¤~5VULj´»).Ööî+Am"ÄÏq"ƬÌ�ÀRO'ô4«EdèÞ%Ñõë4¸ÓïíåÌk#Ä%S$[‡Ô”öçÒ¦�Z²“VŸL…¸†˜î#k#ƒžySŸÂ€4(¬ýGY²ÒÄ s! 1m¥FìFvcèSÏÓÖŸ§j–Ú§Ú~Ì\‹yDNYvòQ_�ÁÖ€.ÑXš�‹´='W�L¿Ô`·¸xŒ§Í‘UUAd“Ôç�ìjk¿iVšBê¦ëβs„–Ù`ÝzlÐóÒ€5h¬3âý·µ½Ô °�#ŽFŽöT…¾pHcÔcŸ¨­µeu ¤2‘�AÈ"€Š( Š( Š( ŠŽyâ¶·–ây8bBîìp@É'ð®@üXðH8þÛÿÉY¿øŠìè¬-3ÆZ¯y¥�ä�<ÊZ%–ÚX¼À\í. •Õ°;0= nÐ^/ñoþFËúòOý ëÚ+Æ>-ÈÙoÿ^Iÿ¡½u`ÿŠsb¿†/Âoù.?ëÉÿô4¯f¯øOÿ#eÇýy?þ†•ì´c?Š_ᔵyut›™4«x®/Õ †)_j³{ŸÿWÔu®s×þ"ŸM.-,®f2Ÿ´�NUxäÀÊìû>QÆ9ç9=…Êt…Q@E#NyQÆËŽ­!_èjZ(�„—Îû�¼±?‰#ßùÕê( Š(  ùmwj(þaóJ;+ãîà®=9?™­ M£pl À`Z(¢Š(¢Š�þ^?àÖ±]–«\à ¬vŒÝ7‡c*�r GŸJÚÿ—�øõ¨¯¬-5+coyM!¶°èGBPG¨æ€2¼béÿÕÌjœ¬V€}ã9#Ë#Ü6Ø{VõbÂ%£pöÒJåv¬³\I,‘ó‘±Ý‰B‚:JØ… PÇHòP¥ß›Î>€8Ÿ鉪ø·M‚mÂâ=� žà k‡E%b-µ™P“Ç=0Fs„ô•þÙÔžo hVÉã'�Rð~éÔJä|Ýr>ñãŽzíKG·Õ%‚I幌À)‚cù€æ\0éØŠ§eá=6Â姆MA™Ø¼‹.¡<‰!#i.¬ä7Aè=(Üiwú¥åõœ¶ÖZEžŸ-€� ¢HI˜vÚ›pL–ô¬íDɧiº†‹ôwö1XA,’ùh¦(¼Ð®¬PTÆŒóòžMv¶žÐì'ó¬ôm:Ú]¥wÃjˆØ=F@éV­tû+(ž+K;x#rK¤Q*'© h•V²$ÖRtøáxíVݧUh¾×¶SÀÈËlp8ÅaÅfn´ûHNŽ5�m¯N×q@ˆa˜˜d;”>TQ‚x`FIëè‹¥iËdÖKaj-äÀ!]„ÿ»ŒTð[ÃkAo pă jT{Ò€<¦.)íõ¤¶ð6ÉÆ¢s$VÄÚ€";FÖÝÇ'å|ßZ“Äšr¯ˆc¼§¥ÙiðØÉvñ&ês<›ŽpÅUxöŠ¡?‡#žöòèj7ÑÉw±eòÝîÐ6|¹.Ç9ÎO\q@'†tûÉŽ®··W–“ÁfÁÞ5b±¬�æ…'“æ*¹Â…<‚rH'ÊêYõ‰ç¹³Õcq‘n‘Ýj.ï ²ïXòä’ ³8íùkÓô¿Øh–ÒÚésÞZZJ„lª±ÇÎ Á¸ìqíD^Ò£œ³£Íoä5ºZ˵£Er¬ç¦æfd–$æ€8´–š6––Ú†µr&/±ãh·fœ#£yÄɼ,Š€ç…'âχ£ý£o%®±{¦¡©•hš;f.‰h¬ *„dì òœc§<×uÿýƒ[ÚC2Ë0´txÞI˜±(Û�1Î\‚g�^iaÐ4ûf´6ñ…­Ä·ªž È19ÿ}¿Jñ«ïìãu©¡ÞeI5A$hm@UU˜ ¡z1�ãߊô+K‹µÑµ Eµy-íícO%¢Ó •MÄí‰Ù‹Î26çµ§?‚ì.¡h'¹»{v7'ÊÜ¡CN\»p¹ÈóqŒpO5/ü"°Ê²ý»Q¿¾y _<ÌŠ@�‹¨F7œƒšòÛ£v/'¸-qå=ÅÄÖ�&aä»KtÛð·1lÊ+|Ä6@#=�²i"eѬEÜ[Æ$bÛ‰m£'=ùïYvþÓ-e³hLë³ò‹†YXFbɸRx ’H&¶­-a±³†ÒÙ6A ã\“µ@À<ÐZŒw²Y·ö|éÒ�Éæ.ä| wôÈäuö¬Ûý[U¼ˆ›)tË[sþ�³¨/4˜ÆÄí°ußߌw­Ú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(9¿ÔµIQÍþ¥ªJªÿ}¾µƒáÒ©.«o&êßK$Àõ*͘›Üy{@?ì‘Ú·Ÿï·Ö³¯ôk JD–æó£I¢‘¢‘G t!±í𥍲Iâ­(H71 ¤›oU€¡\bþ^=vûVådÅáÍ6Úhgµ… ž'ßç##窻6K9è1‚ÔÃüAšx¾ÂmäÔV`NÁh`Æ–7È›;dÀÇ�OjÈÐ^ûí°Éc«_Aiw©ÇlQã¶bȶAÁÊ¡üª¿)Æ=ù¯D½Ó,õ(ÝD\ÆêêCÉS¸‚22Áã qÅW]Â6¶1Fcû=ÛÞ(VàÈêêIÏl9ãéé@Mªÿg¦±¨ÆC>Ѩy±!¶ †còã÷ÀœX`ûäWm¦Ïuý‰{yý¬ö¶Ö–èb–-;È„*嘄v%ÇbFÜŽ‡½kÜøJÆðž{¦€Éq!‡r…-0uc÷sÀ‘€ç¿zrø^ŽD¼Ô/¯C¬iûæEÚ¨Á‚üˆ¹�œç#Šó‹·»ŸUžè}¡­ZyÝc‘‡—'�:—Ú.b*J®7ÝÈÇ>¥ááp<5¥‹·2\‹H¼×gÞYö ’Ù9ç<çš§„´ûY-^.@Êì¥Ã ™Wj—$ÆXà bH9­‹;H,,â´¶ŒG*4� tÐÔQEQEQEQEQEÈk&ôê·ð�ïûFßø˜ìÆÜ`cnxóñÓ¶1»øk¯¦E P©X£HÕ˜¹ e‰É?RI4GCxÒaþÌÿ�nzçvìüÛóÎüç9ç9ÍhÓ#†(šFŽ4C#orªæÀ>§Ÿ@bÿV)ôȿՊ}QEq.û7Ûu=ÿÛ^Wöbi}ƒìÞ_Ù³67y¿6ÖýÎqïŠ5³ÂCwŸí¯²jZ}«Êû7Ù¾Óû�+;¿{�õ9ÛÇë]¥áÍ3V�漎rÒD �Eu,K$`± ꌙ¸ ýãëDÞÓ.5¾’9üæ™'u[©V7‘6ífŒ6ÂFÄê?„zP­p¿¿æÿmöJî«…ø�ÿ0ßûkÿ²W~YþõŸäÎ<û¼¾_š8Zêõkß³jŸòÕm·Bcƒc7Îç‘û¿\ç–nOSÊV„šî¨ó…ôÑÈFÒao/#$ó·å˜ýI¯¦­Iͦº_úÙž :Š)§ý~(MNïíF/ø˜ß^mÏü}.6ôéó·_Ã¥P«7×w¥~×u<û3·Í�¶3תõ­8òÆß×èDÝÝÏt¢Š+áO­ (¢€8¸ná²øƒ¬Ý\\Ú,1Zá-Oš¡Vrâ [n쑽¸‘>UÆN�„u K‹;«hgY%KÛÉX' +]M´ç§88œÖÚéöI{%êZ[­ÜªIÄ`Hê;ÆHàqíQiz>Ÿ¢Û=¾›i´/#JÉÀ,O'üô(íxî«e³PÖ¯ôÝßLܪ}²x?y™ÆÌm]®òbGO—==б_ÃPÈ·bKûöû\Þlåe\mÚ* 9ã’hÚx×’ò}V='P°\YÀñ[6ÙÒ3÷þgp~bÀÏÍsÖZ6ƒs­Áá¥i^}ŒæIîÄ1ožÃ"gï9PàöVÏÞÝEá=:ÚÖâÒÎK»;IÊ“om;FŠG]˜åwwÁúóSKá�].=8ØD¶Ñ6øÄyF�¿¼¬>`ÞùÍr~$Ñ$%´·¶�ä²—Mš´ëDŽ0±¬�y�wQ¸1‘Àãš�Â6V¶úþ«4^ kgŠüªN¢ß6ª`�)ò¾{“òä|þ¹Çk�767uÄ’ÙA$´²o,®P’ÄòOÈ9úÔÖZt6^Ër×—h“qÈ ±S�l ýhΑµí[«?iš´Zsš‹Êðý È@`èdpÁŠœbp1€©|Su ïÃ˜í´«K«)G¶ŠÜÌÈ"±Y<ÃÃå#’A$Waqá]6ëQ¹¾•ï„×Kˆo¦…~U 8�”tóO‹ÃV0hhѼâÚV‘‹4›äܹù›$òzœŸ\Ð�Ï�[ÜI%¡u‰®hæ”Ü4Ì�FfRìrÆŒgûµëQ²¼jèAV‚=*Œš<ê°ß¼’%RßåòòÿyˆÆI=:ãÚ´ÀÀé@Q@ u,ŒªÅ  1‘ïÍs‚÷Ä'þ%×½?´ö~ãÊÿž˜ÿž�¼¿^s¶ºZ(P  `“ÔÒÑEbøÃþD�{þÁ×ú-«’Ô¼7¡G¡øêDÑtå{o7Èaj€Å‹(˜m8ù~bOÉ5è¶pêW Z ˆš)eXGäkŸ“Á­-¶¡nþ"ÕÌZ†~Ô¸¶ýæcXÏ>NGȪ8ÇLõæ€{ èú^»áÙôý&ÆÒf¿t2[Û¤lW쳜dÆ@ü«ª¬x4'[ë{«Í^þüÛ1xRq ª9R›¿w’v³N9­Š+Æ~,ÿÈÙoÿ^Iÿ¡½{5x×Å�ùíÿëÉ?ô7®¬ñN|WðÅøQÿ#eÇýy?þ†•ì•ã äk¸ÿ¯'ÿÐÒ½’ŒgñC ü0¢Š+”è (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€êI ¿x~´›äÿžøõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”P{äÿž_øõäÿž_øõIEG¾Oùåÿ�Q¾Oùåÿ�T”PxyÜ¨íœæ¤¢Š†H‰bWœÓ<§þïëVh  ÞSÿwõ£ÊîþµfŠ­å?÷Z<§þïëVh  ÞSÿwõ£ÊîþµfŠ­å?÷Z<§þïëVh  ÞSÿwõ£ÊîþµfŠ­å?÷Z<§þïëVh  ÞSÿwõ£ÊîþµfŠ­å?÷Z<§þïëVh  ÞSÿwõ£ÊîþµfŠ­å?÷Z<§þïëVh  ÞSÿwõ Bùé�ƬÑ@«µ@ô¥¢Š(¢Š(¢Š+ Å k–1ˆ]VâZ=Ý=Gè?*Ý¢´¥VT¦§ Ñ)Ƥ\%³<¤ø7^aÏ¿œŸüU'ü!ºÿüøähÿøªõz+ÓþÙ¯Ù~?æpeÑîÿò<£þÝþ|?ò4üU_Ò|¨É{j¬êÀ°Þ°ô&½"Š™ç‰E«%÷ÿ™QËh§}_õèQEyG QEQEQEQEQEQEQEQEQEQEQEQEã_ÿäk·ÿ¯$ÿÐÞ½–¼oâ¿ü�vÿõäŸú×Vø§6+øe/‡×Ûx†g…¶±µaœÆäõ¯LþÕ½ÿžßøâÿ…y�ä=7ý{7þ„µèu¾%'3* ¨µoç·þ8¿áGö­ïüöÿÇü+1nàk·´=9CÁÚ{�Qô¢ ¨.^d†@æÙ&:Æqž™®~Xö6»4ÿµoç·þ8¿áGö­ïüöÿÇü+WÔ%ÓÛO*´Þ$¼…`rG=x¨âñ.‘5صŽð4ÅÚ=¾[}õÎW8ÆxUº¨EíÊ‚Oךæ«ÜÃå©INRßSÉ­™8TqŒv=›ûoIÿ �—þ'øÑý·¤ÿÐNËÿükÆh­¿±iÿ32þÕŸò£Ù¿¶ôŸú ÙàB�ÛzOýì¿ð!?ƼfŠ?±iÿ3íYÿ*=›ûoIÿ �—þ'øÑý·¤ÿÐNËÿükÆh£ûŸó0þÕŸò£Ù¿¶ôŸú ÙàB�ÛzOýì¿ð!?ƼfŠ?±iÿ3íYÿ*=›ûoIÿ �—þ'øÑý·¤ÿÐNËÿükÆh£ûŸó0þÕŸò£Û­îíîнµÄS(êcpÀ~U5y†¯&³ñ™‰Èʱ8ìÊÇþuëÕåc°ŸVšŠwLôp˜Ÿoíf‚¼sâ¿ü�vÿõäŸúױ׎|Vÿ‘ªßþ¼“ÿCzŒñJÅ Îð7ü‡¦ÿ¯fÿЖ½ç¾ÿ�ô¿õìßúסWF#ã0¡ðµ 2 E{˱œÇ4-¶DÏ\B8"¬[[Cgm½¼b8£UªZ+œÚæn¯§Ë¨6žbd_³^$1•Pry¬Øü?v–vЙ!ݪ׬rq°»6{ =½ë¤Å-ÙÈÍá{ùlÞ×̓d7ÍylÂY¾âÄ«•Á_¿ÁRzU‹_Ïo.�p‰RÁvóΟh’Pá£(HwÉ'ôWMMicGDwUg8@N g×€ir »98¸ü+“¾Ò/4Ø¡œ 8î.µkwKxw# è=IÀ®ä2–e /P"–†® ØåßCÖ®.ÖâÝ.®®IáŽGHÌj›B‡vzp3Ó¥Geá½KO×0Éh÷pOpÂ7gòÙ%`zà�F¯zë(¥d9;ÿ ÞÞ_Ixÿg•®¡Xîb73€®GÌ=óæº˜£X¢HÐaQB�œà }Ò°\(¢Šb (Å-%´b€Š1E0 (¢€ çï|-¥Éw§´:5‡–—§Åº §• 㟘§CÚº )5qܯiciaŠÎÚxÉÜRÂ}p;ð*zZ)ˆÒÐÿãõÿë™þb·ëDÿ�×ÿ®gùŠß®zŸ´6)Û_ý£Q¾´ò¶ý” ß»;·.zv©…å³\›aq ¸& ãpNµŽ¿Ú:rEnŽƒŒ{P7?ÃøÕz±sü?�W Š(  øI,¢Õ®Öm_K0€ŽZáQà—$lœàã¡Hæ©i~&¯‡¥û¥as«…•„be%H@r«ÎàûñÏ9©ˆ¹oˆlÓÚ[F°…%¸~yNGÌ~eéÐg'±‹Iqeà‰.#‚"êgÈv(ó[<ª±éþÉ E|uâV²K¡q¥Ž#(É€4Ü_´d¸n!¾\]^¥âKý9446³ÝI{*î’Ú(Ñ$\ì ò¸÷çÆÿbxŠ?[’“Ão4ñZÇ— 8‰œF/Ùò89Üy䯭ïhò\C¢É¬2ÚÛZ2Æ‚ÞáœÄÁ\™7m\�#Œ�—®ïÄ_G×ukÝRsö1is-ÜiBË"y2mäãœ]Up�Êú,~žâ&Î× cs†ó'‘[oûÃqãØ×w@Q@-¿‹ð©ê oâü*z(¢Š(¢Šã¼GâMoFñ%�´6V²ÙÏ Ì€4ÎîWËå„p¹\#ŒƒžHàþ)Ô/SY½Õ¢´µÓl¥e2o•^⸜ÝySÜÍ;ð±¨ÃH˜�eÎâF@ÅW›âÐXÛùÒÆ·kiy"î‘âšäƒ§%™b‘ÎOÒ»}V‹ZÓVö(f…L’Fc™@u(ì‡ ÝMyn›k§ZiÚ{Kwc¥5Þ•¥Î·$*Ë$S~ãqÚ¨:úW¢xDÂt,A7Ú#ûLíö€¸Y‹HÎ΃'å%Ž9<§­nÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET7êÇÖ¦¨n?Õ�­Q¹óþÉ7Ù|³q±¼¯7;7ã�ØçÆk™µÕ5™´ùîn5}*Ñ­¸ºŠm6@з¡ýÿ ö#ƒÆ+«®3^u>+Àša§2 RKºvsô’{PA ÜjwZw�ªGJîLA"1K!fÚÇž2{t9¦N4RTý(šÒ|Eªê::jÒévöR[…c¨dýÜ€ÙŒ§Ý+{HÑÚÓ_Ö/f·ÎhD¾ÖvU‰Tò9çÒ€7ªýP«ôå2ÿ‘®÷þÿ -W±ÒaŸM{û»Ï³@%òT¬FB[ç�ÍXñ—ü�w¿ðýhЮà³_0êÍhű,/’9SÓ ž½E}|–;Ù~^�ò>nJ/%.ïóõ_™–¶2ù­o ·DHib�ŠàwéÇãL—-$Q‹y‹Ê»£P‡.=@î85Õéz¶‹mx·);[F.ÝÌ2,Œ1´)Ú8ëœûU+mbÒ-Ë9öË,6 )å$#œöÛ—üéûz·iAÿWþ˜½�;_˜ÁkK•¶-o(�Ž¥Ò~½)`³º¹Gx-¦•Sï4q– õÇJéuzÖãM—ìÏn¦[t„Û´rï\c€wlã‡5 :Â($žñ¢•.wº:ÈÃo¨SŒõÉ?•?oSÙ¹rëØ^ÆŸ:�6‡>¶wOl×)m3@¼4¡ Qõ=*õ†“Æ�-ýÕÙ··ID@¬FBXŒòõ¤Ú�ƒéÁ-à`¢_³ÇnŽ¥˜�2>VSÔçš§¡ÜÅhA«=”¥°ñ´HäOp3“רüiÊ¥IA´¬ÓìÿÉþ@©ÁI&ï§ø+ó(.›u3¿Ù šê5r¢Xbb­�ÃЃøÔqY]Ì’û¢êGJÒæ;u¸{yVád(BŸ¡é[M{is¤[Àš‹Ù5·š%F"]Ä�F=Ž9«š¾»kw§Ü}™íÇÚ#D04rï\cŒîØ1ާ·©Ì—/_?ëÌ�cO•¾nžF‰ÿ!í;þ¾¢ÿÐ…{-xÖ‰ÿ!í;þ¾¢ÿÐ…{-xù×ñ#èz9WÁ/P¯ø«ÿ#U¿ýy'þ†õìUãßäj·ÿ¯4ÿÐÞ¼üñNÜWðÌßøžÍÿ^Íÿ¡-z+Ïüÿ!ÙëÙ¿ô%¯A®ŒGÆaCà (¢°6)êKC›»`~B±\ðz‘Ïÿª¨E}e yQ¤£ŸùîçŸÎ´o­>ÛŒHc!·d úÿ�fÂ6»÷ý§æÎsåÿõë¿: �ª=~gzu\ïRÊA,nÊÌWŽqÀã5ÃxÚEÜ ní¢b¡>¦ñ4.yì ò†\ó�»‹O±@c2 mÙ#ŸáYº¿‡#Õ[†¯ßL�€ÚA~ù$à“�ÓÅ_•ÉòluÑºŠæÜç¼9pϨ¢�&Îwº–é’õ®ÌŽ#I6� BHù€ò9⹋»t“Gº–+Byå³oø—pFOÙØ®•H,¼¯s‘^‹c Oa.žër’µµ½ÂHî^I]\¶=2¿zÉ“À%íY ݬ’Ê|ÉMŒɇ'-°‚¥TžÙ5ƒNƪHÎK{�+Ã)9{´�oÙä†&kL+!ÙÕÜT“€8ãÒ ˜ÚC aÖ[«¡¶qeªJeÕLŸ¼Çãð®ÆÏJÔ4ë7ŠÉ´{i@ÇɰdB1ÝDœžœæ¢µÒµë;‹É£ÔtÒ×R‰\5›àª¼~÷¦S°szÄŠu{¸ç·¶œµÔ6…¦´yþAoægËB Ùç’=©þKs¯ZÜCgklïiv�öx !öNŠ S’CÓ5»ÿò\êÓÞ–+-ÄsÀÐLñºŒœ©sÁ¥±ÐÚÃ\ŽxÊyc@ey$w‘ÕØ¶ïu=ÏZ-¨®¬2ç·ÆÖn® 3ÛLZÿ»v`…õäõ­úȸÐƳ¦u;ä’,„� {N7/)œ£½kÕ!6QE1Q@QLŠ( Š( ŒQE%´PQKEhèŸñúÿõÌÿ1[õƒ¢Çëÿ×3üÅoW=OˆÚQPXQEQEQEÏðþ5^¯2†#Š‹ìéêÔZгötõj>Ξ­@¨«?gOV£ìéêÔZŒf¬ý�=Z�³§«Pj*ÏÙÓÕ¨û:zµV¢¬ý�=Z�³§«P[áSÒ*…ŠZ(¢Š(¢Š(¢ŠÀÀ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¨®?Õ�­KH@#dP*×ÙÓÔÒ}�=Z€+QV~Ξ­GÙÓÕ¨µgìéêÔ}�=Z€+QV~Ξ­GÙÓÕ¨·Z¿Q¬(§<“ïRP•xÍ|SvH 0B=ÆÀ?¡¬ ö_@°Ö•~ÔŒ$NHÎJÇÿ…}¤ÿÏÅïýöŸüM}4£QŒîšVð¦jS xc“Œ‰8>‡²?á ›Ïòòvçwú×e#«drUÄû9ò�:È»‘ƒPsYº�ˆ´­*îkËØb–VÆE ²rÏ®*Λ0¸†I8É““êp+‹ñ´Þ^±³êL!ò6y',@ÝÎs~n0Ö¹+EÓ“�c¦”¹â¤uÖúÝ•åЂÑä¸äƒ,Q³F¤z¾6þµYüU¥¤Ld}±8S•Æáæ÷©'CN¦yÿý½ï­b:•ÇÙ.ä½�áxá;¶L’¾âN=8®>ØXý•H<‹`Òî²£}¢>Xþm¼œ«àžÞµ““5QG«·ˆ4Ñaöèç3Z |¦š.ª}N;{ô檯‹t·1„[çórcÙc1ÞR¸^qíT`¹¸‡LmJ}NxbHª†ËËIå@«1`zäó�^3|–A–IÖv„7YÊù!¢F#"t ’AåzóÒ‡&„¢™ìHÁÑ\ á†âJu¥-Y"QF( AEPES¢Š(¢Š(¢Š(QF)h(¥Å&(¢Š(KDÿ�Çÿ®gùŠÜõmô5‡¢Çëÿ×3üÅn?ú¶úç©ñCbu‚" ì^”¿g‹þy­=~àúU-SVµÒtÛ«ë†&;hÚY0[jŒœ úTZû<_óÍhû<_óÍi!¹‚áá™]C)VÎG­c¯‹´–Û¶IIyÖYçtÞJ·¦Òàóè3@?g‹þy­g‹þy­2òòßO²šòîe†Þ/$Žp ÊѼc k¢ÝluKW¸¸Mémç/š8Î ƒ�@ê;PÇÙâÿžkGÙâÿžkX—>1Ò­[Pö�ºzo¹snȉÎÜÀO8ÇkCOÖô�Y�tÝRÊñ£¸¶¸I ƒÓ;IÅ[û<_óÍhû<_óÍjJ(?³Åÿ<Ö�³Åÿ<Ö¤¢€#û<_óÍhû<_óÍjJ(?³Åÿ<Ö�³Åÿ<Ö¤¢€#û<_óÍhû<_óÍjJ(?³Åÿ<Ö�³Åÿ<Ö¤¢€#û<_óÍhû<_óÍjJ(?³Åÿ<Ö�³Åÿ<Ö¤¢€#û<_óÍhû<_óÍjJ(?³Åÿ<Ö�³Åÿ<Ö¤¢€#û<_óÍhû<_óÍjJd.d‚78Ë('JO³Åÿ<Ö�³Åÿ<Ö«O«Z[^½¬²mxíšêF#åHÁÆIíßò>•CLñ†ƒ«Ù}¦ÇQ†r°}¡íâa$Șç1®[<�Œg×R{ ]ÄÊ#Α¹÷•\ŽøF>Ú³e¨C¤ÛêP0\@·�¿1VPÃ�\”?ÙâÿžkGÙâÿžkXÉâí*_õo+ƒ¼¨V2K‰™•s”lŒqùԺ׉ôϺ®¢×)º6—tv’Ê¡W–%‘H'=4©öx¿çšÑöx¿çšÖt"Óî®à¶‰¦3JÛ6¼-Cå‰0Á€#å ôïŠÕ þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©)…È�SŒ'ò#üh>ÏüóZ>ÏüóZ{: Ë0QêN+>=nÆMb},K¶âRs¸�¬ŒXyÁSŸÂ€.ýž/ùæ´}ž/ùæµORÖì´¥�®d!g/´ Ý€¨ÎÌ} yúzÓ´íV×UûWÙK‘m(…Ë.ߘ¢?ðZµöx¿çšÑöx¿çšÔšŒWV6ò‡/{1†-£#pF~}Õº�ìñÏ5£ìñÏ5¨-5/n¯má-æYJ!—#qEq�^Uº�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZ>ÏüóZ’Š�ìñÏ5£ìñÏ5©( þÏüóZñŸŠJÅ‘€dOý ëګž)ÿÈÛýz§þ„õÕƒþ)ÏŠþŸà�ùKÿ^íÿ¡-zpÿ�ä¿õîßú×[â>3 QE�±Å´7Qùs&õ8Î9ªßØöóïÿ�·øÔ÷3¼…!i™›hU v'$ž;RE<î™’ÎHϦô?û5mUGÝnÞ¦Rö|Ö’×Ð}½´6±˜áMŠNqœóP\iVWWQ\Íib$ƒ’8#, €HÎ2qÖ¬Ç(“wÊÊTà†úgú×3®øµô�n+%KUnn„D3g£a@SœŽ¬µŒÛ¿¼i­î›6Ú-�œ–on�´…á‰dmb¤ç<“•­gY´D×w…a€CÌŸ»Õ÷—®ä^¹t¦XxžâòîÝ^´¸šx£ž;“!>Vì�»o÷¬ÓãÇû,²-›n,­òŸæC2¦Ò2û[pÁÇ8íÌÝflÍá[[¨dK»ËÛ‡‘÷´®ê! º p #޼Ӈ…4Å›!dò6H†Ü°ØwŒ1é»8uÀ` FñE->™t·NbKTxÚAò—¾`åã5B?ÉwSÝiW 4M �±0�Ëæv!ºdt£Aju(‹j‹�ª9â�\ýïˆÚÖâåTXˆ¢òÔIsv Ùw$ƒÎÒÆ{ôÅ;K×ç¾Ô£µ–ÚÌE-»Ïö·žz�ŒªGÜÛ×µ;¡Y›ÔVÞ)¶Ž÷ä‰äÓc;./טâ~ÃÜz‘À$f¬êšÔV hѼN'}ÅË|« �Îù€ýH¢è,Íj+—>#ÔÒêT}>Í¡Šêw’;¦$™JãÆ2@`HÈ®¢šÔ°QŠ(¦ Å&)h ¢–Š(¢ŠQEQEQEih¿ñøÿõÌÿ1[oþ­¾†±4_øüú昭·ÿVßC\õ>#hl[_¸>•Ãø×HÐtémüMy¤iÓˆ¤Ùx’ÛÆÍp��‘¸|Ò) Gr7Ö»…ûƒéY‹áû¬Ve–âìÄg�ºÁÆ?v§…ú�žzÔs>ðÕ”þ¹Õ4Û{ ?PÕCÉŬ(M¬nTB¼d(Dzk�þËGð¶‰wuá¹õ!Ó#ŠåþÎSËÝbPÏ»æ,àäKsÇ5ëžÓì5I5 4’ÞIsæÅ¬±HÇøŒyÛ»ß昞²MOÒCÍö{�â;†âbeeÉÇ<¨ÍrúúYZønÔ7†õ;?!˜ZÚZ´A!‘œvó¹�Î2N)t½^gN¸ñf•vº¥Þlà•ZoÈÎB…‘›,#$±€àWc«ivúΛ-…Ñ�C!RÆ'(ß+#‘È+:/ipjw±¾ f´�É›PšeÉV^VFaÑ�#Þ€<ïʸ¹ñ–£r‰s-œ·–«f&½•·8�Œ´lpÉòË"ÿt Æ3]_€�#𿉭m© \�|«·>̬àuÓ¶‘ º¼¹IeŽ{˜Ñ7®Òb*L‚ù�\�j“LÓ`Ò¬!´€³,I°I& ·$ò@É?�\¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(;WmLÁZ"Í3lk™+n¸åöõcØ™ëÅTÒí5M*üÙI<º†šê^;™äh_º?÷Ôõr9ŒVåTVßñëû‹üªZd(c‚48ʨJòŸÚ^/ޝažé.#¼6ò<2ƒåy+ãÙC ˘ÃHõâ§Ðï.t�#WÕ ¿†ááÓ¦–îW{m‰ *ÄÊø1‚FBî o'§q¡ZÜ_]Þ•g¹‚8 )"¡|ÈàŸ1�ö¨ÓÃJY]Ú›v‘o"0ÜI,¬òH„´¹;±Éà ñ@â>X'ÿ„“ZÔ´Í^ÎÍ¢–ûNŽÌªÑ©eg~�ØŒúq[Ri?…¼)ad,í¯Vö"ÌaÝšb�±*¥r3žãµt#Â: 6ʶ1¥µ¶JZ Ä%�ñ²ºàœõõ¤—ÂZlÚU¶˜Ïx-m§óâU¹udà€¡ÁÜ }("ò-r?x`ê—štñ}®m«kjñ0o³KÔ´�‘øW«_Ây§¹D�Û!bª Æ]ºäóÖ´h¢Š(¢Š(¢Š(¨¢ÿY?ûãÿAZ–˜ˆUä'3d~@JÃñg‡,5ý&_´ZÙ5Ô+¾Þ{˜•„l¤0Ÿà$á®[Áú†üSªI­[h:Uµ½œkvéDùÇÒ£P‡ýâ85Úêš –³,&üK41çýÊ« á±èr=©—¾Óoo ½1¼pí =´�•î¤n_c‘@ h³Éªë‰¨é÷ H¯ÞgEª+µ¼E :ðªÌ ûö©´;tøs §„âƒÏ²µifšÍnRí°0æ(K;c%¾`:óŽqè0ip[Üj3#IºýÄ’äŒ#XøãŽ~5 èpÅáûm›¸`·†8RH¥Ù.Ô˜z�Î1øP�A¢xI¼I{ PÞ›èà�‘[C‘ÓÍË3o³…ÚÑq… †É&º_èÖ÷º}»MÍ¢6�$°ÚCzLÊÍj|´^˜a– ‚>\WhþÑ›NŠÉ-š%‰Ì±Í¬³$‡«‰ݸ÷$óß4Má‹[��«³"ÜšœñîÇr€Ï¾(•ð¤¶Ú®µ§^iÐÞGjÑ}²Cx··D[¼{Xcw˜Içèµ…¦øOMÒZÜÙÍ©$vàámJv‰@ar¸öÅnÐEPEPEPQ7ü}Gþã5©i… �_Œ#ó#ü(í>ÏSµk[ûH.­Ø‚bž0êHèpkˬt_Üë–þ:N“çØNežìCùàL2&~ñs•eb~ð¯OÔlS³kYf¸‰�Ío)�ˆôÜ9ôâ©Ëá}]*=4éñ%´M¾!Q£oï+˜7ûYÍr>&Ð¥'³¶¶�ä±—Lš´Û4Ž0±¬°y�wQ¸1‘Àãž±ø;Oµ‡Ä:³ÃàÖ´‘5‰r¢Ø0`�+Óܟ”óýk·‡E·†êÂãι’[($‚6–Må•ÊXžIù?Z–ÏL‚ÊKù"i7_Oö‰rz6ÅO—ÐaãšóÏYjVúÕ™´ñ­vºPûmë0€´·îþ@±}ò�+`ƒÂôÉÑêÝ[évVzÅýüº¥ÜA.œ¦c„aä!£UlRõa[Ú^�g£Ú´ÊçÌbòË+—’W=YØòOÿ«¥&›¢ÚéóÛØ™b†W.±ù„¬Y„îŒó�ÆMrw&îøL/¬^Aqc¨Åv¨„�4%´%£#¸eÜ>¤ÕÜA2\ÛÅê¨*�À­*(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+ž)ÿÈÙýz¯þ„õí5âÿ¿äl�þ½WÿBzêÁÿçÅ ¡àŸùKÿ^íÿ¡-wõÀx'þC’ÿ×»èK]ýoˆøÌ(|ŠLRÑXÚ¼¦DpúÀ8úç~Ýsçîþ úžŸJìè®ÚµJ¼·9+a½¤¹®gi™­È?ëçè+™ñÀò¯,IÆÉwª YU``3½ ’0Ü·«·¦<1Hèï3&v±PJç®=+’¬½¤œ¶¹ÓJ<‘Qìp^0]x™ÿÕJÑD÷*ñÎX+»aŽÕžUçqô<×9 2AglæÂómÒ‘¬M070 —ÄžxbŒä{{†!/š#A&ݻŒãÓ>•Thú`VQ§Zaã0òWæAÑO�j˔Әå%ÓôæÒ.mu ë=:çí*ìÏs$ƒ”áG`_+¸¤<ÓŽæËS™­ïîy<Œà•ÝQEƒ˜óK;˜•tæ:†œÒÇ©ˆþÂw‰‰3ì.ÀË–l Ùe8¯J¨E• P¢ÖóòÇ œîúçœúÔôÒ°›¸”RÑT!(¥Å&(¢Š(¢ŠZLRÑEQE£Q@Íþ?þ¹Ÿæ+mÿÕ·ÐÖ&‹ÿ�ÿ\Ïó¶ÿêÛèkž§Äm ‹+"…=©|Äõý*½–<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=J<Äõý*½cÌO_Ò�1=J¯EXó×ô£ÌO_Ò«Ñ@<Äõý(ó×ôªôP�1=Jñ¯Š<ø®3ÿN©ÿ¡=zíyÄïùbÿ¯DÿОº°Å9ñ_Ã(ø'þCrÿ×»èK]õp^ ÿ�ä¿õîßú×}Šßñ˜Pø¢ŒQX¯^d�<™R"_ ì»°0z®*®™FÉ/¡wëþ¤ƒÿ¡SõHgžÕVÝw8pHÎ8Á¬ì�OÍß°õÎÝë�ç^†�S÷ä“ùUåUOÜZ-¼­*¹%H €Tc#·j«­éÚ\«åÇ–Åw}Æ`«œeˆ(÷8§épO«-Âírä�œñ�Y#Ñ5]Yî"·¸ƒì³Z˜•%–DòÜç-…áó‘צ:⬔fÔ6:©]Åsnj\ëšm¥âÚÏrV*>ã¾îX ûš\Ó“Q s‹‚Û(Ûwc;wcnqÛ9¬WÃzÍúI¹·h B#ß,‹åÛ¸mkd‚wFzT·º¯y«G<—6òAôw1––@V5 ì>PqžzŸjÊìÒÈÙ‡\Ó§Ô „w9¸Ë¥+÷€b0Hî­ å¢Ð5vÖì¯.î-å[k™$2y²te`Cò¦7�×ϯUM\NÂQKE1 E- ¢—˜¦EPEPEPEPEPE-”b–ŠhèßñøÿõÌÿ1[Oþ­¾†±toøüú昭§ÿVßC\õ>#j{¢¡»µ†úÒ[[”ß ªU×8ÈúŽŸZăCÔ¦ž85M@]iÖ¬‰' å|ãÐíôxò}* :毼Q1ÕÒÃDÓÛTòý¹¡’5ò€åRì¡›8ÈÏÊ:òEtµæ,‰îüM¦­®hú,0Dn!cuvehÙ¼Ä$`89ï@Xñtrø^ã[[U¶HähÑoîc…$ ã!Ô°Ær3œqY6¿L¿dqd/â’36›"H!•É)gu ­ŸCŽ™¨à¾¼×<'­éÖW:}ÌPJ,㺱�ˉa1#3(ÜܨfQƒÔ ʰÑnNÒ㹚F·�YÛÂí…g ®ÌÜuÀd@zü†€:MCÆw°ÃçØè‚X—OŽþEº¹ò$UrÀ.ÐŽ3òú÷«zV¹­ê…å¼Ú5”ÙÍäÍ"ê ä7–®0<¡‘ó¨ê;úsÊ_^¼Z•�¦·yg§Éq¦Y ׺œ!ÂI#8P~ñbö šÔÓõ[i¼U:iþ!Ñåµ½¼ûSGÐiäŸ�ÊÙŒc*plñŒPt?j Ô$²³Ó,D‚!,/%ÅÂ$Ã=A01Ï>£ç6‡ª^jj6×ö°[ÜXΰ°‚c*6cIªžŽNÕäZ\«ý›¤¯í7µœÊ,õ-Ó(ób:ª)ˆír§ z~'Ö´+3MºÔ­´÷¸g2¤³™¦i~b€ ;O :ž>˜  ª(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ò/‰ßò4Åÿ^‰ÿ¡=zíyÄßù"ÿ¯DÿОº°Å9±_Ã(ø+þC’ÿ×»èK]íp^ ÿ�ä¿õîßú×{ŠèÄÿƇÀQEs›KS˜#óKlrÊçƒÁ#ŸÿUgEe yQ¤£ŸùîçŸÎºiá¥R<Ñ9ªb# r³zŠ«c –'`ÌFþã�Æk/XÖ.#–êÂÂÌÜK ±ši<áˆ6BブùIÇ:Ö‹„œY¼:MÔWm®Þ7‡í-m-žîå4¨®.fyöÜœ�K1Á=¾´[k·�áûK[Kg»¹M*+‹™ž}…7'$ÌpOo­gÌ‹å; +7òI7†t©evyÎgc’Ä É'¹­*d…QLŠ( Š(¦EPEPŠLRÑ@ E-”´Q@Q@RІ�ÿ�ÿ\Ïó´ÿêÛèkFÿ�Çÿ®gùŠÙõmô5ÏSâ7†Ã¨¢Š‚™åF&3ykæ• _1œgÓ“O¢€#B<ÜEóNdÂ�œãúðü*#§Ù-¤6våíA[v1 ÂÁ qòðãÒ¬Ñ@Q@ŸN²–Õmd³·{uO-bh” LchÆ0ÔXéÖ:d +{H‰Üc·‰cR}pZ³EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEäŸ?äh‹þ½ÿBzõºòO‰Ÿò4Eÿ^©ÿ¡5u`ÿŠsb¿†QðXÿ‰ä¿õîßú×{\‚ÿä7/ý{·þ„µÞWF'ø†8€(ÅW9±RþËíÐüÓ » g×ük/þ…ß¿í?6sŸ/ÿ¯[W0ÚÇæO*Æ„ã,{Ôqjs.èîbaœ}ñ]ëW„m§¡„éÒ”½íݳû /0ÈKnÉì?©ê¾¡v×?hº¶’H¼™M¼�|Ôç²LžF=kQd]ÈÊÃÔÓ~ÑÚ~ÍçGçìó<­ÃvÜãv:ãßþ¹Ÿæ+eÿÕ·Ð×=OˆÞ®c\×nìõmlUB($•’F{×O^âyxŠlÿuô\ê’…+ÅÛSÕʨ­v¦¯§ùÿÂO©�ùl¿÷ìVž�âf–#PeÏÉ.0ô?ã\³C<¨¬–ó0<‚#8"˜Í$ hsÓp"¼¸bkB\Ͷ{µ0z‘åQIùZçªW!ãŸùpÿ¶Ÿû-^ð–¡5휱JÛ„B×<~•‹ñ2òK+[†šVgDPT Çh\äŽ3�ø×fa/o�“�[~hø"ÂÎZ”:éù£›¢²íõY¯[Ë·³(û·žà 0ãns÷M$ÚȇRks˜Ô¢3„o¼ÝóŒ`|¿Ÿµ|‡ÕªÝÆÚ£óŸ©Öæq¶«Í´V^—©Ï¨YÇ+ÛYâ ¬ävÇ8'õRëÄÚoAg!U)-ÞÒÄãîü§ dúU,%YMÁ-Wš*8ò¨é¤®¼Ñë^ ÿ�4ßõðßú ×I\„õ©­|1öâ–rÚ‹‰åâºÝåÄr땱Üqí“ÅXÑþ!G¨½½³Øy3�"†þÐ�2qò™·ä.21œƒÅ}¦],ì~‡•EÇN/tŽÚŠäµ/ÝYkKdšéŠÒÜÈíVJ«)2€oï`à=4_Ä‚ÛO¹½¿Òuá(ª&Dv•�¶ªªÄÎIÜ@éÜWiè”Wkã•�é±ÉgtgxÜßÅ ŒìöΪ¿.À»€,Ü0@5cTñΗ§Ç¦L.`÷öò\¤“?—ò*epRIQŽ_Jêh®OAñ½ž­{cf×Z{Ïuf²âÞéX¬ØËÆW9ï‘×£g¬Öø‰uö‰c]2 $Ê�ÍÙ.±9Fo’Ù”Ž™Ãdgšï¨¬ kRëÚOÛ¥µᜈð\¬‰€C®ôFÁÏu±@U{+Û}BÛí²y‘ox÷`�™«}Hü(ÅQ@Q@Q@U=CPþωZ]]<�µ#¶�q'òI:’(å†|Ubö–³[Cus%Ï™²ÞÁ”ygl™Œm<z�sIuâ»{8ïR Ë‹&·/s 9Ž8ˆ'q'à�’;ŠÝ¢²uØh¢ÃíGkéÒV ’Ä Ç‘…†O¸õ§êZݾ—p‰qÄbÞ[™¤ÏÇ2zrI`úúP�‹‰¬�­ä×1\Ú=¢«Kñþók}“�Äç#jÕ¾¬’ØÜ]ÜZ]Y%¸,ët�NÐ3‘‚A÷  +x¦(’Ù¯tûÛe—ÊIe1æ(d“nÔ,pO,@#=H«2ø‚ }N+9í/bIfò#¹x±I‚BƒœóƒƒŒZÖ¢²õMzßJ•!x.n%1´Ì–ñï)ã.ysÐr{Uî|W§[Ê@Yæ�"I§¹‰3ÿu˜ç¡ð'€7(¬ýcV‹F°rA=Æéc…"€)ww`ªâR:š­'ˆV (&¸Ó/Ḹ˜Ã ›,fY)n0åq…'%‡JÙ¢ªiÚ�¾§`—–å„lYHq†FV*ÊGb ý+'OñtÚ[ê’éš…–œ¶Æè]\¬{YÏ]›8ç§jèh¬Ý3Z‡S–x>Ïskq «¼7 ¶6v·Œ­ß<â­Þ]%��ÅÜ¡ŒpDÒ°^¤(ÉÇ¿=ÏËã.LÖœmõ"Š 7îsÀ#8ãœóØõ­¨. ï:ù2ÇåI³2.ðåõãê MEPESSÔ`Òt»�Bè·‘m‘öŒœØzк*…Ž«ì¦Ýá–ÚõbY¤¶˜ñ«3*’T•ä£t&¨Þø¢+-NêÈiš…À´�%¸šFHÕ�#‚Á�Ý=ÐíÅuoÄ)P:0èÊFAüªJ(¢Š(¢Š(¢Š(¬k?ý»S–Ò +P0Å3À÷„F! ™ÏñîÆF>íO¦ë0jwwÖÑÁs–R,ryÑíÉ# ŽsŒzâ€4¨¬=sćBYd—FÔ®m¢@ï=¸ˆ¨öÃHŸ`;ñWnµX¬â±yá™MäÉ&Q˜ósÛ8Í_¢°.£ÓºÚÄcK»eó|¥,œ§·>�OZêÙÆC ƒ‚3ÈéLk[w�HÐFÎxb€�ØÆsëŠðbù¹šþ´ÿ/ÄüåfÒçæ’þ½ßòüN{IŽaÅôq¬R[µågÈÀ,vŸ•;þµgâK‰ÍÌlк.Ý›œíR"\WS�Á‡S�§Òºèì,áwxí GpC²Æ`}xæžöÐH<°FÞ¡�­ê=ù<ÓXøÆnI=F³8Ƥ¦“×Ïeé¯õ÷^ ŠÕtm6ËÈ[�FMFå¬$†| Ô }Næ[»ËË&è‘Ø_ÞÌåÿ‰¦Q)åOHÎ3Šä&·œÍ‹©Â—Y½ÝµŸ™p²Ê·–ت³¯Í…Îçæ {d¶ÐNÈÓC… *]ÛÆ8ÏN)RÞßzC¾Ð›‚€vŽƒé@g€®å¶ðݺ;5ÚËsä €¼�…À3‘ü¿¹Ê‚“Œu¬ŸÚý¤iïccvºŒz´ï5éFýœO&åÞN#åÚ;óŽõéI Q³²FŠÒÎU@,}O­Ccam¦Ú‹kHü¸C¼›wó;c“êÌOã@s¡Y-ìv?c°ºûrê·âñ‘„FÜO(tÜN+òíùÇz[- KMtí+H–Ç^�Q‘ã½û1HÐy’røÃ/”vãý 8íè¶6Úm¨¶´�Ë„;É·q?3±f9>¬Äþ5f€2|5Eáë8’Ò{R‰µâœáòw’OÞ%²wwÎ{ÖµPEPEPX¾&Öntm3̳°º¼º•„q¬<¡ þ7 Ú:ñÉè+jŠát؆•>—©[Ùêw6ÑZÜZÎZÍÒs4’$†Cá˜78ÀÈíU®å»²ðæ›á‹�?Q qo�B{k9gXãbKD¥åŽJç >•ètPŸx�CÖn�uK ’9¦²[Ëc!–Þ5•|`ó6T 01¥¨Y]kv~"–Nm-Ô,†/�±é—f_ø®¾™1@…!‰#BÌÅQ@bI�ªfÛIÄóC§Í*Ü:�ÈŠUHÚ�°´ºªM}â]>km?SKÛkµ ç‚m|�Hg”ÜTœ‡É÷ØÑ@ίö�?Äj euwÆŸöe[tÞVErÀØ6þ§�·’+ž¾ðÜöúz5·öªßÜi�ÙMötSk+ٹ܃·o9ÁRF5èôP1}m¦(¼Šã@¼»ŒÍÚC½d*ƒk…ÎX ;FsØòkû6él"YjéÚrOvèßiµŒG„Ú£, ¾ó€2F ètP! Û=¥†ž·šUÜ×P­ßÙ¤*ye²<Þ@H6ž{ç§5•&˜ùºÿ„sCžÊ×û6X.-æƒËYÜ” ·ÁDœôä šôJ(“ð�¤–ºž a�P:{ÅŽ]IXM½wƒwÌP ¤g»6 Ínk±¼ÞÔâ‰ä{IUQFK‡æ´( 4¼ðÞ§žÑlígÖ³YÅË’xZl¨ämØç>’CW.4ûãq©4¶WRéÍ®™® �tð}™]C��3�§®1]ýÅÅ£Úßø—JÛ¥ÜÅ¥E§ÎV)£dE:2¡�ÿ�§Ó Ç´Ý:ú;í8ý†õ5¨ï]õ ÖG,??ϧ+µGÝã¦+Ðh 8·Óµ(´ÝbÏJ²º=¾~×4Moq#n£f'9]Ø�`>µ­£}³G×ÓKÑîáÓ^ÁDv²ÀÊdº ÇrFyÈËc“ޏÍzeÆÚh~—ñ®#ÑU"’Î$µžl¤N¦@à°!ÚPsŒŽ;T²hSê^-Öž[½BÖÎ[{t" ¨—n*Oþ1Ÿ¥u´PŸkZDésªÂºuÜÓ˜c�C–Ü–ØŒ7#!Á$ž Ž½*-_FÕäÕ/, †v�åÖc�Tˆšå#Ø#Ï¼Š¯Šôj(ÌîôÍZîÂÏP–Õã·½¹¸º½µ–ÉîKmXwÄ®¬v¢àõÁÇÆŽ� K6³¢Å©-Åå´:täÉ,/oó£1«)cÈ\à1'åÏjîè 2ðý¯ÚFžö67k¨Ç«Nó^”aÙÄòn]äà‚>]£¿8ï]ùÓ3O·^ósöŒù¼Žsåôû�±éRØØ[i¶¢ÚÒ?.ï&ÝÄüÎŘäú³øÕš‚ _"{‰|ùäóÜ>É+QØqŸ©5=Pö(dñ%”Ú^‰uax·�-õÃű^2p.$ÜÅHœuã.‰ªñ¿?övª©?—,F[ cÞ ” ä`Öºú(žÖDú”Þ�m'Ó^-żg÷j‘³¨~Ëó„üF*?é“jöze¤Fᵌ²[çti†Ür>ï\g¶k¥¢€<ïR°»³ðľ{KémôûëV·–Ú)ž×ÎVùJ ï@sòƒÞ¶<-jðkŒÖ±j ¦MD>£¿Îy�`Ø2|ûBíûÜg8ï]eQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW“|Jÿ‘ž/úõOý «ÖkÉþ%ÈÏýz§þ„Õ׃þ)ÍŠþGÁŸò—þ½ÛÿBZîñ\7ƒä5/ý{·þ„µÝVø¯âaþ1E-ÎnW»¸{tB�4Ìí´*�;’O©‘\Ìé™,åŒç¦ô?û5C­Ja³Gÿ¬ãèkšûmÏŸ»ø3êz}+¿…UióUñ§;#±ŠQ(l+)S´†úgúÕ)5«Huøti7­ÔЙ£$ ¬#nsׂztº,¦k7rúÂ~‚±õ�}KÄ’¼JñºX#[\í;Re•ŠóüÇ¡5ÇZ<“q]ªR犓7tíB-NÝæ…]U%’rŒTô=2*Þ+ÍþÁ«\hÖse,væêêK«fµy°Ìä¡1«)`>nFzƒƒVgѵàÓ ˆ\ܦ¡nln¥0´f8üÐÀ°$•ÂdúV<ÌÓ”ô VE¿ˆ-î¯�¼—²D%h~Ô°æ-ã‚3œðF3Œ{Ög„m/„÷3ê0É–ÑǧÄdR7¤yË�PŇ=ñUÂÜE¯DúMާg,·y¼ŠDÿFxóó¾rT1�§$õî;*+Î4;Qqýžö67K£#ÍxU„~H•÷.ãÁq´wçÞ§´·Ô_Ä6÷6Útö3HnRr`}ªJ1MòCüÁH `t£˜9O@¤< ×4ù�‡d‚ÇL¿·Õ¼¨ÅôÒFÙ› ¾` ¸o'’0y­Ï Ú=•µãæU�Ü2@lžÜFBóµ˜óÇâ(L/YkÐ^_-¡¶»¶’HÌ�›ˆ¶ T’¼çŒŽž•­Šäô›÷Õ|Lonì5 bˆÐYÇ-œŠ¨§–wb0¶€x¦ºÊi‰ Å¢Šb Rb–ŠJ)h¦QKE%´PQKEQF(¡¤ÇÛÿ×3üÅl?ú¶úÇÒ?ãíÿÜ?ÌVÃÿ«o¡®zŸ´6T/ô]7S‘d¼´I]Fƒ�LŠ¿\ƹ®ÝÙê&ÚØª„PI* $Œ÷®lD騮ŽÜ%:µ*Z‹³ï{áпèŸ÷Û�ð‰h_ôOûí¿Æ¹ïøIõ1ÿ-—þýŠÓÑüLÒÏäj £yù%Æ>‡ükް³—/*_$zpù…8¹{Fý$Íû+ ]:&Ò†<ä…î}O­P×t/í¯³ÿ¤ù>VïàÝœãÜzVÅr9ÿ—ûiÿ²Õæ.�<,œãx«i·UØù\æ¬u+Ç�iuv¯ªë¸ ÿQü�ÿÙQÿ7ýDòÿe\}òßZÁÐ?þLψúî_ÿ@¿ù<ŽÃþoúˆÿäþÊ�øA¿ê#ÿ�?û*ãè£ëX/úÿɘ}w/ÿ _üžG¦èšOö=›ÛùÞvé îÙ·°ê}+J¹¿Èoúøoýk¤¯­ÀÊ2ÃÁÁY[mϺËe á!*qåVÑ^öù…Q]ghQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW”|Iÿ‘š/úõOý «ÕëÊ>$ÈÍýz§þ„Õׂþ)ÍŠþOÁ¿ò—þ½ÛÿBZðhÿ‰Ô¿õîßú×uŠÛüC”b—b¹Í„Å%VÔhâO&Tˆ—Ã;.ì ƒŽøªÑ^: ’_A#õÿRAÿЫhPœãÌŒ¥Z1—+4¨¨mfi‘Ë8l£»VlÞ"µƒÄk£É¡Ì"O0FåA'p¸Æ9Ýœ•”“‹³4‹æWFÅ•‰t{„�ã¾M�Fevee?¼ 0÷RóÆu³Yl[‰Vâso()…-�»2ON=óÚ•ÑVgAE;ÒÐIZÎÊßO¶ö±ùqf ¸žY‹¾äÕŠZ((¥¢˜ E-”RÑ@ E-”RÑ@ E-”RÑL¥ÅPE¥ eý#þ>ÛýÃüÅk¿ú¶úÈÒãé¿Ü?ÌV»ÿ«o¡®zŸ´6^âyxŠlÿuô^�^oâÖ#Ä“€3ò§ð^fdíIzÿ™íäŠø†¼ŸæŠÍ ò¢²[ÌÀòŒàŠc4�(I uÏMÀŠÓ…ZÞVë_–Õš%u‰#‘ÀR2:J‚öþ!¦ËmöÉ5 $udi€‹É=Nq^[‚JíÛîÿ‡=èÔr—*W^�󵿧ð–¡5휱JÛ„B×<~•‹ñ2òK+[†šVgDPT Çh\äŽ3�øÕ϶èo¿ÞOäkãaô«,¤6Zh·„ùG äm9ÀžHâ»æ•\ SÖöÿÒ�ˆâZ0½Jmixþhå­õY¯[Ë·³(û·žà 0ãns÷M$ÚȇRks˜Ô¢3„o¼ÝóŒ`|¿Ÿµ` 6&›‹;Pb’Ö$&_›ŒžªËŸcSê0­;­¬F4»¶_7ÊRÉÊpp#èõ¯ ê´Fº[ÿ‘ë3à~¥†u\z[ñ÷zÝßsgKÔçÔ,ã•íŒ,ñVr»cœ “�z©uâ í7‰ ³‰�ª”–ïibq÷~S�2}* &8„WÑÆ±IlNוŸ#±Ú~Tì?úÕŸ‰.'71³Bè»vnsµH‰pY]NwNvŸJpÃQuexû«úµïýyžƒ¯5(û«×{ì�ÿá¼¶=_ÂzÔÖ¾ûqK9mEÄ�rñ]nòâ ¹uÊ�Øî8öÉâ¬hÿ£Ô^ÞÙì¼™ÈChH8ùLÛòÎAâ°üªèÚm—�·Œš�Ê X2I x̬qaÔ(9<²šèµ-6ßú†‘æ¤ l·>uüó!C ¸Ê³~`�ºâ¾ŸQØû,¾1Ž1ŽËüÇê^1º²Ö–É4+Ó!¥¹‘Ú<¬•VReßÞÁÀR¥S‘óÂŽG¡4ËíÏà};ÃROýŸÓa]CPœlŽ%òÇȤãs1 tïŠÚÐ|og«^ØÙµÖžóÝY¬¸·ºV+62ñ•Î{äuèÙÆ+5¾"]}¢X×L�BÉ2 svK¬NQ›ä¶e#¦pÇæ£ðV¥êw2ÝÞ^Y0·DŽÂþög/üM2‰O*x @èqœW!5¼æh¤]N¸šÍîí¬üË…–U¸”¶ÅU�~l.p?0èhÖ|5­K¯i?n–Ô[†r#Ár²&»Ñ=ÔVÅq»–ÛÃvèì×k-Ï’‚ò< ÌGòþç* N1Ö²|?kö‘§½��Úê1êÓ¼×¥Göq<›—y8 �—hïÎ;ЦÕ{+Û}BÛí²y‘ox÷`�™«}Hü+Î4+%½ŽÇìv_n]VàÜ^20ˆÛ‰å›‰Á~]£¿8ïKe¡Ii¢®�¥iØëÑê2—©[Ùêw6ÑZÜZÎZÍÒs4’$†Cá˜78ÀÈíU®å»²ðæ›á‹�?Q qo�B{k9gXãbKD¥åŽJç >”Öêþ#°ÑE‡Ú Ž×Ó¤¬@1%ˆ�# ŸqëOÔµ»}.áãˆÅ¼·3Iž#Žr±M"+ùÑ• ü…>�8¥¦é×ÑßiÇì7©­Gzï¨^°"9aùøÞxu9]ª>ï1@ƒU5=F 'K¹Ô.‹yÑ™hÉÀ‡­pvúv¥›¬YéVWBG·ÏÚæ‰­î$mÃtlÄâG+» ÇÖ¢Õ´o¶húúiz=Ü:kØ(ŽÖXL—A˜îHÏ9lrq× öÇUŽöSnðËmz±,Ò[LxÕ™•I*JòQºTo|Q–§ud4ÍBàZF’ÜM#$jÀ‘Á`Çk*Ó@Óô¿ˆ qŠ©–q%¬ðÛe"u2€ùÒƒœdqÚ¥“BŸRñn´òÝê¶rÛÛ¡mD¸pÃqRxÏð‘Œý(©‚x®­â¸�ÃÅ*FHÈ?•I^}­i¥Î« é×sNaŽ=[pJ[b0Ü8Œ‡’z‚:ô¨µ}W“T¼°‚Ú?—YŽuR"k”�`�>ò*¾(Ѩ¯3»Ó5k» =B[WŽÞöæâêöÖ['¸e-µaߺ±Ú‹ƒ×w:v�,Ú΋¤·–ÐéÓ“$°¼I¿ÎŒÆ¬¥�!s€ÄŸ—=¨»¢¼ËÃö¿i{ØØÝ®£­;ÍzQ„gɹw“‚ùvŽüã½wçLÌe>Ý{ÍÏÚ3æò9Ï—ÓîvÇ¥^¢ ‚×Èžâ_>y<÷²GÊÇ€vgêMO@Ö~!ûv§-¤V aŠg�ïŒB3ŸãÝŒŒ}ÚŸMÖ`Ôîï­£‚æ),¤Xäó£Û’FAçõÅs¿b†OYM¥è—V‹xòß\<[ã!÷àâMÌT€ Ç^1Rèš okóÿgjª“ùrÄe°–=á"€Y@ÎF=hO\ñ!ЖY%ѵ+›h�;Ïn"*=°Ò'ØüUÛ­V+8¬^xfSy2@‰�”füÜöÁÎ3YºÈŸR›Ã±­¤âÚkŸ¸WŒþíR6uÙ~pŸˆÅGã=2m^ÏL´ˆÜ"¶¡–K|î�0ÛŽGÝëŒöÍMqâË8lno"µ»¹‚¤´F…SÈÌ ¹†@c‚NsŒâ®ézÌZœ·}žâÖêßi–Þá@u �§å$pzÐשX]Ùøb_½¥ô¶ú}õ«[ËmŒÏkç+|¥w  9ùAï[µx5�FkXµÓ&Š"Qßç<À°l>}¡výî3œw ²Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼§âGüŒÑתèM^­^Sñ#þFh¿ëÕ?ô&®¼ñNl_ðÊžÿ�Ô¿õîßú×s\7ƒ‡üN¥ÿ¯vÿЖ»œV¸ŸâÐøŠ(¬ мжÊÂFqÆ sÿغ§›¿Ë=s·zãù×_EuQÆN”yb‘…L4*K™”4˜'·´e¹P®\�3ž0*†«¢Ý^jææ‡ÈžÉì®±VUc�É€ry<}kzŠç©7RNO©¬" ”QÇØxRæÚIà²�ÒØÛÄòÜÏ*º’¹á Û88ô§§‡õ”†ÚQqnÓZÞyð[Ë4ŽˆžYBža�Ryt®¶Š‹"îÆŒàgïŠZZ1LBQF(ÅQE0 (£QF)q@ E.(Å%´PQŠZ(Å¢Š(¢Š(¢—{Iÿ�¦ÿpÿ1Zïþ­¾†²tŸøúo÷ó¬ÿêÛèk ››CaÕåþ3`Øü}«oN²û»Eæ™ bÙ#€þ•Ö� Ω£çOÑ¡‰„l6Ê„çkôÁ®*Ü®o“c®’j)Ks–Ó¼Aâ9×Ûímßí±»;€<àœGòs�ô®ç�…- ·´Š+ëôû–¶q"î‰HÁAòò¸õÉ÷­úÍ_©lLQKE1 E-”RÑ@ E-”RÑ@ E-”RÑ@ F)h¦Š1F)q@ E.(¤QKE0/i_ñôßîæ+YÿÕ·ÐÖN•ÿMþáþbµŸý[} aSshl:²5í@êöú^˜¶¢i!yÞK�ÅB©UÀ ‚N[Ö¯_ßÚévR^^Kå[Ç�ï‚q’àsÔŠå“ÅÞC© ^v� �‹3« ½0¦²“KK�TiJW’�×§SkìÞ+ÿŸ�þüËÿÅV1ñ¹§ê×ÑjÖsÙXy_j’Ñ:,ŠHp 9QŽ{÷ªÒx©¦ºa�lÏ–‡Nb@'�žõ½‰­Yê7W°_XÍ-äq-ÇŸnØ,ŠFT+zT^ûŠÅK]´k·—cf¢¸…&†E’)2:œ†¡äuÛøZÚãMÕµ­6W‹É…â’(¡GpK’N3Šòùuׂæád°ŸÉˆ7Î3•RÍ‘»¦Ý¤}kÂÏ)N·³å[s~‡ÅqVs�8ÓÖ×}·å6h¬ùï®-l'ºšÊHع$ôÏsŽ™ªƒ^‘®b†+9%vUR¤•Ù‚7c Cw¯žŽ¬•â¿«\ù`«M^+OUm÷6êæ“ÿ!›úø�ÿB‡yqm ϼrÆTg÷¸ÚÄ€3Á㞢—Ãzë^xžÊßv�…¹ŒæâÝTmÇƵÃájÊJihŸuÜÛ ƒ­)Æ¢Z'®«º=ºŠã5/ɤ_[Ú^ÙÛ¬„»Í¶öS?vÊÒ² ±Ï‘µ¸Æ _�Åé.‡&¯“y-¬lw'¶—å–mË)\ `óŸjûãô󤢹=/Åڅݨ3økRkœod�­ð¨Ä”Èi·W@ç5Ö�1ìh¢ŠÄ¼ñ=�˜ÔƒCpïa402"ŒË$¡JÉï½G8ü¨nŠŽ kxäx^u b�‚ÈOc‚FG±"¤ Š( Š( Š( Š( Š( Š*ž¡¨gÄŒ-.®žFÚ‘ÛG¸“‚y$€IrŠÃ>*±{KY­¡º¹’çÌÙo `Ê<³¶L‚F6ž=H9¤ºñ]�½œw©åÅ“[‹—¹†ÇD¸“Œð@ÉÅnÑY:¿ˆì4Qaöƒ#µôé+ IbãÈ‚Ã'ÜzÓõ-nßK¸D¸â1o-ÌÒgˆã�=9$°}}(NŠÅ�ÄÖFÖòk˜®mÑU¥‚xÿyµ¾áIÎâs‘޵jßVIln.î-.¬’Üuº@§hÈÁ Œ{Ð…€+Ó­å ,ó@‘$ÓÜÄ™ŠºÌsÐŽx“�@”V~±«E£X ¹ žãt±Â‘@»»°Uq©MV“Ä+”\i—ðÜ\La†Í–3,Œ·r¸Â“’Ã¥lÑU4íFßS°KËrÂ6,¤8Ã#+e#±~•“§øº í-õItÍBËN[ct.®V=¬€g€®ÍœsÓµt4Vn™­C©Ë<g¹µ¸…UÞ… Û;[‚FÖïžqW®'[ky'u‘–5,V4.ÄE’}…IEr–~7·¸¿Ô"kSÊ·‘3—pÍÊ+À'æèqÆz“Xñ¥ž›ge*ÃwæÝLаÉe0qš‰#Û‘€ãêH9 žŠæáñk]j6Ö¶Ú%üÉuÚ œWúß7ø|¿ö½?ñš±¦ý°i°h7{y³¦Ç×g8®sa÷×�éÖÞ\¶Ø`BîG\OzÈ>.ÒÖ�’øB„«ËöŠ),GZ‹Æ¶óM£DépR(®ai"ýne@=‡9üp×W—ÿÛ2ø|¼«e3Éæ¢^¡‰dw WÌû>@ÜøÆ,GJ—+•ÏR7ð�LØÂQžX�—ní½}sL´Õ­/ žXäÚ-äxåÁB½síŒú^}â{q&±ªH4H¡”éÄ<ÎÊ vb»Ó–É!yÚqŸ¥jÏ KÜ—WN‹§Y-„é4–ä´g%óXÉSÓß§wÌÂÆ²xëÃÏok7öŒ#í !‘CG�N\gå~¢·-/muöw1\BIâpË‘î+Çm¯%ÔV$¼–ÚÌO%ÒÉæÿ¢�®Ù#Ìq"ŽW ÛŒ÷¯Nð…Ü÷Þ·žæqq&ùSÍ pYG xœ ÒR¸5cnŠZ1TH”Râ“QF(Å \QE0 QŠ( Š( Š( Š\QŠJ)h ¢–Š%¥¢€/i_ñôßîæ+UÿÕ·ÐÖV•ÿMþáþbµ_ý[} c=Ía±ÍüAÿ‘Rÿ¶ú1kŽþÀðtH%–ðÒ6a¶ñXΡÝ€2‡vFÞ¦½+VÒíõ�2m>ë“67l8<G?P+ŠxbÓ\‡O¹Y–9­ÞUš[�¿2²�£�ž?…sT‹nç©„­Óä»Níéè¿Èçnô¯Ç¢[ßYLé¤�£O´«³fF uP§>õêJñ¿2��mæîò>ÀŸs9Û»9éÆk < ฤW2�Foø×aý©§ÿÏý¯ýþ_ñ§ÛqbkóÛ’ï}×§©�aÿ#‡ˆ?ݶÿм Pµ&êü­µ‘&?/ j£1p§ïpÄãŸqÅ{Ε4W*׿‚D–#öu�•$!ÈÈôȯ>Åxù¶)áÜW½ÿ4|—ã¥&•î¿Hœ¼Ö6ööšÊ[ÚÄÚ"@¢1‚6ÄqŽ22Oj�¤æ¶[Xãs,§b9· òCÏÈÍÇ=9þ]‹C Ä3eG$cþCò¨_N±’?-ì­Ù7ÚÑ)�SŒu¯žadÔºÿ’_¡ò´³NXµ$Ýÿù»®ßðL+ù-"Kh¡HÃ4h$•I pz¼+žºjO Ú<>$ÐÒyœÃ ÄJªáù,‡��ªðOAÛf·–SnØ�l. Ç™üêæ‰0ë6žTIû¤fØ n%†Iõ5t1ÉZšOWùÿÀ/ ™(µN)êú¾ÿð¯HÒ4ýoM1ÇseeæÈ¶‘Ù^M´[Žª01ÉÄVzÅ-ï„ï´/T½‘/'Š_"â32Ãç¹L¼ç ¨äà×vª¨�BªŒÈàŠ'‘ã‰å;¤eP œc'Ôà_j~ˆy¶š5è¼M¨¸ƒÄ’2 s$~vž ú q´ƒ×=«sÆw~~”�Égx‹§d­òãÍ "# óÔ¯æºå†$•åXÑd“Ü(±Ó'¾*Û mB8£º�ÌX¦IÐn#ŒO„@+i×_f¾{-:öKÛv6!$x”8ªd0Rvex'kqÏ4çðüW–ºªE¡N¶rjÖ[Á-±»RÈBž‹�ùôÎ+Óè ÇCE„�*ªŒ@)ÔQ@Q@Q@Q@Q@Q@bø›Y¹Ñ´Ï2ÎÂêòêVư@ò„'øÜ 'hëÇ' ­ª(…ÓbTú^¥og©ÜÛEkqk9k7IÌÒH’ d†`Üã#µV»–îËÚo†.týD%žu í¬å�c�‰-”S–9+ž€dúW¡Ñ@}â=YºuÕ,f‚HæšÈAo-Œ†[xÖTl}ñ€ÌÙPp0HÀÆ–¡eu­ÙøŠXTI8E´·Pp²¾vǦ]™à"ºúdPņ$� 3Ee‰$ñÜ’I÷4ÂjÚuïˆ./õ;{KÈ#T²DŠDò¥“É�¥“h=ðØ¹œÔ±¥Ì¶×n/…†£{ɨi| »çÎò\) ànî}®æ˜ÑFò$�;Œ•Ï\ÔÈx‡U7Zä:Túv©ý›m$wÍŸ4«pêC")U#h >ÀzÒê©5÷‰tù­´ýM/m®Ô7ž µòA!œrSqRpF$ÜWcEs:¿Ú4ÿI¨%•ÕÜWÙ•mÓyYËG`ÛúžÞH®zûÃsÛèQèÖßÚ«q¦Ce7ÙÑM¬¬fçrݼçI×£Ñ@Åõ¶˜¢ò+�òî34?haõ�ª ®9`0íÏcɬ?ìÛ¥°ˆIe¨C¤iÉ<Û£}¦Ö1jŒ²‚ûÎÈ $W¡Ñ@†ƒlö–zÞiWs]B·f�¨ å–ÈóyI ÚyïžœÖTšcæëþÍ{+_ìÙ`¸·š-grP( Ü;sÓ�2kÑ( OÂv’Zêz�†=@éï"9u%a6õÜ ß1@6‘žìØ'5ÒÞÞ[éöS^]H#‚.î{SÒ €AìhÇ/ʹ½š{‹¡wªþþf‚îd]$³m 2ÄÛp#Ù÷¹Ü„þ5ûöúEÖŸ«Ï,°ùqÆ–h.hüèYŸ;[;|½Ý9=sÈ>ƒÂE v,ÛT Äõ'ÔÑ ÛÇåÁD™'j(Q“É8皉4õ�?´màè¦Ù¢žeG&è@�ú|ÿ)ã¡â«xšmüV$·{ý]ÄnÑXÙêÓùðNs—*˜ùx+€HÁÈÔ*8àŠæ(‘ ¶ç* n>§ÔÐ¥[x~J5=b[ÕTD¾:•üÈ©/÷YdlÇ’qŒsÇZ墸ӧÖ¯ôwÓE´?¹“Å— ,á°HùÎåmþñ¯aòcÜíå¦çÆã´e±Ó>´y1ÿÏ4ÿ¾Er:åÖ�‡­´Ý2ëÌ» “iqZ?Ÿ&àrŒ~çbI ´‘œS|7ª‹y¯“WG‰nœÈö’‚@£�’pêpz’N3]‚ÃHdXÐHÀ)`£$ƒ4ÚóX–Ê2ça_,àä Qêk±ø{p.,µ}“Ç4ê"1^½Üj¾LG #üÄd“ìI®¶8£‹w—&ö.ÛT ±êO½ q´�h­#nrªc€2}N…>Š)(ͤÍ!4¹¤Í&i¹  iRrÖ+ÕÖÖÎúKÇ‚uT�8~#lû��±Ó¥K¥ÚÁk®Cu£è—š}¤’‹ÈÌ&?5¾RŠpì0ß0Èížk±Í¨•ñ6©ºM®Ÿ©¹K¨®äX¬e“ËM®bŠ@`HÊç5cÆëV]¼?jE{øšG„ñ¦ÖÉõ^¸Ïl×Eº�Ôçú•�ÝŸ†%ÐÒú[}>úÕ­å¶ŠFgµóU¾Rƒ;Ðü ÷­Ÿ [4Æ£5¬Z‚é³E¨ïóž`X6 Ÿ>л~÷Î;×Oº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº�Ô&hÍGº—4üÒæ£Í.hLÑšh4¹ QIK@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ygÄ_ùcÿ¯TÿК½N¼·â'üŒ‘ÿײèM]X?âœØ¯á�ðó+jÎçÉoæµÔ×áCÿ™9ÏîÿBZí*ë.YXŠr¼n4ª±¨%NA#¡¥ª÷·ðiñ¤·,R&q“*бì3ÆO¨«5•Í z–Ÿ©böwÄNÈÇaÁùX0çêRÒUR1j<…¶k_#ø 3$÷-•9ýjýþ¡m¦Z5ÍÜ›#±bz$ŸAX7‹fÔµ­eÓ$AsºX$ŠXä èχ%I#×4ýZú-BÚÎ{++íRZ#‡E‘I'*1Ï~õ-¥º7Œ*Êü²¿Ìë-ímìâZÁƒ�‘ Qù åáÿ¨�þ@ÿ쫬†h®!I¡‘dŠE ާ!�èEyxÙÍZù=­>mí«VÛ±ò\C_MÓúÅ.{ßí5m¯¶çaÿ7ýDòÿeGü ßõÿÈý•qôW‡õ¬ýÿäÌù¿®åÿô ÿ“Èì?áÿ¨�þ@ÿìª[Oý–ò �·îò¤WÛäã89ÇÞ®*®i?ò±ÿ¯ˆÿô!WKƒsŠT:ÿ34£ŒÀ:‘K guöäz�Q_j~†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE”Q@!4„Ò@4Òi ¦Œ¼Š‹ÕŽ3é@pÞ­×h?•&æÿžrÿß¶ÿ ÑŽ5‰v¨úŸZ}ee¿ç”¿÷í¿Â“/ÿ<¥ÿ¿mþ­Edåÿ甿÷í¿ÂŒ¿üò—þý·øVµ“—ÿžRÿß¶ÿ 2ÿóÊ_ûößáZÔPN_þyKÿ~Ûü(ËÿÏ)ïÛ…kQ@9ùå/ýûoð£/ÿ<¥ÿ¿mþ­Edåÿ甿÷í¿ÂŒ¿üò—þý·øVµ“—ÿžRÿß¶ÿ 2ÿóÊ_ûößáZÔPN_þyKÿ~Ûü(ËÿÏ)ïÛ…kQ@9ùå/ýûoð£/ÿ<¥ÿ¿mþ­Edåÿ甿÷í¿ÂŒ¿üò—þý·øVµ“—ÿžRÿß¶ÿ 2ÿóÊ_ûößáZÔPN_þyKÿ~Ûü(ËÿÏ)ïÛ…kQ@9ùå/ýûoð£/ÿ<¥ÿ¿mþ­Edåÿ甿÷í¿ÂŒ¿üò—þý·øVµ“—ÿžRÿß¶ÿ 2ÿóÊ_ûößáZÔPN_þyKÿ~Ûü(ËÿÏ)ïÛ…kQ@9ùå/ýûoð£/ÿ<¥ÿ¿mþ­Edåÿ甿÷í¿ÂŒ¿üò—þý·øVµ“—ÿžRÿß¶ÿ 2ÿóÊ_ûößáZÔPN_þyKÿ~Ûü(ËÿÏ)ïÛ…kQ@9ùå/ýûoð¥ËÏ)ïÛ…jÑ@{›þyËÿ~Ûü(ó 0eÏMÊF:Ô¤ 0!€ ðA  Ó�¦Í‘(��Êäô>Ÿ×ÿÕH H :£œ >ŠJZ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+˾"ÈÉý{'þ„Õê5åÿÿäd�þ½“ÿBjêÁÿæÅ ©áÿ™?ëÝ¿ô%®Ú¸ß DÑë2nòÁ¿ô%®ÎµÄ;ÏC: ÐÔ¥©´ßc1[Ú­Ä“/lŸêÀ ä¿û8íß§z]2ÈiºlbW”D»w¹äÿõ½aйŠLVÆ^¾JénË~lÙNA$^gå.ÊvçÔ ñ\‹§]Í©N4k™ãœ¸{hêö› ‰i´’g#¯9êé·–÷h©soÊ­¹Dˆê3ß“R*…PªP0íI«�;kâ!v[ýÃüÅj?ú¶úËÒÿãå¿Ü?ÌV£ÿ«o¡¬g¹¬6 ¿¿µÒ줼¼—Ê·�ßã$Àç©Ë'‹¼:þ&‡R¼"í9gVzaM\øƒÿ">¥ÿlÿôb×ý�àè�K-à1¤lÃmâ±�B»eì�½Ma94ì�K Fœ©óÎ÷Õiè¿ÌÝ“ÅM5ÓHyù¸ç '?ËÆ¥† âäÿËì§ßϹòÔp˜iAÉ«îûiÊŸ~—ît——÷Ьñ[Ç,eF{�¬H<9ê)|7®µç‰ì­÷iØ[˜Á1Þn-ÐåFÑœwük"þKH’Ú(R0Í %R@‡¯ çŸîš“¶�‰44žg0Ãqª¸~K!À`d*¼ÐvÇ«Ãa©róIkÓóùa0”9T¥o¦÷Óæúéó¹éÚ—ŽdÒ/­í/líÖB]æÛ{ ©‹»eiYXçƒÈÚÜc¯Çâô—C“W�I¼–Ö6;ŒÛKò€K6å”®0yϵWÒ4�?[ÓEÌqÜÙYy²-¤vW“@­ã‡*ŒÌrG±ž±K{á;íËÕ/dKÉâ—ȸŒÌ°ùîS/9ê985õçÞ_‹µ »PgðÖ¤×8ÞÉ[áQ‰)�Ón®:�Îk¬ cØ×™i£^‹ÄÚ‹ˆqTÈ`¤ìÊðNÖãžiÏáø¯-uT‹B�läÕ¬$·‚[b?v<¥�…=óè3œP¥Á#Mo� ÂRY ìpHÈö$T”ØãHbH£P‘¢…UQ€è:€ (¢€ (¢€ (¢€ (¢€ (¢€ §¨jÙñ# K«§‘¶¤vÑî$àžI ÇRE\¬_k7:6™æYØ]^]JÂ8ÖP„ÿ„íxäôÓâ«´µšÚ«™.|Í–ðÆ £Ë;dÈ$ciàóÔ€3šK¯ØÛÙÇz�^\Y5¸¹{˜aÌqÄA;‰8Ïä ‘ÜV›Ò§Òõ+{=NæÚ+[‹YËYºNf’D�Èc 3窵ܷv^Ó|1s§ê!.-ó¨Omg,ëlIh”¢œ±É\ô'Ò€:Ý_Äv(°ûA‘Úút‚ˆ$±qäaAa“î=iú–·o¥Ü"\q·–æi3ÄqÇŒžœ’X>¾•Èø�CÖn�uK ’9¦²[Ëc!–Þ5•|`ó6T 01¥¨Y]kv~"–Nm-Ô,†/�±é—f_ø  XüMdmo&¹ŠæÑíZX'�÷›[îœî €9ëV­õd–ÆâîâÒêÉ-Ág[¤ v�œŒǽr:¶�{â ‹ýNÞÒòÕ,‘"‘<©dògidÚ|6îG§5,is-µÆ›‹áa¨ÞŲjÚ_(.ùó¼— B¸»ŸB(hx¦(’Ù¯tûÛe—ÊIe1æ(d“nÔ,pO,@#=H«2ø‚ }N+9í/bIfò#¹x±I‚BƒœóƒƒŒZÃñªnµÈt©ôíSû6ÚHî'š>iVáÔ†DRªFÐ@,}€õ¥ÕRkïéó[iúš^Û]¨o<kä‚C8ä¦â¤àŒ>H¸  ÝS^·Ò¥H^ ›‰Lm3%¼{ÊF¸ËžGôžÀÕ{ŸéÖò�y H’iîbLÅ?Ýf9èG<�ÉÀªº¿Ú4ÿI¨%•ÕÜWÙ•mÓyYËG`ÛúžÞH®zûÃsÛèQèÖßÚ«q¦Ce7ÙÑM¬¬fçrݼçIÐo¬jÑhÖîH'¸Ý,p¤P.îì@Ü@êGSU¤ñ Áe×eü7a³eŒË#-Æ®0¤ä°éTo­´Å‘\h—q™¡ûCw¬…Pmp¹Ë€§hÎ{MaÿfÝ-„BK-B#ûNIàŽÝí6±ˆð›Te”Þp@`Á"€;�;Q·Ôìòܰ�‹)0ÈÊÅYHìA¥déþ.‚ûK}R]3P²Ó–ØÝ «•�k à+³gôíTtg´°ÓÖóJ»šê»û4…@o,¶G›ÈIÓÏ|ô沤Ó7_ðŽhsÙZÿfËżÐyk;’�@VáØ(“žœ�“@–™­C©Ë<g¹µ¸…UÞ… Û;[‚FÖïžqW®'[ky'u‘–5,V4.ÄE’}…rþ´’×SÔ 1êOx¡Ë©+ ·®àPnùŠ´Œ÷fÁ9®–öòßO²šòêA¡wsØ æìüooq¨DÖ:§•o"$f=.á›”V;€NÍÐãŒõ&±ãK=6ÎÊU†ïͺ™a’Ê`â?5F+·#Æ3Ô�s\ãyW7³Oqt.õ_ßÌÐ]Ì‹¤–m¡¦X›n{>÷;�ƒÁãÆ¿cžßHºÓõyå–.8ÒÍÃÍ� 3çkgo—»§'®y¡‡Å­u¨ÛZÛh—ó%Ô_h‚pð„xr£ÌÁ�0:œž•ZûÅ÷©*¥†ƒu87æÌI$Ð"ÊUˆp€È8V##·ãXº‰4õ�?´màè¦Ù¢žeG&è@�ú|ÿ)ã¡â«xšmüV$·{ý]ÄnÑXÙêÓùðNs—*˜ùx+€HÁȹÓ5Ó}u{ms§\éòÚ$rH.Z2 ¾ìQ˜Ï5�‹Ãê 4¶þVƒ;y6ºƒ•åÏSè�Ñ[¡ ú®s4«oÏá F§¬Kzªˆ—ÇR¿™%þë,�˜òN1Žxë\´WtúÝÕ•ÕþŽúh¶‡÷2x²á¡åœ6 9À\¡à ¿Þ4éZ·‰¬´›”´š;Ó<ÃùV3J®Ø'¢�N$p PÑ|i¡½µåŽ£kªVK‹sa0$•áIVÁï�Z¯®]hÐøzÛMÒî|˰©6—£ùòn(߹ؒBí$gÏ ê¢ÞkäÕÇ‘â[§2=¤„ �(Â$$œ:�ܤ“ŒÐ3|A_ìÝJâÞÖGksr±<–ÒÆ¡£��n$ì|à‚0k¨Òu3ªA<Â-‘$ï >ìù›xfÆ8ùƒý3Þ¼¾2ßN³¼�WÔ,�îîçóí¯5yl£.qæòÁÞ@!ºm¦ºï‡÷"âÏW ûìwWŠ“àˆÁé½€Âgý¢+R¸?êèÚÅýî‘}$z»ìótÉ­Ù’ü…vq�ØÂîR@Ç#ŠƒQ×d_Àm®®b™58mf¶–áŽQÈVýÐ]¡9ÈrrOå^Qê‡Epv—z«kGÃé=Ì“iRÏtò;ŸßÄFmÑ›?0&Býq9¨¼{«Þjq5Þ¡ ±¶c}l×’I —åÁòš%àîAÇ=ñšô+ÎõÝvH|J ¥ÝÌSÁ¨Û[¼\67dV"»vÜ;îÎ;V†…~ãÅ÷6²_ͨ<¦gÜ“¾Ø7Ê’BF# ½‚Mv”W%ûÛøðD÷ó]ùÓŽÖ)Ý ²ìçtXÚé�O™œ‚@æ±|-ªÏq‡$µÕïïï¤Ýý¥²´Š�„s¸©áNà€­ž¦€=:Šó Q—P2hóÜ\Is¦]J-®nfYÐ!Œ0*7É ¢ñëØÕ›­I£ðß™¢ê÷·— $Pk‰ä?|ðŒb$àåàc4èÔW9àÉnæÒ§{‹Ë{¸|óög†éîvǵ~S#*—;·sŽ„ ñ]QEQEQEQEQEQEQEQEQEQEQEQEQEÕå½’Æ×2ˆÖIjÍÓqè íŸzž³µ»«[}5ÒêÜÝ,ÿºKe]Æf?Âõè:Ћ«ûk&�n% ÓÈ"‰pIv=€™ôf¸ÍÊïBÕ"}q�ÃÜ(ŠÒçqqjH ?‡ÏÕºƒ=�SÔ>ä?õÓÿe5X±©EýtÿÙMSV  Ó�¨A©  §S§ u”´QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW—üBÿ‘Ž?úö_ý «Ô+Ì>!ÈÇý{/þ„ÕÕƒþ)ÍŠþÿ°mIˆòÄÿ5®¢¹� º›ŽÞQþk]=Ükb¼·kdz´"1žÓÜz�¥]Átó$0¿—&±œg¡<þ¥¥A©¤~cË ÑÇ<²DÏ\B8#ÿ­V-m`²¶ŽÚÚ5ŽÆGj‚ŽÆÚÄúV“ Z+µÔóÆcí Ryô™¢ØIÂòiWpÊÅ ¼�0ߓDZ£PÐpÕ.|ÈÛ^Ô¦d¼µŽh.ìc‡),›{ħ�"»zãotil®mSοÔ.®n­ähÈã†Lœ”P†=y5ÙU!0¢Š)ˆ(¢Š(¢Š(¢Š(¢Š@QKLÅ.(¢€ (¢€ (¢€ ZJZ»¦Ç˸˜­7ÿVßCYšgü|·û‡ùŠÓõmô5Œ÷5†ÅM[K·ÖtÉ´û­þLØÝ°àðAý@®)üá‹Mr>åfXæ·yVinvüÊÊ6ŽxlþèUÕ�¥üb;ËX.…š0࡬åΚ8‰ÓÑ6—‘ʧ�|ŠâàRÍàÿì?µ4ÿùÿµÿ¿Ëþ5›ÿæ…ÿ@];ÿSü)áÑ?è§ÿà2…%lŠ©UTøäÙOJš+�kóA"Kû:‡FÊ’ädzdWŸb½jÞÖÞÎ!¬A9Ù�®Wþoúˆÿäþʼ\ã_Éì•í{êºÛ¹òÜI‚ÄceMáã~[õK¤RÝ®ÇÐÄÁƒF„1 ÙQÉÁ?�üªÓ¬d�Ë{+vMÅö´JFãÔãk¹ÿ„þ¢?ùÿ²£þoúˆÿäþʼe•cÖÑüWùŸ6²\Î;AÿàKüÎ-`…6í‰Àá@ÀqùŸÎ®h�C³iåD‘ïºFmŠâXdŸS]Gü ßõÿÈý•Kiàß²ÞAqöýÞTŠû|œg8ûÕtò¼ršn:]u_æ]—1�H¹CK®«¿©Ôªª DPª£€28"‰äxâDyNéTçÉõ8T”WÙŸ ŒXbI^U�I0€[2{⡽°¶Ô#Š;¨üÅŠd�â0èÁ”ñè@5fŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)‘CR’4,ÌU–$“ÇrI'ÜÓè ˜ÑFò$�;Œ•Ï\Ôú(¢Š(¢Š(¢Š(¢Š(¤ AƒØÒÑ@Ç0‡Dˆ‹6Õq=Iõ4C6ñùpD‘&IÚŠdòNIEpE sH…Ûs•P7SêjJ(žL{�¼´ÜøÜvŒ¶:gÖ�*/ùæŸ÷ȧÐh5†$”ȱ ‘€RÁFHhxã‘‘�Š©#;O¨ô§Ò�"Ž-Þ\h›Ø³mP2OR}é«q´Œ‘¢´�¹ÊŒ8'ÔàøT†˜h¤ÔliÌj64Æj›M9½?õÌÿ1U\ÔúYÍë×3üÅi^ÚEe=¤à˜¦B�ޏ#·½y]ׂ+øe­=º‹úd˜®†±t¥õ�,ÿ1[Ušw.JÌ(¢Šb U/í}7íŸdþÑ´ûNqäùë¿>›sš¯®;´vVI#F··" &ÆrìHM¹ÿj³çK+ RæÆãO�´Ç³�bŠ)&ˆ0ywðŠ@8)œóÒ•ÂÇIUo5+ 8!¾½¶µ�ž|ª›±×<õWCwXï,žF‘l®L»œ±MŠàÜ€ûsþÍs:Ô£´ÕlšFžÝ­àšE�:ªÊ§nàž6Ü0>Qœç€qCzZ�u¦¯¦j˜¬µK™w†ur®éÈ«FXÄbC"l#!·qùמøoQWñ*MæµÔÏnð$"î7#$9?=Ô�üý(0Ãw}§ÛÙé18†k×{FE)7Ú p=Í+ŽÇ AsÒ·ž9•[i1¸`§êZÇðÍÄ·š4Oaie ñ¬°Çlå¾Vù†Õý3[8ª$J)qF((¥Å ¢—b€Š1KŠ%¥¢€ QEQEQŠZ(¢Š(¢Š(î™ÿ-þáþb´ßý[} fiŸñòßîæ+MÿÕ·ÐÖSÜÒ;¬�FûP:½¾—¦-¨šH^w’çqPªUpà“–õ«×÷öº]”——’ùVñã{àœd€8õ"¹dñw‡_ÄÐêCW„A£ÀCG bÌêÃoL)¬äÒÒçMR•ä£uéÔÚû7ŠÿçãEÿ¿2ÿñUŒ|G®iúµôZ…µœöVWÚ¤´G‹"’NTcžýê´ž*i®˜Aã[Gså¡Ó˜� àg½oC¢kVz�ÕìÖ3KyKqçÛ¶ "‘• Þ•¾ÇG"‡ñR×míåØÙ†h®!I¡‘dŠE ާ!�èEyvþ¶¸ÓumkM•âòax¤Š(AÆ\ÁA$�ӌ⼾]u๸Y,'òb ó†LåT³dné·iZð³ÊS­ìùVÜß¡ñ\U…œçN4õµßmùMš+>{ë‹[ î¦�Fò’6.I=3Çã¦j ×¤k˜¡ŠÎI]„�•T©%v`�ØÂ�Ýë磅«%x¯ê×>B*ÓWŠÓÕ[E}ͺ¹¤ÿÈfÇþ¾#ÿÐ…aÞ_Ü[B³Åo±•ýî6± ðx稥ð޺מ'²·Ý§ancÇy¸·C•Fqßñ­pøZ²’šZ'Ýw6ÂàëJq¨–‰ëªî�n¢¸ÍKÇ2iÖö—¶vë!.óm½…TÅ�ݲ´¬ƒ,sÁämn1ƒWãñzK¡É«Ç¤ÞKkÆ í¥ù@%›rÊW<çÚ¾øý<é(®OKñv¡wj þÔšçÙ k|*1%2mÀ•ÇP9Íu€äŒ{(¢±/N³ÿA8¿ðiÿPò¶�œÑKuuuº}Šiö‚f‘‹’GûÒ99,}Éÿ ç¼Má[ívâi¢Ô„#ì’[ÅW\–Æw2°È$#�e]\j¶r*My8,»”­Æõaê$‡ò¨£Ô5 eHÅõÆX…™»þ5_Ù2jüêÂþÑIÛ•šÚW†u]?TKù.­$$00�ÅbbªE<Í´0£“Œs™-|)¨i×’_ZjÑIuîíߘã¾*EÓ|FÈηDªrÄjá~¿=gý›_Ú#O®Êöäfî…§Ýéztvw70L�¢Ç†›T s–lšÔ®òMZÅÕg½—,2<»±'þ‚Ç[ûNÿþ®ïë�i¦M]MXÎY„S³‹=Šó�í;ÿùþ¹ÿ¿­þ4ißÿÏõÏýýoñ§ý‘?æDÿhÇùOG¢¼ãûNÿþ®ïë�Úwÿóýsÿ[ühþÈŸó þчòž�EyÇö�ÿüÿ\ÿßÖÿ?´ïÿçúçþþ·øÑý‘?æCþÒ‡òž�EyÇö�ÿüÿ\ÿßÖÿ?´ïÿçúçþþ·øÑý‘?æAý¥å=µæÿÚwÿóýsÿ[ühþÓ¿ÿŸëŸûúßãGöDÿ™ö”?”ôŠ+Íÿ´ïÿçúçþþ·øÑý§ÿ?×?÷õ¿Æ�ì‰ÿ2í()éW›ÿißÿÏõÏýýoñ£ûNÿþ®ïë�ÙþdÚPþSÒ(¯7þÓ¿ÿŸëŸûúßãGö�ÿüÿ\ÿßÖÿ?±çüÈ?´¡ü§¤Q^oý§ÿ?×?÷õ¿Æ�í;ÿùþ¹ÿ¿­þ4dOù�iCùOH¢¼ßûNÿþ®ïë�Mm­jó,‚êYê²9`:O(©m$†³(_TÏOÓ?ãå¿Ü?ÌV›ÿ«o¡¬�Qq²eD® k¿ú¶úñf­+3Õƒº¹ÍüAÿ‘Rÿ¶ú1kŽþÀðtH%–ðÒ6a¶ñXΡÝ€2‡vFÞ¦½+VÒíõ�2m>ë“67l8<G?P+ŠxbÓ\‡O¹Y–9­ÞUš[�¿2²�£�ž?…sT‹nç§„­Óä»Níéè¿Èçnô¯Ç¢[ßYLé¤�£O´«³fF uP§>õêJñ¿2��mæîò>ÀŸs9Û»9éÆk < ฤW2�Foø×aý©§ÿÏý¯ýþ_ñ§ÛqbkóÛ’ï}×§©�aÿ#‡ˆ?ݶÿм Pµ&êü­µ‘&?/ j£1p§ïpÄãŸqÅ{Ε4W*׿‚D–#öu�•$!ÈÈôȯ>Åxù¶)áÜW½ÿ4|—ã¥&•î¿Hœ¼Ö6ööšÊ[ÚÄÚ"@¢1‚6ÄqŽ22Oj�¤æ¶[Xãs,§b9· òCÏÈÍÇ=9þ]‹C Ä3eG$cþCò¨_N±’?-ì­Ù7ÚÑ)�SŒu¯žadÔºÿ’_¡ò´³NXµ$Ýÿù»®ßðL+ù-"Kh¡HÃ4h$•I pz¼+žºjO Ú<>$ÐÒyœÃ ÄJªáù,‡��ªðOAÛf·–SnØ�l. Ç™üêæ‰0ë6žTIû¤fØ n%†Iõ5t1ÉZšOWùÿÀ/ ™(µN)êú¾ÿð¯HÒ4ýoM1ÇseeæÈ¶‘Ù^M´[Žª01ÉÄVzÅ-ï„ï´/T½‘/'Š_"â32Ãç¹L¼ç ¨äà×vª¨�BªŒÈàŠ'‘ã‰å;¤eP œc'Ôà_j~ˆy¶š5è¼M¨¸ƒÄ’2 s$~vž ú q´ƒ×=«sÆw~~”�Égx‹§d­òãÍ "# óÔ¯æºå†$•åXÑd“Ü(±Ó'¾*Û mB8£º�ÌX¦IÐn#ŒO„@+i×_f¾{-:öKÛv6!$x”8ªd0Rvex'kqÏ4çðüW–ºªE¡N¶rjÖ[Á-±»RÈBž‹�ùôÎ+Óè ÇCE„�*ªŒ@)ÔQ@Q@Q@Q@Q@Q@bø›Y¹Ñ´Ï2ÎÂêòêVư@ò„'øÜ 'hëÇ' ­ª(…ÓbTú^¥og©ÜÛEkqk9k7IÌÒH’ d†`Üã#µV»–îËÚo†.týD%žu í¬å�c�‰-”S–9+ž€dúW¡Ñ@}â=YºuÕ,f‚HæšÈAo-Œ†[xÖTl}ñ€ÌÙPp0HÀÆ–¡eu­ÙøŠXTI8E´·Pp²¾vǦ]™à"ºúdPņ$� 3Ee‰$ñÜ’I÷4ÂjÚuïˆ./õ;{KÈ#T²DŠDò¥“É�¥“h=ðØ¹œÔ±¥Ì¶×n/…†£{ɨi| »çÎò\) ànî}®æ˜ÑFò$�;Œ•Ï\ÔÈx‡U7Zä:Túv©ý›m$wÍŸ4«pêC")U#h >ÀzÒê©5÷‰tù­´ýM/m®Ô7ž µòA!œrSqRpF$ÜWcEs:¿Ú4ÿI¨%•ÕÜWÙ•mÓyYËG`ÛúžÞH®zûÃsÛèQèÖßÚ«q¦Ce7ÙÑM¬¬fçrݼçI×£Ñ@Åõ¶˜¢ò+�òî34?haõ�ª ®9`0íÏcɬ?ìÛ¥°ˆIe¨C¤iÉ<Û£}¦Ö1jŒ²‚ûÎÈ $W¡Ñ@†ƒlö–zÞiWs]B·f�¨ å–ÈóyI ÚyïžœÖTšcæëþÍ{+_ìÙ`¸·š-grP( Ü;sÓ�2kÑ( OÂv’Zêz�†=@éï"9u%a6õÜ ß1@6‘žìØ'5ÒÞÞ[éöS^]H#‚.î{SÒ €AìhÇ/ʹ½š{‹¡wªþþf‚îd]$³m 2ÄÛp#Ù÷¹Ü„þ5ûöúEÖŸ«Ï,°ùqÆ–h.hüèYŸ;[;|½Ý9=sÈ>ƒÂE v,ÛT Äõ'ÔÑ ÛÇåÁD™'j(Q“É8皉4õ�?´màè¦Ù¢žeG&è@�ú|ÿ)ã¡â«xšmüV$·{ý]ÄnÑXÙêÓùðNs—*˜ùx+€HÁÈÔ*8àŠæ(‘ ¶ç* n>§ÔÐ¥[x~J5=b[ÕTD¾:•üÈ©/÷YdlÇ’qŒsÇZåb¸Ó¦Ö¯ôwÓE´?¹“Åw ,á°HùÎåmþñ¯bòcÜíå¦çÆã´e±Ó>´žLóÍ?ï‘@޹u£Cáûm7Lºó.¤Ú\V�çɸrŒ9û�‰$.ÒFqQøsUó_&®<�]9‘í$!�F!$á”àõ$œf» I+H± ‘€RÁFHi(ädgEb‡*HÎÓê=(ÈbÓ-ôëKÈõ}BÍÞîê>ÚóW–Ê2ça_,àä¦Ñêk¬ð À¸³Õ¶N“CùH¼«×ºE_&#…‘ù#$ŸbMuéqnòãDÞÅ›j�–=I÷¦,QÆÎÉ«HÛœ¨Ác€2}N…#TS5Bô^CVtoøýú昪²U­þ?_þ¹Ÿæ(vŠ( »¬hÎìe™Ž¦¡´¾´Ô!󬮠¹‹8ß �×>™Ÿâ›[;ïÜÚ__%”_=È[x*x °ƒÔW#q¯ÞiésiÓmuîìb›P³ŒeŽY6|ÀýÖwÊIÀ#šôj+‰õå»j¶ê¦sÄÛ^G eÝä1c„Ü1ÔàÃ5ZÏÄÚ�ÔX=ò@ïªËbúƒ,lB¤~bð>Mç;}8Õ%yÍ–³5¶»«¾§p ¾Ó´¨­®&ò÷q,›d ÆCVÆp ÇjY|K­EkªÚ¥ïúM­Ý‚G<ÑÄì«<¡Y]c;Oô àõÏ4è´Wyªx†ÁuÇm]eMhJƒj�§WTb®G Ä Ri÷þ"ñøšþÖÂÚ_.Æx£X³n©*²«39‘ÃŒî ã¹ÈåQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@º×üy§ýtÈÖDu¯­Çš×Aü�dG@’§Z®•:P«R �jA@áMêQKIK@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yŸ�ÿäb�þ½—ÿBjôÊó?ÿÈÅý{/þ„ÕÓ„þ!ωþ…?ä/'ýpoý kOÅßò ‹þ»�ý«3Ÿò“þ¸7þ„µÐkš{êZiŠ2<Å`èr;~¦»#8ÃKc–Qrô�>¢®6•¨+67‘“MþÌÔ?çÆçþý7øWÒ{Z̾óÅösìXÒb’âJQ¤šKP5f"XÉwàøS°µ�ú_à;ÿ…Fš~£ŠëapJ�Fè ˆ#¯yÚÏý"ÿÁ\_üEc)´Û„–½ÍSII2¾­–ðé°L�ÑÚ�ñ°Ã)2È@#·Æ·Uy�ŽsØ Ó¶Š<–â 8á7¦Œ[BЍŒÉà’x k�¹»×nÖå&²•ã�Ùö5±a’S •ü Y“Yñ+Íæ-«! ½BØ©ÚpA*Nxæ¸� ¸(ó+ë×ÐêU¢¦ågÓ§©C_ØÏ§Ê°ÃKfŽâ(ÂÅ›œ+"µµ«jrÅ%Å„¡£ŒD<»r£“Ð wíTÿ³/ÿçÆçþý7øW¥JqŒm}ç HÊRm'÷h«_Ù—ÿóãsÿ~›ü(þÌ¿ÿŸŸûôßáZ{XwF~Î}Š´U¯ìËÿùñ¹ÿ¿Mþf_ÿÏ�Ïýúoð£Úúg>ÅZ*×öeÿüøÜÿߦÿ ?³/ÿçÆçþý7øQíaݳŸb­kû2ÿþ|nïÓ…Ù—ÿóãsÿ~›ü(ö°îƒÙϱVеý™ÿ>7?÷é¿Â�ìËÿùñ¹ÿ¿Mþ{XwAìçØ«EZþÌ¿ÿŸŸûôßáGöeÿüøÜÿߦÿ =¬; ösìU¢­f_ÿÏ�Ïýúoð£û2ÿþ|nïÓ…ÖÐ{9ö*ÑV¿³/ÿçÆçþý7øQý™ÿ>7?÷é¿Â�kè~Î}Š´U¯ìËÿùñ¹ÿ¿Mþf_ÿÏ�Ïýúoð£Úúg>ÅZ*×öf¡ÿ>7?÷é¿Â¦¶Ñ5 ™–1k,`õi¨�'ZšWr@©M»$ÏEðÏüyZÿת![¯þ­¾†²4XE¾ÈTäG@~˜®ÿêÛèkâê´æÚ>¦š´Rcª «KøÄw–°\ 9 4aÀ?CSÖF£}¨^ßKÓÔM$/;És¸¨U*¸pIËzÖLÚ ·¡'ü#šýtïüOð¥ÿ„{Dÿ >Ÿÿ€ÉþÙ¼Wÿ?/ýù—ÿЬcâ=sOÕ¯¢Ô-¬ç²°ò¾Õ%¢8tY�àr£÷ïRÚ[£x¬¯Ë+üβÞÖÞÎ!¬A9Ù�®WþoúˆÿäþʺÈfŠâšH¤PÈêr„W‘×�œÕ¡O“ÚÓæÞÚµm»%Ä5ðôÝ?¬Rç½þÓVÚûnvðƒÔGÿ öT ÿQü�ÿÙWExZÁÐ?þLÏ›úî_ÿ@¿ù<ŽÃþoúˆÿäþÊ¥´ðoÙo ¸û~ï*E}¾N3ƒœ}êâªæ“ÿ!›úø�ÿBt±878¥C¯ó3J8Ì©°Öw_nG©ÑEö§èaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPIKI@ Hii 0Ó <Ó€"j…êv¨€+IV´_øýú昪ÒU�þ?_þ¹Ÿæ(vŠ( ÉsFÑÊŠñ°Ã+ ‚=Åcj^±¼Ómì-a·³·Šò¦Ž(cùn©Q�Î1Ÿ~õ·ESNš, €Óí‘ëo䯗ë÷qŠ?²´ãk-©Óí~Ï)Ì�ù+±ÎÉÁàø ¹ER—GÓ'‚&Ó­$Šb�àR±ÿºãð«2ÛÃ2¢Ë rØ:Pv°èG¡µ%^K 9e–Y- y&ŒE#´`—Aœ)=Ç'ƒêjôm.¼¨ôÛ4�äùä;“Œ äz•zН%…œ¢q%¤.0f >nwà×Ò›>›cusÍÅ•´ÓÅþ®Y"Vdú2*ÕQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE›­Çš×Aü�dGZú×üy§ýtÈÖLta*t¨R§Z‘jAQ­H(Â�Má@ KH)h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯5ñèÿІ?úö_ý «Ò«Í¼yÿ#õî¿úWNø†Ÿ€­á_ù Éÿ\ÿBZìk�ð¯ü…äÿ® ÿ¡-v¦#ã2£ðQXu]Hiv©pmg¹ *C² ™Ø*ýæQ�Ľý2G;ý£ã_³oþÊ�í3å}ž-»±÷wý«8ÏÛïŽÕµâ3�."z ë2ð&:«ý›yý·ö�/÷?Ú¿hÎáþ¯ì^VqŸïñ�Ç¥&4iiZ�Õ-^àZÏlW‡dû2J1Vû¬Ã�{z`œ½[_»²Õ¦´�4Ô† xæ’{ë³ �ìÊB‘ü?­\ðáΗ) õáø%s'žÞ?ܤ·–6òýžÊhÅäÞZIåÎîFp{CÖŽ€·5,¼Iy=ý„LºDö×S4m…ñ›cÙùùè¾½êµç�Ìp$Ööãdööò®¥œ´’²…ë…Rp9¬»Ø'ñ%‹­æ›=ÅÆ¦÷E�ÏšE©NI Ý};ÖCiïjQ5¨’ÛQ²Ó tqKæ3MæI³åÝØg¿ZWŽæ÷ÅöcIžëN[‹™£)"6s Î9)÷rö­,¶ŠëJxįa}ϼZÊÒe … |Ǩô¬5¼Ç„ìMºM>«ñšx#…™ÒrÌÒ+ß¼À€F+o$²Ó®e›Zm/QÑ­„V2˜7aŒœ©¶æê}8æ‹…�V�ÖXÖEÎÖ†AØò)Ôˆs“Ô�Nª$J)h Å´PQE (¢Š(¢Š(¢Š(¢Š´”PÑE€¹¦ÿÇ˸˜­7ÿVßCYšoü|·û‡ùŠÓõmô5ܵ±ýý®—e%åä¾U¼xÞø' =H®Y<]á×ñ4:�ÕáGhðÑȳ:°ÀÛÓ jçÄùõ/ûgÿ£¸ïìD‚Yo�#foŒêØ(wdmêk ɧdz8Z4åOžw¾«OEþfìž*i®˜Aã[Gså¡Ó˜� àg½oC¢kVz�ÕìÖ3KyKqçÛ¶ "‘• Þ•æ÷zW‡cÑ-ﬦ tÒFѧÚUÙ³#…:Œ(SŸzõ¥x€ß™G‰@¶ówy`O¹œíÝœôã4¢ÛܺñŒäv½Ö«µ»#/ÂÖ×n­­i²¼^L/‘E"8Ë‚X($�:qœW—Ë®¼7 %„þLA¾pÉœª–l�Ý6í#ë^½aÿ#‡ˆ?ݶÿм Pµ&êü­µ‘&?/ j£1p§ïpÄãŸqÅy™�uüÿ4|¯Q§^­?kÛñ|½Ž¢{ë‹[ î¦�Fò’6.I=3Çã¦j ×¤k˜¡ŠÎI]„�•T©%v`�ØÂ�Ýê”Ö6ööšÊ[ÚÄÚ"@¢1‚6ÄqŽ22Oj�¤æ¶[Xãs,§b9· òCÏÈÍÇ=9þ^5,5'þ_e>þ}Ï–£„ÃJM_wÛNTûô¿s¤¼¿¸¶…gŠÞ9c*3ûÜmb@àñÏQKá½u¯c’=ˆ¬õŠ[ß ßh>^©{"^O¾EÄfe‡Ïr™yÎP9ÉÁ¯¯>ðÐÒü]¨]Úƒ?†µ&¹ÆöHß ŒIL†›p%qÔs]`9ãƼËMô^&Ô\AâI¹’?;O€ €ý8ÚAëžÕè±êS¤&ÂêÞÐç2‰íÌÙƒ¸>üÐë—Z(´û5¤7wdÍ6òÀgåX¢�žœc•�¥6ªf²�.]ŽÔF“h ,1°a$q²¶fqÇZÏø©yµ�šÍå˜Ìw"¼VÎ ªƒg‚1ÉÈ_˜çŒ×7¥©»´–êÙ£þδœ[D·R ËdøÄaå_‘Èàh·ñ'�´ÍÚA¾e¹YÖ &±œ#|à>h ¸ŒqÆkRÛÅzMÝ�Íì2\}žÞ;É-¤±)Lg º€ÜzW!ãªÏq=íÞ‡rö°É 6{f‡ þ�›™�pw>Õ€É8´ Õ­¼«é·LðÙAKfHÝÄA·X#@.3•ÇC@9ñC{¤Ù]Y]Es¨¯Ë…ÝLœ«?€§ «–Z‚ÝÜÞÛ˜ÌrÚË岓�À¨eaìAüÁ«œñ¦ƒ^ðô±Yê7ÛN×Kme,È¡‘A ªA凞jÜsµ·ˆüA¨$\E6°­×s´‹½Ž®ÙS𠒩꺔ZF›5ôêíXÜNHgë^}¨Ú Í[ÅPÚØ]Ë«µäbÆæ5m�IäE†/Ñ1Ô“ÔqÏJ—Äló�inô›ëÍJIѬ®"‰�åð¤p¸!ò½O\íÓWIuÉ´¸­§s+Í8Ú#Œ°%Täî$�ØZ5Íi<þ3×u°,rJ!ÜyX. üønü�Ÿq]-QEQEOPÔ?³âF—WO#mHí£ÜIÁ<’@ޤйX¾&Öntm3̳°º¼º•„q¬<¡ þ7 Ú:ñÉè(§ÅV/ik5´7W2\ù›-áŒG–vÉ�HÆÓÁç©g4—^+±·³Žõ ¼¸²kqr÷0Ø㈂wqžÈ#¸¬-6!¥O¥êVöz�Í´V·³–³tœÍ$‰!�Æ@8f Î02;Uk¹nì¼9¦øbçOÔB\[çPžÚÎYÖ8Ø’Ñ)E9c’¹èO¥uº¿ˆì4Qaöƒ#µôé+ IbãÈ‚Ã'ÜzÓõ-nßK¸D¸â1o-ÌÒgˆã�=9$°}}+‘ñ‡¬Ý:ê–3A$sMd ·–ÆC-¼k*6>øÀæl¨8$`cKP²ºÖìüE,*$œ"Ú[¨8Y _;cÓ.Ì¿ð@±øšÈÚÞMsÍ£Ú*´°Oï6·Ü )9ÜAr1Ö­[êÉ-�ÅÝÅ¥Õ’[‚ηHí9$�zäum:÷Äú�½¥äªY"E"yRÉäÎÒÉ´ølÜ�NjXÒæ[k�7ÂÃQ½Š dÔ ´¾P]óçy.…p7w>„PÐñLQ%³^é÷¶Ë/”’ÊcÌPÉ&ݨXàžX €Fz‘VeñúœVsÚ^Ä’ÍäGrñb&“…9ç>µ‡âTÝk�éSéÚ§öm´‘ÜO4:|ҭé ˆ¥T� €XûëKª¤×Þ%Óæ¶Óõ4½¶»PÞx&×ɆqÉMÅIÁ|�q@º¦½o¥J�¼7˜ÚfKx÷”�q—<Ž9è9=�ª÷>+Ó­å ,ó@‘$ÓÜÄ™ŠºÌsÐŽx“�Uu´iþ “PK+«¸®4ÿ³*Û¦ò²+–ŽÁ·õ< ¼‘\õ÷†ç·Ð£Ñ­¿µVþãL†Êo³¢›YX&ÍÎä»yÎ ’09 ßXբѬÜ�OqºXáH  ]ÝØ*�¸�ÔŽ¦«Iâ‚Ê ®4Ëøn.&0ÃfË–F [Œ9\aIÉaÒ¨ß[iŠ/"¸Ð/.ã3Cö†ïY  Úás–NÑœö<šÃþͺ[„–Z„:Göœ“Áº7Úmcá6¨Ë(/¼à €À‚Ewv£o©Ø%å¹aRa‘•в‘Ø‚?JÉÓü]ö–ú¤ºf¡e§-±ºW+Ö@3ÀWfÎ9éÚ¨è6Ïia§­æ•w5Ô+wöi €ÞYl�7�’ §žùéÍeI¦>n¿áÐç²µþÍ– ‹y òÖw%€­Ã°Q'=9&€;-3Z‡S–x>Ïskq «¼7 ¶6v·Œ­ß<â¯\N¶ÖòNë#,jX¬h]ˆŠ$û åü'i%®§¨cÔžñB#—RVo]À ÝóiîÍ‚s]-í徟e5åÔ‚8!Bîç°ÍÙøÞÞâÿP‰¬uO*ÞDHÌz]Ã7(¬wœ›¡Ç=êMcÆ–zm�”« ß›u2*Ã%”ÁÄ~j$ŒWnFŒg© æ¸+Æò®ofžâè]ê¿¿™ »™I,ÛCL±6Üö}îw!ƒÆÿ�~Ç=¾‘u§êóË,>\q¥š ‡š?:gÎÖÎß/wNO\òC‹ZëQ¶µ¶Ñ/æK¨¾ÑááðåG™ƒ `>u8 7=*µ÷‹ïRUK êpo͘’I E”«á�6p¬FGoƱt/h1ë hÛÀ!ÑM³E<Ê$ŽMÐ�ôùþSÆCÅVñ4Ûø¬In÷ú»ˆÝ¢±³Õ§óàœç.T61òðW‘ƒ�s¦k¦úêöÚçN¹Óå´Hä�\´d}Ø £0þžk6‡Ôimü­vòmu?+Ëê}º+t$UÎn•máùü!(Ôõ‰oUQøêWó"¤¿Ýe‘³IÆ1Ïk•ŠãN›[º²º¿ÑßMÐþæOÜ4<³†Á#ç8 ”<·ûÆ€='Vñ5–“r–³Gzg˜b*ÊiUÛàR À$�ÎPÑ|g¡½µåŽ£kªVK‹sa0$•áIVÁï�Zƒ\ºÑ¡ðý¶›¦]y—aRm.+GóäÜ9FýÎÄ’i#8¦xsUó_&®<�]Hd{IA Q„HI8e¸=I'  ó|@_ìÝJâÞÖGh ÊÄò[ˆŽ6t ¸ “±ó‚À®—KÔŽ© ó¶D“¼HÛ³æmá›§0aߦ{יŦ[éÖ—‘êú…›½ÝÜþ}µæ¯-”eÎ<¾X;ÁÈ7M£Ô×Yà�qg«l�&†;ò‘¯^é|˜ŽG䌒}‰4ÕµBõ3T/@¤«Z7ü~¿ýs?ÌUY*Ö�ÿ¯ÿ\Ïó¹EP%–8"yeuHÐfc€­aÂ[o!&×LÕn¢í,¤«} "�þòÓNµ$ùW:„0Ê?¼¤’Gè+}T*…PÕÑÂR’»f-ÎSq‹µŒøJê®àÿ^�øJê®àÿ^·è£ÚRþOŇ%Oæü øJê®àÿ^�øJê®àÿ^·è£ÚRþOŇ%Oæü øJê®àÿ^�øJê®àÿ^¯Í©ù^!²Ò|œý¦Ò{Ÿ7wÝòžÛŒsŸ;9Ï{ç� =¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀÀÿ„§þ :çþÿõèÿ„§þ :çþÿõë~Š=¥/äüXrTþoÀçÿá*–ÐõµÉ´à~µ«§êVº¥°¸´”:g 1‚§ÐŽÆ­×=‹ÜEÊ—yt.h?•4©Ô‹åVi_q785wtô:(¢¹�Ìíkþ<Óþºäk":×Ö¿ãÍ?ë þF²#  )S­@•:ЋR �jA@¢�RŠQKH)h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯7ñçüŒÿ׺ÿèM^‘^qã¿ùþ½×ÿBjéÂÿÃð¼-ÿ!y?ëƒèK]…qþÿ�¼ŸõÁ¿ô%®Â¯ñ™Ñø¢¡[Ëv½{1(ûB s;Oqê>”Awotó$ åÉ´pÆz3Ï¥bj>hb¸…áž4–'du ¬==k3þÿÐ LÿÀHÿ§Õ5k}&y–id•¶C 1—y®ÌàW?gâ-FÒîömZ-ÖK(IEº6 ´0VÀË©VRXt9íÍ-©ÖC Vð¤0F‘Dƒ ˆ¡UG ¥„Í0�¬¡KíˆÀϧ'ó¬�j�§xJûP´—l‚Âêù›H¯$V�•Â]ØÛÜÆÛ’hÖEoPFE;ˆ‘áŠG�Þ4fŒîFe©Æ2=8$~4Æ´¶{•¹kxšáFÕ” ,<×¹üÍME5cDwuEVs– `·n}j±´“ÎßkyßëwFþ1ózðçÒ¬Q@ Ó¥¸£”RâŠJ)h ¢Š(QEQEQE (¢Š@QEfŠZ\Ó?ãå¿Ü?ÌV›ÿ«o¡¬Í7þ>[ýÃüÅi¿ú¶ú‰nR*jÚ]¾³¦M§ÝoòfÆí‡‚çêqOà� Zk�é÷+2Ç5»Ê³Ks·æVQ´p3Ãgð¯B¨.¬m/ãÞZÁp€ä,чý g(¦tQÄNž‰´¼ŽU< ฤW2�Foø×aý©§ÿÏý¯ýþ_ñ¬ßøG4/úéßø ŸáKÿö‰ÿ@}?ÿ“ü)(ÛdUJª§Ç&ÊzTÑ\x«_š X�ÙÔ:6T�‡##Ó"¼ûëVö¶öq­`ŠÁÎÈ�(ü…r¿ðƒÔGÿ öUâç*øŽOd¯kßUÖÝÏ–âL#*oòߪ]"–ív8Ɔ& 4!ˆfÊŽHÆ ü‡åP¾�c$~[Ù[²n/µ¢R7§ë]Ïü ßõÿÈý•ðƒÔGÿ öUã,«¶�â¿Ìùµ’æqÚÿ_æqk)·lH6 ã�ÌþusD‚u›O*$�}Ò3lP7Ã$úšê?áÿ¨�þ@ÿìª[Oý–ò �·îò¤WÛäã89ÇÞ«§•ã”ÓqÒëªÿ2è乌jEÊ]u]ýN¥UQ"…U )‘ÁO#Ç#ÊwHÊ 8ÆO©À¤¢¾ÌýbÃJò¬h²I€îØé“ßú( 4Q´‰#"™¬G+ž¸?€ªÒi:t× q.Ÿjó¬žh‘¡RÁðìã9¨Ï\éW( K SÇåÍH™k¨# äB§‘‘ƒÒŠ(8 ŠÖÞ8 �c†%ˆ£T ¥Aü¨Õ7±vÚ1–=I÷©(  ÖÖÖ—SÁÉ.¤ÌÛ‰ÜÁBƒÏN=*ÍPEPEPEPEPEPLŠ B�Ä‘¡fb¨  ±$ž;’I>æŸEÆŠ7‘$hÐÈ™ØÄd®zàö§Ñ@Q@Q@Q@Q@!‚Æ–ŠŽ8!„8Š$@ìY¶¨‰êO©¢!·�Ë‚$‰2NÔP£'’p*J(¨ã‚(K˜¢D.Ûœª�¸úŸSRQ@ òcÜíå¦çÆã´e±Ó>´žLóÍ?ï‘RRPb’V‘cA#¥‚Œ�: Ò™Œ?‰/‘æ6ZÕÝ••¢Þ¯ˆî4!iqq~uºKöxÄ[X´n¬p dŸ˜œZ.Ôõx.c¹Óíîíà±Ò¾Ðª3ÛeŽYÏœEŒ ÜëšžÛáÍÆ›¤jQÛ¥¡žm[DHT.éäU–ÀÊæ4 ž~féSxãÁ÷zü÷ÅhóH4Ô··Ú¶äy¥Ÿ92‚T ©%>™"¹Í‡xfâö bád—T¹fÔnñk ¹[XÕ¤v,f+‡= ŒdÃ×®Úò+[Xõ¥{¸JAm=åÒ5œ¬f9Ûf‘AˆàöºMFÔ4ÝrG}&æW7÷-Ü·HmãŠGvù#�ä0ìëžqYWÖîâ½»Ô¬ ½–q“nZ9X¶$*̪«Ü8ÎAÄCÝ@x:ä\xÂÍ ½Ì3[YßÁ'Ú.®&.A°mÃÏUtÎþ›GL÷¯K® BÐÛ@ñ¾›h"´ŽÓ¯e�mâA-b6î®1ž•ÞÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPXóP¿îÿµk~°?æ¡Ü+ÿj×EµèÌk}ŸToÑEÎlgk_ñæŸõÐ#YÖ¾µÿiÿ]ò5‘YJ�j©Ö€$Z�TkR x¥‚”PŠZAK@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yÇŽ¿ä`Oú÷_ý «ÑëÎ|t?â~Ÿõî¿úWFø†�€­á�ÿwÿ® ÿ¡-uõÈøgþBïÿ\ÿBZë«LGÆgGà(êZTšGæ<°ÍÌsÀû$LõÁô#‚?úÕbÖÖ +Xí­£XáŒaU{ŸZšŠÀØ+'I²žÛQÖ¥š=©sv$ˆäËåF¹ã§*G>•§4Ñ[ÂóO"E ³»U¤ž•Bè·S¤úÆŸ4Îp±ÇrŒÌ}€<ÐK« Ý[Z‹íq¬:]”‚XÓpf¹�•Ž:*“Ó©#=©úU•î‘tÖ‰.”w=»îÃÁ“Ÿ,ŽëÏtÕµH̨¥˜…P2I8PE67I£Y"uxÜVS�Àô ÷»¶K)¸ˆG "WÞ0˜ë¸öÇ|Ð"j(9½QE (¢Š(¢’€ (¢˜Q@QHaEPEPEP0¢Š)wLÿ�–ÿpÿ1Zoþ­¾†³4Ïøùo÷ó¦ÿêÛèjå!ÔQE!…WžËñ(ÛÞê±¼ZKÅh“Kÿi™Ân6…`\”'¨Â°ã4èTW+7Šïlì5Y/´¸âº³Ž&Š;yÚq+I�€üŠG#ž:UDñÕĺ…­¥¶“=Ô®'WŠ$(Å“Ê*àÉ·j!É=1Ž{€v´V%ߊ,¬Ú8¤Šî[‡€NRÒÚK€ªr9hÔŽ �©ø{ÆVÚÅž–·]Á{{pÎT‰›föì6‘€qÉÈ žŠãeñµñ+$>½HaQ-บÞ7Š2ŒTí2å[ pÀqšÔ‹_»ºÒå¼·ÑîH¥Uò.$E3&‹DÊÌ­ÃqÎ dPõÊßx£T¶þÒžÚ[+ ü™${â’7 I å‘üCø©Ú‡‰µ[íA`Óìä´±š(¤y.Ù$mê�•AÇñ”ÔQ\¼þ1D–çÉ´gŠÞÒúfÛK=´‹à’yúqT§ñŽ»o#£øzË(ÖÈq©·YßbË^¿Ö€;Z+Œñ/Œõ YÚ=Æ•m%Ôë#µ´W2¹ä2ÂA2ýí¸$uëVÄšÄzu®©ýŸ§>Ÿ<�!t»—Ìd‹B4+зr:PWEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPIKI@ Hii 4ÔmR�¨6¨^¦j…è´•kFÿ�×ÿ®gùŠ«%ZÑ¿ãõÿë™þb€7(¢ŠÄñ=¬óið\[Æe’Êæ;¯,up¹ÈüÔðx“F¸‰d]JÙ3ü2ȇÔkR©Í¤i·&Ó­$‘¹,ð©'ñ"·�H8(TOM¬c(IIÊ{‘ÿnèÿô±ÿÀ„ÿ?·tú ØÿàB�ØZ?ý¬ð?Â�ì-þ�V?øŸáO÷€~ûËñíÝþ‚¶?øŸãGöî�ÿA[üOñ£û Gÿ U�þ§øQý…£ÿÐ*ÇÿÓü(ýÇŸà¾òüJï¨x~MFöÔlMÔ1I oö¥ùQÊÎ91§åîjÇöî�ÿA[üOñ£û Gÿ U�þ§øQý…£ÿÐ*ÇÿÓü(ýÇŸà¾òüCûwGÿ ­�þ'øÑý»£ÿÐVÇÿühþÂÑÿècÿ€éþahÿô ±ÿÀtÿ ?qçø_þÝÑÿè+cÿ� þ4nèÿô±ÿÀ„ÿ?°´úXÿà:…ØZ?ý¬ð?Â�Üyþûï/Ä?·tú ØÿàB�Ûº?ýlð!?Æ�ì-þ�V?øŸáGö�ÿ@«üOð£÷€~ûËñíÝþ‚¶?øŸãGöî�ÿA[üOñ£û Gÿ U�þ§øQý…£ÿÐ*ÇÿÓü(ýÇŸà¾òüCûwGÿ ­�þ'øÑý»£ÿÐVÇÿühþÂÑÿècÿ€éþahÿô ±ÿÀtÿ ?qçø_þÝÑÿè+cÿ� þ4nèÿô±ÿÀ„ÿ?°´úXÿà:…ØZ?ý¬ð?Â�Üyþûï/Ä?·tú ØÿàB�Ûº?ýlð!?Æ�ì-þ�V?øŸáGö�ÿ@«üOð£÷€~ûËñíÝþ‚¶?øŸãGöî�ÿA[üOñ£û Gÿ U�þ§øQý…£ÿÐ*ÇÿÓü(ýÇŸà¾òüCûwGÿ ­�þ'øÑý»£ÿÐVÇÿühþÂÑÿècÿ€éþahÿô ±ÿÀtÿ ?qçø_þÝÑÿè+cÿ� þ4nèÿô±ÿÀ„ÿ?°´úXÿà:…ØZ?ý¬ð?Â�Üyþûï/Ä?·tú ØÿàB�Ûº?ýlð!?Æ�ì-þ�V?øŸáGö�ÿ@«üOð£÷€~ûËñíÝþ‚¶?øŸãGöî�ÿA[üOñ£û Gÿ U�þ§øQý…£ÿÐ*ÇÿÓü(ýÇŸà¾òüCûwGÿ ­�þ'øÑý»£ÿÐVÇÿühþÂÑÿècÿ€éþahÿô ±ÿÀtÿ ?qçø_þÝÑÿè+cÿ� þ4nèÿô±ÿÀ„ÿ?°´úXÿà:…ØZ?ý¬ð?Â�Üyþûï/Ä?·tú ØÿàB�Ûº?ýlð!?Æ�ì-þ�V?øŸáGö�ÿ@«üOð£÷€~ûËñíÝþ‚¶?øŸãGöî�ÿA[üOñ£û Gÿ U�þ§øQý…£ÿÐ*ÇÿÓü(ýÇŸà¾òü@ëÚ:‚N«eǥŸëYºSÿjø–çX„7ØÒØZÄìó~mÄ�`x­1¡éäiV ÿ׺…^UTPªP0 =¥8EªiÝé¨rNMsÚ˰´QEs›Ú×üy§ýtÈÖDu¯­Çš×Aü�dG@R§Z�*u  ¤Ô‚€)E ¥¢–�RÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^uãŸù§ý{¯þ„ÕèµÆx£NŽóX;°Ä* «V´jFæ‘�X9ÆÑ1|2?âlÿõÁ¿ô%®¶¹? ÈROúâš×Y[b>3?QE‰©“â1�. zë0Gý¼ÇT5ñi­˜tò.ãž�Èòi“¼[¶²rÀŒ1Ã89âµµ‹9o´óÉ4S'˜HRc‘\G@vã88Íde\ý³íŸð‹xwí[üÏ;í'~üçvï³ç9ç4˜>–æ]äþ}Ä3MnÓmÛ¿Ë•Ð62y!AëYÞ*†òÞ4ÔbÕo ³GQw"2#�\e à�O^­�Î[?Êœ¡™æ–gòÉ* ’3� Æ@ÝŒàgSUÓ5Vsl×ëm¥²�"@¤M/ª—' ¿AŸ¥ÔÃðÆ›1–â=?\ÔF²" RLL$`ó�œ¨$î5ÉY5þµiª¥¯Û¯&3\„cäGG*2$”ûÄq�6kÐ-|9s¦?Ù4ëÐ4i7,–s‚Æ% çÊpr>‡8æªHbxi>@¸’H’æÃí;¶à ²íáyëÚ•‡rׄ$ßk¨ "–;¥¼´ Ÿ˜ª•k0ÀBƒ¯jè«ÃZºWÑÈÖ¤Osç µ‡É@6"ãfN9SÜÖåR (¢€ (¤ Š( Š3I@ E ¥ Š( aEPE&h¤1sE%-QFhî™ÿ-þáþb´ßý[} eéŸñòßîæ+QÿÕ·ÐÔ=ÊDwv°ßZKkr›á•JºçQÓëX�hz”ÓÇ©¨ ­:Õƒ@ $䯜z¾ƒïO¥t4RW’x¢Xí|O¨ÚÜ]@ÅâInd�d–9�Œææ�À yç9æ½n˜!ˆHÒÐ;ãsmltÉ /µHîþê÷1Ä“Ï5äPÒµÂÌTÚéäR>b0$Ç=Egé–WM­>Ÿ››«¦òb”Ø$DCiÎaw |Ù*î8'½u­-ž&�­â1»‡e(0XA#× ûU9|?¢Ïoöy´}>H|Ã/–öÈWyêØ#>´Élº—QK "ÄúL0•$%ºù’†p,ǃ�Ï$d÷©¢±¼Ñuý I.,-æ“ìR<ƒÌUû<ƒÊo÷p0Þ„£žÊ;[vV‚ÚŠÆ"Rˆ:(Ça“Å7û>È_›ÿ±Ûý°®Ï´yKæmôÝŒãÚ€<žI$þÔ¿‚êçBÒ岸ÿG†mi¡’9J+˜´lebn[Œ\w:ècŸá|zŽ¥¥YDKÅsl°fQ¹ÝNcVF$‘µs׎µèÂÞge†0ÎÛœ…cŒdúœùR¤1GÄ‘¢Æ˜ÚŠ Ž˜ç·Iõ†µ¨ý§Y¶ÓMÒËpðÎÍ<ÆN£aº«c¥Vñ>“þ,»Õ!¹�æ´‚&;í-Ü ^DTL´d’sÉ,7 >” „BЈ£6w&Ñ´ç®G¾N~µš^Ÿ+£Éclí¾r‰IY:npÞýh€Ô¬dÓ§Ô¡•ãg}+ZŸälád�sï†Ïím*ïI¹–O艨MwmqMz» d*…€È'a$àà¿|W¢ÅagÜ×qZAÌØófHÀy1Ósu=;ÕŠò½nñofÑgºÕô™–{}Ctͨ`¥‹j$ž[n(åÙ“è_áË]>ÿK¸¼Õ®®�m$µx–¹<¾7@B0/ÏݯN0ÆfYŒheU*®Tn pHÐà~B©¾…¤KwÜšU‹ÜÅ�.f·B鎘ldPú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ JZJJCKHh¦£j�Ôm@µBõ3T/@¤«Z7ü~¿ýs?ÌUY*Ö�ÿ¯ÿ\Ïó¹EPEsž;�%ðmôr(df‰YHÈ Ê™�~²ø_^’['”tÉ.¥±1ƒˆÕÈ Ì¦Eà�88 îŠão¼_xÆiô¨í'³6V�¼›‡™$Ä;�èHúÎzô«x‡QHukk³b—Ö7QÀ²*Hc�:+®e‹a±´Hí@UÄGâÝ^x¬ ŠÞÐ^ɪ¾�1•$DÀ…¤�ËÀ^{ŒŒäIgâ}mšÞ[Ë}<[�M´É„E÷3†*$\ð£ |§?Zìè®'M×.ͼ:u­œ7wš�ò+ÈÄ‹¯–#9f!ñ©¢YÉ" ®-- ÕÌ ®X ÙÁF¤)Ã6yŽ(§{»hÌ�î"SPûœ »¾î}3ÛÖ¦¯8×eÂK*‚É¥0ÞE5¼¾#¿ûpÒš(?´´þÎp�³ìû|ß3ÿž.s�ý»PSEs²¿­Á8ݤ˷ߦ˜¬=7U¿³1ZéËlÍ©kº„[ç UB™[#žPý}ºÐ}Fs\|^(ÔçiɢꯨKbÒ¶ï yiæ99\ ¹ëžxªºF¡}a§ê`Kf—ók3ÇÌRHíì�~féœd`dçŠî¨®Ó^×5­oÃÒ[Ímk©x—D 0 çÛ5zßZÔnîïîbKXô» ä‚EefžBƒæaƒ…ç€0r9ÈÍtTW!á�ê:Ýí¸¸Ó¤K[«s:¸³ž1ùHFwP²dó.:t9Íd㦣ãÿM'‡tÍAöÜ5ÕÌÛd„yµ|¶Î:ýáÏç@„óE‘Æò"¼„„RÀ d€;ð §×ŸCr.¡#´ñmG. �mhÓ(6¶=¹©b³7qê—Réz½Õ¡Ô.&Y-µŠ"C†d‚¹Î:ŠW •Efè)Ñíç·’íâ¹E�~Õ;Jà2ƒŒ±?—Nµ¥š¡¤¢€ (¤ ¤¢Š(¢Š´”PÒfŠ)QE (¢Š(¢ŠQE .i¤-Ë@qÏÔV«ÿ«o¡¬­7?h8Ý÷{cÔzÖ«ÿ«o¡©cC¨¢¹MÄ7–:“ZÛEE’ ’HÏzÖ… ×—$ qˆP‡<ö:º+Ïÿá+Õ?çºß±þ©¢ø©¥¸û>¢ÊŸÝËŒ}ø×MLº¼"å£9iæ”*IGU~çYEWè…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@%-%%!¥¤4ÓQµHj6 Ú¡z™ª  ÒU­þ?_þ¹Ÿæ*¬•kFÿ�×ÿ®gùŠÜ¢Š(®£§ZêÖØÞÆd·”ê�œG*A�ÐÕ84ht{K†Ñ­b7’�—º™ØÉŽ›ä;˜€3ëZÔP“á[ÙésÆ’ˆ&[¢S(¾p00ô Ðz9«W^Ò¯ Ñž×s]J“JÂGVÞŠXr¤ËŠÔ¢€2m¼3¤Z4M˜CÉ»OÞ1ÄÅ6ëÉ*HçŽýy©F‡§ö}›åmÆöÿ]»v㧵hÑ@RxkH–Ëì�iû¡;Ü©8d•É,ÊÀîRK7B:ã¥Csá ívÏc¹|Ÿ³°ó\oNN órÄ‚rA&¶è  Éü=¥Ü­ÂËk¸\D�ˇa¹På:ìG>õVÏD—þ‹�rõ-Öa´¶’ÄD¶ç$˜ñÇlNkvŠ¡©èÖºÄ/`.Ñct‘£tÏ\2�F{óÍejž·½“B‚¢‡OÓæ‘䉣m¦'Q´¯9ÜÀç#¹Îk¤¢€2ŸÃZCé±iæÉE¼NeŒ#²²¹Î\8;·œœääúÔCÂz ¶[u²Ø‹9¸R’º²ÈFƒ‘‘מyÏZÚ¢€1ÓÂÚ4VöÐEgåÇk+Í—+©Fv,Ø çŸ»ÓÚ¦¶ÐtÛ;÷½¶·1LìÌBÊá76rvgh'''æ´¨  �CÃ:6©r×–K$®ÈC²‰@è�fÍPoYÝëú�ö¡s[ΰ¬Q,ŽH!ÔaXr0Et´P=ç…´]Bê[›› òK´É‰UÊãi*†3ÅLÚ˜Ú™Ô~Í‹¢Á™–FUv™AÚÄH'ŠÒ¢€3týMÒ§yl­ÚÀ®Á+”Q× „íQÇ`*ͽ…­¥ÕÝÌmšíÖIÛq;Ø(@pO*�Ç¥Y¢€3WAÓ£u¶ÃGt÷ˆÛÛ+3çsg=÷:sÒ™†ô˜&šH­vùÁƒÆ$,îûØLíÉÎjÑ@4íÃJiZÎW›c¼�#0ÀÜÄœ œƒ&¯ÑEQEQEQEQEÌøËÃÏ­X$¶À»|•_ï©ê>¾•ÓQZÑ«*3U!º3«N5 á-™à’Å$2´r£$ŠpÊÃ¥2½ÚâÂÎìƒsiØéæÆùÕì-þ�V?øŸá^äs¸ÛXKÊ¥}$x�u~ñœš-¸³º…§µ(TüÉž g¨¯CþÂÑÿècÿ€éþahÿô ±ÿÀtÿ ζiB´y*A´],¾µ)sBzœ–£ãö»„Úèösý¢_•]ÀÜ?ÝQœšØðw‡äÑldšè¥Ü`¸Îv(è>¼ó[¶öv„›kH!Ï_*0¿Ê¬WŸWféQ�*{õlí§B\þÒ¬®ÖÝ�QEÄuÚ×üy§ýtÈÖDu¯­Çš×Aü�dG@R§Z�*u  ¤Ô‚€)E ¥¢–�RÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\/‹ÈÒçþx/ójî«…ñ~?¶×?óÁ›UÃre±Ïx9£—Tµ\Í5ͽŒ‹†VÚŠÏË“Ül9®î¹O [²êh6=¹8 7(,1‘Ô´àûWUZTIJÈÎ µ¨¹¤ÍTV½°·ÔaXîUÈFŒ’4l­ÈÈe ƒ‚G¹ª_ðŽÙÏ}Oÿ—?ürµ«–É<1K°´ŠtDnî7ÊêFA§'ƒÓp4ÐYX[éдVÊÀ;vyFfàd³IÀ“ØU+ÏZ_jm$÷±ÌÑ,$[Ý< ª–#;ÏÞ=jM Q“TÒRêP¡üÉc%Q�’2gkr¹ÛœFqPëzܺA„.›qr'u‰$�£ $c…S¹�ä÷éÏZ‚/i°^Eu·ë,nÒ×’8,ÈP’žpzõ­].ÚÏGM.Ën±‡?6äçÔ䟭fèºýíýÙ°¼Ñî-îàDûS‰#h£f\€rN}9##5Tø�Tœ«ÛÙX¤ÞÉgÍrû¤efÚ±�Ø{Ð�•¤vöq1Ûı!c’B€}ø©ê½ŸÚþÌ¿m0yù;¼€vûc<ÔôÄ-%PE™ £4”PšZJ(´RQH£4”Pš(¢�‹šJ(¤0¥¤¢€ŠJ(sNÁ¸<À껿ˆœöëZÏþ­¾†²ô¿øùo÷ó¨ÿêÛèjXÐêó�É·Ä“€@ùS¯û¢½¼¿Æ�L¸Ï ÇüW©”+×~�ô<¬ãø Õ~¦q•¹Ö•eÂ�J‘õ­MCNû^¿¨Íq"ÚÙ¤åZáÁ#w`êj­&°²Ö"ž!Ÿ³£+)ʺ™Oq^â«ßOÆßæx2ÃÊîûkøoƒu)ï¬fŠfÜ *¨O\ñúTþ+ñü#Zlwb(çw”F°´›²#ŽÜè žÕ�ðí÷A¨{2#W¾ Eq7ƒõ†h ˆ[ÊÓÈܾÀŒv§l±O±=ëæ³(beýh}6_',4ÕÊ3øÓU†þksáÛ³åÝÃ#è$gÍŸá=1ŒàÖ�׌-m<@¶¤ÑÛF»ngky E3dBàlV$óé^Uªk70¾¢­«*OjvxÝ]&?Ý�©Ñ†IÆ+­ÔíbÔ|W«XJ÷óG&¯he²[MöΞL™ßË8 vÞ:=xÎÓ¦Ñügk}e^[ÞÛ]¼ q䵄ã(/Ëóà2gnzÖU¯�¯n¬t™¡Ðîç7V�4¬‘Má!<ÇR@'“È#&¤·ø˜ÛZk³Ëcgu\q1„I,[V@ù†ÇyÚ ï\,×siÚ6…êÌé¶ ŸT’Óhyˆ`«Ã.Î UFy4ê6>"»›IÓ5 �&å!¹ˆ´ì‹½¢;7…‰Fçä|¼sÆd_m®|NÚe­¼óD­HE¤ë$[�ù™JpÛ×6yÅsñ^BþѯBG{«C}pöò–’çd)4ƒ&]¥ü¡ò ǨÅ;Iþµñ ·qx‹KþÓ-nÆëÏBnY‹ùÈT6pr0;ž”êUKKÔáÕ­d¸�$TI倇ѹBx=2§ÏkÅõë .ô»é´ˆež+‹q bò ¢9 .K'ƒî=1,4¹âÓtá}¥^¾‘åû\YyLÏ–”˜Y�dº�»¦y`yë@“Eyúé×ëe¥ÿkY^\èé5Ñ{0Y³oæ(å®áŽpHÏN gO’{ûy¬t«ÔÓa·‰u(<²æ à¢*à—(,伓€èR `c§Ò–€ (¢€ (¢€ (¢€ (¢€ (¢€ §¨jÙñ# K«§‘¶¤vÑî$àžI ÇRE\¬_k7:6™æYØ]^]JÂ8ÖP„ÿ„íxäôÓâ«´µšÚ«™.|Í–ðÆ £Ë;dÈ$ciàóÔ€3šK¯ØÛÙÇz�^\Y5¸¹{˜aÌqÄA;‰8Ïä ‘ÜV›Ò§Òõ+{=NæÚ+[‹YËYºNf’D�Èc 3窵ܷv^Ó|1s§ê!.-ó¨Omg,ëlIh”¢œ±É\ô'Ò€:Ý_Äv(°ûA‘Úút‚ˆ$±qäaAa“î=iú–·o¥Ü"\q·–æi3ÄqÇŒžœ’X>¾•Èø�CÖn�uK ’9¦²[Ëc!–Þ5•|`ó6T 01¥¨Y]kv~"–Nm-Ô,†/�±é—f_ø  XüMdmo&¹ŠæÑíZX'�÷›[îœî €9ëV­õd–ÆâîâÒêÉ-Ág[¤ v�œŒǽr:¶�{â ‹ýNÞÒòÕ,‘"‘<©dògidÚ|6îG§5,is-µÆ›‹áa¨ÞŲjÚ_(.ùó¼— B¸»ŸB(hx¦(’Ù¯tûÛe—ÊIe1æ(d“nÔ,pO,@#=H«2ø‚ }N+9í/bIfò#¹x±I‚BƒœóƒƒŒZÃñªnµÈt©ôíSû6ÚHî'š>iVáÔ†DRªFÐ@,}€õ¥ÕRkïéó[iúš^Û]¨o<kä‚C8ä¦â¤àŒ>H¸  ÝS^·Ò¥H^ ›‰Lm3%¼{ÊF¸ËžGôžÀÕ{ŸéÖò�y H’iîbLÅ?Ýf9èG<�ÉÀªº¿Ú4ÿI¨%•ÕÜWÙ•mÓyYËG`ÛúžÞH®zûÃsÛèQèÖßÚ«q¦Ce7ÙÑM¬¬fçrݼçIÐo¬jÑhÖîH'¸Ý,p¤P.îì@Ü@êGSU¤ñ Áe×eü7a³eŒË#-Æ®0¤ä°éTo­´Å‘\h—q™¡ûCw¬…Pmp¹Ë€§hÎ{MaÿfÝ-„BK-B#ûNIàŽÝí6±ˆð›Te”Þp@`Á"€;�;Q·Ôìòܰ�‹)0ÈÊÅYHìA¥déþ.‚ûK}R]3P²Ó–ØÝ «•�k à+³gôíTtg´°ÓÖóJ»šê»û4…@o,¶G›ÈIÓÏ|ô沤Ó7_ðŽhsÙZÿfËżÐyk;’�@VáØ(“žœ�“@–™­C©Ë<g¹µ¸…UÞ… Û;[‚FÖïžqVï.’ÆÆâîPÆ8"iX/Rdãߊæ¼'i%®§¨cÔžñB#—RVo]À ÝóiîÍ‚s[šìo7‡µ8¢FyÒUTQ’Ä¡À¹  ù|c¥Ã éšÁó�¾£$Q@�FýÎxgsž{µµÁ�ç_&Xü©6fEÀ~ܾ£œ}A¯:¼ðÞ§žÑlígÖ³YÅË’xZl¨ämØç>’CW.4ûãq©4¶WRéÍ®™® �tð}™]C��3�§®1@ýÅÅ£Úßø—JÛ¥ÜÅ¥E§ÎV)£dE:2¡�ÿ�§Ó Ç´Ý:ú;í8ý†õ5¨ï]õ ÖG,??ϧ+µGÝã¦(Ðjž§¨Á¤éw:…Ña´fGÚ2paë\%¾�©E¦ëzU•Бíóö¹¢k{‰pÝ18‘Êîăqõ¨µmíš>¾š^�wšö #µ–K ÄîHÏ9nçqšï,uXï%6ï ¶×«Í%´Ø/³2©%I^J7Bk;Pñn�¦Øê·w)p©¦N�N¡f,‚£<Œ8ôèk6×@Óô¿ˆ qŠ©–q%¬ðÛe"uó‚À|‡iAÎ28íQjzEÕߎŻ[ÈÚUÜIqq O“|k${ 链3ÿ š-N õk�:5s$Ç3¾Ì9`£9Î~BztÅYjóÍ;M×$ðÍÜ—V÷?h7–ðÏ$šÚˆû}wbFã¨8h¸Òî'¶ž;Ë}"]JÇÈ·ØñºãÎp¿z5Æ=:1ï@¶¥{›¦]_J¬ÑÛBó8N¤($ãߊHåYíã™A "†õÁ®#ÄZ2'öÅ©Ñî®Q¬|½$[ÄÎ���¸ #n9$õqŠì¬Õ“NµVR¬°  Œp(’­hßñúÿõÌÿ1Ud«Z7ü~¿ýs?ÌPåQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ú×üy§ýtÈÖDu¯­Çš×Aü�dG@R§Z�*u  ¤Ô‚€)E ¥¢–�RÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\Œä8¿õÁ›W{\‰ yupT!%0ÏsU (»±8ó+ß�ËϹ’…ãGµlª’û à–Ù»<•Ál|¼Ôvy®wÃÚLº,VV†HÝ,v�ÅÉBHööúWCš¾¢jÚh¤ÍD•ïµ m:–éÙU›b…Fvc‚pA'€O 5�£Ko¢x N¾†Ò ßc·gÚ,ª ;ÀÉ<àkzûO¶ÔaX®‘™U·©Wde8#!”‚8$pzSC vðG (©jF€0¤O…�åЖgUS-ÍÌ +n\4ò0 àdAŽkžñÜzjd·0B¾y‘e—˶ÞB¨*7OòŽO­wUÃŽŽñ#:gk2‚W=qé@uáH´ƒâ†ò#�â‚ѧÞéfZ7 CAÓ‚zšQ¥Û\C¤M—öð\êŸèñýºPLEd"M¹ùKœŽÇÜ×¢aY|Ñ 6íÞgqŸJ�ìm$»Žíí`k˜×jLcÔzê'ó¢Ã¹—á‡ÒæÞCr.íç1Ü$÷6YÉ;Jà�­nRQL�Íf“4ÀZ)( Í&h¢€ŒÒQHaš\ÒQ@h¢ŒÐ0¢ŒÒf�Å¥¤¢€ŠJ) \ÑšJ(ö—ÿMþáþbµ_ý[} ei_ñôßîæ+UÿÕ·ÐÒc^Iã™<¿O’GÉ÷ȯ[¬ÝG@ÒµiV[ë(æ‘FÐÇ ãÓ"»²ìT0չ殭m,~Xš\‘vw¹äz¾¿>³uç\>År(Æ}p3Ô÷4°ø‚â-}0¸’ q‚ã- �§=éÿð…øwþ�‘ÿßoþ4ÂáßúGÿ}¿ø×¯ý¯ƒQQäv[mþg•ý•ŠærçW~¿ä`ü3mÖÚ‰í½?‘®ÖæÎÖõ.­¡�QĈ%@ÁXtaž‡Þ™a¦ÙévþE•ºAw^çÔžõj¼,eu^¼ªÅY3ÙÂQt(Æ›wh‹ìÖþCÁäEå9bñìÉÈï’N~µ URÄ(ŽI­-Ìt•ÞÆÒH¦‰í`hçÏœ�"LõÜ;þ4ø­ €ƒÆUcb…è2x©h Gq G É8U’r3Í.ÅÝ»hÏ®)ÔPEPEPEPEPEPEPEPEPEPEPLŠ B�Ä‘¡fb¨  ±$ž;’I>æŸEÆŠ7‘$hÐÈ™ØÄd®zàö§Ñ@Q@Q@Q@Q@Q@Q@Q@%-%%!¥¤4ÓQµHj6 Ú¡z™ª  ÒU­þ?_þ¹Ÿæ*¬•kFÿ�×ÿ®gùŠÜ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(+‰LQnIÀ¬ã4¤ÿ¬oήߨ_÷¿¡¬ú�/üôûèÑçKÿ=þú4Ê(þt¿óÑÿï£G�/üôûèÖMïˆ4­:çì×WŠ’€ÀVo,…È(÷8­:�/üôûèÑçKÿ=þú4Ê(þt¿óÑÿï£G�/üôûèÕOPƒIÓ.u �ÞE¼fGØ2p=[ ùÒÿÏGÿ¾�t¿óÑÿï£L¢€/ZNÒŽr@È55Ħ(·¤àUKõíþïõ=÷ú…ÿ{ú¤f”Ÿõ�ùÑçKÿ=þú4Ê(þt¿óÑÿï£G�/üôûèÓ( ùÒÿÏGÿ¾�t¿óÑÿï£U®® ²µ’æêd†Æç‘Ί£ˆ´©ínî#¹ÊÚFe™Z6WD�ÛHsŠ×ó¥ÿž�ÿ}<éç£ÿßF¡ŠEš•QÔ2ŸcO ùÒÿÏGÿ¾�t¿óÑÿï£L¢€çKÿ=þú5nÒv�”s’Aª5fÇý{»ýEhQE�­Çš×Aü�dGZú×üy§ýtÈÖDte*u¨§Z‘jAQ­H(â”R Q@ )i-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEËëìSë�ݯó5ÔW'â8Ëê ƒ�Ý/ó4¥±Q܆ÆFºÜ0 §™±—¢ÿ:¿XZ-ôW·“¼1M|Äy�×$…裟¯9=«rŠ_ 5>!sIš3FkC33XšádÓ­mîÜÝÝžTU,ª"‘øÜÎPAêkÚæiîLRëšÍº4ï3I®ÉY¡ˆ¸;”àgŒf¶5ˆ®M:êÞÝ® ¥Ñ•âFP̦)�Ä åÁ䎆±­­¦†äË.‰¬Ü"Îóà Ëj&w.N¼�ÌpNqÆ1@Í�k†“Qµ¹¸kƒit"I]UY”Å󴜹ÐVg‰5 VÃVÓM§’b•Ú?/Î!äIc³aLÎ}GzÓÑâ¸Y5«‹w·7w"T‰ÙK*ˆ£Nv’3”'‚zŠÂñ&‡mqâM?Rž+é•#�¿�]¶l¨P½ ýhމ­j}¥™õÙÖ@¿h�Ö6WÝhfùBÆ`�1“ÒªÛx—V‘ïZyµX´ˆã±!ÖVÚ 'îÐà Žs�j]ÂûOÕÚ4û”g’)-�m£òš#—©eŒ'òzzÔC× —p[^.ç„Y[È€¹tòÉ’^ÈÊNF[Œ�(¥ðf¥s©iM%åÍÌ÷)°Kç$AAhÕþO/‚¤0#<×G\ï„ôé´»{»kˆ^9ã_T`‘$`«w&y‚qîzhLZ3IFiˆ(¤Í´RfŠ-”Rh¤¢�‹E%€Z)( bÑIKš(¤¥Í!†hÍRö•ÿMþáþbµŸý[} dé_ñôßîæ+YÿÕ·ÐÒêÈÔoµ«ÛézbÚ‰¤…çy.w ¥W. 9oZ½k¥ÙIyy/•o7¾ ÆH�ÏR+–OxuüM¤5xDÚ<4r,ά06ôš™4´¹½R•ä£uéÔÚû7ŠÿçãEÿ¿2ÿñUŒ|G®iúµôZ…µœöVWÚ¤´G‹"’NTcžýê´ž*i®˜Aã[Gså¡Ó˜� àg½oC¢kVz�ÕìÖ3KyKqçÛ¶ "‘• Þ•¾ÇG"‡ñR×míåØÙ†h®!I¡‘dŠE ާ!�èEyvþ¶¸ÓumkM•âòax¤Š(AÆ\ÁA$�ӌ⼾]u๸Y,'òb ó†LåT³dné·iZð³ÊS­ìùVÜß¡ñ\U…œçN4õµßmùMš+>{ë‹[ î¦�Fò’6.I=3Çã¦j ×¤k˜¡ŠÎI]„�•T©%v`�ØÂ�Ýë磅«%x¯ê×>B*ÓWŠÓÕ[E}ͺ¹¤ÿÈfÇþ¾#ÿÐ…aÞ_Ü[B³Åo±•ýî6± ðx稥ð޺מ'²·Ý§ancÇy¸·C•Fqßñ­pøZ²’šZ'Ýw6ÂàëJq¨–‰ëªî�n¢¸ÍKÇ2iÖö—¶vë!.óm½…TÅ�ݲ´¬ƒ,sÁämn1ƒWãñzK¡É«Ç¤ÞKkÆ í¥ù@%›rÊW<çÚ¾øý<é(®OKñv¡wj þÔšçÙ k|*1%2mÀ•ÇP9Íu€äŒ{(¢±/fÞºqóúg½[j…êf¨^€+IV´oøýú昪²U­þ?_þ¹Ÿæ(rŠ( Š( Š( Š( Š( Š( Š( Š( Š(  ×ßêýïèk>´/¿Ô/ûßÐÖ}QEr–Z�žƒ¬Ã©³Cq=ãOòÙ�Â]»0âÛ´sǽfë:ÛÇâmn®cšûx&`7dV" ¸ØCpÌsœãµw´P“^Å�GûJõÜx€ÚšRc4û íïÁã=;`qSE¨\“©H×·'Ä1µÈ·Ó˰Œ…Ýåa: )ÝÜž½«·¢€<ºIµ+ß ëªo"¹Œé¯æÂ.äžQ7•h×ËãvT{q^Ÿ¤±$‘°de ¬ôê(¢Š(Í�úöÿwúŠžûýBÿ½ý Acþ½¿Ýþ¢§¾ÿP¿ïC@ôQEQEaxª7m:ÖqÍ µì3Ï.âcVÉ8ïŽìÖ¿w³%õîšþmµ®‹yÄêÆg µ3Ü�¬Híø×wEržº¼’æXµRðÞxž u”´B £{Ý�ÇéÛÕÑEQEfÇý{»ýEV«6?ëÛýßê(BŠ(  íkþ<Óþºäk":×Ö¿ãÍ?ë þF²#  )S­@•:ЋR �jA@¢�RŠQKH)h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®;Ä×-\)ÿž*z{šìk…ñy#[\ùb¿ÍªéÅJVdÎ\ªâh:uÅ…ŠýµÃݹ-+™$ž=«ZªÚßGyØÛŠ…Ý�RŠßÉ…YÍgKá*§Ä.i3Iš+C1j�öÞ•öϱÿjY}«~Ï#í ¿w¦Üç>Õ-õõ¾›e-åÛ”‚!—`…±Î:Ozçq'ü"žoÙîä+ö�žCùž_Û·îÙ�ßwœc8 gWFjµ�õ¾¥eå«—‚Q”b…sÎ:jÍÖô-&ú ›»½:Úk� bGŒÓ·š‚KËh|ï2æò<»œ-Np[Ðpy>†¸� [iÉo§Ç6� ®§öEšÞéb³ £æ 1†äduë\y¸Šö]\Ck¥Ç<°2F#µ…H ¿¿%X’Àà6@SÐÒ¸ì{ZH’¦øÝ]NFTäzS«œðt†ãM¹» Eqrî� &5sÀf»pH>�3Þº,Ó¹£4™¤Í.hÍ%¦æŠLÑš@-™£4¹¢“4f�‹E&hÍ!‹E% f“4f“4€vh¤¢�Å¢’ŠÐÒãé¿Ü?ÌV³ÿ«o¡¬�'þ>›ýÃüÅk¿ú¶úC9¿ˆ?ò#ê_öÏÿF-qߨ‰²ÞFÌ6Þ+Ô ;°PîÈÛÔ×¥jÚ]¾³¦M§ÝoòfÆí‡‚çêqOà� Zk�é÷+2Ç5»Ê³Ks·æVQ´p3Ãgð¬jE·sÑÂVŒiò]§vôô_äs·zW‡cÑ-ﬦ tÒFѧÚUÙ³#…:Œ(SŸzõ¥x€ß™G‰@¶ówy`O¹œíÝœôã5„žð\R+‹€H#7ƒük°þÔÓÿçþ×þÿ/øÓ„m¸±5ùíÉw¾ëÓÔÆ°ÿ‘ÃÄîÛè ^¨Z“u~VÚÈ“—…µј¸S÷¸bqϸâ½çJš+�kóA"Kû:‡FÊ’ädzdWŸb¼|Ûðî +Þÿš>K‰q� R“J÷_¤N^k{{Me-íbí QÁb8Ç'ŒŽµNÒ �ó[-¬q¹–S±Û„ù!çäf㞀œÿ.Å¡‰ƒ�b²£’1‚!ùT/§XÉ–öV웋íh”�Ç©Æ:׉O0²j]É/ÐùZY§,Z’nÿüŠ]×oø&ü–‘%´P¤aš4J¤€8=^Ï?Ý5'…mhi<Îa†â%Upü–C€ÀÈUx' íŽ3[Ë)·lH6 ã�ÌþusD‚u›O*$�}Ò3lP7Ã$úšºä­M'«üÿà†Ì”Z§õ}_øW¤i~·¦‹˜ã¹²²ód[Hì¯&�Z-ÇU˜ä�b+=b–÷ÂwÚ—ª^È—“Å/‘q™aóܦ^s†Trpk»UT@ˆ¡UF dpEÈñĈò�Ò2¨Î1“êp¯µ?D<ÛMô^&Ô\AâI¹’?;O€ €ý8ÚAëžÕ¹ã;¿?JHd³¼E‹S²Vùq憑 �yêWŒs]rÃJò¬h²I€îØé“ß í…¶¡QÝGæ,S$è7‡F §�B ´ë¯³_=–�{‡%í»Œ’ñ‡¬Ý:ê–3A$sMd ·–ÆC-¼k*6>øÀæl¨8$`cKP²ºÖìüE,*$œ"Ú[¨8Y _;cÓ.Ì¿ð]}2(b� CF…™Š¢€2Ä’xîI$ûšá5m:÷Äú�½¥äªY"E"yRÉäÎÒÉ´ølÜ�NjXÒæ[k�7ÂÃQ½Š dÔ ´¾P]óçy.…p7w>„WsLh£yF� ‰�ŒFJç®jä”ñ�ÐñU¼M6þ+[½þ®â7h¬lõiüø'9Ë• „L|¼À$`äêpE sH…Ûs•P7SêhˆÒ­¼??„%ž±-êª"_JþdT—û¬²6cÉ8Æ9ã­r±\iÓkwVWWú;é¢ÚÜÉ⻆‡–pØ$|çr‡€6ÿx×±y1îvòÓsãqÚ2ØéŸZO&?ùæŸ÷È G\ºÑ¡ðý¶›¦]y—aRm.+GóäÜ9FýÎÄ’i#8¦xsUó_&®<�]Hd{IA Q„HI8e¸=I'®ÀCJÒ,h$`°Q’AšGŠ9ÑX¡Ê’3´ú�Jò´Ë}:Òò=_P³w»»ŸÏ¶¼Õ岌¹Ç˜WËx9†é´zšë<p.,õm“¤ÐÇ~R#ëÝ"¯“ÂÈü‘’O±&»Š8·yq¢ob͵@ˤûÔb(ãi#Uis•,pO©Àð j…êf¨^€+IV´oøýú昪²U­þ?_þ¹Ÿæ(rŠ( Š( Š( Š( Š( Š( Š( Š( Š( K–2§óªfÆLðËWè  ÿ°ËýäüÍa—ûÉùšÐ¢€3þÃ/÷“ó4}†_ï'ækBŠÏû ¿ÞOÌÑö¼Ÿ™­ (?ì2ÿy?3GØeþò~f´(  ÿ°ËýäüÍa—ûÉùšÐ¢€ ··‚IË’Xı•?�>Š ldÏ ´Ÿa—ûÉùšÐ¢€3þÃ/÷“ó4}†_ï'ækBŠÏû ¿ÞOÌÑö¼Ÿ™­ (?ì2ÿy?3GØeþò~f´(  ÿ°ËýäüÍa—ûÉùšÐ¢€3þÃ/÷“ó5fÞÜB ',jz(¢Š(;Zÿ�4ÿ®ƒùÈŽµõ¯øóOúè?‘¬ˆèÊTëP%N´"Ô‚£Z�PÅ(¤¢€RÒ Z(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+…ñwü†—þ¸¯ójñ\eõ�Güñ_ækZ.Ò3¨¯|2ÿj¶º¿HÌPOrþRr£7èÐ ÜÍTÓ¬àÓ´»[+gG‘¼.2{ŸÄäÕ¬ÖTþê|BÑIš3ZW¾•¢¶;le½v´QÉs�ì£�zå|­_þAÿÙ:—ö7_/Ì·óvÿÏ-ÞoÜ÷ë�—§5ÔßßÁ¦Ù½ÝÉa c{*–Ú ÆN;¤úSR�/ílþf{¨ÞHÙpWjmÏ?ð!Š@Ic3Kl7XËdíX¥)�ã†?Ôû¨Ú{I¡RßýÃüÅl?ú¶úuAuciŽòÖ „!fŒ8èjzå5ÿÞXêMklQJ‚I#=ëj%^\‘1¯‰Ž>Ò_�±ÿæ…ÿ@];ÿSü)áÑ?è§ÿà2…r?ð•êŸóÝ?ïØÿ ÔÑ|TÒÜ}ŸQeÏîåÆ>‡ük¢¦YZr²~‡=<â�I(ó5~ÿðçOokogŠÖ Œì‰�ÈW+ÿ7ýDòÿe]}äb0t16ö±½¶ßô/€Ãã,ëÇšÛjúú3�ÿ„þ¢?ùÿ²£þoúˆÿäþʺú+—ûüŸ‹ÿ3‹û/ÿŸŒ¿Ìä?áÿ¨�þ@ÿìª[Oý–ò �·îò¤WÛäã89ÇÞ®ªŠqÊpqi¨~/üÊŽE€‹RTõ^rÿ0¢Š+Ò=`¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤¥¤ 4†œi¦€j6© 0ÐMP½Nj'UÅM¥È±_€ÜoR£ëþEFâ«8ÁÈ ²ŠÄ·ÖÊ([„-�ã^¿•Luû1Õeÿ¾GøÐ­’|Eb;Kÿ|ÿõé?á$°ô—þùÿëн�ÿ -‡ý5ÿ¾?úôÂKaÿMïŠØ¢±ÿá%°ÿ¦¿÷Åð’ØÓ_ûâ€6(¬øIl?é¯ýñGü$¶ô×þø  Š+þ[úkÿ|Qÿ -‡ý5ÿ¾(bŠÇÿ„–ÃþšÿßÂKaÿMïŠØ¢±ÿá%°ÿ¦¿÷Åð’ØÓ_ûâ€6(¬øIl?é¯ýñGü$¶ô×þø  Š+þ[úkÿ|Qÿ -‡ý5ÿ¾(bŠÇÿ„–ÃþšÿßÂKaÿMïŠØ¢±ÿá%°ÿ¦¿÷Åð’ØÓ_ûâ€6(¬øIl?é¯ýñGü$¶ô×þø  Š+þ[úkÿ|Qÿ -‡ý5ÿ¾(bŠÇÿ„–ÃþšÿßÂKaÿMïŠØ¢±ÿá%°ÿ¦¿÷Åð’ØÓ_ûâ€6(¬øIl?é¯ýñGü$¶ô×þø  Š+þ[úkÿ|Qÿ -‡ý5ÿ¾(bŠÇÿ„–ÃþšÿßÂKaÿMïŠØ¢±ÿá%°ÿ¦¿÷Åð’ØÓ_ûâ€6(¬øIl?é¯ýñGü$¶ô×þøÿëÐÅ‘ÿ %‡ý5ÿ¾úô¿ð‘XžÒÿß?ýzÖ¢²‡ˆ,ÏðËÿ|�ñ¦É¯E·÷11oö¸íjEò£‹ø‹nü?ɬØÅ1å{‰L’±©PPÉS­D‚¦Z‘i☵   QH)€K@¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ä§qy¥Á{¡Ám|³q-Á„ç<„nAãý+'LñF«â3¥6�lb„µ][_Rì‡1(-Ÿá#½Icgm©höóéZÆ¡af�" !1´åLŒÎ�»q žAÏzÍðŽ‹s&Ÿ4ËâQQu¼Æ¾F×Äî ?ºÏÍŒœÔãÐÇâwÕ"±’Öò3¼pM4[WPIUÉÏE'�ŒÖ½q±j§VñŒMu§j�[XHÑÙ‡°”,²0ÚÒ³íÚª*¹=É=¨Ôñ©j¶ºŽ�¨Ï¦=¡ò­¼’Z)÷õtƒ·cÀ瑚ét�NgHµÔ­ÒD†æ1",€úàš»^m¦ésA¥h)­éW·6i¾_Ù£‰œÅq¼rÈ9ÎÞ�Û‘š´š}ìpèãĶ7š…ªXl1Fsû² �~ómÀßÈ7#4ßÑ\ÝŒÏℼ‹M»2Ï»ƒa̳…ù%Ù‚YS1† òTàç¼ Š( Š( Š( Š( Š( ©ê‡ö|HÂÒêéäm©´{‰8'’HqÔ‘W+ÄÚÍÎ�¦y–vW—R°Ž5‚”!?Æá;G^9=4øªÅí-f¶†êæKŸ3e¼1ƒ(òÎÙ2 Úx<õ æ’ëÅv6öqÞ¤—Mn.^æsqNâN3À9$w…¦Ä4©ô½JÞÏS¹¶ŠÖâÖrÖn“™¤‘$2È Á¹ÆGj­w-Ý—‡4ß \éúˆK‹|êÛYË:ÇZ%(§,rW=Éô ·Wñ†Š,>Ðdv¾� …b‰,@ÜyPXdû�Z~¥­Ûéw—F-幚Lñqã'§$–¯¥r>#Ðõ›§]RÆh$Ži¬„òØÈe·�eFÇßüÍ•Œ ijWZÝŸˆ¥…D“„[Ku !‹çlzeÙ—þ(V?Y[É®b¹´{EV– ãýæÖû„';ˆ ÎF:Õ«}Y%±¸»¸´º²KpYÖé� g#‚1ï\Ž­§^ø‚âÿS·´¼‚5K$H¤O*Y<™ÚY6ƒß €{‘éÍK\Ëmq¦âøXj7±Alš�v—Ê ¾|ï%Â�®îçЊÚ)Š$¶kÝ>öÙeò’YLyŠ$Ûµ Ë�ÏR*̾ ‚ßSŠÎ{KØ’Y¼ˆî^,DÒ`� ç<ààãÖ°üCª›­r*};TþͶ’;‰æ‡OšU¸u!‘ª‘´ `=iuTšûĺ|ÖÚ~¦—¶×jÏÚù �Î9)¸©8#’î(wT×­ô©R‚æâSLÉoò‘®2ç‘Ç='°5^çÅzu¼¤žh$š{˜“1@�÷YŽzÏàrp*®¯ö�?Äj euwÆŸöe[tÞVErÀØ6þ§�·’+ž¾ðÜöúz5·öªßÜi�ÙMötSk+ٹ܃·o9ÁRF4Ûë´Z5€»’ î7K)K»»P7:‘ÔÕi_épè:f°|ão¨ÉP Q¿sžÇçžÇ­mApgy×É–?*M™‘p€w/¨çPkί<7©Çg´[;YÁ5¬ÖqF2Áäž›*9v9Ϥ‡ÐÕË�>øÜjM-•Ôºsk¦k¨#FÝ<fEGWPàd çiëŒPEqqhö·þ%Ò¶éw1iQió•ŠhÙ_ÎŒ¨`àD)ôè1Å-7N¾ŽûN?a½Mj;×}Bõ�ËÏÆóéÊíQ÷xéŠô©ªj0i:]ΡtXAm‘öŒœØz×o§jQiºÅž•et${|ý®hšÞâFÜ7FÌN$r»± À}j-[Fûf�¯¦—£Ý潂ˆíe�”ÉtŽäŒó�1–Ç'qšï,uHïe6Ï ¶×«Í%´Ø/³2©%I^J7Bk?Pñn�¦Øê·w)p©¦N�N¡f,‚£<Œ8ôèk2Ó@Óô¿ˆ qŠ©–q%¬ðÛe"u2€ùÒƒœdqÚ£Ôô{«¿‹v·‘´«¸’æâ@Ÿ&øÖHöÓ'|gþ@4Zœê×tjæH!Žg| ˜rÁ@9Î~BztÅZ"¼ïNÓuÉ<1w%Õ½ÏÚ å¼3ÄI'¶„">ß]Ø‘¸êZ[�*â{iã±°½·Ò%Ô¬|‹m� <ç ÷£\cÓ£ôÛêW‘éºmÕôÊÍ´/3„êB‚N=ø¢)VâÞ9”² p\šáüE¢¢lÚ�êåÇËÒE¼Lé ØÛ€ÁÂ6ã’OP@ç®ÚÅ4ÛTu*Ë Á€ÅWu«Œµ­Ru¨*ë¥BÉ@k©Ã&«>�äβÔ³&”’>^ç§¥Ci«CywöSoso+FeŒOß1‘ÏlŽ=*¸¼ðšLÿcÔ<¡h ó~Å.ÂêìNnÇCÐöªú]û_ë�Ö�©C*Dñ[A%”‹¶0rIbîrèëš³«kII&™}<®æš_§. ?…Z¸½ŽÙ-XåSs*Ä«�•füÜûvÍEªG5üº"-´Â nDÓ†OõaQ�Cú|áQø§L—Rµ°·ŒÎ ÞÆdxs¹ “‘ÓÓ>ôúý´V“ÜÇÄñG:Û«D÷®Ì –Ž 8zÕ« B;ù&‡ÉšÞâ¦Hf2†Î‚CÚ°/ì.mt tfµ»’+»v†KxܳÛùŠx*3¹@ ãžïZž³hµ;Ùmâ½[ cŒ†¾æ´£p8ßóíÛ·¯~�ège*×—G—@vQ²­ytytWe*×—G—@vQ²­ytytWe*×—G—@vQ²­ytytWe*×—G—@vQ²­ytytWe*×—G—@vQ²­ytytWe*×—G—@vQ²­ytytWe*×—G—@vQ²­ytytWe*×—G—@vQ²­ytytWe(J³åÑåÐ)ê•0Žž# Õ*tZUJ•R€‹Viˆµa€¢¥˜¢¤Q@œ)§ŠQKH)hh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+‰ñY#YõÅ™®Ú¸Ÿ�øœ�úâ¿ÌÖÔ>3:®Ñ<çáÙ?ð‘Í‘�ôGÿÐÒ½;5æ?þ*¸Çú+qÿJôÜÖ¸Ÿâøoዚ)¹£5�Ð;5ZÚú ¹'Š6>l²Da†SØãÐŽAïSæ²£µ–ë\þÐ’3n–êÐÆߘ¥¿ÙÏÝ�kf±µMuìnZ-â•£UiYYX�ª¡QÙ˜í't­Œ× q¨}¨y×e´âø¼O>¤ š=‹å© ca‚ žrsCtZ^»%õÊÁ=¼Q3«4m¬ã*@e`ÈŒ¬7‚:VÄ…ÄlcPÎÚàÛ'œW m¨(¾Óü«�2æszWƒRÍ&õòÉ*#Q€ ž0Jìî¦ZM)’8‚#6ù>êàu>Ô g2Þ'ÔüË­ðXC¼‹š²I7™)þPªXŽøþ†´u�xhËcòÁçÌÀÊH ,j2ì$ú9䎵ÁØéW1\ùö¦15ä¼fÞÌE*Æ…@òÆñ·prA8n;æµuG:…¾�}%ÔsÉn�)–#¶Ò@,N ¸‹GŸL.$‚\`¸ËGÈ'iÏC�Åzü!~ÿ d÷Ûÿ�ð…øwþ�‘ÿßoþ5ëÿkàÔTy–Û™åeb¹œ¹Õ߯ù? Ûu¶¢{oOäk»*¬Ae©ÈÈèjµ†›g¥ÛùVéYÜU{ŸR{Õªð±•Õzò«dÏg EУmÝ¡ `=A¥¢Šæ:B˜"�SbÆ¡I'q’rOçO¢€"žÚ «w·¸†9 qµã‘+BQom�º[ÛC ÂÇUÀp*Z(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦E P!HbHг1TPX’OÉ$ŸsO¢€ cEÈ’4hdLìb2W=p{Sè Š( Š( Š( Š( Š( Š( Š( Š( ’–’€šE>šEFE0Š˜Ša ‰–¬‘Q•  Œ•%\d¦  f:aJ¸c¦˜è¦ÏjO/Ú­ùtž]Uòèòê×—G—@|º<ºµåÑåÐ_.�.­ytytWˣ˫^]]Uòèòê×—G—@|º<ºµåÑåÐ_.�.­ytytWˣ˫^]]Uòèòê×—G—@|º<ºµåÑåÐ_.�.­ytytWˣ˫^]]Uòèòê×—G—@|º<ºµåÑåÐ_.�.­ytytWˣ˫^]]Uòèòê×—G—@|º<¿jµåÒùtX%8%XÒˆèJ•R¤ R ªÔª´¡iàPHS€ œ)§PKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWâ¯ù �úâ¿Ì×k^Kñ/ÅñxÅZËhòï´I+ãøœcö­h´¥vgU7oáæˆgþ}[ÿBJôÜ×àh;¡#ÚÛ¬Ÿeùna”·˜¥²C.pƒ]ÖkZòæ™�òÁÍ&i3FkasFi3Yðj-ý£%�ÜB‰-•™=�÷‡qøô  ÑšnkœÕïïžþK{+‡ˆFñB«E2Jùb™S…Ï4Òfƒ‚<ƒÚ¹½"þù/ã‚öáå4°²É°˜åL•!�“ÊçŠÜ¼¸k[‹„‰¦x£gX׫�3�îhVÒÕ.Þím¡[—]­0@‡¡n¤p*m«´®ÑƒÔc­r¶úî­6‹.§Ó.£�VKrûÔ ¡ýí¹Áã‘ÓšKÏÜ纲[c`'ŽÚ;™Cl A/#~àùW·9æ‹…Ž¯Ž)¾Tgøò®oRÖõ ?M°–K�)æèBnIfƒË(Ìï Œu"›‰îeÓY’;k‹—½vÒÂÄC3þä7gû¼.;:¢¯ÝUAN®të·Z\·0ë)híZî9-²ÕxeÆùÍ Õu‹Sg-ü6kã¬J"ÜZqònÏ 3ÁÆ:Ñp::3\Ý…î½>¹uc<Úo—iå4…-Ü ÀËœ=éË«ÝIá«�Ey·2Y®Ñòîm‘ýyé¢àtY¥Ísš—‰`´žÚÎÚušèÞCm.èØ�¹€o˜aw`ôÏ• Úþ˜·¯hn��IR1€ÉPq‚ØþsíHfžhª1jÖS}‹Ëœ7ÛPÉo…?:�’zqÁq×›kâ+h,â¸Ôn¶}±å’Õd“¶G'iSëϵt4f³íu­:ñ€‚é_0} <¼‘œ‘Ø‚ê;ÕVñfˆ� ß J7DãäoºÇ޹éH ªZ͵״ËÁp`¼Fë¾V ¨UçæÉê¼GZëºeäRÉÚ‹nó(1í ÷O̱èh¥Fj»¶ŒÊâ%0¨yw8ô-è8=}*`Á”2�Aw¤³Fi3Yz–®öS¬Ö�w*§�:£`ǯ»p½ð}) ÕÍ.j('Žæç…Õâ‘C#)àƒÐÔ™  -þ?þ¹Ÿæ+mÿÕ·ÐÖ‹ÿ�ÿ\Ïó¸ÿêÛèhÕÊkþ!¼±ÔšÖØ¢*($•’F{×W^qâÙ6ø’p*uÿtW¡–Ò�JÍI_CÎÍ*Î�àí©?ü%z§ü÷Oûö?µ4_4·gÔY@sû¹q€¡ÿ⌭È.´«.‚T�­{504gT½ ž:½9)s7äÏ`¢¹¯êSßXÍ͸@UPž¸9ãô­-gXþÈKM¶SÞMwqöx¢€ bÛú»({×ÍפèÔtåÐúš•jj¤zštWß6ZÍrÞÕ0ÀndmöüF ]Øó2ySÇ^+w[ÖâÒ-ð©ö‹éAû=¢°)_º£»¬�MZ+*ß_·ºÑ¥Ô ŠY>u²àKލCäõÏÃã{»¿Ú\Zi/.§rIK]èw¢ó# ®p üÄøPkEe¾§qy¥Á{¡Ám|³q-Á„ç<„nAãý+'LñF«â3¥6�lb„µ][_Rì‡1(-Ÿá#½uTVD~!·}R+-o 3;ÇÓE±%u•\œôRy8ÍkÐErºçŠot­Z[(4ø.D³ Ë2£de„Vî•l|ݪ[O ›‹hš”´ÍgòVPSå Ü0ê ûPKEq—ß4[MfÆÈÍ:,Û¼Õ–Âádá6©@N[#¡­Æñ «ÙÁqmòîVÚ8å…àfcÔáÔÜÙÇE4¯Ef[ëpÝkº\v÷ siÊL©±1`6ž¤eO8ÅXÒïÓTÓ ½D(%\´mÕpÊ}Á¥[¢©ÜêQZêVV.®d¼ßå�ÅÜsW(¢Š(¢Š(¢Š(¢Š§¨jÙñ# K«§‘¶¤vÑî$àžI ÇRE\¢°ÏЬ^ÒÖkhn®d¹ó6[Ã2�,í“ ‘�§ƒÏRÎi.¼WcogêAyqdÖâåîa‡1Çî$ã<�2Gq@´VN¯â; X} Èí}:A ÄX�¸ò0 °É÷´ýK[·Òî.8Œ[Ës4™â8ãÆONI,_JÓ¢±cñ5‘µ¼šæ+›G´Ui`ž?Þmo¸@Rs¸‚äc­Z·Õ’[‹»‹K«$·�n�)Úr0H#ô¡E`Å[5îŸ{l²ùI,¦<Å ’mÚ…Ž å€Èg©f_Ao©Åg=¥ìI,ÞDw/"i0HPsžppqƒë@ÔV^©¯[éR¤/ÍĦ6™’Þ=å#\eÏ#ŽzO`j½ÏŠôëyH <Ð$I4÷1&b�î³ô#žÀäàP埬jÑhÖîH'¸Ý,p¤P.îì@Ü@êGSU¤ñ Áe×eü7a³eŒË#-Æ®0¤ä°é@4UM;Q·Ôìòܰ�‹)0ÈÊÅYHìA¥déþ.‚ûK}R]3P²Ó–ØÝ «•�k à+³gôí@ ›¦kPêrÏÙîmn!Uw†áB¶ÆÎÖà‘ƒµ»çƒœU»Ë¤±±¸»”1ŽšV Ô…8÷â€'¢¹ù|c¥Ã éšÁó�¾£$Q@�FýÎxgsž{µµÁ�ç_&Xü©6fEÀ~ܾ£œ}A  ¨¢Š(¢ªjzŒN—s¨]ò-£2>Ñ“€;Z·EP±Õc½”Û¼2Û^¬K4–Ó^5feRJ’¼”n„Õ ÿiÚeŽ­wt— šdéêbÁ*3ÈÃ�N†€7hªpê�O«\iÑ«™`‚9�ð6aËç9ù éÓr€E!£{›¦]ß̬ÑZÂó8AóªI=ø© •n-â™A "õÁ "šEJE4Š„ŠiZ˜­4­BR“eT‹X‚]jçKò.Rh!xðŒ¤‘ò÷<�JŠÃ]‚úûìfÚîÚfˆÍÜų͌ œŒ2=(þÊM•—­ø€è‹,’èú�żI½§·Øg O°êíÎ¥¤vO43)»™!DÀÊ3~n{`ç  öQ²²nÚ6Ð(ÙSí£mA²�•>Ú6Ð(ÙSí£mA²�•>Ú6Ð(ÙSí£mA²�•>Ú6Ð(ÙSí£mA²�•>Ú6Ð(ÙSí£mA²�•>Ú6Ð(ÙSí£mA²�•>Ú6Ð(ÙSí£mA²�•>Ú6Ð)vTÛhÛ@„§©vѶ€œœœ€ž(à(§@ê)h¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ùÿã|ÚáÔ`œ÷Þ¾€¯ž¾91_Û|Äìøú¿%Tw&[^kHµ/³Úù/!³óndóï/ÂãÑW=‰÷®û5åßñÿ 4ãhèmÎ?ÛZõ Öõ•¦Îz.ðBæŒÒfŒÖFÂæ¨Ãb~Þ÷·R f¬ ,Iì?¼{ŸÃ¥\Í f¸ë�*öIoc¹¶Ôn"žéæÛ Ù¼DtS‰~l… 9ôâºüÑšäm´»È¦²ŽÚÛQ·Š•›lËf‘ÑŽ"ù²T°îy®®àLÖò-¼‹ÅHGuÜìHÈÍ?4f€0´í"õuÇÕ/VÊ0˜™-7~ø’çÈ1Ç^½h°Òµ-/Ö–­dfˆ·˜’+äRXã#‘Ôsƒ[´P3’Ô µ… >rê?l6Û™ A°®ÕùIêsÐw©Ç‡.äm-´ÍsÌ) “2.Ü„î‚p;zWMFh°\Á:Ö©5ÌÚÃÀ –­iVÄ•EnY²ÀeŽn1HšV­u%ŒZ”ö�mg"ÊÛæeû¥�áyäã<ŠßÍ  ûK mõÍJùÙ WK@ ÈØñïXú]¬ÿñ,Ó$†A�,­#•![gà÷Èpßðê( \øTQ¤rÙ›(µ½Å„¤y»Ê‘Œg“Îyã¥-Ÿ…äµÔøŽkU¹k”vº˜2±%‡îó°�O_Òº|Òæ•†r_ØWÚdz„‘0”2]9"˜RY bÜv,?­—ÒYu]"x6-µŒ2ÄT“œ0P¸ãýšÔ¥¤%/…/›H´·†æ®QçŽgá­ævf�¼\vÈ5vóÃóÌ5Å€À‘ßYGm’Fªãž80éšèsE9ÝCÃrê3\‡™#Šm5m2¹,1lãÓ‘Þ¥Ò4!ç“P¶·w‘<ý¦[€Ày“Žp@=kw4´€‰í-¤2—·‰ŒÊ]ÈõzŽO_Z™@U ;RRæ�Å®jãJÖãԮ簸òã¸�9ÍÚx£[9:n5ÒQ@ÚŒÚvš œþðÈîq(p7ðB ž�Eif’—4§¢Çëÿ×3üÅn?ú¶úÂÑ?ãõÿë™þb·_ý[} :¼¿Æ�L¸Ï ÇüW¨W’xæO/ÅÓä‘òFGýò+×Éc|C^OóG“œ»aתýKú†�ö½QšâEµ³IʵÂFîÀÔÔ1ZMae¬EäQŒ*úàg©îiañÄZ<úaq$ãÆZ>A;Nz+ÝXzÜ‘OËOKuþ¿ÏÄu¨óɯ=}oÓúÿ.ßáÛîƒPödþF¬xöîk´+‹p¦dÔÆÝѼ€Ã;P8ÎpåÖ¨ü3mÖÚ‰í½?‘®ìª±”§##¡¯šÍ±s^Ÿ’>‹,ÿu‡Ïóg”xŽ{;o \ǧ^^©M/ìr‹�ç÷ dçy ¨Ic’r9®Ãź]�·…|M} ²-ÕÅ„ÞlÇ–`#8=°âºrPik€ï15=ÆæÒâïû8Ü]Ëj`a žSÌ„cil�ô'§jó­.Ñ´ë{ ©®áÐĺ•ä-{5Ïšê�¥ Iò©Îà9 œ¶2M{0E¦Å�B’Nã$äŸÎ€9Ë;mKG·ŸJÖ5 4iI ˆý ‡*dftmÛˆÈlò{Öo„t[™4ù¦_ꊋ¨Ýæ5ò6¾'pIýÖ~ldàŽ§®Î{h.­ÞÞâæ�Æ×ŽD ¬=<E½´véom pBƒ HT{À J-PêÞ2ˆÝiÚ¤Ö4vaì% ,Œ6´¬ûvª€J®OrOjé^Hêi*^[ >h ±2ƒÒMøãøOJ»Ey7�.ìá/1_ùgh…1X#!Ësp7uÿ€Œžæ¯øm®–m'R’1;ÜÆÓE[œ-ª.Uåp:½b�dy;ãsËc¦Oz¯•§[\ ‹{ X§ˆ„‘ªÁðä ãÚ€<×Q±Ôîuh×SÐ/öýçf{{ˆ0  ˆÉ�cfÉÆ[$u®—ÎÕ$ \kVBÞâÞù¢�ƒ©F-ªÈ0Nf ƒÐœsÁ®µ¡‰äI4i#ÎÆ* \õÁíI4\ÇåÍÈ™ µ†FAÀ€ 嬯üψ—¯öEb–Î+d™ìeXË£Ê[ç+Œa†psÅ?Ašx4=°A)kûËÙ-äEÜ‘+I#£9ì¤cï êYC©VR0AïMŠ(à…"‰#E Š£@à@w¥i²®¡¡½¶“}m¨Åo2ß]\DØ3˜±¹œðùlüÃ#¶{TÚ.�}Ιö++»;ø­¤]Vâä³HcÀË$>f0Î#Œâ½Šà-l­ÃÓh›j�j±Ý1�÷M>T$èNÿ˜8ÈP3‘ŒVï„m®í-o"Õ#vÕ>ÐMÍÑ_’ç�±�à ¡p1Ø‚=ÏEEQEQE‹âmfçFÓ<Ë; «Ë©XGÁÊŸãp€�£¯ž‚¶¨ MˆiSéz•½ž§sm­Å¬å¬Ý'3I"Hd1�ƒsŒ ŽÕZî[»/i¾¹Óõ—ùÔ'¶³–uŽ6$´JQNXä®z“é^‡Ey÷ˆô=fé×T±š #šk!¼¶2mãYQ±÷Æ?3eAÀÁ#Z…•Ö·gâ)aQ$áÒÝAÂÈbùÛ™veÿ€Šëé‘CR’4,ÌU–$“ÇrI'ÜÐ «i×¾ ¸¿Ôíí/ �RÉ)Ê–O&v–M ÷Ã`äzsRÆ—2Û\i¸¾�ìP[& ]¥ò‚ïŸ;Ép¤+�»¹ô"»šcEÈ’4hdLìb2W=p{P!âTÝk�éSéÚ§öm´‘ÜO4:|ҭé ˆ¥T� €XûëKª¤×Þ%Óæ¶Óõ4½¶»PÞx&×ɆqÉMÅIÁ|�q]�ÌêÿhÓüA& –WWq\iÿfU·MådW,ƒoêxy"¹ëï Ïo¡G£[j­ýÆ™ ”ßgE6²°M›�È;vóœ$`s^�EsÖÚb‹È®4 ˸ÌÐý¡„;ÖB¨6¸\å€ÀS´g=�&°ÿ³n–Â!%–¡‘ý§$ðGn�ö›XÄxMª2Ê ï8 0`‘^‡Er ³ÚXiëy¥]Íu ÝýšB 7–[#Íä$ƒiç¾zsYRi�›¯øG49ì­³e‚âÞh<µ�É@ +pìIÏN@ɯD¢€9? ÚIk©êõ§¼PˆåÔ•„Û×p(7|ÅÚF{³`œÖæ»ÍáíN(‘žG´•Ud±(pîkBŠóKÏ êqÙíÎÖpMk5œQŒ°y'…¦ÊŽFÝŽsé!ô5rãO¾7“Keu.œÚéšêÑ·OÙ‘AQÕÔ89ÚzãßÑ@\Z=­ÿ‰t­º]ÌZTZ|åbš6DWó£*ø }: qKMÓ¯£¾Ó�ØoSZŽõßP½`DrÃóñ¼ðêr»T}Þ:b½Šó‹};R‹MÖ,ô«+¡#ÛçísDÖ÷6áº6bq#•݉ãëQjÚ7Û4}}4½î5ìGk, ¦K Ìw$gœ�Œ¶98ëŒ×¦Q@m¦�§éâ=R),âKYá¶ÊDêd ò¥8Èãµ3SÑî¯|MpIéhØçý´ÿëW¨W–|8çÄ“Ÿútoý +Ôs]þ3š‡À;4f›š+qÙ¬¨®gµÖÍŒ’ˆ®M~Pßìçîž½¹ëZy¨-í!¶y¤Œ2gß#±ÉcØgÐtµYÍr:ÌK¨ÝÝK, 40Ϫ•¶ûAˆc|ލU†Nå\í=+¬®n_ +\Ï*¦“(–V—uÞ�çI–9 ¶ñ�3Ç(+è°®Ÿwm$P40Í4¶¬ZÛìæQ�ñ» UYs´g5ÓÞ †²¸[VU¹1°‰› |pOãŠÁ‹Âê·0JɤÅåJ²n´Ó¼™2§8 ¼à`ñÓ5¿q \ÛÉ…‚H¥IF*p}äP€ämVê[iìÖóU·Ö’(‚êmÉ#©r·B¤ü¤ŒE/�«kZlš½¡ºHg™ZÇ.Çò!öç€å³Ï Öõ–‹�çÚÞêêêp†4{™lRA `¸žx¦¦ƒZ]½„7Wq-»ŽXåÚà’zà`õ<JÀs÷×Ð�/NH/µf�ûGÊ�78¹Oݱ1�¿1ç¿Ö‹[ûË‹x`¶»º[ ûÿ*ÞâfÌÂ!/‚y²°ò+z/ZEä6áåŽëíM+¸-$›JüÇ0z t­áû&†æ-Ó,sOö• øòdþò29ç¿SëE€È¿¿ºðäš„ÜÍsب¾ÐþcFá‚ýãÉS�p} Xºµ¸Ò%Ó˜jw·îqkp²Ë�Û”üÉýÂÏËŽ+JÛDµ�n|çšîK”òå’å·3'?/9<Þ™g [ZÜÃ3\ÝÜ}œO.å‹#q×däÐ3;J± âQ^ûQ’;6ˆÄ’^HÔÉÈ'ž}i°³ÜxFÎ2ÇÏÖ$aÏi wü£ ÐVý½„6÷×—hÎd»(d FÕÚ1Ç¥féš=Ťö‹3Fm¬VT·�Çs ¤Œq„ù@/u»«×Ó^ÖÙá°mI"YÄØ2ÅH(Ý$ýºT±xÖ ‹ÿ³[ÂIÒW{:ƒ�ÉŒª’¸ž£ŽjàðŢϭÍÚÃÇÚc·-98Î 'Œ÷ãjÓFŽÊèËout�îg»Ç” g8ÏRN3ŒÐ{oÃr-]bÄrYµäì[ýBŽ0xäçpí÷MS³Ôo4èl,ãÓþÓ{·Ž Á1`ÄAàoÇà8ô±'†aŠ èí�·Ê¦1¸X÷îu@î~=XÖ¤–K©Á~YİFñ*‚6�Äž?Ù†dÁâØd·7[41}‰®Ð—Ém¤«§N ã뚎ãÅwVÂé¤ÑÛeœQKtEÀÊ\�$séÒ­?…tù,¬mç1ÙÊdC¸eòÛŠ·©8㎂§»ÐmoSI0Š"Kµ‡Ê`m㎽ó@%ñWØ£¿:•‹Z½¬qÊ©æ«oWb«Ï@r0{Zv™â˜µ®JÛù’Û´aÒÎQps€A郟LUË­ÎöââiüÆ3Â�° €¡²°Ç!�9Î{ ±cdÖQ²µåÍÑc÷®=†¤6£ä‹Ïô;·û2«|‘gÍÈΟ˜Žõp€pF}i3KHbÖ-寡}y$TË´æIAY$ê"öûÄr21Þ¶kûÂvW÷²ÝK&C’>Élß«DXþ$оŸ|š…šNŠÈrUão½ŽO¸5j©iš|Z]’ÚÂÙE$çËDë슫úUÊÔÐÿãõÿë™þb·_ý[} `èñúÿõÌÿ1[Ïþ­¾†€YºŽ�¥jÒ¬·ÖQÍ"�¡ŽAǦEiW)¯ø†òÇRk[bˆ¨ ’TIï]ZugRÔ�ŸÜsbªÒ¥OšªºûË¿ð…øwþ�‘ÿßoþ4ÂáßúGÿ}¿ø×;ÿ ^©ÿ=Óþý�ð­MÅM-ÇÙõPþî\`èÆ»êQÇÂ.\íú6pSÅ`jIG‘+÷Hè¬4Û=.ßȲ·H"Îâ«Üú“Þ­QEy2““¼�ÙëÆ**ÉhQE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|ññÕ ñÍ©È=þ?%}^ñŠé-üoî XGÏüJ/`µÌ¯‡8"˜ný•Ïþ>•êå ¯!›ÅÅÛhçwA÷Ò½[5ÕYÞz´PÔ\ÑšLÒf±6šjº°Ê�FHà÷f±­†5ùŽŸÿÇ?lÁæöÛþß÷»zó@yªwz¥­”«¦V•—pH`y[¤ $sVó\eýÂ^Üß·Ù¤¸ÿKHÌOk3G$qºY#a÷ËqƒÒ��E¦©k{+CJ²ªî)4/cÔ‘î*Ô’$Q´’:¢(,ÌÇÔ“\v�:YÝXo%¿ú\‘ˆÖÖeŽ8å(g�úÀ¼`u®�\ÿ�¥ÿ^²ÿè&€'—Q²·XškËxÄ£1—•FñÇLžz�Î�5í­»•žæ˜.ò@§nqž{d�õ5Æè–�3›MmåÔl[:ôX€ÁŒg£ã®sÚ¡xæ—Â:–¡{(–éäŽØ¿¢E(_Õƒ1úÒ¸Xîäž(vy²"o`‰¹€ÜÇ §Ú£ûu ‚YþÓ•’O0mB:‚{Yü±ÊÚG–êØÔ¢ÎÓžÍ\–¡æiú&µp¹6·×0Ê?¹(‘¶7Ð�”ý‹…�I’Xá‰å•Ö8Ðgc€ u$ö ¦£e»ìw–÷~÷“*¾>¸5•â ™ÛEÖ k’³—Óc|‡  »ó«+¶Ò5;[ëÙ-&N—hµ]…B·Î 9Î#žÜÑq�¬WNd͆6(á¬;t>ÕjRI,iynÏ&EYT”®Fx®ÓûOM·¼€ÙÏmu¨iòJ¬Ì¤Ér¹f+´’ Æp~Q[ñ� hH,¾Çæ7íÛ¼�Ÿ7¾}Z.ñ½µnaaº#æÞ g+ê1ÏáwlbŠ_´EåÌ@‰÷Œ9=6žùíŠâ|:—1q©*4ךb­ƒ¯DU^cÿx�¬}yô©í®!ŸÃÞ¶ŠTiÖxŒ˜lS¿#¨Æh¸Îª=[N–èÚÇj÷ J˜–e.ê1œæ¦[¨y¡Y’ ƒû ç?…qÚv™y©¥ÔA-#µMZY|ü“0Û1lŒ˜ÎzÅZ9ÒuxÕˆ¹½Ô¤µ¸ÜBø ÏáH•oíM‚ß™ÑmY‚WùFÓÈ'=*Îk�ñ-ÜÓizí°¾ŽÒÞÉVí6.dTä“Ï9Àǧz»y­k-®]Ãf„-¬±¢ÂL!d)%‹°nrq´cëÍ ;*Š;˜e¸š|É<Áƒòädsô®j ZýõHôw¸ÿJ†îGžB‹Í°”ãÞ‹ŸcW´qw%‚_@"Ý}tn%ósŸ$ð»qü[uã­n抢ßÚ~\Û>Ç¿ÎVwcÊã;¿ÚûÝ8éWi Z3Išåõ7‡PÔ§Žþ-B8m¾[o&Îgýæ3çU##¢óÇ>´ÕQYú5Ü÷ºjIs‘Ì FßG¿‚°×UúÕпãùÿë™þb·Ÿý[} `h_ñüÿõÌÿ1[ïþ­¾†€^qâÙ6ø’p*uÿtW£×—øÁñâÉ—á8ÿ€Šõr…zïÑþ‡•œz¯ÔÎ2· ºÒ¬¸R R>µ©¨ißk×õ®$[[4œ«\8$nìMC¤ÖZÄSÄ3ötee9WS"à©î+ÜU`â»éøÛüÏXy]ßm­ðn¥=õŒÑLÛ„U 냞?JÒÖu�ì„´Ûe=ä×wgŠ( -±Ÿ«²€0‡½sŸßt‡³'ò5cÇ·sXÅ¡\[…3&¦6î�ä˜&Ú€±Æs€?.µóY„12Šþ´>›/“– ¿êämñe¬×-áÝPC æFßoÄ`•Ý�3'•kª”l-'ʧ;€ä‚rØÉ4é�©Ü^ip^èp[_,ÄKpayÏ!�xÆJÉÓÐdv¾� …b‰,@ÜyPXdû�Z~¥­Ûéw—F-幚Lñqã'§$–¯¥r>#Ðõ›§]RÆh$Ži¬„òØÈe·�eFÇßüÍ•Œ ijWZÝŸˆ¥…D“„[Ku !‹çlzeÙ—þ(V?Y[É®b¹´{EV– ãýæÖû„';ˆ ÎF:Õ«}Y%±¸»¸´º²KpYÖé� g#‚1ï\Ž­§^ø‚âÿS·´¼‚5K$H¤O*Y<™ÚY6ƒß €{‘éÍK\Ëmq¦âøXj7±Alš�v—Ê ¾|ï%Â�®îçЊÚ)Š$¶kÝ>öÙeò’YLyŠ$Ûµ Ë�ÏR*̾ ‚ßSŠÎ{KØ’Y¼ˆî^,DÒ`� ç<ààãÖ°üCª›­r*};TþͶ’;‰æ‡OšU¸u!‘ª‘´ `=iuTšûĺ|ÖÚ~¦—¶×jÏÚù �Î9)¸©8#’î(wT×­ô©R‚æâSLÉoò‘®2ç‘Ç='°5^çÅzu¼¤žh$š{˜“1@�÷YŽzÏàrp*®¯ö�?Äj euwÆŸöe[tÞVErÀØ6þ§�·’+ž¾ðÜöúz5·öªßÜi�ÙMötSk+ٹ܃·o9ÁRF4Ûë´Z5€»’ î7K)K»»P7:‘ÔÕi_épè:f°|ão¨ÉP Q¿sžÇçžÇ­mApgy×É–?*M™‘p€w/¨çPkί<7©Çg´[;YÁ5¬ÖqF2Áäž›*9v9Ϥ‡ÐÕË�>øÜjM-•Ôºsk¦k¨#FÝ<fEGWPàd çiëŒPEqqhö·þ%Ò¶éw1iQió•ŠhÙ_ÎŒ¨`àD)ôè1Å-7N¾ŽûN?a½Mj;×}Bõ�ËÏÆóéÊíQ÷xéŠô©©ê0i:]Ρt[ȶŒÈûFNì=kƒ·Óµ(´ÝbÏJ²º=¾~×4Moq#n£f'9]Ø�`>µ­£}³G×ÓKÑîáÓ^ÁDv²ÀÊdº ÇrFyÈËc“ޏÍw¶:¬w²›w†[kÕ‰f’Ú` Ƭ̪IRW’�К¡âí;L±Õ®î’áSL� �BÌX!FyqéÐÖ]¦�§éâ=R),âKYá¶ÊDêd ò¥8Èãµ3SÑî¯ß]Ø‘¸êZ|úUÄöÓÇca{o¤K©XyÛ7E<ç ÷£LcÓ£ù ÷Q¾�LÓ.ïæWh­ay�SïªI=ø©`™n-â™A "õÁ¯>ñЉýµjtk«”k/HÑ3Ç ØÛ€ÁÂ6ã’N2ãÞiêɦZ£©VXPF8fŠ( Š(  ص¸%Öît¯"å&·„L]ãÂ:’GËÜòj�Oñ½ý÷ØÍµÝ¬Íž%¹‹g› Q’F ž•�ºšÿÂ<ŸaÔü‘d-¼ï°M°ºÈÌpÛpF:‡µA£jÍ©k×Zµæ—«A2@ðÚ[Ëa*lˆÌK ]ʯèuÍlkž$:Ë$º6¥smyíÄEG¶@Äûߊ»uªÅg‹Ï Êo&H02ŒÀŸ›žØ9Æk7YêSxv5´œ[Mx· ñŸÝªFΡû/Îñ¨üg¦M«Ùé–‘„VÔ"2Éo�ѦqÈû½qžÙ  ®d²Da‚§±Ç¡êz³šÎ}ÉåyºŒ»a 䱩'’v«’yéZ�©ëOe;EºJcT23»(É  ";3 e„Ñl’T�›© 0eY¯%‘r9k1zU÷D–6ŽDWFYXdz‚+#LÖžöuŠ{tˆÈ®Ñ²;0% ¤:#+ Ž­IçŽÚÞYæ`‘D…Ý�`I 6ÖçÉÌ'˜²ƒ÷|cåôãŽ)­ehöÏlÖ°5»’Z#*Äœ’GCÏ?ZÌ%€[™loá€o2H@]Œ@Ýœôޏç%߈m-.e€Ç<²FÑLj�ò8$ ç®O`1ÍZƒIÓm† Óí"ùÃþî_˜g�ÔdóïS5•£ÛÉnÖ°´21gŒÆ ±'$‘МóYÓëñÁkÍa}æM?ÙÖ,,›°[»Œ šQâ+1k,ÒGq±J!kg�÷¾aª€ É ä`â�ÍY#Žhž)Q^7Yd0=AÅU‹HÓ ‰ã‹N´Ž91½R±Ï#ÔÚå¬ëqç$Ö’['™,w+µ•9ù¸$Áè{TPxŠÞi ¥ìFe-neˆ(Ÿ8^zã±Åj¼0Ë$rI;ÆIFe¡#·iöQÉ,‰gn¯("FX”®N9¬ë?ý²ýì×JÔ#’&Q+H±í�##8sÛÓ5/öÒÿc\jKhÑ™a]ßë°ÛW›�O¨  ²Û… ¼[` Ä»# `môÀãŠlv6pܽÌV°$ï÷¥XÀfúž¦£½Ô#°Þj17¤ ³œ3tÏ·n��Š VX¢HÃ1v e‰É'ɪCF€j†ûÌ“>gœ"ÈÙæl([§]¼V…UÓï~ßln=ˆduNs¹UІüqš@:ãN±»“̹²¶™öíÝ$JÇo¦HéNšÆÎâtžkH$š?¹#Æ—èOJžŠ­s§ÛÝ%ÆPG,ð˜^xÔ 6žÁ±ïVc�!‰#�B¢(U°´RìÑIE:¨O¡é34×UŒ²¹Ë<–èÌßRE^ª—º�ž�å}®ašÛ ž}N:Rx€žÚÖÞÊ ­¼PDBD�T~¦Í%« ÿÇóÿ×3üÅo¿ú¶úçôøþú䘮�ÿÕ·ÐЫÉüp8ñÅ·ÿ‰|ú•ô|÷ñÅÊøæØn#þ%ñôíÉMn&a|)¾(¹ÉÊý�ÿô4¯aÍxï§Sâ›�¸ÿ�7ÿÐÒ½‡5´÷1†ÂæŒÒfЂŬÈí¥¹Ö~Ý$f€4Q�÷¦Ë³è?Ò¥Í5Ä\Þ—¼¾]iö³ Ó"µ†UØ6/ÈѰÁ#ýì×mE Gi{²òÈ%ÞŸu)½óè,Ò¶ñ±¾E�FC÷s]}æ>Ç86æà Â1ûÎ>ïöÙâK{‹‹Û-@Ípäst… ‡Lðp¤|£¦®Ç4¹¢Àrwö7^"“Pžy­£kkÚcHåƒt<€0O©«RÏq­Ýi±.Ÿumök…¸�ç�j¦Õ#jŸâÉ=GÍtTPFŸ˯ë’4n‰)‡Ër¤Äx8=ðk7JÿHÓ|=¦ã d¸_C˃ÿm þFºª†+Kxeyb‚4‘É,ê žO4 âÅ„¦îÈͦݾ¨š˜’âëËb†=ç7M¸ÛÇlv§Xi’ë¿óDí4¾{‹7"hÎá´Ë¿nÒÀÛÇw®æŠVŠ·…¬Ks‹&™nllÙ×i]ö«�^c>æ´.t(dÕ´‹9-Þ[{)bcƒ´‘åà1¸'ÓÚº7Ž9B‰#W Á—pÎè~´úá#´Õm4«)-íî ÅÝ»ió‡t_9òänà*–äúŠv¥ lMpÛÙÜ··€X2ÈeLe1Ôð:WsKH6ÿI¼µ“V¶Ñâš(æµ�ò7í½¼Ìyb�yñõ«~Òßì×h'¹¶†G�–8íž×a^N3»€{qï]=-*M§ùÂïý2í>Òª>Iqå`c)ÇÊOz¸8g8õ¤¥ ®Nòîæ bù¥Ó…âȾJŽçjÅŽWå�”ää’ Ï•ÕÒÐ_‡MÇö¦…eZš©¦�Æ·Ä –³\·‡uA 0™}¿‚Wv<ÌžTñ׊ÝÖõ¸´‹|*}¢úP~Ïh¬ÊG×î¨îÇ€+#SVŠÊ·×íî´iu"–F�O�l¸ÆãªÄG¹½sðøÞîïÃö—šK˩ܒR×zè¼ÈÃkœ‚¿1~ÚÑYo©Ü^ip^èp[_,ÄKpayÏ!�xÆJÉÓ´­Eeêšõ¾•*Bð\ÜJci™-ãÞR5Æ\ò8ç äö«Üø¯N·”€³ÍD“Osf(þë1ÏB9àNnQYúÆ­�`.ä‚{�ÒÇ ERîîÁT Ĥu5ZO¬PMq¦_Ãqq1†6X̲0RÜaÊã NK”³ETÓµ}NÁ/-Ëز�ã Œ¬U”ŽÄAúVNŸâè/´·Õ%Ó5 -9m�к¹Xö²ž»6qÏNÔÐÑYºfµ§,ð}žæÖâWxn+llín ;[¾x9Å[¼ºK‹¹Cà‰¥`½HQ“�~(z+Ÿ—Æ:\:™¬8Ûê2EoÜç€FqÇ9ç±ë[P\Þuòe�Ê“fd\àËê9ÇÔšŠ( Š*¦§¨Á¤éw:…Ño"Ú3#í8°õ  tU V;ÙM»Ã-µêijIm0ãVfU$©+ÉFèMP¿ñv�¦Xê×wIp©¦N�N¡f,‚£<Œ8ôèhzŠ¥©úµÆ�¹–#�ßf°PsŸ�ž�1Wh¢«j7ÑéšeÝüÊí¬/3ª}âI g¿,-żS(!d@à¸#4%Q@Q@›·ºÝΕä\¤Öð‰‹¼xGRHù{žAíQéþ ·¿¾û¶»µ™¢3Ä·1lócÊ2HÁ# àóÒ€5¨¬ÍG\‡OºKUµ»»¹1ù¦+XÃ2&q¸ä�ŒôNÅM{©Ã`,üÔ�ý®u�6¯F`HÎHÀâ€.ÑX,³†Ææò+[»˜!ºKDhU1<ŒÁ0›˜d8$àg8Î*ũËqÙî-n­ö™mîPÙÚ~RA¡= iQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWÏÿc ã{cŸùp�ÿC’¾€¯Ÿþ717¶�ôÿô9)ÇqKc˜øOÇŠ®ëÉÿô4¯eÍxßÂ�ùîGý9?þ†•ìu¤·2ŽÂÑIE"…ªPß·ÛÞÊê1¤–��ÊÌžÇûøüzUÚ§ ‘ûkÞ\¸–PJÂÂÄžÃÔ÷?‡JC.×?ªß^½ô�YÎñÚ8US`/+ä�Y‘ðpxæ·ë“¸Òï$–ò;‹}Bx¦¹iv¶�â_›!@úq@"î•{z·Éäï(‘¤…•ö’¦•!”“Èϯ¨Ü=¦™wsRðÂò(n„…$f¹Ëm2î)lã·¶Ô Ž…—lËh‘ÑŽ"ù²T°ãךèõv»Ó.í£*h^5-Ф Ð3 _êvòˤÇm(µ�ZbÀŸ2R1¦äç’cElj¦’ÒîûOX^ÎáÝI-#²äp{+ ûŸj³c¡É¦]XËg䯋n »ŒdÀÈeã–=zƒP¶�r+¸Ó<1-Õ“JÐÙ#W)“ÏPG?QëWç³Õu²¸ì¢6÷qÏû©Y÷( žª9äV~£á[‹ÍâæŠ;Ãs<±>NÝ’1%[�B;u€: ZîK öò ¦H y0à�¤ŒûVV‹®Ï}¨-¬—jÖþsIg�"9ke›““ß±â®jZ4wvš‡�Ò ››wˆ'�Æ .>îH€¬©´=^åÿÐ-g†ÙàŒÂÌÛ‹€¤±Ú8�0yÅ,iÞ'3[ê7‘¤qA¹ƒfs$`§žÿ)üÅZŠïZ[I.X¼†”F…‹Æq� èÞøÅR“Â6é,IhY-ÞÚK[•’grceùvç @ã�Í[ŽÓ[{W´¹šÅ¢´bD ¾C·‘Ñ}N3H úgˆ§Õ•^Ô[”‚Õe»~HóY2xÇ9'>�jÂëW'FÑo6Eæ_IÊ0pŒœsüóPØøuôïìÖ¶!Kamz€�²®3¸q÷ƒdóŒ†4–š&¢‰§Y\ÍlÖ:|Šñºnó$Ú@Àð1‘œœv Ä:Š.$6/n·íh-ÕYf#ÌØ;ˆ'¾0:Ò]^EƒX¾r ½£´qGŽIAó~%Ž1ì=hÒ4(,$¸¸šÚÕ®¤º–U™P ÌHˆÏCTVÖ¶I¥˜d1>£ö§“iØb?¼ëÓï�¸  5_ E‘$¹IuhmÕœÉ]øþ-£ žp2+V}kOµ½[I®Ug%AI O@Ä .{dŠÅÕ4Nxµ{k)-<�Dï-1`èÛBã€r>QôÏCNºðÄ’ê·3ö·R,’,—3FT€Pío»‘œRiu{‚–|¤Óý�>FÉ“$Æ29¯¥Ee~e¹¼’iÑ-þÓökubæQ†Ç©-¸cýšÎ“H¸²Ö.µ5Ķq .¡¶@K™Ùž1Ü�v5©¦éÉo¥YÛÜ"I,@;3(?½êÌ=IüèÙ¼µUv70€Ž#r\|¬q…>‡‘ǽMP;fWSm âGÌÃcêxûTôµ™¨êÏg:Ãoj÷R*y³*6 qúû“ξ¥iW9>™¬Ç¨ÝÏa?—îÿ¥ '€:5»Ó¦ã@ 3ÇqsBáâ‘C#/BCRVn‰c6Ÿ§'?¼23œH œðB z£@Úü¿ýr?ÌWBÿêÛèk�ðÿü¿ýr?ÌWDÿêÛèi uyŒ,™qž�ø¯P¯$ñÌž_‹§É#äŒ�ûäW¯’Æø†¼Ÿæ�'9vïUú—õ ;ízþ£5Ä‹kf“•k‡�Ý€©¨b´šÂËXŠx†~ÎŒ¬§*êd\=ÅaêúüúÍ×�pû}È£UõÀÏSÜÒÃâ ˆ´yôÂâH%Æ Œ´|‚vœô8Wº°õ¹"Ÿ–ž–ëýŸˆëQç“^zúß§õþ]¿Ã·Ý¡ìÉü�XñíÜÖ1hWáLÉ©�»£y& †v ,qœàË­QøfÛ­µÛz#]ÙUb (%NFGC_5š+bæ½?$}YþëŸæÏ(ñövÞ¹�N¼½Rš_Øå:-Ïï@ÉÎòP’Ç$äs]‡‹t»o øšúd[«‹ ¼Ù�,ÀFp2zaÅtä0 Ò×Þbjz-�Í¥Åßöq¸»–ÔÀÂ<§™ÆÒÙèONÕçZ]£iÖöS]á‰u+ÈZökŸ5ÕJ6“åS�ÀrA9ldšö `Š5M‹…$œÆIÉ?�s–6vÚ–�o>•¬jhÒ ’ûATÈÌèÛ·�Ùä÷¬ßè·2ióL¾!ÕQ»Ìkäm|Nà“û¬üØÉÁN1]œöÐ][½½Ä1Í�¯ˆXzx"‹{h,íÒÞÚà…8�*¨ö�@¶¼_Q¾°’ïK¾›H†Y⸷–/ Ú#�¢ä²pø>àãÓÃKž-7NÚUëéÞ_µÅ—”ÌùiI…™K¨ºg–žµé4PŸ®�~¶Z_öµ•åÎŽ“]³¥‘›6þbŽ\*îçŒôàÖtù'¿·šÇJ½M6x—RƒË!®b "® r€ÀAÛÉ8�E Æ:})h¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Åñ6³s£iže�…ÕåÔ¬#�`�åOñ¸@NÑ׎OA[TP ¦Ä4©ô½JÞÏS¹¶ŠÖâÖrÖn“™¤‘$2È Á¹ÆGj­w-Ý—‡4ß \éúˆK‹|êÛYË:ÇZ%(§,rW=Éô¯C¢€<ûÄz³tëªXÍ‘Í5�‚Þ[ ¶ñ¬¨Øû㙲 à`‘��-BÊë[³ñ°¨’p‹in ád1|í�L»2ÿÀEuôÈ¡Š) If*ŠËIã¹$“îh„Õ´ëß\_êvö—�F©d‰‰åK'“;K&Ð{á°r=9©cK™m®4Ü_ Fö(-“P.ÒùAwÏ�ä¸RÀÝÜú]Í1¢�äI42&v1+ž¸=¨�ñªnµÈt©ôíSû6ÚHî'š>iVáÔ†DRªFÐ@,}€õ¥ÕRkïéó[iúš^Û]¨o<kä‚C8ä¦â¤àŒ>H¸®ÆŠæu´iþ “PK+«¸®4ÿ³*Û¦ò²+–ŽÁ·õ< ¼‘\õ÷†ç·Ð£Ñ­¿µVþãL†Êo³¢›YX&ÍÎä»yÎ ’09¯G¢€9‹ëm1EäWåÜfh~ÐÂë!T\.rÀ`)Ú3žÇ“XÙ·Ka’ËP‡HþÓ’x#·FûM¬b<&Õe÷œ�0H¯C¢€9 Ùí,4õ¼Ò®æº…nþÍ!PË-‘æò’A´óß=9¬©4ÇÍ×ü#šöV¿Ù²Áqo4ZÎä P¸v $ç§ d×¢Q@Ÿ„í$µÔõ z�ÓÞ(DrêJÂm븾b€m#=Ù°Nks]�æðö§HÏ#ÚJªŠ2X”8w5¡Ey¥ç†õ8ìö‹gk8&µšÎ(ÆX<“ÂÓeG#nÇ9ô�ú¹q§ß�I¥²º—NmtÍuhÛ§ƒìÈ ¨êê �œí=qŠïè .-ÖÿĺVÝ.æ-*->r±M"+ùÑ• ü…>�8¥¦é×ÑßiÇì7©­Gzï¨^°"9aùøÞxu9]ª>ï1^ƒEyž�©E¦ëzU•Бíóö¹¢k{‰pÝ18‘Êîăqõ¨µmíš>¾š^�wšö #µ–S%Ðf;’3Î@Æ[œuÆkÓ( 6Ó@Óô¿ˆ qŠ©–q%¬ðÛe"u2€ùÒƒœdqÚ™©è÷Wž<ío#i7q%ÍÄ�>Mñ¤‘ì'¦NøÏü»Z(Í´Ý7\“Ã’][Üý ÞÛC<@’{h#íõ݉Ž àu§Ï¥\OmèížÙ®ªŠó½JÂîÏÃø}í/¥·Óï­ZÞ[h¤f{_9[å(3½`qÏÊzØðµ«Á¬j3ZŨ&™4QúŽÿ9æƒ`Éóí ·ïqœã½u”PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_=üqÏü'6Øó�ÿC’¾„¯žþ8ŒøâÛþÁñÿèrS[‰œçÂ�ùîëÉÿô4¯c¯øR?⪸?ôäÿúW±V’ÜÊ;-%ŠŒÑY‘ÜOm¬›)$7NXÏñCêýŸCøR©E%rº¼K¨]\É$-40Ͳ•·óÌCäuB¬2r8=(«¢¹]°»·’(Z¦š[f-oäF7Æì�TdmeÎZè¯o"Óìg¼œŸ*.Øë�é@˹®f GP“ĉö›F�F�$«¸ ïLg  ÛñëU¯¼UtÚu𵆺�cpÉp$MŒØÈ;pH#÷ëEÀëè®QñÚRÆ×–p¨ÚP·`°àí\e±øT‹v±ë½ìäùv¬j3Ðmóþ9_ûæ€7)k•ŽúîËNk- ׋ln®ßÍÙå´…›Ž99ÝÇ:Ô1ø¶=;JÓ¡“dÓ‹§™¦¹“•í»ï1Á8ýy¢àvµ€|J¦‚–ŦY!H#ß�8JFÎ8ês×MEu©KËýL@Ó¬2Cc+É,7O»�ÿ gIE`ËH—VKÃs3âmÁOºùÇ<àÆ(—Ärý©a¶Óüÿ2êKh�œyDË7#€#ðü)ÐR×;iâig’×ÍÓ^&¸kS!™X¬£<`u\©ãéUSÆöÓÊË qa'’DêÎJ)?2T§>�3@eÈAs¤%­Ô—3Þ �6[¹c–L�1[åþè;ˆÀã¥jØëj_b¸³{6š×íºÊ”È à�ÃÖ€6è®ZÃT›KðÍÝÔ¦kÖ‚öHTI/ÎÃÎØ9>™ÿõRêzåÙ±¿³xMŽ¡Äñ¬rï2+¾Ü!ïéÁ"€:š+ŠŽêQ§\܉.ƒX_ÄÑEvÄÍ�ªÊÄõ3ã“Ûšíi¹¢’±îî/ïnäƒK™b¼É#(+$�D^ÃxŽFF;ÐÍVÂõ/ítR‡•xÛïF§ÜµšÖðÿüÉÿ\�óÑ?ú¶úç|=ÿò×#üÅtOþ­¾†�ÇVn£ iZ´«-õ”sH£hc�qé‘ZTUBrƒæƒ³ò&PŒÕ¤®ŒøBü;ÿ@Èÿï·ÿ?á ðïý#ÿ¾ßükzŠÛëx�ùøþöeõZȾäU°Ólô»"ÊÝ ‹;НsêOzµE„¤äï'vm¨«% QE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEó÷Æý¿ð›Ûnÿ@OýJú¾~øß ¿�­YÐûíé¡5s›øY�øJî9Źÿ�¥{yÂÅTñ=¯üù¾Iê~t¯^­g¹”6 ÒÒQRPµ ½¬VÏ3¢�ó>÷v9$öôíSR++ ©dŽz@:¹é<0­q<ŠšT¢YZM×Z›&Xç·Œ�ž8é]cë&°ÑdNÆIv4�rFTc¨fœðI犊ñxd-Ä2²iQyR,›­4ÿ*O”ç·œŒ:f·.m¢¼µ–ÚtߪQ×Ô¥¤ë–zÀ”[¸DØẍǠ9ù�õÏ\ŽÕzyá¶…¦žTŠ%åžF £êM2WÃ6¥¤iîïn –Íj|ÙAÄlAãsÇ_Ï4¿ðŒÚº\ înç3À°3I ÈU$Œ` M[�[Òf,"Ô윪—m· p£’O=I§as’A}m,q�ÎÑʬz’›qák{¥�e¿¿?hEI¿x£ÌÛП—¨öÀö§_ißÎbhÅ­ß”nŸ‘¹Žw/…k›ˆˆ™£qÄ0ùÎ3ǯ4Èomn%’(.a–Hþú$�Šý@é@/tH/®šãϹ‚G�Ê—È}¾bs€ÜSÈÁ棂4·÷Wvï nd‰À2"ŒÙ×�æ´"¼¶œHa¸†O(âMŽÃ‹{jö¯t—<†-"0eëÈô  óhÖ³êÖÚ“™ öëµF8,1É›SQC¢‰4h¬îä>gš.%x�Y7ù‡Ž›¿OJ¼o _³åðn"NXí-øpZ“Ï‹Ïò<Äó¶ïòóómÎ3�LÐ)ô[[ƒ¨ù†B/ÑRQ‘òíxà÷ïÍ$­ºéÁ_ôÍ,2唆-Ç$î'ŒsZTÙ%Hbyd`¨ŠY˜ö© frèV©1‰&ÄW�x¼Ž\–$:|ÇüiÖš,VR“ ÍÏÙòÄZ³ƒÎs�Œã“ÆqZȲĒ!Ê:†RF84Öž(åŽ'‘I3± Álrp;Ò./ YÅðù×.’[µªo�&&ê©ÇÓ®z ²tx|øçŽyã–;CjŽ¥r�sÈûß(öö­ àfªÿiYyeº‰â‹£nÉŽœ‘ùÐ÷†¥‡@¼³³º»º{‰’M’º 43°!W©þUþËFŽo:{©§”£}¢I˜›WiƒÏNüæ¶(¢ÀbK ,D²É7Ú.c–îiØeNT :ªŒ8&·)( Ía^øVÊúò[™dÃÈrGÙm›õh‰?‰5¹Fh¶›§Å¦Y­´'( 9òÑ:û"¨ý*Ý74¹¤¿‡¿ãþOú䘮�ÿÕ·Ð×7áßùIÿ\�óÒ?ú¶úLhuQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@x‡Åëq/‹àc#'ú ŒŒüïí^ß^ñŠábñ�º²“þ‚‡*þ7õ¤öw9O…öòGâ9ä“‚mmÿ�%zÍyWÃ{µŸÅ¨àZ9Ýëó¥z­oRÜÇ,·Yµ…$ˆ—¯ÔÖU¥ËšÒW•�øUÿ#MÏýy?þ†•ì5ãß ±ÿ MÇýy¿þ†•ì5Õ=ÎHì-”µ%ºÎ¨ú\VÌ�Å#O8„y³yJ¿+6K`ÿwõ¬‹�Ý[ÛË1±³qH¬©zÅ· %†<¯öO^ OâæU¶Ó÷۵ʛ½¾J®L™ŠA�Ç5ÊÝiWÖVe´èv’[Í6Hów†mÃ=Jäþñ¤4vWÞ#·°½š)vùqD çæyO+Žç?ˆõ¤Ðu÷Õ¶E-£G0�e‘Õ‘£ùº†$gž9-ÿ `˺ÿèMX×ø hüg�ü(ñUÜÿדÿèi^Ç^;ð§þF«Ÿúóý +Ø«­îr ¢Š) Z))hh¤¥ Š( –’ŠZ)3Kš)i( ¢’–€ (¢�…Q@hÍPš3E€3Fh¢€ Ñš( Š(  Ÿ ÈJOú☮¡ÿÕ·Ð×/áŸù Iÿ\OóÔ?ú¶ú–RERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW ã­®qþ¡›Ww\ŒŸnº£þ˜/ójÆ¿ÀkGâÐ�$k ¬²¶Ãd"’¤8æ‹…‘sûÃþxãíþ4cØÏü}¿Æ¢õ‹ÚY]Äe– ÉLQ2ÆAÈ NTà�¸GLçµgÁãm*âú;DƒR<­-a(P?/ø\,�_ì{ùáÿ�·øÑý�aÿßãGö=‡üðÿÇÛüjõ\ ?ØöóÃÿoñ£ûÃþxãíþ5zŠ.ì{ùáÿ�·øÑý�aÿ›wiq§Þ^}–x&Žâs’\¶#�†qŒð>ðõ®£OÐítøÐ–y‘¥´LFòd9sò€98èJn™áÍ3G™e²€¡H|•³��Ì~¬pIêp=(�Õà_±øIEµ…äÂá†‹Ê;ßhv‚ # r¹=++B¾Oí­5QŒÝÇsÏ!¾>ã†Ã}­•ÉòxàdW©ŸÚ H-â’xVÞáî"(Ã(Í¿��xÎn)±ønÂI¢3¥Ú¹vºŸ6Bq�Äýà@��€0(–¾ðÂ\xŠâÍ´ÿˆ¥‰®<ÆÓ�›´¾1»ÌÆî~ö:ö­¿ÙiVº%Œ¶–V¶·³ÚFÓˆ‘UØ�†Î:á³VÿáÑßP7÷6ïws»r½Ô¯(Nr«Ó¬Xè–ºuõÅÔ .fÎ#fÊG–,ÛGl±$ÿJÒ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(;„’KwHeò¤#å“hm§×­fEuª]Ê–ÆØÚÑ9F‘ç®ïS÷~µ¯EV·ÿ‘ˆÿ×§þÏ[�oÿ#ÿ¯Oýž¶(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®GÄʧV]ßóÅ›W]\Ÿ‰@:¢ÿ×þmXâ>Z?ãâ�­|A#F¥ÐAµˆåyn•ïüƒíÿëšÿ*(®‰nsijET–QEQEQEQEQEQEQEQEQEQEQEQEQEQEUµÿ‘‘ÿë×ÿf³EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW®u™òzÇåE†#à5£ñÿÙ endstream endobj 39 0 obj <> stream ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ¤¶"ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ì| ðÞÁ,-õmaRòiãY#·p qäg'‡ö==«ÑM±�%•º¨è%~•5¼I´PÄ¡c�ªŽÀ RV“©)»É‘ q‚²E°ÙÿϬ÷ìQö?ùõƒþýбEEÙVE°ÙÿϬ÷ìQö?ùõƒþýбEadWû §üúÁÿ~Åa´ÿŸX?ïØ«QvE°ÚϬ÷ìQöOùõƒþýбEadWû §üúÁÿ~Åa´ÿŸX?ïØ«QvE°ÚϬ÷ìQöOùõƒþýбEadWû §üúÁÿ~Åa´ÿŸX?ïØ«QvE°ÚϬ÷ìQöOùõƒþýбEadWû §üúÁÿ~Åa´ÿŸX?ïØ«QvE ­*ÖxX$)ãåd\s\® ®æ¹ ;>L·Ü^¾õ¤%£¹ŽªÄpÚI7* /©éV²øæAŸ÷kDÀRuA¨#"]>XÆ@=ºÕlJè*…ý°Ûç Áþ!ýj£Rú1JÕØ‚“ÐS¨­ Æàz 0=-˜‚ŒAKEÐQ�è)h àz 0=-LAF ¥¢€�è)0=8ÒS0=‚–Š& £hô´SÜAF ¥£˜‚ŒAKE&Ñè)0=:Šn £ÐRÑLB`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z 0=-˜‚ŒAKE& £ÐRÑ@ �è(Àô´P`z ŠâÎÚî#Äʇ³¨55æ^+ðâèÓ%Å®ãi)Úòcn¸úc§ÐÑ^�uoÄA%@Êp}h®¨bVg<¨&î�B_º>•Æ\øƒRƒR¸ }l‘G;¨ŒÛ“ò† e·q]šýÑô¯:Õü/®]êWrC1<îèÂUHê}ë—R“U^§F-ÔQ^ÍÖÞ'–{¨"_³¸’EO•XpHÎMuç:G…õËMJÒI $�ØÊ§€A=µz5,d)BIRwUdŸ´G™Þ|K¸²Ö5%ߢKo–4�u/Þn‰ î»ç~QBäá�Ž5®|aäxoSÔmõ­'Q¹Ž51ÅfèÛqÚÉ�äA$ã¦1\滤x’æÿZ1ϨÈ&·�Š=¥$iUa.ôfÚr6["µµ[iMñ|vëåÈuK5‰¸^vZ�ÉR:û¡é\gQ‡Ž5}[P³ƒJ†Öä´Æï,è±¾Ñ I“~0*§’{›¿ˆ¯RÍ.ô­GK“Ff�Ñ™�»…Y®r0qÓ­pi™uIF¯¤i/n„—zˆK›}âP;#Fq‡åÃuÁÏC®ß¥ì:5�…›I“ <ËiûÑ_j¤¶sŽE^ÐvˇVÁÁÁEHêOqŠu2gÂî{ tQEuœáIKE%´b� EP0¢Š)ˆ %)¤ ÒRÒb�Q@QLAEPIKE%Q@‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ›!q˜•Z@ÕfÚ ì ÁÀü :£¸O2ÚXü¨åÜ„yr+ät<Ðý(?Ï×è§à{ÿñšÒŒ¹‰ ª«!r«n÷àd~¹¯ì/ú”ü9ÿûEtvéåÛE•[P.3•Lƒ�Àú¥$6IESQM’4š'ŠTW�ÁVV PGqY¿ð�è_ôÓ¿ð?Â�š”Sc�!‰"‰#@UF�ÐØS¨V~³q5¶�º <¹xa€J‡•P�Ž3ZŸ¬ÛÍs§m·�Ì’9á˜&@,Urû¿ gŠ×”È!sS.Ó°9À'¶HíYØ'oÚ…ÉþÖÎïµãŒÿsoüóí·ñÎy¤ïÐjÝMx„‚2´»Fòƒ O|œ }6#!‰ ª«&Ѽ)Ⱦêbý(¡úQLõ~èúRÒ/ÝJZâ:Š( ŒfŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®2 š CGB=k³®>êÖKI™N3Ãv"µ§mQœú3R)Re܇>Þ”úÂVe9RAõ¥—cÌ?�¡Òì §s]˜(%ˆw5—yuç‰÷ëP<¯!ùÜ·ÔÓ*£ jÉ”îQEhHQEQERb–ŠJ)M%”´”QE(¢ŠbŠZ((¥¢€Š( ’–ŠJ)h BbŒRÑ@ Š)h¦QKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE1úQJý(¦x¿t})iî�¥-p�aEPEPEPEPEPEPEPEÉè(¢«›¢OÉaêN)>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´Éÿ<ñú³EVûLŸóÇÿ£í2Ïü~€,ÑU¾Ó'üñÿÇèûLŸóÇÿ  4Uo´Éÿ<ñú>Ó'üñÿÇèÍ[í2Ïü~�´°ûÐ�=›4fŠE`êNA¦É"Ä»›ðú*§ÛéŸëGÛéŸþ=@誟mÿ¦øõmÿ¦øõ[¢ª}·þ™ÿãÔ}·þ™ÿãÔnŠ©ößúgÿ�Qößúgÿ�Pº*§ÛéŸþ=GÛéŸþ=@誟mÿ¦øõmÿ¦øõ[¢ª}·þ™ÿãÔ}·þ™ÿãÔnŠ©ößúgÿ�Qößúgÿ�Pº*§ÛéŸþ=GÛéŸþ=@誟mÿ¦øõmÿ¦øõ[¢ª}·þ™ÿãÔ}·þ™ÿãÔnŠ©ößúgÿ�TñL²Ž8#¨  (¢Š(¢Š(¢Š(¤$*–b$žÕÄÞüGµ†å£´±{ˆÔãÌivgè0x­èáª×mSW±•Zôé+ÍØíè®þgýB?ògÿ°£þgýB?ògÿ°®�ìÌWò~+üÌ>¿‡þoÁÿ‘ßÑ\|KBà>”ʽÊÜdþ[Evzv¡oªXÇwjû¢�qž ÷Þ±­„­A^¤l�ibiUvƒ¹jŠ(®cp¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’}Ñõ¢‰>èúÑM Ž_º>”´‹÷GÒ–�ÂŠä›ÆÑ?‰ntØ­o½‹lº�i÷3±¡wÜÝ{êèì/áÔ`3@—(�¶ââÚH?îȪqÏ\b€-QEQMw¡f @þê–?�ªrê+¨JHcb˜\ƒþzÐê(¢€ (®cÇ“jÐø^üérm–“Ï-Ú° D,G]ÌxÏ` ëŠéè¬ýûA,Œ:˜ <.c©�F1&Ý$u ãŒV…QE ÑųþΦ¨nÿãÙÿç@ôUk÷d²‘‘Ê0ÇÌ;r+!/&LâæSŸï˜¯3šSÂTT曺¾‡E,<ªÇ™3 ¢¨i·2Oæ‰$ß·${úU/Ï5·†n¥‚Y"‘^,bà’[åÎ95¹gEp¾*‡^²‚8=¶­`$û-О2¯0ÆqèÀŒv«VwÆÚåÕŒÍçxŽHFÉŠû²yàî^>ï�jíh®A|m3ÞÃ�6Ó¤ûA7wûÄHIÆ0‡8¾¸$YÜYÞÍI$_E7©!d@2²mËo˜qÏ~x ÞŠäuê1iš¸]0ZÞA§ë}÷ Á“œ“€@eÆvò5¥æk—þ‘âX-uym�’V_1‘ò¶J�¯LzÜ¢¸›=r-MÔfq«½í´I$ºv£0gloG9q�JñÐV²øŽæ;‹ËK½0[ÝÁÜ¢›•(ñ–+’ä¤Èü³@ÊÛøÑ'¶u[ ÷âñl’g’;'˜“åÛ’N;]WÆ#F6–×Öö–÷ó£Ècžùc‰UHëäœð1ëœb€:š*ž“©C¬i6º�¸aÌK"†ê)u¹¬¬ÚâGºØAx£?>ÞåGñ9Çz·EcÛøŠ×P¼··Òñz®¢I¥FÂ@„n?Þ'€½z“ŒVÅÆ–4tGuV�á8,qœ^?…>¼Ãâѯˆ­¯¬¡b�#ëRÛ4.rDÛa@P뻜ï˜ š]•K(fû žOÒ£k»eFv¸ˆ"8�˜¸Àb@ }ò@Ǹ¯>ð�ìòjð©Òlf’î[×�R7¦Y(æØB–�,õæ'+‘¶ž{¨<�©E#O ÌëmyÊ\^BÀ8®É 9ÚI Gš÷6uB»˜.ã�“ŒŸJO6?ùè¿�qÖvÂ}%í$Ñحꬉu¨,—œ ÈX; Áˆ8Ü:sÁóÔ,`… ³ØÂZ8®,íØÜï‰$Ý&éÑØä�6£uîxAQMETETPª€:€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€i÷z9¨ïƒñ©->äŸïšŽ÷þYþ?Ò€)’$�êMS´Ö4»ùš=JÎâTûÉ êì> ÏÖ£[ígKÒ®9²™fšd=%1ì ‡Ô|åˆï³Ò¬êÚM•ÖšêÈ�<(^ ÑB´  §¶?úÔ©ERÒ.¥¾Ñl/&@’Ïo®£³2‚GæjÅ÷v2˜€|Hüó@ çñÍM¯�­¸a³Óµ%q~fÛ{f}Ž p�æ„aÉ8�ÛïŽ}F*óy°ipÉ÷a_1³ b2_ Ž1žç •Y\eX0Î2y¤gTÆæ “�“ŒŸJæl"˜y~\…œ°�+>[æÆ\gç‘Ͻ]¿‡dû//®Õ×z·Ê6ºœã;}:} mÓ±¶Ü:�ßw¯Ò±ä7ðh’Ü™f’gBv¾Ñå¯'<È­P¯ ?oH”©U*|µT* È<Ÿëë@U²@Œ’‰T�õƒ7¿T”QEQEQEQEQEU‹?õÇýÚ¯V,ÿ×÷hõQ@V‹íã¹ðÔé4–I˲}ºO.T™£±‚•èzô4¹EyŸØ´ßì/¶nðŸöoöÇÚ>Çöåû>Ëåy{ü¼nÝûÌlëïÍv·ŽÛÃP$2Y�Eoéöûü3q/ØídÅÀd­´�š> ÛÀç}xf88ÈŽâ ¶ÒŸìí0§æŽÿsp<ã“íƒ^š®®×�·_æyþÅÙ?ó1+Óþ’|=>OK¦Çýò•æéÿä^¸ÿ¯¶ÿй3o÷gꎬ»øÿ#¯¢Š+åO  (®;âEŸÛ¼=_Ù×—ø¹ÝåZýáû©ÕÉë€vŒ3)ܸÜ;+èÿÅq¥ßÙ·¿ú2Ö¶è’ME’"b`77\SÁü¨Y¢iž• ¨:”à‘Û8?‘®+â ÒZÏ£9Öî,Ü]n[{xã’FùçU*ÌOðñÇÍëƒ\žŽ%71—¶ñ1¿žx¬à¾Û¼Ö€fo1~Ñ�»„Ür£j±½¾»Ô&¶y+‘ Xþf v ;Âc=·vÞ­Õ»ˆŠO N#!Á߯xõàøSä’8byeuHÐgc€ u$×�É&›c¯i…|Wo¦”¾xŒË 8ã¶x��êpN0Aà× •IT�ÛOU8ûþFyëV¨¢€ (¢€ a‰ ¢R¹p0 íô§Ñ@Q@UÔ¬"Õt«Í:r⨠0VR§ø5jŠ(¢Š(¢Š*¿øöÃùÔÔɓ̉“Ö€)]Aö›g‡vÝØçÇ9¬¿ìÿŸ¿ü‡ÿ×­o4/­ÜG�÷¿JãÄ`0ø‰sÕ�ÞÛ¿Ñ›SÄT¦­W°°6BLËæÇðãü}èÕ4Øum>K)ÚEŽB¤˜Èå`è=ÅXó£þ÷éG�÷¿JÞ�Q‚§MY#9ÎS—4·2çðÝ�Ä:¬O,áu)’i°Ã*ʨ£o ëžôÛ¯ Y^^^O$·/<øUÀFtÆÉƒ «‚è+[Î�ûߥtÞý+RL©<;ŇÙnµ ë�³Ç:K+¦ôd`ËŒ(@êh>³7"q-ÀÅÿö€@Ãh—aCÛ8 絫çGýïÒ�:?ï~”ÂhþÕm52Í ‘ æ�ê_³¼ÆÅ‰T!|ãÉÞF9ë]ü"ð*ïL“QÔ%³¸·ka’«yHF>S·$ã»n­Ÿ:?ï~”yÑÿ{ô  è6wWK7˜â[#bèHÚÑ““Û9üiaÑÒ=û2KËÉ£Û´LÒí”Ød Œ`\Õï:?ï~”yÑÿ{ô [Yð›>‰© yï/õ˜’’âeÜ8mª@P;œõ>¦®Éá+ˆ®ÍÝô÷yéRJ<ÈÄo½àm7={æ·<èÿ½úQçGýïÒ€1„lv\—¹¼’yîëí-(óU@�”��òŒcÁ#â¥“Ã‘È “ûKP[ÈC(¼YÌeb VÊí# q·ŒqŠÖó£þ÷éG�÷¿JXcò¡H÷»ìP»œå›Éõ§Ô~tÞý(ó£þ÷é@ ´Þg‘qyŽd-îcÕŽ:“ëRÔ~tÞý(ó£þ÷é@V³á”Öu{‰nYaLù‘àä�Ž£alÿXI8$ázb¶¼èÿ½úQçGýïÒ€0t¿ ˦ÞiS•›ì¶×1Ìäa¥–iF`; «wî+š‡·Ïm ^d'ʳXŠË{4‹#ùÑJ@ ‰tGËýîœW¡ùÑÿ{ô£Î�ûߥrSxsW¹ÐÚÂ4Ó4è„Ë$vÖÅš5¤¯Í±IÌ� ã #½2/ÞDÑZ¥þÛH`t†tvDvªF1€"’w|Äœ�šì<èÿ½úQçGýïÒ€�„jƒ0,2}qN¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQç)árÇÐ žÓîIþù¨ïåŸãý*kxÌqüßyŽM2î6tVQ�½¨RÓcÔ¡Ei$†hŸÌ†xˆàŒŒñÐ�Aà‚A¬Ë½SÕ,å³Ôu¼ÛH¥YmmDLãý¢ÌÙ ž�2+ ¢€ ²[”³‰nüŸ=FÂCŽ„Ó#ºdõ©_xFò—ÇŽiÔP)Ò¯ x’h hbòüÔË3 r1ÆjYtǸ´·�ã¶U‡°ËtèGïÖµh  x4cG0XA)vE^0[ €r?/jž]9ïXýºmÑ‚vETBORkFŠ m.Í�ͳÜ$¨ñ2F̸`H#æ#¯×,–ÎóY¸+ˆ–÷ùHãó«TPEPEPEPEPEPEPV,ÿ×÷j½[³��.F0(ÝQ@gëZtš®›öhgX%Y¡ž9=ê9VA•d€GZТ€9�øFµ-ßkþÕ´þÒþÑû™ö&òsöo³íòüÜýÞs¿¯·¯¢éÒiZoÙ¦�g•¦šy$Hüµ-$­!Â’pr'¥hQ@úïü‹ÚŸýzKÿ ñ÷kûo¶i×V¡¶™¢xóé�Gõ¯½°ºÓ®ZÞêŠE8þãÔWÐd³�,£}O4‹¼eОÞþÞ2KW°ŠYZ@âVÆ@Êœp7 0ûÇÛ %õ»ÆÊºUœdŒV›+î3!˜ª4W³ìã{þ¬ó9ݬéÿä^¸ÿ¯¶ÿмÉäpˆ¬ÌxFI¯[ðf—>• îT¤²Èe(z®@|Ö¼ìÞqX~VõlíËbÝkô±ÐÑEòç¾�â?YøŸOŽÊöI£�%óA‹nsµ—ø”ŽŒpq�pA[P5yàÛ[Ïì5Ôë «y¶@þîW%ãéÌHHèJ�|ô´Q@Ú¾—q}ªiSèKYŒÒK#' ÁU@S�Kdò1ކ±,•#ÞAìVm&'•Ñ0yUÀ'=?ˆ~uÄiZ]�Á¨ØN`ŽÎåfI•C¨n�z€}3Ú™§é,—¼Ô4¹æhà–v·ghœH<¢Ã¨‚zTó2¬Žöâ_"ÚYˆÝå¡lzàf±­¼J·>FÛ)˜Í¦® 3¹°qòÆO5Ìèº>¤·yº3¥ðŽe¹?cp. )tÅʰÉ`vè)%°¾:4j,n· µ¦ß%²%\eHÇŽ={QÌÂÈô5;�6ÈÎQK^iâ(#ºÕî ¼·i-ÒÚÛtí’ý� ³m¤ Œgv:÷f2î_ ·H€Ý$¶—Y<‹ö~6¨�8U]¼WÔóG0rž…Š‚Úî Å”ÛɼE#Dü‡S‚9÷®.×F–±ß%�ÂÞÿmI½ðù4�ž;!NsZ~Ó`ÒîµHMki¾Õ+,¾IUx‹e·C€zv¢ácBÓÄ_]ù0Z^´&F�n„9‰™r9Î2É÷­zã­Öâ-v¤ØjvF[‚o­æOôm‡;�NH N1´óÜVO‡m¼Ø´‰tû ´½ŠåÞæé”¬o. n'?(t#Â{ 籸I3¢¬Ø;1ÞAÏÍÀôïV%°/áé!Òt»ëKœÂo|Ø[tÊÎXo=sƒÈã4sŽ÷W=á+7´³¹ù¤É.èákG·XþQ�ªÌÇóõÍt4ИRb–ŠbŠZ((£SÅ%-”RÑŠJ‚Æî;û kȃ®"YP0Á€#>üÔW–W2‡‹T»´P¸) ÄA÷ùÑŽÊðµ�Äz‘;jwrGö8�ÙÝb2ƒŒ„ ÇûݹÍÔgCEb˜ŽÚŠ(®3¤FeE,Ä$“À‘È“D’Äêñ¸ ®§!�èAî+—ñ|öñǩíj¶1º‹Ø`HX,'!œn�ŽA!�Q´+7ÂzuÅ»Üfëš�Ö…¦…‚Î0°¸dx # ;T`ŽU¹Åvïuo”¼ñ(„fBÎÎ3ϧÔµázµÉ¹Ðu[�_U¶Óu#ó½²Í{™ZF‹fÖíT…P‚rpzס¶§þœÙxâÖeâmFcbR¿uJPÝÁ žO^(®Šh¦RÑH’b¤£‚úƒI$ñDʲJˆÏ�¡˜p2qøW‘øKPðõö¥§%ž¢4¨­g"HNµ+ý²mÄlüÆXîÉPX�1ÖŸâ˦µø�¨$oa 6—!’ìX³nx1¶1‘@¥$±Â›åuDȘàdœÖ‘e�ähÖD2(”0È8${àþUÁx²MKI-¤“=õ˜¸y绾xÓt‘ÄòF‡j¨ =Äã�£¯5‹á[­/Mñ4°/Ž£xÖÖÍnVåƒJZ<ìÎ=ŽïŸ’xÀ«Iq#2Í Ê¿3Ë(ú’p=iÂD`Ä:�§¡ô¯(ñN•­^jßYjwvH׶д—±ÛâB.ËØŠ •BI Ç-Œ`ƒšÐM/T³ðv·¥Î&¼¹llŽkh®`žI�˱Q²Xò_îpy�Góimë€2Nz ÖDWF ŒVS�G¨¯$Óü?&‹uªÄëfÎê)ž;=1ÒI#kS²ÜYK³ cƒ¶FH�¢E$� ¨RHíbWSÕHP  ôQEQEQEQEÔpêHÏR9ö8§TVÿêÏûïÿ¡‘™QK1@É$ð$r$Ñ$±:¼n+©È`z{Šåü_ý¼qêpëZ…­Œn¢ö Èg£c�HcÔmŠÍðž�qn÷Ùºæ§u¡i¡`³…Œ,.ÞÁ(Õ#•nq@»Ý[Æ%/dòôu[Ší¤ž4Fá‰Î® ÏS[Ë8êaD$ì\¢²üEyua¢Ï=’—¹Qò �åÜ}0„õè+Œ´ñ=ÚÅoo{«Ü%ŽÉOÛcÓdIÃåƒrÙ q�œf¹Û±Ð•ÎÖï@Ó/n^â{rÒH“l®«  ê ǃZ*ªŠ@ €+‹Õµ›¸otôÓõ ñ ¶ìq-©È(Ï’Ìá›?s§5GÃZ¯ˆ'ÖÚ7’êâÛΘJ'VÚ¸QŽL ƒŸáÈÿu{®eqÙØô:+‚¶Ö5ý^ï-î¡-g–h­¬�•�—™~v\ç¡¿v-vþöÆ7PfmA ‚æÕ6‚¡ ¶øÙ‰«)RAïG0r�…W²²·ÓíÖÖ?.ÎÕÜN2I<žz“\5Þ»¨�2k»}GX·g²’öÛíö›o÷A?ƽk­ñ íî�¡]_X¤ -¼m)çnÕž�OÔ\V5(¨í¤i­b•€ èãÜT¸ª”RÑ@ E- ¢Š)€QEb’–ŠJ)h ¢Š(¢Š)�ÚÑEÆt˜º¾•©jó›fÔV×IdT·B'—Õwçå_ Ï=EWÓ<=w ÝE“|«£n%¬n¹„Ó'Î@ÏfÈäã+¢¢€9‹� ÝKàýoGYaóïä¼xÜ“µDÒ;.xφk[\ÒÓWÑ®ìÌp´²A"DÒ®B;)PÞÝ{V�ÈÝx{Ä—––—Λ$0Ïo+¢XÙq}ûÐ>Xà߃ÁÀwf,àdá~Uû¹Á®žŠã-<¨XèVúDZôòÄa³¼ªHq‚± ùCcsn Ö¬·†uü'6ƒô8ž!a,‘œÇ:°WüÄmÆF3Æy溪(•¾Ð|G¨5ºÖ´é ‚ò —�4ö‰˜G"¾y­Žž•OV𾩨ßêmk¥ý®I¢h¶ªèÊ¹Ýædd—ÜÀžØ_Jí¨ cIðíæŸ¨éÞi¦iÏj®™&wò‹1@1žç;»WOEQEQEQETr‚d„€N'Ûå5% ßÚ~É/ØÌBçiòÌÀ”ÝÛ8çÍ?ƒ$¹�u;ÍbåµÔÿS{Ø�î$Y+°÷ ’}zc«¢€0dÒµ[µÑžþæÒK‹ãq+ÃF®žTˆ0¤œ7Î çjÕ®›,&Ôµ6t0Ý[[Š Ü fRIöýàÇÐÖ¥ÃÝ|9°Öµ §Ö,ô´„³”ŽÂÐDîÍ‘¾I~ó79Ç<œâ¬XxJïM°½±·‡ÃÊ“ �ÎþËÚfNr³"2†àõO» (Η᫮¡-ß‘ácæD‘ù'Do-v–;€ó¸c»ú(ô®þÑgKH–éâyÂáÚ(„û)$�øššŠ(¢Š(¢Š(¢Š(¢Š*8�A;Þ5%‹«éZ–¯9¶mEmt–@%Kt"y}W~~Uú óÔU}3Ã×z ÔPé7ʺ6âZÆá ˜Gý2|ä ölŽN1Òº*(˜¸ðÝÔ¾Öôu–>þKÇ�É;TM#²çŒðfµµ‹]FöÕmôûijólÓìÜê˜çËìÜçpkFŠçï<4"µ±mT²¼Ó�Çlî¥Ñ�ãtr å”àç9ýY¯hw7Z£a¥Ad’êŠëy,²2`ºl.0­¸€:×GET:u³ÜÚ\Ék‹DdŠL�T0¿<Ê­ÑEQEQEQEQEQEQEQEQEQEQEQEQE2O»øÑDŸwñ¢šÇ‚–�tÍßx¡ã¸hí"�‘N7¾N羚B� Öv‚8ªÖ…%y3¥¢¹øJ¯¿ç•¿ýòßãGü%WßóÊßþùoñ®ŸìÚý—Þaõê#æÒ5I0<²¸î²/øÕÍ+O¿·»„Ï#\äî±ôªð•_Ï+ûå¿Æ�øJ¯¿ç•¿ýòßã]’¥Œ”\ZZœ±ž-I6në¶“^éo@û•�•+FåAÉ A‘�2@Éæ¸›_ j¶ZUêͲcG–8“Íi’E\Æâ8)ü8pëŠÚ)¿$ ¹'  ßãNoêK)‰­¡ÚP£dLg­p¼®»í÷�kH­¯húŽ£¬[ÍmdÍ ½°Yƒ:8�ÀmIPÏ�Ã?ãU¼7 Í¦jÞ|šUüOç»+ˆ,¶ªŒ_˜wáp=«OþMOl‡ì±b3‡>[|½¹çŠIÇÒ€%¢¢Žæ Y–9ãvUW`® zìpqô§K4P¨idHÔ� »2z }ƒÞŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠdŸwñ¢‰>ïãE4#�y¥zXè+Înm䵸xeR+è²–¯5éúž&b�¢ýH¨¢ŠöO0Þò4ˆ#A%³;c30Ï¿\T7ðéÿb2[BcpAy9íŽk-æy1¼+c¦E!•Ì~_}sFƒM;¿¼ÕÍ5oÐÓðØÛQ3A$ê –Š;q1aô=>½«¶»·rÒD×W·RK ¸»[%C#�ù`AŒú`uÍyå…ߨ®–m�Æ ŸPÁ#°8Î é[²x¬\]ÛI-¶ÄŽõnX©Š)%W¶HÜÜû×>*…IÔR†Öò:pթŸ,¿SoÃQBm�U'ºß|Qçò–ùG2aø3uÏ­RÕÞ)4ÁJ!·K8 Š+rÒ…Û¹öãéó Ïѵû]>8ÖUs²í® G$a@·Ý<Ešå�îŸ2Ézv[$Kn‡ ù “Ó¸¬• Š·3NƾÚ—*gI¥4óéþbßÝÜ,ù‘2o‰¦Uá\*³0ù¹À9õ®cÅÑËý¹–{© °ù»n$fòÉv]ʤy¼U§¼–è-%ŽHÚØV(È*ˆ3ž>jÀÕuÔ¦IÜFêK÷ÆâFG¨ø«ÂЩ¼òVû¿¯ë±а•>TîgÑEéžxQEQEQEQEQEQEQEQEWKá/ù|ÿ€ìÕÍWUá[y#·žfRB¡sßÿâÌXy_Ëó:°IºËúèz¥Q_ }(QE�¯œx{Q?ôîÿÈ×”iÖæõnÎý¾D 0à‘Ž?Zõ_œxkS?ôí'þ‚k˼)Û'Ô`¨Ïc Üç £+É5ïeo—9vgƒ™Ç›ù¼É=éVþÎߨÍ|\dOäìÀé·9ÍMý³¥iÙ°·¶[»Fùnfq‡˜ú¯÷@íRêVÖÖ¾Z\ùöÒß�¿ˆ~ìü¬;ŠõÝâšµÞžäyq¤¬Ýïe¯—ù�gÃÆÝ¢ÜŸúx?ú ×[&ï)ö• ƒ‚Ã#>þÕÆü5mÚÑÿ§“ÿ ­vnªèÈÊX`‚2¯™Ì±Sõ>›/ÿv‡¡áöï¥ZGq�RëìW³^<úlÆxcŠ=åTÊ€(2á î;Gki„0øZÌ×-¡—V{AOúL̦ÝåÚŠ Ã)�¾ŒN9«úŸÃ‹Ýnie¸“Iµó’dòű¸[uhà�<¬ìà ;»nÀ­hYxîÖÙb�Q¶²tÕŽ �§Z,J«ö'jÆÛÕNrNsß¹ãŒì9±{ª6—¨ë·:Õý­üz}ÇöyX¢â8YÏïGò¾â2 /{â]zæÞok°É«j·Ø[BðØ„]’4² �œÀÔáœgq�0:ëß \É¢ÛhÖ×VòZî“í3]þb‰b…vª’ÇNõ·á{ífçXrÖ1¥ÔV�B²*•Šf•Œ‹�×qA9ÇQž9ß Ek.¥yo †«4×62@°jwÙ†_!ü©Uˆ–Oâ| ®nsYšÝƳ¨éº=ž“©Ü4žd{K‡†XàùöF¦Cæf`N[#ät®ŸCð æƒ©Kwi{¥ÆímsIo¦ù%^YÆFó¹Wi 8ÀÀæ­'‚ï¬m’×MÕ-<•¸K’×–;åi‚ 4n€ôGN3@¼?we¥x;£wq-�œÎÓªù‘ÎèÈ@WpjÊ“Äw°ø–Î÷T¶“O°M&îí¢[�3r©ˆå”7Oõà×@š$·6˯t·¤ÑÍ´f&Y8;�³dõç=ÍWƒÁÖ1ܤ×wס-e³]J<—Û•ÆÑŸºzœòO‰<_ö_›XÓßO�ìä½…„¢]ÑÆpÀµÀ`qÈ÷©__ÔàѧÕ.t?.•fØ.C¿”yr@_¼«ÎÐNzR[xOO…›í\ß/ÙÚÒ5»�8ŽÆä\ÁÀÉ9'i…`6&ÆmKR¸´%†i•†Å9òÏË’§¡É$Ž3Š»¢ê¿ÛVnH<»iý™‹dËé&1òƒÉž0{àhÕ3KƒI†h-žO!åiR& ¬[¹*œp¹ÉÁÎ2qÆ^ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( «_Zµå«@.§¶‚d�‚¶É ã=29ô"¬Öv¹¤.»¤O§IywiÃkÉjá_oq’½r—··&ÓMŽþé´ËÝ^X-î¼ÖóžÞ8È}îdF³’£¯z»yÚ ìº¦³ ¾—qs –)¼¶‘U¾BÌ>f`0¸ÏÌzƒZqxR$Óã´“TÔ&òdµ™¼¥{b ¨Ù±cŒF*ßZ]ÚØÛÇ©j6©i3\%ã>l¬ÛŒ’oF Û‰#П¦9Ox¢þ×ÁvÚ]ΫŸ®¶—ö»¹LË …ùQAÞî1òôºdWS©ê)vÚkÚJ·Ão&¤ÏI&duË>á�îV•΃ ÷‡çÒ/n®.Dð¼2\ɳÎ!³ÎB…ÈÏv§Ùim¥u0�–eŽUyÄ(§‚1€K;ôí�ÀŒŸYÔ<9§[Þý¶{Ù/4;‹éVw,¢xÖ6 £øTù„mp+_FÔ¡ÓVüßK¬$ÐZ ©F£"°‘s"$.H9_—|¢´¬¼%¦Ù¬‘±žælm#Šá÷¬0±¯å8rxñUåðšÙc»¸žIZ¥’îMÅmÑ÷׿ 瓞IÀ  ­NÂëLðp½mFö Pú x%Ú­{#3cùòïŒ6FAÍOâç½°KkäŸRŠMÑù—Ê¥¨ »Ìˆ9`A=CcÕzÖ¦¯áeÕõ{mH땬¶ÈV·1Bz°|ÄqŸN=inü+o~¦;­GRš Ä 8òî6€2Ãg!vƒÏÐk¯-Öµ¤i+qqoÈšYžÞBŽÂ5\.áÈÉpxþïÖ¹˜µJöÞÌÞÏ«›XÖêÝgÓÑ‹I<Õn[y œ““¸`òy  ¨oµïxZÚ&î÷HIc»Iü³çºò®8`ÙïíY²Þ\iÚN©§DoàÕ"–Ô´o¨ÉvÓG#ãl.ü«0W^ƒg§5×M¡Á((—7–ðˆŠÞsF·+(Aè@Áª£ÂvF „·7“]M,rµëÊ<àÑýÌdñŒrrMQðÆ¡{%´ñÅÍÄi¨˜ W²ââÒ€æMÙ,wr9$«©ÍgÙ¥î‰âŸ[{À/o.E´ÿÚ’I ƒæ:+@pªcŒgv®’ÓðZé{|ӵȹžv”¸`›|6ã(p*4ð­™¹Innoo#ˆ8† ©·¤[”©#Œ“´‘–'œP=àÍFúmZÚÉïÄ“iæiÅã—2nP$ƒ=Ê€023]íbé¾¶Óná¹ûUåËÛÄ`¶2Fq•\œí^['޵µ@Æ¿s¢xÛ\šêyeÓZH`,HYÒ T® ôêTT^Õ/m­tx5k«›‹§Õo –o<…1)9^w(Ù€¹àöÅu³xwN¹º¸¸¹ˆÎf¸†çkžH€WôïŸÊ¡‡ÂÖ0Ü[L$��½íÅê†e ¼ÁÃÇÝýã`uéÉ  âë•ðå׈H#MKSunÆào•8#+�— är}ñS¿ˆµµÇaŠPx�ËB×AV8w›iùÉÎd|§šÁ–m¤Ýi_nÔŸ< n–þj•�dÊçŽÛ³ŽÕ{RРÔnâ¼[›«;¸ã1yö®š2A*r# ™ˆ  ¤ñ¢\˦-­—î˜AÉb¦5È!¤®GÔÔ—.0Ku:éÎú]�ȵ¸»ó@e|ª’©ŽUK`œƒÁÀ8©çð…„Ö0ië=Ü:tQ¬FÒ9—"©ÈÝ�NsÔ‚ îiÓøNÂâòYZ[¥·žu¹šÍdeRb1žª¤€@8äã®5�Û\뚌0©•5ˆ,#ߨ9DŒ´? Œ¡Q�ܾ71¿º3Õë×Wv‰ ßÊæ×eôIwr–Œ‰U£ÚNàÔ‚GlàU‰ü/c=ž£lÒ\}v·Œêà4r®Í¥8Á�O9ïÛŠŸUРÖ|=.�{qpñHŠ­8eåH!³ŒÈ¥pÚn³¨Ý„±›P¸óµMNÚöØî*Éi!i|°{.Ø}Þºx|]æËçOuÒ®.þÇ á”n2o( Lp…†ÎyW�†tó­iÚ¨,ú| (Ù´Œ Œu�9þ#QEá=>ÈåYnM¼Wê+3 òRbI.3œ±8'œ�@ ñ•Äöl;–鬭Wí ºy„ŒžŸ*ü¤’yàðx̾¼¿º×Æ€9_ jwÑë:U�ÃêÍ=Õ¤­¨%ülª³¦ÂL{°1–aòepEVÖ|A}е]!%»†ÖiícšùI)e /?+;3¸ô®ÇOÐa°¼7�uwyp#1G%Ô�ÌhH%Wu dœ“�“Å,¾±¸m[ÏW•5DT¸�ˆÛ€›xãŽ?Zãµ×½_ê6ÖÐë÷bÛM·kt°¾(±¹2�ÎA¼�«Ù‰ÛÏ¿k¡]›íOº7)rÒÛ£4È¥D�´d€yçŽÕ˜|"¢ð]E®jÑJm¢µ•‘âÌËí¥‰�;¾c’¤VÝ…�¾™a�¤~]¼#�3œîzЊ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€'Ýüh¢O»øÑM œxè*9m ŸtÉŽ›Ð~u(è(®¤ÚwG3IîVþͱÿŸ+ûô¿áGöm�üù[ÿߥÿ ³EW´ŸvO³�c&9td؂ıí±¬¥®—#mH,Ù½ÖëOm$_t 8¶*æ�©Û»pø'$Ž:§šô*aªF.\ÏO3ŠˆÉ¨¸ïäYÔÿ²´�>KË‹(Y$p©wbpGrIÀœ5ï ˜b”@JJ¬ÈF›)Ü«�Ä|�áÏJ¿âX^mãËPZ1ægÎxöíçp(A$c dgÔWšYßCaOm¨6ʼnàC4°Îæ96Ë?´åH+ÑGÔq^k­Q=ÎõJ lz$ú‡‡íÍ©x Ùsž²?”n2 –‘ü�%¦£áÛÛ׳Ž;Qt’K…£]ß»bàgƒŒã5ÄxÎÎÓO¸[i¤Ì°hñ¤n æ2–\‘!É&¶<: š¬öv³I pÓ¬V‡<3€bØ ö'§Ö—¶©{\~ʽ�™õïÁ=¼FçJ9Šï�âeLrÇ<1Ÿ\U¦¼ð÷ØÍäBÆâÝdXÞ[tI |Ås�È®jÞÚ÷I‰tëû-FWœ ;Cg,(Ѝ Ipw¤–`=0:U•³¼²ƒJ’õ<»«�X<‡€Î*— ÅCaGÝã§|Óöµ;±{(v4çÖ¼7j²4ö¯G�îÚ\»F;çËÆ+Jýt�2Æ[Ë»{Xà‰rÌb�ã“í^i¡5·*µ÷œdÑ&y”j�rKþï—Fâ6å¸ê}+·»¶Ç‹ôÁ<ívd2ʰË÷mÕTa•Fw76OVÿ÷é­QGµŸv‘ìUþͱÿŸ+ûô¿áGöu�üù[ÿߥÿ µEÖ}Øù#Ø«ý�bE�¿ýú_ð« v¥£œÜ·cQKdvTQQ´»XŒ~µÄuQQyßìþ´yßìþ´W\¶–óA¿¶�wK-»ªRTàW…ý“R�™ �ʰá�…³ôé^ýç³úÑç³ú×¥�Ì^.<·Lóñ¹zÅIKšÖ<ì÷ÿóã7ýù?áAƒP+·ìSãÓÊ?á^ÿç³úÑç³ú×öûÿŸkïÿ€pÿa¯ùùøÁ9_‡6V^”ÝÂð´Ó—Eqƒ·hÇàk¯¨¼ïöZ<ïöZñ1�j²¨Õ®{4)*4Õ5Ð–Š‹Îÿgõ£Îÿgõ¬MIh¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZ–Š‹Îÿgõ£Îÿgõ  h¨¼ïöZ<ïöZtŸwñ¢¢’o—î÷õ¢š9QÐQJ: +¤çb–Šg�N'?f÷Ó�I—gm0–B¸èw�ÌÔpj3ÌTÿg̱°ÈbéŸË9«+r ˆ�ŠXà‚:g±>•¼�d¬ÛûÌcìž©/¸uÄ um-¼™Ù*luÁ5ŠþÓžÉmãR1UÁ¿”Œ cå-··Lb·è®{Ý™§‡­õY.K›˜¾Ñn-¤�8ä»�ÿZ£�ÃPEv%[ÛÏ$\5жܞX‘‰$çn½[tQ`»0äð¦Ÿ+ÆòO©»DÛ£fÔg%Èùø8$~58Ð-”[>íþÏr.PËpÒ’ÛJã.IÆð1ÍjÑE�]”5]*-[O–ÊYe†)FÙ ;AeÁüêX´ûXof½H@¹œ’BI$ƒžƒØUª)Ø _ÙvbÞæÜDËÌ�$¡d`Y�S�r:v¬ãá$\E5¼sZ4hÉþ‰3B_qRK2�Ì~QÔÖõYÙKKÓaÒlÎÝ¥hÕ��•÷1,ÅŽO~I«”¸¤Å1Q@´PEPŠLRÑ@ E-Æ%´b€Š1EvUŸë OPIþ°×Ò2Š(  º”Ïo¦]MäLÊ}+ÍÍýÓ’ÆâbOS¼×¡ëgñÿ¦ü«ÊÑÉ F98Í{¹M5(IµÔð3‰ITŠO¡ onGYåð3]†üHc e¨HJœæcÓÙ�§½qÆLõ“4ï4ˆú©QÆpkЭ……XrÉe MJ3S‹=†Šç|{=æŽâgßåI± êãõ®Š¾^µ'J£ƒè}mª­5Qu +�Oˆe¬7)áÝPÃ4)eëƒÈâ¶h¢³-µë;�~ÿF_1n¬£ŽI7•ÆASžÝòQPèþ%´×l­ï,`¹{yæ’!A…ÙŸ™¹áNÞ>£¥lÑEQEQXßð’Ù‹ÛÈ^)Ò I’ÚK¦Q噜 €ìþñyÛŽzñW/u8l.ì-æI ½˜Á(U‚3üÜ÷ zgš»E`Çâí6kk©âYÜ[j §2„šRꀎy\°9ô·¨¢Š¥i©Ãy¨jQ¤‚K9 †,�Æ9ôa@h¢Š(¢Š(¢¢¸˜[Û¼Æ9$Ø3²%ÜÇè;дV4>#†çE³Ôí¬o§[±û¨#ˆ;ýîv¯CÔŠ½¦jVúµ„w–ż·,¤8Ã+)*ÊGb#ð  tV^�®Ãª\·µ»û9 c»h±˜8;Nsô${f£»ñ%�“j 0˜5‹FŒ¡A2¼ƒ(¨3’N@ÇÐÅ�u┵Ô$²N¥4�Û¥ÄíÆD*Û±ŸŸ$ü�÷Aé[V·0ÞÚCunáàž5’7ĤdÈдQEQEQEQEQEQEQEQEQEQEQEQEQE2O»øÑDŸwñ¢š9±ÐQ@éKŠé9Ä¢–Šá罜€±äàäV†�w$·ð#ƒŸ›?‘®¢Šô'ŽRƒ�.þg 0|²RæØÉñ�hsˆìÚì±PÑ.âvî8R `s´uÆ+‘¶·º·Òõ c¥\Id÷јãkYcC, ÙeÜ>îzœžõè”WœÕÎäìyÜ×K¢Egu¤ÜKmöù¶ -]ÄQã)û¥nAÉ$…¦}’öoivWÚUÔ¬±N¡ä�åda!»C§h;8ë^�E.QóžûIðæ›öÁ ¹û4bQ(!·mÎyÍiRÑŠ¤H”Râ“À(£PEPEPEPEPE.( ¢–ŒS(£P0¢Š(ØÔ¬5=A'úÃ\gPÊ(¢€3µã�êþ�ßùóm@STùs‹ êµèþ"8ðÞ¤éÚOý×”hZÒé3Ï+“‰ h„np¹$ŸQÇJú ª–|ªî烚IG'ecNÓB¸º³RÊ3o�‡›qéíëC“„¤Wˆ£® ©È ùf°îµ;«Û¶ºžè´Äç ‘�Lzb´uI¨è‰g:¡¸Y„�p§@¯Ì1É篵zÎ�kÆúë÷Ÿõòò£:);i§ßþ_×ϵø|Û´k“ÿOÿAZë{WðÝ·hwGþžOþ‚µÙ×Ëf*Ø©¯3éòÿ÷XzKá««kŸ B/¦¼Šá¬­ ·òt»™’5ˆï�€1f냌ï]„ìíµØõyµ$KÖ�W2©{W�K"ùNIÿk>µÛ*ª(UPª8 @g œœw®#°åôÝ:ÏT¾ñM­õ¼sÂÚ’®:m=ˆìG"¹ÍgD3xìÒŸË{+‰®/™–]žH±‚FFåldàõQ^™M(†A!UޱȨÏà?*á|'-–¡om×^ÿU—O gµhØXª„ù‚1-ü@–ÚsзZ-Éñ¶—ñ6ªîl®›ÌÿGÞ˜hFžr3ÀÆ9ÏtW;T õÀªðéÖ6÷’ÞCgoÔßëfH”;ÿ¼Àdþ4•{£g¤M¦ÙÜ_^jÛÎ`½�SÈåT(‘Ž;å-ôÉŽ¥ èzUîŸuý�u\\ÄÊ>Ò|½»˜ç-�Nîþ§zMçÖzuþæþÀ²»ÓedÑܵҕ]¾Yçï°!‰q‘ÏSR5�›øjâÚÃBÔ`Ôd(y"uapË!sœío˜¿#©é]íƒá8&¶ÒæŠòPnåu O!9ó÷R1ŒtojÞ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+?[ÔÛGÒg½ŽÊêöD%½¬EÝØô�ê{V…çö1K³OÕþË5Ì‹Ýê!¬¥‰˜É ǘÑÔ 2p=jYõKHÑdHtëõºÕog•^;I&û$LÜ;„æÛ‚ÔóÐ×wEyÆ»áëÛ¿ tbE•¶•%­µ…ÕŒ¾~v•b ²�ì•§ ç×:N¥â 65²žÎk=âÊC:íVžEŒSüKû³ó9b9ïíbÔÑuH`šÚ;xÆ¢ÎÄ^Hû@Ç;Fá�¸^8ï]å2H£—g™>Æ »†vŸQèh�ñ5ȶ´µðžŸ¨ÿgÉŽæâÚÊYU o–»üÌ=�'®)ž&ß©ÛC–™« ȼ¹,A�…»Ÿ•‡š¹Úžp`ãœWmE`ë‹5¶±¤ê«o=Ä6Âh¦H»(u\6ÑÉåãûßZç£ÒæÓôë[†‡Y‡Q›í/¶Á²²ÌÒd$0_¼>n0só ïè >ÏIµÒôX4ëÍêþxt¸-®%ÊJ�°Pe€$ÍŽ¸Æ3Ò³$Ó&’ÓT:]Ü$óZâÔDRU ÄË$QžTýÌ`•$ àŸC¢€8Í×ÊSö» BâÜê‚[)®#"pL|É.ppå†q·Ž†¡6Eµ»[� C¸ÓïRY¥½’h¼´�2?ÊÌ$Ì…Oãñ]ÍÂxKO¸³Ö-L6ÚŠB¶-оŒªÁ&å!aí´�Ù •®1�]ÝP «hz¥Þ½©Ýiñ´rÉ,vÍ+|¹·’YIêT…nü®*-?J¼·ºÒ+9¢H5­EÁ16Øãeœ#8S•Áèr=kÐ( 6“O�x#S·F£ÿ ÓÝ.§1;åã;_£äò1œ8éZš¦‹keªÛ,ú]ÍÞŒ-›l0#JEÉ`KºŽKÑÏLFkµ¢€<æ]?R‚ÛFšòÊêÿT‚ÙÈš&–<î'‰Tþî@0Ï­M§^¾¡þƒxúÛ߬–7Ê—¾äãEP¡ƒ!åŽx9¯@¢€<ÒÿÂvòXkòÿa,’mÅ:�o—’1Ú1ó zuËõÑøŽO [\é—°– ›kD„«íF@˜È; bºŠ(Ïm4FÇÄ:¡ŠY-(no& ò‰âIÉè 4‘Ÿø¥´Ó¯—PµÿB¼]qu&’êý�òžÛ{oèT¡ ¨8ãŒ× Ñ@wo¡Ï…Öv°ºi¤Ô¤7Ñ€Âi-EÃ�ª3�¸ÚÛGQž¹çgÁökk¨ë¯Ÿ=•”ÓÄÖÑË�*!PpA�xíí]]QEQET·ich÷2G<ˆ˜ÊÁ Jç'*‚O^§¢€8/^»Ñüg6©& Ÿ¸6Ÿ0òØ’w°Û’€ñœô· ¼6ú-žŸmo©7šâ{Vˆ‰]ÝÃWs1ÇÏÑÑ@/„ôýCM¹Ò¬Äz”bÖÑ¡Ô>Ðî`fPªžP'oPH(:}îj=K÷×^(Ö5«o´ «&‚k›"™cÃ�BHÊgøs]õçZ”6ú—‰.|B–÷šmºÄ¶q\G–Ì¥‘öar7/Ó5Ùø~;ؼ=§Ç¨ª¥â[¢Êª€éÇ—•¥EQEQEQEQEQEQEQEQEQEQEQEQEQE2O»øÑDŸwñ¢š9ÁÐQ@è(®“œ(¢ŒP#Û•Û%ÅücæO à@wUÈoIãA$n¬Np¥p0NzšçæÑµY0<²6÷Yüjî“§j×�´ñ�g'p=�aõ¯R­*�©+ü�>œëó$Ó·ÌÛ»»·±µ’æêUŠÆ]ØðaØøªÚêÿVg™#Ó종Ä�FÀ¾üî ƒü#wïZö™.«¦yH‘Ì’Ç4eÁ*Y0 cŒVÞÕ¯¦Ô®®¥²ŠâàÚÉ ÄY�4,͇ȃ‘Èü¸çÉw=%bå�Š­®¯õfy’=>Ê(\Hñ´l ïÎàØ?Â1Ç~õ6�¯®±¬êVð�mm£…�˜Ù/¿vàØ?Â1À¬Ù¼7«_M©]]KeÅÁµ’ˆ» hY› �2GOËŽtô};RƒXÔµDÚ†»ŽT·f`»7ç$�Ÿ¼?ÏQ\�º(¢¬�¢Š(¢Š(¢Š(Å&)h ¢–Š1EPEPEPES¢Š(°¨$ÿXjz+Œê*ÑV¨  ñÝ[Ko2îŠT(ãÔƒ\Kü0±.Jj7!sÀ*§èSJ�A$Ò$jY� Ì·Ž-¶“Ø’w`êbàŸÕÛóþ™ÃŒXF×Ö-åý# þ…Ÿý®?ï�Gü+ ?ú \ß·?á8µÿŸ9ï¡[zN­m¬Z íØ‚8to¼‡Þºjc3kšri|ŽzX|º¬¹`“2–‡¢[h:x³µ.À±ww<³ÿ ­*µEySœªIÊN힤!EF*Éh«TT”U¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@¤û¿�jO»øÑM œ�è)hÒsbŒPErÉqghÈ™¤ï}¡Á>¤óŠÑ²½K‹¸Dm œƒ!lðx9ÿ„Pš+Ïí/onM¦›ýÓi—º¼°[Ýy­ç=¼p3�$ûÜÈŒg%G^õv&ó´ÙuMfþ}.âæ,Sym"«|…˜|ÌÀaqŸ˜õ€;:+˼Qâ‹û_Ûiw:¬z~ºÚ_Úîå3,R‚åD{¸ÇËÐé‘]N§¨¥Ûi¯i*ÜC ¼š“¥›£ó.#” KPw™rÀ‚z†Çªõ ΊÀ×^[­kHÒVââÞ ‘4³=¼…„j¸]Ñ’àñýß­s1j:•í½™½ŸW6±­ÕºÏ§£’x¦hÕ¤Ø?º¹ç ’sÚ€=Šãá¾×¼EàUkh<›»Ý!%Ží'òÏžëÈr¸áƒg¿µfËyq§i:¦�¿ƒTŠ[RѾ£%ÛM��°»ò¬Á]z žœÐ¡Q\Ÿ†5 Ù-§Ž(®n#MDÀb½—�ì2nÉc»‘É%]Nk>Í/tO,úÛÞ{yr-§þÔ’HT1ÑZ…P#c8#µw”WàÍFúmZÚÉïÄ“iæiÅã—2nP$ƒ=Ê€023]íWq¯Üèž6×&ºžYtÖ�R t„H«‚ý:•†µKÛk] Zêæâéõ[è%›Ï!AŒJNW�Ê6`.F8=±@…Er­âë•ðå׈H#MKSunÆào•8#+�— är}ñS¿ˆµµÇaŠPx�ËB×AV8w›iùÉÎd|§šèè®U ¾‡ÅZ®�’ÝÃk4ö±Í|¤”²�ЗŸ•�ˆŽ™ÜzP£Q^u®½êø¯Q¶¶‡_»Úm»[¥…ñE�É”npÒ äí^ÌNÞ}û] ìßh}ѹK––ݦE*$m£$ÈçK9ÙÖ7*IBùX0êqU.<9§]kjrÆÆimZÖTÏÉ"7\ŒuÇÏJÒ¸¸‚Òžæhá‰~ô’0U¹&ƒ<+:@eA3©eŒ°ÜÀc$àd~uɡө›o G �Ť·×·6ÓBaòç�0D#Ó¹ÍV¶ð†›k.•*=Ã6šËÜàù…²I~9 ’F1É­ú(² ³;QÒF¡,r­õí¤¨¥w[M· ö ‚׬Fð«G­X¥”·V–6ö2ÅçÁ*‡.Ò+`îÉ9ù‰8ëéÅt·W¶–1‰.îa·Œœš@€ŸLš•dEt`ÈÃ!”äE�]˜RxFÀ¤ ÷v«¹¶" qæFNHbA9''#šzø^Ö/ Û^_Z´VñÛ;A(S2 Âïã¨ç‘ƒÍnQE�]™VÚVwÍ=µåäP´�)µY•¹²IÁ$œŒö¦ë: ë2@Òj7¶ë¬ˆ–åÞ§!¾e'?¥kÕ{‹û;I#Žæî^SˆÖI—>€´ìƒRX�Ç!v�ª€]ñ–÷8ã4üQE1(ÅPŠLRÑ@ E-”RÑ@ F)h bŠ(Å¢Šë¨¢Šä:‚Š(  ÏœxkS?ôí'þ‚k˼)Û'Ô`¨Ïc Üç £+É5êºå´·š ý´ ºYmÝPz’§¼/ìš” ÈlnU‡ -Ÿ§Júž*¥ Âöw< Ù¸W„íuc£þÙÒ´ìØ[Û-Ý£|·38ÃÌ}Wû v©u+kk_‰-.|ûioƒFßÄ?v~VˆÅrßg¿ÿŸ¿ïÉÿ �]¿bŸžQÿ õþ­ÓRëw®ç•íäÓN=4ò=Cá«nÐî�ý<Ÿýk´®CáÍ…Õ—‡¥7p¼-4åÑ\`íÚqøëëäóž*vî}F5†‚}Ž;AðMþ…£[Ø[xžò�@e·´¶U-Üó'êI>õ³áýmu´j_Iwvn ²F¨ßêÑ0B€?ƒ°kbŠã; í;KþϽÕ.|ï3í÷"ãnÜlÄI3ž~æsÇZË»ðm…׉WXhÐ¿Ùæ�üÌ» ¦×]Ä…ÀVcïWKE`hz6«§Éj/µH'·´µû40Û[4!¾ïÌùv˘Æ77­q$ª©P6à’r9Ï9â·h  Cá˜fŠ(¯u ûè’e˜ÇrèÊåsµXàû�3œUý+M‹HÓ㱂Y^‰‰X‹œ„å�žp&®Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@gkšBëºDút——v‘Ì6¼–®ö÷ ð{Ö�ÏÅáH“OŽÒMSP›Èu’Öfò•튂£fÄQŒ0A8¨o|iwkco¥¨Ú¥¤Íp<—Œù²³n2I½3n$�B~˜é¨  ›�ïϤ^Ý\\‰áxd¹“gœCgœ… ‘ž8íO²ÒÚJþêa,˪óˆQOc–wéÛ†�…eá-6Íd�Œ÷0›ciW½a€õ�x)Àë“À犯/„ÐFËÝÄòJÐÅ,—rn+n�¸Æ¸ù<œòNt´P¯áeÕõ{mH땬¶ÈV·1Bz°|ÄqŸN=inü+o~¦;­GRš Ä 8òî6€2Ãg!vƒÏÖõŸªiê‚i§·žÝËÃ=»t$z‚ ‘‚ü…T—Ã6Íaocåý­´Q´l�O�5[–ÞH'$äî<žknŠË›C‚PQ.o-á$)¼æ4Œ#nVP:ƒÐ�‚1UG„ìŒ no&ºšXåk×”yÁ£û˜ ÉãääšÞ¢€1í<;¡Þ—·Í;\‹™çi@k† °Àn1ò€£O Ù›”–ææöò8ƒˆ`º›zE¹J’8É;Ibp ÅnQ@ºo†­´Û¸n~Õyröñ-…Ì�„œeWg;W–Éã­mQEeMáÝ:æêââæ#9šâ�®xI"!\cÓ¾*† XÃqm0’v6÷·ª”‚ów÷��×§&¶è q¼fÚMÖ•öí@ióÀÖéoæ©XöL®xí»8íWµ- Fî+Źº³»Ž3ŸjáY£$§ ‚2鑨ŠÕ¢€0'ð…„Ö0ië=Ü:tQ¬FÒ9—"©ÈÝ�NsÔ‚ îiÓøNÂâòYZ[¥·žu¹šÍdeRb1žª¤€@8äÝ¢€1'ð½Œöz�³IpõÚÞ3«€ÑÊ»6”8ã5<ç¿n*}WBƒYðôº5íÅÃÅ"*´á”K• †Î0 •©EcŸ éçZÓµP$YôøP³iê süF¢‹Âz|7‘ʲܛx® ÔVfAä¤Ä’\ g9bpN9·h  AákÑKÜ„Žå8G#HÒnR8,GNœÔúN‡‘5äÉssq5㬓Ipá‹2¨PxÇJÔ¢€ (¢€ (¢€ ¯{l÷vrAÜöŽØÄÐmÞ¸9ãr°öäµbŠä›ÀP>�ŠÚæ°m"”H£|9 rþï ¹çÖÕ¦‘%±¶2꺅Ó@ÎÙ™Ðy›†0áA¨ãƒZtP?KƒNžþhžF{럴˼ƒ†Ø©��Ó={Ô2ø~Æáµo=^TÕRâ6#nmãŽ8ýkRŠç„T^ ¨µÍZ)M´V²² É#އiæ´Ž‡¦“Ÿ³ûé¿Æ¤·Ò¬­fÃY¡ÜN?3^•LU A¥‘Á 5U$Û2ül‹'„¯×r³DõjW9öë½'^’Æ×ZN™vГÿ-âýÙŒýx*}Ô×4ÜÄbž$–3Œ¤ŠŽ¸¤6Ð5Êܘc3ª”YJ�ÁO$×Õå´z œ,׉K»»Y ˆ–‚ído³Ÿ™XEÌJ²î<ŒuÍ9ã·qÙ]ØYߢ¥å¤§!fŒ8ñ¬û¯ÙÞk^ÜE°CjÖëm$!—–V 3ÀÆÜcèi‚hæ¤ñ.¡q ÚL—Æ Ói%ìqGµÕXªÈL‡[ÂóÍ\¶Öïuk¨ÃjqiQ¥�½Ö !󌀖9oáÇç½ué¶7F#qeo1‹ˆÌ‘+lúdqM“KÓæX[ W[p!¡R#¦Þ8ü(³ £“ÓõÝrû[ܨßf¯o$ ` ‘©#?Ì߯z`öê÷‹¾Á$i뼚®£�Œê2‘ó—cÙW$�|]Ó¬Mè¼6væè ü¥ßÿ}c5Þ‹¥_Íç^i–W2ãnù WlzdŠ,ìW-@�-ãUráTÄçwiø¦ÅpD‘D‹h¡Q`(aOª$LQKE0ŠZ((¥¢€ŠZ()qEQE (¢Šëj6—k�Ö¤¨$ÿXk�éç³úÑç³úÔTP¾wû?­wû?­PÔ¦{}2êhÎ"fSèq^no7z�æ»p¸)biÚÇ33Qj÷=_Îÿgõ£Îÿgõ¯'7·#¬ò�ø®‡Ã~$1„²Ô$%Ns1éìÇÓÞµ­–T§h»˜ÐÍiÔš„•®vþwû?­wû?­EEy§ªKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EEKç³úÑç³úÔTP¾wû?­wû?­EE>I¾_»ßÖŠ‰þïãE4#ž�E(è(®ƒœJ)h  È59¦*N�2ÆÃ!‹¦œÕ¥» *Fb‘KœpGLö'Ò¸Éïn €‚:ƒ‘Z:%Ô’ê#ƒŸ›?‘¯R® 1ƒ’èyÔñSrQgGyyŸi%ÕÔž\1€Y°N9ÇAÏzž°¼g§OÂ×p%·Úe]²G\’AǾ3ù×'¨é3Üj `¶¹´±xPiû4Ù­ˆÎìëå6îrÑŽ{W”Ý�I+ž’H“ÐTwp_ÙÃwlþd xßeOCƒÍqÓi†OL�5çÚY’y.­ÙDKå•ÊK�¥Èyæµ¼i—†íí…„–w€·+$&2òoöºu'¨5¡ÑQKEQ"QKE%´PQKE%´PQKE%´S)qEQE aE.(Å%¸¤Åu•Ÿë OPIþ°×!Ò2Š(  ÙÆ…|éƒÿ*ò´rAÃŽN3^¥¯xP?ôîÿÈ×›hš§ËœXHU¯*ÒŒåæx´y«Â>Ec&zÉšwšD}T¨ã85jÓB¸º³RÊ3o�‡›qéíëC“„¤Wˆ£® ©È ùf½G87hë­�'ØÊ×’¶—;_ÞÏy£¸™÷ùRlBz…À8ýk¢®KáónÑ®Oý<ýk­í_/ŽŠŽ"iw>«',4ìq©ñ̵†å<;ªf…'�·ÛòŽÁTÿ¬ã$�޵¹¦kðßZßOso&�öŒ7 téòŠùܬWqÞ¼ïÃWV×>„_MyÃY[Aoäéw3$kÞ !bÍ×Þº? ÙÛk±êójH—­®eRö¯–Dòœ’1þÖ}k�ë64¿[ê:‹Ú¼[$‡6RÍÀº\rTv=öžJ�qƒPMâä¶ñ=Ö™sg,6ÖÖþt—NñQÎ_÷lhár #,Ótë=RûÅ6·ÖñÏ jHv¸èE´8 ö#±Šç5�Íã°WJ-ì®$f¸¾fYvy :Æ O•±“ƒÕEu¾ñÚ©šÛCex?} pÏ}ÇúöaØŽ�+;WñN½£E\hZ{Í3m‚ÞMÞY›ÑWÈçÜôñTü'-–¡om×^ÿU—O gµhØXª„ù‚1-ü@–ÚsзZ-Éñ¶—ñ6ªîl®›ÌÿGÞ˜hFžr3ÀÆ9ÈIq­Ëegn÷:]ã\É™,6ª%c²çã=¹=…hÙÝÁeå´‚H'�d�Çñ)ò®_Ä·Ú6™•nÚ½ü÷…•õhf6èz± »(Ç^O±k ŸÚA¢¸±XãD‡í–®J"ñ†Œ²08È xƒU—FÒ�ìQC)"•¤ÜÁ@Z;X¨/zöñ¥Ã,âïOŽ„TS8`ÅÆå–ÈR#nFjOÊm¼'_ÉŠóÃË,P…qžHYÉEädn'µÀøqÖþ VÈÂ!‚!upZG†òçN<€=W†ç©é@…©xÛNÒ´ƒsvgŠsl²�ô9ž-ì ªïUÛÉ u«ñ~›¯Ákög�å–<³ 9–-À|À;.Þ#¯jç5‘ª]èöKý�<ú]�ˆ—1Ë2Käü¬C8ù$ú–Ž9±áHõx#h—HžßL¾�\4“DL3þfXü�€}CÇ<nIâ»ht«mF[K“oup!‰¢Pà«HžVÈ#ØÖšj u™4猣ˆxÜž$\�ØÿtíÏû¸›Ë¢>èVqXÞË8{£¶µ’o,Ã,~`b à�­Áëƒ[ÒMö¿é·�Å.Ètˉ$VŒ¬€;űJœNÆàÿtÐõÝÊYÙÏu b�ÆÒ0^¤ž?*,îRöÊ ¨Ãž5‘Cu†F:áµÈ_Rº¼¹¾Ñµ˜îtäþÍŒBI‚B¯½X„|•äý3ÅCq¦Ïå(Ô´Ëû°t«xôñ±6ó„mý?Õ¾Jüç1ž(Ñh®¬®S…üGau©‘en�=¼m"$à4à}Æ'qÀÇ¢ÚÆá|d/ …ÈÑžêO*"‡÷w[@3”ÆB6Ó'wñdwQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^úñlmLí ó`…ÁvbNÔàõb³õ½M´}&{Øì®¯dAò[ÚÄ]Ý�A€8§µS_Ù5™—ȺûH¸û/ض;ÎÛ»f3·îüÙÎ1Îißð’Û½œWÖW÷FBàÅ 9hÊ6×’ ñŒäöÍs61K³OÕþË5Ì‹Ýê!¬¥‰˜É ǘÑÔ 2p=jYõKHÑdHtëõºÕog•^;I&û$LÜ;„æÛ‚ÔóÐÐþ¥âÍ+LðÊx‚I$–ÊHÕâ.^@F@ãœdœãô«×º’Z5’ìÜ×rùk“�£k;1öOã�Þ¸mwÃ×·~2èÄ‹+m*K[k «|üí*ÅAe!Ø*xéÔç K[�Rþk{‰Ég§}œ¼jU<é†[ I# ©Üýó@,|S§ßn8šÞ?³›¨¤¸@‹4#‘yû£#®#ŽjÖ—«®¨’ÊöÝ6‡G¸‹`‘OB9?‘Áö®2çIÔ¼A¦Ãf¶SÙÍg¢\YHg]ªÓȱ€ª‰v~aÇ"¬G=ý¬ZƒÚ.© [GoÔYØ‹É`(çhÜ3· Çèi¼]6?m–ÂôÛy^h£Þ‘€�·È]Ø\� ZÔ{+)§‰­£–#TB àƒ ñÛÚ€:º(¢€ (¢€ Šâaonóä“`ÎÈ—s ïRÔ·ich÷2G<ˆ˜ÊÁ Jç'*‚O^€3añ7:-ž§mc}:Ý�ÝA@Éßïsµz¤UÍ?SƒSÓVúÔHÈw …pá”�ÊAèAW¥ë×z?€lãƒFÕ$Ô÷&Óæ[NörPž3ž‚·¼94z]…•½¶¢âF“Ìž{Vˆùœ»»†®æ'c'û›½f=2]S³™âiƒN"*2JHÄdœ9ü KwâK&Ôa0k�B‚eyQPg$œ�Ž9¨´Xg}w_½¸�ã-r–ð3¡¡HÔ‚3Ôoy9õÍsÚ—‡o®¼Q¬kVßhVMÖ6D32LJ„‘”Ïðæ€7î¼R–º„–CIÔ¦’t¸�¢XÈ…[v3ó䟑¾è=+jÖæÛHn­Ü<ƲFãø”ŒƒùóýJ}KÄ—wWÖ>!K{Í6Ýb[8®#ËfRÈû0¹—‡éšìü?ì^ÓãÔURñ-ÑeUÀtã�Ë�JÒ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯÷(»øÑMçÇAK@è(®ƒœ)1KE%‡ ýÒm’âþÜ |Éäèê»óKqaâubs…+�‚sÔÖòÃN:˜G h_¢³Q…1ãŸc\÷GEޢУ£ê‘k:\7°¤ˆ$PJº2í8�¸ ŽzŽ _Å;ŠÂQE¦E¥Å%¸¢€ŠZ((¥¢€¸¢Š1EPEPEPE¸ ¢—b€:ª‚Oõ†§¨$ÿXk”éEPgˆŽ<7©úv“ÿA5å´ºLóÊð¤âH!œ.I'ÔqÒ½–âÞ;«imæ]ÑJ…z‚0k‰†%ÉMFä.xT⽜³‡¥Jtë½ÿ®‡‘˜ákÔ©”z=Ö§u{v×Sݘœä1é�LVŽ¡âI5,çT7 0‘®àÈ•ù†9<õö®›þ…Ÿý®?ï�Gü+ ?ú \ß½G˜eîÚí¶ŒóV_ŽWÓ}õEŸ†í»Cº?ôòô®Î³t=ÛAÓÅ�©v‹»¹å˜÷ýiWÍã*Æ­yN6}”©PŒ%ºUQBª…QÀ` 8däã½-Ìt4¢…WxÇ £?€ü©ÔPUÎÕ=p*¼:u�½ä·�ÙÛÇu7úÙ’%ÿï0?�Y¢€ (¢€ñG.ß1ö°eÜ3‚:ïUîôÍ>ÿwÛ,m®7� ¾@9‘Ø’GÖ­Ñ@ hÑ¢1²)Œ�¥Hà�LzPˆ±¢¢(TQ…Uz u0En¬°Æ±†vv 1–'$ýI9¡`‰'’e�D²Àå€Îúdþu%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES#†(žGŽ$F•·ÈU@.Ø'ÔàôŸEÉ"Ž]ždhû2îÚ}G¡§Ñ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ »øÑCý߯ŠhLÀ- ¢ºp¢Š(Œ›DÕ¤ÀòˆÛÝd_ñ«ÚF™¨Û_BÓÆ4Î[x=�aõ®‡Ï‡{'›ôÆåÜ2>´Iq Qdš4Œp]˜?íž>¤¢âÒÔæŽ’jåi’júÕŒR,rJ£c8àAöâ³$Ñu[�BâæSd‹}cö[•Wbc#~ |£wßÒcˆ‹¯˜T°Lò@êqéȤóc3|ÅóB†)ž@éœzpk†ÇUÊ:½íž‘ok| ó`Eˆ²²¨@Áã¥hSb–9£Y"‘d�¹ ‡ þ4úbŠZ((¥¢€ŠZ((¥¢€b–Š`£bŒPŠ)qF((¥Å”RÑ@ E-”RâŒPSEW)ÒQE2iR$šC„�K1ô¹–ñÅ c¶Òb;@­­pãA¿?ôÁÿ•y0•qÎ õrü%:ñrš<ŒËV„ãn×;ïøN-çÎ_ûèVÞ“«[k‚{v Žï!÷¯&2¯lþ5sMÔåÒîc¹¶•U€Ã)<0Ù]7ÝèÎ*9µXÍ{]Që”U'U·Ö,VæŽvºªÞ•z¼EÁ¸Ët}'ÅJ.é…QRPQFi¾d~o•½|À»¶gœzãÒ€E29¢˜1ŠDp¬Qа8`pA÷ú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šký߯Šîþ4SBg.:QJ: +sKº¹‹Q¹Òn$7F%Èë´žLpùŽx­iY’'tŒÈꤪcé“ÅEee…¿“� ,ÌÇ,ìz³äúÕŠñû«ÈìÞmgXÓ¬ï.V[¤¹‚æ)=æDU þ[&@�hÉ}êäó[Eà»æŽö-9.o–x ¶�•$SåáPK–ÆÒß(ô®‚ûÁ77öšŒsÞÇ –Yå´€ŒGÈìw±ÆK`àzs޵róÃ7+¦M§XÍ ZKp�O‘öTݹ‚á‘À8À=j,˺9kíBicÔµ#©ëmy¦ù‹e$v#ËÁ… ó•�“œ‚F8àT^%™£ñ<Ê_T[É중ZÖ UTy{@�eT‰äg“ò‘ÓÑ4M:m>ÎQrè÷7Éq1�;w3g=€Àü+UðT:Ž«5ël™¦‚e-9$¬‡Ëòöàp«°þg®M;1&Œo±‡Y† ˜á’ÔÜ[+Ü\•‰–¥6Ȫ­Ë�3ô¯D®WÃþ¾Òuh/.¯b�#²k}ªÓ d›/ÿv‡¡ã–éwáÈo†£ª3C¦ÙÍw/ö�ÆÑ$’ äüø@IƒÇÔøvöíìµxü7$zŒ?Ú¦(..oZhá�Ɉ“¸–g‹| õ=GZ³ ø&ÿBÑ­ì-¼OyÆ 2ÛÚ[*–îyˆ“õ$ŸzÙðþ‹6Œº‡Ú5 /¤»»7Y#Toõh˜!@ÁصÆvæ“m«YjzÍÆ�'Ûn`ºX¯b¹—h¼>To½1ûBýÒgk'V}bÏâ Õŵ•ärOdïo%Åëy+³fX “A•†Í¼°R1–#Ð4í/û>÷T¹ó¼Ï·Ü‹�»q³$xÎyû™Ïk.ïÁ¶^%]a£Bÿgš7ó2ì$r›]wXq�½@¾ ¸‚ÚÖk�,^\h­n³\™"yîHÌXrˆ�Ý9Ȭ vË·Ú�Ž•ká¹ì­§ŽIn%‹@”\…Xó@;ŽXŽ:+¿ÐômWO’Ô_j�Ooiköha¶¶hC}ß™òí–01ŒnoZxÓµü]§r-c´µ·šDr3I'˜Ñœ°*ãËìNs@÷‹§Â,·q]jº^�c$p*ÉlÙ ò°O¡ÏCZ)ª\i>·Ôu”f¼ŠÖ3q`e¦ £¶KzsI¯xi5ë›)äÔõ CfæHÒÙ£Ú_³0t`Híéõ©%ðì7V’Û___^G-¸·q, g X>$rè=(Ÿo^éÞ$Ôîµ{Y-â·Ò¡‘m!¸óƒ3M"‚¼¹Ž§aÎ+NOµ€½�WÓžÖæÚÝn(¥‰•›b…l›v�¸rEH¾±v¼kÛ«Ûö»¶²µÌ ��‹ my^¼Ô‹áKŠñofº¾’î“\ÉóˆÁ%UJ�·“‘ÎyÏË¿_iZoö†«¥%½¼s*Ü4w>g•ÿ–œ(Î2; �N+OI½›QÓ!¼šÔÛ�t‰›s'å'�‚F ³Œš¢|3 ÑEî¡}L³î]\®v«£ rsŠ¿¥i±i|v0K+Á"1+Qs�€à| p3ÎäÐÊ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ­}j×–­ºžØ ’ Ø$dƒŒôÈçЊ³YÚæ�ºî‘>�%åݤs ¯%«…}½ÆH<ôÈZ^ÞÜ›M6;û¦Ó/uy`·ºó[Î{xàg I÷¹‘ÎJ޽êìMçh7²êšÍü6ú]ÅÌ&X¦òÚEVù 0ù™€Âã?1ê iÅáH“OŽÒMSP›Èu’Öfò•튂£fÄQŒ0A8¨o|iwkco¥¨Ú¥¤Íp<—Œù²³n2I½3n$�B~˜å®mc[«uŸOF-$ñLÑ«I°usÎ$çµvº¦‘¨ fš{yíܼ3Û°WBA¨ ‚  �ÈUI|3lÖö0^_ÚÛEFÉøóU¹mä‚rNNáƒÉæ€2¡¾×¼EàUkh<›»Ý!%Ží'òÏžëÈr¸áƒg¿µfËyq§i:¦�¿ƒTŠ[RѾ£%ÛM��°»ò¬Á]z žœ×]6‡ ¢\Þ[ HR+yÌiFܬ t=¡bª� Ù&ÜÞMu4±Êׯ(óƒG÷0@“Æ1ÉÈ94GÃ…ì–ÓÇW7¦¢`1^Ë‹‹Hv™7d±ÝÈä’®§5Ÿf—º'ˆ}mï½¼¹ÓÿjI$*˜è­¨Ž1œÚºKOÁhw¥íóN×"æyÚPá‚lðÛŒ| À¨Ó¶få%¹¹½¼Ž â.¦Þ‘nR¤Ž2NÒFXœq@÷ƒ5éµkho'¿M§™§ŒJ\ɹ@’ ôLg*ÀtÈÍwµ‹¦øjÛM»†çíW—/o‚Ø\ÈAÆUpsµylž:ÖÕpWýΉãmrk©å—Mh!€±!gHD�Pz¸/Ó©QQxkT½¶µÑàÕ®®n.ŸU¾‚Y¼òĤåyÜ£fäcƒÛÖÍáÝ:æêââæ#9šâ�®xI"!\cÓ¾*† XÃqm0’v6÷·ª”‚ów÷��×§&€(7‹®W×^ m �5-MÕ»�¾TàŒ®>\ƒ‘É÷ÅNþ"Ô~ׄZ(}Aâ7- ]XáÜm§ç'8Q‘òžhoY¶“u¥}»P|ð5º[ùªV=“+ž;nÎ;UíKBƒQ»Šñnn¬îãŒÅçÚ¸VhÉ©È Œ€zdv"€2“Ɖs.˜¶¶_»¾ˆHêa%Š˜× †�r¹SR\x¸Á-Ôë§;évw"ÖâïÍ•òªJ¦9U-‚râ§ŸÂXÁ§¬÷péÑF±Hä\Ч#vA9ÏR'¹§Oá; ‹Éein–ÞyÖæk5�e•H!ˆÆzª’ã�hޏÖÓε§j H³éð4 #fÒ021Ô@çø�E„ôøo#•e¹6ñ\¨¬ÌƒÉI‰$¸ÎrÄàœrPƒÆWØ}°hì[¦²µ_´.éæ2z|«ò’IçƒÁã2øbòþë\ñß«Dñ\B«œdH³àpIÏAÖ® X®ˆºX–ä$w/uÁÀ’9F“r�1Áb:tàæ§Òt8t‰¯&K››‰¯dšK‡ Y•BƒÀà:P¥Q@Q@Es ¸¶’,‘ó"8e÷¥ª÷¶Ïwg$ÝÏhíŒMÝ냞7+nAë@΃j^Ó'¿Õ¯bDˆÉq:ÜyÝ÷¤ûÀ¹t­/ Éwyáky/¤•ž_0Ç#åd0—o,·pÛ6Ÿ\Ösx Ð"Ñ[\Ö ¤R‰o‡$BŸÝá—<àƒšÚ´Ò$¶6Æ]WPºhÛ3:3pÆ"¨ uphEÓ?Þ›mCS{]:%…ã¸Ô&™d™Àc�ìGÊ…qîçÐVF³â è|Uªé -Ü6³Ok×ÊIK(ÝùyùYØ€é�Ç¥w~—�=üÑ<Œ÷×?i—y ±S¦z÷¨eðý�ÃjÞz¼©ª"¥ÄlFÜÛÇqúЮ½êø¯Q¶¶‡_»Úm»[¥…ñE�É”npÒ äí^ÌNÞ}û] ìßh}ѹK––ݦE*$m£$ÈçèãšÝ×ᵃ[¸¹–ØÜ«ÙÛM0”»D33’…ŠŒ„G8,1Éäæ)ÞìZM¡.²Y£³6ÿh,Ëʦ7@ÏoJ¦£5É7Ä[F¿º·�§ž ‡�VÒ²l…f q•ç’2séŠÞÿ„�'±[ËK‹˜–ãÈ�<¶IbìNÂ2pHÈôÉíJèz”n|¦Üùÿ¿»‹Îvcå² n2d ©ã÷¬?*¹s᛽F;¹žv‘!ƒpòÜFX¦áŒœÎ3Œ�X/ñÖ~ÊÖˆ!ÀÞ[oó¶ôÏ è.µÇ±»“í’5¢À$2@<×FÎY$u##ƒK@ÔÖâÇR¶šîîáµÌsÏ+.ý¥v€0  Ç�^Ek46å­ÚQóK÷m »�A8¨=+JñX¿Óåž{[›r«,©4¶²¤ ä£ï#+ƒRC«ë—C$z= .£rÍ~Qƒt86Èîyp)è-MM/N‹J°KH^IYܼ¤ff,ÄàÔž‚®V~‰©>¯¥Gy%¸�ÙäFŒI¼ŽÈpØû¹éZ¦ ¢ŒQŠ(¥¢€ŒRÑ@(¢Š(¢Š(¢Š(£b�…¸¢€ŠZ((¥¢€:j‚Oõ†§¨$ÿXkœÜeQ@ õmô54îÈWoNüŠ…ÿÕ·ÐÔ×8ëø ÐBI‰ÀÉüGøTˆfÞ7Žù"… 1ÿ§®íÃ!ñïŒS&ÿ['×ú JVÿ['Ô!MbB’$ƒ½ Šâàñäì÷~…v‘ùжíæEÐȰáðçióK ÏcZz®»}£éQMyk ÝÏr°ÇdÈŠO,Ä(<(cÀë�@ ÆZxæ{ÝKȶÑî%O²¤®8�Èo2D1œ®q“žž—õÏjDÁ’ÎÊK9YV;©¯<¤C‚[Ì;N9ëŠé(®GÃþ0›^šæ4m y"Aˆ53+�§hm¾XýÙ$|Ùî8æ«\ü@þÏÔÅ�õ”1¼Pÿ¤ ¾·B’“©–DÜ6ó�3ó.pr(·¢¹‹ßµ®€š²h·ÓE ;<©mäPrd¬¤Ä€6äÔš_‰o®Ò§ðö ' ±\É[˜â“�Ý&,ÎqŒãµttQ\çˆHƒÆ3“Û4µEaê^,Ò´Ï §ˆ$’Il¤�^!åäd9ÆIÎ0ÏJ½{©%£Y.ÍÍw/–¹8Ú6³³`þ8èõ‰câ�>ûqÄÖñýœÝE%ÂY¡Ì‹ÏÝpysV´½]u@Ì–W¶é´:=Ä[ŠzÉü޵hÑ\ëxºl~Û-…é¶ ò¼ÑG½#„3!n3�»°¹ µ¨xŠßM‘LÖ·�mòo»H³n œäŽG wÅlQT5=V-0@­ ÷Îå!‚ î@$õ êHýEQØùVÏo ÝÙž&ŸË‚,´q©ÃŒ`ñ޹â€7h¬ûÍjÎÏ@—ZÜÓYÇoö�aÁ.˜ÈÛœuWþ%‹N–ò÷L¿²Tt�#�c/+9 ¡B;rI’:ÐÕGKÕaÕ"™£Šhe‚CÐÌxß°pHèÀðHæ©iþ$•ì°Ã¥j mÒÂ×®"·ñîÆT�òÐÝ�¥x–ÏW¸H¡†æ/:qnó Qq oLÇ̽pyVÍW7­ø¶-'P´³[Ké$’äDål&u+±˜ìe\1ã ÏCV“Å:y†âi!Ômá·…¦–K�:x”*òyd>Úڢ¸È> G&“u{ý—{9³yMÊG”bŒHêŒD¥IÈC�¹ÁŠÕ¸ñ͹³ˆèƒ]Ý,¬-–H7"¡\–c&Þw `“@ÔW%¦øÂök›íê(nçH’æ x°ïµ‰ cg÷«úÞ½=¥ÂØi¢ÿRÀ–H`GêXö-ÑAêO 4½EeGâ+ ´aªCö‰ ÎÖH`y$FèU‘A`Aê1ÅaGñÓí�,–z�öD�ÄÖ׃NŸ;±~ï9ù0G]Øæ€;*+˜Ôä:“^‚cBÛŠ)>¤Sd·‚fV–Ü«RÊèG¸Éüè°\àç±þ˵ִønîe‚’é%Ëʪä8à1!xNƒ£Ã÷w:ɽþͲ »;…¾š@% qnUOR>ðæ»DÒôø’å#±¶EºÉ¸ �.s�Ü|ÙÉëëSÉoÖÍo,1¼ »6PT¯¡1E…s¡ ÜÜãþÿÉ[µðÚÀ�[Ã0 ÂÇ…UÀt©)ˆ(¢Š`QE (¢€ 1E-0 (¢€ (¢€ (¢€ (¥ ¢–ŠJ)h gKPIþ°ÔõŸë s› ¢Š(¯þ­¾†¥¸$`,>™¨Ÿý[} KpeÈ$sÑs@r?å›ß"§…›…B�QŠ‹ ýÇÿ¾EI�à„a�P)€�þ¶O¨þB¢�C[ʤ ‚»�ãÓ¿Ò¥oõ²}Gò”€ñ+m\ê-š^Žb¹Ômáqo§*™|—’,ù�³än^yV­©t›h|/6U¤�'ˆnTÀm‘Ö@¯8PU�@,1�ô¯RÀôsP=�£ Gµ…�9�)Œ`1Î[§sdûŸZò=Î[Ÿ2Õ¬àŽ8måiOÚ$¶HWíw!”¤,wŒ.n sÏ<èxÊM6îî}:Ɔ)£q< ’ì`‘TòoÞ@;æ(ϧ ËáÍxàŽmN’8ØUíPˆÆs…qÏ¥^¶ë)”A�‚ „ ã<ÿÀWò”çº[k—3ë·B[h¬îíÊËçI*K{X‹»±è0Ôö­ (Ïìb—fŸ«ý–þk˜5»ÔCYK1’�1£¨,dàzÔ³ê:–‘¢È�é×ëuªÞÏ*¼v’MöH™¸wÍ·/©ç¡®îŠó�wÃ×·~2èÄ‹+m*K[k «|üí*ÅAe!Ø*xéÔç K[�Rþk{‰Ég§}œ¼jU<é†[ I# ©Üýó]=28b‰äxâDi[|…Tí€2}N@(Ï®t�KÄl6ke=œÖz%Å”†uÚ­<‹ §ø—÷gær*ÄsßÚŨ=¢ê�Á5´vñ�E�ˆ¼‘ö�Žv�Ã;p¼qÞ»Êd‘G.Ï24}Œw í>£ÐÐâk‘miká‹}?QþÏ’Íŵ”²ª@ß-v)ù˜ {O\S‡Eq𝔧ív…ŹÕ¶S\FDà˜ù’\ààÊ ão Bl‹kv·‡q§Þ¤³K{$Ñyi d•˜I™ ž Æ â»š(„ð–Ÿqg¬Z˜mµ…lZ;¡}U‚MÊBÃÛi;²+…\c»º( ;ñµÔ:Ž¢˜»òáÑ�˜Ufhšêá°<„d!·ye¾ïyÜRèͦßxc_·¸Ôæ²7bDk[ˉ%šÆ=»å‘‹dòÇ·Í�œf»ö·…¦IZÌ©�®TesŒàöè?* ™Äæ(ÌÁJ‰6�ÀÙëŠñÈu[;/ø¢ ûË•ºº†O"KåXEÂùó°òÆÅÉÆ8Ï/�Œb»/ÝiÚφšòÃÄÂA)Ñêo oÈÞ¿!Ã68 ‚zv®Ö£x"’D’H‘ž<”fPJçÐö 7ðºÙ>±WO­èðyq.�aup«.Ü’A-´Ž€' ÉÕ?É£é·3"ÿM†W»„\ñÐÊXÊ¢@ñ®GL‚ÄåFN8êÏI·z+m;—pΨ¤1FNLkŸ¥rŸÃzuµî¤·ÚTSñö¹`ÕÚíqü%ÝÈ9à�‘Û±í¯>Ï©Á-ÜwQxF —¸³¸’�ò7ó¹b¹R@;ŸF{x$]¯ l¹ ‚ ŒŽA©FA ;ñM·ö·‰tÝOûA Óà¶”ÛÜ%ÎÄ�mÝ!2/*¥p»‡#’: ÏÑn,ÓÆ::é÷:~û‹™ À³×§¼i@·“ÑÀùWæëÀéëmn¦"°D @ˆðƒä®=)Ïr=EU/ÝUP N8ü¸ô­*(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯ÒŠ¥ÐŒ@8££¥±ˆ”RÑ@•Ì·Ž™­-ÍÂ[Ü\À–öðÌñ“"ofB±VÝ×�ƒÎtá7N§og%Ä·6w{–˜î’)Km-Õ�PÄÈÛÔ犨‘éšyѵM6[Í9>X-�Â4`åUÑA ¯8ÁÀ9ì¦éñË}ÖÚbiºu«4‘D!4²²ì.P}БÏ'=°2†]ñÒÚx~ùÍÔvÒ4‘Hòˆñ!S· HçÞ¼ÆãW�´çH5‚·E0­ý¨×&ù‡þ:~•é-‚îïÃÖ–6­sqq…Q]W†2I `WŸ6“âDº¿X­5O´™ƒÌÈŽ†·NæRöÏ àJC‰Øêºâ ¥¸Ó5ËGÆŸ4†Ø:±8RÉ"zò9à�¥WÐ5+yïmDÚ†½q|bWx§µt‰wÉ ®Üƒ‚xâ«kÚn¯«ÚZG§ZLmà´1<—RmžU�pU9,FKVžŸ-èñ,×?ØWðA=¼6ù•¡=Œä“‰ #çj:‡C§¢–Š¢D¢–ŒPQKE´Q@Q@QŠ)qEQEQEQEQEÒÔ¬5=�±VеETa•#ÔTÞxþãþŸãR1Â1…1ŽÞ®üú ÿJO<qÿOñ£ÏÜÓühÞ?¾ÿ÷ÏÿZ€ÁŽ¿ýóÿÖ ‰ÜìØ#'¡úQVŸ˜œuU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TP7éEZ~”SB9°8££¥±�”RÑ@„¢¹�x{E¼ðÖ—uu¤XOq=¤RK,¶ÈîîÈ bHÉ$“RÜén—¬h’éú}­›ËvñHÖð¬eÓìó6Ó€22ªJã:*�g‰¦xVT2  ènPs‚GlàþFªk’ÜÛè:ŒÖ[¾Ö–Ò4WqÞíÀç'8â¼§T7Ò]\¼rÞjÂÝ~I­ ¬Ý·äk'wñ ã¯7`Jç²Ñ^uã+h墇LÒŠCeß-‘–E/”ma÷AÈ=1Uü+m¾³§Åý›¥lŽâKUœiï Æc„>ó½² Ï9΋ê;›ES$(¢ŒP0£´PEPF(¢€ (¢�Š( Š(¦EPEPEPKEV¡EPdÿVßCPÜ�•&¦“ý[} G?AÉŽ(%…3–Vúm5*GpB�}H5|A'ýöÿ –=§$7¦âi€õûÏõþ‚�M_¼ÿ_è)³¶ÛyXã ù›héÜöúÒRXägT‘X£mp§;NÁô8 þ4׸‚8ÞGš5D8v,SèOnµá°]0¸»ŽÖúÆ{†¹‚&X¼E<¦éžx°pTï2±í†8< éµ[Ù$ð�±ŽÇMРM`ÀQnÕ`v‰Ÿ-#48|`�”çŒúP§ ¢3´T3*‡1î‚’@8ô$}�lyaæ.Tá†z}kÆt}÷^H.5†Ì¢¤‚G 캸XÚG-xò>\ƒ§JÜñþÛhdÔ/tK»Œ†FvÇt© ¯¶Dàü¬‡®x<¸ô¯6>x¼ žhó¢óV?1<ÆRáw •çœ�μ—Àó[¶»uea§è3Í5�ÅÈt·� ’ñ�hf›áÈÁ ëÍX½Ðµ1z.4Ý>ïÈHDQ%¤„Ån£–�Y/!-‡Ýœ¯` T$*–b’{Sb–9áI¡‘$‰Ô2:0*Àô Ž¢¼ïU¶K¯èó[¾¹!¾ò‰{I®�–9pÎ΋$Œ@@@°ã½;ÂÿÙwWïmü$±}šìÅl­%úÂ¨Š¥D›ŽÁÜmlq�ŽhÑh¬}kZ›KºÓmmì~×=üÏ/š# V6|’Aã úý+>?I:Çm˜[Vk™mZѧ£PÌÆL}Ü2�@ÉÜ8뀢Šòæ¿Ö¯ °´Ä¥nüAw ëý ñ8TóD$@HQ·<÷@èxõ01@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@UkëV¼µhÔöÀ�L�0VÀ9#$g¦G>„Pš+Ïí/onM¦›ýÓi—º¼°[Ýy­ç=¼p3�$ûÜÈŒg%G^õv&ó´ÙuMfþ}.âæ,Sym"«|…˜|ÌÀaqŸ˜õ€;:+˼Qâ‹û_Ûiw:¬z~ºÚ_Úîå3,R‚åD{¸ÇËÐé‘]N§¨¥Ûi¯i*ÜC ¼š“¥›£ó.#” KPw™rÀ‚z†Çªõ ΊÀ×^[­kHÒVââÞ ‘4³=¼…„j¸]Ñ’àñýß­s1j:•í½™½ŸW6±­ÕºÏ§£’x¦hÕ¤Ø?º¹ç ’sÚ€=Šãá¾×¼EàUkh<›»Ý!%Ží'òÏžëÈr¸áƒg¿µfËyq§i:¦�¿ƒTŠ[RѾ£%ÛM��°»ò¬Á]z žœÐ¡Q\Ÿ†5 Ù-§Ž(®n#MDÀb½—�ì2nÉc»‘É%]Nk>Í/tO,úÛÞ{yr-§þÔ’HT1ÑZ…P#c8#µw”WàÍFúmZÚÉïÄ“iæiÅã—2nP$ƒ=Ê€023]í2I¢ˆ ’DMí±70›Ðzš}yß�ZâÓ[Ðü½SVsqy½mm¾Î@!@ÊdL » ùØ�›œT‘jœz‰/ÿ\[½6ÞD_ GQ/—¼ä¯$ex'ô ú9#•wFêë’2§# à�À‚)Õã¶B{ŸøŽo·êï ˆšk9ŸÌ´++O>ÿ¸ ¤‘ÇAÔø®Ö×C´²• ×n4ûe”4v·î Hì�7;L®yÈnûݸÈm±Ï’)D9Ã#n´K4P&ù¤HÓ!w;2Nç¹$ òíÌA.Ÿ¦&‘â+=^Ùà»»1ßo€“/”7$mbr ÆN _ñ%ÍíÍë7ˆt+ÖÑÒEŠÖ [ˆ~y]‚,ŽLŠÁ²Ãh �Ääpè´Åš'™áYÊ€@Ã*LŽÙÁü«•ÑÄwúlÚ~§öÍ?Ë#ìú‚IM"ƒÒEÔ7©¿)⹋[[éµ;d�Äšªø¢iÎý6Á¶8bbÍ&ß+î�ùBOYsÈ Qi¢IR&‘I3±K[p;ГE+ȑʎñ6ÙX‡àú^iâéîl|[¡iͨj—Ñ5¼¢xÒ8 �ØEÉ(óTœ€:Œ`šw‡¢¿°ñUšëW¨·3‘m$¯o•m7¾Éƒ¶x�Ÿ­zeQ@Q@Q@V/Šžú=šÃí¼è¼ãl»¥ïa@9Ý·=9ôçµEyâ¶­¬Û^iÚcꞣæê[IÚ‡qS&<ϼGQœjê|-qú.Ä[¤x&– Rêá§u‘X†cXg¡ôÇN”µEsžóãñˆ­¥¼¹¸Ž)¡1‰äݰ4Aˆ^Àdö®sYñô>*Õt„–îY§µŽkå$¥”n€|¼ü¬ì@tÎãÒ€=Šó­uïWÅz�µ´:ýضÓmÚÝ,/Š,nL£s†�o'jöbvóïÚèWfû@Óî�Ê\´¶èÍ2)Q#m G9ãµhQEQEQEQEQEQEQEQEQEQEQEQEQE×éEÒŠhLçJ)GAEjd%Q@½Ç„ç0Óõ²ZŒlƒÌ»!=†Ë…P=QŠ·¤øyìn~Ñ{uö¹SýI/9äN%šA’21Æ}j­ç�4Kk¿³Ãqæ9’ËuA’F2ò.OËÈÆFzŠ·£x³IÖ¤h ¹Š; å»ÜDÎøPÙ]ŽÁ†P{CKAê\Ö¬SÓZÕ#²rÌ?ãò9Ï]¹#µr)ðÆÆ;ùn#0òÓËy GS&_~èˆÙ´‚ ŒcŒwìõ-JßI±k»¢â%e_‘ ±,Á@rrH¬Óâ«5› `É'LŸ�üv‡a+™:‡ƒ¯µ.1s¦ÚÛ›H¡–(ìËFÅ%ó0©¸½SžjM+šV¯kp/,ZÒ;‰gh ´0mg�gËó0ÇŽ;ó[Mâ-5tø¯VmñË2ª¨ùöJÁQ¶ž€“úµ§ê0jQÍ$öÅ;ÀK e�í${d,‡v[Ŭ×ÖíRÇS»"Rºq�N›~o‘w ó�AZ¿‚hRUÈWPÃ=piÜC袊`QEQE!…Q@Q@Qš1KIE-”PÑIEŠJ3@-QXšQ@ “ý[} Crd99Æ*i?Õ·ÐÒIü|Ì1èh¯–yáÿ3þ$K¶A�ßRO¥?È?óÕÿ:rDçsîM0¿yþ¿ÐR°Ü¤*HÆGQH¿yþ¿ÐS©ÈAàTŠö;‡¾f x“• Ã|h©±,w6è£bÞ à Óæð¥Ìš]½¡•NÍZ{æ1Ï$'c´¬ :a�ýâƒ�C]eç6~Ôôù£º[M&öãÊu_µÜÈßfs<Ò†VhØÈ@” ¶W=ëOQðv£ªkfþ}R4"1oèlÈçŸ2àät,�v×gErÚw‡µ[Hçº[Ø­¯f[ŒÂŒÓBÈ1œ�¤•#®wé[º^�•¥Zéð’ÑÁ@ÍÉlu'Üœ“õ«”P1§øF5Ò-¬u)î$cÊ·û-äЈªÆ\œ.yÎ �Ið=•…ÅÔÒÉzÅîÌðíÔ®p €Ã~äç9÷®®ŠåuŸ]ÝjZ1¶º½ò⾞âk�9wÀ) ¸}ÝÌ<J·ÿ•ŠÛ@�Ü^Cs Ï:Þ$£Îg~± ƒ‘ÆÇ`Vý…ká;O±ìžé�­ì·Êd�1i$WVÜqÈùØúç½nÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE�®i ®ééÒ^]ÚG0ÚòZ¸WÛÜdƒÁïZ4P?…"M>;I5MBo!ÖKY›ÊW¶* �›F0HÁ`⡽ðU¥Ý­�¼z–£j–“5Àò^3æÊ͸É&ô`͸’= úc¦¢€2nto¼?>‘{uqr'…á’æMžq žr.Fxãµ>ËKhu+û©„l³,pB«Î!E<ŒYß§l~tP—„´Û5’63ÜÂm�¤q\>õ†Ö5à|§®Ož*¼¾A,wwÉ+C²]ɸ­º>ãàwäòsÉ8ÒÑ@¿…—WÕíµ#¬jV²Û!XRÜÄQ êÀ<Õn[y œ““¸`òy­º(.m AD¹¼·„@�¤Vó˜Ò0�¹Y@èzBÅU²0L%¹¼šêic•¯^Qç�î`€'Œc“�rkzŠÇ´ðì‡z^ß4ír.g�¥®&À ¸ÇÊ �<+fnR[››ÛÈâ!‚êméå*Hã$í$e‰À'¹Ebé¾¶Óná¹ûUåËÛÄ`¶2Fq•\œí^['޵µEÊêÞ¿Ôïod7Öþ]ìgv’Ílc8Ü[q.}Ž*M#@Õ´;Y4ëMN ,ˆvŠyà-p®Ç$¹,™$œà­tÔPÿo£´Ômíµ�cài¬µý/QQ Æ–“;¸±Ò~Ë#¦7lŒ°8ã§^+¶¢€ (¢€ (¢€ (¢€ ¯{köËW€\On[Kíu çƒÈü ÕŠ(|3v¾\ú„7S4—qÌ<ÙŒÙ[€p00Oe¡[iËj¶ÓÝ*ÀòHÃÍ'ÏwÉf“ûÇ$ŸcZ”P“ᣥj—7ÿÛ:•Ü—8ó’àõˆAùcS�:Õ™|?cpÚ·ž¯*jˆ©q·6ñÇ~µ©Es‡Â*/ÔZæ­¦Ú+YY,̱îÚX˜ó»æ9*EmØXÛé–XÚGåÛÀ‚8Ó9Àç­X¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ºQCt¢˜Žpt¢�ÒŠÔÈ(¢Šæ4Û™ ‹OŽ&Â\kWÑÊ0T5ÓcÛæUü©4›™¯o|5wrÛ§ŸE–Ie˜Ûp:rkCû Xž_²k:…¤RHòù1, ªÎŘ�ñ±å‰={ÔÖšA·¾—…ÝìëD�8ŒlV*Xˆ½J¯\ô¤2—‹ÿäŸõûiÿ£ã®j¶ýºÛwöïÚ~Ûuö¯;ígòq6Ͻû¼«Æ+·Õ´»}gOk+£ ‰�˜ŸkeX0ÁŽ@éÍPo iL…Kj#ò¸ÿã”4 ž{qw³J°µˆ¸¹›GÓ6Ta>rÄpN½kSôOɧÜÛ[Ïq¤¤�5ÉUßpÓdcß oˆ®ÖOÚIáèt]ó-´)+«øŒ©^qꣵA„ô«clñÇ šŦ2óîûÂCü`ðyôÅ+çžY5¼rÝi:}•ˆÔ¯­N™·+ R|òò)$acãñ]׃â‚/­SIµÓ§µ�`˜[>唈ՃgjÿÒ­ÜxWIšÞÚ`6QÛËç'Ø��Kmeå—£†¬é:5¶Ž·+o%ÄŸh—Îv¸”ÈÛ¶…ûǓޤÓHMš4”´”ÄQE (¢€ (¢€ (¢€ (¢�…Q@ E%€Z)( ¤¢Š`tµKµˆÇëRT¬5‰ ï;ýŸÖ�;ýŸÖ¢¢€$3 ¯ù¤ßþÄŸøõDÿêÛèjiÝ�®Þ�ù›ÿØ“ÿ£ûãÕ’bp2þ"·�Àã¾H Y@à)÷Éæ—Îÿgõ¨ÛýlŸ_è)(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(_;ýŸÖ�;ýŸÖ¢¢€%ó¿Ùýhó¿Ùýj*(F›�»úÑQ7J)ˆÆ(¢«_ØÅ¨Ú5¼¥×�Ë$mµ‘‡!”ö Ö¦Eš+ËL¿’ê;�bê+†¶âÝ!R¨OO1Ç÷ÈíÐs޵®è$FFÎÖqEÀÁÕ¼Wm¦Þ­´P½ß–Ù¼hNEªz¶:žûG8ô¹ñ\À“Á*K�Èèrzƒ\Ýþ›g¥_xjÖÆÝ „_¹Úƒ©ò%䞤ûžjåÓé¾¶–KK&ó®åýÝ­¸9š\tUè½2O¹¥q–tÍ]u+ÍN@¿a¹ò2;¾ElûrHü+J¸Ë¯ J5K¥iÒøÕL ·•)fa ’ƒqSŽÁO­vHË"+¡Ê°È>¢„Á‹E.(¦!(¥¢€ŠZC@Q@Š( Š( Š( aER¢Š(¢Š(¢Š(¢Š(¥¨$ÿXjz‚Oõ†²4EP_ý[} Mp3Ž¿€ÍBÿêÛèj[‚FRÃéšp$Çüž»· ‡Ç¾1UyòÍ¿ï‘SÂÍ„!G¨Å0ßëdú�ä)¬HR@$�Ðw§7úÙ>£ù Šu o*�(F î�NÿJ@qðxòv{�?B»HüÅ[vó"èdXpøs´ù¥‡Ðg±­=W]¾Ñô¨¦¼µ…nç¹XcŽ2dE'–b1àuÀ¯3¶ÑÅ΢ÐI¥èæ+�FÞúr¡‰—Éy"ϘÛ>A&åç•`qšÚ—I¶‡ÂðCa¥ZHÒx†åLÙd ó…YÐ2ÃJè-�c Ãч¸žIv0Hªy·ï ‰ógЦðÿŒ&צ¹�CH�b LÊçiÚo–?vI6{Ž9ª×??³õ1g}e o?é(/­Ð¤¤ðªe‘7 ¼ä üËœŠÊЭÒÛ\¹Ÿ]ºÛEgwnV_:HÙQã/“,Òp í äâº=;Ãöú¦‘iwrº…”’B¥míõ âX—*íW¸Ï¾h×¾/k]5dÑo¦Š@vyRÛÈ äÉYH!‰mÉ©4¿ß]¤1Oáí@Nb¹’6·1Å'ºLXœãÇjÂ_µë^РXu{«‹e…î&³šË:"œ?žpß1 Ðò* n-NõÚßÄÆ5£Ëc³%T&0Ù�ã�ŽôèÔW⛨.õíV­nº…ÄRAåÒ…†NB©Ë)À>ã·j¤šmÒZZ}³N½“Aû|ò ŒïE@ˆ4`ä¨mço8ܹpÒKâ»U· �ÝÄÏ}%„pF<’G»q˜(F9$VøätÅy¥—‡àèßiÑdò£×näÙ<˜áe•”¶s��œú�^—@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W¾¼[S;C<Ø!DpF]˜“�Çõ8½X¬ýoSmIžö;+«Ù|–ö±wcÐ`©í@×Å6Mfeò.¾Ò.>Ëö-ƒÎó¶îÙŒíû¿6sŒsšwü$¶ïgŵ•ýÑ�¸1CZ2�µÃä€ZÇÐí|¥?k°Ô.-Ψ%²šâ2'ÇÌ’çîPXgxèjd[[µ¸Ð´;�>õ%š[Ù&‹ËI#ü¬ÀâLÈTðN0OÐi^%³Õî(a¹‹Î„Ü[¼È\DÓñó/\G³\'„´û‹=bÔÃm¨¤+bÑÝ èʬnRÛIÝ�¹\*ãÝÐ7­ø¶-'P´³[Ké$’äDål&u+±˜ìe\1ã ÏCV“Å:y†âi!Ômá·…¦–K�:x”*òyd>Úå|mu£¨¦.ü¸tcæYš&º¸l!mÞYo»ÞE÷º3i·Þ×íî59¬�Ø‘ÖòâIf±�nÁ¹dbÙ<±íó`g  > G&“u{ý—{9³yMÊG”bŒHêŒD¥IÈC�¹ÁŠÕ¸ñ͹³ˆèƒ]Ý,¬-–H7"¡\–c&Þw `“^m«geáßAyr·WPÉäI|«¸_>vXع8pÇåð1ŒWeâû­;YðÓ^Xx‚H%#š=Má�ù×ä8fÇ!°ONÔcMñ…ìÖ677ÚÔPÝΑ%Ì3@ñaßj7ÆÎïWõ½z{K…°Ò-Eþ¥�,�ÀŽ!Ô±ì[¢ƒÔŸ@k‘ðºÙ>±WO­èðyq.�aup«.Ü’A-´Ž€' ÉÕ?É£é·3"ÿM†W»„\ñÐÊXÊ¢@ñ®GL‚ÄåFN8èqøŠÂmj�ý¢h3µ’IºdPXzŒqXQü@´ûcË%ž£ý‘$15µàÓ§ÄŽìFß»Î~L×v9£Ã3øoN¶½Ô–ûJŠ~>×,»]®?„»¹<2;`V=µçÙõ8%»Žê/Ár÷wB@Fþw,@—*H§`2Ñê1†×QÓí!¶ºy.ãwIe:± £;~^NGËœœSto_V6‘[Žá�ò¬�ýž) 0=NéUqÇ_jÄñM·ö·‰tÝOûA Óà¶”ÛÜ%ÎÄ�mÝ!2/*¥p»‡#’: ÏÑn,ÓÆ::é÷:~û‹™ À³×§¼i@·“ÑÀùWæëÀê”QEQEQEOSÔ Ò¬�ÍÆò»Ö4H×s;± ª£¹$�W++ÄV°Ýhî³%Û‘$F³\Ë«®£¹œ`äÁé@¦ñ]´VbQc{%ÏÚE£Y* ™d+¸– ÷yÎìbµ¬nžòÑ'’Ò{Flæ�»×ífýk‹µÓbÞÝëZ^£©Û]ݬ‘‹ˆ’¨H‚x” dïÀ À# Vφ~Ó§ØAi=�Ú%ÅÄín¬7}šÅ‘d9ùxÀœp;PŽ›¬Á©Ýß[GÌRYH±ÉçG·$Œ‚9Î1늆ïÄ–6M¨,Â`Ö-2…Êò ¢ ÎI9sY~ÔÇŠu·û¥ wMÅ%ÅŒ±+Œ)å”sÛ½fê^¾ºñF±­[} ]Y4XDÙÌËzFS?ÚߺñJZêY 'RšHmÒâv‰c"mØÏÏ’~Fû ô­«[˜om!º·pðOÉ�âR2äkÏõ(mõ/]Ý_Xø…-ï4Ûu‰lâ¸�-™K#ìÂän^¦k³ðüw±x{O�QUKÄ·E•TÓŽ?.=(JŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( n”PÝ(¦#t¸ tV†BQKE%ÎiºlZ¬ww:�”Þ\Çû«ùâP©3¢€¨à•GjƒÃ:Å•ÌZ&±îÿf2Çu4ˆæB…ÆCF]H,ÁÁÎ3EÂÇUEV¿{Ôµ-§Ã·ð“ÈQHïÈSÏá\L:ÿˆ÷ì,o¨˜íc°7’nŽ`ÌþYàÎáþÆy¢ãHïè®Ä:þ­§ëzM¬íedf†viéòÁ ÷ˆ1àíê3Ô‚8¨|3â{�SÄBÙõ+|;ù’F³£î"Þ?ÝÆ2xÞdl¯÷­+ŽÇ QEÄ”QLŠ( Š(¤EP0¢Š(¢Š(¢Š(QE€(Í%¹£4”PMPIþ°ÔõŸë fXÊ(¢€ÿêÛèj[€ .A#ž‹š�†T�QSyãû�ú�A„þãÿß"¤‰FðB0Ǩÿ<qÿOñ£ÏÜÓüh6ÿ['Ô!IA;�›dô?J(0=Ôchèíadd c s–Ç©ÜÙ>çÖ¬Q@’øsCž8#›FӤ޶{T"1œáAséW…­ºÊeD$ ‚áH8Ï?ðü‡¥KEW¶°³³´–¶�Al£ œõùGbŠ(8 ŠÝJÃF¥‹Š$œ“Çric†(‹˜ãDÞÛßj�¹½O©§Ñ@®,-®®­.f�tÖŽÒ@ÛˆØÅJ“�×åb9õ«4Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@28b‰äxâDi[|…Tí€2}N@)ôPL’(åÙæF�±ƒ.á�§Ôz}QEQEQEQEQE[ÂÓ$­ fTÎ×*2¹Æp{t•Lâsf`¥D›FàlõÅIEÁ’$’DŒñä£2‚W>‡µIE5ãI6ïEm§rîÁõ†(ÉÉ�sô§Ñ@½¼.׆6\†ÁPFG Ô„# ÑED¶Öêb+@Ä�>@zãÒœñG#Æï3Fw!e©Á‡�ÆŸEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE#t¢†éE1㥔V†aER†¹±±¸·6z¤:‚KåÜŠbÒ>Ô¬²LΤ3C û¤t#ߥhh°Âº­‚XÃv-,ìî#i'±6¿4’DÀØ€ýÆû«ÛžMu4”X.UÔoÆÑ¦ŽÎâíòb€ÄŸ©SÚ¸ètMrËY>#û ´Ï#»¶—¤w £“´ÈBüÜyÁ®é˜(Ë©¦ùÑÏTÿ¾…08�[H›U×týaìodß yplU’تîNIÚ¹Ï'ÍÚë2x�E’ê i ŠáÙÚñí]0¸÷# ä�Ïúâ»2=Ê»×s‚Tg–úRE4S©heI1RQ�ƒ‚8î¬;�¤¢Šb (¢€ )( ¢Š(QEQE%“4QH–’–€ )3E’Š(¢ŒÒf€:z(¢³((¢ŠF8F#°¦1ÛÕߟAŸéN“ý[} CrTš~ñý÷ÿ¾úÔ pÿïŸþµB°¦rÊßM¦¥HãR©€$R~`NpiÔÕûÏõþ‚�@Ä–9Õ$V(Û\)ÎÓ€p}?�5î Ž7‘æ�Q‹úÛ­KE0M� ¡™T9�pÜ’Ç¡ óìhócË1r§ 3Óë@¢™æÇÏï�“Ít^jÇæ'˜Ê\.á’£ãÓ‘ùÐè¤$*–b’{Sb–9áI¡‘$‰Ô2:0*Àô Ž¢€EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE2I¢ˆ ’DMí±70›Ðzš}Sc’9Wtn®¹#*r2ü"�@È¥ŽxÄ‘H’!Î{u¢Y¢�7Í"F™ ¹Ø’p=É P袘³Dó<+"PèeAé‘Û8?•>ŠcMJ‘4ˆ²I�ŠXØë�Þ„š)^DŽTw‰¶ÈªÀ”8ÐàƒøŠ}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ý(¡ºQLG::QH: *ÌŠ( DM]NºÔ<6’+ÛÄnu‹(Ê™ �Ìžr <¾ïœsSÚé�i~*µòF—=û"ÇeFë‚v á@8ùPàç•Îyl[iÅ–ŸŸ§§5¤1cYô÷v(b&œuàgÒ¡Ó¼*Öwº|ÒËcåØ4� [Z4m—R§s4ŽHÁéì9â�î;Ç;?á—ÍExþÓm¹ †zd'éÞ¼çOµ„k“ «Œ̳G™ 8(6ªÀPËgø»ã $šõ_i÷¦’m­$Š9üèeV”£dŠü�Éû¾ßQXÂzÄwÿmƒS±Šo›rˆ'(ûºåZb<ñŠ̆Ô�§øU¾²³oìçýíâ–Œ~î>0yükoÂ\3M¶·¤j‚i&œ[DÛÕ¤flgydž£ üjæ‡áû�>âÆ[¹â�Yi±ÙB‘ƒ€Üy�Ï®Õǰ«öšt¶þ Ôõt1]G"‚w�óŸûèSH.iÑIE1Q@Q@Å¢’Š3ER¢Š(QE ŠJ(´RRæ�%PEPIN?3tmÝÏùÇn”újgiÎìäýìzûSª (¢€'ú¶úŽ~ƒ’?T’«o¡¨n@,ƒ''8ÁÅ4> “þû…KÓƒ’Óq5_Ë<ðÿ™ÿ ’%Û Èo©'�Ò˜¯Þ¯ôÙÛm¼¬q€„üÍ´tî{}iË÷Ÿëý+ Ê@b¤Œdu€ð˜.˜\]Çk}c=Ã\Á,^"žStÏ?I:Çm˜[Vk™mZѧ£PÌÆL}Ü2�@ÉÜ8ë†ë>»ºÔ´cmu{åÅ}=Ä×roþ+¶�!¸¼†æžu¼IGœÎü9bA#ŒŽÀ 5¯õ«è,-1)[¿]Ã:ÿhDz{¦6·²ß)’@Ť‘][qÇ#çcëžõ»@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@V¾µkËV€]Ol Él’2AÆzdsèEY¬ísH]wHŸN’òîÒ9†×’Õ¾Þã$zä-/onM¦›ýÓi—º¼°[Ýy­ç=¼p3�$ûÜÈŒg%G^õv&ó´ÙuMfþ}.âæ,Sym"«|…˜|ÌÀaqŸ˜õ´âð¤I§Çi&©¨Mä:Ék3yJöÅAQ³b(Æ  ŒT7¾ ´»µ±·�RÔmRÒf¸KÆ|ÙY·$ÞŒ·G¡?Lrž(ñEý¯‚í´»�V=?]m/íwr™–)A ò¢ ƒ½ÜcåètÈ®§SÔRí´×´•n!†ÞMIž6 ’L Èë–}ÃÜ­+�ïϤ^Ý\\‰áxd¹“gœCgœ… ‘ž8íO²ÒÚJþêa,˪óˆQOc–wéÛ€>³¨xsN·½ûl÷²^hwÒ¬îYDñ¬lGð©óÚ8àV¾�©C¦­ù¾—XI ´R�FEa" æD H\�r¿.8ùEiYxKM³Y#c=Ì&ØÚGÃïX`=c^Êp:äð9â«Ëá4²Çwq<’´1K%Ü›ŠÛ£î1®~AÏ'<“�@Z�…Ö™àázÚ�졇tðKµZöFfÆ1óåßlŒƒšŸÅÏ{`–×É>¥›£ó.#” KPw™rÀ‚z†Çªõ­M_ÂË«êöÚ‘Ö5+Ym�¬)nb(„õ`6ùˆã>œzÒÝøVÞýLwZŽ¥4* ˆqåÜme†8ÎBíž9 ×^[­kHÒVââÞ ‘4³=¼…„j¸]Ñ’àñýß­s1j:•í½™½ŸW6±­ÕºÏ§£’x¦hÕ¤Ø?º¹ç ’sÚ»]SH‡T3M=¼öî^íØ+¡ ƒÔAŒGä*¤¾¶k {//ím¢�£d‚|yªÜ¶òA9''pÁäó@PßkÞ"ð*µ´MÝî�’Çv“ùgÏuä9\pÁ³ßÚ³e¼¸Ó´�SNˆßÁªE-©hßQ’í¦ŽGÆØ]ùV`®½ÏNk®›C‚PQ.o-á$)¼æ4Œ#nVP:ƒÐ�‚1UG„ìŒ no&ºšXåk×”yÁ£û˜ Éãä䚣á�BöKiãŠ+›ˆÓQ0¯eÅŤ;Ì›²XîärIWSšÏ³KÝÄ >¶÷€^Þ\‹iÿµ$’ÌtV€áTÇÎí]%§‡`´;Òöù§k‘s<í( pÁ6ømÆ>PàTiá[3r’ÜÜÞÞGq SoH·)RG'i#,N8 {Áš�ôÚµ´7“߉&ÓÌÓ‹Æ%.dÜ Iz&3•`:df»ÚÅÓ|5m¦ÝÃsö«Ë—·ˆÁl.d Œã*¸9Ú¼¶Okj€<ïÇ­qi­è~^©«9¸¼Þ¶¶ßg  e2&]Ð|ìGÍ�Î*Hµ N= Ä—‰®-Þ›o"¯…£¨—ËÞòW’2¼ŽzV¶­á{ýNööC}oåÞÇöwi!,Ð@0vÆ3�Å·çÑxâ¤Ò4 [Cµ“N´Ôà’ȇh§ž× ìrK�BÉ’IÎúÐd'¹ð�ˆæû~®ð؉¦³™üËB²´óïû�7ð�AÚItOŠímt;K)Z vãO¶YCGk~à´ŽÈs´Ê眀ï½ÛŒ±þßGi¨ÛÚx�‚jQ²] ›1'Ww&0¬›~i®î£Ò¶õ'YÔt�ass¤Ü™ óäšÁŠãc.A=y-éÅqš%˜‚]?LM#ÄVz½³Áwvc¾ß &_(nHÚÄ8䌜¿âK›Û›ÖoèW­£¤‹¬·üò»Y™ƒe†Ð;‰ÈãkFð…džî£}/V–X%eûlWª$2`cr0ÁR®; «âÞø†á¤¹o%GIdÒæØŽ#9—�@ÁàdÓ4cD_ßé³iúŸÛ4ÿ,�³ê $ 4ŠIoPÞ¤pzü§Šæ-mo¦Ôí’?j«â‰¤[;ôÛØá‰‹4›|¯ºCå =dQÏ"»#ZÒôÉ­l¤ÐmÉ`a[m9áŽ<Ÿ™Š‰ãŒc§Nj¸ðd�Nu;MbéuÖÿ[{(Þ“î4Y °vzõÈ9âéîl|[¡iͨj—Ñ5¼¢xÒ8 �ØEÉ(óTœ€:Œ`šw‡¢¿°ñUšëW¨·3‘m$¯o•m7¾Éƒ¶x�Ÿ­t÷>º»¸·¼‘¬EëC$wnÑ3Æä¦ÐÊ~Réõ¬ëMe¯ézŠ�4´™ÝÅŽ“öY�1¸;de�Ç:ñ@µQ@Q@Q@bø©ï£Ñ¬>ѻ΋Î6˺Qñæ�ÛsÓŸNq[U^ö×í–¯¸žÜ¶–ÚêAÏ‘øA [VÖm¯4í1õ‚ÏQˆƒsu-¤íC¸©“gÞ#¨Îµu>¸Ž}b-Ò<K©upӺȬC1‰,3Ðúc§JEðÌÚùp_êÜLÒ]Ç0ódr0KdmnÀÀÀ=–…m§-ªÛOt«É#4Ÿ=ß%šOï’}�PðÿŸˆ¼Em-åÍÄqM ŒO&í�¢ Bö'µsšÏˆ/¡ñV«¤$·pÚÍ=¬s_)%,£tåçågb#¦w•Ôé>:V©sý³©]És�9. ;X€–59c­Y—Ãö7 «yêò¦¨Š—±poqÇë@vº÷«â½FÚÚ~ì[i¶ín–Å7&Q¹ÃH7“µ{1;y÷ít+³} i÷Få.Z[tf™¨‘¶Œ�#œñÚ³„T^ ¨µÍZ)M´V²²ñG²ÎùÉSÄr±éì}½ë�{ öl‹ ¯ûòßáPÊóÀ|©¢(Àtu ×:Õ)K˜ôka©b!É¡ê´V„¯&»ÒXLû¼©6)=†Çë[¬HR@$�Ðw¯z•ER k©òUé:57ÐZ+‹ƒÇ“³ÜyúÚGæ*Û·™C"ÇÃ�§Í,>ƒ=�iêºíö�¥E5å¬+w=ÊÃpy“")<³ ð¡�®hdt4Wiã™ïu/"ÛG¸•>Ê’¸â?!¼ÉüÆr¸PÆNzz_×U³ÛÃwvg‰§òà‹-jpÅ�#óZ³³Ð%Ö·4ÖqÛý¤pK¦26çEUÿ„‰bÓ¥¼½Ó/ì•#HçXËÊÎB¨PŽÜ’@䎴µEQÒõXuH¦hâš`�Å437Àl:0<9ªZ‰¥{,0éZ‚ÛE4°µëˆ„;£,­ü{±• |´·Eci^%³Õî(a¹‹Î„Ü[¼È\DÓñó/\G³@™m¯YÜë÷ú2ù‹uerI¸¬®2 œöï�:ЇGñ-¦»eoycËÛÏ4�‰ .ÌüÍÏ vñõ(fŠ( Š( ŠÆÿ„–Ì^ÞBñN�ZL–Ò]2�,ÌåŒwg÷‹ÎÜs׊±¬êñè¶qÜImqpd™ H­Â—gs€>b_zÑ¢³´½bM§ˆAqmsnTMop :nSÁ ƒÏ ž†´h¢Š(¢Š(¢¡7^%¿“) 4/È0@ÚO©ÎGÐÓå• …æ‘¶Ç–cè&€EGñÜÛÅ<-º)P:61�FAæ«jÚœZ>™-ôÑK*G´yq]‹0PHÉèí�'ˆM¶‹s©Ý镲[ä´.ˆÒ2�’À#°ÇÔŽ•§ ÊÏeÔhådŒH«ÆâÈ™  ¨¬+›½f=2]S³™âiƒN"*2JHÄdœ9ü KwâK&Ôa0k�B‚eyQPg$œ�Ž9  Š+ëÅ)k¨Id4�Ji!·K‰Ú%ŒˆU·c?>IùîƒÒ¶­na½´†êÝÃÁ(ûü#—§N¸KyÖ&c+J¨�¿íc¥yüv²Ø\èv†x®e—ì¢A{D�*F_Ÿ¼|áõØO½z¤‘¤±¼r*º8*Êà ƒÔªt­9­å·k V†R ‘˜T«‘€21Î0?*,<çSÓc¸‹FŠÎ:îáb†Þ’Ý ’ìŽHÚG±NÂHÀõÅM¡Âcñ5µ°uÙóìÁ6Ý1ØGÊN'�*9ñÁÇ¢Ceioþ¢Ö¾AÉ_”t^;JT´¶Ž¡KhV(ˆ1¢  „t v¢Árz)(¦ÑIE-”Rh¤¢�‹E%€Z)( bÑIš)´RQ@Å¢’Š@¢Š3@¤¤Íu•Ÿë OPIþ°ÒÊ(¢€(kgñÿ¦ü«Í4Øçº¾† bWl+ôÛïšô­tã@Ôý;¿ò5æ-üv­½Ô¤ùq¶YW¯Jñó{h_oø'ÓdªO QÅkÿßÚžVïøI¾oîì–ªj×±=•µ²Îo%Œ³5ÁF¢Œò}kŸÜç üé ñþ°~uçʽՒüÿÌöaƒQ’“•íä¿D�Dð1Γqÿ]Ïþ‚+¤�C[ʤ ‚»�ãÓ¿Ò¹Ú=Ïý|ýk¬¯üŸ™«bçêx•¶Ž.u‚M/G1\ê6ð¸·Ó• L¾KÉ|ÆÙò 7/<«ŒÖÔºM´>‚ *ÒF“Ä7*`6Èë Wœ(*΀€ –ÀúW©`z9¨ÆÑÐ#ÚÂÈÈÆ0ç-�S¹²}Ï­tœ‘èvrÜù–­gqÃo+J~Ñ%²B¿k¹ ¥!c¼apqžyçCÆRi·wséÖ0¬1M{‰á—cŠ G� ~òØŸ1F}=_hsÇshÚt‘À6¯j„F3œ(#Ž}*ðµ·YL¢„„\ Éçþ¿�ô 8ЭÒÛ\¹Ÿ]ºÛEgwnV_:HÙQã/“,Òp í äâº=;Ãöú¦‘iwrº…”’B¥míõ âX—*íW¸Ï¾k¡¶°³³´–¶�Al£ œõùGb€<ý~×­x;B�aÕî®-–¸šÎh,èŠpþyÃ|Ä7CȨ|,u¸µ;×kKÔJ�-ŽÌ•PL˜Ãdp~CŽ;סEVêV’5,X„P$äž;“K1D\Ç&öÞûT Íê}My–›c«®Ço<º„ñC«êõ-–„m5M û\Ò%»+c,Lÿg7ùªÑÛ“•�#w¨<ó]ûX[6¥ cÍÔp´ &ãÂ1V#:ªþUf€8¯X]Ùj/öû;”oÿó ,-­÷“ä1ÇÊã+œõvWkEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~·©¶�¤Ï{•Õìˆ>K{X‹»±è0Ôö­ (Ïìb—fŸ«ý–þk˜5»ÔCYK1’�1£¨,dàzÔ³ê:–‘¢È�é×ëuªÞÏ*¼v’MöH™¸wÍ·/©ç¡®îŠó�wÃ×·~2èÄ‹+m*K[k «|üí*ÅAe!Ø*xéÔç K[�Rþk{‰Ég§}œ¼jU<é†[ I# ©Üýó]=28b‰äxâDi[|…Tí€2}N@(Ï®t�KÄl6ke=œÖz%Å”†uÚ­<‹ §ø—÷gær*ÄsßÚŨ=¢ê�Á5´vñ�E�ˆ¼‘ö�Žv�Ã;p¼qÞ»Êd‘G.Ï24}Œw í>£ÐÐâk‘miká‹}?QþÏ’Íŵ”²ª@ß-v)ù˜ {O\S‡Eq𝔧ív…ŹÕ¶S\FDà˜ù’\ààÊ ão Bl‹kv·‡q§Þ¤³K{$Ñyi d•˜I™ ž Æ â»š(„ð–Ÿqg¬Z˜mµ…lZ;¡}U‚MÊBÃÛi;²+…\c»º( VÐõK½{SºÓãhå’XíšVùso$*²2“Ô© Ýù\TZ~•you¤$VsD�kZ‹‚bm±ÆË8F;YUíÑLÍ¥Á‹z®KŸ.î@ ú滆°¶mJ=@Ç›¨áhMÇ„b¬F:uUüªÍy³ézÏØBÝ[]K7ü#·ðŒƒ#Ά8Ë åö€=I­\>ÛpÖpXHmït9ǘ–K€SfòßÇËuç�jïh  ?Ámká«Hm¬Çb–€Ä|Ì Çs“ß½[×Þ]-ã»Óå¿¶f_2Ð1À`s·#8 }«FŠà¶½‡†¼D Óoâ°½-Ÿf–²;®aÁ>Z‚cRÀõl×G¢êAôÝ.e~¦Hü¶2Û4~QEÞÐs[TP‹ ï®ë÷·¹®{Rðíõ׊5�jÛíêÉ šÂ&ȆfXðãÐ’2™þ×}EyÖ¥ ¾¥âK»«ë¥½æ›n±-œWå³)d}˜\�ËÃôÍv~Žö/iñê*©x–貪€`:qÇåÇ¥iQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ý(¤~”P#t¥¦Ž”¹­4™¤Í�©ÃößéörMr�5­Ä¬°\IY^ (A8 Ü{Ô¾g:K+Ë$ž]ÕÌJÒ¹vڳȪ IÀdúW7.¯áÏê÷:½¥æ—p—Dý¥aš&�÷Sœ²’W<Gz¹á·Ñ$Õ'¿K½+ûZøÁi4dªçqiË·vo_aH’ú îmŒv÷’ZHH>lh¬G¶úW××¶þ'¸Ò/|Ww ‚F¶€fÝ•-åà~k¹Ís˦%ïˆ5Èï­<Û;˜-�y‰ò¾<ÌàúŒŽ�8¦‹µ©ô»‹ ?û^ý'y[HÄŠs3ÁŽ@BpsG‡uË»¿móïæ‰îY™5»£§�‡ø_‚7|€�˜Ž¤âOé…ÓFtý-äXcŽ(çKÙhóTF½z Ÿ@j« Ûëþ)ûmÖ—(y¶Û$Ť‘)ÄŽKüÀ�©‚ÝvûÒê>‡¢æŒÒfŒÓ´RfŒÐÑIš3@ E&hÍŠLÑHbÑšJ3@ E%¤1sKšLÒf� š)( ¤Íf�ÂŒÒQ@mA'úÃSÑ@h«TPàŽæÞH%]ÑÈ¥z‚0k‘o‡–e‰[éÂöAÅw3J�BóHpˆ¥˜ú\ÛxÖÔ1Ûk1‰ W.&8v×¶= ñ‘OêÍۮߩ“ÿ î×þçÿ¾ð®íçþûàV¯ü&¶ßóé/ýô+oKÕ-õkQ=¹ ŽU>õ„(`ê;E+üΪ¸ÌΔy§&—ȧ£éú-�ÙmË0,]™Ï,OÐUúµEwÆ*)F;EJ’©'9»¶U¢­QTAVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеES~”U§éEr ð(Í < ­}u-¥«O³Ül ´h~m½ÊŽäzw­ ËTVTå½õÔ騻¾d²#aaB8ܼOEë×8Åi9qyaKàí p í“@ÓÂ�¼Í*,H w,¨r{c’KˆaˆK$±¤d€˜I8û’ã\Ü÷ëá¿4«TÜ%ÞËÖØŒ"tRœç$‘ÆH÷©õ×f˜…ͤ¢€4¹¦Òæ€4f“4f�‹š3Iš3HÍ™¢�‹E%€Z\ÓsKš.hÍ&hÍ ÑFi3HbÑIERfŠë袊(¢Š£­h—Çþ˜?ò¯1Œ†CŸZôÍs�üÿÓþUåVïšžs8‹?0C†Ç¶kÇÌ_ï#è}KÑ›ó%fÚØ«¶„ºmÂ\ÛJ¡€Ã)<0ô"�¶„z�@ÿÀÓü*+ë;xí!¼³•Ì3&Ùq¹X}:ŠâJQ÷¢ö=IrÔ÷&ž½Ñéš^§­d. ã�®§ª·¥]®WÀg:EÇýw?ú®švÛo+`!?3m;žßZ÷ðõJJO©ò8ºJ�ySŽÈT–9Õ$V(Û\)ÎÓ€p}?�5î Ž7‘æ�Q‹úÛ­xlL..ãµ¾±žá®`‰–/O)ºgž,;ÀŒ¬E»aŽºmVöI<'lc±Ót(X0[µX¢gËHÍß#å9ã>•±Ìzpš#;@%C2¨sá¸)$�BAçØÑæÇ–båNg§Ö¼gGßpEä‚ãPHlÊ*A¨$p®Ë«…�¤rч�#åÀè:t­Ïí¶†MB÷D°{¸Èdga,wJ�ÊûdNÊÈzçƒÁë€Jócç÷‹ÀÉæ�:/5cóÌe.pÉQŽqéÈüëÉ|5»k·VV~ƒ<ÓYÜ\‡Kx©/†i±Œ:¼Õ‹Ý S¢ãMÓîü„„EZHLVê9hÕ’òØ}ÙÊö` õBB©f É'µ6)cžšH�C#£¬Bê+Îõ[dºð�5»ë’ï(—´šéÙc— ìè²HÄKN;Ó¼/ý—u~öÑÿÂKÙ®ÌVÊÒ_¬*ˆªTI¸ìÆÖÇæ€=Ï‘ã2 tP쥆UNy#°àóìiÊèñ¬ˆÊÈÃp`rõÍy%ÍÆ§}ªÞ¥�æ£%æ£wwar�l¶‰¦ åIå€Î«’þI9®�G[›õÕ4�?^¹žÎM&Ý­g¹Š2Ð ÈxEN��Ev¢æÜÈcÆ]B’¡Æ@n�~Þµ!e^¤©¯K«÷�YE+>ž²ÛéËqo§.ÜG…ˆ k¥e;Üí ðAì5þ&´v×6 ¨Mo-ÔUË#46Û\ǃ²à°ÆAáI~Ã<Ы‡RpìikÇ<>Ž|s”Ñ+,`A³û6<³#nÝäÏÐ`.qÜ ô}O\»µ×-ô›4]ÜMk%È-p"Uʤ÷ÇOþ½nQ\¤1›P–Â3I3Íwk-ÆÙnb#‹«Œq‘žŸ�T´ñ^«ªø“LM:Êaqa,²E=ÆÆWIQœ#r§rà“ÆvÔV�âV×®f…,²®ËÂïþªà C�›gw}xß Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š*µõ«^Z´ê{`H&H+`‘’3Ó#ŸB(Íçö—··&ÓMŽþé´ËÝ^X-î¼ÖóžÞ8È}îdF³’£¯z»yÚ ìº¦³ ¾—qs –)¼¶‘U¾BÌ>f`0¸ÏÌzƒ@�åÞ(ñEý¯‚í´»�V=?]m/íwr™–)A ò¢ ƒ½ÜcåètÈ®§SÔRí´×´•n!†ÞMIž6 ’L Èë–}ÃÜ ¢Šó™õ�CÚu½ïÛg½’óC¸¾•grÊ'�c`Ê?…O˜FÑǵômJ5oÍôºÂM º”j2+ g2 RB䃕ùqÇÊ(¯¢¸]NÂëLðp½mFö Pú x%Ú­{#3cùòïŒ6FAÍOâç½°KkäŸRŠMÑù—Ê¥¨ »Ìˆ9`A=CcÕzÐgE`k¯-Öµ¤i+qqoÈšYžÞBŽÂ5\.áÈÉpxþïÖ¹˜µJöÞÌÞÏ«›XÖêÝgÓÑ‹Iø©ßÄZ�Úã°‹E¨SÍttW*ž4K™tŵ²ýÝôB@÷S9,Tƹ4€ƒ•Èúš’ãÅÆ n§]9ßK³¹·~h ¯•RU1Ê©l�x8ÓQ^cq¬xŽÚç\Ôa…L©¬AaýAÊ$e¡ùe Œîåñ¸y�ýÑž‹ÆWWxrÁç76Ï%í²\&Ÿ,…ö³�ꌀ3wO¥u”Wa«Ýi"lA©\[]ÜÅo¥Ã~̳<… |—ù‚¹ËsÁÇj¿‹±y ¥Ý‰·˜^;¯ÞîX\ÄeF2°Ï'¥tÔWgãû{�>Úîk&·.%¸F“-1&ýøÇ$†‹åãg·5áø—e-Ž¡8†ÞI-lšõb·½I‹F1Qò0Ü8äsÔÐsEsRx�U]JßNM MÜöò\ª5àQæ;N Þ8Áüé°ø½µìKÓžâòê&he”D!XÜ#†lwpàô žŠãÆÉ*j[Ü•MîðÂóíPк«#(nÝ‘»<`ðsRËâ½A­®ãH¶»:s_Ú .U· À;°V‡ƒë@u—áÛ»ûíÎçR†(îd‰Xùrï ƒ»î® ôÇßÚßÞx~æßLvK·(¬Æ#�ë»9S·w"€5¨®„üEf³jv7öï!:ƒÜ0o+z”•ùÚF8ÀäëtÒÓè–†GrÒ[&çÜwTdç®}èíÈhºbÇãÓm¨jok§D°¼w„Ó,“8 rˆùP®=Üú ÈÖ|A}е]!%»†ÖiícšùI)e /?+;3¸ô F¢¼ë]{Õñ^£mm¿v-´Ûv·K â‹“(Üá¤ÉÚ½˜�¼ûöºÙ¾Ð4û£r—--º3LŠTHÛFH‘Îxí@QEQEQEQEQEQEQEQEQEQEQEQEQE5úQCô¢��< 3M�KšÐ�‘A ü˜£�{}Šæ=IÇSïRf›š3@ãxb±ø€}µ¤ŸTY–4$¬Qo\9çîäûqVµ�"óPÒmí-nÍ´©…iRYj「»� ¬ÈüM¤Ù©âÁ¨Ã4ibÑF²F†%@1‚?x^«Ò·³MÍdê~#±Òe\­ÞâÊ Çk#)fèÚIôÍlfŠ£c¨ý¸Jße¸�c8Ý:ªçð‘�p:Ötž0Ñ¡Ó༚é"IÈòã‘Õ\¡}¡ö“’½óéÍoÑY²ëºdVø^G5³H"Y-ó6ç'@L’sUt¿iš³Á?j�ç."[: œ�Äm< õÏãÅ7(¤¢€ŠJ) Z\Óis@ š)3E!ŽÍ¤Í¤æŒÒfŒÒ¹£4™£4QIš(sIE%!��QLAEPv¾qáý@ÿÓ»ÿ#^aáå†ã]³ŠTÞ¥ùSÈ<^§¬[Éu¢ÞÛÂ7K$¨=I¼r8u+Iƒ%µÌR¡àˆØ2šñóƬ%m¦Éž¤³äkÿÂWåyy‹oýpO𪺤×ì¦âFmƒ Uú*§ÙïçÎ_ûôh6÷¤Çœß÷èÿ…y²©RJͳ݆„â’#Ñ~�Ú5Ïý|ýk­a¹H T‘ŒŽ¢¹Y\ÙèR˜ž&–bê®0và ãð5Ô×ÐàÓT#sâ³&ž.mw9< ‘^Çp÷ÌÁ/r¡Xo�6#eŽæÝl[Ôš|Þ¹“K·´2©Ù«O|Æ9ä„ìv•”L0?¼Pqèk¬¢ºNÎlü ©éóGt¶šMíÇ”ê¿k¹‘¾Ìæy¥ ¬Ñ±��(l®{Öž£àíGTÖÍüú¤hDb8Þ4!ÐÙ‘Î>eÁÈèY:í®ÎŠå´ïj¶‘Ït·±[^Ì·…¦„3�c9!I*G\ î#Ò·t½:-+JµÓá%£‚0�›’ØêO¹9'ëW( cOðŒk¤[XêSÜH,Ç•oö[É  TŒ¹8\óœ@5“à{+ ‹©¥’õ‹Ý™áÛ©\à.†ü1È9Îsï]]Ìéž–ÇQûdÚµÄÊ——7PÛyqˆ£33ž»w’ž­ŒÓ-ü/y4€¿½Š oš5“û23ò”±+’I‹¹$`üÜz×SEq à›é/mµ1ik{dª–vÐ[fÙA IÜän8l®Üð:æÖ©á½_U[‰åº²ŽöHm£�÷lÑÇåËæ9ÆA;ŽQÐW[Erzw„®´í~=Wí¶÷/&ï´#ÂQcfåž BÀÈ9Ï\ŽrÛ� ]Éâ=9£¿ÔÖÛNš½©˜»I Å�Î@nqØr+®¢€9 |&éâ 1l%º²Óí4Ù óíå]ûÚHØ»$ä$ã¯9Î+HxRÊÓÞÊâêÊKZÞº1 Á·†ÎYAÏ\÷æ·h  }+ÃV:5ÊÍdó¡ò2©`D䉌—Éo›Œî9ÏØ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+;\Ò]Ò'Ó¤¼»´Žaµäµp¯·¸ÉƒÞ´h ~/ Dš|v’jš„ÞC¬–³7”¯lT6"Œ`‘‚ÁÅC{à«K»[xõ-FÕ-&k�ä¼gÍ•›q’MèÁ›q$zôÇMEdÜè0ßx~}"öêâäO Ã%Ì›<â<ä(\ŒñÇj}––ÐêW÷SÙfXà…WœBŠx#³¿NØü4è  +/ i¶k$lg¹„ÛHâ¸}ë ¬kÀùN\žq�”8xVÌܤ·77·‘ÄCÔÛÒ-ÊT‘ÆIÚHË€N+rŠÅÓ|5m¦ÝÃsö«Ë—·ˆÁl.d Œã*¸9Ú¼¶OkjŠ(*oé×7W1Ì×ÜísÂI ã�óùT0øZÆ‹i„“±·½¸½P̤˜8pxû¿¼l½95·Es�àË6Òn´¯·jOž·K5JÀ‡²esÇmÙÇj½©hPj7q^-ÍÕ�Üq˜¼ûW Í •9�LŽÄV­�?„,&±ƒOYîáÓ¢�b6‘È<¹NFì‚sž¤OsNŸÂv’ÊÒÝ-¼ó­ÌÖk Ë*�CŒõU$Ç Öí‰?…ìg³ÔmšK€/®Öñ�\ŽUÙ´¡Ç1©ç=ûqV®´x¯m,íîn'�ÚÏë!+¹Þ3‘»ŒrG8ð­(Ž©¥[êöñÅ9‘)ÐËmxœte>¼‘èA Ö]׃4ëÍïMš{²×s,ó݉�¤]¸mØÀá@ÀÅtTPxOJ]ZûP13µí°µ– dzN:�ª<…”É<+ ú5î•q©êSÚ]B`Û$ªLIþÉÛœû¶ã[ôP3ªèWš�Œ,î㸺´µ‹Oš&¸¶‘ƒ´‘�¸ ä­Û·PqV[– ’YËsc-œM SÛÈ<ÍŒAebÀîÉ’FsÎkvŠçÛÁº_’!ŒÏcO›N Žîå »d‚Kås“êr [oÙ½äWec‹Øl,6´lTœñœüƒ¿sÅjÑ@´�4i:|vIuqqCj5ÃÊ `.@>¾ôûû%¿¶òL÷Á–Ky 2‘ïßèr*ÕÏËá($Ò®ìWRÔ#{×/wt­–|¦Í¬Y �· 01Þ®Xh¦Æ+Χ8´ÜÍu`#8U�ÛŠÔ¢€(éú\t÷óDò3ß\ý¦]ä6ÅL ˜AëÞ¡—Ãö7 «yêò¦¨Š—±poqÇëZ”P8|"¢ð]E®jÑJm¢µ•‘âÌËí¥‰�;¾c’¤VÝ…�¾™a�¤~]¼#�3œîzÕŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯÷h¡þïãEqàð(Í4.kC1sFi¹£4�âCÍÿÚA�ØŒXß¿ÿÀ1÷³Æ=ñZÐù¾D~~Ï;hß³;wcœg¶iHRÁ¶�À`rùŒÐ'ˆ¯#ŠëJ¶•fd{�=Ä0¼­¶1¸|¨ ûæ>ÕÏ[Ao¼Gqkp©åÉ÷1i×FkÀÊW÷€Ä뻫r0+±½ÓmµN%võhJ…Q—uG嘌ñŽÀçžæÖÖ+e··M‘®p2IÉ9$“É$’I=sYÚ‡‡lõµ³I<2ݧ—4±¸,ÑãàB©ÎH皎wOšY´MgL]>åc(ÌÖey¤r呲@�“œúÏ {ëK I<èD–±Ü\M™Œ‘Ä>bU°0 ¢�áëÞ½*]Nšg–K`Í$" N$AÐ0èqŽ õ5~Òb7;,£U¹‡È‘!DxÁU…¾1“Í+Î^þÉ Ó´Hµ Jimà�–I­žmí°EÙrà —ê6ŸZÎÑ-l¦×tøåÑT–Gó¼Ë¸Úvd,¼0Ú¬Tn'wÌ;b»)<)¥K Q0» 3./%³d'vIÁ#'±ÇJd^Ò –9cûj¼lÛeà…Ú?‹û¼}8éE‡s Í.i¹¢˜‡fŒÓhÍ!Ž¥Í6ŒÒÙ¢’Š.isMÍ.i¹£4™¢�Åͤ͠4RfŠC’ŒÒPgESQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE×û¿�?Ýüh ,.i ð(Íhf.hÍ&hÍW¸¿‚ÖâÞ˜¡¸b±±)oî“ÐÛ׬æ²õ˜f½µþÏŠu¹I,ƒ+ŒsŽíè=yíWá�É‚8·»ìP»œå›©=ÍC¨ß 30ŒË!uŽ8ÁÆ÷f £=¹={ Öñ]Ði7éð2D®îbšl²¡Ã”- «‘è¥ñ-ëZ_i$›U‰dy™îî<ˆ÷*íU/´óó’?‡Ú°-nâ·’ Ú¾�<0Á.µÐy[pǃܚCHô%ee ¤FAë&ãÄ0A¨Kf–—·/ß=íáÞ±nç'Žx� K$¾±ó0Y#ò·�á PÀ÷ ƒÜÅ×–eÔgŸL±Õ Õ¾UŠht8g%p96¦Ðñ¡·ysù†óì^FÑ¿ÌÎ=qŒ|ÙÏÝæ�?Ä6úœª-í/|‡Ýå\´?º“‡ÐüØmþUtC|¾o fݲ†ØOåþà©?ë7ôéÎ:çŒR¸ÎŽ÷ÄYÞIk­åܱ(y…¬[ü znärzàdûU{¿ÛÛGm4V×v×EíÕ ;?Aó89úŠ­³è®¦^Âöî+ÇI¡’Þ?0’T£wîðOõªßÙW–žЭ^iãÔbšTŒnƒ!sÓ²çéÅoÇ«nìí¾É4RÜ#ÊñÊ@hQxÉÁ#’@=Ï¥Oe}öË‹ÄXñ´ÞH|ýó´Çl�¨5‘ys�♯.زٔŸúfåœÁ–²æÓ¤Š-ûNÊâòÉ£–[¨aBø¹�†ÜÊ9 eÀ=©ÕézŒZ­‚ÝÀ®±³ºàg*åOOu5r¼Õt½@hšDrÚL¶Q½×›o%£ÎUŒ¤¡hÕ”Ÿ—898Ͼjìúf©ekm§ÚnS´7Š´_7Ë#Œ’0Œã$ö 쥿òõKk�{MÊÍœlUÀϾKùúUÊ䥵ûF�â6µ‰™#³m:Ö4$$g ÷دüUøF‹ÍöKx&�n´�ÒJÛˆûJºf'ø�ÉõëHîŠà$²¾Öl†¥{as÷Wö‘´Y^(Q†ãÇ*7}0i.|>mâÕä´²¹[_@Öw�Š|²æ1é’ùÇ¿¥!ž�š3\æ—¨Íâ™ä�¦IéÖæ;'—dCoÊ$0+ÎIç5×7(Wí·¼Üý£>o#œìé÷;cÒ€43EV‚ÛÈžâ_>i<ç ¶GÊÇ€vgêjÆhÙ$H£i$`ˆ€³3Rj½†£kªZ‹›I|ȉ+’¥H#±~5•â–Ÿì¶É>| (3ÂSæ( Lq¹8ÎG#ŒóU4‹»Ë¯4æÏì‘˯—q‰qµ³$( �‘בŽ8€ê³IFi(ÚÑEÀ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠlŸwñ¢’O»øÑ@H< 3HŒÖ†bæŒÒfŒÐÑT5é4ñæ% $NËËF;6;�Î{޾µq$I#WF ŒVS�Aî(ôVv¯u5½¬QÛ0K‹™’ØŒíÉË6;áC¹´¾Ö¶$ñÞÜ:J’½¨‘¡q1NBº¬*WpðÇ\v;\ÑPÛÜ%Õ´WÇ*SêȬ�ný¼E6™mö¼�Œ©v̯rÉ(G:Et”f¹¡â Ãyý•åÁý§öÏ,�§g‘�þn3Ÿ¹Ç_½K ëwú¼�+ý�a„–ÊÌ'·#8ñè?.:LÑšãô¿j2Ť\_>Ÿ$Z‰Ç•n¬²Eò³n9c�6óÓ¨©‡ˆuEÓ\’ÞÔi.CyYo9b'ó÷sÈ;qÓ½+ŽÇWš+Ÿ}OV½½½�IŠÏɲ)Úà¶e“hb«�º@ÉÏ=ª•ν«Mk¦_iíb–Ú„ÑÂ±Ï ³ÆÌrC€pTŽ”\žâÎÚï`¹·Ž`™*$PØÈÁëìjÆk »×Öá°–X‹Ckçܘ“ ì͵’Êǯ¥Coâ!Žk‹û�±Ïs"ZF±–b‰…$‘�Ç>„R ¢¹Ý7ÅÏ Y_êS$rÜïÚ±F͸+�£'“ïZ+®i­Ì«v†;h–yX€Œ¥ƒŽAôÏJ_Š(áM‘F‘®âØEÀÉ9'êI'ñ§Ö%ư±êEÌÆ; [#urÅ ?1ù8ÆG çzSãñF�*ÈÉz ÆP1ØØùÛj‘Ç*O‡ô€Ø£5™y¯é–ËÕÐ�¢dWÊ1 \£ c'iÿ$T1x¯DžX¢ŽùKÊþZ©F6p²>RO@qšC6³Fk4ëº`Ô¿³þÔ¿iݳnÓ·v3·v6îöÎj×Ûm †ûT82y@ùƒ—é·ýïn´c4f¢Žx¥i9QÌmµÂ°;[®¡äT”fŠ­}{Ÿg%ÌÙÚƒ…Q–bx rNõ_LÔ¤½óaº·û-ì$y°o߀yV úú‚;P�%”ÛÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÉ>ïãE}߯Šá�àQšh< \Ö†bæŒÒfŠ©g%øŽ6ËSŸ=W†�v\öœ÷==jÚ*ÆŠˆ¡UF�€¥P&½k{5æŸ=¨º)‘˜Z˜¼Àħ÷¿.0\üŠÇƒH–Öçí6úv± üþö84Ånzòk³£4Xf~ƒm=–‰mmpxÁP‚Bn;AÇ €qÆzVv½¤jzÂËi�9­\ƒÒ# ­úd¯PO"ºÑšË\‹âOí0Ñ”û¶¹}Û÷dû~5F=S¸Ö­/¯�‚5®ìÍl¬$œ+†ÏAÎq“È®ŠŒÒ•Ò<&ÚAÒæ…,ÄñÀm ”ó¸d°8댂y§�êm¦¦‡%Å©ÒP…ó0ÞsDBcîç€7g§jê3E„ún­e{{&“-Ÿ“zþk‹€ÙŠM¡K.>ð8÷¥´Zn�ek"”°¹Žgi †ÜxîKf·)hŸÕ ÖŸ¬]^ZÁ$ÏuaåÆ#BØ••3æuÿdÒ�òÂãO¸ÒÞÝÞÚÓìn—%€+•;�œäsëšè3E!œl~½†×Ne–.m¢’\Í2´›Á ˜`}ˆ#òÍYºð›¿ötv¦-–%‚ö-ÌÁãW“’y 9=×UE 9ÖÓnu=]|«�E¥Ž10+µyiž2ÆîŸÅR]øu¯¯%34g—LûNàÛ³¸qÐ:ߢ�œ½¿‡5°ÚµÜöòjQŽòê@NÖ À Æ~è^¸ç5,þ»–×S‰d€5Ö¥âO¦2Aã¯È1Íty¥¤+…$ƒXyXG=£^ÀÏw2²1mßêÁØØ=æ tŸbµ ìÐàIæ�厮ï÷½úÔÔPc†(šFŽ$C#nrªæé“êxúJ(#^Óîï–ÕìŸlÐKæf€pFyŠ@zú zÕ]7KÕ“XŽ÷Q›ÌòâhÔ‹”n8!`�#Žç�JèhÍ™¢Šî(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠdŸwñ¢‰>ïãE80xf�tf´ vh¤Í  ÝfYí-…üª‹|—†C…™N>\õ è}xïZÉæÃ›7¨mŽ0Ë‘Ð�Z†{Hn'‚YT±€–E'å ýìw#·¦MXÍ2õ³ç%¦ž ÿL¸Tp3‚î>„.ßør¶ºDw*Åc$72¤Ùÿ‰`�m\dÆRAž0Þ9ÍtúΊº¬¶ÒŸ²³@»¶óã;±ÎÝÑ·ƒžæ³ÿáÿ§oÿà›ÿ¶Ò`�í:ïíÚmµØó¢W#БÈü+�Õ5›È¼E©iË5ÌVòËn’]JÚ£(o÷KŒöäö®¯K°f�¢°`…ŽUv�–-€;œØQÉ¢ÙÌú‘”<‹¨*¬ÈÄ`»F8ã�Ö�˜s‹ø5s E=ɆîE¸ŽäÊÅℬMÄç9 ´žÕ«áéå™u?6W“f£2.ö'j‚0zj±“7V—&yåšÖÝ­Õ¤`w)*IlOÊ* }ZßKq§~‰,ípð�Ë,NHû™Çã@¼:ž©§‡®¢¸žr�\ÍqrÆtWPAõ!I#ÜV摯Y¤z�Õæ¥Û5ù[y&— ´Å¹íÉ8÷«öZ ­ƒX˜¤˜ýŠ9#�q‡ œñì1Ò¥Ò4kM+ˆ¬÷ˆç�§*Ĥ€0¼p8P3‘Õ®ïN£¯KlÚ«µ»F`– ƒäB<¥bY7r:’œÔúÿ‰c·Ö¬ä‹SX᳎)¤‰dÚ.D¬ï„Ë~"·n<5 ÍÝìÿÚÑ%éx"uT|(\gnáÀìjÌ�½¥õ²‡h¯3æ#…Ø(ã P¤zG6»«êj÷÷vÐÙȰô¾_%oï}î㎕‘«ë7¶Zö£§¤÷+ ‹j�wÕmPåYýGO¯jß>· 7·öò’d†P­2¨À/Æ3Žã¬®‡fô°’D¼…!•$mÃj‚=s‚rI4[Mi#ñ>£hg™á†ÒÛËY$-�õ€žOS�“ßÍ%ì³Cááwuª¼rÇvÒ I%29»IÙÉüWLÞ„¬/ïâš(¹ž9@y#|¸8çœÏZµ‰go=„°ŒXÂð€ü»[nsÜŸ”wõ¤-›_Ë&‰e¨°óÏpÇ÷†8Ïîƒã¿Ì¤ÿ»õ©†¨Ðjw‘@nn.î…�¤[ö‚"±-Øó3Áè+OT²¸žâÊòÏË76²6„…deÚÃ#ð?…Bž‰ôk9¦•'µÃ­Ä µÄ˜;˜;å¸#½1m|M&™m©K¨(j­PËrGû´8Þx 9=;ôæ´´ï[ßIx’8d)™f«$x%A%�öµ&¯£Á¬ÁW µQ·ÜÅ'8ô‘ªé~³Òo>Óåö•ÇÙmãëïjZÛÍRP#º¢Š(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÉ>ïãE}Ñõ¢€8ÐRæš¿tS³Z‹š3Iš3@]CÈÜF@Ï$“KšÈׄM ;7ÿh†?c1c~þÿðïgŒ~§™äÇçlóv�û>îìsŒö b\ÜÃin÷¸H�e˜ÕøH, ‚î%$ óYM ú³ ñ5__»Ž;�2ÚE•‘î<çBò±�ÃåPOß)\í¬(&ãOhÃÇ4w7Ù\´—@~ðò|Xâ•Çc¾ªòßYÛÏ]AÒ}ÈÞ@¾€òj¶‰v׺%¤ïŸ0ÆL‚õù[ƒÈäçu£m§êަ�§ß!Ø/,®1æ.ÐØ}qƒ´ŽOzë>Ýiö´}ª'vÏ3Ìwgn3Ó9ãëDwös\=¼WP<ñýøÖ@Y~£¨®el¿â¯û)pº~?µ|¦ħäçÛ??Ö ÒÛK½Óìâk BÚs'Ùn¢Ï�å,wúŒdn÷ÔÚêÚmô†;MBÒáÀÉXfW8úR û3vmÜära ÿ÷ÏZà´ºš?A46¶ê�µÅ´èIy˜)_,œ ¼6â9È7úü ¶þW•ý±½6ôó¾Õ¼gß9Î}½©\gqqgi"Gsw/'ÜY$ [èZ†çZÒ¬§0]jvpJ0LrΪÃð&°mÿ³?´¼Aý³öo7ÎûF?ãßbíÆ{gwNùª‰·‡|,×Qæcy&EùŠáöƒøb€:ôÔ-%kuŠâ9>Т1�ÁÀêAc‘ùÔ�ÜÃ<“GîhË“ƒò¶cò#ó¬`ñÁâ»É%ÂEo§FÉÇ ¥Ü¹ÿÇWò—msx�ciöÕÓšòu ¦dVff`|±»Ž ÷À×Á<70¬ÐJ’ÆÙãdqÖ¤¯:Óu]B F°²gE–¥3D"ÜäHF˜ÁqÎN2z}kJm{X´„GrQo/í#û¨R©9`Œ >e~§ŒÒ×=Ô)u³>&•Y‘py ŒŸÔ~u5r—÷E®êPÌLº}ŸÙ¡”¨ûáw»cêPtÇËPÜ_ë¶²ÜÂ·ÂæQb—è ¸Úÿ<`sÁò=h²Í®6}sP½kÓ¯vw„6–ìbVpw·¿Ìq×øiŸÚzÕ²\Ï&¤²Çc©GhÈmÔ•Šd±qŒtïš@vÙ¢¸Ë}sZº×d!û´Q'ÝZ(Ï—î�¥.iî�¥.kC0Í¢ŠRÁ¶�À`øÿ"ŒÕyï`¶žfb†rU�”·÷sØžÞ¸5b€+^iÖ׿6˜H<ìx¦x˜g”ƒƒ�ǰªßØ6óÛQÿÁ�ÇÿV5 ß°Ú„fW,±Ç8ÞìB�žÜž½…b\†“}Œ"Ww1Í.J¡Ã”- «‘è�ΆÚÚ+;u‚Ûç$œ“’I<’I$“L–ÂÎ{„¸–Ò 'O»#Æ /Ðã"¦V ¡”‚È#½f\ø‚ÎÕï–Q.ëC�#8ʪ òONÔ¥äÅçùþRyÛvy›Fí¹Î3×íQçÙ[ÎóÃis?ß‘#›ê@æ³Ïˆm–ÖâW‚á%‚u·krÌ.ØÚ;�ëëWlu¯ÅÁ‰]|‰ÞÞË/R9é@-•¢Å bÖ4J#ŒŽ…Gn½¨6bìÝ‹XÉ3Æÿûë­fCâ�>WÒÔ‰£þÒßä—Q€T�†ç‚Iã­hYj_=ÚF® ´æÜ,[#ž˜a@ÇÏcgu"IsiÏÜi# WèOJ–Hb›g›Iå°tÜ íaÐ�CïX÷^'·´º¼‰ì¯Z+"¢âáJ&T6~öì`úU«ÍnÒÇP±²—y’ð‘(ʯL9ã$€=Í RÑ Ôäß$’ǘ^ <²øÛ©ÈöýO­[¸³µ¼EK›hgT9U–0ÁO¨ÍQ¼×`µ»{Xí®îæ�CJ¶Ñoò�黑Éô>Ô“x†ÊÜÞ‰D«öD�›)Ë™3µTu,qŒ`rhäšm„¶Ëm%•³À§+D¥AõïRKV0–·„˜9‡(?wÆ>_N=*½¦©Ýì¶žLÑMQÊë Îò6œÕøJmÚ;·±½¸kÅ‘£H•7‰Ëß¶i§o§[Ág-«/�®ï ˜Þ]‰9ãs�¥N-à „1‰ByaöŒíë·>žÕ›½oq ›[Æî÷7�¬…s¿pí´)ý=jÜ7¾~¥uh±ü¶Ê›¤ÏVl�¸öOü �’%…œpEZ@°ÂÛã�cQ³œ�ŽIæ”ÙZ2È­k Y$¸1Œ3Œa�©àsì*+F+ù.Ò5u6³˜p°Ul�o˜UÊ�¬,ÞínÚÒ¹^Æ0\À±š±Tï/~Ë5¤+™%ÌÞRŒãib߀SúUºZ)(¤vz‚*^ÚArŠr«4aÀ>£"¡µÑô»¼ëM6ÎÞ\c|0*6=2[’DŠ6’F Š 31Àw¨,5 ]NÔ\ZI¾2HåJ�Gb"˜‹4QšJïh¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€'ÝZ(“î�­ç«÷GÒ–š¿t})kB¢’ŒÐ~¯ ·–ß`Že¸<®2±(ïŽíéïÏj½ ~L)÷}Šsœ±Çr}iù¢�#¼k[Ý,“l±,�35ÔþL{•p ¶ÓÏÎHþj¶ºŠÞHwjºDÑ@G šÄ{@`Aä@õîMw”P33Ã’¼¾²ó0YËÜC%CÜ2pkŸ¾Ñ/'ñ«ªÛ‰…Å«C-¢0"9X'Ì=É\öÍvt´ÍýŒ^ø«MÔ¾ËqOhÒÈ …‘ppìÀ;Ž¥-á²¼¿´žÎø<Ú„®Ž-d1•cÁߌcÞºJ(‡²Ñ&¼³Ñ-.mç‰E¥Ò»” ÂåСö9JÐðý¾¶Öz�‘£²¼kögi­Ë¬€F‹¹Fåà�H5ÔÑJÃ8=NÀË©k©5¶­$Ó´fßìé'“!(Éþ7wT×zV·« Bñ¤H'Š(¢�Ü“#Ä›�îBFpsŠíè¢ÀsW—mÝåÔÚeô‰¨yw1ùP–eo-TÆãª�G~9ªWº%ê:”K<Eo5¤oþ­å’bG+Áãq®ÖŠæ#½š×W“U}6ý¡¾³ˆŽÏˆ[(ËÔ}áÏN*�¶‰|²øz{«VŠÞäÍ-¸Ëfdm¤�G¨ü8®ÒŠ@s’XÛèú¶ˆ°€…i$l“#€Û˜ú�­Tf·šëG³½’Þ{‹KËÆ»¼‚%%Þ&F ŽHG‘í]eÅ´qyw¤±ä6×\ŒŽ•*ª¢E ª0PŸfÞeÝ%­�Ä'U2½»Û³3Cå(»Ü .ìpolU¥³¿Ò4ë]RÆ+‹©ãi¢ f‰„n2ª–!UžOšî(Í9íÁmµ(mÞš] ˆ·÷¦�îsõƒÿ­Xtï%mí·�öbÇ/.L¹|ü|ØÏAV’(ãgd�U¤mÎT`±À>§Ÿ@ˆmmþË'Ÿ4Û�Ÿt­¸Œœà{€Tô”P‰Ú²Û¤pùÐ4¹ž’Ÿ1@ÈRc�ÈÆr9éš«¤ÝÝÝx�§6eŽXˆ�|»Œ; ml¼(#¯#q]5&hi(¤ÍwôQE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ “î�­I÷(Î×î�¥;4Õû£éKZ-”¹  Z…ì–9Ì&KPH�—–Œvlwœ÷jÚ:ÈŠèÁ‘†U”äê*­õ£ßá2ìµ9ó•xieÏa×>½=jÚ"¢*"…U €£«\Í´QÛ°[‹‰’ØŒíÉäã¾1ü+žKÝgjL—³²J’½¨‘¢a)NB²ˆT®à á�kk–·³]ØOl.J@d,-L^`b÷¿.0\üŠÈƒI–Öãíú~­üþò8tÕnzòh×[Η6ÑOÊJ�Ôû‘X¾"ñ-¾�ev"•ú(÷¬e”Óq û‘Wt;iìôkk{€CÆ €Ä'h8ã!qœqž•‘ªèœñjöÖRÚy‘ÞZrÁãm¡qÀ9(úg¡  ©µ­>Þùlå¸Û;2®66€¶0 ÈÀ&©YøªÂéoA,+m1�-üà >^¤Ÿ»Éªz¾…ªê7sbâ·3E$[å‘LaJ’»Êyî9<ãèù4�b/·Eg=²Ã=ßÚA2:;�Ñ’£å}às@Ë—šÔsé±I¦Î —7 lŽT‚ŒOÍ•# € Á-Ʀ Õ¦αYZ[ 'fݾ^zðð?¼+tk½3Oiå #Ç©­öÈ ?ÈT#›’@,}ñVŽ•q©iwrÿ¨»žð\Æ&S€#`# :àªÎ�Yx–ÞæûT/*%�œp¸‘Ñ‘�mÙÈn{ qß½]·×´Û§‰"¹ËË!‰U£e;ÂîÁpqÈÎ3Ú±®<9¨êM©K{-´RÜ‹v‰`w!Z&c†<ŽFåË××Ù³”H!ÔLÑφæY—r}ÝÌüã¨àt4£}ª¬–Þ^Ÿ7ïÞímmû¬_¨Á†>œT�ø�Ižímc» 3HÑØÀoRA\ãàñßµQÓ4¹mol-¤ ÉelÒ<¸;džBw{ãÿ}ŠlzÒYÛBd‡tZ£^±ÉÆÂìØuÃñ  A­éÍmmp.3ÉaÙlOÈÀSœúUTñv†ë¹oÁʇP#|°ÿdc-ïŒã½UƒÃ“Å©ÞÊeˆÚ—ìqó˜Ú\'Ž9c³šÃD¸µŸDwxH±°kiv“˃+ÇO”õÅ]Ÿ_Òí­íç’íLw ¾"ŠÎY½€ Ç<žÕŸ¨k÷I%äºz[Íian—³’LªÀ¶ŽÊ3“œäVt~¼‚ÞÁ–H¤ž cm*}¦hT�Å� ˜=úÏáVæðÕÔpMk§½´6·–±Û\+&  ©)œçå8Á=‡4€Ò—Äú< oÊ¥�òî©'‚9|aT‘)çNoâšÏ°ÓïµT¿µÝl–ÚòÊï–ó~Iwmä�Î ¹‡o"¿·wkA½ÓÜý­C}¢@ÅŽÆãçäð±¢^Ëy§pA¹†G‚f�©?Ž3øÖ�dø~)NyåVF»žK�Œ0U]‰P}öâµh ÛȬ,ä¹›;Ppª2Xž�Ü“€>µ_MÔ^ó͆æßì×�‘æA¿vû¬×ÔÚ ×,.ïVÕìßl°KæfÁæ9ëéÇ­UÓ´ÝU5xï5 ¼Í‘´`‹•n8!`LŽ;ž=( ¤¢’€=Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’}߯Š$û¿�€ó¥è>”êjýÑô¥­LÅ¢’–�…�¬K=¥¸¾‚uQo’ñ9Âʧg³z^;Õè¤óaI62oPÛ\a—=�½ ò$q´’2¢(,ÌÇÔ“U-õ�.òa ¶¥g<§¢E:³À«®D·GO²”¿Ùî®)‘¦ôòdm¤‚2¢¹©%Ò®-õ9´õ½Öïyæöfã0-Ô‡+ÎxFÔ ï(¢¹}SOωtè–ûQHîüö•òEPÀ�Ïjêh®òK“«kP[M¬=Ü-Ùˆ^F‰O”¤oÏÉדŸzÝÓ§¸m[\ŽyXùB«¸íBbí¹ÍzŠâ'{ÓàË AgÕ$¹û�ðÍ…FÆ|ÉÞaë÷¸*[ûë¹cկ㿔6^mŽBP;Ä8ç¥ÙRÖÆhüa§‘sqå\[LÍ�Ùƒ·×“Ö ŠòXô}cQC›™î¤†ž…[ÉŒ~`ÄÒ¦¥®/WÔ®-´ »-2Ýŵ‡—l÷bmŒmÎÑÔõœŽ§­^¿ñ•¥†©-¡X™ uI™®_-�¸‡–#=;õ š–°âñ • ‡ì¸»’õí^3îlÉ/œr6àôþ *�öÁ°Ž}OÈ}ºñ£G’O.8ã@UK6*Hãø¨ª¢¹­O]º{KÈ,¬‹ËŸ›q ¸ !ܤ�¤˜ðO9¨åñ+é6Ÿ,ФÈm#–G{•Y�’ªrX޽ºõ §4¹¬ A¥Oh¯Ôâ)üÕxCâ2dƒŽçëShìbÔ5k“7HóØH¡Èÿ¾‹~t€Ù¢’Š\ÒfŒÒPÒf¨êw¯i¤$»�¼¸#= zŸö@É> Óî.­®Î›¨MçJWÌ‚à¨_9ˆ8 ¤þDZÕ¤¢’˜�C¢Š*J (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€'Ýüh¢O»øÑH9^ƒéN¦�º>”µ©˜´QEC5¤7Ã,ªXÂK"“ò†õÇr;zdÔõ�Št©£Y#{·FV[È#Øì©—^ÓßO¸½I$1[¸Ž@au`ÇXŸ˜~t†I©Û\ÌÖsZ¬O-´æ]’¹E`ctÆ@8ûùéÚ²¤Òõ&±Ô­!°ÓíÓPÞde»b²$/”3Ó8Ï'<օLj´«MJK ›È š4W&W >làrzñŸÄV¥ªÏaÆ¡izìâKPá#pç�j³K@жÖZÞ^\£9{·WpÄ`¡F8ôVûB‚öêK�sulò Žo³ÈJ£8 Áõ<ŒkRŠe]x~Þæ5‰.o- ò„ á`ƒŽ8ÈÁ¤¸ðå�Ä¡³4QHä‚7ÂJ©÷C vöÇÖ¥  «�\jñjGR½I"ÈHÔDZTãrò™ÁÚ;Ôè× }·ta[Ö¼'q%IÛŒc‡%¿*Ü¥  [ß Z_=Îno!ŠåƒÍ RŒã6<ð=Ž*ËèÑ�Aï!ºº·i<±Âà$„`d‚8qŒâ´ih"ãCEÔ.õ[6#P–Ž0íûµrÝ€2Ê ŸAR¶Œ‡Mµ²ŠîæÝmã†�€Ü1ŽAž•¥E!˜má;ŠÞ{»hÌÞE†\y¨vAç“ÈÇZmÇ„ìî"x¾Õ{r[%´‹€yŠ …'Ž£=°q[ÔPEæ€//íï?´¯¡{õI�jäm=PžG½YÓl¤·–öâ}¾uÔåÈS�¨?ï•êM^¢€ŠJ(sIFi(†­¤A«ÃS¶ÕFÜ?sŸ¤ˆÃòªºg†í4«¿´Âù}¥qöktëî‘©ýkf’€’ŠJz-QRPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÉ>ïãE}߯Šó‘÷GÒ–�}Ñô¥«3ŠAKL(¶št²·6÷w,ÑØ¢[m•g}™‡è@SŽÛ�_Xn.ôw],]�·Ñ2ˆ•>P°EËîàcœs×•ÛØèv:~Ÿog Cm¹Ý²�ÁðFüãï`žjü7`axî¼ÛÝóœÜ7Þm¡y ‘…b¦Å\â.-žææÞÂQkk$fh„Âhç8¦G. #zôR;rzj(¥Ô+�7rúÖ4þÓ'7‰Ê’‘NÈ‹… @vã :ƒ[tÐQLBÑ@¢€ (¢�‹E%- ÒÒQ@ Kšnihh¤¢€“4QHŠ)(i(¤Í’ŠJ-%™ G¢Š*J (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ÿwñ¢‡û¿�€ó…û£éKH¿t})kS0¢Š(h¤¥ ¢’–€ (¢�…-%-QEQE.h¤¢� E% Z3Iš\Ð撌њ(¤¢�¤¢€ 3IERQ@‘ET”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE5þïãE÷) ó…û£éKH¿tRÖ¦AEP@¢ŠZ(¢€ŠJZ(¢ŠfŠ(h¤¢€ŠLÑš@-”PÑšJ(fŒÑFiQIš(sIE%-%f€ J( I¢Š*J (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ÿwñ¢‡éE!žn>èúRÒº>”µ©�´P( Š( –’ŠZ)3K@ii( ¢“4f€ŠJ(´RQ@ Fi(¤š(¤ÍŠJ(sFi(¤E&h Š)(¢ŠJôº(¢¤ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯ÒŠ¥†yºôJZhû¢�Z™-%´QEQEQE´”PÑIFhh¤¢�‹E%fŠ(Í )( Í%&h bÑIE-%R¤¢Š)3Eé”QEIAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_¥?J) óa÷GÒ–¦´µ’îAxé’O@+KûþžñÏþ½is+3"ŠØþÁÿ§Ÿüsÿ¯Göý<ÿãŸýz.‡fcÑ[Ø_ôóÿŽõèþÂÿ§Ÿüsÿ¯EÐY˜ôVÇöý<ÿãŸýz?°¿éçÿÿëÑtf=±ý…ÿO?øçÿ^�ì/úyÿÇ?úô]™�Fkcû þžñÏþ½Ø_ôóÿŽõèº 3#4™­�ì/úyÿÇ?úôaÓÏþ9ÿ×¢è,Ìz+cû þžñÏþ½Ø_ôóÿŽõ躙�š3[Ø_ôóÿŽõèþÂÿ§Ÿüsÿ¯EÐY˜ôVÇöý<ÿãŸýz?°éçÿÿëÒº ÔVÏöý<ÿãŸýzOìúyÿÈýz.f=±ýƒÿO?ùÿ¯Göý<ÿä?þ½Œz+cûþžòÿ^�ìúyÿÈýz.1³Elÿ`ÿÓÏþCÿëÑý�ÿO?ùÿ¯EÂÆ5%m`ÓÏþCÿëÒ`ÓÏþCÿëÒ¸XƤ­¯ìúyÿÈýz¥}¦Éd8Ü0hÐ(¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ý(¡úQHg tŸè¿Ö¶«�IçŽí­æ0=åÌp†2‹µØ‘žä.Ö¥Õô±}†XuMP#\Ç‘µôŸ8s· ç‚3ŸN:U=É[<³EM,Ò$q¯,îÀõ&Ÿ^uâÝBú/ßZ­ô²]C{öHöÍÊá_æÊœ¤äŒr¼Ó'’ õ>× è—wS(/u¨I²pÀG�(Xp­‰�‘Hg£†RH:Œô¥®'ÄÏs&³ šli“LùZÖW‘§]ØÚÉ´dƒœu8'ל:m¶­{y¤é÷=¬zkù·O6ø`Àäy‰‚pc@�¾´1G(ºƒË•KFÞ`À2H=ÀÔÈë"+£FVS�G¨¯ ·º´¾Óô¥»[#"XüÒ^ÛÛïËP ¼± Ë�Çææ»[Kɬ¼¥]ÙýºÖÜ#‰F‘®Ì‡Ú„„òÙ$g>Ôß ˆLÆ4fUê�†áÆz}*Jóý'FºÔ|Ku%棩Ãq·»T¸†ØIÎôä¢�GÊyšô (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*–¯ÿ É¿à?ÌTrëZ\Í ÷ú6Ð^7c••{í>£ºõéÖ™w<—:“K@[#Ÿ˜.áŒúví@mQ@Q@Q@Tmq \GnÓF³H¥’2À3Œ�;ã#ó  (¨å¸†õ²¤|gæ`+?ø^Y8üC¥»± ª·hI' Ðå•wâmOº{[ÝsM¶¸LoŠk¸Ñ×## œŽ5nÃS°Õ`iôëëkÈU¶4–ò¬Šã*O8#�zµEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_¥?J) átÛ5;›{…%ÆX«+ �ÀŽ„–o ý¢Xd›ZÕà9Œ—�å8Æq³¯=zÖo‚uÛmKLŠåd\L€1'î¸àƒ]‡Z©+2"ô0µ[Ë¡Icg ¶°ŽY‰'sY‹rrqɪ7–êþu–T6³Es¾mÇÎi&Ú:`Q@9Ϻº)s:φo5;ãs©$ì«jex$ùŽpy;IÚ:ÉÏ~] $ÔKämE¼öìN«„~ÁõÈô­z(ˆÿ„æòÒÒÚïP–Ù-¢P ¥ÔÙy|­´�«´óÂä�9ŠÐ¸ðþ­q¡Ç¥&¡odŸ>WÜ;a�L�‘Ó¡-ŽÕÓÑ@ÝÆ�©‰!šßUin<›™§Ǽ0+° üÀöŽMt”Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ’¦ÙæÄ�±ƒ®åk„z««ÿÈ.oøþ„*íeëWQ­£@Ž`h­¢Š(¢Š(½õ¬7–S[Î¥¢uÃÅsøŽk‹±µ†ïà•ºN¥•t}à#‘#¥vwö0jVokqæùOŒùSÔQ@ æj7Ÿj( yö£Ì>ÔQ@˜}¨óµRóµaö¢Šaö£Ì>ÔQ@˜}¨óµPæjO0ûQE!‡˜}¨óµPæj<ÃíEžaö£Ì>ÔQ@˜}¨óµP0óµaö¢Šôß9½sz (©yÍè(ó›ÐQE'œÞ‚�9½Pç7 £ÎoAEyÍè(ó›ÐQEsz <æôQ@œÞ‚�9½Pç7 £ÎoAEyÍè(ó›ÐQEsz <æôQ@œÞ‚�9½Pç7 £ÎoAEyÍè(ó›ÐQEsz _9½Pç7 £ÎoAEyÍè(ó›ÐQEsz <æôQ@œÞ‚�9½Pç7 £ÎoAEyÍè(ó›ÐQEsz <ÖôQ@šÞ‚�5½Pæ· £ÍoAEy­è(ó[ÐQE/šÞ‚�1½Pæ7 £ÌoAEy�è(óÐQEcz <ÆôQ@˜Þ‚�0ú ( óµaö¢Š<ÃíG˜}¨¢€0ûQæj( Ì>Ôy‡ÚŠ(óµaö¢Š<ÃíG˜}¨¢€0ûQæj( ó £ÌoAEy�è(óÐQEcz <ÆôQ@˜Þ‚�1½Pæ7 £ÌoAEžkz <ÖôQ@šÞ‚�5½Pæ· £ÍoAEy­è(ó[ÐQEkz <ÖôQ@šÞ‚�5½Pæ· £ÍoAEy­è(ó[ÐQEkz <ÖôQ@šÞ‚�5½Pæ· £ÍoAEy­è(ó[ÐQEkz <ÖôQ@šÞ‚�5½Pæ· £ÍoAEy­è(ó[ÐQEkz <ÖôQ@šÞ‚�5½Pù­è(óÐQEcz <ÆôQ@˜Þ‚�1½Pæ7 £ÌoAEy�è(óÐQEcz <ÆôQ@˜Þ‚�0ú ( óµaö¢Š<ÃíG˜}¨¢€0ûQæj( Ì>Ôy‡ÚŠ(óµaö¢Š<ÃíG˜}¨¢€0ûQæj( Ì>Ôy‡ÚŠ(óµaö¢Š<ÃíG˜}¨¢€ çÚ�çÚŠ(Þ}¨Þ}¨¢€ çÚ�çÚŠ(Þ}¨Þ}¨¢€ çÚ�çÚŠ(Þ}¨Þ}¨¢€ çÚ�çÚŠ(Þ}¨Þ}¨¢€ çÚ�çÚŠ(Þ}¨Þ}¨¢€ çÚ—yö¢Š7Ÿj7Ÿj( yö£yö¢Š7Ÿj7Ÿj( yö¬�{U¸ÓmQàXË3…Ëq“�Z(©–Ã[œ„×3]ÌÓNåÜõ&Š(¯=�ÇÿÙ endstream endobj 36 0 obj <> /Font <> /XObject <>>> /Type /Page>> endobj 37 0 obj <> stream xœµVÛjÜ0}/øô\¨27É”‚eï†ò�ÖÐ(m �–Múû•½›Ågcï c¼;ŒtF3gÎhS �ü|è>AÐFóã©Ø�ÍEgyg|þY|o~`Á™™»ü~Éïcï æëm^•ÚÝ¿ç‡âfÝb4$`Ú_ÅÍí7dóðw»¾ìE0­‡hÚ§â#¤Oí£‰l]”ìbÚ&ÑuFth1„½êl}·j‹û)p˜ÃEDK2Â.%t0ÝÂ- •Ê’*eaOÕØBkí#‰ðŒPsŠ�Ȇ]œäV~¼?”ÎJ…ŒAÎÙŽüh;„àT¼®Ñö啳ˆÁëSºÃÛÍcï°>#<´AÕ!T Ò±VAR‰ËNŠ´Q¢"-ÉZYÖµZE•(t,¹Q–*‰Ž�X7‘èUÈ*fJIŸâœÖÆCí«±1‚Yëh["¶‘ºÆË6KNVÄ›ÏwLóÇÜ÷Îb£qv{g�ÔÕpçw·©5ísïØÒŒú“µðu b²ˆ*–HZŸd¬ÃjŽÎMˆÚx¥lb:~g¬üÄ´¶×“˜«¦9ᤠ?¢Üâòttbå…Òˆ.�ذêÐc‡ÅAr¢Sá¬N œÏŸ0Þ(’Ìb:ˆ•&°:»Ä&Í‘P˜@ç9F�C7ѽù˜/¥`T•*©ÃúB”+³ ú¹›Æð ;KœNû¢ž=©XP²&OЩ¸T„ÓQ»¤÷9K�ò©Ó) Ẹ̀⸞;yº[ޏŸŽ·óa<5œ?ž ì¢õ2�ÜÓ@’>ßÉÔ?ɦz±\~�|›VªY¬ÈI§BtÇ/P`j´Å]I9^Q;¿žÕ’Eã´ôú¤5¿Á¹ƒ4—ü‰p}š cOóèÁ¦]Òü[øîùºÌNà endstream endobj 42 0 obj <> stream ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ¤¶"ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ê¾ø++µ«Ó!žá3AÈ °{<:wéèiagíKH}` –Ö(#�Š@ì§Ö“¨ç+‘(ÆÄ?cµÿŸhï�GØíçÚûàTÔT]•dCö;_ùö‡þø}Ž×þ}¡ÿ¾MEadCö;_ùö‡þø}Ž×þ}¡ÿ¾MEadCö;_ùö‡þø}Ž×þ}¡ÿ¾MEadCö;_ùö‡þø}Ž×þ}¡ÿ¾MEadCö;_ùö‡þø}Ž×þ}¡ÿ¾MEadCö;_ùö‡þø}Ž×þ}¡ÿ¾MEadCö;_ùö‡þø}Ž×þ}¡ÿ¾MEadCö;_ùö‡þø}Ž×þ}¡ÿ¾MEadCö;_ùö‡þø,z}¦75´$ÿ¸)jÊýÁô¢ì,ˆ>Ãgÿ>°ß±GØlÿçÖûö*Å]…‘_ìóéýû}‚Ïþ} ÿ¿b¬QEØYþÁgÿ>�ß±GØ,ÿçÒûö*Å]…‘_ìóéýû}‚Ïþ} ÿ¿b¬QEØYþÁgÿ>�ß±GØ,ÿçÒûö*Å]…‘_ìóéýû}‚Ïþ} ÿ¿b¬QEØYþÁgÿ>�ß±GØ,ÿçÒûö*Å]…‘_ìóéýû}‚Ïþ} ÿ¿b¬QEØYþÁgÿ>�ß±GØ,ÿçÒûö*Å]…‘_ìóéýûÚ]”Ñ”ûieÍG.™* ®×Ýk^ŠÏÚÈÓÙÄç ààŒÛ˜‚¶/íD‘™T|ê2}ÅdVÑ—2¹Œ£ÊÄÀô`z Z*ÉÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐQ�è)h ÀôÅ�µÜF;ˆ#•ðºƒSQ@eâ¿.�2\[n6’�¡O&6ë�¦:} è÷Vñ\ÆT  çÖŠê†!¥fsÊ‚nèí×î�¥rWÞ£¡8këtŠ9™DfÜŸ”1-¸sŠëWî�¥p·†õ«­Béâ„Þfta"Ž $u>õË‚�)Iª�/S£ê(¯f�ÛK5Ä1©�Ä’*ð¤pHrk£¯?Ò¼7­Zê¯4 F“+»ð'¡ö¯@¥Œ…(I*NãÂʬ“öˆÉ²×í®å®^A ä¶«æL˜S$‘œvã°£Ô`ëí@kÖiº†¡yee ÷Hcɾ@o¨©×XÓm™uB·_ñîDë‰Üçæü+În4íFÒßBÓнÜZ[ÞD<™ jÅÆùAù[�[§#«  M­ƒ{fº“éz�œ0¢ÄöÉ$J€®ÈŒ@ÏÌ©' zjšz\‹g¿µYÌžPˆÌ¡·à¸Îs‚=ª¶^"Ò¯õ{Í*Þò¼´m²F$ROœsÆpxàñ\íï†n¦‹ÄÒ-Š=ÕÝÜZÊÅ7º¢D3œñ†Wë�Ö¶4ë«jó5žë[æŽd¹V\!XÕ ‘�Ù%s�1Í,~ ¹ºÖ.ìì´³qœëÄ¿hTub²¨z¨ 9Èèp iÿjiÿj[_·Úý¡˜¨‹Î]䎣ÎEsZÞ—©_ê¢[]!-¯’Tòuhn‚â À�ëÃ7†Ìî:Ö\zmΪúÕ•¶™ó5¯0ê%Ôy[6é÷‹`qŽ9äŠî×P²{Ö²KËvºQ¹ ©p=Jç4&¡e-Ô–±ÝÛ½ÌC2B²è=Ær+�m#[¸ñ �̶+[jrLÒÄñ,f&Io,w.íÇ®p1Ñ-ü?©Ÿ \øxØGÏÙd‡ûLJ¸�˜õîà·VÈïÞ€;KëKôg³º‚á¶³C p¡Çz±\¿…´{‹˫˨H£‡nT…,FÑ ¨ãqäóÏA]Ed_k?Ø÷„ê~\Zl€yw}6Ç+'¦{7CÓƒ�Òé7—š‚Ëu5¸·´r>ÊŽ¤JËÎ]Çlñ…Æ@òp!¾ÑN±|ÃTòåÓcÇ•h2VFÇ/'®@^ƒ¯'gÒ¬îôô–Ök�´Z¡f‘Ø™BÿuÏ|q†ÎHëÈÉÑ©m¿ãÖ/÷ò¨ª[oøõ‹ýÁü¨–Ö5­J×X¸†+Ø!†2»U ÞHÚ ÉÈîMð–Íå–Cm! VŸ®N*—‰|;¬jÍÌÖ�«C&Ý­æ(è t'ÔVT>ñy@;»´ËÇë^Í:XYS‹”•ì»Lç‰S—*v¿™êÀë<ŸMñyÓÖ}[BÉ‘Ϩìv2î»¶Fz2úŠï«Î|Gi¯�µõ¬ú——k ²¤qE/•û­Ê­å¹°øRK|ƒ 5ã±§¢ø½5�9¯Oˆ4Hf{C2Ù­ˆ&OÞlw-r×5…³ÓfKý% ì®Æ4€‡BÍŽì2ð`@ëgJÓÎ�íµÒL�oá«8dkt-&ñç†ÛŽKgúW7s¦kBÒÅuÔ-.–çΜEiy*nggg o6Ìe¸U€ÀϹ©øëY‹Ãz6®¢;E”�ÚÉçŠB\"�å± âã÷™%@ç5£iâ�nâõ›Î°6qjöL�a43?™lÎÉ”æC€Tð;Õ-f9„4Û¸e¹¸º†äB’=µÂ�¬HcåN³98ãqW8'Ìð½†ßé‚m9J„ÞO`.Äù0íe `c zt  ºŸÄ[¸/µ«H|µ–%ºH#ÝI ŠÊåC–9ebA^_Cžƒþ}VÛKy®´û6¾fƒÉ³Žè’I{¤p„I<€ pš×öšß\ˆ®w'Û5I-íã™LŠÂ �¼ ˆ0Ž3æ0Ér1Ñh£ÃÒhº¥£ÉaqðÆnC±"ÉÀR# ÎùääcðhÔ~-×ÏÚÞ ¬.\[Ûƒ¨Èª&RÛ±'‘†ÝÀêpNqVî|Wt�Á4�t×k§žÞæÖIš&}‘¨TÃ9ÜJàAÏjçıÏuu¦]jÞ&m[D±!Ðøv%á_²ýÐc�Ôóé{UÒÛZÕnm4¤Ø¿Ùšt°¤ÒInvGs#íÝ�èp¸Î2 ]Ó|MªÜkt{asm=ÛÚN‹¦\ZKˆaÄ®O@¿ÃÐ×m^sa¥Üi>'Ò`»1­ÍÖ­-âÀ·²]:D,š<´’Çæ^¤`d ôj(¢Š+ÿZþƽ'TòáÓdʼ豶9Y=3Ùºœnجkíë7Ì5SÚdxòlÆJÈØååÏ\€½^N6€O¤^Þj+-ÜÖâÞÍÈû,n¤JËÎ]ÇðçŒ.2ç“�¥YÚM�Þž’ÚÍqö‹T#ì²;(_î9ïŽ0ÙÉy:4Ï ]Þ7s;×ÿ¯SÕhdo¼�¿šÌ?:³U=ÉŽÇ3¨xÇFŠ÷KK}{Lò¤ºd¹ÅÔgù2“žðœúàw­Û-BËR€Íayoum¥à•]AôÈ=y�Cc%Ýî—22…´ºiœ7R 2G�ï—€5~¤ ®~UÙ+¨ìÄVû0U,N5Ï»ovoSšÚ�S*½ÑKEnb%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%6Bâ'1*´€ªÍ´Øƒ�ø}Gpže´±ùQ˹òä8WÈèx<¡úPwŸ®ÿÐ7NÿÀ÷ÿã5¥sUVBåVÜîÀÈüsØ_õ)øsþþÿöŠèíÓ˶Š?*8¶ \g*˜�ôJI��¢–ŠbŠI#I¢x¥ExÜea�Àõw›ÿÖ…ÿ@M7ÿSü)\f�‘Æ�Ä‘DŠ‘  ª£@èì)ÔÄ%gë7[iÛ “Ë‘ç†ø¨yU ñ�ã5£Yúͼ×:vÛxüÉcž‚dÁ%W ÆHSÖ“Økr/ì«Ïúê?÷îßÿ�Tš5Ä×:vë‰<É#žhKàÁ%d�ÆHQÒ™ý©yÿ@ Gþþ[ÿñÚ“F·šÛNÛq—$“Í1L‚T<¬à8È 3ŠKqô/ÑKEQ#$ÞcqQ&Òà Ù•�uâì¢ØÿkgoÙ3Æ¿»þy÷ÝøcYÊyÑ+í>ÙU�¨U0íKEQEPCÿ&$�Ìrï±@ÜÇ©8ê}êJ(¢Š(¢Š(¢Š(«E`*¿S�×Ò¬¨!@=@ ¢Š(¢Š(¢Š(¢Š(Æ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šã®dhuIÝz‰[ùšÒ‚â;…Êž{©ê*–«i,²¹SåÈÅ•»sÍQ©È$Q]*HÁIÅ� €2Nb Ë…ŸÇ™$òË÷݈ôíR¨²½ª-ÞÞ Š3•þ#ëT(¢µŒTU‘“m»°¢Š*„QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE5úQCt¢€;Åû£éKH¿t})kˆë (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ( �OA@\Ý~H‹RqIö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¥‡Þ„�ìÙ  4R+PÊr 6I%Ü߀ ÑU>ÛÿLÿZ>ÛÿLÿñê·ETûoý3ÿǨûoý3ÿǨÝSí¿ôÏÿ£í¿ôÏÿ  tUO¶ÿÓ?üz�¶ÿÓ?üz€-ÑU>ÛÿLÿñê>ÛÿLÿñê·ETûoý3ÿǨûoý3ÿǨÝSí¿ôÏÿ£í¿ôÏÿ  tUO¶ÿÓ?üz�¶ÿÓ?üz€-ÑU>ÛÿLÿñê>ÛÿLÿñê·ETûoý3ÿǨûoý3ÿǨÝSí¿ôÏÿ£í¿ôÏÿ  tUO¶ÿÓ?üz§Še”qÁEIEPEPEPE!!T³$ö®&÷â=¬7-¥‹ÜF§cK³?AƒÅoG V»jš½Œª×§I^nÇoEpð³?êÿ“?ý…ð³?êÿ“?ý…tfb¿“ñ_æaõü?ó~üŽþŠà“âZô¦UîVã'òÚ+³Óµ }RÆ;»W݃Œõ¸>õ�l%j õ#dkKJ«´ËTQEs…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ “î�­I÷GÖŠhLrýÑô¥¤_º>”´†U#¨vñ“lg|¦bO¶ëV£•e]Ê ãæB§ò"€EPE5ÜF…˜1ûªXþB©Ë¨¬R¡)!�ˆ^apAüFùë@¨¢Š(¢¹�M«Cá{ó¥Èm¶ZO<·jÀ4A°Uw1ã=€'®(§¢³ôí²0ê`4ð¹ŒN¤buĘt‘ÔzƒŽ1ZQET7GÏø:š¡»ÿ�gü?�GÐQU¯Ý’ÊFG(Ã0íȬ„¼™3‹™N¼Aþb¼ÌfiO QSšnêú°ò«dÎ‚Š¡¦ÜÉ?š$“~Ü`�ïéT¼_<ÖÞº– dŠEx°ñ±R3"ƒÈö5Ù†ÄGIU†Ìʤ$âÍÊ+—ºñtöך’�%žÓNºŽ îÀ:¡Ü«Œ’7ò8àdÐTßiš‡ˆåÔíà]3N–8ãe¸�eMƒù‹‚Io—8ä Öä�À^øªzÊàxöÚµ€“ì·BxʼÃuÇ£1Ú­Yßk—V37�â9!&(îÉ烹xû¼v=¨µ¢¹ñ´Ï{4ØWN“íÜ=ßï!$;ÂtànúàñUàø‘gqg{4pA$�XI}PÞ¤…‘ÊÉ´-¾aÇ=ùâ€;z+‘Ô|S¨Å¦játÁkyœo­÷Ü+NrN—ÛÈ< Ö—™®_ø>G‰`µÕå¶>IY|ÄGÊÙ*>½0=èrŠâlõÈ´]7Q™Æ®÷¶Ñ$’éÚŒÁœe±½äIÆA+ÇAZËâ;˜î/-.ôÁow rŠnT£ÆX®K��G#òÍtW+oãDžÙÕlƒß‹Å²H!œ:Hìž`"L—nI8ìx¼’ãF’?¼22 kÉ] »²t‚=È@-”€"�Û·2�ùA Ë·M>ùÞÕl4[Ëɬⶴû–±ˆ%Ye,ULŹܧrò}â€=³Í�Îò|ÅóvîÙžqÓ8ô¢¢¸…&†D–'‘у+PGZòï]Ï�å+¨À’ ë(’7¹E›i+ÂGå’Éû×ÏÌ3“Oðå¥Òxe­lRò;©´‡Û}%àrÀ(˜#W,«“Ÿº§§zôï:!0‡ÌO4©p›†â ã8ôäS‹(eRÀè ë^L·:-ųê-¬Á¡Ûoouâ)„¢.7«¸”ìf  ��œö½uw-žƒ§ÎâKµKGR„_“#©]¦5/¼–P²Èl2ýhÓ(¯"ŠßOkЩ¥i‘Ëk{¦Kž‘%Œ€Ésµ†$$‘„Ž9"½v€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€i÷z9¨ïƒñ©->äŸïšŽ÷þYþ?Ò€)’$�êMS´Ö4»ùš=JÎâTûÉ êì> ÏÖ£[ígKÒ®9²™fšd=%1ì ‡Ô|åˆï³Ò¬êÚM•ÖšêÈ�<(^ ÑB´  §¶?úÔ©ERÒ.¥¾Ñl/&@’Ïo®£³2‚GæjÅ÷v2˜€|Hüó@ çñÍM¯�­¸a³Óµ%q~fÛ{f}Ž p�æ„aÉ8�ÛïŽ}F*óy°ipÉ÷a_1³ b2_ Ž1žç •Y\eX0Î2y¤gTÆæ “�“ŒŸJæl"˜y~\…œ°�+>[æÆ\gç‘Ͻ]¿‡dû//®Õ×z·Ê6ºœã;}:} mÓ±¶Ü:�ßw¯Ò±ä7ðh’Ü™f’gBv¾Ñå¯'<È­P¯ ?oH”©U*|µT* È<Ÿëë@U²@Œ’‰T�õƒ7¿T”QEQEQEQEQEU‹?õÇýÚ¯V,ÿ×÷hõQ@V‹íã¹ðÔé4–I˲}ºO.T™£±‚•èzô4¹EyŸØ´ßì/¶nðŸöoöÇÚ>Çöåû>Ëåy{ü¼nÝûÌlëïÍv·ŽÛÃP$2Y�Eoéöûü3q/ØídÅÀd­´�š> ÛÀç}xf88ÈŽâ ¶ÒŸìí0§æŽÿsp<ã“íƒ^š®®×�·_æyþÅÙ?ó1+Óþ’|=>OK¦Çýò•æéÿä^¸ÿ¯¶ÿй3o÷gꎬ»øÿ#¯¢Š+åO  (®;âEŸÛ¼=_Ù×—ø¹ÝåZýáû©ÕÉë€vŒ3)ܸÜ;+èÿÅq¥ßÙ·¿ú2Ö¶è’ME’"b`77\SÁü¨Y¢iž• ¨:”à‘Û8?‘®+â ÒZÏ£9Öî,Ü]n[{xã’FùçU*ÌOðñÇÍëƒ\žŽ%71—¶ñ1¿žx¬à¾Û¼Ö€fo1~Ñ�»„Ür£j±½¾»Ô&¶y+‘ Xþf v ;Âc=·vÞ­Õ»ˆŠO N#!Á߯xõàøSä’8byeuHÐgc€ u$×�É&›c¯i…|Wo¦”¾xŒË 8ã¶x��êpN0Aàôjšl:¶Ÿ%”í"Ç!RLdò°aÔâ¬yÑÿ{ô£Î�ûߥoFŒ(ÁS¦¬‘œç)Ëš[™sønÎâV'–pº”É4Øa•eTQ·ŽuÏzm׆,¯//'’[€—Šž|*à#:cdƒ�Á†ÕÁt­çGýïÒ�:?ï~•©&TžŽâÃì·Z…õÎÙã�%•Óz20eÆ u4 Y›‘8–àbÿû@ a´K°¡íœs�ZÕó£þ÷éG�÷¿Já4 ê¶š™f†H„óHu/ÙÞ ãbξqäŒo#õ®‹þx•w¦I¨êÙÜ[µ°ŽIU¼¤#)Û’qÝ·VÏ�÷¿J<èÿ½úP ô;«‰%›Ìq-‘±t$mhÉÉíœþ4°èé�ý™%åäÑíÚ&ivÊl2Æ0?®j÷�÷¿J<èÿ½úP-¬øMŸDÔ…¼÷—ú�ÌI Éq2î6Õ (ÎzŸSWdð�•ÄWæîú{‰¼¿ô©%db7Þ�p6€ž‡=ó[žtÞý(ó£þ÷é@ƒÂ6;.KÜÞI<÷ uö–”y‰* @Ê@ÀùF1Œ`‘ŒqRÉáÈäIý¥¨-ä!”^,‹æ2±«ev‘�8ÛÆ8ÅkyÑÿ{ô£Î�ûߥ,1ùP¤{Ýö(]ÎrÍŽäúÓê?:?ï~”yÑÿ{ô †Ú o3È‚8¼Ç2?–�w1êÇIõ©j?:?ï~”yÑÿ{ô  +YðÊk:�½Ä·,°¦|ÈðrFÇQ°‚6¬$œp½1[^tÞý(ó£þ÷é@w†çÓntÉVé%k[[¨åwR ’Í"H_›•Ž3ÜV$ß „¶M»±šiXË+]éË(Y·?–C+"“Û&»¯:?ï~”yÑÿ{ô døVqá}GJˆi6Ò]PØÙ5²Ç,’OAR/ꉨXÜK«¤ÑÛܤÍ{³�=<ˉ?ðÄWcçGýïÒ�:?ï~”ÉꞺ¾Öå½I,—ö×ÝÊ¡R/,ŸÝ‘Ø”#ž™tI¨Ó¤ÚUÊŸßg? ïëSÝhZ¥Ý“jÒZÜD¶—V×Bxƒ‰J`(ÜÄp¤»éí½çGýïÒ�:?ï~”Í^xEà:qrÏum-Ì×—“Lþ\2yŠ«¼·}ÃæÏ5ÔÔ~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�9O –>€PöŸrO÷ÍG{ÿ,ÿéS[Æc�æûÌri—q³¢²Œíí@𖛥 +I$3Dþd3Ä@xŸdgŽ„‚ f]è:ž©g-ž£­æÚE*Ëkj"gífÈõ ôé‘]’Ü¥œKwäùê0ÆBt ™8íÓ'­JûÂ7–¾8 p3N¢€1N•xÐ[Ä“EC—æ¦Y˜c‘Ž03R˦=Å¥¼²¬=†[§@28Ï~µ«EcÁ£š9‚À’ K²*ñ‚Ù‘ù{TòéÏzÇíÓnŒ²(² zz“Z4Pivlîmžá%G‰’6eÃA1~¸©d¶wšÍÁ\@Ä·¿ÊG�Z¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ±gþ¸ÿ»UêÝœl r01�@袊+?ZÓ¤Õtß³C:Á*Í ñÈñïPÑʲ ¨# ”ò:Ö…ÌÂ5©nû_ö­§ö—ö�Ûüϱ7“Ÿ³}Ÿo—æçîó�ý}¸­}N“JÓ~Í4ë<­4ÓÉ"Gå©i%i“€ �9=+BŠÏ×ä^ÔÿëÒ_ý׈׻_Û}³Nºµ ´ÍÇŸL‚?­x�í…Ö�rÖ÷P¼R)Æu÷¢¾ƒ%œyeêxÙ¤]ã.„ö÷öðé’Z½„RÊÒ¶2Tã�»øHá‡Þ>ØI/­Þ6UÒ¬ã$`:´Ù_q™üÅQ¢½Ÿgßõg™Îí`¯Oøsÿ"õÇý}·þ€•æH�#„EfcÀ 2Mz߃4¹ô­Gr¥%–C)CÕrûà~µçfóŠÃò·«gn[ë_¥Ž†Š(¯—=ð¬ørÏÄú|vW²Mi/š [s�¬¿Ä¤tcƒŒƒ‚ Ø¢€9«ÏÚÞxža®§XU[Ͳ÷r¹(wNbBGBT{ç¥¢ŠÆÕô»‹íSJž­BZÌf’Y‰8V ªœ‚['‘Œt5‰aá FÃ[Mj«Hå.Á´ôWû4häy…2r$8Îà=6Œ“]¥Ì^øZHãÄW¾u¢±0YÚn…ÿ ³gs8ê:{w§M¡ëSh¾‘qªCyÍœ�ZÍ4E%RÊW÷Œ ŽBƒ]-‘y¥Ms Î¯]>f’PIË‘ü¼z¸<ö¨¼A¢O©Ics§½¥µõ½ÊÊn&ƒÌùB¸Æýþ™¹EsQh:¼Þ ‚ûUÔl® ŽÎ{m–ö¯0ÆsÌ�Ÿ¹í�~Ð7… +ái ±œ¼¢Ê7•’8ÑãHÎp§�ªqÁëŒòk¬¢€3ô�&*'òÇïeXüæ†d�PváGåZQ@Q@\Û[Þ@Ð]Að¶7G*Sƒ‘�}êZ( Š( JûDÖãñÛ´ø´ùàþÐø¸ºx[wÙ ±N#qŽ�ŸÃêK´SBc—î�¥-b åèÝ¿ç§ÿZ£—ÅA�9#�=7Ì1T©É»$K©»7è®sþïÛÿàJÑÿ ��÷íÿð%jþ¯WùY>ÚŸs£¢¹ÏøLl¿oÿ�+Gü&6?ß·ÿÀ•£êõ•‡¶§Üèè®sþïÛÿàJÑÿ ��÷íÿð%hú½_åaí©÷::+œÿ„ÆÇûöÿø´Âccýûü Z>¯WùX{j}ÎŽŠç?á1±þý¿þ­ð˜Øÿ~ßÿV�«ÕþVÚŸs£¢¹ÏøLl¿oÿ�+Iÿ ��÷íÿð%Â�«ÕþVÚŸs¤¢¹¿øLl¿oÿ�+þÂccýûü _ð£êõ•‡¶§Üé(®oþïÛÿàJÿ…ð˜Øÿ~ßÿWü(ú½_åaí©÷:J+›ÿ„ÆËûÖÿø¿áGü&6_Þ·ÿÀ•ÿ >¯WùX{j}Î’Šæÿá1²þõ¿þ¯øQÿ ��÷íÿð%Â�«ÕþVÚŸs¤¢¹¿øLl¿oÿ�+þÂceýëü _ð£êõ•‡¶§Üé(®oþ/ï[ÿàJÿ…ð˜ÙzßÿWü(ú½_åaí©÷:J+›ÿ„ÆËûÖÿø¿áGü&V_Þ·ÿÀ•ÿ >¯WùX{j}Î’Šæÿá2²þõ¿þ¯øQÿ •—÷­ÿð%Â�«ÕþVÚŸs¤¢¹¿øLl‰ûÖÿø?¬Ùþšõ©:5#º«³7(¢ŠÈÐ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠdŸt}h¢Oº>´SBg: 󻛉.®iX–sšôAÐWžÚ]Igp%Œ)à†GV¨#Ò¾ƒ)_K]?SÅ̺kúQZW7Ö‰ç@ñ ¹•¤!˜î)þï¿SÞ³kÙŒ›WjÇ™$–‰Ü³¨X˦ßKi3#I”$Ž@=þ´Äµ™íd¹TÌ1²£¶G³�äk­Ôuu¶þÙšÊò3ÜÀbdeb@B _å‘O¼Ô•âÖ­¬õc,r¨WR‡Ì zOjãŽ&§*¼{~—éæu¼=;¿{¿ëoÈã`‹Ï¸Š,ã{…ϦN+R}Â&&î5ß=Ò «À?1<àq[ú¦§bmÀ€ÀÖždMûJ“ ÄA)ÆAÉïÞˆîí£!7–ÛF¶.3æ® lò9çÒ¥âj5Ì•ŠXziÙ»œK ¬W àã#¡¤®ûF™­ôèf¶™Rgž}°¬©ÚIárX‚pzc5^[ûxôc9ì—0Ét¨Ænw1B¤³g�AôéUõÉsr¨õîOÕU®åøMMqk5©ŒL›L‘¬‹È9SÈ à󊥋“Wåþ¼´Ã$íÍý}çEmø–énnmøŒÊ‘áåK•˜¿'™T �åŠÄ®šssŠ“V9êEFM'p¢Š*È (¢€ (¢€ (¢€ (¢€ šîÙìï'µ�©xdhدLƒƒ�ʤ¶º†ÊÉampIÎéZ@G·ÊàUÿ]Bú¾¥Ø[#ý¦Aç+I¸áÏ<¹^~•›œ¹Ôm§ËËÌÑEr7sº� Ï$–óÂÌJÆT®{g?á\½tžÿ—¿øþÍ\ù‚O/—æmƒmV_×CÖ¨¢«Ý_[YÄ› Ä¢¾Rw9ÉŽ�ZøóéKQEQUfÔ¬à†i^á C"Å.Ïœ£�¸RH?2þ”jŠ( ‘›j=†ii“¨“ýÓü¨9î%vÎò=�Å7Ηþz?ýôi”Püéç£ÿßF�:_ùèÿ÷ѦUMFûû:Óí&Þi£VA îdSÕ±Ô�ßÐï:_ùèÿ÷ѣΗþz?ýôk<êkI¦ùg-lÓù™ô`¸Çã\Þ­ñÃFÕ.,®¬nqýÜ�ã]ø![åvVÀb áˆàí<éç£ÿßF�:_ùèÿ÷Ñ®_Eñ�–­kqq4&Æ\-Äó\ÂaGãå®sׂ@ëÅC�tù¬­ç¶¶šõä‚IåŽÊH¤ò=»·eçç^:Ð]çKÿ=þú4yÒÿÏGÿ¾�C «<Ì …‘CzàŒÓèþt¿óÑÿï£S[Ü8•U˜°cŽjµ>õñÿ¼?�kQEQ\þ¹âëúk˜/$Ü<ÉžY]a‹ç%T‚7¤g#p«6:ðÔî²Óîä¶F’9.\,j B± NA1ï@ôW¨üM±Ó­¦itÛ˜î"•¢6÷V±6WnḨpÉ#+žTƒŒU£ñÆmêvsÝ•¸0Éo‘3 PYز³&GÍϽuÔW)7Žbƒw™¡jÃË·K™±ä*7fU-ûÞs°œ ñùU›¯iv~!:D² uh¢i<Õùe��©·9ì2GMËëÀEEs:7Ž4Ý[D}U¢¹··†×í74.c�,¡ö�ä² #xâÀ_Ç ÙjÍlѳ5ÀÒîp¬•òòr 9ŸJéè¬XüMgu œÖ1Ou̲DFQЦCe a´œpHÎ5ZOÉlöÿlðî±k×[‰¤û9Ui"çl¤ã,:@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@xæ±âýWP¿‘༞ÚÜ1Ç ”ÂöÉM{|÷^ÎQJs”•íoÔòó:’ŠŠ‹µîhÿoë?ô¿ÿÀ—ÿ?·õŸú _ÿàKÿ�,ZH{¯%Ô-`ŽV*‰‚;¨@=ñž”K¤„°–ò-BÖxâ`¤ ‘I'°Ü€ßé^Ïîok~—ûÞÿˆŸÛúÏý¯ÿð%ÿÆ�íýgþ‚×ÿøÿãYÕ¡g¢_ßÚý¦Þ(Ì;ÊnyÑ>`#æ#ÔUJ4¢¯$—Ü(ʤ�¢ÛûYÿ µÿþ¿øÑý¿¬ÿÐZÿÿ_üh‹E¼“wË�²‚\V<îÆ3è~µEâ’ †HÙ®ä,1¸g£ƒùRQ¤ôIuí—¿·õŸú _ÿàKÿ�*x‡Z�à Zô‘ÏÍ;ùY´U{*ʾá{I÷g´xOZ“\ÐÖæp<øÜÅ!ˆçò"—ÅZÄš&ˆ×ç;ˆ£$d) œþ@ÖOÃ_ù.?ëí¿ô§|Fÿ‘zßþ¾×ÿ@zùµF^övÒç¹íeõN{ëc�k29cªÞ»;ùIý»¬ÐVûÿüj¥½¼×w ¼m$®pª½MM}¦ÝéÌ‚ê-›Á*CpA"¾›’Š|¶Wù5V¹®ìKý»¬ÐVûÿühþÝÖ?è+}ÿ�þ5ŸEW²§ü«î'ÚO»4?·u�ú ßàCÿ�ÛºÇýo¿ð!ÿƳè£ÙSþU÷´Ÿvhnëô¾ÿÀ‡ÿ?·u�ú ßàCÿ�S‚ ngH �¤•ÎÕU“SßiwšvϵC°>v°`À㯠‘RáE>V•þCR¨×5݉·u�ú ßàCÿ�ÛºÇýo¿ð!ÿƳèªöTÿ•}Âö“îÍíÝcþ‚·ßøÿãRAâ=fÞe‘u;¦*s‰%.Ô+.ŠN�7£Šû�UšêÏnÑ5ímÖø¨V•~`:ƒúƒZ�àŸù,í§þŒj߯�ÄEB´â¶MþgÔQ“•8ÉîÒ'Ýüh¢O»øÑY"Î8tÍßx]ä¸i-%�QŽv>Fߦ®”tW}EJ.ðgZ0ª­$rðŠßÏ[ûé¿Â�øEo¿ç­¿ýôßá]}Õý§_Ëî0ú��ÿ„VûþzÛÿßMþÂ+}ÿ=mÿï¦ÿ ׊îåB½ÅücæO àLî«q]´“Æ‚HÜ19•ÀÁ9êkyb±q×O¸Â4pÒÓõ9ßøEo¿ç­¿ýôßáGü"·ßóÖßþúoð­¯^]Xh“Ïd¥®T|ˆ ywL!}z ã-gÇLŸOjà<3u6—¬ÉW2^]¸Ž$w*ÞNæ’E†ù±œ€@ �S@µ»‡Hò®&ŠTµÐ®|¶EÃl�¦ÐÃÔœPzm­¤0y6шãÞÏ´÷™‹1üI'ñª¶š&�co4[Žt ,[r�´ “ӽϭ;G¸ŠçJ·h›pD·F«Õ[OÓí´»4´´Œ¤*I»1É9$–$ŸÄÕš)ðÿ¯�ýáü锸×Çþðþt­EP˜üA‰äñ ³Çc%Ç—´HSS¸ˆ²‘ü½ˆ¤ ˜ƒ|¹bQxéG„l�öΕ(»¿X®Æ¥tb]Bf‰öÜ �°X\œ‘óg'šôyl­g¹‚ækhdž ÞLŽ€´{†ÓÛ#®*ÒtôkvKH—ìðµ¼AFFÛw(Œ«ùP‹Ê.î´;û{ºu†íÃà ÛȨr�Ž ÒA#�•Æ‚k©ÔtY€.—UÒÁ\4ÒGuéf €v?�;#p[%±Ðƒ]ÌþÐî­¡¶¸Ñì&†Ä’Û«QÐ Ž6? h�é×|:U¤6w?롊 ‹'Ô f€<¶ÇNxní¬~Ë{ai|ÑÙL-¢’%dÞ컼Û�ägp'ÜÕï–ÿ„æç÷ ?´ôôó–k�©0åJ*Nr~ûÏCÆ{ø|!á»k˜n-ô-: ápñÉ º£+ùžãÃúmÕѹši érzáZD)*6®ÈÏZâQÁUÈÉ=”žÞ•ÇÑ^ýZ2œ¹“¶Ÿ×SǧUF6jçiyak%üVdŠ)¯ìNßݪm™Xí …ÎÜz’Þ×M2ÝÅmj“ÜZ4váRÝ%,ª÷Ú̹%³Ï$ WEcõIZÜÿ×ü6†¿Y�ïËýZ›¶ö‘\ø²Hm!Hâåa¸PØÀ?.Ðy>ƒ>•¹%„ i(ÒÄ’KjûãHcÊ0|ò³´œvÍpÔUÏ)5ïl­ýjL+Æ)û½oýhn˜î¬¼\RÉíMÌo”ÚFNß»‚p=1ž¼VŶ“j5m=æÓÒÚyŒÂK:#$8Ï g×ÓŠâªÍ…ôºuâ]B¨Î¡€ 2•==�hMÇÝzÚÞºz…:ÑOU¥ïèu+§™šÄ\YYÛê9•Œ!‡Œ(Úvlç<Ô“éÖƒS‰Öε=�’;wETyƒʃŒà—ÔWEOÕe‹úûöÖcü¿×Üvº}šîdºÓbþÑ({x­’M±íê°'9#‘í\ž¢!]Jåmãxá°D|eFzÓëU¨­iQp““w¹�JªqI#×üÿ"…�ý´ÿÑ�[õ�àŸùlí§þŒj߯’Å~¯ó>�üz/ÈdŸwñ¢‰>ïãE`�N•Ââ™Ö›G¯èúŽ£¬[ÍmdÍ ½°Yƒ:8�ÀIPÏ�Ã?ãU|7 Í¦jÞ|šUüOç»+ˆ,¶ªŒ_˜wáp=«ºóáÝù©ºQ˜ÆáóŒg�^)cš9ƒ¤G Å V úƒÅª÷gkE僽ݣÙèí¼f{˜£½«!VáUgÂüÅOéøUù-KŤGm¥^Ú$zžùÁ9)2ìÁ˜‘’Iô•Ó‰âe ²¡V0Á§«+ýÖèsG(s3Ïo|.‘¢\– åûÙ"ÙX2É36Ü4„3gîõÀšë|Ei¨h—66 l^æ6‰ÚyB«)S“íZø£r »)é©wŸ w© N‹´ˆ\ºàp9 Ò­ÑEP‚Š( ˜¥¢€ŠZ((¥Å&(¢Š)€QE(ÅPŠLRÑ@¥Q\gPQEQEQEP@ ƒÐÑEQ{Ýò0ǽ7ì2ÿy?3ZPØeþò~f�°ËýäüÍhQ@ÿa—ûÉùš>Ã/÷“ó5¡Egý†_ï'æhû ¿ÞOÌÖ…Ÿö¼Ÿ™£ì2ÿy?3ZPØeþò~f¥‚ÐÆáÜ‚G@*ÝQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWžëfžúIôˈ)·•6FÂ{ȯB¢·¡‰©AÞ›1­B•¦�-ÿ…k¬ÿÏ͇ýüþ&�øVºÏüüØßÇÿâkÔ¨®¿í\Gu÷ÿÙÔ<Ï-ÿ…k¬ÿÏ͇ýüþ&�øVºÏüüØßÇÿâkÔ¨£ûWÝ}Áý�CÌòßøVºÏüüØßÇÿâhÿ…k¬ÿÏ͇ýüþ&½JŠ?µq×ÜÙÔ<Ï-ÿ…k¬ÿÏ͇ýüþ&•>êÅÀ{»%^åYÉü¶Šõ(þÕÄw_pgPìgèºD&™”°\³9êìzš]gI‡ZÓd³œ• ‚®:«†¯Ñ\>Ö|þÒúîuû8òr[CÌŸáÆª„º³eìY˜Ëi¦ÿ¹Ö?çæÇþûþ&½>ŠïþÖÄ÷_qÇý�C³<Ãþαÿ?6?÷Ûÿñ4¹Ö?çæÇþûþ&½>Š?µ±=×ÜÙÔ<Ï0ÿ…s¬ÏÍ�ýöÿüMð®u�ùù±ÿ¾ßÿ‰¯O¢�ílOu÷öu3Ì?á\ëóócÿ}¿ÿGü+�cþ~lï·ÿâkÓè£û[Ý}Áý�CÌóøW:ÇüüØÿßoÿÄÑÿ çXÿŸ›ûíÿøšôú(þÖÄ÷_pgPó<Ãþαÿ?6?÷Ûÿñ5$ õ2‹‹ËT‹?1Œ³À?�z]žm‰î¾á¬º‡b½�œ:}Œ6� Eí\õúÕŠ(¯9¶ÝÙÚ’JÈdŸwñ¢‰>ïãEÈ‚ŠAEtœÁEP2“ÙZr&iûßhpO©<â¯ÙÞ%ÅÌ"6�NA�¶x<ÿž*³øadÆë¼�Ðóýj͆†,nc”\— œ.Ìuõ÷¯R­L3‹³×æyôé׌•öùx´°ðôê—PÚ»«4·Mn¨{ËÏáÞ¼òÂî1SÇgi}e½ÅѰmIåXcQ«)¯8÷˜¯TÔlþßfÐ g!�ê  0%r@##Œ×9‚~Íaw 7›Þ]5¬Ð8!C°Ÿà©Àô=s^L“lôâÕŽsÆÜ%Ú;ËmdbÓ‰oö¥PŸ98‹1ä·È½0x´´(¦‡YižâKû�³Ít79p‘îÝ»=~SßœVŸˆ|1wªËpð:%ŠÚ®ndˆ¹‰$' 0ÃÁç¥.ŸáÛý;U–x`Ó”Kw$Ïw¹šf�™›ËÚS¨7lÒ³¸î¬qúò[[jB'Òì-Zæ*u“Ë™`v2åã,èªNÀFHëÓÓ7÷ÿAGÚfþÿè*�Õý�ŽÏµÝÁoæ©æÈqôëV3‘‘@}¦oïþ‚�´ÍýÿÐUi¦ŠÞši8�e�Ø£Ô“O  ¾Ó7÷ÿAGÚfþÿè*�½ý�ÜÓÃmuÒÛ¶Ù’9Ï£ÐðzÕŠ›í3ô}¦oïþ‚³_U°K·}®µÞÍ�·®âÛ1‘ŸâãëRÁyos5Ä0ÊKwÊ£ø¨l~DÆ€.ý¦oïþ‚�´ÍýÿÐUf/™»€]‘˜7‘ë·9«7Úfþÿè(ûLßßýCQËq šTŒÊþ\a˜ í‚p=N8ö  _i›ûÿ £í3ôZ)¢ž?2DÉ‘�dzEMÁŒR$�X£`p¸  ?i›ûÿ £í3ô 7Úfþÿè(ûLßßýCEMö™¿¿ú >Ó7÷ÿAPÑ@}¦oïþ‚�´ÍýÿÐT4Pßi›ûÿ  ]J-ŸlT4P¤n$@ý:¢¶ÿ�uü�K@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ “îþ4Q'Ýüh¦„Î@¥Òs E-À¥­§Ë&ļ„·¦ê°“Ã#mIcfôV¹—ÖžÚ$H¾è.plUÍ;Q7·váðNIt;O5ßSã.Ç1|ÍE­Í=ORƒIÓ伸Ș#wbpGrIÀš<_£b”MrRUfB,¦;•q¸�“ Ü9éSø–›A¸òÔŒy™óž=»yÜ IÎ23ê+Ììï¡°‚'¶ÔbÄð!šXgs›?åŸÚr¤è£ê2+Í“iž‚I£Ógñ›nmKÌÞ]Ì>zÈácù@fî –‘ü�ž#ÒïoÎ;•I$±˜X�ß»bàgƒŒã5çÞ3³´ÓîÚi3,´s;Ø9U®t3xÃÃðOoÕ¬ßÎb»ã¸FTÀ',sÀãõÅ[mwLû¼Šò+‹e‘cy-ØH¨Iæ+œErö׺LK§_Ùj2¼àYÚ9¡DU@H*Kƒ¸…$³é�Ò­-�å”T—©åÝÜjÁÜðÀ‚ERáX¨l(û¼tïš.ÂÈÜŸÅzEªÈÓ½äiw»XO´c¾vc¥k¦XËyw(Š—,ÇùÜûW•ǨMs¡Ê­}ç4Iže£Ü’ÿ»åѸ�¹< õ>•ÛÞ[cÅú`žv¼2eXeÆÛuUeQ��Ä Í“Ï¡JàÕŽŠ¢¹‚9á‘^)2:ž= c¿Štä¶·¸)xb¹%adµ‘Ã�Ä ®2R0k6ô–·7–°$óÁöK4NQNJ±Éû¤jÉÒ—S†[+y-/¥¼Xšæ88”$Š«±EùQY@P““MÉ‚G éú…¾§h.­‹˜Ë2|èQ�RT‚A«U‹á2­áØHó7fó<Å |Ï5÷ð {8äñ[uKb^âQKF)€”QŠ(¢Š(¢Š(b“´PbŠZ((¥¢€;*Ϲÿ�†ü?•hV}Ïü|7áü«Œê8ßÁk-¨[Ýi²]Ãg²kò6¼[‰È=P“‘œp28¬ÝKÅRÅ¥G¦Löñ[ÚÁ3Y4Q* pF,wW¦ÁÆ? ín´û+â†îÎÞàÆr†X•öŸlŽ)·^Ÿw/›sak4›<½òB¬vÿw$tö S’öÁüqtºœŒÐ hà’(™NaR ä�ÊŽÇäó[·z•í¿‰s_ì$‘ „[¬n²�–@~ubO|¸ÆkzãLÓîäy.lm¦‘ã13I ±d=T’:{R�>ɯEá´·7J0'1�àznÆh†Ð/.|=¡ÙjZƒË¦=åÜwBDŒydÊû_!AûËŽ½dôwZ–¥eà3ypKê·x¬Ò¶#N0>RÊ3í’{Ö†¥¡GmŠ4Vúw™¾âÝ!¾ùƒã9‚Ù'‚N{Vœ°C>Ï6$“cMêÖô>ôæ‡~™¡êº$–ØD’Ù\ÛC3FNÃ,hø(Ì>ò<çç®»Ãçþ'¾'þÞ‡ÿ%â­™ìlŤ1ŒÄL‘†% ¯=ޤKx"šI£†4–@º¨ Àt÷ÆN(”ð«i+ Ú5ù³—Ú¹3mó>Õ¼ƒ×�Ûº{cT6þ£+éw’^Ç'Ûï^ÚM8F À£B>mË´nÏqŽ+­:}‘½†ÒÜÝ�?–7ãýìf„°³ŽñîÒÒ¹q‡™cØzêh�Óµ�e¿²on/ÖX/59ìšßÈU¦ Û‡;‡–=°zgš¨oîuK�ß\ê(ÆmX�`¨£ÈÚ²Œgï1ƒž2z î–ÂÍ4[H"�ˈÀç9aèNæç¯'Ö˜4½<]¡cmö‚Á̾Jï,:ã9 ÖKËû¯Nú›Úæîý?uJ§l’Õq’£óëÍ\‡X¾y£²K¨ìÖçU¼„Ý“(±–* ·qÇV…=Mu�¥éò[­»ØÛ4 æEŒÂ¥C’I`1Œä“ŸSN“N±–ÞKy,­Þ \¼‘´JUØœ’F0I<æ€9;}gWÔ&Ó­"¿Ž/2îîÙî’a2D>WPxŒwŒb™ý·¬K£[MöÀ \Çtð¬BgX¤(Qþ\`e€ç‘Šì–ÒÙL%mâDXAû°FßN8â¡“IÓf‰b—O´xÕÌ� 99-Œu'œúÐÖs¥Õ•½Äoæ$±««íÛ¸�qÛéSPJ(¢Š(ª§öŠ@“é¥X›s[¾�{®ïánàôÏ^:_¢€24Û­CSº7o¶V ¥c·�–VîÌ?„€u=O­z(  oø÷_ÇùÔµ·ü{¯ãüêZ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠdŸwñ¢‰>ïãE4&r# ¢�ÐR⺎a(£b€3Ή§Ÿ³ûé¿Æ¤ƒK²¶˜K \t;‰Çæj85æ*³æXØd1tÏåœÕ•¹DFŠE,p Á3ØŸJÞN²Vmýæ1öOT—Ü:⺶–ÞLì• 6:àŒÅiÏd¶�q©‚ªàßÊF1ò–ÛÛ¦1[ôW=®os#Tðý¾«%ÃÉssÚ-Å´‚"£rÇ©ë¸ÿõª8ü5WBU½¼òÃ] mÉ剒NvîêIûÕ·E ³O iò¼o$ú›´Mº6mFrPàŒ�Ÿƒ‚GãVƒl¢Ôy÷�ö{‘r†[†”–ÚWrN0Ç�ŽkRŠ,‚졪éPêÚ|¶RË,1J6ÈaÚ /uäçSE§ÚÃ{=ìp�s8 $„’H=°«4S°ÿ²ìŵ͸‰–;™IBÈÀ³§ ätíYÍá $\E5¼sY´hÉþ‰3B_qRK2�Ì~QÔÖõYÙKKÓaÒlÎÝ¥hÕ��•÷1,ÅŽO~I«”´b€Š1E0 (¢�Q@)1KE&(¥¢€ŠZ((¥Å%vUVâÝ�·§'¸«TWÔgýšoî~¢�³MýÏÔV…Ÿöi¿¹úŠ>Í7÷?QZPÙ¦þçê(û4ßÜýEhQ@ÿf›ûŸ¨£ìÓsõ¡Egýšoî~¢�³MýÏÔV…Ÿöi¿¹úŠ>Í7÷?QZPÙ¦þçê(û4ßÜýEhQ@ÿf›ûŸ¨£ìÓsõ¡Egýšoî~¢�³MýÏÔV…Ÿöi¿¹úŠ>Í7÷?QZPÙ¦þçê(û4ßÜýEhQ@ÿf›ûŸ¨ ZÊO+�|Ö…ØÐF�GjuPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP$û¿�I÷)¡3‘- ¢ºŽ`¢Š(‡žörÇ�{ƒ‘Z-Ü’ßÀŽ~lþFºŠ+¾xå(8òïæqCË%.mŒ¯™‡8ŽÍîË î'ná“… ¶;G\b¹ k{«}3P¶:UÄ–O}Ž6µ‘V41‚Ì" –]Ãîç©Éï^‰EyÍ\îNÇ�Ámtš$VwZMĶßo›`’ÕÜE2ŸºVä�2HZoÙ/fðö—e}¥]JËêKw•‘„„"í � ìHã­z5r�˜ÌðÿÚáÓ~Ø$?fŒJ%6í£9Ï9­*Z*‰ (¢€ (¢€ (¢˜Q@Q@¢ŠLQKE%´PQKF((£PcTnäc!LáGj½Y÷?ñð߇ò®3¨†ŠÇÕ|Gg¥\¥¬ÑÞå‡Ë²–UvÁ8T‚p s�Tô?E©‹[K«ûmQ¢Fž²™V"sÉb¸ H8$ö ’ŠáõOˆa‚òhmVx—íftWpDAA/´!eàasšÛ½ñ4è²ßÙÛÞNêÅ#‰¬§Vw8ÆÍÀïcï@´W cñ*ÎÿR–ÚÞ)eT¹ Û-&fŽ,̪¤îó7.8éŸ¬Þ ñèÑuw²�t©ùy3j'Rìæ_,ã·~èϵv´V•âÕ5?³¬1¬[&;•÷n1Ê ñÁë[ÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEªì�•85¨�¹½Fk*´âÿRŸîŠ¥q#<¬ àPÓåÿ\ÿïƽ×à´¼{Hío/&‰C̶±oò�é»$rqÐdûPµŠÁÑXd220*Z(¨c»‚[©í’LÍS"àü»¹Ê‹™Í´BA ³eÕvĹ<�3ôÉö5Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@>96¨õ¦Q@Õ™$�#OÐzV�dÐEaÂY§ }:f ¾»k8Õ”ed ÊwsÀܸã=E%ÏŠ­à¹û4:}õÔÆéíU!Tù™P;¹ÀÀPx  ê+ øªËȉ£·»–æIžf‘4:Œ° �sŽF4ë¿XØÚÁquo¨D³ }ŠV*Û¶…;Tà“ÀõÈÆhjŠå´ÏÇ3­®¡a¨ÛÞ¼²£|àI¾ÆW�‚¹ÏByÅ&£ã$±Ô®!H<ûxfKbÑ+;‰J3¿Ê ’Bvêݱ@U�á­~/i6÷K©3A“+A$j—$+0†sÈ'·¨­š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠšÞFITÁ8"´+2/õÉþð­:(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ªêWñiZUæ£8s ¬<�Xª©c�| µEPEPEPEP$û¿�I÷)¡3’-p(®“˜(¢Š`bC{r»d¸¿€ |Éäèê¹ ãIq #ubs…+�‚sÔ×?6�ªÉ�å‘·ºÈ¿ãWt�;P¶¼…§ŒÓ9;�ì{­zuiPåmI_äyôç_™&�¾fÝÝÔ6²]]J±AË»¬;[]_êÌó$z}”P¸•ãhØß�Á°„cŽýëC^Ó$ÕtÏ" 9’X挸ʖF CŒV$ÞÕ¯¦Ô®®¥²ŠâàÚÉ Ä]�4,͇ȃ‘Èü¸çÊw=%bÝ�Š­®¯õfy’=>Ê(\Hñ´l ïÎàØ?Â1Ç~ù©´m}u�gR·„ƒkm,„ÆÈù}û·ÁþŽgMá½ZúmJêê[(®. ¬�¬EÙBÌØ|€H9�ËŽtô};RƒYÔµDÚ†»ŽT·f`»7ç%€ÏÞ種ÆÕ´U%¸¢€´Q@Q@QLbŠ(1E-”RÑ@ E¢€ (Å Š( ³îãá¿åZŸuÿ ø*ã:ŽWÅ—ÖbûÎÍ«nYl ·æóTå[o÷sÁ'äÕ?ÞÄÓ^Úë�öMzùÏ�‡få !9ù”/ps’IÅu¢(Ä­(�DŒ.$ƒ4¯nÈΊÅT‘�§ÔzP—\hÓYø_“NšÒÞÒ!{lÑ5³;´i4¸PûÀQƒýÓø×O¯GŽ©©éò ”3nžM=0~RA�·8ãŒþ‡¦6vÍo%»[Âa”±’2ƒk–9lއ$œúÓ¥‚ŠbI 6ä. í>£ÐЖ[M;K »ÑtÝ1.æØ\Ë{%¶Ü"Æn";N#iÛ�Ãå<ÕÿêVÖ£S– ý.[¯.¿{ª"ËÂ|Ä�"Øw Ã8$ÜFGôY¡Šâ&Šx’XÛª:†ð4y1Ï4ÿ¾Er¼µ¾×..šûK7Eû«k-B9†;¤;V5l–’Ku=+²¦¬h§*Ѝê(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÌÕtÙ®^;Ë „ŒˆÝ³²E=QÀê§ó‘îº^›-«Kw{0ŸP¸ÍuÈD¢ ì£'ÜžMiQ@iÅþ¥?Ý™Zq©O÷EgËþ¹ÿÞ5ËG,ú·«¼¶—PßÌ—Ém™È�P£cîýÌ‚xç¯ÔËþ¹ÿÞ4Êàõ»+Ë›½VI´ëÙog‰?²$ˆ-›ËèXFCä’N#“Ò¢Õ´K™SÅÍiq.¡†K9_™ËFîÈôÅz ÃÞiÑXxƒ]»�A{›‹˜à’(OÍò‘ Þ½|dÚ³£°½û6£ ½…ÊZ5æ�41­£Â¤ùÀÈÊ„’0Ÿ©õ¯I¢€8 ÍvþÛÔÎäßG¬ÀöŽäGû€Å÷q¼:€sÒ´4ÛW¶ñ„ÒEc<«3ÊÓ\Ü@ÈðŽp™Û"€r¢ºú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬�KM¼ûXÔt‰¢Šô¨I#Ÿ&)×¶à9 3�GÐñÓ^Š£¥é£N�ÃL÷37™<ïÖGéÓ°W¨¢€5«&µ«&€<òãD¿¸Ô¼>‚€9ÿC¨§…ô§º¼·šÝ¬ òcŽØ£ Ø0‹�Ü{ é)‘E¤0ƱĊ�À‚Ÿ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@wšV£ä—-ÜVÿj8¹Že,ªzy¨;>;tµ|¥p#¸Hƒž£Ë�NsÒ´h¢€ (¢€�*@%IGjƒìòÿÏìÿ’ñ5bŠ(¢ŠdŸwñ¢‰>ïãE4&rc ¥ tWIÌQEW*—v�‰š@>÷ÚêO8­+Ô¸»„FÒIÈ2σŸóÅuÏ 8¦ú°ÅFM#fŒVŒdž/ ^5µÄ–òæ5Ybbs"Œ‚>µ�ˆ¥MVÙµ ^&²²ºû|(NÒñ˜Îà½ò§#Ù«�»i®(Åq°ü@†X.$°»C Üí†ídÄ[ÕX¶ÊʽýjãøÂ?µßÛGf^H.!‚ É�p]ö8ãkÏ^”s ågKŠ+�ñÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇhûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPO±ÓOüv�±ÓOüv­Ñ@>ÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇhûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPO±ÓOüv�±ÓOüv­Ñ@>ÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇhûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPO±ÓOüv�±ÓOüv­Ñ@>ÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇhûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPO±ÓOüv�±ÓOüv­Ñ@>ÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇhûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPU³PÙfÈôÆ*ÕPÛ,�¸§½Gö/úiÿŽÕº(§Ø¿é§þ;GØ¿é§þ;Vè  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÑö/úiÿŽÕº(§Ø¿é§þ;GØ¿é§þ;Vè  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÑö/úiÿŽÕº(§Ø¿é§þ;GØ¿é§þ;Vè  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÑö/úiÿŽÕº(§Ø¿é§þ;GØ¿é§þ;Vè  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÑö/úiÿŽÕº(§Ø¿é§þ;GØ¿é§þ;Vè  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÓã´T`ÌÛ±íV( «Éh®Å•¶çÚ¬Q@>ÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇhûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPO±ÓOüv�±ÓOüv­Ñ@>ÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇhûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPO±ÓOüv�±ÓOüv­Ñ@>ÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇhûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPO±ÓOüv�±ÓOüv­Ñ@>ÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇhûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPO±ÓOüv�±ÓOüv­Ñ@>ÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇhûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPO±ÓOüv�±ÓOüv­Ñ@El±¶âwÕ=PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP$û¿�I÷)¡3”.(Òs(ÅP:þY1ºì�:­YÓôcuÂä¸Lávc¨Ç¯½\�XÓ¥“ËKØKÛªÊ\C#mI£fôV×Tñ8‹rÉéèsÆ�Þ%}ON‡UÓä³��cr¤” •ƒ ÷RãÃzuÖ±&§,lÓKjÖ²¦~Iºäc®8ÎzV�ÅÄ�4÷3G +÷¤‘‚¨íÉ4áYÒ•Î¥–2ÃsŒ�;�‘ù×)Ó©™o G �Ť·×·6ÓDaòç�0D#Ó¹ÍV¶ð~›k.•*=Ã6šËÜàù…²I~9 ’F1É®‚Š,‚ìÎÔt�¨K«}{i*)]ÖÓmÈ=ˆ ƒõÆk¼*ÑëV)e-Õ¥�½Œ±yðJ»Ë´ŠØ;²N~bN:úq]-Õí¥ŒB[˨mã'¦� 'Ó&¥GY]20ʲœ‚=h² ³OØ� šîÕb·6ÄA.<ÈÉÉ H'$ää`óO_ ZÅäkËëVŠÞ;gh% fD]üuò0y­Ú(² ³&ÛBŠÎù§¶¼¼Š‘¥6« ò·6I8ÆFI'ã=©5�u™ i5Ûu�ÖDKr€oS�ß2“ŸÒµê½Åý�¤‘Çsw/)Äk$�KŸ@Z,‚ì–$1Ĉ]¤* |e½Î8Í?QLŠ( Š( bŠ((¥¢� E-&(¢Š)€QE×QEÆuKq*ŘeFvädý*¶—«Ùkm­ý¤Á¡¹�dŒ1°GB=kÆú•>žu»�;NšëOa;5ÔI‰£PCFÌÝŠ“ŒðiíYþÑôMTÞø—NÒ´ÛV•¼«KhÁ¶ ‘¹‚ý×,I=ñ´”Ð^ø»I°Þt’ÿ¡ù›öÆNï-ßo®¨>ç¸î±£;°UQ’Äàë^'£Iƒuw½Ónush—ñ%ëù;!�\K¾\3†Üv©8SÀï]�õ¾—gá[„¹ð�ý…Œr4ïgkå.’Î#r¥pÞ<�84±¥øëÃZ¹D¶Ö,üÙ%1G Ì«#�ÛF9ç·¨"­\ø—OµÕN´㉦”‹w؈£%‹‘·õÅéWšÜ§ßø«J¿{{yÒW·)˜Â4–M²eŸB€2N9Íføµ%¸ñž¥4qÝͧÇa$R!¾•’å~ULíd,ÑÆS$·q@‘¤øŸDÖÄK§ê–sÍ$b_³¥Â4ª0:¨$ŒgšÖ®Ã$Ûø¶x®"ˆÉ/Ú„rªck#żfܧìWw@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@OS–ú:u²OtÄ* j.OÞc×®' ¬« kHÔ!Í캭¥ÉÿJ30W‚L}ôíåž›;pFy †™—BN>ó=‰úŠßýYÿ}ÿô#@\j[^ÚY¹o:è¸�@Ï ¹$úƒêG­fé~/Ð5‰¼‹=RÕî<É`óWÌm„‚Bg8ùItæ¸ï[_�ÚºÞ¶ËËUµŠY!ºµWË)æÞAÁ(ð„lšôrÇ}n°+4Q[7ÒµY^ÞÇK×u+›ùf7«hæ ‘¤Gx#çï„UÉ<žsƒZS\Oƒ§Ô4íkRÔæÔbX,…À�1Ë!Ú§÷h¤OÍž›Mu)¨Á&­>š¥¾Ñ );ñÆ×,?Tj·\\Ú}Äþ$Ö¬mnæŠäh–‹Æó¸8’}¬O~@ϯ9ë]&…©ÿlhVZ‰ŒÄ׫¼gøø—ð9¡EPEPEPEPEPEPEPEPEPEPEPEPEP$û¿�¯÷)¡ è( tµÒs E-Ǿ´öÑ"E÷@Às€;b®é𑽽·‚rHã¡Úy­#¡i¤çì£þûoñ©mô«Y„ÐÀEèw�Ì×¥SBPiEßäpà UI6̯"Éá+Äu܌ѸóV¹Ï·]é:ð´–7¸ºÒt˶„ŸùoîÌgëÁSh!¹ˆÅÑÊ@¾f¤|‰#•7êSȹF ¹Vr¤eGo¦+bM2Þ]MoÛq‘a0…ãn Î1×**åCJÒbÒ­Ú5š[‰G•çŸivf<Ÿ”:€t«ôQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@2$(„}æ<{’iôP ­"ÚïR†þBþt0IcÙ·#ï�{T6Óì%3¢I5ÉRž|ò4Žõ OÜÑp+VŠçãðN�”Vö+¤náˆíYÈéæ÷qÐàžÜÔ²xWM}.óM_>+;©D­s#!ƒ|ŸÜŒàc©Æ+nŠç[Á:9šÞPÚŽø'ŽtߨÏ"îF 2®ä@íVnü3azos9šêXå3 0ñ˜þàB>蜴ÙÎkfŠÈ²ðå¥�ý­ÔRÎVÎÓì–о\HvgÉòש=8ÅkÑEQEQEQEÀ„NÏÆ �ùþ4ú(†«¤[ë0$op VÜñÅ3F$Ým¤¾ÕZûÃMõµ¼&×ìæÕvÛKjÆ ˆË‚·JØ¢€)C¦A©& ­!žKhí›sdmFf×9s“ô¨íthlô™tëyî#ŽG–O1\ ¤vv ãŒ8â´h  D𞌺|ÖojÒ¬Î$–ief™Üts!;·Ä;b†ðÅ´–ñC.¡¬?•�®5)‘ˆ'øŠ0Ý�|šÛ¢€9ë_évL ½Æ­J�RãibwFü’IÏ\œ×CEQEQEQES B3Íkx"Ò; [Û ,î#nVHLeäßítê(OP¶‡GŠ1EB QEQEQEQF)q@ E.)1@QLŠ( ŒQE&(¥¢€ŠZ1@]Q\‡HQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE×û¿�?Ýüh¦„ÎXtRŽ‚Šè9Ä¢–ŠJ+ Bí6Éqn>dòôu]‚ý幎0ñ:±9•ÀÁ9êk¢XyÇSâ!'cBŠÍñµ�¤K,O(B"ƒÉ'Ô�­eMã�>+˸7L°Z‰ÃiFâw|¤lùF|ÇŽ}�s]gOŠ1T´}R-gK†ö‘Š WF]§�7‘ÏQÁ«ÔÄ£bŒSŸ£”RâŠJ)h ¢–ŠJ)qF((£PEPEPŠ1EÀLQKEuTQEr!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_îþ4Pÿwñ¢š9qÐQ@ ZÜç (¢˜dÚ­&•�½ÖEÿ½£éš�­ô-<`F›²ÛÁì{­t>|;Ù<Ø÷¦7.á‘õ¢KˆbˆË$Ѥc‚ìÀø×lñõ%–§4pp‹M\£â 6McB»°ŠEŽITlgè ŒûqYrhº­Î£qs)²E¿±û-Ê£±1‘¿ Ÿ(Ý÷ûã¥tždbQõó – žHN=9y‘™Œ>bù¡CÏ 3�N pØê¹CC·½³Ò-íoÅ¿›,@ÀÅ••@ò+F›‘ÏÉ‹$mÈd9ñ§â˜ E-J)h ¢–Š%´PQKE%¸£ÀJ(ÅQEQEQŠ( Å¥¢€:š(¢¹N€¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯÷(»øÑM œÀè( tµ¹��¥Ý\ŨÜé7£ äuÚO &8üÇÊ›·0BÜ28­E™wG-¨M,z–¤u=m¯4ß1l¤ŽÄðaB|Ãå`dçp$cŽEâiš?Ì ê‹y=”’+C:Ä ª�/h ª‘#Œò~R:z&‰§M§YÊ.]æây.&1çnælàg°…bê¾ ‡QÕg¾m“4ÐL¥§$•�ù~^Üvûèõɧga&Œo1‡Y† ˜á’ÔÜ[+Ü\•‰–¥6Ȫ­Ë�3ô¯E®SÃþ¿Òux/.¯b�#²kmªÓ dh’ѶbX¾a† ã·9'Ò¼ÛXµ½†úâ(Ú-4\·•rZY…³±ù±,Î2ÄŽÐ88-Œ Ñ×o¾ßàûmBÿJ´ŽÞ ÝbOõŠñœ+(dR ¶Ò8­MÇÊuÓø—L·™’I_li;É Cµ<�»óÜýñÐóW"Ô —S–ÁCù±À““�”«–ÿ!ý+ÈÍ´%R-'Jºµ‰‘¥Äå¶îä~ünG!ÝÇÝs[Úü6°k—72Û¥{;i¦—h‚æfrP±Q�€(ç†9<œÃå;èu‹9´%ÖK4vFßí�yTÆâHíéTÇ‹4¦�·�yi·ün¸­%Эõ}6+UHeðø[#Á¬.Û‰÷Ë}ªÍÝÜk}r¥ rGy d×·+,ªþ^YBÎûíÀ\|´s0åG£iú…®©d—vn^, ²2©*A  ŽEZ¬? Èÿ×åßþ”I[•H–‚Š( AE¥ÅŠZ((¥¢€ŠZ((¥¢€ŒRÑL¢–ŠJ1KIŠ%´S§¢Š+”è (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ÿwñ¢‡éE4&sC ¢�ÒŠÜÄEUE ª@À`JyR3RÌpÉ4‰…l<Õ–öK½EÐå~Û9‘Tú„ásøV�Þ�e~b7–�\yGt~la¶ŸQšä›â-£_Ý[ÆÓÏÃÆ‚+iY6³8ÊóÉ9ôÅnÿÂ@“Ø­å�¥ÅÌKqäNž[$±v'a8$dzdö©º™JçÀúmÏŸûû¸¼çf>[ Æã&@Êž?zÃò«—>±»Ôc»™ç`‰7-ÄeŠnÉÁ|ã8È‚ÿ!Mgì­h‚, å®ñ `1Ÿ;oLñ×ð®‚ë\{¹>Ñi#Z,C$ÊèÙÃ+"䎠ädphÐz‚xrc©[MwwpÚŒf9ç•—~Ò»@Pã�ί £µšrÖí(ù¥ˆû¶…ÝÈ œÔ•‹¥x¬_éòÏ=­Í¹U–Tš[YR‰rQ÷‘ŒÁ©aÕõˈ!’=ÐQ¹f¿(Áºdw<‚8ô™©¥é±i6 g É"«;—”‚ÌÌŘœ:“ÐUÊÎÐõ'Õô˜ï$·HÏ"4k&ð ;!Ã`gîç¥hÓQEQEQKE%´PQKEŠZ((¥Å% (¢˜Q@&)h šŠ(®cp¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯ÒŠ¥ÐŽhtª×ö1j6�o)uä2¼mµ‘‡!”ö Õ‘Ò–¶11lôËù.£¸Ö.¢�­¸·HTªÓÌaýò;tã­jÏ \A$2gdŠQ°ppF:Ô´b�žW6žòØ\éEé†òæþxVÕcŒ�-'c¾F*X*Œ�È8îjic³“ÂÒJ×÷—:£Ý ·Ib¹È2.È€'€O Œ Šôxlímåya¶†9$ûîˆnI䎼’OX!IE‰ŽAf cŒr~œTØwK¤—/*«�ã€Ä…á: R�ÝÜë-{ý›b"vw 4€J8âܪ6ž2¤}áÍv‰¥éñ%ÊGcl‹u“p%\ç;¸ù³“×Ö§’Þ ­ÚÞXc’]�¨*WÐŽ˜§`¹�àò‡ƒ�nnqÿä­ÚŽ xm`H-áŽ�ac�Bª�`:T˜¦ ¥¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š`bŠ((¥¤ Š(¦#¦¢Š+˜Ü(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Škô¢‡éE4#›( t¢¶1 (¥Å9+™n52Z[›„·¸¹‚;{xfx@ŠI‘7³! X«në�ÀÁç:p›�'T·³’â[›;½Ë LwIŠ¥¶–êÊT1ò6õ9â¢"išyѵM6[Í9>X-�Â4`åUÑA ¯8ÁÀ9ì¦iñË}Öºbéºu«4‘D!4²²ì.P}БÏ'=°2†^ñÒÙøzýÍÔvÒ4�Èòˆñ!S· HçëÌn5yÛNtƒX+tS ßÚ€a½ro˜ã§é^‘âØ.îü1}icj×71˜UÕq¸c$’yëi>$K»õŠÓTûI˜1hîfDt0¨Ý¸Êw2�¸Û<ƒ€†ŽËU×#Kq¦k–��>i °urp¥’TüA<ôªú¥o=íªÍ¨k÷Æ%wŠ{WH—p<�±ªíÈ8'Ž*¶½¦êúÅ¥œzu¤æÞÞÐÂò]I¶yV@À üATä±-Zz|·£ÄÓ]a_ÁöðÛæV„ö$œHI8è;QÔ:EQLAEPES¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ph¢˜ EPMEW9°QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE×éEÒŠhG6´”VÆAEPErþðö‹yá­.êëH°žâ{H¤–Ym‘ÝÝ�Ä‘’I&¥¹Ò4Ý/XÑ%Óôû[7–íâ‘­áXË§Ùæm§deTþ•Çc£¨Öxžg…eC,`3 a¹AÎ ³ƒù©®Mso j3YnûZ[HÐm]ÇxS·œœãŠò�P\ßÉurñÍy« uù&´2°vß‘¬@�ßÄ3޼RnÃJç³Q^sã+kt¹h`Ó4£6P òÙdPòù@&Öt�ƒÓ…m¢·Ötø³t­‘ÜIj³�=à¸Ìp‡Þw¶A9ç#ùÑp±é´QE1¢ŒÐâŠJ(h¤¢�‹E%´RQš.))sE%Q@QLŠJ(¢Š(ÓQE�°QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÖéE+t¢˜Žlt¥Å è)kS!(¥¤ ^ãÂs‰˜iú�Ù-F6Aæ]�žÃe¨€(Å[Ò|<ö7?h½ºûd©þ¤—œˆò'Í Éã>µVóÇš%µßÙḊóÉ åº É#y'åä ã#=E[ѼY¤ëR4\ÅÐr‚Ýî"g|(l®Ç`è=�¡¥¡Z—5«ÔôÖµH윳øüƒÎ@3×nFHí\’|1±Žþ[ˆÌ¼´òÞHÔɗߺ"6m ¨cãû-KR·ÒlZî踉YWäBìK0Pœ’+4øªÍA&ÃXrIÓ'ãÿ¡ØÌ�CÁ×Ú‡—¹ÓmmͤPËve£b’ù˜TÜ^ƒ©Ï=*M'šV¯kp/,šÒ;‰gh ´0mg�gËó0ÇŽ;ó[Mâ-5tø¯mñË2ª¨ùöJÁQ¶ž@$þ†­iúŒ”sI}±NðÃd;IÙ‹ Ô·Ef¾·j–:�Ù•ÓŒ‚tÛó|‹¸àgœ‚úÕø¤B’®Bº†ëƒLÑERÒQ@ E%€Z)( Š(¦EPEP ¢Š(”QE1Rf€:z(¢°5 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ºQCt¢˜Žlt¢”t¢µ2RÒP3˜Ónf‚->8› q­_G(À9P×M�o™Wò£I¹šö÷ÃWw-ºyôYd‘°Y�±'§&´?°å‰åû&³¨ZE$�/“ÂʬÌYˆßX“×½Ki¤›{áyq¨]Þα´HÓˆÆÅb¥€‹ÔªõÏJC)ø¿þ@Iÿ_¶Ÿú>:æ ûoÛ­·ný§í·_jó¾Ñö'lûß»Çú¼b»m[K·Ötö²º2™Ñɉö¶Uƒ ÈäœÕðž–ÊT¶¡‚1ÿ!+�þ.†�}qw³J°µˆ¸¹›GÓ6Ta>rÄpN½kSôOɧÝ[[Oq¤¤�5ÉUßpÓdcß oˆ®ÒOÚIáøt]ó-¼)+«øŒ©^qꣵC…4«slÑÇ šŦ2óîûÂCü`ðyôÅ+çžY5¼rÝi:}•ˆÔ¯­™·+ R|òò)$acã¿ÝxB8 ‚úÙ4›]:{YÖ …³îY�X6v¯÷ý*ÕÇ…t™ ¶‚ ’[Ëç'Ø��Kmeå—£†­i:5¾Ž·+o%ÄŸh—ÎvžS#nÚ«÷�'…I¡ ¹¡ESQEQEQEQEQEQFi(¢Š)€QIE (¢€:z(¢±5 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ºQCt¢˜Žpt¢�ÐU]BÆ-FÑ­å.¼†W�¶²0ä2žÄÐ̵IXÖzeü—QÜkQ\5·é •BzyŽ?¾Gnƒœu­wA"26v° àãŠ``êÞ+¶ÓoVÚ(^ïËlÞ4'"Ù=[O}£œz Ü‚x®`Ià•%‰Æät9 =A®nÿM³Ò¯¼5kcn�B/ÜíAÔùòOR}Ï5réôß [K%¥“y×rþîÖÜf—z/L“Àîi\e­3V]JóS�P/Øn|Œ†Îï‘[>Ü’? Ò®.ÆÆëÂR�RéZt¾µC-åJY˜HRƒqSŽÁO­vHë"+¡Ê°È>¢€EPEPEPEP0¢Š)QšJ(sIš( Š(¦ ¢ŒÒPÒQE”´”fŠJ)ˆêh¢ŠÄÔ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠFéE ÒŠb9±ÐQ@éEhfQIšZ+œÓtصXn.îîu)¼¹�÷WóD¡RgEQÀ*ŽÕ†.u‹+˜´Mb9ä³cºšDs!BŠã!‰#.¤ààç¢ã±ÕQU¯Þõ-KiðÁ-À<$òR;òóøW½â=ðë ƒÛê&;XìMÜ›£˜3ÿ–xs¸±žh¸X郞Ä:þ­§ëzM¬íedf†viéòÁ ÷ˆ1àíê3Ô‚8¨<3â{�SÄBÙõ+|;ù’F³£î"Þ?ÝÆ2xÞdl¯÷­+ŽÇ QFi)€´”QH–’—4QIEEf€ (Í&hQEQIš(sIE(¤¢˜%-%uTQEdhQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE#t¢†éE1ØéFiJ+C0¢Š(ÃÜØØÜ[›=RA%‚òîEò´�µ+,“3© ÐÈ>é÷éZ:,0®«`–0Ý‹[;;ˆÚIì�·Í$‘0v ?q¾êöç“]=€­¨Þ=�¡š;;‹·ÈUŠ ~¤=Ojã¡Ñ5»-dø�ì6Ó<ŽîÚ\r�aÜ.ŽNÓ! ópç»’ÁFX€=M7΋þz§ýô(ÅjÚLÚ®»§ëc{&ø[˃b¬–ÅWrrNÐåÎy8àh†×Y“ÄZ,—PëMWÎ×�jè™…À?¹$xç×Ûy‰¹Wzîq•å¾”‘MêZE T”`@ àŽ;ƒÅôQEQIšZ)(¤1h¢“4(¢€ (¤4QE&hhÍ%(¤ÍÀ\ÒQI@ šJ)3LGYEVF�EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP7J(n”SÍ”R”V†aFh¢€8=4 t :êÿÉ"½¼FçQ¸²Œ©�¨ÜÌ[ç “ËàŽùÇ55®™—â›_$i‘³ß2,vQ$n±'`®�•y\ç�Ŷ‘¬YiñiðjZ{ZC†5ŸOwb€`"` Ç^}* ;ÂÍi{a4²Ùyv-#–Ö�eÔ©ÜÍ#’0z{x©(Ž Â-/šŠñý¢Ûr2 <ôÈ*2OÓ½yÖŸk×&V™fŽ=2pPmU„¡–4ÏñwÇ@I5êž Óî5M$ÛZIsùÐÊ­(%FÉù“÷zqõ€<)¬EöØ5+¦ù·(‚r�»®U¦ sÏ¡ FKjNÓü*ßYY·ösþöñKGþ®.0yükkÂ2\3K¶µ¤_Ú ¤šqmoV‘™±�ä’zŽƒñ«š‡îtùìe»ž)–�œK8 ǘÜúí\{ ¿i§Koâ NýÙ WQÀˆ �À lçþú Ó¢Š)€QE€(¢Š(¢“4´RQHbæ’ŒÒf� i(¢˜%”´”Rf€“4f’� šJ3ILGWN?3tmÝÏùÇn”újgiÎìäýìzûS«3@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¥7J)ˆæâŒÒ”µ¡˜f—4”P2•ö¯e§È±\L|ç–Ѥ‘‡¨Uþ•ž²—wËjÖwvîñ´±™Ð(‘T¨l ä`ºõ­gËcöï_»º…ÂÛrÁ&Íù’~¤|ÃÄuªÖ ¥EãHcÓ‘¼Ä³ºIä`ìY„� y�÷ðw ÁÍ!�5ÍÔVÏqu4pƒ-$ŒWêMb'�ü8÷’ÛÿkÚ/–ªÞcL»9àòF9â´u£2i2Ás-»ÃK¾ …ŽÐN>eaÎ=+Ë óÁ¢Ú•Öí^ yæXõHErr>_³òAcò“��aI°HôûÝO²û.ù%•®�ÉÛ@óc$l�™y÷£OÖ£Ô¦Ù •úG´°š{so›?…cê0_Áâ=+ìÚ”^Ya_µ[,2¬îv2ûª?£à»ÝE,ô‹ ®ìD/iç$fpî€�@}ûIñÐÐ3¹¢’ŒÐÒÒQ@ šJ3E!…™¢€’Š(¤¥¤ Š)(Í”P ¤£4SÍ%”fŠJ)ˆëÂ…PÉþhžå�y“[º:y(…ð#wÈùˆêNãM"þé£:~–Ò,1Çs¥ì‰´y€•¯^ƒ'ÐgµVЭõ{}¶ëK”<Ûm’bÒH�âG%þ`HTÁn»}é ôLÑIš(sKšLÑš@.hÍ&hÍ¢ŒÒR´f’Š(Í%QšJ3@%™ AšJ))€J %1&h¤ âŠ(©((¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Škô¢‡éErð)i ð*½õ̶–­Q;r€¼õËFi\,ze.k�ð••½†«}µ¼p+XY;ª.2ÄK’}ë®Í.h¤Í c³Fi3Fi¹£4™£4†.i3FhÍRQ@RRQšLÒP!sIE%0 J))ˆ %›@…¤¢’˜ÕQRPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE×éE÷(Ž�Fi ð)sZŒŠ`ßäÅ{Ø»ìP71êN:Ÿz“4™£4 çÃ3}�_mi'ÔÖe� +[׎yé“íÅ[Õô›»ý*ÞÒÖìÛJ˜W•%‘6Œ`�—qôŠ×Þ¡‚–ˆ$ ò@ÿõŠZC9�à»hnôÓÍêÛZDñ°7Óä(pß/C�0:Q©øUî.ÛìMP\A$7-#³;oxË×'jÉô®Šæê;g¸¸�G ³óÍgÿÂG§ŒäJH汞4õf@âiöEêx°j0ÍX´Q¬‘†!‰E�Œ`�Þ×øzVîi3Y:Ÿˆìt™„W+w¸²¨1ÚÈÊYºÀ`“éšØ¢¨Øê"øJße¸�c8Ý:ªçðÉ#àu¬ùifÑ5�1të…BŒÁífWšG nY$ 9Ï¡àq\ð·¾´°´“΄IkÅÄбI˜ÉCæ%[ €U^õéRèztó<²[i!H2q"�‡CŒpO©¦GáÍ&#s²Ê5[˜|‰rGŒP8P{ã<Ò—¿²H4í-CRš[x'e’[g›{l‘vGœ¸%ú�§Ö³tK[)µÝ>ytU%‘üï2î6�™ / 6«‰ÝóØ®ÎO éRÃL.ÂÄÌË‹ÉA,ىݒpHÉìqÒ£‹ÁÚDÇ,mW�ƒ!ûlÜ»Gñv^>œt¤3 Í¤Í.hsFi3FhQIE )3E J(¦IE% CE!¦J %1%”ßÑE%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ »øÑI'Ýüh  t¹¦ƒÀ¥Íh@´¹¦Ñ@\_Akqo ÌPÜ1XØ�”·÷sØžÞ¸5f³5˜f½µþÏŠu¸I,ƒ+ŒsŽíè=yíWá�É‚8·»ìP»œå›©=Í!�ê7ÃO³3̲XãŒov!Tg·'¯ašÂ,º &ý>H•ÝÌSLK*9BЪ¹�ª_Þµ¥ö’IµX–G™žîãÈ�r®ÕRûO?9 cø}«Öî+y Ý«èÓÃqëQí�•· x=ɤ3Еƒ¨e ‚2ïYW!‚ B[4´½¹xvùïoõ‹pÈÏ9MߨľQ¾ò¿p;~ösŒñœc=ë•ðöŸ4qèE®¬—ÖìÇÚÒA q•!ö‰8°Ûüªè†ù<$Þþͺ7e °ŸËýÁRßë7ôû¼ã®xÅ :;ßAgy%¬v·—rÄ¡æ±oò�黑Éë�“íUîüWom´ÑX_]Û]Xg·T(ìÿt|Î~¢«G,ú­©™,/nâ¼tš-ãó !J7÷~îA™©ÙZÛGiö›†Ô­�ÄÆ"­ÍòÈã$Œ#8É=…v3_yz¥µŠÇ½¦�äfÎ6*àgß%€üý*ÝrsZý£NñZÄ̑ٶŸk ’3�ûÌWþ*�ü#e¦û-¼@·:Né%mÄ}¥] 'ø�Éõë@ÍÁKe}¬Ù JòÆæ)#h6²¼P£ ÇŽ@Ü\çÓ›s xµy-,®–×°5€]çbŸ,¹Œzd¶qïé@õ%p—šf¡/‰ç’v™$k¤{[„³yvD6ü¢@áPpC¼äžs]iÓ²Œ¿m¼æçíóyçgO¹Û”ºi A ¿“5ľtÒyÌl�•NÂŽÃŒýjcLI"EI#E™‰Àwªö:…¶¥l.-$ß$r¥H#±‘Yž'iþËn‘Ãç@ÒæxBJ|Å!I��œg#ž™æªiWww^ iÍŸÙc–"']—vÚÙxPG^F8☎š’ŠJô(¢¤ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’}߯Š$û¿�ÂŽ‚—4Õè)Ù­ŠLÑ@ÇQT5é4ñæ% $\2òÑÍŽàsžã¯­]IHÖD`ÈÀe9â�¢³µ{©­í¢ŽÙ‚\\Ì�FÄgnNY±ß þÎ%öµ±'ŽúáÒd•íD� ‰ŠrÕaR»€'†8¤3µ£5 ¼éumÄG1Ê�Ôú‚2+ ã[ÔÄsi–ß`‹ÉÊ—lÊ÷ Œ’„q�Ó¡äR¤¢¹‘â Ãyý•åÁý©öÏ,�§g‘�þn3Ÿ¹Ç_½NÐ5½CWv•þÀ°‚ÂKefä€àðOƒñ gIšZã´¯jRŤ\_>Ÿ$Z‰Ç•n¬²Eò³n9c�6óÓ¨©‡ˆuEÓ]’ÚÔi.Cy@·ž±€ùû¹Án:w¤WEsòjzµííìzLV~M“ùN×%³,›C\}Ð2NyíTnuý^{].ûNk¶Ô&ŽŽx]ž6`s’‚¤t žâÎÚïgÚmâ˜&J‰620zûž±à»½}n eˆ´6¾}ɉ0®ÌÛPI |¬zúTx‚Þ渿¹Û÷2%¤kf(˜R@PI sèEoæ’¹í7ÅÏ Y_êS$rÜïÚ±F͸+�£'“ïZ+®i­Ì«v†;h–yX€Œ¥ƒŽAôÏJ»Q›"�#\–€IÉ?RI?�:±®5…‹Q.f1Ø[Y«–(Iù�ÉÆ28W8ëÒœž'Ñ¥Y/A” v6>sµHã•'�Ã�zפ¬ÛÍL°–Xîn„m"¾QˆÁ*22vŸòEAŠtYåŠ8¯åª”`Cg[#å$ô FÅ%g�sM�Ø>Ô¿hݳnÓ�ØÎÝØÆïlæ¬ý¶Ô¨as žP;Ç/Óo×Û­0&4†˜“Å+:Ç*9�¶¸Viëƒèyã@ IP_^Eag%ÌÙÚƒî¨Ébx rNúÕm7Q{Ï6›³^C�2û°Ý`xÈ?ÌÚ˜‹ô”´ÚzQRXQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÉ>ïãE}߯ŠàÇANÍ5z \Ö„ E%¤2¥ýœ—â8 Û-N|ô^AÙsØsÜôõ«ˆ«*"…E ”Q@Ì]zÖö{Í>{QtR#0´1y�ˆOï~\`¸=ù�o¤Kisö›};X†~{b·=y5ÙÑH ýÚ{-ÚÚà$`¨ A!7 ãŒ…À8ã=+?^ÑõMae´'NkY1Í"0šß¦Jã ž2Et4R-t©Ä¿Úa£)öl rû·îÉöüjŒz.§q­Ùßß=×vgµVN •ÃÐsœdò+£¥ g'£øI´ƒ¥Í Y‰ã€Ûß…)çp8É`q׌ԃÃÚ¡ÓB’âÔé(Bù 7œÑ�˜û¹à ÙéÚºŠ)…&›«Y^ÞɤËgäÞ¿šâà6b“hRË�¼ÁÇ=è4:n‹ek"”°¹Žgi †ÜxîKf·sKšçuCw§ëW–°I3Ýiþ\b4-‰cf*:gÌëþÉ èw–}Æ–öîöÖct¹,\©Üç#Ÿ\×EšLЄ/ µÓ�e†K›h¤†D3@Œ­&ðC&bü³Vn¼&ïý�«C²Ä°^Ź›|jáÀRrO!‡'£ꨠuôÛ�OF×Fß*ãQicŒL íEZgŒ€q»§ñS®ü<××’™š?³Ë¦ý�€'pmÙÜ8è?�t”åàðíÿØ­Zîx$¿þÑŽòê@NÖ À Æ~è^¸ïOŸÃ÷RÚêQ,�ºÔ£»BIáÆH’]åaö­xnÃ=ÔÊÈÅ·«aÁè0k£û¨P¢Ú <Ð<±ÃõÝõ÷ëSÓM1!Š&vŽ4C#nrªãÓ'Ôð)ÔRS“®X]Þ­«Ù¶Ù`“ÌÌ‚3Ìr×Ó�Z©§iºªjÑÞjy›#d\«pqÁ dqÜñé]! 4QILG¢QE…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ “îþ4Q'ÝZ(‚åJ\ÓGAKZ-.i´´€ÎÖežÎØ_Á:¨·Éxd8Y”ãåÏPއ׎õ~<Øc“c¦õ µÆr:ëQMg ÄðK*–0Ȥü¡¿½ŽävôÉ« ËÖÏœ–šx'ý2áQÀ8ýÚ‚î>„.ßør¶ºDw*Åc$2¤Ùÿ‰`�m\dÆÉ �Oïæº�gD]Z[iOÙY ]Ûyñ�ØçnáÈÛÁÏsYÿðŠÓ·‡?ðMÿÛi¿§]‹í6Öì yÑ+‘èHä~ÇjšÍä^#ÔôÕšæ+ye·I.�%mQ”·û¥‰Æ{r{W[¥X /NŠÑ\0BÇ*»Te‹`ÀgvTRh–s>¤e"ê*«21.ÑŽ8ãõ¤$ãPƒX>ŠâèÃw"ÜÇrfbñB¿ëq9ÎB�í'µjøvyg]SΕä٨΋½‰Ú Œž€zUˆ4ˆ¡º´¹3Ï,Ö¶ín­#½IRK`r~QÏÖ ·Ð­ô·jwè’Ü5ÃÛ†�Ë,NHû™Çã@ÎZSUŽÏ÷q\O9K{™î".[ÏEuõ!I#ÜVî�¯Ù¤z¥Õî¥Û> VÞI¥Âí1FÀ.{rN=êýŽ�i`Ö)&o±G$qï`r‚sǰÇJ—HÑ­4H®b³#žvœ«B’ÂñÀàqHCV»½:–¿5«jÎÖí‚[{ƒäB<¤bY7r:’œÔþ ñ4vúÝœ‘j‹6qÅ4‘,›EÈ•€#ð™oÄVõφ¡¹¼½ŸûBþ$½ ÏNª�… �»¸p;±…eoi}l¡Ú+Üù�ˆáv 8è(="›]Ö55}BîÚ9c¶—Ëä bíýï½À‡s7NØ«´ µÏÚ£gòf‹k²m•v“ƒŒ�cÔ–Š)ˆ£©Þ½¤ � ’îvòàŒô-êÙ$û ­§Ü\Û]�7P›Î”¯™ÁP¾jÿ pIüˆ>µ.­¤A¬CS¶ÕFÜ?sŸ¤ˆÃòªºg†í4«¿´Âù}¥qöh¯ºF§õ  šJ !¦#Ѩ¢Š‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( I÷GÖŠ$û£ëEp ¥¦Ž‚�šÐ‘h¤¥¤0Ü»‚’7�3ÉäŠZÇ×–&†›ÿ´C±˜¾þþÿðïgŒ~©›äÇçlóv�û3·w|gµ ææ;w¸¸�$H2Ìj�ü$ ƒ ¼‰I|ÖSFƒ>¬ÈüMW×îãŠçL¶‘ed{�9ÄP¼­¶1¸|ª ûå+œ´…À\iÍxæŽæâ–’àHÞ@ïƒËP f«Ígoq]ÁÒ}ÈÞ@¾€òj¶‡v׺%œïŸ0ÆL‚õù[ƒÈäç5£k§ê–¦�§ß!Ø/,®1æ.Õl>¸ÁÚG'½ :ß·Z}ŸíjƒÉݳÌóÝÙÛŒôÎxúÑýœ×oÜ<~5�_¨ê+˜[ø¬>Ê\.žûWÊaŒJ~N}³óýj­´«í>Ê&°Ô-g2}–ê <øþRÇ\Œdn÷ êm5}6úCž¡ipàd¬3+œ}©Eý™»6‚îrL"A¿þùë\‡Öêxü7o46¶Ê�µÅ´èK<̯–NÞqä ›ýþ;+ÉþÙÞ›zyÿkÞ3ï�ÙÏ·µw7öv’$w7pBò}Å’@¥¾€õ¨nu­*ÊsÖ§e£Ç,ê¬?kÛû3ûKÄ?Û_fó¼áŸ´cþ=üµÛŒöÎî�óTÒ'oxU®£ÌÆöL‹óÃíÏüצ£i+[¬WÉö…f„Æw Ô‚8Ç#ó©!¹†y'Ž'ÜÐ?—'ålÇäGçXÂHàñeä’á"·Ócdã…Rî\ÿã«ù ˶¹¼G±´ûjéÍy º„Ó2+f`|±»Ž ÷À×A<70¬ÐJ’ÄÙãdu©+δÝ[PƒGѬ,™Ñe†iLÑ·9‘�æ°\s“ŒžŸZÑ›^Ö-!Ü”[ËûHþƪªNX#FC™_©ã4ëžêºŠÙŸJ¬È¸<…ÆOê?:–¹[û‹ˆ¢×u(f&]>ÏìÐÊT}ð»Ý±Œu(:cå¨./õËYna[ás(±Kô\mš0=Èç‘ë@…%qóëš…èû^Ÿx#´ŸP†ÒÝŒJÃnö÷ùŽ:ÿ Fu-jÝ.f“RYRÇQŽÑ�Û¨3+Éb:IÆ1Ó½vf’¸ø5­fë\�F‡ÈŽøÛ´$ÂF ·™»0ã¶z×D?´ö.~Ç¿í7ÞÇ““Óý¼cÚ˜‹´• jß?Ú<�žgî|¼çfÞÏ|ç§µK@7Çš^Cc$€ œž€ã‚sÚ©hòÅk¨{µÓäBè%µ–1Ž£.£!ºýsëL†›KILG£ÑE™aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP$û£ëE}Ñõ¢€<ý~襦¯Aô§U’´”P1v©`Ä À`sŠZ­=ìÓÛÃ33’±±)oîç±=½pjÍ *ÞiÖׯ6œH<ìx¦x˜ÔnB«ÿ`ÙÿÏmGÿWü]XÔ/~Áhf™\²Ç`ã{± {rzö†Ê{„¹–ÒÞIÓîÊñ‚Ëô8ȩՃ(e ‚2ïYw> ³´{ä”KºÌƬ¡A23Œª Ï$ôí@~L_hóü¤ó¶ìó6�Ûsœg®3Ú¢‡O²·�ç†ÎÞ9ŸïÈ‘(fú�2k<øŠÕmn%x.X'[v¶`¾avÆÐlî9õô«¶:„Z€¸1+¯‘;ÀÛÀeêG=)(±´X¡�m`ÀCB¢1ˆÈèTvêzP,lÅÙ»� ’0f�ÿ÷×ZˇÅ:|¯¥©Y£þÒßäP*@ÃsÁ$ñÖ´l¯â¾’í"WÖsî– ­‘ÏL0 ÜXYÝÈ’\ÚA3Ç÷HÃúÒ¤–¦ÙæÄ’yl7¨;Xt#ÐûÖ5׉íí.¯b{+֊Ȩ¸¸DR‰• Ÿ½»>•jó\´±Ô,l¥Þd½$FÈUé‚Ç<HÜÐêZ4œ›ä’Xó Á'–@ß`•9ß©õ«wV·ˆ©sm ê‡*²Æê3To5è-.ÞÖ;k»¹£PÒ­´[ü znär}Oµ6Y[›Ñ/š¿dHÙ²œ¹“;UGRÇÆ&€.ɦØKl¶ÒXÛ< r±4JTP1ŽæžÖ–Ìa-m 0Ô»ã/§•^ÓSŽîökO&h¦†(åu�ç‚yN­P>)·hìZÞÆöá¯V�"TÜd',~Ù  (4ëh,åµeó¢•ÝäÛ˱-ž0G8úTÂÞ0˜C�'–(ÎÞ»séíYɯ[Ï ›ÛÆî÷7�¬…s¿pí´)ý=jÌ7Þ~¥uh±ü¶ê›¤ÏVl�¸öOü €¶6qÁ ià oŽ5ŒFÎrc’y¡¬­YdV¶„¬Ž$pcgÃSÀçØTvZ„WÒ]¤jêmg0>à9`ªÙß0«TÄWk 7»mi\¯c.?à]jz«y{öY­"XüÉ.fòÀÎ00X·àý*Í”´”À¯wcg~Š—–�\*œªÍp¨ÍCm¤i–Sy¶šu¤ãâ�TãÓ U¹"�¤‘‚¢‚Y‰ÀwªöWöÚ�°¸µ“|d‘Ê• ŽÄE,RRšJ`zEQY–QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2Oº>´Q'ÝZ(χÝJZEû£éKVH´RRÐ3;W†[Ëo°E²ÜWX”cœwoAëÏj¿ ~L1ǽßb…Üç,p:“ÜÓ¨  Þ5­î”IµX–G™šê&=Ê»TÚyùÉÃíXV×Q[Éí[Gžˆá“Y�h <ˆ½É®ö–�~•åðõ—™‚Èž^àr)*à��{ƒ\ýþ‡yqâ-[U· ‹V‚[4`Ds0O˜{’2¹íší( kìb÷Åzn¥ö[ˆâ{F–E‘ …‘px=qÏô¥Ñ/M•æ¡g=•ú¼ÚŒ®Ž-$1•cÁߌcÞºZ(…²Ñ&½³Ñ-.mç‰E¥Ò»” ÂåСö9JÐðõ¾¸lõ#Gex÷ìÎÓ[™@#EÜ£rðH$êóE 8RÀÍ©kÉ5¶­$Ó´fßìÉ'“#”e¿€�Ã�Ù©¯4­sV�ãH�O QE=¹&Gˆ 7!Ü0 „Œà绊(—±¼¸Óo/n§Ó/¤�Qòîcòa,ÊÞZ©�ÇU ŽüsTo´KÝG_Ôu(–x.-â·šÒ7ÿVò€I±#•àñ¸×mErñÞÍk«É«>›~ÐßÙÄGgŽD-”eê>ðäñÅR¶Ñ/–_@ïujÑ[Ü™¥·ùlÌ�´’õ‡ÚfŒÐ9%ŒF­¢„, áZI$Èà6æ>§kU ­æ¹Ñìï$·š{[»Æ»¼‚%%Þ&F ŽHG‘í]eÅ´qyw$©�Û]r2:SÕU"(UQ€À€<ÿû6óû.éml® ²:©•íÞݘ´>R�òn—v8·¶*ÊÚ_é:}¶§cÅÔñ´Ñ³DÂ7P’B«…<ž5ÜRP;£Ø‹}FPw&™h#-ýé¤;œýp ÿÀëR-?ÉKEûeÛýœ±ËË“.AûüsŒñôi"Ž6vHÕZFÜåF7“êpü)ÔÄCmoöhÙ<é¥Üìû¥mÄdçØt¥¢Šb1˱2ìŸÃN^�‘ב�Jéi())M%0=&Š(¬Ë (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€'ÝZ(“î�­ç£îŠu5z ZБh¢Š@SÔ/d°Î`2Z‚|ö^Z1Ù±ÜsÜu«hë"+£F«)È#ÔU[ë9/„pvZœùʼ4ƒ²ç°ëžç§­[DXÑQ*¨ÀP0 eZæh-¢ŽÙ‚Ü\L�ÆÄgnOÌØï…  ç’÷YÚ“Ç{;$©+Ú‰&”ä+¨…JîžâµuÛ[Ù®ì'µE 2û)‹Ì @ {òãÁïȬ˜4‰mn>Ño§jðÏÏï#‡MVç¯ f�}¼ésmÄg1Ê�Ôú‚2+Ä~&·Ñì®Ä2£_ÃõŒ£2‚zn#�Ÿr*ö…m=ž‹mmpxÁP‚Bäíd.3Ž3Ò±µ_ê—kÖRÙ˜5#½šrÁãm¡qÀ9(úg¡  ¹µ½>Úùlå¸Û;2¦667@[ä`T¬¼Wat·� –¶˜Ç–ŠO›�/ROÝäÕ=_BÕµ+¹±q[™¢’-òȦ0¥I]ƒå<‚wžqô|š>³Û¢³žÙažïí ™�ÆèÉQòŽ>ð9  —šÜsé�ɦN —7 jŽPƒóeHÈ pEIqª }Za,ë�¥°’vl`»·ËÏ^ž÷…c.�y¥éíq(I-Qo¶@YþB¡|Ü’ct›�OJ»—ýEÜ÷¢æ12œ°ë‚¨?:@Meâk{«íP¼¨–6qBâGFF·g!¹ì1Ç~õzß^ÓnžŠç-,†%V�”ï »0qÈÎ3Ú±.<9¨êM©K{-´RÜ‹v‰`w!Z&c†<ŽFåÌ‹áË�ìÙÊ$êFhçŠCs,˺?»¹Ÿœu†€4oõe’ÛËÓæÍÃÞ- mŸu�Ëõ8PÇÓŠt^#Òg¼[HîÁ™¤h‚ì`7© ®qŒðxïÚ©iš\¶·¶Òd±¶i\²O!ùˆ=ñ‡ÿ¾Å6=é,í¡2Cº-Q¯Xäãavltë†ã@c[ÓšÚÚä\f+’Â"²Øž1‘€§9ôª«âÝ ×r߃• FùaþÈÆ[ßÇz©‡'‹S½•¥ˆÚ—ìqó˜Ú\ ãŽGìÆ¦°Ñ.-gÑÞ",lZÚ]¤òÄ ÊñÓå=q@'×ôË{x'’íLw ¾"ŠÎY½€ Ç<žÕŸ¨k÷I%äºz[Ëkan—³’LªÀ¶ŽÊ3“ž¢³ÓÂW�ÛØ2É“ÁlmåO´Ë ‘¸°!“¿B?•Y›ÃwQA5­ƒÛCmykµÂ±bc ’™Î~SŒØs@Rø—H‚àÁ-àY¨a±¾]À$ãG'ŠIu ȼMm`ÉÙ'†I†|̮޽€ù½ê�ï‡n'µ×¡…áQ~±¬˜ü»QWæãÛ¶j{»=^_ZßE—Ù­Ñã¦p쯷'1‘·¦y¦"Êø‹J{ϲ‹±æ‰L`€ãil`ôçžÕ�ˆ.¥× ™[`†åíÌ Ÿ>0ªH”ó�§·ñMP°ÓïµD¾µÝn–ÚòÈï–ó~Yw` c’9ü*Ü>»ŠúvµÁt÷jPßh�1c±¸Æ9Áäð¯¢ÞKy§fàƒq �Ä tb¤þ8ÏãWë/@…ÓOyäVVºžK�¬0U]‰P}öâµ)ˆ¯{y�¤—çjŒ–'€îIÀZ¯§jwæÅsÙ®áÇ™ýØî�xÈ?ÌÚ¡Öìn¯VÙ¬Ûl°I¼0@Ï1¸=}?«§éº¢ê±Þjù›#d\+pqÁ g§sÇ¥nÒRÒSÒ¨¢ŠÌ°¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’}Ñõ¢‰>èúÑ@x: u4}Ñô¥­ –’ŠZZÌÖ%žÒÜ_A:¨·Éx\áfS�—=›ÐúñÞ¯Ã'› rltÞ¡¶¸Ã.GB=içtŠ6’FTE™˜à:’j¥¶³¥ÞN µÔ¬ç•²BE:³À«®D·gO±”¿Ùî®Z)Ѧôòdm¤‚2¢¹™eÒ®-õ9´õ¾Öï{æúfã°-Ô‡+ÎxF8¤3¾¢’¹}SNω´Ø–ÿQHîüö•öEPÀ�Ïju4W y%ÉÕµ¨-¦Ö^ò�,Ä#D§ÊR7çäëÉϽnéÓܶ¯®G<Ì|¡ÕÜv¡1dí¹ÍoQ\Dïz|§ê >©%ÏØÔï†l*63æH>ó_½ÀéR_ß]Ë­ü é°Âð›lr�ذþ ÙÇ=;P3³¢°fi£ñŽžVæãʸ¶™šÿ +³o¯'­WŠòXô}cRC›™î¤†ž…[ÉŒ~`ÄÐ#¦¢¸½_R¸¶Ð.ì´ËwÖ]³Ý‰¶0a·;GSÔr:žµ{Pñ•¥Ž©-¡X™ uI™®_-�¸‡–#=;õ ›4•‰ˆL­?eÅÔ—¯jðùŸsfI|ã‘·§ñT¶ „sê~@“í×m<’yqÇ ªY°p RGÅ@M%szž¹tö·�YY–+?6yÀQå$m |Ç‚xÀéÍE/‰HÑì%š™ ¤rÈïr«#p3µNKý¾´ÔQXZƒJž(Ñ^;©ÄSùªð‡Äg’;Ÿ­K¤1ŠÿV²É1Ãp$�=„Š�ûè·ç@ô”´”Ä”RPITõ+×´�V]ÌÞ\ž…½O°ŸaUì..m®Ž�7�)_2‚¡|ÕîSúï@t†–’˜—EVe…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ “î�­I÷(ÏÝJZA÷GÒ–´ )i(¤2­!¸žeRÆYŸ”7®;‘ÛÓ&§¬hüS¥MÉݺ0ʲØÎAÇeLºþžú}ÅêI!ŠÝÄr £8ÀÚÀ�ËùК�µÌíg5¢ÄòÚÎeÙ+”V7Ld�¿ž�«*M/SkNÎ >Ý5æF[¶! BBùC=3ŒòsÍ_¸ñ•i©ÉasyFŠäÊáGÍœ“׌þ"µ³@ š©>ŸÆ¡izìâKPá#xç�jµEV¶°ŠÖòòåËݺ¼�ˆÀ!BŒqèT¾Ð`¾º’à\Ý[<¨#›ìò¨ÎdSÈÁæµ3K@7^·¹�bK«Ëh"† pŒƒ€¸ ãŽ20i.<7aq(lÍE9 �ð’ª}Ðý±Çµè¤MÆ„.5ˆµ#©_$‘d$jcتq¹yLàíêôk„¾Ùº?°­ë^“¸’¤íÆ1Ã’ß•nÒf€1o|1iz÷9¹¼†+–41H;Œ|Ø óÀö8«£Fu»†êêݤ`òÇ €’�’<àÆ3ŠÒ¢€2.44]BïU´b5 `hã7îÕˆvÈ?*‚}HÚ:fÚÙEwsn¶ñˆÃBÀnÇ ‚OJÒ¢€0›Â–"!¼÷vј¼‹ ¸óPg²<žF:Ò\xRÎâ'‹íW‘Ç%²[H±È˜ªRxê3Û÷»Ed^h"òþ ¿í+èšßýRFcÚ¹=PžG½XӬ䷖öâm¾uÔåÎÓ�¨?ï•êM^¢˜%P ¤¢’€(jºL´)í…FÜ?uŸ¤ŠÃòªºo‡-4»¿´Bù}¥qöh¯ºF§õ­Š(”))ˆôÊ(¢³,(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠdŸwñ¢‰>ïãE <ð}Ñô¥¤_º>”µ©EP“ÚÍ:Y[›{»¦hìQ-v�Ê·³0ý qÛq«ë Åގ륋³¶ú&Q§Ê¹}Ü sŽG8ô®ÞÇC°Óôû{8"-ÎèÝ”n‚7ç{óQGá» ÇwæÞï˜Ìæá¾óm ÈPŒ(ã6Î’âÚK››{ E­¬‘™â £¸8¦G. #zôR;rzr(¥Ô+�7rúÖ4ÞÒç7‹ˆÄåIH§dEÂ… !q…A­º)i(¦ÑIE-”PÑšJ(¢ŒÒPÒQE”Q@‚’Š(¤¢Š)(¤ ’Š(¤¢Š`zeQY–QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2O»øÑDŸwñ¢�Ï;^ƒéN¦¯ÝJZÔÈZ)3KšQš(¢Š(Í.i(¤ÑIE-¤¢�†h¢Š(¤ÍQE ’Š(RQE”RPIERQE”Q@›ETQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE6O»øÑCý߯Š@yÒýÑô¥¦�º>”µ©˜´QE (¢€ 3EQEQE€(¢Š(¢“4´f’Š(¢’�‹IE%’ŠJQI@%-%”´”))i(Ó¨¢Š‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿Ýüh¡þïãE!žr¿t})i«÷GÒ–µ2Š3EQFhQIš3@ E£4€(¤Í´RQ@ E%´™¢Š(£4” )3EQIEQI@RPE”QE%z}QPPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE×û¿�?J) ó…û£éKM_º>”µ©�´RQ@ Fi( bÑIE-”Rh¤¢€ŠJ(sIš3Iš-”Pš(¤Í-%PIEQE%QI@Q@ EP§ÑEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ~”Pý(¤3͇ÝJZ–ÒÚK¹qã¦I=­?ìúyÿÇ?úõ¥ÌìcÑ[Ø?ôóÿ�ÿúô`ÿÓÏþCÿëÑt;ôf¶°éçÿÿëÑýƒÿO?øçÿ^‹ ±�šLÖÏöý<ÿãŸýz?°éçÿÿëÑt1¨­ŸìúyÿÇ?úô`ÿÓÏþ9ÿ×¥p±�El`ÿÓÏþCÿëÑýƒÿO?ùÿ¯EÂÆ=±ýƒÿO?ùÿ¯Göý<ÿä?þ½ ôVÇöý<ÿä?þ½Ø?ôóÿ�ÿúô\,cæ“5³ýƒÿO?ùÿ¯Göý<ÿä?þ½ ÔVÏöý<ÿä?þ½Øôóÿ�ÿúô\v1©+kûþžòÿ^�ìúyÿÈýz.1h­¯ìúyÿÈýzOìúyÿÈýz.1©+kûþžòÿ^�ìúyÿÈýz.1i+oþÿúzÿÈýz?áÿ§¯ü‡ÿ×¢ácŠÛÿ„þž¿òÿ^“þÿúzÿÈýz.1(­¿øG¿éëÿ!ÿõê�ö™-�XVµ•äi×v6²m çN õÅGg›m«^Þi:}Æ�kšþmÀÓ;09b`œØÐd/­ QÊ. òåRÑ·˜0à ’p52:ÈŠèÁ‘†U”äê+­î­/´ý)nÖÈÈ–?4—¶öûòÅÔ(/,@¨2ãqù¹®ÖÒòk/iWvnµ·âQ¤Ak³!ö†a!<ŸöIϵwÂâ1„M•z a¸qžŸJ’¼ÿIÑ®µÝIy¨êpÜ@mîÕ.!¶s½9(¤BòžAæ½€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ £¬È.oøþ„)’ëZ\Í ÷ú6Ð^7c••{í>£ºõéÖ£¼žK� Ie� -‚ÏÌpÆ};v ºŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿J(~”RÂi–0j6w6÷ JŒ ±VV!�54ÞûD°É6µª;Às/ÊqŒãg^zõ¬Ïx†ÃU°[«i[ɘ<ÌVÂØèy®Ç­SÜ•±…¨xrÞ] K8ÐMµ„rÌI;˜‚Ì[““ŽMQ¸ðœ·W󬲡µš+�ón>sI6ÑÓŠŠÎxÕÑHg3¬øfóS¾71j’@~ʶ &W‚O˜ç“´�£ <œñWåÐÒMD¾A±–Ô[ÏnÄኰ(Gà\\�J×¢€8�øA®o---®õ m’Ú%Ú]M—‘GÊÛI »O<.I‘È­ �ê×zRjðFIóåq-öTÈù:Øí]=ÍÜh˜’­õV–á“ɹšpŒ{û¯Ìÿhä×IEQEQEQEQEQEQEQEQEQEQEÉ!ŠmžlHû:îPv°èG¡ªšÇü‚æÿ€ÿèB¯VVµuÚ5¸`dr8€9 ºŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿J+/]Ô%²‚!n¦fÎàmÇøâŠÎU#f\`Úº>>ð׉5/_†±˜å`$…ÆQþ£×Üs^÷§^Éwcò*q’QEt³�¼ÃíG˜}¨¢¤ óµaö¢Š<ÃíG˜}¨¢€0ûQæj( Ì>Ôy‡ÚŠ(y‡Ú�0ûQE 0ûQæj( Ì>Ôy‡ÚŠ(óµaö¢Š<ÃíG˜}¨¢�‰æj7Ÿj( Aæj<ÃíEy‡Ú�0ûQE0ûRy‡ÐQEaö£Ì>ÔQ@›ç7 £ÎoAE#9½sz ( ÎoAGœÞ‚Š(ó›ÐQç7 ¢Š<æôyÍè(¢€9½sz ( ÎoAGœÞ‚Š(ó›ÐQç7 ¢Š<æô¾sz ( ÎoAGœÞ‚Š(ó›ÐQç7 ¢Š<æôyÍè(¢€9½sz ( ÎoAGœÞ‚Š(ó›ÐQç7 ¢Š<æôy­è(¢€5½kz ( ÍoAGšÞ‚Š(ó[ÐQæ· ¢Š<Öô¾kz ( ÌoAG˜Þ‚Š(óÐQæ7 ¢Š<Æôy�è(¢€1½cz ( ÌoAG˜}Pù‡Ú�0ûQEaö£Ì>ÔQ@˜}¨óµPæj<ÃíEy‡Ú�0ûQEaö¤ó ¢Š<Æôy�è(¢€1½cz ( ÌoAG˜Þ‚Š(óÐQæ7 ¢Š<Æôžkz ( ÍoAGšÞ‚Š(ó[ÐQæ· ¢Š<Öôy­è(¢€5½kz ( ÍoAGšÞ‚Š(ó[ÐQæ· ¢Š<Öôy­è(¢€5½kz ( ÍoAGšÞ‚Š(ó[ÐQæ· ¢Š<Öôy­è(¢€5½kz ( ÍoAGšÞ‚Š(ó[ÐQæ· ¢Š<Öôy­è(¢€5½kz ( ÍoAGšÞ‚Š(|Æôy�è(¢€1½cz ( ÌoAG˜Þ‚Š(óÐQæ7 ¢Š<Æôy�è(¢€1½aôQ@ æj<ÃíEy‡Ú�0ûQEaö£Ì>ÔQ@˜}¨óµPæj<ÃíEy‡Ú�0ûQEaö£Ì>ÔQ@˜}¨óµPæj<ÃíEy‡Ú�0ûQEaö£Ì>ÔQ@óíFóíEo>Ôo>ÔQ@óíFóíEo>Ôo>ÔQ@óíFóíEo>Ôo>ÔQ@óíFóíEo>Ôo>ÔQ@óíFóíEo>Ôo>ÔQ@óíFóíEo>Ôo>ÔQ@óíFóíE»ÏµϵP¼ûQ¼ûQEϵϵP¼ûQ¼ûQEϵϵP¼ûQ¼ûQEϵϵP¼ûV^µ©Ï§Û£B³º®XŒœQEL¶ÜçdžK™ ³9g=ÍQ\YÿÙ endstream endobj 43 0 obj <> stream ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ•ª"ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ë~x~tÙ5¹# q3´p’>â ää}zErŸ ÿäCÓ¾²ÿè×®žKˆa K,hO@Ìm]¹U‘•£MQH A¡µ‰¨QEQEQEQEQEQEQEQET°�‚{ô¨ªX`?…°!@ÑL–h¡Ë*FMÌiQÖDŒOB§ Ñ`¸ê(¦I,q(i$T‚‚Ç$à©Àñô­éÏ›Fc8ÛTCEV¦aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEg>¿£E#G&¯`ާ ­r€ƒèFjÕ­õ¥üfK;¨.N C p¦E+ŽÄôQE1Q@Q@¾ÿȇ§}eÿѯUüXöÑjÈóA­öuÿX�°7LÕ�†ÿò!éßYôkÖ¦«áÛ-^åg¸i•Õ6~í€džãÜÑJ¤)â§¶¡RœªPQŽúE¾³ ƒËH`P£€«À¯DÓí*ÌäœÀ‡$䟔w¬1àm(t’èÀ×ü+¢·�-­¢‚<ì‰.NNÀ«ÆW£Q%Hœ%´Ûsg3¬ë3húî¥uûÉ ´ÑM×ټª̮ßP ÅVÖ|WªA£k^š,ï`ÓÍå»<êÿ' ±H §�¼ƒÇ5¹©øvÓU{ÇžIÔÝØµŒž[ˆÉ'# üÜŸoj[¿XßI3\y®³YMØ2r{g>ù¯<í1/üsý�ö{]B (µ·ûD±¾ ¨�2@ÚÌ£s—ÏLä꺊߯‰o-¤"m7Nš.qü‡>Übº¿øFcSÔRî8ü“t®‚I#É!_åÚ@ÉÁÆFO<Óï<3ez÷¯,—ÞÛGm6ׄ$«r>ð,}½¨ƒøˆXϬ‘ÒÉ£ ¤i%ÇÈ^HãÆ »_›ž¼äõ8ªMã綶Ρeeip÷rZ¯¨�ÇÎÍ# t’OAÎ,øƒÂí6›x–~}Ã^ÞCst»ãÞB*¯Èl'äS‡ÈëíMÒ<7vö~]ì÷V¢ÞMÚ{)…g·R¸`|µòÈ'?.éßu¿�Q:riZh»’ö+‡é*¨� ª0݃•%Žg·äDÖ †!û¹ãæÏlVüz,I¨Yß=ÍÌ×°I´ŒðåI-�×䯵U�ÂÖ�ç$7qI`Îb•ws–VÊàƒÇlð9  ž(M@^ÙÌ£P})þКl›f•Úø, ÊŽy!ñ¬öVZE¹ÕüËr·RÜ,[Ô6ß›åûÇé×®+WQÑÆ¡2Lš…ýœª» ZÍ´2ç8*A_Ç÷¬CáF�[µK)®ìtû}8Û¬¶ó.âÞfJ�Ù'#'8ëß4·ž7ŽßD¶Õâ²Vµ’ÜÜ:Ër±ÊÎåTä³ AïZ)¯MyªËi¦Ø}¦v�ngi„a ¨``î!XÓ¯sÅV¸ðN™4-3^ZÁ%�±’(%IÝ€r ÈÜ܃ÎyÍ\ÿ„rÝ/¾ÕowylÌL�ÈϰaK8dc @6>>ÓïµÈ¬"ò MpöѲÝ!—zîå¢êªvœ÷ ×]YVzZ}á–Úòñ-˳ý�x0†bI c#’N3�jÕ  ¬1X öº6—6§0L±,p6m|1ÀÛÔñŒÎðü³ë:‹Þë1›mJÓˆôâr-•†7çøË üÝÊŽwg¡šÊÚâêÞæhƒËo¸ÄI8BF ¦qÆzŒœu4Keo5ä�ûD„rA†8ê:pxȨbŸmÿ-ßÿÙE2¤·y„÷|�ÈP/ãcÉ`ÓCœJ‘w÷;å-õ¨y1A(è@Çá^‹¬h6šØ‡íM*ù9ÚcluÆ{{ ÊÒI.ÿïµÿâkÕÃbpð¤£R÷ÿ‚yµðÕ§UÊCSÃryº³äœ—êsüm\‡Å â‰l<Û‹E@Ù0Ï«Kjd$€¬>öÇ(û³ÀSëšî´ûtˬàÜb�8Þry$ŸÔÖ~¿ noôŸ(E"VRÊÊ\€20Ä Žp ãšójÉJrqÚç}4ãžö8_Nš´déº~°^ú+;{é5FœÄâÕdbŽÑ‚›#3c§5�¯YE5÷ˆÌ:]¯úàçì�ù«�æ Þ¦ÖB®$bß.C�›¦}ÓÂ-`úyŠëÍû>¦÷²4¹ÜÉä<(¹ç%TÆ2zí&¨^|>k鯮§»²–êöVyVçOY¡^6©E$2°P;¹#8¨,å´ "H¼ª;¬‰ÆÚAjÚs˜äÚù€ŠÁ±‚rT¼OS�§eB¶V×Ö¾Ô<˜. ò¬å´@f'd™y¿x~V°Æ1Þ½CFðœºN�{jE�϶òCØéæÝ˜à€]·¶î¿Î±[áþ²Úlv­­ÄÁUC%én8Ã\²öî˜ö  Iu¥-œS_Am5ž…ÍyN˜C˜ßsî�zÐ`ó[ž‚X5ÉYa¸žiµÀ.å¼U�T»—ÿvüð~CÐóŒV·‹|%w¯Ï{%¼Š¦{´LÞKS¹Ë3*pàVÈ<Ž(Ò|1¨iZÔÓÃm¥ªMy,ò_ïf¸hÝÙü½…0X¶h�³:dÖÅ5}ymµ öŽ»:Ê× y t§$÷°NqÒ¶4ùãIÓ÷Ë=Ŧ¡¬…ÜÜ›�Š�3~êbIJù‘n 6‘’00kz÷Cñ=õ݅ĺÆ�ÆsåäìOJÖ’Öæu„RÑ]QKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKEs×VÛ®¥?ÙZì™rwÅ©lF窯ž0=°>•§¥ÇåÚ°û5å¿ÎNË»�9úwo~=³ëÅ6]Öi^F–ø3’Ä%üê?è*Í­¤vqâi™IÝ™¦yOæäŸÂ¥-JlšŠZ*‰³åÔ.£•Ñt[éIÑàÃ{ŒÈæhÑHe{Y丈¼¶“[6q²b„Ÿ•˜~µ=-Ä%´P_‡üSOýyÂñÁD'¿ÀëglOý÷56[hR mfþ#P±Æ« £ £'z“Vl´ÿ²M4ïu=Ìòª«I6Ðv®pUQŒ³vïRŠ.QKEQ"W9ª\Üiw².– Í*™'‡ia?òÔøüŸÅŒŽùé*-a¶2˜�)•ÌŽs’Ì{’/aÅ'¨Ñ—oJÖò™Äß½iËdÊÄ}â/`¥\¨­íaµ°&Åw2�Ç®o^;ä÷©¨@^øoÿ"�õ—ÿF½uUÊü7ÿ‘NúËÿ£Zºªç«üIz³z_}Š(¬Ë (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ š¸~µ Hލ¸äúÐÔT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} s^%ÿ�ŒõÈ3Tìõ¶n�Ó¸®ƒU°�QUeb’§‘Á†±ÿ°.¿ç¤?™ÿ Þ2‹�™‹RRº.%õ´ƒ"UÍÅ}mÉ•O²óTÿ°.¿ç¤?÷Ñÿ ?°.¿ç¤?™ÿ žXw+š}Š÷šƒ\�ˆ6ÇéÜÕ*ÕþÀºÿž�ÿßGü(þÀºÿž�ÿßGü+U(-›ŒžæU«ý�uÿ=!ÿ¾�øQý�uÿ=!ÿ¾�øSç�qrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏHï£þsǸrK±•Ejÿ`]ÏHï£þ`]ÏH3þ¹ãÜ9%ØÊ¢µ°.¿ç¤?™ÿ ?°.¿ç¤?™ÿ 9ãÜ9%ØÊ¢µ°.¿ç¤?™ÿ ?°.¿ç¤?™ÿ 9ãÜ9%ØÊ¢µ°.¿ç¤?™ÿ ?°.¿ç¤?™ÿ 9ãÜ9%ØÊ¢µ°.¿ç¤?™ÿ ?°.¿ç¤?™ÿ 9ãÜ9%ØÊ¢µ°.¿ç¤?™ÿ ?°.¿ç¤?™ÿ 9ãÜ9%ØÊ¢µ°.¿ç¤?™ÿ ?°.¿ç¤?™ÿ 9ãÜ9%ØÊ¢µ°.¿ç¤?™ÿ ?°.¿ç¤?™ÿ 9ãÜ9%ØÊ¢µ°.¿ç¤?™ÿ ?°.¿ç¤?™ÿ 9ãÜ9%ØÊ¢µ°.¿ç¤?™ÿ ?°.¿ç¤?™ÿ 9ãÜ9%ØÊ¢µ°.¿ç¤?™ÿ ?°.¿ç¤?™ÿ 9ãÜ9%ØÊ¢µ°.¿ç¤?™ÿ ?°.¿ç¤?™ÿ 9ãÜ9%ØÊ¢µ°.¿ç¤?™ÿ ?°.¿ç¤?÷Ñÿ 9ãÜ9%ØÊ¢µ°.¿ç¤?÷Ñÿ ?°.¿ç¤?÷Ñÿ |ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìeQZ¿Ø_óÒûèÿ…Ø_óÒûèÿ…ñî’ìAðãþD=;ë/þ�jê«ÁV`𥥨bÁLèdcýk~¹¥599GftF. F[ ¢Š*FQEQEQEQEQEQEQETCt¼î*½±KåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¨ü¯úhÿ�Wý4΀$¢£ò¿é£þty_ôÑÿ:’Š�Êÿ¦�ùÑåÓGüèJ*?+þš?çG•ÿMó  (¦!!Š1ɃëNvÚ¤ÐÑUK±?xѽ¿¼:µEUÞßÞ?�ÛûÇó  TU]íýãùѽ¿¼:µEUÞßÞ?�ÛûÇó  TU]íýãùѽ¿¼:µEUÞßÞ?�ÛûÇó  TU]íýãùѽ¿¼:µEUÞßÞ?�ÛûÇó  TU]íýãùѽ¿¼:µEUÞßÞ?�ÛûÇó  TU]íýãùѽ¿¼:µEUÞßÞ?�:9pä±EPEPEPEæ¾&ñ6¡&­=­­Ä–ð@æ0"m¥ˆà’G=k« …ž&|±9ñˆÐ�4�J¢¼kûoVÿ �ïþ?øÑý·«ÐN÷ÿükÐþÅ©üÈâþÕ‡ò³Ùh¯þÛÕ¿è'{ÿ� þ5Úx+ÄZŒ“XÞ9•ãO1$=q�>½EcˆÊêQ¦ê];QÌ!VjµÎÆŠ(¯,ï (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2ü>UùAÆOQ4’�òG¶òX lˆÎ$ùÝ´®@l �ÎhBßŶº‹ô»+Ûɶ‡d1y;³.XÉ·º0ã= 3Uñ•®�-¥å•ÊlŒH²¼¶ñÇ $ yW“Ãc;[Åp–NÆêdkë¶m>Ð¥¾©pØ/tÊà±ÚyVƒvGZÓ×D‘xÞòÎÒ[�s%¢`Gxû¥M€ƒ<_2픜08�šÞѾ#iš¼, ’)à·kƒ ÍÅÕIQ3g�Á¯ãS[øÙ¤¶�¥ðö¦—ÜA < ™‚³:ƒæcrqž1\÷‚tmB]>tº±m—6ÏË{�ß'Zåò:ðsëëÎÚZ}†/¶éºeÅ©‚V™g·†]åÔHŒw 'M¬ü¡Š¯ÅzEÏ�ôûm>ÂêHÞ6¼i‚i=ÛÉù¶ðWžKiÚ�4ýKU’ÂÚ)å`ÑyrC:´oHˆAó㓞+–Öí’ÛOðÌqCyv�oq1Q<é!fØù-oc‚Çø@úU? ®â�3~–Ál^íÒX£�¿ÑámÒ3å‰ aHÎqœ�ÒóÆÚt…­¾¡zÉqäH °œ…Ãír&ÖÛƒÀ<㊲¾+Ó§·½{U¹’kHÖG·–Ýí݃4.rAߊçõ ÿ_O¨%�¦¡k=À†æ»h„?h”1YòÌX’:Ò™w¢\é>º{±´—¶KI1ŸÊ�n#!D¬ŠÅrÇ s·'ž:K�\ÀϳÚ¼Ñ(Ü%Ac=PÃñÖŽ›©¥Új+¬7P¤è®`¬ Œã<ó^ce¦I‰à—û=eÕ/¤–A¤K‚6Y®OÈêw.õ_Jï¼ÿ"Fƒÿ`ëý´µEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPòñÿþ´²ÿ«4Ÿòñÿþ´²ÿ«4Fææ;Ynn$Xበ»·E’k jÚÌ©öˆ4ÚžUeº ;QÜ¡p}qSx’Úk­ d‚3,ˆñM岑\ ÷!HüjÄ:Ö›>žo’úlZFp¡=Cg¡Áé@Ø_A©Y¥Õ¹m��C 2°8*ñGµY¬/ Ê—–ú†¡ ÿG¼¾’H‡¢€±ò;d¡luù«v€3ޱ šH¢WYj@w|»‰ö‘øRÛj©<%Þ £"4�€»ò8ÆÜ“Ðö•y¬÷²È¨Â;…b©€äqÊœ€L{Ñad�¦Ü1�Ì °›Ye)è0¹<äœúТ뛇‹Ê¸Â¨lùžsÛ*i5;H‡ÏÙ¥sÊ#"I¬à}Ì$da]I rI¡àµ¹r�Úéå$1¼;Z0|Å¿º@õ�Æ€'´Õìî㈬ñ¬²û¢Ãp>•Æ··›¹~éuC¸å@ÏêqF› »7S;ywR­ñD£ çëŸÆ²ÚÒH4«Æ�#tA,Eä�î;tëÓ½t�Ï Â†T‘AÁ(ÀŒþ%Coç…o>8Pç�?P*j(¢Š(¢Š(¢Š(¢Š(¢Š)É÷×ëM§'ß_­Z¢Š(¢Š(›ƒÆv²Y›É´ëûkvÓäÔb’Qó¡@¥Š…rAï _­héºÁ¿¼¹´—O»²¸‚8åhî g(åÂ�cvcnù⸛)lmtv»¸ÐöÙÜh6ñkOq‹`±‡k€"Èd&~ï°®“Ã�›McQ´žËȼ[{y_í)¯wÆÍ(UÝ(pUÎ5tµãZßü‡µúú—ÿB5ìµãZßü‡µúú—ÿB5íd¿Ä—¡åf¿}Hl¬.uŒV±‡p2Ap½À’:’=MK�ªMÉ›xñ¸Ê²ÀÄê*÷…†u9?w;þë†_,òÊ1�ë×8õ#ƒÒ’ßKó-¢ìb]Ê™˜V÷º<~&½™Öjn=­ýn�24“Š×äÌgGŽFŽEdu$2°Áv"º¯‡ßòŸþ½[ÿBZå¦O.yËxö±$ûËÏCÀçðÔü>ÿ�ôÿõêßúÔc¿ÝgèVøñõ="Š(¯�>˜*¾¡{�¦Ý_L®Ñ[Bó8A–!A'¹â¬V~½'•áÝNO>h6ZJÞl2G„?2ŒŒ°ê9Ð{_YÝèVúºG(·žá-Õ~F;ša9V*F㜂AŒÖÅy̺ý¥¯�ô“yws"K ‹¹þe>]ê–]ÛäΧseS;�z¥ÇÚìâ¸òe‡ÌPÂ9—k¨>£±ö  Úέm¢i7:…Ô‘"C0H;HPOsÐVñþ‘$öÑÙ‹‹åy6O%�¼³$?»ß÷‘~ª#w±«þ0{„ðž§ökT¸sm *òl »[89ǧzóÝE5Mþ‰õI,¯. UÓšÞÚ/"K‰ £),„ü¨±d¹ÉÃ`�Åz¾3ðìVñÈúÅœM,BXÒyDLÊzpØ#>â£Ðüo ë¶ÖFFÕ.î�hfS"±®:äsUüAoo£x^ØýµïOu’ÎIA–Q‘°"(ÎðJáGFéLð¥Òë-ªßÏ'Ùµk†ò¤µ[Ë á"�­äW*Jºã<©*ÃA æµëDÿ�·‰?ì"ŸúKo[T‘á“»@· ç—ÿÐÍkÖ'„—o‡-Ç«Ê9ÖÝgGøqôF•¿‰/VQEhfQEQEQEQEQEQEQEGú¥¦+RI6Ð’阧ìe$¡=�¾ÿcõ©”#/‰\jMlÄŽÚÞ&Ý#zªjZ�÷ßì~´~ûý�ÖˆÆ1Vа6Þä”T¾ÿcõ£÷ßì~µB$¢£ý÷û­¾ÿcõ  «ßA{us7Û/!Kµ s N¡&mç*Hã�”ŠÖŠ$‚†% jTtp'ï¿Øýhý÷û­IEGûïö?Z?}þÇë@U=/M‡IÓ¢²��¢Œ±B å‹€w5c÷ßì~´~ûý�Ö€$¢£ý÷û­¾ÿcõ  (¨ÿ}þÇëGï¿ØýhJ*?ß±úÑûïö?Z’¡º´¶¾¶{k»x® |nŠT ­ƒ‘�x<�Ný÷û­¾ÿcõ &ÒìgIKhÈ’Xæ| nt*QŽ:‘±!M“GÓfIÒ[ iâO6e’%a#à �G' ³ûïö?Z?}þÇë@,|9¢i—?i°Ò,mgÁ_2uFÁê2U> ðÃ+Ð4ç,If{uf$õ;ˆÎÙý÷û­¾ÿcõ  w-…Ìp£Äá`… �˕Т6Ü€Tƒü+Ï^* ðŽŠ²Fék$a`GÌ«.ä µ°G ô¯ûïö?Z?}þÇë@3xCÃwÉ<Ú›$²1wwµBY‰É$ã“O�ÂÚòAo¥ZÛÇ+Æò xÄ{Š0tÉ\g 3Z¾ÿcõ£÷ßì~´Û«h¯-d¶›— ÚÛ$d8öe �ÀÒÚÛCei ­¼b8!EŽ4@À�¥ý÷û­¾ÿcõ  (¨ÿ}þÇëGï¿ØýhJ*?ß±úÑûïö?Z’Š�÷ßì~´~ûý�Ö€$¢£ý÷û­¾ÿcõ  (¨ÿ}þÇëGï¿ØýhJ*?ß±úÑûïö?Z’Š�÷ßì~´~ûý�Ö€$¢£ý÷û­¾ÿcõ  (¨ÿ}þÇëGï¿ØýhJ*?ß±úÑûïö?Z’Š�÷ßì~´~ûý�Ö€$¢£ý÷û­¾ÿcõ  (¨ÿ}þÇëGï¿ØýhJ*?ß±úÑûïö?Z’Š�÷ßì~´~ûý�Ö€$¢£ý÷û­¾ÿcõ  (¨ÿ}þÇëGï¿ØýhJ*?ß±úÑûïö?Z’Š�÷ßì~´~ûý�Ö€$¢£ý÷û­¾ÿcõ  (¨ÿ}þÇëGï¿ØýhJ*?ß±úÑûïö?Z’Š�÷ßì~´~ûý�Ö€$¢£ý÷û­¾ÿcõ  (¨ÿ}þÇëGï¿ØýhJ*?ß±úÑûïö?Z’Š�÷ßì~´~ûý�Ö€$¢£ý÷û­¾ÿcõ  (¨ÿ}þÇëGï¿ØýhJ*?ß±úÑûïö?Z’Š�÷ßì~´~ûý�Ö€$¢£ý÷û­¾ÿcõ  (¨ÿ}þÇëGï¿ØýhJ*?ß±úÑûïö?Z’Š�÷ßì~´~ûý�Ö€$¢£ý÷û­¾ÿcõ  (¨ÿ}þÇëGï¿ØýhJ*?ß±úÑûïö?Z’Š�÷ßì~´~ûý�Ö€$¢£ý÷û­¾ÿcõ  (¨ÿ}þÇëGï¿ØýhJ*?ß±úÑûïö?Z’Š�÷ßì~´~ûý�Ö€$¢£ý÷û­¾ÿcõ  (¨ÿ}þÇëGï¿ØýhJ*?ß±úÑûïö?Z’Š�÷ßì~´~ûý�Ö€$¢£ý÷û­¾ÿcõ  (¨ÿ}þÇëGï¿ØýhJ*?ß±úÑûïö?Z?åãþýieÿViQ6ä“–=M)�½TªRhú\·¢öM6Íî�È� Rÿ÷Ö3ZFÏQä7¨  pÙÛÛÜOëã‘øÐm h$€§îä,]ry$äÕ¿!½ECzŠŠŠ—ÈoQG�Þ¢€"¢¥òÔQä7¨ ¨©|†õy ê(**_!½ECzŠŠŠ—ÈoQG�Þ¢€"¢¥òÔQä7¨ ©É÷×ëOòÔS’-§$дQEQEg[xE³3]"Â:å1["ùŠz«`r¡©l4�7J ;O´³`¸·…cÝŽ™Úzš¹EãZßü‡µúú—ÿB5ìµÇxƒÁO¨ß=åŒñÆòœÈ’d ú‚3^¦Wˆ§F£öŽ×GaFu`¹ìp0\Ïk!{yä…ÈÚZ7*Hô⢮³þö­ÿ?_÷Ûÿñ4¾տçâËþûþ&½ß¯awçG‘õJÿÊÎNºÏ‡ßòŸþ½[ÿBZ?á_jßóñeÿ}·ÿ]O†¼4šrI$‚[™F€ÀQè+“Ž¡*ŒevÎŒ&²¬¥%d�ú(¢¾d÷‚Š( æ·†åO r `Á]CAÈ<÷RQEVÔ,-õ;),îÕÚ RFBG¦Tƒ�QߥVoé2M4ÒØC+Ìž[™Fÿ“m³…àp0+JŠÎ·Ðt»[¨®¢²‹íÄ!ŽW˺ è9"¥ŸIÓî¯à¾žÎ»·9Šrƒz}\{UÊ(‹èÚ|šmÖžÖàÚ]h÷œÈI~s‘’OOZµqoÝ´¶Ó¦øeC©?yHÁ•IEb/ƒ¼5‰£Ðtèž'WI"¶Tue ‚z�ßšÔ6p5êÞýúÄb “÷IŒtêOEUÓôë].ÛìöˆËbç|ŒìÌz’ÌI'êjÕPEPEPEPv­¡iÚäB=B‘B²f9ž"U†IB S�‘ÐàU3á )§IÌš¡™‘d:µÖåRA 3€J®~ƒÒ·h  š~›k¦@ñZ£€î]ÚIZGvÀfbXœ9=nŠ(Áw)wáK9Ð0V2`7_¾Â·ëÍüq<~³TšEPdÀ @ûíW5/¾žÁ ÓI)Ú$#Ü×D0’röTõ±„±K—ÚTêw”W™ÿÂisÿ<åÿÀƒþÂisÿ<åÿÀƒþÓý•‰þ_Å™�ö…ÿ™é”W™ÿÂisÿ<åÿÀƒþÂisÿ<åÿÀƒþeb—ñ_æÚ;þg¦Q^gÿ ¥Ïüó—ÿøQÿ ¥Ïüó—ÿøQý•‰þ_ŘhPïùž™EyŸü&—?óÎ_ü?áGü&—?óÎ_ü?áGöV'ùþaý¡C¿æzeæðš\ÿÏ9ð ÿ…ðš\ÿÏ9ð ÿ…ÙXŸåüWù‡ö…ÿ™é”W™Âisÿ<æÿÀƒþÂgsÿ<æÿÀƒþeb—ñ_æÚ;þg¦Ñ^eÿ �Ïüó›ÿøQÿ �Ïüó›ÿøQý•‰þ_ŘhPïùž›Ey—ü&w?óÎoü?áGü&w?óÎoü?áGöV'ùþaý¡C¿æzmæ_ð™Üÿroü?áGü&w_Ü›ÿøQý•‰þ_ŘhPïùž›Ey—ü&w?Ü›ÿøQÿ �Ïüó›ÿøQý•‰þ_ŘhPïùž›Ey—ü&w?óÎoü?áGü&w_Ü›ÿøQý•‰þ_ŘhPïùž›Ey—ü&w_Ü›ÿøQÿ �×÷&ÿÀƒþeb—ñ_æÚ;þg¦Ñ^eÿ �×÷&ÿÀƒþÂguýÉ¿ð ÿ…ÙXŸåüWù‡ö…ÿ™é´W™ÂguýÉ¿ð ÿ…ð™Ýroü?áGöV'ùþaý¡C¿æzmæ_ð™Ýroü?áWôïI¨‚iã” í2‘ìj*eÕéÇšKB¡�£7Ë©ßQU4Çi4è™Ø³ä±ÉêjÝq5gc©; ¢Š) (¢Š(¢Š(¢Š(¦³ª}ãŠo�÷¿J’Š�Î�ûߥtÞý(J*?:?ï~”yÑÿ{ô  (¨üèÿ½úQçGýïÒ€$¢£ó£þ÷éG�÷¿J’Š�Î�ûߥ(•à74ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ª—ú�–™’òá!SÀÏ$ýäÓŒ\�¢®Ä䢮ËtVü&Züÿÿä?øš?á2Ð?çÿÿ ÉÿÄÖÿU¯ü�îf_X£üëïFí…ÿ –�ÿ?ÿùOþ&�øL´ùÿÿÈ2ñ4}V¿ò?¹‡Ö(ÿ:ûÑ»EaÂe ÏÿþA“ÿ‰£þ-þÿò ŸüMU¯ü�îaõŠ?ξônÑX_ð™hóÿÿ�dÿâhÿ„Ç@ÿŸÿüƒ'ÿGÕkÿ#û˜}b�󯽴T—¶×ð ífIc¸­$²µ0Æ~ÏNˆó”}ýÍó}}ê¬>'0Ù-ªEuqò<›Æ�h'8l›õâ¡�_ *ö»¶Y=›‘&7)$‚8àŒû攣ˆ–ëòþ»|ÇB;1gÐä’ä…û5¤1ÛÅ,’<¬Pnœg$ž€RÉák¨®%‰îìÕceC)v\Œ….IÇ=1ÏZÒÒu˜n&»™Ö“ì°À�Ë: }¸ÉÜà¯aÁø¦\ø‚; ™à†k›ˆ¦e�Þ+²Œ²‘†Ôa—§nÜT{LG7"[À/’…¹›þµ3¡ðÍä€y“ÚÛ±�­ÂÍ!È1Ààç9¤“Dޝ¤º�.VááhXŸáåû¿{¿\c‡]f[`г/ësÊX¶qò’F‡­6}b;›+»y­ ó®^æ6ãËfàƒÇÌ:zVßí «÷ò2ýÂNß©sI°³¸Ò|Ô±þлÞt"r�0QGÞïëôª¶Þžî y–âÖ´³$1Í!Ì6ôëšf�ªY؈^M5e¹�÷Ç2ÌÉ“œ�ÜãÛ¨úÕ¬zn™s5¼wW©,Ó&Ú#rû†åA<㎕u¡'Êž¯ô~v·ÜTU)Est_ååþfU¾…qs Œ“[ùчcn_÷˜\çŒ`t=M5ôYã´Ži'·I%@ñÛ—ýë©<1ßëšÑ¶ñW‘ ³f” 2NQ\¾rÅ@Áo›©ªrkQM%–o �#ŽàJ@ÂýÒW�­Z–#›U§Ëú·âK� hõùÿWü_hWVï3Éž[„™b|˜˜ç¸ö=3Yuµ«x�õX ¹Fwá®ÝãϲÏ׋[Quy¹�U/ÝìQEjfQEQEQEQEMmisy!ŽÖÞYÜ ÅbBǸ§uáýA-¬š-.ó{@ZlBç æ8çŽ>P¿Ï½cU««”žÞÊ5 ˜Û=É‘Û�Á…g5>eÊôÿ€üÍ ágtU­ þCÀ¿ôYõ¥ ÆÏ«FÀd bÇÓ‚?­N'ø3ôc¡üXú£ÕtŸùCÿÿÐ�]ªZOüƒ!ÿ�èF¤Ô.ÓMº¹Œ)x¡y7B@'šø¹|Lú˜ì‹4U8õãÒb¾»‘"F‰]Ï`HÄÓSYÓä³–ì\¨†#‰ ‚¥O¡R2#·5#/QY­¯i©n³´î‰y/»#ùqž2;w¨�ˆm?µ­¬P<‚â5%DfS’¡z `ç9Î9ë@ôVL:í¢i–·7w1–�I_&7;ñÔ…ÆìqRO¯évë’íq,~l{ŸzúŒšÒ¢ªÅ¨ÚO,1Å0vš/:<†N9ÏNâ­P)dlúÓiÏþ±¾¦›@UmBá-l%•ÅÁP1þ�I ÏUPIëé@h®ëÅQC¤i9¾»žW¸�Úâ”Kló…ÆJã*;çŽÔßêÚƒ�&÷HÔn-ažS©·tb@båÕ¢v#j�¿'îäPuEydžïµçñ¥­öµq*N¯,б�¬ëŽ™n»TŽ0§®O§·‰5¹ïµ‹Tx-;ûKvhn„Íö�ÅxðA¹=x=hÑ(¬�Íu-•Ê]Ý=Ô�]Ë•ÕU™U°2úV½QE^C”R{ŠZj«_ §PEs^8Ônôýu¥Ì–ÞcùrÏœ— g†�l#nÑódñÆ95ÍZøÆæy–oR¼²ŒC›­4™‘ÝžWP­¹\Œ…NF2X€N(Ò¨¯?Öõ½R/Ý[Øjˆ‹ìË"BÖ…FI\˜Ø[HNÐW ƒþ³¶Ú¡áM_Åwz}ð/up‚ÉÚnfÜ@Ú^ƒ{‚ä u§Ñ^G¦øªôEiosâ JÊÜßywzlÎØr”9Á$±EùÎAÇæµ/\r éÖ€;ê+„‹Äº¥Î™©µÅÄSìð$–°y šI<¶W�ÝÈ+”nFUŽæ-ŒË¹pÁƒPG§›CÔ­Ò6’Õ±#ˆÔ++Ç¢�A>†�i 5Z‹ÙË]63è«WºuÖžê—1ªÎ6º·N½ ­=_I²Ó-”¶¼¬ŠÑÜmS¹�;ŽýÏJN´.’Öå*R³oKTV•Þ�ªXÄòÜZ•XȇV+ž™çôË­P²�{bß`ÚÁ¾oî� Áö4ÕZoi/¼N”Öé”(­'Ð5H抵>d™ ¡Ô‘�“œ—øª·–WncØåCAàŽ¢5!'h´ÁÓœuhí¾Í#AbcFFQèNìÿ!]µp¿æ%ÿl¿özî«ås5lTþ_’>‡ÿÙãóüÏ4ð€Ç†->¯ÿ¡µjÜÚ[Ý YâW¦z�Æ©xvaðý�·2^1*y˜ÜüØ8ã#v+N¥Í©óEØJ>ï+3¿°´ßùöÿÇÛühþÂÓçÛÿoñ­*þ³[ùßÞÉö4¿•}Æ[húJ¶Ö‰Aô2·øÓÿ°´ßùöÿÇÛüjµô¶�]NÒÚÁ#dd@Ç êÔí®"`°B¼c(¸ÇÐõÝx‰EIMëæÿÌã•Z1“N î/ÿai¿óíÿ�·øÕe²ÐœÜ#ݶ˺Vç'Њ֟þ=äà�ðP°éè:ý+Èb·�®%†Ûì†Tž¢?Ù2G¸<ÈÙ$Ÿ—‚óÉQ�×5Á,UeößÞÎ凤þÊû�AÏ…¾Ïöƒuh°o1‰ç Xs€K`þ¸ðˆ¼û!½²wí]óŒgv3žÝkYÔuü'<—’Yí�H­[kˆÙÀCóäd Ç÷±ï\åì±ÜkRE-øö—[àxgµÖ;wúíi<]ç{ÃÒþU÷“w¦hö6’Ý\Ų—s¶ç8¼‘´m)b2À7óõë\ž©§ÙÚø‚âëQ²WÓ˜­Ë]5›\³¨�Wfà¤*�¤’Nyüj;kg±}ijÐ-¶Ÿ9‚émÑŽá�J�Ämá”ýFM?­Vþg÷±}^—ò¯¸èO ÆÉ}cõ¡îö’§�pZ®Ûéz5ä =ªÇ<-�²E1e888 ã­r¦òþ —X>жÐÞZÀpÛù\DX6G™’]¹¢ºO Æ’xu¢aò5ÅÒ�83IéBÅVoã{‡¤¾Êû‹ØZoüûãíþ4ŸØZoüûãíþ5GÁñ$MÌ1Œ$w÷*£9À0ÐSXšßÎþö'B—ò¯¸ÍþÂÓçÛÿoñ£û MÿŸoü}¿Æ´©1Oë5¿�ýì^—ò¯¸ÎþÂÓçÛÿoñ£û MÿŸoü}¿Æ´h£ë¿�ýì=…/å_q�ý…¦ÿÏ·þ>ßãGö›ÿ>ßøû�hÑOë¿�ýì=…/å_q�ý…¦ÿÏ·þ>ßãGö›ÿ>ßøû�hÑGÖ+;ûØ{ _ʾã;ûNÿŸoü}¿Æ�ì=;þ}ÿñöÿÑ¢�¬Vþw÷°ö4¿•}Æwö�ÿ>ÿøû�Øzwüûÿãíþ5£ŠLQõšßÎþöÆ—ò¯¸ÏþÃÓ¿çßÿoñ¤þÃÓ¿çßÿoñ­(úÅoç{cKùWÜgaéßóïÿ�·øÕ«{H-¬*×OãSÑJUªIZRoæ8Ó„]â’:]'þA�ÿÀ¿™©5 w»Ón­£*X^5-Ð晥È2øó5r¸%ñ3²;#�:f­s§[ÚÜ (�©ŠH^9Ã:€À¨ààÑ&…yrno&–½’heDL´kåtðNrrqéé]#0î¬õ«Ï%žKEQ¸I K"©Î0w cž8ÔZv‰}§>–èöò5½±µœ30K)ÊñÉã¡Åt4P7e¡êt:|¶ïl÷VöÍo"HÌ‚Á²ÎG§5>—¡K§^ZHeIY"sÈ%Þ@çÓ¯JÝ¢€2´[í6ÆÊÎV·ha€¬…K/ž1íŒÖ­P'ÿXßSM§H1#gÖ›@5ت3,@ÈQÔûS¨ +MÓu‹èv—öè'·»¶ýÔ±Ž5#;�sÁ'œã57�4­OZ¸±²²Hönßç¼n<ƒÈfÞ²¯ðœÚsê:޾Šàô_ jš‹f¸óí¼˜"‹d� ì­¸¿˜tç €¹'wQ€9Ì6žòoC^…EsÞkÈõ=ZÖ[Y#�nU‘ã*»±ùIá†1Ó¦k¡¢Š(¢ŠºŸê×è)Ôˆ0ŠaK@ß�´›½_Bx,Ögp¯˜á¸h™ò…@á•HÜA;Ž0×>žÔ¬a¾.³\w§Ç 4¯+4Q܉ |ÌH9 ù ÀÍz%çúç‡uKÄw÷£Ny,+t #·ÈZDY•£*vF¼àæ<Šoƒ|04ök{Íö1,/ÿh¶±¸-œï·#ô¯B¢€<�hþ'û,ζš¿›ó…e–AÀ'n?Ó“�OÝ�¥t Óµ Ë}÷ÝE$2™äHç‘÷m‹å"G$œñ“œ wtP˜xnÛSÑü¨®£ÖöY˜¬à¶*Fñ#y’…!@el© qÎsZ^!±¸ºžVÓ¼?¯Åpn£i%·¿Xb•ƒÌ!Vp2È’ ò3ƒÍw´PuhÍáë‹{] Vµswi!7“ ‰$xÉà $l(ó€9>µx/û3QmažÎAÕÅÞmôÆ7Rù¢A°¸rX3²ÿ®îŠÉð½¼ÖžÑ­®#hç†ÆäFê¬ãZÔQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yGŒ¿äk½ÿ€è ^¯^YãXd‹Ä÷êBʨÈ}@P?˜5ëdÏý¡ú~¨ó³5û•ëþg=[¾"š}±O¥®§›÷m¸}›rGùO…E}¡y)vâ¯K®XÈ×çeÀ^‹ØÕ?8åaž™=Es”VrÃÂM¿ë§ù«Í+]Ìên™Ç½s—s ‹Ùæ\í’Fqž¼œÔ4S¥Bþ©ZU>#¬ø}ÿ!éÿëÕ¿ô%®ë[ÿ�£ÿ^²ÿè&¸�‡°Èuk™ÂŸ-`([ܰ ~†»­V¸Ò/aŒeä�ÑG©*@¯žÌZúâùÎ?ª¿™âãŽàè?µôË}6{Kd½–)Êæ ‡]‘á�;Hç=³�Ö¹â$‚;Q_E:q©kô„r*Ýã'x»18©+3 þÝþ|?ò4ŸüUð†èóáÿ‘¤ÿâ«vŠßëUÿ�ýìËêô‘}ÈÂÿ„7@ÿŸü�'ÿGü!ºüøäi?øªÝ¢�­Wþw÷°ú½ä_r0¿á Ð?çÃÿ#IÿÅQÿn�ÿ>ùOþ*·h£ëUÿ�ýì>¯GùÜŒ/øCtùðÿÈÒñT χþF“ÿŠ­Ú(úÕç{«ÑþE÷" K+k°¤QŽv¨þ~µ=V ¶îÍRIY7~Ñï§iî,Q¤nY•™sõÁü!ºüøäi?øªÝ¢¶XšÉYMýìÍФÝÜWÜŒ/øCtùðÿÈÒñT χþF“ÿŠ­Ú)ýj¿ó¿½‹êô‘}ÈÂÿ„7@ÿŸü�'ÿGü!ºüøäi?øªÝ¢�­Wþw÷°ú½ä_r0¿á Ð?çÃÿ#IÿÅQÿn�ÿ>ùOþ*·h£ëUÿ�ýì>¯GùÜŒ/øCtùðÿÈÒñT χþF“ÿŠ­Ú(úÕç{«ÑþE÷# þÝþ|?ò4ŸüU(ðv‚~Áÿ‘_ÿŠ­Ê(úÕç{«ÑþE÷"8 ŠÚ†Ö8ÔaUF©(¢°m·vl•´G›xOþE›Oøþ†ÕµX¾ÿ‘jÓþÿ¡µmWeO�œpøPQE%:ž ö×S$dîà}T‹V�Ñ„¬ßð#šéÚ t�ÆÍêÈ ¤v ä[Cÿ| ô!Œ§(¸ìpÏ )I¾aÓÿǼ¼�òKíê9Zòh¢3Þ›vµš¹¹·X˜_ÎÅUž9@É;ËüØ ’G"½v«&�eïKH¼Ó>V0˜AÿÞÁ<ךÕÏA;%ì$h0{˲Ú̱m’æfb¨eP]Ì8îŽqYúXžW’#¾F’ÙĦUFÏ´L•åR@uÀoéèͤX´I’B$Íp¡]†$mÙlƒŸâoΪ7…´‚Š‚Þe —2©e,X†!²Ü³sÔÒåcæG%âójÍ&›mu.×A3´³Š?ÜËŒu# /Lõ<Íá a‰ÙŒPÛ²[MÅ �é’6CÀÇ|žGJëÿ°t¯<Îla2ägû½¿à ôÅKg¥YX"¬U™ƒ»|·Þ;˜“ÏÖŽ]nÚX¹EU’QEQE¤Å-”RÑ@ E- ¢ŒQLŠ( AEPŠLRÑ@&•ÿ Ø¿æjyÉZƒJÿ�l_�ó54ÿÃø×,¾&tÇdCEfkz¸Ò- qšk‰ÖÞÞK¶HÜÇ àóþ4øµ?&ÄÜjÉšU¶·›:”ú†ã�¨Ú¤f…•uâM&ËR²±žúšñ ÄLªÔÿ8ëƒRC¬Ú}�nï.--‘¥x�7*ÊJ±\éž:v9¨FŠçÏŠ­ŠGY¬U!�Y%» ûœ�ª‰�˜çny}zæ·xZw�eŒÌŠã 7(9Á#¨C@QX¶>!KßÞé?g(¶ã1N_"b»|À8Ú]GÔŸJ©£x’ãR—DI ‰F¡e-ËíÏÊQ�=¾sùPKEc]ëW#RšÇMÓ�ì¶ê­pÍ0‰Sw!A åˆç:dŒÕ÷Ôm`û:]O´Ó�²¥PÄúy?LЪ*¬ú•…¬ž]Åí´O•d•Tåº ßJ­­ëvº&�qq4ÐùÑÁ$±@ò„iŠ©;FyíØÓ¢°®|Qi§ÚÏu|Ðà PÃ'©rdÎiÆ:pO^} ^·Õ`»»Ùo-´¶æÜN³Gp­¸#î�áãïtê;Pú*¬Z�„öÏqõ´�#miRU*§¦ Î¥�Q±šfŠòÝâ„‘+¬ªUë¸ç�Æ€,ÑQ[][Þ@³ÚÏð·Ý’' §èEK@Q@S%š+xšY¤Hã_¼îÀõ&€E2Y¢‚3$Ò$h�€'“ïO  à$‚=*Z†âü*j(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šó ÿȵiõý «j²¼7 [è6ñ1©~Gûæµk²m96Ž*mJ ®ÁŠLRÑH²„·‚áÒ$¶©d ·ç€}qøT¯rè…¶ÂØÂË’~œVNª—�w0†YN6²©# ôªPC¨Æ µ¼Ç=1éà JPMµ÷ž|«ÕŒšHê¤r‘;…,UIÀÏ?•pž.Ö¸†I 71Í {eÓæ]†WPC6T»ˆ¶¯Ae¥NpF88?�y|Ömöûè<0O$1ƒnd2“öYwó’Äæ¼™œMëïßYi½ÃÁç&¢->Ñ „EP‹aØó�ÀsPXø·U¿¸ß 6«Ú fidÄq‘$ŠÌ»r[!Gàc­@#”x;Bx[‡¾.̨�BÈ2v@àv~�jЖVÔ.´ä‡È’E–ê$˜¹ûLÄù;€ROãÓŠ›±Ùn¡â;ù§žÃM†Ö9^A´òÜÎÅ÷ü³•¹$ãéO¶ñMÄÑÜ´Öq$0[Í$³ÛLÒùM2¬¬‹‚rHóƒTµÙ-£–ïRÓdÕ-õv¶V+pçnUKØÀ€ÀqëI2Ø6“­Ü¬ú…ÍüšlªÒÝÙ´XP‡Œùh8ë“Çê®î+"ÁñøxàmBÆ9�Ž)3¦ÜH‚G¸!Fw/³ŒÕÛ?¢hñM¨4o~òK[Ú¡Ý)IÕ$�>^¤àzÖLž¾yÚì–Ùç·º25ôˆ#X÷f »ü‡’{�J[xŸQð¤66–í+_\Î>ÐäŽ/´3-î:ô&ÂÈØ´×¦´”[x†(ìf•·C lÄÀôMýއ8Î2+2çņI5Sgn¢Ø%L^nvpÙà »_]§šÙkwyÍ ?³öo+òîó3ŒôÏzãïmgµškҷʲ_DÍ?Ø"EŒo6+rB³c Ô“É46Ð+f‰{©M¨ÝÚjÛJa‚3 E6³ïÊœ³gGâ¤ ÄØx_TÓ±µwsqyåîíY¢òÔM“6Ó´†!¹c�¿JŸBÑ5 ü<ÓÛal­.-'!Ôí%�«uä�¹qØQ@óÛêZN·¨^YX è5-ÙVe�£‘T';¸*@^œ‚³u=Sž}U›K·¼}RÎ8C†ÛV À‚[¦NàTg$ð8®ÎŠâï|1u?ü$e²]I>�¥¬ÒmÝ$ª’†ê~^Jœž•©¢j�®‹¦G|úŽž�G+J€ÀÂ2¥NîÛŽàFy'§Zî( *ïú�ÄzÊ‹uÌöqù×$EË/·P2x柪蚖³6¡"Z}�\éqÀ©,‹�ë+±�¶“ÁR## ]•Ãê:¡ªEªÎšRY‹‹8­VÓÌBe+!bÇhsÉÎ8«—Ú¶§«”ÓD–7–¨‘Ã"Źã‘ÉÇ¡¡àô®²ŠÉðôZ„:s.¢�$2±@BÙÆ<ÍŸ.î¹ÛÇJÖ¢Š(¢Š)’ÅñŠÃ³ðÚÛÝFÓÞMuilÛ¬­eä@}IêätR~è÷æ·(¢€&ƒø¿ š¡ƒøªj(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šá4œfÅŽŸ6?3Wj¦™·ÓãˆK¡K|ñ¶Tòz¹]1Ù~8Ñ‚}—ä%´U Ee]°[©L—·1¨# PÀõ<æ—íèÑ·•s.à8Þ«×Übºm&ºœïÚf¥VM¿ˆ žù­ÖòÞ_)¥ŒM ª¸ÎÐ 9äp@<×1ÒkbŠÈ¶ñ \Âm/b¸‚!1‚H†÷C� €NyÇ‹CqÙ[;Á=«*ÉlcO›î�#ëÆqEÐYšôU/UƒV‚Y"Icxd1K F88$t ð{Õêb (£QŠZ((¥¢˜ E- bQF( AEPEPF(¢€RÑ@ E-Ñiò‹ñþf­²†5SKÿ�t_�ó5m˜(É®Y|LéŽÈg�¾¦�!}Mzú<õô5#!}MBúš<õô4yëèhòÔÑä/©£Ï_CGž¾†€!}MBúš<õô4yëèhòÔÑä/©£Ï_CGž¾†€!}MBúš<õô4yëèhòÔÑä/©£Ï_CGž¾†€!}MBúš<õô4yëèhòÔÑä/©£Ï_CGž¾†€!}MBúš<õô4yëèhòÔÑä/©£Ï_CGž¾†€!}MBúš<õô4yëèhê¡F-G篡£Ï_C@QQùëèhó×ÐДT~zú<õô4%ž¾†�=} IEG篡£Ï_C@QQùëèhó×ÐДT~zú<õô4%ž¾†�=} IEG篡©dt ŠF`£&™ç¯¡  (¨üõô4yëèhJ*?=} zú’Š�Ï_CGž¾†€$¢£ó×ÐÑ篡  (¨üõô4yëèhJ*?=} zú’Š�Ï_CGž¾†€$¢£ó×ÐÑ篡  (¨üõô4yëèhJ*?=} zú’Š�Ï_CGž¾†€$¢£ó×ÐÑ篡  (¨üõô4yëèhJ*?=} zú’Š�Ï_CGž¾†€$¢£ó×ÐÑ篡  (¨üõô4yëèhJ*?=} zú’Š�Ï_CGž¾†€$¢£ó×ÐÐ&R{Š’Š)¬ê�hÔT~zú<õô4%ž¾†�=} IEG篡£Ï_C@QQùëèhó×ÐДT~zú<õô4%ž¾†�=} IEG篡£Ï_C@QQùëèhó×ÐДT~zú<õô4%ž¾†�=} IEG篡£Ï_C@QQùëèhó×ÐДT~zú<õô4%ž¾†�=} IEG篡£Ï_C@QQùëèhó×ÐДT~zú<õô4%ž¾†�=} IEG篡£Ï_C@QQùëèhó×ÐДTbe'�­I@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@.”�ǧF°MçD m“i\ò{»T´Ÿ é±}˜J!Ëmóq»ï¸â®×LvGáGÑQTjbê:EÍÝÌ�±ª>8$‚0·µU‹Ã÷qh€?í1þ•䱫mi7¡<Óëª8ÊÑŠŠÛÐçxjRm±nR2FF2:Šåm|%¼©#jyd·–$Vâ9ðö|’\c9?¥utdW#W:S±ÊCàÉ#[�ø™*<Ö‚Ûu½¨‹`ÛŽ$ô9ëžÔ©àù+Ð5‘V�"Y'i@ySžFê²(ȥʃ™™:Šte»t”ÜÍç�ˆÕ~U\1òÿžµ«ŠZ*–€QE (¢€ (¢˜Q@Q@Q@¢ŠLQKE%´PQKF(¢ÒÿäãüÍK?ðÔZgüƒ¢ü™©gþƹeñ3¦;"+7\°Ó¤“FšÝ.£V`“Âd�8^mÉïÏÒ¹6MoûFÝ´ÝrÆí’o%VÓØ tT [o°UÚ{îô"¤g Q^ª^jš§Š.l-|Ûymc†®O�ËK)�Ûû�ƒœòyæ®x^çT‡Ã×WZ–Ÿä¤—eOÙœ²8�þfýáÜœ”q�ž2@;J+É%�ÅójÇjÂKimn¼¹ÞHæò™ã/µL‚ 708Ýí[º¤Ú†¥c ÛÛ:Mq,�¸Eqs`B ;ƒ ÜÀ %� F>õwÔW˜è·W†ÇÃæîówÚÒÍ¢V¾išW3HØcœà®à�œ ôê(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ªº…üZm£]N’´(G˜Ñ®í‹Ýˆë�ÔãµFúµ¨¼µµ‰Œó\¯˜‚0Xñ÷Øô Øäñš½V ûŸ�W«}Ãõ O÷ÇÒ¢©gûãé\þ¯{xÚ½Ž�c:ÛKs“ÉpP9HÓhƒÆâ\uÈ(nŠÇ—R}{kÉfÔ¯§gòRUd‘W’HÈQ€FO‘ëP¿‹lqf ·¼¹’ìL#вÁ¢ :°$m žüqצ@7¨®b_³ÝèâÇN¹¹·¿ó7U …2 üÎ0A=zqšÐ]~© -®íä�9†IceÛ÷¶óžœòGJ×¢¹›OÂ,4±äê×7–_jO.ê6ä�Õ?0ï�~•j/XÜÉf–pÜÝ«u¹R’68 Ù õ�’1@”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQTõ NßL½Öô†G™±òFOMç°'ŒôÉçrЦ5(Tm:=òL‰æJPeb c؞îzUʳú±PËþ°ÔÑ« ¿ë 2Šäõ­cQ±¿Õ¬âœ+ÉkntòP’É#D{s†(yÏZ̼ñF§.�5Õ½ÏÙä¶Ñ–âp[lîû{ƒ÷|¹:s@ýÄÅ­j� š6 5åŽÏÍŠàÄŸ,»±³([åÉÇ^:óZ:MÕæ¥ar4ÿCs:²ŒÝXí’ç*è ž1�ç­t´WœÛÜx€ÜÁ©E«Xÿi_È–Xý…¶ÆÑ³cûÜü ±ÎFÞ™gÄwÚ¬š½®Ž‚G¸ŠÒY–æ$1Fó¶ØÔ�¸ü¨%Üy=½(½¢¸ß ]5=V;�JÆh#¾Ù ¾÷>DX*ÆC�Ó ƒÎîyã² Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Чs©ÛÚ_[ZÜoŒÜåb”��¿÷3Ù�`zàâ‹mJ ËÛ›kpïöbI@ù÷@{°ïŽ™èå[_¸¿J©VÓî/Ò€Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š*–¡«éšHŒê:�¥˜“;>Ñ:Ç»q¸Œã#ó  ´W3 x¿I¿€Ç6»§Iv÷·E¹Œ;¨�Ö r�qëÁç5ÓPEPE^Z£k˜U�ÁÀ"€'¢šŽ’ tee= œƒN <ð¹Ýáëcîÿú­zÇð¯ü‹–¿WÿÐÚ¶q]Ž*/•t8hÅFœbº$%bŒR40µ m »�¥µ‚FÈ$È��ݽ@š�½ÄLWŒeú¢µ.´kk¹ÚiPÍŒ…#1éP�Z÷æ÷ù‡?¥zPÄaÔ•îyó¡UÉ´ô5$uŠ'‘³µT±Çµq#Q¿¾Õ|5©Ý­²ZÌÓMq.Š`rpN=滊ɶðÖ‘iyÜa&‰™£"F«œA<ŠòÚlôSHçF£}ªøkS»[dµ™¦š(â ]Àä$àœzÍ:+ÝCSÖ|/r¶©mròÉ qn.€Àä$àœz]·†´‹KȮೠ4LÍ6° í\à à Qmá­"Òò+¸,ÂM 3DD�„,;W8‚x¬ÇtjâŠZ*ÉŠZ(¢Š(¢Š(¢Š(¢Š(£QLÅ´PQKF((¥¢€Š\Rb€:-3þAÑ~?ÌÔ³ÿãQiŸò‹ñþf¦œô®YnΘ쌭N]J8QtËh&™Ûiiå(‘�ï-ôú×;gá­SÃ×3ê:dð_]]ü×°N¢‘²NcegÞ<ƒœç9'°¢¤fÚZ—ˆ§¹Ôôëk‹G²�gE•Dªò“€}ŽqÞ©èÞµÒô;‚4[eÔî@0mŠV�¥rŠ%\ù ãž8bºº(€>¿žS©›©`¼L,6ÚW/—üJÒîß–;NWs©&�ªI¤ÛZÅ¥¼{™ÃkÓ¤Šsÿ=Y™O\;qéÕÑ@.ƒáíoG¸YÉ$?h–\�vá”+¹<ÆcÚÄêz‘“ÍwTQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@RÓ´�?I XàóŸ{íî €àv«´PV û‡ëUêÄ „ç¹ O÷ÇÒ±õM%¯§¶»¶º6·Ö»„S6°•”õS€zƒ�9­‰ÁÜlTTƒ.ƒy+ÚÞk©ÛÜ5¸(Qñ¹6>_•Hç9h±ðÊXÞØ]-Ó;Û›—”ºs4“2³7_—tÇjÞ¢€9È|/-­¾ž-µ—W̲4•–Wfe+»¶ìžÝ;TV¾’ßSµ¼“QYM¼’¸&Ø $Þ¬¿;ç,Fî¼ c¸ê(  #Ã_ÙSir}¯Íûœlqåíß–C¿©ÇÜéÏ^µOþÙ?²tí4êHb³�PIöQæ©ïFû³=;×WEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÉbŽxž)Qd�Ô«# †¨"ŸETÓ´Ë=&ÐZØÀ°Â lI$÷$òOÖ­ÑEY‹ýX¨eÿXjxÁ€j�žÆ€0µ?®£¯éZ¡¹hþü{½U^-OTž8à�m¢’Fq¸ÿ$óíŠèh A<1ªÚjoâ/meÖef…âÛnÉ�ò©²‘´|ÜçŒ` ×ZTºÆ©¥Ï©i¶ín¶“¥Ì•Ù¢*97Ü'8í] Ìè^ÓôíKRºmÂ&7¾eœ‹nHü¨ÇÊ@ÊüÁøã©=릢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š‚òÎßP´’Öî%– ¿ø~Ô¶––ö‘ÚÚıA¢öÿ>µ5U´û‹ôª�M[Q…ÐPÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEŸ£XI§XɬŒÍws8)œm’g�®gÞ´(¢€ (¢€ (¢€ (¢€<çÂM¿Ã6�ë¿ÿCjÛ¬/‚<)d¯ÏŸûí«v»'ñ3Ž? (¢¤¢œºŒQNñyW2Ç 0õÄT¦î%RÍæ*�’Z6~+TÔÚòtŒ�àªqjÓº0•›þs^”0<ðRG±n2jÇ[YÑkÚdújj]µyJá[ï–Ú1‘É«F¼¶&°ðö•,JZÓQ¸·�ÿ,æY†èÊ0}ÔzטÝ�A+ž¥EpQ^j³x¥â–ú8&[â‚ÞK©u¾q…ˆ&Ó•çvî½ÇJ¦uÍSNÍÄÓÜI†Ímt‰óË— ÇÔ€"9?Þ4s”ô+»»{ Y.®¥X¡Œe�º ‹OÕ,µHÝìæÞíu(ÈÊzò¬‘ui ^ ·¶Ö§ºb©šáw<‰&Aß� nçŠÂ¹×/%Ó%S©¼¶�ßZƺ�ºšTfùÇ£Ð`ç¥ Ø¹è£ SȳÔÌw׳éFâí®Œì0Ì>|ÊA!Ç#=p* MRîM9#¹Ô.#ÓSR’îã‘‹¬~XdB7m,q»ÓóG0ržƒŠ¯}}m¦Ú=Õä¢(ï1ãð× ªßÜ‹˜£µÕ^=?ìÙ´¹žîH¼É70$°FóÀùOQ޹ÍuZ½ìv~šMFæÝíŠ3ç Ò< úœâ‹…�Ky⺶ŠâݨeHÈ8>Õ-cøZîÞïÃ:s[Ì’ˆíã�Êí`ƒ ûŠØ¦˜˜QEÄQEbŠ(1E-”RÑŠ`%Q@bŒPC¦È>/Çùš¸=jž™ÿ ø¿ækBâ®InΘ숼¯úgúQåÓ?Ò­QHe_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+þ™þ”y_ôÏô«TP_+ý�Ò—ktþUfŠ­±�ðŸÊ“Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô GމúUª(¶Öþéü¨(OU?•Y¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ù_ôÏô£Êÿ¦¥Z¢€*ˆñÑ1øRíoîŸÊ¬Ñ@¶·÷OåFÖþéüªÍ[ktþTmoîŸÊ¬Ñ@¶·÷OåFÖþéüªÍ[ktþTmoîŸÊ¬Ñ@¶·÷OåFÖþéüªÍ[ktþTmoîŸÊ¬Ñ@¶·÷OåFÖþéüªÍ[ktþTmoîŸÊ¬Ñ@¶·÷OåFÖþéüªÍ[ktþTmoîŸÊ¬Ñ@¶·÷OåFÖþéüªÍ[ktþTmoîŸÊ¬Ñ@¶·÷OåFÖþéüªÍ[ktþTmoîŸÊ¬Ñ@¶·÷OåFÖþéüªÍ[ktþTmoîŸÊ¬Ñ@¶·÷OåFÖþéüªÍ[ktþTmoîŸÊ¬Ñ@¶·÷OåFÖþéüªÍ[ktþTmoîŸÊ¬Ñ@¶·÷OåFÖþéüªÍ[ktþTmoîŸÊ¬Ñ@¶·÷OåFÖþéüªÍ[ktþTmoîŸÊ¬Ñ@¶·÷OåFÖþéüªÍ[ktþTmoîŸÊ¬Ñ@cá2ÃV„tËÿèm[UCF¹†ïI‚H.>Њ F]®72Œpä·ÞSÔ“îzÕúëræ|ÝÎT¹U‚Š(¤Omo+n’�½Y4ÑejE´9ÿ®b«Mux·2$Il#R2ÈAnÏúãð©ñÑ l…°3…—$ý8­Õ:¶V1ö”îÓ.QEs^2Š÷B‚Ú•nc·’ݤåw¸PÙÇ# OQX\Ý#§ÅªæúÍnþÈ×P �»¼“ ß�]½qDwÖ’˜wP9�KÂ@|ÅJúŽGJXÅSÔ4èu(àI™ÔC8á‘ï­•'8‰šeO÷Nyü)oî.­áSgdn¥fÛ´È#U<±=¸ìZZ¢¨i�ÕlLþKC"HðË9ØèÅXg¸ÈëWñ@bŒS¢ŒQŠ(£b€ 1EJ)h ¢—”À(¢Šè4ßùÅøÿ3Zÿgé¿ò‹ñþf´!þ*ä–ìéŽÈ£®êòhšsÞ®›u}JÏ*ÛÜŠKa˜g§A“í\å¿‹5»{öŽ÷×ÒÅ?üKDs[)å`Ø—Xîô#œàWM«ê¶ÚUºµÄSÌf>\pÁJò6:êp+‰Ñ¡Ô<3|º†·§\�9ah¬DíMˆ¶J:¨ÉãhÜ7Ù(f†µã˜5¹,tÄY§µŽ–Ó ÎóÌãj¸ ¬k#@äsW<1â{½GJžçRÓ/ H^åšá’2…RfP�Q™‹?. S‚xÍWÑâ½ñ½ëZ\O§—°¶¸óí£Œ;1{€sæ# �yã4ßé7ÑèRK¹}¸ÜÞ"E2DÑ«}¢A¿qŸ½Œ“À´Þ2ÖÒKýF]=¬£d‚ >â墻ó ·Ìù\ŒÏ|hx¯Äwú=¶”‰g5܉ál¥º(X€B2 ¹à“Žrö¶qvûV¿Õc!?õÈ•¢½&€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€  u­4kI7‘ý¼¦ÿ'<ã®3Ó8çqÎ1W]K#(b„Œ\d{ŒÖ9ð¶šÚ/öiYq¿ÎûNÿßùÝ|Ýýwç¿áÓŠÚ¨—þ>¤ÿq›SÑJFªYœ€fÆO¹Å1ãêO÷ùµdx«\&——*Gyyq¥®ñ‘½Ø 㸓øW3'�u×BXØÁ5•âD4Øîex$ºÉ;äAå·ËÈûÅxç5¹ã{H®4»9L*óǨYˆÜŒ•Ýsqéœ ã,t´{m6=*+Ù!¶‚+˜=Ñ¼ŠŠ{” 0ßÄÌ一ó@–»«êš-äWR^iŸÙ�qo@þr!ûÇ™Ž9?w¥Cá^k0ÙÛÞé·QÜMh/ Ã4>Y�ÉÛ€®O°ÈŽkm2Á|Câ µO ÃsgçÂ~Ýq •Ž%‚%"3‚ìA €£â®ø7°Ôïa¼²º¶{ OÇ€,Õ˜¤dŽ”»|§} YÓ¯¼[©h1j©{¢F’Äe X�Ïó‡òªú‡‹µ‹mÃŒ0Ïý£Ép‰æýö‡~R9óžz`úÖ‘ká3áh>×á[‰¯|ƒ¾q¡Ë&çç�â2×5bîÇSÔ<9àË+ g�NYŒ[eFmö’^9P¨Ë*ã¹o@E%—޵é-´Ù.ÕU±ßØÍ(�NÊ � Ãgixõ¯P¯Óíe�C¶2ê— þ�§Z[Zù ºXšIF û—'8`2„ãW²PEPEPEPQKþ²÷Ïþ‚Õ-E/úÈ?ß?ú Pu,�ZÉ,Vïq"®Vʆsè ?2+ˆŸÆº²JÚ¢xzýtkDž;Ôy-Ä‹*0¨ó2q†ï�Fr+¶»º†ÊÒ[«†+ JYØ)lì95ç÷vÚž¡¬6µk¤]ÿ`´ÑOsbäG5܈>YV28v’ lqÈÖ±âdz·Óbš&Òïog?»º(í�ò¹ÚÄ}Å sÕ…Sð狵­GX{[ý õ¶µ“±„ÈÒeÛ2gi ½2~Vàp õϰx‰ü=yn’£M~öÆW·Ù,köyÁd^DZgÖ£Ót+µñƬ¿ð‘jÇË´³bäA™FéþVýÖ01Ûæ<ôÀ?øóSе'ƒû&øBÒÀ!)RHÊ& 'Ê$'k©Iî`;ÕëOßÜø;QÕÞÚKw‹|�Ê`[ˆöî8]°ÈX��¸'=¬[ë=bòöî×Ã#N˜›¿µ\Jú\‘.øßz#Lò1·*¯Ê89\ »m%½ÞŸ¬6¦Sís¬h·�D¹‰Ã‚vù¨’1•Iàí8 I#Ò¼o¬Ý4±ÜùE…ÊÀ?âY5¾ÐmŒ¤åØ�Û°1è7taŽïG¸’ïD°¹˜ƒ,ÖñÈä eŠ‚kÌëRŸVÕQï%ŽÒú8d’H´EÊ2§hW§bÆ ÎÀÇÞÏ©iÍé¶ÆÕ-Äj#W�£!@ÀXCÍZ¢Š(¢Š(¢Š(¨®ãÖo÷ùTµÏüzÍþã*–¸í[ÄÚëÝɦé>¾ð4S2[p’Cæa°L�°ã�qœf»áòµÍN%žòVU�`måbS÷_QónàžüÐI}âÍL�SQÔm´û§„Kök©‘d\Ž„dŒç#‚Gj‡…|g¥júF“ÚÕŒºµÅ´fXRUd* £¡Îx§ë2\Íj<1e-ÝÅåÄ[./d@<˜[!¤f y ëΙ¤‰<1tÞ¸³•�´¹¶3"ç,ar>îÓ’3Á^:е}¯ƒ¨i1XJ­º›Ù\åU†F èÊ9â¶,o­µ+4º´“̅ɰG �A�A`úWmàÓ/¼'¡ý®;�N÷»»TûÌ^ËÈGP¥ØóîtÚF—6™}«èlî®~Ñc¬e”y€ýXÿ�Ö¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ìü-<—^·ž_7Ì‘¤fÊd#÷�ÆãÎ==jج� xr×êÿúVÅvN*2i‘wI±1F)h©ÍêñÞµäÂ%e8ÚÊ¤ŽƒÒ©A¥*ÖóôÄdWcEwC(ÅG•hrKIÊû†+�o êi¤hæBÝ$‘G{ uù£Y¼ÀÙÎ \Á�wÔWW;±ÄÃá«Ô×�îîHN ox¤€ ù²e|ÎË€pG¥S“ÃZå°¸žÎ3iòÓÍQ¾'i7dçŒ `ãý]z¹Pù™�öaáÈtû[(oV’&‚V $P=Aú×%{¦ÝÙi„=�†Ê]JÓìÚl“‰6áþaž@ Hã$ ôJŽX!œ(š$�+Pê‚3ÜôÚ¸'c�m/VÛ¨ÞæE »žö=ѳ¢ !œg)¼äc9µ¦�ªA\Kaçu9.E”’¡2#Æ0# ¸6N;û”9ŽSÐ5 ËÓuö ’ ‹_!­m¥·Ì?3õ# �r§9Ï^+UmVÃBŠ Ñ¬AžDÌc.wûw5µF(°\Êðì i¤Glö3ÚÉg‘ä'’ä©#$“Z´¸¢˜„¢–Š`%´PQKŠ1@ E£Rb–ŠJ)h BQKŠJ`toüƒâü™«ðÿPÓäãüÍ\W)œcšä–ìéŽÈ±ECç7 £ÎoAHdÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@RmËcæ ~Ÿþº‹ÎoAGœÞ‚€&¢¡ó›ÐQç7   ¨¨|æôyÍè(j*9½sz šŠ‡ÎoAGœÞ‚€&¢¡ó›ÐQç7   ¨¨|æôyÍè(j*9½sz š�¨b¤ŽTä~XþµœÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5#(t*Ã*ÃT^sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½MECç7 £ÎoA@QPùÍè(ó›ÐPÔT>sz <æô5œÞ‚�9½y×…ÿä]µú¿þ†Õ±YñNÚý_ÿC5±]µ>7êqÓøP”RÑY–c^>ËÉŒ—×1(#jÆT0=AÏ9¥þÑV�¼«™wÆõ^¾ã¥£]^]K$rƱ¾8$‚0ôöª‘xrò,…šûLqúW©†p\ÏSÎ’Ä)>U¡ÒHæ8�Â3•RB.2ÞÊ8Å-CCVŠ(ªQEQE Š1KŠJ)qE%´PQKŠ1@ E.)1@bŠ`bŠ(1E-½¦ÿÇ„_�ó5jªéßñáãüÍZ®YnΈ삊(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(€ð¸ÿŠzÛêÿú­|V?…C�[0.?ïµl×e_�úœtÝàŸ�˜£´TFÒÆ�µ¤EoBÃ5&+žÔ¥´‚ö᥵‚FÊ’d@Çî�Þ �S·¸‰‚à ñŒ¢ãCÔWtpR”T—SŽXµ8µ±ÔbŒSeœDTI´ì,2í‘é^}eyâ9tï8Ô­³sy"‚ñÈIÂÉÃ�ÿ2ðxã¢úsÀÝŽÔ®zÎxZ]RyõS}u ÑG{$jªŒ ‘Ž„±Âã Çã]&)¦ J)h BQKE%´PQKE0ŠZ((¥¢�‰E-”RâŒP!(£b€ (¢€ 1EÀÝÓ¿ãÂ?ÇùšµUtïøñ�ñþf­W,·gDv (¢�Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š3IšZ)3Fhh¤Í ¢“4f€ŠLÑšZ)3Fhh¤Í ¢“4f€ŠLÑšZ)3Fhh¤Í ¢“4f€ŠLÑšZ)3Fhh¤Í ¢“4f€ŠLÑšZ)3Fhh¤Í ¢“4f€ŠLÑšZ)3Fhh¤Í ¢“4PÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÆiQ4:|hã –$}XŸëW* )ÅͪLhlñŸz±FýÚŸøWäg^þÖW;˜ežh#•ZXH <®FFG¸©k¤ÌÍ»Ñ-o.iPÏŒ…aŽ˜ô¨G†ì�ûóûüßҙ¬x’-&úAk5̲(b±w:¢˜�ó3zö4è|B¢õíµ )´â°ƒ%Ì‘lØ)å\ã–keŠ«e&dèSní5�|1£´/ÙXFÒùÛVg_žW òýã÷qÖ³�Žô”СԞâÜ3¶Ýn¸€lz�lzU­GÅÚ]„VS$¢ê© ï·Ì�Tp[ #qUú°¬.�¬Ím*ÊÎö{»xŠM?úÂ$l1ã�¹Æxã5v¹Ë/i׺„¶‰îU¶ÆE¤§ÌÆùB±ÚsÞºJº ù‰E-ÀLQŠZ(Å¢ŠLQŠZ((¥¢€ŠZ((¥£”Râ“À(£PEPEPæŸÿ1þ?ÌÕª­§ÿÇŒ�ó5f¹¥»7[QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE”¹¤£4ÒhsIšBi¤Ð³IšnêMÔýÔn¨÷Rn  wQº¢ÝFê—uª-Ôn  wQº¢ÝFê—uª-Ôn  wQº¢ÝFê—uª-Ôn  wQº¢ÝFê—uª-Ôn  wQº¢ÝFê—uª-Ôn  wQº¢ÝFê—uª-Ôn  wQº¢ÝFê—uª-Ôn  wQº¢ÝFê—uª-Ôn  wQº¢ÝFê—uª-Ôn  wQº¢ÝKº€$Í.j-Ô»¨\Òæ£”“4fš (4ê))h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(‚ðº‘áÛPy#þ†k^³<81¡[�wÿÐ�jQƒìôÿ¿!ãñ5÷Ÿæb]@÷ž!·{Dhd´#íXÀt#>PÅœƒŸáíÉ­¼QEtÇ�ø’Ò+MRcp¬÷ðM²}ìÒH$}‰GBUqƒØçÖ«x-õšy.ÞMKÊ‘#†æiKLžak³²€¬¸8\ð=s^†úuœš‚ß½¼mv¨ea’ g§§ÞoΣ]Ám…ºÛ…Eó6�Ä2o$¹VÎå''¡©¶¥_C…ð¼¤×Zx¶»³·–=>F'ìÍ òŒ7®NQŽxàcêYê^™ib—}BkÆ–U‚4ѽÀe$º’¿; Û’:çpè~�a¥oû¸‹zª±ÜI!FÉ>çó>µ=Õœ±î#�ÕÀÉ2°eÑZðÞ6™nnŒÂ8¯Ï¼ƒ»¯QÓ¥jÓJÂnáEb¨AE.( ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŒPQF(¦EPæŸÿ1þ?ÌÕš­§ÿÇŒ�ó5f¹¥»7[QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE”RfŠBh&šMÓ  &Ÿ»Ì7n؇¡ÆIúT*“GèÍÏáÏô­J©öÿžòÿã¿áGØþ{ËÿŽÿ…fÞx¦ÎÚfŠ$iŠœð=êâèÔ�ön Œ�Ÿ·¯JèXZÍ]Då–7g#gû=ç´¿øïøQýž¿óÞ_üwü(Óõ}J-»[‚§Þ­Ö‹‹³Ü茔—4]ÑSû=缿øïøQýž¿óÞ_üwü*ÝŠ*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{ËÿŽÿ…[¢€*g¯ü÷—ÿÿ ?³×þ{KÿŽÿ…[¢€*}�缿øïøQöÿžòÿã¿áVè  †Ä�òÎùÿh?@*¹£®~GéZUVùG’$þ%a�¡8?Ïô A§Q§ƒ@KLœ :ŠJZ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šât �:|ßú­ÊðÑÝáûbN~ðÿÇ�kV´©{F•ïÊ’û´1�Ok'S¾¿yDjQ�U´ù‘¢”®øY¾ìÃí>£¸ëߥ]¬Û‹ oõ8ÞëjÙÚºÉjrÒI�¼Ç° ýOaZub9Ÿë÷zlg²Œ@ìT5õÒ²ÛÞ™`IÆ:`2{ôÝ~âãÃ×:½í�Š(·²eÜd�z¿ÎÏ8â°üW �Ö§$v×> «ÌIo-ëmBó² G%€¸"Ÿ§xræ×F¿•¬ç·Ù´iq]¼ÁK¹‰vÛ¸“ÛRjnî;+ ˆüEskåG¥ËçÂR9¤L‹"—àÉŒýºž½êåω/­²MÕ¤ðÉqy"ÉP3l®á»„$êzf¸mWI¾I=NÖn�•"•Ûýs®æ*Oü³UÚ gÖ¶™¢O éÅ.b·„j7*·1À€Lí@8 æ•ÙVGC¥x±îµÙ쮬k‘³H#Ú‡ÉW*Å\äžHÆzŠƒþfI® <+\Íô››�•$ddlgåÎ8¬ht¥½m/LŠE‚ø\½óÂykUTQp:¡×5jÛGŸQÔ ë¥XßÁÆ Œ·¯µ�È �•Žpo^}K±Y‡õkûíBòÚôÂË1K%¬–íó4€†IŸàã§Zè+Žðd"ÛP¼µY¡™­l­m¥x[r ˹s�ÈȮƩlKZ…b—ÀJ)h ¢–ŠJ1KE£Q@ Š)h ¥¢Š1IŠZ)€”RÑ@ IŠ\Q@�½?þ‡±ªþ×ó`úmÆ¡ÔFÎI,T‹…c# Il|Ã)s”ôj0 y6§®Ü]›$Ù ’Û¸k™¢·$ä�Û LF6ä’Äzc�ÑAªOw¥è“È×îÓ^a/RhÙU·²mlÞ¤ü=­Ãå;Š+€±Ô5âk¿´k0Å;N¶!F—+E.Ì�CÚ¬w0ëØT’ݬ—w;£Õ¦3\Ü•‚Êóʈ#¶âêpÀ©Û’š.+ÝËxZU}N÷ÉžöKY,í."K«‡•“x�žXœtÇ¥u5H,QE (£ (Å-˜¥ÅPŠLRÑ@ Š)h ¢–ŠJ(ÅQEÄQEmXÇ”�ó5f«XÇ”�ó5f¹å¹²Ø(¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ J ”†”ÓM4šcq¨Í5�Bæ¤cUÜжG:„?Sÿ šÜ¬ �FÇùß  �KÃ:.±0šÿN†Yç§*ÇêF üjˆð†ÈÒSñ‘ÏþÍ]%¼qUâ¹c6—«!Óƒwi[ÛAgn�[C0 ÂÇ…Qô¥¢ŠÅ¶ÝÙaER¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ªš—üxIõ_ýUº©©ÿÈ>_øþ„(%§SUÕ„4`�…MH´(§ `§ u- ¥QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÂøfÝ-|?k u7ãïÖ¬íe¸Ñã•B€Ï&D`/Îûf^:pONyÍiWCwÔÂÖÐ¥ý•b53©}™>ØWo›ßN™ÇëŽ:UÊZ) æuk VMvyì-âe¸³ŠØO+ °�òÛz’ äýišv‰}áÆ–ÓI¶·žÍâÝ M&Ö†P x$«ž:}k ½Ô-tø–K©„aŽÕ%œú*ŽIöž±c}1‚)]fw•4O‘êÀ${ÒÆOà½TÅoÿcÔá‚Ex„³´*‹œ²„ÝOñn'éZ·º>·qáë+D‘#º·ºù†9•%pYWst?‰<×YYð�éþl± ½”Å#Fæ+ äPÊpFåB AvbÙéZš®‘mqjÅ–íµ ËŸ1 ‡a!ØrH,£8ÆKmáavÏ-û\ÂÉwxȰNcÞ’È$¡Î0£Œ÷æ¶àÖ4û‹K{¤¹Q ĦŒŠP³‚FÜ0©>• þ$Ñ­îÝõ èÛZ(Î÷ЪäÑdMOžÓT¿�Ù=­¨‚ÞÚÝ^ErËñž ã :ó[ô¢Šb–Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)€b’–ŠJ(¢˜VñåãüÍYªÖñåãüÍY®ynj¶ (¢�Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÑHh 4Ó�4Ð FjCQ�ÍWsS½Vz“N?ñ2‹ñþFºçtßù Åøÿ#]QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQESTÿ�t¿‡ón©êŸò—ðþb€1#5a UŒÕ”4ajE¨–¥Z�SÅ0S…8RŠAK@ EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPáù…Æ‹ ÈC<„7nÆöþó1ý.ƒN¨é L‰G@[ÿB5z·1 (Å-cX¢Üx‹Tšl­ÌpBðFQX‘õbÀžûG¥c7Ú­¼ WZeÍ­æ—gC<�2(.×'æÇ?c=敬ŤÞܵÜ7Ïm;�œ啽xç5ÐV­ÿ#‡íçÿEŠß¢½šŒúµ¯Þ×ètæ�gú'ú…SÕ?ä/áüÅ\ªz§üƒ¥ü?˜®sc :²•Z:²”:Ô«Q-J´ § h§ p¥¤´´QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEqº Æ“÷oýÖ…PÑ#–-"æVYì†#æ5¡Z­Ž,*µ'Ù~AIKILè9=~Ke¾Öín¯ml�ö“Iu(�³8<ž¸Þ¹Ç¨¨®/´Û‡ºŽÓU±»šóV³ž(mîGÚ­n Þ[¥v4R°\lŸêÛèkËôøä¸ðôqÃ5ô y¥Ãg:ÿbÏ? •u õé^¥E ��ö±%ܺc­³A¬¬Û¯ u e_¸ps“Ðâ±4˜¡[MîÎÂá­,£I5gŠ2¶C§Ë•o˜ã ¯X¢•‚ç�øž aîµVÂÒHíb�¦É(Œîºo@ bpüd/"¯x|ÙÃâ{xtÙu?"K9¦�.ŒáZBñüÀIÁ<·#Ö»j(°îQE1Q@Q@Q@Q@Qš(¤¢€ (¢˜”P ¢ŠJܰÿ�(ÿæjÍVÓÿãÆ?Çùš³Y=ÍÁERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE”†–�Ði§i �ºT†£n” Õg«/Už€¦ÿÈN/Çùè«�Óä'ãü�tTV�¿äP¾ÿ¶ú1k~°¸*NS•ävB**È*ž©ÿ éæ*åSÕ?ä/áüÅAFue*´ue(u©V¢Z•hANÑNáKH)hh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šá¼,åü9jÇ©/ÿ¡µkÖnƒÆ�Õ¿ô#ZU³\®Ç-rRŒ{$QIHÔ£y¬YØÎ —ÏyJïÙ´“¤� §�zõÁô¤Óõ« Nyà¶™üø1æÃ,O®@#*à`ŽqÞ³®¯ãÓ5íZòa˜ã°´Èó:Ë8êìª:÷"±âÏT½þÚÓ縂x¯­D‘­Å´¨þc¤MŸ-�†P`Œ€p)\v;Ê‚{Û{iíàšP’\¹H�æ` Æ~€Ô®‚Ddlá�ƒùŠó½oL°Òu º‚úìÜí}$ÙÎ'ÆÓwñÉ “Ø·œ«¼’éójŒ× s(À¡;�’ œ–ni\i½ÖŠh9P}E-¢Š(¥¤¢€ŒÒQ@Š)3@ E%QE(¤¢€ ÑE&h´f’Š`”fŠÝÓ¿ãÆ?ÇùšµUtïøð�ñþf­VorÖÁERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE”†–�Ði§i �ºT†£n” Õg«/Už€¦ÿÈN/Çùè«�Óä'ãü�tTUmFïû?K»½Ùæ}ž—fq»j“ŒöéVj޵o-Þ…¨Û@»æšÚHÑrX©dûÐE—Š¥V´þÛ±‹MŽòš ÅÐ’,*ï*ÌUJ�¹nF0i#‘„…�ÄL¿6ϼNþsŒPWEPEPEPEPEP/ã�^]3FXmؤ×LSpê› ükÊkÒ¾#YI6™kv€•·r¯ŽÁ±ÏæükÍkêr˜Åa“[¶ïýz?˜¹:ö{t (¢½3€î<á[mBØêZ‚y‘–+DðqÔŸ^xǵu—ÞÑomÚ/°Ã cå’Ê}xëøÖO€5h&Òš\-Ä Ä!<²“œ�Äšëfš;x^i¤XãA–f8WÊãk×X™+µg§è}•Ah�÷8_ÜÜé ºðõËï@XÇìÜ�b9®ö¼÷ÃîuÏÝj±)ñCÛnÅüHçð¯B¨ÌWïS{´¯êV þí¥²nÞ�TõOùKø1W*ž©ÿ éæ+€ì0£«)U£«)@­JµÔ«@ p¦Šp  ZAK@ EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP¢#Ť@².ÖùŽ2V$t«õ› 5Ëè°À‚|¾í˜Û÷Ž1Ž:b´«fîîb´AER—u§^ÿi½õ…ä<°¤2,öæPB*Fp~võíQK¦ê·†(ïµ7·I£™– 6�˜£‡Q¸ÊÀ ¨Ï,ÚíÜööºeíá�‚Jð˜•UІÛóº’pÊxê­Ç‰Å‘?lÒom¡•·ËnJ¢ýæÚ²– wÀ4†n¸-m¬A±œZÀ_ØÜ,¯«I&§u*í3Ï€PuýØ\çž9÷®€œ}+�?m[téá0ùñ®m£Ü��Í(Ç^‡ž¾††4hÉá§›LšÊ}Jkœ‘äMpŠòB¹RFá‚ÙÛÔóI©øf}JÎêݵýIRáYJ @llŽ}écñL/¤Ýß9£û,é ÆÎ„’Û © ŒHZÑ�Qk—o•ƒ ¼sù›ºîfǶÏÖ€.�…ÐRÑEQšJ-&h¢� E%QEQE! Š)(i(¢€ )( AE¤¦E”ßÓ¿ãÂ/ÇùšµU4Ó›ǤÕê(® IɹIݳ²1QV[SÕ?ä/áüÅ\ªz§üƒ¥ü?˜©…YJ­YJ�jU¨–¥Z�S…4S…8RÒ ZZ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8�ưèVè€ðûƵ3XÞ”Ïáø$=ÞQùH¶+y;¶Ìb¬‚Š(©(æímonu­pC©5¤Kx‡lQ+9o³ÃÉ-‘·Øx<Ö_ˆÞâM#SžïEv¼¶²–.ÕÊÆC#*´kŸ›‡bsʆ` Ï=UÞ‹¥jy׺e�Ì c|Ð+œzdŠŠ?hQH²G¢éÉ"œ«-ª¨8¤3I¾éúWŽÃ¥K—¥ÜËæ,[Fe’ÞÙÕ6�¸ó[$/*v�Jö221X‘ø?ÑF¨º%‰ 0 Bþ$òhhË]¤ï¡kÖR¼WZµ¼ „1¤„¬ÉÀÚzô5i4;KmgO³Ô<1¡¤wŒê¯nìåJ¡n…Òº{_i.�ka >\¦d0Êí$ƒŽ*ÜÖvóÜÛÜKém™š&ÉIOׂzÒ°ËRfŠ`-QHŠ( Š3IH£4”P0¢’ŠZJ3IšŠ))€¹¤¢’€4™¤¢�”S{L#ìˆ23�ïs÷›·o¯®Õ=3?aO½ŒqÓOãþG½\¨{–‚Š(¤EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPRZC@i¦œi¦€j6éR�ºP/Už¬½Vz~›ÿ!8¿äk¢®wMÿ�œ_�ò5ÑPEPEPEPEPEPEPEPEPE�“Ò€ *±½ˆa�¸}º/î¿ä(Í[íÑuÿ!GÛ¢þëþB€,ÑU¾Ý÷_ò}º/î¿ä(Í[íÑuÿ!GÛ¢þëþB€,ÑU¾Ý÷_ò}º/î¿ä(Í[íÑuÿ!RÅ:M�§‘ØÐ”PNOJ¬obcîY¢«}º/î¿ä(ût_ÝÈPš*·Û¢þëþB�·Eý×ü…Y¢«}º/î¿ä(ût_ÝÈPš*·Û¢þëþB�·Eý×ü…Y¢«}º/î¿ä(ût_ÝÈPš*8§I³´ò;’€ §ªÈ:_ÃùйTõOùKø1@QÕ”ªÑÕ”  Ö¥Z‰jU  8SE8P…- ¥ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ïü#�á«l‚ò�}A‘�mÖv†¢="nÿÐ�hf¶’³hÉj®-fŒÒ•®êÿÙ6öÌ ×ù*ó¹TC±›''î`äŠÅ“WÔÄ–Ó‹›™Q®`‰¼»" ¯*¡É“.xn ÷ÇlÕÝCRŽãÄÚUŒqJZÞõ¼Ép66Ò�½sœ0=1Ï\Òkòj3êv0[“lg¶™¤³nÛ0f�ÂmÍ÷³�Ȥ3¢fTRÌÁUFI' ஼qsöɼ«½"³ýäƒûGpºB­…B#ûÀŽƒœñÐ×{Ö¼ÚYd:®¦$¶½˜-䊅.ï‘Bñ€Q2ãñ¤Á øžâëÃI{jÚwÛežR8§ûBÆde|mù€'�nµ=“ëz�Ý´º¼CìR"È"² r‡À,íÆ+Ò)µ/é¶�dnîn§eÝr�"Ķ]Ërp¹<“�TbÑ´›‰5›í+J°¾·¶¹ˆ¬ka$b5ófÉ'ê1Þ�ž‘E22 jT¤ 0GáÚ�@ FhÍQIš3HbÑIE.i(¢�%PA¢’€ LÑA¦IE% )(¦Fi)(ÑéŸò‹ñþf­Õ=/þAÑ~?ÌÕʆZ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€�ÒÒCM4ãM4ÃQ·J�ÔmÒ€!z¬õeê³Ðôßù Åøÿ#]sºoü„âü‘®Š€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ †èâÙÿçST7ñìÿ‡ó  Ê(¢€ (¬ î5O]»°²½0Y$eäX•ÞI�›€ Û'=F(~ŠÇ¿×D·C Ä«j×PÂIرËggq¡¼ñe••Ýä[^²Ùº-ÄÉ1ÆC'=9ç�Ls@ÔVck��Qì ¶º¸h™Rya@R` Iˆ<€yÅS_ÙÞ«ÇÜ š9 µÃ(ÌTvç '�2Fh~ŠËðÌòÝxWH¸žF’il¡wv9,Å$þ5©@OhÒWñþUMiÿ)øÿ*»tqlÿ‡ó¬ÊÓ»ÿ�gü?�fPEPE�®ê-¤è—WÑÆ$’$ýÚ1À,H ¶H  +œ3êº6¥¦%ö ·ÐßÌmÜy ŠMŒà®?‡ä#'‘Í'…uã©iš|4·7­j&¸•Tm�=70O8vÏÒQEQE=¡ÿI_ÇùV•fZÇÊ~?Ê´èªz§üƒ¥ü?˜«•OTÿ�t¿‡ó…YJ­YJ�jU¨–¥Z�S…4S…8RÒ ZZ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Í%Y4Èc$ãÜçúÕÚ¯fmc�°Œyy=I_”þ¢§­æW3jÚ Fi)3@}’ÛíkûÙ³ûUQwyYò¶Æ©ëó}Üöë] Žº-ž©queäÁw*ÍsBs J¶~\…ð}±YúO‚l´™ó v&FH˜X¢Î¡�Ê9<:d÷&ºŠ(–�`t­ÏO3yße…amÛ¸(Àã'œWh¢€ šÓþ>SñþU X³Bg  Ö€-Ýÿdzþγ+RáKÀê:Ö]QE[P±ƒSÓî,nA0Î…iÁ÷±«4P%¶‡to­nu-M¯~Ç“nžH� WnöÁ;›Ž09e/ylÇfŒÓh¤ö—~òêìö÷“Çq¹îÞ�Ñccn†59Ȩ¤Ó57Ñ®t¨tÝ2Ö˜Þ'•od‘†ñ‚Ćæç¹çÖ·o/ °¶k‹†e�J¯Ê…É,B€’Iw¨¬µK]BIcƒÎY" Γ[ÉÙÁè$§ŸcHeÉ%‰ãq”pU‡¨5Á¿„$6·vzdßhžQö²W1ÁÈ £“– Ã=�9ô®íœ"–f  d’p¬ÏøIôúi¿øøÐ3ŸMQºÒ¬ÚJ$…V0f™@aòä•ö¿Ž¥Csàë¢^;T8­ŒLÓÈ7]³ 0ÇÜ8š^Ny#ŒzŸíýì¯t5kn�µ¤T63Œç¯µCŠ´9Ö&‹S�ÖUÞ œ€2£æ?ÂrëÁÁæ�ÑgÉL©S´eIÉÜSé(¦ÑIE!‹E%€Z3IEQšJC’ŠJZJ)(sIE%1%”RPi)ˆ)3E%0:}+þA�ÿÀ¿™«•KIÿ�d?ð/ýÕÚ‚‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¤4´†€ÓM8ÓM0ÔmÒ¤5P/Už¬½Vz~›ÿ!8¿äk¢®wMÿ�”_�ò5ÑPEPEPEPEPEPEPEPEPEPLq±ÉE'ÜRy1Ï4ÿ¾E>Šg“üóOûäQäÅÿ<Óþùú(žL_óÍ?ï‘G“üóOûäSè y1Ï4ÿ¾EL_óÍ?ï‘O¢€äÅÿ<Óþùy1Ï4ÿ¾E>Šg“üóOûäS‚…Pö¥¢€ iŽ69(¤ûŠuÏ&/ùæŸ÷ȣɋþy§ýò)ôP<˜¿çšß"�&/ùæŸ÷ȧÑ@ òbÿžiÿ|Š<˜¿çšß"ŸE3É‹þy§ýò(òbÿžiÿ|Š}Ï&/ùæŸ÷ȣɋþy§ýò)ôP 0 íKEU=SþAÒþÌUʧªÈ:_ÃùŠÂެ¥Vެ   Ö¥Z‰jU  8SE8P…- ¥ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(„Ñ#°‡H†=2gšÌòÝÇ'æ9ì;çµhV„“ÈêU”È#í[™®ªêÕd¯}_æsÒw„_�´RQXšzõÛÉwe¤Çk3Ë4ðN%Ê,ac™ÆKHU'EÅÛéþ,íf•/à†ž"‡k#JX°,:œ€EI«ÛêÊöñØÙÉ!£™ï^)‡FDØ ôçü*ž�iâ I^æê×Nº½�yÚõ× :*¨‡w÷<ýΔò0zW-â[i¿µt!§Çj·>|¥DÉò6"bAÇ<Žý«¨ªWzxºÔtû¿7oØÝßnÜïÜ…zöëšÎw^½ÕÃ)5�•ÆŸvò˜d…> ÈÝ�îQ×�¤ŽýrpKw4:VÙ®ü¹¡kxÙU¸&<^p¤“ó}Þ£œún©¦GªÂ‘Ksw «n?f˜Æ[ބޢ¹ˆ>Çj±5¾§,sCÔm¥—q3,s•8À#†v¨ ¢©bÄ n8É÷â�Q[¶ÖÑ@„•� õÀ©(h¤¢� E%´RQHbÒQIšZLÑFh¤¢’€’ŠLКJ))ˆ %›@…Í%”Àê4ŸùCÿÿÐ�]ªZGü‚áÿ�èF®Ô”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE%ƒE4ÓM<ÓMFj3RšŒÐ.*»Š´Â«¸  Êí «"ýå9ÑÛ]GuxÈÏñ/q\늃s#nF*ø4ØQ\{_^—2ÿßF¢mFøËÔ¿÷Õv´Wu+ÿùû—þú¦ÿjjó÷/ýõ@ÕÂjjó÷/ýõGö¦¡ÿ?rÿßTÝÑ\'ö¦¡ÿ?rÿßTjjó÷/ýõ@ÝÂjjó÷/ýõGö¦¡ÿ?rÿßTÝÑ\'ö¦¡ÿ?rÿßTjjó÷/ýõ@ÝÂjjó÷/ýõGö¦¡ÿ?rÿßTÝÑ\'ö¦¡ÿ?rÿßTjjó÷/ýõ@ÝÂjjó÷/ýõGö¦¡ÿ?rÿßTÝÑ\'ö¦¡ÿ?rÿßTjjó÷/ýõ@ÝÂjjó÷/ýõGö¦¡ÿ?rÿßTÝÑ\'ö¦¡ÿ?rÿßTjjó÷/ýõ@ÝÂjjó÷/ýõGö¦¡ÿ?rÿßTÝÑ\'ö¦¡ÿ?rÿßTjjó÷/ýõ@ÝÂjjó÷/ýõGö¦¡ÿ?rÿßTÝÑ\'ö¦¡ÿ?rÿßTjjó÷/ýõ@ÝÂjjó÷/ýõGö¦¡ÿ?rÿßTÝÑ\'ö¦¡ÿ?rÿßTjjó÷/ýõ@ÝÂjjó÷/ýõGö¦¡ÿ?rÿßTÝÑ\'ö¦¡ÿ?rÿßTjjó÷/ýõ@ÝÂjjó÷/ýõN�ÿüýËÿ}PsEqR¿?òõ/ýõR-ýéëu/ýôh³¬MVõfÄ6T³æ²ÍÍÄ«¶I¤aè[4äZ–1VPT(* •jE¦(©€)âš)€RŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( GÍY²é,RƒÁx¾é#ƒŽO|ÑšÃð’<~³WVVùÎ`à»úVÓ èT’ààþuÑV•%ѳKš*]ÇæŒÖÙõ³ÿÓ7ú7ý74Çý̶î˜ç­m¨Ú¡Fp995™es·U[·”ˆÈ“c(ÄW#¡ž¹öªÖúÒK§^^¼µšhŠ .Íå±\€|t¬]B;H¼c¤—w± ëbvÃs(&MëŒ`ü£ôÀÆhðÍŒ÷×Íq~âÛ¥ÙçK( HÃ;;›ß“Í!•?áfت { „«»ÏQq ïm;þcœ``gœt­«�XÛiöwsìƒíRF9ç�[ËfÌùY�PzþUçpÞ_Zé“G·- ³ù’[ÄRI�°*à¶0pxèxÎÞ«Üú‡tûMѵ«Û‡¸–ÝÑ|ÀË€A#$·NŠ=i\,u–¾(µ¼Ô¢´†ÚèÇ,Ï wCa‰ÙT¹Á œ`pq[•ÁZ\­°Òõ²‘ÆÚ�äÎS%@J ÈùN=«¼ Í-6–�‹E%€Z)(¤1h¤¢€ŒÒQHŠJ(RfŠJf’Š`”RSm)¦ÐE%&iˆê´�ùÃÿÿÐ�^ª:?ü‚¡ÿ�èF¯T”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE”´””†�M4Â)Œ*R)„P,*`Š�–€)ºÔµu– d  L•%]d¨ÊP"”Ó\1ÓLtOˣ˫~]]Tòèòêß—G—@<º<º·åÑåÐO.�.­ùtytSˣ˫~]]Tòèòêß—G—@<º<º·åÑåÐO.�.­ùtytSˣ˫~]]Tòèòêß—G—@<º<º·åÑåÐO.�.­ùtytSˣ˫~]]Tòèòêß—G—@<º<º·åÑåÐO.�.­ùtytSˣ˫~]]Tòèòêß—G—@|ºpެytá@©RªT�*EJb­N‹B¥N‰@ ‹S¨¦ªÔª(ÀT€S@© áH8PK@¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8 S“XÓ#¿•Vo•z�ú ¿šçüûü)fØÆLŸúVök¦²Š©%®ìaM·Þöš3M£5‘¡¶€]›¿%>ÐPFeÇÍ´qŸLš�4ûHíg¶X± ìï"î?1rK猒zS®îÖÖIÒ ')‚c�ˆÏ8õ8ÉÇz[k¨o-£¸·‘dŠA•aÞ�È¿²ì³—OÑ­¢ã ÚGOqš’òÊÞþŠå ¢ºÈb¸e9#ÜT’Ê�ÄòÈv¢)f>€u®Wû{Whšà"�Qd˜‹# ¶ ¡€vó”’‚v©Æi½>…¦\ØÛYËj¦ÞÛReÛ€GcÈÁ ƒ×<Ö�QÒï$½´-:ª\E#Ã*§MÊHÈÏb0G±ª>'Õ%Ñô£yåµ¾ÓŒMs#º«ó®¹Ïö  ÊZåü?¨ßjWkæê"å#ˆ4Ík}ŸÌ?òÌ?%ˆÎr¦}+>O>­-¸KˆmÈXÑŸË Ë�ÛI,ìp«Ž‹ž) î(®OLñ=ÈÒn¤Ô–5’–Kvi‹I·9(©À÷Ž¥a§Œõ¤Žâí剕`‰ü¡¥Ï±X€J–Ý�~n§*@c4éTV÷ sMðŽ27£!üCGâ*LÒ´RQ@ E%¤0£4”f€ J)(QIE0 J))ˆ 6ƒHMi(¤¦Y£È*øþ„jõPÑ¿äü ÿB5~¤ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š())Ô”Ò)¤Sé ˆ¦SL"€+²Ôl•d­0­T)L)VÊS PC'—VÊRl  ž]]ZÙFÊ«åÑåÕ­”l  ¾]]ZÙFÊ«åÑåÕ­”l  ¾]]ZÙFÊ«åÑåÕ­”l  ¾]]ZÙFÊ«åÑåÕ­”l  ¾]]ZÙFÊ«åÑåÕ­”l  ¾]]ZÙFÊ«åÑåÕ­”l  ¾]]ZÙFÊ«åÑåÕ­”l  ¾]]ZÙFÊ«åÑåÕ­”l  ¾]]ZÙFÊ«åÑåÕ­”l  ¾](ެùt»(¸Žž§ N @*Tª´ð´ð´€SÀ¥ O€)ÀP8 -´QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEå¾ C…­c$1G•I âVéí[ù®Áoq'ƒ´·ºig„1i³y%�lwüA½[IÝÜÊ*É!Ù£4ÜÑRQÓ\-³›TFŸ¢ õ>ïáQiÖ §Û´jæI$s,²�îzœtJ³š\Ò™â8ç›Ã÷�Û«3È¢3µK„€ç“…$àrkžœ5ÍÇ�,¤±Æàº ò«ã¦åa±î v”´€Ãðó]=Þ¥$ùh¥t‘d6’[ûv°ä·Sž‡?ZƒÆKwi¬S]Ä$bdhpˆ±Œng�ƒ´ž'8®“4P3Ï´k9£ŸO¿‚{¹m#¹–Ú¢ ʱù…@(ª2Œù‡CƒŠK�{›«‹yìoç:„ùÝl(„2‚ûT &@%³ÎäסRæ� Š+]\µ:<â\Ì’Þ@%ýë´Qü eÇCŒVn£uw,Òµ–öÚËû½.î!0@ a€q�I#œão=«Ô(¤2;[…º¶ŽtÆ@td?ˆ`üjZJ(hÍ% Z3IFiQIE J))€´”RP ¤4R`!¤ ÒSRQI@n�ÿ ˜?à_ú«õCEÿ�Lð/ýÕú’‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¤Å:’€E4Š’›ŠŒŠaZ˜Ši ZMµ6ÚM´ÚM•6Ú6Ð;hÛSm£mC¶�µ6Ú6Ð;hÛSm£mC¶�µ6Ú6Ð;hÛSm£mC¶�µ6Ú6Ð;hÛSm£mC¶�µ6Ú6Ð;hÛSm£mC¶�µ6Ú6Ð;hÛSm£mC¶�µ6Ú6Ð;hÛSm£mC¶�µ6Ú6Ð;hÛSm£mC¶�µ6Ú6Ð;hÛSm£mC¶�µ6Ú6Ð;)vT»hÛ@í¥ Rm£m0-<-8 P(§J.(–ŠZ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šò?‡×R]øJ’]»–3ˆÅã…Óf¹/†Çþ(7þÚÿè×®¯5«3[ÍÜÒæ�È®ÅËZ¸´xÒãªT�zcÓÛ5›¨.¡ldòÚ)#s±·;uè~¢¤º…®-ž™á/Áxþðç‡gµ:ÞÞ‚Äq ¨íHb^Ý%�…ÅÜŸrÚCô5Ä]ÎÖ³2Þj».!HZhd½™$�Û—òÕeP €ž•×k62jZLÖ‘°V}½X¨`¹Œ€FGLÖGöF£ÿ>ŸùpÝÿñ˜Í}YL³ÈÒKi;B]ÎY—†BOs±—žõOÄ—×¶FÌÃ4–¶lÍö›¨ óZ,·Œs“ƒŒTš&™qa=ÜÓ€‚}˜Œ]Iq‚ ‚ÅÜÈ c¶Ú·¨Z_\d²¶p:œ)ÀÿlQy¥Ë‡§Co™æÓZ@Ó&Áµ»ðJ–üiŸØ’_Ø^ ¦k{«‹Ï´#®ÆQ€ˆú•‘îh½¯‰ubKä¹·¶¶ŽßË·–1¼3—s’Ä.9ü¹«Ðx–ÒYâ�โY&ò%P lT²îÁ<0gš§'…ðj ¨ß‹‰/<‹pª�bÒH ç�}ýxzxaWHžÑd´†wt’9ílÖŽ„;Açz÷4%æª5 hà²ici¯¾È$„9‘”ƒÓ Ã>´©â›7¼ò>ÍxíMhf1,J g=Èãê3Š4ý!ì¯lãÁk[O.9 ’W?;c=p¿øù¤ÿ„wýÅö¯ù‰ÿhgËÿ¦›öuü3úP‹âK7µ´�cœ›£ Xö�Éå‚_w8ÛŽ§’*´^/µœEåéú“<ñyÐ'‘Ì«ÆJóŽ2:ãÛ9$>HuKûÁrJÜ£¬Qâøó9çqP{w©,ô?²K¤¿ÚwÿgÙ›\lÇ™�ƒw^>çNzÐ?‰l¾Íi-¼W-u–8¡@\ ÆI€0N:õéš³o­X]"4Sçu¸º)ÿWÓ=?NµŠÞ ‡ìvùÐI=¤Mû‹E•KgîÁ¡ÖºKu³³†Ý�Bþí/à£�ô Dqjv“½²G6溈ÍÚFäç§GZ´h¤4Àd’$Q´’0T@Y˜œSXÖº½Ó\Å%Ü �ãmµlê„>¼91ÐòkGP´ú|ö§n%R¿8$~8 þDVü#7nÉçê),a•Š9º à硸#·ph¥¤¢’˜Ž¿Eÿ�Dð/ýÕúÏÑ?äü ÿB5¡RPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERRÑ@ Å&)ô˜ bŒSñF(˜£üQŠf(Å?b€Š1OÅ bŒSñF(˜£üQŠf(Å?b€Š1OÅ bŒSñF(˜£üQŠf(Å?b€Š1OÅ bŒSñF(˜£üQŠf(Å?b€Š1OÅ bŒSñF(˜£üQŠf(Å?b€Š1OÅ bŒSñF(˜£üQŠn)qKŠ1@)h¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ÞÔ€ë3Fk†Óõ¶ÑlõGy­ZÒyv \2HK{äù¿ÒÜiÖrØø’ÎH{]=Y­<ÏŸÉf‡s*“ÓÛ4ÚÉ,q!yQVc€(2Ʋ¬EÔHÀ•By c$l�ι4°³´Ó(ïÇtÇJŽó@Ó/ÝæÛ{ª÷yŒ /£~aõÍ-Ö¹§Y-Û\\ˆÖРœ”o�¾6öç9*ÏÛmþÚ–~gïÞ#2¨”sÓ©€ŠïI°½¶ŠÞ{d1Å�(!(cÀÇÊWqDZiV0iÒXEn©m"²º~mÝrz’}sš�PÖl´ÉaŠêI“1¬p¼„…Æ~è8ÆEkztZAÕ^é~Ä2€O|cg9ã ÷LYì­à·a ZÉ�1ÉÚS·¸##ñ¦Å¢ÛÿeÉcvåe‘唑·s3Ï^0qŽxÀ©¯5K+ T¹¹¸T‰Èy%ÉèIúTpkZ}ɶ܆7,éÚÀ–Q–޾(8¼;¥CÄ+h \íó·»9}½ $“‘ëÖžt=9´Étç�žÖc—G•Ø“ÇñžÃ¿jXµ­>y#Hî7fh#! ê `0pç§—ZÞŸd.Œó•û)A6#f*_…àsíšu¾š–úƒ\« ‚Ý-âˆ.j¤“ÎyÎGýò(E‚ÅB’;ƒt£{q!$îëêO)�ëºuŵÌñÜ|–˾`èÈÈ1œ•`cRF l•£”Iy÷�•ùKÜñŒcêEº>ž“^̶àI|¡n1ùÆ1ëÇôÅ:=2Îa–8pðÁöxÎãòÇÇÙõâ¤7� õ±/þ�Ñ‚`ýÐ@'=:‘SS1ü=¥¼Ðý˜ª['—I]YWÓp9#ØšÑUTEEUÚ£º¸ŽÒÖk™Ž#… Ž}4èäóaI6²nPÛ[¨Ïcï@4”RSÉ¢Y¡hœ¸V%¡ü �¨.‹jެ%¿$ŒßÎGä_šÑ¨Ræ &–æ�¥‹b+ÉžFGlІ’–’˜ŽÇCÿ�<ð/ýÖ…gèòƒþÿ¡Шe…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@1ðãþD=7ë/þ�zê«›ð%»Úx6 ²ù™+Óýcé+G¸œ%á%f…¢’ŒÒ ì±Cg+MK6˜Õ7Ïqß9ÅWÑ­g³ÓÖ)Û�Ĥ{·y(z&ïâÇ­_¢�™Þ ¸’ßA»h�2º£ÛŒîru÷aXW6z›™ã¶Ó®¡¶™bR¯è mapéžAæºÉbŽxš)cY#q†GzT?áÐÿè §ÿà*… !Ñ's}©ÛÉm-±¬ë¥I 㟺Ä}ås×½gø®Æ}KXÑìàºkS*\+J£$.ÕÈ^•ÑZXÚXÆc³µ‚Ýä¬1„úàTô€áïOÚü9dýþÊátù–!��È�Àö †…hÏ{§hž/�n.!´€i‹{ÛhâC€?]E áµFŠéµöR²C-ÆžAêIOЊŸMKÛ/�8 ‘í4éE«ÊÄ,‘#( ÁÅ,-Ù—’G2K!Þç©ÇAô¤™$Xby\áK1ô¹s®êçl˜†8ÊÆòbÓx€I÷C1™I8Æp¼V¿ˆRy´¸­Õ™äP„*–; Ž' IÀä×9s ºšI%žlÉ�êšEú#à`eV@uÕé—r^Z–™U'ŽGŠUN›”ã#ØŒìj SV{ ›KK{aqut[ËV”F¸P ËyäqŠ­ 5Ó]ê2M–ŽWIͫۂûv°䞊¼ô9©uØ$ºŠ8N‘£nrYL¡±\ãßœƒH?ˆ~É$‹¨Ùµ¦ÛSr¹�6í§¼q‘ò‘Ï!‡JŽ^Ü]5´ZAi`HÚå>Ò¡£.7aAvëÇ5M´;éô�ÄûDö×Ë+î“qH²Çic÷°6ƒëŠ“^Óï¯î_ìúR •ÀµÔb¹Ñ½Ð�xäOwâ+»{�OËÓ[];i~ÓµÈØ�¥pp¯jžMvyne‡LÓšðBªÓ1”Fa¸(È9l{G5�¨xjêêëU¼òšIŒðË m6#¹UE Œ¹Ç$ÈôíZK§¦_ÞÏg§ ¨oJÌÎThdÚ†ÏQÀäg½LÞ"Iá²þ͵{«‹Äi&aÅ^¹ç'ù¨¥ñ رºš-1Lö[¾×· »�RîtéU­´[íû>êÚ4¼š$†æ%p›·¿˜JÇ ž¸àÔë¦ßM§ë·©y¨ÆÊ–êàì=ª tÉê{s@®µ|tÛy屆 ®åŽ;t™ É-ò®0 œ{Ué5š»[Á ·�<Žq´–ÂóÐ +“ô™{ –š~ƒ4Ë´YM˜uÚ Éü j¬ÖSêúuÕì¬Í5úJ!fÀš˜(Lž0v–ãškÙk¶×ך„qÉ ·´·ÚPÊÁ�'žƒõ«‘jsù^MÜyÙòöHüuÆ:ã½rW¥|5IVÈY æ¶• FL‚<îSÁPzAÅLš%ì6}moqý¥ÚÜÇ Ä±eð¡f0eI€4½}©¡�ì�³Ir¶ÀgpVÏÍœ¡C{TãS°i„+{le;°‚UÏÊH˜¬M&Å¡¿±³�î{s<íýéå''ô“þúZâ(-œY¢Ü.®×28+»Ê.Üç<ü¤qÖ€:S}f±E)º€G(ÌndqŒäü~•Õ´ÐŽçPµÛ7Ÿ9p¹éžx®vù$½�âÒÖ ãÓ¾qóy¹>¼m^}jK?ïtç—O€G˜a“*‡å;w?{Ÿsë@ ÷Ö–ÉÏu K!Â$ éžµ=pßðŽêkm§´±O&Í=md†!Ýçý` ‚ñÞº‹m"Ö;eW�Ùͪڻ;’Ì€cŒ òy¦#B�Õhì-ašR,<1y�DŽ㎾¬PYֺŵÝì–±‰òäa„—iÃl=ðx5.§òé—1Û´‹3FBÀ,¶H¨ú×;äkR¥¤ÈÁ¼ˆchícSp~Ò{dñ@e6–’¨Gg¡Èßþÿ¡Ѭí þ@Öÿð/ýÖ�fËAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP4&Þw‰ˆ%O$})•=ó¬—²º0elÊrÀªõa&Ûm‹KIE–«Ý †¶qhè“õC Ê“ž‡Øôüj=:ýo팞[G"9ŽXÏ;uè~¢€.RÕ{ˤ²±¸º“îCH~€f¸»©šÚV[½SmÄIM —“$“3rþZ¬ªpSÒ�å�£Ë!‚{i¤i%µ�¢.ç,ËÃ!>§k/5�âMy´+Ý=Ø»A";$PLŒmŒŽMttW(úÆ¡¤ÛZjW×"òÖê&ÊBƒjHFèÂ�2A^{à÷«ºmΤšÔV×VþÏY¥0¹ãð¤ýÉêú¶§öâZ\*IÖ‘ÛîE!|¡³Ç9Éþ•oN×$Ô5›TÝåBÖR<Ð0Že‘‚zñ’?Zè³Es^!Ôæ¶Õ4Ø"¿žÚÞhæiÚÜLÌWf8ÚÇš­ý·¨\øbÔÁsê7w Rí_”+1,Êxbò;@i†zZæ—YºÕcÒ`±•m¥¼�§šb�ŒapT3¸ãž˜5¯«Ýøu´Ãyv×1»Ê$Ù .”\û±ÈÅu¢¹›mGP'B’[Ä�j3;ºÆ«±PĄ̈3Æ=IÏÒ¡Öµ›Û_í¿.ïÈ[g´¾Å>XvÏ#ž|ÐYI\‚ë—ig©›{ïícŠ1áŒ.%v+·å62§�\V¥Ýȳ½³�îd[{;w¹¹‘˜å•FÕÝë’XýV€6‰¤®n?4šç´±M>K‡[ˆÂç¸aŒž„ñúU�â‹M¤Ëow 2DˆØí´?_»’3ÜzSn’±õ-\}“Q‚Ð8¹„¥º¾>_6Lž£r“VN£eg ÂIpÄY"‰Ùƒ28'ŽI™ EêJ…nà{·µWÌÈ‚F\’ÏNƦ¦RI$H£i$`¨ ³18õ�mªÜµÄR]B±Y]�¶Í‚O`ÿïG§CÉ FÅ%-%0;M þ@¶ÿð/ýÖ�gh?ò·ÿ�èF´k6Z (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<›Â¿ò.Zý_ÿC5³X^˜Oá{I ~_¾Õ»Z=ͱSŒëÎqwM·ø…-%Œîak‹w‰fxKp]>ðç‡ûRÛÁ¬ 4UªJ(–±dúŽ•5¬lŸoV*®G# ‘Ó5“ý“¨ϧþWîÿøšé*„šî‘­º­Œr)Ã#Ü úš@A£i·3ÝÍ0'ÙˆÅÔ—+�X»€y vÛVn´ÑuªØ^™û “ä+�ÛÀ{cq$IcY#uta•e9zƒN  AáݺwØïév—©�>Z‡åõädÀ÷ÅK{¥^ˬ FÊþ+wû8�–K0¸¶~ðõ­`A¥  9¼<÷mi/’êKiˆ°ˆ©¹ãëH «­…Ý”úT¶ÖeYTF-C!ß·<\}ßÖ¡ƒÂ–ÿjI¯¤Kåd�ЩV•È%ñÐ`(c�Zè2=h ~? }› eyöi!žI-ŠÄ Ä’ctes‚¹íŽ=*ÊèóÉw§ÜÝß›‰m$’BLACn] >è{š×Í29c™Äêès†S‘ljÿÙŽ½é„Etnlñ|‚AܸÏ̧sqÆ3Cøu¦²ºŽ{Ó%ÕÔñM,þVîÙHP¹àaq×¾kw4”GZ³}CH¹¶ˆ�+(hóÓz�Ëú�T£Ó_TƒSmBƒíʱÜ $axéžw3šÛ¤¦#Ÿ>šêyRÔ~Ô¯fö…VÊÅNìäóòÿú¨´ðÄ0Z]ÛMöF[ˆL; ³H[¹#©ééÒº JÁµÑgµ}>�Ü$rÉuspÀ/™)áxÏûDÿÀnÑI@%5dG,ÕŠ¬Î3ƒùŠu1¯íEõ„Ö§n$]¿0$~„ÈŠÃÿ„né™DÚ‚Ë`ÅÜ�psÐÜÛ¸5ÒRPRRšJ`vºü�mÿà_ú­ÍÐä oÿÿÐ�iVl´QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQExß�×Áš˜¬¬C¶c‚ìAúA®Ž¹ßÈÒø7O‘­…±usåÇ;s–$óׯ~8®Š´n섬¬-”´ ‚ö§²–9¥h£ÆLŠûJc�ÙíŒf Ñî..´õ’ädî!$Û·ÍAÑöÿ}*ÔÐEqŠhÖHÉ« ƒƒ‘úŠ–�ÊZ½ïöv�ww�(˜®Nîß®+�–þÒÐùº‚¸†8RÙáÔâH²¼±u2 äç9SÅv·¶qßÚ5¼¬Ê¬Uƒ!åJ�ÀŒñÁóU¿³.ÿè;¨ßÿüj�xzêÖU¾·´ž¡‚åŒm †]¯‡À#гÂ¥ÔoîÓR¶Ó¬<Ѽ­$à•URd’ÿbËO“M;ÜÍs<¡U¤›h8\àaTâ=»Òßi–z——ö¨w´D”evV\õÁR>”Íi÷vž³ŽÙ­¾Ó$·$£G$„âVûª¼ã'©éÇ­>ÃWÔu fÖég‚I4ÑpðÈ óa¹ÝŒç?6:v­ŸøG4Ÿ"E Xàßå…‘†°àò ìx§Â?¥ì·O²€¶ècŒo¸z©çæÇ4‘ˆïŠßG*Ä̺{ÝÁ,Q:·Œ|ÿxr#§TŽ;}Áyо×.9È�F?ì§ð5¡k ivr3Ám†hŒ$´Œß!ÇËÉ

”Ý'I}=‹Ísç°…-ã;q¶4-Žü“žOµ 0Æ¡}{©ø{Qº[u¶™¦š(â ]TÂä'‚qè>ÓĺÅô&[{DÐ<°fÚ`¨@Ê«9¶áÆTŽ}knßÃÚU­ÜwPZ„–&fŒ‡l!`AÂçOb¤´Ñì,nkh lsÀ‘¶ŒõÂçð–þ$’â »‹5Coœn„�˜Ï'ÜONëž?ˆT2^jZQ—LÓÒÑ¢Óì#˜¼Á·?Þp{íëÛß\H]±í\ÔÌ·ÝɬÛ\½Ë…¸¶Žå\G“…òÔáèqׯjêf‰f‰£báX`”r§ð ‚? ¢º5ª8a-öAÈÍüä~Eù eúJZJb;]þ@¶ÿð/ýÖ•fèò·ÿ�èF´«6Z (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<“º“êþ¶¿’1Ì\”V,ÞÃŒóŽ8‡«f±¼'h–~Ó#�Ù•íÒl·\È7‘ù±­šÑ�¶ÔZ))hÉî"¶„Í<‹`€YŽÉÀýMIUï%Š+9ZhÚXñ´Æ©¸¾xÛŽùÎ* Ú{KŠvçq)íÞR‰»¾=ivi£·‚Iåp‘F¥Ý�@É5ÍËâ›õ‘ü� æH†ò¤Ç:³8y$ÑÎ=H­Oÿȵªÿלßúª7O«Iâx-‘ÄV¥ZPá¸hÕ ÈÇvÎñÎ8~RrÖêËuž-2T© ò Œ«¨ëvIöIcgrÁ#¯\rUHÓ4?ùËÿ_—_ú>J¯âßù®Þ‹ÿF-Lþ$Ó#HYäœyÛ¼µû,»ŽÜgåÛ�9jÄ:µ�ÃZˆnÍÐsÐ~m¿{·÷¬­e.eñ>�¶—Á/‘qó¼^`Çîûd:¯qi�{¤ÝO34 %Á¸¸eÀ(Îâ@H#ÛŠÛ›Y°·y“àà ‰ÀF'yPÀIÁϤmsM[ï>Ò 6Ä*¬Y›œ� g#Œv¬k[è#‡U¾{©--ïnñÐ� �Ü‚%HÖ~›*Ù¶�}pH²ŠæéMÛ)Rø++zg 3Óó¤3ªŸ[Ómíí§’éDW$YAmäàƒÜTò^Eô6gq–TgЏÉ>œ�+Ž»º‚ËÁ¶ñ]L°<÷‚x¢�ío/íúE ûVÊß[¦¿y~eW·drÇ"œ‚�œ±øïéL ‹k¸î¤¸HÃ~âO)˜Ž `�¦qõ–Îò ûT¹¶}ñ>v¶Î_q\£³ÙÿgA©]Ïek42\K$.S}Ã0b¥‡€AÑ` œeºÿ¼kK5Ïxíï¼!es PîdÈ^œHÃúWC]5ä§VR[6Îz1q¥½ÒAš3E¬�4Qš(¹¢’ŠZ)(¤æ“4f“4¹£4™£4´RQ@Å£4”PE”´”Q@%PE”QE!¤ES(¢Šî|?ÿ ;oøþ„kN³Ñ(¶ˆ�Ý”úÕ¶BG!Ev?b´ÿŸXïØ£ìVŸóëýû¹‡cŽ¢»±ZÿÏ´?÷ìQö+_ùö‡þýŠ9‚ÇEv?bµÿŸhïØ£ìV¿óíýûsŽ:Šì~Åkÿ>Ðÿß±GØ­çÚûö(¸X㨮ÇìV¿óíýû}ŠÓþ}aÿ¿b‹ŽÇEv?b´ÿŸXïØ£ìVŸóëýû\,qÔf»±ZϬ?÷ìQö+Oùõ‡þýŠ.8ÜÑ]—Ø­?çÖûö(û§üúÃÿ~Å mÙ}ŠÓþ}aÿ¿b�±ZϬ?÷ìQp±Ææ’»?±ZϬ?÷ìQö+Oùõ‡þýŠ.8Ê+³û§üúÃÿ~Åb´ÿŸXïØ¢ác‹¢»O°ÚϬ÷ìQöOùõƒþýŠW ]%v¿a´ÿŸX?ïØ£ì6Ÿóëýû\,qTWköOùõƒþýŠO°ÚϬ÷ìQp±ÅQ]¯Øm?çÖûö* ½&ÖâT…#“+ Ç4\,[ðÿü€í¿à_ú­:Ìð÷ü€í¿à_ú­:C (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<·áõô�†—qo¸ÄQ‘K@�“´2“± UätÔÍâÍw{¶1¡ÚeH$dϳ þ¸i—ðx: 6H$¶¾0\ Ž@Q•›ÌÛœôê u³x“C·ðãÛÎË%¿”Ö.¸pvãi_ëÒœ…�È5½6âÚ{…»�"·ÿ\fÌ~WûÁ°Wñ¬Û/Ǩéñ]iöj�ÒE±šòŠœ Å�zŽGùÎ]Œ—Ä·d_jšßJ[F”’YÉ\|ÇïÃFz×3cdö~·²—s48s,wRBaV¹XÂ�Œnýéò1Ö�ÏJ:£¤6r˧^D.$òÙJ«4$œáIàœr ÆFqYñx²9e‡þ%:’[Ísöd¹a–[q^ÒnÆAíXÓ\ÙØé:V¤ÒÞ[›}@Û̆òyy Ê낾Jñ�{b’ÒYtøÎ­i£VqüKʳH²;m/æ�Á”¼œzЕß�­¡:šÙÛ�AìdTe¶¹Œœ2Ç$`%xÏ#ò·§ø¢+ˆo'ÔmI‚Úc šòx‚œc!Ž·OBkÏ5ˆ/f¼×/o# h5œÀöìû!±>LйVRw.=y­ßZý¯OÔÞݤ°""¯ª¯–W;‡6ñÄNr±Ï=(sRñî‡bñ¬ö7›ÑØùW± mÁÇ'98É+¢³»‚þλiH&@èêr5ÀéWK=Æ�yq¬Ç¨N—F;ˆYaSºÈ‹Â(<¶Ï½øW}iq Õ²MnA‰²ê(j(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ *Ž¡àdº±rÒÆkvl$ËéìÞ‡ðÆäƒ2°ùd ä àsÖŠ(çGÓ¿³ÞÁl ŽÕÆ Q EöÆ1‚=GJ±mm �¬VÖé²”*.IÀç­P´QEQEQEQEQEQEQEQEQEQEQEGáïùÛÀ¿ô#ZtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿÙ endstream endobj 40 0 obj <> /XObject <>>> /Type /Page>> endobj 41 0 obj <> stream xœ=ÌK A ÐäµÌtÒÿ½0(ÌB]xAPi]x};Î E(i$p=k;%WœïÔȶX#ûe|]è´Âƒ»ˆ)¦Þ]ïíG# ãQ<®oj¸¦ù³–¢¨>yNöØNA±ybo6 ëBsá`2käü§~¦–/%²#� endstream endobj 46 0 obj <> stream ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ ¸"ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?öûKK{XímaH`ŒmDA€MEQEQEQEQEQEQEQEQEQEª»˜ ³UÐ�"ƒÜà~Ub€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Ì×aI4æ”�ž2 Ÿ©Çõ­:¡­È"øþ„*£ñ"e³94�¤pˆ cÚ´¡ÒÔ ÊÄŸEéRéð GÎüþn®u숄®Ê§O¶#÷Üj¬úk - ,𞵩EJœ‘n œÝ¡©[„a2Œá¾µŸ]wW9Ú³°QEÄQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEż7P<ƲDã ¬2 IE0<{]Ó?²5‰¬Á&1†Œž¥OOðü(­�ÿÈÃýz¯þ„ôW¥NMÅ6yõRiÑâ, ã,ê2™(ÅN7Ž2=zW¯‹²D× [魯©®ëT°ž›5™�Çæcç8ÁúW.ߣvÜÚ�-êaÿë×®4Üj¾¾~G^*•iTR§ØÕðÝì—�wºYT&˜¶3»=yôüª^ÜiÞ¸º´“Ë™0­´fEƒÇBhд!¢ ÿÒZs6Þ©·Ï¿½XÖôÏí�&[;Éóý»±µƒtÈôÅqâ\Véìuaã8ÓJ{™÷/²¶¾»¶{Kâ¶w Äë1Æ]T©'=>p8äwÁ5­|^Âû]]BÂ{k=:qOµHl¬xR’]™þ\ `ŽüU›Ÿ }¢ß\‹í›µ.|ùYò¶¬k޼çËöëíQ_xB=BM^9®�±Ô�&’b“ @¬œýÚåH9ç·�±[Vñ¹´·[Queu§eðÊ¿—$ª9Á « ïcKc«Ìš�†{¹ÿ{®Mk„WDE‚NU~Rr9Ï §ÅยÓ�º5…¼ÿi‚äKg§¬ LNC(?7~ýÎ1VG…ñ©Et/>Hõ&Ôf.rÑ4esŸVÎqíï@ _Y½üéa~mæiB^•E„ˆó¼ä¸l áç¨È£þM8YÜÝIo{Eh÷±‰" g…@%�gÜpÛO"¹}G¿]DÅ-›H—RΗpÏg*}ž)K3옿–O |‹ÏµmAà{}+P°�ì#76oh—é±Ç*« eÙHÞ~›A  W¾1Ž-3Tž >ô\ÙÙ›¸âž žl|áÀ,>PG á±Û¥\mOS¹ð”Ú…–�$z‘·g†Ú}¿3ã�ºÄ`öçò¢óÑß\Nó\*}5´÷E\1å�Ï銱o§ÞÇ¡‹53ö•M‰u ! ã§ÊŇn}}¨MñVºMö¡u¬K¨Çl¨f�­W18!�`ã‘€Fx<šÔƒÄ�M%ÔÊþ+«xÖ_³y"yVýRí¯#¼†H­•XÄxØ •ÈÇ^zçš~§áíwµº¾¸³¹¿�2÷:zK+qå“Áà†Ï'9 ‚Æö FÆ ÛWßè$�±Œ‚3Ðô©eŒM ÄYÔ:•%« úÈ>õ�ªXØÁkÆ©(ÄkÇ¢ŽÐT“Æf‚H–Wˆº•G�É‘Ôd‘î(‘mkQ:Ÿü#åÎíŸÚ˜ÛŒíÇO?ÃÓ6?†ºè!öñ¬챨PÒ9f8É'’}ÍR:�ý‘ý™äbÛ¯ wnÎwîë¿<îÎsÍ^†3ÆÒ<¬ŠÈøÜØN>€?×ÃþñÿÐM&«Ÿì{ì;!û<Ÿ2œòžAõ§LÑ`tcŸÈÔ—vâîÊ{bÅDÑ´e‡Q‘ŒÕA¥$Ù2MŤy¤Z¬6n‰®Ø`âåú~&º_ ê’ßjn†yY¶³–î\~§óªoðæ9_R,zsÿeZú…—C¼{�xÓŒÆÇ´�}O¥zØŠ¸YS|®òùžm 8ˆÍsmò.xš{Û_ jW:s켂Ýåˆí ’£v0xçük™ºñ�ÄÞ£8‘N�šíÊ8¸HÖcÎ2r’?Ø®æDYchÜeX#Ôâ×áÜðŠiú,š›É%¥×ž×F.e\(FzÎÌç¶kÇ=C6ã_Ôm5 ‹Kï[Ëm>ÚH­¾Ï }ªfF/òíÜrÀp¤u­ ½sWMJÔo†…–д,ö¢Hd™‡Î’9û¸8eIõ=º{]/ìÚæ£©yÛ¾Ù)åíÆÏ/w9Ï9ÝéÚ¨ëZö°—v¿Û/Ÿy—5»[#•R0DmÆÜû†ç¥oŽ”S"�a…"N*äöú(¢Š(¢Š(¢Š(¢Šdщ¡’"Ρԩ(ÅXgÐŽA÷®9µÍDêð‹ ¤;¶jàcf3·ÇÚ1ü=1óãøk°ž35¼‘,¯u*$�“#¨È##Ü¢t;ûû/ìø¶ëÃûó�ûºïÏ;³œó@ „[ÛÅ ³²Æ�Hå˜àc$žI÷5SZÿ�DÿðýUÈc1Am+ÊÈ¡L��Î@êpÉö©ë_ò Ÿþÿ¡ ¨üHRÙ• ˜ª÷·2ÚÀ$†Æâñ‹cË�£ ¯ÎÊ1øçšu¤¢ke9ä ­OI«0Nèäô�Zõu=p�êoºùIKoÝÿ£Â0s/^3ÆFï�:Ê­me­ÅäÑ–-w0šMÇ€Á8öÂÇ5f�ʺ€ÍóØŒ~u‹Zšœ "Ä$äý+2º)/t£÷„¢–ŠÐÌJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h¦QKE ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€³5y|¡úf£mœÿÇ•§�»§ÞýÛãÛ§~µ©Uo-f¹ å_ÜZmÎ|•ŒîúïVý1C2ôé÷ßF¿ÚZÔÙÏîîtÿ*3ÇvòW˜­Ú¥masë$š½íÂŒæ9R§ë¶0Z½B%´P"­åü6!<Ô¸mùÇ“m$½=v)ÇãQ[jö×S¬1Åz¬ÙÁ–Êh×ñf@çWè bQKE°å°³Ô|Kt—Ö°]$VpÖxÄ,ón „í_ÈVífÜØ^h½í�ܼ�¤R,öæPB–*Fp~võíC3õML°··¹³Ó­-§[Ë`²C £Ó"‘�:Hük¡¬™4íNìÄ—·ö�K¥a³df(ÁÀÜdl ¨íZô�1(¥¢¨F~«æÅmöÈnV·È•±¯pÞ�8=G¸È4´‹Éµ¹þÜÆKh!%Ð�¯»™GÐð½1ƒé�K«o%�çÜÉ ogäfìHïŽÝ»õXÄoÒõK$Áv9C�"ö ;àò;�¡9›j2Å´UóOˆò0Cÿ^«ÿ¡=|Aÿ‘†úõ_ý è¯B—ÀŽ¿=öŠ–þŸ­[ú~µáÈÊ)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐúÁSÔQÆCdñŠ–€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¡­È&øþ„*ýCun·VÒBÇÆ3éN.ÎâjèãíîÞMËÈ=G­kEw Çú7ª>‡|®BÄx0çó¦ÿbêóïÿ�¯øÖòP–·1‹”ze” ’úÕYï∄;ûtªßغ‡üûÿãëþ4bêóïÿ�¯øÔ¨G«)Î]IݤrìrÇ­6¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãZóG¹Ÿ+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìP¢¯ÿbêóïÿ�¯øÑý‹¨Ï¿þ>¿ãG4{‡+ìy/Äùaÿ¯UÿÐšŠ›âU¬Öž$‚9ÓcE d7¿¥èÒ~â8*¯}Ÿ@ÑEážÀQEQEQEQEQEQEQEQEC4¥D¹õí@QU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿnŸþ{㢀-ÑU7Oÿ=¿ñÑFéÿç·þ:(ÝStÿóÛÿ«4‘°óe'Æ1@¨¢©ÏrÁʧqš¹Egý¦oïþ‚�´ÍýÿÐP…Ÿö™¿¿ú >Ó7÷ÿA@VÚfþÿè(ûLßßýhQYÿi›ûÿ £í3ô¡Egý¦oïþ‚�´ÍýÿÐP…Ÿö™¿¿ú >Ó7÷ÿA@VÚfþÿè(ûLßßýhQYÿi›ûÿ £í3ô¡Egý¦oïþ‚�´ÍýÿÐP…Ÿö™¿¿ú >Ó7÷ÿA@VÚfþÿè(ûLßßýhQYâêPylûb¯FâD ;Ш¢Š(¢Š(¢Š(®Åž!mÂ3 +\ÎJÇ» ©ýGç\ ñ·ˆIÏÛñì!�ÿ‰®ü>][xÙ/3޾6•rJíž½Eyü&Þ!ÿ ‡þA�ÿ‰£þoÿÐCÿ ÇÿÄ×Gö5~ëñÿ#íJ=Ÿáþg¯Q^c¤xóRŠú5Ôd[‹g`ìUd£W§W' S $§Ô롉…tÜ:Q\ÆáEPEPEPEPEPEPEPEPEPEPEPEP‡|cÿ‘Â×þ¼SÿC’Š_Œ_ò8Zÿ׊èoE{XáDòkžáEGX—Q‡Hº“I·ŠâýP˜"™ö«7¹ÿõgÔu¯õ‹ÔWá«ÿO¦3‹;©Œ§í&çT•dŽL ¦Ï³áÂŽ0s“œžÎ€ (¢€ *)ZpÃÊŽ6\ui ŸýÕk .œ8÷ybG¿ó  ÔQE\B· nÓF'u.±–™F2@ê@ÈüÅI\6¥á³qã»;£} Ô^Òîh.BñI- \ò¡YÁù··LŒw4QEQEVoøúîZµUfÿ�¡þçõ <±Ç�›Ž)À‚ ÷‹«”‹¹A>Xê3ÜÕ ñÏ4ÿ¾ExŒíЭ*nKÏþÝOÏ+îuUŸÚ>ÏæÇçìßåî¶çÇ\gŒÒ[ÚBrNQzý+�ñ5åÆ�«ëW¶²ywþy"|µƒ±ƒÏ­{°—4T»œMYØíh® Y¸ÖNÖôùõ31“E{ÈÞ;tC †E9SÓœ‘Ï5ºÆµhö:U�ÕÍÐzÜ‹•¡¤bHw².ÕghÝó ‘ÔÐŽÚãXÓí^é'¹TkDGœ~ErB“ÇråVÒh¤’HÒTi" HªÀ”$ddvãšó}ViçOMwÃs&—¦¼± ·ÈX8 âµ5=nöÆë^0ÈRþÎñÀ­"$‰â£;|ÇÏÐãÛÑ^vÚLjì­m#{«ë�í ÉV)žh¥H‘r€+ìPÍ׿Éžk°j>"¾¿Ñì%»|·×o1X╛ˑ`²†Ãr#’1ЀÞ«ÝßÙØF²^]ÁlŒÛU¦� 'ÐÞ¸X.u [Xð�ìú¤–Í%µÈ�Ga]Ñ�¼§ÇQž1Æ9­¯ÚG&³iyo}§®£mo —ø1˸ú©Ê�˜Üh§VWPÊAR2<K\%ž·6¥6› �ôz„º_ÚV!m°«íùIÛ�nF1Š©yâýIü5üWžMôh½šŠ1gvÒÅÎv¾Ó…O˜zò(Ѩ®VßV¼ÔµÛ¨ÛR�N‚ÌÁ¶ˆLáÐ1b[�¹%FÜr§“Ò¨hÞ ×õ-j70H-ZîX&…šÜ$H¥À#çówåW ®:à w4QXÚ�Þ¥¥Ý‹´‚[ý=Ô,–ðF зfQüJzÔuéœlÑT4¡¨´6¤È²ÊÛ–Þ<ã…ÝüG¹=2xâ¯Ð3*)f`ªI' …/­$û>˨í+¾ ²æ®3•þðÁÏ1”©`Šò{9|„¶¼u!<%"Ú³ÑZgŠOÊ~4é:þ�fÝjÖw�|Û”]̧ £'’v5<ú•…µª]O{m»ãl²Jª�ž˜$àןÙC|—>{[KYn®lon¥ŽêFEWŠFä+åºb¯Éáñ¦ÿg…ÔôÕÕ`7S¥­ÒþáÒWÜꫜ¨S€gäsŠî‘ÖDWF ¬2‚)k'ÃWÐê^´º·´[H�XWk;H$dàƒZÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETs©j’£›ýKPêÌ—ýsÿ¼kN³%ÿ\ÿïɽÖ⵺û$·7×aC46ª¤ = 3«žÀœš~Ÿ«Á¨I$Tö×Q€Ïop›\ÐðHaî OÃ¥R]VÞL Õ¾–I�êU›17¸òö€Ù#µ‹$ž*Ñ¢„ƒsšI¶õX Áö/åã×oµnTSN�´JÀ“+ì\v8'ŸÊ¥¬�^6æÇѹóq½ñ�ºÇ¾ÿ…O±k$�šÛµÌmµ·Ó§|S¦Õ¬`Èk˜‹ T8È9Çé\ýœ/ö¨#-6ÍéåyÌd’óú`;ºôº^ù,f–4rÎåå%¾P@`:㨠’Ëk�ÞMÄRmëµÁÅ y ]=¾ì:¨~zsÓò¬í6®„‚_2E âœ1ÉùÆâzÿJ¥ µ¤—i¥˜-÷Âûž]«—Aȹäô>´½qy °C#pùÆ9àIú`RÛÜÇr$1çÛNF9À?ÈŠÈÔ,ÛûB(ãÄв¤1¸—v2@ç&�.KÙÙtÂ…g >S÷ch㯿oZÝ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(­oø÷_ÇùÖuhÛǺþ?΀%¢Š(¬�Oĺ^‘;Ãy%ÀháÊb´–UŠ2XvE!GÈÜ’>éô­já|aö_·j›ÿ¶ü¯ì´þÓûÙ¼¿³flnó~lÿ®ûœãßÒOâM.ßQk$¸ó–hàv[IZ$‘öìV�.ÀNôàŸâµ­\.£ö_øH®óý·ö?íK?µù_eû7Úqågwï±þ£;xýkº âgüÂÿí¯þÉ\wÿ?æÿmöJà+ërÏ÷X|ÿ6|æ?ýâ_/ÉÏm=¬‚;ˆ$…ÈÜD*qëƒQWW«^ý›Tÿ�®«mºs¾w<�Ýúç8<³rzœ=NïíF/ø˜ß^mÏü}.6ôéó·_Ã¥tR«)Úëóÿ/ÔÆ¥8Æö—ù”+ß«Àkß«ÈÎÿåßÏô=«íü¿P¢Š+Á=€¬øµ­>}fm"9˜ÞÂ¥�<§œ1IHÉänµ¡\L7pØüEÖ®î.¬Ö­ �%¡óUU`'2�m»²G˜ÜHŸ*ã$°µ»‚ö–ÞMè²I8#æG(ßFR? š¹¯j6—wv°N²Ì—ײ°N@V»›i$qΧ5ÒÐMω4«).ÖöòAk"ÄÏs*Æ®Ì�ÀRÄdàþ†“Eñ>�¯Ù¥Æ�¨[˺5‘â©’ Àê Ú{sé^_«YlÔuÍCLÐíô± Ò'Û'ƒ÷�ù±,lÁQ†Õ #ÈY‰>\œŽÃÃZx×Òö}Z-#Q°\Y[¼V­¶tŒýÿ�Ü1pçåÎh¦�[±“XŸKí¸†œî#k#ƒžpTçð¥Ôµ»-)`k™YËí(7`*3³@ž~žµæ¶:/‡îuË'Ióì'2Ïv!‹|ð&?x¹Ê‡²±?xV¯‰´)G‰ìí­£y,eÓ&‚-6Í#Œ,k,`]ÅTn Aäp8ç¨o§j¶º¯Ú¾Ê\‹iD.YvüÅøÿ€ºÕKÆ‘¬G¥ê•½µÃÄf>lŠŠª$ž§<c\—ƒìm-¼A«M‚ÚÙâÔ ¥Â‹|Ú)‚<§ÊùîOË‘óú絟ík»/ éZÄZkš“Ë$?h2:$ ”à³�ŒEw×~&ÒlôuÕ�ןbç 5ª4áºôØ¡ç¥WohP^Ii}¨[é÷ r4w²¤-ó‚@ãýEqþ+º‚÷á´vÚM¥ÝŒ‹+ÛEnfdX¬ža�ˆeä�I›_˜“ÇrMoÞè6•¯øn};H°³™µC%½²FÅ~Ëpq•Œ�ǵu”QExÆ/ùí¿ëÅ?ô7¢—ãü�ößõâŸúÑ^Íá£É­üF{}Q^1ëQ@Q@Q@Q@0ÃL³ÐÊŠQ\¨ÜªH$èv®~ƒÒŸEQEQEVoøúîZµPÍr={Чqcmtáæ�s€wÇáPÿcØÿÏÿ}·øÕݳÿÏüxQ¶ùãÿ� çž7Í(&ý¢­R*ÊOïUDTQ…Q€=A5�¥É�Ïk¦XŒ2# ¾3ü'=W“ÇJŸlÿóÇÿmŸþxÿ㺶ˆÌ�ìÖþw›äEælò÷ìÙ×n}=ª©Ñ4–¶KfÒì�¼m½"6éµ[Ô `z½¶ùãÿ� 6Ïÿ<ñá@Iag)s%¤^?%‹Fäþéõ_n•�¬øv×U²h-á-*Jû­ÖD˜ Â‰�ê8Ïaé[gÿž?øð£lÿóÇÿƒ¤xNÃN´»‚h-&ŽíÃËZ¬và€Û tÉÉ$š×ŽÆÎ…¢µ‚6… qŒœeWР©öÏÿ<ñáFÙÿç�þ<(«éz{ÁcjÐÂÛãŒÂ¥Q³œ�Ž{ŠuæŸe¨"¥í�½Ê©Ê‰¢WúŒŠ±¶ùãÿ� 6Ïÿ<ñá@>³½ÖÒþê('‰-¼…·–ÊðÁ†zcéWnt½>òE’êÆÚwE(­,*Ä)ê#¡ô«[gÿž?øð£lÿóÇÿZ]6Æy¡šk+i%ƒýS¼JLî’8ü)F�b/�ð³·d`Ïå/™�MØÍXÛ?üñÿÇ…gÿž?øð ¢“lÿóÇÿmŸþxÿ《M³ÿÏüxQ¶ùãÿ� Z¬tëŠæ#encº$Ü!‰q1#¸ÇÍÀš±¶ùãÿ� 6Ïÿ<ñá@}’ØK¢Þ/2)ìE8ÈSØ ¦ÞXYêˆïm ¹@rhÀ}pEO¶ùãÿ� 6Ïÿ<ñá@¢¢E ª0RÒmŸþxÿãÂ�³ÿÏüxPÑI¶ùãÿ� 6Ïÿ<ñá@ E&Ùÿç�þ<(Û?üñÿÇ…-›gÿž?øð£lÿóÇÿ´RmŸþxÿãÂ�³ÿÏüxPÑI¶ùãÿ� 6Ïÿ<ñá@ E&Ùÿç�þ<(Û?üñÿÇ…-›gÿž?øð£lÿóÇÿ´RmŸþxÿãÂ�³ÿÏüxPÑI¶ùãÿ� 6Ïÿ<ñá@ E&Ùÿç�þ<(Û?üñÿÇ…-›gÿž?øð£lÿóÇÿ´RmŸþxÿãÂ�³ÿÏüxPÑI¶ùãÿ� 6Ïÿ<ñá@ E&Ùÿç�þ<(Û?üñÿÇ…-›gÿž?øð£lÿóÇÿ´RmŸþxÿãÂ�³ÿÏüxPÑI¶ùãÿ� 6Ïÿ<ñá@ E&Ùÿç�þ<(Û?üñÿÇ…-›gÿž?øð£lÿóÇÿ´RmŸþxÿãÂ�³ÿÏüxPÑI¶ùãÿ� 6Ïÿ<ñá@ E&Ùÿç�þ<(Û?üñÿÇ…-›gÿž?øð£lÿóÇÿ´RmŸþxÿãÂ�³ÿÏüxPÑI¶ùãÿ� 6Ïÿ<ñá@ E&Ùÿç�þ<(Û?üñÿÇ…-›gÿž?øð£lÿóÇÿ´RmŸþxÿãÂ�³ÿÏüxPÑI¶ùãÿ� 6Ïÿ<ñá@ E&Ùÿç�þ<(Û?üñÿÇ…-›gÿž?øð£lÿóÇÿ´RmŸþxÿãÂ�³ÿÏüxPÑI¶ùãÿ� 6Ïÿ<ñá@ E&Ùÿç�þ<(Û?üñÿÇ…-›gÿž?øð£lÿóÇÿ´RmŸþxÿãÂ�³ÿÏüxPÑI¶ùãÿ� 6Ïÿ<ñá@ E&Ùÿç�þ<(Û?üñÿÇ…-›gÿž?øð£lÿóÇÿ´RmŸþxÿãÂ�³ÿÏüxPÑI¶ùãÿ� 6Ïÿ<ñá@ E&Ùÿç�þ<(Û?üñÿÇ…-›gÿž?øð£lÿóÇÿ´RmŸþxÿãÂ�³ÿÏüxPÑI¶ùãÿ� 6Ïÿ<ñá@ E&Ùÿç�þ<(Û?üñÿÇ…-›gÿž?øð£lÿóÇÿ´RmŸþxÿãÂ�³ÿÏüxPÑI¶ùãÿ� 6Ïÿ<ñá@ E&Ùÿç�þ<(Û?üñÿÇ…-›gÿž?øð£lÿóÇÿ´RmŸþxÿãÂ�³ÿÏüxPÔs©j~Ùÿç�þ<)V$aæªqœæ€-Vd¿ëŸýãZuN{f.Y9Ï8  kýÃR‘%¹…¼èÆh¤h¤Qèl{f ‹Ãšm´ÐÏk AÍ7÷?QGÙ¦þçê(¯qj.'2Ȇ2J…Ç\žGlš½öi¿¹úŠ>Í7÷?Q@I¤AÇÚYÅÁûÒïÉaèF1Ž=)Òi�ÈåÌ’îg ç îÁÈŽ# Åiýšoî~¢�³MýÏÔPqÓ¡Û"#IHAe�ÊŒ÷Ǧ{â•´ëF¶[!Djr¸àƒê\ûÖ‡Ù¦þçê(û4ßÜýEQKDG�÷ÈÍ 2)fÉ ã9ü©ðÀ�´¬¤“+ïlúà?*·öi¿¹úŠ>Í7÷?Q@ÑS}šoî~¢�³MýÏÔP4Tßf›ûŸ¨£ìÓsõ 7Ù¦þçê(û4ßÜýECEMöi¿¹úŠ>Í7÷?Q@ÑS}šoî~¢�³MýÏÔP4Tßf›ûŸ¨£ìÓsõ hÛǺþ?Ϊ YIåqïš½Ð(í@¢Š(¬�OÃz^¯;ÍyÁi!J"»–%–0X…uF‡ÎÜ~ñõ­j(& iw‹_IÇœóG;ªÝʱ<‰·c4a¶6'$ô­j( âgüÂÿí¯þÉ\z÷‹<<Úý„bU¹€–�wBQúʸàŸƒ�°gÜMÿ_M–â¨Ç¡)$Õ÷Ó©ác°õ]g(Å´Ìù5ÝQæ3 é£��¤ÂÞ^FIçn3Ë1ú“Uîo®ïJý®êyögo›!lg®3[ð„ø‡þ�ÿù?þ*�øB|Cÿ@ÿü�ÿ]ж:©GïG+¥ˆ{ÅýÌçëß«Ìt�êRßFÚŒkolŒ �êÌãÐ`šôêñ³zôêÊ ö¿ãcÔËhΚ“šµìQExǦYtû$¾–ù,íÖîU %À‰DŽ£ -Œ‘ÀãÚ¬Ñ@t­NÑ-žÛL³ŠÖ‘¥dŒ`c’ÏA€8zŠ( ü3«x$Ô5ûdþlåe\mÚ#ʨ!@§$¶‰·Ä#Ê4mýåaóÿk9©aÑmẰ¸ó®d–Ê �¥“yer„–'’~AÏÖ´¨  vZl6ßK9kÛ�´I¸‚lDãÛ?ZϹðž™w©]_Ê÷âk’¥Ä7óB¿*…FÊ:×5¹EcEዹ«èÐM«C~òJ|˜Ýßåò²ÿyˆÆI=:ãÛ5£E08QEQEQEõœ:�…Í�Ê–‚æ&†EVŸ¡©è Z_4ÖÚ�³ø“Y0ê9ûR‘mûÌÆ±ž|œ�‘TqŽ™ëÍhA :ß[]^k…ù¶c$1Ü,*¨åY7~î5$íf’9­š(¢Š(Ä~0Èßmÿ^)ÿ¡½|`ÿ‘¾Ûþ¼SÿCz+ÙÃÿ Moâ3Û¨®_û^ûþ{ÿã‹þkßÏüq¼¯fÏOÚ#¨¢¹í{ïùïÿŽ/øQý¯}ÿ=ÿñÅÿ =›hŽ¢Šåÿµï¿ç¿þ8¿áGö½÷ü÷ÿÇü(öl=¢:Š+—þ×¾ÿžÿøâÿ…Ú÷ßóßÿ_ð£Ù°çGQErÿÚ÷ßóßÿ_ð£û^ûþ{ÿã‹þ{6èê(®_û^ûþ{ÿã‹þkßÏüqÂ�fÃÚ#¨¢¹í{ïùïÿŽ/øQý¯}ÿ=ÿñÅÿ =›hŽ¢Šåÿµï¿ç¿þ8¿áIý¯ÿ=ÿñÅÿ =“hަŠå¿¶/ÿç¿þ8¿áGöÅÿü÷ÿÇü(öL=¢:š+–þØ¿ÿžÿøâÿ…Ûÿóßÿ_ð£Ù0öˆêh®[ûbÿþ{ÿã‹þl_ÿÏüqÂ�dÃÚ#©¢¹oí‹ÿùïÿŽ/øQý±ÿ=ÿñÅÿ =“hަŠå¿µïÿç¿þ8¿áIý±ÿ=ÿñÅÿ =“hŽªŠå¶/ÿç¿þ8¿áGöÅÿü÷ÿÇü(öL=¢:ª+•þØ¿ÿžÿøâÿ…Ûÿóßÿ_ð§ì¤/hŽªŠå¶/ÿç¿þ8¿áZEýÍÕÛ¤ÒîQ mœ�JN›JãSMØÚ¢Š+2Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š*9î!¶ˆËq4qF:´Œ~fšMè�»QYÿÛº?ýlð!?Æ�íÝþ‚¶?øŸãWìª+ûˆö�î� +?ûwGÿ ­�þ'øÑý»£ÿÐVÇÿühöU?•ýÁí!ÝVöî�ÿA[üOñ£ûwGÿ ­�þ'øÑìª+ûƒÚCº4(¬ÿíÝþ‚¶?øŸãGöî‘ÿA[üOñ£ÙTþW÷´‡thQMŽDš5’'WFä2œƒøÓ«2ŠkHŠpΠûšO:/ùèŸ÷РÑLó¢ÿž‰ÿ} <è¿ç¢ßB€E3΋þz'ýô(ó¢ÿž‰ÿ} }Ï:/ùèŸ÷У΋þz'ýô(ôS<è¿ç¢ßB�:/ùèŸ÷РÑLó¢ÿž‰ÿ} r²°Ê°?C@ EŒÊ£,À}M-Ï:/ùèŸ÷У΋þz'ýô(ôS<è¿ç¢ßB�:/ùèŸ÷РÑLó¢ÿž‰ÿ} <è¿ç¢ßB€E3΋þz'ýô(ó¢ÿž‰ÿ} }Ï:/ùèŸ÷У΋þz'ýô(ôSVDc…u'ØÓ¨ľ/ÿÈßmÿ^)ÿ¡½¿¿än¶ÿ¯ÿÐÞŠöpÿÂG•_øŒíê»�¯ÐH>ЈÆx;Oqê>•5RÔt¸5$�Ìyb–3˜ç�¶È™ëƒèGWžvÁwËÌ�ÈÂþ\˜Æqž™çðªZÆ£6žÚp‰Q¾Ó{»ïáX‘Ï^*õ­¬6vÑÛÛÆ±Å¨íTµ�:mA´ã"ýšö;‡ÞHʨ9¯4 nG‰´y®Å¬w�¦24[|¶û뜮qŒðxê{Um?źuí�ÅܦKxᙢ>doó|ÅWQ’q÷FHèjü;v–V°™ ݬ׬C.Í�ÇÞÃoz«7…oå³{S-¾È/ÚöÕ„²!}ÅÉW+‚¿‚¤ô¥¨ì�uŸÔtQa8{k©åŽa³å�›• �éPèZä÷vúwÚî ßiÝ…‘Öuät¥Å2(Ö’4TP g8ŸTHbŒQE0 JZ((¥¤ Š( ¢–Š¥{vö×ztHªVæàÄäõE#ñï”­\¬ ß iR]éÍ‹§ùipZãñŒ§• 㟘§CÚ¶m,m,"1YÚÁmmÅ!Œ '׿’¸;V®�ÿïÿ\�ó—Zšü?ýr?ÌRŸÂÇÎŽŠ+>ÏTû^¯©Øy;>ÄÑ�û³¿znéŽ1Ó½r�…Yu '¾k%¼·7j»š óõ+œâ�í¶5ŸÛmþÔ‹¹¡óWx_R¹Î(Í�¨x§GÓô[½Y¯ žÚÔ0Á*1-ýÁÎ7Ã5=¦±my²Ò{[‹cn&Iá¹WÝó2Ÿ”vùOÍÓ9¨FЧ­¦Ïm-ÌZ…¤�BH–T™J¡Þ9Àüh®œÐÜLº…©ŠØâw."?íü¿�\¢€r2( Š( Š( Š+”›ÆÉoei4Ö$›U}:HÖLù!dd2“ŽWOüPWEr·Þ-º†å­ì´¨î$: Ób2ݕϑ泰qƒÓð¢O4HÖϦ•ÕêØýœÎ<¿1£óAó1÷vûgŠÕM6Îgcmw<Ñ+Ä…�±_¼H99!qŽ3×ð§ßxzî=¼RIimrðîÚI nùŽ06ò}MG·…ìÝ¿½Œí{ôU†°¼O'u¤ëç"Ìdo'¦ß_™5´öÅDðÉa¹w©\�QšÑI=™-t;?‡³h]X—& ”)ìÁ€ãóý+Ñ$b±³ ^eðçþF�úôoý +Ó&ÿQ'û§ùWËf©,K·‘ôsn‚¹”I'$äšJ(¯4î (¬½KV’Öò ;3w}24‚?0F¨‹€Y›$€Iü jQT©QOª´çrT¤ó¦3œpÙÁÏQõè*[�NÂÐâæúÚ…lI*¯�'¹C@¨ª÷7övb3uwCµ<Ùî>ƒ=i~Ýh/ŸÚ ûQ]Â0o#×o\PôVf�©I«é"îTTs4Ñáza%dò\Ö�-»”�0zœŠŸúøÿÞ΀5«.áËÎù=jVLßëäÿxÿ:eQ@V>©­Kg©Úé¶vbêîâ7˜+Ì"PŠTH9?0àÊ€6(ªgS¶‚ w¿–+fO*ÿ\ô©úÍ#¸‘® T¶8�Œ€Žù�ððAç±  U·Z}°Z}ª´•Ü!óò=võÅX Š( ƒ�pEkFÅ£V=H²+Zõÿº?•x·Åïù­¿ëÅ?ô7¢—â÷ü�ÖßõâŸúÑ^ÖøQ<ªßÄgoEWžvUTFmãóKìrÊçƒÁ#ŸÿUT!Ï%g.X¹¨®~-BÎòcYG?óÝÏ?�jéòù±;b7ðç3þzÖÕpÒ¦¹žÆ4ñ¨ì‹ ,hèŽê¬ç ÁcŒàzð ¥gEuFe ßtÉúWžøâEä o-¢b¡>©$- žD»Âü¡—<çp©|7pϨ¢�"Îád½k³#ˆ’M¤P’>`<�ž+—›[\º\îæš+xšY¥Hã^¬ì‰§×ŒÞ[$š5Ô±XÂÏ-›x·Ä»‚0 ~ÎÅ0¬ªAeå{œŠßŽÚçIðÂN^í ]AžH"f´Â²m‘m]ÅI8Ž=(S)è‘Í¥Är#”m�µ�ÚÞ‡Ðò)ÁÔ³(`Yz€yæ38`�ì:ÊÍwv»nŽ©+J&<+ª™?yŽ ÇáZ:ÌŠu‹¸ç·¶œµÜ6…¦´{��[ù¹òЂÇvyä€Oj9…ÊwÔW áT¶:õ¥Ä6V¶Ï%¥Ú?ÙíÌ!öNŠ SÈ8LÖÝÏ��ôð·w‹iË@_÷`®Ì¾¼ž´Ó�üQKEP„¢—S(¥¢€ŠZJ(¢ŠJ)hÅ%¸¤ÅQE ÕÐ?ãùÿë‘þb²«W@ÿ�çÿ®GùŠ™ü,¨îtUÊ«jÚ_ŠuyâÐn¯m¯ÐÏ �µœ‡pzûWUEr� máÍMÊŬ£V¶ÕùõQ"æD23ཹƒ9ãÁè*Åž™«iÚmöŸ‹kqtMÌ‘ßÎèc™œ¹]ãïäî F1Žøâ»:(Î&𾳨[ø�ZÍ 7úTvñ ‰"É™ZC‚#G <ý{ KCÕuÉuGKC§}³F[TH§l‚I S°ž#$voZí¨ =Õü=ªêÖZÄÖúBií.’Ö1Ú,±æy7dAÚ@ dƒó�ZóèÒÙ뺕՞�ÅœšT0%¶R4šEyÂO•—’1]]ƒîŽ1íéKEQEQEWsá+ûÝ{ÄBA³O¹·�Ù8q‘4ɹÆr ˜�ÿ|×yEp á}JûBÐbÔ­ä[“«I¨¬W; ë1áÑ�àº/ÊJÞÔ4h,ôƒce Á¨ÚK!k›yfß�½—ÎæÈ³¯ÐÑ@^°¾Ó´¹b½ÞŠ×ööòMæµ¼Gc/üX ž§ÆN+vŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯!ñ·ü�÷ßöÏÿE­zõyŽ—Å·…�„e}ÆÅÌõ²oã¿OÕniüëú3ž®‡Äêc}�€Íyq(\óµ¶`ãÐà×=E}©óN2ísÅŒíáZú¤4Á¨H'hf{R�²ƒ�û”öéÀ5‘ETà§W°¡7 s#vÏY i~÷×%ÌÓ[¸Ü .œóì1WgÕl%þÒOµü�öÈÁFÛ2á²�8ëŽx®VŠÅá`Ýÿ®Ÿäj±Jß×_ó;;¯YÉ{ ©q‚Kا�ySyˆ³“¹Šä>QÍrÚ•Ó^j7´­(i«1'åÉÇZ«E:XxRÖ"«^U4g_ðçþF�úôoý +Ó&ÿQ'û§ùWšü8F:íË€v‹b ÷,¸þF½*Q˜\îšùÜÛýåú#ÚË¿€½Lš(¢¼Ã¼+Rµ¾¶×!Õìm…Øû;[Mn$än ¬¥¸àäHëí[”P-ªÁ­jf/¥Æâ•$X¥�ž2HÚ�xR£æÚ Î:�T´¿ Ý�nÚ…ŒnñèÙæBŽD ¶åê}G=­vÔPa¤jzy²¸¸Ò×QvÒ­í6•3ˆþXà«2FOËÐÔVþ¿�^w¹k×…µz³E%¸Œ|Û‚¶SÍà|¸ q]Å�á›�7HkK¨ö:Ý\8!� ¯+:‘�fkbŠ(§Ãþ¾?÷‡ó¦Sáž?÷…kVLßëäÿxÿ:Ö¬™†'“ýã@ ¢Š(¬/ZIz#…ô4ÔíÀܬ³ˆå‰ýTœcŽá³í[´P }£ø‚m"+ ˆõÛNh^t’=ÆS»åvq’¸+ÊŒ“’jy´ IﬢfÊò+s©"ü�=:¶ÿ•N;-vTP†/£×ÝîúH[P7©4R[ˆþöà­”óx. Žàq]½PEPZÐÿ¨�ýÑü«&µ¢…þè ø»ÿ#m·ýy'þ†ôRü]ÿ‘¶Ûþ¼“ÿCz+ÚÃÿ '•[øŒí¨¥¢¼ó°J«¨Y}ºÜEæ˜ÈmÙ=�øÕºŠâê HÄ—¬hN2ǽ\£$ã¹3Qqj[ð‹®ýÿjù³œù_ýzÖÓì¾ÃnbóL„±l‘ŽÃü)Ñjs®èî¢aœ}ñS£¤‹¹Xz©ÍmV½i®Y³:t©Eó@ÄÖ<5¯ òÜ0�~üx9 +‚6ýòIÁ'¦*;Üióiî·)+[[Ü$’89yeurØôÈnýêæ£â='I»‚Ööö¥•±†‘FÁ‚Alœ�Æ3늒Û\±½»ö�%Ç$4±DÍ‘ؾ6þµË¥Íõ9‰>—´t7–’K)2Jn,VL9;›Ë ©U'¶MmYi:Ž�fñY6�m#Hù:{"Žê$äôç4çñ^”�O1‘öÄáNW—ÍoRN †<œÿLÎÞ!ÓŸöøî Ö‚_)¦… ªŸSŽÝ9éÍ DweM'_³¸¼š=GM-w(•ÃYI€vªñûÞ˜QRÂ:—:�ýÅë1Yn#ž‚g�Ь"2r¤ü]Ï…ñ~—!ˆF·ïæäŲÂcæÔ®œ{Vâ0tW€Ã8aƒøƒÒ„�®ÌK ¬5Øç�Q,a·–4 3É#¼Ž®Å·{©îsš–çÃâçZ‹S:�úIDq¡�b©Æåå3ƒ´gœÖÅì‚áŠJZ)ˆJ)hÅ%QLŠ( ’–ŠJ(ÅQE(¢Š+SAÿ�çÿ®GùŠË­Mþ?Ÿþ¹æ*gð²£¹ÑQEÊtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ek>ÓõÕOµÆÂDáeŒá€ôúV­pœ©ËšÌ™Â3\²WG!ÿ çGÿŸ›ïûí?øš?á\èÿóó}ÿ}§ÿ]}ÑõüOó³©ÐþTrð®tùù¾ÿ¾Óÿ‰£þÎ�ÿ?7ß÷Úñ5×ÑG×ñ?ÎÃêt?•‡ü+�þ~o¿ï´ÿâhÿ…s£ÿÏÍ÷ýöŸüMuôQõüOó°ú�åG!ÿ çGÿŸ›ïûí?øš?á\èÿóó}ÿ}§ÿ]}}üì>§CùQCIѬ´[cœ{C»1Ë1÷5~Š+šR”ß4�ÙѨ«EhW{8™³ÈúO°ÅýçüÅY¢¤eo°ÅýçüÅa‹ûÏùгEVû _ÞÌQö¿¼ÿ˜«4Po°ÅýçüÅa‹ûÏùгEVû _ÞÌQö¿¼ÿ˜«4Po°ÅýçüÅI¼q®Iõ5-TRÛÇ)ËdQRÑ@¾Ã÷Ÿó}†/ï?æ*Í[ì1yÿ1GØbþóþb¬Ñ@¾Ã÷Ÿó}†/ï?æ*Í[ì1yÿ1GØbþóþb¬Ñ@¾Ã÷Ÿó}†/ï?æ*Í],âVÏ'êjÅP‹|\ÿ‘¶Ûþ¼“ÿCz)~-ÿÈÙmÿ^Iÿ¡½íaÿ…Ê­üFv´QEyçXU VaoRq‘'ÐàÕúŠâÚ¸Äs u8ÉÖ”¤£4å±"å‘ÍÿÂA7ŸåäíÎ>ïõ­­*aq²q“''ÔàQý‰§Ï¿þ>ßãVmía´ŒÇlRsŒ“ÍuW¯Fp´™ÏF…HJòw8?Oåë+> �G0„Á³É9rîs˜óóq€Þµ/†ÍûßÚÄu+�²^I}<�ŧý¸�ØÜ2Ão·ÜëïW¯uKm?N·%•ЪªY™›U@ä’N(íKOÔ~Þ²n³»µt ¹�i ô ‚AüêíQY«¬Å%åå¬v×IiÙ«”QEQEQEQETÖò2J  Á >/õÉþð  :(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<_âßü�¶ßõäŸúÑKñkþFËoúòOý è¯kü(žUâ3´¢–ŒWžu‰UîîÙ¤3;m ¤Ää“Çj±ŠÍÖå0Ù#€Öqô5­©ÍE‘VN0m"»•Ó2YËÏMèöjš„Á°¬¥NÒèõ®/í·>~ïàÏ©éô®›D”ÍdîAÿX@ÏÐW^# ©C˜æ¡ˆ”åÊÌm{ÅÏ£ë±XªXʨssv!!›8= œäue©¬²Í"Ù6òêÐ)þd3*m ã/µƒ sŽÜí·‰!iô»¥¹žs v±¼m ù ‚ß0 ò‚qšóha’ ;g6§›f6”�"i�¹€d¸v$óäg#Û­—OÓ[GºµÔ/ìô럴¬ŒÏu$ƒ”áI3åw�ç‘66‘v?ÉwSÝi7& S˾´îÂÈÛÒüA=þ¥¬¶Öb)mäž;‹[ß=[c*‘÷võíI7Ší£½ýÜO.™1Üj ÌQIØ{޹#€HÍai–Io}ÔX�ìWÒΗ Ø×à¶Ï—8 �8«25Ä^Ôî�Ko×KhÎPÇ uU gíQv+#wU×"°K6�âqpû‹–ʬ*7I&G`?R+4ø“TK¹Qôû&‚¨-žHe+� Æ2@pHȬÏét†œ–öÚt63ż’I!ÏGû¹äò3€:f³¬®aUÓ˜êsM¨#ûÞ&$ϰÈàË–l Ùe8¡·q¤¬zmQV@QŠ( Å´PQKE0Š\Rb�Q@Q@ Zšü?ýs?ÌVeiè_ñüÿõÌÿ1S?…•ˆÞ—ýKÿºk,œ@'Øw­IÔ¿û¦³+”è8‹5»µÔãþÆÓuKkv5å…ÈÛ ü„�)‰ 1|�íäšË‹H¹Ô#Ôí£Ò¥ŠÍ"PÑ=«Ä†ä³;É,ã?xã8ÈéÇ¥Ñ@–ž‚îÓìze함Ñnaq ¹…ÒFx³· ç G®3TÛDš\Vo¢ -¢ÔíJÈlÚ#*oBѶq…ûÍѲMzEÅ%ƒÇâ•Ð`88åq] ËkW:Θ¢ßNÔVÖ+˜šå3ÏNõU$1ÇŒ à f²&Ó.f°š+[È4¹u[6·¶*èñƬïF½N8Æ ã5èPq¥\Ú ZÒÚÊëû)u+yÞß¼€Æ†A¨ßɯÌ;â«&™ kÓc¥][Ú>³§Ë m)©�smì£éßè´P�Ë¢Gie®ÛZèÒGw&¡©$VÇCçFà >bGlžûO½{ûïô+ÇÖ^ý^ÊùAòãƒrq¿¢¨PÁ�òÇ<×{EpSèÓ/Û5ìî~Þºìm €äˆL‘†*?¸T¶qÁç5{Mµ{oM$V3ʳ<­5ÍÄ �çI�²!8G*+¯¢€ (¢€ (¢€ üҵ¯$¸Ñnâ·ûQÅÌs)eSÓÍAÙñÛ¡ã=9Ü¢€*éöé¶km v–g‘·3±9,ǹ'š»úäÿxS)ñ®O÷…iÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEã¿äl¶ÿ¯$ÿÐÞŠ_‹?ò6[×’èoE{Xá#Ê­üFv”QEpaESP’háO&Tˆ—Ã;&ì ƒ#¾)Æ.NÈR’Š»-ÑYq^º ’_A#õÿRAÿЪí¬Í:9b§ €Tc#·jÒtgvg Л²$xb‘ÑÞ4gLífPJç®=(Ä%óDH$Û·xQœzgÒ©jæ�¥Ê±ÞÜùLWwÜf ¹ÆX€B�s�Is®é¶w‰k=ÈIX¨ûŒTû¹`03îEctm¨ñ£ia]F›g‡ŒDÃÈ_™EÓ÷ÿC@ý‹þšã´}‹þšãµ7ÚaþÿèhûL?ßý Cö/úiÿŽÑö/úiÿŽÔßi‡ûÿ¡£í0ÿô4Ø¿é§þ;GØ¿é§þ;S}¦ïþ†�´ÃýÿÐÐ?bÿ¦Ÿøíbÿ¦ŸøíMö˜¿ú>Ó÷ÿC@ý‹þšã´}‹þšãµ7ÚaþÿèhûL?ßý Cö/úiÿŽÑö/úiÿŽÔßi‡ûÿ¡£í0ÿô4Ø¿é§þ;GØ¿é§þ;S}¦ïþ†�´ÃýÿÐÐ?bÿ¦Ÿøíbÿ¦ŸøíMö˜¿ú>Ó÷ÿC@ý‹þšãµ$VËn'qíNûL?ßý i‡ûÿ¡  h¨¾Ó÷ÿCGÚaþÿèhZ*/´ÃýÿÐÑö˜¿ú–Š‹í0ÿô4}¦ïþ†€%¢¢ûL?ßý i‡ûÿ¡  h¨¾Ó÷ÿCGÚaþÿèhZ*/´ÃýÿÐÑö˜¿ú–Š‹í0ÿô4}¦ïþ†€%¢¢ûL?ßý i‡ûÿ¡  h¦¤‹ ʰ4ê(¨�Ä@à¿éGÚaþÿèhZ*/´ÃýÿÐÑö˜¿ú–Š‹í0ÿô4}¦ïþ†€%¢¢ûL?ßý i‡ûÿ¡  h¨¾Ó÷ÿCGÚaþÿèhZ*/´ÃýÿÐÑö˜¿ú–Š‹í0ÿô4}¦ïþ†€%¢¢ûL?ßý i‡ûÿ¡  h¨¾Ó÷ÿCGÚaþÿèhZ*/´ÃýÿÐÑö˜¿ú–Š‹í0ÿô4}¦ïþ†€%¢¢ûL?ßý i‡ûÿ¡  h¨¾Ó÷ÿCGÚaþÿèhZ*/´ÃýÿÐÑö˜¿ú–Š‹í0ÿô4}¦ïþ†€%¢¢ûL?ßý i‡ûÿ¡  h¨¾Ó÷ÿCGÚaþÿèhZ*/´ÃýÿÐÑö˜¿ú–Š‹í0ÿô4}¦ïþ†€%¢¢ûL?ßý i‡ûÿ¡  h¨¾Ó÷ÿCR++Œ©PÑA85¹„èhZ*/´ÃýÿÐÑö˜¿ú–Š‹í0ÿô4}¦ïþ†€%¢¢ûL?ßý i‡ûÿ¡  h¨¾Ó÷ÿCGÚaþÿèhZ*/´ÃýÿÐÑö˜¿ú–Š‹í0ÿô4}¦ïþ†€%¢¢ûL?ßý i‡ûÿ¡  h¨¾Ó÷ÿCGÚaþÿèhZ*/´ÃýÿÐÑö˜¿ú–Š‹í0ÿô4}¦ïþ†€%¢¢ûL?ßý i‡ûÿ¡  h¨¾Ó÷ÿCGÚaþÿèhZ*/´ÃýÿÐÑö˜¿ú–Š‹í0ÿô4}¦ïþ†€%¢¢ûL?ßý i‡ûÿ¡  h¨¾Ó÷ÿCGÚaþÿèhZ*/´ÃýÿÐÑö˜¿ú–Š‹í0ÿô4}¦ïþ†€%¢¢ûL?ßý i‡ûÿ¡  h¨¾Ó÷ÿCGÚaþÿèhZ) 2E-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEx×ÅŸùí¿ëÉ?ô7¢�‹ò5Û×’èoE{XáDò«�¥Q\Xb³õ{{‹‹E[e áÁ#8ã´(ª„Ü$¤º8©EÅœö.«æïòÏ\íÞ¸þuÐi\[Ú2ܨW.HÏ¡EtUÅάyd‘•<4)Ë™lj4M[W{˜­î û$Ö¦%ŽYdO-ÎrØ^9{¦:«ªøkZÔHÕ³[”„G¾iÊ)·pÚÖÉî<Œô®ÆŠäåGO39;ß뺼sËso$_ÇsidcRÀƒäùºžø¢/ë ®Y^Þ\Ûʶ×2Jdód,èÊà‡åLn®3Ÿ^²Š9P]…QTHQEQŠ( Å´PQKEŠ\Rb€ (¢€ (¢�Q@))h ­=þ?_þ¹Ÿæ+2´ô?øýú昩ŸÂÊ�Ä�é ±@5—Zrÿ©÷Me¾í�°Øà�šå:¢¸‹Í[ÄÒÞÊ|�.Ëû!Ä÷J÷òmš�¹ÿU÷sžOB‡Š~§â]J/ [ÉyoŸ{ªI«­#Eæ`l¨ÚTqœs@¥Àéúlj¦ñ°ŽÖí®-®f·Ž{³脱„f3† GçyäcÏø‡Y°–ú-4À뜡£†ìùÑ‚¹ òmÁêß7nhÐh®/C×u‹ÇÕP·[yÄfEµK¡çÀ€«¢©äï,W>Õ�¢k~%¹˜–“T•ZÞÖdóRØ®Ù& ¶nÁEãÓæ') M¢²¼9<·:$RÍ#I!’PYŽNŒèjÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEUƒQ³¹¶–æ+„0Ä̲³|¾Y_¼=1ïRÛ\ÅykÌ Z)T21R2CƒÍ[µ$N£×9«wˆŠ©mÿ øÿ*·sÿíø:΢«j7ÐéšmÕýÆ|›hšWÇ\(ÉÅQÓ§Öœ­Æ¥„6¯ò‘³o‡¸� îp¸÷  z+&h÷ÜMà)o �É�‡îÀÉu|Ëî¹ñf�Öww×&³Cç•Hß,�Šñó ÷€6è¬(<[¥¾•m};ËÌ›ö5¼™^Is´gïcõ4ºí­µÝḻ�m-­#¹b¨Å•X°ÜHà©ÛÆ9àçµkÑY1ø—G–™Rù6[2’¬0áH|ÀžÉéW¬ï`¿·Û³”$�ž6B¡V�ÄPŠ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ )‚#9Îdà!ÖªkXeiýª?±lßçgŒŽxÇ\ñÖ€.U›2|Ʊšª¬C àŒŒŒʬÙÿ®?îÐׄˆxîqTjõçú‘þõsºî¥6•e ÔHŒŸj†)·q¸BFQ¸Ô¢¸ù¼_t¯âã†Ö�X³D¬Îb;°yÄ Ž1Æ)·%ÕmŸT»gÓšÒÆóìÂÛc,ÒŒ'FÜFã¿�·œPeEsvúæ¡y⻎ŸÚÌ#kiÙ–y#À&UíŽNqÔv¥ªÞø¢ëQm&Ö :ÒtÙu æöLKÉó.\ðaÛxë@�Æ¿Œo­¼'y¯_XÚÅ£ Aí+LÀ�§ãv}9À¬Øu?E©iqC¶îÔÝxÚâàÄn-ß~ì!ãxfŸºZôJ)�´­m:,r•Ñ[pVÇ  Œ÷À§ÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPE ÕÔ6V²\Ü1Hb]ÎÛIÀîp(j*´ú�¥µ¼SË:¦eH™~o0·Ý ޹ö«4rÈœ8ì1Vª¥—ü´ü?­[ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š+:kùcñ–œ<©í.'f9Ü7…@ß½lýhÑEQEQEQEãÿäk¶ÿ¯$ÿÐÞŠ_Šÿò5[ÿ×’èoE{xuû¨žMâ3²Å¥¢¼ó°J¡«Í´~i}‚NB¹\ðx$sÿê­ ©¨Øý¾ÝbóLd0mÀg±Ö´¢â¦œ¶"ªn -Ìhµ 8É�fÿÏÞ:×ӥ󡑃1ðã�ÆÏZÊÿ„UwïûWÍœçÊÿëÖ¶�cö v‹Í2ŲF;ý+¯:ã׿sP…hËߨËÖu«˜å»°ÓìÍÄÐÚ™§“Έƒn Ž[å'tëY–ÚõãxvÒÖÒÙîî“IŠâægŸaMÉÁɳ1íÓ­nj>·Ô.ÚëívÒÉ“)·�/šœà6Aé“ÈÁç­Wo ÙùPGÕìUªY»E(S4J0ñׯ#“^u™Ý¡—m¯^7‡m-m-žîé4˜®.fyöÜœ�K1Á=ºu­ÿI$ÞÒe•Ùä{8Y�ŽKƒ$žæª7„ìü¨#†êö*Õ,Ý¡”)š%øëבƒÉ­k 8ôý>ÚÊͼK9$(gߊi> Ú,QKŠ)’£Q@ Š)h ¢–ŠcŠZ1@„¢ŒQ@Q@Q@)1KE%´PVž‡ÿ¯ÿ\Ïó™Zzü~¿ýs?ÌTÏáeCâ7%ÿRÿîšËfÚŒØ-�œ¦µdÆÀu Ö]r�ªèú¿Š.c¿KHôèà\$d—¼]Á¶JáS+Óæ9<�È7õIou}’]"æÚê+Ë\ÆÛ_ O3#)9P9ã§Jê( :_ÙÿÂYhU5#kö·Éý¡rpþd[Fýù¸Ï8Ïj‡YÑõ=NúëNÓ.5K8'*—3ºÂ! ´´íóˆã;¸=øÅvôP§Ûjp´ðk�jš”Ënñ•òížÞu8ÎõHÎÊä~8Íd\ézÝÆ­íkâ€ÚÉm>øtí̤®ÔÛ÷Y~ÿ^™ã©¯K¢€3´4ò´{x~Ç= ‰|±É·ñ(3×�ÈV�PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMç‡4ûí@^J²Øó¡GÄw~Ŏ߮G­E5·ü|/ãüªÝÏü{·áüꥨ&u>™Í[¸ÀàP&£c©¦]X\gɹ‰¢|uà qYKÖ¯´Ù´­JæËì’[=»Ï·›&åÚ„<ç«~ÐÑ@�džµ]BÝÅä¶I,:lö6ÞNí®dUß#å(ùFzžj쾞kèdicXWI’ÁðImìS tŸҺ(‘—Cñú}­¤“Y£µ6ÍO*®p“å·Àx¦ ›Â„šEõ šÛ̸Ñmôõ%›H÷î'åû¿0Áëí]­ÏjZÅÞ¯yv±ÙÍ ÖPÛˆ® `²Hîs�Ç 0FH#¥^Ь¯l4ó õÇšæBȾcIå'Míó>9äóÍiÑ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d�iãUûxY3¿Íû>ÿÜù¿ó×gMøïøõ浨 ¬Yÿ®?îÕz³f˜Ç¶1@Þ©ïV»§¾« ßXDê’Ï ,nÝñò“ô85½v ‡ŽÇ5F€8ãá ¶o»OoºÐ–ÔÎ&bë.W�ùê¹çZš_‡-­5=GP¹´³’êâí¦†q2"Pâ29�ë[´P3ªèš¦­w NÚp‚•ž+´F*°mª9 m-ž„ñU5Ý7Tñk ·m*vp·“ŸÞÈH*UU!<’rGAÐŽÆŠå/þóÂ:¾—>ˆö×iòG„‰!”ùlª"Ç?�ŠƒRð­¼Ú®‡(�Q`÷.×%ogÄ`Á'#ò|Øc®:WeEEmo¥´vñoòã_2FvüY‰'ñ5-PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPM�‡4ý>øÝB²gɉß1ÛîûÞZÿ{þCŠÖ¢Š·eÿ-?ëVê­�8sØâ­PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP&†+ˆd†hÒH¤RŽŽ «) ƒÔå¦ð>†Þ#²™<9¥}…-.`-" d/ L®98Y0{dúóÖQ@ÚYÚØZ¥­�´6Öé�‘B�rrp’MMEQE°C><Ø’LtÞ â’+h!bÑAlF T¥¢€ (¢€ø©ÒD‘w#«U9®Wþ ¼ÿ/'nq÷­ni ‹ydã&NO©À®ŠøGJ<ÌÂŽ'ÚK”¹öˆ>Óöo:?´ló<­ÃvÜãv:ã½®ÛEkäWZ…±†ÜŒàJ7Ë�rŽŒ�6ŸzÔð¾³y­O3ÌøŠÚÞ(e@£›žL‡8Ï(ǽ ]”Ý…‘¼6bîÜÝ“�oÿ¾sš³\4/i¤ê°´/§jvwš‰ØÃæ �ŽNyÜϡ֋ wTdÓ®ŸTŽá®5´{/) æ:îÈù² éŽÝèæS¹¢¸ˆ»¨ÛøeueÕa»¸ºŽ6ëam÷²‚G áwcæ8Î2EÈ9YÛÔ0ÝÛ\K,PÜE$��$DpÅ é�:t5‘á«­Ná.—P ÈŽ¾L²4;Ø’DÅFNœƒDÑxÃÄ ‰-³mL �¯“ÇzwŽ’Š\Rb¨AE¢€ (¢€ (¢€ QŠ( Å´PQKE%ihñúÿõÌÿ1Y¸­-þ?þ¹Ÿæ*gð²£ñ#~£h"s’ƒ5%Êt}šî~¦�³CýÏÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@}šî~¦�³CýÏÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@}šî~¦�³CýÏÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@}šî~¦�³CýÏÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@}šî~¦�³CýÏÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@ HÖ1…P)ÔQ@x‰ÉOÖ�³CýÏÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@}šî~¦�³CýÏÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@}šî~¦�³CýÏÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@}šî~¦�³CýÏÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@}šî~¦�³CýÏÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@}šî~¦¤UTP¥¢€20j#m þÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@}šî~¦�³CýÏÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@}šî~¦�³CýÏÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@}šî~¦�³CýÏÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@}šî~¦�³CýÏÔÔ´P_f‡ûŸ©£ìÐÿsõ5-Ù¡þçêhû4?ÜýMKEEöh¹úš>Í÷?SRÑ@}šî~¦�³CýÏÔÔ´P` Z( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ø«ÿ#U·ýy§þ†ôQñSþF«úóOý è¯sü(žEâ3²¢–ŠóŽÑ*›XnâÏt8Éþ=V¼¹kXÑ’™�¶…RbrIãµTowrdյدý‡¦ÿϰÿ¾ÛüjÕµ¬6‘àŒ"œdž†+Ù]3%œ±œôÞ‡ÿf«Ì' B²•m¤7®þµsumi7÷“gu‘Ú>Ñå'œWg™´nÛœã=qžÕiz{ÚF±¶kbÅŒ&%)’rN1ŒäÔ2ëv�ø‚Bëu4hÉkHÛœõàž�M§jjvï<*ê©4��à”b§¡é‘Xèj?ìx€}– [œÂ<±û³Ó+éøS µ‚ÛÌû<Eæ9‘ü´ ¹ÏV8êO­ME1WM±KÃx¶vëtzÌ"PçþŒÕ-Ãöš<#Á-ÖùÜù!\‡vlg“�»{Qoâ+{»óo¥ì‘ Zµ,9‹zðFsžÆq�z×¥ õ*E¥éðÜ}¢+ XçÜ_ÌXT6â'8ÎpHϽ,ze„O3Çcl�8"VX”3×wþ5jŠ`AkeicŽÎÖxÉÉXc õÀªöú&“gr.m´»('ı[¢·=y5|ð3Y6:ý½íòÙ›[Ëi$ŒËÚbØ%PFJóž28 zRÐ55¨¢ŒSQF( Š(¦ŠJZ((¥¢€ŠZ((¥¢€´´Oøýú昬ÚÒÑ?ãõÿë™þb¦ *;›Ô×`ˆÎA!Fp£'ðêF`ªYˆ I=«”è9 ŸÂníÒÃNÕnbK�*ø .ãt °°?s®Jq× š·?Œì¤ðÔº¶ž“>ò‘Ú ˜žI0# X ©$r3Ækœñ¡-þ¥w/†~Ówe<" ^{4ª�±˜›#t¡K© ž1Üox…´-oÃZtÐÏŸ}f°ßýI3Ƙ+Ô¤Œ‘“@[üC·}wì3ÚÜ,!n–9åÞÑȈ íC•9c‘�02rqZz牤´½�LÑ­?´µMêf�WÉ�‚Å‹2�Ûs…ÎO^‚°cÒ5ÛivVú¶™•¥\,EtÇØˆ$ƒ+·ÎÉ$ãœö<äAãÄ»šúÂÂÿZÒ´kI™¦ŽüÄD¢HÂuØNâ89Àë@=�ŠVöÏU�ì%±þÎ;$7³Ä±—$yˆÌ8ÉퟭsößZ[k{�koy—‘®`ÓgYÞÞ%!³1A–r1ê:3Oðî«;Eªèú=Þ�©ÇggÚ½Œ^\bI@Cþñó�¡‰ÎNMsº~‡u§øo-s,Öp$»e”YÚåT&G$ ’7= ”ê:>¦5�=oÒæÔtò®B‡X©?)#<ÕúÉðävºOÙoƒÁ<ÑÆXä´BFòÏýñ¶µ¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(+‹˜,àiîgŽSïI+…QÛ’x©k*óC�RÔÒãP�\ÚD¸†Í�yaÎAvþùÁÀÏžç4ýJm -éæ´›hähsv~e¦yŽq@§$F$|ê8ÿxT•Çú±þúèB–â¹¶–,D(ÅNDZ 2óâ QY™m!Žêi/Œ0Eƒ&�Fó1$ƒ€I�¼õ­‹M~ÿVÒ~Û¥hùq;Dc½ºX� Õ•£ãð?�›[é)ea¨¾Óœ%{XÑ¥ *ÝÝî3¢°PSï>oºÝ+^fµ´Ð4HÊj°YKªäŽÚ[�Þ ‚SˆB�û7mèª .(nßâ?iQi4-°’³Á-ÈŽC+ƪY€vÈÈÅkßkz˜ÖF�¥éV÷Gì«rïsvÖûC3(òØçåïŠàç´Ñ´�jÕ4õ¹µ±¸–95•¸‘¤kP’‡ÌbͰ30Npù8Åoø‚m |m»WÖ_O�´ÈÌO ö¾gï<« ݨb×ÄZ“K¬[^èñÅu§ÛÇ:Çkuçy¡÷àÊ€åþµÍZ|SkÔfŠÂÙ#X­‹Ïq{C’;£>ÑòðÏv8Ìš-Μš�‹&ÑuÔ K Sç\ê*ƒûüƒ+o Î9ýk›ÑbÖΩ§ÚM41Ü͈ŒÜŸ5¢HãšEcÇS‡-•a‚Nxõ/ ëGÄ2ߘàBf–/ÜMæÆÛ$dܯ�¹NÜƒŽ†µë›ð8‘tÖiIF£zãMªÇíd�“�í“õ5ÒPEPEPEPQÄI’`I8|o”T•_ë'ÿ|è+@úψ¬t(Þ¥æÙHUh-$•wQH’®x¬m+Ç1O"Új:v§m$²ˆ£mÀD¯…�ex)œô'œV—Š/tˆ´™¬µ[�ŸjB‘Ã3Èݼµ–c¡ÎøoVš×Vy¼`ÆÇWž(àµóÔ$OùX¾c6K.sÐ € _Ôünš~©sAçÛÃ2Z³D¯#‰J4�ò $…P�º·lU­#ÆÚŸ†#Õ 7K0¶ŠIPXÎ@w^‰òëœò»¸æ¹ë- ­µ�6�sghmî›æ¹¶iÙ¼Ëx°|ÅÁ$IÎsÛ¼šBjIð×O7:½ˆ·m>ÛÊ]ïbc]ªHiÃ9û¼d(Ï·`aø­÷íb¶r‹ß* Úý–rñÈY¼àÀ!8U GËÎï®4|Sñ?˜°™eµkŸ*êí­¦À�å˜ÉËc8$äq\”w€ÜË4ÞÑ¡Ñî;h/^þT„èÀäÐþ™â×ÔµŠÔ¤’ùo,™Q¿p%Ê6FN:ví]MyŸƒõÈuÍSKÔ5 CGŽå­ƒ {mF#$“” Y¢òÆۑ�ä ;פù©ýáùÐè¦y©ýáùÓƒèA ¢Š(¢Š(¨ØŸ´ ÉÁF8üV¤¨›þ>£ÿq¿šÐZ…üZm£\ÍĈ¤-ày›þù@Oé\¬ìþØòÉe¨ÿcÉ -kzºmÆ$wb6ýÞs”ÚG]ØæºËÛëM:Õî¯nb¶�>ô’¸U‰¯9µ½û6©o5äwPø: —¸²¸’Hyùܱ).T•;z2Óë^/‹MŽÕ …™¤·šòX§FŽE†5?ÂFC( ÜúS|9ã85ËÛ»I-îaš9ü¸Á³�Wh‰ïv@ä°ÁÆ@r3›­i6š·ŒtËÍ>kVšöÂf2)ž&ÉnÉò†\€sÐŽNyéRx^×Z¾¾n5K·]L‹” ¦SöxyRe!F00Ct>¸úž¶¶ZŽ�mÀë{tÐÈKrª"‘ò9õ@?Ò’òÚyn"HSïHίÔö¯5Ô<-¤x’õ¯<=£i‚ÓK£hícX¯ç ¤Ç�0ÈYsÓ/þÍnEg¥ë:]”³³³ÓÚõ%ÔãŠ5…âò¾}Ž€˜²¢œöÍnXëkq©ê–—(E­âZÂK`ÊZ“÷ù�°­ŠášÁõtñ¤6Œ¦è_G-£ƒ÷fKxYÞ»XG·‰¦�Ë•�Lçkc‘š’Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ø§ÿ#M¿ýy§þ†ôRüSÿ‘¦ßþ¼ÓÿCz+ÛÃÿ '‘_øŒìh£b¼ã´+/]”ÃbŽÿXÇÐÖ¦(ÅiN|“R¶ÄT�<\Ní·>~ïàÏ©éô®£B”ÍbîAÿX@ÏÐV¥Ó_ªÃ—–ưÞÎ\×¹Êk:=ƧâY^%x�4ôkk�§jN²±^˜ô&¹ÿ°j×6ž÷VRÅnnî亵kWŸ ò„Ƭ¥€Ë`Œõ·¥Ñ\.'g1ç³èº„pi°D.®SP·67r˜Z3^h`XJâ3"ŒŸJÖð}¥ðžêãQ‚Xå¶Ž=:#"‘½#Î\z†,9ïŠë(£”9Ž,-ÄZüO¤Xj–RËw›ØeOôW�?<™ÉPÄr6œ“ÔVV…h.?³žÆÆí/ãÔ¥y¯ 0�ȾåÜx Ž6Žüã½zMW²²·Óí…µ¬~\A™‚î'–bÇ“îI£”9ŽÎßQÛÜÚ鳨Í!¹IÉ·}ªJ1Mò3'Ì‚JŸ1ðä�Xé—öú¿•¾šHÛ3a—Ì·0žHÁäddf½Š9C˜æ¼#höV×�™Vpɲ{q ÎÔfcψ÷ªúF ú·‰Íí冣lQ 8泑UòÎìF6ÐÏÔ×[F)Ø.RâŒS$J)qIŠ(£PŠJZ((¥£ÀJ(Å-%´b€´´_øüú昬ÜV–‹ÿ�ÿ\Ïó3øYQÜݤ 0 €AàƒKEr�cŽ8cXâEHÔaUF£{Ki‡·‰ƒ²»@w0 ‚}H `û šŠŒÁ¸[ƒ•J,›Fं@=pH{ VŠ6•%hÐÈ€…r£*\ÙÀü©ôP1 ša YB³…ˆÀ'Ðdþf }2ÂX¢ŠKgŽ<ØÑ¢RòNà1ÁÉ<õäÕª(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®�Ôž ñìsN¢Š€XÚ.ÌZÀ6;H˜Œ|¬Ä–aèI$“ß5>(¢€"ЕD1…”“ Ú0äðsëJ°B²ù« 6„Üghè3éÏJ’ІKKi¼ß6Þ'ó”,›�àgú�“ùÑ-¥´ï¾[x¤m¥2è Úz�¡ô©¨ mmmì­’ÚÒ­àA„Š$ª=€àTÔQ@Q@Q@Q@5P+9ùŽOäô§Q@ 0ÄfYŒhePU\¨È¨¨Í jêˆÂÁn¹?JѪ6ÿññsþøþTÕÓ,U¤eµˆNd!ysŒsëÀð¦�M6énlmÌX¼±µ@é�ÐcTZŸˆt}HãÔõ;[G�nEšP¥‡¨Íbé|;©Â|ÝNÎÖàNðù/p¤¶€ÊxÈa‚>´ѶŸhèQ­ãd#HÈ"˜šVŸ*%œ*Š0ª¨ÐV&­ã�?GÔ§µ¹\E Å \TJêï°ç¨$ÿ´8©ôÿhÚ‡‡—V]BÅÁ³ÄnãýÃ8ÈG$€§9ã‘@ÃN²"Ú }–Ÿö+où⟕qIñ[A‘w$°üÑ[²+\¢±y••²p»6äœãzŒêë¾6³Ñ VÎâþÚkw¸K‹I"d(€³c. Àç�ÎxÉ ƒìVßóÅ?*ŠhVÕ|ø2…YAá‡~+&×ŰÝjöÚh±ž)¤�Ç •“÷gÉ `x uëë[w¿ñç/û´mNåÖ–™úµúS袊(¦”@üä?<…:Šd°Å2…–4‘A (##�iä# ÑEB¶¶èÑ2A´JR2Šq�=ÀãØS’ÞŒ¦8£C+o�ª�½°O©Àð%ØãHcXâEHÔaUF€SD3 óy“å?ç׎*J(µ–Ÿe¦ÛýžÂÒÞÖçË‚0‹Ÿ\гEQEQEQEQEQEQEQEQEQEQEQEQEQEäÿäi·ÿ¯4ÿÐÞŠ_Š_ò4ÛÿךèoE{xáDòkÿ��Q^qØOQ–h¡ŒÁ*DKá�“vA‘ßr³õ›{‹›4Ke â@HÈ`ÿ�iE'4¥±oÈùw ‹P‘É/`‘úÿ© ãþú«ösµÄnÌTá° Œd`víÖ¹Oì=[Íßåž¹Ûæ.?�tz5½Åµ›¥Ê…s! d0?ºñèÆ„“g5 Õr´–…i¼Ik‰WF’9C˜Džh�Ê‚NáqŒs»8)ðx›F¸Žy#¾M�Feveeñ)#æã"«jÚ%Õî®n`x|‹‹'²¸Å]Žw&Éäðqõ¬Û ÜÛ[ÉÄSÈ–ÆÞ'–æâUu%r 1Âøsƒ�JóîÎë"ý猴Ûf²Ø·­Ìæ&"ÞPÑáK·fIû¼zôЃ�­rIáíj8m¥í=­ïÚ ·–i$�Ë(SÌ#qêO#Ž•ÖŒí±žø¡_¨�º EU(¢ŒPE.( bQKE%´PQKF((£P!1E-”Râ“À(¢ŒPZ:/ü~?ýs?ÌV~+GFÿ�Çÿ®gùЉü,¨î�¶û‡éUªË}ÃôªÕÌtQ@ú®¯“4ªÎÒµWÛ­dÿÂgmÿ>²ÿßB©øåöÉcôý–¹O5?Ú¯o€¥RŠœ–¬ð1¹…jUå;%þGsŒ¬ÚdI –4c‚ä‚Þº5eu ¬HÈ ä^Cæ)q“Æ{×Eáÿ�9Å­Ì�­ àç&3þÔ±YbQ梵ì<jÜù+õêw´QÔdS%–8c2K"Æ€YŽdþ€×Š{Ãè¨ÖâeUš6f¨ c$~có¾t^kEæ'˜ª¦á� zp*}ÝêˆqïQ-å«Á Ës E><§6ÉžFÓß=±@ÑE69c™ÄêèI”äppZuÏ láåE(›ØjúŸAÁçÚ¤9½TFâåfhÇœvÅ–9Á8¼xì K@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Acþ¶ëýñü…OPY®ºÿ|!@¼WŒÞ»[ûÔ²ˆ(t¹s�*E;‘‡© Ç~•Íx7Xoø‚]CWÙiªCj°[Ø:²7–Øg™CHvè]…Þ‹¦ß_Ûß]ÙC=͸"‘wlÏ9ñŸ~´šŽ‹¦jæ¨XÁpиxšDË!<£¥y寇o-5¯=”pjiu#³ßܲ|ÒÛÄÅ€T`Ç–¦÷ãKCO7ÃÝ=`³·ˆ5…·“%Œ‰$î»W–Y•P¹?xàú×m�i·’¤X{Ö pwœ„;ñò¨zUy´2ãE‡GšÔ>Ÿ $i fÀT(Îrx©ç½y Ò¥ñ-ÌPhz²Ýº,6÷‰yo曄,Ò0ɱ؉+– mk§ñ†ŸT‚�CF¸¼º“JkPÑZ[ ”�™™@$S…ù¹æ»y´-&ãJ].]:Õ¬amü¡±~ƒ±÷Iüá©V16‰e1�jÓD$`£ ÜÙ&€9OÚ>©¨i:¼:3évbßí$$("’S�å"RBíÁËMzÿüxMþé¬Û_ørÆê;›]O†xÎä’;u §ÔV•ÿüxMþé /õkô§ÓcÿV¿JuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEMÜ?Z’£‡î­I@CñKþF‹úóOý è¥ø£ÿ#E¿ýy§þ†ôWµ‡þO&¿ñØÑEç��E�¬ˆÍ¬~a}‚A�®W< ÿúª¡y(“9rÅÈÑ¢¹ˆuH“˜sÿ?yüëkL›Î‚GÜÌ<ÌÇ8àqŸóÖ¶«†�5Ìö2§ˆ�Gd]¢¹›ý_YƒÅrYZZA5²Ø™Â¼û2wcwÜ'Û÷ö¬­;Ä>$�<7¾ÖÙþÛ³±¸ÏÜqÈyÎÒ¹¹ŽžVwtQF)’QŠ\S”RÑ@ E-”RÑH¢–Š`%´PQKF((Å¢€ŠZ(”RÒb˜hèßñøÿõÌÿ1YÕ££Çãÿ×3üÅDþTw6Ûî¥V«-÷Ò«W1ÐQEpÿlºÑÿöZæîmž >Êè8&ä9+�òílVïĆÛ6�þìŸû-QXŸ 麄Ä[D&Ä*~y›yùG ã“_Qƒ—&“îßê|Æ2øª«²_¡‹æIè?J³«Û�;P’×~ð�Hlœ¨?Ö¬héúþ-ncŠÆuùmeA„²?·½WñiòüKt„üÀFýðµÙ IÕPjÎÏO»©Ç:qTœÓ¾«_¿¡ë‘ÿªO÷Eq_\/…Çú_Ù[{‘¥�!ƒ¸bF@Uäç’k´‹ýRº+/ÄZMƵ§¥œ3¤Ê’4Ä1hÊ�ÊÉ‚>`@#Ñuoh÷AmÈ“qÞd¸*ÂLàÉ»ëÙ\ø^öóJÒ-î/¡{›6½Ì�ù’¼»@Ü®ù œ±Ryã_FðmƘ«yÌvÚ‰ºy›k4ècpŠñ³6³å†ÝÁÝÏL‚ÊßêZ•æ¹­YÇzözõåÒØÃf‹‘ýŸË †BÈØw8d±²/ÛÞ]¿‚%’ ½^êÞícó."*!;Õe äyr¿–¹ÝÎ R2pk¡½ðÖ§.£sugwkK©Çx$xÌ…QmÖ,m㜂zã•X_ 0Žîѵ:}Û,³@#³ç2sÙdþ%ÇRØ<Ð’ép\jÚ=�‹É ¶-oå@×6³J¹>B3 ’\Rì»— 6œšõ-òMgPÑÞP#èñÞyqð¢I†ÜŒäü¡\÷ªŽ›ðøYÙØ[‹„¶6Öøim²Yç*ªXùBåCc·'çjÓC¹´—Nd’$1X›Ìh (È=#?{¾(2Ê ‹�ø–ÖKÛ™¤·½˜A4ònt(ˆèAéÃ`ã¥mÏ®Çiá˜u‰¢fó"‰–$êÏ&Ъ3êÌ5A<-=†ŸªCi«_\˨nö³Ôg´ƒbBŽ�8­ ŸYÝÛËm4—ÚH#„B%!#Ør®ƒ³gÿ²=(Ÿ!¼ÓüA¬Üj¶ÒD°ÙZí"ŸÍVw–E]¼  ð:z Ò“ÅŸa[ص;‚öÙ"‘`ŠQ ˜Håk`r\`ä }*Eð…‹µë]ÜÞÞ½ä1Ã+\H3ˆÙ™Jíi³Ç =rLƒÂ¶â]Ësy-Ú¢I<ò0*Ȩv“‘�ךÑÓ罞kû$´”6$Þh#×8–*ÝSÓìZÂ&G½º»f9ßrÀ‘ì0ð«”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW/ãç·°’úÛQ¼Žø…ŠÆÞ)6£NOÊ �¿œó» Ok¨¬SÂãSÖaÕ?¶5+Y¡ŒÇ@ÑLõ :6ôÏ\q@··×Í&±ª‹Ùã}3P†Ú+tr"dÄEÃ/F-æ6 äqŠ¿wÅŸŠ´¸íu+Éî.f’K¨d“1­°Vç`À\9ŒOry«òøbÎkÑs$×,ã’hw�òG�Žã°Ú½0G¿…>Ë­\jqëz¯™q(’XÙ¡*ÀtLù{‚ÆOsšÊÑâ½Ò|Ak?mi¯§¸òÿiI,G—uS ùS8Æ~ïj]óêœ\O­ôÛž'(æ#*ª¬9™Käs‚}kU¼6mÃ\[^]\ÝÁ ‹b·³–H—Î7L�Çõ«2xzÕô» $’hÀ/Ùç…€’2¦A ƒ�H99 Iu­FîK=!¿´®Dr_,�dê“N°L#L¹* ’r zàîÈ5K=ÚÚi§†fûS™Ïï pàüÞþg–ãW›Ã6Kik ´×6²Ûoòîaqæüç/’Aqääuçµ;KÐÓL¾-¬VÑÛ[&âÅ@%œ’{±#<Ÿº(˜²Õïl´í[’êâåµ;9î'�ßtjÂ#*ìÂݼuÏ9<Ö�…oKÝB—’jÂúêÓí鎾TãåÜñ 'f · pÝZÕ²ðÅ…•Ïš­<±¢:C¯º8ÎX ÇCŽùÀà`qNÓ<;i¥Ý-ÂMs;Ç‘žM²Åã8ùW““Àæ€)Hg‡â-² Ë–·ŸM�Í»Iûµex€!}y<œõ5P½Õ��ìàóõ$·œÈK¹CCrvT‰AÂ2òy �‡ïu­9¼5çxŠ-gûcRYb1ya RÉÌ{°JŒóŸB)ðønÚ-B ¹//®~ÌÌÖñ\M½!b$q’pHù‰Æh]µ×/ÞÊù­.b‚YMÍ�¶ªöì$ܤ|É÷ÈPØž¢ ñ ä‡A±ÖtË�Yb–Þ9"¸þâÕ8;æ\îpAç†èzu­Ù¼3ÖñÂu]X“# œ™“'ïdy?2àûð)/<+ewÙ¾Ó{ ‹F±IgØ…ÑFà‚@Àí#=èÜñÜj"æÞC5�²:î-ç¦L{exõã Ö–¿nðýÅÅæ¯{—ÌÏÀœ£In¼i>ñ AÏ#æµu_ Ç«Y^Ú>¥¨Á Û!u‚UUW )Ç#¿ãTîü·ºt67ö¬ÐÃ*Ê ÝÆÕ E´¨ÆpG_€/øb[Éü7c-ûH×…³ Õ$ì,?½·n}óSë²<>Ôå‰Ù$KIY]N �‡Ƨ°´’ÊÕa’òâñ�'θۼÿß*£ô§^Z¥õ�Ť¥„sÄÑ1^ 0ÁÇ¿4æ×:ö©ÿÖ‘§‹Ù†¡iu ßL®wnÁ×9Æ9¨µ2íF›?›Í´2BΡ¤6©ÉÎG$t=*í¯ƒô»M"}1<ã ·Fì9ž92 • mÚ {9§ YÏ›qw4íu Ô—:™$h˜Œèê{œÐV¿â KûY¶µÓ¶\ZX;ÝJ—xû;4lWaÆY€¿‡9®§Nf}2Ñ™‹3B„’rIÀ¬ÍSÂÖš¤×r5Õ帼‡ÉºKyB¬Ë‚ìƒÈŒŒg¡È­ˆ![{xáBJÆ�=p(J(¢€ (¢€9Û>/ÝÂo.^ 4ô”Dï”�¼Æ*ô ¥¥½Õ§�ÅçÔ–Ý­œÿ§Ê$N¬¿ýÍ•$` Ä‚§¦E\¿ð��ó^°º»¶7sCpþC ,Du §“µAÎAÚ8«zn‹�s5ÛÝ\Þ^J‹Ü\²–ؤ� ( I<ô§EPEPEPEPEPEPEPEPEPEPEPEPEPÐýÃõ©*8~áúÔ”ä?äh·ÿ¯5ÿÐÞŠ_Šò3ÛÿךÿèoE{XáDòkÿ�}¬ísP}7M2Æ˜Ì ìOÐ×Ú® ÌXß\dúHEF:ñçNȺø¸Ò—+Wg£bªjVÚËšc!Ãn=ˆþµÁiêóýsÿ[üh:¥øër?í³�uÇ,©̦´9å�„•œN—þ$ß¿í6sŸ+ÿ¯[m‡ö}³Eæ™ rÛˆÇ`?¥p_Ú·ßóÿqÿ›ühþÔ¿ÿŸëŸûüßãZOˆ¨¹eQ5èg U;Æqu£CsªÁ¨ùÓÅ¡¿ÝY ©o =i·Å£„¹šú# HΤ�Æ…•Éí4–ñg¡Ñ^mý§¨ÏõÏýýoñ£ûOPÿŸëŸûúßãUý“?æDÿhÇùOI¢¼ÛûOPÿŸëŸûúßãGöž¡ÿ?×?÷õ¿Æ�ì™ÿ2íÿ)é4W›iêóýsÿ[ühþÓÔ?çúçþþ·øÑý“?æAý£å=&ŒW›ÿiêóýsÿ›ühþÓÔ?çúçþÿ7øÑý“?æAý£å="Šóí=Cþ®ïó�Úz‡üÿ\ÿßæÿ?²güÈ?´cü§¤Q^oý§¨ÏõÏýþoñ¤þÓÔ?çúçþþ·øÑý“?æAý£å=&Šóoí=Cþ®ïë�Úz‡üÿ\ÿßÖÿ?²güÈ?´cü§¤Ñ^mý§¨ÏõÏýýoñ£ûOPÿŸëŸûúßãGöLÿ™öŒ”ôš+Í¿´õùþ¹ÿ¿­þ4iêóýsÿ[ühþÉŸó þÑ�òž“ŠJóí=Cþ®ïë�Úz‡üÿ\ÿßÖÿÙ3þdÚþSÒ+CFÿ�Çÿ®gùŠòÛ}kP·™dûT²ÕdrÀþuéþ”\:Ì£HC�õÁ®,fxxêî™Õ†ÄF³Ó¡¼ßpý*µY# �Z�Éÿkô¯,ô¨©|Ÿö¿J<Ÿö¿Jóï‰wØ\[Á$±Å½_b–+œc và×a¿ g>Aå?J÷ÿ'ý¯Ò�'ý¯Ò½Œ&o,=%K’öó<œVUõ]Nk\ùÿȾÿŸ)¿ïÉÿ ’+ Nöá"ŽÊá¤s�û²?3é^ùäÿµúQäÿµúWKÏåÒšûÌG³üv¢¯ �Rù?í~”y?í~•óǺEEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPTT¾Oû_¥Oû_¥EEKäÿµúQäÿµúPÃ÷Ö¤¦¢ìÎiÔäŸÿäg·ÿ¯5ÿÐÞŠ_‰ÿò3Ûÿ×¢ÿèoE{XáDòkÿš/ÿ�L_õÜè-\]z¹§>¥¦˜£#ÌV€÷#<~¦¸–Òµb¦Æã#Ò"k»,«G•½S9qÔåí.–…:»¥L-ï<Î2àúoö^¡ÿ>7?÷å¿Â�ìÍ@t±ºH›ü+¾s§(µtq¨Í;Ø×ÿ„‚o?ËÉÛœ}ßëYZ¬ÂâóÌã%FO©¤þÍÔ¿çÎïþýµ'öf zØÝ¬Mþ•8R„®š4“œ•šgE ¸:Û ô©d•sÛ|/þ>¢µ�G±¦y_sP¼{ÑŽÀÄ1ú³W–Z´qI[^¬rãÌE�€|r2;â¤kAáq ¶"òƒÑ}? ç©B2“|ë[þ?ðu:!]Æ)r½-ý}ÚÖšÂÄövÚ\7wÒEpn?ÒÜp„P Ç9ÏP*®¹l³í¯kÁ’: {ÂKFÜT÷9ö¬ÔÓµ(Ý],îÕÔä2ÄÀƒùT—ÚÅÛ‡¹‚þfÈŽÄƶP„f¥/3'9J2LÏ¢­ÿeêóãsÿ~[ü(þËÔ?çÆçþü·øWO´‡tsòK±RŠ·ý—¨Ï�Ïýùoð£û/PÿŸŸûòßáG´‡t’ìT¢­ÿeêóãsÿ~[ü(þËÔ?çÆçþü·øQí!Ý$»(«Ùz‡üøÜÿß–ÿ ?²õùñ¹ÿ¿-þ{HwAÉ.ÅJ*ßö^¡ÿ>7?÷å¿Â�ì½Cþ|nïË…ÒÐrK±RŠ·ý—¨Ï�Ïýùoð£û/PÿŸŸûòßáG´‡t’ìT¢­ÿeêóãsÿ~[ü(þËÔ?çÆçþü·øQí!Ý$»(«Ùz‡üøÜÿß–ÿ ?²õùñ¹ÿ¿-þ{HwAÉ.ÅJ*ßö^¡ÿ>7?÷å¿Â�ì½Cþ|nïË…ÒÐrK±RŠ·ý—¨Ï�Ïýùoð£û/PÿŸŸûòßáG´‡t’ìT¯Yð§üzZÿ×¢%¯6¶Ñ5™–1k,`õi¨�z†�·e…NDp„é�^>oR‚Šwg§–ÂJM´oQEóÇ´QEr^6¾¸¶[Hb•£Y7Úqœcι¶ÝÏy¿ï³]Ä6Û.ŸþìŸû-q¥È™¡çšúl¾šxx»wüÏ•Ìg/¬É_·ä�õKØ'ŽX®¥Y²2Äþb½B×aÖm»Grƒ÷‘gõÕå@7˜2=jxu ‹¤ž s!È óЬV5ãe£èN<<õÖ/sÙ¨¦¡ÜŠÇ¸ÍfëzÏö:Yí²¸¼šîãìñC@Ŷ3õvP÷¯—>°Ô¢¸¶ø‡²Ök–ðæª!†ÜÜÈÞe¿Ëb¥±æäò­ÀçŠÞ×5Øtk|*}¦þP~ÍfŒÊÃë÷TwcÀ­EdÛx‚ÚïE›Q‚)ehùÖ«�,n>òÄG¹¿Jç¡ñÕå燬îlô‰%Õ.X”´Þ‡z'20ÚçWæ ï @½”ú¥Åæ•o} ÛÛ_¬ÄMrapsÈFä1�ßÒ²4¿jÚ‡‰ImÔÅ?jºµ¿2¥»ˆs‚Ùþr;ÐYEGJÕ!Õí$¸�$TI倉tnPž ã*q@¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢±õo[èîÿh´½h"A$÷ØáSžX’3Ó�¹#½lQX·'±¶ÔZÑ’vD’8f¹D(d“Žs“¹zá’3N#¶¤V2ÚÞÂ&• †âhvÇ,Š *2sÑX‚@@VHñ‹x øy<ǽ[spìª6 FÒs÷¾e8ÇB=EEqâX-®n û4ó:\-¬1Â<òù~c §$“޾”·Eb·Š,M•¤öñ\ÝItα[Ce,™$ÚFH㸫:¸‚ÆÎám¥2]ÍI ƒc�Çœ�UPÌGû4¥EbÚxšÖæóì¯i}m#ÂÓÀ. *gEÆâ£–ÈÜ¿)óÒ¥Óuèu élšÒòÒå#î£ ^2q¸`žã8#¸  Z+¼Kdº¯ØLwDâØÜù¹‘ìç<ŽqŒœgéö  º*¦›¨ÁªØ%å¶ï-‹)W\2²±VR;Àƒô©/n£°°¸¼”1ŽšV 9!A'üPôW=/Œô¨t /Y>q·Ô¥Š((ß¾C€Î8ç<ö=kn ƒ;Φ £ò¤Ù™ørúŽqŸPhj(¢€ (ªš¦¥o¤iWZ�Ña´m+í8°õ  tU Z+ÙM³Ã-­êB³Ik0ãFfU$©+ÉFèO¾+;Pñ†›¦Xê÷wIp±és¤¨@Y‹*Tg‘‰§C@FV �^ãM�d2Ás»àlÄ…‚€sœü„ôèE^ Š«©_G¥éwz„Êí¬/;ª¸ª©b{ñSA2Ü[Å:‚Dë‚3@QEQEQY�ë–ók—:O‘t“ÛÂ'.ñaI#åîyµG§ø†ßP¿ûµ¼µ�¢3Ä·QlócÊ2HÁa�pyP½—©k°é×Ij¶·w—-šÑZÆ’<ãqÉè:œŠžûT‚ÀYù©)û]ÂÛǵz3FrFvŠçî|]e�ÍìV·w0Ct–ˆÐªby‚b2ÌŽ 8Î3Š»¥kQj’Ü[ýšæÒîÛišÞåT:†ÎÓò’¤„ô4§EPEPEPEPEPEPEPEPEPEPEPEPEPEP’üNÿ‘žßþ½ÿCz)~'ÈÍoÿ^‹ÿ¡½íaÿ„�&¿ñØUkÛû}:$–åŠDÒ̘ʡ= ÃPY?Õ€AÉö@íß§zóŽâågkº¨Ñ´‰ï6‡”a!Œœy’1¯âHü3Si–?Ùºm½˜•å¦ÝïÔÿ€ô†+Æö–òèKu:üö×´nOÜ&Tã¦qŸÌÒo@[•Å:´z=ƨtý8ÛÀò#/Û\Hv9BBùxä‚G5nïÅÖ–ýŕϘ–ðZ™žO³JpÀœóŒmÀëëÆsÅyôú|“x‰uC.˜Ð¼æVÓíüé"¡¦ å`üÌ$nÚ ï[^$W:�ØmM$ŽçNŽu† ÂI6¨lç'-»åÛÓÒ¦ì¾Tt¶~/ˆÇt·ö·VÓÂ%–5{Ycó¢B0˸uù”×5•ÿ ýäv°4ºÈš2æ÷iB¨±ñ&ߟ9¯^¼Ö¥î‡-›ÉªK©jš�†ÒX–´HK•?#FªTü£×ê1^uog-ªØ�p–„Ý]®ÿ´Å .†nIŒÀ�ÝNáÜPÛ@’=ŽÂéïmwµ’Ø·D‘‘Ž=rŒÃõ«X®kÀ[?áµò¿Õù×~ïO9ñ÷>_ûç�N+¥ª[÷ (¢˜Q@¢Š1IŠZ(1E-”RÑ@ E-ÀJ)hÅ%bŠ(¢Š*þ‘ÿoþáþb¨Uý#þ>ßýÃüÅ)ü,qÜÚ¢Š+˜Ü(¢Šóï‰O¶m7ýÙ?öZ¹Ž[­B†IdUë÷ë[â“í›KÿvOæµÎKƒo§[ŠT¯qœ±VlàqǿҾ«No IÁ_Wú£åñ’‚ÅUS}èÉõKqþ§»Eþ¥?ÝÈü@»žÂ-æØ)™5A·to ÛÌ3µ±Æs€?.µ×Eþ¥?ÝâªÄPJœŒŽ†¾!î}¢ØòO\YÛxVæ=6öõJi_c˜]h—_¾ “�ä*¡%ŽIÈæ»/éV6¾ñEô6È·w:|ÞlÇ—`#8=°âº’¡� ¨4´†ajš%�Õ¥Åßöi¸¼–ÐÛ¸†_)æB1´¶@úÓµyÆ•fÚmµ…Ô×pèK.§{_Muç: i†ÂÒ|ªs¸H'-Œ“^ÉLF©±c@¤“€8É9'ó jÆÊÛSÑ­çÒu�GO³F‘�˜OÚr¦VgGݸ®Cg�sÞ³<¢]I§M2ø�UT]Jï1¯‘µñpà“û¬üØÉÁN1]µÅ´VÏmqs@ëµâ‘+BQmmogn–ö°G0‘Ä�UG° å5òú•þŸ%Þ—>�·\ÛˆK�mÈQr^>ÜzaXiwišp¿Ò¯_GŽòý®,|¦gËJL,È2]@ÝÓ<°<õ›Eyâé×éc¥kØÞ]hÉ5Ù{ ­,ˆŒÙ·óráWpÇ8%sÓ Ö´ù'¿·žÃI¾M2xWR·òØ5ÔAÁHÕpK”‹yS·’p=ŠA‚:}1KEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWãMç¸�@m?Sk Ô5íÕ½Œ³)�?ꔢŸ™ºØg¹ÙQ@Õ�ëké‘X\·öµüpO剨Cï?ÂËå·ÊyYÝÑppx8Ï­­_ÜÝé0ê›ÚãM±7‡œK!)Hà°E�wjë©‹ i#È‘¢¼˜ÞÁ@-ŽOzâ´ÍfMSÄ“jw:>¯°C,}´–ÇòpÌÌîrŠ'€9&¬èH|[y{kk¨Çe=·úCê*ÛÄÛò«›`òËÓ믢€8Yl/ZI4Qgs¹õµÔÖÏÝy"U˜�ýà¦Þ¹ÁÆ9¤µÑšOiÑZ ^;>î[–Šía‹(ê3€_&LŽXã8®îŠá¯í4y4›X�„õ&ÛhVÌ}œ³ÄI?&CÜp9õ¬½[IÕžßmô:„Ú¢é–ðÁ%šŠêUºNGKõß�´œ“^›Es7°ØI /Ѹ)äŒúp8ö¨³¬~Ò×?b·ûC2³Kå.â@À$ã9�\O…|A©êÂBúœ3à {‹�5¾Ã;BDÂBAþ 1îI©5ßê¶ZåÔPMekVÜ=ÅÖÕGP$ÞAŒ�¹\/SÎ=)s+fwuÙÚ©R¶Ð‚¬Ì¤F8,rÄ{“×Ö¸Ý^¾–öDþÐÓ¯W­­¥úÍ,…œ2(Ü«€‹¸uǵQ´ñ6²úg‡R+q$ #Ìe½ÃÎ<™æ[ v–œåy­È9Yè‘E)²(Ò4É;P`dœŸÔæŸ\Mÿ‰./ítkÛ Ùmm®l¦¹™m̆C*^a´m,Ù —S¹‘µ+8ã°yLÞ"KzøÇÈ\pˆp8��0)ú÷‡õ©5{�JØÇ»by»wìÜ7méœzSêl‡vyׄ4ýFÇYŠ9!Ô£„Àï(˜Êc,Éþ#·qs)õëUt}:æÎÆ;Ù¬5Ãb±"vg{†€.��Š ŒŸâvæ½.⸈K ©$g8t`AÁÁä{ŠVš%Dv•9X°ÃÐ\ÑÊ8 |%u …–™l®Z]:íYœ|‘Hâ”�8É :¹ªéWé©ÛK<¿l¸¸žÑ@´°xã�"Ÿ{36æ†=HéÅv¥‘YT° Ý<šu>P¸”RÑLBQŠZ(Å¢Š(¢Š(¢Š(ÅPEPF(¢˜ Š)h ¤Å;”Ä%_Òãé¿Ü?ÌU½¤ÿÇÓ¸˜©–ÃŽæÃ}ÃôªÕe¾áúUjç7 (¢€8ß¾Ù,~�ÿ²×)æ§ûUÒü@}²éÿGÿÙk›¹¶x4û+ à›�ä®˵±_Q€Kêп[þ§Êf ¼LÚéoÉ ó¸Éã=ë¢ðÿˆÆœâÖæ@Ö„ðs“ÿjå|É=éVu{s§jZïÞ) €3•ú×Mjª½œúÿ_©ÍF­J2ö°èz÷Q‘E6?õIþè®oÆM4Hî.e·´“PÅÃGpðå6 ) ¨={WÇhŽšŽƒ&¼{QX4Í[‹½SPµ¹›HûM ›T�Y¦,Ä òÁv|¿¥v~-}N]'VyáHt{Kw‘Ñf>mèUÉL�õhz¬}»€uÕº· ÌñN“xÚrp9úñ\ÛA­Ùéz•%ý¿ÙXÚ\CqåN,lr9è©ú�Ôðº|‘ÿbØiÚÚ^A¥ ‰áeûCÉ4ÓÆ]Sj†r¸Ú>U#2rȱÑ\”òÛÍ¡ØÛø«IŸP”�1UtÙ.1ŽpŠÁ‘ž¹ÇÍx^ëï­ î £ž[kH­4y’(”9MÌÁ9r;�Ë’00hÔ¨¬­WW’ÆîÒÆÒÓíW×AÚ8ÚO-B&736Ì£€rMsÚˆoN†ÛìÒ^j—w·Å!–|Ò9˜σ€¹U¶8 ÚŠæÓÅŸjŽÖ=åÔgy£6ÒJDam²| œ�|-ÿ‰®4ëËk)´³ö»È×숳dI&pèÌåÚló‘œtÅttQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\¿Œ#žÞÂKëmFò;â+x¤Ú�9?(*>þsÎì€Um§'¨È ’Šå­¼f’i—ú…ÅŸ•¨¹YÃO¸œ**Oy¬!šâ #²´µµF™¤]ýø÷©“Ø/µ]¸ñ|–qOΖÃP‚âÞ¶ŽpÁ„͵\�‘œŽ@ä­u4WâêGEÖ­­´í—–÷S%Þ>ÎÍØq–`oáÆFk©Ó™ŸL´fbÌС$œ’p(ÍQ@Q@ÎÀ'�Ç—�}¶åá“NIDNùHØÈÃ*½T:bOkâé,`Ô.ï-ã³ßzn$ß¶bËåã²’¡ÉQ�Œr(¨¢¸¿js7ˆn­uo±XÙGpÿÙ®¨À»>]‰ �¢>g9<U¿jï§éZ=ý£\Î�}Üüó«+aqÆrqÁâ€:š+ήï¯n<u).¯�õÞ¥wöÓ´mïÕþa´�•ÎFârNÆß….®?µ5;Åü Å$ºŒžlʧpgß¹²¤Œ¸�TôÈ ªŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ¡û‡ëRTpýÃõ©(Ê~%ÿÈËoÿ^‹ÿ¡½¿ÿäe·ÿ¯EÿÐÞŠö°ÿÂG“[øŒë«:çWŠÂý`½Qo‹˜®Y‡–Ì3•'øN9ëϦ+F£žÞ¨L7Ç,MŒ¤ŠN9óò¶›~u(^á`xíË~á߃*ÿo`{g¨çŠçþ }½ôXa³o.7¸‹Î—ìýâëþÑð®¶³uí>mSI{XC,N “Œ$Šç§²šOa­Ï:½Õç‹]C«ê’j_aRcG¼Ñ½UL ù`n õàsÚ´õÛ§:­Ñ†Êþ×ÍÎò«ÊQãi˜Ç ,€…8 ‘Ðdd Üo ÞÊS’ò!¯ù¢XçT>Rc©L3g¹'>”š�….õ[ß·\êIç¨ òI·(9Úê3üÙ<¶:qJÌ«£˜ð·£ÿgŸ¶ª[ÊA”ÜÇ Éæ #vC•%¸\�ÌÔ’Ã-Þ•¡Cnu(í®%”½…Œ‘7—å9e(Ò€/SŒptú†nô{µ™î¬˜Þ3äÚ¼là±a¸™8$ãŒ�À"©èþÔô9Þê;¨ogŽ�$ò:FØ4‡€vŽžsׂÁr�íôSiÚeÔ�u{ÚÝ߯Û6,Û¢ „%�XÎAªÏgd—p¡Ð4Ë »kí>E–ÐîÊÉ/L”R>ïë] >qm¤Z\Ò/u ˆ¶ˆMˆTüó6óò�AÇ&´~$X]ÜGaqo’Çõ}ŠX®qŒ�Ûƒ\ †ü€ œø”xý+ë0ÕL%;JÖoõÿ3åñÒtñU�î—éþGIý£§ëøµ¹Ž+×嵕ÈþÞõ_ŧËñ-Òó?÷ÂÖ‘}ÿ>Sß“þ$V�íÂE•ÃHç÷d~gÒ»£BçÎ¥¢OO»üŽ)U�Hr¸êÚ×ïÿ3Ý"ÿTŸîŠÆñ7‡¿á"‚´ýœZÝ‹’ÞRHNÔÎXAé[H»QWÐN¯†{Ÿh¶9]W𦧤ÝX¿ŠïÙ'‰£+%µ¾ÒÇ;cB+sZÓ¿¶4;ý7Íò~×nðù›wlܤgëëW¨¤2 ‹8®ìžÒpÍ®ÆÚÅ PA�®^ÏÁo¥[[*k;k¸/'¸ó$¶2,‹!|Ã+ªÀg=«¯¢€3mmµ £ûDw·ùy7ÌZ4ff-·øŠ¨Î\:Ó<;¦Üiz[CtÑ丞áÄD•S$Œø€N7c8«Ec\ør ‡Žo·_%ÌSI$W (/�üÈ2ÙÀàŽ0=*¼!c¤Au{ÖóM4WK 2©•‹8ÉsЃÐw®‚ŠÃ>°[kXí¥¹¶šÙ¤xî¢�y»¤9�’A ¸òrÈ‚’ç–wŒd¸¹¼’àF‰ í /S»rpŰI9ÎéÅnÑ@àœûÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV©áq©ë0êŸÛ•¬ÐÆc‰ hŠ&z� zg®8­ê(_ YÍz.dšåƒGbc°Å_ÓôloÚùî®ï.Œ~JÉu cyªà¤ “’p9­Z(¼7fÚ§Û|Ë�¦arm¼ÏÝ€À}¸ÎxgÆy© С‹RÒÝÞ\È…ü”ž]Ëî»FÓ'$jQ@sxf9­ã„꺰/&F93&OÞÈ<ò~eÁ÷àSn¼%§ÜŽ)n­må�mç··�*M�¡H ‘ÁÆTƒŽõ½EfM¢G(˜-õô;Ý<©ÊˆJ®ÐtÁAÈ'š¨<)f±)Žêò;Å™§7Ë ó™Ùv’r6‘´�¸à`q[ÔP=3M·Ò¬þÍo¼‚í#¼�¹�Ø–f'Ô’MKyj—Ö7’–ÏDÅz€ÃüÔôP-Ç…´ËˆdS¤’ý˜I27Îâ9ê9ã‘øa%𵌆åÄ·)4ןnY‘ÀxeØ#ÊtÚ¸ÁÎrknŠË¶Ðá·ÔmïÚêê{˜mä·3ƒ¹]ÕÉ8œ¨Æ0íUíü)aou‹-ÓA­<�'î¡‘·e”c?ÄØ�3À¹E`ÿÂ%a)¹7³ÝÞ™àû17R<ƒ€TÔ““‘Ö›/„lî,ïẻ½¹–öo%̲)‘c�«…À$ôç¾k ¢€3ŸG„ë‹«$óÅ?”!‘†ÉT*zn„u¦Ë ÙËâH5Ö2}®sn °©$äŒg#,?ÄkNŠÀµð~—i¤O¦Gçeº7aËüñÉ�T©cnÕØÍ8xRÉ£>mÅÜÓµÔ7R\Hêd‘¢`P0c ©îs[´P©ákMRk¹êòÜ^CäÝ%¼¡VeÁvAäFF3ÐäVÄ­½¼p¡%c@€ž¸%QEQE„<4Ã^“WþÚÔüçS•˜vÉ!Gîó€OçÔš‡Ið�ÑÖd‡\Õ¥Žo1�ex²Îý\°Œ1oCžÃÒº:(÷Ã6·È�î¯QþÎ-f’9p÷ásŽzžFÌpFjåÞ“mwŒg|ie2MÆ@P@Ž˜5zŠÁ¿ð��ó^°º»¶7sCpþC ,Du §“µAÎAÚ8«zn‹�s5ÛÝ\Þ^J‹Ü\²–ؤ� ( I<õ§EQEQEQEQEQEQEQEQEQEQEQEQEQEMÜ?Z’£‡î­I@Uñ+þF[úô_ý è¥ø•ÿ#$õè¿úÑ^ÎøHò«ÿ�n(Å-æ�áQÏOû_¥Oû_¥KEpž�“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@y?í~”y?í~•-“þ×éG“þ×éRÑ@ EØ1œÓ¨¦‡Vb äŽ¢€<·âOüŒ–ÿõè¿úÑKñ'þFH?ëÑô7¢½ŠÃG•[øŒëiqEçáQÏWPIñ¬‘H¥]d0=�IT5Kùl…¬vöé=ÅÔÞLI$žZçc9%€$ !ì{PoøGþ_'û[Sû/O³ùËŒzoÛæcþZ�A¬ÁkQ¨TE aY¿hñýô¿üIÿÆ*}.þ[ÑuźAqk7“*$žbçb¸!ˆŒ8ì;ÒSUð®—¬Mq=ÒOçÏ·2$î»PŽË�¾‡�y¡²ð~Ÿ§Ü-ͼ÷‹>Á’ ±æ @1´ UíSZµÒÌpÉç5ÌÈí PÛÉ1m¸Ï§,½}kAñF§©ÜÛÙÞiq[]5¹šEvž6àp¯y”9ÆzšZRòø?F‰WìÐMhÁ´¸’p?¼Q†ãîrjþ™¤Zé´V¦r­�õÓ¼¸Ç@7�ô®V¼p[˜´&3×[R±àgæ>_ƒÞºMT“VµyØXíWÚ­gx.ñÎX*àûQ jjQEÄQŠ\PQKŠ((¥¢€Š\Rb˜Q@Q@Q@%-% (¢˜^Ò¿ãé¿Ü?ÌU½¥ÇÓ¸˜©–Ã[›QEbjQEp¿Ûlºû²ìµÆ— d ‡žk«ø”ûfÓÝ“ÿe¬+˜åºÑ´(`�¤–A0U^¿~¾§ùpÔïÖÿ«ý–ÇÇ›RÝ-ú/Ô $ƒyƒ#Ö§‡P¸±ºIà�G2‚ÿ8§j:<–6âxÞ+¨”왡bDOýÓþ4x¦Lx‚àc,ú×T\*5ªiþÿ3�Ó•4äôi¯Æÿä{Ȭ{ŒÖn·¬ÿc¥žÛ+‹É®î>Ï0 [c?WeazÑ‹ýJº+‘ø�w=„ZͰS2jƒnèÞ@ ·˜gj)cŒç~]kã^çÚ-†7Ä=–³\·‡5Q 6ææFó-þXÃ-�7'•nU9Ü$–ÆI O}RâóJ·¾Ðmí¯Öb&¹0€¸9ä#rÀïéY_еmCÄ�¤¶‹jb„µ]Zß™R݇D9‰Alÿ9êK+mOF·ŸIÖu>ÍDBa?h!Ê™Y�vâ¹ žAÏzÌðv‰u&�4Ëâ=UQu+¼Æ¾F×ÅÂOî³óc'u8Åu0kp\k×@‚å'‚1y#ÚŽ¤‘òœäò=1ZUÈŨ‡ø‹+ LDl… ™¬%ù‹#ó•ÛŒtlàúÔ:¦5=ZÂ÷Rѵô·´o*ÛÉ%¡¸Þ9tSÁÛŒ1à`ò3@6�ªC­èöº�ºH�ÜÆ$E�À\*õyž›¥M“ &¹¤ß]iðéžWÙc‰œÅs¼rè9ÎÞ#5i4ëØáч‰¬/uXì6£VœÇq¼d ÷›f~@!ŽFhШ®îÂwñR^Ŧ]�g·pyg2Îä—f eLƃÉPƒžþ€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÇÕ¼Eo£»ý¢Òõ ‰“ÜGc…NybHÏNväŽõ±\oŒu7žâ=´ýM¬'P×·Vö2̦<ÿªRŠ~fèOažäPÅljìmµ´d�‘$Ž®QŠ$ÆÅcœäî^€�¸dŒÓ‡ˆí†©Œ¶·°‰¥h!¸š±Ë"‚JŒœôV �Ç×7ugzßÚúdV-ý­ÜùD"E¶ûÏð²ùmòžOöš]UõoÃÆ�ªAk§ÌVÑ›N˜¤Ó°)æ³Ú#PÌO9'€tÄV-âƒáäóõmÍò¨Ø€IÏÞù”ãõlj`¶¹¸ƒìÓÌép¶°Ç óËåùŒ *œ’N:úW/c£kZЬ®ïní.-c´¼šîí,äRK4LÛ˜ÈFã�Ž€*L_ŽÖîÊÓ@Ö$´žfYf¸½Š%2H†uc�£–ÚÄ.o¥m7Š,M•¤öñ\ÝItα[Ce,™$ÚFH㸫:¸‚ÆÎám¥2]ÍI ƒc�Çœ�UPÌGû5Ä®…sÖz¥ý¾¦¶ò½ûK‹ºÍŸ:Ë>YÝÑppx8Ï­­_ÜÝé0ê›ÚãM±7‡œK!)Hà°E�wjÔ´ñ5­ÍçÙ^ÒúÚG…§€\@T΋�ÅG-‘¹~Rç¥K¦ëÐêÒÙ5¥å¥ÊF&ÝF¼dãpÁ=Æ0pGq\晬ɪx’mNçGÕã–eƒO¶’ÂXþN™�À@ÎQ@ðç$Õ� ‹o/mmuì§¶ÿH}E[x›~Uc/ól¾@ùzc½k7‰l—Uû Žãhœ[Ÿ/÷"b2#Ýœç‘Î1“ŒçŠK/Ù_^ÇoW(“;Çoq$`GpÉ�ÁsÆò@$f¹ùl/ZI4Qgs¹õµÔÖÏÝy"U˜�ýà¦Þ¹ÁÆ9¤µÑšOiÑZ ^;>î[–Šía‹(ê3€_&LŽXã8 ‹UñÓ5{´Ëëû™ây‚ZþTR ’]×»Š�PñUž›+G=µÙ1@·7Ekg '?ì·ÝÝÐö¬;ûMM&Ö#á=I¶Ú³g,ñOÉ�ÄÆÀ€wG=k/VÒug·Û}¡6¨ºe¼0If…⺕A.“‘ÁRýwàm'$Ð{¬êðèš[ßË Ó¨xãX  ]ÙÝQ@É«¦ª?‰6pÍs¤ê0\O9‚ 7X̲°RÙ\®0ä°û§Úª^Ãa$z€¼ðýÕÏ™4ód[ÖVtË*�ÀÎGC\ïöeÈ€a¨Ûè_Úm=¼VѰ¹µA QGΊdÞppØ#ŠïtÝF VÁ/-·ylYJºá••в‘؆¥I{u……Å䡌pDÒ°QÉ 8÷â²|!oukáÈ`»‰ãd’Qš‘ãÞÅ^Aýö-îOCWuèä›ÃºœQ#<�i*ª(ÉbPàÜÐt¾3Ò¡Ð4½dùÆßR–( @£~ù#8ãœóØõ­¸. ï:˜&�Ê“fd\àËê9Æ}A¯7¼ðΩ–Ñlíeo5¬ÖqF2Á垟*9v9Ϥ�èjåÆ�|n57šÊî]5µó5Ô£n¸ƒìÈ ¨êê$ g;O\b€= Šâ"Ñ­/üO¤íÒ®aÒbÓ® Å4nˆ¯çFT0=?ˆ…>�8¥¦i×Ñ_é§ì©­Åzï¨ß0"9¡ùøÞxu9]¨>ï P¢UMSR·Ò4«­Fè°‚Ú6•öŒœØz×m¦êQišÍž“ev${l‹É¢k{™pÝ18‘ÊîÄ‹€>µ¯¢ý·FñiZ5Ü:céê#´–S%Ðv;’3Î@Æ[1Ç\f€=ÃVŠöSlðËkz�¬ÒZÌxÑ™•I*JòQºïŠÎÔC° çv¨õMêóÇÂÝ­¤m"ò¹¸”'ɾ4–=„ôÉßîPU«Ưq¦Æ²`‚9Ýð6bBÁ@9Î~Bzt"¯W™éºf½'…¯$»¶ºûI½¶†â I=¬4}¾»±#qÔ6Z}Æ“s=µÄv}í¶�6§aä[lxÝH<ç ÷£LcÓî±ïšïõ+èô½.ïP™]¢µ…çu@7U,@Ï~*h&[‹x§PBÈ�À=pFkÎüI¢"mÚ6‹wt�§ùz8¶‰ž8NÆ ·’q�@ç®ÿNVM2ÑJ²Â€‚0AÚ(ÍQ@Q@�ë–ók—:O‘t“ÛÂ'.ñaI#åîyµG§ø†ßP¿ûµ¼µ�¢3Ä·QlócÊ2HÁa�pyV:êkÿ y~Áªy"ÄZùßÙóyeÖGc†Û‚1ÐçµA¢k ©ë÷Zµæ•«ÛÌ�<6vÒéò¦È�Üij(RîUxÏ@£®hg]ñ)ÐVYeÑu;›h�;Ü[ˆŠl4ŠÄûߊ½u«EeƒÏ ÊofH07#0$nç¶qšËÖ„úœþ‰m'Ó^-Åʼg÷J‘´Š²þð'^ãÏiskZ]¤F嵌²[ç|i†Ür>ï\g¶hkŸYAcs{­ÝÌÝ%¢4*˜žF`˜Œ³@c‚NsŒâ®éZÔZ¤·ÿf¹´»¶Úf·¹U¡³´ü¤©¡= qZžŸygái¼<öwòÛé×ö­o5¬R3=¯œ­ò”Þ€08çå½mxRÑàÖu)­!ÔSLž(ˆ}KœóÁ°dýæÐ»~÷Î;Ð]EPEPEPEPEPEPEPEPEPEPEPEPEPTíÿãö_ÇùÕʧoÿ²þ?΀<çâGüŒ�×¢ÿèoE/Äqÿõê¿úÑ^½á£Ì­ñ³¬¢Š+Ï;B²5á,BÂþ8¼Ô°¸7 uC³Ê‘ È^7ƒÉZôRÉÂÁÒÿç—þT,¿øýkh"YEýü‘yIp·!us³Ê�% ^vÁ<ZôPã¸ÚóT´Š(-®®`�ü›e•V·qhÞPÑó;óY~/­ews�¥ÍͶÅWhàó£}­¾4Žx$sšõ*=ìûs±É ?™¦¥´ÅQÃÇ<µT&n)[[Žç‰Ýj4Ço¨Z¦4˜ãš3pˆY„²’¸(ÅŽà<ŽkÓ¼#qotšÄö²G,©HQã ©¡ÐE PD±CGŒ*"€Ð #†(‹˜ãD.Ûßj�¹½O©àP�6>—4”SsIš)q@hÍPš3EfŠJ(h¤¢�Q@Pi€”QEQE ½¥ÇÓ¸˜ª5{Jÿ�¦ÿpÿ1J[ nlQE‰¨QEæÿŸlÚ_û²5®pxšX´}:Ø,R u{ŒåгgŽ=þ•ê$ðÅŸ‰`….$’)!$Ç$xÈÏPAê8•s_𪬿è'qÿ|-}„Žë=cåëþg�‹Á⥈�J[KÏÓüŽNÕ®4Û�6)Q•†Ù"~VEî¥×5UÕ5Y¯<´“n#Ý»n¿…w?𪬿è'qÿ|-Kmð·MŠá$šúâhÔäÇ€»½‰ô®Ïí,Ÿ´O[vg'öv5ÇÙµ§ª;ˆ¿Ô§û¢œUX‚Ê S‘‘ÐÒô¢¾EŸT„*ÀzƒKESQªlXÐ)$à2NIüéôPWÐ][=µÄͮ׊D ¬=<Eµµ½�º[ÚÁ ÂGUÀp*Z(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(“CÌAŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*�¿ü~Ëøÿ:¹Tíÿãö_ÇùÐ�üFÿ‘Šúõ_ý è¥ø‹ÿ#õê¿úÑ^µá£Ì­ñ³ª¢Š+Ï;B²õë«Û->9l^Ý%k˜!&xŒ‹‰$Xú^FàzöÇ|�JÊñ rI¤ƒo!ŠêÚfXÔ³IÑÛrNÕ<M9�ì+Ïøòÿ„ªOµyŸeóqy¿Íò¼Ìãí;3³æé·¶;WQ Ý^ÞéòK|öï*ÜÏ0Dc\G#Gгrv“×¾;dãý¢ÃûOí¹Õãÿí›?±îçÛÈÛ�Ÿð,þõ¯áèä�I&HÞ3-ÕÌʲ)V ó»®Aä¬8<ŠHlÂ×ïî!ñÄfÿS†Þ+{o. ç’Y]úÀGeî* û±®iñ�CXÿ�×µ¹¶ÔóÁ¤òÇû½êmzÂîçÄ·>^�¨M ÚÚ²Ohñ!I#–GÊvžqÆ WµÓõõÝ5ÛNÕA{繞êñà|³´cˆ�…êÖ�Ì«ÿê2 .µKBˆŽQŒï½³ÎÐUB“ÏQ[×zö³¨è²-½•½�Ä×�e ¢õˆ¥²Ùòù�ŒqŸZÈ>Ô4¹gÒ’+�U®tØíb¹’0‘@wI“‘÷BŒ62X’=Ei.“¬Íá›m+8າ�w\Ë) &>o5p mÄò0I£P%:æ­}wáË»;HË^Z\JÖ­vÉ_ÝíbÛ989û¼n?�as+�7(9÷ï^WsáÉ­ôÍvÒëÃ’j7Á;[è-�"�*íÜû¸#øAç=ø¯TŒb5®4ÀuQ@‚Š( Š( Š( Š(¦E”´RQ@‚Š( “4QL¯é?ñôßîæ*…_Òãé¿Ü?ÌR–À·5Ûî¥V«-÷Ò«V&¡EP~««Á¤Æ�*³´„íUöëY?ð™ÛϬ¿÷Ъ~9}²Xýÿe®SÍOö«ÛÁà)T¢§%«< naZ•yBÉ‘ÜÇã+6™H%�๠…÷®�Y]C+R29W�ùŠ\dñžõÑxÄcNqks kBx9ÉŒÿ‡µ,VX”y¨­{š·>Jýz�íuWŠ{ÁEt4QEDn­Äs˜¯<í4hªZmùÔ¡{…�ã·-û‡~ «ýý½�ížHçŠn«6§(šU¬2Ï#m2O&Ôˆx�Ë}é@óA “�\>—k«Yj:­ÎŸ/Ûna¸^Eq&Ñv|´}èzFÃvÐ>îÏ­jøÒiÂ6ÑÇþ—~ÖI.ä zp2Jã±ÑÑT4[äÔ´[;Äó"—º·FSî#ð«ôQEQEQEQEQEQE aE%ZJ( Š))€fŠ)3@…£4”PWôŸøúo÷óB¯éñößîæ)Ka­Í†û‡éUªË}ÃôªÕ‘ QEÃü@}²éÿGÿÙk›¹¶x4û+ à›�ä®˵±[¿lÚwû²ìµDAb|3¤^êm›©ùæmç僎M}F\˜ZO»©óÈs⪮É~†/™' ý*ίntíBK]ûÂ!°r ÿZ±ý£§ëøµ¹Ž+×嵕ÈþÞõ_ŧËñ-Òó?÷Â×d%'UA«;=>î§éÅRsNú­~þ‡®Gþ©?ÝÍøÉ¢Æ‰Å̶ö’j¸hî ‚fÁe �•¯jèâÿTŸîŠÆñ7‡¿á"‚´ýœZÝ‹’ÞRHNÔÎXAé_÷>ÉlyÖ¢°iš ·z¦¡ks6‘ö›A6©:³LYˆå‚ìùJìüZúœºN¬óÂ�èö–ï#¢Ì|ÛЫ’™êÐô=Xûw“U𦩩é7V/â»öIâhÊÉmo´‚1ÎØÁÇЊÜÖ´ïí�ÿMó|ŸµÛ¼>fÝÛ7)ÆFzúÒˆÐkvzEÞŸåIoöV6—ÜyS‚ËŽzê~ u<.Ÿ$ضv¶—�iBâxY~ÐòM4ñ—TÚ¡œ®6�•HÌœ�€3ë—q]Ù=¤áš']�µŠ> ‚?\½Ÿ‚ßJ¶¶:TÖv×p^OqæIldYBø †V%U€Î{P§–ÞmÆßÅZLú„¤yŠ«¦ÉqŒp „Vø<ŒõÎ8®kÂðè_}hh×pMòÛZEi£Ì‘D¡Ênf Ë�9Ü~\‘�ƒ^�km¨XèíÚ#½¿ËɾbÑ£31m¿ÄUFp:àÖ™áÝ6ãKÒÚ¦ˆÏ%Ä÷"$ª™$gÀ$q»À  vþ|^>»„ÝÜÉšzL!y2ˆÞc”t­ZÔ5‰àÕ"Ól,~Ùta3ÈaÇvƒœ’s�ŽÇ$TQøl§ˆ[Y:ƤҲì0±‹Ëò÷ Ä{° õϹ¥ ÀÆÖEÔ5¹·ˆÂnV|É,dçk’yïÁˆ  O ø†õ¼=¢ÙÛÚɨê2Ø ™šk�˜MÛrX‚Kœc’+J/�Al×HÓÞê{‹´¼sJ!¦í¸cƒón 0ðžEI„,­­l¡´º½µ’ÎoðÈ� •l‚È댎ÄT�ákŽÍleº°kH~Ï–ÒÆ<ƒµ·#9<ç<òh9üI4âhí§¶LÈÐ7åxHýã–Ûò”Áç$¯?7bIák)o>ÚÓÝÑ,rGr\#0N>é²s½¹é�º(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+—ñ„sÛØI}m¨ÞG|BÅco›Q§'åGßÎyÝ�'޵ÔV©áq©ë0êŸÛ•¬ÐÆc‰ hŠ&z� zg®8  [Ûëæ“XÕEìñ¾™¨Cmº92b"á—£óò8Å^½Yìò/¿çÊoûò¤ŠÃS½¸H£²¸ià~ì�ÌúW¾y?í~”y?í~•Òóùt¦¾ó‘Ǭÿ]¨«è§T¾Oû_¥Oû_¥|ñî‘QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”/“þ×éG“þ×é@QRù?í~”y?í~”°ýÃõªöÿñû/ãüêÒ.ÁŒæªÛÿÇì¿�ó âüŒתÿèME/Äù ÿ¯eÿКŠõ(ÿ u_��-&h¢¸À¬¯ÿÈ.úÿ³ÿÒ˜«V«_ØÇ¨Ùµ´®è +«Æ@de`ÊÃ9 äcŠs÷÷òêZ’é·ZC5ºÜ€³¡¼F\o °òŸ›Ö‡…aKm ìñnAwua˜±·*ŒžN¤þǾÿ¡“Tÿ¿vßüf®XYG§Y­´Nî3³ÈAgfbÌÇ –$ðæ�2Ñôù,±%•Œ—6,³±¸�12.CFÄŽàœg¡ÅgxcOÐ5¿ñönŸ«’�D LÁ`ä°åv$“ßEt×Z �þ¤—·‹-ÃGƒ2ÈLHÃø‚tÝîsI'‡ôöÕ†§IÑ9�Ã!E˜zH£†ühåÚV“-Ö�¾Ñ, ¹¸˜Æöú\—2¦å*PùdlÚ®qœƒ¸ÿv»ïÎïc¨[¸·½u mÞ}ʲÈä°9s×¶*óxcO‘¥ið™&yŽË¹"Ã63÷r8ïš³¥hÖº2\¥¡˜­ÄÞsyÒ´„6Õ_¼Ù8ÂŽ¤Ò¡ES´f’Š¢Š(¢’ŠZJ(¤E&h¦!sIE ŠJ(fŠ))€(¤ ¯iYûScvvÿ?¼=j…^ÒÀ7-�Ê:®ïâ_óžÝh{ÜÞ¢Š+#@¢Š(’ñµõŲÚC­ɸ¶ÓŒãþuÈ}¶ëþ{Íÿ}šè¾!¶Ùtÿ÷dÿÙk�.@È@=<×ÓeôÓÃÅÛ¿æ|®c9}fJý¿$hǪ^Á«„–·°Ýã‚iáØ“:‚YW'=ž@3[Q\ž»â»í'W–ÆßO‚ä$+1 Ý3*6@,"·p¼«cæíRÙø¸\ÜZÄÐ(Ü¥¦h‹H¸òVPSå Ü0ê ûPOEqWßô;MjÂÈÍ:,Û¼Õ—O¸YxMªP–ÈàÝoÚÉeŬSÈn.’Ö(å…àfbrN$PpsgÐÅ—o®Cu¬ßiQÛÜ-ͤK)2¦ÄpÅ€Úz‘•<ãcJÔUÓ-ïcB‚UËFÝcaÃ)÷~”rŠ¥s©Ãk©ØØº9–óÌòÙ@ÀØ»Žy«´QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEcêÞ"·ÑÝþÑizÐD‚Iî#‡1§<±$g§;rGzØ¢±n ÐÔQEQU5MJßHÒ®µ¢Â hÚWÚ2paë@誴W²›g†[[Ô…f’Ö` ƌ̪IRW’�П|Vv¡ã 7L±Õîî’ácÒçH'P€³T¨Ï#N†€: *Œ:¬½Æ›Èe‚çwÀÙ‰ ç9ù éЊ½@WR¾�KÒîõ •Ú+X^wTqURÄ ÷⦂e¸·Šu,ˆ×f€$¢Š(¢Š(¢³!×-æ×.tŸ"é'·„N]âÂ:’GËÜòj�Oñ ¾¡ö#kyk;Dg‰n¢ÙæÆ”d‘‚à àò8  z+ ]ñ)ÐVYeÑu;›h�;Ü[ˆŠl4ŠÄûߊ½u«EeƒÏ ÊofH07#0$nç¶qš¿Es÷>.²‚Ææö+[»˜!ºKDhU1<ŒÁ1f€Çœ çÅ]Òµ¨µIn-þÍsiwm´ÍorªCgiùIRBzÓ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ªvÿñû/ãüêåS·ÿ�Ùç@Äù ÿ¯eÿÐšŠ±ã›9n5ØZ0û:ŽN?‰¨¯B•X($ÙÇR”Ü›HÛ¢ŒÑ\‡@U Nþ[!k¼ =ÅÔÞLI$žZçc9%€$ !ìyÅ_®Å[û"Y¯ÊåYWÊS«’Ì$.Úõ¤ï5MnÆÕîntí1"\F¡+’2I$ Zµ¢êÇV¶™Ú(ãx¤ÞTžb6Q$VV  ºõ¹Ë­[K´SŽ·¥jwË– ýIdŸùé—bY}WéŒsZž™®SV¸&Ý’KìG%±ÌR*ÃnCéòž9ÁÈÉÅ+x—Åóh7³Â–ÖŽ�ÛÇ7ï®FvuŠ·“Û­3Lñ}Ýö¥km%•²Ç-Á¶�¤“‰Äm& Év^Ǹ¬­³ø’õ'ÔÙ›M…R3bá�€çŸœŒšWŽšïǶַ{îl"»ƒP¾D“Æ?5T¹\ƒ÷I>œWOgg¨Âf±»‚ê ÛKÁ uÓ#¿"¸­*ÓT—G½Ö-ol£·¹žâî(§°ó¡v+óo@§zët9ÍÖ…atÉ=żr¸�p72‚p(BŒÒQ@Q@ IEQERRÒPFi( Š3I@ šJ)(´”Rf˜ IE%1hèßñøÿõÌÿ1YÕ¡¢ÿÇãÿ×3üÅ'°-ÍÚ(¢³4 (¢€<ûâSí›MÿvOý–°®c–ëFС‚’YÁUzýúÖø¤ûfÒÿÝ“ù­sƒÄÒÅ ÛéÖÁb•«Üg,U›8qïô¯ªÁS›ÂRpWÕþ¨ù|d ±UTßEú2}GG’ÆÜOÅu�“4,H‰ÿºÆ�É�\ cå�ÿ@ZÉÓµk�6ãÍŠTea¶HŸ•‘{‚)uÍUuMVkÄO-$Ûˆ÷nÛ…¯á]УQU\Ú¤ž¿wCŠs¦é>]kO¿©îÑ©O÷Er?.ç°‹@¹¶ fMPmÝÈ6ó íE,qœàË­uÑ©O÷E8ª±”§##¡¯ˆ{Ÿh¶<“Ä—vÞ¹�M½½RšWØæZ%×ï‚äçy ¨Ic’r9®ËÅúU�¯„üQ} ²-ÝΟ7›1åØÎOAì8®¤¨`CAê -!˜Z¦‰cuiqwýšn/%´6î!—Êy�Œm-�>„ôí^q¥Y¶›mau5Ü:Ë©ÞÀ×Ó]yΨa°´Ÿ*œî’ Ëc$ײSQªlXÐ)$à2NIüèš±²¶Ôôkyô�gQÓìѤA$&ö‚©•™Ñ÷n+�Ùä÷¬Ïh—RiÓL¾#ÕUR»Ìkäm|\8$þë?62pGSŒWmqmÕ³Û\AÐ:íx¤@ÊÃЃÁ[[[ÙÛ¥½¬Á $q UQì€8øµS«øÒ#u¦ê¶öÖ4vaôù‚Ë+ ­3>ݪ¡IUÉîIí]CéQ%KÛa§�óÛ›bd'‘&üqü'¥]¢€<‹Ç÷–ð™u,í"æ-<‘[›�»¯º2{š¿á¦ºY´�JHÄïsOpùjÎÕ *ò¸á^–±F²<‹‡|n`9ltÉïU Òtë[‘so§ÚÃ8ŒD%ŽV?‡ gÔæZ•Ž©u«Æº§‡ï^÷PyÙžÞâ (b2dòð'l‘Öºo;U‘ü1q­Ù {‹köŠv¥š d'³Áè[ðO`ÐÄò¤¯4‘çc®zàö¤žnbòç�dMÁ¶°ÈÈ ƒøá@�–¡æ|G¾°êK ¶Q[$Ïc*Æ]Voœ®Üa†psÅKáù§ƒBÛoo1mBööKywG´’:3žÊF1þ𮩔:•a•#â›QÁ C*G…EQ€ p 8ÒtÉ—QОÛH¿µÔ¢·�o®îbm¦s73ž-Ÿ˜dvÏj›CÓoã¹ÒþÃcye¨Ek"ê×!¶Ï)�,x”ù˜`Ã8Ž3ŠôJ(ÏmlmÂ×6ÓxTmUíV;§1>é®2 /F;þ`ã!@ÎF1[Þµ¼³µ½‡TŽFÕ~ÐMÕÑS²ç�±�à ¡v®;Aõ=%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWãMç¸�@m?Sk Ô5íÕ½Œ³)�?ꔢŸ™ºØg¹ÙQ@Õ�ëké‘X\·öµüpO剨Cï?ÂËå·ÊyYÝÑppx8Ï­­_ÜÝé0ê›ÚãM±7‡œK!)Hà°E�wjë©‹ i#È‘¢¼˜ÞÁ@-ŽOzâ´ÍfMSÄ“jw:>¯°C,}´–ÇòpÌÌîrŠ'€9&¬èH|[y{kk¨Çe=·úCê*ÛÄÛò«›`òËÓ믢€8Yl/ZI4Qgs¹õµÔÖÏÝy"U˜�ýà¦Þ¹ÁÆ9¤µÑšOiÑZ ^;>î[–Šía‹(ê3€_&LŽXã8®îŠá¯í4y4›X�„õ&ÛhVÌ}œ³ÄI?&CÜp9õ¬½[IÕžßmô:„Ú¢é–ðÁ%šŠêUºNGKõß�´œ“^›Es7°ØI /§?‡"[IŴ׋qr¯ýÒ¤m"‡ì¿¼ ׸Å3ÆÚ\ÚÅ–—i¹EmF#,–ùßa·�»×íšé¨ 7ÔôûË? Má糿–ßN¿µky­b‘™í|åo” Îô�Ç?(=ëk–�³©Mi¢šdñDCê[üç˜ ƒ'ï6…Û÷¸ÎqÞºê(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ªvÿñû/ãüêåS·ÿ�Ùç@ÿ‰°uHÁéä�æh¦ø ãU�þ¸�æÔW<·7ŽÄôQEvœ�E&iiQ\U•î«®X[ݪ¸ž%�Çn©i îÆöýãœex=kwÃ2Ï.ˆ¿i,eK‹ˆŽé „™Ô Ç–ÀdòqEÆi›xc1†3)P¥Ê�Ä àgÓ“ùÒ=¥´Œ¬öñ3!%I@väqø?æüQ¬ê70Áa+�ÅVedÓ”V'.w¯òªžÖu3©®Ÿyy5ŬJ‘Å4šDñ=ÁÛÉ,I ƒŽO^zu*ã±Ù¢XD"4Ø(Û·Æ=)cŽ8bH¢EHÑBª(ÀP:; ó£â(çò¦¸ñ[Eö�FXM¼SÛÇöxC>Ö9BÝy'ø…vÚ4ÖRØí°ÔÆ¡1 7ÚÇ=pX}zQp4h¢Š(£4”€Z3IE (¤ £4””´RQš”Q@&h¤¦æ’ŒÒP!sIFi)€f´´_øüú昬ÊÒÑ?ãõÿë™þb‡°–æõ�÷Ò«Vf…ª*­�âO Yø–RâI"’LrGŒŒõ£�ùW5ÿ ªËþ‚w÷Â×Mªêði1£J¬í!;U}ºÖOü&vßóë/ýô+ÓÃUÇFšT[åù~§™‰ŽÔ~ÚÜß?ÐÏÿ…UeÿA;�ûáj[o…ºlW $××F§&<ÝìO¥]�ÆVm2$�K1ÁrA ï]²º†V ¤drª­�ÇÓÒ¤š¿ ¨ápu§íê[éEU¢¼£Ô-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  UNßþ?eü�X‡î­W·ÿ�Ùç@÷‰€þÖˆž¾HþfŠƒÅ²Õ¡þxƒúš+FìÚ.ȹE%Ôr‹Yšæ¯ý�eÇ”�¾Qe—Ë�8',Ø8c§RzÒ¢€9ûõ|¦ÅfŒ—©en»H†w�»�ØÝŒñœf®øzÒæÇFH®÷yí4Ҿ⻾yYÆvü¹Ã ãŒô­:(ÉøÎÂæúóH0iË|‘´¥Ñí–dQ‚U�þ=ùÕ/ i·–^'šåôT³‹ì,£É³ŽÝ]·©å•ÁÑ5Mxö¢°iš ·z¦¡ks6‘ö›A6©:³LYˆå‚ìùJìüZúœºN¬óÂ�èö–ï#¢Ì|ÛЫ’™êÐô=Xûwëª#un ™âœ&ñ´äàsõâ¹¶ƒ[³Ò.ôÿ*Kû²±´¸†ãÊœ>XØäsÐSõ©átù#þŰӵ´¼ƒJÂËö‡’i§Œº¦Õ åq´|ªFdä �c¢¹)å·›C±·ñV“>¡)bªé²\cá‚>#=sŽ+šð¼:×ßZ5ÜG<¶Ö‘Zhó$Q(r›™‚räw—$``ЩQ\¼±ÜYø¿N‚ÛQ¼¹–s,·‘K&äH6�¤(á~r€`@9Î hêÄðj‘i¶?lº0™ä 0�c�;AÎI9ÀÇc’(^Šâ|7âÖðö‹gok&£¨Ë`.fi®6a7mÉb ,Np=ŽH­(¼Vu³]#O{©î-þÒñÍ(„B›¶áŽ͸0ÀÂyÒQ\üþ$š q4vÓ�Û&dh›ò¼$~ñËmùJ`Œs’WŸ›Ž‚€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (®_ÆÏoa%õ¶£yñ �¼RmFœŸ”9çv@ž:ÐQEp÷·×Í&±ª‹Ùã}3P†Ú+tr"dÄEÃ/F-æ6 äqнz³Øx£L[}Nîi®%’[¨¥—1¥°VçhÀ\1@2{“ÍuTWžèÞ+‹Xñý¼±ëP+‹[ˆíì’áO(ñífP~û|äÈQõ«»çÔ58¸ž5[é·*¾°’MB8¸xáÔ%ófCJ„ò£î>Qܬ¢¸‰oïI5Ÿ¶\îMil¶ÿÝy&U„�½ ä¾î¹ïŽ* OPµÖôÈî›S7·w³AyèÂÜ.É<¢FÞ. öÎîh½¢¸Ýv×\¿{+æ´¹Šme76vÚ«Û°“r‘ó'ß!C`zŠÊÖõÉ¥óO»Ô>È4Ø'¶–m–Îä�÷?ÞR»IÎp‰ �G¢¹í~-cSÒ¯-,"h[΃ɞ;³š=ÈÒa—”ãr÷ÍsÒ_KŒzl_Ú‹q¥å_ZÇ}$÷/“¿÷R±ÎÜoáàÔà€z‹á;¹o|9o4Ó¼ÎZEÌŸë`ÿÛQ€ÞàÕ­vG‡ÃÚœ±;$‰i++©ÁRàƒØÐ…å÷:ö©ÿÖ‘§‹Ù†¡iu ßL®w`Gè0:ˆí|Xnd³�´ç�L½œÛÛ]y –o›“*¶Óƒ“Ôd ÐIErÖÞ3I4ËýBâÏÊŠÔܬá§ÜN< ŒI#žµGľ%Õ ðþ³mö/°ê�Ù}¢2·—Ë$©e`¿yHéŽãšíè®?C¼Ö ñLš4–‘-…½”20{÷�ã,eËdÜù#n  ëŠÏ×®õ5ºÖô;-Bâ+ë˘$²pä´HÑ`¾ƒ6òtãæ÷ @¢¸› §¼ÖÍq‘ÙZZÚ£aLÒ.þüûÔÉìÚ®Üx¾K8§ŠçKa¨AqoÛG8`ÂfÚŒ®@ÈÎG rÖ€:š+�ñˆu#¢ëVÖÚvË‹K{©’ïgf�Šì8Ë07ðã#5ÔéÌϦZ31fhP’NI8fŠ( Š( Šç`ÇãËÈ>Ûrðɧ$¢'|¤lda•^ƒ€*1'µñt–0jw–ñÙï½7oÛ1eòñÙIPä¨ÀÆ9ÔQ\ŸŒ4ñ0·ò/µ{ëéÒÒô±"g%Ÿb°„V=9 f¤ñuüº›¤Ë»—eô1˜âbdœma´óódã­uW�]ß^Üx êR]_ë½Jî-í§hÚߪ4üÃi+œ�Ääœ�¿ ]\jjv3‹ø5ŠH-u<Ù•NàÏ¿seIq ©é‘@UQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@C÷Ö«ÛÿÇì¿�ó«ýÃõªöÿñû/ãüèŸñ4húœeºˆ‡ó4T^*”Ç«F;y#ùµŒ“¹´Z±=”WQÊ.k_†+»�Öâ4–ÞkÒ²Äãr¸LÀx#*à+g5CS±–ôZÉop�\ZÍçDØÈA\‚F÷¨c9;[])nã:‰4W7“[ÅVh&Œ$­ì`î\($ñŒ÷®‡@‚+K�fÖÞ4ŠÞбDƒ €Á à ±?‰¨m´}RÒy§·ºÑâ–v-+®˜à¹Îy>©'êMhé–2Ù ©..{‹©¼é]#ò×; I asÞ�ÎKÆwÖ±x�I€jÒÃw¼“Ç çå-—áG8ç=«'ÃQBºžŠÖÖ–i4~Z«$JŒÅ¬7�Ì£',s“šíµm&k�RÒþÒ G’—p›€ìTÉä? ʰ𶥧_Í"Ü[ΗŒ’ÝÊìU™€}È©´�„0FïH>ÒI ¸Žq§Ýä·�L²Í,l ŒyžQUVÀ•yb¦Ev?„qè’D–öÑù~Hó!‡ËiCA‚üœ·Ï‚sCøBi �ØÙ­íщ$tVT¶Žd–2sµÉ<÷àŽÄVÝÏÇá +k[(m.¯md³€ÛÇ<2#DH%[ ‚2:ã#±#xZÅ#³[n¬Ò³Ç%´€1� ímÀƒÈÎO9Ï<šÜ¢€1$ðµ”·Ÿmiî�è–9#¹. ‘„§t‚Ù9ÞÜôÆÝPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX:§…Ƨ¬ÃªljV³CŽ$�¢(™ê@tl1鞸ⷨ  Y|1g5è¹’k– ñÉ4;ÀŽy#ÆÇqŽXm^˜#Š‚Û‚×Z¸Õ#ÖõC%Ä¢I£c G¢«Ü0sÜæº('PÑ„·?Ú6{SQ†Òh-Ã`G¹öœ¶<^�³Á¤“ÃÖ¯¥ØY$“@Ö~Ï<,‘�¥2 ‚AÈ9ÍkÑ@­á›%´µ†Úk›Ym·ùw0¸ó~s—É ƒ¸òr:óÚ�¦hK¦Þ3DBÛEj–Ö¨³ ™Ø“݉__º+bŠæôߦšg ­êóÅp]§ŽY#c8 ±u@ùˆaŒÃOÐa±¿k纻¼º1ù+%Ô�Œqä«€:�2NIÀæµh  vðÝ›jŸmó.6™…ɶó?tföã9àqœdg椃B†-H_Kwys"òRyw,;ºíLœ�8©EaÍá˜æ·ŽªêÀ¼™\äÌ™?{ óÉù—ß�Mºð–Ÿp8¥ºµ·–·žÞÞ@©4j6… ‚GR;Öõ™6‰¢`·×Ðïttò§*!*»@AÓu žj ð¥šÄ¦;«Èïfœß,ƒÎgeÚIÈÚFÐ6ã��ÅoQ@ôÍ6ßJ³û5¾ò ´Žò6æwbY˜ŸRI5-åª_XÜZJXG™œa–è݇/óÇ&AR¤�»T`4ááK&Œù·sN×PÝIq#©’F‰�@xÀQŽ€§¹ÍnÑ@z§…­5I®äk«Ëqy“t–ò…Y— Ù� ÏC‘[B¶öñ„•�zà T”PEPEPðÓ zM_ûkSó�L~VaØ$…»Îðç‚0F9¤¹üi¦@÷ªÐj$ÚCç?úŠÃ¬>éå°byÆ½Ž¡¡­pa•¡‘]v•aÛò çÐבÉi¨ÍJÊý§†k‹v9’áþèܨ¼ÜœŽ3‚‚Äcè> ;F7,Ò¹o8E-ÃÊÑÆGÉ�Ìq�3øûP3¦Í”PæŒÒQH4QšJC“4Qš(Í%RfŠ3@%”Ä’ƒHhÍ%”Äf’“4ÀSZšü?ýr?ÌVMjèñÿ'ýr?ÌPö¹Ñ�G­GäÿµúT´TEäÿµúQäÿµúT´P^Oû_¥Oû_¥rþ6¾¸¶[Hb•£Y7Úqœcι¶ÝÏy¿ï³^Ž.•jj|Ö¹åâs8ѨéòÞÇ«ù?í~”y?í~•å1ê—°O±]J²#de‰üÅz.…®Ã¬ÛvŽåï"Ïê=ª18 Ð�5î�0™�@ÿÐšŠ‡Ç3$ZÜ{‰ùm”ž ÀÜŠ´ôÜMytRfŒÓ Z¯x·oSÁ »¹i¡2®=0yéÎj|Õ-Rî{; &¶…&™pDLûw€yúã8÷ f/ü#ZŸöŸÛ´¬3¿Íò>Á'•æôó6ùß{ÿ¼×Af·i ³Á4»¸ha1.=0Y¹ëÎjœÚ”±ëzm�ˆî šWÝ÷”¦Ì?ŒçéXz¿‹u]7\šÎßB’ò%‹z*oóû_*0ÚO8åN{RÖÍÏ‘1;]JœuÁ¨­,â³Ó`±MÍ 0¬+¸òT sø ç4?ß^=Ôzžœ¶ÆÎ5y™Û˜7B±4aˆÈaÔœƒÖ¡´ñ´×ÖÖßc±[‹‰^|‰ –è°Ad;‰P3އ®:RÌŸ¼:ìÆ;! ²*Œ�²y �OBAéZú>‰i¢G*Z´¥d`@‘³±@¢ÿ²;uúÔÚ]ïö–“e}åùi�&ÙœíÜ ã=úÕº-”Rh¤¢� Iš(Í )( ŠJ(£4”f€ J3I@‚�ÑHi€RPi´Ä-%”V¯‡ÿãþOú䘬šÕð÷ü„$ÿ®GùŠÀŽ–Š(©((¢Šá~!¶Ùtÿ÷dÿÙk�.@È@=<×Wñ)öͦÿ»'þËXW1Ëu£hPÁI,‚`ª½~ý}Nòá©ß­ÿWú-��6*¥º[ô_©@HóG­O¡qct“Á Žd9þqNÔty,mÄñ¼WQ)Ù3BĈŸû§ühñL˜ñÀÆ>Xÿô®¨¸Tj+TÓü-þg§*iÉèÓ_�ÿÈö$;‘X÷¬ÝoYþÇK=¶W“]Ü}ž(`(¶Æ~®ÊÂõ£ú”ÿtW#ñî{´ ›`¦dÕÝѼ€o0ÎÔRÇÎüº×ƽϴ[ oˆ{-f¹oj¢mÍÌ�æ[ü±†*[nO*Üx­ís]‡F·Â§ÚoåìÖhÀ<¬>¿uGv<^sâK‹;o ÜǦÞÞ©M+ìs ­ë÷Árs¼…T$±É9×eâý*Æ×Â~(¾†ÙîçO›Í˜òìg' öR©mâ k½mF¥• SçZ®±¸ûÈCäý+ž‡ÇW—ž³¹³Ò$—T¹bRÓzèœÈÃkœ_˜ƒ¼€Emjš%�Õ¥Åßöi¸¼–ÐÛ¸†_)æB1´¶@úÓµyÆ•fÚmµ…Ô×pèK.§{_Muç: i†ÂÒ|ªs¸H'-Œ“@žú¥Åæ•o} ÛÛ_¬ÄMrapsÈFä1�ßÒ²4¿jÚ‡‰ImÔÅ?jºµ¿2¥»ˆs‚Ùþr;Ô–6VÚž�o>“¬ê:}š4ˆ$„Â~ÐC•2³:>íÅr<ƒžõ™àíêM:i—Äzª¢êWy�|�¯‹‡ŸÝgæÆNêqŠèâñ³ê±XIk{�Þ8&ž‰3¨%•rsÑIä@ã5±\TZ³jþ4‰®´ÝV k ;0ú|Áe•†Ö™ŸnÕP¤ªä÷$ö¥Õ1©êÖº–�¨Ï¥½£yVÞI- ÆñË¢žÜa�‘šé´}RoGµÔíÒD†æ1",€úà‘W«ÌôÝ*h4�5Í&úëO‡Lò¾ËLæ+�ã—AÎvðøpy«I§^ÇŒ­â+}ßí—­H$žâ8s*sËFzs·$w­Šã|c©¼÷è §êma:†½º·±–e1çýR”Só7B{ ÷"€6.b¶ŒÚtÅ&��O5˜.ц`2yÉ<( "±o'˜÷«nn•FĨÚN~÷̧èG¨¨®Êö—ÖÒ<-<â¦t\n*9l�Ëò�=*]7^‡P¾–É­/-.R10Žê0¥ã'† î1ƒ‚;Šç4ÍfMSÄ“jw:>¯°C,}´–ÇòpÌÌîrŠ'€9&¬èH|[y{kk¨Çe=·úCê*ÛÄÛò«›`òËÓèY¼Kdº¯ØLwDâØÜù¹‘ìç<ŽqŒœgÕRö #Ôç‡î®|É 7›"Þ²°@C ÎYT€r:ç³.D› FßBþÓiíâ¶�…ͪ@RŠ>tS&ó€3†Á$P{¦ê0j¶ ym»ËbÊU× ¬¬U”ŽÄ0 ý*KÛ¨ì,./% c‚&•‚ŽHPIÇ¿“á {«_CÜO$’ˆüÐ�ö*òï°Áorz»¯G$ÞÔâ‰ä{IUQFK‡æ€3¥ñž•�¥ë'Î6ú”±E÷ÈpÇçžÇ­mÁpgyÔÁ4~T›3"à?î_QÎ3ê y½ç†uHì¶‹gk+y­f³Š1–,ð´ùQÈÛ±Î}$oCW.4ëãq©¼ÖWré­¯™® �uÄfEGWQ 9ÚzãèTW�iâ}'n•s“�pV)£tE:2¡�éüD)ôè1Å-3N¾ŠÿM?`½Mn+×}Fù�ÍÏÆóéÊíA÷xàb€=ªj𕾑¥]j7E„Ñ´¯´dàÃÖ¸ m7R‹LÖlô›+±#Ûd^M[ÜÈÛ†èىĎWv$\qõ¨µ}íº7ˆJÑ®áÓOQ¤°2™.ƒ±Ü‘žr2ØùŽ:ã4è´W²›g†[[Ô…f’Ö` ƌ̪IRW’�П|Vv¡ã 7L±Õîî’ácÒçH'P€³T¨Ï#N†²í<=§i_Úæ= ),¡KIáµÊDêd ò…8ÈãµGªh×Wž>ím#i�¥ÍÄ¡>Mñ¤±ì'¦Nøˆÿr€:¨uX.5{�65�ËÎï�³ ÎsòÓ¡z¼ÏMÓ5é<-y%ݵ×ÚMí´7RIí`£íõ݉Ž¡°:Óî4›™í®#°Óïm´yµ;"ÛcÆè¢Aç8_½cŸu�|Щ_G¥éwz„Êí¬/;ª¸ª©b{ñSA2Ü[Å:‚Dë‚3^wâMûnÑ´[»¤m?ËÑÅ´LñÂv0`0p�¸ä“Œ‚8Åwúr²i–ˆêU–‚Ñ@h¢Š(¢ŠÌ‡\·›\¹Ò|‹¤žÞ9w‹êI/sÈ=ª=?Ä6ú…ÿØ�­å¬íž%º‹g› Q’F ƒƒÈâ±×S_øXSËö SÉ"×ÎþÏ›Ë.²;6Üއ8=ª XmO_ºÕ¯4­^Þd�á³¶—O•6Dæ%™B—r«Æzs@:ï‰N‚²Ë.‹©ÜÛD�ÞâÜDP{a¤V'ØüUë­Z+(¬xfS{2@‰�¹�#w=°sŒÖ^´'ÔçðäKi8¶šñn.Uã?ºT�¤Pý—÷�:÷¦xÛK›X²Òí"7(­¨Äe’ß;ãL6ã‘÷zã=³@\øºÊ ›Ø­nî`†é-¡TÄò3Äe˜p3œgwJÖ¢Õ%¸·û5ͥݶÓ5½Ê¨u �§å%H8= èkŠÔôûË? Má糿–ßN¿µky­b‘™í|åo” Îô�Ç?(=ëk–�³©Mi¢šdñDCê[üç˜ ƒ'ï6…Û÷¸ÎqÞ€:ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ §oÿ²þ?ήU;øý—ñþtÄøß`×ã/ ÿ�tÈÆv|ÏɇúQ\ŸÅÝnëIñ½§ÙX£ùƒ�^AŽ>ƒò¢¢T9�Ó.5ùUš;ÚË¿ÓîþÓöý.hâ» $‰6LS/mÀrìGÐñÓNŠÜÄ©§X [t­=Ä­¾iŸ¬�ôì;: ÈñÌ6²xRòk˜bw‰A‰�b@ù} éÅtTŒªÃ w†qRèš5÷‰4‰_EŠ%»·º–X¦„f<¼“øÖoŠ-�ÿ‹-í,lZI"·´^D2„�rCŒÊ6ò@ÃÏcÚ½¡‰¦Iš42 !¨Ü ã ÙÀü¨X£ID�äÁv lp2{ÒÏ|)o©Z&·%®Ÿ ¹”ýš2"Š(Ñã,lHN~lœ qÔÔ~°’Úk{e»yᶆö]Œ9ˆ™ `gý­¬qê­zõv¶»þÏm[Î_bÝÉ<ã¯$ŸÄÐ3'Á·±]ø^Á# ›kxa|ô-å#qÿ}Ö·ê½­¥µ”>M¥¼PE’vD�W'©À©é´RQ@ E%†-¤¢€ (Í%!‹IFi(Í%”ÄQI@‚’ŠJ`!¤¢’˜…¤¤Í%.kWÃßò“þ¹æ+"µü;ÿ! ?ë‘þb‡°#¦¢Š*J (¢€<ßâ“í›KÿvOæµÎKƒo§[ŠT¯qœ±VlàqǿҽCÄž³ñ,¥Ä’E$$˜ä�ê=Gò®kþU—ýî?ï…¯¢Áãp‘ÃÂ�g¬|½Ìð1x•Ùý¥€Sö‰ënÌäþÎÆ¸û6´õGqú”ÿtSŠ«YA*r2:^”Wȳê�…CPih¢€ `Š5M‹$œÆIÉ?�>ŠŠâÚ «g¶¸‚9 uÚñH�•‡¡‚(¶¶·³·K{X#‚Hâ@ª£ØKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2hb¹‚H'‰%†E*ñº†V¨ õú( ˜°Æ’<‰+É�ìØàd÷§Ñ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@S·ÿ�ÙçW*�¿ü~Ëøÿ:ñ�6ésã«$$îûx¿ï%¢§øÅ¹YÆá’zcžµÏêÞ {›øì´ëèlç™ÝaXí 1(0Í»$“ $äýÜcšÜð|7ÖV÷6wVÛÄ<,ñÀƒW#q�Û�N˜æ€:z)(¤0Í”Pš)( ’ŠJb’ŠJ†ŠCL¤&‚i)ˆ)(¤ µü9ÿ!?ë‘þb±ë_ßò“þ¹æ({:vû‡éUªË}ÃôªÕ%Q@ú®¯“4ªÎÒµWÛ­dÿÂgmÿ>²ÿßB©øåöÉcôý–¹O5?Ú¯o€¥RŠœ–¬ð1¹…jUå;%þGsŒ¬ÚdI –4c‚ä‚Þº5eu ¬HÈ ä^Cæ)q“Æ{×Eáÿ�9Å­Ì�­ àç&3þÔ±YbQ梵ì<jÜù+õêw´QÔdQ^)ïÈæŠRâ9Ìm±Â°;[®¡ä~tK,pDÒË"Ç Ìîpz“@¢��IuÍ6)c¸…&†D’)2:0*Àò#¨ ÑL’XâÛæH©¹‚®ãŒ“Ðzh¤’HÒDgˆ…‘U�(HéÁñ ÑL’h¡ e‘3RÌXð÷4æeE,ìGRN-RPpX© ¢˜%ŒÊb)�(b€òÎ=8?•,q•:¦öÚ»Ž7Aï@¢ ¼¾´Ó­šæúê h€ež@Š éÉâ³£ñg‡&•"‹ÄSÈìQo#%‰èÏ&€6(¦K,pDòË"ÇÌîp¤žÔ©"H GVà•9Áô QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE4?pýj8¡d¹‘ÏCÓñ©!û‡ëRP‰ü]hׯvm!ÆÛ†ǘwÉ…>ƒ `úÑU~3½¡ñ�¤7:±Œ«‘�2OëEtÁû¨æš\ÌïóFi3Edl.ii´´†:ŠÇŠêâÓ]6Hnb¸ 4gøàðOÝ={sÖµóHÍ-qšÜ+©Þ]Ë, <O¢•µ!�ò:¡V;•s´ãº ¦ÞZË 3Ï-£µû9”c|nÈFFÖ\íÍ!�•^õnÂálÝRäÄÂn�ñò“íœWh—RÚÜY%î¯m®$"aÜÛ’GBäaÁB~RÆ‘@Æis\?Ÿ¬kš\šÍ™»Hgž5[H¥Ù'ÙÓ!ög€å³Ï Ôw÷É&•¦Çew¬N§äÍ ˜Çr¿»rc'*}'ñÁ¶ ¾}¼—Ÿþ=‚pA㟛#·BiˆÝ¢¹;=RîÂßNŠ-<ÜÞjÞuÙ 0�aʰ ð€ÿ€ô«¾-†XÒ[‹co ZKq½Ÿ?4LVDéÛƒžùé@%r²ø¶î(çvÑX‹[X®®qr?v® #‘É?‘éÞøJ…¸½mFÅíE½²Ý 2FI§²1Œž½hÑRæôïE~.WìÞdÐ"IåÙL·;•›oQŽGqéÏ5¯6¡äµØû%Ûýš1&R<ù¹Ï ÏÌxéî)�lÒR+oElÈÎ`�­Ä•�yq¨_^I—2Ä-9’FPVI:ˆ½†>ñŒŒw«ö©¨Z,謇%^6ûѸà©÷€,Ödžÿä#'ýr?ÌV5lxkþBR×üÅ Ô7Ü?J­V[î¥V©((¢Šáþ >Ùtÿ£ÿìµÍÜÛ<}•ÐpMÈrWåÚØ­ß‰ ¶m;ýÙ?öZ¢ ±>Ò/u ˆ¶ˆMˆTüó6óò�AÇ&¾£.L-'Ý¿ÔùŒd9ñUWd¿CÌ“Ð~•gW·:v¡%®ýá�Ø9P­XþÑÓõüZÜÇŒëòÚʃdoz¯âÓåø–é ù€Œûák²“ª Õ�žŸwSŽtâ©9§}V¿C×#ÿTŸîŠÎ×loï´ÙMÔ§±»UcĆlp2ž3Ž˜>õ¡ú¤ÿtUMR-NxR=2ê WfÄ’Ë�ªÿ²2~¼}kãçÙ-ŽHµ–ûW„i>"Ö{°nupâܘ ¯–�+ û—áú Ô´iãhaÒç›Ë¶O·JíæAåÅm± s°œî}¨.uÓ¤Ö/l|A¬5°†âYw^êòǽŒ…áòâ ªƒoÍ�’8õ©,çy4-Zuº{»w’ÒÉÑïöÙ÷LF�ݘ�É Hp:äê5�IJ?µ4ÈíÖæ9ã`�¸òä Ÿ;•ð3ÏJ’ûJ×5*[[ËÝ:W3ÛɆÝá$Ê휻ç!xéÏèįØ5 v8®ôm&a=õÕ£4‰w…ˆKµ¾ÒìQÛ÷K�9äúÉÔÖâ}3DK=Úí¢Ð-Y¥�Y©V+€Iž7f8~µé³øRÊ{»ekÅ’YáŽ{é„ ,›·6̲®w¿EîkOÜ5¥’´‰,¶v–° 2²4HàçoO˜¡ŒÁðÞºóøºËìÚ¢æuÿÙá!@� ¹(˜UÊ…ÛàÿpEK¬j7Wz´­­_èP\[‘ö[t×L düÄyGt�²xÆF0Nz]?ÂúÍ®¯§ßIªZì´†+f‚(Y|ÈÑ\ ±c“ûÂqŒd˜«�hþ µº¿{MWO† ‹¦�#’Ååa�:°•}:cñ  =F÷V¼ð­•ååÁ�’`Áô<âìyl¸>[!PäüÀ�²rV“Í,Ú”pGâhâãiž+[Ö01‚0ÀŸ‚­“‚$8¶z/ü"ÓMá;=ñí®;¤š|¡òäQ?˜ÃiÏQÆ b·ÃˆãŽ?³éúBÊS&Í¥�¼:á9!0½½3ŠlœœEOà[W›Q»ÕcŸRò¥�#¸~R‡¸^lH×%>îüòxçÕßxJ}j+²’Gu-Â4Q‹ÙŽÍY6–�HgÏ9<óŒŠÕ>U½ºžÚöæÚ;¸J\E 3í %SŒ«€:ޏé@Þ.ñàÒµfOZ¾—ad’MXû<ð°FB”È$r  ç4ÌyZæ³eh!{‹ˆìn¯m§1êhóyrlŒ–A’p§Û>•©ä͇‡m­LÞMÎÛ§¹ip€~bI$‰ `’NyëWφmÒÖ{Këû1²–‚|76æ-�AbI;°'š“NÑN½f‡lv±ZGiiœ˜ÔXœŽ¤•õû¢€3lc¸³ñ„vVú�åäKfò_ý¢]ád,¾Q¢Ÿ*€0:t©|(g[¯[Íyst ÔŠF×ne_&&ÀìIàzÓ´� ÿcO$�뚬ÂWy%IŒ$Hì1¹ˆŒ1#ŒsØœTú/‡?±onîWVÔ.ÍÓy’¥É‹i|(ßò¢œá@ë�j­!žˆ–ÉöË–·ŸMžF·i?t¬¯/¯'“ž¦°tÿC«øöÊHu«°ËÄÙ¥ÊüÅJmwP~óûAþ÷5ÓMá¯;ÄQk'XÔVX�E…L^XBT²sì£<çЊ».‘k.«i¨•+5ªHˆ¤>Ü“Ær6 ~4ÅxçÅ7èriÂò-Tk7º˜}©|Ä‘ÆÜnfaŽ:{‘LñgŒm¤û=®Ÿ¯[[­»[O<‰vªÓ‘0‹ÎJì,ìGlv&»+�ÚïÃòè÷\M°4<Žb#;ˆëÏ¥K¨è¶zžŸö9”¬{ã}Èl£«£ÕF}¨;]M[VÒ.íôØÌY–ÜÁqç–g‹r3�ËÊq¹{æ°æd…,Šë1Ak|ÑêKÔ×s+ƒGµÆdòÎå<ÏP9®ºãF[ƒ9ûuüFYEò§Ú!*»pƒ¦RA'5^? Å £E¡ ÒLgšé%lÎFß›+´Œ1Ž01Šo„µ �KAÜ™Hî'€4£Ë¬ŠX{gß5s]‘áðö§,NÉ"ZJÊêpT„8 ö5bÂÆ 6Æ+;e+ C –$žä’y$œ’{“Kyj—Ö7’–ÏDÅz€ÃüЛ\ëÚ§ü#ZFž/f…¥Ô+}2¹Üñ‰bEÜsœ¸š69ê7u®š?ýžëP·ŠÚ{‹·ÕMœ½ÆC°…$$>D “Žz¹Åh\x[L¸†E1ºI/Ù„“#|î pñƒ‘Ž£ž9†_ XÈn\Kr“Myö噆]‚<¡ÇM«Œç&€"—_Ô#Õ,´Ïìpo.-Þw_µ ‘ª:©Ëmä|ÀŽ3Ð`uÚø°ÜÉg;iÏ™{9·¶ºóA,ß6 &>Um§'¨È­ m}FÞý®®§¹†ÞKpó8;•Ý\“€9ÊŒcÕ^ß–÷QH²Ý4JÓÁhÒ~êvYF3üM€I<@­¼f’i—ú…ÅŸ•¨¹YÃO¸œ*MÒ[Êf\7d@$dc=ElA ÛÛÇ V4 ë€1@QEQEÎÀ'�Ç—�}¶åá“NIDNùHØÈÃ*½T:bOkâé,`Ô.ï-ã³ßzn$ß¶bËåã²’¡ÉQ�Œr*ØðÓ zM_ûkSó�L~VaØ$…»ÎUPÀãƒó¹íI>ƒes4²NA- ´d'å( 9àg9=sZ””À¥a`ÖÃ_]ÝnÀhpÛ@ôÀ½ù«f”ÓM”RSƒ}á;+ûÙn¥“!Éd¶oÕ¢$þ$Ö–›§Å¥Ù-¬'(¤œùh�}‘T~•lšC@­� ÈJOú☬c[ÿ�”ŸõÄÿ1Mìê›î¥V«$dëQù?í~•QRù?í~”y?í~”çß,.î#°¸·‚Ic‹z¾Å,W8Æ@íÁ®Ã~@Î|ƒÊ<~•ïþOû_¥Oû_¥{LÞXzJ—%íæy8¬ª5꺜ֹóÿ‘}ÿ>Sß“þ$V�íÂE•ÃHç÷d~gÒ½óÉÿkô£Éÿkô®—ŸË¥5÷˜,Ž=gø"íE_@:¥òÚý(òÚý+ç�tŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ‡î­IMEØ1œÓ¨Àþ7dxÊØŽúzí¤”Rün\øÆÐ祂èÉ(­ÆOs¿¢’–‘bÒæ›K@Ì[Q�Ltïøõ;¾Ú?埛ÛgûÞíëÍnSBŒ(dœÜÓ³H'P¸Kë­E¾Í%Ïúdq˜žÒwŠH¢©d�ÇúÂÜ`ô¥ÓnÊëO&ÚKlÞI‰-'H¢ŠQ†xЬ ÆZèßB±yd�¸ŒŒ]– Ù¢RÇ’v«�’yQÁò«j ;Yd–ÞÒd“ï¼q…-õ sR¤1G,’¤H²K�1Õ@/��“߀9; \ø[ÃÖå¯Y$ŸÜ/ïdÏÕ€SþõPŸP¹ÔÛJ»¸ÔoÖ1`A‹k²ŒŸ½»'µ¯£ÝÏy§$—1‡¤ÜÌÓO¥ÙK+œ³ÉnŒÍõ$U›k[{8D6¶ñA9 Qø ”Öφä%'ýq?ÌV)­Ÿ ÈJOúâšÓ{ nu”QEAaEP%ãkë‹e´†)Z5“qm§Æ1üë�ûm×ü÷›þû5Ñ|Cm²éÿîÉÿ²×\€ �€zy¯¦Ë駇‹·Ìù\ÆrúÌ•û~HÑ�T½‚xåŠêU‘#,Oæ+Ñt-vfÛ´w(?yQí^P$ƒyƒ#Ö§‡P¸±ºIà�G2‚ÿ8ªÅ`c^6Z>„àñÓÃÏ]b÷=šŠjȬ{ŒÓg¸†ÖšâTŠ%ûÏ#Qõ&¾\úÂJ+Ç[[�OT´¸1B-oÖ[RФ˜ç¿Ìx…Uñ‰dÑ¢ÔÑm‡�o¦É}lîr“lÎå `Œ�ù í@™e«íZîÎ(3¢GæO»�5†L`{.ÒOûB§Õµ(´}"óR�]áµ…¦uŒÄ(ÉÆH犹E67F®3†ŒÓ¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÇÕ¼Eo£»ý¢Òõ ‰“ÜGc…NybHÏNväŽô±EbÜxžÆÛQkFIÙHášå¡’LlV9ÎNåè†HÍ8xŽØj‘XËk{šV‚‰¡Û²($¨ÉÏEb pMlQY#ÄV-âƒáäóõmÍò¨Ø€IÏÞù”ãõlj`¶¹¸ƒìÓÌép¶°Ç óËåùŒ *œ’N:úPÝ‹sâ�6×ÃO®»HmP±S÷…Ãm1…þþàWµbãXHôû¨¡i ì‘$Q“´áðI=~êîl³@TV-§‰­no>Í%­í«¼-SœžA튇Lñ-–«t�CÄbhÚki%@©s� ¡Ï#æ^¸8 ã³Ecj^&²Ó.å·–+™|ˆ„÷RCä¶Œç ç=>Vé“€N1W/µH4ÿ±ù�Ü]Ü-¼f0ÜÀ�O=8  ´W?sâë(,nobµ»¹‚¤´F…SÈÌ–` pIÀÎqœUÝ+Z‹T–âßì×6—vÛLÖ÷*¡Ô6vŸ”• àô'¡  :(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<ãvßøLms÷¿³Ó÷òJ)>7ÿÈçkÿ`ôÿÑ’QV¶!­Nþ–›K@Å¥¦ÒÐ2 kè.¤ž(Øù�>ɆOc�B9½Y¬˜íeºÖÿ´$ŒÛ¥º´1�÷æ©oöº?Õ¤>«®ÉapðÁl“ÕFy@.HEPˆìÌpx�+]’þáažÙ!2+´l’;P€êÁÑXdpEs—WÅïoÄ·šu¤ÂüÈ�>¢°Ê»Åù' »³Kg}²öÄGy¦ÝÌo¼Ç0j+4­¼lo‘bA��ÇÓni íîî’ÎÊ{©†6‘‚õ œ~U“sâ›+xìS…¶SP"3Œä`ã''ÕÍi] QŽ4gw¶‘UTd’Tà\÷‡ô¹ô)m xî.m5+uûA‘K§ ÎïE+òóШèj÷Ä–v/8dšU‚(å‘â¨ÛTd‘ÉëôJ»}¨Ã§›Q*»}¦u·M€3góÓŠã—Iš×ÀZ„Ikt÷/s÷ 3HÈ’ª¦2@Eö­]FìêçL6ÖwÊ Ô¡y<ëW� †çæ�ÜöȤ±â­=¬5K°&+¦ÊñÏÑ¿*q�3‚9ìkRþò=?O¹½”3GoJáI 2qžüWªèº€Ðu+»;Išâ[‹¨e€!Ý,-+`;à�G±jêuû]Jm#WUž9 ’ÎUŠÚ;cæn(@·óÛoz±§ëÑ_]%«Ú]ÚM$FhÖáTyˆ1’ ±dqךvŸâ Gíæ&t[)%i�Ÿ˜ò¼}�rp­Í”©}¥YjòK‹Ç0¼ŽF%°6*où¾ÿ\q�ÏjsxkT²Aaç­Äwºt–Lñ[²ÝAdg;›9%Æxë@-¿ˆà¹G•loÒJ“<I ðsÆGMØÍ:?ZLÖËsÈÓZ‹¶ £÷1‘�_ž èÏåÍS]N{Í.[¤_Ã?Ù]dß&0?6Onk+AÒ.´H¬“m̰êv‹Ñu%­æ ò“ÆBàíöÚ(¤å±Ó´ëГywïD02¥ÆFîªìç€:kkïµ]ÞB±á-�có3÷˜¨b1í‘úúUªÆÒ¬]ô‹9&–hgy~Ù(�±¹˜–(Þ«óc­¾�¾9—헃͘M‘/)Œ|«Ç ÇOsLEÚCA¤  —Ú•¦�å}ªašÛS ž}N:Rxd×)yus¯|ÒéÂñd_% GsµbÇ+òÀÊrrIç�J×ðù¸þÈ�n7nVe@Êá‚òƒ½U‰Œàf˜uµá�ù Éÿ\OóZÄ­¿ ÿÈNOúâšÐöÜë(¢Š‚Š( >ø”ûfÓÝ“ÿe¬+˜åºÑ´(`�¤–A0U^¿~µ¾)>Ù´¿÷dþk\àñ4±h6úu°X¥@ê÷ËfÎ{ý+ê°Tæð”œõª>_(,UU7Ñ~ŒŸQÑä±·Æñ]D§dÍ "îŸñ£Å2cÄùcÿвtíZãM¸ób•Xm’'åd^àŠ]sU]SUšñËI6â=Û¶á@ëøWt(ÔUW6©'¯ÝÐâœéºO—FÚÓïê{´_êSýÑY!°¹ÕÂÒ0‚ÏíqÍxìØ"8Îðï–UÛ5¯ú”ÿtS™UÔ«TŒGWÄ=Ï´[;X>®ž4†Ñ”Ý èå´p~ìÉo !ÏûÀV'ŽlÓWÓ5†´ð\ZÙ¼úŒÂòo%G‘¦ýŒO°0¹évZ}–›oö{ K{XsŸ.Â.}p*i¡Šâ†h’H¤]AV¨ õ†q·‡Ã—S[^GªÜjÛ¼°Kö™¦[Ø€Ïʌ僀F<ŽÞ,°šþ?5Þ�¨^\\Ù�ì£,â%ò¾eã„}û‰XzW¥€ÀP�ëzmì—:·�§ÞÜßKcEžm¶Ì#ï#"L±'uéZÍ“ÅË®i×wò3@tù቞8€@qÄg~âIÆAž•ÚQ@&‰aq‹~Õ-…Òi2Ë9Ó¢d8µ�ã{²ã($Õ'¦Hã~+»¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+�ñަóÜG 6Ÿ©µ„êöêÞÆY”ÇŸõJQOÌÝ ì3܊쨠êÎõ¿µôȬ.[ûZþ ¸'òˆD‹l!÷ŸáeòÛå<ž1í4º«êÞ1†;�;T‚×O˜­£6�1I§`SÍf ´F¡˜ žrO í¨ <±Ñµ­ÅVWw·v—±Ú^Mwv–r)%š&mÌd#qÀÇ@¦/Çkwei kZO3,³\^Å™$C:±ÈQËmb·Ò»¡Šæ ž$–«ÆêX ƒÔSèÎeðÆ»q£Éy¶ðü××IaqjÒ°i�Ê‘µÆ#`uÁfë[:,wRÝhö×ÅM/OÊ\I )Á$‚dz·lâºÚbÃHò$h¯&7°P c�“Þ€8�?VmcÄ…Þ�««Å¶ö6’XK(~gfw>ÅàÎI«>°Š´�.ãLÒ–ÈÅ^Aü뜵Ôu ø~í,´�JQszÂÀÉi$²¢2®ég 6ìnùˆ{�B¢€2<1¼µ‚ÕnÄq‚¤ÝÀÐÈ휳2°I=;ÔúôrMáÝN(‘žG´•Ud±(pîkBŠóÏ ê‘ÙmÎÖVóZÍgc,Yáiò£‘·cœúHÞ†®\iׯãSy¬®åÓ[_3]A6ëˆ>ÌŠ Ž®¢@2s´õÆ+Ш "-ÒÿÄúNÝ*æ&-:à¬SFèŠþteCÓøˆSéÐcŠZf�}þš~ÁzšÜW®ú�ó#šŸ�ç‡S•ÚƒîñÀÅz%æ¶Ún¥™¬Ùé6WbG¶È¼š&·¹‘· ѳ‰®ìH¸ãëQjú/Ûto&•£]æ>ž¢;I`e2]c¹#<ä e±óuÆkÓè .ÓÃÚv•ñ ®cÐÑ"’Ê´ž\¤N¦@à°!ØPsŒŽ;Tz¦�uyãánÖÒ6‘y \ÜJäßKÂzdïˆ�÷+¸¢€<ÏMÓ5é<-y%ݵ×ÚMí´7RIí`£íõ݉Ž¡°:Óî4›™í®#°Óïm´yµ;"ÛcÆè¢Aç8_½cŸu�|פÑ@oâMûnÑ´[»¤m?ËÑÅ´LñÂv0`0p�¸ä“Œ‚8Åwúr²i–ˆêU–‚ÑVh Š( Š( 5¯>ÓãÛ¤ZšE%‡Ø…ÃXL#óŽOÎWn0r8>µ‡ôcAŠm6ê#¡iÒErLxH,_ßkŽ:w®æŠá|Odú€¸’ nÞûS°XLqF¢2*ÌÄ,¦ãœ88ÉéW¼W¢M}£èºd/r/`Ye·ÎôŒ+l�»éžÙ®²Šó}OO¼³ð´Þ{;ùmôëûV·šÖ)ž×ÎVùJ ï@sòƒÞ¶¼)hðk:”Ö�ê)¦OD>¥¿Îy�`Ø2~óh]¿{Œç뮢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<ã`Ï�m?ìŸú2J)ß³ÿ ¥¯g§þŒ’Š´CÜ¥Í š)( QYðj-ý£%�ÜB‰-•™=�÷‡qøô«ô€uÍj×÷Ï%½•ÃÄ#x¡UŒ¢™%|± Ì�€©ƒÂçš]"þù/ã·½¸yD�,,²lc©‚²¢d2y\ñHgKEW¼�­ln.&™â��c^®@ι®rß]ÕæÑ%Ôâ:eÔq¢ÊÑÛ—Þ ]'ïmÎŽœÐWšZäïØþ¸1Ͻ.¡â{x/m,¬æI§{Ô·›1± 0»‡¦xô¦#¡¤¬Æñ–·RÛ°e�vàˆÊŒ° O*tÕ,¤kUIèŒÐà™·NÌ:ã­KöKoµ›¯"?´ÍÚ7cëøÔÕ�kâ;h,-çÔîvIx$žL[¾PŽNҧׯ¥_‡ZÓ®Cn•‚À. ÁË9ù³Žz§z¼i’Åñ²ÿßB½<5\ti¥E¾_—êy˜˜à]Gí­Íóý ÿøUV_ô¸ÿ¾¥¶ø[¦Åp’M}q4jrcÀ]ÞÄúUØüefÓ"I±£$¾õÑ«+¨e`ÊFA ŠªØÜ}=*I«ú ŽWZqNÞ¥¾”UZ+Ê=BÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEU¢€-QUh  TUZ(ÕVеEGÜ?Z’€<#ãHÏŒ­ëÁ?ô9(£ãAÿŠÎÔg¥‚dÛI(ªD=ÎÞŠJ)”--%€§ ƒ}½ïn¤Ì X@X“Øx÷?‡J½IErMì’ßGsm¨ÜE=ÓͶ²xˆè§|Ù séÅ-®•{ÖQÛ[j6ñCr³m™,’ :9Ä?6J–Ï5×ÑH\,Ío"ÛÈ‘ÌT„w]ÀÄŒŒÖ.�¤^®ºú¥êÙBæ%˜oßAÜù¦8ë×­oQ@Ì +RÒü7iajÖ&hKy‰"±ŽE%Ž29G85F? HÐ[Çr–Mö�Û%µU&O,®ÔsÉ�Zë3K@Žb \ÚÙ-µ¬°Gö+³q§±áH9I§Ìà “ŒzTÏáû�TÞͬI Éqjm#Kl•‰ É9lIÁè>讆ŠÁM3V½º²:¬Ö† 9«öpÛ¦�¶~è'<ÕË=:X5�ZîFCá‹`Rr¦Óž+JŠå´{k†þȰš=1dó�…gOÝǃÐåK7åMOj‘-�’Ëflm/ÅÒ¹,%eÞ[cù�9çÚººJå´ï Ic¨Gæ絆wš)êmÀ’Ä~ï;27c=ù㚀x~÷N´¾Eq/š¢ÆËʘ y %¸ãºú ®Â’€2ßKq®X^Eå­½­´�ìÉÏÌSã¦ÖøNðéVÉq r¢ÉovÀœ=»¾æ Ç^3ަ»i(›ÔÙtÿ£ÿìµÍÜÛ<}•ÐpMÈrWåÚØ¯¨À%õh_­ÿSå3Þ&mt·ä†yŠ\dñžõÑxÄcNqks kBx9ÉŒÿ‡µr¾džƒô«:½¹Óµ -wï†Àʃýk¦µU^Î}¯Ôæ£V¥{Xt={¨È¢›ú¤ÿtVf¿©Ë¥éñµ²£ÝÜ\Eo8$wðè»›è |qöˆÓY#vuGVd8`JœgÓ‚)%š8!y¦‘#‰gw`@êI=q¿ÚSh÷^)Ô#Dx`Õ!k�ÀäCöxC°÷îúYŸoæÓíu{¯ìëÑmy`öFExZ9˜‚QÀó7� ¾~^œôéƒÐÑ\W‡µ+ÍBkÝr=úC=¸Ko2XT*Æ8‹BC/’@ÇCŒQ ™¡Ô´«û¡ÁÛqy¨¬ÛVÞéØyQGž»@OOáÈù¨µ¢¸OÇww¦iÚšE�Æ¢×j±5’]‡m¥·¦éc¥c'“Ðv¬�;L¶Žê ¤Òl,ï-5[xH‹MKy°Ü~e–@A ½Åz�•ªêòXÝÚXÚZ}ªúè;GIå¨DÆæfÁÀù”pI®{Añ âiÐÛ}šKÍRîöø¤2Ï�G3¹ðp*£öÇÛQ\Úx³íQÚÃc§¼ºŒï4fÚIBŒ-¶BσÀ$€s‘ï…¿ñ5Æ�yme6–~×yý‘l‰$΂ü»A žr3Ž˜ ŽŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š+—ñ„sÛØI}m¨ÞG|BÅco›Q§'åGßÎyÝ�'Ž´ÔQ\=íõóI¬j¢öxßLÔ!¶ŠÝˆ™1pËÑ‹y�‚yb¯^¬ö(ÓßS»šk‰d–ê)eÌil¹Ú0 PŒžäó@Uçº7ŠâÖ<o,zÔÊâÖâ;{$¸SÊ<{Y”¾ß9ò}jîùõ N.'‚ VúmÏ”s •UV€Ì¥ò9Á>´ÚÑ^k©x²H¼;&�úÄvº�–î#y,ˈa‘Ð2“ŒÈØUç;�jè"¼�YÓ¼7m Ê\-À[™¤Y7îX@$ç¹ó|°ꨮN®íaŒûsYÞ/Ôomµ[³ ÅêÇogE%«¬Å›/pÞB6žø Ü ‚@;Ê+*ðÝ^ZßFÐÜÇaZ,çQ%ÈÚ…Î6dü½G®EršeåíñµÒf½½�$Ô'I#yH¹†$ˆ2ÄòrI ¸òàdõ @¢±|/w=Þ“"ÜÈÒÉmwqkæ·WXådR}ð}êÖ»#ÃáíNX�’D´••Ôà©pAìhBŠòû�{Tÿ„kHÓÅìÃP´º…o¦W;ž1,H»Žs—FÇ=FîµÓGâ?³Ýjñ[Oqvú©³‚¸Èv¤„‚GÈ�rqÏC×8 ªŠçå×õõK-3ûË‹w�×íCdjŽªrÛy0#ŒôDv¾,72YÎÚsǦ^Îmí®¼ÐK7Í‚É�•[iÁÉê2h¤¢¹ko¤šeþ¡qgåEjîVpÓî' �Æ$Œ ‘ÏZ£â_ê�xY¶ûØuHl¾Ñ[�Ëå’T²°_¼¤tÇqÍvôW¡ÞkPx¦MKH–ÂÞÊ=ûÎñ–2åƒ2n|‘·ŒuÅgë×zšÝkz–¡qõåÌY8rZ$h‹0_A›y:qó{РQ\M�Š„ÓÞkf¸‚Hì­-mQ°¦i~ýêdö íWn<_%œSÅs¥°Ô ¸·�í£œ0a3mFW dg#�9ë@MÆøƒÄ:‘Ñu«km;eÅ¥ƒ½ÔÉw�³³FÅve˜øq‘ƒšêtægÓ-˜³4(I'$œ ³EPEPEsÖþ|^>»„ÝÜÉšzL!y2ˆÞc”t­ŸˆµÐø‚y`m'Ê•ãó5‘ö1”†È>£Ú�'‡­_DŸJógXf‘¥.o¾þ1×Û¥A äý§R¾º0Ü%™8e�•G<ýrWÖ¡i¥kÑÍw6&–èÙM¼†�’B `õ(À½+¨×µ‹UÒu{kkøÖþ9_ËŽ\H„!9Àäv¥»ð¶Ÿ}¤\i³4Æ)®ãxa½˜±ÚqÇR:t5§}g¡§ÜYÊYc¸‰¢b‡8÷æ€9Mú[=VpÚ•µ¬–M# Bo7ÍuÁ%æÆq##¯N*–�â©RÏWœÞ‹ÉšÑµ£2oòNXý‚�œ{šèdð�´ðî¯ïî?rУI"ƒ6@ä d‚qZzM­åŬÒfWEEÆÖG]¬¬1Èéù ÎM:{=.kÖÕo¦œÚ»>ùrŒÅs�¸ùpzmÅcøT»ÕÕâk¨ ®œ¯LÅMÁ+µ¦cŸ˜nõÏq[ðxvÆ/oÞE/>R5# s�ÓvqR®‡jŸÙ…U}=<¸œ—M»J·ƒ€{r;P:^\Ÿ øb_´JeškQ+ï;¤~mǾ{æ³m&½žêàÚK«I|º¤‰–i °ˆJAwÉ€¹àsœWGká»KKˆgºxmؽ½´’f(IÈÊŒg€N2N3Å^°°‹NŠhága,ÒNÛÈ?3±cŒ™4†·’¥†»¨©&åîZÖž…O—ÿ¾É?ð*£­êW~Ô,4»wòtè»ld` ü£©À#'#¯zÖ]àj‡æ�ìlûn2w(FÜc¦ü6iu Zj-wºæòîÀóâ†@È AœìqÎh®¡ã+KN[B±2@ê“3\*¾[q,FzwëVbñ• ‡ì¸º’õí^3îlÉ/œr6àôþ!V_F�ûAîẺ·i4±Âà$„`d‚8qŒâ¢¸ÐÑu ½RшÔ%�£ŒHß»V Ø üª ôÄE¦Üü׿¥·žTf5ݲ5ù�¢ü¤çýª¼úŽØæo±ÝŸ*a\¾qó/<¯=}�Mej–60ZG÷!�c_| TÔÀ)¦–’�×—÷·rA¥Ê± ^d‘”’N¢/aޤr21Þ¯ØÞ¥ý¢ÎŠPò¯}äaÁSî eÞøVÊúò[™$ÃÈrGÙm›õh‰?‰5£§iñi–km ÊN|´N¾Èª?J·[~ÿ�¤¿õÄÿèKX†¶ü-ÿ!Ië‰ÿЖ‡°-ε¾áúUj²ßpý*µAaEPñ!¶Í§»'þËTD'Ã:Eî¡1Ñ ± ŸžfÞ~Qè8äÖ�Ä‹ »ˆì.-à’XâÞ¯±KÎ1�;pk�0ß�³Ÿ ò�¥}fš©„§iZÍþ¿æ|¾:Nž*£q½Òý?Èé?´tý·1Åc:ü¶² ÂÙÛÞ«ø´ù~%ºB~`#þøZÂò/¿çÊoûò¤ŠÃS½¸H£²¸ià~ì�ÌúWthBœùÔ´Ié÷‘Å*³©W[Zýÿæ{¤_ê“ýÑPÜÙAq,¼)$öÅžàb¥sù?�j*ú)ÕðÏsíÆ“£\yZÉÖ#¶-ªMºH vtTò’=»ˆRržƒ­UÕ|$×öZš}«Ì–['³°IÚ£&ßrIîÇœq랢ŠC2môO±ê²ÞZÝI W þ‘l(ò` ÏÝlq׌Öd>·�NžÂ]cU¸¶¸.Ó$’GûÂç,I Îk©¢€0'ðÀ½Ót»;ÍFêC§Í扣‘¢’@ÐÊAÉœ{ÕwðÌ–÷¶É`ìfê;»™înåšvtnÎF�¼1Ž•ÓÑ@×>‚áã›í×ÉsÒIÂÊ Æ$?2 ‚6p8#ŒJ‚/XÁiP]^Å5¼ÓMÒÈ ªebÎ2Aô ôÆk ¢€0Ï…lÚÖ;inm¦¶i;¨¤néd$�Cn<œ‚2 ¤¹ð¥�ã..o$¸¢C;H ÀTî܇1lNs€:q[´P8g>ôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEƒªx\jzÌ:§öÆ¥k41˜âH"‰ž¤FÙëŽ+zŠÅ—Ãs^‹™&¹`Ï“C¼ç’¦£°ÑÍ�ûJ$Lv‘ÚÛ÷•W%˜ñŒ’Wþù­EsZoƒ“M3…Öõy¢¸.Ó¤²F<ÆpAbê�ò;Æ+GOС°½{׺º»º1ùK-ˆ)sµpÆpIêp2x­J(o yÞ"‹YþØÔ–X�E…L^XBT²sì£<çЊ-ü-emw¢âíá·•¦·µyŠmÀ•Ïñ6$ ðnQ@þ¡áUÔllíYÕR;VW ²FÍ#«VbèI �éïN»ð­µæÿ6úüyð,{$UûZ€GÏ…à�NJí­ê(2m9DÁoo¡ó<©ÊˆJ®ÐtÁAÈ&ª/„ì–ÛjÜ]‹¿´}«íÞ`ó¼Ý»7g~ïËŒc«zŠ«§iðiv1Ú[¦NX噉%˜žä’I÷4ûËT¾±¸´”°Žxš&+Ô8÷æ§¢€1n<-¦\C"˜Ý$—ìÂI‘¾w8xÁÈÇQÏ�à /…¬d7.%¹I¦¼ûrÌŽÃ.ÁPã¦ÕÆs“[tP]¶‡ ¾£o~×WSÜÃo%¸yœÊî®IÀåF1€j¯oáK {¨¤Ynš%ià´i?u �»,£þ&À$�ž­Ê(þ+ MɽžîôÏÙ‰¸�‘ä  œœŽ´Ù|#gqg ÕÝíÌ·° y.e‘L‹$…\.É'§=ó]œú<'\]Y'ž)ü¡ ˆŒ6J ±PÀƒÐ³t#­6]Î_A®±“ípÛ›u�…I'$c9`9þ#ZtP¯ƒô»M"}2?8Ã-Ñ»_çŽL‚¥Hv¨ÀiÖMón.æ�®¡º’âGS$�€ñ€£OsšÝ¢€0õO Zj“]È×W–âò&é-å ³.² 21ž‡"¶ …míã… +õÀ©( Š( Š(  8ü6cñ k'XÔžV ,bòü½Å‚qì}sîi–67——_Ûz¬ïx›eóZ!“·ha¶0A¦ oÑ@·¾µ¾Duz�öqk4‘ˇ¸ˆ œsÔò0~c‚3W.ô›k¸ìc;ãK)’h–2Ê‚µ¡­k—zbJmuW¹k$�¥ !\±èÇ‚I6)Ø}¦v-w�<¡“f?‡8ÏæÎ)°ÝÁqπČêÎx©!ºúy¬½6Z‡‰/Ý,) ħ¸Ù•êìj�ËÜZG&ŒºŠYEe§,ŒÌŠMËÁŽ[¶G8ç-Ö€;¥ŽxRX�^7PÈêrAÒŸ^±ªÅa¦XØnŒE¥A2‘äþñŠ÷ó|£íçžÜV”ÚΩÓio ŽúîHÔ…Vòãa™L6Í�ÉÏQ@GÚ¡û_ÙwþûËó6àýÜã9úÔ¹®Júîê;}GU´”G,·°ÚBì�‡–’‡+޲ֵíGt±£m”L†"a"mÛ†ó A¼ …."µ³°¸Òš5–- w•�‚ »·u÷ í˜*–b’{TP\Áu›o4sG’7FÁ†GQ‘XmÝñÔâ´Ô.Òê­?í$4J�T1ÔÝóÒ³ ½}7”Ö2Ç Å¨È…QMÆÞ�1‚h²’D‰IQe™Ž¤ÕuÔ¬¤X;¨¤IÜÇÆÛ•›ã#Ž€×%ª^ÎÐê:\÷«{û1ŽçjªÅ#ɾ8Ú6ƒô8ïM,ɧëg“öدí¤Ýmþ«q1…ÛèH�zî 4ÒÒUBh®gRx¯õ㿊þ8­þ[o&ÒgùñŸ42©§>µ¯¤]Ïy§$—12Ÿ.ÌÏ—TîkÝüŸö¿J<Ÿö¿J–Šë<ò/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€‹°c9§QE|ýñ¶îkOØË •+§'ˆ2IŸä?**Žÿò;ÚÛN�ÿFIE>T÷Ay-�D¢Š*‰ŠJZUF2OÖ–«[^Áu$ñÆÇÌ�öHŒ0Ê{zÈ=êÍ3ŸC²y^@nâ.ÅÙa¼š5,y'j°'ž”©¡Ù$©!7r`ê³^M"ärÖb2=+?UÕuss-¾‰c絸++ȪWÌ*¬ª3"0Ù'œq€yÅ�'S¿’å¬õ[F‚áƒI UY#]€ð²>fõä`ú€€Ù##¥T‡KÓíË,mb,¥NÈUr28~•-Ìíonò¬ÎÊ8Ž,no¦H­cC⨦·¼¸:^¡6bC3ºÇ€Pe—‡<þžô«™§ÀŒ�ØÛFŽ›R—ÐàtäñL:6–Bƒ¦Ù�©±G�¼/ ã§µQO[ì‘®,ï-YmÞåd\ÈŠ2v�Äg‘Á#­\}Z]=ŠI‹ö à”/ósèLÐn´h.õ»y$Sû½ñ©d(Û“wŽjÕÅ�¥Û#\ÚÁ3Fr†HÃúg¥P‡Äò]ýžk{«BÑ´±µÌ{ЏÜG9Èà€iluûkòê�]FÂ=Hðe�ûÊçéÁäqÍ-˦ØOQMem$p€"G‰H@:mãð©Úš9Ì1™£R±ÈPn@z€{Vt^ ¶›D¸ÕÒ8K¡ŽEÚå”íÛŽy'г-óEsclaýõÉbË»ýZªäžœó´~4ë}6ÚßN†ÄÆ&† ¸ó@bH9ÜxÆsÎ}jcknLÄÁ3�²’ƒ÷ƒÃzñÇ5ö„_ÚÿÙ»_Íò<ýØvîÛ�®jÕB¶–È o‹~!òøÇËéÇv¤v¡UE´ ,†UXáÎrÃß“Ï^i/®ÒÂÂâî@JÃ9©ÀÎ*H™Þic•—9Ú{Œ÷ –ÆÍ.Úím [–ë0Œ?ð.´‹af‹:¥¤ 'Ïœ`y™ë»Žz÷¦Üj[ßÙÙ²¹’ë~ÂÀÚ2sVXíRpNj‚KI$µ�Ç–bù£ä=WéÀã§�{áÍ>m6{KKkk/9£.ñ@£!\6ÏL~4‹â(eÓ.¯ÒÚuŽÖo*d•v2��ÍŽxç·JØÎFGJ¯…œ6ïo¤ çtk Ù둌�ô›C¼QD�AÂo*$ ¬Ã8ȱÁú�Wé)ˆCHii(„ú.•s3M>™e,¬rÎöêÌ~¤Š³okog†Ö ˆ„‰¯ä*+ÝJÓOò¾Õ0�Ím©Á<úœt¤ð*͹á_ù Kÿ\Oþ„µ‡[žÿ�¤¿õÄÿèKCØç_ETQEq^=m²Ø}ÿe®j$žéXÁm< pJ!l~UÐ|Bm²éÿîÉÿ²Ö— ïl÷ ~,mÄ‚2ß7ÌÄg¢ûWƒ‰WÄÉ[]�÷p0—¯æû -B/œØÜ€9$ÄØþTÈ5ínRâȇ ŠÖ–ó#�—U!ŽB*ÂÔ®’çPžx¢ò£w,«ŒqXMr+§¯Ëô:©?lÚ”tôkå©ìˆw"“Üf²žög E¡fH8ùLûòÎAâ«höö°iš.›å ­Q¯nãi¤VŽXÌ‘¦`ÛÙ†7qÉe95RÓ-¼9¨èÚ„7º˜€]²\ùú„ó!ŒÁ.2¬Ä˜'n¸ ê~4º±ÖÖÉ4 ã!¥º‘Ú<¬•VBeßÞÁÀǧÝý½u[ƒqzÈÂ#l'”:o'ùvüã½-–�%¦ˆºv“£Ëaâõ;ß²”Ž5ó$*æLaÓÊ;qÏÞŽÀ¥Edxb8áðå”Ii=¡DÛ$3ƒ¼8'y$ýâ['wñg=ë^€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÇÕ¼Eo£»ý¢Òõ ‰“ÜGc…NybHÏNväŽõ±\oŒu7žâ=´ýM¬'P×·Vö2̦<ÿªRŠ~fèOažäPÅljìmµ´d�‘$Ž®QŠ$ÆÅcœäî^€�¸dŒÓ‡ˆí†©Œ¶·°‰¥h!¸š±Ë"‚JŒœôV �Ç×7ugzßÚúdV-ý­ÜùD"E¶ûÏð²ùmòžOöš]UõoÃÆ�ªAk§ÌVÑ›N˜¤Ó°)æ³Ú#PÌO9'€tÄV-âƒáäóõmÍò¨Ø€IÏÞù”ãõlj`¶¹¸ƒìÓÌép¶°Ç óËåùŒ *œ’N:úW/c£kZЬ®ïní.-c´¼šîí,äRK4LÛ˜ÈFã�Ž€*L_ŽÖîÊÓ@Ö$´žfYf¸½Š%2H†uc�£–ÚÄ.o¥m7Š,M•¤öñ\ÝItα[Ce,™$ÚFH㸫:¸‚ÆÎám¥2]ÍI ƒc�Çœ�UPÌGû5Ä®…sÖz¥ý¾¦¶ò½ûK‹ºÍŸ:Ë>YÝÑppx8Ï­­_ÜÝé0ê›ÚãM±7‡œK!)Hà°E�wjÔ´ñ5­ÍçÙ^ÒúÚG…§€\@T΋�ÅG-‘¹~Rç¥K¦ëÐêÒÙ5¥å¥ÊF&ÝF¼dãpÁ=Æ0pGq\晬ɪx’mNçGÕã–eƒO¶’ÂXþN™�À@ÎQ@ðç$Õ� ‹o/mmuì§¶ÿH}E[x›~Uc/ól¾@ùzc½k7‰l—Uû Žãhœ[Ÿ/÷"b2#Ýœç‘Î1“ŒçŠK/Ù_^ÇoW(“;Çoq$`GpÉ�ÁsÆò@$f¹ùl/ZI4Qgs¹õµÔÖÏÝy"U˜�ýà¦Þ¹ÁÆ9¤µÑšOiÑZ ^;>î[–Šía‹(ê3€_&LŽXã8 ‹UñÓ5{´Ëëû™ây‚ZþTR ’]×»Š�PñUž›+G=µÙ1@·7Ekg '?ì·ÝÝÐö¬;ûMM&Ö#á=I¶Ú³g,ñOÉ�ÄÆÀ€wG=k/VÒug·Û}¡6¨ºe¼0If…⺕A.“‘ÁRýwàm'$Ð{¬êðèš[ßË Ó¨xãX  ]ÙÝQ@É«¦ª?‰6pÍs¤ê0\O9‚ 7X̲°RÙ\®0ä°û§Úª^Ãa$z€¼ðýÕÏ™4ód[ÖVtË*�ÀÎGC\ïöeÈ€a¨Ûè_Úm=¼VѰ¹µA QGΊdÞppØ#ŠïtÝF VÁ/-·ylYJºá••в‘؆¥I{u……Å䡌pDÒ°QÉ 8÷â²|!oukáÈ`»‰ãd’Qš‘ãÞÅ^Aýö-îOCWuèä›ÃºœQ#<�i*ª(ÉbPàÜÐt¾3Ò¡Ð4½dùÆßR–( @£~ù#8ãœóØõ­¸. ï:˜&�Ê“fd\àËê9Æ}A¯7¼ðΩ–Ñlíeo5¬ÖqF2Á垟*9v9Ϥ�èjåÆ�|n57šÊî]5µó5Ô£n¸ƒìÈ ¨êê$ g;O\b€= Šâ"Ñ­/üO¤íÒ®aÒbÓ® Å4nˆ¯çFT0=?ˆ…>�8¥¦i×Ñ_é§ì©­Åzï¨ß0"9¡ùøÞxu9]¨>ï P¢UMSR·Ò4«­Fè°‚Ú6•öŒœØz×m¦êQišÍž“ev${l‹É¢k{™pÝ18‘ÊîÄ‹€>µ¯¢ý·FñiZ5Ü:céê#´–S%Ðv;’3Î@Æ[1Ç\f€=ÃVŠöSlðËkz�¬ÒZÌxÑ™•I*JòQºïŠÏ¾ñTVZ�Õ�Òõ�iKq<Œ‘«GÃôSYVžÓ´¯ˆms†‰–P¥¤ðÚå"u2€ùƒœdqÚ¤“@ŸRñ†¶òÝê6–rÛÛFDQ.$ 7'Œÿ gé@e¼ñ][Eq‡†TŽ:2‘�*’¼ï[ÑçK­ZÓo&¸0ǃ-¸b–»c áÄd8$“Ô×¥C¬hºÄº­í„ÎÑüºÔsª‘]${Yõ2*¾(Ò¨¯0»Ó5{Ë -F[WŽÞöêæîúÖ[¸e-µ`ß º³m�pzàãŽãGNðüÓkZ$Z’Ü^ÛA¦Ü,°Ý{ÍйÝçr9Ï—Óîq�¾”~Н¯‘=̾|òyîd�•� vg¤ÕŠÅ²ñÛõIm Òu S¼xDBÉœÿìdcîõ«f·©wm1Ie"Ç'ŸÍÄ®àWœã¸®kì0Ëâ[´­ïO½[×–þáâØ¯WÜ ‚VMÌT€ Ç^1Shz¨ø‚ãû7VXçòå„˧˘ Ô ä`y  MwħAYe—EÔîm¢@ïqn"(=°Ò+ì~*õÖ­”V<3)½™ DÀÜŒÀ‘»žØ9Æk/Zêsør%´œ[Mx·*ñŸÝ*FÒ(~ËûÀ�{ŒSüsP|kiÏüÓ�ûi%/ƨÖOØ©8Í„ú2J*Òº"RI�ÍQLbÑIKH ÈíeºÖ¾ß$f�ZÀûÓå¿Ùô�jRRæ€9=VÞöæÇĉbs(¸mÑs™TÙ¢íç$êT Ñ·¶{MwO†IÌÒ}–íÝÈÆKK  œ ’ì^¹ÑôËÙ¼ë­:Îyq�òÀ¬Øú‘O´Ó4ûf³±¶¶fc *„�| @[®TZ\ÿÂ3âh¾Ï/™4×f$Ørá�ÆÑß=±]Vh v?ïÓ$2]\Ü]ÉdÖñ›–ˆ:òÈüUkVº¿—C€é÷p6Ÿûˆ–=«‘@ªO ’{qŠêè¢Àq“ZOªê³=­¥ü qg<7&õNØË.FN‹®ÓŒU½9ç{ûkélnàŽÃO0È­ÜÒ¤ª�˰ò:äWQšJpñÊíá«ñ%­Ü>V£ö·Û¼`Åö€ùËŸ”dúV–¦—zŒšÔº{>ÞØZÀTàî ;àú�P}EtŽ‹,m¨d`U”ô ö¦A6ÑùpD‘¦s„\ úÑ`8¨¬$7×Ï¡é×Vô¶Ž6š6�2îÏñ{þ4Ë-â[Ö)’$’(šÉàz6ål³¶æãŽ ×yEÈA×­ÜÁ$3ê·¢WŠEÃG<ª‘îUïºIm®ÄÓMii4³ÊÏûëˆHò~BY3´¦@ù1žk¬1FeYLjdU*€q‘ŸC�ù }pºe™‹RÑå‹I½K¨b—í²ÊŒ<ÉL}ÜðrsƒÓš“@Ž{minFŸqmÙ¹�´Š<ÀT€K]ºŒ÷í]­% œl7xÑ|J²Ú]Çç<òÆ&¶xë U�9'Œu®²Ò6†Ê¤9t�U¾ Så†)Ð,¨®¡ƒÃ<ƒ�§PIEÄ�ÑI@­ÝÕÌ:µóK§‹µqä¡hî0±c•ùa`rrIç�JÖÐ ÇöLkq�Ę̂\0@~Pwª’@ã8­:J+w¿ò—þ¸Ÿý k ·<)ÿ!Ië‰ÿЖ‡°-Ί(¨,(¢Šà>$6Ù´ï÷dÿÙk–Ñ� ¬·Ÿ4܉sÛhR?>kÔ5ÿÚø‚’wxÞ"J:uêüsÿð­m?è#?ýð+ÆÅa+Ê´§£ÿ#éðŽžê¶œ|¼îp[�üô�5ŸÅšïÿáZÚÐFûàT°|8°Žtyo'•ä¦ÝíšæþÏÄvüN÷œà–¼Ïîgaú¤ÿtSñš(¯¢>%Œ’¦]²ÄŽ»ƒa”�Aêðªòiz|×+q-�³Î² VF‰K�ÆAÀ>•nŠÎƒ@Ñ­fšk}&Âfexí‘Z@z† r½O.™a:D“XÛH±KçF%!$É;ÆG ’yëÉ«TPlRáÊ�À9õþB™4Ü&ÉâISpm®¡†AÈ<÷f¤¢€41\DÑMIpÈê?Pi̪㠡†AÁéKEG4Ü(Y¢ŽEp¡€>¼Ñ,ÎMHƒ.õkzŒ÷©( ¥¶‚ᑦ‚9 Pº·#g§©o o½!�_hMÊ £ úT”P£whãDiç* =2}j >×LµÖqyp‡y6î'æv.Ç$ç–b³EV°ÓítËQmg—w“nâ~gbìrNyf'ñ«4Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ š®`’ âIa‘J¼n¡•�ê=E>Š(¦,1¤�"FŠòc{¶8=éôPEPEPEPEPEPEPEPEPEPEPEPk >×LµÖqyp‡y6î'æv.Ç$ç–b³EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEà? ;µ#ƒý�þÚIE7ãŽG�lÏð�>>=üÉ(«L†®wt´”´VŠoî,-lÚÞy¡\í• �]öÝŽ?„Ví`øž ëˆôѧ(7 y�ì XÁŠA¸ã°Èüp;ÐÆs3øŠÿì’½®­|eÍ,fH ÚÑ&í²Ýò P1Æ3ùì^ø†ðk·v¶PÍ$‘[ìDq²0Ǭ¬ÍÆÐvŽ:üÕ—ªøbæÇOš8¦º™c‰í¬bŠ6”•u%ƒàp ‚zmµo[Ð.nßU�4æ�¼/‰&ºf,B‚8׎MÜõ¤2σukÝD42ÞEs¼*¬Ì˜”Éß�í¹qü\ž:W[šå4]5âñ\>�}GfQ^î; ¸p§{m〠*$¹‚E‰’xØL3ñŒñëÇ¥=�Sï0_©Å:ŠŽ)â�U¢•$VPÀ£ ž‡èiÛÓûËùШ¤�AúRÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÐýÃõ©*8~áúÔ”ó÷ÇG�ìýžŸú2J)ÿŸÚï§ÇÏý´’Ф#¹¢Š*‰ ZJ(h¤Í.iQE (¢Š(¢Š(£4”´”Q@”PE”(¢’€ J( ¢ŠJ(¢’€ (¤ ·|)ÿ!Yë�ÿЖ°«sÂò—þ¸Ÿý hcG`ßpý*µYo¸~•Z  ¢Š(�ñËb[£ÿìµÏÙ½†ÖûkÜ–ÏËä²ãù­¿¶Ùl>�ÿ²ÖM…çö~�%íº'žnÖ=îŠÇnÂqÈõ¯þó+ÿZ_�Oê0¶ïåÕ’"èR:¢½ú–8 J? ¡}nÖ7’Û;«4lW*zÕ‰rË‘ƒëžq]|ê“ýÑY~!Ñ›\ÒÞÑ.|‡!‚±RËó)RJ‚3€Çã8<â¾�l|ÜóM2úX§óÏN×a†Uf¬÷ ’ÜHŠAxÛeA@QÉ&­ë——1xíØßÛE0¼±‰a7h%íâ41îdkçæÉ®­üåÇv-î·î­%A.qpÊ%(=XÈGa¸‚¢Õ<%u}­Ëz’(Y/í®9»•B¤^Y?º#±(G=2xÅ1 ‚{m2Úk¹•ôì™o¯”Ç:  f)Éꃶy®_]]6 ZKÓtËhe w\ǯD…ü¤y&�Bþð‚:ãºÐ|1¬hšØíbÒ­-š/µÄÍ$—mÂ3‚€¨púTøúÊÓÈ·»…Ñä‘�Ð*†@ðw¾È£\ —9æ€!Ò‰Õ<#§Ý[éšU¸Üy2Ú*ÅäL²:FÑ b¬[hy˜$õ"¨hÚUévW¶ú�­¬Óã/,ª‚4œì½` ÚÄü˜'°Ív‘ø~aq§¬×Í=¥œòÜ,nâÍŸ,žBn¾‹éV5Í6ãPŠÑìæH®mnÑ»ôFCØóµØ�p(‚ñ:Eg®ê—’'ˆ³‰M³¼hŒ®r쮇¡J®¨ì+cPš ^Ýé—:ô%î- w¼*«LŠÞZN ÉW#…9>¤V޹à«-JÂí ’ñngä5�,r~]äcÛ©o¼!o&—5¥…Õݼ²Ëžt×RÜòåY>Q#0åôúæ€9-"¦¿‚)5]NÏN°‘ì´ÉÌ1Ç)c’+ÄáW òääóÓ2ë×Z“xFñ+êQ ¨ôàDRZï3Í4`dmeÚp[±8®¦_ßÁ¤Ü[Y_Eqsspg–}FüíXö€AU#ŽÔÉü1<_b’Æê6–ζ¶[´-º…ÚΨ¸Üä`rxõ9ÁðŠjð�Û[Íûƒg¦¤l­d‰æAœF %ËŒåI¯MØë\4óéqê2¬†ÝšIod”´Zcâo�fa¼pNCòxÛÀ¯QÑ<-¨xeÞ=3P†âÖšawï‚àleÀØ0B8j¬<x|›vÔ-ÖÏì1[\i¤ufvul€„³dPŸ $³ ²²—2o™U­ð•IÂÂJ¢ú)Áã‘V-<_4âÖâm(ÃaqxÖK8œ1 0Jãî–\g9ÉéŽj΋áéôÛ(í'¼$ArgY­Ë#ÜdùÙ'q$óŽN•KÞx- “S’ë̆òââ;F•L(Í,…©ÚÀà’9À4ûo\M½ÌšO—gqvöI7Ú>hv�r¸áK.3ÔÓÕ=+ź�¿‡­®YÂ,ÅܱKsûš$ºP áHUàä�˜÷gÞx- “S’ë̆òââ;F•L(Í,…©ÚÀà’9À5z?ئ"y r,¤e0‡bÌxÛ’71lyÇ   M2ê{Ý: «‹Sk$«¿É/¸¨=2p9Æ2;2zÕº©¦X&—§ÅeÓK#j˜3Ï œ €8ç’jÝQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEËøÂ9íì$¾¶Ôo#¾!b±·ŠM¨Ó“ò‚£ïç<îÈÇZê+Tð¸Ôõ˜uOí�JÖhc1Ä�4E=H�†=3×P-íõóI¬j¢öxßLÔ!¶ŠÝˆ™1pËÑ‹y�‚yb¯^¬ö(ÓßS»šk‰d–ê)eÌil¹Ú0 PŒžäóZøbÎkÑs$×,ã’hw�òG�Žã°Ú½0G·…®µqªG­ê†K‰D“FÆŽDÿW¸ `ç¹ÍsÚ7ŠâÖ<o,zÔÊâÖâ;{$¸SÊ<{Y”¾ß9ò}jîùõ N.'‚ VúmÏ”s •UV€Ì¥ò9Á>µ¿¨hÂ[Ÿí=©¨Ãi4á°#ÜûN[ž /NÙàÒIáëWÒì,’I k¿gžHÈR™‚A 俀9%Öµ¹,ô†þÒ¹É|²5“ªM:Á0�2ä¨6IÈ$�냹ö¨uk]ÒÖy¦†á…˼ç÷†8p~o3Ëñ«Íá›%´µ†Úk›Ym·ùw0¸ó~s—É ƒ¸òr:óÚ�¦hK¦Þ3DBÛEj–Ö¨³ ™Ø“݉__º(6Ö›o >ÛT½¹�ìN÷Ï4�ü¹ QQ�¨Äy‡h`téMÐ%¸‡ÅWÖI¨G·:„¾cÌÁÈiP‚@^Tc=ÇÊ;ØÓ|šiœ.·«ÏÁvž9dŒyŒà‚ÅÕäv!†0; Uý?A†Æý¯žêîòèÇ䬗R1Ç�J®ê@É9'šçe¿¼Y$Ö~Ùs¹5¥°Ûÿuä™V6ô'’ûºç¾8¨l5=B×[Ó#ºmLÞÝÞÍäs£ p»$tò‰x¸+Û;¹®•¼7fÚ§Û|Ë�¦arm¼ÏÝ€À}¸ÎxgÆy© С‹RÒÝÞ\È…ü”ž]Ëî»FÓ'$`붺åûÙ_5¥ÌPCk)¹³¶Õ^Ý„›”�™>ù àsÔVV·®M(š}Þ¡öA¦Á=´°»l¶w$‡¹þò•ÚNs€¬Hõsxf9­ã„꺰/&F93&OÞÈ<ò~eÁ÷àSn¼%§ÜŽ)n­må�mç··�*M�¡H ‘ÁÆTƒŽôÍ~-cSÒ¯-,"h[΃ɞ;³š=ÈÒa—”ãr÷ÍsÒ_KŒzl_Ú‹q¥å_ZÇ}$÷/“¿÷R±ÎÜoáàÔàõóh‘Ê& }}÷GO*r¢«´0GPr æª Y¬Jcº¼ŽñfiÍòÈ<æv]¤œ�¤mcn8Pž»–÷ÖóM;Ìå¤\Éþ±@výµ î Z×dx|=©Ë²H–’²ºœ!=�I¦i¶úUŸÙ­÷�]¤w‘·3»ÌÄú’I©o-RúÆâÒRÂ9âh˜¯P`ãßšók�{Tÿ„kHÓÅìÃP´º…o¦W;ž1,H»Žs—FÇ=FîµÓGâ?³Ýjñ[Oqvú©³‚¸Èv¤„‚GÈ�rqÏC×8­ � i—Ȧ7I%û0’do�Ä0r1ÔsÇ#ðÂKák ˉnRi¯>ܳ#€ð˰G”8éµqƒœäÐRëú„z¥–™ýŽ åÅ»Îëö¡²5GU9m¼�˜Æz ¢;_™,çm9ãÓ/g6ö×^h%›æÁdÇÊ­´àäõ5¡m¡Ão¨ÛßµÕÔ÷0ÛÉngr»«’p9QŒ`Ú«ÛøRÂÞê)[¦‚ Zx-OÝC#nË(Ɖ° g€(•·ŒÒM2ÿP¸³ò¢µ÷+8i÷…G�cFHç­Qñ/‰uHö ôí@—þ;µ±v�ã¶G{©­íÚâía�Ä[C³1.•dœ}q-§ŒŽ©6�™§ý¤ÞÛÉ>ãpª±ˆä¾NFOg•�áÏ ¼ÐI©ÉuæCyqq£J¦f–B��Ôí`pIœàëh.¼ùî"ò'�Èp›äL,™åOqÎ> ÔôQ@U¼WÚg‰ÒãV­åü±ÚÈšœ�‚¢´(G¿8àu­MÏ�Ä!¶’îæâ8¦„Æ&“vÀÑ‚@ìOj³‡-ÓP†ê[»Û…‚C,O6øârÜ8É8bIÆx¨,<.lo/.¿¶õYÞñ6Ëæ´C'nÐÃl`‚L¥ã ’ÿߣNŠÂþêd†+9‹±ÀÄd~uížOû_¥Oû_¥eý”ºÏð:_JÚS_üQWÐb–¥òÚý(òÚý+Ö>lŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ¨©|Ÿö¿J<Ÿö¿JŠŠ—Éÿkô£Éÿkô ‡î­IMEØ1œÓ¨À~84³`¤ìôˆãýd”VŸÅ‹Inüo ijS;†WäÎGÓ4VRšNÌÖ0m]-™£5Òs E% Z)( ¢’Š@-”PÑIE-¤¢€ (¤Í-%P0¤¢’€’Š(¤¢ŠJ(¢€Š( BQEVï„ÿä+/ýp?úÖ oxOþB²ÿ×ÿ¡-&3±¢Š*J (¢€9Ÿ^Mn¶ÑE#"¾âÛN3Œcù×-ö»¢3æÍÿ}ÝñÃmšÇèÿû-sñÇ=÷“òÔ'8ü©3âóG9cf“}?$I£yÑÉÄ�Õ²>b1]Þ�¬ÅªÁÙ.~ò?ê=«�:~£æï[Ç9æ3QGysep“ÆDr¡à�åJä`±ÕðU=ôÜ^ëõG«QH§r)õ¬/ë²hZ| Qqs7•:#"áYÉmòÆÚ�ÎáÎ:ÕnoQ^WÄ]j7»–ðØýšÑòÞT—’1ÈÅÓy8oá:wÊŽ³Ä^2‡FÓµ"³¿’æÚÝ¥Bl&hIÛ‘™íÛês�Ï¥uW7 ø¦McT¹²—L½·UQ,ZMJ‡×z 0ôäǨAâý*áui¥é’¥—fVF^¡¼e¬Çý¢ÒèzxM>dŠrº£K*6Ty#<8ôäíh®;Ä>6“G¿»ŠÚÚÎâ?³%ËÏwäÞg*£vÖ9ÆÎ{U­'ſںݾŸ0€b˜ÌñKæ¦ô[w[ŒnR·’#§¨OEŸsª-¶·§é†"ÍyÎ#ÅÓ¤N¢–Ë$±‹ÉB&1±SŒ9nªqòÑqâX-®n û4ó:\-¬1Â<òù~c §$“޾”·Esóx¶ØC`öv×ò^ù›!·T†3‡ ”žµzëUk{+9�¤«5ԱĶò0¥�ÍœdeT18ÏÝ  *+ÛÅ“Ýy-/í� {ˆ|ûr ñ®7Q–ÈÜ>RsÒ¦ÓuØuÉlÍ­Ý¥Ìq¬¾UÔaKFI† ã ŒuÀ  Z+üEo©”¶—±,³xîd‡lO íœö88Áìi-|Mcw©-š%¬’I 7 €E4‰�è§9$mn ´ã8  š+/WÖÓGBïc}q¡’G·‹rƃ©$‘Ÿ Éöª—>*Ž=El¬´½CRv¶Žè½ ‹jÆå‚ç{©ÉØ{PýZþôX[yÆ ‰É`«ïf'ôR@÷¬™¼[e‡îõvµ½1Ù³¥Ì 2ÄÊ2Á†qÀç9Ææ€7è¦E –‘rÔ0ϽG{u……Å䡌pDÒ°QÉ 8÷â€'¢¹é|g¥C izÉó�¾¥,Q@�FýòFqÇ9ç±ë[p\Þu0M•&ÌȸÀ;—ÔsŒúƒ@QEQETÕ5+}#JºÔn‹-£i_hÉÀ‡­[¢¨XjÑ^ÊmžmoRšKY€/32©%I^J7B}ñT/ßãGöM�üðÿÇÛüh¸Xæ)+¨þȱÿžøû�Ù?óÃÿoñ¢ác—¤®§û"Çþxãíþ4dXÿÏü}¿Æ‹…ŽZ·|'ÿ!Yë�ÿЖ­�Ä‚${‡?ãMÐm ž¿4YÊù©öÜ´\,u4QEHŠ( Çí¶}?èÿÍk2Úæ;�>+Hu±š9ɽÙ™ÆG§LU߈ϲ}7é'óZæ­.tÐŽnÖwrÙS¡@˜ ԽώÇO—Qi­·ô]�Ç´¹' âgrpnÛ$þU…q¾Ñʬ²#�ÁºƒÞ­ Ý7%½Ë9 ×õÂÖeýûÞ\I<ŒI¹ÛÐg° áĺn7O_&ßæ{\ê“ýÑ\çŽåô(ÖÖæê ¤º†6Ó¬ LŽfBŽTe²vŒñŽ„×Eú¤ÿtQ$QÌ–4p¬PpÀä¨<Õ|¶ÖKË Ø`‘Ïñn)&Ñ×åÀë^ŸQ=­¼’ š@T†däg>Ù8úšóm#M‘5áÄoo%؇¯;–C+)äAQÅ©ÛÙ]eé3ßÚï2Km§X‡�â;²÷m÷YT¸Æþ}½ é¶&ñ/ •·Ú“;gò—zä`ᱞ@úU•UQ… “€;žMy¯™©à]3Ã4/yoska*Ï™xX3«.F@X‰#Žõ¬i¼4Ößð’HÖÞSkyýÖ•±×÷P·îO˜|¿½ïÉ'¾+Ø>Ïš²ù1ùŠI´d0N}ÅVŸGÒîgϦÙË2Éæ‰$�Yƒà Ù#®FzàJà‡1šîM•«] £m ¸Ä¥þž¼oÌúÒ%�œw²^¥¤ w*…’uŒp:ÝHâ€0þ9b†úÖ� �Ü8R\6;ʱVàr+Ðh 5·Óî‡y§Zi3¬žtÆôZ½»ùù?¼‘[8Ù€Yø’;âºßÃ-¾‡äÝ[ËòÌÿkiþúlå¤SüJÝF: Ø­Ú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®7Æ:›Ïq€Ú~¦Ö¨kÛ«{fSÕ)E?3t'°Ïr+²¢€8;«;Öþ×Ó"°¹oíkø.àŸÊ!-°‡Þ…—Ëo”òxÇ´òjÇUñœÝiº¬VztÄZ“§Í¶yÈ)æÛµQC0žrIÀ»Z(„·†Úß^³Ô4ýëHŽÜO6«$ÑyjÈQŽÒs‰ò �0yçxínì­4 bKIæe–k‹Ø¢S$ˆgV9 9m¬BàvúWc41\Á$Ä’Ã"•xÝC+ÔzŠ}pQi¶qiˆÚï‡.¯{‹»¨‚[ù¦:báS•b6œãŽ£wA‚ôÏ£YêLÏq¥iâi÷ì%“(Ÿ7v²ƒë»ßžÂ˜°Æ’<‰+É�ìØàd÷ 'LÖÿ´|G>­}¥ë0}ž a²�ôÉÆ#ûÎäíÆ÷Ø (=€êH«>ÔVÖ¯5+ë FÒòxÄqCqe,IN»(Rä±cƒèvæ» (ŠºÕÛSñ�½µÎ›«Ea§O˜Ÿû>b·œ¨}ávˆ×'’y<ô1XX_4º&“%•Äm¥ê\ÍpÈDo&Uº1o1xŽs]ÕÃêÑYÜx^ 2=^·¶0n·ŽÝ[!ŽáåÈbCåNj¾·b÷zPŽ}sâf±Š(/m¡ýÚL ¬Šq«³uǹ¯@¢€9«íEt+}ZößEÔ.¯÷D® �Ü]I°ËŒü pN8Çs׿m¿5˜ÓV¹ÔoÒu—dêÒ\H‡¢ÈA‚x œ×¡Ñ@t{¥¼Òm¥X®"”¸…¢pG*ÀÓÒ›¯G$ÞÔâ‰ä{IUQFK‡æ´( 1¼ðΩ–Ñlíeo5¬ÖqF2Á垟*9v9Ϥ�èjåÆ�|n57šÊî]5µó5Ô£n¸ƒìÈ ¨êê$ g;O\b½ Šâ"Ñ­/üO¤íÒ®aÒbÓ® Å4nˆ¯çFT0=?ˆ…>�8¥¦i×Ñ_é§ì©­Åzï¨ß0"9¡ùøÞxu9]¨>ï W¢Q@km¦êQišÍž“ev${l‹É¢k{™pÝ18‘ÊîÄ‹€>µ¯¢ý·FñiZ5Ü:céê#´–S%Ðv;’3Î@Æ[1Ç\f½>Šâí<=§i_Úæ= ),¡KIáµÊDêd ò…8ÈãµUÔc†ßÇZ�Ýì ´6ÆÓc¹1¹]ûƒyC ŒŽÖ»ê(Ï–Âõ¼S%ì71éRÏ/Ù£xÛ÷W…1ö†B2üà™;¿‹"¸Ó®›Â’[iÚeý®¹åB5 扉Ÿ¾h¸ I±µ¹es^“EyÕ–•w�±$Ò@ºµ´ßf�N’ØB«Ã��›‚q�Á>õÙê^!Ñ´iR-OT´³‘×r,ó*£5¥Epþ ñ_‡“D·³mjÀ\½Ôáb3®æ-;•ÀÏpF>µÔ�/1²}º÷›¡s»ÎäsŸ/§Üã}*ý^ _"{™|ùäóÜ>É+ ì8Î=I«Q@UОïÅÚ}õ¦™ª­ÔºÜ­È&ÝaØÃ1’J$. òsÁ4Xy¿ð—I«ZéÚ²Äm%ûjÞ£¯•dHwÿ6B¼ø®ÖŠâü^í«é>Béz×Úš-¢Æ‡ËyHÈI”¸ ‰:â­x¿KºÖ4½Ó3£µü&âK\æ5ÚÛˆ#îŽqžÙ®ªŠó}OO¼³ð´Þ{;ùmôëûV·šÖ)ž×ÎVùJ ï@sòƒÞ¶¼)hðk:”Ö�ê)¦OD>¥¿Îy�`Ø2~óh]¿{Œç뮢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<Ûâ,žN«½¾Ì£ÿj+KÆqÅ6¢ˆà`G¹¢¼Ú¯ßgu?�úÎÆÂÙ¯. ·VE f� '³N·Õ´Ûɼ›mBÒyq�‘L¬ØúXºgÙ?·nþÝåý§É‡ìÞv?ÔìÙŸö÷gÕ‘ý�¿Zû•»Ì‡ì^V3ö¾såãþœ{פp�„ú¤×�m"Ê]mÚä”Bÿ*�d“Ï@*+=vÎý¤[t¼Ý"[)¢È…Ô}‡5ÁjÖÅ<{¬Gn–Ð[Ú?Î� žFR’2ÊFòÌd€}«oB–öîþêÊë\ÔüìÜ,Dˆ1¶961ÞSéót  §ñ^�‘Û8šy>Ð�$k ¬²¶Ãd"’¤8æ§õ‹ÚY]Äe– ÉLQ2ÆAÈ NTà�¸GLçµrúuýì³é·v—}åçÙg‚hî'1¹!ÕËb8ØgÏïZÇÕà_±øIEµ…äÂá†‹Ê;ßhv‚ # r¹=(°ƒÆÚUÅôv‰¤$yZ ZÂP2 ~^:þð+vêá,ìæ¹�1´�´dà œWŽèWÉýµ¦£j1›¸îcyä7À‡ÜpØoµ²¹ `�O Šê/¼0—"¸³m?â)bk�1´ãæí/Œnó1»Ÿ½Ž½¨³ÓõK}HKäyŠÑܲ!S‚2õwþ•v¹¯ÙiVº%Œ¶–V¶·³ÚFÓˆ‘UØ�†Î:á³]-QEQEQEQEQEQEQEQEQEQQÜ$’[ºC/•!,›Cm>¸=hJŽÇþF6ÿ¯OýœVdWZ¥Ü©lm�£ÆÃí‘”aézîõ?wëZv?ò1·ýzìâ€7h¢Š(¢ŠÏÔôM;Xò¾ßoçyYÙó²ã8ÏB=gÿÂáïúÿäy?øª»}â+Mº[k˱‡n~F*™8˜ .O÷ˆ§]ëÚe�úY\]¸}¿"£6ÝÇ X€B‚x±š '…¡R\Ó‚oÍ"‡ü!>ÿ þG“ÿŠ¥ ðð9þÏÿÈÒñU»,±ÃË+ªF€³;©&³4OXëÑÌö†E1>ÖIWcmþÁçkAî(±QÂÿϸýÈÕ¢¹]CǺuˆ¹ÿD½sk'—?š‹l¨HÈùædRH € $�ŠM3Ç–:¦‰«Çg:ÙÙ[‰žÞF )m»RF*ØmQÕÑ\½çŒ¥°Ó濺ð¾¹´1™d�ý˜íP2NÙ® r(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ϼrìšì%çØèME]ñŒK5ò+ þä`úrh¯.·ñßKàEÑcg}al·–°\*¢•FLÓ­ô�6Îo:ÛO´‚\c|Pª¶> Vn‹âÍ6 RuxYAŽTåX~£ý«eÿ=ÿñÖÿ õly÷w£Z^Þ­Ôá™Ö1©ÆÑ‡§Pʦiú®ŸÒÏ24¯ö‰ˆÞL‡.~P'éSÿjÙÏoüq¿Â�í[/ùíÿŽ7øR°ÊÚg‡4Íe–Ê…!òTÎw1ú±Á'©Àô ø~ÐZAo“¶÷qFFmü ƒÀÞp;qVµl¿ç·þ8ßáGö­—üöÿÇü(°#ðÝ„.“DgKµrít%>l„ã!‰ûÀ€`S?áÑßP7÷6ïws»r½Ô¯(Nr«Ó¯jÙÏoüq¿Â�í[/ùíÿŽ7øP6:%®�}quK™³ˆÙ²‘å‹6ÑÛ,I?Ò´ªŸö­—üöÿÇü(þÕ²ÿžßøã…\¢©ÿjÙÏoüq¿Â“ûVËþ{ã�þvŠ¥ý­eÿ=ÿñÆÿ ?µ¬¿ç¿þ8ßá@hª_ÚÖ_óßÿoð£ûZËþ{ÿã�þvŠ¥ý­eÿ=ÿñÆÿ ?µ¬¿ç¿þ8ßá@hª_ÚÖ_óßÿoð£ûZÇþ{ÿã�þvŠ¥ý­cÿ=ÿñÆÿ ?µ¬ç¿þ8ßá@hª_ÚÖ?óßÿoð£û^Çþ{ÿã�þvŠ¥ý¯cÿ=ÿñÆÿ ?µìç¿þ8ßá@hª_Úö?óßÿoð£û^Çþ{ÿã�þvŠ£ý¯cÿ=ÿñÆÿ ?¶,?ç¿þ8ßá@ª;ùÛþ½?öqU±b"b}‚ð¤ÐnÍî¿4¸Âù(öÜ´ÔÑEQEÄxööÞ[¬Vþe¹�r4Ï'+¨‚#Î7q�‘†2sÒ¨Ý\ê:V¿«È—ÒÃ}s}–¶u»Œ¤HFJ–ÂáÇÊFÜdðkÑh  ÝKC´Õî-ÞøË,0ÂØ¹;vg_âÇ`xö¬I‡V°ÓKqí¾£x±ÜÅ!Y ™>B‰01´äzb» Žxm�¤Çg+…˜’ÇŽä’IîMyõÛßißêw:\¶ºHÔ"º7.¨ÛRù3œdNN9â�¤s‡¾%iß|«¡¤’û˜L–ì$Vï¸ß®kÑîôÛ+é­å»¶Žg·}ð™B7¨3ïÚ£¹Ñ´ë³xg´��ìg¹# ËÚHÿxþtæ^$Ò/"ð~¥+騈¶nKÿÂOw6Þ¾[.ÖÿtðkÖ‡ÝJÁ—Àþš…¼9¥eÚJZ"¶=˜A÷5¿@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@TsÏ´4ò,q Ë3@—Š\k"ä©~-Erú¶³ý§¬Ír¤ˆÉÚ€öQÓü+Ë©+Í´wÁZ)ÿÙ endstream endobj 47 0 obj <> stream ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ¤¶"ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?õMEh]] ÒFR¾AÔ¦»Œ‚A ûÜ`ñØwïÛ¡à‘"*Ž€`dæ–€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ �mòMAVWî¥WÐ~Tm_AùRÑ@ µ}åFÕô•-›WÐ~Tm_AùRÑ@ µ}åFÕô•-›WÐ~Tm_AùRÑ@ µ}åFÕô•-›WÐ~Tm_AùRÑ@ µ}åFÕô•-›WÐ~Tm_AùRÑ@ µ}åAU# ¥¢€ #Ç‘#ûÇð¥žO,ßmÁ[)æð>LA¨U�;AÔí?²ƒÛgì——ÆB$^RfvGôù€#¯µt ¯XE¤Zê…å•”w3Ý!�$g ù¾¢§]cLe¶eÔm Ýǹ®%ÿsŸ›ð¯9¸ÓµK} L[B÷qhmoyòd1«äUånAnœŒb¬6�6¶ íšêO¥ê6p‹Û$‘*¸c"1?0dn¤œt4è ªiér-žþÕg2yB#2†ß€vã9Î8ô"ªÙx‹J¿Õï4«{ÈZòѶÉ‘I<pÏÁãƒÅs·¾ºš/H¶(÷WwpIk+Þê‰ÎsÆ_®?ZØÓ¬n¬|U«ÌÖ{­oš9’åYp…cT*Fwd•Î@Ç4±ø‚æëX»³²ÒÍÄs¬ý¡QÕˆVÊ¡ê 0ç#¡À5§ý©§ý©m~ßkö†b¢/9w’:Œg9Íkz^¥ª‰mt„¶¾ISÉÕ¡º ˆƒC¯ Ün0G¸ëYqé·:«ëVVÚdcÌּè—QålhÛ§Þ-�Æ8ç’(»]BÉïZÉ/-ÚéFæ€J¥Àõ+œÐš…”·RZÇwn÷1 É È  ÷È®A´�nãÄ672جIm©É3Kı˜™$PT¼±Ü»·¹ÀÇD·ðþ¦|)sáãa?e’í1*âvc×»‚Ý[#¿zìm/­/ÑžÎê „VÚÍ �À>‡êÅrþÑî,o.¯.£¾Ži"Ž\=¹R±D*£�Ç“Ï=u‘}¬ÿcÞ©ùqi²åÝôXÛ¬ž™ìÝN7K¤Þ^j -ÔÖâÞÑÈû*:‘+/9w³ÆsÉÀ†ûE:Åó SË—M�U ÉY¼ž¸9z¼œmŸJ³»ÓÒ[Y®>Ñj„}šGbe ý×=ñÆ9#¯#$F¥¶ÿ�X¿ÜÊ¢©m¿ãÖ/÷ò [XÖµ+]bâ¯`†ÊíVƒy#h''#¹4Â[7–Y ´„�X~¹8ª^%ðk73ZB­ ›v·˜£¢�ПQYPøCÄäyîîÓ/­{4éaeN.RW²ìy3ž%N\©Úþg¨W)ªxÚ=+NÕ®¥±f}:õmZ%“—Rªþ`ãŒ#Çû'žõÕ×yừÏÉ<°+hÒÛ ]÷Œý #Ã�½Nc~¸Çã±gUñ\ÖWw6ÖztwMÖ¶èÏså«É1<°m9ç;½©³xÂK8®"¼Ó|½Fà€@—£f›î0��ÁÎFxèr3…cá=^_ Ãm©ÀÍ{.«o-ÑŽp­åD=á•�HÃpr3ë]=Ö‹o§é2Ûiú,7ñÜ8ûTÓ.1’Ï�Ì01¸Ž;О�qysnÍ}cö9•¶”‰†ʰÇã�й\÷„ôëÝ:Úñn"{kY'ßig$þs[Ç´»²z°b$q] QEQEQEQE�­c^“ªypé²å^tXÛ¬ž™ìÝN7lV5öˆu›æ©Žm2€EŠJ(¢�Š( Š( Š(  ·šm†¡³í¶V×>YÊyÑ+í>ÙU�¨U0íKEQEPCÿ&$�Ìrï±@ÜÇ©8ê}êJ(¢Š(¢Š(¢Š(«E`* 8¬€-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@äPû”ô5FHÚ3‚8õ­1¦�Á  Ú:Õãgø9cEûªC%NöëØUŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( AEPEPEPEPEPEPEPEPF(¢€RÑ@ E-&(QEQEQEQEQEQEQEQEQEQEQEQEQKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE (¢€ 1E”RÒP0¢Š)ˆ(¢Š))h ¢–’€EPš(¢�Š( Š( Š( Š( Š( Š( Š( Š($“ÐPEW7DŸ’"ÃÔœR}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýia÷¡ {6hÍŠÁÔ2œƒM’E‰w7à(ôUO¶ÿÓ?Ö�¶ÿÓ?üz€-ÑU>ÛÿLÿñê>ÛÿLÿñê·ETûoý3ÿǨûoý3ÿǨÝSí¿ôÏÿ£í¿ôÏÿ  tUO¶ÿÓ?üz�¶ÿÓ?üz€-ÑU>ÛÿLÿñê>ÛÿLÿñê·ETûoý3ÿǨûoý3ÿǨÝSí¿ôÏÿ£í¿ôÏÿ  tUO¶ÿÓ?üz�¶ÿÓ?üz€-ÑU>ÛÿLÿñê>ÛÿLÿñê·ETûoý3ÿǨûoý3ÿǨÝSí¿ôÏÿ©â™epGQ@QEQEQEQHHU,ÄI=«‰½ø�k ËGib÷©Ç˜ÒìÏÐ`ñ[ÑÃU®Ú¦¯c*µéÒW›±ÛÑ\ü,Ïú„äÏÿaGü,Ïú„äÏÿa]Ù˜¯äüWù˜}ü߃ÿ#¿¢¸$ø–…À})•{•¸Éü¶ŠìôíBßT±ŽîÕ÷E ã=Aî½c[ Z‚½HÙÒÄÒªírÕQ\ÆáEPEPEPEPEPEPEPEPEPEPEPEPh Ñ@Q@É7�¢Üé±ZÞ {Ùu Óî&gb8#BﹺöÕÑØ_èÀf�.QmÅÅ´�6Ý‘T㞸ÅZ¢Š(¢šî#BÌ�ýÕ,!TåÔV)P”�ÆÄ/0¸ þ#üõ  ÔQEQ\Ç�&Õ¡ð½ùÒä6Û-'ž[µ` ˆX*Ž»˜ñžÀ×ÓÑYú?ö‚Yu0x\Æ'R1:ŒbLºHê=AÇ­ (¢Š*£‹gü?�MPÝÿdzþ΀#è(ª×îÉe##”a�˜väVB^L™Å̧?Þ ÿ1^f34§„¨©Í7u}ŠXyU�2gAEPÓndŸÍI¿n0H÷ôª^/žko ÝK²E"¼XxØ©‘Aä{ìÃb#ˆ¤ªÃfeRqfåËÝxº{kÍIF’Ïi§]G÷àPîUÆIùp2 è*?‹o´ÍCÄrêvð.™§Kq²Ü À²¦Á‚€|ÅÁ$·ËœrkrΊà/|U½ep<{mZÀIö[¡)ÔbÓ5pº`µ¼ƒN7Öûîƒ'9'€ËŒíäkKÌ×/ü#İZêòÛ$¬¾b#ål•^˜ô¹Eq6zäZ.›¨ÌãW{Ûh’ItíF`Î2ØÞŽr$ã •ã ­eñÌw–—z`·»‚¹E7*Qã,W%ÈH#‘ùf€: +•·ñ¢Olê¶AïÅâÙ$Î$vO0&Ë·$œv<2º¯ŒFŒm-¯­í-ïçG�Ç=òǪ�?ÖÉ9àc×8Åu4U='R‡XÒmupÂ+˜–E Ô:Rê7sYYµÄ6�u°‚ñF~}½Ê�â sŽônŠÇ·ñ®¡yoo¥âõ]D“J�„�8ܼOzõ'­Š(¢¸ÏßÝéúÍý´W“!Ôtèã´‰òæó|¢Ê;ßFxþïµvtWšK«ßÜè—˜Ô.ãJðýÒÜ2HÊZà3Fàýà`rmÕ{M]Zea Ëª¤o§KºM[Í*.Nß(§›ó8ùqŠïh®_Â×·RÙÏ6­ ±–ÓQ“Ìïƒ$mÈ+“�”àqÀ®¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€i÷z9¨ïƒñ©->äŸïšŽ÷þYþ?Ò€)’$�êMS´Ö4»ùš=JÎâTûÉ êì> ÏÖ£[ígKÒ®9²™fšd=%1ì ‡Ô|åˆï³Ò¬êÚM•ÖšêÈ�<(^ ÑB´  §¶?úÔ©ERÒ.¥¾Ñl/&@’Ïo®£³2‚GæjÅ÷v2˜€|Hüó@ çñÍM¯�­¸a³Óµ%q~fÛ{f}Ž p�æ„aÉ8�ÛïŽ}F*óy°ipÉ÷a_1³ b2_ Ž1žç •Y\eX0Î2y¤gTÆæ “�“ŒŸJæl"˜y~\…œ°�+>[æÆ\gç‘Ͻ]¿‡dû//®Õ×z·Ê6ºœã;}:} mÓ±¶Ü:�ßw¯Ò±ä7ðh’Ü™f’gBv¾Ñå¯'<È­P¯ ?oH”©U*|µT* È<Ÿëë@U²@Œ’‰T�õƒ7¿T”QEQEQEQEQEU‹?õÇýÚ¯V,ÿ×÷hõQ@V‹íã¹ðÔé4–I˲}ºO.T™£±‚•èzô4¹EyŸØ´ßì/¶nðŸöoöÇÚ>Çöåû>Ëåy{ü¼nÝûÌlëïÍv·ŽÛÃP$2Y�Eoéöûü3q/ØídÅÀd­´�š> ÛÀç}xf88ÈŽâ ¶ÒŸìí0§æŽÿsp<ã“íƒ^š®®×�·_æyþÅÙ?ó1+Óþ’|=>OK¦Çýò•æéÿä^¸ÿ¯¶ÿй3o÷gꎬ»øÿ#¯¢Š+åO  (®;âEŸÛ¼=_Ù×—ø¹ÝåZýáû©ÕÉë€vŒ3)ܸÜ;+èÿÅq¥ßÙ·¿ú2Ö¶è’ME’"b`77\SÁü¨Y¢iž• ¨:”à‘Û8?‘®+â ÒZÏ£9Öî,Ü]n[{xã’FùçU*ÌOðñÇÍëƒ\žŽ%71—¶ñ1¿žx¬à¾Û¼Ö€fo1~Ñ�»„Ür£j±½¾»Ô&¶y+‘ Xþf v ;Âc=·vÞ­Õ»ˆŠO N#!Á߯xõàøSä’8byeuHÐgc€ u$×�É&›c¯i…|Wo¦”¾xŒË 8ã¶x��êpN0Aà× •IT�ÛOU8ûþFyëV¨¢€ (¢€ a‰ ¢R¹p0 íô§Ñ@Q@UÔ¬"Õt«Í:r⨠0VR§ø5jŠ(¢Š(¢Š*¿øöÃùÔÔɓ̉“Ö€)]Aö›g‡vÝØçÇ9¬¿ìÿŸ¿ü‡ÿ×­o4/­ÜG�÷¿JãÄ`0ø‰sÕ�ÞÛ¿Ñ›SÄT¦­W°°6BLËæÇðãü}èÕ4Øum>K)ÚEŽB¤˜Èå`è=ÅXó£þ÷éG�÷¿JÞ�Q‚§MY#9ÎS—4·2çðÝ�Ä:¬O,áu)’i°Ã*ʨ£o ëžôÛ¯ Y^^^O$·/<øUÀFtÆÉƒ «‚è+[Î�ûߥtÞý+RL©<;ŇÙnµ ë�³Ç:K+¦ôd`ËŒ(@êh>³7"q-ÀÅÿö€@Ãh—aCÛ8 絫çGýïÒ�:?ï~”ÂhþÕm52Í ‘ æ�ê_³¼ÆÅ‰T!|ãÉÞF9ë]ü"ð*ïL“QÔ%³¸·ka’«yHF>S·$ã»n­Ÿ:?ï~”yÑÿ{ô  è6wWK7˜â[#bèHÚÑ““Û9üiaÑÒ=û2KËÉ£Û´LÒí”Ød Œ`\Õï:?ï~”yÑÿ{ô [Yð›>‰© yï/õ˜’’âeÜ8mª@P;œõ>¦®Éá+ˆ®ÍÝô÷yéRJ<ÈÄo½àm7={æ·<èÿ½úQçGýïÒ€1„lv\—¹¼’yîëí-(óU@�”��òŒcÁ#â¥“Ã‘È “ûKP[ÈC(¼YÌeb VÊí# q·ŒqŠÖó£þ÷éG�÷¿JXcò¡H÷»ìP»œå›Éõ§Ô~tÞý(ó£þ÷é@ ´Þg‘qyŽd-îcÕŽ:“ëRÔ~tÞý(ó£þ÷é@Vf¥ Ùêšž›pdiò3Ä€p Ç# Ü�Wüèÿ½úQçGýïÒ€1áÓ¶k¨qý´¥nHa”J�œq÷˜óžI­Yl¢›NkiDM—¹$(àc ¸ ý*_:?ï~”yÑÿ{ô  í;A†Âùï^êîòèÇ䬷R)sµpÆ@Ïs�ÍjÔ~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£Î�ûߥIEGçGýïÒ�:?ï~”%�÷¿J<èÿ½úP”T~tÞý(ó£þ÷é@QQùÑÿ{ô£ÎSÂå� =§Ü“ýóQÞÿË?ÇúTÖñ˜ãù¾óšeÜl謣;{P&¥¦Ç©BŠÒI Ñ?™ ñ'Áã¡ ƒÁƒY—z§ªYËg¨ëy¶‘J²ÚÚˆ™ÇûE™²=@=:dWAEAd·)gÝù>zŒ1„‡¦F;tÉëR¾ð�å…/Ž Ó¨  S¥^4ñ$Ñ@ÐÅåù©–fäcŒ Ô²é�qioÇl«a–éÐ Ž3ß­jÑ@ðhÆ&Ž`°$‚R슼`¶@ä~^Õ<ºsÞ±ûtÛ£ìŠ,¨„ž¤Ö�@Ú]›;›g¸IQâd�™pÀ�GÌG_®*Y-�æ³pW1-ïò‘ÇçV¨ Š( Š( Š( Š( Š( Š( ¬Yÿ®?îÕz·g\Œ `Pº(¢€ ÏÖ´é5]7ìÐΰJ³Cø­yÙ¼â°ü­êÙۖź×éc¡¢Š+åÏ|+Ä~³ñ>Ÿ•ì“GKæƒÜçk/ñ)àã à‚¶( jóÁ¶·ž'‡Xk©ÖVól�ýÜ®JÇÓ˜�‘Еùéh¢€1µ}.âûTÒ§†+P–³¤–F"N‚ª€§ –Éäc bXxCQ°ÖÓZ†êÒ9K°m=þÍ9aLœ‰3¸M£$×iEs¾ŸÄ8ñï�h¬Lv›¡E?ÂìÙÜÎ:Ž€ÝéÓhzÔÚ¯¤\j�ÞEsg$³MIT²•ýã†#� ×KEd^iS\ßè3«ÆO™¤”rÀÁ$/®=ª/h“êRXÜéïim}or²›‰ ó>P®1€A?¦EnQ@ÔZ¯7ˆ ¾Õu+¨#³žÛe½«ÀÃÌ1œó#çî{cß´ áG‚ÊøZClg/(²�ådŽ4xÒ3œ)ä*œpzã<šë(  ý'I‡J‰ü±ûÙV?9�á™#T¸QùV…PEPW6Ö÷�4PE<-�ÑÊ�”àädz–Š(¢Š(’¾Ñ5¸üAöí>->x?´þ..žÝöClSˆÜc£gðÇz’ÆÙÝês�3Gc}r'Çöœ¿»Ä1Ç�ø÷çý^{uÇl×SEQÑtó¤è:všdKhà.7lP¹ÇáW¨¢€EŠ(¨üÏoÖ—ÌöýhôS<ÏoÖ�3Ûõ ÑLó=¿Z<ÏoÖ€E3Ìöýhó=¿Z}Ï3Ûõ£ÌöýhôS<ÏoÖ�3Ûõ ÑLó=¿Z<ÏoÖ€E3Ìöýhó=¿Z}Ï3Ûõ£ÌöýhôS<ÏoÖ�3Ûõ ÑLó=¿Z<ÏoÖ€E3Ìöýhó=¿Z}Ï3Ûõ£ÌöýhôS<ÏoÖ�3Ûõ ÑLó=¿Z<ÏoÖ€E3Ìöýhó=¿Z}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¢ƒEAESRÓ¡Õ,šÚbé’$�¶¼l9 §±€-ÑXVN¥-äWZåäW-jql�)D'ó\wrN‹Î:ÖíQѵX5Í&ßR¶IÁ*²€`‘Î ½jY/í¢Ô °yqs™íQézGuáKýSE¸�â·šÝ�íZG†E•|’ã(8cÓñ MºŸìÖ“\Ü"�ŸÆp3\ýŸ‹ÖïìÛtéØÏ¤.¨"ðHýØdó×"¸ÿè:ºßfôÜG©nìÿgȢ貰§2q¸‚0£¦0)³iš‰ðüH4ÛÝíá²ÙövÜ'\eÆA8ã×µz²6ôVÚW#8=E-yŠí¢½×n­oíZ[Xí- ܽ´Ó}„ ³í¬@ÜW¯qW-ô{Ù¼R.7ËkØæ°ºƒN’U¿.ÄYD�6ðT¯ryÍz�V³¿¶¿YšÖ_0C3Á'ÊFNsèkÏ,¼?5·Ø5(ì.“Qÿ„†]òm}ËlÒÉž;FAÓœ÷­ŸéÚ5îµlºCÚ\}¶fY…¹T’äÆñ‚=;Pµ‡Š­u+ñµŽ öæW…oD��I �2¤d€2:Öíp©u‰m›DÓu�8ÍvN£kpŸèf3�Χ%C“‚6{ŠÃ𥟟…>—¦^¦£ Ü’]Þ²²Å%¸2›ÉÃgåGB3Æ(Öè¯'Ó¬µ¦ÔZm/L¹Ó.ntÛ¨åÝm$h“áLa¤v>cœ>ôÏ"­M¦´ž–ßCѵ++¼Û�DÏî¸@ß¼Q–cu'i‡æ€=:Šå| a%�…çÏ*Á,û¢·{´X¾PÄwb<öÏÕPEPEPEPEPEPUtÛèµM.ÓP€8†ê�Œ0VPÃ>ø5 þ�uy2¼ÕõŠ…ÁŽÝ *O©ó#cŸÇV/‚´ë¨¼3¡\¾³,_`„ý‘ÒÌc"0ø¾lñÎhª¢Š(z(ª÷WÖÖFq&Ãq(†/”�Îr@ã§CÖ€,QEQEU›R³‚¥{„) ‹»>rŽváH üËøzPª(¢€ (¢€ (¢€ (¢€ (ªÏ¨Z¦¥œÒâêXšdM§”R¡ŽqŽ /Ï4fŠË¶ñ“yiaumx²Á+Clê¬|ÇPÄŽœ`#rp8¨4¿hšÌ�¥•Û“8&6ÞHD£ù ¨ ÇmÌIŒ àšå:OD¾ðÆ�¨ÞIusjÍ, ,»ftY@ÕX+ñÇ̬ª¨Šˆ¡UF óÍsÄÖúŽ——ªjbÞkV8šÌ�#!Fï³»‰ðTƒ³ù«7Áúߊn|Dм·—Vh¸‹”m©…y6郟áÈÿu{€zµæVšÿŠ5Ø"Ô-o /§Ä'¸‚ÏN‘‘�— ÌãÌeÎp:9Ï~êzŽ›nÆòÛ7¢[[]ÙG°™I³0åY ’§¡ã¸}Utý>×J±ŽÊÊ/*Þ<íMű’Iä’z“^k}âMU´{‹ë]W^µi4ùu ?µZؘäEÛÇȇß^¸5Ýx§QÔ4Ÿ ^ê:r[<ö±4Ä\îÛµT“ÂòO¢€6h¨m%iìà™€ $jÄ™#55QEQEfŠ(h¤¢€ŠJ\ÐE¢€ (¢€ (¢€'®cÆ·vö0è·WsG¼Z¬,òHØU_’k§¢€8�W_±Ôµ+'ÓEáö†]×vS•V¸ ›Q¤^GÊI¿áЧ¥}%®Š'Ð5][^µ¸´ÓÙíím'$cÏ,@E‘Y @ògxÁß�CTü%á©ômoí2躜2}¥Ù[iÁc“çøLnµé?iƒtKçǺ`LCxË€2vúñÏE<7 Í © WdbŒqÜ‚(ίôÉ$½²{ x’ÖØ\3Ýâ#VŒ«|¨«q…ùÊœ ½Ò´å²gƒBŠÓEÔ,’-_Ì”]0–B 2æFew$d�–>ƒÒ»¹�‘]fŒ« «#Úž®Ž2Œ­ô9 -Ô|6…áÛ£ Û\Íý™&ŸiÚc$³³ìÃÊC¶OÉ×|Æ»ŸXêZ§‡nôÝ1- —q<×2²VR26«dóÓ�­mÑ@tˆïbÒà‹PŽÝ.cPŒ-ägLªžžÕzŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ÅQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@PÖt˜u­6K9ÉPØ*㪰èjýQ“„”£º¢¤œ^Ç™?Ã�T9 ufËØ³0?–ÓMÿ…s¬ÏÍ�ýöÿüMz}èÿkb{¯¸áþΡٞaÿ çXÿŸ›ûíÿøš?á\ëóócÿ}¿ÿ^ŸEÚØžëîìêg˜¹Ö?çæÇþûþ&�øW:ÇüüØÿßoÿÄ×§ÑGö¶'ºûƒû:‡™æð®u�ùù±ÿ¾ßÿ‰£þαÿ?6?÷Ûÿñ5éôQý­‰î¾àþΡæpGÃÙ ¾ŽmJâŠ6 åÓ¼ŽÄ�0+¿¢ŠäÄbjb%z�c¦�QV‚+\Zù­¹H ß=ê°ËýäüÍhQ\æÆØeþò~f�°ËýäüÍhQ@ÿa—ûÉùš>Ã/÷“ó5¡Egý†_ï'æhû ¿ÞOÌÖ…Ÿö¼Ÿ™£ì2ÿy?3ZPØeþò~f”X¾~fP=ªýÔPˆtÉá&3‚:–ŠÏû ¿ÞOÌÑö¼Ÿ™­ (?ì2ÿy?3GØeþò~f´(  ÿ°ËýäüÍa—ûÉùšÐ¢€3þÃ/÷“ó4}†_ï'ækBŠÏû ¿ÞOÌÑö¼Ÿ™­ (?ì2ÿy?3Và„B˜ÎIêjZ(4Ph  ôQEQEyœWðY—̹2�÷þÒù>¤óŠÜÑ5y/5khÄólbÙV�°?)àçßùS$ø‡æÔX�ÐAþµwHð‚é:„7Bõ¤g åí ޹÷¯fµl$ ìõ³èÏ&• Lf¯µü‰’ö‰TY@y1“€vGÀþéëšñ�Xå<{suôo$öz{A¤ cµûb Cæˆ3Y¿v�6ž­o Ã=¾¾ò¥¼—7Rêw�nn/U ¹Ëˆâ»vqŸ�÷9Æ+cÅ>¾Öæ¹{y#]5,—uܰ…mÎY˜ ÃŒ0¶Aç¥.—áMKJÖ¦¹··Ò”M}-Ä—ÛÙ®'fo/iL(ä†íšá�|-í4øVÞëìá졎1(XІm’H¥²Ç�Çð9¬ÈþëÁ{1Ôm滹 æ&ç�%fVË3€NÍ3mÁ ÈÅv�.‹o,-xÓÆå�ýѪÀz ¶MkÑEQEQEQEQEQEQEQEQEQEbªÜ\26Äà÷5j³îãá¿å@Úfþÿè(ûLßßýQº¿³±Ùö»¸-üõ<Ùn>ƒ=jÆr2(o´ÍýÿÐQö™¿¿ú ­4Ñ[ÂóM"G ³»z’iô7Úfþÿè(ûLßßýQ·¿³»šxm® š[vÛ2G cô`:Z±@}¦oïþ‚�´ÍýÿÐVkê¶ aöïµÂÖ»Ây±¶õÜ[f23ü\}jX/-îf¸†CÉnâ9T �ȃøÐß´ÍýÿÐQö™¿¿ú ¢oìÅà³7p ¢2 óò=vç5b€&ûLßßýi›ûÿ ¨j9n!�¢J‘™_ËŒ3½°N©À'Ôkí3ô}¦oïþ‚«E4SÇæC"H™#r0# àŒ�B¢)¢˜1ŠD�+bŒpA÷gí3ô}¦oïþ‚¡¢€&ûLßßýi›ûÿ ¨h  ¾Ó7÷ÿAGÚfþÿè*(o´ÍýÿÐQö™¿¿ú †Š›í3ô ©Aå³íІŠÔ�Ĉw§TVßñî¿�ó©h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(4Ph  ôQEQEfEây„Qê6ìç ßŒÕØîí¦}‘\Díè® ¯1}ií¢D‹î�€çvÅkxsR7ºÝ˜|—#އcW©W-pƒšÙ#Í¥�æ’‹[�†±«[hšd·÷BFHðq.瑉ªŽìI É;ðù‚„÷…&WxÈÓîå\n`6t‡=9«/·’ãÃW^Rx‡š žH¶mçp(A$c!r=Åy †¥o¦[C%ž¨þZA%ºæ·¹�Å7—Ç–.ò¬ ôUFEyg¤{ÏŠ´›Sdd�¼»¸>Ò’„;R,¨ýÔê2G×4Xø³GÔ5 4ø®ÑoRY¢6ìFÿÝ1Vb8^ ã"¼·â…Ž—t¶“˺km(âp-—Íu.¹a)ÜG„É­ÿ †—Z¸°²¸š+eÔîžá!±lðÎ’à¶'�»Iéõ ªãÇž·¹µ„ë–}¡Êy‘ÝFËœ¹ÝòƒŒgÔŠºþ%ÑþÀo¡¿†êÑeX^kW¬lĸ®p9'¦k…¶µÔ48SJÔôíVg¹Q§Øµ„ðG*)`P™ÞB’]ÀÎ1�ÐÛ[ ý>ÛD—P�ʽº×Èxà[Ȫ\+2Â�¸qÀ=s@%Ï�´;4•î^þ(âÎ÷m2ä*�Ôîòñ�zÖÔõ;=Nšþúe†ÚÜî�Éèx´z¤÷~�QûA“÷\(Ö$¼&Aåa¤�¸‰¹nz‘Ú½þÓ;ÑÖâái’ ±²ÕUp3¹€ÜÙ<ñŠê­î!»¶ŠæÞE’P::œ†R2¬9Ö[-Fkô…ï"¶x¡UIUV%b¦T( I%½0êZ^©k¬X­å™�Ä]Ó÷‘´lX«¬G5r¹ï2·…`aæï3Ü|ÕUo7Î}ü+0vìrxÇ5ÐÐEPEPEPEPEPEPEPŠÏ¹ÿ�†ü?•hV}Ïü|7áü¨�ñ &²Ú…½Ö›%Ü6{&±¿#kŸœƒÕ 9Á#ŠÍÔ¼U,ZTwúdÏo½¬5“E¢„bÇq%zlcð®ÖëO²¾(nìíî g(e‰_iöÈâ›q¥é÷rù·6³I³Ëß$*Ço÷rGOjáu9/lÇK©ÈÍ Ž "‰”æ à®H¨ìqÎO5»w©^Ûø�G5ñŽÂIEºÆà;(ùdçV$ðGËŒf·®4Í>îG’æÆÚi34�«CÕI#§µ)Óìšô^Kst£sÞ¦ìf€8mòçÃÚ–¡u¨<ºcÞ]Çt$HÇ–L¯µò¼¸ëÖO@1·u©jV^7—¾«qG€ Í+b4ãå,£>Ù'½hjZwöÑX£Eo§y›î-Òûï˜>3œ(-’x$çµiË3ìóbI60tÞ íaÐ�Cï@hwéš«¢Ia=„I-•Í´34dì2Æ�‚ŒÃï!cÎ~zë¼>â{âqßíèò^*ÙžÆÎé‹\ZA3ÌDÉbP�JóØàqì*D·‚)¤š8cId;ª€Ì@O|dâ€9O ¶’º £_›1©} ‹“6ß3í[È=yÝ»§¶1ÅCa¯ê2¾—y%ìr}¾õí¤Ó„j 7ô#æÜ»Fìñ×âºÓ§ÙÑxm-ÍÐùc~?ÞÆhK 8ïí- [—y–0‡¡n¦€9 ;XÖ[û&öâýe‚óSžÉ­ü…PZ`­¸s¸ycÛ¦yª†þçT¸ðíõ΢ŒfÕˆ Š<�«(Æ~ñ#9ã' ®él,Ñ#E´�R) ±¨ŒŽs–„înzò}iƒKÓÅѺ6ßh,Ëä®òáÎ3šáíd¼¿ºðô墳®nïÓ÷QDªvÉ W*0>¼ÕÈu‹çš;$ºŽÍnu[ÈMЉ2‹bªwu`xSÔ×Xú^Ÿ%ºÛ½�³@®dXÌ*T9$–ÎI9õ4é4ëmä·’ÊÝà•ËÉD¥]‰É$c“Îh“·Öu}Bm:Ò+øâó.îížé!V$Cåu€xÇq�xÆ)ŸÛzĺ5´ßlÁ5ÌwO Ä&uŠB�ÕåÆXy®Ém-”ÂVÞ `E„»`íôãŽ*4�6h–)tûG�\È¡R“’ØÇRyÏ­Mg:]Y[ÜFþbKº¾Ý»�¾•5``t¢€ (¢€ ¡ªh¤ >šQ剷5»à ׺îþîLõã¥ú(#MºÔ5;£vðKe`ªV;yÐ enìÃø@èSÔñŠ×¢ŠÑ¶ÿ�uü�KQ[Ǻþ?Î¥ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÑA¢€+ÑEQEŽ|+¢OØŸGoñ©­4 .Æån-­%\ímÌq‘Žæ¨Ûx Îê[K¸H˜d9t$zdg5~ßY·¸¹ŽªòpàØœp uOë)5&þóšƒwŠ_qnêÙ/,çµ—>\Ñ´m´ó‚0qù×?'�t©4å±k­Xªªµ9Ùp¸ÇÊX¯n˜ÅtÔW)Òaë>¶Ö¥ºy®îàûUªÚJ e£ Ä�™O]äÓ>¶†ôLºŽ¡öqv÷‚̲yBV$“�›ú±8Ý] ÎIà�.i"’[�]Þß6«pJ6È;ø8$qØš´¾³Qf>Ó|ÿe»hgºy‰pŒ˜&BÇnð1ÍlÑ@ºÖ‹¹¥M§M4ÐC0Û)ƒhf^ë’ÛŸzž2ÊßQ¸Ô#�EÝÀU’bIb pzaÇz·EPþư—–Ë ,W’´³…•ÁgldäŒàtÅe7�t5¹†{X®,Z4tÿA� /¸©%Ùf? ê¦:J(†�¤ÛèzbXZ¼Ï;¸iŸ{’î\å»òǯ5~Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ÅU¸·gméÉî*ÕŸöi¿¹úŠ>Í7÷?QZPÙ¦þçê(û4ßÜýEhQ@ÿf›ûŸ¨£ìÓsõ¡Egýšoî~¢�³MýÏÔV…Ÿöi¿¹úŠ>Í7÷?QZPÙ¦þçê(û4ßÜýEhQ@ÿf›ûŸ¨£ìÓsõ¡Egýšoî~¢�³MýÏÔV…Ÿöi¿¹úŠ>Í7÷?QZPÙ¦þçê(û4ßÜýEhQ@ÿf›ûŸ¨£ìÓsõ¡Egýšoî~¢�k)<®=óZPcA©ÔQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¢ƒEW¢Š(¢Š(È..®H ŠÀƒÈ9µá[‰¥×mÕ³‡ÜqÓå5è´W©S2Sƒ‡&þð:$Ô¹¶ò1|Ve¹X=ñbŠÐ¦âv—mªC0� óŒw®ÒÖò×GÔíDº—N“RˆÅYJ«f YÄ·2îswS“Œ^§Eyg¢yeµ¥êxv ÍêkOí+�‚[9$EŒ§î�*I d�µص � hÚ~¥¢^LÉ Ê‰%¶’f�„…cM�ÀS´‰:æ½^ŠÉð±»>Ò>Þ%[±i˜L}ûFwÎ}sZÔQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@*�ÜŒd)œ(íW«>çþ>ðþT �ªøŽÏJ¹KY£¼3Ê1—e,ªí‚p ©à@ç©è~.‹S¶—V7öÚ£D�< e2¬Dç’Åp�pIí@%ÃêŸ>ÃäÐÚ¬ñ/Ú>Ìè®àˆ‚‚_h8BÊ ÀÂç5·{âh#Ñe¿³·¼�ÕŠGYN¬îq�›€?ÞÆ3Þ€7h®ÇâU�þ¥-µ¼RÊ©r¶ZLÍ>X%™UIÝæn\qÓ?Y¼AãÑ¢êïeéRòòfÔ N¥Ø/̾YÆ7n<ýÑŸjíh¬+Ä ªjgXcX¶Lw+îÜc”&AãƒÖ·¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(UÙ*pkQr+zŒÖUiÅþ¥?ÝJâFyXÀ8¡§Ëþ¹ÿÞ5�{¯Áixö‘ÚÞ^M‡™mbßåÓvHäã Éö  j)ƒ¢°Èdd`þT´QPÇw·SÛ$™š¦EÁùwr?•3›h„‚f˪í‰ry gè3“ì(j(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ |r4l?QëL¢€5«2IF$Ÿ ô­:É ŠÂÿ„³NútÌ&A}vÖq«(ÊÈ”îç�¹qÆzŠKŸ[Ásöhtûë©�ÓÚªB©ó2 v#s�€> ñ@ÔVñU—‘Gow-Ì“<Í"hu`A çŒi×~(±±µ‚âêßP‰f;@û¬U·m v©Á'�둌ÐÕËiž3Žg[]BÃQ·½ydF4ùÀ’5|+Œ¯sž„óŠMGÆIc©\B�yöðÌ–Å¢Vw”g•A$*„íÕ»b€:ª+ÃZü^ Òmî–9Rf‚9&V‚HÔ3.HV` ç�OoQ[4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE5¼Œ’¨‚pEhVd_ë“ýáZtQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUÔ¯âÒ´«ÍFpæXy ±URÇøjŠ( Š( Š( Š( ÑA¢€+ÑEQEÅÁâEd¹¿µÛ�š?³�ôujéúô·—ðÛþå–BrUH# Nzœô®No kÒ`ym?­jxw@Õì5{in¡U†=Û›ÌSÕH詯fµ,/#’’½ŸcÉ¥ëþ>ðþTÊø²úÏì_bYÙµmË-”ã|Þjœ«mþîx$à`œš§áÛØškÛ]qþɯ_9ó �ìÜ aD'?2…îrI8®´E•¥¨‘€Àä�Ðf•ã�ÙÑX¡Ê’3´ú�Jòë�k?ëòiÓZ[ÚD/mš&¶gv�&— x 0ºéõèïàÑÁÕ5=>T†mÓɧ£&ÊH2çqŸÐôÆÎÙ­ä·kxL2–2FPmrÇ-‘Ð䓟Zt°C1C,I!FÜ…Ô§ÔzòËi§idz.›¦%ÜÂ{ ™od¶Û„XÀ�ÄGiÄ`í;r|§š¿ãJÚÔjrÁ¥ËuåÃ7ïuDYbxO˜‘¤[á¸g‚ÛˆÈã‹41\DÑOKuGPÀþ�&/ùæŸ÷È CÂ×–·ÚåÅÓ_ifâH¿ume¨G8PÇt‡jÆ­’ÀIn§¥vTÕ�åQAõ�@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@š®›5ËÇya0ƒQ€¶vH§ª8Tþ`ò=×KÓeµinïfêy®¹€tD”dû“É­*(­8¿Ô§û¢³+N/õ)þè  ù×?ûƹhåŸAÖõw–Âòêù’â-¢ó9ªl}ß¹�Oõ⺙×?ûÆ™@·eyswªÉ6�{-ìñ'öD‘E³y} ˆÈ|’IÁrzTZ¶‰s*x¢ù­.%Ô#Ég"+ó"™hÀà�دA¢€8{Í:+k·qè/sqs<E ù¾R$ס{Vtv¿fÔa·°¹KF¼Ó¦†5´xTŸ8P’F‚sõ>µé4Py£NßÛz‚ÙÜ›èõ˜ÑÀ|ˆÿp þî7‚GPzV†›jöÞ0šH¬g•fyZk›ˆΓ;dBpŽTW_EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE‘©i·ŸkŽ‘4Q^• $säÅ:öÜ!†rú:kÑ@t½4iÐ8ižâæfó'�úÈý:v €*õPµdÖµdО\h—÷‡ˆ`KIV;1%ÆžåNÉe”¤Ão©WŒŽ:n÷©­´›û¸|;!ûuŒÓÝÝ]ÜI`I˜®Á[r�½Bò+½¢€9mOHÓìl¡†K-Nç3<æöÔ–ž9HûùS»$qÀÆÅBo£O 5§‰®$Y®L‘ÁíR¦ãå�‹ÿ-0ð8>•×Ó Q™VS™Ž@=FhŠðö§-¾¨òø­�ž«4i·œFñŸ•�+½›%—9è5žƒ-¾­¯�&{[SorÙk‹v��™,Ø;×�I'=>îHã•vÈŠë�pÃ##¡¦¬+JË”æBeÎç×€ÐP?àˆuð¾”÷W–ó[µ„LqÛd1s»�a]%2(£‚†Ö8‘B¢ ÀP8ÐS袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(óJÔb¼’ãE»ŠßíG1Ì¥•OO5gÇn‡ŒôçKO°‡M³[hK°³<�¹�‰Éf=É<Õª(ñ®O÷…iÖd_ë“ýáZtQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW)ã}6î_ k×)­_Åö|çìˆ�Î"91—Áïógž®®ŠÎ°Ó®¬æi'֯w PsÔyq©ÏãŽzV�PEP0%H©#¨íP}ž_ùýŸòOþ&¬Q@Q@¢ƒEW¢Š(¢Š(¢¼Î+ø,ŠK¾äÊßûKäú“Î+sDÕä¼Õ­£ͱ‹eZBÀü§ƒŸå]õ0„\º#†ž:j6Õ�…Îxî[ˆ||ö·RÚÎLJ³BÅY3*Aư`ñTÉ­Z>©4�¾Ÿ§Þ�N'i’#Þ¡Ê�ËìõÀwƒEp0|N·žÚêQe´-ÙH/’\C½UË+(`vóŸZ¿'ŽâÚ•œV&Im® ¶¶Ì¸&I<¶#ްpzýßzëè®SÆêf{  ”š\{þ×™.Ë�Üla‚ (ù² ç‘Á¨­¼Q!:nŸ¢@úןd÷ sqr"$#„;þN¹8霎GS@…ÇÜøè&�g«[ØFÑÏŒÑÜ^$,¬„†E%Û ô㨫Qø®mFê8t]-¯@¶†æw’q�e@2æÀ'z騮.ßâ-…ψND€Ã%Ù³IÚŒ€‘“P„ŒÏ¡Æ*çŒ>Ñ úÌ×PÄÒÞŠ)6¤ŠÍÈ`:ôéœPQEPEPEPEPEPEPEPEPІku—œá½jj(§Ø¿é§þ;GØ¿é§þ;Vè  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÑö/úiÿŽÕº(§Ø¿é§þ;GØ¿é§þ;Vè  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÑö/úiÿŽÕº(§Ø¿é§þ;GØ¿é§þ;Vè  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÑö/úiÿŽÕº(§Ø¿é§þ;GØ¿é§þ;Vè  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÑö/úiÿŽÕº(§Ø¿é§þ;GØ¿é§þ;Vè  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÑö/úiÿŽÕº(ªÙ¨l³dzcjŠ( m–FÜÓÞ£ûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPO±ÓOüv�±ÓOüv­Ñ@>ÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇhûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPO±ÓOüv�±ÓOüv­Ñ@>ÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇhûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPO±ÓOüv�±ÓOüv­Ñ@>ÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇhûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPO±ÓOüv�±ÓOüv­Ñ@>ÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇhûý4ÿÇjÝSì_ôÓÿ£ì_ôÓÿ«tPO±ÓOüv�±ÓOüv­Ñ@>ÅÿM?ñÚ>ÅÿM?ñÚ·ETûý4ÿÇiñÚ*0fmØö«PUä´WbÊÛsíV(  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÑö/úiÿŽÕº(§Ø¿é§þ;GØ¿é§þ;Vè  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÑö/úiÿŽÕº(§Ø¿é§þ;GØ¿é§þ;Vè  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÑö/úiÿŽÕº(§Ø¿é§þ;GØ¿é§þ;Vè  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÑö/úiÿŽÕº(§Ø¿é§þ;GØ¿é§þ;Vè  Ÿbÿ¦Ÿøíbÿ¦Ÿøí[¢€*}‹þšã´}‹þšãµnŠ©ö/úiÿŽÑö/úiÿŽÕº(§Ø¿é§þ;GØ¿é§þ;Vè "¶XÛq;�jžŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(4Ph  ôQEQEq’|?ŽCój,@<?Ö®é]'P†è^´‚ pž^Ðrë“ëZqx‡Gžaz�»9è7ã5v;»iŸdW;z+‚k¶¦+âã6ìü¿à°Ãáò¾¯¥Á­i’Ø\¼‰… 1�å`è=ÀªW^Òï5é5yãfžk7²š<�’ÆÝw g8Îz~­suoen÷sÅ �ÒJáUrp2O“C\À·)nÓF'‘K¤E†æQŒ�:�2?1\GQ“mᨠ±¹±›QÔ.í'€ÛùW2«B1�òƒÓ¹$ÕKOé6sèÓ$—LúH“Ê.àù¥É%¤ãæ ±#äšé¨  ½WD]Rh¦]GP²š5(Ò}¹SÔ ©é×÷®yüÑkúrXO{c§[iÓCö›yÔHdiQˆ;�'wÌIÇ_CŠë/u -:!-õ彬dí<¡>™&§ŽD–5’7WFVS�G¨4ÍÉà}0ÇoµÅõšCjÖ„[Ì™;ˆbA9$“‘ƒÏZ‘|gÙ�¥ö£fðÛEjïo0SŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ÅQ@Kq*ŘeFvädý*¶—«Ùkm­ý¤Á¡¹�dŒ1°GB=kÆú•>žu»�;NšëOa;5ÔI‰£PCFÌÝŠ“ŒðiíYþÑôMTÞø—NÒ´ÛV•¼«KhÁ¶ ‘¹‚ý×,I=ñ´”Ð^ø»I°Þt’ÿ¡ù›öÆNï-ßo®¨>ç¸î±£;°UQ’Äàë^'£Iƒuw½Ónush—ñ%ëù;!�\K¾\3†Üv©8SÀï]�õ¾—gá[„¹ð�ý…Œr4ïgkå.’Î#r¥pÞ<�84±¥øëÃZ¹D¶Ö,üÙ%1G Ì«#�ÛF9ç·¨"­\ø—OµÕN´㉦”‹w؈£%‹‘·õÅéWšÜ§ßø«J¿{{yÒW·)˜Â4–M²eŸB€2N9Íføµ%¸ñž¥4qÝͧÇa$R!¾•’å~ULíd,ÑÆS$·q@‘¤øŸDÖÄK§ê–sÍ$b_³¥Â4ª0:¨$ŒgšÖ®Ã$Ûø¶x®"ˆÉ/Ú„rªck#żfܧìWw@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@OS–ú:u²OtÄ* j.OÞc×®' ¬« kHÔ!Í캭¥ÉÿJ30W‚L}ôíåž›;pFy †™—BN>ó=‰úŠßýYÿ}ÿô#@\j[^ÚY¹o:è¸�@Ï ¹$úƒêG­fé~/Ð5‰¼‹=RÕî<É`óWÌm„‚Bg8ùItæ¸ï[_�ÚºÞ¶ËËUµŠY!ºµWË)æÞAÁ(ð„lšôrÇ}n°+4Q[š8[KT¸š8¬ìâDÌÍo12Bîp2@É95•¡i6V~2ºH¼ "›k{6Œ1µ-nÁ¥ýé>gS�ÊäüœöÈ}}â >åí¦2ùÊð)P�|éhA<¸óŽ”ñ®Ù*ãS{ZÀάɹ;[i* à òlô¯'ñŽ�áÆžk�fÉ­Øßª¯Ùty¡VO0å*<Æ(ðqŒ�àÖõ–‹hž×,t»ia‰âM—-¦\YN';Š"™ŠŒ�|Ý\�¶×Æz-às —Ccˆñ-œ±åÊ�Ê9Ø7}õÙ´¹ŽöÊ ¨³åÏÈ›†dgó¯#…´»GU·±ƒV–T’+»AEÏâ+”Ô¼'—ð³S]?ìv·’YIqwui �8a¤dR?ƒøG¢ô¬½KG„kÚKÝøF{ùnoægš_³µ'‘&Ä\ɨU 6>ç¯ë,Á±èMVÓ5u].ÓQ· º‰fŒ8ÁÚÃ##èk—ñ Zøoív÷Úž’Ën¶öÚ\ßi�ü±Ç÷’H+cJ­à­>îÂÀZßkÚ‡Ÿ£"{lç#'€; ÍF ‹(f-¾òo", üÛùôá [® »¸O ß^|ËÝf[”ŽRsoæ4Áé„ÛÇ®kÃW Ú–•u$’˧ÝId$´‘8$õ 6Üÿ³@ÔQEQEQEQEQEQEQEQEQEQEQEQEQEŠ ^Š( Š( +}ií¢D‹î�€çvÅkxsR7ºÝ˜|—#އcWL|+¢OØŸGoñ©­4 .Æån-­%\ímÌq‘Žæ½z¸Ü< â¢îÓìytðuc4Ü´^¦WÄ(Ò__Ç"†GhU�î Éšå´o´O )£{«ÍH½h g70þí¢'ÔáJŸu>µé—ð]ÂÐÜÃÑ6 I2œŽ¸�Ú[5Úݵ¼FåƳ“’¡ºã�Åy¨yÍ¿ˆ§>�m§ÞÃáë ôéæ1¬Q2«Ç(O�°ÆÌAÇ#œwåî›c©F±ßÙ[]"œªÏ¸Ô+2óÂÖ7úíµýÔ6Ó[AfÖ«i-º²rêÁ†xÛŒc¿Zä¥ñv§uá»ãÔM¶ l¥º‘b†-ŽªåVFiN¶ÜáA<ö«öž!Ô5«ÈÃêðh±G§ZÞ`Æ�ç™T–9~ˆ¸Çäõ®¾çJÓ¯ &ëOµœÀ1–o/ýÜŽ? It}.t·I´Û9ؼ D@t ‘òô(ŠÒüIâ-GÄ;’6û(Ô$µ–ÙšÝR8”²îåüÝüÆ0Fp1ƒZ>8þÍ–Ú]--ídÖµX~Í:®èãç23u ¹$zœÍtÇKÓÍø¿6¦ô �%|̽ŒÔ7ÞÑu;�´_ésm æOl’6l‘œPÛtÛD‹!�*œîã­IL†­àŽcH¢�B""…UP0 Ÿ@Q@Q@Q@Q@Q@Q@Q@(¢ŠË»ðý…þ§õêËpÑ`Å ² 0þ!ÝÝîAéÆ(oiçY]Z$’Þó9‘ •‘fã¼PpÿˆÏ©EdKáË)t=CHg˜[_´í) 7+368åŽ8­ ëHïì.læ,"¸‰¢}§k?:žŠæÏ�ôr�/™©"HåMú”ò.Qƒ.Uœ©QÛéŠØ“L·—S[öÜdXL!xÛ‚Á³ŒuÊŠ¹EPÒ´˜´«v�f–âG‘åyçÚ]™�'僠*ýPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPL‰ !y�äš}BëH¶»Ô¡¿�¿� @˜ÆvF-ÈûÀƤÕ ‡‡´û Lè’MrT§Ÿ<�#…=B“÷ô\ Õ¢€9øü Ae•½ŠÁi‡xb;Vr:y½Üt8'·5,žÓ_K¼ÓWÏŠÎêQ+EÄÈ`ß'÷#8êqŠÛ¢€9ÖðNŽf·”6£¾ ã�7ê3È»‘ƒ «¹�;U›¿ Ø^›ÇœÎfº–9LÂLVÉüˆþ´ú(»qwi-¹–X„ŠWÌ…öºûƒØÖt^ÑbÒåÓ~ÁÛLÛååÚFþó1ù‹{“š×¢€2bðí¤0ØD&»‘lnMÄ&iÌ�¸«¦ 6IPàgÒ­C¦Ã­w©+?ŸuQ8$m2åqïûÆÏáW(  ˆ<7§Å-ôÂkË™({¹L¢4nªŠxQŽ8޹¨að¥�µ¼¶Ð\êPÚ¾6Áô¨±`ôBÀãÚ·h px'J[†¸:À�Ð#H5k�Ì ’>fp <{ŸZÞµ·KKhíÑåuŒm ,�#«1$ŸrjZ(¢Š(¢Š(¢Š(¦L†H$AŒ²�3ô§Ñ@eYø{O³½š÷d—sd4÷2X)þÝ÷WØ`V­„žÒá²Ôl­ÅÄ—ð42[Ç3yq†„<öö«óéP\\éÓ»HO�ÉÁ&6�æãžúsW¨  hö“ëj“ %žÛ »’‘rʽqž¸üh¸Ñí.5k}P‰#»€Då|Ä9ù¼¹9ô5~ŠËºÑ#¼Öm5îî˜Z7™ ¶TD¯µ—ÝÝœ1{Õ©EQEQEQEQEQEQEQEQEQEQEQEQEQE(4Pz(¢€ (¢€9ûoÝKiw  ‡.„�LŒæ¯Ûë6÷1À#•^BBî{ޝ1¸º¹ *+ äV×…n&—]´GVÎqÇO”׳[/„`æº&y4±µÔ_Vw—÷öÚe”·—’ùVñ]ö“Œœtõ5f¹¯éGXðuõ¼vŸj™vËaw1*À�£×náø×ªh·7Z›µµ­Ý–œðFº^Í&YÐŒîÚDò_wÍ–^Aö¯õ�X$Iè* ë}J ëI<ËiÐIí#ržAÁäW>�ÒøÂpÚ\÷ÿkwK‰o-YD)åÊJÆŒà~ìŒüÙ­¿‡¶Qiþ¶´l¶Q*­ÒÉŒÉ(P²~öq÷‡ZꨢŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š±P»°r⦨$ÿXhó×ô£Ì_Ò™E8ÊÀdµPmOV ßE‘èsF®ÅtkÒ…ÿ•yˆ|�¼Ô×£‚ÁG)=�3Ž–J1W¹éßð�ißóý\†én!Ya•^6V^A¯%/�âèk[AÖåÒ$Ul½£àºz{�ç]²«BôÝÙÍC8¼Ôj«#Ò<Çõý(ó×ô¨ ž+˜h\E9=çSì“ì&ì <¬ïþ,g§Ò¯­–›d¿bÔ¯oå¼d¶=ƒzŸ_J/í.´ï <78 öàU�ʺùgàרêÅ´—W÷¯#ÊöI¹t_só:�9}ã$�'=Oû"ºi_Ë…ß*6©9s�øžÂ¹?‡�»E¹?ôðô®¶LÛ ‘ƒÂõ?JùœÁ[5æ}>_þíCÅäñ—‰ ‹T’æb–Â6†•‘ʳ²(GCåôçÉ K ãØêž"×&ðÌ—pØZÛ<:”VÌë¨1-Â#|ÞPà¶TúO=+#Nðþ­e=ܯ¥Þ]Cv%ŽÞ;‹§mÌü 'Fv ÐÀ– sɬÝèØè—úUÅÍÍ�ô)Ĭñ\©•Yä`0S~wðŸc\ga�wãkíº„_Ûwpê_hºŽÞ4ºÓ–Ý » æb@¸–Á=ºÖŽ¿âmCOñ ÓêʛUp}ªÒ($_(2�flä³|Ì£îàg UeÓ|Ikeq,ZÄW6ë%Í”v±Zc’T.ÊÞgÎØg íÏLk{źv¯w®i³Ø[]ÈÎD‘íÙ“²³ÃèxÜztî(xk]Ô§këk]RóP¹K)%´[™,ä„È¡ráf`w°À,>S횯Š—ÍÔXX”Ý1|êÄ:r§œÖ†µcsâ M-OLž-·íöÈ¢r@Q£!�çc8ÈlÎ+3DÒ5`ÐõC 4sið‹V‚gO1âb~u²gŒ�HgPf¥ã�~ÇXÔž2e´Dx`_±¢©‘àŸ<‘þ¥¾b>m˜Ú¼±¡x†úÓEÖÒâKë‰ìv _·˜K0lÆ¡š"A>j>sÎ1ɬ›ÿÝIâmcU’ÍU®-ˆX­mQÃ4�*¬vâLÙ˜Ÿãlðx׋@Õ#±Ö"žÔ}©íà–&‰ó��6ÐO!·±Æ1ƒžHóê�޽¢éîm嶺WIe ‰ ¤e²Â€H÷ü*Þ—{4·Ú�•Ë’ÖpQ€ÆèÜ_Ëæ_ø{Ö^£o­ê:Γ©X[Ø;lÊ¢æâHäo2=¤œc>¿•Om ûêµý¢Ä�-ÄPÇö€À4Qà9Àç92Û€z‹^ñm¶œVÚÎhå½p@ècfUß"«ÀÛXœg>Õ¤Þ Ò“RþÏkÅ;ÄxÚÛCžˆ_Cr>\çÚ°.|1«˜f°·šÈØÉª& $”¸—ýzÊÉ€1ØàçÐ`u©$ðµû,újÏmý—>¡öö”îóÔù¢R€cæÝœ�Ú€7†¹§6¨tÔ¸ßtÖUF*­Œí,ÐqÎ ÍhV—¦jzMíÄ0µ¤št÷RÝrÂe21b¸ÆÌNzqŽõ½@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W¾7‚Ôý�`k‚@{ g“Ç'·õb³õµÕŸI�4FµKö�§€rGaŠÂ�ĺ‹Ÿìá©Õ¢Ö 0VòؼÒûsž�¹ëÞ­ÛêzÖ£`ZÖ=> í嚦œ» hÛhá‡9'Ž85JÓÃÚ¬:}†!°‚óN¸3Ë—•n «¬†F(¤ÞN@<þUÿ‡ü@t…±³’ÂAwq-Æ¥æLðù�Û>ZŒBãå'©¶x†ëÆ:„–º5Õ¿Ù¬-ïl ÜÒÜÚKp±œ¦÷l¸f;�«QÕd·þÌTž6óC\O$``Ãnb ç‚Å^�Ö¡š½‚Á zD!à1<[¤e„ò7)Ú7�»~R�y¨´�b–{9Siec™H¸.»v¸9AÇC@£ñmÕ�º]k6ð$7tšŒ+w" RѶOÌØuä`uâ´t^}B;™n¯4™R ­”¥Ì Ô£œœã׎üV`ð�Ýý¨´Õîah Ó¤Ó xÜáƒ#0¼ ޼Ó.´MQ–y.ÜKuo˜Ä0"ÿ<Œp6áK`võ9 Eâbk|ZÇo$éfu)VáJŸ.FsCoFÚ¤9Æ5,¾-77ðÁau¦[#E €ß˵§iáG;pIçï*Ö«¢_½ü÷ZL¶±5Õ˜²˜NäU,UÔ¤oo”ãè>µnÓOÖ4Í.ßO´º´‘-­"‰%¸G.ò)ÃnÁáJŽ;‚{Õx4­j;«ýP¾ž5 ±f�¡ò£ Æì¸—'8ã�ŽôýÄ‚öÁ&½hs-ãZ[Ïn¬bº d:uÀ8aÉÆTóÒ•µMb×Z´´»‚ÉÒôJ!HY·FQw Ìz‚8$(Á#­&‘¤êš`šMÖAï/¾Ñq òâ�`R±ôËeA$€ONÇOñâcIQÕÇ8Î21Ó½dZxÂúòÚãm´ qý«­°9!íÝÆ$<õØ$?ðèÄ:Tš—öz^)¸Þckm.3” �¥†TñX‘x9í¼A¢]Á,Keaj‘K's¼héc�+ç>ÔAá{øÖ×Nyí¿²íoÍòJ»¼ö>cHŒ`|ÍËg�:s@©â­ážU¾Sl�±°­»fÜã–ÝÆÑÉÈã‘Qè:÷öÖ£«¤{Mµ¤Ñ¤'Ëdr5c¸7 äžÂ¨Åá‹è|;kj“[‹Û]FKèó¸Æù™Ü+qŸºøÎ8#¾+CBÓ/ìõ Z÷Pko2þXä nX„Û¦2@ÏÝëü¨nŠ( Š(  _êWÚF“öË$¶}’Ʋ ÷}Öu^ïÏ­UñF¹}¡¢ÏéÛHýÕ´ÌÞuÛçý\`c¦Í× ©¼Ya«jšWØtÈì›Ìeiæv�n×V �œàƒÓõ_ZÓuígL–ÆDÒV;¨<¹ snÄY>~Äd/"€4ƒâë�Meij-MÂGçj,2V$…EÎöÆy8dõ©iÞ5¼¹Ôb†K½"w—P’Óû>Væ4Y|×9WqùGwKðŒú=ž‘-—ÙcÔ-$qrT�—HÙpN2OÝa‘ÕqÐÕx<-«µ™Ó.MŽÔj x·QÈï6 æP”Oðçqï@½Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@�ý`©êÿÖ ž€EНEÂjÞ>–Ù!Ó­áxã%|ÉrwÜGчÃTÄJÔÖÆ5«ÂмÙÝÑ^kÿ VÿŸ{/ûáÿøª?áajßóïeÿ|?ÿ]Ù8žËï9¿´hy‰7…5é0<€6÷YWŸÖµ<; jö½´·PªÃíÍæ)ê¤tÔÖgü,-[þ}ì¿ï‡ÿâ¨ÿ……«Ͻ—ýðÿüUz¥Žœ�™Ç àã%$Þ‡iâm&Msךt2¤rÌ£c8;C 3ŽÙ‘.ƒ¬Ýj—Ws]GNwj’;ˆó0ÑåFá󌃎•…ÿ VÿŸ{/ûáÿøª?áajßóïeÿ|?ÿ^öN'²ûÎÏígmáë[ûÖÏQÞu¼k6î̬ª óA8éúÖ¥y¯ü,-[þ}ì¿ï‡ÿâ¨ÿ……«Ͻ—ýðÿüUÙ8žËïíg¥Q^kÿ VÿŸ{/ûáÿøª?áajßóïeÿ|?ÿGöN'²ûÃûF‡™éTWšÿÂÂÕ¿çÞËþøþ*�øXZ·üûÙßÿÅQý“‰ì¾ðþÑ¡æzUæ¿ð°µoù÷²ÿ¾ÿŠ£þ­ÿ>ö_÷ÃÿñTdâ{/¼?´hyž•Ey¯ü,-[þ}ì¿ï‡ÿâ¨ÿ……«Ͻ—ýðÿüUÙ8žËïíg¥Q^kÿ VÿŸ{/ûáÿøª?áajßóïeÿ|?ÿGöN'²ûÃûF‡™éTWšÿÂÂÕ¿çÞËþøþ*�øXZ·üûÙßÿÅQý“‰ì¾ðþÑ¡æzUæ¿ð°µoù÷²ÿ¾ÿŠ£þ­ÿ>ö_÷ÃÿñTdâ{/¼?´hyž•Ey¯ü,-[þ}ì¿ï‡ÿâ¨ÿ……«Ͻ—ýðÿüUÙ8žËïíg¥Q^kÿ VÿŸ{/ûáÿøª?áajßóïeÿ|?ÿGöN'²ûÃûF‡™éTWšÿÂÂÕ¿çÞËþøþ*�øXZ·üûÙßÿÅQý“‰ì¾ðþÑ¡æzUæÃ⫞m¬±þãñUÙø]‹]±3*yrÆvÉsƒê=�a_^„yæ´5£Œ¥V\±z›ÕŸë OPº1r@â¸Î¢:)þ[ú~´yoéúÐWˆA>Ô° ?f“§û¦¼oNÖ.4¹$–ÖVŽI#1–ÎÓŽž‡�Í{Á‰ˆ ®A¬wð~ˆîXé6Ù'' �å^¶_�¥‡„¡V7Lòñø˜‰Ætåf�3£NâO$“V¤Ön%ÒÓNy]­£1°vœÁëŽOëßð†è_ô ·ÿ?�ð†è_ô ·ÿ?�zO;Ã;^OCÏY6!^ÓZú˜ rt–#ƒrpà+]�2ÚÆ+;u‚Ú†%û¨€*o-ý?ZùüUeZ´ª%kžî‹£J4Û½†QOòßÓõ£ËOÖ¹ÍÆQOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ ?õ‚§¨Q8$qSPh Ñ@ëÂkÝ«Äo¬æÓï%µ� Ésßßé^îHÕæ½?SÈÍS´¯èW¢Š+ßýqPßçýˆÉm �Áäç¶9¬·™äÆð­Ž™†W1ù|môÍ 4îþóW4Õ¿COÃÑEs©µ¤±£ý¢#BÊÖÚJ‘ï�+¡‡K²HôÙÞ#öf½  ï&/4nõç"¸û;©,oaº‡d.sÐ�sϵ^>!½ÿ‰™Ä_ñ0ÿ[òŸ—¯ÝçŽ ø¨¯F¤çx=-ÿòy­´ãIký?ÍÇg ®œ×qéiböAçܨ'f;¹\|ÙéYñýšëDDÓ`°šD€ý¢)Sïç.­Ü¸·JØðï‡àÖôëMGVˆI²! ¼@�¾X'½I$ûtâºXô&›j®ÐÂ!œc~•åTÆÆœœUÛOåÔôa†”ÒoDþóÇ7/¨£rúŠöøG4OúÙß…ÿ ?áÑ?èeÿ~ü+í˜)‡ö\¿˜ñíËê(ܾ¢½‡þÍþ�6_÷áÂ�øG4OúÙß…ÿ ?¶aü¡ý—/æ<{rúŠ7/¨¯aÿ„oDÿ M—ýø_ð£þ½þ�_÷áÂ�í˜(eËù�ܾ¢�Ëê+ØáÑ?èeÿ~ü(ÿ„oDÿ E—ýø_ð£ûfÈÙrþcÇ·/¨£rúŠöøFôOúYß…ÿ _øFôOúXÿß…ÿ ?¶aü¡ý—/æ9Ú’&ô‘0C/PGzí­—Òœ-fyôsô望’=šŠÅðƲúÖ–f•6ËùnGFàûu­ªùÊ”åNnÝQN¤jAN;0¢°?á8ð§ý zWþ§øÖ¦�ªéú½»\i·¶÷p«2A u €q‘ß~u–èªVzµ†¡wykir’Ïfâ;„S÷ŒãüúÚ«èí¯6ˆ5o·… äùË»<ü¸Îw`géÍkQYº>½§ë¶×ØKæGÏ œs¹{ãÐŒê¬Ùüw ÚÀóÜ>¡(2òI¥]*¨õ$ÇÅt”T6—PßYÃwnÅ¡™‘±R¤©~4­s\¥³MžEgH‹ Ì£�:�2?1@ÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2i¢·…¥šDŽ4gvîM>Šª5;aöñ}ll±Ÿ´y«åã×vqDú�…µ´w7ÖÑ[É�’É*ª¶z`“ƒšµECqwmij÷W7CnƒsK#…E¤ž¢{¸-ÄFYùÒãà�Ìz�¡  ¨¨-ï­.äš;k¨&x[l«�ŠF¡úÒ[_ÙÞ¼©kwím‘b�1Cèpx4bŠ 5½,ˆÉ¿·O2W†1#„.êÅX(8Î#Šš]FÊ ¸­&¼·Žæ_õp¼ªþ€œš³ECuwmcžîâ+xW¬’¸E‰¦\j6V‘Å%Íå¼)16’UPäô“ÍY¢£žxmm丸–8a�K<’0UUI'€*¥¦¹¤ßÛÍqgªY\AúÙ!¸GXÿÞ à~4~ŠŠÚêÞöÝ.-gŠx_•’' ­ô#Š©½£O¨�:ZÂKåfSl—(ds¸m99ôÅhQUíïìï%š+k¸'’Û*Å b‡Ñ€<­X І;»ynf¶Žâ'ž¦X•ÁhÃ}ÝèÎ3Ö™£c8C 弞c´i²U;�s¹F$`ävÁ  4QEQEUdÔl¤Ô$ÓÒî¼�½¸�Or½@ä~u$—0C,1K4i$ĬHÌ�€I ;œxì(Z*±Ô,–)%7–â8å»™W ! l'<6Hë’*ÍQQGsÓM sFòÂBÊŠÀ”$²?�KEPEPEAsyke’êæ°PÒ¸PIè2{ÒO¨YZÏvðÍ1ÄQÉ Vsè ž ±E#0U,Ä$žÕ ¥õ¥ü&[;¨.b©xd2;dPôUa¨Ø˜`˜^[˜§p�¿š»dcÐ)Ï'ƒÀô¨-õÝ"òõìíµ[î�•h"¸Fu#¨*F(BŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÑA¢€+Õ{‹K ͬ‘ÓÍŒ6?:±E4ÚwBi=žš6�"+¦›bÊÃ!„A•/ö&“ÿ@»/üO𬯦ÝF÷û0Ÿìþ¨7Ýó³óù?ôÏôÝ�¼WC2ÈÐH±8ŽB¤#•ÜノÿJ¿kSùŸÞO³‡drsêþƒTŸNþÊó®ab¬¶ÚcM’–ÆÅ=7¨>ç0¾ð»è÷ZšiQ˜mfJ�aåÈ®JŒpñ­y¶¥>§á­*KÛ;™šö »ëdºK„ÌL»¤fˆÄÀ�å©$2úzgFö#uðöâêçH{ù.ïDâYn#• �”G~î=‡åÙ€¤ç4{ZŸÌþðöpì�C¸�öº­®�6Ÿd“\«´DÛ¦ÒW®qÁÁÎ=ôª7úŸƒ4íVm.ùt«[ˆáYI�#E!²õ6Ó��…ÄV·Ó5ìÒAD ‹$`îVàü§œã¾qÍ%��ôëû‹H–ÓP‰.fkušk}¨³ æ"s÷¾SÓ#Ž´ÒÒÖ—‹ôëýF+H¢ºÏ#Åotñ� î™Üç?ÂÜ�ÁÁ5•â-cR²ñ·›UþÆÓŒ)ök¦´Å4¤�Ë#Ÿ¹�—+œžh´¢¹»ïÙé×w¶ÒYj`�$ºžÞÑÆŒ»·çvqŒð2xïSÞx®ÎÆæ–ÚðÚÌñ¢Þ¬CÈ̘ÛÉ9 är<Ð튟>™x¶öSB ”ŒÁ”`~ú–f$79$‚5Ïk�4ž=º¶‹['í6R¥Ävv²o�`‹ Ì œ¹ß�”; å�¡mcmi=ÔÐG²K©D³Äîpª™ç§Êª8ô¨æÓ-®5ïeBÒÇ–ãž HT°#þ´Êxjù!·ÔÅ­��Ôºtikb'Ø.@ùä Ú PÜ“œ šÒx‹RñF‘e}¥èòÆ žámN¡)…Ù ÿsÉ]ÜäžÕé~Ót{…žÔ\´‰“¸»–o-2 TÇhùW§÷G¥>=5׎¯-åÔó,oQHWË…\©` (<”^¤Ðz½æ™ ]\ßAf5(íæž+KyÌžnÅÎ*¬{gŒ×#&£yi¯YêgQMfå4+ˤŠ$EýÓ]¼í$`g'ƒÉ¯Eh!y’g‰XÁåAe®là~U^ÛIÓlæó­tûH%ù¾x¡Uo›¹¾}p(�_êz~×[Èõ¿?I›PÙj¾S Rª6ÿ g'ަ¬Í¨ßÛxZ}MÍÁ¼=þ¸x^äÉä}ìí‹fìs»vügœî÷­­?VþÇKØc‡KœA¦Gqlú|[0 +-–9ÉÆÉàWgocii$Ò[ZÁ ÌÛ¥hã d>¬GSõª²hZsD±Em¼hK—X#T:0`[ž@?…rúõ†Ÿiáè¼:‘ÛͬßÙ‹5•Ôo ƒºg=B©fov8šg�>Ⱥ\� ÆŸ*Z´&ú  ÝM´£ GÏ F1�IÈÁkª¾ðö‹ª\ �CGÓîæ Iql’6l�N95/öF™æÛËý�iæ[(HÈ\Ä£€ãåÚ€2uß+þ}¯Ëû&n1æão�°lëÆvùŸ­r¶í—o©oÒ¤µ[{ØVùvµ3±Iäl 1ÆFÞEz=Õ¥µô »x®!n±Ê�ÔþŠŽ}6ÆçÉûE•´¾AÌ>dJÞYÿg#�€9 [Suà{};[ÖÒÔO£ÁðK°k|6JvÊû|ƒÔç­ñc.›¢iZ´÷ p4»È%’ထ¿tìv€>서8®�¬,Þ+ˆšÒË� c’%†>c€>‚‡°³’Àؽ¤ fSgÙÚ0cÛé·ǵyŽ™°jºf�<%_Y¹·Ö¥\çI%ƒÇÿ�VÝ·ˆõ9Êý¯coµj�`ÚP�s 3Ÿ½½Bï9ãÀèkµ6vÍsË[Âg‰JG)A¹ã  =©‹§Ù%ó_-�¸»aµ§/˜G¡lgÄÛëšÙÐbÔ&Õ~Ù©=‚3@�-�Né¼ú¶hÏ+Áç:> 5ï+Þýµ–ê3áAl@�Bñ‘ÓŒt®˜iöBÍìŤÕˇËq%²¸Ç$’}I¢ÖÂÎÅJÙÚAn­ŒˆcOA@(¢Š(¢ŠæBÂÒ¦ï0B•Î}³V|5w$—Z­œÉbÒZLŠ×Qyi.ä¹l2Œ§Œté[Ieiq´($PŽ07(ú€8Å-­�µŒ Khmá"8P"�Àq@ià¿¶ZÝhwšÈ‰¬®#–ÛM+œ[ɸŸ›¶é6m¸ïÌ¢ê.Úòiì$²‡_‘’Õ"+tÌnÝF$ÜAäçFTžõéÿÙÖ&Ö;SgoöxØ2Eå.Å`rÀ óõ¨-ôÒõ¯m´›nœ–iã·ErORX äÐ…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¢ƒEW¢Š(Q*¨ÀP0¥ªšv¥mªÚý¢ÕÉPÅJ¼n:«)äéVèœè¯¦ Ryº�˜&Ÿ~]UܹUÈÂŒ“ÛÓ9ÅO}á]:ô\3Z‹©Ò{¡nÀ Êt  gŒ•Á8Ö&«ñMEÓO´ûm•¢³ßL²Æ…G!DaÙwüÃŒŒð2k[Zñ?öV�m¨›•ž}Œ¶­»�Ápv‚n<ñ‘@šV—o£Ø‹Ks#.÷‘žFÜîìÅ™˜÷$“U/¼9§ÝO-ÎÆ‰ÞÞâaC‰¶ïcÇ-ò/?ιÙ~!L\Ëi¢_Íl"¸dÅ•Æf+°Ãµ¼¼(p_¨8ÀÎ;ÞŸÆú| ¾Ó'¸‹d±¸HQå›ÍfpêU?(OgšÜÑí’ÏF³µŒ±ŽV5.rH'¹â®Ö_†¯QðÆ—}"ª½Í¬s2¯@YA ~u©THQE›â #ûwDŸNóü�4¡ó6nÆ×Vé‘ýÜu¬�OÁVú”Ú˜7>]­ùŽg·0‡ p„bQž ÊG8ë]MÉÛx)`¶¶�ͰŠHoâ¼f³Ó–Ý\Gœ) Þç’N3Ò–ÿÁ²]Íy,z’¡¹¿[öÂHŽ"ìu,7Ž7˜8ãŠêéh”Òüý›.šÿo}Šöâì�@þj²íÀ8\nÏ·ARÅá.ÚÒ·gìú³êyò¾öæs³ïq÷úût®šŠä´OÚhz¢\@,Þ&vˆ6�¸]ÙãÎê@ϦqÁ5w[Ðu-XÝC¸Öö7qyS[½ªI…#cq´‘뻚è( "G*¢Ù€<0›ƒúW­X –ª ¯éêÄè²=kÐÁcqtÕ{ù\àÆa0õšu�­çcÌÿá]ø“û�ßáGü+¯rßþÿ ôÏøH4ïùþŠ®Ct·¬°Ê¯ «/ ×d³œdu”Rù3–9VzFMüÑ‘àÝhÍou"<òÊem‡!x ÷é]Aæ?¯éG˜þ¿¥xõªÊ¬ÝIîÏV•8Ò‚„vDôTcúþ”y�ëúVf„ôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôT(ì\x©¨4Ph  ôQEaé63ɪÝkwF¹�b[Q×bž\p_ÿAs[‡¡çôQ@9â;H.õÈRmJmU„¾Z›+¤žø)܈GîÀÏ�— óžtþ(¸¹‡W‘íeÚçO±Û‘¼ÉŸuÁ�»eög'î†'5è³hZEÈq>•c(vÞÂKtmÍ’rr99f?‰õ©%Ó¬šà^5œéjLcÔØõy¿3ë@|=h,<7¦Ù«[GaÐíP3úV•UÓcHtÛx¢EHÒ0ªŠ0€­UQŠZ(ªšž§i£éòßßJb¶‹Ü#62@($òGAQizÝ–²%û¸>V7yÖ²Ã×8ÆõèzP…-f¾»§%ÍųND¶óÅo*ˆØíy(8Ãzõzˆgó2Ç'–æ7ØÀíaÔt<Ž(J+¡EyÄ%ñLúe­à¾ÒÇŸgÑO°?ÉæÈ.|Þz“žø­ë/Og£®ÂîêÞüÚ@¶6¬såFàÜØ?9äœ`sŠÄØêh®:ËÄz�¥åôÚ¼{ì’`’‹xË=¶+| º•e%Ç’:sY—¾5šÇÆ÷–çP¶¸¶ŠØ4VpÂZImÌáϘ§vÜmVé´šôJ+”ðΡÏc©Ý¥ãÜD/£¸ˆåaWçË`yí$G¸5�­nZÜÚéÚgŠo'¿»Wti£´X¢D*œˆ²~ðÀŸn´ÞQU­7C§Ä..ÅÃÇÜ9– p=kÛ_x’ÒÆÊhä³’Òiä•£eû�R¤à!›‘‘ÇZéh¬ËiZ›È–—ŠåÌ;•“)ýõÜåÿhd{ÔQø§F–Ýî옑L¾K…ù΃·Iþ!ǽlQUí/­¯„ÆÚO0C+Bä)zõž¸4pžfùç D1¡fÀ?í_ølQ\Œ~-º±·K­fÞ†ãN“Q…`ÎäT Z6Éù›¼Œ¼VŽƒ«Ï¨Gs-Õæ“*Du²”¹�º”s“œzñߊݢ¹õ�z×Ã-®m³6ñÛ=ë$ᄌ„³ˆ€ Bm;²zŠŸ\ñö—=£Dl Ü4b+¾Óq’mÇn}ã’(§¢²u}Fî Ë?O}®ì»œˆˆ2Ç‚NJŒduÏjÆ‹ÅWú‡Ù᳎ÊÞà[Í-Á¹f)º) lŠF?ˆ¸ôàæ€:ú+™¸ñlsxZ]GM�}ñÓEüVï7 Ðq×�A犬ž&½‡@¾¾’êÆîkyc�„v²Û‹pÌyUضÐìñÀ?Zëè¬ #Ä"âÜýºH Ãg öÊÆ+–Ú+×ï’FTóYú?ˆõívkk«‹(cÅjl¥IeHÙ•JÊͱŽc�ÓÒ€:ú+•ðω®õ«Èã™me¶3²[“¾Ñƒò¥ÉûÜžÃî7ÕPEsQx�ãñv­¥Þ¤qYÚÛ¬ðÌáCHçR:qžµ_ÃÞ)»ÕlôÙoVÚÖ{»Û‹sÇ,DaÈPA 0 ÉÆÂ¶í›sŽ[wG'#ŽEG ëßÛZŽ®‘í6Ö“F�Ÿ-‘ÈhÕŽà܃’{ Ý¢Š(¢Š(¢±|O©_iOÛ,’ÙöKÈ'Ý÷YÕx¿>µˆõ=WG´¹Ômã³kH¼×I %Ær«Œ=0~l“ÐPý™®jÃGÑÞ÷b³–HãGm »°U { °Éì3I¡_˨Ù<ò^é·‹¼„›ObPŽàòyßò  J+�Ð|]qâ ¬­-E©¸HüíE†J¤�¨£9ÞØÏ' ž U-;Æ·—:ŒPÉw¤NòêZgÀ ÜÆ‹#/˜rç *î?(â€;Ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€úÁSÔÿ¬=Š ^«Þ_[ið îåD]S{´p2{ ÷—a„¸Ó>Å#¸Ýµ¥cÀÚxÛŒ–<ë‘@g‡.�÷†´Ë²»Lö±ÊFíØÜ õï×­jU=&·Ò-!Œa#‰QG ®SQE-09_ˆÄ/€õ"dòÀ1ÿÝýêsÍcÞkªú [/É©Ä/a[ëÈbK[vÎHòÔc‘�ØÈÉ=«Ð¨¤“Ú]$º”šV£w5¼šî›Ü<Ì^T!Ç–^£ž£Öº/[ÚÙk^ µ7wFùo¥co=ÿîŽÒ¯µŽ9þ÷Së]¶)hέµ8t¿Åk _K:]ê]éì Ì|É�� ¨å°rxÅg蚬óÍ¥›]kPºÖT’;›7•ž5µ¸bTðPn¹ã=‡ªÕJƒEÓ–ÆÙäx–I$B eÝœô»€<óGñ åljm›Mº¹›íP]oµº¹idUÜ�Ô¨X› �ªzh´ãÂ’ÜiÚΡs®´1B¤ôlº‰HM§Ë+’$ŠõRÐà©o.¬5ø™Áun\ fŽîK¦ˆíù�‘ÑIçã$T>×4ý;CÓøµˆA-¡‰‹ùƒ9s�÷IËo郜×mE0<ÓAÕ/åÔtlj7ÓëS\:êö“åÁ'gHðB#ïg¾i4 õ£ð¶¤ú¶¡q&¡w=¼ñO9hÊ”¨ Ø‚‹ÏZôÊ(É´ëžÖ<-5Þ§{6²×îo­%vÙnþT¿(La1Ðc¨Éç­E.'ðn©«jWÈŽ·‘<æîEÄ¿»RAêyá@=zÍóÕ.š 5ÔõKÛm!õA.n㙕”¬¤D†AÊ.7cÝŸe.©«^xzÊëSÔ¡¶œêeŽC·0#'”Ïß8ïÁüÎ}.Šç¼wq{á;Yn§yæY&ˆË!Ë0I]'¹ÂŽk ¥¤ Š(¦U%ÿ�œ?õͪÝT—þBP¸Ô˜"ÍQRQ�¯œx{Q?ôîÿÈ×›øo͘êqÄ ;XÈG$œ¯jô‚|9©`~Í'O÷MxÞ�¬\irI-¬­’Fc,1�§=šú¢œªa棽Ï5š†"[XéVËM²_±jWŒ·òŽ^2 [Á½O¯¥ö—Zw…žœûp*Àå]|³‚pk‘3£NâO$“V¤Ön%ÒÓNy]­£1°vœÁëŽOë¼-K§{ë¯üòþŸ”«Ó³V¶šÁÿ3Ѿ6íäÿÓÁÿÐVºúã>äè7,GäàÿÀV»:ùLÅ[?Sê2ÿ÷Xzsá½^±ðÒY]h6·4G3\j¬’Aò¨ÙÈ䌂IÉ<×CàÝ2óLƒU[ÛSnÓ_™cSt×9_*5Ϙÿ3r§¯?†+¥¢¸ŽÃF±¸µÔõÙ§�lwW«,'p;”A玜«}+SÐuK¿ÇwöÆ6¿b¹UX¡D XňݎKnÁ9?/×=…Çx_Kx,¢Ò¦ðÙµ²6¸¾{Ææo�ºí¹p;¿Ù«Ÿ èW^3¶Ž Z¥�µ¬ëp_MT‰¤-Ì»\à?#8çÖ»š(÷AY4Étm>;2æÞh§XbØÊ]p Â÷9ϵdÉá�[Tž5Õ%²ŽÝtË�<›F}ÇÌØ7€F xíêsÇcEr/ákýTÕ§¶‰"Óæ°ŒÙç.% Î@Û€£ 29ëVfÓuëÝ ]&è鉑­»IbL}¶•Àm½� ëÆ+¥¢€2¼=¦Ï£iŸÙÒ´O »²Û:“¹¢ê7ñ÷†H'œã=I«EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~¶º³é3¦ˆÖ©~ýÑ!ÔðHì1ZP!iáíV>ÃØAy§\áÅËÊ·ÕÖC#R o' *ŽÿÃþ :BØÙÉa »¸–ãRó&x|ÀíŸ-F!qò“Ô�ÛmŠ@ ¹yäü _±ÒüËûØçYÍ´©aLY™Á¤`Í˹}P×AEqãÂ7wö¢ÓW¹…¢ƒN“N�às‡ ŒÀl"ð2:óLºÑ5FYä¸Kq-Õ¼Z`KÀ‹üò1ÀÛ…-�ÛÔæ»:(˜ñ™®ê¶‘YC¦É¤Á‰$·žáâ2ÈÊll6 Žç¯Ö´�o[³{N™ªn•w™mˆ¶Î0Ç •o—qÅtôPF¯§]Ïyc¨iíÚì˨IÉ "8à €H9 sƒÓë*O ]&“igMܨÒÊóÞBXÅ4Œ\ÉÁèXñ‘Ûšë(  X4íGKÓáÓ´¹,ÖÖÖÖ( 3«3S†Ý‚ �ÈäžzVdÞÔïd¼Ô.%³[éä·an¥š�–!� Éf9ÇsÖÑ@î�¤jz_œéö…Õàškh÷¡�` #àe‹Ä�'ŠŽëEÖ5k»Oí›H¡³w–9­7 Ìl€�x\'‚r@é]5Ëh~½°Õ-n®Âµ´6§ìa�ºû¸i21´à|ßxó]MP-©xGûZþòiîqËu ˰d´k—$l8a¸wêjŽ ^%Õ“É,\:¥íãífÏ—0”(}áæ öàòk­¢€8é<7­?ƒ.|4$ÓÌ dmm§ÜáŸ.1…ã®3“éZš†—¨&·­¥›V—ì¦ÖH®K*íݸ2•‚9ÈÇX¹±šä � ˆ œp9À4ßé7îƒs¦[Þ%¡¹_.IZ/3z€29÷Íq3ü9Öžkð5˜„RÉæ¥Ã´²JA„Fñ�͸+c.Ü*ã½6°¯¼S§Ùjw:dÑ_á…%& 9'\>à9�[tõǶyÀý-Î7HÑÖVX¾à t\öô«µSL‘fÓ-¥@Á^0Ãr•8> ò±«tÄ´”´�âmZmD{‹TGº’Xíàgo™#„±Øg?…axŠ=wFð–©s6¾÷N?-ÖÝaxÛÌPpW±9>õÓëTÞ—5…Ë:¤˜!ã8d`C+)õøV5׆5MSI½°Õ<@× 3ñƒéºF±•ãÞYÄ7ÝE ´Vî@ 1cÉÁ€q‘œU¿ ø.ݬˆl$Hã1Dé§Gøã—•yc�Žƒ9æ¡Ö¼s©&±ž²lìõožâl$"M¡w+n*ä{pEiÉâ«b¼/ Ï�kx–MÕÞò9]…FpT‡Ž3éUí¼o§ÜßEn,õã’íì…Ì��œ¬Ãnì÷Úp@Ç®ES}$êRý ¹ŠÒÊ0g2ÆR;‰×rÄW?{jÈÿ0ãîúqn?yvV¶ßnÏ‘«6§»ÊûÙv}˜ÝÇÞÆ}ºP´ñ=±×"Ò¦³¾·’vt‚i¢ Ì€’œô‚@̵ø‡§Þ%«C¥ëíˆÍj>Ê?~Wï*üÝG\œ4ËOIm®Zj2j‰7ٮ乭K&õqµåÎ[ø8èE½/Â?Ù±xu>Ýæc,«Ÿ+võ+ýï—÷ �ÅvwwZ=ÄW3Áku Ô��¨ÊÚÌ$åJœôÈ<ú µgâˆïl廋IÕ|…E’&6ßñð¬p ç¾~lqÏJσÀÑ"YEqyçCß$‰åmóå²Fwq´qß>Ôçð¦©.†úLÞ!/¤iú"‚0 Ió~ð6�6‚   Ú—‰Æ£šl�ÕœÑëvö—PK…p%[i ‚<RøwÄnç²¾{‰çW½‚ÞVåËbDd“‘òƒ��á4Ë´ +hÆ&{ø/”Åf±Æ�…Ú7B¯ýëkúÅ®�ua`ng¾¾ÔÍí”±@qi#8$»òŒ·'Œ@f“ªA¬Ø}¶Ù$XGDi±]Ãü¤‚Gµ^ªÚm„:^™kan1 ´K}b¬ÓQEQE•ÿ�œ_õͪÅWò‹þ¹µa¢ýQR3?]8ÐoÏý;¿ò¯%Y(?…zLj<;¨ŸúwäkÊôx¡¹]@Ì7¬ÞEö`Fë^öSeFr}Ï6‹•hEv]ÏðôøçhJH›ÒDÁ ½Aê¼6—³\Å�?ë/ V|¨?ák¯ùmöÁüÂqù×­.]¼ìxêzíÔô¿ k/­ifiSl±¿–ätnÏ·ZÚ®?áÓnÑnOý<ýk°í_)Œ§uåì™õØ9Ê¥ÊO[ðœxSþ†=+ÿÓükSNÕtý^Ý®4ÛÛ{¸UŠ �:†À8Èï‚?:óŸ Ù_k µ¸·³—lmœ+��;$‚I6îÀÆ€Iœöæ¶´KkÝkû}|û½ >°Lñ®Ã1_³Ãò‡RÁsÁÊ’qÜæ:NªÏV°Ô.ï-m.RYìÜGpŠ~㜟B;Uaâ]µæÑ£mö𡼟9wgŸ—Îì ã9®{LÐÒæÿWŠÊáôùôËÅ·²š¤fœ£÷Ô³1!¹É$y®{\i¤ñíÕ´ZÙ?i²•.#³µ“|{XV`H\åÎü|¡Øg,ôm^ÓõÛk‰ì%ó#‚g…Î9ܽñèFõVlþ;Ðm`yîPŠy$Ò®•Tz’câ³<5 ü�ÛêbÖÎÆê]:4µ±ì  |ò m¨nIÎMi ÜÇ úòïéú…Ÿ�âѤ³º½Ó4ý!‹Ý@Ñ”yÕRÛœ6ÄÁlrvÿwž²æYõK»e† !–ËN{±˜Þ“H¦8¾é#8ô'¨ ’ÞúÒîI£¶º‚g…¶Ê±È¡ô`:­%µý�ëÊ–·pNÑ6Ù)>‡ƒ^gtû4[ð÷úáá{“'‘÷³¶-›±ÎíÛñžs»Þ¶´ý[û/aŽ.q™ųéñlÀ$¬p¶Xç'xb1Œ‚NFë@µÕݵŒ{»ˆ­á^²Já~&™q¨ÙZG—7–ð¤ÄÚIUC“ÐO5‹®ù_ð“ø{í~_Ù3q�7|íƒg^3·Ìýk•°·h´»}K~•%ªÛÞ°ß˰%©�ŠH˜#`QŽ26ò(Ògž..%ŽcRÏ$ŒUGRIà ©i®i7öó\Yê–WCþ¶HnÖ?÷ˆ8�r¶¶¦ëÀöúv·­¥¨ŸG‚ à—`xÙþ]䓜’Bàñ‘ëTu;™Z OE’ò+¤ŽêÇì÷­",¬û‚K°`¥‘€Hp8$ô+k«{Ût¸µž)á~VHœ2·ÐŽ*¤Zö�>¢tèuk /•™M²\¡�Îá´ä`çÓÍørY{øe¾¶³º]cý @ÃpL*Dqîä»Iï¸7cU#–/ßÚIa©®§i¨Ý]K,¤lȬ²JÎŒ£w …䟼:Poogy,Ñ[]Á<�¶ÙV)>ŒàýjÅy׃­5�žÒT}Å›Ú6XF2DßÞnP¿�šôZ†;»ynf¶Žâ'ž¦X•ÁhÃ}ÝèÎ3Ö™£c8C 弞c´i²U;�s¹F$`ävÁ®TžëHñ–³ªØ£¼·-;`å|Ç…L,}ƒ�¿öÒ™áÃ&‹‹§[|𮵩@C(fuEœŒ’Tré@—Ep â LxïÄ#Y‰®äÓÚå,Ö$Å»Œâ;~éÝž}:V…ÍÖ­µ�6º¶Û­ñ®Ì�1ƒ�å¨<Prs–Ã{Ð_Ep â�Rm?KÕ®n–ÖÅ­R[‘jˆì±Ùæò˜Fß›žõ-ïˆõ8¤Ô¯’ú(þÅ©%šif5&e,ƒ$ýí̲ãŒc ó@Šj6Rjiéw^F�ÞÜH Ч¹^ r?:’K˜!–¥š4’bV$fÈ@$…Î&Ð,|)£ÙÞkzmµÕ½”1M ×H�ªÊÊNAŠžëZÒµ�s@‹LÔ¬ïdŠõå‘m§Y 'Ù¦]Çi8e=È­[ÍÎúå®%›QWldC©\D¼ p¨áGà*m?K·ÓD‚ .ßÌÆ~Óy,øÇ§˜Í޽ºÐ/©—Âz¥²¬¬÷6²[§—’�Î¥A*ŠÍŒžHâ‹öºÐíí![á PVÍKnÁÈÚšx�ŒžW¯^¸÷íKN‹T³6³IÇš·Tô¨E¾“iwqJ�¤bÌp1’OSïWiˆ(¢Š)i)h¢Š(h¢Š(¢Š)h¢€ (¢€ JZ((¢ŠbŠZJ(¢Š*¸ÿ�œ_õͪÅAÿ18¿ë›PÆ‹ÔQEHÌ¿xgS?ôí'þ‚kÊ<5ye÷¢ýÙ –ÑãÊ),Ä•à{àöJÏûCKº²ß³Ï‰£ÝŒã#¯'o‡>"G*¢Ù€<0›ƒúW»•T ¨Î�YòÝž&gJ³­ ”ãÍdW—Ä׋uXÆ-m â(•Ç}ßÞ'¾jƧ©i· i‚âK¡,¶Ø;Wä •>�8¤ÿ…wâOîAÿ…ð®¼IýËûü+ÕçÁ]5Q+yïëÜó=ž2Í87/Èë¾¶í èÿÓÉÿÐV»Zç| Oáí­î¤GžYL­°ä/žý+¢¯˜ÇN3ÄNPwW>“ CÉYØæíþøJÚÚ8Ãú{ˆÔ(i`Wc�RFI÷5©¤èšn… ðé–‘ÚÃ4¦fŽ1…ÜT.@è8QÀ­ +�ê+ÛXÛZOu4ì’êQ,Çq;œ*¦yéòªŽ=*9´Ëk�B;ÙP´±Á%¸ç‚’,ÿ€-\¢€24¿ iº=ÂÏj.ZD‹ÉŒÜ]Ë7–™ªc´|«Óû£ÒŸ‰ëÇW–òêy–7Š(¤+å®T°PJ/RkRŠ¥¨hÚ^¯åÿii¶w¾V|¿´À²lÎ3�Àã8•> 6ÆÙAemˆ„!c‰TÆ~^ÝäñÓšµETµÒ´ëE¥…­¾Wiò¡TÈÎqÀé’iÖº}•Œ- ¥�½¼NId†%Ebz’«4P+}L´(m´ëHLndO.]¬F  ŒûÕˆ- µFKxc…YÙØF�AbrIÇry&¥¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¯{ag©[kûH. $ñ‡RGC‚1V(  ë}Fµ´šÒßH°†Ú|y°ÇlŠ’¼Áüh¼Ð4mA!KÝ"Âå ]±,ÖÈâ1è¹OJÑ¢€*ǦXC§:+d±*PÛ,J"Ús‘·ÁÉÈ÷¢ÚÂ+[«»„gg¹ufÝŒ(U p8gêÆ­Q@[ØÚZI4–Ö°Bó6éZ8™«Ôýj¬šœÑ,Q[EoÚåÖÕŽŒÀç�áZ4Pm÷‡´]Rà\j>Ÿw0P¢K‹d‘°;d‚qÉ©²4Ï6Þ_ìëO2ÙB@ÞBæ%§(ÕvІêÒÚúݼW·Xå@êÅG>›csäý¢ÊÚ_ æ2%o,ÿ³‘ÇáV¨ d³¶–Gy-áwtòÝ™,�vŸQÉâ£�L°†É¬¢±¶KFÎè%s×+ŒUª(¬Zm„C6VÑÅoŠ4‰BÆÞªàòy´°éÖ6÷R]AgoÄ¿ë%H•]þ¤ š³EUµÓll¤–KK+ky&9‘¢‰P¹õ$jÕPi1Ë$©,’�duP �02{ñÅDº}’::YÛ«Ç#ÌŒ"PVGÎæpÇqÉêr}jÍI´m-Úå›M³ct6ÜŸ4z70úÔ·vz„kí¤(­¹VhÀ}@#­X¢€*ͦØ\Ï óÙ[K4?ꤒ%f�ýÒG…+éöR^¥ëÙÛµÚ «9‰K¨ô ŒŠ³EWk 7Šâ&´€ÇrŧCĤ€ a�˜àÏ ¡ì,ä°6/iY”ÙövŒöúmÆ1íV( M�³\ÅrÖð™âR‘ÊPnE8Ȩ�jbéöI|×Ëgn.ØmiÄKæè[ÅY¢€+�>ÈY½˜´€Z¹bÐùccn$¶Wä’O©4ZØYØ©[;H-Õ±‘ aÀÀéè*ÅQEQEKPÑ´½_ËþÒÓlï|¬ùi�dÙœg�Æp?*«/…<;>Ï;@Ò¤òÐ"o³ŒíQÐ Žô­z(ì­b#¶…ŠÂÆåP©!†+x#‚Ò(cP‰(UU:;Sè  ßÙÖ&Ö;SgoöxØ2Eå.Å`rÀ óõ¨-ôÒõ¯m´›nœ–iã·ErORX äÖ…QEQEQEQEQEQEQEQEQEQEQEQEQEU;ÿùgøÿJ¹TïÿåŸãý(ᢃEW¢Š(¢Š(‹x›R�¥Ò4I¢²MÑž%v™$t�`] sÏlfk©¦—­é3Cq7™,¢Ä‘˜P&âÊ'�ƒ½ÂàœƒÇ8‡Jµžæ-6HWrZëÚ„³üÀmR÷j¿Ìëùæ�Ö{ C¶WK¶æÛAš)—p;XPFG¸?•lx�U›FÑÚîÞç˜Í (’9E&IH€7g¥sÍâ½Uæ–Ò9¼'-Ò‡Þ=ašL¨$�¾Vr0xö­Kó¦uH£½´gv8 Äd“\Jê6›X¤×<5ö[KÛ»Á,z�i¤‰°»6ŸÞ�âí@‘áËÓ©xkL¾(#76±ÌPíÜ ã?�iÖ‚äDÐ?ìþ‹»@‚Š)hSSÔí4}:[ûéLVÑc{„fÆH…žHè*/^Óu“*ØÜï’y‘:4r&zeúVGÄGXü ¨;�ª­ $öjV³ª\êš­î³áLܵž‘,&æ4,�#:•U8ùÊ€ÍÆz�ßîumRßFÓžúè9…„9w?Vz¼†[›»Ÿ ë/ý© íŒdvA{-ÓÄâu,Åž4*6Œ•í· Í_¾Ôµ¹|eq Ô¡³™oc[(f¼’4’—¤KY7e²Û²¦(épÜCpÃ4rsì`ÛXuSŽ„zSÉ $9$ב#Ï£izÕ¾�{v/Yu¼Ynå- ©�‘/F+¸mÌ�IÁ'¶k±ð”ÓOáÛ÷½¼‹Q³óÊò'’é¼½ƒ)½‘YÎwc‚y·m­A#B“C4-²{yã)$-Œá�þc ö4zh!¸�Ëž$•7ÚêdƒƒÜáK( ‚H ×9á�yõ}gÄ–¯1qc}åĤ¶=¡xÇ_�d®’Oõmô4_M�!Ó-¢‰#Hª(ÀP:; µUìãÆ÷jÅ´ (¢Š(h¢ŠQJ(íª_XÜZJXGÉ>ÂnÀa“ÊÎÿâÆz}*úÙi¶Kö-Jñ–þQËÆAKcØ7©õô¢þÒëNð³Ãs€ßnX«¯–pAî zެ[Iuzò<¯a$›—E÷?3¨ð#—Ñî2IsÔÿ²+©®CáãnÑnOý<ýk¯¯™Ì±3^gÓåÿîÐô<âø¦}2Öð_icϳ‚è§Øäód>o=IÏ|Võ—‰'³‡Q�Wawuo~m [V 9ò£pnlœòN09ÅaxoA׬|4–WZ ­ÃÍQÌ׫$�P|ª6Cò9#à’rO5Ðø7L¼Ó ÕVöÔÛ´×æXÔÝ5ÎWÊ�sæ?ÌÜ©ëÏáŠã; v^#Ôm//¦Õãßd“”[ÆXéí±X+àeÔ«).8‘Ӛ̽ñ¬Ö>7¼·:…µÅ´VÁ¢³†ÒHph>g|Å;¶ãj·M¤×Y£XÜZêzìÓǶ;«Õ–¸Ê ‰sÇNU‡>•�©è:¥ß‹ã»ûc_±\ª¬P¢,bÄnÇ%·`œŒ—ë� |3¨_Ç3Øêwix÷ èî"9XUùòØ@;Iî gk_Û–·6ºv™â›ÉïîÕÝhí(‘ †g",Ÿ¼0'Û­[ð¾–ðYE¥Má³kdmq|÷†9 Ìß uÛrà>w²W>Ю¼gm>µK;kYÖྚ©HZ-˜%v¹À~FqÏ­lk:†¥¢ør›y­¯f‰¢Žâi—òÊ¥‚¦<çnÜ\Cim%ÅÄ©1)w‘ÎTu$×;¯è7O¡ 'ÃÖ]¼êî®ÆB®®6ª!89éøÕ�SMÕu­*{+–²·YmÐ�,´›g»’BîN°'š‚ÓÅ–×zíä+4i¦ÛX%ËÍ,m+ps».ãñ­+_éWv÷3Çx‹²ï›ÍVˆÆ¼üÄ0/¡Å`ÞxcUÖn5õ¬­ÚêÆ;hŹi2HÒw¸FGqïR]øgPÖZþãQžÖÞæ{T¶…m·:.É<ÀÌH²Øù{ òs@ø“J�"d¸p²Ì BðH€¹æQŒã‚x<ÔUÛ+ë}FÔ\ÚIæBY•_i°H$dr28=QXz–•¬kÚ_öv¥ö`šUóÍ´ŒÍå¯?)eûÄ…ÿtd‚N+SD´º°ÑíìîÌ-%ºùJðŒ+"ð§$�8¥hQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU{ãx-Oظ$ç± yRz�;g€Vñ´öþ µÕìlѵ»3w´¤•�w;60v�€:d²Žõ·ªê’Z˧ƎÌß<äH†4,Øý¢‹ÿ¬�gÁÇ\ÑnZUz¼¶Mj«m}0·QólR]ËÏ ¯àjýŽ—æ_ÞÇ:Îm µKšbÌÎÝ#nXÈ3ꆀ(ÇâÛ«tºÖmàHn4é5V îE@¥£lŸ™°ëÈÀëÅhè:¼ú„w2Ý^i2¤@[)K˜©G99ǯø¬Áá»ûQi«ÜÂÑA§I§@ð¹Ã…F`6xy¦]hš£,ò\%¸–êÞ-0%ˆ`Eþyàm–Àíês@ϬëÖ¾msm™·ŽÙïY' $d%œDÀRhÉÝ“ÔTúçˆ/´¹í#`Vá£XÈÍö›Œ�n8sèG‘Gˆ´ÍwP½´ŠÊ6M& I%¼÷–@~PÛca°`w=x&µ¤kzÝ›ØÊtÈà�St«¼Ël@¶q†9«|¸ãŽ(GWÔn༱ÓôñÚî˰yÁ(ˆƒ,p$䍯G\ö¬h¼U¨}ž8ì­î¼ÒÜ–b›¢�ÆÈ¤cø�;�AŽkcWӮ缱Ô4öƒíveÔ$ä„‘a†@$…9ÁéŽõ•'†.“I´³Ž &îTieyï!,bšF.dŒ`ô,xÈíÍMqâØæð´ºŽ›û㦋ø­Þ6n ã¯ ‚ÏYðó{py4«ÿ N‹åÝJ/AŠÙIe¾ÀªpHla°zàš$ñN�1Ê×d¬¥„aavg Œ°rTd|Ý9Ö4žÖŸÁ—>iæ²6¶ÓîpÏ€—Âñ×Éô­MCKÔ[‹VÒÍ«KöSk$W%•vîÜJ‚Aäcž9  Rø‡JŠKhþÖ®d�ÊF�=•=‰À¢_é0j?`’ñãzÆFÖÚ®q…-�¡ŽF99ÏÿÂ%¨ZYiöÚ|öÉ5´+¿ ñÊ¿1fù*é’p�À©®¼1¨J/ôøçµþ̾½’HÛ¼äù•™ÆJðÙ¡ÅR—ÇæÚóT–X™ìíob±Ž²˜;( †LÆæÂmÉÂóó ô:†³%»è³[ 6—×"L±²º«FÅ �ÁAwíY×>½šÃWŽ9­Ä×:¤z…¾âvá<¢øÈÉŒŽ3ŒŽ½*÷ˆt»ýgÃ-m Áo©†ŠhŸq1¤¨êãœgéÞ€2-få³È9  TñVˆðÏ*ß)޶GØØVݳnqËnãhääqȨô{ûkQÕÒ=¦ÚÒhÒå²9 ±Ü�rOaTbðÅô>µµI­Åí®£%ôyÜc|Ìî¸ÏÝ|gß¡¡i—öz†­{¨5·™,r·,Bm�S gîõþT·EPEP/‰õ+í#Iûe’[>ÉcYû¾ë:¯wçÖ¢ñ§ªèö—:�¼vmcišé!c$¸ÎUq€§¦Í’z _XjÚ¦•ö2;&óZG¹�£ÛµÕ†£g8 ôǽPÕôÿjw–,m´‡²€,²Z½ÜŠ$œ‚HˆåW¨8'¦(£¾ÒYŸìémá¸$×14Š|ª²œþ5™á‹ýSR¶»ŸQ{9"[†ŠÚKh^1"©ÚÌC3q¸9è3Þ´jMö‘/ÙT×Èò˯´îÜHéœc¥Eáý:M#Ún�+#KmmR2T¸PŒóŒæ€0´\x‚k+KQjn?;Qa’°©$*(Îw¶3ÉÀ'¨KNñ­åΣ2]鼺„–ŸÙð·1¢ÈËæ¹È »�Ê8«º_„gÑìô‰l¾Ë¡i#‹’¤„¸ŠFË‚q’~ë Ž«Ž†«Áám]¬Î™pºlv£PkźŽGy°g2€  ‡;�zí袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š|ëEÿ,ÿéRÇþ°TWÿòÏñþ”pÑA¢€+Ó%Š9áxf�d‰Ô«£Œ†¨#ÒŸEei>²Ñä’XydeòÑî$24QŽ‘©=z~dÖ­P.µaswªèAøíoZYŽà6©†EÏ=y`8õ©õ¹5af°èÐD×36Ï>f-Æ>ù[€ï׊K¯è67/mw­é¶ó§ ·q£/Ô‘Wíî`¼·K‹Y£ž RHœ2°õph™ÿ„f} ­l·v‘gŠwÛöÔ,Y·7gÜY�é– ðxéòÍo¹—cÉ\ç*J„Ï ´Ð$¨ÒÆ ¼a�e8ÈíœÊ€cÿ0ÿº*ÅW±ÿ�Ý—â÷»_K…ÛYÜÜOol— ¹1y³$e€ã�÷»Ey‡ü+ÿÑIÕÿ)øõoø7NÕ´-KRÑõ=vãXT‚Þæ)§R7´ªW%˜‘û°z÷ ”V_ˆoN�¢\^ BÞÀB74÷™TM¡—$ôõ¯:Ó|C§Él×~,Ñ-®µ‰Úââ9à m‹)»÷ãh*¨1Ø·S@³Ey‹î5Ó¨i2ZÞ_O¹ì—6"Ù!{–S†PìX¡ŒÉ�N2œ‹Õ�Þ¶‘ßÚkÓê\]¥¼òÏ•i&ÂJ,�r¡”óÓ"€="–¼BÏuæ¢-/§×~ÕsEñË}pöÒÄ|·”ìá™™Š�Ÿ*Ž3Ít:]æ¤|+¦£—zÜv†S+ÈU7ßËóÁu ÃŒƒžÝ@=:Šâ|G§êZ‰.£oâ}bY"’ o £‘Tƒˆ�èOzÏñ–£«]Øx¾Ö=FÊÞÎÆ ‚¶-$¡¡W8}ã,GÝ4ôj+Ž°Ôµøu¥Ó÷LÔYô湋l-nÕÑ@f 'cÚ¹Í*}N‡·ú„ZãZ\i–×$67Ê #�4ea’¸Ær6Ð#Ó袊(¢ŠCE)¤¦ 4”´”U9¿ä'ýsj¹U$RÚœ8òÍ©1¢Åÿ-ý?Z<·ôýi Êñ'Ú–'ìÒtÿt×�éÚÅÆ—$’ÚÊÑÉ$f2ÃÚqÓÐð9¯x11È5ŽþÑË&Û$äáqü«ÖËñô°ð”*Æéž^?S8Μ¬ÑâÆtbIÜIä’jÔšÍĺZiÏ+µ´oæ"6Ó‚8=qÉâ½{þÝ þ�6ÿçñ£þÝ þ�6ÿçñ¯IçxgkÁéèyë&Ä+Úk_Sá®NƒrÄpnNük³¦[XÅgn°[@�Ä¿uMå¿§ë_?Ь«V•D­sÝÃQtiF›w°Ê)þ[ú~´yoéú×9¸Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Gþ°TWÿòÏñþ•2#Ž*ÿùgøÿJ¸h Ñ@袊(¢Šæ4]NßLÒd3Åvþn¥�³YË?K©zùjØí×úVo„¬%е{[ {³&—uc,‘A%“Ûº4/es�Ì$ä…PvƒŽsV¥ðýæÙ-§ÐtZÝn®. ’úr|ÙB6˜\ ÆAç¯i:Mä:¥µÄÚ~›§[ZZÍo µŒ¥Ôù�Ìh_@wÖÔlå¾³h!¾¸²rA[ìÜ=¾e#…y}¼³_Û¤^ ÕÅRÉö-B?Ü펉g“o—÷H`P“ÿ-ÉÁéúšê/dË¥ËmÑ ¸BÊ£¹À#'Óšæ›ÁÛ»j–ºÝÒëì›} “î4_t'‚=h¦Òã1iV±´�)HÕL��Í�Ôà“ìC®XM©im»¢N’õhi÷?ð›6£åÿ¢�8A¿pûþalc¯JÚ¢˜‚Š( Š( ’–’€ JZJb ƒþbq×6©êù‰Åÿ\Ú“/QE†A{p-,g¹+»Ê�Ÿ¸®¼gª$Tzé]–ºq ßŸúwå^J²68P örÌ=:�”¦¯©âf¸Š´çÂVÐéÿá2Õ¿ýû®�Þ$M^!ÆØïg€ãÔ…y±w?ÀÐSã�¡)"oI2õw®ÚÙ})ÂÑVgŸG1¯Niɹ#Ù¨¬_ k/­ifiSl±¿–ätnÏ·ZÚ¯œ©NTæá-ÑõêF¤ã³ +þ� ÐÇ¥àZ�jiÚ®Ÿ«ÛµÆ›{ow ±C$PØðGçPYnŠ¥g«Xjw–¶—),ön#¸E?qˆÎ?Ï¡ª°ñ.ŽÚóhƒQ¶ûxPÞOœ»³ÏËŒçvqŽœÐµ›£ëÚ~»mq=„¾dpLð¹Ç;—¾=Á ŠÍŸÇz ¬=ÃêBƒ/$šUÒª�RL|PIEQþÚÓE…µô—°ÃmrªÐ¼íåoÏ#†ÁÏ=:Õàr2:PEUÔ5tËa<ñܺ ‹{y&lÿº€œ{â¨Câ}6d‘ȼ€ 'ý*ÊX7œ…ów)8”³EUkøF–u¸À!óø•Û»§®*[[„»´†æ0BMÈ¡ºàŒŒÐ´U/í};É5ì ™  #… m¥Fz�Ãw©Òî .åµYž%Wtî³´ýÓùšŠl’$Q¼’:¤h 31Àu$щ4I,N¯¨ee9 B :Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š)“M¼-,Ò$q Ë;°rhôUQ©Ø·‹ëceŒý£Í_/»³Š'Ôì-­£¹¸¾¶ŠÞLl–IUU³ÓœÐª*‹»kKWº¹¸ŠtšY*(õ$ðÝÁn"2ÈÎ�GîcÐ } MEAo}iw$ÑÛ]A3ÂÛeXä Pú0Ö’ÚþÎõåK[¸'h›l‹�ŠCƒÁ  U­édFMýºy’¼1‰!wV*ÁAÆpATÒê6P]Åi5å¼w2ÿ«…åPïôäК*«»k ÷w[½d•Â(üM2ãQ²´Ž).o-áIˆ´’ª‡' žhÍóÃko%Åıà jYä‘‚ª¨êI<U-5Í&þÞk‹=RÊâÖÉ Â:Çþññ  ôTV×V÷¶éqkŒàýjÅT1ÝÛËs5´w<ð…2Ä® FîîFpqž´ÈµÂo-äó£M’©Üë�Ê0y##¶ Y¢Š(¢Š(¢«&£e&¡&ž—p5ähíĀȪ{•ê#ó©$¹‚aŠY£I&%bF` „HQÜàÇa@ÑUŽ¡d±I)¼·Ç(…ÜʸY a9á²@Ç\‘Vh¢ŠŠ;˜&šhcš7–TV¡ í�AühZ(¢€ (¢€ * ›Ë[(Ä—W0À…‚†•‚OA“Þ’}BÊÖx ¸»·†iŽ"ŽI³ŸEóøPŠ*½íýž›lno®àµ€ ³ÈA=9ÙÒçË63@�’ÈŠ À'œé\ÿ†gñ¿‚ôkµ†Ê[X¬ ŤAši#¯Ì�c�»Hí»½Sµ—Ké7p¿eÔ59'ó§LFûm®là ãæç …vº¦§k£Ø=íã8…YS÷q³±,ÁTPI$�8¬øMt¹VuK}]š–P4«ƒ°ã8o“Ž<ö4߉…B»¥ûe¦Á¿nOÚ#Ç88úà×™izXOÏå®—q{™2Ã,¡²Û@f3Þ³çqÃ&ÜœŒvö]ê+ÝÊîÝ ð¬‘¶1•a�p}�^…à¯ùtûAÿ¢Åk^^[éö’]ÝÊ"‚1–sÛ·AÔ猴bŠÅÿ„§OÿŸ}_ÿ÷üj¯éú•®©ng´�º+”`ÈÈÈê²°O±n–ªßê6z]£]_ÝEmn¤$®A=95ÏY|EðÍÜ·‹&¯cA9Š6’å|ƒ¼L’? êè®_TñÞ“¦Mh¸º‚d󤸷‚I8py¹T†¶©Áãp«–>$MJá¾ËauöšDšöp±$l™mb‚< P८^ÇÆÖš’Þÿg[6¥%µÑ‡Ê°¸ŠGdÀ"_™”'ާŸÑÚ§‹ÛKÑÖö]ùn^o.+ bYFçqµ˜` cרÇÓQ\<#¹½X¢ðþ¦ðÈñÂŽ ™� �Hó0Lwsœu­MgÅãCY¤ºÐõF‚ ¤Í�Tç”1äã§Zé(¬K?†•®t›ë x£i$¸ºh<µ“�’1g·jΓâ7†“W‚Íuk‚H^F¹+µJ€§Üî'¯ðšë(¬[¯XEg§ÝÛMݽíÒ[Ç$r�¿3-žàj±ñ®˜·±Z5¦®³ËŸ-™8Þ2GËÈ=E0::+›¹ñsÛë-¥�ëÜmyÆ Û$jÁK‚ee—®=*燼@¾"´7qi·Ö° ot#NH;v»ïŠlQERRÒPIKILAPÌN/úæÕ=Aÿ18¿ë›RcEê(¢�ÌßxwQ?ôîÿÈוèñCrº�˜n1Y¼‹ìÀŒÖ½KćÔÏý;Iÿ šò� ^YA=è¿vH%´xòŠK1%xø½ü­?«M®çƒš[ëO°Èm..-f¹Š9Ö8^¬ùPÂ4×_òÛí‚=øþ„ãó¨¥ñ5âÝDÖ1‹[h8Šåqßw÷‰ïš±©êZmdžÂZD`¸’èK-¶Õù%O§N+Õ’«xÝhßNž¿Õ¿_.1¥gg²ëúWý;/‡M»E¹?ôðô®Ãµq_ Ûv…téäÿè+]­|Æb­ŠŸ©ôÙû´=.ðÝ•ö±àÛ[‹{9vÁ¦ÙÁ¸ØÓ²H$“nì `(� ÏnkkD¶½Ö¿·×Ï»ÒëÏì3ûe �ÀƒY à�:Ú;„±»Ô­xVÛteÂÇ æïÆwãðÁæ€8o'…ï,l,îÓOŠìYÇ5Ýä¡UÀX�Žç�ìvð?„QV|ÿÕ„ïicŸ5ÿ’f²¼‰U�·&^ã�êwpyÚG¡¯K:|Lm<°4>O�»võõÅImm­¬é’�¢¢äà P{©ø[áé[Ë’@téWvZh‹¶O œœ×Gw(�ÇZk£€’i·FcÛj¼%I>Û›ó5a|+£=¤vך}­ôp¼†wIå+6í«‘Àì¥Z·Ñí-nÚh£UO³­´pªQ‚NÕpF~ƒÒ€9_k_¾±m±�•¶˜·@GûP‘_�Íü(.O^•^-fýl¾Ï§™›£[]'™·Ú #gvïàùprzô®Ö]#M™`YtëIºí„<*|±ŒaxàcÒ–]/Oœ[‰¬-døò§ÊÇM¹~Ì[뚆­¨,rß&ˆ‘X[Ý´NˆZC bÀ—è«�¼`縢ß[ÔÆí¢µò›4™ä[�,!ÙsŒewn$s´Ô1®¦ëN²½xžîÎÞáâ;£ibW(}FG :ÅQlí¤¦t%ÂÈI%Ç6I9ëÉ  4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGX—M·Ó%¹Õü�g%vœªTä{ç÷«Õ^öÂÏR¶6×ö�]@H&)㤎‡b€8+x6ÝiW×Q¬z†·%ÓÛ1aÝÖ ã %•XŽÌÀu«—š^Ÿ¢\Ü5¥½Ô’jpiP•ÈC•Bz&àI=é]e¾�£ZÚMio¤XCm><Øc¶EI?Þ`þ4^h6 �¥î‘ar�.Ø–kdqô\ާ¥yÏ‹týBÏÀñhÒYÝ^éš~�Åî hÊ<ê„)mÎb`¶9;»ÏYs,ú¥Ý²Ã�Ëe§=ØŠLoI¤S_t‘œ zÔWC™aœtè¬m’Ä©Cl±(‹iÎFÜc'#Þ‹k­n®î�žåÕ›v0¡T(UÀàqŸ«ó[§Ù¢Ø7‡¿× Ü™<�½�±lÝŽwnߌó�Þõµ§êߨé{ pésˆ4Èî-ŸO‹f%c…²Ç98Áã9< ìíìm-$šKkX!y›t­aL‡Õˆê~µVM Nh–(­¢·�í rëj‚GF `sÈð _^°Óí<=‡R;yµ›û1f²º�á0wLç¨U,ÍîÇ“Lñ§ÙK‘á¸ÓåKV„ßD©¶”dùáˆÆ2 9#­uWÞÑuK�q¨hú}ÜÁB‰.-’FÀí’ Ç&¥þÈÓ<Ûy³­<Ëe y ˜”pœ| {PN»åÂOáïµùdÍÆ<Ümó¶ �xÎß3õ®VÂÝ¢Òíõ-úT–«o{ Ã.À–¦v)"`��F8ÈÛȯGº´¶¾€ÁwoÄ-Ö9P:ŸÀñQϦØÜù?h²¶—È9‡Ì‰[Ë?ìäqøP!kjn¼o§kzÚZ‰ôx ž v�ŸåÞI9É$.µGS¹• ÔôY/"ºHî¬~ÏzÑ¢"Êϸ$»V QI‡‚A¯A’ÎÚYä·…ÝÓËvd²uÚ}G'ŠŽ=2Â&²ŠÆÙ-; X”!Ï\®1@¯‡%‘g¿†[ëk;¥Ö?ÒL7¤GîA+´žûƒv5R9bðýý¤–šêvš�ÕÔ²ÁFÌŠË$¬èÊ7pØ^IûÃ¥v±i¶A Ù[G ¾(Ò% z¨ƒÉäzÒçXÛÝIu�¼Wÿ¬•"Uwú�2hƒðb5¦±£C3ÚJ�£¸³{FËÃFH›ûÍÊÂwð3^‹UmtÛ)%’ÒÊÚÞIŽdh¢T.}Išµ@oªOu¤xËYÕlQÞ[ƒ�°r¾c¦>ÁÆßûiLðá“E‹EÓ­¾xWZÔ !”3:¢ÎF É*9ô¯GH!ŽY%H‘d”ƒ#ª€\��“ߎ*%Óì‘ÑÒÎÝ^9da‚²>w0ã†;ŽOS“ë@KxƒS»ñÖbk¹4ö¹K5‰1nãøŽßºwgŸN•¡su«E­A£Í®­¶ëG¼k³cÌ`àyjTœå°ÃžõÑ6�¥»\³i¶ln†Û‚`Sæ�FãæZ–îÂÏP�c½´‚å·*Íp¨u !|QªM§ézµÍÒÚØµªKr-Qƒ#{#üÞSÛósÞ¥½ñ§š•ò_Eص$³M,Ƥ̥�dŸ½¹ƒ\qŒdk°›M°¹žç²¶–hÕI$JÍû¤Ž? WÓ줽K׳·k´Vs—Qèæ…�âÙxŠoí›”_øI-•¿uÍo†ÉNÙ_o�zœõ¾,eÓtM+Vžá®—y²\0²7î�ŽÐÝ�“€ѵ…›ÅqZ@c¹bÓ¡ŒbR@°ÇÌpçÐPörX´�¬Êlû;F {}6ãö 1Ó – WLÑç„«ë76úÔ«œáÂÉ$£ðxáð*Û¶ñ§#Ù_µìmö­Q¬J®cA#&s÷·¨]çÈY½˜´€Z¹bÐùccn$¶Wä’O©4ZØYØ©[;H-Õ±‘ aÀÀéè(ÅQ@Q@Ç�Rݼ/+L‘I 1—*|äÉéÅWñˆÓ¯a}"¶m[UˆD%ÂîŠy•›¨ “�V èµ KÕü¿í-6Î÷ÊÏ—ö˜M™Æq¸gòª²øSóìó´ *O-&û8ÎÕÈàJ¼×n“FÒÅ)�CJ›ƒÈ$vÈ�ਕ¼7¤ÈãTÿN”€ßåG•v¨ö·•¬AÄvР‘B8XÀÜ `êã$0ÅopAE j#E ª `@jóý²ÖëC¼ÖDMeq¶Úi\âÞMÄüÝ·H¡°{mÇ~`µPévדOa%”:üŒ–©[¦cvê1&â'8 2 Œ÷¯Oþα6±Ú›;³ÆÁ’/)v+�@ÆŸ­Ao èö—­{m¤ØÃtä³Oº+’z’Àg&€4(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*�ÿü³ü¥\ªwÿòÏñþ”pÑA¢€+ÑEQEˆ¾ÒãP‘6¥ cîÇ©s(ôUYQì*k_éö—qÝ'Û%š,ùfæúiÂ0J‰€8$ds‚j¾¯â#§^½œ0@ÒG M,·WKo jå‚åˆ$’QºÒ©èž$¸Ô5ä±’{+ˆ¥¶–u{H¤ …5À‘¾Y3æÇ=EmkM¾·¦µ�ÓÌ‘3Æå¡}Ž 8q†ŽTtçéY7> Ò§å¹ÕÝã£6«pJ’1Æ_Ž+~îimíd–Y.¤Q•†6PÏô,@üÈ®-y4*öÒ1ÜmÙœÈDƒ~IcÆ99æ½âî­¥·™wE*uÉR0G‹ÿG…Ž7h{œcsÀ¬ÇêO$ûšá|~³�nÌÉfnå�c[—‚þâpQÜÆ#PB‚Їà–ù>´ÿ Û¼wÚuÜwŒ±Ü®§{öX¯æxæ):ˆð€Ù yaónɯI�HÓbû&Ë eû•¶ÄC÷ ŒŸÝÈô¥‹I°‚kYaµŽ6´‰ ƒgÊ#FÛ•qü+ùP�ZÚÞÙiÚÊÝ\Ì×óMypÑAq$_ftƒÌyF†ö�@lŽþµÕZý¬x_Q:|“ÛÝÙ?úK1{É™ JÊñy¯…%‘ÏBé]…φt‹»{¨&´&;©Y¶Êê]›¹£*:T÷š�¨B±^év—©,°« �€y‡æšf�}¦kÖ¶:‚A|fòQ£°`.Ó`”ÜK¾Vâ 0,#�Zž7²‡ûGRº¿²¶¹�´híì^[ep×FIXÃgæË)Ç™®¾î3�¼3ÁK Å"5Ú£GAØ{VÝæ“e¨]Z\ÝDÒIhþd?¼`¡½Jƒ†#dv¨âдèu‡Õ–7®¥|Ç™Ø(8ÈU$ªçhÎéLG$ºf£ñè[ø–ûý Ëd“,çÊi\0ˆfä×Mc¦Ùé‘Ê–vé Ë+M&Ñ÷ÝŽKÜÿú©Ö66Úm”vvqyVñä"dœdç©ç©  QE”´”JSILAPÌN/úæÕ=T‘ŠêpàÿË6¤Æ�**1ýJ<Çõý) f¥gý¡¥ÝYoÙçÄÑîÆq‘Œ×“·ÃŸ#•QlÀMÁý+ÖŒ¬KU×ôõb ôY‡5è`±¸Œ:jнü®pc0˜zÍ:ÎÖó±æð®üIýÈ?ïð£þ׉?¹oÿ…zgü$wüÿEW!º[ˆVXeW�†U—�k²YÎ2:Ê)|™Ë«=#&þhÈðn�?‡´f·º‘ye2¶Ã�¼{ô®Š ó×ô£Ì_Ò¼zÕeVn¤÷g«JœiAB;"z*1ýJ<Çõý+3Bz*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z*1ýJ<Çõý(z§ÿ,ÿéS#±p â¡¿ÿ–�ô  †Š ^Š( Š( OJŸJ×¼i¨ßCw" EŠi #’à’…‡ ü¿2ð}M6ÇV}[ÇáºG…­Ü ûÝÎ – ®ÍÛ ^NåçŠßÓt]?Gó~Ãoåy˜ —fÀÚ£q;TdáFÉÀ«ô“âk[{¯ ê so ë*¤Ñ‡PʤƒƒÁÁ¯œèK¡-Ä>S^˜ÐídÒ7dl_Þc“À¯tY‘Ô20!•†A†¢k+W·òÚ‡|³+�Ðc¥VÒšÞ q§B3hB%à*�òàzc¡PÍk üÈ€‘ß½Eö¿½'ýöhåOìÿzOûìÑöÿ½'ýöhåª}‚?ïÉÿ}š>Á÷äÿ¾Í\¢©ý‚?ïÉÿ}š>Á÷äÿ¾Í\¥ª_`�ûòßf�°Gýù?ï³@hª_`�ûòßf�°Gýù?ï³@hª_`�ûòßf�°Gýù?ï³@hª_`�ûòßf�°Gýù?ï³þ4vŠ¥öÿ¿'ýöhûß“þû4À»ERûß“þû4}‚?ïÉÿ}š]4•Oìÿ~OûìÑöÿ¿'ýöh¸X¸i*§Ø#þüŸ÷Ù£ìÿ~OûìÑp±o¥PG7æXÎc‰vnìO|U¯ìØ ƒ6;&žÈ±�ª \,%QHe-]Šèפ ÿ*óùx©¯L×4+óÿLùW–ÛD÷Bo-7y1™_æÆc?νì¥/e&ûŸ?œ]ÕŠ]‰‹ãø�úÖÐu¹t‰[/hø.žžãßù×;ç'¡üê}’}„Ý€Â'•�ÿÅŒôúW§VŒgIìÏ&•IÓš�7ª=r â¹�&…ÃÆã*ýI\·�¾�q’Hž§ý‘]M|¦"—²«*}�°ÃÕöÔ£Qõ +Î ñ/ŠgÓ-oö–<û8.Š}�þO6@�sæóÔœ÷ÅoYx’{8uõvwV÷æÒ±µ`ÓŸ*7&æÁùÏ$ãœV&ÇSEqÖ^#Ôm//¦Õãßd“”[ÆXéí±X+àeÔ«).8‘Ӛ̽ñ¬Ö>7¼·:…µÅ´VÁ¢³†ÒHph>g|Å;¶ãj·M¤Ð¢Q\§†u øæ{Ní/â!}ÄG+ ¿>[Èçi =Á¬íkûrÖæ×NÓ$Ò§H™.,³¼ .F@ù”c8àžuvÊúßQµ6’y�–eWÚ@l ŒŽCÔPŠ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ª÷ÆðZŸ°, pHÏb òxäàvã>¢€,Q\”~%Ô\ÿg­N¨u°Y‚·�vÅæ—Ûœð¼mÏ^õnßSÖµÖ±éðOo,ÐÝ4åÙFØ@Ç 9ɹâ í.{FˆØ¸hÄV23}¦ã$ÛŽÜúÇ$POEdêú�Ü–:~ž û]Ùv8%eŽœ•ÈëžÕ�Нõ³Ãg•½À·š[ƒrÌStRÙŒ'qè1ÁÍuôW3qâØæð´ºŽ›û㦋ø­Þ6n ã¯ ‚ÏY[#�Ñ«Á¹$ö»EPEPEbøŸR¾Ò4Ÿ¶Y%³ì–5�O»î³ªð~}j/êz®�is¨ÛÇfÖ6‘y®’2KŒåW z`üÙ'   ú*­ð¾’ÌÿgKo Á †¹‰¤P;åU”çñ¬Ï _êš•µÜú‹ÙÉÜ4VÒ[Bñ‰NÖb›�À�ÏAžô»Er‹®¾”_Ú]iÞxnpíÀ«•uòÎ=Á®DÎŒI;‰<’MZ“Y¸—KM9åv¶�üÄFÁÚpG®9cüÍÊž¼þ®–Šâ; }Æâ×S×fž=±Ý^¬°�ÀîQKž:r¬9ô¬}OAÕ.ü_ßÛÚýŠåUb…)c#v9-»ä`ü¿\öPá}-ಋJ›ÃfÖÈÚâùï r™¾@>ë¶åÀ|îÿd ®|3¡]xÎÚ8|1j–vÖ³­Á}5R&�´[0Jís€üŒãŸZîh S^Ð5²·Òô =*ßI,ZòÜ»[ù£ûƒbÿr8ïVõ /UÖ4y¬. �ªIn›D%¤Ù2¾@ä.SxÀ=k ¢€8ëÏ jºÍÆ£>£5•»]XÇm·- FI@Nà7HÈãŽ=êK¿ êË_Üj3ÚÛÜÏj–Э¶çEÙ'˜‰¶[/ažNk­¢€9½KJÖ5í/û;Rû 0M*ùæÚFfòן”²ýâBÿº2A'©¢Z]Xhööwf’Ý|¥xF‘xSŒ ÈÒ´( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ³õµÕŸI�4FµKö�§€rGaŠÐ¢€9 Oj°éö†Â Í:àÏ.^U¸.®²¢�[y9óùTwþñÒÆÎK ÝÄ·—™3ÃælùhB1 �”ž¤Ùã³¢€9 gÁÇ\ÑnZUz¼¶Mj«m}0·QólR]ËÏ ¯àjýŽ—æ_ÞÇ:Îm µKšbÌÎÝ#nXÈ3ꆺ (�»¿µš½Ì-tšt;œ8Pd`Fa�‘ךeÖ‰ª2Ï%Â[‰n­âÓX†D_瑎Ü)lÞ§5ÙÑ@Lj´ÍwP½´ŠÊ6M& I%¼÷–@~PÛca°`w=x&µ¤kzÝ›ØÊtÈà�St«¼Ël@¶q†9«|¸ãŽ+§¢€25}:î{ËCOh>×f]BNHIÆdAÈSœ˜ïYRxbé4›K8àÒnåF–WžòÆ)¤bæHÆBÇŒŽÜ×YEbÁ§j:^Ÿ�¥Éf¶¶¶±E�Y˜²œ6ì0TG œóÒ³&ðÖ§{%æ¡q-šßO%» u,Є±Ä€NK1Î8Ààãž¶Šçt}#SÒüçO°D.¯Ó[G¸Å {a,X$€9ç ø)qŒ/qœŸJÔÔ4½A5¸µm,Ú´¿e6²ErYWníÁ”¨$ÎF9㑊ݢ€8ÏøDµ K->ÛOžÙ&¶…c7áž9Wæ,ß"å]2N¸5׆5 EþŸö¿Ù—×¢òIwœŸ2³ ÁÉ^#ô8®¶Šån|3{5†¯s[‰®uHõ }ÄíÂyD+ñ‘“gzUïéwúφZÚ‚ßS Ñ>âcIQÕÇ8Î21Ó½nQ@Œ^{oh—pKÙXZ¤RÆIÜï:FGàJùϵx^þ5µÓž{oì»[ó|’®ï=�˜Ò#3rÙäœ×]Er‘xbúÚÚ¤Öâö×Q’ú<î1¾fw Ügî¾3ŽïŠÐдËû=CV½ÔÛÌ¿–9[–!6Æ©Œ�3÷zÿ*Û¢€ (¢€ (¢€0|Ya«jšWØtÈì›Ìeiæv�n×V �œàƒÓõCWÓüQ©ÞX±¶ÒʲÉj÷r(’pr "#•^ `dàž˜®¶Š¤ƒRo´‰~ʠƾG–X•}§vâGLã*/éÒiÓtéY[khâ‘�’¥Â€Ägœg5¥Er_„gÑìô‰l¾Ë¡i#‹’¤„¸ŠFË‚q’~ë Ž«Ž†«Áám]¬Î™pºlv£PkźŽGy°g2€  ‡;�zíè Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Çþ°TWÿòÏñþ•,ëEÿ,ÿé@ (½Q@Q@ïõ}7JXÛQÔ-,Ä„„7,{±×ˆÍMkwm}l—6—\A ÊK‡VíÁÀ‡Q·ÕÀÖ袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š±Pº1r@⦢€ òßÓõ£ËOÖ§¢€+˜˜‚ äÇèŽåŽ“m’rp¸þU³{p-,g¹+»Ê�Ÿ¸®¼gª$Tzé]¸J5曢íó±Ã‹Äaé4«+ü®t?ð†è_ô ·ÿ?�ð†è_ô ·ÿ?�s¿ð™j¿ß‹þý×GáÏ&¯‚ãlwŠ3�Àqê?¶­KJ<înެƎ#Z|‘ŠOÍ#NÚÆ+;u‚Ú†%û¨€*o-ý?ZžŠó[mÝžšI+"-ý?Z<·ôýjz) ƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠƒËOÖ�-ý?ZžŠ…ƒ‚G ÿü³ü¥\ªwÿòÏñþ”pÑA¢€+ÑEQEÆjskKxu=ÃZŒZ�Q«4¶¾UÂŽ›ñ>r½C{tPû0‰%\1mûKgL�ïYú?ƒ5Í7]òêë:M"‰Ë±2ˆ£,cPÀ Û·|ÙzgÓèþ"Ó5×™4ù¥v…QÝd·’"ó´�ê2ÓÈô­Z(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š±EPEP~ºq ßŸúwå^J²68P õ�xwQ?ôîÿÈוèñCrº�˜n1Y¼‹ìÀŒÖ½ì¦ÊŒäûžm*Њì0»Ÿàè)ñÎД‘7¤‰‚z‚;Õxm..-f¹Š9Ö8^¬ùPÂ4×_òÛí‚=øþ„ãó¯Z\»yØñÔ$õÛ©é~Ö_ZÒÌÒ¦Ùc-ÈèÜŸnµµ\æݢܟúx?ú ×aÚ¾SN4ëÊ1Ù3ë°s•J”ž¶0?á8ð§ý zWþ§øÖ¦�ªéú½»\i·¶÷p«2A u €q‘ß~uç>²¾Ö<kqog.Ø4Û8 WvI’mÝ�Œ’9íÍmh–׺×öúù÷z@}`™ã]†b¿g‡å¥‚烕$ã¸5Ìt�Už­a¨]ÞZÚ\¤³Ù¸ŽáýÆ#8ÿ>„vªÃĺ;kÍ¢ FÛíáCy>rîÏ?.3�ØÆ:s\ö™¡¥Íþ¯•Ãéóé—‹oe4* HÌ9Fï©fbCs’H ó\ö¸ÓIãÛ«hµ²~Óe*\Ggk&øö°¬À�¹Ë�øùC°ÎXèÚ>½§ë¶×ØKæGÏ œs¹{ãÐŒê¬Ùüw ÚÀóÜ>¡(2òI¥]*¨õ$ÇÅfxjù!·ÔÅ­��Ôºtikb'Ø.@ùä Ú PÜ“œ šÒx‹RñF‘e}¥èòÆ žámN¡)…Ù ÿsÉ]ÜäžÚmi¢ÂÚúKØa¶¹Uh^vò·ç‘Ã`çž�jð9+”Ö¯VÛKFÕ´í:Mnå^ÚÎÞ)<Ðû»neR€Xãôë«ïøE¼-íîḽÓìb]ÎÛ¸O5†s´Iúh¤0¦µFn†-ÃpRH ޏÈ#>Æ¥¯6»ÔnôMw\½�RMNæ :(æi9`˜TÞ¸üêý爵=ûZ¿‹Tö1Ý%ËF BÎåNý˜@û+dô4ÝQ\†©¨hú:ÝA­ÿj\Çs[qa®Cqå ƒŒòÊ{m䑚ÚðÝÔ×Þ³¼žín¥¸O5�T*©c�€`p¿wžxçšÕ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦M4Vð´³H‘ƃ,îÀ=ɧÕb]6ßL–çWòœ•Úp ©S�yïœcÞ€$��°ûx¾¶6XÏÚ<Õòñë»8¢}NÂÚÚ;›‹ëh­äÆÉd•U[=0IÁÍp–ðmºÒ¯®£X,õ nK§¶b6 »¬AÇ@K*±™€ëV-/4½?D¹¸kK{©$Ô.àÒ¡* �4‡*„ôMÀ’z3Ò€;{‹»kKWº¹¸ŠtšY*(õ$ðÝÁn"2ÈÎ�GîcÐ } yw‹týBÏÀñhÒYÝ^éš~�Åî hÊ<ê„)mÎb`¶9;»ÏYs,ú¥Ý²Ã�Ëe§=ØŠLoI¤S_t‘œ zÔPIo}iw$ÑÛ]A3ÂÛeXä Pú0Ö’ÚþÎõåK[¸'h›l‹�ŠCƒÁ¯3º}š-ƒx{ýpð½É“ÈûÙÛÍØçvíøÏ9Ýï[Z~­ýŽ—°Ç—8ƒLŽâÙôø¶`V8[,s“Œ3“À ¬kzY“nžd¯ bG]ÕŠ°PqœG4º�”qZMyoÌ¿êáyT;ý95ÇëÖ}§‡¢ðêGo6³f,ÖWQ¼&éœõ ¥™½Øàriž4û"ér<7|©jЛ肃u6ÒŒ�<1ÆA'#u ÚêîÚÆ=ÝÄVð¯Y%pŠ?L¸Ôl­#ŠK›ËxRbm$ª¡Éè'šÅ×|¯øIü=ö¿/외Ǜ�¾vÁ³¯Ûæ~µÊØ[´Z]¾¥¿J’ÕmïaXoåØÔÎÅ$L‘°(Çyé3Ï ­¼—Ç 1©g’F ª£©$ðT´×4›ûy®,õK+ˆ!ÿ[$7ëûÄƹ[[Suà{};[ÖÒÔO£ÁðK°ŽâÍí,# "oï7( ßÀÍz-Cݼ·3[GqÏS,Jà´a¾îáÔgëL‹Q±œ!†òÞO1Ú4Ù*�ιܣ’0r;`תOu¤xËYÕlQÞ[ƒ�°r¾c¦>ÁÆßûiLðá“E‹EÓ­¾xWZÔ !”3:¢ÎF É*9ô K¢¸ñ¦< wâ¬Ä×riír–kbÝÆñ¿tîÏ>�+BæëV‹ZƒG›][mÖ�x×fǘÁÀòÔ¨99Ëa‡=询¸ñF©6Ÿ¥ê×7KkbÖ©-ȵDv X�ì�óyL#oÍÏz–÷ÄzœRjWÉ}bÔ’Í4³“2–A’~öæ YqÆ1�y Å5)5 4ô»�¯#@ïn$ESܯP9�I%ÌË RÍI1+3d BŽçž; òÍBÆñl¼E7öÍÊ/ü$–Êߺ‡æ·Ãd§l¯·È=Nzß2éº&•«Op×K¼‚Y.Y÷NÇhîÈIÀŠèŽ¡d±I)¼·Ç(…ÜʸY a9á²@Ç\‘VkÊtÈ%ƒUÓ4yá*úÍ;µ*ç8p²I(ü8Gü ¶í¼G©ÈöWí{}«TkÒ„k˜ÐHÉœýíêyÏÎC@ÝEÌM41ÍË *+P�vÈ þ5ÂÛëšÙÐbÔ&Õ~Ù©=‚3@�-�Né¼ú¶hÏ+Áç:> 5ï+Þýµ–ê3áAl@�Bñ‘ÓŒt ºŠ( Š( .o-l£]\à W =OzIõ +Yâ‚âîÞ¦8Š9$ Î}ÏáX=Kvð¼­2D]&€Æ\ ©ó“$g§_Æ#N½…ôˆÙµmV!— º(AæVn .N=X€(§½¿³Óm�Íõܰ–y('§'Š�OÕôÝYôÝBÒñc 9¶™d O®ÒqOk‹7I£ib”À¡¥MÁŠŒd;d ÆðTJÞƒRd qª§J@ïò£ŽÊ»T{ Ù�‰† …幊w ù«¶F=œòx<J‚ß]Ò//^ÎÛU±žé V‚+„gR:‚ äb¼ûÁlµºÐï5‘Y\G-¶šW8·“q?7mÒ(lÛqߘ-EÔ:]µäÓØIe¿#%ªDVé˜ÝºŒI¸ƒÉÎŒ¨#=èÖ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*�ÿü³ü¥\ªwÿòÏñþ”pÑA¢€+ÕMJ;Ù,›û:tŠéHdór>?…»€zdr:ûUº( ÂÿVÕ¯"&Ê]2ÖÜÿ¤,ê Í&1±;lw÷ãënD2Dè�° 2ã+î3Þ�Ey}ÿÛ.|9âëVñ-ÁšÈ]‡‰£€Éq¸ßòdHÈÇ_j»âkGµøy,úÔwsÜ,Ø_5¼Ã+2©!Tü ýìô®¨ø[JZ½´p´gV‹¹•³#ï˜ç <ƒÒ¦Ô´+]WM‹O¹’à[&$r”óT mb9*{Ž(Ä-oì&¿ÑÝ�n­w ǘÇN‹b#«6â�]; éƒÈ­Ÿ‹{�êz•¦“gqe›?›1U�vî�r¦DôVÅzÃè¶O}av±ùmb�(€ ÀÇ`£[UðÅŽ±} ÍËÌqùMlH¾bHCqœÏ=3@>Ûgâ›ÛY�RS¦iñª±ÁfQ9 zœ ì+"OYÉâhõã,âå# å†Y :†#È8ëŽzV½QEQEQEQEQEQEQEQEQEQEQEX¢Š(¢Š(/ćÔÏý;Iÿ šò� ^YA=è¿vH%´xòŠK1%xø½‡R³þÐÒìóâh÷c8ÈÆkÉÛáψ‘ʨ¶` &àþ•îåU(*3§V|·g‰™Ò¬ëB¥8óYåñ5âÝDÖ1‹[h8Šåqßw÷‰ïš±©êZmdžÂZD`¸’èK-¶Õù%O§N)?á]ø“û�ßáGü+¯rßþÿ õyðWMTJÞ{ú÷<ÏgŒ³N ßËò:ï†m»Bº?ôòô®Ö¹ßèø{Fk{©ç–S+l9 Àg¿Jè«æ1ÓŒñ”ÕϤÁBPÃÂ2Vv9»‡þ¶¶Žðþžâ5 XØãÔ‘’}Íji:&›¡C<:e¤v°Í)™£Œaw �:p+BŠä:ŠöÖ6Ö“ÝM{$º”K1ÜNç ©žz|ª£�JŽm2ÚãPŽöT-,pIn9अK?à W(  �/ÃZn�p³Ú‹–‘"òc7rÍå¦A*�Øí*ôþèô§Ç¢FºñÕ强že�âŠ) ùp«•,’‹ÔšÔ¢€(j“«:>¥¥Ù^4c×6é!Qè7Š–ßL°´@–Ö6Р�Ê J &IÛÀé’xéÍZ¢€*ZéZuˆ"ÒÂÖß+´ùPªdg8àtÉ4ë]>ÊÆ†ÒÎÞÞ'$²C¢±=IUš(•¾�¦Z6Úu¤&72'—®Ö#†‚F}êÄÐZ£%¼1¬ìì#@ ±9$ã¹<“RÑ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W½°³Ô­�µý¤P Šxé#¡Á«Pu¾�£ZÚMio¤XCm><Øc¶EI?Þ`þ4^h6 �¥î‘ar�.Ø–kdqô\ާ¥hÑ@cÓ,!ÓŽ��²X•(m–%m9ÈÛŒ`ää{Ñma­ÕÝÂ3³Üº³nÆ*… ¸3õcV¨ -ìm-$šKkX!y›t­aL‡Õˆê~µVM Nh–(­¢·�í rëj‚GF `sÈð­(6ûÃÚ.©p.5 O»˜(Q%ŲHزA8äÔ¿Ùg›o/öu§™l¡ o!sŽS�”j»ECuim}‚îÞ+ˆ[¬r u?�⣟M±¹ò~Ñem/�s™·–ÙÈãð«TP2YÛK#¼–ð»ºynÌ€–N»O¨äñQǦXCdÖQXÛ%£gt „9ë•Æ*ÕV-6Â!‚+hâ�·ÅD¡coUpy<�ZXtë{©. ³·Šâ_õ’¤J®ÿRMY¢€*Úé¶6RK%¥•µ¼“ÈÑD¨\ú’5jŠ(4‚å’T‰IH2:¨È=øâ¢]>É,íÕã‘æF(+#çs8c¸äõ9>µfФÚ6–írͦٱºn �Oš=�˜}j[» =B5ŽöÒ ”VÜ«4aÀ> Ö¬Q@fÓl.g†yì­¥šõRI³Gþé#�•ôû)/RõìíÚí՜ĥÔzÆEY¢€+µ…›ÅqZ@c¹bÓ¡ŒbR@°ÇÌpçÐPörX´�¬Êlû;F {}6ãö«P&ÎÙ®b¹kxLñ)Hå(7"œdÔ�ǵ1tû$¾kå³·l6´â%óô-Œâ¬Ñ@ÆŸd,ÞÌZ@-\±h|±±·[+ŒrI'Ôš-l,ìT­�¤êØÈ†0€à`tôbŠ(¢Š(¢Š¥¨hÚ^¯åÿii¶w¾V|¿´À²lÎ3�Àã8•U—žŸg� iRyh7ÙÆv¨èGzV½vV±ÛB‚Eácr�€¨ŒT�üÁi1¨D�*ª�€©ôPoìëk©³·û£f4¨m‘Öì–y@)Œe±Ô¿M£Ôg"ñ±¥jV–v:}�É»�$!îÙd §§¸÷þuÑ[*´/MÝœÔ3‹ÍFª²=#Ì_Ò�1ýJ‚ â¹�&…ÃÆã*ýI^;VÑžÚi«¡þcúþ”y�ëúS(¤1þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(þcúþ”y�ëúS( ù�ëúQæ?¯éL¢€æ?¯éG˜þ¿¥2Š˜þ¿¥cúþ”Ê(Dv.Í�þv3Ÿ¹òõûÿ•/…üGªkò4òe¤ ]e³VqujA ‚xç…ëÆh«0Æ@48é•Ry�ùdŸ÷È®Âþ9¿Õîthç¹ÑîÛPV2ÛØ†Ym0…²ùvã qÔUÏøK5“¢·‰ÖÒÈèJKù9´˜cÌÏÝÎ>m¸éÆs@µÌM¬kZ–«k Ç§ù6RYo Ÿ6FPûWo@\±Ï'§™wâ�zãKÒu],é°Ûj1Z. w’)Ê6Y]A�ì:PuE`C}©ŸXiW[™cµ{«Æ‚"ªà¶ÈÕCGñÏðûÔx¢ÚØÞ]jW{-¥½{{’"ìË ä›çsÐ PMErº?Œí&ðͦ©ªÏOu4éñp’º‚e�Ê “ïÚµ¢ñ‘:\Iò2[Û-Ô®À‰�!ÁÇ#ån™Æ(RŠç®uôœGpcÓ ÓŸP»sÏ–qåðFáÀ‘±Œü¸§Gã_ËÒG©)HUÛÊ|mf |¼®H†@îEoÑY:‡‰´}*ia½½X^“(Ä'˜HL�02TþYª±xãÓIi©®ù%m18(äàÊü™=7c=¨ ¢²§ñ.�kª®™5ê­ÙeM»Xª³}Õfj“Æ œŠ¹ý¡d·Û-ö‰¼‚|ÕÀ“8Ù×ïgŒu  4TqÜA4’ÇÑ»ÄÛdU`Jgv8 Ô”QU5-B +O–òãvÈÇ £,ìNTw$�õ5WFÕåÔ<ë{ÛO±j6äyÖÞfð¹VVÀܧ‘œuv  Z(¢€,T¬5=A'úÃ@ ¢Š(†¸q¡_Ÿú`ÿʼ¶Ú'ºyi»ÉŒÊÿ60£þuêùLJµÿNïü�y¿†üÙŽ§@³µŒ�TrIÊö¯{*|´'/3ÁÍcÍ^ò(ùÉè:ŸdŸa7`0€Iågñc=>•}l´Û%û¥xË(åã ¥±ìÔúúQiu§xYá¹Ào·¬U×Ë8 ÷½GV-¤º¿½yW°’MË¢ûŸ™ÔxËè÷$�9êÙÔ>à�°øùA8®GáãnÑnOý<ýk®vÚŒÛK`g©¯™Ì±3^gÓåÿîÐô8[Ý_Å2ßJ|�&ÇûÄ÷Jú„›g…£nÕ}Üç“Сâ­^ëž&O ë›++vË"e®"(N6“ß»hÆì žj¶­£k*º�PKHôØí× ovI{ÕÜd¡2½>c“È ßÖ¦¿Ö¼«[É£ÝÛ]ù~_�vIæ>á†P=Åq�†ö—�¬ç}Ø^Ͷ¹´‹ËY6p€¥Û2©Ùž‡š5moW°ñÒÃ-Î¥´¥WÊ€Úù[@]™21*YŒ€“´°qU­¼?s§êzu͆‰¨Ã*ÞBI´í1Uc.œÂ7�”žEiø³GÔ%ño¥Ù]$€¼æ×r‡—pÃ6ÛˆrØ’[§J©áßÞMbn†ºš´Ë¢µìð?”«ÃiÚ|´ 'ƒ“ÅfÃâ­pEi Þ-·Ùç·ynoÖTP¯À™*…ÔÔg=+sJ±ÖcР³EË%ZàŒªçi9<Ðî5«ë‹¹`´¸Ö ’ÜܘⲎ՚4�Ö'ËM�´±22y"³ßÄ×vú>©|úåô–«ecyo$ËR§œò X˜t Ÿ•�mKÜÄa�]H* 2�§c  ò÷P¶ÓlþÓ}*ÃÀ'“–<$ž€ šÄÓÜ}j†¯áG×ô¹æ¼Í¶°öRZ¯Ùoæ€wmw)$•öç²5»(¢?j�b’;E»›*B¤g?6zuŒæ±ôMq¦ë7úµ¨µŽÊçdQ(&B�:æC¼ çpø}®tØô{Ö2iic"â_<Ê­ž_9ÛÂãœñY¶~µYõ/¶\ÞÉ÷‰so·QŸzí�TmÙݸ79ÔÍÄ7WwöV·ÿc-fo û+±A\£dó÷Æ`+¥®kEðÛYëS¸´Ó-$Xž$‹OŒª±vRîÄ�ÉØ¸ãžNk¥ j/¼~.Õ´»ÔŽ+;[už€ œ(iã€ÊGN3Ö«ø{Å7z­ž›-êÛZÏw{qn`ØåˆŒ9 $9'Ž;Tš—„µ¯ï&žàG·PÌ»KF±ùrFÃ�†‡~ ö¨àðµâ]Y<’Áåê^Þ>Ölùs B�ÇÞ`Ïn&€5á)Ñ|»©Eè1[#I,¢7ØN Œ6\Dž)Ñ¢†9Zì•”°Œ,.Ìáq–.JŒ�›§#šÆ“ÃzÓø2çÃBM<À¶FÖÚ}ÎðRã^:ã9>•©¨iz‚kqjÚYµi~ÊmdŠä²®ÝÛƒ)PH#œŒsÇ#j_éQImÚõÂ,‘ùHÒ‡£ €§±8Kâ& Gì^"ÜoXÈÚÛUÎ0¥±´1ÈÀ''"¹ÿøDµ K->ÛOžÙ&¶…c7áž9Wæ,ß"å]2N¸5׆5 EþŸö¿Ù—×¢òIwœŸ2³ ÁÉ^#ô8  RøüÛ^j’Ë=�­ìV1¶SbÅ�É‚8ÜØM¹8^~až‡PÖd·}ktÒúäC)–6WUhØ¡ÁÁS¸( Žý«:çÃ7³XjñÇ5¸šçT�P·ÜNÜ'”B¿1‘Æq‘×¥^ñ—¬øe­¡x-õ0ÑMî&4•\sŒã#;ÐE§Œ/¯-®6Û@—Ú±ZÛ’ÝÜbCÏ]‚Cÿ®�¥}¤i?l²KgÙ,k ŸwÝgUàüúÔ^#Ôõ]ÒçQ·ŽÍ¬m"ó]$,d—Ê®0ôÁù²OAKâË [TҾæGdÞc+H÷3´{vº°ÀTlç˜÷ª¾Ÿâ�NòÅ�¶�öP–KW»‘D“ƒ�Iªõ'ôÅkø‹R¹Òü?q{gµÂì¯8�W%Täã9Àô¦øsQ›R²–Iïm.¤IJ³ÛI—À;Y$bÁ¹Ï8àŽ*YF¸VSÓÕ‡–bVAã÷��ç¡ê*=Lº´¸Ô/¯žµßJ²ƒâë�Meij-MÂGçj,2V$…EÎöÆy8dõ©iÞ5¼¹Ôb†K½"w—P’Óû>Væ4Y|×9WqùGwKðŒú=ž‘-—ÙcÔ-$qrT�—HÙpN2OÝa‘ÕqÐÕx<-«µ™Ó.MŽÔj x·QÈï6 æP”Oðçqï@½Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@�ý`©êÿÖ ž€EНEPEP~©§K©ˆ­šàÇbrnQ2aÆwe<ç¹éÜÕèãH£XãED@UF �Es^(±Ô®oô««!zcµ2³ š”*‘çü˜Úd¿#럵Ð'±»7všF¿orsûè­´d~züÀgšôZ(#ÂöWZw‡,ìîÃ,°«"«,©¸ì ·åÈ] ãŒçVG‰ü?­x�g±'IkH0ÜK‰í:d¦2 dd¯Z먠 5Ñ&Od4%?³E˜fÉ“x“vO1ïY‘xwY»ñ†§©�*7²ß››4u–ä*ÁáWœã-Èã×Ñ@�á f=ÇPM*t™_´Z»¼²•måh9ç“Ç?ü"šÈÑ›Ã+wd4&%<ì?ÚD³åãîç.ìôíší¨ bmZÓu[û­M?É¿*òÅw¼yR*„Þ»~ð .Tã‘ךkøNHt K´�Ø_Cu,²åL›\»�<’Iß­u4P-­½Þ•â'Õm­f¹3é’@‰>tdÈŠ@þöçö¨‡†u9´K­*KY.l-ÖT»f }¥œ†Ü¹éÎOJ먠=OêQXioçÛË}fn–DK©íãu–c&UãÃ)pA�5fÿÀ³Mk¥Ûص½¬KÙuÄ’8’ÜȲ2£6I9 îÎÕÜÑ@¨Ò®µM3Å cò.5!-¥¸˜ !� ã;Kon�Š%ð›ÝÞ@.Ú³þÄ}6eRwb‡#Ž˜SÏ\ãŠê¨ ×Áú¯öDþêÖ}Qµ;k»™�m­%@QÆsµ3Œc,yïV5 _]ÚøŠ(å¶ ©^ÛÜBY›åXü¬îãƒû³Œg¨®ÂŠáçðDͯÝψ®l/.ÖêE–öâ&�†Ü�-ÇåAãg8×ÿgÙ+ö;}¦o<�)pdÎwôûÙç=jÍvðC$²E hó6éTçÉ=Î%P‰´«ýI,ŸN}“ÛLeRn Ò3óC('“�”cÖ©hú.ºšüZޝqæùP¼JÂñáˆ8*¶±ddg–ãÒºº(¢Š(ÅA'úÃSÔ.Œ\�8 è§ùoéúÑå¿§ë@^!øsRÀ$ýšNŸîšñ½;X¸Òä’[YZ9$ŒÆXc;N:z5ï& ‚¹±ßÁú#¹c¤Ûdœœ.?•zÙ~>–…XÝ3ËÇàjb'Ó•šµ“ÿ/ý9øGÿ ßþÝ@F‘|5=Êø ¿h…$+ýÒFHüÈkò^XxŽâóV¼Õí´ŒGöK« ?uo�óyɃœ·rÁí]^‡¥.‹¤C`®®#.r©±Fæ-…\�ª3€2pªŸ„­u[‰Ú}CS[{’>Ñh—?¹— A !HÍa$š«x˜x\]]qqý¥öÏ4î6™È‹vsþ·åë÷'‡¥»±Öbµ×ïuxu‰|Ì %ßgwÔþë‚oÊxï]oö=°ÖލA7Ù>ɰ0vìŒ ƒŸzÏ´ð�¥­õ½Ì—ú�صÜm¡º¸óA\Ž2N bqšá|#«\Íý�ö;ÍnãPhMƤ—²ÊмX_3©ß´žõ¤gÔ¡ðD>4:Åëß²%ÛÛy¿èìŒÃ1ú”ã?{<溫O XXã$\«é*R w.çB0Èü`©àð c x+MI� ‹ãb“yé§¿ÑÕó¸¸Î7s·;sÚ€)Amwâ}S[y5kû$±º6–ÑZKå„*ŠÅØ%ú0+w¸ÖtO ëê:�½Î£{ µÊÚßKl¸pÅUXÉ@xõ®¿Pð¥¥ýô÷iyd÷*åm'س€07pyÇ8ïV®£µX¾ð­Ž¥u¥\ÝKròé¤bã÷¸*@“�›æEnÜŠËÔõY-µ-GX–Ü8Ð´ÂÆ'iö]Øì¨œãøúROã‹«1rot7„Ãoè_´‡&Ýœ+±Àá”s·œã­iÅáß´hzµ†£'ϪK3Nð7!_åP Da#µYYK~×rùŽZÄØ4lFƈœœŒg?�á@:�ŒžÒîâ]0Þ$w�X£¤á|ÉdRÄ Œ| ¦yþ/n`O^ís ¼0Ûß%�ä¢éXE#• Tc.>t'§^ø­ ?éÖZM†�×L–w‹z²»©’I$o8äsŽà šo ØÍo}Kpöù/ä!—"D(@}ßݯ©äó@ÿð±lˆ¿³!1}·ì;þÖžw›�¹õÙ»�Ù÷Æ+¢¾cGþÎÔû³k´ÁÈä�0óþ¯Œîô" ƒÃ�Újr^Zß_A’™ä´I’îy-‚ <�ÖÍVµ¼ûT—)ö{ˆ|‰|½Ó&Ñ'îOUçõ¬ÑEfëZ”š}ª%¬k-ýËùV±ŒäuoöTe‰ô¤UM&êöÊý´mZçí3”2Û]” ö„þ @à2“ÐuR§Ö§×¼?kâh º}«ïèðKÎ1ÒXÜÀT´_XhZ‡Û-¤Ý&˜û¬\ö¢…õÅttQEX¢Š(¢Š( Û�ic=É]ÞTløõÀÍp�ã=P± £Ð'JìµÓ�üÿÓ»ÿ*òU‘±ÂƒøW³–aéÔ„¥5}O5ÄU§8ƶ‡Oÿ –«ýø¿ïÝt~ñ"jñ.6Çx£8£ü+Í‹¹þ>‚Ÿí IzH˜!—¨#½vÖËéNг<ú9�zsNMÉÍEbøcY}kK3J›e�ü·#£p}ºÖÕ|åJr§7 n�¨§R5 §˜QU/5,n,¡˜¶ûɼˆ°3ólgçÓ„4ûËÛkVk©DQ´‹b71  úd�3ïPYbŠË>!Óã7Þt�Ù]%¤…—9‘ IϘ£ëZ”QQEsòMSG#ÂÛ%U`J6Áô8 þ"¥ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š)“M¼-,Ò$q Ë;°rhôUQ©Ø·‹ëceŒý£Í_/»³Š'Ôì-­£¹¸¾¶ŠÞLl–IUU³ÓœÐª*‹»kKWº¹¸ŠtšY*(õ$ðÝÁn"2ÈÎ�GîcÐ } MEAo}iw$ÑÛ]A3ÂÛeXä Pú0Ö–+«yæš®"’XYQŒ‘�vÈçššŠ 5½,ˆÉ¿·O2W†1#„.êÅX(8Î#ŠKÍ{GÓîÒÒ÷V±¶¹p Ã5Â#°'€NNMhQP]ÞZØ[µÅåÌ6ð¯Þ’g£êO—wöv¬——p[ÆìZiO@ =hÅ…ÕP»0 KÀµFMoI†À_˪Y%‘b‚á®FXÝœg Œ{¿ETÓõ];V�äÓ¯ío#CµšÚe�)ô%IÁ§E¨ØÏw%¤7–ò\Ä3$)*—Oªƒ‘@hªöº…•ñ�Z]ÛÜ›l‚)ì>‡ƒV(¢¡ŽîÞ[™­£¸‰ç„)–%pZ0ßwpê3ƒŒõ¦E¨ØÎÃyo'˜íl•Nç\îQƒÉ9°hÍQ@Q@Y5)5 4ô»�¯#@ïn$ESܯP9�I%ÌË RÍI1+3d BŽçž; –Ьu %ŠIM帎9D.æUÂÈH Ï ’:䊳@TQÜÁ4ÓCѼ°�²¢°% €Gl‚ã@ÑEQEQP\ÞZÙF$º¹†,4®z žô\_ZZI w7PBó6Ø–I™¢ƒÔý(z)’Ë<³H‘ƃ,îpz’zSm®`¼·K‹YãžY"pÊßB84-Xj6&&–æ)Ü$/æ®Ùô sÉàð=* }wH¼½{;mVÆ{¤%Z®�Hê ƒ‘ŠÐ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(4Ph  ôQEQE!u°ÜA!sɯó�-sþ*XÞÛËó®ÿg1æ 1Ï^6cïgŒ{â·-üï³EöŸ/ÏØ<Ï/;wcœgœf€yyo§ÚIuu(ŠÆYÏoñ=°:Ö_ü%zRàÊ5�<Ë�6æ(×çP°ðh±“Ë¿·³¾¸µbxóXÈÙ†Tû1®‹Áúä÷:Þ£g¤ÝݵƮåíãxÑâ>LY æ2Ž#Šë¥×´xoÍ„ºµŒw €mÚá™# mÎy~uj[»h'‚ ®"ŽiÉÆîH@ÉÚ'ž+Ëuè.n®|qþ‘¦ÛÛn‰¦Žê<Êqo!vöksF¿{«jkV:EÜÑè–öòDâHñŸ,Ó Á‰òö©Ú ë@�y©ØiíÞß[[M*¦óí“Í<ÞÚ� Ô!­Ô<Ã̉H$ôÉô5Æi³è·~"ñΰÖnÒ¬/n×{v›3�WwðîßœwëXìWw>#×&±HgР‚ÂæöÞ#ó\@¡ˆDÇvîb;í½z�½ý�ã¶»‚v²b)��­Áèpp{âªÏâÖf¸Ö4øbŸw”ò\¢¬›NÒO8<VŸ¨Ø[øãS¹{¨"µ»Òí'·‘œ*¼jdÉúd~b¹�*+ãÿX³µ´ši,ïäT¼vD(Ò#±èAéÞ€=6MJÎ( �®c1\H±Âèw Ž uÿ&ž—–ò_Kd’fâ(ÒIò« sÓ�­Çµq¶:<º6µá» ‰#}Òß]•‰qJÜ…@z$p?†MNé/-®’ÌëÚ³B/]C`�S¸Ëyyãç4ÝCuËJ°M†1È�Øøiô8 ãÞ¥¯(¶Öµ&ÏSŽÊèÝKwâ'·{èÄ € C‘¼ˆÃ¸äã¯À­eñF³¢ÛÚjZócOÝso >Ife]ñ91–ˆWBÆqÇ4Ý\Þ[Ùù>|› Ò¬1Œ¹ÏAÇÐþU=rWö…þ­£CªÉæÝXYÛ£´(Y¥Ê"à |«æ�Ê·mÿ¶öX}§û?~æûo—¿ÁÛåç¾qœûЕZËí¾Ký¿ìþo˜û<�ØÙŸ—9þ,c=³Vh Ž+ Å7·Ö0ÛÛ¥Ú‹¹<©nmmä™ �f ŠNâ8ç·9Þž]´Í.ÓP]"X̱¬ö3¶² eA‘@*ÙÎÈ;½xë¨¢Š±EPEPoˆ<;¨ŸúwäkÊôx¡¹]@Ì7¬ÞEö`Fë^¥âC� êgþ�¤ÿÐMyG†¯, žô_»$Ú›/ÿv‡¡ÁB÷w á[ëÃ/™{¬Ër‘ÊNb�àœÆ˜=0›xõÍ:á®$Ð5Í"ûR‚tù�&¸¾�¦óm�w§!Ôî¶ç$å}Mt÷Z$wšÍ¦£=ÝÓ Fó!¶Êˆ•ö²ïû»³†#ïcÚ¬Þi–z„–ÏwÊm¥Dœã¡#¶zu®#°ò�_]x‚èj—6;õ%’&³wiû{l#ãpàÝŽ+³µm! pn"æbó8ûÜqÏ^8¨`Òôû`¢ÞÆÚ-±˜‡— ®œ•àtÏ8©à‚h#‚Þ$ŠÔ*G…U pIEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPTu‰tÛ}2[�_ÈpbWiÀ*¥NAç¾q�z½Uïl,õ+cmiÔ‚bž0êHèpF(‚·ƒmÖ•}uÁg¨kr]=³¶mÝb:YUˆìÌZ±iy¥éú%ÍÃZ[ÝI&¡w• PL�¤9T'¢n“О•Ö[è5­¤Ö–úE„6Óã͆;dT“ýàãEæ�£j ^é)í‰f¶G�EÈàp:zPœø·OÔ,ü�%�Õî™§é ^ꌣΨB–Üá¶& `“·û¼õ—2Ϫ]Û,0I ¶Zs݈¤ÆôšE1Å÷IÀ—¡=Et1é–éÇNŠÆÙ,J”6ˈ¶œämÆ0rr=è¶°ŠÖêîáÙî]Y·c B…\ú± Òå­WAŸÃv‹wrš»à�€Þs�y$s»yäç†÷£Ãw’èrx™›LÔá!Žw’ëÊÝ4åz®ß3³pqǽ ÞÆÒÒI¤¶µ‚™·JÑÆ»z±OÖ¡»Òm/2F™¢™Ê �7rþÉëÖ}§‡¢ðêGo6³f,ÖWQ¼&éœõ ¥™½Øàriž X´§ÔuÝ?XŠ[Ûx …ì�c“Î)’ˆr Þg#’:×U}áíT¸†�§ÝÌ(’âÙ$lÙ œrja¤i¢[yFŸh$·P�8…s�€ã€a@Ÿ£‚_ë>|q±[I=à­´à�zÏñ7›u®X.Ÿ%€»‹N¸aöó˜$F(þ TsØdsÇY¨iZv­E¨ØZÞF‡r­Ì+ SêƒQaiÊ/쫲BÅ¢ƒìé± 9%W$ž(#Ã[\èºp[ÝÖM¥B…ÈBáq�1ÏRãÓŠƒÁ²ZÁàÙ™–3 ½Ýë”aT\JzvàWK6�cr²,övò‰#ò\I¶äþéÈåyéÒ ³Ð´}:9ã±Ò¬mc¸fX-уžÈäõõ4‹áØéM{•Ρ2Þ\‚ªMÃÈ¥¼¡ŸA€1γ®E“xÃF™$Ón4ÙÞxíâ³@®ŒÑ1v�‚C§ ÝÁaœ‘]©´¶) xŠ@A‰v F@À+é�ÇÒtÕšy†Ÿh%¸R“8…wH§¨cŽGÖ€9íÙê>%¸Õ4Ć-: _°Àb‹‚,Àá\¾[c=mfØø{DÓ.>ѧèú}¤ûJù–öÉ`õV•y¾©=Ö‘ã-gU±Gyn ZvÁÊù� ˜Xûí¥3ÆM-N¶ùá]kR€†PÌê‹9'$¨äÒ½ †9d•"E’R ŽªrO~8¨—O²GGK;uxäy‘„J ÈùÜÃŽî9=NO­q-â LxïÄ#Y‰®äÓÚå,Ö$Å»Œâ;~éÝž}:V…ÍÖ­µ�6º¶Û­ñ®Ì�1ƒ�å¨<Prs–Ã{×DÚ6–írͦٱºn �Oš=�˜}j[» =B5ŽöÒ ”VÜ«4aÀ> Ö€8…ñF©6Ÿ¥ê×7KkbÖ©-ȵDv X�ì�óyL#oÍÏz–÷ÄzœRjWÉ}bÔ’Í4³“2–A’~öæ YqÆ1�y®Âm6ÂæxgžÊÚY¡ÿU$‘+4î’8ü)_O²’õ/^ÎÝ®ÐmYÌJ]G ldP˜j7‹eâ)¿¶nQá$¶VýÔ85¾%;e}¾AêsÖø±—MÑ4­Z{†¸]äÉpÀÈߺv;@vBNWFÖoÄMiŽå‹N†1‰IÃ1ÀŸACØYÉ`l^Ò³)³ìí1íôÛŒcÚ€<ÇL‚X5]3Gž¯¬ÜÛëR®s‡ $’�Áã„À«nÛÄzœ�e~×±·ÚµF°m(F¹�Œ™ÏÞÞ¡wœñŒàt5Ú›;f¹Šå­á3Ä¥#” ÜŠq�PÔÅÓì’ù¯–ÎÜ]°ÚÓˆ—Ì#ж3ŠâmõÍlè1jjˆ¿lÔžÁ @–È'tÞ}[ ´gŒ•àó�÷Šï~ÚËu ™ð ¶ N¡xÈéÆ:WL4û!föbÒjå‹Cå��¸’Ù\c’I>¤Ñkagb¥lí ·VÆD1„§   QEQEs=Kvð¼­2D]&€Æ\ ©ó“$g§“â³mOÅQ1˜Î‰ÙKúfmÛ=÷léÎvûWa¨hÚ^¯åÿii¶w¾V|¿´À²lÎ3�Àã8•(ÒtÑ´cO´òíNm×É\CþàÇËøP&± Ôü5 «ÞY­õ³ÚÍ4W2aÃ+“©ˆÇCô=)žk‰/µùeKhâkÕÚ–®^ â$µˆ¹àœAã­tRØYÎ'ÚA œ0xÁóè×õ$ðÚÀ�[Ã0 ÂÇ…UÀt 2ð_Û-n´;ÍdDÖWËm¦•Î-äÜOÍÛtжÜwæ Qu—my4öYC¯ÈÉj‘ºf7n£n òs€£*Ïzôÿìëk©³·û\�\I ¨8ÈÜŒFqÀôªð‹iÿóñ«ÿàâïÿŽÕÍ[Q]�¸™¥gH¢ˆ6 ’;QžÃ'“Ød×2"G*¢Ù€<0›ƒúW­X –ª ¯éêÄè²=kÐÁcqtÕ{ù\àÆa0õšu�­çcÌÿá]ø“û�ßáGü+¯rßþÿ ôÏøH4ïùþŠ®Ct·¬°Ê¯ «/ ×d³œdu”Rù3–9VzFMüÑ‘àÝhÍou"<òÊem‡!x ÷é]Aæ?¯éG˜þ¿¥xõªÊ¬ÝIîÏV•8Ò‚„vDôTcúþ”y�ëúVf„ôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôTcúþ”y�ëúPôT(ì\x©¨4Ph  ôQEQEcø†Þ}FÌiPÛ#­Ø+,ò€RËc©~›G¨Îx­Kx~Ïm>d’yh|�–l džæ¤¢€9?ê/c©hd›$�&–ážúëìðîTÚª_ksûÂÀc�žÕËYÞÁi-±}{Ã÷6öÂEŠÚoE±C‚%mC êÆ½VŠÃð|ÒOá-4Ë‚ñÅäî ¸8BP88 0=Á¹ß¥Âj×7:6›¬Ûk¸E†âÚ=Ö×x^Jàr2Ø t®úŠäWFeø”u&µ”Çýœ%, ùFç; ñ¿ËëÒ³txî­üAk‹§k}”†C¨Y^G‹h¾RAˆœ�ÅñÂ'�^�Eyw†ü?©ZCác©iÜY›vAo"cû>ä© åBƒ·ieËgi=y«F JoC೤^¥ò¢Z=Ï•þލ¬3(“¡ùF@ûÙãèôPÍ߆5MmI¿½Kë£ym-¤^`rȪccüêxÁª£B¾Ó¼3á …åž×R†K�–Œ9nGð‚ØÏN•ÝÑ@�ýòh¾.Õu ‘˜ÿ±RX½[Êy ¨÷ýâ~b±îtY,ÛD‹XÓ®õ-9,ä3EmI‹×`ìì«Ï9|€žÙÍwwZ}�ëF×V°ÎcÎÏ1mÏ^¿AùUšòÑ5a ø~+»)ÆŸ¬–ÒXÉrc˜ÊJ³ÆŽ­÷z78ç×5§u¢kpÚÙ[}²éuˬ¯nŒ%ZŒ’A“´˜™×’yQ^™Epz…›jñ…Å�»I¾Ýôë8¢RĤ(Wj�ÿMA�è*¥×„¤ûuݦ�m=ºÏ¤Ç8•·7±É¹™¿�ŽyÎ+Ðá‚h„PD‘F !BŒ““Àõ$š’€<Î].û^´ƒW¾Ó.á›QÖ-¼Ëbޝ ´`¦¨Év'Ž˜Þk85‹M>ín,õȳöù‡Ë€´Eüµé³æ“8ã®zqéôP™A£j­ãWžñî#¹‘š;”Óä�5¾î#óÄ› |¥JäÇ­wcHÄhŸÚ:�Ùvn·ù<“åž?Õó�¾€V•ZÖÏì²\¿Ún&óåó6Ìû„|µ=ŒãÔš³EÌøÑ®~ÅiVÿi¶iÁ¹·ÎÞj��¤Å„.qœŒ1žjŽ…}{â·¹:Øaž.WʺĬ¸ØÙ’Þ5 G\‘�Ž;J(¢Š(ÅA'úÃSÔ¬4Ê(¢€)jìWF½ àˆ_ùW˜‡ÈûÀ}Mzf¸q¡_Ÿú`ÿʼ¶Ú'ºyi»ÉŒÊÿ60£þuïe){)7Üùüâî¬RìL_ÄÐÖ¶ƒ­Ë¤HªÙ{GÁtô÷ÿιß9=çSì“ì&ì <¬ïþ,g§Ò½:´c8òOfy4ªNœÔé½Që�OÌ 4.7VêJå¼åô{Œ’@œõ?ìŠêkå1½•YSì}†¯¶¥�¨Q\Åæ¸nïô±<±ÂuylæÎ—dRçê7/æ´š·Š`O �JÚò 9Öb‹ã¢ox؇„’p ÚÃ9ãƒÒ±6:Š+ÎWÇ�{©Eˆ,£Yu8ÄsKsXmÄ1³•ó–¼g–'µt—¾#HõB#™SN±]÷÷ Ì—ã«ÁŽ2~èþ*訮}u+Øîµ &ìÊ.š9&°žPe�ï�H„�†àü¤õ8å,ÆÂ¶í›sŽ[wG'#ŽEG ëßÛZŽ®‘í6Ö“F�Ÿ-‘ÈhÕŽà܃’{ Ý¢Š(¢Š(¢±|O©_iOÛ,’ÙöKÈ'Ý÷YÕx¿>´kZ•ö�¤¬ lÖ×Wko1“vñ�ÇåÇÃßò  ª+7^Õ†‹¤Éy±]÷¤Q«¶Õ.ìr{ °ÉôÍ7B¿—Q²yä½Óoy 6žÄ¡Áäò¿å@”W! øºãÄYZZ‹Sp‘ùÚ‹ •…I!QFs½±žN=@ªZw�o.u¡’ïH�åÔ$´þÏ€¹�F_0åÎ@UÜ~QÅw”QEQEQEQEQEQEQEQEQEQEQEQEQE>?õ‚§¨#ÿX*z (½Q@Q@º¾¥6”!¹6Æ[HºtÉxG}¿Ä£�ØäyÁ­äI¢IbuxÝC+)È`zjŽ©§K©ˆ­šàÇbrnQ2aÆwe<ç¹éÜÕèãH£XãED@UF €35ûÛ‹[(b³p—wwÛDåwlÜrÍŽåP;cÚ¹õlŽæ-Jéâž9ä±¼'1ä…t[t*A «œVÿŠ,u+›ý*êÈ^˜íL¬ÂÄÁæ‡e ¤yÿ&6™ïÈÇzçít ìnÍݦ‘¯ÛÜœþú+mž¿0æ€;ûK˜ïlຄæ)ãYú©ιKƳÙëúއ vÒjX`Ó¢bW{<{™¤9û«×Œƒ©­ß Ù]iÞ³³» ²Â¬Š¬T²¦ã°6ß—!vƒŽ3œqX×þ ާâ Ùî/DÊå2d·x”`ôãçðyh³x£TµºŸE–;G×ê(í6ÆÂ)aq¸ÊWq8P²gª�ZÚðþ«>ªº‘�#_²êZ§–Ê¡’yªÑh×óx�JÖoE šÞÂK{�'21C”Ê�—ån¸<ÕmMñ‘¨ß"åɧÝjÝ Ì‚UGlão—Œ�þ×ã@1øþö(<5uymoö]A'{×�XyQXdŸ”³ž9ãÔèz¬ú�ƱË‹+ö¶�`#*#FÉÉë—>�«Jðmż:$æÖh,ìîí®QYˆ“Îe## sœSü=à–°Ó/lu[¹®ïÚx$·º–1ùh‹¼¡R[ ÏQÞ€3µ¯ßéšÎµ]èʺ|‘¬637[£VÂýrĔ־»â›�+_Ólâ·‰­X#êùÝ Hâ8ðAÇß'9Ï j�ÿ…õ™oµøíáÒ$²Õ¶-ÔŽÒD+ù6a��›Òšÿã¾´ÕF¥s$—Sƶö²Çu*„Ž8ÂÆ]A›vç9dЬú¾µ¨j÷özV žV9¥¼Þ|É †Ø¡zËòzqYú��®4ýnÿG0Ú½ùÑØ@�2YCnÜÇø�u"§·Ñ¼I¦O5Õ„Úd“_¤oyÁ}©p¨� Œ°8:uæ™uà“©j:ÍÝûÀf¼µ·ŠÞæ%"HdŒ\÷~}„ONhWLÕ/fñþ•wövû%­´¾dH˹ß~î >A�úšçáñfµ‚–ï¥ÛK¨Gu$¯q²/”ê (1�yÉ5|i>%¶¾MVÙô·Ô.,ã·½ŽVqô,DˆBäýãò�;sQCàXV_Ev–—Özm´ñÌ·1†ó$�¡Ü‚:†ïÆGZu‡Š/5hôxcEqsyôÝnßû;TÐõ+{Wkk3-»ÃoJ¤Š0B�Ór ãÖ¨ÅáíJME»„šµµËjÅs��$¡÷« y„ƒ�£Š±¤xÎÒêËU¿½ž8­-µinˆq± œ±|³pxéÅkXø‹JÔg† K±$“ÆòÆ»eQ‚·QÁ€Tò=+•—Á:­ÕµÄ÷7¢üêͨÆ�Í4q�Ьe ®HÁäzt䊖ïÁ—çA…tƶ±ÕÒyd2‰¦\J…ç|±8ÚÞQÒ€6¥×WQŸD]"ãtW²¼�&ΰFìØ¢çѲ;V´z…”«Gynâà‘ YTù¤g;yç==+FÓ>Í®\�â´ÓíaÓì÷)¨݇¨9EÈcÓì¢X;;tä˜BÄ£Ê'9ÛÇÉéë@ÁqÊ3Á4rª±BѰ`Çp{T•ð[#%¼1ĬÅÊÆ¡AbrOÉç5%TÔµ4­>[Ë�Û#*Œ³±8UQÜ’@ÔÕ]W—Pó­ïm>Ũۑç[y›ÀVåY[ržFqÔÚ«x›J¿Ô’ÉôçÙ=´ÆU&ábí#?42‚y8ùF=j–�¢ë©¯Å¨ê÷o• Ĭ/΃‚«kFFyn=(«¢Š(ÅA'úÃSÔ¬4Ê(¢€3µó�j'þ�ßùó ù³N8�gk¨ä“•í^�âO‡5,OÙ¤éþé¯Óµ‹�.I%µ•£’HÌe†3´ã§¡às_C”S•L<Ôw¹àf³PÄAËk*Ùi¶Kö-Jñ–þQËÆAKcØ7©õô¢þÒëNð³Ãs€ßnX«¯–pAî r&tbIÜIä’jÔšÍĺZiÏ+µ´oæ"6Ó‚8=qÉâ½w…©tï}uÿ�þ_Óò•zvjÖÓOø?æz7ÃÆÝ¢ÜŸúx?ú ×["³FÊ�±ˆ 63ƒë\wÃ\�åˆàÜœø ×g_)˜«b§ê}F_þëCŽm;ì7¾Ñ­!»›ì&â{–�¶00ÊËãnâï’3žjýΛ©ØM~tfBú¥Â»<˜Ùgòi1œ¹;F¯^+¢¢¸ŽÃ€Ò¼1y¢_ê÷Ú4nc»P©pHÐù1nË{~ò³ìMlëZ~»¨êöÁžÚ}°n'uc?bB¡/nzóØWME`hÖúí¦¡{¤ÐÍi>f…ã�·’ÇïGórTýáéÈéŠÅÓ´=cKÑt6Õ.-Z $G!·²°‘çb#1íÜîÆòNœv®æŠå,4«ûïŦHÚÚîÚæ;�1XLža; Žƒ†9Ú¡“ö©ZŒBãå'©¶xìè CYðq×4[–•Ež¯-“ZªÛ_L-Ô|Û€róÈ+ø¿c¥ù—÷±Î³›h-RÂ&˜³3‚7HÁ›–r ú¡®‚ŠäaðŒ÷ɾ»,S[ZY5ŒBÝÝUb›�ÏI¨À$ryçÞ—O}TÛKy:j~M¢‡»šR‘œ,ŒÛ‰Á œÝ23]­Ìx‹L×u ÛH¬¡ÓdÒ`Ä’[Ïpñdå ¶6Çs×�‚ýcL×u« ôÙßNŽÎò5I™ ™! ê¹~waŽÜdpq]%…âÝ;RÕ¼;u¦i‰h^ê&…ÞæV@ŠF26«dûqõªwÚ6«~ö×WºTòý™í¦³žGxTz¶Ì“€2 ŒúñÏSEbiöZ¾•¦Ae¶×‚ÚÉ#G��I‡±ÃaqŽÄýkÃúâø}´û±¦£Åzo" 3ÉÛ¦i$æž™ÇcÙÑ@î�¤jz_œéö…Õàškh÷¡�` #à|Å€bH“ÅCq êz¦©k&¦Ö ±�™mC g Œ›Xº¸l‘–É¥uP9£èZ…½õŒú”öò :Ñ­-Œ9Ì�¶eÜÁÄj029<×GEËj^þÖ¿¼š{�rÝC2ì-ÇåÉnúƒÚ£ƒÂ׉udòK—©{xûY³åÌ% xyƒ=¸<šëh :O ëOàËŸ 4óÙ÷8gÀKŒaxëŒäúV¦¡¥ê ­Å«ifÕ¥û)µ’+’Ê»wn ¥A Žr1ÏŒVíÆÂ%¨ZYiöÚ|öÉ5´+¿ ñÊ¿1fù*é’p�À©®¼1¨J/ôøçµþ̾½’HÛ¼äù•™ÆJðÙ¡Åu´P+sá›Ù¬5xãšÜMsªG¨[î'nÊ!_ŒŒ˜Èã8ÈëÒ¯x‡K¿Ö|2Öмú˜h¦‰÷JŽ®9Æq‘Ž�ërŠäbðsÛxƒD»‚X–ÊÂÕ"–2NçxÑÒ28ÇWÎ}¨ƒÂ÷ñ­®œóÛeÚß›ä•wyì|Æ�!Àù›–Ï tæºê(”‹ÃÐøvÖÕ&·¶ºŒ—Ñçq�ó3¸Vã?uñœpG|V†…¦_Ùêµî ÖÞeü±Èܱ ¶5Ld�Ÿ»×ùVÝQEQEƒâË [TҾæGdÞc+H÷3´{vº°ÀTlç˜÷ªÚÝ—ˆõ¥5½®” ¬Éu(’òA—�UÄG+†œjéè  =[I½Ö¬®-nÑ<[aY±"0r<, qØš“EÓ.í.µëÓn·²#­É(�T(ä€I8äàv«bŠä4¿Ï£ÙéÙ}–=BÒG%I q�—ã$ýÖW WƒÂÚ»Y�2átØíF ×‹uŽó`Îe)@ÿwõÛÑ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@�ý`©êÿÖ ž€EНEPEPEcxŠ{­>ÍuKk”Ai––ÞS„¸CŒ®z‡àm#¹ÆkVÞ_>Ú)¼¹#ó6Ér3‚;@QX~%&æ; (ÿ ¥Ž@§‰A’Aô!6Ÿ÷«†±Ð!»¸DƒL–Úòxî3ÿe¶[LMÂ$‚ûíœÐªÑTô‹á©èöWÀmûD)!_î’2Gàx®7ÆÞ%¿:ˆ`Òm$òì#ò§¾[Ÿ)£�€Ø@N œŽ¼f€;ê+—Ö¼_ý‰«Ek=¤&ݤŠ6“íkæüä(a * Á$ŽøÍQÒ¼O®mnæþÆÑ¢´¾xcf½XÂ`¨ÚI@6Œçw$ç ÚŠá®`Xm=0}h²¢¸û½\ø’ÆÒÎ8<¸ou6�[~|ÛxX³¿A€ÞY\sÃZ[_ÜOu™£4V3jiÂçí*ÇÌVeS³Úvõãô=H_Er‘xÏζ±+§ÿ¦L×"âÜÍÿþ@;òvóó��àÕkOj—¦Á"ðÓyº�§Úí½@RÛŽ>_¼¸àç#�Î;J+‡ºø•ež›$0B&¼µûYŽîñ-Ö5ÎÜn9ÜÛ�ØœŠ¡}­Ük¶ÚÖ³a¨]Úæi�ÞYÄ�µYš6”™£çpxà÷æ€=Šâï#iao®ŒVw팟º<°__˜òs@EÈÂmp�<òèÅ4Ë}E´ùn…È$7™å‡Ù�»’3ÎF{Ö5–«y'Œ"]ߘ§Ôç€NìMŒÐp± è$ Î9*Üž”éVƒäq£ÍdÌXi÷sYÆÌrLhä&~‹´~¿@›­jRiö¨–±¬·÷/åZÄz3‘Õ¿ÙQ–'Ðz‘U4›«Û+öѵkŸ´ÎPËmvP'Úø�€ÊOAÕJŸZÝ¢Š(ÅBèÅÉŠšŠƒËOÖ�-ý?ZžŠ®bb+�kü¢;–:M¶IÉÂãùVÕåÇÙ,§¸+»ÊBøõÀ®¼_©’H1è¥g"ðÚk³ÙÎ~ÄÏj$QõŸÚa`ûrvn_˜m9î}k'þ_úsð�þ¿ýººm_W²Ðô¹õù–(!BÇ,bv®HË`æ¹»‰zö¥“lÏ/’%–êÙ“vÍãîJÄ‚8Ü7|¹ÏÑhzRèºD6 êâ2ç*›nbØUÉÚ£8'šÊÕüa«½þëÝBÚ-@µCm0T•€1O8§ ×KY3ø§ÃÖ·[ÜkÚ\3FÅ^9/#VR;NA  7þ ±¿¼º�ïuÒêh®&‚9@�¤�nÖÁR�xÎ8éšKŸÙ\Os*ßj ®…àH¤P±N1ûÅÊžN:ŽzV™ñˆ·‚Ìëxºm¸„ܦó�ùsžA}jê][É,Ñ$ñ4�cÍ@à˜ò27Ùó@ÜÞš\©§O4׃PMIîMÛ¥A�ÀeR=·~f Çs ÜØê�ºk«—º–H‚’Ü…@@?†´Ÿ[Ò¢Kw“S²D¹ÀÍp JM¼üß…M5ý�µÌ6ÓÝÁóEȤÿt“øP~ °üÜÞ_ÝË|!ó&ža½Z"Å �´‚ݸàq×6eðÔWZ%Ηy©jI9 çË"ù±• ©RAŽ:Ö™¾´¢ÈÝAö²¥Ä`ÞTwÛ×Ñõ´·0$ Ém�0þæFá“Ó¦ã@zw‡×NÔí"¢ÆÂÀZZ!9pKìÜc�‘óßæéBxVÅ-`·ÜlƒQ:Š’Ë“!v|>îXñ×Þ´T±m.=LÜÆ–RF²,Ò‹µ±´üØÆr:úÕÊǚt¾©©#N&Ôcòä]Ãl`€ Ç°¤ç9 T–~³±—I’)''K³6pîaó!2Ür~AÓ¯±PEyo=ÕŬrnšßoš¸?.á‘ÏNœÐ> ²µµ±ŠÊûP´–Î#\Ã"‰2Û¶¶T©ç§ª]CÂ6”ÂI®/|)ʤ¸q©$ xç©ä`òGJÜ–Xá‰å•Õ#E,îÇ@ä’}(ŠXç…&‰ÖHäPÈêrAÒ€1o|)a}µ’Ü*ëûFͨlãŽëšmß…Å߈aÖN³©Ç4B�–ªÛw. dàíç>„V»ßZGy›Ý@·R‚c…¤Ü“…êx¥´¼·¾‰¥¶�H‹#ÄÇa•а úh’Ñüís}>«-à‰µi¯"²ó”ÂãÌÝ�}3Œ�‘ZqxBÆ È¦[‹Æ·‚ᮡ±iG‘¤“¸ g«‚Hô®†ŠËðö›&™¤¬wMÔÒIspTäy’1vØ�ìjQEdëÞµñ ´P]>Õ�÷�ôx%çé,nàªZ/ƒ,4-Cí–Òn“aL}ŽÖ.ûQB�úâº:Ȇ(¢€,QEQECZ8Ðï�ý0å^a )É{šôítãA¿?ôîÿʼ¦ÎB.¢ÙšMÃlew>˜ï^>bÿyé2XތߟèHîpx©RèFQкH˜!—±ësÈÕöoÿ„zÓoý{¯øÖvµqZÛI5²ZÞ¹`ðÆGF#<Zã•)E9~–=V…I(wìÓ;¿jÏ«é¦YWÆþ[Ѹ>ÝkY˜*–b�’Ojå|s£Ü×ÁÿÐVº‰·ym,iÆÜg8íž3õâ½Ü4ÜéFRÜùLu8ÓÄNÙ3ÛÇ^º–æ8µ›2Öî�2¶ü…ÁL¸e€ã¾E\ZG¦ý¹¢ºXÌËi%»#ÈÌÁWj°äŸækÈ£–k»§µK½i7ÝÛ%«Îl˜{ˆdcò‚Iß a·#Aàb·5¹%ŸÂ–÷Þ¥=ØMrkq+¥¬mFÓF6—UŒd·¾=+s”îÆz wko-üq™!Icg;D›ÝÐ*ƒó#Tº‡Š4Ý.õ­.¾Ô'ùv$v²HeÝÓfÕ;º`ã§zòß ÎUþÌ”Åu5¬ˆŽ– s#!»¸PPÄËd’Àì9ëÐøî{¸Cé–Ú´²Þ0óàVÛÞ›ÍÀ&<óЂsŽ€†Ÿâ�?S’Tµ‡Qcmåôùã¯UË ¿ÙëP7Ž|9ðE>©¹ž:›—`Û‚6AãÂkŽðe½üšýÔ{Û;cip%>qÈœÉï½ÌàŸ¿ó`NsšÓOÞëˆ5�7W¥Ú+4­ö¨Þr£hså\"àã às@,þ.ð彊ÞI®i å¿ÚS÷›~ð^~b28¢™aã? ê1Ûu½8Kpe»]ÇænlaJ†?78Ç­rº®©×€|<·ÚU¼·‘ÛÜM¥zÑù‘€®êƒ±Ëm98'šg†ŸÌJÇ eŽrqƒÆrxÕ�oK"2oíÓÌ•áŒHá º±V 3‚⦗Q²‚î+I¯-ã¹—ý\/*‡ '&¸ýzÃO´ðô^HíæÖoìÅšÊê7„ÁÝ3ž¡T³7»M3ÆŸd].G†ãO•-Z}Pn¦ÚQ�#ç†#È$ä`Ž´Û]]ÛXÀg»¸ŠÞë$®Gâi—�•¤qIsyo L@�¤•T9=$óXºï•ÿ ?‡¾×åý“7óq·ÎØ6uã;|ÏÖ¹[ v‹K·Ô·éRZ­½ì+ ü»Z™Ø¤‰€r6ã#o"€=&yáµ·’ââXá†5,òHÁUTu$žª–šæ“o5Åž©eq?ëd†ácÿxƒ�ø×+kjn¼o§kzÚZ‰ôx ž v�ŸåÞI9É$.µGS¹• ÔôY/"ºHî¬~ÏzÑ¢"Êϸ$»V QI‡‚A B¶º·½·K‹Yâžåd‰Ã+}âªE¯hÓê'N‡V°’ùY”Û%Ê\îAÎF}1\߇%‘g¿†[ëk;¥Ö?ÒL7¤GîA+´žûƒv5R9bðýý¤–šêvš�ÕÔ²ÁFÌŠË$¬èÊ7pØ^IûÃ¥vö÷öw’͵ÜÉ m•b�1CèÀÖ¬W�x1ÓXÑ¡™í%GÑÜY½£e„a£$MýæåaÁ;ø¯E c»·–ækhî"yá e‰\Œ7ÝÜ:Œàã=i‘j63„0Þ[Éæ;F›%S¹×;”`òFGlà5Iî´�k:­Š;ËpbÓ¶WÌxTÂÇØ8Ûÿm)ž2h±hºu·Ï ëZ”2†gTYÈÁ9 åG þ”étWÞ ÔÇ�.üB5˜šîM=®RÍbL[¸ÁÀþ#·î�ÙçÓ¥h\ÝjÑkPhók«mºÑïìÁó8ZƒÀU'9l0ç½uôW¾(Õ&Óô½ZæémlZÕ%¹¨ŽÁ‹½‘þo)€mù¹ïRÞø�SŠMJù/¢�ìZ’Y¦–cRfRÈ2OÞÜÁ‹.8Æ24ئ£e&¡&ž—p5ähíĀȪ{•ê#󥽿³Óm�Íýܰ–y(' É8¯/Ô,oËÄSlÜ¢ÿÂIl­û¨p>k|6JvÊû|ƒÔç«ñz\&ƒ¤$R%åÂê6�^à„Y[x劮{á~‚€:kKÛMBÜ\Y\Ãs é$2SøŽ*záî£Ôô) Û½�œúÍôò½º–ŠÕB7Ï–s±r@¯Å'Š/ôÃ,÷wÉ>�¦êBÖæëËUFð‚ ÀÀe‘•NÜ ïh¯8³ñV¾‘5­ÖfÔôû{›ëÈR%Tò•âŒqÓ2�‘Éò�½3þoCáÍSPmæ4ÓZê+‰~ÌBJÀE‰Ø” Ÿ½ÈÇ^hÒ¨®6îçW·ñ–“/ˆD =Œ÷2Nmâ2¼`*‚0 ÝrqùÖŸ†õ-OWÑ´«éE·—*Iö†ÁðHGŒtÃcw=ˆÅoÑT#þ×òí¼ß°ïó›íwãÊù¶ìÿkîgÛˆÍ8jzy[fÖÅn±ör%\M‘‘³Ÿ›�JÇñ �µî¥e+kk§]ZÃ+¢‘nVÛ–!ÁàmýO"±f¼]KGðf§y ¼W’Þ@Ä… €Qþîy zâ€;KÛû=6ØÜß]Ák g�"‚zrx¨ôý_MÕ‘ßMÔ-/2›i–@¤úí'$—6Ž'�¤ŠC‡–<†(È$vÈV/‚¢VðÜ“ [�Sý:R•vUÚ£ØPÈÔlL0L/-ÌS¸H_Í]²1èç“ÁàzTúî‘yzövÚ­Œ÷HJ´\#:‘Ô#çÞ ûe­Ö‡y¬ˆšÊâ9m´Ò¹Å¼›‰ù»n‘C`öÛŽüÁj.¡Òí¯&žÂK(uù-R"·LÆíÔbMÄNpeAï@±EPEPEPEPEPEPEPEPEPEPEPEPEPEPh Ñ@©i( ¢Š(ŸñRÀÖöÞ_˜5pçû8Á�0IŽzñ³{ÙªQM!𞯠1[íOW¸³Èê¬óóÿŒgèµÕKáíâûíÓhú|—{ƒý¡í�ɸt;ˆÎFåP§‡-SX:€–oøø7KG–%1ùe±Œä®{õ$÷ Åw÷7Z/ˆ þÓŠÊ×N¹ŠÎ-4F™‘G–C~nsÆ00½ù­-KÄž"êÚ|l#±ž(Òܵº¤ÊB’Îdpã;ˆR£§"»[�K½¸ûEÖ›g<Ûvy’À¬Û}2FqN¸Òôû»¨®®l-f¸‹ý\²B¬éô$dP'k¯j’k‘xzK¿ôÛ{ùdº˜Æ¹k%PèHÆï24ÈÇFïUÍÖ¦š�…À†MVîKÙ‚¼öƒ�Ëü¤„g=ºWc{¤Z^Çw˜Öî­Í¼—Q*‰¶x A霌ñštúN�ug¥Í�µÅ¼@âš%u\ (€Ô|Cq­éÚŒpë‰igŽ— Ò@Š×¦D|’î¯ËŒ/9=zTZ�‰¯t¯ Ú>›¨²I§éVÓËoåEå’W€ìçqÜA‘ëȯD¸Ò4Ëà ¹Ó­'0�±y°+l‹‘ÇáL›CÒ.vyú]Œ¾\^Jo·FÛ1°dp¸íÒ€9íhÚøVçl);›€ïÀm¾IÀ'®9«úÉâ_ŸêEÔ.`íþJ¿uáÝöçí7z6ŸqqÀóeµGn:rFx©´í:=9.6;I%Äï<²62ÌÇŽ�‚…Q좀.QEQE…â›Û‹kmíÒíEÜžT·6¶òLÐGŒ³E'qŒsÛœïO Ž®Úf—i¨.‘,fXÖ{á[Y2 È lçäÞ¼twú^�ªÆ‘ê6·ˆ‡r­Ä+ SꊂËÃÚ.›qö‹ Oµ›|È-‘¨È  *(¢€,QEQE�¯œx{Q?ôîÿÈ×—øráb×mVDŒ9Ë·p{׬jŸnÓ®m7mó¢h÷zdc5æmà-uX…0¨—ƒ^V>�GR„ocèrzÔ ”ªÍFýý _µOŒe±éÍ0Êç$¨úâ·?á×ÿ¹ýý£þ=û�ÿßÚó>¯_ùYï,f ËÈýçOððîÑnëàÿè+]s(e*À#†°ü'¢M¡i-ãM$†FÙÈ^Çé[µôXÊcn|faR513”ÓfL~Òb�f[_Þ-ÏÚ”´ŒØ“fÁŒž\£���Å ðí¢Á QËîÚx®f½•§HRI�Á0‰‹/Ì0G$“ŠÞ¢€1­¼-¦Y^Ãwf³Á4ck²Näμñ.Iß‚Iä�ZŽãº}Ö³ky-½«ÚÛÚIl¶mn¥>gG ; léŽõ»EbÞøjÏP×mµ ¨àš-ØZËu%�7< lÆ1ß­h]i–«ÝØÛ\,G1‰bW ÛŒŽ*ÕYZG$R%¬+$1ùQ2ÆDãå°àp8àTôQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W½°³Ô­�µý¤P Šxé#¡Á«Pu¾�£ZÚMio¤XCm><Øc¶EI?Þ`þ4^h6 �¥î‘ar�.Ø–kdqô\ާ¥hÑ@cÓ,!ÓŽ��²X•(m–%m9ÈÛŒ`ää{Ñma­ÕÝÂ3³Üº³nÆ*… ¸3õcV¨ -ìm-$šKkX!y›t­aL‡Õˆê~µVM Nh–(­¢·�í rëj‚GF `sÈð­(6ûÃÚ.©p.5 O»˜(Q%ŲHزA8äÔ¿Ùg›o/öu§™l¡ o!sŽS�”j»ECuim}‚îÞ+ˆ[¬r u?�⣟M±¹ò~Ñem/�s™·–ÙÈãð«TP2YÛK#¼–ð»ºynÌ€–N»O¨äñQǦXCdÖQXÛ%£gt „9ë•Æ*ÕV-6Â!‚+hâ�·ÅD¡coUpy<�ZXtë{©. ³·Šâ_õ’¤J®ÿRMY¢€*Úé¶6RK%¥•µ¼“ÈÑD¨\ú’5jŠ(4‚å’T‰IH2:¨È=øâ¢]>É,íÕã‘æF(+#çs8c¸äõ9>µfФÚ6–írͦٱºn �Oš=�˜}j[» =B5ŽöÒ ”VÜ«4aÀ> Ö¬Q@fÓl.g†yì­¥šõRI³Gþé#�•ôû)/RõìíÚí՜ĥÔzÆEY¢€+µ…›ÅqZ@c¹bÓ¡ŒbR@°ÇÌpçÐRý†ÓȆ²ÁäÂU¢�Ëc+÷JŽƒ±Ò§¢€#žnaxg‰%‰Æ$PÊÃЃ֠:^žÚö{XÚ›,öc ù|�—ëÍ[¢€![Kdº’émâ[‰#Êe=H?�W]JXî#]2È%ÈÄê \KþðÇÍøÕê(ûÖš–¿o©^$7Ck%¿Ù¦„:’ÎŒ'Óf:wë[ ¡T*€ : Z(¢Š(µÞŸe¨*-í�½Ê¡Ü¢h•ŸQ‘ÅW¾ðþ‹ªL³jE…ܪ¡î-’F ÉÀ$9<{Ö� ÙÛ'™²Úó#áÜ `ê⟠1[ÁF‘C„HÑBª¨ÐÚŸEVþα6±Ú›;³ÆÁ’/)v+�@ÆŸ­Ao èö—­{m¤ØÃtä³Oº+’z’Àg&´( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÑA¢€+QERÒQÚ€8;ˆ×ö¶S¦™¥'Û"ibGÕ›v)`q †åã9æ­[øæ[�Üß}†®Öê;[x…Át”º$�·RW$äp×�ézÞ©¡ÚÏk¥ ý”:jÉ"2••B¹¹öPã>XëÞýÕ„wú5Õ¾¥öYWU@ÈÖïtÙ[h2‘*rsŒGÅu�ñ*Ö.c²²}CNŒB‘Mlñ‡–Wb>P8(<†Éâ»ÊðÝNiêþö}~ÞRÁãQÝDaº@Ñ£k U‘�§$׷Ƭ‘"3™Tì,}N8 ÑFhÍQš3@fŒÐEPEPEPEPE£4QFhÍQš3@Q@Q@*v@eÎy®,V*Td”Qéà01ÄÅÊNÖ=ûzÃþb«q] âYb‘^6V^A¯,/ƒƒZÚ.¯.“ VËÚ¾ '§¸¬)f ÊÓZ8Œ�F¤îÏAó×ô£Ì_Ò¡†hî!Ibpñ¸Ê°ïO¯Q;ž#M;1þcúþ”y�ëúS( CüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”PüÇõý(ó×ô¦Q@ó×ô£Ì_Ò™E?Ì_Ò�1ýJeÿ1ýJ<Çõý)”Pˆì\x©ªÿÖ ž€EŠ«KIE-™¥ÍE ­½½ªÚÃQÛ¢ìX‘@¾€1íL²Óì´Û³ØZ[ÚÃ’Þ\„\úà UŠ(´¶u™ZÞ&YŽe–õàÏ ©¨¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€,Ô¬5=A'úÃ@ ¢Š(޲q¢ÞŸú`ÿÊ¼ÖØ´²¬A‘o�áGÔפëgùÿ¦ü«Ít{e¿Õ-í^B©#á¶žqŒ×�˜ÝÕŠGÒdÖXz’}?ÈÑm$±ÉÔôïûü«^YÜX¬e¤I"|ì’ܧEMöý ÊÇölÛý~Öªßêi=´V¶Ñˆ-£%¶™ –cܚ⟳åÑëåÕ¥5YÉ&�¼Òý;9m*|’q9êÙÑÈÛ"vÎ0¤ýÒß äý+˜ð!ݤ\×sÿ ŠéäRñ:Ž¥HûÄ~£‘^æø>S2VÅMyžWŒµÛw¼y®ä`fA"¶‹p¾C4‰UÉ8Ì¼ó– œVÆ£â2¾�ô«íBù¤Ô¦šÞX¥$²"¬Yþ¼/÷ª6ž Õ“RId7F6Ô!i¼ëÇpË�üÐ ��Z6P-†^˜«×šEüÚ µ²¤ðKý»u9p’‘™'`ß»elF0Ãï\WIÄeÚx»T{Ĺ½Ö-4ësh„$ÌñÏ2°‰gï #9Ç+[ÅóÙ<×VúÍý¼1²}ªÕ-ÐIùnû£2.B‘Üdu5‡£ÙjZc .N·Û¾Ñig)yÛíWâʺ˜îù¹<×ñ-ž¹â KÈ:l­b‘`C!Älæ&F%�œtÁÄOŽq@øcį{{wίªÝH°M�}èzhÐ-¹kÐßi„Ï•HdA€H zЍÞ2Ó¿·,ô脳Çujnâd‘~ò…*‘ƒ¸ä碰­ôÍCDñ.�c§µ­ÅÌzUÑ‘§-1iâf#‘ó7Ó�zÒ±ðΡ£\iw2ÚÜ=½¬Ö÷ 34aŒ’,…“±ó=�^(vË[Óµ"ŽÎäLÒÀ.*7“€O)ÎFŽ hW5á¿^hW·2¼¶ò¥ðóî¶�¥n $ìÿVrx<Œg�ƺZ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*½ñ¼§ì \óØ…<ž98¸Ï¨«Ÿ­®¬úLé¢5ª_°ÄotHDõ<’; P~%Ô\ÿg­N¨u°Y‚·�vÅæ—Ûœð¼mÏ^õnßSÖµÖ±éðOo,ÐÝ4åÙFØ@Ç 9ÉÏ œvV÷Þin Ë1MÑHcdR1ü@�Ç Ç5±«é×sÞXê{Aö»2êrBHŽ0à BœàôÇzÊ“ÃI¤ÚYÇ“w*4²¼÷�–1M#2F0z;K’ÍmmmbŠ:³1e8mØ `¨ŽA9ç¥fMá­NöKÍBâ[5¾žKvêY ) b‰œ–cœq�ÁÇ ´�‹‹söé ,o œ3Û+®[hl¯\¼ISÍgèþ#ÔoµÙ­®®,¡Œ\\G©²•%•#fU++6Æ8ŽOJ»£éž—ç:}‚!ux&šÚ=Æ(cØøbÀ1$É⣺Ñu�ZîÓûFæÒ(lÝåŽkMÂGs $Éàœ�:P~ñ5Þµys-£,¶ÆvKrwÚ0`¾T¹?{“Ø}Æâºªå´?^Øj–·W aÚÚSö0ÀÝ}Ü4™Úp>o¼y®¦€9¨¼Nñø»VÒïR8¬ímÖxf‚p¡¤ sŽ)8ÏZ¯áïÝê¶zl·«mk=ÝíŹƒc–"0ä( �äž88íRj^þÖ¿¼š{�rÝC2ì-ÇåÉnúƒÚ£ƒÂ׉udòK—©{xûY³åÌ% xyƒ=¸<šÕÿ„§EòÅl�$²ˆß`U8$60Ø=pMx§FŠåk²VRÂ0°»3…ÆX¹*2>nœŽkO ëOàËŸ 4óÙ÷8gÀKŒaxëŒäúV¦¡¥ê ­Å«ifÕ¥û)µ’+’Ê»wn ¥A Žr1ÏŒP©|C¥E%´kײGå#H ŒJ‚žÄàQ/ˆt˜5°Ix‹q½c#kmW8–ÆÐÇ#œœŠçÿáÔ-,´ûm>{dšÚŒß†xå_˜³|‹•tÉ8FàT×^Ô%ú|sÚÿf_^‹É$mÞr|ÊÌ€c%xlŒÐâ€)KãómyªK,Löv·±XÇ ÙL‹C&ãsa6äáyù†w5ífæ×G²ºÓL+%ÝÌ£]ÂøU‘€Ë&U�èqTî|3{5†¯s[‰®uHõ }ÄíÂyD+ñ‘“gzUísG›]Òì­®bµ%. šæ'%ãeV”e~l�P3@Xx“ÉmF-b{LؼJn-ƒl�¸ÈP¹'û ž£Ö´müA¥Ýµ²Ãt®dh£RŒõ]̤ò°œ©©øz9-,JŠÖÑì.–ê„{bb”© 8ÈcÈɽð®«s§ß]Cqi·q{äGæòa*‚<Œœ¦îp2MoÛx�H¼†Úk{Åxîd’(˜+aš=ÅóÇm<œž¢£�Å:,¶·7+|<›hüÙXÆÃ ýñ‘ó/¸È¬(¼VîúÜܪi2X½µ´q“¾&’4ŽFÆ1Ò0G»5@Þ»“DÔ­YmÅäÖ-gís2�Ø'+!!Tp3Ó­t/âÝ6xÄȬх‚F2*� PæŽGnzV•¾£gu´�]C"Ü®øqûÁŒ’¾µÍj¿oOiÿÙ©lÓ *àm¸fUÛæÃÝA9éÚ¶t=-#J³¶“Ëž{pçÎÙŒ3±gÛÔ¨$ôÏLPå½´u�–깎2${ åG©<{ž [DXÕm`Q™#061ÎXz“Ϲ©è›ñF·}¥\ØCfðÄ“‰ZY¦³–à ]¸ùc Œîêxâ�w¬ßÛ¦�,2X\ÛßM3M`r–ÝÉÀã¹?�hê?Û!Ѵϰ²!’çz�{0+œý1øŠç®<=­ZiÚŸ¦.Ÿ<:cÇ3Ks;ÄÒ:†T`Ýž¾Ø ¦ýožÔ�:[x®20×4‰Žü+)ýk/Ãú¦¥mw>¢örD· ´–мbESµ˜†fãp sÐg½h¨ÔXÝ ²¡�~ϰ¶àø;·Û8ÆJ‡ÃútšG‡4Ý:VF–ÚÚ8¤d$©p 1çÍah>.¸ñÖV–¢ÔÜ$~v¢Ã%aRHTQœïlg“€OP*–�ã[Ë�F(d»Ò'yu -?³àncE‘—Ì9s�w”qWt¿Ï£ÙéÙ}–=BÒG%I q�—ã$ýÖW WƒÂÚ»Y�2átØíF ×‹uŽó`Îe)@ÿwôÛÑEQEQEQEQEQEQEQEQEQEQEQEQEøÿÖ ž �ý`©è4Ph  ™¥¤¢€ŠJ(h£4f€ (ÍQEQEQEQEQEQEQEQEQEQEQEQš(  UŸë OPº1r@â€#¢Ÿå¿§ëG–þŸ­fk �PÀÉû;ÿè&¼£OÔO½Šî5 $g 7N•í&&#r+-¼-¤;:d<ð1\¼$ëN3ƒµ�c-Ìia©Ê�X¶ŸcÈüÈýó¤2&8 ù×­ÿÂ)£ÿÐ2óøÑÿ¦�ÿ@ÈÏã\?Ùu™·úÁ‡þY~æcü?ÉÑnŽ ÁÇýòµÖSm죴…a·…"‰z*©|·ôýkØ¡OÙÓP}™Å×UëʪV»E?ËOÖ�-ý?ZÔçE?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€ÿÖ ž¡D`à‘ÅM@¢ƒES¢“4f€4¹¦æ—4¹¢“4PÑIE-”PÑIE-”PÑIE-”PÑIE-”PÑIE-”PÑIE-”PÑIE\¢Š(¢Š(¹þËg4ägËBØõÀ®0ø³Q,H1躽dãE½?ôÅÿ•y¬n»3”ÝŸâ¤ÏœÎñ5©T„iÉ¥n†÷ü%z�÷¢ÿ¾+A××SŒC>Ô»8z�ð®G] �»³ü4五tÞ²&eìGz.yx|×F¢”ä亦z½“áíUõm8Ë*âHÛcü\Ÿnµ¬H$à gÙÑ«ÔÕHlŠáî~)h–÷+”òï�Æ’E}dU° Î|ÿ”:¶;¤ é4]~Ë\ÓþÙo"*‡(ËçÅ!R;²ç8Ïz J+üW¥G}%¬²ºº†B™A!Eu‡@C€ ǸF?…gËã�Ì-=ã?œöà¦�pêÒ)!•XFCµºÐÐGEc�éo¤K©¤“5¼rˆ4’y…‚…ØÀ6rÀtïUWÆú–7Wiq?—l’3 -eˆ¹Œ1uO1Ws�•ŒÐEE"°t :‘QÜÜÃgk5ÕÈá…IôU$þB€%¢›‰4I,m¹C)õ¥:€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¦M4Vð´³H‘ƃ,îÀ=É ÑUF§`l>Þ/­�–3ö�5|¼zîÎ(ŸS°¶¶ŽæâúÚ+y1²Y%UVÏLps@¨ªúÞ“¥y_Ú:¥•Ÿš �í ð:ãqê?:žKÛh£‚F™J\:¤L¿0rÜŒcÛœúPŠ*´z�ŒÂàÅ{nÿf$O¶U>V:îçåüj-?ZÒµc Óu;;Ó7‹iÖM¹é�¤ã8?•^¢¨ oK"2oíÓÌ•áŒHá º±V 3‚â§—P²†î;Iníã¹—ý\/ ÿEÎMX¢ »¾´°‡Î¼º‚Ú,ã|Ò\údÒ\jV�¤×7pC„*<’V' žs@(¦¼‰m$ލŠ2ÌÇRjŸöΗýœú�ö•ŸØPá®|õòÔç¶p9 ~4zŠ«a©Xj°ôëÛkÈCl2[ʲ(n¸Ê’3ÈüéÑjSÝKk ݼ—¬…$ÓêÈ  T÷–·m*Û\Ã1‰¶H#�6ÆÆpqÐàŽ*z(¨c»·–ækhî"yá e‰\Œ7ÝÜ:Œàã=i‘j63„0Þ[Éæ;F›%S¹×;”`òFGl³EPEPEVMFÊMBM=.àkÈÐ;Û‰‘T÷+ÔGçK{g¦Û›û¸-`,òPOA’q@(ª–¦ŸªÂÓi×Öב+lg·™dPÝpJ“Ï#ó«tQET�T±—LmInSìJ¬í3ªª¹ÜNzƒùPº+Ÿÿ„ëÂô1éøŸã[V—v÷Ö±ÝZMöò�É$m¹Xzƒ@QEQUï5 -=ïní푎Õi¤ ô=i³êV6²ÃÅí´2LqI*©“ýÐO?…Z¢™4Ñ[ÂÒÍ"G ³»÷&™kwm{n·—\BßvHœ:Ÿ¡PÔUa¨Ø˜`˜^[˜§p�¿š»dcÐ)Ï'ƒÀô¨-õÝ"òõìíµ[î�•h"¸Fu#¨*F(BŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÑA¢€(f–˜X(ɦyßìþ´5�þÏëG�þÏë@fŒÔ>wû?­wû?­Mš\Ôwû?­wû?­Oš3Pyßìþ´yßìþ´>hÍAç³úÑç³úÐù£5�þÏëG�þÏë@æŒÔû?­û?­Oš3Pyÿìþ´yÿìþ´>hÍAçÿ³úÑçÿ³úÐù£5ŸþÏëKçÿ³úÐÙ£5ŸþÏëGŸþÏë@fŒÔ>û?­û?­Mš3Pùÿìþ´yÿìþ´6hÍCçÿ³úÑçÿ³úÐÙ£5ŸþÏëNIqŒÑ¢Š(¢Š(†¸q¡_Ÿú`ÿʼóDXç¸Úà;Ý¢ˆž$p8S^ƒ¯œx{P?ôîÿÈדÚ(¸h£2¤CqÌ�œ/ÜÒgÌçRåÄÓv¾Ÿ©ÓùšÁ^4ð Ö]õÍÃܸ¶ŽÙÕOîÒ#}È©Äsª_Fì%—ü* Nî?±Û[}£írÄ]š|6=Éõ¤yÕ®àîßͧùg€Ûv‘pé¹ÿÐEu7FÀrÁ8Ír[v�réàÿè+]u4}FWþçOÐð›½GRµº´··ŽÙ-¬%qŽ]ND…9 å¶t‚îŒGlñÖZZ[ßøP¼ÕJŠå.¼×–íe–&•P[¤Þ¹UT=OpyÅu‡ÂZy…â\d•t’o5»{ô©íü9cAf w*Ü=ÒÍpªÎ²·†€p0)�ç—iÚn�âKåþÆÒì´›ÍB(£–ãO@ð2ØÕY>Q.xȘ Þñ·ÿð”Y]ÜèZƒCi¨EŸå|²œî` €îc€2 £‘“]�¯†laÓï¬îÚ]Eo¤ónZók[j¨ÈU`"ãtÏZÓk[wŽ$xcu„†Œ2ƒ°Ž„g¡´çú=åÅ�òMxºl­s­\C,mûJ6é6ɼœacUãoÜÁÏj¹¥Ço¦ê:~›§oªéš„"4qŸ->öðÊ9B[iÝŸ¼+²6bôÞ‹X>ÖWaŸËöún늉t}1åSN´Qt¥n�GœÁÇÌ>´ŵ¥ŸˆÓ\½°–ÖËN–É,­äl*L‹3°òÏ'`=Æâ8"› —bÿÄ—“]A¥CmgnòI¦¿œ‰*yŒAÜ£qÙ³#‚£Þ» O èVïg¢éÖÎècv†Õ²žªp9)Óhz|ºhÓ’Ý ´$žUºˆÔí`ØÀìHÅyŒQJ÷“°ŽN/æÎP‚3s1ävàƒøÖõŒR¾‘áëw•.mo4ÖF°»Ø-ÝÕnNÂÃ$ã¿Òº…ðÝ´SIsosuì»üÛ´e2I»{r•8ÀÇÀã9Ž_è·VšuµÝ³\ǧÄb·¹ùxwù¾QƒÛœb€9/éú<Þ":”š“`ÓXÛMj�ma‡ ¦p=:Ö# L\i�ø„E&¹w$fû–w‚ [þmØ';øÆì zPðމÚ5­’Y›Ræ/³~ìÀH1àœò§¿‡,þæZE$ð&šÛ­Ú6ƒymNAÉÓõÅp­m{.‡Ï›{çÛxŽ70]˜ÃÌåãUþ^ÿÃÇOJÁ¿±¼‹JÔw¥è[o´Åp’Ê^1qö+·–T*ªæTéŽx<׫Gá«tÓÅ£ÝÝÊßkK×�Êy�"¸`N.2 `Å$þµ›ÃÍ¢­ÍÜ6ÒîóÝL“ïÎýìÊ~öâI>„P˜¸†­’Y£�æÂF€.ØÎzœqí^}.µ¨êZw‰4û›Ñ$6zmØŠAS~>ußÓ&ݧoV9éŒú#ÛA/•æCùG1ïPv‘ž‡�Æ¢M6Â4�ÊÙVÝ p��‘‚«Ç�Œ äÓW»³¿Ó|Ûíšc%´¶ëƒÌpÙAùÆI\ã&¤Ð5ÍBûÅeÅò½µŸšb˜F ß�ØãŒ(ü­·$œWJš>™ðΚu¢ËlŠE�CF½0§aRG§ÙD-Ävvè-³ä‰G•‘ƒ·�—#Ò€,ÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUb]6ßL–çWòœ•Úp ©S�yïœcÞ¯U{Û =JØÛ_ÚAu ˜§Œ:’:Šà­àÛu¥_]F°YêÜ—OlÄm„wXƒŽ€–Ub;3Ö¬Z^iz~‰spÖ–÷RI¨]Á¥BT iU è›�$ôg¥u–ú�ki5¥¾‘a ´øóaŽÙ$ÿxƒøÑy hÚ‚B—ºE…Ê@»bY­‘ÄcÑr8ž”É>�o¦éºvNÝÑcŒ:Šº.®õÅÓ¥y7VÚOÛšc¸• FÐyÃ×¥t#BÒ Uˆ†Üæźmˆç9QŽ9çŠšÚÆ;k»Ë•wi.�Y·ò…P¡WŽœß–4çöɦÍ‹ µÔV¶’ørx¯'R–­äªÏñ/Œ÷ÝïZvš”Ú Úµ”wI©Cg§Ç<2,h®$bʱ€)ÎÕÇ~yÍuÑiöPÌ6vñ›ƒ™¶D£Ì>­�ÏãUßBӾʹ6±[@— pc·�Q]Õƒ €9ù€?…rúõ†Ÿiáè¼:‘ÛͬßÙ‹5•Ôo ƒºg=B©fov8š›ÄQé×3[èv«nÚ�ËÁ=ÅÎè¢�”ùŒÞ§nÕõ'Ðèo¼=¢ê—ãPÑôû¹‚…\[$��Û$ŽMC7„ü9q ’oéR¸U]Ïgª¨ät=ß_iºe¬w—–Ñ\ÝdÅgP^GoàLôÎO@O¹½>ÂÓJ¼Ò,uym¤‚ d Ä·oO4.xà`øZì/ô]+U GL²¼dGöˆM™Æq¸gò¤]I[(ì—K²‘6øàé±9È\`’s@ç‡eTð¶–5­JÜFt»a%�Ú§ÊÄádryäí\2=k*ÚÊÞòm{LÔµ+X.e¼³˜ÝÚª¤.ˆDTl€ÿºäÙaè2YÛJîò[Âîéå»2Y:í>£“ÅC“§EdÖQéö©hÜ´ „?UÆ(žÑ/®f’âÒMZŽÏTéqåF¿m_(1�p,A*?ƒ§Zm¸Óï¼aj4¸íâ¶Ò<á4±¡æqƒÇ\d³z½óŽš=>Ê(`†;;tŠÝ ,@,gžTcƒÉéëTàðÆ�kt.­ô=2+…$‰c´�\Ôä ÷  ¯ ­´> ñTVâ$O·FU#ø÷‹8ÞºªÍ±ðö‹¥Ü�?GÓí&*TÉol‘¶=28àV•y¾©=Ö‘ã-gU±Gyn ZvÁÊù� ˜Xûí¥3ÆM-N¶ùá]kR€†PÌê‹9'$¨äÒ½ †9d•"E’R ŽªrO~8¨—O²GGK;uxäy‘„J ÈùÜÃŽî9=NO­q-â LxïÄ#Y‰®äÓÚå,Ö$Å»Œâ;~éÝž}:V…ÍÖ­µ�6º¶Û­ñ®Ì�1ƒ�å¨<Prs–Ã{×DÚ6–írͦٱºn �Oš=�˜}j[» =B5ŽöÒ ”VÜ«4aÀ> Ö€8…ñF©6Ÿ¥ê×7KkbÖ©-ȵDv X�ì�óyL#oÍÏz–÷ÄzœRjWÉ}bÔ’Í4³“2–A’~öæ YqÆ1�y®Âm6ÂæxgžÊÚY¡ÿU$‘+4î’8ü)_O²’õ/^ÎÝ®ÐmYÌJ]G ldP˜j7‹eâ)¿¶nQá$¶VýÔ85¾%;e}¾AêsÕxÆ9×ÃúTqÝÇ,ãQ´âå+6ñó2®ÐGr? éšÂÍ⸉­ 1ܱiÐÆ1) Xcæ8sè)“éZuÕ‚Ø\XZÍf¸ o$*ÑŒt‘Ž(•×5}[ÃúE­ÜsÙ^]‰$W³³·*“®Âw–`P Ç‘‘Œ‘O·Ô﮵/±7ˆb‚+[(.>ÓåGþ›¿v_‘€ƒh.=k¢²Ð´�1ÃØiV6Œ7a ·HÈÎ3ÐwÚ¹úJ{hÚ[Çm¦Ù²[œÂ¦"#þÈÇ…rgˆ¼A¨ëä­¼¢Õoäµ’6â4�Y—wßówðîàŽƒ5·àùlýšPïëÖ¹ÓlMð¾6VÆð �)|ÌznÆi%Óm%²šÌEåC1,âÝŒ$’rNä ‚Ops@RÿÉD´ÿ°Lßú6*Ù—íl·ò|�²á¼ýùßœ »qÇ\ç5†| ¡Äåu8)A'ö­ÖंF|Ι�jÚ±±ƒM´[[s)‰I#ΙånNyg$ŸÎ€!�û_˶ó~ÿÎo´mß�+æÛ³ý¯¹œñ×Ú¯ÑE`x™#žÝ ‚ëJƒR0¹F¿Œ>"?{ ��¼ò8äãïÚÂëᤠfö0,z\fê¬5Ë@*«'ð“ómb¤dä^�y§Yj©{gor¨r¢h•À>£"’}2ÂêXe¸±¶šHÕ<‘+ÿÝ$qøP;«Ý6}8Å<öhØ�Ý•a�Ì{Ôž¹Ž„ãŠÉðNc—^‚V†[”¿Ý<Öû4hFÅþ 2yÉÏ5ÒÉei/�æZÂþx]уæÓw®=émm-¬mÖÞÒÞ+xWîÇQôŠóOý²ÖëC¼ÖDMeq¶Úi\âÞMÄüÝ·H¡°{mÇ~`µPévדOa%”:üŒ–©[¦cvê1&â'8 2 Œ÷¯Oþα6±Ú›;³ÆÁ’/)v+�@ÆŸ­Ao èö—­{m¤ØÃtä³Oº+’z’Àg&€4(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š (*NÕfø‚ât†ÊÚÞcÝܬaŒ¢íf$g¹ �õ¬}_GûØe‡TÕ5ÌpI_Ió‡;rx#9ôã¥tòÍ4³H‘Ƽ³»Ôš}y׋u è¼}j·ÒÉu ïÙ#Ø7+…›*pB“’1ÊóLžH'Ô û^ƒ¢]ÝL ½Ö¡&Éáa¶$NEz8e$€A#¨ÏJZâ|A ÷2k0ɦÇö™4Ï•­eyuÝ�¬›FH9ÇS‚}qQÙæÛj×·šNŸq£ÚǦ¿›p4óo† G˜˜'ö4Ù ëCr‹¨<¹T´mæ 8$ƒÜÍL޲"º0da•e9zŠð«{«Kí?J[µ²2%�Í%í½¾ü±u Ë* ¸Ü~nkµ´¼šËÁZUÝŸÛ­mÂ8”iZìÈ}¡˜HO'ý’Fsí@ð¸„ÌaFe^¨ng§Ò¤¯?Òtk­GÄ·R^j:œ7{µKˆm„œïNJ)„|§�y¯@ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( �ß™.±¥ÌÐߣmãv9YW¾Óê;¯^�jå„ò\B“K@[$#Ÿ˜/lúví@ÔQEQEW¿´Ú}Í¡}‚hÚ=ÀgÍq#᫚Æ?íÛÿ³®úŠ,rb08|KR«µæÿFp_ð­Ÿþƒ'ÿÿû:CðÕ�]dÿà7ÿg]õF×¥Äví4k4ŠY#,0ɾ2?:V9ÿ±°_Éø¿ó2ü9¡ØImöŸ´�È_fÞÀc>•±QËq ?ëeHøÏÌÀV<~3ð¼²,qø‡KwbUnÐ’O@9¦wÒ¥ PP‚²Få•wâmOº{[ÝsM¶¸LoŠk¸Ñ×## œŽ5nÃS°Õ`iôëëkÈU¶4–ò¬Šã*O8#�z TQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEŠ €çõ 5Cop¤¡!�V*ÊÃ�ÀŽ„È›Âÿh–&ÖµGxc%ãùN1œlëÏ^µ·‚X•‡ãO¦¡áËyt),lãA6ÖË1$îb 1nNN95FãÂrÝ_βʆÖh®w͸ùÍ$ÛGL*(9àWWEs:φo5;ãs©$ì«jex$ùŽpy;IÚ:ÉÏ~] $ÔKämE¼öìN«„~ÁõÈô­z(ˆÿ„æòÒÒÚïP–Ù-¢P ¥ÔÙy|­´�«´óÂä�9ŠÐ¸ðþ­q¡Ç¥&¡odŸ>WÜ;a�L�‘Ó¡-ŽÕÓÑ@ÝÆ�©‰!šßUin<›™§Ǽ0+° üÀöŽMt”Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ’¦ÙæÄ�±ƒ®åk„z‘~ð¤¥hbŠ( Š(  Zµ¤wÚlÐ< q‘•…å1¬Œ9 Äg‚G<¡¯;‰î㲃D[aºMqá¹°!‰|ƒ*D²O–p¬xîÃojô{ý:ÓT¶ò/!Æ:òAV#�}ÅUOi1é�§­˜ìþiùÛyïïÎíÜ›9÷  Z Ìþ¸‡L±‚ÊêÖi`û;ÊÏ J§œ63³œŒé�X³ès?Šl ¼¿iuIí'¹þÐ�64Dc\�#Ä�•9ÝÜšì¬l-tËEµ³„E ’B‚NI9$“É$’I<šdšl2ë6Ú£4ž}¼@ªÚUÊOÏîÆ9õ 7Åd„øu¼Nºd÷‰¨a™!Üd‹Ë“�„Á;r£#8ëXz:ºëV·‹u|n$6-4­{3yždÓ©VRûJ€£dúשÍkŒÓ"Æ—^YDœÆ 'ÿ[<â±"ðœPˆ§Kû¯í˜L÷dŒËÐdû»p08ê9æ€9‰u‹?ø‘"½HÞFJ¶…q{Ÿôxyß>‡žýëgÀ=Âx‚Y%³j‡.-Û?¸‡þY¹,¿�×½]o \jê7ÐxƒQ³³,¦d„*‘'WF$üžßNõsAÐÛDûïç¾{˯´4³ª‡"&Ðû�€ëøÐ½Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@zQTu;ãg¤cОÔP4n¥µ�Þ3ÑK`ô> /Font <> /XObject <>>> /Type /Page>> endobj 45 0 obj <> stream xœ­UÛjÜ0}/èôˆvnºA)ø²-ä¡­!’@ )›>ô÷ky½ñJ«-d)ÆØ¤3gfŽF;…¦ç:}‚ ‰úþEíTÂl´†ðíAÝ]éW¬þ£HßNï·é}ž—‚þq£67?‘õÓoµÓÁÙ3{ÃNGÐŒbBH6_oÅéþ—þ>ÅjÇ…ãíIm†£&=>îƒÍó_b°Îˆz|QŸÐŸ5Z48Ñ^O{ú„â„~ÚŽªÂÎP# ‘Œ�¡Û&ö´~ÏL‘9G°m|ް£¦Ø5”k¤¥ ¦äC0°È£ÆÚBŒw’#±+C·]™•IõHE ‡‚™ ÄK_ÆŠX*”"–¸¡)57'7ÿ±ìy—5B0:¸°;4‚ G<‘xŒ®2�ÑUê1ºÊ=FÁµt^òÙ“ƒŽŒËe 猵1gzwY&4’%ÕØ¶²6ª žB¥°H®‚6mé}9ø:‹o¡Âɽ�Î(”I†J ;ª˜\S©Áª5[[Õ»ž³¼^ö–‹ý¼û£f‘4¥¥p ÍšÑq6j©û¸‡„ÉxÊé}_kª÷•fÕKBCÍ,ëÊZÞ]vì-Y$c<™\â¿æË\×è–;ÑútN¤žØÈû�è÷wbzþHàžÁ endstream endobj 50 0 obj <> stream ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ€"ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ M&ÚÞW…$“38Ï5cì6Ÿóëýû=îÅdAöOùõƒþýŠ>Ãiÿ>°ß±SÑEØY}†Óþ}`ÿ¿b�°ÚϬ÷ìTôQvDa´ÿŸX?ïØ£ì6Ÿóëýû=]…‘Ø­?çÖûö(û§üúÃÿ~ÅOEadAö+Oùõ‡þýŠ>Åiÿ>°ÿß±SÑEØY}ŠÓþ}aÿ¿b�±ZϬ?÷ìTôQvDb´ÿŸXïØ£ìVŸóëýû=]…‘Ø­?çÖûö(û§üúÃÿ~ÅOEadAö+Oùõ‡þýŠ>Åiÿ>°ÿß±SÑEØYnô»iá`‘$o�•�cšå+¹®>ÎßÏ“-÷¯½kNVNæsŽªÃ!µ–nTa}OJ²4ÃŽeÿv´@` EK«.ƒT×S&[ cqíÖ«VýP¿¶|ä?Ä?­T*]ÙŠP¶¨Ï ÑGzØÈ))i) (¢ŠQE (¢€ (¢�Â�ÒÑ@ EPEPIKI@¤¥4”ÄQEQE1 ESQE”QE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€;êâî|A©A©\¾¶H£�ÔFmÉùC2Û‡8®Ò¼çWð¾¹w©]É Äó»£ TpI#©÷§‚�)Iª�/Pź‰/f�ëoË=Ô/ÙÜI"§Ê¬8$ ç&ºŠó�#Âú妥i$ÐNŽìeSÀ ž‡Ú½–2¡$©;� *²OÚ#”oŦ—,¶L¯y¨=Œ¨$Ï�VCrqÈß°vûâ–ãÅ—†ùlì4¨®$’þ[8Ì·f5o.0ìÙØçrãýžµ—?„õ+�OÄÙ‰ŠFÒ¥Þïeîqž1$JrqÖ�oá[Ë«?&¡m$l—77z€†èÆÑ¼¡ÛÑ�?3òŸÒ¸Î£M¼`å`¶‹L'S–îK?³Ép5t]íûÌ�¤c'=:)§¸´I.mZÖc�Ñ3†ÛƒŽ£‚Qìz•‡ªèð[éQiöžƒQÓË3˘,�ó�à¿VÎrÅ�úÕ¿ Ù_éúvúŒŒÒ‰$(¯)•¢Œ±(…Ï,Up3íÞ€6h¢Š(¢Š(¢Š(¢Š(¢ŠÂºñh÷SC¬¨…–´š5%g£“æöÛü]Gp/és_ÜZõÝärÑÀ§-q€ç8-Ôœp3Žq“ŸqáÕÖ.¦›Ze™•´†&!`¤ƒæž»¿‡ îNŽ™õ½¡†þt¸’6*“¨ÃH�‹Œ`7cŽ3Æp.×9`¡mAþñ&º:æô÷ Nêj—ÂÉ{¢Ä²Ç/4Ò,qF¥�Üà(’Iè+›—Æ:0×ìáMLûZÎÒ‘u@ÑËgƒƒ'ùô®ž¨Kc$šý�øeò¡µžSÔ—hˆ#Û÷gó%mní¯­’æÒâ+ˆ;e‰Ã«`ààŽ"¤uŒ§¡§S&q.ç°¡0袊ì9B’–�ÒQE (¢Š@QEQE!…Q@ EPEPIKI@¤¥¤¦ ¢Š)€QEJ(4SQE†ŠZJ(¢ŠQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE�,ÚÈ•ÄV'k=ë©#±#Ê8?‰­ç®´o6îi?áÐfÜäù²É‡~z·îO'ê~´˜Ñµh÷O7�à ™áa”È1ë’«ÏáSÕ*×ìv�ö}�Ž\Ÿ*Ѳ‡�ÏÜ^Ú½MQE(¬ét y^Yt› $rY�í�–'©'šµiekaŠÎÚxÉÜRÂ}p;ñ@É袊ÌO©ê:„‚âÎßS‹LòƒG5²[–”äå±!'n1Œ.NO¶zzÀÓ§ÔtÝ&ÖÀè·SKm Â$ŽX|·Ú0K†ã?w4™H›F»–[¹¡7¯y¶‚ê¤EV+&ñƒ´üéÞ¶k'@Ñ¿²,bI&y®|ˆ¢‘ØŒ‹€«€>Q“ŽüòMkS[ îQE2çÖNžHõ #RI·‘"QýÀ:ïöïÔwÕ„—s[™nâXYÛ)ä¢ö zõÇãœdÔ›GŒòK©‘"‚E¼HHÎ]þýºäܱŽê+*îU™Ñ°²Ž ¯bào\qÆxÎW…š(¢˜ŽúŠ(®3¬(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Œ‚f‚PÑÐ�Q]�q×V²ZLÈêqž±­;j™�KèÍX¥I—rûzSëY�åIÔ˜^\�0þB‡K°•Næ»0PKîk.òëÎ;îÖ y^Có¹o©¦UÆ�µb”ï QE¡˜QE†%Q@Š(¤EPEP0¢Š)RRÒPEPi(4SPh¢€Š(¦EP 4”´˜¦ ¢–’€ (¢�¢Š1F(¢€ Rb–ŠJ)h ¢–ŠJ)h¦QKE%´PbŒRÑHÅ¥¢€b–ŠLQŠZ(1F)h Å¥¢€b–ŠLQŠZ(1F)h Å¥¢€b–ŠLQŠZ(1F)h Å¥¢€b–ŠLQŠZ(1F)h Å¥¢€b–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h Å¥¢€b–ŠJ)h ¢–ŠJ)h ¢–Š`%´PQKE%´R(¥¢€ŠZ(1F)h Å¥¢€RÑ@ E-”RÑ@ E-ÀJ)h ¢–ŠLQŠZ)˜£´PbŒRÑ@ Š1KE&(Å-˜£´PbŒRÑ@ Š1KE&(Å-˜£´PbŒRÑ@ Š1KE&(Å-˜£´PbŒRÑ@ Š1KE&(Å-˜£´PbŒRÑ@ Š1KE%´PQKE0ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€;Ú(¢¸Ž°¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š dôQUÍÑ'䈰õ'Ÿi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�Ñö™?ç�þ?@hªßi“þxÿãô}¦Oùãÿ�К*·Údÿž?øýi“þxÿãôfŠ­ö™?ç�þ?GÚdÿž?øýY¢«}¦Oùãÿ�TÑJ²‚FAAí@¢�� ’pV7£<&GÖ€-QU>ÛÿLÿñê>ÛÿLÿñê·ETûoý3ÿǨûoý3ÿǨÝSí¿ôÏÿ£í¿ôÏÿ  tUO¶ÿÓ?üz�¶ÿÓ?üz€-ÑU>ÛÿLÿñê>ÛÿLÿñê·ETûoý3ÿǨûoý3ÿǨÝSí¿ôÏÿ£í¿ôÏÿ  tUO¶ÿÓ?üz�¶ÿÓ?üz€-ÑU>ÛÿLÿñê>ÛÿLÿñê·ETûoý3ÿǨûoý3ÿǨÝSí¿ôÏÿ£í¿ôÏÿ  tT\¬�´�§µO@Q@Q@Q@ËëÞ5´Ñ®Í¤p5Ôë÷À}ª¾ÙÁçð¬�øYŸõÿÉŸþ»)åøš‘RŒt~‡,ñ”!.YK_™ßÑ\ü,Ïú„äÏÿaGü,Ïú„äÏÿcWý™ŠþOÅ™?_Ãÿ7àÿÈïè¬}ÄVšüЫG4xó"cÈÏp{ŠØ®:”åNN3Vhê„ã8óEÝQPPQEQEQEQEQEQEQEQEQEQEQEQEQEQ\“xÚ'ñ-Λ­à·±m—R >âfv#€‚4 û›¯`AÝ]…ü:Œhå6Ü\[IgýÙN9ëŒPª(¢€ )®â4,ÁˆÝRÇòN]Eb• I lBó ‚â0ÏZ½EPEÌxòmZ ß�.Cm²Òyå»V¢…‚¨ë¹�ì=q@=Ÿ£ÿh%‘‡S§…Ìbu#¨Æ$Àû¤Ž£ÔqŠÐ Š( ¡º8¶ÃùÔÕ ßü{?áüè>‚Š­~ì–R29Fù‡nEd%äÉœ\Êsýâóæc3JxJŠœÓwWÐ襇•Xó&tU 6æIüÑ$›öã€J¥âùæ¶ðÍÔ°K$R+Ň�Š‘™G±®Ì6"8ŠJ¬6fU á'nQ\½×‹§¶¼Ô”i,öšuÔpOp.áÕå\d‘¿‘Ç ž‚£ø¶ûLÔVÉQõé�ï@”Wg®E¢éºŒÎ5w½¶‰$—NÔf ã-�èç ‚N2 ^: Ö_ÜÇqyiw¦ {¸ [”Sr¥2År\€‚9–h ¢¹[$öΫdü^-’A áÒGdó`|»rIÇcÁã+ªøÄhÆÒÚúÞÒÞþty sß,q*©ýa“ž=sŒPSESÒu(u�&×Q· "¹‰dPÝ@#¡Å.£w5•›\Ch÷[/gçÛܨþ"8ï@è¬{Zê–öú^/UÔI4¨ØHƒ�ÇûÄð¯RqŠØ Š+ŒñýÞŸ¬ßÛEy2GNŽ;@Ÿ.o7Ê,£±ýôg�îûPgEy¤º½ýΉy�Bán4¯Ý-Ã$Œ¥®4aÎÞ öÝW´ÕÕ¦V ºªFút»¤Õ¼Ò¢äíòŠy¿7÷ó�— öŠåü-p‹u-œójÑj ym5<Îø2FÜ‚¹8ùN ê(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢øú>éýh¢øú?îZ–çþ=ßðþu�Z7?ñî߇ó®cÄ—3ZèS<¤wŠ4uŒ<Š…Ç¸ Oá@$Öt¸oE”º•š]�N¡Éÿw9«ÕFMƒO6)c¶#  `þ¥³ÔžäõªžfH¯ì·´�Ù]´»�›U€Ï}»ÊÿÀhf™æÇóüëòpÜý߯¥>¹[‰3u;‰¼èÖäeþïÊä�LöÍu*Êè2°È äFå.T0ÜHÏ W/¦¤�c+@±€c…XÆygq!9ÇО˜¨­³5ÃËçº)af€ g“ îzdþÖ’$œÔš•Ô2�TŒ‚V<ñÝEcòO4AB‰ãBjô$ 8àžO£N…ÐÉö{«‰- ÂĹSæÔg:΀5Œ±®ìº�Ÿ{'§ÖŸ\|ìd¶¸’æt†|JJv'n0{ WMc4rÄÛ/EÖ-òñíò�@¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š|_ë“ýáZu™úäÿxV�QEQ^W£èöré÷vvwž‚xt+‹+‹�>ø;Ìì#|À"•£Ilo<ú€z¥Çø.+Ô5;½9t`’("6Ú-ÒÌŠÊe%Ûj ƒ�Óø:×a@#¯|C©dçý*_ýÖ}hk¿ò0êõ÷/þ†jç… ûF§"}– �ÝgdÝ̼ýÖúŽ'#j§ìè©vHùWz®>f·oëh�övŽùQóIµ�¹pÁöÀ¬y†'�mEÖ6Ü£ž€ää{äÖ�¨¤Ú_¡2ƒŠ»:߇ÿÂAp3ÇÙ[ÿCJôêó‡?ò0Ü×£èi^Ÿ_3›¼¿D{¹wð>aEW˜w…›â¼ï j±yO¾Îeò`lI&P�ªppÇ àó\½¤Óáæ™ÙfµÆ«mû©FÖÔç#Âœä ‹€@À ê›$‰o$Ž©ÌÌp¤ŸJusþ7t�ÁÚ£>£ööwfPo;OÉó‚>nœsé@†âh•¦Œ4ÇÃç8ϼxì)ìÊŠYˆ I'€+Å–é÷íw£Äº­•œFõ®ãìæØ"C,¨ÊÍÎÕb�Éë¯ìõ{i×ÒkzͼMB'»¬\†�–Yá•fù›å½wQÈ“D’Äêñ¸ ®§!�èAî)�uo”¼ñ(„fBÎÎ3ϧ×á=:âÝî?³uÍNëBÓBÁg X\2¼‚Pª0G*Üâ¸}ZäÜè:­Æ¯ªÛiº‘ŠùÞÙfŒ½Ì­#E³kvªB¨Á98=hÝ)‘MÊZ)@¬T”`pAÁPk‘mN)ü99²ñŬÊ%ÄÚŒÆÄ¥~ê” ¡»‚A<ž¼W!á-CÃ×Ú–œ–zˆÒ¢µœ‰!:Ô¯öÉ·q³óc»%Ab@ÇZõÉ'Š&U’TF|í À�“�Â�‰,k$n¯€ÊÊr„òO]5¯Ä A#{Y´¹ —bÅ™ã\d©“~›�qŽ@Ç9­Ï@–þ#šßízš¤Q̰ZÏ{$±ìVA�¬Äe�ütè4QEQYú¶¦tˆ#º’Ùå´ ‹‰#90¯÷öõ*;ã�9çšÐ¢²ìõ¸µ-Iíì\ÚÄ¿¾¼GXsŒ"Ÿâ898àqÜâµ(¢ŠóŠº4:ä1Ãs=ÄqYéWú‚$Nybòvî��½=hÒ(¯ ?¼=kâk;ï5#Å�Ô®dh\‚¦$ÌxJÜã … ‚+¶ðN™ˆºî— Ò˶¤|¿0(Úd  ª7;` ¦Š( Š(  ²iÖ’êß´#íp©T•I ´õS�¼;àägžµjŠ(¢Š(¦�Ê%+—žßJ}QEU]JÂ-WJ¼Ó§.!º�à�¡Ãe*qïƒV¨ Š( Š( ¡»ÿ�gü?�ML™<È™=h•Ôi¶xwmÝŽqœsšËþÁùûÿÈýzÖóBñ *ÝÁyÑÿ{ô®ƒguq$³yŽ%²6.„�­9=³ŸÆ–#Ñ¿³$¼¼š=»DÍ.Ù@í†@¸ÆõÍ^ó£þ÷éG�÷¿J嵟 ³èš�·žòÿQ¹‰!Y.&]Á†Ú¤¹ÏSêjìž²¸Šà\ÝßOq7—þ•$£ÌŒFûÐ.ÐsÐç¾ksÎ�ûߥtÞý(xFÇeÉ{›É'žá.¾ÒÒ�1%TH(Æ1Œ1Ž*Y<9‚ ?´µ¼„2‹Å‘|ÆV •l®Ò2xÇ­o:?ï~”yÑÿ{ô †?*�{¾Å ¹ÎY±ÜŸZ}GçGýïÒ�:?ï~”�ÛAmæyG˜æGòÐ.æ=Xã©>µ-GçGýïÒ�:?ï~”%fjZ ž©©é·÷A6Ÿ#çþ=Ûðþu“sm 嬶׬�Ê…£Á±2"eMf�TàŒÃ]'X‰>ϼE¨V’Ô<ê=›°~¥IõÍO¢i’èðMfe[ �ÈßëIbYƒñ‚r~÷SžzdêQ@eOau7ÚF t¡Ãn9�GxÏøÖ­—Ÿr–·H`™¥92¸?1÷_aÐP&‚2ùX6±’X`sÛÓ­mÑ@ÎæhÒ™b·– w7�Ç ýi`±–ÊE[i‡ÙsÌ2vÿº¡«ÔP{ØJÚmݰdß3HTäàn$Œþu¡EQEQEQEQEQEQEø¿×'û´ë>Þ6yT�À9&´(¢Š(®>/Þ6–ºuÞ­�C¤M¤Û˜lÌl©"ƻܙ1%詮ŠÈÒô»ëmRóQÔomîg¸†·¶hUV6‘‡ îI&SÜt¯Eâ:ïüŒ:Ÿý}Ëÿ¡šn—}…ËK=œwHShGÆÈ9äB=pN<Ö—‹t‹­?\º�ãcoq+J’�ò�Ç$gÔf¹úûZ\•h®©£åªsSªûܽõºFªÚUœ„ f›-îq �ªnÁäf¨ $*ç ì3Í6ŠÙE-Lœ›:ÿ‡?ò0Ü×£èi^Ÿ\ÃÝ"ê ‰õ)£hâh¼¨÷ É‘íÅwõò¹¤ã,K³ì}_ áEWœv•µ (õ-6êÆfuŠæ…Ê0VÇšæ¯<i.‹e§ÙêVoi0‘.#¯œ%+µ@P7WÀÀÆA먠,í °³†ÒÙ6C „EÎp¿­Rñ„úžƒwem ´“M�>ÒÅUw nÈV9’8üGZÔ¢€8½[Áwzµôs‹È,¾Î‘ª4ÌnJa”N �0û¼Ÿö‡"µ/t­kXHí¯5m,š .c²Vó%oâQ!û©ô¹ê+ ¢€9Ý3Ã×z ÔPé7ʺ6âZÆá ˜Gý2|ä ölŽN1Ò¢¸ðÝÔ¾Öôu–>þKÇ�É;TM#²çŒðfºz(;\ÒÓWÑ®ìÌp´²A"DÒ®B;)PÞÝ{Vׇ¼Iyaiiq¬é²C öòº%ƒÆÄE">ù­ÏËýÞ}«®¢€9ë¯ [\ëÎÑ µž¨bI ˆÜú®ÏN:Sô] Ky�þ ��@Í<Š ‘™e+•ÉŸ¸½…oQ@Q@Q@[ÛAgÁmpBŸv8�*ŽüÅKEW3âí QÕâc¦›S$š}݃-Ì� 8OœVÉSã種šŠå¥‡Å2ë–š—öfŽ>Ïm5¿—ý§/Íæ4MœýŸŒy]1Îïnu4KËVÔno„ q}t.($.‘�q€ª“ÄyÎZÕ¢€ (¢€ +þ/úuÿÈŸýj?á"ÿ§_ü‰ÿÖ«ör'ž&å‡ÿ ý:ÿäOþµð‘Ó¯þDÿëQìäñ7(¬?øH¿é×ÿ"õ¨ÿ„‹þ�ò'ÿZ�g 特EaÿÂEÿN¿ùÿ­Gü$_ôëÿ‘?úÔ{9¿‡þoÁÿ‘ßÑ\ü,Ïú„äÏÿaGü,Ïú„äÏÿaGöf+ù?þaõü?ó~üŽþŠà?áfÔ#ÿ&û ?áfÔ#ÿ&û ?³1_Éø¯ó¯áÿ›ðäwôWÿ 3þ¡ù3ÿØQÿ 3þ¡ù3ÿØQý™ŠþOŘ}ü߃ÿ#¿¢¸øYŸõÿÉŸþÂ�øYŸõÿÉŸþÂ�ìÌWò~+üÃëøæüùýÀ�‰ƒ<é8×?ý�uº6³k®X‹«RF×Fê‡ÐÖU°uèÇš¤l�ib©U|°wf�Q\¦çE^úÊ+ûV‚RëÈetl20èÀö"ºÎRÅ“i§_Isú­Ìsµ¿$JUIéæ0þñºqÖµ¨SLÔ!Õtèo WX¥¨p$s‚}*G»‚;È­LO*3¢`ò«Œœôþ!ù×¥hmt45 ŒÙ܉QÕ”dRtëÔéžÔË )’ãÃך†—4Í2ÂÎÐ3´n$QaÔÁíSÌÇdwwùÒÍŒùh[¸¬{o­Ç‘¶ÊV2髨Œîl|€q“ÍsZ.‘©-ÖnŒÉ|"™nOØÜ Ë)tÅʰÎÀíÐRKc|txÔXÝn>6»|–È•q•#8õíG3‘èJw(l‘œ¢–¼ÛÄ0Gu«\AyIn–ÖÛ§h$—ì€d¶ÐŠ@ÈÆwc¯qVaÓn¥ñ›tˆ ÒIiq“È¿gãj‰…UÛÁ}O4s ”ô ‚Úî Å”Á&ñ�ðFNçÞ¸Ë]X>É|–w {ý³&çÃä@Ò>xì„}9ÍiøSMƒLºÕ ]5­¦ûTŒ²ù%Uâ-”ºÓµ …�OA}wäÁizЙ5ºæ&eÈ<ç8È#$cÞµ«Ž·[ˆµØ•c©Ù. ½‚dÿFØs¹Ôä€ÄãO=ÅexzÛÍ‹H—O°ºKØî]în™JÆð‚à¦âpsò€B3Å.aØôj1^wckªã.Ÿa=„óØÜ$™�ÑVl��˜ï çæàzw«2Ø—ðô�é:]õ¥Îa7¾l-ºeç,7ž¹Áäqš|Ác»Å¬ Ù½¥�ÏÍ †IwG Z5ºÇòŒíVf8'Ÿ®k ¦„ÄÅ¥¢˜„Å¥¢� E-”RÒb€ (¢˜Acwý…µäA„W,¨`€ÀŸ~j+»+‹™CŪ]Ú(\…b ûüèÇ?�eøZÊâ= I�µ;¹#ûGìî±AÆBãýîÜæ•õŽ‚Š(¦oEW!ÐQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP× Ôˆ8"Ö_ý׈W·k¿ò/jõé/þ€kÄkè²_áÏÔñs_Ž>�EuÞ ˆ$­ij4�D‹@ಯñmõ>½ B4«;=+V‰nRæê!G&Û~ÒzŽ£·Jô#ЋГ[Ûñ·ùœo ÔšOc—¢º›í&Â;mb[‰¶\At#O& ¨8nîÀøÇ|Õ/&Ã@:�Ù ¸¸’äÀ¾zoTP¡‰ÛÓ'=ý*£ˆŒ£x¯/¿R]i3ŠØŽÊ øfÔÂÙ¥*Ãp_8\ð1Ï^õ3xv;dº}BýmÖÞá`%b2nÊî`úUdòôÎê·Ë<È¢Hä y•ÀÁ9êkiaçLcˆ„´-ÑY~!¼º±ÑgžÉK\(ù@òî>˜BãÐWiâ{µŠÞÞ÷V¸K-’Ÿ¶Ç§H$’4 ‡Ëå²@ã8Ís¹XèQ¹ÚÝhmíËÜOnZIm•Õd�½A¸ã�kEUQB¨@Àpqz®±w îžš~¡~!–ÝŽ%µ 9…òYƒœ3cÁÓš£á­WÄëmÉuqmçMæ‰Õ¶®c“àç¶Gû«Ýs+ŽÎÇ¡Ñ\¶±¯êÐÇyos k8ijEmdì¬ì¸0œËó°Îp:;ñW"×/ïlacufÔ.mSh !vß1#•e*H=èæS°¨,¬­ôûDµµ�Ë…3µrN2I<žz“\-Þ¹¨�6k»}GX·g²’öÛíö›o÷A?ƽk­ñíæ�¡]^ج -¼m)çnÐ =:ž=¨¸¬jQQ[Èf¶ŠV3 cŽœŠ–¨AEPER¢Š(¢Š(¢Š(¢Š((¥£ÀJ(¢€;z(¢¹�¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(?]ÿ‘{Sÿ¯Iô^#^ímöÍ:êÔ6Ó4O}2þµâ7¶ZuË[ÝBñH§a×ÜzŠú –qå”o©ãf‘wŒºîõ÷¼&G°²[‚ „W €63ÀíKqâ;‹ˆ'ŒÚÙ¡¸ey¤Ž2ÙNryõþu�Ezê…5m6<ïm=u5_^¸•ḭ̈[È·®De8VÁ^r'Ö ±Õe±†H<¨.-ä!šÓrîä~†¨ÑOØÂÖ¶„ûYÞ÷5S^�Lªö¶rÃ#‡ò,"0@#qïÞ¡ºÖ.ï-ç†r�çÎ.ñón€l`úU (Ti§t†êÍ«6m?‰nå–wšÞÒQ,¾pI#$Fø+Ï sPÜk÷wÉX‘šïíyU<>1ÆOJË¢’¡Ml†ëT{³ZoÝHe1ÃonÒÌ“³B¤êI É=Í,¾!º�¡H-¡e�ÄHGšàäçëÀÇZÈ¢�aO°½µNæ�Öî×í<´i®V貃•pIç§4²ë>lë3iÚxl’øˆâBG~–+2Š~ÆØ=¬û–õF]Jd’T�qˆ‘#*¨èI=ÏS]§Ã?ùŠÛ/ýž¸ 8$öé¾Òntû ››˜Ú3rWb0ÁÚ¹çû¿JáÌÜ!…pÛk}çVšx…/_Èì(¢ŠùSèN"Š(®Ã”(¥ÅÊͤêr`yeqÝ]Æ®ivÖ÷q£Äkœ�Àö>•½EvKRQqijsG ´ÕÌírÒkÝ1â€Èr±ò¥hÜ€rB�G$d �2y®*×Âú­ž•z³E+ãG–8“Íi’E\ÆHà§ðàî+щNêM1e�á,ŠÑÜ©sŸJáqLëM£Ž×´}CQÕíæ¶³f†ÞØ,Á�œH`6‡ ¤¨gÎá�ŸñªÞЦÓ5_>M.þ'óÙ•Ä[UÇ,¿0ïÂà{Wuçú5óS2ŒÆ7œcÌTñŽŸ…_’Ô¼ZDvÚ]íªG©o�NDŽAŠL»0f$d�’}¥tâx™C,¨U†A 0iêêÿu�ú9EsÏo|!.‘¢\– åûÙ"ÙX2É36Ü4„3gîõÀšë|Cg¨h—6 l^æ6‰ÚyB«)S“íZÔQd‚åM5.£ÓáŽõ!IÑv‘ –\$úU¼QE1(ÅPŠ1EbŒQE&(Å-”RÑŠ%QLŠ( Š( ÚŠ(®C (¬M_ÄöZ=ÒZOñ¸˜b*ÆiUÛàR À$€s€j–�ã8uQigwa¨ÚêÏ=Å»ØL«9ä±\%[žÔÔQ\­ñì÷ÓÁh·/Ú~Ë$jîBK>Ðp¦BÊ ÀÂç5ÒIâ­&-%õ)%ž(ü¥Y­¤ŠI ˆê‰í�ëèhjŠä¬<]¨ùú}¶«áÛ»yµ ™`1M‰³’âBØ ‚ÇÏá˜uÅ¥ø‚ãO’]-c·�å9¼ 4ŒÄb08rHÀÉ$v Ίæ¼?âÉ5{´°¸Ñïí.Ò63<‹”®›C€UØõaŒŽ]-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETSÜÛÛyhž(¼Ç§˜áw1è£=Iô©h¢£”‘$ 2ø>ÿ)¥–Xà…æ•ÂG–vc€ rI Ñ\+|C_'IhlÖâK¼ÍqR¢ýžVh·3²ª» §Ž7cu¼‡fäj,-œ:…îrXœ]�†%™¦ •€Vp£$€š(ädg�Y�îRÃ%O¨ô &¹Ðç²ðˆåÓ'³¶³…oíšµg‘£IæÂ«ù€(Áþéüz×V>!Ó¼;{t÷ZUåļÁžÍãUUBq·{dž�Gº²µkimšÚ¥Œ‘Æ×,rÙI9õÍK$i,mˆ¯‚¬¬2 Šòê×ÂÚ{èZ�ÕÍÌý˜AûÔŽYT4qbbWq8 Ž9­Oi½÷Œï.¡vŽVÓä‚ÚÝB²²nUùèC¹|Ž@A^�ðC$K‘Fñ©R”9Ä>”"3‰ÌHf PI´nÚNHϦ@â€8ï ÚÜÛøŠâX7IdÒ]A3nÎ3üA“ô®Ö ´³µ°·[{;hm \íŠÂ(Ï TôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE‰qá«]JöæãW"ùdCºá-ã ghÏß'’ýzŒUý.ÎâÂÁ-®/^ðÆHI¤\9Lü¡�ñ8ÝÆzÕÊ()ÖAþùÿÐZ Õl-õ=.âÎé Á*áÐ7¸8ìqϵZd ÈN~S‘ùýiÄd`ô ±Ó„~³{à>Ïv-Ùb¸˜,N¢ÒÜÚÍ‚KÙ!ã…Ï5Ñß?´xzÎî-tÙÍmvM¤s\ù²6èBd+ï �ØFçè‘ÙZÂb1[B†òâÛû£Ð{ Ÿç½y^““¥x¾ÎÒÎI!ÑQpï3— ~Q�BÒA;¦x(I5£y7‡£ñ†¼5�z]:S$;#MRK]Ëä§;UÆyï]ðµ·X|‘B,îØmÎsœ}y§,Q¤’H‘¢¼„`  `d÷ãŠóæ‡þo�"å/-äÔ#ž[¶�¸0Â8r»g€S�Ph±ë“x¦{i.í!½K‰îe–ä}¥“C×UX@ÈÚU‡Pzq“êfÒÙ³›xŽdœ åÆ0ßQ�ϰ¦\iÖWbQsgo0™vJ$‰[zúŽG±  Ÿȇ ׄ?ú­úlq¤1$Q"¤hª(ÀP:; uQEQEQEEsÿ³¸ßÊ¥¦º #d9Ã)ÔÂxŸTž}Q$ð‰7ºÕ¼rCp!âHˆÎ‰ ¼0W9ê1‚MC©ê¿ õM6Òc/ö}„’=¼Ä¬É"£02¡äß7<ÍwÑC*V(Ò5$¶@<“M’ÖÞa(–œJž\›�ëýÓê9<{Ð}¥kšÇ‡ÓRÓâŽkù关ؘ٠™‰sæüçmäç¶)þ)žçO¼¶–èiú­âD¢F½’#,Ù?4vÊŽ é†f8õk¼kx]âv†6hNb%A(pFWÓ‚G�Þpn1ùåv™6�Äzg®(ͼ&Ïk¨XÚ^ZišMöŸ¶¹UÔ]&•6†1˜öȼã�^¢³/5Ë]?QÓÚóÃ÷pù—6²É.¸�öˆæGy‡•„%£^F@ÎÜrõ¹- šHä–Ýã9Fe©ö=©ÞL_óÉ?ï‘@÷‚žÝôyZ=BÖöáçi.^Úî;…p܈€|¡xÚ?µÒSU>ê…ú S¨¢Š(¢Š(¢Š(¨­ÿÕŸ÷ßÿB5-5"�3Ôž}Îh™ñ�ý—Ø~À— ÚÎåšÆ a¾o5NU¶çîç‚N ɪ^¿…§¾³×ßì~"Ô$>u¼‡fäj,-œ:…îrXœ]�†%™¦ •€Vp£$€š(ädg�Y�îRÃ%O¨ô &¹Ðç²ðˆåÓ'³¶³…oíšµg‘£IæÂ«ù€(ÁþéüzÛSŽÒ×HgñŒšf¨‹ 6ñÿg€Yñ€¨ŒÎYÏlVûYZµ´¶Ím ‚RÆHŒck–9lއ$œúæ¤x£‘‘ž5fC¹ *qŒ�N  1°ð¾“áË¥Ô|A¢i¿bÕ2Ó mchôùK‰Ó …X!=7 ?ÅZþ#±–=Æ:�וM¦5­’+‚<”�›?RÎÜz®âHÒXÚ9]a•†A„U{Í6ÃPHÒöÊÚåbmñ‰¢WÞ£#ƒ@Qé÷PøšËQ¶Œk‹#çÌh›þôƒñ•¿EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE ßü{?áüè´ÿ�dü�ñìÿ‡ó¢Óþ=“ñþtÈbŠ(®³”(¢Š¦š­„’lK¸KÛªÂO �µ%F>��®qõ§¶‰/º œÛoOÔ�íÕ¸|’GÓÍwÔÁ8Å˱Š_3Q}MOQƒJ°’òà;"`Œe݉ÀUÉ'Vxñ~ŒbŠQ5ÉIU™²˜îUÆâ>Nƒpç¥MâX^m ãËPZ1ægÎxöíçp(A$c8ÈϨ¯4³¾†ÂžÛPm‹À†ia�Ìrlþ´åH+ÑGÔq^l¤Ó=“=2i¶æÔ¼­²æ/=d p±ü 3wPKÈþF‹Oé—·�gÊ‹¤’XÌ,Fïݱ p:3Œ×ŸøÎÎÓO¸[i¤Ì°hñ¤lÌe,¹"C’8&Mlxt5Yìíf’8þá§X­xf<ŰAì0OO­Îö*±ÐÍâý íâ:µ›ùÌW|wʘåŽxc>¸«m®éŸc7q^Eqn²,o%»  |Ås�È®B kÝ&%Ó¯ìµ^p,í ¤±"* $%ÁÝ…$³é�Ò­-�å”T—©åÝ\jÁÜðÀ…ÕK…b¡°£îñÓ¾hæb²7'ñ^“l²4ïyG�îÖíï�˜ÅhßßÛi–2Þ]Ê#‚%Ë1þCÔûW–G¨Ks¢J­}çÑ&y”jorKþï—Fâ6äð3ÔúWmwm�i‚yšìÈe•a—mÕTa•Fw76OËf�ÁéÊ)ÉV9?t�íYZZêpËeo%­ô·‹\ÇG„‘TF¤ƒ"ü¨¬ ( IÉ£™…�@Óõ }NÐ\Û1–dùУ¤© ƒV«Â…[ÃБæn2ÍæyŠùžkïà>öqÉâ¶©§ ˜QEÄQEQEQEQE¤¥¢€ŠZLSµ®Ä>,´Ða1´÷,7yjØz“Úº ò|]{“ÓËÇýðµ¦]‡†"·,öJäckÊ�.hnÙ¿ÿ 3þ¡ù3ÿØQÿ 3þ¡ù3ÿØWE{ßÙ˜_äü_ùžG×ñÍø/ò;ÿøYŸõÿÉŸþÂ�øYŸõÿÉŸþ¸[` Ân­PÙQ,» ±ø¿ó"Y–!;s~ üŽ—þgýB?ògÿ°£þgýB?ògÿ°®^Uâ2'úVlð4-ƒÓ±§»þÇâÿÌQÌ«·noÁ‘ÝÂÌÿ¨GþLÿöÂÌÿ¨GþLÿöÀQUý™…þOÅÿ™§×ñÍø/ò;ÿøYŸõÿÉŸþÂ�øYŸõÿÉŸþ¸ (þÌÂÿ'âÿÌ>¿ˆþoÁ‘ßÿÂÌÿ¨GþLÿöÂÌÿ¨GþLÿöÀQGöfù?þaõüGó~ üŽÿþgýB?ògÿ°£þgýB?ògÿ°®Š?³0¿Éø¿ó¯â?›ð_äwÿð³?êÿ“?ý…ð³?êÿ“?ý…pQý™…þOÅÿ˜}üß‚ÿ#¿ÿ…™ÿP�ü™ÿì(ÿ…™ÿP�ü™ÿì+€¢�ìÌ/ò~/üÃëø�æüùÿü,Ïú„äÏÿaGü,Ïú„äÏÿa\fa“ñæ_Ä7à¿ÈïÿáfÔ#ÿ&û ?áfÔ#ÿ&û à(£û3 üŸ‹ÿ0úþ#ù¿þGÿ 3þ¡ù3ÿØQÿ 3þ¡ù3ÿØWEÙ˜_äü_ù‡×ñÍø/ò;ÿøYŸõÿÉŸþÂ�øYŸõÿÉŸþ¸ (þÌÂÿ'âÿÌ>¿ˆþoÁ‘ßÿÂÌÿ¨GþLÿöÂÌÿ¨GþLÿöÀQGöfù?þaõüGó~ üŽÿþgýB?ògÿ°£þgýB?ògÿ°®Š?³0¿Éø¿ó¯â?›ð_äwÿð³?êÿ“?ý…ð³?êÿ“?ý…pQý™…þOÅÿ˜}üß‚ÿ#¿ÿ…™ÿP�ü™ÿì(ÿ…™ÿP�ü™ÿì+€¢�ìÌ/ò~/üÃëø�æüùÿü,Ïú„äÏÿaGü,Ïú„äÏÿa\fa“ñæ_Ä7à¿ÈïÿáfÔ#ÿ&û ?áfÔ#ÿ&û à(£û3 üŸ‹ÿ0úþ#ù¿þGÿ 3þ¡ù3ÿØQÿ 3þ¡ù3ÿØWEÙ˜_äü_ù‡×ñÍø/ò;ÿøYŸõÿÉŸþÂ�øYŸõÿÉŸþ¸ (þÌÂÿ'âÿÌ>¿ˆþoÁ‘ßÿÂÌÿ¨GþLÿöÂÌÿ¨GþLÿöÀQGöfù?þaõüGó~ üŽÿþgýB?ògÿ°£þgýB?ògÿ°®Š?³0¿Éø¿ó¯â?›ð_äwÿð³?êÿ“?ý…ð³?êÿ“?ý…pQý™…þOÅÿ˜}üß‚ÿ#¿ÿ…™ÿP�ü™ÿì(ÿ…™ÿP�ü™ÿì+€¢�ìÌ/ò~/üÃëø�æüùÿü,Ïú„äÏÿaGü,Ïú„äÏÿa\fa“ñæ_Ä7à¿ÈïÿáfÔ#ÿ&û ?áfÔ#ÿ&û à(£û3 üŸ‹ÿ0úþ#ù¿þGÿ 3þ¡ù3ÿØQÿ 3þ¡ù3ÿØWEÙ˜_äü_ù‡×ñÍø/ò;ÿøYŸõÿÉŸþÂ�øYŸõÿÉŸþ¸ (þÌÂÿ'âÿÌ>¿ˆþoÁ‘ßÿÂÌÿ¨GþLÿöÂÌÿ¨GþLÿöÀQGöfù?þaõüGó~ üŽÿþgýB?ògÿ°£þgýB?ògÿ°®Š?³0¿Éø¿ó¯â?›ð_äwÿð³?êÿ“?ý…ð³?êÿ“?ý…pQý™…þOÅÿ˜}üß‚ÿ#¿ÿ…™ÿP�ü™ÿì(ÿ…™ÿP�ü™ÿì+€¢�ìÌ/ò~/üÃëø�æüùÿü,Ïú„äÏÿaGü,Ïú„äÏÿa\fa“ñæ_Ä7à¿ÈïÿáfÔ#ÿ&û ?áfÔ#ÿ&û à(£û3 üŸ‹ÿ0úþ#ù¿þGÿ 3þ¡ù3ÿØQÿ 3þ¡ù3ÿØWEÙ˜_äü_ù‡×ñÍø/ò;ÿøYŸõÿÉŸþÂ�øYŸõÿÉŸþ¸ (þÌÂÿ'âÿÌ>¿ˆþoÁ‘ßÿÂÌÿ¨GþLÿöÂÌÿ¨GþLÿöÀQGöfù?þaõüGó~ üŽÿþgýB?ògÿ°£þgýB?ògÿ°®Š?³0¿Éø¿ó¯â?›ð_äwÿð³?êÿ“?ý…ð³?êÿ“?ý…pQý™…þOÅÿ˜}üß‚ÿ#¿ÿ…™ÿP�ü™ÿì(ÿ…™ÿP�ü™ÿì+€¢�ìÌ/ò~/üÃëø�æüùÿü,Ïú„äÏÿaGü,Ïú„äÏÿa\fa“ñæ_Ä7à¿ÈïÿáfÔ#ÿ&û ?áfÔ#ÿ&û à(£û3 üŸ‹ÿ0úþ#ù¿þGÿ 3þ¡ù3ÿØQÿ 3þ¡ù3ÿØWEÙ˜_äü_ù‡×ñÍø/ò;ÿøYŸõÿÉŸþÂ�øYŸõÿÉŸþ¸ (þÌÂÿ'âÿÌ>¿ˆþoÁ‘ßÿÂÌÿ¨GþLÿöÂÌÿ¨GþLÿöÀQGöfù?þaõüGó~ üŽÿþgýB?ògÿ°£þgýB?ògÿ°®Š?³0¿Éø¿ó¯â?›ð_äwÿð³?êÿ“?ý…ð³?êÿ“?ý…pQý™…þOÅÿ˜}üß‚ÿ#¿ÿ…™ÿP�ü™ÿì(ÿ…™ÿP�ü™ÿì+€¢�ìÌ/ò~/üÃëø�æüùÿü,Ïú„äÏÿaGü,Ïú„äÏÿa\fa“ñæ_Ä7à¿ÈïÿáfÔ#ÿ&û ?áfÔ#ÿ&û à(£û3 üŸ‹ÿ0úþ#ù¿þGÿ 3þ¡ù3ÿØQÿ 3þ¡ù3ÿØWEÙ˜_äü_ù‡×ñÍø/ò;ÿøYŸõÿÉŸþÂ�øYŸõÿÉŸþ¸ (þÌÂÿ'âÿÌ>¿ˆþoÁ‘ßÿÂÌÿ¨GþLÿöÂÌÿ¨GþLÿöÀQGöfù?þaõüGó~ üŽÿþgýB?ògÿ°£þgýB?ògÿ°®Š?³0¿Éø¿ó¯â?›ð_äwÿð³?êÿ“?ý…ð³?êÿ“?ý…pQý™…þOÅÿ˜}üß‚ÿ#¿ÿ…™ÿP�ü™ÿì(ÿ…™ÿP�ü™ÿì+€¢�ìÌ/ò~/üÃëø�æüùÿü,Ïú„äÏÿaGü,Ïú„äÏÿa\fa“ñæ_Ä7à¿ÈïÿáfÔ#ÿ&û ?áfÔ#ÿ&û à(£û3 üŸ‹ÿ0úþ#ù¿þGÿ 3þ¡ù3ÿØQÿ 3þ¡ù3ÿØWEÙ˜_äü_ù‡×ñÍø/ò;ÿøYŸõÿÉŸþÂ�øYŸõÿÉŸþ¸ (þÌÂÿ'âÿÌ>¿ˆþoÁ‘ßÿÂÌÿ¨GþLÿöÂÌÿ¨GþLÿöÀQGöfù?þaõüGó~ üŽÿþgýB?ògÿ°£þgýB?ògÿ°®Š?³0¿Éø¿ó¯â?›ð_äwÿð³?êÿ“?ý…ð³?êÿ“?ý…pQý™…þOÅÿ˜}üß‚ÿ#¿ÿ…™ÿP�ü™ÿì(ÿ…™ÿP�ü™ÿì+€¢�ìÌ/ò~/üÃëø�æüùÿü,Ïú„äÏÿaGü,Ïú„äÏÿa\fa“ñæ_Ä7à¿ÈïÿáfÔ#ÿ&û ?áfÔ#ÿ&û à(£û3 üŸ‹ÿ0úþ#ù¿þGÿ 3þ¡ù3ÿØQÿ 3þ¡ù3ÿØWEÙ˜_äü_ù‡×ñÍø/ò;ÿøYŸõÿÉŸþÂ�øYŸõÿÉŸþ¸ (þÌÂÿ'âÿÌ>¿ˆþoÁ‘ßÿÂÌÿ¨GþLÿöÂÌÿ¨GþLÿöÀQGöfù?þaõüGó~ üŽÿþgýB?ògÿ°£þgýB?ògÿ°®Š?³0¿Éø¿ó¯â?›ð_äwÿð³?êÿ“?ý…ð³?êÿ“?ý…pQý™…þOÅÿ˜}üß‚ÿ#¿ÿ…™ÿP�ü™ÿì(ÿ…™ÿP�ü™ÿì+€¢�ìÌ/ò~/üÃëø�æüùÿü,Ïú„äÏÿaGü,Ïú„äÏÿa\fa“ñæ_Ä7à¿ÈïÿáfÔ#ÿ&û ?áfÔ#ÿ&û à(£û3 üŸ‹ÿ0úþ#ù¿þGÿ 3þ¡ù3ÿØQÿ 3þ¡ù3ÿØWEÙ˜_äü_ù‡×ñÍø/ò;ÿøYŸõÿÉŸþÂ�øYŸõÿÉŸþ¸ (þÌÂÿ'âÿÌ>¿ˆþoÁ‘ßÿÂÌÿ¨GþLÿöÂÌÿ¨GþLÿöÀQGöfù?þaõüGó~ üŽÿþgýB?ògÿ°£þgýB?ògÿ°®Š?³0¿Éø¿ó¯â?›ð_äwÿð³?êÿ“?ý…ð³?êÿ“?ý…pQý™…þOÅÿ˜}üß‚ÿ#¿ÿ…™ÿP�ü™ÿì(ÿ…™ÿP�ü™ÿì+€¢�ìÌ/ò~/üÃëø�æüùÿü,Ïú„äÏÿaGü,Ïú„äÏÿa\fa“ñæ_Ä7à¿ÈïÿáfÔ#ÿ&û ?áfÔ#ÿ&û à(£û3 üŸ‹ÿ0úþ#ù¿þGÿ 3þ¡ù3ÿØQÿ 3þ¡ù3ÿØWEÙ˜_äü_ù‡×ñÍø/ò;ÿøYŸõÿÉŸþÂ�øYŸõÿÉŸþ¸ (þÌÂÿ'âÿÌ>¿ˆþoÁ‘ßÿÂÌÿ¨GþLÿöÂÌÿ¨GþLÿöÀQGöfù?þaõüGó~ üŽÿþgýB?ògÿ°£þgýB?ògÿ°®Š?³0¿Éø¿ó¯â?›ð_äwÿð³?êÿ“?ý…ð³?êÿ“?ý…pQý™…þOÅÿ˜}üß‚ÿ#¿ÿ…™ÿP�ü™ÿì(ÿ…™ÿP�ü™ÿì+€¢�ìÌ/ò~/üÃëø�æüùÿü,Ïú„äÏÿaGü,Ïú„äÏÿa\fa“ñæ_Ä7à¿ÈïÿáfÔ#ÿ&û ?áfÔ#ÿ&û à(£û3 üŸ‹ÿ0úþ#ù¿þGÿ 3þ¡ù3ÿØQÿ 3þ¡ù3ÿØWEÙ˜_äü_ù‡×ñÍø/ò;ÿøYŸõÿÉŸþÂ�øYŸõÿÉŸþ¸ (þÌÂÿ'âÿÌ>¿ˆþoÁ‘ßÿÂÌÿ¨GþLÿöÂÌÿ¨GþLÿöÀQGöfù?þaõüGó~ üŽÿþgýB?ògÿ°£þgýB?ògÿ°®Š?³0¿Éø¿ó¯â?›ð_äwÿð³?êÿ“?ý…ð³?êÿ“?ý…pQý™…þOÅÿ˜}üß‚ÿ#¿ÿ…™ÿP�ü™ÿì(ÿ…™ÿP�ü™ÿì+€¢�ìÌ/ò~/üÃëø�æüùÿü,Ïú„äÏÿaGü,Ïú„äÏÿa\fa“ñæ_Ä7à¿ÈïÿáfÔ#ÿ&û ?áfÔ#ÿ&û à(£û3 üŸ‹ÿ0úþ#ù¿þGÿ 3þ¡ù3ÿØQÿ 3þ¡ù3ÿØWEÙ˜_äü_ù‡×ñÍø/ò;ÿøYŸõÿÉŸþÂ�øYŸõÿÉŸþ¸ (þÌÂÿ'âÿÌ>¿ˆþoÁ‘ßÿÂÌÿ¨GþLÿöHñý¦¡z–×6­jd!QüÍëŸCÀÅy�($AÁ3ʰÎ-(Ùú±Ç0®�Û¿ÉïwÿÏø:-?ãÙ?çEßü{?áüè´ÿ�dü�|¡ôG!Š1KEuœÁEP¢éäçìãþúoñ© Ó,í¥ÅWâqùšŽ ùæ*³æXØd1tÏåœÕ•¸ÌŠ�ŠXàƒÛ=‰ô­äë%fßÞadõI}î K›imäÎÉP£c®Á¬WðŽœöBѧԌAUpoå#ùKmíÓ­ú+žÆú™Ÿ‡àÕd¸y.nbûE¸·�DTn@Xã�zî?ýjŽ? AЕoo<‘p×"ÛrybF$“�»º’~õmÑE�îaÉáM>W�äŸRv�·FͨÎJ‘óppHüjq Û(¶}Ûýžä\¡–á¥%¶•Æ\“Œ1àbµh¢È.Ê®•­§Ëe$²Ã£l† ²÷^Aàþu,Z}¬7³^$ \ÌÉ!$’AÏAì*ÕXE/ì»1os‰–;™IBÈÀ³§ ätíYÇÂ:H¸Škxæ´hÑ“ýf„¾â¤–e!˜ü£©­ê(²ÙKLÓaÒlÎݤhÕ��•÷1,ÅŽO~I«”´b‹J)qF((¥Å”RÑ@ Š\QE&(¥¢˜ E-&(¢Š(´¯!ñ·ü�÷ßöÏÿE­zõy�¿äo¾ÿ¶ú-k³&þ;ôýQÍšzþŒç袊úSÂÛ 5 ±9²k½¤Ä²ÉÏ9 Ÿèk-ŽÑšè4¨CÝ,Çv�,�ü+±‡¹ä`VuŸ,y¼ÑŸ'<ù|Œá(…lýiú„r[\Kk0ýäd« äf®Òµb-,·Z\!Ä+ñqìÇ cÛ·8ôª¾%“þ*KåÝŸÞšˆKš¢�­£zü„é¨Çš÷Õ~¦etÚ=¥¤~½½šx²X,ˆT– 9TìÀgž‚¹šè4Ír =$YËs~¡™·G�TgŒäŒž;qK¦à”;£³â¤Ü»¡-±Ñì-2Ê)oîuÞ6øe°?ÖͶˆ×–7¯j¶ Éf‘MäM ‘]I#*¹çæ°ï.´IôÛKT—PͰp¤ÀŸ6æÏ??fÁkou�{Xc„ Pyg“z’ÌG!~˜®Y£‚TÓ½úßkéú0•5&æÕ­ÓÓ_ÔÎ×âŠ=@ ql-ÂŒC*9!F2ÅIù�Z»€¶º~¤÷�n÷0Û‡¬„¼LY~ðéÐûÕ»í6YZâ;IeˆïMûR)r>tÇn¼Z¼uÇ¿ŽöKmw¹¼Œ,³Â]— ƒ�ñÓÖ´œªFKNûw^~¦qTÜäÞ¿Ÿ—¡JçÃ÷v¶òÈÒ@ÒB¡¦�2D9a�qМRɠ˱C=í”S»ª4M!Ý=7`qúã½^¹Ôu –êXô ȯnÐ$󈜂8'jíã8äÓn.^òínî|1z÷ áæ HB?ÙÛÆ{õü*cˆ©öšü<¼ößÌn�>‹óÿ/C+PÒ®4ÁºØ’¾ïÝgæP2}Ž>•J¶uYµ-\Å4ú=àºPUå[w×?(Û·ŒtϦ+;û?Qÿ e÷þ?øWE*ë•sÉ_ÔÂ¥'Íî'b½cû?Qÿ e÷þ?øQýŸ¨ÿÐ2ûÿŸü+OmOù—ÞG²ŸfW¢¬gê?ô ¾ÿÀgÿ ?³õú_à3ÿ…ÚŸó/¼=”û2½cû?Qÿ e÷þ?øQýŸ¨ÿÐ2ûÿŸü(öÔÿ™}áì§Ù•è«Ùú�ý/¿ðÿÂ�ìíGþ�—ßø ÿáG¶§üËïe>̯EXþÎÔè}ÿ€Ïþgj?ô ¾ÿÀgÿ =µ?æ_x{)öez*Çöv£ÿ@Ëïüð£û;Qÿ e÷þ?øQí©ÿ2ûÃÙO³+ÑV?³µú_à3ÿ…ÙÚ�ý/¿ðÿÂ�mOù—ÞÊ}™^бý�¨ÿÐ2ûÿŸü(þÎÔè}ÿ€Ïþ{j̾ðöSìÊôU�ìíGþ�—ßø ÿáGöv£ÿ@Ëïüð£ÛSþe÷‡²ŸfW¢¬gj?ô ¾ÿÀgÿ ?³µú_à3ÿ…ÚŸó/¼=”û2½cû;Qÿ e÷þ?øQý�¨ÿÐ2ûÿŸü(öÔÿ™}áì§Ù•詤³½‰wËax‹ýæ�€þU°a�sUÆ_ ¸œeдQEQ!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP[šd:}õ¥Ä-dÈðÚ¼Ïte$†8éƒÀÇ^zÖmÁ¬XE£ =´ÉNãºYçi•‡Lü‡�Øf±®¤â¹S¿“ÿ‚�h¸§ï2Ôú]‚¥ÕŠÀÂêÖÍnZãÌ?;aY—1†ã¿––WÚ;ÜYؽ¼«r�CûÒærÀä÷1Ö¢“^Zº›@.¥…m帚5ÇEÇ…ž~•-î¿m4-�ŒÖr[-Ù.r±œòq´dŸ\×:�emýþþ»?Á¹RwÛîÿ�ºüGk:U�–•d-‡™uç<3È�îœÓ¶=ñV.­tÛ(¥ž{E¸H%ŽËj±L°\È䎧9¢¶ñ4× i£<¯¼­pÌî[Í ‰Œx~µBËWX¢šÛ_µÅ$¢}¦M„H3ÎqÈ9äRP­kJúyïwßOøa¹Ò½ã×Ëk#jÃÃV�ëW1_î{q+Ál„�e` Ï€Æ}ȬkíáÒ®.î¡óUåHë¹È$3þÕY´ñf§o¨›—žW‰�Ý Y ©-Ÿ¯sš¯u‹`’nºDÝ5ÈÜPÉ#¶Xg�FiÆïië{måÏOëe)Qµá¥¯¿�¿à—â´ÒfUÜöËg÷’Feb¯ãæÉ9’*޹k+m5½µ¬pJl–Ò»«�FAßÈ#úÔ×úÝ…õÌS)€A³Ëkœ �mPcÎ}»Õ-CRŽîÞÞÖÞÛìöÐn*…÷’ÍŒ’p=jªP«ÍïózuóÕìMISåi[îôò,^ÛYÿai—0Û´RK$‘ÊÛËÛ·œtO§­èV¶Ð Š´Ýt°Ã3ÌYdB9gÏÝ#�N§Ž+>MjÐiÖ¶öú|‘Ëk'›�q¸n%IÊí/­í´©"&�¶;‹…žåZrÞaœ/(9>¦§–µÕ“Ѿ¾zuíëòÜ®jVw¶Ë§—§õç°Û;KGÒ52%ͨVŽu�íÆð¼‡¿'Ö¦°:tšEÝÅÆ•ûSÓš¤/ñ¢¶ž"û×s&ïE*1îM[„åtîµ]zi}™ð�ž›>�zt-XéQµÈ’æxžÎ(Vâw‰³´‰þù *g›áÔ[�ÛrÚÍëk ßü{?áüè´ÿ�dü�ñìÿ‡ó¢Óþ=“ñþuòç¾rTRÑ]g0˜¥ÅP47w*î/à2yúgu\†í¤ž4FêÄç Wç©®~mT“Ë#ou‘Æ®iZ}ýµä-Ê(\Hñ´l ïÎàÜÿÇûÕýwM“UÓ<ˆ$HæIcš2ã*Y0 =1X“xsV¾›Rºº–Ê+‰Í¬�¬E™BÌØl��r:~\så6ú’±rÇÅ6×Wú±y’=>Ê(\Hñ´l ïÎàÜÿÇûÔÚ>¼ºÆ³©[ÂA¶¶ŽBcd|¾ýÙ ƒü# ͛ÚµôÚ•ÕÔ¶Q\Nmd…b,ÈfÃd ƒ‘Óòã�=NÔ`Ö5GP6¡®ã…-Ù˜.ÍùÉ gïóÕ+�ØÛŢТDÅ.(¢€ QŠ( ”´P!(¥¢€ŠZ1@ E¢˜Q@R Z(”RÑ@•A'úÃSÔ¬5ÈtŒ¢Š(+ÄŽcðýÛAÂŽ=Ø ó‘ #ï ô/¾¼>Ëÿ¡Šó”�ÛMkÁ´ªÊ±mç$�NJú ©/`Ûïú#ç3tÝt—oÕ’ ÍBŽC+nVS‚µwžñÔZÝ·j8=£Ô{ú�Ä{y¾öÿžbµm`kZÚ9RÑÝ"îÌ+«†…X4÷I´rà±(ÔN;6“=JšÒ"2«:©s…ãqÆp?iÕÁø—P¸ÿ„÷K°il"ƒÊ%[�­âßo1S妳{|©õ§yLy¢‰ãI$Dij` �êp ü+”Ñtkkêå$¿“ìREäG&¡;¨Ý$aœƒ’OÞÍrš·ˆ%ðþ³¦As¤ê*ê2_E ¼/å#Ã"•ÊÊ@ÙÛæ* ÙhÓ¦ÿ�Œ?î5O\׆£žÚ( »´¸·¹o2Yáãf�؆w€lcÔÀ–Š)q@„¥¢Š(¢Š(¢ŒPE.( £´PŠ(¢€ (¢€ 1E•Vëý}¯ýtþ•nª]ÿÇůýtþ”=†·-ÑE™aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEËë±ÜZjº|¶š�ã_]^ƱÛ?t!órƒŒ wA#ž@ ¢Šâ,¯¯]¬5†½¸-yªÍg%¹|Ä"*( Ð0Ø­ž§œñVÁÐüFáµ[»‹;k .57¹“x�²¾Y¢’Ÿ*€0:t ¾Šà|#âA¨ø›VšçY‚TšÎ˜­c¹W[eÝ&å7\ŽçÓ. ·pø>ÏS[«»k›‹ø.dXßfD× ò6:€ŒÜæ€;š+—ñ„sÛØI}m¨ÞG|BÅco›Q§'åGßÎyÝ�'޵kP�õ-~ÚÅgh¾Él÷/$xÝŽ q�#§šy   ê+„ºÔo4dñ°¼º¹µµ†ÒI˜ÎÑÝ;ûsÉÀhÉ^€ñÇ5µá¹ã–lÚª]DÞFU‘¶¶ì:�Xa°xÏz èh®VÕ¯¢ñ_‰ †î{†PMoòe#‘ŒÜ(èÊ¿•fèšµý¾¥mij—SͧM4ðê!£ÍÌf>¸À¹oËÓè¼¢¸ïËyf–ú„rjVòŒ¼©0û-¢†]ÞbŽXO;OÕG5NÿS¼�ÅRŸµ^—Q·‚+„cöHã!<Ȥ7“¸ƒË ÈäP{EsZ�Åõåþ›¦Ì²ØGsu0v‚žH£BW ¸+¸ààrÆkœŸW¿– x%›RºKW¾ŠTÓØ‹‡ò¥Ù¬F20#»‡œzECCžK­Ožkˆ®e’Ú6y¢û²1Q–Ä×?ãBóMÖ4;«{‡ŽÞšk¸Ã�²DÜ:ªÌÃ=ÅuôW›Ük÷bÿÅ—òOröië-¬1Nb¬’ÆYO8,c'v:]tzÝÅÖ­=�ŽŸçÁi*ÃspÓÚåC«ƒ»�<޼f€6¨®VM5ˆ»þÉ`’Ý5•²ùà´Ó =>UùI$úuNj䴵¹o•{m:C4m?îc»„†]¼&8ÎÞ¼b€:Š+_Ü´öÖvZr]^Ëoö©\�qçhÃàî$çsƒ’+}jÿ[ñ“>Ÿníeý�-êB÷¯nLŠè¿8U9Ú~]§ î'¶}EreÖµ¯|4iîX[꡸·˜îf1å_…]‡wðŒãÖ²‹¦�×>ÖÿÙGOò|Ÿàóü�´îúìùJôj+’´Ö¯´Ý>:;9õ;­>Âoæ’}­’§¡lïsµŽ ¹«ø¹./e[k?2Æ8o¥»iB…†Efn2N§×‘Ü¥¢¸ø5�JÿÅz Oi%�­Å­Ì©Ú7ùƒ.£€Ã=9Æz×a@Q@TW›‹wˆK$[Æ7ÄpËô4-Èi"æûáöŸ4³ê—3,{œZÎyù#ÉßixBæâïÃq=ÕÃË:É*7™þ²<;�‘Ë(À'¹ç©Ý¢¹ -î­¤¶ílçý>Q ºueùâÆB€ Èù~ðùx¬½c^½‡Å¦’’ÝÃm4ö±Ëz¤”³�ЗŸ•™ˆöÎãÒ€=ŠóÝmïÅ:…µ´ZõضӠkt±½(±¹2�ÎA¸�«Ù�Ÿg¡ÝíOº7 rÒÛ£4È¥C¶Ñ’éÎxí@袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š’ïþ=ŸðþtZDz~?΋¿øöÃùÑiÿÉøÿ:ä襢ºÎa(¥¢� Es)=• G"f�½ö‡ú“Î+BÎõ..¡´€r …³Áàçüñ]sÁÎ)¾‡,1Q“HÖ¢°ü_$ñx^í­ç’Þ\Æ«,LC.dQ�GÖ²!ñ ©ª[6¡+ÄÖVW_o‰ Ú^3ܾAÈöjãnÇ]ŽÎŠã¡ñô2Áq µ…Ú(Vãl7k&"ުŰ>VPÀíïëWÅñý®úÚ;BòAq fL ‚ï°‘ÇX6zô£™™ÒÑ\¿3Y˾}=7ý¦=>M“g�¤t,9çžõ �›-*Õ|ëV�n&œFHV w|½rqÓ9ê:š.:j+™¸ñvÍÛR‚Í LŽÌ“ܬL`–lƒÐc޵aa’<8 7€ ÷ëÓÑ@Zn”Ú=ÊڭܳZ€ÆÞ9y0' n¬lò«f ›þB0ÿ¸Õ=\v!î´QLAE´”´Q@b–�…Q@RÐRâŠ(¢Š(¢Š\PQKE%´PQKE%´PU[¿õö¿õÓúUº©wþ¾×þºJO`Eª(¢ °¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®z_ 5ùµ„ÖõHn%UBˆÑTì]Ñ’ žN5ÐÑ@ÑøjÊ-Kí‹%ÆW¸ŽÜ¸ò£•Á "Œ}㹺’9'Õ}‹£\¼±ë:�ÊI#K4W&YY†2ÄFöÇ=€éÅt4P§áÈîšþkb{ø"´˜1ˆUÛvÜ î*î:útëSkÞMzÞ+wÔom!�•öZ˜ÀfV ¤îFèTŒ{æ¶( róÂ_lÔmoÛ^Õ’âÚ*6F„Ž~ó`Æ@cÜŒzp*å¶‘:¦§ç^J³^‰Ðñ¿9ÎÜãqòãwŠéè  }GÃvº�Ü·?hº¶yâÜ}š@¢xÆp­Áé¹¹<õ©-ô k›¹QË«h­^�,G`  g£�yô­J( ÃÂÖÖÖ—böþv³‰á·Iå ±£mÊôÉû£’Iõ&·h¢€ (¢€ ‚öÝîíî§µvÆ&ƒnõç¡{n°:ȉ@7©Èo™IÏéZÕ^âúÎÒH㹺‚”â5’@¥Ï ­AvMâD.ÒP ¾2Þçf�EÄQEbŠ)€b“´PQKE%¸¢€ QEQEÀìi¥œ‘Í:Šã:†ùiéúÑå§§ëN¢€"“Ɇ&’Be™Ž™ÿ ‹ÿ?‹ÿ|·øQâ¦Ûá«Ãì¿ú¯0®9oÒ½<8ˆ9ɽìyXü|ðõ –×Ôõ(uÍyÒîÐÉ!Ú †>œÖŸ–žŸ­xÉufž=Mw>ñ@�“N¿”¾ì3÷ÿÙ>þ‡¿×­b²×J<ôõîF4UgÉWFö:ß-=?Z<´ôýiÕ÷–öÒÁÓ*Ipå"Ryr±ðþåÁ/–žŸ­Zz~´Õž`«*z mNÉÕ~Ó7R´0•;ƒº†$dqÀFü¨¤U¿ƒø¤¨ež‹èÌ2¤�7£l`v°8 úéSUÇbáE´À+Ÿ¼ñçö�ÕŽ‘¤6 Öa~Òæáb Ì7\ƒ¹±ƒØ Žk ®U­µ�ZÕ.4í-umFE�qp±e†ÝÕNÐr2GÉÿ¡­yΗy§&…:_or· *@™Ì¸VÏaÏ&¾‹+ºÃ9%{ü�žÍ–%'ü¿æT.à);@nA#­kÛB,¼gkhxŽñ`Ÿ˜U5×ÓQo³jÐbÔŸÝ\äçµÈk𦱡x†Î$Ò­$eÔúDµ¼y{yÂʇ—1àñó ÷Ö^’ÇPšõ|E¬K$ä4Ë!ƒl„.ÑœD§ÃáKKS¦}žY²»k¹O�î]£t%Û×çÎ}€ÀGö÷VvVóÅjÆòG-­ÃN& †23”O™™‰àsšè+:ÛGµÑï<»?1 •šA |¤Dã!ð‚yÇLšÑ«[÷ Z(¦ ¥¢Š@Dm 7KtaŒÜ*Ä»Fð¤‚W=q�=ªZ)h¢Š(QKEQKŠJ)hÅ¢–ŠJ)h £´b€ QŠ\QŠLQŠ\QŠLRb�ŠLPUyÿãæ×ýÿéVj¼ÿñókÿ]?¥&2ýQR0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®C_ÓíÄ:rØ+mÍuÃÌ™¡·B<Ìäü¨ÀmÛЖéÔ×_XSx?E›V›Thn–òr¦Y#¾�7íè «��éŒP5`2tÍd³ Rë\¸µ�÷¼Aæ_,ÿ²ªŠ@í·5j¬ôŸÜÜéNöºuŒ£QòKJ×…œ—�bOQ¼õÓ&ƒ¦G©¾¢–¡nœ’\3`1,8 G€ÉõªšW„4má&Ó⺉�³7Óºe³’Qœ©'$ò:ó@—„ux£ñV¹}-×Ú'Óູóm¦�"*Ò’ƒzŒ*®Ð Æì9Î.Úiqßj:Â’iójBÎp'’U,ßTÝ€{gŠéõ=ÛPN¸Šk´Š‰-æBŽX¦3��Î3þ×|b§Ôô]?XXÅõ¿›åçiÈ@=FTƒƒ�‘Ð÷ -Ö5û�SÂT:�ÛÕ"²¶º–U´•–êbT¨.ªW|Ç'–*;ïækÚô1fQkobfl‰ÃÍ•R ¬dô#xé[7Z}¥å�±ž6¤*ùjJŒÇAUSF…“TK™Q¨ÈZ]¬ÈBlr0¨#’OzäâÑ"Õ¢ñ5¦ŠÉk¤Ý[-”g$Æ÷¸’Eþò©#©SéZ¾‚/RÕteÓ´ûYmÖšKLQʯ¸.T’C ‡¹àŠ·gà½ÆÙ­¡µ™­Ú1“5ÜÒ¢€AUÜ… ¨ ŒŽ+KMÒlt˜äK(vy�¾Fggw8ÆY˜’xäÐ;§Åm§xãÅÑFlmg•ËÁÌäžséÒ±|+ý•õ´gKKË�&G‚Y$.š„€¡Ê*ÀÈäþð€N+¯¶ð¦‘i«I©ÅÏÚäÈv{Ù�\sÁFr¤ Í€FxÅ,Ñ-£™"²f…­Èi¶ÄÝQ2~E}L¹ÔWP’Ûý$%ÖFPå~îà ŽÙÎ[ø«Y—KŠõ­ìGÚïÛOµA¼a„ΛÜç¦ü£’qÈÏKâ-n8¯íÎ ¯ìn#Žy ‰äŒDé¿Ì¼‘Р$òkxh:`Ò›Lû"›6‘¥òىó™ NAÜI;b¡ÒËì‹lË™æ—YäÆ7o'g=8  Äñ¡¨ÝYØé2iÒLöfî[—b >ͪ ƒœƒœŸ—ƒšÀû]ï‰üI¢ê1¥‚ ÒfºŠ¨a «")e!€$60ÀtÏ®Ge7†4ií­íÚÈ*[)XŒnѲ‚rÃr�H'’ ç¾jÔ:E…½ÔÛ$r[Û›X¶d*DJ�¡zc*½»P/¢Zj:ÿÂ…·Ôî’ækí7ȪÁðÑŒo,Çsç’xÏ¥sgį燗ìçO:~Üü»þÍöœã×ÉŸ^+Ó4Í&ËG¶6ö˜a-¸Gæ3*û($íéÿÂ'¡ÿc�'ì ö?Ú;ÛýfýùÎs×¶qÛ§…i{©iØš\Vat=6¸7E³1*ß*àü¿påŽFON*h<[{{ws4@še¶�o¨ÈdV3‘]¶3„ëÛÐç�ÝGÃú^­:Í{h%�.ÂC²ïOî¶ܼž#š±™e åÅÜp(šâ4ŠS“†DÝ´c Ææè;Ð#mqª^xÃÃWz�³UžÆêX£¶Ý˜ÃNÖ$üݹ}+¹¬{ èÚeÜWV–~\Ы$Mæ»Õ±•PIxjØ Š( ¢¹·ŠîÚKy”´R ¬ÈúŽjZ¯{e¡g%­Á”E&7yS•nÛú]¤V±Gnî¶»Ä>tï)Pãk »F8ÁàP=¦Y #ÇɵK{‹IDLæ_¶d%åÎpÇ\î?7jÆ×®¯Åì ®†f´:¥Ê>b1…Ú;ã<±ì¹õ®ëNðî•¥\›‹;A»<°Ììû�•wµx *Çö]‘’õͺ±¾P·;‰"@h:qÅp:ÖŽ÷Þ3Õ"°Ð´Û÷‡K¶XZâo(ÛäÌ�}=W çÓ¶ðÕÚ_xcK¹ŽifWµŒù“ ;� ØïžµUü¡É,r{€É[ü·³¨hÓ;U€|62~özÖÔEkoF‘C„DA€ª8J’Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( nÿãÙÿçE§ü{'ãüè»ÿ�gü?�ŸñìŸ�ó [bŠ+¨æRÑ@ÐjSÌTÿg̱°ÈbéŸÄg5en�•¢‘KpGLö'Ò¸éïg *dÔŠÐÑn¤–þpsógò5êUÁF0r]:ž*nJ,èo/ °´’êêO.ÆY°N9ÇASÖŒtã©ø^î¶ûD«¶Hã ’H#8÷Æ:å5 *{‹ö0[\ÚØ¼H4ýšlŽÖÄgvuò›w9aÈÇ=«ÉnǤ’g¤$ô �ÜöpÝÛ?™È6Á¡Áæ¸é´Ã'‰åOšóí,É<—Vì¢%òÊå$ÎÒ‡ä<óZ¾ ´ŽËÃp[ ,î#nVHJ� µÓ¨¡=A­ŠŠZ*‰ŠZ((¥¢€ŠZ((¥Å ¢—˜¦E¢€ (¢€ (¢€ (¢€ (¢€; (¨$bàšä:‰èªÛ›ûÇó£sxþt¹¥�gEºÓÌžY™@Œà‚ýEyÇü*ý`t¿²ÇûÏÿÄ×¥\]%­»Ï4…cA–5‹ÿ †ŸÿO÷Èÿô°Xœ](8ÐW^‡��£„œÓ®ìýN?þ~³ÿ?ö_÷Óÿñ5£¡ü9¾°Ömo//mÚ8$m‹q,AÈ�Þºü]§I2FÏ4{ÎÝî0£êsÅnnoïζ¯™ãTyji#* Ÿ5=mæY¢«noïÎ�Íýãù׎zÅš*¶æþñüèÜßÞ?�Cwÿð¸Ôú¯)'Q‡$Ÿ‘¿¥XªD°¥¢Šb (®.-*ËÄž%ñÖ�Ìl¥ŽhšFQf%më‚0X–ùºñŽÔ íh¯=ðÿˆ?Ôníôô±°UºšÕî'?ežåAY=ª"Áec¸ð:æ•Àô,R× qâ¿L÷?c±³¶û>•£,W« ‘Y·î�ÜÆN1èsÆî£i§x—ÂÑÜߨÅ*ÕõÐuíVKVº†Ú ”šÐ0FF—nbH ¯¯ ö¤ñέ©ê~ñL‰g�§¯ÙæóCdbªÄ® è9ç¥Ñék…Ôïþ=ŸðþtZDz~?΋¿øöÃùÑiÿÉøÿ:娢Šê9‚Š( ŠÄ†öévÉqn>dòôu]†õ¥¸�‘º±9•ÀÁ9êkyaçL#ˆ„´/QYšþ³ƒ¤K$m(B"ƒÉ'Ô�­eÍã�>+»¸D7L°[ ÃiFâw|¤lùFrxçØ×=Ñ½ŽžŠ¥£êqkd7±# ‘A*èË´àà29ê85z˜„¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)hÅ0Š\QŠJ(ÅQŠ( ˜¥¢€–Š(¯¨$ÿXjz‚Oõ†¹¡”QEdxœíðíÙö_ýWœ Wæ½ŧo…ïO²èk^wq� K¿1„‹p‘Žx«è+èr”½ƒoù¿ÈùÜÝ7][ùV'˜¥†s¶º¯ ø‹Ê–-6勯ä$/Ô©ì§ÛÓÓéÓ�š+›xá’a$i0Ý2�{VšÅ§�aµ‰‰Ž;ÄUä�¸Wf&Œ*ÓqzèßÜpágR�E8éª_yê5—â-7M¿K+™ÊÌÊ€¤í6 úìaÆy©^iãH$»ø‡¡­©¹™¢Ú× Åû° dÆå9<;OEãŠù#ìÇLñn…¬jXØêv³\FØ“+yƒhmɃÈÁô Ôš§‰4½öÚÒòãl× ¯÷ßû«œ žäW�ø)'{ÿ ÛImqË>ÿíç ÂÊFWd\ñÁàð29¬ÝOJ‹KÖuY wfÕoü•º’Wa¼Â¹Ý!¼‹’†Hþ,dçØd êr m‚? µ\W€,ÏAÒ4¸‹ÌµÌ±ÌÎ~q�• HU8'ŽA®Ö©Š)i€VN§á�Y¸ÖBIBl.®ÈYºÛHÜ=ŽEkRÒ˜Ô|!m©øŠÎæx£uµƒÛ,1Hñ2±t+�˜ùv©{ô­ Ÿ h×pZÂöJ‰h› 0;Dѯ÷C!3Š×¢€3¿°tÝÓ·Ù¹žÕlå;Ûæ‰s…ëÇÞ<ŽyëVⳂ²Ž<[¤BLž ž½*z(8hZh°°±ßèÖÛ&öýÙNç98÷Í6i7QÞ$öjëy2Ï6]²d(`sò�}ÜV¥ £m¤YZi²iñFÿf�0uy]Ù· ³ß­;û&Äè뤵²=‚ ¾XlsÉàzÕÚ(/ h�é÷v+d Àþd®ï rKqÛž;TZ‡ƒ4 VI$½°óZXÄrþúEó€a¸�ОG­oRÒ&çÃzUÞ¦5mH»s$rºoÛ÷w 6=Á«–Zu®œ³­¤^Xžg¸“æ'tŽrÇ“ÜöéV¨  8ü#£C©¾¡71Ü<æá¶Þ̤'$”ß´óÛ©l|/¢éׯòÒÅ#› æb±îûÛ�©žû@­z)�‚¾ ðòCq éÃÉ�v´~kíQ¸6nÂ|À—�NOhQÙÞZ‹ÅxPÜn™Ùœ§Ý;‹g#ÔÖæ)qH qá}Ⱥ…¬üĺHÒa,ŽåÄc ËA£œóÖ’? hÑXµšÙþåæIßt®Îò!Yœ�ÇGSÛ+fŠ«�km}u{[n.öyϸ�ÛFŒà`zUšZ((¥¢€©^ÿ®µÿ®ŸÒ¯b©_®µÿ®ŸÒ€'¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*»_Ù¥êÙ5Üé†å€È7‘ê9«Èëk§Þë–ÚU’[¥âÝÃ}{:€¦%BÉþûí ÷rz@:u½´{dz[˜ZésB$Ôz•ê%½ý�ÔÒÃowÒÂq"G fCîOƸk(¦”ßí_íû¯7þzctÛ³ßo—·¯ÛíW {yµÉ/ô8^ßJ³šÖàÚ‚êV*v/Aµvc=2ÇÐÐ`—Vò\Ël“ÄÓĤ‰\@z:ŒàãéPWOUf{ÈcQ7‘™ 2d £=NN8ïÅp^»—Gñ»u¨é÷°ÌtØn¯fŸËùœ4Äœ+¶*�œÁÇÑ×l#²ð>ž·iÛVòÖWbD¯sHFy,h°žþÎÖx ¸»‚f8Ž9$ Î}'ŸÂ–{¸-¤‚9¤Ó¹HÆÌB–?NœûW3âñ§ÞDúDÛ¶«ªD#`nŠy•›°\œz±Uéã·Ôuù’è$–66EdópQš_½»>ˆƒð’€5ío¬ï£i-. ¸Db¬ÐÈ)ô$w¢ÖúÎù]¬î ¸Tm¬a�8SèqÐר2ßi^#Ö´ÁVsÚEm ©Ø%‰¼ÉH…*ìÇEÏq]‡nŸû[PÓÞ==ͼP¸¹±‡ËB­¿‘¹¹]¹ëч€7b¼µžâ[x®a’xqæÆŽ &s�èÎ_CEµõ¥á�ZÝA9‰¶È"�6ÃèqÐ×/m³xËÄÐBñÛùú}¶^<™òß^ù¬½2;»}bÖ¸ÒìãµÑeŽK«)<ÄUÊyR8`èìÏF俀;©u (.£µšòÞ;‰ÕÄò€ïôäÔëºD€ÓåÕlc½,ª-žá„¶06ç99ú×+ã¶m)æŽïNœ[´/~ˆ‹ö™È(Ê�ùXŒ``ç#u§ê4­V}[NÕ#¹–ïS‚)¬JFÙc²&ãxeUÝ×"€;+›«{8{©â‚ûÒJáT}I⣟P²¶‚9ç¼·Š $’ª«Óžs\Ýû#k:)¼¿ŠòÔjq 9<·ÙcŒ¨Ü9ç>õ‹¡}�ûI?´|¯ìß'Qû��žWÚyÆxÆÍ¸ÿgÚ€=¢’êÞá‚YâI§$E8 &NÑÔàsÅexCíð†èßjßçýŽ-Ûþ÷Ý}ëÆðJú¶‹sn®l–âî%^®P!+ÿ]Ëÿ ®MBÊ)&ŽKËtxI*´ Ôôfàpy>•f¼¢[Éãÿ„«]ˆ…š÷FŽö/1†IV<«>â¡ Ž¤×c£w{âøŸSŽÂ ˆá[bˆLêÈ­¸–ç±Q·w¿J騮 oZþ‹P—RAö½I¬Uš l‚wO0ú¶(Ï##®f}[YdÔ,-µî$´»Ž!t¢$–T1ïd@ß»2ƒ�AƒØÐmU®u +9 †êîd¸}�¤’27¢ƒÔý+•�]¹Ôîl-mµ�±ÀöOrnå�Ìë&¸o”çv:ä`�Y–Rê:þ¿¤j--¤ÓhsI¶�®|ÈÆWz“†Èaß�Û9ô+‹ˆm-Þâæhá†1¹ä‘‚ª�RO�´AöŸ³ùÑùû<Ï+pÝ·8ÝŽ¸Ï®?ºiÔ~Áa-ëÝ-Þž#Â$4`l@éï“ï\©Ö¦ûøÈFÞa¶þËëÏü{ïÇþ|”ëP\CuOo,sC"†I#`ÊÃÔÁ%pÒÝ^iB}&ßR‡LƒFÒá’?25apv°;·Ø˃“×¥Im®k·÷“ïh!´Ó-¯�ˆ‰K¼Ž²â2É�\÷ä°{ˆ#¸ŽÝæ�f”3G`Âã$øÈÏÔTµÁi·Ýø¯ÃWW¼Wïqas6ØÑbÜ"8\s·ÓvOk½ Š( šî‘#<ލŠ2YŽêŽt†HY.6‰†d©ù [S°K|×ÖËfFEÁ•Dd½œTÉÎ7M—ºÎ[ÓŽy¬=&8o|Y¬^ùj‰K0 mÊ,’îK¨ÿ€ åõÈïÛÄÚåÁD—D´šÖ{ûq’ó Œdqü*>r?‹ êmF·ž('Õ¬"šUorŠÎ§¡žAõ­µçúœW7þ*Ö……ö™ éVÛ¤¼„Ȭ¤Í‚¤0ŽäÕÔøZt¹ð¦“,qImiÔ‘·0@=þ½è^Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  .ÿãÙÿçE§ü{'ãüè»ÿ�gü?�ŸñìŸ�ó ^Š+—¿ñT‘Ü´v‘FȧäÉÝôÁèPÃÔ¬ípÕ­ Jò:Š+�ÿ„¶ÿþxÛß-þ4Â[ÿ–�í—ûéÿ|ñ¥Ä¿ßOûäÿ�>Šf%þúß'ühÛ/÷Óþù?ãRQ@ Ä¿ßOûàÿ�—ûéÿ|Ÿñ§Ñ@ Ä¿ßOûäÿ�eþúß'üjJ(=²ÿ}?ïƒþ4¸—ûéÿ|ñ§Ñ@ Ä¿ßOûàÿ�—ûéÿ|Ÿñ©1EG‰¾Ÿ÷Éÿ6Ëýôÿ¾OøÔ”P{eþúßühÛ/÷Óþø?ãRQ@í—ûéÿ|Ÿñ£ÿ}?ï“þ5%%þúß'üj¥æá-®â ó{ v«õFûýu§ýtþ”=QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY“xoB¹»k¹ô]:[–mÆgµFr}wœÖ�\XÙ‹§º°}¦EØóyc{/¡=Höª–žдû•¹²Ñtëk„ÎÙaµDeÈÁÁ= iÑ@¯´«[ô�H›C™$`‘Q÷cŽW9ôcŒf‹ýKÕLgQÓlï yØn Y6ç®7Ž‚®Ñ@Sx_Ã÷ ú™)�i¾Ò6Ú£¢ŒŽô© Ñ¬`‚î!$†íËMˆ¥XmÆÐª£‚¯Ñ@ö:�¦JÒØi6’:ìg‚Ù#%} §гkeicŠÎÚxË) a'©ÀïSÑ@°x{E¶½ûm¾�§Åw’Þ|vȲdä¸ ó“Ÿ­X‡L°·‚X ±¶Š³æÆ‘*«ç®à9÷«TPWÓ4ù."¸{fšR4JYû'…/ö}—Û~Ûö;µã”¾f=7c5fŠ­&�e-¼¶òYÛ¼±y"h”«±9$Œ`œÑ>ŸespOgo,1�R9"VU#¦b¬Ñ@FÐDóG3D�,`„r ²ƒ×¶p*J(¼ú}•É”ÜZ[ÊfŒE)’0ÛÐB¶G#$ðxäÒK§Ù\]Es5�¼—«•âRéô$dUš(²´KVµ[XVÝ·ˆFÄ–ÈéÉ$ŸRj#¤é­b,NŸhlÇKs ùcþŒUÊ(¬úe…ͼv÷6ÒÁ8ä‰YS0À©~ÍÚãÉ�ÎT1¬›FंT¸È{ –Š‚ÚÊÖÈ8µ¶†#—qaw1êN:Ÿz�û/Oû'Ù>Ãkömþg“ä®Íû·nÆ1�Üçך·EW¹°³¼xžêÒ Þ#º6–0ŨÈâ¤[xâK„†5šEUy€Ì8õ dãêjJ(¤V�k1šÞÂÖI$¼pª¶OS�;Õº( Š( ¡»³µ¿¶{kËhnmß♫`äd šŠÎ‹Ãú,’ZE¤XGm#nxRÙ1é’¸Á5mlíSÉÙm ùˆp€y`Œ¾œzTÔPq[ÁJÐÃfWó$( ol¸ã©À>Â�[@²K"Ãy±æ°Q—ÀÀÜ{ñÇ5-˜þÐåx^MNw…q3Z¡1¨è«Çz ÓµPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP—ñìÿ‡ó¢Óþ=“ñþt]ÿdzþ΋OøöOÇùÐ1^]^¥Šó+›y-.^ T«¡Ç×Þ¾‹(jó^Ÿ©âf)Ú/ÔŠŠ(¯hòÍï#H‚4[3¶1“3 ûõÅCŸö#%´&7w“žØæ²Þg“¶:dR\Çåñ·ÐW4h4Ó»ûÍ\ÓVý ?EΦ֒Æ�öˆd� (;[i*G¾@®†.É#Ódkx�ØUšô2ƒ¼˜¼Ñ»×œŠãì½†êy�¸uÏBAÏ>ÕþÜê\Eÿõ¿)ùzýÞxà‘ߊŠôjNwƒÒßð?'÷šÑ«N1´–¿ÓüѾ±YÅk§¨ô´²{ óîT³Ü®>lôª1$Z"G¦[ØM"@~Ñ©þ‘¿œºžàuÀ=ºV åô·«l$Tg„B›AåA'Ÿ~jäZýÄ0ŽÚÍfùBåbÄ�qŽ£ŒãŒã5?WšW[ßåÔ¯oìöüLª(¢»Ž0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®£ÁßòûÿÿÙ«—®»Â6òGmq;© )P¹ïŒóú×bÒÃÊþ_™ÕƒMÖ_×CÔ(¢ŠùéBŠ(  ÷בéöRÝJ HÆHOa\Ïü'Qσßßþµjx°íðÅéö_ý W˜ N>æ}ë×Ëðt«Srš¾§‹™c+Qª£MÛC½‹ÇVÆhÖkGŽ6l3‡Ý·ß溨äIcY#et` ²œ‚=ExÆòX‡•ÒøWÄÙ^ŧHí§p¨XØž£Û=GãõÓ–ÅCš’ØÏšMÏ’·^§¢QEaj¾*µÑõ›m6{[©$¸ŒÊ�~gʹÜv®[�—·;¸Î x‡¼nÑ\ž‰ã»=júÒÑ,ï"{›s.ZÚmªwcŠ�ö³ŽÝi¯ñCû«sݬÉc*F6\¡óCløè»ŸnO÷Mt_òƒýÆ©+: cLÕï!“NÔ-nÐ+©h%WŒdp}Çæ+Fš ZJZb ûñM­¶«6ŸŽ¡vöû>Ó%¬bÁ¸dç$àƒòƒÅnWât¸MZæçFÓu›mw°Ü[GºÚï`KÉ\F[” ï©kÌ�«Éã)g¾iâº:‚ËouŸ$ @ „�Q1•e+ÜžsOÑmï��ôÛÔÑî¬<ÉnRûý@¡J±]ò³&X àRÓjƒjÐ&¿ŽRO>KWº�·j²©sœ°í^s§xi¬¼+áù®t›Éafÿ‰Å²£™¤P®" Ÿx¢± öàâµÇ‡¬5�i‰&�uŽšTê±NŽ�X̘V猌�§Øàc€¿Zՠд{�Nå%xmÓ{¬@#8ã$þµ[KñZŽ ú|¶7¶‹œ!»EãÎ )V`pHsÈ®^{=Rçà ´šÚíõb¨ahØÊH`1·ÎTÕt-v�z¦Ô/¯fµ‹ìWî2~Ïæ)š—j‡8'±`G#ÝkZºèÐZJЙ~Ñy ¨±´Èáw~Î+J¼²ÛF»ƒJ3[ÃtÖéªXÜ4Ó%¶�#gvlŒgÝÏ5-í�å׌a¸Mæ Uòç‘mda%±K4Ŷ”`AØ¿Jô[ûmJÔ\ÙËæÂ]Ð6Ò>db¬9ôe#ð«Uäø~êÓÃKai£ÍnðjNu0,YÅÌ;å1`_9@)·uÆ+A4‰à²Ñ×P¶¿Ô´5žåå´ŽÆHÌe¶ù@ÂY˜ ;ñž›‡Ü[øŠÒãC¾Õ–)„m:Ȥ ÇÉ,ã�§þUVËÅ2^Ú5Òø{YŽ$Mxâ&PHÀP²œóެ]O¹‡á–±f,.`•þßäÛIó0Ìû9' ŒuϽEá¹m>Ï·ö¥ÍÜö–á­æžYŠ�ÊHTbvãžíí@v›«®£¨j¶‚‡O¸X ÎüƯŸo½�´ëÍuÍ/Y‘üI­½ÀŽ]RÚâ]°³‰í¼¥V .ÿ™yPÀàc¸ÍVÐÙ|;È·ó@/^xm±¥'îÀØÐ/°’H9lž8 T¢³´1Ð,>Ógö)¼„ßm¿w”q÷rkF€ (¢€ (¢€ (¢€ «uÿ¿õÓúUª«uÿ¿õÓúPÚ(¢�Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š+1üC¥G©�9ï\—ãkmFBÆÐÄ…'4§Eg&½¦Iª6š—jn”�Wi°*KÉäStÿéZ­Ë[Ù^,²„óÚÀ:tÜ„€y®G"€4èª6ÚÅ…æ©y¦Ûܬ—–A Äjî÷‚W'¦NV_iVñ4“Ü4j&’ù 1œ9rv©È$ð1ÍlQY·úþ—¦¬-uv£ÎRñˆÕ¤,ƒl(?(ÈùºsÖ¤¾Õìôán×mŽrÄI‘µP¹v$ð /_R(õ•oâM"æÞæxïK` ÂDde¡ÚÀ8 sÚ§Óu{^9Ê3Êm’###¡ÆpÊÀÁ‘@¨¬Û}K»¾–Ê Äiãݸ`€vœ6Œ6ÓÁÁ8ïK¦ëºf®Î¶7BRªYw)èË�7)þðÈ÷  +"÷ÄÚ]†§ý�<—ïb¹Hm&”*±!I(¤ •=Oj–]K‡Tl—`]TÛ±Š†a•RØÚ‚0 ÉÍiQYú¶µc¢A ×òH‹4¢Äp¼¬ï‚Ø €žŠONÕ¾'Ò`³·ºšycK�Æ5{iD„)ÃÝÀä€G­kÑLŠXç…&…ÖH¤PÈêrAÒ«]j¶VWöVW3ˆî/Y–Ý “¼¨ÜFq�Ç®(å›.¿¦Au}j÷_¿±‰f¹EFc6pxô<kK¨ÍQEQTnõ{++û[žCsuŸ*8âw8Í´ª ¸às@¨ªwµ…®‘&­%ÊâóŒñæEÙŒîs‘�JOíkí_ìÏ´§Û~Ïö¯+œù[¶îÏLgŠ»EW°¾·Ôì-ï­$ó-®#DûJîR2UŠ(ªÒêÐjÖ2I‹›”w‰6Ÿ˜&ÝÜôÜ:úÕš(¢Š(¢¢¹¹†ÒÚK‰Ü$Q�Ìǰ  h¬Áâ,èÐêÂë6ScÊq!'*ãq'Ð ÕË;ÛkûD»µ™e�Á*ãØàý ‚;b€'¢³´í{LÕ¥x¬nÖWUÝ÷Yw.q¹IrçºäRÏ­é¶Âý§ºXÅ€SrYOɸdvç#Ó>�hBŠÄ»ñf�ewö[‰îQ ÎÀZLÂ4l๠„û§ïc¡­˜¤I¢IbuxÝC+)È`zhÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECwÿÏø:-?ãÙ?çEßü{?áüè´ÿ�dü�s8¨¦µ·¸ÇŸRã¦ô �Φ¢º“iÝÍ'¹Mtí9Ð:YÚ²°È"% �Ê—û.Ãþ|m¿ïÒÿ…fhK¶úïû<ÿĘÿ«îù¹ù¼¯ö?LçVÜ¡Ú'XÜ$…HV#!OcŽõ^Ö}Ù>Î=Žvm[ÃÐê3Xý€Ë6ß÷é­QG´Ÿv‘ìUþ̰ÿŸoûô¿áGöe‡üøÛߥÿ µEÒ}ØrG±Wû2Ãþ|m¿ïÒÿ…Ù–óãmÿ~—ü*Õ{I÷aÉÅQ¦X‘emÿ~—ü*ÈÀ.(Å')Kv5¶GYEWÖQEaxÈíð�ñöOý kÍ#XO‡¥œ©2‹¤@î ±Çé^‘ヷÁÚ�öOý kÌ4Ï ;LšŠ7¸iVH¤~DD3Žçž+èò¨Éᛂ»æÿ#ç³G¬®g§/ù’Þi·vE5ÌN‰'AÚzá½9Á­X­ü{ ®ÈÒõQÐ|°¬µË‹[‰Yâ)¿×Å)$J=ýýj»i¨®£ã«K¤VkØØ)9ÇÌ+Ñ�:¶|ÛYþ‡� SºåÞèöšóˆ¯}¦ßC«ØA «À’‘yµZY¤·Gû¨8=K8¯H¬ÝCAÓuYüÛës;y/Ö‘ö…`U°¹ÆHf±œf¾,û#Ï<7ªÅã ;Y ú[­ì–[n#² #žpBa·oÃqòã®j¯… “Z]A¬i÷Wš~�æZÇño (Ì7¶ãÉ$ ôô‹_ ø~Æò Ë=O¶¹€“°[¬l2¥O*x'­\].Átßìå´‰lü¯'É …ÙŒmúb€9}ÜK¯ê×3@±®Éu߸£-½º•Èàà†ö®¦¨Ã¦YiSZÛX[Go#íŽ1�’rO×=êõ4&–Š)ˆZ´ )i)iQE´QE´”´QE-QE (¢�…b–€—Q@‚Š( ŒQE%Uºÿ�‹_úéý*ÝTºÿ�‹_úéý(vŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¸_ø“E¾ñ%·‡¥Ô­-ÖÒæ+›·–@¤º°hâLõbÁIôMwTPžX°S¦èìÔí5»‹©Ô¯)yŸÍ'û¬® û±ëN´ñ%‡‰|I-Þ�¨X5Õ¥¬Öºe¼“ÓÈØ/!QÈAå¨d€Ç¦+Ðh 3ЛPðÖ¹­½í„ ÒašwŽìÊóI¾v þ­rΟãc9ãX,>ÔôÙuGýÀÒ¤�§+�Ó—WqÇñ9ɾÓ]}ݤЈn|aÒM»ˆù•ƒ/Op8è{ÔôåÐê~´·’ïQŸN¸]Ú;eXO6hüÂaù”ó–Lªàœðx®ÆÔ—U¹Ôõ3év “o–9$IAú*Åùšéª{H-LÆÚf�Ë!É;˜àgŸ`á@N�â}TÔuOhE¾H#†;xO™,6èç:®H%¤$ä|£ïW|þf¥­¼wo©@ï.¦ê™¶�SåHLTóz‚k¯¢€<ßO‰/­ü=¢±“íV r5% CF†)cbxþ&u#רÎ)tàn5™µ¿´éšn�q—––ÍB­åíË ±8Æ0>Qž}ŠóÿM§À×7ZN¡~¾!h!KX·È>ÔTe2„"�çqä ž„©¨ÈËâ;¬M¶gÕíÝ´o,“rËun£V$|¿»ó“^—Eqú‰ðìÖñ�CU¿C¨O"Ü4²GäÌ+'˜Ú ;ú\óÝ^KŸ=î«&”ëâZêwîi£i@�2QQ»1ÀÇzõ(+Ãÿ„WJ flˆ´Œ}˜ç1a@ÛÏ?Ÿ5ƒãk)oumì˺òî.m†q™còÙF}ÈÚ}‰®ÎŠò[¶½²‹ÅZ™ó¬õ½ ;ÖÁ1É4³ìRG!•/üº‘z­âÛ¸µ}JîÒXî#]:Ú9hŠ)Îe˃œàÝk±¢€<âÚmDxY57ÔõjrAu(�·Ùí–åÔ•¸P u“žKéßL¿ú䫤EyÙnîgt§•—�í »¤œò ó^�Eyûê¢äém©^êZ^‘%“ºHfey'`�r~^T9ÁÆ*¶Ÿcw«øƒGŸU–þ;ùtšM“¼ O™‚UHÚHl‘ëŽàcÒh 'Á6W¿ ãÓyeim>ÏwÓ3˜d1…dðîŒé\�¾¿>_ˆÓH:^1ócìþ^?ð$~Uì´PŸj®t«©´û�FóO¶³Ó¡])mIQ4¡X7ýc Ør0zsRÙË­^댗ܭ힓ip¶1ÊV#rË.à@ê7(è{ç»Ê(Î4)í®¼YáÙ¡Ôï/® •É»ûC±òå",�¤asòŒc+Ñ袀 (¢€ ¯{}i¦ÙÉw}sµ´xß,¬W'$û�*ÅæZ¥e'†ü%|—QKi¦Ý?ÛYp€´Rª³ã§,½znÍt~¸¶ûðÎ^4ÕonäµMŒ ÆX’ÃŽ22Ã8Îêꨠ?ðÔ2Kâ "+]R=BÇJ±–2;S–§ËTI '/…$€y"ªêúv¡?‹uÍRÞC4\Ö·GN¹eŒg>árT{½*ŠóOQÓï|Y¨J¾)m* Ý&Õ¡h„dÜ©3t ¤œÑpyúWqáƒ3xWJóí¤¢Ö0mÀ G… G�"µ¨ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( nÿãÙÿçE§ü{'ãüè»ÿ�gü?�ŸñìŸ�ó jŠZ+¤çª¨¡UB¨ )j½…ý¾£mçÛ± 1GVYuV�G¥Y  ðŽ”ñêÇ'›}¼K6ì¸ň\Œ“ééœÔמ±»…2Û‹™’k�&+Ð0 õã$`œu¬�KÇ[_2Y[}®ÒÙK^J$D#¨0ì»þa‚FGa“ZZ·ˆ³tX/�¥Àšm„[4,Î�Ø.ãÏ:SCMÓ¡ÒìÅ´Ùw³³ÈrÎÌؓܒMW¹Ðlnnr†6xf…ü¼(a.ÝÌxå¾AÍaKãyKù–ÚMä°çeŤٔ�¾Vf|·cŒÆëøºÆzêÂiãÛ ¼o¶$i%ó 0eÚ¹<§§æ‹ ³-éÞ²Ó/"º‚[Ç’8 ºù÷/( Jž�º:`VÅs:oŒ ¿ðµÎ¦¨ZîÒÈ]\[ìxÆv³ AÚyª�ãYcb’®ƒŠpÈúÐ §Ð�+ƒEÐY³±¢³ôMIõm-nå€[ÉæIF²o£²6~îzV†*‰ 1E˜¢–ŠJ)h ¢–ŠJ)h £´S1KŠ( Š( Š( Š1F(«¤,R)j ?Öå:I·/÷‡çFåþðüêµ·Ö–Ú�”ÖwJWk.q\Ÿü+=?ëï?ïêÿñ5Ðê7ƒOÓæº+»Ë.z’p?�rŸð™Þϼ‘ÿô0kÊý„¬½O;<$d•uwèZÿ…g Ï{Ïûú¿üM\Ó<¡éWñ^Äg’XŽäÈ× Ë�Æ· 4~u´F"Ø}™ �lšë­î!»·Ià�5Šâö.¬ÚÑ[íLï >Tð`¼gËÏ t ¦”Wuñ: [{f–Ƨ’Ð^I ÷ÉXØ��w�ÊŒíã5©â]Q·Óô+½(¥Kû¸Tù²lÜŽ2î¶7§¨÷ ®Šän¼k-¨¼¸:K>�§J°_ܬã1É…-±q—UÜ2xï€kGľ"m,öÚ¤¿i�§›4þL1àgç“z9=èzŠä®ü_åôº¹6‘]Ü0¼Uº±Ú¿)ÜFÓŒp}Gf¯ãÈt»{[Õ´ŠK àŠã{]¢Jc|r±`–À œâ€;K\òxŽâçTº†ÏLótû)¼‹«Ç¸ ±À¶¦ ` Œœ�lÖo‡¾!ÙxƒW‚Ê8¡EºG{r—i$˜^q$c˜É�“Ó±¤gEP0¥¤¥ Š( Š( Š( Š­¨[Íuc,6÷oi1¤è(Àäpx#ŽGqš§áýV]_Lóæ‰RD‘¢gŒæ)JœŒ÷CÛñ³@µRì�qi“�ÞJ·T¯ÿÖÚ×_é@‹Û—ûÃó£rÿx~uZŠYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP�Ëýáùѹ¼?:­EYÜ¿Þ�—ûÃóªÔP—ñìÿ‡ó¢Óþ=“ñþt]ÿdzþ΋OøöOÇùÐ7E-®“œÇÓ,æ}JãVž#l×#[q×h<4˜à¿òsZç§\RâŒRÊõÛhnux’[ùu&lSir³^`ŒîD %Î3ÆN:㮦³m­Aá›qr×wº›Ü¼�±‡hÔÄè²(äœ “Šîm¬­l�¥­´0!þ£ ?J›¬UÏ–[ø¥‘ã–kx  µ’âã#o›�ÛfÀ#ÉÇË�ó8Ñkó\Eª³[>×6V{P9ß+î›b/s—Ûœž€žk¸—GÓ' &Ó­$Û›| rrNNG\±?‰õ©M�£]-ѵ„Ü ²˜Æå8õy¿3K”9�:ºÓ&µ:×ÙfW¶²Ð¾Å>†Ä AÇs�?5xÛêÓÏvÐÁ«ï[È|›…¾ò H‚ÄXl2 Œoè¤sùv°é–ö²ZÁcm¼¹B‘*£ä`䃑SI3[´Ä� .Æ�”+èGLSå ˜þ è$ƒ�nî¿ô¢Jܨííáµ� ·†8aA…Ž5 «ô¥IMŠ(¦ ¢Š(£Q@(ÅPŠ1F(ÅQŠ\PQKŠ1@ E-”RÑ@ E-ÔÔ¬5=A'úÃ\ÇHÊ(¢€1üRvønðû/þ„+Í„§îþ8¯FñqÛákÓìŸúן۩›Ã’yp™%kØÑvŒ“”~}U¦·üßä|îmlB_ÝýY˜wvñÛ5·á½fk-RdÃAq FBÜxÜ=óü±•y£Ïgoçf9¶³¬O¸ÂÞ�þ=3‘W%*ž?HÑB¨½@é÷…wUTêÁÇugøÜ4c:Uöw_‰éõÍj¾)—Oñ5¶�ocöÙ&ˆÊVTH˜ H!°2@yç ÓÒ×�üJñnâºXç0,$‰ Ÿeœ—cÔmÞ>ÕòØžñ~£«_XÛÜh—1$ö¦f”y{AÝ�ßë ÛÛ¦síPŸˆ1Igy5½´îìètäk9�¹‰¶ ê �ܳ/8Ëø_Ty¼mgzŒR¡¿‘<¸µ¹î³ØË`#ðÉ¿'yä6GAš—¶Q_Ùi—/~¦ÏE&;»»o*;)>OõncPËŒç%²^h¿Óõ«=_RůÚCº9{y"dl+`‡ŽO¾kj¸ÿ É%Ö«¨_yöò¥ÍËðÈì°Â„«wPÈâ» hLZQIKLVDÞÓ.onn®¢iÚââ’’7Ê’DB¸ÁíÎsŸ§®)iÏ¿ƒì!åÜ^Ap—“^Es¨’'”’á~\m9#1õ¨ï<¤ÞèH‘®–/=®u—÷ÒHÙÞÌÄs¸3ÇC�ŠéE‹}á»{»Õ¼·¼¼Óî<¡ µœ�<ÈÆv«ã'FzÕ�_EƒY±ŠÚi§‰¡•&ŠxX ×£AúƒÖ´ih›ŸÁZuÌÒ4·7Æ †I.í„ EtêÞãNÕΊÒÕôq«Ä±›ûÛ@•¾Ìê«u H?–GjÒ R‡‡ÀÛµ½F=õž�lmm"[{…z pÈÝ[€Wž'­hj>Ó5µ º¿µ·º†8f·¶•UcN ’0;g ×SEbŸ [ Z[è//­Öy·°Ê38e”‚y‚Ç9§i‹E� mBý­QJEg,¡¢‰{ãv02N+fŠQE–Š(¢Š(¢Š(¢Š(½õ”Z…œ–“ïòdÀpŒT°ÎHÈìzbjhãH£XãED@UF �EJÿým§ýuþ•v©_ÿ­´ÿ®¿Ò€%¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬‹ŸÛÙß­´ö·‰L°}©¢ÄBFÆÕÉ99$ €FxÍk׬ê†÷Ķúlúv¨ºu”É;Ë„²-Ä å2©á‰î@3@Qx–Ê]HYª\ižÞ;’Ÿº’T²)Îr6·l|¤M-�ˆmïu²6·–ÒËMÚbÙç"� QœŒn^ÏJç¬ì¯b6:;Y\gªÍy%Ï–|³y]J·ñ1Þ«´sÖ’ÎþëÄÝÍÏÙu-:èA-®šnté‚B-+±w1UÀÏ@REtšˆlu=kQÒí¼ÆšÀ'œåFÂ[pœòARxõª­â«tZ\Ìí$Â8í×{4q6Ç�ƒŒ.î;“Æ3šæôû-cÂÚ†«,Ÿf–t¸#…¢¶tK¾]Š�²Û›æ<çxéß]­%ðÝþŸ—¬Cª5ÌB ‹k‹f 4 ®FAà�A†¹½ T’æ}GWºÒua¨\F‹ösg$~L ØTVp¡œof89<ã8sÂ6²[]ê­‘éÒ¼o ߆óÝö�ä—ùÊð€nç®8Å_·ñFŸqtbÛþ äeq‚~ç ‘LÓ¼1%Ö­¥6·¦‹‰×E–9¦�<Ì>ô ¬ý ,=þjë§×l¢ðÜšô~eÅŠÛ b_™ãÆì€ØíëŠoü$6Û¿Ùßícûnì|ž^ìuõï�JÈðf“o‚#ÒßM{)LMâ<?2M�]º|ùþðÎk“:gˆO„WRûÏöÇ™ö3”wˆ¾Ïö}ØÆvùŸ¼Ï§4éºf¡«¥ZjÇ$q]D³"Ê`¬22<àúÕºá5­(ÅsÎ�{{n,c‡Kû2’!•C†éþ­�Éóœ ¼S­4MFm[Pžö3&£•h-î(Ý”3/bCmç¨Þ€:Ë�N}^ËMt�Íw²#6�ÜçŸöÆ?»^ éɈô9íô{ûWŠÎt¾šâ&¦"?¼ÇïC|Ý­zQEÄÂÞÝæ1É&Á�‘.æ?AÞ¥¨/nÒÆÑîdŽy1•‚•ÎN8Už½…f'‰ìåÐìµHá¹azBÛÛ„lŒrvã8ΞNš½a©Ûj6l…™c•ăkFÊHeaØ‚?Jâtqrº†î¿³õÚEÃ}ª -$I6¼r&äV¾ ¯LñšßѰ[!K{Í6Ýb[8®#ËfRÈû0¹—‡éšìü?ì^ÓãÔURñ-ÑeUÀtã�Ë�JÒ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(K¿øöÃùÑiÿÉøÿ:.ÿãÙÿçE§ü{'ãü蜨.¯-ìa\È"Œ°]ì8œ žÃ=Ï>)²D“DñJŠñ¸*ÊÃ!�ꮓœŠkË{yà†Y–v+c%ˆ<ÀwéOžd··–y4.ÇØ Õ-7C´Òäy!3I# ŠóH\Çé“ÑG§çšÑ A¨4€óXüG¯^x_U¸†ØÄ©rì'šáÃ*´¿*&ƒ·HÈÀÇ­nÜx–a`²\\Ùé×qjÜÆî^)öà2îÚàäu²&ðÈ×%›N¸Ò-×ÓË-ü‘)œÌ«<’ÞÜsÜU˜ô‹µðäÚ5¦ƒ µóH‘Op6Ç ›~a.FIÎ:c‚ةԽ ÙoáädÕ“á×I$Ôn/®Å¿›ovlà…X–‰~Räå:)ê- _ ]\Þh1Ky9žq,Ñ´…UK•Ôp €t¯X¾ŠX|?š"všy6H¥X•ØdGVÕ5±/pÅ¢Š`&(¥¢€ŠZ()h¢˜Q@Q@‚ŠZ((¥¢�‰Š\QE¢Š(¨¨$ÿXjz…Ñ‹’ÌtÑOòßÓõ£ËOÖ€9ïxFüû'þ†µæ6!ŸNÓ§µ·`�3óq–Nù}_­{\Ö‹sÃ4K$N6²6"°ÿáðù?ò OûøÿüU{ } ]*Ño[ôòÿ#ÊÇ`«VªªR’ZXò‹Vm>èOÇ=Xe\¡‡pkBÃQmKÆ–wDÓ^#Ì+ÑÿáðÿýÓþþ¿ÿVl¼'¤i×+sk§F“/Ýrňúdší©›ád›Œ_3Véþg<«“’²wëþF¥V›N±¸¸3Ígo$Æ3 ‘âVb‡ªäŒíäñÒ®yoéúÑå¿§ë_4} E²3F¥£9BG*qŽ=8$~4yQù^VÅòñ·f8Ǧ=*o-ý?Z<·ôýh?ÉŠûuŽ4EXØ(U‘Ò®Š¯*2ê0äJ°)¡1ii)h´ æïüeoa¨ßÚ/S�4õVº¸‚4hã »³÷Ã:á{PKEGÑÜ[Ç<.):0èA¤ –’–€ QIYÚæ³�¤É¨ÜC<Ñ£¢yp]‹¸@HXw¤•³ô½N]I$it«ë„.Ä`¾}6;~¸­ Z(¢�…ƒ¦xª×V¼X­lum#ºEzmÿq!\ç @àò@·¨h¢Š(¢Š(¢Š(¢Š(¢Š*•ÿúÛOúëý*íR¾¦´þzJ–Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@ ¢Ÿå¿§ëG–þŸ­2Š–þŸ­[ú~´Ê)þ[ú~´yoéúÐ(§ùoéúÑå¿§ë@Ë S I¢I2¸ €ÊAžà€G¸§Óü·ôýhòßÓõ S#Š8·yq¢nbÍ´c$õ'Þ¦òßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Zeÿ-ý?Z<·ôýh”Sü·ôýhòßÓõ QOòßÓõ£ËOÖ€E?ËOÖ�-ý?Z[¿øöÃùÑiÿÉøÿ:.ÿãÙÿçE§ü{'ãüè�¢Š+ ç (¢€+^j6:z+ÞÞ[Û+p¦iUúdÔ°Ï Ì+4¤±7*ñ°e?B+•�ü7ºYoîå¶žW‰äXŒÈZ5 Ú©�@ëÎs“VášÚ-fÊçOŠhb¾•ฆKw‡sÙÄ›\Ÿ—nqÎïnÇc ’Há‰å•Õ#E,ÎÇ@êIì+7þoÿÐsLÿÀ¸ÿƙ⫅¶ð¾¤òE3ÆÖîŽb Y©°Ì ã®3^e>£åŒú{j,# "f7ƒ€xÝ|Q¸# #·lRnÃJç±î]å7 ÀdŒóŠ‹í–¿h[´Ãç6vǼn8ë�Ö¸ýP¶�>Ù%�ͼ“iW&+�,E$O,±FÚÇ pGlžZ“Ãisk¨G§.ƒ£Û4ÐË4ðÈC•}À`yc-ò‚{õ4î+–(¥¢˜„¢–ŠJ)h £´PŠ1EQEQEQEÀ(£¸ ¢—PQKEtôQEsEPfõôí&âê0 Æ£h=2HÖ¸_øKõùø_ûö¿á]w‹Nß ÞŸdÿÐÖ¼¹d/pl(8ίs,ÃÓ©IÊQO_ò<Ö½Zu”a&•ºz³¥�ÆZ¬sÆÎé*ù£(áé�8®óNÔmõK5¹¶}Èx õSèG­xï›óÞ ÷­�êW6:ý´Q¶Ñ<«¨AÁã‘ê3Çÿ®¶Æeð”9©«4a‚ÌjB§-GtÿÕ(¢¼ÿÇž4Õ<5ªZÛYÚ—IÓ*vrÀ6r d/Ý$�Úyë��>”ô +‰ðÿ�æÔµíŸO»¸Y't·’ ¢ˆãO1X‰9!Éäd|ÃŽk,xçYy¡‰¡’Å^kýòͧ5Ù ªª¡ “#hb�œÐysÿ!?Üj�W5áÍ[PÕç’[ÕßHVÚàYIj&�dm¸$„·ÞfÎÚéi¡1ii)hæúþ‡¬]j¾*»´}Aa&ص¬@*ßD#DVÛ�ØÈO^;פ Zò»ÝP¹ñɶêÚ7x™:i’Êmâ ˜PÂE`†Ü¬¼ó×8ÜøfIÞöðØ^‹Çñ U‘<Åo²³ r¸ ¼«hli¸¶Ñõ$šó 6ÇZmI§Ò´Ë­2æçLºŽ]ÖÒF‰>ÆGcæ09ÃàLò‹�,Éᑉ¢jVWH§çÛ9k„Þ¸Þ¦SžNÓó Œž•êBŠåü a%†“r¦I|™. à Ù=¨„m\ª#³0\‚zõ'Šê(¢€ (¢€ (¢€ (¢€ «uÿ¿õÓúUª«uÿ¿õÓúPÊ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¬-C^ºÓocûF–˧½Ìvßjó—qiU!r»˜IÚ€7h®vù÷ñ/Ø\ióÝIe Ø�ó&àALp¤£sÉE:Ü.¢–zŽ–ÖM5´—6ù�d%cÛ¸8 ß8èX{ÐAEs~ñ-ωmEÓÚØC D’o¨}¡Ð°k®ÅÚp}M1|Qw+,všh»žS<± “ËÞ7رÎY�*8È<ãÓÑ\}ÏŽ7ÞXA¦Aa0½³Žî6½¿û)`ä…Uspx­ûÍBhµM>ÆF’q$²ƒÕcEçûÚ1ÏbhFŠÇÑ5·Õ-¯åº´-grð:´¡þê©ÜHà}ï~�j/ ø•|Kü±Ú=¼v×>LeÛ&T(®¯Œ|¹Ÿ•nÑXvÚíÑÖ-ì/´§³i#Û¹™\�˜Èp>éÁÈÁaÁæ�¥x€ßI«¥í¨°lÂ9I•†ß-dÜHà 7©  ª+—½ñdÑø˜höVÚ|¿ºŠQ%Æ¢!2y…¸�v6üÏ^â§ŸÅ>F¡*}‰ŽŸÜvS]ù€m™ö�„Ç+—PNx'¡Á †ŠÎ¿Ö¬ìtË‹á"ΰ±ˆ$,ž\í�ö‹1êkÓÅ÷…–�%–�f¹º²ûl�ý (‰3Œ#æbs�€89"€:ª*¶Ÿ}©¦Û_Ú±h.bYc$`•a‘üë3Zñz.±£XËn^=JfˆÍ¿"Û‘ŽrÌ«Ôu  Ê+™“Åè5}vÂ;dÆ“n“4Ó\’BÙÊî# 9lõÏ¥n˨Y[ÜÅm=ݼW«‰åPÏôäþfЦº®œþfÝBÕ¼µ.ø™NÕ‚O< ‚3ê)µtïìÿ·ý¾×ì]~Ñç/—ÿ}gnŠ©6©§Û[Gs=ý¬PJ@ŽW™U\ž˜$àÖ>­âëM3ÄzO›b­,-q<—7‚!JGAƒ¹ˆ$�Àžh£¢¹äñu�|E¥½Hmšsn%Pà…Ücm»¶¶;sKÿ ]·ü$Ù^Ky_ÙÿmûVï—¯ÜǮߛé@“a¯[O¤i—·òAa5ü)"[Í8ÎX´�ÇŸJ»&¡eȶ’òÝ'$(‰¥PÄœàc9çC@h¬SâKGñž“k$-2NÒ¼S0´{>Ry;ûã¥mPEPE™â_ûC¸Ô¼¤”ÄPy|µ%œ(Ë`àeºâ€4è¬Í R¸Õl ÔñY ,DfÎóí(Ëë»jóœñŠ­»tºÍµ�ö–Ö±ÞÚC2»€±£îåA#ûâ€7(¬&ñ,qøÝ|6öIJIq¿‚ŘlÆ:á g=�VT^;{Ë Ë‹,Hðê˦B²ÜlY·mÄ™ vƒ»8Áâ€;*+'FÖ%Ôf½µº´×vn©*Ç/š‡r†[<AÖµQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECwÿÏø:-?ãÙ?çEßü{?áüè´ÿ�dü�sÔQEt¢ŠÆ[KLyKû,öŽÅŽô~Q''k*·Ë’Nã× m4û§¾†¥$OpªR¡Ë„¸'–c�Ïpç,_éΡ£[ùPýÙ"Ó®z†T �pj[mvÆêê;eûTrÉ�‚âÎhC�2@. €N=�-¨ßi“ë:-ÆŸÒÛ}¡v<�ÿ”õdsø×%'€õi'»Q«F#–O1'f‘ä Ä�å²±ƒ—nqƒ^ƒY>#±´Õ&ÓåŽðÍi!0ÚI2á·cî�ºzãÛ<àilËÔü)u­ÇÚïc¶ò"TŠÞÞ=Ñüa³†e (À+€*ݦ•¬Å­6¡>¡`Þb$R¬Vn¥‘ 2ÌyÁ«W^$Ól¶ùÿlPщr,g`Œó„8> ò;Ól¼O¥ê2B–­vþv ll¦T Œƒ¸ ÷ͦ½´b˜„¢—b€Š\QŠJ)qF(”RÑ@ E-˜¥ÅP0¢Š(QEQF)q@Ä¢–Šé¨¢Šç7 (¢€0|fvøJüû'þ†µç–Ü^øu᷇̑ïc÷“^ƒãpÍàíGh$…S�èIý+È-õ«‹]>{(edŠr ›q“ŽÙô¯¤ÊiÊxgÉ¿7ù=šÎ1Ä®m¹ÌÞ¸Ò“Èf°¹ŽîX?ãâ4\cý¥þòŽ„þ= Z–Cÿ 5 ôäÿÐ…r6×ïgr—òI¨r¬§¥jè׳j~4°¸pZYnÑßý Oè+Ò©BqR”�ÒLó¡ViEY¶�p¯8ñ½®¢þ&¶›F{³p°î‘mmão)ÆU%rÑ�ê¤ù7dœm×£Ñ_}‘çµµŸ‰ä¾µ³»¶Ò/m͵•ÊÆ@áwÊWPâ4Ö¼3É®�m+Æéö„ qw^ÞÚI|¯çM&ÉQ›lÊqóç×¹Ñ@�£ŽÜÜÚÅgm [J!YaÓžÌÎ<¨ÛsÆçvì±=qšíj;ŸùAþãT”И´´™=i€¢–�TsÜÁmI<ñĈ¥™¤p (îIíH …žIÊ�#ûìXaxÏ>œs@ž#/”%O3ný»†vúãÓÞ€$¥¨áš+ˆRhdI"q¹]aêëRR¢Šk: ˲¨÷8 c訅Äe€M•“ÌîŠçǦHçÞ–[ˆ`šhã®À:KEV´Ô,¯ÄŸc¼·¹òÎ×òeWÚ}¬Ð0¢Š(¥¤¥ Š( Š( Š( Š( ªÝÇůýtþ•jªÝÇůýtþ”rŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¸ýQµ»Ï@&ðýÔÚE“¬�4W4¿óÑÃ8!W< ryì+°¢€8ÛMT†[=1­—ì6Z”·âèH¿¼FiP.r4€xÂõ晥·ˆ.5«½GRðÜÑÝ Xü¿ø�ùþQýòÿ¨ò>Ëœçs÷˜Îsï^¥Eqš¶ƒxšŽ¢öúT:•½õ„vp‰$UÛCŒ6ïà;�ùrr:t¢ÃÂ×°ßêFv +i¶Vúƒ`¿˜« vÇ%¿á]�ÄhÚ>£µ Ë&‡„:u”ÖÒºJŒˆŒ s·å=yç�+·¢Š(¢Š*ž¦gDÛØÇzÛ—t8]Ã=‰Èê3�¨«”P3£ZêV7—·§KXWR½Gka2ƒoˆ)‘±�ÌJŒ…õõªºskw~-kíWÃ÷pÅè,Ø\@ÑÁå�€“qvÀ¹5ØQ@n½á½KS×ïol^;i…¥°³º“�²«Í¼`s÷$Çü ëYמ¹ƒK¿²‡HvÚö³Åj?ÞÛÇ*GÌÀ t¯C¢€9� ii××óǦ®“§Î±ˆ´õu;d·ÈBªH*0 û¹®žŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¿øöÃùÑiÿÉøÿ:.ÿãÙÿçE§ü{'ãü螢–ŠÜÄJ)h [ÃÞ!Ñlü7¥ÚÝjö\AiRÅ-Ê#£ªT‚r Ô×:¶›ªk$z~¡kvñ]¼’-¼Ë!Dû<«¸àœ ²�ÄV•Ö‹kypÓË-ú»c"+ùâ^8UpåSYiÐiáÄ/tÛñŸ>êYºzoc޽©jüL<Ï j6ád/qo$ åÂò̤BqÏ'ä2‹Kç¸Ñ൅o<½ ‹U-»œ�«d$ÈÆO#¯^¸ö»ûõSm,“$lAo&S#Ó#œõœ|'£³I›EòÞ(â/ʱ„,U—*ÙsÈ9¤ÕÆšG-âû™.d–H§¿Ž%²¶e€I4·Üì`ÈîT‘÷Iô…ÚtÖ,q=ìq}¶{qm%ÔïƶêÊ»d x'<¨5Õ\xCK¼–'»kÉÌP¬#uÜ€�¬X*Ac“œ“ØS­|'¥XêPßÛ ¥š&gùî¤�32í$‡'œwñE�ÂêÆåQTHQEQEÀ(¢Š(¢Š@QEQEQF(´QE1Q@QŠtÔÆ�)ÁŸPIþ°×9°ÿ9} rú†Š˜ÈŒ¥YrÖ¨dèääéVøŸáPkwRYh÷7�²(>™ Zá?¶µ#ÏÛ.?ï³]øL-Z±r„¬yøÌm*QœnÏBþÉÑÿègÿ€éþ-½–�i'™mco 㣉Tþb¼æ={S†xÝnåb­�®Ä©ö"»½'VƒVµóbùd^$ŒžPÿQèhÄá«Ñ�å+¡a1t+Ë–*ÌÕó—ÐÑç/¡¨h®Ñ&ó—ÐÑç/¡¨h gpÚŒ gî5MUdÿ�”?õÍ¿¥Z¦„ÌO^]Z[‰-ä�uXàõÇo­PÑõ‹ÍWQ‘Ãÿ¢F0p0 c üy­­OJMD*Èr�ÕÎ2GOñü)m´ß!(Ö8â^Šƒ~´8E»^OO%ÿåt$êóó;i§¡¢: óŠ×ó­ÒêÿÄÆ8ôÔ´û6çòˆ‘ƒáÎp>èÈÎkÓ«“Ö<%y}w<7г_FÖóKw˜míÎ?w /'$–Ïn¸¬N£/ÃgS½ÔüC4�G,û#†êÊâÔ[¤Òã,³J3°€ß.q¶¹m^ò8t}P�ß”Ì:t=r3@ÎG»Öô»;P¶¾²ai¡DÂ&³n#’U ó:å ÝŽÝ*×Ä �c«Ô4ÝôÛv´d¼ž3s$“ÈLG dŽ0TïãR¼±ÇÒx«MÕ5�8é¶Kf-çÚ'–iY]e?*…!º¤P_ ëp^Ï-škz éX÷¤\&2€A‘¸äzWUIK@Q@-%€Š( Š( Š( Š( ª^0Yí ÿžŸÒ­Õ+ÿõ¶Ÿõ×úP¿9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€&ó—ÐÑç/¡¨h  ¼åô4yËèj(o9} rú†Š›Î_CGœ¾†¡¢€$»ÿ�gü?�ŸñìŸ�ó¢ïþ=ŸðþtZDz~?΀9üQKEnb%´P$úïˆ/æi4½"X­tdÍ29•‘Ç(@sÏlfÞ“¬ê�¨.�«é’Å<»ä†dXÕ H%”LäÎç úâ-6Úkˆ´ù"\­¶µ}$Ü�µK\¨úòëùѤÛMe}á»K…Ûq‹,r®AÚÀÛÈ÷¤f¦½©K¤éMu)4¦X¢Dw*¤»ªr@8ûÙéXƒÄº“\5´røfK•Ü ª±“+œ�¾^r0jï�$Žù²º¤iwjÌÌp Ð’k’ŽþÊ7µŽMc@û5­åÍЖ;ìÊâA.nÀ3ûÁü]¨oPHéÅå´›{„µÅͶ—EXåÍ(Lg®G?¥;Hñ��ü� æE–K‰’ØGk+,‘£pR§�“ƒÞ¸û»;çðÖŸ?ÙÐi“izt\4ÛYq0'hçæœbµ<36�eâibŠb4¨c•4–*vI¸«L¿ˆ†QŒuÉÆh» #b?-Æ�­I .., –âßͶ•X•r¬wß ŒçƒŽ+oIÕ ÕíD°‰�U]þe¼‘rGmàd}3^j²\ Kk¶¹ÒôËÒ,öhÒ%0�‚�4dgzó�Ó­vþ½{¨u¿´†£okt!·¸9O-2€‚O4& (ÅU&(Å-˜£´PbŒRÑ@ Š)h bb–Š(¢—PQKI@´PEPKPIþ°ÔõŸë `l2Š(  o¾¼>Ëÿ¡ óeÞmÌø(0BØà1�úôo¾¾>Éÿ¡­pÚe´ú‡‡&ŠA¶íÝÎ#å˜öô9[QÃ9?æÿ#ç³HsâTWòÿ™ž&PA ÙúV®‘=Í—‰-aÜñIç,R)à�5 YØß)‡I¹i.áê’>Ð;”�_—Ò¦¸�ÿÂÃEÈ?éÈ8ÿxW}G§t{ž}:nŒïÕlz…y×�5Ý~Ç[¶´ÑH“z€ÉŒZ6*øfÆ2@É-³…ãŸE®Æz¥«ë–Òi‘^nŠ"Ý<„ð2 €pw|Ç ¯�>Ä‹Âþ-Ôõ=RhÞ ¨§žPŽ×Œ B(â ˜†T³ßœ•�qâýVÒhcÔo¤³ˆÜj;þÇynÎJL¡W7  €–8A§i×qxŠMY´y!°¿ƒìb%lMnª$qž7à#jwÎ9ËMP¶d“MÒu kc5ÄlÐø–¥�ŒùýX¢åðpÔÓø+W¸Ö&žy/šî!ò ÒÛ¼ª…#8#åvþ1]­r>�R‚ií¯£¼H o.Ð^¬+'”#�©‹å?6îy>¼×W™¸Ÿ÷Ñÿ hL’”Ty—û‰ÿ}𠸟÷Ñÿ b$¥¨ó/÷þú?áK™¸Ÿ÷Ùÿ CJ*<ËýÄÿ¾�øQ™¸Ÿ÷Ñÿ ’Šfeþâßgü(Ì¿ÜOûèÿ…IE32ÿq?ï³þf_î'ýôÂ�¥¨ó/÷þú?áK™¸Ÿ÷Ùÿ >–£Ì¿ÜOûèÿ…—û‰ÿ}Ÿð  (¦f_î'ýöÂŒËýÄÿ¾ÏøPè¦f_î'ýöÂŒËýÄÿ¾ÏøP”S3/÷þû?áFeþâßgü(ôS3/÷þû?áFeþâßgü(ôS3/÷þû?áFeþâßgü(ôS3/÷þû?áFeþâßgü(õJÿým§ýuþ•k2ÿq?ï³þN÷q–Ópù½Ž{PôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE�ªêš¶—y Ï›iò]Ål±©c3yŒ~xýÜs[õÊÞéÞ#¸ñLwÆ .}>Ûþ="’êDdb0Ò0�_�Î'×4ëo^Íuor`·þ˺¾’Æ,dJ¬…Ô9= ³FFÈÈ9=*Xõ�Z×XŽÇR†Í�Ť×1‹]ÄÄc( ±?xü§JŠß×Ð\Ánf·:e­ì—Ð�Ÿ5™Ë°FãCHNFIÀ¨´­7Å1j7——餛›¥d)<’y*òÑc(¹PNOÌ É9èžׯõ”Qº²óͺJÖ‘YË‘õ21ܽF@ÆGZe¾»«ßÕ,ƒ¾ß5×2¶@é…8è$“Wï4kË{»K­­‘á´6f+Œ…Ù•*À¨'+·§Cž¢€1n¼gw3XOi5¥…•Í„wm5唳ª—$m,Œª c’ÕÒÝÝÜcO²·p7$—�¹ žÙgSë…5•.�«Aáåðý„öGO6bÐË:°–1·k6C“Ô—õwK³š+ÍJáb`cHìíDÄ€éç'Žwa�@€£ësÉaªÜkÖ§ÝI¼;¶UVÉ'žçÓéMð®¹{®.¦×¶‰jm¢Ü#1£®üŸ½‡ç:vªZ‡u ¨5[=~ E´½ºûXûä»Ã|¸\ìC�·9ð«¾ðÙЯõyþÑ<©w:¼B[©%!Dh¿6ò~l†çž03Æéê°kö–ŒvE/c–HŹbÐìÛÃ÷�ÝÔÁíÍ&—®\´š÷ö°·‰4¹‚–· ÃËò–LœòOÍØ~SGÓüK½>£ªÁ¥JÓå‘]ÈLUL`uÁ'9={NÒtÿZ_ëwSÁ¥#_·�Ë™$ "Ĉ¡��r¿.I>Ô£âkè¼CöXn¬­4ÿ&Y�HÒÈÞ¬ªœûÝÚ¬\ø’ö»‹•†ì«kèìdÎ|Ög(¥ÁÎ àc8'#¥K¬ézÞ±eq¦K.ž¶7hY8’% o 9 IÎ #sdžïeº¸¶Yàþʹ¾ŽúLçÍVB�° `‚у’r2FZпñ¼lÓÙƒqp'6�¦IÁÆÞG@rIè'µbYx§UÔlt¿%tøn§Ó�ôí>áÁb äuä’p1ÁÍl]h#XxæÕ]Òkieû3ØÜË XÛ�’¬2Ø=ºã­cZøFöÏÃZf˜ Òîå·Œî–û|ÞD‡<[�àwåúŠéô�J=cG³Ô¡R±ÝB“*·UÜ3ƒô¬¿ø‚}XÑ X£{KÉš;— îŒ|ª¤sÇÌ뜃ǥkiš|ZV•i§Á“¬+ Ô…Éü«?\ÐNµwm½ÕmÖÞâ9!ÿxª_¦3Ôv  ©¼a2êÞ#ƒý =.Õ%ŽâTv Ù`傜• ¥pr¦·æ×4ë}E4ù.?Ò›h(ˆÍ´·ÝÜ@!sÛ$f¹‹¯^?Sµ‚ê ëHK!,¹Róù’»ÈÀ€ÆLñžs[Vú^§§kW³Ù5¤–—ó¬óyÅ„‘�Š„.ƒ#÷  “ÅZ$‘O*ß)޶GØÀ+nÙ·8å·q´rr8äS¿á%Ò ‡ÛÞby;DOæy˜ÎÏ/÷cœc8没ð½Ü^µ´[‹ÛMFKø�&6&gp­À?uñžÇ‘œSdðæ¡:_]ÜÅa5íäñÊÐù²F‘�bì•FàýNìt8  ›ŸiV�[Ë5ÑáKD¢'geNÐ722Hã<Ö>¥âå‡Ä}•¤ÊmdµkÙg[In<ÈÁ\*àdwr#.‡CÖì®-5®ío/ÒÑ­gûQeR¥÷© 9GÍ€IŸ¤xZ]*óN?hI ¶Ó%´vÆÖgyò _•¸Ï [K«xã]Ó-ŠÝ%£L°OíÞvÐH]ã¶åàúÔgÅÄx‡ìÞTÙ¿Ùßióóóy¸ß³Ó_ÍZ>Ó.ôÏ[é7ÿgqm·G…‰F`@Á>œýk•ÿ…}¨®–o-ÿ´ÆLû›o“å}ŸÆsäñÓü裶ñE­¶“§K­\Eo{qj“ÍhÅbÜ2IÆv¨9cŽ:Õç×ôÈõ!§ nÊ«yjŒß+g �1Ž=ãYš†ƒ¨.£q¥½žÍBÕ-¥[�ߺØ\›‡û§:óM±ð£ZI¨Àgͥƙoa†>h¬ŠXñèã¿c@‡Å–×þ$Ó¬4éR{kˆg’I n3³fÒŒpNæädqÖºJå´íXMWG¸¾{'M¶–Ø}œ¾é7°FÜéÎ=Mu4QEVW‰5�+A¸¼³E{„(¨6�e�W%Wã9ãÒµjµð½6ÙÓÚ8`q8%Xw�¯?J¡áÍFmJÊY'½´º‘%(~Ïm$_íd‘‹ç<ã‚8¨SÕmµë+;ø¬Ì7ÆQÀX¼[ì±<0#ŽÁ#®hÓ´ÍZÒêâúG²ûMõÒIuî)KÀ¨x%¸$§ŽTÓ4柳fÔµ84¹VLÅÇu!kx:íD1€I 9ç�@(y¼G=¿�âÐeŠ!e-’Ê“s»Î-&óŒ��NÕ†ž:¾¹Ñ/¯×숚´vpMp¬cóá}Ý@­�k²ë:�ôÿkû2Oko3EÌ‘¼rHÄàñ‚¯Ž½ÍUºð­òAx¶"ÈîÕmïmâ–FTòãH×k§÷g #»AûÈûö—Ûù~Dù@”¶~µ­¦‰ì¼WgnìË*\ª6Ôàþ†º1˜HU‡f•ÑÍ�ÅT£SMbÝ™ëTQ^cñ uû�ØÛèÓ0…LEB¶ÉU‹€Ï·@1Æ[¥|¹õg§Q^eá sY»Öî-Ö{XÒye–T¹´�H‰Pª°ýé ­¹ÿ'­sÿÛ—fê8žôjIƦòçÍwn! ͘ÄrJçäô$×îä!û�RWà‰n.·›„Ši °Á<—2˜�ÇÀ’uVnC2>n v”И¢ŠJZ-qpj¶^ñ?ˆZ�Û›ÙcšÚf�ˆš1®Å •!¾^¿6{×i@ gšøƒW¹þÐÕä“RÔl®ã†'Ðíb ‚à””ÇÎKåJ°ù@üj¦±«\.©â8æÖu mZ·:u�¼ÌU¦0!Ú¨8`_¨9“ŽõêÕFÏJ‚ËSÔoãy ·î�(b6‚ˆmãÐwÍq×7ÄZúøvK‹•mNæÔ™elç�[<Ñ€¤µè›o£C³>ªóÏ=̉姚À¬)œ•@À$s’p9â´©RÒRÐEP1h¢ŠZ)-QE¢’ŠZ(¢€ (¢€ (¢€ «uÿ¿õÓúUª«uÿ¿õÓúPÊ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (®k\¹Õ´Ëû;˜õ’;‹èm£°( Œ@s»–,£sä0:w –Šãm5ÍRY¬õ6¹Ccy©Kb- c¢´ˆ®©bÑ‚A8ÃvÅYŽïY±ñzt×먬e¹‘VŒ@êT&Üsµ‰a†$ü½zÐSEqÞÔ5"Ûk×ú�ö“Y¬ïoyoiØ;Fc 1ÆäddTvWÚÆ©5µ½® mMݼڗšÑ‡!@!Œà.ÓówÏLf€;Z+Ï.µ=¦—­Üë7ŸhÒDa J…Bªu$¶ä’E;Áúޝ~ÚÊë,‚x/B$H Q¢�Âd}â7�Iê}¨¦¢¹¨n5[/YØ\ê)z—VóM4B‚ ¥B²ã�¤±bIìx4š6§¨%ljRúi/ÿ³®…!�UŠ˜RMª£©Ë2h¦¢¸Ïx“PŠæÆ $˜Dw6†ý䌋,ª‚,€Ä1'¸xÄ­qâ[›vÕZÆ [Ä´H…™’9[ O™&0…‹mQ¸tÏ9ÅvtW9âMNùµ ›wÊIdûrm1ü«»$dm/¸ã@UÀOâÛÅÕ¢—‰z³<�€ë�›*§q9ÝÆ(¥¢¹¿^Ù|I�N–UD– �T|“³JCÆpV"98Î=kŸ‹ÅšÍχïïf½š×v· 0´ÊòEk"Æê¡ ͵û‚s@�Es>ÕçÔ¤Ô –î[¨íeEŠ[‹"r ‚wÇ…ÀÎpvŒóéšé¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¿øöÃùÑiÿÉøÿ:.ÿãÙÿçE§ü{'ãüè ˜¥¢¶1ŠZ(œÒu4ý.C4wMæ_Þãìö²ÍÒæN»ã·_éT<1e.�ª[YAt_M¹³’Há{G�Ñ¢hÐ39ÜCòv®p9ÍY“CºÚöóhº.§ÜOc£÷.<¾Àçq¤3RþÖKËS W“Ú99Á·pÿ¾�ü+Îí¡»›P¶HõÍI|I,¢Òõ?u¶8£;™ñåýÒ$ÿ85èzŠß½£.›%¼w€t,ª;œ2}+x>HfþѶÕîW[oõ—’ Ë(þãGÓg‚=h`ŽÅ’Ëgâ�ÂKýBò6‚A*„¹òNÀ>s•$ࣧè0^ÙxžÈj¶·*³JDï o”["o}ŽÄ±IØýþµÐ\ørêîîÚúF±¦)íÌlñ¹)µ@ByQÏާ֫Zx:k=oN¿S£ª[JÎâÓMÎÀÆË�Á›<°ãŠVξŠ(ª$(¢Š1F(Í&hqF)3Fhh¤¢€ÒQEQE (¢€ (¢€ (¢�…Q@-QXšQ@5;|#~}“ÿCZóý*{á«�÷K1Ý£Ë# ìaÀîyèÞ+±¸Ô¼1}ij›çu8Î~•ä#Añ ¡�û"÷nrG�Ø'ò¯¢Ê¹%‡qrIó_ò< ÑIb¹[\¶üÍ`ÚV¬E¥–ëK„8�å~.=˜ô {vç•<²ÅÇ�wgý=?ô!X?Øÿý¯?ðÿ…kxwÃÚìž%±žãO¸‰#�e’I�¨À9<ž¦½‘¥Ê\êÖ}{ž|=¤åò;Ýtì{pÞ1ð\¾'Öbž;KXíÌROrªæU$Š6îVã‡Ýòäà×sE|aõçe¢jñ믭OkfVú!ks`ýÌ Ì>>fÉmÀw —œü®0…¢ÓÒÖÝ&Ÿeš_b!šY]‘ž,í8\ƒ�A^¡EqþÓ5*æâä1Deͬ?n’ìG�¸ �ÁŽ01ž+¦¨îä!û�RSBaKIK@…¢�EŠ( –’–�(¤¢€Š( bŠ))h¥¤¥ Š( Š( ¢Š(¢Š(¢Š(ª·_ññiÿ]?¥Zª·_ññiÿ]?¥\¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®bçú̾(:Âkv»|¸-æ°/ä!ûÛH”|Í݈ô+§¢€9Ø|,`¿�–ù�„R^Áhbû“>ì’ÙåAv!p9=x[Iðηasy5Lj`�ï §M?dÙÚBmc#( ‘�´Ž=I5ÕÑ@¥÷‡u)c¹¹šøÞßÍoöš8–2:ù�Ôå°7gý�õÑÔ´)..mî´ëÓaq m¸D$Sq´‘‚ ŒÜðs[TP7qáiÿ²×H²Õ¤¶Ò¾Ê¶�…]„av��ÁRGRC{b­éºlö÷:œûR“d¤�Ûa�0™óó3œdpkfŠæ4Ï L‰¨A­ÝXê¶—³›—€ØlC·ž]�(ã{Õ­š‡o5;‹-ⲫªÅO)B*ìã¨ÈfíË­nÑ@¶�áÍoMÕ®/®µËKƺ}Ó“§”�¨b+y¤*®xõîI§ižÖ¬nõk‰uÛg}Gç&-<¡ŠQ¢°ÌŒAÚG'½tôP/­xGÖâW¸³³7ÆXdší­T¼»KÓ† WØý*K¯ ‰î%HïL:mÅÄWSÚ�-${1µóò©ò×#¡Á®’ŠÀÖ´MSVÐo´ÅÖ"O¶Qå’Ï~Ø\°ëÈïôéU¯¼g¬è¯o¬Eaw©›f·KñdŒ`í!K6ç?{¯¥uPm:Æ 3N·²¶�#†ª‹´~µRÕ´(u‹¸$¸|À�O�íϘ²¨žØÐõ­j(‘ºð$2Ø_YÛß&¶²Õá°¹³¾‰f˜[ÇtÑ HFBƒœœôÎ1žôؼ]§Ëmc7—p�ws%°‰Â‡‰£Ýæç.Ó“ÔzÖTþyµ…½:š˜Òþ+ÔWµ (ØAòüÒs³ŽïW¡ðu²øŽÿS–᥷º�ÕlÊabiV ž¬{qÏ­O¤ø²ÃX¼ŽÞ.áóâ3[Iï¶0sC°š_‡ì´™RH ®ñÚÇh�#gliÐLõ>¸«0iÐÛêwwèÎeºXÑÁ#h »ãý£T/õ‹ø¯ì,,tø¤ºº‚IÝnn<±]ƒª¶N_qÅþ©ªC ôÂÁl¦�rFsèrÁxëÚ€6ñIKEŠ( Š( aEPE”QEÀ(¢Š@QE (¢€ (¢€ (£4 éj ?Öž “ýa¬‹EPO‰Nß]ŸeÿÐ…q¶‘$–Íq<í µwÜKàøëüTvøjðû/þ†+‡Ò¦½,Éh‘Ê¥’)B<ðpÆ“>_8³ÆE5wõe·�JfË_Ü“ÿ^ÿý•E¦2ÿlXc<νÞ¥ºùÝVãJÒ£‡#Ìp±®¿!²+Éâ$²[v-ÚÀŒž¥wñúR<éÓQ©•µ]ê»¶z�yGÄ”&³·Ì:yt 'Ú.bEd+!àm,£ï Ìq–àkÕë™ñ…çñ¡­z¶°E Gûµ,Ò† ²8'nôdc'Gz>äå|)sªo]Aq¨]ÙæÝÝBÉ,GÄå¼±‚Fz`f3€sÑ<š…ÄZÄÚäq>©0ûnŸ±ó£>b‚Ñœ‚H'�aévžÔ­õa¬I¨D÷Ó�.î-‡Éh‡ÜDÈ*sóçsdr1‰'€õ×I¯%ÒÝÅÌ“‹y¡iáO2I]Ái¿>ïÜÍXðŒÖÁî%²_l?hÅoc�~EI�—9$“Åw5Ëxo@“Ã÷×jÿbæS2Gcn`�G–‹€…Ž9Rzœç5Óooùäÿ˜ÿbcéEG½¿ç“þcüiw·üòÌ�$TaÛþy?æ?Æ—{Ï'üÇøÐ1ô¢£ÞßóÉÿ1þ4ooùäÿ˜ÿ’”T{Ûþy?æ?Æ�íÿ<Ÿóã@QLÞßóÉÿ1þ4ooùäÿ˜ÿ@IE3{Ï'üÇøÑ½¿ç“þcühôµöÿžOù�ñ£{Ï'üÇøÐ2J3{Ï'üÇøÑ½¿ç“þcühJ)›Ûþy?æ?Æ�íÿ<Ÿóã@¢™½¿ç“þcühÞßóÉÿ1þ4úZ�{Ï'üÇøÒïoùäÿ˜ÿ}Ííÿ<ŸóãFöÿžOù�ñ ÑLÞßóÉÿ1þ4ooùäÿ˜ÿ}Q¿ÿ]iÿ]?¥[ÞßóÉÿ1þ5Nô“-©*W÷½=(z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ åõØî-5]>[MFñ¯®¯cX팟ºŒy¹AƆ;� ‘Ï WQ\ô¾kók ­ê�ÜJª…¢(¨9Ø»£%A<œh&ÊúõÚÃXkۂך¬Ör[—ÌB ò¢€½ ŠÙêyÏn®íä�“Å_Ôô+}NHeó®-f‰%–ÙÂ1�±¹Aàíã@L>$¼Ö-íe»]WɇI‚òs¦2Æw¾ýÒ1$Ng9<V爵Bˆ×–Œ&]/L—RR{¹FX‰„y§ð­;¿ é÷1GOqgÛ‹F[WÙæ@:FÜNÁ<óSYhéÔ…ÊFñ]°�bu`T©ÿ¡ø  ‹8nmµS¥Jþhî´ï´4�(iEp©#åܧAŽ1RxFæáîukiÚò1 ¨b´¾“Ìž%+Ô¶NUˆ8Ã7CÏarßÂö–ñL¿l¿’G�"Yšà‰"D9UR1À>¹'¾jÖ—¢Ã¥Ëq8žâæêço›qpÀ»ÎÑÀ“ÀÍdZO=—‹Ê ;XÄvðF±ÆƒøT P^iV×÷p\O¹Œ1ËL�¬²ÀP q¯Ý‹ÿ_É=ËØE§¬¶°Å9‹ ²Ke<ౌ�ØèEuÑëwZ´öv:Ÿ¤« ÍÃLk• B®ìò:ñš†ãÁÚ\ö·6©çÁúziÛ"a„‰ · �ß9äçµZmª=üWvÍ+«Ï2Ì XNp8# sšËƒÆMb.ÿ²X$·Mel¾x-4ÂFOO•~RI>‡ƒÆ]qâù--nEÆ›å^ÛN�ÍOû˜Ã®á!—o Ž3·¯«ëá‹Ñ—Lß9�.æ9w�$r ›”�٘㎜óI†â† „Z…ú]O –kÁ"ù²0]£9]¸q횊_Ü´öÖvZr]^Ëoö©\�qçhÃàî$çsƒ’+}jÿ[ñ“>Ÿníeý�-êB÷¯nLŠè¿8U9Ú~]§ î'¶úøJÆmVÎâîÎ[xÚ!<îŒÛ˜6A-ÏN;b¬ÙøvÂÂêÖkexÖÖͬã‹vWËfV$ç’r£œ÷4›áýOTÔ|¡¨ª%Ô–^bË™2f<ï *„9Ï8õ¬¯ Muo .ªš~¿=ÒXÇ# í@¼w±Œà‘•^¸ã&º�;BƒLÑßJŠâæK]†8ÖVĘÀU8èLäûÖ|éßÙϯjóYy+‘#B–1òåc�6õèO~h�ø¼^ÛÁ6Ÿ`×övŠÃ2lª©/#d|ŠaÜœ9ªú¿ŽáÑg[[¸-¢¼HÄñK|‘áI ɼc´œqÛ$f´[ÂVX[Ësk‹ƒs�Á~Í!R¬cã€Ù9#$ñR?†â2¤ñê:„7B1· *ï™A$Ê�pY±€Ï  ÚÊÝø—[ž6- ‘ZI}2j‡Š48E­ÌSjËs©@’ìÔn*ò€À(|( ž€c¶+¥·Ó!¶Ôîoãy|Û”D‘INÌàôÎpqÖ±5-Ä:˜‰d׬8nâ04ÆÎQ·('Îç§=(N;_XÍ%¬7Ó©e-Ÿ%Þ@ã{98«ê>A¼c¼“ì± 3YórÊœüÍÇOqLÓmõhZOí-BÖì6- ;}s™=½+B€z+`ŒŒàŽEGq ¸·x„²E¼c|G ¿CRÔ¶ïwhðGu=«¶14w¯9ãp#Û�zЧ^^]øs–R^ÜçQ•ÒâàJD¬©�€ýA%#œfº Ï<ÖP\Ló5­ÜÖË3ò̪ÇnOržøªöž¶´Ò!Ó¿´u VÞA-¬Îщ-Ø>R¨BÃ�zš½m¡[ZEo3Ý*Begb<æ“;šLu9$öÁé@š[ÝZxѬ^}ImÚÙÏú|¢AtêËóÅŒ…‘òýáòñYzƽ{Š5M%%»†Úiíc–õI)g /?+3í�Ç¥uv>‚ÏPK×»½»š(Ú( Ô¡ü•ld/9Ú99ì]G­ê±Jm£¶•‘âÌÊ›¶–&<îù� ŠÚ±²·Ól ²´�Ë·�q®s€=ûЊ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€$»ÿ�gü?�ŸñìŸ�ó¢ïþ=ŸðþtZDz~?΀0¨¢ŠÔÌ(¢ŠætÙ´ÝkÅ·÷‘F—+eŽY!#yÉ(XrŽ­6ÏS}OÆá Y[]Bß¼Üà™aºãäݰ•ääsÅméúEŽ—æ}Ž/ÌÀl»6Îdœ(ÉÂŒ“�Wi™âx.|?|. ŠeH^EYP:†U$85äStuž/-¯ hv²il›Ž3ò¯Ï޼c5íî‹"2:†V*FA•Z[<K[ÄÑ` …\zb†�;µþ›§MâK;TžÙm-HžK[—·X"'äA°�–aœz/Ò³<# iðø}æ’ÿÈ»·"'7²˜ÄÜ��;pW${ƒí]íÍ­½å»ÁuSÂø ¨[<ƒÁ§EpD‘EǨˆ °¨°\}f“4ZJ(¦EPE”QEQIš(¥” Z(¢�…Rf€ŒÒQHaEPH�¹Iùz‘òœô8¨¤ÿXjTÎÓ�ÙÉûØõö ¢“’9¬Ë+ÑV<´ôýhòÓÓõ  }rÂMOE¹³‰•d‘FÒÝ2?Ò¼ôxGÄJ0¶Ë�úì¿ã^¯'“ M$„"(Ë3+3þþþùoðª�)ÏáMž^;†ÄMN´¬ímÒüÏ<ÿ„OÄóî?ïò�]Ѽ'¬Ç¬ÚÜ]ƑŠ‚Fc bps€w0ëš<ó¤1Ý¡’CµA 2}9­?-=?ZR§(?yX磓a”á&ìû¯ò+ÑV<´ôýhòÓÓõ¤{…z*Ç–žŸ­Zz~´›'ü„¡ÿq¿¥Z¨®WPƒø¥¦&¢’”P ´‚£Žæ g–æ�æ‡ljà²ddn²9æ�’Ð(¨­® ¼�g¶š9¡lí’6 §{ƒH ©EG,‰ O,�µK1ô­6Îê ë8.í¤A°š|Z^Z†4ia-íÕdM‹Ÿ˜»+ôê2xÁ~‘¢ÝÁ­Û^›+„±kÆxX¦$Aûò§U\Ü79'å<zQL�¢“4Si(¢€ (Í%¢Š(¢Š(¢Š(fŠ(¤Ef�…Q@”P3¥EÚ¤|½IùF:œÓ¨¢³((¢ŠÇñSmðÕáö_ýW˜ W·é^—ã·Â—ÇÙ?ô5¯2Hs£½ç˜7,ë\ `«þ•ô9R^Á·ßôGÎféºé/åýX¥Õ˜xõ5ÜøcÅvM:þPfû°ÌOßÿdûúÿ^¾z]ÀRv€Ü‚GZ×¶„YxÎÖÐ>ñâ(8Á?0®¼^`ã-ìÚùx:Õ(ÔRŽ×IüÏZª7ºÆ�§H#»»Ž 1í†9>ƒÜôâ¯W“|L²µ¼ñ-˜¼¸»µŠ8L²É w2�$ÜÌåU`;~c¿’£¾LúóÔmo­¯Ze¶™d0°I6ÿ  ýòÊ¥qâmÒ5’ïV³¶V’H”Ï0�sÆÛ\ ØÎ¸ Ø_Áâ{˜5Ô#’佸[{ÉÊ::F°�¥Žæeœ’Pd“\ìw6SÅycqu¥„}Q–mKPXË:aq*ˆÈÁR1ç¹õØ5]?W¹Š}6úÚò% Œöò‡PÜ\ùÕúâ¼ ÍsêÞÁ{qtÞlÓCz“üþ\jC�~\ï]­10¥”¢�®[Gž|oâ¡,±¡/k€Ìs]P¬Û¿èw÷FêóFÓî.škTw8àrFhÉ�^ÿÂWb°j sau¨IdÑ—epn-4Û;yŠí2E£cÓ g€à4ø‹Z‡í±³»‚ãΉ�¸[|#̤‚�þp1]—ƒ>Ðpsÿëýµ¡•§E{%ìv©w':¡ÛêØÉ©í­ ´�`¶†8aO»hW¿q@ÑE¢Š )E%( Š( ¢Š(¢Š(¥¤¥ Š(  :ÈÓ›Gº°CbS÷»úc¶1ÎsŒcœãÕo �Atu‰�¶öò|ïõÞWðy¸ã~:ãñç5¬È®0êdžAÈýihª—_ññkÿ]?¥[ª—_ññkÿ]?¥]¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šä5ý>ѼC§-‚·öÜ×QÜ<ÁÙšt#ÌÎOÊŒݽ n�MuôWžØ �3Y,ÃTº×.-g}Ç/y—Ë?쪢�;mÍ^³ÓmcñdÑ虊ÞÖÊHu ŒŒÂYßa@Ä“¹Ô$žFà;ÐiLIc”¸ŽEr�µ¶œí>‡Ð× á«o_ 2êÏMW],Ü5õ¤&6dˆª¿™’rNàÛ¸Ï< [M.;íBÂÇXBRM>mBHYÎòJ¥›ê›°lñ@í1æŽ&�d‘¤mˆ€ÜØ'Ôàøò»[ëíbÒÚ}KNMN+M ÚíÒ{£Kù…äPÝ!® Æ9äfº/j\[\ÞéÛÿâY£K{T’%‘ŒýB«ñþРÖŠó}TÃw‹æ¢O¤,’å皨$É8UÜ–ï´Òº ,µCKTZ}ÔQÅ3¬ 4r#— Ù |ùVÏñÉ žŠäô›H-¼âEŒ2¬¶v’Hwž¥§ÉÉ<~*ŽŸg>“âû»[[[{ '°”ÙF³4±\²:þöcÁ 7/¯ ß1ÅwTWŸø§E6·—~+¾´Òµ¶µ‡Ì‚xK:ùe‹yLN�ù8:ÖŽ­cf|S¦®ž�ý°÷+uq0v-¸ûÁ²xVáBôÉÈ@}Êë\^êš>�«yiqy91E�’¢ÆÆ4pzŸâ#¦V¹ë› ïHnì-¯.×Q›JÓ縈JÑ¡¹h�‚z…?ðôº*¶�ao¥i¶Ö‰²ÞÞ5Ž5ÎpÅr>:3A­h„·éÿh»*£;ÑBy‹�t/�|PoEy=Æ¢ísã l¤w1\éÜAÙ1´K$ÈŸtƒ† ¿ƒüuÜÛjš–£­ÞÛÙ%¤vZ}Â[Ïç2HJ+’¸8PŒg99é@ôWoâ­f].+Ö·±k¿m>Õñ†:osž˜CòŽIÇ#ͪ ƒœƒœŸ—ƒšÀû]ï‰üI¢ê1¥‚ ÒfºŠ¨a «")e!€$60ÀtÏ®@¤Ñ\V‰i¨ëÿ ßSºK™¯´ÜG"«ÃF1¼³ÏžIã>•ÍŸ¿œ1‹ì¢g[+k˜.Àê‰!x]ÄNž éG‡/àY.ô§G{ÍÔí�:\HUƒ†КtUkë MNØÛ^ÛGq ˜ä]Ã#§ç·ZV�¥ø«T/á›{­2-Ú_* Ío�ÿ0Nàãœr084ôygŠVšTŒ3RìXœ3Üž¦Çwm,ïw<±œ3‚#õçð«õ�ÒþËï?ÿ^öY[�Yò»ßòŠfÆÿž¯ùð£cÏWü‡øPè¦loùêÿ�ÿ 67üõÈ…>ª]Çůýtþ•9Fÿž¯ùðª÷‹‹\±oÞu8ô  ÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE…7ƒôYµiµF†éo'*e’;éÓ~Þ€ª¸˜ÅnÑ@© é‘êo¨¥¨[§$— Ø F ÎÁ`2}j…�‚t ;rÛÚÜyl42^Ï$NÛ‘œ©ÎOQÞº(O éËeqohžA¹Ø“Hå¥fˆ0-,Ù Fá�ÀÝœUýOEÓõ…Œ_[ù¾^v�ì„ÔeH88z¿Ef_ø{JÔÖ%»³GX“ËUV(6p…#rð>S‘íRÙi‰i-ôŽÂSw.öpB*ÐüÉõ«ÔP]Ÿ‡4‹. ·±ŒEpž\ªä¸d€Ÿ1?(ÉÂôÒ.㸎[$òî-ÊDFdS –*€)@ÜÝ0y§Ï i—:Šê[¤‚¤ºÈʯÝÜ±Û â´¨  á éƒJm3ìŠlÚF—Ëf'Îd, 9q$x튄xgH[/²-³,~gš]g�H_Üd ¼œqœôâµè  ‰¼1£OmonÖARÙJÄcv�”–”‚A<�O=óV¡Ò,-î ¸†Ù#’ÞÜÚų!R"Tí ÓUíÚ®Ñ@´Í&ËG¶6ö˜a-¸Gæ3*û($íéÿÂ'¡ÿc�'ì ö?Ú;ÛýfýùÎs×¶qÛ§³Efj>ÒõiÖkÛA,�v—zu°FåäðÙÕˆ´Ë(o..ã�DפRœœ2&í£77AÞ­Ñ@öѴ˸®­,ü¹¡VH›Ív«c* ’ð8Õ±EQEU{Û(u 9-n ¢)1»Ê™ânxd!‡NƬQ@0x7B¶°[(­f#ï�uÜÌÑœcäbÛ“�î‘W"Ð4¨#µŽ;(Õ-wùKÎðCçûÙÉÎsÖ´¨  Í;Ãú^•;OgkåÊSË Îϵ?º»‰Ú¼?ö]‘’õͺ±¾P·;‰"@h:qÅ\¢€0_Áº’Ç!·¸ �%¿Ë{:†�3µXÃc'ïg­mAV¶ñÁi1¨DD £€ô©( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( jŠJ*ÌÅ¢’Šå5 µavu 'Ã÷ÑÞ‘²E–K*uí»g#±öèx»¡}¢ÙÊO¤ê <ç}ÅíÃAó¶;„‘ˆ€ó5mµëa¨Ý†�®�æ}¢=˜uØ <uŽÄIªx‚ÇGÓ⼺2l”�‰nrÉ;G`2O �š™¬ÛM:X5ýKPgCÔP"(ÎàS~sÿ} ÌOèr\ù(׬\XÌC9ØÜîÛótèkZ}bÖÞì[Ëæ)6¯vX¯4*{çæcÖ€2"ò¥‹M¹bñ¹ õ*{)öôôút¼^[Éj]7Fx<ÑÎ|•ºìÎÛsxþtnoïÎ’²5éº$É쎌˻…È †$þ{sÈõ¯öÍ�Íýãùѹ¿¼:§c©A¨=ÒÀ6Òˆ¤Ü¸ùŠ+à~?Ötž,Ó"(¬.ÚI%ž$ŽI&ba}Žq¶$r}EiÊIÔ¡É'äoéVkOÖ,õ{òmLÀÁº)RxV¶ ¸£)éÞ¶i¡0¥”¢˜…P+”Ôß[Ó.L—ÖâiÀ) J¢C”�¹Îv�qéÍ:-gKžÞââ-JÎHmóçÈ“©X±×qÎã@©j¥®¥c|ò¥¥íµÃBq(ŠUr‡ÐàñøÓ"Öt¹ ’xµ+9"‰ÄrH³©TbpœðI b�¨¬(üa Ï­Ç¤Ã©ÚÉq${Ñ’t*ÇvÝ€îÉ|öÇcV-µû3£Új÷6Vkp>\Ý£!>Šüü(­EU›SÓížúÚ+‰¹Š'•Uäÿt“øUª´”´ (P(h¢Š(¢Š)i( ¢Š(¢Š( R¾$Miƒ�ÞJ»T¯ÿ×Z×Oé@îoïÎ�ÍýãùÒQ@ ¹¿¼:77÷�çIE.æþñüèÜßÞ?�%»›ûÇó£sxþt”PîoïÎ�ÍýãùÒQ@ ¹¿¼:77÷�çIE.æþñüèÜßÞ?�%»›ûÇó£sxþt”PîoïÎ�ÍýãùÒQ@ ¹¿¼:77÷�çIE.æþñüèÜßÞ?�%»›ûÇó£sxþt”PîoïÎ�ÍýãùÒQ@ ¹¿¼:77÷�çIE.æþñüèÜßÞ?�%»›ûÇó£sxþt”PîoïÎ�ÍýãùÒQ@ ¹¿¼:77÷�çIE.æþñüèÜßÞ?�%»›ûÇó£sxþt”PîoïÎ�ÍýãùÒQ@ ¹¿¼:77÷�çIE.æþñüèÜßÞ?�%»›ûÇó£sxþt”PîoïÎ�ÍýãùÒQ@ ¹¿¼:77÷�çIE.æþñüèÜßÞ?�%»›ûÇó£sxþt”PîoïÎ�ÍýãùÒQ@ ¹¿¼:77÷�çIE.æþñüèÜßÞ?�%»›ûÇó£sxþt”PîoïÎ�ÍýãùÒQ@ ¹¿¼:77÷�çIE.æþñüèÜßÞ?�%»›ûÇó£sxþt”PîoïÎ�ÍýãùÒQ@ ¹¿¼:77÷�çIE.æþñüèÜßÞ?�%»›ûÇó£sxþt”PîoïÎ�ÍýãùÒQ@ ¹¿¼:77÷�çIE.æþñüèÜßÞ?�%»›ûÇó£sxþt”PîoïÎ�ÍýãùÒQ@ ¹¿¼:77÷�çIUÚþÍ/VÉ®àL7,A¼�P¹ÍYÜßÞ?�›ûÇóªë{h÷�f·0µÒ.æ„H ¨õ+Ô l…•̳Eå¼²Bq*G(cûÀ?µ¹¿¼:77÷�çYöÞ“ªÈñéÚ¥•ã ÜËop’¤)8§¾­§ÇI-ä1"Ì`-+„`þN2~”wsxþtnoïΫ]_YØ¢5ÝÔêíµLÒ }zšt×pA-¼rHÜ9Ž!‚w6Òݽ”ŸÂ€'ÜßÞ?�›ûÇóªö×¶—Šíku â6*æ)m#±ÇCIk}g|®ÖwP\*6Ö0È)ô8èhÎæþñüèÜßÞ?�WŠòÖ{‰­â¹†I¡Ç›8,™Î7£8=} 6×P²½iÒîÞá¢;dHaô8é-ou[k‡¬S\";p0 ÏZ˜êBôYËqvFá”y„zíÎhÖæþñüèÜßÞ?�Auykcžîæx�Á’g¿™¨çÔ¬mcŠK‹ÛhRbm$ª¡óÓžhÞæþñüèÜßÞ?�%E%Õ¼3óēNHŠ6pL �£©À犛sxþtnoïΪɨYE$ÑÉyn� %V”žŒÃ<'Ò¬ÐîoïÎ�ÍýãùÒQ@ ¹¿¼:77÷�çIU®u +9 †êîd¸}�¤’27¢ƒÔý(ÖæþñüèÜßÞ?�Eqq ¥»Ü\Í0Æ7<’0UQêIàQöˆ>Óö:??g™ån¶ç±×ã4.æþñüèÜßÞ?�EÄ7P$öòÇ42(d’6 ¬=ARPîoïÎ�ÍýãùÔ/qwۼѬ҆hã,8\d�ßúŠ–€sxþtnoïÎ’Š]Íýãùѹ¿¼:JkºDŒò:¢(Éf8P÷7÷�çFæþñüê£jv b/šúÙlÈȸ2¨Œ�÷³Šž)cž%–)HÜe]A Ð››ûÇó£sxþuŸg®i…ÓZÙj¶77 h¡¸Guà’ÏSVòÕ<ý×0�³�ÓeÇî†3–ôãžhÆæþñüèÜßÞ?�fͯèÖóÅúµ„SJ¡ã�îQYÔô È>µ£Ö€sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷�çFæþñüé( ÜßÞ?�›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷�çFæþñüé( ÜßÞ?�›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷�çFæþñüé( ÜßÞ?�›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷�çFæþñüé( ÜßÞ?�›ûÇ󤢀sxþtnoïÎ’ŠµEP1š­~—rZ7ØfH®†O1r­�ánà™бš*ÌÌ‹;ÝORºŒ›Itûx?׉”•ÿº½¶»»ñŽõ­"—�”;!`@eê=Æih gž^ýªãAñ=³kó™mÈh™!/4B%Æÿ“8䌌u«~!¶{K 3N°˜á‚a”²©!Tð\×Eÿæš-58"‡S ™AÌ�¼y9è ©¯ô{mFÂ;)Þqn˜Ü±ÈSÌP1µˆêqH.y ½í”·ºS ±�Zæ)÷±±‹b+«6â€2œv8'¦JÕñ‘?‹õ B×LµžÒ->o2R uÛ™”÷*]}›éo¤Ú5å•ÈM�fŽ‘"Œ{ UmKÃÖz­äW( –cBºïG!¸ÏT†h°\ÍÐJÚøŠîÚWT”éö1ª±Áfl�ëÀ'𮦲ŸBµ&²d˜N¨Ë 6€Äc9FqÏJÔ¦!h¤¢˜ šLÑšLÐÑIE1 Fi( 4¹¤£4 3E&h¤Òæ“4f€ ÑIš3@Å¢’ŠC—4ÜÒÐÒQš3Hª “ýa©ê ?Ö’†QE‹âÓ·Â÷§Ù?ô5¯;Ž8Î…%ߘÂE¸HÇ<U�ôè3;|%~}“ÿCZóÝ/W³´ÑæŠâÜ\Oç¬°ÆØØHR2Þ g§zú,©KêÍÅ_Þÿ#ç³NW‰JOìÿ™Ñ\ÛÇ “ #I†èÙ”€ÃÚ´Ö(íÓµk¥ŸPŽK�,~î'�ùq·÷ÕG¿Úê;b¾0û�ð߇b³ñ…Í­å�•ÕÍ•³Ýå"�]¼ÕEH€»d€2×?£CÄÕ»«+[äT»¶†áƒ*ËpèF{ИX˨Ái ÍãX¶ðí¼Šº”E÷¯ÎdQÈÁ8Œ1ç/º-j[�NÏQšÎ)"’ÏEskÕf™ ÀÿiUý÷]eÍ�¥áŒÝZÁ9‰·GæÆaõèi-,b³’êHË3ÜÌf‘˜Œ–Ú~(…yþ´Ð kâygþÂŒOå/—æ ¹+Ðló½ñšé|;tÿÚÚ†žñéîmâ…ÅÍŒ>ZmøŒ�ÍÊíÏ^Œ8»ocif²-µ¬,ŒYÄQ… ORqÔÑkeicŠÎÚxË) a'©Àï@Õ�±¶ñψ˜ýž(��«Êxó9bµB �x²à¥õ„K.•/Ù.l£UŽÒu Ȥ�Ç•!²ÊÜ ×S‡ô[[ß¶Ûèú|Wy-çÇl‹&NA;€Ï99úÔðéZuºN�ØZÆ“äL© �'o›ŸÆ€9 t¦žÚ†½e­C=ü0A–…#q;.J®0Xó8ÚGQÖŸâ6¶þÓÓîa–Áí£Ô Á�r×öƒ¼q•ÊàóŽ+­m2Áî"¸k+fžˆ¤1)dŠq‘øR�:ÄÞ‹ÓgnnÀÀŸÊ_0÷±šÆ¿¿Óôû /u˜59cº‘-UcBáØàB û¤õîkX-4 ZiÓAgu¬ÝA%´pÀ%™Cv‰7r}wÀ®ªëBÒ/�%Þ•cp�Ú@³[£€Í÷›‘Ô÷=êð¯‡dŽ8ß@ÒÙ#"›8ÈPNN8çš»¦Û‹=.ÒÔJfòaHüÂr_h?Ž+•ñ¼¾­¢ÜÛ†k›%¸»‰W«”JÿÀ—rÿÀ«°··†ÒÞ;{hc†ÆÔŽ5 ª=CAÍÍ4±‚Ê‚Ê\ÙÀ ,–òxÿá*×b!f½Ñ£½‹Ì@À!’U�*À�¸¨H#©5ØÁ¨ÝÞø†þ'Ôã°†Ââ8VØ¢:²+n%¹Á,TmÇÝïÒ·§Óì®L¦âÒÞS4b)L‘†Þ€’²9'ƒÇ&’]>Êâê+™¬í下ý\¯—O¡#"€8È5½kû -B]IÚõ&±Vh%² Ý<ÃêØP£Ð·L~r¡�dÚ7$ õÆ@ãØP!á]4ê? `°–õî–ïO€á’06  t÷É÷®TëS}�|d#o0Ûeõçþ=÷ãÿ>Jõ{k+[ âÖÚŽ]ÄQ…ÜÇ©8ê}ê?ì½?ìŸdû ¯Ù·ùžO’»7îÝ»ÆwsŸ^h‘–êóJé6ú”:d6— ‘ù‘« ƒµ�Ý»øÀ>\ž½*KmsX½¿¼Ÿ{A ¦™m|lDJ]äu�˜÷�>Lzç¸ç=mÍ…�ãÄ÷V�NñÑ´±†(}FG"ÛÀ—\$1¬Ò*«È`¹À'©'S@6›q=ߊü5uq«Å~÷3m�V-Â#…Ç;}7dñÖ»Ú©•§ZÌf·°µ†RI/*­“Ôäõn€ (¢€ Žt†HY.6‰†d©ù©*»;[ûg¶¼¶†æÝñ¾)�:¶FAàò GÃÍlÞÒ!Yôøîö²›´ªàœárvç¡j׃.ìí¼72O n·*O˜6JË#hú|�H úf¶bðþ‹¤–‘iÛHÛž¶@Œzd®0M[[;Tòv[B¾@", X#o§”Éh ý�«éšUž¦š�œö’É»Ë�tAJaƒ å[q6yèk\Žý¼M®\ItKI­g¿·/:ÆG£ç#ø±Šô+m>ÊÉä{K;xS™(•KŸS�ÍH- Y%‘aŒ<ØóX(Ëà`n=øãšá58®oüU­ í2%Ò­·Iy ‘YI›H`È=«©ð´ésáM&Xâ’(ÚÒ=©#n`€2{ý{Ô�áÍW…äÑ´çxPG5ªŽŠ¼p ­0€;PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPª(¢€9j)(«3ŠJ3@®u {K›h'b†áŠFÄ|¥‡ð“ÐØwÁ«Y¬­n¯­?³¢·W[�VI¤HTcæÇvþèõçµhC“qowØ¡w¹Ë62Os@jwãN²3Œ²3¬qÄ »0UíÉäö5ÏÿÂ]t»Ùìm(Õ�Œ72’ê¼±Œ´*²2pµKâ›æ´¿ÑÉ6‰ K$Ì÷—D[•vª—ÚÜüä�ŽvûV½ý´mGAšÞÂÞÚ]yLp‚¥xÄŸ”�7€hèJÁÔ2�TŒ‚;×?®kz¦�mkgcg9¹p‘¹`猳 €«ÜçÓ×gÂòÉ7†l ¸,‘ù[ƒn• p@àæ¸¿Z OX¹�Ig"iÖ�<ŠÖ»ˆÚ¥–7“p ±É ½¹ ŠëôÍm¥Óo5ë›_²[³2ÝWåûÄ3œvÇ­cÿÂsptÛG‡N{‹ÉæR¾Zó¹“%ÁÜ#ä� ƒ×Ú�»ÞA­§Þ]ÄUíD±ÁshYa@h‘KnOUì@ãšÀ:\&Á¢‡íMs¥Ø\»3DÖûÀcùYË7Í‚vò1Š.;«ïÚÚi·¾\QKtè°ÁwuE‘ˆfT¸Ú3œóYš7�ÅÝͬƒi1yòHŒðßäÆW%AR¸9à A==*…Þ§¢éú~ŒÖ2Á$]Jb·žíR6!\ï †%AʨnaéT´=nÀkºh–[híRB°Åý¤’,&H‹wŒ1î`¶8¢ácÕ(¤Í¦!sFi¹£4ìÒf“4f€4f’ŠvhÍ6Š;4™¤¢� š)( c¨¤£4€\ÑIE:Ê‚Oõ†§¢¤eZ*Õ•ªiÑjºlö3–̸%zŽræq?ð«£Ïü…Ÿþüþ*½úò=>Ê[©A)É©ì+™ÿ„ê/ùðoûûÿÖ¯GSµ‡z|¿SÎÆGä¾±¿Ïô0¿áWGÿAwÿ¿ÿŠ«ºOÃË}7S‚öKù'òX:§–n2rkJ/[£Y­8Ù°Îvß|cšê£‘%�d�•Ñ€*Êrõ¦#�„yjÊÉù/ÐŒ>QóRWk×õ+ÑV¨¯(õ ´Uª(.í$'‰w<ß¼;ŠþÜýçØ{«ŒZ”Óª(?íÖ¿óÝ?:_·ZÿÏtüê÷”ŸÝ•Rt~Tî+~Ýkÿ=Óó¥ûu¯ü÷OήùIýÑùQå'÷GåHe/·ZÿÏtüé~ßkÿ=Óó«žRt~TyIýÑùP?·ÚÿÏtüèû}¯ü÷OήyIýÑùQå'÷Gå@>ßkÿ=Óó£íö¿óÝ?:·å'÷GåG”ŸÝ•Tû}¯ü÷OÎ�·ÚÏtüêß”ŸÝ•Rt~TWíöŸóÝ?:>ßiÿ? ùÕ¯)?º?*<¤þèü¨¯Ûíçº~t}¾Óþ~ó«^Rt~TyIýÑùP_·ÚÏÂ~t¿ÚŸóðŸ�Yò“û£ò£ÊOî�Ê€+hZÏÂ~thZÏÄ�Yò“û£ò£ÊOî�Ê€+hZÏÄ�ÚŸóñçV|¤þèü¨ò“û£ò  ßÚŸóñçGö…§üüGùÕŸ)?º?*<¤þèü¨·ö…§üüGùÑý¡iÿ?þugÊOî�Ê�)?º?*¬u @3ç§áÍW ×—K.°Ç÷7 >µ£å'÷GåOé@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕVеEU¢­Q@h«TPZ*ÕQEÊfŒÓsFjÌÅͤ͠¢³õ+ùtáÁ·2Y‚Eç-ìØî£œ÷}jêH’ƲFÊèÀ2²œ‚B(ù¢³5›¹ííbŽÕÂ\ÜÎ�FÅs·',Øï…  æÿ\Ø“ÇpñÌ’Éh$h\Lcä+ªÀ¥wHÃP;¬Õ{«+Kèü»»X.#Ül±‡‡CƒÞ–Úâ;«Xn"9ŽTWSêÈ®~ç\Ôijév¿Ùðù!c»fW¹ 2LdpéÐò)�Òàd �€hHÔú×07ù¸Î~ç~õ/‡õÝGY‘¦ìõ„Z«0¸· œ‚xô{Ñp±Òã eã§žTóÍ?ï‘\g‡ü_{©O¥¤×]Ë^« ´ $¶Â“—Ë7cœugþMTéM¯­µ¡ÑÁ/åe¼ó8ߟ»œ|ÛqÓ½ nh®z]SU¾Ôo-ôh켫2©$—;�˜åCm]½rs×¥gÜø‡X›OÓu<ØÅìñÛn!wxä,U²ÁÀ {Qp±ØæŒÖ$W—çZ³Ó¦–"[½ÅÓEU|�¨ HîO?ÃïQCâ 7W÷;`’íà´�c,Ì#X€ “óç°Åt£5Íéž*¶“@¶Ô5’6¸–d�b�˜¸IA 2zIþU¥»¦L“¼whÉ q#p# �Àã‘òžž”�*+}eF¡ ¤Å,!²{Û–1œì?sŒdpã¯ËJž,Ñ$ŽWKàR ¬ÇË|mf qÊä�‘ÀïEÆmÑY—ºþ—§K$WwB&ˆF_(Ä.òBä��’ W�ź¯-úïy{Ln ±8²>\ž›±šÛ¢³&×´Ë}DXKt«pYWnÒB³}Ð[öäæ­}ºÓioµC�/’O˜?ÖgÞÏn´†Y¢¢Žxey9QÞ3µÕX‡Áôâ¤Í;4fªßßE§YIu6v áTe˜ž�Ü“€½WÒµ9/|Ø.­¾Ë{l÷àUƒ`d_PGjC4¨¤¢�uQHaEP/‹ß ^ŸeÿÐÅy€”ãîgÞ½3ÆGo„ï�²èk^iÂ|=,åI”]"pUŽ?Jú§ø ÿ{ü��Í•ë¥ýßÕ‰¼–¡Ç¥t¾ñ¶W±iÒ{iÜ*Ö6'¨öÏQøýy›Í6‰Ñ$ã¨;O\7¡Ç85¢«¿�a‚Ù^  :˜WmxS«MÇufþã‡í(ÔSZ;¥÷ž³Xš·Šô½ñ­nÍÙ•"YŸÈ´–`ˆÌUKRJ‘Ï¥m×�xžúÞËcuyggÝ…™–{«”‰Uâf`X·N:g'¶~Dû¦±ñ†“¨ßÃg¾I¦‘âO>Æh”º)f]Ì d3ÔêÏÄÉ}¨]Û�c�2Þ6dKˆÚ³çù‹ŸºéÖ­k:�ä3ê¢]BòÖö#:-¼…¸o,º8�™2¤€�hÑh®,ß3x¢xõÍFêÅÑ û¼22G0( ž?Öû”ƒœ8ÍA¢jx·Éšúé´v–ìÉÎ.$ãÌFlüÁ~}€õ<í€;º(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÌéQêcN{Å%ÄxÚÛC‘�…±´1aIÍi× âh·Þ$¶ðôº•¥ºÚ\ÅsvòÈ—V Iž¬X)>€c© ¥5í2MQ´Ô»St¤‚»H€ÉPØÚXH"›§ø‡JÕnZÞÊñe”'˜ÖÓ¦ä$ëÈår9ÇØ°S¦èìÔí5»‹©Ô¯)yŸÍ'û¬® û±ëN´ñ%‡‰|I-Þ�¨X5Õ¥¬Öºe¼“ÓÈØ/!QÈAå¨d€Ç¦(³¶Ö,/5KÍ6Þåd¼²n#Pw¼¹=2pxª²ø£J·‰¤žá£Q4�¯ÈX¹ŒáÈ “µNA'�Žk‹Ð›PðÖ¹­½í„ ÒašwŽìÊóI¾v þ­rΟãc9ãX,>ÔôÙuGýÀÒ¤�§+�Ó—WqÇñ9ɾÓ@%þ¿¥é« ]]¨ó”¼b5i Æ[ Ê2>nœõ©/µ{=8[µÄ›cœ±dmET.]‰<( ×ÔŠókhu?Z[Éw¨Ï§\.ƒm²¬ '›4~a0üÊyË&UpNxÕ`×#RP¤4hb–6'�âgR=zŒâ—NãPI›[ûN™¦è÷IyilÐ4*Þ^Ñœ±2Œcåä°½ñ6—a©ÿgO%Á»Ø®RI¥ ¬HRJ)%OSÚ¥—_ÒáÕ›%ØE•6ìb¡˜eT¶6† Œrs\�ˆ&Óàk›­'P¿_´¥¬[äj*2™B‘Nó¸òOB TÔdeñÖ&Û3êöîÚ7–I¹ å�:·QŒ+>_Ý€yÉ ïVÖ¬tH!šþIf”CŽ•�ð[PÑIéÚ —ÄúLv÷SO,iq¸Æ¯m(�…8bcÛ¸Ü�Èõ¬mDøvkxΡªßˆ¡Ô'‘nY#òf•“ÌmP‚Œý ®yî¯%‹Ož÷U“Ju‚ñ-u;ˆw4Ñ´ FŽ(¨Ý˜àc½ztRÇ<)4.²E"†GS�Àò>•ZëU²²¿²²¹œGqz̶èT�åFâ3Œ=qU¼1ŸøEt ÖfÈ‹HÇÙŽs ¼óùóX>6²–÷VÑþÌ»¯ ŽâæØg–?-”gÜ�§Øšèe×ôÈ.¯­^ë÷ö1,×(¨ÌcFΞ‡�Íiu¯%»kÛ(¼U©Ÿ:ÏQ»Ð£½l‘3K>Å$rP"ÿÀk©ªÞ-»‹WÔ®í%Žâ5Ó­£‘‘&ˆ¢œàq&\¸9ÎíÖ€;+Î-¦ÔG…“S}OQa6§$R‰ }žÙn]IQÛ…·P 9àad¾�ôËño®JºDW‘ý–îæwA:yYxþÐ`»ºIÏ ¯4èÕFïW²²¿µ±™ä77Yò£Ž's€@,ÛAÚ °Ž5ƾª.N–ڕéY;¤†fW’q&i'ååGñœb«iö7z¿ˆ4yõYoã¿—A™¤Ù;ÀÄù‘¨%T�¤†É¸î;Û�ZÂ×H“V’å „qyÆxó"ìÆw ¹ÈÇ¥'öµ‡ö¯ögÚSí¿gûW•Î|­Ûwg¦3ÅrÞ °²½øo˜³Ë+Kiö{¸æ™œÃ!Œ+&�€t`Jä õùðÂø¬CþšAÒñ�›gòñÿ�#ò ]°¾·Ôì-ï­$ó-®#DûJîR2UŠóíUΕu6Ÿs¨ÞiöÖzt+¥-©*&”+à¬a„FNj[9u«ÝcQ’â{•½³Òm.Æ9JÄnYeÜFå|àPg.¡m¡mc$˜¹¹Gx“iù‚mÝÏA�ï­Y¯8Ч¶ºñg‡f‡S¼¾¸6W&ïíÇË”ˆ²6‘„9ÏÊ1Œt¯G Š( ¢¹¹†ÒÚK‰Ü$Q�Ìǰ©j½íõ¦›g%ÝõÌVÖÑã|²°U\œ “î@  GÄšOöU¶¤.÷Zݨ+–—©ùP Äàݪõ�å¶¡iݤË4 £¯C\‡ã]Døqar×–óLŸ¸H–P?zI±è£$ž‚·<3w§[èvVš¥½ÝÍÛNÂk|´o9&I0GÇ=1@šö™}~öV×BIÓvp�´í8`XƒÁœRÏ­é¶Âý§ºXÅ€SrYOɸdvç#Ó>�kŽðUÕí«èÚH¾šäÇdSP´’Qe"æ KgﻨÀªÚ¾�¨OâÝsT·�Í—5­ÑÓ‚.Ycϸ\•ÞÁ ¾ïÅš=•ßÙn'¸YD+;i3ѳ‚ä&îŸ½Ž†¶b‘&‰%‰Õãu ¬§!�èA¯3Ôõ>÷Åš„«â–Ò ½ÒmZˆFMÊ“7@ÊIÀ=Ÿ¥w37…t¯>ÐZJ-cÜxPÁäqØò(ZŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( C4f“4f´3ŒÒfŒÐ=FÊM@GM²ÐçÏEᥗ=”óžç§­[EHÑQ*(ªŒ=.i3@^!´¾ž÷N¸´e-ÌŒÂÐÃæ *ŸÞü¸Áp{ò+ßFšÒçí6Ún³ Ç?½Ž -[ž¼�šíóFh°\Îðý­ÅŽ…kkr’ T �›ŽÀvñ�»AÇéYž ѵ]if´'MkI1Í"0šß¦Jã ž2Et”f€2F•*øœê�¢)öl rû·îÉã§ãT#Ñ5K�rÎþüéèö»³=ª°’pT®Ö¢óœdò+¤Í .qú_†µH­´{KÕÓ¢‹M‘dó­ÙžI ‚1Ê®ÐsÏZ›þÍPiM -ͨÑÉ)æá¼ñ9Ù�»œ|»³Ó¶kªÍ¢Ás]3U±Ôo.4y,¼«Â­$w;‡–áBî]½ApqÓ­5ü8ñhÚNŸo2¹³»ŠâI$ã~³�y$“�Öº Òf‹ÏêÍq§k�¨Áo-Ç�§¼*±¡cæ¡.€ã×-ùSƒ{bt«�9íÞâÎÙ­äK’Á_vÒΆܹéÎ{WGš3E€ãÁ÷ÑÙéíçC%Ý©¸WE¸šu’Rù˜`Gr? j{ÏË-¾Ÿ £AoÇö{ÔÞìáÙT¶I9sÙÍu¹£4Xw9ñ§\j6 %<©¯Ä–ЉAP¨¨c\ñœÜßF¤“Ã�su¹h�·öKØJ �ا#ŽŸ)ý+¡ÍÉÛøgQþ͈^\[˨µý½ÍÄ ¶ÖHŠ€ÎÕÏÔšžû÷w6úäi$¯î¡š"XðËÎî:ü‡¦{WKE!œ¤Þ•µ›™±öwW+pë%Üñ”#nFÅ;îäŒ{âº_±Zm+öXpeóˆòÇúÌçwûÙïÖ¦¢€0Äò:´ºAµf½�‚“œ|»OøVzü÷¼ÿ¿«ÿÄÕÍ3Àz•ìFy%ˆîA,€€}p®ê™ž ÒqNí5±ÅO-ÅÞ*MY;îu5²µk¶»kxÍà �¤* �3è ÌÔÛ—ûÃó£rÿx~uóÒµ�«Í Ím–-ìBARAíÁ#ñ§Éo ÏË nð¶øÙ”�‚2= ‰§î_ïÎ�ËýáùÐwV°^ÚMksËÈc‘£) þNóÃú6£wÝî•ess%švPF àÖ†åþðüèÜ¿Þ�QÕtkj‚þ9$ˆg(³:`† Fà}E^ £rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ�—ûÃ󠢓rÿx~tn_ï΀!»´‚ú ÂoŒ:I·q2°eéîzž“rÿx~tn_ï΀¡·´‚ÔÌaM¦i ²“¹Žyö~.åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´QEq¹£4ÜÑšÐÌvhÍ74f€3u¹®,íF¡¨¶ËI ‡ 2œ|¹êû§×Žõ¡ ¾t˱Óz†Øã ¹õ¨g³‚æâ ¦RæZ5'å ýìw#±í“V3@ZñóÒÏNÿ¦\*HÆcP]ÇÐ…Ûÿ®JÓFŠâdXl$‚æd›?ñ+-£Œ˜Ù%©ã}æÎkªÖô5Õåµ”ý•šÜ8 wmçÆCc'nåäm9îk7þ/úvð×þ ?ûm!�›yöý2Öì yÑ+‘èHä~Ík2\Úk“]jW:”fì×oû¸p>o5yê{�Fjè4�aÜm³‘ìçýgË×îÓtYnm5Híõ›­J=NO3‡“u­ÏSû¾Ë�Î8ÅY ²bÒ;I<’xÉõ5KNÕçFd³û]æ¦Ò_miDj� bU ��^•{WÒ¯./%¸°’4{›6´•œ‘·œ« ÈÜÿ˜«Z µÃÚÉ ×’ÛE䤖Îù||‡ ‚8Íé¾.v�¥ÅpÉ5ìé,ŒnîÄ@(�Ž]³“ØcÓ¨ž3�ì®n¾ÊÁRÎ;«u/ÌÁ‰]½8!À^ýA«øZÒÞÖÒ+[«Ëy-U‘'ŽAæfÜU²#>£µOwáûKë�:{‰'y,HØÛÇï9Ç<ªŸ¨¥¨/õ‚úûS’ãH°,aÁ•Ææ\㲪ó�⤗ŗ¢su¤´F(Rè<10–ÚÌp8+×ýjôz/Ÿ¤ê6w¯ójJÓ4'�åP B;Tí£ZÉxn$Þå­>ÆÈÄm1ç'̆ǶMuÖ÷ÝÛ¤ðH'Vä~aÜ ÛÇlÖ߆õ™¬µHm“ Ä� p ãpô?ÏòƸ¼º.Ô•š1ÁfuNJ®éþ£QEsÚÏŠ—H¿–Õt»Ëà ¼w¼ ®ì‹÷ÝI9SÐðO¢:+›°ñq¼Ôm¬åÑoíEÄòÛ,²¼%D‘«3)Úäÿç©u_[é׫m/wå¶oZ‘j˜?3c©ï´s€OA@ôW?â?&�¢E©[CöÈ¥tU’9Ë Hù‹3(Æ3Î~¸5^oõX#6o‚([ùä+þ‰+ÿ«F ‘þö Æåìh¨¢²u[íZÍÌ–z}„Ö‰÷šæüÁ·®xòØ`sš«á_x‚+‰î4¤´µF épd[�V\¢�½0qÏjè(ªš®£‘¤Ýê3«´V°´Î¨bdã8欣‰#W3@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÈ¹ñ ½�úÛOkx‘4ËÚš,D$lm\““’@ÈgŒÐ½�‰l¥Ô…š¥ÀV™íã¹)û©%@K"œç#kvÇÊ@$ÒØø†Þ÷PK#kym,±´Ð}¦-žr)•ÈÆåá€<ô  z++Oñ ާ­j:]·˜ÓXóœ¨ØKnSžH*A㯵U¼Unƒ‹K™�¤˜GºïfŽ&Øòq…ÝÇrxÆs@ôV4þ%³AoöXnoÚxÊ­¤{Ȉôs’8=‡Sƒ€pjÆ¡«¥„–¨a’O8;°E%’4BŶ€Kí\r€4h¬{Á9»�¬ï¡¹¶�eki!ÌŒŒHVP¤ä¤uãâ§ÒõˆuF¹ˆAqmqlÁf‚á@uÈÈ<#ÐÐ�‹oâ�>âèŶx¢>g•s"b)¼¿¿´ç<`ž@ÈŒŠ“Kñ ®«2Ä�\Û¼‘yð‹ˆöùÑd ëÉã‘ÁÁе‹uâ!²ú\V¡y,QÇ$²[ˆöF°\–u?ÂzK7‰¬ ÔÚÍ¢¸+ém-Ê ò£•öíBsœ�ËÐó ‘@4Vf³­&Œ–¤Ú]]Ëu?‘6ÁKÚÍüL£CÞ«ÏâD¶ŠÔI¦êîáAf¨�*"› ·¯BIÈã4·ECiw ý”–Î$‚xÖHܰÈ?‘ªZŽ»i¥êše…È�I¨ÈñÂÊÐÊ3óñžƒæ€4è¬câ[FÕu=6nn.´èRY’$vðHUç–ÀéÇQ[4QEQEfÞk1ÚjÖšjÛO=ÅÂ4§ÊÛˆ£R »#Œ°àdûP•™>»e†ä×£ó.,VØÝüÏ7dÇo\Sá!°þÝþÈÞÿhûÛwcäò÷c¯¯|zP­SLÔ#Õt«MBäŽ+¨–dY@ †F@'œZ·@JãS†ßW²Ó]$3]Ç,ˆÀ  G·9çý±�Æ®ÐEPEÄÂÞÝæ1É&Á�‘.æ?AÞ€%¢±¡ñ7:-ž§mc}:Ý�ÝA@Éßïsµz¤Uí3R·Õ¬#¼¶-å¹e!ÆYIVR;A…[¢²ôívRॽ­ßÙÈcÛEˆ¤ÁÁÚsŸ¡ Û5߉,l›PY„Á¬Z4e •äEAœ’r8æ€6(¬ ¯¥®¡%�Òu)¤†Ý.'h–2!VÝŒüù'äoºJÚµ¹†öÒ«wñ¬‘¸þ%# þF€%¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ÕQ@VhÍ74f´3šLÒQ@õ ‘¸‚@Ï$ÿX¥¬_š6oþÒ ~ÄbÆýøçþ�½ž1ïŠÕ‡Íò#óöy»Fý™Û»ã=³@ÍÔ6vÏqq Ž$f5Ÿÿ ž0dûdJH汞4õf@âj·ˆo#ŠëK¶‘fd{�9ÄP¼­¶1¸|ª ûæ:æ­!ŒLƚчŽxî®a±ºi.€ýáäø<±Å ‡š�¯-”Îâ!ä Í—»Î[ÓŽyªšã_hvwgÍ1…“ ƒ½~Vàò9¸Íf;¶ñµ9E—J¶–ÚkØwJ¡áFXŽø¢ác»]JÅííomšÙa*”SîÙÅKÄ3ïòeI61FØÀíaÔt#Ò¹+‹%ŸÅ–öðʇM¾UÔd�z;Å€1Û ˜ÉÿsÞ¯øfh”êÈÒ sªO…,2y�¨ïìå0ˆîàs8cYóõ+ëŽø©#žŒ‚)QÌm±Â°;[àúǽyÅ¥œ÷–~û#켆Öîkv=7¬ˆ@>Ç•>ÄÖ׆µif´Õom´ë‹†›RbУ"´gÊ� ïe(¸ìt�¬i‘^}ŽMFÑ.²’Ó(|žGËœ÷bK˜"š(dš4–bDhÌ9'¾yþ¯÷ø¯÷Ö0Á˜Ì©pŸ¼8� ùžÙÁæ�bòëQ¼}RÓM¸•4¸axØ:b'ùe”6Xvm^ïJác½¹¿³²(.®à€¹Â d ¸ûdóO7vá¦SqèT4£xÌ`‚AoAÁëé\µŒÚ]ε¬Ï©›f2žq·ØÆÛ»¶wgëVK‰õ½V[DŽ]"(­'º†>³D!W¶äã¾ïNácÐ ¼¶¹8‚æNÅ|Fá¾Vû§ŽÇ¾* µ­.Þ8¤›S³Ž9så³Î > <àÖ-�í¤>+¾�®"Ž › yav`ªÈ äŒúd~u…§¥Ùÿ„_ìÖöòÈö×n劮Öt 𧱨¸XïúÚ8¡”Ά9�R6S¸9n˜ÇZzÝB÷rZ«æhÑ]×€Ä�ÏNvŸÊ¹{M5ôÍSC³�ѳ%ÝÉX׬�ÈU€بžþán ¸[c«ê-ºe "‰ª`2Û23ýúW×Eq æA¨æ'ØáX­€p}üêZó¸5KÝ:Úý-n ò\ëO Ý Œ<”9ˆMÇ玼t¢ºþ§¥Ão}«¶,ó<.–I o�‰B@cµ”€qœqEÀ맺†ÛÊóŸo› �8',z>†¦®gOûeÞ£¥Å¨?™qgjn®>P–Lª EóåZðÿjì³óþÇ»-ö­›±Œ»3ïŒçÞ�óKU­ ß–ßlò|Íí·ÉÎ6gåÎ{ã÷« Z3šÇñÔðZG+r¢áü¹'‚•¡Ld�“ÐpN{U-h­5#a§Û^.›"Ki,Kn㺌†ëŽÇ>¼ :lÑIš) í* ?Öž “ýa QE‰âã·Â×§Ù?ô5¯?·S7‡$òá2J×±¢í'(ü ï|hqáóìŸúטØx†};NžÖÝ‚4ÌÍÆY8#åô8=~µôyM9K ù7æÿ#ç³IEbW6Ü¿æhÞhóÙÛùÙŽm‡lëî0·£�LäUÉJ§�Ò4Pª/P:}á\ÕŽ«6Ÿt'‚cžŒ¬2®Pø5¡a¨¶¥ãK;¢i¯ŠŽƒæéN�D›–ªÏ_¸ó¡:m¥Ñì•çÞ#¸TñóÛNÒ­œ¶6’NÐÚË;‘ó0P#FÀ$IÇÆ{z &ÕÜ[hÜF3Žq_}‘çQ\E?Œ´x-î§{I¯îgͦOnêϤþõð©ÀÊ·56ËJ¿ðµ­�´pBº“�¨:“m6I=I>§“]I�HŽžÔ´ÁøûA³·ð†¢l´§+¶[—ò. )ùl •È‚r sžzÖaz6¥}«¨Eal–ÐÏ&™ á侜•øi2x#bpOc鮉"2HªÈà ¬2÷¥*¤‚T:dt 7ƺT«á�jàkš„1}ŠR¶k䈰#?'1îÇü <õ­[-:çI¶7²jú¶¢±@[ì®°�ØÂ…�I=€ÍjÞiÖ:€Œ^ÙÛ܈Ûr ¢WÚÞ£#ƒVhÍüUc5ô~!k½þòââÐe˜ág/•ÊñÂ6ýÄŽ¬=*}gN¼’ãUó¬/n/e†1£Om¶ì#ï#"L’N2ëÒ½ŠãM£'‰¦—[Óf€ØO lñÄÃŽïÜI8È#“Ò¡Ñln!ñ_Ú¥°ºM*Yg:|l‡²ov\|�ðÅIé’8ߊî( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¸ÝgT7¾%·ÓgÓµEÓ¬¦IÞXì%‘n%(¡•H§ Oréšì¨ ÎÊö#c£µ•À6z¬×’\ùgË1•Ô«ê»G=i,ïî¼A­ÜÜý—RÓ®„Úé¦çN˜$ òÒ»s\ ôu$WsEyæŸe¬x[PÕe“ìÒÁ—p´V΂iw˱C3¶[s|Çœï;뵤¾¿ÓçŽÒæöÞ=4Ù“Ì ¤:á¾l·@G5ÔË S I¢I2¸ €ÊAžà€G¸§Ð™¯‡u Î!"jopt{{h�#�—1ïá¶‘òåÆ |¼ö®¢Îy´oµ´yŸN´Kb°D]šR¢Iv×9Œ`wZé)‘Å[¼¸Ñ71fÚ1’z“ï@n…ªIs>£«Ýi:°Ô.#Eû9³’?&l*+8PÎ7³žqœ ¹áY-®õVŠ Èôé^7…ïÃyîûHrKüåx@7s×bºš(ƒ°Ó.g�CÒ.l.Bi-9¹‘Ó *ùrF¡[£ož:`ç›c¤™oæXµ«�6ÏLžÛȽŒ,Žoî£P¶Üs’Wæ8ã¾¢€8oXÛÝÅ,vìZÉŠ$±¼ò¸�c '`\�C`œj û æñ× k}öó¨Ã$h‘Ÿ±Í íÜýÝÁw“»*¸È½Šåo-ôvµ)uá»Éí…ìÒ2›s.%ä6d’­–Á�¥`*ûìv)©C«Cl‘Ý}™ì{ˆ7ÉòFårqåíàü¹ôé4Pv€—Qø{NŽúàºKtYbŒ¨Á@À��jÆñf“qªêz[ÆÛã†áã—i+ÃcFIíó(ü�uTP˜_蚨ÓüDÒØÎ÷—Ú"¼‹v–fhÔŽ¨e^;]µTñ]ܺ®›ww+ÜFÚ}Äq³Ç aTc#„!·“œdý+¯¢€<òÛA¸�à ?ØnLï©Ho£„²Z‹‡;vãkmxg®y$ÒÚ]6ùRÒþÛHkÈä³µ6­(G†ßCyE¿ƒƒ‘ž3^‡Ep/k,ÇL›YÐî_M[&E²·F�C>þ äeq‚~ç ‘LÓ¼1%Ö­¥6·¦‹‰×E–9¦�<Ì>ô ¬ý ,=þjô(“ðf“o‚#ÒßM{)LMâ<?2M�]º|ùþðÎk“:gˆO„WRûÏöÇ™ö3”wˆ¾Ïö}ØÆvùŸ¼Ï§5ëP ­iF+û˜îtëÛÛqc:_Ù”‘ ª7Oõl~Oœà`uâ�i¢j3jÚ„÷±™5t«AopàùFè,¡™{o=@>õÜÑ@ éɈô9íô{ûWŠÎt¾šâ&¦"?¼ÇïC|Ý­zPEPP^Ý¥�£ÜÉò"c+-+œœpª ={ žŠàt½zïGð œphÚ¤š‚~àDÚ|ÃËbIÞÃnJsÆsÐVÞ‚ðÛè¶z}µ¾¤DÞh{‰íZ"$9ww ]ÌÇcxm̆c�Ìs#ìP71êÇOšÅÓüUm¨Bl¯m¢¼8·–t]’Œ«×)Ëâ›'‘O“t-O)oL_¹-œ}ìçã8ǽ_“HÓ&»7réÖ�rH&f�Käp>lg°«)ok"¤1ªÊŤ €'©>¤Ö]çˆmí.¥·K[˦€9·‹xˆ‘»‘Î9ÀɨoÅoöe ˆ|¥Ø9n1Ö¬RÐöQÛÝ]\+;IrÊÎXôÂ…{qŸ©5f›KšC–›šZ¯y§Ùj©{gorŠr«4AÀ>£"£µÑ´«¼ë=2ÎÞ\c|0*6=2Z’DŠ6’F ˆ 31Àu& °Ômu;Qsi'™%rT©v à�Æ�褢�ÎÚ¡tbä�ÅMEAå¿§ëG–þŸ­OETšÑn`xf‰d‰ÆÖFÁVü ¾'þAiÿÿŠ­�fõôí&âê0 Æ£h=2HÖ¸_øKõùø_ûö¿á]øJ8™Åº2²õkò<üf# NJ5£wèŸæt?ð‚øþ�iÿ_ÿŠ«6^Ò4땹µÓ£I—î¹bÄ}2MrñøËUŽxÙÝ%@ß4eÜ=2ÞiÚ�¾©f·6Ϲª}õªÄÇJ?¼›iù²pµ0uåû¸¤×’¸ÿ-ý?Z<·ôýjz+Î="-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(-ý?Z<·ôýjz(¢Š(ƒÍ¦æŒÖ†c³Fi¹£4Ÿ¬Å5í¯ö|P+­À"IdX”cœwoAëÏj¿ y0G÷}Šsœ±ÀêOsKš(Ÿñ%ëZÞéD›U‰dy™®î<˜÷*íP[içç$ µ`Û]Eo$µmx`#†]f= 0 ò¶á�¹5ßfŠV3ÃrÉ/‡l¼ÌHü½Àä0RT0=Á ÷±uÕ™u çÓlµ85_”G4 ˜n0<Îvàr>l]mÀç—M#Ææõ �§Ø„„¨>_��¤ƒÓvÎ>•KMIáÖ-ÓL²Ô¬í\¹¼µ¹OÜGÁæ3ÈÎìp§×QE†pz&�}o€o~Ý5±…”Bé�±Í´€Å@,>n„õæ¬yW²øZ? :ånÂ¥»Måþä(aûÀý: ã®xÅv”Q`¹ÍÅ=Æ…ª#é×wKwqö˜Þ=á‰Eÿ õ<`ÔÙWvZ‡-6’[{Øža,aÉéØŒ×WEŸ»»M3Äz…äü§öbÈžþ[¹`?ïµüÅgO¦=±ÒãÔ¬®/l–Ù̱À…ñt̳(õË`ö®ª{Kk¦Cqr”ÎÝê3õú ž€<ét½@iÑŸ7“É;sœb®Ræ€!·¶û;ÎÞ|ÒyÒoÄ��œ…ôt÷5b›šZ@aø¡§û-²GŸJ ð„”ùŠB“n@Î3‘ÏLÕ]"îîëÄM9³û$rÄDëåÜbFÚÙxPG^F8âºjZ-”f�ÅQ@Q@¾-;|/z}“ÿCZòå‘ü½Á° ã88½7Ægo„¯Ï²èk^ya Åï‡^x|Éö0ÿqù5ô9[Qù?æÿ#ç³X¹b_Ëú²§›óÞ ÷­�êW6:ý´Q¶Ñ<«¨AÁã‘ê3Çÿ®©\iIä3X\Çw,ññ.1þÒÿyGB†­K!ÿ…‹�úrèB»ªrT‹Žú?ÂÇŸJ§5=�×âz½rºÿ‰õ-3T¹µ±Ó­.ÚÖ‰{¦ˆŸ2G@ª6yNäu®ª¸[Þ¿Äë§j–aµyRÑ#ýãÇ4®ªYÝ@à�2OÀëòØšŠuyu[;ký2Æ..ç³2Cxò2¼HìN j6�‡¿~”ëÿ3]Àº$1ßÛ¤Å.$ þ´…$Çi$8à#©¬˜ín¦ñ–�(ÒõËk7¼¸žX¯Ý Fx%ƒg“üGãÒº-bÉ—RðÂÚZ‘om|Å„Qü±'ÙæPN8Q’â(‡‰¸¬Ÿˆ^�‡µ[««‹˜¯®­¥[xΣ:¬²ì8UŒ>Óž>\sé[¶ž�Ûm"Ô&¹HN!}Bi7œ}вI´Ó'õc@Ö$Öm.%šÌÚIÌ–í�?(qœ�Š‹_ñ%¦‡lI’ n÷Ä«jf ì¯"¦à98³Óµeøyõ»+MSÍðôñË-óÜĒܬ’r2¬Ø*¹'=q�YÚ§‡õY#Õ,âÒc¹{½N+Ô¿óP‚HÛiæÜª¥Glwí@³êQÞ¥“Þ[­Û�Ë�aê94I¨ØÃv¶’Þۥˮ入Päz…Îq\mï‡5)dÔ¬’Â) ‘ê†E ‡}íʪãŒc$sZVºf³æhéx·W�t·ÂDT€�ß6åÆÑŒŒÈæ€:u +ƒ†òÞSq–’«yˆ1–\G#‘ê*ÍqþÑ5'W¸¹º³EŽþ3 Tp~Âw³y#žAßœ¯ƒvÛ]…QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE…¨k×ZmìhÒÙt÷¹ŽÛí^rî-! ¤ ÎWsI ûVíqú£kwž*€Máû©´‹'Y h® i磆pB®xäóØPè’cÔmáK„‚;…u‘™GÎ@åG嚟EÖdÔç¾µ¹´×VR*J©(•å 0Ø� €Eaè_ÛÊ5 ËÿÊ5K ­#MsˆªœP£1)b ’HÏ|)¤Üi·‹�=t½>vŒÛéêêÞ[w¿ÊJ®ì¯ÿzšX<_I·MŸp&û-ϘËå†c•ÇË•VeääqÒ¥Ó¼Oö‰#]FÌiÂ{V½�ÞpÊa]»‹¬7©#‘ÏSƒYzv�¨£hú}ÍœbÏFy]&2† £Ç…ê>W%²:Ž3Qé¾’ é5¡´)ma-¼67¾œÎT•‹�}ã•¡{âÉ£ñ0Ñì­´ùu¢K�DBdó qìmø ž½ÅKq⓯5²Ø3ÚÛÝÃg4þh²Ê®#Ç+ó®NG~*Ÿˆ,5=_N¹ÒâÐà‹íQ¤qÞ¬é‹q€r÷!ÎݹFx§}áÝJ=ÚØî¾ÑÍoªùê(h1²g$íó0F[9€6|E⨴k[Ym¾ÅrÓÞBf¼Çvmϵ°FÌcM6^D–®›o5õÜ2ÜyqÞƒŽ2¹+!O˜�ê@Ú;òÍO+^Ãxü7 ª.e&$š0íÏË(È –ÉÎH#=ë˜o ^‹h5 %u+B._ìP\þË$²–I* ÅrG84Ýé×Ñêze¥ü*ëÌ)2`2=y¬ÍkÄqèºÆ�c-¹xõ)š#6üˆnF9Ë2¯QÖ®è–÷¶š�¾£2Í{“H½€çÓùVW‰´)õ»Û5Œm‰mîÌÌR0O-€îC.zv Éâô¾»a²cI·Iši®I!låw…¶zçÒ·eÔ,­îb¶žîÞ+‰¿ÕÄò¨gúr ào|#¬ 7[…aK‹›Ýai@[¦–i$q È0Nô­ø4ëÛj>”—ñ_\G*]QWkçå*XmÏ-Û­n.«§?™·Pµo-K¾&SµA “Ï ŒúŠ_í];û?íÿoµû_´yËåÿßYÅqðxVò? AØaûdz³ÞÍnÌ£í(.•K Œí(F{¨²h³%ýôšL±5Åìw0Z[\D%·d‹g™óf2Äç+’1ަ€:ùµM>ÚÚ;™ïíb‚Rr¼ÊªäôÁ'±õoZiž ³Ò|Ûiak‰ä¹¼âR: ÌA$óY‰¥k0Ýiú•î•o¨È¶/k%¬l‰å3I¸0 …åp×€E;Dð½îŸ}¤­ÒG$vú<¶²J*²4‘•AŸ˜€ã   4ñu�|E¥½Hmšsn%Pà…Ücm»¶¶;sKÿ ]·ü$Ù^Ky_ÙÿmûVï—¯ÜǮߛéIáM:æ×Â6ÚF£eöw·€Z¾YfB—=¾µqÇÁÞ"> Xü¿ø�ùþQýòÿ¨ò>Ëœçs÷˜Îsï@冽m>‘¦^ßÉ„×ð¤‰o4ã9`ÐN7}*ìš…”W"ÚKËtœ�¢&•Cs�Œçœ} rº¶ƒxšŽ¢öúT:•½õ„vp‰$UÛCŒ6ïà;�ùrr:t¢ÃÂ×°ßêFv +i¶Vúƒ`¿˜« vÇ%¿á@'Ä–�â+=&ÖH.Zd�¥x¦ ahö|¤ òw÷ÇJÚ®#FÑõµ­Y48¬!Ó¬¦¶•ÒT`ìD`�¿)ëÏ<�]½QEÌ’Åm$�Âg•FV0ÁwLžKUïgšÖÎI­ì引q¶™Ÿœp\…ã¯'µdØë×ÚŸ‡l5+-'ÌžìdÂ×V.¿yñœqŽõ«šF¬5� ^ÃŽMÒFл}ÙŠ2ävܧšål_ÅZg�mtû/\&¢‡Éfk‹så¡$™÷˜b3À$s׊ßÐVæËNÓìbÑgµ·]é/Ú.#i#ÀÈs´°bÌNyÎI&€!ÓõÝb &÷G´€ s<²Á~fòÁ8PA�ybÿ ¥¾ñdvWš…ŸÙ[¨%ŠhQþk©$MÀ�”ryÀÕ�Êî []¼¼�a¹»_ î0¬H£¡ãæßÁ÷õ¬GÁÓ_xƒ[ÖcO+QCéw,ù ȃ<À$mlõ£{âmJÛUº³‡H¶•l¬ãº¹‘¯¶mß¿åPcÃcaä•ü+~Æí/ôûkÈÕÖ;ˆ–UW`�5Ãj$ú—ˆ¦ÔuOÿh¥ÎŸo,’À~Ï 2RKä}ååAé]†ƒiya XZ_ÏçÝä²î'sÏ'“õ=hFŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ŠLÑšÐÌZ)3Fhž£}&ž#œÂd´‰ÙyhÇfÇp9ÏqÖ­£¤ˆ®Œ¬§ �QTïìä¾ÂeÙjsçªðÒËžÀóžç§­[EXÑQ*¨ÀP0ô  Z½ÔÖöÑGlÁn.&Hcb3·',Øï…  çR÷YÚ“Ç{pÉ*Jö¢F‰„¥9 ê°©]ÀÃV®»k{5Ý„ö¢è¤BÂÔÅæ {òãÁïȬˆ4™mn>Ño§jðÏÏï#ƒMVç¯ f�Ñ×ÛΗ6Ñ\Fs¨O¨#"¹ÛßËo«Þéq$xdŠ+(Ø‘¸²nf~~èöúu5«¡[Og¢Û[\0T �¹;AÇ ŒãŒô¬Û¿ Ëí^éÚ4šèDmf_¿ "ðzqóxê(%ׯàž]1ÒݵSq[íFñ°Ï˜FìáB¾yê£Ö´ô}B]AoŒªƒÈ¼–ØÊ©àžzÔé·rkV•зó!´xf’~v*r¹8oΡӬµ�:öéV;´¸¼yË™œHªÇû»1œ{Ðzxºæ8´Iîa‡È¼YZé�åePÞ™až¼s[ÚV¡-ôÚ’J¨µÛ@›AåB#dó×,k&ÃÃsC—Ù‚H­­® �A'˜ÊF8é€sÒ�£ø`ÚXÜÚ_ÜI2µÙ–'†y#b›WqR2p¼õSSñUÝŽ¥©Ä·h[7EŠÖ@ÂkŒ¢¶†ë“�òšÑÕuù¬5{+háC ׌ùÌJì1ƒ�¼NsØUK½ R’ëWHcÓžÛPÚ“»3ÆaË·ñŸ½Mo%Õ½ø½™ÞyQa·tžE ˆ�P°weŽAëF£4%Ôu;ÍFîÛJŽÐ%™T’K�Ç{• µvôÀ#$ç¯J©{≬õK½8Ç]‘ZE¸�ò8lî?Ýà~dT°éºÝŒ²Oi%‹Évˆ×)1}«0P¥��È8tëLŸÃm½Ôî.Þ#-̤3Æx�2KÛæÚzž”£cu.³w§Üy'ìöð¾øÔ®æmÛº“ÇÊ1Xñx‡T»M%ak$¼K‡‘æ�Š�-€a†2½[~· Òê=ƒ^Ml�Ý$Œá7)8u gø�­G…"hñÜ-½ÝµŒ¤‚d{¹S¸)u ôÍ>Ï^¹ÔM‰qÍ=Ì©#Çó#G;Šg³ }O¥[:Ìp^jÝÜì xí£rZ\nl`dŸ™F÷M3T‹ìWúUì03Cld…£…2U]F0ûJ£ñª±èׯ¥i——Q‚f¼xçÈFyoRG#Î8Å'Ó¼Mo=®¡wu*%´7¦Þƒ0Ú¤ ½KdžíÒ´mu­>öX¢·¸ò£Hƒi @n£‚ }«ž“Â÷÷M,Ó[ý¬ê x‹²"cT²á�àò?©%džnΓØ´šŠË#—3I*âE*ÿ3e‰ÆÕE 5_V’ék§Mº;©Ùöu‰Ý€GvÚ3ï‘Z){k „¥Ì,&$DUÁߎ»}z•—¦Xù¬Åbhíìíã³¶Ü1�æ#Ôrƒ>ªkM,íc„¶…D$˜‚Æ—ž»}:ž”,SÅ:–†T‘C%àŽ;Š’¢Š R°Ä‘©bÄ"€ <“ÇsRR ëØ´û9.fÎÔ*Œ–'€ w$à­A¦jO{æÃuoö[ØHó`ß¿ò¬AõõvªúîŸw|¶¯dÛe‚_00Œ‚3Ìr×Ó�Z«¦éš²jñÞê3yž\M"僎X#Èã¹ãÒ��.i3E ;š(¦4�N4ú*?9} rúÃñ¸fðv£´B©Àô¤þ•äúÕÅ®Ÿ=”2²E9M¸ÉÇlúW½™”«.Aà‚:Õì�œ�*ÏÿÓü+ÖÀf4ðô�9Âúßúû�/€ž"¢© [Km~öw)qo$‘ʇ*ÊzV®�{6§ãK ‡¥–íð?Úþ‚½wû'Gÿ UŸþ§øT¶öZu¤žeµ�¼/ŒnŽ%SùŠì©�R”]©êÕ·9)äõ"Õç¢w/QQùËèhó—Ð×Ξù%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QQùËèhó—ÐДT~rú<åô4%œ¾†�9} IEGç/¡£Î_C@QEç¹£4™¢´34f“4f€4f³5‰g´¶ðNª-ò^8Y”ãåÏfô>¼w«ðÉæÃ›7¨m®0ËžÄzДf²µ£ç%¥€'ý.uGã÷j ¸ú»àUËZé1ÜL«Œ�ÜJ’çþ%¢µqÌe$¯L÷ŽsHgEUÓîÅö›muŒyÑ+‘èHäW7â}nìézÄZ}»ì´M’Ý,Û 9áGS€Fy{Ó®¢°u?eê ¶ñ˜YÑ ý¡|Ϙ€GמäU[ sT0j“]ÚÛ˜íîš$&éP.$¨Îy'Ò‹…Ž¢ŠåfÖF·¥Á�Êóµ³�VMÃçl7F:w©ïu¶ÕîïZ6”Y¤v�Ƨ—šR Üy|ûšW Ç®¿>�¨kw:œF!vª–â}苎à ñ“�ÓÚ­Ùxº;¹bCX7+o,�Ü Q ©(A�HÛÛ‹Œéik›¸Ô¶­míÒ-‘]_”îÏ™ D–nœ°¯üzÒÁây¥ž-úiŽÖKdzyàüᘷÁÛø{õ ŽŠçãñ/™®Û?ô‰LÂhLŸê|¬ïÉÇ<í�÷…Amâ‹ë“h‘è�æ^[ý¢Ü¥Ã(Æwq÷†:ç=»¨¢¹[�ZÇmdñÅ›sÚ \\,!8ÆãÔä·j«uªMªÁ©êV——ñØØÇslˆÛAbŒçxþ.�pxëEÆv™¥®bãÅs[µã -žÞÈDÓËç…tVáq’Fz{uíVn<è|i`êàÃ=´Å /û°Wf_^OZ@oR×7ÿ DÊòË&˜VÆÓg%Àœý�¶ã¦HÏb¾dBùËü@�Àe'ò úÒ­šZJ(»¨$ÿXjz‚Oõ†� ¢Š(?[º’ËG¹¸„í‘@ÁôÉú× ýµ©~Ùqÿ}šì¼Tvøjðû/þ„+Í—y·3áü Á c€ÄèkÞÊéBT\¤ºÿ‘óùµIƲQooÕ›ëÚœ3Æëw+lív%O±Ýé:´µ¯›Ë"ñ$dò‡ú�C^R&PA ÙúV®‘=Í—‰-aÜñIç,R)à�5¾3 �¼Uš9ðXꔪZZÅž¡EÈx‹ZÖmu{»}:âÊ­­-æÄöÍ+HòÊñàë�º;µóGÔ}ÅØkzìz­’_ÞXKk5õÍœ‚+F�€Š9~ã#u)ÓúÓï¼I¨ÞÜXÉ£GåÚ¼åb71•:ƒf(™EÚ¬w‘És@�Áø»Æ_gðл±»%ÂÇ<7P2�7•zŒáN9!³€y›ÿ &¡sxº¤7qKc§„Šh#_,_82D�p6 �Ølu€wÔW=â $†ÒãS_^Ø[Û[™d‚`bB‚ÄâD'v8Æ{T^]wì×êú˜¹y¾kkgn…qÆö�@,{à`vÍtÔV?‡5+ÍNÎé¯Òž Émȃ;HFÀ<óT¼EâÛm*a´š9/ãšÚ32.ùÌ8 µ‰œôâ€:Z+2_é0j?`’ñãzÆFÖÚ®q…-�¡ŽF99æ×tÕÔÎ�ö‚×@á‘#f q�€À8çæ€4h¬ë-sNÔd‚;K�5ç„Ì€# m§vGÊsÆ ñÁÆ�QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQX®©«iw�ÌñY¶Ÿ%ÜVË–37˜Áwç€0OÝÁàg4¿EröÞ$½šêÞäÁoý—u}%ŒXÈ•Y ¨rzfŒŒ‘�rzU‹]WTƒ_·ÓµHì±um-Â}˜·îv1o¼ÿ½…éÒ€: +šðÿ‰n5½wRƒÈ�4ø¡Šk9wÌŒÒ)sÎ0Ly^:{ñ¾»«ßg\ä=(¡¢¸ù¼a2êÞ#ƒý =.Õ%ŽâTv Ù`傜• ¥pr¦·æ×4ë}E4ù.?Ò›h(ˆÍ´·ÝÜ@!sÛ$f€4h¬tñV‰$SÊ·Êc€í‘ö0 Û¶mÎ9mÜmœŽ9ïøItƒaöÁw˜„žNÑùžf3³ËÆýØçÎ9  j+.çÄZU¤òÍt@¸RÑ(‰ÙÙGS´ À Œ’8Ï5�©x¹añŸei2›Y-ZöYÖÒ[�20W …8�Ü�ÀÆHÈYEs6þ(—Vð-Æ»¦[ºKF™`ž7Û¼&í �»ÇmËÁõ¨Ï‹ˆñÙ¼¨ÿ³³¾Óççæóq¿g¦<¿š€:ª+Ÿ¶ñE­¶“§K­\Eo{qj“ÍhÅbÜ2IÆv¨9cŽ:Õç×ôÈõ!§ nÊ«yjŒß+g �1Ž=ã@TW7‹-¯üI§XiÒ¤ö×Ï$’ÜgfÍ¥à2�ÍÈÈã­t”QEQEEqçý�þÌ#3ãä’>øæ€%¢¹í/RÖu� i×ÖÉcÝÂæf�9�:òª[�8Ü*慩ͬh‹vѤSï–#Œ”,ŽÉ¸w*Jä{Õ¢¹­6÷Ä âgÓ¯.4Éí ·Ü=½¬‘²3AipÄú=j¾¡âé-5»Ý%·}A¥ŠX‘¼´{™ŸŸº½xǧS@mÄë^,¼ÒµË›)u=Ñ-¬¢ŸhÊ×ÅÃýàÇܘüÕ×X\=ÞŸms, “D²4Lrc$Tý:PŠ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€-QEçtRQZ‹E% Ö�ÜO²‚ÆYŸ”7®;‘ÛÓ&§¦îPÁw Äd òÎih/XÑWU–ÚSöVh€—Vþtgv9Û¸r6ðsÜÖü"ßôïáïüÿöÚÚÔ5 m.Æ[Ë©E–9 ÀÎz“ØV5§�´««Ô¶ba,þXwž»¶îþ Çlãã9â–ƒ6t»Ó4è­Ã,r«´ ±lØ àÃCPðŦ¢×{®nàŽì>(d\�€Ø ó€=Ž9ÍmV|ºî‘¯Ú­Œr!Ã#Ü *}'Š­wá›[»‰åk›´YåI¤‰$Ón#?Â8Î(ŸÃ6ÓK3­ÕäBYÅÈXÝp’Œ|ë�yã¡Èö«‡XÓÀ·:� œãùë¸ädqœò«+Ó åö•ÇÙ­ãëî‘©ýkf—­!‹E%-;Ê‚Oõ†§¨$ÿXi eQ@~0;|+|}“ÿCZá´ËiõM,ƒmÚ3»œ*(GË1ì+ºñt\øVþ(#i$*¤*Œ“†þ€×�%ÝÜv²Z�(…Ø3 È GL×ÒeÝL3Qzó‘óÙ¬”1 ÉiËþgHÖv7ÊaÒnZK¸z¤€´åc×åô©®$?ð°Ñrúr?ÞÉ$²Æê髩ʲä}k_Aûn¥âË)š)d“í $®AèI'ð¯J¥ÊNZ$÷<êu奫kcÙ«‹Ö´}ZãÇ ¨ZØGwiœ$מDm*I+ â7,Wp# Î=»J+âO²8ˆô]U¼_¥j2èðÚÆ—Ë;ÁªI:кçÊeU\±¨Ïë[úÅ�ÅÖ©¡M{£µ½if;€Ú¦ W<õù™Gµ±Es¾6Óu SÂ÷öú|¡dkyA‹ÉÓe¤Ÿ”ŸZƸÑïtír{Øô‹�bóì±¥•ܯ— 0,ë¹qɪçÅwtPãmI—DÔx~­Vò #†htñ,žiB— Jó�˜‘�ZÙ´ðþ™¥Dn4½M‚ýb*Ž�,Ylt,«� ë×èkbŠåô[éöÚ‚K”’Ïv×1•žIopYHؽ8>½ªµÿ†uya¿°µšÈÙ]ß%ï™)q*‘";& ò¼ôÀÇzìh JëÄ¢ÿOŽ{_ìËëÑy$�»ÎO™Y� `ä¯ ‘€zUë-7UÒõ ŵ6RØÝ\½ÑiY–T-Œ® ŒŽF8­ú(™ð÷‡¯´mNâòIm¤þÐS-èQ�“î$y|r˜b9Áã=X×MEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW+{§xŽãÅ1ß4¹ôûoøôŠK©‘ˆÃHÀFA|8Ÿ\×UEröþ¾‚æ s5¹Ó-od¾„ ù¬Î]‚7 Br2NÅWÓô=vâòùµø4éRý¥¶¼—|pàíŽ5òÆ<�Ù$“è+°¢€8‰¼+6�u©ÞéÓ^?Ú,¡²¶Vºšv�˲–`Ä�ªHçŒ7Lœì^h×–÷v—Z#[#ÃhlÌW ³*U�PNWoN‡=EoÑ@cø2{+O³éoi —LM6f»S�ª.ÉùÎW€p9­-:Êò 59àŒ4ñE�ŸÚ‹*ºÆ™ Ø€]Û$�t4P'¢iž&±·»7K¥}ºàù²]‰¤—Í“#å+±v¦ÐT`œqÁæ´4=&îÏPÔu ß³G-ç–>Ïk“lnÉ,sÉÀàÚ·( [OðÝõµÆŸ Ó[-å{=¡·±`Ê¡Ç@]‡çƒÅ&�ừ;Ùõ$´Ò-/ÚH­ã´Œ¬M#�ZI9(œvòs]UÎk:^·¬Y\i’˧­�Ú–E$‰HÂŽCs‚HÆGÔ»ðµôúŒ…ZÏÊ’ù/ñ·}¦¥r‹Æ!Jç#†#¿]EeMÿ Bðf»‰_¾õ ~O˜g ^>Õ‚¾½¶Ž6Q§ê é8¸‚ñXDi<ÆdÀn9ÆäȮΊ££Xɦh¶V2Ü5Ì–ð¬m3ur3TµÍëWvÛÝVÝmî!“’÷Š úc=GjÛ¢€8{¯^?Sµ‚ê ëHK!,¹Róù’»ÈÀ€ÆLñžs[Vú^§§kW³Ù5¤–—ó¬óyÅ„‘�Š„.ƒ#÷­ê(”‡Â÷qxvÖÐMn/m5/â<˜Ø™�·ýׯ{FqM“Ú„é}ws„×·“Ç+CæÉD=‹²Uƒõ;±ÐâºÚ(•‡CÖì®-5®ío/ÒÑ­gûQeR¥÷© 9GÍ€IŸ¤xZ]*óN?hI ¶Ó%´vÆÖgyò _•¸Ï éè  o é—zg‡­ô›ÿ³¸¶ˆ[£Âĉ#° `ŸN~µÊÿ¾ÔƒWK7–ÿÚã&}Í·Éò¾ÏŒã9òxéŒþuètP5¨h:‚ê7÷[ÙìÔ-RÚU¹ û­�€eÀù¸ºqÓ¯4Û 5¤šŒ|Ú\i–ö¸cæ�È¥�Ž;ö5ÓÑ@¶�¢k ªè÷Ïaäé¶ÒÛ³—Ý&à€6Àû�9Ç©®¦Š(¢Š(¨/Zím¬b‚[‘�‰<†4<ó– ÄqžÆ§¢€8˜tZø: ØépÜ!òÞeº“˜º¶Óå|®sŒàã¯ZÞÒ­µ;;K VµÓ­má �Á#ɵá6«ÎzäVÅ•¤é³Ù_ëWÛ±,{ $F"DäuÊžžµ—{á¿¿×.ä1Gqx!6— Ì�4j6žœaÀ8GZêh I´Ÿ fmCìº<æîÊ'Y¦“è\±Qå�Êw÷#¥ohziÑô;-4Ìf6Ь^aÝ�éØ{Uú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ÕQ@sE%­ Å¢“4PVº±40ìßý ýŒÅ÷÷÷ÿ€ÿ{Ô#V"ê÷QšÛ=Ái gðAŸ ­é4}2k¯µI§Z=ÆàÞk@¥ò:ã9¨×F�uxOõÆqFÁ!M…ºz~¤Ð+¯]Í>™«Eöèí­ìæKhì¶.]F“Ï9ã‡z»{­k ®]Ãf„%¬±¢ÂL!d)%‹°nrq´cëÍt“é¶72ù³Ù[Ë&6ï’%c�L‘ÒŸ-��Äé<Ö�I4rGŒ_¡=(°Ì5köÕ#ÑÞãý*¹y /6ÀnSŒ`gz.}�Bg¾]*+ëI„Op÷2…)æ´XÂlòœ(Læº;�>Þé.2‚9gˆÂóÆ I´ö �zYtû9íã·žÖ¡Œ‰$a€ÇN rwšÄÚ��êGª-½´ZrÌ Ä¡®·«d�ÝÀîzÓ/5»« ݬ¯ ½žŸ²Cåǰåx ÌrrEüë°›N±¸òÌövòùc ¾%mƒÐdqM—KÓæÛæØZɱ<µÝ �©Óhã§µ 253nãM³–n?y$ ÍÇNH©l¬’ÉfÚÌï4­+»u$ÿ€`(Õ-%´QEek÷SCi0­ÀåÉ4¼�c$€ œž€ã‚sÚ©è²Åi¨› {Á§H…ÐKk,BÈ˨Èn¸õϯ7vwè©{iÊ)ʬчúŒŠŽ×GÒìfó­4Û;yq�ñ@¨ØôÈ€½E%.h½¨Ú-ÌNJ’ŠC"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¨xŽy-¼?w,NQ€FXüë̼ùO;Ûþú®ü.â åÍcÎÆf 5[és×<Ÿö¿J<Ÿö¿JòXïn`¸ŠHgt•r°=8¯FÐ5øµ˜6>#»AûÈûö—Ûù~D˜œèG™; Âf0ÄK‘«3SÉÿkô£Éÿkô©h®Ñ"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€"òÚý(òÚý*Z(/'ý¯Ò�'ý¯Ò¥¢€ (¢€<âŠJ+C1h¤¢€9k_Ý]Am*ÙX/Úci#V¿9€H8��Êž/<ÚL×?f‰'¤Æ%,²U`rUH['Ž5ÇØé—Ú\Áaˆîí£²ÊÀ¬ƒ gö.3Ævе=ª]i³ÃyöX$êLM9È‚,¬ay9ǯJ›”t ãHŽ£2[[5ÝšÕ$…—s»8 À°è8�kª¯/½‘–{»™uXc¾´dÉ:çPȬB p«÷ˆÁSӜצ *ЬÅÈ8É÷âšE¢˜ š)( ¢’–€ (¢�‹E%--”´RÒQHbÒÒQ@ KIE –’ŠZ)3K@ E%¤ERQE‰âó·Â×§Ù?ô5¯/XœÙ5ÞÒbYdçœ�Oô5éž5;|#~}“ÿCZóý*{á«�÷K1Ý£Ë# ìaÀîyô9[åÃ9{ü�žÍ!ωQþïù™ÂP ÙúÖ¶š'²ñ]�»³,©r¨ØoSƒú€6•«ieºÒá y_‹�f=ݹǥO,Ÿñqã]ÙÿOOýW¡7ÌœZ¶�sÏ…>V§{ê¶=j¸oÞêk¯^Ai¬ÝY$6v� p,D<³O$|ïF'¢ô"»šäuo j—ž5]nÎm>4ŠÎ(£û\2K‰ä$…WA�`œõ8ÇŽ>ÄÏÓîõ[]oNë·÷‘I©]ÚI©8â•”ü‘ƒ»(½ÿ ›R¿×5 Í.XÄúBMrRÊ 0Zg»æàòÆUÚrA8Æ*hü-ªišÍ×ö<ÈóÍi`ÐLàÄè2åÛpË:uâ·u]6kíGE¸‰£ cvÓÈœ•0ȘuËŽ¸ã4Èxã\Ôáiš×SÓ®`œ}¢(bYÂ&D›l;@ �‚Fጊ®úµÜº¼Wí}:ÞÙypXØÝ(G¿Y3¹�UFÖm �”lÚ `]ã ã_ðÝí•­ÔðÌðH¨‘Èeb¤rAùséŠË—ú®›©ÝÏ¢[Ù;ÜZGoíÝË™­ŠîÉåÈ2Àà°Î0hë^�nî/u¹âÔ--É6úÄ–ìÌ`›QÀÜsŒàö¨¼=±·¼†ÛÅðê½â™#�¯^î;PC>æÆy$ŒûWAâøo¯<5}§XXÉw5í¼–û–DAd 3n#ŒžÙ>Õ©sËéooir¶×&-‘Îcó61�¹úf€2t;»ó®jÚeÍçÛ¢´XYn jŒÃŒíp™ÃŒæ·ÕÕ³µ�Ç\ÀðÆ…¨è6íou©ÛÞÄrÅ’ÐÅ#ÈNYÝŒ�¸Ÿ ü¸­K-'NÓ¥ž[>ÖÖIÎéšU ‡žX�ÏS×ÔЕ[ê$x¥-›Q‹Ë‰‹göÛÝy¤Ÿ·[nß+¯®›Ã—Ú½ý�ÝÔWÖÉtmíe’[¸‹ÆŒ–;U—�cÿÂâá*ÈdŒÛy¨ ¸º�w–.<ΞGLs�3?í»[Ö^kÛMBÂæ;Ý;O�Å Æ&�žhãB¸b7 ¤�qÁ8Á$oAñŠ®¼K+¼šM¼Z™AÒYÊA! ˆmóFÝè rO#ÝÅq{uâY¬ÍÆÏ±iñ—(¸�æ”·Í´žŠ"àgøÍb'�&¹Ôu¿ÖuI,ä04gt d(89XÁR¤ ·ñ­”Òïìõ¹f¶�¤7Zr@÷S(}’Ä[k2‚¹Ü$lãw¶h&WT>Õ5ïkÍ6îå÷¢óR ›ä q‚¨Wñõ®£PÕmtÍ;í³—1±EEEÜÒ3Tw$�+š_ jÖžÕt™/á¾]JYbµòL^{“+]²r@öïšÙÕ4µ5tþÑx£F‚[EX”ùÆÄîÏñÀ öu  »?”¿Ö¥Ôcº···khൖ%óCÈ1´'qfÆ9#éÍh¯‹,¥Ì³Åuo=´‰–’Çûíï�€$6ìñ‚G_CTÏ„&¸kÙïuV–òâ[{ˆæŠ†H~é “‘ê õçžÞ7 u=ޢϪO,3 ¸â#hNc „Ÿ”Ùœî<ôÀ©üSkcêV—š|2³¡’å,L«» Cd‚221œà[+Ÿ¶ØÁuäMš�ÄSsÙ€'°ïü3q­ÚEi­ji¶žXáƒÉÞØ0Cœ·s»fîÄz”RÓ\Õ%šÏSk”67š”¶"ÐÆ1+HŠáº–-$Œ7lU˜oõ-3Ä‘YêœwpIc-ÕËy+ÚìdŒråøbOË׃SÃácül·Ìl º’ö CÜ™÷d–Ï* ± �ÉëÀªºW…u+[›¶Õu[-N âÆñdÓʼÃ*n2{.Üc=É4ž×5=OÄz¯ÛHŠÀÚÁsg VŽ7iFæ=rÁ`ôÎ;¯e}¬j“[[ÚêÔÝÛÍ©y­r¤Àní?7|ôÆi×>²°ŸQ»Ñl­à–öÚ;%KxV3—a$�³×kçÏîÇ^+gRФ¸¹·ºÓ¯M…Ä05¶á‘LLAÆÒF*0{sÁÍrÃÆÒjQÙ±¾})?³a½žHlÍÇÍ&î,k°åŽ>ðäWM5ÝÞ­cgct’ÞK§”PœlŒ2‚7),ÍŒÿZ«7ƒ’+e·Ò¯šÆ6±M>lÆ$/ ä.2Fno›Ÿ½Èλ˜q�¡°s�O'qˆî|&÷F5ºl÷‰{%¿� ùŠÊÀ,™árƒŒÔ(?ßë7–¿Øðjvä_´W&"2˜•æQ.Wi`˜'µd_ø¢Km7Lq®\ÅjñÜ™ïd´FœK±ãU¨ùÁ!z¨Éê¦ÓõvB`ÖöJ%‘”½ª²lcò¡PA;{F{æ³aðŒ¶TÚn¨bºÙ*\K<Q7™'˜Í·#iÜN0qƒ‚niSÜ]höWh‰s,ò¬g*¨$Üf°|U­ßèúÖ‚mÜ )%“íÉ´Çò®ì‘‘´¾ãŒp nél:6�g¦ÀÎÑZı+9ä€1“Uµm bî .0$Á$;sæ,ªç¶ô=h–ŸÅ·‹ªx©ÞéâÓ,,–Kc Hî ¼‰#€Ø wÆÃã室ëðU´ø-nîž'TžXc8Y€ 1$s‚ À8g�uàHe°¾³·¾xâ¹Ò£ÓA’=ì»ZFóän'ÌäqÈÎy­4Ðîmu{›» GÈ·»™f¹� ¹Âª’­‘·* ¶(¼^3Óå´’émo„+1¶F0�ÞÍæòÐgæ9zc©8sxÂÁ-™ÞÚñn–ámM“"‰„¬»Õym¼¯ îǾi‘øMcÐ Ó…ë í¯^ö •Œ ’4¯ Ê’r0åO<Œôì�á{‡¶½2êOy}"µËÏf¯ ª®ÕO(· :ýìç<ö  w^$†Ùíá7ó]Í›ì±D ‘  l�'r{f°¯|Usyâ--4µ¿—M{¿-h�æ|2€§Ì9 É °çƒ�|'=€³—OÕž+È-ͳÍ4"U’2ûÀÛ‘�¤�¼ðj}7°iw–2Ãpí­„–[eŸ{«—-땚âþêêÃRk#{ÛÝ/’$Ü«¸™#kaˆÏ#§RÙøRÒÎ[ôW&Êî o·#�]~öyÈN1ß4JßÄój^)Ñ ¶‚òÞÂæÚâ_ôˆUDày{z�>cÁÁç‘]esz†o-µ=6îïW7K§Á%¼)ö`„«b-òp°®’€ (¢€ Šå&’ÚD‚a ¤ad)»iõÇz–«ÞÇw-œ‰cq½ÉÆÉeˆÊ«Ï9PËž2:ŠÀÑ&Õµ¯é—'U÷2!k‹�aÈùAùWœuúÕß ßÝjþ†êæAæÈdT™"‡eIéó( éÍbÿ­ E ¯ˆ H‘€iO#Ì‹©�¿{œÔ‚8â·ì,5;xìÒãR�ÖÁã·³$‰·  b»zðy  �%5uñmÅ«ë÷W¶VP/Úx ]Ò¿* ¢)Q¸ÿ¼¾õ�ªxºêÛÅþ‚åRêy­áµ‘ã-UÐv8ä“‚ybL×U¥é?Ù×z¥ÁŸÍkû¿´}ÌlZ ^§8ÙœñÖ©ÝxZÚöMlÜK¹uEŒ|«µ¡(¸R<�~aÓ€9Í^¾Ó¼G}hu�Fí4øf‰-ôå¸ÈL�Œ„Fvçj÷Q×Úé7R^èöWSL³@’?’Û“qPNÓÜg¡¬1áÝj-Uµ5ëtš{Hm®Y¬71ï;×÷˜Rwž5·¤é�èÚE®›n]¢¶ŒF¬ç,qÜûÐÚ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<ÞŠJ*ÌÅ¢“4´pE q"B«´Fª�é�Jmµ¥µ”^U­¼PGœì‰ŒýMEF`…–Ehc"C—GÌzsëÐ~U-%´QE0ŠJZQE-”´QE Z))hh¤¥ ¢’–�-%-ŠJ3@…¢ŒÑšC (Í G QEDòb%ÑPùÍè(ó›ÐPgŠìn5/ _ZZ¦ùÝAEÎ3†¥yÐ|B¨cþȽۜ‘ä6 ü«Ü Ä œ*¿ö­§üýÛßÁþ5éàs˜h8F7W¹æãp4ñS”¬ícÅ¿°5ÿú^à9ÿ ÖðÙÕÞxÄPQktBݨàô�Qïê?íæûÛþyŠÕµ�¬|YkhåKGt‹¸t?0®¬f`ÓÝ&ÑË‚ÄT£Q8ìÚLõ*(®Åj.|Osl×w‰)³³KXà»–/ÞI<ªÇj0å$ç}«åO­;ú3^m§=µ�‹4ûH5 ©/†¥w–’ê2ÈÆ¥2Žäc…Á#ÓšÐÕmõ[ûý"MNO±MqvRÎiw FHâG8Ä�òmÇÝ�^´ÛÉ"D…äuEË1Àô¤icYR&‘Ž T,2ÀuÀïŒ�θ6¹'ƒå{½>O>Î_5ä²»+ˆŠ_y•¶åT䌒 ¦³M6¼ûRk¶ËÓ ó.Ý»ÏlœçøØ±ÇÊ$ €zuÃx¾ïBKkû»ÿ5ö£ilÛe›J–H²ªX7f6dõÎ:ô¦x7MÒì­®­l"Ôíoï×|×Ù’["œp2lP3Àäýh¼¢¹Ï´«­kðÝÜ]i¶æ8Ñî$2>Ê¡�$SŽÇ#¶+7ÄÞ ½ŸN¼}´‘ÚÛ_Am%êÜlmâhÃP2W’¤äwàŠíh®nãņn¦]=ßL´¹·~h ¯•RBc•RØ' ðp*ݶµu}©O –œ$³·™­ä¹yŸ1G;W  Èä@4V‰â95›émƒC%ª•½Ý&D3nÀ�xùòlñÁ^9ãz€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (®_]ŽâÓUÓå´Ôoúêö5ŽØÉû¡Ç›”`(c¸ò òuWe}zía¬5íÁkÍVk9-Ëæ!yQ@^�†Ålõ<犰.‡â7 ªÝÜYÛXIq©½Ì›Äm•òÈ�$ùT�Ó¥uôWá GÄÚ´×:̤ÖpÜÅkʺÛ.é7(‘¸(Bäw>˜©¬!»Ô®­m$»»³[«Iu9<—òßÌ’A°;"œc¡ã9 âŠóX|Iy¬[ÚËvº¯““äçLeŒï}û¤bH$œ(Îrx8®¦ä�cX²¶·ºuŽ F»óÓ•¤8˜1ÓÍ<Ž q@ Êi‘Nú¾µam¨ßK§ÅIæ´ÛäK‚XȨíŸáÙ‘ÐÆ)þ¹¸{�ZÚv¼ŒC*­/¤ó'‰Jõ-“•b0ÍÐóØuWg¨jb S†îy®uƒ:5¼¯˜ÐùrIUè»Jã¨'94º&­o©[ZDš¥ÔóiÓM<:ˆhós�„.0.AÛòôÇzï(®Äê6º”úåò^ÿdÁm ‡ƒÆ]qâù--nEÆ›å^ÛN�ÍOû˜Ã®á!—o Ž3·¯ ¢ŠÀ—Ä7-=µ�–œ—W²ÛýªD GyÚ0ø;‰9ÇàäŠÀŸZ¿ÖüE¤Ï§Û»YgKz�½ëÛ“"º/ÎNvŸ—iÈ;‰í‚ßQ\†™u­kß {–ú…Å�hn-æ;™ŒyWáWaÝü#8õ¬ƒâ醤5ϵ¿öQÓüŸ'ø<ÿ#í;¾»>_Ò€=Šä­5«í7O‡NŽÎ}NëO°†[ù¤Ÿkd©è[;Üíc‚GnjÄ~.K‹ÙVÚÏ̱†ÎénÚP¡a‘Y�ÛŒ“…éõäwéh®> cR¿ñ^‚ÓÚIckqks*Gö�þ`ÄEK¨à0ÏNqžµØPEPEÄ&âÝâÉñ�ñ2ý KErzm¨øMšÿU¼‰#$ó­ÁFp7}é>ðòéZ>’îïÃï{$¬òù…ò²‹·–[¸m›O®hnŠä´m5cñ}é·¿ÔÞ×O‰axç¿–e’gŽC±*Ç»ŸJÉÖ5ëØ|Qªi)-Ü6ÓOk·ªIK8ÝùyùY˜€lî=(Ðè¯=ÖÞñ|S¨[[E¯]‹m:·KÒ‹“(Üᤉڽ˜ñùözѾÐtû£p—--º3LŠT;m œçŽÔ~Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  TQEy®ii(«3Š( Š( ¢Š(¢Š(h¤¥¦Š))h¢Š(QE´QE´”PÑE†´”PÑš( ¢’ŠZ)( C¨$ÿXjz‚Oõ† ¡”QEaxÄíð�ñöOý kƒÒ͌޹·^TqÝ$Œ«‚î°Â�SšôoéÒêÚ Ý”,«,ª6–é�Aþ•æ_ðƒø˜p-õÙ?ƾƒ+�«¸Nj/šûúgN¯·S„•­ù“ OLÕˆ³žìBœ[Lƒ„ÿfCÜ^Æ¥–tˆhc`Êo“�rÌ*¯ü!>&ÿŸEÿ¿éþ5¡¡x/\‡\³¹¼‰"† VFc"±89Àס:˜XFR�E³Ò÷ßñ8!K)EJ›Ýkklz}sz�…¦¾ñOöÜ:¤–R-¢[!†�ÆØœÈ�€w�Æ:sšé(¯�>°çWÃwÿÛmõψ.ïÊW“ÉžTѲpQƒówÍijgÛït»Ÿ;gØnLûvç~ctÆsÇßÎyéZP7Š<=‰4K‹%h�ar쩈æÇ¡ª7¼†k¥Ño­të[«t·t[B^ ¡†beu pÜdšéè  oXꦅs¦Ø oô¸^ ^âF]ŠÊFà�Äg¡ÇÖ´.lÍΛ%˜¹šñù~t^1•$áVh {LðšézwØ"ÖµV·B)xÔ¦6ADS“Œ“œŸZ[ÏY^KpMÕìP\N·[Å(´ªÊÛ°A=Tdg®3ÍtPþ°žîYZ[‘Ó-ÄÖ‹ òe”`†#êªpƒS.�ZŒ·v×·¶âi<Ù`ŠA弘v$@ àÖµ�¦xjËHºŽâÒIÖA ŠbX´’Û·ÉÇ/’Ç#xûcbŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®z_ 5ùµ„ÖõHn%UBˆÑTì]Ñ’ žN5ÐÑ@ÑøjÊ-Kí‹%ÆW¸ŽÜ¸ò£•Á "Œ}㹺’9'Õ}‹£\¼±ë:�ÊI#K4W&YY†2ÄFöÇ=€éÅt4P§áÈîšþkb{ø"´˜1ˆUÛvÜ î*î:útëVµ= ßS’|ë‹Y¢F‰e¶pŒclnC�x;G¸ÇV¥‰wá]>æ(â‰î,ã[qhËjû<ÈHÛƒÀÉÁ#'žjKmãMMLí»!"{rA U HÀ#æn‡«^Šç4ßG¦Xµ’k:¬–Ûp¨ÒF…pmá‘‹ds’s“œæ´t½.[‰Ä÷7W;|Û‹†Ø.vŽ žîkJŠÆ´ðÕ•�踎[–T2!i3Î\ ÆA9=IÆH°xvEË5õü×@mÅ̳2$=�€0sÎq’@É8±Eb]øbÞõŠÜ^ênû|ëfŸ1Í´723��¤ÎAÉ¢o YOw$­=Ø·–u¹–ÐH<—•H!ˆÆz¨8G"¶è  ©´?5]SRŠO5åYR~WyÉ\T¨ì8íU‡„ì¡H�Í圱#!š Fù6æß¸Ilœã9'Võ^ÂÆßM°‚ÆÑ6[À‚8×9ÀÔõ¨o4«kû¸.'ÜÆåŒ&FÖY à*õÏÜx;KžÖæÕ<ø ŸOM;dL0‘!b6ä»ç<œö«M @5G¿‚êîÙ¥uyâ†@#™”  ÎdsZÔP2øbÅteÓ7ÎcK†¹Ž]àI†C&å vf8ã§<ÒGḡ‚a¡~—SÈ%šðH¾lŒhÎWnÀÆÜ{f¶¨  ð•Œ0Ú­�ÅÝœ¶ñ´Bx$Ý·0l‚[žœvÅY³ðí……Õ¬ÖÊñ­­›YÇ쯖̬IÏ$åG9îkZŠÏÑ´ˆ´M=l`žâ[xø‰f`ÞZ�€€€8ù>õ‘ÿ&‘ÿØÐ·\ý�\} ã~s�¹Æ6ãåÆ>ïÓÑ@ú�†íu¹n~ÑulóÄ!¸û4�DñŒá[ƒÓsr0yëR[è×7r¢—VÑZ¼XŽ0Á@ÏG óéZ”P‡…­¬/­.ÅíüígÃn“ÊcFÛ•é“÷G$“êMnÑEQEí»ÝÚ<ÝOjíŒMÝëÎxÜöäµ=Ê7�`}-µ½XÚE ‘Fèr@ä)ýÞsÎ9­›]%íͱ—TÔ.ZvÌ®ƒÌÜ1†ªGkJŠ¥a¦C§M},O#5íÇÚ$ÞAÃlTÀÀé„­C.ƒe;j¾xySSUKˆØ�¸ ·Ž8ãõ­:(�>ì]G­ê±Jm£¶•‘âÌÊ›¶–&<îù� ŠÚ±²·Ól ²´�Ë·�q®s€=ûÕŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ÕQ@kEV†aKIE Š(¦KIK@Q@Q@ E%--”´QE Z))h¢Š(¥¤¢€ŠJ\Ò¢Š(fŒÑE£4Q@‰M(¤äŽiÔT7ËOOÖ�-=?ZužL14’ˆ£,Ìp¬ÏøHt_ùü_ûå¿Â�6ß ^eÿÐ…y€•qË~•éà°1ÄAÎMïcÊÇã燨¡¶¾§©C®hóÎ�Çv†IÕ0Éôæ´ü´ôýkÆK«0ñêk¹ðÇŠìšuü Í÷a˜Ÿ¿þÉ÷ô=þ½k–ºQ积r0y¢«>Jº7±ÖùiéúÑå§§ëN¦´‘¡Ã:©ô'åÀyiéúÑå§§ëH²ÆÇ "è $·ÀÑ,ÓGJû# Àol�êp ü(ÞZz~´yiéúÔwWPYÀg¸�G*¥�© Ô�L“P´‡P‚ÂIÑn§Fx¢=YW�á‘@ùiéúÑå§§ëT/üA¢ésˆ5 ^ÂÎb»Äw)õÁ ãƒùSôýkJÕŒƒMÔìïLxßöiÖM¹é�¤ã¥\òÓÓõ£ËOOÖ�A8ë@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§SXå.#‘\£mm§;O¡ô4¾Zz~´yiéúÓ©�4q4k$ˆ�#l@ÌæÁ8§ŸÀÐùiéúÑå§§ëN¢€å§§ëG–žŸ­:Šo–žŸ­Zz~´ê(¾Zz~´yiéúÓ¨ ùiéúÑå§§ëN¢€å§§ëG–žŸ­:Šo–žŸ­Zz~´ê(¾Zz~´yiéúÓ© =h<´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?ZvyÅß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@ òÓÓõ£ËOOÖ�E7ËOOÖ�-=?Zuß-=?Z<´ôýiÔP|´ôýhòÓÓõ§Q@Q@kš)(«3Š( –’ŠZ(¢˜ E%-QE¢’ŠZ(¢€ŠJ(h¢ŠZ)( bÑIE-fŠ(£4f�fŒÐE£4è´QEAaEPŒß _dÿÐÖ¼É!ÎŽ÷ž`ܳ¬Ap1‚¬súW¤øØíð~ }“ÿCZó�.óNM t¾ÞånT�3™p¬1žÃžM}Wu†rJþ÷ù=š%,JOų̀]ÀRv€Ü‚GZ×¶„YxÎÖÐ>ñâ(8Á?0ªk¯¦¢ßfÕ Å©?ºx“Û°Ú;¯L�ëR­ÜW? – ß!VnèMM¦¤­£ôéÔóá&œ]õ^¿qì5æÞ-³Óõ/ϧÜÙ[ÝÞÜØYGl²D®È>Ñ/˜ã#€$Ÿ î+Òk ÿ¶š–¶Ú¤×z„Rµ²[íµ»’…g`N û篥|iö'g¦iúOŒt«{]-/µ/e[4F Š(”.Ò:| œc§§«h÷Sj:1ÖîRæîöí QlÔC$€ÃÎCîEùÏ$q€8­¸|!e«c¨%æ©$–nΉq,èK#!áØ�ÃF j^é°ß]X\JÒ±œÏR0X£&0ç¦9Åp_l5A๿´_I¼’ÊFš+‰ÀGdT$|Œ¬¥÷mdqš§a j“Áik·Ámå²½± [éÐüøUb0ÊFËî9co¡kÚŸˆ4›‹ ¸ã>lOJцh‹)]Ëž‡š¥©øU5‹§]RöÖÈV ¨ m•#d,¼1)GÅZÞ©¦èú¤°ø~æG¶µ‘’ÿu¿–Bwíi7`qŒñÐÓ<5§­'²—Ãú•¢Þ¡{«ùî¡2LÄu-…‡¶Ú¶¼C¤ÝkZDÚm½ìv°ÜFðÎZ0´l¸!~a´óן¥^º°·½Ó¤°¸VkycòÝUÙ \`Œ©~ÏxRTÕît´h¬ÑÅn‹÷$•7y²'±%W=ÊïY>(ÔõSHÔZ%µ�MµÔàµ*ÁŒÎËq[9À¸ÆG9+¢´ðn‡ehÖ�ÛÜr|©/&‘T#P¡œ…Á¦:T·~Ño®äº¸± ,޲>$uVuÆÖ*†8Ï“uâ�F¨Çojt» Ñg,l[Ï“æUgSœ áH;€ê2+BÃSÕ5]Jí­–Î->ÖåíXJ¬Ò»(a‚ŒžG9«røsIŸRþÐ’ÍZãzÈNæ θÚÌ™ÚÌ00HÈÀ¥“ÃÚ\š‹jØ­ËÌÑÊè€Àb €X0HÈÀ  ¯ øŠûZÔî¬æKTþÎ+¶�'Í›yÇó&ç998ÎT×QYÖš›a-´¶¶ÞSÛ@mã*íþ¬�pÜüÜŒå²rIîkF€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ä5ý>ѼC§-‚·öÜ×QÜ<ÁÙšt#ÌÎOÊŒݽ n�Muõ…7ƒôYµiµF†éo'*e’;éÓ~Þ€ª¸˜ÅsV'LÖK0Õ.µË‹YßqËÄeòÏû*¨¤ÛsV¡ŠÏIñ-ÍΑïk§XÊ5$´­q1ØQ9ÉyV$õÀï]2h:dz›ê)jéÉ%Ã6‚Ás€ÄpX ŸZ©¥xCFÑ.m>+¨™ 0S};¦[9%Ê’rO#¯4ÉxGWŠ?k—×òÝ}¢}> «Ÿ6ÚhÒ"­)(7¨ÂªíœnÁ#œâí¦—ö¡ac¬!)&Ÿ6¡$,çy%RÍõMضx®ŸSÐmµt눦»H¡¸�‚Þd(åŠc8 ã?íwÆ*}OEÓõ…Œ_[ù¾^v�ì„ÔeH88zó{[ëíbÒÚ}KNMN+M ÚíÒ{£Kù…äPÝ!® Æ9äf»2 ×õ‹h”Ê,íôÿ8á™X4ãjÀä0E“¡ÏÎ+FÿÃÚV¦±-Ýš:ÄžZª±A³û„)—�òœ�j#Ñ òµ8çv‘5&@„ǵ6 œŒêä“@&�eq©kÙñìО8í–4‘•&�YüÆRNU Jž¸§ø26³Ôu» ­£²•$ŠQc†HbFR#q÷жF‘ӹгð^ƒclÖÐÚÌÖí�ÉšîiQTFÕw!H FÇ£¦èö:BH¶Pl2¶é��Üôf$ŸÄÐ §Ç?Ùü=hí­«=Ìwr–$’b•þoduP=­I¢E©iºÝ­…¦–tû‡Ò¦3ý¦a"O:ÂÊÛœÍó1ñÀ®ÆßÃúU­ô·�Ù¢Ï.íÇ$�¸å°¤áwNÏze¿†´‹[k«x­?wu“6陣Á7H^N ñ@§ŠtSkywâ»ëM+PKkX|È'„³¯–X·”ÄáIß‘�s�Ó­VÔKÿÂMq©ù.Ö‰ªÛÅý§¿Z�±Z�LlØRGy�qšì¤ð¾‹-Ê\=Š—R‡Ø+”)e΀ xé|9¤Í¨ý¾K0g2,­ó°FqŒ9Lí,00Äg�@~!ðõÿˆím »m1¾Ï~÷ д‘IGT ¹a¼È˱þÓ¶Óí,4;{�°Åz’éQIå@eØ%BxÎõm ÿy¹sÝÍá­"xÊ=¦33Ͻ%tpîrä0 Œ÷â’o hÓÛÛ@l„il…"òdhŠ©ä®å �HÉà÷ ønt¹ðÆ—2]=Òµ¬¿�a¤;FXŽÄ×9ã£4Ö�¨@[~Ÿö‹²ª3½'˜¸÷Bø÷ÅvvöðÚ[GooE J#A…U¥G5�µÅÔ73DXUÖ2IÀ€Ãp:ЗÜj.×>0ÖÊGsΑÄM“D²L‰÷H8`›ø?Ç]Ͷ©©j:Ýí½’ZGe§Ü%¼þpc$„¢¹+ƒ…8Æs“ž•jçÃzEÜwËdž]Å¢ÙHˆÌŠaRÅP (›¦4ùô 2çQ]BKoô�T—YC•û»€ 6;dP9oâ­f].+Ö·±k¿m>Õñ†:osž˜CòŽIÇ#¹”Þѧ¶··k ©l¥b1»FÊ Ë ÊA žH'žù«Pé÷P\Cl‘ÉonmbÙ�©*v…錪öí@¾‰i¨ëÿ ßSºK™¯´ÜG"«ÃF1¼³ÏžIã>•ÍŸ¿œÐ¹äñ¨ÀãŠgö]‘’õͺ±¾P·;‰"@h:qÅp:ÖŽ÷Þ3Õ"°Ð´Û÷‡K¶XZâo(ÛäÌ�}=W çÓ¶ðÕÚ_xcK¹ŽifWµŒù“ ;� ØïžµUü¡É,r{€É[ü·³¨hÓ;U€|62~özÖÔEkoF‘C„DA€ª8J’Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( 4¢Š+C1h¤¥ Š( –’ŠZ(¢€Š( Š( –’ŠZ)( ¥¤¢€ŠJ\ÐE&h bÑIE-™¢€ŠJ)´RQ@�EŒCœPY=[sxþtnoï΀ ×4±¬è·Zy“Ë3(ñœA¨¯8ÿ…_¬—öXÿyÿøšô«‹¤µ·yæ�¬h2Ʊá0Óÿéãþùã^– ‹¥ ëÐó±´p“šuÝŸ©Çÿ¯ÖçþËþúþ&´t?‡7ÖÍ­ååí»G‚M±n%ˆ9�;×C‹´é&HÙæ�yÛ½Æ}Nx­ÍÍýãùÖÕóŸ§Ís`Âvk˜Óƹ 3v*N3Àlù#ì Ý3W²Õ´ÛkûY�†â1"n 0gzÖLþ>ð´Û¡×,_Γfèî‚|¤å¹àqŒú‘ëY~ ÒtRkŸÚé:|),ž]¤qÀŠÐ"dd€>WbXžøÚJÁ’O²jš•œV7’ÛÛ\˜a_jQ¤hp�`‰�õÍw^2Э´Ñò]Û™„9³>qÝ�ÍÂäü«–8äM6Oèqmó&¼\Ʋœé÷j*¾O”­Œã¥r—vvÓ|5ŽóÍ‘ÆY¯n⸚9Iºrì.Ø]Ÿ¼Àã$‡ Âén.—MƒTP5â°s$°Þ9Uw*À­Û2ðø8R8¥z¼ºÝŒ:¯öt’2Í„Ëmù9mªObvœ§¨Ím/Åš&­hn-ïá ¶ââUwÀ„gçç øšóÏ ø�:1+tú•ˆTf�1d�ß¾'® p=F ixNÑõ¿ �:›û9ô×�b[&�7:�‡”±0îUG¥uM㯠­üv‡]ÓÉxÚA(ºŒÆ0@Ú[wœ�ßÒ¯�{Mò-®"ºK‹{—1Å=¿ïP°�Ë‘Ø�¯kŽê¨—y§ëGWº sÖÒZ¢ ŒªüŠe#`ܹ ËgŸh5¸¯4m*ß'ì·£GÕ.d6ì˶fòܰùŽXž “ƒŒPZ¾0ÑÌÐÆÍ}šT‰ ÚmÄj]ˆUš0I“S¯ˆ¬ÞðZ‹mPHdò÷2à&sŒïÙ·ùÇ|מ[^››»ˆ£¼IíÒïIeXµy5V7M“½ñ´�*=­`ßÛ½~ñ­õ )u ‹Ë•[%²…dùÙ¢›vÿãàN˜ n±¾‡PŠI!ݶ9¤€îù‘Š·á�j´zö�.½.Š— ob�ÌdÏOv‚G`G­p>±Úž"kX%ÐÕ'Ìù'¸,€ùp€Ÿîñ�*ìÙ-´+ye‡Äé¦Dët²îÓÂNwïSæn9äçqÉ ã^ñvŸáûˆà¹I]7í[«xÊŽ€‘,ˆNy鞆ªè><Ò¼Au êдɾ?6êØ±ã8Ø’³ƒŒœã8®ÅòÞhWöÏ ±Ï3Z¯Ÿq<·bY’&=VÙ6¨CËpK8ç;Á^O¨é:„íc n÷ÈñÈ‘lo–Dò‰ÚÌ ®>örqȤßëVzsÚ¤¬Î×24qˆðÇpF_D?Ž*m7R´Õ¬RòÊ_2ÈäTƒ‚<‚ ƒ^Q­éÚtz�¥†—¤é7÷jnᢲ�VHÄ29·‘‚íßÁ ã H¯{á(ôÝ?ÃÖòÃ-‚é ˜¶‰!F‘²|µP%@ÆÍòó@·A$I,Ñ£ÌÛ"V` ¶ Àõ8þ¥¯8ƒQºÕo|%©]j)#Ý_I'Ø}ŸÊ6çï:÷ôéWô¯js¶‰y-äs�RgŠ]9cPm@WnÞÊ• Û½{PqEs^Ô.õ[h5½R2×HÄéêˆ<‚ÝÏÞÊô9ïØWK@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Wkû4½[&»€]0ܰò=Bç5b¹mtûÝrÛJ²Kt¼[¸o¯gPĨA?ß}¡@þîOAÈN·¶�xöks ]"îhD€º�R½@¦Á¨Y\Ë4P^[Ë$'¤r†1ÿ¼ãñ®ÃÊ)¥·ûWû~ëÍÿž˜Ý6ì÷ÛåíëÆ6ûUÛì»­vK˶³Ò´»)­ ñíDvb¥±Ø¬a:ôÉ>†€:[ oIÕdxôíRÊñÐne·¸I �RœSßVÓã�¤–ò‘f0•Â0'?Jå4«¤ðÅÉÓ–ý/ôÛ]$Ü™DhÕUÊ�Ã$g'å<šK{;{WN‡Z…:Tò?›÷ Ï"¼ägŒüß\gÞ€:›ýsIÒäHõRÊÍÜnU¸¸HËP «^[Û½ºK(V¸r‘»ˆRÇôRsí^w =·…mu¦ÖR RÏDˆ=¬È�»j—Pá†á» qƒÅuºÕµ†7Шµ´Óñ4rà¦ù¹`Ùþê'~Ï@VÚ…•äO-­å¼ñÆHwŠU`¤uƒÅImuo{žÖx§„’‘8e$‘èA…s:ÙêZ¶§«À�¦›qv°Ç€È…ó!_î�ûFz�ž„TÞò×ÃF8¶KÛ°q€>Ñ&8  è¯-g¸–Þ+˜džy±£‚Éœãpê3ƒ×ÐÓ–êÝîžÕgˆÜ"‡xƒ�ê§¡#¨Ÿjå­;?x’K;t–_°[H!ˆª™¤Ìç†O©¬=¯`ñ6¨×–÷z}õΖ³]^ÜJÅ&ù>|#`U²sޤÑn.­íæx¡Wq™(f'Fz’z %º·‚Hcšx£y›dJîvÆp õ8àWœøÂMB[ËYîtÛÛ«K;›?±Ï ‹Ë•̱—“ÁÜ~âŒ`dóƒÃµ›�BOéw÷º& <­Ia³Á„ ‹Ë“q¼Îæ<œ€6 z€w÷Ú•Ž—ŸP½·´„¶Á%Ä«–äã$Žx?•F5�,ÚÃt5+3o;m†Q:ì�çSœ‘Ú±u++}Oì±ÜxŽ5ž ùg�ÑbÈ!Y x9 ~r3ëXQO=å¬ZÅÃé,v÷V’ ·ò‘¡YHóÐr(Èà9èµ—VðÏ ÏM9"(ÙÀi02vާž+7©u„´t½ßö‘g“ÞÎÑ×Þ°¼o¯«h·6ášæÉn.âUêå¿ð%Ü¿ð*êäÔ,¢’hä¼·G�’«J�OFaž“éVkÊ%¼ž?øJµØˆY¯thïbó0d•cʰ#î*êMv0j7w¾!¿‰õ8ì!°¸Ž¶(„άŠÛ‰npKq÷{ô šŠààÖõ¯ì(µ u$kÔšÅY P–È'tó«aBŒñ’2:ægÕµ–MBÂÛPŽâKK¸âJ"IeCöD û³(8ô=�vÕZçP²³šn®à†K‡Ù I S#z(=OÒ¹XõÛ�NæÂÖÛXûd÷&îX<βl+†ù@^wc®F™e.£¯ëúF¢×òÚM6‡4›a‰ çÌŒew©8l†ø³�B¸¸†ÒÝî.fŽcžI*¨õ$ð(ûDiû?�Ÿ³Ìò· Ûs�ØëŒñšãü+¦�GálÞ½ÒÝéâ0 òCFÁ´žù>õÊ�jo°/Œ„mæoì¾¼ÿǾüàGÉ@µÄ7P$öòÇ42(d’6 ¬=ARW -Õæ”'Òmõ(tÈ4m.#ó#Vk»wð €|¸9=zT–Úæ±{y>ö‚M2ÚøØˆ”»Èë!1î# |˜õÏqÎ@;¸‚;ˆíÞhÖiC4q–œ.2@ýEK\›q=ߊü5uq«Å~÷3m�V-Â#…Ç;}7dñÖ»Ú(¢Š)®é3Èꈣ%˜àN¨çHd…’ách˜a–@ ‘ïš…µ;±Í}l¶l2. ª##ýìâ¬G"MÉ«£ «)È#Ôâô;Ý'Oø}¤Þj ¢Ä ´3™ *ïãñ­ ¤Z6�kkysoòf1‰F³4Œ‹ê68ì(BÏ\Ò5 ¦µ²ÕlnnÑCpŽêÁ$ž¦¬5åªyû®ag¦Ë�Ý g-éÇ<×' 'ö6¯¦iVzšjvsÚK&ï.=Ñ)† ƒ•mÄ|Ù硬}r;öñ6¹pQ%Ñ-&µžþÜd¼è# �œ�âÆ(º›_Ñ­çŠ õk¦•CÇÜ¢³©è@'�}kG­yþ§Íÿе¡a}¦CºU¶é/!2+)3`© ã¹µu>�.|)¤ËREZGµ$mÌPO¯z×¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ÕQ@iEV†aEPKIE-Q@Q@ii( ¢’—4QFhÍRfŒÐÑFhÍQšLÐÑIšZ¥Í%¹¤Í¤Í 4RfŠZ)( J¨$ÿXjz‚Oõ† ±”QE`øÌíð•ùöOý kÏt½^ÎÓGš+‹qq?ž²Ãca!HËz�ž�ëÕuM:-WMžÆrÂ9—¯QÎAüÀ®'þtyÿ�³ÿß�ÿÅW¹–â°Ð éÖ•µ¿_.Ç�˜a±¬ªQWÒÝ<ûœô!žY¤MM~×k;fD$eO÷“Ð�˵MôwÞ;·¸‡ýT·¨W#�¶ÿáWGÿAwÿ¿ÿŠ«ºOÃË}7S‚öKù'òX:§–n2rkº¦;£' kf­fqC�n*qÒéÞèí+2ïA±¿Ô£½¼Y.,á’BbFÄîî÷ ôâ´è¯•>˜ËoéçX]V$’ ¼æF‚VA7ý⃇üFxªÏá;º¹¸ûN¨�q)•ÖFh—qp¨ÀvôÍnÑ@ñøjÆ?¾†­qöG.K‰“,åÉß×9'žµð¦ž.-æûF¦í«* µå]æU܃ùVå�uá»k»¹'{›•]Eu$HWk´av•Î2Šx#žøâ ±ðœ)CRÔe¶††Þ‘P@¬1ò²*¾@àÄ�¯5ÐQ@ñðf–× p×±™¢Èu[�ʧ€wä�ǰ«°hV°]Ù\,×NÖ‘ËyÓ´¥„…Kng˸1Ï©EgêZD:ŸÙD²Ëvó¥Ç—Ð$d`Ë» œàŠ¡/„¬¥ >Õy¹òÜ)oÞ<ƒœdaœ‘ŒZߢ€0ì<'¥é¦ìÚý¤5äMí%ÃÈ_$’rÄó–cøš¬ÞÑÚÅm šŸ–TgR�‡ÇÊ\¯n˜Çµt´Pf§¡Zj²´“´ªÆÙí²ŒÈ̬zƒÎP~µ~µ�T7Æ{‡;¤%Šù{¤1û¹è1ׯEc'†¬¢¾±ž–{mìãÚ°£meÝ€¹ÎޏöÍ\‹HÓ šY¢²�d–o=Ø æLc³c½]¢€)®“§-Ѻ]>Ô\ó<Ñ ïÝ‚7gÎ ô&¤ŽÂι.â´�.e’eŒ«c&¬Q@£Óì¡»’î+;t¹“‡™bßêØÉ«4Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@fMá½ æí®çÑténY·žÕÉõÜFsZtPqcf.žèZÁö™cÍå�쾄õ#Ú©ÚøoB±¸[‹=N·�A $6¨Œ20p@ÏBEjQ@²hZ{YÉk´v±K"I ¶�SÌ*Á°ØƒŒbjÝÕ•­ò*]ÛCpŠÁ•eŒ8t#=êz(´úu•ÔñOqgo,ÑÇ$‘+2bGzU¢¥òI�/d2N³(`ùP¸##j�ƒéWh  ¸<5 Û,«o¢i± �Ç(ŽÒ5Þ‡’­�Èàp}*}?GÓ4Ÿ3û7N³³óqæ}š�~3Œí8Éüêí�‡ô[[á}o¤XCv o>;dY2s“¸ ó“Ÿ­[’ÎÖW‘ä¶…ÞXü©�éÏÊ}G'ŽœššŠŠK[y¡Hd‚'‰ ²£ *¥H*@ö éŠY`†v�¥Š9 O¾2êÆÁ‡Œûš’Š©6—§Ü@ðMck$.æF�áR¬Ç«G_zY´Û �šÊÚAÌ;âSåÿ»‘ÇáV¨ £h"y£™¢F–0B9PYAëƒÛ8%^}>ÊäÊn--å3F"”Émè ![#‘’xÔûRß9ÀTUBìÌIá@^¾¤PÚ+!ÖXO>‚Eü(ýBÏZÓ¯õ Ë[‘%Ížß´ R6n,$`ýÖééLÓµý/V�Ჺº®üle ¹Æå$Ëžë‘@TU �kO´Õm4¹®BÞÝçÉ‹i%° <��·_J¥uâíÊûìw]Ç)™`ØNP¹8>ͧ$úÐåOQÕlô¨’KÉJm¨©;1ÆxUžaTæñV‰´/~†)ÐÈ�3ü€à± Мހ6(¦£¬‘«£F«�G­UºÕl¬¯ì¬®gÜ^³-º'yQ¸Œã�\PÊ+6]L‚êúÕî¿cÍrŠŒÆ4làð9èxÖ—Qš(¢Š(¢¨ÝêöVWö¶3<†æë>TqÄîp›h;TqÀæ€/QTî5k ]"MZK”6ÅçãÌ‹³Ü6ç#”ŸÚÖÚ¿ÙŸiO¶ýŸí^W9ò·mÝž˜ÏvНa}o©Ø[ßZIæ[\F$‰ö•ܤd«QU¥Ô- Ô-¬d“7(ïm?0M»¹è1¸uõ«4QEQEEss ¥´—¸H£™�a@ÑYƒÄ:YѡՅÖl¦Ç”â6&BNUÆâO «–w¶×ö‰wk2Ë‚UDZÁúAvÅOEgiÚö™«JñXݬ®«»î²î\ãr’åÏuÈ¥Ÿ[Óm…ûOt±‹¦ä²Ÿ“pÈíÎG¦}:Ð…‰wâÍÊïì·Ü,¢�€´™„hÙÁr ÷OÞÇC[1H“D’Äêñº†VS�Àô Ш¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šó:(¢¬Ì(ÍPš\ÒQ@ E%´RQL¢’ŠZ3IE£4Qš(£4™ ¢’Š-fŠ)sIE 4f’Š3Fh£4QFhÍ )3FhÓh¢Š‚‚Š(  /¾¾>Éÿ¡­y¤k ðô³•&QtˆuÁV8ý+ÒÉÿ¡­y†™â§i“@‘F÷ *É�Ȉ€FqÜóÅ}U<3pW|ßä|öhãõ•Ìôåÿ2[Í6‰Ñ$ã¨;O\7¡Ç85¢«¿�a‚Ù^  :˜V–¹qkq#Ë"ÜE7úø¥$‰G¿¿¡íWm5Ô|uitƒjÍ{'8ù…z3§VÏ›k?Ðó¡*w\»ÝÓX×7ž0Iä…ÒËO³-Û¤³J@8ÿuP�øoÕkû }NÑ­®|ß)ˆ'Ê™ân?ÚBë_}‘ÄøzÞâ Áz•ªHÂK²»òÆqG¹\ÿºê9ì×7¬Yj—ºÝ„º·wqn×΋q:@>Ó:Á&⌱@D1î`Ã-Óåç×-¬í­,b²‚Kh£$@p ùTm¦Y7ؿёE“o¶TùDGiNãî±÷  / jm¦�mZ¥ÕÀ’ak7Q¢½¼�OîJÆŠOQøãÊÙ]ý³Uð´×W÷rë-~æúÒWm–ïäMò„è˜è1ÔsÏZôä‚(ä’HâEyH22¨ÈžüT”çz&¥¨K{£‘}w6³4κ½ŒŒ|¸k“òtŒ�¼|Ôšf£i&‰u6³®j0êÆÖCÌèm›?Àƒ… ð¤}î>ökÐ( SÁwz…ÊÞ�nY°†?:ÙŽ8öüŒ«’>o˜’?‹#øEutQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@p¾!ñ&‹}âKoK©Z[­¥ÌW7o,�Iu`ÑÄ™êÅ‚“è:šî¨ <±`§MÑØ©ÚkwS©^R"ó?šO÷Y]@=÷cÖ�iâKø’[½P°k«KY­tËy&§‘°^B£�ƒËP8É�LW Ñ@g¡6¡á­s[{ÛA¤Ã4ïÙ•æ“|ìýZå�‹qÆ8ÆsưX|/©é²ê�û�¥INW!§.®ã�âs’}¦ºû»H/¡Ü&øÃ¤›wó+^žàqÐ÷©èÈõ #Ä6¾ÓÞîÂÖ[{:Þ(’K¶G†BW{ØAnˆ9ànõ®ánѵ«½GQ1A•d#˜ù›’9 %ÀÈ ±`ã''�]%Coi©˜Â›LÒd9's óìü(Ïìux§ûsQ»¾FŠòÙ-¾ËnÛæŽÕ\�î«’¤´„ŸîŒg½oxVäÏ©j©gyq{£'•öi摤ýá æ*»rÊ>Nç‘ì:Š(…²ñ—/�µøío-®®Âá·IT´ÒGç—Aî8Ϧk'Ãï2D�©Ëqg‹4rI e$ÒWä&<€Nq€|ãÊï“^¡Ep¾#×´kwÂi>«y3´®g”µ¼Š®Ùç’@Éîkfø›Ïé–oƒ ¥¬·¥}d,±¡ü“󮆊åîõ-:ÛKº�uëËA-Ôªo]7ù+e�Bª½@Ïlà×4(e¹>ZùFGå÷�Ã/·»6=6Š¥£­šh¶I§Ì³Y¤�È­¸29ïÀ®gÆÖRÞêÚ?Ù—uäÜ\Û ã2Ç岌û‘´û]�ä·m{eе3çYê7zw­‚c’&igؤŽC*_ø u"õ[Å·qjú•ݤ±ÜFºu´r2$ÑSœ$Ë—9Àº×cEyÅ´Úˆð²jo©ê,&Ôä‚êQ!o³Û-Ë©*;p ê'< ,—Ó¾™~-õÉWHŠò?²ÝÜÎè'O+/Ú,wI9äæ½Šó÷ÕEÉÒÛR½Ô´½"K't�ÌÊòN$À äü¼¨þ sƒŒUm>ÆïWñ�>«-üwòè34›'xŸ25ª‘´�Ù#×ÀǤÑ@O‚l,¯~Ǧ,òÊÒÚ}žî9¦g0Èc Ɇ'`ÝÒ¹}~|0¾+ÿ¦�t¼cæÇÙü¼àHü«Ùh >Õ\éWSi÷:�æŸmg§BºRÚ’¢iB°núÆA°ä`ô楳—Z½Ö5.'¹[Û=&Òálc”¬Få–]À�ÔnP1Ð÷Îw”PœhSÛ]x³Ã³C©Þ_\+“wö‡cåÊDYHÂçåÆ:W£ÑEQE^öúÓM³’îúæ+khñ¾YX*®NI÷ UŠ(Ì´=JÊO øJù.¢–ÓMº¶²6áh¥UgÇNYzôÝšèü=qmö)᜼iªÞÝÉj›Œ±%‡de†q�ÕÕQ@á¨d—ÄDVº¤z…Ž•c,>dv¦/-O–¨’N_ I.6òEUÕôíB뚥¼†h4¹­nŽœrËÎ}Âä¨þö zUæ:ž£§Þø³P•|RÚTºM«BÑɹRfèI8¢àóô®ãÃfð®•çÚ IE¬`Û€@� <Ž;EkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@›d/&`ĈÐe±ÔûVÏöM—üñÿÇÏøÕ •陂ª…$“€5kþ þ‚öŸñòŸãM‰"Oì›/ùáÿ�·øÑý“eÿßãQÝëš}Œ·1ÝLÑ5¼?hpcc˜ú\›ƒŒã#ÔStýOÔîÚÖÝ®êžaIíe„íÎ27¨Ï'µboì›/ùáÿ�·øÑý“eÿßãQ6¹fš›X8•d,[ö›™w(Èé‘ëŽx­*Å/ì›/ùáÿ�·øÑý“eÿßãGöM�üðÿÇÛüjí\,Rþɱÿžøû�Ù6?óÃÿoñ«´Qp±Kû&Çþxãíþ4dØÿÏü}¿Æ®ÑEÂÅ/ì›ùáÿ�·øÑý“cÿßãGöM�üðÿÇÛüjí\,Rþɱÿžøû�Ù6?óÃÿoñ«´Qp)dØÿÏü}¿Æ�ì›ùáÿ�·øÕÚ(—öM�üðÿÇÛühþɱÿžøû�]¢€)dØÿÏü}¿Æ�ì›ùáÿ�·øÕÚ(—öM�üðÿÇÛük?SÓ#·‡Ïƒ!AÃ)9­Ú¥«ÿÈ.oøþ„)ÜGMHX¤RÓJ)9#šCrÿx~tn_ïΓËOOÖ�-=?Z‚úÒÛQ²šÎéCÃ*íeÎ+“ÿ…g gý}çýý_þ&»?-=?Z<´ôýkz8ªÔU©É¤aW J«½H¦qŸð¬ôùïyÿWÿ‰«šg€ô=*þ+ØŒòKÜ‚Yúà]?–žŸ­Zz~µ¤±ø™'7fDp8x»¨+‹¹¼?:7/÷‡çIå§§ëG–žŸ­rBî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­.åþðüèÜ¿Þ�'–žŸ­Zz~´»—ûÃó£rÿx~tžZz~´yiéúÐî_ïÎ�ËýáùÒyiéúÑå§§ë@ ¹¼?:7/÷‡çIå§§ëG–žŸ­:Š( 1ŸËû$iÿ�µÃö¬ýݘ|nÿg~ÌÕýwû/ÍÒü¯³}«íQù{6çÊÏï3þÎÍÞÝ*Þ„ªët¬¡”…�G5kþýþ�¿ñìŸáM‰lp&¶Ž÷Âv¶vÉ%»_»ÙÌцH!]¥ÙsÆ îQë»Ò¬Kyy§MS½µ´¶IVâ;4€D†5ˆ±‹td„_1²OÊGjïoôøoôÙl$Ý2(_Ýà§nÕLørÀÞ™Ø9ˆÅ,fãÊiÌ�Œd–=ri Á×÷¥Æ£§Í«©K�4¼"ñ‘Uœ]ØÂ’zô¥žk‹›«ûÍRÛN‘bÒöýŽ ^f”;e2¯ðJ‘ߚݾðΗ¨Ìf¸€³˜’ î?êÕ·l€ôluºÖ6¥þOMÁà© ò;௙>´âvÒ�?MÒâ¾{xZ"ˆá¹ –vl»"ÜÂA*ÊŽAÇa]{Ùý«Àš}ñ‹G¿{Etc{Úø2aU]d `uù› ⺸¼)¦¬Áqç]Á^TQ\8dA·i!@qäóÉÆ3O¹ðÅ�í¬V·“^Ü[ÄN#{§‡ ‚7ãnÏã@î“áÍ"ÃÄ7«©iÚAt‚ ã–QhÛÝNÐI*F<õ9®î±eð®”ñÛGÒ8 ÂÛá©!™[ŽA* ïÇZÚ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  »›­BÂåÿÑžö �î| FßÝoöÚíßµipš‚îU’s‚Å 2Ã�ì:sÍjU-_þAsÀô!@5Q@Q@5;ñ¦XIxÖóΑàºÀ»˜.ylwÀç'Ž®~iðkÙße¾‘­žIeRU7»î ü¤uÕÿÏsiáRöÒö[;‹[i'ŽH²©!H`F Ç¿½qW:jßܶ¿ šïöj\Ä#ò®nK0fo>XÑ[pS¹Tm…$ps@Ƨâ½IL^êv¶ó4>rAq(‰ÙNqò·#8#¥G¡x¿E×ᵚ�£^M ÊÖ©:»Ç� x΀mõèæ¹Ô¬4ؾËs£Á FöE• ù¤ƒò33ã;±üðÿ [k·1xZæêÎÊ;k–H.Y܆‰BîVEÇàMuWZΟe¨Úi÷!.®Ø¬í$¹Á=† zúUò@“€+Œñž¹¥Xk~†ïQ¶‚Hµ<‹$¡JFa™wô gÖº-SGµ×!†+·™­TîhB©0ìy}³ƒß4‘âM;[ºº·´vÝp]p&Oùé÷“9]Ý2µRÔ¼k§é×vímxóZiƒF!�U˜ª·›)XðH |ÜãŒÕK ÛW—XŽf–)-5&[Iàr’[�*.Žƒýž‡¸5•®Ã©Ýë:¤ñés-€ûr]\ºF1orÒ;NJílç�ÁöÈ߇|qgâC+ZYʱÅ‘ÜÜÛ¹\`ªHÌ3ƒŒ€8ëKŒ¥ŸN�P‹ÂúãZÉ™dÿFåÜ<ìô¬� 1¸šöãÌß‹¹¾uß4² ò?vé�˵aéÚEãx.ÒQ¦¡C§£ÿ„¢í2<±Ï–hÿtp:PªY]%õ�½ÜA„sIJ¨n 0ÈÏ¿5=føwþE�+þ¼áÿÐh»¬hÎìTd“Ð ÏÓõí3T·º¸²ºYaµ�Ç3í`‚†=G<r8©tÍVËY³û^Ÿ?�ö�~Ò¿2’Áõ¹O ø�E—RñL‘ê¶lŸm7[„ÊG’!…L�~è#éIà¿hãGÔu$Æ«q‘Þ@–á„g “†ÈÁé@/ü$:PÕN7`\³˜Ô`¥ÀÎÐøÚ[ü¹ÍY“Qµ‹QŽÁå s$O:!”R¡Žz ^ýë‘Öïá¼ñ6”¶·³\Ío|ˆúKô. VŸ o”À’Tà`dƒPøÓG»×¼Y§éÖ—æÌ˥݉.íë¾/“è[n}FGzèåñv‹µ¥ÇÚ&’+ÂâÜÃi4†M¿x€ªNßöºÈ$V•�ý®§h·Vs,б 2ö à‚ ‚ ò+ϵ-nÚî_ \Í©�¢ûU¼ì¾Xû<ªª­ï®28ã‘‚:×Iàpˤ]¦ZXEôƶR­v¬CH÷faÆÛ� šŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ?Óo…”Ì\Œ6:�zÚþÖ±ÿžßøã…U4MÃûZÇþ{ÿã�þkXÿÏüq¿ÂŠ(°\?µ¬ç¿þ8ßáGöµ�ü÷ÿÇü(¢‹ÃûZÇþ{ÿã�þkØÿÏüq¿ÂŠ(°\?µìç¿þ8ßáGö½�ü÷ÿÇü(¢‹Ãû^Çþ{ÿã�þkØÿÏüq¿ÂŠ(°\?µìç¿þ8ßáGö½�ü÷ÿÇü(¢‹Ãû^Çþ{ÿã�þkØÿÏüq¿ÂŠ(°\?µìç¿þ8ßáGö½�ü÷ÿÇü(¢‹Äþ×±ÿžÿøã…Ûóßÿoð¢Š,í‹ùïÿŽ7øQý±aÿ=ÿñÆÿ (¢Ápþذÿžÿøã…Ûóßÿoð¢Š,í‹ùïÿŽ7øQý±aÿ=ÿñÆÿ (¥aÜ?¶,?ç¿þ8ßáGöŇü÷ÿÇü(¢‹ÃûbÃþ{ÿã�þlXÏüq¿ÂŠ(°\?¶,?ç¿þ8ßáYÚ¦«Ä>D*NYˆÅQ`¹ÜQE†QEW¼±µÔ"HîáY£IUVé¹NTã¾5‘'ƒ4'/¶ÚxQسGoy41’NIØŽô¢ŠÖ·°¶µÓÒÂöÛ$~Z¦â~\c''ëR[[Cgi ­ºl†XãLçj�€9öQ@ÑEPC Hb‰#2¾ù ¨Ûdúœ3ì*í6ËS‰"¾¶Žâ4q"¤ƒ+¸t$t?�PɧZKyö··Cqå|Ìa¶ \úqY)à %ºÀ<9¥lTØ ´BØÆ>ñ'ß9¢ŠÛ·‚+[h­á]‘D�sœ(ò©(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?ÿÙ endstream endobj 48 0 obj <> /XObject <>>> /Type /Page>> endobj 49 0 obj <> stream xœ+ä5T0B]eab¨g©�œË[È 3µ4Õ3† ¥ò†k)äñè˜*”ó)ø±g�•(¹óê»+¤ó*˜šè™AL626ѳ4S°4P0Š˜€,Ð÷ô55PpÉWäAÇß endstream endobj 51 0 obj [6 0 R /XYZ 90 752.9 0] endobj 52 0 obj [6 0 R /XYZ 90 689.6 0] endobj 53 0 obj [6 0 R /XYZ 122.1 351.6 0] endobj 54 0 obj [32 0 R /XYZ 122.1 521.4 0] endobj 8 0 obj <> endobj 9 0 obj <> stream xœe—Ën]» †çyŠ=<xé.�]–€ zAÓ>€cï¤ÛpœAÞ¾Ò÷'h»ø R)’âºéƇ§Ç·ËÍß^Ÿï?^ß.ŸŸ^¯ßž¿¿Þ_/Ÿ®_ŸÞ{yx¼ûIü¿ÿz÷òîf)üñííúõÃÓççËû÷7_kßÞ^\~«ÏŸ®ºÜüõõáúúøôåòÛ?ûÇÅ¿¿¼üûúõúôv9no/×Ïk›?ß½üåîëõrƒÖïÖòãÛ�ß—Ê/‰üx¹^,lt”ûç‡ë·—»ûëëÝÓ—ë»÷ÇúÝ^ÞÏõ»}w}zøŸusÒûôùþ_w¯È�%¶ßn²òFTEe“9ü"{˜. ¢±ÉÚmÕ‡‘Ýäì¶àÏu°M.‹š¨Š†¨‰NÈ�qPHÐ:$=+½¨5§µ( NR„äƒkÊQ${YöNíÒ´ËÔZgÍ�^dE²Ús²§÷;.~š,J¢*"Ó Ÿño'*"¢ëk‡Ò„ÍŒG¾‹Šhx¨&è”^C/Di¢ü^ ‡ÑÚPåœ1AÆ‹Š…bi-j­PâÔ±I2K²>Äé E]„õd34ñ!9$íE^„GÉ#i�$‰`°Š` QTD’´’ ’t’LòD"uI*‚©K²Jr]8D&'EÉ*JiÈ^•=b¬b�‘p‘È�œÁ£œðÈy<ÊY’A’ЧSE~'Äjw;!ÜîF‹NÆnçhJé¤)9wPsÐ$|g÷"IvIÎ Ú[Ó³ô†uÑ„hÝiÒºWcÜ¥¸ja—¢Kf‡/›³B Ù0X¬$ÙÞfÇãêJÞÖ³Xo½Ð¤@Τ€#CßϺ½Í%ãíɘ˜ c⢠‡IY#Ò¶·†”í{nÕCÒkè-ª¢íêÑ Y‹<,¼%žyOï£ò`ŒòNÞ¼õ¾àÃŒâ6óä6½oø0‹�ú!’Å—'Åç=w”'wäá]»нè³Éä"ô#O9y¼†÷¢á}Ñ€hÖ>Î}Î5vQá{;[‹¯;[} Ð6»‰�ŒøÈð�Ö]­Û7Z[‰QÔ�ŒY’D¾DE^M¾¨É¯o“ ñØúA±—L±¯ï¨rá`œ-•qvÍœÐ) XŸs©¿ sήoîËßÊ÷ß__×g2æ|ï/ãǧëßî/Ï/—¥µÿþk;u endstream endobj 55 0 obj <> endobj 10 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> stream xœì½ ¼eÇ]ßYuÖ»¿û¶{ßÞïõò^w«[ê–ÔýZ{Kjuk·lɶ$Y²eY6¤X1¶cdžxø°z<†aBâ„a‡I‡mÀf0–�0„cÀ@’1„8‰'¡§ê¾úõýÞêÛÚ—–tÔú¿{O�ªUýë¿W�s�5ÆÔÍûMjºü­7?°;I/3öÎ/¹ÒÖÛïy×·_›¾Ã}ÿ/V¿á›ÞtÏ•ÿúò/»ûmìíûîûCïú�oþc윻Þ}ÿýo¾Ç~õ5Ÿvus°Ó]Þû?ñßÿÌ}ÿ¨ƒÃoù†wß÷àßë|«Iþ骱WÍÜ÷À[Þþæ?[ýAcï8êpüÈ›ÞùЪ™u5í�_qãÇæþ{íÂ�xÃÄ¥ÿÉÔ· ~ñ_½á‡ôyòäÉ_¶]ãÇ;sª…ÿû¥“¿ì¿¸û_q÷&ý÷š†/yMÃþ†98(H[ƒND(Œ•9azæA7ª÷›ÌAÃ|ÁÁ£¦iŽ˜Iw¯é på5ó�Žš®û,ܧ¿gåï7Óêá{>(ÛjwÔL Ú~§)ä®Ï)óËnDŸpý~Ô]ÔÕÿ„»ÿQvןp÷ux^íàMnõ>áÀ—ÿòà^á êùv[ý|ØáÚºWš? Ÿ>ìà„é8ðó-Ÿïw¤8qò¤GmÀþóÄàºØª3 �Ô9áúzt@'?þrPæçùj÷ù¦ÐÎÓñA÷ùQ×öÁø{…«Sw4�uŸž–~¥/qp‹ƒ×9˜rpÌÁ×;¸ÆÁñ7îsð\ u¯AÝ{ÊoÆý»qƒÚßÚ¿-À;ìvpÈÁÅÎwp8ŒÝÁ^¯ uü÷Y»ì ׾΅¡ÝA”ùúKÖÞ«\éàz78¸ÕÁe“ßUŽ88áà®up�ƒ\äঀÇ�õŠPvaø¾ßÁåއ±øòV¸Þà‚3aœç„ò«Bù‘Ðv_€Ýáºpm8Xýx:ÕÂxn ãõó»-ôùªPÿVŒíš°¶ž^GÃ\¯e·„¹ ó¹÷–=/ ÷n´Ûƒ¾îtóòßup¯ƒŸpp®ƒ÷‡µó8Â\æäÞìçi~zP6úÚé hpgX«Ý¡­_ãùÐ~ÂA?Üóø§Ã8|ým¶;8/|ú1ÙÐî@çÍÑ'á`˜óî@7pĺ½×A/¬›Öî`ÃÝ(0¬ÏJhÛë·7\ï pN­0vÏ«aŽù“„äY¿váswøÜhÜ Ÿ“a=¦Â:͆ÏnX[ÑùÝpÐ ð®pÝ  ëwx0@¼^Oõ~ qý³¾>ÌáëÄó{*åO¾%úî×Çx6æó‡vK–=l�`5@\æù§�ûªs"€ÇëåÖËš×i^v¼¼{™û;vËxZxùòòëeÚÛ!/ãÙ-èùôp¨%Êo àë{]»i·lŒ—ñi€×1^l }ûëWÚ-=^¸Þê¶Â˜}½E»¥[}[/G^¿ï ôñã�µC]Ñ tȤa~^NgBÙJ˜Ç®°niÀS 4YøæÂvKfûá{®óÐv"|¶BY`ß÷‡6�PÿH Oîù±]æº?Ð|wÀ»h"àûÙðyö#vÔ>õ.ÿýP˜¯§K7Ìo>àÉÃ÷‰0çv¸öåç†ñ7AA3¬AðÊþ¶Â<<�. k\ ãÉÃú 4h„6+anÒËi(_}-úÙP§ ô_ ãž ã¹2ŒiwøÜúØî‹»m³pÏ_ã®=ážçfXO›ã�.^®Î ãö÷¶‡~Ï m÷zîý^î{šŸæwqh+»¡¶»C»sŽývh[Ï ã=Æ÷`hsÐmÂA#|aNžæÝð¹è�š@§"Ôé„kéáiØ¡\(o¡®çÉŒpf¡¼f‡²”†5VY'ੇµé„û)¾Ë‡H}ýšyÞhËáZëü†°vÍÐW+´™ ó±aí|?SvÈ{3¡þT˜C;Ü[ ã&-4� Ì·}ÖCŸYÀéyxõ¡í¬úÒ£ÛìP—´CµY ø»X‹<ÌKë>ÚK§‰Îò5›(Ÿ×S¡½·÷«Bñºk~�Ðõ±®SÜOŠV-ÔÓ½÷ÄC9æ£z,ÏB¹ð6±†)èOœGB�¦Ú é� øU?±CþI1Ç4Ü“ld¡Õ‘>«—ê²/ñ?Ó@ûZ a=@�:õ€KøµºgCý2@=Œ»ˆ@²šg MŒKk–‚&úì¢�Ö,ÃýÄŽòˆ®3ÔÕzjü¤›lˆÖU²– �>-è-ž”>^Ê)ÛOõDoñ›Æ.¿P|"þh†rÖ‰ÛèZ´'OHÏÔ#:hŒuà‘þ½ã¹ÄõÙ—h®ûâkÍ]²Y ß»¨£¾) í%‡‚ Ÿšcж’ ‹uRÿ¤e†2Êœx�ë#9ÎÆ€øR¾‰øY6¨†ºÅ˜¶ÖžÎ ¬C½‘Ú¡¬Åmãñr>œ/ç—‡æ'¹¶ e”cHìPGp~¢I‰ú±,S>K´“mç8tOkîqO õInOŸCjG׆8Õg�¶¥Õ}ê‡>¨è«zÔ µè:�ÊÄ ¾g¨CÈ£{²i�¨oÉq‰ë&ð$vTf%ûƒÖK<ÑnŽ‹ë,Ý%œ)úÖ÷Ž+u ǯ1é{÷c:‰.*¿i홇áükè·†ºMÜã|DSÙÚ¶F„�zWß[Q;ц2$;ÒÄ=Öm„«nGç"|ZÚéNñ¯tfL›˜ÿQyÝž¾¥úKê'Å=µ—|q¼ªŸÛQ¾�y„sÍ4î˜1ÿÐFh]ʈWë«y‰ÏY.[ë!ážÃu'àï†{ò›'C»iÐH>è¤ú»òe%ÛOiGu â‚]v˜�˜°C�#=VZóTn©ÊR|Ž•p­Õ®€sô¡¢8ʆïÅŸôÓä�N„ùɾô-ECå„S>³èËŠüPáªÙa¬ÐB}}§øGmZ¸§ïMÌC:Pr%ú«]7P7Ç'ít�rÕ—ß¹è¡<—_«yÐÇï¡­¯{G4^ö­õkÛa,)y¡ý•üÑïÎØQžT]Í=±£±í¯æ*›E›ØNÉ-cô<º'úuì0?BºŠßzÏÖSzY2㯧чæ!>£’>ˆ}[Æ1¼f,ʹˆï%û¢·ìöDÔ6ÎYÈžÈg�®ïзQŸ­¨�ÖNò#ûªOɈä�>XÃÒ'&Þú”, mPÏyM¹Ù‘N„C2¯¼ŠúS=Ù/_·k‡ú]r£ñS'�ïeü½Ù€—ñ¿øƒþu ý=É€µ£:Kù.­¥ò1ŸâåÏšv/SïÒ5€›÷dóšÙzŽY¹$á¾ëÚ·C{ãa:¬™®¹_ÖAyÇŽî-tP¯…:ÒIg‚ÉPw.¬I;”)ߦ\Ù„ò·h" yÔÚRƺvSÈÿ¢ž›Äzú¶÷âÚ�a�òÞN»µo°#ÌÑ·õ6Öç2¯ uíPOú±)_éqJÇËöHf:vTöµ"þ�ÌH&$O“_ÝÒlK=B|²{Ҫ˜£ÚÖ£>d¯âþ5Gñ¥ÊüܦPO2«97��¶†ñ§t‘Ö•>©prÜÂ-{«YöIòãÛË/Ð~u'\7µdvÚu�ǹ=´]¶£úÜ—m mÕϾ0.]K®µ¦9Ú TG:Z¾v/ÜŸ@›Éð©<óœæýs;”kíPôìpoDòéëíMµç'�ªÜêl �rëm;´ÿSßuZ?Ìy{¸î†±Š¶ÊÛ ß¬ê?úhíP¦ý]+ç/š²Ãó }à”½-,h$ÚvѾk‡|"¾n…ñtÂýZ¸?cGýøÙ¢«øK}L‡bÙÀI;z†Bû;wÆ q(¾Z ×óÀ/¥èW²Ä¹§aMºv”‡ûèWñ�Ö[<ØÃzöÃwñ�æÛîV¨×ùãš·b}ŸC]ÆÀ)9Õx¹¤Oáho\{bâ!õ5�5½e':a½æì06ôð]þ�ú—O%ßHü&=§³Mâ·;ÔQ¢¥ä€2'þšÆ\Ä‹ÂA?£e‡zQë(þÖZ•Xáf ä×h u:¨;áÿµÂ=î'ÈþjgÐv}JG&v¨ÿ§ìPŸµ�Gå£9ÕA?�[ve*ô¡5×½¾Õ¥ \‹§èG©?ÍG²¡1al“ÑzOÚ¡î�åƒûŒªC¿OtâÚvÈ»<›1i‡<"[ĽVÙˆpŸÆ9?æþLÔß4êp¬Z“ |N⓺Cs–œè^íÕåZs¡– Ñ/Í(gZÝS|¥{’]Ù½X×´ð½°CÀñH‡°O­£ø¹‰u• ÒúL¢N3*“_ÆÜ›ÊÄ—j7�káclǺmô5kGyœ{Ú3h+ÚΗÎ4¢2â]£+vÒ\Úh?�>åëÎŽ©'¹®ÛÑùiΚƒt²èÀù �ä\kª¹Êþk¼â™;ŒÅ¤ƒióä7ÏÏ4®{ø.»Eÿ�{äÔ½Ô¥Òÿ*£ž¦>+ìPÐVŠGKŸ ŸÆêñù<œÎo ×K¡ÌÇxkáz.Ðgõuk í—Ã眞óZÞ¹ð¹€:Ka<¾Ý"p-àsxV#|³áZõÎ}ô©ëþ˜z‹vè7‰ŸDßÜcÑWù-å9xî&A¹bBúÔŒ%”»“>áþ.sܯˆ÷©¸ÿ¯8M9Ú`É™pKòl ÷2àˆó:eÜc×8èKhoUtŠ÷3Ó*Näþé¡x—ùté¦x�z“2¢¸Xr­8:ÞÿQÞS{Ùñ ÍO9¬–îK�i�5'éLá×÷Xß1ï¥5åÞQ ýj=¥• QžQû}Ì_+—«\ªÆÏ¼ù¸=QîeÅûÚÊ ríêv”Çs”k¿‘{ÀôÙ™ƒO3_¤>”ˤìHƸ·'ÙU®Pç@(‹ÜócnžùDÕgޏ…~´žS}R–™Ë“¯¢ua^5ÞÓä=î¡jMÄ¿ì‡zBcb|K�ïD~›.Ê5uŸøŒû2¤7ÇÔ²£2Âqhü’uî9‰çU¦=;ž%㾚ò™¢;×)þ}sˆú®Ž¶šC�¾4îS—1oË:¼ïñ ¿æ$zR·Ð6І�?Ä#<ë@Õº2çN~"ÿ¨~7j«=­…h(ýĽ éæ¡ý½¾æ*}ý%ÌIò¯—òqÜã�>!}ã3EÒ1Ü3•Ê5k¡ž?Q_Ì 3Ì=6ñmšö2$7º^éîX·i.’�îIneÛâ³!pÅûZc õ…Kx¨3b9~êRù>âñ÷r¸/¦õÐ8È{´Q’QÚîõq}xCs׸E[ùt¢«òþŠ•¨ÈG²Í]”Åg5´^]”I®È%î5p¿ˆúMÑ÷=ô]>\nO—aÍ3�ðQ&é»Ñ¾«n}¨¼‰v’Kí÷ÉF’‡D+ž‘¥OÁýqú<'"#Þ¡ß˵ŠÏ^Æûµ²ù<Á¾¸‡Ê³ñ>8}#žuáÞÏ$$øÌð]º›þ¶|QÑXþ¨øRgc\OŸÉ�žHÐÇ� ¯.®¹–²ójŸ‡ððÌm‚~9náМ'Ðߢϭu¤/Y ®ø�´£¨/Ê:Ç)¾Îp¯�ëÌŽÒ¼ˆ¾“–¤/÷–µF¤Y|VœûóÒ<_­1å¨Ç±p=uOò£=øu»åGQÇ‹~'ãCͯiGåžqž|mÊ…ø]{夵lD[ÉžË�3�¯ØC6G{%pЧNå;W‰–ÊyÐ'Ž}rå²é ±¾ðq,ÌÃhÏ@ú@vQ|®¹*­þÈóÊ=«/Æ/’Yíwê‹bñ�îiψ¹§ÉpŸû’Š7D'Å#ò�åsÉ7}˜»WŽR¾�òéÊi+'9.®›³£qŒÆ­3¢´K¿ü4ù€¢-ŸÍg¼IßÜ_¯�|ZÚ%ñœt†Ÿ·±C^§�§‡>g¬Ÿ3ôû+Ô´?sHÔ‡*«E}ȇï�GÕŸÆËØŽy'Ò*‹p¨�ðxÐ3‚Ú#V>U²¢Ü÷_ÄʃøûK¡�;äîå*—¹‚õᾜ|}ñŸÎŸøòe;z>ÊëÉívt­c‡çŠ%³Ü‘^QN�q‹äP>…Úël˜Ö‘ûÑâé§yÌ…ùAæ‘§Âüµ·å?×í0¾an…¹EéÓ}ú~VíhE¾—è)�ŽƤª7…>™7Óþ¶ÆªqvP>|®b¬yT_kÍ|ó¥šûÐK|í×{ÃŽÆ„¤1óÏ�Í·Ï©,ÚQ™ oÊvõÐ/y†±4iÂ|sþjÃ<‰æ²l‡>™ö�¹ç'Û;c‡:Júœç!Äcz_¹#Òh 먜'ó^Ôk²ÙÍ€“kÛz­§ô‚ÚùïÛ€Kvf!Œ�¼Æ<¼ô…|²ú­ÄêŠFŒë(“ á»ö 5æ´÷áÇwNtOûèšÇvŒÁ_Ï…ºz®¢ ü²a~½=ïí²[ò,Ù¡ÿ¥ñ®…¶XcúOÊgjÿ´nGÏÜÉžò|‰è¬sÚ§å™§îß ¿çíÊvSv¨{tîE2-;.þS9eWóæ> `xèó)Æ�>íõHgÈÆq_H~ÏyH·èZßé;Ê7k¢¯%;ªCÔOí5–Vt_~ƒ|MÑXúw§ÆËÔ±ºæyñJœk*ѧê*6НS;j TGkçhãä{2o*ý"Yâzsσ{Éê—:RqS|´KZ/ò—ü¿XWs/Cq¥ÊSà�?Äüj3ÂÇþØ¿té&¹'�ȇŒ›ù\´üjŇŒ»˜O!�qÍ¥ßÅëâsŲ:[)~Rãëè};mà¢AŸI4£ß;�ẕÇ4+q­zò!Ë1Ÿ¤…bTÙiæ¿â<ŠpÎßœê@ÆAôEã¼¥‡u;š`~©nGyŒ¹gî«ùºv4çç¦sôŸ¡¯2ê[u¸¢>âÜñ¸+Ÿå¢ ôe²K”YÆ5â Í�ãh¡õËó¤9ÊZÀKܤ³ŸçõvhëÅã²»â/æ)Ë<³§¹+†¤ŽQ¼TGz7 Ϩ0÷’¢oæÌ¤S+h¾ÔÇ̧Õíéë§~§1žgÜ_â³õà ÷ðä‡‰ÞÆŽú#M´•�k—d4>»"Z‰Æ¹• ê-é(æÀÏü óݹæ ˜T>[ëÂ| byæúä 3Ÿç6M¨§ó/âmƒ~™7ä³Þ¢�âKÙDÑ�û &š'󦚃±CYÕ}Åþâ!ÖcN[} „‡öXvI<(™�>hoÝ?yÒõ‡|)æs…KüÓÅüô^2ÑE4jØá{øô>¿&êR/ª�| k‡9¹Ø–Š>š—žPÌÈu¨c ²‰š£/Ós Ôùz~†¼“¡Oñiè¦õ%ÿ²ÅEZÙ3ú)Ì…QW0¥rڜئ*¾è¢¾Æ"£ý‘‰õ•±Ã¥dŠsѸ· Ú2OGyPÜ7iGuŸú o¨Žæ­\×…ã¿r_F¾ m.í§hK{¥ùtÐ/óÌyRoZÌMú˜ö�çd‹ü|¯)&“ â>m÷Q”i=§Óbn.ö+Ô‡h£1ÔqM?Šg˜W•¼³þîqz&Š{ò¥å$Q¿œ÷ó˜à¾ô·Ö‹¹5ÑX<)=Fy/¢zôïiOøYâZú^õeÏŧ´+¢›ò ´7ŒÝ4Gß^±«ö_|›àgþM¶_s¡Ý�üpÿRzŽöW~—x�þy�þ¸6kGןk¢µ N“ŽÔ8®¶£|£œùN¹kùý´]’1>{À<”êÊŽ(Ÿ&ÝÛ(ÅÇê«\̃qWë«ùjmôÓD™æ*Ÿ�6œþ ý$ñe›Ÿq¼#ý¤u_ÑÆÓǤlQ¿‹G»¨Oå¶r”‹™+ž­a¤5�¿ß°£¼Â¹R÷¨-s,Œ9Å‹ôÇXƼ‰æÍó)Ò?â9µá>e�>>×Bt&mšvTÞÅ|G$ó¢±üwê÷2ê‹þ-çËX•1 ïŲ+=û.´;¢/û—¾á ò¥úå¸é÷Çk™Fxâ=JúÔq ÿ-öí³¨ý êŠr ¾qòH`_œGÝžN«xŸµ¼Œ'ˆ{œïë_ú´e5;~îY„+öûâyÆ~î¸uŠéÆ= é ÚŽqm„³­éO¦lЗ ½'Ýhûãq¤Ñ§t=ÇÈófä!æ\ àg]æb}Æùñ>ujõOy`ÜÁ8:�€8ãµ(íé4‘�-âñ’¨ê&ùÛ…?ž˜ïylŸY{:ýH[î±�㸹ëýŸZ§X?SFèËÓ'Ž�ò¯ØFsVÌ _�ùå9d 5­‡rõ%ÚË÷Ðüâ½êÑÒž®›¹.Z+ÚÛØ1ç¥8%µ£ëÂ<�®õ|VŠöÏÇqO6®I\S§ dÓåCÈ—‰×�eZsÆj±]¤Îæ9bÎ�z�gDÝ×¾ÖXþ8}gùm;ºžZ�Uë&ž—¾“-ÚêlŒø�q¯ò š»žAg\#ù#=ib™§ÍæZ‘WHCíó™·Ø¿©¿Î)Òߥ.ˆã�õ¡oAŠ>»hjÇôǑրåÔ³Œ ÇÝ×|Ä¿¤¥ø7>¯É}GÊv+ª«1qQû|±-£}ÑÚŠî|/s‚köûUªCÜâÏxÆ}ª¾t€Î8]Úz>ÞpéÝ2±ªw6”vøÜ´�×ùν #µÃ½v>;­w1$¸Ö3Ñ:&ý±îùó;ìèû*¤sf�‡ù½+±Ãçóy^@ý*w&9Ñó¤þsÅß±“Ûan—ÏÙëÌYÓŽžiÓûtôÎ,á®ÙáÙ½‹Dïà» àÓY½¯Ÿï�Ðz©žÞ­!º _|ÚÇçû”àû.”W“Üè=ž:Ÿ 1,ØáÙå¼ÚQ?j§ŸÇ×YžkàZkLÊmêü€Ú꜅ÎÝ)'¢÷åL¡ož‘P_ ;šGé žÆ+Üè?E=ž‹Ð:ôЯڊ֚¯~ Ü¢½Î­èšâ]žÕÕ™áðóýzw“üÀúÑ'e°iGÇÁ÷·xôgŠô»7©=*ü=;Ô¾¾ÎˆÉ¾Ê†(÷*¹bü&}'»Î¸?Ž-%ï’· Ô‹ý[åàe ·|úÓZWâ³(“É<5sïÜÓ¤O¡½;æ)˜×¡ßÁù0Ÿ¤q×#\ô™èóÓfÊïŽÏyeQY 8H{Æ‚±ÕŒÊrБû®¢�|"Æ4±¯®µ �§¹j=b?–>Žð0ŸÃXÓÆû'5;êgi�KæQ?¢Q|Þd\nƒkÚ°£6Œ¹¾lL_ý�FTÎÜó‚ÜÓáZdQ=Õ‘ÿÀ5R¿ŒÍx.€4ÑÈ“*çZQöx¶‚¾”>y¶Gëš éͯ}ÒRÿÜäzj}Ïg¸Çº\_Ñ“¹Ý8†Ö\C’G©W¨£˜ã�¯Jß›:„u‹s>Œ‰u&@{R¢)ù†ù0ácÞ“qc1µ¯£>ÏèÈ6Ä{¾âõ+» ?Ht'ŸhŽM;ºÆôÇëÐ�sÌÕ3æNðÉw.§Ñ'c>Í—q׉ëçŠÉ7…?'õÅÜϱ_ê[æÛHËlÌ'c;Ñ‹ñU}Æû†Ì;s¬ |Ïñ=‰Ú¨Œã—¿_ .íy<òŸrò̫ƺ6ž;íó¸5)Q�ùÆŸãüÆö”!Æ¥qŒ+�Ï|óãÂ#¿¯¼¢ Ï™’ÿÅÌ»h¾Ò§â;ÉD 8ãü¼î“4/Ιg^™çP¹ÆÎ½Ûð¨>ù”ü#›G›È2úb3mw ÜÅÚI‡ÒÎIV¸'O]N9!·ô_¼gÄuŠý`êÒBsæþdü,9ù�gU˜—ã9æu5>ÙlÊí&ç#úpmÙ§ú‘ÿǼ׋2(—z5A»X>-úãµt…Úè>õ÷©©Ã¨;é%hçŒãÜ(Çͽã å²/Ô¡”_æÙÈ#¤A‚rê�$öQØÓçãiâ»ÆÈ}ÑqçøØ��úâ:h-h—åopüú¡-±Q¿1NÚyÚ}ÊX�¾è0æ$ÿ�w4nò§ü²x 1¿r~ôŸ2;JÛX7J>¸>’ úʧR'KïsO*•q�CK—2¾$0¦’¿¦Ïø>ëùÏiÜ·:»©¼+c�_ÏïðýIþZy>“ ~%[òk•ã�>ÓOå¿â8•~�t­ø·°£ÏŽ1 �©wuP7 7÷‡Ä#Ò“úžÛÑg¹—¢s|±=&~ú?Š�kÒï ßSD×eTFùN€CüÏØ´@9ã(Ñ…÷kQYìó%hO?Š{¹’IùPâÑŸ6Dôå)�YôIÑVt¥ßáñìÀx=/-‡r>÷ÂøX¼Ê<ãÉq2ÇssºG�¨5ѹ[á!]cÿŒ2F_žû?Œ­üwŸcÖûIu6V´=ÕVrÇ\®®5^žÔ˜Ô–ó#-h‡u}Ö‡ñµø^~¹è¨q*ŸÍ<ŸåPþ�{Ù%¾ó™S­3óbâ%éž]lŽÕ©ÛQ¹—îã~ºÆQ‹>ùl Ÿãâ=ö%\âYò·Æ«¹–Qºn¤£ê~æáâ<Û’Ž<ÓU�êæÑ5÷!%Ók‰6¼Ç|Gý2÷É}ò*ã:é$ÍUcíT®üMf‡:Œ…x‚ñ%ù*¾æÚPÖèhMiÿ§´£kËså\¿‰¨Ÿ&úæ¸&¯‰§ønÙƾâUñ'û}Šg‰ºúçšÒ¾ªÙ]ñϺÅú“úžc$�êèOüÊœ3Ç.úhOsœnÏÒîJ¶¸?N”c’ýd‘yžõ˜ HìèšÆ>wײ[³ÊêQ{ž“ b™¢ÎiÙÑ9Ö¢¾ãü ç£6<{,{@ß‚¼D¿œù�‡~mù‰2�ÛQ=GÞ!¾ à!Pçø~­-ŸIâ¸8Ú€qvªáàsLä›ÑV¶ìè\[èKò)ÙàÙ-Ê�üCÆç¤³æJ>']Ûè;G=Ú9͉¼T¢?ÚÉy†~Y x4>{Ãc!áPÞ+ö½4Gí·È®H¾$›±B½%¼ôÉX$C]ò‰Ö…ù`É�Ö2.ÚzÊ5ý"îãȦKµ&)ð+Þ¡.ÑZó™-­#åM´§�aìʱ0®ç;,ê(V¦Ïε&ßð|cì¯(ÓØµ¦ŒqE/Í…ºUtÊŸ$Äu3”×Ç”3ïkŒqýq{%ãðJ¶TF_ˆ´ˆ÷P«+ŸR =ãá¸�qó$Åô�m ý€3Ѭ^Õ�çÌ|8uP}ÒæR_1žgØ.î[ëÉœW¼ÿJÿ�:–òL9úâZÑI÷Цòë¹·Dû¯8„²OÛ¥¹JÿÑŸ£¾eÌ(ÞÑšÒÞq¯CcV{ù‘ôŸ à`^©ŒÊyßWî§ŒêjþM;ÊôTë ÕcN&ÞS;“ü�‹]ÄïãdÎ_w£6ÔOÒk’Oå$5GͯõG»QÚ¡~×ø°NƒgË™‹‘L16È¢k: èïé™t�_>.φPÆÉßZõÉwª-ýú’jǘ¯á#ïq^òCÄ‹¿~2öíKP?§v”VŒG™ga}î{h\Zæ¶èŸk­‰‹vYxÄGŒr;Ì­Ó¯¡¿¯¹Î Oê}Ý7v”×=ž;”uæâøÛ Œqr;>Fñ×Üßëà;å7>ÇXŒ²ËõÓ~ç"šIŸ$¸§õSM´¥OG~£ßÅ1Ó&¨®Þ—Â|EÍŽò9cfæÚâÏy�©})éån&¢¾çQï u2meŸ{5Ò9:/Fs™gª(ãâ3­O3ÂCþíc=$›Gý+¿‘ñ6÷,˜_¦ž’|2_«¼²x�ç5šnåë…‹¾ íblcó,}„)àf^Uøh?$ßZÚqA¼¿Å˜‹k_b­c[ë­X®šÌÚa|@ßPgÔì¨<‰þZGñÆÆÉú‚8÷óbµã\i#Õ¯_sþÎeüò3êvTvê´ìèó:ÎiÒvɈϴ~Z_Ù+ê,åBè›jn|î[ud;Ñæ3t¤{¬›é èý»òY}ÛË0çfÔ'é¡÷%ƶ�qA†6ôWhSÙ†y“í$´ã\ ÆBäŸÚ’‡¸÷Ƙ³D[îÕÓgP]Ù9éµ8Þa"‹Ê•“‹e”ú„ggôîÙGéaî«Ï¿ø{“À§ú<�@¾£n¥=V›e¾^÷x>ƒq¬únÚQž´èKt�”ï`¼%?ù>ô<óÊÕéÌ÷ „_ëÅ÷�jdhŸ¤ã<¾ô£~%£´±jS·£:Ríè›j¾¾œ¿ÅœœdP¼$Ü’ñóK” îÝiÝ¥?ÿÅz‚g¥â=Ö½èC‰¶qܦöôgÛ¶€�q;}4ÙÊ·>•wLQŸòGÿVú€¾…úL�'¶™ êRßSc� > _ÇzKìëÐßãØ ÇgN8.α‰þë÷¸sªâ/ÊrLáäù•q�,®9ÒúLù€XÇó m¤Ë(cÌÿSÞôndÝ‹ãYòŸ‹•*Vì,½¤'ûПnžmd…ýó|•dM8˜«EÀXDkïi>¤“|�®ã¸«‰vòAÙžñ"ý&¶§N‘Ï¥÷*ÃØ‚{”_ƹÚ>É}LîÍ‘îÆoôUä«I^ÄOÒ›ŒU¥»õ¼+ý³xïŒç&Äóòóô~ µ•n¡ýômõ¼jœ«c ¯ò+v˜¿ðí7ìÖ™+;í–OïÏ\­‚ÖŠ ôüg/àѳ‘z.³Êõ{ï|VZÏT–vø×¹>KÌgd·ÙáóÈz¾µÃ÷Ã+–öív…rñŽÚð7½‡ˆ„›{ø:³¡gfù›×:Ég¬{a}ºèKç'õì'ß'*y‘?"�§w'¨ÃxQq¶â5Æ…±ßIF¾e,öר�YF=F{«ü(m†ðÇy:氥皨ü$å�ù7æCâ¼mýÊ õø,�lu?ýbÚjê ÷µf8y^Ÿú™ú>±£º:ö_TWö‡ëÊü…æKûÇÿ¬G¼¤mwâõ„Þ×>ƒëFøôúMºBÏùë™xý&Ê4®¥3…»m‡:W¸ûv¸G0gGŸ³×Y;]s„|Çt¢•x;±Ã÷,Ó÷(#|äi>&œz¦-Ž�cFeô¹·Ñ·(QGÀ½³8�vt×»êuÞw.”õCù,hìé=úöeKh#Û3®gíð÷^ø›c²•½°¦¡žÞß÷æî^˜›Æ«÷.4ì�²ð)@ï2Ñ»84ÍemeÃz¸¯ß%�M£½ž?Ðû@dïP_ïD™ŠúÔ¸äKLGãé‡~GDíô�è8…rÅîÇ$ðÊ'àzèOïŠÐû9:h3 ’7Æ›Ê§Š—(s¾�ü„v¸ž·CÙŸ‹ú™²CŸ„¿C¿DÀw¢$¨/>å;0&#ZM¢=ý¾ï&~ߊê(ö‘Ìðý$ª§~Úè[ó*Q¿µ×orÉ㘥bÿ�vV¿{¡Ü÷Åi/z� uó�Ü7¡í£Í`Çgôó¥0ßç%Ò躈ʨs™—û¤ýTn¾Œîq¿šãbì͸•4`Ž)¶Õ±ÏB›,û×e’Ï•Q—Çñ›|›øÌ Ÿ-bœ¥X1öO/Ó–í·:.6ÿ)¤2ÑJãÔ³\+ÑEkü r* àP~:³£>‹ÆÅ}1­ËsܧÝ'm( ÜgÎ(ÎÕÇy$ѰcOSÍŽ®{\¦~EcæÕÙ·ÖN1—Úòl÷t¸¯ØFßj«µ‹õFìG’ŸS;ªÃâ¹Oü|§ÎbÄy ñ[3ºÇ=Yú?jÃ=Uñfì3Ÿâ>}-_~´Ì"ÜM|ŽóÕÄ ŒE©£èÃ1÷«µ`¬&ùSŽvò }gÀÉ<ï�‹Ãg‹ï$sq®­µ¥mâ¾c]ó\b2쾋Gã¸=®ß‰®©;ø™_áóàcå`<-×ì�w¤¿˜ß”LĹ¹¸i(£’…XÅöN¼Á3ŒY¨CãØFø8¶Ÿ²7Êád¸óϹ(7?CÏuŠm÷ÇôO{@{(Þ>þ–D ø”_ŠÏ­4ž2|—Lļ/ú¶ð�8˜;‰Ëb™ �nÛÓå‹ò)Ù–î.ÆÔ'NöÇ{ÔC´Œ9¥ODK̓ïûÓóF²3vt|mÔÓïª};º–½šF]åâe3ùl�übñ¯üwßF± rúÔû Å»|odÍ߉¨8S±Ua‡ç´×§ØPïK úøNAŲâkž=×ÀÁsðÜ‹ˆís}Ô=ÚÓ¯¡=(ðI�ç‡êQ}ž…àÙPÍW:B>�Þ'¨s_,oOŽr镸w¦uoø¤YO¾‡h-’LÊÏ�j½cG×'Þ_çíCuQ/ƒâ é(Ñ�ûøÒ�%ú–�Ó˜ÅgŒ[jvOûï“hÏñ7QO¼ïaÉoѼ4gÙ%]ËÞðœ�â>“­}Ñ‚gS%²{ò9>úÉ¢}üþN=3üÚ“¢ �Ë•ÓÔr´Äó䞚ƤöâyñxìgÑÆËfHi÷È«'ÏmÄþ7m*Ÿ©¢,;D=ÏX‘câþ†ÖL²$ýC?AzK1>uýñf¼¯çÛUW2Aý§qsYþOlohLôÁÕ/÷(‡…=ÝclÁõÑ=ÆþZC¾ŸVò ¾ïŠç¤ãÔ�îóŒ­ø[²K}"¤�'¶ÑŸ|᡼pÞ±ÄX5¾Ç˜±ˆ€ü&?‘õ(§Åã”3ÿEŸR ¯ÛÑçÐÄcÜX;*Oôíè+ë;}nÊe1>§Á8gœ¯Ç=Ù˜:eÔ/Ûé;÷+ãøBq/yBz¨ú峟êG>˜t,ýhžwbŒ±J,×gZïqs$pÈSÜCU]½‹»õÃñ*—L^£N*£þISâ#�Ç1=ýoááù\úéê2f¤ ©Ù¡¿Z‹êÓß�çªuÐ9ÙÈ"êƒ~!¿Ó‡>öŸE×Ò‘Ä¥ù“¶eԇƦúšs‹ä�yæ8^Ò]e´aŒµ¹v\7Ò)^£8'ÂØ:gÕ¥-Œ¡ˆpxÏÆ{Îôs¨�¨3…#ÎWhÌÄËs¼î±�eNZÅgYO¾"cnÅMÜcúe´Ç1ÿÆþR\6níˆsÜoNÆö/¶iйÖÌAð¹gòuNLköŸD×ÔÕjC±êoùlä‡÷HÊñr�Å/gÊÛÆkÓAÛxëQ;ú\3ÿý˜ÆYÌ'’Ò)Œ}Jà•}£ïÈq‘÷èkqýˆSkAý¯mDÛŽÊ®âGÚ4Å(Ò{â9ÒVüÈsÏš;uûclNýëê(é6ÑAcHðIYclÃóã|&ê¨ê2æ  ªòóæÜäÚjÌ\#ùLò$7o컪 çëš ¿Ï-û¼òj¾w@±�æÃ˜Â¯ñŠúüŠõwÙ¡Ÿ@Ô~´ÎjŸ[ëª÷äw?®ùÐ^|2æ³ÍÏZÈï¦În�sɆúSþG²£Ø…r/WÎ�4¥]¡_UC_-”I¿HevT¦_цÓÖ1¯3õ²|Lå^Õ�êpÿQçS%_Œ£oJ_è ’hFý><¢9ýér�¹a,ûš£îéwq”»— Qˆ¼VÚÑücYʙ֗16ýhõGœ´…ñ³@ºçÅòŸ²M:‹J½@>Í™Ÿ§ßG}C"=�FíˆSŸ­¨¾WÈ�m uˆ�ö>‰>ÏÒ»­1em‰ò¹G/~UaÍŽ>Àü£ä€ûŸö�VûíP‡ÄïŽaLÖ@=æ& Ôå8jvÔf3Oæ�gŽ™ðuõû7Œö:XÇ\¸^òQè7j½$ÌwI/©N,“œeŽcÔ˜-Ê™ÇÑ‹_ã½xå•éÿÉ©ï6êkβÑÔ¹²c5Œ'ö18/ê®éç šèO¶XòQDxéO¦QyiGùXeÄû÷ñXÄ;Ì'I÷øúý§ê2g«þcÿ¸�ëqtPYy†:Òyº'ß‹z5‹ðѶqŸ–~ c9ž?¡oç Çåp%“�¨÷››¨Ëõa^Jã.p¯°£ôd¬šØÑyðÙ*ÒŒs/ìèûÆÅCô G1¶–,I/ű_¿IfƒhÏÅ_{_Mç éçxÜ:ï+:ã©ö’�…þªòÏ~ÛÐ8ý=þ^_µ×¹Gõ¯ü8÷˜DƒØ—о‘ò£š¯| ÑJ:† qÆy’ø�)ñ»o¸¾…Í�rŸ.†ü }Ç÷Æ�Ö@kF{›ÚQ»Iß°Ýc~V<Ë�‡=äËQæÄ;äƒ}IÖ;jû©»è'‹è×H¦ù,�æ®~¨i;å«Pnt­s+ÂÏxŒgW¸%þIÑ�ö»JgKð]øÔ%-à Îˆù_ýæÀ7.v•/ZDýkŽZñW‚v–1n¥½`n$ÖOŒ¹â| q¨]µ×<$ òÄ;pŠÔaDm)kâ•Õ€Oã§m¥À|óyÜÿSÜÛõ™Ù¡NÕh?8–uþF€ÖÔÇçâ©vÔm¯ú’ RIÆd×߈ïõ)^Ý4ÖðQ÷1ÿ£xŽûèÚßLPGùõ#}Ò@}Åt9®Zw®Ÿh§¾x¦–{õ¢ýæ?eR¼¡vôcÕ/í.ãOò�è"úvP&ºHOéwoµæÊ7i…›Ïˆ¥U—ç+ø»ŸZ7žKâ3¢óMÊáÐß]U6mGÏØHŸ(Ϥ稸ÿUØá3Gz>GôÑs±’IåHÄ z–Vy-íù‰V“|‹ÒŽ>‡[·ÃçŠDg=£¦÷²M£=sÂ<ÌŒÆIíÐ^kL;%=¤5š�־ъöBy!ƃ|VG>´â0�·ãóÅ5;ú{³Ò!â æ/x>‚ï¥ÏÓǨÏ7�¿¥Ç¹ÿLÿM:‡ç¼”ãŒïË_äš‘ß ÒK-૎|TÚF­uýÑ×iŸò‹Òß<Û(ŸGs/Ä¿w,›ÆrŽYù<®™r¡’�/‘︵iGå^:N딣½ðó|õ…øEeüÎßCæo.«L6GòK[¨ó ²—ò…Kj­À͘E{Úê³õ!}×e ¡º¢¿x_þ»äB~PuiOißTŸ:šq_œÏËK—¶ÐöL}‘Ï˨žÆÚƒƒc-£¾šÚ®‡  \ŒåbÔ×é£OêVŤ²AóvønéTú§Ò«ÒƒÒÏÒ™j'»"�Â}'éÆŽêUžOÕ:ê¹¾†}¾O6�ïTP^]1ƒ|4íψ?™¿”ž¡Ðôûײ‰òÍù{ê…þî•t�Ö)C¿};ÔÌkS¯jõ,ö$ÖL:P6œúNç·›ÀI�¯ÉýÎqùéØþɇˆû.qO9Æž”#æÑjƯ´áÒUŒ)d3XGt‰í%cé~Ú^ß—öU(Ûšƒ|6囘Ë/1.d~[ûÂͨ�Ö<Þb®Nã‹sdÌ«0';ný$¿9ê1†T�ùÔø“v­Œî 7ógšSe¢Cœ#VßÍèZ R[îiŒƒuŸ6D:–9ÕÔŽúØ\¾§€òÁ¸£fOŸ;ãñ"kˆqƒÆ x1ÎïóÝhãr·ZÆ’;Λ¹k‡6ŒñªòPãø€ýÔ¢{Œu™ë¢Ü‰¥¯¹À³r1M§¢:1/vôYùàäuõSØÓù‘ç8´ÂýÆì𻯨D]æ� àm¿€ü"ÿ/ÎÉ‘Îä9æ¹â<ãôx~¢míÉSÊURk Ši¨gÅ[*£oFýFþãúʧgîΗMÛáó'²1ÂÁ¤ÿÔsRŠ-”o§ÒwÙE®kœ}(£ ’¼(O�)z*gQÇ÷÷XGtP|FžÕ|;ötyä^y„:sÆãê"�™òR ë˽¢u•‘nU¼—ã“õ$j/S10Ÿ]’þi㺎ºâgí©0ª~Gˆßd+´&´yÔâæIÑ™ïY£>TÏ/A¹ÖŒûº’9î•�ÉÖòœm‚h-ùäwÉfü]zš¹Ò›í©ãbŸ�{<¯#úŶIu¨¹7G½JNÙâ^ˆd‰1�x›>=ÏêåhÏñ*ölG‚~¥3Ä;MôËœ·Æ@Ÿ"ö›éÓ¦mbž‡kÆÏÑžö8ß}OпUy|&nœ~Ñ|É´KZO­/s±¤K£ÐvÒ¤ ”ßN^”.\¼Äýæ­¹B;Ig»ØgŽýDâãž�|CñSlgø¬I‚¾yV*~74óÿäåWÉ´]qœÔ@]éKê ÆŠŸå/æöôõ‰ýRž#­Ûáó肺�÷¶4½(³Ã÷*©>÷Jåçè›6ºg‡¼Èœ‚€x¥oSÜ‹?mt­öò�¸×õf}Ñ!^g�]8xmí0_*~áþçAÐ{œMà:Ñ/£ ¤ÿBßHk½­å-µ§ó� ƒïÍ3Ôažq\žbH¿vÑ&Žy™G8S\,=B=W;¾xü“Q_ͨN-úlDxo®Ò?òËÙ–ù“'Œ+¯^�¾ŸÌzÅñèã­Ó8Z”Ñ5éïŸÇk0?fŒ¢M mä{Ä}Óæð:¶weâ·øY.~&I×ÅöXº\öµ}gûØ/“ìè;}5î1ËW)�'�ð0ßE»Áu Àxžui£h³;¨ßNåë4þÉ?óƒ“Q[Ò†ã¦�HHp0—^{œzgÊå+VŠïÕÑ7}Aõ×Ä'Ÿß—Žb˜sŒsªäÕQ~�<@Þ¬ÛQÐgœ[æ8}�Kìhœÿ>ƒìœì„|?ÚÉø]7Ì%¤á§ ¥Mf}í�Ðnó=ûï„æ|i{éÇÄsPÿêÖp­ñÐLjí6ý,Ò,öR{ú<ô¯2æ„„«‰viÔžt’-טcº³¾|ZŽ¡öÏ9î;~òÇAýÊyj®ò[Ä3ô]¥W”ƒ¥Ï. Þaœ§|ƒöyjQßê÷L×Ò¿œ'yX>™ÆáAï5¥í‘M -“­¢�¦xW|(Z±LmjQ;曯2f§¿áuÐR€ÅPOïìaUï7ÕØµ‡¦½VÙŠ4ZÑQû‰¢ó°:¿Á|¾Ö@<¥¼ c-½«Tõɯ|=–5ñ¢|ö ;Êß]঎jÙ¡~QÞÏãš²£z,î“9�XäÀÛŠêˆßù0Æ ñ»×Dûî1 ¾’ª÷ÌÊÞ6ì辌Î8ˆÅCô¥·1?G`^]{¶ôWH«Xw‰Ÿò1õ™kâþy�2Ž‹ùl‹6*g~Iú/޳b?O¼J½Ü´Ã³tô=µ6´óñ9údÌuľ�ÖdœÏÂrùñë8hD×q~e\ýZT¦yŠnÌ×3oE[Àü}@æ°b½ ^”,Äkͼ€úãúÒ¾3Ÿ+¹¤í£Ž§�^ʼƔ¡~•Åþ�ÿlÛQ=C¿£†kæDø¾Åe,oÒfÑ×¢Îóu pÑß¡¯Ä\ˆÆ"ºÆ9•ÌŽÒˆ~"iÉœ{µç\âüÎ8ß‘¸&1o•—ažq.‹Ó‰:YëÁ~˜ß“?¨öÚóiÛÑ1“oÄ#Ò¯ò dïrô-�ÁýŽ˜¯${âuú¼¦}P~‡:ޱ½ô2ã8úH”1Ʊ?•G÷iëãùMúŠù?ý¶�t‰ÆMݦýG­‘oG_†4�ÿ$_H1�|¢Ì Ç—)*:($Êféùîev˜+Ð5u’t;×8Î‘×Æ”)Þ�ϳ¨žÎÝçv¸?*Üœ+×Nñå‡þ�ò0�¨Oúv²Òyô )÷ ;ª¿ý÷;Œõ”Ïá© •Wžm+P_}3/Æ8¹†>ÅsäCž¥Ò'coÍK´gœ¬ö‡øM|©üKÜô�©4'ê1ú4¢•ø‚1�ú�÷Ó©ÓDKÙüx˜90ú\ô[(—ú/)‘]¥ÎW[­…Úé�´û±½×ø¨·…—± m€êÇç-t~�ùöÁ¶ú)ùnüÝEî­ÐŸm¢�Î5PÿLp¦ØCPà»hGœOƇŽ}þ3ùÏO´·Ëç©¸ßøxmâ½c�#Þ×gvüÜÇ� x<ÚžÉw|²ÀøS¹�2úÿ‘ió™ËùqLM¿ˆüçuâ¼2q�ƒxÏ(Χè{} NÕ§ßß“n�÷‰žJ|©2æ&¸ç É·åô#�üDõ¨'ÇÅ +ûoE÷87ίÜñYÙ†øÜ@<ÏxN,¼ýo–Çg8nÊ4í8×�s+¢¶¬“G¸Ëç8yóõø¬1í\ì³cÚžI†y_}‹6±�£ì�[S¶—«IJÇ=P­5ó…ÜÕº*oÇœ)íº€ybîq¿1Χ1v�þ"Næ1ÙŸðJGs¯>Gé²:ês|ÂI}™Dßcý¤ëx?‹öŸ}œi¹á‹óªqWú:‹úNíèú_œ_?Åûå±Þ$Î,ê'‰ú×wõÁœi<¿x¼äUâŠmsáãèF}@ÿšvž2#¿yœßçýЍýÙÇóŸÆÙùñ^·ô]iGÇËxÓŽÎïñôR¬šöt=Õˆú¤¿ûQ±îoÚÓõ—‡KÆô“ÚQ=–ŽiK_D|Ê9ŽË 2ÿû ±½¦<Ź*æ,Ò¨ê@æ3¿ÇzEý3ë4ù‡5;äwÑ$ÖiÌ�øú:—¥1Æy!Æ¢m¼_#V[å•™ï¡/©ñÒ?£ŸK—SbÜÅ¥tûg®�ûsÄçÔø©ùjì ;º¦ñR|ç\ë‘Gi“4·˜ÿh˜'ã: ?yŽ6ž¹µØsÒµäÙú£}eŸ´[,?0¥ï)o[ScÊÆÁê؆ϳÆÍO°2Æ�}é†å06ÿnš…ú=j†yãôŸýÐf[¨»h‡¿Í½Êæ�kuC_þþšÝÊëj «ážh7Ê—Ñ·~ó{%×B¨çÛx>~=Êõžþ|/ºÖïAëC¬Çß6_±£¿_¯v¡ßÌV;ý9×[ßù»Ú½¨î´gÏŽþvuýðÞ¾ëw¶9‡žþ®¸êi>³(^�cÚŽÎs6ДóžF}Í‹¿a®¾ù{é“èStçïk“fÓv”ÞÄÃq¨~g ýgПpê÷¹Çáåo‹+Ÿ­yIŸ+ïœ9ãú×´1ºÏœ ÏHg�‹UüuÛŽÚ Ú½©P6�1j¿[ãnéqæI…æ™_•o*?/µ§ŸËð©<Žh(ÉçÓtSùPù¤:¯^ÚáûO ¬‹Þ—Âwš5ìð}YÜÇÐù æ‰yW{ ÜOÑÜy†L~³žoká»rìÂÉöú.FqŸCª£_îÃÇöœ¾E£rïGøÕ‡EÙuù‚qŒD›/œò3bJû±I?Š1²|ú]m´kFmc‘±$}JæxE#íoLØÑ¸EcÖsâôÃ%#’Kí!Ôì�ß”kŽótÜ»—¿+QO gOxf2Î5ê“9fâŠc®:>É[ÊiÒŸgΘϚhŸA´/0ÿçëtÞ¸a‡ÏÀé}z’Cåî9.ÒOu¹Ï(ͽzʨxž~¬ö¤'ô^¦Y;Ê7ʃ)vMb™¡¥<Ó×{ D/ñ8eBsãõ)½ªr½k‰qsFâå8‡&}¥¶Œ»µÿÄeºf‡ç ¹ÖÒ‘ú $ÑŽ{k c�8^�ËJ©˜Û©á: ã íŒs”*oIæ;Êoãò1q~9Î[ÄyXæS¨óÆå™Çå­éG�&Ü¿]j¸'ÞÕxäh?pÜ^ù™û^Ì� xÞ»´£ú(>×]Úñ9~�“~‰æÍüGLGæ˜ÿ(쨽ÔFx% ¤¯ø—ù'É ó"¤sÖq®ˆ>Éc´wÌaH†…+~\ÌÏ�18[¨§ùJ^aGuý }¯Eu(›ÒMÌÿHÖ˜Ïb˜¹ú*ôs™{–¾cYÔÇ3Ž?ès­R|r|jG}Í÷âÆùhÏ?&šÇ9áçÚºï'OFsgÝv„/µÃ3 âS�­�óýqÞGãí¢Œþs<œkæg€Wß…—k1n�Õ&¦O|Æ?‹úKðÉïq;écGi‘�i“âÓD×u;J�SÏ>IWÄkï“ÈLjóyôQLTNß�öJ8ħãÚ±�S<Á\½h¯w'ÅgŸ ¾KžøÛ ŠcT§ˆpÓW¦ÿÁܤæÂ3o²aê“ïh’­ n$-$Ÿj¯˜1Ž#È‹ô …�¾Q¬»e3ôM[ÍxK4ÏçSëD=ó3yÞÚñ|·‘ϦçÍ Œo4F�=Ö•²�ZÚ>Ú§"‚g>¦ÎóùñY"áÔ»ÖdC•k ¿ÁøK1‹|e=[.ݽ XÁ§ò�ÊAÎÛa~{*ô¥wz+OÔÅgìãÓÏÌÙQ^¥,s/A±A¼DÝ•ÛáYEùfz&Qq óŒUHcú*Ÿ´§ë ÚKÊ¡Ö2µ£¼Á½iÆ=õ¨MüÉüšd-Þ[¡Ý£? ïÜ3çžwÜï'h—¢Œ:ƒmi;xÏŽ©ïã³,~67Ó&¶Óô¡âòØfŽ„ëV¢Œº,·£ô´ÀK¥rùmãü·qrŸžá“c¤/¢û±}0¯ûãÔÃŒ±c�ª2¶Ñ\©'ÕeYzLcçï+žiÌ:ãLÿl\NY²L½I›Kº�£×8 ­²¨�l=ý=Ú –Q÷ñœmr¬ãõbü!ýmÑ¿|ñ˜/ãï>Ŷ„þ_ÏXÔcŽGÏ­ë{‰ö} ƆÙ$åWf>ž»·nò!%ûšƒè$ZÐÞ�—ôì;Ǭ|ßé¹Óù@4ÎìÐÖŠf h«µ“Ϩ}kGßYÁد}—ž¤<1ϯAËŽò‘l›Ö.¶a5;|G�t€Ö–4�ÅœûaܽPGùyÿ]g{ÈÖjβ7¹>+ZÀÇ|¾òAÂó’Æ.ŸCmJ;|¿ç"zø¶ò I#­µ~›3‹ÚËV +: ¯ÅïÈ€?±ÃçRßÈ·î,jO{)Ùô÷§íP†¤µ·¤õiÙáû÷'±Ê•2æÒøÔžg]¤{&"ü¢m‰Æ­ßA!�”gŽ‹÷™Nìè×8‹r®ßÏh†µœÂ}òßU"ùhÛáï!hîÊãR�¨¾ßZ{«Šw™û–^ÔïEk­éÓJ¾EoíÏHðÜåR:RÏIé÷W¤ƒøÜ&;D}ˆïùNî3vÑã<í+І´·Í¨.e—:××á¾…¿×Ã|èké½1ô¨×i·™_‘¼´ÑN<-º6ìPN˜ƒanš'÷�å©,æGé|å:õnÝxïe0'óÓŸqð ?áàÿtðk>ïà#v¨¾ÉÁn×ØÑ¼Ñ“åŸ|¿:§ÆßÁÚc·xÔÛ�gñgã–ìP¾4_ê)ýf‘dØÃ¢ý}(ÉŸûÔ»‹µÎièK´¡ü ¿|2µa.€¶o%ŒÝnÇÓÏT™üñœä�14m•ølõš˜—ôy_>?ýÏ:x¯ÝʱîÆ<™§ËçZcÓ§ÖM{¼Þo‡Ï«ïspžƒ¯sð�ƒw:xµƒ{¼ÎÁ»Üîàj:¸ÑÁ­î¶[üçá�vë|ãMvë÷ä=ÎîrpU(ßÊÿv€ã9¸2ŒçŠ0�×8¸.À5ø~]¸]÷¾ÐVàmüÎpï"‡qûóý—;8?ôçÇÿ*ç†òµ0æCáú`€k\î k­{W„5ós¿>àôüý¶@'?Ç›ñy‡ƒ-ßâà¾ðýÍv(Ϫïáµa-Þî]ær}€Û¼ÇÁ»¾«C{OŸca­ßƪ=›«ÂúÝÖÛÓà–ПŸÏ+ø^Êï ëcX“×üׄ{~Nw|¾¯_±CÞ5�_ýikö™ÕÛ±{×î°úrààþ}«�¤»®¿wõ‘£·Ü¾öÈÑ;Vç^sûü�¬¾éá‡WO¸['îvßïŸ[}$ßu÷#ÙúŽk¾çÚý�šdß �šú-·ÿ´µ¾ãQ{òÛ5Ç–ÿ™©›ô w¹Ûé¾ÕÕkÞzì{·»Èö¹‚½kî[¾oõ¸ÃyüU·ï¸cõáÕ‡¯»÷áÕã«÷ßsï#Ù®Á§»ñæ‡ï8oõsëíouoŒiñÔ×7ßqÇÅOáñd<ßá0¼-`xÛƒCðß]¥rß nnë·ÜþÊÛyÿ±ÅGŽ»cqmmõšG>uËí�|ꘛþ®VíÔHÝç·¼u.Œ¹îÆ\Ûë¾4¶°Üêp8w8ªl]%ëk�|êá‡v3”ìX{ÔšPàæë뤻®yÔ:ºú[Gw¬-ú‚k;ÖÜ8î8æp7÷Ýpëí׸‘¬Ý±ß­•£ê9[¤´ßefÍ3ùïðsßùð«TPÁs v·ƒ÷TPA<ð3þª‚ *¨àÉA²ôà�[�vüÖé�}湃üàÏŸ:�SÞò4á3/?¨ÝòðØ‹ ê;ŸeøÏ 4\|Þ<öÌ¡uéÙíû¶ sóx˜ø/è~â‰aòÛϘúO f®f0û�§½¿ynaî®æ¿§ UA�K¿RA/,¿°²ðO¶}âÙ�Õ‡Ï k_yyÀŽëŸvu_dðÅ'ë¿jÌÆ/<»°çÂÓaïo>1œó[°ÿúÓáÜ�?ÿp ¨àiÁOž]Ì{þßœ.tk|è¡ç6�W0Ž<ðÌá¢[^üpqñôà’/ \zã³—í«àÉÂåwž®xçsGwFðåQ¸òOž9\õÉQ¸ÚùÇ5æšïÂñ¿ôáÄ^:pí/<}¸îSTPATPÁs 7ü^<ûpSëE_}vàÇ*x¦pËG*¨ ‚ *x©Â+ß÷ÜÀ«¾·‚³ný‡<¼úü *¨ ‚ *ð¥Ç‡×ü·?ÜÞÂÙÓƒ;[£ðº£Ï¼þƒ/oø:À]ÿäñáî™-¸çÛŸ<¼q®‚§ oúJTPAŒÂ½Ç*¨à™Á›¿0pßî ÎF¸çà‘gÞú£¼Xám¿^ÁÙ ßP{yÁÛ÷UPAg+|ãïWPA/gx`f<}øžO?{ð‘#Ï>|ïú(|ß‘g~åì‡ø†'†\:‹á“�?ôèÓƒþä‹>úµ§+ž>üÏK/~øø÷=yø‘¿©àåÿËÜSƒûØÃÿú‘Qø_;;àÇè¥ÿðSÏ?ü£¿ÿømO þÉ{žüÄû*x"øÉžðSŸx|xä3/ø™ÝOþé}Ï?üìOVð|Ãϵ*¨ ‚ *¨ ‚ *¨à„¿6æÿÒÙÿìâ *xéÂ'�Vðrƒþ¾³~þÃÏ=ü¿[A¼Ôá_¾¯‚ ž]øW—WðLá_ã~ñTPATPÁ³¿ôó¼ÜàWÞ[ATPÁ¯&TPAO ~í3g?|v¥‚ç~ýá'¿Ñ­ ‚ *xðO Ÿû±³ ~ó÷Ÿ{xì+¨ ‚ žøÂ§*xªðÛÙ yrð;?úìÁ¿ùdTPA/4üßï­ ‚ *¨ ‚'ÿv_/Wøý ž9üzÏüÁ{Ïøâ³ô'güñ[ð§¾ððåÿVA<×ðççWðr†¿xßÙ ÿþÆ *¨ ‚ç¾²³‚³þò7žüÇ{Ÿ9üõ/ á«SÆüçŸ}òð_çž|íË/]øïÝ *¨ ‚ *¨àl‚“«TPÁ‹ >ý„`ÍÏUPATð|ArqTPÁé�þ^TPATðr†ü;+¨ ‚ *¨ ‚+¨à…‚ÚÎ *¨àÙ†úG*ˆ¡¹} Z}iCûÛ+¨ ‚ *¨à…‡Î}gLüè™a²ûÂÂÔ± *¨ ‚ *xþ`ú3g7̼̠÷C£0waTPA/UXh<}Xü¾ç–ß³Û¾÷ì„ÕO?=Xûëgv¼íì„�Ÿ||X?ÿ™ÃÆïž{>lì9ëTPATpöþž±ûßXATPATPA<ŸpîTðr†ƒÇ*xÆðÕ ^jpþßTðb† ßöâ�ütaó‹/¸è�œ pñ«*¨ ‚ ^X¸äÏ+¨ ‚ *¨ ‚ ž_¸ü/-¸âg*¨ ‚ *¨ ‚ *¨ ‚ *¨ ‚—:\ùÅ *¨ ‚ *xb¸j¦‚—:˜îÉkÎ53¦eLãðæá²p{ýÞt:mLÖ±¶ÕµfGÑìd6k7­�ÌóãæQ3eÜ忯foc£,6û›‡777û=WÒßøñËÍry`¹l.4SÙÍCåô7On0&·Ý�ü�67¹™ø1󱞽ÚŸ5 ÷÷zó³f"àt£qØÖûýbóú£f>1é¼¹ÜÌ%&™÷X&¾c:qH’é‡Ýó~ó­æß›_t3qw7ûE¿çÿ¹ù¬o¸‹B_N¦\ãÌ6Ó¼µ3I§Œ-2ÛH³Ö®_L¦Ú‰µ¶h6“Ùsxá°Ïš™o4¿äÆ8ëGwxcÝÍÕ!,‡_oL–g6mÍfÅMviº‘$홬üP¶Pf톱sóÿµS÷_Ýl—Nþ¹y‹ÙcÚŸº¾é`霹ZžgYjM½ÞÝSÛÖ.3›ÖÎ6'ÜHVNþ…y“9Ï”:e¯xs½\,[qt1I=¬&Éêjšî±‹‹ÖÁeîÊ—¸~ s£ù�æ>÷Yþ¬)\'çlöû寿¿Y0¿×Êé¾^jlͯGáFøWæ3nÆõŸ3³S³iâë–R®èZÞôMgÁ>dΟXšOòþºI§Òä“å/|¦oÍ¡Vk®aÊm�o«Û} vs(Nþ;ó׿×̪›¿Ã½º¼*Ü~>nåÖòyü‡7=‘Ý”¢Óï.Ø7têIîhdïXG©†ÿØEòºå{šÙ¿¼ôh¯Öʋ޿6›˜…n’&n1³VÿêÙf™$YþÁ+w¤×¼Ú$5sÕÊÊd3mí[õãj�ü’ùæóæ€9bZGë¦l¶÷¹0õCs’Ñïo¦¿éÕ” †: ÅfoP¼á‡ç¾ô]Åu7äó&-�y¨9o¿ß|“ÍrÓª™|ÀïE}›µù’ÙÝn&Ƽ£´I×Ô“×ÌÙ¿_4Š~¾mÜš/›I7�s�) S¯7ß¼~tz¶p4ÎÒ¢Èî(RS7¦ië³Wö¬ñò+—ŸüÜÁœ0Ý£msüêzûÊË'¦gÏÏÝLCv4ÌÅÿu‹fÔsCöóJŽ+tSrõ“Ú¬ÂàÏáæŒ-�&È/mÏÚ»šonÏ™ïhÜá'8åJ‹´\žp 4Ÿfe^Ÿ¹Ô1åy¯¶yî'‘–¶vE«¼­q Y+¿ÐpK˜˜ö”éÎX³a¦Óì2¦ÈM'÷ÊÚ5›´j�"kÍ­¤eû°ñxjuw+Y6YݵqæÜê¥nõ¾f>g&Í¢dÊMe°>”8mR¾Ûi­´Hv½ÒvkÇÏ¿ÞÞ¼cÎi;§ÕÊæçZ^ìó£ÝĶÖ.¹v-Û_¯Y›¤ö;ÊÔ¤f›ëãËæ7ͺÙç¸dæèdÝœ»±°‘®ïnìß·rÞ|æ(|Øõ3è ŒâzÝÜÐ_è4äú€¡67JR7éÌ1ÅÕÖ±†c·Œ6o™ë['W›F-1y÷rs¤�˜«']éozÒÛ4·ŽP…©5<«\Ÿ%3æ 5{¿éæv÷5IÃIxÒ>dŽ5GÅÛ_qÔ9ät¨ÙÕàßææ©¯~d�“·¸`ÀÚ•~Í7Tô-n¹’ºu+`¯möLRfY‘M§xí{8«5oNÓ•v«›e�ÞÌ]ö®Ö«šÙóÛjy;Ëj“ŸËë~ómÍÂN8íšeó»–“¹±ÓeRï̾ÑN·;­‰Žm,t_½šíýz›Ôì¶•n«ÓHšs]?›‰“i¾êfSsÌÒ;:Ý^›^JvmßÕZ]îL-ÎÍÌNjj ´›§þnl€‘ï[næSIRN}Ó‚½×hÍÛÛ̉μýB+¿ß\ÖÊo6ÇÛÅ'>×lõr[ÎOìé%昙˜IÌ fb:uã¾$uWæU[bJ§3¿j>ëÆµ#ðà`^¶¶$«¿>`ÇÍ-J÷¿~½^N¤YsîNÇ´I=]ZÚ}ÜôóÃëç^g®Ýµ¯‘MîÝùÙ™‰éÒÔúÍ §¯“ú�;Ö&Ûímß7™,í½è„=qÞA'õ N«þ±Óª;½f_[¶[$p�ùvñ”žr6«?PUÞ`þ¿fó-]Q³¹ëÌ…]3¥Ó©IgÇÊwO¤Å?vÖç׺…5ézf’Ô| ë>ÚEš¥­Cû·s=ã•�MJ7†ÎÉ?5ÿÉ|Úiö©£ÙRc&ñÊ}q6¯gÁx 4ΩÁllz�£ùì¬}�9Þé™·9ïôÂ’½ 0w:q,òo0×¶ò�z*5Wš)·÷Íä&�ÌÓ²~ÏÀÔ\¹[¯ý²“æôÀg–zÀ±›^QÂ{=ö·�qË\«Îýfºy[­|GråôÌg�{“¥¦]ûÐŽÔ6¾ÿïïJ·Ÿ³Ë­irò�z¥oöKr¶ðyµX”[8ý”z±Ôþ~×S#í/­™ÉFb.Ìë³3WÚ+»Ó·/9«àÍr§ÑͳÆtve²»Þü\ÛšòÚ‹/¬'¶iÍ�ûn�_žË–6<0aËÚìâôäÌT=é¬t¯;�îÜÐQ==ùEÇm�™i³d.ñ«~äÐ`Õ½;ℵ_„!åXQ⮢Á”J}óð;¼"LìŽW˜©ÒšËV/¿Ì^»º”%Ž6ݽjj4‹ÉN}2­·“|i_2³óüâ›ùßµYöXˑԚkûiâÚ®^Çbz~9Ùtö Ÿ™=ä´”Mêùd»ÞÈ'k¦Ü>•æ�K’�Éòª7uüû—æO��Õst>ì)½Ñg tPìNW Œo1°Lï§ôþÓ?wVµæl|g­LÛE’OOß™Ü[Ô~0/»¶æ˜úÀ\Ò[Y¶vÒiU›\¾PËš¹I&~±k¬ó&nÛ˜ëN¶¹8{ÞdºxùG’¬´¥½õò�“ioq!KºeÑèýí…Å…IÇ*«‹[ÞÌ™ÿêVaÑ÷\¿ciÏfrüÈÎ݇/Ø{nô�Ä‹wü6i“ �Fb �†|õ«òºc�¤–•í¦ãrçT¸¿µfÑí'ûß>ç„37f±Ý³—™�Fßž0e+¹¶ž¿ÆlLNdý†wÛ‹$)ÖsÞOâð4§úÎìÚ¼¶}~ùP‘|ÿâ|zÕÕµÄYºä\§Ù¬³Î ¿>Oïõ�]n¶O&‡gÚ4Ë;ƯWîæýUç-õÍ+ÌíéÆëÖ®XÛ•žR<žÿüº , ¦ÓÛò>Yœo?p,¼G<à�¤j3°å)ö½²ÙòÉë-[+�ãP¯§I"Ý{ëTÝA“\ÖîÛkŒ÷&¶eY™¦i³9?Sv¼Y7ídzfW²61‘ìnå;nßž×;iVŸþ|^w­óÆÔ¼³LIþ]¥]hW79vµ lVNo3N÷,ØÞv´Iísž�L<%Ó­+¶ÏšËvnŸO—w¬ñ �7÷šz>Q·ÅdÓSJdÚ,˜«”šï]uÅU+�R2 Öþ@7û[$8e[ÖBr°ü±-ú<äd6É“½7™®›ÃÛ7¯±¯¼×¾±•ÝÖ<8gt\ckíµî{�+¹1ÝšJœâ~ëŠ3UŽí[åJçX3ÿ©Ïù…µéå]ç'8CrÅ+—“Ímnž5ÓÙël�ó6¬imkf½N:53Ù0µZÞpÊÖyÝÎ Yío±£óûNþ�“„ß2×ºÈÆ{ž×\Õœ8zÙälÿ@xb]>Ç–ïYÂ÷ŒT’7 šåa8ž p¸\—®€O½èzVÈlní�挽¥s}«gßÞ>î¦Ig¹ê�‰ùÅ´Þ±ùÂÉüÂÎã¶îð¤L“45K�ü@g®]î7¶ñª¾�„jEgÒ´”[n¯Ä\,‘®ÔÒ�ßr è\ï´“{÷Õ:‡Ðÿ]wJÓö¬X›Xt¾Eaòå^V«_èÈUwcJkE½>P{ûüŸ$]m5œ-2“í…†÷<ËüÐõuÇ� —]•äµdÓÑ5wzþÿ3¿í,ÚµfîèlcrþÄÆeû�dǯ^X_X¹ô¢Ýû<}·ÔaÙ/Cä´%qîrKØú¥'¨´Ì ¼‚S*Èr%‹uçYÓ‡VyÇ'“Ýt÷æÜVßï_l§‹=³©é5§ìù[‘û ^4kõ’?’œ?»¯‘Ÿ0æ·;N»�¼|ËNçøMì¼gy&¹êúfm�Ó0‰yå’ó{Ö^c¾~@¸z11Ù¨ÙÚät£á sçµëÉù7øo½•-Þú¢‹is~Õ¦s´iêíú6ÓÌg§d(ðU¤Lo)Ò�»§H`K+}0Ÿ5™ó<ë·¶fíífkÚÞ`µg“W»€ 1�ùåôܽÂd.Éeââ йõt‘Át?=ø˜m»uM'&Ó:d:Î6\èâ™Ä\’Ûóþ³g)¹ò²zî#–¼>×vHœJIìw—vþÛæ“ëLæf÷‡É™7w™{ÍýÞ§]]X½#¹ëε]·ß½qß½¯¸s˧Õ,¦dËŽl­³"ÔÏmŦ^ýnlnÀóÜž§Ïlô·œ~×l­†˜Ä!¸²ï¸–”¹ $œ\¤�²¨Ï§6]ë’�9Ìy­žy¥ÝéL·�L­ C�KU7çØÆúå¦_¬o,\b÷¦½A™hÉ^¯'œLL¯› ²zy¬9gïE{ìÞßšpJÔv‹vÝEuÙÉÇ;Û�,^zmÓÇ»óš.“—¶‘%ŽìÝ=… ñ6ºsnXÍù…‰tvn¶ï W¯ÞÜe:.X³;/hø&N+íq¼Ûœçþ¹%sÞùqñ¬Ùíè|ÿ@ßõº»ö<1ˆñ׃üÁ^mѵLvÐK='Bý�²:e˜Æë”Å’s–MvÌËU_ vøèœuê³Ì:µ$-kYÚžvtÝó�æ­ zÝ}Ç«Î|¯æ‡§ÍfRKíBâ8¦›šÒ鉤Õë­'듳劳äÙt’µœª9žl%ÛZÓõâ¦ù¾‹Ê½sk¾Ðußzm§vŽÞZ$¯?Ú›Ëmrôò¶ãU»ô#3¥I»…óyòÎÏ;›Vë•Þ»/L3w÷�ú»tn~*�[X»Øñ}³˜.\Ú˜j§E§•ì»ÆË¥³mÑýy¶×­Î€ƒ¿æhÛ7—9WüfóZ³p´éá£ç®Ìí¼<;tÞeWl۱ϕ{ví)†þÁfàã¾ü¡‘<‹çå­ØàðÖg¸ë⇭\PO–×}yßû9Ž�Z™ó9³¶3XéÞÎÇ^fª9kšÅÖ”ùX£–_àïÁ›W½âUË7ݶíÎÛïzý›ܺ´îæ)—Cü:ô`N-„ôm1¢o·´í@ÕúTfÐ´Ž‘ Å�¢¿¥s‹4uQVsËŸ·¹s/úéúÿÖ·¯´»<«µÊA°äˆÕ,Í9ií‚sílvþÊâa{hº=™Î¶ »ÛÝJfÖÍù�òï^ºÓ-ÔÞ#{Ìž‹ö˜ÝÖ)\³÷ ¾}^ô»Æ»#i²ùÆ,ýáÞbz䘳XÛ�,çηö¢]ï-uJÓ2+33N}7ÛÝyçþÍ7zÉT9;gê™}kËÕwZÖ'(çÌ6÷¯p|<Óðÿ›AFÈÈS×Y´ ç�Í';o»}áö æf]}è"h9sý¢/o/0îáÑ<ÚÆfÐ ‹ÖÛô.�+tŠäT�1 íóÆ;uµVÓSuজ³|n#»É�²•û` w>¡#f½î9×9zîÆù�Ys]ûJ3éXy¿³Ly'ÛsÐÔê©íM%ç}Ï §joz¬‘xÏx¦ï‘ä®ß+ÎY¾È£Øej…�¼Ð·õAÓ« Ì^é4ª»ÕqRsÀÑ×…  ‡Ì½…yÓe=çn×ö™äº G?ñ´Ášÿâü€æRsÔQí.óF³zt¹4WlëÖ{—e;Vk—Oή,]ì/¾öλî~ã õS^�#Ë–Ž $¿yÄÿñßÊÑ<µœBè™-ÚԈכ‡·¸Ô«Ûw:§?+|‚¶5ajÎ÷™t®õyN•ÎØìçšÙf¾ë©Ìó¯-j>–òþwÙÌf¦“óÞ³a6æÝM'‰ÎS¼Ù)ëÿkæÉñ"¹ÒiŽ›\áÍ¿•;�Ìì²97©YçS/™îtêXËûQÎÚœëô¯9¯é-[‘6» 7çD}¼0_™M®n»ûó ǸçœSØ93—&+Û¶-Ù2sÎi×Å9=GÛUãíTâ¢Ö¯9ž¼Û|³y¿ù�yج]tûë_}ü¢ãÙÝ_Wk½îöÎòüòê>ôí¨É»Dò_»eŸFÅ‹„^ûõèoµ§¼ìSCÿ“sizý"¸î£)›�.×÷Çf·r%E}Ê:¡ßŸöæ.íwæß^Ö�<àmiâ¤QšMS:mšLΛmé|Ç…Dµ�æîÔò9¯c]øæ±­¯¨çûÍ|-_sÏ«ð¬ÕìÑ•nÅ&'Ó�Ý y:áb‚úÎs°éÿ=VwnJ–¬˜¦“]f~Ç+ðl­kÚ“‰™ê8µà<÷Öxöhá<®)/ƒ÷4»3ýt~Òim§­sûºA`U¦Þµvkda·/ØåÿœïãÖ´\œª9¿hóÕ…Ýÿ¶Å™ô’sZ­vaêýúÛ\ nUw„�/9Móys�ÏɦuIrÝ¥eóâÍö9íÉAlÔÛŸ{,ä@WûL™ }ú‡Oeol }¹ äaBpµù�sS]Üœ3_gnnöìmn˜6™ZjåEš8ס6u ÑöÉ|»+MÊvï[´Žf‡ZÅýæ‚™FÚkôÝlžü|Ýæ™ÓêÞ¿½pðwamÉ{^i±éT»13^IeÅúöE“LïíÎN¥Y1÷J¯o/4ÛZvýÂŽß—¨µ·æÿÿ:®þ%³0ØûÜ2TL) òÍë,yO½ÖßyÈ8 i®˜=pS²öÿóõ&@’e×uØ}Ë_ògæÿ¹VåR•Yû^•UÕÝÕÕKuWïËôôtÏt÷ìƒÁl˜ÌC€ÄJ‚@ Š¢Dv8aÚ ‡…iIÌL(;ÂaÚˆ H9$ʤMY–á{ßÏÌÊê�5ÓKUvUþ÷î»÷œ{Ͻ¯4—GFòÏ,�_Z›ßÍ1J>®ÜzqBë½ÜÎeµÀ� ô=X"?^œ®Nðh&*LM&•v£ÖPƒºÒH‚ûA*fŽdÝé}<ÚòéK�söªíù7�{í@ÇOØ>œõKìm×|Vu z®,EìÌ{ÚkðãÈ<ÝÉÞr[Úˆ]×ôŸÑ?¬ <õÔ˜å�{æö=sëÒƒC|¸üš �n¶»Ã’Çð+ýÍ<*Ïâ�^£Þ ‰'ÎàøE6Ë(ä1ò$| O?úLæX]1®lÞ 3òˆ¤6† ÑÇ—‰iá3&ÏW¨^É#]n07ÑéÊž±Î3%\ÉæÛžA`ëœ6 ï|ÌÑ¿ $uH–EØÎ뼚{Pê4ÕO)÷`¡TãårYç‘’s®."í’ïÃâB0CááµÏ`tåîùsp0úý |:úDd¨÷ ¨í–½[ñíÒ]a>dº�<êçîÜ˧O`Æ¿Ÿ�[9Ȱ ¹Ðî0‰—f>S[mÉÁ>¥Yé³›Eµ·Ház÷Kœ†17fÛP÷è×®_àŸå ^ yûhU »G¾û³U›‚«ð„äFÝ0—¾¡‘s€Û”ç¢oD©?þ7 30ó]D´Ìªj;�HŒÃœv«"*‹Ûz¶ñõó‘B&nD~àã+ý†&úîý|ØB8p¿b*’sÙ›ô¹3 ó«@änU¯,E ‹çsÎ"�{^†ÏÂuôÈ‚¾ü«Ÿû§�!š sÚw79~úsš­WŸ7 %-š,´3ÌD OõÁ*k �G\¯q¦é0fždÀŒƒèÕÿ»„¤žS^ÄNq7Èž’¾ WX62¾©æ?Q Ù)äg®=ÛŽÉ §ðÕʆ §æü£’'meXÁºä®G97ÒyH¸ýa–mÙmEedKŽ�‚˜<þø2¼§�ZJ%]<äÆ�L´:±¹¡:åš’Ól²Œ®iµóñÆìY ·*õ2¯´Z�»`åóRY®Ø–ä îü*³§–”�”�$NÞ²ðt©tÊçÀJ’ÿ²L@›ø°Iv‘©yXÉj‡?еMò@¸k¹E±¹®œÕ%/Z‹Ç”–Ë m#¿šê§wG#¾þ놑ïµ*IœÖÂ<Ü„kAÞ@Œ�4Š©eÃç-!ñ�!Sf) (Ú†G}õ2œð­›ï;Ìâ-ðrÚd‘N? lf¹Õ4°X\! �kÈÎR w¿Šþ`5Ó‚ŒÜÿü´ËšpŠbÇ©ÝSk|èHém›}ôÓVm)�¾*`pp³/v‡nôk9Bq ‹cšœåÓäB‰*Ô¢Pªx+.ßC²mK‘“5¶ÀL¾©Vr%ÜÞ ?â¥@½ö"RD¥Ê¸…B99î¸(f·Z÷ÄXcî¤r¸:UÁ¨Ëc…7~ I\7Q)·¦µãÇ ÿÞA·O‘Þ÷+üìé³Û|pæzÙ>e¨| h1isèQ{ý4^7«® å<‡¢ÆJEƒU¨Ú)�m¾Io"ÒÒ�ªk-Àï0½0Ò#ª’yDçlʰ¹K2Îð#x ßzÖyÇÕª—£fÎçÁÕ†èP‰Á'D|ÙD{Þ²ã½"ßø„ƒVøJ"—+¼ ¯V5Y™¬¤ººD6ûo4ö}^£ÜQ<ËF Kƒ¢ÑÀ˜™³ÑO¹‘m«ÖØmô+qý˜ª?Ñ=È®õ4Cì/Nª—§»aä“zgSb'l&Dü+ƒ¶Sòç˜�øÅ³ÓZøˆŒ m¢,>…��¹f15\„°.YOÓ6¥?Y�Š¥ßò}@4оXe™d ÷ˆC J�0‡Š/÷rÎàh1«\(N¢)(à4¿ÏŒéí@Û z5óó.òt:S|Œ*i騆yÿ²Yçã-!‚ˆl}âñ£Id%”ä'…%K¸Bh˘0ýÜ š 'ÛžZgï£aPΙýìnA1a¢É7ø§¶¤Ÿ8(î�­ØM ªˆZMŠ•º*þº ùÊâšX7I�¸mâö�—Å'yk’€y€ûÀøyXò 1/&ù¶ækhwÆŸïâºÏRyiã¿õð­ÊÙÓËëòòKLBi„Ð…f 0#r#Uþ�)~ ‰Ô;_ýÊÒH¾ãÝ*då4¡*Lñbp ®Ù¾G1Óh^±\Vyˆž“5 âØ&ì°GÇ¥ld¾]ýeñU„\³Î¦mó•N9Ë£’0H/€>qêòNà9‘Í•zì”òj WËjLcB†!ò¡…?RÊ�º}Y i@qSV(pÏ ¥ÿŽ4kÊ£ã,t¢Ÿ7î(ö¡)DÕRkkî£=�Á2âê¬:J¨:Ýpý‰gž{þ|†ª;£\~(ècdZ›lÙûÑ‹°ÎAA$‹lú ô ƒ˜§+%�î0ú÷ ˆ´lnx¦±–Ø<ãsB:�"Û7¤}¡‚N­ª†OØË«2ö-Çž§“"fÓ^‚c+ˆ“q›^wPtÜmOüò,î }Ü÷РQú–¡õn¤*±ò‘Ởp{×Á¯]_rd–TÃÆæM…$ˆ+æHЉ›{®•È4Wá”q}¿„?gÜdñjƒ2Ô•~N4Ëžý)Úî"áùi»ÉGJÍÁé7PÞl´¸‰/y#E,hã;9�'\‹ ¶Rv­¯ÉºŽg�3Ut�½;�¼†Ëó.>˜P"-¢X”„ÇÕy©›Œç:6û`=ÚnËÙ�R^Çp™oÿ�Ög/#Ö¹¢=ÛÒ¼ÝÞ¿peWڲ截õÏÔÑAÞÖÜ褽7ó¦æì¼Mªf×Ô> ?cRB¬ÁÚÒaîÚS¼æ8¬eKì·H¹@N ˆèÌãCa|p:¶1�gþ¾i»*Å‘.ÚäŒ ÷UƒCJ/%|n”Æ¢ÚnœÓõU…‘�Ôâ娓}aß‘›Ã�÷™æýkÜ·Ç�ÃS-Û½{ñÜì)qXk3ª®1³ä\?'¤‘àÿ�?ØÜÕê$rWwHBm�d†Ÿs´K6E¾:µÇŠæ±qŒxi’(EÏØ’…SÍO½UA Ia­tݼî ßX%MÍÜ Û›ŽÝJ™ÏßÜãé°Ie� =0¾()”¥`a®ˆØLfR4&uÅýtZüaE¨ÐÉcpª(ªÛZL-J²èˆâx1�(ð-å ${²µ&ú= Ûð”ö*Û½§jgiÞmÂC±.ÍVé' ™šxkíÖ N }ŽêÃðþû·ªTKÒ.ºMAWRXtðÇÄ8rÕ3 # ÷ßÌxÑ´&pE{¸mšûIÂN¸TO•Iþ¼ EÃdZä¶^ZÝj‰5cO鼩¡ÌÈ·(E& ·åÕVÕƒFavüqè6ÎeÜ¿D«¥Ü ½5ºç.ùsR[“‰™ùXœçÌTè”ÂzÒ+wÆ3þeàZþþù×¢®Kp ¦¸viíòÚuqzÿâ•k û(úF©úF749óðbv´-C*}‚’%ê%�~»JAƒ™Í\›Ä‘\*¤˜¢sÂdmž‹¶XÏöÐ6U›m‰Å9HÙ“HÐpmlÄP˜f†±àÁÆÿôÇ;.å5«Eæ�é(楧K9ô�I¹ßO²‹•±ª˜Hó—hÿ–M�xøk†¨á }àì¡gtJ.{‚RE‹èn�º$ @/ö ÕMÀW Ÿšà7òø­š–÷ñ7}E>�ãÔ9¡ ­V¥õÉ`Àˆ�úç~)¥R†9šùÕŽ°k2â�ôÁ1R<¢ÇÇ|OS\Ï Ù$Ä� òPe]Óž;c¾Z¾êbƒ •òä(™Y·…a!GϹbŒ¾4! ³PÎ+*òm›ùŠc³œH´YK¹ì¸ñ$HÌGÖª$ò®O:nzTз<³ÊÞ“ºt”èdQ Ï¿²—]"Ëp›qŽÛu ³á�[x'l!'g´×}6‘ ›«Å¬â+#0˜a%GINP?�ž‚Í8ŽÌ™ˆ�Øöd¼Dß2¶ÐÝÊ”kL2ð‹ ÑŠ—iÓ~ÿ'|‚Û™îÎ>|{K «"‡Ãèƒf¯· í=XDìé/ï©.Ññt£ïÉø¯•Ы!35 þ&U±ó<eHe¼¦lœªÖðiÖˉì«µŽ€š¹›7”â‚ôÄsOô8I5ÒD¬�]Áå:ò=ŸÊ,†°l©ûŽ<܃©èª…Dø¸(Ê|ÄE(\vÑ3ã‹p�ý´bX§¢€mLB—1 +üvw,ÛMü|7ÓJÿþ#V N‚ù{óÇÐÇ�b29‹yXmêöºA†q•ðs}áâU 7È„£�œRšO¾*—ÅÊUô¯† ¬SN8®“f�E§jšäl­|§^d�o³Éø]a·dÁ6']ÐW ùí?~^‹ûøããr¯\˜µdM϶:° —Ä;¡/Š9RBbD¦¾”UmcÕ•œå‰C':íf¬þ°«Ë·›ÑPjêu~§¬‹½¬îž#8ù¨ÇæÂ6}ãã„+KèÅ{ç6aó\/ûýûº"m9�‘ã¹+ß(�¢¥¡ÕÜ&?N'»¶!„µÛµa"ˆ1,2'ñ×Ñwס�zjú ÜO÷÷ÏáaWé2\×túüå«×½ù™çÔà虉¶$®ÄÒ‘ÐUw{ýòœyÀ8^ÊC¦®µ¨¼¹‚ ¾ã±ŽœNÑ™ú`ã×ó æ²@&j9hÿ|øtŒ¹x\Æ—f<*4ãÇzÌbå5:çã ¥â&˱Ò=%ÉV¸¿rmÂFßéht¥ð`}&¦¤ŒÉ ÷sˆJÿ ™æ÷‘ÖÑ~ºý ,õ>}r°«­?'v�UWEÖ÷ÓI‡Uõ Üô�~:ášZlüd\õ¿&ìw Œ)»Í+¦â,ÿ«×¸Öìq¾a#§ŽJ¥œ<®R›M(K¹mÄ…M6ç§²«íï¨{øÆød�×&g_CÂîƒC2H¯!é ð�O89ÂŽ–0DÉØ-Wòx¨Ë§ ‘Z4ÑËÿ "œ pý<íüùUÛ�çã›h�ËC»‡ë⺬ӗ)�ØDb‹Ñ£Ê\œW*:˜*ãN�Âç»]¤BHÑ”Nyü(äÍù±å]8ÛLl»vŒïÔæÉÕ! ãJx¢Ä€Z>”É—í¥–áèãÒI7�( Í%¾7]T�f€›�ÁÛ¡°ŠÛ%ƒCà§m‹Çjm8Û+OQr÷�gR¥ì«"Àu› •³ÁŠýç VÍã™±úܤ“°€åšÆ×Iƒ®}î̹Ë|Ýw‰ý¼“NbêòÖÅ�ép1{}m]¶˜}àMkõrM0÷¼ŸâÙ¾˜E–ÅŽ¹ê#èúÝe’!šb,�¯Lû–m˜Q…!«Ã°Q —·¡ zSk'àø\bǶñbDÿ’]«¼ë¸xð¨rxÖ`—à‚�®‘dûfloEÆT‘·§¢ ²˜SέY”À0Ú^MÊ÷âŠ%üj±•É\d*iYóŽ¿Ð�Õ L‘‚-ijz¾‘äÑï’Ê9ñœôÁ :H3ü?•ÙwIg¤9�Þà×\õßßdyfãcÃBV†º@9÷ øÆ»//’æ-OZåý¦Î»L²ˆ©’ÅP0ùâ>’*Åì8£…¬z'ß�%üçô^çÜ0¿²Ñ”£ÊÈ�†‚|ÿ¡X@yÄ™�—�4(“ˉð<é&ìsn>¸e´Ç'e£ÅžÀ3)¡4#ŽV�EêaûúM4Í'Þ!ÀbHjAÓõÛFÙê‰7˜×n:Æâ¼‚ÖÅf�¯êÆ�Ò³è5÷úg—ú¿´Ç}m‰ùbÙÝßÛklTef¨—w@2F$ž,w�P=Âô€¿ï+í—а>DI_PÞSÖ3�? ûJ|W7/{LØ,pj˜c­0òïR 7$¦…‡zÇUßýži’Nh[1ôULöÐÍ;³çaýZr[û ŸÄpÓŽgjM,"Öµ>&½}èe5@ÙW~_÷­#$ï\IW6¶;‡:�t/i–CK7/gj̤wÀÀÞ$‘¥àÝó¸ò Ž×Žíò‹÷RöqÏx.(ê·‚¨îRì"€â8ì:>èm´Ä»ð}—à;�ç¤~?õpM,‘Žßs3$Ý1Û—<�H!ÌžZÒZ bȘî| uD’®;±çu,&ËlWægöÎ_>*GË›ƒý¢w®1Yˆí+>úuò�Œ–Ö ÿ Y-Å×mû‚ÊBŸd»�a†Á¯ i4].J¿ÌL£[„×<óiƒå³l‘Nnn€áp<�lwÔXÀ‡ÝxÏ&/;·Ó#é‹MBœR|¾�2ø‹=ÿ³pl5‹nG:0ŽÑ ”‘¯{ËA^Šg¨|BësgûþCøc\� ÃÑÛË…ã§Z£Ýx#f<øc/în•ðøö)á0 é­~®LaHpïE–XzrcéQâz�åR1Ï‚§Á¶9«Íð‰ °w�Ltøª_wìˆq;I|< ïùZæ-#ÊDCh q²‚ =¢eÁBE±"&Û.†¡”,1» +cb�yf]x>¸ÌÝ4_]óüsøKô UƒÇôÓú¹µÍ£³}¬­‘i'öfµ‹ô Ý›5? Œz$§ð?W´¼‹3Ôð5·Â~�mˆqi 'º×ôH¡JÕ]0ÑÝÑž•AîÆÌ;4ïÀw"ƒúÄÆ¿¨£ê‹Ñh6^1¥ûŒe‘²Ý+´|‹™Šy½ªOÙ­ú(îÍøSøFÍyDûç´MÏM¸»§÷·P¬ä£FÅÿ©æh@ÿsƒ§|�ú$Lb¿òiŽxÇr5çÍÁýàcl^À/YÚ°‹wQyYFÙ0‡[Ås&Å´E=oïºÄ‰Ln¢ã ]�G^Ý9vÚÅ'£Ü´ewøï+þß¹ÐÚG<‰‡&ž5˜ƒn 1—‹L­à>’Ÿ"öô´QE†˜ìæ‘W¶ykÂòºqoíœ\U²©ƒ„ÿ�|¡§…¹é!¯>X}žßª‚†u˨¯Â?a욥ªKiK Lè|Va#Ìß:Nã: MœŸå²ü=´^uÏð³ïP [ˆ ]ÚXÈ”çz.¡%l\VÕ"”m“�惣EüYRÈ¿å²Î›1ôÍÿ/ü‘öÍ»ð:Æx7Ü¿µ�WÒ·ï^<¶(GÕ•JKÞ?è£r7ŠÈÝa×Ç�{À“w7Fã£o߆"nâÅ25�^(²;®<¿é:´NT 0bQ†IÎY ½™eé e tÚò´ Þ†žÆáKÆÃ&õ �áuÿÈ¡á+l3Ç:ŠÖÚù1c™çusi")ÇÆœPZ†o \ÚÓèJž7À.í׹͵�“è1Æ_ R]'}½v}Î&ù‚àÇÿþ r²i\¿3z&Çd8YšM'ØÛ8–ñ²n–@8¨ïšý 6¬ïŽ&a†qB›·"²uÓ,@aËTœ(fÒ�Àðx¥)&’)O"oÃî0$“ÝPä[’R%]ôðóh8 ð‡1C´²UÈ!+®»*Z/Jùñ…q>»Ek³lpáÛ–Ž«K¨AÍà÷niùRȼ7àÓ¤:S}ÕdfaÏÐ×á›ð0µ;ùw>ô̇Ö'[“‹¡ª)DkñÜ’ûµK'^=÷ oüò7?÷Ò¯ýÆÓîÁIœ�¾U<ðÙ~©L/A7EC¶Ó§¸½~GF!:Ý~…½¿ˆY99#>ìæ݃�Ac ýú6Ás\DeáÞ¢©mU/Æ™�m’æÊi"a=‹Þh¾lÑô˜´HiqCzÇeŽ'–aUü<”ìé‘2‚2‰N‚Q?®08Š5e%žO*bœÒ¸¤ÈÄŸëJdýÒåc6ëUw<ãFÕp'ži"°ë¾MjzƒÍHî‚ÁäiFÙ^ƒé–)ôŸH£ñÇ]")¾T³êø½˜5“SÔæ‹t.ßÒÂHBíöãŽ`Z«BÝå\lá$�†Án1ÒdU¨…BË[”I>t›º c..yBT&Èb´6|]w»äY*hÿm#'ð\P�>Å“\>WN�æÉŒiPšwzu2&[ý~ƒõ!ŸšéÄzÞ¦>FØ8Ë4üÃûEÊÂSÎê·1\H–ÿõ§–1®þ6Ç‹®•/ò–8±5Ù‘y¯¾åÛ\ØÑòÛ9'™ü<3X„8¾x‡†Ü0û¿€ÿ< O¸8.xTv"%²W0©V v¹ñJÉ/–#6%KVÞ?iº¦åØoÖÀõ·­ Èf·dŒuýFžùÎêQ>Ѥö…•#›k›‡úoû݉#£ (AÛ'9ÿñ6œ× Ä|„ÀwzÇ/ÁÏEy®\ÎÇŠ¬‚�70Ýc‘ùˆÛµrºÁ¸Žqé8ÌzUöÕœ: �¹õ®MM ¦E]Ÿ„/ÆÓ�)6sbÜI{ ,'Ñy¾§æ Ï”æÚ׆²Ÿñ®±"Mn¨"$£~·J*­§ŸèÞè^ìîh…£9hÎÏĽ‘–‘ Ûë·$šÃ’Ø�Hp˜¾T‰‡ŸÉi¹b±Ð/ &žå«ãÈrÐÆsyVvd—ýj€çϵ¤ß‰uóYúN1f4X� ³n˜vQ¦òKµy¶Ti '`cgø©\DÁ(�ÎéÀºsßU=MÝ/æ$õ¡É1CéЉÄ&Ôj ¯áƒO‚&Õ9OÕLêYÓ nÏ‚Zœ e¡Ò™Å¹_íÝÿSi-§þ�ÿ±è·1‚/éÞ×;Ô±UÚ9wòÊ-±4¿t|)��:Ñ*×ïÜ>ù‘Wo8hAú¹¿î¨¦z¤*3Zíɰ^7kÙ:Œ�Òákï—`À>€’?ôQWÖ…œ“góŒ…0ÆÖÙ4F/5 ‰m<·˜µ¡;ÃÝ«C=-kÁL{)\„“h¨oûÖKpÔU—¾íjÉ�‘n6ðòÀ¦óÓh^Kš‘åÆ)8Rå­Í•å´&@°±šo(~?wÔÖ½œ©¶Í1�žðµcY1ë ZJŽÃ©ÇwõŒ:s4hk;ii;TÄ&Ÿ–Ž4_f¬ÈSýfÅ�5¥|ν6¡9j·~2¢¢=ÅuÖ!Ý)ó“¸Q¿ÂŠâ£µÚŒ˜+V>�¼íù±ó=ßžK‚¼F%}Í�Ý©B¹8�a„$Du #>=õ^£h(DV�hW ¢4^]œ*³ÞLÒËW÷²™\ÿÏá‰|¤ˆ™ùSðiŸñn‘¥5I>Æè{즎ã¯ÂÇt,¿|aþÚc¯½ùòÜðPÙa8+¦û“Ø£ùÀx¥ÎA¢.£É}rY¡D÷p¶¦;]™cŸÒ}¸”)æ%âU¦§Ë‰ù²@¨$·ÑbSq”÷TbË Ù©‹À $‹¦s[ø/Ø ™‘ôQ°ƒg6AǶ÷¥Ar)æ4ê"ŸI!oÓ¤ÓÍÌYØî�…)%¼ØÑÆ)’ôëDnˆ@!rÚ¯Õ|{¾«³Ÿ³PÜ¡Æó¶çjˆeëÎòÂ.bOVCVÄžbêRt©&² šð¶DYÄp2lðù™‰fTUÝŒèÍ»¢én¾Ê&ô6þ99‘PùóøPt2öÃ^ÁRÇØd<˜¯óšÑ§|ù+Ò�ß�ÈSI«*u“| r ‡Õ|×"gpåܦ1t‹ÌLcúuôéùe¢³mdºÈŽVOl�àí†é^¹¸wrMg?u5f�ÁU#�&³€Í¥¡EµÊk”5Üu¶bëæËyG#7ƒó‹ÈÄ/ÓØ·&,˜°–SAÁé@Ý6¿OB 3Ö$»6.~F1ï…F"ê õ=„%ÚĪGIFz4°I B¤dân™QEÇ;BN¿µðcú“™©É~„Þ÷\—sø“)'<ž7òû{óæ—‡Õ‰ƒ“Ò¥CÜQ¢Á`¿Ñì÷¼Qÿ,™éÆ‹¹ÀpOÓÌL ²Xâ©ù p¨É,Ä5añMûŒÊØ&Wæ³AÂŽù¹…8t8ž�‰ÇØÕV¥m'ãz´µ]X‹ßéyt²TŸNÄÓ -ë-è�üeRþ#޵‚°[ tÒ謋29€ÅÚ3&éL » Ĥ‰VøìæóÉ>MzI“I‘Gü×AÙžc3JÁÏ£FÝGu„i�âÙÓKkò�ó@{ŸÝ/Ä ÁzøHdkÑÕuê|±npç<�øÉ)�¥—Êä¿É,Ûu-.�äò <×ðªƒR¢|;(±'¹8R13]»Ï„ÏzòãöN[2‡K' ›–ò…pòï!½C+A¤B™•¸åàïy—ÉFXEâ˜�·H‚‡HÍê&:#c«Ä =PµtÙ–…u AkÓžJ0óþ¤ã òUqHqYõgà•ЋÌÁmx\¯Zâ ÷ä£÷®éUÓ©vKèß Vñòè!¡¢ÄDv1è!úkxýÙ1ŒÏÀGȧ]>ÇÜÚ3O^yHæ2T­5ÕMY¾§¯[è33zÅÁºéÚ7Û,…4¢w`©N÷«fcÍ$ä;¾ ¶ B­ža{s'0 Ç…tr¯—ùuV"¨OÍ.вÂFy™b@šgü�ì€Òfˆ4Ðß—8_ÙÁ¯ÜvÕ {©4�#`rÞº¨%,K@ L‹þÂ…¹ãñôîmèl)¹E›7ÖõDwöŽÉƒR·9çJµsn!›1xP\â¶!SÝÂuÖxÎ�Ôì¯Q@qB\vÏBx–ÃØküø_Á€oãñ(@¦“‹ÉR»iÐhIv ˆìmP ž²="Xª –¨µyóµ™1Ä"¿2V“jÊk/Á[ßÖyñ)!ÞÔ¸PmÔøÔŽW,Û Æ«§r‚Ò?× ºøÁ@–ógðg蓪hŸ�/ÀWH8ÿ·¾üÙcoÞxQ–j ÷“Ÿ[øÒ>ö•£o¼´óÐpJ@ï°¶ñPñDŸ�¾Ø59¨³Œ”3Ó�0¹;Ð •óÃDä Æ9©Õ1ÒúfßEÖ¨£™_Ǫó%ÃxüôK_Ã¥ú: ßBC0'É#(¤—4¡Œ9�Ë:�af5†öbX„ÿ1´^�½Àú‡ÿáä· Ìqjáÿ–Æ�BÏX! ´:¨ÙÆÇJM¾”ówüùÙôd+?Õg#^#D:C:äî“Ì)hµhjöþ!"[Á){îºæšKý•Ó^ÂÎÓÆÙ:{yD>Á®ò W�e³®ú˜ç‰çæÃ¤ŠwVq‘·ï3ij‡a`>B|ÇR]j*ªSp¾"kZò·K޲X·!õBÜ�R¼ÌÞìëiþ\3†1 9Âi�ù*¸ŠË Ÿ{™êñà,h�Á#¸‡µk�dHÿ˜üÛUƒy§¼2û=*PÙuž·H^_æè£®“*�’Œå VØï{Æ›¥­1†|‚ÉütEpêoŽî¾ãêÁ"`>R+ó¤—ýbn9@~žø"=øVÚkiÂ!ì^ßÊ59wæŠËùqƂŠÐþéO£ý 8_‚_À´²»hžøù£_ë�­L¬Ì¬ä¿\þj¹fþs{'­¯ìû…_,”Žl~½¾±:Þ^^˜œ¾þ1dŽÖÈYï õУ3”Ãüe˜Æê ÓX™|”²¾¦eß|P¡E€°ß7ò‹¥,Í=Aç qùˉ‘9úছg;°n+VluÚ¶±Œ_�Hš=ã8µûž¢ñ±– r©îáÑóM¿8Ù½ÅrÆ•V+_cõ(gJQtx‰SŒ$êÌ©N9Æú‡OO�þø$QúŠäŠ’f  ùA[1 jzØVC [3d ú¥F¨²Bº÷ ýI阅lÏ(Öô8?šš&øZ>ÊD*Í,³Xʉb¥V�¨Þhëä²FÆ™³¤ª’!~+ƒÆIqp~üè3¾�?¥¥«Eµrm¬&ÒB+0lõÀTÿO±©Oîý”mC3*Âät°Ãáä¦+ϲ9ÛøÏ§ÐQñ�oçà\Âàe“ î”ù˜¾Ÿå²îHBó=«+WÁ�ÿ3¼.Z"©~öNî–j7´d'«;Š•éçeO½Ãê½ËèÏ騸ƒrÖ©L®¸õ¦d“Ô,0ÏQ`P‘w×vŠ¤Ýƒ†ç¹çMî*­.—Ñ6\uÕ=óŸÚ[SþðA¢‰x8ׯ}ÀÅ�ÒÊ=FÞÊÑàšœ‰ɾC#¹ÑJ“>èmp²“—)=´�Óp“vàÜu65yó¡›û×.ŸÏt´æFwˆÀ”ć8Ѧ~ucÐ×�ÉI.y°w—cB–&�:_ú"�˜7•a»j[¹®4òÓ­9¾_Ýv� /rés¦§£õk¾ŽâPNÅâ¯ÓDú™ a_ Œ3Ðò�'¿Gž ×…×CѪÒu+Ü2\_å¬W 6c9£ËGM.t©\ZžÁñÛ!›}Á„•3�˜÷bD)§t®Ó)�#Ö“²ná®æuxŒÖ*¹ÈÖ–ÝKiõz{nº¿Vè_O€_÷G¬×h_Ÿ^¬Ñ¾¼›ôM> a_®é·CÍ|3”‚ì_õ#ü<»™?ÅòVϲÔ%~RÌ:ƪœ4,c_|R¯XCŸ Ë'1 ¾8GB²¥ U=�Ïï“÷¦ž-@d›4ü픞+¹[àÂGò<.&N�°‹c½·ÐÀrÑö,dW*¶ÇÉ÷Å:.å\N’bd¨ ÑüGZãÃY\9d¡µ|kcjYœíÕ›ë+íîÒüôüˆòjT?CÙ äP)òƒ#ßtÜYØÃó§}8®Ú|ß ×Å##÷@¹¯)ËËf̶ñÍ�…²—b¬Ÿõbö�À¸mÇ\ƒù('jV¢k ¹åìg… `€È$|ÇÖ#_§èf0Bë·ÿ3¡Ga ÔS%�ê_Oëâ#®Óiúå(´Š|鸭-N…’.5©¹�'A4ˆœÔÑ™ÿ÷"Reò®ÓËð1ø4!èN˜n9i&qrôÄÞÙs«ˆ¸oYTÑ,Ê@3³Ñ—»§YHwtôÂèðÍáA6‡ ùp”êPƒ>7èm¼’` ÏÞ.é½]ÿ¢¥? ̇¹U1:0nHçR$?¡g~(yî(ö FùŒÅàEú8…œ¿áwÒÁÌ(¦æ;5¨´9åLŒ x³æÚ¡ä*ùš`Väq»ø¾éÒP�|¤±rF.�lAÞ㎇9ÕFšX7\ŒQë ¨òм^i&bЄÞ] �c…ˆŸs.©8uq¹7Ú´SÖ %ÀJ5áx1zç\,Yêåñºý¹ùÿ¼ 7எ-ÙþÚy1Rï�ÌàêRîmP>î³ûƒ9\£y¸¡Þa£ïˆèÌæú a3Z¦m\ðÇd®`��#Oç±W„�(¯/7ÙRÖÓ6 sÇôy rFVe]&aF®óšhq_´ÆÃgÜ)¼Ki*.½2Ú0‡�NgÞ¡‹(0R¬+®\a•ØAÒa¬×s¢Ðžßê?¥•µ ´˜Ç°í[ÒvêKðhƒ7.˹H‡¥‹Ë'c_wòþ‰F·K°µÍTÿ¶ñòõS„o;ý¾ù‘ÕÛÄݱ8²rdá½…�9Ò@q7£mZ9–vºÉϱ�ˆflíö¶ˆrvDÝ<Ì¥±´…árÖœncÇÓ¼ñ²§>ÍÛã’#°²ÃS¾áèLÖ,àæ£U„]AC£f§xX¹ÂL®Þ庥׬hCÜžjwŒõ\MÔ²¼ÉF°�FÁ(O,œÒsèˆ08GΞ#­üR}Œk`zÕŽM“d£6Œ#y+r×Z�ý§ðÇúN*ê³ÿ+¨�µ¢Áø©þETýéÐ#ü8#ǯâS8¦0‚»‡™.|’«\—�ÛTÒJÞxÅø$¼Y‘§´#óŒÅb˜ÍMy©”™÷è>?jcïçSiÆß <w(–o•k<¼}§~ôÜÑþ¤„Á¼›lºèþ»¼·¾ÁëJOgøâ”v¬¯Ÿ°›®.š]üú ŽIw\˜qJV “²j¡eÓHǧø,+(�f1¬¨�KdÓ̰wš9ê3ßõŠ0chy5Cž/n±®Í-Kò©—: ºßÕ�Œî°n…ø%Êj¡ÁDÿ õr£~ÉQ�`œ:uÒKqfµ\½éLm�1ùÖU8•TJ¢=Þx�£Õ#¡nVÝýSÝŸºA• w)7›ëˆÅ9/šéög†vG' s_|{�RF>-�Üø§ ¾;´ë÷‘u>—ý^'` âå“0Kîážk¼§]ùD�ñ|î]Ê âÛCŸ¼¬IÜbVÈs˜…–Útž‹zÒÛ"yÒ%}‰‹“)KhÊñ}´�ãú&.p:|¦kØÇ�_È”)l&4¦¼éLKw¨ø<ßÁ$MüäÑ ³ûyô9ü‘ŠãÓTa4Eüâ€*$PwÕÂï&@¤¹†»Vc-ôí3žzæ>ºòn6‰1E»rLxž“7 ßõ‚®!�Ä]»z‡ds9ƒäÿ@«®„VDü¼‡Oxž¢ –+·6oá›ê䫯L× îÜ^í=roëÆ jyóè‘Y¦žz`¸Î(<<á(9tƒÆ!ÕNoË ½‹§àǸŸ1 ¬Âǽ7­ òãд�Å{U¦Ä“~ÂÎBB—èEMK Ë•Èù­âÂ[jMÃ�³PqÕ,¤F¹j¼Gã.ÂÌé…›�yå±PÑ%Ö¾�Kf:Tý^§å9F½Uoõ'^¯pi¬¾˜¨§èªü¸€6j¶ºd5ó´Ê½Wǚͱ ý®¾!ãøp_ƒ?‘+‹©IË{ìÈñ'Ž?g<8£à`E©6uøºÈ‘þÎAÓÔ0˜•¥ÙÊê„{üà¢vôhì^YG/ìëÂïRèÌ (úœºû­bjžZø�!¡ö+3 ÒÄ=ŽAx��xLYPæåã9ÛãÞX¨´T8BócHsñò’åÞÕW°i=iq9’é]ÏŒMa™]‡îþ!Ý妞¿ŒŒ�KÖ <²Y)½&b• Yë•–ºŒ5‹ÂùÔ¯˜Ò`'~›Ròyx5(5§a¢:®UN?Bû}Ñä\‚ÇuÝkÒ«D1Ý¡[g2FkZà�ŽäƒKÝá�ThþŒ?C ½õ"<¯P†úÈS'î(ð¦¢)cqÚtŸ¼{t÷±N¾ðÊu³?<ý ëÙËJ~@We{šUg�ïî`X‡3ɃÎÀÛ4lêkX Àå�†žEI"Ü2ËQoÄøø6B¶¸ã΄¹ô‘n<â2�ê$ì"ºÌlî)ƒ¨¡ðR#Ò1DuX¶<ŽP ’lcî4®Ù¥wmr�¯y"  Fâ’�§ÞDfc8Ûºo•<×7Z1Á×uîoIÓJ¥H7\^6x±äíF!´éK4��fŠ ûcø^–‡·éÐí5¸ �·Hõ:qnæúàÒÍ�Ëç'§ke'H Qá#/=ò˜õüð/(HÿcQé[Ô¶÷ Öhjç ÝA§â›BELÛ«{v–ƒ<ûyGn!³”ÓÏÆÙœ§À¥‚\™Wiê¤ †§P%-9ä\I7 p¿UK³ŸÍë9­Pðs˜IŽã at¸S¹âÉ‹\…øéâûúâf)yIûì)-’ŵÔcîçÈŽ Ú3üäŠ#¢“~ˆÈ‰DµˆhX«–sL½m ÝžÞ‚9I£(ùц%õ· š(1ªVéqhå 0ò”@Ô}»4u.Àð²»ÊnЧc2š\ž=:kÌ Ÿ¹ûÔsÏ¿pÓ­²§ÃÓÑz›áº«îð�iÒX6›UÒq‰d4\dp¨ƒfHg7KÚŸÇ. ¦;×"¥I~¬#Y á½…N=_€¶PrétYGû…D_ÁæŽ7€çb%©“È(­‹Ë>‰O9ƾST†áù£¸@r ¿|Š>ÞñˆVMëžÍ‹Ê#±Aƒ%¹²/úøs,“IÓ¦»SM8æÐ­º�bPAÕ<O’Zb5tè9Æ)ÓR¬¶®D¶â§ç¬Œ¤r·Ü¿…à ‹r±Ý'hµÌœZ<"Ξ–Óyéú×oº­bËÌäÌ´Ž$̤ëëé3IÈ@a¤Çÿ˜¤³Ó-¬ƒíèö-<–^{ ÐzÙ Ÿ‘¤·Þª�¥ÔÛ‰I��…çxãׂg{Âô"dô!’¶£Ü64l>Kši�—M ˜èB|k*Ž1}—®Üâ±õi7a3NÐvLKQuâôZŒ# UHGgsgg¥”bÒùžíL¢ƒ BêÖ¹lÇ×ò4†t×â>Û6¤ ó�•ÛÈüXLãÖ…q‰BFÈszÀ?Ïʳ%SêäÂlÚ�-T>h¢aŒsŒFQ4g¶Á£H˜ÝPõC� 8ÏÂKðQôX­ÝñSOœ{øÒÃÍ7^Û4žyòô¾ý¡_IÞì­½¾ðV§Õ±Gç:< ¯~0u˜NöÌn¿Tñ@È ÎÑ®7g8xNóªÞ—|{)•1�HŽÑU¶´ãIšÞêi'�^!Ï®ÄG-„Ò¿ÆÎ8뮪AN´N3,êxy6U^§Bf‰5Y?£“ËAÝ’ÓðÉ)»à7k� ȺXŸ1õ®–Ö–¡‡AHŸè–�fÓ[¹Ÿm-{Yqó’u8’ÈÚ2­ö™HLl*=|°«3³+ŽŒ÷ŒœJ]²(%�FgšAM%à£/𡍳ñ<Œ7†\ª%NËð|œvÈœð˹òÞÎ…§ B s/½zäØÓgÎ?ùúÅ×?ö˜=RWz`•;®L>R1ÊŠL£€?=áîKG÷a ¯/§_—Ë�]€h±MÖ"?Va“Œîú¥i‚OeSu`³¤ÅŽ®n ¤Ñ€7Ø,„–žµ;éåá4TúÊhE7è¸pÁ&ž˜e›bO+axŽax9 ÷õ=ŸƄRçXÝŽ�ÐäʸJ÷JRK²á¬d,ÀÓbê!lÖ`bý¾<·EÝ4­¿ŽÎ!Æe"ÅnÛøé+]19¯,£Õ5aòç-ewg v»7±¾Fˆë™—œ]Û‘ö�ÅÜTuêµW^{ú¥?ûá~¼×Uíëzýòç ÷9Ôꄈöu}1D¹#›7,šÉ݃‹½*Ö+Œ®$£Ê½åæ�8xnwZLÛ¹ê•~qïè¹£½£ 'Î.¬»S“ÒÚ=yfÿüÆÕyé#—­!0³\1´d ~îD¿k ßuÀ;tö0¢ªô`KFÛŸÒÁµäý®;§�s¥S`¼náÃ�AÝÀ‹Eedæ$À7¨q"›¾ 4šÿVØ”Û&ÿãÇxžíÃ8îÉ„' 6žŠ lÞ*’ c$Éßv¬Ÿ½ïÛ“ÚÓ¬rx×rV¤8ú1÷¤²éî5á÷h–ua B»fú>÷ÉýV±êzÔ�‡JAâ"µöÒ÷ê ä�\œ*ˆnÏ“z8sÕ¼¨ÕÜÙ4ü¿Æ¹Ÿ‚ÏQ'ô½ÛÏ|âù7®�zäÔÑS6Ô·­OýôãOß:âÔ®ß,äBoëgÆ6Q¤8Òwý„mÚËréƒ÷úe¯(Xw³.‰ƒxÔhÜúÁ©ŸIëC¹!�#úók\Ò“ª±m4 ¶dÙ�m†D{ ™x¬†'qcbÕ_žgkÍÔŽlyŠÄGzÄ �ëÓ„|à>XÇŠxº/$Z`ÅlÊ4á¡ÄĉIŠ®—`Ü’³¿xÚ¬åµ?ßÃï’ÓÝäèúöU‹¹¸ NÀ(ÉX ñw„oQÙA‘fQÒÛµÁŠb{Ç´UÙs&ÇÁ~¯�Øœô `Ցᣱég£r u%0#åé;ôž„B!ìïâ_i-:Ýц»ˆ^­ÕÎ>séqc¢iºŸú驹Wž}ëäúɧŸØ¿xï3—?ós7½>Çïý„ÕNõèÌAºdЮ>¼Çí3t3ùû§)Ûÿ!Í×ߣ“öUƒË¤í©k7[&×OZÖ’²”h,„¬r¨¹]}5ÐÓiÏ+À.áœ5”sr�H„`+@ÓÇ#á³ ŒßMuÆ5ÔW}ù,£ ¦VžALƒ¹‘7‰F®ä󛎱y|ù»:°wqÍ9]ÂÞŽt*Ù—â0·®Ëž¹X# †ÇGÐ*ÜÈú©ÀBDaºŸt�,ËgH,OuZ�gXIM²Lÿ¼ŽoâËŠÕ¿ˆN\g<A9"«‰rߣN7JZ{ÿ î眮�> /#þþ)øuò–æ”?ub»·ýúÃ×þÌ'>óKÖÜ´å=}rã‘�|ôÚKoþÔs¿þùÏ~õ³Û=”sLGRýèõ`ä�—ÕO*fƒ6Ïø‰#Ò�ž°?ˆo491Àúôº!ÞŸKú·œ:y$ƒV#ûìÑiDŽÎZ‰ %Çœþ:¹bxb·i oHzÐüóªy‡‘²Wg·ZÔçŸÃ“e<ä(=ŽÀ 3†¿äŠì‘*n~ëF m¤ERe×½"»˜ö oME1 L.²éú‚§®¼‡TWÐE´”ƒ˜DÑ,nå˜K!�ø]‘¡HSë­¼èA D—À¢’|—~VZ‚1 _�ôTtÙg[ÝãCc|¸` É8’�¤ .‚þøkˆö‡_ÎFLØœBÎìÜl�'3äøu7úúúÁMªU˜à/òÕ%Ë[Xf‡“œÈÁ ’œ©I0tÜÚ�¾I£ðÑ žõJìhQ6-Ä¥rxTëîAOÂêÌêivzfÌu]ô¡×]ã©•›Áxí¾­×«¡ÙåœFùž"`2Q­)Áñ0„õv ’æØÂð÷M˜­ŒeÓH~ÿNw•ÑÔêê=Iª­®›ËÚ+Í‘‚‚fýC+á.CÛ£døW rðaŒ}„Hm+›a±9Vnͱ‰‰ÔˆB9¾mÄÚm‹�…¹è{ºõQ²uBU"õŽ <5ÒåÐÓVqv¢á Ÿ‹+­P„3“»Í<Û8åb¿c²zº¥^š¯zúÄ=ïJošt’:�MS©gìe±Wް½“»‹î7z𖽤Ÿ£½˜°ÿäIßÕv(±Di$}‚‘*gû©‹,¿èÓ R‰£>R•¶JK‹P4TjÍ=~º–gn^ÖfŒÐ¡�=ˆ£¡Ý×ólêEdxÄ7Îçf>ïè;LÄà!D~‹kÕq—£¬È|{f¥\“+ÛܳN“—ç‚PΣWS/ꋺµDiÜÚ©6wõí_t¯Úû¯æa wþ<ÒµWµæ`mÙ¹èb´yytÿ“¬Ã°VÜOaö µ‡ˆO7ÃtÝ!< ó�lå?)3®õ„jÑO î*]V@¿Q)¶{l«R«äؽ:ç¾d"8Ud¯;æSGòºQÛ°rQ^+yŽ+…]üè¤}VˆIp€lˆ" )M·2Ïæò~ž*õïÔn(Ì(Ö„åÄdÃdz�|¸Þ eÚiÏ–B>w+´Ð.¬8¨g“BºèYšWÊó‰IÛv}¦bÊ…KCT›%â ‚[¾Ê!´anÁŸ¬ÈÖ:=7 IúzfÔ¿‡w¡‰Gpmð2ò¡�ôµ�ö–í�Naî‘îø�J^o¸ìÍefgö·¢×—掚ôH=¥¿wøû·òi’ {É/ u/¦“ùa¥µÇN޹…žã\Qß´Fi¬Žgz\åJ;ü2—q¤îÙOm5e^ðÀ`l†^Œ~ÇpÍy¸Ù–to‰Q]ñösŠFÌç][ß+é§ZÑ|v²Ãs�ˆgVæÂŸ=íë»3éÈ~€2õVÆÅšil5ê'¼Xß�Yd©_DÿU h0ŸPÈBKÑÛÑCaW§ ùœn­Ø·wª/O �{Hßœý5øUí½Û~›/Ü]Xi�[ž|0;3ª;H•e°ùPóžñ`ÍGIü ©M’stì 3uÈ4Ó�S¥¬éxÌŽÙ&ÔlÓ冀tÙø¯Æ-cౚгZÜ£n��[…´Ãb«Õ·Øf)‘'›]EdJáàÿñÃe)=) ÷K2Ÿã_*ÝÌCcž*¼//VÔ€áņaq˱ê+l¦¤QÍ–³ª3Ö‚û–ž4=§³gŽe#Y5sª®ØÒt^TÚtZf�@CkÓ©é¤ö^=[p”—uG„¾øTùU½‹ßö^Œ$uÚγÓpÞMØû®±ø}¨Ü7 g<ù›ß¡BðDê„�Ô7(]‡ˆ–iÈ} |ü㥼�M™b±[rD.Í×Ò<›5«ù4 $ĈéËЋHdN6XÓü>+B÷ôÑ­äL÷Î[zJËÛˆìpÉÛ6ê�VÇåN£Î¶7@hZ2ö\Õ¶ŠœËܶ“O�A!ÁÒY8Ó­úKŽúoö�ñÒÛèäMôV¹6Æ“½Va´_lÌ{¢87¡›4 X›êèžµlîú&ÜEÿÿ|‚!å¹ñî™GÅÆ*zâùBivª2vöêÙ ƒJdÌ:H‡’v‡yú! ò»ƒ«Â:HÚ—g)b�1ñO‡¦Óçv!ÍšI+¢Ê!†^Çlú9vªnL“Ms"� ] ÍaÁVgc~Ò1·Xð-jíp3g&‡%ôI-šë]‡ÐŸãmÏ#šÑù�¢vBÒ’*‹©b‘7¶«J¸>¢wmKyº‡ ›QÈehë¿¶u‘þ¢/"Éi:ímÚ±ŽÐ9;G5QNŽÔº6�Ÿ‘üóp´ZND©\^:R5튫|šQk?ë�å;ã›O<7`æ½l>8ÝÑýÐ` ²˜¥ù%/ì~Ðb†n!Û—Ñ™àýˆñtKA„δðé2ûSÛœ¦DÑ€Äèv™OÀœ©0pwc·ä5O}÷½˜ ÙJ‹�":ÀŽyHÁrvhåiˆ‘{ Ýí‡J¢ý%�H¢Þæÿbºoãaĸæ–ÙtgZ´ª¢#ë–ØŒêßÔÐËæŒÈÇé×?¨À-Æ.º)»j6UŠZDøò®›ý-ö»eÏ1è9ê«ßÆ÷8j<þd‘“Ù…u‘ ^ý0|´"&Ÿ¥7–ŸÔ'PÂŒžDÿžVx‘™Vtž´ÇGD_ßE)Ã~6ÊLúo2K3¦·h™p¿(Ò¿Àt0ÿx˜Vœ­ w8Ó+RGD íãH‡DºµíÓ2Oº#µº7†oÝIž ¦–¢ND¡¡½@S�>ñº»èã=�™ãq•t4 (§,•ÃÈ(éâ,Ÿ5HbÐ�W<ˆW}}GldɱYÇb {;9�¾DŒñ¼ÇýI¡MDÛÛp*»é™c…¯nlï��oV-ïàŸþAÍ$Ji¦ÑC¯Ô;�Œÿ~䊮qþëªî£ßÏ3šQTd`zy ðÇh^¼ºúT$HìO£NðXŠ|ÇRSH…¦«¦ˆHKÓ]€…wá³i¡?]tUÎÑw$Aøq�½3aúÿcìM€$ÍŽó°|ïýÿ{ÿ}×ÿ×ÑuôUÕçô5Ý5÷ôÜ÷}íföÞ™=‹]`A‹ƒ$(Rd�0 ƒ E…dI¦eY´.†B …(ËH,°XÙR„%Sfˆ¦¨ÃÖáәﯪ®žÞž�飺ºú™_f~ùe9 úO!À†ÌäÿƒMãžèÒAœdìfj’� é Î$�¤ËˆÁîP­ìðñÞÍÞÒÅ£é sï‰3·î,é^ê\¯fÕcç¬+ö éË]¾·ÿÁÖ‡•Ÿ’޵óÈA>dÈá¢@ëóÕe&LÐ?®E¹0½Œ]Íaȱêñè~ßÙ&b…‚6H´qaƒ¡Z5H7+:¨›®Gà ™1 ?Þ†ö»6•V¢XKËZ6Õ±ŽiÜs,Ìm� UÑÙ†MJXF�üEü-ñµÓ41v žt©ß< Ù;Ì=óíb Înâ’龪“rf_Ñyâ¹Íœ^8ÍyÑh¶ãógÎOÏÎëî¦ò÷ðc‡«ò_H»�çˆ78H¾Ï®›hÝ©n€Ûpà�6{tËcø¾­WØ#8€vý ˜; _­T£¬^,°½^�äÐ^ñpžq�oþ–‡HÀÑz[œ]�<&ñ­¹½xGS¼!mÈ´D8-Ô¼arÃ#,*[ ¾hœ¦z.ã)ãëZ©HêRÿþ-ü†V=ˆÇëyÏcÝèPó�XÝÚ»ï@ïÀáÞìÔñ©Ö”5ÌÈôGµˆB¯ÐÀ�Žäès=}‚ÔðÈÐiÉU±£Lðw›è¡óÊAwCƒ:Z˜es C¿M¯ÿÜ6ŸÔÍ«b´ìyö2BÐçpÍ^‡ÞRŠ7¦ójÇ6<‰ö7h:º„ùYCDà ãòZ‹$3™Ç�:zº0Ñ 18¤ýŸºàu4'ln&»à0ùܪ%™¿UÃ'êÞ÷0¦_Ó³}žÇ]Ý®Ÿ[ZY›^Ë:ÍZsïÍ'®®ûC½îjQ¹]< ÇOž=xééç_|ødY¹‘½QDP.ö®ÈoD�õ!í²øÔmSVôÕV¹!;ƒPÇoúJBSäí^ÂÖ›@ܾϘv½�›adíÈ5}óÕ4ªŽo$YÄs°�¦ÄÛÜð§Õ$z‰%øKïÚLD C<ö/ ³d»Ž±÷ ôö}š2�˜€Yêƒê‰.$9“:ÝØðS?§<­0<¢@ÔS®ÕÎH´€®äØ¡HÖ`ûCŒ&4±€Ë5…^ÔSbîp//?Qó»°1Ä 8 —ˆ³dl?À÷oí{šÇÎ,]ÊŽž:qÞöy>´ †qŒeótð5’Ü5�–¡Xù Doùç9»š† |rœ†r¡/Â…»x˜8\žœ<Íw"ÃeWlÑI摹÷Ë=½‚ˆ¢j/ì=Õ‡-v�ÿÖ»9×g<¤>™ÊK&a2O±ˆv“ªcøõ°Î²0êà"±3sŠ´'Iþ -OW£ƒË1q RÞ׺Êßмˆ–^ŸûƒJ{w{úÈæ‹›/oN˜~~ú¡ŒóúDËÅõ:¸êîÓwï}áÁK; Ÿ� ÆÜƈf÷8Me~ôF9î]nýDdpUö¿E’•”œõÑ£&‡¶OœZ6XJ}·îïŒú ÎôÈ T hÐ0ãvPÀgìð*Uš@%)l^e$ÑÒ¦Yµ·ÁDuYêœ ÌûNqüþ¹ý]G÷¡pÓ’º‹9ͳPOe«'/›@‹šÄ5»°¥ØgÚM±v‚¬g|šÛu˜ìÑ�”zŽâ†o#(ºOÀ=q÷^´÷þÞ篬ÊÁ¼©bLðG§ÇtõjGd`|¨ç ºø@Sî3ªúeÆdtŸŸL±2Ný*]³|RÔ𗜰>塌òMŒ†¦#j�â&ßçq~ŠzþHz �V\›�Ôny›gpÁ?SÇ TÖÚ qH¥‚ÐþvÀ,ö7áNӿϱiÞ¾õºƒ«eQ Z…©á+MrÓð›Î�¼A¸ÚàSµšË¹“Ey`âw¨=S{p]W!{Ýk+Эä³Zõíš'0‹:všlY™å‰Ç2–;µ¾±Aà;ÁüG«\sºÎx9{¦yBçD"¸ãð…“üxç¼#_‚¹ ?ˆÐøçï)MÞík§yã»`þ |MÁW¯Ïñ�+Ú…¦£ßÌ<­,Fçà#Œ›ÓºX7éü/ͯâöìöáåµÇòÚÃŒg16i(·C3¦‡µLl ô³Tù%® ‹û)‰¾bds*Ì-GX™³qûðìþãplµbÕbò¹SNž5êp9» ¬Æš,7ºŸ¶Í›‹ ·Íæ"[~¶‘Ö‰ChåÓÿØ2˜"eðca •ZMÁE6º¡¨tkùtUtcÈ’pñR�t:’˜‘MbbrŸÎAø‚ÍL´'¤ã$.cn#ÍHû]­6‰m?Úè�zXÄdkÐE!Xúy|¬{1H8—3¦FYæê“&þíå6(4omT5ÙÌs269i¡ é�ƒÉcÒÎ8„î¤îßÙ8qØ]ë{×ì;rèøöâIg¾ëÕ½h€ó‡À|h›Ëx©—T,P„ëwOú÷ïùeO%nÁŠžkž…ýú�*�¯Á˱qöÍžqÍWñ…–â¯oÏ¡“_?µ[§ÖË¿ã(nnÖ$ÐîP_æ*ÍwH7Á»¬X·$2ªºo\ƒ¿��:–jfR‹ÞÈzQ†ñߣ¯§Êåq´ñÙv û6-ÏÊ[Žl_ëRñgO$?y/Á‹/Es‚·oEP©½ç¸óÄ4‡aØAJ@ö§Lþù^SìÑÓÈWË!g+hÕ?ÇØT”°çîkdÒ›6U U?ãóq§î€?ߤUâ–Ì ôõY¹J¨pà눷µ±²qîôÕKr¼Ó­Øe´w“Ý…5�VÚM?ü³·ÐÕÒŠ›ÂLJ‘±{®º<™³/¹Ö�½g`Ü£=[ÛuC„;™ýi›-õ3wf†¯lÓJ¡¦›‡H£Ë@wW3s2“Fz¼UÎF;Rf ÊÞ�ÿCgô:ˆ›Ií‰ .ž¢ûמ½vâšì4¥sëîSÏWåk} ·Ðf�õWuÌÕÙƒý&š„Fß·1g¡[×—4ÁMŸÌÀ ”•I‹¤¾],Ζkgœ=µtêÄö‘ƒt‡åc ý±cùØÝÝSRÛéfÙ¥–6‚¯c„‰õª¦û^†«°”KM`9Tƒˆ Ñqj¶9÷°®û!{D˜KKqIÇW]ù<횆¶y`»B¿;³*‘¨<¨2@ šÏ¥‰³%ͰêÙ¹ÀÁ[�̯V&ë|c‰å˜æuI'kÊ1�Ÿ”¬A?q�¾¬ÿºRµ‘Ù�ˆ·ÛIDƒek…æ!ü®ÖwJÑ{Ö¼“Ég6²ÉŒomLt¸~å•Qwún~`ï�Á²c7~hõ(w0–YYÇ]}ÝÞWI^°±bI=΋bþR&t?´±" GŸNWòJjàúºæâRvÑ5�Ö¸ok‚"™ÛÂò+¶ù¡t1" ­Ò©Â`bXï=EsŽÙÞ’K5¹Øïðå}„^ÞMbîN96ÉãD6.ä;ó9_ÑEú‚8½ bN¢b4‘ÂÚH†‚Y‹‡¦’woªéNEcÞd¡ç”õÎ.œ ˆx©·ÞãËklt&é¬u‡µÄ¢›}Y sG-æÃÞÙï Ð(%ü¶¡/ídny¶I$Ld…4hÞ�¸~ßñ;Q1ˆ¦©•%ºûBŒ1>�…Â�ö·HU�ßé´�€É`2ª®1Aß>« X@ü–RcTòëˆÌ ó�Ž"ïº`¬óÔ¬ô®X,`êâÁq‘É“–uCh´0êYJ‚dÈZoF&Ú�‡ñ›¶SÛ�+¶º¬Ÿ­—²‹~…]„S~Á?iФÌR žuÌ~9ž?^9XÑêjµ)Þûzˆ‘Ší]x ~â{6ÍÆËAlºuˆˆ¦Ç4šì°ÉŸ ‡àœrô4�ÃP ˆÚ#›¹˜ž Îi%jeÝý_ê,o¿ÔÉ@Ÿ8טÏ=ýÜÁ#WúóÒéͶ{·®É€©ùXÈ7–G/ …eæ½LœŒB‘ž®}íÔÃè[Þ J¶Ý ‘Þ¬ŸÁ!w B¼< ÍåS}±Ùh…æŒw-áÓ §M\Ìù¢’ŠR�ˆ-Ó¢ƒ^ÑS“R$¸¡œ (£fžqè]T|Z¯ÙŠNÅíŸW©{Þ²àÑ�Y±|¨”Li¸lr‘fÔ æ™0‹mFþÐä¾25•òêÂÄ2Äf"#t7¡Suøò±rNÕ±ûûø4û4ß³Ì<,tÄÊâŽ~ÃŽ÷+1çÖz(†ÙÉÞ@=`˜�Ù¡�ƒ¸7êÚ Ÿõsx¬0/ J¶ðd®}€Uì~Œ¡X VÜŽ|efZ)ß0½è•š#©M*>Ê�%ŠX“ﻥ*Þ°ÚÕ¸aP’–±æZ,Œ°}÷GCK+Jûg‰@+ŽíYÌNí3aãÊçé¦XŽq«0„Òù_êiMºâÃp±Á=R‹BØ«Þ~âÞ•qv‡Nw÷St=p˜~*gÏéLM>ÐȲ>Æ ±;CûÅ ºiÕ¡ïI¾–¡ó‰<]A}V•Þ1ÔpçØÎy:Mì¡6|FCIÑäP’YõÓ-‰~Cü_ÏL/ ˆDÅ0ÝÒÛu8�¹%×FëÁm©~>�îÖ J?R•Àì›;)Õ¶—ó �ÃxAV³¸è‹=I‹äfLki¢Å-9â8][“Ź)öØ|Ê1_ú…iǘI2‰ÑŒàVø±ª¢)ÆÌ©PÀÔ6Xáâ‚TžZ6™m'šh1îÒð¡ßB„P‰Jª@€[]…½cz™RŒæ-'Ê”ÅI¨Ô%Õh×õ´0¡Ñ;Æ\(©¾GÚ¼foxNh0' –]u7¹0¶Û°I£> ¿˜r"R!KÙÞ9æêòîéHKïñ_ƒ7àSðy�Ú^ß+/É—^{ôÆì5bœm k;%)³¯£iÃ0?/ÊjÏÐÓ¼ßÇîÅàf|à^Œ¢×Çó%´qÿ$ƒ"] îpLJ=Zp¯Ð~ Y�µ’!X“”0tS‹y5k4ºøìé¿Ö4Í�r°_8~@½h}Zˆ¡"Œfa«�’¾¿¾‰ä½�¡–m%ë >uµg(Œõ¼â[¤?Þ¢ÎAæéQ®'%³¡×°9ÑÒ|‹FQœ ºL\‰Ð]W1¾±U:ÞX轆»ç{v‚á]æ¥ljqÕð[—iÇ#=KaÜv,4e2¥XÜ®h:M®·‰LÌ4r+Á¯Ö*åôÝ &-j ðuøEø ¤ƒ3YOpËüȨåS±å}ýç¾þó_¿ü³îŸ¹ñèŠCë3–L§½íŠÇM¹¾ƒj̧ê[º ª� ´íý Û¡C ?î—e¿Ãzp—Kþ¥¶�[ �)¥} 7g}04ÊÒ‚šg¡ÁÒT,˜þ°åBE¬V1Zz"F“4í¹f4�C )Žø§;B4·: ÔBiDBʨ“”5ôµ‚çôÄœ ת‹&k2‘2Nýø)¬à)@0ì×ð‡†êK{ê¤&·˜ -MÞ3)æçšS—™¼©ÄûOÒqĘøb$:iÜmn×٫šHÍ ’næ¸dQÄ-×qh—Š|E`†Jè‘£Ž&â�‰ð2£Í†-Ÿ‚È�ebr•øÍ:ôÖ@…¾é"Fu�ù4³`bv¾xz̘„ Bà<¥†KO6ü÷ð]¸ OjŽò�ß…?¿B>޲3­…?õyS¹W·ýÖã“oJ›;D‹™^w†—ј,‡m)U6ªŽÕòb4z£7Ð�ÑÇbÇ7ÅÕ‡ÞQÛt Êg—ƒh�ýZ†_ªé¾¨Ž›b4Ò'=ì L@®&®cJ£�!µ)ùaa£IÅëêÉ%ô€™mNA5æÌQ³¼@CÁ1ô�úHÕ²ðNÊhÃpÃ�xìÉ:ˆ³ 0Œ wùú.ÅŒÝaF�ã¹'5p™ý2‚e,†9=Úö±jÒ¬Ž#T¹•_E0ÙöiĪ—³?‘¨#ø¡± ðtÕèšd¸.URè£Æš iZ•:4[$Û˜¢â?YH˜òCù¢­|†-&Q(#Ë Ñ1ÌÒ½IJ7Ò £’ûû¿ã.¼�;@éÇà ”ÉèŸcÏ>eÚgOí;´kžÉ.JDQŠ•íâG”-¨eP5¬Ò–˜Þ¥‘3"ô?x·§©±ä“¶Ô®Ž;ªÞˆÔ…Ÿx-·ÿ”_a¡VsòF\TDjáNE¦µ ¶nz^ò4g¶C(ærP°7©'ßB{ù¼#ßBPçp¼maÑ@$k£…bªrÅ6â5 žKI5ØšàܬüÅÂ2ñÒHo‰¯¾5í=šr¤2L?_YèÜi‘©õAg€Æ/¤¡¾¸ÅV# fÏâ™r-f)ü:3I¬$ÖQŸU¥ÅgjóMfJ—Ä­S¿zDOÙÑJgFêoj.‡Ñ0 ÕÇumá¤ÞcRÅ,–ŽÐHªÃ°µîó?‚z‡çS´öάœ¿'ömîkn¬¶§k®¹ÃèôZ—›G-£š‹VÎ(YcùXNaÈÞ(F#`K ú¢$Ú‘µlïw”¡Eùöe¤«¥@<“�”gv 5.Ú“�ÅÎ`£Ç—·'€ Ÿ�¾õ…¦N´ÈÎà5—¾à¯uÁb¤�G¨ *�ý15ÕÅ©=Õ¶¨ O¦1ÃLt 3è BÉV¨V¡²j¶Ñ… Û8q#'í7æU�ó#D}ög³$f:ý¾M‰ýCÄad–$ «ÛŠ=�1é]„JM?‰:.‰É6ĉH'£ ‘àä©D'±­;FOàk墒êYåꌞîDvèào�Ô¨6ÃcòIËÃH\hgÐ'ÿ>ü;ø¬ÓÚ£ã™L'Äú”åušAÒ¨fU¹+zýÿ;îãí†FØpÐËàC°Œ^ð œ 3öO<óô}y§uÞ É�*\ É~‹ø´†¹G_åcz„Þ©¡zê)ºÉÇ`¡Á×.èQv§ú Êy¬¿ €¯äü-¶è÷X^Ø\Is19;¹4¿ºgïz±•ŒeÇØ³ƒ.ŒazkHg½_AÓFQnWuöp8Ò�l/F.¤®ð'˜i|1¤+pý8¿~NпߢI?6ÿ˸¨"A®ŽÃîÁ‘3¯å/y„‰tað� {õÛ0ÇþŸàÛp@³¤Î"û‰ƒçOq~ˆß>}òÜÙÍ é°[I7÷õóêuU¾#¸±»DSæ“ókvs¥¨b¬äµ‘|Äe<Òº“º=`�‹ömˆ%‡Sõ$ ´ü s£M¶ä{|j Îήã?¶,ñ7:݇þé Ø14œ4©â‘ZŽûmкèiH^­i*šh Ƭ­ÅLZº—}*Œ…i·â+™I˜E$¥rhâåhÚøç*úk­Ç{ÚÒÍtÉýÚïïÁ�#„øûoPŸÜ³O¾ððÜÓ[¶ö›Çïæ©—ž{þ•/è¼öÆë–=`.h ¨gÛ¨UºÄ7;6}l˜ÅÀéá—ù°©²(y¸#&no—ùîõ†}Qª¢sÈæª�]hþg8± !\í¢ZIV‰‘ëié‡Pà©v%‚˜Â¨½àa¸ì©E4L,²a®ê¹èá1qxÝJâŸÄH’© 2üS $z Wv £1„"蛂èøÌ4®úèF8¤EÕ#/)Éš[}Oñ"ÅÎÖ¤5«XDÊ9/žÅm' ß~¾ÖŠ'¸Qت•¼âÂoÂ!|“¤‡('½¬ogOò`Ä6£gÝ>�a%qú§¯ºWo>ó\uýüŸôÆÂ±ñV�¡e/•#GÖ¥<ñ£4h·(S½RGW¯÷N GË~¢BÙ<Á )'-š¶�æ„“öây,e Se>0T¨GŽd×=f6 ¨�fæ”+<\ð­<ã��y�Á޵ܓ’(4Fü>Ów(YÀ1s]—†K…ÜŸ6�B%6§“4šq îqÃÒò&ø³”¾\}>  Ã^4„¼Ý¾½Œ/xxµÖ âÅ÷-&«YíZ@ÒÕúWðÐ6Äè™æÑÞ•“qïPòò‰7¯Ÿ¿}Õ°ýÓN_;}ëøÑ+Go½sôàQ{l�ûe^¹WjÉ „›”p‡ Åb¼(®c®±‚I`ŽFÆY“[A÷c´º ­¯©s°ZºQ¢Z~qq�dãØº .ÕÿÀ’³`„Ÿc†ùJ‹Fó­!þXÇÿ¿à3Gzo÷šüð–GÜæsmQ|÷©"±s–­Éš‡!¦]KÏ*¢ì²ýÚm`u†Ä&I =å‚‘­?ú=ø>âæ²tZg²¢1ÑêLí(˜Œ²(ªÌ––ir¥»óúý¿KÕAIª)“x ÑfÜÏ8|ø (ßþ‘'ð·âò¯I‘C¢ØÌßš<�¹[÷!n7uçÑjý(š¦Iš’;<¿éŽrÏ­î?rüÄ©3ÿ®ÐcôìÁN’mêêÆØ¶ �c%Ã/ò*lQ ô„�¡�ppq[5c&�vŒÍŸ§&{<¯_áÂÑœ(ÁòM4Ij-ÊÑኾëQn¸äö5”I°RçS$8ò‰½u¾pŽ<ø1´wGÞ–�ãÙEWðé›Íh+æA®Ãú>ZŽÃŸØ ¥¾æe=mkߦ¯¯¤EãØ©³ç/^ž±†3m†–CŸÐÁÉÖë3¶{�µçSBsÇÓ•K¿‰××°ŒÆ†ü®ÊCïµ ƒŸQ’?áħ¨æ` íY¶ÚÞŒÕUS·ê¸ÉÏ%ðü%ë:ô{ôG¿½K•v mCCšš&(�ŸZ$¾âàòtÕ˜ÕVLǶd†�ñO07„Z HkœØî–VMûWxn¡g{QWŽÞÆøý³ÄÍ{ôÚ�|ªýFû“ížùÔ‡žÚvŸyáAþú«ï|øãŸ]þÄÜÛ×N¾éŽâÀ1âþØ»y)œ8ÀDjèJÀPšŠbÌ ŽÉì�q�KAkýM”fB{=üÜ— -�KãX{Ôh¤>¥q€Â_2V…®‚Y&|èðÃbž¤¥ña8Ø›�a�d}‰ƒSð#m¼»6 Å5:NæË3UèMUÖ¨Õ†fá§R›Aãy|o/Ævíï{ÄòÓ¢˜‰8 !Zî ç‰õs‰ˆLC9+°%1ŽÚ¬òZT³ƒBJÎWbÄØþ'h4iû&"rª:<•'bëalâ¨X0Õ„ »œrD�ÇaŸ¦~§!q*¥î@úFMOÀ�QÍoïõ×O]×.oîwϽ©m�ÚåæFF›Vy¼ªÓۙҴ÷üa·~·œQ1|â±ÂÑ0ë)ÕNÖ³·õ‹9yAÁ“ìÅå'wiXjé0šìKÜD1�fë®+RÓ7¸´1qè¡QÏ9FG†í¢IyÃhg“–¹†Ð¢å±cϧW Ãŧ5¨M¯ÚÖ3ð`òCKÚà̰òI�XE6â®àš0g¸ø’ÔfbÔú "Óç`EøÆW3Ѓ”ñÿUM�«qC÷ͨÌzdoÏ´ØâÙÜ=øðö^óI TÐ$Uff^Bó|šH"¬"4r ‚(1K–ˆæ þ>ÆS¸n–ŠN°3'Ïì?Ž>µS1+ÃèHStÑ\ Kne6¸OØjç ds ƒ¨ç'ñe]å¤z/ðw6¼ŒÅü/`los Î/±ŠJ1¦t'{|õÊj%й¬Ì/ì<œF?ú®-Àª-?þ-ßöÐf;¥­¡ A<3߸–PqЍˆ¶1R«–ŠÖT'¨Ve+¥°†Bx<ËÇ5ÁšOÿ~/g“$–¼mCèQüã.£ êÈ÷Ærz/5„�f+ìo$Æ_i4HŒF$ù©°Âþ—ÄüT~§éª÷¹ø ÇJl¼Jád990 è$¨Íþ0Ür¾Ù6Y¼:Wæ2ˉ$-8×àãð9Ú£'ßdnÝ ú {Þ~ëîSƒÈoÀäÖ¯NW(ÓÒE®;zd…ž¿N¿™þ¢Úé«Tc¬ÜnioX’/Ë·%WbÐs:\££4iÇTÔôè¦l™1Axµý¡ÙÛk×ÄK{é5§p‚»w:3·®w¯^Z?éìDd£ZÎhOËFä½Þ.]“²­ìB"Ù±TEÉ”î�?{™³î E¿�ãý£Î<¾×O©)�£Õªb$®Vðß�¶î6\s*\\ªP#5ÔÝ ¢N”÷o±&ú�+ ÚBn†=Ûü"|Á¶ÁG];¹’S¸GåÊiü®•˜ié1{S|ê}�Q%ÆBƒ©ØôH8Ñ•hU¯Pêz‡À§vBW¿¿¤rn’‹½�™g2‹ˆ‹Þ¦¿ti|ʨö|Š©6«Ÿ=B‡ NäAÒæszÆùo£wz£ë×UüIâ¬}éÎKÜ)悹þÜÒ�—_;òðÞömkgo¶ÆV¯Ü›q”�µÝùú¨´�'n>NeÑ9=�«(†·h”Âú¯rü,}kŸV“¢±Älþæˆã¸“q3wxëãݪÌL¶é§ì¤0Œª &¬8©<‡Ÿ¹“Lé�24àœ¨ð ×YÝÆ]£±s>©ç…mXqeÒ>O=œtÙloÝd°!�EK›±÷iub©W×±o˜xI¹¬™|¦ç‘ = ÌŸ­¾�'j"ÑŸiõÊKæLt ÒoõH5ŠŸ„G öC”r¿Tßï‘"0îf¯î †v¾”LTði3[Ô}ÎdÍÓhÕý¾žàM¼ºM8Õ #;·ý³·Î^|øêÞµå55>ëä—`LŒ=¦Ø±ë£Á»¿}x òaþ¤Ûy„A�íš�j e.ÛF_­Sªž‹™cU“c('Ü“zί&~ÿÀWŸ¶îÕ,3D›è¿PЈDnØ{‚ ;•š"¤o°¸éJ‰G{ú*ÄÖÑ©pö´›±k�ìVÙå¶›Sv‘Æ�Y‹g¶o€Wña6ã+O~†Ç¦žr‡p3™²æ½Õ$¤œõøçm\dÎ1žÕ÷ÒñMfá ÒGüÃØ¼k@PŸ«4Êï”KôöÉ©’ñõ;ºãvBóïÀ ˆÙ?Ÿ§ïôUöð�ÏýØç?~óš[uÃîFwÁ‚Ç4ÔŽ Û¥Š9Viû!&ǧj”1O鋆žl¼HQŒB¥铯ë6²Eb‚‹“Y3ªé'1¯_Òò¤\ мá3Ž! SI-æM»fIªMûß°\fƒ.„6Ø¢„[¡ÄðØøK¦ò(H)_{_:EPÞ‘úz E�ÎÁ.šØEz£¹'­¡ŸÓ¢(2` B—Æ6çË‘@Ê,{s,ÇÄ€ ^À§ÏFd‡wKŽ�?ê:49SXÖgKÕ ³J ˜„üÄÛ†ø [O½‘’Ø•{ “à ��œ•ã=š„r®VÙ‰W‡ëðiøqøI²�1•;µ2Õ½t|ïñO~öÇŸ~ö'â#Z„:{ÇœV™™#Ð?~[FÃQHhpû[Cðˆ7¦Ø%gú½ñ& ÑÎui²a��–ó]!Û™scØB‡�ÖM�ĆÑþ¥Ý·�ódÆxD�7±¦Þ J÷¦h@ÃBØê¿g1u˜GèЯ2_8Y›Ç:™CZËwàMœLtÙŽƒmó`846¹‚m\D�~çγðì{¤aÏK‘»˜`ŽûèvR.¦÷ (Á¯¯d¨0 °3Ä~ø"uT’"H•´8³I˜x¤ji6Ï"‚y�!œÄ«*(1cFD¸º$,$1¦v3„îmŠ¿Ä€½·ïâe½£Š[,î\;záè‰= V‘ãõŽràYw¸e?$¾êîb——s°óãòj¥òÜÖ›5Ͱ‡°B)-®T”l$‹³:aÔÔÚ ªMç?\=©,ó•S-šæ`ºáIšÂm±ëa¯fO°Ä>ç[É ìÉðº²9/‹÷lÒ“sPo…4ÿOFå¢Únè{¸ˆÙŒ)úóÞ›¢j!lyn`ƒ]¸µÉàÙš€°®ÐÏU×a;0ò½m:òˆâªý>ü&âkê¾R¿º¸‰_£@µ;ˆ?ÇbÔ¡*Ø8;`4“¡œðÓïêêóVù~oÀ è•@{碔ßû-šãé„ÜŒç\Z×k/¼ˆfòÅ�Ï É™O=_˜†8L†�&,rØ(8M³~eªº§®ÃÑlGs5“}æuÛH'[0f^Ùïº>7’¥ßLH¢�@®aÓ?¶�@ìÛ$4«,Uø2´øøcΤ DŒÎ9®w s³„j]ˆÈ˜Óc¸þ†÷'}³WE1�¡Íd•øåè—Ëšç� ù"ùd 2ß:~QüÈGMû͇nmÀ_g–QeoPµéŽÇð¹uôŽ©U<67T”Ë ¤»#]½ËÈ”çX §û�…©«£AØrëì.ènq<'"­®ºçÌr…Û'¯*�ñ>~"abyúu=A†7Uà As&`� �š¢>K}.ñ\U·©ž•§çyÅ3˜»'¤”·æ¨XºÓ >ÿÊjäùëN¿ï˜x»‰&3¡Ω±ˆÕxŠNY'›TQ@�¶žÔap+Ãõ / 1Xr”±?¦i€îÞ érð#ºwà‚ÄG!˜‰!òš.¼:ÿ }_þ´OT•¸¢R÷ßIñŒ¶ž<ó]Ý»p~þüü}øŸ1ýߨV6H�üWþê¯ü­¿ôþú?øµ¿{âÌ?ü³ÿ⹋ި_QaÇÑRo\»7†´—ïéF¼^¡vrž½!CC�náN±d—�‰bqº‚ƒ«×-†W°«á�ŒÑ!ÑÐ� „² 3ÖÕJ^¥_ëcPEóPTÞ—�g7þ e{ áÁŠ�Bƒ ÛŽ§XdåQ<ÍÛ±«2Á›¯Ø¶.(!È8d§ì~T�oÌÙ¾e³Û¡b޲ifx~ -8ÉÑ¡iws« Œ£q›ùg®·Ü˜íq Œ–i´,Y­«¢cš &ˆ«-›¢¨ÙÞ¹Á`SKs“Î –˜Æ@kÏ$:ÞÀWÒ™¬`ôÝÂs£ª“©˜`Ú;Ñ|Éî4[y°˜FáâwI“™ 2¤±lØU/!ãD¡'¼,ìdŒMÖH<”äs9ÞpŒŸã�ãKªn�¦ùezÖT^DPÖÔ0G z%m|ƒÎ0‘¥kušð0 )Ç6Þ0/´Bt!2Lj ô F v¦TkIÚ‚šy¼p"ûd+p}"áf*ð ÿ_Ë]¥.Ï#ÛÊ I¬»—OkììA´J–Šò>Ï>õ샯ë¼OoàÉ=îÊs>>¸u'ÕøXæq¬D­|¾K¸�»–•ëî¨Åèv±Á¤N«¬,ÜãY6’{›í�u{%ÒšEž�Þ÷Dô 6‘–¡%¯˜’ò ‹…Qc"„”Õl¢Ï–;.óyßç©m>�Ñ•ZÃ0ºáÙ$‰Sò×̾ƤŒF²°ô;Z+Åë¤"NHÀ’)îÏúÒtI¬—TiTÓ§fW“F_ÊV�;ZP?õ¥6^Š>-æ'Z@à“'y#ñLgï³ó¼Ýí<­qÁ—J´¶ÒèáSêú8~KöºA,xéƒîJ¤ydÿ'Ú ðFyïÐü‘íGÎ,6ã�àå��Ô+7GoãÖˆó:âñ•).²š%>È\ù£†,½A6Œªcº…@ ¾ð�:¹ ²ÂmêÂËcäf2ƿڬG}¼0ƒá…lãi5¹†Óá¢+“DZ—s"8*ˆ«QˆwFkgOÔ—CÖ�( Ííz¥â(Qù‘Ó�ÒÙîÆGÌï:Ô`¸h©)vˆÐ±¢wψD ƒu¯Wƒ¶'̦�§ÄoÄ‹Ug#ïâóµ94}E#`ñÖxõ}ŒOHfζL4IŠ4,¹¹H�Zb–d¸¹÷BoÕ¬™V³ü}ę߄u¸€¨é–ÖEpuãÆÆ��OÜ:ñ¤ÜwéÚõ›·/œ}âìɳÃÊ^y1ú¦’ÜY÷©ŸþSIWFïìÒa%�…a¡O�ȇ:�rÒVìÈÀÊ(%!¢Fäåu“-7ˆ5„á¯ÒÍ ýAt�j~ûÉW¢£&Ãaz ü’g®_ÞBç;ª>ɲ֤m'Òo¹ÀPKR�û+¢PÛ¶ÊlDµak�!a´l=ÃMP]`Ä¿×i)]·øÕawÜ߯5_¹öÙ†íB(×Á-ô \aÒJûC´PKèwOêîŠg©Š»urk?_9zâ_Ñ‹ ô¥»×sôN1,ƒÉ¡ v·\¼á“Œ�Òò㼿?¥’¦¬ZfVs-ÁðCe6¦¸Ý®Á)e1êÖ®.*ŘųkéS86¢‹øLŽdU‹N‡SM9Pó]¾|iͼ ÎäÙÍM¡ú;�ë¶§ð8ò429�"5Õ# j„2%º©3mS#“/™D¨y_²|Éöm2ë Ü~“(chžz1±Õ­`xg·»ÕÈÅŒ�“zÆçÔXŸÒz·”EW¿ î3lw2b‡Õø¸Fe VÔ( Ø*#§1×°ãÆÇv•hF�×Á‹­Áç~ºz�!øþ 2 1Ù(¨­@h7:݃ì@'´«u¾tR‡T2©.¡1ÀÍ´à½éLD'a©a»…;†›¢©idNò¯lÊJ67a/Ay“ìh]�²‘h]X™Ê&ê‡tϪ¢d;F[ˆÑœ´²†‡ÀßkÍæF£›7{u~h“P"·¨Ù�Ç�!uåB¨`.±úqê %2Í2¥Izôr»yýbèû&ÅcATLW’¾¡.$òÌÕUŽèZ@+ÿ$< ©&¾º¸u”ŸØ^Ûb¯¿òzŸ�U»zãÑî0;0:¸ù.èS–’~Xˆ¶£š7`åÉ~·¿ƒ¹Õ€Õ§‘£)뽌õSR‚›Á J&›Êª÷lIêÎÒª×ÃBf0<«,hOx„‚ðšá_ËášGQ•e&®ù¤�ón`z¤‚z�fÕ ·Žýcü€ ×áT�Ç3Ÿe=O¾1[f¹y”¤\�1òzÇ8Î�Ç$b¼ú=¿Ü&.w ¤‚Y‘> òö{5Kx�B@¾Ÿ”Ž ¢Z1Qâu‹‚:÷BÜïϺe*ô3‚³q‰4ÍŽÒpŸÒNf¤9ògµFıÕàÝ%Õž÷D“†ËEŠÀ=å]-­ù|~¾_ƒ_$¾Ä±Ž�~ôÕG¿ø³_üôÿÌ—ÿì—­»O=æ§ÿÔOÿ×?ýs?ó£_yçk_·à±üØÀq¨Ý€w@Pîk锓bשè—äû \N*è–ûÖ°=tXyŒq¥¨m¥ßÿ™(®–s#Fà.M®Â ‡nˆäöD6· 35ƒìœpœØÎSÁ¨¥Õµ0úšíÐŒ8ê�0à ¶×Èì^M2IËx#ŽkÌ7(rB­èJB.ä­E@JRø… ‰¼fœéM_°NáfBÖ©@¥£‰‡ yÿ÷L/0Á éšßp'O˜ç’çñ:‡†Ó�)"’„§ðÝæèÆ„–,g¼YçI滂Š1ÀÃé7m¢Î¦LʦålÐ…>�a %d Ú€5Á·à¨„ ²=!õH1;,W‰€Ý#®­«s‚߃I¸�A~YÇ;×Þøè/ýòK£:÷šíjzk´Ôª¼»Ãè­Ãv "¨|ÀNU¾†‘ø ‘»ã/ÒSžq|œÇH‚G'pˆRzœ¦E#±£(:*#>IÃ`qŸ²ÖŒ°iB›÷Š0m‰wºÝ”xa¥axÔzÈE#UDèd¼d²j*`öì…Ñ×EeàuÜÿª¦In€G¸îØ<^á�e'ÔR¸íBÄT‹úœÌFM×6u‡áûRª­íÙ€ âŸR‚ÅÆÃP¤^HíK$)r{…ã&Ÿ *ÅQEΕҲéú 6ÃZœ6én.¶cçjf©ÅBš­M>˜¢™Ù¯ØÒÊõr�p‹òú‹I==ÉPèp(Œš°L˜#K�‡U¸œìP²Ÿ¸�?€wÑn4ðÃYÄDÄW­O¨‰ÎÔLw.Õ|Uôö‡%Ì‘‡,UåÕuã¿xnqQÃÓ’1ešõQJOˆ$wªh—_Õrݯ³GðžOáú`ܘì̓®ylˆ=Æ�j“»=XÝ\�•Í5XÃ…rÿèßÁÿÿqoÙñ³‡Ÿ÷%  Eq…½~Yû¢€L¡a6DIVê³µ ®[D‚d& é&šhì—I"E›3&OÁ7ù™ÌA5²ÜTo =Ï� j`â=©ƒîü]ø·ð]¸…»óÙ¡æäñ»·Ÿ¿÷螔έ^ýí·>ôÖ‡ß)É÷wø£ä™;.7I�Me+Û€&8’(™Æ):¡r}Sò¡€ÜhÜIÀ UËÞ 1†-·`wàš�‰-�HH뙘z+zv…�D¨71EÚ7wzQÓ´-ÑàõH®ÂBD†C©6¯cASM÷‰½ÜMÕ#áýíO@„ë.tý ûÕÔ8·VØD|bñw…¢ çT&«à2q’Þ%­�`© VªçsÇ'en�#Öq¸(~:¾X£‘0OÕ›bºs­ ÔyiÚ'à6¢bD"Ëq[PY›9S‘nÐÂm;“�þžªV4ã¦Ô¥s †e8­qGœ>qºÔzDД•1ìÁD^^—B�øÍeI¹7¤¡iú¦‹šÒ'ê|ýÏìuÇxòcĬÃÔ°eŒ)OÌL—ñj]ôþÇ*Û Ã$0>b è’b9\uÄg¾G‰nv|>›êä+äTtኘ,z¸$3Ì·L¶r¥™óÅ.š�úÌ¢„±ÈÒ°/MÄÃÙC% –f<œ„�ÀÇá�²–½É½rð-3ýøjåGÌ2}9"÷–y€÷¯˜Œ&òõŠÇJ² ¾#—’?6u²[&� ‚m®†¸sV�¢¢Q¹u±YHÉà.¢% ü žðÎ:Û¨¦"‚À[`óÒ1Óöç*¾By[$RJ"ø�nRÇx1�çØ ÊáuŸ÷Ú+Â1O  ºTx&]£ªï:Luôý'¡<ž‹ 5ýyÚ£¹ °XÉ=ÁÜ ¯¢Rïv`o­(Œ‰Në� ë*¤šbævMŸöGX±5áÔ]Êže+f%êI!Þ¬+1³ %ÑSEøÒA6[ =‘BüÑï¡ù6\uÁ> Û½ËgîÝ2.Þ¹{ñ†¼pöÂ¥ âôÕ+2oßܾ_Ðyº3ã}pnLÙ˜ÖïéÞ²{¾¤õþu{Ãìÿ@šk O3”°èÚ§ =¿Ÿ³ë0ͧš•Ny7ñ6s%lña/…ã±»èº&wêíÙ»ììœiw2Ç;è™Wk/( IŽæ¯™…ÙóG¸wz°?Jg­Fúmô-­ Ãõ°OáÆ¾¤áœä4MÏ„ZËw×ã*sê¶áÔ·x@‰@(|À°öœ]jÀ–Ìj–ÔpÀ?+ÐfUgwÊyÚdÒ×0äú$åð[é�›£âtX·ŠaOGwÐóÚ+›F)Ÿ13¼5<ócg}”îÜñ¶åÎŒEƒJ€¤§™Å÷}ÅM÷¿…Ì¥æ‡m=ÿKŽÎ™x‚‰5�Äɶùfœž§ª™“ŠT cRiû`øºØVðÅÆšc~γiÒ*ÙQå4[ƒ}_Ï´dsO8¼xŽ-üÜU§;,(hÀˆRDM/¡ `R èêr›¢±õ5gO¦û’þ#ܤCxÞ ÜòÉÃliòéמ~^Œw’öFª!—jl“³ÐJîÕàðóÈÅ( +ôIÒðùãèt½­›EÉ1œ5-xƒ§þ+¶«ãrâÕÚðŒ‹wa$‡ônð“Ò"ʼɼGìå„ >z·6A"#÷ÍšZiE®‡R ¹æeìx¦0r*°¼ºÑy×ÑŦ“†qÓÅMžÉ$Z‡âlnUÑ�pö‘Ù¯qhV_S�+Á=¹ëˆô„¥GÍwuFÉi¶È2j"­½[òúñÊ’Û�œÈ«ˆ hŠ•Rñ_hž~ïu¿&Û!B3Ë+ð>öm/né—Eì! èîV./vïøÜÕ �òPp³bH÷âëÿÕ“o°c)ûB`ü¨›²/9Æg%I�j1Iê°@âU1¦÷ üïaàûà;$«B'›Ð5Þíbµ¤ Vˬc]Ú¸V†“¤¾Åj¤òt"×%8Ãz&^ó„g¾ÅMþ· ×NÈz|9gÏ)GÞ};ÕjÈŒµE+’íê¶9‹ñÔ›z,¡fW/€ÂÃäÎà©ëY$/ñ›dáq¼ÖéűILèHQ€æýwšŠƒg—Û~Hì5�8Btál\H<Å÷ySTªÍÒa¦ó’VÏW2ÃW‰Pü�Éc¨üÙ’3s ViµžÔÿŒÞ×�.þðƒp í}}»Èz¬;Ý &[ÑÜDm¡V©]ºrë´=æ�K%>m…v×O°E‹$—Ybú¤*-Í™%Â2Aý‰šmÙÞ]#þ›»du�Ì�ÌNá—sÕÉ|sNÍzæGÝ%gëK™ÃºF#1yäòÔU“ÿMf‰Ã•xT(é—œ6O:´S—ßõHN�qE$’Ò/´zº6¢¥êq%º´©køþ¬oßoµTrÏ}H“àWCUŸâøí Ä–XÞ¤28{@OÒ*goïEü>µÝ>´yüõ³/_~ÙøÈ£ÃÇ^{åÄ™éιKöêòB¶07댳ÌwÂÌQˆ(—±ß*Sæ½­±¸q¼NUä髻њ±Ð<Ç/¤ÔÏ=9ã0Œÿ %TÑv1Â&…G¹мBó2 d/�sDãWÍTkÒ¸›e(܈-�oS'aëóPákíÜ©‰I�JZxnø&l˜P äÒw-bñð„R%68¸šÄÛ¤ŠwßdUúɳ´ÚSô^žBÑÌ"hm準ZÒ#¹ç5[hqØ渭N�/^–Ôh¬œ:7þžÙrÌ׺æÄ3 ™™è)½Íê&ß>unëœëcšæúÀ�JÔsà÷Î*]f/3ÃCFTè!ÑìEØËèõXènÃÊ¢@â×ÎEóEÖfS>uª �3²I‡¡îzæ¹wÑD—&¼ðMh<…± Å4 ŸÔ²‡ýÀ ­«" kn±àSôom~Ëz!ðÚÓuqd Õ¹2’üðÿÂ÷ñ÷ÿ¸æeëž•×Üxôä#ñö'>ýáO_¿ù„ûÙ©ÏÿÔºú@){œGw¸D»ˆÕäàè´•_Ý*ýUÿƒº=Ãk) 1V»Ñ5?ýîÏe¥x ÉHX½KÐê�ç5&‚"X¢ZŒ”zˆ–6i&–a¥®˜ïáUÊ!šZ+—„,'A 1ËVg|†fTjŽ}{1¥‘X<£ŒI ì+Ìñý–M‰±ï»º+BHE=±Ã0?j¤51¢Sõ|‰cút1â}&Ë!1øsƒQ�«õŒO¯ ýÕæúAî b¦”Ö–k¤‰b!øs.Á’ ò R¯ènØàDè÷VÐÜŠZ]µûqÐ@K<ƒ½¯ÂGInnŸ˜ö¦+Ó¯<ÿÔóG=y÷Öé{ï¹¾zÿÕSg.”ú‡Å°›¹vî J§DM$`­µâÊü@o$´¥‡‘ qbLkG]®¼ ôÑ ,£J ÷_©Z�„>—V˜Â ‘ê !.Í.¥>…j‘£ãš+(ý¬òc<Æ mWÜ�û-™Ð@…~ ;b]˜ã³óŽé†@þR\mE�›À6Úø 3Õ:bt–u6­ÙSqW<´2Væ^ÁŒy\4*W¾69ÖíÍjµ&fOû‰’îÔDœN`ç¹+¹ÄU';³áˆñ``ìéX޽m>)ù„™6UÃ× 5¡|NLH3Dˆ7¾HYÅî¿òΣwÄ~êöÝ{Ÿ~ñå3'mÿøÑ0­¬ÛðXGÑðïqêÈŽ8m¿´Ùc¿q/0¸l*{2�%-?8Lµ»›¹ú‡Ð)“-?gÇÜ�0a7mAK‚N†mÈÈ2k‚仳E&¦˜X¥Ä£îÇÃwRÇœv'¤œGsöQšgSjŒAÆdMå@ÆÂ圂.ë�ˆx› euhq))Ï 7±ÍIã=©ÉöF®¥�u4£‡¢øJ+³¤Žt®€lå´8[/Sð ÒÓêÓ‹ä@ì0¶(ÖE4I·œRˇaŽž›óÂXÀ¼Í£c†8nYÄ5Eg%—ˆºâPj8­‡+–ÝèTSù>…gá-Ú×jÒZ{ðaqô�Äëµæ[o¼õâ£W¾úÔ‡ÆôqFTä~ù™Á^ eG{£*Ê ð=ÚÔ~Û()1L7àçÈÏÏÀf•º÷0áŒO�¹v“X«ˆ‚³yð*P³€)”æÊ«·‰ÏP¡Yz©-§¿Q!3+lךģî:¦J›L´:b«uÀ“ç•`ø´›0åçüÿëëJc㺮ó¹÷¾wïÛæ­3ófåpHÎ W‰”HŽJ¢)Ë’,ZµZ¶ä8’·X–—ĵ\o±ÇmÛµƒ4IS#@ tÚ¤Mú¯A[t Ü´qvÿ*ÐåGÓ´hQôG´?Òsî›Gí  EÊCŠ3s—s¾sÎw¾ó ž<MWžù!MKçÂÅÖÃÔ+°@²q¼¥zRÂõq‡Í–H%&4tœPÀ)¼¬`¢IYÜ m—B ßpj>g‰ÏõéÛÊdOI)Š<>n¦VGD(ƒÈ÷°Ö-z^‚O¢7›]�jîLÃo~âæÏß¼öµO^{õÚ#öÚ!Àó•éâ?ÿñ篾ôò+?·5xè² ‹…P*ÿ—e˜•¥wa{ÐëO·Ê·gëÒ)]8Ìz[tžn §±ÛqÈõ˜¢ê$l¹Xƒ¢Ð}³†�°L°³lQ %eïŒb*ÄÏt²hÒÞƒ ç³®æ2S­f…&Ë…}ü!¹}ÑÊHÌGÀÁ_Ý% ŸÑ)ÉMÄYª .ZMõL|’�8i‰ÿ}z ÄÖÙ÷˜S”7b#zÔö”%ü5ÉŽH h Å|ôœŠH»®é…Ó½'‚´I’À³$!I3ÄM«C„È%æGLLK6OÂD_UˆÑ¨¿�Zdª-hq­Ü“ñì"Œ0.#bù|¾_¢N話�·ì¾å¾/Þ÷+æ¹�z«½6½ãò¥'é—ßþÒ£›�[™Â!½ážÌMºÀ�aì ñì{Ýß¾×yQaK­_ι'¡=5H¥ô3¹ÔnëÄ—ö‡´Ý_(Ѳ±ú2‹ÔL±¼ÌûWÊL'"dÍI`O\=Ç��°6.F“I·H¢Âo'¤áé)e¤ðé[²i¾³5KìNíl‚!y b7A:†_a¦Ø_Î 0­zŠkŠÁXQ?“ö²¢%­°8tØœÃY¡2ÕéŠùiWÏJuJªìG{©Û «àúºh<×LX¦M4{|ÓúTPÛ"¾¸RàÒ•õª¡.‚”ˆM!Ø ×,è5ÛЗì-j)$©WÍB>[Ïò<!ú€£Ÿè°Á/2U‚z›Ò˺ºMSÞ%l —(׸rŽÝy~ºç¶·r�åmšï¦äMîúDè=Îé]-¿ë‡üŸ¨A&ïÆ`�J�¢ 1 ‹²o]¼yËì8ÛϺž¹‡?­kE4áBUÂuáÑ$÷ãŽRv–"Dß4©õ+:­;ruúñ}KgÎæÐ^bä³´¡ÒB*Ο©Wò‰ÎCT‡òÖØ�¬™é_ëÜÑò/_¬rSš(ðýáÉ׺†a¡H\Œ¦³‹H†êê«uESxEp¸¢8ºá’!¤�¥Ôí�cèîáÞ/ò §Ä©eœ8£�z ‘ƒü–fæ!$7óXÍT$ 7øAw~Å4:¹uŒª/ð_ãRÝš&Æ61Ç,ØÀFé;T LNè1×ñø±ž:CâÇàÆ@éq�?üàTwÏaË=Vóc5\©ß º³ÊAoÈUgGm ‡§“–Ù¢7Q3OÒþ PR›±zwæå‹ùåj¶˜±[b P)Ù&="MÉbLV\sŠCÙ1&è1Cc–ÊÝ×Ú#aàÉ]:¼“O+—˜HL}•EâF£Hn—5t’AÌ«Ž˜Àãýmº|†ÙÔìò½úóqŒ|f¢¶›®u¢Ó06'ÖµTšeèÆÄ<•i<¥ª% Á›�ëŽFATã!¸X1H aÛ�¤Â#ÐÞÿ žSÊ�Þ×è”Þ¾Æ.–“s­úÉÛ›CiÐ-pDµœÊM’4üÙ~‘sïZ)ª´íÍ�!x¨‰`=§s¡“«¨¦í$‡qáÙn/†3ÀǪqÂÍRËÛkï:0EôbÏÇ*™P�nÁƒ–+&mt¡…ýlÆ3V8t󆀯��Ü þ²èDœ¹EŸÄ Gz¸H>©‘T|�sL/(•Ñ´“©TQïµIÃp"Üéš„À0•:IÕ ¬ª¡çNTC:÷¦S³Š2RÜ)ùz=3+¹GàQ:Ãá¨Μ¸þÐÊÓž�rÛn ·ú'sŽS ¦m€;{ήɨþû èæºçGX³øºC‡øs5|·#�7›)$èM¸ŸØ&’ó+Wë*†çN²eQ÷Ì#0‰'Ê¡¤°Ê‘�§ÚB¸;a :Á…òô,4OMUB)̘úêñQ7rYËÓˆªÞu Ññ’÷ZÁ{ §XÅdšÀ…é *‰æ¡L¢Wº¶Å:?1LÄ*Rअã$”'ØY�KG˜FDÔ•DÓslÄiÒ’ç5.¥òÍ<ùW\÷oÂ2Z�£pÇÈüiÊû_»ùDx"ü™°¶q].íšÇCp Ô¹È‚_+Å%GX©Aâ*ƒêŽúðL-OÂä7]JØÔlÄ~¦À•ÔÃÝó,®œ˜PlfiÙ›ˆ?Dä eÕ´…VV`;–cqû@�‘¤MK¬Àì#%Ž,‰§¢½�m44—�Ö¸¥¯Œê Ó£•‚¬koUw=/²4Á]y~½±Þ[¿ø1¹z@:ûïðžÛ˜¡~óI54ÿo{Á>Ûœ¬„¶½ß]ë êþí~îL˃qi^°‘?yyÈôÿãOûôf˜ ³ÍK#š•«4èG Ð�y_’¹—£eri#“¼×hÑ\vA=!}yìé@!“gšxX'.9Ê&úïŽ#‘`‰pk‡Ë~÷ #ÜØªe@Ñ‘”‚}£�ïô#ãÚÔ6Û’zê9qŽËvO0³)—Mvd<1*³@úÌp›¶ðM2P1î›ãxÀSÞ”„ CšeJ,xjüC3".Âãbbnð³YæÖN`2ýªë™èØwk6Lm5¥égËçDg0ÿìÑ�Ý|ðÎó´[ËïóÎinÂz[D«÷Ë f›ö—·mȶ#Îë-Þ ýÞ’Eí§›.¯ÀN4ío‡rz¸>¾¢[@ —�›#¶Bw ¢ZA·yC�º�Ûn¶ÉÅæÙN’(^@»…ø¬â˜Pqeãª_4Bݱ‰ü(؉E«DNZA$~ô;àR¤šEâySÇÄ¡h7)M£¤ÐöJ‚æÒž$ Ž´¸•ã¸áƒÁcp®É\SœÊ¤_Í£9a²E…¿_ïEÜrüN„¶¶“e–ÿ mÞ;hAç“Ó¼z´w»göïñFãºÑ›ííš_ZÜ×o¯¸­F!ª¥Iê ³þÁ÷͘Zådþ¾þúÇ�E¸š"Ñ%X Rv ŽGeö7¶¼G\y_ZˆÒãøÚ×çÐ8-Þ¶KÏà£ôõÛ¦TÉeP?§!äL®�:CŸð1É^%Qwj“|_èHd…þÓÝ/ÿ¬UÀoƒu8 çUO¯öÜÕhÿ©£6ê;ÛÓòЊî;Ÿ\?súü¹ù‹µ3�Ñ©îX×ËÎeÿ†Ë5ï[†tÛ2P}‡ÎØ`HÙÿ¡&‡\�ú(ÿO¥CNø%væì’K"ó0_ ÐíA þš4Å×<ã >ª,‚Š"š�{\ãLLãI{c¡‡wn~u>ûâ�ýù8FŠhFC§ã*à†öªÁ‰;H4Øl+þoôcÒ„d´–à)©ÐB·ŽÏžœÈô¨G`d„Â9C×oÿqÊâ`-ñä´vV§¹ç‹•3µ‘õãëw¬:whÿ¡£·ž:3¤°•^“jhå†* ÛõÖe®°­öHôžê/¥:.§%¬x1ë®`;½ˆÍáÝ‹ñ�uÄ8B0…þ�œXÇã£_ö ‹ÙÊ ÙkµC:žÙ0#WÞ=eî0Œ�rþ]‡‚nŒŒ×çÌJ$×@dR>Ô6:è&•ezÃ$ÛµèIɾ¢ ->v}ÚФ¨ ظˆÿO'�²#ÿßÇU{þ¾�xcÏêR:ל\YúóŸý‹'6¹ø rƒxG\ž�ª4þèë¯ýÞ‹Ïø³§?ú�wŽžxüÆ7O_èÌ…®Ýy9þ ‚ÒÐZæ)~�éØ\Ëm‚~[c~·8ÊÃ{‘Q¶­¸N<}íåUN¹)iM‰ÏÀØŒƒ8ÅV½mië ÈПér¦��+^t¶Ó5ÚnÌF�ög ÆtÅ hº|×hÕßM^{=Õ‰cH™”Žž>,¬�ÕˆéPƒ† Ù.´ä죚¢A¶˜¶ÞhCà˜#P¡|«Ù…€¾��sI’ø¾�ˆ<²áûƒÈ¤nÝó~yŒMz†CÜB×LcôLÅ ÜþÀÅP‹›w5?t÷³8šx<( –ŽÀzúÔì­óIª™,~�îĦ+ùü-‰4‘®ŠEÙkš/†«€—“¨�] !3œ ´Û$º%Ukô·º–­WPÍäëiÌ+é¬AEQŠCÏ^¬�:‚tðß�¥±¨•Ë#ÌP#"]@Ük*�žok/ÐËUñ˜Ö3Ãá ÿ.taAsv»ãVq8ï�¸²Ùšj]GŸ�wÐÇî`Uç�ùShÞ>2~Jæzm’d$ÙäJý­qW.ýLjÒŒè¹i¾DÌ,nˆóÚÀŸòHEîME—SÙTp¸‡^ñUÌíV‘�¡uJñÿ“æÒ´�LY™T¯G›‡Ön;vû^ã§‘rò Sž]Ê¡9±ŽóLA^&Ý,tÒ±�ok éÿ†¯(ÂÁ¨°16ŠPØÅÈ|˜™Æ×+:­Æ,ûeŒÚ„®ë~ ï´Ä.ôp}úønèá±K¾eé „_1B#°„�ñ¦ñë:½a 5€ þU“ý¶R„®èÝmƒ?‡A%ºt«�+0£Õâã:„Kp®¯f¢>Ñçno5Zãµ=�©l>jV$¿¬cð<àÎÇ`äå@�¯È’l×Ìv»G]~›]|”sM‡­ þÔ[U¦Fö�Ú>LŒ´§Å®ÝhT™Ûlñ}PöÕ­N‚§LOêÅ÷ˆŽ j¬¬HƒR44ú‰l×4£‚ÉHu’Hš„}’^›‰†ÑŠè\)JÛænýûó§ú°¿¼{T,u|Êþõ[è¼Õ»úXw"01FëVhYÕb<*d¥�QÓ ³ÞZ´`ÿüâ=)æõãN;2Úí$±|ׯ£Ç„âOþþ¾‡¸–æ¾ _€·©ciÏ)ö¡OÞ}§ãÇŸùÂßž>{Z ÷-÷·$¼|¸þ³‰V4S¨ÈD@7Â<¿™Ý)µ­5g@dÈŸ"«ql2b%â�÷èÉ ¿œ˜Cý»eÝßl 6í”à"‡î ÇÇ@X´ EH b¿Í£#Ci…ÞPÂvs‰æà´´‹[‘àþ”×6SÛQ5KN:âüÕ$õnòÐ^ã¼eú`Sg,À%ƒx·Ìm4k ³Lƒ*Ý7¦4kž>¾çiíWÏZ ´àI2‘Œ‹±5tÐÔl hK¬®Á—×ìÈ o¯GÔȵ§9Æ/%~R'Y­n…,OƒÂND>zäL¥…ÁgyÔŒ£’ï=ÔnŽŠÄ·•ðRßõÓV\jámNGi h6§¤˜J÷8Ð̾Â]p/ܪÞÝúpç~á\.Vî½Z¹ï�щ‡Nu§ï¸}áÐÂ’»­Ö¸©2¹ÍƒoyãÌ m™[­†˜n}ïo'?ç6ŠþÜQd4€O ~P!8â )¼½n‘]€èœÖa§²c°×‹á�‰B{/ÇÕÖ­4ƒíM,FYȹ5¶Ú8ê™�`G ¬F£{jÎX0úø¡O5DáàÍ)ÓÙ¶ãjøTÉD«ýùàïx;9ƈäg8‚_É ¬b¶1‰úÝÓ* –;a§Ù(ˆñÿE¤KMSA6WéGº ¨‡6o'ìÆç¿NL cüèïMôÄÂî¥þÔÌ쎱ÔL®?t}ÿý—^O#NÊs¿èšï°É¸taâZÜUĽfӓמ)P§¼°Ê6ÓÝä)3ÛTÞb`Ca réáÕUf Ð\3Q‡Y„šž<‹ØcÕñ $27>ÎDn°Ó’>çnû]¼Ð“¤Â©éˆ÷Hþ0ä{¼ì€«u|-Ç&xjÖm‹F GDÑ6¹WÉÒ¯Æ1šä…ˆ&èë ð±pÑËàš†>¦�'˜‡W¢Fb”ª�]¢é²\!u:‰ûòŸðm´ çt6ðex~~¾ŽÑžÇçK/•^)ÏZ·^µ\µqr}_g_µ\}®*^xñåOÜ|ÒÎ:‰Ó­rro Âö4ŽT©K %·¨8›„ ¡m(=f‚T›-@ý¡ÍV�A��• VoH9lëU©4WF$Î]öXšæ¢û¿CнÀ|‚¢Å˜&‡s¥R>kP'‰�Ô=B¢´è‘�v MiSºÆ$£6 ƒŽM‘ˆòÌ(ù³y€™üM©tÓ›�A”(áf›aTâaȪ‹lž8vãñ¦N4éS?äa“»qä3î7“ úƺsvÃlµP׳+o,A“¨D¥Çñò Qoíoö†¬H–ZÂ~òÊë: Lú—š¤²O�5ð©È¼œ&F@Râæi¼Ù4[�³dÅ¥g(,à=¥ó£¸cÒ» ·áZ†¯RË ’‚(”e#fqé§«K´�¸t`Vì`Œ”¢$ˆB²ÛÍ€$í¡ºtIÂÃ4pT8¡Á¬²âMi¸6I¯˜„3D#æ„ Dÿï�cx9Vu�ZŒ¹%æÙ¦�÷F-Þ8¿ž×#ó ‡å”™Fm r�&©—uÂiPåí¦~õ²Ò½¨›sº2÷ÿ`Ù‘î:bê÷õ„u““4« Ðó˜¾]¬Íð/³ŽëaèbŽÁœ€Ïà{Àx¢Ï;¯Ä}×Vå©¢9ÙGD}ð=i9Y§/.Z.hžº#»¦$s©°µh¼|sÞ,X'c#p„íœF›qÙ‚336ÈVcŠTÝM¶ˆP ÃW¯õ¾wq¥ˆôÚØgáx>¿J]Ø÷^ÚubÏmWzwô昻nÞšºkêC÷¬?»pûÑÝýñQ«ly9ƒ+•9n¢Ь»H)ï ê-j˜¹üÁøU¯eÂäT}×-t;sHßËìåZ*}ý—,.Êl½Þ×_Ó£Q9ô¼À!æyu…ÙÂ>_(¤Ë7†æðSÑšZT`Å}Jp¡J#ì\…=Ý+— ã™Ëø-)«)”ƒçØ{¦ªhL9Y|à¶Hó)¹<†gQ™B¨0jÇBX&7Tëïâù-P•� Et;›š\=xÏAŸ*Ë�#¼{–s«[«.Ãz©Ù#õ‘[4Š()t0nÁºU1ÊE¨K1µÀ ]MmÝk”£¹àK×NL:Èö>XÛ“”Sq!!o`'umbÜåºÌ�[Cˑ܋]£b ŽqJ¾‘øe—‹$-r 6v ½ÉÜOþÎB›¦‹¥zšö…r^Ô„3'`¶Y„ >@'X«ý[‰i‰ endstream endobj 14 0 obj <> endobj 15 0 obj <> stream xœ]ÑÍj„0à»O‘c{XÔÄŸ"¸º‚‡þPÛp͸j Ñ=øö�É.[h@ácf’ÌįںÕÓÆüw» llœ´²°.W;;ÃeÒ^È™š†í.÷æÞx>wûºÁÜêqayî`lÝìΞJµœá™ùoV��ô…=}Uº»ó3è�EÁŒ¸ÍKo^û˜ïª­Âð´í,ùËøÜ 0îÞ®2, VÓ`{}/p,ophõ/Æ·²ó8|÷Ó9§ta�¼FE'܃$’›2§cæ$+§F:UGRTV¤&mHiEŠyæ$eDqŠ E’NYDŠ:=n*A’‚2¸Ì:‰IRH/cRs’Jºgz”tO‘ð%ƒ¦v-ß{£æñ…Øc²ÃÕZª{F7Mšã¤áñÒf1 «èûŒ¨—è endstream endobj 16 0 obj <> endobj 17 0 obj <> endobj 18 0 obj <> stream xœí½k¬mÉq˜·z¿ßû¼Ï¹Ï¹�¹÷Î g83¤t/9äð1C‰1CË’(‘ÉHâÃ’,9lÀˆ�"àAìÎ ±c$˜ıôÃ… †ó#?IJEQä8 âɤ{Ÿþf«Î¾”8±"¯!ëîµzuWWWWUWU÷Z§IMÓL›?×ô›½¯|ís_y¬×¾IŸþû¹tñcŸù鯼úáþ¿›¯ÿ÷ 7~ôË?ü™þó‡òóÿµI¯>ù…û‰Ÿþ¯õ›?Õ4é,ß?ö…/|î3éÿøÔšëþ—Í·Ÿý­¯Lnæë¿œáþ�üèÏ|þ·ß6ûkMï?¼Ñ4«O}þ+?òcŸûnüMzíÇ_ýáŸú‰Íq®™>ý»ùß^ShËÿý;¿óü{?°~ïï5Óó‚ÿüÆßÿ�ù}ó¿ù+éRóùöè­åßßxóWòE??ÿÍü¼bâ¿OÍJɧf½^ó즠·ùw±éô¯‚¢yeGͧ›Ióõf˜aÔüwͬù…fÜ<“¹ö½Í*øùá|ý—òõ+ͺþ6¯¼ùf®_Ú]®¿£ú;Í0˰¨¿³óúÍ~n»È0Û@®›òœä¾Žšo4Ë Gùú8só¤ùåÜÏ76í.åÙkrùansØüÝ ¥Þ/çú¥î/g\ßÈ¿¿�ÿr¦áG¿ù‡~!·à/å…öBó+y<ߛ˿žq~ï†æBË~îcöí¯ä6çcÙoÞÕ4ïzóçç›ë¿›Ë¾¾�Iý-øJûInWð®óu/ÓÑßHÝ9 r�ióB×÷æz©Ygþ?ŸáÅ ?�a^¯¿�á>TáÁeøR†Vx_† \ÿÓ>RáƒzþiÝG(Ï_ªu>]û*}þD†'+½/gx[†W2<—áýžÊð“õùž®×ï­ÏÞ^q¿'÷Õ:o«Ï <[q½\Ÿ—ßWk›Â“�gør†ï¨cûh-ûçêõ“uœ¨m?Rë½»â¾Wé|ºöó\ï�Z>Ëð ÖÞQŸ?_ñ¿·^?SÛ¿+ÃYÅÿtíï$øöwGõëØ_¬¼ÿX†ï©c-íîVz^©ðÑZ÷~½þ ÆôR­ûÁÚÇ µŸÂ�Ç2\¯ô?¨m_ªô´ÖýžÊ·¢ÿ{>›á¯×yøWkYéûR:—É2¦^†Ïex¼ù{›²WkÿëŠÿ+>™ÎeòrÓiû¬òê^ý-}|µÖÿ`m_xøxm»_Çòl¥óãá×ðl¥¥´ýöZVp™{[-ÿ2×9{PÛøL…çêü|µòöZm{ZÛ¿M¸|,2ÜÎðÎ 7j_ý?¼ùæ?YØÈÔÝ:7wêu¼_×yÝÛk]�Ä矩s¼ªðÓõ~Q�ûŸ©ðÕ q¾þ°Ï#ÄúáGë~´Bߦü?®Ëü¤ ÿ$Æóߦs{Pàv€bY‘Ÿe½¾Y¡<ÃÆ¼E׋Ž}W:×�b+‹.ÿétno‹Í)kE‘­wÔù/ö½¬Ge-(²z¿òî•_Kç¶®Ô¹’Îíƒe½Ø¦¢¿Å&½(v§ØÙç*-Ø�Bç$�ÛÁ·Wš?^Ÿž›ÿxïÛ+¾Òg±CÇu>ŠÍì×ñ Ò¹þM+îYåÓ¤Ö9«už­}�Ô~fµ¯ò{TÛ—ûƒJÛ ¶ïÕ߹ਖ§ÊÓiïºÒy½öÿDÚÚÊ»uŒÅ6=L[;¾WiÛ«´•±{þoeøÎt¾îP¯ØÜ[•§W*ÎãÚ×Q-[Õë“Ê£ƒ:Îe¥ïT<<ªx�*M{•öËu<¥¯E½îÕ¹9RÛI¥ñݵmi÷H½~¢ò^>UŸÝªs´¬´N*}ÃÊËe¥¯ôùB½¿UÇy­ÎëåûÒV¾JÝbgo×q9´Ò¿_Û\©÷O ç‡jýG*?Ÿ¬8oÕñ²ž>UqÎÒVGÖ•'õú0mõúök]|ôjXëÌêsæÈö´<ÿ7ÅßýZv 9>J[›q°£Îq-;Ò3db®ùF¶Ö•¶u}¶_qc_ð¯ÒVF.¥­üMjùAjÛ¹AísRû{ºö�,êõ¤–�*?¦µÏQ­3¬uÀ¹¬÷ƒZ¤:“ZæëiÚú¨½Ú×´¶é×ë^ýe ¥í “´ÕËaÚÚTúŸ©Î¬Â Þ÷õ|\ï'곯z½ Ø�‘pÑ<ð“gàéUšÇê·pŒÅh‚� ÑCùX´õê=öFšw®¹ªÐÓõHm†¿Ç7Õï(àœ†çȺ†�UÞ þ¡úŒcóq=MùÄü ÓÖw�Αʦ�CáB&ÝfœÚ4ðKó—9�c£Ý@8=ŸðÚÌßžp˜Ö�~¡ažÚ|é ×È$²Èü C›¾êèµõpê”ç‹ú<©OæmZËÇéüpÙXý[>z>Ôu;k�i6ʉyÌgχi…öQè¹ ÏZuã/2k{a¹²NGv•£ßQvwñºŸ.òzzéâx£^ôCÔ‹¶:Òfz_|nû@ÿèEÍЗÒE=³l0¾”Úóݾô�çn×ußHý%µñ¯å’>£Ì6õÙT¸Æê7Ιˠ9®àöX•�U^&õ=Þ�ƒ9 _£±LT'¥‡ÓbY7O¹‡ì?óÚKíùó¿EŸä¦†©mâ<7¡l,z"NújR›wŒÅ2uÀ¶ú¸Oê‡çÃPu¥<[¥¶\Þ{�?¶¨åŧ$w·¨uð�ˆiæ©#,„ÿñ@´àÏ®T6Ó<ª4<šÚ>?6�ûá/ãc,+ì§­|\q·àCï‰ö«ök¿·k}â¡RïR­KLCl\âÖË•æÓZ÷JÅuVáJÚÆ#«J?9˜E}Æ\8f;>–¶¾ ñ ùÆbL,ÓÖg�©l&p L\µÒsú€†©pÚ×s �£ÌÕå´õÅÈ™cïÑìai[dšÜ>2r”¶úT® ÏÀɾ:È8îÔº×+ÝØ¡RÆýaçÝJ¸ùµŒNÔÿ�îÉéOÒ6ϼŸ¶û{G‚‘ê;×Ìsl t�ÔëôÕKpßJ[ŸŸ}’qÚÚâ©p°×�>ŽÒ6gÏÞA¥«ôs[uá+t€ç8üî×ß�ê¦m¾Ý¹î=õO?ðÄ}™o´wì®C;÷=¯×¬%àAf-Sûêw×/òh»RËÊoö�è¯"²J?¬I‡zÎ\×û{¦Û¹·£Üc9Nm±{¡~ä·i@×Otoû†ŒÇ=sËè�Æ×b—8ÿ¦‘5�½]ævOÏ¢cOuÖzÎý¾Ú󌱻ÎRx°¥ õ�îš·»ôÅ:±VûejÓ± xöwÜâž´ç¾à: õY§lÛ¢Þá£~úCÿöÓ6�w{js´£ë²Íü:ÎÙS_ðÖç"ï<ß{¡^|ˉe ÓsÁyGt{×¹IË!¹l…s€¥¼¯6zÆXÌk�>“²íÁ®p¿P=tÂx}F¡øìE¿‹¿}=mãVÎ@_ý,msr—SÛÏˈmÊ8µÇA99¾•îYÃ}ÌçX°õÄóÎNR{Lȹ|Ë�ÏÔ9go¾@9Müš‰æôRÚ}“õ ÙqNÔ{~ØhÛ,¯ƒÄ²ëÔ^[æz^ê^Nm;ÁûJ>ëÍ^ðiÚÊ$ñˆ÷Ùö™d¾X^É ÷˜×^Ÿ«eNM7öy�Ö4[Þ­“^O�?|Þcñ>6eìÿÀkŸ! Gýñü«sëý´=s@øD<¿X{úe¯—³¶1å—³Ì×à€ÖŸÛ±=ãŒ~ó>®‘è@V8ãí½óY¥k™¶{�Ø_ïWÂSë±Ïò1ãñºçEÜ»cŽñ¡Íg�8Š ¡‹>7Äúm^û,Ñ*mÏØ@+uÇ©mkÈA±'‰ïl_ƒñ g¬%àê¥íÙŸ• >ÎT¡·Ð6ßqo™@|~,ž³c\ØàðÌ{JöyâyIpÄ5Õ{Bö¹m«NR{ Š> kÖ8<ßµV C™ïkþ1{}CõÇx°“}»þX<±nÛ~z}; u÷Ccá°f[è}fðX‡Yì£õÔq¢çdðrþ ò¹·;¾a¿Ü~ÎXmÏ\}B“}Çm¶yöU|~v’Úö:íÛá ›Üï: ;R=Ÿãe^¡/î·b?}ÍkŽcŸå§¶›æ]gR,‡Ž�£{>Y_SÚO‹2eÚ¨‹MÆÖy­Ü%Ÿö áyÑ�ò.Ñõ´õ½ü¾ò�¾÷OUz|Ž<:öŒsö·{’[£=1^Ìà/•ë+i»çG^…ü³ó£>û…ŸÇþ‘÷�£÷·œÅÇ >{ÜÎÛ{�€÷œØD†ØgåL›ÏF€�8»óÏœñá}IçfÑé³´Ý·uþ›±2¯Äû©}öšØÿ>Mí3œ#ãœ6€u—5ôHm}ž!îëñmò%èç  ‹³�WU·ôŸÒ6§J®>™Sð«ï#•1_O[ùeÏ™‡d×±vÇq$c²]˜†k¯/Œq*|¬^ °åÄrÎ<÷:B;çd°a}ÝÛÞb°c¶ÉŽÓñG}Ö¬ôÍyŒ2—·ë\ã ‹è‡õØùõRþHýåÌ(:ˆ^Q÷NºC‹ŽR;~Bgo§í>ò¤â»•¶vŠ½Ã«ikw|¾…ß‚ÿf�÷¥ð—‘ïA�ë`¿ºy~%mm"yiêø�ÔikoKÙ=Õ[©Ý:ôC™÷OM÷Yã~ÖLmm/±ƒä©›3ÿ¥ì,µí´û[ ÿ]Íq¤›|=ûig‹ùäóFÎÕÜLíøÚøm‡Y¯Ug-\ÎÏÐî¶p-uM Dz06ÖEæÙ9N¯÷äKñ3À1S{öHŽUßy6ôúT<į2}—R›V`-œÞßÜS{|¿g̼E|ì]Zf±í–Çuj¯µÈö�µsï¡�žûSõM^žuÚ‘=ï?Ãkû8Ôñ˜‰“Ù³¥6m´ñZv˜¶¶>ù\Á,]”§áY«¹•¥ð=yBuÙ/dí*un¦­Ìºn×gœ e?ÍqJ±©�Ôº×S;wç³ZÓ´• Ö�KiëÓ“ÇÀv[ÿñQÑÖVtÇeÈ6vófºx–�ñZ.}¶Â¶‚3€Èï„ïÞS†ïÿ"'s=ƒÿögVÂ…­ˆe޼�� ð~±ï?úæ3à]ìÀÃ~w|†œ²®3&úá}ô{ê˜Îñ“óÎOrO.�÷âœ}ü-û�}á ݃~À>QR9}ÍNü®ÞCê@§uÅ{mö'«/B[ç*bnÅùçáG_¿Ó‡´ó;�´‹9&ÇäÐì=høý¶MØud;¼V}ä‰ ãke±C>ÇÏY)ä/ž±Y‡{Ÿ³Áe]ŠzެÄó;¶9¬µŽÉm{¢îy}8Híu…Ø[ÎïMÕ»™¶q3¶Ðç2­Ç´ŸÔvÌUÌ¿zý„çØaôîzjËc̱Yni�ìxßpÚúz¢{ÇMc•YfMË(]¤Éô8_ã<á.Ú¢-ò~3õᱞógn‡í)¼þ`ÚÚkdÁü"ζ·Tÿž'dsW.Ë~{ë‘ÚágZ&f¡½y÷ýëñr¿§vøqŒ¡ÚÄýø†_A�§CÓ¾úÀ¾zíñY ÇJÔu¿^�L_ÜÓ‡?ŽuÉU;_‰ìÚn"{Þ«Šº0¾eº(ÿøNàÃ7×Aè˹ó¡ð;¦un�ñc«�[õÙ"¯ Œ5îc{\ÌóRõhýøLнP�ø›to[1Q¬5ð =t®ßÿÀ¶]…fÞÛtnÞ2ï¯çšüÉH¸ÀkžY.bÞ óǶIÔC6œ3bÞ}¾Åû¥^ìO sð˜öчòر‹ëÔ—ù¿ü~ ´“·«?ÛÎÇúÈ|³€cRÛAñLä?×Ç;ð¬U�ušç¬Sä.m;àýÙVa“ØSý€ƒ8мE¿,Ì'òG›ýÔ–øê=X ÊxÒŹe®Ö*ó9HÊש-3ø‹–UâCïu�ÓÖö–²£Ôž¯UÚúçËÐG´�øxö-F¼/Ã|FžPo?ôÅ/ñ¿÷úØ«³<Æ}=~­«ÄgŒÅk¸m¿âºm{lýblæ×ð|Þóóúåï؇±|à§2léR}ñ™æl»ãŒ~ÚÆ´Ì¥íún[ß‘ÛutÊû}^ç,OŽ�Æ¡~´ËÃuÍ{øXúþpÚæCðã–kŒ±Â®¼²Ïg9Ç5 uñõc~Šõ̾‚¯õü¶-nãvŒéPýÅ>ÖlÓîܨÏ?ÇvÌ u—¡ž×.ÇNƳ×1ÏB}ì }ÂÓé>œ!F7ï™ëد×ç‚ñÏL+¶^pó!sáõsÆGÜ8Ñ}”çLðC\çÛàœó4µiÛSŸn;V¾-º‡½tìaß>'º¶V¿ÄJ–1çóé¢=€Ø3üJì }�{/ôãÅUjËÛ®{çZ(w¾Ñ6�6ÐÁYOóûj?­vŽ ˜¯íÌÝ:üšðÎó=ѳqjÛïM˜&ì± é´]ľZ¾'j;ѳèŸÂoÛë5ã8P?älYSVÂaÿv®Y‹ /æhvµ¡y(¯ c=[ª>üZ¨Ÿ˜{&òüÎR[�8ŸGý‰ÚMõ븾¡/ô}ëç<àÀÇu¬o¯¿7±JmÚ¬›´ÅÅõ&ò$޾y¼œf ^»«"ã£tѦQNŸ”ÙvÅ<: ­\ÏCïIpŽ{A^ZW©Mò‹ÿíÖJ¿ÎEZF|z™Ús÷íky®iK,ˆ¼;Fô>íújã¯ÝÔ·¿Œ½pÎŽñOR[7†jï¼ëL×ÈŠctƒºØ¥˜§í ‡c Öû­è-yxè�ùWl ú8M»c”‘~=?{©m'�ۣωú�ç*ã\ì‚kÎUŽýDœ›D>¦‡ýIêÂ{ó}z6msµ¥¹{ëm ¯9ã‰ìc9¾CVÐpS^ûü<¹·¡îñ…h?V¹×>tu¦¶Œß~,ò€^Ú×§orvœ=sîÐgËb?øTĶը֫‚3¥ö¾Ý±ø| z»l¯í­u(ò¿<;JmYŒƒØÇ¶�5À1µó þe«Ô–eÚ9§ÖW99BÇä>ÏeÞ{Må÷�wÙº“¶q˜saÄÜ|ˉ8´ÔãÝ]Cžó.ÜsF’³€œCĦûlkÔ°Ò´LÛ÷{óB‡÷ynÝa \ª~!ç$ñü.|©sEcÆWENÁsš¶ò¼R{Ÿ‘·ðûÚ”y\ÐŽoÀ>"¼ä\‚¿·ÃØ}~…ýEÎp¢«Ôž'¿ãÅ:Óc�‹9©ÿa™Ú>7´{?àì™sð¿Õßaq¬Çú½žøM&x뼇¿“ã=౞ñ{Ç^™y@ûIÀÏ7ÁöýП z‡ÂÏÙdŒï(aW±)èßœBvÔ'<ï�úuÞ‡6ø²èÏž®ËsÎþÜU{¾«ŠD®˜çRÿZÚúQœËÅvbû™W¯ØZ|&ï 0ÿ¬kgúeŒ¬�ønØÏ¸ž°},Ö[Çúö±Ðè‡>'Â?žµž#g¬ß¬�>«ë¼±s¿~§�õØßF´_êÜÿRm§ºÆOÜü:b�§6­ûtöYã;sÔ%gÓW=³y®rêFy±¿‡¶koÌãŒ~ïÃb ž{O»Ïļ5ë3}MÕ'Ïo/<‡‡Îu¡»ÃÐoœûƽq¿�k¿»éwÕL?¼q[ï‹8ÿïùì©l¨kûÀ»ö$¢¿4UëUOý@4Lt=HÛ÷ùÎ÷®ïxûûßÜ£³þö<ôCƒÏü#ö£-«È£÷Ôùþ.óçï0רO¿§Ý>ïÅ,oè¯åÆó Mý€ËïpÂgÇÒæñòL¬�Ol^Ò6…{Æ3_­K®×0æ}ó;«èzlkycí‰çýxgÞø]×^À>Öhè‹ßàÆ6Ùì²eü²¶øýßø-ûyjÏ9¼ü¶ä ¼€ÓïY3—ÐŒ �û¥àfܶèªm¾eܶжÄ{ë.óþEݰ̘O¶£oQgîÁm_€ù²¾t�¯ÛÀ û(ç{�‘½´=cZd‚rû}•?þà0à‹t°öÃsæÞ~sa[èñ‚ƒø%æ7ËsÞô~Š×$br�[�ÍõÚï}dˆúècñy<ó˜|ãR|Ù×sŸ#³/‰ï‰÷ôœùb‡±„ö¶ ö¯¢lÃ#ëÙ2Ô³Þ¹ :È`ÿÌwd;ê>vÑßu°­�¨Ï]¿±¾ý7x=eÑfö^ûšc=·ñ0_�˜&ò4Ö�í£Ÿf^{ ÀA¸�Ï�ß>®ýÖ]tÁë™çÜk«\üÍÿ}–]|ñznúìú[ ÌM?µ×û˜Óâ;Ø Ûæ&µ}3û)®ÛÛÑÿ íç4Œ•__S[®M¿ÇƒîôΡðEàïÞð7qÌçØ&Ê÷‘nr¨Öx±NÇÚW¯}qœ#õ7Oéuý]cµ¿¿˜wÏyôñâz\~±gȻך¢Óœ¹#/_€ýwòVä7ÌKï_õ…wžv¯?Îß“s~^°¶8dý;J[?n¬~±Mè4A#¶Áû¬3üÚŽ³ž;¯áó®æë?øÉ‘·§Žóxì}·s+¬ñ1bå<¾óÝ»ü-·e=p[ûÛ1F㺟¶ïYx› _í÷UùD#u|6ˆ<+rÀMu ¯ÔkÞE™ª~ôÈ;âS0FüÞûcLS=G†GGÌ3Øß2oÑ=dtº£½y>©c+²u]|„vä¯ì«�¾…úæ™Ïˆ ‹ØŒ‘æõ™—‹ÆRNŒ¹P9ûÑø¨ÎCû=_üº¥ž!ì�í â¾�Ïþx?ê¸æªË3dÙzJ_ÔŸ©Œû•ÊüÞ>ÆZ¸ñ™±)>°~æó»Â»Î<Á;r {u>Öªçwõ™3ϻ߃è{öû¡%ž·œŸçÏüW<_?àÛžp2÷ŒÓû]û7Þ—¡¿¹ðÎÕz‘êLë@Ï\‡¹ˆò°R9k¡÷€¡�kheßc•Ú¼AfX�gÛ½Uºh )Ÿ‡:݃‹gàGž-w´ó9Ÿ¹òÚë³3>Û?Ì/p;Gèñyÿ0¾WìuÞç�L§Ï�9¥=×îÏºàøžº“t‘ÏîùË¥åß<‹öw–.Î¥ûa|àì§­/gþÙ^3nÓ> ÷‹Ð_äå.:lûŒwœ.Î�ùqÁ3×�ûu>Çf½µÎ2~Öqï š? Õ³­ô~Ú4µç–ÜÉPøW�ù·(s~‹òÉŽú– höÜ{®­wÜ{¼~>ÎXgWÓð»xH¹÷6g¡ßyè?Ãø¼NcC±ážgÚùÇ¥êšþ=•ÛGv_–™Hë<à³^áÎwà@çœ/öó!òÛs®HS?Ô�sųØvêBƒùn5möSÛ¶E}„¯Þ2—1ã´›?Ô5yïÆ2êþÑãh¢ÜPgº£ÞJø¹K_¡ÌvË{_3õ9OÛ8 yr_”y¿ÈëkÄ"ü‰ùäahóqŽÍ‡:^б.ëÃ.Ûo¿×ñ¯}rÇÐæû$]Ôabë¹píÒ-äÓù;¿wîØ|šÚóæøÃ{9Ðiü“tQ×ààxÔcò<²î`ã‡êŸ1î’kÛ hrþˆ>Ù×p^¢^ì¢Í2‡©=?Ö�QjËëÛ®5 ¼ áf=7Ï¡‰10çۙ˂×&úš…rÛ3ŸÁ`LÎy›7–#î©?ž8�Ö-·5þ¨·¦Ås¼k½°¯áSÜ£®m¥åÅ{gä@xŽ.šÇØ}Ê<>ïM’K1xmë«.²�nÚÎŒuOlÃ8�Oð`/m“¼'bÛér}×qüí1ŽC}óyÊmçüí_ËÊ2´ñ>¥mûBq­²pío+;×æÜŸs™ÞãŠ6ÍöÀ23 mÜÖòެØ …“{ÛUÖdξ»÷›Üֺėõ$Æ"#õã¼åL}—rÞ#vnÒù䙞Ãï¸G‰|Z÷âúƒ�oÜÿ›„2ïÃn; åôõ­xN¿ÌÅD8-ì ,Ô~�¶{"1÷Vî}¤ô…þBù8”[wÔw.:‘kçÇ£Å=�yÚÒïRϼOº¼VP�ñïòÕ=Ï<·?ãþöÕ/zç}ZŸÃ²?ã¼x\ßøE—Ù÷A‡¡O�‡úØktÚ‘“ñ^ûG¡óÐuÚ:¿Ø;÷3IíqÀÓqjçé]?ÊŒí¼i£}ô¡½N{ï€>.§í^àH¿Ž§ ðk¯±à£�"“|»ÑýÛ_±�×CtùÜ缞’7‰öÁ>Û8mÏ؇Žòïs-ÐÅ*k�ÏÛ œ;« ¶|”ÚëŠm*åÈu}¾gú.åMjÇÌûz´ñ¹æx¡¶»ÎMy œaˆç3‡¡�í%:Àß–IªcyôùÓk_Ñ2äs+³Ô'>B/´õšŽ,ÙG²í�õ‡mð>%vŠüï*9O‹~ ûÖur<ñÜ!~,¶{ŠÏ��7×è”ísí³&øyà÷º}Vž9±_ýÖyhŠëa\íŸ8‡ˆÙî`Ð_ò¬È%|óàµÚk†ëØ—²ß=Uÿ̃ã¡uhç½ÖœÏ�wôkŠýxÌüáàÝ(Ç—ôÉuÌÓ•kÞÅóº3m™~§;žÇ7>÷: õ½Þ™¯O~g:Öé"ïöÔ‡Ïÿ¤ö¼Ä~Cñ“¢sÈEôƒ£¯fù5_‘dÅk 8-ÇQ_,—»æÂã±ÜÓÎëfynÿ*ÎáãÓöÛó]Êý�tû^Ðæ5ßÕö¯Ÿ¶ß]š¤ö9Ç“Ì_Ìÿ¢O>Ó� �¥¶�·_;ŽR‡w‚™7Ÿ]˜§í÷ÒöS{Ýæ¼¶ß~c(÷~W–õ]åï¦ [¼ÏÉy*Þi¼“Îß}|´þ^¯p7m}{Ær%mß™ö;·>Ëu;mßAž§í{ÓË´}—”ëòûˆæ}Vé¼VŸ�Õ¶ü=D¾aº9Lm[cÛ8Fûç¥ý ôaÁu[=Œ/Ô³þG˜=¤_ü‰OÄK³qLvàîÀ¿KbùGÛAøµÿ7Ü�×2æùŒþ�ùíÜ‹åjîcÜÍ=þ©×‚èc˜OöÙŒ¸ÍWÇ#¬%ö+wù�è,¼Ã6ûðDjŸq<­åņÝg-#çïOøîœQá�®ý�lšÏ{ìðß,Šßu€ŸûjϺOŽ YG·™ Ç;ÑÇì«À+ïú,$>˜¿½0 u\—1csYç*óž‹ý)Ÿ3ëþ)ÍÃåZæ¿QÆßCc-õ7øß"˜ˆÏ´å»8¼ÇEœÄºï±-5wŒï@ý°.Óv=º\qùì'²ärþ> 2qTÇͺíóµþÖ 1 ßXˆß=ñä÷Dõé‹ó;žkxÅ÷üwóÐ%¯±ð•¿kBl>Ö|ê§í7N+g5iuðLdÎã€OÌ'c#_Å·[�Ÿ)fîðŸØ;Ñ3x¬gœß5mþ{+ýNU~¨¶ÿ.û`~¥6ÏvÉèiÚêl<ç7S™m£ms—ªƒL!ƒóÔÖqòxÎ×0—Õùbá‘pbïÉ-aßɹŒœˆ¿�íïôûHÔÅf’Ã"w1Ií–c$¯å¾‡®qjÞ1M?µ×Øøn»s$1ÇÃÚêœÌ ´c\ôe�C$F»™ž9÷ëØ)é:®ÅÄ|Sõ7TŸ®ï¼cÝ•wæ™ýƒèÏ _¼ïý |ž8w¡NŒ¯iç÷�FÂü�R›'Ì#{2~Ìí]Ç9?çˆã>’}1ïEš7žwÏ å‘gÞße,ÞöHG¦ƒw&ÂåñºŒöÎCÛnÌBÏ}”ëÉ Ô÷üwàßAÚîI ¦Ã<�\ƒÐ_Ô�]¹y€=3ú¼¼‡â÷‹m}1]<—5ÖoŒkðy£=³žØö „/Ú‰QÀ�ÿˆí�û9ØõýÐÞÏ#c™åsWŽš|ŒûÅÇcMp¬c®]ùÐß/¶ åã‡\Ç| ô� ø=Vøêý¤ò·E‹Y¾[WdøZjŸys¼àx ¾cà3¾Ž§-?»bìE¨7Uû˜Ÿõù$ž»9W?nd zíPûç>¯õܱù;óÁsâ<³×côyê±OF¬ÌßÊô¾¯c:Öòëzñ5{$î—¶^cs©CÓïhÓÆïÏû�gl‹ý/ëÑPõãZe¿ý4¿¼yŸÕ~WÒ³¾îù¾y;ühâ äÚ¾õ�Úw›à{¤v,…¿ŠLßĘ1‡[xÊßÓ>K[ÿÛùjú�± þ6¾ð$mc柙‹sØ*øÁ»½~—œÜÂaÚêý²öùýGü|€±¢§>KÍþç4mã&â ïkAºì\‡ßù› ·í¥Ï³6Û‡‡~è}ÇTõ ¶—ÞSó9 ··ý¢?hdÍsîÒ{ô…/ÉxãûA–ŸIÀß}�çØ:×sîÇgFã÷ݰ¯ØÂ8Fô—ó/¦•¹ô»¬‹PÇ@{çú�âXÆßE#¶G—¡ÎBuÁ·TÛ¸÷k{ïvÈ·÷à1íá/ñ­çÙçY½ž¹Oïµ;‡Ý]èùJ8­OÌ�ûá,‰å:™ë˜#·N�;c~wå°3”3'ðÈ{:Î!úݘ‰p"ÏÐãï…³6ûýðYjëuðkÆjoS>Q{äþù�*êÆw…�cY„¶åž¼€ýQlö›=×3çdœWvþž26擽tŸ³5O¦z6nd;‹MX«�íœm®}ZÖ}|¢R‡¼«û›«?þÞ ¶Åúeýñþ–Áïà'3×®?T=hÙOíuÄ>³ýª( Ô#ž÷™^pŽRûl$ß*ÀŸ‹>6ü´_kÜKÕE‡í“;f§¶ï‰ïç8б°sŽMFj‡œFŸ•uÿθX§{ê§·£�ãûÙöYy_Úî�;/jÅkÚ(µÏ¾šÿøãÎOz ƒžgh#æ6 ·þ¶¿Åu†>ð]cÌõ°8vÊvœö}lW¼–ÃçC?z .ðpVbê;ž²¼:Nœª­}ûŽé§ië¿S{\Ó€wò�2Æíj¦þ¨?WÿŽcÆ¡úð°8›uËý[¦'£³³P;㜉çžÆ}ã©ú 'òÇêQǺo˜‡>§ÏFÚ±/fßGáž>lÜ—‡cûgÎ38Oe}‚òv¶ùÖÛh¯¿Ç–'ÇéŒù·Íu^‡gëtQÎX3<çàˆãd�v,áü”}Nr È­ý@¯Ñ>wí:Îqĵ1æ{è» ÿ‘AçœY;ìÛFÿ”þ¼^F{æ1[O˜+çu…Ã2‰î™ï®cŸ·ü¾’Úw¿n–ÚqÃrG~;~&6ña>¯ãàµÊ�ö ¾åB¸£9¦C·±]ÈÐ<µ}aû)ö¹Xó¬K–Ú#¿–AóÔ±0tX~GznßÃ<@Wl¡Óú�Üq -öE�-žAûBø‘)Ç/“ÔÖÛlÙDϽ¾óÜq’ÏÏâ_ŽCÎ&xÍÁ¯¥mÌî˜?¨ä˜K^™³‡È9!h(u/¥ö^5´P¶WñÅu¢Ôåo(é×ß�ÚW?×Òö¼òUpqãJÚžIð÷©œSñyëá8mýsü0ì¹Bö»° èþëJõÈZf˜«}Õs~–ó±–âHöT°]øM¶ãÄ[Ža½Ç@Ìî¿ç�í³[F/2oÓð<æƒÈ�:–[ kÊDõm3vå‘xHnœyC¿xæxÚ>²ãkëuÈÿ÷¼ŽEŸÐz<׎C½_ZڤԦѶÒù´˜[õ‡}4æÃ1Œ}aÛrN®gðy�ah�¿¯ËíD;<åøÚö�cÇ(ÎÅyí÷úÀ¸à¼)p[}£Ãœiö~ v Ü?ž¶ºþ6ͽ}§¸çdž1¦Qxî¹B_]6Wÿðå’Æq-ÐQ ØîGR{=2�äuáC_ý˜¯ã¶+»ümÇ�öðy)µuÃùkŸËðž’ñ¢ŽÏì×xÏ ¼WÕ§}{òqîgª:ƒÔ~·YA¾úéb^ Zñ›Û9¶ñ8}–&Ú¿÷6Kyc¼”Åó »bŽahûȎ‡­«|:žËp¬>PÎ)X–à ãŠßªnB{ìϰŸöÿ£ �—ø°>3á=ËÒÎßc.ãÛSÿ£Ôþ›&>'ÂûŒ?û•>wåqïÊÉÅojÔ=I¡Œ¾¡Ñß@÷žîHÏ}>Ìßáf¾ümpæÇï\ú¬R?m¿NîÏ9hö2°?Çi{´à(ñQ‘ñ§ÒÖ—ÃnãCž¤í:N»™®Éç•ç·ÒÖß]×>™Gþ^¾•c@çË‘çË|¶;�>ª {¬ö ÓÄØ•˜Ã±�ý*ì3÷¬å^C?DÙ÷»kÝæÙbG{ÇØÁh«Æê‡çËtÑžYß�+°­uާœg¹-zñÅð1™SÊýN<ÁŸõߤ-þ±Ïx—óÈìOrÚñ<¸ÔÖ9^Ǹ¬oÄÓø­ìONÔŸc{S•­ÔÎ9RüiÆèwèo®gÄÜÃKb tà0ô½Ð5~–ÿž"cq,ï=[êø,01™ë;gá3èð‚9@�–ê3òݹBä–sØö!“ ƒè°íý¯Ôô-w\ÛŸG×h; ýoï§ö¼á»Cƒ÷œ=Æë˜ÐöÖg¼¿OIJèñÙvÅÜ�ciÓî¿‹Êú̹yÞM°ïùæ÷(ó|s?×=¶e¹‚7n똗þŽÔcÀ¶¢Û®ƒN «àó~�eÇïPÇú‹²o¹¯¶1W‡þ³ÇìâXm–©=ôܼð:âµÒç¦<çýžæDýx?§ü–µþ4m×l‘÷‘Tî¸ÕòÍxÀ?Jmz}Á9=ç´Ðò – ì/ë,í9%ôÄg â·ðÉ‘Ë“×æá8muÓ¾¹%h„ž¸¾RÆÜ;_ês£¦=ñsŸ@Vˆý‰ÿÆÂáý7ûPèô#¢qeOÏÙ×Ãf{/‹±âŸDŸû�Ìï©®™x͸|6q”ÚsÏ>1²h?{Eßæêcê?öЏ‘¿ƒEx¡‘ÓïbÇá“uƱ³}ã…ÊbŽ<‘ÇÎx‚“:ÌkiOŽe­þm¡Õ¾á0m×-Ç{êÓ±×ð ÙÁ63þÃÔ–elC<çn¿ÆûÈ@|wÐï�!Ôc¾‰_8·ï\9ç9SoY?ýî¬�1ÎSÛ¦D›åsVSáwÎÆ.ã….l9²ÄÚ >è¦ïWØ×qžßô8Ö‹¹>ö2¼~±@Ã¥ÔÎÇÁû#•ÅþmÈmsïuÇ6£:è½"x�}`�áž|!þ¦ãjxýšh¬ƒÞ#%/ Ÿ&ÂÃ5ïïD�FolCÜŽ0>[\×�Ë ýë1¶‰µ ÿÆ2„M²î9¶§îD8©O?ε{l¯÷µxŽ�`ü Õ¿¢v–#Çnqþ¸·MŸ¨ ºsáÌq ×>{âù~ :fl}ÄÎ8Ö4ý“PFü¿Jm›ç}[çwðU)�ëŠ÷õÀNŸ«@'Ë3ržÏ¡u•öÔó;wìÃù=mö£Øòï4µ÷±°;eÜÏ¥¶�Ä\òŽ!דÚï"µÿ­aœ¶¾ÅR娿‰Ú¢¿sµãoÅ6ª¿ÙÓb/lÊÀÿ^í$à�†ò‘úcÓg†Ðsü$û ØG|,ìL|?Þ<ÏBu'ê™Fúj»ÊúéâÚccö�wðxlS½—Ä3ïÛg³ÎC í|Ë>{¹ÕõžU‹÷Ï¡s‘Ú>Ü(µuÑ×öÜúh<”ÙöÌT‡¼ ýfÖh·|²¶�Cýxf†¹E†vý-dÓÍxSjóÉï'ûÞ2žøùp¹c —Ù€îþCÀýßéÚy�¢k|+é4m×2r\ö7ðS°¥ôGŽ;o¹G&<'È<åÄeÞ[§>§Ïä0~Ó�ÿäue­~z¡û2~ù0µm6bUq �øzÑÆ#+äËX³(?Ñ5zaœÚ2ǘ¡ ™A6ý~•yný+ô¼ ñÀOçç™Cxcr…®ëkÎØw >1gYÉ)·;'¯ùe}óƼyOÔßÜb.ÕÞ9º“8ìöÕgLø nC^Î×Äî¶¥ÔGOÈg°ö;ÎÞ ÷ðœs»ä.¼—2Q997ï�ƒo¢2ûœøŒÌ1bŒi™'ë“csçŽðÛ£zÿŠïŠYf<è]…òej�“kb>×ñzìù¢Í8µùe{à=/çñ\�s/]ôÃ�»à¹ßý"þ7zŒƒ� u–zMS=çoeûlÏZx Çº ?œ7ÅÞp= m¼§:Ö½sÉØRç1Ñê8ÿ< 8°ß#á(p’¶rí:뼺ésžmÝ‘äÙ~º´·£Ý"µß‰18ÿ‚À—±ï8Kíuù$m×ÇÑ‹ØçomÏÈ«“×uŒI›±úõ~¾ùPž½¨vÎË:.›ªÌûjùˆ˜—tœ¼Lmz°© õ9Q}d ÆÐÆe]³œ�…\¬½Ð6×½ûõúáÜÇ\x=§ÞÛq±À8àaMtžÌº5eÎ9Fqüm>zxª:ãPæþ¼†¹ßØ´áض˜;áþhÒ5>[)[§‹gKÙÛ´�ò[û&>óäõk©ëajÛ¯Aöí'Yîñ©ìû1‡œßtìäo¡:?â3‡ø«Ãoîo¡ò‘p°~�vàgÿ‚zÏíÔÞKe�#¶q M®¿Àë.ñ ó÷yÈGXŽøN=òçžç¬éþæJ׎·˜_x@ûïkµY«�ù ðüXõà;ë|RÝ©h'>[Šß@š˜c"\§šÇyÚ~ÿÓ1+1ïV8ÇŽ,8f¢g~.kžØ—"~°Ýµ�?6Úk ø©‹~zo“xŸÆvr�vÛMÇ­>/íØÊ{²3=sžÆ{%è|Œ=™Ÿ“p?Sõ…ÿE‡¾Gÿ~àz1‡Ñ}íj? õ†ßâ¹!ö±«ÞÃÚF<È/ößy`Ï�sIÑ&ÆXj¼æ;Êð÷\Æû~$Ðé!rà³. õ1 }x�Ö~ƒå‰z>Wâõ'ê—ÏÄ[_g;ê:Oçúq}ŽkR¤ûâu{JŸ#µ9TY¤!ú4<Ÿ…2Ày•Ihë1ƒÃ}MCØðþCúà`n™ü æŽ>¼—á{Ëún¹^„>�#úV~¯9˜©½óoÌ m‡ª÷çL§óÈ=eã€Ïgˆ3–jc,Ã}ô[»e„2öiàß4í–èq öEìcX×;ĉµØ±Ê\}£³öµ}þÎvÅ´ÒÆù–QjÓ‡¼óŒúqÿÐô.ÔŸí�÷dvÑâ|¦Ÿcéâ8ðYàƒc%¯·Ää—í¨Ï'8î¶�1¾óx ³3‹eæô5|æfêÚÏ�eè‡ùâ\æ4´�+•ÑŽ¸ÝëËDõ&©Í{d×óf›NÁ>=g½ßÄcô3¿×³ð�{÷û ô‡J~Ò~£Û:'€ùî=�øÈ\õá6Áë�×wt�ë9Ï#|z:µm©=Cî&á9öZÈMsíü ùSç?âùçCü}‹øm‡žúu.…œ z3øcŸ3µuüµëüŠÁßp ·îu(怜v™ÏåxÌ‘–xÞ)Î ãbÜ=µgÍôßæößY7?ÈÏMÓv_!ÒZppÎÍgiÃø½gAyO÷¦‘¹tÞ} vØ5»b”¶gíúi{æŽ2~#,ÒöÜã(mÏþ5ÂÑÔ>Õ¨÷)ôkþØ_©ý8µÏ%z-€†™è²Ìı Ô?ú朄Ïyöu=Ú�Ã|K;êrÍü¦Žûì‡:ø›Ž�‘™AèË|�è™ùg`Þ°àG.]×g9ý­Ëê@íwå…Áƒ¯`[.ÛãˆûÞó°�™ —u|ðß�ëžðÛ&øÌØ.›û0ÛH›eÀ÷°ú¶ÕþÎ 1GÄ1çé\sü¾÷¿“t‘ÆQº8Öh÷°‘èù&öX{7²Ç£½Ä ·þ–÷ÖÇh¿RÚ­é!Çâ¹Fž˜‹8ǽ€‡qB¹åÖ{„qÎÑ�Ajó$ÖÙuÆ›>÷¶Û|q}|âhÖé"ÏlçªãuÀ¸<&Ï_¤ÑûŒÐ7Mm›í]”‰¤¾ÍǦÎg?]O/]´‹ÈsŠRgºc^|>Òê~Ì‹�pÅy�©ÿ¡Ú?ÌŽ¸^?ÔCŸ'©=NèxgÚ®ëÄA»öìãƒs�‚-ßõ<Î!á‡;oD_ÃPæ=�ÁCʽ7>8ð“¼/Ç3·…zÖW¯—–5ä…gè‚ã*ûŸ¶ñàŠãè>Ösü@ýHÒ=8ìs³/m½‡6P”a+Ñ�iÀCû!Ž»œwŸ„:ÞO‹ûoöÁ÷åxî|(±ŸyáXÁûCæ{?´ózä\ ×Rxï9â¹ûuLb_À~=2äy·à­c9HmzŽÒEúüÝxÈý.©ÏÜG;aüÌϾpêžs`þæ Ï�t�³èîc”.þ�$ÛXŸ _hÿËûm^GœÛ�ë›ýÜžúÀ6“Óvþ{™¶qåÎïŒÒ6/Šü@穽7@9ûðÕ¹`öT¸÷{MûÖò¿ð�õÞï%\JÛÜ«¿cÄCï�Qî_Î">“pVï-›|ŸwCØ“Y¤¶îú›þ—ÒvÿˆyFÆXó½wË÷Vá ùyï�‘†Ç>‹áýeæÆçù¾H?µ÷ Èñ²W÷ È,cœ«OïQ{.g©Ã¾Ï0”~'‚>¹^é?£ŸÚy{æÓ{Ô]¿÷"ÆêÛýâ[ù\ƒñ®„/î�_xŸpúóy�qjÓÏ�x�À4P¿—ÚgLxÇõ"ð÷ZÁ‡�‚/Þ¯æýW�3蜡(õü]7ï¡Á—R�ÝyHlŽsßÎ…@[ÁƒMÀw%Nqž‡=|vx^èg íi\ôíÈ9uï##äð£oOìY:_ÔOÛw  }VŸy�Õ±"ùtdˆÜ#ü öö»zð þ!»IýCBãǾ8ža>á-ï ž†þ¬Øç˜S†—̺Hîaªþ±Íà€¿ã1Lí³;ôÃ=óX¿ˆ·˜çOˆ·œÿ�û8q�lê�v´sl÷_œ{v~û?ŸOñ^²çµ\?H[]�¾ò‡<&Ý{Om~½ÏÄ�_óÀΙ;nåÙDϦz <�û[€sÒ1ÇïqÆ\×ÃòëØ‚iÚ=Çq^w�wxâX{WŽÞÏ<ÆEjÓ`_.ÒóõŒ+åÏ¥vþÀ¹-ÖŸY±¾r�Í›¦ö|Î…Ey³-�¹(Ï¿Û;5~ÎÙp8öõ­Àù”¥® ÎÝø›1‘Žx–9Â~¸|‹6ñœgü6}cËûºf=ÀVöTÇ¿Kõå=¸éC >èÚyTçlwùs^/�{†ö±�÷Ùwá�¼ñláÿS`~�RÛˆõœ—Ãï…:ñyÌózŽ|vÀzi<1�Î,ô,îÝZ·ÂçuÂñ+ñšÏ'2·ÄXö‘‘Ÿƒv¼â¹ñ·­׉î‰óìÿÛ·GfðMU{å­uÌçá×~jË”ë”ö¬�ôÁz‹ÿE9}î’S|Ž]çc=_œU²,âa“|ö¾é´.„�_ÞdLŽc°…Ž“–jÛW»e¸FöC;€1pvjœ¶r†ŸÆï´ŽÇg yFü�Åv+óç³çŒ�\ óÍ1Uh¸"zO+-þ 1»¿‰ ÍÞó³ïÊ7µY›±ޣß™«,îAã¯#' á°3 °k=ŒåŽ Ï~ öÃûÑß³]‹~¤íZ´qãÔ¶Mnoç5"®é¦q´ãù8]¤e—�c~í·º�Á°¯÷Ù<'>w O½ÎØ'C>¢ïWêsÎÆrÂxây…Q(÷Þm‰aw�͉{Ú–aŸw*xç©í“Ú|ÎsR›n�·úÝuÎÂò =“Ðã„>‡úÅæ;ßÀ8—å–>ÑË¸ßæýùeºÈWÓá\„iÜåÿ{Þkulaµo2TŸŽˆcb®ƒyC'ˆ«¯c�<6žS×>ßCÀ‡tÜl›u>îõÒ—×ZüfÖÚû|vÜ뜫ßhK�3pwà€î›ù³’ûwí!¹|6ç¹"â™ ï�›¯WÓ6À~vg¥¶üò“ôg»]3õË Ø7Ë!²¶T=|Šèƒ³c;ûjK_>§íõ>ñ®ý²¦SŸØë�eÚþ<¼ð;ÿsá§OËðDýy-"·S®ùN»×r–=¿kà÷´m#úiû� ç Âɸà%ã°]c\ÎÅsïùDŸ¡Ûõç8¿í6¶^Ç÷@Ì똓‡¦1‡ì} Bÿ)m÷¬–êÓsÜ®µÚ�Â3öZà'|`=¤�çÚ¶�ú΃á;󷿈khC\bÿÊsF\À\Cñ~Žs[ðÀ÷lÑ ŸãÞñîòD|[êûæœyJ¾CƒÝÄ—÷Úi{m½IõÙqÚÊ3ûxý´ý>¼"Ö –9ôùè|· ŸŸwU�wæš=ä’}f¿×�| Ïæ×ÖKlÈ\õœ§bþˆ‡l{½¿lš}¾Œõ yrÞȾë�Ô~÷‡½Dö…¬ž·q(·^Xgc®„±Oõ º=v¯ûCµ÷žÏ�Ñ]ßWáž¹XëÞ9Ÿï‹¾I�µu,ƒ}?:�îú{OÎõ3GÞ÷ð»…qÿ†þ°kÎ]P6¸�«:Uì ´’(×Eð'Ð1âü]ʉõÑ7ä*îµz®yN.†6^óÉ뜥mÎÃy-dÎïƒíz¾+—3N—9ŸÁ�³C¦b¬lÿ•| rŠ^Å|‡Ç ÍÎÅXçf*ë«·«½Ëá‰ùsPS•97KûxÎÀ8�çÖX£ýŽ*1zl¾@;sPê�¤mþâ‚~7oÓöW3üÛþý ¿Rïÿ« ?§ùùr†»>’ÎÏšýa�uò â¹¡yŸÕ²§Ò¹nqVåv:×!ç}Ák62¶LÛuŠs0‡i»Îs>årÚæLá�õ ™A7SÛ¯ðÞŒ×vú-À¹ÁUÚæÍvåšð“}Ö]ˆïs²6ùo®Ñ/¹wÇ•È=òƒŸ[äâ«~2�ûwR[¾œ“@ ×þ¬íˇ< ÷©Î-<ºÂwdøJ¥ácþd†ï«÷ŸÎð|:ß·ýt-ÿ|†÷U(ׯ¥sy,²SdìÛÕî}•ço¯ãü‰ú¬Ôy±Òób¥§”}°>!Ã*¼Pá¥úû¢hŸ;QúzWý-gûŸ«xÏp¿Žë•zý¡Jw¹~¬Ö-÷Ïfø¶:îo¯¸ �ŸþŸ®cÿx¥¹Œá‡*�ª}|¨Þ¥ÿ#µÿÑ5úüÁZÿCu>¬ßj=xñr†Ÿ©í â~¥òáýuÞÿLå/yÚ+­¥¯ÍðÝõ¾Ôo†ïÌð'2|´Â§U§<+ròîJOç÷føD¥§ôUlú_úüR†ÿío¦æÉæÆ«o¤'®Ü|-qñ̳O=yã�þ��~öÆøÄ«7ßøÀk7Î>õê¥×Þ¸ñï¿~ã•üè•Ì×_8»ñÆðξ1¸{ûïæÃO}£é=ù±o4ÓO¼ú7SúúkßHoþKßh^ºöŸ4Ó¦ÿߟ÷Ÿ¼qãå/¾ôFúÁ|3x2×|±ù±Bùø~¦ñœª•ØÓûãBlePù½ÿ Òžïó8œlÆUÇú \eÜ�™YîËØ ³0£§Ƀüÿ÷^í7i:̓8ÉäLÖƒÙíŒ3�ÃæÞì°ÙŸ?ÞÜXÌ{i3‰M³^]ïÍî>Ûô&ýþèþééõùôÚ•ÅzÔ?šŒú×f‹~ÚÌHê/æW›[‹Ãfpåf“n5·Žš;Íß™dNN¯ýü¥Q39ýüññbôŽ2ÖÌšÉ^ntœ;8Ùt3_O›No-ö)�÷Rš¬ö–‹Ñ`º7ê/ŽçÓ+ç5——¦³ÍUiyœ;?ûD“»ËÿÏ“³xó7šßÊRq§ù`æìfÆ33ïÆçrp’ù˜9›YT•ìÁýñi¾.<>ß{pο÷Ïõþ¿~5ÓŸÇÖ<½Ê4�F�§É•éhðhÿ£óåÇz'ËÜ{ÿVóx&d‘Yx/}fòdÓ_®™ºÞòàì`Ñûf“4èߨKƒÅÙ×ëÁz1œ�¾œ¾üÄ|tédz7Y¢Ÿ<<ÝHÖç–g�\Z|is}^R ß¬ßüï³}³yW–™žqµ„ã´Gáý{'÷ÜËj½CJ³M¥Òðþyà ‚sÉ£s¯Ÿ{_;e9n^8=ÜïçÿeM¿ù»Íog®f±mžo^ÜØ�sÖ¦œëÕƒ»…Y»œnر13¡ÊJû–ù¿~¾?|ê‘Qîk|í/6ýkã½[YµšÕÞó“,——óáüc£É~YFq¥7¼•ÍÍàôÇo ›áõwßùÌüètzøÍE!ö\1¾ã�OŽwßû OC¦}œš¾ýöà™›Ùh ³\Ž—ïä• mÔµüû�×öŸ?q'�oñæÿÜü/ÍßÎ+ÉÍæ^^QšÍrro¼@˜Q‘þ' 9Ê#¼¿¹¿5øŸ]_Z]KÅæÿ-O׋f±N''W÷�³äö¾zuïÊ䑟»:[¯—{ïæòÒÙÓýA¯7Ü~ÿ~êF—gýËãQ/ zGMïs«Ço,/?3¾ý©aïÑ&Ó5Ërý{ͯ5ßÞ¼Ú|¥ù‰æ§›é/6?ù§¿ú§zÍÛ 1BßÓû›‹LêéIÕå¬ÖHîýÓ2wO‹Œ…ß,›y=بó(›Í�JœžºÓ¢*(J¶mŒ3¼3õNóœåñÍûëf1ž5³Y¶öi9϶`4¼Ü›\JÍôlzpÖ,g«¬¨Rz_¶N™çO?¾Ì†b9Ÿ_;ž¦å»š½ñüè•…YÍÍgo5U©OÓGÒiµ°é¸ùÈæ¿VÌh–ãÕY�Ê· ½,·ƒ~óþÓÁh°Xô†/f+Ò›:Û°é¸)«C,—‹Ë«ƒuÓ.‹Â§qšŽS^X�GÓ¯Ÿdn ‡³åáa¯w´¿ãíãÅkŸè]{å‘I6KïHé03eÔŸ®îŒ§'årpíý£õ“7RïñéðtÿÎìW‹½-n”yÊsð““Õ|�íØÁô;û“GŽOn<“šÃBÏ�ù´ŸöýÞ`ô¹ýõôp™fyýïOö×ëƒ^Z�ì]>œ��þÊf’O6ÿŽú™¶A¦z~<ÎÚÜÛcãéQ–‰aïhôDã0ëìÿØüƒæoem}GöjžkÞWæá-�-<~pnàÏM|þ��'¡šû"Âe¡×ÿo­ÕÚü;žûýãQs0<=Î:œèét�òR×ë-3-³³këýÉú M¿p)íO§_ØÔ9ÁuÍ«qÊè'óÏŠ`L¯¾|róöñdCÆt}÷ps•�•ãæøV†ì½Ÿ{¿–}ª÷ç¸ãÇ›¯å¹ÿG_ü©b¡Tßp®Ñ£sOö­…e#™÷Ç„<�›5t\Uýþi5 oÙ…bâË Þ;©î{qÉ6.Zê\yãèdÙÏZqï­Éüzñ²]=H)·›ÌW‹lCŽÇãf9ï�]:)Vý»Îòèò5]ß3^œÍOzýgîNæ“õŸì6k]óèr0ÌÞú`4LO÷}ïJ’óé|xtX½æ‰¬åGe’m¦9ЏŸ‘Ÿ@{Óǧ¿ÖËÒ3_™ï J¤ÐކYÿûý“Ùàj¿x4Ï]î¥I¶9n˜óùürö�³m:íÍ?že'[“Aÿ‘ƒÅp<ÉËOvC÷zÍåi¯×M3Ž�$.?¼7Ês»ÊîâwÎÇŸ]׳Á°xñ{ÍáäÓ³Ídæÿþob™/õ endstream endobj 19 0 obj <> endobj 20 0 obj <> stream xœ]ÑÍj„0ð»O1ÇíaQ£ÖDص»à¡Ôíh2Ú@MBŒß¾Ù̲…~$ÿI2‰›ö¥UÒAüa5ïÐÁ(•°¸èÕr„'©¢”��ÜÝþ|îMûp·-çV�ª*þôs‹³ìBøñ»h¥š`÷ÕtÞÝjÌΨ$u G_æµ7oýŒ‡Ô¾~Zºmï#+.›A`Á)…k�‹é9Ú^MU‰5Tg?ê•ø7ŸæFþÝÛ°üè—' {ªƒÒ3éD:’Τ&(MI'R”¥¤‚ÄH�¤ŒT’ò F¹œrŒvÏi÷" *U)©Jq •á’·Û\¯ëßî½ä«µ¾�ááBÿ®�“ ïok´Ÿº~¿§i’ô endstream endobj 21 0 obj <> endobj 22 0 obj <> endobj 23 0 obj <> stream xœí� `EÖïOwuuß{³�@¾‡ ;˜ÈÙd‰€‚ T ¢ ›€€@@DŒÊĈÈ&.*Œ:€Ê ƒˆŽÁq\Bß÷?ÕÝÉÍ%}3ßÌ÷æÝ„§ö½ªOuWwH#"?=L‚âÆÜטVÖßà0ìv"9⾡™c*ÿÉ ‡ŸAõ{GJ?¾"¹—hèö÷=�™üÜñsDZyسFŒ¸khÌ3Õ ìP ֌賗l˜W�fwß;ix÷†ÍáwðA¢@ëácî¾oìuFÝ™ ÿ Ã&» Q¬ýÓÇo‰àºü”Ì.åï}©>� hÒ)ŽžäŒD½,¤a¢áRÏóˆDS­©ØDï˜[hµ,G9ÖJk¶¡GôTzGT£\°Ö jÿc¿Z?M�ÇõÍhÉr4œY`ÈœÎB°Ì� ìw`5§áa´£%(Öl9‰âäTÚ/³hœY2–ö+i¿™ »AûõÛ™`–l÷ñp?‡0ù�ÝiœqØ‘r!Üh¶q:xQ§Íœ¦õ5u�S¨ Üò!oçºp™!ßSùS0õÊ1ÎÑÄÝi §±�c�<«D�Ù,KÓN½íÖ[�Ï9fëídw㬠¿“É®°×§Ñ"‰šÃo“± í5�Ò![±ÙH¥þ²œFúfÍ`é¶¥j{´ÏFn#0ôæ0(×íài•Ä;¨çY§í¸íÙ ~GÁvMi0¸Ó mâoâöçþ�= îsâï¶vÓ\—;Ñö U»êçã¾à~ýÐ <‡¾°!MôOÀë‡+Ø¢U€®ú"î ã¤@{¡Ý‹Ã:9Üé‡PÐï¡ýAþ\PíïöC8ªÏRgî‹P¸/T_³D]U߇KÔ]�…¤£èsU#<^ó®.y<»ñŠ—ë²tð¬Õr!e¢�Ï ž‡ÑÖò{Ø€<{.Ú!KÍ ŒGc;Ò¿cs„Ç©š'«ŠñnGÎa)ȵ†t;’ÎýÈm.Íét¨ÀÜ]�ñáÒ·�Æù£ž˜ƒ<\9½ÀÎós£$És–çM¸Tc†ûíWJžïjÎñÛU8ïÕÜ “îü®.O—«µ‡çñT¬g ýáõ5úØ\PF�-ôç Ô}¼ñ¬‹+Ñæ§©>|ˆ|ÖI¬GÔ\ ÈŸT?ì@»¸<˜W›e>Ö1·-­t7Ò›`-Ç|)ƒt›#ŸÚá®e÷£m2Լ˵¿wÚ…Ê{ícž ‘N®Y…zȽÿwÔõSŒi¯ž})Ünœqü:|¼qÝP�þ<Ö‹”Ù�çãëÃxç¡Ærx>X—ÔÚ>ïÃæ+êøò؃v’�§¯(ÇBz¯È8¯sØø–­2P'wž'¿@›nQëÊXã H¯ïÂÊSÒ¼ó¤7ÞÅAzÌ|ƒvŠ�¨9·�•Oc9)xyDc<û1ï¿Y• yáúÙK¥^ß”;Z] ë¯Ö3Íí�…@=cÿGä=b“rw®�;�»hšw •O®Ûæãô Ñ‡f7ÐLó:š){©µü¸\ì†õ#Ü^\£€»Nït¯»±ú«ô¼þz@Ô£nâKê®·¤Ýòyçì!ë#­$çÕ.'�æaZ*;ÑÑ ×X¦'@‰.(g[z<`�ùˆsÝÖsƒÇñ2ÚÎ�oŒ¿¡|û±V^Ó±¶` qû1Ï(îãyŠêŸ5(ê+s@+Ô)Ýþ^¦#ÏX¸„tݰ¾*·@E”-æø)jn¶û±N­C�[#ÿjÔŒ‘]±Fq}ZÓxq-�׆¿ÖKÓxÌáÎú`ê,|T�Ãé—¨6Ú+º]6ô�M`3Ø«�GXæè QÈ#è;z†6Žõ¤B;t&¸A—­pÓƒ[5FT…~øe Ü{°¯„ü²;äVð�>+„ü«�²÷¥Éz>ê±À)‹øž>Ç-ÏQ#ë‡J‹¶å¯'º ý=7ØŽ]ʃ|îÏA~Ù’Ý.€w`ßùä„cìjp_äœT˜îåZººÝ Îå‡A”K-WNÝüŽBÖÐù/'�î!ù sò÷òT„”Y1á3‰.ž‡y$FÞå�ƒMËåN—ë£,¦[O¯þ[œ²çc¯rù]·\§DGæo �ÓHuö œ—j«úŽ9ØvNgLQ.×sÍ1÷óh·yëW#\—0¶µÎ¦bL“¶Õ[X²¾Ïkˆ;~>‘�Që¥òçà9óçàßE‡àyóáà÷æ“ÁSæSÁã˜ëÒÛ °~â­E¼.òšÉó‰¯Y|]`?oÀa”Ή0¼PëÖ\^ÕÞ{å�k%ë­J/èˆ2bMRë ÖãYZÆn²½…ù]]­«¼f ¤{<S…ÛFo*Ýz¶‘I]� t� ûuUkàf¥“²=C¥‰5kC+–æ+4›ëÈî*$»©ëÜ_�öÄ]N·š¯O±tãÜ€¹>¦àšÓ„æq¼?‚ió xÓÌ£û¥¤‰V&ê‰4ÍxÔõ1û!ío¨!t“žÆqÊ0kÁûU¹Â»vP£+Ö9äáí�ÔšÏù9ë÷^¥¯óÏû3nó¦4 ö~žž¤¤»G0»¢ÝO9{9¾þ9{72yøÞ¢¾¾Û�0r“ÓwÆç”¤®‡Þ�ûñq͹‹Óó­¦:²Ú(ßíkÄCø¾\oLô;ëlÜïœæiš¤ú½Ü¤—|�#­·þ÷ÔÚ*åäƒð£}kè0®ksÔÞã¯è«mhƒëP×9èWÔßjJùºÅã[�ñ£�U¨»é‡låî[¹×?÷H_]'>AZØûÉûᾓ²¬Þ¸VÍE¸¨­y Ü8Ÿ ôëàâZä^+Ñ7�9öS×%gïyA]ϯ§îV¤ÑaŽºå᱈ü ú½U•C¨ªõêeã:éÇ<é@©þN¨¿ÀÜuÆÑ=¾æh‹¸®”ƒ½Ýfþ û>A)ºEú£7ì®´¾ƒ¾ ËB_cl�õ�¡ ¾´ÂË×Ó— I­°>ý ë†^qøÇû¢ÿO‹þ?÷7±nÈ‘Èw*Õ@ÔVýÆm‡>Wí>œ:;èzƽ íäþç>à1 úý¯ê^(k@¶AùS̨žK]h7®§û-òyÈ>hãq^áN�î«�½‚jK¾_€~³&AÇ~ëÆ÷_¨äõÀšM Ð1Jy’ÇyAYÛ©²½i6Å<D�¼2©±ˆ}š—–U}�Âý ·tâp|¨¼¢]\�Ø[‹=Y’ÎÈc_�1ÌUÿ0é•Ñëž3Bi*Àó6‹9|OR& üÙÔ_t‡^<ã¹%êØ¼ã˜QÞÚûX¯Ù¿˜÷žp�ý ‰ë`¿{híeÁ-÷&ì/Âü(äОÄ^„¿“æèëhŽèƒ4ê€ N©ÐW3­i¦¾ŒŽ£Œùê~Z;Z"öЬůbÎÞ+N7°4o¤éê¾àšn\KóX2²=í!ÑTâ0þ½4]±ÑÁN‹ã]Ìo ÷æùºÑ#XCîÁ:½H~H ¡Ì—ŸÓ΃Óà|”ï³Ø +Ò ´mOú cìïFwm;(‹vì ºƒ—ÀlдvÉ3õ'Õ}âÍÆít+׋˄´öëé4Ù«kI„¶A8mòK¸í%òƒŒ6à G¸‡¶eX{r;r‡jW`Õ¥é¾QÉíìÁöâà~(úã ²Ð_\¿EËéõÃ}XL° > íƒ�{ìÅñ±ËÓê>öÝ"C­ÉJ/P:Ê[ŽŽb> ¿Gh7hÝ•u—Ýú!jcm„Û>\C;¸qò$ÒjƒëÒì¡áÇnœ»)¶Œ)ìc¨=ÆÄZHì)è6ÇÎR[ yTŸNû¬9Œ~:˜‡2çâú8]fÒ<ùÍŸA×6¡[²ýaè³·¡,5éY7”m¡ßDw �?Ò³&ü¢Ч)MÅá¸)ÔS–Rzis=$ã`†»y3½÷û ŸÜaô‚¾×+e»”V”|¼Àa@e¬¿�¢ÉX/&‹MÁÃÆPº]|‹kG-�nƒ=Ú¥‡@[ÄéÁá!WªþªNè,Ê;L‘MT}3pmI¿óµ¤‡Ó¦Lùg¬Å£h”ù"�Âõ�õô^¸Ž´¶zQ¦ÈÆ8ø×�7”5mºù1¤QŠôS/«âü„1õ£ë~cæ}\ëpû éâü¿yHã2ÌypÏGBYRks7ÒÇܑӑÎ^˜ßBœ¯¨—‡¾ªžÇõm$Û+�ê˜#\¿Dè{²‘bºÙÕ ?s°ã†}ã@È€¹Ò‰¯ÂÔR´fŒÙ�*~-˜ë:qÄs”ও©¤W–шÿ äHÄa·'œrŠe¸¦.G�že˜¬?e¢‚÷/Â?LZ» ÇAçò$ÇqÍ=Éñõhèý1f‡Ñ`E˜™dWî¤Î"‘ær¸?àÛŽUŸâË;±$Éq�xš«Í¥¹áÏbä'ð/Ê$ÆŒ:W¦ÍWÈ{!¯CÚž\ªä¤ù�˜Ds-‰°ãp¢U iZÐS-”¿�Ž!(7“÷|õ cÌ„œ <é¹—ä?yÞ€¶½�®75ø§ÂÍ•ÿãùNF¾:òD¾_QÛ=\7ìÅö›µÑÆ?CV†Ý“ž{Iþ?#Ÿ²È}ÈÒücáC”Ç!ʵO uW{ÝN4Ñ7 i°Ý•Œqé<ƒô]‘VÇ«¥åk㤥¤çîÉ×Ý•œ¾{‡a>ììÏ]:† Ü0Ž÷›>ä—YxÒs/É?m3õ åfô«‹U3 ìÍ‹WJ5”÷`Ékø\i _xWÈÄ”ÖÐýf;´��ùî™â^’ÿl·¼>|޹ÓGíW'ºì÷(© ½¶Qõ?ªÖ“¬"|@7»Ldø9¯ <ž®X ×…>.ÎzàÎoŽc®CžëP‡Ž¡vc:üÑ\ß�’Áu 4%eh®‡ÏpðìòIØ—©ñ>N Æ´LFý’©†ËÄP;Ú& æz]�DãÄ›hkfôC”'€9SÊ!Š<»ø(˜'þ]es0ÏÌó_Ì üæ–êºåÃíM¸M‡ÛMÁ¼(_H¸1pK) gJÐnkœørb0Ï(}*’u·×)J=Ï¥¶ê~ïñ>¡ZâW{©Øu÷´ºGÈç-2|H�Ï�óBÎ}(©ÎP„BÔB±]Keô)OÞJyHƒã~V|®î]}”+°‹ÆÆ|Acµ�¨Ž~™êu©N¨YßJQ"•VƒÝæÚ#¾ %|�ËfŽ ¾ÀèÌññýE¢Zº=×=sœk ¡®ò-aÄEUG>¯û©K}³V…ã³YÃo”\EûÔ³´;©½9ƒú˜é´Ïj@¿—|¢Ž&|+‚ù{�Z[~Pç ûó¼Ssï[*�õ CÁ9’®t»ÌV÷N§âúy«ñ)=·¾¬·ú§b3��?ÒÝ2#xIì¤J²ú3@­4п€–ËÕTKþmØez{Ì©tÝ5Ð?}ÀRëźëñ@è·éPOýƒ`Y³ t«ft‹w.;ðcÁùìÁ!òNÐε÷Îo»æ{�y4×;Ç)E¿ÞéÔÉJq¾(.0æ[Õš6ÖDjã�Á<_xÖžuaµ—ü=í–0GrϹMEøó?æÊ­•¹”Za_ÞJ=gpÏùñ¸òÿH“8-–hÇq|ö‡ÓGùÒ1ß0ç´5�ã]éÚµêEQsa¨(ë†[çÆ[âæ^à7!Lr¸z` Ø"O¸þ AOðg^Àaðta\! ËÍØÙba8ÊtóÌ qË(¹¼Ê¾Ö­ó.‡"õÏ(l«Ðö*h¿{ÜpÍa ÙÙ‘¤µ«°“ ì‹æ^^NÛÉCÍŸrØ—$a­ðÎøüLOÉ�Á‹ Ì/1ò :j–å´f,­bdæCÈ{꽑òÚc(�”ºÖôÇØkSÀ6úÌÌ[´J˜Ó/1ˆ‡ë´–‹µ~8dKyœŸÓ‚½Óx³�÷ñYÄ0³ê2‰ÑéY–!åú4´Œà9õnчa𴎙[p�úú¿H3œ?…âBK±û„âò/Œã™? ãjù ã ×=T¾ÚW¤ÑÖe ½ö›qÇ–‡QÏ!Üý J¨ú`ó�`Òúû°}<ö‹0Æ4Ÿ‘:MWguú‡›Î°»üŒ†1!íóGíÁÐrD ¥¥Ì?9N…Ù�úHd±Bÿâæ©g÷wå1>×îÇZÿDášä ¾ÒZ¹ºÚ{ž43õ f&ÖOò{8•°§ úIͧ·î-šåI£¾öæe=ÿõ´Š‰êåÊù” ³fæSï�X÷öBf)ªÈaà—„u ·(ú‚+Ý ÝMhØ&ÑzG†ši=—eln-D^Èû(kÄ™œÁõÇ:´â×`|ÌsÐËiûÐ~­J²³ôÌŒ?4�ßâNxøÿm„·»i™®=Ó!¼¾¿Åý×Àq‹˜_Ákã…áT¿�)o�4¯ÁÞæŸB”ÁØ£BØMŽ-ô+)Žcæñûk�÷:xvãn÷¡`#©(Éþ[Ã).ÑqÁ‘à~Wþ"FsÅN³/Ê»§Q�ÌP â„—ûÛâÚ!4Œï�¹Â?¼,¡é®…?ÀZ¯`7¬°Þ�€Ì9`˜ÉË`¯¯Ür¬J4•‘wÐT_Ešêÿ‰æ4Z ¿í`c´§•n:¼¶lty†ó±o6NÒÈ—]9Õuç|2ä@ð3åÈÊ1o¢ãv7Äc)_Ræ ®Û¯a¶ïVÊñpÜô,�¯qíøÌöç¬ZðÌ?C æAnýØýܪBÞç–á&Þǹ~¹ð»r?øæ~`+¸4)ƽ»ã®Ý÷�ý!Ï@¶‡ÜZh§OÅ»´QVâ6Ò2aßû«úg´Qœ¤e>m4«Ó£n®º ^;»hךpí(†_ß¾\NUÖ‘à]˜cŒ¾ªO'9}«Õ…|cM“tÞ%ûÑŸ×ômôœ8ú¡ëAZ ®m@> 釜ærðuº/˜o)åe§µ�¹ öç™°?: \z(Ötölé®ìâÏû¢G‘æ+�õÁVÐÔ•ýïR!ÏC HNëo ßtöe!h½A4h뺽斛óéãšouiìº7qÍMBHqÊD+ÜtÒܸ^zì÷‚˳.£\¼|Ÿuë² LwíC]T:è“á`r9ΞR‡¾®›úRÚ2�´ d:uÔVƒN~·ÕC æÅzm8’@ Ð`�§ï÷º÷Àžýµú‹3>þ¥Œwû3T–Ä™\7-/,L}-Ñ�¦9h­Ý>p÷Û}ç™Ç�,ÓÙÛ1㡳ÞzòµHü�ôGz ömê›ã°þŽ#ìÕé60Àtîôô·§ñQÐm�'K2³�ùA˜7 JF<úßíÿÿ;ÿéöÿOûÿÿ�YxO�9‘z*NÂ|ÒùHq÷<”ž\xߢ¥G`eÑ{[¿Lð�bÜïQßéøçïEý³÷°þ'Ò~Õ½¯êÉæfÁ=Su´¸ç¢Ÿ:3¿´WPº>»] Z ¾gàP“÷p»™áwîÕ7 Æ?1S€Ïƒ|N*)ø•wÖ¥àL‹{¦‚ß¹WïZòó ~ÿþsjã7©ƒõ²:c1Â{×{Ç�Ÿ‹ót'¿ Îg³ø,‰Jk'Ýb¼M•�G©—Ágå^¡ßY]¨—DÖÓÔÙØC�Ç©—õ,ü{`þäÛÔËG™Ö8˜_¯ÓuÖ0ø=ƒk Ÿ¿Þë„1¶ƒ]Šã'ø‚yöò/£LÏSG«ì{þm•F/YašB6 ±VEÇÈñ”&3éF™HiÆCêÜb\Á»¿±4CN@›é¸ú†ÏyøCzqõ»a7¨®jÇvÔÖ¸Þñ—u ù\‡¤Ñ(óh³%�Vï›þDùy Û•4èGüôÔ÷†©s¹Yåãg%µ WO¡6êŒÔE·_ ÷~x¸Íu%¿£ßŽò ¿7ÆÏ=Ãë¿õ~¯{†•Ÿ¹ïi_TgÃøy\»àQ£<ô%ï½bÃ+ÝïA¹ï{«çW<¾ªïä´*8ëo¨oF­AüýE¾ý4•‡�)Õ÷ü.¡÷]¢ñä㳡:öKà ãz‰a3»[¼ï²¨o¼¼JÏ{ïÁúZQk+�ÚúÖ`¬ì¢1Ö‡tØ|ƒvû¦Ñ]V7ºÇ7û€¦ÔÝí÷Å…œ-ûex…ÆNÐ8_mÌ µ4Û/ÊÉêÝTõŽª÷Ω¦¸o$üZô 4\!i�‡zOáÍÅxã­I–‰r¼Hͽw3ÕÙÓú4Ú¤8ëMñgC~™yŒ¦Xï æ…È�Ž,x&Øk`Åʱ´_$Ñnãê#Fb¯óÖ«ç(àÕO­‘ ÁKò$öi)Î;“êýÇO÷9ž¢Ô»³_¸ç7ÓwB§lþ¦»ŒÛ�¿¢Þ9î‡6O%é(‡�µÖÀXâ³1Æ�!º:~¨ŸaŽ.7žFy¯¡NüÞ6Æž:Ç®ž•bÜøWPíUz[;G ôX¥W¦!z dûî�¿ÊñÃÝù{GY¡ki”â2�²ª@nrì²ìˆkŒuìþ�[Ávì‡.¸q¶!LOÇMƒÌAÛ^tÝëºá™ð¿Ö5o£éÆûN£Öø50oÄ>Õ+Ç:ä] ñaæk…9Ñ}Wç×P«³Û•w`Ÿ%œA�eÀÁÚå€yÞØ<�ñù4m›ü‹ÁTÚÝš6ñ;£|ªF_G]eYêa£MæµÔßj‡qÑ×Û7Á'0�‡›FCxýVï‰n ®ìÏï¦z\ñŽê§4@´£ü~ª¾–¡ï§ŽFØ÷½Tï�ÔbÞGå÷W9]/¨Þßí¯Þ£3µDy"¸Áé¼ÉÒ{ÏR|€üïAy£�ß¿4Ë9ïa²ôê©ÞÉŒ¥EÆõ(Sn0O½çù-òâ©ükºå(Fª÷67Ðt/=O†»ÿ¶EÅýð·Vø‡¿»B¤÷'¿ ¬dyú�cq+"ƒ\{y–ï*�qÞWÖÇ8ï,s}<ûõâïMŒqÞe'ê}Õ®´øjãéŸaã�ßé ¤ò=ä•Ì»ÂÎïû‚ýúâ»+íê½jîëÁ°/ºÒ®Þ·nÏï\£,Ÿ…Ø;öðù ÞÞH÷ØÃÆ¿l–¢…hó<ýy¸ñ;Û}h¾ÑæìÂñÞ®Þ¸ oáýc, 6BYAž…Yîwо¨‘p‹ŽÖÖ}æ÷ðËÅ5èOˆ7nO@'.�8Sa΄Ž>iCÿ6& Ü•vçËé²äpüéZýoFž‡Ž{ ºíúJ~ ½g˜óUQ‹†‹šÁ,S­ tÐTÚ ½ŠŸëÏ‘9п×ÒËrÅùNPó~ºW®‡ÞÜ º[-Ug½XæÑh±×Yþ–ÙY\ó> /õ‚ŸÈ¦ŽÙ_S½Kä|'ÇAœt¿‹ºƒšË¿Ð˃m¬Î”.GPw\ãÚ@¯èµï¿Šù´ü_ñý×ßw^Ѧåè0Ýý&î@°Ô=kyƒú&n‚:Gùë¾�ë~[¢à› î÷ØÎë™Z#¾Áë¤÷ý^yÝò¾•úmN/ô{ Êñ½o$ˆë°f¥cÝùƒ#Ùnì‡äµè¤c·Êóº 3ÖD«±+Ë;~^|vç5U¦¡.wÒns½#}‡ ¿ÃÍlv8f-ø5ƒýF˜[¹²–ãçÅgwŽËáT|„ |Mûþ0gþwàküo$�Žý[ó 'äyx±ô§'ý™Ô æ6þ´BwìÓî(&ü«¦÷o¤˜2&yæè£W„o‰ðCXr]K ‡(¸ÃýFã8çÛ„—£!?pyÏáòJÈ/Õ·5²°{[Tˆg/²— ÕÓBt4Ï_ÛZ4|¸Þª£^Í,î Â5è(ÖæRú·ö÷2S{"„%.ž}˜WŒôÌÌŒæñwD´D|/L}ó„ê•Et‘JŸßÍz¤÷-Yõ}h÷œ¹z‡²½©î�àZjnÑ^$çÛ@Å¡¾ÄßYUéþ¦ŒñKÔ;ƒÚˆ –Î{ÊÆ.–hõ­–EÍÎ7bXuçoјϲDZê›4,•¹�gVߨÉd ΢~gY¢L‡¨�~ˆ%úp#®Y"Î>ÄÝÇévàïÙ° +Û†X‚“¸vœd‰tÕwmXÂ~€ÆÈ,‹¦7´^¡q‹˜ù9�X†…1ó÷I¯¦Ó™¯hË ¾›Ç:Gª³W*ÂHg¿Jè>©$s‘½Sè¾)t�²?*r¯ s‘ýQˆ™¿³dbþ0¡{öÐýS¨9|Ÿ_œ¹Èœ(ɲß*ÉÌ÷ ù¾=Ã:‹o�`¬g(Iž¡u¾ó´.êZnöðw þì@ï2Q½¨·G¬í„¹ò7¸¦À¼œh›eJCè5¨—«'wÉÈM»¥õ}j4lf­gUÏ¥^¹1“ªo{õ7*ɹ²r®HöåÉI§Jò<Õ°A·^ý«ç^¾©ƒ›êMC:À­OÙg¸ßÔAùq¦¹2ÿº É­>lDõÇâKjùXÜ]-Òvýá´à%[\LÿH?§ˆŸ²Ä�±â[\°Åß“Å÷±âoYâ»dñ×Çn�µÅ·Yâ|–È»(¾¹(þb‹¯[Š¯Ú‹s¶ø2Eœ=ÓGžÍgðLqú‹ÆòôEñEcqÊŸÛâdŠøs‚8‘%>³ÅñÒâOSű×ħ¶øÁ?ž*Žé$�NG:‰Ã¬$Ûâ�•ÄG¶øÐØâ¶8”%¨*Úâ@Uñ~ŠØo‹wgÆËw+‹wÊŠ½¶Øc‹·m±ÛoÙâM[¼a‹×m±Ë¯Ùbg¼Ø1+Yî°Åöm¯Éí¶Ø¶u�ÜöšØö°±õÕd¹uPZPlM3^M[lñJ–Øl‹—m‘k‹—l±)C¼+6nH–3ĆœÒrC²È)-~�Bÿþ¢Xo‹lñ¼-Ö•km±æ¹X¹&E<+žÍÙ’�%ž±Åê§£åj[<-V=UA®ÊO­Œ“OU+ãÄ“±Â˳bär[dňeˆ´,K,]+—ÖKbÅÅâE¯ÉŶX´p�\ôšXô°±ðñd¹p�X˜f<ž,Øbþ¼Fr¾-æ5�¡š�Ý æÎ‰’sÄœ(1³3Ä,´Ô¬d13^7“ÆÃe�v@›«7„ÛóôFÈÙt@ð7Ú»R*ñß,:&uº õ¥-H£…– µ°LƒŒÆ£·±Ý8g¢æÆ8ã�1ħ¥Šçdº|´ïè¥i?U£íÚIG;Å×"Uì2:±tR9t¹ð«Ëh!­¥)(K‚6š¦éSôÞpyO¢•ø ÿCÚjí0J·S›AGi…0ôδZ;Šz i†è«O#©úp”ÿ=¤uñWÒ8ƒäQ-@¶^n[ÔßZºSý_E4”GÕïw4 9÷¥µæv3ÁJB.ÜbÏk{´R°¦¢ÖD£ES ÓÚD›©¡È‚V2Å©¯Ù\þˆ˜«ŒS¨óBm�þ#¨. 7¾E[S‚Úã¸?~[°3ŠvV¸¼UˆÞmÝÄÝ]ùíȳüÿb¶â+_”@ë"Dˆ!B„"Dˆ!B„"Dˆ!B„"Dˆ!B„"Dˆ!B„"Dˆ!B„"Dˆ!B„"Dˆ!B„"Dˆ!B„"Dˆ!B„"Dˆ!B„"Dˆ!Âÿ"tngÃåZdQÅ´hã™—4Ÿœ¦Ôxk)îHÞ‘¼&eâkÄ'׈¯1Ü üq¢RþY;ËŠýùûûͺ¤Q®ý½>Å,M1Ô<­”¹‚–ÇÆX$J›T&÷Y·Ü2}ûï @ð­ëtË-¥Ì”vý€3)yñ-Z ƒü¼&š©'&”.—T[oz]éæú”YÓgÌÌÎZ¶t¹YúK»í¹sv«³ßhï~~RÛ›‡üÖ"¿Ñ*¿ji¥,ÎÏÒ(ª´QÆGȯõ…Âtˤ–-�˜ [IÍJ7½N_‹$—eeÏœ1Ã,�g·>ù¹Ýò›³Ú;çÎio!ÝcDò¸4(Š’Òâɯ­²„Ô *0}ÑqŸå·Îo�i|ro-¾Fb�ø¤øMkÄ‹MzÃˇ×_>¬7”ÆåÃ9lÈÑ"ÍÕÁÒÚ²IR…´h±šf˜ÂÐ*PyÅ;rÐ)eóÔD‘Tæ»Ãkémo´ßÒÒï8 ´ ñÅo£:G1¹«ðIǶm„;Ed ”G¹IÓÛ‹lCÏ–�X”í÷U3+ ª¦EÅq[]ãVÏÛë$’r�»µ[Ÿþjj[J‰R†>¨y�xÙ49•«ek]í'µ»Þ׺æ¯Í1ÆuÞÞùâÑÕFYȯ«üŽ*Óê´k*T¬$ÊWŽG“ÅKi´�{6~iLvÂbƒ²uŠ èZ r¹8aV‰Ëط[nÙ¾·uËMè{Ê"x4`|½õV|ény.¨òXqò¼%Ïk¹•ãâ˵@éÒRúé2ÝšlL–*Í®`dT0*•dåh‚9¾â¸JTžN³*L¯8½ÒôÊëi}¥øA4(ÕhÚŒš·Õš^W;©¦i5m«¥¦‰ ¦e’6Wß�ß}œ¶ uèÍ/̺ãpæä#ý¿Ònº­‚}!''g¢¶¸å}Ë»LÌjãÁkS¾zûöucªØß¨ú¯ ž6Æ¡þuhLZ#J,˜å¯6«z™ìĘlÿ³rvõ%I‹Íù‰kê–­\†DB…ʵ«ÇU Õüf]n†²}½ð«@`¸–Sã5ïÌ…3yq_~§~Ñ.M´4FÕ¡Õ†VϨaÐ ­ª–˜`Ô¨Yûš¦UQ•f¨W}­©c(RAÑnñûCû«Áï�ì»ï¾7ÞÛ±nÓÖe«×¬èóÆýãöøR‹~\$WÛ»èÄ÷ÉÉ{®MÉZøè²ç'Ž7¥Ví-Õ«´ùÁ „u!ý¼ãJÇ,{$­Š#bHˆ˜ö$¢¬l©‰GüZt€*›>#ZÍñ(T,FU,š+v¤õÞ¼”xîÙ3GZ祠.ªk�ýèÞýÜ©õ¢¨u¦ô;šH�‘UV«Oµµú¢™ÖCëÝ3&]®�×&‹™Z :Ó¯Õ©ñöj¾ ÓÖ5»©}ôèþ˃erþiq(?u½�­ ÙÃŒžâ0�G¨²èí´(^#C:�Q-> ¯£. ×dG¼øØµ³–qݤßg™ê¯Üùe3ho9®Jë3Gò¼š¨AZ |Ž1Î1¨¹¹z´¦ Jk_J+¥—²JùJQš@ch>ù-ͧ›Âo”Õ*èéZ½WôÝÚ=S› ?(î7&Z™¾ÙÚýáèú“"Ë(çT^KÕ’D ‘¤ï²¿Õ“í)gõœsùŽ9Geìå bÓÅúÚ4û5>÷ã¿%¨» FÛè%]«L†Á/ŽWR+€ZC´´˜&2Mö’CäBùŒ4•I�OÚÿþûòèÅú܆;ítc­1mY™Ú¦Uª¸ƒbvHßöØùÚëbW•øÒQ�ÊäÓ;bvç¥`öbŸ9sæÂÞ¼¸½ß6Ió©úpÕ쪟W5´AÉè´ÔDœ§'Õ¬­©ñš˜PcW·cGË—§¤`ðà”—õë_x≘õ—7™�œŒ¡ö.ûgüîª}sàܹ€T=GO‹÷P¾kè\Zë˜h=6ªOµª>¿núT«Vµ} ªj5#‘fis�„Y‰sËïˆ7v$o�Ÿ_§j ªZ%‹zWòÅZ¾„š7Õ‰Ëß‹•ð ¦[ 5 Ï\È‹³ø6î‡oK—sû:ö\wQÝìºßÕ-�Q0VKl¤9ÍVM­fRèJÐXk„…®YjJY1¯Çú�sçÞ¹´ÝÞu?}:pϽÃß:}þ]Ò6¬øü÷í6Õ©Ó·oZ—±õžœ»jkRÒM›¸¥[¯äRµ–M_½±ªÓ¾éDfScEkߤu‘ýLéø�~¿èˆ èý4=**`Æ[>KÆÒç³ôx¡G#tMŸ$§ÉÙú“ú ¹4°Kß%ÿ ¿'>�U¤î¦%¾(?Dt¢^A”5*ÊJ¾Jþ„¨ÄèdJÖ’ôkD #YÖ4kZɾküµ5¢’¢[ˆfF3_‹è&±õ΢£‘f´—ifš•æëàïè•››NéZºÞ˸Eö6{[½|}ü}ý¢†Q†v—>RÜeŒ”#Í‘Ö(ÿШ»£GÇŽ§ñÚ$}ªÈ4¦ÊÉæ4s²5 ‹Ä$ÿ4ÿ”À„¨©Ñ³õ9raìrZ®-Õ—ˆUÆSr…¹ÂzÒ—Ö8+ú™Øçéym­¾Vl06Èß›¿·6øÖF¿ûªþ²xÝxMn÷¿»Wß#ïËIdeR+iüOKŠÒ’Ò·yöØ—g·ÛÇ�ýíûcÆ�ü,1’¹”-²òGþfêÑ endstream endobj 24 0 obj <> endobj 25 0 obj <> stream xœ]ÑÍj„0à»O‘c{XŒ1FDðgý¡¶àÆq+Ô(Ñ=øö�É.[h@ás2q2ã—MÕ˜qcþ»�u FÓ[Xç«ÕÀÎp�Ö�z»Ë½õÔ-ž�Éí¾n05f˜Yšú[7»³§¼ŸÏðÌü7ۃͅ=}•-º½.ËL`6ƳŒõ0à1/ÝòÚMÀ|—uhz �Û~À”¿ŸûL8·RôÜútlg.à¥WÆÒWæ�éÿÅuK;ú»³¸] ‰Ûå©V*ŽŽ¨HˆÂ©RNyB:†N’;•¢$©ú„ ‚P�J.I‘¨QŠó€¤ÂŠðš”)JbR!O$%¸þˆç(Q;ŹS%¤„GN $ÕJòšî�%ÝA‚j9Fø‘p¿)µçÅ}ÖWk±Ån¨®·ÔÕÑÀcî˼0Ì¢çXcšà endstream endobj 26 0 obj <> endobj 27 0 obj <> endobj 28 0 obj <> stream xœì½”dW}ßùªë7Õ3£žžžšžšRM©TSSªéi•J­žšš¦Õ­¦i5­¦iÆÃ0 cYÈB–±,dV«U´ÄÑÅK&¬CË!,! Q¼$ÆÄË’{±—°‡8$‡Ãññ¯!^Öë“uœ?‡øÀhßíºÝï»S#À1Ží¼?Þ{÷ÏïÞû»¿ûû{»;)$Ir y&)&3�¿õM�ïûÊ«¿�.}6-ýÄ�¾ñ©Ç_÷·&ަïßH¡ùè[~ð�vúÿy$)\YJ ¯ûø#?úÄSÿç}äæ$)T“Âk?ðÈ#ozãäϾîÿKÛ~)…vúùÐÔs¿|!}ÿ` ƒzôO=üÙŸoþ|2ñ³_O’£=üøýèÖ_û©¯§ãý\ZèŸ|¢9y¦ø;)î§’dâ7·æÿýà?þÀᕟ$–¸_úìÚ6Ïç¯=_³éâGÒÏýÉÄ^�½>Å�<_síÓúßµi_þ¿‹_u%¯ý ÿ2¹‹É�É™ôå�£æ[Nx(Ô“«…G’͉õ¤ž~÷Š+ÉÜÄ{“³Ég’‡ »ÉËSh~3L\LæÒ¶ó,ô“‰‰¥äTáñÏRRI¡�B5…f §ý÷©n/̧íöú.¸þ{Ï¥ä\ñrúþ\2“ÂöÄo$‹)ì¦ï—'M.ëÉÝé÷öÞüþCRÚk³”lwÓ¹¦åiý¢k›>é÷åô})í7ãqÌ?»‡wvÿ£I5Å³êæœ>ëéšfS\Ia9™O×ìÖ=(|!9‘>oMáTJ´i÷La9ù|2L>ÿüµÂ?wÏd8ñÍdÙ•§Ðpý\ŸÂ YOû×}¿aá Ï_›x_2�–ôP/\Lº…ýÉî™®ÅÒ­I¡”ÂÛÒ=I¿“o¦ïwω•¤³ý”ŽRN[)tR8›Âá´ì�éóVßþ×R¸–¿Ják~¬‡F´Ý›ËWGP˜MŸÏ¦ðïRh¤ð•Ñöž_õóü)¿·'¿™ÂoûòßHáWSx³§�[ÿDú¼�B%…÷ŒæôBûÝÑ\öæ÷oÓg-·ßŸòýÞîËÒõö§PM˾‘ÂÒ÷ʨ�›ï^]ÉÓé›~œoxÜ]?ß7û¹}ÁãœLß?–>뾯Û×)É�~úžÒ ØLß¶db8zÜ÷c)¤ã%k)ôÒ²·¦Ï¿žÂާÛS)\­¯àƺœBŠ/yw ŸKá'<=êþÝÑÁñù m÷Ù6S0OÛßÍw¯>Ý÷äÞ—ÜùXÊ>3àxçªoÿ _æx꿇)¾Â/¥OÇ7OzúüÊh~…‡F°·—¿áçÔNߟíË^ûwxžùiÏ×ò|ûœ_ÓF4Lޟ—úžpã§gsâY?¾ûNåÜ„ãñGäéd[* ¿âq¿ÓÏçÓ6’e€ÃëäÆƒ)|0…-ÛÓ-IºÉ/�ÆJ~Æ�ãt­Ó{ÿk ÍË-§+þ‚§•ëÉFrâ/ÛžNÙ“±„Nß¼ÑFgæ±Ñ÷ÎáË<}Ì·yØ�õO|»‡=­æS8™Â­�û¾Í�[õóp:vÚÓ·ëÁ�÷Ã)J¡h#Öòëwôqçê)?ößíÉÞ^¸½û{6’�ﳑß°‘,q8ïOáNß.ÅUHé8ál…=»ÄÓvÝ¿»ù&…7ØH¶:<¿`#]²èéãÊœŽq:èÍ~<'�þ¡�ôœÓÑŽ¦O{ºü„o3ï×þ”ÇwÕÓýœ�tñG=�]ß7¥ÐÙ"… ~ÏŸð4p8�íÐöøfý¯ýo6Ò5w§ðrßfÁ�ßõóLõ™Óm{öDÛÏÁ­åq¿ŸÅ×ÿ›þ¾�tç¿ñ8~ÖïË¿°/Ýë×ëÖø~�ÛÑðÙÑZ ŽÞo÷m]�Ìw6×�§ðO#G³¿éñ>�ÂïÚH§ºowN�Íõ¤º>N§½Ûãü�‡÷Jû÷ù6ŸôåÏú¹¹sýOç�úy+ÌxˆË�¾Zöt~È?��ögïL¾ÎF|êä�ã狞~ŽOV=Ý–ý^ªþZ·ôÓ^ç~Û×}_÷Þó8–,«·üsÑ·_õ}†¾ýU?_?�=;Èí眧Mj³îñ×®×�³ãybÛCºž‚›×üüÝY˜÷sYð¸çêi÷ oË·ál\”§+oûö-_îmϽyÌI}ß¿§õ‡÷~¼%ß~É÷]‘½]µ,o¬ ~èѺôå»ïqÀàe[6¥ÿª¯[—u;hžU™7kƒŸ›þ{ÑÓtοC‡¶ßﶟϼYÈÜ¡[GðC¿E_îž5߯µ[ôó[”1æó�ÿ^’ºš<™óœÿž‹Æ™“¶s‚·õqP÷sž“~s´ý^è˜1P׈ÆdÞݨ]+š£ÎmÜ<•FŒS‹úS¦ÏNôÝ�¶ Á´Æ´×5�Û�qcSΞ7¤¬áÑq\Ùr„oZêkÑ{ÍÓ¶!8ã56nPïúö¢zð÷£9ó¾µoEcñÞ³¶ø›²íQ=¢¥â¯E훲Oµ1eñ¸ �ÜüÚQÿqÐôk¯ß€Öñi£ç4^Ó8:êaΊ—ïx-øãæ—¿Ø:ø7>3ÊOÕŒãæV‰èó7xtκïmvšÑwmL?­ÓöÕ௎Á3î[Ëߦ�ƒÖ˜2·rƒòÙoƒãFP±,/ÝhŽ7’1ãøZ¿Çí=Ð{<ô'7ãùj›V„cVžã –m:gƯFëÐ÷eéÛ²ëuÄlôÔó«m[/2Ç�«³~¥�ûîŽiS»Î£Ñ�h6#eíÁq£1o4îw3—zô^÷û—}'8êØaCÙyë~¯ñyÜ;¾‰³ÅœŸ4g!Ðñm6}}Ó×¹ökì·¦ÿnú:•s= ò—§Ó½ÎG{Æ�qÙ²¶+ñ�K|ìã¡e}°%ߦcY[ÕµÙöswíóàÚ;ãq¿Æ§-øM�ù¶î÷ßÎs¾ÂSž>=~b®ßNô=ôï=®+¶==w<Žž_ûЯ�ØD#ZWÏïv0´_÷°âq¸º–§%~œ„uö¤ŸbÙâÞòû�?Äø}?&û;'øÝXUß·ïÇÁ¯p{¡gºå× ¢ïMO7VÍ‚¿íâ[>æ··Ooö°äéþ°§½ëwiT7Qó´Þð¸Ýœ*~~M_6:kúwü·Gem ¾÷E_ç¾K~mó¾Í–9Û÷ø‘¹à✰oœ1Ç33¾vþÞ¬ïÉñ}9[²? ñˆ] ñ9÷¼jÁ\³ ¨‡�Ê|cèÃÚ.X8÷È”y |Ðñß ~-3ôƶï·.t`/¦üwÕ?á;õýñÁz¾lÝÂcžfMO ì·žŸ íð7 Ã¼?‘µ´ýœ\ÿOŸŽ…PÕÏÚ«|æÌ˜÷k�õsïørÆ&¶äúLxúöe=¬yÇãܲàÛw,Ä·*ï–o[ñóÄOVûú-Z�ÃÈ�ž…x&ïðç‘8çnÁãXð´ª{Ü] ²Ïñδìí¦|®?øoÉÂÙålô}_âTëþÉYðíàmÎÈÐÓ‚¹ãZ¶ Á�ëp\ñsrúá!Ê»‹Ã8yädÏ£¾½“]—¤ÍC–•i|»MßÏ�Õ'£öóóyÔ÷½ìÇv²è~�ãÍÎëº9¶î÷™‹Níú¹Ì{:=mAnBË úlÅ÷õñ7—~a<Ç[ïóõn_]Ý�ûµ,{¸|ο³QÌŸ=ìz|ØM ±}ô{Ž^ràr3ž6èBäAËBlû}Õ´3Bþá«ÀÇsÒy0cAÖ5,øû«ZðaU· sÔÞfü†…8øŠŸ;úó~ úšØv²bhY}wÉ‚}×±`Ïmx\ó‚Kí°9¿¾M?Ç- 1ZôØEßÍ×9ºíú¶5¿¯±O&ž».kqóÛñýÜÓñ×âøè‘7û2Ú^”ç†ï÷?—]?obó<ÐÛé ?þÃÎÈPæ@_‡Ëåw. ¾ïŸmOß _ïÊzBÎ!ýØ«u?kŸZ OЫ‚ïª^òcnø÷%߯á}Ú¿3'ø†x6öÿE?ö�Ã=[~¼ ™'㻹=éq^òÏ5ßvË3‡²Æ–_“u® Ž�/G^A³u 9ÖŒN#·¶m�OÖ¤Þõ}À¿o `¿è^®ËØÛ~ß™Ãe�›or6ÐfSúmø² R¶æûA�ªBÇÝ?ûº%0/c‘[ažœýËBð)ž%_ÎðófÎÐzShL^|èi¯ ÞK¾�Î�\ ß›¾:o[ðïøu®Zàñ5ÿ~EÖϼ·皌­ó_÷´Ù|äiÜûÀ·Á6ÃOÞ�v®ï¬ô…VºVƇ÷ñ)Ç‚ Õœo‹Ÿ§ó[—ñ¶û‰�h^�3uѲh%êãôÂô e]i-–,Ø¥àY“¶ Ìy¶éû¡›‡tÒ‚Œ�Í�¿ƒîcÌ¡à"ÿÉzÑeðœæg‘ƒCË®u sfM´aš¤œ¹°O_!GHlâ‚… ýº²·=_nr…ø èÆg­Ð…½×}…߆Q9¶óÁ—GÛBÜaá'V±"ßПÞe®+‚›�ùa�ô£1˜kOÚë<Ø[ð@Gì]æ¨w–-äž¡‰k³c!7L88›2sdotýÐûuIÆD.ÅqäsÒõqf)ëEϘÇ5¶Ã ^3g!ÖÀ8ËøÝÍúæe8=»>7ŽŸŽlÅ]–1˜›Ž ÿqfUnC†A'üà?ï¶ÐùïPŽÍC>YÏ-Ïø�Øüª2ïŠìm8÷ì5ûÃÐù¯XöÜÎI_ü|Pd ôb~ÒgEpÁwe*ÛõLâ'¨l„ÎÌŸ—8écòí|=gs:{ÚÅZ��z¿ÿøŠ/×u~¡³cñ�ñ]ôãàÏ:xÀBì�²Çäý­¾Ž;-øÓ»¾ì;þaÿM¿ËWŽ‹QÛKÑÀOx@è¿Ã7øÄ–ˆ}ðŽ'~EÌlÞ‚\!æ¢w]¸{£zZÛ€_˜Xî¼ôY•ñÐÏœù q�Eÿ_® άkÿ"×™7xæϼŒ�a øæðj[Új΂'ó‡n¬sMêdlÈU¥ro[苜c h=�IyGêÀ»#û†Ï®kÑy!»•¾Üe£ŸÆõ‘Uìg_긻…n'|ƒ¬hXˆsÆök$6@ŒƒoÝSø½'uÌUãµì§ò@[hÉ<‰»ªÆú°ÅXt�Þm ¶ŽÊbîSé8Ê[´CÏDZD䤿/Øg�£2oôšî%tàÜãï0ºZÏŸò±Úúq½òîÀ²ûG™ŽÇà…–Äˆ°¹C¦ö=s\|üú¡__Êàið`›(½•¯�Mä^æeü9ÁM~€3¡¼?/ßÐý«u‹QÞ©Ç–š“¶óRב§ž;âÊ*W"J•—zŽÙd´TYI¾‚yª,‡~”qVU©¡6ƒêM?¾‹ýU,Ü["6Ú³�s#÷€Ÿ¼&ãÕ,øìØöĈµ Ðk‚Ç5.«û¯>“úœÓE×½?.¸˜;>ú¬Ÿ3ù\è7´`ãW-ð ú�X5û†¬ÃÞCÆ’wÕ|"ç¼-ý}ø‰|y¥¾µæÐ5».}uŽØùÌ�õÂssÑmÁAŽlÞBîRu$ãA‡†¿Kãš/®Ê¾öü>ÐŽX?s¡Ž¼d×BÜ�Ü7ùot!ã‘/¦^ãu ò~­›'þg„:Õ¹œ£Š”1Ö×–:d<0´ìÞâsô-kW²Îº”“§ÐœžúUŠ›=¯[àÕŽ»Sõ›îAײßi¯ú:#/TžW…Œ­˜'sãî óÐŽÚÁä™ 2[€=eÎä—*bÿз)íÐqóø_m¶šesÍ5Y·æ©j¾/´ëJõÖ,ä)ûìrkÈŽ9Ëæ«ØüÖ¾aÁw F舟ð!8ô….ÊäÂÉ7oY�a5 盜YÕBn{ õe ÷š‚�3Àù]ô{?ÕdÞÈ`ÆFßÂGÈdµÿÑj×!+ÛÒ?ŽýEfp~Õ~_²,¸þ³d¥Þ«‚®³‚�}G§Ã‹œ‰M¡CèÕ-Är8ÈÚYËÚ»è6æÎþrG`Æè= æ£rÞ®û9u,ø&ì§Òy£ñ+õá}]sÃ&¢Î�_–ùµå oÕdßTG -«gy²G5Gå⢌M¾˜;+Oö ¨YÈ3>÷=8Óä×°UwÕdï±M‰K@bTŸ³QÞ“x§c×Âsí°�‘=Á�lG/’WëIì7æ@Ì—µc#p>ÛìXxÿгInÍÍõŠ…¼¹bfÈxùêžÛ¾ï‚ö,Ä57-ä§8ëÛ4vI,vÓ‚~^³�?wÏ‹xè¢[AcÒ«b�ëÎÀ%¿Æ®Ðµ%ã£;YôÛõãè“x.60üL˜¼ñ¢<¹o‡\Ü´»€ŽÄWZî¢Â‹øxÄ‘û'±{hG,Fs~èuìiÆrkž>‡†ÄíÃöƸ߲ö1wX4×éÚ]Záß!¡­;?ôkwûìäÔÃr¦ËÎë ¶ .Yà}ìvð`_£ÿ±hYÊ¥ï ¼ ¼5”=eé�¬Zv2oÆEî«|ä®68k–•¿ŽoS™Q([°¡“æI´ ³Ý8.ï7gáÎ瓸Lk„wï ¾Óö~ïQ&>²+ó¨Z°ëž”u!ÛÐ?òÂC |ÿ …ŸÛaîØ,eËÊ2è~Ù‚Íò„…{iÈç'd~ð�ÓØKÜ—ZàcÎ,ò°/ãq–wd t¼O¼~Ñ_#»Uõ?{ŽÝC¼¸nA&a‹iKÏ)z!_@ù׿ÈJìæø.üԃ»•6›~þï±`óc£a÷à©oìÎvMÊ;–õíxºvS~Vƒþe ±¥Y ?2kY{‹6ønÄ~÷Ûè¾²Æ@°Å°ÛžNû-üœ~ók .õ3ÌXö÷h8ü%�gÊÂÏ_ 눥™/;hÁÞô¸Ÿ¿fÁ†dÍu�:ô¸§,£ÀÞoYûÚ—GƒÎøÂ䃈Ór®4W…LD¶jÏ•“»CWkžÛ‘þ¼Ãï²Ñy~Ô²÷`±Q‘Œ‹}‰\/qVÍM`?�gcýnÜ-éCž‚sJì�yè'ÎÕ¦?Êõ¿dY=Ì·eŒ-¿Vhñ û‹õ3râÄ—±õÜó9 º•ø>ñyø½‚=çÐÔ¿Ñ 1Yò1se¤ ß¹l!–íÞ9‹÷ÑØ ~}:Ò>ÕØcÅ®¿ÿ�Ÿ4mÁÏÒsR‘±´ ÿ�³@xëž.™û‚ìÕ¸6uØØsØèÄmñó°ûÔ¿Ô˜W[¾‘ãð8±bÍÇi¼ª?¦õsÒ¯aág.ZÒ‰îÀŸÖœŽî‘ÆÃ¨Óœþch96 æ>¥¾-øuMðΜàT[º!O¥£â[±ÀãЭgÙuªm®±UúPV±`«²>xÜàZŠpw£ú9Á©qàËÒŽ¸1g™3¥û®ºY�, 7¥¹3WFžDsNJSry:ß8çÁ{=úVy_RÎ<‰g`oô¤]¥óÁCfꜙC_pºú‡e<èʾb#@?�?q"Å¿rvÒ—zä„Χ!my"¿°¡zÒGc÷5ÿÔ:ø«ÒGãÑj/Á'ä€�ûÌE÷‹˜{†œV} vñ bsw×½ŽuÐeÙ#úÌFôo˘Ä딇¨oF} …ꕎԑÏÒ{è)�ÝÁͨ±ÊšàkFcêÝÝ3=Ï̧*mæ¥/sš· Ù¡ö.òRׯ¹4d¾¶�¶jçÁËÚŽ\¶:ã!Ï›RN{djß‚Ž'ÏÔŒúPǜՆU?KmòÌ»»,s‡æÍ¨_Ó²tŠc5ÚWmÅÃ3>û*ÓÑ“äF•gáÆÁ–Ös û¤ùëŠþ˜³ñëâl+Í´ž‘Þíжò#âÄW/�gÅÆ&7ÅY™²ÀÇu v89&bZø7Ð×Í{=�NT¹È^i|{AuyÕ±ø°ØÎ¬iΗ«Z²À3œ]•ÛàPÛսл,zæ‰#w£vÐOí‹aTƘ«–•-Ð_ïU3Wx�óƒ\QÛ_´#eИ½QùLd%íºÒüÈ%x17â2‹òälÀ+ Ò�³9�}‚?Ô~S;Zp¯„:µ{9?Œÿb_07åøÚb3TeŒEy¶dµ«±K #ó¨Ê¸ÐbQêÔ·k[vÍð&v6þrH笱-×¶ª‹”—ÕWã 2Wò;Я'ïø—ÐOí"μÁÜà7Õ%Ì yL~ŠmkCûޏ8ç2¶õé¯öALwö‰!óÒX%>çFã¥øñ:þれ£| MU'ëºÕb®Ê“scÊáCìŪeyؽ¯þؾåŒ(n�ç¨Í¬öSlS¡?ñG9®^ó÷¼kÌ]}QüËe 2¿fáÌ¢£h½kÎÂ]îaÇ)Ö¥žüø²ìûÅ9Vy‰Þ�cöœ%ÕùðX¬w ²ù‹¯Õ¶�ûU{ƒœÀ¾›ì7obÈØ‰lv¥£Ú Ø(±œÆ¿…ÖÄí]¿u 6!ú9¨q…u ¿�\ZEÞÉ ,{É/V¤¾!åq=À¹@ÿ“ÔÜ„>Õ7Ñû$¿âiÿ¸�þÀ�æ,{‡fh!ï }˜8–Í{êxîûŠìÏPž–¥ùÐBn`èçÈ’ÿY“q [ÇÂýp°çCîØ´üœ4_ʼ 54�·Vyãµè=:WY´pWh]ê‰û�g]°ì=©UÁ4džÌ=¼jYŸZïXt噀=Ë=¶%é«w÷˜ü³,°-û½4f âlÐBýÆÅ1ßÜßSù=°p×dAÆéI?ø”½~»�ÎäÑ\æ,ÜÙWßl÷}\hÙ°p�yYÆqrË�sô6²yp®±UÍÊÎryº(}·-këèoltiׂ.ÅV‹ã±|#ë±C(× ϶eõ˜êspµeLô:z™zlõŠôU]Á<«Î?1ún„KóÜ �ÆØ@œSì öHéBNœyW-ä‚ÑIØ#à`ŽØhèVÍ×k\AGÕ¤gj6*co–-kÇ2ò`S~¬ ¡w]ð6,Ü%~¡ã«-®w ôÉ}%ö•µa—ÍZV÷/ �°ÉÊ숶ŒÝ´ð{´±eÕÞ€æ}ygþ|Â\v,Ø$³RÏ~Î ®E«*¸õ¬q žóc=”q—¢iÁfƒÞËòüçž+Ñœ4·²­Yé ¯Â‡J#該 že ürùj“€kJÖâxmÚ‚¿³&4u}ö[8¿*Ôž„�𙟞ö@÷[iH9~U#j‹|Pÿ�:ÅÛõkªJö€;j-¿fâ—ì“®-»­—rö@ùEý€†´�ǰØŸZ´« >¾tþ_Íï›ò:0eáLcñM,š8òоø�œ=å#ÖÁYåÞ”+Ÿ‘¹=­ñmôœ!Çhß´ìÝs¿¬‘³U¶ öd|Ggõü¸ì™ò4m ô¥¼êçS‰ 1¦¬â÷1¶ˆ«kÌ·"m 'k�Ï|×3¶òHUúè™!©ü§2(¶uÔÞÐ}­I_�Ûiœ„xâÔißZ46ëå½*ïÌ ùXŽÖY<«Q{;cAFÏFãw¢ïX!ãU6£Ú‚³*¸ |­üÏÆñb|Z®ú¼gQ;Ds1àÔrøËÕ-[àƒEËêh Ÿê9QÛWm&páßãbA*#c^¨[Б+B'x\e |·áUžeŒþ˜qˆ½Åg­!¸‰­4¤ù c`k*MÚ2ŽŽ¡¼@W=ë5»ž–jש¾T»”ØQMð«ÎÒóŸKlW� éÁÇ«–=qÛØ¶Ð3ã¯XÈ©Ž“‡ªãêcÆJ¯JôíÞ¹�Ñ´ë×Ò”öñþjS“‹Qy¾0–Æ€5_Ó•w|¡yi¯w ôN)yBÊôÙ‰¾5Ó–6í¨­ÞCàIì2ÎéÜõçstžî{ÂO®±U䈎Ïä¾V,›ßïYvÚ‡~‹R®¹:øÍñ•ÚnñSAÏ£Û³i ¶ÆŠÇY¶ gâø'ßKÒ¿~s´}À‚­]öó&A,sÙB|™ù¯ÄÖ«Ùõ¿oƒõ2ìeìÍe q=³èÊÙç] ~¶<ñRxŸó ö¦Þ�Xµ; F3°�Wá výz9+zOBã[øª,´Á~R›1Ö3È|dß³”-üœLEð©Ü¡ŸÚiØše釽6íûL{z‘ëªZvŒ=°“ã®òžœöòsÉBœmɲ±xlÔÙζÆí�n<Gß´{Ü‚Z•>šçÓܰênôºvhÙ{+š_Ó¼t:š«/ŠÏß“öz§NsRêßÎùµ>f£3°lá 2^[ÚjOó�ØuËÞíÑ;¼«­­ùE=? ?åèvÁ²÷2ˆ¿G^¶À}i³dáŽÑнAL²õ[´ð÷´@{öžý'ŽÙ±Ö{ ƒh ÞñÏÎi‡ ¢NçX—qjò~èa]y}ͳF½¿Æ8‡Ü1ú9߯.õäa4ׇ>mÈ^¬nÎ*ù^΃ŽÝ—¶s‚‡çðí;–åÎ<ñÞŽee‰ÞÇA—÷äùïé@µ…úþEiד~èrÆb~œãU yòð4F¯(èx‹Q]ÛÂ}ò•¨®7ñP½o…ýQ–vzÇ‚;ÑZß¿¡Žù'ÁÞ™“ºŽà�?Û–]óÔ<>øòlI9óˆïR)´dŒE��…kRZðÔÜ>sÔœÏ"ÃÙë¡à[°ñók nî¬Y¸“±(ø”ºœÅqc`¿Ð—˜šÒ[–ybk³î¾eiÕ�÷¤MÓÆÏ…z‡wÙ‚|'ÀùÀ6X¶ +5Ϧ9@¥º@»ËÞ{^�r•ðV_ú¢7T' 7T ká}b¼Ø®ÊË2½Û‚ŒU=†} û­>›ê<�/ÀkÌY¦û�m=g�§ô,³V�Ÿc»hþ´c¬¦ŒÇyQÙ§ùV�m±¿Èhµhá ôb/°…tïúQ;ò¦Ø›z¿�3Ý•qÀ Nö¾b­ËÞée—-äÂèS“1�WìAKp´¤=2cYú /8ÃèGÎQ¼ö”5ê]a=oqÞœ¹p{^ÆÄGÆG⮠로}dÈð¶-{Þá—�¼+¿ÀûUiÏÜYyQè:'eì;ë¡ç¦)xá�-,H?�‰4¥�â7{À:Ò>Ω³núëϤhn [²+íT_Î t™žtí8‡ÈŸŽŒG[õ æ?ÏfT-k–•kŠY„¾RÕ°ÀCz¶æe\ø¾iA.ÇsÂ6D6êø¬™}Œï髟…Ï ±eTVè~j¼;_ïHp¶TVh¼ÕŽÚw�žèËþ�ªöµÎ¾V9Hì‹5/Éz™<Û•1ÔßîDïßlTGÜš±"üœWüÜY¡µÒšh, š Ã�wÌIå°ƒŠôan“gíð%2I×Г~Й¹éý½·Í†ïYïèÿ¸ž'ñ�sêþàƒÂŸÚŽøþ¥Æ´5ö¡{Бz•=ð²¶cδ«[v Ä:įR†­„ìÖØNOÆgž¬Uõ6}8ÏšgëYˆÏ¯YЃz.Ðù®í´�¸Ïœ/Ç6#þOžœµ²'*O4¿£ñ.Íðwsr}\ìv×Ïe¿… ùB�é½ÊâüfWpë�æ)»%ýã³ÜòóPúBŸ–Œ‡Ý �5ÿÎyjYø=Aš“é îýÑ8ð+@l™ùAò>´ëKÎÓ¸œ1ýù^· S˜ÇЯ¯J[Õ½œ�Ÿõaÿ6±n½‚|tõË\Ù�Žà§ŒÜ€Æ*Û‚Óż‰á6elèÚ’:âJÿE¡+ü­yDÖÈ=òä¯8ûÄE2nÍB,†ø¶ê µTb“Ó¹¬ùLüõYs|Aï O”·4îJÛEùÖsŽŽXV~#§ -+†¶3²¯Ê£È|h¬±nö�õ«¬ág‘±ä47ʺ8Ÿ B?Ö¯~ rMmÛZT‡�Ã<˜›ò yÎ>2aUð¶¥Ý®à!¾ÝYO]ÊXòHåbWêÉoчýo NÖÚ”ñÑkàqë ÇR‘¶ÐFu1óŲ¹ë¦à?èÇ®Dm5WÌ|çÿ»„¾îIŒ”ñ¡ –�ï°NÕÁž–uâ°ÇU ºÌÍw¿…ü¥û&'ÅÚÊz§-üŽ7WæäŸ�b.èn×f#¢¥ê2ä'ó#o7mY9�Í‚o ß K±ÏWüüÈ¡u-ð¹#=Sðû_¶ ¯àqÚ3æÐ æ¯ç}Þ²2h_õ¥Ýº…;™ÈS@ã9ê§°.Õ!<‘ È(r¡ÊÏn¬E ç �D޳lA?àûï·`oÕ-Ü!íXø}‰û…&SÊ‚wÊãmY¸“Úöõ gó …¼m]Ú¶ä©:°,4ëZ6‡Š~C†ÍxüU ö%mTn“ÿ£\Ïñ´ƒµT,+Gð¹Tf°vÎPMö°b!ŸN[Ö¨²iÙÂù­øò)sÚÂß\ Ï™æY–oö›ó Ÿ‡Ã���Ý -‘!e v w#”LjÕA—rôf,äã•GàÓŽ´;há~mÕ¯Ð3‡NwçKÿ…['yÅ5 6äš”-IÛ5ËæÒñÓþ�¨_—X¸Æ¯‰á§îYö.99p` u¢qÉÎZVinGc[ÈMöXcÅØZØ{è—N”cû{Õù±×ȬE¯á²?@ãoðYïE@c@п›†Ü¡ÊT� óÕx>,º¶,ûÛ–ö�Ò;.àÔØ²[ïšeýhl:î6Á;èÖçp?dA&ÀŸ¬Ceú¸-c¨ÊÙoH_õEµ?vVûç ½Ã€]„-ªçY·i!N­>¶ |T±ðóèiµ³ z‰sÁÙGž¶¤ßŒß·)õjŸq®bú®Z�蜹ïØ!ôe�¬E÷¾Äæ­H=ý(sí�Ü ]‰5bû©_À©\Ôrè�°�ðS:òíê£ásÆv¦êeì3×nKè��èp´ w†B?õƒ¡+çxÕ�‹Ý°aÙÜÑœ…{áÜuqguÛ‚}A,‰89òøjç }YÅ‚.!gÒ÷}vý˜Ët!¼‚?ƒM1ô}Ý9¸*k¼h#þ­6úÈ÷O�YÈ1.[ø»0Ëþ.ñš…ÜëO—+~gûŽsÛ_°pçnÛ÷{ÒB΄xÃSÒšÍ[öwí¯yüoµp_ ½ºa!7ÛòeìúlÕÂÏ#'ç-ü,öŽ…¿ ¹eági—=Ž] v5çtÉÂÏc·-ül2|ŒM]± Gˆ 17�ó�žˆ/£&¾¯9´8�5/89'œ_Î3í4O‚®¥.ŽwP®ùÎ"¾f3Âß¶ñsC¾ÕÏÓwdëGžÖ£1ëÑSíxFåhSðÒvAžª“”ØÁèT�= Úò�ý©2_ý6Ψê't�Æ9tm*K©#Ÿ¢ò²)ãhÿ¦Ôéž©ß\�új¬+Ž¡¶¤¼aãç®ú_÷0ÆM=ò½iYzÑ�ý‰ÇR½¨¹ ô_ͲsÆoBNÃg÷-üM¦[øÝ ®�“‹Nn]¶ëG‚ÿéëœüs29´nÁ7_–~Ëlxä!~–dzcá÷¬Y�Sn,b�CùÞ°KÃgÔ¼ëD¦©ßÛ“6œ{µ�‘'q�æù‰--H=:žzÍÏsÞ)>Úè?hT‘1Ú2†ƒ� �·,{‡uShY±ðsÄ ðãÖüž -ûûø7,ü÷¬Yöoœ w†þ>Ȫ…¿5±îß7,èí�…ßå±*eðÍ¢`Œmyß�5­ÈzV-ðÀúÑ•ôa^«2Op´-üþ�µh,샾àƒç‡2¿e ¿Ã~í ý™q,ð,Yð›±9Ü÷®àÞèö«2þ¶…Ÿ‰Ð>JOžÌ {Õ•ÍúöCÁ / dß°¥6ü:¯Xöw¥Ðî™+4e�à^‘~Œ¥öÖ0êÓ›ýc=œ‡5Á±-ïËþÖ£ÛOò[‚kͲû©kÚð¸z~¯Ì²´_”§+ïZà» vrÙBŒˆø¶á²euq+âý)'>„ $&9mY?Ý@|ŸzÖ²¾lE`Vž])GçÌ 0¾ÚŒe}�qá‹jî¢b!ÎÆºê‚KÛñŽï�¿0n,æ ¾Ö˜ú²”Õ¤=Oæ¥1h¥>3øštoÙ²qUö†8¤Ò¿*m°{xï>|rì"l/��êž²'3…Y?q]Ö=eág´h£ë$ÇÄÞOI¹òFYÞ•Æn^øeËÒ�¼‰+G¢»•®Ö1ÈëBpiœ¾%mg¤oY¾+–åÍËÒ˜Øô’Û™ùkŒùÕ,øJe)WÞ¨ËØº�·/H9qm]3{S–÷Z4.}”ÿk2&eMéß–2åÍW¥-ëps(YÖ?ˆÏ)ü®1nh€o¤þ†Îš@GåW•aدó–åmÃ>�[›�>×s]‰ÆÓsÅy×ïÁGì¾@&+ÿpge¬®´�æð#2jÚ²|¬r ¿ÌáZ6îŒ?«16žêÇc×RÖSß5u°•i|¸'Ïžà$ާóPŸžwbÂmiCLèQÙÎçÁ¾W]c ê§w-Ä�Õ÷fs26ýç|TNl~Å©íÆ”Ñ'ÆK¼@ó*1í;Q?¥å¦ßIÇÒ6¬�ùBÍÄkUP¾à{EæÔµì>ê¾jþ�þ]é£ü@\JÇÔ厎 ÷ÍÙ|yÖÕƒ<ôÁ¿Õr|ò$í1xy�ñëyŠ¿õ¼õ¢2÷ÄFÅGºàÁÙ½øø\Øæø øÜÀзÁw}–,ü­B|Fì`òxK|;ò1Ìoèûâ?hÞ»kÁ"~Ù÷O‡ÿ’…ßH¬Z.Yø›œ»BCüfâŸ} /¿{]p/m¶,Ü¿$~‹ßK ¿�ø>>k$Ö:°ŇåL_—>àŸò|ÝB\‡uvqâEð98�‡’Ó g°$ô$‡Á\”÷Ú–ýûßMÙ› ç”-òýÁyîKg>'ˆ?E?ò…ÄPÈ!,ú²¡…³½h!§ òCçMù’Р+}‘­ð1”¾…¸›æYd>!t€÷4?-J_t�î+ûÃ^.K{ê™üCŒCñãóC‹eÁÅÜz‚Ksüš›'NB\ƒöè{ø”³]É?,[�ßàÂîÊÓ�µm!ªç Þ§ç}ݲúqÞ²ûJ܆³AZ¤=¼¨öxˆO`;œ-Ä8™²‚y¢¿5nÚ—1]û gjÕ�ºv,ÄêžèVö‡Ü1g�¯[ViŽ0”½f/•_hCLn]ð³fø†>àæ¼Â‹î{ÓÏ›˜ ëÆï@6°>d)¼ nž‹Î ¼ÎÙ›õs»$뇦;6þL`WCÏ% ¹J�/·,û{š‘käÏ8Äb‘ÛàEgi_ÎѲ�|&þE;ätGʦ,ðþÉ„o3má>1uצäûMû¶ø ‰/Ÿ÷åÌaÖ×AôÑŠ/OüÚJr¯=ÿÍV,{¯²ãç’X�uÄ· _ÛãÀŸ+[ˆ¥°wÓ–½ÃP³l>Ž{"ôcO5.uЯwÉ‚�KŽMã-³~ˆ¯p¾ð g,ÄÒ–�5ãCìZÈßc�’·ØBxÅÂ9Xµ`c¸ý[¶ óÒŽóмÑ> Rî`[ÚÏYöžTWpö¤ÿeÿ}Õ‚��mù¤{ǵw²”ó5ïû,œï®Œ­:NsCØ0]ËÞ;S™‹|ÐûØGjg ?õ~˜ÚóÒ¯ç÷ä’½‰,Z”v5ËÊ*ÞìY·—Eó¼`ÙŸû†¶ªGê~6aÅB>qAÆ'öÌÍYˆ/i^K\aAÆPûL}ÜEÙ÷ºˆ9·üº�yä÷é¿mAßÂÏÈNbäj;b¯©ÞÜÐ=„ÌnNxÚc#¬�à[t/Ïžô'Æ2´ëïÌɘÐXmc�³pÙ3h¯ø4Ü�2ÖKžœàcLæí¾¯Zà{hŠ¿³iÙ3�ýŽüÀà¬Á‡zV�INŽM >âíqŽùßwÐ\*¶Ô¬ôoYˆ—éyÅNc¿6,ÈÎ(ãÂÃ= ¼©~A[ʸ_Âz©glöqÕ²1Å ‰™²Æ�…8+÷Mˆ5³l.΄΅3Î<]:|л"OøñËÞ‡à\cÓÔ¤Y�}GÜÒé6Ç[›–õaYóPÞ±µ9Ç´oÙõ¿#…3Á¹AÞŒAL€uràWì+l6äFì+¬XV°�5Ëž;äg¨bÙ;@ÜåÓv¼Ò±pž‘‰·Z8÷ñYGï4,èu�#÷ ­žKx¹-åj·Öe-±,ã¬a£µd\êêôû qOüLô¶2¶ ß̃~Èt!´¯Xð¡áÎ<>�ñ4C~vÓ‚?¥ë¹ßF¿çí ñô?·‡dŸÐ/»ò½æû¸wâl+¾lͲ¹2''.øò‹–�s±Vöص{«…˜ûÔðeÎV|Ì?;úoX°ƒÈg#·™+þ]Dz¾yKúBòûä0îOj¬ ]RõøÈá¨oL¼[¢i!ŽßÀ¿Ú¦oáî {:cA¶àO^°†G8®Ý´~Þµ`ûù¢ïœ­…,c|Í[¬{ÎqT·�e ñÔM ñQׯ,œYb‘ó~·÷~_vIÖ�¬EÇ!/‰…4üXe r˜X#~'4æž ña×îªÐ¤m!—V—qæ-{Ï›ü!z@ó‰´Ñ(uÈC|Úr™­v»Ò[u4ýñã᛺´#¾@Ÿ ËêP�;£_ÙûËÞó\ܶ Çç,+gŸýcÝUËþÌ4ZÐãØÐ^m�±Gd:2…}îú=nÙ; n/.yš”-ø°C ¾éÇ,Ü‘ü€esÉs6þž‚æV¡;ó¢/ýˆýÁ÷[ðojä™]û-)Ê‚m¼-…gÆ”ã—i|<.ÖoÐ@wõ#�­©WX‘:��·"Ø7åXÃ@ÚëàžúDËÑye)Ã6cŸ[‚wVÚ¶w¼x¸,øÙëš¿ áÓ5Í]§Þ£¡Ý¬àç›Ü=:¿lÙ;µÄx8ËŽæW-Øp­h<½“2+kÄf&ŽÃ} h£¼ÏËcð6Ç̳l×ß#nI={Å\ªòt8‡cè®c¹÷ÝhnĪ•öÜ9¡�ÞçšCƒŠ´e�ð$ý z`&è\³,Ý+–]MÆr0m×ËWöE�qÐ¥ÈÔºeå ÷]°#àCÖFÛy rÌ�ÑmÿýËÞ?lû:w.Þo#»’ø;ñÞeß¶l!þ¦~"6¿kçd£³ ±�œØÂß6Àß½hÁÞ"^„ ³#åØUø*š¿Sþ$æÑ¶pÏQýªÍ£iÙ¸:â$ƒ‰m•™j[ð�~#î‹�ŒÜQ¿·+Ob6“`¿• |ª«�5³òÝ’rÕ5ŽWÞgÁß"‰œÑü{½iág�b_ì ¼‡ï»l!ÏN¬u^ÞÙGlùþ˜:xÿAy“»»Ëòc´¢öËÞcÖüß@ðôäÉ™Z¸¯‹¯Gü·áèEøt~ı×ñ¯¥ ¾ÅÀÂßñPZu¢öÌ þU½*x4Ü‘¾º^}BãžàÒ8Ѫeí{ât¬³áÃ×£åÄútÏá½A«²¦†àWz¸ï- ù-䨼àÀ6Ô}�N+U:°Ú3ÿ†´#Nɹ'F¯CmåEtÍ¢ôãá»aOueï•g�3ÄÇ\‰Æç.kÀ^§¾.ïÄT”�Û‚¾Z�~ñ¨G{׋¾Yƒ›1Š�ßÓAUÚsð¿�A NæG®I×O]LöpA証NÎ0æâ=ùFvé¼cžå,´¢¾øgÈDâ½È혧è³"x°Çãó¬ýÖ-{Æ9Œ�]�rïBc&±œÓa3¢;ûDL9-–_Sú1â¦Ð ýÁÝ4háÖŽ¿‡ƒŸ�¼ÈØÐKå±= È¨ŽŒ1° óõìÀUÁÓ�1ú‚·.}á Ö¯{}f-èMî>¬ZÖþê�éO\åVMðé ÷”Ðõð k€®øŸÄì°‘äΘ's!®D¬Xµ,ßã/qžÙSh¡ëSg×ÂÙ$.§z �ªòh!¾LνiAî#»ôb߫ӽÐû$Ød3x�õ×,Ü=ƒÎðþRßï 1Rr÷eÙ냖ÍÇÀOÐXý8µõ�騿ŒÝ´pïY.žÄ »RÎ9‡¯~øIÏç@pc«ê^a#¬[È‘ T'Á÷…§ÙOÎ ëF¾Ã[ª?Ø•mxZÀ;kr;ô«Z�[ýhÌyGæ2gÎɪeõû´,ãƒ%£v øáËeËêA|0è¥699ìË¥¨/kiË8œy7>þƒÚTäi°­á7õO©ƒ×¹ç…ÍÁ>º6Žÿ×-ð†㲌Iü‹ùQN<±^]µ�7B¾-Z–×V,üœàŠ<‰Û#Ü%?âæjCoZÐìÓ²…\UWÆ`O8£ÄÒá…9i¯yô9+üqÎюІ:½·]ðÿ‘‰zG®lAN(o!ßð'ˆÕ´,äoáYx;ÁáÁD>(:Ø–öœû%)C‡ëý¤©Ã¶ÅÆF¦rÞÕíXÈg W¡Ùªeç¹b!Þ…\C¶é=ŽFøúué«ù| ü|‡«b!VQ·À�Œ…|�ÿ°gº¨ŸâêšÁ;zû_”¹’@M úº2vÅ¿£�Èu0äq:pB/òÐÌ�õ0/r¬‡m ^ÊÆµ×;@zî¥?gƒùsŽÉ}êyRÛ zbëÃñ|y×q;Q:“1ñ…†‚Sq÷ä{[Æw|§ˆñðÕ4æ?'u5ÁOëôÕ²ÐÛÚáÚµ+Õ¸¡Ò¢�ê�ˆWç®1?äSC¾+2÷)°�YË¢�§ vú]ë¤n6Z{]ðw�ÞC¢?sÒz§%¸ã>È~µ�9+š§×9£kkR‡¾á¬¶¤/ºRï3Agh¶0æ}ÍB>Vù‡vk²nÝ÷–|7£~Ø3]Áù ùÂÙ©YöwÒ—ûNŠSýó¦ŒÍúë–݇šà£�òïÛÑÞïŽÁAÛ8£wÙm_•-ÈI�CSÆbNúó ä|5?„ßÌþÇõê{óÑ»~#3ÑwC ÷<‰o¨Ÿ^³`¯1Ÿ¾…¼0ñ êê–�‹öÕ ±7K}Hî+t-»NøEžŽ<Ò´eãýÄü§-äÐ4wVóíÆÜ´ì½SÎ0{¨kBï‚¿"í*lˆŠo¯m椟ʷzÔ/~�ÇZÑ÷¸6ÚÛ µoÜ Ж¾Ì½zƒñÚ/2¾ù¥ULÓù1ýzcæÁ3¦ßœŒA2;^·{¾È|+Q[Ö‰>ÔµTׂ<ïR4ç×qŠí¹ÊÈqõý1¸˜ç¼ôg:²¬·aÙ|žædÙcÞãñ‰Ù "ÚòlØõëkÜ Í‹µˆ)ÜhOÇá70ÿmêU¦8púhÇÂÏÒm[6V¢1[§·,ødèrô쬅œþ 1¢¡{Í‚îÄ?‹ç>�6ÜuBæbà7 £áoìä41(ö;�Ø‘{‡ïÕgćwOîá­[ð ÐAÈkt-ç]¡Í‘­q]ÝBœ¡5¦ÿ·â„�¨|EÞ7èK¼bÇÂÝ%µ­Æ@çåôYS~á;ìÿ‡¬mÜ\ǵû^@7úîGßPtjüôÿNp|;ZþQ‚‡_¤î»¡{û÷9þï¾—üȽ$-‹yÔÁð{4~<Þ[ߦíÒ ÊuîCÙ×5ÿì¿Hßióbsûnçô�€“Õ7â«q¼¹2¦lñxÑãøjIðwe¼þ˜1¦-kw~;ºñ ]ðAœMAþƒø1¸�eï˜,Ê÷·ƒ–ôXˆ×h¬�8:~5õ]EðÕ\<í,»b.ø–ĈÑv¢v$‡ÈZÚR~âþÿÀ¦Hæ§8:>l)õ�©c� )'&=fýú5ÎI.™}Ö¾�èEckλ¼lÁ×Uû±#}u|hJ|¹&x°¥Ë|bOî}Æ‚íË}½ïb+k\¸h!/Ú±ðó-zÏA}{ìfü‚q1mr`�¨Ol9èOÙ“â8ñÏ`oº÷i™6l3z²Í4,ÜWÄÇX°àÇÕ,ÄÑð©¯zú\’58ÿbCö¹káw�ëùX°E\[bÛkîQaóoG4¼ sqõW,äôôÎ?áÆßµ/êXðg8kð$óY‰hA>Hc¡u?åeg�¬Ê8ôÛµpOqË÷us¸hÙØ¯úð¾lOoùµ¹ºË–½kM^Ü}sÞÒØ¬>ÝXX–W–=þš…ŸÁ�V,ä`lZ¸rÕ‚ $�D<ä‚_ ½f!_Íþ!×]ù[mÄè°¶…ß Õõã‘éYøÝYzo>'—{)š+>*ëwýg-ÈAð;Øñ}†~¼u ç}β«Q鯾#þ±êÎ5¹Éi»þ÷ò$.°O®~ÆB\3ŽQr¦ÁAè£òœÄð9Ósòä¿›\Ü©GgTe,õ³é‹Ž=¤ùP½‹ª÷ZºÒŽý^�vjOh|š5 {‰ØRKì8µ+ØÛX¿w/¶íªò}#«eY=¯ñpäÓ¢”i~\sÅ QY[ú÷"¼/ð1ôƒ†*5g¾(ߨ ØšÿEg@»�´ç?s×8M+«8¢:l[íLÖ¿“‹DЋ¾‡dÕœÐkœ¬@�sGŸ>ue+cÊÀËýx{Õ²¿ÛpUúâS¬ÉœõþšÚf;F®r–�=è*•cJC»lîaÔŽ2ô tR¿·+ez‚}„þ´�“wꑇÈ-¾‘ã qƒúËž;ò®œ;•Ýè|ìþU»>þ°*´…ñ£È�¨®]U_!£õwK@WêÔOÓþs2m¤-mV,ü2tr‹Ø:wk»–•G-Á…½…®âž û¿,ýnðÉÜ ê5.òb1†«{±z cÁöüýûñŸ‚c¨~»Ñ3n�îв…1mÆAs̘ã '8±!yo�ëÅÆ¼o,Fï-ùf®ãúv£þ1Ô¤ÿb„³7f\x„sQ�pé�õ°©ˆ‰ ZÒ[Cq¢ŸñïÐïôÃfRÐÅÖý�ÿôFÙõ­‘wóîrÆ6¸ÆÝ¨_²ëyè’=‰¬FªL‡†è}|A½? îºàGÃBþÍ‚^_·`·1ïE)ÃFÜ•1Ôž&N óä>æÀÂUâ|èsh¯>²Ì=«2žÊwô!²iÓ²6ºöE§c_Ò†˜ñ#îèÀ{ØrÄ ‰c‚Ÿ¸4Ãn©Jbøt»räkuÞègrÒ—ç‚ôC×ÂoØúøäØšú3ë~Îz˲yrxh^piœ^ï÷µä�~Ä”–-üÜ~kKÆZõßËþ¹jA÷¯Z�ëgÎ=c,üÜSGÆ‚6‹2V+Vy¨<½õíHÊ»–ý¹|dl~æÍœˆ/c#±fõycÝÀšál6l$ÊÚ‚Wׯº‚}PÛÐíц…;øTÈ8ÎGCú€Ÿx�ÞѲŠemH½S£w8âgSêUÖg7“xOm ,Þ œxNgL¹Ž«þ˜¾ßç8л/1ž¾´«ŒÁßø6cÇëÆï‹Ç$æÔ’¶È*�q1Ƭ]¿ŽJôŒëª2~EÆ|±yÇ废+cpÅíÇÍ¥:æ½bÙX¡Ò“»%ÄãÇ᤭ƉOrãyéýÙj”ë]Ìx,'_ð¿(Ӝ܋ÍUaYú�£õ8ZÆt'Fêžý1ch¿8^«Æb—-Ø)7¢5}êQ»ŠŒ�Ù¶æÎ:6{?+û§w"Ç�!=‹Äsò]ó¸¡ ñæK|™²˜â3Wó¸æå=¦û]•6è'¥±¶«[öÜr¶ÑQ:—–eׯ{ŽìX�±âû¿ñz¯.ß5 17Ýö”=ìÈ̹lÙ™ÆÎi;cY¾ÖùÇe*;–�'|O³VÅ Ùc•/ê×W¢ñô̸'9�ø,h^�õBx>ƒFðÄ´ÞfîäR”_˜û¬à@ÎP§÷1§-ÜWþbà=Ö2-t`™÷8�]•±Ê¬ ÜÌA÷RmŒ–b³å+ðb'·dÏÕ.�NmÙCôu®ßŒÐ@Ï¡òû¢¼­|²ÏãlxcÞ²¹ÿ˜fºï{µháÎ1óÀŽlI[ÖGÿª´'·™w|&š‚�}a]1}2–Ê!�k3±xTs³øì—æ5W³,í�ªeÿVžž¹Jô>ÎÞQÂŒ­±ÿx.z×€³Ÿ·–Ô«>TYW·ëï‡ÏÞ ]]Öª¶t×>ÈÎ6¼¯eS2–êÊèS“15ŸËsZÚÀwu©oØõkª ¾xške½ÚNϯê`×®=fΚ·ªEu±�–>ôS¹¯Gç ö“Úó*‹[2v9K×ß¼šƒVŸ�oÝ{å_d§ÊµÿuãsϹ:¦¯Ú@®|`Ù{sÎ%†NÜí Ý=yÂÃÐ?/JÙ�à;iãà‘Àý7(Hà;Á?î÷4¸_à ÷{ ›/R·5¦ìjZ÷¸>ìéý€oó�À—_•ú‹RÃÅè¹c£;@»Òï‚îúzž Hõ<.Ú°V¾]ܤgáwߺ1o®Y¸w4´ðû9¸ÏÕ·ìßU^ö¸]ÛU ïyÛãܰð÷ W¢ú¡¯[²ð7²û~V…y¯Xø™ˆ g‰u,Zö÷ “/ùº ¿Woháw>¯Ëúˆ+B§U ?{2´ð{4-ü®bOëùï-ó‚e÷ˆ¶�6ÐkÓÂßß”òm ¿Kœ{zÜ“Z÷ïôá©kØõßòܰÀ3ËR·&4X³ð÷ÿ˜ï–Ð~Ã�?÷,ðq?õ¸×‡®yzªuuš»s²rÚ²¿Çuɲ?3Nº"íˆcWlȸ;FŸºwìHäxCèµcáç¯Zþf¹æÃšâsÎPß×oYøì¾¾åÁ’^!vM>†¶è’¡…¿Ù/P†ž�Ïȯ¬YˆÑ°¿»2&çlÅÂï[å.ñ_x�û  ¿ËŒÜκàYöõ+–ý�/äàá/è½mááš…;äÝ7,äÖ %ã -{w“9°×š»Y‘9‘["¾ÍýLò„*+°ÛÙx�< öö¼”ç&f�ŽMŒ-@¬Õ®ÿYðªì{œ£emä›wÖB.Sûè½W|�¶>Ã!o¥>RÃÂ9æŒ3ï†ÌÞÅNçîûÃyå{œÁù†V¬�ýdñ ¿Þ¹¢Ï�îça?jŽ’{¿ÄJX¹¼¾e¿t[²pß±o! \²Lóâœiî:㛳o ��84Ÿŧ&ïéÚªý¬¾$qDîÁ¹zò€œ�MßwÍ‚ýß\ØâÄ�w=_>e!î€\D°¯ èZ°ñ‡–�Câ�ö-Øëìg[žglâ’ çVùž¸‰Ã³báoÑ¡›àOôrµ/ô&>�^èXø[U².| ôRÙÓfJö…x¾ëÒ¸#ü´nÁ·å,qßÎá/Yàée wK–½OE,‘³Û“qX{ì[Æ1�y«?©åij�÷ð3x»þλú£ê³£ãñA÷{\-øßàlF¸¹Kð€Ç«yDòßôë[¸ƒØ–q‘IÈd|F[×n k¡œ<Њ¾9§ð òBãA´kÈ;¹A•kš_G‡ª}Ä�ÚjLŠóÃÙž·À¯Ü…@6З³Ç]rEz6ãÜéœeƺÃ3=釪K{æŽmÈšÉG£Ø{Þ›RÆ;ñ’Š…¿‰}:eÙ˜½Æ&g-È3øtÊBN§<oRWŽpDZhÍùàœMY8îÝ�íu ÷m5ÞÑ´ì\ )6IGÚR†íàð_”=Õ;êÌÑÕmË|u ðÕ¦Œ5'Ï�¾aŸÈÝÐWïNi|’uÀ ð{Ú”~Èl—m©gÎËÊ7Ý'hçBX£ÆTãxV¼—ðµî‡Þ=@ß«dáÙŽe÷ˆ¸:Uu®ÆLòý�óÂ6ª<ª÷7hƒ~€O4†¬}ªòÓ5Æó/ó¬Dítn¬#Ž j[7¯«vý=ÞáYî£LÉþè}øZíbõ-°ïÑ9óÒ®"í¸ë×]ËÚ¿ËôüœŒÏ¹à¬p‡/²¿ðDû»(~ï”Ñ+ʃ*cñ\;âQ*«4¾ wžðI¹«…<žÇÖÇ®ç Î%Ëþþx€;”øióÑ7°$ïè\x«'ß=ÁC;løeùÖ|�ÞEvëïÙÂçvm/GÇ�G,ÈîKî¡+Ýô޼úËðsÄv!v§zJcæñyྙ¶�7�Ój“5,ËçÈùŠÔ·¢²ª| º Ù�ìhH{ÞÇÙlq^®.caOj£nYý¢¶‡êCµÛÕ¶V»Kcpœx­*ãSÞ¼”ǹm¯ùä�®#Î¥´¢rèÊ:v¤^u|R‹žà ­æ[ò=kã×A»YéŸj¼RõMîçWù@)T,èN¥Cu 4¢ïXVm<ÝÔ�cÓ®µÁ‡Õ½£ v&¾ ²™6j·«-¥wXØËYé[¶,?)ÿèÞ*Ô_l»�WõwEÚ2f¼nåå‰q{�ï':†öìñ\„W÷rœ-‚¨Zöw³Á/øºWÌ ûCùIe”Ú|ë¾Å²ª!ãÄô"žó²@×;mAfC‹qr±'ï7²±lGä;sŒmõÀ�Y±pOåmòj{¸µ,˸»âÃ+2GÖÅ ÃñÛÁ¹"´WWϺzÉ‚>Öâ .[ö®5±¦øgôÐ œø›À�í|Ê‹výïBžóezpÕÂï¡X\ «Bï3Ä—„�ç,ünú`s,ù¹9|fÁ†Ä6CÞêyç.y¦´¯[øû±\=({A\“obÇ |<ïéŒÍ†Ï�í¥¾*ã×DÇ07b¿%�SyÁž6,Äó°UÆ°×Ø@«|-ô=ûÖö{qÑ‚ÏM…ul[øý,ä3Øè†`? ¿Y�é釦?�³`A¬Ê\�Ù] 1âtîéb{<,Fã#jzœƒ馅øì¢…¿Ç§üZö{²fágÈ�ÍXˆÿëüÝ“|6vR¬û–,ð"1?öZm(l´ŠŸŸ3�®ä®¬ÚŠJ/æD®fYö‰~ÈÑ��!k�±} w V-ä´Î3q—% r– ò|ÄcYÛÀ‚þà\QÛ%œKõÑ©[Z¡«U·-ÄGŸ:öüÔdü·Ùõ¿×"öñIT—è<5>©9³¦´×oø )ý[Ñw J3ìWÆY•ù(h£vƒ6 sè–¦Œ£ö÷+X~0:¬ná6SUè¬ã‚¼:¦î«Ú;ÄQ�ñÄ5ö€LlNì¼]ËÆ2�ƒˆv—-øënús“®íº]°káìáOÃ×kì Íÿ6-›ÏàgµÐ…ăÎ ô•æ-k.Âýí€üSgLóŽi§þ2<ŒÍLŸ9ƒ=ŠÑ<,zBã¾Ä‡�[ðœÎE}t:|¾"m¨'ž¢ö¹ Ú0vSúÖ„ƒˆ> 1^p#‡‘9ð€{ß–ñ87ÁÇZ5>GÞAã‰é|ŠiýÄGRøÀ轘–S>�8l/ÈŠÂ犵¤=QÚÛ‡%ÏŒýïÙd!é';É;’KI;ýo1ùpÚv)YNÿûhr5©%½¤›¾·÷Þzi}=}[Jÿk'»iÍz2›–,%’•d�þ7›´RL•d-mUO[/¥}šiÛ~úUMÿk¦-ܤÿ]Hÿ›K†i©këêëél\¯^Úbzo6s)Þ¹ô?7òb:Z7}[H±ÔÓ1ZI#ýª¦µµô¿å— _J±^MÇê'ûÓÿÜxSén¼™ô?‡Ç�s)ýo"ýïJr9I’‡ù¯°QøÕ‰÷'Ÿ�x:ùòć’§ Õô¿aárú_­°�þÿÅÂVò[É—’_)¼'ùÝÂþt¬”<5q_ò•äkÉ7S )f û OŠéÿ')Ü”ÂdápZ÷`òå´þËɹ”ÖŸJÛÿRòÅäw IòsÉW _(L¥­gSÊ%ùÉo'=ùBòÕtœ¯$ŸN×ûé´ýW&Þ[('�IV'>•<_˜-Ô GÒ^Ϥÿß.|±ð\¡Yøbòþô}ZW.¼-}{¶0—Îñƒi«©Bsâ…_MKþ}áH:‹ž¬~=�Kòñ¹î}.¿býÄÉ“¯¿#%Å=µߌ£zºŽiG¯Âaÿœ*J6Òç!ÿ=�~WGåocn·ð©Âóî'“[>¾˜"üø3·¼þS…Ò+IÿïÔú§ æÞ̽íÛ{{Åé›ûœxásÂ}Ýç„û,ºÏä…ÚÄ}Ügâ> §Ö ·�þ%Éóù¿ÿ¢ÿ%ÿsz’OÁž¿öüÿ•~—Ò“0=õÓé‰/§'¿âåKÕܰ>mñŒÕHÿûÇéAqRdâùßJ^›œM%Ü/¦øV“óÉKÓ“³’|åù‘¼.yUrSrëüTZót:ÃG“·¤r«™ŽTÙ›ƒƒÃIþ/ÿ—ÿËÿåÿòù¿ü_þ/ÿ—ÿËÿåÿòù¿üß®ßÈ!‡rÈ!‡rÈ!‡røã ë9ü—ÅgsÈ!‡røÏöH9ä�C9ä�C9äðÇöå�C9ä�C9ä�C9ä�C9ä�CÿÅAéÃ9ä�C9ä�C9ä�C9ä�ßD˜ü�rÈ!‡ï|0‡rÈ!‡rÈ!‡rÈ!‡rÈ!‡?Îpp)‡¾·pÓåþ0`êc9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�Ã÷ýr9ä�C9ä�C9ä�C9ä�C9ä�C9äð ‡ßŸC4àÈf9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9üÉ‚ò9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C8pô¡rÈ!‡rÈ!‡rÈ!‡rÈ!‡rÈ!‡rÈ!‡rÈ!‡rÈ!‡rÈ!‡rÈ!‡røIûù÷¿XÜJŽ'“¤08?8Ý9=]˜¬Î™-Mžíœ;28þBéàüÙc§J§� î.›�<Û+¼´pv±rüÜtáô©sgÝËí…s#4•[ §Ò·Âú�Ç�Üy¾úc÷vËÇïœ)¯–æ~{ª|ûù™Wž½ûø�§>ü ó;s¿\º¿X|îð=µ›ï™yî±Ó¯ž}Åѧlæ¦Ã/;Sú‰ƒÓ&¾1eS33•§¿uß§ê;õk—�ÝרY˜Øzpfêàᣯý[ƒ[o¾çû>[8pµtí¶{o^=z-gŸ>[ºZ,~ôàìM¶ûVZ¥$ý·/i>ÿÁâ'‹+I1¹3ÙJ®&?šÒãÜÙc“é´'Oµ:§�¥ë? !Ζ&ÓVŽWÒåœw+tÏÁùFá¸#@T–vjn)¤4œ½-í´G‚c{4ìÎ]œ?2 °rºòÅo<ØY6Û=²z"�íÖÑyð¶ãïx`úÝû÷¿þt£´ôøÔä¡c¯œ}¼X(=غù¾f1ýwëæ±OUV«é¿Õ~á?O”fÏܵß,]äL÷‰Ò¾gæKþ|k¢õ‘�<¾oßÊR±x¥h…ÿúéSíù­¿óÃ?ògL,Înßùoÿ—¾[Oí;|Ó�+Tï9þÐÑ{ênˆú=GªÜssé3*•ö·º×Þ;³^«®—¯}âô=ʼnéýÓ¥É}W{ßzë�Î;Z“åç?PüLq=™NV’7§tî.TF¬�e_iï‘!hJ¹ÁùÎéRú•9b�ÜY8›ŸvœU™p¬V>}îlq�î)íŽz*{Þ:嘫uúñÙ­ò;^zwkkú'Ê[³…÷¿ü%_*ïÔf¶*;7?úÒ“‡–~æõ¥£ÅÚàŽ³§î¼åð‰'ïé®W':Ô¼xtçÄÁÞÒp߃û®ãø¯Šo+ß|æDqåÏN–Ìj/?úྛn:ÚL”V;ÉgŠÅ »<‘Ö|½T,^LÉõÚÒ¹ëö›ï¬M�½i¦þÄ£GÝ}{éÄá�wöN84›6x¶´ø?\û§Nßú†ÂÚ?š¿Ö9;;¹Ü¹óU…ŸküÀ-Åâ÷O�,N¾òŽû3Z²’Òï‹Å�ä–d.é&›é9ΞtÇʸ^áô Çr�n·íö´ã¿Â¹“·J£s¸G S'žíœ.ØÍ/›-Lye}ûB­óì¿xÍäÑ驹å—þË·MŸ9üªs…OÏ®”?ßÜ÷ƒK?ví/ž›˜xб@íáÚµ�ήWÝû…Báý–þ Ú½îmçþéÒÔÌtùÙßX¹;y yd$qö–”²r*œ`ug‡SrÌ1ÿd*tޤ{[òR§è¤T G÷ÄÑ'sK/ ·ó^zÝ]8R)�ö§ì×>¿|ÇGŽOw;¥éãwϼâØ/Ýõgß~û‘?óžs/?sKᥤ;}Ï�»‡�î»iꃟÿüç·l/yb_unùüíÕRiº:×/ŸžyùÉÚ½GŸ.ô^Ý™væ;g'.®­ýÚáCKK¥­¹k_+¸R,îþw·Í/¬àòo™(ö{ÕöÄ;«÷ÝZ:q¢T:pígÖÖÞ¾¾~íãýî¾ÊíµÒ•Ò—''§K¥R}½òn'§Š×Ç|îı·œ?~tÝñM)Yxþ¹ôll¦oÝd=yMòúäÁô|Œ¶¼˜Šj§‹ŽŸ-í«oŸ?ëÅÊÙAJ“Ó'÷ÈuºSÜÓD•ó']]J“´�#×䈗FÂç6ÏEûFKOÖ—VV­æk^6yÓµ3¯ÚêþîK¯ýâüTáÕ¯j ?üî÷ÿÇ×áÌ«^yǵÏïÛW:xôøÉš_)ÞP˜Z^œºûöÂÍû¿|GqròÈÿ1¬ùbçØéƒ‡nº©pæä™;Oœ¼ýÖÂùV÷Ü�>y~­ðkËÝá­·nÞ}ß}û/N>¹{Ç™G¿þ쇆·ß¾õË…É‹û'N¾¤Z:²oÿ·Þ¹¯¸2¼rÿþ WŠ7o/NÜt×ÛgìÈ�òÔ3W§ ?r*=•Ï”W/?òêÿû–S¯Kcö%?”Òï@ÒKé÷åâÅTË-¥ÒùBr)ySòXòß$?å´}Ê1{üsê¤[öÛ�lí)wGŽSî5•C{ –Òh�6'ÓVûÎ�<–’èl':çÓÎ-Gà=½w:­Ù78�Š,xÊö ûxqòÞmDºy�Ó¸³•ó_=|S³óôÜú=·_û­ÎT¥Q>wÓ‰ÃÏ'g^¾Ú}[£vêÈG{›¯¸kâ§ï|ÅÚâ'ÝgÖŸŸxxßáòLiÛÊÖï¨o?mÛ¥ÊÌm7—vJéÿÖ'ï(ÛÉ;ŽÝ3ýµÅÅ�öͯnž}I©tçÝ[G‡7—VúýçÝdÇ‹'ßÔ>|âÌk§g:rÓÙ—?\Ù¡Jõì�Õë +ß÷ºÆä©Óç& O,”íð�’µî™lwo.$©m¶üü{ŠŸ/^J&“Þžm¶Ç°…¶Óž{$tu´}£�*M¾ R+…_¿ëÜ­·½äγ×þj¡öÎ{ñÙâ‰Ùß{ûêVmóŽWn,|ë™îÖ+î*|¥ñÄ;vNßù#úîú¶Óï)W_÷Šc‡/~ó/û±Á÷;´zëì£?ð�ß‘Óô¿þ¾¿ü�§Êÿö'ïzÕÁóî\n<ÿ¾âo‡©<›L%G“{“7Žä™“OçS(M¦›íäÔžÍóÜHމ}ØÚÛùÖH`¹S¼gÜ6²™¼ØsmŽI•*´÷>ýôÓ¿óxáÀîdቧjíþFçNÝý’“ÅâËﺘnÜ‘;î,]<óJ³Ûnk½öØý ׾Ѫ½ñ¯/¾â¿ÿÖ§ ÅKV,Þu×æÙ» …TI_, Ÿÿ»÷ÚµO~òí¿÷î¥þDïþÇ¿ym§Ûiÿ�¯+].}îÈÅ“¥g''MîŸXê¦ÿêc_,¥2ê翯Ñïüä÷?ôöŸ»åLjˆÞSÝi”JµË•kÏÞü®“çîÉ­áó.~bÏ®þ¾äuÉ’·&O¦ôA3;¥×+œ?×ì�Ÿ£ûzO¸CèKP�^Ô^0¹÷Nå‘ôÈÝ–ÂÑR0A'Ó΋#ÛÔ©Š/;E~¿>i÷ïKW>±ïÞs×ÞuöÔty~þø…3'ï8yâ¡Bñ™3÷ »Oû±ÇOžøË¯ºï¾c·¿îõŠ»ó«/½c{bpxùøñåÃÿàÀ¡ƒ…O^Û*|ò › �íÙ‹¥{ï|da³XüæÇ ½nwö§n~M§7_yå‰÷UµTøêM‡gËý>Qîœ:µpâ–Ònia£rüž•�ÎRc¾Û=~ -©5Ò“:1qàèä·lm½kccÂ�Ýc›ÇÞ³°U*ͼææ÷œý7_ýª³“vžÿxñ§Sš¶SéRrJO'‚N:G¤ó‚ýã¸Í ðãÎrr©ˆ1µg>:qÎÛI{Lw̽Ôíx%P¹tiâý¥‡ÒÙT.Ï^ûÚÚá3Ó/9y¤sàÚïm3U¤¯¯Lì–_}[õ�7ÿöSÓ¯9=ûúמ+¯Ï]?ú®k×f_{Ká�òô©;ÿ½wZ|ûÒ‘Â?;zê/þ¹§²ð¯û�fóÌ™æÒLyeªXlÔî;vj²ú²ãÅâwÔîúÖ_uû•rÚï¥LzÅ1­{O™õ·K3Çní¿áäéÓÍ×ß±ÿ§ï¸ýUß×hßçøm2YMí‹_)v’VÒIæSi!ùÉä)…öVä”:wœ&ÏËÜñØ‘ÒÑÔ£;6‚ÒdácÝé€=Rb‰yå:(¤îàùc¥=šÃš#ÑÉŸsép•Ñ—�vÕÇ:§;“�ö.Oÿ»póMýmNìØÌÌdáè±s‡Ë[�}dp¸=Wê?õ!÷�øh¿ÿ�™{ŽÏÜ{ä½ÕNóåGjõÞúöÃó3÷_®¯÷gÛßwÏÝ×Þpøð¡BaòþÒŸÿgÕÆ»ßöÖÆác‡´›÷¼é%·Üòš 'Ïì?yòu×¾ô—ŽøSúÖÉRéå_üá‡ûûwÍÔïýÙ­['{®Z™.|òä™™[ÏVêõÔÔ}é¾ÉɯŠ;ÎŒÝ-]ûÍ…S ý~¿søpa9Ý�­t›þÿ&Ì&¶i; ã~ý÷G\ÒÔNRÄΗ�í4^d‡&¸­Z¥@›’Ѥu…�©š4@ZÅ�ê…+šÐ¤Ubš4í4MhB= 4í°ÓĉC'.;¢¨ËßN ;X²%¬÷}þÏóü쥧¸¬"×gÙ2—RnM5ýj÷àE²ôåR·S¹ÿÓ¢Ÿã·Ú"CR|A^ð«Šø ö˜%c(ªêÜø~…eYﳸ9•](õOhËRf0Ø?0<�üµ€õÞ!vˆ»£¾¨±2lÍøqÈ¥¶`EêÍ¢!ÿ?W›ÞQâÎA´-ô‘éñ 1¼O‹’ÀŒ^ Â4OLÃÑ©¡ÈPÃÒô÷à�´¤1ÌE¨mä˜ûPtv)ùÇ€¤rs§IsR½ŒÐö¯Ë&;—Vû¶tý+-‘ÑÓIqL;^»Ý//Qš¦úƒF�µ=ˆ)ß¹ä��Yn·¼tüÜ£ÕTªP7µLIÔ¿¾&Íi‚‡r¯·‡ÐéùàUåó˺¿ RtyšÜ_YÁŒ<ïõHÇ(j‹“7ÆÙ±1–V»ÒŸ—uÅNò¹6I› Ç¥Y.XÄ Ïd�â)á&¤Hlδt^>$. ´îsùºO¹_N“+™ôú)ËM¦q'ÉKÚ7YE‘ÌxL¾R™.ô{÷ðôj`ºÑˆ&œ.v(çX”avdèMOGÇ DŸÐ£ð £CiŒ¼ Öƒs†È7œv“âŸp§1‹ÐªR×­²Kê%ÍÞžŠï‚îÖdHR½öWªoÅb¹51øMw¥Ùq»V‡ÇUG¾4#6âÕóy†O웵ãb3¯m¼l·!¡nei 6÷òªgW¯×+oÀ = Ðò¹'“ŸFV›OZ²&Ö¯ŠrúL  “�Ÿç9ë˜ÿý›8© ­G�\ríÁ0¿8ÜCQë8Ox2³8 eŠë86ã#tµ�(¾$,éPØ5€HÅF°àS£Š5?z˜WÒŒ-ÂÝ·Á¾´¬ü.õ3á—bþ|Œ/l¡@]x{ð#Íñ…N›{ŽŽ«½[…§³;£]LB_ëTÀ99_„«·n/±iiEýW^)Ð0¤|V}�YŸÙÝ þÓÎJä™XŒO0F_ xmkñÙx·GUÛ䮿¹7spã}‚x®‘¿> endstream endobj 2 0 obj <> endobj 1 0 obj <> /Outlines 5 0 R /Pages 2 0 R /Type /Catalog>> endobj 4 0 obj <> endobj 30 0 obj <> endobj 31 0 obj <> endobj 35 0 obj <> endobj 29 0 obj <> endobj 5 0 obj <> endobj xref 0 56 0000000000 65535 f 0001102593 00000 n 0001102503 00000 n 0000000016 00000 n 0001102680 00000 n 0001103215 00000 n 0000000354 00000 n 0000000546 00000 n 0000963489 00000 n 0000963633 00000 n 0000965441 00000 n 0000965637 00000 n 0000965956 00000 n 0000000282 00000 n 0001037741 00000 n 0001037887 00000 n 0001038288 00000 n 0001038458 00000 n 0001038774 00000 n 0001060814 00000 n 0001060957 00000 n 0001061318 00000 n 0001061570 00000 n 0001061888 00000 n 0001075382 00000 n 0001075530 00000 n 0001075937 00000 n 0001076109 00000 n 0001076436 00000 n 0001103088 00000 n 0001102760 00000 n 0001102863 00000 n 0000121245 00000 n 0000121465 00000 n 0000002813 00000 n 0001102981 00000 n 0000362559 00000 n 0000362766 00000 n 0000122791 00000 n 0000256106 00000 n 0000519650 00000 n 0000519823 00000 n 0000363519 00000 n 0000435606 00000 n 0000793420 00000 n 0000793627 00000 n 0000520027 00000 n 0000653174 00000 n 0000962973 00000 n 0000963133 00000 n 0000794190 00000 n 0000963322 00000 n 0000963362 00000 n 0000963402 00000 n 0000963445 00000 n 0000965368 00000 n trailer<]>> startxref 1103270 %%EOF peony-extensions/peony-intelligent-data-management-service/data/智能空间引导手册.pdf0000664000175000017500000055043715257160277035417 0ustar fengfeng%PDF-1.7 %Â³ÇØ 3 0 obj <> endobj 13 0 obj <> endobj 19 0 obj <> stream ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ³"ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú(®wVmÚƒ†v€Ú¸ñص„¥í¾¶5£KÚK–çEEr‘Ï$+¶9åQè­ØÞN×±)žF pCŠóè甪J0qi½ 僔Sw: +#Ä·sÙhòM•0Ay" YrH ÀÆ1ï\Ô>)Ônî¾Ç"ÛÈò  \‰†ÌG€ÄŽžpkÜ8ÎòŠä5ÍwP¶]1bxãi`óÜ󹛯Ÿ” õéÅ6Ë_Ô$ÔÎ|¸¦ò8’&�¸ePv.rr}øØÑ\ÅÝî¡}y¤Ãy¼…öÆ`ˆÈñ¦ÐC³9$`óÅ\Óõ;¹u–²¹’>"f*`hŸ!€Çr‘žG¥mÑ\lzÝëéÉ;]ܯú0¼*Ý$Ùd€ÅˆÉ[ éŠ¿§ëojš‘ÔîŒÂ ¥†±ïº4`¡W©Ëèè®_íÚŒLšËL^f0gŒ|ª�´Ž²äóŽÝ†dÕ¼@~Éa=ŒsÉo<ÀI"! 0p#çf|)ÏAº€:J+�þÔÕ%ófŠõðó,Vñ%¸uvã~UrFî>鮾€ (¦È\FÆ5 àªN?Zu›®·¥¼09ºÈDÜy#¹cü±Ö´¨9ãÀêGn+¾ßtý+´¦DƒbŠÉÖ5¨4ûBÑ\Ûyâh£(Î2HªÜg°&´$ÖŨ¡º·¹ÝäO»zùn•K@(ÅP Å¢Š1F(¢€ QŠ( bŠ(Å¢Š1F(¢€ QŠ( bŠ(Å¢Š1F(¢€ QŠ( bŠ(Å¢Š1F(¢€ QŠ( bŠ(Å¢Š1F(¢€ QŠ( bŠ(Å¢Š1F(¢€ QŠ( bŠ(Å¢Š1F(¢€ QŠ( bŠ(Å¢Š1F(¢€ QŠ( bŠ(Å¢Š1F(¢€ QŠ( bŠ(Å¢Š1F(¢€ QŠ( bŠ(Å¢Š1F(®wX{‘~D^*¶ÓWhÿGx¢b=òÇ<Ð3¢Å®_O{³ÿZ^.îmÖA“Ø9®¢€°bŒQE QНsgfT]]Án@–@¹üÍ@5½$�©dIèÂ�/âŒP##‘E QŠ+šñbÏq>‹cíÕ¢]^”•í¤ØåDnqŸ¨1�.(År7žò,§™Ó•¹K¼(]㢖Î1í]ÕPMpÅ#b Á§Q@±é E,S:Ü«fI�&lõ ê==8ÅiQE#}Óô¬Vó}Óô¬&RŒU†85¥2$&++XÑâÔ- E¿œfŠBîƒ�²+78î«EhIVðÛ‚!Š8Áê@ÏåRâŠ(bŒQE£Q@(ÅPŠ1E 1F(¢€ QŠ( bŠ(Å¢Š1F(¢€ QŠ( bŠ(bŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@ÃbŠ(ŢУQ@(ÅPŠ1EbŒQE£Q@ÃbŠ(Å¢Š1F(¢€ QŠ( bŠ(ŢУQ@(ÅPŠ1E 1F(¢€ QŠ( bŠ(Å¢Š1F(¢€ W/®FRcÿ‚ê(ÿI&!Ÿo›ž+¨¢†!¦FR€ÿ¶_7ü| òýøçò®¿QBŢЧy¥iúƒ+^Ù[Ü2 )–0Øúf«� hjAEˆ#�|…ÿ Ô¢€ ”¸¢Š1\ÿ‰ìµ)ßK»Ó-£¹šÎëÍhž_/p(Ë×í è( NâÿÅ·ÒÂ|5lˆS?Ú ÆF?»[z œº~�§ÙÏ�4é…9Z4R°(ÅSÅsöÞIî}Nåî5 ±µ§Œ”òW²ÅýÐ:ûžMtQ`+XCs”q]Ü ‰“ƒ(]»†x$zã÷«4Q@Q@ÜúÎŽ}çKEsš‰Ï üèçÐ~t´Psè?:9ô�-œúÎŽ}çKE'>ƒó£ŸAùÒÑ@ Ï üèçÐ~t´Psè?:9ô�-œúÎŽ}çKE'>ƒó£ŸAùÒÑ@ Ï üèçÐ~t´P‘Ð~u^âÐNwp­ê;Ôþbx~ty‰ýáùÓNÁb‡ökÿÏEü¨þÍùè¿•_óûÃó£ÌOïΟ;*(f¿üô_Ê�ì×ÿž‹ùUÿ1?¼?:<ÄþðüèçaÊŠÙ¯ÿ=ò£û5ÿç¢þUÌOïÎ�1?¼?:9Ør¢‡ökÿÏEü¨þÍùè¿•_óûÃó£ÌOïÎŽv¨¡ýšÿóÑ*?³_þz/åWüÄþðüèóûÃó£�‡*(f¿üô_Ê�ì×ÿž‹ùUÿ1?¼?:<ÄþðüèçaÊŠÙ¯ÿ=ò£û5ÿç¢þUÌOïÎ�1?¼?:9Ør¢‡ökÏAùQýšßóÐ~UÌOïÎ�1?¼?:9Ør¢‡ökÏAùQýšßóÐ~UÌOïÎ�1?¼?:9Ør¢‡ökÏAùQýšßóÐ~UÌOïÎ�1?¼?:9Ør¢‡ökÏAùQýšßóÐ~UÌOïÎ�1?¼?:9Ør¢‡ökÏAùQýšßóÐ~UÌOïÎ�1?¼?:9Ør¢‡ökÏAùQýšßóÐ~UÌOïÎ�1?¼?:9Ør¢‡ökÏAùQýšßóÐ~UÌOïÎ�1?¼?:9Ør¢‡ökÏAùQýšßóÐ~UÌOïÎ�1?¼?:9Ør¢‡ökÏAùQýšßóÐ~UÌOïÎ�1?¼?:9Ør¢‡ökÏAùQýšßóÐ~UÌOïÎ�1?¼?:9Ør¢‡ökÏAùQýšßóÐ~UÌOïÎ�1?¼?:9Ør¢‡ökÏAùQýšßóÐ~UÌOïÎ�1?¼?:9Ør¢‡ökÏAùQýšßóÐ~UÌOïÎ�1?¼?:9Ør¢‡ökÏAùQýšßóÐ~U [£KG;Tgf·üô•Ù­ÿ=åZ•z�)<ÄþðüèçaÊŠÙ­ÿ=åGökÏAùUÿ1?¼?:<ÄþðüèçaÊŠÙ­ÿ=åGökÏAùUÿ1?¼?:<ÄþðüèçaÊŠÙ­ÿ=åGökÏAùUÿ1?¼?:<ÄþðüèçaÊŠÙ­ÿ=åGökÏAùUÿ1?¼?:<ÄþðüèçaÊŠÙ­ÿ=åGökÏAùUÿ1?¼?:<ÄþðüèçaÊŠÙ¯ÿ=ò£û5ÿç¢þUÌOïÎ�1?¼?:9Ør¢‡ökÿÏEü¨þÍùè¿•_óûÃó£ÌOïÎŽv¨¡ýšßóÐ~Tf·üô•_óûÃó£ÌOïÎŽv¨¡ýšßóÐ~Tf·üô•_óûÃó£ÌOïÎŽv¨¡ýšßóÐ~Tf·üô•_óûÃó£ÌOïÎŽv¨¡ýšßóÐ~Tf·üô•_óûÃó£ÌOïÎŽv¨¡ýšßóÐ~Tf·üô•_óûÃó£ÌOïÎŽv¨¡ýšßóÐ~Tf·üô•_óûÃó H„à0üèçaÊŠÙ­ÿ=åGökÏAùV�s°åFwökÏAùQýšßóÐ~U£Eì9Q�ýšßóÐ~Tf·üô•hÑG;Tgf·üô•Ù­ÿ=åZ4Ö‘S©£�‡*(f·üô•Ù­ÿ=åW|øýJ<øýJ9Ør¢—ökÏAùQýšßóÐ~UwÏ�×ô§+«ýÓš9Ør¢‡ökÏAùQýšßóÐ~U£Eì9Q�ýšßóÐ~Tf·üô•hÑG;Tgf·üô•Ù­ÿ=åZ4QÎÕßÙ­ÿ=åGökÏAùV�s°åFwökÏAùQýšßóÐ~U£Eì9Q�ýšßóÐ~Tf·üô•hÑG;Tgf·üô•Ù­ÿ=åZ4QÎÕßÙ­ÿ=åGökÏAùV�s°åFwökÏAùQýšßóÐ~U£Eì9Q�ýšßóÐ~Tf·üô•hÑG;Tgf·üô•Ù­ÿ=åZ4QÎÕßÙ­ÿ=åGökÏAùV�s°åFwökÏAùQýšßóÐ~U£Eì9Q�ýšßóÐ~TV�s°åAE×tŠ6’FTE™˜à:’jF:Šç4ýVã[ÕÕ¼¢ßGƒ! cuÛtÏ=vîk DHD$ÿ´(ôQEQEU{Ôº’ÎU²•"¹#÷o"îP}Ç¥gèÚçÛÝì¯"û.©ýõ»wßCüJ}hbŠ( Š+#ZÔo-Ì6Zm³K}s�ŽÊ|¸Tuv>ÙéÞ€5è¯>з4§Ôoâ}Rož ˜%ÈO™õÉ?(ê+¿GF®€ 0ÁüGjuQ@G9"#Š’¢ŸýWã@h¢¹ý[XÔmu#oi§–±«�˜Nxú Ò�9T|±"¥HÓ\Ò: +ž�ÄWû{Bã†+rØÏýñZö·¿hÓRðÄË”.c_˜ñØzÓ©FtÕ䉅hTv‹-Q\-�Žu+ƒ|²é1ÆðŒªT·(¯û¼)ŒóצkY|Gy“©Ü]éÊ×vW?gÚ;J”F%AççŽ1Y�%ÆÅã ó-•©Òäžéä1È"B‹/î‹Bäm”‚H¾Ei]x†æÚÂÞxì"¹gyíÈX¡ÙÃfFpr3ÇC@ÅÁã-LJ±Ï£Á#Êh’ÞõÌ~VÙÔàdœzgŠÐÕ|Jú~¥s›A w¸v@’1%A ‚¡ºç¯%Íiž$¸¾½³Mº|¶×/$b[YÝʲ.âdÒÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP©!Áµz¨¯ÞZ½Ú€(’I$ÒQY:�õÙÔ Ó4Ḓ6–Y¥–Á e‰< ö'µkQ\íÜš¶�fú…Æ 5H~{”’GHÇÞd(9Àç�ÖºetWR °È#¸ ¢ªÝÝ›i PŒÞd�I NëTâÕ¦vˆ˜d�>l¨f#Óü(ZŠÏ¼Ô‘bHÛË\±bÜg²‘úÑi4¯\D‘³¯|q’0T^ô¡Eg¾£1“ËŠÆ}êA`Á~éôù½ªXoÒXvŠX¢@Né1‚\`ŸJ·Ed�a¼¸ÛÊ$²£¨[›ã¾+N)©½CèÊTþF€EPEPEPEPEPEPEPEP¸I1ŒÔ•ê‡Ö¤ Š( Š( ©Hs#}jíRõ�õ4Ú+ÄŸiû  /#ŒÜ/žök™Dx=ýí½`�í_ìÛdžãZ[_µÍ™£Œ›“?w¸Î3íéšíêHïEcxoíÿØßÚFSu—É”åw¶ÂØï·nkfõ¢€-ÑEs~/Ö5 " 6ÓÞÙZYJ¿žÊ1Û$PIEc=æª$`�¤íÉÆé›8÷ⵡfhcgÙ¼¨-°åsŽÇÒ€E=ýó@QE`\ëW°øº)-áky 2îóÌ8 ž7g‚}Ó�ÝF(~Šåô OÄ7:åô�µ¿Ù•ÀIæØ˜ÑÂ6~öCGp{Žœœ@ϵ-æ_ðœêÖšÕ½äÖææÞÚ[¨à’6²ÆÏåîóU@Bp2w@ÍlÛø¾áô�vîôíSû>4hä´‘R2Jäîbä ½ù ÒŠó+oj'N…šKôyáI®în"XÈdpÞa�pQ¸8¤ëßø³Pÿ„~ÃPÓ!Žõñašé`Œ�*©Úœ«e†ìñŒÐmEyÜÞ/Ö–ñÝc´uHíŹ¼O,Æm¤r »x;€>Äc5±­ø‡S´Ô¡¶´[tO°5äÌÑ4äa•HYxÎ}¨¬¢¸O øƒVºÔ­ôÉõîØ©�ä:s©11%~q!UààdsŽõÝÐER¶ÖtËÉR+]FÖi1TŽef!N€sÁàúUÚ(¨äûÑÿ½ý I@‡â}ÒA§Úy’$WwÑÃ7–å“ HÜ9Ú:vªî…§[[Ù´QJ¥¯`FÛ<œ©pûÝÅutW/ágdÔ.í×zBÖ°\™Ý‚34Švïù€!Šê(¢Š(¨n­`½µ–Úæ5’T«£t ÔÔP cá-'PK ­ û)˜ù7b^.§lž£Ñ¿:ß_øyX2èÖa”ä(q[TPEPTõ*ÃV…a¿µŽâ5mʲ €zf®Q@Ýç…¼1cg5Ôº48�³Œ³=ëU<1á[{kö×&°ŽÎw[Ú¢ãìèxçÕÈëéœW_EQEQEsÞ ¶¹ŽÚ¬¹ÿ¾Rº†ÞÖ _7ȉcód2É´}æ=I÷àTÔQETSÿªüjZŠõ_�U® Æ3I¬Ê†øFÓŽ;Šïh­ðÕý„ùísô}´9ocÇถ9K7Ý ð ñúW¦hÈfðí²9t2EÕNÖÏ ö5©EoŠÆýb)rÚÆX|"£&ïsÉ_M¿{Ûä·’O&;‰ Ra.YCc ße�·AÕ�á[v–�qðºxÖ$ûLò‘!XÂoa0L‘³W·#µwôW Öy¾•5�ÅÄÚ›/í“I,>tˆè± $6AÏs]l¶Ö7z�‚ö/%ØÀãOÝ�­÷¼¥R€Êç�vP i¿Q™[Z»Ôn.!GÒŠås…`ëe$`äF«§^Þø‡U6QÊ^)¬¥ýÜ‹`$€ífã<Šî¨ FŠâZÚ܉ÍкžæE‘„Œ‘´*ª]”mäŒ î袀 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€~ðúÕîÕE~ðúÕê¡Xº€¸Óõ˜uH­žâÞH…½ÊÄ2è%/ñK<‚3ƒ[TP-®ëÉ{¢][iö÷Ҵј¤•m)áØ†%A'hÉ$t®ƒOkvÓ­�¤«-¿”¾S©ÈeǬÒ**(TPª:0gjA>ÓhÒJÁVMÛ;`K*¡b+µ‘Ð,*Fd0˜Œz¯WCEbjÈ$vd>Z§/&ÃÔtç8=‡CRX‰bš34EUÔýÙ<‘ÉÝ’AçÖ½“wçÞ¸{teR¦WùU”öÏ¡íV­Ì3@¶Æ #îÝHÆ:sÐô«”PV²�& #¹(Ê%Dk×*:â¶àŽHЉf2¶s¸¨‡%QEQEQEQEQEQEQEQEnõCëRTpª%QEQEIÿÖ7ÔÕÚ¥'7Ö€1|Eoqqgn!‚âxÖáZxmåòÝÓ À;—¹SÔt¬$Ó5°·XêRÚ É¤kD»ýòÆGîÁo0g¶óÔWkEexnÞö×A·‹Pßö€\‘#ïeRìT“’¨êzu5³úÑQÔ�­n¹Ÿi÷—öÖki§GzRRY]ˆ ?N??¥tÔP'.…vÒ» ømÁbw4­“îuÖº{d1ZÃŽ8Ê¢©HÎUp:è*Z(¨áèÿïš’€è(®ZæÊgøƒmv4¶hV à‘€ê3Ž7c§ñ{WSEeé¶óC«k2ÉTšâ6��ñ )#ñ~¦@`Aèx4´P˜'‡nâ¾Ô¡M.qk󵪪Ê)QÊí™vçÏ&´,ôÝRO†ZíŒÖÓý²V¼Hbpw,ÛÉ'Æ9?Zïè 8}X´º¼kg½Œ¥Õ¾nmâgb¡% QfwÝ�ëíÏâ­Ýi?Úz6• Þ•},‰¨¨Aví)ò„¡šIFvŒ€NLàc¥w”P›Iá�Dê Ø´â§UŠl‹öm¢ÖE,cÝýâsÔ×E.Œouù®¯â�Ak`�#[3Åæ1bÏ·kgjñÏ_jéè Â~[Rní£ºÓáœÓˆdyCI@T¶8<Œà 諸€)Ziu�íÕå­”ÜÝg•�ûš»EŸz?÷¿¡©(ʼnâT”A§Üdz-­ôsH�¦æÙ‚¤€98Ýœx¬Ýo]·¼·´H¬uGÙy Ž?³fûªàŸáô®¶Šçt£}^öîÒÊ[K³Ão I‡%BØBçã®k¢¢Š(¢Š(¦åÿº?:2ÿÝ�:Šn_û£ó£/ýÑùШ¦åÿº?:2ÿÝ�:Šn_û£ó£/ýÑùШ¦åÿº?:2ÿÝ�:Šn_û£ó£/ýÑùШ¦åÿº?:2ÿÝ�:Šn_û£ó£/ýÑùШ¦åÿº?:2ÿÝ�:‘”2�zL¿÷GçF_û£ó ¾Ì?½úQöaýïÒ¥Ëÿt~teÿº?:‹ìÃûߥfÞý*\¿÷GçF_û£ó ¾Ì?½úQöaýïÒ¥Ëÿt~teÿº?:‹ìÃûߥfÞý*\¿÷GçA.v�΀"û0þ÷éGÙ‡÷¿J—.GÝ�î�΀"û0þ÷éGÙ‡÷¿J—/ýÑùÑ—þèüè/³ï~”}˜{ô©rÿÝ�î�΀"û0þ÷éGÙ‡÷¿J—/ýÑùÑ—þèüè/³ï~”}˜{ô©rÿÝ�î�΀"û0þ÷éGÙ‡÷¿J—/ýÑùÑ—þèüè/³ï~”}˜{ô©rÿÝ�î�΀"û0þ÷éGÙ‡÷¿J—/ýÑùÑ—þèüè/³ï~”}˜{ô©rÿÝ�î�΀"û0þ÷éGÙ‡÷¿J—/ýÑùÑ—þèüè/³ï~”}˜{ô©rÿÝ�î�΀"û0þ÷éGÙ‡÷¿J—/ýÑùÑ—þèüè/³ï~”}˜{ô©rÿÝ�î�΀"û0þ÷éGÙ‡÷¿J—/ýÑùÑ—þèüè/³ï~”}˜{ô©rÿÝ�î�΀"û0þ÷éGÙ‡÷¿J—/ýÑùÑ—þèüè/³ï~”}˜{ô©rÿÝ�î�΀�l“œT´Ü¿÷GçF_û£ó ÚÜ3dR}˜{ô©rÿÝ�î�΀"û0þ÷éGÙ‡÷¿J—/ýÑùÑ—þèüè/³ï~”}˜{ô©rÿÝ�î�΀"û0þ÷éGÙ‡÷¿J—/ýÑùÑ—þèüè/³ï~”}˜{ô©rÿÝ�î�΀"û0þ÷éGÙ‡÷¿J—/ýÑùÑ—þèüè/³ï~”}˜{ô©rÿÝ�î�΀"û0þ÷éGÙ‡÷¿J—/ýÑùÑ—þèüè/³ï~”}˜{ô©rÿÝ�î�΀"û0þ÷éGÙ‡÷¿J—/ýÑùÑ—þèüè/³ï~”}˜{ô©rÿÝ�î�΀"û0þ÷éGÙ‡÷¿J—/ýÑùÑ—þèüè/³ï~”}˜{ô©rÿÝ�î�΀"û0þ÷é@¶ØÔ¹î�ÎŒ¿÷Gç@ Q�Ò–›—þèüèËÿt~tê)¹î�ÎŒ¿÷Gç@¢›—þèüèËÿt~têcįÉëê)rÿÝ�î�΀#û:zµgOV©2ÿÝ�î�΀#û:zµH‘ªt�î�ÎŒ¿÷Gç@¢›—þèüèËÿt~tê)¹î�ÎŒ¿÷Gç@¢›—þèüèËÿt~tê)¹î�ÎŒ¿÷Gç@¢›—þèüèËÿt~tê)¹î�ÎŒ¿÷Gç@¢›—þèüèËÿt~tê)¹î�ÎŒ¿÷Gç@¢›—þèüèËÿt~tê)¹î�ÎŒ¿÷Gç@¢›—þèüèËÿt~tê)¹î�ÎŒ¿÷Gç@¢›—þèüèËÿt~tê)¹î�ΊuQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@#}Óô¥¤oº~”º>”´ƒî�¥-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE‹â»Û½?×3ØïûI)e6îœ/¸Ï‘ãœE{rE½¡Û¸‰€Øÿg“ÏW)©j^$·}NÞ=[XKôi¾Ám� ¤¨¸ w$Œ‘“žõÙx®Éï¼?qy×/–å‡Î¹Çà+Ž»ð=ýï‰íu ì`•– B mIV-–ÉÆ:rÐø‹UÔôíOÃÂ6¶ŽÚâçË™¦œÇ½Œnv‘´Œd9äàc½SÓüC¨Î–z¬·ºq†óÈ‹ì(NèË> ~÷Ì3þè¦kšeÂjZ寇„×–)$¬bpÑ(¸HÃ6K²žƒ×µmèžÒô­>ÅN°’öÞ5 r¶ÈœXg­rúÇŠu[OÞˆ5 $Š rE±�ä Ûz`îcÁÀàcæµ¼)y®I¨IeªÞnF$PöOÊäîcÙÉ:c¥døŸÁ÷——º½ÜRÞÜ\Íh�XmÞ?î¶Ÿ—hNê3ÜÖ�„´mCO×®'º²{xšÔ fH»8ý×õ ÖŠ( Š( Š( Š( Š( Š( Š( Š( ‘¾éúRÒ7Ý?JÝJZA÷GÒ–€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +“ñ—‹gðýÖ‘§éÖÑÝj:�È�!rpø›Ž�GëV<[âIü:ú"ÃrÿhjQY¾òFÕ|äŒw ’Š+ ÅÞ'µðŸ‡®5+‚†E`ˆ¶ ²vúûP퉤x†;­+KŸUé·º‚nŽÒI†â{œdãø­º(¯)µø»}|²Im¡Yùi#GûíV(›#ý– Õ½;â•Ýψ´Ý*ëF¶‹íÒùk$:„sí÷!3úÐ¥Ñ\÷Œ¼G7†ôQ=�œ——ÓʰÛ@±– çûØè1šçt¯Š-}kq,¾Ô‘lÖAw8Uòã’4,Ë׃‘�õètW¦üQ†ÿPÒí¤ðþ©k¥ KyæUÙîy­?øÌx~k=3O†;ÍjöEXm™ö¨\òÎ{ Ïøë(¯=×>)XÙi)y§ùS4Z¢Ø]Ç6TƤ9.1Î>^é[¾ñ­—Šoî!ÓlïM¤)¹oe„¤Rœà„'¯ã�¥t´W©|SðÞ•ªÝiÓ›Ö¸¶.O.ܰëXšgÆ�:[›ÕÔ¬n …%ūà 1‘9å�èz~têV†¼]¥x®ÒæçMyDvϲC2lÁÆ{×;cñòa«Á6�4÷Ö.¥"±5g‰›he|cßߟB(Ð(¯;Ÿâv¡m“Íà�j8£RÎì Rx®–ËÅÚ|þ ‹Ä÷{¬ì^?1·‚Åí¿Â9çÒ€7è®WBø�áß­†�¨î»|”ŠH™ `dà‘ƒß�jꨢŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤oº~”´�÷OÒ€÷GÒ–�}Ñô¥ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Ôÿá%¾ø·¥êwöÂÊIn$·Óà™²¨#R8ꥎsß'b­øÚ×âIáÿí‹ýBÚ¬"Óìêÿ,üí/•/®?*ë”ØüM½†Ù]Ç£]ß,‘4Ñ\ ä‚;`@;¤ Aî8>•åzi:ZËg>¯§ß‹Ø$?k[‹ˆþÍ1Oâ\aÁ4DÕõí›Nµtn’îÉ.¤ǧn:W™\é7úž‘­]¥¾©{l5{iV¶Ù4‘ªJ¬BŽ27¥w¾¸°�Å6–žðÍΟ¦ýžC¨\ßÛ2ÊO\“Îà23ŒgŽ3@ú¾¥ykâ­bÆÞX|'m9{�BîV2Ü„%Aˆv$ñ�¯jØ×µý>ê×M“Gø�µí„{œAŽäàdÈï�~½*4ÞÔõ&¶v‰'k%‘XÕIìz× Ok¦ê:Ì÷ÿ5 ¨o.|ÛhÍ€>Jsòò8ü(¯ðGŸ'…¼Euq¥‹Yn„“ÉuþdWŽÊÄÉì?N}�pqê²ižðb�ZïL´žk…ºšÔ�ûú½Oç^«¤k‹¬xgU‚÷HŠÖÙ’8®!†[î�é�Ö¸¿ø;XÖ¼ ák�:ù4ÛÝ6YäS<%ŽKœpG·q@ºN´—×Þ"µ°ñ§«iË¡Lû¯IIœŽØüÍzGÃxb¸øg¢Å4i$mÊ:‚Î{âuý?XðÃ_ë>%Ôέs¨éï¦@,í6�Çæ\ã}ù®óáõ­Í§Ã­" #hn±Âȸ*I$d~"€8¤´>7ø³oªivk•¡ËåMv /Ÿ"v�^HN{Šõêãþiþ&Ó´ÛȼKöQ#\n„@¨8ÀÉ;ŸÇ®{Wa@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@òø«A‚gŠMZÕdF*Ëæê+FÎö×P¶[›;ˆç…²ÆÙÏð°Ã~ü²Ïêj·†?×ëÿö“ÿ@Ž€: jÈŒìŠêY>ð•úÖW‰n.-´YÚK˜œ°í£Gu^§ÈUà}æàWši“Ù¬s5åÍöŸfŸs¨ÛµÄ�rrG2!1†À™wÀŽÀÀ]Cª–›8òiC©fPÀ²õò+‚ñ[ÆÚ��Ôw·ñ‘j¢Ý#•#GW'Ìݽ ”rGAÐŒÖ�ªK&¼–˨K.Ù­ÕÕ§…D» ‚,#8êxë@±çD Ÿ¼OÝòÿ0ùxÏ>œS‘ÖDWF Œ2¬§ �Q^kâFÿO¿ñ Éz°,ÁB›h�r,ß6ðFÝ ç9Æ+OÃ…Æ‘ªØøzþú{…“L�à2Gˆä³T÷W#9û§šî(¯!±‚ÎÛÃöSÜEãNŠîi �ÄÅTƒó;,€uVíÚ»?Â-“]·B<¸µ2.í yž@É'ï@]Q@Q@Q@Q@Q@Q@Q@#}Óô¥¤oº~”º>”´ƒî�¥-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÁ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šã•â»h-ml®!†eÙû»…Qœ‚Á¡b;[º�saì—žPžòíîY"bÊ™ ÉD@£$“Â}ëfŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)-#}Óô }Ñô¥¤t})h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(#Y–é^µ˜+õ‡çcÓ8Áù@ÍD³]4±´\¾0W*Ê[æ$쾕oW²{èaŽ4 ‰C6HÞ úú§k£Ëk¨[Ì#@ªNâ¥x>ˆ´··w1jO²@6T\6ÞHûÜc'¦{TÚ|·F`“<�‡q´FB¨É –={�Zeî’×Ír-æFWîàŒ’HÏnÆ¥³³ž…-ü®Ù‘äÝòœð£·j®†þèŽîV‚àÇ…fì œgëÒ¤s¦›vóHÎÈ/–Ëžqøò)n4é'‘$û a&÷>iùºñ÷jií%}.kd‚(É"£äu÷€)­Ô­p#i®p%òK¬‘ŽAÆvã4ù.æþÉüãç3òr 6éRI¥4r´ñ²È|ï8'–¡‰Îqº“ì7_bµ¶ÄòHß0^s·Ôç§Ó4RÉ Ü¿p›þ}ÏÆ0zäÕëÛ ·¢-ò1_•a�J¶:‘�}j´Z}ÌW3HöÀ‡—xXÝ6ãŽW=ªÍõ…Õ˼‘ËgË ƒfYH9àçqù ŠÊöì\¸�¤—^PùŽW÷`ôÇN?3QÞ\ÝË"¥�Þågûþ^H<)aêx«0YÜ·2"²4ò¶ì’ä€=³úSe±¹¹ÌûÆM¥ `T®}0(K)Þã|3\8˜¦LF=Ž�³ïõ”³ÝI-®ÙîJ¬ÄosÓì*ÚŠ;˜D“²ùŽÉÌJßÄ:`ž:c?JÍ�E�]4æÚØ¡dÇåÎ;�íúõ  Úi¿±’Hä¹ \îeØ($£Ðg¥TKéR¼û«Ô„Æî_Ê]ÅAyÁã“W®lå¸ÓÄc…‘àÙàãqɪ©¢Í�Ä(±äÛM  ³¸g¿+ÔúûP›ë™U#òe¬qùÇÍÈgÇðšŽÚêïæºi""I# É1ƒ€1Î9?�XÔ¬ZêBÂÚ³ óùIî84’YËþˆ‰$IJoÀ9Æ;ó@j—·.£ŒmHÔꤑŸpx£L»šyœ UÔ!?3g·BxëùQ5¥ó\O4c #ä.ÐŒLþ55¥½Ê™âѾ쯙‘É'¦=Àü(•µÕÕËÌa¿zC)$Œ“ÛúV�»\Ëo1IÌó˜)u$1€G¡ªgK�ÚÂ%WV|E¸PÍžqÔ8ïV ‚òÆŠ=· ¸ÙÛiäüÛ¸õçñ  BëPOö‹o5Ü[ù>[`0cŸâôÉúVonæ…­-™�–I‘ãR¨9éÏ\có¤þ̸[£|· ö£œ©OÝ‘éëž=jyášê°¨a(2(l�¼÷â€*ZM¨½ÔeÒ<¼Eö;‘€[ŒŒuŠ—Ržæ'(“¢FèØ>^H`3ŒçŒóÍØÖ¿n öTò|¼À³þ·zbÞHÑ›[tŒà4¬¡¤aíéé“@ Ó'º•£Y'WE‰K/’:g<ã©5«Y–ºrØÌ‹�»ÆË(P² ÷㟭]„ÎÓÎdDŽý9'ñþT]J`µ–UÛ”Rß7Jçmu åKa%â¨û:Ÿõ¥rÙ=~S“],±$ɲA•È8úŠÄƒM¹Ù -Æ>Ë<›†UÔ“Æ:‘ǵI=ÜñèqÌfEmà3;FþÇ¿¥W’öVgì+<Ž©ûâã8ãa㊻-Œß`Š# rÌ’ænè7['œœt÷ª§OÔšå7>Íñâr¡dmÛ°×â€'šúCq1‘ã€Êû8Wl9=¹'ð¦ÚI|’En—QΨá]™9+·q îç¨;ÕËÛI.f�cMŒŽÞÄ®G⨣±™ÚYJ¬ ÕâÁΧ§¨ÍQ»¿�f¼As ñà#òFLæ¥ÓoÏ™tï1’4‰YWv㜜àg>•#i÷h³Çy¡Æ;…¦¥Òín-IIcÀù„€Ž¹àc4ZÒæöcg(Û™Œ¬ÊìF9éøT±Ý\¦‡ŒÉæÈU±'ˆ?�Gm£ïhþÓm„ÜY‰œ’p=€È4ñ¥ôón°@ÄJ�è%U ò;´Èf½y’$– -÷(v$‰H¶rH¿­7Ýiö“ šh¼ãåwaŽ9íÍL–M¤¸³Mþw™q¸x¯ô­§Hmlmò?t�$`xÀÛœ|:ÍK›“¨yh¼ÜHÊù°}Þ@Ç8ÎsŸj¿u,Oƒ&§þÈÔwûÙÈÛëÿê©t°éÙÅ}Èj¥f®›üKŸð–k¿ô›ôÿ ?á,×è%7éþŸoasrò$QÑ�˜tÁÎ1õÏ£û>ëÉY„c*_ g}9{,>Ü«îAí+w‰¡ÿ f»ÿA)¿Oð£þÍwþ‚S~ŸáT­t«ëÆŒAk3 ¶§ñéQMgul¡§¶š%'ºühöX{Û•_Ñ´­kÝþ&—ü%šïý¦ý?Â�øK5ßú Mú…T> Ç jíò†pA¡pj ›;‹6U¸…âf”0ê:gô¡R÷eþêVJí¿ÄÒÿ„³]ÿ ”ß§øQÿ f»ÿA)¿Oð¬j*¾¯GùÜ…íªÿ3ûÍŸøK5ßú Mú…ð–k¿ô›ôÿ Æ¢�«ÑþE÷ öÕ™ýæÏü%šïý¦ý?Â�øK5ßú Mú…cQGÕèÿ"û�{j¿ÌþógþÍwþ‚S~ŸáGü%šïý¦ý?±¨£êô‘}È=µ_æy³ÿ f»ÿA)¿Oð£þÍwþ‚S~ŸáXÔQõz?ȾäÚ¯ó?¼Ùÿ„³]ÿ ”ß§øQÿ f»ÿA)¿Oð¬j(ú½ä_rmWùŸÞlÿÂY®ÿÐJoÓü(ÿ„³]ÿ ”ß§øVCFè¨Ì¤+Œ©#¨éÅ6�«ÑþE÷ öÕ™ýç]áïjƒW‚¹ÍÄ8F FxÈ5éí÷OÒ¼?Gÿ�Õ—ýwOæ+Üx½(S©k£ØËjNp—3½€}Ñô¥¤t})kÈ= ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(­Þ¡kb„Ï*«�™�ÐT°Ý[Ü!š9ë±�Åd߆¬þ_Ú1ä¦|¨•û·]Ý(ÓÄ�©\ ecni"T#“ÈŠÒmBÙc‘üÐDh]°;µ3ÍQy²:¢qó1ÀÌÏ)º´ž)ïLåÕÌ1�¼óµs�œòãW•~Ä5$´„6ÖP¨z)ØN:¼š½ƒ¼Š.¢—3ǯZ™ïmc‰e{ˆ–7û¬X`ý+!ñG¦£‡l­¸’p\”$ç�Z½{ÃÅBŠ%Lò˜Êç®Üà~&€±§ÌX-Ô@†Ù‚ÀdûzÔó]Ã�%}¥”°È뎵˜MÅ÷îâŠd7•'šêÈØç�{ŽE&£!Šîv ý@Ü[n,=¨J=BÖYV$˜|íRÎiÓÝÁn¹’EûÁp9'Ö±­fi¯íó u[·U"Mà'<ü“Mk5½’H¢´„È'yyb`7 œdç•t èùØêØô9ª‹ªÚ:F‘”Œ‚!réUt½«u}åZ¬*~è£wÍéüë2(Q0pŠ#¼K‘¸�sÇlPH.¡kQr0‘�Ø=>•Ô­ KÉÿdÿ…TFû>‰ŠY¢ ¥¤ÏA‚3Q¼·qKtös2U#Èd“òö  +›Ø-%š@†BBçéLMNÎIš%� ^¤úzÖ}鑯ícŠ=þ`Á�ÈĘV`;dqŽÔZ=Ü—vÌ÷$ŒÊU�rîž¹?JÕ¹ºŠÒ-ò“ɪŒ–>€w§Ã4sIJÄáцA“<-ý¤ÞWÚä�%Õãà18pã§j,b>}Ò¡¹Žtù�$u*å�ÁÂà~#xêVk<�™Ô<{ÐLúÔËq ÀgY¢�Àñ�Ö¹B3³È¹�syN¶æ4P@-ÏÌw;ž•~_µÜxz}Ž‘Bªqµ%ä ¬G ü k.¥læ ¬ÄÈU@ÚF7)aœû šââ+h÷ÊØêIÀþuƒ¨[bò7’ÆyK¿¿½@a´€£æã�ßjâ,Öq�=XäÄ30;y^sÈÿõÐ�¼‡í/ðT1'§9Çò¢kË{us$È •Ü3ùW?¤I¤BíkŠ'YŠåƒeAíÛ�jjÐ@Š—�,ñ·!”"ž ûŸO¥]ŠîÞ}¾Tñ¾á� šk^Û£²ù•¶c“Œà~KK‚ÝÒ[È¡…&‘²«´f1Œ}¯ÔÕk&ÙVh¦»òå�³+*�ÅWžXtçó ‚VâæLì‘C®}Í>²t$ crEº&FpCñØHü…kPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP#ñþEØëéô¯/¯Pø‹ÿ"ì?õô¿ú W—×Ôåîß6|þeü�QE霯‡Ñ%Õc‚FÀ—äÆÀÛ½¹éõÁ®šX"ºi^Hß™ÑXÑ£Ð6y)È9=:â­.d³ºŽâ,y‘œ®á‘VcÕ§‰‹$VÊJ•È�Aì=뎾SŸ4YÓJ´a4nèR ío§pÛä0AÐç…njmLÿ¢ºÎQÑ,<ø ÛØsswÏÖ¹X®äŠ$*4~`�«.A ýMX:Õëd³F_.C˜×rî$œdu52ÂËÚs/ëB£]rr³FÈÅ©YÛÙ¥äixq Ã�£$€»AXòN}…VÔ®-›OH"¸ŽI7†'xC€FHp<ö8öVÛV¹´òÌ)n­6¿�…�õÎ3QÏ%Ä^[En£9Ìp*ŸÌ ÕQ’�úzÿÀ3uS�ºÿ^gZ¶\ê2™!WS’#˜O“ä8Èû£æ?�sÚÈÓK ·oýõN]Fî[‰f3º4®]‚1PIöÛ»Ùo3 EX×b".FIÀüI©¥Bp’mÿVæUJÑ’i"½Q]g0QEQEQEQET�ˆLŸ¿gTÇTPN*:(`�ÍAl?³ôÜËs�!¶þíyùÛ¯ÍXt÷šI4w%cPÃ9þf™QN Í—9);¤]Ñÿä5eÿ]ÓùŠ÷û§é^£ÿÈjËþ»§óî ÷OÒ¼ï㇣=|«á�º>”´ƒî�¥-x‡ªQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU›O¶¸œÍ,eŸh_¼G>ŸZX,-­¥i"�k2í?19�Y¢€*ÿgYæ"¶ñ§”Û”"�ÏáOŠÎc‘N%$¹,IcŒrMOESU� 쓞˜©M¤>ZÆ7ª®pF_äjz(¢éÖé»oš»ŽN&q“ëÖ§XQfy@ùØ'=†qüêJ(¶�îRáƒ@B厾:fŸI`ƒ˜±ç¹ëO¢€+­œ+çæn˜åÛÌ9üxü*#¥Z–Ü|âÜrf|ñÓ½]¢€ KHSg år™¹SŒpMZE”®æ2œ¹v-žÝêz(k h@¾AÌax‚?‘ [ º7rûvŒ±Àgð5ZKyg3:1�¨RC‘ÀÏ¡÷¥†ÆÞ)�X@ó“œ~>õbЬ¶É$N±íò~â‚v޼ã¦y<ÓšÒŽhöafÎð3ž¦§¢€#–˜Ä\Æû×¾þ¦™=¬w ŒåÃ.@(åO=z}*z(±°€Á 8a8Ú¡ÈtϯNôñiÚ å7KÙ˜“·éžŸ…MEW6Væè\ˆöÌ:ºœnúã¯ãR$‚Pýãn{‘�éRQ@ †$‚áŒa#P«Ÿ@1O¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÃñf‘6³¡µ½¾<äq")8Ü@#­y‘ðÖ¶¤ƒ¥ÝdzFM{Mèas˜xr$š8ñ(W—3vgŠÿÂ7­Ð.ëþýš?áÖ¿èuÿ~Í{UÓýµWùQÏý—Où™â¿ð�ë_ô ºÿ¿f�øFõ¯úÝß³^ÕEÛU•ö]?ægŠÿÂ7­Ð.ëþýš?áÖ¿èuÿ~Í{UmUþTÙtÿ™ž+ÿÞµÿ@»¯ûöhÿ„oZÿ ]×ýû5íTQýµWùPeÓþfx¯ü#z×ýî¿ïÙ£þ½kþ�w_÷ì×µQGöÕ_åAý—Où™â¿ð�ë_ô ºÿ¿f�øFõ¯úÝß³^ÕEÛU•ö]?ægŠÿÂ7­Ð.ëþýš?áÖ¿èuÿ~Í{UmUþTÙtÿ™ž+ÿÞµÿ@»¯ûöhÿ„oZÿ ]×ýû5íTQýµWùPeÓþfx¯ü#z×ýî¿ïÙ£þ½kþ�w_÷ì×µQGöÕ_åAý—Où™â¿ð�ë_ô ºÿ¿f�øFõ¯úÝß³^ÕEÛU•ö]?ægŠÿÂ7­Ð.ëþýš?áÖ¿èuÿ~Í{UmUþTÙtÿ™ž+ÿÞµÿ@»¯ûöhÿ„oZÿ ]×ýû5íTQýµWùPeÓþfy_‡|'ªI«ÛÍsm%¼¸vi ÁίSoº~”´�÷OÒ¸1X¹âd¥-,vaðñ¡DÝJZA÷GÒ–¹N€¢Š(¢Š(¢Š(¢Š(¢Š(¢²äÖ¥d³µ{€§Ã\ûLþÓÔ?èïòÖ¾Æ_ÓF¾Æ]4kÑXÿÚš�ýOýÿZOí]Kþ�þÿ­Æ]×Þ¿Ì^Ê^_z6h¬_ímOþ€çþÿ­'ö¾©ÿ@cÿ� OØKºû×ù‹Ù¿/½tVö¾«ÿ@FÿÀ…¤þØÕ¿èßø”{ ÷_zÿ0äÓFíƒý³«ÿÐ ¿ð%)?¶µ�ú·þ¥?«ÏºÿÀ—ù‹•›ôW=ý·¬ÿÐ¾ßø”ŸÛz×ý Íÿ�IGÕ§ÝàKüÅÊΊŠç?·5Ïú[ÿ’“ûw]ÿ¡q¿ð-)ýZ}×þó %Íokßô-7þ¥'öþ¿ÿBËàZSú¬û¯ü ?æ#¦¢¹�íÿÐ°ßø'ü$!ÿ¡]¿ð2:>©S¼ð(ÿ˜®uW-ÿ ˆ¿èUoü Ž“þ/ÿÐ¨ßø?ªTïü ?æ.duTW)ÿ ‰?èSoü Ž›ÿ ‰èRüŽ�©Ôïü ?æ.uý&u´W#ÿ '‰¿èQüŽ“þ_ÿОÿø?©Tïü ?æ/h¼þæuôW5¤x¹o5!¥êZ|úeûÑÇ1 ²�×k tµ…Z3¤ùf¿¯R£%%tQEfPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEž”JàõÿjZŸŸáýzçHµºcöûx�‚°'%�tV<çëõÏa¥ivš6› …”e ˆq“’Äœ’OrO$Ð}{[·Ð4Ów> .4ç.Ø'ö  ̸ñÖ‘o¨GÉ!´kG¹k¡…@Rž‹ÈÃg=1ޗƺr]i"ñä`lòȃ¡fÂäýoθÝgOº¹¾�àÖM$±¼šÞÒq…§Tª®3Ïâ*;M^Öï쪥–[›´¢üwÿ� ÀñÚqÖž;ë“i$V$Ã*Îc/¸œ¯¿ÝCÃ÷Zdhßg½72X²JÍ9s…V /nGé@Sø×J·’xØ\—Œf0-ß÷Ç•^:ñVn|O§ÛhË©»0��cTpQ‹ÓæÇOé^_yikq«}·ÎI-Ú_*3+CŒìyvR¼/ךéåcд¤Žý%ۀѢÎ#ýÛñ„9þ´ÕÿÂQ¤‹ù-öÊÆ’iVœc×�úŠ�RñE¶–nÖw�ä`±D+Œî�à�_jäÞÕ´ÿe^ý’’$8“ÎÂ�·<�AvÀ¤ñp…ÚâcuJdpWÌ1>â¯~´Ôé>/²ÕÚo*Öî(áVi$•WhÇ'£ßÒ�øËLû\0ª]´r¡u”[IŽ1Æ1“�søW §Égcªê²ZÅp2vUQì–Œ%çž�:Ö•Íû^Él’Ogj4–x 5ûC$„(ùFEv’kö1Çk#3…¹vTÞ…Ú $†Á�ÔTV^$³¼žÖ¯]B%ˆ¶oUÈèzpkœ×^ÇRð­…™X~×wô–í¼ß³# ³—n}‡¾+7ÁÐX�j5-¢E„[F�,¹Àh˜JŒu÷¿}ñLÓî$‚æÎñ]?vx^¿ÇúVÖ‰®Ã®E$°A4h„ ÈPäŸM¬kÎõxe¹Ö.…½²”yŒ[»¾iNdJ$r1Çzì<Ìl®Ä±í¸ózKä’ ³€Zêh¢Š(¢Šæ|dбè× 4Z¥¸Gî6æ+³®;Æñã¦ØV×ÿF ìkª¯û½?û{ô3�Ç/�QEÊhQEQEQEQEQEQEQEQEQEQEQEQTïï…š XÌ“Hpˆ;ÿõ©Æ.NȨÅÉÙ(¬;Y<ƒf¾ÅXãõ¤óu¾Ïeÿ|7øÖžËûȯgæ�š+Ë®v{ûá¿Æ“Í×»=‡ýðßãOÙy'š7(¬/7ĤÓÿï‡ÿi—Ä]¤Ó¿ï‡ÿ=�÷�¹<Íú+Ÿó|Iÿ=4ßûáÿÆ›æø›þzéŸ÷íÿÆŸ±_Ì…ËætTW9æx£´º_ýûñ¤2x«´ºWýûñ§ìó¯¿þ¬t”W3æx³´ºOýûñ¤ó<]ÿ=´�û÷'øÑõuüëïÿ€#§¢¹3ÅÿóÛGÿ¿R�7Ìñ�i´oûõ'øÓúºþxýÿðsª¢¹C'ŒûM¢ÿß©?Æ�¿�{O¢ß©?øªV_Ï¿þ¹¼Ž²ŠäKøß´úýú“ÿФ/ãžÓè÷ê_þ*�ª¯ùù¿þ¹ü™×Ñ\T¾#ñ€R}~ÖÎ}=˜,—[�‡'elä}+³GY]*à Žâ³«BTÒnÍ>«aÆjZ¢Š+‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( KsFÑËÉpÊã þ±Ç1¬q"¢(ªŒ>”ê(‰ Q G À*�ǧêj¸Ò´á(”XZ‰ÜÉ\ƒëœUº(­9Rè¬PîRFvž™™¤Ž(â #�P1,vŒdž¦ŸE68£†5Ž$TEUQ€°¦Áo ¬ ¼1à ,q¨U@*J(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤oº~”´�÷OÒ€÷GÒ–�}Ñô¥ Š( Š( Š( Š( £� �Hƒ«)ò©(¡; ;jbi·(m!%ˆltn#ж^3Õ—ó©®tÛ;·ß=º;{¡ªÿØ_üú/æƶnœ�Ûkúõ5“§'}Wõê;t[·nMØÆr*9cµœƒ*C!7€qKÿö•ÿ>‹ùŸñ¤ÿ„sI?òæ¿÷Ñÿ-K»û¿à“j}ßÝÿ`¶°R‚ØÈ!V¤”[Ì¡eò�C°pAÈ4ßøFôƒÿ.kÿ}ñ¤ÿ„gG?òäŸ÷Ñÿ-G»û—ùŠÐîþïø$’%�£�ÆèÃX‚¨æ†ÊàÆgH$1�ɼ´úŒô¤ÿ„_F?òâŸ÷ÑÿOøE´Sÿ.)ÿ}ñ§ËGùŸÜ¿Ì-äÌÐ1Ë4gêE7m§˜²bë�­ÆFzâ¢ÿ„SDÿŸÿ¾›üi?áÐÏü¸'ýôßãG-ærÿ1{£šÛNv,ðÚ³’J©&ŸÙÄ�`@@P>µü":ýÓþúoñ¤ÿ„?Aÿ rßMþ4ùpÿÌþåþbКXìghÚU·‘£9BÀ§Ûґ㱓ﭻ|ÛùüØÆ~µ]¼ p�OûMþ4Öð‡†ã!^Æ O@ÒŸÖŽ\?ó?¹ò@Xò4íûü«]øÛœ.q�qù�ùRù:x.|»l¹,Ç óÜÕI|%áxqçY@›ºn�Œþµð§„÷6–Û�8óNzgÖŸ.ù¥÷/þHEö‹Oh„L–Æ0BàÐcÚžÿc“g˜`m„2nÁÚGqéYƒÂ~uÜ--ŠñÈ”÷üi?áð�e_²ZåùQç~œÓåÃ4¿ðÿÉ S@ç�Ìv¥ãbÈØ\©=Hô50’Õ]�^Í÷ˆ#'ëYià¿ ÈûÂlgh‘‰ÇçO>ðÇ}*?ûí¿ÆŽ\/óKÿ_ü�½ãKí0Ïhÿï¡GÚ`ÿžÑÿßB²Ûáÿ…Øq¥Æûíþ5U¼á�H:T÷Û�>\/óKÿ_ü�¯>Ëúùßiƒþ{Gÿ}Š>Óü÷�þû�ÿ†ü£ÿ¾Ûüi?á_ø_þ�1ÿßmþ4ra?ž_ø ÿä…z�—ßÿ¯â+èum[HÑ,]g¸±\Í圈£Œä–=³Ò»ªÃÒ´]7D�“M³ŠØ?Þ(9o©êkG{xþuêÂJ0§²ï»¸á›rݖ誛ÛûÇó£{xþuÎYnЧ½¿¼:]íýãùк*¦öþñüèÞßÞ?�[¢ªooïÎ�íýãùк*¦öþñüèÞßÞ?�[¢ªooïÎ�íýãùк*¦öþñüèÞßÞ?�[¢ªooïÎ�íýãùк*¦öþñüé7·÷�ç@(ª›ÛûÇó£{xþtnŠ©½¿¼:MíýãùÐÊ*žöþñüéw·÷�ç@ë&ó�v{@Ä~uo{xþuŸ!']‹$ŸÜ7ó¥-ߣ5¥»ôe©¦X#.ß@séUžòx0óÛm„œWÉ_¨§ßC$Щ‹ãpàøíU//&žÒH’ÊpXa‹€;ýjéÁ;6’5zŠç/ü]•Õ¼#O¿o2)�ٟМ¯ô­ôÚð. ÚËÇc^}<6÷zÕÈ3ë+ )oþ½ËÍÎ\cøGAë“X0:«ïÅm£5ìv×fo. yc(ò?aƒÛßëU¡ñkKtÖŸØ×ßh�U¤PÑ`Î9ßìj••½æ©á)à‚Vò`ÐN·ò¹òÎܹàç?�eØørXüIx£AÒIŽ å›h9nAÛ׎ èõ¿I¥Ï¬UíÅÌ®«XþVîØ9ì3SÛx�o#‘ã°»‰Q¼Û… GbÙ8æ±µHM·Š…Õõõâ$–„!·BÞIÜ¿*áO^rqÍCá[›{M&u–}Bigsm4-´®âxùG${÷  xìǨµ©Ó±²5.uVyÀìF;Š×ƒ^’{+;ÈìYá�Ê·•(vAУ=qÒ¸[íP± {s±ÅºÛ ªˆ�A;W<‚ ãéïWa·’ÛÚ­¦ÝͨE?Ú@`Ò Û›‘ÐŽ:ûPEoã;Y/f‚{KÈUnw�€,Àcwri—>6´·ŸPŒÃ!û8e€˜Ø ä^AÆ>öµ�ÔwÚ îc/5ê^]KåÈ`Àª*íéÂŒ“Ú“NÒf¼×Ùn-/–sxÂg?»R_ådî§¾h~o[&›sq›‹q’‘¡ÆöÚXtÎyö¬õñÔ’RÆÜìó<ÒnøMŒW“·¹zÖ}äRÞÚjûæk†Xm`yȲ1ÆÓŒõ\ýj�ðåÒ4Ѩ�äo=6v ®¥ŸäÆ2Œç¥wsëÑZZi—7J°%áŒ��P·'ðÅ_ˆlµ;»«x® /¥# &E áùŸÊ²¦‰õgÐì­åž1"æIü±•ù6¨;�$ž=ªö•Õ¶½{i5ÃÜD�Äñ¼‘ª�X°#*   ê(¢€2|R¡ü'«†�±ÊyÿpÖ�‡Io éLNI³„“ÿŸâù5úò›ÿ@5ßò+é?õåþ€+¯þaíïÐÏþ^|�:(¢¹ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Н}y�aq{pÛa·‰¥�ŽÊ£'ùW6ñÎÚl:¦·¨_B×2Æ«ok1…-ÄŒT‘‚Ädd“ë�@eƒ§ÜÜØk+¥ÜÞË{˜šk9Ü ÿ)‘ˆá¾ð úg=2okº‚éš%åן2,Oå4Œ2m;Gµ³Ey$z‰ŸQÔã†+èïL±È²›‰#‰ÐÅ´†"C¸‚AcÈÇ&º½RRm7FƒKÓn&{f[–{Ù€`cãc÷œ“סÁ9é]…çvòÝZyú6°fÓ¥šk�¶�ƒ¼ˆêÛJ±yÉëÒ½ z+m+�Öê>´ê(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤oº~”´�÷OÒ€÷GÒ–�}Ñô¥ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Ÿ¾>†³µÓ¨‹:hüÁæ€pÛ;í÷­8qô4o‡ò íMÁ‡ý$Fþ™’F?•·cåÆ}é7�CùQ¼zÊ€™´ùž¼}*Jnñè*7�CùP6Ÿ¨šåÛÜ^™-ð¿º1áFGlwëŸjÛ¦ï‡ò£xô?•Gqü5ÏAs|o¡I ³²Ë@@QÎlc+£p¯ŒîãÚ™å'û•qWž!‹Z½†5�­†óû™zñõ4èouÖ±/)�%>_+'{Zí|¤ÿoò£ÊOöÿ*äb¸×›Sˆ8v´ŠÎÈR}ú“ÚºIšU å(c¸§zµå þ÷åG–ŸíþTÎxšmR-ÿ²·ù†L>ÔÝÆ+-®¼Cý©kóD;ÔHâ?”�¼õµÛùIþßåG”ŸíþTÀŨx”ióŠå§FP¿»°ÉÉéì?:» Ö²Ég¾Yƒ8ÄŸ¹û§'$ü¾Ÿ­v>R·ùQå'û•sz\Ú»jηªÂØ«Î#üö­ê›ÊOöÿ*<¤ÿoò h©¼¤ÿoò£ÊOöÿ*†Š›ÊOöÿ*<¤ÿoò h©¼¤ÿoò£ÊOöÿ*†’ëþló·Ž‚º]:IeÓàyËJüÅ—iÏÓµLlþ®ï•ÿâi?³ßþî¿ï”ÿâir®ÿ˜¬»’ÑPÿgIÿA¿ûå?øšOìÙè%yÿ|'ÿG$™~?ä"z*¿öd¿ô½ÿ¾#ÿâ)?²æÿ µïýñÿO’?Ì¿òÍWû&ú ßßÿñŸÙÿÐfÿþø‹ÿˆ§Éæ_�ù ï°Ïùš,¿ëÖoý :Ô¸ûÃéT¬ô¡mz.强¹•PÆžhP ÆÕ‚´+‘�ß•Ñ'{/ÕŠ7Ô­SO÷R�-?Ûü©îÀ7Õ‘EjšOõ)G”ŸíþTö ʆÀö  ÔTÞR·ùQå'û•CEMå'û•R·ùP4TÞR·ùQå'û•CSOü4¾ZµùSœ+ã;¸ö  Õhÿª…Gå'û•=ˆÚ¨í@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQG|Q@Q@Q@Q@Q@Q@Q@Q@Q@#}Óô¥¤oº~”º>”´ƒî�¥-QEQEQEQEQEQEQEQEQEQEQE4ýñô4êiûãèj+ËU¼´’ݤ–0ãâr¬¾àŠŸ Éª«©X¸ÊÞ@G^$¶VKed¶ÂY¦ÀæIœ»±îI5ɧ€ÊAs¼Ë÷gää“ùñùPXu!·7� Ý3 æ¤[«w“ËI£gçå 3ÅskáY8SÍ�¶19ù—®:qÎ:}*æŸáß°j+v. “Ë©gi�nÑEQEPHMRöËížWïå�Ëpß#c4eþã}('jgÐPÑíHÿê�Ò€"óÛÐQç· ¨¨  |öô#ɵA­V©¦û‰@ ç· £ÏoAQQ@¤Å˜55U‹ýbÕª(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Ša–0á Šÿy¬xŽ_¥·“n²¼å¾ñ8ǧֵ¥°Y/ã¹ÈÚ9e#©áþÇüHÜ?³.B³çŽ?†ºð4ãSM]kùعÊ\£¿üñÒPÈ55> j²!tÒãeH Ea?ˆdi#qâ¸b9>¾Àv k ,€G Ý÷Nzp}úW¹õ*vþûÏ'ëSÿŸ�î7_â©o}2%_S¸ í4­CûWF·½òü³(É\çJòmCX7öæ#Ü6T�OzôÏ +/„ìCÒpÞ5Řá©Ó¢¤£Êîuà«Îu\\®¬nÑEâž QEQEQEQEQEQEQEQEQEQEQEQEQEQE‹ã d‡Ázܱ;$‰c1VS‚ÃÈ5ø#Ã%:-§OîÖÍõ”�…Å•Êo‚â6ŠEÎ2¬0y®^ÿBñ?Ú éº¹À®Æžäï#Œ‚dzŽ´ Ñ´íź?öe¤v‚á.a@pHךÞÖ®§±Ðu»U q¬’Ĥg,ªHïȬíC»Šxïu{–¸¼‡zÂÅÑ€ÉåW“Š»®XO©é�iµÌŒ»�Ê3¨ç;T‚N@ã"€<�RÕµËÏ3Rmd µ´èöêÐ’愸œ’9é]o‹#dÓtUKužv¶•Ë]]N0/0Œ«‚IÆ2I¥ -×P{•¼}æÝU]—(dÜÄæ>ÜàxëZŸ…õKë . yôûYm£ž)JÄíÙ§Ê»�Îy<Zá´;y.^5š¦ˆf•�ï¡}³JT*ïpÐx# ⽦¸jÚtÈÑê:{FVÞ9T[ÊÖ)7ä•°ÇžØößPEPEPEPEPEPEPEPHßtý)iî�¥- û£éK@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ?|} bk+°ÑnŵÂLÒ ò(À¶~øúóÿÈÉÿlWú×n„+ÖäžÖ9q•¥JŸ4w:OøXZWüñ¹ÿ¾GøÑÿ Jÿž7?÷Èÿó*Ж+ak! `GYrON þuìË+Ã+hþóËXúïª;ßøXZWüñ¹ÿ¾GøÑÿ Jÿž7?÷Èÿã´¸´¶Òä{Ï/Ïó0 ¾+E ÐV䈙?ïz çŸZÂx,4[\²6Ž*¼•ù‘ÐÂÂÒ¿ç�Ïýò?Æ�øXZWüñ¹ÿ¾Gø×>¶º–d&6‡ÍïÏÿZ©4g–‡d#çâ`N3ÉëÓ,ý™ÅbÚG[ÿ Jÿž7?÷Èÿ?áai_óÆçþùã\ª¶A¢k" s޵�[Ã+ÃI^ÌÆXúñvº=7þ•ÿ¨n÷GçF÷GçN¢³,o?Ý�7÷GçG›÷×ó¥VVû¤¡ .&÷GçF÷GçN¢€Ï÷GçK–ô�-™oAùÑ–ô�…$ïMócþúþt‡e½çF[Ð~t ‚2E™oAùÑ–ô�-™oAùÑ–ô�-V—P´…¶É:)ô4c-è?:2ÞƒóªÑê6r¸XçFcØUªL· üèËzΖŠL· üèËzΖŠL· üèËzΖŠL· üèËzΖŠL· üèËzΖŠL· üèËzΖŠL· üèËzΖŠL· üèËzΖŠL· ü鮂A‡�ziôP?g‹þ}âÿ¾GøQöx¿çÞ/ûä…ME>f+"³Åÿ>ñß#ü)Ì@6€*JkýßÄQvÂ袊C (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Fû§éKHßtý(t})iÝJZ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šiûãèk›ñƒÓ\¿[¿¶X B<½ÙÇâ+¤?|} :µ¥ZteÍfgR”*G–jèàÿá[ú ûñÿÙQÿ ØÐPÿß�þÊ»ÎÕ_ÏoA]?ÚX¯æüù}Gü¿‹8¿øVÃþ‚‡þüöT¶ô?÷ãÿ²®ÓÏoAGžÞ‚�í,Wó~ üƒê8åüYÅÿ¶ô?÷ãÿ²£þ°ÿ ¡ÿ¿ý•w1¹pI)ôib¿›ð_äQÃÿ/âÎþ°ÿ ¡ÿ¿ý•ð­‡ýýøÿ쫼¢�í,Wó~ üƒê8åüYÁÿ¶ô?÷ãÿ²£þ°ÿ ¡ÿ¿ý•w”Qý¥ŠþoÁ�}Gü¿‹)éö+¦iQY£—X“nãÞ®‚šÿq¾”áÐW¤äÜžìêI%dŸ®HÑh·nŒU„g‘Z•âC�^Ÿúfjè«ÔŠóDVÒœ½æ?jcÉ•¿3Z&½>—v_yx˜üèOQíY1BfÓâx·4Ï1LÛÔŸbx’ì](·®:@ükë*S§(¸Hù n¬$§zí•ä7ö©q†F•X®_Àm»Ã ÿÓF®¢¾WMS«(.ŒúÜ=GR”fú ¢Š+c–ñ¤Ïµ²«• ç8=k�’gQþ±¿:ê¼|Ûm­?ß?ʹÛh ZÆík 2I‚“ïŒ×‰Œ¼«´�©Ëyc…ŒŸvmøwÄF×e­Ü›¡nÉåk·0ƒÐ×’j o °y[VB2ê�¸ŸZõ[?øòƒþ¹¯ò®¼ YI8K¡çf¸xAƬ4æ¹=Q^�ãˆßtý+Åu×–mrô™å�ަ½©¾éúW�O2øžñg#o˜Ø p ì3Ú“<,õ9S„WWú´™šÛRFiJñÁÍzž�­-úý�ÙLÈ3Áê+ÏåÓ§þɵk6%ã�`¯9à×´4·Pÿe„†çýX£ìÚ_üúÃÿ~…{Ë:£%uK}wÿ€x_ØõVžÓËoø&/ÃÐãà YHÌŒFGQ]]E‹fØT*¯`0K^-z¾Ö¬ªZ×g±BŸ²§vAEVF§ñp²´`œ‘ÛŠá®oÌñÀ˜eò£Ùõæ½¢àÛ° :+ÎsU¼�7þ}¢ÿ¿b¼ìFÕ›š•®{x,Ú8z*œ¡{_¯‘ãQ»4¨£y%‡¯n³Y@Á®*®±iÊÁ–Þ GB#yX2†^‡¥i„Â<=îïs Ë1XÎT£ky‹EWiåˆßtý+ŵvx†ìÍ :ù¤íéšö;ËÈl-$¹¸m± Ëf³mîô]Q·¤1HJËEÉSÆz{Sq|¼Ý71ÂÇ£OžÍ;÷<µ5KXœQ:ucRSºZÚÖ-ÑEÏt+7SÓ�æB’0N+J™$‹Ë ¨ÉÅÝ ¤Õ™ÊŸ»Æûä˹à(ôY|(Ô¤œÌ¾DŸz íÇÓÒºÿµÃýãùQö¸¼*Ñכݑ젶FN‡áÕÑæ2 YÉ�aÜrO=kv›‹"åNE:²”œ�Ùi%°S]w£/¨Å:Ž”š¾ƒ9“á뼜I>´Â=wÿ=#üëípÿxþT}®ïʼ�ì<'g÷�?[ªdéú,ö׉4’&Õì;ÖíD—»Rr}ªZîÂá)á¡ÉOm̪T•GyQ]&fV­¦K|ñ¼N ¨ †¬ïøG®ÿ礙®ŽI’,n8ϵGö¸¼*ókå8jõI§wæo MHG•ð�]ÿÏHÿ:ݰ¶kK4…˜3¤S¾×÷�åR£‡PËÐÕárêi¹ÓZí¸ªW�Ei¦¿ÝüE:šÿwñÞb:Š( Š( Š( Š( Š( Š( Š* Û¤²²žêLì†2äø¦“nÈM¤®Éè¯ ¼ñž·spÒ%ã@„ü©PÂU®ÿÐNÌW®²jÍk$yÏ4¥}=šŠñŸøJµßú ÏùŠQâ½t´¦ã×úQý‹[ù—â/íJ}™ì´W9àý~]sO“í!~ÑfQ€Àô8®Ž¼º´¥JnÝ…:‘©8ìŠ(¬Ë (¢€ (¢€ (¢€ (¢€ Ã]â Ék®_[ù™bT…‚ä’@,„õ'©­Ê(;NÒ~Ås5ÔדÝÜÌ‹–` „RÄ( êÍïÍIªé�êú{ÙNò¤lÈÛ¡rŽ °a†Ž@äsWh þ ?ú ë¿ø6¸ÿâêÚh‰á´Ð÷Hm’ßìáÉöãqÖµh ~_鳬’L÷2_<žh¾2‘è‘´ zƒš’óÂ:>¡$Ó^À÷3È¥D³ÈÒò1”RJ¡ú[”P?¦øBÓL½²ºŽûQ™¬âh¢K‹“"€@Nƒ¦+ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)-#}Óô }Ñô¥¤t})h¢Š(¢Š([ÿ�Ôÿ®cùšÌ­=oþ?Sþ¹�æk2½J?ÃG_�€œš*ÄGïå­þ#ßo·õªõi܆…_¼>µØ/ÝJã×ï­v ÷GÒ¹1}œ?Qh¢Šã:BŠ( Š( Š( Š( Š( Ÿ¾>†�M?|} :€Ò«yíV7¯÷‡çFõþðüè¿�þÔyíV7¯÷‡çFõþðüè‘!E9ïRRo_ïÎ�ëýáùÐÑI¹¼?:Z(¢ŠkýÆúS‡AM¸ßJpè(ª×:}­ÜÑK<òDrŒG*}ªÍšMYŽ2qw‹±JEòÛb[‚ª8àÒ %À6à} ^¢„’VB‘¬`íf�EÀ(¢ŠcÆ�Ë($U?›þ}‡äjýR1Qޏ5h 0-QEżWP<3Æ7eaÁ¬ë{Hmx‚ÉPm žƒ ­j)ÝÚÝ q‹wkS?æÿŸaùšÝrä´!èqV¨¤PQES]ÆdS¨  R ²¶à�߈ÆékpêpjíÕEA…ê( Š(  R ²¶à�\gÍÿ>Ãò5¡EV¶\±& „t8«4Q@Q@Ü()»ËÞGAU~oùö‘­ (‡ÍŸøö‘«Ê¡T0=)h šÿwñêkýßÄP¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+3Äò-ê_õîÿÊ´ë3Äò-ê_õîÿʵ¡üXú£:¿Ã—£’·¦Ÿ¥½„’ÅÇÎ牳°Œ1Ààü¼cž9­=f{«m5æµ–Æ&C—{æ+¯rHéÚ“KдÝÍþ϶ò¼Ün˳p:(ÜNÕ8Q€3Ò®Í7ùsÄ’¦AÚêdƒƒèy 1-®EáÍ:öA¦‹¯�ÊÏöy²w`Î1�œõÇB À®—]ŠóTÐ--æ�Ì‘ØLÒéñ™#NWióŽÇ9ìk¬ ‚:b™Â(‘!Q´Fª�éŠò­ßR“Ä]­­õÅ�Œççuvf�eH f `ÉÏ^•ëÛÑ[r3‚0EEkimcn¶övðÛÀ¹Û(FNNã­M@Q@Q@Q@Q@Q@Q@Q@#}Óô¥¤oº~”º>”´ƒî�¥-QEQEQEQEQEQEQEQEQEQEQE4ýñô4êiûãèiÔ×$!#¨ªþkÿz¬‘¸{Ô~Búš‹ÍïQæ¿÷ª_!}MBúštLY2zÓéB.-QEQE5þã})িÜo¥8tTW'î}ªZ†ë?e“q@Þ©{½½œ€³Í"áväg4–R¼š•ÆlÌÆ¡ˆÀ~zŠ’T²’H+Ó‘+!ÜÒ8źÜÛÛESäKñ7ìNa?ïUš©§gì¹#«Uº BŠ( 3øÇ/•¦i§ÖfþUÌxCEÓõÝìÜ‚³‰°“)å~QúWCñ¶‰4M6HawT�·•RvåxÍy ®µ¬Yi³X[y±Ã3n}¨w1ÖºiËܱÍR>ýÍ-B?ìíR[C4syO�èr }1kÿpÿ×5þUòL1^Mq%¼¬ìÀäšúÞÙJÚB¬0B(#ð©­+ت1µÉh¢ŠÀÜ+À¾%ÜlñÍêçøSÿAïµó·Åˆ.ãñíÜŸg“Ë‘#(ÁNm�ÄV´]¤eY^'A{á‹ Ÿ ÚßÛH¶· l®å›ä~2sèk#áÌûüu§/©ý×!{­kö–ö“y¾D#T qÜúšè¾[ÝÉãûû<ž\aÙÛiÂ�„sø‘[Ê^ë1Œ}ä}EWÖQEQEQEQEQEQEQEQEQE×û¿ˆ§S_îþ"€EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPHßtý)iî�¥- û£éK@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ?|} :š~øúu#ªO¥Eö�ýÓR¸Ü„õ_ÉJÚ÷MhÝ4Ï%ý(ò_Ò€'F¹êdjU0zÓ袊(¢Š(¯÷éN5þã})à ›#¬i¹ºS© † ï@¼ûoîûæ�>Ûûƒþù¤”:ÈB@¥}vÒ �¸<ü´b)R@vtÕ%"ª¯ÝP>‚–€ (¢€!šH—å�dÄf¡ßgÿ”5Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5þïâ)Ô×û¿ˆ QEQEQEQEQEQEQEQEQEQEQEQEQEQE�¨ø’ËI×,4ËìÃöðE¼ì~F�”>‡‘�_ç³\¯Š|%ÿ n«¦Ç~Ê4‹2gx”�óKÐ)ôP3“ןƺ (–©«YhÖMw}0Ž1ÂŒe�»*�Ëè+�‹Äµ�Ì—š´pÿg;~ò¹›OR>F” €I?Ãî5ÕIoÒE$°Æï-2‚P‘ŒƒÛŠÈÓbaâ�yž3帷•á¾CŸ­lÅ,sD²Äë$n7+¡Èaê eøcWþÝðý¾£¹[ÍiPqò»/ôªÚÊܼQèM¤�$é¶[˜ÀŽ;hIÃm?߯@¦rzsµ„ž¿Š->ÒItk¢‰"Gó5´˜Tt`ïC–îh§¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤oº~”´�÷OÒ€÷GÒ–�}Ñô¥ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Ÿ¾>†�M?|} :€ nõþðüè“ý[}*¥[Þ¿Þ�×ûÃóª”PÐATpÿ«üjJ(¢Š(¢ŠkýÆúS‡AM¸ßJpè(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦¿ÝüE:šÿwñê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Fû§éKHßtý(t})iÝJZ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠiûãèiÔÓ÷ÇÐÓgb�³)Á€$¤Àô›çËýóGŸ/÷Íi`z 0=fùòÿ|ÑçËýó@tVgŸ/÷Í|¿ß4§Ef‹‰r>sZTQE×û�ô§‚šÿq¾”áÐPEPEPEPEPEPEPEPEPEPEPEPEPsM¼FI]QRMgéãøä>â3L¾ãY† cŽ/4/bÙÇ5k…€µ¡¹•Û6´"—2»esâ=8¿÷ìÓO‰´Ñürÿߦ©#»¶–CsFÎ?„0&§Àô¦Ý5¼_ßÿMÓþW÷ÿÀ)ÿÂQ¦ã—þý54ø«KÇ7ýúoð«2ÜA °Å#ª¼ÌV5?Ä@Îà 6îòÖÂ>îx ‹ o•‚Œžƒ&—5åüoß�ü¹ñn”?å¤ß÷å¿Â�ø¿HòÒoûòßáQ/‰4'`««Ø' דùÕ©õ+ kˆí溅&�ácg�áOš�ò¿¿þ¯ÄÆ:8ÿ–“ÿß–ÿ CãMËIÿïÃ…Moªé×s¼÷–òÈ‹¹Ö7 ´{➺…“ÝIl·£PΛºœ#Ož‡ò?¿þ]�´Qÿ-'ÿ¿ þ‡Ç ÿ–—÷á¿Â´÷Æ#/¹v’ÙàT7öz”}”ñÏJîC‘‘OŸü�ÿÿ€- 'Çzÿ–—øßáH|{¡ùkqÿ€ïþyµŠiZæ �6ÙNáòCéR=Õ´qË#MHWt‡#åÎOáG>ùþÿÚˆË>?ÐGüµ¹ÿÀwÿ cü@Ð ã͹ëÿ>Ïþrã]ÑídÜj6�¹PÛd�)Áèpi×:Þ‘g'—u©YÂøl“*œ�M>|7ò?ü ÿµ&ϹHüDðøÿ–·?ø ÿáM?¼#èzôöZÂÝÙ\Ä»‘$„°™sÁB¹ô®�J¿:ž› é´¸µ Â+€�Û ŒŽq@(¬?ÝÇi Nó%è‹3Ù•!ùaœqÎ}+YÖîmüWáÈMž¤þ\— &È€DyPgŸjî(®Çw÷�én¥³ŽI Xäœ[lp¤’íÎ~\®ßrsÒ±¼;¨ËqâÛ8TiÍì’y¢ PK÷Pºe@È.Þ¼î'­z½åÞ(ñ5Ŷ»âk}b8¥ƒMÄ{mÝx7¾Å}øÞœsÓë<4“ÚëZõƒß]ÝCo,>Qº”È˺0Ägë@-Q@Q@Q@Q@Q@Q@Q@Q@#}Óô¥¤oº~”º>”´ƒî�¥-QEQEQEQEQEQEQEQEQEQEQE4ýñô4®¡Ô©èißCN  ÿc‹Õ¿:>Ç«~u;ªO¥Cö�öZO±Åêß�c‹Õ¿:_´³úÑö�öZO±Åêß�c‹Õ¿:™zç§Pqi9çó«Q@Q@ ¸ßJpè)¯÷éNQEQEQEQEQEQEQEQEQEQEQEQEcÏÿ#ÿ¯aÿ¡n¤ác‡ú£(oÿ^)×_»×ãfàIÕ>¤â­2«©VPÊzƒ[ÉÙÅùT ò3õ5�mU†Õ”0òŠõÎ{Ué ˆÊÛP)ÜsŒ sÍW:e™y ÏO§¥Z 6l<ŒcžsQ9'‘†½O!Õ×OºÕíeµÕg¶·YB³^É—Â1Þw6UIÂŒv&ºÙ¬î<3f,|ðßÚ™#¸•ädaó–$ã#w®ÎãN¶¹¸µžDù혴xé’¥yü :{ k‰àšHÁh²zd®Ó‘߃YŒò‹q*Åpï#ºÝ*Î�ä-ÀhÇMÇž�k ÕÖûûcVšÈ\ì«3*!�`‹æÉ#vy+©»ðΗwåÿ£ˆ°$Aˆ÷òF@«-¥Zµ�ݶ×ݳ4¸c’[ƒÏÒ€9}íéÝ“¬7±Cc %°�SÌ.ú µÈ¢&�ý¦.ËíI4…”CÐ@àÜàW¬ÛéÐ[^Mu"I‘#nxÂgüÍA6‰m5•ͨy£K‰I o†%ºŒúP7â+q…jàÜ爖G†Î$Ø[ƒóFAÎ6޵_NŽéüH†9oíîö'˜Ÿg‰Çž ¨~z‘È®³QЬµ[H-nD¾T ¬‚9YGNA¨­|5¦ÙßE{ Ïö˜ÁG�Ü�G äž(�¿[Tšim¦»°™d|ªÆfƒ`Þ¬;ü®À\UICMà+«ës* Ù•â†$31ŒaR3ƒžBŒýMu×Ò®µ¶ÍlbÁß$áÈ Ã¾1ÆiÃzk¼ÿ$©ìH£™‘ øc=ýhœ³]CR³»Ò’HUc¶_:{ȘÊL›·3ò�ŽjÈñÄr\5œ–þlÐËÂC2#°mÄ‚wצ8®Ö_ i.åãŽ{l FÓ¼A€ÏP¤g©üé×~Ó¯’(n>ÐÖ±"¢Û ˜G�ÀÈä¼e=¾´î«9…U“—dÄ0³ÇLŽNy¯G¬»/iúmØžÅØ`ƒ R{”éŸzÔ ±Bä>X6l©ÆG<×cEr:¿…å»ÔdŠÚÞ±ºHÒáÙ¾ed�!ç$îèÇÓf-'XƒÆ—ÑKiw,’Íó#•ˆÆnÞpÙÏlbºZ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤oº~”´�÷OÒ€÷GÒ–�}Ñô¥ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Ÿ¾>†�M?|} :€†å#Ö«ù/íVIÀɦù‰ýá@y/íG’þÕ?˜ŸÞy‰ýá@ ”L´ú@A"–€ (¢€ (¢€ÿq¾”áÐS_î7Òœ: (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ye ô>\Àðr¬ ŸPj�ö4ݧrÐéZÔUƤ¢¬‹�I%dc�ãþ‚·?’ÿ…'ö%Ïýî¿%ÿ Ù¢«ÛOËî_ä?i/é#èW_ô»ü—ü)§Aºÿ Õßýò¿á[”Söóòû—ù žFÐ.ÿè9yÿ|¯øRÂ?yÿAÛÏûå·¨§õŠž_rÿ!s3Ÿ>¼ÿ ýïýò¿áH|9{ÿC÷ýòŸá] }f§—Ü¿ÈWg;ÿÕ÷ý Wß÷Ê…7þ›ÿúïÿï”ÿ é(§õªž_rÿ!×ü#ÿô2ê÷Ê…!ð¶¡ÿC6¡ÿ|§øWME?­Õòû—ù Ç/ÿ®£ÿCF£ÿ|§øS[º�ÿ„§Qÿ¾Sü+ª¦¿ÝüE[«åÿ€Çü…ÊŽ\øKRÿ¡¯Rÿ¾ü)¿ðˆêô6j÷Äá]eþ¹WËÿ�ù ’'$|!ªÐÝ©ÿßÿ…Ieà˜#Ô"¾Ôõ+ÍRhb[–ú…®¦Š6µ¬�½_’²ˆQEÊhQEQEQEQEQEQEQEQEQEQEQEQEQEQEV,þ/ðå´ï ÚÆJº›…Ê‘ÔzÖ´ÅsO©,2 É$lXz‚:Š’ŠBÁFX�õªSkZU¶<ýNÊ,ôßp«ŸÌÐê*. Šây%UšmÞZË`dãéýi ¼·¹–x¡•]íäòåQÕ°ñ  èª×z�•‚†»º†J�½ÀåŽÑù“Šš)¢�KE"H ã(ÀŒÐ袊(¢Š(¢Š(¢Š(¢Š)-#}Óô }Ñô¥¤t})h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(§ï�¡§SOßCN Éþ­¾•R®Ñ@¨«´Ppÿ«©(¢€ (¢€ (¢€ÿq¾”áÐS_î7Ò�áTäP訷§üô4oOùèhZ*-éÿ= ?oûF€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€E7oûMFßöš€M»øŠ6ÿ´Ôޏ_¼O"€EPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^uñKPÔ4y¼?¨èÒÈuOµ˜cµPJÜ#™Hy ùûW¢Õil-'¾‚ö[t{˜–)d lg™À ÚI4¶pIq“;F­$yÎÆ#‘žø5›â­@é~ÔnÖDŽE„¬o#mUvùT“ØdŽkb¨êú\:Æœös3"³+«¨«+S†8 Šó™šÆ Ä60Ñ…º¬impu“Z*¨©Ù&H-–#;°zW]á FÖåµk+K˜.-í®ËÛÉ«!Š@‚88s"ÿÀiá¿ÿ ôŸøoÿÄUý'CeÄ÷R]Éus2,m#F‘€ªX€¬y94CÇ3áæ/»‡ýÙ�Oûc©ÚyTèù�¸mê;)-}&fK)ÊËkm§È�eÏ™3w°Ü \€7g’zv©£Á¬c»’clŒYíÕö¤Þ�ÇVÓ8=óY¶þ³Ý›Ù廹¹Ÿí爞6ب6ÆÞzP?â9/eñº[Û4—Jö™kclê¡Ac2€@Ã,Hû©Š©á®«`ëáë8Ñã7Sy¡¤ ìÁ]~Q€ ÛŸºG¥u—ÞŠú/Þjz—�„_´·Ê� …€yÁäš•ü3ºµ{k©í †8¢h" µÖ6,ƒ8ÈäóƒÍy߉ná¿Öµ·¼Õt˜e‡Ë²Š;¨V9«3—@ÏÛà>;½/ù#žï^–ÒöÂk6»RÒ ƒ>Z.ü;AÚØñšÐ›ÁM=ÛÜ6·{½îäþî,oh¼“ü?ÜãõëW4 á¤�R¹� ¼vþ\ˆ€mŒa9 ‘ïÞ€7袊(¢Š(¢Š(¢Š(¢Š)-#}Óô }Ñô¥¤t})h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(§ï¯ÐÓ©Ü1I†þðü¨ÔRa½GåFÔ~T´Ra½GåFÔ~T´Ra½GåFÔ~T´Ra½GåFÔ~T´Ra½GåFÔ~T�÷éL˜§�Ä‘ϵoQùP\J0}*ÞÔ~Ta½Gå@0}*ÚýÑô£ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¢“ ê?*0Þ£ò ¦¿ÝüE.Ô~T`ç$怊( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ‘¾éúRÒ7Ý?JÝJZA÷GÒ–€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ‚KÛX¯a³’xÖæegŠ"Øg ŒàwÆEO^ñ;NÔ5—Ðl4D‘uQvgŽéI m®˜Žƒ%~¸ @¤wXÑ�Ø*(Ë3=MGn’ÇmO(–e@@»w¶98íŸJÇñŒÒGá[ØáYZ[€¶Ê"Þ0N=þjψz][Û­�ãIr[©’Ýe?tª¼¡°{dWIa}£f—PnÄ‚a•”•`G¨ �¸[�&¥¸X´oÛÙÝlûE¬q[“j…31eùUGtí[žº”êúݤ¶·¨Ó%ä1N 2¤‹†èHÆôs×ø¨[ZÖ­ô+¼¹Šw‰C’aMØÚŒÜò1�¤r*¥ß‹4�>úkë¨ìÄÂR²ÝH‘!ØT#9-Æ=jÂø™d÷š< %ºIf\¤Ò ä‚>û6Æ*£F9ÛœŽ+ž�-b¸Ó®¢Œ$:Α3+-¼+p¥…#Ã$g. ô öûÅú5…І[ÈX7¼ ’+eiÀä’#@5)ñ sm öWÖææQ m,8Räsè qþ9²º›W¸*,â¥\G X·É&Z IèK0ãëÅ}xªÎçì¥Ä‚ÚÚv°…TÊžk1�•Ê©Ãc'�ŠíõYég’+™§&) %°²I±I=:ƒÇSŠ·§jÖº¡¸þh{yr¤±²2¶ÐØÁŒã^e©ˆ[ÖÅ톰òÍwöH¾Ïr^-‰™‘³2’Y›s�ï¿ððZÍw«ÝÅü2NÑN‰s30òd�vu‘òp™Éäg(¼¢Š(¢Š(¢Š(¢Š(¢Š(¤oº~”´�÷OÒ€÷GÒ–�}Ñô¥ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Šâ5oˆöÚ~£-¥½‹\˜£HdÚ2:ãƒTáj/ýþö4è´W5áŸ[xŽY`5½Äk¿amÁ—8È›¹ØÛ¨º˜Æ$Æ·µ]¢€(bé¾tR›8Ì‘F‘#�ª¤2�ô ÀT0xkEµ¹Šæ 6Þ9⑤I~`ÄN{ä1ëëZ´P3xO@y �¤Ú—,\¶Îw‚~¸ãéV,4+K˜Íca¼…{£\£ úV�QEQEQEQEQER7Ý?JZFû§é@û£éKH>èúRÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP«|6º”×V·â•˘Þ<àžNj�ü*Ë�ú Eÿ~Oø×¦Q@¯…|ž¸–êKŸ´Né°›BŒäÿ!]4ð¬ð´mÆ{úT”P;Km!rû›cfh„Ñ4mÑ…>Š¥m§&ó î#§«´Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@“yâ=?^³Òn÷C%êm+}ÉS?Þä|ÖµVf»¨Ï¦ÙG-´hòÉ2Ɔ g¾’xè+™ŸÆóÇguqÖ—7‘ÀTYxvƒòžãœ؃ž”ÜÑ\–¥ãhl%Ò¡d{»u¹hTeŸpÂÇ#,[׌)¨4jz޶¶2iÐ(–v""î“ÛÀ*ò¡]¼ñ‚�Àv4ÚQEQEQEQEQEQEQEQEQER7Ý?JZFû§é@û£éKH>èúRÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPã? ÜøÃWÒm&o'H´cs<¨q#¿EEî8É&»5PŠtšZ(Å p–Voi Íp·‘˜ãfÚó€O8Âk>Ô´�"I.î’e°YM™XÀód¸Ïœ¸ž2Ûz}áé^¯Ep—úuäòhj#ÖËYÚ ò­%Œ9\]È*ØÜ¹€N0MdéÖÉ££Ê>Ðd»¾1ÎÆÚHØ®ÉýþA~Qz“šõ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤oº~”´�÷OÒ€÷GÒ–�}Ñô¥ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( K,pDòÊê‘ Ë3+›“ǺrLàÇÁüèñì�†$ Ä•½Ç_é^Q^Î_—Ó¯MÔ¨Þç™�ÆÎŒù z¯ü, Öçþýõèÿ…�¢zÜÿ߯þ½yUßý‘‡óûÎ?í*ÞGªÿÂÀÑ=nï×ÿ^�øX'­ÏýúÿëוQGöFÏïí*ÞGªÿÂÀÑ=nï×ÿ^�øX'­ÏýúÿëוQGöFÏïí*ÞGªÿÂÀÑ=nï×ÿ^�øX'­ÏýúÿëוQGöFÏïí*ÞGªÿÂÀÑ=nï×ÿ^�øX'­ÏýúÿëוQGöFÏïí*ÞGªÿÂÀÑ=nï×ÿ^�øX'­ÏýúÿëוQGöFÏïí*ÞGªÿÂÀÑ=nï×ÿ^�øX'­ÏýúÿëוQGöFÏïí*ÞGªÿÂÀÑ=nï×ÿ^¦µñƉu:Ä&’2ÇȘú×’QIäø{ipY�këcߺÑY^‘åðÖžîŘÂ'ÛŠÕ¯›©I8ö=ØKš*]Š(¨((¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)-#}Óô }Ñô¥¤t})h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(–ø�ÿ"Éÿ®éýkÊ«Õ~ ȲëºZòªúŒ£ýßæÏ2þ?È*å•¢]CzîÌ þjã¹Þ«Ïýôj�mXk·qAz³j9k}°æF8}êxôàô*¹¨û‡5ýã¶t-8\ù·oºH8û2™ÉõôQëøVeÅÕÅÛ‡¸žI˜ ìX�øÕý%àûõ¼¯™D{VGÚ ’3Ú¦·7³ÓëЪ\¼ú–¿±a·ºù‹:ù¡v?P 3a½Á¶6w:BK-¬hÞpF›Ílã®JöÉÀzÓþÕ½rn-V D¯µ�ÊB2…_ïpE–1évöÒÜF—Ì…¶¸Ú®Àœ’zÕÍ'S—­ôýMÒ…úu'Ö´�2 =¦…¼©R8ʨbwç¯ýjvд‰­íäŽaó T²�™Q¼©N2sÉã§5_Y½‚îÍ•fµ!bP13HÇA·ŸÇ%ì3iÖŒ÷Ьæ2&ÞÃsçýÛgŒwì+$ªòGW{þ†�Ùó½Å)tË}¶{àšÙæ¸1² ŒW�8îH«òi?iÿS8i Gå�œ.Wo?x~zUk›‹E×4ycš‘ªyΘÆDŒNplv«k¨ÙIAÚ"§>\² ¦⊸É_z¹:¶M_¯êLU;»Û§ègÅ¢£^4sAp™·2E¸21 _0‘ó·®¹@·Ä-NëIð…ÕŤ±Å!Äa™Ù[$àmÀëý3X—Zä÷w°2êÚü/v1Z}¬/ ¹>Yt,GÊÇŸ¥tž1Ѷ¼?èúRÒº>”´QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÌøò'—Ã\쑽‡Oë^O^ù$i,mŠa•†AÏIàmI ý™Ó=–R{~cOMÓš{ô<Ìf u§Ïy%ëð�è_óÆoûúhÿ„Bÿž3ßÓ]ÿÛ~Ïîÿ‚qÿfVò<žŠõ�ø@ô/ùã7ýý4¡Ͽïé£ûcÙýßðCû2·‘äôW¬Â¡Ï¿ïé£þ= þxÍÿMÛ~Ïîÿ‚Ù•¼�'¢½cþ= þxÍÿMð�è_óÆoûúhþØÃöwüþÌ­äy=ëð�è_óÆoûúhÿ„Bÿž3ßÓGöƳû¿à‡öeo#Éè¯Xÿ„Bÿž3ßÓGü züñ›þþš?¶0ýŸÝÿ?³+yOEzÇü züñ›þþš?áпçŒß÷ôÑý±‡ìþïø!ý™[Èòz+Ö?áпçŒß÷ôÔö¾ Ðí'Y–Ô»)Èó°éIç4-¢×Ìk,­}Z-xn'‡Ãz|r)WŒƒÛ<Ö­WÍÎ\òrî{��,T{QRPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQER7Ý?JZFû§é@û£éKH>èúRÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPHßtý)iî�¥-4:à|Ãó¥Þ¿Þ�-›×ûÃó£zÿx~t´Ro_ïÎ�ëýáùÐÑI½¼?:7¯÷‡ç@ E&õþðüèÞ¿Þ�-›×ûÃó£zÿx~t´Ro_ïÎ�ëýáùÐÑI½¼?:7¯÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ�-›—ûÃó£rÿx~t´Rn_ïÎ�ËýáùÐÑI¹¼?:7¯÷‡ç@ E&õþðüèÞ¿Þ�-›×ûÃó£zÿx~t´Ro_ïÎ�ëýáùÐÑI½¼?:7¯÷‡ç@ E&õþðüèÞ¿Þ�-›×ûÃó£zÿx~t´Ro_ïÎ�ëýáùÐÑI½¼?:(h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)-#}Óô ¸(ü¨Ø¿Ý•(û£éK@ ؿݕû£ò§V\úÚZß­½Í•äQ4‚%ºeS1Æ XdœdŒf€4¶/÷GåFÅþèü©%–8"ieuHÔe™Ž‹ˆ‰»V¹¶û>›9+mví�äxò†çi=qî2·±º?*6/÷GåYš–¯qa}mm—=иá$I#U $Ìf²íü`÷:“XÇgjd]œ�B2â@ÔñÐ{zÐO±º?*6/÷GåYZÝÄz¬Ö¶ ;CHî× ù÷` Ž~é§éÚÄ×z”Ö7bÞXáY²³  Hì?Ù4©±º?*6/÷GåN¢€±º?*6/÷GåN¢€bÿt~Tm_î�Ê–ŠM«ýÑùQµº?*Z(6¯÷GåFÕþèü©h Ú¿Ý•Wû£ò¥¢€jÿt~Tm_î�Ê–ŠM«ýÑùQµº?*Z(6¯÷GåFÕþèü©h Ú¿Ý•Wû£ò¥¢€jÿt~Tm_î�Ê–ŠM«ýÑùQµº?*Z(6¯÷GåFÕþèü©h Ú¿Ý•Wû£ò¥¢€jÿt~Tm_î�Ê–ŠM«ýÑùQµº?*Z(6¯÷GåFÕþèü©h Ú¿Ý•Wû£ò¥¢€jÿt~Tm_î�Ê–ŠM«ýÑùQµº?*Z(6¯÷GåFÕþèü©h Ú¿Ý•Wû£ò¥¢€jÿt~Tm_î�Ê–ŠM«ýÑùQµº?*Z(6¯÷GåFÕþèü©h Ú¿Ý•Wû£ò¥¢€jÿt~Tm_î�Ê–ŠM«ýÑùQµº?*Z(6¯÷GåFÕþèü©h Ú¿Ý•Wû£ò¥¢€jÿt~Tm_î�Ê–ŠM«ýÑùQµº?*Z(6¯÷GåFÕþèü©h Ú¿Ý•Wû£ò¥¢€jÿt~Tm_î�Ê–ŠM«ýÑùQµº?*Z(6¯÷GåFÕþèü©h Ú¿Ý•Wû£ò¥¢€jÿt~Tm_î�Ê–ŠM‹ýÑùRl_î�Ê�A u4Ý‹ýÑùQ±º?*]Ëýáùѹ¼?:M‹ýÑùQ±º?*]Ëýáùѹ¼?:M‹ýÑùQ±º?*]Ëýáù×'­xêÛL½kK{srñœ;nÚ ú{ÖÔhT­.ZjìέhR\Óv:½‹ýÑùQ±º?*Èðÿˆíµûwh”Å4~69Ǹõ³QRœ©ÉÂjÍ Æq拺±º?*6/÷GåN¢ ¡»û£ò£bÿt~Tê(»û£ò¢�EQEQEQEQEQEQEQEQEQEQEQEQEQE�÷OÒ–‘¾éúP>èúRÒº>”´W-u}§¬¤qÏ •�ÁÄfÚF7/Ýl…À@yòGaש¢€+^éöºŒiÜBXÑÄbv’:dt?�eÛÁÞ¿­Û\F²ÀÑ[ƒŒ©~Õ»MŠìá;csÉÇLÐ9ªù–:lV–=µžçy^EXÑ 2òìÙã?•sÖ�¼pÙ‰FÛHä² rGîwDùrQ»v ·­z+*º•` ‘‚àÒà‚8ô W§Å÷ßiþËÿ�X6ý¾ÜËÞO»Ïÿ…Má‘n§bŠ)½Ä¶ (¢�Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ‘¾éúQEî�¥-PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPã JöÊöÞ;k‡‰Ld�§9¢Š+¾”S‚Ðä¨ß3?ÿÙ endstream endobj 6 0 obj <> /Font <> /XObject <>>> /Type /Page>> endobj 7 0 obj <> stream xœ­VÛjÜ0}/èô\¨vf¤ÑB`e{C yHkè”&HËnúû•¼ë4ZMšcÖ;Íœ9g${¯PC¹ÞÕŸèÐ$ýåAíU�qbcOÁÃWõù­þ¦À럊ôu¹?”û~�‚þxUVåùôïp§6»9jg“žoÕæêZ}÷£àçƒB(«¡¬†ºÚx !”œKê…Ëò”@#&ãK‚u�y.ç{í N®`ô<^XOÛ>J; ë2aEçHˆ"%!Bì£àsž™fuÓK€N[l5€ª�Ðl°†àØ-ºZ‰LHa­ˆ®»B’ØŽ= b#bKÀNc%`©iÕy�¢G )ƒ1žÖbWÃÚèjXeÞºçDX:xYmB4ÚÙ"ˆOÔ^©VäïVª-v¥ÚbWaZ,„‘,ÓÔcqónDZÇRÎÖæ(ðŃ”7;�¯#Ûcaòþ¯lh Œs� ÌéÙé~)#³ñMBH(Éï�„ÖÇ¥�N¦”lÜ òƒ¢0.«)íhA°Ž­Äaˆ“ ÿє׊eCIÆéêoC2–šŒ¥Š0{òüÃÀ,ÌôºÛZ¡Ž»íµL�EΚ/‡8 Úg/øO“—Ž `i›$+´e§­à)¡ßýC[õP³làÔ‘> stream ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀÌ7"ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ôï ø~)!�äbBÇ÷(Ü€?¼k±€0*¦–¡t›@’ŸÈU‰dXay[;QK{UÖ©vå"iÆÉ$>ŠÈêg›iq늱ý¯i޲ß¶ÿ óá˜ág´×åù�…EпECosÒ‰‰àäGçUîu�>Îõm.n¢†VMãÌp£Çs]q”f¹¢îŒšiÙ—¨ªI«é²] T¿¶k‚vˆ„ªXœgÏ¥±j¬¤‚ t4�Ê+7Nñ‘«NÐi÷ðÜJ«½–3’qŸÖ´è E-”RÑ@ E-”RÖnµ®Zh6‘\]¬Ì%”CCvg �ÀÐ4h®cþ›/úkøõ·¤j¶ÚÞ—¡f\Á.í»×ià• �¨4®;(¥¢˜„¢–¡ŠîÞy¦†)‘ä…‚ÊŠÙ(HÈÈú–Љ/-¤º–Õ'�®"PÒFPsŒŽÙÁ©¨�ö—o~Ÿ¼]®::õ¢¯QT§%¢bqOs[Mÿ�U§ýqOýSïN,g?ôÌÿ*f™ÿ «?úâŸú©®"óí¥ˆoR¹ôÍq×NQ’^gDšlä|ê<ê·ÿíïüõ‡ó?áGü#·¿óÖÌÿ…|?öV7ù?þgµíè7æ_Ð[pœÿ»ýk™ñ\A|B™šKRÉç#ùø² `²…wc““ïž·IÓä°ŠA+«;‘÷z S5 Nú¹fž6Š&Œ›nCyÿ¾kërúS¥†„&¬×ùžV"Q•Fã±Ëè[ïõ›H¾ÕÛyô F$©R �Îy~àf©M²ø–H÷ãv¥Ìbc»=wÞäøJí,t}>ÿíqÏpïåñ+î$éDº´·1ÍæÊ¥n ÁUÛ‡cØœgØ×i‰‹áu'cYÈZÚ8K*¥§’Žç4™;ØsÈý*´�64³½Ó®Íþ�l¶ðDUR~Vc–8RrØúWCkáømeWûmì¾\m+$ƒ«wsÀäæ™/†à™ây/õh[|dÜŸ•°FGàOç@ó[]Yx?Wy¢<Œ$ Fç…\•RBŸ”t<ûS º½„¬%»G©ý�B˜Ä!7�·{¡®ŠM)të›)n®åŽp4’îeúg¥Iq£ÙN^D‚8nXîƾb·÷� ó@öÐ\Ïá¦XnþÍ{ƒ)UùÈó€Ùù{óPÇ »Ó¼6!D±¸–29!\yGË Œª{ƒ×õ­y4$ÒbÓ ÅÀ¶WÝ(Ü7L $†8èIÉÆ=*ì¶1Éuk>J›mÛzr1@νgy-þœ%W ä2\µ¼@G´ãp©bëÀ ‰¤{4’uš8f¼Wº’8kÈ$UP§~B‚ª½@í]EÞ�a7›u •¶íÚÒ6Ü»œ~•A|-j°¬bêð*Ì& ç¶Ì‡ß�™ÛŒûPíQ@ p¦6�„Ùô®jYÞ¦š_ì3ÌICÆÕfÎvç¡ïüúr<ŠBŠWiQ·ÓPÑE…7úù?Þ?ΙRMþ¾O÷�ó¦WB215ùuT´¹[;KYmÍ»oygd`ps€çŒw¨ü5.ªÚe‚ÜÚZÇj-Sd‘ÎÌçåÊ•qï[®‹"20ʰÁ¢’c·‚8"P±Æ¡}�¢–ŠbŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢�‰E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@„¢–ŠJ)h ¢–ŠJ)h ¢–Š%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE!Î8ËËsâq3ˆü5§:n;XÞ€Hõû•Ô×3/ƒI^Oíýy71;Vó{—¥&¹£M¬Éq Ô´{K(öü¯ ǘIÏB6ŠÙ¬}#ë¤Ý<ãTÕ.Ë&Í—wbŽAÈñ[4 ŠZ)�‹ªÞkð]Ó4‹k¨6äÉ-ß–sé�§ùÕXu4È&ðý’ÆXna’s÷+¤¢•€J)h¦W1ã?½áïû Ãÿ ½uCWѬuËT¶¿��#�J…$deq�*Aî:Lu¾éúW3ðóþD›/úé?þŽz“þmûÚ‡þÍÿÅVΙ¦ZhútV1yvñgj–-Ô’y<žI4uÕ´S+‘ñÉ6½m‚å5РK*€cŽÿ=GUsíšëê­mà–ib†4’fÝ#*€\ã'½&7…b°‚Êx­L­v²Ÿ¶5Æ<æ—¹¯nØé[ÕÛ· p± ™Ô+Hæ tÔ´ÀJ)h F®™ÿ «?úàŸú«USMñ*´ÿ®)ÿ Šµ�¯çXKvj¶ŠL}:1õüé Z)1õüèÇ×󠢓_ÎŒ}:Z)1õüèÇ×󠢓_ÎŒ}:Z)1õüèÇ×󠢓_ÎŒ}:Z)1õüèÇ×󠢓_ÎŒ}:Z)1õüèÇ×ó  «È9KãånsïU«t¢‘ƒ’=3Qý’ùä+E>ä8˜ÔVÏÙ ÿžb�²Aÿ<Å>t¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~Éüó}’ùæ(çAÊÌj+gì�Ï1GÙ ÿžbŽt¬Æ¢¶~ÉüóQ΃•‘é¿ò ´ÿ®)ÿ ŠµUtßùÚ×þB­VrÜ¥°QE5$I(êÀ§8>”†:Š( Š( Š)2‘“ÐPÑEQEQHÌK1’Oj§§jÚ~­ÉawÂÆÅ¡èhíQ@Q@H'¥BnFx_ÖŸ7ú¦ª”cí?ìþ´}§ýŸÖ«Ñ@>ÓþÏëGÚÙýj½cí?ìþ´}§ýŸÖ«Ñ@>ÓþÏëGÚÙýj½cí?ìþ´}§ýŸÖ«Ñ@>ÓþÏëGÚÙýj½cí?ìþ´}§ýŸÖ«Ñ@>ÓþÏëGÚÙýj½cí?ìþ´}§ýŸÖ«Ñ@>ÓþÏëGÚÙýj½cí?ìþ´}§ýŸÖ«Ñ@>ÓþÏëGÚÙýj½cí?ìþ´}§ýŸÖ«Ñ@>ÓþÏëGÚÙýj½cí?ìþ´}§ýŸÖ«Ñ@>ÓþÏëGÚÙýj½cí?ìþ´}§ýŸÖ«Ñ@>ÓþÏëGÚÙýj½cí?ìþ´}§ýŸÖ«Ñ@>ÓþÏëGÚÙýj½cí?ìþ´}§ýŸÖ«Ñ@>Ò?»úÔÊÁ€#¡ª5nõB€Icž¾•ÚÙýi—ë? Š€,}§ýŸÖ�´ÿ³úÕVuR0¸ž´ê±öŸöZ>ÓþÏëUè  iÿgõ£í?ìþµ^бöŸöZ>ÓþÏëUè  iÿgõ£í?ìþµ^бöŸöZ>ÓþÏëUè  iÿgõ£í?ìþµ^бöŸöZ>ÓþÏëUè  iÿgõ£í?ìþµ^бöŸöZ>ÓþÏëUè  iÿgõ£í?ìþµ^бöŸöZ>ÓþÏëUè  iÿgõ£í?ìþµ^бö‘ýßÖ¥G¹J§¶þ*±EPEPEPdqæ ûKtS®~êýj½Mö–þè£í-ýÑTQ²’èÚ¥ä p ! -Ç^:Ñ£eq;A äL¹Ìi ,1׊ÐûIV  ŽõF­Áþ¨P”QEQER;BÇ äÒÐEPE !€*A¸¥ ŠDu‘£SÈ ä NêM-Ñ"¸u;†Wž£Ú”²®72p2zšZ)žl{öy‹»8ÛžsO Šlr$¨7WSÑ”äS¨¢Š(¢‘˜(É¥ ŠkºÆŒîÁQA,Äà\ûxëë—í²´`nÞ¶“2‘êLï@‘¥øŸGÖfXln÷ÊÉæ*´ŸáÂCi2M ŽòÕ‚O…!Xž„g¦qÐò+£ªzf™k¤X¥¥¢m�y$œ³·vcÜš¹@Q@šÎ™{¬ÝEdò´�»®66$˜ç„ö^ä÷é\ö… ºé‹¨è­­ü7Wí#Í™¾GÐt=«¼¬/ #&‹ u*~ÙrpF8óž€7vŒ€|RÑEQEG7ú£U*Üßê�T oÅ%¼Ë1ö›ˆc"BDl,~\dûsùÖE®µäF!Šúô®N È­“õ)Zþ+ÓoïþÈÖ0‰<½áÆð¸ÎÜuúåSÂzê8ajăÿ=Sðï^ÎaåA*’Wÿ‚y8Ÿn«7ìwÜ×–“<Ò™6ÌUI mSƒ€3É=«ŒÔõ}NÓÆ2Å4Íl¬#¸xnTÅîÄa³l<± zäãŠë¼/cwa¦Ëìb9báCÆÕ¾†¹í{Ú•׋n/,ìc{gµ‰w'— å¸unyàW™ˆåUeɱèÐæök›rχ5 VçT±K‰u)­&kʳ1Æ’†�`Vعà¿sÒ¹“¬kòÅw\{ø®XçÍE$&G”Ì ¡@À<äžµ×xCHÔ4ËíMïmÄ)2Â#ÚcÁÛ¿<"¨î;W??�u&ÆY­nD…Ä*¨îŒª¹U zõ$Ö&¦ü:– ¶:´ÒÜNŒ–Û£º¼·û4QÉó`,móc¡$“ž•QßÞ*kÞjÆH”Çyp¡•‚X#ÝA°:·¦ZêVPÞºhÊK"·7�æ¸|œ—~@P×< ßú„ºÕµêøCM[x¢‘$·ûjâFb¸còvÁíÞ€4ާw{á›QöÖ3\ê"ÛÏU1ÉóÜ��˜`dt<ŽAªCSšúâ2·º¥¸ºó|¢·0�¥›• |¦¶ä²Ô/4ý5K†ÈÛ_Å'“áÔD¿Åœ¦=«2OÜéa.í+Ù ó|¨b�"‘ÌŠËóHO nÉúPQ¡Í%χôÙæròËk»¬Å&¯Õ="ÖKÆÒR �[Ç•é•P?*¹@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@[ƒýPª•nõB€!¸ÿYøV^µ{&�¢ÝÞDÉe�7MݳíšÔ¸ÿYøU;ËHo즴�KE2p½dAá$Ä[P¶‹Q¼“[«˜Ã;7¨þèö§è¾e–£}¤¤šdŠXVÜÊ�¸l'©ÁC‚yÁ• 2x–Â4´6Vº�E·fçÉgÀ.»O?Lý.�¥i­^�N%–[µIê|¥ 1å`ò0I ÿON”¾sƒŒgÞ¹Éog *�åÝå0{sƒùq]ÊA`�ZÆk+‰bXÖÐGûÆ�op~é9ãÿ×@Ú]ÎöwRaßb €uSxžÛNþ×ÑÛì·ó\ªFOÚ˜IòÜy‡8þí/†ÄG[³°¶‘qýœ%ضżé3ÁÝž8Ï85·‡nâ¼¶ß}Y[^Iyb³‡à¶ìc÷‡·aF—áÛ»)ì÷ÑKm`@‰V;†>c¸ƒÁìtUnõBªU¸?Õ ’¼ãFk×üJ�>¬³} ù¦Ü Ùó_îã'õíŠôzæí¼7 î¥;k·*·R�Ë4@¹l|û‡CŽàP¥Æ‹©DDÞ cÏ{¼®‡ïd~^ø®’²l´‹»[´š]vþé9†U‹kqŽv >ý{VµEqÿòºjZŽpZd‘Ò¤ ¸O ¬š¤Þ$µ·ñû³]]Ô†�|É —m§¨ .©Û]Ýaè5ö—w©Ky¨}¬]LdO“nÁ¹Ž?"£þžôKÀtš†mÂÝÉ-¬ˆ(d0œ�À6rAëƒÓŸÃc_,4 à—/lÍ (š8šVLŒd*�IçŒv‰`ú^�ke#«¼)´²ô<Õç‘€î1@!¦_Gmo*]êÖrA$¡’Ö+ý­ä,ˆ6å®�ŠŒí#<‘»ƒ]%É–×áž¡pg–ÒÊkíу*LZÞIUw—*î;ºW´ßêVštò_ǽeÕà_À,Ê? >•°¾šOYh§™ÙįŽ ˆäGm¬0Ã!N€8½>âëSXg‚öækUºž1¬±G$kå©p’+³æ^yÁì55 PýƒÃ¾¢ñ]<èÑÚØ¨¸-Ì·Ù;q’N É«ƒÀó¤@ì' {,âÞîIfBŒˆƒ,ÙbÃfyÈçÚµ°õI-´«[‹«y£‚fšæPýí©^Šàäç±\ÜÿÂPejë)Öfù’ÙMÇüyGÁM¸—Jë|c2®¯k`òìE2ÞIo�½ÎÉ#É#v9¨áøvé«´¯}7ؾÝ%Ð+w/Ÿµ HÀ2uÎå'¯Jèí´I`Önµ $YTZGii±l*å‹;�Ì̓Œð£©èæÞ Ômnp}ª¼Ê`ŒÓ<„ô?�T¢­ù è:<„ô?�T¢­ù è:<„ô?�T¢­ù è:<„ô?�T¢­ù è:<„ô?�T¢­ù è:<„ô?�T¢­ù è:<„ô?�T¢­ù è:<„ô?�T¢­ù è:<„ô?�T¢­ù è:<„ô?�T¢­ù è:<„ô?�T¢­ù è:<„ô?�T¢­ù è:<„ô?�T¢­ù è:<„ô?�T«Æ4ÿ!=çO(À´QEQEQECp @} V«ôß-?º?*¥E]òÓû£ò£ËOî�Ê€)UÈAiB è£ò§PEPEPEPEPEPEPEPEPEPEPEPEPEPEPM<7öm¯#ýJvögýáùTüƒmëŠ!Vi½Ä¶‡þðü¨Ãÿx~Tê) nûÃò£ýáùS¨ áÿ¼?*0ÿÞ•:ŠnûÃò£ýáùS¨ áÿ¼?*0ÿÞ•:ŠnûÃò£ýáùS¨ áÿ¼?*0ÿÞ•:ŠnûÃò£ýáùS¨ áÿ¼?*0ÿÞ•:ŠnûÃò£ýáùS¨ áÿ¼?*0ÿÞ•:ŠnûÃò£ýáùS¨ áÿ¼?*0ÿÞ•:ŠnûÃò¤É##�j} ûÍõ Ãÿx~Taÿ¼?*uÜ?÷‡åFûÃò§Q@ Ãÿx~Taÿ¼?*uÜ?÷‡åFûÃò§Q@ Ãÿx~Taÿ¼?*uÜ7÷‡åFûÃò§Q@ Ãx~Ta¿¼?*uÜ7÷‡åFûÃò§Q@ Ãx~Ta¿¼?*uÜ7÷‡åFûÃò§Q@ Ãx~Ta¿¼?*uÜ7÷‡åFûÃò§Q@ Ãx~Ta¿¼?*uÜ7÷‡åFûÃò§Q@ Ãx~Ta¿¼?*uÜ7÷‡åFûÃò§Q@ Ãx~Ta¿¼?*uÜ7÷‡åFûÃò§Q@ Ãx~Ta¿¼?*uÜ7÷‡åFûÃò§Q@ Ãx~Ta¿¼?*uÜ7÷‡åFûÃò§Q@ Ãx~Ta¿¼?*uÜ7÷‡åFûÃò§Q@ Ãx~Ta¿¼?*uÜ7÷‡åFûÃò§Q@ Ãx~Ta¿¼?*uÜ7÷‡åFûÃò§Q@ Ãx~Ta¿¼?*uÜ7÷‡åFûÃò§Q@ Ãx~Ta¿¼?*uÜ7÷‡åFûÃò§Q@ Ãx~Taÿ¼?*uÜ?÷‡åFûÃò§Q@ Ãÿx~Taÿ¼?*uÜ?÷‡åFûÃò§Q@ Ãÿx~Taÿ¼?*uÜ?÷‡åFûÃò§Q@ Ãÿx~Taÿ¼?*uÜ?÷‡åFûÃò§Q@ Ãÿx~Taÿ¼?*uÜ?÷‡åFûÃò§Q@ Ãÿx~Taÿ¼?*uÜ?÷‡åFûÃò§Q@ Ãÿx~Taÿ¼?*uÜ?÷‡åFûÃò§Q@ Ãÿx~Taÿ¼?*uÜ?÷‡åFûÃò§Q@ Ãÿx~Taÿ¼?*uÜ?÷‡åFûÃò§Q@ Ãÿx~Taÿ¼?*uÜ?÷‡åFûÃò§Q@ Ãÿx~TS¨  ÚüƒmëŠ!Vj¾Ÿÿ ë_úäŸÈUŠoq-‚ŠáüFºµ÷‰eµµ°º¼·†Ú' ªÖa‹ä�¿{8zb³LÖd.#Ð5Q¶¶ß9*}½!ž—E`ø2öïPð��ÅûºÃÇ!b %—’:Ÿ—¯zçüK­^ßx‚ïLÑ®¦I´ý>Y”B‡�Š(\ž Ubyã-ê(¾¢¸�îæZ‹k�]­PÊ—K}4,»¶� $ç&²ï|W¨iž$ÖmäÔ´¨›Ïµ�UÝœDŒêŒØ$€ÙnG4étW ¡ëWVú³i0kš~µØ\]‰"Éeq"aX«1Æ€1œÖ¹¨µ�aìšÚMröE¹½hNË`Žå¥*ìŒ('€pGJö +™ð]õæ¡§Ï%ö¡5ÔðËäȯHªÀg#g\«/Rq]5QEQEQEQEQEQEQEQEƒï7Ö–�}æúÐÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÃþAÖ¿õÉ?�«^ÃþAÖßõÉ�«Þâ[õíãèÞ žò{+¹­.mãE–Ú—c¡l†UÉ 0qŽ giºÎ•¤É¨Km§ë2É{p× ‹¦L bÚ2 vîGZ쨤3¶Séþ´‚é s�ò¼dä¡wgÚqÜnÇáY~"Ðï5=}^ +9¡{ˆ½âo�È„¿Ä@Ž�k­¢€<óÃÞ]ý®í¬­&t»9ûZÅx"Xص³ž1Ž�1𵆦mbábÒc²ÓdÔ¡›hÙó, H}ª‰öã<õÏ¿sEU¹³ó-&ŠÖAi4ˆUg�dÏqž+Î[À71Md-­æo®ZLËmŽC«®ãœgn~•êP7àí"çG·Ô¡¹ˆ§™xdŒ’‡rùh3ò*Ž ÿé]%PEPEPEPEPEPEPEPEPH>ó}iiÞo­-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@zþ¹‡´¶¿¸¶º¸Œ8M–±ï~}²8¯:Õ>2Õ¬-ô}.ÿbÉ›øî,É�GÇÜU~½zñÒ»Oø¢O hé-­”·w×R-bE$MÞßμ/AÖ$‹RÔõMGÄšž›¬Ï;G?Ù¬Dá€ÇñgœŒÀP­ÂÛÒèâüüUu-âHü.uùRXmE¿Ú L»\ gv=«Ç,ÙxöoJÚ¥¦Áiö¹$é–߯ã÷Oî•Åé>:msǺF�kÚM”Yžü9À�vˆíøU|i?‹®môïèö§Ï¾‡š˜ÿWîç×ßžœÎ·äøsL·øwá2j„›ûžñ)s±2>€{Šõ�7U°Ö->Õ§]Åsâ›ãlŒƒ‚+�ñ�çÐ5'µÿ„oT»‰Bâæ[3€O¥Iðõt|'·‡îâÚ1Ë(”pÌAäg¨ö"¹‹ú–Ÿ|ÖZ M"^[Ê—¬¿fyU“ ¸;yêhÿðµ5Ÿí²O…¯?²|®Ë>w™ëœíÇá]G‡|k>¿¨-·ü#š¥œ$173 òÁ¡#½x–,ÿçÊÃÿ7üUz'ÂWN²Šãë<²^»½ÐÝ£Pœ |ÜЫW—§Å©m5�bÂûEºº—� /a #`8òOÍÇl})Vµ\€N2~nœõ« õKý_Âs\jÒÞL·rF%‘²JŒb¢·Ú¿ï ÀAë²P‹ñÜüB}ÞéŸØâËÎ^g>f@Û»vßîÂßVÓ¯-eº¶¾·šÞ,ù’Ç eL œ‘ÓŽkÈtßxnóâî­¤fFtËK4e€HøBäçv{šØøMelþñ-¯” œš„ñ‰?êö�·=zq@AñZ3{¨êÃü#�Ê–Öò§úçr@g Ÿõcž@ÏÝõ4³üWƒOñV©§]D.­bHÚÄXÄÒK9` ç;qƒíø×•C¨iŸØmg…Ä›ýÅÁ›©Ûî9®³G³»Ó|C{wá}CH²Ù§ÛµÔwÈʰŠxc‘Éç9úЬ[ø‘WÂG_Õ,®4ôHŒ³A"åÐéôçñ¬-â׆5­V:'º·žfÙ¹‹j¹=0A=zsW>Ù-¿ƒâfÔãÔÍ̲LóFI�qc� öÈôæ¸ßBÞ>ø‘§ØéÛmt)ó{v˵w =þîãÚ€=~Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  öò¶ÿ®Kü…Xªöò¶ÿ®Kü…X¦÷Ø(¨®n­ìà3]O1¯#ñ5NG¸™b‡U²’G8TYÔ’}†i Ñ¢Š(¢�ÀA�GzZ( ŒŠLŒg#´QEQEQEQEQEQEQEQEQEƒï7Ö–�}æúÐÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE…Cc Œ×‹xÃÚÖ­g­O¦øžçJ…uiÑ Š%`Í…;²}ˆ…{Uáz•½òüNðî•6½¨kWV7Èó$¶Û;[9r;ûWªxçþD]oþ¼äþUÐ` àuëErŸä›hßõéþ5“ðsþD¹ÿì!?ô¯A¢€9Oˆ—ˆ4Ïðå‹]^O'’J)fˆ'x†9õ¯8ðü&>‚æX<5Ö¡tÅ®/n¦ùä9éÏAüÿ*÷*(Äüž(ðÏÄ2ïA–ÏN×%`öÐ28Ÿ®ñƒò�“øé[¾9׬SÔtÝ K»»ñeŰ´i`�ÁŠ&ÁÉoN‡�ν>šC §šñ¯x PÑ~¶¤šžµ6·q´ÑGv^0K øgßµkøÄö^"ñõ„ÚN�;ºY¯/®#t1�Л'ÔW¨Q@C«B|]â/êiPOm£XýžÔ]Dß4Ë—'±èO9ViæÛÂ�á v�Pc£ Á xÛ p3ò¨äšöpª¥ˆP ±©Æ9ü…-yÿ‚-ïô‹¯øcÈKso!šÎêqÙËí‘�ÁÏzæ|Oàô�6÷ÄÞ(ñ§ª\¤a Û/•¿ÑN3…ÏÐW³R:,ˆQÔ2‘‚È4äþ{�èw¾/×4ëû�OYœ·¶‹sÆœ”R gùÞ¶~é·úƒ®ŸQµ–Ú[›™'T•pûH�yèPÍãH–„z“ë7a/H¡±ŽÔ2³‰Xm.Fv“ÏÒ¯M§i:Œe“źf©-·ØíZ ‰Š;ÔøÆpF1ž¢¾‚¢€9?‡·×š�†Ú{�=, 7 H+çåÊúûûT> ³ñM®©®6¿ªÛK>ëC F¥†[$ìž6ýîk²¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€+ØÿÈ>Ûþ¹/òb«ØÿÈ>Ûþ¹/òb›ÜKcÄJPðê0 §Rä�q1¥ñd ݰ‰]„£‚y§xŠ –m*îÚÚKŸ±^ ¤Š"¡ÙLr'˸€N\wõ¬9çñ©a=…ΛtÆ}ŠŽmã…#ù�%ˆ™‰…!�¸é\�o®ÊÍkÜñY¤`Ív¬«'rrʪèç=}{\�ˆ<=s®j3'öe‘Œ¢ª^ÜÜ»´|}èãå`Iä0Î(#Áz……Åõ¬£_òchÌvz9»,@òàã'…Þ¢÷qê—¦ßQœËÆ{…d‹ËWÌ�…#rg""Ø'Ðâ»=/AWöòî[ûý‚1<À ‹èŠ>è=Ï$÷&¹ëŸÝÜ_Ïs%å´¢éݦˆ[í@LNªÜ–$‚ùê:šoƒ'½kdh${¸E’­º¾È“©e-¶G œã;{V½Õntm'N[¨¬å’ö3å"ùÀæà�ÌÇn9Vùpr9ÕøkÂ÷·s1KqlѲ£ÇÃ9gÝ‚¸à�j ?·–÷6×RÛY,‘å…C�fœ— ]¶ð\�×–Ïa@ÛÄ3Þøg_³–ùΧ§ÌÑ<°©€”óJ†\>ë ƒÔÌkÕþ×:pº—ÍgçWÔq¿8Æí›søþ5Ò ÜÂ1w‰juk·w–Hó´o˜ÈT1*7dT·~š?6kKÛ™‡ÚþÚ¶.ѤM&ýÜ¿–\ óÔÐÏ É$ž´if–g×|®]ˆÀdžO¶«3Ãö麵­ÉŒÎ¡‹ùd•±lqžµ§@Q@Q@Q@Q@Q@Q@Q@ ûÍõ¥¤y¾´´QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\õþ«u§*,�b…ÀÀLäRsÏ?xÐCEdZ\Ý>¢"’\ isû²Áç5M5‹·žPNÀÃâ<óÛÿJèè¬k BêkyÞ`Q–6dWÇ8'Ÿ_AøUy5+ï*eL¹G&â» ’H8õPCER[¹e·˜”òd�ö ž‡ ÆzÕ1}p×M¹eP�²¶�žIìsé@4VN©¨5�´.Ud`ϵIψ=³×V}Rt—tsÉ$¤Èñ¤g8P~\žG<ÐAEgÝOt—0Cncb ´¦S´0è@<çŸÂ£Ó.¯&‚#(·*I¼ã»©í·úÐ¥‘6¡t·³›q�ÄÉ Fbò{qî;ö©ìo–Xš)%Äû¤#pÆ@rסE`Iª\:�&î)÷É@Ç '¡Å[Ónnç‚RÇ|€!_1BFONÔ©Eb›ëð²Ý€$!£x7œîÈÇn¿ãVoo¦´ÓËʪ·vƨwr{ò;rOÒ€4h¬S¨]›˜ÂDòÃç”VR£x AïýàOá[Å‘Y�¡#•$qùP¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯cÿ ûoúä¿ÈUŠ‚Çþ<-¿ë’ÿ*ã|Iã‹�?S’ÊÂ(Ï’q#È3“ètPÃÔ¯>Zf5kÂŒ9¦w4W–ÂÂÖ»mÿ~ÏøÑÿ Yþí·ýû?ã]ŸÙŸ/¼æþÒ¡æz�åŸð°µŸîÛß³þ4ÂÂÖ»mÿ~ÏøÑý‘‰òûÃûJ‡™êtW–ÂÂÖ»mÿ~ÏøÑÿ Yþí·ýû?ãGöF'Ëïí*g©Ñ^Yÿ Yþí·ýû?ãGü,-gû¶ß÷ìÿ�ÙŸ/¼?´¨yž§Eygü,-gû¶ß÷ìÿ�𰵟îÛß³þ4db|¾ðþÒ¡æz�åŸð°µŸîÛß³þ4ÂÂÖ»mÿ~ÏøÑý‘‰òûÃûJ‡™êtW–ÂÂÖ»mÿ~ÏøÑÿ Yþí·ýû?ãGöF'Ëïí*g©Ñ^Yÿ Yþí·ýû?ãGü,-gû¶ß÷ìÿ�ÙŸ/¼?´¨yž§Eygü,-gû¶ß÷ìÿ�𰵟îÛß³þ4db|¾ðþÒ¡æz�åŸð°µŸîÛß³þ4ÂÂÖ»mÿ~ÏøÑý‘‰òûÃûJ‡™êtW–ÂÂÖ»mÿ~ÏøÑÿ Yþí·ýû?ãGöF'Ëïí*g©Ñ^Yÿ Yþí·ýû?ãGü,-gû¶ß÷ìÿ�ÙŸ/¼?´¨yž§Eygü,-gû¶ß÷ìÿ�IÄMUfS46ï~e A#ëšO(Äù}áý¥CÌôúA÷›ëPXÞGc ÜYòå@Ã=EN>ó}kÍi§fw&šºŠ(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®zæÆâk©§[w>d ð€¥�Þ¡IãÖº(ÎÒx®õƒ~ñœ°ò€cžF}3�¨g\¬¸[Gè2v( ÇgõÆCd×WEc[ÙÝB.ã*²3D[y‰Ï­V]>ío"Fˆž4írøwu>§º*(:ÒÝç·™ŸÏ·ó'ikc§5-.¡;y×ÈŠŠ�ݱ¸äôõ±Efê9´‚Ú?:V3!ÞyÀ $ý*Œºs¹¸ò!!Q�)f%UNÜúïŒæº (2öÚ+éR1d¤¶×’gŒ ªqž¤ñŒT n¶×s"ijÎÓ«G'–»~\óÛ5µEb›YE÷Úm­q mƒB™gæô$õëRXJë†K � iQŽI8Î}ñZÔP?um8�ãk%Ë3:ì‹ÌÆsÁä`óïRéo%•“´›*‹ò­¾ÒOOSŸÒ¶è  v³¼žãíž\q�C}œ±ùÈèXŽ2;U‹‚ך|¬Ö¯Ë• àžø#¨­ (.çNâØ¬—$y¤±óËò·>Õ£b(Âf»ŸÎŸEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEAcÿßõÉ•xï‰äeÔë»:ö+øð¶ÿ®Kü«Ç|Kÿ#.£ÿ]Ûù×µ“^Ÿ©åæÂ�©•EWÑ S¼·1™67–RØàÛ>¼muÚ Æš&%Gϴؘçæa´•Àî}+*õ]8ó%sJTùåkØäiÞ[ùbM�°’¡±Á>™õä~uÕßÊ�é7!ç;Š8¼²@“p$îÀêô©cXN‡6‘¶¥¶üØ»»†ÈÎqíXýkDùzØ×êúÚý9”«`C‚äR¬R:;ª3"]€ÈPN9ôæºl$�HÛ]Ü B¹Ý¹²wqÇZ½1½[‚m-šKyNeö©°FH )+óväŒSúΉÛq{ Z¹Ç€Y‚¨$“€zJéžåñ›ìû¸uTòœ’7#‘ž•l­ÊX Òêé^KcrY&�T1‘³¡â­m7þ¿@T/}N:ŠÑÖØ¾¨îÇ,ÑÆIõ%5�]—4T»˜Ir¶‚Š(ªQEQEQEQEQN�<ÉU7ªn8ÜÇ}kv-?².�Ô4òÞlX4áx~3Ž3ý+:•c Ë…7=Œ *Iâò&hüÈäÚq¾3•?CQÖ‰ßR‡³xSþE}?þ¹SZãï7Ö²<)ÿ"¾Ÿÿ\¿©­q÷›ë_ˆþ4ý_æ}UáGÑ EV&¡EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ñáoÿ\—ùWŽø—þF]Gþ»·ó¯b²ÿ� úä¿Ê¼‹Å–ÒÛxš÷ÍB¢I ˆ}A¯g&kÛIy~§—™¯ÝGÔÅ¢Š+èÏ+_KÕà°°ž mÞV’Uq‚  Ä­ëéøÖE3„f¹e±P›ƒº65b Ý;ìñÛ㸣ÚÔþg÷‡³‡dWþÃÒ¿èkÿ~…ØzWý­ïЫ·¶·°¤¶ÓÇ*H¡Ô£g*zkê‰`×ÿhŒÚ*3+n]£©È£ÚÔþg÷‡³‡dCý‡¥Ð:×þý ?°ô¯úZÿß¡V渆ÞÙî&•#…»HÇTw&¡}NÂ&Û%õ²6ÃJ àò;Ñíj3ûÃÙò"þÃÒ¿èkÿ~…ØzWý­ïЫ±ËѬ‘:º7!”äÆ�Gµ©üÏïgÈ¡ý‡¥Ð:×þý ?°ô¯úZÿß¡Wè£ÚÔþg÷‡³‡dPþÃÒ¿èkÿ~…ØzWý­ïЫôQíj3ûÃÙò(aé_ôµÿ¿B�ì=+þ�Ö¿÷èUú(öµ?™ýáìáÙ?°ô¯úZÿß¡Gö•ÿ@ë_ûô*ý{ZŸÌþðöpìŠØzWý­ïУûJÿ u¯ýú~Š=­Oæx{8vEì=+þ�Ö¿÷èQý‡¥Ð:×þý ¿EÖ§ó?¼=œ;"‡ö•ÿ@ë_ûô)Ñit,‘XÛ£¯!–0«´Rö³}X{8v A÷›ëKH>ó}j Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ŠiË6:Ö¢3Z¬¾SK“û…†*žŠ­5Ý”ˆ¦žä#!€$}*&Õ4´gV½¶VA–A�3ŽhõKûKLÛ»í–Û}|ÁNûvŸæþÕo¼òxÍ[¢«Ãqipû!–'`3…`N*b¨:�@¢˜QcðªÌ ±µ\¢©�HëíE]¢©Q@hªTPÚ*•vŠ¥E]¢©Q@hªTPÚ*•vŠ¥E]¢©Q@hªTPÚ*•vŠ¥E]¢©Q@hªTPÚ*•vŠ¥E]¢©Q@hªTPÚ+9.!‘Ê$ÈÎ:ª°$T”vŠ¥M’T†3$ލƒ«1À~ŠÎ†â+„- ©"ƒ‚Q�© 2N>´vФ¯Ý[ò5mr@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( øð·ÿ®Küªz‚Çþ<-ÿë’ÿ*ž›ÜKb–ªu¦ÊÚP�¯Tn�'ÎÇ#øI3ë\g‡üaâ�ëaM4¸mmü÷,_æR1�’xïÀ9ôÏ QHa^m©é÷—f–äÞ¬?f˜Ã »�ÒB º0aÃsÔ@=«Òk Wðüºž© ì:Œ–…mžÕü¥ùŠ3£6Öþòc8ï@7ƒ ÛâM*ÏT)m}u à{†u@ßsr´„du'¼š³â)å†=RIìíPÁ~¦’4¡âv,£ÉØQ“ŽõÙŸ ÛÛ\YÏ¥ÊÖ[…�‚ Ë4Cø½N¨õ¬Ù¼ºóûB^å5fi'x£‘_w#—6‘Àç4�ðå'6w pÅ,V6ëšC«2–ÉòðÅØy<à÷ªêÚh¿ÓôtŽÊÞ]FçUž)mÖêXa•˜¿� ù`ôëŸS]†•áë�:òÞi5çŽÞ³Æ‚Í„ã-ލm¼ke¬O©Û\È—ŠŽÀ1Gv$¿<g`3×$Ð ¦ø/_¸¶²}ì mÜGw%Â�»yÿÞ#¥âÔ%‹ÉÑü»}R==-ZÕL†/�¸œðÓµt�á�'†¯4™od’[Æi&¹d³³d�£t¡y¥A8’X"¶†øò—Mn®ÊÝ�=:¥áXü;"…UžàsÖåQÑôѤé‘Yùï9RÌÒ¸³3'�É5z€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ A÷›ëKH>ó}hh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠA÷š²otV»–R^ ’H$âË#T玕«‚Xሣk|þTƒ«xkûSWŽôÜ„TŒ&͙Π9Ï×E¼¾êòf»VûDn˜ò±´’HïØŸÆºÍ­ýóùQµ¿¾*ãÇ�›ìÉÛcÜŒÄ0‡±޾ ŸÆ´ÃR³‚n"Ù³|¾­Œnë]Öþùü¨Úßß?•diZÒ¯$™nEpß+A$øqZÓGæÄÑç†3ŒÒíoïŸÊ�­ýóùP-áðˆÃ¹ëøÔs)žÆ¦o—«‘øS #  ü(2ÓOK;‰åYes3d‡r@àÿJ¹Rí‹ûæ�±|ÐTT»bþù£l_ß4.Ø¿¾hÛ÷ÍEEK¶/ïš6Åýó@QRí‹ûæ�±|ÐTT»bþù£l_ß4.Ø¿¾hÛ÷ÍEEK¶/ïš6Åýó@QRí‹û怑“€ç4M-´±ämØÎIþB£ûe˜þ9ïÓ…R„žÈ®Iv$¢¡ûu�þ9¿ïËÿ…'ö…ˆþ9¿ïÃÿ…?g>Ì9_bz*¿ö•€þ9ÿïÃÿ…!Õ4ñüsÿà;ÿñ4ý•Oåb³,ÑU?µ´áüwø 'ÿIý±¦�ã¹ÿÀi?øš=�Oåp‹”U#­i£øîðOþ&“ûsLÇuÿ€’ÿñ4ý…_åp®‹ÔUíí,×þKÿÄÕ›û FGŽÚg2 ‘ãd`|0RtjE]ÅÛÐ9–×&¢¦hã^¬i6ÅýóYŒŠŠ™¢E,i6Åýó@QS�.âÇ›bþù ¨©vÅýóFØ¿¾hÃI{;ù®LªÂLü 2sÜÖ› ÊFHÈÇ6Ø¿¾hÛ÷ÍR¶´[PÛe™÷ÏY céšKûS{hÐØIVŒò=? ½¶/ïš6Åýó@öV�mç4’+¼¯¼í] pO¤½µ[ÛI-ÝŠ«Œ½qíè}êï”…wn8¤Û÷ÍTµ·[Kd�NU"¯Ãþ¬S$a�ÄÔ‘�«�C@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( øð·ÿ®Küªz¯cÿßõÉ•X¦÷Ø(¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ A÷›ëKH>ó}hh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠA÷š±õY5tÔì…”Qµ™Ï˜KwöÎùzþ8­|€Æ—p÷ü¨± JfUY1ó9ûW,åþ4»‡¿åFáïùPbÞc`½©ç8ã­&áïùQ¸{þT‰£Çª®¥|×—žtBLl)€¿*‘³Û’9­ÊnáïùRîÿ•EqÑk›×£Q�VFe3²I @x\àØÇNy®™Â¾2OÔÏ)¼*ãﯵ¨¸ï]¿”¿Þ?•RÿxþTľ¡¯®¥Èío³,¨œ·È'ÿ…Mþ¯ök¯5¦ó7/’¸=@È?^õØyIê*<¥þñü¨‘kÍqî­ÌD´[có�iÜKn>˜® t©¼¥õ?•RÿxþT 7”¿Þ?•RÿxþT 7”¿Þ?•RÿxþT 7”¿Þ?•RÿxþT 9>úýjO)¼*U�C“ǵRœ²Ý\”`ªË=À±¼0‡iR2bÊòN8ã¿5£-±yšXæd,#nzS>Ë7üýûö+M-Ùõ9k{�}´ùÄ¡ÍÉp°åvòFpx힦¢¼¾ñ–Ýmƒí 0™mÛˆ#�;¿�u¿dŸþýúŸc¸ÿŸÓÿ~….Ußóÿ"mæsê:¸º�¤ˆ6ˆa9 ã;yã'¥PÖ$xRcºI�åpª#œqžqšé�•Ïüÿûò)>Åuÿ?çþüŠ9Wó/Çü€Â†ÿS{ˆKo ð©lÄW+�§¾sß§nµgA—T“Έ'J±uǧö¿úŸûð)>ÁyÿA#ÿ~>EüËñÿ!(ªß`¾ÿ ™ÿÀqIýŸÿACÿ€âŽHÿ2üÈW-Vu·üŽ2ÿׂÿèÆ©¿³µú üZ’ÇLkkù/g»{‰Þ1>XPª =¹­#Ë/y;¯?ò%ÝÛBäÿð¨ªÃª¹ÎHü)¾RzŸÊ¹Ë þêÔ5e¸$cÚ™å/÷�å@ǺÔ5d…(œjg”¿Þ?•CEMå/÷�åG”¿Þ?•CEMå/÷�åG”¿Þ?•CEMå/÷�åG”¿Þ?•þ=�CVB¨�g8úS<¥þñü¨mú5H½þ´Ô €àž}©ÉÈ?ZuQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ìämÿ\—ùUНcÿ ûoúä¿Ê¬S{‰lQE!…A{{m§Ú=ÕÜ¢(Sï1çè“ì*zçµÏŸÄžŽøô3LÜô3ýØ?†ò=À ÿ„¦e>l¾Ö#²ÿŸ“gûÆ0åÀÿ€çÚ·m®`¼¶ŽæÚT–r:†Õ™s°ž"K›S–G$RÌÊQƒ1, )à�Û¥EáÁK¬G²jå…è U/�øoÇ4§©Zi�¤×“yHî#S´¶XôžÆ©Çâ]&K˜-Öè‰g.%h�w6 À$c ?•sÅđ閯5‚ÙÜ\à‹˜I(êŒÁ·QqÆ0}zö®#F‚áu-&éc²Šåž9-ŠØ _r‚¸¸€óÇÍ{Dš…œWOm%Äi2Eç21Á ÏÍôâªZx“G¿¹K{;èî$~‚ \~$ ƹï]5Œ²�B[Ycm.èÅ‹|I˜�0­’~røÇ°äÓôˆ5Ø5ÈtÙµÂöööqLÑý’5-’Wnz�òõë@•Q@Q@Q@Q@Q@Q@Q@Q@ ûÍõ¥¤y¾´´QEQEQEQEQEQEQEQEQEQE ûÍKH>óU-VÊêöÙRÏP’ÊPÀùˆ¡²;‚ ]$’psI½?¼¿�T¿±7z4ö%ÙÌ�˜÷9äœu5ÇêCMòˆ$+¬à \`à}h½Ü¹pÉíš«ú\Œ^‘n-$’Þ&1ªïpW;—ÇÔgÒ¯hZ%Þ™uæÜL²f-¤ƒÈ9ÐÑEQEQEUÔ-溵1Á;BùŒzЪDû‚‘T˜±–=éSî �æÚÄc8¤ûGû5¿ëZ™@ý£ýštro$cZ¥ƒï¥Hòìlc4ß´³L›ýa¨è´³NIw¶1Š­RÁþ³ð  QEQEQEQEQEQERfŒÐÑMÍ QMÍ QMÍ QMÍ QMÍgÝiþ~£ÀÆÑ÷òyã‘�Æ€,jW˦é³Þ:—XSvÑÞ¸Áñ###Lb=|Ïþµt~*?ñLjõËúŠó‹fÖÛG{I"bì¬^9'©õ¯_†§V“”£ÌïmÏ7^tê(ÆVV:OøYõ oûùÿÖ¥ÿ…�×þ%mÇý4ÿëVñ$ Ж‰Ÿabw�òàRÉâkGº’Q€0‚Ü1�^+³êT¿çÏâÎo­TÿŸŸ�×xwÅɯÞÉköV…–=àîÈ# Zß3à‘·¥y¿ÃãŸ\r Î1üK^„ß|ýkÊÌ(Â�nX++#ÐÁU•J\Óz’}­2FFG^zR‹¥n˜?C\|¾ºmv{à°4nX¯ÌCr¤c§¸5{@Ò.4¹.ZwVí#o¨ÏôÅp�gM›Áã¥^ÿZŽß£T‹ßë@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½�N¶ ä—}X¬ï�ÞÒÛÖÒ#ÿŽ Ñª’´šØ(¢Š‘…TÔ´ë}VÉ­nCì$2²1WF†R9õnŠÃmW’/³É⼂0Y-Ñf#ýþ€û…µ,,m´Ë(¬í#Á®sø’y$õ$õ«P^© Xëó^’ÖçtB+™" pF~Fà‘ô¬«_é–�Û¬w7ÂkQ‹Y„ä5¸ï´t9ÉÎàsœŒWSEaêÒµ;™.îRµ³«-ÂLË${z ð½ñГše¿…–Þý/?¶ui%]¹ó&S½AÎÖùrG¶{ÖýQEQEQEQEQEQEQEQER¼ßZZA÷›ë@ EPEPEPEPEPEPEPEPEPEP¼Õ“qâ}ÖáàšõD8a‚pkX}æ¯Öÿä;ÿ]ßùšô2ü$12jOc�ˆ•§¹êð—è_óþŸ÷Éÿ ?á/пçý?ï“þäQ®ùQ ÀbjÔö‰±•|Õ`ÛJºãסü+ÒyEìäÿ¯‘³Í^Èõ?øKô/ùÿOûäÿ…ð—è_óþŸ÷Éÿ ó[].+�*K–”‰A¦F_zÑ“ÃÖ*Ð�s"†ÈbX@'+)eøX»9?ëäif"Jé#¹ÿ„¿BÿŸôÿ¾OøQÿ ~…ÿ?éÿ|Ÿð®ü9f.åŒO&À>S�yÆpxªQiòEnÌó!’PŒ Ž9ëŽß_zK…jüÏúùÆbDz/ü%úüÿ§ýòÂ�øKô/ùÿOûäÿ…y~§iojñ}žBèë»–þ•B¶ŽQBJé¿ÃüŒå˜Õ‹³HõÿøKô/ùÿOûäÿ…ð—è_óþŸ÷Éÿ ò *¿±¨ÿ3ü?ÈŸí:½‘îVWÖÚ…¸¸µ•eˆœnµ*·Ê85ÌøþE¿ûlßÒº„û‚¼E5J¬ º3Ø£7:jO¨Òœ”'ð¤ÚŸóÏô©(¬Mö§üóý)F¢O¢€B±ÉBi6§üóý*J(=©ÿ<ÿJPôB)õ ®ÊÀŽ(]ßìš7²j·šÿÞý(óŸûÔgwû&�ßìš­æ¿÷¿J<×þ÷é@w²hÝþɪÞkÿ{ô©¢bÈI<Ð÷²hÝþɪÞkÿ{ô£ÎqüTgwû&�ßìš©ö“ÿ=éJ'cÑÁúP�ßìšBÿ욃Íï~”yŽOZ”Éþɦ™?Ù4õ]Ã&�寥Cæÿ²i<ßöMMå'§ëG”žŸ­Cæÿ²hóÙ57”žŸ­Rz~´›þÉ£ÍÿdÔÞRz~´yIéúÐ>oû&�7ý“SyIéúÑå'§ë@ù¿ìš<ßöMMå'§ëG”žŸ­W—dÑ4Rǽa•†A™ÿö‹ÿ@¸?ïŠÛò“Óõ£ÊOOÖ®5'…´L¡|Jæ'ü#Ú/ýàÿ¾)G‡t_úÁÿ|V×”žŸ­/–¾•^Þ¯ó?¼ŸcOùWÜP²Ól4÷g´²Ža‚QpH«˜RrPçéC §Úœ¦³”œ�äîZŠŠ²jÏ?Ò�©ÿ<ÿJx¥¤1£ Ñ¡:­:š½þ´ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€3|;ÿ"Εÿ^qè´«3Ç>ÒIïgþ€+NªvAETŒ(¢³µ-f-6âÚØÛÜ\Ü\ï1Å‚Ä.7HûÐ��ý»?ýuoûâ/þ.­éºœzšNVà’ <©"™@elìHèý^¢ŠÃ‹Å6³Hè–:£m•¢,¶R2¬T�ÀŒ�ZÜ¢²ïµÈl_:Îø¤K¹åKrP2Ni¶šôW†.ÇQ . »Ú²®BOa@ÔQEQEQEQEQEQEQEQEƒï7Ö–�}æúÐÑEQEQEQEQEQEQEQEQEQEƒï5yΩà�ZçUºž!£–Fu%ðpNkчÞjZéÃbªaÛpêa_ É)ô<·þ-kÒßþþõ©O€õ³×È?ö×ÿ­^ HPIè*?=} uÿkâ<¾ãŸû6�™æ_ð�k~�ßÏþµ/ü šàÿž÷ö½3Ï_CGž¾†�í|G—ÜÙÔ|Ï2ÿ„[ÿ¦÷÷ÿ­Kÿ&¹œæúùµéêáÆE:�ílG—ÜÙÔ|Ï-ÿ„ [= ÿ¿Ÿýj?áÖ½-ÿïçÿZ½JŠ?µñ_pfÑó<·þ-kÒßþþõ¨ÿ„ Zô·ÿ¿Ÿýjõ*(þ×Äy}Áý›GÌÅð¶•>�£‹[’†MìÇiÈ­”û‚–‘>à¯:¥GRnrÝ�°‚„TVÈZBp ¥¤oº~•o{â=Oí³„ºeUr㚎ßÅ:œ7q³Ü4ˆÌ�Њș Åõù(³óßœZ­´óÅw°³_Y5 8­»!*õÔî¤÷î{›©A©Ú¬ð·_¼§¨5r¼ëÀîñø‚âÜÈÅU#<ôZùÜeB«‚Øú\w^’œ–¡UçûãéV*¼ÿ|}+”ê ‘ŠÆÌ:�šàäÖõ‘Ø\°< îæÿQ'û¦¼Â�®Ye‘‘2yUÜ*ós Ê<ª.Ç·“Ò„ÔÜ•íc^ÏÄ7Ñ]+I+KûÊ}+´´»ŠöÝf…²§ô¯?[+i‹ {™¼Ð¥†è¶Žzæµ|+µÍÊ$Î3Yá+ÔSP–©›f8JR¦êÁYÇÊÇeV!ÿT~µ^¬Cþ¨ýkÖ>x¯Y%º–ÓEžh[k�Á­zÂñwü‹×Aüè0Ä·3k{?Èó�íMM¾o´IϽt~Ö®R2óHÒ.ìkÒβ[›©¤D-±|¸ÃÿJl¢ÒÚ?ô;«½äò=£ùÔŸOФÕE7ó¡ëVó¥Ì"HÎTÔµÌxY&ÑÈìÄJFI®ž¨û\5omF5-k¢Ú}ÁHÒ*´±ýÁUåÿZÔ“ �œsNf2j¥X›ýXúÐùéïGžžõZŠ³ç§½z{Õj(ÏžžôyéïU¨  >z{Ñç§½V¢€,ùéïGžžõZжŽ8íN¨mÿЦ  ׳ùØÏ–ƪj*)f·˜2OãLñÛ§¡ÿ¦ƒùçOzðsÎxjΜWOë¡ÙB„g³¶†Tš5t9 3RV‡Û3Ê?Ù­úôð8—‰ ªµkœõaÉ>P¦¯­:š½þµÖf:Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ¿ È«¤×”?ú­JÍðöáÒ÷g?d‹9ÿpV•Tþ&(삊(©W3¯\Ãaâ½ öéÄVÉÒ4¬>UfàïƒùWMM‘±¼w¯a¼Ñ4ÝBú ËËDžkõFL²§9ÈSÆ}ñž* |3¤OÙlÕØK$É!$ó}iiÞo­-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@>óRÒ¼Ô´Œ7)µ�Þ¢¬Q@ü†õy ê*ÅÈÓbàš}PEPEPHŸpRÒ'Ü´�÷OÒ–��'ŠñX¯í­u}KíJZ7Þ�Tà“¸~”û_Æ×H/ Cl¬ àÅ�Jï.þè·—R\*´ŒX…~2jøVº'¬ÿ÷Ý}*̰R^òw·õÔùßììZ~í­ýy^�gñ]Ó¯ÝdfL×§Ö‡áM7A�æ´W28ÚYÛÏþ×éOóSßþù4y©ïÿ|šgÙÿÚý(û?û_¥?ÍOûäÑæ§¿ýòhŸgÿkô£ìÿí~”ÿ5=ÿï“Gšžÿ÷É }Ÿý¯Ò�³ÿµúSüÔ÷ÿ¾Mj{ÿß&€ãÙžsš}3ÍOûäÒ¬ŠÇ?‘  ¯Fòiè#FcæÏc\âÚÝÏ ?ï“]´ßt}i©Ò¼œfS U_häÑÓKéÇ–Æ7‡àš9¥y#d@†+~�R×n °Ô•(»ØÊ¥GR\Ì)«ßëN¦¯­t™Ž¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(3Ä·…ô–'$ÙÂñÁZu•áŸù4úò‡ÿ@«U?‰Š; ¢Š*FQEQEQEQEQEQEQEQEQEQEQEQEƒï7Ö–�}æúÐÑEQEQEQEQEQEQEQEQEQEƒï5- ûÍK@ “ý[cÒªóW(  |ÑÍ\¢€#ƒ;9õ©(¢€ (¢€ (¢€ Dû‚–‘>à ¬íkLm[NkU¸x w­hÑS(©'³.œåNJqÝ�Ù +e‰îŽÕ]Çœàc4í±ÿÏsÿ|Õ÷�$ÆåÎ)Ÿg‹û‚ˆAAZ"”œŸ3#† 2È$,>•f‘T*€¥ª$*¼ÿ|}*ÅWŸï�¥BFA ^­úTÔ…Cuûÿ¥=;³Nò×Ò�@X‡ýQúÕz±ú£õ  õ“©iöþÚïírD!ÿ–j2ëÍkRÁp©(;ĉÂ3V‘NÒÝmm"ƒÎi6 naÉ©°¿ßý*_-}(ò×Ò³JÊÈqŠŒTVÈH× ç4ú@´Ê-Ç÷Ò�M�î¥E,Œ€qŠžŠª%pz榕ˆ@AÇ4%WÍï<×þñ  TU_5ÿ¼hó_ûÆ€-QU|×þñ£ÍïµEUó_ûÆ�5ÿ¼hÕWÍï<×þñ  TTP³6rsRÐ[ð¦ÜÛFj±ãýyÿ¾kBåã†Fj$·‹pP­c ,µY¦"ª.`S覯­:š½þ´ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2¼1ÿ"ž�ÿ^0ÿèµk'Âÿò)hßõãþ€+ZªØ(¢Š‘…fk:Üz,p¼¶w— +ìf‹~ÒHF2O§Y!ÿ�oúý·ÿÑ«@Ü~7ñïàkõŒ‘¸ ` ôÙ×Û5ÔèZÜþœ/­ ¹Šb«öˆöÇqÉã·àk6 ?P]f™_É]ByXïãËh°¿†{S¼ ÿ"^�þëÿèm@u}û3P´°ŠÂâòææ9$T‰‘p©·q%ØâNOiŸu ÞEnäóíÜ.æ !=HíX_v>µgn×0[½Æ• o<¢5ÞÂ0ãX÷Séë§]´Pè¶Ai Áey†f KaçÊ€=ó]¶µ¿†Ìó4é Ž‚=ÈÌ{𦳴oèú·“�`ºžGH l–`€sŒr0X¾!´º¸ñZÛÉk˜¨ü%%¢x¡tï¶$–ºd3A¥¹$ý¡]Ô¾Ö<1�hN3Þ€:X<_¥Ï¯K¤¬¿¼]¡kaÜ–zpFßÔTšŠ4ýr5J‰rYÁ·-–X¯ôÏã\Tþ [mPK]F ¾ÎóIm$DL‘ùžWßÚp¸"^¤v­ß I.›­.ƒ­o¨Ù­¤—!£�C#™FA!�÷�vtQEQEQEQEQEQEQEƒï7Ö–�}æúÐÑEQEQE2gò ’Aü*[ò%p]W«õ4žb}:䤑årîŘ÷4ÊìXO3›ëGaæ'÷×ó£ÌOï¯ç\}þ¨»‹ëGdFE‰¢NæW„±)·pµm×-HrJÆðŸ2¸QE…Q@Q@Q@>óTW24Q‚½IÅJ>óS&ˆL›IÇ9  k—ûÃò£írÿx~U/ØGüôý(ûÿžŸ¥Eö¹¼?*>×/÷‡åRý„ÏOÒ�°�ùéúP_k—ûÃò£írÿx~U/ØGüôý(ûÿžŸ¥D.åÈä~U¡U�Ïß?•[ Š( ‘>।O¸(h¢Š(¢Š(¢Š(À=¨¢€ÐQ�è)h Àô`z Z(0=.1E˜‚ŒAKE& £ÐRÑ@ z ‰À©�Bô,p}* �ëSÇ÷Ò�@À$â§›ýXúÔ¸¢€)QWp(Àô  TUÜ 0(•wÒŒJ¥E]À£Ò€)QWp(À mÿЦ¢ŠŽoº>´ÔéN›î�­5:P¢–�RÐM^ÿZu5{ýhÔQEQEQEQEQEQEQEQEQUu+“g¥ÝܨËC È> N)ɤ„Ý•Ù3Ï gJˆ}€¦ý®Ûþ~"ÿ¾ÅxeÍÔ÷“¼÷´’9Éf9¨«ÞY"¶³ü?àžCÍuÒ?‰ïk¶ÿŸˆ¿ï±GÚí¿çâ/ûìWƒÑOû?áÿ_Ú¯ùßA 2 ÷µçßµ+‰.ntù$g‰cóP1ÎÓ�?:ôññXw‡ªé·sÓÃÖU©© ¢Š+œØ(¢Š(¢ŠÉð·üŠ:7ýxÁÿ  Ö¬� ÿÈ£¢ÿ׌ú­z©üLQÙQR0¨ní-ï­žÚê%–ûÈÃSQ@ðˆè�í¥#ÐÝJAü7VÄEmpAÇj�ÐRQ@ntËÙâžêÒ å‰YQ¤@ÅAÆ@Ï®åQI¡é2¦×ÓmÈoõ+ÔƒÓÔ ¿EV½Óí5–+Ët�ä+ŒŒà�äHühm>Éã‚6´„¥»„ŒŽ…}? ³EWšÆÖâÑíe·‰íäûñ•[ê*+mM²º76–ÖóòËÅBW àãÜ »EQEQEQEQEQEQEQEƒï7Ö–�}æúÐÑEQET7Ÿñå?ýsoåST7Ÿñå?ýsoåU‰ [�R©�# ‡½zÇš+#*+€Ý=éµ5ÁÞâ]Û•ºgªãµCI;¡³KDÿ�Öÿpÿ1]sú'ü~·û‡ùŠè+ƒñ�”>¢Š+œØ(¢Š(¢Š(¢ŠA÷š–�}楠f 2ižz{Ñ0%8¨67÷Oå@ùéïGžžõÆþéü¨ØßÝ?•ZV 2:RÓ"F§ÐEPEPHŸpRÒ'Ü´QEQEQEQEQEQEQEQEQE!¨^¦5 бýÁô¨ä”«`cŠ’?¸>•^QûÃ@¶yÆ*Yª*­X›ýXúÐ~{ûQ翵GEI翵{ûTtPž{ûQ翵GEI翵{ûTtPž{ûQ翵GEY‰Ëç=ªJ†ßøªjŽoº>´ÔéN›î�­5:P¢–�RÐM^ÿZu5{ýhÔQEQEQEQEQEQEQEQEŸ¯È»©׬¿ú ­ Ï׿ä]Ô¿ëÖ_ýÖ”‰TEO�ú#GSE(�S_p|™-Õ¬öS˜n#) ÁÇ\ƒÐƒÜT5«©\²ƒOwÍ9”Bî)@9ç§§¾UE99F쩤�‘Øü8ÿ�õÏýzŸý kÓk̾Èzçþ½Oþ„µéµó9·ûËôG¿—|Š(¯0î (¢€ (¢€2<+ÿ"†‹ÿ^0èµë#¿ò(h¿õáþ‹¯U?‰Š; ¢Š*FQHH’pRhh¬M{_]*{ (~Î×·Ò”‰g—ËEKc‚qòã§$е¡jŸÛ:D7¾X�˜²²«n]ÊÅIVþ%$dã£Eax«ÄqøoGšèÇ$“-ˆ]ÔàŽ¥AÇ^õU|ifþ ‡NX®¼© 2o6“¸0W§=zPOEsš÷Š%Ñ.ÖÜé�/š¤Âþz.üc<œ Ãóªú'‹îuk¸lÛI)>À󸌄Àg$dÐWEPEPEPEPEPEPEPEPH>ó}iiÞo­-Q@Q@CyÿSÿ×6þU5#¨tenŒ0i§gq=QÇQZSh× çÊÚëØç£þȼÿžcþú骰}Ng>Å*÷öEçüó÷Уû"óþy�ûèSö°îÎ]‰4Oøýo÷óÐV~›§›MÒHA‘†0; Ю òR�Ñ×J.1³ (¢±5 (¢€ (¢€ (¢€}楤y©h¢£˜�œõ_qõ4rЧ¸úš7S@(¦DIŒfŸ@Q@Q@"}ÁKHŸpPÑEQEQEQEQEQEQEQEQE†¡z˜Ô/@Ç÷Ò”€z€i#ûƒéMyBc&€G@( £5œg‘R;ì\ã4»û£ò£bÿt~UÚ÷hû@þíK±º?*6/÷GåQ} v�´îлû£ò£bÿt~UÚ÷hû@þíK±º?*6/÷GåQ} v�´îлû£ò£bÿt~UÚ÷hû@þíJ´Èäßž1Š}G7ÝZjt§M÷GÖš�(QKH)h¦¯­:š½þ´ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Ï׿ä^Ô¿ëÖ_ýÖ…G<)so, ¤ˆQ¾„`ÕB\²Mô&jñhðZ+«¾ð¯ Ã-¢Çq~VÞãÜ­ÿ7ˆ?çÍïò�}ŠÆáÚ¿:ûÏ™xZÉÛ•ýÇ;Et_ðƒxƒþ|×þÿ'øÒ�kùÿ�DöÙ?ÆŸÖðÿξô/«VþG÷¾Èzçþ½Oþ„µéµÌxGÂï¡$³ÜºµÌª„ä*õÆk§¯™ÌkB®!Êè÷°TåNŠŒ· (¢¸N°¢Š(¢Š(#¿ò'è¿õáþ‹Z׬Ÿ xGE–0赪§ñ1GdQEH²|E¦K«i‚Þ5ŠLJŽðÌHI”Q±ØýÒµ¨ :´Òχ�´ë¿ i÷�«\0€+†�)a— ¡N00}v𡧤Åq ÝAhŒ'»(Å ñÆ^ÕbûO³Ôíͽõ¬W“�’ `¨ÏCïRÛÛÃin–öÐÇ 1�©jTz:P!ãß´ËflbÕÒxžZXÇeçÍ;gøNõÀé’xÍgßAâ ?ÄvW—ÚòBóÛý�n²A‚2XŽD¿)$ Á¯A1¡�HQK€@lríšE*êOPFA +ÆV^Ü-ÔÖ÷kog *=²¯8,s!Ü3…€¬ÏéÚÕ­új×Rµ­Ü!b¸Ìq±V ÎÓ Qøâ½Xbž3Ѥˆz«¨ þœªB¨€jZ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ A÷›ëKH>ó}hh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠA÷š–�}楠e 0Gß)=)d}‹œf¢ûAþè  <¤ô£ÊOJ�íû¢�´£¥-5zƒN Š( Š( ‘>।O¸(h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠCP½Lj  cûƒéUåÿZjÄp})5s“Ö€*Õ‰¿Õ�­(…Ï4öPÃq@è«^Rv�)?»@h«^Rv�)?»@h«^Rv�)?»@h«^Rv�)?»@h«^Rv�)?»@ ·þ*š‘QW Å-G7ÝZjt¥œü£ëQ©â€'�šˆ5.ê“4Õ=~´ÝÔÕn¿Z›4f£ÝFê“4f£ÝFê“4f£ÝFê“4f£ÝFê“4f£ÝFê“4S7Rƒ@¢’–€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2ü4¥<-¤+u[(Aÿ¾jVo‡Ž|5¥[8¿ôZUu>6L~QEAAEPEPEPEPEPEPEPEPEPEPEPEPH>ó}iiÞo­-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@>óRÒ¼Ô3*Œ±{ÐdBë�Qy ê*_:/ï¯çG�÷×󠼆õy ê*_:/ï¯çG�÷×ó EÚ€u3΋ûëùÑçEýõüèôS<èÏñ¯çO Š( ‘>।O¸(h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠCP½Lj  cûƒéHòª´±ýÁôªòÿ­j˜N¤ã‘Nw2j¥X›ýXúÐ篡£Ï_CUè  zú<õô5^Š±ç¯¡£Ï_CUè  zú<õô5^Š±ç¯¡£Ï_CUè  i |ãSúŠ<§õ5”þ¢�)ýEMECå?¨£ÊQSQ@laé@5-E' (àÓª54ñ@ EPEPEPEPEPEPEPEP ·ÐtèïGm¨P*ýVÓÜI¦ÚºýÖ…ú`Uš©üNäÁÞ(+'@ñ®¿k#Ãû»›w1][1ùà�uSê=CZÕÇx7ÂrišŽ£âC)©êŽ]àSò@„ä/é“ùT”v5‡®ë¦É—NÓÂM«N3d±.pd��º£¯=q�[•J[+[h¯§†ãšáKLê¸.Bàdý(3Eמ[�¦jo¾Ú^ã†ò>ÏÉÁ\ä}0jOkMáÿO¨¡@é$H7Œ�šESÇГøT^±µ¾ðn€.­ã›Ê¶‚X÷®v8PA†«^[Ÿêmi5³®‰dçÌi_µM†] u:ç¹Æ:ê�dƒE`hW·V÷/ ê1¿Úm£•C²â€=œd¼Ž oÐEPEPEPEPEPEPEPEPEPH>ó}iiÞo­-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@>óU{ßõCýê°>óRõ  Š+[hôm‚€2h­m£ÐQ´z É¢µ¶�AFÑè((u­I�è)h¢Š(¤O¸)iî Z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€Ô/S…èXþàúS^%sœ�iÑýÁô ¸?•0@ õ4ö@Ã¥`ôoûäÑæFÿ¾M7ÉOz<”÷§yƒÑ¿ï“G˜=þù4ß%=èòSÞ�æFÿ¾M`ôoûäÐ|”÷£ÉOzw˜=þù4yƒÑ¿ï“@ òSÞ�%=éÞ`ôoûäÑæFÿ¾M7ÉOz<”÷§yƒÑ¿ï“G˜=þù4*Î;Ði<Áèß÷É¤Þ Æâ(½ÇÝZ¹Ú©ÜýÑõ«�¨Îo|G3ÞK™˜aȃSèÚü¯ªÛÅæ±8R Îs\žµ¡ëöº½Ê&Ÿq4fFd’$,ÅZ𦋮ÉâI'°žb�;¼«´`WÔÏ ‡T”–Ý×b>²Ûå±ézþ®Ú=”r¢#<’¬k½‚¯©É$À?Ž+,x¹¿±õ+à —¶�*ØJ 7BJÓ©­}_I:¢¦.=€í\eK9#¿B?̋ ZI—JRET1ˆóU9^ ÎG<“ü«å‹iâ›»�YíNšË�r±, <“ÕqØwük?ˆ“=Í´e·"@þðäŒô íÏZصð‹ZÎíQJ¡ä|<,Jà�yôÅTÿ„±°¼e’2¸Û �¡O{zþtKQñÖ¥g¬Ëb–ö¬¨än`AÀb3�ÕÜXN÷:}¼òHÕÈ$g¥sž†óS’øÜ$Eˆ>\pü­ƒ‘»$Ÿ®1šê­¡û=¬QaÅä\/à;P´QEQEQE½V¥¨fûË@ µ ¨Ö¤´QEQEQEQEQEQEQEQEPѦ�§+µŒz�”Uú£¢©M ORKm$õ?(«ÕSø™0øPQE%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ûÍõ¥¤y¾´´QEQEQEQEQEQEQEQEQEQE ûÍKH>óRÐ%b©‘Py¯ýê°êpižBúš‹ÍïQæ¿÷ª_!}MBúštlY=iôŠ¡W–€ (¢€ (¢€ Dû‚–‘>à ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( Bõ1¨^€%�î¥:›ÜJäµßÍiªIk›,ÿ‰…µ¨°�ùá‘]Y@?xäzqõÍs’t”W+q㫼å…D­æ/¿´¿xäŒg®~=j¾©ñÓO¼òÎiTÛùÂCò‚q�9üh²¢¸ÛŸˆ6öÖV—Mc)Žâf�;†TãqüM~>K«k‰›Mš?)ãEVn_wqÇOz쨮wNñuµüÆ#o4DIJ&õ 6T±Æ: ‚ËÆ�ßë aP¯+¹Ú㓜ýÐÉãÔPSEPM5ÝÈ´µyÚ7uA–2qÜâ–)£¸�&…Õãu ¬§ ƒ@\ýÑõ«�ª�ÏÝZ¹Ú€ +„¼ñMÁ»”,¥X€£Ú¦Ò¼K<º”¼¥ÖF A÷®×€ª£Ì_*¶çkEfêúÂéBÜ y.%™öˆâ` d¶=õª¶ž&†}j“Z\ÖŽU“®î�O~µÄA¹EsÖž'{½sìMš8±ÄÎë×éž�zzU+O5Ö§ ¡ÓGUó7·‰ýÜ­uÔWñÊÒiá†q,2H¥U¿…'óíW5=¥ÄQA§¼ÂHVl—+€Iã€}(¤¢¹kÏ­¦™ ߨ·3#4‘y¸(Atäòj·áïn´€Zù*#YU„›ƒÌ=u4½EPEPPÍ÷–¦¨fûË@ µ ¨Ö¤´QEQEQEQEQEQEQEQERÑÎíÀúÛÆñÑWj¦”ž^�dŸÝ�þ:*ÝTþ&L>UkýBÓKµk«éÖ u 4�÷W=Éì=ÏIüM¢$Öð�NÞYnHÇ yŒùè@\œ{ô%ÔQ\õÞ» ¿‰¸Õmc†¯-çJ1"¶1Õ”žãÒ€:+“Ñ<]§Þk:½¼ºÅ£ªÝ¤v‰æ¯*bCòúüÅ«ŸÖµsµxV¶ºŽŸ¬]A5¬À‰©Haž5oÂK¨^ø’È%´Û#�<ŒÈ@P=M{UîK9½'f¯k^ÿ¡�²w½ÌÝ^ÆKèU#†ÚN ™‹>„V5Ÿ†.àÑ#ÒÛìkò„’.æ.ƒÐñÎ?Zêè¯ Øäl¼-¨Ø_ ¸.­žQ‡˜�ʹ$ÏRO>¡·ð}íµärG- (á¾ÐW26 #Œ`œž•ÚQ@f§à™¯Äûn"C4ŽìIrFàG¯¸à`qVõ ¸íäÝæM^[FóH¨Ø ñù×QEr?ð‡É™igÂ|¸JJfbÿ9Û’¹ÐþusúÖ‘u4“½³+‘ƒ ’¬Ç'?ïʺ*(¢Š(¢Š(¨fûËST3}å Z�TkR Z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€)é2 ´{)GG�~**åfø{þE­+þ¼âÿÐiUMZLQÙ –(ç‰â–5’7Yd0=AÅs¾ð&…á[Û»½6ج×üÎÛ¼µþâú éh©W-­[k âû+�.Ö'Sa4q9ýÜ%¤�� rÇxãê+©¢€9ýÕ¢ÖüFò@Qd¾F�™0yŒ�Q�k•¿ÐµMkÅ·S&”±Àóä–UÚï… ¼$ðÎ29ë^•Ep~ ÑõHl5(ç·6FêYb3¤�]3*A?‹<õª¾ð´6¾ ³û>�-²XÝ\Lò²2¬ˆ<Èâ\ôfùØç®ÏQ^�Erž mNÞ)´Û»··µß‰dR¦IiIÛÙ—nÑëùutQ@Q@Q@Q@Q@Q@Q@Q@Q@ ûÍõ¥¤y¾´´QEQEQEQEQEQEQEQEQEQE ûÍKMç"�@Q@Q@Q@Q@Q@Fˆ÷RTd\P|È¿»úQæEýßÒ¢òßû¦�-ÿºh_2/îþ”õØã!EWòßû¦§…J§#ж/÷Eû¢�E7bÿtQ±º)ÔPv/÷Eû¢�E7bÿtQ±º)ÔPv/÷Eû¢�E7bÿtQ±º)ÔPv/÷Eû¢�E0¢ÿtTN‹ýÑSš…èXø�~”$ðä~G÷Ò”²¯R&Öþùü…[ûçòRpR– 2N(6·÷Ïä(Úßß?�£ÌOï <Äþð k|þB�­ýóù <Äþð£ÌOï 6·÷Ïä(Úßß?�£ÌOï <Äþð k|þB�­ýóù <Äþð£ÌOï 6·÷Ïä(Úßß?�£ÌOï <Äþð Úßß?�¤ÚA剧† Ðæ�ÐK  ŒúÕÞÕNçî�­\í@ ÄŸÞ_Ê“y/þ½+HŠpΠûšÑþë)úÑ`y/þ½“ûËùõéôP1'÷—òÿëщ?¼¿—ÿ^ŸE3y/þ½“ûËùõéôP1'÷—òÿëщ?¼¿—ÿ^ŸE3y/þ½“ûËùõéôP1'÷—òÿëщ?¼¿—ÿ^ŸE"îþ"ÐTS}婪¾òЭH*5©-Q@Q@Q@Q@Q@Q@Q@Q@¾ÿ‘gJÿ¯8¿ôZU—᳟ iÖÊýV¥Tþ&(삊(©QEQEQEQEQEQEQEQEQEQEQEQER¼ßZZA÷›ë@ EPEPEPEPEPEPEPEPEPEPëëIµ¿½úS¨ ´úQ†þ÷éN¢€†þ÷éFûߥ:Šnûߥoï~”ê(¸oï~”a¿½úS¨ ´úQ†þ÷éN¢€†þ÷é@R7~”ê(¸oï~”a¿½úS¨ ´úQ†þ÷éN¢€†þ÷éFûߥ:Šnûߥoï~”ê(¸oï~”a¿½úS¨ ´úQ†þ÷éN¢€†þ÷éFûߥ:Šnûߥoï~”ê(¸oï~”a¿½úS¨ ßÞý*'VþñüªsQµ>?õkôªòÿ­5a>à¨äˆ³d‚¬Mþ¬}i‚Ï$b¥tÞ¸Î(­?ÙÿÚý(û?û_¥AEOöö¿J>Ïþ×é@QSýŸý¯Ò�³ÿµúPTÿgÿkô£ìÿí~”?ÙÿÚý(û?û_¥ÿÅRHãÙžsšS@nA*0qÍ\íUg(úÕªòÛÝqÚörîIÞGëVtMe›YµEr7ÈûƒYzÇ�¼D5[†²‰'·w,�æ8'8 ÕŸ ø/_ƒ]¶¹¿‰ ‚O˜¶; WÔN8O`ÚšÛ¿—c?oRü¶;�j×:E¼Á° $åã, º8#õæ©XkZµýΠmⵑbŠ6Ž2ì>c» ü¹Žõ½w¦ÚßÉÝD%gj?+“ÆqÓ5\hÊ’ÝÊ—s¤—%w2mTg 8÷<õ¯—41ô}sUž9šXí ®Ð–Þ ÉãÜ:£¥x«R¸½µûKÚ$3©`’JÇ yàúàzâºKMÏO—̲2Àýj+åe>­ž§ß­Km£ÛZ­˜POÙ#1¡lr:þTÆk>-Õ!¸š+Y�l¹xÇ”¡²0»FYqÔöõ­ßÞÛˆÉw m×pHÔ�Û7–ùˆÆ°ÅhÞx>Æþfšâ{†rûÇÌ6ƒ�~î0Gʽ}^M ÇæûDIs¹PbdRÑ€@Æ€áûÙï¬K‰Œ²²‡ ·+Á�jÕM>Â=>Š7gÜåË6:Ÿ§n€ (¢€ (¢€ Šo¼µ-E/Q@Ô‚˜´ñ@ EPEPEPEPEPEPEPEP_†äUÒ?ëÊýV¥eøkþE]#þ¼¡ÿÐjUKâb[QR0¢Š(�±ñª�_xWT� ¹=”ƒîÏ]ØÿxsõÅuõÌi¾ ¶¶ñf¡â[ç[­Fáñ+ż`m}ñÔÿ“ÓÐ7ˆ®fX-,m¦x§¾¸XCÆ@u@ 9_}ªF{dWcý«5ÌKk{ª}ªEr 7“»Z°RWÍ60$=>÷®£ÅZ^«u­é×Ök}$ÐÊ»,fŠ9ŒW’eà� Ž9üë;ìÞ ÿŸ_ÿàÂËüh±Ò5µ}ÏQ€æ;˜VQ표}GJÀñ½þ«¦Ù¥Æ›wsÌÉoă<¼ŒÀ�ì:ÿ+þÓo4�-/ oYddWe,ˆÎYUŠ€¤ŒóŽ=*�Šô×.aóôä¹³¶S™X¼„ìHò1ãçcÆCÃ×Wº¦¥g$úÞªmÌ^dBå!·7L§æÛ¦v`õ$G¦j cÅwšwˆuS#Ég­¸(gPÑ,`ýý¡†^G!T`.{‘NÓü%wiº‹XF×0ÈÌÐ\ÎÞt@ÈÄ2ȬFv•yqš·¨éZ´ZµÕÕŽ›’ùš#0¾‘° •2@€oAë@<¯Mq©.›6¿gw$‘µÛC{°\’Ñ«ï<)#‚:8éGYñ§wª^‹{ÍJÎ kËx`‰-T“hfFb§“œ€x<õÒXXj^´máÒÄ–ºÛvΘUHv£vàÙtÆ æ¹vÒ|LÜpi¬6òÍq*B—V»2pb$9!²Oá@…õk›æ¾¶ºûd¯o9EšâÜG•Ú§h<žÝ+¢®CÁ:Ž’·vW:UÝ­«2É Í, ÎÕ –Ää¶ON•×ÐEPEPEPEPEPH>ó}iiÞo­-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@iŒ*JiˆÀ váê)…i¥h]ÃÔ~tn_QùÔ;(Ù@n_Qùѹ}GçPì£eM¹}GçFåõ�C²�”6åõ�—Ô~uÊ6PÛ—Ô~tn_QùÔ;(Ù@n_Qùѹ}GçPì£eM¸zŠBG¨¨¶Rì Hwp*t`ËïQí£mMEA´úÒm>´bН´úÑ´úЊ*¾ÓëFÓë@(ªûO­O­X¢«í>´m>´bН´úÑ´úЊ*¾ÓëK´úÐõÍHœ(ñH-QEQEQEQEQEQEQEQEeøkþE]#þ¼¡ÿÐjV_†¿äVÒ?ëÊýV¥Tþ&%°QE# (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ A÷›ëKH>ó}hh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠLQŠZ(¸£ê(¸£ê(¸£ê(¸£ê(¸£ê(¸£ê(¸¥Å-˜£´PqFÚuÝ´m§Q@ ÛFÚuÝ´m§Q@ ÛFÚuÝ´m§Q@ ÛF)ÔPqKŠZ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(/Ã_ò*éõåþ€+R²ü5ÿ"¶‘ÿ^Pÿèµ*§ñ1-‚Š(©QEQ\=��e¶ø�}á-PiIc4kü%wlp:cžúÕÜPEaø’gq§éqI"IrŒlU¼µR…?íW §xzù¯C¦ÏmrÊþiK Ú°RP¤¦B$ù‚Œ`äñ@­Egèz�ö¶…c¨mÚ×+ºgî¶>e>àä~ÇøÖãY]rÔi2‚¡áI#mÀß¹O$x=;»µzåÚf¡â× SäO<°Yˆ.-Ë»À#y ܰ –WÎGg¥GâÍfîÓÄZÂA¬ÆÌ-ì‘cµŽ@Ñæé�BèÌU°NxÉ 08äÕh¯7ðî£usâ›t7‰.É,o%ì«)hò2$ˆ*à�rHþUSU¾¿Õõ;냦¶öÚ„0ÛˆæLr* ÁжIÆìà6;ñ@§EsÔ..Æ¡¥ËÁÓ"M=ÂËŒ*å2 Î}«§ Š( Š( Š( Š( Š( �}æúÒÒ¼ßZZ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¦™N ¨>æ€E3Í�þz/çN�AÔ´QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEeøoþEm#þ¼¡ÿÐjVg†ÿäWÒëÎýV�Tþ&%°QE# (¢€0ôÏ ØéÚÓêÏ–šN± _A�øÖåP-âoÝêz½†£n‚á-¢’#lo¥´åÊ�áãÿ0x¬ÿì Kþ€�ÿ…Eßÿ]͉áM"ãDÐ’ÎæMÒy²K·Ì2l Ŷï Æz‘Ícx§ÂWºö².í>ÇnRÑá΂RKz&ÞÀù³À'Ší( :/êÑj¶ÚÄcŽk8Ťy,†ß<’øÈ~àã‘Üš‹RðΡ©xŠêä[ÛÛYnWË“ç”ÄÒÊŒ #§~Æ»j(ˆð÷‡5]3UÓŽ,Û8¼u¿’S,»P)en3ÁåsŠÉoøƒuÇ—§ZB’5Ã"C«Í§™‚˜U@>S“ӜצÑ@§„4�WF–î ›+x,å*ñùw¯1B0Ê8$׿Jê袀 (¢€ (¢€ (¢€ (¢€ (¢€ A÷›ëKH>ó}hh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŽãÙäòþþÞ+É¥7‰´±çæú{Öå&9­2àÈ-¥1¬Øv}qÅxä·fò_µ¼¾~ã¿y9Í}P½¥´­ºKx��v@M|÷æ?÷Ûó¯Gøc%ó­à�ÈÖ` …³�ýñøWwö ?ùôƒþýŠ™#P¨ªª:_P.-¦zó�J§¥´†v%1Î}kZ�: PÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE™áÏù4Ÿúó‡ÿ@§Y¾ÿ‘gJÿ¯8¿ôZUSø˜£°QE# (¢€ (¦ c.è$RèeÏ*LúPè¤VWPÊÁ”Œ‚A´QEQEQEQEQEQEQEQEQER¼ßZZA÷›ë@ EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPg‡äYÒ¿ëÎ/ýV�føw� éCþœâÿÐiUOâb[pÞñ=íö¯«xvù^â].VE¾PJÈ™À ¿�Ï»šÏÑ´[-O[;ʦâîìrò9êÌ{“ëR3B¼ÏÇÄš¾¥},6rùP[DÐá|Ã*†¶Ó†#¸S^™X>·¿ñ ú…ðÛ¼ [’v“‡V,:•ÈS@F•º|CÓb¶µµ·ûÜ–®`›Èœ—ö 1ýåoJ‡R¿šâ÷]¶º×¡…<ÆŠs§Äd–|‚G<" !w ³r vø<Áâ}úYé±8 K¦fWwðã.Íž¹&—Y𮣩i3Û¦´Í<�…–XAYUÉ*«¸ýÓü\æ€3|rÉy à’;™V10Ìn-Ò5^΂±;²;�3]íaèº5^]^\YMçÇ/ÙmLÚXò76~÷\ÖåQEQEQEQEQEQEQEQEQEƒï7Ö–�}æúÐÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEqž,ñ„ÚUçØ,yÊ’FÛ‘�­¨P�yòCs*Õ£F<Ó;:+É¿á;×ç¼÷èQÿ Þ»ÿ=ãÿ¿B½ì|Guý|Ž?í:=™ë4W“Âw®ÿÏxÿïУþ½wþ{Çÿ~…ØøŽëúùö�Ìõš+É¿á;×ç¼÷èQÿ Þ»ÿ=ãÿ¿B�ì|Guý|ƒûN�fzÍäßð�ë¿óÞ?ûô(ÿ„ï]ÿžñÿß¡Gö>#ºþ¾Aý§G³=fŠòoøNõßùïýúÂw®ÿÏxÿïУûÝ_ þÓ£Ùž³Ey7ü'zïü÷�þý ?á;×ç¼÷èQý�ˆî¿¯�iÑìÏY¢¼›þ½wþ{Çÿ~…ð�ë¿óÞ?ûô(þÇÄw_×È?´èög¬Ñ^Mÿ Þ»ÿ=ãÿ¿B�øNõßùïýúcâ;¯ëäÚt{3Öh¯*ƒÇÚÔs+JÐÊ€ò…Ïâ+ÒôÛøõ=: Ø� *äØô#ó®\N ®'=™ÑCN»j;–¨¢Šã:BŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ícÚ`ÿ§H¿ôZ5CCÐ4áÿN±ÿè"¯ÕOâb[QR0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤y¾´´ƒï7Ö€Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼{Æ?ò6_ÿ¼¿ú¯a¯ñ�ü�—ÿï/þ€+×É¿�/OÕniü%ëú3 Š*{KoµJc3ÃÝ3mJúVÒWg†•Ý‘Ò^é t­4 CORL±”á¾sÓŽkœ# FAÁê+:ucQ]:nQ˺;ª1DÆæ�žhX¤xÞEF(˜ÜÀp¹àfº�8À¶¶6ð´‚Ñäš'Œ2ËŒçqÈÀùN1Ó­2ìFº,æ%ئÊÜ�_õ‡¯½cõ—ÍËn¿­�}†—¿OÒç5åHT£c€ëHèÑÈÈêC©Á¨5ÛÃs5¼ºx�ݤ1m+pÿ2á¹`|Á�ÄŸ^UmoRGÕ­•oæCtïæI'`�°3ÏAÓŽõÅÊRåQïÔ©aÒ�îr2FðÈÑÈ¥]NOPhDiQ³1Àd“]Ô÷j×òF²ÆbFO0M–;‘€pÇvyÅg‰žãÄÖQyf‚Õ•ží$€ïžÐŒÑ[jî=/¸K“ß©ËùæAå¶bq�»Î9üMG]–ó’0¡¬È !Ê�5z©cžG®y¬øÕnay]ex—2ÜF»‹‚ #Ô�éWKièL¨ZÚ˜‘ª3¡U�nRGQœqøŠA²3„bª@,=+© x?ãáBZõ�‹Àû@?7g'®1PØA ûË"“»Ô’0�£ËmÍ€�1Ç£ë6Mµ÷jÂîÈÁûßüúÍÿ~ÍA]�¿Ÿ匋wy‡º12=ò̤c?ÃÓñ®2´£UÔ½ÿ­È«MBÖ õïÈ£eõ“ÿCjòõïÈ£eõ“ÿCjóóŸ÷uëú3³+þ3ôýQÐQEó'¼QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERц4;ÿNñÿè"®Õ=$cF±ôïþ‚*åT¾&%°QA‚È5ç5­F]s\ÐuÞ—¦NéozÄå~oõDŸ¼G?—Ò¤g¢TMsN i£YŠe€b €[p ûŠ–¼Ï\¸¹—âiûÏ41iò,¦Ip¿4[ÆÜe�ewz“éŠôdº·‘‚¤ñ3�\hVíröËó}hh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Ǽcÿ#eÿûËÿ  öò¿éwÚì·¥ÛÜm!Àà þUëdòJ»Oªÿ#ÎÌâÝ×Fr´QE}1à–g»ií-mÊ-Õ€9ë–&«QE$’Øm·¹±g«[Ek SÅw˜Ô¡ò.,ˆ[vÖNG>µêPgÏ E7›9Pû¤CF2;V]Ÿ±…ïó/ÚÊÖ:ñ6É�òÇ*¤~EËFûî†<†üETÕµ�©¦?Ówo߉îüÕz.ÑŠÊ¢”pôã.dµ­6¹[Ðßo¡Úpª¼Hƒ ºçPm�¯¶¦±0Ìl¡Krc)œãß5�E M^Ëu`uæ÷~fòëÐî "Ý˜ÚØÀ첪¿.ƒ·ãªmu¥›€³æh0ª>ÐÉÉ%˜í õÇAÐVmÕGo͉ՓÜÛ—UÒf¶·�´«�� ‹ÁžNN~J«©ökWŠÕ&kq °(`NO#Ÿj΢…F [õlY7sZÛ\•nc–ï2,$ÉD©ßêp9“Eq„bïL§)nëÞÿ‘FËë'þ†ÕäqÆòȱƥݎ¨É&½›ÃVé¾³µ˜bURXzIÇë^Ns%ìc·ýèåq~Õ¾–ÿ#ZŠ(¯›=À¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦–1¤Ù�ú`Ÿú«uWMÿ�]§ýqOä*Õ9nĶ ©¦é–zE’ÚXÀ!…I;A$’y$“É'ÔÕº) + Wð;³ª-ÅÔ�öci%¬°¯@Ïr}?wƒìkvŠç,ü-·í2ÞÜ«ÜË|—¨öñùb"ˆ¨A'ª©žC�QðÝö£qxòÍ¥2\ª£‡³”’¨Å“8˜ Àž ]=ƒáíQÑÚµê÷‚yYeû;,®äñ–.F€ ÐÇzŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤y¾´´ƒï7Ö€Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( šè’)WUe=C Šu[û>Ëþ|íÿïÐÿ ?³ì¿çÎßþýð«4Us˹<±ìVþϲÿŸ;ûô?Â�ìû/ùó·ÿ¿Cü*Ís˸rDZ[û>Ëþ|íÿïÐÿ ?³ì¿çÎßþýð«4QÏ.áËÅoìû/ùó·ÿ¿Cü(þϲÿŸ;ûô?¬ÑG<»‡,{¿³ì¿çÎßþýð£û>Ëþ|íÿïÐÿ ³Eòî±ìVþϲÿŸ;ûô?Â�ìû/ùó·ÿ¿Cü*Ís˸rDZ[û>Ëþ|íÿïÐÿ ?³ì¿çÎßþýð«4QÏ.áËÅoìû/ùó·ÿ¿Cü(þϲÿŸ;ûô?¬ÑG<»‡,{Çim nŽÞ$oU@ ME›oq¤–ÁERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWMÿ�]§ýqOýUª«¦È*Óþ¸§þ‚*Õ9n%°QE†QEQEQEQEQEQEQEQEQEQEQEQEƒï7Ö–�}æúÐÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWLÿ�U§ýqOýUª«¦È*Ïþ¸§þ‚*Õ9n%°QE†QEQEQEQEQEQEQEQEQEQEQEQEÍʲqO¤y¾´žbÿxQæ/÷…:Šo˜¿Þy‹ýáN¢€æ/÷…bÿxS¨ ù‹ýáG˜¿Þê(¾bÿxQæ/÷…:Šo˜¿Þy‹ýáN¢€æ/÷…bÿxS¨ ù‹ýáG˜¿Þê(¾bÿxQæ/÷…:Šo˜¿Þy‹ýáN¢€æ/÷…bÿxS¨ ù‹ýáG˜¿Þê(¾bÿxQæ/÷…:Šo˜¿Þy‹ýáN¢€æ/÷…bÿxS¨ ù‹ýáG˜¿Þê(¾bÿxQæ/÷…:Šo˜¿Þy‹ýáN¢€æ/÷…bÿxS¨ ù‹ýáG˜¿Þê(¾bÿxQæ/÷…:Šo˜¿Þy‹ýáN¢€æ/÷…bÿxS¨ ù‹ýáG˜¿Þê(¾bÿxQæ/÷…:Šo˜¿Þy‹ýáN¢€æ/÷…bÿxS¨ ù‹ýáG˜¿Þê(¾bÿxQæ/÷…:Šo˜¿Þy‹ýáN¢€æ/÷…bÿxS¨ ù‹ýáG˜¿Þê(¾bÿxQæ/÷…:Šo˜¿Þy‹ýáN¢€æ/÷…bÿxS¨ ù‹ýáG˜¿Þê(¾bÿxQæ/÷…:Šo˜¿Þy‹ýáN¢€æ/÷…bÿxS¨ ù‹ýáG˜¿Þê(¾bÿxQæ/÷…:Šo˜¿Þy‹ýáN¢€æ/÷…bÿxS¨ ù‹ýáG˜¿Þê(¾bÿxQæ/÷…:Šo˜¿Þy‹ýáN¢€æ/÷…bÿxS¨ ù‹ýáG˜¿Þê(¾bÿxQæ/÷…:Šo˜¿Þy‹ýáN¢€æ/÷…bÿxS¨ ù‹ýáG˜¿Þê(¾bÿxQN¢€*éŸò ³ÿ® ÿ ŠµUtÏùYÿ×ÿÐEZ§-Ķ (¢�Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( �}æúÒÒ¼ßZZ(¢€+_Oso{[6»�¶6,Š˜¹cQéz’j–†e�ât‘¢–'ÆèÝN8$~^µOÄZ¼Ú]¬kmÒO;Y•bõf >ýIáãltÜ[}¤áÉ–K˜Z'‘Ï,Ø`:“@êšÄ‘Ü 0A5÷Þ“Íl$ ŒåÈ鞀zŸ@jÆŸ«&¡jå#Ù{"[YFô>DZéŠÏñ �µ�…u¶…có‘ÈêÌ\IêMiÍgl³.¤-<ËÈ¢*­Øcîç#?C@Óx¦â-,ß=¥´\Ê©—$¼†6*Á@^y¨­ ^K«+›–¬°¡%`˜¹Áàcõ®Zæ A!¶µhD�ö´Š!(ižä«¹Úy9í[:{ƒˆAVŠLäà èö í8# ÐÃâK©­£œ>ˆ¡Ð8VÔHa‘œ³­ni·ŸÚeµæÀžtk&ÐsŒŒõ®Êò¥Û¨é ˆTÚ¬GÊ:�ÜŸzì¼6sá­4ç9¶Oå@”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÉ%ŽÝ,ˆ€÷fŸX$ðÂx‡È&íàhsŒ&àAöÈ­)FšSv]÷"£’‹pWfÇÛ­?çêûø(ûu§üýAÿqð¬Çý�þÿöT³ô?øÿÙWo°ÁÿÏïü•œ¾Ûÿ>ÿvÿn´ÿŸ¨?ïà£íÖŸóõýüijô?øÿÙQÿ ÌÐXÿà?ÿeG°ÁÿÏïü•‡¶ÄÿϿſۭ?çêûø+™ñ�áÒ®~Ëi\ÊY·|«íÇZÎÿ…f?è,ðÿ²®k_ðÕÖ…tîžY‚`c׺p˜\ê[Ÿ›ÊÍb1˜Âüœ¾w¹ÞxoÆk“5´Ðˆ.BîP!‡|WM¸zŠòÿh·Wº_24vðw°ÆâA�zWÙ¿Ûý+�1¥J•nZ[~GN ¥J”¹ªnM¸zŠ2=ECöoöÿJ>Íþßé\'Y=( Š(  ý á.tKIç„>Äqý+B¼ÿÂWóÁ©­¢00ÍË)ì}EziV³hŠræ�Š(¬Ë (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ A÷›ëKH>ó}hh¢Š(¢ŠFEu*êOPFA¥¢ŠM£vì ØÆh*§9Pr0xê)h UUPªP0Bª¢…E  `0-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQER 0Àèih €0=©h¢€ (¢€ (¢€ + Å:�Λ§£[2«»à±#éEk NjèÎU]™ÿÙ endstream endobj 22 0 obj <> /Font <> /XObject <>>> /Type /Page>> endobj 23 0 obj <> stream xœµ“ÑJÃ0†ï…¼Ã¹ÌÎ9Éi¡]»¡°‹¹€ :LÙ¼ðõMÚ9Êôj„Ðöã$ÿþ&E€iÜ凷¤¼îÕAe&A´9Áã›z¹……¾Ã*ͧ4w})Âó2­jâéë¸U³E$ †Äw5[nÈÀökXß öo!°â^Ý#’<Ä0£vÁ¥ˆm¦”èMÕz*á' ñ¨“AL1ÔV*rÉö…:�äinª,o˜´û+oº¶D�”hÛô”‚&ïO”¥+íëæó)5×S*RÛ¿"`ü?Þ"H?€Øi†jéM1ѨòÜM©˜fQ¢}[×°JÆj'aì‘9{ 3<ÑúZ¬Óáƒk«BfÎù)µmCSŠÕp˜ýøÜw¦PËÁ˜‚ZÝØÂ¾–Í9‡s·°$š‡¦Ø‰Χ Õæ›?{\±…öÖ*�º£Þ_ endstream endobj 28 0 obj <> stream ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀšî"ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷-+LƒJ²KxTgwîÍêjí�ªÝÍl"XJ‚Ù$‘é�ñ¬±8ˆÑ¦êÔÙN›“Q‰£E`E«]!;ü·–*tÖd.¡¢LÎÿ…pC9ÂJÚÛälðµ±EQÕõ$ÒtÉoClÀ X.Iéɬ[_Ç}n�ifóHCU•8 2O_jõs¨¢°¯¼I¤voä±óÓÍeާ=©Ö~#†öp±BþI+ûæùWq׿l Û¢°.üE2;¥®Ÿ,�¬„³*†U8r2sÀÍOˆ`’Öîy!’¶ˆJÆLT眮}(bŠÀ"™�##Í$)Cp€†éŒëWaÖ­›H‹Q¸?gGuÈÈ9Æ8êxí@TVNŸªÏ%Á·Ô­–Îgáò?£2=é—> Ž-J[U$–$Éñ–Æqÿ|‚IíÇ­lÑXºf·=õÜ0Meäù°Ôù›¾\�Ïæ+j€ (¨žæ(î}²8ʃހ%¤e ¥Xd¢£‚æ�þK‡ÛXŽ™©hæ&vQÓ¨¨jî¥ÿ þïõ5N·ŽÆMj%€O¥Aev—ÖqÜÆ¬ªàà7^¸¦"z)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢ƒ�O¥sï«xˆ;ðÑeƒöÈÆGç@ìtV~—y©]yŸÚY²Û÷|²nÿ¾O£@¬%´PQKE%´PQUµ+¦±Ó.n•C41³…=ð+ÎãÅ÷¶6÷Hº2¤ñ¬ŠäÈ 3ÏËïJã±ÔQX¾ÔïoÍü„p-ŤþK *Ü‘ž{ÖÝ0°”RÑ@„¢²"ñªIy÷ú$Ö¹gYÞN̾ ÕÍ2ùõ1rÖÒ[«“嬟x¯cŽÙ v-ÖV­£¥ùY„”ÇQZÔSM§t&“Ñ�ax…ö5·Ñ¿¥nÔ7°](YãÈÏjòñØwˆ¡*QvoüîuШ©ÔRgçÓ£›2 ÷Óÿcéÿóì¿™§&•c‡[u Aæ¾~9u$Ü×âzJÛ1šÌlúMÁYdŒªù3�ÐûWž‹†6Ñ0„†;E;Tg°»×¨ÁƒØÑ�Œ`cÒ¾¬òŽKÄöd4K b-œõá};Õ+G�5[q*À¬†-©å±‘ò£œp03ךîÈ`ŒÑ@>©,67S\ØÞfâIU%€ÈUKÜ“À'¤ž+4ð¾¼¶—|²Àîá#(¹Áä/¯Ò»J`ŒŠâ&Ó.áÔ^áâ•`Épd%6y`©'ûÝ©ò¤ðˆÛL!ioäŠXl€�îN½sØf»B##ÒŒŽ:P=qcڠ9Ã�ÁƱ÷¬�V5KûÈ£“å‡oüz /<¾Fr01]¶Ñ»vzf‚¡� ¨4Ìh’)ñ¡doµ,Òseuéí]E&Ñ»vqŒÒÐYÚ­Œš’¥¶|¸ÌòƒóƒØ/¡÷­(–—o5�˜¶”&#;Q“�ËêG­]¢ŠÌÔ¿ãáÝþ¦©b¯j@ù¨ÝŠâ©VÑØÍîR¿ÓÖùWtÓÆPyRmÎ}k?ÃÚ9²±¶’I.„ª1É!ÀÉ=«vŠ¡ Š1KE&(Å-˜£´PbŒRÑ@ Š1KE&(Å-˜£´PbŒRÑ@ Š1KE&(Å-˜£´PbŒRÑ@ Š1KE&(Å-˜£´PbŒRÑ@ Š1KE&(Å-˜£´PbŒRÑ@ Š1KE&(Å-˜£´PbŒRÑ@ Š1KE&(Å-˜£´PbŒRÑ@ Š\QE¤Å-˜£´PbŒRÑ@ Š1KE&(Å-˜£´PbŒRÑ@ Š1KE&(Å-bŒQE£Q@(ÅP[$�Ž¢¼þkŸ‰¤ â=q[qÈpܯB¢“@sž—N—í`Ô¯¯1�ßjbvý8ÑâŠ)  S]7£.HÜÈê)ÔP:|#$ÿmë?ø?øšÓÒô¥Òã‘åÝÎóœÜÈ�§¯ÑE€1F(¢€3õÈžm þ8Ô³´GRqX:W‹,-4{imµ$VñÆàY¹Á í]u€æ|&æâ}fðC4q\^o�ÍB„� gºlQE4Š1EË\èwZõûÞßG¿ÙÕ’Ê6°ßß^p@­Í.[¹¬TßÀ!¹RQÔ©ÁÆG±ëWh¥` Rb–Š`oÑEÎjQEQEQEQEQEQEQEQEQHHHð¬ñíoÀúUÓåå*GÖ´÷/÷‡çFåþðüꔚI™`ŸÑ:>Á?¢þu©¹¼?:7/÷‡çO�‹•`ŸÑ:>Á?¢þu©¹¼?:7/÷‡çG;Teý‚Eüèûþ‹ùÖ¦åþðüèÜ¿Þ�ì9Q—ö ýó£ìú/çZ›—ûÃó£rÿx~ts°åF_Ø'ô_Î�°Oè¿�jn_ïÎ�ËýáùÑÎÕ`ŸÑ:>Á?¢þu©¹¼?:7/÷‡çG;Teý‚Eüèûþ‹ùÖ¦åþðüèÜ¿Þ�ì9Q—ö ýó£ìú/çZ›—ûÃó£rÿx~ts°åF_Ø'ô_Î�°Oè¿�jn_ïÎ�ËýáùÑÎÕ`ŸÑ:>Á?¢þu©¹¼?:7/÷‡çG;Teý‚Eüèûþ‹ùÖ¦åþðüèÜ¿Þ�ì9Q—ö ýó£ìú/çZ›—ûÃó£rÿx~ts°åF_Ø'ô_Î�°Oè¿�jn_ïÎ�ËýáùÑÎÕ`ŸÑ:>Á?¢þu©¹¼?:7/÷‡çG;Teý‚Eüèûþ‹ùÖ¦åþðüèÜ¿Þ�ì9Q—ö ýó£ìú/çZ›—ûÃó£rÿx~ts°åF_Ø'ô_Î�°Oè¿�jn_ïÎ�ËýáùÑÎÕ`ŸÑ:>Á?¢þu©¹¼?:7/÷‡çG;Teý‚Eüèûþ‹ùÖ¦åþðüèÜ¿Þ�ì9Q—ö ýó£ìú/çZ ƒÒŠ9Ør£+ìú/çGØ'ô_ε7/÷‡çFåþðüèçaÊŒ¿°Oè¿�`ŸÑ:ÔÜ¿Þ�—ûÃó£�‡*2þÁ?¢þt}‚EüëSrÿx~tn_ïÎŽv¨Ëûþ‹ùÑö ýó­MËýáùѹ¼?:9Ør£/ìú/çGØ'ô_ε7/÷‡çFåþðüèçaÊŒ¿°Oè¿�`ŸÑ:ÔÜ¿Þ�—ûÃó£�‡*2þÁ?¢þt}‚EüëSrÿx~tn_ïÎŽv¨Ëûþ‹ùÑö ýó­MËýáùѹ¼?:9Ør£/ìú/çGØ'ô_ε7/÷‡çFåþðüèçaÊŒ¿°Oè¿�`ŸÑ:ÔÜ¿Þ�—ûÃó£�‡*2þÁ?¢þt}‚EüëSrÿx~tn_ïÎŽv¨Ëûþ‹ùÑö ýó­MËýáùѹ¼?:9Ør£/ìú/çGØ'ô_ε7/÷‡çFåþðüèçaÊŒ¿°Oè¿�`ŸÑ:Õ‡4QÎÕ_`ŸÑ:>Á?¢þu«Eì9Q•ö ýó£ìú/çZ´QÎÕ_`ŸÑ:>Á?¢þu«HX(É8£�‡*2þÁ?¢þt}‚EüëKÍ�ûÂ�6?ï 9Ør£7ìú/çGØ'ô_δ¼Øÿ¼)ÊÊÝhçaÊŒ¿°Oè¿�`ŸÑ:Õ¢Žv¨Êûþ‹ùÑö ýó­Z(çaÊŒ¯°Oè¿�`ŸÑ:Õ¢Žv¨Êûþ‹ùÑö ýó­Z(çaÊŒ¯°Oè¿�`ŸÑ:Õ¢Žv¨Êûþ‹ùÑö ýó­Z(çaÊŒ¯°Oè¿�`ŸÑ:Õ¢Žv¨Êûþ‹ùÑö ýó­Z(çaÊŒ¯°Oè¿�`ŸÑ:Õ¢Žv¨Êûþ‹ùÑö ýó­Z(çaÊŒ¯°Oè¿�`ŸÑ:Õ¢Žv¨Êûþ‹ùÑö ýó­Z(çaÊŒ¯°Oè¿�`ŸÑ:Õ¢Žv¨(¢Š‚‚Šæ_ÄRÖ…žŸu 6–Ï›«—aó‘ÿ,Ó=}ÍnÿhYÏå¿ýüã@h¤0AäK@SXâÈê€ôÜq@¢³u;©~Äͧ\Û}¡H`²0Ã�Õ}³ëMÑuÛ]f7TýÝÔ?,öì~hÏõ„P¥Q@WâËÝJîÃQ‚Ã͵·´ˆ¼×.Àd"{zšì(®wB¹ÔíM½Ž ’\Å,aá¼QžÙÚþ‡Ð÷®Š€ (¢€ §)&FÏcW*”Ÿëë@ ¢©ê·RÙiÒO£J …’N>µ‹oâõÜ.£ÓØŸ»åÌëüÔÖÔèN¤y¢Œg^—,™ÓQYúf¦×í*´H†<¤…�Î}@ô®Xñ¤šO‰SMk"ð¾X¬ ³à±Æ#!€;ŸjÎPp|²ÜÒ2R\ÑØì(®sKñÕíÒ,öQDZK,L’b¶òšÌ�Ç�åÊ$²4îx†0‚>VÉ᱓éRQÛQX-âFœnÑ%œL"h£Ÿ"0yË>08ëÚ²×Å÷ð³É5•¬�Ëó[,w_3ÁåÃô€;*+�ÔüJÖ7‚Ž1ˆVI<âT&âvò3ž„cÍ7Ä·7š…¼£C32y�LÄ« ‚ ŽÆ€:Z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€&·'y±RÎÅcã¹ÅCoþ³ð©n?Õ�­U¢ŠÀ¶“T×#7¶÷ßa³f"H•ÞE�ìXƒŒ€;wç€ ú++N½»[ùtÍGcÜ"y±ÍíYS8éØƒŒúäV¡8àœv´V;k¸€‡Ã°=Ž;f­�E~ÊÓ2m"M�NîOåŸÒ€.ÑXé­1–MÐâ5À ‡ü†®ÏzcR�I²‘Œ‘ï@èªV÷²É †[WIÈ#?�Bú®Ù]U¨“bíäœ.IÀ÷À  :*µ•л·GÚÁ¶‚ÙRHíš³@Q@Q@Q@Q@Q@Q@Q@BÄHcVêœ_ëWëW(¢Š(¢Š(ª×ï¶*ÍU¸ÿYøPTVv¼÷qèW¯b݉�`ËgØz×2fÕÖÚèÂú«[ˆ´ˆ<àœù›Gå@½I "QïX~kư˜Ý›“þ�þI¹sÏë[q­_­\¢Šç|KªÞé×ÚLV’À‰q6ÉD½H܃�Á�ãŠè¨®xêº�$ ôoÆs]é@†™úˆÿÝÊ€Eɶ¹®O¥ë-µ ¹¶vHY% ª'.=uéÅu”VO†®õ ÝÒ}M]"ñ†£¥êQÁP*¥ºLD„7qäêÖ€;ª+ŠÐüO©\k/ex-ü³{«§ÚÜ {‹Ûx§ È0öM[¢ŠŽoõGðþt%V?Š&– VŠF�žXbܧ•àýÐÅÆø�Ãz}®�²Åö�3ív¨XÎä�ÓÆ§¿pMMáIÜj—¶ŠÎ-…´3¤LìÁ¤™ œ�ˆÔã×>´ÖQEQÖŠ(Œºð¥ž—©›ËmÞúÊwýý»F¬ñ~úg·ªþU»ÿ¾ƒÿ@kûð¿áZÔPQ8ÕB¢€@Àv§QERÿK±ÔÑúÖ+…C•.qVè gVÐt=7N’â/Ãu(¤1B f'è=ê_ øn.¤†$¿ºÃL"\"z"�AëÞº(¢Š(¬�œx[S?ôîÿʵé’Åñ4R¢ÉŒ2°È#Њ‹Oÿ�m¯ýqOä*Å"¨E  €RÐEPT¤ÿXßZ»T¤ÿXßZÈñÊÚÇ“ÈùRIù‡jó™­µ9&g[[�@`O§ã^·Evᱯœ•ð‘­.fÎ[ÁâãuãO±�/˜…s×Ö²|Ymqˆ[As:OnÆ\y�´î\B9Qì0;×EsÖ«ífçk\Þ•5N ¡Ãø>ÖA>®òéþC,h"cF;ƒnÁ(¤òjÇ�MÔ,»mœÈ,Ë6Ûf� ¿B�Ç 5êVF‡µœþ–ÚòÚúHDÛ‘ÓO1�Çœ¬[2ÿh£7wVú™×&°ŽDû¹?Èf¯Q@ö†kbcº�žI™£ õô¨¢°×&&h1 µ�TzƒéZ´P=:#´„¼Ò>c_‘•FÞ=†jåPEPEPEPEPEPEPEPâÿZ¿Z¹TâÿZµr€ (¢€ (¢€ «qþ³ð«UZà|àûPF½ouu¡^ÁdH¹’"±áöœý{W2tMH[]y62\@ÂÓí™,‹�ÿ7lä~UÛÑ@þ²¸±°š;ˆŒ;îHâ2ù…ã?�mÅþµ~´Ê|#2­\®oÄú]KkmÉo6éL‡”Ðñø)?P+¤¢€9³¤_–'û7DëÝü+¤(¢€ÐÓ!ÿQû£ùSè ¹M#K¼·´×’M1-šáŸÉÙ!o4ØêÇœÿ$ñÜõtP-"-ô[&B’Ço:“Ð…ŠÊñ¾�6£á[¸ìíÌתÛíûÊÛ‡*xÁÆ{×EEy}®‹âXoì¤6",èfpWî÷ÏïŽ#Z~-ðî¡©jº…żR:Ig1„þ&ÜÙêÀ23Á®öŠáô}+V·Õž+»[Ç„ÞNë!�‰Ë0 +of;€Ã Hè3FÛÂ×±iá¬ìÒí¨.~Í,jÒ˜…ÄM»xc· ¤‘ÉÀÅz5ÁYèÌþË’8KÈc·h–!…Xá˰'vžßÖŸ}ákŸZˆ¬õŠ8¥/v×LPп>ìç¶wTP]:ÐØi¶Ö�<“´1*ebYÈ’O­,úu�ÍÔ3ÛE$ðb‘”™ô5fŠ*9¿ÕÃùÔ”PY^#´ž÷D–+hüÉ–H¥TÛ$W gŒ�¸æµh C_Öd¾Ò–tm[Ì6ÒönÉ23wôSW´Hž]rûP]>k+Wµ‚Þ(åURJ4¬N8¼k¡¢€ (¢€ )¸oïÊŒ7÷‡å@¢›†þðü¨Ãx~Tê)¸oïÊŒ7÷‡å@¢›†þðü¨Ãx~Tê)¸oïÊŒ7÷‡å@¢›†þðü¨Ãx~Tê)¸oïÊŒ7÷‡å@¢›†þðü¨Ãx~Tê)¸oïÊŒ7÷‡å@¨Þs“�}©ØoïÊŒ7÷‡å@ û:zµgOV§á¿¼?*0ßÞ•3ìéêÔ}�=ZŸ†þðü¨Ãx~Tϳ§«Qötõj~ûÃò£ ýáùP>Ξ­GÙÓÕ©øoïÊ‘w#ò ý�=Z�³§«SðßÞ•oïÊ€ötõj>Ξ­OÃx~Ta¿¼?*gÙÓÕ¨û:zµ? ýáùQ†þðü¨ŸgOV£ìéêÔü7÷‡åFûÃò }�=Z�³§«SðßÞ•oïÊ€ötõj>Ξ­OÃx~Ta¿¼?*gÙÓÕ¨û:zµ? ýáùQ†þðü¨ŸgOV£ìéêÔü7÷‡åFûÃò }�=Z�³§«SðßÞ•oïÊ€ötõj>Ξ­OÃx~Ta¿¼?*gÙÓÕ¨û:zµ? ýáùQ†þðü¨ŸgOV£ìéêÔü7÷‡åFûÃò }�=Z�³§«SðßÞ•oïÊ€ötõj>Ξ­OÃx~Ta¿¼?*gÙÓÕ¨û:zµ? ýáùQ†þðü¨ŸgOV£ìéêÔü7÷‡åFûÃò #TéJ@#dRa¿¼?*0ßÞ•3ìéêhû:zµ? ýáùQ†þðü¨ŸgOV£ìéêÔü7÷‡åFûÃò }�=Z�³§«SðßÞ•oïÊ€ötõj>Ξ­OÃx~Ta¿¼?*gÙÓÕ¨û:zµ? ýáùQ†þðü¨ŸgOV£ìéêÔü7÷‡åFûÃò }�=Z�³§«SðßÞ•oïÊ€ötõj>Ξ­OÃx~Ta¿¼?*gÙÓÕ¨û:zµ? ýáùQ†þðü¨ŸgOV£ìéêÔü7÷‡åFûÃò }�=Z�³§«SðßÞ•oïÊ€ötõj>Ξ­OÃx~Ta¿¼?*gÙÓÕ¨û:zµ? ýáùQ†þðü¨%NG_z}7 ýáùQ†þðü¨ÔSpßÞ•oïÊ€E7 ýáùQ†þðü¨ÔŒ¡†Í&ûÃò£ ýáùP|˜ÿ»úÑäÇýßÖ�†þðü¨Ãx~Tß&?îþ´åEOº1FûÃò£ ýáùP¨¦á¿¼?*0ßÞ•:ŠnûÃò£ ýáùP¨¦á¿¼?*0ßÞ•:ŠnûÃò£ ýáùP¨¦á¿¼?*0ßÞ•:ŠnûÃò£ ýáùP¨¦á¿¼?*0ßÞ•:ŠnûÃò£ ýáùP¨¦á¿¼?*0ßÞ•:ŠnûÃò£ ýáùP¨¦á¿¼?*0ßÞ•:ŠnûÃò£ ýáùP¨¦á¿¼?*0ßÞ•:Š( ŠªÚ•‚1W½¶VePGëO†òÖåŠÁs ¤uá¿•OEàdÔ_j·g‹þû-Ó"+ . ¿Ýëô¡dFvE`Yq¸È QLD^D)hþøÏ+Æy§+PÊA¡èh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)©÷:šŸpP¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)’ñ ŸöM>‘€e*zŠók=1l<¦ê×·–Æ9- v?ÙQÊû¤ ÔžO-ÖµÓE›HñF‰!¹·u–Ice†Í Èò˜òW¯"®®‹«Ûé±iq>›qc ªD.c}ÛWãŒÊ®[éÚ•Æ¥oyªMj~͸ò°˜m$–>„�Æ€âë›Ûo\›÷Lãa|ñž­ùWŸß5­¥üzîê <£$N^09çÚ½OP´ûvŸ=®í¾jÝéXCÁZÚ­®%-4‘†´§s>WhÁíŽØ  o\:^h)êâ*‹µx^¤žütªú-œÒ�:ö =T]Í*5ÍĬv:}þ•Òj~¸¿¶¶·MVtH†æ�‰ã;¾™½ooµ¤vÈ?w@(Ç5�³·ˆuX Ë%Á’8Úc1ýîâ3‘œ=…v>·K{­N'kD˰ïs…a�¸bpjÒ½ðm�É%Ä LE ;6võ«Ú>‚šEÕÜé1�ÜìÈ*F;P½Q@Q@Q@Q@Q@Q@Q@Q@5>à§SSî uQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Vf¼ÚºéŒtAlo7 ƒ… Þ€4è¯Oø—XñA�õM*ßû1š0¯)H¥cßý¬bºÍ?Å>.Ôoc¶¶Ô<=<ŒsåÇ!,Gzõ +Îþ(ø…ì´{-ÞàÇ©jSÇc|ÆFOçQüEÔ¢Ó|Z¢ý¢)áBÉ8.q×89 H¢©Xjw0‘^A,†0J¤��O@k�ø‰â››(bðmoR4XÏ0¯v>œg�w”Wcâ£êÚ7ƒÃK«j ÞÜÌ †oÏùz×I¬Å¨Í§2éw‘Ú\‚’H¼ÁŽã¡Ex5Ï‹õßé¡WX¸0 $·±r§=wWGá¿x�Z×ÓJ:Ú$ËšÉ.žr¼æ€=ZŠ¡ªëzf‡ sjw‘ZÇ#mV�ðO\W�]øÞôøûT“Hñ ŒV-ymvKF}v�Zöê+�ð^«­ëÞOw©é·Ð*퉭�¯ïX�ø“Ç?ð–͢ɚÍn‹<�sóFO@}q@›Ex¦Ÿñ ê×Ç:íôšF©5¹�ÙW“É#¶k¸“Æó_|=ohúd³Lå’+sË®N:ôÍvtW�h"ñ.–öÐÏa©ÝZÞ³µì“CƒÒt)èƒÓëPøKÄÞ"_ i—·Ú­¥–�jäËq+y“Üþô�»z�îý{]Ìø¦ëÅ�I ønÊÒdØÍ+Ü>0{úÕO‡þ2¸ñm¥ò^Ú-½í„ÞTʇ*IÏOÈÐcEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMO¸)ÔÔû‚€EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\ïŒô�OZÑ>ŧ_‹%vÿIp>c9 èk¢¦ÈždN™Æå#4ó�…šÞÓLšÖ4;b—2(KëO2BÆsé[Þ–9~*é~]î›v¢ÚOšÂ-G±µèþðE§‡ô¹m.Žì’\I7ša�NsÒ¨é>»µñ¹ñî¡o$q#Çoâ-ª}HëŠç~#øZ }jÏÄ2O$·3êV±F¬x‰C �Uþ&ø@Ò<4Ú��³¥ËÝ f2±á‰Ïè~,ðÛø–ÒʹX µÜw$”Ý»iÎ:Šg�¼97Š|?ý�éùé.÷\Œ/jƒÃÞÐt)¢Ô4ûy"º0íÞd-Ô ðk”ÔE—æ¹¹I_Yñn©!þ`Üø'Ž;úŸjõ(PÇq“’ª~‚¸Mgá>•­xŠ}jmGPŠyNvÄà8Çgÿ×@ì'Røm޽«ÛEu>©rµî³™"Vûª¾Ã©÷W¡xª÷T�Âw~�noXF`PVeÉçý’Mrÿð¦<<ñìžëQ˜s÷ç5±ká�kGðM¾‹¤ë¥/!l ©áòdü €g�¥y åŠéz•ƘâÉ®m¶ùÉo¦³„%Aê½mxZNÝ­€z×yeá4²ñF¡«Gt~Ï[‹M¿#¾0[ñ§kžûO‡'Ó4FƒL’PÉC„<0ü¨‹ðµÏö�ç�|C+m2´q3ÄcŸÖ ²gƒöw™â-ùLÁ”àó7Zêo<Ëá‹=FÕ¦Ómc ·qœ0ù³õçó«·ž …ü'…l® 1˜DK4ƒy äŽ=(Æô{Ó‹¼cœ�nMkkžÓ”bНo{ ÌHØ Ø-ùTM©ÄŠwp ÆzúPÚ*¥Æ¡­ºÍ;yAˆd!O$þ™Í5õköæåa�É–Î:Ž:ƒ@hª—:�¥¨�<Éæ"–òò73�Ko¨Ú]0XgFr3´EZ¢¨ÉªA™�ùFeÜTdãùUÄu‘)JuUyï`¶p’3o#pUBÜ~€,QU Ô­çdAæ#¿ExÙ˜Å'öŒ{Ý<©ÉFÛòFX|йEVŠú |ÞZ?+—óT¦¯5öÎ�çþÛo�¡·y«�§^´~Н-õ¼K4™ ¡@[põÍC«o ]ÂX™Ÿ`s�Î1Ï�^¢©>©n“¼L$ùÒÛ8Ïâ?:}®¡owþ¯ÌpY ‚=A4jŠ úŤn‹#”ß’ z3R�BÜۉњD-´lRI>˜  TUOíËÎdÆJÎGÔô�-Åü6ϲ@ÙÛ¸ž§RhÕJ×T·½eXw6FzŽ>¼æ®ÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE#0E,Ä$žÕÉÏñI†v�"¹™Tãz(ÁúdŠÚ• •¯ìãs:•¡Oãv7/4 QœÏ{¤X\ÌF “Û#¶>¤f§±ÓltÈš+ +kHØä¤,`Ÿ\\¿ü,}/þ}/?ï•ÿâ¨ÿ…�¥ÿÏ¥çýò¿üUmýŸ‰þFeõÊÌvEªDW‚ óëN®7þ>—ÿ>—Ÿ÷ÊÿñTÂÇÒÿçÒóþù_þ*�ìüOò0úåæ;"�zƒM1¡*J)+÷N:}+�ÿ…�¥ÿÏ¥çýò¿üUð±ô¿ùô¼ÿ¾WÿŠ£û?üŒ>¹CùŽÃbîÝ´nõÇ4¤R¬‚zã¿ácéóéyÿ|¯ÿGü,}/þ}/?ï•ÿâ¨þÏÄÿ#®Pþc±*J°HÁ¡¥®7þ>—ÿ>—Ÿ÷ÊÿñTÂÇÒÿçÒóþù_þ*�ìüOò0úåæ;*+�ÿ…�¥ÿÏ¥çýò¿üUð±ô¿ùô¼ÿ¾WÿŠ£û?üŒ>¹CùŽÊŠãácéóéyÿ|¯ÿGü,}/þ}/?ï•ÿâ¨þÏÄÿ#®Pþc²¢¸ßøXú_üú^ß+ÿÅQÿ KÿŸKÏûåøª?³ñ?ÈÃë”?˜ì¨®7þ>—ÿ>—Ÿ÷ÊÿñTÂÇÒÿçÒóþù_þ*�ìüOò0úåæ;*+�ÿ…�¥ÿÏ¥çýò¿üUð±ô¿ùô¼ÿ¾WÿŠ£û?üŒ>¹CùŽÊŠãácéóéyÿ|¯ÿGü,}/þ}/?ï•ÿâ¨þÏÄÿ#®Pþc²¢¸ßøXú_üú^ß+ÿÅTöž?Òn®RŽâÇäQ�КO‰Jî .ƒvæ:ºj}ÁJ rCHŸpW!Ò:Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ZAàv–y¢#>T/Ê8èqèz{V×Ì:1Û\%ä„´ŠG)Øp{±æ¯$1$�"Fªï÷˜OÖƒm"ÈQK¯F#‘øþ4Λº|̰E2Ä%@ÒÈr>c’Ò3Àç5³f¦ÚÙš[{xrÙÏOÊ*Ɇ3G°llî¹ëJñ¤‘”a•=ºP£¬ˆ®§*à ûV~¡ <«"ËÊ0QŸfG^ gð­€*)- ˜ƒ,1¹ÙA  Û%k‰ÒéÌi»�‹)lž�ãðÅR¸GcÐíÌŸÀÌ3ŸözÞK;hÜ2[¬:€R**@äãÖ€0£ÏÙï÷g>Bg?îÕ�.ñKß01„ò '®zg’JÒ[xU$ ç,ýï­:H£š?.DWCü,2(FeÑôßôs"˜‘wo@ê23ôÈè÷}¾ÖòÈ[�ÒÁ¡ic¢W·#ržA'è9ëë[Ÿg‡$ùHIÉ$ŒõëLŠÊÖÝ ´1¶1”ŒúPG˲ST!D/“’wtØëõ«3%¬vÂüß´P¹ãœç“Z¦Þ�„9\¯Ý>Ôó4‹!@]z69�¦Ožé‰"b~\Óõ �xcfo•To ÈÁÏ¡õ­¡ ABˆÔ(;€ÇZ ÄÆ‡wÞÊõ  m>6†ú6’c#°e!›î~œþ•»QÇo #C ç  sRPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP p‘áýHŽÙeÿÐ x…{v»ÿ"ö§ÿ^’ÿè¼F¾‹%þýO5øãèQE{G”V†Šˆú¤FHŒˆ¼•Ï$q]ö–"g’ÖÞ¯úåÚ0Íßë\õq œ¹Z6§EÎ<×8Ê+¥Òí­&’ôˆÕ‘¥Ø§aš‰ÔŒ>"£-Œj)óDÐJѾ7/\ŠeZw$÷m?�6×þ¸§ò2}ÁPiÿò µÿ®)ü…NŸpWÂÏâgÖÇáC¨¢Š’‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ýwþEíOþ½%ÿÐ x�{ž©Ýi¶ñŒÉ,‹õ*@¯–) •£•N °Áô9+\“^g‹š§Í2Š(¯lò‰­%X.ᕳµ1Åt_ð’Yùï ·“æÝŽp}ë—¢²©Bäi ²‚²4ôÍLX®ÆS´Èˆë�ØU™u«y­&ï|€€§'‚OZâ‰P„¥Ì÷VIXÚÓõKKGÛ (ÊT8 2?:ŠBÖ RÒñ~ÒþL�ŸÍ`Iö¬ª(ö»}ÃÚÊÉv5bÖNÅŠHP/–a2(ù¶�¦pj¦£r—wòϲ£€ÝpVŠ¨ÒŒeÌ„êI«0¢Š*È (¢€ (¢€ (¢€ (¢€ ž+“´ðL'Ó?Ò ¢†“ÜiØ(¢¥¶¶–ît†g‘Î46’»WÑá§ÿÈ6×þ¸§ò:}ÁQÚFÐÙA}ä�Tý@©î øY|Lúèì‡QE# (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ‰­ v,ðFÌ{”Ô´SM­‚×!û¯üûCÿ| >Çkÿ>Ðÿߦ¢Ÿ4»‹•v!û¯üûCÿ| >Çkÿ>ÐÿߣÔoàÓ,e»¸`±Æ2r@ϰÍfÉâí+«XR´V¸Mà´èŒdgž3G4»‡*ìk}Ž×þ}¡ÿ¾cµÿŸhï�Uo5«;£Žs.$ŒÈŽ‘— a·$žs€*–ŸâÝ/R»{h~Ö$Y<¿žÒUýJà~8£š]Õv5þÇkÿ>Ðÿß�±ÚÿÏ´?÷À¬ùüG¦ÚÉuÌâÝíÜ# ¾@ÄŒŒÁ›gâm7QÓd¼²�g)œÀ¬€c8 žj9¥Ü9WcKìv¿óíýð(û¯üûCÿ| ÉOéòC©ó,Š´�ãØàu jX_[êV0ÞZ¹x%]ÊJ•?‘äQÍ.áÊ»û¯üûCÿ| >Çkÿ>Ðÿߦ¢ŽiwU؇ìv¿óíýð(û¯üûCÿ| šŠ9¥Ü9Wb±ÚÿÏ´?÷À£ìv¿óíýð*j(æ—på]ˆ~Çkÿ>Ðÿß�±ÚÿÏ´?÷À©¨£š]Õv!û¯üûCÿ| >Çkÿ>Ðÿߦ¢ŽiwU؇ìv¿óíýð(û¯üûCÿ| šŠ9¥Ü9Wb±ÚÿÏ´?÷À¥Kx#mÉ j}U@©h¥Ìû…�SSî u5>à¤1ÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEr>*Ò|Mç-ÿ…µ?*áˆY­®è˜tÜÎÒ=ºâ¶<=¥]iZpKýB{ûÙ>i¦•‰½vQéZÔP?ã} IûÀ© 2•Îí½>œ×yeyÕ¥¥›iÂÂ(Yn'ÌÂ×̇ýç'œñŒzWªKsÄÑJŠñ¸Ã+ ‚*+k K;_³[ÛÇ'9E^zæ€8ýzå´Ø´«½YÒ-ÞŽÀòðÊ $ø++Âz-ý†¶o.á¢Ü2³Ä3Ê€»°:}8½4}6;cl¶6â» yczãéU!ðŸ‡mæI¡ÐôèåB]-�}AÅrš´ë%έáÃ{p÷Sß[ bÿ;"â7lþñŸ¦*]Uîc𿌭e»k¥´„Æ“4q£s ± Þô®Ú[ I®c¹–Ú'š<ìvPJäp~€ †=L‡OšÂ+ hí&I F=r­rRZjÛŽËk©—:ŒË/îG¸mÝìý« ð�üŠöð?ý «VæÒÞöÒK[˜R[ykÆã �LRÛÛÃio½´I 1¨TŽ5 ª`J–Š( Š( Š( Š( Š( Š( Š( šŸpS©©÷:Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( -ƒŒdÒe¿º?:ÞjÇþм耡C3Fñ›p\à0=:s@oî�ÎŒ·÷Gç\­Ö¯¬¦±y P±¶‹vÃåõ!s×óYÇÄ$‚sÏŸ³g““·i<þTÝ忺?:2ßÝ�rëšÜ—þSD"ŠC4x‘š˜jÚÃ[Š6vÝŒyc wéž(©Ët~te¿º?:ŠÎI%³‰åûì¹ÑþÏëK8ùA¬Éî.#¼†(íËÄùÞùû´¥ö�öZ>ÑþÏëPQ@ý£ýŸÖ�´³úÔPÿhÿgõ£íìþµ?Ú?ÙýhûGû?­AEOö�öZ>ÑþÏëPQ@ý£ýŸÖ�´³úÔPÿhÿgõ£íìþµ?Ú?ÙýhûGû?­AEOö�öZ>ÑþÏëPQ@ý£ýŸÖ�´³úÔPÿhÿgõ£íìþµ?Ú?ÙýhûGû?­AEOö�öZ>ÑþÏëPQ@ý£ýŸÖ�´³úÔPÿhÿgõ£íìþµ?Ú?ÙýhûGû?­AEOö�öZ>ÑþÏëPQ@ý£ýŸÖ�´³úÕ;©+YdO¼ªHã<ÕM"î{Ëf{€ÀÂmãó4¯ö�öZ>ÑþÏëTî%–$(cŸº¬?:z32ÊT‘Ê“œPŸ´³úÑö�öZçïo®á¾hã/€Wb Ï_›VÍOö�öZ‘\8Ȭk{‹·¿š)`ÙýÉ0~ðþµ§Þ?J±EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMO¸)ÔÔû‚€EPEPEPEPEPEPEPEPEPEPEP!›‚y¥ÜºJÞo­eÝk±Ûk#O6÷ D^c:BÌ0N>ô©¸ÿtþ”dÿtþ” äÏ>´Éfÿ   dÿtþ”n?Ý?¥:³µ­Fm3N{ˆ-�Ä‹Ñs€=Éí@÷îŸÒ�Çû§ô¨í¦ií’G‰¢r9Fê JßtÐ[æ*J„ÂùàUËù-YU!’f ¶Õ`ZÏÔ|H¶V·^D�çœã½nùOýßÖ�)ÿ»ú×3ŒKß²ý–Pû7}ïlâ¤o‡Ì02FUò8÷õäPEå?÷Z<§þïëU­îÌöiq‚7.í¹¨/õE²ÒdÔgDMØÎ3@Sÿwõ£ÊîþµÊKãeŠÞ9~É!.pw=@þ´ïøLÀ–â6³”49$oê §Êîþ´yOýßÖ¹¸|Z³[Ç2ÀÁ\ãæ“‡¹«V~ û^ -DL§ÉjÚòŸû¿­Sÿwõ¦îoïÎ�Íýãùм§þïëG”ÿÝýi»›ûÇó£sxþtï)ÿ»úÑå?÷ZnæþñüèÜßÞ?�;Êîþ´yOýßÖ›¹¿¼:PÍŸ¼:_)ÿ»úÑå?§ëUïp×J®Í°F[ ÄsŸj­ˆHÏæ(EÜzÝ?:¾Uk²ùRZ³GÊOÖ�)ý?Zä'ñŠD¯gŒ _¯§«6—ð]ß­¯Ù§Rz“pùg¦zQhwwüt:o)ý?Z<§ôýj‰Ó­Ïüöÿ¿Ïþ4ŸÙ–Çþ{ß÷ÿv‡w÷Á þSú~´yOéúÖöU©ÿžÿø'øÒdZùïÿ�ñTZŸw÷Á£å?§ëG–þŸ­fÿcYŸùøÿÀ™?øªoö%‘ÿŸ�ü “ÿЧj]ßÝÿZšžSú~´yOýßÖ¹ýKN‚ÆÓí6Ïp’£)ÜH{úŠé¥$GÁ¥8E%(»ÜI»Ù�ùOýßÖ�)ÿ»úÓw7÷�çR–>@9æ³(g”ÿÝýhòŸû¿­7sxþu1c䓚�Êîþ´yOýßÖ›¹¿¼:77÷�ç@òŸû¿­Sÿwõ¦îoïÎ�Íýãùм§þïëG”ÿÝýi»›ûÇó£sxþtï)ÿ»úÑå?÷Z#cæM,¬D‡“@ å?÷Z’$e~F8¨ãfó&¬¾>”ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€#žU‚ÞI›îÆ¥�Ð ×#*‰´¨õ­jæí£�”ǽÃB�£”ü¤q‚rk¯š%š"ºêTý s–×:E Ó52âî†Øf·‡Í�ƒ(ä8  tÙ¥°Õa²�y§ÝÆÒ[K#ne+ÕwwïÖ¬ø›TV‡s0�aœ¡XYˆa“ÀçÖ¡Ó­®¯uTÔ.-~ÇmoŽÖÜ€ž¬@éÇ«$³¹Ô4Ym-c$¬€’Ûv€À“ŸÂ€<êjÞe¾u6š?7}Ävîø ž™®ÛQ×ö^Zµ…ì.�m,¦C󀥃ê�C\´^Ö]åG·Œ0‘ËHÓKcä¨n8nÙ®ƒÄZ.«¬›Y-Û¬ÏÖo�Œ€+z ×Þ€!ДÈÈîm¡,ã HëW¼Øÿ»úQæÇýßÒ€(®�h¨ª° UäHÅJšt1¸tŠ0ãÍ[%ÀÁö¦ù±ÿwô y-ê?:<–õ�?Í�û¿¥*º3`/é@ù-ê?:<–õ�XÚ¾‚�«è(¿’Þ£ó£ÉoQùÕ�«è(Ú¾‚€+ù-ê?:'=EXÚ¾‚�«è(�Ô2´ë,Aä*CUqm:îÚ7Q¿¯éZ›WÐQµ}_>–±\ÝÑ�&žò6æ°µbrHëëÒ“ì3WVû”ä3�*ÚÚ¾‚�«è(æ]�¯äe‘¨ö·‡þþÿõ©?âeÿ>Ðÿßßþµjí_AFÕôù×ò¯ÇüÂæNu?ùõƒþÿõ©¹ÕçÒûýÿÖ­�«è(Ú¾‚Žuü«ñÿ1Ûµoùó·ÿ¿ÿýjMÚÇüù[ÿßÿþµmm_AFÕôý¢þUøÿ˜­æs×VºµüBÞKkx‘˜q6Húb·ä]É€E;jú 6¯ ¥:œÉ+Y JÅ%½GçRÌAr3Rm_AFÕô˜ÊþKz�Τ)û ¹©6¯ £jú ¯ä·¨üèò[Ô~ucjú 6¯   þKz�Î�%½GçV6¯ £jú ¯ä·¨üèò[Ô~ucjú ÃÖ|M§è—+»HË» ½]:s©.X+²'8ÁsIÙÉW‘Å,‘–|‚+–ÿ…�¤Ï)¿ïš?á`ióÊoûæº>£‰þFcõºÌŽ¡"!Á$qRÿúW/oã�&ææ89U¤` •ã&º€q�Ú±«F¥'jŠÆ´ê¦°wEVF�EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMO¸)ÔÔû‚€EPEPEPEPEPEPEPEPEPEPEPGÞo­RÔ Ô%–ÜØÝÇýðx÷n_oCWGÞo­cKâÝZ6»”ààU”ê| äJ¤añ;ñ%�Ýþ”#²‘’u‘Xm¹óXK£k¢æÑÌŽcTýâù§®OøÖ¿ü&Z'üýÿã¦�øL´OùûÿÇMiõZÿÈþâ>±Kù—ÞQ6¨RdŽI#f?+4¤ñëùâ·ô˜'¶Ó£Šå‹J½I9ÍgÂe¢Ïßþ:hÿ„ËDÿŸ¿ütÑõZÿÈþàúÅ/æ_y½E`ÿÂe¢Ïßþ:hÿ„ËDÿŸ¿ütÑõZÿÈþàúÅ/æ_y½E`ÿÂe¢Ïßþ:hÿ„ÇDÿŸ¿ütÑõZÿÈþàúÅ/æ_y·0v‰„lÈà‘œT6)qœku y@ù˜ Êÿ„ËDÿŸ¿ütÖ†›¬YjÊæÎa'—�ÜtÍL¨U‚¼¢Òô*5©ÉÚ2EÕïõ5Q¾ñúÕ�zðzÒRs²²4+QVv/÷(ؿܠ7ú…¨jÑŒmâ“bÿr€+SâÿX*m‹ýÊP¡NBPè¤Éþé£'û¦€ŠLŸîš2ºhh¤Éþé£'û¦€ŠLŸîš2ºhh¤Éþé£'û¦€ŠLŸîš2ºhh¤Éþé£'û¦€ŠLŸîš2ºhh¤Éþé£'û¦€ŠLŸîš2ºhh¤Éþé£'û¦€ŠLŸîš2ºhh¤Éþé£'û¦€)-´ÃT2—o'nGÍßÓ•ÂøÚHáñU¼’Œ¢Æ èù?Ý5F÷HÓõW»³IYFa]X:ñ¡SžKKøš.¬9c¹æ©iï3fØêù;÷4‰¨Ø,q�VÉ]œãë^‹ÿ¶‰ÿ@È¿*?áÑ?èå^—ö޴ލÖî�5{«{­kO{tˆî¯by~•—‡4x%YcÓ¢WS•8èkS9qÆ8®,n*ùTVîuápò£ÍÌ÷EWÖQEQEQEQEQEQEQEQEQEQEQEQEQE5ÝcFw8U’{ É(Ò·�y[JAÿÇjþ¢3¦]�ÿ<_ÿA5•¤ëÚðÑðø¸-p&i¶ô\ƹ1ØÚ0ò„%víß¹Ó„ÂÖ…e)- õïõ4´‹ßêikçOh)7ÜSe%ar:€kÊ'ÔîZâBn_;�ñìÂa"öv±ÅŒÆ,5®¯sÖA¡Í-yf—â «Ñ!•ž?âV=EzM…ü�ªÏ†SרÒÅ`ç‡ßTLu,j7º­µµÆ�l"•ÂlŒýMzÍaVŒé;HÖ#?„(¢ŠÈÐ(®yïõ´¾'…Q\€¬9Å[þÖîÃÿ}Ÿð¯>9�ÚnÖît<4ÖÚšÔU =M.£íGÝ€ÎjýuÒ­N´y©»£AÅÙ…QZ’V.¥y{ï—ÑÆ�AùÇSK«2ƆqÔ†#?¥p<ÆŒfá-,oõy8©.¦Í™®­6ÉB*ã!•³Z@†Ž†ºhâ)VW¦îg8J´Ó÷ÇÒ�M?|}+bQEQEQEQEQEQEQEQEQEQEQEQEQEQEV&§áM3V›Ì¹ûRôù!¹x×#¡Ú¤ ÖÝKNÒ­´¸Œp_';¦•¤o͉4ûí>ßR€Ct¬ñg%C×jÕ‹ÿ®’gžSl?|�ÆÍ£n:qEï…´½E­Úî9f0F#Rò±$$ç“‘œšÚ¢€1-|)¤Yj1_ÛÀÉq—æ1É)°ç'Óð·EQEQEQEQEQEQEQESSî u5>à QEQEQEQEQEQEQEQEQEQEQEÑ÷›ëN¦�¼ßZu2G(¹½Eç· ©ÙC g’ž‡ó üöô¢vÏ Sü”ô?�¥IEPEPEP/©¥¤^ÿSK@ÏÿòºkÇÑ]¸ÜdY0 S^Ç8&Þ@:•5᫨ÞiÒÞ@‘:³¹•äsڽ̚.J|»èx™½“‡6ÚšIa,nër¤`G­v¿Ÿ~“?ýt¯5¶Õï-¢š ²:J¤Ã8Ïq^‹ðÝ$]f‘CIÆáÖºóHJ8gÍݹc‹Ä.^Ìí(¢ŠùƒéB¸O¾ÛË_÷ó®î¼ÿâÈ.­QŠí# w®<ðéå <\SóüŒä„yIæZA’ üó`ŸÃ4–B¼Oh�—Ì^‡ ã5…su%Ì¢C‹ò…Àƒsë,ž ² ’H ã ¯3NqIuGÓÔ ãJR“èÿ­Ïc¢Š+éO… Áñü‹—?îÖõaø²7“Ã×*ŠXíè(0Å+ÑŸ£<ßN¶Š[51ÁÄÄá–I6í�C©Û<¹²ŽÏÍîÏëU­®RÝH’ÈJÞ­‘Š}ÍûOoäGkå&rBääÔ åNÏëËõ=[œønÏýÊÚ¬ £GáË5u*Û:Ø«>ë ¥z ¬íz?;E¹�Õ­hÔsÄ&…£=UB\²LÖJñhñ‹ý,î8ZßKrOîÉú ö)|0Óήî¡çjŸ½õâ©]x#ÏT :£+ïgòúW±ý¡ ZÇšðRn÷<ÃFÒ¥Mjͼ§âU?wÞ¾�®bÛÂÃr“àT’ ê=«§® ^!Vi¥±×†¢é&› (¢¹“Ž»oô¹Þ5úعÐf–áäI�+àŠ‹þÛ�ùïäkâ*嘷RMC¯‘ëF½+-JºsgPƒýêë«ÏC–Þî9^e!pZܯ&ÃÕ¡JJª³lâÅN3’åaEW°s޸ؿîŠÌß]§¤I{p%ŽU^0AKþÛ�ùïäkã±Ùv*x‰ÊºoÈôéV¦ “f`~k³ƒþ=ãÿtVðìù�1ô5ÐÆ»#TÎp1^–K„¯BSuckØÃRK•ަŸ¾>”êiûãé^ùÆ:Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ŠGܶ[p ®MWÅÚ—ïm_EÓâVtÙ%Û31O¼rbé�jk@ÔõÉ¯ŽŸªC`æ(D­umpÍ¿wݘÀýkK]¿¹ÓìRKD‰¦’d‰|Üí�SŠÓ¢¸i¼]¨-½Ô�]é3É2˱RQ¼ $€zv­MWÅ&Âî;U�ùvÓI,‡å $¥äœÐKEqþñ•Ϊ-šUË¥ôÓkˆš-žJ¹�_w W?(çµ^°ñ åÖ³=¤ÚkÃnD†Þc,GýYÙ&à²Ã�2ñ`�Œ�ŠŠÂð¾³{¬éWšdöÍ-¬r™™£)#2‚v…rÀç�8­Ú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)©÷:šŸpP¨¢Š(¢Š(¢¡žê` ²ÏAÞšMè„Ú[“QT¿µ¬¿ç©ÿ¾OøQý­eÿ=Oýò«Ùϳ<{—hª_ÚÖ_óÔÿß'ü*Ì7\&èœ0¤á%«@¥³$¢Š*J (¢€ (¢€ (¢€ (¢€ (¢€>ó}iÔÑ÷›ëN »„4Ï=} :DÞ¸Î*?³ŸïP¼õô4 Ôž†›ösýêQ?z€&¢Š(¢Š(¢Š(¿ÔÒÒ/©¥  ¶¯o£Z‹‹�å Ni#¸²¸ŒK䃻%qš»,1N›%�]}dT2Æë� k·éYÚ§=ÓÐѺ|‰[ÞîEºÏþ}×þøb #`V5Úlb¡ >FcL}[U Ðô¥Ìì-Q@WžXCl•7cÔf¬SRB‚Øã"€*o³ÿž ÿ| rMl�”ˆ)õ (Ùqÿ<Óò4(p|ÄPsÇXwdÔQE ÊÕ5Ë=6æk•vy³´ÈükV«Ý[¤À1…ס`* âŸ¼®DÔš÷]™R ôû˜e¶]®22‚¤Íˆÿ—dÿ¾9c™T(‰.Éÿç’~B¡yŽ1Ñ_rÌN�(0¾˜§ÓPaÀ¾)ÔÊ (¢€+ý²?Fü¨ûl~�ùS¦C�墓žx¨vOÿ<“ò4w)+mPsïSSPv€ØçŸ@Q@5ÜjÅHl�jO¶Çèß•$›ÿw‘ê@¨ö\Ï4ü…J—HîÉö©ê¼ bdE„ ±@Q@Ip‘6Ö>Ô϶Çèß•>ub ¢©>â Ùqÿ<Óò'Û#ôoʬ‘š«M¼o�6÷àUª)§ï�¥:š~øúP¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¨êZņ’Š÷·+ïº9$ýæª1”�¢®Å)(«·bõÏÂqáÿùýoûòÿáGü'ÿŸÖÿ¿/þ·Õ1Èþæeõš?ξ󡢹ïøNœ×uEs>Û6«s<Sm´P,’FSyQصoÅ+9Ó!{{i.;˜ÜÇ2@>üVÝæ—šn¥“rŸ`ÕfX¬®"‚"‘¦EÆN“Ò´üKáù縵Õ7™mÄv°\Ù 0È‹)b~˜cÆk¸¢€8�ÞòÃ[}N}6H4ë—0YÀ‹—µÀ³:�ò‡`;ûej:^¬u ¯_Jº]>iâýÊJ<à`Ò#'ƒ€O#¯>Þ—ErÞµš†¥VVB8Ü8À|íÉ88®¦Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦§Üêj}Á@¢Š(¢Š(®kUbÚŒ€ž~UÒ×3ªÈJo¨þBºp¿0Ä|%:(©0‘å�Îzjï¹ÈGZ:+zT œŠÎ­ þ?Çû¦³«ð2©üh訢ŠòÏ@(¢Š(¢Š(¢Š(¢Š(¢ŠhûÍõ¤y07f”}æúÕ{ÄgÙ´Œô  >Õ÷¿J>Õ÷¿J£äÉýÆü¨òdþã~T{íQ{ô£íQ{ôª>LŸÜoÊ�&Oî7å@¾Õ÷¿J>Õ÷¿J£äÉýÆü¨òdþã~T¤’,ƒ*r)Õ^Ñ#;�5b€ (¢€{ýM-"÷úšZ(¢™æ¯­>ŠbȬp4ú(¢Š(¢³µ]sOÑV6¾œGæ}ÑŒ“M&ôBm-Y£Es_ðžxþýðk¢†hî!Ibpñ¸Ê²œ‚)¸µº’{1ôQEIAE×u�Ü€ª2Ií@¢¹ÇñÖ€ŽTÞr8CWô¯éšË:Ù\‰:©5NZ´Jœ[²f¥QRPQEQEQEQEQEQEQEQEQESOßJu4ýñô QEQEQEQEQEQEW‘xÚi$ñUÚ»±„Uƒh?ÌšõÚñÿÿÈÛõOýk×É—ïß§ê�74þ õÿ3Š*×Ù’KO:,è?z„r¾ãÚ¾‘´·<4›Ø«]gÃé�§«QEñ§Ó…Q@Q@Q@Q@Q@SÃ9o*XäØv¶Æiô5%T"îݼœL‡ÎÿU†ûýøõ©¨¢™±ÏK «Æã*Êr§ÐEPEPEPEPEPEPEPMO¸)ÔÔû‚€EPEP\Ωÿ!)¾£ù é«›Õ£dÔˆá°Aü+§ ñ˜b>�<ɹ°É 2Šï9´4oøÿîšÏ­-67…ÀùUH&³«ð2éühè(¢ŠòÎð¢Š(¢Š(¢Š(¢Š(¢Š(£ï7Ö�My¾´ê)2=EEqü5\Èõ¹µJ�úÅúк(¢€ (¢€ (¢€{ýM-"÷úšZC÷OÒ²nn~Ïm$Ø-±s�Þµ›îŸ¥rº´×Ûeº+o;[qÆbéEJi2];V¹žëeÍ“Àe =k¡‚_53ŽErñ [SóšáZ ¸HÀèk¡ÓÛtmõ¥í©uÜ“…¶éÔ¹ES1 òÿŠòùwzº7ó¯P¯ øÑ7•y¥óÖ7þbµ¢í4eY^ âZG,…F<685ÛøÅòÚêpi/ºKk‡ €ÿOj¥¤êz:xÕŠ2ø_âÎOOzæ”êiûãé@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯ñŸü�·ÿTÿн‚¼“ÇÒÃ⋉]HI‚²ÄùŠõ²f•wéú£ÎÌ×îW¯ùœåX7;mD.Íßë»{}*½ô­'¹á'`®£Àò3¯ýqé\½ußm¥}y®Ÿ*8˜3vÉé\Øæ–wìo„W¯SÔ(¢ŠøÓéŠ( Š( Š( Š( ¸«ŸÞÞÝ�66´µM$;�‰’ q–=«µªwºe�ý¼ÐÍ2�ÌúçÖ€2<5¥ )¥—í¶Ó²F e¶àqüOÏßõ­ rx¡²Yî Vly–ÊKÈU] A“I�å’xÛ÷BHSb•†oV÷­NÉõ6¶K¹­ƒ‘½áÀb½ÔÙõЗY* o ƒ«)·-ç(Fý×ÈGËǯ½ãKxïcÓ®-ažWeùØ¿f8È$`ä÷Ó]xjÆ}* L–ÂÜî‚Xœ‡�½sßñëV/tx/ má É@¢v@N}qÒ€<óÀ0YKâÂâXÊ®W ²dc21^©Xú?†tÝÆÖÞÞÎaó;wcîO5±@Q@Q@Q@Q@Q@Q@Q@5>à§SSî uQ@Q@2Xc™q"âŸE Ø ßÙöŸóÙöŸóY¢«ž]Éå�b·ö}§üû§åSGD»cP£ÐSè¤äÞìj)lQE!…Q@Q@Q@Q@Q@ y¾´êhûÍõ§P@=E&ÕôÌW8¨¼Çþñ  ;WÐQ´«y�ýãJ’1p   4QEQEQE"÷úšZEïõ4´„dXϧNX� ŠÙ|ì;z㊪^èuô¢àf®—2¶Dc9ÏZÓ±�àˆ‡êNi¾eÏ·éSBf9óGÒ�ÀšŠ(¤^yñ7Á�‹Æm:HÃÀY\ã ÷¯C¨&3‡ýØi§gt&®¬Ï?¼TT)k|ƒÍ­Ÿ ü*×t¿ØßÞÉÁo(‘¶¾IÇjö2çÛô¥ t{ ¯i"U4[¢Š* ­¨[Í:æÙ[i–6@}2*Í6MÛϽڀ>“àïŠw1InFNÌÆEGÿ sŶß÷ò½ì½ÐêéI¾çÛô­=¤ŒýœL�èðž�têó),ÅzMtu&R§Íö©k6îh•‚Š( Š( Š( ¼‰åØ(õ&˜·0;YP“ØÍñ~mœjIxÎ+;[œ:Opt#äâ³)P­ìì­¦îÇ],à QEQEQEQEQEQEQEQEQEQEQEÑ÷›ëN¦�¼ßZu5�?Zo’ž”K!L`u¨üöô'’ž”¢%S�*/=½9f%€ s@QEQEQE‹ßêii¿ÔÒÐQK”‚XŒzT´Paf ƒ¹ªÍPEPHÃr•õ¥¢€+}�¾Õ,Q�“ŸZ’Š(¢Š(¢Š†[u•÷#éM[EVsqV( Š( Š( Š( Š+[ñ¾ŒŠL“7ÝŒ~&“i+²e%yk§kþõs»ªµÏ‹žõ+‹Q'!”ž”àဠäøìîÿYçèÑèà+S«NÑ{î£uCº�Õã\áó—›è+v°<8róýo×Ûäÿîqùþg•Šþ+<ë⎿á¶�J±›f£uŒ¸òSûß_Jm‡ÄÛhtè ‹MÖu)c@­8¶ÆóÜ×EâßéÞ+µrù7‘ó Ê™o¨ö«ú �æ—¡C«uÅÄJwÌ©´:~•êç.>(ÀœÜxwZ‰½ö|ÕË?Š>¹p’^Ii!ãmÌE?úÕŸwñ:>c§x~ÿQ°�ŠËwüƒqÇ5ÑYxÇHŽõ--îmå$ŒeOp} lZ_Z_Â%´¹ŠxÏF�ÃÒ¬W}ðÒi ߆u �&ìr´mìV¶<'{âIEŧˆ¬cŽH u|³P(¦¦Ÿ¾>”êiûãé@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ž£«ÙéOj/$1%Ì¢��”9€Ç¶qŒúÕêå<¤^ø‡B�E²… »�“¸â_˜¿×Œ­t:e�ÓtËk!4³#XüÉ[,ØI  "EI#ª"Œ³1À°m¼Le¾ýí“æJþ]µó7Ë#{�áSØ÷­]GL´ÕmÖÞö/6áÌd�¬AÈÈî=�bÁ w.Õ¬æŒ=«YĦ&Lr1Šé‚©bpɪ&¨šÖ‘o¨$~X˜³9Ç8ë�Y:”‹§YAá­9 ̱ì@"Þ,à»ÏN€w£I·_ LºQ@ºlÍ›Y³Â¹ûÈÞ™9 þÓQEQEQEQEQEQEQEQEQESSî u5>à QEQEQEQEQEQEQEQEQEQEQEÑ÷›ëN¦�¼ßZl³,XÝž}(d�~9Æ*?³Ÿï~”Ÿl�Ñ¿*>Ù£~T¿g?Þý)V¬î”ß¶Gèß•l�Ñ¿*±EWûd~�ùQöÈýò  S#•e\®}QE"÷úšZEïõ4´QEQEQEQEQEQEQEQEQEQEQEWœø­|¯—ºF’PTŒ�­z5RÔ´›MVÔyÇÝaÁ�Hó+# E'RG�kØÊ�ˆ!o3Ë\7™�=±Šít=&ì{cs™Jäç­Cká.ÂQ<†Ivœ€ç�[¢æ0�¥d°ñ–µda©Ô§'6í~Ä?ÙV?óî´eXÿϺÔßj‡ûߥj‡ûߥ?ªÐþE÷#·ÚO» xm”¬1„Ò¥¦$©&vâŸ[Æ**ÑVD¶Þ¬*ž­l÷šEÝ´lU䉕HìH«”SÄü0š)|º{F«=œ�o:cø³Ôýj‡ƒ™¼?ã�gÃoòÁ1û]¨íƒÔ uŽ|3ñVæÌ�¶zÔ^l~žjõÿ>õÅ(®´yôÏ骿j³“Ë|Ž[×Û4éTW“j—><Ð4(üM&³â`<¶B±TûûSçÛxxx¯ûr)€A;X$#g—韥zµ4ýñô¯,¶ñÄ cGoÙ¦Ÿ‚)‘-Üò(ëÍwþÖáñ‰i©Â6‰“,¹û­Ü~€5¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)¢4(v,'ñ§Q@ �»vqŒÒÑEQEQEQEQEQEQEQEQEQEÔû‚�MO¸(ÔQEQEQEQEQEQEQEQEQEQEQE4}æúÔQ<›vŒâ§y¾´êÎû4ßÜýhû4ßÜýk@�:œRo_ï ¡öi¿¹úÑöi¿¹úÕýëýáJIÀ"€3þÍ7÷?Z>Í7÷?ZÑ¢€ µ�£B`“SÑEQE"÷úšZEïõ4´QEQEQEQEQEQEQEQEQEQEQEQEÉc¦ÒqT„eÿ*Ò¨ ¤DçŸÎ€*bWü¨Ä¯ùU¿±ÅïùÑö8½ÿ:-‘U7)$7­OMD Uè)ÔQEÃüL°�è¶úͪÿ¥is¬ê@çoñ~•µ{ ¿‹¼"º;Ûl¯±#�Ö¯ÞËayo=Œ×5 2çÚ¹?†·moo¨xzv̺låS=ã= '‚eÿ�gÑoÆf¶g2Ÿn§ü=Žå¼5w¡êPH¤�n ©Ó¶=x®Î ;kV‘­àŽ&‘·9E±õ>µ5qÞÒ5-N¾ÒµqkÃý•‹º3íY¾/ ø§[𼧤†æ×?ÜoJô:óï)Ñà§SSî uQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ y¾´êhûÍõ§P3’6àÔ;�©«l¡ºŒÓ|¤þè  Û�©§FÇxäõ©ü¤þ襨9€EPEPEP/©¥¦ ÜãÍ.[ÕhÔSrÞ«F[ÕhÔS~oQGÏê(ÔS~QGÏê(ÔS~QGÏê(ÔS~QGÏê(ÔS~QGÏê(ÔS~QGÏê(ÔS~QGÏê(ÔS~QGÏê(ÔS~QGÏê(ÔS~QGÏê(ÔS~QGÏê(ÔS~QGÏê(ÔS~QGÏê(ÔS~QGÏê(ÔS~QGÏê(ÕÂëÞÕm5¦×ü-p�ÝÉÿÒ}É¿úõÜ|þ¢�ŸÔP¤øýÒþ=3Äš{éw�Â;s‡Ø×r r cx�öž$Ò¥³»�I#1ÈÌ�؃\&“¨|Bûö-¶�½³¾ßr~ðø OžâX̓ʑ êÎÀ âõ¯ˆºù¶6k6©;¡C²n ŒŠ}Q@Q@Q@Q@Q@5>à§SSî uQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ y¾´êi9hËz΀E7-è?:2Þƒó QMËzÎŒ· üèÔSrÞƒó£-è?:uÜ· üèËz΀E7-è?:2Þƒó ?êßñªµhnà~t`ÿq:«EZÁþâþt`ÿq:#ÿV)ôß›û£ó£-è?:uÜ· üèËz΀E7-è?:2Þƒó QMËzÎŒ· üèÔSrÞƒó£-è?:uÜ· üèËz΀E7-è?:2Þƒó QMËzÎŒ· üèÔSrÞƒó£-è?:uÜ· üèËz΀E7-è?:2Þƒó QMËzÎŒ· üèÔSrÞƒó£-è?:uÜ· üèËz΀E7-è?:2Þƒó QMËzÎŒ· üèÔSrÞƒó£-è?:u7øÇÒŒ· üé@ç'­-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@p¿4ûÝ^ÃL°Ò£“ûEîÕá�A¼³íÅwTPQOŒ\ÏçΈ’ãÛœV'�.ÚÛ@¤RJ÷WÀ0 `[$r@ä98æº*†êÒÚöÝ­îíâžûÑÊ�”ýAâ€8¦Óå7%†�â·k�rÖ¢K†@r|Ýã‘Ð6+_Á·-.Ÿ{jÐM Z^K—6ÝÊ ÞÚJœ ž•gþß ÿз£ÿà _üMjYØÚiöëoek´ Ò8c£ðPñ ›ùôË mþÛ$¡£G¼ž7#ç  ãûïÂûÕ/ êW–š�„R,QÃz›d{»§’iÈ,Ù]v]§*�W}5…�Ç�çZÂædòå,€—_B{ŽMXÚAi¬V°Gm8R00r0: ‘@Y5”3ÝjvöWVˆÓ^ †;kÏ´C ;JU 1.yé€F3[šjÝGáÍa�ù¹»¸7¤ŒLr4eƒFFÚ¹çÔ×plmLðÏöh¼ØŸ`Êë�LÕWÐ4iMÉ“H°´�gÝl‡ÍÇ?77ã@Oöbm ŽÚË[iÚ%ÔNÅ,»Ù” †23ÁÈõ÷õoÇ ^±í9ˆÂ¥|ù ¿Nä“ùg_þß ÿз£ÿà _üMiÙXYé¶âÞÆÒ XÈŠÂ(?AÅX¢Š(¢Š(¢Š(¢Š(¢Š(¦§Üêj}Á@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦§Üêj}Á@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®sž'ÿ„R ;éáó,^aÃŽ±ƒÑ‡¯5ÑÖ‰<5‰¾Åä‡ìPKæËëHè ôÍl[\ÅymÌ)T20î VÖoŽ›¤\Ý& ˆ˜Œ7Bç…ñ"®GCÇ…DU@à Äñf™yªé “ë:Jʬº©Î<œûP)%æ®uO³¶«¨,†q…d@ç'Õ|²6¿{8®ÛBÔRÒ"žPÀ´r…èIVýA®oì:÷üòÖÿðgÿZþÓo´ÛKÁ|Ï™îZdI; g,8$œž=h/ÅÚö§¥ßÆšh2«¾G“ �Ç ž:U+Ÿ jFööâÒÂ+hüÙ%…U†öo)bSžÙ̇š±e j6úV·`l%0O %¼-r¤î%÷�ücªœP:ø³Wvk£s~¹�ä�8ìQ¸íç<äÍz.�zÚŽ‘ktñÉÉ–!CœsÁí^rÞñ$ÐÃÅ¥Ô�Æl7Ñà˜Àã¦à z†/SF¶�P‡Êº�8Þ8r8  (¢€ (¢€ (¢€ (¢€ (¢€ j}ÁN¦§Üê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¬�FY–ë˜(n(^ŠŠÙ�­£2}â9¬Ëùf[¢0Q÷q@TVìín…þñ×’øÛRÕ#ñ-ÌFâx¡BA¨#x _¢¾~þÔÔ?çúëþÿ7ø×iðæÿR¸ÕæŠY¦–ÛÊ%‹±`·'ñ M¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦§Üêj}Á@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤*­Ôõ´PHUOPÔRÑ@E-­¼ä ŠB;ºüêZ(·öu�üùÛÿߥÿ –+x`Cqƒ×b�üªJ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦DWTgPÍ÷A<Ÿ¥:¸¿‰’M‡­žÀÊ5oµÇö(eŒ½ÇÓnìûWU¦Ó¦[DF/ kçþèlsŠ}Ýå½…³\]J±B½]º Î>)ÑÉ¿LºßáPxÇgü#ïæ¶ØüÔÜÞƒ<šóéîîE£-Ô·^KÈÍ9‘F>Í‚"mݲqïŠõí Oô߯úOú®¿?¨mµ­2îv‚èe‘£òüÀ°ë�Ô× «i³_Á£�ku-»Y„•¾Ò±BF>éÉÈÉÁ$Ò«ø]f¶¿Ó¤ŽØ4R³}š)!ÙcøŒo¸œãûßjõ*(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ j}ÁN¦§Üê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ÐÆò$�³¦J1¯n)ôQ@ïl`Ô-Œ Z2Cc8är*ý&×Q³’ÚQ$qÈs ˜Ù€ìJàãÚ¯Q@çBÒŒÑLöï,J©ºe Ðj¥—„´�>âÞ{he€’Œecׯâ¶è Š( Š( Š( Š( Š( Š( Š( Š( Š( šŸpS©©÷:Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ñ³w©ê³™eq9TŒY>cÿ}¿:–ûþ?îë«3PWÜR„c¢´>N¤œ¤Ûc¼Çþû~ty�ýöüéÖð=ÍÌVñã|®sÓ$â˜À«=AÅ^—±:î/˜ÿßoÎ�1ÿ¾ß�Kgi5õÒ[À»��~€w$ö֭ˤ0�Ì mv‰lcr œz‚ÀRç»2”$ÕÑŸæ?÷Ûó£Ìï·çZQèÍ4·qÇ:—·�¦Ò‡-Î>¾•jï·vö_iYÂǽ×cƒ×ež*zI¤ÙJ•F®‘‡æ?÷Ûó£Ìï·ç[²xRõ`ŽU<2�Û¢“ž~ðR1Œsš¢ÚCï�Ræ ²ò»†Ò:çpF½)lÁÒ¨·E1ÿ¾ß�cÿ}¿:Ø>•DŽÓƱ„fVb�{óÇ­TƒJ’å¦òçƒË‡ndf*§=1‘ŸÒš­M«¦'NkFŠ^cÿ}¿:<Çþû~u¬tÓG 7¶¯#áJ—ÁéҪŧ‡�IZ=ÎTþèžq޼ð}(U`öNh§æ?÷Ûó£Ìï·çZé�­´òÅv]¡PŹ€ïõ¬Ú¸Ê2Ø™EÇs£ð†±we®[[¬®ÐO �ã'#ž3õ¯[¯ð÷üŒzoý|Çÿ¡ öÊùÜæUbÒÝÖY&é´ú0¢Š+Ç=0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢²Ý»Ûo¦x¬¾ªùÔ¹‹úÂåå±×Ù9“Gµu·Ëa[ F>a„b õÍWÔ¿¶ôøßý[bBŒ€rsŸáSùŠåË$�:{Q½²ã‘À9éMaR“•ûþ ñV·c·‘ ktž$•“”ˆ>àM¬ 7â+#̾‹T3-”’n�H@ŠGc…\)ü+M(`ÂG 81Ȥwi³±f=I94C ËtÝÂUùºXéæIíb m§^–¸MîMë»ÝJàŸÖ¡·¸ŽßM°idò÷G2çæ—ÿgšç)K1P¥‰ ÏJ¯«éfÿ­}IöúÝ#£»š;�:êHNøã´H™ÆìnóAÆ[“Á®n�½¶lÜvç;sÅ6µ¥OÙ¦ŒêO�¦ix{þF=7þ¾cÿÐ…{ex§‡A>$Óp3þ�‡õíuàç_Ä�¡ìe½BŠ(¯õŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( wÆ: lj´Èt””Ci4Ênßø¼±ÎÜ�+jÆÊ 6 +TÙÐ ±Ebø§LþÔÑ&…˜ìU,Ñ…Ï™�Àüë�´Ñ.¾Õanö³Ûƒ´Dª›– Ëäd“ÓÚ½&Šàµ›(ç]%õ+ ÍÔD ¼´w £ 2íùCg§z¥¥[Guâ;Io-¯WÊ‹kNñÈI7eNîÊïêkÒ¨ Š( Š( Š( Š( Š( Š( Š( Š( Š( šŸpS©©÷:Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( [Xð=–«x×I3ÛHç/µAú⳿áZÁÿA9?ïÐÿÈcñ0ŠŒg¢ô9¥ƒ¡'w…ÿ…kýäÿ¿Cühÿ…kýäÿ¿Cükº¢«ûKüÿ‚ÿ"~£‡þ_ÌááZÁÿA9?ïÐÿ?áZÁÿA9?ïÐÿûKüÿ‚ÿ úŽù3…ÿ…kýäÿ¿Cühÿ…kýäÿ¿Cükº¢�í,Wóþ üƒê8åüÎþ¬ô“þýñ£þ¬ô“þýñ®êŠ?´±_Ïø/ò¨áÿ—ó8_øV°ÐNOûô?Æ�øV°ÐNOûô?Æ»ª(þÒÅ?à¿È>£‡þ_ÌááZÁÿA9?ïÐÿ?áZÁÿA9?ïÐÿûKüÿ‚ÿ úŽù3…ÿ…kýäÿ¿Cühÿ…kýäÿ¿Cükº¢�í,Wóþ üƒê8åüÎoBðm–‹söŸ5î'u˜`/áë]%W-ZÓ«.jŽìè§N×,�QE™aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMO¸)ÔÔû‚€EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPLFP£æ�>š€lPï_ïÎ�ëýáùÒàzQ�é@ ½¼?:7¯÷‡çK�éF¥&õþðüèÞ¿Þ�.¥”›×ûÃó£zÿx~t¸”`zPo_ïÎ�ëýáùÒàzQ�é@ ½¼?:7¯÷‡çK�éF¥&õþðüèÞ¿Þ�.¥”›×ûÃó£zÿx~t¸”`zPo_ïÎ�ëýáùÒàzQ�é@ ½¼?:7¯÷‡çK�éF¥&õþðüèÞ¿Þ�.¥”›×ûÃó£zÿx~t¸”`zPo_ïÎ�ëýáùÒàzQ�é@ ½¼?:7¯÷‡çK�éF¥&õþðüèÞ¿Þ�.¥”›×ûÃó£zÿx~t¸”`zPo_ïÎ�ëýáùÒàzQ�é@ ½¼?:7¯÷‡çK�éF¥&õþðüèÞ¿Þ�.¥”›×ûÃó£zÿx~t¸”`zPo_ïÎ�ëýáùÒàzQ�é@ ½¼?:7¯÷‡çK�éF¥&õþðüèÞ¿Þ�.¥”›×ûÃó£zÿx~t¸”`zPo_ïÎ�ëýáùÒàzQ�é@ ½¼?:7¯÷‡çK�éF¥&õþðüèÞ¿Þ�.¥”›×ûÃó£zÿx~t¸”`zPo_ïÎ�ëýáùÒàzQ�é@ ½¼?:7¯÷‡çK�éF¥&õþðüèÞ¿Þ�.¥”›×ûÃó£zÿx~t¸”`zPo_ïÎ�ëýáùÒàzQ�é@ ½¼?:7¯÷‡çK�éF¥&õþðüèÞ¿Þ�.¥”›×ûÃó£zÿx~t¸”`zPo_ïÎ�ëýáùÒàzQ�é@ ½¼?:7¯÷‡çK�éF¥&õþðüèÞ¿Þ�.¥”›×ûÃó£zÿx~t¸”`zPo_ïÎ�ëýáùÒàzQ�é@ ½¼?:7¯÷‡çK�éF¥&õþðüèÞ¿Þ�.¥”›×ûÃó£zÿx~t¸”`zPo_ïÎ�ëýáùÒàzQ�é@ ½¼?:7¯÷‡çK�éF¥&õþðüèÞ¿Þ�.¥”›×ûÃó£zÿx~t¸”`zPo_ïÎ�ëýáùÒàzQ�é@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5>à§SSî uQ@wZ¥Å•ô1ÜYk4¢%�%ÉýÜ®SÇSVµ BÛL´k›©6 8PYØôUÉìc»_Ýk+%î�vööòÿ£xJÓÍlÉ’pN8Ïs[Ï RI�3ÆIFe®Fn( Ó^»Šá?µ­ã··¸`#dlù zG/£AÏLœz&£®]Yj2Z‹[aÛµÇÚ$�¾URÊ„=Øqš±§Bó[YcÊIx8aÃ"!øŽµ�¯Ø^‰åH#ŽÏìmgˆ4’ÅHÂ*à`¨œsÚ€-iýÞ£~må[xðNÇ*³(ÇÌ7;ÔGÄÒ™çO´i�ùr²™Ø7èÓmï£Ö šîÆHVS$»”‡ [�­�º@Ôs×Ö­±»ŽK ³ëQ¯Ú…·µ…“¯bÈOë@‹¨¶©§ –ò³½—1©Áê hÖ7†VEÒO™çn39ÌÊÏ=À~U³@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@RmgKF*Ú•˜`pA�r?Z»\‹ü:ÒÙ¾Ñz¹9ÀuÀÿÇkz£+ûY5èŒjʪ·³W:í½'þ‚v_øŸãGöÞ“ÿA;/üOñ®wþΑÿ?7ß÷Úñ4¹Ò?çæûþûOþ&º=žùßÜcÏŠþU÷�öÞ“ÿA;/üOñ£ûoIÿ �—þ'ø×;ÿ çHÿŸ›ïûí?øš?á\éóó}ÿ}§ÿG³Áÿ;ûƒŸü«ï&ñ�mtÅHì 7s8ÎU÷"ýqPøoÆßÚ×bÎòᙇÈÈNÓíƒX~ ð,Ö*’éK=ÔxùѰ\`È¥ð�…¯ÿµc½¼·’ÚN@�mf?CÍw{ Õ\“׿[ú¾×õ…´ü,zNôþòþtoOï/çQý�=Z�³§«W„zġԜ�-D E äñRÐEPV÷Ý[Çà QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU-GS¶Ó"G¸�(fÀ«µç~+vmuÕ˜•TA=+JPS•™%ËŸÿÙ endstream endobj 26 0 obj <> /Font <> /XObject <>>> /Type /Page>> endobj 27 0 obj <> stream xœ•S]K1|òöY0ÝÝ|ƒw½¶(ôA øD …*­þ}“ÜUÛ» Hw7Lvfgs{A€i]å‡×$<ïÄ^dÌ#Õ^ÄÓ%¼ ”hàS0¬Ó¾K{[¨«tª�Ã×a#fËHˆ¯b¶z$›�þ|,o!° âN\#’½‰[`Fé‚Kˆ]F)¡‹(î§~¢À‚0Äd³A©�%—l�Ô‰èDžœóY^1IôQÞufвâ*wÞ”‚$VW¸šÕom1þÝï+m¥P‰�Ô¡´ÅËÆ•T‰NLé–iŠ¢2Í¥ÆÌ Šþd.äyQá!Žê!ž£ÇÇÜ>ı‡>ÄsCˆã éUÔþ“ƒm¹âvêA·í¼RAûZÎÖPkk˜îý÷5؃&-ƒíÇÍNKŸç­ÙH²ù×�Ý®ÙC÷÷"¯/‡Ó- endstream endobj 30 0 obj [6 0 R /XYZ 90 752.9 0] endobj 31 0 obj [6 0 R /XYZ 111 689.6 0] endobj 32 0 obj [22 0 R /XYZ 111 769.9 0] endobj 33 0 obj [26 0 R /XYZ 111 769.9 0] endobj 8 0 obj <> endobj 9 0 obj <> stream xœ]”ËŠ1E÷þ -“Å`=KC«àEd’ðtËCÜnÚž…ÿ>ª«ai°á [U·Š’¶í¡;Ìç»Ø~_¯ãs¾‹ÓyžÖ|»¾­c/ùõ~~[–?ù’ç»�û½˜ò©¤ùr\¾/Ylõt˜Êñùþx*!ÿ?K¬ª•ñ:åÛrózœ_óf'Ë·»¡|ûMž§ÿΉjØËiü}\Y®u‘KiÕÔTŠLZs*#¥ª¤*i&ãXi{Ý�¼Ùê¨éA}j%“UÔ;�6 �@Ê�ª²  ˜˜œª(iPp•b¥–É·-“ŽC¥Ô §ï\¥P‰*¡Û¨gzÄE¥•P¶ä5¨7< ¥²DÃYTA¦”@JÃYØ™²®Å®•Ó}!ªÓUD\�”áêÊ»&m%ȇJ< $”ºƒ2Ô,¦f 1�¨ Èb:diâœF\“,(xP¥KP¦ª¤ªL„œd�35ä¦;A4X�áÞÉKôÞ8óg¦DSÒŠ¦Öò.i£Ñ_7pÚa‚^b‚:Þo%oˆN‰ëy \O÷Ä^|4ìEpæ83Ò!.i…r\Á¶<È�w×xÅqAõˆKDÄ+\(îÁ:ô%ú³ ½G‡ÞmJ<³H�gf;øŒ>�IÜmì£a? ±Ò¹¨p]e j,HÕËû~Kù—·F|¼ãÛº–çÞ~Îsþx³–ë"Jÿþ(C*| endstream endobj 34 0 obj <> endobj 10 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> stream xœì½ ¬dÙyßwÎ]kUo©z[÷{½½×ët÷,ýfŸž¥gçÌ�3$§¹9$G$.¢$J‘bÚ‰ed¢±ÈQ¢È–aD�#D”8²k±$J€,3Ž,Ž,K‚œØ˜œSïü§~õuõ�Š)‰Ë�žïUÝsÏúíßwνå¼s®í>ïr7üÔg>ü©ÓY~Ÿóïúr(í}ûKŸûÔ‹�çß¾ÿq€ÝO|òC/-}×sîÿ�ó/žåÛ?û¹ß|ìÃÿØ9¿®O¿òʇ_òôŽÿ)Ôýõ'ÃåË¿ûSÿúŸ„ï?àÊG?ñ=ù¯_ÿì\ößì:÷ÔïäSýöÿ“ÝqþúÕÐÇ�è»>»ëÖBMÿ®ß 3çþ{çæO\zÿÒ½èÚ‡?÷?¾ÿ?Óç믿þó~èâ|Wßhÿ~ùõŸ�_Âýß ÷SOúï�XòŽŽÿwyZ�Mÿö¦ƒþ¸ºpaVî17vŸ³ú¼+tÜoø¢ëº;Ý(Üë¨ByËý`€«n>«ðïùiùçÝJ€vú^¥ÏÊÛ]uKÓ¶?èêesÙý|˜ÑO†q4\ÿh¨ÿ“áþ�øB¸þÉpï‹¡Ÿ·øP ÞOˆå??½Wè¤z±Ýá8_}Þ«Ý?JŸ¾à17×[O??PñØë¯‡y´¦ÜñéÔGü|lz]Ö™âÀMë<ÆúâOqþõ´,®óíáóC©]Äã§Ãç�†¶ŸžB¼W…:í€Óµðq)}O€ç¼;Àr€G|<Àµ�&xð‘Åõ#©î5´Ñ½¡üÜÿ®-¨ýRû�%øŽ§Üàî·¸’æ¿àl€w¦:ñûZ€SΧëXçöÔî2ÊbýíÇR¿x0À“ž ð|€û0§8¿‡Üà±Ïx<ÀmžpW€·¤~â\He·§ïÜŸàÑ4—XÞK×§Ü–`5Íó\*(•ߙڞOp:]÷S_ûޤq"žZi>oIó�ë{!�ù¶TÿyÌíZ¢mÄ×Õ´ÖRÙsi­�¤õ<Œ{G>ïM÷žJ¸;ƒ±>�ðåàå?à–ŸO´‹}n¦µ¬(|8®Óýô´l9�u2@;áà]‰V§SÛHã�Ô~)À$Ý‹ý¯¤yÄú;ޏ˜>ãœ|jw)ÍóóI¸œÖ|:áÍ¥¾.ƒnß`œè&Ú]NsøÊ?�ès4µ�$ú�M×gœ3ÐKs�¼±›ÖX~•�}�!Òb?Á)|žNŸ§ŽÇés”豜贖>‡‰¶Âó÷øT€A‚Ï¥ë^]O‚O'°ôú“Þ·`ë=ÂÇÓ>žÀ®ïORþÕÀ÷›ï‘>>Á×b=ÿÐÊr„ãvزÈ?}ÜW�ÇÄ~£ÜFY‹:-ÊN”÷(sÿ¶?´Q¾¢üF™Žv(Êøgý¡Œ|z%Õå/$ˆõ£®=ð‡6&Êø ꘨vÒØñú­þPÏ_L×çSÝ^šs¬·åuklå(ê÷3 ?q¾k~¦+º E€<­/Êéj*;šÖq*Ñ-Oý´NöRëi(³“ô½J×ej»”>{©¬H°‚ïR›AªgÂO�îŹ=œÖz!áütêw+áD6 Žs2õmØ�ûyû4I}Åïw¤õF¼ Óú6R?eú¾”ÖÜO×±ü–4ÿ.ð#è&d©_Ùß^ZGÄÑí‰Æ­4Ÿ2Ñï΄ƒNjs4­Mz9Oå›i¬í„?ŸêÔ ÿÛiÞ«i>¦9�NŸ§Ò'Ó}áãTÂm‘îÅë+iêëLºçy�hqóhÂK”«siÞñÞñ4îÅÔö|Âç‰4î=é~Äù­i}w§¶²j{:µ;—ú¸àg¶õbšïå4¿O§6—ýÌ&|%è¤Ï*­)â|˜>wÊ„C—ðT¥:ƒt-=£~:~&Ê{¨ù@2£>‹TÞò3YÊ�U6Hý´mé~Žïò!ò„ßH³È{âÍãHº�ߟh×McõR›QZ�O´‹ã,ûï­¦úËi ýto7Í›¸Ð:–°Þ*�ÙNc©ÏÈÃk¨×Im×üÌ�Ýñ3]ÒOuÔf+õ?-Ê´.Ñ})µ—NžåkvQ¾”®—Sû8ïèWo¦1,ݵ¾A‹úX×9î‹'…«êé^�{â¡ëQ=–©\ývAÃøgŸw¦:]?³Ò;úWýÌÏø'ÇótO²Q¤qTGú¬�¾T—c‰ø™'Ü·Û *Ôi§¾Ô¿è¡{>Õ¯´Ó¼+’Õ}Zèb^¢Yœèsˆ6¢Y�û™Ÿç]¨+zjþÄ›lˆè*YË0FŸøOJ©_Ê)Û¨Ÿ>ê ßâ7Í]~¡øDüÑMå¬cÛèZ¸'OHÏ´ 4Ç6ú‘þ¾íZl}Ž%œë¾øZk—l¶Ò÷!êhlÊ‚G{É¡ À§Ö˜£­dÃNŸ¸,PF™/�>’ãbˆ/囈ŸeƒZ¨[-hëý�¼À:Ô¹ŸÉšmkçËõp½\_‰>´>ɵÞ(£œCæg:‚ëNjÔ·²Lù¬ÑN¶�óÐ=Ñ<ö½„vÔ'¥¿q ¹Ÿ§ ûÔ˜ÚÖ~^÷iú Â¯êQ/´ÌuiÊľW7©C(Í=Ù´Ž[r\㺋~2?/³’}ÍAôOtÐ7çE:Kw©ÏcëûÀÏÏ•º…óלô½‹ûO‹ÊÅo¢=ó0\ ã¶P·‹{\�p*ûAÛÖ1ýQïê{Ï´n(C²#]Üc]áÑ›¾Ú~~-êO´¡Ý‘îÿJgZÜXþë˜ò¶¿‘µŸùK'Ç=µ—|q¾ª_úy¾µ<µ gš·ÅƒåÚÑ¥6À~E_­K|ÎrÙJ«‡Ô÷:®©ÿaº'¿y”Ú­GòAG~æïÊ—•ls>µŸ×�Š NùY>bÉÏtŽôð²ŸùÅ+ÛÚ*Å´ÊOŠ—b¬t$­S¹¥~*Ëñ]}M×ÊQ�J}n?ôAGùô] ø“~šüÑ¥´>ùÁO?Â¥p¨ü�ú”Ï,ü[Y‘ª¾Z~+ôP_ßŇìSü£6=ÜÓ÷.Ö!(¹þ5Ž®;¨[â“vºB¹êËïÜMøPž+Òjø‰ßÇhë^7ó娢_ßÏbIÉ í¯ä�~‡xpÕÏó¤êj홟�ÕhµVÙ,ÚÄú”Ü2F/Í=áoàgùâUü6Ný¬ƒžÒË’™x½‚1´ñí�ô�õmÇðš±(×"¾—ì ß²ÛK¦­ÍYÈžÈg�®ïзј=ÓN´“üȾêS2"y§fcXúÄì·…1%Ëê‡6hìg¼¦\„ìÈÀô!™W^E㩞ìW¬;ô3ý.¹Ñü©È÷² ñÞZê—ñ¿øƒþu ý=É€÷ó:Kù.ÑRùÍOqƒòg]?‹—©wi‡:è›÷dóºÙzÎY¹$õ}/è:ñ3{a%ÑL×Ü/ |àç÷¨×C餛Á(Õ]O4é§2åÛ”+[ò3þNd$�¢-elèg1…ü/ê¹èÛ¾Œë8‡3~Æ{'ýá¾Á‰´ÆØ6ÚØ˜Ë|(ÕÙò3=ç¦|eìS:^¶G23ðó²¯ýñ‡dF2!yR?úË̽E ýÁ¶Ô#ìOvOºBu™sTÛ¶CöÊŽ¯5Š/U×¶Œz’Y­¹‹þhkJ‰®ôIÕ'ç­¾eo•'Ëp_ºé"èÚJcDž=’¾o¦ù®¤r­sâçã/å“eŸ$?±½üíWÒu']KfWüLÄ>�§¶Gü¼>�e;©­Æ9Ÿæ¥kɵhZ¢­@u¤£åk�Óý%´¥Oå™×ý,ï_ú™\k�€úcìg{#’ÏXï4pª=?éTåV×n”[ïû™ýל&~¦Ó&iÍÇÓõ0ÍU¸UÞVý­ù™þ£�ÖOeÚoѵrþ’¡e?;2AŸ²wÂ…Ž„Û!ÚýŒOÄ×½4ŸAºßJ÷Wý¼¿–@xiŒ%ô¡˜@6päçÏPhGó®Ó4ÅW[ézý G9Æ•,qíy¢ÉÐÏóðã*¾½ÅƒcÐs’¾‹´Þúî¥zCô!\ëV¬£ïë¨Ë8b }JN5_îéSý‰?´7®=1ñ�ÆZM…oÙ‰A¢×ºŸÅÆ‚1¾ËÒøò©ä‰ß¤çt¶Iü¶êg:J¸”PæÄ_+X‹xQ}ÐÏèù™^ÅߢU ú¨oÆ@‘FÛ¨3@Ý5Ó¿ø¯—îq?AöWt\EÛUŒ)™ù™þ_ö3}ÖG?*W?ZSøÓ¼eW–Ó¢¹îMü¼.íàZ£êÐïž8‡¾Ÿñ.ÏfŒüŒGd‹¸×*1@êOóÜXpÕŒ·‚:œ«h²„Ï>©;´fɉîµÑ^cP®µê`ÉýbáŒr&zèžâ+Ý“ìÊîY]ÓÃ÷ÊÏtç#Â1EGñst• }F¨Ó5eò˘{S™øRí–p­þÛ±nc­ùyçžö*Ú ·«èKç:¦Œý /ŒÑ;i-}´_Á˜òu×Ô“\·ýüú´f­A:YxàúÕ�ä\4ÕZeÿ5_ñ̦ŸÅbÒÁ´yò›WÑÏ ®Çø.»Eÿ�{äÔ½Ô¥Òÿ*£ž¦>«üLÐVŠGKŸª?Í5öóp:C¼“®·SYŒñŽ¥ëõ„ŸuÔ×y¬m´?’>×ýìœ×6ú]OŸ›¨³�æÛm¡¯M|®£Ÿ]ÓßZºV½›Ácêz² Þ–ŸùMâ'á·ô³@øU~Kyž»ÉP®˜�>5c åî¤O¸¿Ëœ÷+ì>÷ÿ§)C,9SßÒ…<›Â}…}ؼŽG÷Ø5úÚ[žì~¦bZʼnÜ_">ï2Ÿ.Ýd÷÷¨7)#Š‹%׊£íþ�òžÚ˶g0´>å°z~¶,=&kMÒ™ê_ß­¾cÞK4åÞQ㊞ҋʅ(Ϩý>毕ËU.UógÞ|Ñž(÷²ì¾¶r‚¤]ÛÏóx‰rí7r˜>;s�âiæ‹4†r™”É÷ö$»Êêe‘{~ÌÍ3Ÿ¨úÌ÷0Žè©9 1&e™¹<ù*¢ óªvO“÷¸‡*šˆ9õ„æÄø– ߉ü¶„¾(×Ô}â3îËßœSÏÏËç¡ùKÖ¹ç$žW™öìx–ŒûjÊg ï¤S�þKŒÍ} ê»6Új ÆÒ<¸GL]Ƽ-ëðžÝãSÿZ“ðIÝBÛ@Bþ�ð¬eTteÎ�üDþQý¡i«=ÑB8”~â^†tóÐñÞÄÏr•±þ6Ö$y²ôR>Ž{Ò'į=S$Ã=Sù§¤Yãðü‰ÆbN˜ùchÓ´—!¹Ñµú•Mk‘| pOr+ÛfφTèËîkiŽ=ÔW_ê‡:ÃÊ�ú§.•ï#þ/p/‡ûb¢‡æAÞ£�’ŒÒp¯�ôá ­]ónåÓ ¯Êû+V¢N É6QfÏjˆ^C”I®È5îup¿2ãæ�ûú.®ô7ʰ֙›þ(“ôÝhßU·‹1TÞE;É¥öûd#ÉCÂÏÈÒ§àþ8}ž‘ŽïÐï%­ìÙK»_+›Ï3‹{¨<û`÷Áéñ¬ ÷Þx&!Ãg�ïÒÝô·å‹ ÇòGÅ—:ûhûâY;ê ­Ÿg8;~1x^‚úŠg~DgÎßîùÓ‡ÎìÞ<傺D® ?�óÊ|'.‰_î-‹FÄ™=+Îýy鞯֜JÔã\HO�Óüh~ÏúQÔñŸæÉøPëëúy¹gœ'_›r!~×^9q-ac+Ùsù1âoæñ{Èæh�£FôéÔ§òŠ«„Kå<è[Ÿ\¹lúB¬¯þ8æa´g } »(>×Z•‡Öxäyåž5ãɬö;uŽE±‚øN÷´gÄÜÓ(Ý群â áIñˆücù\òM…æî•£”o§|ºrÚÊI.ŠëÖý|£yëŒ(í’æ/?M> pËgóoÒ7�×ÇÐ�|ZÚ%ñœtF\·ó3^§�§‡>§ÕÏƳþ õm€æÏõ¡ÊZf ùÐâò¨ÆÓ|Û1ïD\¦µQ?ôŒ öˆ•O•¬(wÅýñ‡ò ñþv㨟ñ÷r•Ë< úp_N¾¾øOçObù?>*êÉã~~màgçŠ%³Ü‘^QN�q‹äP>…Úël˜èÈýhñŽôÓÖÂü óÈËiýÚÛŠŸ{~ß0·ÂÜ¢ôi�1ã8»~>�"ßKø”Îâ^ cRÕ[Ƙ̛i[sÕ<¨¿‘>w1×ÒÔ­™¯b¾Tk?|‰¯#½÷ý|LH3Ï#zŠ÷$+z®NºKûE±?=Û«rɉâÎ5?OKù¢’ õ)ÝϽAÉŽb îÃñÜÙúŽ9•-?/äMÙ®1Æ%Ï0–&N˜`Î_m˜'ÑZŽø™O¦ýcîùÉö®ú™Ž’>çyñ˜žÇWîˆ8::*çɼõšlv7õIšX[/zJ/¨]ü¾ƒ¾dg6ÓÜÈkÌÃK_È'ëaláJ|Q ®pĸŽ2¹™¾k¿Pë`^@{q~çÌ=í£kÇ1‡x½žê깊>ú— ‹ô޼wÊʳd‡þ—æ{,µÝ�é?)Ÿ©ýÓ¶Ÿ?s'{Êó%³ÎhŸ–gNâý“~¶«þ#hV¸[ö3Ý£s/’iÙqñŸÊ)»Z7÷+è‡>ŸbÜ%ô§½é Ù8î Éà9é]ë;}Gùf]ŒµíçuˆÆ ½æÒ3÷å7È׎¥OúY¼L«kž7¯Ø\S�1UW±‘½Îý¼-PÑÎæhãä{2o*ý"Y"½¹çÁ½d�K©¸©@´K¢ùKþŸÕÕÜËP\©ò}Èb~µkúãx_ºŠx“ÜGäCÆÍ|.Z~µâCÆ]̧�ÇHséwñºø\±¬ÎVŠŸÇÄ:zßN}ч Ï$œÑï]A=æØ-Îj\«ž|ÈzÁ'q¡Uvšù/›GQŸëèoÝÏt ã ú¢6oaÏÏç˜_jûycî™ûj±î¾ŸÏ9ÛÜt‰ñ ŒU›±U‡û!ÃæŽåXù,m`,“]¢Ì2®OhmœGãk+CÌ“–(ë¡_öM<Çu>ég¶^<.»+þb‘²Ì3{Z»bHêÅKmŒ¡wÃðŒ s/9ÆfÎL:U±‚ÖK}Ì|ZÛßH?�£8�ñ<ãþŸ}3s€ÜÓ&|;?ï�tÑVv®ƒ¾$£öìŠp%—~^.¨·¤£˜ÿé æ™ï.ý,Áœ òÙ¢ ó�Šå™ë“/Ì|®ÍmºTOç_ÄÛã2oÈg½…Å—²‰Â!÷œY'ó¦Zƒó3YÕ}Åþâ!ÖcN[c Ôí±ì’xP2!}Ð?¼ÿúë~¦?äK1Ÿ«¾Ä?C¬Oï%^„£ŽŸ½‡Oïóë¢.õ¢Úȧð~–“³¶TøÑºôÜ€bFÒ¡�9È&j�±LÏ-PçëùòN�1ŧe›èKþåøŠ‹DÙ3ú)Ì…QW0¥rÚkS_ Q_s�ÑþH‡X}åü,G)™âZ´î-·ÌÓQ÷�ü¼îÓä ÕѺ•ë"]8ñ+÷eä›ÐæÒ~ ·´WZÏã2ßÁœ'õ¦ÇÚ¤�iyŽA¶(®Wñšb2Ù îáÓq5C™è¡8�>ssÖ¯ÐÂ�æÐÆ5ý(žY`^UòÎúK¸Çyè™(îQÈ—–ÿ‘™q¹îç1À=|éoÑ‹¹5áX<)=Fy¯L=ú÷´'ü¬q-}¯ú²çâSÚáMùÚÆnZcl¯ØUû/±Í*úgþM¶_k¡Ý�üpÿRzŽöW~—x�þy…ñ¸¶æçéOšˆÔiÒ‘šÇÃ~žo”“"ß)w-¿Ÿ¶K2Æg˜‡R]ÙåÓ¤;¬�R|¬±Zè‹y0îZ¯æÑÇ8]”i­òÙiÃéÏÐO¯Q¶ùiãé'ÑQ|EO“²Eý.eì¢1•Û*Q.>d®P}ðl ã Ñ@þ~ÇÏó ×JÝ£¶Ì±0æ/Òcó&Z7ϧHÿˆçÔ†ûP”úø¤…ðLÜtý¼¼‹øŽHæ„cùïÔ﵋þ-×ËX•1 ïYÙ•´¾ íŽðËñ¥oxˆ|©q9oúý––¹éÇîQÒ× ~§,-ùoÖ·/LúÔõ‚þÉ#�cqm#®ì>ký2ž`ß‹|«é Жµüⵦ/ë÷ÙuZ?w�,Þ¸G!}AÛ±¨�úìúÿäaÊ} Ú{â�¶ßÎ#7ŸÒõœ#Ï›‘‡˜s©Ð?ë2�`õ×ÇûÔ©™ŸòÀ¸ƒqtn€}ZZÔþFœÈN v~„ÌŒOÝ$»ò‹çcùžgÁñ™÷7â�¸åÛ¢9.Z»Þÿ):YýL¡/OŸØå_±�Ö¬˜A¾ó1ÊsÈj-¢‡rõ5ÚË÷ÐúìÞõhíoÔͤ‹hE{kms^ŠSr?Oæyt­ç³r´×|x>Ž{²9úáš:U ›.B¾Œ¥ËDsÆjÖ.Rgó1×G½Ç³ ‹7÷µ‡/˧ï,_¢ïçé)zh®¢›x^úN>´p«³1âƽÊ+híz�q�ä�ø¤ý±2O›MZ‘WˆCíó™7ëߴпÎ)Òߥ.°qˆÎúз EŸ]8õ ÆcŽH4`9õ,cÂE÷µñ/q)þµç5¹ïHÙš÷µÏgmí‹h+¼ó½Ì®9žõ«T‡}‹?Kô³èSõ¥tÆéÞÔ6òñÙÔ—Þ-c}P½³¡ö³ç¦c¼Îwè]¹ŸíµóÙi½‹!õž‰Ö0é�cé^<�pÂÏ¿¯B:g ý0ÿ¢÷oe~ö|>Ï h\åÎ$'zž4~õ³wì”~–Ûåsö:sÖõógÚô>½3K}·üìlƒÞE¢wðÝ úÓY½¯Ÿï�½TOïÖÞÕ_‰þ´�Ï÷+(À÷](¯&¹Ñ{AsØô³³ÊyõÍ8j§ŸÇ×Yžk ­5'å6u~@muÎBçî”Ñûr–16ÏHh¬ŽŸÏ£ POóUßK?G=ž‹ÆWm…k­W¿ ÐFß½έèšâ]žÕÕ™áúçû=ôî&ù�Œ£OÊ`×Ïσïo‰2Ïéwor?Tý�ýLoÄú:#&û*¢Ü«äŠñ›ô�ì:ã~Þ%oK¨gý[åàe ¨oùô§EWöçQ&’yjæÞ¹§IŸB{wÌS0¯C¿ƒëa>Ión›¾è3Ñç§Í”ßmÏy¦¬‡>ˆ{Æ‚Ö�êš²x侫p Ÿˆ1�õÕE úxZ«èaýXú8ê‡ùÆšñÓü¼Ÿ%:3–,Í8‘=o²(·Ašvü¼ c®¯X0–æC§cÊ™›`^�{:¤Ea꩎üÒHã26ã¹âDs Oªœ´¢ìñl})}òl�èša é­¯k>éi|î’ž¢ãù÷X—ô>™Ûµ1´ÖÂ’­—qéDºØ\1ù¦ò‹×¤±˜â™"ŽK}Ë|qY,ødl'|1¾êbL»oȼ3çÚÁ÷ß3ÓFeœ¿üý uiÏízÈÊÉ3¯ju­];íó"šÔ¨Ç|ãÏEþ c{ÊãRãJç3ßÃü¸ú‘ß×F¿Â Ï™’ÿÅÌ»h½Ò§â;ÉD }Úü¼î“´.®™g^™çP¹æÎ½ÛúQ}ò)ùG6�6‘eôÅ8gÚî}W7i'J;'YážëÅÏÜ_D �ÝTÞ•1Bì_ÏïðýIñZy>“ q%[òk•ã�>ÓOå¿lœJ¿@ºVü[ùùgǘ�ÎÔ»:¨Õ7÷‡Ä#Ò“ú^úùg¹—¢s|Ö³ú?Š�kÒï ßS™ëÚ”Q¾3ô!þglZ¡œq”ðÂû-Sf}¾ íéGq/W2)Jü/üÓ†¿<#¥9 ?9Ú ¯ô;b?'0ßÈKGR9Ÿ{a|,^ež�ñä"™ã¹9Ý£NMtîVý¯Ö?£ŒÑ—çþc«ø=æ˜õ~R��.…Oµ•Ü1—«kÍ—ç5'µåúˆ Úa]?ú0¾ßË/5Oå³™'ã³Ê¿q/»Æw>s*:3/&^’þáÙÅîP�¶Ÿ—{é>î§k-óÉgcøïq,õ%ž%k¾ZkmÆÓu Õ6ý3góllK<òLW�~T·4×܇”Ls®5ÚðóŒËÜ'÷!È«Œë¤“´VÍA¸S¹ò7…Ÿé0ò„øN}«�r Ô#”×~žÿ‹ÉnpßE}qß„ïŠPL!þ¥»¦žp«ñD#á‰ç$vìSëÒ¸Ì5ÒÎ3ÏNDº­‹:¤]åç} ñãKò•½&m(kôDÆEÚÿ©ý'žµVò9ñÚÇØ%êÑÎiMä¥ãѦHæÈ3ôËzèGëà³7Ìñ1RÊ{YßKkÔ~‹ìŠäK²iýê-õ;À˜ŒE Ô%Ÿˆ.ÌKnDË}ÑÖS®éqG6]ò(šäè_ñu‰hÍg¶DGÊ›pO;ÃØ•sa\Ïw xÔQ¬LŸ�´&ßð|£õ×+”iî¢)c\áKk¡nžÊ¯lÝåí医ií}ÍÑÖ_´W²¨_É–Êè vE±ºò)Ú3¶c,Z'yÈâßÚ@ú7ÃY�~Uß®™ùpê Â|ÒæR_1ž]dØÎŽ-z2çe÷_éRÇRžÙG‰±H+Ú!é^áT~=÷–hÿ‡Pöi»´Vé?úsÔ·ŒÅ;¢)í÷:4gµ—Iÿ¹BÌ+Õ¦œ÷ãwå~jSWëïúyž � r«+T�9»§v3ù[»ˆßÉ\¼š6ÔOÒk’Oå$µF­¯gƣݨýL¿k~ ÓôÙræb$SŒ sAgã==“®ùËÇåÙÊ8ù[´Ñ˜|' ÚÒ¿¡/©vŒù:¦?ò×%?D¼û×o@ZßN±õsîçqÅx”yÖ羇æ%z0·Eÿ\´f_´ËêG|Ä¡ô³Ü:ýúûZë*ƤÞ×}ççy=ösÔÏd�¹8þ6(cœÒ/ŽQâ5÷÷øNùµçï‹QvI?íGq-™ôI†{¢ŸÆë¢-}:òý.Ι6Auõ¾æ+Z~žÏ33×fs <çu³zô¥¤ ”»Y2c1ΣÞU_ÔÉ´!”}îÕHçè¼qÌ=dž©¢Œ‹ÏDŸ®é‡ü#Ü[=$›Gý+¿‘ñ6÷,˜_¦ž’|2_«¼²x�ç5º¦oåëÕ}ÚEkcó,}„eôͼªú£ý�|‹´ã»¿Å˜‹´¯Akk‹­Þ²úðXÂÉšŸÅô uF}ÓÏË“ð/:Š7Žaž¬/°¹Ë‹•iǵÒFjÜHsþÎe‰þåg´ý¼ì´ ôü<�ymsš´]²â3ÑOô•½¢ÎR.„¾©ÖÆç¾UGö€±ýg>CG¼[ÝL_@ïß•ÏÛÞ‡5w͘ćޗhmã‚mè¯Ð¦² ó&5ÚI&hÇI ÆBäŸÚ’‡¸÷Ƙ³F[îÕÓgP]Ù9é5ï0Q˜rå䬌RŸðìŒÞ�"û(=Ì=`µãù—xo„þTŸçÈwÔ­´ÇjS¢,ÖâÏg0ŽÕØ]?Ï“c O‘òŒ·$Ãâ§8†ž§`ÞB¹:�9à^�ú½ø¾QÑAv�öI:.ö·Šq4®d”6VmÚ~^Gª}S­7–ó7 ˜““ Š—Ô·ä_<Äüå‚{w¢»ôã?«'xVÊîé°¾ðEJ¸µq›ÚÓŸalÛCŒÛé£ÉþS¾õ©¼cŽú”?ú·Òô-4fŽ~¬ÍÌP—úžòhu‚ø€~±�õ8ëëÐßãÜ Û3'œרÅxŒuÔ÷¢sªâ/ʲÅ�úäù•‘Nלq}³|€ÕÅvÄ�teŒùÊ›Þ�¬{6ž%/ñ¹Xù§âaÅÎ’qáKz‚±ý õͳ�Ì¡p|ž¯’¬©æÀZ‹ˆFvÿKë!žäƒtpmã®.ÚÉe{Æ‹ô›Øž:E>—Þ#¨< c î9P~;”~foø $÷1¹7G¼ ¿ÑW‘¯&y?Io2V•îÖó®ôÏìÞÏMˆçåçéýj+ÝBûÛêyU›kc±_å%ŽúYþ"¶ß÷‡g®"œô‡>}#»ãgÏ#ëýùÞÏÞ¯X:¶;•ÊÅ;jÃßôV"þQßÜÃ×™ =3Ëß¼Ö™H>c=Nôb,�ŸÔ³Ÿ|Ÿ¨äEþˆtžÞuœ¡ãEÅÙŠ×Z¿“þŒ|%ʘõר�YF=F{«ü(m†ú·y:氥纨ü$å�ù7æCl^޶�~e�z|–@¶‰ºŸ~1m5u�û‰¢™GŸ<¯OýL}Ÿùy]mýÕ•ý!]™¿Ðzi?müÏzì—¸£�'/Ñջ¶ÛU¦u¡[PÏæ’õÅ1,pþô‡(Ìã6‡"�«<™|vÅÓû©NÔugýü³è1wõ„Þ×¾ŠëNúŒúMºBÏùë™xý&Ê ®¥3ÕwßÏt®úžøÙÁºŸÎ^gítÍ=ò½�é„+ñvægïY¦ïQ›þÈÓ|&L}ê™6;[Feô¹·Ñ·¨QGÀ½3›G»¼ë]õ:ﻞÊ&©| 8ŽøÞHcDzm´‘íYN×k~ö{/üÍ1ÙÊq¢éRª§÷ßOÒ½�Ô÷8­MóÕ{:~Æ?Eú”? w™è]Z�Ö²†¶²acÜ×ï’ˆÇVÐ^Ïè} ²÷›¨¯w¢,›15/ù+f>Cô¡ßQ;½¤<.£\±»æ1B¿ò ¸†1ÆÓ»"ô~ŽÚ¬ ÉãMåSÅK”¹ØF~B?]oø™ì¯›q–ýÌ'áïÀÐ/ð�(ê‹OùŒ‘ÁÕíéçð}7ö}+ª£ØG2Ã÷“¨žÆécl­«Fý¡i¯ßä’?Æ9K?Xÿ�vV¿{¡Ü÷Åi/z� uó�Ü7¡í£Í`oã3úùÒ�Œ˜ï´y‰Ü\W¦Œ:—yÑE¹OÚOåæks�ûÕœcoÆ­ÄsLÖV[Ÿ…6YöÕÖe’Ï•Q—ÛøM¾�=sÂg‹g)V´þ‰âeú²ý‹öCÅfâ?å‚T&\ižzv‚´^Dæ•Sé å§ ?ï³h^ܽX^â>í>qC¹èà>sF6WoóHÂáÀß8§–Ÿ§»-Ó¸Â1óê[´SÌ¥¶<[Á=î+ö1¶ÚŠvVoX?’üœûyf×Â~ìó�:‹aóâ·®¹Ç=Yú?jÃ=Uñ¦õ‡™‡ÏqŸ¾V,¿¸,Lß]|.òÕÄ ŒE©£èÃ1÷+Z0V“ü)G;ºÉØúdžŠ÷ÅaŒ³Åw’9›k똶´MÜwÌÍ5Ï%f Àßä»xÔÆí¶þÀ\Swð3C…é/BŒq”ƒ‰¸<æg¼#ýÅü¦dÂææ*ôMÛ@•,X=dí�xƒg³P‡ÚØFýqn>eo”Ã)pßòϹ(7`Ÿ¡'�¬ âþX†ñihÅ»ê�¿%ÑBÊ/Ùs+�¯¾K&,ï ¿=|gÌ�Ø2+´Ó}£|Q>%ÛÒÝÕ‚úì“ãñõícNéáRëàûþô¼‘ìǪŸŸ_õô»…jß7ײW+¨«\¼l&Ÿ­‘_,þ•ÿÛ(TÎ@Ÿz_¡x—ï�lùÙ;g*¶ªüìÜ�öúê}‰ÂÁ$ß)¨XV|ͳç¢A…>xž{Öþ1×GÝS =ýÚƒ ŸÔ)6?Ô6õy‚gCµ^éùtzŸ Î}±¼ƒ~J”K¯Øß™Ö½%ô'�Èzò=„kÉ�dR~ŽxT{è?O»¿Î3Ú‡¢ž�ƒâ é(á�ûøÒ�5Æ–�ÓœÅgŒ[Z~OÇï#´çü»¨'^²{Xò[´.­YvIײ7Æ“O ~(/\·õ�«Ú{Œ+ä7ù‰¬G9­Þ¤œù/ú”ñxÛÏ?‡&ã˜Àûyy¢oG_YßésSv(‹öœãœE¾º�{Šuj3.Ûé;÷+m|¡¸—"ˆgíž3ýê#êLõaóš3û´òlénm,ãpâÊžd=ùŠŒ¹wtq�mè—Ñ[þµþ’-[D;ö¹è7'­ý³6M±#iÍŸ{&OQçX\süÌ\SW« ýÅ ýPËg#?T¸GüPæØ/é,~¹YÞÖÒf€¶–ŽmÓŽþi¿?âgqó‰Äƒt cŸýʾÑwä¼È{ôµH?ö)ZP¿ZšÑFôý¼ì*~¤MSŒ"½'ž#nÅ�<÷¬µSGp<ÆæÔÏVŸPGI· šC†OÊcžGXä3QGõP—1íyP㓟˜7çž i«9“Fò™ä?Hn4_뻪 ×euM`çsË1¯¼›€ïPl§õ0¦ˆ4>êg>¿býS~æ'�µ­s„Úç]õžüaê#Îk#µŸ¬§õìøÙY ùÝÔÙê[çÕ‡dCã)ÿ#ÙQìB¹—Œ+çGœÒ®Ð¯ja¬ʤ_¤ƒ ?/SŒ¯hÃi똃³t¦^–�©Ü«ÆQî?ê|ªä‹q´âMé �AΨߗÐ�pNÿFº\gn [ÿCkÔ=ý.Žr÷²!Ê‘×j?Ÿßa,K9}cÓ�Öxì“¶Ð> ¤{¸.–çø”mÒYTêò™pÎü<ý>êÚééÜ´cŸúì™1ø^¡8·c¨Ãþhï3óy3�Þí-(ÓhK”g¼Í=zñ«rÇüüóÌ?J¸ÿá×E@š?6ÕÅx²Å’�ÊôK27嵟çc•±ëßÛ¹ˆw˜O’î‰õ'¦OÕeÎVã[ÿ¸ƒëExPY}“:Òyº'ß‹zµ0ýѶqŸ–~ c9ž?¡oes†‹r¸’ÉŽiÇýæ.ê’>ÌKiÞîU~ŸŒU3?¿>[Eœq핟߸xˆ¾ã(ÆÖ’%é%ûÙøM2ÃD{.ñ:új:gH?'ö­ó¾êCg<Õ^ò£¹Ð_Uþ9®aã÷Ñg¼ÇßëËL{�{ÔøÊ�s�I8°¾„ö�”Õzå[WÒ1ÍÓæIì;Sì»oHßÊÏçF¹Og¡¼ÉØöÞ" D3ÚÛÜÏÛMú†]s�ùYñ,sÎ$�/G™ï�*Œ%YËü¼í§î¢Ÿ,þ¡_#™æ³@Z»Æ¡n¤í”¯B¹ÑµÎ­¨Æc<»Âý(ñOŽq´ÏÈØU:[ú€ï§.é¡ê Ëÿ·D‹bWù¢•_k Ä_ÚXƸ•ö‚¹«ŸsÙ| ûP»Ü´×:$ òÄ;ú?f¨ÃˆÚRÖÄ?*k¡?ÍŸ¶•þóEÌçqÿOq«µ=³ð3�*h?ØÊ:#@4�ñ¹xªoÆ¡íÕX’Aê/ɘì:ãñ½>ū›æÚAÔ}Ìÿ(žã>ºö73ÔQ¾CãHŸtP_1]‰k�èNú w‹gj¹W/<Ño¶ýS&ÅjG?VãÒî2þ$ß /Âïe‹ô”~÷V4W¾ItTß|v@<(ý«º<_ÁßýÝx.‰4fD盔á¿%¼ªlÅÏŸ±‘>QžIÏ5Pÿpÿ«ò³gŽô|Žð£çb%“Ê‘ˆô,­òZÚó®4'ùµŸ·ígÏ ÏzFMïe[Áøzæ„y˜U?‹“ú©½hL;%=$­Ú· ®h/”b<ÈguäC+Óy;>_Üòó¿7+"Þ`þ‚ç#ø^jñ<}Œ6úáùò·ô8÷Ÿé¿Içðœ—rœö¾üEÒŒüN�^ê¡_ñ°êÈG¥m­Û�¾Ný)¿(ýͳ�òy´Vñ‚ý½cÙ4–sÎÊç‘fÊ…J>t¾D¾ ãÖ®Ÿ—{é8Ñ©D{õÏóMÔâ•ñ;™¿¹¬2ÙÉ/m¡Î'È^Êf,)ZuÐ7cíikÌ�CúÚÖe ¡ºÂ¿x_þ»äB~ÐuiOißTŸ:šq_œÏËK—öÐöfc‘ÏkSOs,èƒs­ÍX]Óíé!è£/ÆrÖ�u&“ºU1©lІŸ½[@:•þ©ôªô ô³t¦ÚÉ®H§pßIºqàgz•çSEG=××ñóÏ÷ɦñ� Ê«+f��¦ýñ'ó—Ò3ÔZƒ~ÿZ6Q¾9O½ò³ß½’î� Œ;ñ3ÝÁ¼6õªè¨g±G ™t l8õ�Àæ·»è“ _“û�‹òÓÖþɇ°c׸§ cOÊóh-ÓãWÚpé*Ʋ¬#¼X{ÉXAºŸ¶7Ž¥}榅 ŸMù&æ²ÄKŒ ™ßÖ¾p×´ÍíþsušŸÍ‘1¯Âœì"úI~KÔc ©< ó©ö“v­6÷Õ7ógZSeƒÍk쮹H†Ô–{@Zã`ݧ ‘ŽeN5÷ó>6iÀ÷P>w´ü�kg<#^äo 1nÐ/Úü>ß�¶(w+0Ž�ÜqÝÌ=x?³aŒW•‡Zħeî1Öe®‹r'>”¾æ^ÏÊYœ.›:–—+?ÿ,Š|pòºÆ©ü�üÈsÚá~cv­]sì¢.óÇúí¢ùEþŸÍÉÏä9æ¹l�qº]ŸpÛG{ò”r•ÔßšƒbêYñ–Êè›Q¿‘ÿH_ùôÌÝŲ?{þD6F}0?õœ”b åÛ©ƒô]v‘tµ9Aᧃ2Ú É‹ò÷ԙ§rm|Ïp�u„ÅgäY­wào”Gîõ‘G¨3Wý,þ¡.Òœ)/­D_î娫œˆt«â½Ÿ¬'ùS{ù˜Š�ùì’ôO×mÔ?kO…9P�£8Bü&[!šÐæQˆ˜o$N„g¾g�úPe<¿p'ÊE3îëJæ¸Wv3[ËsN´ µä“ß%›ö»ô4s?Ä7ÛSÇYŸ�{<¯#üYÛ¤:Ô‹Ü›£^¥ §lq/D²Ä˜G¼MŸžgõJ´ç|{vÐG†q¥3Ä;]ŒËœ·æ@ŸÂúÍô�éÓ61ÏCš1GÄstÖ×^ä»/â ú·*·gâé­—xíý,_*~áþçeà{‘M �è—ÑÒ¡o$Z54¢¼åþF> ð½{“:Ì3.ÊS,é×!ÚØ˜—y„›ÅÅÒ#Ôs­›ôgç?2cuM�–ùì˜~ßl­Ò?òËÙ–ù“¯W¾Y½ c5ô²ñè›Ñi.jsM<ÛýsKƒ�snZh#ßÃŽM›Ãkkïj⮇ý³\üL>’®³öXº\öµm¾³½õË$;úN_�{ÌòUjôSš~˜ï¢Ý è0žg]Ú(Úìê÷ѧòušÿÈôÏüàÈ´%n8oúˆ„ ÷sé­7©w³\¾b%{¯�±é j¼.>ùü¾tóÀ\£Í©’wTGùuòy³íçy@Ÿ6·ÌyÆ:÷øù8Åþ>ƒìœì„|?ÚIû®ær€ú§ ¥Mf}í�Ðnó=ûšï’Ÿå|i{éÇØ5hüu[¸Ö|ècX»M?‹8³~Bîo\g†ñUÆœ�úê¢]nÚO²åš³Å;ë˧å*ôÃ1ìšíØ%ú'ïpÔ¯\§Ö*¿E�neM¼(Ÿ}ÉÏó÷}SGõüL¿(ïûZöóz̎ɈÕ%úí™:âw¾Œ1¨}÷šp?À=æÄWòAõžYÙÛŽŸß—Ññ xˆ¾”â6æçÌ«kÏ–þ qeu—ø©\PŸ¹&îŸW(㼘Ïöh£ræ—¤ÿlœeý<ñ*õr×ÏÎÒÑ÷mhçí9údÌuXß@4Yä³°\~�Ýc]smó+‹ê·L™Ö)¼1_ϼmóô™Ã²zA¼(Y°´f^@㑾´ïÌçJ.iû¨ãi'Õ/e^s*P¿2eÖ¿‰Ÿ}?¯gèw´p͜߷˜¡ŒåâMÚ,úZÔy±ŽC_ôwè+1¢¹¯6§RøyÑO$.™s/L{®ÅæwùŽìk„u«¼Në´¹,‚Åu²èÁq˜ß“?¨öÚóéûù9“oÄ#Ò¯ò dïJŒ-�ÁýËW’=ñ:ý ^Ó>(¿CÇØ^z™q}$ÊcëO•æ>m½ÍsY[£16ζ`÷/˜'³1;ýSî=Úœ�Ú– Ú—¦/úš¶î¢2¶³ß™+¸ÙüõófkàZ˜ËàÜ–0¶ÝÛûJs-²�7»æ>~½à»xQz€>ƒÕ#¼§ëÊ™C°yT�l¨Ú0^_É>QÇ1VQÿâͱc¾³-¿K®©�;øN]åçõ—Õ%ªÓ^p�ß Ó‡t±æßYÐŽsÕ½ÜÔ¹ÙXÜ�ÑÉ÷úWûÚWæy_k æh_™º”)ö™£/å¥íZèßÙ2ÒLöÝÖ¥ÜZ;D~£-á:4óŒ¬Ý±t¢!-ì:mŒA �¥ÿÊØÔÆ©–†jÃ<çN¿Wï#‰ßõ®m=K*ºÉo'?jò#éó�ߤ¯˜ÿÓoÛH—hÞÔmÚ�b;ú2Ä�ü'ùBŠyä~ö[8±L¹PáAy áP6KÏÇpŸ¨ð³\�®©“¤ÛIc›#o-(S¼oϳ¨žÎÝ—~¶?ª¾¹VÒNñå‡þ�ò03&};Ù é<ú…”ûŽŸ×ßñû¦ŸÅzÊçpŽÔ…Ê+¨žm«P_c3/Æ8¹…1ÅsäCž¥Ò'co­K¸gœ¬öš‡øM|©üK†¾é;ShMÔcôi„+ñc�o÷Ó©Ó„KÙ|»?Ì}.ú-”K}Š—‹È®Rç«­h¡vz§í¾µ÷šõ¶úe,H úö¼…Î2ŸÀ1ØV¿#%ß�¿»È½ú³]´Ñ¹ êß n{*|îØçWãC[ŸÿfþóWÚÛåóTÜo|³6vïXó°ûšâáÂ/^û¢3o†Û›ùŽ_-0þT.¤6Ÿâ?ò#m>s9êCþƒ�©é‘?m^Çæ•Ù÷"°{F6Ÿ¢ïí}ª>ýF{OºÕîýIâK•17Á}x›3$ßÖ_aéä¯T�zrQ ª¹rüž¹Çµq}=ômÏ2È6Øsv�vM,³ýo–Û3œ7ešvœtàÚ*Ó–uJÓwmú\$o±Ÿ5¦�³>Kµ íÍd˜÷5¶pcíeoMÙfQ®F`e�{ ¢5ó…Ü]•·cΔv]À<1÷�¸ßhóiŒ¤¿Ø'ó˜OýJGs¯¾Dé²6ês~ê“ú23ß­~ÒµÝÏ¢ýç7Û_î˜þl^Õæp¥¯ 3vîçéÇþl~Yüd÷Ë­ÞdŸ…'3ã-;3c0gj×gçK^e_Öæ0¾oÔô¯iç)3ò›ù=6ïW™:ôgßÌZdäSؽné»ÚÏÏÙÊx×ϯïÍô’Õ?]£žê˜1éïY?Êêþ®¿QE¸gÁ8¹Ÿ×cù‚¶ôEħ\㢼 ó¿Ög°öšòdsUÌYäf ê@æ3¿[½¢ñ™´:MþaËÏø]8±:�¹“X_ç²4G›bl!ÜÚýñ°Ú*¯Ì|}IÍ—þý\òÀ¢œã.æ(¥s8>smÜŸcÿ6§ÆO­WsïøyšÚ9äøÎµ2Ö#�Ò&im–ÿh˜'#�Õ?yŽ6ž¹5kƒ¹éZòl ãѾrLÚ-–‹�Ò÷”�·c`yAÙ"Ø];øüz€Eë]‹æ¾ýç GÒÜâ»i6è÷¨ãæ-Ì3~NR›�TwËÏ~›{+•m ¯-ÔÙJcÅûÇüa^WsØM÷„»õT~cë7¿�šym¦z±Mäã÷ \ï‰àoÀ�͵~Zïb=þ¶ùQ?ÿûõj§>ô›Ùj§ß#çïzë;W{lê®øùyŽýüoW1ï-ã»~g›kûÙžÖ³†rõ«y¬øùu®%œrÝ+¨¯uñ7Ì56/}„1…wþ¾6q¶âçñÍ~8Õ,Àÿ*ÆSŸú}îEýò·Å•ÏÖº¤Ï•waΜq ýkÚÝgΆg ¤³Å*ñºïçííÞr*ÛÀµß­yªoéqæI•Ÿå™_•o*?/÷7ž+ð©<Žp(ÉçÓtSùPù¤:¯^ûÙûO*ÐEïKá;Í:~ö¾,îcè|óÄ<‹«=î§híƒp+^`þÏæëtÞ¸ãgÏÀé}z’Cåî9/âOu¹Ï(ͽzʨxž~¬ö¤'ô^¦5?Ï7ʃ)vN¬ÌP‡Ržé�ë½—xœ2¡µñŒŠÆ”^U¹ÞµÄ8ˆ9#ñ²Í¡I_©-ãní?1E™nùÙyCÒZ:R¿�$Üqo�sa¬cãuá™±¬ä�:€¹�®‹4ÚN›£T¹xK2Ÿùy~[”�±ùe›·°yXæS¨óå™å­éG'Ü¿^Z¸'ÞÕ|äh?pÑ^ù™û^ÌÝ xÞ»öóúÈžë®ýâ¿æI¿DëfþÃâ‘yæ?*?¯Ã…/µQ¿’âWüËü“ä…yâŒ9k›‡«Ì'yŒöŽ9 ɰú²ï€³ü�>Š3åôh¯Ô‡øtQ;Ž¡yŠ'˜«îõî${öÉá»ä‰¿­ 8Fu*Ó7}eúÌMj-<ó&¦1ùŽ&Ù êFâBò©öŠmA^¤O¨þèYÝ-›‘alÚjÆ[Âyñ&Ÿ¢õœågò¼÷‹ùÞ¶‘ϦçÍ Œo4GÍÝêJÙ@Ñ…¶�ö©2`û,ÔùJÀ|¾=K¤>õ®5ÙPåèo0þRÌ"_YÏ–Kwŧò�ÊAnøY~{9�¥wz+O4ħõñé�ŠgÖý<¯R–¹— Ø€ ^¢î*ý쬢|3=“¨8†yÆ*Ä1ý•�ü�zƒö’r(Zæ~ž7¸7͸§mÚØOæ×$kvo…v�þ€¾sÏœ{Þv,ÞÏÐ.GuÛÒvðž_P×îã³Ì>››/hcí4}([n}aæHH·eÔe¥ŸÇ§G¿´Q*—ß¶È[$÷ùM>9GêñÊÜ·öAÀ¼žõÇ©‡c[�ª2¶ÑZ©'5eYzLsçï+ÞlÎ:ãLÿlQNY²L½I›K¼-Â×" ® ÓF¶žþm˨ûxN‚6ÙêFK/ÆÒßãËÇ�Å2þ%ôÿl<ãQ�9=·®ï5Úkô%d“”wT\Y˜þxîzÝäCJöµáI¸ ½!/éÙwÎYù¾Óó¤Ÿñ�p\ø™­Î6ÑV´“Ϩ}ïçßYÁدo¾KORž˜çWŽ ççùH¶M´³6¬åg﨑m‰Ó5¬y’æ=Nu”Ÿ�ßuP±‡l­Ö,{SúÙó±Âu…þ˜ÏW>HýX^ÒÜås¨MígïwàZ„�ØV>!q$Zë·9 Ó^¾°bXáQÀx; @ÿ™Ÿ=—ÂøF¾½ú.L{ÚKÉf¼¿âg2$=¨½%ѧçgïß�Ê•2æÒüÔžg]¤{–LÿÂm‰æ­ßA!Ž”gŽ‹÷™Îüü×"‹r®ßÏè&Z.ã>ù‹ï*‘|ôýì÷´våq©G4>ßo­½UÅ»Ì}K/ê÷¢Ekú´’oá[û3Ò<÷F¹”ŽÔ³EÒEúýé >·ÉßÑâ{¾“„ûŒCŒÃ8OûŠÂ!ím×Ô¥ìRçÆ:Ü·ˆ÷ÆX}-½7†þõ:í6ó+’—>Ú‰§…׎ŸÉ s0ÌM“ç)¿â÷½„Ký–‹` }ko…¸’Ü(nó£…±;¸æ^ŽvÜ [´oÝ1íØ^:™90Æó‹rkÖwçY©}п$ýä«´M¿ÒQ´ëŒ‘Dþ¾³ø‰6�ôÖ}Ýó~žô-%#Œ%èC1¦XÁ<éß·Ðg�Ý‘Ž�~T^Bº4ö¥=Aɱì¾ÖÞ5ãIÿ/Úçlãžlç.h®ßq‘ Ò~?[‡ïNf¹�'ì~%ÏÜ.á•~ è#=D`žNxàïÂp”kfÌÐ6}vÌX˘¿æÒõ7®ƒk¯üü¾˜®­ïªy3†’~£îÒXômåsrßXþ—Ê,?Jç+שwëÚ½—éšÜOOûøÅ?à§ü¯~!À—ü�ŸéƒO8àšŸÏ}µ üSWçÔø;Xgü!�FÛ ó,ñlܶŸÉ—ÖK=¥ß,’ GØòó¿%YâsŸzw±èœ§±„Ê¿ú—O¦6ÌÐöMs�ŸÇAcú™*“ß!ž“<0†¦­Ÿ­¢^ë’þ#ïËç§ÿùâÓ¾ÏæXOc�ÌÓor­¹i�StÓ¯/øÙóêç\ ðÞŸ ð]Þà¥ïð¹/x8Àížð|€øCþ‹ðAx¾ñ-þð÷äcŸ—¼/ÀC©|'•g‚GÜàÁ4ŸÒ|b�xG€'\Ã÷'Òý'Ҽϧ¶‚hãO¦{w¸;Í;žï¿?À­i¼8ÿ·¸%•Ks¾#]_Nðx€{ӽˉֺ÷@¢Y\û“©ÏÈßKxŠk|Ÿ×<•pùÑIß?ìgò¬úÞ™hñþtïÉ´–'¼à{|OêïáÔ>âç‘DëïMsÕžÍC‰~Ï'zG<—Æ‹ëykš×³©ü#‰þO'š¼3õ-Ý‹kzWê/Žõ¿øﺄ‹?úiïλÝ_óg·Ž]÷úréò…ó»¯å§ž|y÷µ«Ï½x쵫×w×ßñâÆõ×v?ôê«»�…[�} |e}÷µòÔ^+öN<þêK�_ø¢ËÎ?õE×~îÅŸöþ ׿è_ÿË_t�ùï\Ûåï_¸�Ÿßݽöm�¼æ?.Šó¡àì±ð­<¿ûhèóÑ·½xâúî«»¯>ñò«»�î¾òÒ˯§¦ŸáƇ_½~q÷5÷ü‹ßþ¾0�ÓÖ_?|ýúÝ¡Ÿ*öSLûyõzèác©‡�M{üëP©>ÿTXÛÞs/¾õÅ×>ÿÈÖkW¹¾uìØîµ×~ö¹_ûÙGÂò¯‡Z­7f>¿ÿÛÖÓœÛaέ³áKç°—çC¡‹ë+‡WÙÞ±×~öÕW·^ +™–œ8öEïRAXo¬“ŸºöEðo]=ql+œ8vâX˜ÇõGBßÝóO=ÿâµ0“c×/Z¬ž;D¥ÿÝšûzûï_þ“h �hà›~1x‘½h �obø»v�½­�¯GÈÿ÷¯ ¯~ýAùп9Tw7ð�õ»¾u õC 4Ð@ 4ð�íoAè|ææÐýÍh �sèýçúÿôÍaéNç†l �h€0þÀ—h �h �h �þl`ù—h �h �?mXùÛß|°úc 4Ð@ 4Ð@ |+ÁÚo5 ˜th �h �h �¾†ð¯h �oظ»�hà[ ¶z 4ÐÀ·2l?þÕÑa |íàè _°ó |£Á±jàëNœl �hàÏ~¿�?M8ù—¾þao¯�oUØ¿õÿ?œ~ü[ μÖÀ·œý{_{8÷?4ð§ ç¿Ü@ üiÁ-Wh �h �h �h �œ»øh 4Ð@ |sÂ¥ßi �h �h �o~¸ü¯h �h �h �¸ÜöJ 4Ð@ 4Ð@ß pûßn �h �h �o|¸ãc 4Ð@ßšp¥�¾�àÎõo>¸ëË 4Ð@ 4Ð@ 4Ð@ 4Ð@ 4Ð@ 4ð§÷üA 4ð�÷þp 4Ð@ 4Ð@ 4Ð@ 4Ð@_Ïpÿ£ 4Ð@ 4Ð@ 4Ð@þðÀÏ4Ð@ 4Ð@ 4Ð@ 4Ð@ 4Ð@ 4Ð@ 4ð­žo �h �h �h �h �h �þ<á¡ÛhàϹ»�h �øf€k¿Ö@ 4Ð@ 4Ð@ 4Ð@ 4Ð@ 4Ð@ 4p�¯þÉá©ã 4Ð@ 4ÐÀ^øÂï7ðu™+œs?á¾è–ÝØ¹ƒýƒñþ~]Lö®LÆ¡d²ÿ÷»#õ¥ õw»[.nëÞQ¯|÷£ÙSΕ~øCÿñ’/]é–þ–û±±ØU¡?ï:áï“îgÜRêóàJzÛ›Lªƒ'¯º�Ìåî~·ž¹l#ö²ô¬d¡“låÕ¡­·_ÿ÷QwÆõCëñd\Wû{û{¶Ï­·Ê²(rïÚíá™ÖN¿.|Vy¿Ö] k9úúﺹ‹®žŽ[ÕãÉ•ƒ½zoÿJ襺º•e[v³lw7ÏÏø­-à¾pK\îv^ÿ²ûm÷knÏ�w—ÜêÕQÛݲ¿¹Ÿï�î\8ôâFáÎ\ ó 3šL‚b¿Wâ÷ª>Ø×ŸXpÖV|pðÙ,ŸxW´<ìËÊõZ.k9_öÜ®ÝÉv�VæÊáýîÎ~æ…Ò_s¾Î|^ú}çªÊµ:.,ðÉ"[uïoùWܰô§¯e�€ç¬‡»zÕ]uaåý×ÿ©ûgîÞOGœEŒÕU}¸ðé×€½)*÷«)J¿¿¸°×©î¹7{òÙ±óy»˜âz’8áp]á^øô°<Ð Òä`<¥ÉAz Ã×P;Œ ÷CãÉÁGW[e÷ÉþØý½Nù²÷YïÑA™Ê”÷.×LUw_¨òç+ïÞõyö_VEæ‹aî}Ñ_.ó,Ë–ªÿ*„‚røÝí@–2w>+ª­Õ¼¨ò|P÷¯…çö*_½ÏÝÖy«åÎ|©ÕnuÝr`‚@ø¬v/µ‹¼Øn¾íZ•ßÛ3hîm�Ý ü+Ë€ßaæ3ç‡E³XÍܤÊûYÑîWmçC§ý5&•û=·çG>oU»ƒ¶s­«EÞY\öeXHä‰òõäþ¥ûu7 ¼Ü»ÚÞY÷—ÎîžÌq±WO1¡>HÌrÈÙ“ú�“þö‚ü>½îgõò ô†¯»åúfvéƒ[w¥s»ÿœou½»\vÂÀ�}i�…ùËÛí€å¼õ‰#uþ7öÖýÏöF‹ÀõK«Þý•Ú?ýpœ¨k…ùænóõîþ/÷wƒºà®D.Þ�3;œå!Ûî'JNÉ}å ’¹®Y92zuÄ¿ã}+ mp¬ÎûUV®¬¼+{¹jýHY}+ÐàÒz6>zÄûQ�;ŸÝ¿Ù*º¥Ë–~nøßûöׇ£Êw·Ö.Žò­§n¹3+j_ûçï?9ÊÇ[›E6¬«Îø;7·6G¹ëïnÅéW Ï[îÑÈé'¶Ïd�Þyòô•ÛÎÞR$N¾£¶ß ãÂûA”‰ƒýY…Xý¡²Ý�,TÔýn¤€‹z¶Õ­†“ì·¯{—:lõÇþ>·ß™øÇ\ÝËo—ïpû£¥bÒ º=«²¬Úûõ¬ æ²îò¤ ([Ç7ŽÜQemk#èáV`»<»Å-­ø �#�ÞSæ/ÇÁîwÇGÙþ•vàͼ(Låü·Ü¿ë^s—݃îi÷vWÿŒÛ¹àÁ`ÓõÎ[_™–Jsî ¥ÓuN¤G÷¦Šj_(K(ˆôdÌE]´{CW’•Ýb<Éν¸,F]å½g}`ŵPei+ëïX_ËN�Ütyí2¿ªñçò“Áà„ºk[ùö;Ï·ýR–u¶½Ä%o­®w]žù¿Zfÿù±�ì¾g»A’}¯Œ_Wn)`;?šúîìÈ_λQ#çZèy©Î;ƒvBóî™ÍìÄ{“ ®í'ñóÝÿã~#Èß}?ϸwºÍ«“{¯\½åèúÉû‹;.Þ÷ÀΉ g_>D¡ØVqïåõ€Éc¿Ü ÞTîŸp£ ¦zO.gýÊå½:˜tywÍݽ²v$Û¯¸õ½ÝªÝryð ª,Ÿ»e}íh¶±±q>ºã'ºSÇÐ\^d�»‹—‚³]V£àŸ=´LÖ½6¶Îëÿ§û=÷«îŽ jëý»óO=þÔ]·_îîË&M¥@ØI—õ¡›‹¦ªy•Q½á\O+ÿ§[�³KüB˜‘¯ûñ2¯òÝl7°W�õóè¡_ÊÇËOúû–ײ#ýê’¿¼ôÎE÷Ðvî{AçŒ6ÝñVõü¯lw½08Ôå}Ÿçù#ãÖr;Ï¢_Ó*_Z¸·9²�oïî<4·ëŽG™{¹Ÿoƒ\òÔßñ8-Zæ4Éå Kžuƒ«]wéBûÄãO={µxƒ¿Æ5øcèÎn=Õ ¡¤”ñ»þDÑñ{Y·}:ÛîtüñvyÉÿÍNp"ƒK= V@^»]øVg¯]žìfî—êÀ-e¶¾LPíÊvÔ«e÷S�NH<ÈÂý€{aýèn¾ub÷‰¸àQUuƒK�]|fµ,ýØ�kÿWî3êŽ\Öù‹í Y~/h–ÛÜÝAöW¸»>øþÞéB÷D9㊠¹b"®8;ƒ‘+õ¡? ¬!£jTÉg«R°1mñ7·¢±�jß�žD¶TD Ýw4ß b4 ¡ä^^vߓݹ²š­Õ­“AäVÝõº~|<öÎÏÊb¼òdµ”ïÖ~”–¿c=ºp¾]Ž[gëòƒ¿Ö …eUû­¨¨\ÝNzñÜñ­Ö¨Š$ií¼ßíï>ºV,ïî¼%â­êž¬—£c|¥`¤|4v§Æõd-;º¼’¡è]Y÷ÂØí½�C׫ ¸üÇ_ ‘âcî-î­Áû ¾ßío¹ý™Ûß–?òøÓϾõù<Úª)ÃÔ‡þi²7´XmÄkŠïƒ©„7èàk‡êê0šÜ?´ô+‘èÖì¶}·�Á„¬‡�qÛ�*ùD6ÞåÚ=¿VW'ü]ùÈ×ÁgŸø—BpÓn‡øfõLÐU·„˜í6þŸþû•nÔî[kAëNå{“GÖG�£ufù}þéÍ£[ùÉÉÊ["ý.×Ù ¨-÷•ùv˜@¤CæŸyª˜–]û¤»p[îÊÝÛ�rÝïºßw¿|‹Óî–©ž>saw¼2ΣN'JR@J°mû‡È¨¯„²¹ˆúÿÛ†¿%sùz°¬A»ÖÁsr?Ò­þçwøLp7Ä ùÀûn}Ëé p¯¸_\óîÕ‹ív0ºÑW½¿Þ‹?凾z¡ðËnµÎ.>^®òíûƒû×öÇÁk[q›AwÞ#'·9¹õÊÝ{ù2Ž–52ö¡ëZO%`>påÐT̨÷�ÁnïzÿI·ðÀö}W³§ß7ñßÝ+?2X›ÆQYÙŽH«�”ÄÛ‚"¹Öñ^÷ÝÈéþ‘•,k{·óðÛ·óKÑà k9¶ä£Oõx‘�ݰòyçô¥©5‹”ðíKîÎ` ê` þ0Ø‚Sîª_]¹°wÛ½ÙÉcÝ¥«÷Ýrë=wÞ~g%mxh¦^f=U„Sþ I,:‹Îâ•©[þ|zµ ÓÉó Šï鯻¿<\ɪn–]ó››AaÕÝû†õ;»û­Q˜­sGB¤ò€;×Ûò_U¹“ƒú®_m!ÎêV0ˆS¿qgò]•?ûàN7Ÿ8êZ!„‰Æo/‹®V�º¥åÜ=>�T‚y|ªð“oñGîïê=à®Mã‘«~ÊdE¢Íþ ®h£õ›*¯éÒÓÇ4“ô×7;îöªêgYïDPÑ9p/ £ Ü_‡h< ŽN+xy¾?^Þ=ò¬_Ë¿c{ûl~~mР̾·Òîõ—;¿ß>?¬”®Üœ|º,öO¯n¬]hq΋¼Å@£X X±üÚîZðCól�ŸØZÍ×w¶.žÞðgÇ+[×\¢êªªF]~å¶vÿÒ…áþÖκü0ÇS%Xᔾ�…cfìpy‡º|ú÷�hûãG‚ï]ßûzkþ½¾ØèôÖ§Ú·^»½7q¯l¼à&õ££ÖàþùÞã£ú¥Ò=0¨_pW7ëz9Øê¥_íú "²Þ’ëµzë7ºÔ‰Ù€²u Ù®†«¿ý€{l#߽Ϸs)®ýÔÃþrí;루e£ÿ£`Á×݉@óëîýSý1îæÝ‡Þõ¾·N­xXÏ8¬eêN=ÂÀŸ{ûÓ`û�$Øáš¦ù¥é'oØ'˜ºeŸ¦l?™JígÎ�Ÿî ‚•Ë—ÿ†k…@0HU‘=]t7UÔ—;g³3ï>¾º4(ZË›ÇBhTølëÔ‘±[®¶� V7¶Á.|§çª €êŽ{[p ²­ãÙ³Ý~.¾4»n¯ëW‚øºýAV­|?¬ðÖwÞÞÞÌwvûƒ¥¾ë®�–:EÌ íö;Á+êu¶:ÛãNŒïú¢:¾¿ *-8™×‡½|o+_9¢‹`Ñ‚Lü~ð·Ÿq/Doûù'úOœ¸vâöâ©ç^è=rÿÉ;Nž>ä—¨Ò”€;8ôjÿ O|²?óÃ#ÆbcVn–Vð¯f˜‡)ðPÕqŸrÕÞãÇC��ûvÐàGÚÛ+.Þ;ðxÐw“ CwKåž_nAîóÁÙè ”?äß+Üê+a}å+Aù}ê—ƒ—Öº²VúŽ[Y ʤß¹í2óØŽö²…òÛÛ+Á»†Ú­;ݰ¼üVdª`ß[î¸Ë6ÞPW£à2mM=æA°èÿ Xôn0Që_{èêúöíoXñC}±O<íM¤;#÷9×q_~ÏäPA^ù;.¯âð¾S?Ûíø )ƒcV»ƒà£<ñT BåºíN0þ¨ÛíõºOÖY·Šé†V1¼Û=×­ÞWÿJ?zÙŸ{{Àªÿ?Êvp1:QúàúÕ§§�Aˆ\CÙ]£~°(£`½‹t\ð&㮟ê»KÑ… k¯‚ù÷/‚t� ew¹'Ýó!& òußÝþä±¥­¥•dñ&ˆëŽ��•Ç� [Pº�ÆÓtä …iõÁø0ýɼîdYÔ*AUx÷Lâ>rô9·V^[i?à_è=¸Ô~WîΔ�e¢ô,•Ç3ß áÄðøFÇùá�ËÁ`ªÉC;ÅwÜø*ÏZ[_(²ÍÀ&­Õ/ö‰F3¬ºŽ¹ÝÈ ƒ:=vŸ{ËZ±õpÔ9½ûVºAU!z[ºue©,Èö ëvvBÔ[^v'B¸çŠÝsëƒ^æÊµàiø€¼j)[S[ó‡î—æpOó;Ÿpßéþ÷ïGûîý]gïÊ÷ï©îyàÁ‡�=¼Vú:Ã�)âë0t�“iÞ:ær&) ÎÏTœ³<ÑU2jmŠéÄlJ~¿qwVíp_ VûÍuÿ¾º¼â«1U1uèC¸§cw4¨˜}WvühR¸‡ZÑqÅ™l£*е^zWð-Þÿ½s5úÌÝá ¿ýÂ…þh˜£“OŒgTùj ØR9>¹³ì÷Wër)ËÊΣÇ[å’ÏÚãÈóº¼ñ¬þR° Ã0F�Ç('PìÖ(ÖÃ#Ýb)ÏËê”�)š·´Ü 0l{rtµýÄñüÈ­'Þ[¹˜c&^s‘lÁ èòájÝZ«\9î�ëÔ+Ø�?Rþh† K½ØnuP/·³åÎZæËñZé6z£2¦ïÃàÁ÷ûíàûý’;hùžèÏo¼¸±�-]Ï‘{Ÿ¸7ÅŒ{Sì§(IQ= “3–LÊtïeï�Ê“¸+4žînÌÒã©bÙ÷?Ö©c2¿^žÄä¹;Õò� ÇÁ-pu Nvίí™ùµ¥Í껋NpËV•uŽ�bÄrµ·æÎ¤×Ý̬¬Ý‚¥vÖjÙéOìy·ÿKS·ÒÇìo>ìTAþí`�ó{*·ìžØÉW�lìyK§ä>Dì~šʪ̷Žw§î˜¯îz´ÎîzÎ=<Þ\ÏOìì~&hgß:p[kÓ¿è�üqðF®Ä¬]÷ÒèÜh/¿x¾7<»¿<žbn_˜›¥î&ÊÝ(‹uð†;9Íâ\ù¹q˜J{©}$(³‹KkACE%ñC¼q˜à)w.ðŒ{_·ü·Ü#Ýây7Üݹ÷Wƒ«ââî�÷—§Ù–‹nyœ¹ý£ß aÎRP'™[»-z�£6¼Ýë¼ýÿV°¬À™`;ßø˜E»‡kxcïrÿ ÷ú°è ·3bg‡B;mzÛzŒô]§;ò§Üñ,DÀa¡~Ãí+ˆ_.…à¾Sï_ßìäUt üèjJÂŒ6Zí2�×g«Gžñ��×_šÙvç²K™oWq­¿Ò‰&òŒë½»4Ì×ßœN?heuûénˆsû¡¿²u%ºb·�W:­NU´'ë®3íÿ}§V{ýîp�•ãÉm½lõ– ïïø¬ú {ÙÞ$ŸÚž0Fxá·¦;"ÛA+~Ò}Îí^=rò‰³O´ÝÒú;>^>óä©3Û�Ádu¸úÉO¼óÝ-푘�±Â>�ã‡Lse– œ!/îXMc±Yg©¶ óax)�ø×òjèc@áŽôVý½îrðL°SÜÔBqæÃˇ�AwÙŸuYÀ±‹©S_NÜVs£nP'aým·ÕÊËs)z¡³Õþ(0^ g–ƒuÛöÇCôéžïæ/=}2‹º¨^ûõé¶u,²,gA÷F—8‹J8ü91Y†ˆ"ÞÚɇõ—‚fpÙ Hoî�o�:Q_3WtÜ´E§ŽÏ0D¼ã#dzVÐéAÃV¹ßº+,/µF!æXYvSúzÕgÜÇݧÝw»ãWwê“ý�ÑÆµûŸú`yúT«wþŸºç¾=úäKŸyú3ßõîöñÄ<Û‹é÷ÁôWnܯÐz²¿Àã®§N’ôçÁÔó>Œš/on1vz£€�c>8n¿éƒ]IxŠÂ°QW{îÎõ'b¾[Oë{ö‚?ç–ZÓ�±S½÷ˆÛŒ™Öº³E!6u… 2­ºsþÎüdÐt~= ôyw_ ÕCîK‡Ñ˾ ãºóAL®/—KuV•ϵ£û:LÓ¹5"ö¾V/¸R¥ !\èý\é{î‚Û  *fmŸž™ÞÏ»¾ÌÝ•V¤Q寷Cñ³ûù©óË·^î¸â˜;õƒÁȆ¦å4K÷ÿêœ qÝ£Á+û¤;õL~¦}r´õìÇßþñkÁÜ{˃·¾5F®ó<ïý®ç~�9çÌÎ}¯³Wî.ww–\rÉå’Ü¥HI$%‘’(‘¢H[’)‰R$YrTWq|+Z#uP4Žc ŠÔþ‘)ôW -Zÿ‰#E²¥´?Š: š¢i‹¤ zCóC}ßïÌÌ.í rggwgæœï¼—çyÞçiïìî]¸Ø¿òÄk¯¼ö¨]’Ýò*•x©/æJY^‡ª,Oý/>Ð, Ø(F`£8˜J&Å…™¶c™—YEZ\fˆt«Œ·l*VMHH4óB l�a岦¾•ºMhO�EÄ Yõ˜ÜBÆO>†�N…]€&â)ˆÎ@ªîÄÕ)¶„/cQ ¶\û«?œi³®kœDÑT]MìX#>oW;G› ¨¶!ršVh��ÂS<˜Èž„v -H1YÊ×ÂÉy(—g«¢·é“~-yÃz˜ª aÚe¾¬Á1B" ¾¶bûG6Â…‘’Þ>bª}9 õ6i$¶ÑH>@Ôų'¦Ómu'ºþPß2*‰�ª o0kyìTNû/4;ãˆ÷Þª³S•|yªxŠ+û°×k+®þçG.¸�Ú^ˆõÓ.’IDç'z.Òý¬»ä‹lqê‰6 Öggð«@äð¿9ƒ›ðÖ£w¡¹36¶ØéíÝý5å¬,Uk ³õöþ•ýKö�sÄP±Á„oÔ5ŠÞM@‰ÑôœZ)Á/–àCv“Zûh†rö! }*Òjº ›ˆ©¶K„ Ö8–úÓÐðR<~™ˆ †>ôlµG½Ÿò]×:ÎÂïÆˆE\×JeqXñªXÇ”ÇZ]ù¤�â™ïeRúRH[V1è,�e¼»ÕЈ“?rlíƒq0ÓfÍe䘇“¦‘? ÑåRŸ£+=i¾¤ô5Jœ„º'sè £Å|Iò¯ÃÉÆX.jcc+'–S÷4ò7v>ë’9ÀíÄl)÷½›LŧŽA3Ùÿ�1“A:X“�áLíÍïq^4Z�äâþÅÉrŠ]”±?ÀÄòòÿ)(#cÇ�üV–•Ýêc ד´vÌ}¤j·±l°û×|†ßáíhÆîîäS0»)_Éjqµ^̳u °ü ätQn{ò÷?À’¯\Q Î.iž@¤Øì:òð –�T1@KMjá±ôq¹”nÏ¢±�°Í+ŒgöÕRcÄ&úé_Â_Á`6á¶ŠK¯gfâ“­“b¥¿~l«·µ½åOOìN´'ìau)+VQzô!,l"•~Ö3z?ý´ô�Ñ:ᣑÎòÏ»ÜZ.^`d“aŠ�lDúµ6�üÄQOC�WÜÕªwÙç�”ÞÁ5{z‹° ûrב¾ºúš0j˜›–"_ÈGWÛ‘1=p·Ž±ÑHDcó1×âVî°ÀfÇa|ñ ¾×ÆÒª† =†ËHn£ÿ„˜o¹ðC˜ÉwáER›ÀZ°¼<ÌÝsN<òÜÝϾøt‰&(u‡Ú¤A{Ú|†ó¥‘ æŸ�™º•+Ô/Lþ7ÄÛrŠWÝv¶ü”­ Öt*옜ôüˆ#jO°Nì©…@�¢\Í dúÛVHV=®<¬™Úá2˜´Æ‘F.Â/³Ê ‡‰˜9œÿ3 }öùÇ2�ßáícl1€ËH Y ÀÇ…ôm›Ÿ®¸3‰ *ANjƒ�~q(êî#.aûšãs4a¹‰tvžar3r½5f±|KÌn÷s\â.Œªå‡Õár”úN!7v·øñþq±~B�Ù_|¤zúüÙ‹%èý Ã¥Ú|°+Ñoæ™%B.ÐhF‘Àšû“Sn™†ÜV@Ú°´<ØÑü Hm�Ž�ï±ínì ?õD›óX­Á³¾~ÿ¹e„V›ç×aýü&ôÙÞ°þ‡HÈÚF°%ì#ŠG0žW°R…XåÒš+ƒzTgÕ(îâ"±ýYļmJÂyŒÿ:®F—c’² ÔþÿþûÈ 8çÓM/JOîœ=¿¤ϼ­Á„ãÐ�“TâqC ÔùoJU|4{ ñ(9¨„”×ÃÞs¢+$äéˆr‰¼l¼†õ¶Ã:Xà:ÈPÔ–ÄÉî~¨nbçø#üwý#×po$Z¤w•œ&ۈ‹ñG„"E¬AÍ@ßbïuZbõ,Á‘d�;uï•Ñ ‘­þ_ø#,_³ ‚'è¼玞äÎôÎöÒª*»åYëP2jëåYR|Œ€c^¶Ð¼7$K}pÀhoV8‰Š��rDÑvÕ]Û‚ÐÙž>¾ gV2{¬!Æïœwój£îÀR˜³+ˆ Y‹å ‰äž£žXH¹£Z léùF¥ŽQ ì|ò�ldSX¸9v)a «b·aÔ˜‰D63–OÖÄLÕ4ZsíŠqÙœJUì�$®�™n&[UÑij×MÁ{�¤ä;ÿÙt¯.<·à´w <¨ÂÍ«Ï_={Uw[Ú½vãÖí;»wÍ,¬7R)��âa øÑ'/†^¶ri-#�z˜bX<à:¡0ÚÈ}?AÐÜgi„ DÒ]#î[‘‘ÎÖš%Ëožēt„“úÅ*‹œ/6ÏÛX€0¨5&V9Å¥”ç�~^ ÛBÄyÃ.»®‹…IEö›ÿÒ\›¯m’°á!ÌpM#˪™KRŸâ 1�‹‡Ôyn²„'ø|«¨–¿2«ÜrÀ jËÑ ”Èà?Àÿ€O°îü»hôðç»óbyá@/)FËYf\ÿ`­ŠaÞõJò>RM X1p,¿^7¦Š XM_;Ê IáÄÓÙÎËœÍÈ“¯ +<)\}ojÒ²©üøÞ˜«#!tršŸI=ÉíñO¼RI1ûìN-iHå�æÕZM„Œ:7~™#©çÚù‡Æ`Ùu|›9g? ‘HÛyeC,%Xã°xa[už&ÊÁÇày¸o‰+\¿Ív¶wÄVM§ÚU# ¸„¯Êèzàê"à9œô‡‡™4 Ô�Ñ0«\§Â�ñ~YÅÉhŸì9¦Ü™¿´ÊXüý*;§­?ç—ÛP±VªI±)ޤm‘$hV´� VÂR†DW±$WâˆÃ'\õÒoLrÀØPi:Ž"¸}¾f«C“¹aG²ÂÃÉn-)æHáÆÍ6ã¶-÷Ì×,6ñ¸ ðj+°Þ•“KãB]sIºEB�Œ4HxbÒ�{g°!!U¾À÷)ŠãdÍw#ÉÜ8\ò¬±ˆmi Nt:°�qªdPL¸1)—Ö´0�<*¯åŸþ{ø øÆÇòìcƳŠWHY¹�vÇëLÖJG‚uX¨8-h²8hÃÅïz£o­rÒAÏ~¥�Ôót˜#Z£>Q!Ë#¢‹ûÔö« ìt÷ÁnFŽã Uïç–%ä§*\+4·±‚“ä@ñ‡êìG>³k†òÍ›v‘8l2SÂGîÇozˆ“ÃؼœÄ^ক&KÇ ÃŒ%, }ËòkøÌf‚ãp²‹Ñüç/à¯É�Ëp žFÔö<ÙYX»t|ï©+·ofs�)ͯò'¯Ýxú¹g矯ÎNçõÉn³{qýØå‡/ ˆ8[i ƒŠ7À<í°æyH÷=ÀxG÷oT&åÄ!øÄ©Îö…¶k¬Î~Áþ±¯ž…;@—0G½Âz`{ ^äY¾Ö±˜¥�—�¹j ®<ûD�+Ð]›„ÉÇñtÿŠX Ò'Íf2«UŠ\Y? æ0âœ¥ØÆBî³Æàº•HªÀ–  ]ú‹³ôKµE[HB.a¤Ñ?uìÔˆ‡EsØç0 ¡L^ñ®K*xÝŠx'%_æXE´'â$uÁjg}¬õ»&E°nï�xs9h#B¿ ïÀ—hž~ƒyu/šßœ?òö›7n œH4eΨ_ÎÑzƒ¨6ë2ØG`&HÖÀ‚@¿´L=V™3føMƒà‡ã€ÞÈè:Ô­Gpã4Í[”Ežž¯Â–K‹09¼¢žó‰w¤e6b(-Žz9l×fbž¸IZˆæ6I7ÚâÈg˜ ˆtR>ýw‚€ì�ûëSo•U¤œWì1¢ êÛÍ]�2nû{ôC‡Z¡‘Ÿ‘ª”3&0Žù°.”c6XˆþG‚l‹‰cU>‘Gxð\s¥Ø6èù“-_L®+Ͱx&XÓçR²ðHÓÖ&†(GíÄÉz–SféÐ÷?×µàUøø»Ä2O¿ôäKÜ-fÃÙÍÙŭϽrêÅgw®ÛCG>9kF—Á9¬ìŒPÏ¡ß�SãŽ|`PÓ+·�û` >¸NÅЕ:¬€½¼,”x%sLJ:U¹&ì‚,EÜ­r•»¼ýNŠT ¬áA…�*ÄÊ"z'ivr Æ™Xfq™ö‘Sf<œMb6F–â€v EXötÚ¹˜7PÉñ�*kÚ-Œ¥E;Œ}�™Ñö2ê ˆñ}1 ¸S|ª‡€_ÿ ì/ÒU‰œÔƒfj~Òððú2·Ù•6¾¢!Éù9¸oÁúìV—ñWõ㘙-J®^ÝEV.œ|1mfø²�æTŸì‡kía}ô>ý�ˆÑãðÂ�·à7á·Œî{õõ·þÑo½4Ò}K3Ü)Xn$ÍdLo/~Šì˜áµÁH†?ö]Ðdà`L·92vö[ûúÅ¡ÎD/9xE|ƒÚíìäÐeC+6w«4‚äÚ‰ãø´Žù¸R>Mmªí)á0�8è&†Æ«ÔiiËlzñ› 9{D}Œ6�"Ëî§ã5…�õ5ß™·2—æ FnEfaÕL\“ÎÌaö­-¹‘'uÚ1|1ÑÆÐªAì�vàa!�nx¬Bsd ÖŒ÷˜À@ˆE¢âGa0RŠÁ5w–±§âYÌEÅ™§µí�·]°)ÖÆÎéѾBi-´·•¦ ÊÔb›EXJVüà &ïq‹-.¯‘ë¹€«<ÎBZOé‘ßX˜xœ¢‰ qÒÑŠ³Œëñ.†ævãáCø14ðá42PB"õ¦ÕìNLÍÌV 1 m”˜#Rên˜·„%,¼£ŽáëG{šËÄ1;1´/Dš»5Ÿ³—á¼½ÊîÃ�ÚoÖ—q$oœ�¸æ‰G¾íB­Å½¬l,ÃòÆ*¬ÏðŸÂ_ÁGˆJ߯ê3àëã»7®ß}öþ³ÙúY¿þö›Ï¼ùÚ›eÇ8˜LöG(jh³øU­Q¹ºÚŒÚˆgQ¢Î2\M©¡–C Á2AÚ/ƒt8ÔõÙQ¡{#rñÔû^Áž„«H1d-c¡íÛ MzNÆÎ!álN ËÌæ6ã–rlÑàõX¯À|Ìiñ¬¯ ¬ �dÇD‚±Ü�ˆ*@‚5Ĩ®ÌÀ öçZ‘­µ–|$,Y ".Ç×Â7‰‘�!Ò'Šï[~ÀÝ ´Z�cti`F«‹ÄWwñIB�¯·šb²{u, ËZ9gYD”—’Ž =Ì�ˆÁ� $ÞOã*¶‹Z†F|úgÆã}iÄ$îÂüNïÑýg¯É‡Ÿ¼ñø¹3çô¥ —¹$ö®\~F]bçfñT±½Õ}®;åÿ¬NYzgp…{ýÂÝáýMfÓðȺ:!årHÒÌOÌ@“pÁ'9{ &™ÅA»Æò„Éb[ðD…v G¼æW`7ñ¥ÿ‚õü}8 ç1Ûj;YÜEx¹$^~éäå,Îyã^d¦1šmFv<ã,Ó›ÃÝ£½q‡vœDwQ^’¡1ºL›™ážü|Ú쫎çÝö«¸& AAž–£8œÏÇjÒ÷fY_4|uë’Æ–kÚ™êêé·Ç1o¤Ðq=TTqY�Ï¿Àbuy®k¡R„Ôä`ô�u|1�‹û¾'Åø€¤ÑTë$^=ÇjŠ™ˆ÷a>J2Ñ:]Ò7í96›ž&ß”Ha*µ Ü"xȲ)¾÷¹v…ò±�ÒÖ#Ò2�‡ƒ¶õ53ö‘ñå9ÜŸaå¤ÛÒ`:O~änë4Íà�ËÃÔƒEQ¹\çþi–ûb-ðÀqH#\—r¡Ãïaâc+À¢Qc¬+5°'u�)ù}Ú™-iôe¼â˜«däÛÄgé²-Žj†ðöaìã 9YhÛÙ~WÆ2²ÉÀåÉïxnËŠ1�óßSìw,¿JÞ”Hƒ±y}ÑAŠ/Lšßm,€*Vç¿Æêü ¼ _�_†oïÓDðØeöÜמyÊ ÓðíïüúüãW¬¡[êPñÄ2Z׿![N¿4BRÏ/‡‡ÃpÛœáûR#(FRXÉŠË·è�å�-—�×´}Ðì‘`�|°Âÿ$'Ç¡T‚Í»\«Ýs+äÄ7[²h¨P…B’*¶‚Æ`ÇÁš„x¼µA0®h'²¹�Îa³vTá¸m«nëùo$¼FýŒxt"Â༃ˆÓÁ’Œ‹øH&öqæ5[‚µ„ʱÛÞߟ3ûºWèö‘o˜‚�ýƒP~àãëGd ŸØÅVÀi˜DšxìÉû»N"é×'†ì ¦=P)ÞeüQ’|}{¦F•†6%’)%!K`­¼–w�Hîk~üôx«+*¡c ¿ñ¬¿`§Y#¬è®˜QlnœÄç\¬ùä–ìÂi¸m|^—Ÿf'�ß¼qóÑzªÒ.¾ÔÀ÷jôO*ìÕ9£7txx`—Ë‹Ñ °8˜ÜPÅ7~–›ý�>˜R ã`¦÷Ç5~&[V(©“ççXÈÀ¶BIÕòõÝw‰—GعÃ$…Á¤ë(Ë_�Ô&¥`âYá ’AUǺ€�µ‹Ô}ý8fËŽÒv0楱íÄ‹–mrî�¿�¬mÑž«I´º¥ù=¼\·,ø² žAì6"b™ Çö“I*8b4¿Vy�¯Œ¢ŸHxÍG j¬�wK.-ir‹“I³"³±ÈÉüXƒÎ±øØ‹ÿÄì;ŸÁ|ûȡޅ÷àËðuø&ü\ÙyäÕÏüü›þËû�äo%Õ‹ûWö¯=v|÷Îs¯ßøÒ�¯Þ˜ï­¼±ò啯§Ÿµ^±¼{oÝÿBðÅ·³w³÷²K—¯»õÌÝ×–î~ñ+Oo|mcu£R~&ÊГaÐу¶ ¢n‘âð®m«7ÐK·gosó�ß—ŸžÒþ¼gÒv³ÔÍ`¼ü~ø˜þ�4Ù�/¤×ßEzÀ…ÛvcÖƒPÓ~6 M‘�kuSÌþFî‚ëÒç• �g÷\Y‡6FCGy6´5~©ØHê\ _SÅËrdtØŠñy½oú&Sµ•Bz ÁÀ73Èè{úÓÍëzv(¹®717µlwÅü'4©&™7ºàøzIr,ÍÎé)>Ùk5ëkšÐ®3ósæ+¦n�>¤æx*,<_?aY)8ˆ¬çÓmK§à†ø—Cs¾E‰Ê,å4(­v S ÝšmhOÍÂìñ$ÄÃ×yÁi›·È2ÞAIŸìðàcdô©41{^Æ ÿüKøØÝ9ýüõ{wן»ÿÒ¿ùøý�òïþõ¼ùúÏË»ðäòíåµ[Ÿ¹ó¹�W_Ü~yûµíûü¯æfäX˜~÷÷¾ó«o}áW¾öî{•�G­ÜˆhBSžQèwŽ,òYƒÈ¢íÜ¥S§œs� oåñu~8DFî,ó^†—ö/R΢è0Ì–+F*áOƒÏþ`'´Ñµß c¶¼ÿíÜˉ²eê,s¶‘ÎA¤Ú!¹´mi�' BøÕ·2¥Ý†èvh!_„³È+Ç8ígIXƽ+9"A!”‡-•aû‡¸@P‹ß4bˆ?SÁ€ïÒÇ X‡ÜáÞÚ×H@B íx}+Ùªy.R8g© °Ý±ô8ßð3!AnV> endobj 15 0 obj <> stream xœ]‘ÏjÄ ÆïyŠ9n‹wÛB l[È¡hÚ0:I…FŸ‡¼}�³l¡ ?f¾�ávê;g°÷èu� FëLÄÅŸ£Fp²®5«Ó…ʯg*–Åýº$œ;7zhö‘{KŠ+ìŒðØ[4­›`÷uê3÷ç~pF—€·-³Í‹ ¯jF`EµïLnÛ´î³äoâs uaA«hop JcTnªá¹Zhžsµ:ó¯/8ɆQ«XÆeç¼æm¡‘ :ÕD·D’èŽè@tOt,$ÑyJòä)ÉS�§”eÙËVÛÚ9[¸f¢Ï1æ8ÊJ[ÖáõFÁȪíý4‡¢ endstream endobj 16 0 obj <> endobj 17 0 obj <> endobj 18 0 obj <> stream xœí� `E¾ÿ=ÕÕ=3!!�@.È„Cî[0Hä¹Á,B䈈È� ˆÈ%*"+(DTDDDDDT APñ@e¹DEEQ6²®‹ˆ1ô¼ï¯º;™ ‰à[ß¾ÿߟùÕÕuWõ¯º«ÒˆÈG³IPô„I7N¸cØš“D×™O�6mBòt£!Bœ©cÆ�F|´•hÌb¢¡G�½uÚm#ß Òâaÿ`Ô¨‡E=Ÿ²a‚Z°æDžýõo0¯­n3}äœ+’víË!’gFN¸iìõž[~ ö-ü7Ž˜zkꕯ6õ�Î òdçÍ3dÛŒ>oCÅŒŸ(^øsà�zÑ®üyRѦŠû|7!,{j*~ͱVu¢è´Ÿ'ýÒ¬â>ǽøO|sv‰o!zQ}šFÈCÑ”É1Èï=i�º¾�FrHÏð‘X§¥èõi·±•Ê%´Ú«S£�fx&Ón±ž6ƒµzcªÿ£ÂOcE?¹ßS€8—Ðpp¬ À ð˜åØg‚Ñ¢9} æp.úZZ„lÝc4%¿‘@ùò i¬…¼ÍÆXûÊ÷2�EFs¸#œy~p7PyÌ–F=øí¦‡äÄ5 nˆÓ{€Úõ©Ž|/P ÷Ñ . çr!ÒÿPG€!r$ �y´Qß¡ä 9–ˆ¸ŽÍ[h£gÈ—ýl³·?m`w9˾ŽÃ‰qýn”ó%ÁoµlM)fu•õ(æ}=Ç¥‘§@ÓYrùݺGýlRõGÝ 8 òÞô’–¤ÏC}Ö§ÇTý£î•üÀå6m2‡²uÒÆÊ¯WÍáö�Ý€û \?×ïòv¥‡Q\÷ªÞËÀ» 튶pÛÁíPÕn à*¤�æ¶ÃlE÷QCÕA¨¶8 ¹ õÆõ^Þá4@µÅØÒ  9mñ5dMUÿn;„ÀõÙKµE0h Õf�\VN/TrÙUúåHÕGÑæ\~ÕG¸~8�‘ÜŸÕuåIÔ¥ÜøÞ|uÕ�Ö¡ŽSQNU×�µ @VTmÀõàHy×ÝÁöÀ"î§jœ ¯*œ0¶\ÂR¶íú­�5k=çŸÚiÓÆPi£› ®cvãñÆu"}ýi¤wìƒ<¹Äµó¸ä±Q®Ä˜Uã&Dªþ‚6»TÉã]�9îcÜÎθWc/D:ã»’13p«š{Ð' ûB¶P}ßmk´±éE˜(Z¬Úz¶ÝžÆ{4JÍo·‰�…j®@Ò;ˆ6Š;PîêKN;x¾$¿ž8Åó†±%°È­Kã<�AýÝà}†Fš=�ÖU�[U>칬%ê&…ÓÒGvªzyš’Ýú1ž§íˆgâimÌE~† Œ¶(³S>£-Y2•zÀ>…ççbû2Ì3yvÿ‘�6ùa~·ÂDÊ�èAùþá4È[óì»_ù6R¾oå{' oÎAxýI/î —ØFj„Œ7žoxÌ_0Tý~º ß¡l(Ó@îëÁyv¯ó÷F}ô°ïª®CÓÁ¼ÄsÃã>d¼b<=‡4~AYó¸» vÿ¾­¸ß‡–5´ßM ôÏèFgœËãÊøò=sg¤ë¶]H~Êw®tû»ø;âz<%qÝx·¢·r|�ò‹Àv}GàG™8/§îæ|©´®¢¾ú)ê�¾_ùn¢Ò.)¿=Ÿ|I#Œ,„­GÄ��Ãvz�Ÿ‘ÇÕjLØ÷@uÿTód>Âö·ï£Œé¡é˜kÆéƒhœ1ŸÆÉOhœŠ·¿ºv�”W›šË*Àž§Õ|£ÆXº›6°Ô§Áí~uÿÝdlW÷à5¸#®ðÚ¾˜\—“i”qî}½p-�Í×�Š ú¸íá¹mÔ}»_ ãø;ýüœñƘHým�„tÜ{ºš[è.¹yŸRi ˜Âã*Õ>ÑHå•·#O÷pþ­µòS¤Ññ¢ünX_{ä{´£Aæ>Ì}µ‘öxJò¶¢:Æ7Û×äQ#ÜÿÉÑ�nFŸ@7ñ�c´]�ƒž»Q§âª¦Âö§hÏhZ Ýn5ô�€õËsšN+V¡_è 6´Åáúß§¶ž¡�e=©ÄNCØÍ³…+œøà–RE�÷¬¦ñ·öÛ ¿‚ì¹ìò| ô®¢;¥j»�ß ÔIô¤X;/*þP¶²”0W©¸zxÑ ¢ó7BÎÐÁ‹ {A£+ʃ{wHhWç# �ƒ7ípç‡ü¤ÚáTXèóçÿjèïYH¤cµ+`¾n§À ˜ý¶,z ¬ J¯  ÐßI�óu““Ïù%é–Ê3øZ{ÑD¿ô$*ĺãèèç·ÙaÎpâøæÏ�k8Ÿ·@®±óÎe<ÿ2ä[�)NX¬%ŠÖ‘·Zö:áü§ü1¶9Àu5,p˜`s>É1�’ËPÿó1öbnÝ }}‹QóÙJôOÒSsæ.ýFèÐÐ÷y÷j×sûè%ë¥ÆžÀ‡ÞJ�Oõ¹�CfjàóHà³N`·H¦ÆÅk�[‡WsÑ>[7âñÄ÷,¾/°Ÿ»�QôŽºŸ²ù˜£¯bÎåyJ¹c `¼O“ù^‰ë»¨ùk�à9‰ç¤û˜¼‰g75—MÆ}w TsVƶ£c"Üjù<ÌÑÔNéÙ§üy.΢þîh\�±žDõ9N£æ‰zÔÂȦùÆG'­Ênê>×úÄ5Hÿ]f~ø�%Ï_ðo$ÿIã‹çzWEÅ?¡KÞ‘/âú�‡KòÆ~båxF¾BÞe˜í ?”f#ãM‡žP ú[ˆô5…— É×(3t Wòõ¸ïæë4CŒ¤LE]˜ƒ@=eŠÝ4ƒÃ»û^BžN �<¬G†Ùz_©üÆQnY\$¿¹¥dÍÉ×ê+i†vã%ä]Œq7å†0™ñNFÜÃA¨DY¼ã‘—`9ფ8F30ïç+š L ¬£~¤,�DVÊÍ{êú}ÊâgÎ�ù®tÝËóg©{PßónÈwåïIבù!2ë·üÝt¥ ËA~—¡ÜÌHÔ÷aºÜøòŽøjS%õ>ë7(Þï•Eºw ™æ æVÒ‘Ž×ø‚Lõþ« Œ?‘i\O^ïû¸îM2½�Ixo!Ý}o_æb¤±Š¼~�t?‘é›@·qŒC\³Éä÷k6�½`Ì™�g@8+>G˜SÈ[kä±+™ˆS`�ªc-èfYûÀÔ~€H÷6òúÞ$Ý÷.ò;ù]�üò{¸ßÀœˆk¦#Ÿ#�9(3¿_ù ÌÎHçY\såHg%Ò9‚kÛ |+UþF¸ïÝw�öûÇÀ»ê¤›g'}7ÞµÿÕvù£Êý[y7EÀâ÷Ãl¶÷ h�9{xÏÀÚ2ó=×ð»äµ‹ß'+Ý“¨3˜Ã× N Põû2¿[^îOj]!]¥Ÿ Xüaû‚Á*�Ð~àìm)¶óÞz‹ß[/¡ï©ýö¾ˆ²êÇ;aSŸxŸƒ¬ØÍï¡í=ª|js¯+¡�‡·ùöW{kù¹+i�Àá}*ó�Ú‹ vâçµA|j)íûxˆ¥ì@xxÈÙOÑ4—Õµ:Œg­‘¼¯†h�çÚ\vªöÎWÄ|êP1÷ÝjTW©%T«B-¬ÿž„þÃ÷ë ê ·+å’ÀQ'l|D ô�%T tqâðÅ´ýþà&v™Ð-%hW¯çÁ•löþDõ|ƒ¡ƒA§ôm¦-Ðæy·Ã­Úù-�¹°¿@[¼Ëè³Eš‰´cº=¨¢¿MÝäRm|B=Ä[�æ{T‰Ç¶o5uæ½Ïðg�ýîßœK™Æ<ºÖ¸™Þ1P¹‰ÖyëjÒßóiu ?Å>è)�cná½’Lbà'ÏKä)ÞG2†² ~vyXíÁN‘‡i©1•º«ýÓÑ6Ûè #åþ:Í?‘Çé4ý§ æÍlÿ^ôϾ¨«¯ÏË Äwl£ÄÝBŸ‚{pæ€*¤Ag¾ óHè¡[${vXŸ…”¥£ î¾ìˆcÅû³ÇÉlp¹cæÈlÇÌÏŠsÜ}œÈO¾÷]gïû{ä�¨JþÈa0ÿ¬öYÔñž¥:WA§ ÚkϺ°zoðôÖBÌ©_8Ïÿ·PŠï#J‰8 óN¸ÕS2Å÷9¥¨ðÎ^yîWþÞt ÇÅ2x¯4ò—�ñ†1§Ý9Å‘l_âJ£Æ&ÂP"ð;áæ9×-rü]Ÿ§º6X2EðÏ ‚ä1ǯ*hþáØ_–\ëùª$¦ØÎþCƒÒ¸Á sC�[Né¼pyU~•? æ—l”Ù Ÿ}aÙBëO…k {+È®¶,ö§Ûm”}Š“ÿ²êË5·.N£©ëÃõlº¢ø\Æ'4T>„ûÀ˜[Æ`< 6cí5zP.#wØgGÔžü%è¯ê܈Öö¥GkÎs1î9=®‘¼¯gتâ|”�ù{ÜÓÖcî¾aiÌÒZ£§ds%ûQ²>›ª›Q/ÿlj ³²3HÿvÆ“MÓYŸG ánu¶‚èùßS—áv‚>µ¼ù߈3”Oy6Þ¡´”Ñíü–•~(…p±ðï]ÁmLJ­´ýx4³=Œ~�M¨{(NÚß…æºÂíŒ36"®ÙX‡ý¥7ìè)6#éQsÿ~È N< ®»ãèN5–v8qm°ÑîÎGÄ0ZÊüý!¤|¢ëp.¾Ž´´¬qêšCü—:ò¨¾Ÿ2Á$Ìõw•ÌI6â[­º««¹Ò˜æùȘ†r»’Ïyõ&÷ØçÔxÚ‰p;énWêǵã· }—Ó*&¢�#ï§i0kFåª}—ü|ÅY á›ÈaàWý}vi<ƒ/t+q7È3e[oË`3­ç¼ �­Í(�Ó5ê��9¢�Ì R勦] úþ@��'^߯íEýeØ”ggéš÷úàx~�(¡áÿ_#´>ØM›æØ§Ù„–÷÷¸_ |m)óÓA¸u<ª$œj·QAù-–F�@Á¿†¨Œ¾G%°›œXâWÞ5¶™ûï¥ ÇØ¸vý&î÷Á`!©(Ïþ{Ã)~Å:ìŒ-Á$Gþ&zkEžñ*ò»»‘€u~e¦ÇcëÛ²ê!8Œ÷ M¸À?4/Áñ®…?�ŸÙ°æÍg1玂ÌÀ<0ŸÑ—Á^_¹m0“h&#oÀú,‘fú~¦ûý-�ß6ð £w N<ËÁF‡Ç9� ûý zòGÎtÜ9�™ Îaý× ÷ŸÎ´Aä¤�ëXÊç•ùYÇíR¸Å{mp±Ý<ÇXêßÑó¨ìkÌÚµ`'Ìç uPó`§|ì~nÉ�c�U^Gƒ·`ŽÔ³T›N·ÛV«ù$úš&mè{‡ùÚÅGÏ{_Á}$Ú¡ ëAZ$îmBΆôÙRqÜ·,ƒ×];Y÷Ñ^°ÛP¹™1Þ§i°ÿtB¸þÁpXÃ^Oõwä5AþÓë/BÖ/ƒ–Žäó•÷Á¯9ä÷�’ãâ5Önk¥à5ƒV\é¸mwòÍé\똯shâ¸7)ƒfvžh¹O¦s­Ÿ û=í°<Æ9¸é>á”e˜ë؇9¨xÐ&#Áí!@ëÊÍÀð¼E›<¬;l¡M`š]Fí1ÐËNO㺺¬†y‰�§º�ö*øÔmÀŸÀmðÛÆÀÌ籟¸TýÅî(Sœö –åq"ÇM+ SßF«bC³l´ § žr¹mçš'ƒ\°Æa tÖ±`4ß‹Ä7ÐI¿Qzìaþæ�ÜC‡ÁÚ ¶®ù:Дè¶À•å™YN12qÏÔ”�¸ë?Ûÿÿ:ÿÛõÿ¿íÿœâgkZEõ¬ñÃÔHÁëõÊxž ôä’çm]"»•<׺8�=!n|m²úNÇüì!ˆOþ»þÿ |ŸÙ$[ÅÏLÕsÐ2ü‹Ÿ�2=™ßZ+(]ŸÝÎP-?3°©Áë¸õddùù2!pL£ êû#©ƒÚ3±ÎÙkâîeq¿ð% Wgùý(Ÿ¿oK)¾=ÔÎ;Yí±èåžÅåó¥ê|;ïûšF«ù,¸Ú›ÅßÂA\²'5“£(Uv£k¥—’!ûz¯¢,ù:Õ…l%SÙŸ2`î#‡S[y õñv£+åDÊ0ãèJ¸w”·Q†¼‘x¯F¸NÔÄÛaGQ6Âgðµ [^�tn ÆÞ>Ê=[.X² e{G(¿ly5”ƒ¨1ÊßÎ[a雷æ½Ð‹òy³ÃdÄ[üN¸øyóhèÎß¡^«¢ÌE°Cº×z~E˜jÀï‡ÌÞ�7äPØ¿)W};c?å"OóŒ6´^í뱿c“Ïvuí>º.8/ê{C¿Ú盋óÇç^ôÞã|GåщOíûXêÈ<´[‡Ÿu…<c÷ß±Æú�Dí5sö°ª}d|N{ E¨ï§ðû¸æ�7ôvÎ÷‡¾P}cPñÙb÷¼7Ç�þÍãÔ+Þ?¿E� o�ëó‚¿ýÄgCúT®ê|vØÙóÊïêxo¨g)ü–¢æ ÿä(sS°L‡ÞȸßeQßx¹›6¸ç`}_PŽ÷rªëËA_z›®÷îP{–7z7Ñ óFšì}“†˜=h¢¿ Ü Kö–y{ ÿ ™4Ò{”˜›©­ùòÚƒ¼îU÷Ì©¦œo$\¢9Me<=°Þu‹h�H¡z?šÌ¸ûß¼™ÈÇg”äžÍT{OwÓhÿ{ä÷ަþ.�óh€/r<ʲ†üæÐ ÙÕ–|>œ¿ Û£þçbþ{ñôÇœ5•®Õ3iš9€ÒŒyäwˇ¾Á{-ýf.u1gQ÷̧#J¤Má³�²/õ2çÑ&£Æ× ܯ¯A|Ÿ©½9yƃpKQïC�ò¹Ð`ø,ªKè™Tq' Çi ŸG3h`©ó¨ï"¬{Õ=ƒZÆùS>¯Êñòu*Ìó3|nrÍZ @t üÑvuþñš#Û äÚKÎg²ù÷ÛÕ×Ç�³®eI>³YèœÝ„tÏUêOãZð{íê¼esçÜ%¤[N>ƒiúi±¼ùêŠpËqØA‹Å‡¸îðK`£Ôís™eI>£é�/©·âxCÜߢ²þð÷cøg…È“Omù쯒{èfÛäVZVrd7–îÙdäM�Oš}F™ËÃç”a_éž?uó¯ÎhöÙåà~¢Î§~Bó/ÖŸþåþÒÔ9ÞÞ˜Ã>GZµ¡vu¾÷ìÛÑ_^hW稗 íÀþÞ…vç|õyòr×…öÐñ Î ·ÂœçÚù|ðdZ\ÜÿþA`¾} ¸>øŒvº_?óà’þZ¯n¿ ío¡ýKþ˜kTÌ•?QG£2æ�Ÿ 7U†þîȲz”÷[ÌËÛ�ç,ÚËç$¡‡ïÕ7جOä4Úk¶U:Ð^9îŸÓ^ÿ\Úk| ÷ÛñïÅ}s¯¬ s?„iù2â„pQö¾ã#ØcáwÚqçpº/Kîóâw aþ'ôé*m4°Ï6É;hú´ØD‹DõÀ"£?Ü3(ß{íQz¯ †^÷®© ½m=ôäIÐwO£¯­Q{º®wöv]Ï{âõH¬Ù>P{üùÌîQùgõÍ’Eèg¼‡yœóÔëYGÓÚßAÕ£¨5ürôu”lf`ÍzîyüÔíïÛýÖ÷^õDºë�øÞë¿ë»®Ä7«TÙ~ã»Uj¿Õ¿áûTjŸ÷‰¿EÅß�º�f8{/9ß!xü"ßúw©ßö‡yç?cþÐçÿ}dÒÑkz¡½¿.“ôˆou‡¹�/³ÄÝ7�n(#ü�ïßHy¬éš+º |[„Ê’ËZ ŸŽu¾18Öù–àp�Ãf¸ß¹x)+¯Å%¸öRë�`+H¿rýµ—K‡¿Pç Ö/Û¬×Vzöf̵òÙMÏë 9M›B‹ ó0Ð!Dv ‚íc@/Gªs–\Fõìj²ý�š`½0X§c=Wí¡†è~ûÕùΛÚ®Î<î  ê‰êÝùsd˧,Ô·~œ{Y£¾3”%ˆ{À@–ö¹bÙZ}»µÀþ ËÒf}'�Ñw²,íÎߎ13XÂO}C†¥k>ÿ5›íïÂØg£ùÛ2r6K”y¥ˆE,Qü-±F,qm$òÉ÷»Uüý–!y Ê3“ÆìÁ2$­õ¸Ÿ­gY:ÎàkíoÕ° ¹¶spø`3Oôb:™w‡§›ûý1ÖÔ:'”BgÝD©uO9æRkŸàuOé5NÉz&x­_޹Ôú&Èì¯Os½#î\{Ý­Ö¿³á¡ù©6ÜØGà7nì"4ŸºÒ«~Mª ~ù cËÃ�äU•5C•Kª_]…ªD墩_Ê Ì�+…e‰¢_È"KüÚ@Zâ—sWË_fŠsW‹Ÿ ÅYKüd‰3–øçvñ£%þa‰,ñ÷dqÚßøå÷–(ð‹‚Lýo§üòoÍÄ)¿ø®P|»¤ªüÖ' Å7…âkX¾¶Ä K|e‰/-qܵĖø¼Pû,^ËŸÅ‹OW'ËOsÄ'GÓå'…âhºøxºü¸P9+�T‡EËñâP´8x BL"Ä_â/…b?âߟ.>ZZA~TS|øA¬ü°¶ø`_%ùA¬ØWI¼ï÷«‹÷bÅ»ïl—ïZâ�½ƒå;ÛÅ;³õ½™�·ÓåÞÁbo¦þvºxËoæˆ=‹£åKì®&Þ°Ä.Kì|½­ÜY(^.I¾ÞVìx-Qîh&^Ë�‘¯%Šüíe~ŒØžWAn¯(ò*ˆW‘Ø«–Øf‰Wªˆ—+‰—,±Õ/ZbKœx!Al®*žG<ÏŠM› Åsÿ\’رq¦xÖj‹g,±ÞO[b�%žò‹µ–xrM”|Òk¢ÄšLý TÔ…b5.Y�,‡x¼P<†Â?VMh…Ö zÃ Ï ­“– uòì£]Äùo¯­Ð®�ïÉ÷èÒú äFºÍã×ÞÖ~Ôk´-¸ê,�ÕR`kéi©�ÖN"ÇËi¿ ý´‚€^°%܇|M?Òd±Òò�§¾ÒsŽ ´yžužsZM̓¿•´Ôæ±Oª¿­/€/jGóˆæ"EtÀï !i+�‹ãÆHm:Âñ_þºd�g·gʸƒŽ¡\HÝ3È3ó‚Ži›´<ä˜h¾¶Ijדh…±B@§¹nh¿gê£�ª�…´ÐhJguƒ~=´¡úz®1J—»4ÒÒÌnF%ÊÕº™óP­iÅÂ÷�ä.û/By�ꔫ×�!ïÏL·Þ´é´ÏÓF §UêïCÚ6zˆ¶ÑdB¢¶óx¾GX3Ó·h±�è ;‘â¥PP‚Þ+ÎüŽ… &L˜0a„ &L˜0a„ &L˜0a„ &L˜0a„ &L˜0a„ &L˜0a„ &L˜0a„ &L˜0a„ &L˜0a„ &L˜0a„ &L˜0a„ &L˜0aþ?ÅC#­\}¤\K‚LJÉ']ãÿèÀÐj¿¬yå�N�÷,hJÑ 4©““ž“6R§¢É"©èk+׌:÷ã$£žú¿0´üÜ#‘$¥dV÷ i‘W¦æ1È}0£ Y›6M©ñ‰¢‚&ZZŒHˆ0MKÑF5·¬æÚ(k¹bÍÑf1G´J‡´9ç7X§ 5°Ú: #–jÒeÔ”&g¶¯æ7Ò“âcâbkET¯¯Ç¾5=2×XÖ .7~YÒC•boŦÞ_}oÅôÑŸí)@±OŸårsMDŸhv&ã„r‰>ݤûµÌhù=3°†VÃ@›7k…ÖiVÅ®Y£6ªC«©5O ²Ç…3š_Ý«g×®=z^�wøp^Þ‘#çÓ�‰§>ÿuQÞ¡CyL×^½ºvíÙË3jƤÉ3fLž4cýǯ½ö駯å-:`D}íµO>yíµ£ëï˜4yæÌÉ“îà~­Ñ~tî6Ú<ôŽ˜Wh½GóPe=ºc¢1Æ+F×~VÚ> endobj 1 0 obj <> /Outlines 5 0 R /Pages 2 0 R /Type /Catalog>> endobj 4 0 obj <> endobj 21 0 obj <> endobj 25 0 obj <> endobj 29 0 obj <> endobj 20 0 obj <> endobj 5 0 obj <> endobj xref 0 35 0000000000 65535 f 0000183068 00000 n 0000182999 00000 n 0000000016 00000 n 0000183155 00000 n 0000183698 00000 n 0000049384 00000 n 0000049576 00000 n 0000135034 00000 n 0000135178 00000 n 0000135940 00000 n 0000136127 00000 n 0000136446 00000 n 0000000282 00000 n 0000169071 00000 n 0000169219 00000 n 0000169561 00000 n 0000169779 00000 n 0000170102 00000 n 0000000354 00000 n 0000183579 00000 n 0000183235 00000 n 0000095219 00000 n 0000095413 00000 n 0000050182 00000 n 0000183346 00000 n 0000134257 00000 n 0000134451 00000 n 0000095831 00000 n 0000183471 00000 n 0000134869 00000 n 0000134909 00000 n 0000134950 00000 n 0000134992 00000 n 0000135867 00000 n trailer<]>> startxref 183753 %%EOF peony-extensions/peony-intelligent-data-management-service/condition/0000775000175000017500000000000015257160277025156 5ustar fengfengpeony-extensions/peony-intelligent-data-management-service/condition/condition.h0000664000175000017500000000775615257160277027334 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef CONDITION_H #define CONDITION_H #include #include #include #include class Condition : public QObject { Q_OBJECT public: enum Type { FileType=1, FileSize, DateRange, FileName, FileLabel, ConditionMatchRule, FileContent, SearchLocation, }; enum MatchRule { NameOrContent, Name }; enum FilterFileModifyTime { ALL_TIME, TODAY, YESTERDAY, THIS_WEEK, LAST_WEEK, THIS_MONTH, LAST_MONTH, THIS_YEAR, LAST_YEAR }; enum FilterFileType { ALL_TYPE, FILE_FOLDER, PICTURE, VIDEO, TXT_FILE, AUDIO, WPS_FILE, OTHERS }; explicit Condition(Type type, QObject *parent = nullptr); static std::shared_ptr fromJsonObject(const QJsonObject &jsonObj); bool isValid(); /*! * 设置æ�¡ä»¶çš„与或逻辑, 默认逻辑为与逻辑 * \brief setIsAndCondition * \param isAnd */ void setIsAndCondition(bool isAnd); bool isAndCondition() const; bool setFileNameCondition(bool contains, const QStringList &keywords); QStringList getFileNameKeywords(); bool getFileNameIsContains(); bool isFileNameMatchedWithKeywords(const QString &fileName); bool setFileTypeCondition(const QStringList &suffixes); bool setFileTypeCondition(int fileType); int getFileTypeSelectionType(); QStringList getFileTypeSuffixes(); bool getFileTypeIsContains(); bool isFileTypeMatchedWithSuffixes(const QString &fileName); bool isFileTypeMatchedWithSubType(int type, const QString &fileName, const QString &mimeType); bool setFileSizeCondition(bool contains, int type); bool getFileSizeIsContains(); int getFileSizeType(); bool isFileSizeMatchedWithSize(quint64 size); bool setFileContentCondition(const QString &content); QString getFileContentContent(); bool setSearchLocationCondition(bool contains, const QString &path); bool getSearchLocationIsContains(); QString getSearchLocationPath(); bool isFileMatchedWithSearchLocation(const QString &filePath); bool setDateRangeCondition(int type, quint64 startMsec, quint64 endMsec); int getDateRangeType(); bool getDateRangeIsContains(); quint64 getDateRangeStartMsec(); quint64 getDateRangeEndMsec(); bool isFileMatchedWithDate(int type, quint64 timeMsec); bool setConditionMatchRule(MatchRule rule, bool contains = true); MatchRule getConditionMatchRule(); bool getConditionMatchRuleIsContains(); Type type() const; QJsonObject conditionObject(); QStringList getConditionLabels(); static QVariant pharseConditions(const QList > &conditions, const QStringList &labels = QStringList()); static QList> generateContitionsFromDescription(const QVariant &description); static QStringList getLabelsFromDescription(const QVariant &description); Q_SIGNALS: private: bool m_isAndCondition = true; // 设置是å�¦ä¸ºAnd类型æ�¡ä»¶ Type m_type; QVariant m_conditionDescription; // jsonæ•°æ�®ç»“æž„ }; #endif // CONDITION_H peony-extensions/peony-intelligent-data-management-service/condition/condition.cpp0000664000175000017500000005151515257160277027657 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #include "condition.h" #include #include #include #include #include #include const QString Folder_Type = "inode/directory"; const QString Image_Type = "image/"; const QString Video_Type = "video/"; const QString Text_Type = "text/"; const QString Wps_Type = "application/wps-office"; const QString Audio_Type = "audio/"; const QStringList wpsSuffix = {"doc", "docx", "dot", "wps", "wpt", "xlx", "xlxs", "et", "ppt", "pptx", "wpp"}; QString getRelativeTime(QDateTime dateTime) { QString displayString; #ifdef COMPLIE_AS_PROJECT time_t lt; lt = time(NULL); struct tm m_tm = *localtime(<); QDate date = dateTime.date(); QTime qtime = dateTime.time(); m_tm.tm_year = date.year(); m_tm.tm_mon = date.month(); m_tm.tm_mday = date.day(); m_tm.tm_hour = qtime.hour(); m_tm.tm_min = qtime.minute(); m_tm.tm_sec = qtime.second(); auto ret = kdk_system_timeformat_transform(&m_tm); char* formatDate = kdk_system_tran_absolute_date(&m_tm); displayString = QObject::tr("%1 %2").arg(formatDate).arg(ret->timesec); kdk_free_timeinfo(ret); free(formatDate); #endif return displayString; } Condition::Condition(Type type, QObject *parent) : QObject(parent) { m_type = type; } std::shared_ptr Condition::fromJsonObject(const QJsonObject &jsonObj) { int type = jsonObj["condition type"].toInt(); auto condition = std::shared_ptr(new Condition(Type(type))); condition->m_conditionDescription = jsonObj; if (jsonObj["orCondition"].toBool()) { condition->m_isAndCondition = false; } return condition; } bool Condition::isValid() { return !m_conditionDescription.isNull(); } void Condition::setIsAndCondition(bool isAnd) { m_isAndCondition = isAnd; QJsonObject obj = m_conditionDescription.toJsonObject(); obj["orCondition"] = !isAnd; m_conditionDescription = QVariant(obj); } bool Condition::setFileNameCondition(bool contains, const QStringList &keywords) { if (m_type == FileName && !keywords.isEmpty()) { QJsonObject fileNameObj; fileNameObj["condition type"] = int(m_type); fileNameObj["contains"] = contains; fileNameObj["keywords"] = QJsonArray::fromStringList(keywords); fileNameObj["orCondition"] = !m_isAndCondition; m_conditionDescription = QVariant(fileNameObj); return true; } return false; } bool Condition::getFileNameIsContains() { auto jsonObj = m_conditionDescription.toJsonObject(); return jsonObj["contains"].toBool(); } bool Condition::isFileNameMatchedWithKeywords(const QString &fileName) { bool match = false; QStringList keywords = this->getFileNameKeywords(); if (this->getFileNameIsContains()) { for (auto keyword : keywords) { if (fileName.contains(keyword)) { match = true; break; } } } else { // 当æ�¡ä»¶ä¸ºä¸�包å�«æ—¶, 如果存在包å�«çš„关键è¯�则ä¸�匹é…�, 此时应该跳出循环 match = true; for (auto keyword : keywords) { if (fileName.contains(keyword)) { match = false; break; } } } return match; } QStringList Condition::getFileNameKeywords() { auto jsonObj = m_conditionDescription.toJsonObject(); auto jsonArray = jsonObj["keywords"].toArray(); QStringList keywords; for (auto value : jsonArray) { if(!value.toString().isEmpty()) keywords << value.toString(); } return keywords; } bool Condition::setFileTypeCondition(const QStringList &suffixes) { if (m_type == FileType && !suffixes.isEmpty()) { QJsonObject fileTypeObj; fileTypeObj["condition type"] = int(m_type); fileTypeObj["type"] = -1; fileTypeObj["suffixes"] = QJsonArray::fromStringList(suffixes); fileTypeObj["orCondition"] = !m_isAndCondition; m_conditionDescription = QVariant(fileTypeObj); return true; } return false; } bool Condition::setFileTypeCondition(int fileType) { if (m_type == FileType) { QJsonObject fileTypeObj; fileTypeObj["condition type"] = int(m_type); fileTypeObj["type"] = fileType; fileTypeObj["orCondition"] = !m_isAndCondition; m_conditionDescription = QVariant(fileTypeObj); return true; } return false; } int Condition::getFileTypeSelectionType() { auto jsonObj = m_conditionDescription.toJsonObject(); return jsonObj["type"].toInt(); } QStringList Condition::getFileTypeSuffixes() { auto jsonObj = m_conditionDescription.toJsonObject(); auto jsonArray = jsonObj["suffixes"].toArray(); QStringList suffixes; for (auto value : jsonArray) { suffixes << value.toString(); } return suffixes; } bool Condition::getFileTypeIsContains() { auto jsonObj = m_conditionDescription.toJsonObject(); return jsonObj["contains"].toBool(); } bool Condition::isFileTypeMatchedWithSuffixes(const QString &fileName) { auto suffixes = getFileTypeSuffixes(); bool match = false; for (auto suffix : suffixes) { if (fileName.endsWith("." + suffix)) { match = true; break; } } return match; } bool Condition::isFileTypeMatchedWithSubType(int type, const QString &fileName, const QString &mimeType) { bool match = false; bool contains = getFileTypeIsContains(); if (type == ALL_TYPE) return contains; switch (type) { case FILE_FOLDER: { match = mimeType == Folder_Type; break; } case PICTURE: { match = mimeType.startsWith(Image_Type); break; } case VIDEO: { match = mimeType.startsWith(Video_Type); break; } case TXT_FILE: { match = mimeType.startsWith(Text_Type); break; } case WPS_FILE: { match = mimeType.startsWith(Wps_Type); if (!match) { QString tmp = fileName; int index = tmp.lastIndexOf("."); if (index >= 0) { tmp = tmp.chopped(index); if (!tmp.isEmpty()) { match = wpsSuffix.contains(tmp); } } } break; } case AUDIO: { match = (mimeType.startsWith(Audio_Type)||mimeType.contains("application/x-smaf")); break; } case OTHERS: { //exclude classfied types, show the rest other types if ((mimeType != Folder_Type) && ! mimeType.startsWith(Image_Type) && !mimeType.startsWith(Video_Type) && ! mimeType.startsWith(Text_Type) && ! mimeType.startsWith(Wps_Type) && !mimeType.startsWith(Audio_Type) && !mimeType.contains("application/x-smaf")) return true; break; } default: break; } match = contains? match: !match; return match; } bool Condition::setFileSizeCondition(bool contains, int type) { if (m_type == FileSize) { QJsonObject fileSizeObj; fileSizeObj["condition type"] = int(m_type); fileSizeObj["contains"] = contains; fileSizeObj["type"] = type; fileSizeObj["orCondition"] = !m_isAndCondition; m_conditionDescription = QVariant(fileSizeObj); return true; } return false; } bool Condition::getFileSizeIsContains() { auto jsonObj = m_conditionDescription.toJsonObject(); return jsonObj["contains"].toBool(); } int Condition::getFileSizeType() { auto jsonObj = m_conditionDescription.toJsonObject(); return jsonObj["type"].toInt(); } bool Condition::isFileSizeMatchedWithSize(quint64 size) { bool match = false; int fileSizeType = this->getFileSizeType(); bool contains = this->getFileSizeIsContains(); bool sizeMatch = false; switch (fileSizeType) { case 0: { // "Empty(all)" sizeMatch = true; break; } case 1: { // "Empty(0K)" if (size == 0) { sizeMatch = true; } break; } case 2: { // "Tiny(0-16K)" if (size <= 16 * 1024 && size > 0) { sizeMatch = true; } break; } case 3: { // "Small(16K-1M)" if (size <= 1024 * 1024 && size > 16 * 1024) { sizeMatch = true; } break; } case 4: { // "Medium(1M-128M)" if (size <= 128 * 1024 * 1024 && size > 1024 * 1024) { sizeMatch = true; } break; } case 5: { // "Big(128M-1G)" if (size <= 1024 * 1024 * 1024 && size > 128 * 1024 * 1024) { sizeMatch = true; } break; } case 6: { // "Large(1-4G)" quint64 fourGiB = 1024 * 1024 * 1024; fourGiB *= 4; if (size <= fourGiB && size > 1024 * 1024 * 1024) { sizeMatch = true; } break; } case 7: { // "Great(>4G)" quint64 fourGiB = 1024 * 1024 * 1024; fourGiB *= 4; if (size > fourGiB) { sizeMatch = true; } break; } default: break; } match = contains? sizeMatch: !sizeMatch; return match; } bool Condition::setFileContentCondition(const QString &content) { if (m_type == FileContent && !content.isEmpty()) { QJsonObject fileContentObj; fileContentObj["condition type"] = int(m_type); fileContentObj["content"] = content; fileContentObj["orCondition"] = !m_isAndCondition; m_conditionDescription = QVariant(fileContentObj); return true; } return false; } QString Condition::getFileContentContent() { auto jsonObj = m_conditionDescription.toJsonObject(); return jsonObj["content"].toString(); } bool Condition::setSearchLocationCondition(bool contains, const QString &path) { if (m_type == SearchLocation && !path.isEmpty()) { QJsonObject searchLocationObj; searchLocationObj["condition type"] = int(m_type); searchLocationObj["contains"] = contains; searchLocationObj["path"] = path; searchLocationObj["orCondition"] = !m_isAndCondition; m_conditionDescription = QVariant(searchLocationObj); return true; } return false; } bool Condition::getSearchLocationIsContains() { auto jsonObj = m_conditionDescription.toJsonObject(); return jsonObj["contains"].toBool(); } QString Condition::getSearchLocationPath() { auto jsonObj = m_conditionDescription.toJsonObject(); return jsonObj["path"].toString(); } bool Condition::isFileMatchedWithSearchLocation(const QString &filePath) { bool match = false; bool contains = getSearchLocationIsContains(); auto searchPath = getSearchLocationPath(); if (!searchPath.endsWith("/")) { searchPath.append("/"); } if (filePath.contains(searchPath)) { match = contains? true: false; } else { // 如果æ�¡ä»¶ä¸ºä¸�包å�«åˆ™è®¤ä¸ºåŒ¹é…� match = !contains; } return match; } bool Condition::setDateRangeCondition(int type, quint64 startMsec, quint64 endMsec) { if (m_type == DateRange && (startMsec <= endMsec)) { QJsonObject dateRangObj; dateRangObj["condition type"] = int(m_type); dateRangObj["type"] = type; dateRangObj["start"] = QString::number(qulonglong(startMsec)); dateRangObj["end"] = QString::number(qulonglong(endMsec)); dateRangObj["orCondition"] = !m_isAndCondition; m_conditionDescription = QVariant(dateRangObj); return true; } return false; } int Condition::getDateRangeType() { auto jsonObj = m_conditionDescription.toJsonObject(); return jsonObj["type"].toInt(); } bool Condition::getDateRangeIsContains() { auto jsonObj = m_conditionDescription.toJsonObject(); return jsonObj["contains"].toBool(); } quint64 Condition::getDateRangeStartMsec() { auto jsonObj = m_conditionDescription.toJsonObject(); return jsonObj["start"].toString().toULongLong(); } quint64 Condition::getDateRangeEndMsec() { auto jsonObj = m_conditionDescription.toJsonObject(); return jsonObj["end"].toString().toULongLong(); } bool Condition::isFileMatchedWithDate(int type, quint64 timeMsec) { bool contain = getDateRangeIsContains(); auto Datetype = FilterFileModifyTime(getDateRangeType()); if (Datetype == ALL_TIME) return contain; auto time = QDateTime::currentMSecsSinceEpoch(); auto dateTime = QDateTime::fromMSecsSinceEpoch(time); //qDebug() << "cur QDateTime:" < 1) { joinSuffixes = suffixes.join(", "); } else { joinSuffixes = suffixes.first(); } if(!joinSuffixes.isEmpty()) labels << tr("File type contains \"%1\"").arg(joinSuffixes); } else { QStringList selections = {tr("By suffix"), tr("Folder"), tr("Plain Text"), tr("WPS Document"), tr("PDF"), tr("Image"), tr("Video"), tr("Audio")}; int type = getFileTypeSelectionType(); if (type >= 0 && type < selections.count()) { QString fileType = selections.at(type); labels << tr("File type contains %1").arg(fileType); } } break; } case FileSize: { bool contains = getFileSizeIsContains(); int sizeType = getFileSizeType(); QStringList sizes = {tr("All"),tr("Empty(0K)"), tr("Tiny(0-16K)"), tr("Small(16K-1M)"), tr("Medium(1M-128M)"), tr("Big(128M-1G)"), tr("Large(1-4G)"), tr("Great(>4G)")}; if (sizeType >= 0 && sizeType < sizes.count()) { if (contains) { labels << tr("File size contains %1").arg(sizes.at(sizeType)); } else { labels << tr("File size without %1").arg(sizes.at(sizeType)); } } break; } case FileContent: { labels << tr("File content match %1").arg(getFileContentContent()); break; } case SearchLocation: { bool contains = getSearchLocationIsContains(); QFileInfo fileInfo(getSearchLocationPath()); QString fileName = fileInfo.fileName(); if (contains) { labels << tr("File location contains \"%1\"").arg(fileName); } else { labels << tr("File location without \"%1\"").arg(fileName); } break; } case DateRange: { qint64 time1 = getDateRangeStartMsec(); qint64 time2 = getDateRangeEndMsec(); QDateTime dateTime1 = QDateTime::fromMSecsSinceEpoch(time1); QDateTime dateTime2 = QDateTime::fromMSecsSinceEpoch(time2); QString startTime = tr("Later than \"%1\"").arg(getRelativeTime(dateTime1)); QString endTime = tr("Earlier than \"%1\"").arg(getRelativeTime(dateTime2)); labels << startTime << endTime; break; } default: break; } return labels; } bool Condition::isAndCondition() const { return m_isAndCondition; } QList> Condition::generateContitionsFromDescription(const QVariant &description) { QList> result; QJsonObject jsonObj = description.toJsonObject(); int count = jsonObj["conditions count"].toInt(); for (int i = 0; i < count; i++) { auto conditionObj = jsonObj[QString::number(i)].toObject(); auto condition = Condition::fromJsonObject(conditionObj); result << condition; } return result; } QStringList Condition::getLabelsFromDescription(const QVariant &description) { QStringList labels; QJsonObject jsonObj = description.toJsonObject(); QJsonValue labelsValue = jsonObj["labels"]; if (labelsValue.isArray()) { QJsonArray labelsArray = labelsValue.toArray(); for (auto label : labelsArray) { labels << label.toString(); } } return labels; } QVariant Condition:: pharseConditions(const QList > &conditions, const QStringList &labels){ QJsonObject configObj; configObj["conditions count"] = conditions.count(); for (int i = 0; i < conditions.count(); i++) { configObj[QString::number(i)] = conditions[i]->conditionObject(); } if (!labels.isEmpty()) { configObj["labels"] = QJsonArray::fromStringList(labels); } return configObj; } ././@LongLink0000644000000000000000000000015100000000000011600 Lustar rootrootpeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service.propeony-extensions/peony-intelligent-data-management-service/peony-intelligent-data-management-service0000664000175000017500000001032615257160277033242 0ustar fengfengQT += core gui dbus sql network remoteobjects greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TEMPLATE = app TARGET = peony-intelligent-data-management-service VERSION = 1.0.0 DEFINES += VERSION='\\"$${VERSION}\\"' #CONFIG += c++11 no_keywords CONFIG += create_pc create_prl no_install_prl CONFIG += link_pkgconfig no_keywords c++11 lrelease hide_symbols embed_translations # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += COMPLIE_AS_PROJECT DEFINES += USE_AI UKUI_SEARCH_HAS_MATCH_ALL QMAKE_CXXFLAGS += -Werror=return-type -Werror=return-local-addr -Werror=uninitialized # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 #include(../libpeony-qt/libpeony-qt-header.pri) # ukui-search PKGCONFIG += ukui-search kysdk-alm peony libsystemd kysdk-filesystem kysdk-systime kyai-data-management-client kysdk-ai-common LIBS += -lukui-log4qt ## 包å�«ç›®å½• #INCLUDEPATH += $$shell pkg-config --cflags-only-I kysdk-alm \ # kysdk-systime \ # ukui-search \ #INCLUDEPATH += $$shell pkg-config --cflags-only-I kyai-data-management-client #include exists(/usr/include/applications/kabase/log.hpp) { message ("kysdkbase found") DEFINES += KY_SDK_KABASE } TRANSLATIONS += peony-intelligent-data-management-service_zh_CN.ts\ peony-intelligent-data-management-service_zh_HK.ts\ peony-intelligent-data-management-service_mn.ts\ peony-intelligent-data-management-service_ug.ts\ peony-intelligent-data-management-service_kk.ts\ peony-intelligent-data-management-service_ky.ts\ peony-intelligent-data-management-service_bo_CN.ts SOURCES += \ ./main.cpp\ ./model/modelcontroller.cpp \ ./model/spacesfilesfetcher.cpp\ ./database/databasemanager.cpp\ ./condition/condition.cpp\ ./search/searchtask.cpp\ ./ai/ailabelhelper.cpp\ ./ai/aiconditionshelper.cpp\ ./ai/aipreviewhelper.cpp\ ./ai/aisearchtask.cpp\ ./file/fileinfojob.cpp\ ./file/fileinfomanager.cpp\ ./file/fileinfo.cpp \ ./file/qtremoteobject/fileeventhandlerimpl.cpp\ ./model/searchresultmodel.cpp\ ./model/spacessettings.cpp\ ./3rd-parties/qtsinglecoreapplication.cpp\ ./3rd-parties/qtlocalpeer.cpp\ ./3rd-parties/qtlockedfile.cpp\ ./3rd-parties/qtlockedfile_unix.cpp\ ./3rd-parties/qtlockedfile_win.cpp HEADERS += \ ./model/modelcontroller.h \ ./model/spacesfilesfetcher.h\ ./database/databasemanager.h\ ./condition/condition.h\ ./search/searchtask.h\ ./ai/ailabelhelper.h\ ./ai/aiconditionshelper.h\ ./ai/aipreviewhelper.h\ ./ai/aisearchtask.h\ ./file/fileinfojob.h\ ./file/fileinfomanager.h\ ./file/fileinfo_p.h\ ./file/fileinfo.h\ ./file/qtremoteobject/fileeventhandlerimpl.h\ ./model/searchresultmodel.h\ ./model/spacessettings.h\ ./3rd-parties/qtsinglecoreapplication.h\ ./3rd-parties/qtlocalpeer.h\ ./3rd-parties/qtlockedfile.h REPC_SOURCE = fileeventhandler.rep REPC_REPLICA = fileeventhandler.rep inst1.files += conf/peony-intelligent-data-management-service.service inst1.path = /usr/lib/systemd/user inst2.files +=conf/com.peony.idm.service inst2.path = /usr/share/dbus-1/services target.files +=$$OUT_PWD/$$TARGET target.path = /usr/bin intro.files +=data/智能空间使用手册.pdf intro.files +=data/智能空间引导手册.pdf intro.path = /usr/share/peony-intelligent-data-management-service/ INSTALLS += \ target \ inst1 \ inst2 \ intro QM_FILES_INSTALL_PATH = /usr/share/peony-intelligent-data-management-service peony-extensions/peony-intelligent-data-management-service/database/0000775000175000017500000000000015257160277024734 5ustar fengfengpeony-extensions/peony-intelligent-data-management-service/database/databasemanager.h0000664000175000017500000001025015257160264030176 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef DATABASEMANAGER_H #define DATABASEMANAGER_H #include #include class DatabaseManagerPrivate; class DatabaseManager : public QObject { Q_OBJECT public: explicit DatabaseManager(const QString &dbname = "peony-idm.db",const QString &filedbname = "peony-idm-file.db", QObject *parent = nullptr); ~DatabaseManager(); /*! * \brief getAllSpaceNames * \param errorMessage * \return all active space * \note removed spaces will not in this list, but still has a record and unique id in database. */ QStringList getAllSpaceNames(QString *errorMessage = nullptr); bool createSpace(const QString &spaceName, const QStringList &conditions, QString *errorMessage = nullptr, QString *resultName = nullptr); bool renameSpace(const QString ¤tSpaceName, const QString &newSpaceName, QString *errorMessage = nullptr); bool removeSpace(const QString &spaceName, QString *errorMessage = nullptr); bool updateSpaceStatusDescription(int id,quint64 count,quint64 time); QVector getSpaceStatusDescription(int id); QStringList getSpaceCondition(const QString &spaceName, QString *errorMessage = nullptr); bool changeSpaceConditions(const QString &spaceName, const QStringList &conditions, QString *errorMessage = nullptr); bool addFileToSpace(const QString &filePath, const QString &spaceName, bool isUserAdded = false, QString *errorMessage = nullptr); // deprecated bool addFileToSpace(const QString &filePath, int spaceId, bool isUserAdded = false, QString *errorMessage = nullptr); bool removeFileFromSpace(const QString &filePath, const QString &spaceName, bool isUserRemove = false, QString *errorMessage = nullptr); // deprecated bool removeFileFromSpace(const QString &filePath, int spaceId, bool isUserRemove = false, QString *errorMessage = nullptr); bool removeFileFromAllSpace(const QString &filePath, QString *errorMessage = nullptr); bool getSpacestatus(const QString &spaceName); bool updateSpacestatus(const QString &spaceName ,bool status); QStringList getAllFilesFromSpaces(bool isUserAdded = false, QString *errorMessage = nullptr); // todo: a batch function for improve database performance. // 当å‰�测试环境中4000æ•°æ�®å�Œæ—¶åŠ å…¥2个表格耗时已ç»�达到10s级别,需è¦�优化。 // 文件表格的批处ç�†å�¯èƒ½éœ€è¦�借助FileInfoManager实现,对于已ç»�存在的文件和新文件å�šä¸�å�Œçš„处ç�† /*! * \brief getAllFilesWithSpaceIds * \param isUserAdded * \param errorMessage * \return all files in all spaces with space id info. */ QList>> getAllFilesWithSpaceIds(bool isUserAdded = false, QString *errorMessage = nullptr); /*! * \brief getAllFilesFromSpacesBySpaceIds * \param isUserAdded * \param errorMessage * \return a map with spaces and files in those spaces, the map key is space id in database. * \sa getSpaceIdByName() */ QMap getAllFilesFromSpacesBySpaceIds(bool isUserAdded = false, QString *errorMessage = nullptr); int getSpaceIdByName(const QString &spaceName, QString *errorMessage = nullptr); int getFileIdByPath(const QString &filePath, bool isUserAdded, QString *errorMessage = nullptr); Q_SIGNALS: private: void setErrorString(const QString &errorMessage, QString *targetString); DatabaseManagerPrivate *priv; }; #endif // DATABASEMANAGER_H peony-extensions/peony-intelligent-data-management-service/database/databasemanager.cpp0000664000175000017500000006635015257160277030551 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #include "databasemanager.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static const char letters[] = {"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"}; QString createRandomString(int length) { QString result; for (int i = 0; i < length; ++i) { int randomIndex = QRandomGenerator::global()->bounded(61); result.append(letters[randomIndex]); } return result; } class DatabaseManagerPrivate { public: DatabaseManagerPrivate(DatabaseManager *manager, const QString &dbname,const QString &filedbname) { QString connectionName = QString("sqlite_con_thread_%1").arg(QString::number(reinterpret_cast(QThread::currentThreadId()))); QString filedbconnectionName = QString("filesqlite_con_thread_%1").arg(QString::number(reinterpret_cast(QThread::currentThreadId()))); if (QSqlDatabase::contains(connectionName) && QSqlDatabase::contains(filedbconnectionName)) { db = QSqlDatabase::database(connectionName); db.open(); filedb = QSqlDatabase::database(filedbconnectionName); filedb.open(); return; } db = QSqlDatabase::addDatabase("QSQLITE", connectionName); filedb = QSqlDatabase::addDatabase("QSQLITE", filedbconnectionName); QObject::connect(QThread::currentThread(), &QThread::destroyed, qApp, [=]{ QSqlDatabase::removeDatabase(connectionName); }); QString dbDirectory = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation); QDir d; d.mkpath(dbDirectory); db.setDatabaseName(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/" + dbname); filedb.setDatabaseName(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/" + filedbname); if (!db.open()) { qCritical() << "can not open database" << db.lastError().text(); } else { // 如果没有创建空间,创建默认空间 auto tables = db.tables(); if (tables.isEmpty()) { // 创建空间表格,包å�«Nameã€�IDã€�空间æ�¡ä»¶ QString createSpacesTableCommand = "CREATE TABLE \"Spaces\" (" "\"Name\" TEXT NOT NULL UNIQUE," "\"id\" INTEGER PRIMARY KEY AUTOINCREMENT," "\"Conditions\" BLOB," "\"Active\" BOOL NOT NULL," "\"AutoUpdate\" BOOL NOT NULL," "\"lastAddedFileCount\" DEFAULT 0," "\"lastAddedFileTimeMsec\" DEFAULT 0" ")"; db.exec(createSpacesTableCommand); createInternalSpaces(); } else { // å°†spaceså’Œid的表格进行缓存 NeedAddintroFile = false; QSqlQuery query(db); query.prepare("SELECT (id, Name) FROM Spaces WHERE Active=true"); bool ok = query.exec(); if (!ok) { qWarning() << query.lastError().text(); } else { while (query.next()) { int id = query.value(0).toInt(); QString name = query.value(1).toString(); spaces.insert(id, name); } } bool flag = false; QString queryStr = QString("PRAGMA table_info(Spaces);"); if(query.exec(queryStr)) { while(query.next()) { QString colname = query.value(1).toString(); if(colname == "lastAddedFileCount" || colname == "lastAddedFileTimeMsec") { flag =true; break; } } } if(!flag) { QString addfilecount = QString("ALTER TABLE Spaces ADD COLUMN lastAddedFileCount INTEGER DEFAULT 0"); if (!query.exec(addfilecount)) { qCritical() << "failed to add col" <addFileToSpace("/usr/share/1", 1, true); //manager->addFileToSpace("/usr/share/2", 1, true); NeedAddintroFile = true; } } } void createIntroSpace() { QString workSpaceName = QObject::tr("Intelligent Data Manager Introduction"); // 创建默认空间 QString createWorkCommand = QString("INSERT INTO Spaces (ID, Name, Active,AutoUpdate,lastAddedFileCount, lastAddedFileTimeMsec) VALUES (1, '%1', true,true, 0 , 0)").arg(workSpaceName); db.exec(createWorkCommand); spaces.insert(0, workSpaceName); // 默认空间æ�¡ä»¶åˆ�始化 QJsonObject obj; obj["conditions count"] = 0; obj["labels"] = QJsonArray::fromStringList(QStringList()); QJsonDocument doc(obj); QString configPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); QDir d; d.mkpath(configPath + "/spaces"); QString jsonPath = QString("%1/spaces/1.json").arg(configPath); QFile file(jsonPath); if (file.open(QFile::WriteOnly|QFile::Text)) { file.write(doc.toJson()); file.close(); } } void createInternalSpaces() { ensureXdgUserDirs(); createIntroSpace(); //createDocSpace(); //createDownloadSpace(); } void ensureXdgUserDirs() { QString xdgUserDirsConfigFilePath = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + "/user-dirs.dirs"; QFile xdgUserDirsConfigFile(xdgUserDirsConfigFilePath); if (!xdgUserDirsConfigFile.exists()) { QProcess p; p.setProgram("/usr/bin/xdg-user-dirs-update"); p.start(); p.waitForFinished(); } } QSqlDatabase db; QSqlDatabase filedb; QMap spaces; bool NeedAddintroFile = false; }; DatabaseManager::DatabaseManager(const QString &dbname, const QString &filedbname,QObject *parent) : QObject(parent) { priv = new DatabaseManagerPrivate(this, dbname,filedbname); if(priv->NeedAddintroFile){ bool ok = addFileToSpace("/usr/share/peony-intelligent-data-management-service/智能空间使用手册.pdf",1,true); ok = addFileToSpace("/usr/share/peony-intelligent-data-management-service/智能空间引导手册.pdf",1,true); priv->NeedAddintroFile = false; } } DatabaseManager::~DatabaseManager() { priv->db.close(); priv->filedb.close(); delete priv; } QStringList DatabaseManager::getAllSpaceNames(QString *errorMessage) { if (!priv->spaces.isEmpty()) { return priv->spaces.values(); } QStringList l; QSqlQuery query(priv->db); query.prepare("SELECT Name FROM Spaces WHERE Active=true ORDER BY id ASC"); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return l; } else { while (query.next()) { l << query.value(0).toString(); } } return l; } bool DatabaseManager::createSpace(const QString &spaceName, const QStringList &conditions, QString *errorMessage, QString *resultName) { QSqlQuery query(priv->db); QString realSpaceName = spaceName; if (spaceName.isEmpty()) { auto currentSpaceNames = getAllSpaceNames(); int count = 1; while (true) { realSpaceName = tr("New Space %1").arg(count); if (currentSpaceNames.contains(realSpaceName)) { count++; } else { break; } } } query.prepare("INSERT INTO Spaces (Name, Conditions, Active,AutoUpdate,lastAddedFileCount, lastAddedFileTimeMsec) VALUES (:n, :c,true,true,0 ,0)"); query.bindValue(":n", realSpaceName); query.bindValue(":c", conditions.join('\n')); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return false; } else { int newSpaceId = getSpaceIdByName(spaceName); priv->spaces.insert(newSpaceId, spaceName); if (resultName) { *resultName = realSpaceName; } return true; } } bool DatabaseManager::renameSpace(const QString ¤tSpaceName, const QString &newSpaceName, QString *errorMessage) { QSqlQuery query(priv->db); query.prepare("UPDATE Spaces SET Name=:n WHERE Name=:c"); query.bindValue(":c", currentSpaceName); query.bindValue(":n", newSpaceName); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return false; } else { return true; } } bool DatabaseManager::updateSpaceStatusDescription(int id,quint64 count,quint64 time) { QSqlQuery query(priv->db); query.prepare("UPDATE Spaces SET lastAddedFileCount=:count ,lastAddedFileTimeMsec=:time WHERE id=:n"); query.bindValue(":count", count); query.bindValue(":time", time); query.bindValue(":n", id); bool ok = query.exec(); return ok; } QVector DatabaseManager::getSpaceStatusDescription(int id) { QSqlQuery query(priv->db); QVectorvec; query.prepare("SELECT lastAddedFileCount , lastAddedFileTimeMsec FROM Spaces WHERE id=:n"); query.bindValue(":n", id); bool ok = query.exec(); quint64 count = 0; quint64 msectime = 0; //QString queryStr = QString("SELECT lastAddedFileCount , lastAddedFileTimeMsec FROM Spaces WHERE id=64;"); if(ok) { while(query.next()) { count = query.value(0).toULongLong(); vec.push_back(count); msectime = query.value(1).toULongLong(); vec.push_back(msectime); } } return vec; } bool DatabaseManager::removeSpace(const QString &spaceName, QString *errorMessage) { QSqlQuery query(priv->db); query.prepare("UPDATE Spaces SET Name=:randomName,Active=false,AutoUpdate=false WHERE Name=:n"); QString randomString = createRandomString(64); query.bindValue(":randomName", randomString); query.bindValue(":n", spaceName); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return false; } else { priv->spaces.remove(priv->spaces.key(spaceName)); return true; } } bool DatabaseManager::getSpacestatus(const QString &spaceName){ QString errorMessage; QSqlQuery query(priv->db); query.prepare("SELECT AutoUpdate FROM Spaces WHERE Name=:n"); query.bindValue(":n", spaceName); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), &errorMessage); return false; } else { if (query.next()) { bool status = query.value(0).toBool(); return status; } } return true; } bool DatabaseManager::updateSpacestatus(const QString &spaceName,bool status){ QString errorMessage; QSqlQuery query(priv->db); query.prepare("UPDATE Spaces SET AutoUpdate=:s WHERE Name=:n"); query.bindValue(":s", status); query.bindValue(":n", spaceName); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), &errorMessage); return false; } else { return true; } } QStringList DatabaseManager::getSpaceCondition(const QString &spaceName, QString *errorMessage) { QStringList l; QSqlQuery query(priv->db); query.prepare("SELECT Conditions from Spaces WHERE name=:n"); query.bindValue(":n", spaceName); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return l; } else { if (query.next()) { QString conditions = query.value(0).toString(); l = conditions.split('\n'); return l; } } return l; } bool DatabaseManager::changeSpaceConditions(const QString &spaceName, const QStringList &conditions, QString *errorMessage) { QSqlQuery query(priv->db); query.prepare("UPDATE Spaces SET Conditions=:c WHERE Name=:n"); query.bindValue(":c", conditions.join('\n')); query.bindValue(":n", spaceName); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return false; } else { return true; } } bool DatabaseManager::addFileToSpace(const QString &filePath, const QString &spaceName, bool isUserAdded, QString *errorMessage) { int spaceId = getSpaceIdByName(spaceName); return addFileToSpace(filePath, spaceId, isUserAdded, errorMessage); } bool DatabaseManager::addFileToSpace(const QString &filePath, int spaceId, bool isUserAdded, QString *errorMessage) { // 更新或者æ�’入文件空间信æ�¯ // fixme: 使用文件idä¿¡æ�¯è¿›è¡Œç©ºé—´ç®¡ç�† QString targetTable = isUserAdded? "UserAddedFiles": "AutoAddedFiles"; QSqlQuery query(priv->filedb); QString cmd = QString("SELECT Path,id,SpaceIds FROM %1 WHERE Path=:path").arg(targetTable); query.prepare(cmd); query.bindValue(":path", filePath); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return false; } else { QString path; QString oldSpaces; int id; if (query.next()) { // å·²ç»�加入至少一个空间,更新信æ�¯ path = query.value("path").toString(); oldSpaces = query.value("SpaceIds").toString(); id = query.value("id").toInt(); QString spaceName = priv->spaces.value(spaceId); QStringList spaces = oldSpaces.split('\n'); if (spaces.contains(QString::number(spaceId))) { setErrorString(tr("File %1 has areally been added to %2").arg(filePath).arg(spaceName), errorMessage); return false; } else { spaces << QString::number(spaceId); QString targetString = spaces.join('\n'); QSqlQuery updateQuery(priv->filedb); updateQuery.prepare(QString("UPDATE %1 SET SpaceIds=:SpaceIds WHERE Path=:path").arg(targetTable)); updateQuery.bindValue(":SpaceIds", targetString); updateQuery.bindValue(":path", filePath); bool ok = updateQuery.exec(); if (!ok) { setErrorString(updateQuery.lastError().text(), errorMessage); return false; } else { return true; } } } else { // 文件未在任何空间中,添加数æ�® int spaceIdToBeAdded = spaceId; QSqlQuery insertQuery(priv->filedb); insertQuery.prepare(QString("INSERT INTO %1 (Path,SpaceIds) VALUES (:path,:space)").arg(targetTable)); insertQuery.bindValue(":path", filePath); insertQuery.bindValue(":space", QString::number(spaceIdToBeAdded)); bool ok = insertQuery.exec(); if (!ok) { setErrorString(insertQuery.lastError().text(), errorMessage); return false; } else { return true; } } } return false; } bool DatabaseManager::removeFileFromSpace(const QString &filePath, const QString &spaceName, bool isUserRemove, QString *errorMessage) { int spaceId = getSpaceIdByName(spaceName); if (spaceId < 0) { qCritical() << "invalid space id" << spaceId << "from" << spaceName; return false; } return removeFileFromSpace(filePath, spaceId, isUserRemove, errorMessage); } bool DatabaseManager::removeFileFromSpace(const QString &filePath, int spaceId, bool isUserRemove, QString *errorMessage) { // 更新文件空间信æ�¯ï¼Œå¦‚果文件ä¸�存在,返回false // fixme: 使用文件idä¿¡æ�¯è¿›è¡Œç©ºé—´ç®¡ç�† QString targetTable = isUserRemove? "UserAddedFiles": "AutoAddedFiles"; QSqlQuery query(priv->filedb); query.prepare(QString("SELECT Path,id,SpaceIds FROM %1 WHERE Path=:path").arg(targetTable)); query.bindValue(":path", filePath); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return false; } else { if (query.next()) { QString path; QString oldSpaces; int id; // æ›´æ–°ä¿¡æ�¯ path = query.value("path").toString(); oldSpaces = query.value("SpaceIds").toString(); id = query.value("id").toInt(); QStringList spaces = oldSpaces.split('\n'); spaces.removeAll(QString::number(spaceId)); QString targetString = spaces.join('\n'); if (spaces.isEmpty()) { // 如果删除此文件å�Žæ²¡æœ‰æ•°æ�®åˆ™æ¸…空此记录 QSqlQuery updateQuery(priv->filedb); QString cmd = QString("DELETE FROM %1 WHERE Path=:path").arg(targetTable); updateQuery.prepare(cmd); updateQuery.bindValue(":path", filePath); bool ok = updateQuery.exec(); if (!ok) { setErrorString(updateQuery.lastError().text(), errorMessage); return false; } else { return true; } } else { QSqlQuery updateQuery(priv->filedb); QString cmd = QString("UPDATE %1 SET SpaceIds=:SpaceIds WHERE Path=:path").arg(targetTable); updateQuery.prepare(cmd); updateQuery.bindValue(":SpaceIds", targetString); updateQuery.bindValue(":path", filePath); bool ok = updateQuery.exec(); if (!ok) { setErrorString(updateQuery.lastError().text(), errorMessage); return false; } else { return true; } } } else { setErrorString(tr("File %1 doesn't exsit in any space.").arg(filePath), errorMessage); return false; } } return false; } bool DatabaseManager::removeFileFromAllSpace(const QString &filePath, QString *errorMessage) { QSqlQuery query(priv->filedb); query.prepare("UPDATE UserAddedFiles SET SpaceIds=NULL WHERE Path=:path"); query.bindValue(":path", filePath); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return false; } query.prepare("UPDATE AutoAddedFiles SET SpaceIds=NULL WHERE Path=:path"); query.bindValue(":path", filePath); ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return false; } else { return true; } return false; } QStringList DatabaseManager::getAllFilesFromSpaces(bool isUserAdded, QString *errorMessage) { QStringList l; QString targetTable = isUserAdded? "UserAddedFiles": "AutoAddedFiles"; QSqlQuery query(priv->filedb); QString cmd = QString("SELECT Path FROM %1 WHERE SpaceIds IS NOT NULL").arg(targetTable); query.prepare(cmd); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return l; } else { while (query.next()) { l << query.value(0).toString(); } } return l; } QList > > DatabaseManager::getAllFilesWithSpaceIds(bool isUserAdded, QString *errorMessage) { QList>> l; QString targetTable = isUserAdded? "UserAddedFiles": "AutoAddedFiles"; QSqlQuery query(priv->filedb); QString cmd = QString("SELECT Path,SpaceIds FROM %1 WHERE SpaceIds IS NOT NULL").arg(targetTable); query.prepare(cmd); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return l; } else { while (query.next()) { auto path = query.value(0).toString(); QString spaceIds = query.value(1).toString(); if (spaceIds.isEmpty() || spaceIds == "") { qWarning() << "file" << path << "has no spaceIds value"; continue; } QStringList ids = spaceIds.split('\n'); QList idsList; for (QString idString : ids) { bool ok = false; int id = idString.toInt(&ok); if (!ok) { qWarning()<< QString("Parse file %3 space ids %2 failed, current string: %1.").arg(idString).arg(spaceIds).arg(path); } else { idsList << id; } } QPair> pathWithSpaceIds; pathWithSpaceIds.first = path; pathWithSpaceIds.second = idsList; l << pathWithSpaceIds; } } return l; } QMap DatabaseManager::getAllFilesFromSpacesBySpaceIds(bool isUserAdded, QString *errorMessage) { QMap l; QString targetTable = isUserAdded? "UserAddedFiles": "AutoAddedFiles"; QSqlQuery query(priv->filedb); QString cmd = QString("SELECT Path,SpaceIds FROM %1 WHERE SpaceIds IS NOT NULL").arg(targetTable); query.prepare(cmd); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return l; } else { while (query.next()) { auto path = query.value(0).toString(); QString spaceIds = query.value(1).toString(); QStringList ids = spaceIds.split('\n'); for (QString idString : ids) { bool ok = false; int id = idString.toInt(&ok); if (!ok) { qWarning()<< QString("Parse file %3 space ids %2 failed, current string: %1.").arg(idString).arg(spaceIds).arg(path); } else { if (l.keys().contains(id)) { QStringList newList = l.value(id); l.insert(id, newList<spaces.key(spaceName, -1); if (cachedId > 0) { return cachedId; } QSqlQuery query(priv->db); query.prepare("SELECT id FROM Spaces WHERE name=:name"); query.bindValue(":name", spaceName); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return -1; } else { if (query.next()) { int id = query.value(0).toInt(&ok); if (!ok) { setErrorString(tr("Failed to get space %1's id from query").arg(spaceName), errorMessage); return -1; } return id; } } return -1; } int DatabaseManager::getFileIdByPath(const QString &filePath, bool isUserAdded, QString *errorMessage) { // fixme: 使用缓存管ç�† QString targetTable = isUserAdded? "UserAddedFiles": "AutoAddedFiles"; QSqlQuery query(priv->filedb); // 表å��ä¸�能作为绑定å�˜é‡� //query.prepare("SELECT id FROM :table WHERE Path=:path"); //query.bindValue(":table", targetTable); QString cmd = QString("SELECT id FROM %1 WHERE Path=:path").arg(targetTable); query.prepare(cmd); query.bindValue(":path", filePath); bool ok = query.exec(); if (!ok) { setErrorString(query.lastError().text(), errorMessage); return -1; } else { if (query.next()) { int id = query.value(0).toInt(&ok); if (!ok) { setErrorString(tr("Failed to get %1's id from query").arg(filePath), errorMessage); return -1; } return id; } } return -1; } void DatabaseManager::setErrorString(const QString &errorMessage, QString *targetString) { if (targetString) *targetString = errorMessage; } peony-extensions/peony-intelligent-data-management-service/model/0000775000175000017500000000000015257160277024270 5ustar fengfengpeony-extensions/peony-intelligent-data-management-service/model/modelcontroller.cpp0000664000175000017500000010534015257160277030203 0ustar fengfeng/* * Peony Intelligent Spaces Service * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: He JinQin * */ #include "modelcontroller.h" #include "spacesfilesfetcher.h" #include "database/databasemanager.h" #ifdef COMPLIE_AS_PROJECT #include "condition/condition.h" #include "search/searchtask.h" #include "file/fileinfojob.h" #include "ai/aisearchtask.h" #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include"kylin-ai/common/common.h" #include #include #include #include #include #include "file/fileinfomanager.h" #include "file/fileinfo.h" #include #include #include"kylin-ai/common/common.h" #include "ai/aipreviewhelper.h" #include "global-settings.h" #include static ModelController *instance = nullptr; static bool modelInited = false; ModelController *ModelController::globalInstance() { if (!instance) { instance = new ModelController; } return instance; } ModelController::ModelController(const QString &dbName, const QString &filedbname ,QObject *parent) : QObject(parent) { fetched = false; fetcher = new SpacesFilesFetcher(dbName,filedbname); thread = new QThread; fetcher->moveToThread(thread); connect(thread, &QThread::started, fetcher, &SpacesFilesFetcher::fetch); connect(fetcher, &SpacesFilesFetcher::fetched, this, &ModelController::initModels, Qt::BlockingQueuedConnection); QDBusConnection sessionBus = QDBusConnection::sessionBus(); if (!sessionBus.registerService("com.peony.idm.service")) { qCritical() << "QDbus register service failed reason:" << sessionBus.lastError(); } if(!sessionBus.registerObject("/org/peony/idm/space/service",this,QDBusConnection::ExportAllSignals|QDBusConnection::ExportAllSlots)) { qCritical() << "peony-idm-transformer dbus register object failed reason:" << sessionBus.lastError(); } qRegisterMetaType>("QList"); qDBusRegisterMetaType>(); qRegisterMetaType>("QSharedPointer"); qRegisterMetaType>>("QList>"); qRegisterMetaType>("QMap"); qDBusRegisterMetaType>(); startLoadAllSpaces(); auto infoManager = UKUI::IDM::FileInfoManager::globalInstance(); connect(infoManager, &UKUI::IDM::FileInfoManager::fileChanged, this, &ModelController::handleFileEvent, Qt::UniqueConnection); } void ModelController::startLoadAllSpaces() { if (!thread->isRunning()) thread->start(); else { while (!fetched) { qApp->processEvents(); } } } ModelController::~ModelController() { disconnect(thread); disconnect(fetcher); disconnect(this); thread->quit(); // fixme: 在线程è¿�行中退出会导致崩溃 thread->wait(); delete fetcher; delete thread; } void ModelController::initModels() { fetched = true; // auto spaces = fetcher->getAllSpacesName(); // for (auto space : spaces) { // int id = fetcher->getSpaceIdByName(space); // auto infos = fetcher->getFilesInSpaceById(id, true); // QStringList userAddedInfos = infos; // auto autoAddedInfos = fetcher->getFilesInSpaceById(id, false); // infos << autoAddedInfos; // } // 从ukui-search获å�–文件创建事件 // 定义 Unix 域套接字地å�€ const std::string serverUnixPath = "unix:abstract=/tmp/.kylin-ai-business-unix/" + std::to_string(getuid()) + "/DataManagement.sock"; // 连接到 Unix 域套接字 QDBusConnection connection = QDBusConnection::connectToPeer( QString::fromStdString(serverUnixPath), "FileIndexFinished"); // 检查连接是å�¦æˆ�功 if (!connection.isConnected()) { qDebug() << "Failed to connect to Unix domain socket:" << connection.lastError().message(); } // 连接到 D-Bus ä¿¡å�· connection.connect("", "/com/kylin/AiBusiness/DataManagement", "com.kylin.AiBusiness.DataManagement", "FileIndexFinished", this->fetcher, SLOT(handleFileIndexCreated(QString))); connect(UKUI::IDM::FileInfoManager::globalInstance(), &UKUI::IDM::FileInfoManager::remoteFileEvent, this, [=](int eventType, const QString &arg1, const QString &arg2){ switch (eventType) { case 1: case 101: Q_EMIT this->fileCreateRequest(arg1); break; case 102:{ UKUI::IDM::FileInfoManager::globalInstance()->fileChanged(UKUI::IDM::FileInfoManager::FileDeleted, arg1, nullptr); Q_EMIT this->fileDeletedRequest(arg1); break; } case 103: UKUI::IDM::FileInfoManager::globalInstance()->fileChanged(UKUI::IDM::FileInfoManager::FileMoved, arg1, arg2); Q_EMIT this->fileMovedRequest(arg1, arg2); break; case 104: UKUI::IDM::FileInfoManager::globalInstance()->fileChanged(UKUI::IDM::FileInfoManager::FileAttrChanged, arg1, nullptr); break; default: break; } }); // 在线程中处ç�†æ–°å¢žæ–‡ä»¶å’Œç©ºé—´æ�¡ä»¶æ”¹å�˜ connect(this, &ModelController::spaceRemovedWithFilesRequest, this->fetcher, &SpacesFilesFetcher::handleSpaceRemoved,Qt::QueuedConnection); connect(this, &ModelController::spaceConditionsChanged, this->fetcher, &SpacesFilesFetcher::updateSpaceConditions); connect(this, &ModelController::fileCreateRequest, this->fetcher, &SpacesFilesFetcher::handleFileCreated); connect(this, &ModelController::filesReloaded, this->fetcher, &SpacesFilesFetcher::handleAfterFilesReloaded); connect(this, &ModelController::fileDeletedRequest, this->fetcher, &SpacesFilesFetcher::handleFileDeleted); connect(this, &ModelController::fileMovedRequest, this->fetcher, &SpacesFilesFetcher::handleFileMoved); connect(this, &ModelController::filesReloadedByCreate, this->fetcher, &SpacesFilesFetcher::handleAfterFilesReloadedBycreate); connect(this->fetcher, &SpacesFilesFetcher::updateSpacefileinfo, this, &ModelController::spaceUpdatefinish); connect(this->fetcher, &SpacesFilesFetcher::requestRescanSpaceWithConditionsDescritpion, this, &ModelController::handleRescanSpaceWithCondition); connect(this->fetcher,&SpacesFilesFetcher::FileDeleted,this,&ModelController::fileDeleted); connect(this->fetcher,&SpacesFilesFetcher::spaceCreateFinish,this,&ModelController::spaceCreateFinish); // 线程结果返回信å�· connect(this->fetcher, &SpacesFilesFetcher::handleFilesCreatedProgressed, this, &ModelController::filesCreated); } QStringList ModelController::getAllSpacesName(){ QStringList spaces = fetcher->getAllSpacesName(); return spaces; } int ModelController::getSpaceIdByName(const QString &spaceName){ int spaceid = fetcher->getSpaceIdByName(spaceName); return spaceid; } bool ModelController::onSpaceCreateRequest(const QString &spaceName, const QString &conditionDescription, bool isCreatedFromSearch) { return this->onSpaceCreateRequestWithFiles(spaceName, conditionDescription, isCreatedFromSearch, QStringList()); } bool ModelController::onSpaceCreateRequestWithFiles(const QString &spaceName, const QString &conditionDescription, bool isCreatedFromSearch, QStringList infos) { DatabaseManager manager; QString errMsg; QString realSpaceName; bool hasInitFiles = !infos.isEmpty(); if (manager.createSpace(spaceName, QStringList(), &errMsg, &realSpaceName)) { int spaceId = manager.getSpaceIdByName(realSpaceName); QJsonDocument doc = QJsonDocument::fromJson(conditionDescription.toUtf8()); auto jsonobj = doc.object(); QString jsonPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/spaces/" + QString::number(spaceId) + ".json"; QFile file(jsonPath); if (file.open(QFile::WriteOnly|QFile::Text)) { file.write(doc.toJson()); fetcher->rwLock.lockForWrite(); fetcher->spaces.insert(spaceId, realSpaceName); #ifdef COMPLIE_AS_PROJECT auto conditions = Condition::generateContitionsFromDescription(jsonobj); fetcher->spacesConditions.insert(spaceId, conditions); auto labels = Condition::getLabelsFromDescription(jsonobj); fetcher->spacesLabels.insert(spaceId, labels); #endif fetcher->rwLock.unlock(); qDebug() << "space created" << spaceId << realSpaceName; Q_EMIT filesReloadedByCreate(infos, spaceId); if (!isCreatedFromSearch) { this->handleRescanSpaceWithCondition(spaceId, jsonobj); } } sd_journal_print(LOG_ERR,"create space successful"); return true; } else { // kdk::KMessageBox questionBox; // questionBox.setIconPixmap(QPixmap (5,5)); // questionBox.setIcon(kdk::KMessageBox::Icon::Warning); // auto okButton = new QPushButton(tr("OK")); // questionBox.addButton(okButton, kdk::KMessageBox::AcceptRole); // questionBox.setText(tr("Failed to create space %1,%1 is existed").arg(spaceName)); // okButton->setProperty("isImportant", true); // questionBox.createWinId(); // questionBox.windowHandle()->setTransientParent(rootwindow); // questionBox.exec(); qDebug() << "create space failed" << realSpaceName<<" "<getSpaceNameById(spaceId); if (manager.renameSpace(oldSpaceName, spaceName, &errorMsg)) { fetcher->rwLock.lockForWrite(); fetcher->spaces[spaceId] = spaceName; fetcher->rwLock.unlock(); // Q_EMIT spaceNameUpdated(spaceId, spaceName); return true; } else { // kdk::KMessageBox questionBox; // questionBox.setIconPixmap(QPixmap (5,5)); // questionBox.setIcon(kdk::KMessageBox::Icon::Warning); // auto okButton = new QPushButton(tr("OK")); // questionBox.addButton(okButton, kdk::KMessageBox::AcceptRole); // questionBox.setText(tr("Failed to rename space %1 to %2, %2 is existed.").arg(oldSpaceName).arg(spaceName)); // okButton->setProperty("isImportant", true); // questionBox.createWinId(); // questionBox.windowHandle()->setTransientParent(rootwindow); // questionBox.exec(); qDebug() <getSpaceNameById(spaceId); if (manager.removeSpace(spaceName, &errorMsg)) { fetcher->rwLock.lockForWrite(); fetcher->spaces.remove(spaceId); fetcher->rwLock.unlock(); qDebug() << "space removed" << spaceId; // å�Œæ—¶åˆ é™¤é…�置文件 QString jsonPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/spaces/" + QString::number(spaceId) + ".json"; QFile file(jsonPath); file.remove(); Q_EMIT spaceRemoved(spaceId); return true; } else { qCritical()<type() == Condition::ConditionMatchRule) { needcontent = condition->getConditionMatchRule() == 0?true:false; } if(condition->type() == Condition::FileName){ keywords = condition->getFileNameKeywords(); fileContentObj["condition type"] = int(Condition::FileContent); fileContentObj["content"] = keywords.first(); fileContentObj["orCondition"] = false; aijsonObj[QString::number(i)] = fileContentObj; } } if (needcontent && !keywords.isEmpty()) { if (true) { // if(!condition->isAndCondition()) // isAndCondition = false; auto aiSearchTask = new AISearchTask(keywords.first()); aiSearchTask->setFilterConditionDescription(aijsonObj); aiSearchTask->setSpaceId(spaceId); auto aiSearchThread = new QThread; aiSearchTask->moveToThread(aiSearchThread); connect(aiSearchThread, &QThread::started, aiSearchTask, &AISearchTask::doQuery); connect(aiSearchThread, &QThread::finished, aiSearchThread, &QThread::deleteLater); connect(aiSearchTask, &SearchTask::destroyed, aiSearchThread, &QThread::quit); connect(aiSearchTask, &AISearchTask::finisheds, this, [=](bool successed, const QList &results, const QJsonDocument &conditions, const QString &errorMsg){ /*thread->quit();*/}, Qt::QueuedConnection ); connect(aiSearchTask, &AISearchTask::finished, this, [=,this](bool successed, const QList &result){ if (successed) { QList> infos; for (auto path:result) { auto info = UKUI::IDM::FileInfo::fromPath(path); infos<setSpaceId(spaceId); job->setAutoDelete(true); connect(this, &ModelController::cancelSpaceSearch, job, &UKUI::IDM::FileInfoJob::handleCancelWithSpaceId); connect(this, &ModelController::spaceRemoved, job, &UKUI::IDM::FileInfoJob::handleCancelWithSpaceId); connect(job, &UKUI::IDM::FileInfoJob::finished, this, [=,this](){ auto infos = job->getInfos(); QList realResult; for (QSharedPointer info:infos) { auto path = info->path(); realResult< set(realResult.begin(), realResult.end()); Q_EMIT this->filesReloaded(set.values(), spaceId); }else{ contentFileinfo = realResult; //或æ�¡ä»¶å½“AIæ�œç´¢ç»“æ�Ÿå�Ž æ™®é€šæ�œç´¢è¿˜æ²¡ç»“æ�Ÿæš‚ä¸�æ›´æ–°UI //Q_EMIT this->filesReloaded(realResult, spaceId); } Aisearchfinish = true; }, Qt::BlockingQueuedConnection); job->start(); }else{ Aisearchfinish = true; } // 安全删除 aiSearchThread->quit(); aiSearchTask->deleteLater();; }); // 如果此空间的æ�¡ä»¶è¢«æ”¹å�˜æˆ–者被编辑则å�–消此次search connect(this, &ModelController::cancelSpaceSearch, aiSearchTask, &AISearchTask::cancelWithSpaceId); connect(this, &ModelController::spaceRemoved, aiSearchTask, &AISearchTask::cancelWithSpaceId); if(getAinotAvailabletype() == allFit){ Aisearchfinish = false; aiSearchThread->start(); } // if(isAndCondition) // return; } } // fixme: æ“�作完æˆ�å�Žé‡Šæ”¾èµ„æº� auto searchTask = new SearchTask; searchTask->setSpaceId(spaceId); searchTask->setConditionsDescription(conditionsDescription); QThread *searchThread = new QThread; searchTask->moveToThread(searchThread); connect(searchThread, &QThread::started, searchTask, &SearchTask::start); connect(searchThread, &QThread::finished, searchThread, &QThread::deleteLater); connect(searchTask, &SearchTask::destroyed, searchThread, &QThread::quit); connect(searchTask, &SearchTask::finished, this, [=,this](){ auto result = searchTask->resultInfos; result << searchTask->contentResultInfos; auto job = UKUI::IDM::FileInfoJob::fromInfos(result); job->setSpaceId(spaceId); job->setAutoDelete(true); connect(this, &ModelController::cancelSpaceSearch, job, &UKUI::IDM::FileInfoJob::handleCancelWithSpaceId); connect(this, &ModelController::spaceRemoved, job, &UKUI::IDM::FileInfoJob::handleCancelWithSpaceId); connect(job, &UKUI::IDM::FileInfoJob::finished, this, [=,this](){ searchfinish = true; auto infos = job->getInfos(); QList realResult; for (QSharedPointer info:infos) { auto path = info->path(); realResult< set(realResult.begin(), realResult.end()); Q_EMIT this->filesReloaded(set.values(), spaceId); }else{ contentFileinfo = realResult; if(!needcontent){ Q_EMIT this->filesReloaded(contentFileinfo, spaceId); } //Q_EMIT this->filesReloaded(realResult, spaceId); } searchfinish = true; }, Qt::BlockingQueuedConnection); job->start(); searchThread->quit(); searchTask->deleteLater();; }); //如果此空间的æ�¡ä»¶è¢«æ”¹å�˜æˆ–者被编辑则å�–消此次search connect(this, &ModelController::cancelSpaceSearch, searchTask, &SearchTask::handleCancelWithSpaceId); connect(this, &ModelController::spaceRemoved, searchTask, &SearchTask::handleCancelWithSpaceId); searchThread->start(); #endif } void ModelController::handleFileEvent(UKUI::IDM::FileInfoManager::FileEventType type, const QString &arg1, const QString arg2) { using namespace UKUI::IDM; QStringList filePaths; filePaths.append(arg1); QString path = arg1; QStringList spaceNames = getAllSpacesName(); switch (type) { // fixme: 使用pluma等文本编辑器修改文件å�Žæ— æ³•监å�¬åˆ°å�Žç»­äº‹ä»¶ case FileInfoManager::FileEventType::FileIgnoredAutomatic: { if (!arg2.isEmpty()) { // 文件夹改å�˜äº‹ä»¶ï¼Œè·³è¿‡ return; } auto info = UKUI::IDM::FileInfo::fromPath(path, false); for (auto name : spaceNames) { QStringList infos = getFilesInSpaceByName(name); if (infos.contains(path)) { auto infoJob = FileInfoJob::fromPaths(QStringList()<getInfos(); for (auto info : infos) { FileInfoManager::globalInstance()->addFileToWatcher(info->uri()); } delete infoJob; }); if(!QFile::exists(path)){ removeFileFromSpace(name,filePaths); } connect(infoJob, &FileInfoJob::errored, this, [=]{ // 删除文件 //removeFile(path); removeFileFromSpace(name,filePaths); }); infoJob->start(); } } break; } case FileInfoManager::FileEventType::UserAddFile: { auto info = FileInfo::fromPath(path); auto infoJob = FileInfoJob::fromPaths(QStringList()<start(); break; } case FileInfoManager::FileEventType::FileDeleted: { if (!arg2.isEmpty()) { // 文件夹改å�˜äº‹ä»¶ï¼Œè·³è¿‡ return; } QStringList spaceNames = getAllSpacesName(); for (auto name : spaceNames) { QStringList infos = getFilesInSpaceByName(name); if (infos.contains(path)) { removeFileFromSpace(name,filePaths); } } break; } case FileInfoManager::FileEventType::FileMoved: { QStringList spaceNames = getAllSpacesName(); QStringList newFilePathList; newFilePathList.append(arg2); for (auto name : spaceNames) { QStringList filelist = this->fetcher->getFilesInSpace(name,true); QStringList infos = getFilesInSpaceByName(name); bool isUserRemove = filelist.contains(path); if (infos.contains(path)) { removeFileFromSpace(name,filePaths); if(isUserRemove){ userAddFilesToSpace(newFilePathList,name); } } } break; } case FileInfoManager::FileEventType::FileAttrChanged: case FileInfoManager::FileEventType::FileModified: { if (!arg2.isEmpty()) { // 文件夹改å�˜äº‹ä»¶ï¼Œè·³è¿‡ return; } // 更新文件信æ�¯ auto info = UKUI::IDM::FileInfo::fromPath(path, false); for (auto name : spaceNames) { QStringList infos = getFilesInSpaceByName(name); if (infos.contains(path)) { auto infoJob = FileInfoJob::fromPaths(QStringList()<getInfos(); Q_EMIT spaceDataChanged(name,filePaths); delete infoJob; }); infoJob->start(); } } break; } default: break; } } QStringList ModelController::getFilesInSpaceByName(QString spacename, bool isUserAdded){ int id = fetcher->getSpaceIdByName(spacename); auto infos = fetcher->getFilesInSpaceById(id, true); auto autoAddedInfos = fetcher->getFilesInSpaceById(id, false); infos << autoAddedInfos; return infos; } bool ModelController::userAddFilesToSpace(QStringList paths,QString SpaceName) { // fixme: run in thread DatabaseManager manager; int spaceId = getSpaceIdByName(SpaceName); bool ok = true; for (auto path : paths) { QString errMsg; ok = manager.addFileToSpace(path, spaceId, true, &errMsg); if(ok){ handleFileEvent(UKUI::IDM::FileInfoManager::UserAddFile, path, nullptr); this->fetcher->updateSpaceFiles(SpaceName,path,true,SpacesFilesFetcher::OperationType::Add); } } return ok; } QString ModelController::getConditionsBySpaces(QString spacename){ int spaceId = getSpaceIdByName(spacename); // QString jsonPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/spaces/" + QString::number(spaceId) + ".json"; // QJsonDocument doc; // QFile jsonFile(jsonPath); // QString conditionobj; // if (jsonFile.open(QFile::ReadOnly | QFile::Text)) { // doc = QJsonDocument::fromJson(jsonFile.readAll()); // conditionobj = doc.toJson(QJsonDocument::Indented); // jsonFile.close(); // } QList> conditions = this->fetcher->getSpaceconditon(spacename); QStringList labels = this->fetcher->getSpacelabels(spacename); auto obj = Condition::pharseConditions(conditions,labels); QJsonDocument doc(obj.toJsonObject()); QString conditionsobj = doc.toJson(); return conditionsobj; } bool ModelController::updateSpacestatus(QString spacename,bool status){ DatabaseManager manager; QString errorMsg; QString realSpaceName = spacename; if (spacename.isEmpty()) {//适é…�创建默认无å��字的空间时 auto currentSpaceNames = getAllSpacesName(); int count = 1; while (true) { auto currentSpaceName = tr("New Space %1").arg(count); realSpaceName = tr("New Space %1").arg(count-1); if (currentSpaceNames.contains(currentSpaceName)) { count++; } else { break; } } } int spaceId = getSpaceIdByName(realSpaceName); if (manager.updateSpacestatus(realSpaceName, status)) { this->fetcher->updateSpaceStatus(spaceId,status); return true; } else { qCritical()<fetcher->getSpaceStatus(spaceId); } bool ModelController::removeFileFromSpace(const QString &SpacesName, const QStringList &filepaths) { DatabaseManager manager; QString errorMsg; QStringList filelist = this->fetcher->getFilesInSpace(SpacesName,true); int spaceId = getSpaceIdByName(SpacesName); for (auto path : filepaths) { this->fetcher->updateSpaceFiles(SpacesName,path,true,SpacesFilesFetcher::OperationType::Remove); bool isUserRemove = filelist.contains(path); bool ok = manager.removeFileFromSpace(path,spaceId,isUserRemove,&errorMsg); if(!ok) return false; } Q_EMIT this->spacefileloadfinish(SpacesName); return true; } void ModelController::startsearch(QString keyword,QString SpaceName,QString ClientId){ m_clientId = ClientId; if (m_searchmodel) { delete m_searchmodel; } m_searchmodel = new SearchResultModel; if(!SpaceName.isEmpty()){ auto paths = getFilesInSpaceByName(SpaceName); m_searchmodel->setSearchInSpace(true); m_searchmodel->setSearchInSpacePaths(paths); }else{ m_searchmodel->setSearchInSpace(false); m_searchmodel->setSearchInSpacePaths(QStringList()); } m_searchmodel->setSearchKeyword(keyword); } void ModelController::reSearchWithLabels(QString keyword,QStringList Labels,QString SpaceName){ cancelSearch(); auto searchmodel = new SearchResultModel; if(!SpaceName.isEmpty()){ auto paths = getFilesInSpaceByName(SpaceName); searchmodel->setSearchInSpace(true); searchmodel->setSearchInSpacePaths(paths); }else{ searchmodel->setSearchInSpace(false); searchmodel->setSearchInSpacePaths(QStringList()); } searchmodel->setLabels(Labels); searchmodel->setSearchKeyword(keyword); } void ModelController::fileReload(QList infolist){ Q_EMIT searchfileReload(infolist,m_clientId); } void ModelController::SearchContentLoad(QList infolist){ Q_EMIT searchContentReload(infolist,m_clientId); } void ModelController::fileReloadByBatch(QList infolist,bool finish){ Q_EMIT searchfileReloadByBatch(infolist,m_clientId,finish); } void ModelController::fileTextContentLoad(QList infolist) { Q_EMIT searchTextContentReload(infolist,m_clientId); } void ModelController::updateSearchCondition(QString conditions){ Q_EMIT searchConditionChanged(conditions); } void ModelController::spaceUpdatefinish(QString spacename){ Q_EMIT spacefileloadfinish(spacename); } void ModelController::filesCreated(const QList> &infos, int spaceId){ QString spaceName = this->fetcher->getSpaceNameById(spaceId); QStringList spacefiles = getFilesInSpaceByName(spaceName,false); bool needGotoUri = spacefiles.isEmpty(); QStringList filelist; for (auto info:infos) { filelist<path(); } Q_EMIT spacesFilesAutoInsert(spaceName,filelist,needGotoUri); } void ModelController::fileDeleted(QMap deleteSpacesFile){ Q_EMIT spacesFilesAutoDelete(deleteSpacesFile); } void ModelController::cancelSearch(){ Q_EMIT cancelSearchRequest(); } void ModelController::spaceCreateFinish(QString spaceName,QStringList fileinfos){ Q_EMIT SpaceCreatefinished(spaceName,fileinfos); } void ModelController::requestShowAISubsystemDialog() { int type = getAinotAvailabletype(); if(type==1) QProcess::startDetached("ukui-control-center", {"-m", "search"}); else QProcess::startDetached("ukui-control-center", {"-m", "aisubsystem"}); } bool ModelController::isAisubsysteminited() { return is_ai_subsystem_inited(); } int ModelController::getAinotAvailabletype() { bool flage = false; const QByteArray id("org.ukui.search.settings"); if (QGSettings::isSchemaInstalled(id)) { auto settings = new QGSettings(id, QByteArray(), nullptr); QStringList keys = settings->keys(); if (keys.contains("aiIndexEnable")) { flage = settings->get("aiIndexEnable").toBool(); } delete settings; } if(!isAisubsysteminited()) return aiSubsystemNotFit; if(!flage) return aiIndexNotFit; return allFit; } bool ModelController::isUserAddFile(const QString &spaceName, const QString &FileName) { return this->fetcher->isUserAddFile(spaceName,FileName); } void ModelController::setCurrentSearchPath(const QString &path) { m_currentPath = path; } QString ModelController::getCurrentSearchpath() { return m_currentPath; } QStringList ModelController::getIntelligentLabel(QString keyword){ QStringList labels; bool isAiavailable = getAinotAvailabletype()==allFit ?true:false; if(!isAiavailable){ return labels; } AILabelHelper labelHelper; if (keyword.isEmpty()) { labels = labelHelper.getTopLabels(50); } else { labels = labelHelper.getSimilarLabels(keyword); } return labels; } QString ModelController::getFileSummery(QString filepath) { QString fileSummery; bool isAiavailable = getAinotAvailabletype()==allFit ?true:false; if(!isAiavailable){ return fileSummery; } AIPreviewHelper aiPreviewHelper; if (!filepath.isEmpty()) { fileSummery = aiPreviewHelper.getFileSummary(filepath); } return fileSummery; } QStringList ModelController::getFileLabels(QString filepath){ QStringList fileLabelList; bool isAiavailable = getAinotAvailabletype()==allFit ?true:false; if(!isAiavailable){ return fileLabelList; } AIPreviewHelper aiPreviewHelper; if (!filepath.isEmpty()) { fileLabelList = aiPreviewHelper.getFileLabels(filepath); } return fileLabelList; } qint64 ModelController::getSpaceAccesstime(QString spaceName) { int spaceId = fetcher->getSpaceIdByName(spaceName); QString configPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); QString jsonPath = QString("%1/spaces/%2.json").arg(configPath).arg(spaceId); QFileInfo spaceConfigFile(jsonPath); auto createTime = spaceConfigFile.birthTime(); auto createSec = createTime.toSecsSinceEpoch(); return createSec; } qint64 ModelController::getSpaceModifytime(QString spaceName) { int spaceId = fetcher->getSpaceIdByName(spaceName); QString configPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); QString jsonPath = QString("%1/spaces/%2.json").arg(configPath).arg(spaceId); QFileInfo spaceConfigFile(jsonPath); auto modifiedTime = spaceConfigFile.lastModified(); auto modifiedSec = modifiedTime.toSecsSinceEpoch(); return modifiedSec; } QVariantHash ModelController::getSpacesSortConfig(int spaceId) { QVariantHash values; values = SpacesSettings::globalInstance()->getSpacesSortConfig(spaceId); return values; } void ModelController::userAddFilesToSpaceBySpaceplugin(const QStringList &filePath, const QString &spaceName, bool isUserAdd) { Q_EMIT userAddFilesToSpaceBySpacepluginSignal(filePath,spaceName,isUserAdd); } void ModelController::editSpaceConditionBySpaceplugin(const QString &uri) { Q_EMIT editSpaceConditionBySpacepluginSignal(uri); } void ModelController::setSpacesSortConfig(int spaceId, int sortType, int sortOrder, int userAddedtype){ SpacesSettings::globalInstance()->setSpacesSortConfig(spaceId, sortType, sortOrder == Qt::AscendingOrder? 0: 1, userAddedtype); } peony-extensions/peony-intelligent-data-management-service/model/spacessettings.cpp0000664000175000017500000001624715257160264030041 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #include "spacessettings.h" #include #include #include static SpacesSettings *instance = nullptr; SpacesSettings *SpacesSettings::globalInstance() { if (!instance) { instance = new SpacesSettings; } return instance; } SpacesSettings::SpacesSettings(QObject *parent) : QObject{parent} { delayer = new QTimer(this); delayer->setInterval(500); delayer->setSingleShot(true); QSettings settings; settings.beginGroup("Common"); sortType = settings.value("sortType", 0).toInt(); sortOrder = settings.value("sortAsc", false).toBool()? Qt::AscendingOrder: Qt::DescendingOrder; useGlobalSorting = settings.value("useGlobalSorting", true).toBool(); userAddedFirstType = settings.value("userAddedFirstType", 7).toInt(); isSpacesCollapsed = settings.value("isSpacesCollapsed").toBool(); isRecentCollapsed = settings.value("isRecentCollapsed").toBool(); isSpaceListMode = settings.value("isSpaceListMode").toBool(); isPreviewMode = settings.value("isPreviewMode").toBool(); settings.endGroup(); auto startTimer = [=]{delayer->start();}; connect(this, &SpacesSettings::sortOrderChanged, delayer, startTimer); connect(this, &SpacesSettings::sortTypeChanged, delayer, startTimer); connect(this, &SpacesSettings::useGlobalSortingChanged, delayer, startTimer); connect(this, &SpacesSettings::userAddedFirstChanged, delayer, startTimer); connect(delayer, &QTimer::timeout, this, [=]{ QSettings settingsToSync; settingsToSync.beginGroup("Common"); settingsToSync.setValue("sortType", sortType); bool sortAsc = (sortOrder == Qt::AscendingOrder); settingsToSync.setValue("sortAsc", sortAsc); settingsToSync.setValue("useGlobalSorting", useGlobalSorting); settingsToSync.setValue("userAddedFirstType", userAddedFirstType); settingsToSync.endGroup(); settingsToSync.sync(); qDebug() << settingsToSync.fileName(); Q_EMIT sortConfigChanged(); }); } Qt::SortOrder SpacesSettings::getSortOrder() const { return sortOrder; } void SpacesSettings::setSortOrder(Qt::SortOrder newSortOrder) { if (sortOrder == newSortOrder) return; sortOrder = newSortOrder; Q_EMIT sortOrderChanged(); } int SpacesSettings::getSortType() const { return sortType; } void SpacesSettings::setSortType(int newSortType) { if (sortType == newSortType) return; sortType = newSortType; Q_EMIT sortTypeChanged(); } bool SpacesSettings::getUseGlobalSorting() const { return useGlobalSorting; } void SpacesSettings::setUseGlobalSorting(bool newUseGlobalSorting) { if (useGlobalSorting == newUseGlobalSorting) return; useGlobalSorting = newUseGlobalSorting; if (useGlobalSorting) { QSettings settings; settings.beginGroup("Spaces"); settings.clear(); settings.endGroup(); settings.sync(); } Q_EMIT useGlobalSortingChanged(); } int SpacesSettings::getUserAddedFirst() const { return userAddedFirstType; } void SpacesSettings::setUserAddedFirst(int newUserAddedFirst) { if (userAddedFirstType == newUserAddedFirst) return; setSortType(1); userAddedFirstType = newUserAddedFirst; Q_EMIT userAddedFirstChanged(); } void SpacesSettings::setSpacesSortConfig(int spaceId, int sortType, int sortOrder, int userAddedFirst) { QSettings settings; settings.beginGroup("Spaces"); settings.beginWriteArray(QString::number(spaceId), 3); settings.setValue("sortType", sortType); settings.setValue("sortOrder", sortOrder); settings.setValue("userAddedFirst", userAddedFirst); settings.endArray(); settings.endGroup(); settings.sync(); } QVariantHash SpacesSettings::getSpacesSortConfig(int spaceId) { QVariantHash result; QSettings settings; settings.beginGroup("Spaces"); settings.beginReadArray(QString::number(spaceId)); QVariant value = settings.value("sortType"); if (value.isNull()) { result.insert("sortType", this->getSortType()); } else { result.insert("sortType", value); } value = settings.value("sortOrder"); if (value.isNull()) { result.insert("sortOrder", this->getSortOrder() == Qt::AscendingOrder? 0: 1); } else { result.insert("sortOrder", value); } value = settings.value("userAddedFirstType"); if (value.isNull()) { result.insert("userAddedFirstType", this->getUserAddedFirst()); } else { result.insert("userAddedFirstType", value); } settings.endArray(); settings.endGroup(); return result; } bool SpacesSettings::getIsSpacesCollapsed() const { return isSpacesCollapsed; } void SpacesSettings::setIsSpacesCollapsed(bool newIsSpacesCollapsed) { if (isSpacesCollapsed == newIsSpacesCollapsed) return; isSpacesCollapsed = newIsSpacesCollapsed; QSettings settings; settings.beginGroup("Common"); settings.setValue("isSpacesCollapsed", newIsSpacesCollapsed); settings.endGroup(); settings.sync(); Q_EMIT isSpacesCollapsedChanged(); } bool SpacesSettings::getIsRecentCollapsed() const { return isRecentCollapsed; } void SpacesSettings::setIsRecentCollapsed(bool newIsRecentCollapsed) { if (isRecentCollapsed == newIsRecentCollapsed) return; isRecentCollapsed = newIsRecentCollapsed; QSettings settings; settings.beginGroup("Common"); settings.setValue("isRecentCollapsed", newIsRecentCollapsed); settings.endGroup(); settings.sync(); Q_EMIT isRecentCollapsedChanged(); } bool SpacesSettings::getIsSpaceListMode() const { return isSpaceListMode; } void SpacesSettings::setIsSpaceListMode(bool newIsSpaceListMode) { if (isSpaceListMode == newIsSpaceListMode) return; isSpaceListMode = newIsSpaceListMode; QSettings settings; settings.beginGroup("Common"); settings.setValue("isSpaceListMode", newIsSpaceListMode); settings.endGroup(); settings.sync(); Q_EMIT isSpaceListModeChanged(); } bool SpacesSettings::getIsPreviewMode() const { return isPreviewMode; } void SpacesSettings::setIsPreviewMode(bool newIsPreviewMode) { if (isPreviewMode == newIsPreviewMode) return; isPreviewMode = newIsPreviewMode; QSettings settings; settings.beginGroup("Common"); settings.setValue("isPreviewMode", newIsPreviewMode); settings.endGroup(); settings.sync(); Q_EMIT isPreviewModeChanged(); } peony-extensions/peony-intelligent-data-management-service/model/searchresultmodel.h0000664000175000017500000001755715257160277030205 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef SEARCHRESULTMODEL_H #define SEARCHRESULTMODEL_H #include #include #include #include "file/fileinfo.h" #include "condition/condition.h" #include "search/searchtask.h" class QTimer; class SearchResultModel : public QObject { Q_OBJECT public: static SearchResultModel *globalInstance(); explicit SearchResultModel(QObject *parent = nullptr); ~SearchResultModel(); bool getSearchInSpace() const; void setSearchInSpace(bool newSearchInSpace); const QString &getSearchKeyword() const; void setSearchKeyword(const QString &newSearchKeyword); const QList> &getSearchConditions() const; void setSearchConditions(const QList> &newSearchConditions); int getCurrentSpaceId() const; void setCurrentSpaceId(int newCurrentSpaceId); const QList> &getReversedConditions() const; const QList > &getNameMatchFiles() const; const QList > &getContentMatchFiles() const; void setSearchInSpacePaths(const QStringList &paths); bool getAiSearch() const; void setAiSearch(bool newAiSearch); bool getLoading() const; void setLoading(bool newLoading); const QStringList &getLabels() const; void setLabels(const QStringList &newLabels); const QStringList &getcurrentLabels() const; void setcurrentLabels(const QStringList &newLabels); bool getHasResult() const; void setHasResult(bool newHasResult); QList getContentResult(); Q_SIGNALS: void searchInSpaceChanged(); void searchKeywordChanged(); void searchConditionsChanged(); void currentSpaceIdChanged(); void updateSearchResult(); void aboutToUpdate(); void aiSearchChanged(); void loadingChanged(); void labelsChanged(); void hasResultChanged(); protected: protected Q_SLOTS: void delayUpdate(); void doUpdateInternal(); void saveSearchAsSpace(const QString &spaceName); private: QList> reversedConditions; bool searchInSpace = false; QString searchKeyword = nullptr; QList> searchConditions; QStringList labels; QStringList currentlabels; int currentSpaceId = -1; QJsonDocument aiConditionDescription; QList> currentContentMatchFiles; bool aiSearch = true; bool loading = false; bool hasResult = false; bool searchContentFinish = false; bool searchTextContentFinish = false; Q_PROPERTY(bool searchInSpace READ getSearchInSpace WRITE setSearchInSpace NOTIFY searchInSpaceChanged) Q_PROPERTY(QString searchKeyword READ getSearchKeyword WRITE setSearchKeyword NOTIFY searchKeywordChanged) //Q_PROPERTY(QList> searchConditions READ getSearchConditions WRITE setSearchConditions NOTIFY searchConditionsChanged) Q_PROPERTY(QStringList labels READ getLabels WRITE setLabels NOTIFY labelsChanged) Q_PROPERTY(int currentSpaceId READ getCurrentSpaceId WRITE setCurrentSpaceId NOTIFY currentSpaceIdChanged) Q_PROPERTY(bool aiSearch READ getAiSearch WRITE setAiSearch NOTIFY aiSearchChanged) Q_PROPERTY(bool loading READ getLoading WRITE setLoading NOTIFY loadingChanged) Q_PROPERTY(bool hasResult READ getHasResult WRITE setHasResult NOTIFY hasResultChanged) QList> nameMatchFiles; QList> contentMatchFiles; QList> textContentMatchFiles; QList> spaceBatchFileinfoList; QStringList searchInSpacePaths; QTimer *delayer = nullptr; int m_loadNameMatchFileCount = 0; bool m_loadNameMatchflefinish = false; int m_allCount = 0; SearchTask *searchTask = nullptr; bool aiIndexenable = false; bool isAiSubsystemavaliable = false; }; //class SearchResultProxyModel : public QSortFilterProxyModel //{ // Q_OBJECT //public: // static SearchResultProxyModel *globalInstance(); // explicit SearchResultProxyModel(); // bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const; // bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; // bool getSearchInSpace() const; // void setSearchInSpace(bool newSearchInSpace); // const QString &getSearchKeyword() const; // void setSearchKeyword(const QString &newSearchKeyword); // const QList > getSearchConditions() const; // void setSearchConditions(const QList > &newSearchConditions); // Q_INVOKABLE void saveSearchAsSpace(const QString &spaceName); // Q_INVOKABLE void clearCondition(); // Q_INVOKABLE void updateSearchResult(); // int getCurrentSpaceId() const; // void setCurrentSpaceId(int newCurrentSpaceId); // /*! // * \brief setSearchInSpacePaths // * æ�œç´¢ç•Œé�¢åˆ‡æ�¢ç©ºé—´æ—¶è®¾ç½®çš„æ•°æ�®æº�,用于进行空间内数æ�®åŒ¹é…� // * \param paths // * 需è¦�进行筛选的文件路径,一般是从空间页é�¢çš„model获å�– // */ // Q_INVOKABLE void setSearchInSpacePaths(const QStringList &paths); // bool getAiSearch() const; // void setAiSearch(bool newAiSearch); // bool getLoading() const; // void setLoading(bool newLoading); // const QStringList &getLabels() const; // void setLabels(const QStringList &newLabels); // const QStringList &getcurrentLabels() const; // void setcurrentLabels(const QStringList &newLabels); // bool getHasResult() const; // void setHasResult(bool newHasResult); // Q_INVOKABLE void setAiavaliabtype(int type); //Q_SIGNALS: // void searchInSpaceChanged(); // void searchKeywordChanged(); // void searchConditionsChanged(); // void currentSpaceIdChanged(); // void setSearchKeywordReqeust(const QString &keyword); // void aiSearchChanged(); // void loadingChanged(); // void labelsChanged(); // void hasResultChanged(); // //void searchend(QString path, QIcon icon,bool isuseadd,bool hasResult); //private: // SearchResultModel *sourceModel = nullptr; // int currentSpaceId = -1; // QStringList labels; // Q_PROPERTY(bool searchInSpace READ getSearchInSpace WRITE setSearchInSpace NOTIFY searchInSpaceChanged) // Q_PROPERTY(QString searchKeyword READ getSearchKeyword WRITE setSearchKeyword NOTIFY searchKeywordChanged) // Q_PROPERTY(QList> searchConditions READ getSearchConditions WRITE setSearchConditions NOTIFY searchConditionsChanged) // Q_PROPERTY(int currentSpaceId READ getCurrentSpaceId WRITE setCurrentSpaceId NOTIFY currentSpaceIdChanged) // Q_PROPERTY(bool aiSearch READ getAiSearch WRITE setAiSearch NOTIFY aiSearchChanged) // Q_PROPERTY(bool loading READ getLoading WRITE setLoading NOTIFY loadingChanged) // Q_PROPERTY(QStringList labels READ getLabels WRITE setLabels NOTIFY labelsChanged) // Q_PROPERTY(bool hasResult READ getHasResult WRITE setHasResult NOTIFY hasResultChanged) //}; #endif // SEARCHRESULTMODEL_H peony-extensions/peony-intelligent-data-management-service/model/spacessettings.h0000664000175000017500000000674315257160264027506 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef SPACESSETTINGS_H #define SPACESSETTINGS_H #include class QTimer; class SpacesSettings : public QObject { Q_OBJECT Q_PROPERTY(Qt::SortOrder sortOrder READ getSortOrder WRITE setSortOrder NOTIFY sortOrderChanged) Q_PROPERTY(int sortType READ getSortType WRITE setSortType NOTIFY sortTypeChanged) Q_PROPERTY(bool useGlobalSorting READ getUseGlobalSorting WRITE setUseGlobalSorting NOTIFY useGlobalSortingChanged) Q_PROPERTY(bool userAddedFirst READ getUserAddedFirst WRITE setUserAddedFirst NOTIFY userAddedFirstChanged) Q_PROPERTY(bool isSpacesCollapsed READ getIsSpacesCollapsed WRITE setIsSpacesCollapsed NOTIFY isSpacesCollapsedChanged) Q_PROPERTY(bool isRecentCollapsed READ getIsRecentCollapsed WRITE setIsRecentCollapsed NOTIFY isRecentCollapsedChanged) Q_PROPERTY(bool isSpaceListMode READ getIsSpaceListMode WRITE setIsSpaceListMode NOTIFY isSpaceListModeChanged) Q_PROPERTY(bool isPreviewMode READ getIsPreviewMode WRITE setIsPreviewMode NOTIFY isPreviewModeChanged) public: static SpacesSettings *globalInstance(); explicit SpacesSettings(QObject *parent = nullptr); Q_INVOKABLE Qt::SortOrder getSortOrder() const; Q_INVOKABLE void setSortOrder(Qt::SortOrder newSortOrder); Q_INVOKABLE int getSortType() const; Q_INVOKABLE void setSortType(int newSortType); Q_INVOKABLE bool getUseGlobalSorting() const; Q_INVOKABLE void setUseGlobalSorting(bool newUseGlobalSorting); Q_INVOKABLE int getUserAddedFirst() const; Q_INVOKABLE void setUserAddedFirst(int newUserAddedFirst); void setSpacesSortConfig(int spaceId, int sortType, int sortOrder, int userAddedFirst); QVariantHash getSpacesSortConfig(int spaceId); bool getIsSpacesCollapsed() const; void setIsSpacesCollapsed(bool newIsSpacesCollapsed); bool getIsRecentCollapsed() const; void setIsRecentCollapsed(bool newIsRecentCollapsed); bool getIsSpaceListMode() const; void setIsSpaceListMode(bool newIsSpaceListMode); bool getIsPreviewMode() const; void setIsPreviewMode(bool newIsPreviewMode); Q_SIGNALS: void sortOrderChanged(); void sortTypeChanged(); void useGlobalSortingChanged(); void userAddedFirstChanged(); void sortConfigChanged(); void isSpacesCollapsedChanged(); void isRecentCollapsedChanged(); void isSpaceListModeChanged(); void isPreviewModeChanged(); private: Qt::SortOrder sortOrder = Qt::DescendingOrder; int sortType = 0; bool useGlobalSorting = true; int userAddedFirstType = 7; bool isSpacesCollapsed = false; bool isRecentCollapsed = false; bool isSpaceListMode = false; bool isPreviewMode = false; QTimer *delayer = nullptr; }; #endif // SPACESSETTINGS_H peony-extensions/peony-intelligent-data-management-service/model/searchresultmodel.cpp0000664000175000017500000005062215257160277030526 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #include "searchresultmodel.h" #include "modelcontroller.h" #include "file/fileinfojob.h" #include "ai/aisearchtask.h" #include #include #include #include #include //SearchResultModel *SearchResultModel::globalInstance() //{ // if (!instance) { // instance = new SearchResultModel; // } // return instance; //} SearchResultModel::SearchResultModel(QObject *parent) : QObject(parent) { delayer = new QTimer; delayer->setSingleShot(true); delayer->setInterval(500); connect(delayer, &QTimer::timeout, this, &SearchResultModel::doUpdateInternal); connect(this, &SearchResultModel::searchKeywordChanged, this, &SearchResultModel::delayUpdate); // connect(this, &SearchResultModel::searchInSpaceChanged, this, &SearchResultModel::delayUpdate); // connect(this, &SearchResultModel::searchConditionsChanged, this, &SearchResultModel::delayUpdate); // connect(this, &SearchResultModel::labelsChanged, this, &SearchResultModel::delayUpdate); // connect(this, &SearchResultModel::currentSpaceIdChanged, this, &SearchResultModel::delayUpdate); // connect(this, &SearchResultModel::aiSearchChanged, this, &SearchResultModel::delayUpdate); // connect(this, &SearchResultModel::updateSearchResult, this, &SearchResultModel::delayUpdate); searchTask = new SearchTask; QString currentSearhPath = ModelController::globalInstance()->getCurrentSearchpath(); if(!currentSearhPath.isEmpty()){ searchTask->setSearchPath(currentSearhPath); } connect(ModelController::globalInstance(), &ModelController::cancelSearchRequest, searchTask, &SearchTask::cancel); connect(searchTask, &SearchTask::searchFinished, this, [=]{ Q_EMIT searchTask->searchLoadBatch(true); }); connect(searchTask, &SearchTask::searchLoadBatch, this, [=](bool finish){ int count = searchTask->resultInfos.size(); int start = count - SEARCH_LOAD_BATCH; int length = SEARCH_LOAD_BATCH; if (!searchInSpace) { if(finish){ if(count < SEARCH_LOAD_BATCH){ start = 0; length = count; }else{ if(count%SEARCH_LOAD_BATCH != 0){ length = count%SEARCH_LOAD_BATCH; }else { length = 0; } } m_loadNameMatchflefinish = true; m_allCount = searchTask->resultInfos.size(); qDebug() << "match files count" << count; } }else{ if(finish){ m_loadNameMatchflefinish = true; m_allCount += spaceBatchFileinfoList.size(); } } auto info = searchInSpace? spaceBatchFileinfoList:searchTask->resultInfos.mid(start,length); QSet> set(info.begin(), info.end()); auto searchJob = UKUI::IDM::FileInfoJob::fromInfos(set.values(),false); searchJob->setAutoDelete(true); searchJob->setConditions(this->searchConditions); connect(this, &SearchResultModel::aboutToUpdate, searchJob, &UKUI::IDM::FileInfoJob::cancel); connect(ModelController::globalInstance(), &ModelController::cancelSearchRequest, searchJob, &UKUI::IDM::FileInfoJob::cancel); connect(searchJob, &UKUI::IDM::FileInfoJob::finished, this, [=]{ nameMatchFiles = searchJob->getInfos(); m_loadNameMatchFileCount += nameMatchFiles.size(); QList list; if (nameMatchFiles.count() > 0){ setHasResult(true); setLoading(false); for(auto fileinfo:nameMatchFiles){ QStringList fileinfolist; fileinfolist<uri()<modifyDateString()<fileType()<sizeFormat()<displayName()<path() <iconName()<mimeType()<size())<timeModifiedMsec()); list.append(fileinfolist); } } if(m_allCount == m_loadNameMatchFileCount){ qDebug()<<"########"<fileReloadByBatch(list,m_loadNameMatchflefinish && m_allCount == m_loadNameMatchFileCount); }, Qt::BlockingQueuedConnection); searchJob->start(); }); connect(searchTask, &SearchTask::searchContentFinished, this, [=](bool successed){ if (!successed){ if(searchContentFinish){ QList list; list = getContentResult(); ModelController::globalInstance()->SearchContentLoad(list); } searchTextContentFinish = true; return; } auto searchContentJob = UKUI::IDM::FileInfoJob::fromInfos(searchTask->contentResultInfos,false); searchContentJob->setAutoDelete(true); searchContentJob->setConditions(this->searchConditions); connect(this, &SearchResultModel::aboutToUpdate, searchContentJob, &UKUI::IDM::FileInfoJob::cancel); connect(searchContentJob, &UKUI::IDM::FileInfoJob::finished, this, [=]{ textContentMatchFiles = searchContentJob->getInfos(); searchTextContentFinish = true; QList list; if(searchContentFinish){ list = getContentResult(); ModelController::globalInstance()->SearchContentLoad(list); } }, Qt::BlockingQueuedConnection); searchContentJob->start(); }); } SearchResultModel::~SearchResultModel() { currentContentMatchFiles.clear(); nameMatchFiles.clear(); contentMatchFiles.clear(); textContentMatchFiles.clear(); } bool SearchResultModel::getSearchInSpace() const { return searchInSpace; } void SearchResultModel::setSearchInSpace(bool newSearchInSpace) { if (searchInSpace == newSearchInSpace) return; searchInSpace = newSearchInSpace; Q_EMIT searchInSpaceChanged(); } const QString &SearchResultModel::getSearchKeyword() const { return searchKeyword; } void SearchResultModel::setSearchKeyword(const QString &newSearchKeyword) { if (searchKeyword == newSearchKeyword) return; searchKeyword = newSearchKeyword; reversedConditions.clear(); auto condition = std::shared_ptr(new Condition(Condition::ConditionMatchRule)); condition->setConditionMatchRule(Condition::NameOrContent); condition->setIsAndCondition(false); auto condition1 = std::shared_ptr(new Condition(Condition::FileName)); condition1->setFileNameCondition(true, QStringList() << newSearchKeyword); condition1->setIsAndCondition(false); auto condition2 = std::shared_ptr(new Condition(Condition::FileContent)); condition2->setFileContentCondition(newSearchKeyword); condition2->setIsAndCondition(false); reversedConditions << condition; reversedConditions << condition1; if(aiIndexenable && isAiSubsystemavaliable) reversedConditions << condition2; Q_EMIT searchKeywordChanged(); currentlabels.clear(); } const QList> &SearchResultModel::getSearchConditions() const { return searchConditions; } void SearchResultModel::setSearchConditions(const QList> &newSearchConditions) { if (searchConditions == newSearchConditions) return; searchConditions.clear(); searchConditions = newSearchConditions; Q_EMIT searchConditionsChanged(); } int SearchResultModel::getCurrentSpaceId() const { return currentSpaceId; } void SearchResultModel::setCurrentSpaceId(int newCurrentSpaceId) { if (currentSpaceId == newCurrentSpaceId) return; currentSpaceId = newCurrentSpaceId; Q_EMIT currentSpaceIdChanged(); } const QList> &SearchResultModel::getReversedConditions() const { return reversedConditions; } void SearchResultModel::delayUpdate() { aiConditionDescription = QJsonDocument(); setLoading(true); Q_EMIT aboutToUpdate(); delayer->start(); } void SearchResultModel::doUpdateInternal() { //this->beginResetModel(); nameMatchFiles.clear(); contentMatchFiles.clear(); setHasResult(false); //this->endResetModel(); if (searchKeyword.isEmpty()) { return; } Q_EMIT ModelController::globalInstance()->searchKeywordChanged(searchKeyword); setLoading(true); //qDebug() << "do update internal" << searchInSpace << currentSpaceId << searchKeyword << reversedConditions << searchConditions; QList> conditions; conditions << reversedConditions; conditions << searchConditions; auto conditionsDescription = Condition::pharseConditions(conditions, labels); // fixme: 调用ai接å�£èŽ·å�–æ�œç´¢æ•°æ�®ï¼Œå¹¶ä¸”获å�–语义é…�置的json文件 qDebug() << "start ai search"; auto thread = new QThread; auto task = new AISearchTask(searchKeyword); // 将输入的关键è¯�è§£æž�æˆ�æ�¡ä»¶å†�进行æ�œç´¢ task->setPharseConditions(true); task->moveToThread(thread); connect(thread, &QThread::started, task, &AISearchTask::doQuery); connect(thread, &QThread::finished, thread, &QThread::deleteLater); connect(this, &SearchResultModel::aboutToUpdate, task, &AISearchTask::cancel); connect(ModelController::globalInstance(), &ModelController::cancelSearchRequest, task, &AISearchTask::cancel); connect(task, &AISearchTask::finisheds, this, [=](bool successed, const QList &results, const QJsonDocument &conditions, const QString &errorMsg){ /*thread->quit();*/}, Qt::QueuedConnection ); connect(task, &AISearchTask::finished, this, [=](bool successed, const QList &results, const QJsonDocument &conditions, const QString &errorMsg){ thread->quit(); if (!successed) { QList list; if(searchTextContentFinish){ list = getContentResult(); ModelController::globalInstance()->SearchContentLoad(list); } searchContentFinish = true; return; } aiConditionDescription = conditions; auto job = UKUI::IDM::FileInfoJob::fromPaths(results); QList> realConditions = searchConditions; QString currentSearhPath = ModelController::globalInstance()->getCurrentSearchpath(); if(!currentSearhPath.isEmpty()){ auto condition = std::shared_ptr(new Condition(Condition::SearchLocation)); condition->setConditionMatchRule(Condition::NameOrContent); condition->setSearchLocationCondition(true,currentSearhPath); condition->setIsAndCondition(false); realConditions.append(condition); } job->setConditions(realConditions); job->setAutoDelete(true); connect(this, &SearchResultModel::aboutToUpdate, job, &UKUI::IDM::FileInfoJob::cancel); connect(ModelController::globalInstance(), &ModelController::cancelSearchRequest, job, &UKUI::IDM::FileInfoJob::cancel); connect(job, &UKUI::IDM::FileInfoJob::finished, this, [=]{ contentMatchFiles = job->getInfos(); QList list; searchContentFinish = true; if(searchTextContentFinish){ list = getContentResult(); ModelController::globalInstance()->SearchContentLoad(list); } QSet uris; if (searchInSpace) { for (auto path : searchInSpacePaths) { QUrl url = QUrl::fromLocalFile(path); uris << url.toEncoded(); } QList> spacesMatchedInfos; for (auto info : contentMatchFiles) { if (uris.contains(info->uri())) { spacesMatchedInfos << info; } } contentMatchFiles = spacesMatchedInfos; } if (contentMatchFiles.count() > 0) { setHasResult(true); } setLoading(false); }, Qt::BlockingQueuedConnection); job->start(); }); if(ModelController::globalInstance()->getAinotAvailabletype() == ModelController::allFit) { thread->start(); }else{ searchContentFinish = true; } // if (!aiSearch) { if (!searchInSpace) { searchTask->cancel(); searchTask->setConditionsDescription(conditionsDescription); searchTask->start(); } else { searchTask->setConditionsDescription(conditionsDescription); searchTask->setNeedSearchFile(false); searchTask->start(); QList> infos; for (auto path:this->searchInSpacePaths) { auto info = UKUI::IDM::FileInfo::fromPath(path); infos<> allConditions; QList> conditions; allConditions << reversedConditions << searchConditions; // for (auto condition:allConditions) { // if(condition->type() == Condition::FileName){ // conditions<setConditions(allConditions); //job->setLabels(labels); job->setAutoDelete(true); connect(this, &SearchResultModel::aboutToUpdate, job, &UKUI::IDM::FileInfoJob::cancel); connect(ModelController::globalInstance(), &ModelController::cancelSearchRequest, job, &UKUI::IDM::FileInfoJob::cancel); connect(job, &UKUI::IDM::FileInfoJob::finished, this, [=]{ nameMatchFiles = job->getInfos(); int i = 0; for (auto fileinfo:nameMatchFiles) { spaceBatchFileinfoList<searchLoadBatch(false); spaceBatchFileinfoList.clear(); }else if(i == nameMatchFiles.size()){ Q_EMIT searchTask->searchLoadBatch(true); } } }, Qt::BlockingQueuedConnection); job->start(); } /* } else { // fixme: 调用ai接å�£èŽ·å�–æ�œç´¢æ•°æ�®ï¼Œå¹¶ä¸”获å�–语义é…�置的json文件 qDebug() << "start ai search"; auto thread = new QThread; auto task = new AISearchTask(searchKeyword); // 将输入的关键è¯�è§£æž�æˆ�æ�¡ä»¶å†�进行æ�œç´¢ task->setPharseConditions(true); task->moveToThread(thread); connect(thread, &QThread::started, task, &AISearchTask::doQuery); connect(thread, &QThread::finished, thread, &QThread::deleteLater); connect(this, &SearchResultModel::aboutToUpdate, task, &AISearchTask::cancel); connect(task, &AISearchTask::finished, this, [=](bool successed, const QList> &results, const QJsonDocument &conditions, const QString &errorMsg){ thread->quit(); if (!successed) { return; } aiConditionDescription = conditions; auto job = UKUI::IDM::FileInfoJob::fromInfos(results); job->setAutoDelete(true); connect(this, &SearchResultModel::aboutToUpdate, job, &UKUI::IDM::FileInfoJob::cancel); connect(job, &UKUI::IDM::FileInfoJob::finished, this, [=]{ this->beginResetModel(); contentMatchFiles = job->getInfos(); if (contentMatchFiles.count() > 0) { setHasResult(true); } this->endResetModel(); setLoading(false); }, Qt::BlockingQueuedConnection); job->start(); }); thread->start(); }*/ } void SearchResultModel::saveSearchAsSpace(const QString &spaceName) { // fixme: 当æ�œç´¢ç»“未完æˆ�æ—¶ä¸�应该ä¿�å­˜ QList> infos; infos << nameMatchFiles; QList> nameMatcheFilesWithoutfilename; for(auto info:contentMatchFiles) { if(!nameMatchFiles.contains(info)) { nameMatcheFilesWithoutfilename<> conditions; conditions << reversedConditions; conditions << searchConditions; auto conditonsDescription = Condition::pharseConditions(conditions).toJsonObject(); QJsonDocument doc(conditonsDescription); QString jsonStr = doc.toJson(QJsonDocument::Indented); QStringList paths; for (auto info:infos) { paths<path(); } ModelController::globalInstance()->onSpaceCreateRequestWithFiles(spaceName, jsonStr, true, paths); } bool SearchResultModel::getHasResult() const { return hasResult; } void SearchResultModel::setHasResult(bool newHasResult) { if (hasResult == newHasResult) return; hasResult = newHasResult; Q_EMIT hasResultChanged(); } QList SearchResultModel::getContentResult() { //å�–智能内容识别和文本内容并集 QList list; QList> result; result<path(); if(searchInSpace && !this->searchInSpacePaths.contains(path)){//search in space continue; } QStringList fileinfolist; fileinfolist<uri()<modifyDateString()<fileType()<sizeFormat()<displayName() <path()<iconName()<mimeType()<size())<timeModifiedMsec()); list.append(fileinfolist); } QSet set(list.begin(), list.end()); return set.values(); } const QStringList &SearchResultModel::getLabels() const { return labels; } void SearchResultModel::setLabels(const QStringList &newLabels) { if (labels == newLabels) return; labels = newLabels; Q_EMIT labelsChanged(); } const QStringList &SearchResultModel::getcurrentLabels() const { return currentlabels; } void SearchResultModel::setcurrentLabels(const QStringList &newLabels) { if (currentlabels == newLabels) return; currentlabels = newLabels; } bool SearchResultModel::getLoading() const { return loading; } void SearchResultModel::setLoading(bool newLoading) { if (loading == newLoading) return; loading = newLoading; Q_EMIT loadingChanged(); } bool SearchResultModel::getAiSearch() const { return aiSearch; } void SearchResultModel::setAiSearch(bool newAiSearch) { if (aiSearch == newAiSearch) return; aiSearch = newAiSearch; Q_EMIT aiSearchChanged(); } const QList > &SearchResultModel::getContentMatchFiles() const { return contentMatchFiles; } void SearchResultModel::setSearchInSpacePaths(const QStringList &paths) { searchInSpacePaths = paths; } const QList > &SearchResultModel::getNameMatchFiles() const { return nameMatchFiles; } peony-extensions/peony-intelligent-data-management-service/model/spacesfilesfetcher.cpp0000664000175000017500000003545315257160277030650 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #include "spacesfilesfetcher.h" #include "../database/databasemanager.h" #include "../condition/condition.h" #ifdef COMPLIE_AS_PROJECT #include "file/fileinfojob.h" #include "file/fileinfomanager.h" #include "modelcontroller.h" #endif #include #include #include #include #include #include #include #include SpacesFilesFetcher::SpacesFilesFetcher(const QString &dbName,const QString &filedbname, QObject *parent) : QObject(parent), dbName(dbName),filedbName(filedbname) { delayer = new QTimer(this); delayer->setInterval(300); delayer->setSingleShot(true); connect(delayer, &QTimer::timeout, this, &SpacesFilesFetcher::handleFilesCreatedInternal); } QStringList SpacesFilesFetcher::getAllSpacesName() { QReadLocker r(&rwLock); return spaces.values(); } int SpacesFilesFetcher::getSpaceIdByName(const QString &spaceName) { QReadLocker r(&rwLock); return spaces.key(spaceName, -1); } QString SpacesFilesFetcher::getSpaceNameById(int spaceId) { QReadLocker r(&rwLock); return spaces.value(spaceId); } QStringList SpacesFilesFetcher::getFilesInSpace(const QString &spaceName, bool isUserAdded) { int spaceId = getSpaceIdByName(spaceName); return getFilesInSpaceById(spaceId, isUserAdded); } QStringList SpacesFilesFetcher::getFilesInSpaceById(int spaceId, bool isUserAdded) { QReadLocker r(&rwLock); return isUserAdded? userAddedInfos.value(spaceId): infos.value(spaceId); } QList> SpacesFilesFetcher::getSpaceconditon(QString spaceName){ QReadLocker r(&rwLock); int spaceId = getSpaceIdByName(spaceName); return spacesConditions.value(spaceId); } QStringList SpacesFilesFetcher::getSpacelabels(QString spaceName){ QReadLocker r(&rwLock); int spaceId = getSpaceIdByName(spaceName); return spacesLabels.value(spaceId); } void SpacesFilesFetcher::DeleteTargetFiles(QList files) { QStringList allSpaceName = getAllSpacesName(); QMap m_delete; for(auto spaceName:allSpaceName){ QStringList allFiles; QStringList nowSpaceFiles; int spaceId = getSpaceIdByName(spaceName); auto useraddfiles = getFilesInSpace(spaceName,false); auto autoaddfiles = getFilesInSpace(spaceName,true); allFiles<spaceRemovedWithFilesRequest(spaceId,infosToBeRemoved); // 清空视图文件 //Q_EMIT this->requestClearSpace(spaceId); Q_EMIT this->requestClearSpace(spaceId); return; } // todo: 和旧的æ�¡ä»¶å�šæ¯”è¾ƒï¼Œå°�试尽é‡�å‡�å°‘ä¸�å¿…è¦�çš„é��历和匹é…� bool needClearAndResearch = true; { QWriteLocker w(&rwLock); spacesConditions.insert(spaceId, conditions); spacesLabels.insert(spaceId, labels); Q_EMIT handleSpaceConditionsChangedDone(spaceId); } if (needClearAndResearch) { // 清空空间内的文件,并且å�‘é€�请求é‡�æ–°æ�œç´¢çš„ä¿¡å�· // DatabaseManager dbManager; // for (auto info : infosToBeRemoved) { // dbManager.removeFileFromSpace(info, spaceId); // } Q_EMIT ModelController::globalInstance()->spaceRemovedWithFilesRequest(spaceId,infosToBeRemoved); { QWriteLocker w(&rwLock); this->infos[spaceId] = QStringList(); } Q_EMIT this->requestRescanSpaceWithConditionsDescritpion(spaceId, conditionsDescription); } else { // 对当å‰�的信æ�¯å�šè¿‡æ»¤ï¼Œå¾—出需è¦�移除的文件,请求更新 } #endif } void SpacesFilesFetcher::handleFileCreated(const QString &newFile) { if (movedFiles.contains(newFile)) { // æ�œç´¢ç´¢å¼•æœ�务å�‘出的信å�·ä¼šå’Œpeonyå�‘出的信å�·æœ‰å†²çª�,这里为了解决冲çª�加上此æµ�程 movedFiles.remove(newFile); return; } if (deletedFilesToHandle.contains(newFile)) { deletedFilesToHandle.remove(newFile); } else { createdFilesToHandle.insert(newFile); } if (!delayer->isActive()) { delayer->start(); } } void SpacesFilesFetcher::handleFileIndexCreated(const QString &newFile) { needChecklabel = true; if (movedFiles.contains(newFile)) { // æ�œç´¢ç´¢å¼•æœ�务å�‘出的信å�·ä¼šå’Œpeonyå�‘出的信å�·æœ‰å†²çª�,这里为了解决冲çª�加上此æµ�程 movedFiles.remove(newFile); return; } if (deletedFilesToHandle.contains(newFile)) { deletedFilesToHandle.remove(newFile); } else { createdFilesToHandle.insert(newFile); } if (!delayer->isActive()) { delayer->start(); } } void SpacesFilesFetcher::handleFileDeleted(const QString &deletedFile) { // fixme: å�Œæ­¥æ•°æ�®åº“ if (createdFilesToHandle.contains(deletedFile)) { createdFilesToHandle.remove(deletedFile); } else { deletedFilesToHandle.insert(deletedFile); } if (!delayer->isActive()) { delayer->start(); } } void SpacesFilesFetcher::handleFileMoved(const QString &oldFile, const QString &newFile) { movedFiles.remove(oldFile); movedFiles.insert(newFile); createdFilesToHandle.insert(newFile); deletedFilesToHandle.insert(oldFile); if (!delayer->isActive()) { delayer->start(); } } void SpacesFilesFetcher::handleAfterFilesReloaded(const QStringList &infos, int spaceId) { this->infos.remove(spaceId); this->infos.insert(spaceId, infos); QString spacename = getSpaceNameById(spaceId); Q_EMIT updateSpacefileinfo(spacename); DatabaseManager dbManager; for (auto info : infos) { if (info.isEmpty()) { bool ok = dbManager.addFileToSpace(info, spaceId); if(!ok){ return; } } else { dbManager.addFileToSpace(info, spaceId); } } } void SpacesFilesFetcher::handleAfterFilesReloadedBycreate(const QStringList &infos, int spaceId){ this->infos.insert(spaceId, infos); QString spacename = getSpaceNameById(spaceId); Q_EMIT spaceCreateFinish(spacename,infos); DatabaseManager dbManager; for (auto info : infos) { if (info.isEmpty()) { bool ok = dbManager.addFileToSpace(info, spaceId); if(!ok){ return; } } else { dbManager.addFileToSpace(info, spaceId); } } } void SpacesFilesFetcher::handleSpaceRemoved(int spaceId, const QStringList &infosToBeRemoved) { DatabaseManager dbManager; for (auto info : infosToBeRemoved) { dbManager.removeFileFromSpace(info, spaceId); } } void SpacesFilesFetcher::handleFilesCreatedInternal() { #ifdef COMPLIE_AS_PROJECT QSet targetFiles; QSet targetDeletedFiles; createdFilesToHandle.swap(targetFiles); deletedFilesToHandle.swap(targetDeletedFiles); { QReadLocker r(&rwLock); for (auto spaceId : spaces.keys()) { if(!getSpaceStatus(spaceId))//当自动更新关闭则跳过 continue; auto conditions = spacesConditions.value(spaceId); auto labels = spacesLabels.value(spaceId); if (conditions.isEmpty() && labels.isEmpty()) { // 空白空间跳过匹é…�æµ�程 continue; } auto job = UKUI::IDM::FileInfoJob::fromPaths(targetFiles.values()); job->setConditions(conditions); job->setLabels(labels); // 需è¦�处ç�†æ–‡ä»¶å†…容æ�¡ä»¶ job->setHandleContentCondition(true); job->setAutoDelete(true); connect(job, &UKUI::IDM::FileInfoJob::finished, this, [=]{ auto targetInfos = job->getInfos(); if (!targetInfos.isEmpty()) { Q_EMIT this->handleFilesCreatedProgressed(targetInfos, spaceId); DatabaseManager dbManager; auto spaceName = this->getSpaceNameById(spaceId); for (auto info : targetInfos) { auto path = info->path(); bool ok = dbManager.addFileToSpace(path, spaceName); if(ok){ updateSpaceFiles(spaceName,path,false,Add); } } } }, Qt::BlockingQueuedConnection); // 如果在处ç�†å�˜æ›´æ—¶ç©ºé—´æ�¡ä»¶å�‘生改å�˜ï¼Œåˆ™å�–消此次处ç�†ï¼Œè¿™é‡Œå�¯èƒ½ä¼šä¸¢å¤±ä¸€éƒ¨åˆ†æ•°æ�®ï¼Œéœ€è¦�考虑结å�ˆå…¶ä»–场景优化 connect(this, &SpacesFilesFetcher::handleSpaceConditionsChangedDone, job, [=](int changedSpaceId){ if (changedSpaceId == spaceId) { job->cancel(); } }); job->start(); } } if (!targetDeletedFiles.isEmpty()) { DeleteTargetFiles(targetDeletedFiles.values()); DatabaseManager dbManager; for (auto file : targetDeletedFiles) { dbManager.removeFileFromAllSpace(file); } } #endif } void SpacesFilesFetcher::fetch() { DatabaseManager manager(dbName); auto allSpaces = manager.getAllSpaceNames(); for (auto space : allSpaces) { int id = manager.getSpaceIdByName(space); spaces.insert(id, space); // 获å�–æ�¡ä»¶é…�ç½® // 加载标签和æ�¡ä»¶é…�ç½® QString jsonPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/spaces/" + QString::number(id) + ".json"; QFile file(jsonPath); file.open(QFile::ReadOnly|QFile::Text); QJsonDocument doc = QJsonDocument::fromJson(file.readAll()); file.close(); auto conditions = Condition::generateContitionsFromDescription(doc.object()); auto labels = Condition::getLabelsFromDescription(doc.object()); spacesConditions.insert(id, conditions); spacesLabels.insert(id, labels); bool status = manager.getSpacestatus(space); spaceStatus.insert(id,status); } QStringList filesNeedRemove; auto userAddedFiles = manager.getAllFilesFromSpacesBySpaceIds(true); for (int spaceId : userAddedFiles.keys()) { if (!this->spaces.keys().contains(spaceId)) { // fixme: 清除多余的数æ�® continue; } QStringList files = userAddedFiles.value(spaceId); QList> fileinfoList; QStringList infoList; for (auto file : files) { infoList << file; auto info = UKUI::IDM::FileInfo::fromPath(file,true); fileinfoList << info; } userAddedFileInfos.insert(spaceId, fileinfoList); userAddedInfos.insert(spaceId, infoList); } auto autoAddedFiles = manager.getAllFilesFromSpacesBySpaceIds(false); for (int spaceId : autoAddedFiles.keys()) { if (!this->spaces.keys().contains(spaceId)) { // fixme: 清除多余的数æ�® continue; } QStringList files = autoAddedFiles.value(spaceId); QStringList infoList; QList> fileinfoList; for (auto file : files) { infoList << file; auto info = UKUI::IDM::FileInfo::fromPath(file,true); fileinfoList << info; } infos.insert(spaceId, infoList); fileInfos.insert(spaceId,fileinfoList); } Q_EMIT fetched(true); // // 在fetched之å�Žï¼Œæ­¤å¤„的缓存ä¸�å†�使用,数æ�®è½¬åˆ°å�„个model中处ç�† // userAddedInfos.clear(); // infos.clear(); } peony-extensions/peony-intelligent-data-management-service/model/spacesfilesfetcher.h0000664000175000017500000001035715257160264030305 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef SPACESFILESFETCHER_H #define SPACESFILESFETCHER_H #include #include #include #include #include "file/fileinfo.h" #include class Condition; class QTimer; class SpacesFilesFetcher : public QObject { enum OperationType { Add=1, Remove, }; friend class ModelController; friend class PreviewHelper; Q_OBJECT public: explicit SpacesFilesFetcher(const QString &dbName = "peony-idm.db", const QString &filedbname = "peony-idm-file.db",QObject *parent = nullptr); QStringList getAllSpacesName(); int getSpaceIdByName(const QString &spaceName); QString getSpaceNameById(int spaceId); // 仅在fetched阶段调用,fetched之å�Žéœ€è¦�从FileItemModel中获å�–空间文件信æ�¯ QStringList getFilesInSpace(const QString &spaceName, bool isUserAdded = false); QStringList getFilesInSpaceById(int spaceId, bool isUserAdded = false); QList> getSpaceconditon(QString SpaceName); QStringList getSpacelabels(QString SpaceName); void DeleteTargetFiles(QListfiles); void updateSpaceFiles(QString SpaceName, QString file,bool isUserRemove ,SpacesFilesFetcher::OperationType type); bool getSpaceStatus(int spaceId); void updateSpaceStatus(int spaceId,bool statu); bool isUserAddFile(const QString &spaceName,const QString &FileName); Q_SIGNALS: void fetched(bool successed); void handleSpaceConditionsChangedDone(int spaceId); void handleFilesCreatedProgressed(const QList> &newFiles, int spaceId); void handleSpaceConditionsProgressed(bool needReload, const QList> &resultFiles, int spaceId); void requestRescanSpaceWithConditionsDescritpion(int spaceId, const QVariant &conditionsDescription); void requestClearSpace(int spaceId); void updateSpacefileinfo(QString spacename); QList> requestFilesInSpaceById(int spaceId); void FileDeleted(QMap deleteSpacesFiles); void spaceCreateFinish(QString spaceName,const QStringList &infosToBeRemoved); public Q_SLOTS: void fetch(); void updateSpaceConditions(int spaceId, const QString &spaceName, const QVariant &conditionsDescription); void handleFileCreated(const QString &newFile); void handleFileIndexCreated(const QString &newFile); void handleFileDeleted(const QString &deletedFile); void handleFileMoved(const QString &oldFile, const QString &newFile); void handleAfterFilesReloaded(const QStringList &infos, int spaceId); void handleAfterFilesReloadedBycreate(const QStringList &infos, int spaceId); void handleSpaceRemoved(int spaceId, const QStringList &infosToBeRemoved); protected Q_SLOTS: void handleFilesCreatedInternal(); private: QReadWriteLock rwLock; QTimer *delayer = nullptr; QSet createdFilesToHandle; QSet deletedFilesToHandle; QSet movedFiles; QMap spaces; QMap spacesLabels; QMap>> spacesConditions; QMap infos; QMap userAddedInfos; QMap>> fileInfos; QMap>> userAddedFileInfos; QMap spaceStatus; QString dbName; QString filedbName; bool needChecklabel = false; }; #endif // SPACESFILESFETCHER_H peony-extensions/peony-intelligent-data-management-service/model/modelcontroller.h0000664000175000017500000001700215257160277027645 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: JinQin He * */ #ifndef MODELCONTROLLER_H #define MODELCONTROLLER_H #include #include #include #include #include "model/searchresultmodel.h" #include "file/fileinfo.h" #include "ai/ailabelhelper.h" #include "spacessettings.h" #include "file/fileinfomanager.h" #if defined(__x86_64__) || defined(_M_X64) || defined(__aarch64__)|| defined(_M_ARM64) #define ARCH_AVAILABLE_AI #endif class SpacesFilesFetcher; class Condition; class ModelController : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface","org.peony.idm.modelcontroller") public: enum AIConditionType{ allFit=0, aiIndexNotFit, aiSubsystemNotFit }; static ModelController *globalInstance(); explicit ModelController(const QString &dbName = "peony-idm.db", const QString &filedbname = "peony-idm-file.db",QObject *parent = nullptr); ~ModelController(); void spaceCreateFinish(QString spaceName, QStringList fileinfos); public Q_SLOTS: //加载所有空间 void startLoadAllSpaces(); //获å�–空间å��å­— QStringList getAllSpacesName(); //æ ¹æ�®ç©ºé—´å��获å�–spaceid int getSpaceIdByName(const QString &spaceName); //创建空白空间请求 bool onSpaceCreateRequest(const QString &spaceName, const QString &conditionDescription, bool isCreatedFromSearch); //创建带有文件的空间 从æ�œç´¢ bool onSpaceCreateRequestWithFiles(const QString &spaceName, const QString &conditionDescription, bool isCreatedFromSearch, QStringList infos); bool renameSpace(int spaceId, const QString &spaceName); //æ�¡ä»¶å�˜åŒ–时点击ä¿�å­˜ 空间内容é‡�新开始æ�œç´  void editSpaceCondition(QString spacename,QString conditons); bool removeSpace(int spaceId); //删除空间需è¦� 告知删除空间的文件 void spaceRemovedWithFiles(int spaceId, const QStringList &filesToBeRemoved); //æ ¹æ�®ç©ºé—´å��获å�–对应空间中的文件 QStringList getFilesInSpaceByName(QString spacename, bool isUserAdded = false); //手动添加文件到空间中 bool userAddFilesToSpace(QStringList paths,QString Spacename); //开始æ�œç´¢å…³é”®å­— void startsearch(QString keyword,QString SpaceName,QString ClientId); //æ�œç´¢å®Œæˆ�通知æ�’件更新文件å��文件信æ�¯ void fileReload(QList infos); //æ�œç´¢å®Œæˆ�通知æ�’件更新文件内容æ�œç´¢æ–‡ä»¶ä¿¡æ�¯ void SearchContentLoad(QList infolist); void fileTextContentLoad(QList infolist); //æ�œç´¢ç•Œé�¢æ�¡ä»¶æ›´æ–° 通知æ�’ä»¶æ ¹æ�®æ�¡ä»¶ç­›é€‰æ–‡ä»¶ void updateSearchCondition(QString conditions); //获å�–空间æ�¡ä»¶ QString getConditionsBySpaces(QString spacename); //更新空间自动更新状æ€� bool updateSpacestatus(QString spacename,bool status); //获å�–空间自动更新状æ€� bool getSpacestatus(QString spacename); //æ ¹æ�®æ�œç´ å…³é”®å­—获å�–相似标签 没有关键字则获å�–top50 QStringList getIntelligentLabel(QString keyword=""); QString getFileSummery(QString filepath); //通知空间é‡�新更新文件视图界é�¢ void spaceUpdatefinish(QString spacename); //有符å�ˆè¦�求的文件 通知空间自动更新 包括新增和删除 void filesCreated(const QList> &newFiles, int spaceId); void fileDeleted(QMap deleteSpacesFile); //移除文件从空间中 bool removeFileFromSpace(const QString &SpacesName, const QStringList &filepaths); //å�–消æ�œç´¢ 通知æ�œç´¢çº¿ç¨‹ å�–消æ�œç´¢æµ�程 void cancelSearch(); //æ ¹æ�®æ ‡ç­¾é‡�æ–°æ�œç´¢ void reSearchWithLabels(QString keyWord, QStringList labels, QString SpaceName); //检测AI环境接å�£ void requestShowAISubsystemDialog(); bool isAisubsysteminited(); int getAinotAvailabletype(); bool isUserAddFile(const QString &spaceName,const QString &FileName); void setCurrentSearchPath(const QString &path); QString getCurrentSearchpath(); QStringList getFileLabels(QString filepath); qint64 getSpaceAccesstime(QString spaceName); qint64 getSpaceModifytime(QString spaceName); void setSpacesSortConfig(int spaceId, int sortType, int sortOrder, int userAddedFirst); QVariantHash getSpacesSortConfig(int spaceId); void userAddFilesToSpaceBySpaceplugin(const QStringList &filePath,const QString &spaceName,bool isUserAdd); void editSpaceConditionBySpaceplugin(const QString &uri); void fileReloadByBatch(QList infolist,bool finish = false); Q_SIGNALS: void allModelCreated(); void spaceRemoved(int spaceId); // 空间æ�¡ä»¶æ›´æ–° 返回结果给å‰�端 void filesReloaded(const QStringList &infos, int spaceId); void filesReloadedByCreate(const QStringList &infos, int spaceId); void spaceConditionsChanged(int spaceId, const QString &spaceName, const QVariant &conditionsDescription); void cancelSpaceSearch(int spaceId); void spaceRemovedWithFilesRequest(int spaceId, const QStringList &filesToBeRemoved); void setSpaceConditionRequest(int spaceId, const QString &spaceName); void SpaceCreatefinished(const QString &spaceName,const QStringList &filelist); void fileDeletedRequest(const QString &deletedFile); void fileCreateRequest(const QString &newFile); void fileMovedRequest(const QString &oldFile, const QString &newFile); void searchfileReload(QList infos,QString clientId); void searchKeywordChanged(QString keyword); void searchContentReload(QList infolist,QString clientId); void searchTextContentReload(QList infolist,QString clientId); void searchfileReloadByBatch(QList infolist,QString clientId,bool finish = false); void searchConditionChanged(QString conditions); void spacefileloadfinish(QString Spacename); void spacesFilesAutoInsert(QString Spacename,QStringList infos,bool needGotoUri = false); void spacesFilesAutoDelete(QMap deleteSpacesFile); void cancelSearchRequest(); void userAddFilesToSpaceBySpacepluginSignal(const QStringList &filePath,const QString &spaceName,bool isUserAdd); void editSpaceConditionBySpacepluginSignal(const QString &uri); void spaceDataChanged(const QString &spaceName,const QStringList &filelist); private Q_SLOTS: void initModels(); void handleRescanSpaceWithCondition(int spaceId,const QVariant &conditionsDescription); void handleFileEvent(UKUI::IDM::FileInfoManager::FileEventType type, const QString &arg1, const QString arg2); private: std::atomic_bool fetched; SpacesFilesFetcher *fetcher; QThread *thread; QList contentFileinfo; bool Aisearchfinish; bool searchfinish; QString m_clientId; QString m_currentPath; SearchResultModel* m_searchmodel; }; #endif // MODELCONTROLLER_H peony-extensions/peony-intelligent-data-management-service/fileeventhandler.rep0000664000175000017500000000017015257160264027211 0ustar fengfeng#include class FileEventHandler { SLOT(void handleFileEvent(int eventType, QString arg1, QString arg2)) } peony-extensions/README_zh.md0000664000175000017500000001061415257160277015025 0ustar fengfeng# peony-extensions [English](README.md) peony-extensions 是一组用于 Peony 文件管ç�†å™¨çš„ Qt6 æ�’件集å�ˆã€‚Peony 是 UKUI 桌é�¢çŽ¯å¢ƒçš„å®˜æ–¹æ–‡ä»¶ç®¡ç�†å™¨ï¼Œè¿™äº›æ�’件为其扩展了文件共享ã€�归档管ç�†ã€�è“�牙传输ã€�智能数æ�®ç®¡ç�†ç­‰åŠŸèƒ½ã€‚ ## 功能特性 - **peony-open-terminal** — å�³é”®è�œå�•在当å‰�目录打开终端 - **peony-share** — 通过 Samba 共享文件夹,集æˆ�属性页é�¢ - **parchives** — 使用 engrampa 压缩和解压文件 - **peony-extension-computer-view** — 增强的 computer:/// 视图 - **peony-send-to-device** — å�³é”®è�œå�•å�‘é€�文件到已挂载设备 - **peony-bluetooth** — 通过è“�牙å�‘é€�文件(ä¾�èµ– ukui-bluetooth) - **peony-set-wallpaper** — å�³é”®è�œå�•设置桌é�¢å£�纸 - **peony-device-rename** — 在 Peony 中直接é‡�命å��å�—设备 - **peony-intelligent-data-management-service** — 智能数æ�®ç®¡ç�†å�Žç«¯æœ�务 - **peony-intelligent-plugin** — 智能数æ�®ç®¡ç�†å™¨çš„ VFS 和自定义视图æ�’ä»¶ - **peony-spaceview-plugin** — 智能数æ�®ç®¡ç�†å™¨çš„空空间视图æ�’ä»¶ ## 构建ä¾�èµ– - Qt 6 (qt6-base-dev, qt6-remoteobjects-dev, qt6-tools-dev-tools) - qmake6, qtchooser - libglib2.0-dev - libgsettings-qt6-dev - libgudev-1.0-dev - libkysdk-ai-private-dev, libkysdk-ai-common-dev, libkysdk-base-dev, libkysdk-applications-dev, libkysdk-system-dev - libnotify-dev - libpeony-dev - libpolkit-gobject-1-dev - libpoppler-qt6-dev - libudisks2-dev - libukui-common-dev, libukui-file-metadata-dev, libukui-log4qt-dev, libukui-search-dev, libukui-service-interface-dev - pkgconf - debhelper-compat (= 13) ## 从æº�ç �构建 ```shell cd peony-extensions mkdir build && cd build qmake6 .. make -j$(nproc) sudo make install ``` ## Debian 打包 本项目支æŒ�使用 git-buildpackage å’Œ Salsa CI 进行 Debian 打包。 ```shell # 构建 Debian 包 gbp buildpackage # 导入新的上游版本 gbp import-orig --pristine-tar ../peony-extensions_.orig.tar.gz ``` ## 项目结构 ``` peony-extensions/ ├── debian/ # Debian 打包文件 ├── man/ # 手册页 ├── peony-admin/ # 管ç�†å‘˜æ�’件(已弃用) ├── peony-bluetooth-plugin/ # è“�牙文件传输æ�’ä»¶ ├── peony-drive-rename/ # å�—设备é‡�命å��æ�’ä»¶ ├── peony-engrampa-menu-plugin/ # 归档压缩/解压æ�’ä»¶ ├── peony-extension-computer-view/ # 增强的 computer:/// 视图 ├── peony-intelligent-data-management-service/ # 智能数æ�®ç®¡ç�†æœ�务 ├── peony-intelligent-plugin/ # 智能数æ�®ç®¡ç�†å™¨æ�’ä»¶ ├── peony-menu-plugin-mate-terminal/ # 终端æ�’ä»¶ ├── peony-send-to-device/ # å�‘é€�到设备æ�’ä»¶ ├── peony-set-wallpaper/ # 设置å£�纸æ�’ä»¶ ├── peony-share/ # Samba 共享æ�’ä»¶ ├── peony-spaceview-plugin/ # 空间视图æ�’ä»¶ ├── test-computer-view/ # 计算机视图测试 ├── tests/ # 测试套件 ├── common.json # æ�’件版本信æ�¯ ├── common.pri # 共享 qmake 包å�«æ–‡ä»¶ ├── COPYING # 许å�¯è¯�文本 ├── NEWS # 版本说明 └── peony-extensions.pro # 顶层 qmake 项目文件 ``` ## 二进制兼容性 peony-extensions ä¾�èµ– Peony 库。当 Peony 库的 API å�‘生å�˜åŒ–时,旧版æ�’ä»¶å�¯èƒ½æ— æ³•加载或导致崩溃。æ�’件版本信æ�¯å­˜å‚¨åœ¨ [common.json](common.json) 中,必须与 Peony çš„ `VERSION` å®�匹é…�。 如果 peony-extensions 无法工作或构建失败,请å°�试先在本地构建最新版本的 Peony 库,然å�Žé‡�新构建本项目。 ## 翻译 æ¯�个æ�’件自行管ç�†ç¿»è¯‘。翻译步骤如下: 1. 使用 `lupdate` 为你的语言生æˆ� `.ts` 文件 2. 使用 `lrelease` å°† `.ts` 编译为 `.qm` 3. å°† `.qm` 文件添加到æ�’ä»¶çš„ `.qrc` 资æº�文件中 ## 许å�¯è¯� 本项目基于 LGPL-3.0-or-later 许å�¯è¯�。详è§� [COPYING](COPYING)。 ## 链接 - 主页: https://gitee.com/openkylin/peony-extensions - 问题追踪: https://gitee.com/openkylin/peony-extensions/issues - Salsa: https://salsa.debian.org/kylin-team/peony-extensions peony-extensions/peony-admin/0000775000175000017500000000000015257160264015257 5ustar fengfengpeony-extensions/peony-admin/peony-admin.pro0000664000175000017500000000174115257160264020224 0ustar fengfengQT += core gui widgets concurrent include(../common.pri) TARGET = peony-admin TEMPLATE = lib DEFINES += PEONYADMIN_LIBRARY PKGCONFIG += peony CONFIG += link_pkgconfig \ c++11 \ plugin \ debug #DESTDIR += ../testdir PEONY_PATH = "/usr/bin/peony" PLUMA_PATH = "/usr/bin/pluma" TERMINAL_PATH = "/usr/bin/mate-terminal" policy.input = org.freedesktop.peony-admin.policy.in policy.output = org.freedesktop.peony-admin.policy policy.config = verbatim QMAKE_SUBSTITUTES += policy policy_file.files = org.freedesktop.peony-admin.policy policy_file.path = /usr/share/polkit-1/actions SOURCES += admin-menu-plugin.cpp HEADERS += admin-menu-plugin.h TRANSLATIONS += translations/peony-admin_cs.ts \ translations/peony-admin_tr.ts \ translations/peony-admin_zh_CN.ts #RESOURCES += resources.qrc CONFIG += lrelease embed_translations QM_FILES_RESOURCE_PREFIX = /translations/ target.path = $$[QT_INSTALL_LIBS]/peony-extensions INSTALLS += target policy_file peony-extensions/peony-admin/translations/0000775000175000017500000000000015257160277020004 5ustar fengfengpeony-extensions/peony-admin/translations/peony-admin_cs.ts0000664000175000017500000000117215257160264023256 0ustar fengfeng Peony::AdminMenuPlugin Open Directory as Admin Otevřít složku jako správce Open Text as Admin Otevřít text jako správce peony-extensions/peony-admin/translations/peony-admin_ug.ts0000664000175000017500000000134715257160264023270 0ustar fengfeng Peony::AdminMenuPlugin Open Directory as Admin باشقۇرغۇچى سالاھىيىتىدە مۇندەرىجىنى ئÛ�Ú†Ù‰Û‹Û�تىش Open Text as Admin باشقۇرغۇچى سالاھىيىتىدە ھۆججەتنى ئÛ�Ú†Ù‰Û‹Û�تىش peony-extensions/peony-admin/translations/peony-admin_kk.ts0000664000175000017500000000133715257160264023261 0ustar fengfeng Peony::AdminMenuPlugin Open Directory as Admin باسقارۋشٸسٸ سالاۋاتىندا باسمازمۇندى اشىپ وتۋ Open Text as Admin باسقارۋشٸسٸ سالاۋاتىندا حۇجاتتى اشىپ وتۋ peony-extensions/peony-admin/translations/peony-admin_tr.ts0000664000175000017500000000120315257160264023271 0ustar fengfeng Peony::AdminMenuPlugin Open Directory as Admin Klasörü Yönetici Olarak Aç Open Text as Admin Metin Dosyasını Yönetici Olarak Aç peony-extensions/peony-admin/translations/peony-admin_zh_CN.ts0000664000175000017500000000117615257160264023656 0ustar fengfeng Peony::AdminMenuPlugin Open Directory as Admin 以管ç�†å‘˜èº«ä»½æ‰“开目录 Open Text as Admin 以管ç�†å‘˜èº«ä»½æ‰“开文件 peony-extensions/peony-admin/translations/peony-admin_bo_CN.ts0000664000175000017500000000150115257160264023625 0ustar fengfeng Peony::AdminMenuPlugin Open Directory as Admin དོ་དམ་པའི་à½�ོབ་à½�ང་ལ་བརྟེན་ནས་དཀར་ཆག་ཕྱེ་བà¼� Open Text as Admin དོ་དམ་པའི་à½�ོབ་à½�ང་ལ་བརྟེན་ནས་ཡིག་ཆ་à½�་འབྱེད་པà¼� peony-extensions/peony-admin/translations/peony-admin_ky.ts0000664000175000017500000000135515257160264023277 0ustar fengfeng Peony::AdminMenuPlugin Open Directory as Admin باشقارعۇۇچۇ كۉبۅلۉگۉندۅ مازمۇۇندۇ ئچىپ جىبەرۉۉ Open Text as Admin باشقارعۇۇچۇ كۉبۅلۉگۉندۅ ۅجۅتۉن ئچىپ جىبەرۉۉ peony-extensions/peony-admin/translations/peony-admin_zh_HK.ts0000664000175000017500000000117715257160277023665 0ustar fengfeng Peony::AdminMenuPlugin Open Directory as Admin 以管ç�†å“¡èº«ä»½æ‰“é–‹ Directory Open Text as Admin 以管ç�†å“¡èº«ä»½æ‰“開文本 peony-extensions/peony-admin/translations/peony-admin_mn.ts0000664000175000017500000000145415257160264023266 0ustar fengfeng Peony::AdminMenuPlugin Open Directory as Admin ᠬᠠᠮᠢᠶᠠᠷᠤᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠪᠡᠷ á ­á  á ·á ´á  á ­ ᠢ᠋ ᠨᠡᠬᠡᠬᠡᠬᠦ Open Text as Admin ᠬᠠᠮᠢᠺᠶᠠᠷᠤᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠪᠡᠷ ᠹᠠᠢᠯ ᠢ᠋ ᠨᠡᠬᠡᠬᠡᠬᠦ peony-extensions/peony-admin/org.freedesktop.peony-admin.policy.in0000664000175000017500000001747115257160264024437 0ustar fengfeng Peony Admin https://github.com/ukui/peony-extensions Run Peony as Root شغّل نوتلس كجذر Esegui Peony come Root Executar o Peony como Root Lancez Peony en tant qu'administrateur ЗапуÑ�тить Peony как Ð�дминиÑ�тратор Paleisti failų narÅ¡yklÄ™ kaip Administratorius Ejecutar Peony como administrador Uruchom Peony jako Root Spustenie programu Peony ako správca Peony als Aministrator ausführen Authentication is required to run the File Manager as Administrator المصادقة مطلوبة لتشغيل مدير الملÙ�ات كمدير Autenticazione richiesta per lanciare il File Manager come Amministratore Autenticação é necessária para executar o Gestor de Ficheiros como Administrador L'authentification est requise pour lancer le gestionnaire de fichiers en tant qu'administrateur ДлÑ� запуÑ�ка Файлового Менеджера от имени Ð�дминиÑ�тратора требуетÑ�Ñ� аутентификациÑ� Failų narÅ¡yklei paleisti Administratoriaus teisÄ—mis reikia įvesti slaptažodį Se necesita autentificación para ejecutar el Gestor de Ficheros como Administrador Uwierzytelnienie jest wymagane aby uruchomić Menedżer Plików jako Administrator Na spustenie správcu súborov ako administrátor sa vyžaduje overenie totožnosti Authentifizierung ist erforderlich um den Datei-Manager als Administrator auszuführen 以超级用户身份è¿�行 Peony system-file-manager auth_admin auth_admin auth_admin_keep $${PEONY_PATH} true Open Pluma as Root اÙ�تح محرر النصوص Pluma كجذر Abrir Pluma como Root Aprire Pluma come Root Ouvrir Pluma en tant qu'administrateur Открыть Pluma как Ð�дминиÑ�тратор Atverti teksto failÄ… kaip Administratorius Abrir Pluma como Administrador Otwórz Pluma jako Root Otvorenie programu Pluma ako správca Öffne Pluma als Administrator Authentication is required to run the Text Editor as Administrator المصادقة مطلوبة لتشغيل محرر النصوص كمدير Autenticação é necessária para executar o Editor de Texto como Administrador L'authentification est requise pour lancer l'éditeur de texte en tant qu'administrateur ДлÑ� запуÑ�ка ТекÑ�тового Редактора от имени Ð�дминиÑ�тратора требуетÑ�Ñ� аутентификациÑ� Tekstų redagavimo programai paleisti Administratoriaus teisÄ—mis reikia įvesti slaptažodį Autenticazione richiesta per eseguire l'Editor di Testo come Amministratore Se necesita autentificación para abrir el Editor de Texto como Administrador Uwierzytelnienie jest wymagane aby uruchomić Edytor tekstowy jako Administrator Na spustenie textového editora ako administrátor sa vyžaduje overenie totožnosti Authentifizierung ist erforderlich um den Text-Editor als Administrator auszuführen 以超级用户身份打开 Pluma accessories-text-editor auth_admin auth_admin auth_admin_keep $${PLUMA_PATH} true Run as Root شغّل كجذر Exécuter en tant qu'administrateur Eseguire come Root Executar como Root ЗапуÑ�тить как Ð�дминиÑ�тратор Vykdyti Administratoriaus teisÄ—mis Uruchom jako Root Spustenie ako správca Als Administrator ausführen Authentication is required to run as Administrator المصادقة مطلوبة للتشغيل كمدير L'authentification est requise pour exécuter en tant qu'administrateur Autenticazione necessaria per eseguire come Amministratore Autenticação é necessária para executar como Administrador ДлÑ� запуÑ�ка иÑ�полнÑ�емых файлов от имени Ð�дминиÑ�тратора требуетÑ�Ñ� аутентификациÑ� Vykdomųjų failų paleidimui Administratoriaus teisÄ—mis reikia įvesti slaptažodį Uwierzytelnienie jest wymagane aby uruchomić jako Administrator Na spustenie ako administrátor sa vyžaduje overenie totožnosti Authentifizierung ist erforderlich zum ausführen als Administrator 以超级用户身份è¿�行 utilities-terminal auth_admin auth_admin auth_admin_keep $${TERMINAL_PATH} true peony-extensions/peony-admin/admin-menu-plugin.cpp0000664000175000017500000001034215257160264021311 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2019, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * Authors: Meihong * */ #include "admin-menu-plugin.h" #include "file-info.h" #include #include #include #include #include #include #include #include using namespace Peony; AdminMenuPlugin::AdminMenuPlugin(QObject *parent) : QObject(parent) { QTranslator *t = new QTranslator(this); bool b_load = t->load(":/translations/peony-admin_"+QLocale::system().name()); qDebug()<<"\n\n\n\n\n\n\n AdminMenuPlugin translate:"< AdminMenuPlugin::menuActions(Types types, const QString &uri, const QStringList &selectionUris) { #if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) QList l; if (uri.startsWith("mtp://")) { return l; } if (selectionUris.isEmpty()) { auto directoryAction = new QAction(tr("Open Directory as Admin")); l<connect(directoryAction, &QAction::triggered, [=](){ QtConcurrent::run([=](){ QProcess p; QUrl url = uri; p.setProgram("pkexec"); QStringList args; args<<"peony"<isVirtual()<mimeType(); if (selectionUris.first().startsWith("computer:///") || selectionUris.first().startsWith("trash:///")|| info->isVirtual()) return l; if (info->isDir()) { auto directoryAction = new QAction(tr("Open Directory as Admin")); l<connect(directoryAction, &QAction::triggered, [=](){ QtConcurrent::run([=](){ QStringList args; QUrl url = selectionUris.first(); args<<"peony"<mimeType().startsWith("text")) { auto directoryAction = new QAction(tr("Open Text as Admin")); l<connect(directoryAction, &QAction::triggered, [=](){ QtConcurrent::run([=](){ QProcess p; QUrl url = selectionUris.first(); p.setProgram("pkexec"); p.setArguments(QStringList()<<"pluma"<. * * Authors: Yue Lan * */ #ifndef ADMINMENUPLUGIN_H #define ADMINMENUPLUGIN_H #include #include namespace Peony { class AdminMenuPlugin : public QObject, public MenuPluginInterface { Q_OBJECT Q_PLUGIN_METADATA(IID MenuPluginInterface_iid FILE "common.json") Q_INTERFACES(Peony::MenuPluginInterface) public: explicit AdminMenuPlugin(QObject *parent = nullptr); PluginInterface::PluginType pluginType() override {return PluginInterface::MenuPlugin;} const QString name() override {return "Peony Qt Admin Extension";} const QString description() override {return "Allow user launch file/directory as admin";} const QIcon icon() override {return QIcon::fromTheme("system-users-symbolic");} void setEnable(bool enable) override {m_enable = enable;} bool isEnable() override {return m_enable;} QString testPlugin() override {return "";} QList menuActions(Types types, const QString &uri, const QStringList &selectionUris) override; private: bool m_enable; }; } #endif // ADMINMENUPLUGIN_H peony-extensions/peony-drive-rename/0000775000175000017500000000000015257160277016551 5ustar fengfengpeony-extensions/peony-drive-rename/driverenameplugin.cpp0000664000175000017500000000233615257160264022775 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2023, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * */ #include "driverenameplugin.h" #include "drive-rename.h" #include using namespace Peony; DriveRenamePlugin::DriveRenamePlugin(QObject *parent) : QObject(parent) { m_internalPlugin = new DriveRename(this); qApp->setProperty("deviceRenamePluginLoaded", true); } QList DriveRenamePlugin::menuActions(Peony::MenuPluginInterface::Types types, const QString &uri, const QStringList &selectionUris) { return m_internalPlugin->menuActions(types, uri, selectionUris); } peony-extensions/peony-drive-rename/translations/0000775000175000017500000000000015257160277021272 5ustar fengfengpeony-extensions/peony-drive-rename/translations/peony-drive-rename_tr.ts0000664000175000017500000000433515257160264026056 0ustar fengfeng Peony::DriveRename Rename Device name: Warning Renaming cannot start with a decimal point, Please re-enter! The device name exceeds the character limit, rename failed! Renaming will unmount the device. Do you want to continue? Peony::DriveRenamePlugin Drive rename QObject Warning The device may not support the rename operation, rename failed! peony-extensions/peony-drive-rename/translations/peony-drive-rename_kk_KZ.ts0000664000175000017500000000757715257160264026455 0ustar fengfeng Peony::DriveRename drive rename 设备é‡�命å�� Rename Ð�тын өзгерту Device name: Құрылғының атауы: Warning ЕÑ�керту Renaming cannot start with a decimal point, Please re-enter! Ð�тауын өзгерту ондық нүктеден баÑ�талмауы мүмкін, Қайта енгізуіңізді Ñ�ұраймын! The device name exceeds the character limit, rename failed! Құрылғының атауы таңба шегінен аÑ�ып түÑ�еді, атын өзгерту Ñ�әтÑ�із аÑ�қталды! Renaming will unmount the device. Do you want to continue? Ð�тын өзгерту құрылғыны қайта атауға мүмкіндік береді. ЖалғаÑ�тырғыңыз келе ме? The device may not support the rename operation, rename failed! Құрылғы атын өзгерту операциÑ�Ñ�ын қолдамауы мүмкін, атын өзгерту жаңылыÑ�Ñ‹! Failed to rename! é‡�命å��失败ï¼� Peony::DriveRenamePlugin drive rename диÑ�кінің атын өзгерту Drive rename Peony::DriverAction Send to a removable device å�‘é€�到移动设备 Peony::SendToPlugin Send to a removable device å�‘é€�到移动设备 QObject Warning ЕÑ�керту The device may not support the rename operation, rename failed! Құрылғы атын өзгерту операциÑ�Ñ�ын қолдамауы мүмкін, атын өзгерту жаңылыÑ�Ñ‹! peony-extensions/peony-drive-rename/translations/peony-drive-rename_es.ts0000664000175000017500000000702415257160264026036 0ustar fengfeng Peony::DriveRename drive rename 设备é‡�命å�� Rename Rebautizar Device name: Nombre del dispositivo: Warning Advertencia Renaming cannot start with a decimal point, Please re-enter! El cambio de nombre no puede comenzar con un punto decimal, ¡vuelva a ingresar! The device name exceeds the character limit, rename failed! El nombre del dispositivo supera el límite de caracteres, ¡error en el cambio de nombre! Renaming will unmount the device. Do you want to continue? Al cambiar el nombre, se desmontará el dispositivo. ¿Quieres continuar? The device may not support the rename operation, rename failed! å�¯èƒ½è®¾å¤‡ä¸�支æŒ�é‡�命å��æ“�作,é‡�命å��失败ï¼� Failed to rename! é‡�命å��失败ï¼� Peony::DriveRenamePlugin drive rename Cambio de nombre de la unidad Drive rename Peony::DriverAction Send to a removable device å�‘é€�到移动设备 Peony::SendToPlugin Send to a removable device å�‘é€�到移动设备 QObject Warning Advertencia The device may not support the rename operation, rename failed! Es posible que el dispositivo no admita la operación de cambio de nombre, ¡error en el cambio de nombre! peony-extensions/peony-drive-rename/translations/peony-drive-rename_zh_CN.ts0000664000175000017500000000654415257160277026442 0ustar fengfeng Peony::DriveRename drive rename 设备é‡�命å�� Rename é‡�命å�� Device name: 设备å��: Warning 警告 Renaming cannot start with a decimal point, Please re-enter! é‡�命å��æ—¶ä¸�支æŒ�首字符为å°�数点,请é‡�新输入! The device name exceeds the character limit, rename failed! 设备å��超过字符é™�制,é‡�命å��失败! Renaming will unmount the device. Do you want to continue? é‡�命å��将会å�¸è½½è®¾å¤‡ï¼Œæ˜¯å�¦ç»§ç»­ï¼Ÿ The device may not support the rename operation, rename failed! å�¯èƒ½è®¾å¤‡ä¸�支æŒ�é‡�命å��æ“�作,é‡�命å��失败ï¼� Failed to rename! é‡�命å��失败ï¼� Peony::DriveRenamePlugin drive rename 设备é‡�命å�� Drive rename 设备é‡�命å�� Peony::DriverAction Send to a removable device å�‘é€�到移动设备 Peony::SendToPlugin Send to a removable device å�‘é€�到移动设备 QObject Warning 警告 The device may not support the rename operation, rename failed! å�¯èƒ½è®¾å¤‡ä¸�支æŒ�é‡�命å��æ“�作,é‡�命å��失败ï¼� peony-extensions/peony-drive-rename/translations/peony-drive-rename_cs.ts0000664000175000017500000000433515257160264026036 0ustar fengfeng Peony::DriveRename Rename Device name: Warning Renaming cannot start with a decimal point, Please re-enter! The device name exceeds the character limit, rename failed! Renaming will unmount the device. Do you want to continue? Peony::DriveRenamePlugin Drive rename QObject Warning The device may not support the rename operation, rename failed! peony-extensions/peony-drive-rename/translations/peony-drive-rename_fr.ts0000664000175000017500000000677315257160264026050 0ustar fengfeng Peony::DriveRename drive rename 设备é‡�命å�� Rename Renommer Device name: Nom de l’appareil : Warning Avertissement Renaming cannot start with a decimal point, Please re-enter! Le renommage ne peut pas commencer par une virgule, veuillez entrer à nouveau ! The device name exceeds the character limit, rename failed! Le nom de l’appareil dépasse la limite de caractères, le renommage a échoué ! Renaming will unmount the device. Do you want to continue? Le changement de nom démontera l’appareil. Voulez-vous continuer ? The device may not support the rename operation, rename failed! å�¯èƒ½è®¾å¤‡ä¸�支æŒ�é‡�命å��æ“�作,é‡�命å��失败ï¼� Failed to rename! é‡�命å��失败ï¼� Peony::DriveRenamePlugin drive rename Renommer le lecteur Drive rename Peony::DriverAction Send to a removable device å�‘é€�到移动设备 Peony::SendToPlugin Send to a removable device å�‘é€�到移动设备 QObject Warning Avertissement The device may not support the rename operation, rename failed! L’appareil peut ne pas prendre en charge l’opération de renommage, le renommage a échoué ! peony-extensions/peony-drive-rename/translations/peony-drive-rename_de.ts0000664000175000017500000000700015257160264026011 0ustar fengfeng Peony::DriveRename drive rename 设备é‡�命å�� Rename Umbenennen Device name: Name des Geräts: Warning Warnung Renaming cannot start with a decimal point, Please re-enter! Die Umbenennung darf nicht mit einem Komma beginnen, bitte erneut eingeben! The device name exceeds the character limit, rename failed! Der Gerätename überschreitet die Zeichenbegrenzung, Umbenennung fehlgeschlagen! Renaming will unmount the device. Do you want to continue? Durch das Umbenennen wird die Bereitstellung des Geräts aufgehoben. Möchten Sie fortfahren? The device may not support the rename operation, rename failed! å�¯èƒ½è®¾å¤‡ä¸�支æŒ�é‡�命å��æ“�作,é‡�命å��失败ï¼� Failed to rename! é‡�命å��失败ï¼� Peony::DriveRenamePlugin drive rename Umbenennen von Laufwerken Drive rename Peony::DriverAction Send to a removable device å�‘é€�到移动设备 Peony::SendToPlugin Send to a removable device å�‘é€�到移动设备 QObject Warning Warnung The device may not support the rename operation, rename failed! Das Gerät unterstützt den Umbenennungsvorgang möglicherweise nicht, Umbenennung fehlgeschlagen! peony-extensions/peony-drive-rename/translations/peony-drive-rename_bo_CN.ts0000664000175000017500000000757615257160277026427 0ustar fengfeng Peony::DriveRename Rename མིང་བསྒྱུར་བà¼� Device name: སྒྲིག་ཆས་ཀྱི་མིང་གཤམ་གསལà¼� Warning à½�་ཚིག་སྒྲོག་པà¼� Renaming cannot start with a decimal point, Please re-enter! མིང་བསྒྱུར་བ་ནི་ཆེས་ཆུང་བ་ནས་འགོ་རྩོམ་མི་à½�ུབ་པསà¼� ཡང་བསà¾�ྱར་ནང་དུ་ཞུགས་རོགསà¼� The device name exceeds the character limit, rename failed! སྒྲིག་ཆས་ཀྱི་མིང་དེ་ཡི་གེའི་ཚད་ལས་བརྒལ་ནས་མིང་བསྒྱུར་མ་à½�ུབ་པ་རེདà¼� Renaming will unmount the device. Do you want to continue? མིང་བསྒྱུར་ན་སྒྲིག་ཆས་འདི་མེད་པར་བཟོ་སྲིདà¼� à½�ྱོད་ཀྱིས་ད་དུང་མུ་མà½�ུད་དུ་རྒྱུན་འà½�ྱོངས་བྱེད་དགོས་སམà¼� The device may not support the rename operation, rename failed! སྒྲིག་ཆས་འདིས་མིང་བསྒྱུར་བའི་བཀོལ་སྤྱོད་ལ་རྒྱབ་སà¾�ྱོར་བྱེད་མི་སྲིདà¼� མིང་བསྒྱུར་མ་à½�ུབ་པ་རེདà¼� Peony::DriveRenamePlugin drive rename སྒྲིག་ཆས་ཀྱི་མིང་བསྒྱུར་བà¼� Drive rename QObject Warning à½�་ཚིག་སྒྲོག་པà¼� The device may not support the rename operation, rename failed! སྒྲིག་ཆས་འདིས་མིང་བསྒྱུར་བའི་བཀོལ་སྤྱོད་ལ་རྒྱབ་སà¾�ྱོར་བྱེད་མི་སྲིདà¼� མིང་བསྒྱུར་མ་à½�ུབ་པ་རེདà¼� peony-extensions/peony-drive-rename/translations/peony-drive-rename_zh_HK.ts0000664000175000017500000000654515257160277026445 0ustar fengfeng Peony::DriveRename drive rename 设备é‡�命å�� Rename é‡�新命å�� Device name: è£�ç½®å��稱: Warning 警告 Renaming cannot start with a decimal point, Please re-enter! é‡�命å��ä¸�能以å°�數點開頭,請é‡�新輸入ï¼� The device name exceeds the character limit, rename failed! 設備å��稱超出字元é™�制,é‡�命å��失敗ï¼� Renaming will unmount the device. Do you want to continue? é‡�命å��å°‡å�¸è¼‰è¨­å‚™ã€‚是å�¦è¦�繼續? The device may not support the rename operation, rename failed! å�¯èƒ½è®¾å¤‡ä¸�支æŒ�é‡�命å��æ“�作,é‡�命å��失败ï¼� Failed to rename! é‡�命å��失败ï¼� Peony::DriveRenamePlugin drive rename 设备é‡�命å�� Drive rename 驅動器é‡�命å�� Peony::DriverAction Send to a removable device å�‘é€�到移动设备 Peony::SendToPlugin Send to a removable device å�‘é€�到移动设备 QObject Warning 警告 The device may not support the rename operation, rename failed! 設備å�¯èƒ½ä¸�支æ�´é‡�命å��作,é‡�命å��失敗ï¼� peony-extensions/peony-drive-rename/translations/peony-drive-rename_mn.ts0000664000175000017500000001074215257160264026042 0ustar fengfeng Peony::DriveRename drive rename 设备é‡�命å�� Rename ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠢᠳᠬᠦ Device name: ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ ᠵᠢᠨ ᠨᠡᠷᠡᠢᠳᠦᠯ: Warning ᠰᠡᠷᠡᠮᠵᠢᠯᠡᠬᠦᠯᠦᠯ Renaming cannot start with a decimal point, Please re-enter! ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠢᠳᠦᠯ ᠪᠤᠳᠠᠷᠬᠠᠢ ᠲᠤᠭ᠎ᠠ ᠪᠡᠷ ᠡᠬᠢᠯᠡᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ᠂ ᠳᠠᠬᠢᠵᠤ ᠤᠷᠤᠭᠤᠯᠤᠭᠠᠷᠠᠢ! The device name exceeds the character limit, rename failed! ᠲᠦᠬᠦᠬᠡᠷᠡᠮᠵᠢ ᠵᠢᠨ ᠨᠡᠷᠡᠢᠳᠦᠯ ᠦᠰᠦᠭ ᠤ᠋ᠨ ᠲᠤᠭᠠᠨ ᠤᠤ ᠬᠢᠵᠠᠭᠠᠷᠯᠠᠯ á ¡á ´á ¡ ᠬᠡᠳᠦᠷᠡᠭᠰᠡᠨ᠂ ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠢᠳᠴᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ! Renaming will unmount the device. Do you want to continue? ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠢᠳᠬᠦ ᠳ᠋ᠤ᠌ ᠬᠦᠷᠪᠡᠯ ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ ᠵᠢ ᠪᠠᠭᠤᠯᠭᠠᠵᠤ ᠮᠡᠳᠡᠨ᠎ᠡ᠂ ᠦᠷᠬᠦᠯᠵᠢᠯᠡᠨ ᠬᠦᠢᠴᠡᠳᠬᠡᠬᠦ ᠤᠤ? The device may not support the rename operation, rename failed! ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠢᠳᠬᠦ ᠵᠢ ᠳᠡᠮᠵᠢᠬᠦ ᠦᠬᠡᠢ ᠪᠠᠢᠵᠤ ᠮᠡᠳᠡᠨ᠎ᠡ᠂ ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠢᠳᠴᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ! Failed to rename! é‡�命å��失败ï¼� Peony::DriveRenamePlugin drive rename ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ ᠵᠢᠨ ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠢᠳᠦᠯ Drive rename Peony::DriverAction Send to a removable device å�‘é€�到移动设备 Peony::SendToPlugin Send to a removable device å�‘é€�到移动设备 QObject Warning ᠰᠡᠷᠡᠮᠵᠢ ᠥᠭá �ᠬᠦ The device may not support the rename operation, rename failed! ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠬᠦᠨᠳᠦ ᠨᠡᠷᠡᠶᠢᠳᠦᠨ ᠠᠵᠢᠯᠯᠠᠬᠤ á ¶á ¢ ᠳᠡᠮᠵᠢᠬᠦ ᠦᠭᠡᠢ ᠮᠠᠭᠠᠳ á ‚ ᠬᠦᠨᠳᠦ ᠪᠡᠷ ᠨᠡᠷᠡᠶᠢᠳᠦᠯ ᠢᠯᠠᠭᠳᠠᠵᠠᠢ ! peony-extensions/peony-drive-rename/translations/peony-drive-rename_ky_KG.ts0000664000175000017500000000753615257160264026443 0ustar fengfeng Peony::DriveRename drive rename 设备é‡�命å�� Rename Ð�тын алмаштыруу Device name: Түзмөк аты: Warning ЭÑ�кертүү Renaming cannot start with a decimal point, Please re-enter! Ð�тын алмаштыруу бузуку пункттан баштала албайт, Ñ�ураныч, кайра киргиле! The device name exceeds the character limit, rename failed! Ð�ппараттын аты мүнөздүн чегинен ашып түшөт, атын алмаштыруу ишке ашпады! Renaming will unmount the device. Do you want to continue? Ð�тын алмаштыруу аппаратты ачат. Улантууну каалайÑ�ызбы? The device may not support the rename operation, rename failed! Ð�ппарат атын өзгөртүү операциÑ�Ñ�ын колдобошу мүмкүн, атын алмаштыруу ишке ашпады! Failed to rename! é‡�命å��失败ï¼� Peony::DriveRenamePlugin drive rename диÑ�ктин атын өзгөртүү Drive rename Peony::DriverAction Send to a removable device å�‘é€�到移动设备 Peony::SendToPlugin Send to a removable device å�‘é€�到移动设备 QObject Warning ЭÑ�кертүү The device may not support the rename operation, rename failed! Ð�ппарат атын өзгөртүү операциÑ�Ñ�ын колдобошу мүмкүн, атын алмаштыруу ишке ашпады! peony-extensions/peony-drive-rename/translations/peony-drive-rename_ug_CN.ts0000664000175000017500000000765715257160277026442 0ustar fengfeng Peony::DriveRename drive rename 设备é‡�命å�� Rename قايتا ئىسىم Ù�امىلە قىلىش Device name: ئۈسكۈنە نامى: Warning دىققەت Renaming cannot start with a decimal point, Please re-enter! نامىنى ئۆزگەرتىشتە دÛ�سكىلىق نۇقتىدىن باشلىنالمايدۇ، قايتا كىرىڭ! The device name exceeds the character limit, rename failed! ئۈسكۈنە نامى Ù¾Û�رسوناژ چەكلىمىدىن ئÛ�شىپ كەتتى، قايتا ئىسىم قويۇش مەغلۇپ بولدى! Renaming will unmount the device. Do you want to continue? نامى ئۆزگەرتكەندە ئۈسكۈنىنى تىندۇرىدۇ. داۋام قىلغۇڭىز بارمۇ؟ The device may not support the rename operation, rename failed! ئۈسكۈنە بەلكىم قايتا ئىسىم ئۆزگەرتىش مەشخۇلاتى قوللىماسلىقى مۇمكىن، قايتا ئىسىم بÛ�رىش مەغلۇپ بولدى! Failed to rename! é‡�命å��失败ï¼� Peony::DriveRenamePlugin drive rename قوزغىتىش نامى Drive rename Peony::DriverAction Send to a removable device å�‘é€�到移动设备 Peony::SendToPlugin Send to a removable device å�‘é€�到移动设备 QObject Warning دىققەت The device may not support the rename operation, rename failed! ئۈسكۈنە بەلكىم قايتا ئىسىم ئۆزگەرتىش مەشخۇلاتى قوللىماسلىقى مۇمكىن، قايتا ئىسىم بÛ�رىش مەغلۇپ بولدى! peony-extensions/peony-drive-rename/drive-rename.h0000664000175000017500000000246415257160264021302 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2021, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: deng hao * */ #ifndef DRIVERENAME_H #define DRIVERENAME_H #include #include #include "volumeManager.h" #include namespace Peony { class DriveRename : public QObject { Q_OBJECT public: explicit DriveRename(QObject *parent = nullptr); QList menuActions(Peony::MenuPluginInterface::Types types, const QString &uri, const QStringList &selectionUris); private: bool mEnable; QString mDevName; }; } #endif // DRIVERENAME_H peony-extensions/peony-drive-rename/drive-rename.cpp0000664000175000017500000004141415257160277021637 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2021, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: deng hao * */ #include "drive-rename.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef struct _DeviceRenameData DeviceRenameData; void device_rename(const char* devName, const char* name); static void udisk_umounted (GMount* mount, GAsyncResult *res, gpointer udata); static void udisk_filesystem_unmounted (GObject *source_object, GAsyncResult *res, gpointer udata); UDisksObject* getObjectFromBlockDevice(UDisksClient* client, const gchar* bdevice); static void udisk_setLabel_callback(UDisksFilesystem *diskFilesystem, GAsyncResult *res, gpointer udata); bool is_block_device_encrypted (UDisksClient *client, const char* device_name) { struct stat statbuf; g_autoptr (UDisksBlock) block = NULL; g_return_val_if_fail(stat(device_name, &statbuf) == 0, false); block = udisks_client_get_block_for_dev (client, statbuf.st_rdev); g_return_val_if_fail(block != NULL, false); return strcmp(udisks_block_get_id_usage(block), "crypto") == 0; } struct _DeviceRenameData { QString devName; QString rename; Peony::DriveRename* pThis; }; Peony::DriveRename::DriveRename(QObject *parent) : QObject(parent), mEnable(true) { QTranslator *t = new QTranslator(this); t->load(":/translations/peony-drive-rename_"+QLocale::system().name()); QApplication::installTranslator(t); } QList Peony::DriveRename::menuActions(Peony::MenuPluginInterface::Types types, const QString &uri, const QStringList &selectionUris) { QList l; if (selectionUris.count() != 1 || types != Peony::MenuPluginInterface::Type::SideBar) { return l; } QString suri = selectionUris.first(); g_autoptr(GFile) file = g_file_new_for_uri(suri.toUtf8().constData()); g_return_val_if_fail(file, l); // check is mount point and get dev name g_autoptr (GError) error = NULL; g_autoptr (GFileInfo) fileInfo = g_file_query_info (file, G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT "," G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT "," G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE "," G_FILE_ATTRIBUTE_STANDARD_TARGET_URI, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error); if (error) qDebug() << error->message; g_return_val_if_fail (G_IS_FILE_INFO (fileInfo) && !error, l); gboolean canUmount = g_file_info_get_attribute_boolean (fileInfo, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT); gboolean isMountPoint = g_file_info_get_attribute_boolean (fileInfo, G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT); g_autofree char* devName = g_file_info_get_attribute_as_string (fileInfo, G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE); bool canRename = (isMountPoint || canUmount || devName); qDebug() << "uri: " << uri << " " << (canRename ? "can rename" : "can not rename"); g_return_val_if_fail (canRename, l); QString type = Peony::FileUtils::getFileSystemType(suri); // if device has mounted GMount* mount = NULL; if (isMountPoint || canUmount) { if (uri.startsWith ("computer://")) { g_autofree char* targetUri = g_file_info_get_attribute_as_string (fileInfo, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI); if (targetUri) { // related to: #105070 // bool isWayland = qApp->property("isWayland").toBool(); // if (!isWayland) { // QString tmp = targetUri; // if (tmp == "file:///data") { // // 如果是data盘,则跳过 // return l; // } // } bool isWayland = qApp->property("isWayland").toBool(); if (isWayland) { QString tmp = targetUri; if (tmp == "file:///data") { return l; } } g_autoptr (GFile) tfile = g_file_new_for_uri (targetUri); if (G_IS_FILE (tfile)) { mount = g_file_find_enclosing_mount (tfile, NULL, &error); if (error) qDebug() << error->message; } } } else { mount = g_file_find_enclosing_mount (file, NULL, &error); if (error) qDebug() << error->message; } g_return_val_if_fail (G_IS_MOUNT (mount), l); if(type.startsWith("iso")){ g_autoptr (GFile) root = g_mount_get_root (mount); g_autoptr (GFileInfo) rootInfo = g_file_query_info (root, "access::", G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error); if (error) qDebug() << "error: " << error->message; bool canRename = true; if (G_IS_FILE_INFO (rootInfo)) { bool write = true; if (g_file_info_has_attribute (rootInfo, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE)) { write = g_file_info_get_attribute_boolean (rootInfo, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE); } bool execute = true; if (g_file_info_has_attribute (rootInfo, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE)) { execute = g_file_info_get_attribute_boolean (rootInfo, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE); } if (!write || !execute) canRename = false; } g_return_val_if_fail (canRename, l); } FileEnumerator e; e.setEnumerateDirectory(suri); e.enumerateSync(); QStringList uris = e.getChildrenUris(); int count = 0; for (QString uri1 : uris) { QString lastPart = uri1.section('/', -1); // 截å�–URI的最å�Žéƒ¨åˆ† if (lastPart.compare("boot", Qt::CaseSensitive) == 0 || lastPart.compare("EFI", Qt::CaseSensitive) == 0) { ++count; } if (count >= 2) { return l; } } if (!devName) { g_autoptr (GVolume) volume = g_mount_get_volume (mount); g_return_val_if_fail (G_IS_VOLUME (volume), l); devName = g_volume_get_identifier (volume, G_DRIVE_IDENTIFIER_KIND_UNIX_DEVICE); } } g_return_val_if_fail (devName, l); // 注æ„�è¦�筛选的设备,å�—设备ã€�é�žæ ¹è®¾å¤‡ // 判断是å�¦ä¸ºå…‰ç›˜è®¾å¤‡(光盘设备ä¸�å…�许é‡�命å��) if (suri.startsWith("computer:///") && suri.endsWith(".drive") && 0 != g_ascii_strncasecmp ("/dev/cd", devName, 7) && 0 != g_ascii_strncasecmp ("/dev/sr", devName, 7) && 0 != g_ascii_strncasecmp ("/dev/loop", devName, 9) && !type.startsWith("iso")) { mDevName = devName; g_autoptr (UDisksClient) udisks_client = udisks_client_new_sync(nullptr, nullptr); bool isEncryptedDevice = false; if (!mDevName.startsWith("/dev/dm")) { // 未解密设备ä¸�å…�许é‡�命å�� isEncryptedDevice = is_block_device_encrypted(udisks_client, devName); } QAction* action = new QAction(tr("Rename")); if (action && !isEncryptedDevice) { l << action; } // 这里 action 弹框并执行é‡�命å��函数 connect(action, &QAction::triggered, this, [=] () { // 输入框出æ�¥ï¼Œæ��示用户U盘é‡�命å��为 ... // 获å�–到用户的输入 // 执行é‡�命å�� bool ok = false; QString text = QInputDialog::getText(nullptr, tr("Rename"), tr("Device name:"), QLineEdit::Normal, "", &ok); if (ok && !text.isNull() && !text.isEmpty()) { //首字符是.æ��示é�žæ³• bug#93280 if(text.at(0) == '.'){ QMessageBox::warning(nullptr, tr("Warning"), tr("Renaming cannot start with a decimal point, Please re-enter!"), QMessageBox::Ok); return; } QString type = Peony::FileUtils::getFileSystemType(suri); if((type.compare(QString::fromLocal8Bit("vfat")) == 0 && text.toUtf8().length() > 11) || (type.compare(QString::fromLocal8Bit("exfat")) == 0 && text.toUtf8().length() > 15) || (type.compare(QString::fromLocal8Bit("ext4")) == 0 && text.toUtf8().length() > 16)){ QMessageBox::warning(nullptr, tr("Warning"), tr("The device name exceeds the character limit, rename failed!"), QMessageBox::Ok); return; } // 修改å��å­— if (mount && !mDevName.startsWith("/dev/dm")) { qDebug() << "[DriveRename] normal device unmount then rename:" << mDevName; int ret = QMessageBox::warning (nullptr, tr("Warning"), tr("Renaming will unmount the device. Do you want to continue?"), QMessageBox::Ok | QMessageBox::Cancel); if (QMessageBox::Cancel == ret) return; // 释放ã€�释放 GMount DeviceRenameData* data = new DeviceRenameData; data->devName = mDevName; data->rename = text; data->pThis = this; g_autoptr (GMountOperation) mount_op = g_mount_operation_new(); g_mount_unmount_with_operation (mount, G_MOUNT_UNMOUNT_NONE, mount_op, NULL, (GAsyncReadyCallback) udisk_umounted, data); } else if (mount && mDevName.startsWith("/dev/dm")) { qDebug() << "[DriveRename] encrypted device udisks unmount then rename:" << mDevName; g_autoptr (UDisksClient) client = udisks_client_new_sync(NULL, NULL); g_autoptr (UDisksObject) udiskObj = getObjectFromBlockDevice(client, mDevName.toUtf8().constData()); if (!udiskObj) return; g_autoptr (UDisksFilesystem) diskFilesystem = udisks_object_get_filesystem(udiskObj); if (!diskFilesystem) return; GVariantBuilder options; g_variant_builder_init(&options, G_VARIANT_TYPE_VARDICT); DeviceRenameData* data = new DeviceRenameData; data->devName = mDevName; data->rename = text; data->pThis = this; udisks_filesystem_call_unmount(diskFilesystem, g_variant_builder_end(&options), NULL, (GAsyncReadyCallback)udisk_filesystem_unmounted, data); } else { qDebug() << "[DriveRename] direct rename (not mounted):" << mDevName; device_rename(mDevName.toUtf8().constData(), text.toUtf8().constData()); } } }); } Q_UNUSED(uri) Q_UNUSED(types) return l; } void device_rename(const char* devName, const char* name) { //判断å�‚数个数是å�¦å�ˆæ³• g_return_if_fail(devName && name); g_autoptr (UDisksClient) client = udisks_client_new_sync(NULL, NULL); g_return_if_fail(client); g_autoptr (UDisksObject) udiskObj = getObjectFromBlockDevice(client, devName); g_return_if_fail(udiskObj); //从设备å��获å�–文件系统类型 g_autoptr (UDisksFilesystem) diskFilesystem = udisks_object_get_filesystem(udiskObj); g_return_if_fail(diskFilesystem); GVariantBuilder optionsBuilder; g_variant_builder_init(&optionsBuilder, G_VARIANT_TYPE_VARDICT); g_variant_builder_add (&optionsBuilder, "{sv}", "label", g_variant_new_string (devName)); g_variant_builder_add (&optionsBuilder, "{sv}", "take-ownership", g_variant_new_boolean (TRUE)); // g_autoptr (GError) error = NULL; // gboolean ret = udisks_filesystem_call_set_label_sync (diskFilesystem, name, g_variant_builder_end(&optionsBuilder), NULL, &error); // if (error) { // qDebug() << error->message; // } // return ret ? 0 : -1; QList *volumeLists; Experimental_Peony::Volume *volume = nullptr; volumeLists = Experimental_Peony::VolumeManager::getInstance()->allVaildVolumes(); int volumeCount = volumeLists->count(); for (int i = 0; i < volumeCount; ++i) { auto tmpVolume = volumeLists->at(i); if (tmpVolume.device() == devName) { volume = new Experimental_Peony::Volume(tmpVolume); break; } } udisks_filesystem_call_set_label(diskFilesystem, name, g_variant_builder_end(&optionsBuilder), NULL, GAsyncReadyCallback(udisk_setLabel_callback), volume); } UDisksObject* getObjectFromBlockDevice(UDisksClient* client, const gchar* bdevice) { struct stat statbuf; UDisksBlock* block = NULL; UDisksObject* object = NULL; UDisksObject* cryptoBackingObject = NULL; g_autofree const gchar* cryptoBackingDevice = NULL; g_return_val_if_fail(stat(bdevice, &statbuf) == 0, object); block = udisks_client_get_block_for_dev (client, statbuf.st_rdev); g_return_val_if_fail(block != NULL, object); object = UDISKS_OBJECT (g_dbus_interface_dup_object (G_DBUS_INTERFACE (block))); return object; cryptoBackingDevice = udisks_block_get_crypto_backing_device ((udisks_object_peek_block (object))); cryptoBackingObject = udisks_client_get_object (client, cryptoBackingDevice); if (cryptoBackingObject != NULL) { g_object_unref (object); object = cryptoBackingObject; } g_object_unref (block); return object; } static void udisk_umounted (GMount* mount, GAsyncResult *res, gpointer udata) { g_autoptr (GError) error = NULL; DeviceRenameData* data = (DeviceRenameData*) udata; qDebug() << "[udisk_umounted] called for device:" << data->devName; bool ok = g_mount_unmount_with_operation_finish (G_MOUNT (mount), res, &error); if (ok) { qDebug() << "[udisk_umounted] unmount successful, proceeding with rename"; device_rename(data->devName.toUtf8().constData(), data->rename.toUtf8().constData()); } else { if (error) { if (strcmp(error->message, "Not authorized to perform operation")) {/* gmountOperation会弹出授æ�ƒæ¡†ï¼Œé˜²æ­¢äºŒæ¬¡å¼¹æ¡†,linkto bug#101075 */ QMessageBox::warning(nullptr, data->pThis->tr("Warning"), error->message, QMessageBox::Ok); } qDebug() << "[udisk_umounted]" << error->message; } } if (data) delete data; if (mount) g_object_unref (mount); } static void udisk_filesystem_unmounted (GObject *source_object, GAsyncResult *res, gpointer udata) { g_autoptr (GError) error = NULL; DeviceRenameData* data = (DeviceRenameData*) udata; UDisksFilesystem *filesystem = UDISKS_FILESYSTEM(source_object); qDebug() << "[udisk_filesystem_unmounted] called for device:" << data->devName; bool ok = udisks_filesystem_call_unmount_finish(filesystem, res, &error); if (ok) { qDebug() << "[udisk_filesystem_unmounted] unmount successful, proceeding with rename"; device_rename(data->devName.toUtf8().constData(), data->rename.toUtf8().constData()); } else { if (error) { if (strcmp(error->message, "Not authorized to perform operation")) { QMessageBox::warning(nullptr, data->pThis->tr("Warning"), error->message, QMessageBox::Ok); } qDebug() << "[udisk_filesystem_unmounted]" << error->message; } } if (data) delete data; } static void udisk_setLabel_callback(UDisksFilesystem *diskFilesystem, GAsyncResult *res, gpointer udata) { Q_UNUSED(udata); g_autoptr (GError) error = NULL; Experimental_Peony::Volume *volume = static_cast(udata); gboolean ret = udisks_filesystem_call_set_label_finish(diskFilesystem, res, &error); if (!ret && error) { qDebug() << "udisk_setLabel_callback error:" << error->code << error->message; QMessageBox::warning (nullptr, QObject::tr("Warning"), QObject::tr("The device may not support the rename operation, rename failed!"), QMessageBox::Ok); } else if (!error) { volume->mount(); } if (volume) { delete volume; } } peony-extensions/peony-drive-rename/peony-drive-rename.pro0000664000175000017500000000263115257160277023003 0ustar fengfengQT += core gui widgets concurrent include(../common.pri) TARGET = peony-drive-rename TEMPLATE = lib DEFINES += PEONYADMIN_LIBRARY PKGCONFIG += peony gio-2.0 udisks2 glib-2.0 CONFIG += link_pkgconfig no_keywords c++11 plugin debug SOURCES += \ drive-rename.cpp \ driverenameplugin.cpp HEADERS += \ drive-rename.h \ driverenameplugin.h TRANSLATIONS += translations/peony-drive-rename_zh_CN.ts \ translations/peony-drive-rename_de.ts \ translations/peony-drive-rename_es.ts \ translations/peony-drive-rename_fr.ts \ translations/peony-drive-rename_kk_KZ.ts \ translations/peony-drive-rename_ug_CN.ts \ translations/peony-drive-rename_ky_KG.ts \ translations/peony-drive-rename_tr.ts \ translations/peony-drive-rename_cs.ts \ translations/peony-drive-rename_bo_CN.ts \ translations/peony-drive-rename_mn.ts \ translations/peony-drive-rename_zh_HK.ts #RESOURCES += \ # resource.qrc CONFIG += lrelease embed_translations QM_FILES_RESOURCE_PREFIX = /translations/ target.path = $$[QT_INSTALL_LIBS]/peony-extensions INSTALLS += target SKIP_TEST = $$(EXTENSIONS_SKIP_TEST) isEmpty(SKIP_TEST) { message("build with tests") QMAKE_LFLAGS += -fprofile-arcs -ftest-coverage QMAKE_CXXFLAGS += --coverage LIBS += -lgcov } peony-extensions/peony-drive-rename/driverenameplugin.h0000664000175000017500000000350515257160264022441 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2023, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * */ #ifndef DRIVERENAMEPLUGIN_H #define DRIVERENAMEPLUGIN_H #include #include #include "drive-rename.h" namespace Peony { class DriveRenamePlugin : public QObject, public MenuPluginInterface { Q_OBJECT Q_PLUGIN_METADATA(IID MenuPluginInterface_iid FILE "common.json") Q_INTERFACES(Peony::MenuPluginInterface) public: explicit DriveRenamePlugin(QObject *parent = nullptr); QString testPlugin() override {return "";} bool isEnable() override {return mEnable;} void setEnable(bool enable) override {mEnable = enable;} const QString description() override {return tr("Drive rename");} const QString name() override {return "Peony Qt drive rename";} const QIcon icon() override {return QIcon::fromTheme("drive-harddisk-symbolic");} PluginInterface::PluginType pluginType() override {return PluginInterface::MenuPlugin;} QList menuActions(Types types, const QString &uri, const QStringList &selectionUris) override; private: DriveRename *m_internalPlugin = nullptr; bool mEnable = true; }; } #endif // DRIVERENAMEPLUGIN_H peony-extensions/peony-extensions.pro0000664000175000017500000000147115257160277017117 0ustar fengfengTEMPLATE = subdirs VERSION = 3.2.2 DEFINES += VERSION='\\"$${VERSION}\\"' SUBDIRS = \ # peony-admin \ peony-share \ peony-drive-rename \ peony-send-to-device \ peony-set-wallpaper \ peony-bluetooth-plugin \ peony-engrampa-menu-plugin \ peony-extension-computer-view \ peony-menu-plugin-mate-terminal \ peony-intelligent-data-management-service \ peony-intelligent-plugin \ peony-spaceview-plugin # test-computer-view # æ ¹æ�®çŽ¯å¢ƒå�˜é‡�设置是å�¦ç¼–译testså­�项目,默认编译 SKIP_TEST = $$(EXTENSIONS_SKIP_TEST) isEmpty(SKIP_TEST) { message("build with tests") SUBDIRS += tests } else { message("skip tests") } peony-extensions/peony-set-wallpaper/0000775000175000017500000000000015257160277016753 5ustar fengfengpeony-extensions/peony-set-wallpaper/set-wallpaper-plugin.cpp0000664000175000017500000000627015257160277023540 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2019, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Meihong * */ #include "set-wallpaper-plugin.h" #include #include #include #include #include #include #include #include #include #include #define BACKGROUND_SETTINGS "org.mate.background" #define PICTRUE "picture-filename" #define BACKGROUND_SETTINGS_PATH "/org/mate/desktop/background/" #include using namespace Peony; SetWallPaperPlugin::SetWallPaperPlugin(QObject *parent) : QObject (parent) { QTranslator *t = new QTranslator(this); QString path = ":/translations/peony-set-wallpaper-extension_"+QLocale::system().name(); qDebug()<<"system().name and path:"<load(path); QApplication::installTranslator(t); } QList SetWallPaperPlugin::menuActions(Types types, const QString &uri, const QStringList &selectionUris) { QList actions; if (types == MenuPluginInterface::DirectoryView || types == MenuPluginInterface::DesktopWindow) { if (selectionUris.count() == 1 && is_picture_file(selectionUris.first())) { if (selectionUris.first().contains("trash:///")) return actions; g_autoptr (GSettings) background_settings = g_settings_new_with_path(BACKGROUND_SETTINGS, BACKGROUND_SETTINGS_PATH); if (background_settings && g_settings_is_writable(background_settings, PICTRUE)) { QAction *set_action = new QAction(tr("Set as wallpaper"), nullptr); actions<trySet("pictureFilename", url.path()); qDebug() << "set as wallpaper result:" < Peony::SetWallPaperPlugin Peony-Qt set wallpaper Extension ᠹᠠᠢᠯ ᠤ᠋ᠨ ᠬᠠᠮᠢᠶᠠᠷᠤᠭᠤᠷ ᠬᠠᠨ᠎ᠠ ᠵᠢᠨ ᠴᠠᠭᠠᠰᠤᠨ ᠤ᠋ ᠤᠭᠯᠤᠷᠭ᠎ᠠ ᠲᠤᠨᠤᠭ ᠢ᠋ ᠳᠤᠬᠢᠷᠠᠭᠤᠯᠬᠤ Set wallpaper Extension set wallpaper Extension. ᠬᠠᠨ᠎ᠠ ᠵᠢᠨ ᠴᠠᠭᠠᠰᠤᠨ ᠤ᠋ ᠤᠭᠯᠤᠷᠭ᠎ᠠ ᠲᠤᠨᠤᠭ ᠢ᠋ ᠳᠤᠬᠢᠷᠠᠭᠤᠯᠬᠤ. Set as wallpaper ᠬᠠᠨ᠎ᠠ ᠵᠢᠨ á ´á  á ­á  á °á ¤ ᠪᠤᠯᠭᠠᠵᠤ ᠳᠤᠬᠢᠷᠠᠭᠤᠯᠬᠤ peony-extensions/peony-set-wallpaper/translations/peony-set-wallpaper-extension_de.ts0000664000175000017500000000210615257160264030431 0ustar fengfeng Peony::SetWallPaperPlugin Peony-Qt set wallpaper Extension Pfingstrose-Qt Set Tapete Erweiterung Set wallpaper Extension set wallpaper Extension Set Wallpaper Erweiterung set wallpaper Extension. 设置å£�纸æ�’件。 Set as wallpaper Als Hintergrundbild festlegen peony-extensions/peony-set-wallpaper/translations/peony-set-wallpaper-extension_fr.ts0000664000175000017500000000211415257160264030447 0ustar fengfeng Peony::SetWallPaperPlugin Peony-Qt set wallpaper Extension Peony-Qt set fond d’écran Extension Set wallpaper Extension set wallpaper Extension set fond d’écran Extension set wallpaper Extension. 设置å£�纸æ�’件。 Set as wallpaper Définir comme fond d’écran peony-extensions/peony-set-wallpaper/translations/peony-set-wallpaper-extension_es.ts0000664000175000017500000000211515257160264030450 0ustar fengfeng Peony::SetWallPaperPlugin Peony-Qt set wallpaper Extension Peony-Qt set fondo de pantalla Extensión Set wallpaper Extension set wallpaper Extension set wallpaper Extensión set wallpaper Extension. 设置å£�纸æ�’件。 Set as wallpaper Establecer como fondo de pantalla peony-extensions/peony-set-wallpaper/translations/peony-set-wallpaper-extension_kk_KZ.ts0000664000175000017500000000201015257160264031044 0ustar fengfeng Peony::SetWallPaperPlugin Peony-Qt set wallpaper Extension مودەن-Qt بىر جۇرىس تام قاعازدى ۇزارتۋ Set wallpaper Extension set wallpaper Extension. тұÑ�қағаздар кеңейтілімін орнатыңыз. Set as wallpaper تام قاعازى ورىنداپ بەكٸتۋ peony-extensions/peony-set-wallpaper/translations/peony-set-wallpaper-extension_tr.ts0000664000175000017500000000167715257160264030502 0ustar fengfeng Peony::SetWallPaperPlugin Peony-Qt set wallpaper Extension Peony-Qt duvar kağıdı ayarlama eklentisi Set wallpaper Extension set wallpaper Extension. Duvarkağıdı eklentisi ayarla. Set as wallpaper Duvar kağıdı olarak ayarla peony-extensions/peony-set-wallpaper/translations/peony-set-wallpaper-extension_zh_HK.ts0000664000175000017500000000205015257160277031046 0ustar fengfeng Peony::SetWallPaperPlugin Peony-Qt set wallpaper Extension Peony-Qt 套è£�å£�ç´™ 擴展 Set wallpaper Extension 設置å£�紙擴展 set wallpaper Extension 设置å£�纸æ�’ä»¶ set wallpaper Extension. 设置å£�纸æ�’件。 Set as wallpaper 設置為å£�ç´™ peony-extensions/peony-set-wallpaper/translations/peony-set-wallpaper-extension_bo_CN.ts0000664000175000017500000000222215257160264031020 0ustar fengfeng Peony::SetWallPaperPlugin Peony-Qt set wallpaper Extension ཡིག་ཆའི་དོ་དམ་ཆས་ལྡེབས་ཤོག་བསྒར་ལྷུ་སྒྲིག་འགོད་བྱེད་པà¼� Set wallpaper Extension set wallpaper Extension. ལྡེབས་ཤོག་བསྒར་ལྷུ་སྒྲིག་འགོདà¼� Set as wallpaper ལྡེབས་ཤོག་à½�ུ་བཙུགས་པà¼� peony-extensions/peony-set-wallpaper/translations/peony-set-wallpaper-extension_zh_CN.ts0000664000175000017500000000205515257160264031045 0ustar fengfeng Peony::SetWallPaperPlugin Peony-Qt set wallpaper Extension 文件管ç�†å™¨è®¾ç½®å£�纸æ�’ä»¶ Set wallpaper Extension 设置å£�纸æ�’ä»¶ set wallpaper Extension 设置å£�纸æ�’ä»¶ set wallpaper Extension. 设置å£�纸æ�’件。 Set as wallpaper 设为å£�纸 peony-extensions/peony-set-wallpaper/translations/peony-set-wallpaper-extension_ug_CN.ts0000664000175000017500000000200615257160264031033 0ustar fengfeng Peony::SetWallPaperPlugin Peony-Qt set wallpaper Extension مودەن-Qt يۈرۈشلۈك تام قەغىزىنى ئۇزارتىش Set wallpaper Extension set wallpaper Extension. تام قەغىزىنى ئۇزارتىشنى بەلگىلەش. Set as wallpaper تام قەغىزى قىلىپ بÛ�كىتىش peony-extensions/peony-set-wallpaper/translations/peony-set-wallpaper-extension_ky_KG.ts0000664000175000017500000000177015257160264031053 0ustar fengfeng Peony::SetWallPaperPlugin Peony-Qt set wallpaper Extension مودەن-Qt ۅتۉمدۉ تام قاعازىن ۇزارتۇۇ Set wallpaper Extension set wallpaper Extension. орнотуу дубал кагаз кеңейтүү. Set as wallpaper تام قاعازى جاساپ بەكىتۉۉ peony-extensions/peony-set-wallpaper/set-wallpaper-plugin.h0000664000175000017500000000424015257160264023174 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2019, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Meihong * */ #ifndef SETWALLPAPERPLUGIN_H #define SETWALLPAPERPLUGIN_H #include "peony-set-wallpaper_global.h" #include #include namespace Peony { class PEONYQTSETWALLPAPERSHARED_EXPORT SetWallPaperPlugin: public QObject, public MenuPluginInterface { Q_OBJECT Q_PLUGIN_METADATA(IID MenuPluginInterface_iid FILE "common.json") Q_INTERFACES(Peony::MenuPluginInterface) public: explicit SetWallPaperPlugin(QObject *parent = nullptr); PluginInterface::PluginType pluginType() override {return PluginInterface::MenuPlugin;} const QString name() override {return tr("Peony-Qt set wallpaper Extension");} const QString description() override {return tr("Set wallpaper Extension");} const QIcon icon() override {return QIcon::fromTheme("preferences-desktop-wallpaper-symbolic");} void setEnable(bool enable) override {m_enable = enable;} bool isEnable() override {return m_enable;} QString testPlugin() override {return "test set wallpaper";} QList menuActions(Types types, const QString &uri, const QStringList &selectionUris) override; bool is_picture_file(QString file_name); private: bool m_enable; QStringList m_picture_type_list = {"png", "jpg", "jpeg", "bmp", "dib", "jfif", "jpe", "gif", "tif", "tiff", "wdp"}; QGSettings *m_bg_settings = nullptr; }; } #endif // SETWALLPAPERPLUGIN_H peony-extensions/peony-set-wallpaper/peony-set-wallpaper_global.h0000664000175000017500000000214615257160264024353 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2019, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Meihong * */ #ifndef PEONYQTSETWALLPAPER_GLOBAL_H #define PEONYQTSETWALLPAPER_GLOBAL_H #include #if defined(PEONYSETWALLPAPER_LIBRARY) # define PEONYQTSETWALLPAPERSHARED_EXPORT Q_DECL_EXPORT #else # define PEONYQTSETWALLPAPERSHARED_EXPORT Q_DECL_IMPORT #endif #endif // PEONYQTSETWALLPAPER_GLOBAL_H peony-extensions/COPYING0000664000175000017500000001674315257160264014105 0ustar fengfeng GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. peony-extensions/man/0000775000175000017500000000000015257160277013616 5ustar fengfengpeony-extensions/man/peony-intelligent-data-management-service.10000664000175000017500000000215115257160277024024 0ustar fengfeng.\" Man page for peony-intelligent-data-management-service .\" Generated manually based on help output .TH PEONY-INTELLIGENT-DATA-MANAGEMENT-SERVICE 1 "February 2026" "peony-extensions" "User Commands" .SH NAME peony-intelligent-data-management-service \- Intelligent data management service for Peony file manager .SH SYNOPSIS .B peony-intelligent-data-management-service [\fIoptions\fR] .SH DESCRIPTION .B peony-intelligent-data-management-service is a background service that provides intelligent data management capabilities for the Peony file manager spaces, offering advanced file organization. .PP This service is typically started automatically by the session manager or D-Bus activation, but it can be controlled manually using the options below. .SH OPTIONS .TP .B \-h, \-\-help Displays help on commandline options. .TP .B \-\-help-all Displays help, including generic Qt options. .TP .B \-q, \-\-quit Exit the service. .SH AUTHOR This manual page was written for the Debian/Ubuntu system but may be used by others. .SH COPYRIGHT Copyright \(co 2024-2026 KylinSoft Co., Ltd. License GPL-3+. .SH SEE ALSO .BR peony (1) peony-extensions/common.pri0000664000175000017500000000031415257160264015041 0ustar fengfengINCLUDEPATH += $$PWD DISTFILES += $$PWD/common.json exists(/usr/include/ukuisdk/kylin-com4cxx.h) { message("kylin common for cxx find.") DEFINES += KYLIN_COMMON=true LIBS += -lukui-com4cxx } peony-extensions/peony-engrampa-menu-plugin/0000775000175000017500000000000015257160277020223 5ustar fengfengpeony-extensions/peony-engrampa-menu-plugin/peony-engrampa-menu-plugin_global.h0000664000175000017500000000221215257160264027065 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2019, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Meihong * */ #ifndef PEONYQTENGRAMPAMENUPLUGIN_GLOBAL_H #define PEONYQTENGRAMPAMENUPLUGIN_GLOBAL_H #include #if defined(PEONYENGRAMPAMENUPLUGIN_LIBRARY) # define PEONYQTENGRAMPAMENUPLUGINSHARED_EXPORT Q_DECL_EXPORT #else # define PEONYQTENGRAMPAMENUPLUGINSHARED_EXPORT Q_DECL_IMPORT #endif #endif // PEONYQTENGRAMPAMENUPLUGIN_GLOBAL_H peony-extensions/peony-engrampa-menu-plugin/translations/0000775000175000017500000000000015257160277022744 5ustar fengfengpeony-extensions/peony-engrampa-menu-plugin/translations/peony-engrampa-menu_es.ts0000664000175000017500000000473615257160264027675 0ustar fengfeng Peony::EngrampaMenuPlugin compress... 压缩... compress comprimir uncompress to current path Descomprimir a la ruta actual uncompress to specific path... descomprimir a una ruta específica... uncompress to specific path 解压缩到... Peony-Qt KArchive Menu Extension 文件压缩æ�’ä»¶ KArchive Menu Extension. 压缩è�œå�•扩展。 Peony-Qt engrampa Extension Extensión de engrampa Peony-Qt Engrampa Menu Extension engrampa Menu Extension engrampa Extensión de menú engrampa Menu Extension. å½’æ¡£è�œå�•扩展。 Compress Uncompress to current path Uncompress to specific path... peony-extensions/peony-engrampa-menu-plugin/translations/peony-engrampa-menu_zh_CN.ts0000664000175000017500000000462015257160264030257 0ustar fengfeng Peony::EngrampaMenuPlugin compress... 压缩... compress 压缩 uncompress to current path 解压缩到此处 uncompress to specific path... 解压缩到... uncompress to specific path 解压缩到... Peony-Qt KArchive Menu Extension 文件压缩æ�’ä»¶ KArchive Menu Extension. 压缩è�œå�•扩展。 Peony-Qt engrampa Extension 压缩æ�’ä»¶ Engrampa Menu Extension å½’æ¡£è�œå�•扩展 engrampa Menu Extension å½’æ¡£è�œå�•扩展 engrampa Menu Extension. å½’æ¡£è�œå�•扩展。 Compress 压缩 Uncompress to current path 解压缩到此处 Uncompress to specific path... 解压缩到... peony-extensions/peony-engrampa-menu-plugin/translations/peony-engrampa-menu_fr.ts0000664000175000017500000000473615257160264027675 0ustar fengfeng Peony::EngrampaMenuPlugin compress... 压缩... compress compresse uncompress to current path Décompresser sur le chemin actuel uncompress to specific path... décompresser sur un chemin spécifique... uncompress to specific path 解压缩到... Peony-Qt KArchive Menu Extension 文件压缩æ�’ä»¶ KArchive Menu Extension. 压缩è�œå�•扩展。 Peony-Qt engrampa Extension Peony-Qt engrampa Extension Engrampa Menu Extension engrampa Menu Extension engrampa Menu Extension engrampa Menu Extension. å½’æ¡£è�œå�•扩展。 Compress Uncompress to current path Uncompress to specific path... peony-extensions/peony-engrampa-menu-plugin/translations/peony-engrampa-menu_mn.ts0000664000175000017500000000525415257160277027700 0ustar fengfeng Peony::EngrampaMenuPlugin compress... ᠠᠪᠴᠢᠭᠤᠯᠬᠤ... compress ᠪᠠᠭᠠᠰᠬᠠ á ƒ uncompress to current path ᠡᠨᠡ ᠬᠡᠰᠡᠭ ᠤ᠋ᠨ ᠠᠪᠴᠢᠭᠤᠯᠤᠯ ᠢ᠋ ᠳᠠᠢᠯᠬᠤ uncompress to specific path... ᠠᠪᠴᠢᠭᠤᠯᠤᠯ ᠢ᠋ ᠳᠠᠢᠯᠬᠤ... uncompress to specific path 解压缩到... Peony-Qt KArchive Menu Extension 文件压缩æ�’ä»¶ KArchive Menu Extension. 压缩è�œå�•扩展。 Peony-Qt engrampa Extension ᠠᠪᠴᠢᠭᠤᠯᠬᠤ ᠤᠭᠯᠤᠷᠭ᠎ᠠ ᠲᠤᠨᠤᠭ Engrampa Menu Extension MATEᠰᠢᠷᠡᠬᠡᠨ ᠨᠢᠭᠤᠷ ᠤ᠋ᠨ ᠣᠷᠴᠢᠨ engrampa Menu Extension. ᠳᠠᠩᠰᠠᠨ ᠳ᠋ᠤ᠌ ᠤᠷᠤᠭᠤᠯᠬᠤ ᠲᠤᠪᠶᠤᠭ ᠤ᠋ᠨ ᠦᠷᠭᠡᠳᠭᠡᠯ. Compress ᠠᠪᠴᠢᠭᠤᠯᠬᠤ Uncompress to current path ᠡᠨᠳᠡ ᠬᠦᠷᠲᠡᠯ᠎ᠡ ᠠᠯᠭᠤᠷᠬᠠᠨ᠎ᠠ á ƒ Uncompress to specific path... ᠠᠭᠰᠢᠭᠠᠬᠤ á � peony-extensions/peony-engrampa-menu-plugin/translations/peony-engrampa-menu_ug_CN.ts0000664000175000017500000000440515257160264030252 0ustar fengfeng Peony::EngrampaMenuPlugin compress... قىسقىرا... uncompress to current path نۆۋەتتىكى يولنى قىستۇرماي uncompress to specific path... كونكÛ�رت يولنى قىستۇرماي... uncompress to specific path 解压缩到... Peony-Qt KArchive Menu Extension 文件压缩æ�’ä»¶ KArchive Menu Extension. 压缩è�œå�•扩展。 Peony-Qt engrampa Extension مودەن-Qt engrampa Extension Engrampa Menu Extension engrampa Menu Extension. engrampa تىزىملىكىنى ئۇزارتىش. Compress Uncompress to current path Uncompress to specific path... peony-extensions/peony-engrampa-menu-plugin/translations/peony-engrampa-menu_de.ts0000664000175000017500000000476715257160264027662 0ustar fengfeng Peony::EngrampaMenuPlugin compress... 压缩... compress komprimieren uncompress to current path Dekomprimieren Sie auf den aktuellen Pfad uncompress to specific path... Dekomprimieren Sie auf einen bestimmten Pfad... uncompress to specific path 解压缩到... Peony-Qt KArchive Menu Extension 文件压缩æ�’ä»¶ KArchive Menu Extension. 压缩è�œå�•扩展。 Peony-Qt engrampa Extension Pfingstrose-Qt engrampa Erweiterung Engrampa Menu Extension engrampa Menu Extension engrampa Menüerweiterung engrampa Menu Extension. å½’æ¡£è�œå�•扩展。 Compress Uncompress to current path Uncompress to specific path... peony-extensions/peony-engrampa-menu-plugin/translations/peony-engrampa-menu_ug.ts0000664000175000017500000000373115257160264027673 0ustar fengfeng Peony::EngrampaMenuPlugin compress... 压缩... compress پىرÛ�سلاش uncompress to current path مۇشۇ جايغا پىرÛ�سلاش uncompress to specific path... غا پىرÛ�سلاش.... uncompress to specific path 解压缩到... Peony-Qt KArchive Menu Extension 文件压缩æ�’ä»¶ KArchive Menu Extension. 压缩è�œå�•扩展。 Peony-Qt engrampa Extension پىرÛ�سلاش قوشۇمچە سىستÛ�ما ھۆججىتى engrampa Menu Extension ئارخىپقا سÛ�لىش تىزىملىكىنى ÙƒÛ�ڭەيتىش engrampa Menu Extension. å½’æ¡£è�œå�•扩展。 peony-extensions/peony-engrampa-menu-plugin/translations/peony-engrampa-menu_ky_KG.ts0000664000175000017500000000442615257160277030272 0ustar fengfeng Peony::EngrampaMenuPlugin compress... кыÑ�уу... uncompress to current path ۇشۇل جايعا تىعىزدوو uncompress to specific path... عا تىعىزدوو.... uncompress to specific path 解压缩到... Peony-Qt KArchive Menu Extension 文件压缩æ�’ä»¶ KArchive Menu Extension. 压缩è�œå�•扩展。 Peony-Qt engrampa Extension تىعىزدوو قوشۇمچا ساامالىق ۅجۅتۉۉ Engrampa Menu Extension Engrampa تىزىمدىك كەڭەيتمەسى engrampa Menu Extension. меню кеңейтүү Ñ�нграммаÑ�Ñ‹. Compress تىعىزدوو Uncompress to current path Uncompress to specific path... peony-extensions/peony-engrampa-menu-plugin/translations/peony-engrampa-menu_zh_HK.ts0000664000175000017500000000466415257160264030271 0ustar fengfeng Peony::EngrampaMenuPlugin compress... 压缩... compress 壓縮 uncompress to current path 解壓縮到當å‰�路徑 uncompress to specific path... 解壓縮到特定路徑... uncompress to specific path 解压缩到... Peony-Qt KArchive Menu Extension 文件压缩æ�’ä»¶ KArchive Menu Extension. 压缩è�œå�•扩展。 Peony-Qt engrampa Extension Peony-Qt 工程擴展 Engrampa Menu Extension Engrampa 功能表擴展 engrampa Menu Extension å½’æ¡£è�œå�•扩展 engrampa Menu Extension. å½’æ¡£è�œå�•扩展。 Compress 壓縮 Uncompress to current path 解壓縮到當å‰�路徑 Uncompress to specific path... 解压缩到... peony-extensions/peony-engrampa-menu-plugin/translations/peony-engrampa-menu_kk_KZ.ts0000664000175000017500000000442615257160277030277 0ustar fengfeng Peony::EngrampaMenuPlugin compress... Ñ�ығымдағыш... uncompress to current path وسى جايغا نىعىزداۋ uncompress to specific path... عا نىعىزداۋ.... uncompress to specific path 解压缩到... Peony-Qt KArchive Menu Extension 文件压缩æ�’ä»¶ KArchive Menu Extension. 压缩è�œå�•扩展。 Peony-Qt engrampa Extension نىعىزداۋ قوسىمشا سەستيما حۇجاتى Engrampa Menu Extension Engrampa تٸزٸمدٸك كەڭەيتپەسى engrampa Menu Extension. engrampa мәзірін кеңейту. Compress رازينكەلەۋ Uncompress to current path Uncompress to specific path... peony-extensions/peony-engrampa-menu-plugin/translations/peony-engrampa-menu_bo_CN.ts0000664000175000017500000000521015257160277030236 0ustar fengfeng Peony::EngrampaMenuPlugin compress... 压缩... compress སྡུད་སྒྲིལà¼� uncompress to current path འདིར་ཇེ་ཉུང་དུ་བà½�ང་à¼� uncompress to specific path... ཇེ་ཉུང་དུ་བà½�ང་à¼� uncompress to specific path 解压缩到... Peony-Qt KArchive Menu Extension 文件压缩æ�’ä»¶ KArchive Menu Extension. 压缩è�œå�•扩展。 Peony-Qt engrampa Extension བསྒར་ལྷུ་སྡུད་སྒྲིལà¼� Engrampa Menu Extension Engrampa Menu Extension engrampa Menu Extension å½’æ¡£è�œå�•扩展 engrampa Menu Extension. å½’æ¡£è�œå�•扩展。 Compress གནོན་བཙིརà¼� Uncompress to current path འདིར་ཇེ་ཉུང་དུ་བà½�ང་à¼� Uncompress to specific path... ཇེ་ཉུང་དུ་བà½�ང་à¼� peony-extensions/peony-engrampa-menu-plugin/engrampa-menu-plugin.h0000664000175000017500000000441115257160264024420 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2019, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Meihong * */ #ifndef ENGRAMPAMENUPLUGIN_H #define ENGRAMPAMENUPLUGIN_H #include "peony-engrampa-menu-plugin_global.h" #include namespace Peony { class PEONYQTENGRAMPAMENUPLUGINSHARED_EXPORT EngrampaMenuPlugin: public QObject, public MenuPluginInterface { Q_OBJECT Q_PLUGIN_METADATA(IID MenuPluginInterface_iid FILE "common.json") Q_INTERFACES(Peony::MenuPluginInterface) public: explicit EngrampaMenuPlugin(QObject *parent = nullptr); PluginInterface::PluginType pluginType() override {return PluginInterface::MenuPlugin;} const QString name() override {return tr("Peony-Qt engrampa Extension");} const QString description() override {return tr("Engrampa Menu Extension");} const QIcon icon() override {return QIcon::fromTheme("application-zip");} void setEnable(bool enable) override {m_enable = enable;} bool isEnable() override {return m_enable;} QString testPlugin() override {return "test compress";} QList menuActions(Types types, const QString &uri, const QStringList &selectionUris) override; bool is_compressed_file(QString file_name); private: bool m_enable; QStringList m_file_type_list = {"7z","ar","bz","bz2","cbz","deb", "ear","exe","gz","jar","tar","tar.7z", "tar.bz2","tar.gz","tar.lzma","rar","tar.xz","war","zip","lzma","xz","tgz", "odp", "ods", "otp", "ott", "ots", "odt", "iso"}; }; } #endif // ENGRAMPAMENUPLUGIN_H peony-extensions/peony-engrampa-menu-plugin/engrampa-menu-plugin.cpp0000664000175000017500000001320115257160277024754 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2019, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Meihong * */ #include "engrampa-menu-plugin.h" #include #include #include #include #include #include #include #include #include #include #include using namespace Peony; EngrampaMenuPlugin::EngrampaMenuPlugin(QObject *parent) : QObject (parent) { QTranslator *t = new QTranslator(this); qDebug()<<"system().name:"<load(":/translations/peony-engrampa-menu_"+QLocale::system().name()); QApplication::installTranslator(t); } QList EngrampaMenuPlugin::menuActions(Types types, const QString &uri, const QStringList &selectionUris) { QList actions; if (types == MenuPluginInterface::DirectoryView || types == MenuPluginInterface::DesktopWindow) { //fix uninstall engrampa still has options issue, link to bug#119964 if (! QFile::exists("/usr/bin/engrampa")) return actions; if (! selectionUris.isEmpty()) { QUrl url = selectionUris.first(); if (url.path() == QStandardPaths::writableLocation(QStandardPaths::HomeLocation)) { if (types == MenuPluginInterface::DesktopWindow) { return actions; } } auto info = FileInfo::fromUri(selectionUris.first()); //special type mountable, return qDebug()<<"info isVirtual:"<isVirtual()<mimeType(); if (selectionUris.first().startsWith("computer:///") || selectionUris.first().startsWith("trash:///") || selectionUris.first().startsWith("recent:///") || selectionUris.first().startsWith("filesafe:///") || info->isVirtual()) return actions; QFileInfo file(selectionUris.first()); QAction *compress = new QAction(QIcon::fromTheme("application-zip"), tr("Compress"), nullptr); actions<. * * Authors: Wenjie Xiang */ #include #include int main(int argc, char *argv[]) { QApplication app(argc, argv); ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } peony-extensions/tests/extensions-test/extensions-test.pro0000664000175000017500000000531315257160277023261 0ustar fengfengQT += core widgets dbus gui widgets concurrent testlib TEMPLATE = app CONFIG += console c++14 DEFINES += QT_STATICPLUGIN CONFIG += link_pkgconfig plugin c++14 testcase no_testcase_installs no_keywords lrelease debug PKGCONFIG += peony gio-2.0 udisks2 glib-2.0 gio-unix-2.0 libnotify LIBS += -lpeony -lgcov DEFINES += PEONYENGRAMPAMENUPLUGIN_LIBRARY PLUGIN_INSTALL_DIRS = $$OUT_PWD/../../ DEFINES += PLUGIN_INSTALL_DIRS='\\"$${PLUGIN_INSTALL_DIRS}\\"' VERSION = 3.2.2 DEFINES += VERSION='\\"$${VERSION}\\"' include(../../common.pri) include(../test-utils.pri) include(../../peony-extension-computer-view/computer-view/computer-view.pri) include(../../peony-extension-computer-view/computer-view-intel/computer-view-intel.pri) #PEONY_EXTENSIONS_PATH = $$PWD/../../ #HEADERS += \ # $$files($$PEONY_EXTENSIONS_PATH/peony-share/*.h) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-drive-rename/*.h) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-send-to-device/*.h) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-set-wallpaper/*.h) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-bluetooth-plugin/*.h) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-engrampa-menu-plugin/*.h) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-extension-computer-view/*.h) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-menu-plugin-mate-terminal/*.h) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-extension-computer-view/computer-view/*.h) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-extension-computer-view/computer-view-intel/*.h) \ SOURCES += \ tst_extensionstest.cpp \ main.cpp \ # $$files($$PEONY_EXTENSIONS_PATH/peony-share/*.cpp) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-drive-rename/*.cpp) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-send-to-device/*.cpp) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-set-wallpaper/*.cpp) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-bluetooth-plugin/*.cpp) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-engrampa-menu-plugin/*.cpp) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-extension-computer-view/*.cpp) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-menu-plugin-mate-terminal/*.cpp) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-extension-computer-view/computer-view/*.cpp) \ # $$files($$PEONY_EXTENSIONS_PATH/peony-extension-computer-view/computer-view-intel/*.cpp) \ #FORMS += \ # $$files($$PEONY_EXTENSIONS_PATH/peony-extension-computer-view/*.ui) #RESOURCES += \ # $$files($$PEONY_EXTENSIONS_PATH/peony-extension-computer-view/computer-view-intel/*.qrc) exists("/usr/include/libkyudfburn/udfburn_global.h") { DEFINES += KY_UDF_BURN } # kyudfburn contains(DEFINES, "KY_UDF_BURN") { PKGCONFIG += kyudfburn } peony-extensions/tests/extensions-test/tst_extensionstest.cpp0000664000175000017500000002702415257160277024063 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Wenjie Xiang */ #include #include #include #include #include "stubext.h" #include "menu-plugin-iface.h" #include "file-info-job.h" #include "file-info.h" #include "directory-view-plugin-iface2.h" #include "properties-window-tab-page-plugin-iface.h" using namespace testing; class extensionsTest : public testing::Test { public: QPluginLoader loader; QObject *plugin = nullptr; Peony::MenuPluginInterface *iface = nullptr; Peony::DirectoryViewPluginIface2 *viewIface = nullptr; Peony::PropertiesWindowTabPagePluginIface *tabPageIface = nullptr; private: //打桩声明 stub_ext::StubExt stub; }; TEST_F(extensionsTest, bluetoothPlugin) { QString path = PLUGIN_INSTALL_DIRS + QString("/peony-bluetooth-plugin/libpeony-bluetooth-plugin.so"); loader.setFileName(path); ASSERT_EQ(loader.metaData().value("MetaData").toObject().value("version").toString(), VERSION); plugin = loader.instance(); iface = dynamic_cast(plugin); ASSERT_NE(iface, nullptr); QString directory = "file:///data/usershare"; QStringList selectUris = (QStringList() << (directory + "/test.txt")); auto job = new Peony::FileInfoJob(Peony::FileInfo::fromUri(selectUris.first())); job->querySync(); QList actions = iface->menuActions(Peony::MenuPluginInterface::DirectoryView, directory, selectUris); ASSERT_GT(actions.size(), 0); Peony::PluginInterface::PluginType type = iface->pluginType(); ASSERT_EQ(type, Peony::PluginInterface::MenuPlugin); QString name = iface->name(); ASSERT_GT(name.size(), 0); QString description = iface->description(); ASSERT_GT(description.size(), 0); QIcon icon = iface->icon(); ASSERT_GT(icon.name().size(), 0); iface->setEnable(true); EXPECT_TRUE(iface->isEnable()); ASSERT_GT(iface->testPlugin().size(), 0); actions.first()->trigger(); } TEST_F(extensionsTest, terminalPlugin) { QString path = PLUGIN_INSTALL_DIRS + QString("/peony-menu-plugin-mate-terminal/libpeony-menu-plugin-mate-terminal.so"); loader.setFileName(path); ASSERT_EQ(loader.metaData().value("MetaData").toObject().value("version").toString(), VERSION); plugin = loader.instance(); iface = dynamic_cast(plugin); ASSERT_NE(iface, nullptr); QString directory = "file:///data/usershare"; QStringList selectUris = (QStringList() << (directory)); auto job = new Peony::FileInfoJob(Peony::FileInfo::fromUri(selectUris.first())); job->querySync(); QList actions = iface->menuActions(Peony::MenuPluginInterface::DirectoryView, directory, selectUris); ASSERT_GT(actions.size(), 0); Peony::PluginInterface::PluginType type = iface->pluginType(); ASSERT_EQ(type, Peony::PluginInterface::MenuPlugin); QString name = iface->name(); ASSERT_GT(name.size(), 0); QString description = iface->description(); ASSERT_GT(description.size(), 0); QIcon icon = iface->icon(); ASSERT_GT(icon.name().size(), 0); iface->setEnable(true); EXPECT_TRUE(iface->isEnable()); ASSERT_GT(iface->testPlugin().size(), 0); actions.first()->trigger(); } TEST_F(extensionsTest, driveRenamePlugin) { QString path = PLUGIN_INSTALL_DIRS + QString("/peony-drive-rename/libpeony-drive-rename.so"); loader.setFileName(path); ASSERT_EQ(loader.metaData().value("MetaData").toObject().value("version").toString(), VERSION); plugin = loader.instance(); iface = dynamic_cast(plugin); ASSERT_NE(iface, nullptr); QString directory = "computer:///SKHynix_HFS512GD9TNI-L2B0B-3.drive"; QStringList selectUris = (QStringList() << (directory)); QList actions = iface->menuActions(Peony::MenuPluginInterface::SideBar, directory, selectUris); ASSERT_GT(actions.size(), 0); Peony::PluginInterface::PluginType type = iface->pluginType(); ASSERT_EQ(type, Peony::PluginInterface::MenuPlugin); QString name = iface->name(); ASSERT_GT(name.size(), 0); QString description = iface->description(); ASSERT_GT(description.size(), 0); QIcon icon = iface->icon(); ASSERT_GT(icon.name().size(), 0); iface->setEnable(true); EXPECT_TRUE(iface->isEnable()); ASSERT_EQ(iface->testPlugin().size(), 0); actions.first()->trigger(); } //TEST_F(extensionsTest, computerViewPlugin) //{ // QString path = PLUGIN_INSTALL_DIRS + QString("/peony-extension-computer-view/libpeony-computer-view-plugin.so"); // loader.setFileName(path); // ASSERT_EQ(loader.metaData().value("MetaData").toObject().value("version").toString(), VERSION); // plugin = loader.instance(); // viewIface = dynamic_cast(plugin); // ASSERT_NE(viewIface, nullptr); // Peony::PluginInterface::PluginType type = viewIface->pluginType(); // ASSERT_EQ(type, Peony::PluginInterface::DirectoryViewPlugin2); // QString name = viewIface->name(); // ASSERT_GT(name.size(), 0); // QString description = viewIface->description(); // ASSERT_GT(description.size(), 0); // QIcon icon = viewIface->icon(); // ASSERT_GT(icon.name().size(), 0); // viewIface->setEnable(true); // EXPECT_TRUE(viewIface->isEnable()); // ASSERT_GT(viewIface->viewIdentity().size(), 0); // ASSERT_NE(viewIface->viewName(), nullptr); // EXPECT_FALSE(viewIface->viewIcon().isNull()); // EXPECT_TRUE(viewIface->supportUri("computer:///")); // ASSERT_EQ(viewIface->zoom_level_hint(), -1); // ASSERT_EQ(viewIface->minimumSupportedZoomLevel(), -1); // ASSERT_EQ(viewIface->maximumSupportedZoomLevel(), -1); // EXPECT_TRUE(viewIface->priority("computer:///")); // EXPECT_FALSE(viewIface->supportZoom()); // ASSERT_NE(viewIface->create(), nullptr); //} TEST_F(extensionsTest, engrampaPlugin) { QString path = PLUGIN_INSTALL_DIRS + QString("/peony-engrampa-menu-plugin/libpeony-engrampa-menu-plugin.so"); loader.setFileName(path); ASSERT_EQ(loader.metaData().value("MetaData").toObject().value("version").toString(), VERSION); plugin = loader.instance(); iface = dynamic_cast(plugin); ASSERT_NE(iface, nullptr); QString directory = "file:///data/usershare"; QStringList selectUris = (QStringList() << (directory + "/test.txt")); auto job = new Peony::FileInfoJob(Peony::FileInfo::fromUri(selectUris.first())); job->querySync(); QList actions = iface->menuActions(Peony::MenuPluginInterface::DirectoryView, directory, selectUris); ASSERT_GT(actions.size(), 0); Peony::PluginInterface::PluginType type = iface->pluginType(); ASSERT_EQ(type, Peony::PluginInterface::MenuPlugin); QString name = iface->name(); ASSERT_GT(name.size(), 0); QString description = iface->description(); ASSERT_GT(description.size(), 0); QIcon icon = iface->icon(); ASSERT_GT(icon.name().size(), 0); iface->setEnable(true); EXPECT_TRUE(iface->isEnable()); ASSERT_GT(iface->testPlugin().size(), 0); actions.first()->trigger(); } TEST_F(extensionsTest, sendToDevicePlugin) { QString path = PLUGIN_INSTALL_DIRS + QString("/peony-send-to-device/libpeony-send-to-device.so"); loader.setFileName(path); ASSERT_EQ(loader.metaData().value("MetaData").toObject().value("version").toString(), VERSION); plugin = loader.instance(); iface = dynamic_cast(plugin); ASSERT_NE(iface, nullptr); QString directory = "file:///data/usershare"; QStringList selectUris = (QStringList() << (directory + "/test.txt")); auto job = new Peony::FileInfoJob(Peony::FileInfo::fromUri(selectUris.first())); job->querySync(); QList actions = iface->menuActions(Peony::MenuPluginInterface::DirectoryView, directory, selectUris); ASSERT_GT(actions.size(), 0); Peony::PluginInterface::PluginType type = iface->pluginType(); ASSERT_EQ(type, Peony::PluginInterface::MenuPlugin); QString name = iface->name(); ASSERT_GT(name.size(), 0); QString description = iface->description(); ASSERT_GT(description.size(), 0); QIcon icon = iface->icon(); ASSERT_GT(icon.name().size(), 0); iface->setEnable(true); EXPECT_TRUE(iface->isEnable()); ASSERT_EQ(iface->testPlugin().size(), 0); actions.first()->trigger(); } TEST_F(extensionsTest, setWallpaperPlugin) { QString path = PLUGIN_INSTALL_DIRS + QString("/peony-set-wallpaper/libpeony-set-wallpaper.so"); loader.setFileName(path); ASSERT_EQ(loader.metaData().value("MetaData").toObject().value("version").toString(), VERSION); plugin = loader.instance(); iface = dynamic_cast(plugin); ASSERT_NE(iface, nullptr); QString directory = "file:///data/usershare"; QStringList selectUris = (QStringList() << (directory + "/test.png")); auto job = new Peony::FileInfoJob(Peony::FileInfo::fromUri(selectUris.first())); job->querySync(); QList actions = iface->menuActions(Peony::MenuPluginInterface::DirectoryView, directory, selectUris); ASSERT_GT(actions.size(), 0); Peony::PluginInterface::PluginType type = iface->pluginType(); ASSERT_EQ(type, Peony::PluginInterface::MenuPlugin); QString name = iface->name(); ASSERT_GT(name.size(), 0); QString description = iface->description(); ASSERT_GT(description.size(), 0); QIcon icon = iface->icon(); ASSERT_GT(icon.name().size(), 0); iface->setEnable(true); EXPECT_TRUE(iface->isEnable()); ASSERT_GT(iface->testPlugin().size(), 0); actions.first()->trigger(); } //TEST_F(extensionsTest, sharePlugin) //{ // QString path = PLUGIN_INSTALL_DIRS + QString("/peony-share/app/libpeony-share.so"); // loader.setFileName(path); // ASSERT_EQ(loader.metaData().value("MetaData").toObject().value("version").toString(), VERSION); // plugin = loader.instance(); // tabPageIface = dynamic_cast(plugin); // ASSERT_NE(tabPageIface, nullptr); // QString directory = "file:///data/usershare"; // QStringList selectUris = (QStringList() << (directory + "/test")); // auto job = new Peony::FileInfoJob(Peony::FileInfo::fromUri(selectUris.first())); // job->querySync(); // Peony::PluginInterface::PluginType type = tabPageIface->pluginType(); // ASSERT_EQ(type, Peony::PluginInterface::PropertiesWindowPlugin); // QString name = tabPageIface->name(); // ASSERT_GT(name.size(), 0); // QString description = tabPageIface->description(); // ASSERT_GT(description.size(), 0); // QIcon icon = tabPageIface->icon(); // ASSERT_GT(icon.name().size(), 0); // tabPageIface->setEnable(true); // EXPECT_TRUE(tabPageIface->isEnable()); // ASSERT_EQ(tabPageIface->tabOrder(), 99); // EXPECT_TRUE(tabPageIface->supportUris(selectUris)); // ASSERT_NE(tabPageIface->createTabPage(selectUris), nullptr); //} peony-extensions/tests/tests.pro0000664000175000017500000000006515257160277016072 0ustar fengfengTEMPLATE = subdirs SUBDIRS += \ extensions-test peony-extensions/tests/kt-test-utils/0000775000175000017500000000000015257160264016732 5ustar fengfengpeony-extensions/tests/kt-test-utils/stub-ext/0000775000175000017500000000000015257160277020511 5ustar fengfengpeony-extensions/tests/kt-test-utils/stub-ext/stub-shadow.h0000664000175000017500000000713315257160277023126 0ustar fengfeng#ifndef STUBSHADOW_H #define STUBSHADOW_H #include #include namespace stub_ext { #define LAMDA_FUNCTION_TYPE decltype(&Lamda::operator()) class Wrapper { public: Wrapper(); virtual ~Wrapper(); }; typedef std::unordered_map WrapperMap; extern WrapperMap stub_wrappers; template class LamdaWrapper : public Wrapper { public: LamdaWrapper(Lamda func): Wrapper(),_func(func){} ~LamdaWrapper(){} Lamda _func; }; template struct VFLocator { }; template struct VFLocator { typedef Ret (*Func)(Obj*, Args...); }; template struct VFLocator { typedef Ret (*Func)(Obj*, Args...); }; template struct LamdaCaller { }; template struct LamdaCaller { template static Ret call(LamdaWrapper *wrapper, OrgArgs&&... args) { return wrapper->_func(std::forward(args)...); } }; template struct LamdaCaller { template static Ret call(LamdaWrapper *wrapper, OrgArgs&&... args) { return wrapper->_func(); } }; template struct FuncShadow { }; template struct FuncShadow { typedef Ret (*Shadow)(Args...); typedef Ret RetType; static Ret call(Args ...args) { Shadow shadow = &call; long id = (long)shadow; auto iter = stub_wrappers.find(id); assert(stub_wrappers.find(id) != stub_wrappers.end()); LamdaWrapper *wrapper = dynamic_cast *>(iter->second); return LamdaCaller::call(wrapper, args...); } }; template struct FuncShadow { typedef Ret (*Shadow)(Obj *,Args...); typedef Ret RetType; static Ret call(Obj *obj, Args ...args) { Shadow shadow = &call; long id = (long)shadow; auto iter = stub_wrappers.find(id); assert(stub_wrappers.find(id) != stub_wrappers.end()); LamdaWrapper *wrapper = dynamic_cast *>(iter->second); return LamdaCaller::call(wrapper, obj, args...); } }; template struct FuncShadow { typedef Ret (*Shadow)(Obj *,Args...); typedef Ret RetType; static Ret call(Obj *obj, Args ...args) { Shadow shadow = &call; long id = (long)shadow; auto iter = stub_wrappers.find(id); assert(stub_wrappers.find(id) != stub_wrappers.end()); LamdaWrapper *wrapper = dynamic_cast *>(iter->second); return LamdaCaller::call(wrapper, obj, args...); } }; template typename FuncShadow::Shadow depictShadow(Wrapper **wrapper, Func func, Lamda lamda) { *wrapper = new LamdaWrapper(lamda); typename FuncShadow::Shadow shadow = &FuncShadow::call; long id = (long)shadow; assert(stub_wrappers.find(id) == stub_wrappers.end()); stub_wrappers.insert(std::make_pair(id,*wrapper)); return shadow; } void freeWrapper(Wrapper *wrapper); } #endif // STUBSHADOW_H peony-extensions/tests/kt-test-utils/stub-ext/stub-shadow.cpp0000664000175000017500000000064515257160277023462 0ustar fengfeng#include "stub-shadow.h" namespace stub_ext { WrapperMap stub_wrappers; Wrapper::Wrapper() { } Wrapper::~Wrapper() { } void freeWrapper(Wrapper *wrapper) { if (!wrapper) return; for (auto iter = stub_wrappers.begin(); iter != stub_wrappers.end();) { if (iter->second == wrapper) iter = stub_wrappers.erase(iter); else ++iter; } delete wrapper; } } peony-extensions/tests/kt-test-utils/stub-ext/stubext.h0000664000175000017500000000734115257160277022365 0ustar fengfeng #ifndef STUBEXT_H #define STUBEXT_H /* * Author: Zhang Yu * Maintainer: Zhang Yu * * MIT License * * Copyright (c) 2020 Zhang Yu * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ //需修改Stubçš„ç§�用æˆ�员函数和æˆ�员å�˜é‡�为ä¿�护类型 #include "stub.h" #include "stub-shadow.h" #ifdef DEBUG_STUB_INVOKE // use to make sure the stub function is invoked. # define __DBG_STUB_INVOKE__ printf("stub at %s:%d is invoked.\n", __FILE__, __LINE__); #else # define __DBG_STUB_INVOKE__ #endif #define VADDR(CLASS_NAME, MEMBER_NAME) (typename stub_ext::VFLocator::Func)(&CLASS_NAME::MEMBER_NAME) namespace stub_ext { class StubExt : public Stub { public: StubExt() : Stub() { } template bool set_lamda(T addr, Lamda lamda) { char *fn = addrof(addr); if (m_result.find(fn) != m_result.end()) reset(addr); Wrapper *wrapper = nullptr; auto addr_stub = depictShadow(&wrapper, addr, lamda); if (set(addr, addr_stub)) { m_wrappers.insert(std::make_pair(fn, wrapper)); return true; } else { freeWrapper(wrapper); } return false; } template void reset(T addr) { Stub::reset(addr); char *fn = addrof(addr); auto iter = m_wrappers.find(fn); if (iter != m_wrappers.end()) { freeWrapper(iter->second); m_wrappers.erase(iter); } } ~StubExt() { clear(); } void clear() override { Stub::clear(); for (auto iter = m_wrappers.begin(); iter != m_wrappers.end(); ++iter) { freeWrapper(iter->second); } m_wrappers.clear(); } template static void *get_ctor_addr(bool start = true) { // the start vairable must be true, or the compiler will optimize out. if (start) goto Start; Call_Constructor: // This line of code will not be executed. // The purpose of the code is to allow the compiler to generate the assembly code that calls the constructor. T(); Start: // The address of the line of code T() obtained by assembly char *p = (char *)&&Call_Constructor; // https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html // CALL rel32 void *ret = 0; char pos; char call = 0xe8; do { pos = *p; if (pos == call) { ret = p + 5 + (*(int *)(p + 1)); } } while (!ret && (++p)); return ret; } protected: std::map m_wrappers; }; } #endif // STUBEXT_H peony-extensions/tests/kt-test-utils/cpp-stub/0000775000175000017500000000000015257160277020473 5ustar fengfengpeony-extensions/tests/kt-test-utils/cpp-stub/addr_any.h0000664000175000017500000002113415257160277022426 0ustar fengfeng#ifndef __ADDR_ANY_H__ #define __ADDR_ANY_H__ //linux #include #include //c #include #include #include //c++ #include #include //project #include "elfio.hpp" class AddrAny { public: AddrAny() { m_init = get_exe_pathname(m_fullname); m_baseaddr = 0; } AddrAny(std::string libname) { m_init = get_lib_pathname_and_baseaddr(libname, m_fullname, m_baseaddr); } int get_local_func_addr_symtab(std::string func_name_regex_str, std::map& result) { return get_func_addr(SHT_SYMTAB, STB_LOCAL, func_name_regex_str, result); } int get_global_func_addr_symtab(std::string func_name_regex_str, std::map& result) { return get_func_addr(SHT_SYMTAB, STB_GLOBAL, func_name_regex_str, result); } int get_weak_func_addr_symtab(std::string func_name_regex_str, std::map& result) { return get_func_addr(SHT_SYMTAB, STB_WEAK, func_name_regex_str, result); } int get_global_func_addr_dynsym( std::string func_name_regex_str, std::map& result) { return get_func_addr(SHT_DYNSYM, STB_GLOBAL, func_name_regex_str, result); } int get_weak_func_addr_dynsym(std::string func_name_regex_str, std::map& result) { return get_func_addr(SHT_DYNSYM, STB_WEAK, func_name_regex_str, result); } private: bool demangle(std::string& s, std::string& name) { int status; char* pname = abi::__cxa_demangle(s.c_str(), 0, 0, &status); if (status != 0) { switch(status) { case -1: name = "memory allocation error"; break; case -2: name = "invalid name given"; break; case -3: name = "internal error: __cxa_demangle: invalid argument"; break; default: name = "unknown error occured"; break; } return false; } name = pname; free(pname); return true; } bool get_exe_pathname( std::string& name) { char line[512]; FILE *fp; uintptr_t base_addr; char perm[5]; unsigned long offset; int pathname_pos; char *pathname; size_t pathname_len; int match = 0; if(NULL == (fp = fopen("/proc/self/maps", "r"))) { return false; } while(fgets(line, sizeof(line), fp)) { if(sscanf(line, "%" PRIxPTR "-%*lx %4s %lx %*x:%*x %*d%n", &base_addr, perm, &offset, &pathname_pos) != 3) continue; if(0 != offset) continue; //get pathname while(isspace(line[pathname_pos]) && pathname_pos < (int)(sizeof(line) - 1)) pathname_pos += 1; if(pathname_pos >= (int)(sizeof(line) - 1)) continue; pathname = line + pathname_pos; pathname_len = strlen(pathname); if(0 == pathname_len) continue; if(pathname[pathname_len - 1] == '\n') { pathname[pathname_len - 1] = '\0'; pathname_len -= 1; } if(0 == pathname_len) continue; if('[' == pathname[0]) continue; name = pathname; match = 1; break; } fclose(fp); if(0 == match) { return false; } else { return true; } } bool get_lib_pathname_and_baseaddr(std::string pathname_regex_str, std::string& name, unsigned long& addr) { char line[512]; FILE *fp; uintptr_t base_addr; char perm[5]; unsigned long offset; int pathname_pos; char *pathname; size_t pathname_len; int match; regex_t pathname_regex; regcomp(&pathname_regex, pathname_regex_str.c_str(), 0); if(NULL == (fp = fopen("/proc/self/maps", "r"))) { return false; } while(fgets(line, sizeof(line), fp)) { if(sscanf(line, "%" PRIxPTR "-%*lx %4s %lx %*x:%*x %*d%n", &base_addr, perm, &offset, &pathname_pos) != 3) continue; //check permission if(perm[0] != 'r') continue; if(perm[3] != 'p') continue; //do not touch the shared memory //check offset // //We are trying to find ELF header in memory. //It can only be found at the beginning of a mapped memory regions //whose offset is 0. if(0 != offset) continue; //get pathname while(isspace(line[pathname_pos]) && pathname_pos < (int)(sizeof(line) - 1)) pathname_pos += 1; if(pathname_pos >= (int)(sizeof(line) - 1)) continue; pathname = line + pathname_pos; pathname_len = strlen(pathname); if(0 == pathname_len) continue; if(pathname[pathname_len - 1] == '\n') { pathname[pathname_len - 1] = '\0'; pathname_len -= 1; } if(0 == pathname_len) continue; if('[' == pathname[0]) continue; //check pathname //if we need to hook this elf? match = 0; if(0 == regexec(&pathname_regex, pathname, 0, NULL, 0)) { match = 1; name = pathname; addr = (unsigned long)base_addr; break; } if(0 == match) continue; } fclose(fp); if(0 == match) { return false; } else { return true; } } int get_func_addr(unsigned int ttype, unsigned int stype, std::string& func_name_regex_str, std::map& result) { // Create an elfio reader ELFIO::elfio reader; int count = 0; regex_t pathname_regex; if(!m_init) { return -1; } regcomp(&pathname_regex, func_name_regex_str.c_str(), 0); // Load ELF data if(!reader.load(m_fullname.c_str())) { return -1; } ELFIO::Elf_Half sec_num = reader.sections.size(); for(int i = 0; i < sec_num; ++i) { ELFIO::section* psec = reader.sections[i]; // Check section type if(psec->get_type() == ttype) { const ELFIO::symbol_section_accessor symbols( reader, psec ); for ( unsigned int j = 0; j < symbols.get_symbols_num(); ++j ) { std::string name; std::string name_mangle; ELFIO::Elf64_Addr value; ELFIO::Elf_Xword size; unsigned char bind; unsigned char type; ELFIO::Elf_Half section_index; unsigned char other; // Read symbol properties symbols.get_symbol( j, name, value, size, bind, type, section_index, other ); if(type == STT_FUNC && bind == stype) { bool ret = demangle(name,name_mangle); if(ret == true) { if (0 == regexec(&pathname_regex, name_mangle.c_str(), 0, NULL, 0)) { result.insert ( std::pair(name_mangle,(void*)(value + m_baseaddr))); count++; } } else { if (0 == regexec(&pathname_regex, name.c_str(), 0, NULL, 0)) { result.insert ( std::pair(name,(void*)(value + m_baseaddr))); count++; } } } } break; } } return count; } private: bool m_init; std::string m_name; std::string m_fullname; unsigned long m_baseaddr; }; #endif peony-extensions/tests/kt-test-utils/cpp-stub/stub.h0000664000175000017500000002340715257160277021627 0ustar fengfeng#ifndef __STUB_H__ #define __STUB_H__ #ifdef _WIN32 //windows #include #include #else //linux #include #include #include #endif //c #include #include //c++ #include #define ADDR(CLASS_NAME,MEMBER_NAME) (&CLASS_NAME::MEMBER_NAME) /********************************************************** replace function **********************************************************/ #ifdef _WIN32 #define CACHEFLUSH(addr, size) FlushInstructionCache(GetCurrentProcess(), addr, size) #else #define CACHEFLUSH(addr, size) __builtin___clear_cache(addr, addr + size) #endif #if defined(__aarch64__) || defined(_M_ARM64) #define CODESIZE 16U #define CODESIZE_MIN 16U #define CODESIZE_MAX CODESIZE // ldr x9, +8 // br x9 // addr #define REPLACE_FAR(t, fn, fn_stub)\ ((uint32_t*)fn)[0] = 0x58000040 | 9;\ ((uint32_t*)fn)[1] = 0xd61f0120 | (9 << 5);\ *(long long *)(fn + 8) = (long long )fn_stub;\ CACHEFLUSH((char *)fn, CODESIZE); #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) #elif defined(__arm__) || defined(_M_ARM) #define CODESIZE 8U #define CODESIZE_MIN 8U #define CODESIZE_MAX CODESIZE // ldr pc, [pc, #-4] #define REPLACE_FAR(t, fn, fn_stub)\ ((uint32_t*)fn)[0] = 0xe51ff004;\ ((uint32_t*)fn)[1] = (uint32_t)fn_stub;\ CACHEFLUSH((char *)fn, CODESIZE); #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) #elif defined(__mips64) #define CACHEFLUSH(addr, size) __builtin___clear_cache(addr, addr + size) #define CODESIZE 80U #define CODESIZE_MIN 80U #define CODESIZE_MAX CODESIZE //mips没有PC指针,所以需è¦�手动入栈出栈 //120000ce0: 67bdffe0 daddiu sp, sp, -32 //入栈 //120000ce4: ffbf0018 sd ra, 24(sp) //120000ce8: ffbe0010 sd s8, 16(sp) //120000cec: ffbc0008 sd gp, 8(sp) //120000cf0: 03a0f025 move s8, sp //120000d2c: 03c0e825 move sp, s8 //出栈 //120000d30: dfbf0018 ld ra, 24(sp) //120000d34: dfbe0010 ld s8, 16(sp) //120000d38: dfbc0008 ld gp, 8(sp) //120000d3c: 67bd0020 daddiu sp, sp, 32 //120000d40: 03e00008 jr ra #define REPLACE_FAR(t, fn, fn_stub)\ ((uint32_t *)fn)[0] = 0x67bdffe0;\ ((uint32_t *)fn)[1] = 0xffbf0018;\ ((uint32_t *)fn)[2] = 0xffbe0010;\ ((uint32_t *)fn)[3] = 0xffbc0008;\ ((uint32_t *)fn)[4] = 0x03a0f025;\ *(uint16_t *)(fn + 20) = (long long)fn_stub >> 32;\ *(fn + 22) = 0x19;\ *(fn + 23) = 0x24;\ ((uint32_t *)fn)[6] = 0x0019cc38;\ *(uint16_t *)(fn + 28) = (long long)fn_stub >> 16;\ *(fn + 30) = 0x39;\ *(fn + 31) = 0x37;\ ((uint32_t *)fn)[8] = 0x0019cc38;\ *(uint16_t *)(fn + 36) = (long long)fn_stub;\ *(fn + 38) = 0x39;\ *(fn + 39) = 0x37;\ ((uint32_t *)fn)[10] = 0x0320f809;\ ((uint32_t *)fn)[11] = 0x00000000;\ ((uint32_t *)fn)[12] = 0x00000000;\ ((uint32_t *)fn)[13] = 0x03c0e825;\ ((uint32_t *)fn)[14] = 0xdfbf0018;\ ((uint32_t *)fn)[15] = 0xdfbe0010;\ ((uint32_t *)fn)[16] = 0xdfbc0008;\ ((uint32_t *)fn)[17] = 0x67bd0020;\ ((uint32_t *)fn)[18] = 0x03e00008;\ ((uint32_t *)fn)[19] = 0x00000000;\ CACHEFLUSH((char *)fn, CODESIZE); #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) #elif defined(__thumb__) || defined(_M_THUMB) #error "Thumb is not supported" #else //__i386__ _x86_64__ #define CODESIZE 13U #define CODESIZE_MIN 5U #define CODESIZE_MAX CODESIZE //13 byte(jmp m16:64) //movabs $0x102030405060708,%r11 //jmpq *%r11 static void REPLACE_FAR(void *t, char *fn, char *fn_stub) { *fn = 0x49; *(fn + 1) = 0xbb; *(long long *)(fn + 2) = (long long)fn_stub; *(fn + 10) = 0x41; *(fn + 11) = 0xff; *(fn + 12) = 0xe3; CACHEFLUSH((char *)fn, CODESIZE); } //5 byte(jmp rel32) #define REPLACE_NEAR(t, fn, fn_stub)\ *fn = 0xE9;\ *(int *)(fn + 1) = (int)(fn_stub - fn - CODESIZE_MIN);\ CACHEFLUSH((char *)fn, CODESIZE); #endif struct func_stub { char *fn; unsigned char code_buf[CODESIZE]; bool far_jmp; }; class Stub { public: Stub() { #ifdef _WIN32 SYSTEM_INFO sys_info; GetSystemInfo(&sys_info); m_pagesize = sys_info.dwPageSize; #else m_pagesize = sysconf(_SC_PAGE_SIZE); #endif if (m_pagesize < 0) { m_pagesize = 4096; } } ~Stub() { clear(); } virtual void clear() { std::map::iterator iter; struct func_stub *pstub; for(iter=m_result.begin(); iter != m_result.end(); iter++) { pstub = iter->second; #ifdef _WIN32 DWORD lpflOldProtect; if(0 != VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READWRITE, &lpflOldProtect)) #else if (0 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_WRITE | PROT_EXEC)) #endif { if(pstub->far_jmp) { std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MAX); } else { std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MIN); } #ifdef _WIN32 VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READ, &lpflOldProtect); #else CACHEFLUSH(pstub->fn,CODESIZE); mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_EXEC); #endif } iter->second = NULL; delete pstub; } m_result.clear(); return; } template bool set(T addr, S addr_stub) { char * fn; char * fn_stub; fn = addrof(addr); fn_stub = addrof(addr_stub); struct func_stub *pstub; std::map::iterator iter = m_result.find(fn); if (iter == m_result.end()) { pstub = new func_stub; //start pstub->fn = fn; if(distanceof(fn, fn_stub)) { pstub->far_jmp = true; std::memcpy(pstub->code_buf, fn, CODESIZE_MAX); } else { pstub->far_jmp = false; std::memcpy(pstub->code_buf, fn, CODESIZE_MIN); } } else { pstub = iter->second; pstub->far_jmp = distanceof(fn, fn_stub); } #ifdef _WIN32 DWORD lpflOldProtect; if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READWRITE, &lpflOldProtect)) #else if (-1 == mprotect(pageof(pstub->fn), static_cast(m_pagesize * 2), PROT_READ | PROT_WRITE | PROT_EXEC)) #endif { throw("stub set memory protect to w+r+x faild"); return false; } if(pstub->far_jmp) { REPLACE_FAR(this, fn, fn_stub); } else { REPLACE_NEAR(this, fn, fn_stub); } #ifdef _WIN32 if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READ, &lpflOldProtect)) #else if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_EXEC)) #endif { throw("stub set memory protect to r+x failed"); return false; } m_result.insert(std::pair(fn,pstub)); return true; } template bool reset(T addr) { char * fn; fn = addrof(addr); std::map::iterator iter = m_result.find(fn); if (iter == m_result.end()) { return true; } struct func_stub *pstub; pstub = iter->second; #ifdef _WIN32 DWORD lpflOldProtect; if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READWRITE, &lpflOldProtect)) #else if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_WRITE | PROT_EXEC)) #endif { throw("stub reset memory protect to w+r+x faild"); return false; } if(pstub->far_jmp) { std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MAX); } else { std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MIN); } #ifdef _WIN32 if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READ, &lpflOldProtect)) #else CACHEFLUSH(pstub->fn,CODESIZE); if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_EXEC)) #endif { throw("stub reset memory protect to r+x failed"); return false; } m_result.erase(iter); delete pstub; return true; } protected: char *pageof(char* addr) { #ifdef _WIN32 return (char *)((unsigned long long)addr & ~(m_pagesize - 1)); #else return (char *)((unsigned long)addr & ~(m_pagesize - 1)); #endif } template char* addrof(T addr) { union { T _s; char* _d; }ut; ut._s = addr; return ut._d; } bool distanceof(char* addr, char* addr_stub) { std::ptrdiff_t diff = addr_stub >= addr ? addr_stub - addr : addr - addr_stub; if((sizeof(addr) > 4) && (((diff >> 31) - 1) > 0)) { return true; } return false; } protected: #ifdef _WIN32 //LLP64 long long m_pagesize; #else //LP64 long m_pagesize; #endif std::map m_result; }; #endif peony-extensions/tests/kt-test-utils/cpp-stub/elfio.hpp0000664000175000017500000045310415257160277022311 0ustar fengfeng /*** Start of inlined file: elfio_dump.hpp ***/ #ifndef ELFIO_DUMP_HPP #define ELFIO_DUMP_HPP #include #include #include #include #include /*** Start of inlined file: elfio.hpp ***/ #ifndef ELFIO_HPP #define ELFIO_HPP #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4996 ) #pragma warning( disable : 4355 ) #pragma warning( disable : 4244 ) #endif #include #include #include #include #include #include #include #include /*** Start of inlined file: elf_types.hpp ***/ #ifndef ELFTYPES_H #define ELFTYPES_H #ifndef ELFIO_NO_OWN_TYPES #if !defined( ELFIO_NO_CSTDINT ) && !defined( ELFIO_NO_INTTYPES ) #include #else typedef unsigned char uint8_t; typedef signed char int8_t; typedef unsigned short uint16_t; typedef signed short int16_t; #ifdef _MSC_VER typedef unsigned __int32 uint32_t; typedef signed __int32 int32_t; typedef unsigned __int64 uint64_t; typedef signed __int64 int64_t; #else typedef unsigned int uint32_t; typedef signed int int32_t; typedef unsigned long long uint64_t; typedef signed long long int64_t; #endif // _MSC_VER #endif // ELFIO_NO_CSTDINT #endif // ELFIO_NO_OWN_TYPES namespace ELFIO { // Attention! Platform depended definitions. typedef uint16_t Elf_Half; typedef uint32_t Elf_Word; typedef int32_t Elf_Sword; typedef uint64_t Elf_Xword; typedef int64_t Elf_Sxword; typedef uint32_t Elf32_Addr; typedef uint32_t Elf32_Off; typedef uint64_t Elf64_Addr; typedef uint64_t Elf64_Off; #define Elf32_Half Elf_Half #define Elf64_Half Elf_Half #define Elf32_Word Elf_Word #define Elf64_Word Elf_Word #define Elf32_Sword Elf_Sword #define Elf64_Sword Elf_Sword /////////////////////// // ELF Header Constants // File type #define ET_NONE 0 #define ET_REL 1 #define ET_EXEC 2 #define ET_DYN 3 #define ET_CORE 4 #define ET_LOOS 0xFE00 #define ET_HIOS 0xFEFF #define ET_LOPROC 0xFF00 #define ET_HIPROC 0xFFFF #define EM_NONE 0 // No machine #define EM_M32 1 // AT&T WE 32100 #define EM_SPARC 2 // SUN SPARC #define EM_386 3 // Intel 80386 #define EM_68K 4 // Motorola m68k family #define EM_88K 5 // Motorola m88k family #define EM_486 6 // Intel 80486// Reserved for future use #define EM_860 7 // Intel 80860 #define EM_MIPS 8 // MIPS R3000 (officially, big-endian only) #define EM_S370 9 // IBM System/370 #define EM_MIPS_RS3_LE \ 10 // MIPS R3000 little-endian (Oct 4 1999 Draft) Deprecated #define EM_res011 11 // Reserved #define EM_res012 12 // Reserved #define EM_res013 13 // Reserved #define EM_res014 14 // Reserved #define EM_PARISC 15 // HPPA #define EM_res016 16 // Reserved #define EM_VPP550 17 // Fujitsu VPP500 #define EM_SPARC32PLUS 18 // Sun's "v8plus" #define EM_960 19 // Intel 80960 #define EM_PPC 20 // PowerPC #define EM_PPC64 21 // 64-bit PowerPC #define EM_S390 22 // IBM S/390 #define EM_SPU 23 // Sony/Toshiba/IBM SPU #define EM_res024 24 // Reserved #define EM_res025 25 // Reserved #define EM_res026 26 // Reserved #define EM_res027 27 // Reserved #define EM_res028 28 // Reserved #define EM_res029 29 // Reserved #define EM_res030 30 // Reserved #define EM_res031 31 // Reserved #define EM_res032 32 // Reserved #define EM_res033 33 // Reserved #define EM_res034 34 // Reserved #define EM_res035 35 // Reserved #define EM_V800 36 // NEC V800 series #define EM_FR20 37 // Fujitsu FR20 #define EM_RH32 38 // TRW RH32 #define EM_MCORE 39 // Motorola M*Core // May also be taken by Fujitsu MMA #define EM_RCE 39 // Old name for MCore #define EM_ARM 40 // ARM #define EM_OLD_ALPHA 41 // Digital Alpha #define EM_SH 42 // Renesas (formerly Hitachi) / SuperH SH #define EM_SPARCV9 43 // SPARC v9 64-bit #define EM_TRICORE 44 // Siemens Tricore embedded processor #define EM_ARC 45 // ARC Cores #define EM_H8_300 46 // Renesas (formerly Hitachi) H8/300 #define EM_H8_300H 47 // Renesas (formerly Hitachi) H8/300H #define EM_H8S 48 // Renesas (formerly Hitachi) H8S #define EM_H8_500 49 // Renesas (formerly Hitachi) H8/500 #define EM_IA_64 50 // Intel IA-64 Processor #define EM_MIPS_X 51 // Stanford MIPS-X #define EM_COLDFIRE 52 // Motorola Coldfire #define EM_68HC12 53 // Motorola M68HC12 #define EM_MMA 54 // Fujitsu Multimedia Accelerator #define EM_PCP 55 // Siemens PCP #define EM_NCPU 56 // Sony nCPU embedded RISC processor #define EM_NDR1 57 // Denso NDR1 microprocesspr #define EM_STARCORE 58 // Motorola Star*Core processor #define EM_ME16 59 // Toyota ME16 processor #define EM_ST100 60 // STMicroelectronics ST100 processor #define EM_TINYJ 61 // Advanced Logic Corp. TinyJ embedded processor #define EM_X86_64 62 // Advanced Micro Devices X86-64 processor #define EM_PDSP 63 // Sony DSP Processor #define EM_PDP10 64 // Digital Equipment Corp. PDP-10 #define EM_PDP11 65 // Digital Equipment Corp. PDP-11 #define EM_FX66 66 // Siemens FX66 microcontroller #define EM_ST9PLUS 67 // STMicroelectronics ST9+ 8/16 bit microcontroller #define EM_ST7 68 // STMicroelectronics ST7 8-bit microcontroller #define EM_68HC16 69 // Motorola MC68HC16 Microcontroller #define EM_68HC11 70 // Motorola MC68HC11 Microcontroller #define EM_68HC08 71 // Motorola MC68HC08 Microcontroller #define EM_68HC05 72 // Motorola MC68HC05 Microcontroller #define EM_SVX 73 // Silicon Graphics SVx #define EM_ST19 74 // STMicroelectronics ST19 8-bit cpu #define EM_VAX 75 // Digital VAX #define EM_CRIS 76 // Axis Communications 32-bit embedded processor #define EM_JAVELIN 77 // Infineon Technologies 32-bit embedded cpu #define EM_FIREPATH 78 // Element 14 64-bit DSP processor #define EM_ZSP 79 // LSI Logic's 16-bit DSP processor #define EM_MMIX 80 // Donald Knuth's educational 64-bit processor #define EM_HUANY 81 // Harvard's machine-independent format #define EM_PRISM 82 // SiTera Prism #define EM_AVR 83 // Atmel AVR 8-bit microcontroller #define EM_FR30 84 // Fujitsu FR30 #define EM_D10V 85 // Mitsubishi D10V #define EM_D30V 86 // Mitsubishi D30V #define EM_V850 87 // NEC v850 #define EM_M32R 88 // Renesas M32R (formerly Mitsubishi M32R) #define EM_MN10300 89 // Matsushita MN10300 #define EM_MN10200 90 // Matsushita MN10200 #define EM_PJ 91 // picoJava #define EM_OPENRISC 92 // OpenRISC 32-bit embedded processor #define EM_ARC_A5 93 // ARC Cores Tangent-A5 #define EM_XTENSA 94 // Tensilica Xtensa Architecture #define EM_VIDEOCORE 95 // Alphamosaic VideoCore processor #define EM_TMM_GPP 96 // Thompson Multimedia General Purpose Processor #define EM_NS32K 97 // National Semiconductor 32000 series #define EM_TPC 98 // Tenor Network TPC processor #define EM_SNP1K 99 // Trebia SNP 1000 processor #define EM_ST200 100 // STMicroelectronics ST200 microcontroller #define EM_IP2K 101 // Ubicom IP2022 micro controller #define EM_MAX 102 // MAX Processor #define EM_CR 103 // National Semiconductor CompactRISC #define EM_F2MC16 104 // Fujitsu F2MC16 #define EM_MSP430 105 // TI msp430 micro controller #define EM_BLACKFIN 106 // ADI Blackfin #define EM_SE_C33 107 // S1C33 Family of Seiko Epson processors #define EM_SEP 108 // Sharp embedded microprocessor #define EM_ARCA 109 // Arca RISC Microprocessor #define EM_UNICORE \ 110 // Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University #define EM_EXCESS 111 // eXcess: 16/32/64-bit configurable embedded CPU #define EM_DXP 112 // Icera Semiconductor Inc. Deep Execution Processor #define EM_ALTERA_NIOS2 113 // Altera Nios II soft-core processor #define EM_CRX 114 // National Semiconductor CRX #define EM_XGATE 115 // Motorola XGATE embedded processor #define EM_C166 116 // Infineon C16x/XC16x processor #define EM_M16C 117 // Renesas M16C series microprocessors #define EM_DSPIC30F \ 118 // Microchip Technology dsPIC30F Digital Signal Controller #define EM_CE 119 // Freescale Communication Engine RISC core #define EM_M32C 120 // Renesas M32C series microprocessors #define EM_res121 121 // Reserved #define EM_res122 122 // Reserved #define EM_res123 123 // Reserved #define EM_res124 124 // Reserved #define EM_res125 125 // Reserved #define EM_res126 126 // Reserved #define EM_res127 127 // Reserved #define EM_res128 128 // Reserved #define EM_res129 129 // Reserved #define EM_res130 130 // Reserved #define EM_TSK3000 131 // Altium TSK3000 core #define EM_RS08 132 // Freescale RS08 embedded processor #define EM_res133 133 // Reserved #define EM_ECOG2 134 // Cyan Technology eCOG2 microprocessor #define EM_SCORE 135 // Sunplus Score #define EM_SCORE7 135 // Sunplus S+core7 RISC processor #define EM_DSP24 136 // New Japan Radio (NJR) 24-bit DSP Processor #define EM_VIDEOCORE3 137 // Broadcom VideoCore III processor #define EM_LATTICEMICO32 138 // RISC processor for Lattice FPGA architecture #define EM_SE_C17 139 // Seiko Epson C17 family #define EM_TI_C6000 140 // Texas Instruments TMS320C6000 DSP family #define EM_TI_C2000 141 // Texas Instruments TMS320C2000 DSP family #define EM_TI_C5500 142 // Texas Instruments TMS320C55x DSP family #define EM_res143 143 // Reserved #define EM_res144 144 // Reserved #define EM_res145 145 // Reserved #define EM_res146 146 // Reserved #define EM_res147 147 // Reserved #define EM_res148 148 // Reserved #define EM_res149 149 // Reserved #define EM_res150 150 // Reserved #define EM_res151 151 // Reserved #define EM_res152 152 // Reserved #define EM_res153 153 // Reserved #define EM_res154 154 // Reserved #define EM_res155 155 // Reserved #define EM_res156 156 // Reserved #define EM_res157 157 // Reserved #define EM_res158 158 // Reserved #define EM_res159 159 // Reserved #define EM_MMDSP_PLUS 160 // STMicroelectronics 64bit VLIW Data Signal Processor #define EM_CYPRESS_M8C 161 // Cypress M8C microprocessor #define EM_R32C 162 // Renesas R32C series microprocessors #define EM_TRIMEDIA 163 // NXP Semiconductors TriMedia architecture family #define EM_QDSP6 164 // QUALCOMM DSP6 Processor #define EM_8051 165 // Intel 8051 and variants #define EM_STXP7X 166 // STMicroelectronics STxP7x family #define EM_NDS32 \ 167 // Andes Technology compact code size embedded RISC processor family #define EM_ECOG1 168 // Cyan Technology eCOG1X family #define EM_ECOG1X 168 // Cyan Technology eCOG1X family #define EM_MAXQ30 169 // Dallas Semiconductor MAXQ30 Core Micro-controllers #define EM_XIMO16 170 // New Japan Radio (NJR) 16-bit DSP Processor #define EM_MANIK 171 // M2000 Reconfigurable RISC Microprocessor #define EM_CRAYNV2 172 // Cray Inc. NV2 vector architecture #define EM_RX 173 // Renesas RX family #define EM_METAG 174 // Imagination Technologies META processor architecture #define EM_MCST_ELBRUS 175 // MCST Elbrus general purpose hardware architecture #define EM_ECOG16 176 // Cyan Technology eCOG16 family #define EM_CR16 177 // National Semiconductor CompactRISC 16-bit processor #define EM_ETPU 178 // Freescale Extended Time Processing Unit #define EM_SLE9X 179 // Infineon Technologies SLE9X core #define EM_L1OM 180 // Intel L1OM #define EM_INTEL181 181 // Reserved by Intel #define EM_INTEL182 182 // Reserved by Intel #define EM_res183 183 // Reserved by ARM #define EM_res184 184 // Reserved by ARM #define EM_AVR32 185 // Atmel Corporation 32-bit microprocessor family #define EM_STM8 186 // STMicroeletronics STM8 8-bit microcontroller #define EM_TILE64 187 // Tilera TILE64 multicore architecture family #define EM_TILEPRO 188 // Tilera TILEPro multicore architecture family #define EM_MICROBLAZE 189 // Xilinx MicroBlaze 32-bit RISC soft processor core #define EM_CUDA 190 // NVIDIA CUDA architecture #define EM_TILEGX 191 // Tilera TILE-Gx multicore architecture family #define EM_CLOUDSHIELD 192 // CloudShield architecture family #define EM_COREA_1ST 193 // KIPO-KAIST Core-A 1st generation processor family #define EM_COREA_2ND 194 // KIPO-KAIST Core-A 2nd generation processor family #define EM_ARC_COMPACT2 195 // Synopsys ARCompact V2 #define EM_OPEN8 196 // Open8 8-bit RISC soft processor core #define EM_RL78 197 // Renesas RL78 family #define EM_VIDEOCORE5 198 // Broadcom VideoCore V processor #define EM_78KOR 199 // Renesas 78KOR family #define EM_56800EX 200 // Freescale 56800EX Digital Signal Controller (DSC) #define EM_BA1 201 // Beyond BA1 CPU architecture #define EM_BA2 202 // Beyond BA2 CPU architecture #define EM_XCORE 203 // XMOS xCORE processor family #define EM_MCHP_PIC 204 // Microchip 8-bit PIC(r) family #define EM_INTEL205 205 // Reserved by Intel #define EM_INTEL206 206 // Reserved by Intel #define EM_INTEL207 207 // Reserved by Intel #define EM_INTEL208 208 // Reserved by Intel #define EM_INTEL209 209 // Reserved by Intel #define EM_KM32 210 // KM211 KM32 32-bit processor #define EM_KMX32 211 // KM211 KMX32 32-bit processor #define EM_KMX16 212 // KM211 KMX16 16-bit processor #define EM_KMX8 213 // KM211 KMX8 8-bit processor #define EM_KVARC 214 // KM211 KVARC processor #define EM_CDP 215 // Paneve CDP architecture family #define EM_COGE 216 // Cognitive Smart Memory Processor #define EM_COOL 217 // iCelero CoolEngine #define EM_NORC 218 // Nanoradio Optimized RISC #define EM_CSR_KALIMBA 219 // CSR Kalimba architecture family #define EM_Z80 220 // Zilog Z80 #define EM_VISIUM 221 // Controls and Data Services VISIUMcore processor #define EM_FT32 222 // FTDI Chip FT32 high performance 32-bit RISC architecture #define EM_MOXIE 223 // Moxie processor family #define EM_AMDGPU 224 // AMD GPU architecture #define EM_RISCV 243 // RISC-V #define EM_LANAI 244 // Lanai processor #define EM_CEVA 245 // CEVA Processor Architecture Family #define EM_CEVA_X2 246 // CEVA X2 Processor Family #define EM_BPF 247 // Linux BPF – in-kernel virtual machine #define EM_GRAPHCORE_IPU 248 // Graphcore Intelligent Processing Unit #define EM_IMG1 249 // Imagination Technologies #define EM_NFP 250 // Netronome Flow Processor (P) #define EM_CSKY 252 // C-SKY processor family // File version #define EV_NONE 0 #define EV_CURRENT 1 // Identification index #define EI_MAG0 0 #define EI_MAG1 1 #define EI_MAG2 2 #define EI_MAG3 3 #define EI_CLASS 4 #define EI_DATA 5 #define EI_VERSION 6 #define EI_OSABI 7 #define EI_ABIVERSION 8 #define EI_PAD 9 #define EI_NIDENT 16 // Magic number #define ELFMAG0 0x7F #define ELFMAG1 'E' #define ELFMAG2 'L' #define ELFMAG3 'F' // File class #define ELFCLASSNONE 0 #define ELFCLASS32 1 #define ELFCLASS64 2 // Encoding #define ELFDATANONE 0 #define ELFDATA2LSB 1 #define ELFDATA2MSB 2 // OS extensions #define ELFOSABI_NONE 0 // No extensions or unspecified #define ELFOSABI_HPUX 1 // Hewlett-Packard HP-UX #define ELFOSABI_NETBSD 2 // NetBSD #define ELFOSABI_LINUX 3 // Linux #define ELFOSABI_SOLARIS 6 // Sun Solaris #define ELFOSABI_AIX 7 // AIX #define ELFOSABI_IRIX 8 // IRIX #define ELFOSABI_FREEBSD 9 // FreeBSD #define ELFOSABI_TRU64 10 // Compaq TRU64 UNIX #define ELFOSABI_MODESTO 11 // Novell Modesto #define ELFOSABI_OPENBSD 12 // Open BSD #define ELFOSABI_OPENVMS 13 // Open VMS #define ELFOSABI_NSK 14 // Hewlett-Packard Non-Stop Kernel #define ELFOSABI_AROS 15 // Amiga Research OS #define ELFOSABI_FENIXOS 16 // The FenixOS highly scalable multi-core OS // 64-255 Architecture-specific value range #define ELFOSABI_AMDGPU_HSA \ 64 // AMDGPU OS for HSA compatible compute // kernels. #define ELFOSABI_AMDGPU_PAL \ 65 // AMDGPU OS for AMD PAL compatible graphics // shaders and compute kernels. #define ELFOSABI_AMDGPU_MESA3D \ 66 // AMDGPU OS for Mesa3D compatible graphics // shaders and compute kernels. // AMDGPU specific e_flags #define EF_AMDGPU_MACH 0x0ff // AMDGPU processor selection mask. #define EF_AMDGPU_XNACK \ 0x100 // Indicates if the XNACK target feature is // enabled for all code contained in the ELF. // AMDGPU processors #define EF_AMDGPU_MACH_NONE 0x000 // Unspecified processor. #define EF_AMDGPU_MACH_R600_R600 0x001 #define EF_AMDGPU_MACH_R600_R630 0x002 #define EF_AMDGPU_MACH_R600_RS880 0x003 #define EF_AMDGPU_MACH_R600_RV670 0x004 #define EF_AMDGPU_MACH_R600_RV710 0x005 #define EF_AMDGPU_MACH_R600_RV730 0x006 #define EF_AMDGPU_MACH_R600_RV770 0x007 #define EF_AMDGPU_MACH_R600_CEDAR 0x008 #define EF_AMDGPU_MACH_R600_CYPRESS 0x009 #define EF_AMDGPU_MACH_R600_JUNIPER 0x00a #define EF_AMDGPU_MACH_R600_REDWOOD 0x00b #define EF_AMDGPU_MACH_R600_SUMO 0x00c #define EF_AMDGPU_MACH_R600_BARTS 0x00d #define EF_AMDGPU_MACH_R600_CAICOS 0x00e #define EF_AMDGPU_MACH_R600_CAYMAN 0x00f #define EF_AMDGPU_MACH_R600_TURKS 0x010 #define EF_AMDGPU_MACH_R600_RESERVED_FIRST 0x011 #define EF_AMDGPU_MACH_R600_RESERVED_LAST 0x01f #define EF_AMDGPU_MACH_R600_FIRST EF_AMDGPU_MACH_R600_R600 #define EF_AMDGPU_MACH_R600_LAST EF_AMDGPU_MACH_R600_TURKS #define EF_AMDGPU_MACH_AMDGCN_GFX600 0x020 #define EF_AMDGPU_MACH_AMDGCN_GFX601 0x021 #define EF_AMDGPU_MACH_AMDGCN_GFX700 0x022 #define EF_AMDGPU_MACH_AMDGCN_GFX701 0x023 #define EF_AMDGPU_MACH_AMDGCN_GFX702 0x024 #define EF_AMDGPU_MACH_AMDGCN_GFX703 0x025 #define EF_AMDGPU_MACH_AMDGCN_GFX704 0x026 #define EF_AMDGPU_MACH_AMDGCN_GFX801 0x028 #define EF_AMDGPU_MACH_AMDGCN_GFX802 0x029 #define EF_AMDGPU_MACH_AMDGCN_GFX803 0x02a #define EF_AMDGPU_MACH_AMDGCN_GFX810 0x02b #define EF_AMDGPU_MACH_AMDGCN_GFX900 0x02c #define EF_AMDGPU_MACH_AMDGCN_GFX902 0x02d #define EF_AMDGPU_MACH_AMDGCN_GFX904 0x02e #define EF_AMDGPU_MACH_AMDGCN_GFX906 0x02f #define EF_AMDGPU_MACH_AMDGCN_RESERVED0 0x027 #define EF_AMDGPU_MACH_AMDGCN_RESERVED1 0x030 #define EF_AMDGPU_MACH_AMDGCN_FIRST EF_AMDGPU_MACH_AMDGCN_GFX600 #define EF_AMDGPU_MACH_AMDGCN_LAST EF_AMDGPU_MACH_AMDGCN_GFX906 ///////////////////// // Sections constants // Section indexes #define SHN_UNDEF 0 #define SHN_LORESERVE 0xFF00 #define SHN_LOPROC 0xFF00 #define SHN_HIPROC 0xFF1F #define SHN_LOOS 0xFF20 #define SHN_HIOS 0xFF3F #define SHN_ABS 0xFFF1 #define SHN_COMMON 0xFFF2 #define SHN_XINDEX 0xFFFF #define SHN_HIRESERVE 0xFFFF // Section types #define SHT_NULL 0 #define SHT_PROGBITS 1 #define SHT_SYMTAB 2 #define SHT_STRTAB 3 #define SHT_RELA 4 #define SHT_HASH 5 #define SHT_DYNAMIC 6 #define SHT_NOTE 7 #define SHT_NOBITS 8 #define SHT_REL 9 #define SHT_SHLIB 10 #define SHT_DYNSYM 11 #define SHT_INIT_ARRAY 14 #define SHT_FINI_ARRAY 15 #define SHT_PREINIT_ARRAY 16 #define SHT_GROUP 17 #define SHT_SYMTAB_SHNDX 18 #define SHT_LOOS 0x60000000 #define SHT_HIOS 0x6fffffff #define SHT_LOPROC 0x70000000 #define SHT_HIPROC 0x7FFFFFFF #define SHT_LOUSER 0x80000000 #define SHT_HIUSER 0xFFFFFFFF // Section attribute flags #define SHF_WRITE 0x1 #define SHF_ALLOC 0x2 #define SHF_EXECINSTR 0x4 #define SHF_MERGE 0x10 #define SHF_STRINGS 0x20 #define SHF_INFO_LINK 0x40 #define SHF_LINK_ORDER 0x80 #define SHF_OS_NONCONFORMING 0x100 #define SHF_GROUP 0x200 #define SHF_TLS 0x400 #define SHF_MASKOS 0x0ff00000 #define SHF_MASKPROC 0xF0000000 // Section group flags #define GRP_COMDAT 0x1 #define GRP_MASKOS 0x0ff00000 #define GRP_MASKPROC 0xf0000000 // Symbol binding #define STB_LOCAL 0 #define STB_GLOBAL 1 #define STB_WEAK 2 #define STB_LOOS 10 #define STB_HIOS 12 #define STB_MULTIDEF 13 #define STB_LOPROC 13 #define STB_HIPROC 15 // Note types #define NT_AMDGPU_METADATA 1 #define NT_AMD_AMDGPU_HSA_METADATA 10 #define NT_AMD_AMDGPU_ISA 11 #define NT_AMD_AMDGPU_PAL_METADATA 12 // Symbol types #define STT_NOTYPE 0 #define STT_OBJECT 1 #define STT_FUNC 2 #define STT_SECTION 3 #define STT_FILE 4 #define STT_COMMON 5 #define STT_TLS 6 #define STT_LOOS 10 #define STT_AMDGPU_HSA_KERNEL 10 #define STT_HIOS 12 #define STT_LOPROC 13 #define STT_HIPROC 15 // Symbol visibility #define STV_DEFAULT 0 #define STV_INTERNAL 1 #define STV_HIDDEN 2 #define STV_PROTECTED 3 // Undefined name #define STN_UNDEF 0 // Relocation types #define R_386_NONE 0 #define R_X86_64_NONE 0 #define R_AMDGPU_NONE 0 #define R_386_32 1 #define R_X86_64_64 1 #define R_AMDGPU_ABS32_LO 1 #define R_386_PC32 2 #define R_X86_64_PC32 2 #define R_AMDGPU_ABS32_HI 2 #define R_386_GOT32 3 #define R_X86_64_GOT32 3 #define R_AMDGPU_ABS64 3 #define R_386_PLT32 4 #define R_X86_64_PLT32 4 #define R_AMDGPU_REL32 4 #define R_386_COPY 5 #define R_X86_64_COPY 5 #define R_AMDGPU_REL64 5 #define R_386_GLOB_DAT 6 #define R_X86_64_GLOB_DAT 6 #define R_AMDGPU_ABS32 6 #define R_386_JMP_SLOT 7 #define R_X86_64_JUMP_SLOT 7 #define R_AMDGPU_GOTPCREL 7 #define R_386_RELATIVE 8 #define R_X86_64_RELATIVE 8 #define R_AMDGPU_GOTPCREL32_LO 8 #define R_386_GOTOFF 9 #define R_X86_64_GOTPCREL 9 #define R_AMDGPU_GOTPCREL32_HI 9 #define R_386_GOTPC 10 #define R_X86_64_32 10 #define R_AMDGPU_REL32_LO 10 #define R_386_32PLT 11 #define R_X86_64_32S 11 #define R_AMDGPU_REL32_HI 11 #define R_X86_64_16 12 #define R_X86_64_PC16 13 #define R_AMDGPU_RELATIVE64 13 #define R_386_TLS_TPOFF 14 #define R_X86_64_8 14 #define R_386_TLS_IE 15 #define R_X86_64_PC8 15 #define R_386_TLS_GOTIE 16 #define R_X86_64_DTPMOD64 16 #define R_386_TLS_LE 17 #define R_X86_64_DTPOFF64 17 #define R_386_TLS_GD 18 #define R_X86_64_TPOFF64 18 #define R_386_TLS_LDM 19 #define R_X86_64_TLSGD 19 #define R_386_16 20 #define R_X86_64_TLSLD 20 #define R_386_PC16 21 #define R_X86_64_DTPOFF32 21 #define R_386_8 22 #define R_X86_64_GOTTPOFF 22 #define R_386_PC8 23 #define R_X86_64_TPOFF32 23 #define R_386_TLS_GD_32 24 #define R_X86_64_PC64 24 #define R_386_TLS_GD_PUSH 25 #define R_X86_64_GOTOFF64 25 #define R_386_TLS_GD_CALL 26 #define R_X86_64_GOTPC32 26 #define R_386_TLS_GD_POP 27 #define R_X86_64_GOT64 27 #define R_386_TLS_LDM_32 28 #define R_X86_64_GOTPCREL64 28 #define R_386_TLS_LDM_PUSH 29 #define R_X86_64_GOTPC64 29 #define R_386_TLS_LDM_CALL 30 #define R_X86_64_GOTPLT64 30 #define R_386_TLS_LDM_POP 31 #define R_X86_64_PLTOFF64 31 #define R_386_TLS_LDO_32 32 #define R_386_TLS_IE_32 33 #define R_386_TLS_LE_32 34 #define R_X86_64_GOTPC32_TLSDESC 34 #define R_386_TLS_DTPMOD32 35 #define R_X86_64_TLSDESC_CALL 35 #define R_386_TLS_DTPOFF32 36 #define R_X86_64_TLSDESC 36 #define R_386_TLS_TPOFF32 37 #define R_X86_64_IRELATIVE 37 #define R_386_SIZE32 38 #define R_386_TLS_GOTDESC 39 #define R_386_TLS_DESC_CALL 40 #define R_386_TLS_DESC 41 #define R_386_IRELATIVE 42 #define R_386_GOT32X 43 #define R_X86_64_GNU_VTINHERIT 250 #define R_X86_64_GNU_VTENTRY 251 // Segment types #define PT_NULL 0 #define PT_LOAD 1 #define PT_DYNAMIC 2 #define PT_INTERP 3 #define PT_NOTE 4 #define PT_SHLIB 5 #define PT_PHDR 6 #define PT_TLS 7 #define PT_LOOS 0x60000000 #define PT_HIOS 0x6fffffff #define PT_LOPROC 0x70000000 #define PT_HIPROC 0x7FFFFFFF // Segment flags #define PF_X 1 // Execute #define PF_W 2 // Write #define PF_R 4 // Read #define PF_MASKOS 0x0ff00000 // Unspecified #define PF_MASKPROC 0xf0000000 // Unspecified // Dynamic Array Tags #define DT_NULL 0 #define DT_NEEDED 1 #define DT_PLTRELSZ 2 #define DT_PLTGOT 3 #define DT_HASH 4 #define DT_STRTAB 5 #define DT_SYMTAB 6 #define DT_RELA 7 #define DT_RELASZ 8 #define DT_RELAENT 9 #define DT_STRSZ 10 #define DT_SYMENT 11 #define DT_INIT 12 #define DT_FINI 13 #define DT_SONAME 14 #define DT_RPATH 15 #define DT_SYMBOLIC 16 #define DT_REL 17 #define DT_RELSZ 18 #define DT_RELENT 19 #define DT_PLTREL 20 #define DT_DEBUG 21 #define DT_TEXTREL 22 #define DT_JMPREL 23 #define DT_BIND_NOW 24 #define DT_INIT_ARRAY 25 #define DT_FINI_ARRAY 26 #define DT_INIT_ARRAYSZ 27 #define DT_FINI_ARRAYSZ 28 #define DT_RUNPATH 29 #define DT_FLAGS 30 #define DT_ENCODING 32 #define DT_PREINIT_ARRAY 32 #define DT_PREINIT_ARRAYSZ 33 #define DT_MAXPOSTAGS 34 #define DT_LOOS 0x6000000D #define DT_HIOS 0x6ffff000 #define DT_LOPROC 0x70000000 #define DT_HIPROC 0x7FFFFFFF // DT_FLAGS values #define DF_ORIGIN 0x1 #define DF_SYMBOLIC 0x2 #define DF_TEXTREL 0x4 #define DF_BIND_NOW 0x8 #define DF_STATIC_TLS 0x10 // ELF file header struct Elf32_Ehdr { unsigned char e_ident[EI_NIDENT]; Elf_Half e_type; Elf_Half e_machine; Elf_Word e_version; Elf32_Addr e_entry; Elf32_Off e_phoff; Elf32_Off e_shoff; Elf_Word e_flags; Elf_Half e_ehsize; Elf_Half e_phentsize; Elf_Half e_phnum; Elf_Half e_shentsize; Elf_Half e_shnum; Elf_Half e_shstrndx; }; struct Elf64_Ehdr { unsigned char e_ident[EI_NIDENT]; Elf_Half e_type; Elf_Half e_machine; Elf_Word e_version; Elf64_Addr e_entry; Elf64_Off e_phoff; Elf64_Off e_shoff; Elf_Word e_flags; Elf_Half e_ehsize; Elf_Half e_phentsize; Elf_Half e_phnum; Elf_Half e_shentsize; Elf_Half e_shnum; Elf_Half e_shstrndx; }; // Section header struct Elf32_Shdr { Elf_Word sh_name; Elf_Word sh_type; Elf_Word sh_flags; Elf32_Addr sh_addr; Elf32_Off sh_offset; Elf_Word sh_size; Elf_Word sh_link; Elf_Word sh_info; Elf_Word sh_addralign; Elf_Word sh_entsize; }; struct Elf64_Shdr { Elf_Word sh_name; Elf_Word sh_type; Elf_Xword sh_flags; Elf64_Addr sh_addr; Elf64_Off sh_offset; Elf_Xword sh_size; Elf_Word sh_link; Elf_Word sh_info; Elf_Xword sh_addralign; Elf_Xword sh_entsize; }; // Segment header struct Elf32_Phdr { Elf_Word p_type; Elf32_Off p_offset; Elf32_Addr p_vaddr; Elf32_Addr p_paddr; Elf_Word p_filesz; Elf_Word p_memsz; Elf_Word p_flags; Elf_Word p_align; }; struct Elf64_Phdr { Elf_Word p_type; Elf_Word p_flags; Elf64_Off p_offset; Elf64_Addr p_vaddr; Elf64_Addr p_paddr; Elf_Xword p_filesz; Elf_Xword p_memsz; Elf_Xword p_align; }; // Symbol table entry struct Elf32_Sym { Elf_Word st_name; Elf32_Addr st_value; Elf_Word st_size; unsigned char st_info; unsigned char st_other; Elf_Half st_shndx; }; struct Elf64_Sym { Elf_Word st_name; unsigned char st_info; unsigned char st_other; Elf_Half st_shndx; Elf64_Addr st_value; Elf_Xword st_size; }; #define ELF_ST_BIND( i ) ( ( i ) >> 4 ) #define ELF_ST_TYPE( i ) ( (i)&0xf ) #define ELF_ST_INFO( b, t ) ( ( ( b ) << 4 ) + ( (t)&0xf ) ) #define ELF_ST_VISIBILITY( o ) ( (o)&0x3 ) // Relocation entries struct Elf32_Rel { Elf32_Addr r_offset; Elf_Word r_info; }; struct Elf32_Rela { Elf32_Addr r_offset; Elf_Word r_info; Elf_Sword r_addend; }; struct Elf64_Rel { Elf64_Addr r_offset; Elf_Xword r_info; }; struct Elf64_Rela { Elf64_Addr r_offset; Elf_Xword r_info; Elf_Sxword r_addend; }; #define ELF32_R_SYM( i ) ( ( i ) >> 8 ) #define ELF32_R_TYPE( i ) ( (unsigned char)( i ) ) #define ELF32_R_INFO( s, t ) ( ( ( s ) << 8 ) + (unsigned char)( t ) ) #define ELF64_R_SYM( i ) ( ( i ) >> 32 ) #define ELF64_R_TYPE( i ) ( (i)&0xffffffffL ) #define ELF64_R_INFO( s, t ) \ ( ( ( ( int64_t )( s ) ) << 32 ) + ( (t)&0xffffffffL ) ) // Dynamic structure struct Elf32_Dyn { Elf_Sword d_tag; union { Elf_Word d_val; Elf32_Addr d_ptr; } d_un; }; struct Elf64_Dyn { Elf_Sxword d_tag; union { Elf_Xword d_val; Elf64_Addr d_ptr; } d_un; }; } // namespace ELFIO #endif // ELFTYPES_H /*** End of inlined file: elf_types.hpp ***/ /*** Start of inlined file: elfio_version.hpp ***/ #define ELFIO_VERSION "3.8" /*** End of inlined file: elfio_version.hpp ***/ /*** Start of inlined file: elfio_utils.hpp ***/ #ifndef ELFIO_UTILS_HPP #define ELFIO_UTILS_HPP #define ELFIO_GET_ACCESS( TYPE, NAME, FIELD ) \ TYPE get_##NAME() const { return ( *convertor )( FIELD ); } #define ELFIO_SET_ACCESS( TYPE, NAME, FIELD ) \ void set_##NAME( TYPE value ) \ { \ FIELD = value; \ FIELD = ( *convertor )( FIELD ); \ } #define ELFIO_GET_SET_ACCESS( TYPE, NAME, FIELD ) \ TYPE get_##NAME() const { return ( *convertor )( FIELD ); } \ void set_##NAME( TYPE value ) \ { \ FIELD = value; \ FIELD = ( *convertor )( FIELD ); \ } #define ELFIO_GET_ACCESS_DECL( TYPE, NAME ) virtual TYPE get_##NAME() const = 0 #define ELFIO_SET_ACCESS_DECL( TYPE, NAME ) \ virtual void set_##NAME( TYPE value ) = 0 #define ELFIO_GET_SET_ACCESS_DECL( TYPE, NAME ) \ virtual TYPE get_##NAME() const = 0; \ virtual void set_##NAME( TYPE value ) = 0 namespace ELFIO { //------------------------------------------------------------------------------ class endianess_convertor { public: //------------------------------------------------------------------------------ endianess_convertor() { need_conversion = false; } //------------------------------------------------------------------------------ void setup( unsigned char elf_file_encoding ) { need_conversion = ( elf_file_encoding != get_host_encoding() ); } //------------------------------------------------------------------------------ uint64_t operator()( uint64_t value ) const { if ( !need_conversion ) { return value; } value = ( ( value & 0x00000000000000FFull ) << 56 ) | ( ( value & 0x000000000000FF00ull ) << 40 ) | ( ( value & 0x0000000000FF0000ull ) << 24 ) | ( ( value & 0x00000000FF000000ull ) << 8 ) | ( ( value & 0x000000FF00000000ull ) >> 8 ) | ( ( value & 0x0000FF0000000000ull ) >> 24 ) | ( ( value & 0x00FF000000000000ull ) >> 40 ) | ( ( value & 0xFF00000000000000ull ) >> 56 ); return value; } //------------------------------------------------------------------------------ int64_t operator()( int64_t value ) const { if ( !need_conversion ) { return value; } return ( int64_t )( *this )( (uint64_t)value ); } //------------------------------------------------------------------------------ uint32_t operator()( uint32_t value ) const { if ( !need_conversion ) { return value; } value = ( ( value & 0x000000FF ) << 24 ) | ( ( value & 0x0000FF00 ) << 8 ) | ( ( value & 0x00FF0000 ) >> 8 ) | ( ( value & 0xFF000000 ) >> 24 ); return value; } //------------------------------------------------------------------------------ int32_t operator()( int32_t value ) const { if ( !need_conversion ) { return value; } return ( int32_t )( *this )( (uint32_t)value ); } //------------------------------------------------------------------------------ uint16_t operator()( uint16_t value ) const { if ( !need_conversion ) { return value; } value = ( ( value & 0x00FF ) << 8 ) | ( ( value & 0xFF00 ) >> 8 ); return value; } //------------------------------------------------------------------------------ int16_t operator()( int16_t value ) const { if ( !need_conversion ) { return value; } return ( int16_t )( *this )( (uint16_t)value ); } //------------------------------------------------------------------------------ int8_t operator()( int8_t value ) const { return value; } //------------------------------------------------------------------------------ uint8_t operator()( uint8_t value ) const { return value; } //------------------------------------------------------------------------------ private: //------------------------------------------------------------------------------ unsigned char get_host_encoding() const { static const int tmp = 1; if ( 1 == *(const char*)&tmp ) { return ELFDATA2LSB; } else { return ELFDATA2MSB; } } //------------------------------------------------------------------------------ private: bool need_conversion; }; //------------------------------------------------------------------------------ inline uint32_t elf_hash( const unsigned char* name ) { uint32_t h = 0, g; while ( *name ) { h = ( h << 4 ) + *name++; g = h & 0xf0000000; if ( g != 0 ) h ^= g >> 24; h &= ~g; } return h; } } // namespace ELFIO #endif // ELFIO_UTILS_HPP /*** End of inlined file: elfio_utils.hpp ***/ /*** Start of inlined file: elfio_header.hpp ***/ #ifndef ELF_HEADER_HPP #define ELF_HEADER_HPP #include namespace ELFIO { class elf_header { public: virtual ~elf_header(){}; virtual bool load( std::istream& stream ) = 0; virtual bool save( std::ostream& stream ) const = 0; // ELF header functions ELFIO_GET_ACCESS_DECL( unsigned char, class ); ELFIO_GET_ACCESS_DECL( unsigned char, elf_version ); ELFIO_GET_ACCESS_DECL( unsigned char, encoding ); ELFIO_GET_ACCESS_DECL( Elf_Half, header_size ); ELFIO_GET_ACCESS_DECL( Elf_Half, section_entry_size ); ELFIO_GET_ACCESS_DECL( Elf_Half, segment_entry_size ); ELFIO_GET_SET_ACCESS_DECL( Elf_Word, version ); ELFIO_GET_SET_ACCESS_DECL( unsigned char, os_abi ); ELFIO_GET_SET_ACCESS_DECL( unsigned char, abi_version ); ELFIO_GET_SET_ACCESS_DECL( Elf_Half, type ); ELFIO_GET_SET_ACCESS_DECL( Elf_Half, machine ); ELFIO_GET_SET_ACCESS_DECL( Elf_Word, flags ); ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, entry ); ELFIO_GET_SET_ACCESS_DECL( Elf_Half, sections_num ); ELFIO_GET_SET_ACCESS_DECL( Elf64_Off, sections_offset ); ELFIO_GET_SET_ACCESS_DECL( Elf_Half, segments_num ); ELFIO_GET_SET_ACCESS_DECL( Elf64_Off, segments_offset ); ELFIO_GET_SET_ACCESS_DECL( Elf_Half, section_name_str_index ); }; template struct elf_header_impl_types; template <> struct elf_header_impl_types { typedef Elf32_Phdr Phdr_type; typedef Elf32_Shdr Shdr_type; static const unsigned char file_class = ELFCLASS32; }; template <> struct elf_header_impl_types { typedef Elf64_Phdr Phdr_type; typedef Elf64_Shdr Shdr_type; static const unsigned char file_class = ELFCLASS64; }; template class elf_header_impl : public elf_header { public: //------------------------------------------------------------------------------ elf_header_impl( endianess_convertor* convertor_, unsigned char encoding ) { convertor = convertor_; std::fill_n( reinterpret_cast( &header ), sizeof( header ), '\0' ); header.e_ident[EI_MAG0] = ELFMAG0; header.e_ident[EI_MAG1] = ELFMAG1; header.e_ident[EI_MAG2] = ELFMAG2; header.e_ident[EI_MAG3] = ELFMAG3; header.e_ident[EI_CLASS] = elf_header_impl_types::file_class; header.e_ident[EI_DATA] = encoding; header.e_ident[EI_VERSION] = EV_CURRENT; header.e_version = ( *convertor )( (Elf_Word)EV_CURRENT ); header.e_ehsize = ( sizeof( header ) ); header.e_ehsize = ( *convertor )( header.e_ehsize ); header.e_shstrndx = ( *convertor )( (Elf_Half)1 ); header.e_phentsize = sizeof( typename elf_header_impl_types::Phdr_type ); header.e_shentsize = sizeof( typename elf_header_impl_types::Shdr_type ); header.e_phentsize = ( *convertor )( header.e_phentsize ); header.e_shentsize = ( *convertor )( header.e_shentsize ); } //------------------------------------------------------------------------------ bool load( std::istream& stream ) { stream.seekg( 0 ); stream.read( reinterpret_cast( &header ), sizeof( header ) ); return ( stream.gcount() == sizeof( header ) ); } //------------------------------------------------------------------------------ bool save( std::ostream& stream ) const { stream.seekp( 0 ); stream.write( reinterpret_cast( &header ), sizeof( header ) ); return stream.good(); } //------------------------------------------------------------------------------ // ELF header functions ELFIO_GET_ACCESS( unsigned char, class, header.e_ident[EI_CLASS] ); ELFIO_GET_ACCESS( unsigned char, elf_version, header.e_ident[EI_VERSION] ); ELFIO_GET_ACCESS( unsigned char, encoding, header.e_ident[EI_DATA] ); ELFIO_GET_ACCESS( Elf_Half, header_size, header.e_ehsize ); ELFIO_GET_ACCESS( Elf_Half, section_entry_size, header.e_shentsize ); ELFIO_GET_ACCESS( Elf_Half, segment_entry_size, header.e_phentsize ); ELFIO_GET_SET_ACCESS( Elf_Word, version, header.e_version ); ELFIO_GET_SET_ACCESS( unsigned char, os_abi, header.e_ident[EI_OSABI] ); ELFIO_GET_SET_ACCESS( unsigned char, abi_version, header.e_ident[EI_ABIVERSION] ); ELFIO_GET_SET_ACCESS( Elf_Half, type, header.e_type ); ELFIO_GET_SET_ACCESS( Elf_Half, machine, header.e_machine ); ELFIO_GET_SET_ACCESS( Elf_Word, flags, header.e_flags ); ELFIO_GET_SET_ACCESS( Elf_Half, section_name_str_index, header.e_shstrndx ); ELFIO_GET_SET_ACCESS( Elf64_Addr, entry, header.e_entry ); ELFIO_GET_SET_ACCESS( Elf_Half, sections_num, header.e_shnum ); ELFIO_GET_SET_ACCESS( Elf64_Off, sections_offset, header.e_shoff ); ELFIO_GET_SET_ACCESS( Elf_Half, segments_num, header.e_phnum ); ELFIO_GET_SET_ACCESS( Elf64_Off, segments_offset, header.e_phoff ); private: T header; endianess_convertor* convertor; }; } // namespace ELFIO #endif // ELF_HEADER_HPP /*** End of inlined file: elfio_header.hpp ***/ /*** Start of inlined file: elfio_section.hpp ***/ #ifndef ELFIO_SECTION_HPP #define ELFIO_SECTION_HPP #include #include #include namespace ELFIO { class section { friend class elfio; public: virtual ~section(){}; ELFIO_GET_ACCESS_DECL( Elf_Half, index ); ELFIO_GET_SET_ACCESS_DECL( std::string, name ); ELFIO_GET_SET_ACCESS_DECL( Elf_Word, type ); ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, flags ); ELFIO_GET_SET_ACCESS_DECL( Elf_Word, info ); ELFIO_GET_SET_ACCESS_DECL( Elf_Word, link ); ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, addr_align ); ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, entry_size ); ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, address ); ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, size ); ELFIO_GET_SET_ACCESS_DECL( Elf_Word, name_string_offset ); ELFIO_GET_ACCESS_DECL( Elf64_Off, offset ); virtual const char* get_data() const = 0; virtual void set_data( const char* pData, Elf_Word size ) = 0; virtual void set_data( const std::string& data ) = 0; virtual void append_data( const char* pData, Elf_Word size ) = 0; virtual void append_data( const std::string& data ) = 0; virtual size_t get_stream_size() const = 0; virtual void set_stream_size( size_t value ) = 0; protected: ELFIO_SET_ACCESS_DECL( Elf64_Off, offset ); ELFIO_SET_ACCESS_DECL( Elf_Half, index ); virtual void load( std::istream& stream, std::streampos header_offset ) = 0; virtual void save( std::ostream& stream, std::streampos header_offset, std::streampos data_offset ) = 0; virtual bool is_address_initialized() const = 0; }; template class section_impl : public section { public: //------------------------------------------------------------------------------ section_impl( const endianess_convertor* convertor_ ) : convertor( convertor_ ) { std::fill_n( reinterpret_cast( &header ), sizeof( header ), '\0' ); is_address_set = false; data = 0; data_size = 0; index = 0; stream_size = 0; } //------------------------------------------------------------------------------ ~section_impl() { delete[] data; } //------------------------------------------------------------------------------ // Section info functions ELFIO_GET_SET_ACCESS( Elf_Word, type, header.sh_type ); ELFIO_GET_SET_ACCESS( Elf_Xword, flags, header.sh_flags ); ELFIO_GET_SET_ACCESS( Elf_Xword, size, header.sh_size ); ELFIO_GET_SET_ACCESS( Elf_Word, link, header.sh_link ); ELFIO_GET_SET_ACCESS( Elf_Word, info, header.sh_info ); ELFIO_GET_SET_ACCESS( Elf_Xword, addr_align, header.sh_addralign ); ELFIO_GET_SET_ACCESS( Elf_Xword, entry_size, header.sh_entsize ); ELFIO_GET_SET_ACCESS( Elf_Word, name_string_offset, header.sh_name ); ELFIO_GET_ACCESS( Elf64_Addr, address, header.sh_addr ); //------------------------------------------------------------------------------ Elf_Half get_index() const { return index; } //------------------------------------------------------------------------------ std::string get_name() const { return name; } //------------------------------------------------------------------------------ void set_name( std::string name_ ) { name = name_; } //------------------------------------------------------------------------------ void set_address( Elf64_Addr value ) { header.sh_addr = value; header.sh_addr = ( *convertor )( header.sh_addr ); is_address_set = true; } //------------------------------------------------------------------------------ bool is_address_initialized() const { return is_address_set; } //------------------------------------------------------------------------------ const char* get_data() const { return data; } //------------------------------------------------------------------------------ void set_data( const char* raw_data, Elf_Word size ) { if ( get_type() != SHT_NOBITS ) { delete[] data; data = new ( std::nothrow ) char[size]; if ( 0 != data && 0 != raw_data ) { data_size = size; std::copy( raw_data, raw_data + size, data ); } else { data_size = 0; } } set_size( data_size ); } //------------------------------------------------------------------------------ void set_data( const std::string& str_data ) { return set_data( str_data.c_str(), (Elf_Word)str_data.size() ); } //------------------------------------------------------------------------------ void append_data( const char* raw_data, Elf_Word size ) { if ( get_type() != SHT_NOBITS ) { if ( get_size() + size < data_size ) { std::copy( raw_data, raw_data + size, data + get_size() ); } else { data_size = 2 * ( data_size + size ); char* new_data = new ( std::nothrow ) char[data_size]; if ( 0 != new_data ) { std::copy( data, data + get_size(), new_data ); std::copy( raw_data, raw_data + size, new_data + get_size() ); delete[] data; data = new_data; } else { size = 0; } } set_size( get_size() + size ); } } //------------------------------------------------------------------------------ void append_data( const std::string& str_data ) { return append_data( str_data.c_str(), (Elf_Word)str_data.size() ); } //------------------------------------------------------------------------------ protected: //------------------------------------------------------------------------------ ELFIO_GET_SET_ACCESS( Elf64_Off, offset, header.sh_offset ); //------------------------------------------------------------------------------ void set_index( Elf_Half value ) { index = value; } //------------------------------------------------------------------------------ void load( std::istream& stream, std::streampos header_offset ) { std::fill_n( reinterpret_cast( &header ), sizeof( header ), '\0' ); stream.seekg( 0, stream.end ); set_stream_size( stream.tellg() ); stream.seekg( header_offset ); stream.read( reinterpret_cast( &header ), sizeof( header ) ); Elf_Xword size = get_size(); if ( 0 == data && SHT_NULL != get_type() && SHT_NOBITS != get_type() && size < get_stream_size() ) { data = new ( std::nothrow ) char[size + 1]; if ( ( 0 != size ) && ( 0 != data ) ) { stream.seekg( ( *convertor )( header.sh_offset ) ); stream.read( data, size ); data[size] = 0; // Ensure data is ended with 0 to avoid oob read data_size = size; } else { data_size = 0; } } } //------------------------------------------------------------------------------ void save( std::ostream& stream, std::streampos header_offset, std::streampos data_offset ) { if ( 0 != get_index() ) { header.sh_offset = data_offset; header.sh_offset = ( *convertor )( header.sh_offset ); } save_header( stream, header_offset ); if ( get_type() != SHT_NOBITS && get_type() != SHT_NULL && get_size() != 0 && data != 0 ) { save_data( stream, data_offset ); } } //------------------------------------------------------------------------------ private: //------------------------------------------------------------------------------ void save_header( std::ostream& stream, std::streampos header_offset ) const { stream.seekp( header_offset ); stream.write( reinterpret_cast( &header ), sizeof( header ) ); } //------------------------------------------------------------------------------ void save_data( std::ostream& stream, std::streampos data_offset ) const { stream.seekp( data_offset ); stream.write( get_data(), get_size() ); } //------------------------------------------------------------------------------ size_t get_stream_size() const { return stream_size; } //------------------------------------------------------------------------------ void set_stream_size( size_t value ) { stream_size = value; } //------------------------------------------------------------------------------ private: T header; Elf_Half index; std::string name; char* data; Elf_Word data_size; const endianess_convertor* convertor; bool is_address_set; size_t stream_size; }; } // namespace ELFIO #endif // ELFIO_SECTION_HPP /*** End of inlined file: elfio_section.hpp ***/ /*** Start of inlined file: elfio_segment.hpp ***/ #ifndef ELFIO_SEGMENT_HPP #define ELFIO_SEGMENT_HPP #include #include #include namespace ELFIO { class segment { friend class elfio; public: virtual ~segment(){}; ELFIO_GET_ACCESS_DECL( Elf_Half, index ); ELFIO_GET_SET_ACCESS_DECL( Elf_Word, type ); ELFIO_GET_SET_ACCESS_DECL( Elf_Word, flags ); ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, align ); ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, virtual_address ); ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, physical_address ); ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, file_size ); ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, memory_size ); ELFIO_GET_ACCESS_DECL( Elf64_Off, offset ); virtual const char* get_data() const = 0; virtual Elf_Half add_section_index( Elf_Half index, Elf_Xword addr_align ) = 0; virtual Elf_Half get_sections_num() const = 0; virtual Elf_Half get_section_index_at( Elf_Half num ) const = 0; virtual bool is_offset_initialized() const = 0; protected: ELFIO_SET_ACCESS_DECL( Elf64_Off, offset ); ELFIO_SET_ACCESS_DECL( Elf_Half, index ); virtual const std::vector& get_sections() const = 0; virtual void load( std::istream& stream, std::streampos header_offset ) = 0; virtual void save( std::ostream& stream, std::streampos header_offset, std::streampos data_offset ) = 0; }; //------------------------------------------------------------------------------ template class segment_impl : public segment { public: //------------------------------------------------------------------------------ segment_impl( endianess_convertor* convertor_ ) : stream_size( 0 ), index( 0 ), data( 0 ), convertor( convertor_ ) { is_offset_set = false; std::fill_n( reinterpret_cast( &ph ), sizeof( ph ), '\0' ); } //------------------------------------------------------------------------------ virtual ~segment_impl() { delete[] data; } //------------------------------------------------------------------------------ // Section info functions ELFIO_GET_SET_ACCESS( Elf_Word, type, ph.p_type ); ELFIO_GET_SET_ACCESS( Elf_Word, flags, ph.p_flags ); ELFIO_GET_SET_ACCESS( Elf_Xword, align, ph.p_align ); ELFIO_GET_SET_ACCESS( Elf64_Addr, virtual_address, ph.p_vaddr ); ELFIO_GET_SET_ACCESS( Elf64_Addr, physical_address, ph.p_paddr ); ELFIO_GET_SET_ACCESS( Elf_Xword, file_size, ph.p_filesz ); ELFIO_GET_SET_ACCESS( Elf_Xword, memory_size, ph.p_memsz ); ELFIO_GET_ACCESS( Elf64_Off, offset, ph.p_offset ); size_t stream_size; //------------------------------------------------------------------------------ size_t get_stream_size() const { return stream_size; } //------------------------------------------------------------------------------ void set_stream_size( size_t value ) { stream_size = value; } //------------------------------------------------------------------------------ Elf_Half get_index() const { return index; } //------------------------------------------------------------------------------ const char* get_data() const { return data; } //------------------------------------------------------------------------------ Elf_Half add_section_index( Elf_Half sec_index, Elf_Xword addr_align ) { sections.push_back( sec_index ); if ( addr_align > get_align() ) { set_align( addr_align ); } return (Elf_Half)sections.size(); } //------------------------------------------------------------------------------ Elf_Half get_sections_num() const { return (Elf_Half)sections.size(); } //------------------------------------------------------------------------------ Elf_Half get_section_index_at( Elf_Half num ) const { if ( num < sections.size() ) { return sections[num]; } return Elf_Half( -1 ); } //------------------------------------------------------------------------------ protected: //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void set_offset( Elf64_Off value ) { ph.p_offset = value; ph.p_offset = ( *convertor )( ph.p_offset ); is_offset_set = true; } //------------------------------------------------------------------------------ bool is_offset_initialized() const { return is_offset_set; } //------------------------------------------------------------------------------ const std::vector& get_sections() const { return sections; } //------------------------------------------------------------------------------ void set_index( Elf_Half value ) { index = value; } //------------------------------------------------------------------------------ void load( std::istream& stream, std::streampos header_offset ) { stream.seekg( 0, stream.end ); set_stream_size( stream.tellg() ); stream.seekg( header_offset ); stream.read( reinterpret_cast( &ph ), sizeof( ph ) ); is_offset_set = true; if ( PT_NULL != get_type() && 0 != get_file_size() ) { stream.seekg( ( *convertor )( ph.p_offset ) ); Elf_Xword size = get_file_size(); if ( size > get_stream_size() ) { data = 0; } else { data = new (std::nothrow) char[size + 1]; if ( 0 != data ) { stream.read( data, size ); data[size] = 0; } } } } //------------------------------------------------------------------------------ void save( std::ostream& stream, std::streampos header_offset, std::streampos data_offset ) { ph.p_offset = data_offset; ph.p_offset = ( *convertor )( ph.p_offset ); stream.seekp( header_offset ); stream.write( reinterpret_cast( &ph ), sizeof( ph ) ); } //------------------------------------------------------------------------------ private: T ph; Elf_Half index; char* data; std::vector sections; endianess_convertor* convertor; bool is_offset_set; }; } // namespace ELFIO #endif // ELFIO_SEGMENT_HPP /*** End of inlined file: elfio_segment.hpp ***/ /*** Start of inlined file: elfio_strings.hpp ***/ #ifndef ELFIO_STRINGS_HPP #define ELFIO_STRINGS_HPP #include #include #include namespace ELFIO { //------------------------------------------------------------------------------ template class string_section_accessor_template { public: //------------------------------------------------------------------------------ string_section_accessor_template( S* section_ ) : string_section( section_ ) { } //------------------------------------------------------------------------------ const char* get_string( Elf_Word index ) const { if ( string_section ) { if ( index < string_section->get_size() ) { const char* data = string_section->get_data(); if ( 0 != data ) { return data + index; } } } return 0; } //------------------------------------------------------------------------------ Elf_Word add_string( const char* str ) { Elf_Word current_position = 0; if ( string_section ) { // Strings are addeded to the end of the current section data current_position = (Elf_Word)string_section->get_size(); if ( current_position == 0 ) { char empty_string = '\0'; string_section->append_data( &empty_string, 1 ); current_position++; } string_section->append_data( str, (Elf_Word)std::strlen( str ) + 1 ); } return current_position; } //------------------------------------------------------------------------------ Elf_Word add_string( const std::string& str ) { return add_string( str.c_str() ); } //------------------------------------------------------------------------------ private: S* string_section; }; using string_section_accessor = string_section_accessor_template

; using const_string_section_accessor = string_section_accessor_template; } // namespace ELFIO #endif // ELFIO_STRINGS_HPP /*** End of inlined file: elfio_strings.hpp ***/ #define ELFIO_HEADER_ACCESS_GET( TYPE, FNAME ) \ TYPE get_##FNAME() const { return header ? ( header->get_##FNAME() ) : 0; } #define ELFIO_HEADER_ACCESS_GET_SET( TYPE, FNAME ) \ TYPE get_##FNAME() const \ { \ return header ? ( header->get_##FNAME() ) : 0; \ } \ void set_##FNAME( TYPE val ) \ { \ if ( header ) { \ header->set_##FNAME( val ); \ } \ } namespace ELFIO { //------------------------------------------------------------------------------ class elfio { public: //------------------------------------------------------------------------------ elfio() : sections( this ), segments( this ) { header = 0; current_file_pos = 0; create( ELFCLASS32, ELFDATA2LSB ); } //------------------------------------------------------------------------------ ~elfio() { clean(); } //------------------------------------------------------------------------------ void create( unsigned char file_class, unsigned char encoding ) { clean(); convertor.setup( encoding ); header = create_header( file_class, encoding ); create_mandatory_sections(); } //------------------------------------------------------------------------------ bool load( const std::string& file_name ) { std::ifstream stream; stream.open( file_name.c_str(), std::ios::in | std::ios::binary ); if ( !stream ) { return false; } return load( stream ); } //------------------------------------------------------------------------------ bool load( std::istream& stream ) { clean(); unsigned char e_ident[EI_NIDENT]; // Read ELF file signature stream.read( reinterpret_cast( &e_ident ), sizeof( e_ident ) ); // Is it ELF file? if ( stream.gcount() != sizeof( e_ident ) || e_ident[EI_MAG0] != ELFMAG0 || e_ident[EI_MAG1] != ELFMAG1 || e_ident[EI_MAG2] != ELFMAG2 || e_ident[EI_MAG3] != ELFMAG3 ) { return false; } if ( ( e_ident[EI_CLASS] != ELFCLASS64 ) && ( e_ident[EI_CLASS] != ELFCLASS32 ) ) { return false; } convertor.setup( e_ident[EI_DATA] ); header = create_header( e_ident[EI_CLASS], e_ident[EI_DATA] ); if ( 0 == header ) { return false; } if ( !header->load( stream ) ) { return false; } load_sections( stream ); bool is_still_good = load_segments( stream ); return is_still_good; } //------------------------------------------------------------------------------ bool save( const std::string& file_name ) { std::ofstream stream; stream.open( file_name.c_str(), std::ios::out | std::ios::binary ); if ( !stream ) { return false; } return save( stream ); } //------------------------------------------------------------------------------ bool save( std::ostream& stream ) { if ( !stream || !header ) { return false; } bool is_still_good = true; // Define layout specific header fields // The position of the segment table is fixed after the header. // The position of the section table is variable and needs to be fixed // before saving. header->set_segments_num( segments.size() ); header->set_segments_offset( segments.size() ? header->get_header_size() : 0 ); header->set_sections_num( sections.size() ); header->set_sections_offset( 0 ); // Layout the first section right after the segment table current_file_pos = header->get_header_size() + header->get_segment_entry_size() * (Elf_Xword)header->get_segments_num(); calc_segment_alignment(); is_still_good = layout_segments_and_their_sections(); is_still_good = is_still_good && layout_sections_without_segments(); is_still_good = is_still_good && layout_section_table(); is_still_good = is_still_good && save_header( stream ); is_still_good = is_still_good && save_sections( stream ); is_still_good = is_still_good && save_segments( stream ); return is_still_good; } //------------------------------------------------------------------------------ // ELF header access functions ELFIO_HEADER_ACCESS_GET( unsigned char, class ); ELFIO_HEADER_ACCESS_GET( unsigned char, elf_version ); ELFIO_HEADER_ACCESS_GET( unsigned char, encoding ); ELFIO_HEADER_ACCESS_GET( Elf_Word, version ); ELFIO_HEADER_ACCESS_GET( Elf_Half, header_size ); ELFIO_HEADER_ACCESS_GET( Elf_Half, section_entry_size ); ELFIO_HEADER_ACCESS_GET( Elf_Half, segment_entry_size ); ELFIO_HEADER_ACCESS_GET_SET( unsigned char, os_abi ); ELFIO_HEADER_ACCESS_GET_SET( unsigned char, abi_version ); ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, type ); ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, machine ); ELFIO_HEADER_ACCESS_GET_SET( Elf_Word, flags ); ELFIO_HEADER_ACCESS_GET_SET( Elf64_Addr, entry ); ELFIO_HEADER_ACCESS_GET_SET( Elf64_Off, sections_offset ); ELFIO_HEADER_ACCESS_GET_SET( Elf64_Off, segments_offset ); ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, section_name_str_index ); //------------------------------------------------------------------------------ const endianess_convertor& get_convertor() const { return convertor; } //------------------------------------------------------------------------------ Elf_Xword get_default_entry_size( Elf_Word section_type ) const { switch ( section_type ) { case SHT_RELA: if ( header->get_class() == ELFCLASS64 ) { return sizeof( Elf64_Rela ); } else { return sizeof( Elf32_Rela ); } case SHT_REL: if ( header->get_class() == ELFCLASS64 ) { return sizeof( Elf64_Rel ); } else { return sizeof( Elf32_Rel ); } case SHT_SYMTAB: if ( header->get_class() == ELFCLASS64 ) { return sizeof( Elf64_Sym ); } else { return sizeof( Elf32_Sym ); } case SHT_DYNAMIC: if ( header->get_class() == ELFCLASS64 ) { return sizeof( Elf64_Dyn ); } else { return sizeof( Elf32_Dyn ); } default: return 0; } } //------------------------------------------------------------------------------ private: bool is_offset_in_section( Elf64_Off offset, const section* sec ) const { return ( offset >= sec->get_offset() ) && ( offset < ( sec->get_offset() + sec->get_size() ) ); } //------------------------------------------------------------------------------ public: //! returns an empty string if no problems are detected, //! or a string containing an error message if problems are found std::string validate() const { // check for overlapping sections in the file for ( int i = 0; i < sections.size(); ++i ) { for ( int j = i + 1; j < sections.size(); ++j ) { const section* a = sections[i]; const section* b = sections[j]; if ( !( a->get_type() & SHT_NOBITS ) && !( b->get_type() & SHT_NOBITS ) && ( a->get_size() > 0 ) && ( b->get_size() > 0 ) && ( a->get_offset() > 0 ) && ( b->get_offset() > 0 ) ) { if ( is_offset_in_section( a->get_offset(), b ) || is_offset_in_section( a->get_offset() + a->get_size() - 1, b ) || is_offset_in_section( b->get_offset(), a ) || is_offset_in_section( b->get_offset() + b->get_size() - 1, a ) ) { return "Sections " + a->get_name() + " and " + b->get_name() + " overlap in file"; } } } } // more checks to be added here... return ""; } //------------------------------------------------------------------------------ private: //------------------------------------------------------------------------------ void clean() { delete header; header = 0; std::vector::const_iterator it; for ( it = sections_.begin(); it != sections_.end(); ++it ) { delete *it; } sections_.clear(); std::vector::const_iterator it1; for ( it1 = segments_.begin(); it1 != segments_.end(); ++it1 ) { delete *it1; } segments_.clear(); } //------------------------------------------------------------------------------ elf_header* create_header( unsigned char file_class, unsigned char encoding ) { elf_header* new_header = 0; if ( file_class == ELFCLASS64 ) { new_header = new elf_header_impl( &convertor, encoding ); } else if ( file_class == ELFCLASS32 ) { new_header = new elf_header_impl( &convertor, encoding ); } else { return 0; } return new_header; } //------------------------------------------------------------------------------ section* create_section() { section* new_section; unsigned char file_class = get_class(); if ( file_class == ELFCLASS64 ) { new_section = new section_impl( &convertor ); } else if ( file_class == ELFCLASS32 ) { new_section = new section_impl( &convertor ); } else { return 0; } new_section->set_index( (Elf_Half)sections_.size() ); sections_.push_back( new_section ); return new_section; } //------------------------------------------------------------------------------ segment* create_segment() { segment* new_segment; unsigned char file_class = header->get_class(); if ( file_class == ELFCLASS64 ) { new_segment = new segment_impl( &convertor ); } else if ( file_class == ELFCLASS32 ) { new_segment = new segment_impl( &convertor ); } else { return 0; } new_segment->set_index( (Elf_Half)segments_.size() ); segments_.push_back( new_segment ); return new_segment; } //------------------------------------------------------------------------------ void create_mandatory_sections() { // Create null section without calling to 'add_section' as no string // section containing section names exists yet section* sec0 = create_section(); sec0->set_index( 0 ); sec0->set_name( "" ); sec0->set_name_string_offset( 0 ); set_section_name_str_index( 1 ); section* shstrtab = sections.add( ".shstrtab" ); shstrtab->set_type( SHT_STRTAB ); shstrtab->set_addr_align( 1 ); } //------------------------------------------------------------------------------ Elf_Half load_sections( std::istream& stream ) { Elf_Half entry_size = header->get_section_entry_size(); Elf_Half num = header->get_sections_num(); Elf64_Off offset = header->get_sections_offset(); for ( Elf_Half i = 0; i < num; ++i ) { section* sec = create_section(); sec->load( stream, (std::streamoff)offset + (std::streampos)i * entry_size ); sec->set_index( i ); // To mark that the section is not permitted to reassign address // during layout calculation sec->set_address( sec->get_address() ); } Elf_Half shstrndx = get_section_name_str_index(); if ( SHN_UNDEF != shstrndx ) { string_section_accessor str_reader( sections[shstrndx] ); for ( Elf_Half i = 0; i < num; ++i ) { Elf_Word section_offset = sections[i]->get_name_string_offset(); const char* p = str_reader.get_string( section_offset ); if ( p != 0 ) { sections[i]->set_name( p ); } } } return num; } //------------------------------------------------------------------------------ //! Checks whether the addresses of the section entirely fall within the given segment. //! It doesn't matter if the addresses are memory addresses, or file offsets, //! they just need to be in the same address space bool is_sect_in_seg( Elf64_Off sect_begin, Elf_Xword sect_size, Elf64_Off seg_begin, Elf64_Off seg_end ) { return ( seg_begin <= sect_begin ) && ( sect_begin + sect_size <= seg_end ) && ( sect_begin < seg_end ); // this is important criteria when sect_size == 0 // Example: seg_begin=10, seg_end=12 (-> covering the bytes 10 and 11) // sect_begin=12, sect_size=0 -> shall return false! } //------------------------------------------------------------------------------ bool load_segments( std::istream& stream ) { Elf_Half entry_size = header->get_segment_entry_size(); Elf_Half num = header->get_segments_num(); Elf64_Off offset = header->get_segments_offset(); for ( Elf_Half i = 0; i < num; ++i ) { segment* seg; unsigned char file_class = header->get_class(); if ( file_class == ELFCLASS64 ) { seg = new segment_impl( &convertor ); } else if ( file_class == ELFCLASS32 ) { seg = new segment_impl( &convertor ); } else { return false; } seg->load( stream, (std::streamoff)offset + (std::streampos)i * entry_size ); seg->set_index( i ); // Add sections to the segments (similar to readelfs algorithm) Elf64_Off segBaseOffset = seg->get_offset(); Elf64_Off segEndOffset = segBaseOffset + seg->get_file_size(); Elf64_Off segVBaseAddr = seg->get_virtual_address(); Elf64_Off segVEndAddr = segVBaseAddr + seg->get_memory_size(); for ( Elf_Half j = 0; j < sections.size(); ++j ) { const section* psec = sections[j]; // SHF_ALLOC sections are matched based on the virtual address // otherwise the file offset is matched if ( ( psec->get_flags() & SHF_ALLOC ) ? is_sect_in_seg( psec->get_address(), psec->get_size(), segVBaseAddr, segVEndAddr ) : is_sect_in_seg( psec->get_offset(), psec->get_size(), segBaseOffset, segEndOffset ) ) { // Alignment of segment shall not be updated, to preserve original value // It will be re-calculated on saving. seg->add_section_index( psec->get_index(), 0 ); } } // Add section into the segments' container segments_.push_back( seg ); } return true; } //------------------------------------------------------------------------------ bool save_header( std::ostream& stream ) { return header->save( stream ); } //------------------------------------------------------------------------------ bool save_sections( std::ostream& stream ) { for ( unsigned int i = 0; i < sections_.size(); ++i ) { section* sec = sections_.at( i ); std::streampos headerPosition = (std::streamoff)header->get_sections_offset() + (std::streampos)header->get_section_entry_size() * sec->get_index(); sec->save( stream, headerPosition, sec->get_offset() ); } return true; } //------------------------------------------------------------------------------ bool save_segments( std::ostream& stream ) { for ( unsigned int i = 0; i < segments_.size(); ++i ) { segment* seg = segments_.at( i ); std::streampos headerPosition = header->get_segments_offset() + (std::streampos)header->get_segment_entry_size() * seg->get_index(); seg->save( stream, headerPosition, seg->get_offset() ); } return true; } //------------------------------------------------------------------------------ bool is_section_without_segment( unsigned int section_index ) { bool found = false; for ( unsigned int j = 0; !found && ( j < segments.size() ); ++j ) { for ( unsigned int k = 0; !found && ( k < segments[j]->get_sections_num() ); ++k ) { found = segments[j]->get_section_index_at( k ) == section_index; } } return !found; } //------------------------------------------------------------------------------ bool is_subsequence_of( segment* seg1, segment* seg2 ) { // Return 'true' if sections of seg1 are a subset of sections in seg2 const std::vector& sections1 = seg1->get_sections(); const std::vector& sections2 = seg2->get_sections(); bool found = false; if ( sections1.size() < sections2.size() ) { found = std::includes( sections2.begin(), sections2.end(), sections1.begin(), sections1.end() ); } return found; } //------------------------------------------------------------------------------ std::vector get_ordered_segments() { std::vector res; std::deque worklist; res.reserve( segments.size() ); std::copy( segments_.begin(), segments_.end(), std::back_inserter( worklist ) ); // Bring the segments which start at address 0 to the front size_t nextSlot = 0; for ( size_t i = 0; i < worklist.size(); ++i ) { if ( i != nextSlot && worklist[i]->is_offset_initialized() && worklist[i]->get_offset() == 0 ) { if ( worklist[nextSlot]->get_offset() == 0 ) { ++nextSlot; } std::swap( worklist[i], worklist[nextSlot] ); ++nextSlot; } } while ( !worklist.empty() ) { segment* seg = worklist.front(); worklist.pop_front(); size_t i = 0; for ( ; i < worklist.size(); ++i ) { if ( is_subsequence_of( seg, worklist[i] ) ) { break; } } if ( i < worklist.size() ) worklist.push_back( seg ); else res.push_back( seg ); } return res; } //------------------------------------------------------------------------------ bool layout_sections_without_segments() { for ( unsigned int i = 0; i < sections_.size(); ++i ) { if ( is_section_without_segment( i ) ) { section* sec = sections_[i]; Elf_Xword section_align = sec->get_addr_align(); if ( section_align > 1 && current_file_pos % section_align != 0 ) { current_file_pos += section_align - current_file_pos % section_align; } if ( 0 != sec->get_index() ) sec->set_offset( current_file_pos ); if ( SHT_NOBITS != sec->get_type() && SHT_NULL != sec->get_type() ) { current_file_pos += sec->get_size(); } } } return true; } //------------------------------------------------------------------------------ void calc_segment_alignment() { for ( std::vector::iterator s = segments_.begin(); s != segments_.end(); ++s ) { segment* seg = *s; for ( int i = 0; i < seg->get_sections_num(); ++i ) { section* sect = sections_[seg->get_section_index_at( i )]; if ( sect->get_addr_align() > seg->get_align() ) { seg->set_align( sect->get_addr_align() ); } } } } //------------------------------------------------------------------------------ bool layout_segments_and_their_sections() { std::vector worklist; std::vector section_generated( sections.size(), false ); // Get segments in a order in where segments which contain a // sub sequence of other segments are located at the end worklist = get_ordered_segments(); for ( unsigned int i = 0; i < worklist.size(); ++i ) { Elf_Xword segment_memory = 0; Elf_Xword segment_filesize = 0; Elf_Xword seg_start_pos = current_file_pos; segment* seg = worklist[i]; // Special case: PHDR segment // This segment contains the program headers but no sections if ( seg->get_type() == PT_PHDR && seg->get_sections_num() == 0 ) { seg_start_pos = header->get_segments_offset(); segment_memory = segment_filesize = header->get_segment_entry_size() * (Elf_Xword)header->get_segments_num(); } // Special case: else if ( seg->is_offset_initialized() && seg->get_offset() == 0 ) { seg_start_pos = 0; if ( seg->get_sections_num() ) { segment_memory = segment_filesize = current_file_pos; } } // New segments with not generated sections // have to be aligned else if ( seg->get_sections_num() && !section_generated[seg->get_section_index_at( 0 )] ) { Elf_Xword align = seg->get_align() > 0 ? seg->get_align() : 1; Elf64_Off cur_page_alignment = current_file_pos % align; Elf64_Off req_page_alignment = seg->get_virtual_address() % align; Elf64_Off error = req_page_alignment - cur_page_alignment; current_file_pos += ( seg->get_align() + error ) % align; seg_start_pos = current_file_pos; } else if ( seg->get_sections_num() ) { seg_start_pos = sections[seg->get_section_index_at( 0 )]->get_offset(); } // Write segment's data for ( unsigned int j = 0; j < seg->get_sections_num(); ++j ) { Elf_Half index = seg->get_section_index_at( j ); section* sec = sections[index]; // The NULL section is always generated if ( SHT_NULL == sec->get_type() ) { section_generated[index] = true; continue; } Elf_Xword secAlign = 0; // Fix up the alignment if ( !section_generated[index] && sec->is_address_initialized() && SHT_NOBITS != sec->get_type() && SHT_NULL != sec->get_type() && 0 != sec->get_size() ) { // Align the sections based on the virtual addresses // when possible (this is what matters for execution) Elf64_Off req_offset = sec->get_address() - seg->get_virtual_address(); Elf64_Off cur_offset = current_file_pos - seg_start_pos; if ( req_offset < cur_offset ) { // something has gone awfully wrong, abort! // secAlign would turn out negative, seeking backwards and overwriting previous data return false; } secAlign = req_offset - cur_offset; } else if ( !section_generated[index] && !sec->is_address_initialized() ) { // If no address has been specified then only the section // alignment constraint has to be matched Elf_Xword align = sec->get_addr_align(); if ( align == 0 ) { align = 1; } Elf64_Off error = current_file_pos % align; secAlign = ( align - error ) % align; } else if ( section_generated[index] ) { // Alignment for already generated sections secAlign = sec->get_offset() - seg_start_pos - segment_filesize; } // Determine the segment file and memory sizes // Special case .tbss section (NOBITS) in non TLS segment if ( ( sec->get_flags() & SHF_ALLOC ) && !( ( sec->get_flags() & SHF_TLS ) && ( seg->get_type() != PT_TLS ) && ( SHT_NOBITS == sec->get_type() ) ) ) segment_memory += sec->get_size() + secAlign; if ( SHT_NOBITS != sec->get_type() ) segment_filesize += sec->get_size() + secAlign; // Nothing to be done when generating nested segments if ( section_generated[index] ) { continue; } current_file_pos += secAlign; // Set the section addresses when missing if ( !sec->is_address_initialized() ) sec->set_address( seg->get_virtual_address() + current_file_pos - seg_start_pos ); if ( 0 != sec->get_index() ) sec->set_offset( current_file_pos ); if ( SHT_NOBITS != sec->get_type() ) current_file_pos += sec->get_size(); section_generated[index] = true; } seg->set_file_size( segment_filesize ); // If we already have a memory size from loading an elf file (value > 0), // it must not shrink! // Memory size may be bigger than file size and it is the loader's job to do something // with the surplus bytes in memory, like initializing them with a defined value. if ( seg->get_memory_size() < segment_memory ) { seg->set_memory_size( segment_memory ); } seg->set_offset( seg_start_pos ); } return true; } //------------------------------------------------------------------------------ bool layout_section_table() { // Simply place the section table at the end for now Elf64_Off alignmentError = current_file_pos % 4; current_file_pos += ( 4 - alignmentError ) % 4; header->set_sections_offset( current_file_pos ); return true; } //------------------------------------------------------------------------------ public: friend class Sections; class Sections { public: //------------------------------------------------------------------------------ Sections( elfio* parent_ ) : parent( parent_ ) {} //------------------------------------------------------------------------------ Elf_Half size() const { return (Elf_Half)parent->sections_.size(); } //------------------------------------------------------------------------------ section* operator[]( unsigned int index ) const { section* sec = 0; if ( index < parent->sections_.size() ) { sec = parent->sections_[index]; } return sec; } //------------------------------------------------------------------------------ section* operator[]( const std::string& name ) const { section* sec = 0; std::vector::const_iterator it; for ( it = parent->sections_.begin(); it != parent->sections_.end(); ++it ) { if ( ( *it )->get_name() == name ) { sec = *it; break; } } return sec; } //------------------------------------------------------------------------------ section* add( const std::string& name ) { section* new_section = parent->create_section(); new_section->set_name( name ); Elf_Half str_index = parent->get_section_name_str_index(); section* string_table( parent->sections_[str_index] ); string_section_accessor str_writer( string_table ); Elf_Word pos = str_writer.add_string( name ); new_section->set_name_string_offset( pos ); return new_section; } //------------------------------------------------------------------------------ std::vector::iterator begin() { return parent->sections_.begin(); } //------------------------------------------------------------------------------ std::vector::iterator end() { return parent->sections_.end(); } //------------------------------------------------------------------------------ std::vector::const_iterator begin() const { return parent->sections_.cbegin(); } //------------------------------------------------------------------------------ std::vector::const_iterator end() const { return parent->sections_.cend(); } //------------------------------------------------------------------------------ private: elfio* parent; } sections; //------------------------------------------------------------------------------ public: friend class Segments; class Segments { public: //------------------------------------------------------------------------------ Segments( elfio* parent_ ) : parent( parent_ ) {} //------------------------------------------------------------------------------ Elf_Half size() const { return (Elf_Half)parent->segments_.size(); } //------------------------------------------------------------------------------ segment* operator[]( unsigned int index ) const { return parent->segments_[index]; } //------------------------------------------------------------------------------ segment* add() { return parent->create_segment(); } //------------------------------------------------------------------------------ std::vector::iterator begin() { return parent->segments_.begin(); } //------------------------------------------------------------------------------ std::vector::iterator end() { return parent->segments_.end(); } //------------------------------------------------------------------------------ std::vector::const_iterator begin() const { return parent->segments_.cbegin(); } //------------------------------------------------------------------------------ std::vector::const_iterator end() const { return parent->segments_.cend(); } //------------------------------------------------------------------------------ private: elfio* parent; } segments; //------------------------------------------------------------------------------ private: elf_header* header; std::vector sections_; std::vector segments_; endianess_convertor convertor; Elf_Xword current_file_pos; }; } // namespace ELFIO /*** Start of inlined file: elfio_symbols.hpp ***/ #ifndef ELFIO_SYMBOLS_HPP #define ELFIO_SYMBOLS_HPP namespace ELFIO { //------------------------------------------------------------------------------ template class symbol_section_accessor_template { public: //------------------------------------------------------------------------------ symbol_section_accessor_template( const elfio& elf_file_, S* symbol_section_ ) : elf_file( elf_file_ ), symbol_section( symbol_section_ ) { find_hash_section(); } //------------------------------------------------------------------------------ Elf_Xword get_symbols_num() const { Elf_Xword nRet = 0; if ( 0 != symbol_section->get_entry_size() ) { nRet = symbol_section->get_size() / symbol_section->get_entry_size(); } return nRet; } //------------------------------------------------------------------------------ bool get_symbol( Elf_Xword index, std::string& name, Elf64_Addr& value, Elf_Xword& size, unsigned char& bind, unsigned char& type, Elf_Half& section_index, unsigned char& other ) const { bool ret = false; if ( elf_file.get_class() == ELFCLASS32 ) { ret = generic_get_symbol( index, name, value, size, bind, type, section_index, other ); } else { ret = generic_get_symbol( index, name, value, size, bind, type, section_index, other ); } return ret; } //------------------------------------------------------------------------------ bool get_symbol( const std::string& name, Elf64_Addr& value, Elf_Xword& size, unsigned char& bind, unsigned char& type, Elf_Half& section_index, unsigned char& other ) const { bool ret = false; if ( 0 != get_hash_table_index() ) { Elf_Word nbucket = *(const Elf_Word*)hash_section->get_data(); Elf_Word nchain = *(const Elf_Word*)( hash_section->get_data() + sizeof( Elf_Word ) ); Elf_Word val = elf_hash( (const unsigned char*)name.c_str() ); Elf_Word y = *(const Elf_Word*)( hash_section->get_data() + ( 2 + val % nbucket ) * sizeof( Elf_Word ) ); std::string str; get_symbol( y, str, value, size, bind, type, section_index, other ); while ( str != name && STN_UNDEF != y && y < nchain ) { y = *(const Elf_Word*)( hash_section->get_data() + ( 2 + nbucket + y ) * sizeof( Elf_Word ) ); get_symbol( y, str, value, size, bind, type, section_index, other ); } if ( str == name ) { ret = true; } } else { for ( Elf_Xword i = 0; i < get_symbols_num() && !ret; i++ ) { std::string symbol_name; if ( get_symbol( i, symbol_name, value, size, bind, type, section_index, other ) ) { if ( symbol_name == name ) { ret = true; } } } } return ret; } //------------------------------------------------------------------------------ bool get_symbol( const Elf64_Addr& value, std::string& name, Elf_Xword& size, unsigned char& bind, unsigned char& type, Elf_Half& section_index, unsigned char& other ) const { const endianess_convertor& convertor = elf_file.get_convertor(); Elf_Xword idx = 0; bool match = false; Elf64_Addr v = 0; if ( elf_file.get_class() == ELFCLASS32 ) { match = generic_search_symbols( [&]( const Elf32_Sym* sym ) { return convertor( sym->st_value ) == value; }, idx ); } else { match = generic_search_symbols( [&]( const Elf64_Sym* sym ) { return convertor( sym->st_value ) == value; }, idx ); } if ( match ) { return get_symbol( idx, name, v, size, bind, type, section_index, other ); } return false; } //------------------------------------------------------------------------------ Elf_Word add_symbol( Elf_Word name, Elf64_Addr value, Elf_Xword size, unsigned char info, unsigned char other, Elf_Half shndx ) { Elf_Word nRet; if ( symbol_section->get_size() == 0 ) { if ( elf_file.get_class() == ELFCLASS32 ) { nRet = generic_add_symbol( 0, 0, 0, 0, 0, 0 ); } else { nRet = generic_add_symbol( 0, 0, 0, 0, 0, 0 ); } } if ( elf_file.get_class() == ELFCLASS32 ) { nRet = generic_add_symbol( name, value, size, info, other, shndx ); } else { nRet = generic_add_symbol( name, value, size, info, other, shndx ); } return nRet; } //------------------------------------------------------------------------------ Elf_Word add_symbol( Elf_Word name, Elf64_Addr value, Elf_Xword size, unsigned char bind, unsigned char type, unsigned char other, Elf_Half shndx ) { return add_symbol( name, value, size, ELF_ST_INFO( bind, type ), other, shndx ); } //------------------------------------------------------------------------------ Elf_Word add_symbol( string_section_accessor& pStrWriter, const char* str, Elf64_Addr value, Elf_Xword size, unsigned char info, unsigned char other, Elf_Half shndx ) { Elf_Word index = pStrWriter.add_string( str ); return add_symbol( index, value, size, info, other, shndx ); } //------------------------------------------------------------------------------ Elf_Word add_symbol( string_section_accessor& pStrWriter, const char* str, Elf64_Addr value, Elf_Xword size, unsigned char bind, unsigned char type, unsigned char other, Elf_Half shndx ) { return add_symbol( pStrWriter, str, value, size, ELF_ST_INFO( bind, type ), other, shndx ); } //------------------------------------------------------------------------------ Elf_Xword arrange_local_symbols( std::function func = nullptr ) { int nRet = 0; if ( elf_file.get_class() == ELFCLASS32 ) { nRet = generic_arrange_local_symbols( func ); } else { nRet = generic_arrange_local_symbols( func ); } return nRet; } //------------------------------------------------------------------------------ private: //------------------------------------------------------------------------------ void find_hash_section() { hash_section = 0; hash_section_index = 0; Elf_Half nSecNo = elf_file.sections.size(); for ( Elf_Half i = 0; i < nSecNo && 0 == hash_section_index; ++i ) { const section* sec = elf_file.sections[i]; if ( sec->get_link() == symbol_section->get_index() ) { hash_section = sec; hash_section_index = i; } } } //------------------------------------------------------------------------------ Elf_Half get_string_table_index() const { return (Elf_Half)symbol_section->get_link(); } //------------------------------------------------------------------------------ Elf_Half get_hash_table_index() const { return hash_section_index; } //------------------------------------------------------------------------------ template const T* generic_get_symbol_ptr( Elf_Xword index ) const { if ( 0 != symbol_section->get_data() && index < get_symbols_num() ) { const T* pSym = reinterpret_cast( symbol_section->get_data() + index * symbol_section->get_entry_size() ); return pSym; } return nullptr; } //------------------------------------------------------------------------------ template bool generic_search_symbols( std::function match, Elf_Xword& idx ) const { for ( Elf_Xword i = 0; i < get_symbols_num(); i++ ) { const T* symPtr = generic_get_symbol_ptr( i ); if ( symPtr == nullptr ) return false; if ( match( symPtr ) ) { idx = i; return true; } } return false; } //------------------------------------------------------------------------------ template bool generic_get_symbol( Elf_Xword index, std::string& name, Elf64_Addr& value, Elf_Xword& size, unsigned char& bind, unsigned char& type, Elf_Half& section_index, unsigned char& other ) const { bool ret = false; if ( 0 != symbol_section->get_data() && index < get_symbols_num() ) { const T* pSym = reinterpret_cast( symbol_section->get_data() + index * symbol_section->get_entry_size() ); const endianess_convertor& convertor = elf_file.get_convertor(); section* string_section = elf_file.sections[get_string_table_index()]; string_section_accessor str_reader( string_section ); const char* pStr = str_reader.get_string( convertor( pSym->st_name ) ); if ( 0 != pStr ) { name = pStr; } value = convertor( pSym->st_value ); size = convertor( pSym->st_size ); bind = ELF_ST_BIND( pSym->st_info ); type = ELF_ST_TYPE( pSym->st_info ); section_index = convertor( pSym->st_shndx ); other = pSym->st_other; ret = true; } return ret; } //------------------------------------------------------------------------------ template Elf_Word generic_add_symbol( Elf_Word name, Elf64_Addr value, Elf_Xword size, unsigned char info, unsigned char other, Elf_Half shndx ) { const endianess_convertor& convertor = elf_file.get_convertor(); T entry; entry.st_name = convertor( name ); entry.st_value = value; entry.st_value = convertor( entry.st_value ); entry.st_size = size; entry.st_size = convertor( entry.st_size ); entry.st_info = convertor( info ); entry.st_other = convertor( other ); entry.st_shndx = convertor( shndx ); symbol_section->append_data( reinterpret_cast( &entry ), sizeof( entry ) ); Elf_Word nRet = symbol_section->get_size() / sizeof( entry ) - 1; return nRet; } //------------------------------------------------------------------------------ template Elf_Xword generic_arrange_local_symbols( std::function func ) { const endianess_convertor& convertor = elf_file.get_convertor(); const Elf_Xword size = symbol_section->get_entry_size(); Elf_Xword first_not_local = 1; // Skip the first entry. It is always NOTYPE Elf_Xword current = 0; Elf_Xword count = get_symbols_num(); while ( true ) { T* p1 = nullptr; T* p2 = nullptr; while ( first_not_local < count ) { p1 = const_cast( generic_get_symbol_ptr( first_not_local ) ); if ( ELF_ST_BIND( convertor( p1->st_info ) ) != STB_LOCAL ) break; ++first_not_local; } current = first_not_local + 1; while ( current < count ) { p2 = const_cast( generic_get_symbol_ptr( current ) ); if ( ELF_ST_BIND( convertor( p2->st_info ) ) == STB_LOCAL ) break; ++current; } if ( first_not_local < count && current < count ) { if ( func ) func( first_not_local, current ); // Swap the symbols T tmp; std::copy( p1, p1 + 1, &tmp ); std::copy( p2, p2 + 1, p1 ); std::copy( &tmp, &tmp + 1, p2 ); } else { // Update 'info' field of the section symbol_section->set_info( first_not_local ); break; } } // Elf_Word nRet = symbol_section->get_size() / sizeof(entry) - 1; return first_not_local; } //------------------------------------------------------------------------------ private: const elfio& elf_file; S* symbol_section; Elf_Half hash_section_index; const section* hash_section; }; using symbol_section_accessor = symbol_section_accessor_template
; using const_symbol_section_accessor = symbol_section_accessor_template; } // namespace ELFIO #endif // ELFIO_SYMBOLS_HPP /*** End of inlined file: elfio_symbols.hpp ***/ /*** Start of inlined file: elfio_note.hpp ***/ #ifndef ELFIO_NOTE_HPP #define ELFIO_NOTE_HPP namespace ELFIO { //------------------------------------------------------------------------------ // There are discrepancies in documentations. SCO documentation // (http://www.sco.com/developers/gabi/latest/ch5.pheader.html#note_section) // requires 8 byte entries alignment for 64-bit ELF file, // but Oracle's definition uses the same structure // for 32-bit and 64-bit formats. // (https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-18048.html) // // It looks like EM_X86_64 Linux implementation is similar to Oracle's // definition. Therefore, the same alignment works for both formats //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ template class note_section_accessor_template { public: //------------------------------------------------------------------------------ note_section_accessor_template( const elfio& elf_file_, S* section_ ) : elf_file( elf_file_ ), note_section( section_ ) { process_section(); } //------------------------------------------------------------------------------ Elf_Word get_notes_num() const { return (Elf_Word)note_start_positions.size(); } //------------------------------------------------------------------------------ bool get_note( Elf_Word index, Elf_Word& type, std::string& name, void*& desc, Elf_Word& descSize ) const { if ( index >= note_section->get_size() ) { return false; } const char* pData = note_section->get_data() + note_start_positions[index]; int align = sizeof( Elf_Word ); const endianess_convertor& convertor = elf_file.get_convertor(); type = convertor( *(const Elf_Word*)( pData + 2 * align ) ); Elf_Word namesz = convertor( *(const Elf_Word*)( pData ) ); descSize = convertor( *(const Elf_Word*)( pData + sizeof( namesz ) ) ); Elf_Xword max_name_size = note_section->get_size() - note_start_positions[index]; if ( namesz < 1 || namesz > max_name_size || (Elf_Xword)namesz + descSize > max_name_size ) { return false; } name.assign( pData + 3 * align, namesz - 1 ); if ( 0 == descSize ) { desc = 0; } else { desc = const_cast( pData + 3 * align + ( ( namesz + align - 1 ) / align ) * align ); } return true; } //------------------------------------------------------------------------------ void add_note( Elf_Word type, const std::string& name, const void* desc, Elf_Word descSize ) { const endianess_convertor& convertor = elf_file.get_convertor(); int align = sizeof( Elf_Word ); Elf_Word nameLen = (Elf_Word)name.size() + 1; Elf_Word nameLenConv = convertor( nameLen ); std::string buffer( reinterpret_cast( &nameLenConv ), align ); Elf_Word descSizeConv = convertor( descSize ); buffer.append( reinterpret_cast( &descSizeConv ), align ); type = convertor( type ); buffer.append( reinterpret_cast( &type ), align ); buffer.append( name ); buffer.append( 1, '\x00' ); const char pad[] = { '\0', '\0', '\0', '\0' }; if ( nameLen % align != 0 ) { buffer.append( pad, align - nameLen % align ); } if ( desc != 0 && descSize != 0 ) { buffer.append( reinterpret_cast( desc ), descSize ); if ( descSize % align != 0 ) { buffer.append( pad, align - descSize % align ); } } note_start_positions.push_back( note_section->get_size() ); note_section->append_data( buffer ); } private: //------------------------------------------------------------------------------ void process_section() { const endianess_convertor& convertor = elf_file.get_convertor(); const char* data = note_section->get_data(); Elf_Xword size = note_section->get_size(); Elf_Xword current = 0; note_start_positions.clear(); // Is it empty? if ( 0 == data || 0 == size ) { return; } Elf_Word align = sizeof( Elf_Word ); while ( current + (Elf_Xword)3 * align <= size ) { note_start_positions.push_back( current ); Elf_Word namesz = convertor( *(const Elf_Word*)( data + current ) ); Elf_Word descsz = convertor( *(const Elf_Word*)( data + current + sizeof( namesz ) ) ); current += (Elf_Xword)3 * sizeof( Elf_Word ) + ( ( namesz + align - 1 ) / align ) * (Elf_Xword)align + ( ( descsz + align - 1 ) / align ) * (Elf_Xword)align; } } //------------------------------------------------------------------------------ private: const elfio& elf_file; S* note_section; std::vector note_start_positions; }; using note_section_accessor = note_section_accessor_template
; using const_note_section_accessor = note_section_accessor_template; } // namespace ELFIO #endif // ELFIO_NOTE_HPP /*** End of inlined file: elfio_note.hpp ***/ /*** Start of inlined file: elfio_relocation.hpp ***/ #ifndef ELFIO_RELOCATION_HPP #define ELFIO_RELOCATION_HPP namespace ELFIO { template struct get_sym_and_type; template <> struct get_sym_and_type { static int get_r_sym( Elf_Xword info ) { return ELF32_R_SYM( (Elf_Word)info ); } static int get_r_type( Elf_Xword info ) { return ELF32_R_TYPE( (Elf_Word)info ); } }; template <> struct get_sym_and_type { static int get_r_sym( Elf_Xword info ) { return ELF32_R_SYM( (Elf_Word)info ); } static int get_r_type( Elf_Xword info ) { return ELF32_R_TYPE( (Elf_Word)info ); } }; template <> struct get_sym_and_type { static int get_r_sym( Elf_Xword info ) { return ELF64_R_SYM( info ); } static int get_r_type( Elf_Xword info ) { return ELF64_R_TYPE( info ); } }; template <> struct get_sym_and_type { static int get_r_sym( Elf_Xword info ) { return ELF64_R_SYM( info ); } static int get_r_type( Elf_Xword info ) { return ELF64_R_TYPE( info ); } }; //------------------------------------------------------------------------------ template class relocation_section_accessor_template { public: //------------------------------------------------------------------------------ relocation_section_accessor_template( const elfio& elf_file_, S* section_ ) : elf_file( elf_file_ ), relocation_section( section_ ) { } //------------------------------------------------------------------------------ Elf_Xword get_entries_num() const { Elf_Xword nRet = 0; if ( 0 != relocation_section->get_entry_size() ) { nRet = relocation_section->get_size() / relocation_section->get_entry_size(); } return nRet; } //------------------------------------------------------------------------------ bool get_entry( Elf_Xword index, Elf64_Addr& offset, Elf_Word& symbol, Elf_Word& type, Elf_Sxword& addend ) const { if ( index >= get_entries_num() ) { // Is index valid return false; } if ( elf_file.get_class() == ELFCLASS32 ) { if ( SHT_REL == relocation_section->get_type() ) { generic_get_entry_rel( index, offset, symbol, type, addend ); } else if ( SHT_RELA == relocation_section->get_type() ) { generic_get_entry_rela( index, offset, symbol, type, addend ); } } else { if ( SHT_REL == relocation_section->get_type() ) { generic_get_entry_rel( index, offset, symbol, type, addend ); } else if ( SHT_RELA == relocation_section->get_type() ) { generic_get_entry_rela( index, offset, symbol, type, addend ); } } return true; } //------------------------------------------------------------------------------ bool get_entry( Elf_Xword index, Elf64_Addr& offset, Elf64_Addr& symbolValue, std::string& symbolName, Elf_Word& type, Elf_Sxword& addend, Elf_Sxword& calcValue ) const { // Do regular job Elf_Word symbol; bool ret = get_entry( index, offset, symbol, type, addend ); // Find the symbol Elf_Xword size; unsigned char bind; unsigned char symbolType; Elf_Half section; unsigned char other; symbol_section_accessor symbols( elf_file, elf_file.sections[get_symbol_table_index()] ); ret = ret && symbols.get_symbol( symbol, symbolName, symbolValue, size, bind, symbolType, section, other ); if ( ret ) { // Was it successful? switch ( type ) { case R_386_NONE: // none calcValue = 0; break; case R_386_32: // S + A calcValue = symbolValue + addend; break; case R_386_PC32: // S + A - P calcValue = symbolValue + addend - offset; break; case R_386_GOT32: // G + A - P calcValue = 0; break; case R_386_PLT32: // L + A - P calcValue = 0; break; case R_386_COPY: // none calcValue = 0; break; case R_386_GLOB_DAT: // S case R_386_JMP_SLOT: // S calcValue = symbolValue; break; case R_386_RELATIVE: // B + A calcValue = addend; break; case R_386_GOTOFF: // S + A - GOT calcValue = 0; break; case R_386_GOTPC: // GOT + A - P calcValue = 0; break; default: // Not recognized symbol! calcValue = 0; break; } } return ret; } //------------------------------------------------------------------------------ bool set_entry( Elf_Xword index, Elf64_Addr offset, Elf_Word symbol, Elf_Word type, Elf_Sxword addend ) { if ( index >= get_entries_num() ) { // Is index valid return false; } if ( elf_file.get_class() == ELFCLASS32 ) { if ( SHT_REL == relocation_section->get_type() ) { generic_set_entry_rel( index, offset, symbol, type, addend ); } else if ( SHT_RELA == relocation_section->get_type() ) { generic_set_entry_rela( index, offset, symbol, type, addend ); } } else { if ( SHT_REL == relocation_section->get_type() ) { generic_set_entry_rel( index, offset, symbol, type, addend ); } else if ( SHT_RELA == relocation_section->get_type() ) { generic_set_entry_rela( index, offset, symbol, type, addend ); } } return true; } //------------------------------------------------------------------------------ void add_entry( Elf64_Addr offset, Elf_Xword info ) { if ( elf_file.get_class() == ELFCLASS32 ) { generic_add_entry( offset, info ); } else { generic_add_entry( offset, info ); } } //------------------------------------------------------------------------------ void add_entry( Elf64_Addr offset, Elf_Word symbol, unsigned char type ) { Elf_Xword info; if ( elf_file.get_class() == ELFCLASS32 ) { info = ELF32_R_INFO( (Elf_Xword)symbol, type ); } else { info = ELF64_R_INFO( (Elf_Xword)symbol, type ); } add_entry( offset, info ); } //------------------------------------------------------------------------------ void add_entry( Elf64_Addr offset, Elf_Xword info, Elf_Sxword addend ) { if ( elf_file.get_class() == ELFCLASS32 ) { generic_add_entry( offset, info, addend ); } else { generic_add_entry( offset, info, addend ); } } //------------------------------------------------------------------------------ void add_entry( Elf64_Addr offset, Elf_Word symbol, unsigned char type, Elf_Sxword addend ) { Elf_Xword info; if ( elf_file.get_class() == ELFCLASS32 ) { info = ELF32_R_INFO( (Elf_Xword)symbol, type ); } else { info = ELF64_R_INFO( (Elf_Xword)symbol, type ); } add_entry( offset, info, addend ); } //------------------------------------------------------------------------------ void add_entry( string_section_accessor str_writer, const char* str, symbol_section_accessor sym_writer, Elf64_Addr value, Elf_Word size, unsigned char sym_info, unsigned char other, Elf_Half shndx, Elf64_Addr offset, unsigned char type ) { Elf_Word str_index = str_writer.add_string( str ); Elf_Word sym_index = sym_writer.add_symbol( str_index, value, size, sym_info, other, shndx ); add_entry( offset, sym_index, type ); } //------------------------------------------------------------------------------ void swap_symbols( Elf_Xword first, Elf_Xword second ) { Elf64_Addr offset; Elf_Word symbol; Elf_Word rtype; Elf_Sxword addend; for ( Elf_Word i = 0; i < get_entries_num(); i++ ) { get_entry( i, offset, symbol, rtype, addend ); if ( symbol == first ) { set_entry( i, offset, (Elf_Word)second, rtype, addend ); } if ( symbol == second ) { set_entry( i, offset, (Elf_Word)first, rtype, addend ); } } } //------------------------------------------------------------------------------ private: //------------------------------------------------------------------------------ Elf_Half get_symbol_table_index() const { return (Elf_Half)relocation_section->get_link(); } //------------------------------------------------------------------------------ template void generic_get_entry_rel( Elf_Xword index, Elf64_Addr& offset, Elf_Word& symbol, Elf_Word& type, Elf_Sxword& addend ) const { const endianess_convertor& convertor = elf_file.get_convertor(); const T* pEntry = reinterpret_cast( relocation_section->get_data() + index * relocation_section->get_entry_size() ); offset = convertor( pEntry->r_offset ); Elf_Xword tmp = convertor( pEntry->r_info ); symbol = get_sym_and_type::get_r_sym( tmp ); type = get_sym_and_type::get_r_type( tmp ); addend = 0; } //------------------------------------------------------------------------------ template void generic_get_entry_rela( Elf_Xword index, Elf64_Addr& offset, Elf_Word& symbol, Elf_Word& type, Elf_Sxword& addend ) const { const endianess_convertor& convertor = elf_file.get_convertor(); const T* pEntry = reinterpret_cast( relocation_section->get_data() + index * relocation_section->get_entry_size() ); offset = convertor( pEntry->r_offset ); Elf_Xword tmp = convertor( pEntry->r_info ); symbol = get_sym_and_type::get_r_sym( tmp ); type = get_sym_and_type::get_r_type( tmp ); addend = convertor( pEntry->r_addend ); } //------------------------------------------------------------------------------ template void generic_set_entry_rel( Elf_Xword index, Elf64_Addr offset, Elf_Word symbol, Elf_Word type, Elf_Sxword ) { const endianess_convertor& convertor = elf_file.get_convertor(); T* pEntry = const_cast( reinterpret_cast( relocation_section->get_data() + index * relocation_section->get_entry_size() ) ); if ( elf_file.get_class() == ELFCLASS32 ) { pEntry->r_info = ELF32_R_INFO( (Elf_Xword)symbol, type ); } else { pEntry->r_info = ELF64_R_INFO( (Elf_Xword)symbol, type ); } pEntry->r_offset = offset; pEntry->r_offset = convertor( pEntry->r_offset ); pEntry->r_info = convertor( pEntry->r_info ); } //------------------------------------------------------------------------------ template void generic_set_entry_rela( Elf_Xword index, Elf64_Addr offset, Elf_Word symbol, Elf_Word type, Elf_Sxword addend ) { const endianess_convertor& convertor = elf_file.get_convertor(); T* pEntry = const_cast( reinterpret_cast( relocation_section->get_data() + index * relocation_section->get_entry_size() ) ); if ( elf_file.get_class() == ELFCLASS32 ) { pEntry->r_info = ELF32_R_INFO( (Elf_Xword)symbol, type ); } else { pEntry->r_info = ELF64_R_INFO( (Elf_Xword)symbol, type ); } pEntry->r_offset = offset; pEntry->r_addend = addend; pEntry->r_offset = convertor( pEntry->r_offset ); pEntry->r_info = convertor( pEntry->r_info ); pEntry->r_addend = convertor( pEntry->r_addend ); } //------------------------------------------------------------------------------ template void generic_add_entry( Elf64_Addr offset, Elf_Xword info ) { const endianess_convertor& convertor = elf_file.get_convertor(); T entry; entry.r_offset = offset; entry.r_info = info; entry.r_offset = convertor( entry.r_offset ); entry.r_info = convertor( entry.r_info ); relocation_section->append_data( reinterpret_cast( &entry ), sizeof( entry ) ); } //------------------------------------------------------------------------------ template void generic_add_entry( Elf64_Addr offset, Elf_Xword info, Elf_Sxword addend ) { const endianess_convertor& convertor = elf_file.get_convertor(); T entry; entry.r_offset = offset; entry.r_info = info; entry.r_addend = addend; entry.r_offset = convertor( entry.r_offset ); entry.r_info = convertor( entry.r_info ); entry.r_addend = convertor( entry.r_addend ); relocation_section->append_data( reinterpret_cast( &entry ), sizeof( entry ) ); } //------------------------------------------------------------------------------ private: const elfio& elf_file; S* relocation_section; }; using relocation_section_accessor = relocation_section_accessor_template
; using const_relocation_section_accessor = relocation_section_accessor_template; } // namespace ELFIO #endif // ELFIO_RELOCATION_HPP /*** End of inlined file: elfio_relocation.hpp ***/ /*** Start of inlined file: elfio_dynamic.hpp ***/ #ifndef ELFIO_DYNAMIC_HPP #define ELFIO_DYNAMIC_HPP namespace ELFIO { //------------------------------------------------------------------------------ template class dynamic_section_accessor_template { public: //------------------------------------------------------------------------------ dynamic_section_accessor_template( const elfio& elf_file_, S* section_ ) : elf_file( elf_file_ ), dynamic_section( section_ ) { } //------------------------------------------------------------------------------ Elf_Xword get_entries_num() const { Elf_Xword nRet = 0; if ( 0 != dynamic_section->get_entry_size() ) { nRet = dynamic_section->get_size() / dynamic_section->get_entry_size(); } return nRet; } //------------------------------------------------------------------------------ bool get_entry( Elf_Xword index, Elf_Xword& tag, Elf_Xword& value, std::string& str ) const { if ( index >= get_entries_num() ) { // Is index valid return false; } if ( elf_file.get_class() == ELFCLASS32 ) { generic_get_entry_dyn( index, tag, value ); } else { generic_get_entry_dyn( index, tag, value ); } // If the tag may have a string table reference, prepare the string if ( tag == DT_NEEDED || tag == DT_SONAME || tag == DT_RPATH || tag == DT_RUNPATH ) { string_section_accessor strsec = elf_file.sections[get_string_table_index()]; const char* result = strsec.get_string( value ); if ( 0 == result ) { str.clear(); return false; } str = result; } else { str.clear(); } return true; } //------------------------------------------------------------------------------ void add_entry( Elf_Xword tag, Elf_Xword value ) { if ( elf_file.get_class() == ELFCLASS32 ) { generic_add_entry( tag, value ); } else { generic_add_entry( tag, value ); } } //------------------------------------------------------------------------------ void add_entry( Elf_Xword tag, const std::string& str ) { string_section_accessor strsec = elf_file.sections[get_string_table_index()]; Elf_Xword value = strsec.add_string( str ); add_entry( tag, value ); } //------------------------------------------------------------------------------ private: //------------------------------------------------------------------------------ Elf_Half get_string_table_index() const { return (Elf_Half)dynamic_section->get_link(); } //------------------------------------------------------------------------------ template void generic_get_entry_dyn( Elf_Xword index, Elf_Xword& tag, Elf_Xword& value ) const { const endianess_convertor& convertor = elf_file.get_convertor(); // Check unusual case when dynamic section has no data if ( dynamic_section->get_data() == 0 || ( index + 1 ) * dynamic_section->get_entry_size() > dynamic_section->get_size() ) { tag = DT_NULL; value = 0; return; } const T* pEntry = reinterpret_cast( dynamic_section->get_data() + index * dynamic_section->get_entry_size() ); tag = convertor( pEntry->d_tag ); switch ( tag ) { case DT_NULL: case DT_SYMBOLIC: case DT_TEXTREL: case DT_BIND_NOW: value = 0; break; case DT_NEEDED: case DT_PLTRELSZ: case DT_RELASZ: case DT_RELAENT: case DT_STRSZ: case DT_SYMENT: case DT_SONAME: case DT_RPATH: case DT_RELSZ: case DT_RELENT: case DT_PLTREL: case DT_INIT_ARRAYSZ: case DT_FINI_ARRAYSZ: case DT_RUNPATH: case DT_FLAGS: case DT_PREINIT_ARRAYSZ: value = convertor( pEntry->d_un.d_val ); break; case DT_PLTGOT: case DT_HASH: case DT_STRTAB: case DT_SYMTAB: case DT_RELA: case DT_INIT: case DT_FINI: case DT_REL: case DT_DEBUG: case DT_JMPREL: case DT_INIT_ARRAY: case DT_FINI_ARRAY: case DT_PREINIT_ARRAY: default: value = convertor( pEntry->d_un.d_ptr ); break; } } //------------------------------------------------------------------------------ template void generic_add_entry( Elf_Xword tag, Elf_Xword value ) { const endianess_convertor& convertor = elf_file.get_convertor(); T entry; switch ( tag ) { case DT_NULL: case DT_SYMBOLIC: case DT_TEXTREL: case DT_BIND_NOW: value = 0; case DT_NEEDED: case DT_PLTRELSZ: case DT_RELASZ: case DT_RELAENT: case DT_STRSZ: case DT_SYMENT: case DT_SONAME: case DT_RPATH: case DT_RELSZ: case DT_RELENT: case DT_PLTREL: case DT_INIT_ARRAYSZ: case DT_FINI_ARRAYSZ: case DT_RUNPATH: case DT_FLAGS: case DT_PREINIT_ARRAYSZ: entry.d_un.d_val = convertor( value ); break; case DT_PLTGOT: case DT_HASH: case DT_STRTAB: case DT_SYMTAB: case DT_RELA: case DT_INIT: case DT_FINI: case DT_REL: case DT_DEBUG: case DT_JMPREL: case DT_INIT_ARRAY: case DT_FINI_ARRAY: case DT_PREINIT_ARRAY: default: entry.d_un.d_ptr = convertor( value ); break; } entry.d_tag = convertor( tag ); dynamic_section->append_data( reinterpret_cast( &entry ), sizeof( entry ) ); } //------------------------------------------------------------------------------ private: const elfio& elf_file; S* dynamic_section; }; using dynamic_section_accessor = dynamic_section_accessor_template
; using const_dynamic_section_accessor = dynamic_section_accessor_template; } // namespace ELFIO #endif // ELFIO_DYNAMIC_HPP /*** End of inlined file: elfio_dynamic.hpp ***/ /*** Start of inlined file: elfio_modinfo.hpp ***/ #ifndef ELFIO_MODINFO_HPP #define ELFIO_MODINFO_HPP #include #include namespace ELFIO { //------------------------------------------------------------------------------ template class modinfo_section_accessor_template { public: //------------------------------------------------------------------------------ modinfo_section_accessor_template( S* section_ ) : modinfo_section( section_ ) { process_section(); } //------------------------------------------------------------------------------ Elf_Word get_attribute_num() const { return (Elf_Word)content.size(); } //------------------------------------------------------------------------------ bool get_attribute( Elf_Word no, std::string& field, std::string& value ) const { if ( no < content.size() ) { field = content[no].first; value = content[no].second; return true; } return false; } //------------------------------------------------------------------------------ bool get_attribute( std::string field_name, std::string& value ) const { for ( auto i = content.begin(); i != content.end(); i++ ) { if ( field_name == i->first ) { value = i->second; return true; } } return false; } //------------------------------------------------------------------------------ Elf_Word add_attribute( std::string field, std::string value ) { Elf_Word current_position = 0; if ( modinfo_section ) { // Strings are addeded to the end of the current section data current_position = (Elf_Word)modinfo_section->get_size(); std::string attribute = field + "=" + value; modinfo_section->append_data( attribute + '\0' ); content.push_back( std::pair( field, value ) ); } return current_position; } //------------------------------------------------------------------------------ private: void process_section() { const char* pdata = modinfo_section->get_data(); if ( pdata ) { ELFIO::Elf_Xword i = 0; while ( i < modinfo_section->get_size() ) { while ( i < modinfo_section->get_size() && !pdata[i] ) i++; if ( i < modinfo_section->get_size() ) { std::string info = pdata + i; size_t loc = info.find( '=' ); std::pair attribute( info.substr( 0, loc ), info.substr( loc + 1 ) ); content.push_back( attribute ); i += info.length(); } } } } //------------------------------------------------------------------------------ private: S* modinfo_section; std::vector> content; }; using modinfo_section_accessor = modinfo_section_accessor_template
; using const_modinfo_section_accessor = modinfo_section_accessor_template; } // namespace ELFIO #endif // ELFIO_MODINFO_HPP /*** End of inlined file: elfio_modinfo.hpp ***/ #ifdef _MSC_VER #pragma warning( pop ) #endif #endif // ELFIO_HPP /*** End of inlined file: elfio.hpp ***/ namespace ELFIO { static struct class_table_t { const char key; const char* str; } class_table[] = { { ELFCLASS32, "ELF32" }, { ELFCLASS64, "ELF64" }, }; static struct endian_table_t { const char key; const char* str; } endian_table[] = { { ELFDATANONE, "None" }, { ELFDATA2LSB, "Little endian" }, { ELFDATA2MSB, "Big endian" }, }; static struct version_table_t { const Elf64_Word key; const char* str; } version_table[] = { { EV_NONE, "None" }, { EV_CURRENT, "Current" }, }; static struct type_table_t { const Elf32_Half key; const char* str; } type_table[] = { { ET_NONE, "No file type" }, { ET_REL, "Relocatable file" }, { ET_EXEC, "Executable file" }, { ET_DYN, "Shared object file" }, { ET_CORE, "Core file" }, }; static struct machine_table_t { const Elf64_Half key; const char* str; } machine_table[] = { { EM_NONE, "No machine" }, { EM_M32, "AT&T WE 32100" }, { EM_SPARC, "SUN SPARC" }, { EM_386, "Intel 80386" }, { EM_68K, "Motorola m68k family" }, { EM_88K, "Motorola m88k family" }, { EM_486, "Intel 80486// Reserved for future use" }, { EM_860, "Intel 80860" }, { EM_MIPS, "MIPS R3000 (officially, big-endian only)" }, { EM_S370, "IBM System/370" }, { EM_MIPS_RS3_LE, "MIPS R3000 little-endian (Oct 4 1999 Draft) Deprecated" }, { EM_res011, "Reserved" }, { EM_res012, "Reserved" }, { EM_res013, "Reserved" }, { EM_res014, "Reserved" }, { EM_PARISC, "HPPA" }, { EM_res016, "Reserved" }, { EM_VPP550, "Fujitsu VPP500" }, { EM_SPARC32PLUS, "Sun's v8plus" }, { EM_960, "Intel 80960" }, { EM_PPC, "PowerPC" }, { EM_PPC64, "64-bit PowerPC" }, { EM_S390, "IBM S/390" }, { EM_SPU, "Sony/Toshiba/IBM SPU" }, { EM_res024, "Reserved" }, { EM_res025, "Reserved" }, { EM_res026, "Reserved" }, { EM_res027, "Reserved" }, { EM_res028, "Reserved" }, { EM_res029, "Reserved" }, { EM_res030, "Reserved" }, { EM_res031, "Reserved" }, { EM_res032, "Reserved" }, { EM_res033, "Reserved" }, { EM_res034, "Reserved" }, { EM_res035, "Reserved" }, { EM_V800, "NEC V800 series" }, { EM_FR20, "Fujitsu FR20" }, { EM_RH32, "TRW RH32" }, { EM_MCORE, "Motorola M*Core // May also be taken by Fujitsu MMA" }, { EM_RCE, "Old name for MCore" }, { EM_ARM, "ARM" }, { EM_OLD_ALPHA, "Digital Alpha" }, { EM_SH, "Renesas (formerly Hitachi) / SuperH SH" }, { EM_SPARCV9, "SPARC v9 64-bit" }, { EM_TRICORE, "Siemens Tricore embedded processor" }, { EM_ARC, "ARC Cores" }, { EM_H8_300, "Renesas (formerly Hitachi) H8/300" }, { EM_H8_300H, "Renesas (formerly Hitachi) H8/300H" }, { EM_H8S, "Renesas (formerly Hitachi) H8S" }, { EM_H8_500, "Renesas (formerly Hitachi) H8/500" }, { EM_IA_64, "Intel IA-64 Processor" }, { EM_MIPS_X, "Stanford MIPS-X" }, { EM_COLDFIRE, "Motorola Coldfire" }, { EM_68HC12, "Motorola M68HC12" }, { EM_MMA, "Fujitsu Multimedia Accelerator" }, { EM_PCP, "Siemens PCP" }, { EM_NCPU, "Sony nCPU embedded RISC processor" }, { EM_NDR1, "Denso NDR1 microprocesspr" }, { EM_STARCORE, "Motorola Star*Core processor" }, { EM_ME16, "Toyota ME16 processor" }, { EM_ST100, "STMicroelectronics ST100 processor" }, { EM_TINYJ, "Advanced Logic Corp. TinyJ embedded processor" }, { EM_X86_64, "Advanced Micro Devices X86-64 processor" }, { EM_PDSP, "Sony DSP Processor" }, { EM_PDP10, "Digital Equipment Corp. PDP-10" }, { EM_PDP11, "Digital Equipment Corp. PDP-11" }, { EM_FX66, "Siemens FX66 microcontroller" }, { EM_ST9PLUS, "STMicroelectronics ST9+ 8/16 bit microcontroller" }, { EM_ST7, "STMicroelectronics ST7 8-bit microcontroller" }, { EM_68HC16, "Motorola MC68HC16 Microcontroller" }, { EM_68HC11, "Motorola MC68HC11 Microcontroller" }, { EM_68HC08, "Motorola MC68HC08 Microcontroller" }, { EM_68HC05, "Motorola MC68HC05 Microcontroller" }, { EM_SVX, "Silicon Graphics SVx" }, { EM_ST19, "STMicroelectronics ST19 8-bit cpu" }, { EM_VAX, "Digital VAX" }, { EM_CRIS, "Axis Communications 32-bit embedded processor" }, { EM_JAVELIN, "Infineon Technologies 32-bit embedded cpu" }, { EM_FIREPATH, "Element 14 64-bit DSP processor" }, { EM_ZSP, "LSI Logic's 16-bit DSP processor" }, { EM_MMIX, "Donald Knuth's educational 64-bit processor" }, { EM_HUANY, "Harvard's machine-independent format" }, { EM_PRISM, "SiTera Prism" }, { EM_AVR, "Atmel AVR 8-bit microcontroller" }, { EM_FR30, "Fujitsu FR30" }, { EM_D10V, "Mitsubishi D10V" }, { EM_D30V, "Mitsubishi D30V" }, { EM_V850, "NEC v850" }, { EM_M32R, "Renesas M32R (formerly Mitsubishi M32R)" }, { EM_MN10300, "Matsushita MN10300" }, { EM_MN10200, "Matsushita MN10200" }, { EM_PJ, "picoJava" }, { EM_OPENRISC, "OpenRISC 32-bit embedded processor" }, { EM_ARC_A5, "ARC Cores Tangent-A5" }, { EM_XTENSA, "Tensilica Xtensa Architecture" }, { EM_VIDEOCORE, "Alphamosaic VideoCore processor" }, { EM_TMM_GPP, "Thompson Multimedia General Purpose Processor" }, { EM_NS32K, "National Semiconductor 32000 series" }, { EM_TPC, "Tenor Network TPC processor" }, { EM_SNP1K, "Trebia SNP 1000 processor" }, { EM_ST200, "STMicroelectronics ST200 microcontroller" }, { EM_IP2K, "Ubicom IP2022 micro controller" }, { EM_MAX, "MAX Processor" }, { EM_CR, "National Semiconductor CompactRISC" }, { EM_F2MC16, "Fujitsu F2MC16" }, { EM_MSP430, "TI msp430 micro controller" }, { EM_BLACKFIN, "ADI Blackfin" }, { EM_SE_C33, "S1C33 Family of Seiko Epson processors" }, { EM_SEP, "Sharp embedded microprocessor" }, { EM_ARCA, "Arca RISC Microprocessor" }, { EM_UNICORE, "Microprocessor series from PKU-Unity Ltd. and MPRC of " "Peking University" }, { EM_EXCESS, "eXcess: 16/32/64-bit configurable embedded CPU" }, { EM_DXP, "Icera Semiconductor Inc. Deep Execution Processor" }, { EM_ALTERA_NIOS2, "Altera Nios II soft-core processor" }, { EM_CRX, "National Semiconductor CRX" }, { EM_XGATE, "Motorola XGATE embedded processor" }, { EM_C166, "Infineon C16x/XC16x processor" }, { EM_M16C, "Renesas M16C series microprocessors" }, { EM_DSPIC30F, "Microchip Technology dsPIC30F Digital Signal Controller" }, { EM_CE, "Freescale Communication Engine RISC core" }, { EM_M32C, "Renesas M32C series microprocessors" }, { EM_res121, "Reserved" }, { EM_res122, "Reserved" }, { EM_res123, "Reserved" }, { EM_res124, "Reserved" }, { EM_res125, "Reserved" }, { EM_res126, "Reserved" }, { EM_res127, "Reserved" }, { EM_res128, "Reserved" }, { EM_res129, "Reserved" }, { EM_res130, "Reserved" }, { EM_TSK3000, "Altium TSK3000 core" }, { EM_RS08, "Freescale RS08 embedded processor" }, { EM_res133, "Reserved" }, { EM_ECOG2, "Cyan Technology eCOG2 microprocessor" }, { EM_SCORE, "Sunplus Score" }, { EM_SCORE7, "Sunplus S+core7 RISC processor" }, { EM_DSP24, "New Japan Radio (NJR) 24-bit DSP Processor" }, { EM_VIDEOCORE3, "Broadcom VideoCore III processor" }, { EM_LATTICEMICO32, "RISC processor for Lattice FPGA architecture" }, { EM_SE_C17, "Seiko Epson C17 family" }, { EM_TI_C6000, "Texas Instruments TMS320C6000 DSP family" }, { EM_TI_C2000, "Texas Instruments TMS320C2000 DSP family" }, { EM_TI_C5500, "Texas Instruments TMS320C55x DSP family" }, { EM_res143, "Reserved" }, { EM_res144, "Reserved" }, { EM_res145, "Reserved" }, { EM_res146, "Reserved" }, { EM_res147, "Reserved" }, { EM_res148, "Reserved" }, { EM_res149, "Reserved" }, { EM_res150, "Reserved" }, { EM_res151, "Reserved" }, { EM_res152, "Reserved" }, { EM_res153, "Reserved" }, { EM_res154, "Reserved" }, { EM_res155, "Reserved" }, { EM_res156, "Reserved" }, { EM_res157, "Reserved" }, { EM_res158, "Reserved" }, { EM_res159, "Reserved" }, { EM_MMDSP_PLUS, "STMicroelectronics 64bit VLIW Data Signal Processor" }, { EM_CYPRESS_M8C, "Cypress M8C microprocessor" }, { EM_R32C, "Renesas R32C series microprocessors" }, { EM_TRIMEDIA, "NXP Semiconductors TriMedia architecture family" }, { EM_QDSP6, "QUALCOMM DSP6 Processor" }, { EM_8051, "Intel 8051 and variants" }, { EM_STXP7X, "STMicroelectronics STxP7x family" }, { EM_NDS32, "Andes Technology compact code size embedded RISC processor family" }, { EM_ECOG1, "Cyan Technology eCOG1X family" }, { EM_ECOG1X, "Cyan Technology eCOG1X family" }, { EM_MAXQ30, "Dallas Semiconductor MAXQ30 Core Micro-controllers" }, { EM_XIMO16, "New Japan Radio (NJR) 16-bit DSP Processor" }, { EM_MANIK, "M2000 Reconfigurable RISC Microprocessor" }, { EM_CRAYNV2, "Cray Inc. NV2 vector architecture" }, { EM_RX, "Renesas RX family" }, { EM_METAG, "Imagination Technologies META processor architecture" }, { EM_MCST_ELBRUS, "MCST Elbrus general purpose hardware architecture" }, { EM_ECOG16, "Cyan Technology eCOG16 family" }, { EM_CR16, "National Semiconductor CompactRISC 16-bit processor" }, { EM_ETPU, "Freescale Extended Time Processing Unit" }, { EM_SLE9X, "Infineon Technologies SLE9X core" }, { EM_L1OM, "Intel L1OM" }, { EM_INTEL181, "Reserved by Intel" }, { EM_INTEL182, "Reserved by Intel" }, { EM_res183, "Reserved by ARM" }, { EM_res184, "Reserved by ARM" }, { EM_AVR32, "Atmel Corporation 32-bit microprocessor family" }, { EM_STM8, "STMicroeletronics STM8 8-bit microcontroller" }, { EM_TILE64, "Tilera TILE64 multicore architecture family" }, { EM_TILEPRO, "Tilera TILEPro multicore architecture family" }, { EM_MICROBLAZE, "Xilinx MicroBlaze 32-bit RISC soft processor core" }, { EM_CUDA, "NVIDIA CUDA architecture " }, }; static struct section_type_table_t { const Elf64_Half key; const char* str; } section_type_table[] = { { SHT_NULL, "NULL" }, { SHT_PROGBITS, "PROGBITS" }, { SHT_SYMTAB, "SYMTAB" }, { SHT_STRTAB, "STRTAB" }, { SHT_RELA, "RELA" }, { SHT_HASH, "HASH" }, { SHT_DYNAMIC, "DYNAMIC" }, { SHT_NOTE, "NOTE" }, { SHT_NOBITS, "NOBITS" }, { SHT_REL, "REL" }, { SHT_SHLIB, "SHLIB" }, { SHT_DYNSYM, "DYNSYM" }, { SHT_INIT_ARRAY, "INIT_ARRAY" }, { SHT_FINI_ARRAY, "FINI_ARRAY" }, { SHT_PREINIT_ARRAY, "PREINIT_ARRAY" }, { SHT_GROUP, "GROUP" }, { SHT_SYMTAB_SHNDX, "SYMTAB_SHNDX " }, }; static struct segment_type_table_t { const Elf_Word key; const char* str; } segment_type_table[] = { { PT_NULL, "NULL" }, { PT_LOAD, "LOAD" }, { PT_DYNAMIC, "DYNAMIC" }, { PT_INTERP, "INTERP" }, { PT_NOTE, "NOTE" }, { PT_SHLIB, "SHLIB" }, { PT_PHDR, "PHDR" }, { PT_TLS, "TLS" }, }; static struct segment_flag_table_t { const Elf_Word key; const char* str; } segment_flag_table[] = { { 0, "" }, { 1, "X" }, { 2, "W" }, { 3, "WX" }, { 4, "R" }, { 5, "RX" }, { 6, "RW" }, { 7, "RWX" }, }; static struct symbol_bind_t { const Elf_Word key; const char* str; } symbol_bind_table[] = { { STB_LOCAL, "LOCAL" }, { STB_GLOBAL, "GLOBAL" }, { STB_WEAK, "WEAK" }, { STB_LOOS, "LOOS" }, { STB_HIOS, "HIOS" }, { STB_MULTIDEF, "MULTIDEF" }, { STB_LOPROC, "LOPROC" }, { STB_HIPROC, "HIPROC" }, }; static struct symbol_type_t { const Elf_Word key; const char* str; } symbol_type_table[] = { { STT_NOTYPE, "NOTYPE" }, { STT_OBJECT, "OBJECT" }, { STT_FUNC, "FUNC" }, { STT_SECTION, "SECTION" }, { STT_FILE, "FILE" }, { STT_COMMON, "COMMON" }, { STT_TLS, "TLS" }, { STT_LOOS, "LOOS" }, { STT_HIOS, "HIOS" }, { STT_LOPROC, "LOPROC" }, { STT_HIPROC, "HIPROC" }, }; static struct dynamic_tag_t { const Elf_Word key; const char* str; } dynamic_tag_table[] = { { DT_NULL, "NULL" }, { DT_NEEDED, "NEEDED" }, { DT_PLTRELSZ, "PLTRELSZ" }, { DT_PLTGOT, "PLTGOT" }, { DT_HASH, "HASH" }, { DT_STRTAB, "STRTAB" }, { DT_SYMTAB, "SYMTAB" }, { DT_RELA, "RELA" }, { DT_RELASZ, "RELASZ" }, { DT_RELAENT, "RELAENT" }, { DT_STRSZ, "STRSZ" }, { DT_SYMENT, "SYMENT" }, { DT_INIT, "INIT" }, { DT_FINI, "FINI" }, { DT_SONAME, "SONAME" }, { DT_RPATH, "RPATH" }, { DT_SYMBOLIC, "SYMBOLIC" }, { DT_REL, "REL" }, { DT_RELSZ, "RELSZ" }, { DT_RELENT, "RELENT" }, { DT_PLTREL, "PLTREL" }, { DT_DEBUG, "DEBUG" }, { DT_TEXTREL, "TEXTREL" }, { DT_JMPREL, "JMPREL" }, { DT_BIND_NOW, "BIND_NOW" }, { DT_INIT_ARRAY, "INIT_ARRAY" }, { DT_FINI_ARRAY, "FINI_ARRAY" }, { DT_INIT_ARRAYSZ, "INIT_ARRAYSZ" }, { DT_FINI_ARRAYSZ, "FINI_ARRAYSZ" }, { DT_RUNPATH, "RUNPATH" }, { DT_FLAGS, "FLAGS" }, { DT_ENCODING, "ENCODING" }, { DT_PREINIT_ARRAY, "PREINIT_ARRAY" }, { DT_PREINIT_ARRAYSZ, "PREINIT_ARRAYSZ" }, { DT_MAXPOSTAGS, "MAXPOSTAGS" }, }; static const ELFIO::Elf_Xword MAX_DATA_ENTRIES = 64; //------------------------------------------------------------------------------ class dump { #define DUMP_DEC_FORMAT( width ) \ std::setw( width ) << std::setfill( ' ' ) << std::dec << std::right #define DUMP_HEX_FORMAT( width ) \ std::setw( width ) << std::setfill( '0' ) << std::hex << std::right #define DUMP_STR_FORMAT( width ) \ std::setw( width ) << std::setfill( ' ' ) << std::hex << std::left public: //------------------------------------------------------------------------------ static void header( std::ostream& out, const elfio& reader ) { if ( !reader.get_header_size() ) { return; } out << "ELF Header" << std::endl << std::endl << " Class: " << str_class( reader.get_class() ) << std::endl << " Encoding: " << str_endian( reader.get_encoding() ) << std::endl << " ELFVersion: " << str_version( reader.get_elf_version() ) << std::endl << " Type: " << str_type( reader.get_type() ) << std::endl << " Machine: " << str_machine( reader.get_machine() ) << std::endl << " Version: " << str_version( reader.get_version() ) << std::endl << " Entry: " << "0x" << std::hex << reader.get_entry() << std::endl << " Flags: " << "0x" << std::hex << reader.get_flags() << std::endl << std::endl; } //------------------------------------------------------------------------------ static void section_headers( std::ostream& out, const elfio& reader ) { Elf_Half n = reader.sections.size(); if ( n == 0 ) { return; } out << "Section Headers:" << std::endl; if ( reader.get_class() == ELFCLASS32 ) { // Output for 32-bit out << "[ Nr ] Type Addr Size ES Flg Lk Inf " "Al Name" << std::endl; } else { // Output for 64-bit out << "[ Nr ] Type Addr Size " " ES Flg" << std::endl << " Lk Inf Al Name" << std::endl; } for ( Elf_Half i = 0; i < n; ++i ) { // For all sections section* sec = reader.sections[i]; section_header( out, i, sec, reader.get_class() ); } out << "Key to Flags: W (write), A (alloc), X (execute)\n\n" << std::endl; } //------------------------------------------------------------------------------ static void section_header( std::ostream& out, Elf_Half no, const section* sec, unsigned char elf_class ) { std::ios_base::fmtflags original_flags = out.flags(); if ( elf_class == ELFCLASS32 ) { // Output for 32-bit out << "[" << DUMP_DEC_FORMAT( 5 ) << no << "] " << DUMP_STR_FORMAT( 17 ) << str_section_type( sec->get_type() ) << " " << DUMP_HEX_FORMAT( 8 ) << sec->get_address() << " " << DUMP_HEX_FORMAT( 8 ) << sec->get_size() << " " << DUMP_HEX_FORMAT( 2 ) << sec->get_entry_size() << " " << DUMP_STR_FORMAT( 3 ) << section_flags( sec->get_flags() ) << " " << DUMP_HEX_FORMAT( 2 ) << sec->get_link() << " " << DUMP_HEX_FORMAT( 3 ) << sec->get_info() << " " << DUMP_HEX_FORMAT( 2 ) << sec->get_addr_align() << " " << DUMP_STR_FORMAT( 17 ) << sec->get_name() << " " << std::endl; } else { // Output for 64-bit out << "[" << DUMP_DEC_FORMAT( 5 ) << no << "] " << DUMP_STR_FORMAT( 17 ) << str_section_type( sec->get_type() ) << " " << DUMP_HEX_FORMAT( 16 ) << sec->get_address() << " " << DUMP_HEX_FORMAT( 16 ) << sec->get_size() << " " << DUMP_HEX_FORMAT( 4 ) << sec->get_entry_size() << " " << DUMP_STR_FORMAT( 3 ) << section_flags( sec->get_flags() ) << " " << std::endl << " " << DUMP_HEX_FORMAT( 4 ) << sec->get_link() << " " << DUMP_HEX_FORMAT( 4 ) << sec->get_info() << " " << DUMP_HEX_FORMAT( 4 ) << sec->get_addr_align() << " " << DUMP_STR_FORMAT( 17 ) << sec->get_name() << " " << std::endl; } out.flags( original_flags ); return; } //------------------------------------------------------------------------------ static void segment_headers( std::ostream& out, const elfio& reader ) { Elf_Half n = reader.segments.size(); if ( n == 0 ) { return; } out << "Segment headers:" << std::endl; if ( reader.get_class() == ELFCLASS32 ) { // Output for 32-bit out << "[ Nr ] Type VirtAddr PhysAddr FileSize Mem.Size " "Flags Align" << std::endl; } else { // Output for 64-bit out << "[ Nr ] Type VirtAddr PhysAddr " "Flags" << std::endl << " FileSize Mem.Size " "Align" << std::endl; } for ( Elf_Half i = 0; i < n; ++i ) { segment* seg = reader.segments[i]; segment_header( out, i, seg, reader.get_class() ); } out << std::endl; } //------------------------------------------------------------------------------ static void segment_header( std::ostream& out, Elf_Half no, const segment* seg, unsigned int elf_class ) { std::ios_base::fmtflags original_flags = out.flags(); if ( elf_class == ELFCLASS32 ) { // Output for 32-bit out << "[" << DUMP_DEC_FORMAT( 5 ) << no << "] " << DUMP_STR_FORMAT( 14 ) << str_segment_type( seg->get_type() ) << " " << DUMP_HEX_FORMAT( 8 ) << seg->get_virtual_address() << " " << DUMP_HEX_FORMAT( 8 ) << seg->get_physical_address() << " " << DUMP_HEX_FORMAT( 8 ) << seg->get_file_size() << " " << DUMP_HEX_FORMAT( 8 ) << seg->get_memory_size() << " " << DUMP_STR_FORMAT( 8 ) << str_segment_flag( seg->get_flags() ) << " " << DUMP_HEX_FORMAT( 8 ) << seg->get_align() << " " << std::endl; } else { // Output for 64-bit out << "[" << DUMP_DEC_FORMAT( 5 ) << no << "] " << DUMP_STR_FORMAT( 14 ) << str_segment_type( seg->get_type() ) << " " << DUMP_HEX_FORMAT( 16 ) << seg->get_virtual_address() << " " << DUMP_HEX_FORMAT( 16 ) << seg->get_physical_address() << " " << DUMP_STR_FORMAT( 16 ) << str_segment_flag( seg->get_flags() ) << " " << std::endl << " " << DUMP_HEX_FORMAT( 16 ) << seg->get_file_size() << " " << DUMP_HEX_FORMAT( 16 ) << seg->get_memory_size() << " " << DUMP_HEX_FORMAT( 16 ) << seg->get_align() << " " << std::endl; } out.flags( original_flags ); } //------------------------------------------------------------------------------ static void symbol_tables( std::ostream& out, const elfio& reader ) { Elf_Half n = reader.sections.size(); for ( Elf_Half i = 0; i < n; ++i ) { // For all sections section* sec = reader.sections[i]; if ( SHT_SYMTAB == sec->get_type() || SHT_DYNSYM == sec->get_type() ) { symbol_section_accessor symbols( reader, sec ); Elf_Xword sym_no = symbols.get_symbols_num(); if ( sym_no > 0 ) { out << "Symbol table (" << sec->get_name() << ")" << std::endl; if ( reader.get_class() == ELFCLASS32 ) { // Output for 32-bit out << "[ Nr ] Value Size Type Bind " "Sect Name" << std::endl; } else { // Output for 64-bit out << "[ Nr ] Value Size Type " " Bind Sect" << std::endl << " Name" << std::endl; } for ( Elf_Xword i = 0; i < sym_no; ++i ) { std::string name; Elf64_Addr value = 0; Elf_Xword size = 0; unsigned char bind = 0; unsigned char type = 0; Elf_Half section = 0; unsigned char other = 0; symbols.get_symbol( i, name, value, size, bind, type, section, other ); symbol_table( out, i, name, value, size, bind, type, section, reader.get_class() ); } out << std::endl; } } } } //------------------------------------------------------------------------------ static void symbol_table( std::ostream& out, Elf_Xword no, std::string& name, Elf64_Addr value, Elf_Xword size, unsigned char bind, unsigned char type, Elf_Half section, unsigned int elf_class ) { std::ios_base::fmtflags original_flags = out.flags(); if ( elf_class == ELFCLASS32 ) { // Output for 32-bit out << "[" << DUMP_DEC_FORMAT( 5 ) << no << "] " << DUMP_HEX_FORMAT( 8 ) << value << " " << DUMP_HEX_FORMAT( 8 ) << size << " " << DUMP_STR_FORMAT( 7 ) << str_symbol_type( type ) << " " << DUMP_STR_FORMAT( 8 ) << str_symbol_bind( bind ) << " " << DUMP_DEC_FORMAT( 5 ) << section << " " << DUMP_STR_FORMAT( 1 ) << name << " " << std::endl; } else { // Output for 64-bit out << "[" << DUMP_DEC_FORMAT( 5 ) << no << "] " << DUMP_HEX_FORMAT( 16 ) << value << " " << DUMP_HEX_FORMAT( 16 ) << size << " " << DUMP_STR_FORMAT( 7 ) << str_symbol_type( type ) << " " << DUMP_STR_FORMAT( 8 ) << str_symbol_bind( bind ) << " " << DUMP_DEC_FORMAT( 5 ) << section << " " << std::endl << " " << DUMP_STR_FORMAT( 1 ) << name << " " << std::endl; } out.flags( original_flags ); } //------------------------------------------------------------------------------ static void notes( std::ostream& out, const elfio& reader ) { Elf_Half no = reader.sections.size(); for ( Elf_Half i = 0; i < no; ++i ) { // For all sections section* sec = reader.sections[i]; if ( SHT_NOTE == sec->get_type() ) { // Look at notes note_section_accessor notes( reader, sec ); Elf_Word no_notes = notes.get_notes_num(); if ( no > 0 ) { out << "Note section (" << sec->get_name() << ")" << std::endl << " No Type Name" << std::endl; for ( Elf_Word j = 0; j < no_notes; ++j ) { // For all notes Elf_Word type; std::string name; void* desc; Elf_Word descsz; if ( notes.get_note( j, type, name, desc, descsz ) ) { // 'name' usually contains \0 at the end. Try to fix it name = name.c_str(); note( out, j, type, name ); } } out << std::endl; } } } } //------------------------------------------------------------------------------ static void modinfo( std::ostream& out, const elfio& reader ) { Elf_Half no = reader.sections.size(); for ( Elf_Half i = 0; i < no; ++i ) { // For all sections section* sec = reader.sections[i]; if ( ".modinfo" == sec->get_name() ) { // Look for the section out << "Section .modinfo" << std::endl; const_modinfo_section_accessor modinfo( sec ); for ( Elf_Word i = 0; i < modinfo.get_attribute_num(); i++ ) { std::string field; std::string value; if ( modinfo.get_attribute( i, field, value ) ) { out << " " << std::setw( 20 ) << field << std::setw( 0 ) << " = " << value << std::endl; } } out << std::endl; break; } } } //------------------------------------------------------------------------------ static void note( std::ostream& out, int no, Elf_Word type, const std::string& name ) { out << " [" << DUMP_DEC_FORMAT( 2 ) << no << "] " << DUMP_HEX_FORMAT( 8 ) << type << " " << DUMP_STR_FORMAT( 1 ) << name << std::endl; } //------------------------------------------------------------------------------ static void dynamic_tags( std::ostream& out, const elfio& reader ) { Elf_Half n = reader.sections.size(); for ( Elf_Half i = 0; i < n; ++i ) { // For all sections section* sec = reader.sections[i]; if ( SHT_DYNAMIC == sec->get_type() ) { dynamic_section_accessor dynamic( reader, sec ); Elf_Xword dyn_no = dynamic.get_entries_num(); if ( dyn_no > 0 ) { out << "Dynamic section (" << sec->get_name() << ")" << std::endl; out << "[ Nr ] Tag Name/Value" << std::endl; for ( Elf_Xword i = 0; i < dyn_no; ++i ) { Elf_Xword tag = 0; Elf_Xword value = 0; std::string str; dynamic.get_entry( i, tag, value, str ); dynamic_tag( out, i, tag, value, str, reader.get_class() ); if ( DT_NULL == tag ) { break; } } out << std::endl; } } } } //------------------------------------------------------------------------------ static void dynamic_tag( std::ostream& out, Elf_Xword no, Elf_Xword tag, Elf_Xword value, std::string str, unsigned int /*elf_class*/ ) { out << "[" << DUMP_DEC_FORMAT( 5 ) << no << "] " << DUMP_STR_FORMAT( 16 ) << str_dynamic_tag( tag ) << " "; if ( str.empty() ) { out << DUMP_HEX_FORMAT( 16 ) << value << " "; } else { out << DUMP_STR_FORMAT( 32 ) << str << " "; } out << std::endl; } //------------------------------------------------------------------------------ static void section_data( std::ostream& out, const section* sec ) { std::ios_base::fmtflags original_flags = out.flags(); out << sec->get_name() << std::endl; const char* pdata = sec->get_data(); if ( pdata ) { ELFIO::Elf_Xword i; for ( i = 0; i < std::min( sec->get_size(), MAX_DATA_ENTRIES ); ++i ) { if ( i % 16 == 0 ) { out << "[" << DUMP_HEX_FORMAT( 8 ) << i << "]"; } out << " " << DUMP_HEX_FORMAT( 2 ) << ( pdata[i] & 0x000000FF ); if ( i % 16 == 15 ) { out << std::endl; } } if ( i % 16 != 0 ) { out << std::endl; } out.flags( original_flags ); } return; } //------------------------------------------------------------------------------ static void section_datas( std::ostream& out, const elfio& reader ) { Elf_Half n = reader.sections.size(); if ( n == 0 ) { return; } out << "Section Data:" << std::endl; for ( Elf_Half i = 1; i < n; ++i ) { // For all sections section* sec = reader.sections[i]; if ( sec->get_type() == SHT_NOBITS ) { continue; } section_data( out, sec ); } out << std::endl; } //------------------------------------------------------------------------------ static void segment_data( std::ostream& out, Elf_Half no, const segment* seg ) { std::ios_base::fmtflags original_flags = out.flags(); out << "Segment # " << no << std::endl; const char* pdata = seg->get_data(); if ( pdata ) { ELFIO::Elf_Xword i; for ( i = 0; i < std::min( seg->get_file_size(), MAX_DATA_ENTRIES ); ++i ) { if ( i % 16 == 0 ) { out << "[" << DUMP_HEX_FORMAT( 8 ) << i << "]"; } out << " " << DUMP_HEX_FORMAT( 2 ) << ( pdata[i] & 0x000000FF ); if ( i % 16 == 15 ) { out << std::endl; } } if ( i % 16 != 0 ) { out << std::endl; } out.flags( original_flags ); } return; } //------------------------------------------------------------------------------ static void segment_datas( std::ostream& out, const elfio& reader ) { Elf_Half n = reader.segments.size(); if ( n == 0 ) { return; } out << "Segment Data:" << std::endl; for ( Elf_Half i = 0; i < n; ++i ) { // For all sections segment* seg = reader.segments[i]; segment_data( out, i, seg ); } out << std::endl; } private: //------------------------------------------------------------------------------ template std::string static find_value_in_table( const T& table, const K& key ) { std::string res = "?"; for ( unsigned int i = 0; i < sizeof( table ) / sizeof( table[0] ); ++i ) { if ( table[i].key == key ) { res = table[i].str; break; } } return res; } //------------------------------------------------------------------------------ template static std::string format_assoc( const T& table, const K& key ) { std::string str = find_value_in_table( table, key ); if ( str == "?" ) { std::ostringstream oss; oss << str << " (0x" << std::hex << key << ")"; str = oss.str(); } return str; } //------------------------------------------------------------------------------ template static std::string format_assoc( const T& table, const char key ) { return format_assoc( table, (const int)key ); } //------------------------------------------------------------------------------ static std::string section_flags( Elf_Xword flags ) { std::string ret = ""; if ( flags & SHF_WRITE ) { ret += "W"; } if ( flags & SHF_ALLOC ) { ret += "A"; } if ( flags & SHF_EXECINSTR ) { ret += "X"; } return ret; } //------------------------------------------------------------------------------ #define STR_FUNC_TABLE( name ) \ template static std::string str_##name( const T key ) \ { \ return format_assoc( name##_table, key ); \ } STR_FUNC_TABLE( class ) STR_FUNC_TABLE( endian ) STR_FUNC_TABLE( version ) STR_FUNC_TABLE( type ) STR_FUNC_TABLE( machine ) STR_FUNC_TABLE( section_type ) STR_FUNC_TABLE( segment_type ) STR_FUNC_TABLE( segment_flag ) STR_FUNC_TABLE( symbol_bind ) STR_FUNC_TABLE( symbol_type ) STR_FUNC_TABLE( dynamic_tag ) #undef STR_FUNC_TABLE #undef DUMP_DEC_FORMAT #undef DUMP_HEX_FORMAT #undef DUMP_STR_FORMAT }; // class dump }; // namespace ELFIO #endif // ELFIO_DUMP_HPP /*** End of inlined file: elfio_dump.hpp ***/ peony-extensions/tests/kt-test-utils/cpp-stub/addr_pri.h0000664000175000017500000002436415257160277022441 0ustar fengfeng#ifndef __ADDR_PRI_H__ #define __ADDR_PRI_H__ #include #include //base on C++11 /********************************************************** access private function **********************************************************/ namespace std { template using enable_if_t = typename enable_if::type; template using remove_reference_t = typename remove_reference::type; } // std // Unnamed namespace is used to avoid duplicate symbols if the macros are used namespace { namespace private_access_detail { // @tparam TagType, used to declare different "get" funciton overloads for // different members/statics template struct private_access { // Normal lookup cannot find in-class defined (inline) friend functions. friend PtrType get(TagType) { return PtrValue; } }; } // namespace private_access_detail } // namespace // Used macro naming conventions: // The "namespace" of this macro library is PRIVATE_ACCESS, i.e. all // macro here has this prefix. // All implementation macro, which are not meant to be used directly have the // PRIVATE_ACCESS_DETAIL prefix. // Some macros have the ABCD_IMPL form, which means they contain the // implementation details for the specific ABCD macro. #define PRIVATE_ACCESS_DETAIL_CONCATENATE_IMPL(x, y) x##y #define PRIVATE_ACCESS_DETAIL_CONCATENATE(x, y) \ PRIVATE_ACCESS_DETAIL_CONCATENATE_IMPL(x, y) // @param PtrTypeKind E.g if we have "class A", then it can be "A::*" in case of // members, or it can be "*" in case of statics. #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, \ PtrTypeKind) \ namespace { \ namespace private_access_detail { \ /* Tag type, used to declare different get funcitons for different \ * members \ */ \ struct Tag {}; \ /* Explicit instantiation */ \ template struct private_access; \ /* We can build the PtrType only with two aliases */ \ /* E.g. using PtrType = int(int) *; would be illformed */ \ using PRIVATE_ACCESS_DETAIL_CONCATENATE(Alias_, Tag) = Type; \ using PRIVATE_ACCESS_DETAIL_CONCATENATE(PtrType_, Tag) = \ PRIVATE_ACCESS_DETAIL_CONCATENATE(Alias_, Tag) PtrTypeKind; \ /* Declare the friend function, now it is visible in namespace scope. \ * Note, \ * we could declare it inside the Tag type too, in that case ADL would \ * find \ * the declaration. By choosing to declare it here, the Tag type remains \ * a \ * simple tag type, it has no other responsibilities. */ \ PRIVATE_ACCESS_DETAIL_CONCATENATE(PtrType_, Tag) get(Tag); \ } \ } #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FIELD(Tag, Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, Class::*) \ namespace { \ namespace access_private_field { \ Type &Class##Name(Class &&t) { return t.*get(private_access_detail::Tag{}); } \ Type &Class##Name(Class &t) { return t.*get(private_access_detail::Tag{}); } \ /* The following usings are here to avoid duplicate const qualifier \ * warnings \ */ \ using PRIVATE_ACCESS_DETAIL_CONCATENATE(X, Tag) = Type; \ using PRIVATE_ACCESS_DETAIL_CONCATENATE(Y, Tag) = \ const PRIVATE_ACCESS_DETAIL_CONCATENATE(X, Tag); \ PRIVATE_ACCESS_DETAIL_CONCATENATE(Y, Tag) & Class##Name(const Class &t) {\ return t.*get(private_access_detail::Tag{}); \ } \ } \ } #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FUN(Tag, Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, Class::*) \ namespace { \ namespace call_private_fun { \ /* We do perfect forwarding, but we want to restrict the overload set \ * only for objects which have the type Class. */ \ template , \ Class>::value> * = nullptr, \ typename... Args> \ auto Class##Name(Obj &&o, Args &&... args) -> decltype( \ (std::forward(o).* \ get(private_access_detail::Tag{}))(std::forward(args)...)) { \ return (std::forward(o).*get(private_access_detail::Tag{}))( \ std::forward(args)...); \ } \ } \ namespace get_private_fun { \ auto Class##Name() -> decltype( \ get(private_access_detail::Tag{})) { \ return (get(private_access_detail::Tag{})); \ } \ } \ } #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FIELD(Tag, Class, Type, \ Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, *) \ namespace { \ namespace access_private_static_field { \ namespace Class { \ Type &Class##Name() { return *get(private_access_detail::Tag{}); } \ } \ } \ } #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FUN(Tag, Class, Type, \ Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, *) \ namespace { \ namespace call_private_static_fun { \ namespace Class { \ template \ auto Class##Name(Args &&... args) -> decltype( \ get(private_access_detail::Tag{})(std::forward(args)...)) { \ return get(private_access_detail::Tag{})( \ std::forward(args)...); \ } \ } \ } \ namespace get_private_static_fun { \ namespace Class { \ auto Class##Name() -> decltype(get(private_access_detail::Tag{})) { \ return get(private_access_detail::Tag{}); \ } \ } \ } \ } #define PRIVATE_ACCESS_DETAIL_UNIQUE_TAG \ PRIVATE_ACCESS_DETAIL_CONCATENATE(PrivateAccessTag, __COUNTER__) #define ACCESS_PRIVATE_FIELD(Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FIELD(PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, \ Class, Type, Name) #define ACCESS_PRIVATE_FUN(Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FUN(PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, \ Class, Type, Name) #define ACCESS_PRIVATE_STATIC_FIELD(Class, Type, Name) \ Type Class::Name; \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FIELD( \ PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, Class, Type, Name) #define ACCESS_PRIVATE_STATIC_FUN(Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FUN( \ PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, Class, Type, Name) #endif peony-extensions/tests/test-utils.pri0000664000175000017500000000120415257160277017033 0ustar fengfeng# test-utils.pri CONFIG += console c++11 link_pkgconfig CONFIG += thread TEST_UTILS_PATH = $$_PRO_FILE_PWD_/../kt-test-utils INCLUDEPATH += $$TEST_UTILS_PATH/cpp-stub \ $$TEST_UTILS_PATH/stub-ext \ HEADERS += $$files($$TEST_UTILS_PATH/cpp-stub/*.h) \ $$files($$TEST_UTILS_PATH/cpp-stub/*.hpp) \ $$files($$TEST_UTILS_PATH/stub-ext/*.h) SOURCES += $$files($$TEST_UTILS_PATH/cpp-stub/*.cpp) \ $$files($$TEST_UTILS_PATH/stub-ext/*.cpp) # 覆盖率 QMAKE_LFLAGS +=-fprofile-arcs -ftest-coverage QMAKE_CXXFLAGS += --coverage -fno-inline -fno-access-control -fno-exceptions LIBS += -lgtest -lgcov peony-extensions/peony-share/0000775000175000017500000000000015257160277015275 5ustar fengfengpeony-extensions/peony-share/test/0000775000175000017500000000000015257160264016250 5ustar fengfengpeony-extensions/peony-share/test/test-auth.cpp0000664000175000017500000000264515257160264020701 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2023, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * */ #include #include #include #include #include "../app/samba-config-interface.h" #include // 用d-feet测试,这个例å­�还有点问题 int main (int argc, char* argv[]) { Q_UNUSED(argc) Q_UNUSED(argv) QApplication app(argc, argv); SambaConfigInterface si(DBUS_NAME, DBUS_PATH, QDBusConnection::systemBus()); qDebug() << g_get_user_name() << " " << getpid() << " " << getuid(); sleep(1); qDebug() << si.init(g_get_user_name(), getpid(), getuid()); sleep(1); qDebug() << si.hasPasswd(); sleep(1); qDebug() << si.setPasswd("qwer1234"); si.finished(); return app.exec(); } peony-extensions/peony-share/test/test.pro0000664000175000017500000000056415257160264017756 0ustar fengfengTARGET = test-auth TEMPLATE = app QT += core dbus widgets PKGCONFIG += gio-2.0 polkit-gobject-1 CONFIG += link_pkgconfig c++11 no_keywords DEFINES += DBUS_NAME=\\\"org.ukui.samba.share.config\\\" DEFINES += DBUS_PATH=\\\"/org/ukui/samba/share\\\" SOURCES += $$PWD/../app/samba-config-interface.cpp $$PWD/test-auth.cpp HEADERS += $$PWD/../app/samba-config-interface.h peony-extensions/peony-share/service/0000775000175000017500000000000015257160277016735 5ustar fengfengpeony-extensions/peony-share/service/samba-config.cpp0000664000175000017500000003222515257160277021773 0ustar fengfeng/* * Copyright (C) 2022, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Ding Jing * */ #include "samba-config.h" #include #include #include #include #include #include #include #include #include class SambaConfigPrivate { public: explicit SambaConfigPrivate (SambaConfig* sm); bool launchSmbd(); bool smbdIsActive (); bool launchNmbd(); bool nmbdIsActive(); bool userInSamba (); bool userInSambaGroup(); bool addUserToSambaGroup(); bool setUserPasswd(const QString& pass); bool checkAuthorization (); public: SambaConfig* q_ptr; QString mUserName; int mUserUid; int mUserPid; PolkitAuthority* mAuth = nullptr; QMutex mLock; }; SambaConfigPrivate::SambaConfigPrivate(SambaConfig *sm) : q_ptr(sm), mUserUid(-1), mUserPid(-1) { g_autoptr(GError) error = NULL; mAuth = polkit_authority_get_sync(NULL, &error); if (error) { qWarning() << error->message; } } bool SambaConfigPrivate::launchSmbd() { QString startCmd = QString("systemctl start smbd.service"); QString enableCmd = QString("systemctl enable smbd.service"); QProcess process; process.start("/usr/bin/bash",QStringList() << "-c" << startCmd); process.waitForFinished(); QString output = process.readAllStandardOutput(); QString error = process.readAllStandardError(); syslog(LOG_DEBUG, "launchSmbd output:%s error:%s", output.toLatin1().data(), error.toLatin1().data()); if (output.isEmpty() && error.isEmpty()) { QProcess p; p.start("/usr/bin/bash",QStringList() << "-c" << enableCmd); p.waitForFinished(); QString out = p.readAllStandardOutput(); QString err = p.readAllStandardError(); syslog(LOG_DEBUG, "launchSmbd enabele out:%s err:%s", out.toLatin1().data(), err.toLatin1().data()); if (out.isEmpty() && err.contains("enable smbd")) { return true; } else { return false; } } else { return false; } } bool SambaConfigPrivate::smbdIsActive() { //return QProcess::execute("systemctl", QStringList()<<"status"<<"smbd") ? false : true; //g_autofree gchar* cmd = g_strdup_printf ("ps aux | grep smbd | grep root | wc -l"); //int ret = QProcess::execute(cmd); QProcess process; process.start("/usr/bin/bash",QStringList() << "-c" << "ps aux | grep smbd | grep root | wc -l"); process.waitForFinished(); int ret = process.readAllStandardOutput().toInt(); QString error = process.readAllStandardError(); syslog(LOG_DEBUG, "smbdIsActive ret:%d error:%s", ret, error.toLatin1().data()); if (ret - 1 > 1 && error.isEmpty()) { return true; } else { return false; } } bool SambaConfigPrivate::launchNmbd() { QString startCmd = QString("systemctl start nmbd.service"); QString enableCmd = QString("systemctl enable nmbd.service"); QProcess process; process.start("/usr/bin/bash",QStringList() << "-c" << startCmd); bool isFinished = process.waitForFinished(3000); QString output = process.readAllStandardOutput(); QString error = process.readAllStandardError(); syslog(LOG_DEBUG, "launchNmbd output:%s error:%s isFinished:%d", output.toLatin1().data(), error.toLatin1().data(), isFinished); if (!isFinished) { syslog(LOG_DEBUG, "launchNmbd restart..."); QProcess pro; pro.setProgram("/usr/bin/bash"); pro.setArguments(QStringList() << "-c" << startCmd); pro.startDetached(); pro.waitForFinished(); } if (output.isEmpty() && error.isEmpty()) { QProcess p; p.start("/usr/bin/bash",QStringList() << "-c" << enableCmd); p.waitForFinished(); QString out = p.readAllStandardOutput(); QString err = p.readAllStandardError(); syslog(LOG_DEBUG, "launchNmbd enabele out:%s err:%s", out.toLatin1().data(), err.toLatin1().data()); if (out.isEmpty() && err.contains("enable nmbd")) { return true; } else { return false; } } else { return false; } } bool SambaConfigPrivate::nmbdIsActive() { //return QProcess::execute("systemctl", QStringList()<<"status"<<"nmbd") ? false : true; QProcess process; process.start("/usr/bin/bash",QStringList() << "-c" << "ps aux | grep nmbd | grep root | wc -l"); process.waitForFinished(); int ret = process.readAllStandardOutput().toInt(); QString error = process.readAllStandardError(); syslog(LOG_DEBUG, "nmbdIsActive ret:%d error:%s", ret, error.toLatin1().data()); if (ret - 1 > 1 && error.isEmpty()) { return true; } else { return false; } } bool SambaConfigPrivate::userInSamba() { if (mUserName.isEmpty() || -1 == mUserUid) { return false; } QString cmd = QString("/usr/bin/smbpasswd -e %1").arg(mUserName.toUtf8().constData()); QProcess process; process.start("/usr/bin/bash",QStringList() << "-c" << cmd); process.waitForFinished(); QString output = process.readAllStandardOutput(); QString error = process.readAllStandardError(); syslog(LOG_DEBUG, "userInSamba cmd:%s output:%s error:%s", cmd.toLatin1().data(), output.toLatin1().data(), error.toLatin1().data()); if (output.contains("Enabled user") && error.isEmpty()) { return true; } else { return false; } } bool SambaConfigPrivate::userInSambaGroup() { if (mUserName.isEmpty() || -1 == mUserUid) { return false; } QString cmd = QString("/usr/bin/groups %1 | grep sambashare").arg(mUserName.toUtf8().constData()); QProcess process; process.start("/usr/bin/bash",QStringList() << "-c" << cmd); process.waitForFinished(); QString output = process.readAllStandardOutput(); QString error = process.readAllStandardError(); syslog(LOG_DEBUG, "userInSambaGroup cmd:%s output:%s error:%s", cmd.toLatin1().data(), output.toLatin1().data(), error.toLatin1().data()); if (output.contains("sambashare") && error.isEmpty()) { return true; } else { return false; } } bool SambaConfigPrivate::addUserToSambaGroup() { if (mUserName.isEmpty() || -1 == mUserUid) { return false; } // QProcess p; // p.setProgram("usermod"); // p.setArguments(QStringList() << "-G" << "sambashare" << "-a" << mUserName); // p.start(); // p.waitForFinished(-1); QString usermod = "/usr/sbin/usermod"; QString gpasswd = "/usr/bin/gpasswd"; QString command; QString groupName = "sambashare"; QFile usermodFile(usermod); QFile gpasswdFile(gpasswd); QProcess p(0); QStringList args; if(!usermodFile.exists()){ syslog(LOG_DEBUG, "/usr/sbin/usermod file not exist \n"); if(!gpasswdFile.exists()){ syslog(LOG_DEBUG, "/usr/sbin/gpasswd file not exist \n"); return false; } command = gpasswd; args.append("-a"); args.append(mUserName); args.append(groupName); } else { command = usermod; args.append("-a"); args.append("-G"); args.append(groupName); args.append(mUserName); } p.execute(command,args);//command是è¦�执行的命令,args是å�‚æ•° p.waitForFinished(-1); QString output = p.readAllStandardOutput(); QString error = p.readAllStandardError(); syslog(LOG_DEBUG, "addUserToSambaGroup output:%s error:%s", output.toLatin1().data(), error.toLatin1().data()); if (error.isEmpty() && output.isEmpty()) { return true; } else { return false; } } bool SambaConfigPrivate::setUserPasswd(const QString &pass) { if (mUserName.isEmpty() || -1 == mUserUid || pass.isEmpty()) { return false; } qDebug() << "username:" << mUserName << " change passwd!"; // g_autofree gchar* cmd = g_strdup_printf ("spawn smbpasswd -a \"%s\";" // "expect \"*New SMB password*\"; send \"%s\\n\";" // "expect \"*Retype new SMB password*\"; send \"%s\\n\";" // "expect eof; exit", mUserName.toUtf8().constData(), // pass.toUtf8().constData(), pass.toUtf8().constData()); // //QProcess::execute("expect", QStringList() << "-c" << cmd); QProcess p2; p2.start(QString("/usr/bin/smbpasswd -a %1").arg(mUserName)); p2.waitForBytesWritten(); p2.write(pass.toUtf8().constData()); p2.write("\n"); p2.waitForBytesWritten(); p2.write(pass.toUtf8().constData()); p2.write("\n"); p2.waitForFinished(); QString err = p2.readAllStandardError(); if (!err.isEmpty()) { return false; } int ret = userInSamba(); return ret; } bool SambaConfigPrivate::checkAuthorization() { bool ret = false; g_autoptr(GError) error = nullptr; PolkitSubject* proj = polkit_unix_process_new_for_owner (mUserPid, 0, mUserUid); PolkitAuthorizationResult* res = polkit_authority_check_authorization_sync (mAuth, proj, "org.ukui.samba.share.config.authorization", NULL, POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION, nullptr, &error); if (error) { qWarning() << error->message; goto out; } if (polkit_authorization_result_get_is_authorized(res)) { ret = true; } out: if (proj) g_object_unref (proj); if (res) g_object_unref (res); return ret; } const SambaConfig *SambaConfig::getInstance() { static SambaConfig sc; return ≻ } SambaConfig::SambaConfig(QObject *parent) : QObject{parent}, d_ptr (new SambaConfigPrivate(this)) { } bool SambaConfig::init(QString name, int pid, int uid) { Q_D (SambaConfig); qDebug() << "init"; if (name.isEmpty() || pid < 0 || uid < 0) { return false; } // KVE-2023-1201 if (name.contains("|")) return false; QStringList allUsers; struct passwd *pw; setpwent(); while ((pw = getpwent()) != nullptr) { allUsers << pw->pw_name; } endpwent(); if (!allUsers.contains(name)) { return false; } if (d->mLock.tryLock(300)) { d->mUserName = name; d->mUserPid = pid; d->mUserUid = uid; bool ret = true; // smbd if (!isSmbdLaunched()) { ret = ret && launchSmbd(); } // nmbd if (!isNmbdLaunched()) { ret = ret && launchNmbd(); } // sambashare if (!userIsInSambaGroup()) { ret = ret && addUserInGroup (); } return ret; } return false; } void SambaConfig::finished() { Q_D (SambaConfig); d->mLock.unlock(); d->mUserName = ""; d->mUserPid = -1; d->mUserUid = -1; qDebug() << "finished"; QCoreApplication::exit(0); } bool SambaConfig::launchSmbd() { Q_D (SambaConfig); if (d->checkAuthorization()) { return d->launchSmbd(); } return false; } bool SambaConfig::isSmbdLaunched() { Q_D (SambaConfig); return d->smbdIsActive(); } bool SambaConfig::launchNmbd() { Q_D (SambaConfig); if (d->checkAuthorization()) { return d->launchNmbd(); } return false; } bool SambaConfig::isNmbdLaunched() { Q_D (SambaConfig); return d->nmbdIsActive(); } bool SambaConfig::userIsInSambaGroup() { Q_D (SambaConfig); return d->userInSambaGroup(); } bool SambaConfig::addUserInGroup() { Q_D (SambaConfig); if (d->checkAuthorization()) { return d->addUserToSambaGroup(); } return false; } bool SambaConfig::isContainLegitimacyChar(QString passwd) { //需è¦�用'在shell解释中å�šå¼ºå¼•用 if (passwd.contains("'")) return false; if (passwd.contains("&") || passwd.contains(" ")) { return false; } for (QChar ch : passwd){ if (int(ch.toLatin1() <= 0)){ return false; } } return true; } bool SambaConfig::hasPasswd() { Q_D (SambaConfig); if (d->checkAuthorization()) { return d->userInSamba(); } return false; } bool SambaConfig::setPasswd(QString passwd) { Q_D (SambaConfig); if (passwd.isEmpty() || !isContainLegitimacyChar(passwd)) { return false; } if (d->checkAuthorization()) { return d->setUserPasswd(passwd); } return false; } peony-extensions/peony-share/service/service.pro0000664000175000017500000000061615257160264021116 0ustar fengfengTEMPLATE = app TARGET = peony-samba-service QT += core dbus PKGCONFIG += gio-2.0 polkit-gobject-1 CONFIG += link_pkgconfig c++11 no_keywords DEFINES += DBUS_NAME=\\\"org.ukui.samba.share.config\\\" DEFINES += DBUS_PATH=\\\"/org/ukui/samba/share\\\" SOURCES += $$PWD/peony-samba-service.cpp $$PWD/samba-config.cpp HEADERS += $$PWD/samba-config.h target.path = /usr/libexec/ INSTALLS += target peony-extensions/peony-share/service/samba-config.h0000664000175000017500000000316615257160277021442 0ustar fengfeng/* * Copyright (C) 2022, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Ding Jing * */ #ifndef SAMBACONFIG_H #define SAMBACONFIG_H #include class SambaConfigPrivate; class SambaConfig : public QObject { Q_OBJECT Q_CLASSINFO ("D-Bus Interface", DBUS_NAME) public: const static SambaConfig* getInstance (); private: SambaConfig(SambaConfig&):QObject(nullptr){}; ~SambaConfig(){}; explicit SambaConfig(QObject *parent = nullptr); bool launchSmbd(); bool isSmbdLaunched (); bool launchNmbd(); bool isNmbdLaunched(); bool userIsInSambaGroup (); bool addUserInGroup (); bool isContainLegitimacyChar(QString passwd); public Q_SLOTS: bool init (QString name, int pid, int uid); void finished (); bool hasPasswd (); bool setPasswd (QString passwd); Q_SIGNALS: private: SambaConfigPrivate* d_ptr; Q_DECLARE_PRIVATE(SambaConfig) }; #endif // SAMBACONFIG_H peony-extensions/peony-share/service/peony-samba-service.cpp0000664000175000017500000000375115257160264023314 0ustar fengfeng/* * Copyright (C) 2022, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Ding Jing * */ #include #include #include "samba-config.h" #include #include #include //static GDBusObjectManagerServer* manager = NULL; static bool registManager (SambaConfig& sc); int main (int argc, char* argv[]) { int ret = -1; QCoreApplication app(argc, argv); SambaConfig* sc = const_cast(SambaConfig::getInstance()); if (registManager(*sc)) { ret = app.exec(); } return ret; } static bool registManager (SambaConfig& sc) { QDBusConnection bus = QDBusConnection::systemBus(); if (bus.interface()->isServiceRegistered(DBUS_NAME)) { qWarning() << "dbus: " DBUS_NAME " already regist!"; return false; } if (!bus.registerService(DBUS_NAME)) { qWarning() << "dbus: " DBUS_NAME " regist failed!"; return false; } if (!bus.registerObject(DBUS_PATH, DBUS_NAME, static_cast(&sc), QDBusConnection::ExportNonScriptableSlots|QDBusConnection::ExportNonScriptableSignals)) { qWarning() << "dbus: " DBUS_NAME " regist object failed!"; return false; } qDebug() << "dbus: " DBUS_NAME " regist successed!"; return true; } peony-extensions/peony-share/peony-share.pro0000664000175000017500000000133015257160277020246 0ustar fengfengTEMPLATE = subdirs SUBDIRS = $$PWD/service/service.pro $$PWD/app/app.pro $$PWD/test/test.pro \ peony-share-menu-plugin daemonConfig.files = $$PWD/data/org.ukui.samba.share.config.conf daemonConfig.path = /usr/share/dbus-1/system.d/ daemonPolicy.files = $$PWD/data/org.ukui.samba.share.config.policy daemonPolicy.path = /usr/share/polkit-1/actions daemonService.files = $$PWD/data/org.ukui.samba.share.config.service daemonService.path = /usr/share/dbus-1/system-services INSTALLS += daemonConfig daemonPolicy daemonService SKIP_TEST = $$(EXTENSIONS_SKIP_TEST) isEmpty(SKIP_TEST) { message("build with tests") QMAKE_LFLAGS += -fprofile-arcs -ftest-coverage QMAKE_CXXFLAGS += --coverage LIBS += -lgcov } peony-extensions/peony-share/peony-share-menu-plugin/0000775000175000017500000000000015257160277021765 5ustar fengfengpeony-extensions/peony-share/peony-share-menu-plugin/peony-share-menu-plugin.pro0000664000175000017500000000151715257160277027203 0ustar fengfengQT += widgets concurrent dbus include(../../common.pri) TEMPLATE = lib TARGET = peony-share-menu-plugin DEFINES += PEONYSHAREMENUPLUGIN_LIBRARY PKGCONFIG += peony gio-2.0 udisks2 glib-2.0 CONFIG += link_pkgconfig no_keywords c++11 plugin debug HEADERS += \ ../app/share-emblem-provider.h \ peony-share-menu-plugin_global.h \ share-menu-plugin.h SOURCES += \ ../app/share-emblem-provider.cpp \ share-menu-plugin.cpp TRANSLATIONS += translations/peony-share-menu-plugin_zh_CN.ts \ translations/peony-share-menu-plugin_bo_CN.ts \ translations/peony-share-menu-plugin_mn.ts \ translations/peony-share-menu-plugin_zh_HK.ts target.path = $$[QT_INSTALL_LIBS]/peony-extensions INSTALLS += target CONFIG += lrelease embed_translations QM_FILES_RESOURCE_PREFIX = /translations/ peony-extensions/peony-share/peony-share-menu-plugin/translations/0000775000175000017500000000000015257160277024506 5ustar fengfengpeony-extensions/peony-share/peony-share-menu-plugin/translations/peony-share-menu-plugin_bo_CN.ts0000664000175000017500000000260315257160264032603 0ustar fengfeng Peony::ShareMenuPlugin Cancel sharing མཉམ་སྤྱོད་བྱ་རྒྱུ་མེད་པར་བཟོ་དགོསà¼� Share folder མཉམ་དུ་ཡིག་ཆ་མཉམ་སྤྱོད་བྱེད་པà¼� Peony-Qt Share Operation menu Extension མཉམ་སྤྱོད་ཟས་à½�ོའི་བར་བཅུག་ལྷུ་ལག་མཉམ་སྤྱོད་བྱ་དགོསà¼� File share operation menu Extension ཡིག་ཆ་མཉམ་སྤྱོད་ཀྱིས་ཟས་à½�ོའི་བར་བཅུག་ལྷུ་ལག་མཉམ་སྤྱོད་བྱ་དགོསà¼� peony-extensions/peony-share/peony-share-menu-plugin/translations/peony-share-menu-plugin_zh_CN.ts0000664000175000017500000000170115257160264032622 0ustar fengfeng Peony::ShareMenuPlugin Cancel sharing å�–消共享 Share folder 共享文件夹 Peony-Qt Share Operation menu Extension 共享æ“�作è�œå�•æ�’ä»¶ File share operation menu Extension 文件共享æ“�作è�œå�•æ�’ä»¶ peony-extensions/peony-share/peony-share-menu-plugin/translations/peony-share-menu-plugin_mn.ts0000664000175000017500000000207415257160264032237 0ustar fengfeng Peony::ShareMenuPlugin Cancel sharing Хуваалцахыг цуцал Share folder ХуваалцÑ�ан хавтаÑ� Peony-Qt Share Operation menu Extension ХуваалцÑ�ан үйлдлийн цÑ�Ñ�ийн карт File share operation menu Extension Файл хуваалцах үйл ажиллагааны цÑ�Ñ�ийн карт peony-extensions/peony-share/peony-share-menu-plugin/translations/peony-share-menu-plugin_zh_HK.ts0000664000175000017500000000171615257160264032632 0ustar fengfeng Peony::ShareMenuPlugin Cancel sharing å�–消共用 Share folder 共用資料夾 Peony-Qt Share Operation menu Extension Peony-Qt Share Operation 功能表擴展 File share operation menu Extension 檔共用作功能表擴展å�� peony-extensions/peony-share/peony-share-menu-plugin/share-menu-plugin.h0000664000175000017500000000424715257160264025501 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Wenjie Xiang * */ #ifndef SHAREMENUPLUGIN_H #define SHAREMENUPLUGIN_H #include "peony-share-menu-plugin_global.h" #include "menu-plugin-iface.h" #include namespace Peony { class PEONYSHAREMENUPLUGINSHARED_EXPORT ShareMenuPlugin : public QObject, public MenuPluginInterface { Q_OBJECT Q_PLUGIN_METADATA(IID MenuPluginInterface_iid FILE "common.json") Q_INTERFACES(Peony::MenuPluginInterface) public: explicit ShareMenuPlugin(QObject *parent = nullptr); PluginInterface::PluginType pluginType() override { return PluginInterface::MenuPlugin; } const QString name() override { return tr("Peony-Qt Share Operation menu Extension"); } const QString description() override { return tr("File share operation menu Extension"); } const QIcon icon() override { return QIcon::fromTheme("emblem-link-symbolic"); } void setEnable(bool enable) override { m_enable = enable; } bool isEnable() override { return m_enable; } QString testPlugin() override { return "test share operation"; } QList menuActions(Types types, const QString &uri, const QStringList &selectionUris) override; bool checkOriginPath(const QString& selectFilePath, const QString& configFilePath); bool isSupportUri(const QString& uri); private: bool m_enable = true; }; } #endif // SHAREMENUPLUGIN_H peony-extensions/peony-share/peony-share-menu-plugin/share-menu-plugin.cpp0000664000175000017500000001661415257160277026041 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Wenjie Xiang * */ #include "share-menu-plugin.h" #include "file-info.h" #include "usershare-manager.h" #include "properties-window.h" #include "peony-share/app/share-emblem-provider.h" #include "global-settings.h" #include #include #include #include #include using namespace Peony; const QString SHARECONFIGPATH = "/var/lib/samba/usershares/"; ShareMenuPlugin::ShareMenuPlugin(QObject *parent) : QObject(parent) { QTranslator *t = new QTranslator(this); qDebug()<<"system().name:"<load(":/translations/peony-share-menu-plugin_"+QLocale::system().name()); QApplication::installTranslator(t); } QList ShareMenuPlugin::menuActions(Peony::MenuPluginInterface::Types types, const QString &uri, const QStringList &selectionUris) { QList l; if (types == MenuPluginInterface::DesktopWindow || types == MenuPluginInterface::DirectoryView) { if (selectionUris.count() == 1) { qDebug() << __func__ << uri << selectionUris; if (!isSupportUri(selectionUris[0])) return l; QStringList disExtensions = GlobalSettings::getInstance()->getValue(DISABLED_EXTENSIONS).toStringList(); if (disExtensions.contains("libpeony-share.so")) return l; auto selectFileInfo = FileInfo::fromUri(selectionUris[0]); if (selectFileInfo->isVirtual()) { return l; } if (selectFileInfo->isDir()) { auto manager = UserShareInfoManager::getInstance(); QStringList userShareLists = manager->getUsershareLists(); bool isShared = false; for (auto &list : userShareLists) { if (QString::compare(list, selectFileInfo->displayName(), Qt::CaseInsensitive) == 0) { isShared = true; break; } } QFileInfo shareInfo(SHARECONFIGPATH + selectFileInfo->displayName().toLower()); QFileInfo fileInfo(selectFileInfo->filePath()); if (shareInfo.owner() != fileInfo.owner()) { isShared = false; } if (isShared) { isShared = checkOriginPath(selectFileInfo->filePath(), shareInfo.filePath()); } QAction* shareOperationAction = nullptr; if (isShared) { shareOperationAction = new QAction(tr("Cancel sharing"), nullptr); } else { shareOperationAction = new QAction(tr("Share folder"), nullptr); } connect(shareOperationAction, &QAction::triggered, [=](){ if (isShared) { auto fileInfo = FileXattrInfo::fromUri(selectFileInfo->uri()); if(fileInfo && !fileInfo->getXattrInfoString(SHARE_EMBLEMS).isEmpty()){ fileInfo->removeXattrInfo(SHARE_EMBLEMS); EmblemProviderManager::getInstance()->queryAsync(selectFileInfo->uri()); } QString name = selectFileInfo->displayName(); UserShareInfoManager::getInstance()->removeShareInfoAcl(name); bool ret; QStringList args; args << "/usr/bin/setfacl" << "-b" << QString("\"%1\"").arg(selectFileInfo->filePath()); UserShareInfoManager::exectueSetAclCommand(args, &ret); } else { if (GlobalSettings::getInstance()->isExist(SHOW_SHARE_PROPERTIES)) { GlobalSettings::getInstance()->setValue(SHOW_SHARE_PROPERTIES, true); } QUrl url = selectFileInfo->uri(); QProcess p; #if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) p.setProgram("/usr/bin/peony"); p.setArguments(QStringList()<<"--show-properties"<displayName(); } } } return l; } bool ShareMenuPlugin::checkOriginPath(const QString &selectFilePath, const QString &configFilePath) { bool ret = true; QFile file(configFilePath); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qWarning() << "open share config failed:" << configFilePath; ret = false; return ret; } QTextStream stream(&file); QString result = stream.readAll(); QStringList lines = result.split('\n'); QString originPath; for (QString line : lines) { if (line.startsWith("path")) { originPath = line.split('=').last(); break; } } if (0 != originPath.compare(selectFilePath)) { ret = false; } return ret; } bool ShareMenuPlugin::isSupportUri(const QString &uri) { if (uri.startsWith("file:///box")) { return false; } auto info = FileInfo::fromUri(uri); if (!info->isDir() || info->isVirtual() || !info->uri().startsWith("file:///")) { return false; } // don't share user's home directory file:///home/xxx/ QStringList file = info->uri().split('/', Qt::SkipEmptyParts); if ((3 == file.size ()) && (file.at(1) == "home")) { return false; } // don't share directory that has no permission if (!info->canRead() || !info->canWrite() || !info->canExecute()) { return false; } g_autoptr(GFile) gFile = g_file_new_for_uri(info->uri().toUtf8().constData()); if(gFile) { g_autoptr(GFileInfo) gInfo = g_file_query_info(gFile, "owner::*", G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nullptr, nullptr); if (gInfo) { QString ownerUser = g_file_info_get_attribute_string(gInfo, G_FILE_ATTRIBUTE_OWNER_USER); QString userName = qgetenv("USER"); if (0 != QString::compare(ownerUser, userName)) { return false; } } } return true; } peony-extensions/peony-share/peony-share-menu-plugin/peony-share-menu-plugin_global.h0000664000175000017500000000213215257160264030140 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Wenjie Xiang * */ #ifndef PEONYSHAREMENUPLUGIN_GLOBAL_H #define PEONYSHAREMENUPLUGIN_GLOBAL_H #include #if defined(PEONYSHAREMENUPLUGIN_LIBRARY) # define PEONYSHAREMENUPLUGINSHARED_EXPORT Q_DECL_EXPORT #else # define PEONYSHAREMENUPLUGINSHARED_EXPORT Q_DECL_IMPORT #endif #endif // PEONYSHAREMENUPLUGIN_GLOBAL_H peony-extensions/peony-share/app/0000775000175000017500000000000015257160277016055 5ustar fengfengpeony-extensions/peony-share/app/share-emblem-provider.h0000664000175000017500000000340715257160264022417 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2021, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Wenjie Xiang * */ #ifndef SHAREEMBLEMPROVIDER_H #define SHAREEMBLEMPROVIDER_H #include #include #include #include #include "peony-core_global.h" #include "emblem-provider.h" #define SHARE_EMBLEMS "share-emblems" namespace Peony { class ShareEmblemProvider : public EmblemProvider { Q_OBJECT public: static ShareEmblemProvider *getInstance(); const QString emblemKey() override; QStringList getFileEmblemIcons(const QString &uri) override; private: explicit ShareEmblemProvider(QObject *parent = nullptr); }; class FileXattrInfo { public: static std::shared_ptr fromUri(const QString &uri); FileXattrInfo(const QString &uri); void setXattrInfoString(const QString &key, const QString &value, bool syncToFile = true); const QString getXattrInfoString(const QString &key); void removeXattrInfo(const QString &key); private: QString m_uri; QHash m_hash; }; } #endif // SHAREEMBLEMPROVIDER_H peony-extensions/peony-share/app/samba-config-interface.cpp0000664000175000017500000000212715257160264023043 0ustar fengfeng/* * Copyright (C) 2022, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Ding Jing * */ #include "samba-config-interface.h" SambaConfigInterface::SambaConfigInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) { } SambaConfigInterface::~SambaConfigInterface() { } peony-extensions/peony-share/app/advanced-share-page.h0000664000175000017500000000522415257160264022004 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2022, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Wenjie Xiang * */ #ifndef ADVANCEDSHAREPAGE_H #define ADVANCEDSHAREPAGE_H #include #include #include #include #include #include #include #include #include #include #include #include "file-utils.h" #include "systemd-bus-accounts.h" using namespace Peony; class AdvancedSharePage : public QWidget { Q_OBJECT public: explicit AdvancedSharePage(const QString &uri, const QMap &userInfo, QWidget *parent = nullptr); ~AdvancedSharePage(); void init(); void initTableWidget(); void initListWidget(); void initFloorOne(); void initFloorTwo(); void initFloorThree(); void initFloorFour(); void addSeparate(); void updateShareUserInfo(); void parseUserShareAcl(QString strAcl); bool updateCheckBox(int col, QString &name); void updateUserInfo(int row, int col, bool checked); QString parseSetAcl(QMap &userInfo); QString converPermission(QString &usershareAcl); void updateLabelShow(QLabel *label, const QString &str); protected Q_SLOTS: void updateDelBtnState(int row, int col); Q_SIGNALS: void getUserInfo(QString &acl, QMap &userInfo); private: QString m_uri; QMap m_userInfo; QMutex m_mutex; SystemDbusAccounts *m_sysAccounts = nullptr; QStringList m_userNames; bool m_thisPageChanged = false; QLabel *m_label = nullptr; QLabel *m_tabLabel = nullptr; QLabel *m_listLabel = nullptr; QTableWidget *m_tabWidget = nullptr; QListWidget *m_listWidget = nullptr; QPushButton *m_saveBtn = nullptr; QPushButton *m_cancelBtn = nullptr; QPushButton *m_addShareUserBtn = nullptr; QPushButton *m_delShareUserBtn = nullptr; QVBoxLayout *m_layout = nullptr; }; #endif // ADVANCEDSHAREPAGE_H peony-extensions/peony-share/app/samba-config-thread.cpp0000664000175000017500000000467515257160264022364 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2021, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Wenjie Xiang * */ #include "samba-config-thread.h" #include SambaConfigThread::SambaConfigThread(const Peony::ShareInfo shareInfo, const QString uri, const QString acl) { m_shareInfoTmp = new Peony::ShareInfo(); m_shareInfoTmp->allowGuest = shareInfo.allowGuest; m_shareInfoTmp->comment = shareInfo.comment; m_shareInfoTmp->isShared = shareInfo.isShared; m_shareInfoTmp->name = shareInfo.name; m_shareInfoTmp->originalPath = shareInfo.originalPath; m_shareInfoTmp->readOnly = shareInfo.readOnly; m_uri = uri; m_acl = acl; } Peony::ShareInfo *SambaConfigThread::getShareInfo() { return m_shareInfoTmp; } QString SambaConfigThread::getUri() { return m_uri; } QString SambaConfigThread::getAcl() { return m_acl; } void SambaConfigThread::run() { SambaConfigInterface si(DBUS_NAME, DBUS_PATH, QDBusConnection::systemBus()); // struct timeval tpstart,tpend; // float timeuse; // gettimeofday(&tpstart, NULL); bool initRet = si.init(g_get_user_name(), getpid(), getuid()); // gettimeofday(&tpend, NULL); // timeuse = (1000000*(tpend.tv_sec-tpstart.tv_sec) + tpend.tv_usec-tpstart.tv_usec)/1000000.0; Q_EMIT isInitSignal(initRet); if (initRet) { bool hasPasswdRet = si.hasPasswd(); QString passwd = ""; qDebug()<< __func__ << __LINE__ << hasPasswdRet; Q_EMIT isHasPasswdSignal(hasPasswdRet, passwd); if (!passwd.isEmpty()) { qDebug()<< __func__ << __LINE__ << passwd; bool setPasswdRet = si.setPasswd(passwd); Q_EMIT isSetPasswdSignal(setPasswdRet); } } si.finished(); qDebug()<< __func__ << __LINE__ << "samba finished"; } peony-extensions/peony-share/app/samba-config-interface.h0000664000175000017500000000472015257160264022511 0ustar fengfeng/* * Copyright (C) 2022, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Ding Jing * */ #ifndef SAMBACONFIGINTERFACE_H #define SAMBACONFIGINTERFACE_H #include #include #include #include #include #include #include #include /* * Proxy class for interface org.ukui.samba.config.share */ class SambaConfigInterface: public QDBusAbstractInterface { Q_OBJECT public: static inline const char *staticInterfaceName() { return "org.ukui.samba.share.config"; } public: SambaConfigInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = nullptr); ~SambaConfigInterface(); public Q_SLOTS: // METHODS inline QDBusPendingReply<> finished() { QList argumentList; return callWithArgumentList(QDBus::Block, QStringLiteral("finished"), argumentList); } inline QDBusPendingReply hasPasswd() { QList argumentList; return callWithArgumentList(QDBus::Block, QStringLiteral("hasPasswd"), argumentList); } inline QDBusPendingReply init(const QString &name, int pid, int uid) { QList argumentList; argumentList << QVariant::fromValue(name) << QVariant::fromValue(pid) << QVariant::fromValue(uid); return callWithArgumentList(QDBus::Block, QStringLiteral("init"), argumentList); } inline QDBusPendingReply setPasswd(const QString &passwd) { QList argumentList; argumentList << QVariant::fromValue(passwd); return callWithArgumentList(QDBus::Block, QStringLiteral("setPasswd"), argumentList); } Q_SIGNALS: // SIGNALS }; #endif peony-extensions/peony-share/app/translations/0000775000175000017500000000000015257160277020576 5ustar fengfengpeony-extensions/peony-share/app/translations/peony-share-extension_kk_KZ.ts0000664000175000017500000003271515257160264026507 0ustar fengfeng AdvancedSharePage Advanced share جوعارى دارەجەدەگى ھەمبەھرلەش Samba password: قۇپيا نومەرى Samba Samba set user password Samba الارمان قۇپيا نۇمىردى ورناتقان Warning ەسكەرتۋ Samba set password failed, Please re-enter! قۇپيا نومەر ورناتۋ جەڭىلىپ قالدى، قايتادان كىرگىزىڭىز Samba Tips ەسكەرتپەۋ The user has not set the samba password. If you need to log in to %1, you can set it in the upper right menu of the file manager Ù†Û‡ الارمان samba قۇپيا نۇمىردى ورناتپاعان، ٴسىز Ùª1 الارمانقا كىرىشىڭىز كەرەك، حۇجات باسقارۋشنىڭ ÙˆÚ­ جاق ٷستٸندەگٸ تىزىمدىگىنە samba قۇپيا نۇمىردى ورناتساڭىز بولادٸ Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! ھەمبەھرلىنىش تولىقتاماسى قىزىمەت وتەۋى نورمال ەمەس، قازىر ھەمبەھرلىنىش جوبالاۋى يۈزگۈزىلىۋاتقان ياكي يۈزگۈزىلىۋاتمىغانلىقىنى انىقتاڭىز ياكي قايتادان ھەمبەھرلىنىڭ User الارمان مى Writable جازۋعا بولادٸ Readonly تەك قانا وقۋعا بولادٸ Reject رەت ەتۋ Share permission settings ھەمبەھرلىنىش ولشەمىن جٶبالاۋ delete حابار Add قوسۋ Save ساقتاۋ Cancel كۇشىنەن قالدىرۋ NetUsershareHelper Peony-Qt-Share-Extension 共享 Peony::SharePropertiesPagePlugin Peony Qt Share Extension ھەمبەھرلىنىش Allow user share folders حۇجات قىسقشتان ھەمبەھرلىنىشكە قوسىلۋ SharePage Share folder حۇجات قىسقشتان ھەمبەھرلىنىش Share: 共享: Warning ەسكەرتۋ The share name must not contain %1, and cannot start with a dash (-) or whitespace, or end with whitespace. ورتاق پايدالانۋ بولۋ مى Ùª1 نى ٶز ىشىنە السا بولمايدى ونىڭ ۇستىنە «-» ۋا بوستٸق Ù…Û•Ù†Û•Ù† باشلىنىشقا ياكي بوستٸق Ù…Û•Ù†Û•Ù† اياقتاتۋعا بولمايدى The share name cannot be the same as the current user name ھەمبەھر حۇجات مى قازىر بار بولعان سەستامانىڭ پايدالانۋشٸ مى ۇقساپ قالسا بولمايدى question سۇراستىرۋ The share name is already used by other users. You can rename the folder and then set the share. Ù†Û‡ ھەمبەھر حۇجاتتىڭ مى باسقا ابونتتار جاقتارٸن ىستەتىلدى، ٴسىز حۇجات قىسۋاسپابىنىڭ ەسىمىن وزگەرتكەننەن كەيىن سونان قاتە ھەمبەھر ورىنداپ تەڭشەسەڭىز بولادٸ The folder is currently shared in non-read-only mode, and setting up the share requires adding other people's write permissions to the current folder? Ù†Û‡ حۇجات قىسقشتاعى كەزەكتەگى ھەمبەھر بولۋ Ù�ورماسى تەك وقۋ Ù�ورماسىلا ەمەس، كەزەكتەگى حۇجات قىسقىشىنى اۆتوماتتى كوبەيتىپ باسقالارعا جازۋ ۇقىعى بÛ�رىلەمدۇ؟ Confirm adding permissions اسىرۋ ۇقىق كولەمىن بەكٸتۋ Cancel كۇشىنەن قالدىرۋ The folder is currently shared with anonymous access set, do I need to automatically add executable permissions for the current file and all other members of the parent directory? Ù†Û‡ حۇجات قىسۋاسپابىنىڭ كەزەكتە اتسىز ھەمبەھرلىنىش قىزىمەتى تەڭشەلدٸ، وسى حۇجات ۋا باسقالاردٸڭ جۇرگىزۋ ولشەمىن اۆتوماتتى اسىرۋ كەرەكپە؟ The share name cannot be the same as an existing user name The share name already exists, do you want to replace the original share folder? The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions for the current file and all others in the parent directory? Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! ھەمبەھرلىنىش تولىقتاماسى قىزىمەت وتەۋى نورمال ەمەس، قازىر ھەمبەھرلىنىش جوبالاۋى يۈزگۈزىلىۋاتقان ياكي يۈزگۈزىلىۋاتمىغانلىقىنى انىقتاڭىز ياكي قايتادان ھەمبەھرلىنىڭ Samba password: قۇپيا نومەرى Samba Samba set user password Samba الارمان قۇپيا نۇمىردى ورناتقان Samba set password failed, Please re-enter! قۇپيا نومەر ورناتۋ جەڭىلىپ قالدى، قايتادان كىرگىزىڭىز Samba usershare مىناۋ جابدىقدان ھەمبەھرلىنىش share this folder Ù†Û‡ حۇجات قىسقىش ھەمبەھرلىنىش don`t share this folder Ù†Û‡ حۇجات قىسقشتان ورتاق پايدالانۋ بولمايدى Share name: ورتاق ٴلاززاتتانۋ بولۋ Allow others to create and delete files باسقالاردٸڭ حۇجات ورناتۋىنا ۋا ئۆچۈرۈشىگە جول قويۋ Advanced Sharing جوعارى دارەجەلىك ھەمبەھرلىنىش Read Only Тек оқу Allow Anonymous ئىختىياري قاريدارلاردىڭ ۇسىنس قىلۋىنا جول قويۋ Comment: ەسكەرتپە peony-extensions/peony-share/app/translations/peony-share-extension_ky_KG.ts0000664000175000017500000003334315257160264026500 0ustar fengfeng AdvancedSharePage Advanced share جوعورۇ چەگىندەكى ھەمبەھرلەش Samba password: جاشىرۇۇن نومۇرۇ Samba Samba set user password Samba كەرەكتۅۅچۉ جاشىرۇۇن نومۇرۇن ورنوتقون Warning ەسكەرتۉۉ Samba set password failed, Please re-enter! جاشىرۇۇن نومۇر ورنوتۇ جەڭىلۉۉ بولدۇ ØŒ قايتادان كىرگىزىڭ Samba Tips ەسكەرتۉۉ The user has not set the samba password. If you need to log in to %1, you can set it in the upper right menu of the file manager بۇل كەرەكتۅۅچۉ samba جاشىرۇۇن نومۇرۇن ورنوتبوعون، سىز Ùª1 كەرەكتۅۅچۉقا كىرىشىڭىز كەرەك، ۅجۅت باشقارۇۇچۇنۇن ÙˆÚ­ تاراپ ۉستۉندۆكۉ تىزىمدىگىنە samba جاشىرۇۇن نومۇرۇن ورنوتسوڭۇز بولوت Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! ھەمبەھرلىنىش سەپتەمەسى سان قاينارى نورماال ەمەس ØŒ ازىر ھەمبەھرلىنىش ماشعۇلاتى يۈزگۈزىلىۋاتقان كۅرۉنۉشتۅرۉ يۈزگۈزىلىۋاتمىغانلىقىنى ايقىنداڭ كۅرۉنۉشتۅرۉ قايتادان ھەمبەھرلىنىڭ User كەرەكتۅۅچۉ ناامى Writable جازىشقا بولوت Readonly جالاڭ عانا وقۇۇعا بولوت Reject قاتار جاسوو ،اتقارۇۇ Share permission settings ھەمبەھرلىنىش چەكتەمەسىن دولبوورلوش delete ۅچۉر Add قوشۇۇ Save ساقتوو Cancel ارعادان قالتىرىش NetUsershareHelper Peony-Qt-Share-Extension 共享 Peony::SharePropertiesPagePlugin Peony Qt Share Extension ھەمبەھرلىنىش Allow user share folders ۅجۅت قىسقىچتان ھەمبەھرلىنىشكە قوشۇلۇۇ SharePage Share folder ۅجۅت قىسقىچتان ھەمبەھرلىنىش Share: 共享: Warning ەسكەرتۉۉ The share name must not contain %1, and cannot start with a dash (-) or whitespace, or end with whitespace. ورتوق وزۇرلانۇۇ بولۇش ناامى Ùª1 نى ۅز ىچىنە السا بولبويت داعى «-» جانا بوشتۇق Ù…Û•Ù†Û•Ù† باشلىنىشقا كۅرۉنۉشتۅرۉ بوشتۇق Ù…Û•Ù†Û•Ù† اقىرلاشتىرۇۇعا بولبويت The share name cannot be the same as the current user name ھەمبەھر ۅجۅت ناامى ازىر بار بولعون سەستىمانىن ىشتەتۉۉچۉ ناامى وقشوش قالسا بولبويت question ىزىكتەش The share name is already used by other users. You can rename the folder and then set the share. بۇل ھەمبەھر ۅجۅتتۉن ناامى باشقا ابونتتار بىر جاعىنان ىشتەتىلدى، سىز ۅجۅت قىسقىچتىن اتىن ۅزگۅرتكۅندۅن كىيىن اندان قايرا ھەمبەھر جاساپ تەڭشەسەڭىز بولوت The folder is currently shared in non-read-only mode, and setting up the share requires adding other people's write permissions to the current folder? بۇل ۅجۅت قىسقىچتاقى گەزەكتەكى ھەمبەھر بولۇش ۉلگۉسۉ جالاڭ عانا وقۇۇ ۉلگۉسۉلا ەمەس ØŒ گەزەكتەكى ۅجۅت قىپچىعىچتى اپتوماتتىك كۅبۅيتۉپ باشقالارعا جازۇۇ ۇقۇعۇ بÛ�رىلەمدۇ؟ Confirm adding permissions اشىرۇۇ Û‡Ù‚Û‡Ù‚ Ú¯Û…Û…Ù„Û…Ù…Û‰Ù† بەكىتۉۉ Cancel ارعادان قالتىرىش The folder is currently shared with anonymous access set, do I need to automatically add executable permissions for the current file and all other members of the parent directory? بۇل ۅجۅت قىسقىچتىن گەزەكتە اتى جوق ھەمبەھرلىنىش جۅندۅمۉ تەڭشەلدى، ۇشۇل ۅجۅت جانا باشقالاردىن جۉرگۅزۉ چەكتەمەسىن اپتوماتتىك اشىرۇۇ كەرەكبى؟ The share name cannot be the same as an existing user name The share name already exists, do you want to replace the original share folder? The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions for the current file and all others in the parent directory? Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! ھەمبەھرلىنىش سەپتەمەسى سان قاينارى نورماال ەمەس ØŒ ازىر ھەمبەھرلىنىش ماشعۇلاتى يۈزگۈزىلىۋاتقان كۅرۉنۉشتۅرۉ يۈزگۈزىلىۋاتمىغانلىقىنى ايقىنداڭ كۅرۉنۉشتۅرۉ قايتادان ھەمبەھرلىنىڭ Samba password: جاشىرۇۇن نومۇرۇ Samba Samba set user password Samba كەرەكتۅۅچۉ جاشىرۇۇن نومۇرۇن ورنوتقون Samba set password failed, Please re-enter! جاشىرۇۇن نومۇر ورنوتۇ جەڭىلۉۉ بولدۇ ØŒ قايتادان كىرگىزىڭ Samba usershare بۇل ،ۇشۇل اسپاپتان ھەمبەھرلىنىش share this folder بۇل ۅجۅت قىپچىعىچ ھەمبەھرلىنىش don`t share this folder بۇل ۅجۅت قىسقىچتان ورتوق وزۇرلانۇۇ بولبويت Share name: ورتوق باارلانۇۇ بولۇش Allow others to create and delete files باشقالاردىن ۅجۅت قۇرۇۇعا جانا ئۆچۈرۈشىگە جول قويۇش Advanced Sharing جوعورۇ چەكتۉۉ ھەمبەھرلىنىش Read Only Окуу гана Allow Anonymous ئىختىياري ابونىتتاردىن زىيارات قىلۇۇعا جول قويۇش Comment: تۉشۉنۉك بەرۉۉ peony-extensions/peony-share/app/translations/peony-share-extension_zh_CN.ts0000664000175000017500000002747115257160264026502 0ustar fengfeng AdvancedSharePage Advanced share 高级共享 Samba set user password Samba设置用户密ç � Samba password: Samba密ç �: Warning 警告 Samba set password failed, Please re-enter! Samba设置密ç �失败,请é‡�新输入! Tips æ��示 The user has not set the samba password. If you need to log in to %1, you can set it in the upper right menu of the file manager 该用户没有设置samba密ç �。你需è¦�登录%1用户,å�¯ä»¥åœ¨æ–‡ä»¶ç®¡ç�†å™¨çš„å�³ä¸Šè�œå�•中进行设置samba密ç � Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! 共享é…�ç½®æœ�务异常,请确认是å�¦æœ‰æ­£åœ¨è¿›è¡Œçš„共享é…�ç½®æ“�作,或者请é‡�新设置共享ï¼� User 用户 Writable å�¯å†™ Readonly å�ªè¯» Reject æ‹’ç»� Share permission settings 共享æ�ƒé™�设置 delete 删除 Add 增加 Save ä¿�å­˜ Cancel å�–消 NetUsershareHelper Peony-Qt-Share-Extension 共享 Peony::SharePropertiesPagePlugin Peony Qt Share Extension 共享 Allow user share folders å…�许共享文件夹 SharePage Share folder 共享文件夹 Share: 共享: The folder is currently shared in non-read-only mode, and setting up the share requires adding other people's write permissions to the current folder? 该文件夹当å‰�共享模å¼�为é�žå�ªè¯»æ¨¡å¼�,是å�¦éœ€è¦�自动增加当å‰�文件夹增加其他人的写æ�ƒé™�? question 询问 Confirm adding permissions 确定增加æ�ƒé™� Cancel å�–消 Warning 警告 The share name must not contain %1, and cannot start with a dash (-) or whitespace, or end with whitespace. 共享å��ä¸�能包å�«%1,并且ä¸�能以-开头或者空格开头,或者空格结尾 The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions of the current file and others in the ancestor directory? 该文件夹当å‰�共享设置了匿å��访问,是å�¦éœ€è¦�自动增加当å‰�文件和其他人的å�¯æ‰§è¡Œæ�ƒé™�? The share name cannot be the same as the current user name 共享文件å��ä¸�能和已有用系统户å��一致 The share name is already used by other users. You can rename the folder and then set the share. 此共享文件å��ç§°å·²ç»�被其它用户使用,您å�¯ä»¥å°�试é‡�命å��文件夹å�Žå†�设置共享。 The folder is currently shared with anonymous access set, do I need to automatically add executable permissions for the current file and all other members of the parent directory? 该文件夹当å‰�共享设置了匿å��访问,是å�¦éœ€è¦�自动增加当å‰�文件和其他人的å�¯æ‰§è¡Œæ�ƒé™�? Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! 共享é…�ç½®æœ�务异常,请确认是å�¦æœ‰æ­£åœ¨è¿›è¡Œçš„共享é…�ç½®æ“�作,或者请é‡�新设置共享ï¼� Samba set user password Samba设置用户密ç � Samba password: Samba密ç �: The share name cannot be the same as an existing user name 共享å��ç§°ä¸�能与已有用户å��相å�Œ The share name already exists, do you want to replace the original share folder? 存在å�Œå��的共享,是å�¦æ›´æ”¹å…±äº«ç›®å½•? The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions for the current file and all others in the parent directory? 该文件夹当å‰�共享设置了匿å��访问,是å�¦éœ€è¦�自动增加当å‰�文件和所有父目录的其他人的å�¯æ‰§è¡Œæ�ƒé™�? Samba set password failed, Please re-enter! Samba设置密ç �失败,请é‡�新输入! usershare 本机共享 share this folder 共享此文件夹 don`t share this folder ä¸�共享此文件夹 Share name: 共享å��: Allow others to create and delete files å…�许其它人创建和删除文件 Read Only å�ªè¯» Allow Anonymous å…�许游客访问 Advanced Sharing 高级共享 Comment: 注释: peony-extensions/peony-share/app/translations/peony-share-extension_es.ts0000664000175000017500000002767315257160264026114 0ustar fengfeng AdvancedSharePage Advanced share Recurso compartido avanzado Samba set user password Samba establece la contraseña de usuario Samba password: Contraseña de Samba: Warning Advertencia Samba set password failed, Please re-enter! Error en la configuración de la contraseña de Samba, ¡vuelva a ingresar! Tips Consejos The user has not set the samba password. If you need to log in to %1, you can set it in the upper right menu of the file manager El usuario no ha establecido la contraseña de samba. Si necesita iniciar sesión en %1, puede configurarlo en el menú superior derecho del administrador de archivos Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! Excepción del servicio de configuración compartida, confirme si hay una operación de configuración compartida en curso o restablezca el recurso compartido. User Usuario Writable Escritura Readonly Solo lectura Reject Rechazar Share permission settings Configuración de permisos de uso compartido delete borrar Add Agregar Save Salvar Cancel Cancelar NetUsershareHelper Peony-Qt-Share-Extension 共享 Peony::SharePropertiesPagePlugin Peony Qt Share Extension Extensión de acciones de Peony Qt Allow user share folders Permitir carpetas compartidas de usuario SharePage Share folder Compartir carpeta Share: 共享: The folder is currently shared in non-read-only mode, and setting up the share requires adding other people's write permissions to the current folder? La carpeta se comparte actualmente en modo de solo lectura y la configuración del recurso compartido requiere agregar los permisos de escritura de otras personas a la carpeta actual. question pregunta The share name cannot be the same as an existing user name The share name already exists, do you want to replace the original share folder? Confirm adding permissions Confirmar la adición de permisos Cancel Cancelar Warning Advertencia The share name must not contain %1, and cannot start with a dash (-) or whitespace, or end with whitespace. El nombre del recurso compartido no debe contener %1 y no puede comenzar con un guión (-) o un espacio en blanco, ni terminar con un espacio en blanco. The share name cannot be the same as the current user name El nombre del recurso compartido no puede ser el mismo que el nombre de usuario actual The share name is already used by other users. You can rename the folder and then set the share. El nombre del recurso compartido ya está siendo utilizado por otros usuarios. Puede cambiar el nombre de la carpeta y, a continuación, establecer el recurso compartido. The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions of the current file and others in the ancestor directory? La carpeta se comparte actualmente con el conjunto de acceso anónimo, ¿necesito aumentar automáticamente los permisos ejecutables del archivo actual y otros en el directorio antecesor? Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! Excepción del servicio de configuración compartida, confirme si hay una operación de configuración compartida en curso o restablezca el recurso compartido. Samba set user password Samba establece la contraseña de usuario Samba password: Contraseña de Samba: The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions for the current file and all others in the parent directory? Samba set password failed, Please re-enter! Error en la configuración de la contraseña de Samba, ¡vuelva a ingresar! usershare Compartir usuario share this folder Compartir esta carpeta don`t share this folder No compartas esta carpeta Share name: Nombre de la acción: Allow others to create and delete files Read Only Solo lectura Allow Anonymous Permitir anónimo Advanced Sharing Uso compartido avanzado Comment: Comentario: peony-extensions/peony-share/app/translations/peony-share-extension_zh_HK.ts0000664000175000017500000002731615257160277026506 0ustar fengfeng AdvancedSharePage Advanced share 高級共用 Samba set user password Samba 設置用戶密碼 Samba password: Samba 密碼: Warning 警告 Samba set password failed, Please re-enter! Samba 設置密碼失敗,請é‡�新輸入ï¼� Tips 技巧 The user has not set the samba password. If you need to log in to %1, you can set it in the upper right menu of the file manager 使用者尚未設置 samba 密碼。如果需è¦�登錄 %1,å�¯ä»¥åœ¨æª”案管ç�†å“¡çš„å�³ä¸Šæ–¹åŠŸèƒ½è¡¨ä¸­é€²è¡Œè¨­ç½® Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! 共用é…�ç½®æœ�務異常,請確èª�是å�¦æœ‰æ­£åœ¨é€²è¡Œçš„共用é…�置作,å�¦å‰‡è«‹é‡�置共用ï¼� User 使用者 Writable 寫 Readonly 唯讀 Reject 拒絕 Share permission settings 共用許å�¯æ¬Šè¨­ç½® delete 刪除 Add 加 Save æ•‘ Cancel å�–消 NetUsershareHelper Peony-Qt-Share-Extension 共享 Peony::SharePropertiesPagePlugin Peony Qt Share Extension Peony Qt 股票擴展 Allow user share folders å…�許使用者共享資料夾 SharePage Share folder 共用資料夾 Share: 共享: The folder is currently shared in non-read-only mode, and setting up the share requires adding other people's write permissions to the current folder? 資料夾目å‰�以é�žå”¯è®€æ¨¡å¼�共用,設置共用需è¦�添加其他人å°�ç•¶å‰�資料夾的寫入許å�¯æ¬Šï¼Ÿ question å•�題 Confirm adding permissions 確èª�添加許å�¯æ¬Š Cancel å�–消 Warning 警告 The share name must not contain %1, and cannot start with a dash (-) or whitespace, or end with whitespace. 共用å��稱ä¸�得包å�« %1,ä¸�能以短劃線 (-) 或空格開頭,也ä¸�能以空格çµ�尾。 The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions of the current file and others in the ancestor directory? 该文件夹当å‰�共享设置了匿å��访问,是å�¦éœ€è¦�自动增加当å‰�文件和其他人的å�¯æ‰§è¡Œæ�ƒé™�? The share name cannot be the same as the current user name 共用å��稱ä¸�能與當å‰�使用者å��相å�Œ The share name is already used by other users. You can rename the folder and then set the share. 共用å��稱已被其他使用者使用。您å�¯ä»¥é‡�新命å��資料夾,然後設置共用。 The folder is currently shared with anonymous access set, do I need to automatically add executable permissions for the current file and all other members of the parent directory? 資料夾目å‰�已使用匿å��訪å•�集共用,是å�¦éœ€è¦�自動為當å‰�檔和父目錄的所有其他æˆ�員添加å�¯åŸ·è¡Œè¨±å�¯æ¬Šï¼Ÿ Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! 共用é…�ç½®æœ�務異常,請確èª�是å�¦æœ‰æ­£åœ¨é€²è¡Œçš„共用é…�置作,å�¦å‰‡è«‹é‡�置共用ï¼� Samba set user password Samba 設置用戶密碼 Samba password: Samba 密碼: The share name cannot be the same as an existing user name The share name already exists, do you want to replace the original share folder? 共用å��稱已存在,是å�¦è¦�替æ�›åŽŸä¾†çš„å…±äº«è³‡æ–™å¤¾ï¼Ÿ The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions for the current file and all others in the parent directory? Samba set password failed, Please re-enter! Samba 設置密碼失敗,請é‡�新輸入ï¼� usershare 用戶共用 share this folder 共用此資料夾 don`t share this folder ä¸�共用此資料夾 Share name: 股票å��稱: Allow others to create and delete files å…�許其他人創建和刪除檔 Read Only å�ªè¯» Allow Anonymous å…�許匿å�� Advanced Sharing 高級共用 Comment: 評論: peony-extensions/peony-share/app/translations/peony-share-extension_de.ts0000664000175000017500000002757015257160264026071 0ustar fengfeng AdvancedSharePage Advanced share Erweiterte Freigabe Samba set user password Samba-Benutzerkennwort festlegen Samba password: Samba-Passwort: Warning Warnung Samba set password failed, Please re-enter! Samba Passwort gesetzt fehlgeschlagen, Bitte erneut eingeben! Tips Tipps The user has not set the samba password. If you need to log in to %1, you can set it in the upper right menu of the file manager Der Benutzer hat das Samba-Passwort nicht festgelegt. Wenn Sie sich bei %1 anmelden müssen, können Sie dies im oberen rechten Menü des Dateimanagers festlegen Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! Ausnahme für den freigegebenen Konfigurationsdienst, bitte bestätigen Sie, ob ein laufender gemeinsamer Konfigurationsvorgang vorhanden ist, oder setzen Sie die Freigabe zurück! User Benutzer Writable Beschreibbar Readonly Schreibgeschützt Reject Ablehnen Share permission settings Einstellungen für Freigabeberechtigungen delete löschen Add Hinzufügen Save Retten Cancel Abbrechen NetUsershareHelper Peony-Qt-Share-Extension 共享 Peony::SharePropertiesPagePlugin Peony Qt Share Extension Pfingstrose Qt-Freigabeerweiterung Allow user share folders Zulassen von Benutzerfreigabeordnern SharePage Share folder Ordner freigeben Share: 共享: The folder is currently shared in non-read-only mode, and setting up the share requires adding other people's write permissions to the current folder? Der Ordner ist derzeit im nicht schreibgeschützten Modus freigegeben, und zum Einrichten der Freigabe müssen die Schreibberechtigungen anderer Personen für den aktuellen Ordner hinzugefügt werden. question Frage The share name cannot be the same as an existing user name The share name already exists, do you want to replace the original share folder? Confirm adding permissions Bestätigen Sie das Hinzufügen von Berechtigungen Cancel Abbrechen Warning Warnung The share name must not contain %1, and cannot start with a dash (-) or whitespace, or end with whitespace. Der Freigabename darf %1 nicht enthalten und darf nicht mit einem Bindestrich (-) oder Leerzeichen beginnen oder mit Leerzeichen enden. The share name cannot be the same as the current user name Der Freigabename darf nicht mit dem aktuellen Benutzernamen identisch sein The share name is already used by other users. You can rename the folder and then set the share. Der Freigabename wird bereits von anderen Benutzern verwendet. Sie können den Ordner umbenennen und dann die Freigabe festlegen. The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions of the current file and others in the ancestor directory? Der Ordner wird derzeit mit anonymem Zugriff freigegeben, muss ich die Berechtigungen für ausführbare Dateien der aktuellen Datei und anderer Dateien im Vorgängerverzeichnis automatisch erhöhen? Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! Ausnahme für den freigegebenen Konfigurationsdienst, bitte bestätigen Sie, ob ein laufender gemeinsamer Konfigurationsvorgang vorhanden ist, oder setzen Sie die Freigabe zurück! Samba set user password Samba-Benutzerkennwort festlegen Samba password: Samba-Passwort: The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions for the current file and all others in the parent directory? Samba set password failed, Please re-enter! Samba Passwort gesetzt fehlgeschlagen, Bitte erneut eingeben! usershare usershare share this folder Diesen Ordner freigeben don`t share this folder Diesen Ordner nicht freigeben Share name: Name der Freigabe: Allow others to create and delete files Read Only Schreibgeschützt Allow Anonymous Anonym zulassen Advanced Sharing Erweiterte Freigabe Comment: Kommentar: peony-extensions/peony-share/app/translations/peony-share-extension_bo_CN.ts0000664000175000017500000002525315257160264026455 0ustar fengfeng AdvancedSharePage Advanced share Samba password: Samba set user password Warning Samba set password failed, Please re-enter! Tips The user has not set the samba password. If you need to log in to %1, you can set it in the upper right menu of the file manager Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! User Writable Readonly Reject Share permission settings delete Add Save Cancel NetUsershareHelper Peony-Qt-Share-Extension 共享 Peony::SharePropertiesPagePlugin Peony Qt Share Extension མཉམ་སྤྱོདà¼� Allow user share folders ཡིག་à½�ུག་མཉམ་སྤྱོད་བྱེད་ཆོག SharePage Share folder ཡིག་à½�ུག་མཉམ་སྤྱོདà¼� Share: 共享: Warning The share name must not contain %1, and cannot start with a dash (-) or whitespace, or end with whitespace. question The share name is already used by other users. You can rename the folder and then set the share. The folder is currently shared in non-read-only mode, and setting up the share requires adding other people's write permissions to the current folder? Confirm adding permissions Cancel The share name cannot be the same as an existing user name The share name already exists, do you want to replace the original share folder? The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions for the current file and all others in the parent directory? Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! Samba password: Samba set user password Samba set password failed, Please re-enter! usershare གློག་ཀླད་འདིའི་མཉམ་སྤྱོད་བྱེད་པà¼� share this folder ཡིག་à½�ུག་འདི་མཉམ་སྤྱོདà¼� don`t share this folder ཡིག་à½�ུག་འདི་མཉམ་སྤྱོད་མི་བྱེད་པà¼� Share name: མཉམ་སྤྱོད་ཀྱི་མིང་à¼�: Allow others to create and delete files Advanced Sharing Read Only ཀློག་ཙམà¼� Allow Anonymous ཡུལ་སà¾�ོར་བར་ལྟ་སྤྱོད་བྱས་ཆོག Comment: མཆན་འགྲེལà¼�: peony-extensions/peony-share/app/translations/peony-share-extension_tr.ts0000664000175000017500000002443215257160264026120 0ustar fengfeng AdvancedSharePage Advanced share Samba password: Samba set user password Warning Samba set password failed, Please re-enter! Tips The user has not set the samba password. If you need to log in to %1, you can set it in the upper right menu of the file manager Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! User Writable Readonly Reject Share permission settings delete Add Save Cancel NetUsershareHelper Peony-Qt-Share-Extension Peony-Qt-Share-Eklentisi Peony::SharePropertiesPagePlugin Peony Qt Share Extension Peony Qt Share Eklentisi Allow user share folders Kullanıcı paylaşım klasörlerine izin ver SharePage Share folder Klasör paylaÅŸ Share: PaylaÅŸ: Warning The share name must not contain %1, and cannot start with a dash (-) or whitespace, or end with whitespace. question The share name is already used by other users. You can rename the folder and then set the share. The folder is currently shared in non-read-only mode, and setting up the share requires adding other people's write permissions to the current folder? Confirm adding permissions Cancel The share name cannot be the same as an existing user name The share name already exists, do you want to replace the original share folder? The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions for the current file and all others in the parent directory? Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! Samba password: Samba set user password Samba set password failed, Please re-enter! usershare share this folder don`t share this folder Share name: Allow others to create and delete files Advanced Sharing Read Only Sadece Okunabilir Allow Anonymous Herkese İzin Ver Comment: Yorum yap: peony-extensions/peony-share/app/translations/peony-share-extension_fr.ts0000664000175000017500000002767415257160264026115 0ustar fengfeng AdvancedSharePage Advanced share Partage avancé Samba set user password Samba set le mot de passe de l’utilisateur Samba password: Mot de passe de la samba : Warning Avertissement Samba set password failed, Please re-enter! Échec de l’ensemble du mot de passe Samba, veuillez entrer à nouveau ! Tips Conseils The user has not set the samba password. If you need to log in to %1, you can set it in the upper right menu of the file manager L’utilisateur n’a pas défini le mot de passe samba. Si vous avez besoin de vous connecter à %1, vous pouvez le définir dans le menu supérieur droit du gestionnaire de fichiers Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! Exception au service de configuration partagée, veuillez confirmer s’il existe une opération de configuration partagée en cours, ou réinitialisez le partage ! User Utilisateur Writable Inscriptible Readonly Lecture seule Reject Rejeter Share permission settings Paramètres d’autorisation de partage delete supprimer Add Ajouter Save Sauvegarder Cancel Annuler NetUsershareHelper Peony-Qt-Share-Extension 共享 Peony::SharePropertiesPagePlugin Peony Qt Share Extension Extension de l’action Peony Qt Allow user share folders Autoriser les dossiers de partage d’utilisateurs SharePage Share folder Partager le dossier Share: 共享: The folder is currently shared in non-read-only mode, and setting up the share requires adding other people's write permissions to the current folder? Le dossier est actuellement partagé en mode non lecture seule et la configuration du partage nécessite l’ajout des autorisations d’écriture d’autres personnes au dossier actuel ? question question The share name cannot be the same as an existing user name The share name already exists, do you want to replace the original share folder? Confirm adding permissions Confirmer l’ajout d’autorisations Cancel Annuler Warning Avertissement The share name must not contain %1, and cannot start with a dash (-) or whitespace, or end with whitespace. Le nom du partage ne doit pas contenir %1 et ne peut pas commencer par un tiret (-) ou un espace, ni se terminer par un espace. The share name cannot be the same as the current user name Le nom du partage ne peut pas être le même que le nom d’utilisateur actuel The share name is already used by other users. You can rename the folder and then set the share. Le nom du partage est déjà utilisé par d’autres utilisateurs. Vous pouvez renommer le dossier, puis définir le partage. The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions of the current file and others in the ancestor directory? Le dossier est actuellement partagé avec un accès anonyme défini, dois-je augmenter automatiquement les autorisations exécutables du fichier actuel et des autres fichiers du répertoire ancêtre ? Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! Exception au service de configuration partagée, veuillez confirmer s’il existe une opération de configuration partagée en cours, ou réinitialisez le partage ! Samba set user password Samba set le mot de passe de l’utilisateur Samba password: Mot de passe de la samba : The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions for the current file and all others in the parent directory? Samba set password failed, Please re-enter! Échec de l’ensemble du mot de passe Samba, veuillez entrer à nouveau ! usershare Partage d’utilisateurs share this folder Partager ce dossier don`t share this folder Ne pas partager ce dossier Share name: Nom de l’action : Allow others to create and delete files Read Only Lecture seule Allow Anonymous Autoriser l’anonymat Advanced Sharing Partage avancé Comment: Commentaire: peony-extensions/peony-share/app/translations/peony-share-extension_ug_CN.ts0000664000175000017500000002474015257160264026470 0ustar fengfeng AdvancedSharePage Advanced share Samba password: Samba set user password Warning Samba set password failed, Please re-enter! Tips The user has not set the samba password. If you need to log in to %1, you can set it in the upper right menu of the file manager Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! User Writable Readonly Reject Share permission settings delete Add Save Cancel NetUsershareHelper Peony-Qt-Share-Extension 共享 Peony::SharePropertiesPagePlugin Peony Qt Share Extension مودەني Qt پاي Ú†Û�كىنى ئۇزارتىش Allow user share folders ئىشلەتكۈچى ئورتاق ھۆججەت قىسقۇچلىرىغا ئىجازەت بÛ�رىش SharePage Share folder ھۆججەت قىسقۇچنى ئورتاقلاش Share: 共享: Warning The share name must not contain %1, and cannot start with a dash (-) or whitespace, or end with whitespace. question The share name is already used by other users. You can rename the folder and then set the share. The folder is currently shared in non-read-only mode, and setting up the share requires adding other people's write permissions to the current folder? Confirm adding permissions Cancel The share name cannot be the same as an existing user name The share name already exists, do you want to replace the original share folder? The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions for the current file and all others in the parent directory? Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! Samba password: Samba set user password Samba set password failed, Please re-enter! usershare usershare share this folder بۇ ھۆججەت قىسقۇچنى ئورتاقلاش don`t share this folder بۇ ھۆججەت قىسقۇچنى ئورتاق ئىشلەتمەڭ Share name: ھەمبەھىر نامى: Allow others to create and delete files Advanced Sharing Read Only پەقەت ئوقۇڭ Allow Anonymous نامسىز رۇخسەت Comment: باھا بÛ�رىڭ: peony-extensions/peony-share/app/translations/peony-share-extension_cs.ts0000664000175000017500000002444715257160264026106 0ustar fengfeng AdvancedSharePage Advanced share Samba password: Samba set user password Warning Samba set password failed, Please re-enter! Tips The user has not set the samba password. If you need to log in to %1, you can set it in the upper right menu of the file manager Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! User Writable Readonly Reject Share permission settings delete Add Save Cancel NetUsershareHelper Peony-Qt-Share-Extension Peony-Qt-Share-Extension Peony::SharePropertiesPagePlugin Peony Qt Share Extension Rozšíření do Peony Qt pro správu sdílení Allow user share folders Umožnit uživateli sdílet složku SharePage Share folder Sdílet složku Share: Zdroj: Warning The share name must not contain %1, and cannot start with a dash (-) or whitespace, or end with whitespace. question The share name is already used by other users. You can rename the folder and then set the share. The folder is currently shared in non-read-only mode, and setting up the share requires adding other people's write permissions to the current folder? Confirm adding permissions Cancel The share name cannot be the same as an existing user name The share name already exists, do you want to replace the original share folder? The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions for the current file and all others in the parent directory? Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! Samba password: Samba set user password Samba set password failed, Please re-enter! usershare share this folder don`t share this folder Share name: Allow others to create and delete files Advanced Sharing Read Only Pouze pro Ä�tení Allow Anonymous Umožnit anonymní Comment: Komentář: peony-extensions/peony-share/app/translations/peony-share-extension_mn.ts0000664000175000017500000004030015257160264026075 0ustar fengfeng AdvancedSharePage Advanced share ᠳᠡᠭᠡᠳᠦ ᠵᠡᠷᠭᠡ ᠶᠢᠨ ᠬᠠᠮᠲᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠨ᠎ᠡ á ƒ Samba set user password ᠰᠠᠩᠪᠠ ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢᠳ ᠦᠨ ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠤᠨ᠎ᠠ á ƒ Samba password: ᠰᠠᠩᠪᠠ ᠶᠢᠨ ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ Warning ᠠᠨᠭᠬᠠᠷᠠᠭᠤᠯᠬᠤ Samba set password failed, Please re-enter! ᠰᠠᠩᠪᠠ ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠵᠤ ᠢᠯᠠᠭᠳᠠᠯ ᠳᠤ ᠣᠷᠣᠭᠤᠯᠵᠠᠢ á ‚ ᠳᠠᠬᠢᠨ ᠣᠷᠣᠭᠤᠯᠬᠤ ᠪᠣᠯᠪᠠᠤ ! Tips ᠮᠡᠷᠭᠡᠵᠢᠯ á ƒ The user has not set the samba password. If you need to log in to %1, you can set it in the upper right menu of the file manager ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢᠳ Sammb ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠲᠠᠯᠪᠢᠭᠠᠳᠤᠢ ᠪᠠᠶᠢᠭᠰᠠᠭᠠᠷ á ƒ ᠬᠡᠷᠪᠡ 1 ᠳᠤ ᠭᠠᠷᠬᠤ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠢ ᠪᠣᠯ ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ ᠬᠠᠮᠢᠶᠠᠷᠤᠯᠲᠠ ᠶᠢᠨ ᠪᠠᠭᠠᠵᠢ ᠶᠢᠨ ᠪᠠᠷᠠᠭᠤᠨ ᠥᠨᠴᠥᠭ ᠳᠡᠭᠡᠷ᠎ᠡ ᠪᠠᠶᠢᠷᠢᠯᠠᠭᠤᠯᠵᠤ ᠪᠣᠯᠣᠨ᠎ᠠ á ƒ Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! ᠬᠠᠮᠲᠤᠪᠠᠷ ᠡᠳᠯᠡᠵᠦ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠬᠤ ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠡ ᠨᠢ ᠬᠡᠪ ᠦᠨ ᠪᠤᠰᠤ á ‚ á ¶á  á ­ ᠬᠢᠵᠦ ᠪᠠᠶᠢᠭ᠎ᠠ ᠬᠠᠮᠲᠤᠪᠠᠷ ᠡᠳᠯᠡᠬᠦ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠤᠯᠲᠠ ᠶᠢᠨ ᠠᠵᠢᠯ ᠪᠠᠶᠢᠬᠤ ᠡᠰᠡᠬᠦ á ¶á ¢ ᠨᠤᠲᠠᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠳᠠᠬᠢᠨ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠵᠤ ᠬᠠᠮᠲᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ á ¶á ¢ ᠨᠤᠲᠠᠯᠠᠭᠠᠷᠠᠢ ! User ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ Writable ᠪᠢᠴᠢᠬᠦ Readonly ᠵᠦᠪᠬᠡᠨ ᠤᠩᠰᠢᠬᠤ Reject ᠲᠡᠪᠴᠢᠬᠦ á ¡á ´á ¡ ᠲᠠᠲᠠᠭᠠᠯᠵᠠᠪᠠ á ƒ Share permission settings ᠬᠠᠮᠲᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ ᠡᠷᠬᠡ ᠮᠡᠳᠡᠯ ᠦᠨ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠤᠯᠲᠠ á ƒ delete ᠬᠠᠰᠤᠬᠤ Add ᠨᠡᠮᠡᠬᠦ Save ᠪᠠᠳᠤᠯᠠᠬᠤ Cancel ᠦᠭᠡᠢᠰᠬᠡᠬᠦ NetUsershareHelper Peony-Qt-Share-Extension 共享 Peony::SharePropertiesPagePlugin Peony Qt Share Extension ᠬᠠᠮᠳᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ Allow user share folders ᠹᠠᠢᠯ ᠤ᠋ᠨ ᠬᠠᠪᠳᠠᠰᠤ ᠵᠢ ᠬᠠᠮᠳᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ ᠵᠢ ᠵᠦᠪᠰᠢᠶᠡᠷᠡᠬᠦ SharePage Share folder ᠹᠠᠢᠯ ᠤ᠋ᠨ ᠬᠠᠪᠳᠠᠰᠤ ᠵᠢ ᠬᠠᠮᠳᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ Share: 共享: Warning ᠠᠨᠭᠬᠠᠷᠠᠭᠤᠯᠬᠤ The share name must not contain %1, and cannot start with a dash (-) or whitespace, or end with whitespace. ᠬᠠᠮᠲᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ ᠨᠡᠷᠡᠶᠢᠳᠦᠯ ᠨᠢ 1 ᠪᠠᠭᠲᠠᠵᠤ ᠪᠣᠯᠬᠤ ᠦᠭᠡᠶ ᠮᠥᠷᠲᠡᠭᠡᠨ ᠣᠬᠣᠷ ᠱᠤᠭᠤᠮ ( — ) ᠪᠤᠶᠤ ᠬᠣᠭᠣᠰᠣᠨ ᠵᠠᠶ ᠪᠠᠷ ᠡᠬᠢᠯᠡᠵᠦ ᠪᠣᠯᠬᠤ ᠦᠭᠡᠶ á ‚ ᠬᠣᠭᠣᠰᠣᠨ ᠵᠠᠩ ᠢᠶᠠᠷ ᠲᠡᠭᠦᠰᠬᠡᠵᠦ ᠪᠣᠯᠬᠤ ᠦᠭᠡᠶ á ƒ The share name cannot be the same as the current user name ᠬᠠᠮᠲᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ ᠨᠡᠷᠡᠶᠢᠳᠦᠯ ᠨᠢ ᠣᠳᠣᠬᠠᠨ á ¤ ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢ ᠶᠢᠨ ᠨᠡᠷ᠎ᠡ ᠲᠡᠶ ᠠᠳᠠᠯᠢ ᠪᠠᠶᠢᠵᠤ ᠪᠣᠯᠬᠤ ᠦᠭᠡᠶ᠃ The share name cannot be the same as an existing user name question ᠠᠰᠠᠭᠤᠳᠠᠯ á ƒ The share name is already used by other users. You can rename the folder and then set the share. ᠬᠠᠮᠲᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ ᠨᠡᠷᠡᠶᠢᠳᠦᠯ á ¢ ᠪᠤᠰᠤᠳ ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢ ᠳᠦ ᠬᠡᠷᠡᠭᠯᠡᠭᠳᠡᠵᠡᠢ á ƒ ᠲᠠ ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ ᠬᠠᠪᠤᠳᠠᠷ á ¢ ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠯᠡᠭᠦᠯᠵᠦ á ‚ ᠳᠠᠷᠠᠭ᠎ᠠ ᠨᠢ ᠬᠠᠮᠲᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ ᠪᠡᠷ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠵᠤ ᠪᠣᠯᠣᠨ᠎ᠠ᠃ The share name already exists, do you want to replace the original share folder? The folder is currently shared in non-read-only mode, and setting up the share requires adding other people's write permissions to the current folder? ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠸᠷᠢᠶᠠᠯ á ¢ ᠤᠲᠤᠬᠠᠨ ᠳᠤ ᠵᠦᠪᠭᠡᠨ ᠤᠩᠰᠢᠬᠤ ᠪᠤᠰᠤ ᠵᠠᠭᠪᠤᠷ ᠢᠶᠡᠷ ᠬᠠᠮᠲᠦ ᠪᠡᠷ ᠡᠳᠯᠡᠵᠦ á ‚ ᠬᠠᠮᠲᠦ ᠪᠡᠷ ᠡᠳᠯᠡᠭᠦ ᠳᠤ ᠪᠤᠰᠤᠳ ᠬᠦᠮᠦᠨ á ¤ ᠪᠢᠴᠢᠵᠦ ᠤᠷᠤᠭᠤᠯᠬᠤ ᠡᠷᠬᠡ ᠶᠢᠨ ᠬᠡᠪᠴᠢᠶ᠎ᠠ á ¶á ¢ ᠤᠲᠤᠬᠠᠨ á ¤ ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠸᠷᠢᠶᠠᠯ ᠤᠨ ᠬᠠᠪᠴᠢᠭᠤᠯᠤᠯ ᠳᠤ ᠨᠡᠮᠡᠭᠦ ᠬᠡᠷᠡᠭᠲᠡᠢ ᠤᠤ ソ Confirm adding permissions ᠨᠡᠮᠡᠯᠲᠡ ᠡᠳ᠋ ᠦᠨ ᠡᠷᠬᠡ ᠮᠡᠳᠡᠯ á ¢ ᠨᠤᠲᠠᠯᠠᠨ ᠲᠣᠭᠲᠠᠭᠠᠬᠤ ᠬᠡᠷᠡᠭᠲᠡᠶ᠃ Cancel ᠦᠭᠡᠢᠰᠬᠡᠬᠦ The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions for the current file and all others in the parent directory? Allow others to create and delete files The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions of the current file and others in the ancestor directory? ᠲᠤᠰ ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ á ¢ ᠣᠳᠣᠬᠠᠨ ᠳᠤ ᠨᠡᠷ᠎ᠡ ᠪᠡᠨ ᠲᠣᠳᠣᠷᠬᠠᠶᠢᠯᠠᠨ ᠠᠶᠢᠯᠴᠢᠯᠠᠵᠤ ᠬᠠᠮᠲᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ ᠳᠦ ᠣᠳᠣᠬᠠᠨ á ¤ ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠪᠣᠯᠤᠨ ᠡᠪᠦᠭᠡ ᠽᠦ ᠰᠢᠶᠠᠨ á ¤ á ­á  á ·á ´á  á ­ ᠲᠠᠬᠢ ᠪᠤᠰᠤᠳ ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ ᠬᠡᠷᠡᠭᠵᠢᠭᠦᠯᠬᠦ ᠡᠷᠬᠡ ᠮᠡᠳᠡᠯ á ¢ ᠠᠦ᠋ᠲ᠋ᠣ᠋ ᠪᠠᠷ ᠨᠡᠮᠡᠭᠳᠡᠭᠦᠯᠬᠦ ᠴᠢᠬᠤᠯᠠᠲᠠᠶ ᠤᠤ ? Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share! ᠬᠠᠮᠲᠤᠪᠠᠷ ᠡᠳᠯᠡᠵᠦ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠬᠤ ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠡ ᠨᠢ ᠬᠡᠪ ᠦᠨ ᠪᠤᠰᠤ á ‚ á ¶á  á ­ ᠬᠢᠵᠦ ᠪᠠᠶᠢᠭ᠎ᠠ ᠬᠠᠮᠲᠤᠪᠠᠷ ᠡᠳᠯᠡᠬᠦ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠤᠯᠲᠠ ᠶᠢᠨ ᠠᠵᠢᠯ ᠪᠠᠶᠢᠬᠤ ᠡᠰᠡᠬᠦ á ¶á ¢ ᠨᠤᠲᠠᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠳᠠᠬᠢᠨ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠵᠤ ᠬᠠᠮᠲᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ á ¶á ¢ ᠨᠤᠲᠠᠯᠠᠭᠠᠷᠠᠢ ! Samba set user password ᠰᠠᠩᠪᠠ ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢᠳ ᠦᠨ ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠤᠨ᠎ᠠ á ƒ Samba password: ᠰᠠᠩᠪᠠ ᠶᠢᠨ ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ Samba set password failed, Please re-enter! ᠰᠠᠩᠪᠠ ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠵᠤ ᠢᠯᠠᠭᠳᠠᠯ ᠳᠤ ᠣᠷᠣᠭᠤᠯᠵᠠᠢ á ‚ ᠳᠠᠬᠢᠨ ᠣᠷᠣᠭᠤᠯᠬᠤ ᠪᠣᠯᠪᠠᠤ ! usershare ᠳᠤᠰ ᠮᠠᠰᠢᠨ ᠤ᠋ ᠬᠠᠮᠳᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ share this folder ᠳᠤᠰ ᠹᠠᠢᠯ ᠤ᠋ᠨ ᠬᠠᠪᠳᠠᠰᠤ ᠵᠢ ᠬᠠᠮᠳᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ don`t share this folder ᠳᠤᠰ ᠹᠠᠢᠯ ᠤ᠋ᠨ ᠬᠠᠪᠳᠠᠰᠤ ᠵᠢ ᠬᠠᠮᠳᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ ᠦᠬᠡᠢ Share name: ᠬᠠᠮᠳᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ ᠨᠡᠷ᠎ᠡ: Read Only ᠵᠦᠪᠬᠡᠨ ᠤᠩᠰᠢᠬᠤ Allow Anonymous ᠵᠤᠷᠴᠢᠭᠴᠢ ᠠᠢᠯᠴᠢᠯᠠᠬᠤ ᠵᠢ ᠵᠦᠪᠰᠢᠶᠡᠷᠡᠬᠦ Advanced Sharing ᠳᠡᠭᠡᠳᠦ ᠵᠡᠷᠭᠡ ᠶᠢᠨ ᠬᠠᠮᠲᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠨ᠎ᠡ á ƒ Comment: ᠳᠠᠢᠯᠪᠤᠷᠢ: peony-extensions/peony-share/app/share-properties-page-plugin.cpp0000664000175000017500000000721015257160277024263 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2019, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * Authors: Meihong * */ #include "share-properties-page-plugin.h" #include "share-page.h" #include "emblem-provider.h" #include "share-emblem-provider.h" #include #include #include #include #include #include #include using namespace Peony; SharePropertiesPagePlugin *global_instance = nullptr; SharePropertiesPagePlugin *SharePropertiesPagePlugin::getInstance() { return global_instance; } SharePropertiesPagePlugin::SharePropertiesPagePlugin(QObject *parent) : QObject(parent) { qDebug()<<"init"; QTranslator *t = new QTranslator(this); qDebug()<<"\n\n\n\n\n\n\n SharePropertiesPagePlugin translate:"<load(":/translations/peony-share-extension_"+QLocale::system().name()); QFile file(":/translations/peony-share-extension_"+QLocale::system().name()+".ts"); qDebug()<<"file:"<registerProvider(ShareEmblemProvider::getInstance()); global_instance = this; } bool SharePropertiesPagePlugin::supportUris(const QStringList &uris) { if (uris.count() != 1) { return false; } //fix kylin security tool box-manager path can be shared issue if (uris.first().startsWith("file:///box")) { return false; } auto info = FileInfo::fromUri(uris.first()); if (info->displayName().isNull()) { FileInfoJob j(info); j.querySync(); } if (!info->isDir() || info->isVirtual() || !info->uri().startsWith("file:///")) { return false; } // don't share user's home directory file:///home/xxx/ QStringList file = info->uri().split('/', Qt::SkipEmptyParts); if ((3 == file.size ()) && (file.at(1) == "home")) { return false; } // don't share directory that has no permission if (!info->canRead() || !info->canWrite() || !info->canExecute()) { return false; } g_autoptr(GFile) gFile = g_file_new_for_uri(info->uri().toUtf8().constData()); if(gFile) { g_autoptr(GFileInfo) gInfo = g_file_query_info(gFile, "owner::*", G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nullptr, nullptr); if (gInfo) { QString ownerUser = g_file_info_get_attribute_string(gInfo, G_FILE_ATTRIBUTE_OWNER_USER); QString userName = qgetenv("USER"); if (0 != QString::compare(ownerUser, userName)) { return false; } } } return true; } PropertiesWindowTabIface * SharePropertiesPagePlugin::createTabPage(const QStringList &uris) { return new SharePage(uris.first()); } peony-extensions/peony-share/app/app.pro0000664000175000017500000000346615257160277017370 0ustar fengfengQT += core gui widgets concurrent dbus TARGET = peony-share TEMPLATE = lib DEFINES += PEONYSHARE_LIBRARY DEFINES += DBUS_NAME=\\\"org.ukui.samba.share.config\\\" DEFINES += DBUS_PATH=\\\"/org/ukui/samba/share\\\" include(../../common.pri) PKGCONFIG += peony kysdk-qtwidgets polkit-gobject-1 CONFIG += link_pkgconfig \ c++11 \ plugin \ debug SOURCES += share-page.cpp \ advanced-share-page.cpp \ share-emblem-provider.cpp \ samba-config-thread.cpp \ share-properties-page-plugin.cpp \ samba-config-interface.cpp \ systemd-bus-accounts.cpp HEADERS += share-page.h \ advanced-share-page.h \ share-emblem-provider.h \ samba-config-thread.h \ share-properties-page-plugin.h \ samba-config-interface.h \ systemd-bus-accounts.h TRANSLATIONS += translations/peony-share-extension_cs.ts \ translations/peony-share-extension_de.ts \ translations/peony-share-extension_es.ts \ translations/peony-share-extension_fr.ts \ translations/peony-share-extension_kk_KZ.ts \ translations/peony-share-extension_ug_CN.ts \ translations/peony-share-extension_ky_KG.ts \ translations/peony-share-extension_tr.ts \ translations/peony-share-extension_zh_CN.ts \ translations/peony-share-extension_bo_CN.ts \ translations/peony-share-extension_mn.ts \ translations/peony-share-extension_zh_HK.ts #RESOURCES += resources.qrc CONFIG += lrelease embed_translations QM_FILES_RESOURCE_PREFIX = /translations/ target.path = $$[QT_INSTALL_LIBS]/peony-extensions INSTALLS += target DISTFILES += \ translations/peony-share-extension_bo_CN.ts peony-extensions/peony-share/app/share-emblem-provider.cpp0000664000175000017500000001103715257160277022754 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2021, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Wenjie Xiang * */ #include "share-emblem-provider.h" #include #include using namespace Peony; static ShareEmblemProvider *global_instance = nullptr; ShareEmblemProvider *ShareEmblemProvider::getInstance() { if(!global_instance) global_instance = new ShareEmblemProvider; return global_instance; } const QString ShareEmblemProvider::emblemKey() { return SHARE_EMBLEMS; } QStringList ShareEmblemProvider::getFileEmblemIcons(const QString &uri) { QStringList lists; if (uri.startsWith("file:///")) { auto fileInfo = FileXattrInfo::fromUri(uri); if(fileInfo && !fileInfo->getXattrInfoString(SHARE_EMBLEMS).isEmpty()){ lists.append(fileInfo->getXattrInfoString(SHARE_EMBLEMS)); } } return lists; } ShareEmblemProvider::ShareEmblemProvider(QObject *parent) { Q_UNUSED(parent); } std::shared_ptr FileXattrInfo::fromUri(const QString &uri) { return std::make_shared(uri); } FileXattrInfo::FileXattrInfo(const QString &uri) { m_uri = uri; g_autoptr(GFile) file = g_file_new_for_uri(m_uri.toUtf8().constData()); if (file) { g_autoptr(GFileInfo) fileInfo = g_file_query_info(file, "xattr::*", G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nullptr, nullptr); if (fileInfo) { char **xattrinfo_attributes = g_file_info_list_attributes(fileInfo, "xattr"); if(xattrinfo_attributes){ for (int i = 0; xattrinfo_attributes[i] != nullptr; i++) { auto type = g_file_info_get_attribute_type(fileInfo, xattrinfo_attributes[i]); switch (type) { case G_FILE_ATTRIBUTE_TYPE_STRING: { char *string = g_file_info_get_attribute_as_string(fileInfo, xattrinfo_attributes[i]); if (string) { auto var = QVariant(QString::fromUtf8(string)); this->setXattrInfoString(xattrinfo_attributes[i], var.toString(), false); //qDebug()<<"xattrinfo_attributes======"<m_uri.toUtf8().constData()); GError *err = nullptr; g_file_set_attribute(file, realKey.toLatin1().data(), G_FILE_ATTRIBUTE_TYPE_STRING, (gpointer)value.toUtf8().data(), G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nullptr, &err); if (err) { qWarning() << err->message; g_error_free(err); } else { m_hash.remove(realKey); m_hash.insert(realKey, value); } } else { m_hash.remove(realKey); m_hash.insert(realKey, value); } qDebug() << "setXattrInfoString" << m_hash; } const QString FileXattrInfo::getXattrInfoString(const QString &key) { QString realKey = key; if (!key.startsWith("xattr::")) realKey = "xattr::" + key; if (m_hash.value(realKey).isValid()) return m_hash.value(realKey).toString(); //FIXME: should i use gio query meta here? return QString(); } void FileXattrInfo::removeXattrInfo(const QString &key) { //FIXME: Failed to set invalid type this->setXattrInfoString(key, " ", true); } peony-extensions/peony-share/app/advanced-share-page.cpp0000664000175000017500000005001015257160277022334 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2022, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Wenjie Xiang * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "advanced-share-page.h" #include "usershare-manager.h" #include "samba-config-interface.h" #include "global-settings.h" static const QString everyone = "Everyone"; static const int labelWidth = 310; AdvancedSharePage::AdvancedSharePage(const QString &uri, const QMap &userInfo, QWidget *parent) : QWidget(parent) { m_userInfo = userInfo; m_uri = uri; this->init(); } AdvancedSharePage::~AdvancedSharePage() { } void AdvancedSharePage::init() { this->setWindowTitle(tr("Advanced share")); this->setWindowIcon(QIcon::fromTheme("system-file-manager")); this->setContextMenuPolicy(Qt::CustomContextMenu); this->setAttribute(Qt::WA_DeleteOnClose); this->setFixedSize(460, 600); this->setContentsMargins(0, 10, 0, 0); this->setWindowFlags(this->windowFlags() & ~Qt::WindowMinMaxButtonsHint & ~Qt::WindowSystemMenuHint); this->setWindowModality(Qt::ApplicationModal); m_layout = new QVBoxLayout(this); m_layout->setContentsMargins(0, 0, 0, 0); m_layout->setSpacing(0); this->updateShareUserInfo(); this->initFloorOne(); this->initFloorTwo(); this->addSeparate(); this->initFloorThree(); this->addSeparate(); this->initFloorFour(); connect(m_listWidget, &QListWidget::currentTextChanged, this, [=](QString currentText){ if (!m_userInfo.contains(currentText)) { m_addShareUserBtn->setEnabled(true); } else { m_addShareUserBtn->setEnabled(false); } m_listLabel->setText(currentText); updateLabelShow(m_listLabel, currentText); }); connect(m_addShareUserBtn, &QPushButton::clicked, this, [=](){ QListWidgetItem *item = m_listWidget->currentItem(); if (nullptr != item) { QString name = item->text(); QString username = g_get_user_name(); auto settings = GlobalSettings::getInstance(); bool runbackend = settings->getInstance()->getValue(RESIDENT_IN_BACKEND).toBool(); qApp->setQuitOnLastWindowClosed(false); //没有设置samba密ç �:1)设置当å‰�用户samba密ç � 2)æ��示其他用户需è¦�设置samba密ç � SambaConfigInterface si(DBUS_NAME, DBUS_PATH, QDBusConnection::systemBus()); bool initRet = si.init(name, getpid(), getuid()); bool ret = false; if (initRet) { if (!si.hasPasswd() && username == name) { bool ok = false; QInputDialog dlg; dlg.setLabelText(tr("Samba password:")); dlg.setTextEchoMode(QLineEdit::Password); dlg.setWindowTitle(tr("Samba set user password")); dlg.setWindowIcon(QIcon::fromTheme("system-file-manager")); dlg.setFixedSize(470,150); ok = dlg.exec(); QString text = dlg.textValue(); if (ok && !text.isNull() && !text.isEmpty()) { if (!si.setPasswd(text)) { qApp->setQuitOnLastWindowClosed(!runbackend); QMessageBox::warning(nullptr, tr("Warning"), tr("Samba set password failed, Please re-enter!")); ret = true; } } else { qApp->setQuitOnLastWindowClosed(!runbackend); ret = true; } } else if (!si.hasPasswd() && username != name) { QMessageBox::information(nullptr, tr("Tips"), tr("The user has not set the samba password. If you need to log in to %1, you can set it in the upper right menu of the file manager").arg(name)); } } else { qApp->setQuitOnLastWindowClosed(!runbackend); QMessageBox::warning(nullptr, tr("Warning"), tr("Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share!"), QMessageBox::Ok); ret = true; } si.finished(); if (ret) { return; } //增加用户默认设置 m_mutex.lock(); m_userInfo.insert(name, "r"); m_mutex.unlock(); m_addShareUserBtn->setEnabled(false); int rowCount = m_tabWidget->rowCount(); m_tabWidget->insertRow(rowCount); QTableWidgetItem* itemC = new QTableWidgetItem(name); itemC->setFlags(itemC->flags() | Qt::ItemIsSelectable); itemC->setToolTip(name); m_tabWidget->setItem(rowCount, 0, itemC); QButtonGroup *group = new QButtonGroup; for (int i = 1; i < 4; ++i) { m_tabWidget->setCellWidget(rowCount, i, nullptr); QWidget *w = new QWidget(m_tabWidget); QHBoxLayout *l = new QHBoxLayout(w); l->setContentsMargins(0, 0, 0, 0); w->setLayout(l); l->setAlignment(Qt::AlignCenter); auto checkbox = new QCheckBox(w); bool check = updateCheckBox(i, name); checkbox->setChecked(check); group->addButton(checkbox); l->addWidget(checkbox); m_tabWidget->setCellWidget(rowCount, i, w); } } }); connect(m_delShareUserBtn, &QPushButton::clicked, this, [=](){ QTableWidgetItem *item = m_tabWidget->currentItem(); if (nullptr != item) { QString name = item->text(); if (m_userInfo.contains(name)) { m_mutex.lock(); m_userInfo.remove(name); m_mutex.unlock(); int currentRow = m_tabWidget->currentRow(); m_tabWidget->removeRow(currentRow); if (m_tabWidget->rowCount() <= 1) { m_delShareUserBtn->setEnabled(false); } } } }); connect(m_saveBtn, &QPushButton::clicked, this, [=](){ for (int row = 0; row < m_tabWidget->rowCount(); ++row) { for (int col = 0; col < m_tabWidget->columnCount(); ++col) { if (col == 0) { continue; } QWidget *w = m_tabWidget->cellWidget(row, col); QCheckBox *box = w->findChild(); updateUserInfo(row, col, box->isChecked()); } } QString acl; QString rejectStr; QString otherStr; QMap::iterator iter; for(iter = m_userInfo.begin();iter != m_userInfo.end();iter++){ QString str = iter.key() + ":" + iter.value() + ","; if (iter.value().compare("d", Qt::CaseInsensitive) == 0) { rejectStr.append(str); } else { otherStr.append(str); } } acl.append(rejectStr); acl.append(otherStr); QString aclPerms = parseSetAcl(m_userInfo); auto info = FileInfo::fromUri(m_uri); //Clear previous acl permissions bool retb; bool retm; QStringList args; args << "/usr/bin/setfacl" << "-b" << QString("\"%1\"").arg(info->filePath()); QString result = UserShareInfoManager::exectueSetAclCommand(args, &retb); if (!retb && !result.isEmpty()) { return; } args.clear(); args << "/usr/bin/setfacl" << "-m" << aclPerms << QString("\"%1\"").arg(info->filePath()); result = UserShareInfoManager::exectueSetAclCommand(args, &retm); if (!retm && !result.isEmpty()) { return; } acl.chop(1); Q_EMIT getUserInfo(acl, m_userInfo); this->close(); }); connect(m_cancelBtn, &QPushButton::clicked, this, [=](){ m_userInfo.clear(); this->close(); }); connect(m_tabWidget, &QTableWidget::cellEntered, this, &AdvancedSharePage::updateDelBtnState); connect(m_tabWidget, &QTableWidget::cellClicked, this, &AdvancedSharePage::updateDelBtnState); connect(m_tabWidget, &QTableWidget::itemClicked, this, [=](QTableWidgetItem *item){ if (nullptr != item) { m_tabLabel->setText(item->text()); updateLabelShow(m_tabLabel, item->text()); } }); } void AdvancedSharePage::initTableWidget() { m_tabWidget = new QTableWidget(this); m_tabWidget->setColumnCount(4); m_tabWidget->verticalHeader()->setVisible(false); m_tabWidget->verticalHeader()->setMinimumSectionSize(12); m_tabWidget->horizontalHeader()->setFrameShape(QFrame::NoFrame); m_tabWidget->setFrameShape(QFrame::NoFrame); m_tabWidget->horizontalHeader()->setSelectionMode(QTableWidget::NoSelection); m_tabWidget->verticalHeader()->setSelectionMode(QTableWidget::NoSelection); m_tabWidget->setSelectionMode(QTableWidget::SingleSelection); m_tabWidget->setSelectionBehavior(QAbstractItemView::SelectItems); m_tabWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); m_tabWidget->setShowGrid(false); m_tabWidget->horizontalHeader()->setMinimumHeight(34); m_tabWidget->rowHeight(34); m_tabWidget->setAlternatingRowColors(true); auto l = QStringList(); l<setHorizontalHeaderLabels(l); m_tabWidget->setEditTriggers(QTableWidget::NoEditTriggers); m_tabWidget->horizontalHeader()->setMinimumSectionSize(30); m_tabWidget->horizontalHeader()->setMaximumSectionSize(400); m_tabWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Interactive); m_tabWidget->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch); m_tabWidget->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch); m_tabWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); //m_tabWidget->horizontalHeaderItem(0)->setTextAlignment(Qt::AlignLeft); m_tabWidget->setColumnWidth(0, 100); m_tabWidget->setColumnWidth(3, 80); m_layout->addWidget(m_tabWidget); if (m_userInfo.isEmpty()) { m_userInfo.insert(everyone, "r"); } int rowCount = m_userInfo.count(); m_tabWidget->setRowCount(rowCount); //Add Everyone QTableWidgetItem* itemR0C0 = new QTableWidgetItem(everyone); itemR0C0->setFlags(itemR0C0->flags() | Qt::ItemIsSelectable); itemR0C0->setToolTip(everyone); m_tabWidget->setItem(0, 0, itemR0C0); QButtonGroup *group = new QButtonGroup; for (int i = 1; i < 4; ++i) { m_tabWidget->setCellWidget(0, i, nullptr); QWidget *w = new QWidget(m_tabWidget); QHBoxLayout *l = new QHBoxLayout(w); l->setContentsMargins(0, 0, 0, 0); w->setLayout(l); l->setAlignment(Qt::AlignCenter); auto checkbox = new QCheckBox(w); bool check = updateCheckBox(i, const_cast(everyone)); checkbox->setChecked(check); group->addButton(checkbox); l->addWidget(checkbox); m_tabWidget->setCellWidget(0, i, w); } //All usershare QMap::iterator iter; int row = 1; for(iter = m_userInfo.begin();iter != m_userInfo.end();iter++){ QString key = iter.key(); if (iter.key() == everyone) { continue; } QTableWidgetItem* itemC0 = new QTableWidgetItem(key); itemC0->setFlags(itemC0->flags() | Qt::ItemIsSelectable); itemC0->setToolTip(key); m_tabWidget->setItem(row, 0, itemC0); QButtonGroup *group = new QButtonGroup; for (int j = 1; j < 4; ++j) { m_tabWidget->setCellWidget(row, j, nullptr); QWidget *w = new QWidget(m_tabWidget); QHBoxLayout *l = new QHBoxLayout(w); l->setContentsMargins(0, 0, 0, 0); w->setLayout(l); l->setAlignment(Qt::AlignCenter); auto checkbox = new QCheckBox(w); bool check = updateCheckBox(j, key); checkbox->setChecked(check); group->addButton(checkbox); l->addWidget(checkbox); m_tabWidget->setCellWidget(row, j, w); } ++row; } } void AdvancedSharePage::initListWidget() { QVBoxLayout *vBoxLayout = new QVBoxLayout; vBoxLayout->setContentsMargins(22, 0, 22, 0); m_listWidget = new QListWidget(this); m_listWidget->setUniformItemSizes(true); m_listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_sysAccounts = new SystemDbusAccounts(this); QStringList m_userNames = m_sysAccounts->getAllUserNames(); if (!m_userNames.isEmpty()) { for (QString user : m_userNames) { auto item = new QListWidgetItem(user, m_listWidget); m_listWidget->addItem(item); } } vBoxLayout->addWidget(m_listWidget); m_layout->addLayout(vBoxLayout); } void AdvancedSharePage::initFloorOne() { m_label = new QLabel(tr("Share permission settings"), this); m_label->setContentsMargins(22, 0, 22, 0); m_layout->addWidget(m_label); } void AdvancedSharePage::initFloorTwo() { this->initTableWidget(); m_layout->addSpacing(10); QHBoxLayout *hBoxLayout = new QHBoxLayout; hBoxLayout->setContentsMargins(22, 0, 22, 0); hBoxLayout->setSpacing(0); m_delShareUserBtn = new QPushButton(tr("delete")); m_tabLabel = new QLabel; m_delShareUserBtn->setEnabled(false); hBoxLayout->addWidget(m_tabLabel, 3); hBoxLayout->addSpacing(10); hBoxLayout->addWidget(m_delShareUserBtn, 1); m_layout->addLayout(hBoxLayout); m_layout->addSpacing(10); } void AdvancedSharePage::initFloorThree() { m_layout->addSpacing(10); this->initListWidget(); QHBoxLayout *hBoxLayout = new QHBoxLayout; hBoxLayout->setContentsMargins(22, 0, 22, 0); hBoxLayout->setSpacing(0); m_addShareUserBtn = new QPushButton(tr("Add")); m_listLabel = new QLabel; m_addShareUserBtn->setEnabled(false); hBoxLayout->addWidget(m_listLabel, 3); hBoxLayout->addSpacing(10); hBoxLayout->addWidget(m_addShareUserBtn, 1); m_layout->addSpacing(10); m_layout->addLayout(hBoxLayout); m_layout->addSpacing(10); } void AdvancedSharePage::initFloorFour() { m_layout->addSpacing(10); QHBoxLayout *hBoxLayout2 = new QHBoxLayout; hBoxLayout2->setContentsMargins(22, 0, 22, 0); hBoxLayout2->setSpacing(0); m_saveBtn = new QPushButton(tr("Save")); m_cancelBtn = new QPushButton(tr("Cancel")); hBoxLayout2->addStretch(1); hBoxLayout2->addWidget(m_saveBtn); hBoxLayout2->addSpacing(10); hBoxLayout2->addWidget(m_cancelBtn); m_layout->addLayout(hBoxLayout2); m_layout->addSpacing(16); } void AdvancedSharePage::updateShareUserInfo() { if (m_userInfo.isEmpty()) { auto info = FileInfo::fromUri(m_uri); auto manager = UserShareInfoManager::getInstance(); QString displayName = info->displayName(); QString acl = manager->getUserShareAcl(displayName); parseUserShareAcl(acl); } } void AdvancedSharePage::parseUserShareAcl(QString strAcl) { //ä¼ å�‚æ ¼å¼�为:XWJ-PC\\xwj:D,Everyone:F,S-1-5-21-120585688-1972774468-4199965856-1003:F,Unix User\\samba:D, //或者为:xwj:D,Everyone:F,kylin:F,samba:D, if (!strAcl.isEmpty()) { QStringList strAcls = strAcl.split(','); if (strAcls.last().isEmpty()) { strAcls.removeLast(); } for (QString acl : strAcls) { QStringList users = acl.split(':'); QString name = users.at(0); QString usershareAcl = users.at(1); if (name.contains("\\")) { //处ç�†ç”¨æˆ·ä¸ºï¼šUnix User\\samba:D的情况 int index = name.indexOf("\\"); name.remove(0, index + 1); } //统一处ç�†ç”¨æˆ· m_mutex.lock(); m_userInfo.insert(name, usershareAcl); m_mutex.unlock(); } } } bool AdvancedSharePage::updateCheckBox(int col, QString &name) { bool ret = false; if (name.isEmpty() || col < 0) { return ret; } if (col == 1 && m_userInfo.value(name).compare("f", Qt::CaseInsensitive) == 0) { ret = true; } else if (col == 2 && m_userInfo.value(name).compare("r", Qt::CaseInsensitive) == 0) { ret = true; } else if (col == 3 && m_userInfo.value(name).compare("d", Qt::CaseInsensitive) == 0) { ret = true; } return ret; } void AdvancedSharePage::updateUserInfo(int row, int col, bool checked) { if (checked && col >= 1) { QTableWidgetItem *item = m_tabWidget->item(row, 0); if (nullptr != item && m_userInfo.contains(item->text())) { if (col == 1) { m_userInfo.remove(item->text()); m_userInfo.insert(item->text(), "f"); } else if (col == 2) { m_userInfo.remove(item->text()); m_userInfo.insert(item->text(), "r"); } else if (col == 3) { m_userInfo.remove(item->text()); m_userInfo.insert(item->text(), "d"); } } } } QString AdvancedSharePage::parseSetAcl(QMap &userInfo) { QString aclPerms; QMap::iterator iter; for(iter = userInfo.begin();iter != userInfo.end();iter++){ QString tmp; QString tmp2; QString perm = converPermission(iter.value()); if (iter.key() == everyone) { tmp = "d:u:nobody:" + perm; tmp2 = "u:nobody:" + perm; } else { tmp = "d:u:" + iter.key() + ":" + perm; tmp2 = "u:" + iter.key() + ":" + perm; } aclPerms.append(tmp + ","); aclPerms.append(tmp2 + ","); } return aclPerms; } QString AdvancedSharePage::converPermission(QString &usershareAcl) { QString acls; if (!usershareAcl.isEmpty()) { if (usershareAcl.compare("f", Qt::CaseInsensitive) == 0) { acls = "rwx"; } else if (usershareAcl.compare("r", Qt::CaseInsensitive) == 0) { acls = "r-x"; } else if (usershareAcl.compare("d", Qt::CaseInsensitive) == 0) { acls = "--x"; } } return acls; } void AdvancedSharePage::updateLabelShow(QLabel *label, const QString &str) { int fontSize = label->fontMetrics().horizontalAdvance(str); QString tmp = str; if(fontSize > labelWidth) { label->setToolTip(str); tmp = label->fontMetrics().elidedText(str, Qt::ElideMiddle, labelWidth); } label->setText(tmp); } void AdvancedSharePage::addSeparate() { QPushButton *separate = new QPushButton; separate->setFixedHeight(1); separate->setFocusPolicy(Qt::NoFocus); separate->setEnabled(false); m_layout->addWidget(separate); } void AdvancedSharePage::updateDelBtnState(int row, int col) { if (col >= 1) { m_delShareUserBtn->setEnabled(false); } else if (col == 0 && row != 0) { m_delShareUserBtn->setEnabled(true); } else if (col == 0 && row == 0) { m_delShareUserBtn->setEnabled(false); } if (col >= 1) { m_tabLabel->setText(""); } } peony-extensions/peony-share/app/systemd-bus-accounts.h0000664000175000017500000000277715257160264022333 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2022, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Wenjie Xiang * */ #ifndef SYSTEMDBUSACCOUNTS_H #define SYSTEMDBUSACCOUNTS_H #include #include #include #include class SystemDbusAccounts : public QObject { Q_OBJECT public: explicit SystemDbusAccounts(QObject *parent = nullptr); ~SystemDbusAccounts(); QStringList getListCachedUsers(); QStringList getAllUserNames(); QString getUserName(QString objectPath); public Q_SLOTS: void createUserSuccess(QDBusObjectPath objectPath); void deleteUserSuccess(QDBusObjectPath objectPath); Q_SIGNALS: void createUserDone(QString path); void deleteUserDone(QString path); private: QDBusInterface *m_systemInterface = nullptr; }; #endif // SYSTEMDBUSACCOUNTS_H peony-extensions/peony-share/app/share-page.h0000664000175000017500000000657215257160264020250 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2019, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef SHAREPAGE_H #define SHAREPAGE_H #include #include #include #include #include #include #include #include #include #include #include #include #include "kswitchbutton.h" using namespace kdk; //#include "libpeony-qt/usershare-manager.h" using namespace Peony; class SharePage : public Peony::PropertiesWindowTabIface { Q_OBJECT public: explicit SharePage(const QString &uri, QWidget *parent = nullptr); void addSeparate() { QFrame * separate = new QFrame(this); separate->setContentsMargins(0, 0, 0, 0); separate->setFrameShape(QFrame::HLine); QPalette palette = separate->palette(); palette.setColor(QPalette::WindowText,QColor("#F0F0F0FF")); separate->setPalette(palette); m_layout->addWidget(separate); } void init(); void initFloorOne(); void initFloorTwo(); void initFloorThree(); /*! * å“�应确定按钮 * \brief */ void saveAllChange() override; bool checkAuthorization(); bool checkSpecialSymbols(const QString& displayName); void delayExit(); void recursiveAddOtherExecute(const QString &uri, const bool &runbackend); bool addOtherWrite(const QString &uri, const bool &runbackend); void removeShareEmblem(const QString &uri); void removeShareInfo(const QString &name); void clearAclInfo(const QString &filePath); bool addShareInfo(ShareInfo& shareInfo, const QString usershareAcl); void addShareEmblem(const QString &uri); private: QFutureWatcher *m_theFutureWatcher = nullptr; Peony::ShareInfo m_shareInfo; QVBoxLayout* m_layout = nullptr; std::shared_ptr m_fileInfo = nullptr; //floor1 QLabel *m_iconLabel = nullptr; QLabel *m_folderName = nullptr; QLabel *m_sharedState = nullptr; //floor2 KSwitchButton *m_switchButton = nullptr; //floor3 QFrame *m_floor3 = nullptr; QLineEdit *m_shareNameEdit = nullptr; QLineEdit *m_commentEdit = nullptr; QPushButton *m_advanceShareButton = nullptr; QCheckBox *m_allowGuestModify = nullptr; QCheckBox *m_shareAllowGuestCheckBox = nullptr; bool m_ret = false; bool m_has_unix_mode = false; QString m_usershareAcl; QMap m_userInfoCache; QString m_originalPath; QString m_name; const ShareInfo *m_stmp = nullptr; }; #endif // SHAREPAGE_H peony-extensions/peony-share/app/share-properties-page-plugin.h0000664000175000017500000000410215257160264023721 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2019, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef SHAREMENUPLUGIN_H #define SHAREMENUPLUGIN_H #include #include #include "usershare-manager.h" namespace Peony { class SharePropertiesPagePlugin : public QObject, public PropertiesWindowTabPagePluginIface { Q_OBJECT Q_PLUGIN_METADATA(IID PropertiesWindowTabPagePluginIface_iid FILE "common.json") Q_INTERFACES(Peony::PropertiesWindowTabPagePluginIface) public: explicit SharePropertiesPagePlugin(QObject *parent = nullptr); static SharePropertiesPagePlugin *getInstance(); PluginInterface::PluginType pluginType() override {return PluginInterface::PropertiesWindowPlugin;} const QString name() override {return tr("Peony Qt Share Extension");} const QString description() override {return tr("Allow user share folders");} const QIcon icon() override {return QIcon::fromTheme("emblem-shared");} void setEnable(bool enable) override {m_enable = enable;} bool isEnable() override {return m_enable;} int tabOrder() override {return 99;} bool supportUris(const QStringList &uris) override; PropertiesWindowTabIface * createTabPage(const QStringList &uris) override; void closeFactory() {deleteLater();} private: bool m_enable; }; } #endif // SHAREMENUPLUGIN_H peony-extensions/peony-share/app/samba-config-thread.h0000664000175000017500000000300415257160264022012 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2021, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Wenjie Xiang * */ #ifndef SAMBACONFIGTHREAD_H #define SAMBACONFIGTHREAD_H #include #include "samba-config-interface.h" #include "usershare-manager.h" class SambaConfigThread : public QThread { Q_OBJECT public: SambaConfigThread(const Peony::ShareInfo shareInfo, const QString uri, const QString acl); Peony::ShareInfo* getShareInfo(); QString getUri(); QString getAcl(); Q_SIGNALS: void isInitSignal(bool ret); void isFinishedSignal(bool ret); void isHasPasswdSignal(bool ret, QString &passwd); void isSetPasswdSignal(bool ret); void getPasswd(QString &passwd); protected: void run(); private: Peony::ShareInfo *m_shareInfoTmp; QString m_uri; QString m_acl; }; #endif // SAMBACONFIGTHREAD_H peony-extensions/peony-share/app/share-page.cpp0000664000175000017500000006044115257160277020602 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2019, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "share-page.h" #include "share-properties-page-plugin.h" #include "emblem-provider.h" #include "share-emblem-provider.h" #include "samba-config-interface.h" #include "samba-config-thread.h" #include "global-settings.h" #include "advanced-share-page.h" #include "pwd.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define NAME_LABEL_WIDTH 350 SharePage::SharePage(const QString &uri, QWidget *parent) : PropertiesWindowTabIface(parent) { qDebug() << "=========="<< __func__ < initFileInfoJob = QtConcurrent::run([=]() { m_fileInfo = Peony::FileInfo::fromUri(uri); Peony::FileInfoJob *fileInfoJob = new Peony::FileInfoJob(m_fileInfo); fileInfoJob->setAutoDelete(true); fileInfoJob->querySync(); m_name = m_fileInfo->displayName(); m_stmp = UserShareInfoManager::getInstance()->getShareInfo(m_name); }); m_theFutureWatcher = new QFutureWatcher(); m_theFutureWatcher->setFuture(initFileInfoJob); connect(m_theFutureWatcher, &QFutureWatcher::finished, this, &SharePage::init); } void SharePage::init() { if (m_theFutureWatcher) delete m_theFutureWatcher; m_shareInfo.name = m_fileInfo->displayName(); m_shareInfo.originalPath = m_fileInfo->filePath(); if (nullptr != m_stmp) { if (m_stmp->originalPath.compare(m_shareInfo.originalPath) == 0) { m_shareInfo = m_stmp; m_shareInfo.isShared = true; } else { m_originalPath = m_stmp->originalPath; } } this->setContentsMargins(0, 0, 0, 0); m_layout = new QVBoxLayout(this); m_layout->setContentsMargins(0, 0, 0, 0); m_layout->setSpacing(0); this->initFloorOne(); this->addSeparate(); this->initFloorTwo(); this->initFloorThree(); m_layout->addStretch(1); } void SharePage::saveAllChange() { if (!m_thisPageChanged) return; bool checked = m_switchButton->isChecked(); if (checked) { //Check specail symbols bool isSpecial = checkSpecialSymbols(m_fileInfo->displayName()); if (isSpecial) { QMessageBox::warning(nullptr, tr("Warning"), tr("The share name must not contain %1, and cannot start with a dash (-) or whitespace, or end with whitespace.").arg("%<>*?|/\\+=;:,\""), QMessageBox::Ok); return; } //Check username and share name if (getpwnam(m_fileInfo->displayName().toLower().toUtf8().constData())) { QMessageBox::warning(nullptr, tr("Warning"), tr("The share name cannot be the same as an existing user name"), QMessageBox::Ok); return; } QDir userDir("/var/lib/samba/usershares"); QFileInfoList fileInfoList = userDir.entryInfoList(QDir::Files); for (auto fileInfo : fileInfoList) { if (m_fileInfo->displayName().toLower() == fileInfo.fileName()) { QFileInfo shareInfo(m_fileInfo->filePath()); if (fileInfo.owner() != shareInfo.owner()) { QMessageBox::question(nullptr, tr("question"), tr("The share name is already used by other users. You can rename the folder and then set the share."), QMessageBox::Ok); return; } else { if (!m_originalPath.isEmpty()) { int ret = QMessageBox::question(nullptr, tr("question"), tr("The share name already exists, do you want to replace the original share folder?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); if (QMessageBox::Yes == ret) { //å�–消之å‰�的共享文件夹信æ�¯è·Ÿè§’标信æ�¯ QString tmpUri = "file://" + m_originalPath; removeShareEmblem(tmpUri); removeShareInfo(m_shareInfo.name); clearAclInfo(m_originalPath); } else { return; } } } } } auto settings = GlobalSettings::getInstance(); bool runbackend = settings->getInstance()->getValue(RESIDENT_IN_BACKEND).toBool(); qApp->setQuitOnLastWindowClosed(false); //FIXME:暂时ä¸�支æŒ�自定义共享å�� - Currently does not support custom shared name m_shareInfo.name = m_fileInfo->displayName(); m_shareInfo.readOnly = !m_allowGuestModify->isChecked(); m_shareInfo.allowGuest = m_shareAllowGuestCheckBox->isChecked(); m_shareInfo.isShared = true; QString uri = m_fileInfo->uri(); if (!m_shareInfo.readOnly || m_usershareAcl.compare("Everyone:F", Qt::CaseInsensitive) == 0) { QMessageBox messageBox(this); messageBox.setText(tr("The folder is currently shared in non-read-only mode, and setting up the share requires adding other people's write permissions to the current folder?")); messageBox.setWindowTitle(tr("question")); messageBox.setIcon(QMessageBox::Question); QPushButton *addModeButton = messageBox.addButton(tr("Confirm adding permissions"), QMessageBox::YesRole); messageBox.addButton(tr("Cancel"), QMessageBox::NoRole); messageBox.exec(); if (messageBox.clickedButton() == addModeButton) { if (!addOtherWrite(uri, runbackend)) { return; } } else { return; } } if (m_shareInfo.allowGuest) { QMessageBox mBox(this); mBox.setText(tr("The folder is currently shared with anonymous access set, do I need to automatically increase the executable permissions for the current file and all others in the parent directory?")); mBox.setWindowTitle(tr("question")); mBox.setIcon(QMessageBox::Question); QPushButton *addModeBtn = mBox.addButton(tr("Confirm adding permissions"), QMessageBox::YesRole); mBox.addButton(tr("Cancel"), QMessageBox::NoRole); mBox.exec(); if (mBox.clickedButton() == addModeBtn) { this->recursiveAddOtherExecute(uri, runbackend); } else { return; } } //防止祖宗目录没有其他å�¯æ‰§è¡Œæ�ƒé™� if (!m_usershareAcl.isEmpty()) { this->recursiveAddOtherExecute(uri, runbackend); } //handle: // SambaConfigInterface si(DBUS_NAME, DBUS_PATH, QDBusConnection::systemBus()); // if (si.init(g_get_user_name(), getpid(), getuid())) { // if (!si.hasPasswd()) { // bool ok = false; // QString text = QInputDialog::getText(nullptr, tr("Set Password"), tr("Password:"), QLineEdit::Normal, "", &ok); // if (ok && !text.isNull() && !text.isEmpty()) { // if (!si.setPasswd(text)) { // QMessageBox::warning(nullptr, tr("Warning"), tr("Samba set password failed, Please re-enter!")); // m_ret = true; // } // } // } // } else { // QMessageBox::warning(nullptr, tr("Warning"), tr("Samba service init failed!"), QMessageBox::Ok); // m_ret = true; // } // si.finished(); // if (m_ret) { // return; // } // UserShareInfoManager::getInstance()->updateShareInfo(m_shareInfo); if (!this->checkAuthorization()) return; qDebug()<< __func__ << __LINE__ << m_shareInfo.name << m_shareInfo.isShared << m_shareInfo.originalPath << m_shareInfo.readOnly; SambaConfigThread* thread = new SambaConfigThread(m_shareInfo, m_fileInfo->uri(), m_usershareAcl); connect(thread, &SambaConfigThread::isInitSignal, UserShareInfoManager::getInstance(), [=](bool initRet){ qDebug()<< __func__ << __LINE__ << initRet; if (!initRet) { qApp->setQuitOnLastWindowClosed(!runbackend); QMessageBox::warning(nullptr, tr("Warning"), tr("Shared configuration service exception, please confirm if there is an ongoing shared configuration operation, or please reset the share!"), QMessageBox::Ok); return; } }, Qt::BlockingQueuedConnection); connect(thread, &SambaConfigThread::isHasPasswdSignal, UserShareInfoManager::getInstance(), [=](bool hasPasswdRet, QString &passwd){ qDebug()<< __func__ << __LINE__ << hasPasswdRet; if (!hasPasswdRet) { bool ok = false; QInputDialog dlg; dlg.setLabelText(tr("Samba password:")); dlg.setTextEchoMode(QLineEdit::Password); dlg.setWindowTitle(tr("Samba set user password")); dlg.setWindowIcon(QIcon::fromTheme("system-file-manager")); dlg.setFixedSize(470,150); ok = dlg.exec(); QString text = dlg.textValue(); if (ok && !text.isNull() && !text.isEmpty()) { passwd = text; } else { qApp->setQuitOnLastWindowClosed(!runbackend); } } else { if (addShareInfo(*(thread->getShareInfo()), thread->getAcl())) { addShareEmblem(thread->getUri()); qApp->setQuitOnLastWindowClosed(!runbackend); } } if (qApp->quitOnLastWindowClosed()) { delayExit(); } }, Qt::BlockingQueuedConnection); connect(thread, &SambaConfigThread::isSetPasswdSignal, UserShareInfoManager::getInstance(), [=](bool setPasswdRet){ qDebug()<< __func__ << __LINE__ << setPasswdRet; if (!setPasswdRet) { qApp->setQuitOnLastWindowClosed(!runbackend); QMessageBox::warning(nullptr, tr("Warning"), tr("Samba set password failed, Please re-enter!")); return; } else { if (UserShareInfoManager::getInstance()->updateShareInfo(*(thread->getShareInfo()), thread->getAcl())) { addShareEmblem(thread->getUri()); qApp->setQuitOnLastWindowClosed(!runbackend); } } if (qApp->quitOnLastWindowClosed()) { delayExit(); } }, Qt::BlockingQueuedConnection); connect(thread, &SambaConfigThread::finished, thread, &SambaConfigThread::deleteLater); thread->start(); } else { removeShareEmblem(m_fileInfo->uri()); //FIXME:需è¦�先判断存在共享å�— - Need to determine whether there is sharing first removeShareInfo(m_shareInfo.name); clearAclInfo(m_fileInfo->filePath()); } } bool SharePage::checkAuthorization() { bool ret = false; g_autoptr(GError) error = NULL; PolkitAuthority* mAuth = polkit_authority_get_sync(NULL, &error); if (error) { qWarning() << error->message; return ret; } int pid = getpid(); int uid = getuid(); PolkitSubject* proj = polkit_unix_process_new_for_owner (pid, 0, uid); PolkitAuthorizationResult* res = polkit_authority_check_authorization_sync (mAuth, proj, "org.ukui.samba.share.config.authorization", NULL, POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION, nullptr, &error); if (error) { qWarning() << error->message; goto out; } if (polkit_authorization_result_get_is_authorized(res)) { ret = true; } out: if (proj) g_object_unref (proj); if (res) g_object_unref (res); return ret; } bool SharePage::checkSpecialSymbols(const QString &displayName) { if (displayName.startsWith(" ") || displayName.startsWith("-") || displayName.endsWith(" ")) { return true; } QRegularExpression gSpecialSymbols("[\\\\/:\\*\\?\\<>\\|\\+\\=\\,\\;\\%]"); if (displayName.contains(gSpecialSymbols)) { return true; } return false; } void SharePage::delayExit() { QTimer::singleShot(1000, [](){ qDebug() << __LINE__ << __func__; bool allWindowsClosed = true; QList topLevelWidget = QApplication::topLevelWidgets(); for (auto w : topLevelWidget) { if (w->isVisible()) { allWindowsClosed = false; } } if (allWindowsClosed) { qApp->quit(); } }); } void SharePage::recursiveAddOtherExecute(const QString &uri, const bool &runbackend) { QString tmpUri = uri; while (!tmpUri.isEmpty() && tmpUri != "") { g_autoptr(GFile) file = g_file_new_for_uri(tmpUri.toUtf8().constData()); if (file) { g_autoptr(GError) error = NULL; g_autoptr(GFileInfo) info = g_file_query_info(file, "unix::mode", G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nullptr, &error); if (info) { guint32 mode = 0; m_has_unix_mode = g_file_info_has_attribute(info, G_FILE_ATTRIBUTE_UNIX_MODE); if (m_has_unix_mode) { mode = g_file_info_get_attribute_uint32(info, G_FILE_ATTRIBUTE_UNIX_MODE); auto other_executable = mode & S_IXOTH; if (!other_executable) { mode |= S_IXOTH; g_autoptr(GError) err = NULL; g_file_set_attribute_uint32(file, G_FILE_ATTRIBUTE_UNIX_MODE, (guint32)mode, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nullptr, &err); if (err) { qApp->setQuitOnLastWindowClosed(!runbackend); QMessageBox::warning(nullptr, tr("Warning"), err->message, QMessageBox::Ok); return; } } tmpUri = FileUtils::getParentUri(tmpUri); } else { return; } } else if (error) { qApp->setQuitOnLastWindowClosed(!runbackend); QMessageBox::warning(nullptr, tr("Warning"), error->message, QMessageBox::Ok); return; } } else { return; } } } bool SharePage::addOtherWrite(const QString &uri, const bool &runbackend) { bool ret = false; g_autoptr(GFile) gFile = g_file_new_for_uri(uri.toUtf8().constData()); if (gFile) { g_autoptr(GError) gError = NULL; g_autoptr(GFileInfo) gInfo = g_file_query_info(gFile, "unix::mode", G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nullptr, &gError); if (gInfo) { guint32 mode = 0; bool has_unix_mode = g_file_info_has_attribute(gInfo, G_FILE_ATTRIBUTE_UNIX_MODE); if (has_unix_mode) { mode = g_file_info_get_attribute_uint32(gInfo, G_FILE_ATTRIBUTE_UNIX_MODE); auto other_writeable = mode & S_IWOTH; if (!other_writeable) { mode |= S_IWOTH; g_autoptr(GError) gErr = NULL; g_file_set_attribute_uint32(gFile, G_FILE_ATTRIBUTE_UNIX_MODE, (guint32)mode, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nullptr, &gErr); if (gErr) { qApp->setQuitOnLastWindowClosed(!runbackend); QMessageBox::warning(nullptr, tr("Warning"), gErr->message, QMessageBox::Ok); return ret; } ret = true; } ret = true; return ret; } else { return ret; } } else if (gError){ qApp->setQuitOnLastWindowClosed(!runbackend); QMessageBox::warning(nullptr, tr("Warning"), gError->message, QMessageBox::Ok); return ret; } } return ret; } void SharePage::removeShareEmblem(const QString &uri) { auto info = Peony::FileXattrInfo::fromUri(uri); if (info && !info->getXattrInfoString(SHARE_EMBLEMS).isEmpty()) { info->removeXattrInfo(SHARE_EMBLEMS); EmblemProviderManager::getInstance()->queryAsync(uri); } } void SharePage::removeShareInfo(const QString &name) { UserShareInfoManager::getInstance()->removeShareInfoAcl(const_cast(name)); } void SharePage::clearAclInfo(const QString &filePath) { bool ret; QStringList args; args << "/usr/bin/setfacl" << "-b" << QString("\"%1\"").arg(filePath); UserShareInfoManager::exectueSetAclCommand(args, &ret); } bool SharePage::addShareInfo(ShareInfo &shareInfo, const QString usershareAcl) { return UserShareInfoManager::getInstance()->updateShareInfo(shareInfo, usershareAcl); } void SharePage::addShareEmblem(const QString &uri) { auto fileInfo = Peony::FileXattrInfo::fromUri(uri); if(fileInfo){ fileInfo->setXattrInfoString(SHARE_EMBLEMS,"emblem-shared", true); EmblemProviderManager::getInstance()->queryAsync(uri); } } void SharePage::initFloorOne() { QFrame * floor1 = new QFrame(this); floor1->setContentsMargins(0, 0, 0, 0); floor1->setMinimumHeight(90); QHBoxLayout * layout1 = new QHBoxLayout(floor1); layout1->setContentsMargins(24, 24, 24, 16); layout1->setSpacing(16); layout1->setAlignment(Qt::AlignTop | Qt::AlignLeft); floor1->setLayout(layout1); m_iconLabel = new QLabel(floor1); QIcon icon = QIcon::fromTheme(m_fileInfo.get()->iconName()); m_iconLabel->setFixedSize(QSize(64, 64)); m_iconLabel->setPixmap(icon.pixmap(QSize(64, 64))); layout1->addWidget(m_iconLabel); QVBoxLayout * vBoxLayout = new QVBoxLayout(floor1); m_folderName = new QLabel(floor1); m_sharedState = new QLabel(floor1); //fix bug:#82320 QRegularExpression regex("^file:///data/usershare(/{,1})$"); if (regex.match(m_fileInfo->uri()).hasMatch()) { m_folderName->setText(tr("usershare")); } else { QFontMetrics fontWidth(m_folderName->font()); QString elideNote = fontWidth.elidedText(m_fileInfo.get()->displayName(), Qt::ElideMiddle, NAME_LABEL_WIDTH); m_folderName->setText(elideNote); m_folderName->setToolTip(m_fileInfo.get()->displayName()); } m_sharedState->setText(m_shareInfo.isShared ? tr("share this folder") : tr("don`t share this folder")); vBoxLayout->addStretch(1); vBoxLayout->addWidget(m_folderName); vBoxLayout->addWidget(m_sharedState); vBoxLayout->addStretch(1); layout1->addLayout(vBoxLayout); layout1->addStretch(1); m_layout->addWidget(floor1); } void SharePage::initFloorTwo() { QFrame * floor2 = new QFrame(this); QHBoxLayout *layout2 = new QHBoxLayout(floor2); layout2->setAlignment(Qt::AlignLeft); layout2->setContentsMargins(24, 16, 24, 0); layout2->setSpacing(16); floor2->setLayout(layout2); bool shared = m_shareInfo.isShared; m_switchButton = new kdk::KSwitchButton(floor2); m_switchButton->setChecked(shared); layout2->addWidget(new QLabel(tr("Share folder"), floor2)); layout2->addWidget(m_switchButton); m_layout->addWidget(floor2); connect(m_switchButton, &kdk::KSwitchButton::stateChanged, this, [=](bool checked) { this->thisPageChanged(); if (checked) { //FIXME:暂时ä¸�支æŒ�自定义共享å�� - Currently does not support custom shared name m_shareInfo.name = m_fileInfo->displayName(); m_shareInfo.readOnly = !m_allowGuestModify->isChecked(); m_shareInfo.allowGuest = m_shareAllowGuestCheckBox->isChecked(); if (m_floor3) m_floor3->setVisible(true); m_sharedState->setText(tr("share this folder")); m_shareInfo.isShared = true; } else { if (m_floor3) m_floor3->setVisible(false); m_sharedState->setText(tr("don`t share this folder")); m_shareInfo.isShared = false; } }); } void SharePage::initFloorThree() { m_floor3 = new QFrame(this); QVBoxLayout * layout3 = new QVBoxLayout(m_floor3); layout3->setContentsMargins(24, 24, 24, 0); layout3->setSpacing(0); m_floor3->setLayout(layout3); QFormLayout *formLayout = new QFormLayout(m_floor3); formLayout->setVerticalSpacing(24); m_shareNameEdit = new QLineEdit(m_floor3); m_shareNameEdit->setMaxLength(32); m_shareNameEdit->setEnabled(false); m_shareNameEdit->setText(m_shareInfo.name); m_commentEdit = new QLineEdit(m_floor3); m_commentEdit->setMaxLength(64); m_commentEdit->setText(m_shareInfo.comment); formLayout->addRow(tr("Share name:"), m_shareNameEdit); formLayout->addRow(tr("Comment:"), m_commentEdit); layout3->addLayout(formLayout); m_allowGuestModify = new QCheckBox(tr("Allow others to create and delete files"), this); m_allowGuestModify->setChecked(!m_shareInfo.readOnly); m_shareAllowGuestCheckBox = new QCheckBox(tr("Allow Anonymous")); m_shareAllowGuestCheckBox->setChecked(m_shareInfo.allowGuest); layout3->addSpacing(24); layout3->addWidget(m_allowGuestModify); layout3->addWidget(m_shareAllowGuestCheckBox); QHBoxLayout *hBoxLayout = new QHBoxLayout(m_floor3); m_advanceShareButton = new QPushButton(tr("Advanced Sharing"), this); hBoxLayout->addWidget(m_advanceShareButton); hBoxLayout->addStretch(2); layout3->addLayout(hBoxLayout); m_floor3->setVisible(m_shareInfo.isShared); m_layout->addWidget(m_floor3); connect(m_commentEdit, &QLineEdit::textChanged, this, [=]() { m_shareInfo.comment = m_commentEdit->text(); this->thisPageChanged(); }); connect(m_allowGuestModify, &QCheckBox::clicked, this, [=](bool checked) { m_shareInfo.readOnly = checked; this->thisPageChanged(); }); connect(m_shareAllowGuestCheckBox, &QCheckBox::clicked, this, [=](bool checked) { m_shareInfo.allowGuest = checked; this->thisPageChanged(); }); connect(m_advanceShareButton, &QPushButton::clicked, this, [=](){ if(checkAuthorization()) { this->thisPageChanged(); AdvancedSharePage *page = new AdvancedSharePage(m_fileInfo->uri(), m_userInfoCache); connect(page, &AdvancedSharePage::getUserInfo, this, [=](QString acl, QMap& userInfo){ m_usershareAcl = acl; m_userInfoCache = userInfo; }); page->show(); } }); } peony-extensions/peony-share/app/systemd-bus-accounts.cpp0000664000175000017500000000604415257160264022655 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2022, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Wenjie Xiang * */ #include "systemd-bus-accounts.h" #include SystemDbusAccounts::SystemDbusAccounts(QObject *parent) : QObject(parent) { m_systemInterface = new QDBusInterface("org.freedesktop.Accounts", "/org/freedesktop/Accounts", "org.freedesktop.Accounts", QDBusConnection::systemBus()); // connect(m_systemInterface, SIGNAL(UserAdded(QDBusObjectPath)), this, SLOT(create_user_success(QDBusObjectPath))); // connect(m_systemInterface, SIGNAL(UserDeleted(QDBusObjectPath)), this, SLOT(delete_user_success(QDBusObjectPath))); } SystemDbusAccounts::~SystemDbusAccounts() { delete m_systemInterface; m_systemInterface = NULL; } QStringList SystemDbusAccounts::getListCachedUsers() { QStringList userLists; QDBusReply> reply = m_systemInterface->call("ListCachedUsers"); if (reply.isValid()) { for (QDBusObjectPath op : reply.value()) { userLists << op.path(); } } return userLists; } QStringList SystemDbusAccounts::getAllUserNames() { QStringList userNames; QStringList objectPaths = getListCachedUsers(); if (!objectPaths.isEmpty()) { for (auto objectPath : objectPaths) { userNames << getUserName(objectPath); } } return userNames; } QString SystemDbusAccounts::getUserName(QString objectPath) { QString userName; QDBusInterface *interFace = new QDBusInterface("org.freedesktop.Accounts", objectPath, "org.freedesktop.DBus.Properties", QDBusConnection::systemBus()); QDBusReply reply = interFace->call("Get", "org.freedesktop.Accounts.User", "UserName"); if (reply.isValid()) { userName = reply.value().variant().toString(); } else { qDebug() << __func__ << "reply failed!"; } return userName; } void SystemDbusAccounts::createUserSuccess(QDBusObjectPath objectPath) { emit createUserDone(objectPath.path()); } void SystemDbusAccounts::deleteUserSuccess(QDBusObjectPath objectPath) { emit deleteUserDone(objectPath.path()); } peony-extensions/peony-share/data/0000775000175000017500000000000015257160277016206 5ustar fengfengpeony-extensions/peony-share/data/org.ukui.samba.share.config.conf0000664000175000017500000000171515257160264024247 0ustar fengfeng peony-extensions/peony-share/data/org.ukui.samba.share.config.service0000664000175000017500000000014115257160264024752 0ustar fengfeng[D-BUS Service] Name=org.ukui.samba.share.config User=root Exec=/usr/libexec/peony-samba-service peony-extensions/peony-share/data/org.ukui.samba.share.config.policy0000664000175000017500000000230515257160277024621 0ustar fengfeng Apply for the samba configuration permission Confirm whether you want to modify the Samba configuration 请确认是å�¦å…�许修改sambaé…�ç½® 請確èª�是å�¦å…�許修改sambaé…�ç½® sambaཡི་སྒྲིག་གཞི་བསྒྱུར་ན་ཆོག་མིན་à½�ག་གཅོད་བྱེད་རོགསà¼� samba ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠤᠯᠲᠠ ᠶ᠋ᠢ ᠵᠠᠰᠠᠬᠤ ᠶ᠋ᠢ ᠵᠥᠪᠱᠢᠶᠡᠷᠡᠬᠦ ᠡᠰᠡᠬᠦ ᠪᠡᠨ ᠲᠣᠳᠣᠷᠬᠠᠢᠯᠠᠭᠠᠷᠠᠢ no auth_self_keep peony-extensions/peony-spaceview-plugin/0000775000175000017500000000000015257160264017451 5ustar fengfengpeony-extensions/peony-spaceview-plugin/peony-space-view/0000775000175000017500000000000015257160277022650 5ustar fengfengpeony-extensions/peony-spaceview-plugin/peony-space-view/peony-space-view-plugin_global.h0000664000175000017500000000215115257160264031023 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: JinQin He * */ #ifndef PEONYINTELLIGENTSEARCHVIEW_GLOBAL_H #define PEONYINTELLIGENTSEARCHVIEW_GLOBAL_H #include #if defined(PEONYINTELLIGENTSEARCHVIEW_LIBRARY) # define PEONYINTELLIGENTSEARCHVIEW_EXPORT Q_DECL_EXPORT #else # define PEONYINTELLIGENTSEARCHVIEW_EXPORT Q_DECL_IMPORT #endif #endif // PEONYINTELLIGENTSEARCHVIEW_GLOBAL_H peony-extensions/peony-spaceview-plugin/peony-space-view/peony-space-view-plugin.cpp0000664000175000017500000000446715257160264030052 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: JinQin He * */ #include "peony-space-view-plugin.h" #include "space-view-container.h" #include #include #include #include using namespace Peony; PeonyIntelligentSpaceViewPlugin::PeonyIntelligentSpaceViewPlugin(QObject *parent) { //加载翻译 QTranslator *t = new QTranslator(this); t->load(":/peony-space-view_"+QLocale::system().name()); QApplication::installTranslator(t); } int PeonyIntelligentSpaceViewPlugin::priority(const QString &directoryUri) { qDebug() << "=======" << __func__ << directoryUri; if(directoryUri.startsWith("idm:///")&&m_currentUri!="idm:///"){ QString prestr = "idm:///"; QString uri = FileUtils::urlDecode(directoryUri); if (uri.startsWith(prestr)) { m_spacename = uri.mid(prestr.length()); } QDBusInterface* m_signalTransInterface = new QDBusInterface("com.peony.idm.service", "/org/peony/idm/space/service", "org.peony.idm.modelcontroller"); QDBusReply reply = m_signalTransInterface->call("getFilesInSpaceByName",m_spacename,false); QDBusReply names = m_signalTransInterface->call("getAllSpacesName"); if(reply.value().isEmpty()&& names.value().contains(m_spacename)){ return 1; } } return -1; } DirectoryViewWidget *PeonyIntelligentSpaceViewPlugin::create() { return new SpaceViewContainer(nullptr,m_currentUri,m_spacename); } peony-extensions/peony-spaceview-plugin/peony-space-view/peony-space-view.qrc0000664000175000017500000000013615257160264026546 0ustar fengfeng data/nodata.svg peony-extensions/peony-spaceview-plugin/peony-space-view/peony-space-view_bo_CN.ts0000664000175000017500000000516415257160264027455 0ustar fengfeng QObject Intelligent Space View རིག་ནུས་བར་སྟོང་གི་རི་མོà¼� Use customized Intelligent Data Manager space views when the spaces file content is empty བར་སྟོང་ཡིག་ཆའི་ནང་དོན་ནི་བར་སྣང་གི་ནང་དོན་ཡིན་པ་དང་à¼� མཚན་ཉིད་ཀྱི་མཚན་ཉིད་སྤྱད་པའི་Indaanaeereanaerrereaerreanarearerearerrererrerr Spaceview When there are files in the system that meet the space conditions, they will be automatically displayed in the space མ་ལག་à½�ྲོད་བར་སྟོང་གི་ཆ་རà¾�ྱེན་དང་མà½�ུན་པའི་ཡིག་ཆ་ཡོད་ཚེ་རང་འགུལ་གྱིས་བར་སྟོང་དུ་མངོན་ངེས་ཡིནà¼� <html><head/><body><p>You can manually <a href='#addfiles' style='text-decoration:none;'>add files</a> or <a href='#modifyspace' style='text-decoration:none;'>modify the space conditions.</a></p></body></html> <html><head/><body><p>à½�ྱེད་ཀྱིས་X39Xལ་ཡིག་ཆ་à½�་སྣོན་བྱས་ཆོག་པ་དང་à¼� X98Xའམà¼� ཡང་ན་X106X〕བཟོ་བཅོས་རྒྱག་པའི་བར་སྟོང་ཆ་རà¾�ྱེན་བཟོ་བཅོས་བྱས་ཆོགà¼� </a></p></body></html> Choose file to add into space བར་སྟོང་ནང་གི་ཡིག་ཆ་à½�་སྣོན་རྒྱག་དགོསà¼� peony-extensions/peony-spaceview-plugin/peony-space-view/peony-space-view_ug.ts0000664000175000017500000000461015257160264027103 0ustar fengfeng QObject Intelligent Space View ئەقلىي ئىقتىدارلىق بوشلۇق كۆرۈنۈشى Use customized Intelligent Data Manager space views when the spaces file content is empty بوشلۇق ھۆججىتى مەزمۇنى بوش بولغاندا ئىختىيارى ئەقلىي ئىقتىدارلىق سانلىق مەلۇمات باشقۇرغۇچنىڭ بوشلۇق كۆرۈنۈشىنى ئىشلىتىش Spaceview When there are files in the system that meet the space conditions, they will be automatically displayed in the space سىستÛ�مىدىكى بوشلۇق شەرتىگە ئۇيغۇن ÙƒÛ�لىدىغان ھۆججەتلەر بولسا، بوشلۇقتا ئاپتوماتىك كۆرۈنىدۇ <html><head/><body><p>You can manually <a href='#addfiles' style='text-decoration:none;'>add files</a> or <a href='#modifyspace' style='text-decoration:none;'>modify the space conditions.</a></p></body></html> <html><head/><body><p>بوشلۇق شەرتلىرىنى قولدا <a href='#addfiles' style='text-decoration:none;'>ھۆججەت قوشۇپ</a> ياكى <a href='#modifyspace' style='text-decoration:none;'> بوشلۇق شەرتلىرىنى ئۆزگەرتەلەيسىز.</a></p></body></html> Choose file to add into space بوشلۇققا قوشۇش ئۈچۈن ھۆججەتنى تاللاڭ peony-extensions/peony-spaceview-plugin/peony-space-view/peony-space-view_ky.ts0000664000175000017500000000467215257160264027123 0ustar fengfeng QObject Intelligent Space View روحىي جۅندۅمدۉلۉك بوشتۇق گۅرۉنۉشۉ Use customized Intelligent Data Manager space views when the spaces file content is empty بوش ،بەكەر تۇق ۅجۅتۉۉ مازمۇنۇ بوش ،بەكەر بولعوندو ۅزەركى Ù…Û•Ù†Û•Ù† روحىي جۅندۅمدۉلۉك ساندۇۇ بايانداما باشقارۇۇچۇنۇن بوش ،بەكەر تۇق گۅرۉنۉشۉن ىشتەتىش Spaceview When there are files in the system that meet the space conditions, they will be automatically displayed in the space سەستىماداعى بوشتۇق شارتىنا شاي گەلەتۇرعان ۅجۅتتۅر بولسو، بوشتۇقتا اپتوماتتىك كۅرۉنۅت <html><head/><body><p>You can manually <a href='#addfiles' style='text-decoration:none;'>add files</a> or <a href='#modifyspace' style='text-decoration:none;'>modify the space conditions.</a></p></body></html> <html><head/><body><p>بوشتۇق شارتتارىن قولدو <a href='#addfiles' style='text-decoration:none;'>ۅجۅت قوشۇپ </a> كۅرۉنۉشتۅرۉ <a href='#modifyspace' style='text-decoration:none;'> بوشتۇق شارتتارىن ۅزگۅرتۅ الاسىز.</a></p></body></html> Choose file to add into space بوشتۇققا قوشۇۇ Û‰Ú†Û‰Ù† ۅجۅتۉن تانداڭ peony-extensions/peony-spaceview-plugin/peony-space-view/space-view.cpp0000664000175000017500000001400515257160277025417 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: JinQin He * */ #include "space-view.h" #include #include #include #include #include #include #include #include "file-utils.h" Spaceview::Spaceview(QWidget *parent,QString uri,QString Spacename) :QWidget(parent),m_uri(uri),m_spaceName(Spacename) { auto layout = new QVBoxLayout(this); setAcceptDrops(true); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); layout->setObjectName("_spaceview_layout"); setProperty("highlightMode", true); setAutoFillBackground(true); setBackgroundRole(QPalette::Base); setMouseTracking(true); // track mouse // Create a widget to hold the image and text QWidget *contentWidget = new QWidget(this); contentWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); // Create a layout for the content widget QVBoxLayout *contentLayout = new QVBoxLayout(contentWidget); contentLayout->setContentsMargins(0, 0, 0, 0); contentLayout->setSpacing(10); // Adjust spacing as needed // Create image label and center the image QLabel *imageLabel = new QLabel(); QPixmap pixmap(":/data/nodata.svg"); // Use resource file image imageLabel->setPixmap(pixmap); imageLabel->setAlignment(Qt::AlignCenter); // Center the image contentLayout->addWidget(imageLabel); // Create first line of text QLabel *textLabel1 = new QLabel(tr("When there are files in the system that meet the space conditions, they will be automatically displayed in the space")); textLabel1->setAlignment(Qt::AlignCenter); // Center the text contentLayout->addWidget(textLabel1); // Create second line of text QLabel *textLabel2 = new QLabel(tr("

You can manually add files or modify the space conditions.

"), this); textLabel2->setOpenExternalLinks(false); textLabel2->setAlignment(Qt::AlignCenter); // Center the text contentLayout->addWidget(textLabel2); connect(textLabel2, &QLabel::linkActivated, this, &Spaceview::handleLinkActivated); // Add stretchable spacers to center the content layout->addStretch(); layout->addWidget(contentWidget); layout->addStretch(); this->setLayout(layout); m_signalTransInterface = new QDBusInterface("com.peony.idm.service", "/org/peony/idm/space/service", "org.peony.idm.modelcontroller"); } void Spaceview::setDirectoryUri(QString uri) { QString pre = "idm:///"; m_uri = uri; m_spaceName = Peony::FileUtils::urlDecode(m_uri).remove(pre); } void Spaceview::handleLinkActivated(const QString &link) { if (link == "#addfiles") { QFileDialog fileDialog; // fixme: 居中窗å�£ //fileDialog.windowHandle()->setTransientParent(qApp->topLevelWindows().first()); fileDialog.setWindowTitle(tr("Choose file to add into space")); fileDialog.setAcceptMode(QFileDialog::AcceptOpen); fileDialog.setFileMode(QFileDialog::AnyFile); QDir DocumentDir(g_get_user_special_dir(G_USER_DIRECTORY_DOCUMENTS)); fileDialog.setDirectory(DocumentDir); if (fileDialog.exec()) { auto urls = fileDialog.selectedUrls(); if (!urls.isEmpty()) { //userAddFilesToSpace QStringList filePaths; for (auto url : urls) { filePaths.append(url.path()); } userAddFilesToSpaceBySpaceplugin(filePaths, m_spaceName,true); } } } else if (link == "#modifyspace") { //Q_EMIT IDMDBusManager::getInstance()->editSpaceConditionSignal(m_uri); //onModifySpaceConditions(); editSpaceConditionBySpaceplugin(m_uri); } } void Spaceview::userAddFilesToSpaceBySpaceplugin(const QStringList &filePath, const QString &spaceName, bool isUserAdd) { QDBusReply reply = m_signalTransInterface->call("userAddFilesToSpaceBySpaceplugin",filePath,spaceName,isUserAdd); } void Spaceview::editSpaceConditionBySpaceplugin(const QString &uri) { QDBusReply reply = m_signalTransInterface->call("editSpaceConditionBySpaceplugin",uri); } void Spaceview::dragEnterEvent(QDragEnterEvent *event) { auto action = Qt::CopyAction; if (event->mimeData()->hasUrls()) { event->setDropAction(action); event->accept(); } } void Spaceview::dragMoveEvent(QDragMoveEvent *event) { auto action = Qt::CopyAction; if (event->mimeData()->hasUrls()) { event->setDropAction(action); event->accept(); } return QWidget::dragMoveEvent(event); } void Spaceview::dropEvent(QDropEvent *event) { if (event->mimeData()->hasUrls()) { QList urlList = event->mimeData()->urls(); QStringList filePaths; for (const QUrl &url : urlList) { QString filePath = url.toLocalFile(); filePaths<. * * Authors: JinQin He * */ #include "space-view-container.h" #include "file-item-model.h" #include "file-item-proxy-filter-sort-model.h" #include #include #include #include #include using namespace Peony; SpaceViewContainer::SpaceViewContainer(QWidget *parent,QString uri,QString Spacename) :m_currentUri(uri),m_Spacename(Spacename) { auto layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); layout->setObjectName("_spaceview_layout"); setBackgroundRole(QPalette::Base); setAutoFillBackground(true); m_view = new Spaceview(this,m_currentUri,m_Spacename); layout->addWidget(m_view); setLayout(layout); } SpaceViewContainer::~SpaceViewContainer() { } const QString SpaceViewContainer::getDirectoryUri() { return m_currentUri; } void SpaceViewContainer::bindModel(FileItemModel *model, FileItemProxyFilterSortModel *proxyModel) { auto layout = findChild("_spaceview_layout"); bool ok = false; if (parentWidget()) { int statusBarHeight = parentWidget()->property("statusBarHeight").toInt(&ok); if (ok) { layout->setContentsMargins(0, 0, 0, statusBarHeight); } } } void SpaceViewContainer::setDirectoryUri(const QString &uri) { if (m_currentUri != uri) { m_currentUri = uri; m_view->setDirectoryUri(uri); } } void SpaceViewContainer::beginLocationChange() { Q_EMIT viewDirectoryChanged(); } void SpaceViewContainer::stopLocationChange() { Q_EMIT viewDirectoryChanged(); } void SpaceViewContainer::contextMenuEvent(QContextMenuEvent *event) { Q_EMIT menuRequest(event->globalPos()); } peony-extensions/peony-spaceview-plugin/peony-space-view/peony-space-view_mn.ts0000664000175000017500000000545315257160264027110 0ustar fengfeng QObject Intelligent Space View ᠤᠶᠤᠨᠲᠤ ᠣᠷᠣᠨ ᠵᠠᠶ ᠶᠢᠨ ᠬᠠᠷᠠᠭ᠎ᠠ á ƒ Use customized Intelligent Data Manager space views when the spaces file content is empty ᠣᠷᠣᠨ ᠵᠠᠶ ᠶᠢᠨ ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ ᠠᠭᠤᠯᠭ᠎ᠠ ᠨᠢ ᠬᠣᠭᠣᠰᠣᠨ ᠦᠶ᠎ᠡ ᠳᠦ á ‚ ᠥᠪᠡᠷ ᠦᠨ ᠲᠣᠮᠢᠶᠠᠯᠠᠯ ᠤᠨ ᠢᠨᠲ᠋ᠧᠷᠨᠧᠲ᠋ ᠳ᠋ᠠᠲ᠋ᠠᠲ᠋ᠠ ᠶᠢᠨ ᠣᠷᠣᠨ ᠵᠠᠶ ᠶᠢᠨ ᠬᠠᠷᠠᠭ᠎ᠠ á ¶á ¢ ᠬᠡᠷᠡᠭᠯᠡᠨ᠎ᠡ á ƒ Spaceview When there are files in the system that meet the space conditions, they will be automatically displayed in the space ᠰᠢᠰᠲ᠋ᠧᠮ ᠳᠣᠲᠣᠷ᠎ᠠ ᠣᠷᠣᠨ ᠵᠠᠶ ᠶᠢᠨ ᠨᠥᠬᠥᠴᠡᠯ ᠳᠦ ᠨᠡᠶᠢᠴᠡᠬᠦ ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠪᠠᠢ᠌ᠬᠤ ᠦᠶ᠎ᠡ ᠳᠦ ᠣᠷᠣᠨ ᠵᠠᠢ ᠳᠤ ᠠᠶᠠᠨᠳᠠᠭᠠᠨ ᠢᠯᠡᠷᠡᠨ᠎ᠡ á ƒ <html><head/><body><p>You can manually <a href='#addfiles' style='text-decoration:none;'>add files</a> or <a href='#modifyspace' style='text-decoration:none;'>modify the space conditions.</a></p></body></html> <html><head/><body><p>ᠲᠠ á ­á  á · ᠢᠶᠠᠷ ᠢᠶᠠᠨ 〔 X39X 〕 ᠨᠡᠮᠡᠯᠲᠡ ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ 〔 X98X 〕 ᠪᠤᠶᠤ 〔 X106X 〕 á ¶á ¢ ᠨᠡᠮᠡᠵᠦ ᠣᠷᠣᠨ ᠵᠠᠶ ᠶᠢᠨ ᠨᠥᠬᠥᠴᠡᠯ ᠳᠦ ᠵᠠᠰᠠᠪᠤᠷᠢ ᠣᠷᠣᠭᠤᠯᠵᠤ ᠪᠣᠯᠣᠨ᠎ᠠ á ƒ </a></p></body></html> Choose file to add into space ᠣᠷᠣᠨ ᠵᠠᠢ ᠳᠤ ᠨᠡᠮᠡᠬᠦ ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ á ¢ ᠰᠣᠩᠭᠣᠬᠤ ᠬᠡᠷᠡᠭá �ᠲᠡᠢ á ƒ peony-extensions/peony-spaceview-plugin/peony-space-view/peony-space-view_zh_HK.ts0000664000175000017500000000375015257160264027477 0ustar fengfeng QObject Intelligent Space View 智慧空間檢視 Use customized Intelligent Data Manager space views when the spaces file content is empty 當空間檔內容為空時使用自定義的智能數據管ç�†ç©ºé–“檢視 Spaceview When there are files in the system that meet the space conditions, they will be automatically displayed in the space 當系統中存在符å�ˆè©²ç©ºé–“æ¢�件的檔時,將自動顯示在空間內 <html><head/><body><p>You can manually <a href='#addfiles' style='text-decoration:none;'>add files</a> or <a href='#modifyspace' style='text-decoration:none;'>modify the space conditions.</a></p></body></html> <html><p><body><head/>您å�¯ä»¥æ‰‹å‹• <a href='#addfiles' style='text-decoration:none;'>添加檔</a> ,或 <a href='#modifyspace' style='text-decoration:none;'>修改空間æ¢�ä»¶</a></p></body></html> Choose file to add into space é�¸æ“‡æª”案添加至空間 peony-extensions/peony-spaceview-plugin/peony-space-view/peony-space-view_kk.ts0000664000175000017500000000450215257160264027075 0ustar fengfeng QObject Intelligent Space View وي قابٸلەتتٸ بوستٸق كورىنۋى Use customized Intelligent Data Manager space views when the spaces file content is empty بوستٸق حۇجاتى مازمۇنى بوس بولعاندا ەرٸكتٸ وي قابٸلەتتٸ ساندىق مالىمەت باسقارۋشنىڭ بوستٸق كورىنۋدى ٸستەتۋ Spaceview When there are files in the system that meet the space conditions, they will be automatically displayed in the space سەستاماداعى بوستٸق شارتقا سايكەس كەلەتىن حۇجاتتار بولسا، بوستٸقتا اۆتوماتتى كورىنەدى <html><head/><body><p>You can manually <a href='#addfiles' style='text-decoration:none;'>add files</a> or <a href='#modifyspace' style='text-decoration:none;'>modify the space conditions.</a></p></body></html> <html><head/><body><p>بوستٸق شارتتاردى قولدا <a href='#addfiles' style='text-decoration:none;'>حۇجات قوسىپ</a> ياكي <a href='#modifyspace' style='text-decoration:none;'> بوستٸق شارتتاردى وزگەرتەالاسٸز.</a></p></body></html> Choose file to add into space بوستٸققا قوسۋ ٷشٸن حۇجاتتى تالدا peony-extensions/peony-spaceview-plugin/peony-space-view/data/0000775000175000017500000000000015257160264023555 5ustar fengfengpeony-extensions/peony-spaceview-plugin/peony-space-view/data/nodata.svg0000664000175000017500000000751115257160264025550 0ustar fengfengpeony-extensions/peony-spaceview-plugin/peony-space-view/peony-space-view.pro0000664000175000017500000000456215257160277026574 0ustar fengfengQT += widgets dbus TARGET = peony-space-view TEMPLATE = lib DEFINES += PEONYSPACEVIEW_LIBRARY include(../../common.pri) CONFIG += debug c++11 no_keywords link_pkgconfig plugin embed_translations PKGCONFIG +=gio-2.0 glib-2.0 gio-unix-2.0 peony libnotify # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 #TRANSLATIONS = peony-extension-computer-view_zh_CN.ts \ # peony-extension-computer-view_de.ts \ # peony-extension-computer-view_es.ts \ # peony-extension-computer-view_fr.ts \ # peony-extension-computer-view_kk_KZ.ts \ # peony-extension-computer-view_ug_CN.ts \ # peony-extension-computer-view_ky_KG.ts \ # peony-extension-computer-view_cs.ts \ # peony-extension-computer-view_tr.ts \ # peony-extension-computer-view_bo_CN.ts \ # peony-extension-computer-view_mn.ts \ # peony-extension-computer-view_zh_HK.ts #include(computer-view/computer-view.pri) TRANSLATIONS = peony-space-view_zh_CN.ts\ peony-space-view_zh_HK.ts\ peony-space-view_mn.ts\ peony-space-view_ug.ts\ peony-space-view_kk.ts\ peony-space-view_ky.ts\ peony-space-view_bo_CN.ts CONFIG += link_pkgconfig PKGCONFIG += gio-unix-2.0 RESOURCES += peony-space-view.qrc SOURCES += \ peony-space-view-plugin.cpp \ space-view-container.cpp \ space-view.cpp\ HEADERS += \ peony-space-view-plugin.h \ peony-space-view-plugin_global.h \ space-view.h\ space-view-container.h\ #DESTDIR += ../testdir # Default rules for deployment. unix { target.path = $$[QT_INSTALL_LIBS]/peony-extensions } !isEmpty(target.path): INSTALLS += target CONFIG += lrelease embed_translations QM_FILES_RESOURCE_PREFIX = / peony-extensions/peony-spaceview-plugin/peony-space-view/space-view.h0000664000175000017500000000312715257160264025063 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: JinQin He * */ #ifndef SPACEVIEW_H #define SPACEVIEW_H #include #include #include #include class Spaceview: public QWidget{ Q_OBJECT public: explicit Spaceview(QWidget *parent = nullptr,QString uri="",QString Spacename=""); void setDirectoryUri(QString uri); public Q_SLOTS: void handleLinkActivated(const QString &link); void userAddFilesToSpaceBySpaceplugin(const QStringList &filePath,const QString &spaceName,bool isUserAdd); void editSpaceConditionBySpaceplugin(const QString &uri); private: QString m_uri; QString m_spaceName; QDBusInterface* m_signalTransInterface; protected: void dragEnterEvent(QDragEnterEvent *event) override; void dragMoveEvent(QDragMoveEvent *event) override; void dropEvent(QDropEvent *event) override; }; #endif // peony-extensions/peony-spaceview-plugin/peony-space-view/peony-space-view_zh_CN.ts0000664000175000017500000000376015257160264027476 0ustar fengfeng QObject Intelligent Space View 智能空间视图 Use customized Intelligent Data Manager space views when the spaces file content is empty 当空间文件内容为空时使用自定义的智能数æ�®ç®¡ç�†ç©ºé—´è§†å›¾ Spaceview When there are files in the system that meet the space conditions, they will be automatically displayed in the space 当系统中存在符å�ˆè¯¥ç©ºé—´æ�¡ä»¶çš„æ–‡ä»¶æ—¶ï¼Œå°†è‡ªåŠ¨æ˜¾ç¤ºåœ¨ç©ºé—´å†… <html><head/><body><p>You can manually <a href='#addfiles' style='text-decoration:none;'>add files</a> or <a href='#modifyspace' style='text-decoration:none;'>modify the space conditions.</a></p></body></html> <html><head/><body><p>您å�¯ä»¥æ‰‹åЍ <a href='#addfiles' style='text-decoration:none;'>添加文件</a> ,或 <a href='#modifyspace' style='text-decoration:none;'>修改空间æ�¡ä»¶</a></p></body></html> Choose file to add into space 选择文件添加至空间 peony-extensions/peony-spaceview-plugin/peony-space-view/peony-space-view-plugin.h0000664000175000017500000000455515257160264027515 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: JinQin He * */ #ifndef PEONYINTELLIGENTSEARCHVIEWPLUGIN_H #define PEONYINTELLIGENTSEARCHVIEWPLUGIN_H #include "peony-space-view-plugin_global.h" #include #include namespace Peony { class PEONYINTELLIGENTSEARCHVIEW_EXPORT PeonyIntelligentSpaceViewPlugin : public QObject, public DirectoryViewPluginIface2 { Q_OBJECT public: Q_PLUGIN_METADATA(IID DirectoryViewPluginIface2_iid FILE "common.json") Q_INTERFACES(Peony::DirectoryViewPluginIface2) public: explicit PeonyIntelligentSpaceViewPlugin(QObject *parent = nullptr); PluginType pluginType() {return PluginType::DirectoryViewPlugin2;} const QString name() {return QObject::tr("Intelligent Space View");} const QString description() {return QObject::tr("Use customized Intelligent Data Manager space views when the spaces file content is empty");} const QIcon icon() {return QIcon::fromTheme("kylin-data-manager");} void setEnable(bool enable) {} bool isEnable() {return true;} //view QString viewIdentity() { return "Space View"; } QString viewName() {return name();} QIcon viewIcon() {return icon();} bool supportUri(const QString &uri) {return uri.startsWith("idm:///");} int zoom_level_hint() {return -1;} int minimumSupportedZoomLevel() {return -1;} int maximumSupportedZoomLevel() {return -1;} int priority(const QString &directoryUri); bool supportZoom() {return false;} DirectoryViewWidget *create(); Q_SIGNALS: private: QString m_currentUri; QString m_spacename; }; } #endif // PEONYINTELLIGENTSEARCHVIEWPLUGIN_H peony-extensions/peony-spaceview-plugin/peony-space-view/space-view-container.h0000664000175000017500000000625615257160264027051 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: JinQin He * */ #ifndef SPACEVIEWCONTAINER_H #define SPACEVIEWCONTAINER_H #include #include #include #include "space-view.h" #include #include #include #include namespace Peony { class SpaceViewContainer : public DirectoryViewWidget { public: explicit SpaceViewContainer(QWidget *parent = nullptr,QString uri="",QString Spacename=""); ~SpaceViewContainer(); const virtual QString viewId() { return "Space View"; } const virtual QString getDirectoryUri(); //selections const virtual QStringList getSelections() { return QStringList(); } //children const virtual QStringList getAllFileUris(){ return QStringList(); } virtual int getSortType() { return 0; } virtual Qt::SortOrder getSortOrder() { return Qt::AscendingOrder; } //zoom virtual int currentZoomLevel() { return -1; } virtual int minimumZoomLevel() { return -1; } virtual int maximumZoomLevel() { return -1; } virtual bool supportZoom() { return false; } public Q_SLOTS: virtual void bindModel(FileItemModel *model, FileItemProxyFilterSortModel *proxyModel); //location //virtual void open(const QStringList &uris, bool newWindow) {} virtual void setDirectoryUri(const QString &uri); virtual void beginLocationChange(); virtual void stopLocationChange(); virtual void closeDirectoryView() {} //selections virtual void setSelections(const QStringList &uris) {} virtual void invertSelections() {} virtual void scrollToSelection(const QString &uri) {} //clipboard //cut items should be drawn differently. virtual void setCutFiles(const QStringList &uris) {} virtual void setSortType(int sortType) {} virtual void setSortOrder(int sortOrder) {} virtual void editUri(const QString &uri) {} virtual void editUris(const QStringList uris) {} virtual void repaintView() {} virtual void clearIndexWidget() {} //zoom virtual void setCurrentZoomLevel(int zoomLevel) {} protected: virtual void contextMenuEvent(QContextMenuEvent *event) override; private: QString m_currentUri; QString m_Spacename; Spaceview *m_view = nullptr; }; } #endif // SPACEVIEWCONTAINER_H peony-extensions/peony-spaceview-plugin/peony-spaceview-plugin.pro0000664000175000017500000000007315257160264024605 0ustar fengfengTEMPLATE = subdirs dbus SUBDIRS += \ peony-space-view peony-extensions/common.json0000664000175000017500000000003315257160264015216 0ustar fengfeng{ "version": "3.2.2" } peony-extensions/peony-intelligent-plugin/0000775000175000017500000000000015257160264020001 5ustar fengfengpeony-extensions/peony-intelligent-plugin/peony-intelligent-plugin.pro0000664000175000017500000000010315257160264025457 0ustar fengfengTEMPLATE = subdirs SUBDIRS += \ peony-intelligent-search-view peony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/0000775000175000017500000000000015257160277025666 5ustar fengfengpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/search-view-container.h0000664000175000017500000000721315257160277032237 0ustar fengfeng/* * Peony Intelligent Spaces Service * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: He JinQin * */ #ifndef SEARCHVIEWCONTAINER_H #define SEARCHVIEWCONTAINER_H #include #include #include #include "search-view.h" #include"searchresultmodel.h" #include #include #include enum extractType{ keyWord=0, spaceName, searchPath }; namespace Peony { class SearchViewContainer : public DirectoryViewWidget { public: explicit SearchViewContainer(QWidget *parent = nullptr,QString uri=""); ~SearchViewContainer(); const virtual QString viewId() { return "Search View"; } const virtual QString getDirectoryUri(); //selections const virtual QStringList getSelections(); //children const virtual QStringList getAllFileUris(); virtual int getSortType(); virtual Qt::SortOrder getSortOrder(); //zoom virtual int currentZoomLevel() { return -1; } virtual int minimumZoomLevel() { return -1; } virtual int maximumZoomLevel() { return -1; } virtual bool supportZoom() { return false; } QString extractWithRegex(extractType type); void applySorting(); void performSearch(); public Q_SLOTS: virtual void bindModel(FileItemModel *model, FileItemProxyFilterSortModel *proxyModel); //location //virtual void open(const QStringList &uris, bool newWindow) {} virtual void setDirectoryUri(const QString &uri); virtual void beginLocationChange(); virtual void stopLocationChange(); virtual void closeDirectoryView() {} //selections virtual void setSelections(const QStringList &uris) {} virtual void invertSelections(); virtual void scrollToSelection(const QString &uri) {} //clipboard //cut items should be drawn differently. virtual void setCutFiles(const QStringList &uris) {} virtual void setSortType(int sortType); virtual void setSortOrder(int sortOrder); virtual void editUri(const QString &uri); virtual void editUris(const QStringList uris); virtual void repaintView() {} virtual void clearIndexWidget() {} //zoom virtual void setCurrentZoomLevel(int zoomLevel) {} void onItemDoubleClicked(const QModelIndex &index); void requestShowAISubsystemDialog(); private: QString m_currentUri; SearchView *m_view = nullptr; SearchFileItemModel *m_model = nullptr; SearchFilterProxyModel* m_proxyModel = nullptr; QDBusInterface* m_signalTransInterface; bool isAiConditionAvialable; bool m_isFileContentOn; TreeviewDelegate* m_delegate ; QString m_clientId; AIConditionType aiConditionType; int m_sortType; int m_sortOrder; QString m_defaultUri; std::shared_ptr m_watcher; QTimer* m_searchDelayTimer = nullptr; QString m_keyword; }; } #endif // SEARCHVIEWCONTAINER_H peony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/searchresultmodel.h0000775000175000017500000002332015257160277031567 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: JinQin He * */ #ifndef SEARCHRESULTMODEL_H #define SEARCHRESULTMODEL_H #include #include "file-info.h" #include "clipboard-utils.h" #include "PeonyFileInfoJob" #include "thumbnail-manager.h" #include "PeonyFileWatcher" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(__x86_64__) || defined(_M_X64) || defined(__aarch64__)|| defined(_M_ARM64) #define ARCH_AVAILABLE_AI #endif bool isFileContentOn(); enum AIConditionType{ allFit=0, aiIndexNotFit, aiSubsystemNotFit }; class SearchFileItemModel : public QAbstractItemModel { Q_OBJECT public: enum ItemIds { ROOT_ID = 0, FILE_CATEGORY_ID = 1, CONTENT_CATEGORY_ID = 2, TEXT_CONTENT_CATEGORY_ID = 3, FILE_ITEM_BASE_ID = 0x100000, CONTENT_ITEM_BASE_ID = 0x200000, TEXT_CONTENT_ITEM_BASE_ID = 0x300000, }; explicit SearchFileItemModel(QObject *parent = nullptr); ~SearchFileItemModel(); // QAbstractItemModel接å�£ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; Qt::ItemFlags flags(const QModelIndex &index) const override; QMimeData *mimeData(const QModelIndexList& indexes) const override; // æ•°æ�®æ“�作接å�£ void clearAll(); void keywordchange(QString keyword); bool isFileCategory(quintptr id) const { return id == FILE_CATEGORY_ID; } bool isContentCategory(quintptr id) const { return id == CONTENT_CATEGORY_ID; } bool isTextContentCategory(quintptr id) const { return id == TEXT_CONTENT_CATEGORY_ID; } bool isFileItem(quintptr id) const { return id >= FILE_ITEM_BASE_ID && id < CONTENT_ITEM_BASE_ID; } bool isContentItem(quintptr id) const { return id >= CONTENT_ITEM_BASE_ID && id = TEXT_CONTENT_ITEM_BASE_ID; } void updateSearchstatus(bool isFinish); void setClientId(QString clientid); void addDefaultContent(); void setAiCondition(bool isAiavailable); void childRemove(const QString uri); bool childRename(const QString& oldUri, const QString& newUri); bool hasDefaultContent(); void loadNextBatchIcons(QList infolist); void loadContentIcon(); bool isSortingEnabled(); public Q_SLOTS: void addFileNameResults(QList fileResults,QString clientid); void addFileNameResultsByBatch(QList fileResults,QString clientid,bool finish); void addContentResults( QList contentResults,QString clientid); void clearResult(); //void addTextContentResults( QList contentResults,QString clientid); Q_SIGNALS: void searchFinished(); void resizeColFitContent(); void expand(int index=0); private: QList m_fileResults; QList m_contentResults; //QList m_textContentResults; QString m_keyword; bool searchFilefinish = false; bool searchContentfinish = false; //bool searchTextContentFinish = false; QString m_clientId; bool m_isAiavailable; bool m_showFileExtension; bool m_hasDefaultContent = false; std::map m_iconMap; QMutex m_dataMutex; bool m_SortingEnabled; QList m_thumbnailQueue; // 控制å�Œæ—¶è¿›è¡Œçš„缩略图加载任务数é‡� int m_maxConcurrentThumbnails = 100; // 当å‰�正在进行的缩略图加载任务数 int m_currentThumbnailTasks = 0; // 处ç�†ç¼©ç•¥å›¾é˜Ÿåˆ—的方法 void processThumbnailQueue(); }; class TextEdit : public QTextEdit { Q_OBJECT public: explicit TextEdit(QWidget *parent = nullptr); void adjustText(); void setMaxLengthLimit(int length); void setLimitBytes(bool limitBytes); QTextEdit *m_backgroundEdit = nullptr; void setMargins(int left, int top, int right, int bottom); Q_SIGNALS: void finishEditRequest(); void focusLost(); // 自定义信å�·ï¼Œç”¨äºŽé€šçŸ¥ç„¦ç‚¹ä¸¢å¤± protected: void keyPressEvent(QKeyEvent *e); void focusOutEvent(QFocusEvent *e) override; private: int m_max_length_limit = 0; bool m_limit_bytes = true; }; class TreeviewDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit TreeviewDelegate(QObject* parent = nullptr) : QStyledItemDelegate(parent) {} void initIndexOption(QStyleOptionViewItem *option, const QModelIndex &index) const { return initStyleOption(option, index); } void setHighlightKeyword(const QString& keyword) { m_keyword = keyword; } QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override; void setEditorData(QWidget* editor, const QModelIndex& index) const override; void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const override; void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const override; void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; Q_SIGNALS: void isEditing(bool editing) const; private Q_SLOTS: void slot_finishEdit();/* 编辑完æˆ� */ private: QString m_keyword; }; class SearchFilterProxyModel : public QSortFilterProxyModel { Q_OBJECT public: enum Type { FileType=1, FileSize, DateRange, FileName, FileLabel, ConditionMatchRule, FileContent, SearchLocation, }; enum FilterFileType { ALL_TYPE, FILE_FOLDER, PICTURE, VIDEO, TXT_FILE, AUDIO, WPS_FILE, OTHERS }; Q_ENUM(FilterFileType) enum FilterFileModifyTime { ALL_TIME, TODAY, YESTERDAY, THIS_WEEK, LAST_WEEK, THIS_MONTH, LAST_MONTH, THIS_YEAR, LAST_YEAR, BEFORE_LAST_YEAR }; Q_ENUM(FilterFileModifyTime) enum FilterFileSize { ALL_SIZE, EMPTY, TINY, SMALL, MEDIUM, BIG, LARGE, GREAT }; Q_ENUM(FilterFileSize) const QString Folder_Type = "inode/directory"; const QString Image_Type = "image/"; const QString Video_Type = "video/"; const QString Text_Type = "text/"; const QString Wps_Type = "application/wps-office"; const QString Audio_Type = "audio/"; const int ALL_FILE = 0; const quint64 K_BASE = 1024; const quint64 TINY_BASE = 16 * K_BASE; const quint64 SMALL_BASE = K_BASE * K_BASE; const quint64 MEDIUM_BASE = 128 * K_BASE * K_BASE; const quint64 BIG_BASE = K_BASE * K_BASE * K_BASE; const quint64 LARGE_BASE = 4 * K_BASE * K_BASE * K_BASE; explicit SearchFilterProxyModel(QObject* parent = nullptr); QStringList getFiltereUrilist(); void update(); void checkSortSettings(); void setCurrenturi(QString uri); bool startWithChinese(const QString &displayName) const; public Q_SLOTS: void updateconditions(QString conditionsobj); protected: bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const override; bool lessThan(const QModelIndex& left, const QModelIndex& right) const override; bool hasChildren(const QModelIndex& parent) const override; bool checkFileModifyTimeFilter(quint64 modifiedTime) const; bool checkFileSizeFilter(quint64 size) const; bool checkFileSizeOrTypeFilter(quint64 sizem, bool isDir) const; bool checkFileNameFilter(const QString &displayName) const; bool checkFileContentFilter(const QString &displayName) const; bool checkFileTypeFilter(QString type) const; private: QStringList urilist; QMap m_conditions; QMapm_contains; QStringList m_keywords; bool m_keywordsContain = true; bool needFileContent = true; bool m_use_default_name_sort_order; bool m_use_global_sort; bool m_folder_first; QString m_uri; Peony::GlobalSettings *m_settings; }; #endif // SEARCHRESULTMODEL_H ././@LongLink0000644000000000000000000000016100000000000011601 Lustar rootrootpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-view-plugin.cpppeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-vie0000664000175000017500000000306515257160277033307 0ustar fengfeng/* * Peony Intelligent Spaces Service * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: He JinQin * */ #include "peony-intelligent-search-view-plugin.h" #include "search-view-container.h" #include #include using namespace Peony; PeonyIntelligentSearchViewPlugin::PeonyIntelligentSearchViewPlugin(QObject *parent) { //加载翻译 QTranslator *t = new QTranslator(this); t->load(":/peony-intelligent-search-view_"+QLocale::system().name()); QApplication::installTranslator(t); } int PeonyIntelligentSearchViewPlugin::priority(const QString &directoryUri) { qDebug() << "=======" << __func__ << directoryUri; m_currentUri = directoryUri; if (directoryUri.startsWith("search:///")) { return 1; } return -1; } DirectoryViewWidget *PeonyIntelligentSearchViewPlugin::create() { return new SearchViewContainer(nullptr,m_currentUri); } ././@LongLink0000644000000000000000000000015400000000000011603 Lustar rootrootpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-view_ky.tspeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-vie0000664000175000017500000001137715257160264033310 0ustar fengfeng QObject Intelligent Search View روحىي جۅندۅمدۉلۉك ىزدۅۅ گۅرۉنۉشۉ Use customized Intelligent Data Manager views when searching in File Manager ۅجۅت باشقۇرعۇچتان ىزدەگەندە ۅزۉ بەلگىلەنگەن روحىي جۅندۅمدۉلۉك ساندۇۇ باياندامالاردى باشقارىش گۅرۉنۉشۉن ىشتەتىش كەرەك SearchFileItemModel File Name Match اتى شايكەشتىرىپ Intelligent Content Recognition Match روحىي جۅندۅمدۉلۉك مازمۇن ايىرمالاندىرىش شىرەڭكە Text Content Name ات-تەك اتى Modified Date ۅزگۅرتۉلگۅن ۇباقتى File Type ۅجۅت تۉرۉ File Size ۅجۅت چوڭدۇعۇ To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】<span style='color:#3790FA;'>Open "AI Index"</span> To Obtain the Matching Results of Text, Pictures, Videos. Please<span style='color:#3790FA;'> Open "File Content Index"</span> To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】<span style='color:blue;'>Open "AI Index"</span> To Obtain Natural Language Recognition Results, Please <span style='color:blue;'>Enable "AI Index"</span> inã€�Settings】->ã€�Global Search】 تابىحىي تىل ايىرمالاندىرىش ناتىيجاسىنا Û•Û• بولۇۇدا ØŒ " > ã€� ئومۇمىيلىقنى ىزدۅۅ ] < span style=color: blue > "AI بەلگىلەنگن نارق " اچۇۇ</span> كەرەك Spaceview When there are files in the system that meet the space conditions, they will be automatically displayed in the space 当系统中存在符å�ˆè¯¥ç©ºé—´æ�¡ä»¶çš„æ–‡ä»¶æ—¶ï¼Œå°†è‡ªåŠ¨æ˜¾ç¤ºåœ¨ç©ºé—´å†… You can manually <span style='color:#3790FA;'>add files</span> or <span style='color:#3790FA;'>modify the space conditions.</span> 您å�¯ä»¥æ‰‹åЍ <span style='color:#3790FA;'>添加文件</span> ,或 <span style='color:#3790FA;'>修改空间æ�¡ä»¶</span> searchThumbnailManager Failed to create image for %1 ././@LongLink0000644000000000000000000000015400000000000011603 Lustar rootrootpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-view_kk.tspeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-vie0000664000175000017500000001126515257160264033304 0ustar fengfeng QObject Intelligent Search View وي قابٸلەتتٸ ٸزدەۋ كورىنۋى Use customized Intelligent Data Manager views when searching in File Manager حۇجات باسقارۋشىدان ىزدەگەندە ٶزى بەلگٸلەنگەن وي قابٸلەتتٸ ساندىق مالىمەتتەردى باسقارۋ كورىنۋدى ٸستەتۋ كەرەك SearchFileItemModel File Name Match اتٸ سايكەستىرۋ Intelligent Content Recognition Match وي قابٸلەتتٸ مازمۇن پارىقتاندىرۋ سايكەستىك Text Content Name مى Modified Date وزگەرتىلگەن ۋاقىتى File Type حۇجات تۇرى File Size حۇجات ۇلكەندىگى To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】<span style='color:#3790FA;'>Open "AI Index"</span> To Obtain the Matching Results of Text, Pictures, Videos. Please<span style='color:#3790FA;'> Open "File Content Index"</span> To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】<span style='color:blue;'>Open "AI Index"</span> To Obtain Natural Language Recognition Results, Please <span style='color:blue;'>Enable "AI Index"</span> inã€�Settings】->ã€�Global Search】 تابيعي ٴتٸل پارىقتاندىرۋ ناتيجەسىنە قول جەتكىزۋدە ØŒ " > ã€� جالپىلىقتى ٸزدەۋ ] < span style=color: blue > "AI كورسەتكىش" ٸشٸۋ</span> كەرەك Spaceview When there are files in the system that meet the space conditions, they will be automatically displayed in the space 当系统中存在符å�ˆè¯¥ç©ºé—´æ�¡ä»¶çš„æ–‡ä»¶æ—¶ï¼Œå°†è‡ªåŠ¨æ˜¾ç¤ºåœ¨ç©ºé—´å†… You can manually <span style='color:#3790FA;'>add files</span> or <span style='color:#3790FA;'>modify the space conditions.</span> 您å�¯ä»¥æ‰‹åЍ <span style='color:#3790FA;'>添加文件</span> ,或 <span style='color:#3790FA;'>修改空间æ�¡ä»¶</span> searchThumbnailManager Failed to create image for %1 peony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/searchresultmodel.cpp0000775000175000017500000016613215257160277032133 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: JinQin He * */ #include "searchresultmodel.h" #include "QUrl" #include "searchresultmodel.h" #include #include #include #include #include #include #include #include #include #include "search-view.h" #include "file-rename-operation.h" #include "thumbnail/searchthumbnailmanager.h" #include #include QLocale locale = QLocale(QLocale::system().name()); QCollator comparer = QCollator(locale); using namespace Peony; SearchFileItemModel::SearchFileItemModel(QObject *parent) : QAbstractItemModel(parent) { qDBusRegisterMetaType>(); qRegisterMetaType>("QList"); QDBusConnection connection = QDBusConnection::sessionBus(); if (!connection.isConnected()) { qDebug() << "ä¿¡å�·åˆ›å»ºå¤±è´¥:" << connection.lastError().message(); return ; } // 连接信å�· bool connected = connection.connect("com.peony.idm.service", "/org/peony/idm/space/service", "org.peony.idm.modelcontroller", "searchfileReload", this,SLOT(addFileNameResults(QList,QString))); connected = connection.connect("com.peony.idm.service", "/org/peony/idm/space/service", "org.peony.idm.modelcontroller", "searchfileReloadByBatch", this,SLOT(addFileNameResultsByBatch(QList,QString,bool))); connection.connect("com.peony.idm.service", "/org/peony/idm/space/service", "org.peony.idm.modelcontroller", "searchContentReload", this,SLOT(addContentResults(QList,QString))); // connection.connect("com.peony.idm.service", "/org/peony/idm/space/service", "org.peony.idm.modelcontroller", // "searchTextContentReload", this,SLOT(addTextContentResults(QList,QString))); auto settings = GlobalSettings::getInstance(); m_showFileExtension = settings->isExist(SHOW_FILE_EXTENSION)? settings->getValue(SHOW_FILE_EXTENSION).toBool(): true; connect(GlobalSettings::getInstance(), &GlobalSettings::valueChanged, this, [=] (const QString& key) { if (SHOW_FILE_EXTENSION == key) { m_showFileExtension= GlobalSettings::getInstance()->getValue(key).toBool(); beginResetModel(); endResetModel(); Q_EMIT expand(0); } }); m_maxConcurrentThumbnails = 100; // å�Œæ—¶æœ€å¤šå¤„ç�†100个缩略图任务 m_currentThumbnailTasks = 0; } SearchFileItemModel::~SearchFileItemModel() { m_fileResults.clear(); m_contentResults.clear(); for (auto& pair : m_iconMap) { if (!pair.second.isNull()) { pair.second.detach(); pair.second = QIcon(); } } m_iconMap.clear(); QPixmapCache::clear(); malloc_trim(0); } QModelIndex SearchFileItemModel::index(int row, int column, const QModelIndex &parent) const { if (!hasIndex(row, column, parent)) return QModelIndex(); if (!parent.isValid()) { // 一级节点(分类节点) switch (row) { case 0: return createIndex(row, column, FILE_CATEGORY_ID); case 1: return createIndex(row, column, CONTENT_CATEGORY_ID); //case 2: return createIndex(row, column, TEXT_CONTENT_CATEGORY_ID); default: return QModelIndex(); } } // 二级节点(结果项) quintptr parentId = parent.internalId(); if (parentId == FILE_CATEGORY_ID) { if (row < m_fileResults.size()) { return createIndex(row, column, FILE_ITEM_BASE_ID + row); } } else if (parentId == CONTENT_CATEGORY_ID) { if (row < m_contentResults.size()) { return createIndex(row, column, CONTENT_ITEM_BASE_ID + row); } } // else if (parentId == TEXT_CONTENT_CATEGORY_ID) { // if (row < m_textContentResults.size()) { // return createIndex(row, column, TEXT_CONTENT_ITEM_BASE_ID + row); // } // } return QModelIndex(); } QModelIndex SearchFileItemModel::parent(const QModelIndex &index) const { if (!index.isValid()) return QModelIndex(); quintptr id = index.internalId(); // 一级节点没有父节点 if (id <= CONTENT_CATEGORY_ID) return QModelIndex(); // 文件项的å­�节点 if (isFileItem(id)) { return createIndex(0, 0, FILE_CATEGORY_ID); } // 内容项的å­�节点 else if (isContentItem(id)) { return createIndex(1, 0, CONTENT_CATEGORY_ID); } // else if(isTextContentItem(id)){ // return createIndex(2, 0, TEXT_CONTENT_CATEGORY_ID); // } return QModelIndex(); } int SearchFileItemModel::rowCount(const QModelIndex &parent) const { if (!parent.isValid()) { // 根节点 return 2; // 两个分类节点 } quintptr id = parent.internalId(); if (isFileCategory(id)) { return m_fileResults.size(); } else if (isContentCategory(id)) { return m_contentResults.size(); }/*else if (isTextContentCategory(id)) { return m_textContentResults.size(); }*/ return 0; // 结果项没有å­�节点 } int SearchFileItemModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); return 4; // å��ç§°ã€�修改日期ã€�类型ã€�大å°� } QVariant SearchFileItemModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); quintptr id = index.internalId(); int column = index.column(); int row; QStringList item; int size =0; // 分类节点数æ�® if (isFileCategory(id)) { if (column == 0 && role == Qt::DisplayRole) { return tr("File Name Match"); } return QVariant(); } else if (isContentCategory(id)) { if (column == 0 && role == Qt::DisplayRole) { #ifdef ARCH_AVAILABLE_AI return tr("Intelligent Content Recognition Match"); #else return tr("Text Content"); #endif } return QVariant(); }/*else if(isTextContentCategory(id)){ if (column == 0 && role == Qt::DisplayRole) { return tr("Text Content"); } }*/ else if (isFileItem(id)) { row = id - FILE_ITEM_BASE_ID; item = m_fileResults[row]; size = m_fileResults.size(); } else if(isContentItem(id)){ row = id - CONTENT_ITEM_BASE_ID; item = m_contentResults[row]; size = m_contentResults.size(); } // else if(isTextContentItem(id)){ // row = id - TEXT_CONTENT_ITEM_BASE_ID; // item = m_textContentResults[row]; // size = m_textContentResults.size(); // } if (row >= 0 && row < size) { switch (role) { case Qt::DisplayRole: switch (column) { case 0: { if(!m_showFileExtension){ auto info = Peony::FileInfo::fromUri(item.value(0)); if (info->isDir()||(!item.value(4).contains("."))) { return QVariant(item.value(4)); } return QVariant(FileUtils::getBaseNameOfFile(item.value(4))); }else return QVariant(item.value(4)); } case 1: return item.value(1);//modifytime format case 2: return item.value(2);//filetype case 3: return item.value(3);//sizeformat } break; // case Qt::BackgroundRole: // if (item->type() == SearchFileItem::ContentItem) // return QColor(240, 245, 255); // break; case Qt::UserRole: return item.value(0);//uri break; case Qt::UserRole+1: return item.value(5);//filepath break; case Qt::UserRole+2: return item.value(7);//fileminetyle break; case Qt::UserRole+3: return item.value(8);//int size break; case Qt::UserRole+4: return item.value(9);//modifytime int break; case Qt::UserRole+5: return item.value(6);//iconname break; case Qt::DecorationRole: if (index.column() == 0) { if(!m_isAiavailable && isContentItem(id) && item.value(6)=="") return ""; QIcon icon = QIcon::fromTheme(item.value(6),QIcon::fromTheme("unknown")); auto it = m_iconMap.find(item.value(5)); if (it != m_iconMap.end()) { QIcon thumbnailIcon = it->second; // 获å�–原始指针但ä¸�转移所有æ�ƒ return thumbnailIcon.isNull()?icon:thumbnailIcon; } return icon; } break; } } return QVariant(); } QVariant SearchFileItemModel::headerData(int section, Qt::Orientation orientation, int role) const { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { switch (section) { case 0: return tr("Name"); case 1: return tr("Modified Date"); case 2: return tr("File Type"); case 3: return tr("File Size"); } } return QVariant(); } Qt::ItemFlags SearchFileItemModel::flags(const QModelIndex &index) const { if (index.isValid()) { Qt::ItemFlags flags = QAbstractItemModel::flags(index); if (index.column() == 0) { flags |= Qt::ItemIsDragEnabled; flags |= Qt::ItemIsEditable; } return flags; } } QMimeData* SearchFileItemModel::mimeData(const QModelIndexList &indexes) const { QMimeData *mimeData = new QMimeData(); QStringList uris; QStringList encodedUris; for (const QModelIndex &index : indexes) { if (index.isValid() && index.column() == 0) { QString uri = data(index, Qt::UserRole).toString(); // å�‡è®¾ URI 存储在 UserRole 中 uris << uri; encodedUris << uri; } } QList urlList; for (const QString &uri : uris) { urlList << QUrl(uri); } mimeData->setUrls(urlList); auto encodedString = encodedUris.join(" "); mimeData->setData("peony-qt/encoded-uris", encodedString.toUtf8()); auto string = uris.join(" "); mimeData->setText(string); return mimeData; } void SearchFileItemModel::addFileNameResults(QList fileResults,QString clientid) { // QTimer::singleShot(500, this, [this, fileResults, clientid]() {//防止频ç¹�更新导致UI界é�¢æ˜¾ç¤ºç©ºç™½å¼‚常 // if (!m_fileResults.isEmpty()) { // beginRemoveRows(index(0, 0), 0, m_fileResults.size() - 1); // m_fileResults.clear(); // endRemoveRows(); // } // if (fileResults.isEmpty() || (clientid!=m_clientId)){ // if(searchContentfinish /*&& searchTextContentFinish*/){ // Q_EMIT searchFinished(); // } // searchFilefinish = true; // return; // } // beginInsertRows(index(0, 0), 0, fileResults.size() - 1); // m_fileResults = fileResults; // searchFilefinish = true; // endInsertRows(); // if(searchContentfinish /*&& searchTextContentFinish*/){ // Q_EMIT searchFinished(); // } // Q_EMIT resizeColFitContent(); // }); } void SearchFileItemModel::addContentResults(QList contentResults,QString clientid) { if (!m_contentResults.isEmpty()) { beginRemoveRows(index(1, 0), 0, m_contentResults.size() - 1); m_contentResults.clear(); endRemoveRows(); } if (contentResults.isEmpty() || (clientid!=m_clientId)){ if(searchFilefinish /*&& searchTextContentFinish*/){ Q_EMIT searchFinished(); } searchContentfinish = true; QTimer::singleShot(100, this, [this]() { if (!m_isAiavailable) { addDefaultContent(); } }); return; } beginInsertRows(index(1, 0), 0, contentResults.size() - 1); m_contentResults = contentResults; searchContentfinish = true; endInsertRows(); if(searchFilefinish /*&& searchTextContentFinish*/){ Q_EMIT searchFinished(); } loadContentIcon(); Q_EMIT resizeColFitContent(); } void SearchFileItemModel::clearResult() { beginRemoveRows(index(0, 0), 0, m_fileResults.size() - 1); m_fileResults.clear(); endRemoveRows(); beginRemoveRows(index(1, 0), 0, m_contentResults.size() - 1); m_contentResults.clear(); endRemoveRows(); } void SearchFileItemModel::clearAll() { Q_EMIT layoutAboutToBeChanged(); m_fileResults.clear(); if(m_isAiavailable) m_contentResults.clear(); m_iconMap.clear(); Q_EMIT layoutChanged(); } void SearchFileItemModel::keywordchange(QString keyword){ m_keyword = keyword; clearAll(); } void SearchFileItemModel::loadContentIcon(){ QModelIndex sourceRoot = QModelIndex(); // 根节点索引 // 获å�–根节点的行数(å­�项数é‡�) int Count = rowCount(sourceRoot); int i = int(CONTENT_CATEGORY_ID) -1; QModelIndex catIndex = index(i, 0, sourceRoot); int count = rowCount(catIndex); QModelIndex topLeft = index(0, 0, catIndex); QModelIndex bottomRight = index(count - 1,columnCount(catIndex) -1, catIndex); for (int j = 0; j < count; ++j) { QModelIndex childIndex = index(j, 0, catIndex); QString path = data(childIndex, Qt::UserRole+1).toString(); QString fileType = data(childIndex, Qt::UserRole+2).toString(); if(fileType.startsWith("text")){ continue; } searchThumbnailManager *manager = new searchThumbnailManager(nullptr); manager->setStrictedMode(true); manager->startPreview(path); connect(manager, &searchThumbnailManager::thumbnailFinished, this, [=](const QString &path, const QImage &image, const QString &errorMessage){ QMutexLocker locker(&m_dataMutex); QPixmap pixmap = QPixmap::fromImage(image); QIcon icon; icon.addPixmap(QPixmap::fromImage(image)); m_iconMap[path] = icon; Q_EMIT dataChanged(topLeft, bottomRight); manager->deleteLater(); }); } } bool SearchFileItemModel::isSortingEnabled() { return m_SortingEnabled; } void SearchFileItemModel::addFileNameResultsByBatch(QList fileResults, QString clientid, bool finish) { if (fileResults.isEmpty() || clientid != m_clientId) { if(finish) { searchFilefinish = true; if(searchContentfinish) { Q_EMIT searchFinished(); } m_SortingEnabled = true; } return; } // 批é‡�æ�’入数æ�® int startPos = m_fileResults.size(); int endPos = startPos + fileResults.size() - 1; beginInsertRows(index(0, 0), startPos, endPos); m_fileResults.append(fileResults); endInsertRows(); m_SortingEnabled = false; // 异步生æˆ�缩略图 if(finish) { m_SortingEnabled = true; if(searchContentfinish) { Q_EMIT searchFinished(); } searchFilefinish = true; } loadNextBatchIcons(fileResults); } void SearchFileItemModel::loadNextBatchIcons(QList infolist) { int batchCount = infolist.size(); if (batchCount == 0) return; // 将需è¦�加载缩略图的文件路径添加到队列中 for (int i = 0; i < batchCount; ++i) { QString path = infolist[i][5]; QString fileType = infolist[i][7]; // å�ªå¯¹é�žæ–‡æœ¬æ–‡ä»¶è¿›è¡Œç¼©ç•¥å›¾åŠ è½½ if (!fileType.startsWith("text")) { m_thumbnailQueue.append(path); } } // 开始处ç�†ç¼©ç•¥å›¾é˜Ÿåˆ— processThumbnailQueue(); } void SearchFileItemModel::processThumbnailQueue() { // 如果队列为空或已达到最大并å�‘数,则返回 if (m_thumbnailQueue.isEmpty() || m_currentThumbnailTasks >= m_maxConcurrentThumbnails) { return; } // 计算本次å�¯ä»¥å¤„ç�†çš„任务数 int tasksToStart = qMin(m_maxConcurrentThumbnails - m_currentThumbnailTasks, m_thumbnailQueue.size()); for (int i = 0; i < tasksToStart; ++i) { QString path = m_thumbnailQueue.takeFirst(); m_currentThumbnailTasks++; searchThumbnailManager *manager = new searchThumbnailManager(nullptr); manager->setStrictedMode(true); manager->startPreview(path); connect(manager, &searchThumbnailManager::thumbnailFinished, this, [=](const QString &path, const QImage &image, const QString &errorMessage) { if (!image.isNull()) { QMutexLocker locker(&m_dataMutex); QIcon icon; icon.addPixmap(QPixmap::fromImage(image)); m_iconMap[path] = icon; } // å‡�少当å‰�任务计数 m_currentThumbnailTasks--; // 删除manager对象 manager->deleteLater(); // 触å�‘界é�¢æ›´æ–°ï¼ˆå�¯ä»¥è€ƒè™‘批é‡�更新) QModelIndex sourceRoot = QModelIndex(); QModelIndex catIndex = index(0, 0, sourceRoot); if (catIndex.isValid()) { int rowCountVal = rowCount(catIndex); if (rowCountVal > 0) { QModelIndex topLeft = index(0, 0, catIndex); QModelIndex bottomRight = index(rowCountVal - 1, columnCount(catIndex) - 1, catIndex); Q_EMIT dataChanged(topLeft, bottomRight); } } // // 继续处ç�†é˜Ÿåˆ—中的其他任务 if (!m_thumbnailQueue.isEmpty()) { QTimer::singleShot(0, this, &SearchFileItemModel::processThumbnailQueue); } }); } } void SearchFileItemModel::updateSearchstatus(bool isFinish){ searchFilefinish = isFinish; searchContentfinish = isFinish; } void SearchFileItemModel::setClientId(QString clientid) { m_clientId = clientid; } void SearchFileItemModel::addDefaultContent() { if (!m_isAiavailable){ if(searchFilefinish){ Q_EMIT searchFinished(); } searchContentfinish = true; } QString Warning; #ifdef ARCH_AVAILABLE_AI Warning = tr("To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】Open \"AI Index\" "); #else if(isFileContentOn()){ return; } Warning = tr("To Obtain the Matching Results of Text, Pictures, Videos. Please Open \"File Content Index\""); #endif QStringList list; list<<""<<""<<""<<""<querySync(); QString displayName = info->displayName(); if (info->isDesktopFile()) { displayName = FileUtils::handleDesktopFileName(info->uri(), info->displayName()); } m_fileResults[i].replace(4, displayName); m_fileResults[i].replace(5, newPath); m_fileResults[i].replace(0, newUri); Q_EMIT dataChanged(topLeft, bottomRight, {Qt::UserRole+1, Qt::UserRole, Qt::DisplayRole}); return true; } } // 在内容结果中查找 for (int i = 0; i < m_contentResults.size(); ++i) { if (m_contentResults[i].value(5) == oldPath) { QModelIndex topLeft = index(i, 0, index(1, 0)); QModelIndex bottomRight = index(i, columnCount() - 1, index(1, 0)); auto info = Peony::FileInfo::fromUri(newUri); auto infoJob = new Peony::FileInfoJob(info); infoJob->querySync(); QString displayName = info->displayName(); if (info->isDesktopFile()) { displayName = FileUtils::handleDesktopFileName(info->uri(), info->displayName()); } m_contentResults[i].replace(4, displayName); m_contentResults[i].replace(5, newPath); m_contentResults[i].replace(0, newUri); Q_EMIT dataChanged(topLeft, bottomRight, {Qt::UserRole+1, Qt::UserRole, Qt::DisplayRole}); return true; } } return false; } bool SearchFileItemModel::hasDefaultContent() { return m_hasDefaultContent; } //QIcon SearchFileItemModel::getIcon(const QModelIndex &index) //{ // quintptr id = index.internalId(); // int row; // QStringList item; // if (isFileItem(id)) { // row = id - FILE_ITEM_BASE_ID; // item = m_fileResults[row]; // } // else if(isContentItem(id)){ // row = id - CONTENT_ITEM_BASE_ID; // item = m_contentResults[row]; // } // QIcon icon = QIcon::fromTheme(item.value(6),QIcon::fromTheme("unknown")); // QIcon thumbnailIcon = m_iconMap.value(id); // return thumbnailIcon.isNull()?icon:thumbnailIcon; //} //QMap SearchFileItemModel::getIconMap() //{ // return m_iconMap; //} SearchFilterProxyModel::SearchFilterProxyModel(QObject* parent) : QSortFilterProxyModel(parent) { auto settings = Peony::GlobalSettings::getInstance(); m_settings = settings; setDynamicSortFilter(false); } bool SearchFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const { const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); // 第一级项目总是显示且ä¿�æŒ�原始顺åº� if (!sourceParent.isValid()) { return true; } // // 第二级项目应用过滤 if (!sourceParent.parent().isValid()) { auto sourcemodel = static_cast(sourceModel()); const QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent); const QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent); // 修改日期 const QModelIndex index2 = sourceModel()->index(sourceRow, 2, sourceParent); // 文件类型 const QModelIndex index3 = sourceModel()->index(sourceRow, 3, sourceParent); // 文件大å°� QString displayName = sourceModel()->data(index0, Qt::DisplayRole).toString(); qint64 modifiedDate = sourceModel()->data(index1, Qt::UserRole+4).toLongLong(); QString fileType = sourceModel()->data(index2, Qt::UserRole+2).toString(); qint64 fileSize = sourceModel()->data(index3, Qt::UserRole+3).toLongLong(); if (!checkFileTypeFilter(fileType)) return false; if (! checkFileModifyTimeFilter(modifiedDate)) return false; bool isdir = fileType =="inode/directory"; if (! checkFileSizeOrTypeFilter(fileSize,isdir) ) return false; if (! checkFileNameFilter(displayName)) return false; quintptr id = index.internalId(); if(!needFileContent && sourcemodel->isContentItem(id)){ return false; } } return true; } void SearchFilterProxyModel::updateconditions(QString conditionsobj){ m_keywords.clear(); m_conditions.clear(); m_contains.clear(); needFileContent = true; m_keywordsContain = true; QJsonDocument doc = QJsonDocument::fromJson(conditionsobj.toUtf8()); QJsonObject jsonObj = doc.object(); int count = jsonObj["conditions count"].toInt(); for (int i = 0; i < count; i++) { auto conditionObj = jsonObj[QString::number(i)].toObject(); int type = conditionObj["condition type"].toInt(); bool contains = conditionObj["contains"].toBool(); if(type == int(Type::FileName)) { auto jsonArray = conditionObj["keywords"].toArray(); QStringList keywords; for (auto value : jsonArray) { if(!value.toString().isEmpty()) keywords << value.toString(); } m_keywords<rowCount(sourceRoot); ++i) { QModelIndex catIndex = sourceModel()->index(i, 0, sourceRoot); for (int j = 0; j < sourceModel()->rowCount(catIndex); ++j) { QModelIndex childIndex = sourceModel()->index(j, 0, catIndex); if (filterAcceptsRow(j, catIndex)) { QString uri = sourceModel()->data(childIndex, Qt::UserRole+1).toString(); if (!uri.isEmpty()) { urilist << uri; } } } } return urilist; } void SearchFilterProxyModel::update() { invalidateFilter(); } bool SearchFilterProxyModel::checkFileModifyTimeFilter(quint64 modifiedTime) const{ int ConditionType = int(Type::DateRange); int cur = m_conditions[ConditionType]; bool contains = m_contains[ConditionType]; if(!m_conditions.contains(ConditionType)) return true; if(cur==ALL_TYPE){ return contains; } auto time = QDateTime::currentMSecsSinceEpoch(); auto dateTime = QDateTime::fromMSecsSinceEpoch(time); //qDebug() << "cur QDateTime:" < 0 && size <= TINY_BASE) return contains; break; } case SMALL: //(16k-1M] { if(size > TINY_BASE && size <= SMALL_BASE) return contains; break; } case MEDIUM: //(1M-128M] { if(size > SMALL_BASE && size <= MEDIUM_BASE) return contains; break; } case BIG: //(128M-1G] { if(size > MEDIUM_BASE && size <= BIG_BASE) return contains; break; } case LARGE: //(1-4G] { if (size > BIG_BASE && size <= LARGE_BASE) return contains; break; } case GREAT: //>4G { if (size > LARGE_BASE) return contains; break; } default: break; } return !contains; } bool SearchFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const { // 一级节点按原顺åº�倒åº�排列 Qt::SortOrder order = this->sortOrder(); bool resort = order == Qt::AscendingOrder; bool flag = left.row() > right.row(); if (!left.parent().isValid() && !right.parent().isValid()) {//固定一级节点排åº� ä¸�让文件å��匹é…�在内容匹é…�下é�¢ return resort ? !flag:flag; } SearchFileItemModel *sourceRootModel = static_cast(sourceModel()); if(!sourceRootModel->isSortingEnabled()){ return left.row() < right.row(); } // 获å�–对应的SearchFileItemModel指针 if (left.isValid() && right.isValid()) { // 获å�–当å‰�排åº�的列和顺åº� int sortColumn = this->sortColumn(); // 获å�–对应的数æ�®è§’色 int role ; switch (sortColumn) { case 0: // å��称列 role = Qt::DisplayRole; break; case 1: // 修改日期列 role = Qt::UserRole + 4; break; case 2: // 文件类型列 role = Qt::UserRole + 2; break; case 3: // 文件大å°�列 role = Qt::UserRole + 3; break; default: return QSortFilterProxyModel::lessThan(left, right); } QVariant leftData = sourceRootModel->data(left, role); QVariant rightData = sourceRootModel->data(right, role); // æ ¹æ�®æ•°æ�®ç±»åž‹è¿›è¡Œæ¯”较 if (role == Qt::UserRole + 4 || role == Qt::UserRole + 3) { // 处ç�†æ•°å€¼ç±»åž‹ï¼ˆqint64) qint64 leftValue = leftData.toLongLong(); qint64 rightValue = rightData.toLongLong(); if(leftValue == rightValue) goto default_sort; bool result = (leftValue > rightValue); return result; } else if (role == Qt::UserRole + 2) { // 文件类型使用字符串比较 QString leftDisplayType = leftData.toString(); QString rightDisplayType= rightData.toString(); if (leftDisplayType == rightDisplayType) { goto default_sort; } if (m_use_default_name_sort_order) { bool lesser = true; if(startWithChinese(leftDisplayType) && ! startWithChinese(rightDisplayType)) { // fix #103343 lesser = true; if (sortOrder() == Qt::AscendingOrder) return lesser; return !lesser; } else if(! startWithChinese(leftDisplayType) && startWithChinese(rightDisplayType)) { lesser = false; if (sortOrder() == Qt::AscendingOrder) return lesser; return !lesser; } else return comparer.compare(leftDisplayType, rightDisplayType) > 0; } return comparer.compare(leftDisplayType, rightDisplayType) > 0; }else if(role == Qt::DisplayRole){ //文件å�� goto default_sort; }/*else { // 其他字符串类型比较 QString leftStr = leftData.toString(); QString rightStr = rightData.toString(); return QString::localeAwareCompare(leftStr, rightStr) < 0; }*/ default_sort: const QModelIndex index0 = sourceModel()->index(left.row(), 0, left.parent()); const QModelIndex index1 = sourceModel()->index(right.row(), 0, right.parent()); QString leftDisplayName = sourceRootModel->data(index0, Qt::DisplayRole).toString(); QString rightDisplayName = sourceRootModel->data(index1, Qt::DisplayRole).toString(); if (m_use_default_name_sort_order) { //fix chinese first sort wrong issue, link to bug#70836 //fix bug#97408,change indicator meanings bool lesser = true; if(startWithChinese(leftDisplayName) && ! startWithChinese(rightDisplayName)) { // fix #103343 lesser = true; if (sortOrder() == Qt::AscendingOrder) return lesser; return !lesser; } else if(!startWithChinese(leftDisplayName) && startWithChinese(rightDisplayName)) { lesser = false; if (sortOrder() == Qt::AscendingOrder) return lesser; return !lesser; } else return comparer.compare(leftDisplayName, rightDisplayName) > 0; } return comparer.compare(leftDisplayName, rightDisplayName) > 0; } return QSortFilterProxyModel::lessThan(left, right); } void SearchFilterProxyModel::checkSortSettings() { m_use_global_sort = m_settings->getValue(USE_GLOBAL_DEFAULT_SORTING).toBool(); if (m_use_global_sort) { //m_show_hidden = m_settings->isExist(SHOW_HIDDEN_PREFERENCE)? m_settings->getValue(SHOW_HIDDEN_PREFERENCE).toBool(): false; m_use_default_name_sort_order = m_settings->isExist(SORT_CHINESE_FIRST)? m_settings->getValue(SORT_CHINESE_FIRST).toBool(): false; m_folder_first = m_settings->isExist(SORT_FOLDER_FIRST)? m_settings->getValue(SORT_FOLDER_FIRST).toBool(): true; } else { auto info = Peony::FileInfo::fromUri(m_uri); auto fileMetaInfo = Peony::FileMetaInfo::fromUri(m_uri); if (fileMetaInfo) { //m_show_hidden = fileMetaInfo->getMetaInfoVariant(SHOW_HIDDEN_PREFERENCE).isValid()? fileMetaInfo->getMetaInfoVariant(SHOW_HIDDEN_PREFERENCE).toBool(): false; m_use_default_name_sort_order = fileMetaInfo->getMetaInfoVariant(SORT_CHINESE_FIRST).isValid()? fileMetaInfo->getMetaInfoVariant(SORT_CHINESE_FIRST).toBool(): true; m_folder_first = fileMetaInfo->getMetaInfoVariant(SORT_FOLDER_FIRST).isValid()? fileMetaInfo->getMetaInfoVariant(SORT_FOLDER_FIRST).toBool(): true; } else { m_use_default_name_sort_order = true; m_folder_first = true; } } } void SearchFilterProxyModel::setCurrenturi(QString uri) { m_uri = uri; } bool SearchFilterProxyModel::startWithChinese(const QString &displayName) const { //NOTE: a newly created file might could not get display name soon. if (displayName.isEmpty()) { return false; } auto firstStrUnicode = displayName.at(0).unicode(); return (firstStrUnicode <=0x9FA5 && firstStrUnicode >= 0x4E00); } bool SearchFilterProxyModel::checkFileSizeOrTypeFilter(quint64 size, bool isDir) const{ int ConditionType = int(Type::FileSize); int cur = m_conditions[ConditionType]; bool contains = m_contains[ConditionType]; if(!m_conditions.contains(ConditionType)) return true; if(cur==ALL_TYPE){ return contains; } if(isDir) return false; return checkFileSizeFilter(size); } bool SearchFilterProxyModel::checkFileNameFilter(const QString &displayName) const{ if(m_keywords.isEmpty()) return true; for (auto key:m_keywords) { if (displayName.contains(key, Qt::CaseInsensitive)) return m_keywordsContain; } return false; } bool SearchFilterProxyModel::checkFileContentFilter(const QString &displayName) const{ if(!needFileContent) return false; return true; } bool SearchFilterProxyModel::checkFileTypeFilter(QString type) const { int ConditionType = int(Type::FileType); int cur = m_conditions[ConditionType]; bool contains = m_contains[ConditionType]; if(!m_conditions.contains(ConditionType)) return true; if(cur==ALL_TYPE){ return contains; } switch (cur) { case FILE_FOLDER: { if (type == Folder_Type) return contains; break; } case PICTURE: { if (type.contains(Image_Type)) return contains; break; } case VIDEO: { if (type.contains(Video_Type)) return contains; break; } case TXT_FILE: { if (type.contains(Text_Type)) return contains; break; } case WPS_FILE: { if (type.contains(Wps_Type)) return contains; break; } case AUDIO: { if (type.contains(Audio_Type) || type.contains("application/x-smaf")) return contains; break; } case OTHERS: { //exclude classfied types, show the rest other types if (type != Folder_Type && ! type.contains(Image_Type) && ! type.contains(Video_Type) && ! type.contains(Text_Type) && !type.contains(Wps_Type) && ! type.contains(Audio_Type) && !type.contains("application/x-smaf")) return contains; break; } default: break; } return !contains; } bool SearchFilterProxyModel::hasChildren(const QModelIndex& parent) const { if (!parent.isValid()) { return sourceModel()->hasChildren(mapToSource(parent)); } if (!parent.parent().isValid()) { return true; // 第一级项目总是显示为有å­�项 } return QSortFilterProxyModel::hasChildren(parent); } void TreeviewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (!index.isValid()) return; auto clipedUris = Peony::ClipboardUtils::getInstance()->getCutFileUris(); if (!clipedUris.isEmpty()){ if (clipedUris.contains(index.data(Qt::UserRole).toString())) { painter->setOpacity(0.5); } else { painter->setOpacity(1.0); } } else { painter->setOpacity(1.0); } // 第一层级或é�žç¬¬0列使用默认绘制 if (!index.parent().isValid() || index.column() != 0) { QStyledItemDelegate::paint(painter, option, index); return; } QStyleOptionViewItem opt = option; opt.textElideMode = Qt::ElideRight; initStyleOption(&opt, index); // ä¿�存原始内容 QString text = opt.text; QIcon icon = opt.icon; // 1. 先绘制默认背景和焦点状æ€�(关键修改) const QWidget* widget = opt.widget; QStyle* style = widget ? widget->style() : QApplication::style(); style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, widget); // 2. 准备绘制å�‚æ•° QFont defaultFont = opt.font; QFont boldFont = defaultFont; boldFont.setBold(true); QFontMetrics fmNormal(defaultFont); QFontMetrics fmBold(boldFont); int xPos = opt.rect.left(); int yPos = opt.rect.top(); int availableWidth = opt.rect.width(); // 3. 绘制图标(如果有) if (!icon.isNull()) { const int iconLeftMargin = 2; const int iconSize = qMin(opt.decorationSize.width(), opt.rect.height() - 4); opt.rect.adjust(-18, 0, 0, 0); QRect iconRect(opt.rect.left() + iconLeftMargin, opt.rect.top() + (opt.rect.height() - iconSize) / 2, iconSize, iconSize); icon.paint(painter, iconRect, Qt::AlignLeft | Qt::AlignVCenter); xPos = iconRect.right() + 4; availableWidth -= (xPos - opt.rect.left()); } // 获å�–正确的文本颜色(根æ�®é€‰ä¸­çжæ€�) QColor textColor = opt.state & QStyle::State_Selected ? opt.palette.highlightedText().color() : opt.palette.text().color(); // 4. 检查是å�¦æ˜¯HTML内容 bool isHtml = Qt::mightBeRichText(text); // 如果没有关键字且ä¸�是HTML,直接绘制文本(带Elide) if (m_keyword.isEmpty() && !isHtml) { painter->save(); painter->setPen(textColor); QString elidedText = fmNormal.elidedText(text, Qt::ElideRight, availableWidth); painter->drawText(QRect(xPos, yPos, availableWidth, opt.rect.height()), Qt::AlignLeft | Qt::AlignVCenter, elidedText); painter->restore(); return; } // 如果是HTML内容,使用文本文档绘制 if (isHtml) { QTextDocument doc; doc.setDefaultFont(defaultFont); doc.setHtml(text); doc.setDocumentMargin(0); doc.setTextWidth(-1); if (doc.idealWidth() > availableWidth) { QString plainText = doc.toPlainText(); QString elidedPlain = fmNormal.elidedText(plainText, Qt::ElideRight, availableWidth); doc.setPlainText(elidedPlain); } qreal docHeight = doc.size().height(); qreal yOffset = (opt.rect.height() - docHeight) / 2; yOffset = qMax(0.0, yOffset); painter->save(); painter->translate(xPos-10, yPos + yOffset); QRect clip(0, 0, availableWidth, opt.rect.height()); painter->setClipRect(clip); QAbstractTextDocumentLayout::PaintContext ctx; ctx.palette = opt.palette; // 强制使用正确的文本颜色 if (opt.state & QStyle::State_Selected) { ctx.palette.setColor(QPalette::Text, opt.palette.highlightedText().color()); } doc.documentLayout()->draw(painter, ctx); painter->restore(); return; } // 5. 有关键字时,分段绘制(高亮 + Elide处ç�†ï¼‰ QRegularExpression re("(" + QRegularExpression::escape(m_keyword) + ")", QRegularExpression::CaseInsensitiveOption); QRegularExpressionMatchIterator it = re.globalMatch(text); int lastPos = 0; bool isElided = false; while (it.hasNext() && !isElided) { QRegularExpressionMatch match = it.next(); int start = match.capturedStart(); int length = match.capturedLength(); // 绘制匹é…�å‰�的普通文本 if (start > lastPos) { QString before = text.mid(lastPos, start - lastPos); int beforeWidth = fmNormal.horizontalAdvance(before); if (xPos + beforeWidth > opt.rect.right()) { QString remainingText = text.mid(lastPos); QString elidedText = fmNormal.elidedText(remainingText, Qt::ElideRight, opt.rect.right() - xPos); painter->setFont(defaultFont); painter->setPen(textColor); // 使用正确的文本颜色 painter->drawText(QRect(xPos, yPos, opt.rect.right() - xPos, opt.rect.height()), Qt::AlignLeft | Qt::AlignVCenter, elidedText); isElided = true; break; } painter->setFont(defaultFont); painter->setPen(textColor); // 使用正确的文本颜色 painter->drawText(QRect(xPos, yPos, beforeWidth, opt.rect.height()), Qt::AlignLeft | Qt::AlignVCenter, before); xPos += beforeWidth; } // 绘制高亮关键字 if (!isElided) { QString keyword = match.captured(); int keywordWidth = fmBold.horizontalAdvance(keyword); if (xPos + keywordWidth > opt.rect.right()) { QString remainingText = text.mid(lastPos); QString elidedText = fmNormal.elidedText(remainingText, Qt::ElideRight, opt.rect.right() - xPos); painter->setFont(defaultFont); painter->setPen(textColor); // 使用正确的文本颜色 painter->drawText(QRect(xPos, yPos, opt.rect.right() - xPos, opt.rect.height()), Qt::AlignLeft | Qt::AlignVCenter, elidedText); isElided = true; break; } // 绘制高亮背景 painter->fillRect(QRect(xPos, yPos + 2, keywordWidth, opt.rect.height() - 4), QColor(0, 255, 0)); // 绿色背景 // 绘制关键字文本 painter->setFont(defaultFont); painter->setPen(textColor); // 选中时用黑色,å�¦åˆ™ç”¨é»˜è®¤é¢œè‰² painter->drawText(QRect(xPos, yPos, keywordWidth, opt.rect.height()), Qt::AlignLeft | Qt::AlignVCenter, keyword); xPos += keywordWidth; lastPos = start + length; } } // 6. 绘制剩余文本(如果未Elide) if (!isElided && lastPos < text.length()) { QString after = text.mid(lastPos); int afterWidth = fmNormal.horizontalAdvance(after); if (xPos + afterWidth > opt.rect.right()) { after = fmNormal.elidedText(after, Qt::ElideRight, opt.rect.right() - xPos); } painter->setFont(defaultFont); painter->setPen(textColor); // 使用正确的文本颜色 painter->drawText(QRect(xPos, yPos, opt.rect.right() - xPos, opt.rect.height()), Qt::AlignLeft | Qt::AlignVCenter, after); } painter->restore(); } QSize TreeviewDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItem opt = option; initStyleOption(&opt, index); QFontMetrics fm(opt.font); int height = qMax(40, fm.height()); int width = fm.horizontalAdvance(opt.text); if (index.column() == 0 && !opt.icon.isNull()) { width += opt.decorationSize.width() + 8; } return QSize(width, height); } QWidget *TreeviewDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { TextEdit *edit = new TextEdit(parent); edit->setAcceptRichText(false); //edit->setContextMenuPolicy(Qt::CustomContextMenu); edit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); edit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); edit->setWordWrapMode(QTextOption::NoWrap); edit->blockSignals(true); auto displayString = index.data(Qt::DisplayRole).toString(); auto displayName = index.data(Qt::UserRole + 1).toString(); auto uri = index.data(Qt::UserRole).toString(); auto suffix = displayName.remove(displayString); auto fsType = FileUtils::getFsTypeFromFile(uri); auto info = FileInfo::fromUri(uri); int32_t maxLength = 255; if (info->isDesktopFile()) { suffix = ".desktop"; } if (FileUtils::isFuseFileSystem(uri)) { fsType = "fuse.kyfs"; } if (fsType.contains("ext")) { maxLength = 255 - suffix.toLocal8Bit().length(); edit->setMaxLengthLimit(maxLength); } else if (fsType == "ecryptfs") { maxLength = 143 - suffix.toLocal8Bit().length(); edit->setMaxLengthLimit(maxLength); } else if (fsType == "udf") { maxLength = 254 - suffix.toLocal8Bit().length(); edit->setMaxLengthLimit(maxLength); } else if (fsType.contains("ntfs")) { edit->setLimitBytes(false); maxLength = 255 - suffix.length(); edit->setMaxLengthLimit(maxLength); } else if (fsType.contains("fuse.kyfs")) { edit->setLimitBytes(false); QDBusInterface iface ("com.kylin.file.system.fuse","/com/kylin/file/system/fuse","com.kylin.file.system.fuse",QDBusConnection::systemBus()); QDBusReply reply = iface.call("GetFilenameLength"); if (reply.isValid()) { maxLength = reply.value(); } maxLength = maxLength - suffix.length(); edit->setMaxLengthLimit(maxLength); } edit->blockSignals(false); // QTimer::singleShot(1, parent, [=]() { // this->updateEditorGeometry(edit, option, index); // }); // connect(edit, &TextEdit::textChanged, this, [=]() { // updateEditorGeometry(edit, option, index); // }); connect(edit, &TextEdit::textChanged, this, [=]() { auto text = edit->toPlainText(); //fix bug#220283, rename edit position wrong issue //short file name no need update to avoid position wrong edit->adjustText(); updateEditorGeometry(edit, option, index); }); connect(edit, &TextEdit::finishEditRequest, this, &TreeviewDelegate::slot_finishEdit); connect(edit, &QWidget::destroyed, this, [=]() { Q_EMIT isEditing(false); }); // connect(edit, &TextEdit::focusLost, [edit]() { // edit->finishEditRequest(); // }); return edit; } void TreeviewDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { TextEdit *edit = qobject_cast(editor); if (!edit) return; Q_EMIT isEditing(true); edit->setText(index.data(Qt::DisplayRole).toString()); auto cursor = edit->textCursor(); cursor.setPosition(0, QTextCursor::MoveAnchor); cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); bool isDir = FileUtils::getFileIsFolder(index.data(Qt::UserRole).toString()); bool isDesktopFile = index.data(Qt::UserRole).toString().endsWith(".desktop"); bool isSoftLink = FileUtils::getFileIsSymbolicLink(index.data(Qt::UserRole).toString()); if (!isDesktopFile && !isSoftLink && !isDir && edit->toPlainText().contains(".") && !edit->toPlainText().startsWith(".")) { int n = 1; if(index.data(Qt::DisplayRole).toString().contains(".tar.")) //ex xxx.tar.gz xxx.tar.bz2 n = 2; while(n){ cursor.movePosition(QTextCursor::WordLeft, QTextCursor::KeepAnchor, 1); cursor.movePosition(QTextCursor::Left, QTextCursor::KeepAnchor, 1); --n; } } //qDebug()<setTextCursor(cursor); } void TreeviewDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyledItemDelegate::updateEditorGeometry(editor, option, index); TextEdit *edit = qobject_cast(editor); if (!edit || !edit->m_backgroundEdit) return; QRect editRect = option.rect; auto leftShift = option.decorationSize.width()/2; editRect.setLeft(editRect.left() + leftShift); editRect.setWidth(editRect.width()); editor->setGeometry(editRect); edit->m_backgroundEdit->setGeometry(1, 2, edit->width() - 2, edit->height() - 4); QTimer::singleShot(0, edit, [=]() { qreal docHeight = edit->document()->size().height(); int availableHeight = edit->height(); int topMargin = (availableHeight - docHeight) / 2; topMargin = qMax(2, static_cast(topMargin)); edit->setMargins(1, topMargin, 1, 2); }); } void TreeviewDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { TextEdit *edit = qobject_cast(editor); if (!edit) return; auto text = edit->toPlainText(); if (text.isEmpty()) return; if (text == index.data(Qt::DisplayRole).toString()) return; //process special name . or .. or only space if (text == "." || text == ".." || text.trimmed() == "") return; if (! index.isValid()) return; auto view = qobject_cast(parent()); auto oldName = index.data(Qt::DisplayRole).toString(); if (text == oldName) { //create new file, should select the file or folder auto flags = QItemSelectionModel::Select|QItemSelectionModel::Rows; view->selectionModel()->select(index, flags); view->setFocus(); return; } if (view->getSelections().count() > 1) { auto fileOpMgr = FileOperationManager::getInstance(); QStringList lists = view->getSelections(); auto renameOp = new FileBatchRenameOperation(lists, text); connect(renameOp, &FileBatchRenameOperation::operationFinished, view, [=](){ auto info = renameOp->getOperationInfo().get(); auto uri = info->target(); QTimer::singleShot(100, view, [=](){ view->setSelections(QStringList()<scrollToSelection(uri); view->setFocus(); }); }, Qt::BlockingQueuedConnection); fileOpMgr->startOperation(renameOp, true); } else { auto fileOpMgr = FileOperationManager::getInstance(); QString ddd = index.data(Qt::UserRole).toString(); auto renameOp = new FileRenameOperation(index.data(Qt::UserRole).toString(), text); connect(renameOp, &FileRenameOperation::operationFinished, view, [=](){ auto info = renameOp->getOperationInfo().get(); auto uri = info->target(); QTimer::singleShot(100, view, [=](){ view->setSelections(QStringList()<scrollToSelection(uri); view->setFocus(); }); }, Qt::BlockingQueuedConnection); fileOpMgr->startOperation(renameOp, true); } } void TreeviewDelegate::slot_finishEdit() { auto edit = qobject_cast(sender()); commitData(edit); closeEditor(edit, QAbstractItemDelegate::SubmitModelCache); if(edit){ delete edit; edit = nullptr; } } TextEdit::TextEdit(QWidget *parent) : QTextEdit (parent) { // fix #164278, icon view text editor doesn't cover view item. // note on ukui platform theme, style panel frame is not visible. setFrameShape(QFrame::NoFrame); setAlignment(Qt::AlignLeft|Qt::AlignVCenter); setViewportMargins(1, 2, 1, 2); if (m_backgroundEdit == nullptr) { m_backgroundEdit = new QTextEdit(this); m_backgroundEdit->setReadOnly(true); m_backgroundEdit->setFrameShape(QTextEdit::NoFrame); m_backgroundEdit->setGeometry(1, 2, size().width() - 2, size().height() - 4); m_backgroundEdit->lower(); } } void TextEdit::adjustText() { if (m_max_length_limit) { //fix #154584 blockSignals(true); auto position = textCursor().position(); while (true) { if (m_limit_bytes) { auto local8Bit = toPlainText().toLocal8Bit(); if (local8Bit.length() <= m_max_length_limit) { break; } } else { if (toPlainText().length() <= m_max_length_limit) { break; } } if (position > 0) { position--; textCursor().beginEditBlock(); textCursor().setPosition(position); textCursor().deletePreviousChar(); textCursor().endEditBlock(); } else { break; } } blockSignals(false); } } void TextEdit::setMaxLengthLimit(int length) { m_max_length_limit = length; } void TextEdit::setLimitBytes(bool limitBytes) { m_limit_bytes = limitBytes; } void TextEdit::keyPressEvent(QKeyEvent *e) { if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) { Q_EMIT finishEditRequest(); return; } return QTextEdit::keyPressEvent(e); } void TextEdit::focusOutEvent(QFocusEvent *e) { QTextEdit::focusOutEvent(e); Q_EMIT focusLost(); // å�‘出我们自己的信å�· } void TextEdit::setMargins(int left, int top, int right, int bottom) { setViewportMargins(left, top, right, bottom); } bool isFileContentOn() { bool flage = false; const QByteArray id("org.ukui.search.settings"); if (QGSettings::isSchemaInstalled(id)) { auto settings = new QGSettings(id, QByteArray(), nullptr); QStringList keys = settings->keys(); if (keys.contains("contentIndexEnable")) { flage = settings->get("contentIndexEnable").toBool(); } delete settings; } return flage; } peony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/search-view.cpp0000664000175000017500000004317615257160277030622 0ustar fengfeng/* * Peony Intelligent Spaces Service * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: He JinQin * */ #include "search-view.h" #include "file-utils.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LISTVIEW_ITEM_BORDER_RADIUS 6 SearchView::SearchView(QWidget *parent): QTreeView(parent) { m_renameTimer = new QTimer(this); m_renameTimer->setInterval(3000); m_renameTimer->setSingleShot(true); auto layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); layout->setObjectName("_searchview_layout"); setProperty("highlightMode", true); //setFrameShape(QFrame::NoFrame); setVerticalScrollMode(ScrollPerPixel); setAutoScroll(true); setAutoScrollMargin(100); auto cornerWidget = new QWidget; cornerWidget->setObjectName("_listview_corner"); cornerWidget->setAttribute(Qt::WA_AlwaysStackOnTop); cornerWidget->setBackgroundRole(QPalette::Base); cornerWidget->setAutoFillBackground(true); setCornerWidget(cornerWidget); setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); setSelectionBehavior(QTreeView::SelectRows); setAlternatingRowColors(true); setAutoFillBackground(true); setBackgroundRole(QPalette::Base); header()->setSectionResizeMode(QHeaderView::Interactive); header()->setSectionsMovable(true); header()->setStretchLastSection(false); header()->setMinimumSectionSize(130); header()->setTextElideMode(Qt::ElideRight); connect(header(), &QHeaderView::sectionResized, this, [=]{ }); setExpandsOnDoubleClick(false); setSortingEnabled(true); setEditTriggers(QTreeView::NoEditTriggers); setDragEnabled(true); setDragDropMode(QTreeView::DragDrop); setSelectionMode(QTreeView::ExtendedSelection); setUniformRowHeights(true); setIconSize(QSize(40, 40)); setMouseTracking(true);//追踪鼠标 setViewportMargins(0, 0, 0, 0); } SearchView::~SearchView() { m_selectedIndexes.clear(); m_selectionInfos.clear(); } QModelIndexList SearchView::getSelectedIndexes() { return this->selectionModel()->selectedRows(); } void SearchView::startDrag(Qt::DropActions flags) { auto indexes = selectedIndexes(); if (indexes.count() > 0) { auto pos = mapFromGlobal(QCursor::pos()); qreal scale = 1.0; QWidget *window = this->window(); if (window) { auto windowHandle = window->windowHandle(); if (windowHandle) { scale = windowHandle->devicePixelRatio(); } } auto drag = new QDrag(this); QMimeData* data = model()->mimeData(indexes); QVariant isSearchData = QVariant(true); data->setData("peony-qt/is-search", isSearchData.toByteArray()); //临时添加属性解决无法拖拽侧边æ �问题,å�Žç»­model层完善å�Žï¼Œè§¦å�‘flagså�¯å޻除䏋é�¢ä»£ç � QByteArray encodeData; QDataStream stream(&encodeData, QIODevice::WriteOnly); data->setData("application/x-qabstractitemmodeldatalist", encodeData); drag->setMimeData(data); int num = indexes.count() / 4; if (num > 50) { QRect pixmapRect = QRect(100, 100, 400, 400); QPixmap pixmap(pixmapRect.size() * scale); pixmap.fill(Qt::transparent); pixmap.setDevicePixelRatio(scale); QPainter painter(&pixmap); quint64 count = 0; painter.save(); QRect iconRect = pixmapRect; iconRect.setSize(QSize(139, 139)); for (auto index : indexes) { if (count > 50) { break; } count++; iconRect.moveTo(iconRect.x()+1, iconRect.y()+1); QIcon icon = qvariant_cast(index.data(Qt::DecorationRole)); if (!icon.isNull()) { painter.save(); painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); painter.drawPixmap(QPoint(100 + count, 100 + count), icon.pixmap(139, 139)); painter.restore(); } } QFont font = qApp->font(); font.setPointSize(10); QFontMetrics metrics(font); QString text = num > 999 ? "..." : QString::number(num); int height = metrics.horizontalAdvance(text); int width = metrics.height(); int diameter = std::max(height, width); int radius = diameter / 2; QRectF textRect = QRectF(iconRect.topRight().x() - diameter - 10, iconRect.topRight().y(), diameter + 10, diameter + 10); painter.setBrush(Qt::red); painter.setPen(Qt::red); painter.drawEllipse(textRect); painter.setPen(Qt::white); painter.drawText(textRect, Qt::AlignCenter, text); painter.restore(); drag->setPixmap(pixmap); drag->setHotSpot(QPoint(200,200)); drag->setDragCursor(QPixmap(), Qt::MoveAction); drag->exec(Qt::MoveAction); } else { QRegion rect; QHash indexRectHash; for (auto index : indexes) { rect += (visualRect(index)); indexRectHash.insert(index, visualRect(index)); } QRect realRect = rect.boundingRect(); QPixmap pixmap(realRect.size() * scale); pixmap.fill(Qt::transparent); pixmap.setDevicePixelRatio(scale); QPainter painter(&pixmap); quint64 count = 0; for (auto index : indexes) { painter.save(); painter.translate(indexRectHash.value(index).topLeft() - rect.boundingRect().topLeft()); //painter.translate(-rect.boundingRect().topLeft()); painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); QStyleOptionViewItem opt; initViewItemOption(&opt); auto viewItemDelegate = static_cast(itemDelegate()); viewItemDelegate->initIndexOption(&opt, index); opt.displayAlignment = Qt::Alignment(Qt::AlignLeft|Qt::AlignVCenter); opt.rect.setSize(indexRectHash.value(index).size()); opt.rect.moveTo(0, 0); opt.state |= QStyle::State_Selected; painter.setOpacity(0.8); count++; if(count == 1){ QPainterPath leftRoundedRegion; leftRoundedRegion.setFillRule(Qt::WindingFill); leftRoundedRegion.addRoundedRect(opt.rect, LISTVIEW_ITEM_BORDER_RADIUS, LISTVIEW_ITEM_BORDER_RADIUS); leftRoundedRegion.addRect(opt.rect.adjusted(LISTVIEW_ITEM_BORDER_RADIUS, 0, 0, 0)); painter.setClipPath(leftRoundedRegion); }else if(count == 4){ QPainterPath rightRoundedRegion; rightRoundedRegion.setFillRule(Qt::WindingFill); rightRoundedRegion.addRoundedRect(opt.rect, LISTVIEW_ITEM_BORDER_RADIUS, LISTVIEW_ITEM_BORDER_RADIUS); rightRoundedRegion.addRect(opt.rect.adjusted(0, 0, -LISTVIEW_ITEM_BORDER_RADIUS, 0)); painter.setClipPath(rightRoundedRegion); count = 0; } QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &opt, &painter, this); painter.restore(); } drag->setPixmap(pixmap); drag->setHotSpot(pos - rect.boundingRect().topLeft() - QPoint(0, header()->height())); drag->setDragCursor(QPixmap(), Qt::MoveAction); drag->exec(Qt::MoveAction); } } } void SearchView::invertSelections() { auto selectionModel = this->selectionModel(); if (!selectionModel) return; // 获å�–当å‰�选中行 auto selectedRows = selectionModel->selectedRows(); // 创建新选中区域 QItemSelection newSelection; // é��历所有行进行å��选 for (int row = 0; row < model()->rowCount(); ++row) { QModelIndex catIndex = model()->index(row, 0, QModelIndex()); for (int j = 0; j < model()->rowCount(catIndex); ++j) { QModelIndex childIndex = model()->index(j, 0, catIndex); if (!selectedRows.contains(childIndex)) { int columnCount = model()->columnCount(childIndex.parent()); QModelIndex lastColumnIndex = model()->index(childIndex.row(), columnCount - 1, childIndex.parent()); newSelection.select(childIndex, lastColumnIndex); } } } // 应用å��选 selectionModel->select(newSelection, QItemSelectionModel::ClearAndSelect); } void SearchView::bindModel(FileItemModel *sourceModel, FileItemProxyFilterSortModel *proxyModel) { return; } void SearchView::setProxy(DirectoryViewProxyIface *proxy) { return; } const QString SearchView::getDirectoryUri() { return ""; } const QStringList SearchView::getSelections() { return QStringList(); } const QStringList SearchView::getAllFileUris() { return QStringList(); } void SearchView::open(const QStringList &uris, bool newWindow) { return; } void SearchView::setDirectoryUri(const QString &uri) { return; } void SearchView::beginLocationChange() { return; } void SearchView::stopLocationChange() { return; } void SearchView::closeView() { return; } void SearchView::setSelections(const QStringList &uris) { return; } void SearchView::scrollToSelection(const QString &uri) { return; } void SearchView::setCutFiles(const QStringList &uris) { return; } DirectoryViewProxyIface *SearchView::getProxy() { return nullptr; } int SearchView::getSortType() { return 0; } void SearchView::setSortType(int sortType) { return; } int SearchView::getSortOrder() { return 0; } void SearchView::setSortOrder(int sortOrder) { return; } void SearchView::editUri(const QString &uri) { setState(QTreeView::NoState); auto selected = selectionModel()->selectedRows(); if (selected.isEmpty()) { qWarning() << "No selection"; return; } auto proxmodel = qobject_cast(model()); auto searchmodel = qobject_cast(proxmodel->sourceModel()); QModelIndex index = selected.first(); auto id = proxmodel->mapToSource(index).internalId(); if(searchmodel->isContentItem(id) && searchmodel->hasDefaultContent()){ return; } auto fileUri = index.data(Qt::UserRole).toString(); queryFileinfo(fileUri); edit(index); } void SearchView::editUris(const QStringList uris) { this->editUri(uris.first()); } void SearchView::doMultiSelect(bool) { return; } bool SearchView::isEnableMultiSelect() { return true; } void SearchView::setItemsVisible(bool visible) { return; } const int SearchView::getAllDisplayFileCount() { auto proxyModel = qobject_cast(this->model()); int count = 0; if (!proxyModel) { return count; } QModelIndex root = QModelIndex(); for(int i = 0; i < proxyModel->rowCount(root); ++i) { QModelIndex catIndex = proxyModel->index(i, 0, root); if (catIndex.isValid()) { count += proxyModel->rowCount(catIndex); } } qDebug() << __func__ << __LINE__ << count; return count; } void SearchView::mousePressEvent(QMouseEvent *e) { m_editValid = true; QTreeView::mousePressEvent(e); m_selectedIndexes = this->selectionModel()->selectedRows(); if (e->button() == Qt::RightButton) { m_selectionInfos.clear(); for (auto index : m_selectedIndexes) { auto uri = index.data(Qt::UserRole).toString(); queryFileinfo(uri); } Q_EMIT menuRequest(viewport()->mapToGlobal(e->pos())); return; } if(!m_renameTimer->isActive()) { m_renameTimer->start(); m_editValid = false; } else { //if remain time is between[0.75, 3000],then trigger rename event; //to make sure only click one row bool all_index_in_same_row = true; if (!this->selectedIndexes().isEmpty()) { int first_index_row = this->selectedIndexes().first().row(); for (auto index : this->selectedIndexes()) { if (first_index_row != index.row()) { all_index_in_same_row = false; break; } } } //qDebug()<remainingTime()<styleHints()->mouseDoubleClickInterval(); //qDebug()<<"m_last_index:"<pos()):"<pos()); //优化文件点击策略,æ��å�‡ç”¨æˆ·ä½“验,关è�”bug#125368 //在å�Œå‡»æ—¶é—´é—´éš”内,如果未触å�‘å�Œå‡»äº‹ä»¶ï¼Œä½†æ˜¯ç‚¹å‡»çš„æ˜¯å�Œä¸€ä¸ªæœ‰æ•ˆå›¾æ ‡ï¼Œè§¦å�‘å�Œå‡»äº‹ä»¶ //系统默认å�Œå‡»é—´éš”为400ms, 策略为[0,400],触å�‘å�Œå‡»ï¼Œ(400,3000)触å�‘é‡�命å�� if(m_renameTimer->remainingTime()> 0 && m_renameTimer->remainingTime() < 3000 - qApp->styleHints()->mouseDoubleClickInterval() && indexAt(e->pos()) == m_last_index && m_last_index.isValid() && m_editValid == true && all_index_in_same_row) { slotRename(); } else { m_editValid = false; } } } void SearchView::updateGeometries() { setUpdatesEnabled(false); QTreeView::updateGeometries(); reUpdateScrollBar(); setUpdatesEnabled(true); } void SearchView::reUpdateScrollBar() { if (!model()) return; if (model()->rowCount() == 0) { return; } int rowCount = model()->rowCount(); auto index = model()->index(0, 0); int fileNameCount = model()->rowCount(model()->index(0, 0)); int fileContentCount = model()->rowCount(model()->index(1, 0)); rowCount += (fileNameCount + fileContentCount); int totalHeight = sizeHintForIndex(index).height()*rowCount; int currentScrollBarValue = verticalScrollBar()->value(); verticalScrollBar()->setSingleStep(iconSize().height()); verticalScrollBar()->setPageStep(viewport()->height() - header()->height()); verticalScrollBar()->setRange(0, totalHeight + header()->height()+100 - viewport()->height()); verticalScrollBar()->setValue(currentScrollBarValue); } void SearchView::scrollTo(const QModelIndex &index, ScrollHint hint) { Q_UNUSED(index) Q_UNUSED(hint) QTreeView::scrollTo(index,hint); reUpdateScrollBar(); } void SearchView::slotRename() { //standardPaths not allow rename auto currentSelections = getSelections(); bool hasStandardPath = FileUtils::containsStandardPath(currentSelections); if (hasStandardPath) return; //delay edit action to avoid doubleClick or dragEvent qDebug()<<"slotRename"<stop(); setIndexWidget(m_last_index, nullptr); edit(m_last_index); m_editValid = false; } }); } void SearchView::queryFileinfo(QString uri) { m_selectionInfos.clear(); auto info = Peony::FileInfo::fromUri(uri); if (info->isEmptyInfo()) { Peony::FileInfoJob j(info); j.querySync(); } m_selectionInfos.append(info); } void SearchView::getSelectedIndex(const QItemSelection &selected, const QItemSelection &deselected) { //qDebug()<<"list view selection changed"<setIndexWidget(index, nullptr); } if (!currentSelections.isEmpty()) { int first_index_row = currentSelections.first().row(); bool all_index_in_same_row = true; for (auto index : currentSelections) { if (first_index_row != index.row()) { all_index_in_same_row = false; break; } } if (all_index_in_same_row) { if(m_last_index.row() != currentSelections.first().row()) { m_editValid = false; } m_last_index = currentSelections.first(); } } else { m_last_index = QModelIndex(); m_editValid = false; } } ././@LongLink0000644000000000000000000000015700000000000011606 Lustar rootrootpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-view_bo_CN.tspeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-vie0000664000175000017500000001213015257160277033300 0ustar fengfeng QObject Intelligent Search View རིག་ནུས་འཚོལ་ཞིབ་ཀྱི་རི་མོà¼� Use customized Intelligent Data Manager views when searching in File Manager ཡིག་ཆའི་དོ་དམ་ཡོ་བྱད་à½�ྲོད་འཚོལ་ཞིབ་བྱེད་སà¾�བས་རང་ཉིད་ཀྱི་མཚན་ཉིད་བཞག་པའི་རིག་ནུས་གྲངས་གཞིའི་དོ་དམ་རི་མོ་བཀོལ་སྤྱོད་བྱེད་དགོསà¼� SearchFileItemModel File Name Match མིང་ཆ་མà½�ུན་པà¼� Intelligent Content Recognition Match རིག་ནུས་ཀྱི་ནང་དོན་ཆ་འགྲིག་དབྱེ་འབྱེད་བྱེད་པà¼� Text Content Name མིང་à¼� Modified Date དུས་འགྱུར་བà¼� File Type ཡིག་ཆའི་རིགས་གྲསà¼� File Size ཡིག་ཆའི་ཆེ་ཆུང་à¼� To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】<span style='color:#3790FA;'>Open "AI Index"</span> To Obtain the Matching Results of Text, Pictures, Videos. Please<span style='color:#3790FA;'> Open "File Content Index"</span> To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】<span style='color:blue;'>Open "AI Index"</span> To Obtain Natural Language Recognition Results, Please <span style='color:blue;'>Enable "AI Index"</span> inã€�Settings】->ã€�Global Search】 རང་བྱུང་སà¾�ད་ཆ་ངོས་འཛིན་གྱི་མཇུག་འབྲས་à½�ོབ་པར་བྱེད་དགོས >་པ་སྟེà¼� (>་)à½�ྱོན་ཡོངས་ནས་འཚོལ་ཞིབ་བྱེད་དགོས་པ་དང་à¼� <</span>་ Spaceview When there are files in the system that meet the space conditions, they will be automatically displayed in the space 当系统中存在符å�ˆè¯¥ç©ºé—´æ�¡ä»¶çš„æ–‡ä»¶æ—¶ï¼Œå°†è‡ªåŠ¨æ˜¾ç¤ºåœ¨ç©ºé—´å†… You can manually <span style='color:#3790FA;'>add files</span> or <span style='color:#3790FA;'>modify the space conditions.</span> 您å�¯ä»¥æ‰‹åЍ <span style='color:#3790FA;'>添加文件</span> ,或 <span style='color:#3790FA;'>修改空间æ�¡ä»¶</span> searchThumbnailManager Failed to create image for %1 ././@LongLink0000644000000000000000000000015700000000000011606 Lustar rootrootpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-view_zh_HK.tspeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-vie0000664000175000017500000001050315257160277033302 0ustar fengfeng QObject Intelligent Search View 智慧æ�œç´¢æª¢è¦– Use customized Intelligent Data Manager views when searching in File Manager 在檔案管ç�†å“¡ä¸­æ�œç´¢æ™‚使用自定義的智能資料管ç�†æª¢è¦– SearchFileItemModel File Name Match å��稱匹é…� Intelligent Content Recognition Match 智慧內容識別匹é…� Text Content Name 檔å��稱 Modified Date 修改日期 File Type 檔案類型 File Size 檔大å°� To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】<span style='color:#3790FA;'>Open "AI Index"</span> To Obtain the Matching Results of Text, Pictures, Videos. Please<span style='color:#3790FA;'> Open "File Content Index"</span> To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】<span style='color:blue;'>Open "AI Index"</span> To Obtain Natural Language Recognition Results, Please <span style='color:blue;'>Enable "AI Index"</span> inã€�Settings】->ã€�Global Search】 ç�²å�–自然語言識別çµ�果,需在ã€�設置】->ã€�全域æ�œç´¢ã€‘ <span style='color:blue;'>打開“AI 索引â€�</span> Spaceview When there are files in the system that meet the space conditions, they will be automatically displayed in the space 当系统中存在符å�ˆè¯¥ç©ºé—´æ�¡ä»¶çš„æ–‡ä»¶æ—¶ï¼Œå°†è‡ªåŠ¨æ˜¾ç¤ºåœ¨ç©ºé—´å†… You can manually <span style='color:#3790FA;'>add files</span> or <span style='color:#3790FA;'>modify the space conditions.</span> 您å�¯ä»¥æ‰‹åЍ <span style='color:#3790FA;'>添加文件</span> ,或 <span style='color:#3790FA;'>修改空间æ�¡ä»¶</span> searchThumbnailManager Failed to create image for %1 ././@LongLink0000644000000000000000000000015700000000000011606 Lustar rootrootpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-view-plugin.hpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-vie0000664000175000017500000000456015257160264033304 0ustar fengfeng/* * Peony Intelligent Spaces Service * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: He JinQin * */ #ifndef PEONYINTELLIGENTSEARCHVIEWPLUGIN_H #define PEONYINTELLIGENTSEARCHVIEWPLUGIN_H #include "peony-intelligent-search-view_global.h" #include #include namespace Peony { class PEONYINTELLIGENTSEARCHVIEW_EXPORT PeonyIntelligentSearchViewPlugin : public QObject, public DirectoryViewPluginIface2 { Q_OBJECT public: Q_PLUGIN_METADATA(IID DirectoryViewPluginIface2_iid FILE "common.json") Q_INTERFACES(Peony::DirectoryViewPluginIface2) public: explicit PeonyIntelligentSearchViewPlugin(QObject *parent = nullptr); PluginType pluginType() {return PluginType::DirectoryViewPlugin2;} const QString name() {return QObject::tr("Intelligent Search View");} const QString description() {return QObject::tr("Use customized Intelligent Data Manager views when searching in File Manager");} const QIcon icon() {return QIcon::fromTheme("kylin-data-manager");} void setEnable(bool enable) {} bool isEnable() {return true;} //view QString viewIdentity() { return "Search View"; } QString viewName() {return name();} QIcon viewIcon() {return icon();} bool supportUri(const QString &uri) {return uri.startsWith("search:///");} int zoom_level_hint() {return -1;} int minimumSupportedZoomLevel() {return -1;} int maximumSupportedZoomLevel() {return -1;} int priority(const QString &directoryUri); bool supportZoom() {return false;} DirectoryViewWidget *create(); Q_SIGNALS: private: QString m_currentUri; QString m_spacename; }; } #endif // PEONYINTELLIGENTSEARCHVIEWPLUGIN_H ././@LongLink0000644000000000000000000000015400000000000011603 Lustar rootrootpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-view_ug.tspeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-vie0000664000175000017500000001136415257160264033304 0ustar fengfeng QObject Intelligent Search View ئەقلىي ئىقتىدارلىق ئىزدەش كۆرۈنۈشى Use customized Intelligent Data Manager views when searching in File Manager ھۆججەت باشقۇرغۇچتىن ئىزدىگەندە ئۆزى بەلگىلەنگەن ئەقلىي ئىقتىدارلىق سانلىق مەلۇماتلارنى باشقۇرۇش كۆرۈنۈشىنى ئىشلىتىش ÙƒÛ�رەك SearchFileItemModel File Name Match ئىسمى ماسلاشتۇرۇش Intelligent Content Recognition Match ئەقلىي ئىقتىدارلىق مەزمۇن پەرقلەندۈرۈش ماسلاشتۇر Text Content Name نامى Modified Date ئۆزگەرتىلگەن ۋاقتى File Type ھۆججەت تىپى File Size ھۆججەت چوڭلۇقى To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】<span style='color:#3790FA;'>Open "AI Index"</span> To Obtain the Matching Results of Text, Pictures, Videos. Please<span style='color:#3790FA;'> Open "File Content Index"</span> To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】<span style='color:blue;'>Open "AI Index"</span> To Obtain Natural Language Recognition Results, Please <span style='color:blue;'>Enable "AI Index"</span> inã€�Settings】->ã€�Global Search】 تەبىئىي تىل پەرقلەندۈرۈش نەتىجىسىگە ئÛ�رىشىشتە ØŒ " > ã€� ئومۇمىيلىقنى ئىزدەش ] < span style=color: blue > "AI ئىندÛ�كس" ئÛ�چىش</span> ÙƒÛ�رەك Spaceview When there are files in the system that meet the space conditions, they will be automatically displayed in the space 当系统中存在符å�ˆè¯¥ç©ºé—´æ�¡ä»¶çš„æ–‡ä»¶æ—¶ï¼Œå°†è‡ªåŠ¨æ˜¾ç¤ºåœ¨ç©ºé—´å†… You can manually <span style='color:#3790FA;'>add files</span> or <span style='color:#3790FA;'>modify the space conditions.</span> 您å�¯ä»¥æ‰‹åЍ <span style='color:#3790FA;'>添加文件</span> ,或 <span style='color:#3790FA;'>修改空间æ�¡ä»¶</span> searchThumbnailManager Failed to create image for %1 peony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/data/0000775000175000017500000000000015257160264026573 5ustar fengfengpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/data/nodata.svg0000664000175000017500000000751115257160264030566 0ustar fengfeng././@LongLink0000644000000000000000000000015400000000000011603 Lustar rootrootpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-view_mn.tspeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-vie0000664000175000017500000001260515257160277033307 0ustar fengfeng QObject Intelligent Search View ᠤᠶᠤᠨᠲᠤ ᠡᠷᠢᠯᠲᠡ ᠶᠢᠨ ᠵᠢᠷᠤᠭ á ¢ ᠤᠶᠤᠨᠲᠤ ᠡᠷᠢᠵᠦ ᠦᠵᠡᠨ᠎ᠡ á ƒ Use customized Intelligent Data Manager views when searching in File Manager ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ ᠬᠠᠮᠢᠶᠠᠷᠤᠯᠲᠠ ᠶᠢᠨ ᠮᠠᠰᠢᠨ ᠳᠣᠲᠣᠷ᠎ᠠ ᠡᠷᠢᠬᠦ ᠦᠶ᠎ᠡ ᠳᠦ ᠥᠪᠡᠷ ᠢᠶᠡᠨ ᠲᠣᠮᠢᠶᠠᠯᠠᠭᠰᠠᠨ ᠤᠶᠤᠨᠲᠤ ᠲᠣᠭ᠎ᠠ ᠪᠠᠷᠢᠮᠲᠠ ᠶᠢᠨ ᠬᠠᠮᠢᠶᠠᠷᠤᠯᠲᠠ ᠶᠢᠨ ᠬᠠᠷᠠᠭᠠᠨ ᠵᠢᠷᠤᠭ á ¢ ᠬᠡᠷᠡᠭᠯᠡᠨ᠎ᠡ á ƒ SearchFileItemModel File Name Match ᠨᠡᠷᠡᠶᠢᠳᠦᠯ á ¢ ᠲᠣᠬᠢᠷᠠᠨ᠎ᠠ á ƒ Intelligent Content Recognition Match ᠤᠶᠤᠨᠲᠤ ᠠᠭᠤᠯᠭ᠎ᠠ á ¶á ¢ ᠢᠯᠭᠠᠬᠤ ᠳᠤ ᠲᠣᠬᠢᠷᠠᠯᠴᠠᠨ᠎ᠠ á ƒ Text Content Name ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ ᠨᠡᠷᠡᠶᠢᠳᠦᠯ á ƒ Modified Date ᠵᠠᠰᠠᠭᠰᠠᠨ ᠡᠳᠦᠷ ᠬᠤᠭᠤᠴᠠᠭ᠎ᠠ File Type ᠹᠠᠢᠯ ᠤ᠋ᠨ ᠳᠦᠷᠦᠯ File Size ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ ᠶᠡᠬᠡ ᠪᠠᠭ᠎ᠠ á ƒ To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】<span style='color:#3790FA;'>Open "AI Index"</span> To Obtain the Matching Results of Text, Pictures, Videos. Please<span style='color:#3790FA;'> Open "File Content Index"</span> To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】<span style='color:blue;'>Open "AI Index"</span> To Obtain Natural Language Recognition Results, Please <span style='color:blue;'>Enable "AI Index"</span> inã€�Settings】->ã€�Global Search】 ᠪᠠᠶᠢᠭᠠᠯᠢ ᠶᠢᠨ ᠦᠭᠡ ᠬᠡᠯᠡᠨ á ¦ ᠢᠯᠭᠠᠬᠤ ᠦᠷ᠎ᠡ ᠳ᠋ᠦᠩ á ¢ ᠣᠯᠬᠤ ᠳᠤ á ‚ 〔 ᠪᠠᠶᠢᠷᠢᠯᠠᠭᠤᠯᠤᠯᠲᠠ 〕 > ᠪᠦᠬᠦ ᠲᠠᠯ᠎ᠠ ᠶᠢᠨ ᠡᠷᠢᠯᠲᠡ 〕 <san o 〈 〈colorá „ blue;> 《AI ᠰᠦᠪᠡᠭᠴᠢᠯᠡᠬᠦ ᠲᠠᠲᠠᠭᠤᠷ》 á ¢ ᠨᠡᠭᠡᠭᠡᠨ</span>á Žá ¡á ƒ Spaceview When there are files in the system that meet the space conditions, they will be automatically displayed in the space 当系统中存在符å�ˆè¯¥ç©ºé—´æ�¡ä»¶çš„æ–‡ä»¶æ—¶ï¼Œå°†è‡ªåŠ¨æ˜¾ç¤ºåœ¨ç©ºé—´å†… You can manually <span style='color:#3790FA;'>add files</span> or <span style='color:#3790FA;'>modify the space conditions.</span> 您å�¯ä»¥æ‰‹åЍ <span style='color:#3790FA;'>添加文件</span> ,或 <span style='color:#3790FA;'>修改空间æ�¡ä»¶</span> searchThumbnailManager Failed to create image for %1 ././@LongLink0000644000000000000000000000015200000000000011601 Lustar rootrootpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-view.propeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-vie0000664000175000017500000000521015257160277033301 0ustar fengfengQT += widgets dbus TARGET = peony-intelligent-search-view TEMPLATE = lib DEFINES += PEONYINTELLIGENTSEARCHVIEW_LIBRARY include(../../common.pri) CONFIG += debug c++11 no_keywords link_pkgconfig plugin embed_translations PKGCONFIG +=gio-2.0 glib-2.0 gio-unix-2.0 peony libnotify ukui-file-metadata # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 #TRANSLATIONS = peony-extension-computer-view_zh_CN.ts \ # peony-extension-computer-view_de.ts \ # peony-extension-computer-view_es.ts \ # peony-extension-computer-view_fr.ts \ # peony-extension-computer-view_kk_KZ.ts \ # peony-extension-computer-view_ug_CN.ts \ # peony-extension-computer-view_ky_KG.ts \ # peony-extension-computer-view_cs.ts \ # peony-extension-computer-view_tr.ts \ # peony-extension-computer-view_bo_CN.ts \ # peony-extension-computer-view_mn.ts \ # peony-extension-computer-view_zh_HK.ts #include(computer-view/computer-view.pri) TRANSLATIONS += peony-intelligent-search-view_zh_CN.ts\ peony-intelligent-search-view_zh_HK.ts\ peony-intelligent-search-view_mn.ts\ peony-intelligent-search-view_ug.ts\ peony-intelligent-search-view_kk.ts\ peony-intelligent-search-view_ky.ts\ peony-intelligent-search-view_bo_CN.ts CONFIG += link_pkgconfig PKGCONFIG += gio-unix-2.0 SOURCES += \ peony-intelligent-search-view-plugin.cpp \ search-view-container.cpp \ search-view.cpp\ searchresultmodel.cpp\ thumbnail/searchthumbnailmanager.cpp HEADERS += \ peony-intelligent-search-view-plugin.h \ peony-intelligent-search-view_global.h \ search-view-container.h \ search-view.h\ searchresultmodel.h \ thumbnail/searchthumbnailmanager.h #DESTDIR += ../testdir # Default rules for deployment. unix { target.path = $$[QT_INSTALL_LIBS]/peony-extensions } !isEmpty(target.path): INSTALLS += target CONFIG += lrelease embed_translations QM_FILES_RESOURCE_PREFIX = / ././@LongLink0000644000000000000000000000015700000000000011606 Lustar rootrootpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-view_zh_CN.tspeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-vie0000664000175000017500000001114415257160277033304 0ustar fengfeng QObject Intelligent Search View 智能æ�œç´¢è§†å›¾ Use customized Intelligent Data Manager views when searching in File Manager 在文件管ç�†å™¨ä¸­æ�œç´¢æ—¶ä½¿ç”¨è‡ªå®šä¹‰çš„æ™ºèƒ½æ•°æ�®ç®¡ç�†è§†å›¾ SearchFileItemModel File Name Match å��称匹é…� Intelligent Content Recognition Match 智能内容识别匹é…� Text Content 文本内容 Name 文件å��ç§° Modified Date 修改日期 File Type 文件类型 File Size 文件大å°� To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】<span style='color:#3790FA;'>Open "AI Index"</span> 获å�–自然语言识别结果,需在ã€�设置】->ã€�全局æ�œç´¢ã€‘ <span style='color:#3790FA;'>打开"AI 索引"</span> To Obtain the Matching Results of Text, Pictures, Videos. Please<span style='color:#3790FA;'> Open "File Content Index"</span> <span style='color:#3790FA;'> å‰�往开å�¯ "文件内容索引"</span>,以获å�–正文ã€�图片ã€�视频内容匹é…�结果。 To Obtain Natural Language Recognition Results, Please inã€�Settings】->ã€�Global Search】<span style='color:blue;'>Open "AI Index"</span> To Obtain Natural Language Recognition Results, Please <span style='color:blue;'>Enable "AI Index"</span> inã€�Settings】->ã€�Global Search】 获å�–自然语言识别结果,需在ã€�设置】->ã€�全局æ�œç´¢ã€‘ <span style='color:blue;'>打开"AI 索引"</span> Spaceview When there are files in the system that meet the space conditions, they will be automatically displayed in the space 当系统中存在符å�ˆè¯¥ç©ºé—´æ�¡ä»¶çš„æ–‡ä»¶æ—¶ï¼Œå°†è‡ªåŠ¨æ˜¾ç¤ºåœ¨ç©ºé—´å†… You can manually <span style='color:#3790FA;'>add files</span> or <span style='color:#3790FA;'>modify the space conditions.</span> 您å�¯ä»¥æ‰‹åЍ <span style='color:#3790FA;'>添加文件</span> ,或 <span style='color:#3790FA;'>修改空间æ�¡ä»¶</span> searchThumbnailManager Failed to create image for %1 peony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/search-view.h0000664000175000017500000001066215257160277030261 0ustar fengfeng/* * Peony Intelligent Spaces Service * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: He JinQin * */ #ifndef SEARCHVIEW_H #define SEARCHVIEW_H #include #include "directory-view-plugin-iface.h" #include #include #include using namespace Peony; class SearchView : public QTreeView,public DirectoryViewIface, public DirectoryViewIface2 { Q_OBJECT public: explicit SearchView(QWidget *parent = nullptr); ~SearchView(); QModelIndexList getSelectedIndexes(); void invertSelections() override; void bindModel(FileItemModel *sourceModel, FileItemProxyFilterSortModel *proxyModel) override; void setProxy(DirectoryViewProxyIface *proxy) override; const QString getDirectoryUri() override; const QStringList getSelections() override; const QStringList getAllFileUris() override; void open(const QStringList &uris, bool newWindow) override; void setDirectoryUri(const QString &uri) override; void beginLocationChange() override; void stopLocationChange() override; void closeView() override; void setSelections(const QStringList &uris) override; void scrollToSelection(const QString &uri) override; void setCutFiles(const QStringList &uris) override; DirectoryViewProxyIface *getProxy() override; int getSortType() override; void setSortType(int sortType) override; int getSortOrder() override; void setSortOrder(int sortOrder) override; void editUri(const QString &uri) override; void editUris(const QStringList uris) override; void startDrag(Qt::DropActions flags) override; // void bindModel(FileItemModel *sourceModel, FileItemProxyFilterSortModel *proxyModel) override; // void setProxy(DirectoryViewProxyIface *proxy) override ; void reUpdateScrollBar(); const QString viewId() override { return "Search View"; } void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) override; // //location // const QString getDirectoryUri() override; // //selections // const QStringList getSelections() override; // //children // const QStringList getAllFileUris() override; // void setDirectoryUri(const QString &uri) override; // void beginLocationChange() override; // void stopLocationChange() override; // void closeView() override; // //selections // void setSelections(const QStringList &uris) override; // // virtual void invertSelections() = 0; // void scrollToSelection(const QString &uri) override; // //clipboard // void setCutFiles(const QStringList &uris) override; // DirectoryViewProxyIface *getProxy() override; // int getSortType() override; // void setSortType(int sortType) override; // int getSortOrder() override; // void setSortOrder(int sortOrder) override; // //edit // void editUri(const QString &uri) override; /*! * \brief editUris * \param uris * \todo * implement batch rename */ void doMultiSelect(bool) override; bool isEnableMultiSelect() override; void setItemsVisible(bool visible) override; const int getAllDisplayFileCount() override; void slotRename(); void queryFileinfo(QString uri); bool m_delegate_editing = false; public Q_SLOTS: void getSelectedIndex(const QItemSelection &selected, const QItemSelection &deselected); protected: void mousePressEvent(QMouseEvent *e) override; void updateGeometries() override; private: QModelIndexList m_selectedIndexes; QList> m_selectionInfos; QTimer* m_renameTimer; bool m_editValid; QModelIndex m_last_index; Q_SIGNALS: void menuRequest(const QPoint &pos); }; #endif // SEARCHVIEW_H peony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/thumbnail/0000775000175000017500000000000015257160264027645 5ustar fengfeng././@LongLink0000644000000000000000000000015300000000000011602 Lustar rootrootpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/thumbnail/searchthumbnailmanager.hpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/thumbnail/searchthumbnailman0000664000175000017500000000301715257160264033436 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #ifndef SEARCHTHUMBNAILMANAGER_H #define SEARCHTHUMBNAILMANAGER_H #include class ThumbnailManagerPrivate; class searchThumbnailManager : public QObject { Q_OBJECT public: explicit searchThumbnailManager(QObject *parent = nullptr); ~searchThumbnailManager(); Q_SIGNALS: void thumbnailFinished(const QString &path, const QImage &image, const QString &errorMessage); public Q_SLOTS: Q_INVOKABLE void startPreview(const QString &path); /*! * \brief setStrictedMode * \param strictedMode * \note * send thumbnailFinished() signal only the last thumbnail job done. */ Q_INVOKABLE void setStrictedMode(bool strictedMode); private: ThumbnailManagerPrivate *priv; }; #endif // SEARCHTHUMBNAILMANAGER_H ././@LongLink0000644000000000000000000000015500000000000011604 Lustar rootrootpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/thumbnail/searchthumbnailmanager.cpppeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/thumbnail/searchthumbnailman0000664000175000017500000001414215257160264033437 0ustar fengfeng/* * UKUI Intelligent Data Manager * * Copyright (C) 2024, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: Yue Lan * */ #include "thumbnail/searchthumbnailmanager.h" #include #include #include #include #include #include #include #include #include #include #include class ThumbnailManagerPrivate { public: ThumbnailManagerPrivate(); ~ThumbnailManagerPrivate(); void startThumbnail(const QString &path); QThread *thread; QMutex mutex; QString pathWaitForThumbnail; QString currentPathForThumbnailing; UkuiFileMetadata::ExtractorManager *manager; QTimeLine *timeLine; bool strictedSignalMode = false; }; class ThumbnailJob : public QObject { friend class searchThumbnailManager; Q_OBJECT public: ThumbnailJob(const QString &path, UkuiFileMetadata::ExtractorManager *manager); ~ThumbnailJob(); Q_SIGNALS: void thumnailFinished(); public Q_SLOTS: void startThumbnail(); private: QString path; QImage image; UkuiFileMetadata::ExtractorManager *manager; }; searchThumbnailManager::searchThumbnailManager(QObject *parent) : QObject(parent) { priv = new ThumbnailManagerPrivate; connect(priv->timeLine, &QTimeLine::finished, this, [=]{ if (priv->currentPathForThumbnailing.isEmpty() && !priv->pathWaitForThumbnail.isEmpty()) { priv->currentPathForThumbnailing = priv->pathWaitForThumbnail; priv->pathWaitForThumbnail.clear(); if (!priv->thread->isRunning()) { auto job = new ThumbnailJob(priv->currentPathForThumbnailing, priv->manager); job->moveToThread(priv->thread); connect(priv->thread, &QThread::started, job, &ThumbnailJob::startThumbnail); connect(job, &ThumbnailJob::thumnailFinished, priv->thread, &QThread::quit); connect(priv->thread, &QThread::finished, this, [=]{ QImage image = job->image; if (!image.isNull()) { if (priv->strictedSignalMode) { if (priv->pathWaitForThumbnail.isEmpty()) { Q_EMIT this->thumbnailFinished(job->path, image, nullptr); } else { //qDebug() << "stricted mode, not send" << job->path << job->image; } } else { Q_EMIT this->thumbnailFinished(job->path, image, nullptr); } } else { Q_EMIT this->thumbnailFinished(job->path, QImage(), tr("Failed to create image for %1").arg(job->path)); } priv->currentPathForThumbnailing.clear(); delete job; priv->thread; priv->thread = new QThread; if (priv->timeLine->state() == QTimeLine::NotRunning && !priv->pathWaitForThumbnail.isEmpty()) priv->timeLine->start(); }); priv->thread->start(); } else { qDebug() << "a thumbnail job is running, waiting previous job finished" << priv->currentPathForThumbnailing; } } else { qDebug() << "a thumbnail job is running, waiting previous job finished" << priv->currentPathForThumbnailing; } }); } searchThumbnailManager::~searchThumbnailManager() { delete priv; } void searchThumbnailManager::startPreview(const QString &path) { priv->startThumbnail(path); } void searchThumbnailManager::setStrictedMode(bool strictedMode) { priv->strictedSignalMode = strictedMode; } ThumbnailManagerPrivate::ThumbnailManagerPrivate() { thread = new QThread; manager = new UkuiFileMetadata::ExtractorManager; timeLine = new QTimeLine; timeLine->setDuration(100); timeLine->setUpdateInterval(100); } ThumbnailManagerPrivate::~ThumbnailManagerPrivate() { timeLine->stop(); thread->quit(); delete thread; delete manager; delete timeLine; } void ThumbnailManagerPrivate::startThumbnail(const QString &path) { if (path.isEmpty()) return; QMutexLocker l(&mutex); if (path == currentPathForThumbnailing) return; pathWaitForThumbnail = path; if (timeLine->state() == QTimeLine::NotRunning) timeLine->start(); } ThumbnailJob::ThumbnailJob(const QString &path, UkuiFileMetadata::ExtractorManager *manager) : path(path), manager(manager) { } ThumbnailJob::~ThumbnailJob() { image.detach(); QImage().swap(image); } void ThumbnailJob::startThumbnail() { QString mimeType = UkuiFileMetadata::MimeUtils::strictMimeType(path, {}).name(); QList extractors = manager->fetchExtractors(mimeType); UkuiFileMetadata::SimpleExtractionResult result(path, mimeType, UkuiFileMetadata::ExtractionResult::Flag::ExtractThumbnail); result.setThumbnailRequest(UkuiFileMetadata::ThumbnailRequest(QSize(128, 128), 1)); for(auto extractor : extractors) { extractor->extract(&result); if(result.thumbnail().isValid()) { image = result.thumbnail().image(); break; } } Q_EMIT this->thumnailFinished(); } #include "searchthumbnailmanager.moc" peony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/search-view-container.cpp0000664000175000017500000003350115257160277032571 0ustar fengfeng/* * Peony Intelligent Spaces Service * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: He JinQin * */ #include "search-view-container.h" #include "file-item-model.h" #include "file-item-proxy-filter-sort-model.h" #include #include #include #include #include"QHeaderView" #include #include #include #include #include #include #include "search-vfs-uri-parser.h" using namespace Peony; SearchViewContainer::SearchViewContainer(QWidget *parent,QString uri):m_defaultUri(uri) { auto layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); layout->setObjectName("_searchview_layout"); setBackgroundRole(QPalette::Base); setAutoFillBackground(true); m_view = new SearchView(this); DirectoryViewHelper * viewHelper = DirectoryViewHelper::globalInstance(); viewHelper->addListViewWithDirectoryViewWidget(m_view, this); //m_view->setModel(m_model); m_clientId = QUuid::createUuid().toString();//分é…�客户端ID layout->addWidget(m_view); layout->addSpacing(6); setLayout(layout); m_signalTransInterface = new QDBusInterface("com.peony.idm.service", "/org/peony/idm/space/service", "org.peony.idm.modelcontroller"); QDBusReply reply = m_signalTransInterface->call("getAinotAvailabletype"); aiConditionType = AIConditionType(reply.value()); isAiConditionAvialable = !(aiConditionType == aiIndexNotFit); connect(m_view, &QTreeView::doubleClicked, this, &SearchViewContainer::onItemDoubleClicked); connect(m_view, &QTreeView::clicked, this, [this](const QModelIndex &index){ QModelIndex realindex = m_proxyModel->mapToSource(index); quintptr id = realindex.internalId(); if(!isAiConditionAvialable && m_model->isContentItem(id) && m_model->hasDefaultContent()){ requestShowAISubsystemDialog(); } }); connect(m_view, &SearchView::menuRequest, this,[this](const QPoint &pos){ Q_EMIT menuRequest(pos); }); m_searchDelayTimer = new QTimer(this); m_searchDelayTimer->setSingleShot(true); m_searchDelayTimer->setInterval(500); // 设置为500毫秒延迟 connect(m_searchDelayTimer, &QTimer::timeout, this, &SearchViewContainer::performSearch); } SearchViewContainer::~SearchViewContainer() { QStandardItemModel* model = qobject_cast(m_view->model()); if(model) { model->clear(); } delete m_view; if (m_model) { m_model->clearAll(); } delete m_model; m_signalTransInterface->call("cancelSearch"); } const QString SearchViewContainer::getDirectoryUri() { return m_currentUri; } const QStringList SearchViewContainer::getSelections() { QModelIndexList selectedIndexs = m_view->getSelectedIndexes(); QStringList selections; for (auto index:selectedIndexs) { if(!index.parent().isValid()) continue; QModelIndex realindex = m_proxyModel->mapToSource(index); QString uri = m_model->data(realindex,Qt::UserRole).toString(); selections<("_searchview_layout"); bool ok = false; if (parentWidget()) { int statusBarHeight = parentWidget()->property("statusBarHeight").toInt(&ok); if (ok) { layout->setContentsMargins(0, 0, 0, statusBarHeight); } } disconnect(m_model); disconnect(m_proxyModel); SearchFileItemModel* searchmodel = new SearchFileItemModel(); m_proxyModel = new SearchFilterProxyModel(m_view); m_proxyModel->setSourceModel(searchmodel); m_view->setModel(m_proxyModel); m_model = searchmodel; m_model->setClientId(m_clientId); // é…�置视图 m_view->setAnimated(true); m_view->setSortingEnabled(true); m_view->expandAll(); m_view->setColumnWidth(0, 400); //m_view->setIndentation(40); m_view->resizeColumnToContents(0); m_view->header()->setSectionResizeMode(0, QHeaderView::Interactive); // 第一列å�¯äº¤äº’调整 m_view->header()->setSectionResizeMode(1, QHeaderView::Interactive); // 第二列å�¯äº¤äº’调整 m_view->header()->setSectionResizeMode(2, QHeaderView::Interactive); // 第三列å�¯äº¤äº’调整 m_view->header()->setSectionResizeMode(3, QHeaderView::Stretch); m_view->setTextElideMode(Qt::ElideRight); //m_view->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); // 或者让所有列按比例拉伸 m_view->header()->setStretchLastSection(false); m_view->setContextMenuPolicy(Qt::CustomContextMenu);//å�¯ç”¨å�³é”®é€‰ä¸­ m_delegate = new TreeviewDelegate(m_view); m_view->setItemDelegate(m_delegate); connect(m_delegate, &TreeviewDelegate::isEditing, this, [=](const bool &editing){ m_view->m_delegate_editing = editing; }); //添加索引跳转 如果æ�¡ä»¶ä¸�满足 m_model->setAiCondition(isAiConditionAvialable); QDBusConnection connection = QDBusConnection::sessionBus(); if (!connection.isConnected()) { qDebug() << "æ�¡ä»¶æ›´æ–°ä¿¡å�·åˆ›å»ºå¤±è´¥:" << connection.lastError().message(); } connection.connect("com.peony.idm.service", "/org/peony/idm/space/service", "org.peony.idm.modelcontroller", "searchConditionChanged", m_proxyModel,SLOT(updateconditions(QString))); connect(searchmodel,&SearchFileItemModel::searchFinished,this,[=](){ m_view->reUpdateScrollBar(); Q_EMIT viewDirectoryChanged(); }); connect(searchmodel, &SearchFileItemModel::resizeColFitContent, [=](){ m_view->resizeColumnToContents(0); }); m_view->setSelectionMode(QAbstractItemView::ExtendedSelection); auto selectionModel = m_view->selectionModel(); connect(selectionModel, &QItemSelectionModel::selectionChanged, this, &DirectoryViewWidget::viewSelectionChanged); connect(searchmodel, &SearchFileItemModel::expand, [=](){ int count = m_proxyModel->rowCount(); for (int var = 0; var < count; ++var) { auto index = m_proxyModel->index(var,0); if(m_model->hasChildren(m_proxyModel->mapToSource(index))){ m_view->expand(index); } } }); connect(m_view->selectionModel(), &QItemSelectionModel::selectionChanged, m_view, [=](const QItemSelection &selected, const QItemSelection &deselected){ auto currentSelections = selected.indexes(); if (!currentSelections.isEmpty()) { auto tmpIndex = currentSelections.first(); auto index = m_proxyModel->mapToSource(tmpIndex); if (m_model->isFileCategory(index.internalId()) || m_model->isContentCategory(index.internalId())) { return; } } m_view->getSelectedIndex(selected, deselected); }); } void SearchViewContainer::setDirectoryUri(const QString &uri) { if (m_currentUri != uri) { m_currentUri = uri; m_proxyModel->setCurrenturi(m_currentUri); m_watcher = std::make_shared(m_currentUri, nullptr, true); m_watcher->setMonitorChildrenChange(true); connect(m_watcher.get(), &FileWatcher::fileDeleted, this, [=](QString uri) { m_model->childRemove(uri); }); connect(m_watcher.get(), &FileWatcher::fileRenamed, this, [=](const QString &oldUri, const QString &newUri) { m_model->childRename(oldUri, newUri); QString fileName = QUrl(newUri).fileName(); if(!fileName.contains(m_keyword)){ m_model->childRemove(newUri); } }); m_watcher->startMonitor(); } } void SearchViewContainer::beginLocationChange() { Q_EMIT viewDirectoryChanged(); if (m_searchDelayTimer->isActive()) { m_searchDelayTimer->stop(); } // å�¯åŠ¨å»¶è¿Ÿå®šæ—¶å™¨ï¼Œ500mså�Žæ‰§è¡Œæ�œç´¢ m_searchDelayTimer->start(); m_signalTransInterface->call("cancelSearch"); m_model->updateSearchstatus(false); } void SearchViewContainer::stopLocationChange() { Q_EMIT viewDirectoryChanged(); } void SearchViewContainer::invertSelections() { m_view->invertSelections(); } void SearchViewContainer::setSortType(int sortType) { if (m_sortType == sortType) return; m_sortType = sortType; applySorting(); } void SearchViewContainer::setSortOrder(int sortOrder) { if (m_sortOrder == sortOrder) return; m_sortOrder = sortOrder; applySorting(); } void SearchViewContainer::editUri(const QString &uri) { m_view->editUri(uri); } void SearchViewContainer::editUris(const QStringList uris) { m_view->editUris(uris); } void SearchViewContainer::applySorting() { int sortColumn; switch (m_sortType) { case 0: // 按å��ç§° sortColumn = 0; break; case 1: // 按日期 sortColumn = 1; break; case 2: // 按大å°� sortColumn = 2; break; case 3: // 按类型 sortColumn = 3; break; default: sortColumn = 0; } Qt::SortOrder order = static_cast(m_sortOrder); if (m_proxyModel) { QString uri = (!m_defaultUri.isEmpty()&&m_currentUri.isEmpty())?m_defaultUri:m_currentUri; m_proxyModel->setCurrenturi(uri); m_proxyModel->checkSortSettings(); m_view->header()->setSortIndicator(sortColumn, order); // m_proxyModel->sort(m_sortType, order); // m_proxyModel->update(); } } QStringList const SearchViewContainer:: getAllFileUris(){ return m_proxyModel->getFiltereUrilist(); } int SearchViewContainer::getSortType() { return m_sortType; } Qt::SortOrder SearchViewContainer::getSortOrder() { Qt::SortOrder order = static_cast(m_sortOrder); return order; } void SearchViewContainer::onItemDoubleClicked(const QModelIndex &index){ if (!index.isValid()) return; // 判断是å�¦ä¸ºäºŒçº§Item(有父节点且父节点没有父节点) QModelIndex realindex = m_proxyModel->mapToSource(index); quintptr id = realindex.internalId(); if(!isAiConditionAvialable && m_model->isContentItem(id) && m_model->hasDefaultContent()){ //requestShowAISubsystemDialog(); return; } else if (index.parent().isValid() && !index.parent().parent().isValid()) { QModelIndex realindex = m_proxyModel->mapToSource(index); QString uri = m_model->data(realindex,Qt::UserRole).toString(); if (m_view->getSelectedIndexes().count() == 1) { m_view->queryFileinfo(uri); Q_EMIT this->viewDoubleClicked(uri); } } } void SearchViewContainer::requestShowAISubsystemDialog() { if(aiConditionType==aiIndexNotFit) QProcess::startDetached("ukui-control-center", {"-m", "search"}); else QProcess::startDetached("ukui-control-center", {"-m", "aisubsystem"}); } QString SearchViewContainer::extractWithRegex(extractType type){ QString tmpUri = FileUtils::urlDecode(m_currentUri); QStringList list = tmpUri.split("&"); if (Peony::SearchVFSUriParser::checkForSpecialInStringLists(list)) { list = Peony::SearchVFSUriParser::handleAmpersandSplitStringList(&tmpUri, list); for (QString tmp:list) { if(type == keyWord && tmp.startsWith("name_regexp")){ return tmp.remove("name_regexp="); }else if(type == spaceName && tmp.startsWith("search_uris=idm:")){ return tmp.remove("search_uris=idm:///"); }else if(type == searchPath && tmp.startsWith("search_uris=file:")){ return tmp.remove("search_uris=file://"); } } } switch (type) { case keyWord:{ QRegularExpression regex("name_regexp=([^&]+)"); QRegularExpressionMatch match = regex.match(tmpUri); return match.hasMatch() ? match.captured(1) : QString(); break; } case spaceName:{ QRegularExpression regex(R"(search_uris=idm:///([^&]+))"); QRegularExpressionMatch match = regex.match(tmpUri); return match.hasMatch() ? match.captured(1) : QString(); break; } case searchPath:{ QRegularExpression regex(R"(search_uris=file://([^&]+))"); QRegularExpressionMatch match = regex.match(tmpUri); return match.hasMatch() ? match.captured(1) : QString(); break; } default: break; } } void SearchViewContainer::performSearch() { QString key = extractWithRegex(keyWord); QString Spacename = extractWithRegex(spaceName); QString path = extractWithRegex(searchPath); m_model->clearResult(); QString realpath = (path == QStandardPaths::writableLocation(QStandardPaths::HomeLocation)) ? "" : path; m_model->updateSearchstatus(false); m_signalTransInterface->call("setCurrentSearchPath", realpath); // 设置当å‰�æ�œç´¢è·¯å¾„ m_signalTransInterface->call("startsearch", key, Spacename, m_clientId); m_keyword = key; m_model->keywordchange(key); m_delegate->setHighlightKeyword(key); } ././@LongLink0000644000000000000000000000015700000000000011606 Lustar rootrootpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-view_global.hpeony-extensions/peony-intelligent-plugin/peony-intelligent-search-view/peony-intelligent-search-vie0000664000175000017500000000215415257160264033301 0ustar fengfeng/* * Peony Intelligent Spaces Service * * Copyright (C) 2025, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: He JinQin * */ #ifndef PEONYINTELLIGENTSEARCHVIEW_GLOBAL_H #define PEONYINTELLIGENTSEARCHVIEW_GLOBAL_H #include #if defined(PEONYINTELLIGENTSEARCHVIEW_LIBRARY) # define PEONYINTELLIGENTSEARCHVIEW_EXPORT Q_DECL_EXPORT #else # define PEONYINTELLIGENTSEARCHVIEW_EXPORT Q_DECL_IMPORT #endif #endif // PEONYINTELLIGENTSEARCHVIEW_GLOBAL_H peony-extensions/peony-extension-computer-view/0000775000175000017500000000000015257160277021013 5ustar fengfengpeony-extensions/peony-extension-computer-view/peony-extension-computer-view.pro0000664000175000017500000000546015257160277027512 0ustar fengfengQT += widgets dbus TARGET = peony-computer-view-plugin TEMPLATE = lib DEFINES += PEONYEXTENSIONCOMPUTERVIEW_LIBRARY include(../common.pri) CONFIG += debug c++11 no_keywords link_pkgconfig plugin PKGCONFIG +=gio-2.0 glib-2.0 gio-unix-2.0 peony udisks2 libnotify # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS exists("/usr/include/libkyudfburn/udfburn_global.h") { DEFINES += KY_UDF_BURN } exists(/usr/include/kysdk/kysdk-system/libkydiskinfo.h) { message("kydiskinfo find") DEFINES += KY_SDK_DISKINFO } # kyudfburn contains(DEFINES, "KY_UDF_BURN") { PKGCONFIG += kyudfburn } contains(DEFINES, KY_SDK_DISKINFO) { PKGCONFIG += kysdk-disk } # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 TRANSLATIONS = peony-extension-computer-view_zh_CN.ts \ peony-extension-computer-view_de.ts \ peony-extension-computer-view_es.ts \ peony-extension-computer-view_fr.ts \ peony-extension-computer-view_kk_KZ.ts \ peony-extension-computer-view_ug_CN.ts \ peony-extension-computer-view_ky_KG.ts \ peony-extension-computer-view_cs.ts \ peony-extension-computer-view_tr.ts \ peony-extension-computer-view_bo_CN.ts \ peony-extension-computer-view_mn.ts \ peony-extension-computer-view_zh_HK.ts include(computer-view/computer-view.pri) include(computer-view-intel/computer-view-intel.pri) SOURCES += \ ../peony-drive-rename/drive-rename.cpp \ computer-view-container.cpp \ login-remote-filesystem.cpp \ peony-computer-view-plugin.cpp \ HEADERS += \ ../peony-drive-rename/drive-rename.h \ computer-view-container.h \ login-remote-filesystem.h \ peony-computer-view-plugin.h \ peony-extension-computer-view_global.h \ #DESTDIR += ../testdir # Default rules for deployment. unix { target.path = $$[QT_INSTALL_LIBS]/peony-extensions } !isEmpty(target.path): INSTALLS += target FORMS += \ login-remote-filesystem.ui #RESOURCES += \ # translation.qrc CONFIG += lrelease embed_translations QM_FILES_RESOURCE_PREFIX = / SKIP_TEST = $$(EXTENSIONS_SKIP_TEST) isEmpty(SKIP_TEST) { message("build with tests") QMAKE_LFLAGS += -fprofile-arcs -ftest-coverage QMAKE_CXXFLAGS += --coverage LIBS += -lgcov } peony-extensions/peony-extension-computer-view/computer-view-container.cpp0000664000175000017500000011074215257160277026312 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "computer-view-container.h" #include "computer-view.h" #include "computer-proxy-model.h" #include "abstract-computer-item.h" #include "login-remote-filesystem.h" #include "peony-drive-rename/drive-rename.h" #include "FMWindowIface.h" #include "mount-operation.h" #include #include #include #include #include #include #include #ifndef KY_UDF_BURN #include #include #else #include #include "volumeManager.h" #include "udfAppendBurnDataDialog.h" using namespace UdfBurn; #endif #include #include #include #include #include #include #include #include #include #include static void ask_question_cb(GMountOperation *op, char *message, char **choices, Peony::ComputerViewContainer *p_this); static void ask_password_cb(GMountOperation *op, const char *message, const char *default_user, const char *default_domain, GAskPasswordFlags flags, Peony::ComputerViewContainer *p_this); static GAsyncReadyCallback mount_enclosing_volume_callback(GFile *volume, GAsyncResult *res, Peony::ComputerViewContainer *p_this) { GError *err = nullptr; g_file_mount_enclosing_volume_finish (volume, res, &err); if ((nullptr == err) || (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_ALREADY_MOUNTED))) { qDebug() << "login successful!"; Q_EMIT p_this->updateWindowLocationRequest(p_this->m_remote_uri); } else if (err->message) { qDebug() << "login remote error: " <code<message<domain; QString showMessage(err->message); if (showMessage.startsWith("Message recipient")) { showMessage = QObject::tr("Message recipient disconnected from message bus without replying!"); } QMessageBox::warning(nullptr, QObject::tr("log remote error"), showMessage, QMessageBox::Ok); } if (nullptr != err) { g_error_free(err); } return nullptr; } void aborted_cb(GMountOperation *op, Peony::ComputerViewContainer *p_this) { g_mount_operation_reply(op, G_MOUNT_OPERATION_ABORTED); p_this->disconnect(); } #include "peony-qt/file-enumerator.h" static QString getComputerUriFromUri(const QString &uri){ /* volume item,é��历方å¼�获å�–uri */ FileEnumerator e; e.setEnumerateDirectory("computer:///"); e.enumerateSync(); QString computerUri = uri; for (auto fileInfo : e.getChildren()) { FileInfoJob infoJob(fileInfo); infoJob.querySync(); /* ç”±itemçš„uri获å�–computer uir */ auto info = infoJob.getInfo(); if(fileInfo.get()->targetUri() == uri && !uri.isEmpty()){ computerUri = fileInfo.get()->uri(); break; } } return computerUri; } static QString getComputerUriFromUnixDevice(const QString &unixDevice) { /* volume item,é��历方å¼�获å�–uri */ Peony::FileEnumerator e; e.setEnumerateDirectory("computer:///"); e.enumerateSync(); QString uri; for (auto fileInfo : e.getChildren()) { Peony::FileInfoJob infoJob(fileInfo); infoJob.querySync(); /* ç”±volumeçš„unixDevice获å�–computer uir */ auto info = infoJob.getInfo(); QString device = fileInfo.get()->unixDeviceFile(); if(device==unixDevice){ uri = fileInfo.get()->uri(); break; } } return uri; } Peony::ComputerViewContainer::ComputerViewContainer(QWidget *parent) : DirectoryViewWidget(parent) { setContextMenuPolicy(Qt::CustomContextMenu); m_op = g_mount_operation_new(); g_signal_connect (m_op, "aborted", G_CALLBACK (aborted_cb), this); g_signal_connect (m_op, "ask-question", G_CALLBACK(ask_question_cb), this); g_signal_connect (m_op, "ask-password", G_CALLBACK (ask_password_cb), this); // connect(this, &QWidget::customContextMenuRequested, this, [=](const QPoint &pos){ // auto selectedIndexes = m_view->selectionModel()->selectedIndexes(); // auto index = m_view->indexAt(pos); // if (!selectedIndexes.contains(index)) // m_view->clearSelection(); // if (index.isValid()) { // m_view->selectionModel()->select(index, QItemSelectionModel::SelectCurrent); // } // QMenu menu(this); // auto model = static_cast(m_view->model()); // QStringList uris; // QList items; // for (auto index : m_view->selectionModel()->selectedIndexes()) { // auto item = model->itemFromIndex(index); // uris<uri(); // if (item->uri() == "network:///") // return; // items<exec(); // if (code == QDialog::Rejected) { // return; // } // GFile* m_volume = g_file_new_for_uri(m_dlg->uri().toUtf8().constData()); // m_remote_uri = m_dlg->uri(); // if (nullptr != m_serverLoginDlg) { // delete m_serverLoginDlg; // m_serverLoginDlg = nullptr; // } // m_serverLoginDlg = new ConnectServerLogin(m_remote_uri); // g_file_mount_enclosing_volume(m_volume, G_MOUNT_MOUNT_NONE, m_op, nullptr, GAsyncReadyCallback(mount_enclosing_volume_callback), this); // }); // } else if (items.count() == 1 // // && (items.first()->uri() != "" ||items.first()->m_unixDeviceName.contains("/dev/sr")) // && items.first()->uri() != "network:///" || items.first()->m_unixDeviceName.contains("/dev/sr")) { // //bool isWayland = qApp->property("isWayland").toBool(); // related to #105070 // auto item = items.first(); // bool unmountable = item->canUnmount() && !item->property("isKydrive").toBool(); // bool isReddisk = false; // //fix bug#212689, 212690, 213120, 213121, hide reddisk format and unmount option // if (item->m_unixDeviceName.startsWith("/dev/dm") && QFile::exists("/opt/AQTJ/Client/JC/MAIN/bin/jc_main_ui")) // isReddisk = true; // if(!item->canEject() && ! isReddisk){ // menu.addAction(tr("Unmount"), [=](){ // item->unmount(G_MOUNT_UNMOUNT_NONE); // }); // menu.actions().first()->setEnabled(unmountable); // } // //fix bug#175330, wayland should be the same with mainline version // /* else if (isWayland && ! isReddisk) { // menu.addAction(tr("Unmount"), [=](){ // item->unmount(G_MOUNT_UNMOUNT_NONE); // }); // menu.actions().first()->setEnabled(unmountable); // }*/ // /*eject function for volume. fix #18216*/ // if(item->canEject()){ // auto ejectAction = menu.addAction(tr("Eject"), [=](){ // item->eject(G_MOUNT_UNMOUNT_NONE); // }); // QString unixDevice = item->m_unixDeviceName; // if(unixDevice.contains("/dev/sr")){/* 光盘在刻录数æ�®ã€�镜åƒ�ç­‰æ“�作时,å�³è‹¥å¤„于busy状æ€�时,将弹出è�œå�•ç½®ç�°ä¸�å�¯ç”¨ã€‚link to bug#143293. */ // menu.actions().first()->setDisabled(FileUtils::isBusyDevice(unixDevice)); // } // } // auto uri = item->uri(); // QString unixDevice = item->m_unixDeviceName; // if (uri.isEmpty() && !unixDevice.isEmpty()) { // uri = getComputerUriFromUnixDevice(unixDevice); // } // auto realUri = m_view->tryGetVolumeRealUriFromUri(uri); // if (!realUri.isEmpty()) { // uri = realUri; // } // if(uri.startsWith("file://") || !unixDevice.isEmpty()) { // uri = getComputerUriFromUri(uri); // } // auto info = FileInfo::fromUri(uri); // if (info->displayName().isEmpty() || info->targetUri().isEmpty()) { // FileInfoJob j(info); // j.querySync(); // } // auto mount = VolumeManager::getMountFromUri(info->targetUri()); // //fix bug#52491, CDROM and DVD can format issue // //fix bug#140543, remote redirection volume can be format // if (nullptr != mount) { // auto volume = VolumeManager::getVolumeFromMount(mount); // if (mount && volume && ! isReddisk) { // QString unixDevice = FileUtils::getUnixDevice(info->uri()); // if (!unixDevice.isNull() && unixDevice.contains("/dev/sr") // &&!unixDevice.startsWith("/dev/bus/usb") // && info->isVolume()) { // auto fdMenu = menu.addAction(tr("Format")); // fdMenu->setEnabled(false); // #ifndef KY_UDF_BURN // DiscControl *discControl = new DiscControl(unixDevice); // if(discControl->work()){ // connect(discControl, &DiscControl::workFinished, [=](DiscControl *discCtrl){ // connect(fdMenu, &QAction::triggered, [=](){ // UdfFormatDialog *udfFormatDlg = FormatDlgCreateDelegate::getInstance()->createUdfDlg(uri, discCtrl); // udfFormatDlg->show(); // }); // qDebug() << unixDevice << "supportUdf values:" << discCtrl->supportUdf(); // fdMenu->setEnabled(discCtrl->supportUdf()); // }); // } // #else // UdfBurn::DiscControl *discControl = new UdfBurn::DiscControl(unixDevice); // if(discControl->work()){ // connect(discControl, &UdfBurn::DiscControl::workFinished, [=](UdfBurn::DiscControl *discCtrl){ // connect(fdMenu, &QAction::triggered, [=](){ // UdfBurn::UdfFormatDialogWrapper *udfFormatDlg = FormatDlgCreateDelegate::getInstance()->createUdfDlgWrapper(uri, discCtrl); // udfFormatDlg->show(); // }); // qDebug() << unixDevice << "KY_UDF_BURN supportUdf values:" << discCtrl->supportUdf(); // fdMenu->setEnabled(discControl->supportUdf()); // }); // } // #endif // } else if (! unixDevice.isNull() && ! unixDevice.contains("/dev/sr") // &&!unixDevice.startsWith("/dev/bus/usb") // && info->isVolume() && info->canUnmount()/* && info->targetUri() != "file:///data"*/) { // auto fdMenu = menu.addAction(tr("Format"), [=] () { // Format_Dialog *fd = FormatDlgCreateDelegate::getInstance()->createUDiskDlg(uri, nullptr); // fd->show(); // }); // if (! mount) { // fdMenu->setEnabled(false); // } // } // } // } else { // if (!unixDevice.isNull() && !unixDevice.contains("/dev/sr") // && !unixDevice.startsWith("/dev/bus/usb") // && info->isVolume() && !uri.isEmpty()) { // auto fdMenu = menu.addAction(tr("Format"), [=](){ // Format_Dialog *fd = FormatDlgCreateDelegate::getInstance()->createUDiskDlg(uri, nullptr); // fd->show(); // }); // } // } // QStringList fakeUrls; // fakeUrls<getComputerViewMenuPlugins(); // for (auto plugin : menuPlugins) { // menu.addActions(plugin->menuActions(Peony::MenuPluginInterface::SideBar, "computer:///", fakeUrls)); // } // if (qApp->property("deviceRenamePluginLoaded").toBool()) { // // add drive rename action, link to: #105070 // auto driveRenamePlugin = new DriveRename(this); // menu.addActions(driveRenamePlugin->menuActions(Peony::MenuPluginInterface::Type::SideBar, "computer:///", fakeUrls)); // } // if (!item->uri().startsWith("network://")) { // auto a = menu.addAction(tr("Property"), [=]() { // if (uri.isNull()) { // QMessageBox::warning(0, 0, tr("You have to mount this volume first")); // } else { // QProcess p; // p.setProgram("/usr/bin/peony"); // QStringList args; // args << "-p" << uri; // p.setArguments(args); // // p.startDetached(); // p.startDetached(p.program(), p.arguments()); // } // }); // auto targetUri = FileUtils::getTargetUri(info->uri()); // bool isMounted = FileUtils::isFileUnmountable(info->uri()); // if ("file:///" == uri || "file:///" == targetUri || "file:///data" == uri || "computer:///ukui-data-volume" == uri) { // isMounted = true; // } // a->setEnabled(!uri.isNull() && isMounted); // if(item->m_unixDeviceName.contains("/dev/sr")){/* 光盘在刻录数æ�®ã€�镜åƒ�ç­‰æ“�作时,å�³è‹¥å¤„于busy状æ€�时,该è�œå�•ç½®ç�°ä¸�å�¯ç”¨ã€‚link to bug#143293. */ // a->setDisabled(FileUtils::isBusyDevice(item->m_unixDeviceName)); // } // } // FMWindowIface *windowIface = dynamic_cast(this->topLevelWidget()); // menu.addAction(tr("Open In New Window"), [=](){ // auto targetUri = info->targetUri(); // if(targetUri.isEmpty() && "computer:///ukui-data-volume" == info->uri()){ // targetUri = "file:///data"; // } // auto newWindow = windowIface->create(targetUri); // dynamic_cast(newWindow)->show(); // }); // if (!qApp->property("tabletMode").toBool()) { // menu.addAction(tr("Open In New Tab"), [=](){ // auto targetUri = info->targetUri(); // if(targetUri.isEmpty() && "computer:///ukui-data-volume" == info->uri()){ // targetUri = "file:///data"; // } // windowIface->addNewTabs(QStringList()<uri() != "" && items.first()->uri() != "network:///"){ // qDebug() << "unable Property uri:" <uri(); // menu.addAction(tr("Property")); // menu.actions().first()->setEnabled(false); // } // if (!menu.isEmpty()) // menu.exec(mapToGlobal(pos)); // }); } static void ask_question_cb(GMountOperation *op, char *message, char **choices, Peony::ComputerViewContainer *p_this) { qDebug()<<"ask question cb:"<setIcon(QMessageBox::Information); msg_box->setText(message); char **choice = choices; int i = 0; while (*choice) { qDebug()<<*choice; QPushButton *button = msg_box->addButton(QString(*choice), QMessageBox::ActionRole); p_this->m_dlg->connect(button, &QPushButton::clicked, [=]() { g_mount_operation_set_choice(op, i); }); *choice++; i++; } //block ui msg_box->exec(); msg_box->deleteLater(); qDebug()<<"msg_box done"; g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); } static void ask_password_cb(GMountOperation *op, const char *message, const char *default_user, const char *default_domain, GAskPasswordFlags flags, Peony::ComputerViewContainer *p_this) { Q_UNUSED(message); Q_UNUSED(default_user); Q_UNUSED(default_domain); Q_UNUSED(flags); Q_UNUSED(p_this); if(!p_this->m_serverLoginDlg){ g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); return; } if (p_this->m_serverLoginDlg->property("IsRejected").toBool()) { g_mount_operation_reply(op, G_MOUNT_OPERATION_ABORTED); return; } if (p_this->m_serverLoginDlg->property("IsFirstAnonymous").toBool() && g_mount_operation_get_anonymous(op)) { p_this->m_serverLoginDlg->setProperty("IsFirstAnonymous", false); g_mount_operation_reply(op, G_MOUNT_OPERATION_HANDLED); return; } if ((flags & G_ASK_PASSWORD_NEED_PASSWORD) && (g_mount_operation_get_username(op) || g_mount_operation_get_password(op))) { QString str = ""; p_this->m_serverLoginDlg->setCurrentPasswd(str); p_this->m_serverLoginDlg->setCurrentUserName(str); } int code = p_this->m_serverLoginDlg->exec(); g_mount_operation_set_anonymous(op, p_this->m_serverLoginDlg->anonymous()); if (code == QDialog::Rejected) { g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); p_this->m_serverLoginDlg->setProperty("IsRejected", true); return; } p_this->m_serverLoginDlg->syncRemoteServer(p_this->m_remote_uri); if (!p_this->m_serverLoginDlg->anonymous()) { g_mount_operation_set_username(p_this->m_op, p_this->m_serverLoginDlg->user().toUtf8().constData()); g_mount_operation_set_password(p_this->m_op, p_this->m_serverLoginDlg->password().toUtf8().constData()); g_mount_operation_set_domain(p_this->m_op, p_this->m_serverLoginDlg->domain().toUtf8().constData()); } else { p_this->m_serverLoginDlg->setProperty("IsFirstAnonymous", true); } g_mount_operation_set_password_save(p_this->m_op,/* dlgLogin.savePassword()? */G_PASSWORD_SAVE_NEVER/*: G_PASSWORD_SAVE_FOR_SESSION*/); p_this->m_serverLoginDlg->setProperty("IsRejected", false); g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); } Peony::ComputerViewContainer::~ComputerViewContainer() { if (nullptr != m_op) { g_object_unref(m_op); } if (nullptr !=m_dlg) { delete m_dlg; m_dlg = nullptr; } if (nullptr != m_serverLoginDlg) { delete m_serverLoginDlg; m_serverLoginDlg = nullptr; } } const QStringList Peony::ComputerViewContainer::getSelections() { QStringList uris; // fix #260661 访问ftp时文管闪退并且产生core文件 // note: 从gdb查看coreä¿¡æ�¯ï¼Œå�‘现m_view在挂载异常时为nullptr,增加é�žç©ºåˆ¤æ–­é�¿å…�空指针调用导致的崩溃 if (!m_view) { return uris; } auto model = static_cast(m_view->model()); for (auto index : m_view->selectionModel()->selectedIndexes()) { auto item = model->itemFromIndex(index); uris<uri(); } return uris; } void Peony::ComputerViewContainer::paintEvent(QPaintEvent *e) { DirectoryViewWidget::paintEvent(e); } void Peony::ComputerViewContainer::keyPressEvent(QKeyEvent *e) { if (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return) { // if (m_enterAction) // m_enterAction->triggered(); e->accept(); return; } QWidget::keyPressEvent(e); } void Peony::ComputerViewContainer::bindModel(Peony::FileItemModel *model, Peony::FileItemProxyFilterSortModel *proxyModel) { //try fo fix model item update abnormal issue //related to task#224468 disconnect(m_model); disconnect(m_proxyModel); m_model = model; m_proxyModel = proxyModel; model->setRootUri("computer:///"); connect(model, &Peony::FileItemModel::findChildrenFinished, this, &Peony::DirectoryViewWidget::viewDirectoryChanged); if (m_view) m_view->deleteLater(); m_view = new ComputerView(this); auto layout = new QHBoxLayout; layout->addWidget(m_view); setLayout(layout); Q_EMIT viewDirectoryChanged(); auto selectionModel = m_view->selectionModel(); connect(selectionModel, &QItemSelectionModel::selectionChanged, this, &DirectoryViewWidget::viewSelectionChanged);; connect(this, &ComputerViewContainer::containerDoubleClicked, this, [=](const QModelIndex &index){ if (!index.parent().isValid() || m_view->getRightDoubleClickState()){ //qDebug() << "doubleClicked state" << m_view->getRightDoubleClickState(); m_view->setRightDoubleClickState(false); return; } auto model = static_cast(m_view->model()); auto item = model->itemFromIndex(index); if (!item->uri().isEmpty()) { item->check(); qDebug() << "doubleClicked updateWindowLocationRequest:"<uri(); this->updateWindowLocationRequest(item->uri()); } else { item->mount(); } }); connect(m_view, &QAbstractItemView::activated, this, [=](const QModelIndex &index) { //å¹³æ�¿æ¨¡å¼�下,长按打开文件处ç�† if (m_view->m_touch_active_timer->isActive()) { auto costTime = m_view->m_touch_active_timer->interval() - m_view->m_touch_active_timer->remainingTime(); if (costTime > qApp->doubleClickInterval()) { m_view->m_touch_active_timer->stop(); return; } } //when selections is more than 1, let mainwindow to process if (m_view->selectionModel()->selectedIndexes().count() != 1) return; Q_EMIT containerDoubleClicked(m_view->selectionModel()->selectedIndexes().first()); m_view->m_touch_active_timer->stop(); }); connect(this, &QWidget::customContextMenuRequested, this, [=](const QPoint &pos){ auto selectedIndexes = m_view->selectionModel()->selectedIndexes(); auto index = m_view->indexAt(pos); if (!selectedIndexes.contains(index)) m_view->clearSelection(); if (index.isValid()) { m_view->selectionModel()->select(index, QItemSelectionModel::SelectCurrent); } QMenu menu(this); auto model = static_cast(m_view->model()); QStringList uris; QList items; for (auto index : m_view->selectionModel()->selectedIndexes()) { auto item = model->itemFromIndex(index); uris<uri(); if (item->uri() == "network:///") return; items<exec(); if (code == QDialog::Rejected) { return; } //GFile* m_volume = g_file_new_for_uri(m_dlg->uri().toUtf8().constData()); m_remote_uri = m_dlg->uri(); // deprecated, use updateWindowLocationRequest() instead. if (nullptr != m_serverLoginDlg) { delete m_serverLoginDlg; m_serverLoginDlg = nullptr; } m_serverLoginDlg = new ConnectServerLogin(m_remote_uri); updateWindowLocationRequest(m_remote_uri); //g_file_mount_enclosing_volume(m_volume, G_MOUNT_MOUNT_NONE, m_op, nullptr, GAsyncReadyCallback(mount_enclosing_volume_callback), this); }); } else if (items.count() == 1 // && (items.first()->uri() != "" ||items.first()->m_unixDeviceName.contains("/dev/sr")) && items.first()->uri() != "network:///" || items.first()->m_unixDeviceName.contains("/dev/sr")) { //bool isWayland = qApp->property("isWayland").toBool(); // related to #105070 auto item = items.first(); bool unmountable = item->canUnmount() && !item->property("isKydrive").toBool(); bool isReddisk = false; //fix bug#212689, 212690, 213120, 213121, hide reddisk format and unmount option //fix bug#333377, jc encrpt software change install path issue if (item->m_unixDeviceName.startsWith("/dev/dm") && (QFile::exists("/opt/AQTJ/Client/JC/MAIN/bin/jc_main_ui") || QFile::exists("/opt/apps/com.jc.bmt/files/MAIN/bin/jc_main_ui")) ) isReddisk = true; bool isCloud = QFile::exists("/etc/ecloud") || QFile::exists("/usr/local/share/Ecloud"); bool hideUnmount = false; bool hideFormat = false; //fix task#185121, sudo mount remove volume unmount has no effect issue //除samba, ftp, sftp 外的远程目录,云桌é�¢çŽ¯å¢ƒä¸‹ï¼Œä¸�显示å�¸è½½å’Œæ ¼å¼�化选项 /* 云桌é�¢é‡�定å�‘的盘,ä¸�显示å�¸è½½é€‰é¡¹å’Œæ ¼å¼�化选项 bug#255725, task#185121 */ if (isCloud && AbstractComputerItem::RemoteVolume == item->itemType()) { hideFormat = true; if ( ! item->uri().startsWith("smb:///") && ! item->uri().startsWith("ftp:///") && ! item->uri().startsWith("sftp:///")) { hideUnmount = true; } } if(!item->canEject() && ! isReddisk && ! hideUnmount){ menu.addAction(tr("Unmount"), [=](){ item->unmount(G_MOUNT_UNMOUNT_NONE); }); menu.actions().first()->setEnabled(unmountable); } //fix bug#175330, wayland should be the same with mainline version /* else if (isWayland && ! isReddisk) { menu.addAction(tr("Unmount"), [=](){ item->unmount(G_MOUNT_UNMOUNT_NONE); }); menu.actions().first()->setEnabled(unmountable); }*/ /*eject function for volume. fix #18216*/ if(item->canEject()){ auto ejectAction = menu.addAction(tr("Eject"), [=](){ item->eject(G_MOUNT_UNMOUNT_NONE); }); QString unixDevice = item->m_unixDeviceName; if(unixDevice.contains("/dev/sr")){/* 光盘在刻录数æ�®ã€�镜åƒ�ç­‰æ“�作时,å�³è‹¥å¤„于busy状æ€�时,将弹出è�œå�•ç½®ç�°ä¸�å�¯ç”¨ã€‚link to bug#143293. */ menu.actions().first()->setDisabled(FileUtils::isBusyDevice(unixDevice)); } } auto uri = item->uri(); QString unixDevice = item->m_unixDeviceName; if (uri.isEmpty() && !unixDevice.isEmpty()) { uri = getComputerUriFromUnixDevice(unixDevice); } auto realUri = m_view->tryGetVolumeRealUriFromUri(uri); if (!realUri.isEmpty()) { uri = realUri; } if(uri.startsWith("file://") || !unixDevice.isEmpty()) { uri = getComputerUriFromUri(uri); } auto info = FileInfo::fromUri(uri); if (info->displayName().isEmpty() || info->targetUri().isEmpty()) { FileInfoJob j(info); j.querySync(); } auto mount = VolumeManager::getMountFromUri(info->targetUri()); //fix bug#52491, CDROM and DVD can format issue //fix bug#140543, remote redirection volume can be format if (nullptr != mount) { auto volume = VolumeManager::getVolumeFromMount(mount); if (mount && volume && ! isReddisk && ! hideFormat) { QString unixDevice = FileUtils::getUnixDevice(info->uri()); if (!unixDevice.isNull() && unixDevice.contains("/dev/sr") &&!unixDevice.startsWith("/dev/bus/usb") && info->isVolume()) { auto fdMenu = menu.addAction(tr("Format")); fdMenu->setEnabled(false); #ifndef KY_UDF_BURN DiscControl *discControl = new DiscControl(unixDevice); if(discControl->work()){ connect(discControl, &DiscControl::workFinished, [=](DiscControl *discCtrl){ connect(fdMenu, &QAction::triggered, [=](){ UdfFormatDialog *udfFormatDlg = FormatDlgCreateDelegate::getInstance()->createUdfDlg(uri, discCtrl); udfFormatDlg->show(); }); qDebug() << unixDevice << "supportUdf values:" << discCtrl->supportUdf(); fdMenu->setEnabled(discCtrl->supportUdf()); }); } #else UdfBurn::DiscControl *discControl = new UdfBurn::DiscControl(unixDevice); if(discControl->work()){ connect(discControl, &UdfBurn::DiscControl::workFinished, [=](UdfBurn::DiscControl *discCtrl){ connect(fdMenu, &QAction::triggered, [=](){ UdfBurn::UdfFormatDialogWrapper *udfFormatDlg = FormatDlgCreateDelegate::getInstance()->createUdfDlgWrapper(uri, discCtrl); udfFormatDlg->show(); }); qDebug() << unixDevice << "KY_UDF_BURN supportUdf values:" << discCtrl->supportUdf(); fdMenu->setEnabled(discControl->supportUdf()); }); } #endif } else if (! unixDevice.isNull() && ! unixDevice.contains("/dev/sr") &&!unixDevice.startsWith("/dev/bus/usb") && info->isVolume() && info->canUnmount()/* && info->targetUri() != "file:///data"*/) { auto fdMenu = menu.addAction(tr("Format"), [=] () { Format_Dialog *fd = FormatDlgCreateDelegate::getInstance()->createUDiskDlg(uri, nullptr); fd->show(); }); if (! mount) { fdMenu->setEnabled(false); } } } } else { if (!unixDevice.isNull() && !unixDevice.contains("/dev/sr") && !unixDevice.startsWith("/dev/bus/usb") && info->isVolume() && !uri.isEmpty()) { auto fdMenu = menu.addAction(tr("Format"), [=](){ Format_Dialog *fd = FormatDlgCreateDelegate::getInstance()->createUDiskDlg(uri, nullptr); fd->show(); }); } } QStringList fakeUrls; fakeUrls<getComputerViewMenuPlugins(); for (auto plugin : menuPlugins) { menu.addActions(plugin->menuActions(Peony::MenuPluginInterface::SideBar, "computer:///", fakeUrls)); } if (qApp->property("deviceRenamePluginLoaded").toBool()) { // add drive rename action, link to: #105070 auto driveRenamePlugin = new DriveRename(this); menu.addActions(driveRenamePlugin->menuActions(Peony::MenuPluginInterface::Type::SideBar, "computer:///", fakeUrls)); } if (!item->uri().startsWith("network://")) { auto a = menu.addAction(tr("Property"), [=]() { if (uri.isNull()) { QMessageBox::warning(0, 0, tr("You have to mount this volume first")); } else { QProcess p; p.setProgram("/usr/bin/peony"); QStringList args; args << "-p" << uri; p.setArguments(args); // p.startDetached(); p.startDetached(p.program(), p.arguments()); } }); auto targetUri = FileUtils::getTargetUri(info->uri()); bool isMounted = FileUtils::isFileUnmountable(info->uri()); if ("file:///" == uri || "file:///" == targetUri || "file:///data" == uri || "computer:///ukui-data-volume" == uri) { isMounted = true; } a->setEnabled(!uri.isNull() && isMounted); if(item->m_unixDeviceName.contains("/dev/sr")){/* 光盘在刻录数æ�®ã€�镜åƒ�ç­‰æ“�作时,å�³è‹¥å¤„于busy状æ€�时,该è�œå�•ç½®ç�°ä¸�å�¯ç”¨ã€‚link to bug#143293. */ a->setDisabled(FileUtils::isBusyDevice(item->m_unixDeviceName)); } } FMWindowIface *windowIface = dynamic_cast(this->topLevelWidget()); menu.addAction(tr("Open In New Window"), [=](){ auto targetUri = info->targetUri(); if(targetUri.isEmpty() && "computer:///ukui-data-volume" == info->uri()){ targetUri = "file:///data"; } auto newWindow = windowIface->create(targetUri); dynamic_cast(newWindow)->show(); }); if (!qApp->property("tabletMode").toBool()) { menu.addAction(tr("Open In New Tab"), [=](){ auto targetUri = info->targetUri(); if(targetUri.isEmpty() && "computer:///ukui-data-volume" == info->uri()){ targetUri = "file:///data"; } windowIface->addNewTabs(QStringList()<uri() != "" && items.first()->uri() != "network:///"){ qDebug() << "unable Property uri:" <uri(); menu.addAction(tr("Property")); menu.actions().first()->setEnabled(false); } if (!menu.isEmpty()) menu.exec(mapToGlobal(pos)); }); // m_enterAction = new QAction(this); // m_enterAction->setShortcut(Qt::Key_Enter); // addAction(m_enterAction); // connect(m_enterAction, &QAction::triggered, this, [=](){ // if (m_view->selectionModel()->selectedIndexes().count() == 1) { // Q_EMIT m_view->doubleClicked(m_view->selectionModel()->selectedIndexes().first()); // } // }); connect(m_view, &ComputerView::updateLocationRequest, this, &ComputerViewContainer::updateWindowLocationRequest); } void Peony::ComputerViewContainer::beginLocationChange() { Q_EMIT viewDirectoryChanged(); m_view->refresh(); } void Peony::ComputerViewContainer::stopLocationChange() { Q_EMIT viewDirectoryChanged(); } peony-extensions/peony-extension-computer-view/peony-extension-computer-view_mn.ts0000664000175000017500000005600715257160264030031 0ustar fengfeng ComputerItemDelegate You should mount volume first ᠠᠴᠢᠬᠤ ᠬᠡᠰᠡᠭ ᠢ᠋ ᠳᠡᠷᠢᠬᠦᠨ ᠰᠤᠩᠭᠤᠭᠳᠠᠬᠤᠨ ᠪᠤᠯᠭᠠᠬᠤ ᠱᠠᠭᠠᠷᠳᠠᠯᠭ᠎ᠠ ᠲᠠᠢ ComputerNetworkItem Network Neighborhood ᠰᠦᠯᠵᠢᠶᠡᠨ ᠳᠡᠭᠡᠷᠡᠬᠢ ᠬᠦᠷᠰᠢ ComputerRemoteVolumeItem Remote ᠠᠯᠤᠰ ComputerUserShareItem User Share 本机共享 Data ᠳ᠋ᠠᠢᠲ᠋ᠠ ᠵᠢᠨ ᠲᠠᠪᠠᠭ ComputerVolumeItem Volume ᠳᠠᠭᠤᠨ ᠤ᠋ ᠬᠡᠮᠵᠢᠶ᠎ᠡ System Disk ᠰᠢᠰᠲ᠋ᠧᠮ᠎ᠦ᠋ᠨ ᠲᠠᠪᠠᠭ File System ᠹᠠᠢᠯ᠎ᠤᠨ ᠱᠢᠰᠲ᠋ᠧᠮ Data ᠳ᠋ᠠᠢᠲ᠋ᠠ ᠵᠢᠨ ᠲᠠᠪᠠᠭ Intel::ComputerItemDelegate You should mount volume first ᠠᠴᠢᠬᠤ ᠬᠡᠰᠡᠭ ᠢ᠋ ᠳᠡᠷᠢᠬᠦᠨ ᠰᠤᠩᠭᠤᠭᠳᠠᠬᠤᠨ ᠪᠤᠯᠭᠠᠬᠤ ᠱᠠᠭᠠᠷᠳᠠᠯᠭ᠎ᠠ ᠲᠠᠢ Intel::ComputerNetworkItem Network Neighborhood ᠰᠦᠯᠵᠢᠶᠡᠨ ᠳᠡᠭᠡᠷᠡᠬᠢ ᠬᠦᠷᠰᠢ Intel::ComputerRemoteVolumeItem Remote ᠠᠯᠤᠰ Intel::ComputerViewContainer Connect a server ᠠᠯᠤᠰ ᠦᠢᠯᠡᠴᠢᠯᠡᠬᠦᠡᠷ ᠲᠤ᠌ ᠴᠦᠷᠬᠡᠯᠡᠬᠦ Unmount ᠪᠠᠭᠤᠯᠭᠠᠬᠤ Eject ᠦᠰᠦᠷᠴᠤ ᠭᠠᠷᠬᠤ Property ᠬᠠᠷᠢᠶᠠᠳᠤ ᠴᠢᠨᠠᠷ You have to mount this volume first ᠠᠴᠢᠬᠤ ᠬᠡᠰᠡᠭ ᠢ᠋ ᠳᠡᠷᠢᠬᠦᠨ ᠰᠤᠩᠭᠤᠭᠳᠠᠬᠤᠨ ᠪᠤᠯᠭᠠᠬᠤ ᠱᠠᠭᠠᠷᠳᠠᠯᠭ᠎ᠠ ᠲᠠᠢ Intel::ComputerVolumeItem Volume ᠳᠠᠭᠤᠨ ᠤ᠋ ᠬᠡᠮᠵᠢᠶ᠎ᠡ System Disk ᠰᠢᠰᠲ᠋ᠧᠮ᠎ᠦ᠋ᠨ ᠲᠠᠪᠠᠭ User Disk ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢ᠎ᠶ᠋ᠢᠨ ᠲᠠᠪᠠᠭ LoginRemoteFilesystem Connect to Sever ᠦᠢᠯᠡᠴᠢᠯᠡᠬᠦᠡᠷ ᠲᠤ᠌ ᠴᠦᠷᠬᠡᠯᠡᠬᠦ server information ᠦᠢᠯᠡᠴᠢᠯᠡᠬᠦᠷ ᠤ᠋ᠨ ᠮᠡᠳᠡᠭᠡ ᠵᠠᠩᠬᠢ user information ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠮᠡᠳᠡᠭᠡ ᠵᠠᠩᠬᠢ tag ᠱᠤᠰᠢᠭ᠎ᠠ user ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢ password ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ protocol á ­á ¡á ·á Žá ¡ server ᠦᠢᠯᠡᠴᠢᠯᠡᠬᠡᠨ ᠤ᠋ ᠦᠵᠦᠬᠦᠷ ᠤ᠋ᠨ ᠬᠠᠶᠢᠭ directory á ­á  á ·á ´á  á ­ SAMBA FTP FTP / / port ᠦᠵᠦᠬᠦᠷ 20 20 21 21 137 137 138 138 139 139 445 445 ok ᠴᠦᠷᠬᠡᠯᠡᠬᠦ cancel ᠦᠭᠡᠢᠰᠬᠡᠬᠦ Peony::ComputerViewContainer Connect a server ᠠᠯᠤᠰ ᠦᠢᠯᠡᠴᠢᠯᠡᠬᠦᠡᠷ ᠲᠤ᠌ ᠴᠦᠷᠬᠡᠯᠡᠬᠦ sftp://, etc... 如sftp://... Cancel å�–消 OK 确定 Unmount ᠪᠠᠭᠤᠯᠭᠠᠬᠤ Eject ᠦᠰᠦᠷᠴᠤ ᠭᠠᠷᠬᠤ Format format ᠠᠩᠬᠠᠵᠢᠭᠤᠯᠬᠤ Property ᠬᠠᠷᠢᠶᠠᠳᠤ ᠴᠢᠨᠠᠷ You have to mount this volume first ᠠᠴᠢᠬᠤ ᠬᠡᠰᠡᠭ ᠢ᠋ ᠳᠡᠷᠢᠬᠦᠨ ᠰᠤᠩᠭᠤᠭᠳᠠᠬᠤᠨ ᠪᠤᠯᠭᠠᠬᠤ ᠱᠠᠭᠠᠷᠳᠠᠯᠭ᠎ᠠ ᠲᠠᠢ Open In New Window ᠰᠢᠨ᠎ᠡ ᠴᠤᠩᠬᠤᠨ ᠳᠡᠭᠡᠷ᠎ᠡ ᠨᠡᠬᠡᠬᠡᠬᠦ Open In New Tab ᠰᠢᠨ᠎ᠡ ᠱᠤᠰᠢᠭ᠎ᠠ ᠵᠢᠨ ᠨᠢᠭᠤᠷ ᠳᠡᠭᠡᠷ᠎ᠡ ᠨᠡᠬᠡᠬᠡᠬᠦ Peony::DriveRename Rename ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠢᠳᠬᠦ Device name: ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ᠎ᠶᠢᠨ ᠱᠢᠨᠵᠢ ᠳᠡᠮᠳᠡᠭ á „ Warning ᠠᠨᠭᠬᠠᠷᠠᠭᠤᠯᠬᠤ Renaming cannot start with a decimal point, Please re-enter! ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠢᠳᠦᠯ ᠪᠤᠳᠠᠷᠬᠠᠢ ᠲᠤᠭ᠎ᠠ ᠪᠡᠷ ᠡᠬᠢᠯᠡᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ᠂ ᠳᠠᠬᠢᠵᠤ ᠤᠷᠤᠭᠤᠯᠤᠭᠠᠷᠠᠢ! The device name exceeds the character limit, rename failed! ᠲᠦᠬᠦᠬᠡᠷᠡᠮᠵᠢ ᠵᠢᠨ ᠨᠡᠷᠡᠢᠳᠦᠯ ᠦᠰᠦᠭ ᠤ᠋ᠨ ᠲᠤᠭᠠᠨ ᠤᠤ ᠬᠢᠵᠠᠭᠠᠷᠯᠠᠯ á ¡á ´á ¡ ᠬᠡᠳᠦᠷᠡᠭᠰᠡᠨ᠂ ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠢᠳᠴᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ! Renaming will unmount the device. Do you want to continue? ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠢᠳᠬᠦ ᠳ᠋ᠤ᠌ ᠬᠦᠷᠪᠡᠯ ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ ᠵᠢ ᠪᠠᠭᠤᠯᠭᠠᠵᠤ ᠮᠡᠳᠡᠨ᠎ᠡ᠂ ᠦᠷᠬᠦᠯᠵᠢᠯᠡᠨ ᠬᠦᠢᠴᠡᠳᠬᠡᠬᠦ ᠤᠤ? The device may not support the rename operation, rename failed! ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠢᠳᠬᠦ ᠵᠢ ᠳᠡᠮᠵᠢᠬᠦ ᠦᠬᠡᠢ ᠪᠠᠢᠵᠤ ᠮᠡᠳᠡᠨ᠎ᠡ᠂ ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠢᠳᠴᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ! QObject Computer View ᠺᠤᠮᠫᠢᠦᠲᠸᠷ ᠤ᠋ᠨ ᠬᠠᠷᠠᠭᠠᠨ ᠵᠢᠷᠤᠭ Show drives, network and personal directories Show drives, network and personal directories. ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ ᠵᠢᠨ ᠬᠡᠰᠡᠭ᠂ ᠲᠤᠤᠷ ᠰᠦᠯᠵᠢᠶᠡᠨ ᠤ᠋ á ­á  á ·á ´á  á ­ ᠪᠤᠯᠤᠨ ᠬᠤᠪᠢ ᠬᠦᠮᠦᠨ ᠤ᠋ á ­á  á ·á ´á  á ­ ᠢ᠋ ᠢᠯᠡᠷᠡᠬᠦᠯᠬᠦ. One or more programs prevented the unmount operation. ᠨᠢᠭᠡ ᠪᠤᠶᠤ ᠤᠯᠠᠨ ᠫᠡᠷᠦᠭᠷᠡᠮ ᠪᠠᠭᠤᠯᠭᠠᠬᠤ ᠠᠵᠢᠯᠯᠠᠬᠤᠢ ᠵᠢ ᠬᠤᠷᠢᠭᠯᠠᠵᠤ ᠪᠠᠢᠨ᠎ᠠ. Unmount failed ᠪᠠᠭᠤᠯᠭᠠᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ Error: %1 Do you want to unmount forcely? ᠪᠤᠷᠤᠭᠤ: %1 ᠠᠯᠪᠠ ᠪᠡᠷ ᠪᠠᠭᠤᠯᠭᠠᠬᠤ ᠤᠤ? It need to synchronize before operating the device,place wait! ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ ᠵᠢ ᠠᠵᠢᠯᠯᠠᠭᠤᠯᠬᠤ á ¡á ´á ¡ ᠡᠮᠦᠨ᠎ᠡ ᠳ᠋ᠠᠢᠲ᠋ᠠ ᠵᠢ ᠢᠵᠢᠯ ᠠᠯᠬᠤᠮᠴᠢᠯᠠᠬᠤ ᠱᠠᠭᠠᠷᠳᠠᠯᠭ᠎ᠠ ᠲᠠᠢ, ᠲᠦᠷ ᠬᠦᠯᠢᠶᠡᠬᠡᠷᠡᠢ! The device has been mount successfully! ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ ᠵᠢ ᠠᠴᠢᠪᠠ! Data synchronization is complete,the device has been unmount successfully! ᠳ᠋ᠠᠢᠲ᠋ᠠ ᠵᠢ ᠢᠵᠢᠯ ᠠᠯᠬᠤᠮᠴᠢᠯᠠᠪᠠ, ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ ᠵᠢ ᠨᠢᠭᠡᠨᠳᠡ ᠪᠠᠭᠤᠯᠭᠠᠪᠠ! Error: %1 ᠪᠤᠷᠤᠭᠤ: %1 Unable to unmount it, you may need to close some programs, such as: GParted etc. ᠪᠠᠭᠤᠯᠭᠠᠬᠤ ᠵᠢᠨ á  á ·á ­á Žá   ᠦᠬᠡᠢ, ᠲᠠ ᠤᠷᠢᠳᠠᠪᠠᠷ ᠨᠢᠭᠡ ᠪᠦᠯᠦᠭ ᠫᠡᠷᠦᠭᠷᠡᠮ ᠢ᠋ ᠬᠠᠭᠠᠬᠤ ᠴᠢᠬᠤᠯᠠᠳᠠᠢ, ᠬᠤᠪᠢᠶᠠᠷᠢ ᠬᠡᠰᠡᠭ ᠤ᠋ᠨ ᠨᠠᠢᠷᠠᠭᠤᠯᠤᠭᠤᠷ ᠵᠡᠷᠭᠡ. %1 %1 Eject device failed, the reason may be that the device has been removed, etc. ᠰᠤᠮᠤ ᠭᠠᠷᠭᠠᠬᠤ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠢᠯᠠᠭᠳᠠᠭᠰᠠᠨ á  á ´á   ᠪᠣᠯᠵᠤ á ‚ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠨᠢᠭᠡᠨᠲᠡ ᠠᠷᠢᠯᠭᠠᠭᠳᠠᠭᠰᠠᠨ ᠵᠡᠷᠭᠡ ᠮᠠᠭᠠᠳ á ƒ Eject failed ᠦᠰᠦᠷᠴᠤ á ­á  á ·á ´á ¤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ Cancel ᠦᠭᠡᠢᠰᠬᠡᠬᠦ Eject Anyway ᠶᠠᠭᠠᠬᠢᠭᠰᠠᠨ á ´á ¤ ᠰᠤᠮᠤ á ­á  á ·á ­á  á ­á °á  á ¨ á ´á ¤ Warning ᠠᠨᠭᠬᠠᠷᠠᠭᠤᠯᠬᠤ The device may not support the rename operation, rename failed! ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠬᠦᠨᠳᠦ ᠨᠡᠷᠡᠶᠢᠳᠦᠨ ᠠᠵᠢᠯᠯᠠᠬᠤ á ¶á ¢ ᠳᠡᠮᠵᠢᠬᠦ ᠦᠭᠡᠢ ᠮᠠᠭᠠᠳ á ‚ ᠬᠦᠨᠳᠦ ᠪᠡᠷ ᠨᠡᠷᠡᠶᠢᠳᠦᠯ ᠢᠯᠠᠭᠳᠠᠵᠠᠢ ! Message recipient disconnected from message bus without replying! ᠮᠡᠳᠡᠭᠡ ᠬᠦᠯᠢᠶᠡᠨ ᠠᠪᠤᠭᠴᠢ ᠬᠠᠷᠢᠭᠤ ᠦᠭᠡᠢ ᠪᠠᠢᠳᠠᠯ ᠳᠣᠣᠷ᠎ᠠ ᠮᠡᠳᠡᠭᠡᠨ᠎ᠦ᠌ ᠶᠡᠷᠦᠩᠬᠡᠢ ᠤᠲᠠᠰᠤ᠎ᠲᠠᠢ ᠵᠠᠯᠭᠠᠯᠳᠤᠬᠤ᠎ᠪᠠᠨ ᠲᠠᠰᠤᠯᠤᠭᠠᠷᠠᠢ ! log remote error ᠠᠯᠤᠰ á  á ´á   ᠪᠤᠷᠤᠭᠤ ᠲᠡᠮᠳᠡᠭᠯᠡᠵᠡᠢ á ƒ peony-extensions/peony-extension-computer-view/peony-extension-computer-view_tr.ts0000664000175000017500000004442715257160264030047 0ustar fengfeng ComputerItemDelegate You should mount volume first Önce bölümü baÄŸlamalısınız ComputerNetworkItem Network Neighborhood AÄŸ KomÅŸuları ComputerRemoteVolumeItem Remote Uzak ComputerUserShareItem Data ComputerVolumeItem Volume Bölüm System Disk File System Dosya Sistemi Data Intel::ComputerItemDelegate You should mount volume first Önce bölümü baÄŸlamalısınız Intel::ComputerNetworkItem Network Neighborhood AÄŸ KomÅŸuları Intel::ComputerRemoteVolumeItem Remote Uzak Intel::ComputerViewContainer Connect a server Servere baÄŸlan Unmount BaÄŸlantıyı kes Eject Çıkar Property Özellik You have to mount this volume first Önce bu bölümü baÄŸlamalısınız Intel::ComputerVolumeItem Volume Bölüm System Disk User Disk LoginRemoteFilesystem Connect to Sever Sunucuya baÄŸlan server information Sunucu bilgisi user information Kullanıcı bilgisi tag Etiket user Kullanıcı password Parola protocol Protokol server Sunucu directory Dizin SAMBA SAMBA FTP FTP / / port Port 20 21 137 138 139 445 ok Tamam cancel İptal Peony::ComputerViewContainer Connect a server Servere baÄŸlan sftp://, etc... sftp://, gibi... Unmount BaÄŸlantıyı kes Eject Çıkar Format Open In New Window Open In New Tab Property Özellik You have to mount this volume first Önce bu bölümü baÄŸlamalısınız Peony::DriveRename Rename Device name: Warning Renaming cannot start with a decimal point, Please re-enter! The device name exceeds the character limit, rename failed! Renaming will unmount the device. Do you want to continue? QObject Computer View Bilgisayar Görünümü Show drives, network and personal directories Show drives, network and personal directories. Sürücüleri, ağı ve kiÅŸisel dizinleri göster. One or more programs prevented the unmount operation. Unmount failed BaÄŸlantıyı kesme baÅŸarısız Error: %1 Do you want to unmount forcely? Hata: %1 Zorla ayrılmak ister misin? It need to synchronize before operating the device,place wait! The device has been mount successfully! Data synchronization is complete,the device has been unmount successfully! Error: %1 Eject device failed, the reason may be that the device has been removed, etc. Unable to unmount it, you may need to close some programs, such as: GParted etc. %1 Eject failed Çıkarma baÅŸarısız Cancel İptal Eject Anyway Yine de Çıkar Warning The device may not support the rename operation, rename failed! Message recipient disconnected from message bus without replying! log remote error peony-extensions/peony-extension-computer-view/peony-extension-computer-view_cs.ts0000664000175000017500000004407615257160264030027 0ustar fengfeng ComputerItemDelegate You should mount volume first Svazek je tÅ™eba nejprve pÅ™ipojit (mount) ComputerNetworkItem Network Neighborhood Okolní poÄ�ítaÄ�e ComputerRemoteVolumeItem Remote Vzdálené ComputerUserShareItem Data ComputerVolumeItem Volume Svazek System Disk File System Souborový systém Data Intel::ComputerItemDelegate You should mount volume first Svazek je tÅ™eba nejprve pÅ™ipojit (mount) Intel::ComputerNetworkItem Network Neighborhood Okolní poÄ�ítaÄ�e Intel::ComputerRemoteVolumeItem Remote Vzdálené Intel::ComputerViewContainer Connect a server PÅ™ipojit k serveru Unmount Odpojit Eject Property Vlastnost You have to mount this volume first Tento svazek je tÅ™eba nejprve pÅ™ipojit (mount) Intel::ComputerVolumeItem Volume Svazek System Disk User Disk LoginRemoteFilesystem Connect to Sever server information user information tag user password protocol server directory SAMBA FTP / port 20 21 137 138 139 445 ok cancel Peony::ComputerViewContainer Connect a server PÅ™ipojit k serveru sftp://, etc... sftp://, atd… Unmount Odpojit Eject Format Open In New Window Open In New Tab Property Vlastnost You have to mount this volume first Tento svazek je tÅ™eba nejprve pÅ™ipojit (mount) Peony::DriveRename Rename Device name: Warning Renaming cannot start with a decimal point, Please re-enter! The device name exceeds the character limit, rename failed! Renaming will unmount the device. Do you want to continue? QObject Computer View Tento poÄ�ítaÄ� Show drives, network and personal directories Show drives, network and personal directories. Zobrazit disky, síť a osobní složky. It need to synchronize before operating the device,place wait! The device has been mount successfully! Data synchronization is complete,the device has been unmount successfully! Eject device failed, the reason may be that the device has been removed, etc. One or more programs prevented the unmount operation. Unmount failed Error: %1 Error: %1 Do you want to unmount forcely? Unable to unmount it, you may need to close some programs, such as: GParted etc. %1 Eject failed Cancel Eject Anyway Warning The device may not support the rename operation, rename failed! Message recipient disconnected from message bus without replying! log remote error peony-extensions/peony-extension-computer-view/login-remote-filesystem.cpp0000664000175000017500000000425115257160264026300 0ustar fengfeng/* * Copyright (C) 2019, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "login-remote-filesystem.h" #include "ui_login-remote-filesystem.h" #include LoginRemoteFilesystem::LoginRemoteFilesystem(QWidget *parent) : QDialog(parent), ui(new Ui::LoginRemoteFilesystem) { ui->setupUi(this); ui->pwd_lineEdit->setEchoMode(QLineEdit::Password); ui->port_comboBox->setEditText("445"); // connect(ui->type_comboBox, &QComboBox::currentTextChanged, [=](QString& tp) { // if ("SAMBA" == tp) { // ui->port_comboBox->setEditText("445"); // } else if ("FTP" == tp) { // ui->port_comboBox->setEditText("21"); // } // }); } LoginRemoteFilesystem::~LoginRemoteFilesystem() { disconnect(); delete ui; } QString LoginRemoteFilesystem::user() { return ui->user_lineEdit->text(); } QString LoginRemoteFilesystem::password() { return ui->pwd_lineEdit->text(); } QString LoginRemoteFilesystem::domain() { return ui->ip_edit->text() + ":" + ui->port_comboBox->currentText(); } QString LoginRemoteFilesystem::uri() { QString uuri = ""; if (ui->type_comboBox->currentText() == "SAMBA") { uuri = "smb://" + ui->ip_edit->text() + ":" + ui->port_comboBox->currentText() + ui->file_lineEdit->text(); } else if (ui->type_comboBox->currentText() == "FTP") { uuri = "ftp://" + ui->ip_edit->text() + ":" + ui->port_comboBox->currentText() + ui->file_lineEdit->text(); } return uuri; } peony-extensions/peony-extension-computer-view/peony-extension-computer-view_zh_CN.ts0000664000175000017500000004444115257160264030417 0ustar fengfeng ComputerItemDelegate You should mount volume first 需è¦�首先挂载分区 ComputerNetworkItem Network Neighborhood 网上邻居 ComputerRemoteVolumeItem Remote 远程目录 ComputerUserShareItem User Share 本机共享 Data æ•°æ�®ç›˜ ComputerVolumeItem Volume 本地分区 System Disk 系统盘 File System 文件系统 Data æ•°æ�®ç›˜ Intel::ComputerItemDelegate You should mount volume first 需è¦�首先挂载分区 Intel::ComputerNetworkItem Network Neighborhood 网上邻居 Intel::ComputerRemoteVolumeItem Remote 远程目录 Intel::ComputerViewContainer Connect a server 连接远程æœ�务器 Unmount å�¸è½½ Eject 弹出 Property 属性 You have to mount this volume first 需è¦�首先挂载分区 Intel::ComputerVolumeItem Volume 本地分区 System Disk 系统盘 User Disk 用户盘 LoginRemoteFilesystem Connect to Sever 连接到æœ�务器 server information æœ�务器信æ�¯ user information 用户信æ�¯ tag 标签 user 用户å�� password 密ç � protocol å��è®® server æœ�务端地å�€ directory 目录 SAMBA FTP FTP / / port 端å�£ 20 20 21 21 137 137 138 138 139 139 445 445 ok 确定 cancel å�–消 Peony::ComputerViewContainer Connect a server 连接远程æœ�务器 sftp://, etc... 如sftp://... Cancel å�–消 OK 确定 Unmount å�¸è½½ Eject 弹出 format æ ¼å¼�化 Format æ ¼å¼�化 Property 属性 You have to mount this volume first 需è¦�首先挂载分区 Open In New Window 在新窗å�£ä¸­æ‰“å¼€ Open In New Tab 在新标签页中打开 Peony::DriveRename Rename é‡�命å�� Device name: 设备å��: Warning 警告 Renaming cannot start with a decimal point, Please re-enter! é‡�命å��æ—¶ä¸�支æŒ�首字符为å°�数点,请é‡�新输入! The device name exceeds the character limit, rename failed! 设备å��超过字符é™�制,é‡�命å��失败! Renaming will unmount the device. Do you want to continue? é‡�命å��将会å�¸è½½è®¾å¤‡ï¼Œæ˜¯å�¦ç»§ç»­ï¼Ÿ QObject Computer View 电脑视图 Show drives, network and personal directories Show drives, network and personal directories. 显示设备分区, 网络目录和个人目录 One or more programs prevented the unmount operation. 一个或多个程åº�阻止å�¸è½½æ“�作。 Unmount failed å�¸è½½å¤±è´¥ Error: %1 Do you want to unmount forcely? 错误:%1 是å�¦å¼ºåˆ¶å�¸è½½ï¼Ÿ It need to synchronize before operating the device,place wait! æ“�作设备å‰�需è¦�å�Œæ­¥æ•°æ�®ï¼Œè¯·ç¨�ç­‰ï¼� The device has been mount successfully! 设备挂载æˆ�功ï¼� Data synchronization is complete,the device has been unmount successfully! æ•°æ�®å�Œæ­¥å®Œæˆ�,设备已ç»�æˆ�功å�¸è½½ï¼� Error: %1 错误: %1\n Eject device failed, the reason may be that the device has been removed, etc. 设备弹出失败,å�¯èƒ½æ˜¯è®¾å¤‡å·²ç»�移除等原因。 Unable to unmount it, you may need to close some programs, such as: GParted etc. 无法å�¸è½½ï¼Œæ‚¨å�¯èƒ½éœ€è¦�先关闭一些程åº�,如分区编辑器等。 %1 %1 Eject failed 弹出失败 Cancel å�–消 Eject Anyway 无论如何弹出 Warning 警告 The device may not support the rename operation, rename failed! å�¯èƒ½è®¾å¤‡ä¸�支æŒ�é‡�命å��æ“�作,é‡�命å��失败ï¼� Message recipient disconnected from message bus without replying! 消æ�¯æŽ¥æ”¶è€…在没有回å¤�的情况下与消æ�¯æ€»çº¿æ–­å¼€è¿žæŽ¥! log remote error 日志远程错误 peony-extensions/peony-extension-computer-view/peony-extension-computer-view_ug_CN.ts0000664000175000017500000005020715257160264030406 0ustar fengfeng ComputerItemDelegate You should mount volume first سىز ئاۋۋال ئاۋازنى ئۇلاشىڭىز ÙƒÛ�رەك. ComputerNetworkItem Network Neighborhood تور قوشنىسى ComputerRemoteVolumeItem Remote يىراق ComputerUserShareItem User Share 本机共享 Data سانلىق مەلۇمات ComputerVolumeItem Volume ئاۋاز چوڭلۇقى System Disk File System ھۆججەت سىستÛ�مىسى Data سانلىق مەلۇمات Intel::ComputerItemDelegate You should mount volume first سىز ئاۋۋال ئاۋازنى ئۇلاشىڭىز ÙƒÛ�رەك. Intel::ComputerNetworkItem Network Neighborhood تور قوشنىسى Intel::ComputerRemoteVolumeItem Remote يىراق Intel::ComputerViewContainer Connect a server مۇلازىمÛ�تىرنى ئۇلاش Unmount Unmount Eject چىقىرىش Property مال-Ù…ÛˆÙ„ÛˆÙƒ You have to mount this volume first ئالدى بىلەن بۇ ئاۋازنى ئۇلاش ÙƒÛ�رەك Intel::ComputerVolumeItem Volume ئاۋاز چوڭلۇقى System Disk User Disk LoginRemoteFilesystem Connect to Sever Sever غا ئۇلاش server information مۇلازىمىتÛ�ر ئۇچۇرى user information ئىشلەتكۈچى ئۇچۇرلىرى tag خەتكۈچ user ئىشلەتكۈچى password پارول protocol ÙƒÛ�لىشىم server مۇلازىمىتÛ�ر directory مۇندەرىجە SAMBA FTP FTP / / port پورت 20 20 21 21 137 137 138 138 139 139 445 445 ok ماقۇل cancel ئەمەلدىن قالدۇرۇش Peony::ComputerViewContainer Connect a server مۇلازىمÛ�تىرنى ئۇلاش sftp://, etc... 如sftp://... Cancel å�–消 OK 确定 Unmount Unmount Eject چىقىرىش Format Open In New Window Open In New Tab format Ù�ورمات Property مال-Ù…ÛˆÙ„ÛˆÙƒ You have to mount this volume first ئالدى بىلەن بۇ ئاۋازنى ئۇلاش ÙƒÛ�رەك Peony::DriveRename Rename قايتا ئىسىم Ù�امىلە قىلىش Device name: ئۈسكۈنە نامى: Warning دىققەت Renaming cannot start with a decimal point, Please re-enter! نامىنى ئۆزگەرتىشتە دÛ�سكىلىق نۇقتىدىن باشلىنالمايدۇ، قايتا كىرىڭ! The device name exceeds the character limit, rename failed! ئۈسكۈنە نامى Ù¾Û�رسوناژ چەكلىمىدىن ئÛ�شىپ كەتتى، قايتا ئىسىم قويۇش مەغلۇپ بولدى! Renaming will unmount the device. Do you want to continue? نامى ئۆزگەرتكەندە ئۈسكۈنىنى تىندۇرىدۇ. داۋام قىلغۇڭىز بارمۇ؟ The device may not support the rename operation, rename failed! ئۈسكۈنە بەلكىم قايتا ئىسىم ئۆزگەرتىش مەشخۇلاتى قوللىماسلىقى مۇمكىن، قايتا ئىسىم بÛ�رىش مەغلۇپ بولدى! QObject Computer View كومپيۇتÛ�ر كۆرۈنۈشى Show drives, network and personal directories Show drives, network and personal directories. قوزغاتقۇچ، تور Û‹Û• شەخسىي مۇندەرىجىلەرنى كۆرسىتىش. One or more programs prevented the unmount operation. بىر ياكى بىر Ù†Û•Ú†Ú†Û• پروگرامما ئۈزۈلۈپ Ù‚Û�لىشنىڭ ئالدىنى ئالدى. Unmount failed Unmount مەغلۇپ بولدى Error: %1 Do you want to unmount forcely? 错误:%1 是å�¦å¼ºåˆ¶å�¸è½½ï¼Ÿ It need to synchronize before operating the device,place wait! ئۈسكۈنىنى مەشغۇلات قىلىشتىن بۇرۇن ماس قەدەمدە ماس قەدەمدە ئىشلىشى ÙƒÛ�رەك، ئورۇن ساقلاپ تۇرۇڭ! The device has been mount successfully! بۇ ئۈسكۈنە ئوڭۇشلۇق قاچىلاندى! Data synchronization is complete,the device has been unmount successfully! سانلىق مەلۇمات ماس قەدەمدە تاماملاندى، ئۈسكۈنە مۇۋەپپەقىيەتلىك ئاخىرلاشتى! Error: %1 خاتالىق: Ùª1 Eject device failed, the reason may be that the device has been removed, etc. Unable to unmount it, you may need to close some programs, such as: GParted etc. ئۈزەلمىسىڭىز بەلكىم بەزى پروگراممىلارنى تاقاشىڭىز مۇمكىن، مەسىلەن: GParted قاتارلىقلار. %1 %1 Eject failed چىقىرىش مەغلۇپ بولدى Cancel å�–消 Eject Anyway 无论如何弹出 Warning دىققەت The device may not support the rename operation, rename failed! ئۈسكۈنە بەلكىم قايتا ئىسىم ئۆزگەرتىش مەشخۇلاتى قوللىماسلىقى مۇمكىن، قايتا ئىسىم بÛ�رىش مەغلۇپ بولدى! Message recipient disconnected from message bus without replying! log remote error peony-extensions/peony-extension-computer-view/computer-view/0000775000175000017500000000000015257160277023621 5ustar fengfengpeony-extensions/peony-extension-computer-view/computer-view/computer-volume-item.cpp0000664000175000017500000014156615257160277030441 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "computer-volume-item.h" #include #include //#include #ifndef KY_UDF_BURN #include #else #include using namespace UdfBurn; #endif #include #include #include #include #include #include "computer-model.h" #include "computer-proxy-model.h" #include "computer-user-share-item.h" #include #include #include #include #include #include #include #include #include #include #ifdef signals #undef signals #endif #ifdef KY_SDK_DISKINFO #include #endif #include ComputerVolumeItem::ComputerVolumeItem(GVolume *volume, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent) : AbstractComputerItem(model, parentNode, parent) { m_model->beginInsertItem(parentNode->itemIndex(), parentNode->m_children.count()); parentNode->m_children<itemType() != Volume) { m_displayName = tr("Volume"); m_model->endInsterItem(); return; } m_cancellable = g_cancellable_new(); if (!volume) { setProperty("isFileSystem", true); if (qApp->property("isSystemEncrypted").toBool()) { setProperty("emblemIconName", "emblem-unlocked"); } m_icon = QIcon::fromTheme("drive-harddisk-system"); m_uri = "file:///"; m_displayName = tr("System Disk"); auto file = g_file_new_for_uri("file:///"); g_file_query_filesystem_info_async(file, "*", 0, m_cancellable, GAsyncReadyCallback(query_root_info_async_callback), this); m_model->endInsterItem(); return; } m_volume = std::make_shared(volume, true); m_volumeChangedHandle = g_signal_connect(volume, "changed", G_CALLBACK(volume_changed_callback), this); m_volumeRemovedHandle = g_signal_connect(volume, "removed", G_CALLBACK(volume_removed_callback), this); m_volumeMonitor = g_volume_monitor_get(); m_mountChangedHandle = g_signal_connect(m_volumeMonitor, "mount_changed", G_CALLBACK(mount_changed_callback), this); m_mountAddedHandle = g_signal_connect(m_volumeMonitor, "mount_added", G_CALLBACK(mount_added_callback), this); updateInfoAsync(); m_model->endInsterItem(); } //ComputerVolumeItem::ComputerVolumeItem(const QString uri,ComputerModel *model,AbstractComputerItem *parentNode,QObject *parent) : AbstractComputerItem(model,parentNode,parent){ // if(uri.isNull() || uri.isEmpty()) // return; // //collectInfoWhenGpartedOpen(uri); //} ComputerVolumeItem::~ComputerVolumeItem() { if(m_volumeMonitor){ g_signal_handler_disconnect(g_volume_monitor_get(), m_mountChangedHandle); g_signal_handler_disconnect(g_volume_monitor_get(), m_mountAddedHandle); } if(m_volume){ g_signal_handler_disconnect(m_volume->getGVolume(), m_volumeChangedHandle); g_signal_handler_disconnect(m_volume->getGVolume(), m_volumeRemovedHandle); } g_cancellable_cancel(m_cancellable); g_object_unref(m_cancellable); if(m_watcher){ m_watcher->stopMonitor(); delete m_watcher; } } QString ComputerVolumeItem::getDevicePath(GVolume* volume) { char *deviceName; QString unixDeviceName; deviceName = g_volume_get_identifier(volume, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE); if(deviceName){ unixDeviceName = QString(deviceName); g_free(deviceName); } return unixDeviceName; } void ComputerVolumeItem::updateInfoAsync() { if (!m_volume) { m_icon = QIcon::fromTheme("drive-harddisk-system"); m_uri = "file:///"; m_displayName = tr("System Disk"); auto file = g_file_new_for_uri("file:///"); g_file_query_filesystem_info_async(file, "*", 0, m_cancellable, GAsyncReadyCallback(query_root_info_async_callback), this); return; } char *deviceName; m_displayName = m_volume->name(); //Handle the Chinese name of fat32 udisk. deviceName = g_volume_get_identifier(m_volume->getGVolume(),G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE); if(deviceName){ m_unixDeviceName = QString(deviceName); qDebug()<<"unix Device Name"<< m_unixDeviceName; Peony::FileUtils::handleVolumeLabelForFat32(m_displayName, m_unixDeviceName); g_free(deviceName); } //fix u-disk show as hard-disk icon issue, task#25343 updateBlockIcons(); //qDebug()<getGVolume()); if (mount) { m_mount = std::make_shared(mount, true); auto active_root = g_mount_get_root(mount); if (active_root) { auto uri = g_file_get_uri(active_root); if (uri) { m_uri = uri; g_free(uri); } if (m_uri == "file:///data") { if (Peony::FileUtils::isFileExsit("file:///data/usershare")) { m_isHidden = true; } } g_file_query_filesystem_info_async(active_root, "*", 0, m_cancellable, GAsyncReadyCallback(query_info_async_callback), this); g_object_unref(active_root); } } else { //m_mount = nullptr; //mount first //FIXME: check auto mount // this->mount(); } bool isData = false; Peony::GlobalFstabData *globalFstabData = Peony::GlobalFstabData::getInstance(); if(!globalFstabData->getUuidState()){ if(globalFstabData->isMountPoints(m_unixDeviceName.toUtf8(), "/data")){ isData = true; } }else{ if(globalFstabData->isMountPoints(getDeviceUUID(m_unixDeviceName.toUtf8()), "/data")){ isData = true; } } if(m_uri == "file:///data" || isData){ m_displayName = tr("Data"); } auto index = this->itemIndex(); m_model->dataChanged(index, index); m_model->invalidateRequest(); } const QString ComputerVolumeItem::displayName() { return m_displayName; } const QIcon ComputerVolumeItem::icon() { return m_icon.isNull()? AbstractComputerItem::icon(): m_icon; } bool ComputerVolumeItem::isMount() { return Peony::FileUtils::isMountPoint(m_uri); } void ComputerVolumeItem::findChildren() { //add root auto root = new ComputerVolumeItem(nullptr, m_model, this); //enumerate auto volume_monitor = g_volume_monitor_get(); auto current_volumes = g_volume_monitor_get_volumes(volume_monitor); GList *l = current_volumes; while (l) { auto volume = G_VOLUME(l->data); QString devicePath = getDevicePath(volume); if (!devicePath.isEmpty()) { bool isVfatLoop = IMAGE_MOUNT_MANAGER->isVfatPartition(devicePath); qDebug() << "findChildren()" << __LINE__ << devicePath << "isVfatLoop:" << isVfatLoop; if (isVfatLoop) { l = l->next; continue; } } auto item = new ComputerVolumeItem(volume, m_model, this); l = l->next; } //comment gparted process code to fix duplicated volume issue, bug#41623 // if(!current_volumes) // findChildrenWhenGPartedOpen(); //monitor auto volumeManager = Peony::VolumeManager::getInstance(); connect(volumeManager, &Peony::VolumeManager::volumeAdded, this, &ComputerVolumeItem::onVolumeAdded); //watcher // m_watcher = new Peony::FileWatcher("computer:///",this); // connect(m_watcher, &Peony::FileWatcher::fileCreated, this, &ComputerVolumeItem::onFileAdded); // connect(m_watcher, &Peony::FileWatcher::fileDeleted, this, &ComputerVolumeItem::onFileRemoved); // m_watcher->startMonitor(); if (Peony::FileUtils::isFileExsit("file:///data/usershare")) { new ComputerUserShareItem(nullptr, m_model, this); } } void ComputerVolumeItem::check() { if (!m_volume) return; auto active_root = g_volume_get_activation_root(m_volume->getGVolume()); if (active_root) { auto uri = g_file_get_uri(active_root); auto path = g_file_get_path(active_root); if (QString(uri) == "file:///data") { if (Peony::FileUtils::isFileExsit("file:///data/usershare")) { m_isHidden = true; } } //QMessageBox::information(0, 0, QString("%1 has active root %2").arg(m_displayName).arg(uri)); qDebug() << "ComputerVolumeItem uri:" <getGVolume()); if (nullptr != mount) { file = g_mount_get_root (mount); if (nullptr != file) { m_uri = g_file_get_uri(file); } } if (nullptr != file) { g_object_unref(file); } if (nullptr != mount) { g_object_unref (mount); } } } bool ComputerVolumeItem::canEject() { GVolume *gvolume; GDrive *gdrive; bool ejectAble = false; if("file:///" == m_uri || m_volume == nullptr) /*The root File System cannot eject*/ return false; if(NULL != m_volume->getGVolume()){ gvolume = (GVolume*)g_object_ref(m_volume->getGVolume()); gdrive = g_volume_get_drive(gvolume); if(gdrive){ //qDebug() <<"uri ejectAble:"<getGMount())) { if (g_mount_can_eject(g_mount) && !m_unixDeviceName.startsWith("/dev/sd")) {/* 由于è¦�显示异常U盘,U盘弹出用stop */ Peony::SyncThread::notifyUser(ejectNotify); g_mount_eject_with_operation(g_mount, ejectFlag, mount_op, m_cancellable, GAsyncReadyCallback(eject_async_callback), this); } else { auto g_drive = g_mount_get_drive(g_mount); if (!g_drive) return; if (g_drive_can_stop(g_drive)|| (g_drive_is_removable(g_drive) && !m_unixDeviceName.startsWith("/dev/mmc"))){// for mobile harddisk. /* 加"(g_drive_is_removable(m_drive) && !m_device.startsWith("/dev/mmc"))"这个判断是为了解决bug#184111å’Œbug#149182;有些U盘的can-stop为false,其中为一款sdå�¡çš„devicename */ Peony::SyncThread::notifyUser(ejectNotify); g_drive_stop(g_mount_get_drive(g_mount), ejectFlag, mount_op, nullptr, GAsyncReadyCallback(stop_async_callback), this);/*m_cancellable改为nullptr,linkto bug145072ã€�HWE】弹出æˆ�功å�Žæ��示æ“�作被å�–消 */ }else if(g_drive_is_removable(g_drive)){ //fix bug#141782, SD card eject can not recgonize issue g_mount_eject_with_operation(g_mount, ejectFlag, mount_op, m_cancellable, GAsyncReadyCallback(eject_async_callback), this); } g_object_unref(g_drive); } return; } /*If udisk device is unmounted,eject it from here*/ if (m_volume && (g_volume = m_volume->getGVolume())) { if (g_volume_can_eject(g_volume)) { Peony::SyncThread::notifyUser(ejectNotify); g_volume_eject_with_operation(g_volume, ejectFlag, mount_op, m_cancellable, GAsyncReadyCallback(eject_async_callback), this); } else { auto g_drive = g_mount_get_drive(g_mount); if (!g_drive) return; if (g_drive_can_stop(g_drive)){ Peony::SyncThread::notifyUser(ejectNotify); g_drive_stop(g_mount_get_drive(g_mount), ejectFlag, mount_op, nullptr, GAsyncReadyCallback(stop_async_callback), this);/*m_cancellable改为nullptr,linkto bug145072ã€�HWE】弹出æˆ�功å�Žæ��示æ“�作被å�–消 */ } g_object_unref(g_drive); } } } bool ComputerVolumeItem::canUnmount() { if(m_uri.endsWith(".mount") || m_uri.endsWith(".volume")) return true; if("file:///data" == m_uri) return false; return m_mount != nullptr; } bool ComputerVolumeItem::unMountIsoImage(GMount* gmount) { GVolume *g_volume = nullptr; bool result = false; g_volume = g_mount_get_volume(gmount); if(g_volume) { g_autofree char *device_identifier = g_volume_get_identifier(g_volume, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE); if (device_identifier) { QString devicePath = QString(device_identifier); if(devicePath.startsWith("/dev/loop") && !m_uri.contains("OfflineSource")) { result = IMAGE_MOUNT_MANAGER->unmountImage(devicePath); if (result) { qDebug() << QString("unmount successed, devicePath: %1").arg(devicePath); } else { qDebug() << QString("unmount failed, devicePath: %1").arg(devicePath); } } } g_object_unref(g_volume); } return result; } void ComputerVolumeItem::unmount(GMountUnmountFlags unmountFlag) { GMount *g_mount = nullptr; GFile *file = nullptr; GVolume *g_volume = nullptr; g_autoptr(GMountOperation) mount_op = g_mount_operation_new(); m_vfs_uri = m_model->m_volumeTargetMap.key(m_uri); QString unmountNotify = QObject::tr("It need to synchronize before operating the device,place wait!"); if (!m_vfs_uri.isEmpty()) { file = g_file_new_for_uri(m_vfs_uri.toUtf8().constData()); if(file){ Peony::SyncThread::notifyUser(unmountNotify); g_file_unmount_mountable_with_operation(file,unmountFlag, mount_op,nullptr, GAsyncReadyCallback(unmount_async_callback), this); } g_object_unref(file); } else if (m_mount && (g_mount = m_mount->getGMount())) { Peony::SyncThread::notifyUser(unmountNotify); if (unMountIsoImage(g_mount)) return; g_mount_unmount_with_operation(g_mount, unmountFlag, mount_op, m_cancellable, GAsyncReadyCallback(unmount_async_callback), this); } else if (!m_uri.isEmpty()) { file = g_file_new_for_uri(m_uri.toUtf8().constData()); if(file){ Peony::SyncThread::notifyUser(unmountNotify); g_file_unmount_mountable_with_operation(file,unmountFlag, mount_op,nullptr, GAsyncReadyCallback(unmount_async_callback), this); } g_object_unref(file); } } void ComputerVolumeItem::mount() { if (m_uri == "file:///") { return; } if (m_mount) { auto root = g_mount_get_root(m_mount->getGMount()); if (root) { auto uri = g_file_get_uri(root); if (uri) { m_uri = uri; g_free(uri); } g_file_query_filesystem_info_async(root, "*", 0, m_cancellable, GAsyncReadyCallback(query_info_async_callback), this); g_object_unref(root); } } else { auto volume = Experimental_Peony::Volume(m_volume->getGVolume()); volume.mount(); // g_autoptr (GMountOperation) op = g_mount_operation_new(); // g_volume_mount(m_volume->getGVolume(), // G_MOUNT_MOUNT_NONE, // op, // m_cancellable, // GAsyncReadyCallback(mount_async_callback), // this); } } QModelIndex ComputerVolumeItem::itemIndex() { if (!m_parentNode) { return m_model->createItemIndex(0, this); } else { return m_model->createItemIndex(m_parentNode->m_children.indexOf(this), this); } } bool ComputerVolumeItem::isHidden() { return m_isHidden; } QString ComputerVolumeItem::getDeviceUUID(const char *device) { struct stat statbuf; if (stat (device, &statbuf) != 0) { return nullptr; } g_autoptr(UDisksClient) client = udisks_client_new_sync (NULL,NULL); g_autoptr(UDisksBlock) block = udisks_client_get_block_for_dev(client, statbuf.st_rdev); if (!block) return nullptr; const gchar *uuid = udisks_block_get_id_uuid(block); return uuid; } void ComputerVolumeItem::volume_changed_callback(GVolume *volume, ComputerVolumeItem *p_this) { //QMessageBox::information(0, 0, tr("Volume Changed")); if(!p_this) return; p_this->m_mount = nullptr; p_this->m_uri = nullptr; p_this->m_icon = QIcon(); p_this->m_displayName = nullptr; p_this->m_usedSpace = 0; p_this->m_totalSpace = 0; p_this->updateInfo(); } void ComputerVolumeItem::volume_removed_callback(GVolume *volume, ComputerVolumeItem *p_this) { auto parentNode = p_this->m_parentNode; if (!parentNode) return; auto row = parentNode->m_children.indexOf(p_this); parentNode->m_model->beginRemoveItem(parentNode->itemIndex(), row); parentNode->m_children.removeAt(row); p_this->deleteLater(); parentNode->m_model->endRemoveItem(); } void ComputerVolumeItem::mount_changed_callback(GVolumeMonitor *volumeMonitor, GMount *gmount, ComputerVolumeItem *p_this) { if (p_this){ p_this->m_usedSpace = 0; p_this->m_totalSpace = 0; p_this->updateInfo(); qDebug()<<"mount changed uri: "<uri()<m_unixDeviceName<m_bMtpQueryInfoFailed; /* hotfix bug#247327 ã€�文件管ç�†å™¨ã€‘使用USB连接å°�ç±³/红米手机,选择传输文件å�Žï¼Œè®¡ç®—机界é�¢ä¸�显示总容é‡�和已用容é‡� * hotfix bug#260993 ã€�文件管ç�†å™¨ã€‘从任务æ �打开文件管ç�†å™¨-计算机,使用USB连接å°�米手机,选择传输文件å�Žï¼Œè®¡ç®—机界é�¢ä¸�显示总容é‡�和已用容é‡� */ if(p_this && p_this->m_unixDeviceName.startsWith("/dev/bus/usb")){ if(p_this->m_totalSpace > 0){ return; } qDebug()<<"mtp mount changed"<m_unixDeviceName<uri(); p_this->m_bMtpQueryInfoFailed = true; p_this->updateInfo(); }//end } } void ComputerVolumeItem::mount_added_callback(GVolumeMonitor *volumeMonitor, GMount *gmount, ComputerVolumeItem *p_this) { if (p_this){ p_this->updateInfo(); qDebug()<<"mount added uri: "<uri(); } } QString iconFileFromMountpoint(const QString& mountpoint){ bool isReadOnly; QDir mountDir; QString iconPath; GUnixMountEntry* entry; if(mountpoint.isEmpty()) return iconPath; entry = g_unix_mount_for(mountpoint.mid(7).toUtf8().constData(),NULL); if(entry){ isReadOnly = g_unix_mount_is_readonly(entry); g_unix_mount_free(entry); if(!isReadOnly)//is not a boot disk return iconPath; } mountDir.setPath(mountpoint.mid(7));//remove 'file://' if(mountDir.exists()){ QStringList filters; filters << "*.ico"; mountDir.setNameFilters(filters); QFileInfoList list = mountDir.entryInfoList(); if(0 != list.length()) iconPath = list.at(0).absoluteFilePath(); } return iconPath; } bool isMountReadOnly(const QString& mountpoint) { bool isReadOnly = false; GUnixMountEntry* entry; if(mountpoint.isEmpty() || mountpoint.length() < 8) return false; entry = g_unix_mount_for(mountpoint.mid(7).toUtf8().constData(),NULL); if(entry){ isReadOnly = g_unix_mount_is_readonly(entry); g_unix_mount_free(entry); } qDebug() << "isMountReadOnly:"<m_unixDeviceName.startsWith("/dev/bus/usb") && p_this->m_bMtpQueryInfoFailed){ p_this->m_bMtpQueryInfoFailed = false; }//end char *fs_type = g_file_info_get_attribute_as_string(info, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE); QString fsType(fs_type); /* *由于对DVD+RW或者是DVD-RW类型的光盘,无法通过cdromdata类获å�–到使用的容é‡�,所以使用的容é‡�统一使用gio函数获å�– */ quint64 used = g_file_info_get_attribute_uint64(info, G_FILE_ATTRIBUTE_FILESYSTEM_USED); bool bNotDisk = true; //ignore disk update when the disk deviece is busy,related to bug#143293 if (p_this->m_unixDeviceName.startsWith("/dev/sr") && ! Peony::FileUtils::isBusyDevice(p_this->m_unixDeviceName)) { #ifdef KY_UDF_BURN UdfBurn::DataCDROM *cdrom = new UdfBurn::DataCDROM(p_this->m_unixDeviceName); #else Peony::DataCDROM *cdrom = new Peony::DataCDROM(p_this->m_unixDeviceName); #endif if (cdrom) { cdrom->getCDROMInfo(); //p_this->m_usedSpace = used; //used无法正确获å�–追加刻录å�Žå…‰ç›˜çš„使用容é‡�,getCDROMUsedCapacity()无法获å�–å�¯æ“¦é™¤å…‰ç›˜çš„使用容é‡� p_this->m_usedSpace = cdrom->getCDROMUsedCapacity(); if((cdrom->getCDROMType()).contains("DVD+RW") || (cdrom->getCDROMType()).contains("DVD-RW")){ if(fsType.toLower().startsWith("iso")){/* "iso9660"文件系统类型"DVD+RW"å’Œ"DVD-RW"光盘的使用容é‡�从libkyudfburn中获å�–,link bug#271455. */ p_this->m_usedSpace = cdrom->getCDROMUsedCapacity(); }else{ p_this->m_usedSpace = used; } } #ifdef KY_SDK_DISKINFO // p_this->m_totalSpace = kdk_udf_get_cdrom_capacity(p_this->m_unixDeviceName.toUtf8().constData()); // p_this->m_usedSpace = kdk_udf_get_cdrom_used_capacity(p_this->m_unixDeviceName.toUtf8().constData()); #else p_this->m_totalSpace = cdrom->getCDROMCapacity(); #endif delete cdrom; cdrom = nullptr; bNotDisk = false; } } //fix block not update volume issue, link to bug#63326 if (bNotDisk || 0 == p_this->m_totalSpace) { quint64 total = g_file_info_get_attribute_uint64(info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE); quint64 free = g_file_info_get_attribute_uint64(info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE); #ifdef KY_SDK_DISKINFO if (!p_this->m_unixDeviceName.isNull() && !p_this->m_unixDeviceName.isEmpty()) { char *tmpTotalSize = kdk_get_hard_disk_size(p_this->m_unixDeviceName.toUtf8().constData()); if (tmpTotalSize) { quint64 totalSize = atoi(tmpTotalSize); std::free(tmpTotalSize); quint64 freeSize = kdk_get_partition_available_space(p_this->m_unixDeviceName.toUtf8().constData()); if (totalSize > 0 && freeSize > 0) { totalSize = totalSize * 1024 * 1024; freeSize = freeSize * 1024 * 1024; total = totalSize; free = freeSize; } } } #endif if (total > 0 && (used > 0 || free > 0)) { if (used > 0 && used <= total) { p_this->m_usedSpace = used; p_this->m_totalSpace = total; } else if(free > 0 && free <= total) { p_this->m_usedSpace = total - free; p_this->m_totalSpace = total; } p_this->updateBlockIcons(); } if (fsType.contains("ext")) { p_this->m_usedSpace = total - free; } } qWarning()<<"udisk name"<m_volume->name(); qWarning()<<"udisk used space"<m_usedSpace; qWarning()<<"udisk total space"<m_totalSpace; /***************************collect info when gparted open*************************/ // if(p_this->m_icon.name().isEmpty()){ // QString iconName = Peony::FileUtils::getFileIconName(p_this->m_uri); // if(iconName.isNull()) /*Some startup disks cannot get the icon*/ // iconName = "drive-harddisk-usb"; // p_this->m_icon = QIcon::fromTheme(iconName); // } // if(p_this->m_displayName.isEmpty()){ // p_this->m_displayName = Peony::FileUtils::getFileDisplayName(p_this->m_uri); // if(!p_this->m_targetUri.isEmpty()){ // char *realMountPoint = g_filename_from_uri(p_this->m_targetUri.toUtf8().constData(),NULL,NULL); // const char *unixDev = Peony::VolumeManager::getUnixDeviceFileFromMountPoint(realMountPoint); // QString unixDeviceName = unixDev; // Peony::FileUtils::handleVolumeLabelForFat32(p_this->m_displayName,unixDeviceName); // g_free(realMountPoint); // } // } /**********************************************************************************/ auto index = p_this->itemIndex(); p_this->m_model->dataChanged(index, index); //p_this->m_model->dataChanged(p_this->itemIndex(), p_this->itemIndex()); g_object_unref(info); } if (err) { /* related bug(304129ã€�247327ã€�260993) */ qDebug()<<"Fail to query filesystem info,error code:"<code<<", error message:"<message; if ((err->code == G_IO_ERROR_CANCELLED) && (QString(err->message).startsWith("No such interface"))) { if(p_this && p_this->m_bMtpQueryInfoFailed && p_this->m_unixDeviceName.startsWith("/dev/bus/usb")){ qDebug()<<"Failure in query mobile phone information, retrying."; p_this->updateInfoAsync(); } }//end if g_error_free(err); } } void ComputerVolumeItem::query_root_info_async_callback(GFile *file, GAsyncResult *res, ComputerVolumeItem *p_this) { GError *err = nullptr; GFileInfo *info = g_file_query_info_finish(file, res, &err); if (info) { quint64 total = g_file_info_get_attribute_uint64(info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE); quint64 used = g_file_info_get_attribute_uint64(info, G_FILE_ATTRIBUTE_FILESYSTEM_USED); quint64 available = g_file_info_get_attribute_uint64(info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE); QString unixDevice = getRootUnixDevice(p_this->uri().split("file://").last()); #ifdef KY_SDK_DISKINFO if (!unixDevice.isNull() && !unixDevice.isEmpty()) { char *tmpTotalSize = kdk_get_hard_disk_size(unixDevice.toUtf8().constData()); if (tmpTotalSize) { quint64 totalSize = atoi(tmpTotalSize); free(tmpTotalSize); quint64 freeSize = kdk_get_partition_available_space(unixDevice.toUtf8().constData()); if (totalSize > 0 && freeSize > 0) { totalSize = totalSize * 1024 * 1024; freeSize = freeSize * 1024 * 1024; total = totalSize; available = freeSize; } } } #endif char *fs_type = g_file_info_get_attribute_as_string(info, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE); QString type(fs_type); if(type.contains("ext")) { used = total - available; } p_this->m_totalSpace = total; p_this->m_usedSpace = used; auto index = p_this->itemIndex(); p_this->m_model->dataChanged(index, index); //p_this->m_model->dataChanged(p_this->itemIndex(), p_this->itemIndex()); g_object_unref(info); } if (err) { //QMessageBox::critical(0, 0, err->message); g_error_free(err); } } void ComputerVolumeItem::mount_async_callback(GVolume *volume, GAsyncResult *res, ComputerVolumeItem *p_this) { GError *err = nullptr; bool successed = g_volume_mount_finish(volume, res, &err); if (err) { //QMessageBox::critical(0, 0, err->message); if (g_error_matches(err, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED)) { Experimental_Peony::Volume v(volume); v.mount(); } g_error_free(err); } if (successed) { QString unmountNotify = QObject::tr("The device has been mount successfully!"); Peony::SyncThread::notifyUser(unmountNotify); p_this->updateInfoAsync(); } } void ComputerVolumeItem::unmount_async_callback(GObject* object,GAsyncResult *res,ComputerVolumeItem *p_this) { GError *err = nullptr; QString errorMsg; bool successed; if(G_IS_MOUNT(object)){ if(successed) p_this->m_mount = nullptr; successed = g_mount_unmount_with_operation_finish(G_MOUNT(object),res,&err); }else if(G_IS_FILE(object)){ successed = g_file_unmount_mountable_with_operation_finish(G_FILE(object),res,&err); } if(successed){ QString unmountNotify = QObject::tr("Data synchronization is complete,the device has been unmount successfully!"); Peony::SyncThread::notifyUser(unmountNotify); // 检查是å�¦éœ€è¦�继续执行完整的弹出æ“�作(针对加密设备) if (p_this->property("pendingFullEject").toBool()) { qDebug() << "unmount_async_callback: Continuing with full device ejection after unmounting encrypted volume"; p_this->setProperty("pendingFullEject", false); // 获å�–之å‰�ä¿�存的ejection flags GMountUnmountFlags ejectFlag = static_cast( p_this->property("ejectionFlags").toInt()); // 延迟一点时间让系统完æˆ�å�¸è½½æ“�作 QTimer::singleShot(100, [p_this, ejectFlag]() { p_this->eject(ejectFlag); }); } } if(err){ errorMsg = err->message; if(strstr(err->message,"target is busy")){ errorMsg = QObject::tr("One or more programs prevented the unmount operation."); QMessageBox::warning(nullptr, QObject::tr("Unmount failed"), QObject::tr("Error: %1\n").arg(errorMsg), QMessageBox::Yes); }else if(strstr(err->message,"umount: /media/")){ //chinese name need to be converted,this may be a error that from glib2/gio2. errorMsg = QObject::tr("Unable to unmount it, you may need to close some programs, such as: GParted etc."); QMessageBox::warning(nullptr, QObject::tr("Unmount failed"), QObject::tr("%1").arg(errorMsg), QMessageBox::Yes); } else if (err->code == G_IO_ERROR_PERMISSION_DENIED || errorMsg.contains("authorized", Qt::CaseInsensitive)) { // do nothing because we have requested polkit dialog yet. } else { QMessageBox::warning(nullptr, QObject::tr("Unmount failed"), QObject::tr("Error: %1\n").arg(err->message), QMessageBox::Yes); } g_error_free(err); } } void ComputerVolumeItem::eject_async_callback(GObject *object, GAsyncResult *res, ComputerVolumeItem *p_this) { GError *err = nullptr; bool successed; if(G_IS_MOUNT(object)) successed = g_mount_eject_with_operation_finish(G_MOUNT(object), res, &err); else if(G_IS_VOLUME(object)) successed = g_volume_eject_with_operation_finish(G_VOLUME(object), res, &err); if (successed) { //QMessageBox::information(0, 0, "Volume Ejected"); QString unmountNotify = QObject::tr("Data synchronization is complete,the device has been unmount successfully!"); Peony::SyncThread::notifyUser(unmountNotify); } if (err) { qDebug()<<"error code of drive stop:"<code<<", error message:"<message; QString errMsg = err->message; if (!errMsg.contains("authorized", Qt::CaseInsensitive)) { //fix bug#104482, pull device immediately when eject it, error message not translated issue if (err->code == G_IO_ERROR_FAILED){ errMsg = QObject::tr("Eject device failed, the reason may be that the device has been removed, etc."); } QMessageBox warningBox(QMessageBox::Warning, QObject::tr("Eject failed"), errMsg, QMessageBox::Ok); warningBox.exec(); } g_error_free(err); } } void ComputerVolumeItem::stop_async_callback(GDrive *drive, GAsyncResult *res, ComputerVolumeItem *p_this) { GError *err = nullptr; bool successed; successed = g_drive_stop_finish(drive, res, &err); if (!successed) { qDebug()<<"error code of drive stop:"<code<<", error message:"<message; if(!strcmp(err->message, "Not authorized to perform operation")){/* gmountOperation会弹出授æ�ƒæ¡†ï¼Œé˜²æ­¢äºŒæ¬¡å¼¹æ¡†,linkto bug#101075 */ g_error_free(err); return; } //fix bug#104482, pull device immediately when eject it, error message not translated issue QString errMessage = err->message; if (err->code == G_IO_ERROR_FAILED){ errMessage = QObject::tr("Eject device failed, the reason may be that the device has been removed, etc."); } QMessageBox warningBox(QMessageBox::Warning, QObject::tr("Eject failed"), errMessage, QMessageBox::Ok); warningBox.exec(); g_error_free(err); } else { QString ejectNotify = QObject::tr("Data synchronization is complete,the device has been unmount successfully!"); Peony::SyncThread::notifyUser(ejectNotify); } } void ComputerVolumeItem::onVolumeAdded(const std::shared_ptr volume) { auto g_volume = volume->getGVolume(); QString devicePath = getDevicePath(g_volume); if (!devicePath.isEmpty()) { bool isVfatLoop = IMAGE_MOUNT_MANAGER->isVfatPartition(devicePath); qDebug() << "onVolumeAdded" << __LINE__ << devicePath << "isVfatLoop:" << isVfatLoop; if (isVfatLoop) { return; } } if (Peony::FileUtils::isMountMatchFstab(g_volume, "/backup")) { return; } auto item = new ComputerVolumeItem(g_volume, m_model, this); } /* * æ ¹æ�®å��馈的bugå�šé€»è¾‘调整: * 1.默认使用 m_volume->iconName() 图标; * 2.å�ªè¯»ç³»ç»Ÿï¼Œç³»ç»Ÿç›˜ä¼˜å…ˆä½¿ç”¨gmount icon,关è�”bug#120459(删掉第二æ�¡ï¼Œç³»ç»Ÿç›˜å›¾æ ‡ä¸�特殊处ç�†ï¼Œä¸�使用gmount icon,linkto bug#174770) * 3.需è¦�区分部分型å�·çš„U盘显示æˆ�移动硬盘图标问题,关è�”bug#182809, #57660, #70014 #96652 * 4.在Windows系统使用工具,比如软碟通制作的系统盘,ä¸�是å�ªè¯»æ ¼å¼�,获å�–iconNameå�Žç¼€å¸¦'.ico'å�šåˆ¤æ–­ * */ void ComputerVolumeItem::updateBlockIcons() { //qDebug() << "updateBlockIcons volume icon:"<iconName()<iconName()); // 显示加密分区角标 GVolume *volume = m_volume->getGVolume(); if (volume) { g_autoptr (GIcon) volumeIcon = g_volume_get_icon(volume); if (G_IS_EMBLEMED_ICON(volumeIcon)) { GEmblemedIcon *emblemedIcon = G_EMBLEMED_ICON (volumeIcon); GList *l = g_emblemed_icon_get_emblems(emblemedIcon); if (g_list_length (l) > 0) { GEmblem *emblem = G_EMBLEM (l->data); GIcon *emblemIcon = g_emblem_get_icon(emblem); QString emblemIconName = Peony::FileUtils::getIconStringFromGIcon(emblemIcon); setProperty("emblemIconName", emblemIconName); } else { setProperty("emblemIconName", QVariant()); } } else { setProperty("emblemIconName", QVariant()); } } GDrive* gdrive = g_volume_get_drive(m_volume->getGVolume()); QString tmpDevice; if(gdrive){ g_autofree char* gdevice = g_drive_get_identifier(gdrive, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE); tmpDevice = gdevice; g_object_unref(gdrive); } //iso image files are mounted on loop devices, always use the "media-optical" icon, link to #358341 if (m_unixDeviceName.startsWith("/dev/loop")) { m_icon = QIcon::fromTheme("media-optical"); return; } if(tmpDevice.startsWith("/dev/sr") && m_volume->iconName().startsWith("media-optical")){/* 规范光盘图标,与竞å“�对比,光盘图标使用的是"media-optical",linkto bug#174770ã€�#120459 */ m_icon = QIcon::fromTheme("media-optical"); return; } //fix bug#182809, U disk show mobile-SSD icon issue, only readonly device use gmount icon if (m_volume->iconName() == "drive-harddisk-usb"){ //用设备容é‡�区分U盘和移动硬盘,大于128GiB为移动硬盘 //FIXME with a better solution, fix bug#57660, #70014 #96652 double size = 0.0; if(!tmpDevice.isEmpty()){ size = Peony::FileUtils::getDeviceSize(tmpDevice.toUtf8().constData()); } if (m_totalSpace/(1024 * 1024 *1024) > 128 || size > 128) m_icon = QIcon::fromTheme("drive-harddisk-usb"); else m_icon = QIcon::fromTheme("drive-removable-media-usb"); } } /* Usage scenarios: * -> open Peony first,then open Gparted. * -> when computer:///xxx.mount or computer:///xxx.volume is generated, * it will query their information from here. */ //comment gparted process code to fix duplicated volume issue, bug#41623 //void ComputerVolumeItem::collectInfoWhenGpartedOpen(QString uri) //{ // GFile *file = NULL; // m_uri = uri; // m_displayName = ""; // m_icon = QIcon(); // m_cancellable = g_cancellable_new(); // m_targetUri = Peony::FileUtils::getTargetUri(m_uri); // file = g_file_new_for_uri(m_targetUri.toUtf8().constData()); // g_file_query_filesystem_info_async(file,"*",0, // m_cancellable, // GAsyncReadyCallback(qeury_info_async_callback),this); // g_object_unref(file); //} /* monitor file generation for computer:///xxx.mount or computer:///xxx.volume */ //void ComputerVolumeItem::onFileAdded(const QString &uri) //{ // QString targetUri = Peony::FileUtils::getTargetUri(uri); // if(!targetUri.contains("file:///") || targetUri.isEmpty()) // return; // for (auto item : m_children) { // qDebug() << "ComputerVolumeItem onFileAdded uri:"<uri(); // if (item->uri() == uri) // return; // } // m_model->beginInsertItem(itemIndex(), m_children.count()); // auto item = new ComputerVolumeItem(uri, m_model, this); // m_children<endInsterItem(); //} //void ComputerVolumeItem::onFileRemoved(const QString &uri) //{ // int row = -1; // for (auto item : m_children) { // qDebug() << "ComputerVolumeItem onFileRemoved uri:"<uri(); // if (item->uri() == uri) { // row = m_children.indexOf(item); // break; // } // } // if (row < 0) // return; // m_model->beginRemoveItem(itemIndex(), row); // auto item = m_children.takeAt(row); // item->deleteLater(); // m_model->endRemoveItem(); //} /* Usage scenarios: * -> open Gparted first,then open Peony. * -> when Gparted is open,it is used to find all partition devices * except the root partition. */ //void ComputerVolumeItem::findChildrenWhenGPartedOpen() //{ // GFile *file; // file = g_file_new_for_uri("computer:///"); // m_tmpCancellable = g_cancellable_new(); // g_file_enumerate_children_async(file, G_FILE_ATTRIBUTE_STANDARD_NAME, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, 0, // m_tmpCancellable, GAsyncReadyCallback(enumerate_async_callback), this); // //g_object_unref(file); //} //void ComputerVolumeItem::enumerate_async_callback(GFile *file, GAsyncResult *res, ComputerVolumeItem *p_this) //{ // GError *err = nullptr; // auto enumerator = g_file_enumerate_children_finish(file, res, &err); // if (enumerator) { // g_file_enumerator_next_files_async(enumerator, 9999, 0, p_this->m_tmpCancellable, // GAsyncReadyCallback(find_children_async_callback), p_this); // } // if (err) // g_error_free(err); //} //void ComputerVolumeItem::find_children_async_callback(GFileEnumerator *enumerator, GAsyncResult *res, ComputerVolumeItem *p_this) //{ // GError *err = nullptr; // auto infos = g_file_enumerator_next_files_finish(enumerator, res, &err); // GList *l = infos; // while (l) { // auto info = G_FILE_INFO(l->data); // l = l->next; // if (!info) // continue; // auto file = g_file_enumerator_get_child(enumerator, info); // if (!file) // continue; // auto uri = g_file_get_uri(file); // if (!uri) // continue; // //not include ftp://xxx etc. // QString targetUri; // targetUri = Peony::FileUtils::getTargetUri(uri); // if(targetUri.isEmpty()) // continue; // if("file:///" == targetUri) // continue; // if(!targetUri.contains("file:///")) // continue; // p_this->m_model->beginInsertItem(p_this->itemIndex(), p_this->m_children.count()); // auto item = new ComputerVolumeItem(uri, p_this->m_model, p_this); // qDebug() << "find_children_async_callback uri:" <m_children<m_model->endInsterItem(); // g_free(uri); // g_object_unref(file); // } // if (infos) // g_list_free_full(infos, g_object_unref); // if (enumerator) { // g_file_enumerator_close(enumerator, nullptr, nullptr); // g_object_unref(enumerator); // } // if(p_this->m_tmpCancellable){ // g_cancellable_cancel(p_this->m_tmpCancellable); // g_object_unref(p_this->m_tmpCancellable); // } // if (err) { // g_error_free(err); // } //} quint64 calcVolumeCapacity(ComputerVolumeItem* pThis) { char* tmpDevice; GVolume* gVolume; quint64 capacityBytes; QString unixDevice,dbusPath; if(!pThis->m_mount && pThis->m_targetUri.isEmpty()) return 0; if(pThis->m_mount){ if(gVolume = pThis->m_volume->getGVolume()){ tmpDevice = g_volume_get_identifier(gVolume,G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE); if (tmpDevice) { unixDevice = QString(tmpDevice+5); //fix crash issue if (tmpDevice) g_free(tmpDevice); } else { unixDevice = Peony::FileUtils::getUnixDevice(pThis->m_uri); unixDevice = unixDevice.section('/',-1); } } }else{ unixDevice = Peony::FileUtils::getUnixDevice(pThis->m_uri); unixDevice = unixDevice.section('/',-1); } if (unixDevice.isEmpty()) { return 0; } dbusPath = "/org/freedesktop/UDisks2/block_devices/" + unixDevice; QDBusInterface blockInterface("org.freedesktop.UDisks2", dbusPath, "org.freedesktop.UDisks2.Block", QDBusConnection::systemBus()); capacityBytes = 0; if(blockInterface.isValid()) capacityBytes = blockInterface.property("Size").toULongLong(); return capacityBytes; } bool ComputerVolumeItem::tryStopDrive(GMountUnmountFlags ejectFlag, GMountOperation *mount_op) { bool stopped = false; qDebug() << "tryStopDrive: Starting for device" << m_unixDeviceName << "uri:" << m_uri; if (m_unixDeviceName.startsWith("/dev/sr")) { return false; } // 检查是å�¦ä¸ºåŠ å¯†è®¾å¤‡ bool isEncryptedAndMounted = false; if ((m_unixDeviceName.startsWith("/dev/dm-") || m_unixDeviceName.contains("dm-"))) { isEncryptedAndMounted = true; qDebug() << "tryStopDrive: Detected mounted encrypted device (dm device)"; } // 对于已挂载的加密设备,先å�¸è½½ if (isEncryptedAndMounted) { qDebug() << "tryStopDrive: Attempting to unmount encrypted volume first"; // 设置属性,以便在å�¸è½½å›žè°ƒä¸­ç»§ç»­å®Œæ•´å¼¹å‡ºæµ�程 setProperty("pendingFullEject", true); setProperty("ejectionFlags", static_cast(ejectFlag)); unmount(ejectFlag); return true; } // å°�试从mount获å�–drive GDrive *g_drive = nullptr; if (m_mount && m_mount->getGMount()) { g_drive = g_mount_get_drive(m_mount->getGMount()); qDebug() << "tryStopDrive: Got drive from mount:" << (g_drive ? "yes" : "no"); } else { qDebug() << "tryStopDrive: No valid mount available"; } if (!g_drive && m_volume && m_volume->getGVolume()) { g_drive = g_volume_get_drive(m_volume->getGVolume()); qDebug() << "tryStopDrive: Got drive from volume:" << (g_drive ? "yes" : "no"); } else if (!m_volume) { qDebug() << "tryStopDrive: No valid volume available"; } if (g_drive) { bool can_stop = g_drive_can_stop(g_drive); bool is_removable = g_drive_is_removable(g_drive); bool is_mmc = m_unixDeviceName.startsWith("/dev/mmc"); qDebug() << "tryStopDrive: Drive capabilities - can_stop:" << can_stop << "is_removable:" << is_removable << "is_mmc:" << is_mmc; char *drive_name = g_drive_get_name(g_drive); qDebug() << "tryStopDrive: Drive name:" << (drive_name ? drive_name : "unknown"); if (drive_name) g_free(drive_name); qDebug() << "tryStopDrive: Has media:" << g_drive_has_media(g_drive) << "Is media removable:" << g_drive_is_media_removable(g_drive); if (can_stop || (is_removable && !is_mmc)) { qDebug() << "tryStopDrive: Attempting to stop drive"; QString ejectNotify = QObject::tr("It need to synchronize before operating the device,place wait!"); Peony::SyncThread::notifyUser(ejectNotify); g_drive_stop(g_drive, ejectFlag, mount_op, nullptr, GAsyncReadyCallback(stop_async_callback), this); stopped = true; qDebug() << "tryStopDrive: Stop operation initiated"; } else { qDebug() << "tryStopDrive: Drive cannot be stopped with current conditions"; } } else { qDebug() << "tryStopDrive: No drive found for device" << m_unixDeviceName; } if (g_drive) { g_object_unref(g_drive); } qDebug() << "tryStopDrive: Result for" << m_unixDeviceName << ":" << (stopped ? "stop attempted" : "no action taken"); return stopped; } peony-extensions/peony-extension-computer-view/computer-view/computer-remote-volume-item.h0000664000175000017500000000464115257160264031363 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef COMPUTERREMOTEVOLUMEITEM_H #define COMPUTERREMOTEVOLUMEITEM_H #include #include #include "abstract-computer-item.h" class ComputerRemoteVolumeItem : public AbstractComputerItem { Q_OBJECT public: explicit ComputerRemoteVolumeItem(const QString &uri, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent = nullptr); ~ComputerRemoteVolumeItem(); Type itemType() override {return RemoteVolume;} const QString uri() override {return m_uri;} const QString displayName() override; const QIcon icon() override; void findChildren() override; void updateInfo() override; bool canUnmount() override {return true;} void unmount(GMountUnmountFlags unmountFlag) override; QModelIndex itemIndex() override; bool isHidden() override; public: void onFileAdded(const QString &uri); void onFileRemoved(const QString &uri); void onFileChanged(const QString &uri); protected: //enumeration static void enumerate_async_callback(GFile *file, GAsyncResult *res, ComputerRemoteVolumeItem *p_this); static void find_children_async_callback(GFileEnumerator *enumerator, GAsyncResult *res, ComputerRemoteVolumeItem *p_this); //info static void query_info_async_callback(GFile *file, GAsyncResult *res, ComputerRemoteVolumeItem *p_this); //monitor private: QString m_uri; GCancellable *m_cancellable = nullptr; bool m_isUnixDevice = false; bool m_isHidden = true; QString m_displayName; QIcon m_icon; Peony::FileWatcher *m_watcher = nullptr; }; #endif // COMPUTERREMOTEVOLUMEITEM_H peony-extensions/peony-extension-computer-view/computer-view/computer-proxy-model.cpp0000664000175000017500000001733015257160277030444 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "computer-proxy-model.h" #include "computer-model.h" #include "abstract-computer-item.h" #include #include #include #include #include static ComputerProxyModel *global_instance = nullptr; static bool getRawDeviceIsEncrypted(const QString &mapperDevice) { if (mapperDevice.startsWith("/dev/dm") || mapperDevice.startsWith("/dev/mapper")) { g_autoptr (GUdevClient) client = g_udev_client_new(nullptr); g_return_val_if_fail(client, false); g_autoptr (GUdevDevice) device = g_udev_client_query_by_device_file(client, mapperDevice.toLocal8Bit().constData()); g_return_val_if_fail(device, false); QString sysfsPath = g_udev_device_get_sysfs_path(device); QString rawDeviceLinkDirPath = sysfsPath + "/slaves"; QDir dir(rawDeviceLinkDirPath); auto results = dir.entryList(QDir::NoDotAndDotDot|QDir::AllEntries); if (!results.isEmpty()) { QString result = results.first(); if (!result.startsWith("dm")) { result.prepend("/dev/"); g_autoptr (GUdevDevice) rootDevice = g_udev_client_query_by_device_file(client, result.toLocal8Bit().constData()); QString fsUsage = g_udev_device_get_property(rootDevice, "ID_FS_USAGE"); if (fsUsage.contains("crypto")) { return true; } else { return false; } } else { qWarning() << "failed to get raw device file for" << result; result.prepend("/dev/"); if (result != mapperDevice) { // 处ç�†åµŒå¥—映射场景,如加密分区套lvm逻辑å�·çš„场景,关è�”bug# return getRawDeviceIsEncrypted(result); } return false; } } return false; } else { return false; } } ComputerProxyModel::ComputerProxyModel(QObject *parent) : QSortFilterProxyModel(parent) { auto systemMount = g_unix_mount_at("/", nullptr); if (systemMount) { QString devPath = g_unix_mount_get_device_path(systemMount); if (devPath.startsWith("/dev/mapper")) { bool isSystemEncrypted = getRawDeviceIsEncrypted(devPath); qApp->setProperty("isSystemEncrypted", isSystemEncrypted); } } auto dataMount = g_unix_mount_at("/data", nullptr); if (dataMount) { QString devPath = g_unix_mount_get_device_path(dataMount); if (devPath.startsWith("/dev/mapper")) { bool isDataEncrypted = getRawDeviceIsEncrypted(devPath); qApp->setProperty("isDataEncrypted", isDataEncrypted); } } setDynamicSortFilter(true); auto computerModel = new ComputerModel(this); m_model = computerModel; setSourceModel(computerModel); m_locale = QLocale(QLocale::system().name()); m_collator = QCollator(m_locale); m_collator.setNumericMode(true); connect(m_model, &ComputerModel::updateLocationRequest, this, &ComputerProxyModel::updateLocationRequest); connect(m_model, &ComputerModel::invalidateRequest, this, &ComputerProxyModel::invalidateFilter); connect(m_model, &ComputerModel::updateRequest, this, &ComputerProxyModel::updateRequest); } ComputerProxyModel *ComputerProxyModel::globalInstance() { if (!global_instance) { global_instance = new ComputerProxyModel; } return global_instance; } AbstractComputerItem *ComputerProxyModel::itemFromIndex(const QModelIndex &proxyIndex) { auto index = mapToSource(proxyIndex); return static_cast(index.internalPointer()); } QString ComputerProxyModel::tryGetVolumeUriFromMountTarget(const QString &mountTargetUri) { return m_model->tryGetVolumeUriFromMountRoot(mountTargetUri); } QString ComputerProxyModel::tryGetVolumeRealUriFromUri(const QString &uri) { return m_model->tryGetVolumeRealUriFromUri(uri); } void ComputerProxyModel::refresh() { m_model->refresh(); } bool ComputerProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { auto item = static_cast(m_model->index(source_row, 0, source_parent).internalPointer()); return !item->isHidden(); } bool ComputerProxyModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const { if (!source_left.parent().isValid() && source_right.parent().isValid()) { return sortOrder() == Qt::AscendingOrder ? false : true; } if (!(source_left.isValid() && source_right.isValid())) { return QSortFilterProxyModel::lessThan(source_left, source_right); } auto leftItem = static_cast(source_left.internalPointer()); auto rightItem = static_cast(source_right.internalPointer()); if (leftItem->itemType() != AbstractComputerItem::Volume || rightItem->itemType() != AbstractComputerItem::Volume) { return false; } if (leftItem->uri().compare("file:///") == 0) { return true; } if (rightItem->uri().compare("file:///") == 0) { return false; } if (leftItem->uri().compare("computer:///ukui-data-volume") == 0 || leftItem->uri().compare("file:///data") == 0) { return true; } if (rightItem->uri().compare("computer:///ukui-data-volume") == 0 || rightItem->uri().compare("file:///data") == 0) { return false; } if (!leftItem->canEject() && !leftItem->m_unixDeviceName.startsWith("/dev/bus/usb") && !rightItem->canEject() && !rightItem->m_unixDeviceName.startsWith("/dev/bus/usb")) { return m_collator.compare(leftItem->m_unixDeviceName, rightItem->m_unixDeviceName) < 0; } else if (!leftItem->canEject() && !leftItem->m_unixDeviceName.startsWith("/dev/bus/usb")) { return true; } else if (!rightItem->canEject() && !rightItem->m_unixDeviceName.startsWith("/dev/bus/usb")) { return false; } if ((leftItem->canEject() && !leftItem->m_unixDeviceName.startsWith("/dev/sr")) && (rightItem->canEject() && !rightItem->m_unixDeviceName.startsWith("/dev/sr"))) { return m_collator.compare(leftItem->m_unixDeviceName, rightItem->m_unixDeviceName) < 0; } else if (leftItem->canEject() && !leftItem->m_unixDeviceName.startsWith("/dev/sr")) { return true; } else if (rightItem->canEject() && !rightItem->m_unixDeviceName.startsWith("/dev/sr")) { return false; } if (leftItem->m_unixDeviceName.startsWith("/dev/bus/usb") && rightItem->m_unixDeviceName.startsWith("/dev/bus/usb")) { return m_collator.compare(leftItem->m_unixDeviceName, rightItem->m_unixDeviceName) < 0; } else if (leftItem->m_unixDeviceName.startsWith("/dev/bus/usb")) { return true; } else if (rightItem->m_unixDeviceName.startsWith("/dev/bus/usb")) { return false; } return m_collator.compare(leftItem->m_unixDeviceName, rightItem->m_unixDeviceName) < 0; } peony-extensions/peony-extension-computer-view/computer-view/computer-user-share-item.h0000664000175000017500000000530215257160264030634 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: dingjing * */ #ifndef COMPUTERUSERSHAREITEM_H #define COMPUTERUSERSHAREITEM_H #include #include "abstract-computer-item.h" #include #include class ComputerUserShareItem : public AbstractComputerItem { Q_OBJECT friend void query_file_info_async_callback(GFile *file, GAsyncResult *res, ComputerUserShareItem* p_this); public: explicit ComputerUserShareItem(GVolume *volume, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent = nullptr); ~ComputerUserShareItem(); void updateInfoAsync(); Type itemType() override {return Volume;} const QString uri() override {return m_uri;} const QString displayName() override {return m_displayName;}; const QIcon icon() override {return m_icon;}; bool isMount() override {return true;}; void findChildren() override {}; void updateInfo() override {updateInfoAsync();} void check() override; bool canEject() override {return false;}; void eject(GMountUnmountFlags) override {}; bool canUnmount() override {return false;}; void unmount(GMountUnmountFlags) override {}; void mount() override {}; QModelIndex itemIndex() override; qint64 usedSpace() override {return m_usedSpace;}; qint64 totalSpace() override {return m_totalSpace;} bool isHidden() override {return m_isHidden;}; protected: private: QString m_uri; QString m_vfs_uri; GFile* m_file; QString m_displayName; QIcon m_icon; qint64 m_totalSpace = 0; qint64 m_usedSpace = 0; bool m_isHidden = false; GCancellable *m_cancellable = nullptr; }; #endif // COMPUTERUSERSHAREITEM_H peony-extensions/peony-extension-computer-view/computer-view/computer-personal-item.cpp0000664000175000017500000000266315257160264030743 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "computer-personal-item.h" #include "computer-model.h" #include ComputerPersonalItem::ComputerPersonalItem(const QString &uri, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent) : AbstractComputerItem(model, parentNode, parent) { if (!parentNode) { m_uri = "file://" + QStandardPaths::writableLocation(QStandardPaths::HomeLocation); } else { m_uri = uri; } } const QString ComputerPersonalItem::displayName() { //FIXME: return nullptr; } void ComputerPersonalItem::findChildren() { //FIXME: } void ComputerPersonalItem::clearChildren() { //FIXME: } peony-extensions/peony-extension-computer-view/computer-view/computer-item-delegate.h0000664000175000017500000000403515257160264030332 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef COMPUTERITEMDELEGATE_H #define COMPUTERITEMDELEGATE_H #include class QListView; class QTreeView; class QProgressBar; class AbstractComputerItem; class ComputerItemDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit ComputerItemDelegate(QObject *parent = nullptr); ~ComputerItemDelegate(); protected: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; void paintVolumeItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, AbstractComputerItem *item) const; void paintRemoteItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, AbstractComputerItem *item) const; void paintNetworkItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, AbstractComputerItem *item) const; void drawTab(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; void drawStyledItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; private: QListView *m_styleIconView; QTreeView *m_styleTreeView; QProgressBar *m_styleProgressBar; }; #endif // COMPUTERITEMDELEGATE_H peony-extensions/peony-extension-computer-view/computer-view/computer-view.h0000664000175000017500000000767515257160264026613 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef COMPUTERVIEW_H #define COMPUTERVIEW_H #include #include class ComputerProxyModel; class QRubberBand; class ComputerView : public QAbstractItemView { Q_OBJECT public: explicit ComputerView(QWidget *parent = nullptr); bool eventFilter(QObject *object, QEvent *event); virtual QRect visualRect(const QModelIndex &index) const; virtual void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible); virtual QModelIndex indexAt(const QPoint &point) const; virtual QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers); virtual int horizontalOffset() const; virtual int verticalOffset() const; virtual bool isIndexHidden(const QModelIndex &index) const; virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command); virtual QRegion visualRegionForSelection(const QItemSelection &selection) const; void setModel(QAbstractItemModel *model); QString tryGetVolumeUriFromMountTarget(const QString &mountTargetUri); QString tryGetVolumeRealUriFromUri(const QString &uri); void refresh(); bool getRightDoubleClickState(); void setRightDoubleClickState(bool flag); Q_SIGNALS: void updateLocationRequest(const QString &uri); protected: void updateEditorGeometries(); void updateGeometries(); void resizeEvent(QResizeEvent *event); bool viewportEvent(QEvent *event) override; void paintEvent(QPaintEvent *e); void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseDoubleClickEvent(QMouseEvent *event); void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles = QVector()); void dragEnterEvent(QDragEnterEvent *event); void dragMoveEvent(QDragMoveEvent *event); void dropEvent(QDropEvent *event); void rowsInserted(const QModelIndex &parent, int start, int end); void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); void layoutVolumeIndexes(const QModelIndex &volumeParentIndex); void layoutRemoteIndexes(const QModelIndex &remoteParentIndex); void layoutNetworkIndexes(const QModelIndex &networkParentIndex); void adjustLayout(); protected: void doLayout(); public: QTimer *m_touch_active_timer = nullptr; private: ComputerProxyModel *m_model; QRubberBand *m_rubberBand; QPoint m_lastPressedPoint; QPoint m_lastPressedLogicPoint; QRect m_logicRect; bool m_isLeftButtonPressed = false; bool m_isRightButonDClick = false; bool m_isShowNetwork = true; QModelIndex m_hoverIndex; int m_scrollStep = 100; int m_totalHeight = 0; int m_totalWidth = 0; int m_hSpacing = 20; int m_vSpacing = 20; int m_tabPadding = 26; QSize m_volumeItemFixedSize = QSize(256, 108); QSize m_remoteItemFixedSize = QSize(108, 144); QSize m_networkItemFixedSize = QSize(108, 144); QHash m_rect_cache; QTimer *m_timer = nullptr; }; #endif // COMPUTERVIEW_H peony-extensions/peony-extension-computer-view/computer-view/computer-network-item.h0000664000175000017500000000432715257160264030255 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef COMPUTERNETWORKITEM_H #define COMPUTERNETWORKITEM_H #include "abstract-computer-item.h" #include #include class ComputerNetworkItem : public AbstractComputerItem { Q_OBJECT public: explicit ComputerNetworkItem(const QString &uri, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent = nullptr); ~ComputerNetworkItem(); Type itemType() override {return Network;} const QString uri() override {return m_uri;} const QString displayName() override; const QIcon icon() override {return m_icon;} void findChildren() override; void updateInfo() override; QModelIndex itemIndex() override; public Q_SLOTS: void reloadDirectory(const QString &uri); void onFileAdded(const QString &uri); void onFileRemoved(const QString &uri); void onFileChanged(const QString &uri); protected: //enumeration static void enumerate_async_callback(GFile *file, GAsyncResult *res, ComputerNetworkItem *p_this); static void find_children_async_callback(GFileEnumerator *enumerator, GAsyncResult *res, ComputerNetworkItem *p_this); //info static void query_info_async_callback(GFile *file, GAsyncResult *res, ComputerNetworkItem *p_this); private: QString m_uri; QString m_displayName; QIcon m_icon; GCancellable *m_cancellable; Peony::FileWatcher *m_watcher = nullptr; }; #endif // COMPUTERNETWORKITEM_H peony-extensions/peony-extension-computer-view/computer-view/computer-view-style.cpp0000664000175000017500000000712715257160264030274 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: dingjing * */ #include "computer-view-style.h" #include #include #include static ComputerViewStyle *global_instance = nullptr; ComputerViewStyle::ComputerViewStyle(QStyle *style) : QProxyStyle(style) { } ComputerViewStyle *ComputerViewStyle::getStyle() { if (!global_instance) global_instance = new ComputerViewStyle; return global_instance; } void ComputerViewStyle::drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { if (element == PE_Frame) { return; } return QProxyStyle::drawPrimitive(element, option, painter, widget); } void ComputerViewStyle::drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { if (element == QStyle::CE_RubberBand) { //qDebug()<<"draw control rubber band"; if (qstyleoption_cast(option)) { auto rect = option->rect; QColor highlight = option->palette.color(QPalette::Active, QPalette::Highlight); painter->save(); QColor penColor = highlight; penColor.setAlpha(180); painter->setPen(penColor); QColor dimHighlight(qMin(highlight.red()/2 + 110, 255), qMin(highlight.green()/2 + 110, 255), qMin(highlight.blue()/2 + 110, 255)); dimHighlight.setAlpha(widget && widget->isTopLevel() ? 255 : 80); QLinearGradient gradient(rect.topLeft(), QPoint(rect.bottomLeft().x(), rect.bottomLeft().y())); gradient.setColorAt(0, dimHighlight.lighter(120)); gradient.setColorAt(1, dimHighlight); painter->setRenderHint(QPainter::Antialiasing, true); painter->translate(0.5, 0.5); painter->setBrush(dimHighlight); painter->drawRoundedRect(option->rect.adjusted(0, 0, -1, -1), 1, 1); QColor innerLine = Qt::white; innerLine.setAlpha(40); painter->setPen(innerLine); painter->drawRoundedRect(option->rect.adjusted(1, 1, -2, -2), 1, 1); painter->restore(); } return; } QProxyStyle::drawControl(element, option, painter, widget); } void ComputerViewStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const { //qDebug()<<"drawItemPixmap"; QProxyStyle::drawItemPixmap(painter, rect, alignment, pixmap); } void ComputerViewStyle::drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole) const { //qDebug()<<"drawItemText"; QProxyStyle::drawItemText(painter, rect, flags, pal, enabled, text, textRole); } peony-extensions/peony-extension-computer-view/computer-view/computer-view-style.h0000664000175000017500000000365215257160264027740 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2023, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * */ #ifndef COMPUTERVIEWSTYLE_H #define COMPUTERVIEWSTYLE_H #include #include class ComputerViewStyle : public QProxyStyle { public: static ComputerViewStyle *getStyle(); void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override; void drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override; void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const override; void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const override; private: explicit ComputerViewStyle(QStyle *style = nullptr); ~ComputerViewStyle() override {} }; #endif // COMPUTERVIEWSTYLE_H peony-extensions/peony-extension-computer-view/computer-view/computer-network-item.cpp0000664000175000017500000001521415257160264030605 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "computer-network-item.h" #include "computer-model.h" #include ComputerNetworkItem::ComputerNetworkItem(const QString &uri, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent) : AbstractComputerItem(model, parentNode, parent) { m_cancellable = g_cancellable_new(); m_uri = uri; updateInfo(); } ComputerNetworkItem::~ComputerNetworkItem() { g_cancellable_cancel(m_cancellable); g_object_unref(m_cancellable); } const QString ComputerNetworkItem::displayName() { if (m_uri == "network:///") return tr("Network Neighborhood"); return m_displayName; } void ComputerNetworkItem::findChildren() { if (m_uri != "network:///") return; GFile *file = g_file_new_for_uri("network:///"); g_file_enumerate_children_async(file, G_FILE_ATTRIBUTE_STANDARD_NAME, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, 0, m_cancellable, GAsyncReadyCallback(enumerate_async_callback), this); g_object_unref(file); } void ComputerNetworkItem::updateInfo() { GFile *file = g_file_new_for_uri(m_uri.toUtf8().constData()); g_file_query_info_async(file, "*", G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, 0, m_cancellable, GAsyncReadyCallback(query_info_async_callback), this); g_object_unref(file); } QModelIndex ComputerNetworkItem::itemIndex() { if (!m_parentNode) return m_model->createItemIndex(0, this); return m_model->createItemIndex(m_parentNode->m_children.indexOf(this), this); } void ComputerNetworkItem::reloadDirectory(const QString &uri) { if (m_uri != "network:///") return; m_model->beginResetModel(); for (auto item : m_children) { item->deleteLater(); } m_children.clear(); findChildren(); m_model->endResetModel(); } void ComputerNetworkItem::onFileAdded(const QString &uri) { for (auto item : m_children) { if (item->uri() == uri) return; } m_model->beginInsertItem(itemIndex(), m_children.count()); auto item = new ComputerNetworkItem(uri, m_model, this); m_children<endInsterItem(); } void ComputerNetworkItem::onFileRemoved(const QString &uri) { int row = -1; for (auto item : m_children) { if (item->uri() == uri) { row = m_children.indexOf(item); break; } } if (row < 0) return; m_model->beginRemoveItem(itemIndex(), row); auto item = m_children.takeAt(row); item->deleteLater(); m_model->endRemoveItem(); } void ComputerNetworkItem::onFileChanged(const QString &uri) { for (auto item : m_children) { if (item->uri() == uri) { item->updateInfo(); return; } } } void ComputerNetworkItem::enumerate_async_callback(GFile *file, GAsyncResult *res, ComputerNetworkItem *p_this) { GError *err = nullptr; auto enumerator = g_file_enumerate_children_finish(file, res, &err); if (enumerator) { g_file_enumerator_next_files_async(enumerator, 9999, 0, p_this->m_cancellable, GAsyncReadyCallback(find_children_async_callback), p_this); } if (err) { //QMessageBox::critical(0, 0, err->message); g_error_free(err); } } void ComputerNetworkItem::find_children_async_callback(GFileEnumerator *enumerator, GAsyncResult *res, ComputerNetworkItem *p_this) { GError *err = nullptr; auto infos = g_file_enumerator_next_files_finish(enumerator, res, &err); GList *l = infos; while (l) { auto info = G_FILE_INFO(l->data); l = l->next; if (!info) continue; auto file = g_file_enumerator_get_child(enumerator, info); if (!file) continue; auto uri = g_file_get_uri(file); if (!uri) continue; p_this->m_model->beginInsertItem(p_this->itemIndex(), p_this->m_children.count()); auto item = new ComputerNetworkItem(uri, p_this->m_model, p_this); p_this->m_children<m_model->endInsterItem(); g_free(uri); g_object_unref(file); } if (infos) g_list_free_full(infos, g_object_unref); if (enumerator) { g_file_enumerator_close(enumerator, nullptr, nullptr); g_object_unref(enumerator); } if (err) { //QMessageBox::critical(0, 0, err->message); g_error_free(err); } if (p_this->m_watcher) { p_this->m_watcher->deleteLater(); } p_this->m_watcher = new Peony::FileWatcher("network:///", p_this); connect(p_this->m_watcher, &Peony::FileWatcher::directoryDeleted, p_this, &ComputerNetworkItem::reloadDirectory); connect(p_this->m_watcher, &Peony::FileWatcher::fileCreated, p_this, &ComputerNetworkItem::onFileAdded); connect(p_this->m_watcher, &Peony::FileWatcher::fileDeleted, p_this, &ComputerNetworkItem::onFileRemoved); connect(p_this->m_watcher, &Peony::FileWatcher::fileChanged, p_this, &ComputerNetworkItem::onFileChanged); p_this->m_watcher->startMonitor(); } void ComputerNetworkItem::query_info_async_callback(GFile *file, GAsyncResult *res, ComputerNetworkItem *p_this) { GError *err = nullptr; GFileInfo *info = g_file_query_info_finish(file, res, &err); if (info) { p_this->m_displayName = g_file_info_get_attribute_string(info, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME); GIcon *icon = g_file_info_get_icon(info); const gchar * const * names = g_themed_icon_get_names(G_THEMED_ICON(icon)); if (names) { const char *name = *names; if (name) { p_this->m_icon = QIcon::fromTheme(name); } } p_this->m_model->dataChanged(p_this->itemIndex(), p_this->itemIndex()); g_object_unref(info); } if (err) { //QMessageBox::critical(0, 0, err->message); g_error_free(err); } } peony-extensions/peony-extension-computer-view/computer-view/abstract-computer-item.h0000664000175000017500000000452415257160277030372 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef ABSTRACTCOMPUTERITEM_H #define ABSTRACTCOMPUTERITEM_H #include #include #include class ComputerModel; class AbstractComputerItem : public QObject { Q_OBJECT public: enum Type { Invalid, Personal, Volume, RemoteVolume, Network }; Q_ENUM(Type) explicit AbstractComputerItem(ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent = nullptr); ~AbstractComputerItem(); virtual Type itemType() {return Invalid;} virtual const QString uri() {return nullptr;} virtual const QString displayName() {return nullptr;} virtual const QIcon icon() {return QIcon::fromTheme("text-plain");} virtual bool hasChildren() {return false;} virtual void findChildren() {} virtual void clearChildren() {} virtual void updateInfo() {} virtual void check() {} virtual bool isMount () {return false;} //for volumn virtual qint64 totalSpace() {return 0;} virtual qint64 usedSpace() {return 0;} virtual bool canUnmount() {return false;} virtual void unmount(GMountUnmountFlags unmountFlag) {} virtual void mount() {} virtual bool canEject() {return false;} virtual void eject(GMountUnmountFlags ejectFlag) {} //for remote volume virtual bool isHidden() {return false;} virtual QModelIndex itemIndex(); public: ComputerModel *m_model; AbstractComputerItem *m_parentNode; QList m_children; QString m_unixDeviceName; }; #endif // ABSTRACTCOMPUTERITEM_H peony-extensions/peony-extension-computer-view/computer-view/abstract-computer-item.cpp0000664000175000017500000000235715257160264030723 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "abstract-computer-item.h" #include AbstractComputerItem::AbstractComputerItem(ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent) : QObject(parent) { m_model = model; m_parentNode = parentNode; } AbstractComputerItem::~AbstractComputerItem() { for (auto child : m_children) { child->deleteLater(); } } QModelIndex AbstractComputerItem::itemIndex() { return QModelIndex(); } peony-extensions/peony-extension-computer-view/computer-view/computer-proxy-model.h0000664000175000017500000000344415257160277030112 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef COMPUTERPROXYMODEL_H #define COMPUTERPROXYMODEL_H #include #include #include class ComputerModel; class AbstractComputerItem; class ComputerProxyModel : public QSortFilterProxyModel { Q_OBJECT public: explicit ComputerProxyModel(QObject *parent = nullptr); static ComputerProxyModel *globalInstance(); AbstractComputerItem *itemFromIndex(const QModelIndex &proxyIndex); QString tryGetVolumeUriFromMountTarget(const QString &mountTargetUri); QString tryGetVolumeRealUriFromUri(const QString &uri); void refresh(); Q_SIGNALS: void updateLocationRequest(const QString &uri); void updateRequest(); protected: bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override; private: ComputerModel *m_model; QLocale m_locale; QCollator m_collator; }; #endif // COMPUTERPROXYMODEL_H peony-extensions/peony-extension-computer-view/computer-view/computer-personal-item.h0000664000175000017500000000266615257160264030413 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef COMPUTERPERSONALITEM_H #define COMPUTERPERSONALITEM_H #include "abstract-computer-item.h" class ComputerPersonalItem : public AbstractComputerItem { Q_OBJECT public: explicit ComputerPersonalItem(const QString &uri, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent = nullptr); Type itemType() override {return Personal;} const QString uri() override {return m_uri;} const QString displayName() override; bool hasChildren() override {return !m_parentNode;} void findChildren() override; void clearChildren() override; private: QString m_uri; }; #endif // COMPUTERPERSONALITEM_H peony-extensions/peony-extension-computer-view/computer-view/computer-volume-item.h0000664000175000017500000001144115257160277030072 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef COMPUTERVOLUMEITEM_H #define COMPUTERVOLUMEITEM_H #include "abstract-computer-item.h" #include #include class ComputerVolumeItem : public AbstractComputerItem { Q_OBJECT public: explicit ComputerVolumeItem(GVolume *volume, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent = nullptr); //explicit ComputerVolumeItem(const QString uri,ComputerModel *model,AbstractComputerItem *parentNode,QObject *parent = nullptr); ~ComputerVolumeItem(); void updateInfoAsync(); Type itemType() override {return Volume;} const QString uri() override {return m_uri;} const QString displayName() override; const QIcon icon() override; bool isMount() override; void findChildren() override; void updateInfo() override {updateInfoAsync();} void check() override; bool canEject() override; void eject(GMountUnmountFlags ejectFlag) override; bool canUnmount() override; void unmount(GMountUnmountFlags unmountFlag) override; void mount() override; QModelIndex itemIndex() override; qint64 usedSpace() override {return m_usedSpace;} qint64 totalSpace() override {return m_totalSpace;} bool isHidden() override; QString getDeviceUUID(const char *device); bool tryStopDrive(GMountUnmountFlags ejectFlag, GMountOperation *mount_op); bool unMountIsoImage(GMount* gmount); static QString getDevicePath(GVolume* volume); protected: //monitor static void volume_changed_callback(GVolume *volume, ComputerVolumeItem *p_this); static void volume_removed_callback(GVolume *volume, ComputerVolumeItem *p_this); static void mount_changed_callback(GVolumeMonitor* volumeMonitor, GMount *gmount, ComputerVolumeItem *p_this); static void mount_added_callback(GVolumeMonitor* volumeMonitor, GMount *gmount, ComputerVolumeItem *p_this); //info static void query_info_async_callback(GFile *file, GAsyncResult *res, ComputerVolumeItem *p_this); static void query_root_info_async_callback(GFile *file, GAsyncResult *res, ComputerVolumeItem *p_this); //mount op static void mount_async_callback(GVolume *volume, GAsyncResult *res, ComputerVolumeItem *p_this); static void unmount_async_callback(GObject *object, GAsyncResult *res, ComputerVolumeItem *p_this); static void eject_async_callback(GObject *object, GAsyncResult *res, ComputerVolumeItem *p_this); static void stop_async_callback(GDrive *drive, GAsyncResult *res, ComputerVolumeItem *p_this); //watcher //comment gparted process code to fix duplicated volume issue, bug#41623 // void collectInfoWhenGpartedOpen(QString uri); // void onFileAdded(const QString &uri); // void onFileRemoved(const QString &uri); //gparted //void findChildrenWhenGPartedOpen(); //static void enumerate_async_callback(GFile *file, GAsyncResult *res, ComputerVolumeItem *p_this); //static void find_children_async_callback(GFileEnumerator *enumerator, GAsyncResult *res, ComputerVolumeItem *p_this); friend quint64 calcVolumeCapacity(ComputerVolumeItem* pThis); private Q_SLOTS: void onVolumeAdded(const std::shared_ptr volume); void updateBlockIcons(); private: QString m_uri; QString m_vfs_uri; std::shared_ptr m_volume = nullptr; std::shared_ptr m_mount = nullptr; GCancellable *m_cancellable = nullptr; GCancellable *m_tmpCancellable = nullptr; GVolumeMonitor *m_volumeMonitor = nullptr; gulong m_volumeChangedHandle = 0; gulong m_volumeRemovedHandle = 0; gulong m_mountChangedHandle = 0; gulong m_mountAddedHandle = 0; //info QString m_displayName; QIcon m_icon; qint64 m_totalSpace = 0; qint64 m_usedSpace = 0; Peony::FileWatcher *m_watcher = nullptr; QString m_targetUri; bool m_isHidden = false; bool m_bMtpQueryInfoFailed = false; /* hotfix bug#247327ã€�260993 手机信æ�¯æŸ¥è¯¢ï¼Œå®¹é‡�显示问题 */ }; #endif // COMPUTERVOLUMEITEM_H peony-extensions/peony-extension-computer-view/computer-view/computer-item-delegate.cpp0000664000175000017500000003404015257160277030670 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include #include "computer-view.h" #include "computer-proxy-model.h" #include "computer-item-delegate.h" #include "abstract-computer-item.h" #include #include #include #include #include #include #include #include ComputerItemDelegate::ComputerItemDelegate(QObject *parent) : QStyledItemDelegate(parent) { m_styleIconView = new QListView; m_styleIconView->setViewMode(QListView::IconMode); m_styleTreeView = new QTreeView; m_styleProgressBar = new QProgressBar; } ComputerItemDelegate::~ComputerItemDelegate() { m_styleIconView->deleteLater(); m_styleProgressBar->deleteLater(); } void ComputerItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItem opt = option; initStyleOption(&opt, index); //use rounded rect primitive in ukui style. if (index.parent().isValid()) { opt.decorationPosition = QStyleOptionViewItem::Top; opt.decorationSize = QSize(64, 64); opt.features = QStyleOptionViewItem::WrapText; opt.viewItemPosition = QStyleOptionViewItem::OnlyOne; opt.displayAlignment = Qt::AlignHCenter|Qt::AlignTop; opt.rect.adjust(2, 2, -2, -2); //opt.features.setFlag(QStyleOptionViewItem::WrapText); } auto view = qobject_cast(parent()); auto model = qobject_cast(view->model()); auto item = model->itemFromIndex(index); if (!item) return; switch (item->itemType()) { case AbstractComputerItem::Volume: paintVolumeItem(painter, opt, index, item); break; case AbstractComputerItem::RemoteVolume: paintRemoteItem(painter, opt, index, item); break; case AbstractComputerItem::Network: paintNetworkItem(painter, opt, index, item); break; default: break; } } void ComputerItemDelegate::paintVolumeItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, AbstractComputerItem *item) const { auto opt = option; bool isHover = (option.state & QStyle::State_MouseOver) && (option.state & ~QStyle::State_Selected); bool isSelected = option.state & QStyle::State_Selected; bool enable = option.state & QStyle::State_Enabled; QColor color = option.palette.color(enable? QPalette::Active: QPalette::Disabled, QPalette::NoRole); if (isHover && !isSelected) { color = option.palette.color(QPalette::BrightText); color.setAlpha(8); } else if (!isSelected){ color.setAlpha(0); } // painter->save(); // painter->setRenderHint(QPainter::Antialiasing); // painter->setPen(Qt::transparent); // painter->setBrush(color); // painter->drawRoundedRect(option.rect, 6, 6); // painter->restore(); qApp->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, m_styleTreeView); if (index.parent().isValid()) { painter->save(); painter->setRenderHint(QPainter::Antialiasing); //get pixmap QIcon icon = option.icon; bool enable = option.state & QStyle::State_Enabled; bool selected = option.state &QStyle::State_Selected; QPixmap pix = icon.pixmap(QSize(64, 64), enable? QIcon::Normal: QIcon::Disabled); //draw emblem icon on pixmap if (item->property("emblemIconName").isValid()) { QString emblemIconName = item->property("emblemIconName").toString(); QIcon emblemIcon = QIcon::fromTheme(emblemIconName); QPixmap overpix = emblemIcon.pixmap(QSize(30, 30)); QPainter emblem_painter(&pix); emblem_painter.drawPixmap(34, 34, 30, 30, overpix); emblem_painter.end(); } //draw pixmap qApp->style()->drawItemPixmap(painter, option.rect.adjusted(5, 0, 0, 0), Qt::AlignVCenter|Qt::AlignLeft, pix); int textOffetX1 = 84; int textOffetX2 = -5; int progressX1 = 0; int progressX2 = -10; if (opt.direction == Qt::RightToLeft) { textOffetX1= 5; textOffetX2 = -84; progressX1 = 10; progressX2 = 0; } //draw text auto textRect = option.rect; textRect.adjust(textOffetX1, 10, textOffetX2, -25); textRect.translate(0, -option.fontMetrics.ascent()); auto elideText = opt.fontMetrics.elidedText(opt.text, Qt::ElideMiddle, textRect.width()); qApp->style()->drawItemText(painter, textRect, Qt::AlignLeft|Qt::AlignVCenter, option.palette, enable, elideText, QPalette::Text); //space bool shouldDrawProgress = false; QString spaceInfo; auto total = item->totalSpace(); auto used = item->usedSpace(); if (total > 0) { char *totalFormat = g_format_size_full(total,G_FORMAT_SIZE_IEC_UNITS); char *usedFormat = g_format_size_full(used,G_FORMAT_SIZE_IEC_UNITS); QString totalFormatString(totalFormat); QString usedFormatString(usedFormat); totalFormatString.replace("iB", "B"); usedFormatString.replace("iB", "B"); spaceInfo = QString("%1/%2").arg(usedFormatString).arg(totalFormatString); g_free(totalFormat); g_free(usedFormat); shouldDrawProgress = true; } else { if (!item->isMount()) { spaceInfo = tr("You should mount volume first"); } } QRect spaceInfoArea = textRect; if (option.fontMetrics.ascent() <= option.font.pointSize() + 4) { spaceInfoArea = textRect.translated(0, 2.6 * option.fontMetrics.ascent()); spaceInfoArea.setHeight (option.fontMetrics.height () + 3.0 * option.fontMetrics.ascent()); } else { spaceInfoArea = textRect.translated(0, 1.5 * option.fontMetrics.ascent()); spaceInfoArea.setHeight (option.fontMetrics.height () + 2.5 * option.fontMetrics.ascent()); } QFontMetrics fontMetris(option.font); spaceInfo = fontMetris.elidedText(spaceInfo, Qt::ElideMiddle, spaceInfoArea.width() * 1.5); qApp->style()->drawItemText(painter, spaceInfoArea, Qt::AlignLeft|Qt::AlignVCenter|Qt::TextWordWrap, option.palette, enable, spaceInfo, QPalette::PlaceholderText); if (shouldDrawProgress) { painter->save(); QRect progressRect = spaceInfoArea.translated (0, spaceInfoArea.height ()); progressRect.adjust (progressX1, -10, progressX2, 0); progressRect.setHeight(10); // QPainterPath clipPath; // clipPath.addRoundedRect(option.rect, 6, 6); // painter->setClipPath(clipPath); qreal percent = used*1.0/total*1.0; int progressBarWidth = progressRect.width() * percent; QStyleOptionProgressBar optBar; optBar.rect = progressRect; optBar.state = opt.state; optBar.palette = qApp->palette(); optBar.minimum = 0; optBar.maximum = 100; optBar.progress = percent * 100; //qApp->style()->drawControl(QStyle::CE_ProgressBar, &optBar, painter); painter->save(); QPen pen; //pen.setColor(percent < 0.8?Qt::blue:Qt::red); pen.setCapStyle(Qt::PenCapStyle::RoundCap); pen.setJoinStyle(Qt::PenJoinStyle::RoundJoin); pen.setWidth(6); QColor color = option.palette.color(QPalette::BrightText); color.setAlpha(8); pen.setColor(color); painter->setPen(pen); //painter->drawLine(progressRect.topLeft(), progressRect.topRight()); if (percent < 0.8) { pen.setColor(option.palette.highlight().color()); m_styleProgressBar->setProperty("setContentBrush", QBrush(option.palette.highlight().color())); } else { pen.setColor(Qt::red); m_styleProgressBar->setProperty("setContentBrush", QBrush(Qt::red)); } painter->setPen(pen); auto pos = progressRect.topLeft(); pos.setX(pos.x() + progressBarWidth); //The percent is too small, resulting in incorrect coordinates. if((option.rect.bottomLeft() + QPoint(8, -5)).x() >= pos.x()){ pos = progressRect.topLeft () + QPoint(9, -5); } //painter->drawLine(progressRect.topLeft (), pos); qApp->style()->drawControl(QStyle::CE_ProgressBar, &optBar, painter, m_styleProgressBar); painter->restore(); painter->restore(); } painter->restore(); } else { //auto textRect = qApp->style()->subElementRect(QStyle::SE_ItemViewItemText, &option, m_styleIconView); drawTab(painter, option, index); } } void ComputerItemDelegate::paintRemoteItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, AbstractComputerItem *item) const { if (index.parent().isValid()) { bool isHover = (option.state & QStyle::State_MouseOver) && (option.state & ~QStyle::State_Selected); bool isSelected = option.state & QStyle::State_Selected; bool enable = option.state & QStyle::State_Enabled; QColor color = option.palette.color(enable? QPalette::Active: QPalette::Disabled, QPalette::NoRole); if (isHover && !isSelected) { color = option.palette.color(QPalette::BrightText); color.setAlpha(8); } else if (!isSelected){ color.setAlpha(0); } // painter->save(); // painter->setRenderHint(QPainter::Antialiasing); // painter->setPen(Qt::transparent); // painter->setBrush(color); // painter->drawRoundedRect(option.rect, 6, 6); // painter->restore(); qApp->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, m_styleTreeView); drawStyledItem(painter, option, index); } else { drawTab(painter, option, index); } } void ComputerItemDelegate::paintNetworkItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, AbstractComputerItem *item) const { if (index.parent().isValid()) { bool isHover = (option.state & QStyle::State_MouseOver) && (option.state & ~QStyle::State_Selected); bool isSelected = option.state & QStyle::State_Selected; bool enable = option.state & QStyle::State_Enabled; QColor color = option.palette.color(enable? QPalette::Active: QPalette::Disabled, QPalette::NoRole); if (isHover && !isSelected) { color = option.palette.color(QPalette::BrightText); color.setAlpha(8); } else if (!isSelected){ color.setAlpha(0); } // painter->save(); // painter->setRenderHint(QPainter::Antialiasing); // painter->setPen(Qt::transparent); // painter->setBrush(color); // painter->drawRoundedRect(option.rect, 6, 6); // painter->restore(); qApp->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, m_styleTreeView); drawStyledItem(painter, option, index); } else { drawTab(painter, option, index); } } void ComputerItemDelegate::drawTab(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { painter->save(); auto opt = option; auto titleFont = opt.font; if (titleFont.pixelSize() > 0) { titleFont.setPixelSize(titleFont.pixelSize()*1.25); } else { titleFont.setPointSizeF(titleFont.pointSizeF()*1.25); } opt.icon = QIcon(); opt.decorationPosition = QStyleOptionViewItem::Right; opt.displayAlignment = Qt::AlignLeft|Qt::AlignVCenter; opt.font = titleFont; opt.fontMetrics = QFontMetrics(opt.font); painter->translate(QPoint(8, 0)); qApp->style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter); painter->restore(); //auto textRect = qApp->style()->subElementRect(QStyle::SE_ItemViewItemText, &opt, m_styleIconView); //qApp->style()->drawItemText(painter, opt.rect.adjusted(5, 0, 0, 0), Qt::AlignTop|Qt::AlignVCenter, option.palette, enable, option.text, selected? QPalette::HighlightedText: QPalette::Text); } void ComputerItemDelegate::drawStyledItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { painter->save(); painter->setRenderHint(QPainter::Antialiasing); //draw pix map QIcon icon = option.icon; bool enable = option.state & QStyle::State_Enabled; bool selected = option.state &QStyle::State_Selected; QPixmap pix = icon.pixmap(QSize(64, 64), enable? QIcon::Normal: QIcon::Disabled); qApp->style()->drawItemPixmap(painter, option.rect.adjusted(0, 5, 0, 0), Qt::AlignTop|Qt::AlignHCenter, pix); //draw text auto textRect = option.rect.adjusted(2, 74, -2, -2); auto elideText = option.fontMetrics.elidedText(option.text, Qt::ElideRight, 2 * textRect.width() - 10); qApp->style()->drawItemText(painter, textRect, Qt::ElideRight|Qt::TextWrapAnywhere|Qt::AlignTop|Qt::AlignHCenter, option.palette, enable, elideText, QPalette::Text); painter->restore(); } peony-extensions/peony-extension-computer-view/computer-view/computer-remote-volume-item.cpp0000664000175000017500000002340015257160277031714 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "computer-remote-volume-item.h" #include "computer-model.h" #include "file-utils.h" #include #include #include QString queryTargetUri(const QString &uri) { if (uri.startsWith("computer:///")) { g_autoptr (GFile) gfile = g_file_new_for_uri(uri.toUtf8().constData()); g_autoptr (GFileInfo) gfileinfo = g_file_query_info(gfile, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, 0, 0); g_autofree gchar* target_uri = g_file_info_get_attribute_as_string(gfileinfo, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI); return target_uri; } else { return uri; } } ComputerRemoteVolumeItem::ComputerRemoteVolumeItem(const QString &uri, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent) : AbstractComputerItem(model, parentNode, parent) { m_uri = uri; m_cancellable = g_cancellable_new(); updateInfo(); auto targetUri = queryTargetUri(uri); m_model->m_volumeTargetMap.insert(uri, targetUri); m_model->addRealUri(targetUri); bool isKydrive = targetUri.startsWith("file://") && targetUri.contains("kydrive"); setProperty("isKydrive", isKydrive); if (uri == "computer:///") { m_isHidden = false; } else { //fix dock show in remote item issue, link to bug#82398 if(targetUri.startsWith("ftp://") || targetUri.startsWith("sftp://") || targetUri.startsWith("smb://") || targetUri.startsWith("file:///")) m_isHidden = false; else m_isHidden = true; } qDebug()<<"create remote volume item:"<m_volumeTargetMap.remove(m_uri); m_model->removeRealUri(m_uri); } const QString ComputerRemoteVolumeItem::displayName() { if (m_uri == "computer:///") return tr("Remote"); return m_displayName; } const QIcon ComputerRemoteVolumeItem::icon() { return m_icon; } void ComputerRemoteVolumeItem::findChildren() { if (m_uri != "computer:///") return; GFile *file = g_file_new_for_uri("computer:///"); g_file_enumerate_children_async(file, G_FILE_ATTRIBUTE_STANDARD_NAME, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, 0, m_cancellable, GAsyncReadyCallback(enumerate_async_callback), this); g_object_unref(file); } void ComputerRemoteVolumeItem::updateInfo() { GFile *file = g_file_new_for_uri(m_uri.toUtf8().constData()); g_file_query_info_async(file, "*", G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, 0, m_cancellable, GAsyncReadyCallback(query_info_async_callback), this); g_object_unref(file); } void ComputerRemoteVolumeItem::unmount(GMountUnmountFlags unmountFlag) { QString targetUri = queryTargetUri(m_uri); GFile *file = g_file_new_for_uri(targetUri.toUtf8().constData()); //g_file_unmount_mountable_with_operation(file, unmountFlag, nullptr, nullptr, nullptr, nullptr); GMount *gMount = g_file_find_enclosing_mount(file, nullptr, nullptr); g_mount_unmount_with_operation(gMount, G_MOUNT_UNMOUNT_NONE, nullptr, nullptr, nullptr, nullptr); g_object_unref(file); g_object_unref(gMount); } QModelIndex ComputerRemoteVolumeItem::itemIndex() { if (!m_parentNode) return m_model->createItemIndex(0, this); return m_model->createItemIndex(m_parentNode->m_children.indexOf(this), this); } bool ComputerRemoteVolumeItem::isHidden() { // return m_isUnixDevice || m_uri == "computer:///root.link"; //fix bug#82398, hide unknow devices return m_isHidden; } void ComputerRemoteVolumeItem::onFileAdded(const QString &uri) { if (!uri.endsWith(".mount")) { return; } //not include udiskã€�mobile-diskã€�local-partition etc. QString targetUri; targetUri = queryTargetUri(uri); m_model->m_volumeTargetMap.insert(uri, targetUri); m_model->addRealUri(uri); // if(!targetUri.isEmpty() && targetUri.contains("file:///")) // return; for (auto item : m_children) { //qDebug() << "ComputerRemoteVolumeItem onFileAdded uri:"<uri(); if (item->uri() == uri) return; } m_model->beginInsertItem(itemIndex(), m_children.count()); auto item = new ComputerRemoteVolumeItem(uri, m_model, this); m_children<endInsterItem(); m_model->updateRequest(); m_model->invalidateRequest(); } void ComputerRemoteVolumeItem::onFileRemoved(const QString &uri) { int row = -1; for (auto item : m_children) { //qDebug() << "ComputerRemoteVolumeItem onFileRemoved uri:"<uri(); if (item->uri() == uri) { row = m_children.indexOf(item); break; } } if (row < 0) return; m_model->beginRemoveItem(itemIndex(), row); auto item = m_children.takeAt(row); item->deleteLater(); m_model->endRemoveItem(); m_model->updateRequest(); m_model->invalidateRequest(); } void ComputerRemoteVolumeItem::onFileChanged(const QString &uri) { for (auto item : m_children) { if (item->uri() == uri) { item->updateInfo(); return; } } } void ComputerRemoteVolumeItem::enumerate_async_callback(GFile *file, GAsyncResult *res, ComputerRemoteVolumeItem *p_this) { GError *err = nullptr; auto enumerator = g_file_enumerate_children_finish(file, res, &err); if (enumerator) { g_file_enumerator_next_files_async(enumerator, 9999, 0, p_this->m_cancellable, GAsyncReadyCallback(find_children_async_callback), p_this); } if (err) { p_this->m_isUnixDevice = true; //hide computer:/// //QMessageBox::critical(0, 0, err->message); g_error_free(err); } } void ComputerRemoteVolumeItem::find_children_async_callback(GFileEnumerator *enumerator, GAsyncResult *res, ComputerRemoteVolumeItem *p_this) { GError *err = nullptr; auto infos = g_file_enumerator_next_files_finish(enumerator, res, &err); GList *l = infos; while (l) { auto info = G_FILE_INFO(l->data); l = l->next; if (!info) continue; auto file = g_file_enumerator_get_child(enumerator, info); if (!file) continue; auto uri = g_file_get_uri(file); if (!uri) continue; QString tmp = uri; if (!tmp.endsWith(".mount")) { continue; } //not include udiskã€�mobile-diskã€�local-partition etc. QString targetUri; targetUri = queryTargetUri(uri); p_this->m_model->m_volumeTargetMap.insert(uri, targetUri); p_this->m_model->addRealUri(uri); p_this->m_model->beginInsertItem(p_this->itemIndex(), p_this->m_children.count()); auto item = new ComputerRemoteVolumeItem(uri, p_this->m_model, p_this); p_this->m_children<m_model->endInsterItem(); p_this->m_model->updateRequest(); g_free(uri); g_object_unref(file); } if (infos) g_list_free_full(infos, g_object_unref); if (enumerator) { g_file_enumerator_close(enumerator, nullptr, nullptr); g_object_unref(enumerator); } if (err) { //QMessageBox::critical(0, 0, err->message); g_error_free(err); } else { p_this->m_watcher = new Peony::FileWatcher("computer:///", p_this); connect(p_this->m_watcher, &Peony::FileWatcher::fileCreated, p_this, &ComputerRemoteVolumeItem::onFileAdded); connect(p_this->m_watcher, &Peony::FileWatcher::fileDeleted, p_this, &ComputerRemoteVolumeItem::onFileRemoved); connect(p_this->m_watcher, &Peony::FileWatcher::fileChanged, p_this, &ComputerRemoteVolumeItem::onFileChanged); p_this->m_watcher->startMonitor(); } } void ComputerRemoteVolumeItem::query_info_async_callback(GFile *file, GAsyncResult *res, ComputerRemoteVolumeItem *p_this) { GError *err = nullptr; GFileInfo *info = g_file_query_info_finish(file, res, &err); if (info) { p_this->m_isUnixDevice = g_file_info_has_attribute(info, G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE); p_this->m_displayName = g_file_info_get_attribute_string(info, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME); GIcon *icon = g_file_info_get_icon(info); const gchar * const * names = g_themed_icon_get_names(G_THEMED_ICON(icon)); if (names) { const char *name = *names; if (name) { p_this->m_icon = QIcon::fromTheme(name); } } p_this->m_model->dataChanged(p_this->itemIndex(), p_this->itemIndex()); qDebug()<<"query_info_async_callback:"<m_uri<m_isUnixDevice; g_object_unref(info); } if (err) { //QMessageBox::critical(0, 0, err->message); g_error_free(err); } } peony-extensions/peony-extension-computer-view/computer-view/computer-view.cpp0000664000175000017500000004506015257160277027140 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "computer-view.h" #include "computer-proxy-model.h" #include "abstract-computer-item.h" #include "computer-item-delegate.h" #include "computer-view-style.h" #include #include #include #include #include #include #include #include #include #include #include #include #include ComputerView::ComputerView(QWidget *parent) : QAbstractItemView(parent) { m_touch_active_timer = new QTimer(this); m_touch_active_timer->setInterval(2000); m_touch_active_timer->setSingleShot(true); setDragDropMode(QAbstractItemView::DropOnly); setItemDelegate(new ComputerItemDelegate(this)); m_model = ComputerProxyModel::globalInstance(); setModel(m_model); setStyle(ComputerViewStyle::getStyle()); model()->sort(0, Qt::AscendingOrder); m_rubberBand = new QRubberBand(QRubberBand::Shape::Rectangle, this); connect(m_model, &ComputerProxyModel::updateLocationRequest, this, &ComputerView::updateLocationRequest); connect(this, &QAbstractItemView::doubleClicked, this, [=](const QModelIndex &index){ qDebug()<selectionModel(), &QItemSelectionModel::selectionChanged, this, [=](){ this->viewport()->update(); }); //fix #18184 auto volumeManager = Peony::VolumeManager::getInstance(); connect(volumeManager,&Peony::VolumeManager::volumeRemoved,this,[=](const std::shared_ptr volume){ this->viewport()->update(); }); if (QGSettings::isSchemaInstalled("org.ukui.style")) { adjustLayout(); //font monitor, adjust to font size to fix lauout issue, link to bug#65238 QGSettings *fontSetting = new QGSettings(FONT_SETTINGS, QByteArray(), this); connect(fontSetting, &QGSettings::changed, this, [=](const QString &key){ qDebug() << "fontSetting changed:" << key; if (key == "systemFontSize") { adjustLayout(); } }); } setSelectionMode(QAbstractItemView::ExtendedSelection); this->viewport()->setMouseTracking(true); this->viewport()->installEventFilter(this); m_timer = new QTimer(this); m_timer->setInterval(0); m_timer->setSingleShot(true); connect(m_timer, &QTimer::timeout, this, [=]{ doLayout(); }); connect(m_model, &ComputerProxyModel::updateRequest, this, [=]{ doLayout(); }); connect(Peony::GlobalSettings::getInstance(), &Peony::GlobalSettings::valueChanged, this, [=](const QString& key){ if (SHOW_NETWORK == key) { doLayout(); } }); } void ComputerView::adjustLayout() { int fontSize = this->font().pointSize(); if (fontSize <= 0) { fontSize = this->font().pixelSize(); } int width = 256 + (fontSize -11) * 64/5; int height = 108 + (fontSize -11) * 36/5; m_volumeItemFixedSize = QSize(width, height); int other_width = 108 + (fontSize -11) * 36/5; int other_height = 144 + (fontSize -11) * 48/5; m_remoteItemFixedSize = QSize(other_width, other_height); m_networkItemFixedSize = QSize(other_width, other_height); } void ComputerView::doLayout() { m_totalHeight = 0; m_totalWidth = this->viewport()->width(); m_rect_cache.clear(); for (int row = 0; row < m_model->rowCount(); row++) { auto index = m_model->index(row, 0); auto item = m_model->itemFromIndex(index); switch (item->itemType()) { case AbstractComputerItem::Volume: { layoutVolumeIndexes(index); break; } case AbstractComputerItem::RemoteVolume: { layoutRemoteIndexes(index); break; } case AbstractComputerItem::Network: { m_isShowNetwork = Peony::GlobalSettings::getInstance()->isExist(SHOW_NETWORK) ? Peony::GlobalSettings::getInstance()->getValue(SHOW_NETWORK).toBool() : true; if (m_isShowNetwork) { layoutNetworkIndexes(index); } break; } default: break; } } //confirm total width for (auto rect : m_rect_cache.values()) { if (rect.right() > m_totalWidth) m_totalWidth = rect.right(); } horizontalScrollBar()->setRange(0, qMax(0, m_totalWidth - viewport()->width())); verticalScrollBar()->setRange(0, qMax(0, (m_totalHeight - viewport()->height() + 200)/m_scrollStep)); //update tab index rect width for (auto index : m_rect_cache.keys()) { if (!index.parent().isValid()) { auto rect = m_rect_cache.value(index); rect.setWidth(m_totalWidth); m_rect_cache.remove(index); m_rect_cache.insert(index, rect); } } viewport()->update(); } bool ComputerView::eventFilter(QObject *object, QEvent *event) { if (event->type() == QEvent::MouseMove) { if (!m_isLeftButtonPressed) { auto pos = mapFromGlobal(QCursor::pos()); auto newIndex = indexAt(pos); if (newIndex != m_hoverIndex) { m_hoverIndex = newIndex; this->viewport()->update(); } } else { m_hoverIndex = QModelIndex(); } } return false; } QRect ComputerView::visualRect(const QModelIndex &index) const { return m_rect_cache.value(index); } void ComputerView::scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint) { //return; //FIXME: scroll to the index more accurecely. //auto y = m_rect_cache.value(index).y(); //verticalScrollBar()->setValue(y); } QModelIndex ComputerView::indexAt(const QPoint &point) const { auto pos = point + QPoint(horizontalOffset(), verticalOffset()); for (auto index : m_rect_cache.keys()) { auto rect = m_rect_cache.value(index); if (rect.contains(pos) && index.parent().isValid()){ return index; } } return QModelIndex(); } QModelIndex ComputerView::moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers) { return QModelIndex(); } int ComputerView::horizontalOffset() const { return horizontalScrollBar()->value()*m_scrollStep; } int ComputerView::verticalOffset() const { return verticalScrollBar()->value()*m_scrollStep; } bool ComputerView::isIndexHidden(const QModelIndex &index) const { return false; } void ComputerView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) { //caculate logic rubber band rect in mouse move event. //qDebug()<<"setSelection"<isVisible()) { auto realRect = m_rubberBand->geometry(); realRect.adjust(horizontalOffset(), verticalOffset(), horizontalOffset(), verticalOffset()); for (auto index : m_rect_cache.keys()) { auto indexRect = m_rect_cache.value(index); if (realRect.contains(indexRect.center()) && index.parent().isValid()) { selectionModel()->select(index, QItemSelectionModel::Select); } else { selectionModel()->select(index, QItemSelectionModel::Deselect); } } } else { auto pos = rect.center(); auto index = indexAt(pos); if (!index.isValid()) { clearSelection(); return; } // if (!selectedIndexes().contains(index)) // selectionModel()->select(index, QItemSelectionModel::SelectCurrent); setCurrentIndex(index); } } QRegion ComputerView::visualRegionForSelection(const QItemSelection &selection) const { return QRegion(); } void ComputerView::setModel(QAbstractItemModel *model) { // if (this->model()) { // disconnect(this->model(), &QAbstractItemModel::rowsAboutToBeRemoved, 0, 0); // disconnect(this->model(), &QAbstractItemModel::rowsInserted, 0, 0); // } // connect(model, &QAbstractItemModel::rowsAboutToBeRemoved, this, &ComputerView::rowsAboutToBeRemoved); // connect(model, &QAbstractItemModel::rowsInserted, this, &ComputerView::rowsInserted); QAbstractItemView::setModel(model); } QString ComputerView::tryGetVolumeUriFromMountTarget(const QString &mountTargetUri) { return m_model->tryGetVolumeUriFromMountTarget(mountTargetUri); } QString ComputerView::tryGetVolumeRealUriFromUri(const QString &uri) { return m_model->tryGetVolumeRealUriFromUri(uri); } void ComputerView::refresh() { m_model->refresh(); } bool ComputerView::getRightDoubleClickState() { return m_isRightButonDClick; } void ComputerView::setRightDoubleClickState(bool flag) { m_isRightButonDClick = flag; } void ComputerView::updateEditorGeometries() { QAbstractItemView::updateEditorGeometries(); } void ComputerView::updateGeometries() { doLayout(); } void ComputerView::resizeEvent(QResizeEvent *event) { QAbstractItemView::resizeEvent(event); updateEditorGeometries(); } bool ComputerView::viewportEvent(QEvent *event) { if (event->type() == QEvent::ToolTip) { QHelpEvent *helpEvent = static_cast(event); QModelIndex index = indexAt(helpEvent->pos()); if (index.isValid()) { QString itemText = index.data(Qt::ToolTipRole).toString(); QToolTip::showText(helpEvent->globalPos(), itemText); return true; } } return QAbstractItemView::viewportEvent(event); } void ComputerView::paintEvent(QPaintEvent *e) { QPainter p(this->viewport()); p.fillRect(this->rect(), palette().base()); //p.fillRect(QRect(0, 0, m_totalWidth, m_totalHeight), Qt::blue); p.save(); p.translate(-horizontalOffset(), -verticalOffset()); for (auto rect : m_rect_cache) { //qDebug()<paint(&p, opt, index); } p.restore(); } void ComputerView::mousePressEvent(QMouseEvent *event) { bool singleClicked = qApp->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick); if (singleClicked) { if (!m_touch_active_timer->isActive()) { m_touch_active_timer->start(1100); } } if (event->button() == Qt::LeftButton) { m_isLeftButtonPressed = true; m_rubberBand->hide(); m_lastPressedPoint = event->pos(); m_lastPressedLogicPoint = event->pos() + QPoint(horizontalOffset(), verticalOffset()); } else m_rubberBand->hide(); QAbstractItemView::mousePressEvent(event); this->viewport()->update(); } void ComputerView::mouseMoveEvent(QMouseEvent *event) { QAbstractItemView::mouseMoveEvent(event); if (m_isLeftButtonPressed) { auto pos = event->pos(); auto offset = QPoint(horizontalOffset(), verticalOffset()); auto logicPos = pos + offset; QRect logicRect = QRect(logicPos, m_lastPressedLogicPoint); m_logicRect = logicRect.normalized(); int dx = -horizontalOffset(); int dy = -verticalOffset(); auto realRect = m_logicRect.adjusted(dx, dy, dx ,dy); if (!m_rubberBand->isVisible()) m_rubberBand->show(); m_rubberBand->setGeometry(realRect); } else { m_rubberBand->hide(); } } void ComputerView::mouseReleaseEvent(QMouseEvent *event) { m_rubberBand->hide(); m_isLeftButtonPressed = false; QAbstractItemView::mouseReleaseEvent(event); } void ComputerView::mouseDoubleClickEvent(QMouseEvent *event) { if(event->button() == Qt::RightButton){ m_isRightButonDClick = true; }else{ m_isRightButonDClick = false; } QAbstractItemView::mouseDoubleClickEvent(event); } void ComputerView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles) { QAbstractItemView::dataChanged(topLeft, bottomRight, roles); this->viewport()->update(); } void ComputerView::dragEnterEvent(QDragEnterEvent *event) { event->accept(); } void ComputerView::dragMoveEvent(QDragMoveEvent *event) { event->accept(); auto newIndex = indexAt(event->pos()); if (newIndex != m_hoverIndex) { m_hoverIndex = newIndex; this->viewport()->update(); } } void ComputerView::dropEvent(QDropEvent *event) { bool isMoveOp = event->keyboardModifiers() & Qt::ShiftModifier; auto index = indexAt(event->pos()); if (index.isValid()) { m_model->dropMimeData(event->mimeData(), isMoveOp? Qt::MoveAction: Qt::CopyAction, index.row(), index.column(), index.parent()); } } void ComputerView::rowsInserted(const QModelIndex &parent, int start, int end) { m_timer->start(); QAbstractItemView::rowsInserted(parent, start, end); } void ComputerView::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) { m_timer->start(); QAbstractItemView::rowsAboutToBeRemoved(parent, start, end); } void ComputerView::layoutVolumeIndexes(const QModelIndex &volumeParentIndex) { int rowCount = m_model->rowCount(volumeParentIndex); if (rowCount <= 0) return; //add tab // m_rect_cache.insert(volumeParentIndex, QRect(QPoint(0, m_totalHeight), QSize(this->viewport()->width(), m_tabPadding))); m_totalHeight += m_tabPadding; //layout indexes int tmpX = 0; int maxColumnCount = 0; //if view's width is not enough, expand the m_totalWidth to ensure scroallble if (m_totalWidth < 2 * (m_hSpacing + m_volumeItemFixedSize.width())) { maxColumnCount = 1; } else { maxColumnCount = this->viewport()->width()/(m_hSpacing + m_volumeItemFixedSize.width());// - 1; } int cloumn = 0; for (int row = 0; row < rowCount; row++) { //layout next row if (cloumn > maxColumnCount - 1) { //m_totalWidth = tmpX + m_hSpacing + m_volumeItemFixedSize.width(); cloumn = 1; tmpX = m_hSpacing; m_totalHeight = m_totalHeight + m_volumeItemFixedSize.height() + m_vSpacing; } else { tmpX = m_hSpacing + cloumn*(m_hSpacing+m_volumeItemFixedSize.width()); cloumn++; } auto index = m_model->index(row, 0, volumeParentIndex); m_rect_cache.insert(index, QRect(QPoint(tmpX, m_totalHeight), m_volumeItemFixedSize)); } m_totalHeight = m_totalHeight + m_volumeItemFixedSize.height() + m_vSpacing; } void ComputerView::layoutRemoteIndexes(const QModelIndex &remoteParentIndex) { int rowCount = m_model->rowCount(remoteParentIndex); if (rowCount <= 0) return; //add tab m_rect_cache.insert(remoteParentIndex, QRect(QPoint(0, m_totalHeight), QSize(this->viewport()->width(), m_tabPadding))); m_totalHeight += m_tabPadding + 10; //layout indexes int tmpX = 0; int maxColumnCount = 0; //if view's width is not enough, expand the m_totalWidth to ensure scroallble if (m_totalWidth < 2 * (m_hSpacing + m_remoteItemFixedSize.width())) { //m_totalWidth = m_hSpacing + m_remoteItemFixedSize.width(); maxColumnCount = 1; } else { maxColumnCount = this->viewport()->width()/(m_hSpacing + m_remoteItemFixedSize.width());// - 1; } int cloumn = 0; for (int row = 0; row < rowCount; row++) { //layout next row if (cloumn > maxColumnCount - 1) { //m_totalWidth = tmpX + m_hSpacing + m_volumeItemFixedSize.width(); cloumn = 1; tmpX = m_hSpacing; m_totalHeight = m_totalHeight + m_remoteItemFixedSize.height() + m_vSpacing; } else { tmpX = m_hSpacing + cloumn*(m_hSpacing+m_remoteItemFixedSize.width()); cloumn++; } auto index = m_model->index(row, 0, remoteParentIndex); m_rect_cache.insert(index, QRect(QPoint(tmpX, m_totalHeight), m_remoteItemFixedSize)); } m_totalHeight = m_totalHeight + m_remoteItemFixedSize.height() + m_vSpacing; } void ComputerView::layoutNetworkIndexes(const QModelIndex &networkParentIndex) { int rowCount = m_model->rowCount(networkParentIndex); if (rowCount <= 0) return; //add tab m_rect_cache.insert(networkParentIndex, QRect(QPoint(0, m_totalHeight), QSize(this->viewport()->width(), m_tabPadding))); m_totalHeight += m_tabPadding + 10; //layout indexes int tmpX = 0; int maxColumnCount = 0; //if view's width is not enough, expand the m_totalWidth to ensure scroallble if (m_totalWidth < 2 * (m_hSpacing + m_networkItemFixedSize.width())) { maxColumnCount = 1; } else { maxColumnCount = this->viewport()->width()/(m_hSpacing + m_networkItemFixedSize.width());// - 1; } int cloumn = 0; for (int row = 0; row < rowCount; row++) { //layout next row if (cloumn > maxColumnCount - 1) { //m_totalWidth = tmpX + m_hSpacing + m_volumeItemFixedSize.width(); cloumn = 1; tmpX = m_hSpacing; m_totalHeight = m_totalHeight + m_networkItemFixedSize.height() + m_vSpacing; } else { tmpX = m_hSpacing + cloumn*(m_hSpacing+m_networkItemFixedSize.width()); cloumn++; } auto index = m_model->index(row, 0, networkParentIndex); m_rect_cache.insert(index, QRect(QPoint(tmpX, m_totalHeight), m_networkItemFixedSize)); } m_totalHeight = m_totalHeight + m_networkItemFixedSize.height() + m_vSpacing; } peony-extensions/peony-extension-computer-view/computer-view/computer-model.h0000664000175000017500000000534315257160264026727 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef COMPUTERMODEL_H #define COMPUTERMODEL_H #include #include class AbstractComputerItem; QString getRootUnixDevice(const QString &mountPath); class ComputerModel : public QAbstractItemModel { friend class ComputerNetworkItem; friend class ComputerVolumeItem; friend class ComputerRemoteVolumeItem; Q_OBJECT public: explicit ComputerModel(QObject *parent = nullptr); void beginInsertItem(const QModelIndex &parent, int row); void endInsterItem(); void beginRemoveItem(const QModelIndex &parent, int row); void endRemoveItem(); QModelIndex createItemIndex(int row, QObject *item); // Basic functionality: QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; // Editable: bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; Qt::ItemFlags flags(const QModelIndex& index) const override; bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); QString tryGetVolumeUriFromMountRoot(const QString &mountRootUri); QString tryGetVolumeRealUriFromUri(const QString &uri); void addRealUri(const QString &realUri); void removeRealUri(const QString &realUri); void refresh(); Q_SIGNALS: void updateLocationRequest(const QString &uri); void invalidateRequest(); void updateRequest(); private: AbstractComputerItem *m_parentNode; QMap m_volumeTargetMap; QList m_volumeRealUri; }; #endif // COMPUTERMODEL_H peony-extensions/peony-extension-computer-view/computer-view/computer-user-share-item.cpp0000664000175000017500000001071115257160264031167 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2023, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * */ #include "computer-user-share-item.h" #include "computer-model.h" #include #include #include #ifdef KY_SDK_DISKINFO #include #endif void query_file_info_async_callback(GFile *file, GAsyncResult *res, ComputerUserShareItem* p_this); ComputerUserShareItem::ComputerUserShareItem(GVolume *volume, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent) : AbstractComputerItem(model, parentNode, parent) { m_cancellable = g_cancellable_new(); m_model->beginInsertItem(parentNode->itemIndex(), parentNode->m_children.count()); parentNode->m_children<property("isDataEncrypted").toBool()) { setProperty("emblemIconName", "emblem-unlocked"); } m_model->endInsterItem(); m_file = g_file_new_for_uri("file:///data"); m_unixDeviceName = getRootUnixDevice(m_uri.split("file://").last()); GFile* file = g_file_new_for_uri("file:///data"); GFileInfo* fileInfo = g_file_query_info(file, G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nullptr, nullptr); if (g_file_info_get_attribute_boolean(fileInfo, G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT)) { updateInfoAsync(); } if (file) g_object_unref(file); if (fileInfo) g_object_unref(fileInfo); Q_UNUSED(volume); } ComputerUserShareItem::~ComputerUserShareItem() { g_cancellable_cancel(m_cancellable); g_object_unref(m_cancellable); if (m_file) g_object_unref(m_file); } void ComputerUserShareItem::updateInfoAsync() { g_file_query_filesystem_info_async(m_file, "filesystem::*", 0, m_cancellable, GAsyncReadyCallback(query_file_info_async_callback), this); } void ComputerUserShareItem::check() { } QModelIndex ComputerUserShareItem::itemIndex() { return m_model->createItemIndex(m_parentNode->m_children.indexOf(this), this); } void query_file_info_async_callback(GFile *file, GAsyncResult *res, ComputerUserShareItem* p_this) { GError *err = nullptr; GFileInfo *info = g_file_query_info_finish(file, res, &err); if (err) { g_error_free(err); return; } if (info) { quint64 total = g_file_info_get_attribute_uint64(info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE); quint64 used = g_file_info_get_attribute_uint64(info, G_FILE_ATTRIBUTE_FILESYSTEM_USED); quint64 free = g_file_info_get_attribute_uint64(info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE); #ifdef KY_SDK_DISKINFO if (!p_this->m_unixDeviceName.isNull() && !p_this->m_unixDeviceName.isEmpty()) { char *tmpTotalSize = kdk_get_hard_disk_size(p_this->m_unixDeviceName.toUtf8().constData()); if (tmpTotalSize) { quint64 totalSize = atoi(tmpTotalSize); std::free(tmpTotalSize); quint64 freeSize = kdk_get_partition_available_space(p_this->m_unixDeviceName.toUtf8().constData()); if (totalSize > 0 && freeSize > 0) { totalSize = totalSize * 1024 * 1024; freeSize = freeSize * 1024 * 1024; total = totalSize; free = freeSize; } } } #endif char *fs_type = g_file_info_get_attribute_as_string(info, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE); QString type(fs_type); p_this->m_totalSpace = total; p_this->m_usedSpace = used; if (type.contains("ext")) { p_this->m_usedSpace = total - free; } auto index = p_this->itemIndex(); p_this->m_model->dataChanged(index, index); g_object_unref(info); } } peony-extensions/peony-extension-computer-view/computer-view/computer-model.cpp0000664000175000017500000001751115257160277027266 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include #include "computer-model.h" #include "abstract-computer-item.h" #include "computer-volume-item.h" #include "computer-remote-volume-item.h" #include "computer-network-item.h" #include "file-info.h" #include "file-utils.h" #include "file-operation-utils.h" #include "file-operation-manager.h" #include #include ComputerModel::ComputerModel(QObject *parent) : QAbstractItemModel(parent) { beginResetModel(); m_parentNode = new AbstractComputerItem(this, nullptr, this); auto computerItem = new ComputerVolumeItem(nullptr, this, m_parentNode); computerItem->findChildren(); auto remoteItem = new ComputerRemoteVolumeItem("computer:///", this, m_parentNode); m_parentNode->m_children<findChildren(); // auto networkItem = new ComputerNetworkItem("network:///", this, m_parentNode); // m_parentNode->m_children<findChildren(); connect(Peony::FileOperationManager::getInstance(), &Peony::FileOperationManager::operationFinished, this, &ComputerModel::refresh); endResetModel(); } void ComputerModel::beginInsertItem(const QModelIndex &parent, int row) { beginInsertRows(parent, row, row); } void ComputerModel::endInsterItem() { endInsertRows(); } void ComputerModel::beginRemoveItem(const QModelIndex &parent, int row) { beginRemoveRows(parent, row, row); } void ComputerModel::endRemoveItem() { endRemoveRows(); } QModelIndex ComputerModel::createItemIndex(int row, QObject *item) { return createIndex(row, 0, item); } QModelIndex ComputerModel::index(int row, int column, const QModelIndex &parent) const { if (!parent.isValid()) { auto item = m_parentNode->m_children.at(row); return createIndex(row, column, item); } auto parentNode = static_cast(parent.internalPointer()); if (parentNode->m_children.count() < row) return QModelIndex(); return createIndex(row, column, parentNode->m_children.at(row)); } QModelIndex ComputerModel::parent(const QModelIndex &index) const { auto item = static_cast(index.internalPointer()); if (item->m_parentNode) { return item->m_parentNode->itemIndex(); } return QModelIndex(); } int ComputerModel::rowCount(const QModelIndex &parent) const { if (!parent.isValid()) return m_parentNode->m_children.count(); auto item = static_cast(parent.internalPointer()); return item->m_children.count(); } int ComputerModel::columnCount(const QModelIndex &parent) const { return 1; } QVariant ComputerModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); auto item = static_cast(index.internalPointer()); switch (role) { case Qt::DisplayRole: return item->displayName(); case Qt::DecorationRole: { if (item->m_parentNode == m_parentNode) return QVariant(); return item->icon(); } case Qt::ToolTipRole: return item->displayName(); default: return QVariant(); } } bool ComputerModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (data(index, role) != value) { // FIXME: Implement me! Q_EMIT dataChanged(index, index, QVector() << role); return true; } return false; } Qt::ItemFlags ComputerModel::flags(const QModelIndex &index) const { if (!index.isValid()) return Qt::NoItemFlags; return QAbstractItemModel::flags(index); // FIXME: Implement me! } bool ComputerModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) { if (data->urls().isEmpty()) return false; auto i = index(row, column, parent); if (i.isValid()) { auto item = static_cast(i.internalPointer()); if (!item->uri().isEmpty()) { if (item->canUnmount()) { QStringList sourcesUris; for (auto url : data->urls()) { sourcesUris<uri(), true, action == Qt::CopyAction); connect(operation, &Peony::FileOperation::operationFinished, item, [=](){ if (!operation->hasError()) { Q_EMIT updateLocationRequest(item->uri()); } }); } } } return false; } QString ComputerModel::tryGetVolumeUriFromMountRoot(const QString &mountRootUri) { auto value = m_volumeTargetMap.key(mountRootUri); return value; } QString ComputerModel::tryGetVolumeRealUriFromUri(const QString &uri) { QString realUri = ""; if (uri.isEmpty()) { return realUri; } if (uri == "file:///data" && Peony::FileUtils::isFileExsit("file:///data/usershare")) { return "computer:///ukui-data-volume"; } QList::iterator iter; for(iter = m_volumeRealUri.begin(); iter != m_volumeRealUri.end(); iter++) { realUri = *iter; auto info = Peony::FileInfo::fromUri(realUri); QString targetUri = info->targetUri(); qDebug()<<"real uri"<::iterator iter; for(iter = m_volumeRealUri.begin(); iter != m_volumeRealUri.end(); iter++){ if (*iter == realUri) { return; } } m_volumeRealUri.append(realUri); return; } void ComputerModel::removeRealUri(const QString &realUri) { qDebug()<<"remove volume real uri"<::iterator iter; int index = 0; for(iter = m_volumeRealUri.begin(); iter != m_volumeRealUri.end(); iter++){ if (*iter == realUri) { m_volumeRealUri.removeAt(index); return; } index++; } return; } void ComputerModel::refresh() { for (auto child : m_parentNode->m_children) { for (auto child2 : child->m_children) { if (auto item = qobject_cast(child2)) { item->updateInfo(); } } } } QString getRootUnixDevice(const QString &mountPath) { QString unixDevice; if (mountPath.isEmpty()) { return unixDevice; } GUnixMountEntry* entry = g_unix_mount_at(mountPath.toUtf8().constData(), nullptr); if(!entry) entry = g_unix_mount_for(mountPath.toUtf8().constData(), nullptr); if(!entry) return unixDevice; const char* device = g_unix_mount_get_device_path(entry); unixDevice = device; g_unix_mount_free(entry); return unixDevice; } peony-extensions/peony-extension-computer-view/computer-view/computer-view.pri0000664000175000017500000000161515257160264027142 0ustar fengfengINCLUDEPATH += $$PWD CONFIG += link_pkgconfig PKGCONFIG += gio-unix-2.0 gudev-1.0 HEADERS += \ $$PWD/abstract-computer-item.h \ $$PWD/computer-item-delegate.h \ $$PWD/computer-model.h \ $$PWD/computer-network-item.h \ $$PWD/computer-personal-item.h \ $$PWD/computer-proxy-model.h \ $$PWD/computer-remote-volume-item.h \ $$PWD/computer-view-style.h \ $$PWD/computer-view.h \ $$PWD/computer-user-share-item.h \ $$PWD/computer-volume-item.h SOURCES += \ $$PWD/abstract-computer-item.cpp \ $$PWD/computer-item-delegate.cpp \ $$PWD/computer-model.cpp \ $$PWD/computer-network-item.cpp \ $$PWD/computer-personal-item.cpp \ $$PWD/computer-proxy-model.cpp \ $$PWD/computer-remote-volume-item.cpp \ $$PWD/computer-view-style.cpp \ $$PWD/computer-view.cpp \ $$PWD/computer-user-share-item.cpp \ $$PWD/computer-volume-item.cpp peony-extensions/peony-extension-computer-view/peony-extension-computer-view_bo_CN.ts0000664000175000017500000005452715257160264030404 0ustar fengfeng ComputerItemDelegate You should mount volume first à½�ོག་མར་à½�ུལ་བགོས་འགེལ་དགོསà¼� ComputerNetworkItem Network Neighborhood དྲ་à½�ོག་གི་à½�ྱིམ་མཚེསà¼� ComputerRemoteVolumeItem Remote རྒྱང་རིང་གི་དཀར་ཆག ComputerUserShareItem User Share གཞི་གྲངས་མཉམ་སྤྱོདà¼� Data གཞི་གྲངས་སྡེརà¼� ComputerVolumeItem Volume རང་སའི་à½�ུལ་བགོསà¼� System Disk File System ཡིག་ཆའི་མ་ལག Data གཞི་གྲངས་སྡེརà¼� Intel::ComputerItemDelegate You should mount volume first à½�ོག་མར་à½�ུལ་བགོས་འགེལ་དགོསà¼� Intel::ComputerNetworkItem Network Neighborhood དྲ་à½�ོག་གི་à½�ྱིམ་མཚེསà¼� Intel::ComputerRemoteVolumeItem Remote རྒྱང་རིང་གི་དཀར་ཆག Intel::ComputerViewContainer Connect a server རྒྱང་རིང་ཞབས་ཞུའི་ཆས་སྦྲེལ་མà½�ུད་བྱ་དགོསà¼� Unmount ལེན་པà¼� Eject འཕར་à½�ོནà¼� Property གà½�ོགས་གཤིསà¼� You have to mount this volume first à½�ོག་མར་à½�ུལ་བགོས་འགེལ་དགོསà¼� Intel::ComputerVolumeItem Volume རང་སའི་à½�ུལ་བགོསà¼� System Disk User Disk LoginRemoteFilesystem Connect to Sever ཞབས་ཞུའི་ཆས་དང་སྦྲེལ་ཡོདà¼� server information ཞབས་ཞུ་ཆས་ཀྱི་ཆ་འཕྲིནà¼� user information སྤྱོད་མà½�ན་གྱི་ཆ་འཕྲིནà¼� tag གདོང་འཛརà¼� user སྤྱོད་མà½�ན་གྱི་མིང་à¼� password གསང་ཨང་à¼� protocol གྲོས་མà½�ུནà¼� server ཞབས་ཞུ་སྣེའི་ཤག་གནསà¼� directory དཀར་ཆག SAMBA SAMBA FTP FTP / / port མà½�ུད་སྣེà¼� 20 20 21 21 137 137 138 138 139 139 445 445 ok གà½�ན་འà½�ེལà¼� cancel འདོར་བà¼� Peony::ComputerViewContainer Connect a server རྒྱང་རིང་ཞབས་ཞུའི་ཆས་སྦྲེལ་མà½�ུད་བྱ་དགོསà¼� sftp://, etc... 如sftp://... Cancel å�–消 OK 确定 Unmount ལེན་པà¼� Eject འཕར་à½�ོནà¼� Format Open In New Window Open In New Tab format རྣམ་པར་འཇོག་པà¼� Property གà½�ོགས་གཤིསà¼� You have to mount this volume first à½�ོག་མར་à½�ུལ་བགོས་འགེལ་དགོསà¼� Peony::DriveRename Rename མིང་བསྒྱུར་བà¼� Device name: སྒྲིག་ཆས་ཀྱི་མིང་གཤམ་གསལà¼� Warning à½�་ཚིག་སྒྲོག་པà¼� Renaming cannot start with a decimal point, Please re-enter! མིང་བསྒྱུར་བ་ནི་ཆེས་ཆུང་བ་ནས་འགོ་རྩོམ་མི་à½�ུབ་པསà¼� ཡང་བསà¾�ྱར་ནང་དུ་ཞུགས་རོགསà¼� The device name exceeds the character limit, rename failed! སྒྲིག་ཆས་ཀྱི་མིང་དེ་ཡི་གེའི་ཚད་ལས་བརྒལ་ནས་མིང་བསྒྱུར་མ་à½�ུབ་པ་རེདà¼� Renaming will unmount the device. Do you want to continue? མིང་བསྒྱུར་ན་སྒྲིག་ཆས་འདི་མེད་པར་བཟོ་སྲིདà¼� à½�ྱོད་ཀྱིས་ད་དུང་མུ་མà½�ུད་དུ་རྒྱུན་འà½�ྱོངས་བྱེད་དགོས་སམà¼� The device may not support the rename operation, rename failed! སྒྲིག་ཆས་འདིས་མིང་བསྒྱུར་བའི་བཀོལ་སྤྱོད་ལ་རྒྱབ་སà¾�ྱོར་བྱེད་མི་སྲིདà¼� མིང་བསྒྱུར་མ་à½�ུབ་པ་རེདà¼� QObject Computer View གློག་ཀླད་མà½�ོང་རིསà¼� Show drives, network and personal directories Show drives, network and personal directories. སྒྲིག་ཆས་à½�ུལ་བགོས་དང་à¼�དྲ་རྒྱའི་དཀར་ཆག་དང་མི་སྒེར་གྱི་དཀར་ཆག་འཆར་མངོན་བྱེད་པà¼� One or more programs prevented the unmount operation. བྱ་རིམ་གཅིག་གམ་མང་པོས་བཤིག་འདོན་བཀོལ་སྤྱོད་བྱེད་པར་བཀག་འགོག་བྱསà¼� Unmount failed བཤིག་འདོན་ཕམ་པà¼� Error: %1 Do you want to unmount forcely? ནོར་འà½�ྲུལà¼�:%1 བཙན་ཤེད་ཀྱིས་བཤིག་འདོན་བྱེད་དམà¼� It need to synchronize before operating the device,place wait! དེས་སྒྲིག་ཆས་བཀོལ་སྤྱོད་མ་བྱས་གོང་ལ་དུས་མཉམ་དུ་སྒུག་དགོསà¼� The device has been mount successfully! སྒྲིག་ཆས་འདི་བདེ་བླག་ངང་སྒྲིག་སྦྱོར་བྱས་པ་རེདà¼� Data synchronization is complete,the device has been unmount successfully! གཞི་གྲངས་དུས་གཅིག་à½�ུ་ལེགས་འགྲུབ་བྱུང་བ་དང་à¼� སྒྲིག་ཆས་འདི་ལེགས་འགྲུབ་བྱུང་མེདà¼� Error: %1 ནོར་འà½�ྲུལà¼� %1\n Eject device failed, the reason may be that the device has been removed, etc. Unable to unmount it, you may need to close some programs, such as: GParted etc. བཤིག་འདོན་བྱེད་à½�བས་བྲལ་བས་à½�ྱེད་ཀྱིས་སྔོན་ལ་བྱ་རིམ་à½�་ཤས་à½�་རྒྱག་དགོསà¼�དཔེར་ན་à½�ུལ་བགོས་ཀྱི་རྩོམ་སྒྲིག་ཆས་སོགསà¼� %1 %1 Eject failed འཕར་à½�ོན་ཕམ་པà¼� Cancel འདོར་བà¼� Eject Anyway གང་ལྟར་ཀྱང་འཕར་à½�ོན་བྱེད་དགོསà¼� Warning à½�་ཚིག་སྒྲོག་པà¼� The device may not support the rename operation, rename failed! སྒྲིག་ཆས་འདིས་མིང་བསྒྱུར་བའི་བཀོལ་སྤྱོད་ལ་རྒྱབ་སà¾�ྱོར་བྱེད་མི་སྲིདà¼� མིང་བསྒྱུར་མ་à½�ུབ་པ་རེདà¼� Message recipient disconnected from message bus without replying! log remote error peony-extensions/peony-extension-computer-view/peony-extension-computer-view_es.ts0000664000175000017500000004574515257160264030035 0ustar fengfeng ComputerItemDelegate You should mount volume first Primero debe montar el volumen ComputerNetworkItem Network Neighborhood Vecindad de la red ComputerRemoteVolumeItem Remote Remoto ComputerUserShareItem User Share 本机共享 Data Datos ComputerVolumeItem Volume Volumen System Disk File System Sistema de archivos Data Datos Intel::ComputerItemDelegate You should mount volume first Primero debe montar el volumen Intel::ComputerNetworkItem Network Neighborhood Vecindad de la red Intel::ComputerRemoteVolumeItem Remote Remoto Intel::ComputerViewContainer Connect a server Conectar un servidor Unmount Desmontar Eject Expulsar Property Propiedad You have to mount this volume first Primero tienes que montar este volumen Intel::ComputerVolumeItem Volume Volumen System Disk User Disk LoginRemoteFilesystem Connect to Sever Conectar a Sever server information Información del servidor user information Información del usuario tag etiqueta user usuario password contraseña protocol protocolo server servidor directory directorio SAMBA FTP FTP / / port puerto 20 20 21 21 137 137 138 138 139 139 445 445 ok De acuerdo cancel Cancelar Peony::ComputerViewContainer Connect a server Conectar un servidor sftp://, etc... 如sftp://... Cancel å�–消 OK 确定 Unmount Desmontar Eject Expulsar Format Open In New Window Open In New Tab format formato Property Propiedad You have to mount this volume first Primero tienes que montar este volumen Peony::DriveRename Rename Rebautizar Device name: Nombre del dispositivo: Warning Advertencia Renaming cannot start with a decimal point, Please re-enter! El cambio de nombre no puede comenzar con un punto decimal, ¡vuelva a ingresar! The device name exceeds the character limit, rename failed! El nombre del dispositivo supera el límite de caracteres, ¡error en el cambio de nombre! Renaming will unmount the device. Do you want to continue? Al cambiar el nombre, se desmontará el dispositivo. ¿Quieres continuar? QObject Computer View Vista de computadora Show drives, network and personal directories Show drives, network and personal directories. Mostrar unidades, redes y directorios personales One or more programs prevented the unmount operation. Uno o más programas impedían la operación de desmontaje. Unmount failed Error al desmontar Error: %1 Do you want to unmount forcely? 错误:%1 是å�¦å¼ºåˆ¶å�¸è½½ï¼Ÿ It need to synchronize before operating the device,place wait! Es necesario sincronizarse antes de operar el dispositivo, ¡espere! The device has been mount successfully! ¡El dispositivo se ha montado con éxito! Data synchronization is complete,the device has been unmount successfully! ¡La sincronización de datos se ha completado, el dispositivo se ha desmontado correctamente! Error: %1 Error: %1 Unable to unmount it, you may need to close some programs, such as: GParted etc. Al no poder desmontarlo, es posible que deba cerrar algunos programas, como: GParted, etc. %1 %1 Eject device failed, the reason may be that the device has been removed, etc. Error en el dispositivo de expulsión, la razón puede ser que el dispositivo se haya eliminado, etc. Eject failed Error de expulsión Cancel å�–消 Eject Anyway 无论如何弹出 Warning Advertencia The device may not support the rename operation, rename failed! Es posible que el dispositivo no admita la operación de cambio de nombre, ¡error en el cambio de nombre! Message recipient disconnected from message bus without replying! Message recipient disconnected from message bus without replying ¡El destinatario del mensaje se desconectó del bus de mensajes sin responder! log remote error Error de registro remoto peony-extensions/peony-extension-computer-view/peony-extension-computer-view_fr.ts0000664000175000017500000004610315257160264030022 0ustar fengfeng ComputerItemDelegate You should mount volume first Vous devez d’abord monter le volume ComputerNetworkItem Network Neighborhood Voisinage du réseau ComputerRemoteVolumeItem Remote Lointain ComputerUserShareItem User Share 本机共享 Data Données ComputerVolumeItem Volume Volume System Disk File System Système de fichiers Data Données Intel::ComputerItemDelegate You should mount volume first Vous devez d’abord monter le volume Intel::ComputerNetworkItem Network Neighborhood Voisinage du réseau Intel::ComputerRemoteVolumeItem Remote Lointain Intel::ComputerViewContainer Connect a server Connecter un serveur Unmount Démonter Eject Éjecter Property Propriété You have to mount this volume first Vous devez d’abord monter ce volume Intel::ComputerVolumeItem Volume Volume System Disk User Disk LoginRemoteFilesystem Connect to Sever Se connecter à Sever server information Informations sur le serveur user information Informations sur l’utilisateur tag étiquette user utilisateur password mot de passe protocol protocole server serveur directory répertoire SAMBA FTP FTP / / port port 20 20 21 21 137 137 138 138 139 139 445 445 ok D’accord cancel Annuler Peony::ComputerViewContainer Connect a server Connecter un serveur sftp://, etc... 如sftp://... Cancel å�–消 OK 确定 Unmount Démonter Eject Éjecter Format Open In New Window Open In New Tab format format Property Propriété You have to mount this volume first Vous devez d’abord monter ce volume Peony::DriveRename Rename Renommer Device name: Nom de l’appareil : Warning Avertissement Renaming cannot start with a decimal point, Please re-enter! Le renommage ne peut pas commencer par une virgule, veuillez entrer à nouveau ! The device name exceeds the character limit, rename failed! Le nom de l’appareil dépasse la limite de caractères, le renommage a échoué ! Renaming will unmount the device. Do you want to continue? Le changement de nom démontera l’appareil. Voulez-vous continuer ? QObject Computer View Vue de l’ordinateur Show drives, network and personal directories Show drives, network and personal directories. Afficher les lecteurs, le réseau et les répertoires personnels One or more programs prevented the unmount operation. Un ou plusieurs programmes ont empêché l’opération de démontage. Unmount failed Echec du démontage Error: %1 Do you want to unmount forcely? 错误:%1 是å�¦å¼ºåˆ¶å�¸è½½ï¼Ÿ It need to synchronize before operating the device,place wait! Il faut se synchroniser avant d’utiliser l’appareil, attendez ! The device has been mount successfully! L’appareil a été monté avec succès ! Data synchronization is complete,the device has been unmount successfully! La synchronisation des données est terminée, l’appareil a été démonté avec succès ! Error: %1 Erreur : %1 Unable to unmount it, you may need to close some programs, such as: GParted etc. Impossible de le démonter, vous devrez peut-être fermer certains programmes, tels que : GParted etc. %1 %1 Eject device failed, the reason may be that the device has been removed, etc. L’appareil d’éjection a échoué, la raison peut être que le périphérique a été retiré, etc. Eject failed Echec de l’éjection Cancel å�–消 Eject Anyway 无论如何弹出 Warning Avertissement The device may not support the rename operation, rename failed! L’appareil peut ne pas prendre en charge l’opération de renommage, le renommage a échoué ! Message recipient disconnected from message bus without replying! Message recipient disconnected from message bus without replying Le destinataire du message s’est déconnecté du bus de messages sans répondre ! log remote error Consigner l’erreur à distance peony-extensions/peony-extension-computer-view/peony-extension-computer-view_de.ts0000664000175000017500000004607215257160264030010 0ustar fengfeng ComputerItemDelegate You should mount volume first Sie sollten zuerst das Volume mounten ComputerNetworkItem Network Neighborhood Netzwerk-Nachbarschaft ComputerRemoteVolumeItem Remote Abgelegen ComputerUserShareItem User Share 本机共享 Data Daten ComputerVolumeItem Volume Volumen System Disk File System Dateisystem Data Daten Intel::ComputerItemDelegate You should mount volume first Sie sollten zuerst das Volume mounten Intel::ComputerNetworkItem Network Neighborhood Netzwerk-Nachbarschaft Intel::ComputerRemoteVolumeItem Remote Abgelegen Intel::ComputerViewContainer Connect a server Verbinden eines Servers Unmount Aushängen Eject Ausstoßen Property Eigentum You have to mount this volume first Sie müssen dieses Volume zuerst mounten Intel::ComputerVolumeItem Volume Volumen System Disk User Disk LoginRemoteFilesystem Connect to Sever Mit Server verbinden server information Server-Informationen user information Benutzerinformationen tag Etikett user Benutzer password Passwort protocol Protokoll server Server directory Verzeichnis SAMBA FTP FTP / / port Hafen 20 20 21 21 137 137 138 138 139 139 445 445 ok Okay cancel Abbrechen Peony::ComputerViewContainer Connect a server Verbinden eines Servers sftp://, etc... 如sftp://... Cancel å�–消 OK 确定 Unmount Aushängen Eject Ausstoßen Format Open In New Window Open In New Tab format Format Property Eigentum You have to mount this volume first Sie müssen dieses Volume zuerst mounten Peony::DriveRename Rename Umbenennen Device name: Name des Geräts: Warning Warnung Renaming cannot start with a decimal point, Please re-enter! Die Umbenennung darf nicht mit einem Komma beginnen, bitte erneut eingeben! The device name exceeds the character limit, rename failed! Der Gerätename überschreitet die Zeichenbegrenzung, Umbenennung fehlgeschlagen! Renaming will unmount the device. Do you want to continue? Durch das Umbenennen wird die Bereitstellung des Geräts aufgehoben. Möchten Sie fortfahren? QObject Computer View Computer-Ansicht Show drives, network and personal directories Show drives, network and personal directories. Anzeigen von Laufwerken, Netzwerk- und persönlichen Verzeichnissen One or more programs prevented the unmount operation. Mindestens ein Programm verhinderte das Aufheben der Bereitstellung. Unmount failed Fehler beim Aufheben der Bereitstellung Error: %1 Do you want to unmount forcely? 错误:%1 是å�¦å¼ºåˆ¶å�¸è½½ï¼Ÿ It need to synchronize before operating the device,place wait! Es muss synchronisiert werden, bevor das Gerät in Betrieb genommen wird, warten Sie! The device has been mount successfully! Das Gerät wurde erfolgreich montiert! Data synchronization is complete,the device has been unmount successfully! Die Datensynchronisierung ist abgeschlossen, das Gerät wurde erfolgreich ausgemountet! Error: %1 Fehler: %1 Unable to unmount it, you may need to close some programs, such as: GParted etc. Da es nicht möglich ist, es auszuhängen, müssen Sie möglicherweise einige Programme schließen, wie z.B.: GParted usw. %1 %1 Eject device failed, the reason may be that the device has been removed, etc. Das Auswerfen des Geräts ist fehlgeschlagen, der Grund kann sein, dass das Gerät entfernt wurde usw. Eject failed Auswurf fehlgeschlagen Cancel å�–消 Eject Anyway 无论如何弹出 Warning Warnung The device may not support the rename operation, rename failed! Das Gerät unterstützt den Umbenennungsvorgang möglicherweise nicht, Umbenennung fehlgeschlagen! Message recipient disconnected from message bus without replying! Message recipient disconnected from message bus without replying Nachrichtenempfänger vom Nachrichtenbus getrennt, ohne zu antworten! log remote error Remote-Fehler protokollieren peony-extensions/peony-extension-computer-view/peony-computer-view-plugin.cpp0000664000175000017500000000344415257160264026752 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "peony-computer-view-plugin.h" #include "computer-view-container.h" #include "intel-computer-view-container.h" #ifdef KYLIN_COMMON #include #endif #define V10_SP1_EDU "V10SP1-edu" #include #include #include Peony::PeonyComputerViewPlugin::PeonyComputerViewPlugin(QObject *parent) : QObject(parent) { QTranslator *t = new QTranslator(this); t->load(":/peony-extension-computer-view_"+QLocale::system().name()); QApplication::installTranslator(t); } int Peony::PeonyComputerViewPlugin::priority(const QString &directoryUri) { if (directoryUri == "computer:///") return 1; return -1; } Peony::DirectoryViewWidget *Peony::PeonyComputerViewPlugin::create() { #ifdef KYLIN_COMMON if (QString::fromStdString(KDKGetPrjCodeName()) == V10_SP1_EDU) { return new Intel::ComputerViewContainer; } else { return new ComputerViewContainer; } #else return new ComputerViewContainer; #endif } peony-extensions/peony-extension-computer-view/computer-view-intel/0000775000175000017500000000000015257160277024732 5ustar fengfengpeony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-personal-item.cpp0000664000175000017500000000272715257160264033166 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "intel-computer-personal-item.h" #include "intel-computer-model.h" #include using namespace Intel; ComputerPersonalItem::ComputerPersonalItem(const QString &uri, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent) : AbstractComputerItem(model, parentNode, parent) { if (!parentNode) { m_uri = "file://" + QStandardPaths::writableLocation(QStandardPaths::HomeLocation); } else { m_uri = uri; } } const QString ComputerPersonalItem::displayName() { //FIXME: return nullptr; } void ComputerPersonalItem::findChildren() { //FIXME: } void ComputerPersonalItem::clearChildren() { //FIXME: } ././@LongLink0000644000000000000000000000015100000000000011600 Lustar rootrootpeony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-remote-volume-item.cpppeony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-remote-volume-item0000664000175000017500000001712315257160264033356 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "intel-computer-remote-volume-item.h" #include "intel-computer-model.h" #include "file-utils.h" #include #include using namespace Intel; ComputerRemoteVolumeItem::ComputerRemoteVolumeItem(const QString &uri, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent) : AbstractComputerItem(model, parentNode, parent) { m_uri = uri; m_cancellable = g_cancellable_new(); updateInfo(); m_model->m_volumeTargetMap.insert(Peony::FileUtils::getTargetUri(uri), uri); qDebug()<<"test"; } ComputerRemoteVolumeItem::~ComputerRemoteVolumeItem() { if (m_cancellable) { g_cancellable_cancel(m_cancellable); g_object_unref(m_cancellable); } m_model->m_volumeTargetMap.remove(m_uri); } const QString ComputerRemoteVolumeItem::displayName() { if (m_uri == "computer:///") return tr("Remote"); return m_displayName; } const QIcon ComputerRemoteVolumeItem::icon() { return m_icon; } void ComputerRemoteVolumeItem::findChildren() { if (m_uri != "computer:///") return; GFile *file = g_file_new_for_uri("computer:///"); g_file_enumerate_children_async(file, G_FILE_ATTRIBUTE_STANDARD_NAME, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, 0, m_cancellable, GAsyncReadyCallback(enumerate_async_callback), this); g_object_unref(file); m_watcher = new Peony::FileWatcher("computer:///", this); connect(m_watcher, &Peony::FileWatcher::fileCreated, this, &ComputerRemoteVolumeItem::onFileAdded); connect(m_watcher, &Peony::FileWatcher::fileDeleted, this, &ComputerRemoteVolumeItem::onFileRemoved); connect(m_watcher, &Peony::FileWatcher::fileChanged, this, &ComputerRemoteVolumeItem::onFileChanged); m_watcher->startMonitor(); } void ComputerRemoteVolumeItem::updateInfo() { GFile *file = g_file_new_for_uri(m_uri.toUtf8().constData()); g_file_query_info_async(file, "*", G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, 0, m_cancellable, GAsyncReadyCallback(query_info_async_callback), this); g_object_unref(file); } void ComputerRemoteVolumeItem::unmount(GMountUnmountFlags unmountFlag) { GFile *file = g_file_new_for_uri(m_uri.toUtf8().constData()); g_file_unmount_mountable_with_operation(file, unmountFlag, nullptr, nullptr, nullptr, nullptr); g_object_unref(file); } QModelIndex ComputerRemoteVolumeItem::itemIndex() { if (!m_parentNode) return m_model->createItemIndex(0, this); return m_model->createItemIndex(m_parentNode->m_children.indexOf(this), this); } bool ComputerRemoteVolumeItem::isHidden() { return m_isUnixDevice || m_uri == "computer:///root.link"; } void ComputerRemoteVolumeItem::onFileAdded(const QString &uri) { //not include udiskã€�mobile-diskã€�local-partition etc. QString targetUri; targetUri = Peony::FileUtils::getTargetUri(uri); if(!targetUri.isEmpty() && targetUri.contains("file:///")) return; for (auto item : m_children) { if (item->uri() == uri) return; } m_model->beginInsertItem(itemIndex(), m_children.count()); auto item = new ComputerRemoteVolumeItem(uri, m_model, this); m_children<endInsterItem(); } void ComputerRemoteVolumeItem::onFileRemoved(const QString &uri) { int row = -1; for (auto item : m_children) { if (item->uri() == uri) { row = m_children.indexOf(item); break; } } if (row < 0) return; m_model->beginRemoveItem(itemIndex(), row); auto item = m_children.takeAt(row); item->deleteLater(); m_model->endRemoveItem(); } void ComputerRemoteVolumeItem::onFileChanged(const QString &uri) { for (auto item : m_children) { if (item->uri() == uri) { item->updateInfo(); return; } } } void ComputerRemoteVolumeItem::enumerate_async_callback(GFile *file, GAsyncResult *res, ComputerRemoteVolumeItem *p_this) { GError *err = nullptr; auto enumerator = g_file_enumerate_children_finish(file, res, &err); if (enumerator) { g_file_enumerator_next_files_async(enumerator, 9999, 0, p_this->m_cancellable, GAsyncReadyCallback(find_children_async_callback), p_this); } if (err) { p_this->m_isUnixDevice = true; //hide computer:/// //QMessageBox::critical(0, 0, err->message); g_error_free(err); } } void ComputerRemoteVolumeItem::find_children_async_callback(GFileEnumerator *enumerator, GAsyncResult *res, ComputerRemoteVolumeItem *p_this) { GError *err = nullptr; auto infos = g_file_enumerator_next_files_finish(enumerator, res, &err); GList *l = infos; while (l) { auto info = G_FILE_INFO(l->data); l = l->next; if (!info) continue; auto file = g_file_enumerator_get_child(enumerator, info); if (!file) continue; auto uri = g_file_get_uri(file); if (!uri) continue; //not include udiskã€�mobile-diskã€�local-partition etc. QString targetUri; targetUri = Peony::FileUtils::getTargetUri(uri); if(!targetUri.isEmpty() && targetUri.contains("file:///")) continue; p_this->m_model->beginInsertItem(p_this->itemIndex(), p_this->m_children.count()); auto item = new ComputerRemoteVolumeItem(uri, p_this->m_model, p_this); p_this->m_children<m_model->endInsterItem(); g_free(uri); g_object_unref(file); } if (infos) g_list_free_full(infos, g_object_unref); if (enumerator) { g_file_enumerator_close(enumerator, nullptr, nullptr); g_object_unref(enumerator); } if (err) { //QMessageBox::critical(0, 0, err->message); g_error_free(err); } } void ComputerRemoteVolumeItem::query_info_async_callback(GFile *file, GAsyncResult *res, ComputerRemoteVolumeItem *p_this) { GError *err = nullptr; GFileInfo *info = g_file_query_info_finish(file, res, &err); if (info) { p_this->m_isUnixDevice = g_file_info_has_attribute(info, G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE); p_this->m_displayName = g_file_info_get_attribute_string(info, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME); GIcon *icon = g_file_info_get_icon(info); const gchar * const * names = g_themed_icon_get_names(G_THEMED_ICON(icon)); if (names) { const char *name = *names; if (name) { p_this->m_icon = QIcon::fromTheme(name); } } p_this->m_model->dataChanged(p_this->itemIndex(), p_this->itemIndex()); qDebug()<m_uri<m_isUnixDevice; g_object_unref(info); } if (err) { //QMessageBox::critical(0, 0, err->message); g_error_free(err); } } peony-extensions/peony-extension-computer-view/computer-view-intel/intel-abstract-computer-item.cpp0000664000175000017500000000237315257160264033143 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "intel-abstract-computer-item.h" #include using namespace Intel; AbstractComputerItem::AbstractComputerItem(ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent) { m_model = model; m_parentNode = parentNode; } AbstractComputerItem::~AbstractComputerItem() { for (auto child : m_children) { child->deleteLater(); } } QModelIndex AbstractComputerItem::itemIndex() { return QModelIndex(); } peony-extensions/peony-extension-computer-view/computer-view-intel/intel-abstract-computer-item.h0000664000175000017500000000477215257160264032615 0ustar fengfeng#ifndef INTEL_ABSTRACTCOMPUTERITEM_H #define INTEL_ABSTRACTCOMPUTERITEM_H /* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include #include #include namespace Intel { class ComputerModel; class AbstractComputerItem : public QObject { Q_OBJECT public: enum Type { Invalid, Personal, Volume, RemoteVolume, Network }; Q_ENUM(Type) explicit AbstractComputerItem(ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent = nullptr); ~AbstractComputerItem(); virtual Type itemType() {return Invalid;} virtual const QString uri() {return nullptr;} virtual const QString displayName() {return nullptr;} virtual const QIcon icon() {return QIcon::fromTheme("text-plain");} virtual bool hasChildren() {return false;} virtual void findChildren() {} virtual void clearChildren() {} virtual void updateInfo() {} virtual void check() {} virtual bool isMount () {return false;} //for volumn virtual qint64 totalSpace() {return 0;} virtual qint64 usedSpace() {return 0;} virtual bool canUnmount() {return false;} virtual void unmount(GMountUnmountFlags unmountFlag) {} virtual void mount() {} virtual bool canEject() {return false;} virtual void eject(GMountUnmountFlags ejectFlag) {} //for remote volume virtual bool isHidden() {return false;} virtual QModelIndex itemIndex(); // add by wwn virtual bool isExpanded() {return m_expand;} virtual void expand(bool expand) {m_expand = expand;} public: ComputerModel *m_model; AbstractComputerItem *m_parentNode; QList m_children; private: bool m_expand = false; }; } #endif // ABSTRACTCOMPUTERITEM_H peony-extensions/peony-extension-computer-view/computer-view-intel/computer-view-intel.pri0000664000175000017500000000176315257160264031370 0ustar fengfengINCLUDEPATH += $$PWD HEADERS += \ $$PWD/intel-abstract-computer-item.h \ $$PWD/intel-computer-item-delegate.h \ $$PWD/intel-computer-model.h \ $$PWD/intel-computer-network-item.h \ $$PWD/intel-computer-personal-item.h \ $$PWD/intel-computer-proxy-model.h \ $$PWD/intel-computer-remote-volume-item.h \ $$PWD/intel-computer-view-style.h \ $$PWD/intel-computer-view.h \ $$PWD/intel-computer-volume-item.h \ $$PWD/intel-computer-view-container.h SOURCES += \ $$PWD/intel-abstract-computer-item.cpp \ $$PWD/intel-computer-item-delegate.cpp \ $$PWD/intel-computer-model.cpp \ $$PWD/intel-computer-network-item.cpp \ $$PWD/intel-computer-personal-item.cpp \ $$PWD/intel-computer-proxy-model.cpp \ $$PWD/intel-computer-remote-volume-item.cpp \ $$PWD/intel-computer-view-style.cpp \ $$PWD/intel-computer-view.cpp \ $$PWD/intel-computer-volume-item.cpp \ $$PWD/intel-computer-view-container.cpp RESOURCES += \ $$PWD/image.qrc peony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-volume-item.h0000664000175000017500000001005415257160277032313 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef INTEL_COMPUTERVOLUMEITEM_H #define INTEL_COMPUTERVOLUMEITEM_H #include "intel-abstract-computer-item.h" #include #include #include namespace Peony { class FileInfo; } namespace Intel { class ComputerVolumeItem : public AbstractComputerItem { Q_OBJECT public: explicit ComputerVolumeItem(GVolume *volume, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent = nullptr); explicit ComputerVolumeItem(const QString uri,ComputerModel *model,AbstractComputerItem *parentNode,QObject *parent = nullptr); ~ComputerVolumeItem(); void updateInfoAsync(); Type itemType() override {return Volume;} const QString uri() override {return m_uri;} const QString displayName() override; const QIcon icon() override; bool isMount() override; void findChildren() override; void updateInfo() override {updateInfoAsync();} void check() override; bool canEject() override; void eject(GMountUnmountFlags ejectFlag) override; bool canUnmount() override; void unmount(GMountUnmountFlags unmountFlag) override; void mount() override; QModelIndex itemIndex() override; qint64 usedSpace() override {return m_usedSpace;} qint64 totalSpace() override {return m_totalSpace;} protected: //monitor static void volume_changed_callback(GVolume *volume, ComputerVolumeItem *p_this); static void volume_removed_callback(GVolume *volume, ComputerVolumeItem *p_this); static void mount_changed_callback(GVolumeMonitor* volumeMonitor, GMount *gmount, ComputerVolumeItem *p_this); //info static void qeury_info_async_callback(GFile *file, GAsyncResult *res, ComputerVolumeItem *p_this); static void query_root_info_async_callback(GFile *file, GAsyncResult *res, ComputerVolumeItem *p_this); //mount op static void mount_async_callback(GVolume *volume, GAsyncResult *res, ComputerVolumeItem *p_this); static void unmount_async_callback(GObject *object, GAsyncResult *res, ComputerVolumeItem *p_this); static void eject_async_callback(GObject *object, GAsyncResult *res, ComputerVolumeItem *p_this); //watcher void collectInfoWhenGpartedOpen(QString uri); void onFileAdded(const QString &uri); void onFileRemoved(const QString &uri); //gparted void findChildrenWhenGPartedOpen(); static void enumerate_async_callback(GFile *file, GAsyncResult *res, ComputerVolumeItem *p_this); static void find_children_async_callback(GFileEnumerator *enumerator, GAsyncResult *res, ComputerVolumeItem *p_this); private Q_SLOTS: void onVolumeAdded(const std::shared_ptr volume); private: QString m_uri; std::shared_ptr m_volume = nullptr; std::shared_ptr m_mount = nullptr; GCancellable *m_cancellable = nullptr; GCancellable *m_tmpCancellable = nullptr; gulong m_volumeChangedHandle = 0; gulong m_mountChangedHandle = 0; gulong m_volumeRemovedHandle = 0; //info QString m_displayName; QIcon m_icon; qint64 m_totalSpace = 0; qint64 m_usedSpace = 0; Peony::FileWatcher *m_watcher = nullptr; QString m_targetUri; std::shared_ptr m_info = nullptr; }; } #endif // COMPUTERVOLUMEITEM_H peony-extensions/peony-extension-computer-view/computer-view-intel/image.qrc0000664000175000017500000000030015257160264026510 0ustar fengfeng img/go-previous-symbolic.png img/go-down-symbolic.png peony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-item-delegate.h0000664000175000017500000000376015257160264032560 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef INTEL_COMPUTERITEMDELEGATE_H #define INTEL_COMPUTERITEMDELEGATE_H #include class QListView; class AbstractComputerItem; namespace Intel { class ComputerItemDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit ComputerItemDelegate(QObject *parent = nullptr); ~ComputerItemDelegate(); protected: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; void paintVolumeItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, AbstractComputerItem *item) const; void paintRemoteItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, AbstractComputerItem *item) const; void paintNetworkItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, AbstractComputerItem *item) const; void drawTab(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, AbstractComputerItem *item) const; void drawStyledItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; private: QListView *m_styleIconView; }; } #endif // COMPUTERITEMDELEGATE_H peony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-view-style.cpp0000664000175000017500000000705415257160264032515 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2023, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * */ #include "intel-computer-view-style.h" #include #include #include using namespace Intel; static ComputerViewStyle *global_instance = nullptr; ComputerViewStyle::ComputerViewStyle(QStyle *style) : QProxyStyle(style) { } ComputerViewStyle *ComputerViewStyle::getStyle() { if (!global_instance) global_instance = new ComputerViewStyle; return global_instance; } void ComputerViewStyle::drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { if (element == PE_Frame) { return; } return QProxyStyle::drawPrimitive(element, option, painter, widget); } void ComputerViewStyle::drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { if (element == QStyle::CE_RubberBand) { //qDebug()<<"draw control rubber band"; if (qstyleoption_cast(option)) { auto rect = option->rect; QColor highlight = option->palette.color(QPalette::Active, QPalette::Highlight); painter->save(); QColor penColor = highlight; penColor.setAlpha(180); painter->setPen(penColor); QColor dimHighlight(qMin(highlight.red()/2 + 110, 255), qMin(highlight.green()/2 + 110, 255), qMin(highlight.blue()/2 + 110, 255)); dimHighlight.setAlpha(widget && widget->isTopLevel() ? 255 : 80); QLinearGradient gradient(rect.topLeft(), QPoint(rect.bottomLeft().x(), rect.bottomLeft().y())); gradient.setColorAt(0, dimHighlight.lighter(120)); gradient.setColorAt(1, dimHighlight); painter->setRenderHint(QPainter::Antialiasing, true); painter->translate(0.5, 0.5); painter->setBrush(dimHighlight); painter->drawRoundedRect(option->rect.adjusted(0, 0, -1, -1), 1, 1); QColor innerLine = Qt::white; innerLine.setAlpha(40); painter->setPen(innerLine); painter->drawRoundedRect(option->rect.adjusted(1, 1, -2, -2), 1, 1); painter->restore(); } return; } QProxyStyle::drawControl(element, option, painter, widget); } void ComputerViewStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const { //qDebug()<<"drawItemPixmap"; QProxyStyle::drawItemPixmap(painter, rect, alignment, pixmap); } void ComputerViewStyle::drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole) const { //qDebug()<<"drawItemText"; QProxyStyle::drawItemText(painter, rect, flags, pal, enabled, text, textRole); } peony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-view-container.cpp0000664000175000017500000002361215257160277033341 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "intel-computer-view-container.h" #include "intel-computer-view.h" #include "intel-computer-proxy-model.h" #include "intel-abstract-computer-item.h" #include "../login-remote-filesystem.h" #include #include #include #include #include #include #include #include #include #include #include #include using namespace Peony; using namespace Intel; static void ask_question_cb(GMountOperation *op, char *message, char **choices, ComputerViewContainer *p_this); static void ask_password_cb(GMountOperation *op, const char *message, const char *default_user, const char *default_domain, GAskPasswordFlags flags, ComputerViewContainer *p_this); static GAsyncReadyCallback mount_enclosing_volume_callback(GFile *volume, GAsyncResult *res, ComputerViewContainer *p_this) { GError *err = nullptr; g_file_mount_enclosing_volume_finish (volume, res, &err); if ((nullptr == err) || (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_ALREADY_MOUNTED))) { qDebug() << "login successful!"; Q_EMIT p_this->updateWindowLocationRequest(p_this->m_remote_uri); } else { qDebug() << "login remote error: " <code<message<domain; QMessageBox::warning(nullptr, QObject::tr("log remote error"), err->message, QMessageBox::Ok); } if (nullptr != err) { g_error_free(err); } return nullptr; } void aborted_cb(GMountOperation *op, ComputerViewContainer *p_this) { g_mount_operation_reply(op, G_MOUNT_OPERATION_ABORTED); p_this->disconnect(); } ComputerViewContainer::ComputerViewContainer(QWidget *parent) : DirectoryViewWidget(parent) { setContentsMargins(0, 0, 0, 0); setAttribute(Qt::WA_TranslucentBackground); setContextMenuPolicy(Qt::NoContextMenu); m_op = g_mount_operation_new(); g_signal_connect (m_op, "aborted", G_CALLBACK (aborted_cb), this); connect(this, &QWidget::customContextMenuRequested, this, [=](const QPoint &pos){ auto selectedIndexes = m_view->selectionModel()->selectedIndexes(); auto index = m_view->indexAt(pos); if (!selectedIndexes.contains(index)) m_view->clearSelection(); if (index.isValid()) { m_view->selectionModel()->select(index, QItemSelectionModel::SelectCurrent); } QMenu menu; auto model = static_cast(m_view->model()); QStringList uris; QList items; for (auto index : m_view->selectionModel()->selectedIndexes()) { auto item = model->itemFromIndex(index); uris<uri(); items<deleteLater(); auto code = dlg->exec(); if (code == QDialog::Rejected) { return; } QUrl url = dlg->uri(); ConnectServerLogin* dlgLogin = new ConnectServerLogin(url.host()); dlgLogin->deleteLater(); code = dlgLogin->exec(); if (code == QDialog::Rejected) { return; } g_mount_operation_set_username(m_op, dlgLogin->user().toUtf8().constData()); g_mount_operation_set_password(m_op, dlgLogin->password().toUtf8().constData()); // g_mount_operation_set_domain(m_op, dlg->domain().toUtf8().constData()); g_mount_operation_set_anonymous(m_op, dlgLogin->anonymous()); g_mount_operation_set_password_save(m_op, dlgLogin->savePassword()? G_PASSWORD_SAVE_NEVER: G_PASSWORD_SAVE_FOR_SESSION); GFile* m_volume = g_file_new_for_uri(dlg->uri().toUtf8().constData()); m_remote_uri = dlg->uri(); g_file_mount_enclosing_volume(m_volume, G_MOUNT_MOUNT_NONE, m_op, nullptr, GAsyncReadyCallback(mount_enclosing_volume_callback), this); g_signal_connect (m_op, "ask-question", G_CALLBACK(ask_question_cb), this); g_signal_connect (m_op, "ask-password", G_CALLBACK (ask_password_cb), this); }); #endif } else if (items.count() == 1 && items.first()->uri() != "") { auto item = items.first(); bool unmountable = item->canUnmount(); menu.addAction(tr("Unmount"), [=](){ item->unmount(G_MOUNT_UNMOUNT_NONE); }); menu.actions().first()->setEnabled(unmountable); /*eject function for volume. fix #18216*/ auto ejectAction = menu.addAction(tr("Eject"), [=](){ item->eject(G_MOUNT_UNMOUNT_NONE); }); ejectAction->setEnabled(item->canEject()); auto uri = item->uri(); auto realUri = m_view->tryGetVolumeUriFromMountTarget(uri); if (!realUri.isEmpty()) { uri = realUri; } auto a = menu.addAction(tr("Property"), [=](){ if (uri.isNull()) { QMessageBox::warning(0, 0, tr("You have to mount this volume first")); } else { QProcess p; p.setProgram("peony"); QStringList args; args<<"-p"<setEnabled(!uri.isNull()); } else if(items.first()->uri() != ""){ qDebug() << "unable Property uri:" <uri(); menu.addAction(tr("Property")); menu.actions().first()->setEnabled(false); } menu.exec(QCursor::pos()); }); } static void ask_question_cb(GMountOperation *op, char *message, char **choices, ComputerViewContainer *p_this) { g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); } static void ask_password_cb(GMountOperation *op, const char *message, const char *default_user, const char *default_domain, GAskPasswordFlags flags, ComputerViewContainer *p_this) { Q_UNUSED(message); Q_UNUSED(default_user); Q_UNUSED(default_domain); Q_UNUSED(flags); Q_UNUSED(p_this); g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); } ComputerViewContainer::~ComputerViewContainer() { if (nullptr != m_op) { g_object_unref(m_op); } } const QStringList ComputerViewContainer::getSelections() { QStringList uris; auto model = static_cast(m_view->model()); for (auto index : m_view->selectionModel()->selectedIndexes()) { auto item = model->itemFromIndex(index); uris<uri(); } return uris; } void ComputerViewContainer::paintEvent(QPaintEvent *e) { DirectoryViewWidget::paintEvent(e); } void ComputerViewContainer::keyPressEvent(QKeyEvent *e) { if (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return) { if (m_enterAction) m_enterAction->triggered(); e->accept(); return; } QWidget::keyPressEvent(e); } void ComputerViewContainer::bindModel(FileItemModel *model, FileItemProxyFilterSortModel *proxyModel) { m_model = model; m_proxyModel = proxyModel; model->setRootUri("computer:///"); connect(model, &FileItemModel::findChildrenFinished, this, &DirectoryViewWidget::viewDirectoryChanged); if (m_view) m_view->deleteLater(); m_view = new ComputerView(this); auto layout = new QHBoxLayout; layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); layout->addWidget(m_view); setLayout(layout); Q_EMIT viewDirectoryChanged(); auto selectionModel = m_view->selectionModel(); connect(selectionModel, &QItemSelectionModel::selectionChanged, this, &DirectoryViewWidget::viewSelectionChanged);; connect(m_view, &QAbstractItemView::doubleClicked, this, [=](const QModelIndex &index){ if (!index.parent().isValid()) return; auto model = static_cast(m_view->model()); auto item = model->itemFromIndex(index); if (!item->uri().isEmpty()) { item->check(); this->updateWindowLocationRequest(item->uri()); } else { item->mount(); } }); m_enterAction = new QAction(this); m_enterAction->setShortcut(Qt::Key_Enter); addAction(m_enterAction); connect(m_enterAction, &QAction::triggered, this, [=](){ if (m_view->selectionModel()->selectedIndexes().count() == 1) { Q_EMIT m_view->doubleClicked(m_view->selectionModel()->selectedIndexes().first()); } }); } void ComputerViewContainer::beginLocationChange() { Q_EMIT viewDirectoryChanged(); m_view->refresh(); } void ComputerViewContainer::stopLocationChange() { Q_EMIT viewDirectoryChanged(); } peony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-model.h0000664000175000017500000000444415257160264031152 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef INTEL_COMPUTERMODEL_H #define INTEL_COMPUTERMODEL_H #include #include namespace Intel { class AbstractComputerItem; class ComputerModel : public QAbstractItemModel { friend class ComputerNetworkItem; friend class ComputerVolumeItem; friend class ComputerRemoteVolumeItem; Q_OBJECT public: explicit ComputerModel(QObject *parent = nullptr); void beginInsertItem(const QModelIndex &parent, int row); void endInsterItem(); void beginRemoveItem(const QModelIndex &parent, int row); void endRemoveItem(); QModelIndex createItemIndex(int row, QObject *item); // Basic functionality: QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; // Editable: bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; Qt::ItemFlags flags(const QModelIndex& index) const override; QString tryGetVolumeUriFromMountRoot(const QString &mountRootUri); void refresh(); private: AbstractComputerItem *m_parentNode; QMap m_volumeTargetMap; }; } #endif // COMPUTERMODEL_H peony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-view-style.h0000664000175000017500000000371415257160264032161 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2023, KylinSoft Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * */ #ifndef INTEL_COMPUTERVIEWSTYLE_H #define INTEL_COMPUTERVIEWSTYLE_H #include #include namespace Intel { class ComputerViewStyle : public QProxyStyle { public: static ComputerViewStyle *getStyle(); void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override; void drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override; void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const override; void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const override; private: explicit ComputerViewStyle(QStyle *style = nullptr); ~ComputerViewStyle() override {} }; } #endif // COMPUTERVIEWSTYLE_H peony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-view-container.h0000664000175000017500000000637415257160264033010 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef INTEL_COMPUTERVIEWCONTAINER_H #define INTEL_COMPUTERVIEWCONTAINER_H #include #include #include #include namespace Intel { class ComputerView; } namespace Intel { class ComputerViewContainer : public Peony::DirectoryViewWidget { Q_OBJECT public: explicit ComputerViewContainer(QWidget *parent = nullptr); ~ComputerViewContainer(); const virtual QString viewId() {return "Computer View";} //location const virtual QString getDirectoryUri() {return "computer:///";} //selections const virtual QStringList getSelections(); //children const virtual QStringList getAllFileUris() {return QStringList();} virtual int getSortType() {return 0;} virtual Qt::SortOrder getSortOrder() {return Qt::AscendingOrder;} //zoom virtual int currentZoomLevel() {return -1;} virtual int minimumZoomLevel() {return -1;} virtual int maximumZoomLevel() {return -1;} virtual bool supportZoom() {return false;} protected: void paintEvent(QPaintEvent *e); void keyPressEvent(QKeyEvent *e); public Q_SLOTS: virtual void bindModel(Peony::FileItemModel *model, Peony::FileItemProxyFilterSortModel *proxyModel); //location //virtual void open(const QStringList &uris, bool newWindow) {} virtual void setDirectoryUri(const QString &uri) {} virtual void beginLocationChange(); virtual void stopLocationChange(); virtual void closeDirectoryView() {} //selections virtual void setSelections(const QStringList &uris) {} virtual void invertSelections() {} virtual void scrollToSelection(const QString &uri) {} //clipboard //cut items should be drawn differently. virtual void setCutFiles(const QStringList &uris) {} virtual void setSortType(int sortType) {} virtual void setSortOrder(int sortOrder) {} virtual void editUri(const QString &uri) {} virtual void editUris(const QStringList uris) {} virtual void repaintView() {} virtual void clearIndexWidget() {} //zoom virtual void setCurrentZoomLevel(int zoomLevel) {} public: QString m_remote_uri; private: Intel::ComputerView *m_view = nullptr; GMountOperation* m_op = nullptr; QAction *m_enterAction = nullptr; Peony::FileItemModel *m_model = nullptr; Peony::FileItemProxyFilterSortModel *m_proxyModel = nullptr; }; } #endif // COMPUTERVIEWCONTAINER_H peony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-item-delegate.cpp0000664000175000017500000002425015257160264033110 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include #include "intel-computer-view.h" #include "intel-computer-proxy-model.h" #include "intel-computer-item-delegate.h" #include "intel-abstract-computer-item.h" #include #include #include #include #include #include using namespace Intel; ComputerItemDelegate::ComputerItemDelegate(QObject *parent) : QStyledItemDelegate(parent) { m_styleIconView = new QListView; m_styleIconView->setViewMode(QListView::IconMode); } ComputerItemDelegate::~ComputerItemDelegate() { m_styleIconView->deleteLater(); } void ComputerItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItem opt = option; initStyleOption(&opt, index); //use rounded rect primitive in ukui style. if (index.parent().isValid()) { opt.decorationPosition = QStyleOptionViewItem::Top; opt.decorationSize = QSize(64, 64); opt.features = QStyleOptionViewItem::WrapText; opt.displayAlignment = Qt::AlignHCenter|Qt::AlignTop; opt.rect.adjust(2, 2, -2, -2); //opt.features.setFlag(QStyleOptionViewItem::WrapText); } auto view = qobject_cast(parent()); auto model = qobject_cast(view->model()); auto item = model->itemFromIndex(index); if (!item) return; switch (item->itemType()) { case AbstractComputerItem::Volume: paintVolumeItem(painter, opt, index, item); break; case AbstractComputerItem::RemoteVolume: paintRemoteItem(painter, opt, index, item); break; case AbstractComputerItem::Network: paintNetworkItem(painter, opt, index, item); break; default: break; } } void ComputerItemDelegate::paintVolumeItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, AbstractComputerItem *item) const { auto opt = option; auto bg = opt.palette.highlight().color(); int hue = bg.hue(); //int s = bg.saturation(); // int v = bg.value(); bg.setHsv(hue, 10, 127); opt.palette.setColor(QPalette::Highlight, bg); //qApp->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, m_styleIconView); bool isHover = (option.state & QStyle::State_MouseOver) && (option.state & ~QStyle::State_Selected); bool isSelected = option.state & QStyle::State_Selected; bool enable = option.state & QStyle::State_Enabled; QColor color = option.palette.color(enable? QPalette::Active: QPalette::Disabled, QPalette::Highlight); color.setAlpha(0); if (isHover && !isSelected) { int h = color.hsvHue(); //int s = color.hsvSaturation(); auto base = option.palette.base().color(); int v = color.value(); color.setHsv(h, base.lightness(), v, 64); } if (isSelected) { color.setAlpha(127); } painter->save(); painter->setRenderHint(QPainter::Antialiasing); painter->setPen(Qt::transparent); painter->setBrush(color); painter->drawRoundedRect(option.rect, 6, 6); painter->restore(); if (index.parent().isValid()) { painter->save(); painter->setRenderHint(QPainter::Antialiasing); //draw pix map QIcon icon = option.icon; bool enable = option.state & QStyle::State_Enabled; bool selected = option.state &QStyle::State_Selected; QPixmap pix = icon.pixmap(QSize(64, 64), enable? selected? QIcon::Selected: QIcon::Normal: QIcon::Disabled); qApp->style()->drawItemPixmap(painter, option.rect.adjusted(5, 0, 0, 0), Qt::AlignVCenter|Qt::AlignLeft, pix); //draw text auto textRect = option.rect; textRect.adjust(84, 10, -5, -10); textRect.translate(0, -option.fontMetrics.ascent()); qApp->style()->drawItemText(painter, textRect, Qt::AlignLeft|Qt::AlignVCenter, option.palette, enable, option.text, QPalette::Text); //space bool shouldDrawProgress = false; QString spaceInfo; auto total = item->totalSpace(); auto used = item->usedSpace(); if (total > 0) { auto totalFormat = g_format_size(total); auto usedFormat = g_format_size(used); spaceInfo = QString("%1/%2").arg(usedFormat).arg(totalFormat); g_free(totalFormat); g_free(usedFormat); shouldDrawProgress = true; } else { if (!item->isMount()) { spaceInfo = tr("You should mount volume first"); } } qApp->style()->drawItemText(painter, textRect.translated(0, 2*option.fontMetrics.ascent()), Qt::AlignLeft|Qt::AlignVCenter|Qt::TextWordWrap, option.palette, enable, spaceInfo, QPalette::WindowText); if (shouldDrawProgress) { painter->save(); QPainterPath clipPath; clipPath.addRoundedRect(option.rect, 6, 6); painter->setClipPath(clipPath); qreal percent = used*1.0/total*1.0; int progressBarWidth = option.rect.width() * percent; painter->save(); QPen pen; pen.setCapStyle(Qt::PenCapStyle::RoundCap); pen.setJoinStyle(Qt::PenJoinStyle::RoundJoin); pen.setWidth(6); pen.setColor(option.palette.midlight().color()); painter->setPen(pen); painter->drawLine(option.rect.bottomLeft() + QPoint(5, -5), option.rect.bottomRight() + QPoint(-5, -5)); //pen.setColor(percent < 0.8?Qt::blue:Qt::red); if (percent < 0.8) { pen.setColor(option.palette.highlight().color()); } else { pen.setColor(Qt::red); } painter->setPen(pen); auto pos = option.rect.bottomLeft(); pos.setX(pos.x() + progressBarWidth); pos.setY(pos.y() - 5); painter->drawLine(option.rect.bottomLeft() + QPoint(5, -5), pos); painter->restore(); painter->restore(); } painter->restore(); } else { //auto textRect = qApp->style()->subElementRect(QStyle::SE_ItemViewItemText, &option, m_styleIconView); drawTab(painter, option, index, item); } } void ComputerItemDelegate::paintRemoteItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, AbstractComputerItem *item) const { if (index.parent().isValid()) { qApp->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, nullptr); drawStyledItem(painter, option, index); } else { drawTab(painter, option, index, item); } } void ComputerItemDelegate::paintNetworkItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, AbstractComputerItem *item) const { if (index.parent().isValid()) { qApp->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, nullptr); drawStyledItem(painter, option, index); } else { drawTab(painter, option, index, item); } } void ComputerItemDelegate::drawTab(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, AbstractComputerItem *item) const { auto opt = option; auto titleFont = opt.font; // Modify tab name is smaller if (titleFont.pixelSize() > 0) { titleFont.setPixelSize(titleFont.pixelSize()*1.2); } else { titleFont.setPointSizeF(titleFont.pointSizeF()*1.2); } opt.icon = QIcon(); opt.decorationPosition = QStyleOptionViewItem::Right; opt.displayAlignment = Qt::AlignLeft|Qt::AlignVCenter; opt.font = titleFont; opt.fontMetrics = QFontMetrics(opt.font); qApp->style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter); //auto textRect = qApp->style()->subElementRect(QStyle::SE_ItemViewItemText, &opt, m_styleIconView); //qApp->style()->drawItemText(painter, opt.rect.adjusted(5, 0, 0, 0), Qt::AlignTop|Qt::AlignVCenter, option.palette, enable, option.text, selected? QPalette::HighlightedText: QPalette::Text); // add by wwn painter->setPen(QPen(QColor(125,125,125,125), 1)); painter->drawLine(opt.rect.bottomLeft().x() + 110, opt.rect.center().y() + 3 , opt.rect.bottomRight().x() - 50, opt.rect.center().y() + 3); QRect rect = option.rect; rect.setTop(rect.top() + 12); rect.setX(rect.right() - 40); rect.setSize(QSize(16, 16)); if (item->isExpanded()) painter->drawPixmap(rect, QPixmap(":/img/view_show")); else painter->drawPixmap(rect, QPixmap(":/img/view_hide")); } void ComputerItemDelegate::drawStyledItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { painter->save(); //draw pix map QIcon icon = option.icon; bool enable = option.state & QStyle::State_Enabled; bool selected = option.state &QStyle::State_Selected; QPixmap pix = icon.pixmap(QSize(64, 64), enable? selected? QIcon::Selected: QIcon::Normal: QIcon::Disabled); qApp->style()->drawItemPixmap(painter, option.rect.adjusted(0, 5, 0, 0), Qt::AlignTop|Qt::AlignHCenter, pix); //draw text auto textRect = option.rect.adjusted(2, 74, -2, -2); qApp->style()->drawItemText(painter, textRect, Qt::ElideRight|Qt::TextWrapAnywhere|Qt::AlignTop|Qt::AlignHCenter, option.palette, enable, option.text, selected? QPalette::HighlightedText: QPalette::Text); painter->restore(); } peony-extensions/peony-extension-computer-view/computer-view-intel/img/0000775000175000017500000000000015257160264025502 5ustar fengfengpeony-extensions/peony-extension-computer-view/computer-view-intel/img/go-previous-symbolic.png0000664000175000017500000000053015257160264032304 0ustar fengfeng‰PNG  IHDRóÿasRGB®ÎéDeXIfMM*‡i   4UqòÂIDAT8c`¾`ÅŠíû÷ïg!äC&< *^½zµ}Ë–-‚xÔ0à3àÖÿÿÿ]¾|ùrbݺuj¸ Ái�##ã Fµ_¿~�X¹r¥ 6Cpàããó^LLÌhÈ4 F�7¶¯Zµ*Ýœ +ÄÅgÄ% ¼¯_¿®…ЀêBÃÃÃA^B8£ x@• À»ÅÊÊêt E'”ƒÓ¨æ½ÀÀ …6Í 1|aÐ!..î�O3.C‡˜8Qº;M ‰IEND®B`‚peony-extensions/peony-extension-computer-view/computer-view-intel/img/go-down-symbolic.svg0000664000175000017500000000124615257160264031417 0ustar fengfeng peony-extensions/peony-extension-computer-view/computer-view-intel/img/go-previous-symbolic.svg0000664000175000017500000000130015257160264032313 0ustar fengfeng peony-extensions/peony-extension-computer-view/computer-view-intel/img/go-down-symbolic.png0000664000175000017500000000052715257160264031405 0ustar fengfeng‰PNG  IHDRóÿasRGB®ÎéDeXIfMM*‡i   4UqòÁIDAT8c`ŒÈNX±bE;�_Ä·xxx,|||Þƒä·lÙ"øåË—@¦wDDDT‚ÄA€BAHqqñÚ—/_šyÎ_¿~]µÿ~O�Ì«W¯V)5FFÆ=bbbµ 1@qHÙ6 †i ±ÿÿÿg)W�ÄAÃ�àºuëÔ~ÿþ}¨QÄ‚÷lllAAA· \É„`"XP…¡@ü�â0lš:p°€�·jÕªXÒ£ÂÐ.IA…P IEND®B`‚peony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-proxy-model.cpp0000664000175000017500000000416415257160264032663 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "intel-computer-proxy-model.h" #include "intel-computer-model.h" #include "intel-abstract-computer-item.h" using namespace Intel; static ComputerProxyModel *global_instance = nullptr; ComputerProxyModel::ComputerProxyModel(QObject *parent) : QSortFilterProxyModel(parent) { auto computerModel = new ComputerModel(this); setSourceModel(computerModel); m_model = computerModel; } ComputerProxyModel *ComputerProxyModel::globalInstance() { if (!global_instance) { global_instance = new ComputerProxyModel; } return global_instance; } AbstractComputerItem *ComputerProxyModel::itemFromIndex(const QModelIndex &proxyIndex) { auto index = mapToSource(proxyIndex); return static_cast(index.internalPointer()); } QString ComputerProxyModel::tryGetVolumeUriFromMountTarget(const QString &mountTargetUri) { return m_model->tryGetVolumeUriFromMountRoot(mountTargetUri); } void ComputerProxyModel::refresh() { m_model->refresh(); } bool ComputerProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { auto item = static_cast(m_model->index(source_row, 0, source_parent).internalPointer()); if (item->itemType() == AbstractComputerItem::RemoteVolume) { return !item->isHidden(); } return true; } peony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-view.cpp0000664000175000017500000003624015257160277031362 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "intel-computer-view.h" #include "intel-computer-proxy-model.h" #include "intel-abstract-computer-item.h" #include "intel-computer-item-delegate.h" #include "intel-computer-view-style.h" #include #include #include #include #include using namespace Intel; ComputerView::ComputerView(QWidget *parent) : QAbstractItemView(parent) { this->verticalScrollBar()->setProperty("drawScrollBarGroove", false); setAttribute(Qt::WA_TranslucentBackground); viewport()->setAttribute(Qt::WA_TranslucentBackground); setItemDelegate(new ComputerItemDelegate(this)); m_model = ComputerProxyModel::globalInstance(); setModel(m_model); setStyle(ComputerViewStyle::getStyle()); setStyle(ComputerViewStyle::getStyle()); m_rubberBand = new QRubberBand(QRubberBand::Shape::Rectangle, this); connect(this, &QAbstractItemView::doubleClicked, this, [=](const QModelIndex &index){ qDebug()<selectionModel(), &QItemSelectionModel::selectionChanged, this, [=](){ this->viewport()->update(); }); //fix #18184 auto volumeManager = Peony::VolumeManager::getInstance(); connect(volumeManager,&Peony::VolumeManager::volumeRemoved,this,[=](const std::shared_ptr volume){ this->viewport()->update(); }); setSelectionMode(QAbstractItemView::ExtendedSelection); this->viewport()->setMouseTracking(true); this->viewport()->installEventFilter(this); // for (int row = 0; row < m_model->rowCount(); row++) { // m_items.push_back(ComputerViewItem(row, 0, false)); // } } bool ComputerView::eventFilter(QObject *object, QEvent *event) { if (event->type() == QEvent::MouseMove) { if (!m_isLeftButtonPressed) { auto pos = mapFromGlobal(QCursor::pos()); auto newIndex = indexAt(pos); if (newIndex != m_hoverIndex) { m_hoverIndex = newIndex; this->viewport()->update(); } } else { m_hoverIndex = QModelIndex(); } } return false; } QRect ComputerView::visualRect(const QModelIndex &index) const { return m_rect_cache.value(index); } void ComputerView::scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint) { //return; //FIXME: scroll to the index more accurecely. //auto y = m_rect_cache.value(index).y(); //verticalScrollBar()->setValue(y); } QModelIndex ComputerView::indexAt(const QPoint &point) const { auto pos = point + QPoint(horizontalOffset(), verticalOffset()); for (auto index : m_rect_cache.keys()) { auto rect = m_rect_cache.value(index); if (rect.contains(pos)) return index; } return QModelIndex(); } QModelIndex ComputerView::moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers) { return QModelIndex(); } int ComputerView::horizontalOffset() const { return horizontalScrollBar()->value()*m_scrollStep; } int ComputerView::verticalOffset() const { return verticalScrollBar()->value()*m_scrollStep; } bool ComputerView::isIndexHidden(const QModelIndex &index) const { return false; } void ComputerView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) { //caculate logic rubber band rect in mouse move event. //qDebug()<<"setSelection"<isVisible()) { auto realRect = m_rubberBand->geometry(); realRect.adjust(horizontalOffset(), verticalOffset(), horizontalOffset(), verticalOffset()); for (auto index : m_rect_cache.keys()) { auto indexRect = m_rect_cache.value(index); if (realRect.contains(indexRect.center())) { selectionModel()->select(index, QItemSelectionModel::Select); } else { selectionModel()->select(index, QItemSelectionModel::Deselect); } } } else { auto pos = rect.center(); auto index = indexAt(pos); if (!index.isValid()) { clearSelection(); return; } if (!selectedIndexes().contains(index)) selectionModel()->select(index, QItemSelectionModel::SelectCurrent); } } QRegion ComputerView::visualRegionForSelection(const QItemSelection &selection) const { return QRegion(); } QString ComputerView::tryGetVolumeUriFromMountTarget(const QString &mountTargetUri) { return m_model->tryGetVolumeUriFromMountTarget(mountTargetUri); } void ComputerView::refresh() { m_model->refresh(); } void ComputerView::updateEditorGeometries() { QAbstractItemView::updateEditorGeometries(); m_totalHeight = 0; m_totalWidth = this->viewport()->width(); m_rect_cache.clear(); for (int row = 0; row < m_model->rowCount(); row++) { auto index = m_model->index(row, 0); auto item = m_model->itemFromIndex(index); switch (item->itemType()) { case AbstractComputerItem::Volume: { layoutVolumeIndexes(index); break; } case AbstractComputerItem::RemoteVolume: { layoutRemoteIndexes(index); break; } case AbstractComputerItem::Network: { layoutNetworkIndexes(index); break; } default: break; } } //confirm total width for (auto rect : m_rect_cache.values()) { if (rect.right() > m_totalWidth) m_totalWidth = rect.right(); } horizontalScrollBar()->setRange(0, qMax(0, m_totalWidth - viewport()->width())); verticalScrollBar()->setRange(0, qMax(0, (m_totalHeight - viewport()->height() + 200)/m_scrollStep)); //update tab index rect width for (auto index : m_rect_cache.keys()) { if (!index.parent().isValid()) { auto rect = m_rect_cache.value(index); rect.setWidth(m_totalWidth); m_rect_cache.remove(index); m_rect_cache.insert(index, rect); } } } void ComputerView::resizeEvent(QResizeEvent *event) { QAbstractItemView::resizeEvent(event); updateEditorGeometries(); } void ComputerView::paintEvent(QPaintEvent *e) { QPainter p(this->viewport()); // p.fillRect(this->rect(), palette().base()); //p.fillRect(QRect(0, 0, m_totalWidth, m_totalHeight), Qt::blue); p.setRenderHint(QPainter::Antialiasing); p.setPen(Qt::transparent); p.setBrush(this->palette().base()); p.drawRoundedRect(this->rect(),24,24, Qt::AbsoluteSize); p.drawRect(0, 0, 24, 24); p.drawRect(0, rect().height() - 24, 24, 24); p.drawRect(rect().width() - 24, 0, 24, 24); auto w = window(); QPoint l = this->mapTo(w,QPoint(this->rect().right(),this->rect().height())); if(w->rect().right()-l.x()>100||window()->isMaximized()){ p.drawRect(rect().width()-24,rect().height()-24,24,24); } p.save(); p.translate(-horizontalOffset(), -verticalOffset()); for (auto rect : m_rect_cache) { //qDebug()<paint(&p, opt, index); } p.restore(); } void ComputerView::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { m_isLeftButtonPressed = true; m_rubberBand->hide(); m_lastPressedPoint = event->pos(); m_lastPressedLogicPoint = event->pos() + QPoint(horizontalOffset(), verticalOffset()); auto index = indexAt(event->pos()); if (!index.parent().isValid() && index.isValid()) { if (isExpanded(index)) { expand(index, false); } else { expand(index, true); } updateEditorGeometries(); this->viewport()->update(); return; } } else m_rubberBand->hide(); QAbstractItemView::mousePressEvent(event); this->viewport()->update(); } void ComputerView::mouseMoveEvent(QMouseEvent *event) { QAbstractItemView::mouseMoveEvent(event); if (m_isLeftButtonPressed) { auto pos = event->pos(); auto offset = QPoint(horizontalOffset(), verticalOffset()); auto logicPos = pos + offset; QRect logicRect = QRect(logicPos, m_lastPressedLogicPoint); m_logicRect = logicRect.normalized(); int dx = -horizontalOffset(); int dy = -verticalOffset(); auto realRect = m_logicRect.adjusted(dx, dy, dx ,dy); if (!m_rubberBand->isVisible()) m_rubberBand->show(); m_rubberBand->setGeometry(realRect); } else { m_rubberBand->hide(); } } void ComputerView::mouseReleaseEvent(QMouseEvent *event) { m_rubberBand->hide(); m_isLeftButtonPressed = false; QAbstractItemView::mouseReleaseEvent(event); } void ComputerView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles) { QAbstractItemView::dataChanged(topLeft, bottomRight, roles); this->viewport()->update(); } void ComputerView::layoutVolumeIndexes(const QModelIndex &volumeParentIndex) { int rowCount = m_model->rowCount(volumeParentIndex); if (rowCount <= 0) return; //add tab m_rect_cache.insert(volumeParentIndex, QRect(QPoint(0, m_totalHeight), QSize(this->viewport()->width(), m_tabPadding))); m_totalHeight += m_tabPadding + 10; if (!isExpanded(volumeParentIndex)) return; //layout indexes int tmpX = 0; int maxColumnCount = 0; //if view's width is not enough, expand the m_totalWidth to ensure scroallble if (m_totalWidth < 2 * (m_hSpacing + m_volumeItemFixedSize.width())) { maxColumnCount = 1; } else { maxColumnCount = this->viewport()->width()/(m_hSpacing + m_volumeItemFixedSize.width());// - 1; } int cloumn = 0; for (int row = 0; row < rowCount; row++) { //layout next row if (cloumn > maxColumnCount - 1) { //m_totalWidth = tmpX + m_hSpacing + m_volumeItemFixedSize.width(); cloumn = 1; tmpX = m_hSpacing; m_totalHeight = m_totalHeight + m_volumeItemFixedSize.height() + m_vSpacing; } else { tmpX = m_hSpacing + cloumn*(m_hSpacing+m_volumeItemFixedSize.width()); cloumn++; } auto index = m_model->index(row, 0, volumeParentIndex); m_rect_cache.insert(index, QRect(QPoint(tmpX, m_totalHeight), m_volumeItemFixedSize)); } m_totalHeight = m_totalHeight + m_volumeItemFixedSize.height() + m_vSpacing; } void ComputerView::layoutRemoteIndexes(const QModelIndex &remoteParentIndex) { int rowCount = m_model->rowCount(remoteParentIndex); if (rowCount <= 0) return; //add tab m_rect_cache.insert(remoteParentIndex, QRect(QPoint(0, m_totalHeight), QSize(this->viewport()->width(), m_tabPadding))); m_totalHeight += m_tabPadding + 10; if (!isExpanded(remoteParentIndex)) return; //layout indexes int tmpX = 0; int maxColumnCount = 0; //if view's width is not enough, expand the m_totalWidth to ensure scroallble if (m_totalWidth < 2 * (m_hSpacing + m_remoteItemFixedSize.width())) { //m_totalWidth = m_hSpacing + m_remoteItemFixedSize.width(); maxColumnCount = 1; } else { maxColumnCount = this->viewport()->width()/(m_hSpacing + m_remoteItemFixedSize.width());// - 1; } int cloumn = 0; for (int row = 0; row < rowCount; row++) { //layout next row if (cloumn > maxColumnCount - 1) { //m_totalWidth = tmpX + m_hSpacing + m_volumeItemFixedSize.width(); cloumn = 1; tmpX = m_hSpacing; m_totalHeight = m_totalHeight + m_remoteItemFixedSize.height() + m_vSpacing; } else { tmpX = m_hSpacing + cloumn*(m_hSpacing+m_remoteItemFixedSize.width()); cloumn++; } auto index = m_model->index(row, 0, remoteParentIndex); m_rect_cache.insert(index, QRect(QPoint(tmpX, m_totalHeight), m_remoteItemFixedSize)); } m_totalHeight = m_totalHeight + m_remoteItemFixedSize.height() + m_vSpacing; } void ComputerView::layoutNetworkIndexes(const QModelIndex &networkParentIndex) { int rowCount = m_model->rowCount(networkParentIndex); if (rowCount <= 0) return; //add tab m_rect_cache.insert(networkParentIndex, QRect(QPoint(0, m_totalHeight), QSize(this->viewport()->width(), m_tabPadding))); m_totalHeight += m_tabPadding + 10; if(!isExpanded(networkParentIndex)) return; //layout indexes int tmpX = 0; int maxColumnCount = 0; //if view's width is not enough, expand the m_totalWidth to ensure scroallble if (m_totalWidth < 2 * (m_hSpacing + m_networkItemFixedSize.width())) { maxColumnCount = 1; } else { maxColumnCount = this->viewport()->width()/(m_hSpacing + m_networkItemFixedSize.width());// - 1; } int cloumn = 0; for (int row = 0; row < rowCount; row++) { //layout next row if (cloumn > maxColumnCount - 1) { //m_totalWidth = tmpX + m_hSpacing + m_volumeItemFixedSize.width(); cloumn = 1; tmpX = m_hSpacing; m_totalHeight = m_totalHeight + m_networkItemFixedSize.height() + m_vSpacing; } else { tmpX = m_hSpacing + cloumn*(m_hSpacing+m_networkItemFixedSize.width()); cloumn++; } auto index = m_model->index(row, 0, networkParentIndex); m_rect_cache.insert(index, QRect(QPoint(tmpX, m_totalHeight), m_networkItemFixedSize)); } m_totalHeight = m_totalHeight + m_networkItemFixedSize.height() + m_vSpacing; } bool ComputerView::isExpanded(const QModelIndex &index) { auto item = m_model->itemFromIndex(index); return item->isExpanded(); } void ComputerView::expand(const QModelIndex &index, bool expand) { auto item = m_model->itemFromIndex(index); if (item == nullptr) return; item->expand(expand); } ././@LongLink0000644000000000000000000000014700000000000011605 Lustar rootrootpeony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-remote-volume-item.hpeony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-remote-volume-item0000664000175000017500000000465515257160264033364 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef INTEL_COMPUTERREMOTEVOLUMEITEM_H #define INTEL_COMPUTERREMOTEVOLUMEITEM_H #include #include #include "intel-abstract-computer-item.h" namespace Intel { class ComputerRemoteVolumeItem : public AbstractComputerItem { Q_OBJECT public: explicit ComputerRemoteVolumeItem(const QString &uri, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent = nullptr); ~ComputerRemoteVolumeItem(); Type itemType() override {return RemoteVolume;} const QString uri() override {return m_uri;} const QString displayName() override; const QIcon icon() override; void findChildren() override; void updateInfo() override; bool canUnmount() override {return true;} void unmount(GMountUnmountFlags unmountFlag) override; QModelIndex itemIndex() override; bool isHidden() override; public: void onFileAdded(const QString &uri); void onFileRemoved(const QString &uri); void onFileChanged(const QString &uri); protected: //enumeration static void enumerate_async_callback(GFile *file, GAsyncResult *res, ComputerRemoteVolumeItem *p_this); static void find_children_async_callback(GFileEnumerator *enumerator, GAsyncResult *res, ComputerRemoteVolumeItem *p_this); //info static void query_info_async_callback(GFile *file, GAsyncResult *res, ComputerRemoteVolumeItem *p_this); //monitor private: QString m_uri; GCancellable *m_cancellable = nullptr; bool m_isUnixDevice = false; QString m_displayName; QIcon m_icon; Peony::FileWatcher *m_watcher = nullptr; }; } #endif // COMPUTERREMOTEVOLUMEITEM_H peony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-view.h0000664000175000017500000000637715257160264031033 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef INTEL_COMPUTERVIEW_H #define INTEL_COMPUTERVIEW_H #include #include class QRubberBand; namespace Intel { class ComputerProxyModel; class ComputerView : public QAbstractItemView { Q_OBJECT public: explicit ComputerView(QWidget *parent = nullptr); bool eventFilter(QObject *object, QEvent *event); virtual QRect visualRect(const QModelIndex &index) const; virtual void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible); virtual QModelIndex indexAt(const QPoint &point) const; virtual QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers); virtual int horizontalOffset() const; virtual int verticalOffset() const; virtual bool isIndexHidden(const QModelIndex &index) const; virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command); virtual QRegion visualRegionForSelection(const QItemSelection &selection) const; QString tryGetVolumeUriFromMountTarget(const QString &mountTargetUri); void refresh(); protected: void updateEditorGeometries(); void resizeEvent(QResizeEvent *event); void paintEvent(QPaintEvent *e); void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles = QVector()); void layoutVolumeIndexes(const QModelIndex &volumeParentIndex); void layoutRemoteIndexes(const QModelIndex &remoteParentIndex); void layoutNetworkIndexes(const QModelIndex &networkParentIndex); // add by wwn bool isExpanded(const QModelIndex& index); void expand(const QModelIndex& index, bool expand); private: ComputerProxyModel *m_model; QRubberBand *m_rubberBand; QPoint m_lastPressedPoint; QPoint m_lastPressedLogicPoint; QRect m_logicRect; bool m_isLeftButtonPressed = false; QModelIndex m_hoverIndex; int m_scrollStep = 100; int m_totalHeight = 0; int m_totalWidth = 0; int m_hSpacing = 20; int m_vSpacing = 20; int m_tabPadding = 36; QSize m_volumeItemFixedSize = QSize(256, 108); QSize m_remoteItemFixedSize = QSize(108, 144); QSize m_networkItemFixedSize = QSize(108, 144); QHash m_rect_cache; }; } #endif // COMPUTERVIEW_H peony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-proxy-model.h0000664000175000017500000000276615257160264032336 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #ifndef INTEL_COMPUTERPROXYMODEL_H #define INTEL_COMPUTERPROXYMODEL_H #include namespace Intel { class ComputerModel; class AbstractComputerItem; class ComputerProxyModel : public QSortFilterProxyModel { Q_OBJECT public: explicit ComputerProxyModel(QObject *parent = nullptr); static ComputerProxyModel *globalInstance(); AbstractComputerItem *itemFromIndex(const QModelIndex &proxyIndex); QString tryGetVolumeUriFromMountTarget(const QString &mountTargetUri); void refresh(); protected: bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; private: ComputerModel *m_model; }; } #endif // COMPUTERPROXYMODEL_H peony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-model.cpp0000664000175000017500000001117415257160264031503 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "intel-computer-model.h" #include "intel-abstract-computer-item.h" #include "intel-computer-volume-item.h" #include "intel-computer-remote-volume-item.h" #include "intel-computer-network-item.h" using namespace Intel; ComputerModel::ComputerModel(QObject *parent) : QAbstractItemModel(parent) { beginResetModel(); m_parentNode = new AbstractComputerItem(this, nullptr, this); auto computerItem = new ComputerVolumeItem(nullptr, this, m_parentNode); m_parentNode->m_children<findChildren(); computerItem->expand(true); // auto remoteItem = new ComputerRemoteVolumeItem("computer:///", this, m_parentNode); // m_parentNode->m_children<findChildren(); auto networkItem = new ComputerNetworkItem("network:///", this, m_parentNode); m_parentNode->m_children<findChildren(); endResetModel(); } void ComputerModel::beginInsertItem(const QModelIndex &parent, int row) { beginInsertRows(parent, row, row); } void ComputerModel::endInsterItem() { endInsertRows(); } void ComputerModel::beginRemoveItem(const QModelIndex &parent, int row) { beginRemoveRows(parent, row, row); } void ComputerModel::endRemoveItem() { endRemoveRows(); } QModelIndex ComputerModel::createItemIndex(int row, QObject *item) { return createIndex(row, 0, item); } QModelIndex ComputerModel::index(int row, int column, const QModelIndex &parent) const { if (!parent.isValid()) { auto item = m_parentNode->m_children.at(row); return createIndex(row, column, item); } auto parentNode = static_cast(parent.internalPointer()); if (parentNode->m_children.count() < row) return QModelIndex(); return createIndex(row, column, parentNode->m_children.at(row)); } QModelIndex ComputerModel::parent(const QModelIndex &index) const { auto item = static_cast(index.internalPointer()); if (item->m_parentNode) { return item->m_parentNode->itemIndex(); } return QModelIndex(); } int ComputerModel::rowCount(const QModelIndex &parent) const { if (!parent.isValid()) return m_parentNode->m_children.count(); auto item = static_cast(parent.internalPointer()); return item->m_children.count(); } int ComputerModel::columnCount(const QModelIndex &parent) const { return 1; } QVariant ComputerModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); auto item = static_cast(index.internalPointer()); switch (role) { case Qt::DisplayRole: return item->displayName(); case Qt::DecorationRole: { if (item->m_parentNode == m_parentNode) return QVariant(); return item->icon(); } case Qt::ToolTipRole: return item->displayName(); default: return QVariant(); } } bool ComputerModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (data(index, role) != value) { // FIXME: Implement me! Q_EMIT dataChanged(index, index, QVector() << role); return true; } return false; } Qt::ItemFlags ComputerModel::flags(const QModelIndex &index) const { if (!index.isValid()) return Qt::NoItemFlags; return QAbstractItemModel::flags(index); // FIXME: Implement me! } QString ComputerModel::tryGetVolumeUriFromMountRoot(const QString &mountRootUri) { auto value = m_volumeTargetMap.value(mountRootUri); return value; } void ComputerModel::refresh() { for (auto child : m_parentNode->m_children) { for (auto child2 : child->m_children) { if (auto item = qobject_cast(child2)) { item->updateInfo(); } } } } peony-extensions/peony-extension-computer-view/computer-view-intel/intel-computer-volume-item.cpp0000664000175000017500000005721515257160277032660 0ustar fengfeng/* * Peony-Qt's Library * * Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . * * Authors: Yue Lan * */ #include "intel-computer-volume-item.h" #include #include "intel-computer-model.h" #include #include #include #include #include #include using namespace Intel; ComputerVolumeItem::ComputerVolumeItem(GVolume *volume, ComputerModel *model, AbstractComputerItem *parentNode, QObject *parent) : AbstractComputerItem(model, parentNode, parent) { if (parentNode->itemType() != Volume) { m_displayName = tr("Volume"); return; } m_cancellable = g_cancellable_new(); if (!volume) { m_icon = QIcon::fromTheme("drive-harddisk-system"); m_uri = "file:///"; m_displayName = tr("System Disk"); auto file = g_file_new_for_uri("file:///"); g_file_query_filesystem_info_async(file, "*", 0, m_cancellable, GAsyncReadyCallback(query_root_info_async_callback), this); return; } m_volume = std::make_shared(volume, true); updateInfoAsync(); m_volumeChangedHandle = g_signal_connect(volume, "changed", G_CALLBACK(volume_changed_callback), this); m_volumeRemovedHandle = g_signal_connect(volume, "removed", G_CALLBACK(volume_removed_callback), this); m_mountChangedHandle = g_signal_connect(g_volume_monitor_get(), "mount_changed", G_CALLBACK(mount_changed_callback), this); } ComputerVolumeItem::ComputerVolumeItem(const QString uri,ComputerModel *model,AbstractComputerItem *parentNode,QObject *parent) : AbstractComputerItem(model,parentNode,parent){ if(uri.isNull() || uri.isEmpty()) return; auto info = Peony::FileInfo::fromUri(uri); if (info.get()->isEmptyInfo()) { Peony::FileInfoJob j(info); j.querySync(); } m_info = info; collectInfoWhenGpartedOpen(uri); } ComputerVolumeItem::~ComputerVolumeItem() { g_signal_handler_disconnect(g_volume_monitor_get(), m_mountChangedHandle); if(m_volume){ g_signal_handler_disconnect(m_volume->getGVolume(), m_volumeChangedHandle); g_signal_handler_disconnect(m_volume->getGVolume(), m_volumeRemovedHandle); } g_cancellable_cancel(m_cancellable); g_object_unref(m_cancellable); if(m_watcher){ m_watcher->stopMonitor(); delete m_watcher; } } void ComputerVolumeItem::updateInfoAsync() { //! update home volume if (m_uri == "file:///home") { m_icon = QIcon::fromTheme("drive-harddisk-system"); m_uri = "file:///home"; m_displayName = tr("User Disk"); auto file = g_file_new_for_uri("file:///home"); g_file_query_filesystem_info_async(file, "*", 0, m_cancellable, GAsyncReadyCallback(query_root_info_async_callback), this); return; } if (!m_volume) { m_icon = QIcon::fromTheme("drive-harddisk-system"); m_uri = "file:///"; m_displayName = tr("System Disk"); auto file = g_file_new_for_uri("file:///"); g_file_query_filesystem_info_async(file, "*", 0, m_cancellable, GAsyncReadyCallback(query_root_info_async_callback), this); return; } char *deviceName; QString unixDeviceName; m_displayName = m_volume->name(); m_icon = QIcon::fromTheme(m_volume->iconName()); //qDebug()<getGVolume()); if (mount) { m_mount = std::make_shared(mount, true); auto active_root = g_mount_get_root(mount); if (active_root) { auto uri = g_file_get_uri(active_root); if (uri) { m_uri = uri; g_free(uri); } g_file_query_filesystem_info_async(active_root, "*", 0, m_cancellable, GAsyncReadyCallback(qeury_info_async_callback), this); g_object_unref(active_root); } } else { //m_mount = nullptr; //mount first //FIXME: check auto mount // this->mount(); } //Handle the Chinese name of fat32 udisk. deviceName = g_volume_get_identifier(m_volume->getGVolume(),G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE); if(deviceName){ unixDeviceName = QString(deviceName); Peony::FileUtils::handleVolumeLabelForFat32(m_displayName,unixDeviceName); g_free(deviceName); } auto index = this->itemIndex(); m_model->dataChanged(index, index); } const QString ComputerVolumeItem::displayName() { return m_displayName; } const QIcon ComputerVolumeItem::icon() { return m_icon.isNull()? AbstractComputerItem::icon(): m_icon; } bool ComputerVolumeItem::isMount() { return Peony::FileUtils::isMountPoint(m_uri); } void ComputerVolumeItem::findChildren() { //add root m_model->beginInsertItem(this->itemIndex(), m_children.count()); auto root = new ComputerVolumeItem(nullptr, m_model, this); m_children<