pax_global_header00006660000000000000000000000064131560410440014510gustar00rootroot0000000000000052 comment=1dced53d18113da7faf5cb731bae856c7d6438ec nixnote2-2.0.2/000077500000000000000000000000001315604104400132575ustar00rootroot00000000000000nixnote2-2.0.2/.gitignore000066400000000000000000000010201315604104400152400ustar00rootroot00000000000000# Compiled Object files *.slo *.lo *.o # Compiled Dynamic libraries *.so # Compiled Static libraries *.lai *.la *.a # Java classes *.class # dump logs *.log core # Deb/RPM/tar files *.tar.gz *.deb *.rpm # moc_* files moc_*.* qrc_*.* # autosave files *.autosave # the main program itself nixnote nixnote2 #user files *.pro.* #compiled translations translations/*.qm #Makefiles Makefile Makefile.Debug Makefile.Release #KDE workfile .directory /.project #eclipse files .cproject .settings #QMake file .qmake.stash nixnote2-2.0.2/NixNote2.pro000066400000000000000000000352661315604104400154630ustar00rootroot00000000000000#------------------------------------------------- # # Project created by QtCreator 2011-11-12T14:00:42 # #------------------------------------------------- greaterThan(QT_MAJOR_VERSION, 4) { QT += core gui widgets printsupport webkit webkitwidgets sql network xml dbus qml DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 unix:INCLUDEPATH += /usr/include/poppler/qt5 # unix:INCLUDEPATH += /usr/include/tidy win32:INCLUDEPATH +="$$PWD/winlib/includes/poppler/qt5" win32:INCLUDEPATH+= "$$PWD/winlib/includes" win32:LIBS += -L"$$PWD/winlib" -lpoppler-qt5 unix:LIBS += -lcurl \ -lpthread -L/usr/lib -lpoppler-qt5 -g -rdynamic win32:LIBS += -L"$$PWD/winlib" -lpoppler-qt5 -ltidy win32:RC_ICONS += "$$PWD/images/windowIcon.ico" } equals(QT_MAJOR_VERSION, 4) { QT += core gui webkit sql network xml script INCLUDEPATH += /usr/include/poppler/qt4 # INCLUDEPATH += /usr/include/tidy LIBS += -lcurl \ -lpthread -L/usr/lib -lpoppler-qt4 -g -rdynamic } TARGET = nixnote2 TEMPLATE = app RESOURCES = NixNote2.qrc UI_DIR = . CONFIG(debug, debug|release) { OBJECTS_DIR = build/debug MOC_DIR = build/debug } CONFIG += debug_and_release TRANSLATIONS = \ translations/nixnote2_cs_CZ.ts \ translations/nixnote2_de.ts \ translations/nixnote2_ca.ts \ translations/nixnote2_da.ts \ translations/nixnote2_es.ts \ translations/nixnote2_ja.ts \ translations/nixnote2_pt.ts \ translations/nixnote2_sk.ts \ translations/nixnote2_zh_TW.ts \ translations/nixnote2_fr.ts \ translations/nixnote2_pl.ts \ translations/nixnote2_ru.ts \ translations/nixnote2_zh_CN.ts SOURCES += main.cpp\ nixnote.cpp \ global.cpp \ settings/filemanager.cpp \ gui/nwebpage.cpp \ gui/nwebview.cpp \ sql/databaseconnection.cpp \ logger/qsdebugoutput.cpp \ logger/qslog.cpp \ logger/qslogdest.cpp \ sql/configstore.cpp \ gui/ntableview.cpp \ gui/ntableviewheader.cpp \ threads/syncrunner.cpp \ sql/datastore.cpp \ sql/usertable.cpp \ sql/tagtable.cpp \ sql/searchtable.cpp \ gui/nsearchview.cpp \ models/notemodel.cpp \ gui/nmainmenubar.cpp \ gui/nsearchviewitem.cpp \ gui/ntagview.cpp \ gui/ntagviewitem.cpp \ gui/widgetpanel.cpp \ gui/numberdelegate.cpp \ gui/ntabwidget.cpp \ gui/nnotebookviewitem.cpp \ gui/nnotebookview.cpp \ gui/datedelegate.cpp \ models/ntreemodel.cpp \ sql/resourcetable.cpp \ sql/notetable.cpp \ sql/notebooktable.cpp \ filters/notesortfilterproxymodel.cpp \ html/thumbnailer.cpp \ html/noteformatter.cpp \ settings/startupconfig.cpp \ dialog/logindialog.cpp \ gui/lineedit.cpp \ gui/nattributetree.cpp \ filters/filtercriteria.cpp \ gui/ntrashtree.cpp \ filters/filterengine.cpp \ models/notecache.cpp \ gui/nbrowserwindow.cpp \ threads/indexrunner.cpp \ html/tagscanner.cpp \ xml/importdata.cpp \ sql/notemetadata.cpp \ sql/sharednotebooktable.cpp \ gui/browserWidgets/ntitleeditor.cpp \ gui/browserWidgets/notebookmenubutton.cpp \ gui/browserWidgets/expandbutton.cpp \ gui/browserWidgets/urleditor.cpp \ gui/browserWidgets/tageditor.cpp \ gui/browserWidgets/tageditornewtag.cpp \ gui/browserWidgets/tagviewer.cpp \ gui/flowlayout.cpp \ gui/browserWidgets/authoreditor.cpp \ gui/browserWidgets/dateeditor.cpp \ gui/browserWidgets/datetimeeditor.cpp \ dialog/savedsearchproperties.cpp \ gui/treewidgeteditor.cpp \ dialog/tagproperties.cpp \ dialog/notebookproperties.cpp \ html/enmlformatter.cpp \ utilities/encrypt.cpp \ dialog/endecryptdialog.cpp \ oauth/oauthtokenizer.cpp \ oauth/oauthwindow.cpp \ communication/communicationmanager.cpp \ gui/browserWidgets/colormenu.cpp \ xml/xmlhighlighter.cpp \ utilities/mimereference.cpp \ dialog/accountdialog.cpp \ gui/shortcutkeys.cpp \ dialog/insertlinkdialog.cpp \ dialog/tabledialog.cpp \ dialog/encryptdialog.cpp \ dialog/insertlatexdialog.cpp \ gui/plugins/popplerviewer.cpp \ gui/plugins/pluginfactory.cpp \ gui/findreplace.cpp \ sql/linkednotebooktable.cpp \ application.cpp \ dialog/databasestatus.cpp \ gui/plugins/popplergraphicsview.cpp \ threads/counterrunner.cpp \ gui/nnotebookviewdelegate.cpp \ gui/ntrashviewdelegate.cpp \ gui/ntagviewdelegate.cpp \ watcher/filewatcher.cpp \ sql/filewatchertable.cpp \ watcher/filewatchermanager.cpp \ dialog/watchfolderadd.cpp \ dialog/watchfolderdialog.cpp \ dialog/preferences/preferencesdialog.cpp \ dialog/preferences/debugpreferences.cpp \ dialog/preferences/syncpreferences.cpp \ dialog/preferences/appearancepreferences.cpp \ settings/accountsmanager.cpp \ dialog/adduseraccountdialog.cpp \ dialog/accountmaintenancedialog.cpp \ gui/truefalsedelegate.cpp \ gui/browserWidgets/editorbuttonbar.cpp \ communication/communicationerror.cpp \ dialog/screencapture.cpp \ gui/imagedelegate.cpp \ dialog/preferences/searchpreferences.cpp \ html/attachmenticonbuilder.cpp \ dialog/locationdialog.cpp \ gui/browserWidgets/locationeditor.cpp \ dialog/preferences/localepreferences.cpp \ gui/reminderorderdelegate.cpp \ gui/browserWidgets/reminderbutton.cpp \ dialog/remindersetdialog.cpp \ reminders/reminderevent.cpp \ reminders/remindermanager.cpp \ dialog/notehistoryselect.cpp \ dialog/closenotebookdialog.cpp \ dialog/spellcheckdialog.cpp \ gui/externalbrowse.cpp \ sql/nsqlquery.cpp \ dialog/aboutdialog.cpp \ xml/importenex.cpp \ xml/exportdata.cpp \ dialog/logviewer.cpp \ dialog/htmlentitiesdialog.cpp \ qevercloud/exceptions.cpp \ qevercloud/http.cpp \ qevercloud/services_nongenerated.cpp \ qevercloud/oauth.cpp \ qevercloud/AsyncResult.cpp \ qevercloud/EventLoopFinisher.cpp \ qevercloud/generated/constants.cpp \ qevercloud/generated/services.cpp \ qevercloud/generated/types.cpp \ gui/traymenu.cpp \ gui/favoritesview.cpp \ gui/favoritesviewdelegate.cpp \ gui/favoritesviewitem.cpp \ sql/favoritestable.cpp \ sql/favoritesrecord.cpp \ filters/remotequery.cpp \ gui/browserWidgets/fontnamecombobox.cpp \ gui/browserWidgets/fontsizecombobox.cpp \ utilities/pixelconverter.cpp \ utilities/noteindexer.cpp \ xml/batchimport.cpp \ sql/databaseupgrade.cpp \ email/emailaddress.cpp \ email/mimeattachment.cpp \ email/mimecontentformatter.cpp \ email/mimefile.cpp \ email/mimehtml.cpp \ email/mimeinlinefile.cpp \ email/mimemessage.cpp \ email/mimemultipart.cpp \ email/mimepart.cpp \ email/mimetext.cpp \ email/quotedprintable.cpp \ email/smtpclient.cpp \ dialog/preferences/emailpreferences.cpp \ dialog/emaildialog.cpp \ settings/colorsettings.cpp \ utilities/debugtool.cpp \ cmdtools/cmdlinetool.cpp \ cmdtools/addnote.cpp \ utilities/crossmemorymapper.cpp \ cmdtools/cmdlinequery.cpp \ utilities/nuuid.cpp \ cmdtools/deletenote.cpp \ cmdtools/emailnote.cpp \ dialog/faderdialog.cpp \ cmdtools/extractnotetext.cpp \ cmdtools/extractnotes.cpp \ cmdtools/alternote.cpp \ cmdtools/importnotes.cpp \ dialog/preferences/thumbnailpreferences.cpp \ dialog/noteproperties.cpp \ dialog/shortcutdialog.cpp \ cmdtools/signalgui.cpp \ gui/browserWidgets/table/tablepropertiesdialog.cpp \ threads/browserrunner.cpp \ exits/exitpoint.cpp \ exits/exitmanager.cpp \ dialog/preferences/exitpreferences.cpp HEADERS += nixnote.h \ global.h \ settings/filemanager.h \ gui/nwebpage.h \ gui/nwebview.h \ sql/databaseconnection.h \ logger/qsdebugoutput.h \ logger/qslogdest.h \ logger/qslog.h \ sql/configstore.h \ gui/ntableview.h \ gui/ntableviewheader.h \ threads/syncrunner.h \ sql/datastore.h \ sql/usertable.h \ sql/tagtable.h \ sql/searchtable.h \ gui/nsearchview.h \ models/notemodel.h \ gui/nmainmenubar.h \ gui/nsearchviewitem.h \ gui/ntagview.h \ gui/ntagviewitem.h \ gui/widgetpanel.h \ gui/numberdelegate.h \ gui/ntabwidget.h \ gui/nnotebookviewitem.h \ gui/nnotebookview.h \ gui/datedelegate.h \ models/ntreemodel.h \ sql/resourcetable.h \ sql/notetable.h \ sql/notebooktable.h \ filters/notesortfilterproxymodel.h \ html/thumbnailer.h \ html/noteformatter.h \ settings/startupconfig.h \ dialog/logindialog.h \ gui/lineedit.h \ gui/nattributetree.h \ filters/filtercriteria.h \ gui/ntrashtree.h \ filters/filterengine.h \ models/notecache.h \ gui/nbrowserwindow.h \ threads/indexrunner.h \ html/tagscanner.h \ xml/importdata.h \ sql/notemetadata.h \ sql/sharednotebooktable.h \ gui/browserWidgets/ntitleeditor.h \ gui/browserWidgets/notebookmenubutton.h \ gui/browserWidgets/expandbutton.h \ gui/browserWidgets/urleditor.h \ gui/browserWidgets/tageditor.h \ gui/browserWidgets/tageditornewtag.h \ gui/browserWidgets/tagviewer.h \ gui/flowlayout.h \ gui/browserWidgets/authoreditor.h \ gui/browserWidgets/dateeditor.h \ gui/browserWidgets/datetimeeditor.h \ dialog/savedsearchproperties.h \ gui/treewidgeteditor.h \ dialog/tagproperties.h \ dialog/notebookproperties.h \ html/enmlformatter.h \ utilities/encrypt.h \ dialog/endecryptdialog.h \ oauth/oauthtokenizer.h \ oauth/oauthwindow.h \ communication/communicationmanager.h \ gui/browserWidgets/colormenu.h \ xml/xmlhighlighter.h \ utilities/mimereference.h \ dialog/accountdialog.h \ gui/shortcutkeys.h \ dialog/insertlinkdialog.h \ dialog/tabledialog.h \ dialog/encryptdialog.h \ dialog/insertlatexdialog.h \ gui/plugins/popplerviewer.h \ gui/plugins/pluginfactory.h \ gui/findreplace.h \ sql/linkednotebooktable.h \ application.h \ dialog/databasestatus.h \ gui/plugins/popplergraphicsview.h \ threads/counterrunner.h \ gui/nnotebookviewdelegate.h \ gui/ntrashviewdelegate.h \ gui/ntagviewdelegate.h \ watcher/filewatcher.h \ sql/filewatchertable.h \ watcher/filewatchermanager.h \ dialog/watchfolderadd.h \ dialog/watchfolderdialog.h \ dialog/preferences/preferencesdialog.h \ dialog/preferences/syncpreferences.h \ settings/accountsmanager.h \ dialog/adduseraccountdialog.h \ dialog/accountmaintenancedialog.h \ gui/truefalsedelegate.h \ gui/browserWidgets/editorbuttonbar.h \ communication/communicationerror.h \ dialog/screencapture.h \ gui/imagedelegate.h \ dialog/preferences/searchpreferences.h \ html/attachmenticonbuilder.h \ dialog/locationdialog.h \ gui/browserWidgets/locationeditor.h \ dialog/preferences/localepreferences.h \ gui/reminderorderdelegate.h \ gui/browserWidgets/reminderbutton.h \ dialog/remindersetdialog.h \ reminders/reminderevent.h \ reminders/remindermanager.h \ dialog/notehistoryselect.h \ dialog/closenotebookdialog.h \ dialog/spellcheckdialog.h \ gui/externalbrowse.h \ sql/nsqlquery.h \ dialog/aboutdialog.h \ xml/importenex.h \ xml/exportdata.h \ dialog/logviewer.h \ dialog/htmlentitiesdialog.h \ qevercloud/exceptions.h \ qevercloud/globals.h \ qevercloud/http.h \ qevercloud/impl.h \ qevercloud/oauth.h \ qevercloud/public.h \ qevercloud/thrift.h \ qevercloud/thumbnail.h \ qevercloud/AsyncResult.h \ qevercloud/EventLoopFinisher.h \ qevercloud/EverCloudException.h \ qevercloud/Optional.h \ qevercloud/qt4helpers.h \ qevercloud/generated/constants.h \ qevercloud/generated/services.h \ qevercloud/generated/types.h \ qevercloud/generated/types_impl.h \ qevercloud/generated/EDAMErrorCode.h \ qevercloud/include/QEverCloud.h \ qevercloud/include/QEverCloudOAuth.h \ gui/traymenu.h \ gui/favoritesview.h \ gui/favoritesviewdelegate.h \ gui/favoritesviewitem.h \ sql/favoritestable.h \ sql/favoritesrecord.h \ filters/remotequery.h \ gui/browserWidgets/fontnamecombobox.h \ gui/browserWidgets/fontsizecombobox.h \ utilities/pixelconverter.h \ utilities/noteindexer.h \ xml/batchimport.h \ sql/databaseupgrade.h \ email/emailaddress.h \ email/mimeattachment.h \ email/mimecontentformatter.h \ email/mimefile.h \ email/mimehtml.h \ email/mimeinlinefile.h \ email/mimemessage.h \ email/mimemultipart.h \ email/mimepart.h \ email/mimetext.h \ email/quotedprintable.h \ email/smtpclient.h \ email/smtpexports.h \ dialog/preferences/emailpreferences.h \ dialog/emaildialog.h \ settings/colorsettings.h \ utilities/debugtool.h \ cmdtools/cmdlinetool.h \ cmdtools/addnote.h \ utilities/crossmemorymapper.h \ cmdtools/cmdlinequery.h \ utilities/nuuid.h \ cmdtools/deletenote.h \ cmdtools/emailnote.h \ dialog/faderdialog.h \ cmdtools/extractnotetext.h \ cmdtools/extractnotes.h \ cmdtools/alternote.h \ cmdtools/importnotes.h \ plugins/webcam/webcaminterface.h \ plugins/hunspell/hunspellinterface.h \ dialog/preferences/thumbnailpreferences.h \ dialog/noteproperties.h \ dialog/shortcutdialog.h \ cmdtools/signalgui.h \ gui/browserWidgets/table/tablepropertiesdialog.h \ dialog/preferences/appearancepreferences.h \ dialog/preferences/debugpreferences.h \ threads/browserrunner.h \ exits/exitpoint.h \ exits/exitmanager.h \ dialog/preferences/exitpreferences.h unix:QMAKE_CXXFLAGS +=-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security unix:QMAKE_LFLAGS += -Wl,-Bsymbolic-functions -Wl,-z,relro win32:QMAKE_CXXFLAGS +=-g -O2 --param=ssp-buffer-size=4 -Wformat -Werror=format-security win32:QMAKE_LFLAGS += -Wl,-Bsymbolic-functions win32:DEFINES += SMTP_BUILD isEmpty(PREFIX) { PREFIX = /usr/local } binary.path = $$PREFIX/bin/ binary.files = nixnote2 desktop.path = $$PREFIX/share/applications/ desktop.files = nixnote2.desktop images.path = $$PREFIX/share/nixnote2/images images.files = images/* java.path = $$PREFIX/share/nixnote2/java java.files = java/* translations.path = $$PREFIX/share/nixnote2/translations translations.files = translations/* qss.path = $$PREFIX/share/nixnote2/qss qss.files = qss/* pixmap.path = $$PREFIX/share/pixmaps/ pixmap.extra = cp images/windowIcon.png images/nixnote2.png pixmap.files = images/nixnote2.png help.path = $$PREFIX/share/nixnote2/help help.files = help/* INSTALLS = binary desktop images java translations qss pixmap help nixnote2-2.0.2/NixNote2.qrc000066400000000000000000000103531315604104400154360ustar00rootroot00000000000000 images/password.png images/home.png images/left_arrow.png images/right_arrow.png images/synchronize.png images/fileclose.png images/tag.png images/lens.png images/trash.png images/attribute.png images/up_arrow_small.png images/down_arrow_small.png images/undo.png images/redo.png images/bold.png images/bulletList.png images/copy.png images/cut.png images/hline.png images/fontHilight.png images/fontColor.png images/indent.png images/justifyCenter.png images/justifyLeft.png images/justifyRight.png images/link.png images/numberList.png images/outdent.png images/underline.png images/strikethrough.png images/spellCheck.png images/paste.png images/todo.png images/italic.png images/newNote.png images/trunk.png images/usage.png images/black_dot.png images/notebookSmall.png images/local-notebook.png images/linked-notebook.png images/notebook-conflict.png images/public-notebook.png images/stack.png images/silhouette.png images/eraser.png images/grid.png images/navigation.png images/splash_logo.png images/alarmclock.png images/webcam.png images/printer.png images/delete.png images/encrypt.png images/gps.png images/notebook_old.png images/windowIcon.png images/expanded.png images/collapsed.png images/htmlentities.png images/screenCapture.png images/favorites.png images/trayicon.png images/datetime.png images/subscript.png images/superscript.png images/emailIcon.png images/justifyFull.png images/formatCode.png nixnote2-2.0.2/README.md000066400000000000000000000033661315604104400145460ustar00rootroot00000000000000# NixNote2 ## Introduction An unofficial client of Evernote for Linux. ![Nixnote](screenshot.png) ## Installation ### Debian and Ubuntu #### Install from distribution repository For users of Debian Stretch (Debian 9), Debian unstable and Ubuntu 17.04+, you may install from the official repositories. This will become the stable release we will encourage users to install. ```bash sudo apt update sudo apt install nixnote2 ``` You may find the package information on [Debian PTS](https://tracker.debian.org/pkg/nixnote2). #### Install via daily PPA For testing the very latest functionality, there is an unstable Daily-build PPA for Debian/Ubuntu (provided by [artmg](https://github.com/artmg/nixnote2-packaging/wiki)). This is _only_ recommended for Advanced users. ```bash sudo add-apt-repository ppa:nixnote/nixnote2-daily sudo apt update sudo apt install nixnote2 ``` ### Arch Linux NixNote2 is available via AUR: [nixnote-beta](https://aur.archlinux.org/packages/nixnote-beta/), [nixnote](https://aur.archlinux.org/packages/nixnote/). These packages are also available in [[archlinuxcn]](https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/) unofficial repository. ### Gentoo Linux NixNote is acailable via gentoo-zh overlay, you can install by: ```bash # run with root privileges layman -a gentoo-zh emerge nixnote:1 # to install nixnote-1.6 # or emerge nixnote:2 # to install nixnote-2.0 ``` ### RPM package on Copr The NixNote2 package for Fedora and other distros using RPM packages is now on Copr, provided by [Nuno Dias](http://copr-dist-git.fedorainfracloud.org/cgit/nunodias/nixnote2/). ```bash dnf copr enable nunodias/nixnote2 dnf install nixnote2 # OR for OLDER Distros using yum yum copr enable nunodias/nixnote2 yum install nixnote2 ``` nixnote2-2.0.2/README.txt000066400000000000000000000015401315604104400147550ustar00rootroot00000000000000NixNote:: Evernote client clone for Linux Copyright 2009-2016, Randy Baumgarte Licensed under GNU General Public License version 2+ This is an incomplete clone of Evernote designed to run on Linux. While this is designed to work with Evernote, it is in no way connected with or supported by Evernote. Any problems you encounter will not be corrected by them and, since this is GPL software, you are using this software at your own risk. Documents: changelog.txt: ChangeLog and development history install.txt: Build and install instructions gpl.txt: License description of GPL v2. license.txt: Legal notices for licenses and trademarks theme.ini: A file containing theme configuration options. shortcut_howto.txt: How-to document to setup shortcut keys. colors.txt: A sample coniguration file to customize note bockground color options. nixnote2-2.0.2/Readme_Arch_Linux.txt000066400000000000000000000003321315604104400173270ustar00rootroot00000000000000For Arch Linux, you need to install additional libraries. There is a "libcurl-compat" package for arch: https://aur.archlinux.org/packages/libcurl-compat/ Install it and then run: $ LD_PRELOAD=libcurl.so.3 nixnote2 nixnote2-2.0.2/application.cpp000066400000000000000000000045611315604104400162740ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "application.h" #include "global.h" #include // Windows Check #ifndef _WIN32 #include #endif // End windows check extern Global global; Application::Application(int &argc, char** argv) : QApplication(argc, argv) { } bool Application::notify(QObject *receiver_, QEvent *event_) { try { return QApplication::notify(receiver_, event_); } catch (std::exception &ex) { QLOG_ERROR() << "**********************************************************"; QLOG_ERROR() << "**********************************************************"; QLOG_ERROR() << "**********************************************************"; QLOG_ERROR() << "**********************************************************"; QLOG_ERROR() << "**********************************************************"; QLOG_ERROR() << "**********************************************************"; QLOG_ERROR() << "**********************************************************"; QLOG_ERROR() << "std::exception was caught: " << ex.what(); // Windows Check #ifndef _WIN32 void *array[30]; size_t size; // get void*'s for all entries on the stack size = backtrace(array, 30); // print out all the frames to stderr backtrace_symbols_fd(array, size, 2); #endif // End windows check emit (stdException(QString::fromStdString(ex.what()))); } return false; } nixnote2-2.0.2/application.h000066400000000000000000000024031315604104400157320ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef APPLICATION_H #define APPLICATION_H #include class Application : public QApplication { Q_OBJECT public: explicit Application(int &argc, char **argv); bool notify(QObject *receiver_, QEvent *event_); signals: void stdException(QString msg); public slots: }; #endif // APPLICATION_H nixnote2-2.0.2/changelog.txt000066400000000000000000000142541315604104400157550ustar00rootroot00000000000000NixNote (2.0.1) stable; urgency=low * Added the ability to code user exit routines. * Added
 opton to enter pre-formatted text.
  * Changed UTF-8 encoding to be the default option.
  * Better C++11 compatibility.                    
  * Bug fixes.
 -- Randy Baumgarte   Tue, 12 Sep 2017 12:00:00 -0400


NixNote (2.0.1) stable; urgency=low
  * Add the ability to customize some aspects of a table
    within a note.
  * Added an auto-save interval. This can be customized 
    in the preferences dialog.
  * Add the ability to fully justify text.
  * Add "double click" tray option. May not work on all
    Window managers & isn't recommended with the 
    "single click" option.
  * Add the ability to specify the db location via a 
    --condigDir command line option.
  * Add option to intercept SIGHUP on Linux.
  * Add option to clear & mark complete multiple reminders
    from the note list.
  * Added support for reminder search syntax & attribute filters. 
  * Add support for new plugin locations.
  * Chinese translation improvements.
  * Performance improvements & Bug fixes.
 -- Randy Baumgarte   Thu, 9 Mar 2017 12:00:00 -0400


NixNote (2.0) stable; urgency=low
  * Added the ability to export a note as a PDF.
  * Added the ability to alter the default notebook.
  * Added a new material theme.
  * Ctrl+S will automatically save a note that has been changed.
  * Bug fixes.
 -- Randy Baumgarte   Tue, 7 Feb 2017 12:00:00 -0400


NixNote (2.0-beta-11) stable; urgency=low
  * Added the ability to paste multiple attachments at a time.
  * Added the ability to force a reindexing of a specific note.
  * Added the ability to disable font preview in the editor 
    dialog.
  * Added the ability to enable/disable note reminders from
    the command line.
  * Added the ability to re-download a specific note from 
    Evernote.
  * Added a "test" button on the email preferences dialog.
  * Added socks5 proxy support.
  * Added the experimental option to force UTF8 encoding if 
    not specified by Evernote.
  * Added a dialog box to show which the currently defined
    shortcuts.
  * Added "About Qt" dialog box.
  * Added a command to open the Github page.
  * Added the ability to use find/replace shortcuts in an
    external window.
  * Added the ability to automatically restart after the
    API rate limit has been exceeded (experimental).
  * Added the option to show a popup on sync errors.
  * Added better Qt5 support.
  * Better support for Windows builds.
  * Bug fixes.
 -- Randy Baumgarte   Wed, 28 Dec 2016 12:00:00 -0400

NixNote (2.0-beta-10) stable; urgency=low
  * Splt Hunspell into a plugin.
  * Bug fixes.
 -- Randy Baumgarte   Sun, 18 Sep 2016 12:00:00 -0400


NixNote (2.0-beta-9) stable; urgency=low
  * Added the ability to append to an existing note via the 
    command line.
  * Added the ability to disable or customize thumnail intervals.
  * Bug fixes.
 -- Randy Baumgarte   Sun, 14 Aug 2016 12:00:00 -0400


NixNote (2.0-beta-8) stable; urgency=low
  * Added the ability to open and close a notebook via the
    command line.
  * Separated the webcam into a separate plugin so 
    opencv is not required.
  * Added a few new shortcuts.
  * Bug fixes.
 -- Randy Baumgarte   Sat, 25 Jun 2016 12:00:00 -0400


NixNote (2.0-beta-7) stable; urgency=low
  * Added the ability to create a Table of Contents from 
    selected notes.
  * More aggressive cleanup of notes to remove invalid
    attributes.
  * Note synchronization no longer stops after the first
    failure.
  * Added more command line options.
  * Added the option to automatically add a username to 
    new notes.
  * Updated Czech translation.
  * Bug fixes.
 -- Randy Baumgarte   Fri, 18 Dec 2015 18:00:00 -0400


NixNote (2.0-beta-6) stable; urgency=low
  * Added a "Presentation Mode" that hides almost 
    everything except the editor, the attributes bar, 
    and the tabs of open notes.
  * Added the ability to customize the editor's 
    default font & background color via the theme.ini.  
    This is for people who were experiencing problems 
    with darker themes.  A "Dark Editor" theme has 
    also been included as an example.
  * The default for viewing PDFs intline has been 
    changed to "no" due to a weird error with Gnome.  
  * A lot of different command line options have been   
    added. This also makes nixnot2-cmd obsolete.  
  * Added the option to disable PDF local indexing.  
    This only impacts new/modified PDFs.  Data received 
    from Evernote is still searched.
  * Better mesasges when a note sync fails.
  * Bug fixes.
 -- Randy Baumgarte   Wed, 09 Dec 2015 20:00:00 -0400


NixNote (2.0-beta-5) stable; urgency=low
  * Added the ability to email notes.
  * Searching will now highlight PDF results.
  * Added Print Preview & the ability to only print s
    elected text.
  * Notes that are marked as shortcuts are now visible 
    in the tray icon.
  * Added the option to use notify-send instead of Qt's 
    popup notification.
  * A colors.txt file can be added to customize note
    background color options.
  * Basic support for nixnote2-cmd utility.
  * Various GUI enhancements.
  * Lots of bug fixes.
 -- Randy Baumgarte   Mon, 16 Nov 2015 14:00:00 -0400


NixNote (2.0-beta-4) stable; urgency=low
  * Added the ability to auto-hide the editor tool bar.
  * Added the ability to show/hide more GUI componennts.
  * Added the ability to customize tray icon actions.               
  * Added more command line options.
  * Various GUI enhancements.
  * Lots of bug fixes.
 -- Randy Baumgarte   Tue, 13 Oct 2015 14:00:00 -0400


NixNote (2.0-beta-3) stable; urgency=low
  * Added the ability to change GUI fonts & font sizes.
  * Added the ability to change GUI icons.
  * Added the option to only show popup notices if a sync fails.
  * Added debug option to disable tag name sorting to bypass 
    non-ASCII character bug.
  * Lots of bug fixes.
 -- Randy Baumgarte   Sat, 04 Apr 2015 14:00:00 -0400


NixNote (2.0-beta-2) stable; urgency=low
  * Beta 2.  Lots of bug fixes and removal of Thrift.
 -- Randy Baumgarte   Sat, 26 Apr 2014 14:00:00 -0400
nixnote2-2.0.2/cmdtools/000077500000000000000000000000001315604104400151035ustar00rootroot00000000000000nixnote2-2.0.2/cmdtools/addnote.cpp000066400000000000000000000111761315604104400172330ustar00rootroot00000000000000/*********************************************************************************
NixNote - An open-source client for the Evernote service.
Copyright (C) 2015 Randy Baumgarte

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
***********************************************************************************/


#include "addnote.h"
#include 
#include 
#include "global.h"
#include "sql/notetable.h"
#include "sql/resourcetable.h"

extern Global global;

AddNote::AddNote(QObject *parent) :
    QObject(parent)
{
    title = tr("Untitled Note");
    created = QDateTime::currentDateTime().toString("yyyy-MM-ddTHH:mm:ss.zzzZ");
    updated = QDateTime::currentDateTime().toString("yyyy-MM-ddTHH:mm:ss.zzzZ");
    reminder = "";
    attachmentDelimiter = "%%";
    lid = 0;
}



//*******************************************
//* Write out the file to the dbi directory.
//*******************************************
void AddNote::write(QString uuid) {

    QString filename = uuid +".nnex";

    // We use a temporary file to write to.  At the end it will be renamed into
    // the DBI directory.  We don't write into it because there can be
    // timing issues where the FileWatcher picks up the file before
    // the entire text is written out and it causes an error.
    QFile xmlFile(global.fileManager.getTmpDirPath()+filename);


    if (!xmlFile.open(QIODevice::WriteOnly)) {
        qDebug() << "Unable to open file.";
        return;
    }

    QXmlStreamWriter *writer = new QXmlStreamWriter(&xmlFile);
    writer->setAutoFormatting(true);
    writer->setCodec("UTF-8");
    writer->writeStartDocument();
    writer->writeDTD("");
    writer->writeStartElement("nixnote-import");
    writer->writeAttribute("version", "2");
    writer->writeAttribute("application", "NixNote");
    writer->writeAttribute("applicationVersion", "2.x");
    writer->writeStartElement("NoteAdd");


    writer->writeTextElement("Lid", QString::number(lid));
    writer->writeTextElement("Title", title);

    writer->writeStartElement("Content");
    writer->writeCDATA(content);
    writer->writeEndElement();

    if (notebook != "")
        writer->writeTextElement("Notebook", notebook);
    if (created != "")
        writer->writeTextElement("Created", created);
    if (updated != "")
        writer->writeTextElement("Updated", updated);
    if (reminder != "")
        writer->writeTextElement("Reminder", reminder);
    for (int i=0; iwriteTextElement("Tag", tags[i]);
    }
    for (int i=0; iwriteTextElement("Attachment", attachments[i]);
    }
    writer->writeTextElement("AttachmentDelimiter", attachmentDelimiter);
    writer->writeEndElement();
    writer->writeEndElement();
    writer->writeEndDocument();
    xmlFile.close();
    QFile::rename(global.fileManager.getTmpDirPath()+filename,global.fileManager.getDbiDirPath()+filename);
}



// Create  a new resource and add it to the database
qint32 AddNote::createResource(Resource &r, int sequence, QByteArray data,  QString mime, bool attachment, QString filename, qint32 noteLid) {
    qint32 lid = noteLid;
    ConfigStore cs(global.db);
    qint32 rlid = cs.incrementLidCounter();

    QByteArray hash = QCryptographicHash::hash(data, QCryptographicHash::Md5);

    QString guid =  QString::number(rlid);
    NoteTable noteTable(global.db);
    r.guid = guid;
    r.noteGuid = noteTable.getGuid(lid);
    QString noteguid = r.noteGuid;
    if (noteguid == "")
        return 0;
    r.mime = mime;
    r.active = true;
    r.updateSequenceNum = sequence;
    r.width = 0;
    r.height = 0;
    r.duration = 0;
    ResourceAttributes a;
    if (r.attributes.isSet())
        a = r.attributes;
    a.attachment = attachment;
    if (filename != "") {
        a.fileName = filename;
    }

    Data d;
    d.body = data;
    d.bodyHash = hash;
    d.size = data.size();

    r.data = d;
    r.attributes = a;
    ResourceTable resourceTable(global.db);
    resourceTable.add(rlid, r, true, lid);

    return rlid;
}
nixnote2-2.0.2/cmdtools/addnote.h000066400000000000000000000031501315604104400166710ustar00rootroot00000000000000/*********************************************************************************
NixNote - An open-source client for the Evernote service.
Copyright (C) 2015 Randy Baumgarte

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
***********************************************************************************/



#ifndef ADDNOTE_H
#define ADDNOTE_H

#include 
#include 

#include "qevercloud/include/QEverCloud.h"
using namespace qevercloud;

class AddNote : public QObject
{
    Q_OBJECT
public:
    explicit AddNote(QObject *parent = 0);
    qint32 lid;
    QString title;
    QString created;
    QString updated;
    QString reminder;
    QString content;
    QString notebook;
    QStringList tags;
    QStringList attachments;
    QString attachmentDelimiter;
    qint32 createResource(Resource &r, int sequence, QByteArray data,  QString mime, bool attachment, QString filename, qint32 noteLid);

    void write(QString uuid);

signals:

public slots:

};

#endif // ADDNOTE_H
nixnote2-2.0.2/cmdtools/alternote.cpp000066400000000000000000000164151315604104400176130ustar00rootroot00000000000000/*********************************************************************************
NixNote - An open-source client for the Evernote service.
Copyright (C) 2015 Randy Baumgarte

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
***********************************************************************************/
#include 
#include 

#include "sql/notetable.h"
#include "global.h"
#include "filters/filtercriteria.h"
#include "filters/filterengine.h"
#include "sql/notebooktable.h"
#include "sql/notetable.h"
#include "sql/tagtable.h"
#include "utilities/nuuid.h"

#include "alternote.h"


extern Global global;

AlterNote::AlterNote(QObject *parent) :
    QObject(parent)
{
    addTagNames.clear();
    delTagNames.clear();
    notebook.clear();
    lids.clear();
    query="";
    clearReminder=false;
    reminderCompleted=false;
    reminder="";
}



// Do the alter.  If the notebook is not found we create it.
// If a tag is not found for an add, we add it.  If a tag is
// not found for a deleteTag, we just ignore it.
int AlterNote::alterNote() {

    // If a query is specified, we find the matching notes.
    if (query != "") {
        FilterCriteria *filter = new FilterCriteria();
        global.filterCriteria.append(filter);
        global.filterPosition = 0;
        FilterEngine engine;
        filter->setSearchString(query);
        QList lids;
        engine.filter(filter, &lids);
        this->lids.append(lids);
    }

    NotebookTable bookTable(global.db);
    TagTable tagTable(global.db);
    NoteTable noteTable(global.db);

    // Loop through each note requested.
    for (int i=0; i 0 && noteTable.hasTag(lid,tagLid)) {
                noteTable.removeTag(lid, tagLid, true);
            }
        }

        if (reminderCompleted) {
            noteTable.setReminderCompleted(lid, true);
        }

        if (clearReminder) {
            noteTable.removeReminder(lid);
        }
    }

    return 0;
}



QString AlterNote::wrap() {

    QString returnValue;
    QXmlStreamWriter *writer = new QXmlStreamWriter(&returnValue);
    writer->setAutoFormatting(true);
    writer->setCodec("UTF-8");
    writer->writeStartDocument();
    writer->writeDTD("");
    writer->writeStartElement("nixnote-alternote");
    writer->writeAttribute("version", "2");
    writer->writeAttribute("application", "NixNote");
    writer->writeAttribute("applicationVersion", "2.x");
    writer->writeStartElement("AlterNote");
    for (int i=0; iwriteTextElement("id", QString::number(lids[i]));
    writer->writeTextElement("Notebook", notebook);
    writer->writeTextElement("Query", query);
    for (int i=0; iwriteTextElement("AddTag", addTagNames[i]);
    for (int i=0; iwriteTextElement("DelTag", delTagNames[i]);
    if (clearReminder)
        writer->writeTextElement("ClearReminder", "true");
    if (reminderCompleted)
        writer->writeTextElement("ReminderComplete", "true");
    writer->writeEndElement();
    writer->writeEndElement();
    writer->writeEndDocument();
    return returnValue;
}




void AlterNote::unwrap(QString data) {
    lastError = 0;
    QXmlStreamReader reader(data);
    while (!reader.atEnd()) {
        reader.readNext();
        if (reader.hasError()) {
            errorMessage = reader.errorString();
            QLOG_ERROR() << "************************* ERROR READING IMPORT " << errorMessage;
            lastError = 16;
            return;
        }
        if (reader.name().toString().toLower() == "alternote" && !reader.isEndElement()) {
            reader.readNext();
            while(reader.name().toString().toLower() != "alternote") {
                if (reader.name().toString().toLower() == "id" && reader.isStartElement()) {
                    reader.readNext();
                    lids.append(reader.text().toString().toInt());
                } else if (reader.name().toString().toLower() == "notebook" && reader.isStartElement()) {
                    reader.readNext();
                    notebook = reader.text().toString();
                } else if (reader.name().toString().toLower() == "addtag" && reader.isStartElement()) {
                    reader.readNext();
                    addTagNames.append(reader.text().toString());
                } else if (reader.name().toString().toLower() == "reminder" && reader.isStartElement()) {
                    reader.readNext();
                    reminder = reader.text().toString();
                }  else if (reader.name().toString().toLower() == "clearreminder" && reader.isStartElement()) {
                    reader.readNext();
                    if (reader.text().toString().toLower() == "true")
                        clearReminder=true;
                } else if (reader.name().toString().toLower() == "remindercomplete" && reader.isStartElement()) {
                    if (reader.text().toString().toLower() == "true")
                        reminderCompleted=true;
                } else if (reader.name().toString().toLower() == "deltag" && reader.isStartElement()) {
                    reader.readNext();
                    delTagNames.append(reader.text().toString());
                } else if (reader.name().toString().toLower() == "query" && reader.isStartElement()) {
                    reader.readNext();
                    query = reader.text().toString();
                } else
                    reader.readNext();
            }
        }
    }
}
nixnote2-2.0.2/cmdtools/alternote.h000066400000000000000000000030671315604104400172570ustar00rootroot00000000000000/*********************************************************************************
NixNote - An open-source client for the Evernote service.
Copyright (C) 2015 Randy Baumgarte

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
***********************************************************************************/


#ifndef ALTERNOTE_H
#define ALTERNOTE_H

#include 
#include 
#include 

class AlterNote : public QObject
{
    Q_OBJECT
public:
    explicit AlterNote(QObject *parent = 0);
    QStringList     addTagNames;
    QStringList     delTagNames;
    QString         notebook;
    QList   lids;
    QString         query;
    int             lastError;
    QString         errorMessage;
    QString         reminder;
    bool            clearReminder;
    bool            reminderCompleted;

    QString wrap();
    void unwrap(QString data);
    int alterNote();

signals:

public slots:

};

#endif // ALTERNOTE_H
nixnote2-2.0.2/cmdtools/cmdlinequery.cpp000066400000000000000000000327511315604104400203200ustar00rootroot00000000000000/*********************************************************************************
NixNote - An open-source client for the Evernote service.
Copyright (C) 2015 Randy Baumgarte

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
***********************************************************************************/


#include "cmdlinequery.h"
#include 
#include 
#include 
#include 

#include "sql/notetable.h"
#include "sql/notebooktable.h"
#include "global.h"
#include "sql/nsqlquery.h"


extern Global global;

CmdLineQuery::CmdLineQuery(QObject *parent) :
    QObject(parent)
{
    stdoutReq=true;
    printHeaders=true;
}


void CmdLineQuery::write(QList lids, QString filename) {
    QString format = "%i%n%t%g%c";
    if (this->outputFormat != "")
        format = outputFormat;
    QString delimiter = "|";
    if (this->delimiter != "")
        delimiter = this->delimiter;
    QFile *outputFile = NULL;
    if (filename != "") {
        outputFile = new QFile(filename);
        stdoutReq=false;
        outputFile->open(QIODevice::WriteOnly);
        if (!outputFile->isOpen()) {
            return;
        }
        out = new QTextStream(outputFile);
    }

    QStringList formats = format.split("%");

    if (printHeaders) {
        QString line;
        for (int j=1; j 0)
                        date = reminderTime.toString(global.dateFormat + QString(" ") +global.timeFormat);
                    line = line + lineBuilder(date, formats[j], 20);
                }
                if (formats[j].startsWith("v")) {
                    QString date="";
                    if (reminderDoneTime.toMSecsSinceEpoch() > 0)
                        date = reminderDoneTime.toString(global.dateFormat + QString(" ") +global.timeFormat);
                    line = line + lineBuilder(date, formats[j], 20);
                }
                if (jisOpen())
        outputFile->close();
}



QString CmdLineQuery::lineBuilder(QString value, QString format, int defaultPadding, QChar padChar) {
    QString formatString = format;
    int padLen = defaultPadding;
    bool truncate = false;
    if (formatString.contains(":")) {
        truncate=true;
        formatString.chop(1);
    }
    formatString = formatString.mid(1);
    int newPadding = formatString.toInt();
    if (newPadding>0)
        padLen = newPadding;
    if (padLen>0)
        return value.leftJustified(padLen, padChar, truncate);
    else
        return value;
}

void CmdLineQuery::writeLine(QString line) {
    if (stdoutReq) {
        std::cout << line.toStdString();
        return;
    }
    *out << line;
}


QString CmdLineQuery::wrap() {

    QString returnValue;
    QXmlStreamWriter *writer = new QXmlStreamWriter(&returnValue);
    writer->setAutoFormatting(true);
    writer->setCodec("UTF-8");
    writer->writeStartDocument();
    writer->writeDTD("");
    writer->writeStartElement("nixnote-query");
    writer->writeAttribute("version", "2");
    writer->writeAttribute("application", "NixNote");
    writer->writeAttribute("applicationVersion", "2.x");
    writer->writeStartElement("Query");
    writer->writeTextElement("ReturnUuid", this->returnUuid);
    writer->writeTextElement("QueryString", query);
    writer->writeTextElement("Delimiter", delimiter);
    writer->writeTextElement("OutputFormat", outputFormat);
    if (printHeaders)
        writer->writeTextElement("PrintHeaders", "Yes");
    else
        writer->writeTextElement("PrintHeaders", "No");
    writer->writeEndElement();
    writer->writeEndElement();
    writer->writeEndDocument();
    return returnValue;
}

void CmdLineQuery::unwrap(QString data) {
    lastError = 0;
    QLOG_DEBUG() << data;
    QXmlStreamReader reader(data);
    while (!reader.atEnd()) {
        reader.readNext();
        if (reader.hasError()) {
            errorMessage = reader.errorString();
            QLOG_ERROR() << "************************* ERROR READING IMPORT " << errorMessage;
            lastError = 16;
            return;
        }
        if (reader.name().toString().toLower() == "query" && !reader.isEndElement()) {
            reader.readNext();
            while(reader.name().toString().toLower() != "query") {
                if (reader.name().toString().toLower() == "returnuuid" && reader.isStartElement()) {
                    reader.readNext();
                    returnUuid = reader.text().toString();
                } else if (reader.name().toString().toLower() == "querystring" && reader.isStartElement()) {
                    reader.readNext();
                    query = reader.text().toString();
                } else if (reader.name().toString().toLower() == "delimiter" && reader.isStartElement()) {
                    reader.readNext();
                    delimiter = reader.text().toString();
                } else if (reader.name().toString().toLower() == "outputformat" && reader.isStartElement()) {
                    reader.readNext();
                    outputFormat = reader.text().toString();
                } else if (reader.name().toString().toLower() == "printheaders" && reader.isStartElement()) {
                    reader.readNext();
                    QString value = reader.text().toString();
                    if (value.toLower()=="yes")
                        this->printHeaders=true;
                    else
                        this->printHeaders=false;
                } else
                    reader.readNext();
            }
        }
    }
}
nixnote2-2.0.2/cmdtools/cmdlinequery.h000066400000000000000000000031561315604104400177620ustar00rootroot00000000000000/*********************************************************************************
NixNote - An open-source client for the Evernote service.
Copyright (C) 2015 Randy Baumgarte

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
***********************************************************************************/


#ifndef CMDLINEQUERY_H
#define CMDLINEQUERY_H

#include 
#include 

class CmdLineQuery : public QObject
{
    Q_OBJECT
private:
    QTextStream *out;
    bool stdoutReq;
    void writeLine(QString line);
    QString lineBuilder(QString value, QString format, int defaultPadding=0, QChar padChar=' ');

public:
    explicit CmdLineQuery(QObject *parent = 0);
    QString query;
    QString delimiter;
    QString outputFormat;
    bool printHeaders;
    void write(QList lids, QString filename);
    QString wrap();
    void unwrap(QString data);
    int lastError;
    QString errorMessage;
    QString returnUuid;

signals:

public slots:

};

#endif // CMDLINEQUERY_H
nixnote2-2.0.2/cmdtools/cmdlinetool.cpp000066400000000000000000000677551315604104400201440ustar00rootroot00000000000000/*********************************************************************************
NixNote - An open-source client for the Evernote service.
Copyright (C) 2015 Randy Baumgarte

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
***********************************************************************************/



#include "cmdlinetool.h"
#include "global.h"
#include 
#include 
#include "html/enmlformatter.h"
#include "utilities/crossmemorymapper.h"
#include "filters/filtercriteria.h"
#include "filters/filterengine.h"
#include "sql/notebooktable.h"
#include "sql/tagtable.h"
#include "sql/notetable.h"
#include "utilities/nuuid.h"
#include "email/smtpclient.h"
#include "utilities/mimereference.h"
#include "threads/syncrunner.h"


extern Global global;

CmdLineTool::CmdLineTool(QObject *parent) :
    QObject(parent)
{
}

// Run the command line request.
int CmdLineTool::run(StartupConfig &config) {
#if QT_VERSION < 0x050000
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
#endif

    // Force info level messages only
    QsLogging::Logger& logger = QsLogging::Logger::instance();
    logger.setLoggingLevel(QsLogging::InfoLevel);

    QString errmsg(tr("Unable to attach to shared memory segment.  Is the other NixNote running?\n"));
    if (config.sync()) {
        // If the shared memory segment doesn't exist, we just do a sync & exit
        if (!global.sharedMemory->attach()) {
            return this->sync();
        }
        global.sharedMemory->write(QString("SNCHRONIZE"));
        global.sharedMemory->detach();
        return 1;
    }
    if (config.shutdown()) {
        if (!global.sharedMemory->attach()) {
            std::cout << errmsg.toStdString();
            return 16;
        }
        global.sharedMemory->write(QString("IMMEDIATE_SHUTDOWN"));
        global.sharedMemory->detach();
        return 1;
    }
    if (config.show()) {
        if (!global.sharedMemory->attach()) {
            std::cout << errmsg.toStdString();
            return 16;
        }
        global.sharedMemory->write(QString("SHOW_WINDOW"));
        global.sharedMemory->detach();
        return 1;
    }


    if (config.addNote()) {
        return addNote(config);
    }

    if (config.appendNote()) {
        return appendNote(config);
    }

    if (config.query()) {
        return queryNotes(config);
    }
    if (config.deleteNote()) {
        return deleteNote(config);
    }
    if (config.emailNote()) {
        return emailNote(config);
    }
    if (config.readNote()) {
        return readNote(config);
    }
    if (config.exports() || config.backup()) {
        return exportNotes(config);
    }
    if (config.import()) {
        return importNotes(config);
    }
    if (config.alterNote()) {
        return alterNote(config);
    }
    if (config.openNotebook()) {
        return openNotebook(config);
    }
    if (config.closeNotebook()) {
        return closeNotebook(config);
    }
    if (config.signalOtherGui()) {
        return signalGui(config);
    }
    return 0;
}



// Email a note via the command line.
int CmdLineTool::emailNote(StartupConfig config) {
    // Look to see if another NixNote is running.  If so, then we
    // expect a response if the note was delete.  Otherwise, we
    // do it ourself.
    bool useCrossMemory = true;
    global.sharedMemory->unlock();
    global.sharedMemory->detach();
    if (!global.sharedMemory->attach()) {
        useCrossMemory = false;
    }
    if (useCrossMemory) {
        global.sharedMemory->write("EMAIL_NOTE:" + config.email->wrap());
    } else {
        global.db = new DatabaseConnection("nixnote");  // Startup the database
        return config.email->sendEmail();
    }
    return 0;
}


// Delete a note via the command line
int CmdLineTool::deleteNote(StartupConfig config) {
    bool useCrossMemory = true;

    if (config.delNote->verifyDelete) {
        std::string verify;
        std::cout << QString(tr("Type DELETE to verify: ")).toStdString();
        std::cin >> verify;
        QString qVerify = QString::fromStdString(verify);
        if (qVerify.toLower() != "delete")
            return 16;
    }

    // Look to see if another NixNote is running.  If so, then we
    // expect a response if the note was delete.  Otherwise, we
    // do it ourself.
    global.sharedMemory->unlock();
    global.sharedMemory->detach();
    if (!global.sharedMemory->attach()) {
        useCrossMemory = false;
    }
    if (useCrossMemory) {
        global.sharedMemory->write("DELETE_NOTE:" + QString::number(config.delNote->lid));
    } else {
        global.db = new DatabaseConnection("nixnote");  // Startup the database
        NoteTable noteTable(global.db);
        noteTable.deleteNote(config.delNote->lid,true);
    }
    return 0;
}


// Query notes via the command line
int CmdLineTool::queryNotes(StartupConfig config) {
    bool expectResponse = true;

    // Look to see if another NixNote is running.  If so, then we
    // expect a response of the LID created.  First we detach it so
    // we are not talking to ourselves.
    global.sharedMemory->unlock();
    global.sharedMemory->detach();
    if (!global.sharedMemory->attach()) {
        expectResponse = false;
    }
    if (expectResponse) {
        NUuid uuid;
        config.queryNotes->returnUuid = uuid.create();
        QString queryString = config.queryNotes->wrap();
        global.sharedMemory->write("CMDLINE_QUERY:" + queryString);

        int cnt = 0;
        int maxWait=10;
        QString tmpFile = global.fileManager.getTmpDirPath()+config.queryNotes->returnUuid+".txt";
        QFile responseFile(tmpFile);
        while (!responseFile.exists() && cntsetSearchString(config.queryNotes->query);
        QList lids;
        engine.filter(filter, &lids);
        config.queryNotes->write(lids, "");
    }
    return 0;
}


// Add a note via the command line.  if Nixnote is running,
// the new note is copied into the dbi directory and
// auto-imported.  If it is not running it is created directly.
int CmdLineTool::addNote(StartupConfig config) {

// Windows Check
#ifndef _WIN32
#ifdef Q_OS_WIN32
    _setmode(_fileno(stdin), _O_BINARY);
#endif
#endif // End windows check

    // If we are reding stdin
    if (config.newNote->content == "")  {
        QByteArray content;

        while(!std::cin.eof()) {
            char arr[1024];
            std::cin.read(arr,sizeof(arr));
            int s = std::cin.gcount();
            content.append(arr,s);
            content.append("
"); content.replace("\n","
"); } config.newNote->content = QString::fromAscii(content); } if (!config.newNote->content.contains("content.prepend(""); } if (!config.newNote->content.contains("content.append(""); } EnmlFormatter formatter; formatter.setHtml(config.newNote->content); config.newNote->content = formatter.rebuildNoteEnml(); bool expectResponse = true; // Look to see if another NixNote is running. If so, then we // expect a response of the LID created. First we detach it so // we are not talking to ourselves. global.sharedMemory->unlock(); global.sharedMemory->detach(); if (!global.sharedMemory->attach()) { expectResponse = false; } else { global.sharedMemory->detach(); } if (expectResponse) { NUuid uuid; QString id = uuid.create(); // Setup cross memory for response CrossMemoryMapper crossMemory(id); if (!crossMemory.allocate(512)) expectResponse = false; // Write out the segment config.newNote->write(id); // Start checking for the response int cnt = 0; qint32 newLid = -1; int maxWait = 5; while (expectResponse && cnt 0) { std::cout << newLid << QString(tr(" has been created.\n")).toStdString(); return newLid; } else { std::cout << QString(tr("No response from NixNote. Please verify that the note was created.\n")).toStdString(); } } else { // Another NN isn't found, so we do this ourself global.db = new DatabaseConnection("nixnote"); // Startup the database NUuid uuid; Note newNote; newNote.content = config.newNote->content; newNote.active = true; newNote.created = QDateTime::currentMSecsSinceEpoch(); newNote.guid = uuid.create(); if (config.newNote->title != "") newNote.title = config.newNote->title; else newNote.title = tr("Untitled Note"); // Process tags newNote.tagGuids = QList(); newNote.tagNames=QStringList(); for (int i=0; itags.size(); i++) { QString tagName = config.newNote->tags[i]; TagTable tagTable(global.db); qint32 tagLid = tagTable.findByName(tagName, 0); QString tagGuid; // Do we need to add the tag? if (tagLid == 0) { Tag tag; tag.name = tagName; NUuid uuid; tagGuid = uuid.create(); tag.guid = tagGuid; tagTable.add(0, tag, true, 0); } else { tagTable.getGuid(tagGuid, tagLid); } newNote.tagNames->append(tagName); newNote.tagNames->append(tagGuid); } // Process the notebook if (config.newNote->notebook != "") { QString notebookName = config.newNote->notebook; NotebookTable notebookTable(global.db); qint32 lid = notebookTable.findByName(notebookName); QString notebookGuid; // Do we need to add the notebook? if (lid == 0) { Notebook book; book.name = notebookName; NUuid uuid; QString newGuid = uuid.create(); book.guid = newGuid; notebookGuid = newGuid; lid = notebookTable.add(0, book, true, false); } else { notebookTable.getGuid(notebookGuid, lid); } newNote.notebookGuid = notebookGuid; } else { NotebookTable notebookTable(global.db); newNote.notebookGuid = notebookTable.getDefaultNotebookGuid(); } // Do the dates if (config.newNote->created != "") { QString dateString = config.newNote->created; QDateTime date = QDateTime::fromString(dateString.trimmed(), "yyyy-MM-ddTHH:mm:ss.zzzZ"); newNote.created = date.toMSecsSinceEpoch(); } if (config.newNote->updated != "") { QString dateString = config.newNote->updated; QDateTime date = QDateTime::fromString(dateString, "yyyy-MM-ddTHH:mm:ss.zzzZ"); newNote.updated = date.toMSecsSinceEpoch(); } if (config.newNote->reminder != "") { QString dateString = config.newNote->reminder; QDateTime date = QDateTime::fromString(dateString, "yyyy-MM-ddTHH:mm:ss.zzzZ"); if (date > QDateTime::currentDateTime()) { if (!newNote.attributes.isSet()) { NoteAttributes na; newNote.attributes = na; } newNote.attributes->reminderTime = date.toMSecsSinceEpoch(); } } NoteTable noteTable(global.db); qint32 newLid = noteTable.addStub(newNote.guid); // Do the attachments for (int i=0; iattachments.size(); i++) { QString filename = config.newNote->attachments[i]; QFile file(filename); if (file.exists()) { file.open(QIODevice::ReadOnly); QByteArray ba = file.readAll(); file.close(); MimeReference mimeRef; QString extension = filename; int endPos = filename.lastIndexOf("."); if (endPos != -1) extension = extension.mid(endPos); QString mime = mimeRef.getMimeFromExtension(extension); Resource newRes; bool attachment = true; if (mime == "application/pdf" || mime.startsWith("image/")) attachment = false; config.newNote->createResource(newRes, 0, ba, mime, attachment, QFileInfo(filename).fileName(), newLid); QByteArray hash; if (newRes.data.isSet()) { Data d = newRes.data; if (d.bodyHash.isSet()) hash = d.bodyHash; } if (!newNote.resources.isSet()) { newNote.resources = QList(); } QString mediaString = ""; if (newNote.content->contains(config.newNote->attachmentDelimiter)) { //newNote.content = newNote.content->replace(config.newNote->attachmentDelimiter,mediaString); newNote.content = newNote.content->replace(newNote.content->indexOf(config.newNote->attachmentDelimiter), config.newNote->attachmentDelimiter.size(), mediaString); } else { newNote.content = newNote.content->replace("","
"+mediaString+""); } newNote.resources->append(newRes); } } noteTable.expunge(newLid); noteTable.add(newLid,newNote,true); std::cout << newLid << QString(tr(" has been created.\n")).toStdString(); return newLid; } return 0; } // Append text to a note via the command line. int CmdLineTool::appendNote(StartupConfig config) { // Windows Check #ifndef _WIN32 #ifdef Q_OS_WIN32 _setmode(_fileno(stdin), _O_BINARY); #endif #endif // end windows check // If we are reding stdin if (config.newNote->content == "") { QByteArray content; while(!std::cin.eof()) { char arr[1024]; std::cin.read(arr,sizeof(arr)); int s = std::cin.gcount(); content.append(arr,s); content.append("
"); content.replace("\n","
"); } config.newNote->content = QString::fromAscii(content); } if (!config.newNote->content.contains("content.prepend(""); } if (!config.newNote->content.contains("content.append(""); } EnmlFormatter formatter; formatter.setHtml(config.newNote->content); config.newNote->content = formatter.rebuildNoteEnml(); bool expectResponse = true; // Look to see if another NixNote is running. If so, then we // expect a response of the LID created. First we detach it so // we are not talking to ourselves. global.sharedMemory->unlock(); global.sharedMemory->detach(); if (!global.sharedMemory->attach()) { expectResponse = false; } else { global.sharedMemory->detach(); } if (expectResponse) { NUuid uuid; QString id = uuid.create(); // Setup cross memory for response CrossMemoryMapper crossMemory(id); if (!crossMemory.allocate(512)) expectResponse = false; // Write out the segment config.newNote->write(id); // Start checking for the response int cnt = 0; qint32 newLid = -1; int maxWait = 5; while (expectResponse && cnt 0) { std::cout << newLid << QString(tr(" has been appended.\n")).toStdString(); return newLid; } else { std::cout << QString(tr("No response from NixNote. Please verify that the note was appended.\n")).toStdString(); } } } else { // Another NN isn't found, so we do this ourself global.db = new DatabaseConnection("nixnote"); // Startup the database Note newNote; // Fetch the existing note NoteTable noteTable(global.db); if (!noteTable.get(newNote, config.newNote->lid, true, true)) { std::cerr << config.newNote->lid << QString(tr(" was not found.\n")).toStdString(); return -1; } // Append the text to the existing note newNote.content->replace("", "
"); // Chop off the beginning of the new text to remove the content.indexOf("content = config.newNote->content.mid(startOfNote+9); // Append the two notes newNote.content = newNote.content + config.newNote->content; // Do the attachments for (int i=0; iattachments.size(); i++) { QString filename = config.newNote->attachments[i]; QFile file(filename); if (file.exists()) { file.open(QIODevice::ReadOnly); QByteArray ba = file.readAll(); file.close(); MimeReference mimeRef; QString extension = filename; int endPos = filename.lastIndexOf("."); if (endPos != -1) extension = extension.mid(endPos); QString mime = mimeRef.getMimeFromExtension(extension); Resource newRes; bool attachment = true; if (mime == "application/pdf" || mime.startsWith("image/")) attachment = false; config.newNote->createResource(newRes, 0, ba, mime, attachment, QFileInfo(filename).fileName(), config.newNote->lid); QByteArray hash; if (newRes.data.isSet()) { Data d = newRes.data; if (d.bodyHash.isSet()) hash = d.bodyHash; } if (!newNote.resources.isSet()) { newNote.resources = QList(); } QString mediaString = ""; if (newNote.content->contains(config.newNote->attachmentDelimiter)) { //newNote.content = newNote.content->replace(config.newNote->attachmentDelimiter,mediaString); newNote.content = newNote.content->replace(newNote.content->indexOf(config.newNote->attachmentDelimiter), config.newNote->attachmentDelimiter.size(), mediaString); } else { newNote.content = newNote.content->replace("","
"+mediaString+""); } newNote.resources->append(newRes); } } noteTable.expunge(config.newNote->lid); noteTable.add(config.newNote->lid,newNote,true); std::cout << config.newNote->lid << QString(tr(" has been appended.\n")).toStdString(); return config.newNote->lid; } return 0; } // Read a note via the command line and extract the text // contents. int CmdLineTool::readNote(StartupConfig config) { bool useCrossMemory = true; // Look to see if another NixNote is running. If so, then we // expect a response. Otherwise, we do it ourself. global.sharedMemory->unlock(); global.sharedMemory->detach(); if (!global.sharedMemory->attach()) { useCrossMemory = false; } if (useCrossMemory) { NUuid uuid; config.extractText->returnUuid = uuid.create(); CrossMemoryMapper sharedMemory(config.extractText->returnUuid); if (!sharedMemory.allocate(500*1024)) return 16; sharedMemory.clearMemory(); global.sharedMemory->write("READ_NOTE:" + config.extractText->wrap()); int maxWait = 5; bool expectResponse = true; int cnt = 0; while (expectResponse && cntunwrap(data); } else { sleep(1); } cnt++; } if (!expectResponse) std::cout << config.extractText->text.toStdString() << endl; else std::cout << tr("No response received from NixNote.").toStdString(); } else { global.db = new DatabaseConnection("nixnote"); // Startup the database NoteTable noteTable(global.db); Note n; QString text; if (noteTable.get(n,config.extractText->lid,false,false)) text = config.extractText->stripTags(n.content); else text = tr("Note not found."); std::cout << text.toStdString() << endl; } return 0; } // Export notes or do a backup via the command line int CmdLineTool::exportNotes(StartupConfig config) { if (global.sharedMemory->attach()) { std::cout << tr("This cannot be done with NixNote running.").toStdString() << endl; return 16; } global.db = new DatabaseConnection("nixnote"); // Startup the database if (config.exportNotes->backup) config.exportNotes->backupDB(); else config.exportNotes->extract(); return 0; } // Import notes from a nnex file. int CmdLineTool::importNotes(StartupConfig config) { if (global.sharedMemory->attach()) { std::cout << tr("This cannot be done with NixNote running.").toStdString() << endl; return 16; } global.db = new DatabaseConnection("nixnote"); // Startup the database config.importNotes->import(); return 0; } // Alter a note's notebook or add/remove tags for a note. int CmdLineTool::alterNote(StartupConfig config) { // Look to see if another NixNote is running. If so, then we // expect a response, otherwise we do it ourself. bool useCrossMemory = true; global.sharedMemory->unlock(); global.sharedMemory->detach(); if (!global.sharedMemory->attach()) { useCrossMemory = false; } if (useCrossMemory) { global.sharedMemory->write("ALTER_NOTE:" + config.alter->wrap()); } else { global.db = new DatabaseConnection("nixnote"); // Startup the database return config.alter->alterNote(); } return 0; } // Open a notebook int CmdLineTool::openNotebook(StartupConfig config) { if (global.sharedMemory->attach()) { std::cout << tr("This cannot be done with NixNote running.").toStdString() << endl; return 16; } global.db = new DatabaseConnection("nixnote"); // Startup the database NotebookTable bookTable(global.db); for (int i=0; i0) { bookTable.openNotebook(lid); } else { std::cout << tr("Notebook not found: ").toStdString() << config.notebookList[i].toStdString() << endl; } } return 0; } // Close a notebook int CmdLineTool::closeNotebook(StartupConfig config) { if (global.sharedMemory->attach()) { std::cout << tr("This cannot be done with NixNote running.").toStdString() << endl; return 16; } global.db = new DatabaseConnection("nixnote"); // Startup the database NotebookTable bookTable(global.db); for (int i=0; i0) { bookTable.closeNotebook(lid); } else { std::cout << tr("Notebook not found: ").toStdString() << config.notebookList[i].toStdString() << endl; } } return 0; } #include "models/notemodel.h" #include "sql/nsqlquery.h" // Do a sync int CmdLineTool::sync() { if (!global.accountsManager->oauthTokenFound()) { std::cout << tr("OAuth token not found.").toStdString() << endl; return 16; } global.db = new DatabaseConnection("nixnote"); // Startup the database // Check if the table exists. If not, create it. NSqlQuery sql(global.db); sql.exec("Select * from sqlite_master where type='table' and name='NoteTable';"); if (!sql.next()) { NoteModel model(this); model.createTable(); } sql.finish(); SyncRunner runner; runner.synchronize(); if (runner.error) { std::cout << tr("Error synchronizing with Evernote.").toStdString() << std::endl; return 16; } std::cout << tr("Sync completed.").toStdString() << std::endl; return 0; } int CmdLineTool::signalGui(StartupConfig config) { // Make sure another one is actually running. If not, we exit out. if (!global.sharedMemory->attach()) { return 16; } if (config.signalGui->show) global.sharedMemory->write(QString("SIGNAL_GUI: SHOW")); if (config.signalGui->takeScreenshot) global.sharedMemory->write(QString("SIGNAL_GUI: SCREENSHOT")); if (config.signalGui->shutdown) global.sharedMemory->write(QString("SIGNAL_GUI: SHUTDOWN")); if (config.signalGui->newNote) global.sharedMemory->write(QString("SIGNAL_GUI: NEW_NOTE")); if (config.signalGui->newExternalNote) global.sharedMemory->write(QString("SIGNAL_GUI: NEW_EXTERNAL_NOTE")); if (config.signalGui->openNote) global.sharedMemory->write("SIGNAL_GUI: OPEN_NOTE " + QVariant(config.signalGui->lid).toString()); if (config.signalGui->openExternalNote) global.sharedMemory->write("SIGNAL_GUI: OPEN_EXTERNAL_NOTE " + QVariant(config.signalGui->lid).toString()); if (config.signalGui->openNoteNewTab) global.sharedMemory->write("SIGNAL_GUI: OPEN_NOTE_NEW_TAB " + QVariant(config.signalGui->lid).toString()); if (config.signalGui->synchronize) global.sharedMemory->write(QString("SIGNAL_GUI: SYNCHRONIZE")); return 0; } nixnote2-2.0.2/cmdtools/cmdlinetool.h000066400000000000000000000033741315604104400175740ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef CMDLINETOOL_H #define CMDLINETOOL_H #include #include #include "settings/startupconfig.h" class CmdLineTool : public QObject { Q_OBJECT public: explicit CmdLineTool(QObject *parent = 0); int run(StartupConfig &config); int readNote(StartupConfig config); int addNote(StartupConfig config); int appendNote(StartupConfig config); int queryNotes(StartupConfig config); int deleteNote(StartupConfig config); int emailNote(StartupConfig config); int exportNotes(StartupConfig config); int alterNote(StartupConfig config); int importNotes(StartupConfig config); int openNotebook(StartupConfig config); int closeNotebook(StartupConfig config); int sync(); int signalGui(StartupConfig config); signals: public slots: }; #endif // CMDLINETOOL_H nixnote2-2.0.2/cmdtools/deletenote.cpp000066400000000000000000000020451315604104400177400ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "deletenote.h" DeleteNote::DeleteNote(QObject *parent) : QObject(parent) { verifyDelete=true; } nixnote2-2.0.2/cmdtools/deletenote.h000066400000000000000000000022651315604104400174110ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef DELETENOTE_H #define DELETENOTE_H #include class DeleteNote : public QObject { Q_OBJECT public: explicit DeleteNote(QObject *parent = 0); bool verifyDelete; qint32 lid; signals: public slots: }; #endif // DELETENOTE_H nixnote2-2.0.2/cmdtools/emailnote.cpp000066400000000000000000000304331315604104400175670ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "emailnote.h" #include #include #include "global.h" #include "email/mimehtml.h" #include "utilities/mimereference.h" #include "email/mimeinlinefile.h" #include "sql/resourcetable.h" #include "sql/notetable.h" #include "html/noteformatter.h" extern Global global; EmailNote::EmailNote(QObject *parent) : QObject(parent) { ccSelf = false; } QString EmailNote::wrap() { QString returnValue; QXmlStreamWriter *writer = new QXmlStreamWriter(&returnValue); writer->setAutoFormatting(true); writer->setCodec("UTF-8"); writer->writeStartDocument(); writer->writeDTD(""); writer->writeStartElement("nixnote-email"); writer->writeAttribute("version", "2"); writer->writeAttribute("application", "NixNote"); writer->writeAttribute("applicationVersion", "2.x"); writer->writeStartElement("EmailNote"); writer->writeTextElement("id", QString::number(lid)); writer->writeTextElement("subject", subject); writer->writeTextElement("To", to); writer->writeTextElement("Cc", cc); writer->writeTextElement("Bcc", bcc); writer->writeStartElement("Note"); writer->writeCDATA(note); writer->writeEndElement(); if (ccSelf) writer->writeTextElement("CcSelf", "Yes"); else writer->writeTextElement("CcSelf", "No"); writer->writeEndElement(); writer->writeEndElement(); writer->writeEndDocument(); return returnValue; } void EmailNote::unwrap(QString data) { lastError = 0; QXmlStreamReader reader(data); while (!reader.atEnd()) { reader.readNext(); if (reader.hasError()) { errorMessage = reader.errorString(); QLOG_ERROR() << "************************* ERROR READING IMPORT " << errorMessage; lastError = 16; return; } if (reader.name().toString().toLower() == "emailnote" && !reader.isEndElement()) { reader.readNext(); while(reader.name().toString().toLower() != "emailnote") { if (reader.name().toString().toLower() == "to" && reader.isStartElement()) { reader.readNext(); to = reader.text().toString(); } else if (reader.name().toString().toLower() == "cc" && reader.isStartElement()) { reader.readNext(); cc = reader.text().toString(); } else if (reader.name().toString().toLower() == "id" && reader.isStartElement()) { reader.readNext(); lid = reader.text().toString().toInt(); } else if (reader.name().toString().toLower() == "subject" && reader.isStartElement()) { reader.readNext(); subject = reader.text().toString(); } else if (reader.name().toString().toLower() == "bcc" && reader.isStartElement()) { reader.readNext(); bcc = reader.text().toString(); } else if (reader.name().toString().toLower() == "note" && reader.isStartElement()) { reader.readNext(); note = reader.text().toString(); } else if (reader.name().toString().toLower() == "ccself" && reader.isStartElement()) { reader.readNext(); QString value = reader.text().toString(); if (value.toLower()=="yes") this->ccSelf=true; else this->ccSelf=false; } else reader.readNext(); } } } } QStringList EmailNote::tokenizeString(QString value) { QStringList values = value.split(QRegExp(",|;|\\s+"), QString::SkipEmptyParts); // There is probably an easier way to do this with regular expressions, but // I am horrible at regular expressions. for (int i=0; istripContentsForPrint(body); //QString textContents = editor->page()->currentFrame()->toPlainText(); QStringList images; QStringList attachments; // Now, go thgough & reformat all the img tags. int cidCount=0; QLOG_DEBUG() << contents; int pos = contents.indexOf("src=\"/"); while (pos>=0) { QString localFile = contents.mid(pos+5); int endPos = localFile.indexOf("\""); localFile = localFile.mid(0,endPos); images.append(localFile); endPos = pos+endPos; QString part1 = contents.mid(0,pos); QString part2 = contents.mid(endPos+14); cidCount++; contents = part1 + "src='cid:file" +QString::number(cidCount) +"'" + part2; pos = contents.indexOf("src=\"/", pos+5); } // next, look for all the attachments pos = contents.indexOf("href=\"nnres:"); while (pos >0 -1) { QString localFile = contents.mid(pos+12); int endPos = localFile.indexOf("\""); localFile = localFile.mid(0,endPos); attachments.append(localFile); cidCount++; pos = contents.indexOf("href=\"nnres:", pos+5); } // If the user adds a note, then prepend it to the beginning. if (note.trimmed() != "") { int pos = contents.indexOf("", pos); contents.insert(endPos+1, Qt::escape(note)+"


"); } text->setHtml(contents); message->addPart(text); // Add all the images for (int i=0; isetContentName(ra.fileName); } file->setContentId("file"+QString::number(i+1)); file->setContentType(mime); message->addPart(file); } // Add all the attachments for (int i=0; isetContentName(ra.fileName); } file->setContentType(mime); message->addPart(file); } return; } // Strip the contents from the current webview in preparation for printing. QString EmailNote::stripContentsForPrint(QString contents) { int pos = contents.indexOf("", pos); QString lidString = contents.mid(contents.indexOf("lid=", pos)+5); lidString = lidString.mid(0,lidString.indexOf("\" ")); contents = contents.mid(0,pos) + "")+contents.mid(endPos+1); pos = contents.indexOf("beginGroup("Email"); QString server = global.settings->value("smtpServer", "").toString(); int port = global.settings->value("smtpPort", 25).toInt(); QString smtpConnectionType = global.settings->value("smtpConnectionType", "TcpConnection").toString(); QString userid = global.settings->value("userid", "").toString(); QString password = global.settings->value("password", "").toString(); QString senderEmail = global.settings->value("senderEmail", "").toString(); QString senderName = global.settings->value("senderName", "").toString(); global.settings->endGroup(); if (senderEmail.trimmed() == "" || server.trimmed() == "") { errorMessage = tr("SMTP Server has not been setup.\nPlease specify server settings in the Preferences menu."); return 8; } QStringList toAddresses = tokenizeString(to); QStringList ccAddresses = tokenizeString(cc); QStringList bccAddresses = tokenizeString(bcc); if (senderName.trimmed() == "") senderName = senderEmail; SmtpClient::ConnectionType type = SmtpClient::TcpConnection; if (smtpConnectionType == "SslConnection") type = SmtpClient::SslConnection; if (smtpConnectionType == "TlsConnection") type = SmtpClient::TlsConnection; SmtpClient smtp(server, port, type); smtp.setResponseTimeout(-1); // We need to set the username (your email address) and password // for smtp authentification. smtp.setUser(userid); smtp.setPassword(password); // Now we create a MimeMessage object. This is the email. MimeMessage message; EmailAddress sender(senderEmail, senderName); message.setSender(&sender); for (int i=0; i #include "email/smtpclient.h" #include "email/mimemessage.h" class EmailNote : public QObject { Q_OBJECT private: public: explicit EmailNote(QObject *parent = 0); QString to; QString cc; QString bcc; QString comments; QString subject; QString note; bool ccSelf; int lastError; qint32 lid; QString errorMessage; QString contents; void unwrap(QString data); QString wrap(); QStringList tokenizeString(QString value); void prepareEmailMessage(MimeMessage *message, QString note, QString body); QString stripContentsForPrint(QString contents); int sendEmail(); signals: public slots: }; #endif // EMAILNOTE_H nixnote2-2.0.2/cmdtools/extractnotes.cpp000066400000000000000000000053331315604104400203360ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "extractnotes.h" #include "xml/exportdata.h" #include "global.h" #include "filters/filtercriteria.h" #include "filters/filterengine.h" #include "sql/notetable.h" extern Global global; ExtractNotes::ExtractNotes(QObject *parent) : QObject(parent) { this->deleteAfterExtract=false; this->verifyDelete=true; } void ExtractNotes::extract() { if (outputFile.trimmed() == "") { std::cout << QString(tr("Output file not specified.")).toStdString() << endl; return; } if (query != "") { FilterCriteria *filter = new FilterCriteria(); global.filterCriteria.append(filter); global.filterPosition = 0; FilterEngine engine; filter->setSearchString(query); QList lids; engine.filter(filter, &lids); this->lids.append(lids); } ExportData exports(backup, true, this); if (!backup) { exports.lids.append(this->lids); } exports.backupData(this->outputFile); if (deleteAfterExtract) { if (verifyDelete) { std::string verify; std::cout << QString(tr("Deleting notes:")).toStdString() << endl; std::cout << QString(tr("Type DELETE to verify: ")).toStdString(); std::cin >> verify; QString qVerify = QString::fromStdString(verify); if (qVerify.toLower() != "delete") return; } NoteTable ntable(global.db); for (int i=0; ioutputFile); } nixnote2-2.0.2/cmdtools/extractnotes.h000066400000000000000000000025161315604104400200030ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef EXTRACTNOTES_H #define EXTRACTNOTES_H #include class ExtractNotes : public QObject { Q_OBJECT public: explicit ExtractNotes(QObject *parent = 0); QList lids; QString query; QString outputFile; bool backup; bool deleteAfterExtract; bool verifyDelete; void extract(); void backupDB(); signals: public slots: }; #endif // EXTRACTNOTES_H nixnote2-2.0.2/cmdtools/extractnotetext.cpp000066400000000000000000000100021315604104400210450ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "global.h" #include #include "extractnotetext.h" extern Global global; ExtractNoteText::ExtractNoteText(QObject *parent) : QObject(parent) { } QString ExtractNoteText::wrap() { QString returnValue; QXmlStreamWriter *writer = new QXmlStreamWriter(&returnValue); writer->setAutoFormatting(true); writer->setCodec("UTF-8"); writer->writeStartDocument(); writer->writeDTD(""); writer->writeStartElement("nixnote-text-extract"); writer->writeAttribute("version", "2"); writer->writeAttribute("application", "NixNote"); writer->writeAttribute("applicationVersion", "2.x"); writer->writeStartElement("NoteExtract"); writer->writeTextElement("ReturnUuid", this->returnUuid); if (this->text.trimmed() != "") writer->writeTextElement("ReturnText", this->text); writer->writeTextElement("Lid", QString::number(this->lid)); writer->writeEndElement(); writer->writeEndElement(); writer->writeEndDocument(); return returnValue; } void ExtractNoteText::unwrap(QString data) { lastError = 0; QXmlStreamReader reader(data); while (!reader.atEnd()) { reader.readNext(); if (reader.hasError()) { errorMessage = reader.errorString(); QLOG_ERROR() << "************************* ERROR READING IMPORT " << errorMessage; lastError = 16; return; } if (reader.name().toString().toLower() == "nixnote-text-extract" && !reader.isEndElement()) { reader.readNext(); while(reader.name().toString().toLower() != "nixnote-text-extract") { if (reader.name().toString().toLower() == "returnuuid" && reader.isStartElement()) { reader.readNext(); returnUuid = reader.text().toString(); } else if (reader.name().toString().toLower() == "lid" && reader.isStartElement()) { reader.readNext(); lid = reader.text().toString().toInt(); } else if (reader.name().toString().toLower() == "returntext" && reader.isStartElement()) { reader.readNext(); text = reader.text().toString(); } else reader.readNext(); } } } } QString ExtractNoteText::stripTags(QString content) { // Start looking through the note qint32 startPos =content.indexOf(QChar('<')); qint32 endPos = content.indexOf(QChar('>'),startPos)+1; content.remove(startPos,endPos-startPos); // Remove encrypted text while (content.contains("") + 11; content = content.mid(0,startPos)+content.mid(endPos); } // Get the content as an HTML doc. This will strip any // remaining tags out, but will also return it as a formatted // string that preserves things like a newline. QTextDocument textDocument; textDocument.setHtml(content); return textDocument.toPlainText(); } nixnote2-2.0.2/cmdtools/extractnotetext.h000066400000000000000000000025511315604104400205240ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef EXTRACTNOTETEXT_H #define EXTRACTNOTETEXT_H #include class ExtractNoteText : public QObject { Q_OBJECT public: explicit ExtractNoteText(QObject *parent = 0); qint32 lid; QString text; QString wrap(); int lastError; QString errorMessage; QString returnUuid; void unwrap(QString data); QString stripTags(QString content); signals: public slots: }; #endif // EXTRACTNOTETEXT_H nixnote2-2.0.2/cmdtools/importnotes.cpp000066400000000000000000000014301315604104400201700ustar00rootroot00000000000000#include "importnotes.h" #include #include #include "xml/importdata.h" ImportNotes::ImportNotes(QObject *parent) : QObject(parent) { inputFile = ""; } // Perform the import via the command line int ImportNotes::import() { if (inputFile.trimmed() == "") { std::cout << QString(tr("Input file not specified.")).toStdString() << std::endl; return 16; } QFile f(inputFile); if (!f.exists()) { std::cout << QString(tr("Input file not found.")).toStdString() << std::endl; return 16; } ImportData importData(false,true,0); importData.import(inputFile); if (importData.lastError != 0) { std::cout << importData.errorMessage.toStdString() << std::endl; return 16; } return 0; } nixnote2-2.0.2/cmdtools/importnotes.h000066400000000000000000000004111315604104400176330ustar00rootroot00000000000000#ifndef IMPORTNOTES_H #define IMPORTNOTES_H #include class ImportNotes : public QObject { Q_OBJECT public: explicit ImportNotes(QObject *parent = 0); QString inputFile; int import(); signals: public slots: }; #endif // IMPORTNOTES_H nixnote2-2.0.2/cmdtools/signalgui.cpp000066400000000000000000000004371315604104400175750ustar00rootroot00000000000000#include "signalgui.h" SignalGui::SignalGui() { takeScreenshot = false; openNote= false; newExternalNote = false; newNote = false; shutdown = false; synchronize = false; openExternalNote = false; openNoteNewTab = false; show = false; lid = 0; } nixnote2-2.0.2/cmdtools/signalgui.h000066400000000000000000000005641315604104400172430ustar00rootroot00000000000000#ifndef SIGNALGUI_H #define SIGNALGUI_H #include class SignalGui : public QObject { Q_OBJECT public: SignalGui(); bool takeScreenshot; bool openNote; bool openExternalNote; bool openNoteNewTab; bool newExternalNote; bool newNote; bool shutdown; bool synchronize; bool show; qint32 lid; }; #endif // SIGNALGUI_H nixnote2-2.0.2/colors.txt000066400000000000000000000005601315604104400153220ustar00rootroot00000000000000# This file is used to add custom colors to the background color options for a note. # All lines are in the value of "text name"="color value". The "text name" is the # display name that appears in the title. The "color value" is either the color # name or the hex value of the color. # # All lines beginning with a # are treated as a comment. # #Light Gray=cccccc nixnote2-2.0.2/communication/000077500000000000000000000000001315604104400161245ustar00rootroot00000000000000nixnote2-2.0.2/communication/communicationerror.cpp000066400000000000000000000026401315604104400225510ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "communicationerror.h" // Default constructor CommunicationError::CommunicationError(QObject *parent) : QObject(parent) { this->reset(); } // Reset the last communication error messages void CommunicationError::reset() { retryCount = 0; maxRetryCount = 3; code = 0; message = ""; type = None; } // Retry after the last error bool CommunicationError::retry() { if (retryCount < maxRetryCount) return true; else return false; } nixnote2-2.0.2/communication/communicationerror.h000066400000000000000000000043211315604104400222140ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef COMMUNICATIONERROR_H #define COMMUNICATIONERROR_H #include //************************************************ //* This class is used to let the user know //* about any errors when doing a sync. //************************************************ class CommunicationError : public QObject { Q_OBJECT public: // The type of errors possible enum CommunicationErrorType { None = 0, Unknown = 1, EDAMSystemException = 2, EDAMUserException = 3, TTransportException = 4, EDAMNotFoundException = 5, StdException = 6, TSSLException = 7, TException = 8, RateLimitExceeded = 9, ThriftException = 10 }; explicit CommunicationError(QObject *parent = 0); // Constructor CommunicationErrorType type; // The last error type we encountered QString message; // The last error message from Evernote int code; // The EDAM error code void reset(); // Reset all values bool retry(); // Retry after the last error int retryCount; // Current retry count int maxRetryCount; // Maximum number of times to retry signals: public slots: }; #endif // COMMUNICATIONERROR_H nixnote2-2.0.2/communication/communicationmanager.cpp000066400000000000000000001226141315604104400230360ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "communicationmanager.h" #include "oauth/oauthtokenizer.h" #include "global.h" // Windows Check #ifndef _WIN32 #include #endif // end windows check #include #include #include #include "sql/resourcetable.h" #include "sql/tagtable.h" #include #include #include #include #include #include #include // Windows Check #ifndef _WIN32 #include #include #include #include #include #include #endif // End windows check #include "utilities/debugtool.h" extern Global global; // Generic constructor CommunicationManager::CommunicationManager(DatabaseConnection *db) { this->db = db; evernoteHost = global.server; userStorePath = "/edam/user"; clientName = "NixNote/Linux"; inkNoteList = new QList< QPair* >(); thumbnailList = new QList< QPair* >(); postData = new QUrl(); tagGuidMap = new QHash; initComplete = false; noteStore = NULL; myNoteStore = NULL; linkedNoteStore = NULL; if (networkAccessManager == NULL) { networkAccessManager = new QNetworkAccessManager(this); // connect(networkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(inkNoteFinished(QNetworkReply*))); } } // Destructor CommunicationManager::~CommunicationManager() { delete postData; delete tagGuidMap; } //*********************************************************************** //*********************************************************************** //*** Init & default user connection routines *** //*********************************************************************** //*********************************************************************** // Connect to Evernote bool CommunicationManager::enConnect() { // Get the oAuth token OAuthTokenizer tokenizer; QString data = global.accountsManager->getOAuthToken(); tokenizer.tokenize(data); authToken = tokenizer.oauth_token; // authToken = global.accountsManager->getOAuthToken(); return init(); } // start the communication session bool CommunicationManager::init() { if (initComplete) return true; if (!initNoteStore()) return false; initComplete = true; return true; } // Initialize the note store bool CommunicationManager::initNoteStore() { using namespace qevercloud; QLOG_DEBUG() << "Inside CommunicationManager::initNoteStore()"; User user; if (!getUserInfo(user)) return false; noteStorePath = "/edam/note/" +user.shardId; QString noteStoreUrl = QString("https://")+evernoteHost+noteStorePath; myNoteStore = new NoteStore(noteStoreUrl, authToken, this); noteStore = myNoteStore; return true; } // Disconnect from Evernote's servers (for private notebooks) void CommunicationManager::enDisconnect() { //noteStore->disconnect(); userStore->disconnect(); if (linkedNoteStore != NULL) linkedNoteStore->disconnect(); if (myNoteStore != NULL) myNoteStore->disconnect(); } // Get a user's information bool CommunicationManager::getUserInfo(User &user) { QLOG_DEBUG() << "Inside CommunicationManager::getUserInfo"; userStore = new UserStore(evernoteHost, authToken); try { User u = userStore->getUser(); user = u; } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); return false; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.type = CommunicationError::EDAMUserException; error.code = e.errorCode; error.message = errorWhat(e.what()); return false; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return false; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; handleEDAMNotFoundException(e); return false; } catch (const std::exception &e) { QLOG_DEBUG() << "Std exception: " << e.what(); handleStdException(e); return false; } QLOG_TRACE_OUT(); return true; } //*********************************************************************** //*********************************************************************** //*** Sync state & sync functions - non linked *** //*********************************************************************** //*********************************************************************** // Get the current sync state bool CommunicationManager::getSyncState(QString token, SyncState &syncState) { if (token == "") token = authToken; try { if (token == authToken) noteStore = myNoteStore; else noteStore = linkedNoteStore; syncState = noteStore->getSyncState(authToken); } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); return false; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.type = CommunicationError::EDAMUserException; error.code = e.errorCode; error.message = errorWhat(e.what()); return false; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return false; } return true; } // Get a sync chunk bool CommunicationManager::getSyncChunk(SyncChunk &chunk, int start, int chunkSize, int type, bool fullSync, QString token) { if (token == "") token = authToken; noteStore = myNoteStore; // Get rid of old stuff from last chunk while(inkNoteList->size() > 0) { QPair *pair = inkNoteList->takeLast(); delete pair->second; delete pair; } inkNoteList->empty(); bool notebooks = false; bool searches = false; bool tags = false; bool linkedNotebooks = false; bool notes = false; bool resources = false; bool expunged = false; notebooks = ((type & SYNC_CHUNK_NOTEBOOKS)>0); searches = ((type & SYNC_CHUNK_SEARCHES)>0); tags = ((type & SYNC_CHUNK_TAGS)>0); linkedNotebooks = ((type & SYNC_CHUNK_LINKED_NOTEBOOKS)>0); notes = ((type & SYNC_CHUNK_NOTES)>0); expunged = ((type & SYNC_CHUNK_NOTES) && (!fullSync)>0) | (SYNC_CHUNK_EXPUNGED && (!fullSync)); resources = ((type & SYNC_CHUNK_RESOURCES) && (!fullSync)>0); // Try to get the chunk SyncChunkFilter filter; filter.includeExpunged = expunged; filter.includeNotes = notes; filter.includeNoteResources = fullSync; filter.includeNoteAttributes = notes; filter.includeNotebooks = notebooks; filter.includeTags = tags; filter.includeSearches = searches; filter.includeResources = resources; filter.includeLinkedNotebooks = linkedNotebooks; filter.includeNoteApplicationDataFullMap = false; filter.includeNoteResourceApplicationDataFullMap = false; filter.includeNoteResourceApplicationDataFullMap = false; // This is a failsafe to prevnt loops if nothing passes the filter chunk.chunkHighUSN = chunk.updateCount; try { chunk = myNoteStore->getFilteredSyncChunk(start, chunkSize, filter, token); processSyncChunk(chunk, token); } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); return false; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.type = CommunicationError::EDAMUserException; error.message = errorWhat(e.what()); return false; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return false; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; handleEDAMNotFoundException(e); return false; } return true; } // Upload a new/changed saved search qint32 CommunicationManager::uploadSavedSearch(SavedSearch &search) { try { if (search.updateSequenceNum > 0) return myNoteStore->updateSearch(search, authToken); else search = myNoteStore->createSearch(search, authToken); return search.updateSequenceNum; } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); DebugTool d; d.dumpSavedSearch(search); return 0; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.type = CommunicationError::EDAMUserException; error.message = errorWhat(e.what()); DebugTool d; d.dumpSavedSearch(search); return 0; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); DebugTool d; d.dumpSavedSearch(search); return 0; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; handleEDAMNotFoundException(e); DebugTool d; d.dumpSavedSearch(search); return false; } } // Permanently delete a saved search qint32 CommunicationManager::expungeSavedSearch(Guid guid) { try { return myNoteStore->expungeSearch(guid, authToken); } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); return 0; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.type = CommunicationError::EDAMUserException; error.message = errorWhat(e.what()); return 0; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return 0; } catch (EDAMNotFoundException) { return 1; } } // Upload a new/changed tag to Evernote qint32 CommunicationManager::uploadTag(Tag &tag) { QLOG_TRACE_IN(); try { if (tag.updateSequenceNum > 0) { QLOG_TRACE_OUT(); return myNoteStore->updateTag(tag, authToken); } else { tag = myNoteStore->createTag(tag, authToken); QLOG_TRACE_OUT(); return tag.updateSequenceNum; } } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR().maybeSpace() << "Exception Type:" << e.type(); QLOG_ERROR().maybeSpace() << "Exception Msg:" << e.what() << endl; QLOG_ERROR() << "Tag name: " << tag.name << endl; DebugTool d; d.dumpTag(tag); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); return 0; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; QLOG_ERROR().maybeSpace() << "Tag name: " << tag.name << endl; error.code = e.errorCode; error.type = CommunicationError::EDAMUserException; error.message = errorWhat(e.what()); DebugTool d; d.dumpTag(tag); return 0; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; QLOG_ERROR().maybeSpace() << "Tag name: " << tag.name << endl; DebugTool d; d.dumpTag(tag); handleEDAMSystemException(e); return 0; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; QLOG_ERROR().maybeSpace() << "Tag name: " << tag.name << endl; DebugTool d; d.dumpTag(tag); handleEDAMNotFoundException(e); return 0; } } // Permanently delete a tag from Evernote qint32 CommunicationManager::expungeTag(Guid guid) { try { return myNoteStore->expungeTag(guid, authToken); } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); return 0; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.type = CommunicationError::EDAMUserException; error.message = errorWhat(e.what()); return 0; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return 0; } catch (EDAMNotFoundException) { return 1; } } // Upload a notebook to Evernote qint32 CommunicationManager::uploadNotebook(Notebook ¬ebook) { try { if (notebook.updateSequenceNum > 0) return myNoteStore->updateNotebook(notebook, authToken); else { notebook = myNoteStore->createNotebook(notebook, authToken); return notebook.updateSequenceNum; } } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); DebugTool d; d.dumpNotebook(notebook); return 0; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.type = CommunicationError::EDAMUserException; error.message = errorWhat(e.what()); DebugTool d; d.dumpNotebook(notebook); return 0; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); DebugTool d; d.dumpNotebook(notebook); return 0; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; DebugTool d; d.dumpNotebook(notebook); handleEDAMNotFoundException(e); return false; } } // Permanently delete a notebook from Evernote qint32 CommunicationManager::expungeNotebook(Guid guid) { try { return myNoteStore->expungeNotebook(guid, authToken); } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); return 0; } catch (EDAMNotFoundException) { return 1; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.type = CommunicationError::EDAMUserException; error.message = errorWhat(e.what()); return 0; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return 0; } } // Upload a note to Evernote qint32 CommunicationManager::uploadNote(Note ¬e, QString token) { if (token == "") token = authToken; if (token == authToken) noteStore = myNoteStore; else noteStore = linkedNoteStore; try { if (note.updateSequenceNum.isSet() && note.updateSequenceNum > 0) note = noteStore->updateNote(note, token); else note = noteStore->createNote(note, token); return note.updateSequenceNum; } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR().maybeSpace() << "Exception Type:" << e.type(); QLOG_ERROR().maybeSpace() << "Exception Msg:" << e.what() << endl; DebugTool d; d.dumpNote(note); error.message = errorWhat(e.what()); error.type = CommunicationError::ThriftException; return 0; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode; DebugTool d; d.dumpNote(note); error.code = e.errorCode; error.message = errorWhat(e.what()); error.type = CommunicationError::EDAMUserException; return 0; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; QLOG_ERROR().maybeSpace() << "Note title: " << note.title << endl; DebugTool d; d.dumpNote(note); handleEDAMSystemException(e); return 0; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; QLOG_ERROR().maybeSpace() << "Note title: " << note.title << endl; DebugTool d; d.dumpNote(note); handleEDAMNotFoundException(e); return false; } } // delete a note in Evernote qint32 CommunicationManager::deleteNote(Guid note, QString token) { if (token == "") token = authToken; if (token == authToken) noteStore = myNoteStore; else noteStore = linkedNoteStore; try { return noteStore->deleteNote(note, token); } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.message = errorWhat(e.what()); error.type = CommunicationError::ThriftException; return 0; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.message = errorWhat(e.what()); error.type = CommunicationError::EDAMUserException; return 0; } catch (EDAMNotFoundException) { return 1; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return 0; } } //*********************************************************************** //*********************************************************************** //*** Linked Notebook function *** //*********************************************************************** //*********************************************************************** // delete a note in Evernote qint32 CommunicationManager::deleteLinkedNote(Guid note) { return deleteNote(note, linkedAuthToken); } // Upload a note to Evernote qint32 CommunicationManager::uploadLinkedNote(Note ¬e) { return uploadNote(note, linkedAuthToken); } // Get a shared notebook by authentication token bool CommunicationManager::getSharedNotebookByAuth(SharedNotebook &sharedNotebook) { try { sharedNotebook = noteStore->getSharedNotebookByAuth(linkedAuthToken); } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); return false; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.message = errorWhat(e.what()); error.type = CommunicationError::EDAMUserException; return false; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return false; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; handleEDAMNotFoundException(e); return false; } return true; } // Authenticate to a linked notebook bool CommunicationManager::authenticateToLinkedNotebookShard(LinkedNotebook &book) { if (!book.noteStoreUrl.isSet()) { QLOG_ERROR() << tr("Linked notebook notestore URL missing."); return false; } try { if (linkedNoteStore != NULL) delete linkedNoteStore; // Connect to the proper shard linkedNoteStore = new NoteStore(book.noteStoreUrl, authToken); linkedAuthToken = ""; noteStore = linkedNoteStore; // Now, authenticate to the book. Books // without a sharekey are public, so authentication // isn't needed if (!book.shareKey.isSet()) return true; // We have a share key, so authenticate linkedAuth = noteStore->authenticateToSharedNotebook(book.shareKey, authToken); linkedAuthToken = linkedAuth.authenticationToken; } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.message = errorWhat(e.what()); error.type = CommunicationError::ThriftException; return false; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.type = CommunicationError::EDAMUserException; error.message = errorWhat(e.what()); return false; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return false; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; // If it is a linked noteboook & it isn't found, then we can just expunge it return false; //handleEDAMNotFoundException(e); return false; } return true; } // Get a linked notebook's sync state bool CommunicationManager::getLinkedNotebookSyncState(SyncState &syncState, LinkedNotebook &linkedNotebook) { try { syncState = linkedNoteStore->getLinkedNotebookSyncState(linkedNotebook, linkedAuthToken); } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); return false; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.type = CommunicationError::EDAMUserException; error.message = errorWhat(e.what()); return false; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return false; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; handleEDAMNotFoundException(e); return false; } return true; } // Get a linked notebook's sync chunk bool CommunicationManager::getLinkedNotebookSyncChunk(SyncChunk &chunk, LinkedNotebook &book, int start, int chunkSize, bool fullSync) { try { chunk = linkedNoteStore->getLinkedNotebookSyncChunk(book, start, chunkSize, fullSync, authToken); processSyncChunk(chunk, linkedAuthToken); } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.message = errorWhat(e.what()); error.type = CommunicationError::ThriftException; return false; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.type = CommunicationError::EDAMUserException; error.message = errorWhat(e.what()); return false; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return false; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; handleEDAMNotFoundException(e); return false; } return true; } //*********************************************************************** //*********************************************************************** //*** Get earlier versions of a note *** //*********************************************************************** //*********************************************************************** // get a list of all prior versions of a note bool CommunicationManager::listNoteVersions(QList &list, QString guid) { try { list = noteStore->listNoteVersions(guid, authToken); return true; } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); return false; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.type = CommunicationError::EDAMUserException; error.message = errorWhat(e.what()); return false; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return false; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; handleEDAMNotFoundException(e); return false; } } // Get a prior version of a notebook bool CommunicationManager::getNoteVersion(Note ¬e, QString guid, qint32 usn, bool withResourceData, bool withResourceRecognition, bool withResourceAlternateData) { try { note = noteStore->getNoteVersion(guid, usn, withResourceData, withResourceRecognition, withResourceAlternateData, authToken); return true; } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); return false; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.message = errorWhat(e.what()); error.type = CommunicationError::EDAMUserException; return false; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return false; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; handleEDAMNotFoundException(e); return false; } } // Get a prior version of a notebook bool CommunicationManager::getNote(Note ¬e, QString guid, bool withResource, bool withResourceRecognition, bool withResourceAlternateData) { try { note = noteStore->getNote(guid,true,withResource,withResourceRecognition,withResourceAlternateData,authToken); return true; } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); return false; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.message = errorWhat(e.what()); error.type = CommunicationError::EDAMUserException; return false; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return false; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; handleEDAMNotFoundException(e); return false; } } //*********************************************************************** //*********************************************************************** //*** General listing functions. Get notebooks & tags *** //*********************************************************************** //*********************************************************************** // get a list of all notebooks bool CommunicationManager::getNotebookList(QList &list) { QList retval; try { retval = noteStore->listNotebooks(authToken); list = retval; } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); return false; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.type = CommunicationError::EDAMUserException; error.message = errorWhat(e.what()); error.code = e.errorCode; return false; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return false; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; handleEDAMNotFoundException(e); return false; } return true; } // get a list of all Tags bool CommunicationManager::getTagList(QList &list) { QList retval; try { retval = noteStore->listTags(authToken); list = retval; } catch (ThriftException e) { QLOG_ERROR() << "ThriftException:"; QLOG_ERROR() << "Exception Type:" << e.type(); QLOG_ERROR() << "Exception Msg:" << e.what(); error.type = CommunicationError::ThriftException; error.message = errorWhat(e.what()); return false; } catch (EDAMUserException e) { QLOG_ERROR() << "EDAMUserException:" << e.errorCode << endl; error.code = e.errorCode; error.type = CommunicationError::EDAMUserException; error.message = errorWhat(e.what()); return false; } catch (EDAMSystemException e) { QLOG_ERROR() << "EDAMSystemException"; handleEDAMSystemException(e); return false; } catch (EDAMNotFoundException e) { QLOG_ERROR() << "EDAMNotFoundException"; handleEDAMNotFoundException(e); return false; } return true; } //*********************************************************************** //*********************************************************************** //*** Ink note routines *** //*********************************************************************** //*********************************************************************** // See if there are any ink notes in this list of resources void CommunicationManager::checkForInkNotes(QList &resources, QString shard, QString authToken) { for (int i=0; imime.isSet()) mime = r->mime; if (mime == "application/vnd.evernote.ink") { downloadInkNoteImage(r->guid, r, shard, authToken); } } } // Writer function called when curl has an image ready size_t curlWriter(void *ptr, size_t size, size_t nmemb, FILE *stream) { size_t written; written = fwrite(ptr, size, nmemb, stream); return written; } // Download an ink note image void CommunicationManager::downloadInkNoteImage(QString guid, Resource *r, QString shard, QString authToken) { // Windows Check #ifdef _WIN32 Q_UNUSED(guid) Q_UNUSED(r) Q_UNUSED(shard) Q_UNUSED(authToken) #else UserTable userTable(db); QImage *newImage = NULL; User u; userTable.getUser(u); if (shard == "") shard = u.shardId; QString urlBase = QString("https://")+evernoteHost +QString("/shard/") +shard +QString("/res/") +guid +QString(".ink?slice="); int sliceCount = 1+((r->height-1)/600); QSize size; size.setHeight(r->height); size.setWidth(r->width); #if QT_VERSION < 0x050000 QUrl postData; #else QUrlQuery postData; #endif postData.clear(); postData.addQueryItem("auth", authToken); CURL *curl; FILE *fp; CURLcode res; curl = curl_easy_init(); if (curl) { int position = 0; for (int i=0; i=0; i++) { QTemporaryFile tempFile; tempFile.open(); tempFile.close(); fp = fopen(tempFile.fileName().toStdString().c_str(), "wb"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curlWriter); curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); #if QT_VERSION < 0x050000 QString url = urlBase+QString::number(i+1)+"&"+postData.encodedQuery(); #else QString url = urlBase+QString::number(i+1)+"&"+postData.query(); #endif curl_easy_setopt(curl, CURLOPT_URL, url.toStdString().c_str()); res = curl_easy_perform(curl); QLOG_DEBUG() << "curl inknote result " << res; fclose(fp); // Now we have the file, let's read it and add it to the final image QImage replyImage; replyImage.load(tempFile.fileName(), "PNG"); tempFile.remove(); if (newImage == NULL) { newImage = new QImage(size, replyImage.format()); } position = inkNoteReady(newImage, &replyImage, position); } // Cleanup curl_easy_cleanup(curl); // Start writing the resource QPair *newPair = new QPair(); newPair->first = guid; newPair->second = newImage; inkNoteList->append(newPair); } #endif // End windows check } // An ink note image is ready for retrieval int CommunicationManager::inkNoteReady(QImage *img, QImage *replyImage, int position) { int priorPosition = position; position = position+replyImage->height(); if (!replyImage->isNull()) { QPainter p(img); // p.drawImage(QRect(0,priorPosition, replyImage->width(), position), *replyImage); p.drawImage(QRect(0,priorPosition, replyImage->width(), replyImage->height()), *replyImage); p.end(); return position; } return -1; } //*********************************************************************** //*********************************************************************** //* Take a sync chunk & get all the missing stuff //*********************************************************************** //*********************************************************************** void CommunicationManager::processSyncChunk(SyncChunk &chunk, QString token) { QHash noteList; QList notes; if (chunk.notes.isSet()) notes = chunk.notes; for (int i=0; igetNote(notes[i].guid, true, true, true, true, token); QLOG_TRACE() << "Note Retrieved"; // Load up the tag names because Evernote doesn't give them. QList tagNames; QList tagGuids; if (n.tagGuids.isSet()) tagGuids = n.tagGuids; for (int j=0; jcontains(tagGuid)) { QString tagName = tagGuidMap->value(tagGuid); tagNames.append(tagName); } n.tagNames = tagNames; } QList resources; if (n.resources.isSet()) resources = n.resources; if (resources.size() > 0) { QLOG_TRACE() << "Checking for ink note"; checkForInkNotes(n.resources, "", authToken); } notes[i] = n; } if (chunk.notes.isSet()) chunk.notes = notes; QList resourceData; QLOG_DEBUG() << "All notes retrieved. Getting resources"; QList resources; if (chunk.resources.isSet()) resources = chunk.resources; for (int i=0; igetResource(resources[i].guid, true, true, true, true, token); QLOG_TRACE() << "Resource retrieved"; resourceData.append(r); } if (chunk.resources.isSet()) chunk.resources = resourceData; QLOG_DEBUG() << "Getting ink notes"; if (resources.size()>0) { QLOG_TRACE() << "Checking for ink notes"; checkForInkNotes(resources,"", token); } } //*********************************************************************** //*********************************************************************** //*** Exception Handling. Print trace information & return *** //*********************************************************************** //*********************************************************************** void CommunicationManager::handleEDAMSystemException(EDAMSystemException e) { // Windows Check #ifndef _WIN32 void *array[30]; size_t size; // get void*'s for all entries on the stack size = backtrace(array, 30); // print out all the frames to stderr fprintf(stderr, "EDAM System Exception backtrace"); backtrace_symbols_fd(array, size, 2); #endif // End windows check if (e.message.isSet()) { QLOG_ERROR() << "EDAMSystemException:" << e.message << endl; } QLOG_ERROR() << "EDAMSystemException Error Code:" << e.errorCode << endl; if (e.rateLimitDuration.isSet()) { QLOG_ERROR() << "EDAMSystemException Rate Limit:" << e.rateLimitDuration << endl; } if (e.errorCode == EDAMErrorCode::RATE_LIMIT_REACHED) { int duration = e.rateLimitDuration/60+1; error.type = CommunicationError::RateLimitExceeded; if (duration > 1) error.message = tr("API rate limit exceeded. Please try again in ") +QString::number(duration)+ tr(" minutes."); else error.message = tr("API rate limit exceeded. Please try again in ") +QString::number(duration)+ tr(" minute."); return; } if (e.message.isSet()) error.message = tr("EDAMSystemException ") + e.message + errorWhat(e.what()); else error.message = tr("EDAMSystemException: Unknown error") + errorWhat(e.what()); error.type = CommunicationError::EDAMSystemException; error.code = e.errorCode; } void CommunicationManager::handleEDAMNotFoundException(EDAMNotFoundException e) { Q_UNUSED(e); // suppress unused variable message // Windows Check #ifndef _WIN32 void *array[30]; size_t size; // get void*'s for all entries on the stack size = backtrace(array, 30); // print out all the frames to stderr fprintf(stderr, "EDAM Not Found Exception backtrace"); backtrace_symbols_fd(array, size, 2); #endif QLOG_ERROR() << "EDAMNotFoundException:" << endl; error.message = tr("EDAMNotFoundException: Note not found") + errorWhat(e.what()); error.type = CommunicationError::EDAMNotFoundException; error.code = 16; } void CommunicationManager::handleStdException(const std::exception &ex) { error.message = QString(ex.what()); error.type = CommunicationError::StdException; error.code = 16; } void CommunicationManager::loadTagGuidMap() { TagTable tagTable(db); tagTable.getGuidMap(*this->tagGuidMap); } QString CommunicationManager::errorWhat(QString what) { if (what.trimmed() != "") { return ":" + what; } return ""; } nixnote2-2.0.2/communication/communicationmanager.h000066400000000000000000000205161315604104400225010ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef COMMUNICATIONMANAGER_H #define COMMUNICATIONMANAGER_H //*************************************************************************** //* This class is used to manage communications between Evernote and //* NixNote. A lot of this is done with QEvercloud. //*************************************************************************** #include "qevercloud/include/QEverCloud.h" #include "global.h" #include #include "communication/communicationerror.h" #include #include // Windows Check #ifndef _WIN32 #include #endif #include #include #include #include #include "qevercloud/include/QEverCloud.h" using namespace qevercloud; typedef unsigned int SOCKET; using namespace std; //* Userid/password key & secret //* OAuth key & secret #define EDAM_CONSUMER_KEY = "baumgarr-3523" #define EDAM_CONSUMER_SECRET = "8d5ee175f8a5d3ec" #define SYNC_CHUNK_NOTEBOOKS 0x0001 #define SYNC_CHUNK_TAGS 0x0002 #define SYNC_CHUNK_LINKED_NOTEBOOKS 0x0004 #define SYNC_CHUNK_EXPUNGED 0x0008 #define SYNC_CHUNK_SEARCHES 0x0010 #define SYNC_CHUNK_NOTES 0x0020 #define SYNC_CHUNK_RESOURCES 0x0040 class CommunicationManager : public QObject { Q_OBJECT private: bool inkNoteImageDownloaded; // Is an inknote download ready? bool initComplete; // Has the class been properly initialized? DatabaseConnection *db; // Database connection bool initNoteStore(); // Initialize the Notestore connection QUrl *postData; // URL used to communicate with Evernote QString userStorePath; // Userstore URL path. QString noteStorePath; // Notestore URL path. QString clientName; // Client name QString evernoteHost; // Evernote server URL. QString linkedNoteStorePath; // URL for linked notebook. AuthenticationResult linkedAuth; // Linked notebook authorization key QString linkedAuthToken; // linked notebook authorization token void downloadInkNoteImage(QString guid, Resource *r, QString shard, QString authToken); // Function to download ink notes void checkForInkNotes(QList &resources, QString shard, QString authToken); // Check if a resource list has any ink notes QString authToken; // Authorization token. bool init(); // Init function. Run after the thread has started & after first call. QNetworkAccessManager *networkAccessManager; // Network connection to download inknotes void handleEDAMSystemException(EDAMSystemException e); // Error handler EDAM System Exception void handleEDAMNotFoundException(EDAMNotFoundException e); // Error handler EDAM Not Found exception. void handleStdException(const exception &ex); // Handle std exception messages UserStore *userStore; // UserStore class NoteStore *noteStore; // Notestore class NoteStore *linkedNoteStore; // Linked notestore class NoteStore *myNoteStore; // local account notestore class void processSyncChunk(SyncChunk &chunk, QString token); // Deal with a sync chunk. void debugTag(Tag tag); // Dump a tag to the log void debugNote(Note note); void debugField(Optional field, QString name); void debugField(Optional field, QString name); public: CommunicationManager(DatabaseConnection *db); // Constructor ~CommunicationManager(); // Destructor CommunicationError error; // Used to report back errors bool enConnect(); // Connect to Evernote bool getSyncState(QString authToken, SyncState &syncState); // Download the last sync state bool getSyncChunk(SyncChunk &chunk, int start, int chunkSize, int type, bool fullSync, QString token=""); // Download a sync chunk bool getLinkedNotebookSyncState(SyncState &syncState, LinkedNotebook &book); // Get the sync state of a linked notebook bool getLinkedNotebookSyncChunk(SyncChunk &chunk, LinkedNotebook &book, int start, int chunkSize, bool fullSync); // Get linked notebook sync chunk void enDisconnect(); // Disconnect from evernote bool authenticateToLinkedNotebookShard(LinkedNotebook &book); // Authenticate to a linked notebook account owner shard bool authenticateToLinkedNotebook(AuthenticationResult &authResult, LinkedNotebook &book); // Authenticate to linked notebook account bool getUserInfo(User &user); // Get user information bool getNote(Note &n, QString guid, bool wthResource, bool withRecognition, bool withResource); QList< QPair* > *inkNoteList; // List to store inknotes downloaded from account. QList< QPair* > *thumbnailList; // List to store thumbnails from account (not used) QHash *tagGuidMap; // Temporary hashmap used to store tags. Keeps from repetitive DB lookups filling in tag names bool getSharedNotebookByAuth(SharedNotebook &sharedNotebook); // Get a shared notebook by authorization key qint32 uploadSavedSearch(SavedSearch &search); // Upload a saved search to Evernote qint32 expungeSavedSearch(Guid guid); // Expunge/delete a saved search qint32 uploadTag(Tag &tag); // Upload a tag to Evernote qint32 expungeTag(Guid guid); // Expunge/delete a tag qint32 uploadNotebook(Notebook ¬ebook); // Upload a notebook to Evernote qint32 expungeNotebook(Guid guid); // Expunge/delete a notebook qint32 uploadNote(Note ¬e, QString token=""); // Upload a note to Evernote qint32 uploadLinkedNote(Note ¬e); // Upload a note to a linked account qint32 deleteNote(Guid guid, QString token=""); // Mark a note as deleted (we don't actually expunge) qint32 deleteLinkedNote(Guid guid); // Mark a note in a linked notebook as deleted bool getNotebookList(QList &list); // Get a list of available notebooks bool getTagList(QList &list); // Get a list of all tags bool listNoteVersions(QList &list, QString guid); // Get a list of note revisions bool getNoteVersion(Note ¬e, QString guid, qint32 usn, bool withResourceData=true, bool withResourceRecognition=true, bool withResourceAlternateData=true); // Download a past version of a note from a linked account void loadTagGuidMap(); // Load the tag hashmap. QString errorWhat(QString what); // help build error string public slots: int inkNoteReady(QImage *newImage, QImage *replyImage, int position); // An inknote has been downloaded. }; #endif // COMMUNICATIONMANAGER_H nixnote2-2.0.2/copyright000066400000000000000000000024041315604104400152120ustar00rootroot00000000000000Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=135 Name: NixNote Maintainer: Randy Baumgarte Source: http://github.com/baumgarr/Nixnote2/ Copyright: 2006-2015 Randy Baumgarte License: GPL-2+ Files: icons/* Copyright: 2006-2015 Randy Baumgarte License: GPL-2+ Files: debian/* Copyright: 2006-2015 Randy Baumgarte License: GPL-2+ License: GPL-2+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. . On Debian systems, the full text of the GNU General Public License version 2 can be found in the file `/usr/share/common-licenses/GPL-2'. nixnote2-2.0.2/dialog/000077500000000000000000000000001315604104400145165ustar00rootroot00000000000000nixnote2-2.0.2/dialog/aboutdialog.cpp000066400000000000000000000060251315604104400175170ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "aboutdialog.h" #include #include #include #include #include "global.h" extern Global global; AboutDialog::AboutDialog(QDialog *parent) : QDialog(parent) { QVBoxLayout *mainLayout = new QVBoxLayout(); this->setLayout(mainLayout); QWebView *page = new QWebView(); QPushButton *okButton = new QPushButton(); okButton->setText(tr("OK")); mainLayout->addWidget(page); QHBoxLayout *buttonLayout = new QHBoxLayout(); QSpacerItem *spacer1 = new QSpacerItem(100000,1, QSizePolicy::Maximum); QSpacerItem *spacer2 = new QSpacerItem(100000,1, QSizePolicy::Maximum); buttonLayout->addSpacerItem(spacer1); buttonLayout->addWidget(okButton); buttonLayout->addSpacerItem(spacer2); mainLayout->addLayout(buttonLayout); this->setLayout(mainLayout); QString file = global.fileManager.getProgramDirPath("") + "/help/about.html"; QFile f(file); if(!f.open(QFile::ReadOnly)) return; QTextStream is(&f); QString data = is.readAll(); QString translationInformation = tr("Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available."); QString translationStaticInformation = "Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available."; if (translationInformation == translationStaticInformation) { data.replace("__TRANSLATION__", ""); } else { data = data.replace("__TRANSLATION__", translationInformation); } #ifndef _WIN32 data = data.replace("__LOGO__", "file://"+global.fileManager.getImageDirPath("")+"splash_logo.png"); #else data = data.replace("__LOGO__", "file:///"+global.fileManager.getImageDirPath("").replace("\\","/")+"splash_logo.png"); #endif page->setHtml(data); connect(okButton, SIGNAL(clicked()), this, SLOT(close())); this->resize(600,500); this->setFont(global.getGuiFont(font())); } nixnote2-2.0.2/dialog/aboutdialog.h000066400000000000000000000022461315604104400171650ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef ABOUTDIALOG_H #define ABOUTDIALOG_H #include #include class AboutDialog : public QDialog { Q_OBJECT public: explicit AboutDialog(QDialog *parent = 0); signals: public slots: }; #endif // ABOUTDIALOG_H nixnote2-2.0.2/dialog/accountdialog.cpp000066400000000000000000000104571315604104400200450ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "accountdialog.h" #include "sql/usertable.h" #include "global.h" #include #include #include #include #include extern Global global; AccountDialog::AccountDialog(QWidget *parent) : QDialog(parent) { // Setup window layout, title, & icon this->setWindowTitle(tr("Account Information")); QGridLayout *grid = new QGridLayout(); setLayout(grid); QLabel *premium = new QLabel(tr("Normal")); User user; UserTable userTable(global.db); userTable.getUser(user); if (user.privilege.isSet()) { if (user.privilege == PrivilegeLevel::PREMIUM) premium->setText(tr("Premium")); if (user.privilege == PrivilegeLevel::VIP) premium->setText(tr("VIP")); if (user.privilege == PrivilegeLevel::MANAGER) premium->setText(tr("Manager")); if (user.privilege == PrivilegeLevel::SUPPORT) premium->setText(tr("Support")); if (user.privilege == PrivilegeLevel::ADMIN) premium->setText(tr("Admin")); } QString username = "*unknown*"; if (user.username.isSet()) username = user.username; qlonglong uploadAmt = 0; qlonglong uploadLimit = 0; qlonglong uploadLimitEnd = 0; int pct; Accounting accounting; if (user.accounting.isSet()) accounting = user.accounting; if (accounting.uploadLimit.isSet()) uploadLimit = accounting.uploadLimit; if (accounting.uploadLimitEnd.isSet()) uploadLimitEnd = accounting.uploadLimitEnd; uploadAmt = userTable.getUploadAmt(); if (uploadLimit > 0) pct = uploadAmt*100/uploadLimit; else pct = 0; QString unit = tr(" Bytes"); if (uploadAmt >= 1024) { uploadAmt = uploadAmt/1024; unit = tr(" KB"); } if (uploadAmt >= 1024) { uploadAmt = uploadAmt / 1024; unit = tr(" MB"); } QDateTime dt; dt = QDateTime::fromMSecsSinceEpoch(uploadLimitEnd); QString ds = dt.toString(); // // Show limits QGroupBox *limitGroup = new QGroupBox(tr("Account:")); QGridLayout *textGrid = new QGridLayout(); textGrid->addWidget(new QLabel(tr("User Name:")),1,1); textGrid->addWidget(new QLabel(username), 1,2); textGrid->addWidget(new QLabel(tr("Account Type:")), 2,1); textGrid->addWidget(premium, 2, 2); textGrid->addWidget(new QLabel(tr("Limit:")), 3,1); textGrid->addWidget(new QLabel(QString::number(uploadLimit/1024/1024) +QString(" MB")),3,2); textGrid->addWidget(new QLabel(tr("Uploaded In This Period:")), 4,1); if (uploadAmt > 0) textGrid->addWidget(new QLabel(QString::number(uploadAmt)+unit +" ("+QString::number(pct)+"%)"),4,2); else textGrid->addWidget(new QLabel(tr("Less than 1MB")),4,2); textGrid->addWidget(new QLabel(tr("Current Cycle Ends:")), 5,1); textGrid->addWidget(new QLabel(ds),5,2); limitGroup->setLayout(textGrid); grid->addWidget(limitGroup, 1, 1); QHBoxLayout *buttonLayout = new QHBoxLayout(); ok = new QPushButton(tr("OK"),this); connect(ok, SIGNAL(clicked()), this, SLOT(okPushed())); buttonLayout->addStretch(); buttonLayout->addWidget(ok); buttonLayout->addStretch(); grid->addLayout(buttonLayout,3,1); this->setFont(global.getGuiFont(font())); } // OK button pushed, close the window void AccountDialog::okPushed() { this->close(); } nixnote2-2.0.2/dialog/accountdialog.h000066400000000000000000000023231315604104400175030ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef ACCOUNTDIALOG_H #define ACCOUNTDIALOG_H #include class AccountDialog : public QDialog { Q_OBJECT public: explicit AccountDialog(QWidget *parent = 0); QPushButton *ok; signals: public slots: void okPushed(); }; #endif // ACCOUNTDIALOG_H nixnote2-2.0.2/dialog/accountmaintenancedialog.cpp000066400000000000000000000207011315604104400222410ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "accountmaintenancedialog.h" #include #include #include #include "global.h" #include "dialog/adduseraccountdialog.h" extern Global global; AccountMaintenanceDialog::AccountMaintenanceDialog(NMainMenuBar *menubar, QWidget *parent) : QDialog(parent) { this->parent = parent; this->menuBar = menubar; okButton = new QPushButton(tr("OK"), this); closeButton = new QPushButton(tr("Close"),this); addButton = new QPushButton(tr("Add"),this); renameButton = new QPushButton(tr("Rename")); deleteButton = new QPushButton(tr("Delete")); removeAuthButton = new QPushButton(tr("Remove Authorization")); nameList = new QListWidget(this); buttonLayout1 = new QVBoxLayout(); buttonLayout2 = new QHBoxLayout(); displayLayout = new QHBoxLayout(); mainLayout = new QVBoxLayout(); displayLayout->addWidget(nameList); displayLayout->addLayout(buttonLayout1); buttonLayout1->addWidget(addButton); buttonLayout1->addWidget(renameButton); buttonLayout1->addWidget(removeAuthButton); buttonLayout1->addWidget(deleteButton); buttonLayout1->addSpacerItem(new QSpacerItem(0,0,QSizePolicy::Minimum, QSizePolicy::Maximum)); buttonLayout1->setStretch(4,100); mainLayout->addLayout(displayLayout); mainLayout->addLayout(buttonLayout2); buttonLayout2->addSpacerItem(new QSpacerItem(0,0,QSizePolicy::Maximum, QSizePolicy::Minimum)); buttonLayout2->addWidget(okButton); buttonLayout2->addWidget(closeButton); buttonLayout2->addSpacerItem(new QSpacerItem(0,0,QSizePolicy::Maximum, QSizePolicy::Minimum)); buttonLayout2->setStretch(0,100); buttonLayout2->setStretch(3,100); this->setLayout(mainLayout); this->setWindowTitle(tr("User Account Maintenance")); connect(okButton, SIGNAL(clicked()), this, SLOT(close())); connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); connect(addButton, SIGNAL(clicked()), this, SLOT(addAccount())); connect(removeAuthButton, SIGNAL(clicked()), this, SLOT(removeOAuth())); connect(deleteButton,SIGNAL(clicked()), this, SLOT(deleteAccount())); connect(renameButton, SIGNAL(clicked()), this, SLOT(renameAccount())); this->loadData(); this->setFont(global.getGuiFont(font())); } void AccountMaintenanceDialog::loadData() { names.clear(); ids.clear(); nameList->clear(); deleteButton->setEnabled(false); names = global.accountsManager->nameList(); ids = global.accountsManager->idList(); for (int i=0; iaddItem(names[i]); if (ids.size() >= 2) { deleteButton->setEnabled(true); } nameList->sortItems(); if (ids.size() >= 1) { nameList->item(0)->setSelected(true); } } void AccountMaintenanceDialog::deleteAccount() { QMessageBox msgBox; msgBox.setIcon(QMessageBox::Question); msgBox.setText(tr("Are you sure you want to delete this account?")); msgBox.setWindowTitle(tr("Verify Delete")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::No); int ret = msgBox.exec(); if (ret == QMessageBox::No) return; int id = -1; QString name = nameList->selectedItems()[0]->text(); for (int i=0; icurrentId) { msgBox.setIcon(QMessageBox::Information); msgBox.setText(tr("You cannot delete the active account.")); msgBox.setWindowTitle("Error deleting account"); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.exec(); return; } global.accountsManager->removeId(ids[i]); id = ids[i]; i=names.size(); } } loadData(); if (id>-1) { for (int i=0; iuserAccountActions.size(); i++) { QAction *action = menuBar->userAccountActions[i]; if (action->data().toInt() == id) { action = menuBar->userAccountActions.takeAt(i); action->disconnect(); menuBar->removeAction(action); delete action; } } } QFile configFile(global.fileManager.getHomeDirPath("")+"nixnote-"+QString::number(id) +".conf"); configFile.remove(); removeDir(global.fileManager.getHomeDirPath("")+QString("db-")+QString::number(id)); } void AccountMaintenanceDialog::renameAccount() { int id = -1; bool activeId = false; QString name = nameList->selectedItems()[0]->text(); QString newName; for (int i=0; icurrentId) activeId = true; else activeId = false; AddUserAccountDialog userDialog; userDialog.newAccountName->setText(name); userDialog.newAccountServer->setVisible(false); userDialog.newAccountServerLabel->setVisible(false); userDialog.exec(); if (!userDialog.okPushed) return; newName = userDialog.newAccountName->text(); global.accountsManager->setName(newName, ids[i]); id = ids[i]; i=names.size(); } } if (!activeId) newName = tr("Switch to ") + newName; if (id>-1) { for (int i=0; iuserAccountActions.size(); i++) { QAction *action = menuBar->userAccountActions[i]; if (action->data().toInt() == id) { action = menuBar->userAccountActions.at(i); action->setText(newName); } } } loadData(); } void AccountMaintenanceDialog::addAccount() { AddUserAccountDialog dialog; dialog.exec(); if (!dialog.okPushed) return; QString name = dialog.newAccountName->text().trimmed(); int six = dialog.newAccountServer->currentIndex(); QString server = dialog.newAccountServer->itemData(six, Qt::UserRole).toString(); int newid = global.accountsManager->addId(-1, name, "", server); QAction *newAction = new QAction(menuBar); newAction->setText(tr("Switch to ") +name); newAction->setCheckable(true); newAction->setData(newid); menuBar->addUserAccount(newAction); connect(newAction, SIGNAL(triggered()), (NixNote*)parent, SLOT(switchUser())); loadData(); } bool AccountMaintenanceDialog:: removeDir(const QString & dirName) { bool result = false; QDir dir(dirName); if (dir.exists(dirName)) { Q_FOREACH(QFileInfo info, dir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) { if (info.isDir()) { result = removeDir(info.absoluteFilePath()); } else { result = QFile::remove(info.absoluteFilePath()); } if (!result) { return result; } } result = dir.rmdir(dirName); } return result; } void AccountMaintenanceDialog::removeOAuth() { if (nameList->selectedItems().count() <= 0) return; QString name = nameList->selectedItems()[0]->text(); QString currentName = global.accountsManager->getName(); for (int i=0; isetOAuthToken(ids[i], ""); if (currentName == names[i]) global.accountsManager->setOAuthToken(""); } } loadData(); } nixnote2-2.0.2/dialog/accountmaintenancedialog.h000066400000000000000000000037641315604104400217200ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef ACCOUNTMAINTENANCEDIALOG_H #define ACCOUNTMAINTENANCEDIALOG_H #include #include #include #include #include #include #include #include "gui/nmainmenubar.h" class AccountMaintenanceDialog : public QDialog { Q_OBJECT private: NMainMenuBar *menuBar; QPushButton *okButton; QPushButton *closeButton; QPushButton *addButton; QPushButton *renameButton; QPushButton *removeAuthButton; QPushButton *deleteButton; QListWidget *nameList; QVBoxLayout *buttonLayout1; QHBoxLayout *buttonLayout2; QHBoxLayout *displayLayout; QVBoxLayout *mainLayout; void loadData(); QList names; QList ids; bool removeDir(const QString & dirName); QWidget *parent; public: explicit AccountMaintenanceDialog(NMainMenuBar *menuBar, QWidget *parent = 0); signals: public slots: void addAccount(); void deleteAccount(); void renameAccount(); void removeOAuth(); }; #endif // ACCOUNTMAINTENANCEDIALOG_H nixnote2-2.0.2/dialog/adduseraccountdialog.cpp000066400000000000000000000070511315604104400214110ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "adduseraccountdialog.h" #include "global.h" #include extern Global global; AddUserAccountDialog::AddUserAccountDialog(QWidget *parent) : QDialog(parent) { okPushed = false; okButton = new QPushButton(this); cancelButton = new QPushButton(this); buttonLayout = new QHBoxLayout(); mainLayout = new QVBoxLayout(); labelLayout = new QGridLayout(); newAccountLabel = new QLabel(); newAccountServer = new QComboBox(); newAccountServerLabel = new QLabel(); newAccountServerLabel->setText(tr("Server")); okButton->setText(tr("OK")); okButton->setEnabled(false); cancelButton->setText(tr("Cancel")); connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancelClicked())); connect(okButton, SIGNAL(clicked()), this, SLOT(okClicked())); setLayout(mainLayout); newAccountLabel = new QLabel(tr("Account Name")); newAccountName = new QLineEdit(); connect(newAccountName, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString))); labelLayout->addWidget(newAccountLabel,0,0); labelLayout->addWidget(newAccountName, 0, 1); labelLayout->addWidget(newAccountServerLabel, 1,0);; labelLayout->addWidget(newAccountServer,1,1); QSpacerItem *spacer1 = new QSpacerItem(10,10,QSizePolicy::Maximum, QSizePolicy::Minimum); QSpacerItem *spacer2= new QSpacerItem(10,10,QSizePolicy::Maximum, QSizePolicy::Minimum); buttonLayout->addSpacerItem(spacer1); buttonLayout->setStretch(0,100); buttonLayout->setStretch(3,100); buttonLayout->addWidget(okButton); buttonLayout->addWidget(cancelButton); buttonLayout->addSpacerItem(spacer2); mainLayout->addLayout(labelLayout); mainLayout->addLayout(buttonLayout); accountNames = global.accountsManager->nameList(); newAccountServer->addItem(tr("Evernote"), "www.evernote.com"); newAccountServer->addItem(tr("Yinxiang Biji"), "app.yinxiang.com"); newAccountServer->addItem(tr("Evernote Sandbox"), "sandbox.evernote.com"); this->setFont(global.getGuiFont(font())); } AddUserAccountDialog::~AddUserAccountDialog() { delete okButton; delete cancelButton; delete buttonLayout; delete mainLayout; } void AddUserAccountDialog::cancelClicked() { okPushed = false; close(); } void AddUserAccountDialog::okClicked() { okPushed = true; close(); } void AddUserAccountDialog::textChanged(QString text) { if (text.trimmed() == "") { okButton->setEnabled(false); return; } if (accountNames.contains(text, Qt::CaseInsensitive)) { okButton->setEnabled(false); return; } okButton->setEnabled(true); } nixnote2-2.0.2/dialog/adduseraccountdialog.h000066400000000000000000000034511315604104400210560ustar00rootroot00000000000000#ifndef ADDUSERACCOUNTDIALOG_H #define ADDUSERACCOUNTDIALOG_H #include #include #include #include /********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include #include #include #include #include class AddUserAccountDialog : public QDialog { Q_OBJECT public: explicit AddUserAccountDialog(QWidget *parent = 0); ~AddUserAccountDialog(); QPushButton *okButton; QPushButton *cancelButton; bool okPushed; QVBoxLayout *mainLayout; QHBoxLayout *buttonLayout; QGridLayout *labelLayout; QLabel *newAccountLabel; QLineEdit *newAccountName; QLabel *newAccountServerLabel; QComboBox *newAccountServer; QStringList accountNames; signals: public slots: void okClicked(); void cancelClicked(); void textChanged(QString text); }; #endif // ADDUSERACCOUNTDIALOG_H nixnote2-2.0.2/dialog/closenotebookdialog.cpp000066400000000000000000000151531315604104400212550ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "closenotebookdialog.h" #include #include #include #include #include "sql/notebooktable.h" #include "global.h" extern Global global; // Constructor CloseNotebookDialog::CloseNotebookDialog(QWidget *parent) : QDialog(parent) { this->setWindowTitle(tr("Open/Close Notebooks")); this->setWindowIcon(global.getIconResource(":notebookSmallIcon")); okPressed = false; openButton.setEnabled(false); closeButton.setEnabled(false); okButton.setText(tr("OK")); cancelButton.setText(tr("Cancel")); connect(&openNotebooks, SIGNAL(itemSelectionChanged()), this, SLOT(openListSelection())); connect(&closeNotebooks, SIGNAL(itemSelectionChanged()), this, SLOT(closeListSelection())); connect(&okButton, SIGNAL(clicked()), this, SLOT(okButtonPressed())); connect(&cancelButton, SIGNAL(clicked()), this, SLOT(cancelButtonPressed())); connect(&closeButton, SIGNAL(clicked()), this, SLOT(closeButtonClicked())); connect(&openButton, SIGNAL(clicked()), this, SLOT(openButtonClicked())); openNotebooks.setSelectionMode(QAbstractItemView::MultiSelection); closeNotebooks.setSelectionMode(QAbstractItemView::MultiSelection); QVBoxLayout *mainLayout = new QVBoxLayout(this); QGridLayout *topLayout = new QGridLayout(this); openLabel.setText(tr("Open Notebooks")); closeLabel.setText(tr("Closed Notebooks")); openButton.setText(tr("Open")); closeButton.setText(tr("Close")); topLayout->addWidget(&openLabel, 0,0); topLayout->addWidget(&openNotebooks, 1,0); QVBoxLayout *middleButtonLayout =new QVBoxLayout(this); middleButtonLayout->addWidget(&openButton); middleButtonLayout->addWidget(&closeButton); topLayout->addLayout(middleButtonLayout, 1,1); topLayout->addWidget(&closeLabel, 0,2); topLayout->addWidget(&closeNotebooks,1,2); QHBoxLayout *buttonLayout = new QHBoxLayout(this); buttonLayout->addSpacerItem(new QSpacerItem(100,1)); buttonLayout->addWidget(&okButton); buttonLayout->addSpacerItem(new QSpacerItem(100,1)); buttonLayout->addWidget(&cancelButton); buttonLayout->addSpacerItem(new QSpacerItem(100,1)); this->setLayout(mainLayout); mainLayout->addLayout(topLayout); mainLayout->addLayout(buttonLayout); NotebookTable bookTable(global.db); QList openLids; QList closedLids; bookTable.getOpenNotebooks(openLids); bookTable.getClosedNotebooks(closedLids); for (int i=0; isetData(Qt::UserRole, openLids[i]); item->setText(notebook.name); openNotebooks.addItem(item); } openNotebooks.sortItems(); for (int i=0; isetData(Qt::UserRole, closedLids[i]); item->setText(notebook.name); closeNotebooks.addItem(item); } closeNotebooks.sortItems(); this->setFont(global.getGuiFont(font())); } // OK button was pressed. Mark specified notebooks // as closed. void CloseNotebookDialog::okButtonPressed() { NotebookTable bookTable(global.db); bookTable.openAllNotebooks(); for (int i=0; idata(Qt::UserRole).toInt(); bookTable.closeNotebook(lid); } okPressed = true; this->close(); } // Cancel was pressed. Close the dialog & go home. void CloseNotebookDialog::cancelButtonPressed() { okPressed = false; this->close(); } // The "open" button was pressed. Move the notebook // to the open list. void CloseNotebookDialog::openButtonClicked() { QList< QListWidgetItem *> items = closeNotebooks.selectedItems(); for (int i=items.size()-1; i>=0; i--) { QListWidgetItem *newItem = items[i]->clone(); openNotebooks.addItem(newItem); delete items[i]; } openNotebooks.sortItems(); if (closeNotebooks.count() == 0) openButton.setEnabled(false); } // The "closed" button was pressed. Move the notebook // to the closed list. void CloseNotebookDialog::closeButtonClicked() { QList< QListWidgetItem *> items = openNotebooks.selectedItems(); for (int i=items.size()-1; i>=0; i--) { QListWidgetItem *newItem = items[i]->clone(); closeNotebooks.addItem(newItem); delete items[i]; } closeNotebooks.sortItems(); if (openNotebooks.count() <= 1) closeButton.setEnabled(false); } // An item in the open list was selected. We enable // the close button if an item was selected AND if // there is more than one item in the open list that is not // selected. You must always have at least one notebook open. void CloseNotebookDialog::openListSelection() { closeButton.setEnabled(true); if (openNotebooks.count() <= 1) closeButton.setEnabled(false); if (openNotebooks.selectedItems().size() == 0) closeButton.setEnabled(false); if (openNotebooks.selectedItems().size() == openNotebooks.count()) closeButton.setEnabled(false); } // An item in the closed list was either selected // or deselected. If an item is selected we enable // the open button. If nothing is selected we disable // the open button. void CloseNotebookDialog::closeListSelection() { openButton.setEnabled(true); if (closeNotebooks.count() <= 0) openButton.setEnabled(false); if (closeNotebooks.selectedItems().size() == 0) openButton.setEnabled(false); } nixnote2-2.0.2/dialog/closenotebookdialog.h000066400000000000000000000032771315604104400207260ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef CLOSENOTEBOOKDIALOG_H #define CLOSENOTEBOOKDIALOG_H #include #include #include #include #include class CloseNotebookDialog : public QDialog { Q_OBJECT public: explicit CloseNotebookDialog(QWidget *parent = 0); bool okPressed; QPushButton openButton; QPushButton closeButton; QPushButton cancelButton; QPushButton okButton; QListWidget openNotebooks; QListWidget closeNotebooks; QLabel openLabel; QLabel closeLabel; signals: public slots: void openButtonClicked(); void closeButtonClicked(); void okButtonPressed(); void cancelButtonPressed(); void closeListSelection(); void openListSelection(); }; #endif // CLOSENOTEBOOKDIALOG_H nixnote2-2.0.2/dialog/databasestatus.cpp000066400000000000000000000056101315604104400202340ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "databasestatus.h" #include #include #include #include "sql/notetable.h" #include "sql/resourcetable.h" #include "global.h" extern Global global; DatabaseStatus::DatabaseStatus(QWidget *parent) : QDialog(parent) { QVBoxLayout *vBoxLayout = new QVBoxLayout(this); // Setup window layout, title, & icon this->setWindowTitle(tr("Database Status")); QGridLayout *textGrid = new QGridLayout(); setLayout(vBoxLayout); NoteTable ntable(global.db); ResourceTable rtable(global.db); qint32 totalNotes = ntable.getCount(); qint32 totalResources = rtable.getCount(); qint32 unindexedNotes = ntable.getUnindexedCount(); qint32 unindexedResources = rtable.getUnindexedCount(); qint32 thumbnailsNeeded = ntable.getThumbnailsNeededCount(); textGrid->addWidget(new QLabel(tr("Total Notes:")),1,1); textGrid->addWidget(new QLabel(QString::number(totalNotes)), 1,2); textGrid->addWidget(new QLabel(tr("Total Resources:")), 2,1); textGrid->addWidget(new QLabel(QString::number(totalResources)), 2, 2); textGrid->addWidget(new QLabel(tr("Unindexed Notes:")), 3,1); textGrid->addWidget(new QLabel(QString::number(unindexedNotes)),3,2); textGrid->addWidget(new QLabel(tr("Unindexed Resources:")), 4,1); textGrid->addWidget(new QLabel(QString::number(unindexedResources)),4,2); textGrid->addWidget(new QLabel(tr("Thumbnails Needed:")), 5,1); textGrid->addWidget(new QLabel(QString::number(thumbnailsNeeded)),5,2); QHBoxLayout *buttonLayout = new QHBoxLayout(); ok = new QPushButton(tr("OK"),this); connect(ok, SIGNAL(clicked()), this, SLOT(okPushed())); buttonLayout->addStretch(); buttonLayout->addWidget(ok); buttonLayout->addStretch(); vBoxLayout->addLayout(textGrid); vBoxLayout->addLayout(buttonLayout); this->setFont(global.getGuiFont(font())); } // OK button pushed, close the window void DatabaseStatus::okPushed() { this->close(); } nixnote2-2.0.2/dialog/databasestatus.h000066400000000000000000000023271315604104400177030ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef DATABASESTATUS_H #define DATABASESTATUS_H #include class DatabaseStatus : public QDialog { Q_OBJECT public: explicit DatabaseStatus(QWidget *parent = 0); QPushButton *ok; signals: public slots: void okPushed(); }; #endif // DATABASESTATUS_H nixnote2-2.0.2/dialog/emaildialog.cpp000066400000000000000000000137501315604104400174770ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "emaildialog.h" #include #include #include #include #include "global.h" extern Global global; EmailDialog::EmailDialog(QWidget *parent) : QDialog(parent) { setWindowIcon(global.getIconResource(":emailIcon")); sendPressed = false; cancelPressed = true; setWindowTitle(tr("Send Email")); sendButton = new QPushButton(tr("Send")); cancelButton = new QPushButton(tr("Cancel")); QGridLayout *grid = new QGridLayout(this); setLayout(grid); QGridLayout *addressGrid = new QGridLayout(); QGridLayout *noteGrid = new QGridLayout(); QGridLayout *buttonGrid = new QGridLayout(); grid->addLayout(addressGrid, 0,0); grid->addLayout(noteGrid, 1,0); grid->addLayout(buttonGrid,2,0); toLabel = new QLabel(this); toLabel->setText(tr("To:")); bccLabel = new QLabel(this); bccLabel->setText(tr("BCC:")); ccLabel = new QLabel(this); ccLabel->setText(tr("CC:")); subjectLabel = new QLabel(this); subjectLabel->setText(tr("Subject:")); noteLabel = new QLabel(this); noteLabel->setText(tr("Note:")); ccSelf = new QCheckBox(this); toAddress = new QLineEdit(this); ccAddress = new QLineEdit(this); bccAddress = new QLineEdit(this); subject = new QLineEdit(this); note = new QPlainTextEdit(this); int row = 0; addressGrid->addWidget(toLabel, row, 0); addressGrid->addWidget(toAddress, row++, 1); addressGrid->addWidget(ccLabel, row, 0); addressGrid->addWidget(ccAddress, row++, 1); addressGrid->addWidget(bccLabel, row, 0); addressGrid->addWidget(bccAddress, row++, 1); ccSelf->setText(tr("CC me on this email")); noteGrid->addWidget(ccSelf, 0,0); addressGrid->addWidget(subjectLabel, row, 0); addressGrid->addWidget(subject, row++,1); noteGrid->addWidget(noteLabel, 1, 0); noteGrid->addWidget(note, 2,0); buttonGrid->addWidget(cancelButton, 0,0); buttonGrid->addWidget(sendButton, 0,1); connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancelButtonPressed())); connect(sendButton, SIGNAL(clicked()), this, SLOT(sendButtonPressed())); connect(toAddress, SIGNAL(textChanged(QString)), this, SLOT(toAddressChanged())); connect(ccAddress, SIGNAL(textChanged(QString)), this, SLOT(toAddressChanged())); connect(bccAddress, SIGNAL(textChanged(QString)), this, SLOT(toAddressChanged())); connect(ccSelf, SIGNAL(toggled(bool)), this, SLOT(toAddressChanged())); cancelButton->setAutoDefault(false); sendButton->setEnabled(false); sendButton->setAutoDefault(true); sendButton->setAutoExclusive(true); toAddress->setFocus(); } void EmailDialog::sendButtonPressed() { sendPressed = true; cancelPressed = false; close(); } void EmailDialog::cancelButtonPressed() { cancelPressed = true; sendPressed = false; close(); } void EmailDialog::toAddressChanged() { QString to, bcc, cc; to = toAddress->text().trimmed(); bcc = bccAddress->text().trimmed(); cc = ccAddress->text().trimmed(); // Setup regular expression to test email addresses QRegExp mailREX("\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b"); mailREX.setCaseSensitivity(Qt::CaseInsensitive); mailREX.setPatternSyntax(QRegExp::RegExp); // Check if "to" address is valid bool validTo = true; QStringList toList = tokenizeString(to); for (int i=0; iisChecked()) sendButton->setEnabled(true); else sendButton->setEnabled(false); // If no emails are specified and we are not going to cc oursel, // then we can't send. if (to == "" && cc == "" && bcc == "" && !ccSelf->isChecked()) sendButton->setEnabled(false); } QStringList EmailDialog::tokenizeString(QString value) { QStringList values = value.split(QRegExp(",|;|\\s+"), QString::SkipEmptyParts); // There is probably an easier way to do this with regular expressions, but // I am horrible at regular expressions. for (int i=0; itext().trimmed()); } QStringList EmailDialog::getCcAddresses() { return tokenizeString(ccAddress->text().trimmed()); } QStringList EmailDialog::getBccAddresses() { return tokenizeString(bccAddress->text().trimmed()); } nixnote2-2.0.2/dialog/emaildialog.h000066400000000000000000000037371315604104400171500ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef EMAILDIALOG_H #define EMAILDIALOG_H #include #include #include #include #include #include #include class EmailDialog : public QDialog { Q_OBJECT private: QLabel *toLabel; QLabel *bccLabel; QLabel *ccLabel; QLabel *subjectLabel; QLabel *noteLabel; QStringList tokenizeString(QString); public: explicit EmailDialog(QWidget *parent = 0); bool sendPressed; bool cancelPressed; QCheckBox *ccSelf; QLineEdit *toAddress; QLineEdit *bccAddress; QLineEdit *ccAddress; QLineEdit *subject; QPushButton *sendButton; QPushButton *cancelButton; QPlainTextEdit *note; QStringList getToAddresses(); QStringList getCcAddresses(); QStringList getBccAddresses(); signals: public slots: void cancelButtonPressed(); void sendButtonPressed(); void toAddressChanged(); }; #endif // EMAILDIALOG_H nixnote2-2.0.2/dialog/encryptdialog.cpp000066400000000000000000000075631315604104400201010ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "encryptdialog.h" #include "global.h" #include extern Global global; EnCryptDialog::EnCryptDialog(QWidget *parent) : QDialog(parent) { wasOkPressed = false; setWindowTitle(tr("Encrypt Text")); //setWindowIcon(new QIcon(iconPath+"password.png")); QGridLayout *grid = new QGridLayout(this); QGridLayout *input = new QGridLayout(this); QGridLayout *msgGrid = new QGridLayout(this); QGridLayout *button = new QGridLayout(this); setLayout(grid); hint.setText(""); password.setText(""); password.setEchoMode(QLineEdit::Password); password2.setText(""); password2.setEchoMode(QLineEdit::Password); input->addWidget(new QLabel(tr("Password"), this), 1,1); input->addWidget(&password, 1, 2); input->addWidget(new QLabel(tr("Verify"), this), 2,1); input->addWidget(&password2, 2, 2); input->addWidget(new QLabel(tr("Hint"), this), 3,1); input->addWidget(&hint, 3, 2); input->addWidget(new QLabel(tr("Remember Password")), 4,1); input->addWidget(&rememberPassword, 4,2); input->setContentsMargins(10, 10, -10, -10); grid->addLayout(input, 1,1); msgGrid->addWidget(&error, 1, 1); grid->addLayout(msgGrid, 2, 1); ok.setText(tr("OK")); connect(&ok, SIGNAL(clicked()), this, SLOT(okButtonPressed())); ok.setEnabled(false); QPushButton *cancel = new QPushButton(tr("Cancel"), this); connect(cancel, SIGNAL(clicked()), this, SLOT(cancelButtonPressed())); button->addWidget(&ok, 1, 1); button->addWidget(cancel, 1,2); grid->addLayout(button, 3, 1); connect(&password, SIGNAL(textChanged(QString)), this, SLOT(validateInput())); connect(&password2, SIGNAL(textChanged(QString)), this, SLOT(validateInput())); connect(&hint, SIGNAL(textChanged(QString)), this, SLOT(validateInput())); this->setFont(global.getGuiFont(font())); } // The OK button was pressed void EnCryptDialog::okButtonPressed() { wasOkPressed = true; close(); } // The CANCEL button was pressed void EnCryptDialog::cancelButtonPressed() { wasOkPressed = false; close(); } // Get the the validated password from the field QString EnCryptDialog::getPasswordVerify() { return password2.text(); } // Get the password QString EnCryptDialog::getPassword() { return password.text(); } // Get the password hint QString EnCryptDialog::getHint() { return hint.text(); } // Check if proper input was input void EnCryptDialog::validateInput() { ok.setEnabled(false); error.setText(""); if (password.text().length()<4) { error.setText(tr("Password must be at least 4 characters")); return; } if (password.text() != password2.text()) { error.setText(tr("Passwords do not match")); return; } if (hint.text().trimmed() == ("")) { error.setText(tr("Hint must be entered")); return; } ok.setEnabled(true); } bool EnCryptDialog::okPressed() { return wasOkPressed; } nixnote2-2.0.2/dialog/encryptdialog.h000066400000000000000000000031661315604104400175410ustar00rootroot00000000000000#ifndef ENCRYPTDIALOG_H #define ENCRYPTDIALOG_H #include #include #include /********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include #include class EnCryptDialog : public QDialog { Q_OBJECT private: bool wasOkPressed; QLineEdit password; QLineEdit password2; QLineEdit hint; QPushButton ok; QLabel error; QCheckBox rememberPassword; public: explicit EnCryptDialog(QWidget *parent = 0); QString getPasswordVerify(); QString getPassword(); QString getHint(); bool okPressed(); signals: public slots: private slots: void validateInput(); void okButtonPressed(); void cancelButtonPressed(); }; #endif // ENCRYPTDIALOG_H nixnote2-2.0.2/dialog/endecryptdialog.cpp000066400000000000000000000063471315604104400204110ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "endecryptdialog.h" #include "global.h" #include #include #include #include extern Global global; EnDecryptDialog::EnDecryptDialog(QWidget *parent) : QDialog(parent) { okPressed = false; setWindowTitle(tr("Decrypt")); setWindowIcon(global.getIconResource(":passwordIcon")); grid = new QGridLayout(this); setLayout(grid); password = new QLineEdit(this); hintLabel = new QLabel(this); hint = new QLabel(this); passwordGrid = new QGridLayout(this); buttonGrid = new QGridLayout(this); ok= new QPushButton(this); cancel = new QPushButton(this); connect(password, SIGNAL(textChanged(const QString&)), this, SLOT(validateInput())); passwordLabel = new QLabel(); passwordLabel->setText(tr("Password")); hintLabel->setText(tr("Hint")); passwordGrid->addWidget(passwordLabel, 1,1); passwordGrid->addWidget(password, 1, 2); passwordGrid->addWidget(hintLabel, 2,1); passwordGrid->addWidget(hint, 2, 2); rememberPassword = new QCheckBox(this); permanentlyDecrypt = new QCheckBox(this); passwordGrid->addWidget(new QLabel(tr("Permanently Decrypt")), 3,1); passwordGrid->addWidget(permanentlyDecrypt, 3,2); passwordGrid->addWidget(new QLabel(tr("Remember Password")), 4,1); passwordGrid->addWidget(rememberPassword, 4,2); passwordGrid->setContentsMargins(10, 10, -10, -10); grid->addLayout(passwordGrid,1,1); ok->setText(tr("OK")); if (global.password == "" and global.username == "") ok->setEnabled(false); connect(ok, SIGNAL(clicked()), this, SLOT(okButtonPressed())); cancel->setText(tr("Cancel")); connect(cancel, SIGNAL(clicked()), this, SLOT(cancelButtonPressed())); buttonGrid->addWidget(ok, 1, 1); buttonGrid->addWidget(cancel, 1,2); grid->addLayout(buttonGrid,2,1); grid->setSizeConstraint( QLayout::SetFixedSize ); password->setEchoMode(QLineEdit::Password); this->setFont(global.getGuiFont(font())); } void EnDecryptDialog::okButtonPressed() { okPressed = true; close(); } void EnDecryptDialog::cancelButtonPressed() { okPressed = false; close(); } void EnDecryptDialog::validateInput() { ok->setEnabled(true); if (password->text()=="") { ok->setEnabled(false); return; } } nixnote2-2.0.2/dialog/endecryptdialog.h000066400000000000000000000032741315604104400200520ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef ENDECRYPTDIALOG_H #define ENDECRYPTDIALOG_H #include #include #include #include #include #include class EnDecryptDialog : public QDialog { Q_OBJECT private: QGridLayout *grid; QGridLayout *passwordGrid; QGridLayout *buttonGrid; QPushButton *ok; QLabel *passwordLabel; QLabel *hintLabel; QPushButton *cancel; public: explicit EnDecryptDialog(QWidget *parent = 0); QLabel *hint; QLineEdit *password; bool okPressed; QCheckBox *permanentlyDecrypt; QCheckBox *rememberPassword; signals: private slots: void okButtonPressed(); void cancelButtonPressed(); void validateInput(); }; #endif // ENDECRYPTDIALOG_H nixnote2-2.0.2/dialog/faderdialog.cpp000066400000000000000000000030661315604104400174700ustar00rootroot00000000000000//*********************************************************************************************** //* This code was shamelessly copied from the Qt Centre forums: //* http://www.qtcentre.org/threads/56737-Implementing-fade-in-fade-out-for-a-modal-QDialog //*********************************************************************************************** #include "faderdialog.h" FaderDialog::FaderDialog( QWidget * parent ) : QDialog( parent ), mResult( 0 ) { setWindowFlags(Qt::SplashScreen); layout = new QVBoxLayout(); text = new QLabel(); layout->addWidget(text); setLayout(layout); // Create the fade-in / fade-out animators mpFadeIn = new QPropertyAnimation( this, "windowOpacity" ); mpFadeIn->setDuration( 2000 ); mpFadeIn->setStartValue( 0.0 ); mpFadeIn->setEndValue( 1.0 ); mpFadeOut = new QPropertyAnimation( this, "windowOpacity" ); mpFadeOut->setDuration( 2000 ); mpFadeOut->setStartValue( 1.0 ); mpFadeOut->setEndValue( 0.0 ); connect( mpFadeIn, SIGNAL(finished()), this, SLOT(done())); connect( mpFadeOut, SIGNAL( finished() ), this, SLOT( onFadeOutFinished() ) ); } void FaderDialog::setText(QString value) { this->text->setText(value); } void FaderDialog::showEvent( QShowEvent * ) { mpFadeIn->start(); } void FaderDialog::done() { this->done(0); } void FaderDialog::done( int result ) { mResult = result; // remember the result in a member variable mpFadeOut->start(); } void FaderDialog::onFadeOutFinished() { QDialog::done( mResult ); // now call the real done() slot } nixnote2-2.0.2/dialog/faderdialog.h000066400000000000000000000016411315604104400171320ustar00rootroot00000000000000//*********************************************************************************************** //* This code was shamelessly copied from the Qt Centre forums: //* http://www.qtcentre.org/threads/56737-Implementing-fade-in-fade-out-for-a-modal-QDialog //*********************************************************************************************** #ifndef FADERDIALOG_H #define FADERDIALOG_H #include #include #include #include class FaderDialog : public QDialog { Q_OBJECT private: QPropertyAnimation *mpFadeIn; QPropertyAnimation *mpFadeOut; int mResult; QVBoxLayout *layout; QLabel *text; public: explicit FaderDialog(QWidget *parent = 0); void showEvent(QShowEvent *); void done(int result); void setText(QString value); signals: public slots: void onFadeOutFinished(); void done(); }; #endif // FADERDIALOG_H nixnote2-2.0.2/dialog/htmlentitiesdialog.cpp000066400000000000000000000221311315604104400211120ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte Copyright (C) 2014 Milos.Kozina@postino.net This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "htmlentitiesdialog.h" #include #include "global.h" extern Global global; HtmlEntitiesDialog::HtmlEntitiesDialog(QWidget *parent) : QDialog(parent) { editMode = false; cancelString = tr("Cancel"); closeString = tr("Close"); editString = tr("Edit entries list"); saveString = tr("Save entities list"); defaultEntities.append("←"); defaultEntities.append("→"); defaultEntities.append("⇐"); defaultEntities.append("⇒"); defaultEntities.append("↑"); defaultEntities.append("↓"); defaultEntities.append("⇑"); defaultEntities.append("⇓"); defaultEntities.append("↔"); defaultEntities.append("↕"); defaultEntities.append("⇕"); defaultEntities.append("⇔"); defaultEntities.append("♠"); defaultEntities.append("♣"); defaultEntities.append("♦"); defaultEntities.append("♥"); defaultEntities.append("☹"); defaultEntities.append("☺"); defaultEntities.append("☻"); defaultEntities.append("☯"); defaultEntities.append("©"); defaultEntities.append("®"); defaultEntities.append("€"); defaultEntities.append("°"); defaultEntities.append("¼"); defaultEntities.append("½"); defaultEntities.append("¾"); defaultEntities.append("±"); defaultEntities.append("✓"); defaultEntities.append("✔"); defaultEntities.append("✗"); defaultEntities.append("✘"); this->listSeparator = ","; loadCustomEntities(); setWindowTitle(tr("HTML Entities Selection")); this->setWindowIcon(global.getIconResource(":htmlentitiesIcon")); setModal(false); initGrid(); initEntitiesGrid(); signalmapper = new QSignalMapper(); initEntitiesButtons(); connect(signalmapper, SIGNAL(mapped(QString)), this, SLOT(htmlEntityClicked(QString))); scrollArea = new QScrollArea(); scrollArea->setBackgroundRole(QPalette::Dark); scrollArea->setMinimumWidth(ENTITY_BUTTON_COLUMNS*(ENTITY_BUTTON_WIDTH+2*ENTITY_MARGIN)); scrollArea->setMinimumHeight(ENTITY_BUTTON_ROWS*(ENTITY_BUTTON_HEIGHT+2*ENTITY_MARGIN)); initEntitiesWidget(); scrollArea->setWidget(entitiesWidget); scrollArea->setWidgetResizable(false); scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); grid->addWidget(scrollArea,2,1); buttonLayout = new QHBoxLayout(); editButton = new QPushButton(editString); closeButton = new QPushButton(closeString); connect(closeButton, SIGNAL(clicked()), this, SLOT(closeClicked())); connect(editButton, SIGNAL(clicked()), this, SLOT(editClicked())); buttonLayout->addStretch(); buttonLayout->addWidget(editButton); buttonLayout->addWidget(closeButton); buttonLayout->addStretch(); grid->addLayout(buttonLayout,3,1); setWindowFlags(Qt::WindowStaysOnTopHint); textEdit = NULL; scrollArea->setWidgetResizable(false); //layout()->setSizeConstraint( QLayout::SetFixedSize); //saveSize = this->size(); this->setFont(global.getGuiFont(font())); } void HtmlEntitiesDialog::clearEntitiesButtons() { for (int i =buttonList.size()-1; i>=0; i--) { signalmapper->removeMappings(buttonList[i]); entitiesGrid->removeWidget(buttonList[i]); buttonList[i]->setVisible(false); //delete buttonList[i]; } buttonList.clear(); } void HtmlEntitiesDialog::initEntitiesButtons() { int row = 0; int column = 0; QStringList *ptr; if (entities.size() > 0) ptr = &entities; else ptr = &defaultEntities; for (int i=0; isize(); i++) { column = i % ENTITY_BUTTON_COLUMNS; if (column == 0) row++; QTextDocument doc; doc.setHtml(ptr->at(i)); QString htmlText = doc.toPlainText(); QPushButton *button = new QPushButton(htmlText); signalmapper->setMapping(button, ptr->at(i)); connect(button, SIGNAL(clicked()), signalmapper, SLOT(map())); button->setMinimumHeight(ENTITY_BUTTON_HEIGHT); button->setMinimumWidth(ENTITY_BUTTON_WIDTH); entitiesGrid->addWidget(button,row, column); buttonList.append(button); } } void HtmlEntitiesDialog::initEntitiesWidget() { entitiesWidget = new QWidget(); entitiesWidget->setLayout(entitiesGrid); } void HtmlEntitiesDialog::htmlEntityClicked(QString htmlEntity) { emit entityClicked(htmlEntity); } void HtmlEntitiesDialog::initEntitiesGrid() { entitiesGrid = new QGridLayout(); entitiesGrid->setContentsMargins(QMargins(ENTITY_MARGIN, ENTITY_MARGIN, ENTITY_MARGIN, ENTITY_MARGIN)); } void HtmlEntitiesDialog::initGrid() { grid = new QGridLayout(); setLayout(grid); } void HtmlEntitiesDialog::closeClicked() { if (editMode) { editMode = false; scrollArea->takeWidget(); scrollArea->setWidget(entitiesWidget); editButton->setText(editString); closeButton->setText(closeString); return; } this->close(); } void HtmlEntitiesDialog::editClicked() { if (editMode) { if (textEdit->document()->isModified()) { QString value = textEdit->toPlainText(); QString fileName = global.fileManager.getHomeDirPath("") + QString("entities.txt"); QDir dir; dir.remove(fileName); QFile file(fileName); file.open(QFile::WriteOnly); if (file.isOpen()) { QTextStream out(&file); out << value; } file.close(); } clearEntitiesButtons(); loadCustomEntities(); initEntitiesButtons(); } else { if (textEdit == NULL) { textEdit = new QTextEdit(tr("Comma separated list of HTML entities.\nSee http://www.w3schools.com/charsets/ for list.")); } textEdit->setText(getEntities(true)); } editMode = !editMode; scrollArea->takeWidget(); scrollArea->setWidget(editMode ? textEdit : entitiesWidget); scrollArea->setWidgetResizable(editMode); editButton->setText(editMode ? saveString : editString); closeButton->setText(editMode ? cancelString : closeString); } bool HtmlEntitiesDialog::close() { this->hide(); return false; } QString HtmlEntitiesDialog::getEntities(bool withBreakLines) { QString result = ""; QStringList *ptr; if (entities.size() > 0) ptr = &entities; else ptr = &defaultEntities; for (int i=0; isize(); i++) { result = result+ptr->at(i) + " "; if ((i+1) % ENTITY_BUTTON_COLUMNS == 0 && withBreakLines) { result = result + ",\n"; } else { result = result + ", "; } } return result; } void HtmlEntitiesDialog::getEntitiesList(QStringList *list, QString entitiesAsText) { list->clear(); if (entitiesAsText != "") { QStringList separated = entitiesAsText.split(listSeparator); for (int i = 0; i < separated.length(); i++) { QString s = separated.at(i).trimmed(); if (s.startsWith("&") && s.endsWith(";")) { if (!list->contains(s)) list->append(s); } } } } void HtmlEntitiesDialog::loadCustomEntities() { entities.clear(); QString fileName = global.fileManager.getHomeDirPath("") + QString("entities.txt"); QFile file(fileName); file.open(QFile::ReadOnly); if (file.isOpen()) { while (!file.atEnd()) { QString line = file.readLine(); line = line.replace("\t", " "); line = line.replace("\n", " "); line = line.replace("\r", " " ); line = line.trimmed(); QStringList list = line.split(this->listSeparator); for(int i=0;i #include #include #include #include #include #include #include #include #include #include #define ENTITY_BUTTON_WIDTH 45 #define ENTITY_BUTTON_COLUMNS 4 #define ENTITY_BUTTON_HEIGHT 25 #define ENTITY_BUTTON_ROWS 4 #define ENTITY_MARGIN 1 class HtmlEntitiesDialog : public QDialog { Q_OBJECT private: QPushButton *closeButton; QStringList defaultEntities; QPushButton *editButton; QScrollArea *scrollArea; QWidget *entitiesWidget; bool editMode; QGridLayout *entitiesGrid; //QSize saveSize; QGridLayout *grid; QSignalMapper *signalmapper; QHBoxLayout *buttonLayout; QTextEdit *textEdit; QString listSeparator; QStringList entities; QString cancelString; QString closeString; QString editString; QString saveString; void initEntitiesWidget(); void initGrid(); void clearEntitiesButtons(); void initEntitiesButtons(); void initEntitiesGrid(); QList buttonList; QString getEntities(bool withBreakLines); void getEntitiesList(QStringList *list, QString entitiesAsText); void loadCustomEntities(); public: explicit HtmlEntitiesDialog(QWidget *parent = 0); signals: void entityClicked(QString entity); public slots: void htmlEntityClicked(QString htmlEntity); void editClicked(); void closeClicked(); bool close(); }; #endif // HTMLENTITIESDIALOG_H nixnote2-2.0.2/dialog/insertlatexdialog.cpp000066400000000000000000000056331315604104400207530ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "insertlatexdialog.h" #include "global.h" #include #include extern Global global; InsertLatexDialog::InsertLatexDialog(QWidget *parent) : QDialog(parent) { wasOkPressed = false; setWindowTitle(tr("Insert LaTeX Formula")); //setWindowIcon(new QIcon(iconPath+"link.png")); QGridLayout *grid = new QGridLayout(this); QGridLayout *input = new QGridLayout(this); QGridLayout *button = new QGridLayout(this); setLayout(grid); url.setText(""); input->addWidget(new QLabel(tr("Formula")), 1,1); input->addWidget(&url, 2, 1); input->setContentsMargins(10, 10, -10, -10); grid->addLayout(input, 1,1); ok.setText(tr("OK")); connect(&ok, SIGNAL(clicked()), this, SLOT(accept())); ok.setEnabled(false); ok.setDefault(true); QPushButton *cancel = new QPushButton(tr("Cancel"), this); connect(cancel, SIGNAL(clicked()), this, SLOT(reject())); button->addWidget(&ok, 1, 1); button->addWidget(cancel, 1,2); grid->addLayout(button, 3, 1); connect(&url, SIGNAL(textChanged()), this, SLOT(validateInput())); //setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose); this->setFont(global.getGuiFont(font())); } // Set the formula void InsertLatexDialog::setFormula(QString x) { url.setText(x); } // Get the formula QString InsertLatexDialog::getFormula() { return latexText; } // Set the url void InsertLatexDialog::setUrl(QString u) { url.setText(u); } // Check if the OK button was pressed bool InsertLatexDialog::okPressed() { return wasOkPressed; } // Check that we have a valid URL void InsertLatexDialog::validateInput() { ok.setEnabled(true); if (url.toPlainText().trimmed() == "") ok.setEnabled(false); } void InsertLatexDialog::accept() { if (ok.isEnabled()) { wasOkPressed = true; latexText = url.toPlainText(); QDialog::accept(); } } void InsertLatexDialog::reject() { wasOkPressed=false; QDialog::reject(); } nixnote2-2.0.2/dialog/insertlatexdialog.h000066400000000000000000000030311315604104400204060ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef INSERTLATEXDIALOG_H #define INSERTLATEXDIALOG_H #include #include #include #include class InsertLatexDialog : public QDialog { Q_OBJECT private: bool wasOkPressed; QTextEdit url; QPushButton ok; QString latexText; public: explicit InsertLatexDialog(QWidget *parent = 0); void setFormula(QString formula); QString getFormula(); void setUrl(QString url); bool okPressed(); void accept(); void reject(); signals: public slots: private slots: void validateInput(); }; #endif // INSERTLATEXDIALOG_H nixnote2-2.0.2/dialog/insertlinkdialog.cpp000066400000000000000000000060351315604104400205700ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "insertlinkdialog.h" #include #include #include #include "global.h" extern Global global; InsertLinkDialog::InsertLinkDialog(bool insert, QWidget *parent) : QDialog(parent) { okPressed = false; setWindowTitle(tr("Insert Link")); //setWindowIcon(new QIcon(iconPath+"link.png")); QGridLayout *grid = new QGridLayout(); QGridLayout *input = new QGridLayout(); QGridLayout *button = new QGridLayout(); setLayout(grid); insertHyperlink = insert; url = new QLineEdit(""); input->addWidget(new QLabel(tr("URL")), 1,1); input->addWidget(url, 1, 2); input->setContentsMargins(10, 10, -10, -10); grid->addLayout(input, 1,1); ok = new QPushButton(tr("OK")); connect(ok, SIGNAL(clicked()), this, SLOT(accept())); ok->setEnabled(false); QPushButton *cancel = new QPushButton(tr("Cancel")); connect(cancel, SIGNAL(clicked()), this, SLOT(reject())); button->addWidget(ok, 1, 1); button->addWidget(cancel, 1,2); grid->addLayout(button, 3, 1); connect(url,SIGNAL(textChanged(QString)), this, SLOT(validateInput())); // setAttribute(Qt::WA_DeleteOnClose); this->setFont(global.getGuiFont(font())); } // Get the password QString InsertLinkDialog::getUrl() { if (urlText.contains("://")) return urlText; if (urlText.trimmed().startsWith("mailto:", Qt::CaseInsensitive)) return urlText; if (urlText.trimmed() != "") return "http://"+urlText; return urlText; } // Set the url void InsertLinkDialog::setUrl(QString u) { url->setText(u); } // Check if the OK button was pressed bool InsertLinkDialog::okButtonPressed() { return okPressed; } // Check that we have a valid URL void InsertLinkDialog::validateInput() { ok->setEnabled(true); if (url->text().trimmed() == "" && insertHyperlink) ok->setEnabled(false); } void InsertLinkDialog::accept() { if (ok->isEnabled()) { okPressed = true; urlText = url->text(); QDialog::accept(); } } void InsertLinkDialog::reject() { okPressed=false; QDialog::reject(); } nixnote2-2.0.2/dialog/insertlinkdialog.h000066400000000000000000000027371315604104400202420ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef INSERTLINKDIALOG_H #define INSERTLINKDIALOG_H #include #include class InsertLinkDialog : public QDialog { Q_OBJECT private: bool okPressed; QLineEdit *url; QPushButton *ok; QString urlText; bool insertHyperlink; public: explicit InsertLinkDialog(bool insert = true, QWidget *parent = 0); void accept(); void reject(); QString getUrl(); void setUrl(QString u); signals: public slots: void validateInput(); bool okButtonPressed(); }; #endif // INSERTLINKDIALOG_H nixnote2-2.0.2/dialog/locationdialog.cpp000066400000000000000000000101531315604104400202120ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "locationdialog.h" #include "global.h" #include #include #include extern Global global; LocationDialog::LocationDialog(QWidget *parent) : QDialog(parent) { wasOkPressed = false; setWindowTitle(tr("Location")); //setWindowIcon(new QIcon(iconPath+"password.png")); QGridLayout *grid = new QGridLayout(); QGridLayout *input = new QGridLayout(); QGridLayout *button = new QGridLayout(); setLayout(grid); input->addWidget(new QLabel(tr("Longitude"), this), 1,1); input->addWidget(&longitude, 1, 2); input->addWidget(new QLabel(tr("Latitude"), this), 2,1); input->addWidget(&latitude, 2, 2); input->addWidget(new QLabel(tr("Altitude"), this), 3,1); input->addWidget(&altitude, 3, 2); input->setContentsMargins(10, 10, -10, -10); grid->addLayout(input, 1,1); ok.setText(tr("OK")); connect(&ok, SIGNAL(clicked()), this, SLOT(okButtonPressed())); QPushButton *cancel = new QPushButton(tr("Cancel"), this); connect(cancel, SIGNAL(clicked()), this, SLOT(cancelButtonPressed())); button->addWidget(&ok, 1, 1); button->addWidget(cancel, 1,2); grid->addLayout(button, 3, 1); longlatval.setBottom(-90.0); longlatval.setTop(90.0); longlatval.setNotation(QDoubleValidator::StandardNotation); longitude.setValidator(&longlatval); latitude.setValidator(&longlatval); altitudeval.setBottom(-1500); altitudeval.setTop(9999.99); altitudeval.setNotation(QDoubleValidator::StandardNotation); altitude.setValidator(&altitudeval); this->setFont(global.getGuiFont(font())); } // The OK button was pressed void LocationDialog::okButtonPressed() { locationText(); wasOkPressed = true; close(); } // The CANCEL button was pressed void LocationDialog::cancelButtonPressed() { wasOkPressed = false; close(); } bool LocationDialog::okPressed() { return wasOkPressed; } QString LocationDialog::locationText() { double lat = latitude.text().toDouble(); QString p1 = calculateDegrees(lat); if (lat>=0) p1 = p1+" N "; else p1 = p1+" S "; double lon = longitude.text().toDouble(); QString p2 = calculateDegrees(lon); if (lon>=0) p2 = p2+" E"; else p2 = p2+" W"; return p1+p2; } QString LocationDialog::calculateDegrees(double value) { qint32 degrees = floor(value); value = (value-degrees)*60; qint32 minutes = floor(value); value = value - minutes; qint32 seconds = floor(value)*60; QString retval = QString::number(degrees) + "°" + QString::number(minutes) +"'" + QString::number(seconds); return retval; } double LocationDialog::getLongitude() { return longitude.text().toDouble(); } double LocationDialog::getLatitude() { return latitude.text().toDouble(); } double LocationDialog::getAltitude() { return altitude.text().toDouble(); } void LocationDialog::setAltitude(double value) { altitude.setText(QString::number(value)); } void LocationDialog::setLongitude(double value) { longitude.setText(QString::number(value)); } void LocationDialog::setLatitude(double value) { latitude.setText(QString::number(value)); } nixnote2-2.0.2/dialog/locationdialog.h000066400000000000000000000034131315604104400176600ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef LOCATIONDIALOG_H #define LOCATIONDIALOG_H #include #include #include #include class LocationDialog : public QDialog { Q_OBJECT private: bool wasOkPressed; QLineEdit longitude; QLineEdit latitude; QLineEdit altitude; QPushButton ok; QDoubleValidator longlatval; QDoubleValidator altitudeval; public: explicit LocationDialog(QWidget *parent = 0); bool okPressed(); QString locationText(); QString calculateDegrees(double value); double getLongitude(); double getLatitude(); double getAltitude(); void setAltitude(double value); void setLongitude(double value); void setLatitude(double value); signals: public slots: void okButtonPressed(); void cancelButtonPressed(); }; #endif // LOCATIONDIALOG_H nixnote2-2.0.2/dialog/logindialog.cpp000066400000000000000000000053641315604104400175220ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "logindialog.h" #include "global.h" #include #include #include #include extern Global global; LoginDialog::LoginDialog(QWidget *parent) : QDialog(parent) { okPressed = false; setWindowTitle(tr("NixNote Login")); setWindowIcon(global.getIconResource(":passwordIcon")); setLayout(&grid); password.setEchoMode(QLineEdit::Password); connect(&userid, SIGNAL(textChanged(const QString&)), this, SLOT(validateInput())); connect(&password, SIGNAL(textChanged(const QString&)), this, SLOT(validateInput())); useridLabel.setText(tr("Userid")); passwordLabel.setText(tr("Password")); passwordGrid.addWidget(&useridLabel, 1,1); passwordGrid.addWidget(&userid, 1, 2); passwordGrid.addWidget(&passwordLabel, 2,1); passwordGrid.addWidget(&password, 2, 2); passwordGrid.setContentsMargins(10, 10, -10, -10); grid.addLayout(&passwordGrid,1,1); ok.setText(tr("OK")); if (global.password == "" and global.username == "") ok.setEnabled(false); connect(&ok, SIGNAL(clicked()), this, SLOT(okButtonPressed())); cancel.setText(tr("Cancel")); connect(&cancel, SIGNAL(clicked()), this, SLOT(cancelButtonPressed())); buttonGrid.addWidget(&ok, 1, 1); buttonGrid.addWidget(&cancel, 1,2); grid.addLayout(&buttonGrid,2,1); grid.setSizeConstraint( QLayout::SetFixedSize ); this->setFont(global.getGuiFont(font())); } void LoginDialog::okButtonPressed() { okPressed = true; close(); } void LoginDialog::cancelButtonPressed() { okPressed = false; close(); } void LoginDialog::validateInput() { ok.setEnabled(true); if (userid.text()=="") { ok.setEnabled(false); return; } if (password.text() == "") { ok.setEnabled(false); return; } } nixnote2-2.0.2/dialog/logindialog.h000066400000000000000000000030751315604104400171640ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef LOGINDIALOG_H #define LOGINDIALOG_H #include #include #include #include #include class LoginDialog : public QDialog { Q_OBJECT private: QPushButton ok; QLabel useridLabel; QLabel passwordLabel; QPushButton cancel; QGridLayout grid; QGridLayout passwordGrid; QGridLayout buttonGrid; public: explicit LoginDialog(QWidget *parent = 0); QLineEdit userid; QLineEdit password; bool okPressed; signals: private slots: void okButtonPressed(); void cancelButtonPressed(); void validateInput(); }; #endif // LOGINDIALOG_H nixnote2-2.0.2/dialog/logviewer.cpp000066400000000000000000000073171315604104400172350ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "logviewer.h" #include "global.h" #include #include #include extern Global global; LogViewer::LogViewer(QWidget *parent) : QDialog(parent) { QVBoxLayout *mainLayout = new QVBoxLayout(); this->setLayout(mainLayout); viewer = new QTextEdit(); viewer->setReadOnly(true); viewer->setLineWrapMode(QTextEdit::NoWrap); mainLayout->addWidget(viewer); okButton = new QPushButton(); okButton->setText(tr("Close")); connect(okButton, SIGNAL(clicked()), this, SLOT(close())); refreshButton = new QPushButton(tr("Refresh")); connect(refreshButton, SIGNAL(clicked()), this, SLOT(loadData())); saveButton = new QPushButton(tr("Save")); connect(saveButton, SIGNAL(clicked()), this, SLOT(saveData())); QHBoxLayout *buttonLayout = new QHBoxLayout(); buttonLayout->addWidget(saveButton); buttonLayout->addWidget(refreshButton); buttonLayout->addWidget(okButton); mainLayout->addLayout(buttonLayout); loadData(); this->setWindowTitle(tr("Save Logs")); this->resize(600,400); this->setFont(global.getGuiFont(font())); } void LogViewer::loadData() { viewer->clear(); QString fileName = global.fileManager.getLogsDirPath("") + "messages.log"; QFile file(fileName); if (file.open(QIODevice::ReadOnly)) { while (!file.atEnd()) { QString line = file.readLine(); line.replace("\n", ""); if (line.startsWith("DEBUG")) line = "" +line +""; if (line.startsWith("TRACE")) line = "" +line +""; if (line.startsWith("ERROR")) line = "" +line +""; viewer->append(line); } } file.close(); } void LogViewer::saveData() { // QFileDialog fd; QFileDialog fd(0, tr("Save Log"), QDir::homePath(), tr("NixNote Log (*.log);;All Files (*.*)")); fd.setFileMode(QFileDialog::AnyFile); fd.setConfirmOverwrite(true); // fd.setWindowTitle(tr("Save Log")); // fd.setFilter(tr("NixNote Log (*.log);;All Files (*.*)")); fd.setAcceptMode(QFileDialog::AcceptSave); // fd.setDirectory(QDir::homePath()); if (fd.exec() == 0 || fd.selectedFiles().size() == 0) { return; } QString infileName = global.fileManager.getLogsDirPath("") + "messages.log"; QStringList fileNames; fileNames = fd.selectedFiles(); QFile infile(infileName); QFile outfile(fileNames[0]); if (infile.open(QIODevice::ReadOnly) && outfile.open(QIODevice::WriteOnly)) { QTextStream out(&outfile); while (!infile.atEnd()) { QString line = infile.readLine(); out << line; } } infile.close(); } nixnote2-2.0.2/dialog/logviewer.h000066400000000000000000000026561315604104400167030ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef LOGVIEWER_H #define LOGVIEWER_H #include #include #include #include #include #include #include class LogViewer : public QDialog { Q_OBJECT private: QTextEdit *viewer; QPushButton *okButton; QPushButton *saveButton; QPushButton *refreshButton; public: explicit LogViewer(QWidget *parent = 0); signals: public slots: void loadData(); void saveData(); }; #endif // LOGVIEWER_H nixnote2-2.0.2/dialog/notebookproperties.cpp000066400000000000000000000112641315604104400211630ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "notebookproperties.h" #include "global.h" #include "sql/notebooktable.h" #include #include #include #include extern Global global; // Constructor. Thys happens when the class is declared. NotebookProperties::NotebookProperties(QWidget *parent) : QDialog(parent) { okPressed = false; setWindowTitle(tr("Notebook")); setWindowIcon(global.getIconResource(":notebookSmallIcon")); setLayout(&grid); syncBox.setText(tr("Synchronized")); syncBox.setChecked(true); syncBox.setEnabled(false); defaultNotebook.setText(tr("Default")); defaultNotebook.setChecked(false); defaultNotebook.setEnabled(true); connect(&name, SIGNAL(textChanged(const QString&)), this, SLOT(validateInput())); nameLabel.setText(tr("Name")); queryGrid.addWidget(&nameLabel, 1,1); queryGrid.addWidget(&name, 1, 2); queryGrid.addWidget(&syncBox, 2,2); queryGrid.addWidget(&defaultNotebook, 3,2); // queryGrid.setContentsMargins(10, 10, -10, -10); grid.addLayout(&queryGrid,1,1); ok.setText(tr("OK")); connect(&ok, SIGNAL(clicked()), this, SLOT(okButtonPressed())); cancel.setText(tr("Cancel")); connect(&cancel, SIGNAL(clicked()), this, SLOT(cancelButtonPressed())); buttonGrid.addWidget(&ok, 1, 1); buttonGrid.addWidget(&cancel, 1,2); grid.addLayout(&buttonGrid,2,1); this->setFont(global.getGuiFont(font())); } // This happens when the Ok button is pressed. void NotebookProperties::okButtonPressed() { okPressed = true; bool isDefault = defaultNotebook.isChecked(); if (this->lid > 0) { Notebook book; NotebookTable table(global.db); table.get(book, lid); book.name = name.text().trimmed(); book.defaultNotebook = isDefault; table.update(book, true); close(); return; } // We have a new notebook to add Notebook book; book.name = name.text().trimmed(); bool isSynchronized = syncBox.isChecked(); QUuid uuid; QString g = uuid.createUuid().toString().replace("{","").replace("}",""); book.guid = g; NotebookTable t(global.db); book.defaultNotebook = isDefault; t.add(0,book,true, !isSynchronized); close(); } // This happens when the cancel button is pressed. void NotebookProperties::cancelButtonPressed() { okPressed = false; close(); } // This is usually called after the constructor and will set up // the notebook name (if it already exists). If the lid > 0 then // we are editing an existing notebook. If it is 0 then this is a // new notebook. void NotebookProperties::setLid(qint32 lid) { if (lid > 0) { this->lid = lid; Notebook book; NotebookTable table(global.db); table.get(book, lid); originalName = book.name; name.setText(originalName.trimmed()); syncBox.setEnabled(false); bool local = table.isLocal(lid); syncBox.setChecked(!local); qint32 defaultLid = table.getDefaultNotebookLid(); if (defaultLid == lid) { defaultNotebook.setEnabled(false); defaultNotebook.setChecked(true); } return; } this->lid = 0; syncBox.setEnabled(true); this->setWindowTitle(tr("Add Notebook")); originalName = ""; } // This is called when the notebook name is changed. We check that // the name isn't blank and there isn't already a notebook by that // name. void NotebookProperties::validateInput() { ok.setEnabled(true); if (name.text()=="") { ok.setEnabled(false); return; } NotebookTable t(global.db); QString notebook = name.text().trimmed(); if (t.findByName(notebook)>0 && name.text().trimmed() != originalName) { ok.setEnabled(false); return; } } nixnote2-2.0.2/dialog/notebookproperties.h000066400000000000000000000033651315604104400206330ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NOTEBOOKPROPERTIES_H #define NOTEBOOKPROPERTIES_H #include #include #include #include #include #include class NotebookProperties : public QDialog { Q_OBJECT private: QPushButton ok; QLabel nameLabel; QPushButton cancel; QGridLayout grid; QGridLayout buttonGrid; QGridLayout queryGrid; QStringList existingNotebooks; QString originalName; qint32 lid; QCheckBox syncBox; QCheckBox defaultNotebook; public: explicit NotebookProperties(QWidget *parent = 0); QLineEdit name; bool okPressed; void setLid(qint32 lid); signals: private slots: void okButtonPressed(); void cancelButtonPressed(); void validateInput(); signals: public slots: }; #endif // NOTEBOOKPROPERTIES_H nixnote2-2.0.2/dialog/notehistoryselect.cpp000066400000000000000000000073251315604104400210200ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "notehistoryselect.h" #include #include "global.h" extern Global global; NoteHistorySelect::NoteHistorySelect(QWidget *parent) : QDialog(parent) { importPressed = false; this->setWindowTitle(tr("Note History")); cancelButton.setText(tr("Cancel")); importButton.setText(tr("Import")); importButton.setEnabled(false); replace = new QCheckBox(); replace->setCheckable(true); replace->setChecked(false); replace->setText(tr("Replace current note?")); connect(&importButton, SIGNAL(clicked()), this, SLOT(importButtonPressed())); connect(&cancelButton, SIGNAL(clicked()), this, SLOT(cancelButtonPressed())); connect(&list, SIGNAL(itemSelectionChanged()), this, SLOT(enableImport())); QVBoxLayout *mainLayout = new QVBoxLayout(this); QHBoxLayout *entryLayout = new QHBoxLayout(this); entryLayout->addWidget(&list); entryLayout->addWidget(&importButton); mainLayout->addLayout(entryLayout); mainLayout->addWidget(replace); this->setLayout(mainLayout); QHBoxLayout *buttonLayout = new QHBoxLayout(this); buttonLayout->addWidget(&importButton); buttonLayout->addWidget(&cancelButton); mainLayout->addLayout(buttonLayout); this->setFont(global.getGuiFont(font())); } void NoteHistorySelect::importButtonPressed() { this->importPressed = true; this->close(); } void NoteHistorySelect::cancelButtonPressed() { this->importPressed = false; this->close(); } void NoteHistorySelect::loadData(QList &versions) { // Add the current generation QListWidgetItem *item = new QListWidgetItem(&list); item->setData(Qt::UserRole, 0); QString text = tr("Current copy on Evernote"); item->setText(text); list.addItem(item); this->versions = &versions; for (int i=0; isetData(Qt::UserRole, versions.at(i).updateSequenceNum); QString text; QDateTime timestamp; timestamp.setTime_t(versions.at(i).saved/1000); if (timestamp.date() == QDate::currentDate()) text = tr("Today") +" " + timestamp.time().toString(Qt::SystemLocaleShortDate); if (timestamp.date() == QDate::currentDate().addDays(-1)) text = tr("Yesterday") +" " + timestamp.time().toString(Qt::SystemLocaleShortDate); text = timestamp.toString(global.dateFormat + " " +global.timeFormat); text = text + " : "+ versions.at(i).title; item->setText(text); list.addItem(item); } } void NoteHistorySelect::enableImport() { importButton.setEnabled(true); usn = this->list.selectedItems().at(0)->data(Qt::UserRole).toInt(); } bool NoteHistorySelect::replaceCurrentNote() { return this->replace->isChecked(); } nixnote2-2.0.2/dialog/notehistoryselect.h000066400000000000000000000034111315604104400204550ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NOTEHISTORYSELECT_H #define NOTEHISTORYSELECT_H #include #include #include #include #include #include #include #include "qevercloud/include/QEverCloud.h" using namespace qevercloud; using namespace std; class NoteHistorySelect : public QDialog { Q_OBJECT private: QPushButton cancelButton; QPushButton importButton; QList *versions; QCheckBox *replace; QListWidget list; public: explicit NoteHistorySelect(QWidget *parent = 0); bool importPressed; qint32 usn; void loadData(QList &versions); bool replaceCurrentNote(); signals: public slots: void importButtonPressed(); void cancelButtonPressed(); void enableImport(); }; #endif // NOTEHISTORYSELECT_H nixnote2-2.0.2/dialog/noteproperties.cpp000066400000000000000000000037151315604104400203120ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2016 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "noteproperties.h" #include #include #include NoteProperties::NoteProperties() { tableWidget = new QTableWidget(this); tableWidget->setRowCount(20); tableWidget->setColumnCount(2); tableWidget->verticalHeader()->hide(); tableWidget->horizontalHeader()->hide(); tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); okButton = new QPushButton(this); this->setWindowTitle(tr("Note Properties")); okButton->setText(tr("Ok")); QVBoxLayout *layout = new QVBoxLayout(); layout->addWidget(tableWidget); QHBoxLayout *buttonLayout = new QHBoxLayout(); QSpacerItem *spacer1 = new QSpacerItem(50,1, QSizePolicy::Maximum); QSpacerItem *spacer2 = new QSpacerItem(50,1, QSizePolicy::Maximum); buttonLayout->addSpacerItem(spacer1); buttonLayout->addWidget(okButton); buttonLayout->addSpacerItem(spacer2); layout->addLayout(buttonLayout); setLayout(layout); connect(okButton, SIGNAL(pressed()), this, SLOT(close())); } nixnote2-2.0.2/dialog/noteproperties.h000066400000000000000000000023371315604104400177560ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2016 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NOTEPROPERTIES_H #define NOTEPROPERTIES_H #include #include #include class NoteProperties : public QDialog { Q_OBJECT private: public: NoteProperties(); QPushButton *okButton; QTableWidget* tableWidget; }; #endif // NOTEPROPERTIES_H nixnote2-2.0.2/dialog/preferences/000077500000000000000000000000001315604104400170175ustar00rootroot00000000000000nixnote2-2.0.2/dialog/preferences/appearancepreferences.cpp000066400000000000000000000513221315604104400240470ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "appearancepreferences.h" #include "global.h" #include #include #include #include #include #ifdef _WIN32 #include #endif extern Global global; AppearancePreferences::AppearancePreferences(QWidget *parent) : QWidget(parent) { mainLayout = new QGridLayout(); mainLayout->setAlignment(Qt::AlignTop); setLayout(mainLayout); int middleClickIndex = global.getMiddleClickAction(); showTrayIcon = new QCheckBox(tr("Show tray icon"), this); showPDFs = new QCheckBox(tr("Display PDFs inline**"), this); showSplashScreen = new QCheckBox(tr("Show splash screen on startup"), this); autoStart = new QCheckBox(tr("Start automatically at login"), this); confirmDeletes = new QCheckBox(tr("Confirm Deletes"), this); showMissedReminders = new QCheckBox(tr("Show missed reminders on startup"), this); startMinimized = new QCheckBox(tr("Always Start minimized"), this); dynamicTotals = new QCheckBox(tr("Show notebook and tag totals"), this); autoHideEditorButtonbar = new QCheckBox(tr("Auto-Hide editor toolbar"), this); autoHideEditorButtonbar->setChecked(global.autoHideEditorToolbar); disableEditingOnStartup = new QCheckBox(tr("Disable note editing on startup"), this); newNoteFocusOnTitle = new QCheckBox(tr("Focus on Note Title on New Note"), this); forceWebFonts = new QCheckBox(tr("Limit Editor to Web Fonts*"), this); forceWebFonts->setChecked(global.forceWebFonts); showNoteListGrid = new QCheckBox(tr("Show note list grid*"), this); alternateNoteListColors = new QCheckBox(tr("Alternate note list colors*"), this); autosetUserid = new QCheckBox(tr("Set author on new notes."),this); autosetUserid->setChecked(global.autosetUsername()); fontPreviewInDialog = new QCheckBox(tr("Preview fonts in editor dialag*")); fontPreviewInDialog->setChecked(global.previewFontsInDialog()); traySingleClickAction = new QComboBox(); traySingleClickAction->addItem(tr("Do Nothing"), 0); traySingleClickAction->addItem(tr("Show/Hide NixNote"), 1); traySingleClickAction->addItem(tr("New Text Note"), 2); traySingleClickAction->addItem(tr("New Quick Note"), 3); traySingleClickAction->addItem(tr("Screen Capture"), 4); trayMiddleClickAction = new QComboBox(); trayMiddleClickAction->addItem(tr("Do Nothing"), 0); trayMiddleClickAction->addItem(tr("Show/Hide NixNote"), 1); trayMiddleClickAction->addItem(tr("New Text Note"), 2); trayMiddleClickAction->addItem(tr("New Quick Note"), 3); trayMiddleClickAction->addItem(tr("Screen Capture"), 4); trayDoubleClickAction = new QComboBox(); trayDoubleClickAction->addItem(tr("Do Nothing"), 0); trayDoubleClickAction->addItem(tr("Show/Hide NixNote"), 1); trayDoubleClickAction->addItem(tr("New Text Note"), 2); trayDoubleClickAction->addItem(tr("New Quick Note"), 3); trayDoubleClickAction->addItem(tr("Screen Capture"), 4); mouseMiddleClickAction = new QComboBox(); mouseMiddleClickAction->addItem(tr("Open New Tab"), MOUSE_MIDDLE_CLICK_NEW_TAB); mouseMiddleClickAction->addItem(tr("Open New Window"), MOUSE_MIDDLE_CLICK_NEW_WINDOW); mouseMiddleClickAction->setCurrentIndex(middleClickIndex); defaultGuiFontSizeChooser = new QComboBox(); defaultFontChooser = new QComboBox(); defaultFontSizeChooser = new QComboBox(); connect(defaultFontChooser, SIGNAL(currentIndexChanged(QString)), this, SLOT(loadFontSizes(QString))); loadFontNames(defaultFontChooser, global.defaultFont); defaultGuiFontChooser = new QComboBox(); connect(defaultGuiFontChooser, SIGNAL(currentIndexChanged(QString)), this, SLOT(loadGuiFontSizes(QString))); loadFontNames(defaultGuiFontChooser, global.defaultGuiFont); systemNotifier = new QComboBox(); systemNotifier->addItem(tr("Qt Default"), "qt"); systemNotifier->addItem(tr("notify-send"), "notify-send"); windowThemeChooser = new QComboBox(); windowThemeChooser->addItem(tr("System Default")); windowThemeChooser->addItems(global.getThemeNames()); defaultNotebookOnStartupLabel = new QLabel(tr("Startup Behavior"),this); defaultNotebookOnStartup = new QComboBox(); defaultNotebookOnStartup->addItem(tr("Restore Selection Criteria"), UseLastViewedNotebook); defaultNotebookOnStartup->addItem(tr("Select Default Notebook"), UseDefaultNotebook); defaultNotebookOnStartup->addItem(tr("View All Notebooks"), UseAllNotebooks); confirmDeletes->setChecked(global.confirmDeletes()); int row=0; minimizeToTray = NULL; closeToTray = NULL; mainLayout->addWidget(showTrayIcon,row,0); mainLayout->addWidget(showSplashScreen, row++,1); if (QSystemTrayIcon::isSystemTrayAvailable()) { minimizeToTray = new QCheckBox(tr("Minimize to tray")); closeToTray = new QCheckBox(tr("Close to tray")); mainLayout->addWidget(minimizeToTray, row, 0); mainLayout->addWidget(closeToTray, row++, 1); } mainLayout->addWidget(autoHideEditorButtonbar, row, 0); mainLayout->addWidget(showPDFs, row++, 1); mainLayout->addWidget(showMissedReminders, row, 0); mainLayout->addWidget(dynamicTotals, row++, 1); mainLayout->addWidget(startMinimized, row, 0); mainLayout->addWidget(autoStart, row++, 1); mainLayout->addWidget(disableEditingOnStartup, row, 0); mainLayout->addWidget(newNoteFocusOnTitle, row++, 1); mainLayout->addWidget(confirmDeletes, row, 0); mainLayout->addWidget(forceWebFonts, row++, 1); mainLayout->addWidget(showNoteListGrid,row,0); mainLayout->addWidget(alternateNoteListColors,row++,1); mainLayout->addWidget(autosetUserid, row,0); mainLayout->addWidget(fontPreviewInDialog, row++, 1); mainLayout->addWidget(defaultNotebookOnStartupLabel,row,0); mainLayout->addWidget(defaultNotebookOnStartup, row++,1); mainLayout->addWidget(new QLabel(tr("Notification Service")), row, 0); mainLayout->addWidget(systemNotifier, row++, 1); mainLayout->addWidget(new QLabel(tr("Middle Click Open Behavior")), row,0); mainLayout->addWidget(mouseMiddleClickAction, row++, 1); mainLayout->addWidget(new QLabel(tr("Tray Icon Click Action")), row, 0); mainLayout->addWidget(traySingleClickAction, row++, 1); mainLayout->addWidget(new QLabel(tr("Tray Icon Middle Click Action")), row, 0); mainLayout->addWidget(trayMiddleClickAction, row++, 1); mainLayout->addWidget(new QLabel(tr("Tray Icon Double Click Action")), row, 0); mainLayout->addWidget(trayDoubleClickAction, row++, 1); mainLayout->addWidget(new QLabel(tr("Default GUI Font*")), row, 0); mainLayout->addWidget(defaultGuiFontChooser, row++, 1); mainLayout->addWidget(new QLabel(tr("Default GUI Font Size*")), row, 0); mainLayout->addWidget(defaultGuiFontSizeChooser, row++, 1); mainLayout->addWidget(new QLabel(tr("Default Editor Font*")), row, 0); mainLayout->addWidget(defaultFontChooser, row++, 1); mainLayout->addWidget(new QLabel(tr("Default Editor Font Size*")), row, 0); mainLayout->addWidget(defaultFontSizeChooser, row++, 1); mainLayout->addWidget(new QLabel(""), row++, 0); mainLayout->addWidget(new QLabel(tr("* May require restart on some systems.")), row++, 0); mainLayout->addWidget(new QLabel(tr("** Can crash on Gnome systems.")), row++, 0); global.settings->beginGroup("Appearance"); disableEditingOnStartup->setChecked(global.settings->value("disableEditingOnStartup",false).toBool()); int idx = global.settings->value("traySingleClickAction", 0).toInt(); idx = traySingleClickAction->findData(idx, Qt::UserRole); traySingleClickAction->setCurrentIndex(idx); idx = global.settings->value("trayMiddleClickAction", 0).toInt(); idx = trayMiddleClickAction->findData(idx, Qt::UserRole); trayMiddleClickAction->setCurrentIndex(idx); idx = global.settings->value("trayDoubleClickAction", 0).toInt(); idx = trayDoubleClickAction->findData(idx, Qt::UserRole); trayDoubleClickAction->setCurrentIndex(idx); showTrayIcon->setChecked(global.settings->value("showTrayIcon", false).toBool()); showPDFs->setChecked(global.settings->value("showPDFs", true).toBool()); showSplashScreen->setChecked(global.settings->value("showSplashScreen", false).toBool()); showMissedReminders->setChecked(global.settings->value("showMissedReminders", false).toBool()); startMinimized->setChecked(global.settings->value("startMinimized", false).toBool()); if (global.countBehavior == Global::CountAll) dynamicTotals->setChecked(true); else dynamicTotals->setChecked(false); autoStart->setChecked(global.settings->value("autoStart", false).toBool()); int defaultNotebook = global.settings->value("startupNotebook", UseLastViewedNotebook).toInt(); defaultNotebookOnStartup->setCurrentIndex(defaultNotebook); showNoteListGrid->setChecked(global.settings->value("showNoteListGrid", false).toBool()); alternateNoteListColors->setChecked(global.settings->value("alternateNoteListColors", true).toBool()); global.settings->endGroup(); connect(showTrayIcon, SIGNAL(clicked(bool)), this, SLOT(showTrayIconChanged(bool))); if (minimizeToTray != NULL) { minimizeToTray->setChecked(global.minimizeToTray()); if (!showTrayIcon->isChecked()) minimizeToTray->setEnabled(false); } if (closeToTray != NULL) { closeToTray->setChecked(global.closeToTray()); if (!showTrayIcon->isChecked()) closeToTray->setEnabled(false); } newNoteFocusOnTitle->setChecked(global.newNoteFocusToTitle()); this->setFont(global.getGuiFont(font())); // Check if notify-send is installed QProcess notifyProcess; notifyProcess.start("notify-send -?"); notifyProcess.waitForFinished(); if (notifyProcess.exitCode()) { systemNotifier->setEnabled(false); } else { QString notifier = global.systemNotifier(); int idx = systemNotifier->findData(notifier, Qt::UserRole); systemNotifier->setCurrentIndex(idx); } } void AppearancePreferences::saveValues() { int index = systemNotifier->currentIndex(); QString sysnotifier = systemNotifier->itemData(index, Qt::UserRole).toString(); global.setNewNoteFocusToTitle(newNoteFocusOnTitle->isChecked()); global.setDeleteConfirmation(this->confirmDeletes->isChecked()); global.setAutosetUsername(autosetUserid->isChecked()); if (!autosetUserid->isChecked()) global.full_username=""; global.settings->beginGroup("Appearance"); global.settings->setValue("disableEditingOnStartup", disableEditingOnStartup->isChecked()); global.settings->setValue("forceWebFonts", forceWebFonts->isChecked()); global.settings->setValue("showTrayIcon", showTrayIcon->isChecked()); global.settings->setValue("showPDFs", showPDFs->isChecked()); global.autoHideEditorToolbar = this->autoHideEditorButtonbar->isChecked(); global.settings->setValue("autoHideEditorToolbar", global.autoHideEditorToolbar); global.settings->setValue("mouseMiddleClickOpen", mouseMiddleClickAction->currentIndex()); global.settings->setValue("trayDoubleClickAction", trayDoubleClickAction->currentIndex()); global.settings->setValue("traySingleClickAction", traySingleClickAction->currentIndex()); global.settings->setValue("trayMiddleClickAction", trayMiddleClickAction->currentIndex()); global.settings->setValue("systemNotifier", sysnotifier); // global.settings->remove("trayDoubleClickAction"); global.settings->setValue("showNoteListGrid", showNoteListGrid->isChecked()); global.settings->setValue("alternateNoteListColors", alternateNoteListColors->isChecked()); global.pdfPreview = showPDFs->isChecked(); if (minimizeToTray!= NULL) global.settings->setValue("minimizeToTray", minimizeToTray->isChecked()); else global.settings->remove("minimizeToTray"); if (closeToTray != NULL) global.settings->setValue("closeToTray", closeToTray->isChecked()); else global.settings->remove("closeToTray"); global.settings->setValue("showSplashScreen", showSplashScreen->isChecked()); global.settings->setValue("startMinimized", startMinimized->isChecked()); global.settings->setValue("showMissedReminders", showMissedReminders->isChecked()); if (dynamicTotals->isChecked()) { global.settings->setValue("countBehavior", 1); global.countBehavior = Global::CountAll; } else { global.settings->setValue("countBehavior", 2); global.countBehavior = Global::CountNone; } index = defaultNotebookOnStartup->currentIndex(); int value = defaultNotebookOnStartup->itemData(index).toInt(); global.settings->setValue("startupNotebook", value); // Save default font & size if (webSettingsChanged) { int idx = defaultFontChooser->currentIndex(); global.defaultFont = defaultFontChooser->itemData(idx, Qt::UserRole).toString(); idx = defaultFontSizeChooser->currentIndex(); global.defaultFontSize = defaultFontSizeChooser->itemData(idx, Qt::UserRole).toInt(); idx = defaultGuiFontSizeChooser->currentIndex(); global.defaultGuiFontSize = defaultGuiFontSizeChooser->itemData(idx, Qt::UserRole).toInt(); idx = defaultGuiFontChooser->currentIndex(); global.defaultGuiFont = defaultGuiFontChooser->itemData(idx, Qt::UserRole).toString(); if (global.defaultGuiFont == "System Default") global.defaultGuiFont = ""; if (global.defaultFont == "System Default") global.defaultFont = ""; global.settings->setValue("defaultFont", global.defaultFont); global.settings->setValue("defaultFontSize", global.defaultFontSize); global.settings->setValue("defaultGuiFont", global.defaultGuiFont); global.settings->setValue("defaultGuiFontSize", global.defaultGuiFontSize); QWebSettings *settings = QWebSettings::globalSettings(); settings->setFontFamily(QWebSettings::StandardFont, global.defaultFont); // QWebkit DPI is hard coded to 96. Hence, we calculate the correct // font size based on desktop logical DPI. if (global.defaultFontSize > 0) { settings->setFontSize(QWebSettings::DefaultFontSize, global.defaultFontSize * (QApplication::desktop()->logicalDpiX() / 96.0)); } } // See if the user has overridden the window icon //Copy the nixnote2.desktop so we can override the app icon // Ideally, we could use QSettings since it is ini format, but // it puts [Desktop Entry] as [Desktop%20Enry], which screws // things up. QString systemFile = "/usr/share/applications/nixnote2.desktop"; QFile systemIni(systemFile); QStringList desktopData; if (systemIni.open(QIODevice::ReadOnly)) { QTextStream data(&systemIni); QString line = data.readLine(); while (!line.isNull()) { if (line.startsWith("Icon=")) { line = "Icon=" +global.getResourceFileName(global.resourceList,":windowIcon.png"); } desktopData.append(line); line = data.readLine(); } } systemIni.close(); // Now, write it back out QString userFile = QDir::homePath()+"/.local/share/applications/nixnote2.desktop"; QFile userIni(userFile); if (userIni.open(QIODevice::WriteOnly)) { QTextStream data(&userIni); for (int i=0; isetValue("autoStart", autoStart->isChecked()); #ifdef _WIN32 QFileInfo fileInfo(QCoreApplication::applicationFilePath()); QFile::remove(QDesktopServices::storageLocation(QDesktopServices::ApplicationsLocation) + QDir::separator() + "Startup" + QDir::separator() + fileInfo.completeBaseName() + ".lnk"); #else QDir dir; QString startFile = QDir::homePath()+"/.config/autostart/nixnote2.desktop"; dir.remove(startFile); #endif if (autoStart->isChecked()) { #ifdef _WIN32 QFile::link(QCoreApplication::applicationFilePath(), QDesktopServices::storageLocation(QDesktopServices::ApplicationsLocation) + QDir::separator() + "Startup" + QDir::separator() + fileInfo.completeBaseName() + ".lnk"); #else //Copy the nixnote2.desktop to the ~/.config/autostart directory QString systemFile = "/usr/share/applications/nixnote2.desktop"; QFile systemIni(systemFile); QStringList desktopData; if (systemIni.open(QIODevice::ReadOnly)) { QTextStream data(&systemIni); QString line = data.readLine(); while (!line.isNull()) { if (line.startsWith("Icon=")) { line = "Icon=" +global.getResourceFileName(global.resourceList,":windowIcon.png"); } desktopData.append(line); line = data.readLine(); } } systemIni.close(); // Now, write it back out QString userFile = QDir::homePath()+"/.config/autostart/nixnote2.desktop"; QFile userIni(userFile); if (userIni.open(QIODevice::WriteOnly)) { QTextStream data(&userIni); for (int i=0; iendGroup(); global.setPreviewFontsInDialog(fontPreviewInDialog->isChecked()); } // Load the list of font names void AppearancePreferences::loadFontNames(QComboBox *combo, QString defaultFont) { QFontDatabase fonts; QStringList fontFamilies = fonts.families(); combo->addItem(tr("System Default"), "System Default"); for (int i = 0; i < fontFamilies.size(); i++) { combo->addItem(fontFamilies[i], fontFamilies[i]); } int idx = combo->findData(defaultFont, Qt::UserRole); if (idx >=0) { combo->setCurrentIndex(idx); } else combo->setCurrentIndex(0); } // Load the list of font sizes void AppearancePreferences::loadGuiFontSizes(QString name) { webSettingsChanged =true; QFontDatabase fdb; defaultGuiFontSizeChooser->clear(); defaultGuiFontSizeChooser->addItem(tr("System Default"), 0); QList sizes = fdb.pointSizes(name); for (int i=0; iaddItem(QString::number(sizes[i]), sizes[i]); } int idx = defaultGuiFontSizeChooser->findData(global.defaultGuiFontSize, Qt::UserRole); if (idx >=0) { defaultGuiFontSizeChooser->setCurrentIndex(idx); } else defaultGuiFontSizeChooser->setCurrentIndex(0); } // Load the list of font sizes void AppearancePreferences::loadFontSizes(QString name) { webSettingsChanged =true; QFontDatabase fdb; defaultFontSizeChooser->clear(); defaultFontSizeChooser->addItem(tr("System Default"), 0); QList sizes = fdb.pointSizes(name); for (int i=0; iaddItem(QString::number(sizes[i]), sizes[i]); } int idx = defaultFontSizeChooser->findData(global.defaultFontSize, Qt::UserRole); if (idx >=0) { defaultFontSizeChooser->setCurrentIndex(idx); } else defaultFontSizeChooser->setCurrentIndex(0); } void AppearancePreferences::fontSizeChanged(QString name) { // suppress unused Q_UNUSED(name); webSettingsChanged = true; } void AppearancePreferences::showTrayIconChanged(bool value) { if (value) { minimizeToTray->setEnabled(true); closeToTray->setEnabled(true); } else { minimizeToTray->setChecked(false); closeToTray->setChecked(false); minimizeToTray->setEnabled(false); closeToTray->setEnabled(false); } } nixnote2-2.0.2/dialog/preferences/appearancepreferences.h000066400000000000000000000056011315604104400235130ustar00rootroot00000000000000#ifndef APPEARANCEPREFERENCES_H #define APPEARANCEPREFERENCES_H #include #include #include /********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include #include #include #include class AppearancePreferences : public QWidget { Q_OBJECT private: QGridLayout *mainLayout; QComboBox *defaultNotebookOnStartup; QComboBox *windowThemeChooser; QComboBox *defaultFontChooser; QComboBox *defaultFontSizeChooser; QComboBox *defaultGuiFontSizeChooser; QComboBox *defaultGuiFontChooser; QCheckBox *autoHideEditorButtonbar; QComboBox *traySingleClickAction; QComboBox *trayMiddleClickAction; QComboBox *trayDoubleClickAction; QComboBox *mouseMiddleClickAction; QComboBox *mouseDoubleClickAction; QComboBox *systemNotifier; QCheckBox *autosetUserid; QCheckBox *fontPreviewInDialog; QLabel *defaultNotebookOnStartupLabel; QPushButton *previewButton; bool webSettingsChanged; QScrollArea *scrollArea; void loadFontNames(QComboBox *combo, QString defaultFont); public: explicit AppearancePreferences(QWidget *parent = 0); void saveValues(); QCheckBox *showTrayIcon; QCheckBox *showPDFs; QCheckBox *showSplashScreen; QCheckBox *showMissedReminders; QCheckBox *autoStart; QCheckBox *startMinimized; QCheckBox *minimizeToTray; QCheckBox *confirmDeletes; QCheckBox *closeToTray; QCheckBox *forceWebFonts; QCheckBox *dynamicTotals; QCheckBox *disableEditingOnStartup; QCheckBox *newNoteFocusOnTitle; QCheckBox *showNoteListGrid; QCheckBox *alternateNoteListColors; enum DefaultNotebook { UseLastViewedNotebook = 0, UseDefaultNotebook = 1, UseAllNotebooks = 2 }; signals: public slots: void loadFontSizes(QString font); void loadGuiFontSizes(QString name); void fontSizeChanged(QString name); void showTrayIconChanged(bool value); }; #endif // APPEARANCEPREFERENCES_H nixnote2-2.0.2/dialog/preferences/debugpreferences.cpp000066400000000000000000000140411315604104400230330ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "debugpreferences.h" #include "logger/qslog.h" #include "global.h" extern Global global; using namespace QsLogging; DebugPreferences::DebugPreferences(QWidget *parent) : QWidget(parent) { mainLayout = new QGridLayout(this); mainLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); setLayout(mainLayout); strictDTD = new QCheckBox(tr("Bypass strict note checking. *"),this); strictDTD->setChecked(!global.strictDTD); bypassTidy = new QCheckBox(tr("Bypass HTML Tidy. *"), this); bypassTidy->setChecked(global.bypassTidy); disableUploads = new QCheckBox(tr("Disable uploads to server."),this); disableImageHighlight = new QCheckBox(tr("Disable image search highlighting."), this); showLidColumn = new QCheckBox(tr("Show LID column (requires restart).")); nonAsciiSortBug = new QCheckBox(tr("Disable Tag Sorting (useful for non-ASCII sort bug).")); forceUTF8 = new QCheckBox(tr("Force UTF8 Encoding.")); nonAsciiSortBug->setChecked(global.nonAsciiSortBug); forceUTF8->setChecked(global.getForceUTF8()); global.settings->beginGroup("Debugging"); disableUploads->setChecked(global.disableUploads); showLidColumn->setChecked(global.settings->value("showLids", false).toBool()); global.settings->endGroup(); disableImageHighlight->setChecked(global.disableImageHighlight()); int row=0; mainLayout->addWidget(disableUploads,row++,1); mainLayout->addWidget(showLidColumn, row++,1); mainLayout->addWidget(nonAsciiSortBug,row++,1); mainLayout->addWidget(disableImageHighlight,row++,1); mainLayout->addWidget(strictDTD,row++,1); mainLayout->addWidget(bypassTidy, row++, 1); mainLayout->addWidget(forceUTF8, row++, 1); #ifndef _WIN32 interceptSigHup = new QCheckBox(tr("Intercept Unix SIGHUP (requires restart).")); interceptSigHup->setChecked(global.getInterceptSigHup()); mainLayout->addWidget(interceptSigHup,row++,1); #endif multiThreadSave = new QCheckBox(tr("Use multipe theads to save note contents (experimental).")); multiThreadSave->setChecked(global.getMultiThreadSave()); mainLayout->addWidget(multiThreadSave,row++,1); useLibTidy = new QCheckBox(tr("Use libtidy directly (experimental).")); useLibTidy->setChecked(global.getUseLibTidy()); mainLayout->addWidget(useLibTidy,row++,1); #ifndef _WIN32 useLibTidy->setVisible(false); #endif mainLayout->addWidget(new QLabel(tr("Auto-Save Interval (in seconds).")), row,0); autoSaveInterval = new QSpinBox(); autoSaveInterval->setMinimum(5); autoSaveInterval->setMaximum(300); autoSaveInterval->setValue(global.getAutoSaveInterval()); mainLayout->addWidget(autoSaveInterval, row++,1); debugLevelLabel = new QLabel(tr("Message Level"), this); debugLevelLabel->setAlignment(Qt::AlignRight | Qt::AlignCenter); debugLevel = new QComboBox(this); debugLevel->addItem(tr("Trace"), TraceLevel); debugLevel->addItem(tr("Debug"), DebugLevel); debugLevel->addItem(tr("Info"), InfoLevel); debugLevel->addItem(tr("Warnings"), WarnLevel); debugLevel->addItem(tr("Errors"), ErrorLevel); debugLevel->addItem(tr("Fatal"), FatalLevel); global.settings->beginGroup("Debugging"); int value = global.settings->value("messageLevel", InfoLevel).toInt(); global.settings->endGroup(); int index = debugLevel->findData(value); debugLevel->setCurrentIndex(index); mainLayout->addWidget(debugLevelLabel,row,0); mainLayout->addWidget(debugLevel,row++,1); mainLayout->addWidget(new QLabel(" "), row++, 0); mainLayout->addWidget(new QLabel(tr("* Note: Enabling can cause sync issues.")), row++, 0); this->setFont(global.getGuiFont(font())); } DebugPreferences::~DebugPreferences() { delete debugLevel; delete debugLevelLabel; delete mainLayout; } int DebugPreferences::getMessageLevel() { int index = debugLevel->currentIndex(); return debugLevel->itemData(index).toInt(); } void DebugPreferences::saveValues() { int value = getMessageLevel(); global.setForceUTF8(forceUTF8->isChecked()); global.settings->beginGroup("Debugging"); global.settings->setValue("messageLevel", value); global.settings->setValue("showLids", showLidColumn->isChecked()); global.settings->setValue("nonAsciiSortBug", nonAsciiSortBug->isChecked()); global.settings->setValue("disableImageHighlight", disableImageHighlight->isChecked()); global.nonAsciiSortBug = nonAsciiSortBug->isChecked(); // If the disable uploads is different than the defaults or if it has changed, we save it. if (disableUploads->isChecked() || disableUploads->isChecked() != global.disableUploads) global.settings->setValue("disableUploads", disableUploads->isChecked()); global.settings->endGroup(); global.setAutoSaveInterval(autoSaveInterval->value()); global.disableUploads = disableUploads->isChecked(); global.setStrictDTD(!strictDTD->isChecked()); global.setBypassTidy(bypassTidy->isChecked()); #ifndef _WIN32 global.setInterceptSigHup(interceptSigHup->isChecked()); #endif // global.setMultiThreadSave(multiThreadSave->isChecked()); global.setUseLibTidy(useLibTidy->isChecked()); } nixnote2-2.0.2/dialog/preferences/debugpreferences.h000066400000000000000000000034621315604104400225050ustar00rootroot00000000000000#ifndef DEBUGPREFERENCES_H /********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #define DEBUGPREFERENCES_H #include #include #include #include #include #include class DebugPreferences : public QWidget { Q_OBJECT private: QGridLayout *mainLayout; QComboBox *debugLevel; QCheckBox *disableUploads; QCheckBox *showLidColumn; QCheckBox *nonAsciiSortBug; QCheckBox *disableImageHighlight; QCheckBox *strictDTD; QCheckBox *bypassTidy; QCheckBox *forceUTF8; QCheckBox *interceptSigHup; QCheckBox *multiThreadSave; QCheckBox *useLibTidy; QSpinBox *autoSaveInterval; QLabel *debugLevelLabel; int getMessageLevel(); public: explicit DebugPreferences(QWidget *parent = 0); ~DebugPreferences(); QString getDebugLevel(); void saveValues(); signals: public slots: }; #endif // DEBUGPREFERENCES_H nixnote2-2.0.2/dialog/preferences/emailpreferences.cpp000066400000000000000000000154501315604104400230410ustar00rootroot00000000000000#include "global.h" #include #include "dialog/emaildialog.h" #include "email/smtpclient.h" #include "email/mimeinlinefile.h" #include "email/mimehtml.h" #include "emailpreferences.h" extern Global global; EmailPreferences::EmailPreferences(QWidget *parent) : QWidget(parent) { smtpServerLabel.setText(tr("SMTP Server")); smtpPortLabel.setText(tr("Server Port")); useridLabel.setText(tr("Userid")); passwordLabel.setText(tr("Password")); senderNameLabel.setText(tr("Sender Display Name")); senderEmailLabel.setText(tr("Sender Email")); smtpConnectionTypeLabel.setText(tr("Connection Type")); password.setEchoMode(QLineEdit::Password); smtpPort.setInputMask("99999"); QGridLayout *mainLayout = new QGridLayout(this); mainLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); smtpConnectionType.addItem(tr("Plain Text"), "TcpConnection"); smtpConnectionType.addItem(tr("SSL Connection"), "SslConnection"); smtpConnectionType.addItem(tr("TLS Connection"), "TlsConnection"); testEmail = new QPushButton(tr("Send Test Email")); connect(testEmail, SIGNAL(pressed()), this, SLOT(sendTestEmail())); int row = 0; mainLayout->addWidget(&smtpServerLabel, row, 0); mainLayout->addWidget(&smtpServer, row++, 1); mainLayout->addWidget(&smtpPortLabel, row, 0); mainLayout->addWidget(&smtpPort, row++, 1); mainLayout->addWidget(&smtpConnectionTypeLabel, row, 0); mainLayout->addWidget(&smtpConnectionType, row++, 1); mainLayout->addWidget(&useridLabel, row, 0); mainLayout->addWidget(&userid, row++, 1); mainLayout->addWidget(&passwordLabel, row, 0); mainLayout->addWidget(&password, row++, 1); mainLayout->addWidget(&senderEmailLabel, row, 0); mainLayout->addWidget(&senderEmail, row++, 1); mainLayout->addWidget(&senderNameLabel, row, 0); mainLayout->addWidget(&senderName, row++, 1); mainLayout->addWidget(testEmail, row++,0); // Get the smtp server settings global.settings->beginGroup("Email"); QString s = global.settings->value("smtpServer", "").toString(); QString p = global.settings->value("smtpPort", "25").toString(); QString ctype = global.settings->value("smtpConnectionType", "TcpConnection").toString(); QString u = global.settings->value("userid", "").toString(); QString pswd = global.settings->value("password", "").toString(); QString senderE = global.settings->value("senderEmail", "").toString(); QString senderN = global.settings->value("senderName", "").toString(); global.settings->endGroup(); int index = smtpConnectionType.findData(ctype); smtpConnectionType.setCurrentIndex(index); smtpServer.setText(s); smtpPort.setText(p); userid.setText(u); password.setText(pswd); senderEmail.setText(senderE); senderName.setText(senderN); } void EmailPreferences::saveValues() { int index = smtpConnectionType.currentIndex(); QString ctype = smtpConnectionType.itemData(index).toString(); global.settings->beginGroup("Email"); global.settings->setValue("smtpServer", smtpServer.text().trimmed()); global.settings->setValue("smtpPort", smtpPort.text().trimmed()); global.settings->setValue("smtpConnectionType", ctype); global.settings->setValue("userid", userid.text().trimmed()); global.settings->setValue("password", password.text().trimmed()); global.settings->setValue("senderEmail", senderEmail.text().trimmed()); global.settings->setValue("senderName", senderName.text().trimmed()); global.settings->endGroup(); } void EmailPreferences::sendTestEmail() { QString server = this->smtpServer.text().trimmed(); int port = this->smtpPort.text().trimmed().toInt(); int index = this->smtpConnectionType.currentIndex(); QString smtpConnectionType = this->smtpConnectionType.itemData(index).toString(); QString userid = this->userid.text().trimmed(); QString password = this->password.text().trimmed(); QString senderEmail = this->senderEmail.text().trimmed(); QString senderName = this->senderName.text().trimmed(); if (server == "") { QMessageBox::critical(this, tr("Setup Error"), tr("You must specify a SMTP server."), QMessageBox::Ok); return; } if (senderEmail == "") { QMessageBox::critical(this, tr("Setup Error"), tr("You must specify a sender email."), QMessageBox::Ok); return; } SmtpClient::ConnectionType type = SmtpClient::TcpConnection; if (smtpConnectionType == "SslConnection") type = SmtpClient::SslConnection; if (smtpConnectionType == "TlsConnection") type = SmtpClient::TlsConnection; SmtpClient smtp(server, port, type); smtp.setResponseTimeout(-1); // We need to set the username (your email address) and password // for smtp authentication. smtp.setUser(userid); smtp.setPassword(password); // Now we create a MimeMessage object. This is the email. MimeMessage message; EmailAddress sender(senderEmail, senderName); message.setSender(&sender); if (senderName == "") senderName = senderEmail; EmailAddress *to = new EmailAddress(senderEmail, senderName); message.addRecipient(to); // Set the subject message.setSubject(tr("Test Email From NixNote")); // Set the note text MimeHtml html; // html.setHtml(QString(tr("

This is a test email from NixNote.

"))+ // QString(tr("If you are reading it then your email preferences are are setup properly.
"))); QString msg = QString(tr("

This is a test email from NixNote.

")); msg = msg + QString(tr("If you are reading it then your email preferences are are setup properly.")); html.setHtml(msg); // QFile *logo = new QFile(global.fileManager.getProgramDirPath("")+"splash_logo.png"); // MimeInlineFile image1(logo); // image1.setContentType("image/png"); // image1.setContentId("image1"); // message.addPart(&html); // message.addPart(&image1); message.setContent(&html); // Send the actual message. if (!smtp.connectToHost()) { QLOG_ERROR()<< "Failed to connect to host!"; QMessageBox::critical(this, tr("Connection Error"), tr("Unable to connect to host."), QMessageBox::Ok); return; } if (!smtp.login()) { QLOG_ERROR() << "Failed to login!"; QMessageBox::critical(this, tr("Login Error"), tr("Unable to login."), QMessageBox::Ok); return; } if (!smtp.sendMail(message)) { QMessageBox::critical(this, tr("Send Error"), tr("Unable to send email."), QMessageBox::Ok); QLOG_ERROR() << "Failed to send mail!"; QLOG_ERROR() << smtp.getResponseText(); return; } smtp.quit(); QMessageBox::information(this, tr("Message Sent"), tr("Message sent."), QMessageBox::Ok); } nixnote2-2.0.2/dialog/preferences/emailpreferences.h000066400000000000000000000014661315604104400225100ustar00rootroot00000000000000#ifndef EMAILPREFERENCES_H #define EMAILPREFERENCES_H #include #include #include #include #include #include class EmailPreferences : public QWidget { Q_OBJECT private: QLabel smtpServerLabel; QLabel smtpPortLabel; QLabel smtpConnectionTypeLabel; QLabel useridLabel; QLabel passwordLabel; QLabel senderEmailLabel; QLabel senderNameLabel; QLineEdit smtpServer; QLineEdit smtpPort; QComboBox smtpConnectionType; QLineEdit userid; QLineEdit password; QLineEdit senderEmail; QLineEdit senderName; QPushButton *testEmail; public: explicit EmailPreferences(QWidget *parent = 0); void saveValues(); signals: public slots: void sendTestEmail(); }; #endif // EMAILPREFERENCES_H nixnote2-2.0.2/dialog/preferences/exitpreferences.cpp000066400000000000000000000207001315604104400227150ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2017 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include #include #include "exitpreferences.h" #include "global.h" extern Global global; ExitPreferences::ExitPreferences(QWidget *parent) : QWidget(parent) { this->setFont(global.getGuiFont(font())); loadExitFile = new QLineEdit(); loadExitButton = new QPushButton(); loadExitButton->setText("..."); loadExitFileLabel = new QLabel(); loadExitFileLabel->setText(tr("Note Load Exit")); connect(loadExitButton, SIGNAL(clicked(bool)), this, SLOT(loadExitButtonPressed(bool))); loadExitEnabledCombo = new QComboBox(); loadExitEnabledCombo->addItem(tr("Enabled"), true); loadExitEnabledCombo->addItem(tr("Disabled"), false); saveExitFile = new QLineEdit(); saveExitButton = new QPushButton(); saveExitButton->setText("..."); saveExitFileLabel = new QLabel(); saveExitFileLabel->setText(tr("Note Save Exit")); connect(saveExitButton, SIGNAL(clicked(bool)), this, SLOT(saveExitButtonPressed(bool))); saveExitEnabledCombo = new QComboBox(); saveExitEnabledCombo->addItem(tr("Enabled"), true); saveExitEnabledCombo->addItem(tr("Disabled"), false); importKeepFile = new QLineEdit(); importKeepButton = new QPushButton(); importKeepButton->setText("..."); importKeepFileLabel = new QLabel(); importKeepFileLabel->setText(tr("Import Keep Exit")); connect(importKeepButton, SIGNAL(clicked(bool)), this, SLOT(importKeepExitButtonPressed(bool))); importKeepEnabledCombo = new QComboBox(); importKeepEnabledCombo->addItem(tr("Enabled"), true); importKeepEnabledCombo->addItem(tr("Disabled"), false); importDeleteFile = new QLineEdit(); importDeleteButton = new QPushButton(); importDeleteButton->setText("..."); importDeleteFileLabel = new QLabel(); importDeleteFileLabel->setText(tr("Import Delete Exit")); connect(importDeleteButton, SIGNAL(clicked(bool)), this, SLOT(importDeleteExitButtonPressed(bool))); importDeleteEnabledCombo = new QComboBox(); importDeleteEnabledCombo->addItem(tr("Enabled"), true); importDeleteEnabledCombo->addItem(tr("Disabled"), false); QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); QGridLayout *loadLayout = new QGridLayout(); int row=0; mainLayout->addLayout(loadLayout); loadLayout->addWidget(loadExitFileLabel, row,0); loadLayout->addWidget(loadExitFile, row,1); loadLayout->addWidget(loadExitButton, row,2); loadLayout->addWidget(loadExitEnabledCombo, row++,3); // QFrame *hFrame = new QFrame(); // hFrame->setFrameShape(QFrame::HLine); // mainLayout->addWidget(hFrame); // mainLayout->addSpacerItem(new QSpacerItem(30,30)); QGridLayout *saveLayout = new QGridLayout(); mainLayout->addLayout(saveLayout); saveLayout->addWidget(saveExitFileLabel, row,0); saveLayout->addWidget(saveExitFile, row,1); saveLayout->addWidget(saveExitButton, row,2); saveLayout->addWidget(saveExitEnabledCombo, row++,3); QGridLayout *importKeepLayout = new QGridLayout(); mainLayout->addLayout(importKeepLayout); saveLayout->addWidget(importKeepFileLabel, row,0); saveLayout->addWidget(importKeepFile, row,1); saveLayout->addWidget(importKeepButton, row,2); saveLayout->addWidget(importKeepEnabledCombo, row++,3); QGridLayout *importDeleteLayout = new QGridLayout(); mainLayout->addLayout(importDeleteLayout); saveLayout->addWidget(importDeleteFileLabel, row,0); saveLayout->addWidget(importDeleteFile, row,1); saveLayout->addWidget(importDeleteButton, row,2); saveLayout->addWidget(importDeleteEnabledCombo, row++,3); loadValues(); } void ExitPreferences::loadExitButtonPressed(bool value) { Q_UNUSED(value); QFileDialog f; loadExitFile->setText(f.getOpenFileName(this, tr("Select Exit File"))); } void ExitPreferences::saveExitButtonPressed(bool value) { Q_UNUSED(value); QFileDialog f; saveExitFile->setText(f.getOpenFileName(this, tr("Select Exit File"))); } void ExitPreferences::importDeleteExitButtonPressed(bool value) { Q_UNUSED(value); QFileDialog f; importDeleteFile->setText(f.getOpenFileName(this, tr("Select Exit File"))); } void ExitPreferences::importKeepExitButtonPressed(bool value) { Q_UNUSED(value); QFileDialog f; importKeepFile->setText(f.getOpenFileName(this, tr("Select Exit File"))); } void ExitPreferences::saveValues() { global.settings->beginGroup("ExitPoint_LoadNote"); int idx = loadExitEnabledCombo->currentIndex(); if (idx == 0) global.settings->setValue("enabled", true); else global.settings->setValue("enabled", false); global.settings->setValue("script", loadExitFile->text()); global.settings->setValue("version", "1"); global.settings->endGroup(); global.settings->beginGroup("ExitPoint_SaveNote"); idx = saveExitEnabledCombo->currentIndex(); if (idx == 0) global.settings->setValue("enabled", true); else global.settings->setValue("enabled", false); global.settings->setValue("script", saveExitFile->text()); global.settings->setValue("version", "1"); global.settings->endGroup(); global.settings->beginGroup("ExitPoint_ImportDelete"); idx = importDeleteEnabledCombo->currentIndex(); if (idx == 0) global.settings->setValue("enabled", true); else global.settings->setValue("enabled", false); global.settings->setValue("script", importDeleteFile->text()); global.settings->setValue("version", "1"); global.settings->endGroup(); global.settings->beginGroup("ExitPoint_ImportKeep"); idx = importKeepEnabledCombo->currentIndex(); if (idx == 0) global.settings->setValue("enabled", true); else global.settings->setValue("enabled", false); global.settings->setValue("script", importKeepFile->text()); global.settings->setValue("version", "1"); global.settings->endGroup(); // Reload exits global.exitManager->loadExits(); } void ExitPreferences::loadValues() { QString file=""; bool enabled = false; global.settings->beginGroup("ExitPoint_LoadNote"); enabled = global.settings->value("enabled", false).toBool(); file = global.settings->value("script", "").toString(); if (enabled) loadExitEnabledCombo->setCurrentIndex(0); else loadExitEnabledCombo->setCurrentIndex(1); loadExitFile->setText(file); global.settings->endGroup(); global.settings->beginGroup("ExitPoint_SaveNote"); enabled = global.settings->value("enabled", false).toBool(); file = global.settings->value("script", "").toString(); if (enabled) saveExitEnabledCombo->setCurrentIndex(0); else saveExitEnabledCombo->setCurrentIndex(1); saveExitFile->setText(file); global.settings->endGroup(); global.settings->beginGroup("ExitPoint_ImportDelete"); enabled = global.settings->value("enabled", false).toBool(); file = global.settings->value("script", "").toString(); if (enabled) importDeleteEnabledCombo->setCurrentIndex(0); else importDeleteEnabledCombo->setCurrentIndex(1); importDeleteFile->setText(file); global.settings->endGroup(); global.settings->beginGroup("ExitPoint_ImportKeep"); enabled = global.settings->value("enabled", false).toBool(); file = global.settings->value("script", "").toString(); if (enabled) importKeepEnabledCombo->setCurrentIndex(0); else importKeepEnabledCombo->setCurrentIndex(1); importKeepFile->setText(file); global.settings->endGroup(); } nixnote2-2.0.2/dialog/preferences/exitpreferences.h000066400000000000000000000042361315604104400223700ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2017 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef EXITPREFERENCES_H #define EXITPREFERENCES_H #include #include #include #include #include #include #include #include #include class ExitPreferences : public QWidget { Q_OBJECT private: QLineEdit *loadExitFile; QPushButton *loadExitButton; QLabel *loadExitFileLabel; QComboBox *loadExitEnabledCombo; QLabel *loadExitEnabledLabel; QLabel *saveExitFileLabel; QLineEdit *saveExitFile; QPushButton *saveExitButton; QComboBox *saveExitEnabledCombo; QLabel *importDeleteFileLabel; QLineEdit *importDeleteFile; QPushButton *importDeleteButton; QComboBox *importDeleteEnabledCombo; QLabel *importKeepFileLabel; QLineEdit *importKeepFile; QPushButton *importKeepButton; QComboBox *importKeepEnabledCombo; public: explicit ExitPreferences(QWidget *parent = 0); void saveValues(); void loadValues(); signals: public slots: void loadExitButtonPressed(bool); void saveExitButtonPressed(bool); void importDeleteExitButtonPressed(bool); void importKeepExitButtonPressed(bool); }; #endif // EXITPREFERENCES_H nixnote2-2.0.2/dialog/preferences/localepreferences.cpp000066400000000000000000000135571315604104400232170ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "localepreferences.h" #include "global.h" #include extern Global global; LocalePreferences::LocalePreferences(QWidget *parent) : QWidget(parent) { mainLayout = new QGridLayout(this); mainLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); setLayout(mainLayout); QDate date = QDate::currentDate(); QTime time = QTime::currentTime(); dateFormatLabel = new QLabel(tr("Date Format"), this); dateFormatLabel->setAlignment(Qt::AlignRight | Qt::AlignCenter); dateFormat = new QComboBox(this); dateFormat->addItem(tr("MM/dd/yy - ") + date.toString("MM/dd/yy"), MMddyy); dateFormat->addItem(tr("MM/dd/yyyy - ")+ date.toString("MM/dd/yyyy"), MMddyyyy); dateFormat->addItem(tr("M/dd/yyyy - ")+ date.toString("M/dd/yyyy"), Mddyyyy); dateFormat->addItem(tr("M/d/yyyy - ")+ date.toString("M/d/yyyy"), Mdyyyy); dateFormat->addItem(tr("dd/MM/yy - ")+ date.toString("dd/MM/yy"), ddMMyy); dateFormat->addItem(tr("d/M/yy - ")+ date.toString("d/M/yy"), dMyy); dateFormat->addItem(tr("dd/MM/yyyy - ")+ date.toString("dd/MM/yyyy"), ddMMyyyy); dateFormat->addItem(tr("d/M/yyyy - ")+ date.toString("d/M/yyyy"), dMyyyy); dateFormat->addItem(tr("yyyy-MM-dd - ")+ date.toString("yyyy-MM-dd"), yyyyMMdd); dateFormat->addItem(tr("yy-MM-dd - ")+ date.toString("yy-MM-dd"), yyyyMMdd); timeFormatLabel = new QLabel(tr("Time Format"), this); timeFormatLabel->setAlignment(Qt::AlignRight | Qt::AlignCenter); timeFormat = new QComboBox(this); timeFormat->addItem(tr("HH:mm:ss - ")+time.toString("HH:mm:ss"), HHmmss); timeFormat->addItem(tr("HH:mm:ss a - ")+time.toString("HH:mm:ss a"), HHmmssa); timeFormat->addItem(tr("HH:mm - ")+time.toString("HH:mm"), HHmm); timeFormat->addItem(tr("HH:mm a - ")+time.toString("HH:mm a"), HHmma); timeFormat->addItem(tr("hh:mm:ss - ")+time.toString("hh:mm:ss"), hhmmss); timeFormat->addItem(tr("hh:mm:ss a- ")+time.toString("hh:mm:ss a"), hhmmssa); timeFormat->addItem(tr("h:mm:ss a - ")+time.toString("h:mm:ss a"), hmmssa); timeFormat->addItem(tr("hh:mm - ")+time.toString("HH:mm"), hhmm); timeFormat->addItem(tr("hh:mm a - ")+time.toString("hh:mm a"), hhmma); timeFormat->addItem(tr("h:mm a - ")+time.toString("h:mm a"), hmma); mainLayout->addWidget(dateFormatLabel,0,0); mainLayout->addWidget(dateFormat,0,1); mainLayout->addWidget(timeFormatLabel,1,0); mainLayout->addWidget(timeFormat, 1,1); global.settings->beginGroup("Locale"); int datei = global.settings->value("dateFormat", MMddyy).toInt(); int timei = global.settings->value("timeFormat", HHmmss).toInt(); global.settings->endGroup(); int index = dateFormat->findData(datei); dateFormat->setCurrentIndex(index); index = timeFormat->findData(timei); timeFormat->setCurrentIndex(index); this->setFont(global.getGuiFont(font())); } LocalePreferences::~LocalePreferences() { // delete dateFormat; // delete dateFormatLabel; // delete timeFormat; // delete timeFormatLabel; // delete mainLayout; } void LocalePreferences::saveValues() { int date = getDateFormat(); int time = getTimeFormat(); global.settings->beginGroup("Locale"); global.settings->setValue("dateFormat", date); global.settings->setValue("timeFormat", time); global.settings->endGroup(); datefmt = "MM/dd/yy"; switch (date) { case MMddyy: datefmt = "MM/dd/yy"; break; case MMddyyyy: datefmt = "MM/dd/yyyy"; break; case Mddyyyy: datefmt = "M/dd/yyyy"; break; case Mdyyyy: datefmt = "M/d/yyyy"; break; case ddMMyy: datefmt = "dd/MM/yy"; break; case dMyy: datefmt = "d/M/yy"; break; case ddMMyyyy: datefmt = "dd/MM/yyyy"; break; case dMyyyy: datefmt = "d/M/yyyy"; break; case yyyyMMdd: datefmt = "yyyy-MM-dd"; break; case yyMMdd: datefmt = "yy-MM-dd"; break; } timefmt = "HH:mm:ss"; switch (time) { case HHmmss: timefmt = "HH:mm:ss"; break; case HHmmssa: timefmt = "HH:MM:SS a"; break; case HHmm: timefmt = "HH:mm"; break; case HHmma: timefmt = "HH:mm a"; break; case hhmmss: timefmt = "hh:mm:ss"; break; case hhmmssa: timefmt = "hh:mm:ss a"; break; case hhmm: timefmt = "hh:mm"; break; case hhmma: timefmt = "hh:mm a"; break; case hmma: timefmt = "h:mm a"; break; case hmmssa: timefmt = "h:mm:ss a"; break; } global.dateFormat = datefmt; global.timeFormat = timefmt; } int LocalePreferences::getDateFormat() { int index = dateFormat->currentIndex(); return dateFormat->itemData(index).toInt(); } int LocalePreferences::getTimeFormat() { int index = timeFormat->currentIndex(); return timeFormat->itemData(index).toInt(); } nixnote2-2.0.2/dialog/preferences/localepreferences.h000066400000000000000000000037401315604104400226550ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef LOCALEPREFERENCES_H #define LOCALEPREFERENCES_H #include #include #include #include class LocalePreferences : public QWidget { Q_OBJECT private: QGridLayout *mainLayout; QLabel *dateFormatLabel; QComboBox *dateFormat; QLabel *timeFormatLabel; QComboBox *timeFormat; int getDateFormat(); int getTimeFormat(); enum DateFormat { MMddyy = 1, MMddyyyy = 2, Mddyyyy = 3, Mdyyyy = 4, ddMMyy = 5, dMyy = 6, ddMMyyyy = 7, dMyyyy = 8, yyyyMMdd = 9, yyMMdd = 10 }; enum TimeFormat { HHmmss = 1, HHmmssa = 2, HHmm = 3, HHmma = 4, hhmmss = 5, hhmmssa = 6, hmmssa = 7, hhmm = 8, hhmma = 9, hmma = 10 }; public: explicit LocalePreferences(QWidget *parent = 0); ~LocalePreferences(); void saveValues(); QString datefmt; QString timefmt; signals: public slots: }; #endif // LOCALEPREFERENCES_H nixnote2-2.0.2/dialog/preferences/preferencesdialog.cpp000066400000000000000000000107601315604104400232100ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "global.h" #include "preferencesdialog.h" #include extern Global global; PreferencesDialog::PreferencesDialog(QWidget *parent) : QDialog(parent) { okButtonPressed = false; setWindowTitle(tr("User Settings")); mainLayout = new QVBoxLayout(); setLayout(mainLayout); QScrollArea *scrollArea = new QScrollArea(this); scrollArea->setWidgetResizable(true); tabs = new QTabWidget(this); scrollArea->setWidget(tabs); mainLayout->addWidget(scrollArea); this->setFont(global.getGuiFont(font())); this->setupAppearancePanel(); this->setupLocalePanel(); this->setupSyncPanel(); this->setupSearchPanel(); this->setupEmailPanel(); this->setupThumbnailPanel(); this->setupExitPanel(); this->setupDebugPanel(); cancelButton = new QPushButton(tr("Cancel"), this); okButton = new QPushButton(tr("OK"), this); connect(okButton, SIGNAL(clicked()), this, SLOT(okButtonClicked())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancelButtonClicked())); QSpacerItem *spacer1 = new QSpacerItem(0,0,QSizePolicy::MinimumExpanding); QSpacerItem *spacer2 = new QSpacerItem(0,0,QSizePolicy::MinimumExpanding); buttonLayout = new QHBoxLayout(); buttonLayout->addSpacerItem(spacer1); buttonLayout->addWidget(okButton); buttonLayout->addWidget(cancelButton); buttonLayout->addSpacerItem(spacer2); buttonLayout->setStretch(0,100); buttonLayout->setStretch(3,100); mainLayout->addLayout(buttonLayout); this->resize(this->size().width()*1.2, this->size().height()*1.2); connect(appearancePanel->showTrayIcon, SIGNAL(clicked(bool)), syncPanel->enableSyncNotifications, SLOT(setEnabled(bool))); syncPanel->enableSyncNotifications->setEnabled(appearancePanel->showTrayIcon->isChecked()); } PreferencesDialog::~PreferencesDialog() { delete okButton; delete cancelButton; delete buttonLayout; delete syncPanel; delete emailPanel; delete debugPanel; delete appearancePanel; delete tabs; delete mainLayout; } void PreferencesDialog::setupAppearancePanel() { appearancePanel = new AppearancePreferences(); tabs->addTab(appearancePanel, tr("Appearance")); } void PreferencesDialog::setupLocalePanel() { localePanel = new LocalePreferences(this); tabs->addTab(localePanel, tr("Locale")); } void PreferencesDialog::setupSearchPanel() { searchPanel = new SearchPreferences(); tabs->addTab(searchPanel, tr("Search")); } void PreferencesDialog::setupSyncPanel() { syncPanel = new SyncPreferences(this); tabs->addTab(syncPanel, tr("Sync")); } void PreferencesDialog::setupEmailPanel() { emailPanel = new EmailPreferences(this); tabs->addTab(emailPanel, tr("Email")); } void PreferencesDialog::setupThumbnailPanel() { thumbnailPanel = new ThumbnailPreferences(this); tabs->addTab(thumbnailPanel, tr("Thumbnail")); } void PreferencesDialog::setupExitPanel() { exitPanel = new ExitPreferences(this); tabs->addTab(exitPanel, tr("Exits")); } void PreferencesDialog::setupDebugPanel() { debugPanel = new DebugPreferences(this); tabs->addTab(debugPanel, tr("Advanced")); } void PreferencesDialog::cancelButtonClicked() { this->close(); } void PreferencesDialog::okButtonClicked() { okButtonPressed = true; appearancePanel->saveValues(); localePanel->saveValues(); debugPanel->saveValues(); syncPanel->saveValues(); emailPanel->saveValues(); searchPanel->saveValues(); thumbnailPanel->saveValues(); exitPanel->saveValues(); this->close(); } nixnote2-2.0.2/dialog/preferences/preferencesdialog.h000066400000000000000000000047431315604104400226610ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef PREFERENCESDIALOG_H #define PREFERENCESDIALOG_H #include #include #include #include #include #include #include "dialog/preferences/debugpreferences.h" #include "dialog/preferences/syncpreferences.h" #include "dialog/preferences/appearancepreferences.h" #include "dialog/preferences/searchpreferences.h" #include "dialog/preferences/localepreferences.h" #include "dialog/preferences/emailpreferences.h" #include "dialog/preferences/thumbnailpreferences.h" #include "dialog/preferences/exitpreferences.h" class PreferencesDialog : public QDialog { Q_OBJECT private: QTabWidget *tabs; QVBoxLayout *mainLayout; QHBoxLayout *buttonLayout; void setupDebugPanel(); void setupSyncPanel(); void setupAppearancePanel(); void setupLocalePanel(); void setupSearchPanel(); void setupEmailPanel(); void setupThumbnailPanel(); void setupExitPanel(); DebugPreferences *debugPanel; EmailPreferences *emailPanel; SyncPreferences *syncPanel; SearchPreferences *searchPanel; LocalePreferences *localePanel; ThumbnailPreferences *thumbnailPanel; AppearancePreferences *appearancePanel; ExitPreferences *exitPanel; QPushButton *okButton; QPushButton *cancelButton; public: explicit PreferencesDialog(QWidget *parent = 0); ~PreferencesDialog(); bool okButtonPressed; signals: public slots: private slots: void cancelButtonClicked(); void okButtonClicked(); }; #endif // PREFERENCESDIALOG_H nixnote2-2.0.2/dialog/preferences/searchpreferences.cpp000066400000000000000000000100141315604104400232060ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "searchpreferences.h" #include "global.h" #include #include #include extern Global global; SearchPreferences::SearchPreferences(QWidget *parent) : QWidget(parent) { QGridLayout *mainLayout = new QGridLayout(this); setLayout(mainLayout); int row=0; syncAttachments = new QCheckBox(tr("Index Attachments")); mainLayout->addWidget(syncAttachments,row++,0); syncAttachments->setChecked(global.synchronizeAttachments()); // Disabled for performance reasons syncAttachments->setChecked(false); syncAttachments->setVisible(false); clearNotebookOnSearch = new QCheckBox(tr("Clear Notebook Selection on Search Text Changes")); mainLayout->addWidget(clearNotebookOnSearch,row++,0); clearNotebookOnSearch->setChecked(global.getClearNotebookOnSearch()); clearTagsOnSearch = new QCheckBox(tr("Clear Tag Selection on Search Text Changes")); mainLayout->addWidget(clearTagsOnSearch,row++,0); clearTagsOnSearch->setChecked(global.getClearTagsOnSearch()); clearSearchOnNotebook = new QCheckBox(tr("Clear Search Text on Notebook Changes")); mainLayout->addWidget(clearSearchOnNotebook,row++,0); clearSearchOnNotebook->setChecked(global.getClearSearchOnNotebook()); tagSelectionOr = new QCheckBox(tr("Show Any Matching Tags When Selecting Multiple Tags")); mainLayout->addWidget(tagSelectionOr,row++,0); tagSelectionOr->setChecked(global.indexPDFLocally); indexPDF = new QCheckBox(tr("Index PDFs locally")); mainLayout->addWidget(indexPDF,row++,0); indexPDF->setChecked(global.indexPDFLocally); enableBackgroundIndexing = new QCheckBox(tr("Background Indexing (requires restart & may cause issues on some systems)")); mainLayout->addWidget(enableBackgroundIndexing,row++,0); enableBackgroundIndexing->setChecked(global.getBackgroundIndexing()); forceLowerCase = new QCheckBox(tr("Experimental: Force search to lower case")); mainLayout->addWidget(forceLowerCase,row++,0); forceLowerCase->setChecked(global.forceSearchLowerCase); weight = new QSpinBox(this); mainLayout->addWidget(new QLabel(tr("Minimum Image Recognition Weight")), row,0); mainLayout->addWidget(weight,row++,1); weight->setMinimum(1); weight->setMaximum(100); weight->setValue(global.getMinimumRecognitionWeight()); this->setFont(global.getGuiFont(font())); mainLayout->setAlignment(Qt::AlignTop); } void SearchPreferences::saveValues() { global.setMinimumRecognitionWeight(weight->value()); //global.setSynchronizeAttachments(syncAttachments->isChecked()); global.setClearNotebookOnSearch(clearNotebookOnSearch->isChecked()); global.setClearTagsOnSearch(clearNotebookOnSearch->isChecked()); global.setClearSearchOnNotebook(clearSearchOnNotebook->isChecked()); global.setTagSelectionOr(tagSelectionOr->isChecked()); global.setIndexPDFLocally(indexPDF->isChecked()); global.setForceSearchLowerCase(forceLowerCase->isChecked()); global.forceSearchLowerCase=forceLowerCase->isChecked(); global.setBackgroundIndexing(enableBackgroundIndexing->isChecked()); } nixnote2-2.0.2/dialog/preferences/searchpreferences.h000066400000000000000000000037141315604104400226640ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef SEARCHPREFERENCES_H #define SEARCHPREFERENCES_H #include #include #include class SearchPreferences : public QWidget { Q_OBJECT private: QSpinBox *weight; QCheckBox *syncAttachments; // Disabled for performance reasons QCheckBox *indexPDF; // Index PDFs locally? QCheckBox *clearSearchOnNotebook; // Clear search text when notebook changes? QCheckBox *clearNotebookOnSearch; // Clear notebook on search text changes QCheckBox *clearTagsOnSearch; // Clear tag selection on search text changes QCheckBox *tagSelectionOr; // "OR" tag selections. QCheckBox *forceLowerCase; // Force notes search text to be lower case. Useful for some non-ASCII languages. QCheckBox *enableBackgroundIndexing; // Do indexing in the background by default. public: explicit SearchPreferences(QWidget *parent = 0); QString getMinimumSearchWeight(); void saveValues(); signals: public slots: }; #endif // SEARCHPREFERENCES_H nixnote2-2.0.2/dialog/preferences/syncpreferences.cpp000066400000000000000000000170331315604104400227250ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "syncpreferences.h" #include "global.h" #include extern Global global; SyncPreferences::SyncPreferences(QWidget *parent) : QWidget(parent) { this->setFont(global.getGuiFont(font())); QGridLayout *mainLayout = new QGridLayout(this); setLayout(mainLayout); syncAutomatically = new QCheckBox(tr("Sync automatically"), this); syncAutomatically->setChecked(true); syncInterval = new QComboBox(this); syncInterval->addItem(tr("Every 15 minutes"), 15); syncInterval->addItem(tr("Every 30 minutes"), 30); syncInterval->addItem(tr("Every hour"), 60); syncInterval->addItem(tr("Every day"), 1440); syncOnStartup = new QCheckBox(tr("Sync on startup"), this); //syncOnStartup->setEnabled(false); syncOnShutdown = new QCheckBox(tr("Sync on shutdown"),this); //syncOnShutdown->setEnabled(false); enableSyncNotifications = new QCheckBox(tr("Enable sync notifications"), this); showGoodSyncMessagesInTray = new QCheckBox(tr("Show successful syncs"), this); apiRateRestart = new QCheckBox(tr("Restart sync on API limit (experimental)"), this); enableProxy = new QCheckBox(tr("Enable Proxy*"), this); enableSocks5 = new QCheckBox(tr("Enable Socks5"),this); QLabel *hostLabel = new QLabel(tr("Proxy Hostname"), this); QLabel *portLabel = new QLabel(tr("Proxy Port"), this); QLabel *userLabel = new QLabel(tr("Proxy Username"), this); QLabel *passwordLabel = new QLabel(tr("Proxy Password"),this); QLabel *restartLabel = new QLabel(tr("*Note: Restart required"),this); host = new QLineEdit(this); port = new QLineEdit(this); userId = new QLineEdit(this); password = new QLineEdit(this); enableProxy->setChecked(global.isProxyEnabled()); enableSocks5->setChecked(global.isSocks5Enabled()); host->setText(global.getProxyHost()); port->setText(QString::number(global.getProxyPort())); port->setInputMask("00000"); userId->setText(global.getProxyUserid()); password->setText(global.getProxyPassword()); password->setEchoMode(QLineEdit::Password); popupOnSyncError = new QCheckBox(tr("Popup message on sync errors."),0); popupOnSyncError->setChecked(global.popupOnSyncError()); mainLayout->addWidget(enableSyncNotifications,0,0); mainLayout->addWidget(showGoodSyncMessagesInTray, 0,1); mainLayout->addWidget(syncOnStartup,1,0); mainLayout->addWidget(popupOnSyncError, 1,1); mainLayout->addWidget(syncOnShutdown,2,0); mainLayout->addWidget(syncAutomatically,3,0); mainLayout->addWidget(syncInterval, 3,1); mainLayout->addWidget(apiRateRestart, 4,0); mainLayout->addWidget(enableProxy,5,0); mainLayout->addWidget(enableSocks5,5,1); mainLayout->addWidget(hostLabel,6,0); mainLayout->addWidget(host, 6,1); mainLayout->addWidget(portLabel,7,0); mainLayout->addWidget(port,7,1); mainLayout->addWidget(userLabel, 8,0); mainLayout->addWidget(userId,8,1); mainLayout->addWidget(passwordLabel,9,0); mainLayout->addWidget(password,9,1); mainLayout->addWidget(restartLabel,10,0); mainLayout->setAlignment(Qt::AlignTop); global.settings->beginGroup("Sync"); int interval = global.settings->value("syncInterval", 15).toInt(); int index = syncInterval->findData(interval); syncInterval->setCurrentIndex(index); syncAutomatically->setChecked(global.settings->value("syncAutomatically", false).toBool()); syncOnShutdown->setChecked(global.settings->value("syncOnShutdown", false).toBool()); syncOnStartup->setChecked(global.settings->value("syncOnStartup", false).toBool()); enableSyncNotifications->setChecked(global.settings->value("enableNotification", true).toBool()); showGoodSyncMessagesInTray->setChecked(global.showGoodSyncMessagesInTray); apiRateRestart->setChecked(global.settings->value("apiRateLimitAutoRestart", false).toBool()); global.settings->endGroup(); global.showGoodSyncMessagesInTray = showGoodSyncMessagesInTray->isChecked(); if (enableSyncNotifications->isChecked()) showGoodSyncMessagesInTray->setEnabled(true); else showGoodSyncMessagesInTray->setEnabled(false); connect(syncAutomatically, SIGNAL(stateChanged(int)), this, SLOT(enableSyncStateChange())); connect(enableSyncNotifications, SIGNAL(toggled(bool)), this, SLOT(enableSuccessfulSyncMessagesInTray())); connect(enableProxy, SIGNAL(stateChanged(int)), this, SLOT(proxyCheckboxAltered(int))); if (!global.isProxyEnabled()) { proxyCheckboxAltered(Qt::Unchecked); } } SyncPreferences::~SyncPreferences() { delete syncInterval; delete syncOnShutdown; delete syncOnStartup; delete syncAutomatically; } void SyncPreferences::enableSyncStateChange() { if (syncAutomatically->isChecked()) syncInterval->setEnabled(true); else syncInterval->setEnabled(false); } void SyncPreferences::enableSuccessfulSyncMessagesInTray() { if (this->enableSyncNotifications->isChecked()) this->showGoodSyncMessagesInTray->setEnabled(true); else this->showGoodSyncMessagesInTray->setEnabled(false); } int SyncPreferences::getSyncInterval() { int index = syncInterval->currentIndex(); return syncInterval->itemData(index).toInt(); } void SyncPreferences::saveValues() { global.settings->beginGroup("Sync"); global.settings->setValue("syncAutomatically", syncAutomatically->isChecked()); global.settings->setValue("syncOnShutdown", syncOnShutdown->isChecked()); global.settings->setValue("syncOnStartup", syncOnStartup->isChecked()); global.settings->setValue("enableNotification", enableSyncNotifications->isChecked()); global.settings->setValue("syncInterval", getSyncInterval()); global.settings->setValue("showGoodSyncMessagesInTray", showGoodSyncMessagesInTray ->isChecked()); global.settings->setValue("apiRateLimitAutoRestart", apiRateRestart ->isChecked()); global.settings->endGroup(); global.showGoodSyncMessagesInTray = showGoodSyncMessagesInTray->isChecked(); global.setProxyEnabled(enableProxy->isChecked()); global.setSocks5Enabled(enableSocks5->isChecked()); global.setProxyHost(host->text().trimmed()); global.setProxyPort(port->text().toInt()); global.setProxyUserid(userId->text().trimmed()); global.setProxyPassword(password->text().trimmed()); global.setPopupOnSyncError(this->popupOnSyncError->isChecked()); } void SyncPreferences::proxyCheckboxAltered(int state) { bool value = false; if (state == Qt::Checked) value = true; enableSocks5->setEnabled(value); host->setEnabled(value); port->setEnabled(value); userId->setEnabled(value); password->setEnabled(value); } nixnote2-2.0.2/dialog/preferences/syncpreferences.h000066400000000000000000000036711315604104400223750ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef SYNCPREFERENCES_H #define SYNCPREFERENCES_H #include #include #include #include #include #include class SyncPreferences : public QWidget { Q_OBJECT private: QGridLayout *mainLayout; QComboBox *syncInterval; QCheckBox *syncOnStartup; QCheckBox *syncAutomatically; QCheckBox *syncOnShutdown; QCheckBox *apiRateRestart; QCheckBox *popupOnSyncError; QCheckBox *enableProxy; QCheckBox *enableSocks5; QLineEdit *userId; QLineEdit *password; QLineEdit *port; QLineEdit *host; int getSyncInterval(); public: explicit SyncPreferences(QWidget *parent = 0); ~SyncPreferences(); void saveValues(); QCheckBox *enableSyncNotifications; QCheckBox *showGoodSyncMessagesInTray; signals: public slots: private slots: void enableSyncStateChange(); void enableSuccessfulSyncMessagesInTray(); void proxyCheckboxAltered(int state); }; #endif // SYNCPREFERENCES_H nixnote2-2.0.2/dialog/preferences/thumbnailpreferences.cpp000066400000000000000000000050171315604104400237330ustar00rootroot00000000000000#include "thumbnailpreferences.h" #include "global.h" extern Global global; ThumbnailPreferences::ThumbnailPreferences(QWidget *parent) : QWidget(parent) { minTime = new QSpinBox(); maxTime = new QSpinBox(); disableThumbnail = new QCheckBox(); count = new QSpinBox(); disableLabel = new QLabel(tr("Disable thumbnail generation")); countLabel = new QLabel(tr("Images to generate per interval")); minTimeLabel = new QLabel(tr("Minimum scan interval (in seconds)")); maxTimeLabel = new QLabel(tr("Maximum scan interval (in seconds)")); minTime->setMinimum(1); minTime->setMaximum(15); maxTime->setMinimum(16); maxTime->setMaximum(1200); count->setMinimum(1); count->setMaximum(99999); mainLayout = new QGridLayout(this); mainLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); setLayout(mainLayout); mainLayout->addWidget(disableLabel, 0,0); mainLayout->addWidget(disableThumbnail, 0,1); mainLayout->addWidget(countLabel, 1,0); mainLayout->addWidget(count, 1,1); mainLayout->addWidget(minTimeLabel,2,0); mainLayout->addWidget(minTime,2,1); mainLayout->addWidget(maxTimeLabel,3,0); mainLayout->addWidget(maxTime, 3,1); global.settings->beginGroup("Thumbnail"); int min = global.settings->value("minTime", 5).toInt(); int max = global.settings->value("maxTime", 60).toInt(); int cnt = global.settings->value("count", 1).toInt(); bool disabled = global.settings->value("disabled", false).toBool(); global.settings->endGroup(); connect(disableThumbnail, SIGNAL(toggled(bool)), this, SLOT(disableToggled(bool))); minTime->setValue(min); maxTime->setValue(max); count->setValue(cnt); disableThumbnail->setChecked(disabled); } void ThumbnailPreferences::disableToggled(bool value) { minTime->setDisabled(value); maxTime->setDisabled(value); minTimeLabel->setDisabled(value); maxTimeLabel->setDisabled(value); } void ThumbnailPreferences::saveValues() { global.settings->beginGroup("Thumbnail"); global.settings->setValue("minTime", minTime->value()); global.settings->setValue("maxTime", maxTime->value()); global.settings->setValue("count", count->value()); global.settings->setValue("disabled", disableThumbnail->isChecked()); global.settings->endGroup(); global.disableThumbnails = disableThumbnail->isChecked(); global.minimumThumbnailInterval = minTime->value(); global.maximumThumbnailInterval = maxTime->value(); global.batchThumbnailCount = count->value(); } nixnote2-2.0.2/dialog/preferences/thumbnailpreferences.h000066400000000000000000000012431315604104400233750ustar00rootroot00000000000000#ifndef THUMBNAILPREFERENCES_H #define THUMBNAILPREFERENCES_H #include #include #include #include #include #include class ThumbnailPreferences : public QWidget { Q_OBJECT private: QGridLayout *mainLayout; QLabel *minTimeLabel; QSpinBox *minTime; QLabel *maxTimeLabel; QSpinBox *maxTime; QLabel *disableLabel; QCheckBox *disableThumbnail; QSpinBox *count; QLabel *countLabel; public: explicit ThumbnailPreferences(QWidget *parent = 0); void saveValues(); signals: public slots: void disableToggled(bool value); }; #endif // THUMBNAILPREFERENCES_H nixnote2-2.0.2/dialog/remindersetdialog.cpp000066400000000000000000000037751315604104400207370ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "remindersetdialog.h" #include "global.h" extern Global global; ReminderSetDialog::ReminderSetDialog(QWidget *parent) : QDialog(parent) { time = new QTimeEdit(this); calendar = new QCalendarWidget(this); ok = new QPushButton(this); cancel = new QPushButton(this); this->setWindowIcon(global.getIconResource(":alarmclockIcon")); QVBoxLayout *vboxLayout = new QVBoxLayout(this); setLayout(vboxLayout); vboxLayout->addWidget(time); vboxLayout->addWidget(calendar); QHBoxLayout *hboxLayout = new QHBoxLayout(this); hboxLayout->addWidget(ok); hboxLayout->addWidget(cancel); vboxLayout->addLayout(hboxLayout); ok->setText(tr("OK")); cancel->setText(tr("Cancel")); connect(ok, SIGNAL(clicked()), this, SLOT(okButtonPressed())); connect(cancel, SIGNAL(clicked()), this, SLOT(cancelButtonPressed())); this->setFont(global.getGuiFont(font())); } void ReminderSetDialog::okButtonPressed() { okPressed = true; close(); } void ReminderSetDialog::cancelButtonPressed() { okPressed = false; close(); } nixnote2-2.0.2/dialog/remindersetdialog.h000066400000000000000000000030001315604104400203610ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef REMINDERSETDIALOG_H #define REMINDERSETDIALOG_H #include #include #include #include #include #include #include class ReminderSetDialog : public QDialog { Q_OBJECT private: QPushButton *ok; QPushButton *cancel; public: explicit ReminderSetDialog(QWidget *parent = 0); QTimeEdit *time; QCalendarWidget *calendar; bool okPressed; signals: public slots: void okButtonPressed(); void cancelButtonPressed(); }; #endif // REMINDERSETDIALOG_H nixnote2-2.0.2/dialog/savedsearchproperties.cpp000066400000000000000000000073521315604104400216360ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "savedsearchproperties.h" #include "global.h" #include "sql/searchtable.h" #include #include #include #include extern Global global; SavedSearchProperties::SavedSearchProperties(QWidget *parent) : QDialog(parent) { okPressed = false; setWindowTitle(tr("Saved Search")); setWindowIcon(global.getIconResource(":searchIcon")); setLayout(&grid); connect(&name, SIGNAL(textChanged(const QString&)), this, SLOT(validateInput())); connect(&query, SIGNAL(textChanged(const QString&)), this, SLOT(validateInput())); nameLabel.setText(tr("Name")); queryLabel.setText(tr("Query")); queryGrid.addWidget(&nameLabel, 1,1); queryGrid.addWidget(&name, 1, 2); queryGrid.addWidget(&queryLabel, 2,1); queryGrid.addWidget(&query, 2, 2); queryGrid.setContentsMargins(10, 10, -10, -10); grid.addLayout(&queryGrid,1,1); ok.setText(tr("OK")); connect(&ok, SIGNAL(clicked()), this, SLOT(okButtonPressed())); cancel.setText(tr("Cancel")); connect(&cancel, SIGNAL(clicked()), this, SLOT(cancelButtonPressed())); buttonGrid.addWidget(&ok, 1, 1); buttonGrid.addWidget(&cancel, 1,2); grid.addLayout(&buttonGrid,2,1); this->setFont(global.getGuiFont(font())); } void SavedSearchProperties::okButtonPressed() { okPressed = true; if (this->lid > 0) { SavedSearch s; SearchTable table(global.db); table.get(s, lid); s.name = this->name.text().trimmed(); s.query = this->query.text().trimmed(); table.update(lid, s, true); close(); return; } // We have a new tag to add SavedSearch s; s.name = name.text().trimmed(); s.query = query.text().trimmed(); QUuid uuid; QString g = uuid.createUuid().toString().replace("{","").replace("}",""); s.guid = g; SearchTable t(global.db); t.add(0,s,true); close(); } void SavedSearchProperties::cancelButtonPressed() { okPressed = false; close(); } void SavedSearchProperties::setLid(qint32 lid) { if (lid > 0) { this->lid = lid; SavedSearch s; SearchTable table(global.db); table.get(s, lid); originalName = s.name; name.setText(originalName.trimmed()); query.setText(s.query); return; } this->lid = 0; this->setWindowTitle(tr("Add Saved Search")); originalName = ""; } void SavedSearchProperties::validateInput() { ok.setEnabled(true); if (name.text()=="") { ok.setEnabled(false); return; } if (query.text() == "") { ok.setEnabled(false); return; } SearchTable t(global.db); QString search = name.text().trimmed(); if (t.findByName(search)>0 && name.text().trimmed() != originalName) { ok.setEnabled(false); return; } } nixnote2-2.0.2/dialog/savedsearchproperties.h000066400000000000000000000033061315604104400212760ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef SAVEDSEARCHPROPERTIES_H #define SAVEDSEARCHPROPERTIES_H #include #include #include #include #include class SavedSearchProperties : public QDialog { Q_OBJECT private: QPushButton ok; QLabel nameLabel; QLabel queryLabel; QPushButton cancel; QGridLayout grid; QGridLayout queryGrid; QGridLayout buttonGrid; QStringList existingSearches; QString originalName; qint32 lid; public: explicit SavedSearchProperties(QWidget *parent = 0); QLineEdit name; QLineEdit query; bool okPressed; void setLid(qint32 lid); signals: private slots: void okButtonPressed(); void cancelButtonPressed(); void validateInput(); }; #endif // SAVEDSEARCHPROPERTIES_H nixnote2-2.0.2/dialog/screencapture.cpp000066400000000000000000000144061315604104400200720ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2009 - 2011 by Artem 'DOOMer' Galichkin * * doomer3d@gmail.com * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include "screencapture.h" #include #include ScreenCapture::ScreenCapture(QWidget *parent) : QDialog(parent) { setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint ); setWindowState(Qt::WindowFullScreen); setCursor(Qt::CrossCursor); sizeDesktop = QApplication::desktop()->size(); resize(sizeDesktop); desktopPixmapBkg = QPixmap::grabWindow(QApplication::desktop()->winId()); desktopPixmapClr = desktopPixmapBkg; move(0, 0); drawBackGround(); } ScreenCapture::~ScreenCapture() { } bool ScreenCapture::event(QEvent *event) { if (event->type() == QEvent::MouseButtonRelease || event->type() == QEvent::KeyPress) { accept(); } if (event->type() == QEvent::MouseButtonPress) { QMouseEvent *mouseEvent = static_cast (event); if (mouseEvent->button() != Qt::LeftButton) reject(); selStartPoint = mouseEvent->pos(); selectRect = QRect(selStartPoint, QSize()); } return QDialog::event(event); } void ScreenCapture::paintEvent(QPaintEvent *event) { Q_UNUSED(event); // suppress unused variable warning QPainter painter(this); if (!palBackground) painter.drawPixmap(QPoint(0, 0), desktopPixmapBkg); drawRectSelection(painter); } void ScreenCapture::mouseMoveEvent(QMouseEvent *event) { QMouseEvent *mouseEvent = static_cast (event); selectRect = QRect(selStartPoint, mouseEvent->pos()).normalized(); selEndPoint = mouseEvent->pos(); update(); } void ScreenCapture::drawBackGround() { // create painter on pixelmap of desktop QPainter painter(&desktopPixmapBkg); // set painter brush on 85% transparency painter.setBrush(QBrush(QColor(0, 0, 0, 85), Qt::SolidPattern)); // draw rect of desktop size in poainter painter.drawRect(QApplication::desktop()->rect()); QRect txtRect = QApplication::desktop()->screenGeometry(QApplication::desktop()->primaryScreen()); QString txtTip = QApplication::tr("Use your mouse to draw a rectangle to screenshot or exit pressing\nany key or using the right or middle mouse buttons."); txtRect.setHeight(qRound(txtRect.height() / 10.f)); // rounded val of text rect height painter.setPen(QPen(Qt::red)); // ste message rect border color painter.setBrush(QBrush(QColor(255, 255, 255, 180), Qt::SolidPattern)); QRect txtBgRect = painter.boundingRect(txtRect, Qt::AlignCenter, txtTip); // set height & width of bkg rect txtBgRect.setX(txtBgRect.x() - 6); txtBgRect.setY(txtBgRect.y() - 4); txtBgRect.setWidth(txtBgRect.width() + 12); txtBgRect.setHeight(txtBgRect.height() + 8); painter.drawRect(txtBgRect); // Draw the text painter.setPen(QPen(Qt::black)); // black color pen painter.drawText(txtBgRect, Qt::AlignCenter, txtTip); palBackground = (qApp->desktop()->numScreens() > 1); // set bkg to pallette widget if (palBackground) { QPalette newPalette = palette(); newPalette.setBrush(QPalette::Window, QBrush(desktopPixmapBkg)); setPalette(newPalette); } } void ScreenCapture::drawRectSelection(QPainter &painter) { painter.drawPixmap(selectRect, desktopPixmapClr, selectRect); painter.setPen(QPen(QBrush(QColor(0, 0, 0, 255)), 2)); painter.drawRect(selectRect); QString txtSize = QApplication::tr("%1 x %2 pixels ").arg(selectRect.width()).arg(selectRect.height()); painter.drawText(selectRect, Qt::AlignBottom | Qt::AlignRight, txtSize); /* This does a zoom box around the selection. if (!selEndPoint.isNull() ) // && conf->getZoomAroundMouse() == true) { const quint8 zoomSide = 200; // create magnifer coords QPoint zoomStart = selEndPoint; zoomStart -= QPoint(zoomSide/5, zoomSide/5); // 40, 40 QPoint zoomEnd = selEndPoint; zoomEnd += QPoint(zoomSide/5, zoomSide/5); // creating rect area for magnifer QRect zoomRect = QRect(zoomStart, zoomEnd); QPixmap zoomPixmap = desktopPixmapClr.copy(zoomRect).scaled(QSize(zoomSide, zoomSide), Qt::KeepAspectRatio); QPainter zoomPainer(&zoomPixmap); // create painter from pixmap maignifer zoomPainer.setPen(QPen(QBrush(QColor(255, 0, 0, 180)), 2)); zoomPainer.drawRect(zoomPixmap.rect()); // draw zoomPainer.drawText(zoomPixmap.rect().center() - QPoint(4, -4), "+"); // position for drawing preview QPoint zoomCenter = selectRect.bottomRight(); if (zoomCenter.x() + zoomSide > desktopPixmapClr.rect().width() || zoomCenter.y() + zoomSide > desktopPixmapClr.rect().height()) { zoomCenter -= QPoint(zoomSide, zoomSide); } painter.drawPixmap(zoomCenter, zoomPixmap); } */ } QPixmap ScreenCapture::getSelection() { QPixmap sel; sel = desktopPixmapClr.copy(selectRect); return sel; } nixnote2-2.0.2/dialog/screencapture.h000066400000000000000000000043461315604104400175410ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2009 - 2011 by Artem 'DOOMer' Galichkin * * doomer3d@gmail.com * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #ifndef SCREENCAPTURE_H #define SCREENCAPTURE_H #include #include #include #include #include #include #include class ScreenCapture : public QDialog { Q_OBJECT public: explicit ScreenCapture(QWidget *parent = 0); ~ScreenCapture(); QPixmap getSelection(); signals: private: QRect selectRect; QSize sizeDesktop; QPoint selStartPoint; QPoint selEndPoint; bool palBackground; QPixmap desktopPixmapBkg; QPixmap desktopPixmapClr; void drawBackGround(); void drawRectSelection(QPainter &painter); protected: bool event(QEvent *event); void paintEvent(QPaintEvent *event); void mouseMoveEvent(QMouseEvent *event); public slots: }; #endif // SCREENCAPTURE_H nixnote2-2.0.2/dialog/shortcutdialog.cpp000066400000000000000000000055071315604104400202640ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2016 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "shortcutdialog.h" #include #include #include #include #include #include "global.h" extern Global global; ShortcutDialog::ShortcutDialog() { tableWidget = new QTableWidget(this); tableWidget->setRowCount(global.shortcutKeys->actionMap->size()); tableWidget->setColumnCount(2); tableWidget->verticalHeader()->hide(); tableWidget->horizontalHeader()->hide(); tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); okButton = new QPushButton(this); this->setWindowTitle(tr("Defined Shortcuts")); okButton->setText(tr("Ok")); QVBoxLayout *layout = new QVBoxLayout(); layout->addWidget(tableWidget); QHBoxLayout *buttonLayout = new QHBoxLayout(); QSpacerItem *spacer1 = new QSpacerItem(150,1, QSizePolicy::Maximum); QSpacerItem *spacer2 = new QSpacerItem(150,1, QSizePolicy::Maximum); buttonLayout->addSpacerItem(spacer1); buttonLayout->addWidget(okButton); buttonLayout->addSpacerItem(spacer2); layout->addLayout(buttonLayout); setLayout(layout); connect(okButton, SIGNAL(pressed()), this, SLOT(close())); ShortcutKeys *keys = global.shortcutKeys; QHashIterator i(*keys->actionMap); int row = 0; while (i.hasNext()) { i.next(); tableWidget->setItem(row, 0, new QTableWidgetItem(i.key().toUpper())); QString sc = i.value().toUpper(); sc = sc.replace("SPACE", "Space"); sc = sc.replace("CTRL", "Ctrl"); sc = sc.replace("ALT", "Alt"); sc = sc.replace("SHIFT", "Shift"); sc = sc.replace("PGUP", "PgUp"); sc = sc.replace("PGDOWN", "PgDown"); tableWidget->setItem(row++, 1, new QTableWidgetItem(sc)); } tableWidget->sortByColumn(0, Qt::AscendingOrder); tableWidget->resizeColumnsToContents(); //this->resize(size().width(), size().height()+30); } nixnote2-2.0.2/dialog/shortcutdialog.h000066400000000000000000000023361315604104400177260ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2016 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef SHORTCUTDIALOG_H #define SHORTCUTDIALOG_H #include #include #include class ShortcutDialog : public QDialog { Q_OBJECT private: QPushButton *okButton; QTableWidget *tableWidget; public: ShortcutDialog(); }; #endif // SHORTCUTDIALOG_H nixnote2-2.0.2/dialog/spellcheckdialog.cpp000066400000000000000000000122241315604104400205200ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include #include "global.h" #include "spellcheckdialog.h" extern Global global; SpellCheckDialog::SpellCheckDialog(QString misspelled, QStringList suggestions, QWidget *parent) : QDialog(parent) { misspelledWord = misspelled; setWindowIcon(global.getIconResource(":spellCheckIcon")); replacePressed = false; cancelPressed = false; setWindowTitle(tr("Spell Check")); QGridLayout *grid = new QGridLayout(this); setLayout(grid); QGridLayout *suggestionGrid = new QGridLayout(this); QGridLayout *buttonGrid = new QGridLayout(this); currentWord = new QLabel(this); currentWord->setText(misspelledWord); replacementWord = new QLineEdit(this); this->suggestions = new QListWidget(this); connect(replacementWord, SIGNAL(textChanged(QString)), this, SLOT(validateInput())); connect(this->suggestions, SIGNAL(itemSelectionChanged()), this, SLOT(replacementChosen())); suggestionGrid->addWidget(currentWord, 1,1); suggestionGrid->addWidget(new QLabel(tr("Suggestion"), this), 2,1); suggestionGrid->addWidget(replacementWord, 3,1); suggestionGrid->addWidget(this->suggestions, 4,1); suggestionGrid->setContentsMargins(10,10,-10,-10); grid->addLayout(suggestionGrid,1,1); replace = new QPushButton(tr("Replace")); ignore = new QPushButton(tr("Ignore")); ignoreAll = new QPushButton(tr("Ignore All")); addToDictionary = new QPushButton(tr("Add To Dictionary")); connect(replace, SIGNAL(clicked()), this, SLOT(replaceButtonPressed())); connect(ignore, SIGNAL(clicked()), this, SLOT(ignoreButtonPressed())); connect(ignoreAll, SIGNAL(clicked()), this, SLOT(ignoreAllButtonPressed())); connect(addToDictionary, SIGNAL(clicked()), this, SLOT(addToDictionaryButtonPressed())); QPushButton *cancelButton = new QPushButton(tr("Cancel"), this); connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancelButtonPressed())); suggestionGrid->addWidget(replace, 1,2); suggestionGrid->addWidget(ignore, 2,2); suggestionGrid->addWidget(ignoreAll, 3,2); suggestionGrid->addWidget(addToDictionary, 4,2); suggestionGrid->setAlignment(Qt::AlignTop); buttonGrid->addWidget(new QLabel(this), 1,1); buttonGrid->addWidget(cancelButton, 1,2); buttonGrid->addWidget(new QLabel(this),1,3); buttonGrid->setColumnStretch(1, 10); buttonGrid->setColumnStretch(3,10); grid->addLayout(buttonGrid, 2,1); this->replace->setEnabled(false); this->suggestions->addItems(suggestions); this->setFont(global.getGuiFont(font())); } void SpellCheckDialog::cancelButtonPressed() { replacePressed = false; cancelPressed = true; ignorePressed = false; addToDictionaryPressed = false; ignoreAllPressed = false; close(); } void SpellCheckDialog::addToDictionaryButtonPressed() { cancelPressed = false; replacePressed = false; ignorePressed = false; ignoreAllPressed = false; addToDictionaryPressed = true; replacement = replacementWord->text(); close(); } void SpellCheckDialog::replaceButtonPressed() { cancelPressed = false; replacePressed = true; ignorePressed = false; ignoreAllPressed = false; addToDictionaryPressed = false; replacement = replacementWord->text(); close(); } void SpellCheckDialog::ignoreButtonPressed() { cancelPressed = false; replacePressed = false; ignorePressed = true; ignoreAllPressed = false; addToDictionaryPressed = false; replacement = replacementWord->text(); close(); } void SpellCheckDialog::ignoreAllButtonPressed() { cancelPressed = false; replacePressed = false; ignorePressed = false; ignoreAllPressed = true; addToDictionaryPressed = false; replacement = replacementWord->text(); close(); } void SpellCheckDialog::validateInput() { if (replacementWord->text().trimmed() == "") replace->setEnabled(false); else replace->setEnabled(true); } void SpellCheckDialog::replacementChosen() { replacementWord->setText(suggestions->currentItem()->text()); } //void SpellCheckDialog::closeEvent(QCloseEvent *e) { // replacePressed = false; // cancelPressed = true; // ignorePressed = false; // ignoreAllPressed = false; // QDialog::closeEvent(e); //} nixnote2-2.0.2/dialog/spellcheckdialog.h000066400000000000000000000040771315604104400201740ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef SPELLCHECKDIALOG_H #define SPELLCHECKDIALOG_H #include #include #include #include #include class SpellCheckDialog : public QDialog { Q_OBJECT private: QLabel *currentWord; QLineEdit *replacementWord; QString misspelledWord; QPushButton *replace; QPushButton *ignore; QPushButton *ignoreAll; QPushButton *addToDictionary; QListWidget *suggestions; public: explicit SpellCheckDialog(QString misspelled, QStringList suggestions, QWidget *parent = 0); bool replacePressed; bool cancelPressed; bool ignorePressed; bool ignoreAllPressed; bool addToDictionaryPressed; QString replacement; protected: //void closeEvent(QCloseEvent *e); signals: public slots: void validateInput(); void replacementChosen(); void replaceButtonPressed(); void ignoreButtonPressed(); void ignoreAllButtonPressed(); void addToDictionaryButtonPressed(); void cancelButtonPressed(); }; #endif // SPELLCHECKDIALOG_H nixnote2-2.0.2/dialog/tabledialog.cpp000066400000000000000000000073551315604104400175030ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "tabledialog.h" #include "global.h" #include extern Global global; TableDialog::TableDialog(QWidget *parent) : QDialog(parent) { okPressed = false; this->setWindowTitle(QString(tr("Insert Table"))); //setWindowIcon(new QIcon(iconPath+"table.png")); setLayout(&grid); unit.addItem(tr("Percent"),true); unit.addItem(tr("Pixels"), false); width.setText("80"); widthValidator.setBottom(0); widthValidator.setTop(100); width.setValidator(&widthValidator); connect(&width, SIGNAL(textChanged(QString)), this, SLOT(validateWidth())); rows.setMinimum(1); rows.setMaximum(30); cols.setMinimum(1); cols.setMaximum(30); connect(&unit, SIGNAL(activated(int)), this, SLOT(unitChanged())); input.addWidget(new QLabel(tr("Rows")),1,1); input.addWidget(&rows, 1, 2); input.addWidget(new QLabel(tr("Columns")), 2, 1); input.addWidget(&cols, 2, 2); input.addWidget(new QLabel(tr("Width")), 3, 1); input.addWidget(&width, 3, 2); input.addWidget(new QLabel(tr("Unit")), 4, 1); input.addWidget(&unit, 4, 2); input.setContentsMargins(10, 10, -10, -10); grid.addLayout(&input, 1,1); msgGrid.addWidget(&error,1,1); grid.addLayout(&msgGrid, 2, 1); ok.setText(tr("OK")); connect(&ok, SIGNAL(clicked()), this, SLOT(okButtonPressed())); cancel.setText(tr("Cancel")); connect(&cancel, SIGNAL(clicked()), this, SLOT(cancelButtonPressed())); button.addWidget(&ok, 1,1); button.addWidget(&cancel, 1,2); grid.addLayout(&button, 3, 1); this->setLayout(&grid); this->setFont(global.getGuiFont(font())); } // The OK button was pressed void TableDialog::okButtonPressed() { okPressed = true; close(); } // The CANCEL button was pressed void TableDialog::cancelButtonPressed() { okPressed = false; close(); } // Check if the OK button was pressed bool TableDialog::isOkPressed() { return okPressed; } // Check if proper input was input void TableDialog::validateInput() { ok.setEnabled(false); ok.setEnabled(true); } void TableDialog::validateWidth() { if (width.text().trimmed().length() == 0) { ok.setEnabled(false); } else ok.setEnabled(true); } void TableDialog::unitChanged() { int i = unit.currentIndex(); if (unit.itemData(i).toBool()) { // if 'percent' int w = width.text().toInt(); if (w > 100) width.setText("80"); widthValidator.setTop(100); } else { widthValidator.setTop(32767); } } int TableDialog::getRows() { return rows.text().toInt(); } int TableDialog::getCols() { return cols.text().toInt(); } int TableDialog::getWidth() { return width.text().toInt(); } bool TableDialog::isPercent() { int i = unit.currentIndex(); return unit.itemData(i).toBool(); } nixnote2-2.0.2/dialog/tabledialog.h000066400000000000000000000036541315604104400171460ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef TABLEDIALOG_H #define TABLEDIALOG_H #include #include #include #include #include #include #include #include class TableDialog : public QDialog { Q_OBJECT private: QGridLayout grid; // = new QGridLayout(); QGridLayout input; // = new QGridLayout(); QGridLayout msgGrid; // = new QGridLayout(); QGridLayout button; // = new QGridLayout(); bool okPressed; QSpinBox rows; QSpinBox cols; QLineEdit width; QPushButton ok; QPushButton cancel; QLabel error; QIntValidator widthValidator; QComboBox unit; public: TableDialog(QWidget *parent); bool isOkPressed(); int getRows(); int getCols(); int getWidth(); bool isPercent(); private slots: void validateInput(); void validateWidth(); void unitChanged(); void okButtonPressed(); void cancelButtonPressed(); }; #endif // TABLEDIALOG_H nixnote2-2.0.2/dialog/tagproperties.cpp000066400000000000000000000066111315604104400201160ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "tagproperties.h" #include "global.h" #include "sql/tagtable.h" #include #include #include #include extern Global global; TagProperties::TagProperties(QWidget *parent) : QDialog(parent) { okPressed = false; setWindowTitle(tr("Tag")); setWindowIcon(global.getIconResource(":tagIcon")); setLayout(&grid); connect(&name, SIGNAL(textChanged(const QString&)), this, SLOT(validateInput())); nameLabel.setText(tr("Name")); queryGrid.addWidget(&nameLabel, 1,1); queryGrid.addWidget(&name, 1, 2); // queryGrid.setContentsMargins(10, 10, -10, -10); grid.addLayout(&queryGrid,1,1); ok.setText(tr("OK")); connect(&ok, SIGNAL(clicked()), this, SLOT(okButtonPressed())); cancel.setText(tr("Cancel")); connect(&cancel, SIGNAL(clicked()), this, SLOT(cancelButtonPressed())); buttonGrid.addWidget(&ok, 1, 1); buttonGrid.addWidget(&cancel, 1,2); grid.addLayout(&buttonGrid,2,1); this->setFont(global.getGuiFont(font())); } void TagProperties::okButtonPressed() { okPressed = true; if (this->lid > 0) { Tag tag; TagTable table(global.db); table.get(tag, lid); tag.name = this->name.text().trimmed(); table.update(tag, true); close(); return; } // We have a new tag to add Tag tag; tag.name = name.text().trimmed(); QUuid uuid; QString g = uuid.createUuid().toString().replace("{","").replace("}",""); tag.guid = g; TagTable t(global.db); t.add(0,tag,true, account); close(); } void TagProperties::cancelButtonPressed() { okPressed = false; close(); } void TagProperties::setLid(qint32 lid) { account = 0; if (lid > 0) { this->lid = lid; Tag tag; TagTable table(global.db); table.get(tag, lid); originalName = tag.name; name.setText(originalName.trimmed()); account = table.owningAccount(lid); return; } this->lid = 0; this->setWindowTitle(tr("Add Tag")); originalName = ""; } void TagProperties::validateInput() { if (account > 0) { ok.setEnabled(false); return; } ok.setEnabled(true); if (name.text()=="") { ok.setEnabled(false); return; } TagTable t(global.db); QString tag = name.text().trimmed(); if (t.findByName(tag, account)>0 || name.text().trimmed() == originalName) { ok.setEnabled(false); return; } } nixnote2-2.0.2/dialog/tagproperties.h000066400000000000000000000032501315604104400175570ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef TAGPROPERTIES_H #define TAGPROPERTIES_H #include #include #include #include #include class TagProperties : public QDialog { Q_OBJECT private: QPushButton ok; qint32 account; QLabel nameLabel; QPushButton cancel; QGridLayout grid; QGridLayout buttonGrid; QGridLayout queryGrid; QStringList existingTags; QString originalName; qint32 lid; public: explicit TagProperties(QWidget *parent = 0); QLineEdit name; bool okPressed; void setLid(qint32 lid); signals: private slots: void okButtonPressed(); void cancelButtonPressed(); void validateInput(); signals: public slots: }; #endif // TAGPROPERTIES_H nixnote2-2.0.2/dialog/watchfolderadd.cpp000066400000000000000000000112461315604104400202010ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "watchfolderadd.h" #include "sql/filewatchertable.h" #include "sql/notebooktable.h" #include "watcher/filewatcher.h" #include "sql/configstore.h" #include #include WatchFolderAdd::WatchFolderAdd(qint32 lid, QWidget *parent) : QDialog(parent) { mainLayout = new QVBoxLayout(); okClicked = false; fileDialog = new QFileDialog(this); QString dir = QDir::home().absolutePath(); bool includeSubdirs = false; qint32 notebookLid = 0; FileWatcher::ScanType type = FileWatcher::ImportKeep; this->lid = lid; if (lid > 0) { FileWatcherTable ft(global.db); ft.get(lid, dir, type, notebookLid, includeSubdirs); } okButton = new QPushButton(this); okButton->setText(tr("OK")); connect(okButton, SIGNAL(clicked()), this, SLOT(onClicked())); cancelButton = new QPushButton(this); cancelButton->setText(tr("Cancel")); connect(cancelButton, SIGNAL(clicked()), this, SLOT(onCancel())); folderButton = new QPushButton(this); folderButton->setText(tr("Directory")); connect(folderButton, SIGNAL(clicked()), this, SLOT(folderButtonClicked())); directory = new QLabel(this); directory->setText(dir); keep = new QComboBox(this); keep->addItem(tr("Keep"),"keep"); keep->addItem(tr("Delete"),"delete"); if (type == FileWatcher::ImportKeep) keep->setCurrentIndex(0); else keep->setCurrentIndex(1); subdirs = new QCheckBox(this); subdirs->setChecked(includeSubdirs); books = new QComboBox(this); NotebookTable ntable(global.db); QList lids; ntable.getAll(lids); for (int i=0; iaddItem(n.name, lids[i]); if (lids[i] == notebookLid) books->setCurrentIndex(i); } books->model()->sort(0); grid = new QGridLayout(); grid->addWidget(directory,0,1); grid->addWidget(folderButton,0,0); grid->addWidget(new QLabel(tr("Notebook")),1,0); grid->addWidget(books,1,1); grid->addWidget(new QLabel(tr("After import")), 2,0); grid->addWidget(keep,2,1); grid->addWidget(new QLabel(tr("Include subdirectories")),3,0); grid->addWidget(subdirs, 3, 1); buttonLayout = new QHBoxLayout(); buttonLayout->addStretch(1); buttonLayout->addWidget(okButton); buttonLayout->addWidget(cancelButton); setWindowTitle(tr("Add Import Folder")); mainLayout->addLayout(grid); mainLayout->addSpacing(1); mainLayout->addLayout(buttonLayout); setLayout(mainLayout); this->setFont(global.getGuiFont(font())); } void WatchFolderAdd::onClicked() { okClicked = true; int index = books->currentIndex(); qint32 notebookLid = books->itemData(index).toInt(); QString folder = this->directory->text(); FileWatcher::ScanType type = FileWatcher::ImportDelete; QString after = keep->itemData(keep->currentIndex()).toString(); if (after == "keep") type = FileWatcher::ImportKeep; FileWatcherTable ft(global.db); if (lid <= 0) { ConfigStore cs(global.db); lid = cs.incrementLidCounter(); } else { ft.expunge(lid); } ft.addEntry(lid, folder, type, notebookLid, subdirs->isChecked()); close(); } void WatchFolderAdd::onCancel() { okClicked = false; close(); } void WatchFolderAdd::itemSelected() { okButton->setEnabled(true); } void WatchFolderAdd::folderButtonClicked() { QDir dir; fileDialog->setDirectory(dir.homePath()+"/"); fileDialog->setFileMode(QFileDialog::DirectoryOnly); connect(fileDialog, SIGNAL(fileSelected(QString)), this, SLOT(folderSelected(QString))); fileDialog->exec(); } void WatchFolderAdd::folderSelected(QString f) { directory->setText(f); } nixnote2-2.0.2/dialog/watchfolderadd.h000066400000000000000000000035401315604104400176440ustar00rootroot00000000000000#ifndef WATCHFOLDERADD_H #define WATCHFOLDERADD_H #include #include #include #include #include #include #include #include #include /********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ class WatchFolderAdd : public QDialog { Q_OBJECT private: QPushButton *okButton; QPushButton *cancelButton; QPushButton *folderButton; QGridLayout *grid; QHBoxLayout *buttonLayout; QVBoxLayout *mainLayout; QFileDialog *fileDialog; public: explicit WatchFolderAdd(qint32 lid=0, QWidget *parent = 0); bool okClicked; QComboBox *books; QLabel *directory; QComboBox *keep; QCheckBox *subdirs; qint32 lid; signals: public slots: private slots: void onClicked(); void onCancel(); void itemSelected(); void folderButtonClicked(); void folderSelected(QString f); }; #endif // WATCHFOLDERADD_H nixnote2-2.0.2/dialog/watchfolderdialog.cpp000066400000000000000000000163271315604104400207150ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "watchfolderdialog.h" #include "sql/filewatchertable.h" #include "sql/notebooktable.h" #include "dialog/watchfolderadd.h" #include #include #include #include WatchFolderDialog::WatchFolderDialog(QWidget *parent) : QDialog(parent) { okClicked = false; QVBoxLayout *mainLayout = new QVBoxLayout(); setLayout(mainLayout); okButton = new QPushButton(this); okButton->setText(tr("OK")); connect(okButton, SIGNAL(clicked()), this, SLOT(onClicked())); cancelButton = new QPushButton(this); cancelButton->setText(tr("Cancel")); connect(cancelButton, SIGNAL(clicked()), this, SLOT(onCancel())); QHBoxLayout *horizontalLayout = new QHBoxLayout(); QHBoxLayout *buttonLayout = new QHBoxLayout(); buttonLayout->addStretch(1); buttonLayout->addWidget(okButton); buttonLayout->addWidget(cancelButton); setWindowTitle(tr("Auto Import Folders")); QList lids; FileWatcherTable ft(global.db); ft.getAll(lids); table = new QTableWidget(lids.size(),4); connect(table, SIGNAL(itemSelectionChanged()), this, SLOT(tableSelection())); horizontalLayout->addWidget(table); addButton = new QPushButton(this); addButton->setText(tr("Add")); connect(addButton, SIGNAL(clicked()), this, SLOT(addPressed())); editButton = new QPushButton(this); editButton->setText(tr("Edit")); editButton->setEnabled(false); connect(editButton, SIGNAL(clicked()), this, SLOT(editPressed())); deleteButton = new QPushButton(this); deleteButton->setText(tr("Delete")); deleteButton->setEnabled(false); connect(deleteButton, SIGNAL(clicked()), this, SLOT(deletePressed())); QVBoxLayout *editLayout = new QVBoxLayout(); editLayout->addWidget(addButton); editLayout->addWidget(editButton); editLayout->addWidget(deleteButton); QHBoxLayout *listLayout = new QHBoxLayout(); listLayout->addLayout(horizontalLayout); listLayout->addLayout(editLayout); mainLayout->addLayout(listLayout); mainLayout->addSpacing(1); mainLayout->addLayout(buttonLayout); //table->setColumnWidth(0, 160); //resize(500, 200); //table->resizeColumnsToContents(); load(); this->setFont(global.getGuiFont(font())); } void WatchFolderDialog::onClicked() { okClicked = true; close(); } void WatchFolderDialog::onCancel() { okClicked = false; close(); } void WatchFolderDialog::load() { QList headers; headers.append(tr("Directory")); headers.append(tr("Target Notebook")); headers.append(tr("Keep")); headers.append(tr("Include Subdirectories")); table->setHorizontalHeaderLabels(headers); table->setAlternatingRowColors(true); table->setSelectionBehavior(QAbstractItemView::SelectRows); table->setSelectionMode(QAbstractItemView::SingleSelection); table->verticalHeader()->hide(); QList lids; FileWatcherTable ft(global.db); ft.getAll(lids); QString dir; qint32 notebookLid; bool includeSubdirs; FileWatcher::ScanType type; for (int i=0; iresizeColumnsToContents(); } void WatchFolderDialog::addRow(qint32 lid, int row, QString folder, qint32 notebookLid, FileWatcher::ScanType type, bool includeSubdirs) { QFontMetrics f = QApplication::fontMetrics(); int fontHeight = f.height(); QTableWidgetItem *dir = new QTableWidgetItem(); dir->setText(folder); dir->setData(Qt::UserRole, lid); table->setItem(row, 0, dir); table->setRowHeight(row, fontHeight); dir->setToolTip(folder); NotebookTable bookTable(global.db); Notebook n; bookTable.get(n, notebookLid); QTableWidgetItem *book = new QTableWidgetItem(); book->setText(n.name); book->setData(Qt::UserRole, notebookLid); table->setItem(row, 1, book); QTableWidgetItem *keep = new QTableWidgetItem(); if (type == FileWatcher::ImportKeep) { keep->setText(tr("Keep")); keep->setData(Qt::UserRole, FileWatcher::ImportKeep); } else { keep->setText(tr("Delete")); keep->setData(Qt::UserRole, FileWatcher::ImportDelete); } table->setItem(row, 2, keep); QTableWidgetItem *subdirs = new QTableWidgetItem(); if (includeSubdirs) { subdirs->setText(tr("Yes")); subdirs->setData(Qt::UserRole, true); } else { subdirs->setText(tr("No")); subdirs->setData(Qt::UserRole, false); } table->setItem(row, 3, subdirs); } void WatchFolderDialog::tableSelection() { editButton->setEnabled(true); deleteButton->setEnabled(true); } void WatchFolderDialog::addPressed() { WatchFolderAdd dialog(0, this); dialog.exec(); if (dialog.okClicked) { QString dir = dialog.directory->text(); qint32 notebook = dialog.books->itemData(dialog.books->currentIndex()).toInt(); qint32 lid = dialog.lid; FileWatcher::ScanType keep; int index = dialog.keep->currentIndex(); QString keepString = dialog.keep->itemData(index).toString(); if (keepString == "keep") keep = FileWatcher::ImportKeep; else keep = FileWatcher::ImportDelete; bool includeSubdirs = dialog.subdirs->isChecked(); table->insertRow(table->rowCount()); addRow(lid, table->rowCount()-1, dir, notebook, keep, includeSubdirs); } } void WatchFolderDialog::editPressed() { QModelIndex index = table->currentIndex(); int row = index.row(); QTableWidgetItem *item = table->item(row, 0); qint32 lid = item->data(Qt::UserRole).toInt(); WatchFolderAdd dialog(lid, this); dialog.exec(); if (dialog.okClicked) { table->reset(); load(); table->resizeColumnsToContents(); } } void WatchFolderDialog::deletePressed() { QModelIndex index = table->currentIndex(); int row = index.row(); QTableWidgetItem *dirWidget = table->item(row, 0); qint32 value = dirWidget->data(Qt::UserRole).toInt(); FileWatcherTable ft(global.db); ft.expunge(value); table->removeRow(row); if (table->rowCount() == 0) { editButton->setEnabled(false); deleteButton->setEnabled(false); } } nixnote2-2.0.2/dialog/watchfolderdialog.h000066400000000000000000000033711315604104400203550ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef WATCHFOLDERDIALOG_H #define WATCHFOLDERDIALOG_H #include #include #include "watcher/filewatcher.h" #include class WatchFolderDialog : public QDialog { Q_OBJECT private: void load(); void addRow(qint32 lid, int row, QString folder, qint32 notebookLid, FileWatcher::ScanType, bool includeSubdirs); public: explicit WatchFolderDialog(QWidget *parent = 0); bool okClicked; QPushButton *okButton; QPushButton *cancelButton; QPushButton *addButton; QPushButton *editButton; QPushButton *deleteButton; QTableWidget *table; signals: public slots: private slots: void onClicked(); void onCancel(); void tableSelection(); void addPressed(); void editPressed(); void deletePressed(); }; #endif // WATCHFOLDERDIALOG_H nixnote2-2.0.2/dialog/webcamcapturedialog.cpp000066400000000000000000000066371315604104400212400ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "webcamcapturedialog.h" #include "webcamcapturedialog.h" #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv/cv.h" //#include "../global.h" #include #include //extern Global global; // Default constructor WebcamCaptureDialog::WebcamCaptureDialog(QWidget *parent) : QDialog(parent) { // this->setFont(global.getGuiFont(font())); webcamReady = true; this->setWindowTitle(tr("Webcam Capture")); // this->setWindowIcon(global.getIconResource(":webcamIcon")); mainLayout = new QVBoxLayout(); webcamImage = new CVImageWidget(); mainLayout->addWidget(webcamImage); this->setLayout(mainLayout); cap = new cv::VideoCapture(0); // open the video camera no. 0 if (!cap->isOpened()) webcamReady = false; else { cap->read(frame); if (webcamImage->width() == 0 || webcamImage->height() == 0) webcamReady = false; else webcamImage->showImage(frame); } okPressed = false; QHBoxLayout *buttonLayout = new QHBoxLayout(); mainLayout->addLayout(buttonLayout); cancelButton = new QPushButton(); okButton = new QPushButton(); cancelButton->setText(tr("Cancel")); okButton->setText(tr("OK")); buttonLayout->addSpacerItem(new QSpacerItem(20,0,QSizePolicy::Maximum, QSizePolicy::Minimum)); buttonLayout->addWidget(okButton); buttonLayout->addSpacerItem(new QSpacerItem(20,0,QSizePolicy::Maximum, QSizePolicy::Minimum)); buttonLayout->addWidget(cancelButton); buttonLayout->addSpacerItem(new QSpacerItem(20,0,QSizePolicy::Maximum, QSizePolicy::Minimum)); connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancelButtonPressed())); connect(okButton, SIGNAL(clicked()), this, SLOT(okButtonPressed())); connect(&picTimer, SIGNAL(timeout()), this, SLOT(pictureRefresh())); picTimer.setInterval(10); picTimer.start(); } // Destructor WebcamCaptureDialog::~WebcamCaptureDialog() { delete cap; } // Ok button was pressed void WebcamCaptureDialog::okButtonPressed() { picTimer.stop(); okPressed = true; this->close(); } // Cancel button was pressed void WebcamCaptureDialog::cancelButtonPressed() { okPressed = false; this->close(); } // Refresh the QImage from the camera void WebcamCaptureDialog::pictureRefresh() { cap->read(frame); if (webcamImage->width() == 0 || webcamImage->height() == 0) webcamReady = false; else webcamImage->showImage(frame); } nixnote2-2.0.2/dialog/webcamcapturedialog.h000066400000000000000000000042621315604104400206750ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef WEBCAMCAPTUREDIALOG_H #define WEBCAMCAPTUREDIALOG_H #include #include #include #include #include #include "../webcam/cvimagewidget.h" #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv/cv.h" class WebcamCaptureDialog : public QDialog { Q_OBJECT private: QVBoxLayout *mainLayout; // main layout on the dialog cv::VideoCapture *cap; // video capture device cv::Mat frame; // matrix for image from webcam QPushButton *okButton; // Ok push button QPushButton *cancelButton; // cancel push button QTimer picTimer; // timer to refresh the picture public: explicit WebcamCaptureDialog(QWidget *parent = 0); ~WebcamCaptureDialog(); CVImageWidget *webcamImage; // Main display of image bool okPressed; // was the Ok button pressed? bool webcamReady; // Is the webcam working? signals: public slots: void pictureRefresh(); // refresh the picture from camera void okButtonPressed(); // ok button was pushed void cancelButtonPressed(); // cancel button was pushed }; #endif // WEBCAMCAPTUREDIALOG_H nixnote2-2.0.2/email/000077500000000000000000000000001315604104400143465ustar00rootroot00000000000000nixnote2-2.0.2/email/emailaddress.cpp000066400000000000000000000023371315604104400175140ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #include "emailaddress.h" /* [1] Constructors and Destructors */ EmailAddress::EmailAddress(const QString & address, const QString & name) { this->address = address; this->name = name; } EmailAddress::~EmailAddress() { } /* [1] --- */ /* [2] Getters and Setters */ void EmailAddress::setName(const QString & name) { this->name = name; } void EmailAddress::setAddress(const QString & address) { this->address = address; } const QString & EmailAddress::getName() const { return name; } const QString & EmailAddress::getAddress() const { return address; } /* [2] --- */ nixnote2-2.0.2/email/emailaddress.h000066400000000000000000000024621315604104400171600ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #ifndef EMAILADDRESS_H #define EMAILADDRESS_H #include #include "smtpexports.h" class SMTP_EXPORT EmailAddress : public QObject { Q_OBJECT public: /* [1] Constructors and Destructors */ EmailAddress(); EmailAddress(const QString & address, const QString & name=""); ~EmailAddress(); /* [1] --- */ /* [2] Getters and Setters */ void setName(const QString & name); void setAddress(const QString & address); const QString & getName() const; const QString & getAddress() const; /* [2] --- */ private: /* [3] Private members */ QString name; QString address; /* [3] --- */ }; #endif // EMAILADDRESS_H nixnote2-2.0.2/email/mimeattachment.cpp000066400000000000000000000022151315604104400200520ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #include "mimeattachment.h" #include /* [1] Constructors and Destructors */ MimeAttachment::MimeAttachment(QFile *file) : MimeFile(file) { } MimeAttachment::MimeAttachment(const QByteArray& stream, const QString& fileName): MimeFile(stream, fileName) { } MimeAttachment::~MimeAttachment() { } /* [1] --- */ /* [2] Protected methods */ void MimeAttachment::prepare() { this->header += "Content-disposition: attachment\r\n"; /* !!! IMPORTANT !!! */ MimeFile::prepare(); } /* [2] --- */ nixnote2-2.0.2/email/mimeattachment.h000066400000000000000000000022241315604104400175170ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #ifndef MIMEATTACHMENT_H #define MIMEATTACHMENT_H #include #include "mimepart.h" #include "mimefile.h" #include "smtpexports.h" class SMTP_EXPORT MimeAttachment : public MimeFile { Q_OBJECT public: /* [1] Constructors and Destructors */ MimeAttachment(QFile* file); MimeAttachment(const QByteArray& stream, const QString& fileName); ~MimeAttachment(); /* [1] --- */ protected: /* [2] Protected methods */ virtual void prepare(); /* [2] --- */ }; #endif // MIMEATTACHMENT_H nixnote2-2.0.2/email/mimecontentformatter.cpp000066400000000000000000000033261315604104400213240ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #include "mimecontentformatter.h" MimeContentFormatter::MimeContentFormatter(int max_length) : max_length(max_length) {} QString MimeContentFormatter::format(const QString &content, bool quotedPrintable) const { QString out; int chars = 0; for (int i = 0; i < content.length() ; ++i) { chars++; if (!quotedPrintable) { if (chars > max_length) { out.append("\r\n"); chars = 1; } } else { if (content[i] == '\n') { // new line out.append(content[i]); chars = 0; continue; } if ((chars > max_length - 1) || ((content[i] == '=') && (chars > max_length - 3) )) { out.append('='); out.append("\r\n"); chars = 1; } } out.append(content[i]); } return out; } void MimeContentFormatter::setMaxLength(int l) { max_length = l; } int MimeContentFormatter::getMaxLength() const { return max_length; } nixnote2-2.0.2/email/mimecontentformatter.h000066400000000000000000000021311315604104400207620ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #ifndef MIMECONTENTFORMATTER_H #define MIMECONTENTFORMATTER_H #include #include #include "smtpexports.h" class SMTP_EXPORT MimeContentFormatter : public QObject { Q_OBJECT public: MimeContentFormatter (int max_length = 76); void setMaxLength(int l); int getMaxLength() const; QString format(const QString &content, bool quotedPrintable = false) const; protected: int max_length; }; #endif // MIMECONTENTFORMATTER_H nixnote2-2.0.2/email/mimefile.cpp000066400000000000000000000027371315604104400166520ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #include "mimefile.h" #include /* [1] Constructors and Destructors */ MimeFile::MimeFile(QFile *file) { this->file = file; this->cType = "application/octet-stream"; this->cName = QFileInfo(*file).fileName(); this->cEncoding = Base64; } MimeFile::MimeFile(const QByteArray& stream, const QString& fileName) { this->cEncoding = Base64; this->cType = "application/octet-stream"; this->file = 0; this->cName = fileName; this->content = stream; } MimeFile::~MimeFile() { if (file) delete file; } /* [1] --- */ /* [2] Getters and setters */ /* [2] --- */ /* [3] Protected methods */ void MimeFile::prepare() { if (this->file) { file->open(QIODevice::ReadOnly); this->content = file->readAll(); file->close(); } /* !!! IMPORTANT !!!! */ MimePart::prepare(); } /* [3] --- */ nixnote2-2.0.2/email/mimefile.h000066400000000000000000000023171315604104400163110ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #ifndef MIMEFILE_H #define MIMEFILE_H #include "mimepart.h" #include #include "smtpexports.h" class SMTP_EXPORT MimeFile : public MimePart { Q_OBJECT public: /* [1] Constructors and Destructors */ MimeFile(const QByteArray& stream, const QString& fileName); MimeFile(QFile *f); ~MimeFile(); /* [1] --- */ /* [2] Getters and Setters */ /* [2] --- */ protected: /* [3] Protected members */ QFile* file; /* [3] --- */ /* [4] Protected methods */ virtual void prepare(); /* [4] --- */ }; #endif // MIMEFILE_H nixnote2-2.0.2/email/mimehtml.cpp000066400000000000000000000022001315604104400166600ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #include "mimehtml.h" /* [1] Constructors and Destructors */ MimeHtml::MimeHtml(const QString &html) : MimeText(html) { this->cType = "text/html"; } MimeHtml::~MimeHtml() {} /* [1] --- */ /* [2] Getters and Setters */ void MimeHtml::setHtml(const QString & html) { this->text = html; } const QString & MimeHtml::getHtml() const { return text; } /* [2] --- */ /* [3] Protected methods */ void MimeHtml::prepare() { /* !!! IMPORTANT !!! */ MimeText::prepare(); } /* [3] --- */ nixnote2-2.0.2/email/mimehtml.h000066400000000000000000000023101315604104400163270ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #ifndef MIMEHTML_H #define MIMEHTML_H #include "mimetext.h" #include "smtpexports.h" class SMTP_EXPORT MimeHtml : public MimeText { Q_OBJECT public: /* [1] Constructors and Destructors */ MimeHtml(const QString &html = ""); ~MimeHtml(); /* [1] --- */ /* [2] Getters and Setters */ void setHtml(const QString & html); const QString& getHtml() const; /* [2] --- */ protected: /* [3] Protected members */ /* [3] --- */ /* [4] Protected methods */ virtual void prepare(); /* [4] --- */ }; #endif // MIMEHTML_H nixnote2-2.0.2/email/mimeinlinefile.cpp000066400000000000000000000020631315604104400200410ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #include "mimeinlinefile.h" /* [1] Constructors and Destructors */ MimeInlineFile::MimeInlineFile(QFile *f) : MimeFile(f) { } MimeInlineFile::~MimeInlineFile() {} /* [1] --- */ /* [2] Getters and Setters */ /* [2] --- */ /* [3] Protected methods */ void MimeInlineFile::prepare() { this->header += "Content-Disposition: inline\r\n"; /* !!! IMPORTANT !!! */ MimeFile::prepare(); } /* [3] --- */ nixnote2-2.0.2/email/mimeinlinefile.h000066400000000000000000000022011315604104400175000ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #ifndef MIMEINLINEFILE_H #define MIMEINLINEFILE_H #include "mimefile.h" #include "smtpexports.h" class SMTP_EXPORT MimeInlineFile : public MimeFile { public: /* [1] Constructors and Destructors */ MimeInlineFile(QFile *f); ~MimeInlineFile(); /* [1] --- */ /* [2] Getters and Setters */ /* [2] --- */ protected: /* [3] Protected members */ /* [3] --- */ /* [4] Protected methods */ virtual void prepare(); /* [4] --- */ }; #endif // MIMEINLINEFILE_H nixnote2-2.0.2/email/mimemessage.cpp000066400000000000000000000144221315604104400173510ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #include "mimemessage.h" #include #include "quotedprintable.h" #include /* [1] Constructors and Destructors */ MimeMessage::MimeMessage(bool createAutoMimeContent) : hEncoding(MimePart::_8Bit) { if (createAutoMimeContent) this->content = new MimeMultiPart(); autoMimeContentCreated = createAutoMimeContent; } MimeMessage::~MimeMessage() { if (this->autoMimeContentCreated) { this->autoMimeContentCreated = false; delete (this->content); } } /* [1] --- */ /* [2] Getters and Setters */ MimePart& MimeMessage::getContent() { return *content; } void MimeMessage::setContent(MimePart *content) { if (this->autoMimeContentCreated) { this->autoMimeContentCreated = false; delete (this->content); } this->content = content; } void MimeMessage::setSender(EmailAddress* e) { this->sender = e; } void MimeMessage::addRecipient(EmailAddress* rcpt, RecipientType type) { switch (type) { case To: recipientsTo << rcpt; break; case Cc: recipientsCc << rcpt; break; case Bcc: recipientsBcc << rcpt; break; } } void MimeMessage::addTo(EmailAddress* rcpt) { this->recipientsTo << rcpt; } void MimeMessage::addCc(EmailAddress* rcpt) { this->recipientsCc << rcpt; } void MimeMessage::addBcc(EmailAddress* rcpt) { this->recipientsBcc << rcpt; } void MimeMessage::setSubject(const QString & subject) { this->subject = subject; } void MimeMessage::addPart(MimePart *part) { if (typeid(*content) == typeid(MimeMultiPart)) { ((MimeMultiPart*) content)->addPart(part); }; } void MimeMessage::setHeaderEncoding(MimePart::Encoding hEnc) { this->hEncoding = hEnc; } const EmailAddress & MimeMessage::getSender() const { return *sender; } const QList & MimeMessage::getRecipients(RecipientType type) const { switch (type) { default: case To: return recipientsTo; case Cc: return recipientsCc; case Bcc: return recipientsBcc; } } const QString & MimeMessage::getSubject() const { return subject; } const QList & MimeMessage::getParts() const { if (typeid(*content) == typeid(MimeMultiPart)) { return ((MimeMultiPart*) content)->getParts(); } else { QList *res = new QList(); res->append(content); return *res; } } /* [2] --- */ /* [3] Public Methods */ QString MimeMessage::toString() { QString mime; /* =========== MIME HEADER ============ */ /* ---------- Sender / From ----------- */ mime = "From:"; if (sender->getName() != "") { switch (hEncoding) { case MimePart::Base64: mime += " =?utf-8?B?" + QByteArray().append(sender->getName()).toBase64() + "?="; break; case MimePart::QuotedPrintable: mime += " =?utf-8?Q?" + QuotedPrintable::encode(QByteArray().append(sender->getName())).replace(' ', "_").replace(':',"=3A") + "?="; break; default: mime += " " + sender->getName(); } } mime += " <" + sender->getAddress() + ">\r\n"; /* ---------------------------------- */ /* ------- Recipients / To ---------- */ mime += "To:"; QList::iterator it; int i; for (i = 0, it = recipientsTo.begin(); it != recipientsTo.end(); ++it, ++i) { if (i != 0) { mime += ","; } if ((*it)->getName() != "") { switch (hEncoding) { case MimePart::Base64: mime += " =?utf-8?B?" + QByteArray().append((*it)->getName()).toBase64() + "?="; break; case MimePart::QuotedPrintable: mime += " =?utf-8?Q?" + QuotedPrintable::encode(QByteArray().append((*it)->getName())).replace(' ', "_").replace(':',"=3A") + "?="; break; default: mime += " " + (*it)->getName(); } } mime += " <" + (*it)->getAddress() + ">"; } mime += "\r\n"; /* ---------------------------------- */ /* ------- Recipients / Cc ---------- */ if (recipientsCc.size() != 0) { mime += "Cc:"; } for (i = 0, it = recipientsCc.begin(); it != recipientsCc.end(); ++it, ++i) { if (i != 0) { mime += ","; } if ((*it)->getName() != "") { switch (hEncoding) { case MimePart::Base64: mime += " =?utf-8?B?" + QByteArray().append((*it)->getName()).toBase64() + "?="; break; case MimePart::QuotedPrintable: mime += " =?utf-8?Q?" + QuotedPrintable::encode(QByteArray().append((*it)->getName())).replace(' ', "_").replace(':',"=3A") + "?="; break; default: mime += " " + (*it)->getName(); } } mime += " <" + (*it)->getAddress() + ">"; } if (recipientsCc.size() != 0) { mime += "\r\n"; } /* ---------------------------------- */ /* ------------ Subject ------------- */ mime += "Subject: "; switch (hEncoding) { case MimePart::Base64: mime += "=?utf-8?B?" + QByteArray().append(subject).toBase64() + "?="; break; case MimePart::QuotedPrintable: mime += "=?utf-8?Q?" + QuotedPrintable::encode(QByteArray().append(subject)).replace(' ', "_").replace(':',"=3A") + "?="; break; default: mime += subject; } /* ---------------------------------- */ mime += "\r\n"; mime += "MIME-Version: 1.0\r\n"; mime += content->toString(); return mime; } /* [3] --- */ nixnote2-2.0.2/email/mimemessage.h000066400000000000000000000042651315604104400170220ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #ifndef MIMEMESSAGE_H #define MIMEMESSAGE_H #include "mimepart.h" #include "mimemultipart.h" #include "emailaddress.h" #include #include "smtpexports.h" class SMTP_EXPORT MimeMessage : public QObject { public: enum RecipientType { To, // primary Cc, // carbon copy Bcc // blind carbon copy }; /* [1] Constructors and Destructors */ MimeMessage(bool createAutoMimeConent = true); ~MimeMessage(); /* [1] --- */ /* [2] Getters and Setters */ void setSender(EmailAddress* e); void addRecipient(EmailAddress* rcpt, RecipientType type = To); void addTo(EmailAddress* rcpt); void addCc(EmailAddress* rcpt); void addBcc(EmailAddress* rcpt); void setSubject(const QString & subject); void addPart(MimePart* part); void setHeaderEncoding(MimePart::Encoding); const EmailAddress & getSender() const; const QList & getRecipients(RecipientType type = To) const; const QString & getSubject() const; const QList & getParts() const; MimePart& getContent(); void setContent(MimePart *content); /* [2] --- */ /* [3] Public methods */ virtual QString toString(); /* [3] --- */ protected: /* [4] Protected members */ EmailAddress* sender; QList recipientsTo, recipientsCc, recipientsBcc; QString subject; MimePart *content; bool autoMimeContentCreated; MimePart::Encoding hEncoding; /* [4] --- */ }; #endif // MIMEMESSAGE_H nixnote2-2.0.2/email/mimemultipart.cpp000066400000000000000000000040711315604104400177450ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #include "mimemultipart.h" #include #include const QString MULTI_PART_NAMES[] = { "multipart/mixed", // Mixed "multipart/digest", // Digest "multipart/alternative", // Alternative "multipart/related", // Related "multipart/report", // Report "multipart/signed", // Signed "multipart/encrypted" // Encrypted }; MimeMultiPart::MimeMultiPart(MultiPartType type) { this->type = type; this->cType = MULTI_PART_NAMES[this->type]; this->cEncoding = _8Bit; QCryptographicHash md5(QCryptographicHash::Md5); md5.addData(QByteArray().append(qrand())); cBoundary = md5.result().toHex(); } MimeMultiPart::~MimeMultiPart() { } void MimeMultiPart::addPart(MimePart *part) { parts.append(part); } const QList & MimeMultiPart::getParts() const { return parts; } void MimeMultiPart::prepare() { QList::iterator it; content = ""; for (it = parts.begin(); it != parts.end(); it++) { content += "--" + cBoundary + "\r\n"; (*it)->prepare(); content += (*it)->toString(); }; content += "--" + cBoundary + "--\r\n"; MimePart::prepare(); } void MimeMultiPart::setMimeType(const MultiPartType type) { this->type = type; this->cType = MULTI_PART_NAMES[type]; } MimeMultiPart::MultiPartType MimeMultiPart::getMimeType() const { return type; } nixnote2-2.0.2/email/mimemultipart.h000066400000000000000000000035131315604104400174120ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #ifndef MIMEMULTIPART_H #define MIMEMULTIPART_H #include "mimepart.h" #include "smtpexports.h" class SMTP_EXPORT MimeMultiPart : public MimePart { Q_OBJECT public: /* [0] Enums */ enum MultiPartType { Mixed = 0, // RFC 2046, section 5.1.3 Digest = 1, // RFC 2046, section 5.1.5 Alternative = 2, // RFC 2046, section 5.1.4 Related = 3, // RFC 2387 Report = 4, // RFC 6522 Signed = 5, // RFC 1847, section 2.1 Encrypted = 6 // RFC 1847, section 2.2 }; /* [0] --- */ /* [1] Constructors and Destructors */ MimeMultiPart(const MultiPartType type = Related); ~MimeMultiPart(); /* [1] --- */ /* [2] Getters and Setters */ void setMimeType(const MultiPartType type); MultiPartType getMimeType() const; const QList & getParts() const; /* [2] --- */ /* [3] Public methods */ void addPart(MimePart *part); virtual void prepare(); /* [3] --- */ protected: QList< MimePart* > parts; MultiPartType type; }; #endif // MIMEMULTIPART_H nixnote2-2.0.2/email/mimepart.cpp000066400000000000000000000100711315604104400166670ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #include "mimepart.h" #include "quotedprintable.h" /* [1] Constructors and Destructors */ MimePart::MimePart() { cEncoding = _7Bit; prepared = false; cBoundary = ""; } MimePart::~MimePart() { return; } /* [1] --- */ /* [2] Getters and Setters */ void MimePart::setContent(const QByteArray & content) { this->content = content; } void MimePart::setHeader(const QString & header) { this->header = header; } void MimePart::addHeaderLine(const QString & line) { this->header += line + "\r\n"; } const QString& MimePart::getHeader() const { return header; } const QByteArray& MimePart::getContent() const { return content; } void MimePart::setContentId(const QString & cId) { this->cId = cId; } const QString & MimePart::getContentId() const { return this->cId; } void MimePart::setContentName(const QString & cName) { this->cName = cName; } const QString & MimePart::getContentName() const { return this->cName; } void MimePart::setContentType(const QString & cType) { this->cType = cType; } const QString & MimePart::getContentType() const { return this->cType; } void MimePart::setCharset(const QString & charset) { this->cCharset = charset; } const QString & MimePart::getCharset() const { return this->cCharset; } void MimePart::setEncoding(Encoding enc) { this->cEncoding = enc; } MimePart::Encoding MimePart::getEncoding() const { return this->cEncoding; } MimeContentFormatter& MimePart::getContentFormatter() { return this->formatter; } /* [2] --- */ /* [3] Public methods */ QString MimePart::toString() { if (!prepared) prepare(); return mimeString; } /* [3] --- */ /* [4] Protected methods */ void MimePart::prepare() { mimeString = QString(); /* === Header Prepare === */ /* Content-Type */ mimeString.append("Content-Type: ").append(cType); if (cName != "") mimeString.append("; name=\"").append(cName).append("\""); if (cCharset != "") mimeString.append("; charset=").append(cCharset); if (cBoundary != "") mimeString.append("; boundary=").append(cBoundary); mimeString.append("\r\n"); /* ------------ */ /* Content-Transfer-Encoding */ mimeString.append("Content-Transfer-Encoding: "); switch (cEncoding) { case _7Bit: mimeString.append("7bit\r\n"); break; case _8Bit: mimeString.append("8bit\r\n"); break; case Base64: mimeString.append("base64\r\n"); break; case QuotedPrintable: mimeString.append("quoted-printable\r\n"); break; } /* ------------------------ */ /* Content-Id */ if (cId != NULL) mimeString.append("Content-ID: <").append(cId).append(">\r\n"); /* ---------- */ /* Addition header lines */ mimeString.append(header).append("\r\n"); /* ------------------------- */ /* === End of Header Prepare === */ /* === Content === */ switch (cEncoding) { case _7Bit: mimeString.append(QString(content).toLatin1()); break; case _8Bit: mimeString.append(content); break; case Base64: mimeString.append(formatter.format(content.toBase64())); break; case QuotedPrintable: mimeString.append(formatter.format(QuotedPrintable::encode(content), true)); break; } mimeString.append("\r\n"); /* === End of Content === */ prepared = true; } /* [4] --- */ nixnote2-2.0.2/email/mimepart.h000066400000000000000000000043641315604104400163440ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #ifndef MIMEPART_H #define MIMEPART_H #include #include "mimecontentformatter.h" #include "smtpexports.h" class SMTP_EXPORT MimePart : public QObject { Q_OBJECT public: /* [0] Enumerations */ enum Encoding { _7Bit, _8Bit, Base64, QuotedPrintable }; /* [0] --- */ /* [1] Constructors and Destructors */ MimePart(); ~MimePart(); /* [1] --- */ /* [2] Getters and Setters */ const QString& getHeader() const; const QByteArray& getContent() const; void setContent(const QByteArray & content); void setHeader(const QString & header); void addHeaderLine(const QString & line); void setContentId(const QString & cId); const QString & getContentId() const; void setContentName(const QString & cName); const QString & getContentName() const; void setContentType(const QString & cType); const QString & getContentType() const; void setCharset(const QString & charset); const QString & getCharset() const; void setEncoding(Encoding enc); Encoding getEncoding() const; MimeContentFormatter& getContentFormatter(); /* [2] --- */ /* [3] Public methods */ virtual QString toString(); virtual void prepare(); /* [3] --- */ protected: /* [4] Protected members */ QString header; QByteArray content; QString cId; QString cName; QString cType; QString cCharset; QString cBoundary; Encoding cEncoding; QString mimeString; bool prepared; MimeContentFormatter formatter; /* [4] --- */ }; #endif // MIMEPART_H nixnote2-2.0.2/email/mimetext.cpp000066400000000000000000000023741315604104400167140ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #include "mimetext.h" /* [1] Constructors and Destructors */ MimeText::MimeText(const QString &txt) { this->text = txt; this->cType = "text/plain"; this->cCharset = "utf-8"; this->cEncoding = _8Bit; } MimeText::~MimeText() { } /* [1] --- */ /* [2] Getters and Setters */ void MimeText::setText(const QString & text) { this->text = text; } const QString & MimeText::getText() const { return text; } /* [2] --- */ /* [3] Protected Methods */ void MimeText::prepare() { this->content.clear(); this->content.append(text); /* !!! IMPORTANT !!! */ MimePart::prepare(); } /* [3] --- */ nixnote2-2.0.2/email/mimetext.h000066400000000000000000000023061315604104400163540ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #ifndef MIMETEXT_H #define MIMETEXT_H #include "mimepart.h" #include "smtpexports.h" class SMTP_EXPORT MimeText : public MimePart { public: /* [1] Constructors and Destructors */ MimeText(const QString &text = ""); ~MimeText(); /* [1] --- */ /* [2] Getters and Setters*/ void setText(const QString & text); const QString & getText() const; /* [2] --- */ protected: /* [3] Protected members */ QString text; /* [3] --- */ /* [4] Protected methods */ void prepare(); /* [4] --- */ }; #endif // MIMETEXT_H nixnote2-2.0.2/email/quotedprintable.cpp000066400000000000000000000036121315604104400202560ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #include "quotedprintable.h" QString QuotedPrintable::encode(const QByteArray &input) { QString output; char byte; const char hex[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; for (int i = 0; i < input.length() ; ++i) { byte = input[i]; if ((byte == 0x20) || ((byte >= 33) && (byte <= 126) && (byte != 61))) { output.append(byte); } else { output.append('='); output.append(hex[((byte >> 4) & 0x0F)]); output.append(hex[(byte & 0x0F)]); } } return output; } QByteArray QuotedPrintable::decode(const QString &input) { // 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F const int hexVal[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 13, 14, 15}; QByteArray output; for (int i = 0; i < input.length(); ++i) { if (input.at(i).toLatin1() == '=') { output.append((hexVal[input.at(i + 1).toLatin1() - '0'] << 4) + hexVal[input.at(i + 2).toLatin1() - '0']); i += 2; } else { output.append(input.at(i).toLatin1()); } } return output; } nixnote2-2.0.2/email/quotedprintable.h000066400000000000000000000017601315604104400177250ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #ifndef QUOTEDPRINTABLE_H #define QUOTEDPRINTABLE_H #include #include #include "smtpexports.h" class SMTP_EXPORT QuotedPrintable : public QObject { Q_OBJECT public: static QString encode(const QByteArray &input); static QByteArray decode(const QString &input); private: QuotedPrintable(); }; #endif // QUOTEDPRINTABLE_H nixnote2-2.0.2/email/smtpclient.cpp000066400000000000000000000272151315604104400172430ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #include "global.h" extern Global global; #include "smtpclient.h" #include #include /* [1] Constructors and destructors */ SmtpClient::SmtpClient(const QString & host, int port, ConnectionType connectionType) : socket(NULL), name("localhost"), authMethod(AuthPlain), connectionTimeout(5000), responseTimeout(5000), sendMessageTimeout(60000) { setConnectionType(connectionType); this->host = host; this->port = port; connect(socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(socketStateChanged(QAbstractSocket::SocketState))); connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError))); connect(socket, SIGNAL(readyRead()), this, SLOT(socketReadyRead())); } SmtpClient::~SmtpClient() { if (socket) delete socket; } /* [1] --- */ /* [2] Getters and Setters */ void SmtpClient::setUser(const QString &user) { this->user = user; } void SmtpClient::setPassword(const QString &password) { this->password = password; } void SmtpClient::setAuthMethod(AuthMethod method) { this->authMethod = method; } void SmtpClient::setHost(const QString &host) { this->host = host; } void SmtpClient::setPort(int port) { this->port = port; } void SmtpClient::setConnectionType(ConnectionType ct) { this->connectionType = ct; if (socket) delete socket; switch (connectionType) { case TcpConnection: socket = new QTcpSocket(this); break; case SslConnection: case TlsConnection: socket = new QSslSocket(this); } } const QString& SmtpClient::getHost() const { return this->host; } const QString& SmtpClient::getUser() const { return this->user; } const QString& SmtpClient::getPassword() const { return this->password; } SmtpClient::AuthMethod SmtpClient::getAuthMethod() const { return this->authMethod; } int SmtpClient::getPort() const { return this->port; } SmtpClient::ConnectionType SmtpClient::getConnectionType() const { return connectionType; } const QString& SmtpClient::getName() const { return this->name; } void SmtpClient::setName(const QString &name) { this->name = name; } const QString & SmtpClient::getResponseText() const { return responseText; } int SmtpClient::getResponseCode() const { return responseCode; } QTcpSocket* SmtpClient::getSocket() { return socket; } int SmtpClient::getConnectionTimeout() const { return connectionTimeout; } void SmtpClient::setConnectionTimeout(int msec) { connectionTimeout = msec; } int SmtpClient::getResponseTimeout() const { return responseTimeout; } void SmtpClient::setResponseTimeout(int msec) { responseTimeout = msec; } int SmtpClient::getSendMessageTimeout() const { return sendMessageTimeout; } void SmtpClient::setSendMessageTimeout(int msec) { sendMessageTimeout = msec; } /* [2] --- */ /* [3] Public methods */ bool SmtpClient::connectToHost() { switch (connectionType) { case TlsConnection: case TcpConnection: socket->connectToHost(host, port); break; case SslConnection: ((QSslSocket*) socket)->connectToHostEncrypted(host, port); break; } // Tries to connect to server if (!socket->waitForConnected(connectionTimeout)) { emit smtpError(ConnectionTimeoutError); return false; } try { // Wait for the server's response waitForResponse(); // If the response code is not 220 (Service ready) // means that is something wrong with the server if (responseCode != 220) { emit smtpError(ServerError); return false; } // Send a EHLO/HELO message to the server // The client's first command must be EHLO/HELO sendMessage("EHLO " + name); // Wait for the server's response waitForResponse(); // The response code needs to be 250. if (responseCode != 250) { emit smtpError(ServerError); return false; } if (connectionType == TlsConnection) { // send a request to start TLS handshake sendMessage("STARTTLS"); // Wait for the server's response waitForResponse(); // The response code needs to be 220. if (responseCode != 220) { emit smtpError(ServerError); return false; }; ((QSslSocket*) socket)->startClientEncryption(); if (!((QSslSocket*) socket)->waitForEncrypted(connectionTimeout)) { qDebug() << ((QSslSocket*) socket)->errorString(); emit smtpError(ConnectionTimeoutError); return false; } // Send ELHO one more time sendMessage("EHLO " + name); // Wait for the server's response waitForResponse(); // The response code needs to be 250. if (responseCode != 250) { emit smtpError(ServerError); return false; } } } catch (ResponseTimeoutException) { return false; } catch (SendMessageTimeoutException) { return false; } // If no errors occurred the function returns true. return true; } bool SmtpClient::login() { return login(user, password, authMethod); } bool SmtpClient::login(const QString &user, const QString &password, AuthMethod method) { try { if (method == AuthPlain) { // Sending command: AUTH PLAIN base64('\0' + username + '\0' + password) sendMessage("AUTH PLAIN " + QByteArray().append((char) 0).append(user).append((char) 0).append(password).toBase64()); // Wait for the server's response waitForResponse(); // If the response is not 235 then the authentication was faild if (responseCode != 235) { emit smtpError(AuthenticationFailedError); return false; } } else if (method == AuthLogin) { // Sending command: AUTH LOGIN sendMessage("AUTH LOGIN"); // Wait for 334 response code waitForResponse(); if (responseCode != 334) { emit smtpError(AuthenticationFailedError); return false; } // Send the username in base64 sendMessage(QByteArray().append(user).toBase64()); // Wait for 334 waitForResponse(); if (responseCode != 334) { emit smtpError(AuthenticationFailedError); return false; } // Send the password in base64 sendMessage(QByteArray().append(password).toBase64()); // Wait for the server's response waitForResponse(); // If the response is not 235 then the authentication was faild if (responseCode != 235) { emit smtpError(AuthenticationFailedError); return false; } } } catch (ResponseTimeoutException) { // Response Timeout exceeded emit smtpError(AuthenticationFailedError); return false; } catch (SendMessageTimeoutException) { // Send Timeout exceeded emit smtpError(AuthenticationFailedError); return false; } return true; } bool SmtpClient::sendMail(MimeMessage& email) { try { // Send the MAIL command with the sender sendMessage("MAIL FROM: <" + email.getSender().getAddress() + ">"); waitForResponse(); if (responseCode != 250) return false; // Send RCPT command for each recipient QList::const_iterator it, itEnd; // To (primary recipients) for (it = email.getRecipients().begin(), itEnd = email.getRecipients().end(); it != itEnd; ++it) { sendMessage("RCPT TO: <" + (*it)->getAddress() + ">"); waitForResponse(); QLOG_DEBUG() << "SMTP Response Code: " << responseCode; if (responseCode != 250) return false; } // Cc (carbon copy) for (it = email.getRecipients(MimeMessage::Cc).begin(), itEnd = email.getRecipients(MimeMessage::Cc).end(); it != itEnd; ++it) { sendMessage("RCPT TO: <" + (*it)->getAddress() + ">"); waitForResponse(); QLOG_DEBUG() << "SMTP Response Code: " << responseCode; if (responseCode != 250) return false; } // Bcc (blind carbon copy) for (it = email.getRecipients(MimeMessage::Bcc).begin(), itEnd = email.getRecipients(MimeMessage::Bcc).end(); it != itEnd; ++it) { sendMessage("RCPT TO: <" + (*it)->getAddress() + ">"); waitForResponse(); QLOG_DEBUG() << "SMTP Response Code: " << responseCode; if (responseCode != 250) return false; } // Send DATA command sendMessage("DATA"); waitForResponse(); QLOG_DEBUG() << "SMTP Send Data Response: " << responseCode; if (responseCode != 354) return false; sendMessage(email.toString()); // Send \r\n.\r\n to end the mail data sendMessage("."); waitForResponse(); QLOG_DEBUG() << "SMTP Response Code: " << responseCode; if (responseCode != 250) return false; } catch (ResponseTimeoutException) { QLOG_DEBUG() << "SendTimeoutException"; return false; } catch (SendMessageTimeoutException) { QLOG_DEBUG() << "SendMessageTimeoutException"; return false; } return true; } void SmtpClient::quit() { sendMessage("QUIT"); } /* [3] --- */ /* [4] Protected methods */ void SmtpClient::waitForResponse() { do { if (!socket->waitForReadyRead(responseTimeout)) { emit smtpError(ResponseTimeoutError); throw ResponseTimeoutException(); } while (socket->canReadLine()) { // Save the server's response responseText = socket->readLine(); // Extract the respose code from the server's response (first 3 digits) responseCode = responseText.left(3).toInt(); if (responseCode / 100 == 4) emit smtpError(ServerError); if (responseCode / 100 == 5) emit smtpError(ClientError); if (responseText[3] == ' ') { return; } } } while (true); } void SmtpClient::sendMessage(const QString &text) { socket->write(text.toUtf8() + "\r\n"); if (! socket->waitForBytesWritten(sendMessageTimeout)) { emit smtpError(SendDataTimeoutError); throw SendMessageTimeoutException(); } } /* [4] --- */ /* [5] Slots for the socket's signals */ void SmtpClient::socketStateChanged(QAbstractSocket::SocketState /*state*/) { } void SmtpClient::socketError(QAbstractSocket::SocketError /*socketError*/) { } void SmtpClient::socketReadyRead() { } /* [5] --- */ nixnote2-2.0.2/email/smtpclient.h000066400000000000000000000071441315604104400167070ustar00rootroot00000000000000/* Copyright (c) 2011-2012 - TÅ‘kés Attila This file is part of SmtpClient for Qt. 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 2.1 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. See the LICENSE file for more details. */ #ifndef SMTPCLIENT_H #define SMTPCLIENT_H #include #include #include "mimemessage.h" #include "smtpexports.h" class SMTP_EXPORT SmtpClient : public QObject { Q_OBJECT public: /* [0] Enumerations */ enum AuthMethod { AuthPlain, AuthLogin }; enum SmtpError { ConnectionTimeoutError, ResponseTimeoutError, SendDataTimeoutError, AuthenticationFailedError, ServerError, // 4xx smtp error ClientError // 5xx smtp error }; enum ConnectionType { TcpConnection, SslConnection, TlsConnection // STARTTLS }; /* [0] --- */ /* [1] Constructors and Destructors */ SmtpClient(const QString & host = "localhost", int port = 25, ConnectionType ct = TcpConnection); ~SmtpClient(); /* [1] --- */ /* [2] Getters and Setters */ const QString& getHost() const; void setHost(const QString &host); int getPort() const; void setPort(int port); const QString& getName() const; void setName(const QString &name); ConnectionType getConnectionType() const; void setConnectionType(ConnectionType ct); const QString & getUser() const; void setUser(const QString &user); const QString & getPassword() const; void setPassword(const QString &password); SmtpClient::AuthMethod getAuthMethod() const; void setAuthMethod(AuthMethod method); const QString & getResponseText() const; int getResponseCode() const; int getConnectionTimeout() const; void setConnectionTimeout(int msec); int getResponseTimeout() const; void setResponseTimeout(int msec); int getSendMessageTimeout() const; void setSendMessageTimeout(int msec); QTcpSocket* getSocket(); /* [2] --- */ /* [3] Public methods */ bool connectToHost(); bool login(); bool login(const QString &user, const QString &password, AuthMethod method = AuthLogin); bool sendMail(MimeMessage& email); void quit(); /* [3] --- */ protected: /* [4] Protected members */ QTcpSocket *socket; QString host; int port; ConnectionType connectionType; QString name; QString user; QString password; AuthMethod authMethod; int connectionTimeout; int responseTimeout; int sendMessageTimeout; QString responseText; int responseCode; class ResponseTimeoutException {}; class SendMessageTimeoutException {}; /* [4] --- */ /* [5] Protected methods */ void waitForResponse(); void sendMessage(const QString &text); /* [5] --- */ protected slots: /* [6] Protected slots */ void socketStateChanged(QAbstractSocket::SocketState state); void socketError(QAbstractSocket::SocketError error); void socketReadyRead(); /* [6] --- */ signals: /* [7] Signals */ void smtpError(SmtpClient::SmtpError e); /* [7] --- */ }; #endif // SMTPCLIENT_H nixnote2-2.0.2/email/smtpexports.h000066400000000000000000000002511315604104400171250ustar00rootroot00000000000000#ifndef SMTPEXPORTS_H #define SMTPEXPORTS_H #ifdef SMTP_BUILD #define SMTP_EXPORT Q_DECL_EXPORT #else #define SMTP_EXPORT Q_DECL_IMPORT #endif #endif // SMTPEXPORTS_H nixnote2-2.0.2/exits/000077500000000000000000000000001315604104400144135ustar00rootroot00000000000000nixnote2-2.0.2/exits/exitmanager.cpp000066400000000000000000000050671315604104400174330ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2017 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "exitmanager.h" #include "global.h" #include "exits/exitpoint.h" #include extern Global global; ExitManager::ExitManager(QObject *parent) : QObject(parent) { exitPoints = new QHash(); exitPoints->clear(); } void ExitManager::loadExits() { exitPoints->clear(); loadExitPoint("ExitPoint_LoadNote"); loadExitPoint("ExitPoint_SaveNote"); loadExitPoint("ExitPoint_ImportKeep"); loadExitPoint("ExitPoint_ImportDelete"); } void ExitManager::loadExitPoint(QString name, int goodVersion) { exitPoints->remove(name); global.settings->beginGroup(name); bool enabled = global.settings->value("enabled", false).toBool(); QString fileName = global.settings->value("script", "").toString(); int version = global.settings->value("version", 1).toInt(); global.settings->endGroup(); if (fileName =="") { QLOG_ERROR() << tr("Script filename is blank. Disabling exit ") << name; enabled = false; } if (version != goodVersion) { enabled = false; QLOG_ERROR() << tr("Unknown script version. Disabling exit.") << name; } QString script; QFile f(fileName); if (!f.exists()) { QLOG_ERROR() << tr("Script file doesn't exist or cannot be read. Disabling exit ") << name; enabled = false; } else { f.open(QIODevice::ReadOnly); script = f.readAll(); } ExitPoint *point = new ExitPoint(); point->setEnabled(enabled); point->setFileName(fileName); point->setVersion(version); point->setScript(script); point->setExitName(name); exitPoints->insert(name, point); } nixnote2-2.0.2/exits/exitmanager.h000066400000000000000000000025771315604104400171030ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2017 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef EXITMANAGER_H #define EXITMANAGER_H #include //#include "exits/exitpoint.h" #include class ExitPoint; class ExitManager : public QObject { Q_OBJECT public: explicit ExitManager(QObject *parent = 0); void loadExits(); void loadExitPoint(QString name, int goodVersion=1); QHash *exitPoints; // hash of all exit points signals: public slots: }; #endif // EXITMANAGER_H nixnote2-2.0.2/exits/exitpoint.cpp000066400000000000000000000145251315604104400171510ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2017 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "exitpoint.h" #include "global.h" extern Global global; ExitPoint::ExitPoint(QObject *parent) : QObject(parent) { this->setExitName(""); this->setEnabled(false); this->setVersion(1); this->setScript(""); } void ExitPoint::setExitName(QString value) { exitName = value; } QString ExitPoint::getExitName() { return exitName; } void ExitPoint::setFileName(QString value) { fileName = value; } QString ExitPoint::getFileName() { return fileName; } void ExitPoint::setEnabled(bool value) { enabled = value; } bool ExitPoint::getEnabled() { return enabled; } void ExitPoint::setVersion(int value) { version=value; } int ExitPoint::getVersion() { return version; } QString ExitPoint::getScript() { return script; } void ExitPoint::setScript(QString value) { script = value; } void ExitPoint::log(QString value) { QLOG_INFO() << value; } ExitPoint_NoteEdit::ExitPoint_NoteEdit(ExitPoint *parent) : ExitPoint(parent) { exitReady = false; title = ""; title_isSet = false; title_isModified = false; contents = ""; contents_isSet = false; contents_isModified = false; contents_is_dirty = false; notebook = new QString(""); notebook_isSet = false; notebook_isModified = false; tags.clear(); tags_isSet = false; tags_isModified = false; updateDate_isSet = false; updateDate_isModified = false; subjectDate_isSet = false; subjectDate_isModified = false; creationDate_isModified = false; creationDate_isSet = false; } void ExitPoint_NoteEdit::setExitReady() { exitReady = true; } void ExitPoint_NoteEdit::setTitle(QString t) { if (exitReady) title_isModified = true; title_isSet = true; title= t; } QString ExitPoint_NoteEdit::getTitle() { return title; } bool ExitPoint_NoteEdit::isTitleModified() { return title_isModified; } void ExitPoint_NoteEdit::setContents(QString contents) { if (exitReady) contents_isModified = true; contents_isSet = true; this->contents = contents; } QString ExitPoint_NoteEdit::getContents() { return contents; } QString ExitPoint_NoteEdit::getContentsPlainText() { if (!contents_isSet) return ""; QTextDocument doc; doc.setHtml(contents); return doc.toPlainText(); } void ExitPoint_NoteEdit::setContentsDirty(bool value) { contents_is_dirty = value; } bool ExitPoint_NoteEdit::isContentsDirty() { return contents_is_dirty; } bool ExitPoint_NoteEdit::isContentsModified() { return contents_isModified; } void ExitPoint_NoteEdit::setNotebook(QString notebook) { if (exitReady) notebook_isModified = true; notebook_isSet = true; if (this->notebook != NULL) delete this->notebook; this->notebook = new QString(notebook); } QString ExitPoint_NoteEdit::getNotebook() { return *notebook; } bool ExitPoint_NoteEdit::isNotebookModified() { return notebook_isModified; } void ExitPoint_NoteEdit::setTags(QStringList tags) { this->tags.append(tags); if (exitReady) tags_isModified = true; tags_isSet = true; } QStringList ExitPoint_NoteEdit::getTags() { return tags; } bool ExitPoint_NoteEdit::isTagsModified() { return tags_isModified; } int ExitPoint_NoteEdit::getTagsSize() { return tags.size(); } void ExitPoint_NoteEdit::insertTag(QString newTag) { if (!tags.contains(newTag, Qt::CaseInsensitive)) tags.append(newTag); tags_isModified = true; } void ExitPoint_NoteEdit::removeTag(QString oldTag) { tags_isModified = true; tags.removeAll(oldTag); } QString ExitPoint_NoteEdit::getTagAt(int pos) { if (tags.size() < pos+1) return ""; return tags.at(pos); } void ExitPoint_NoteEdit::setSubjectDate(qint64 msecs) { this->subjectDate = QDateTime::fromMSecsSinceEpoch(msecs); subjectDate_isSet = true; if (exitReady) subjectDate_isModified=true; } void ExitPoint_NoteEdit::setUpdatedDate(qint64 msecs) { this->updateDate = QDateTime::fromMSecsSinceEpoch(msecs); updateDate_isSet = true; if (exitReady) updateDate_isModified=true; } void ExitPoint_NoteEdit::setCreationDate(qint64 msecs) { this->creationDate = QDateTime::fromMSecsSinceEpoch(msecs); creationDate_isSet = true; if (exitReady) creationDate_isModified=true; } QString ExitPoint_NoteEdit::getCreatedDate(QString format) { if (creationDate_isSet) return creationDate.toString(format); else return 0; } QString ExitPoint_NoteEdit::getUpdatedDate(QString format) { if (updateDate_isSet) return updateDate.toString(format); else return 0; } QString ExitPoint_NoteEdit::getSubjectDate(QString format) { if (subjectDate_isSet) return subjectDate.toString(format); else return 0; } ExitPoint_FileImport::ExitPoint_FileImport(ExitPoint_NoteEdit *parent) : ExitPoint_NoteEdit(parent) { file = ""; importKeep = false; } bool ExitPoint_FileImport::isImportKeep() { if (importKeep) return true; return false; } bool ExitPoint_FileImport::isImportDelete() { return !isImportKeep(); } QString ExitPoint_FileImport::getFileName() { return file; } void ExitPoint_FileImport::setFileName(QString value) { file = value; } void ExitPoint_FileImport::setImportKeep(bool value) { importKeep = value; } void ExitPoint_FileImport::setImportDelete(bool value) { importKeep = !value; } nixnote2-2.0.2/exits/exitpoint.h000066400000000000000000000072361315604104400166170ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2017 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef EXITPOINT_H #define EXITPOINT_H #include #include #include class ExitPoint : public QObject { Q_OBJECT private: QString exitName; QString fileName; bool enabled; int version; QString script; public: explicit ExitPoint(QObject *parent = 0); void setExitName(QString); QString getExitName(); void setFileName(QString); QString getFileName(); void setEnabled(bool); bool getEnabled(); void setVersion(int); int getVersion(); void setScript(QString); QString getScript(); signals: public slots: void log(QString vaule); }; // Exit parameters used when saving a note in the editor class ExitPoint_NoteEdit : public ExitPoint { Q_OBJECT private: bool exitReady; QString title; bool title_isSet; bool title_isModified; QString contents; bool contents_isSet; bool contents_isModified; bool contents_is_dirty; QString *notebook; bool notebook_isSet; bool notebook_isModified; QStringList tags; bool tags_isSet; bool tags_isModified; QDateTime subjectDate; bool subjectDate_isSet; bool subjectDate_isModified; QDateTime updateDate; bool updateDate_isSet; bool updateDate_isModified; QDateTime creationDate; bool creationDate_isSet; bool creationDate_isModified; public: explicit ExitPoint_NoteEdit(ExitPoint *parent = 0); void setExitReady(); void setTags(QStringList); QStringList getTags(); public slots: void setTitle(QString); QString getTitle(); bool isTitleModified(); void setContents(QString); QString getContents(); QString getContentsPlainText(); bool isContentsModified(); bool isContentsDirty(); void setContentsDirty(bool); void setNotebook(QString); QString getNotebook(); bool isNotebookModified(); bool isTagsModified(); int getTagsSize(); void insertTag(QString); void removeTag(QString); QString getTagAt(int); QString getCreatedDate(QString format); QString getSubjectDate(QString format); QString getUpdatedDate(QString format); void setUpdatedDate(qint64 msecs); void setCreationDate(qint64 msecs); void setSubjectDate(qint64 msecs); }; class ExitPoint_FileImport : public ExitPoint_NoteEdit { Q_OBJECT private: QString file; bool importKeep; void setImportKeep(bool); void setImportDelete(bool); public: explicit ExitPoint_FileImport(ExitPoint_NoteEdit *parent = 0); void setFileName(QString); public slots: bool isImportDelete(); bool isImportKeep(); QString getFileName(); }; #endif // EXITPOINT_H nixnote2-2.0.2/filters/000077500000000000000000000000001315604104400147275ustar00rootroot00000000000000nixnote2-2.0.2/filters/filtercriteria.cpp000066400000000000000000000146131315604104400204500ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "filtercriteria.h" FilterCriteria::FilterCriteria(QObject *parent) : QObject(parent) { valueSet = false; notebook = NULL; notebookIsSet = false; tags.clear(); tagsIsSet = false; savedSearch = NULL; savedSearchIsSet = false; searchString = ""; searchStringIsSet = false; attribute = NULL; attributeIsSet = false; deletedOnly = false; deletedOnlyIsSet = false; content = -1; contentIsSet = false; favoriteIsSet = false; favoriteLid = -1; resetFavorite = false; resetNotebook = false; resetTags = false; resetSavedSearch = false; resetAttribute = false; resetDeletedOnly = false; resetLid = false; resetSearchString = false; selectedNotesIsSet = false; } bool FilterCriteria::isSet() { return valueSet; } QTreeWidgetItem* FilterCriteria::getNotebook() { return notebook; } void FilterCriteria::setNotebook(QTreeWidgetItem &item) { notebook = &item; notebookIsSet = true; valueSet = true; } void FilterCriteria::unsetNotebook() { notebookIsSet = false; } bool FilterCriteria::isNotebookSet() { return notebookIsSet; } QList FilterCriteria::getTags() { return tags; } void FilterCriteria::setTags(QList &items) { tags.append(items); tagsIsSet = true; valueSet = true; } bool FilterCriteria::isTagsSet() { return tagsIsSet; } void FilterCriteria::unsetTags() { tagsIsSet = false; } NSearchViewItem* FilterCriteria::getSavedSearch() { return savedSearch; } void FilterCriteria::setSavedSearch(NSearchViewItem &item) { savedSearch = &item; savedSearchIsSet = true; valueSet = true; } bool FilterCriteria::isSavedSearchSet() { return savedSearchIsSet; } void FilterCriteria::unsetSavedSearch() { savedSearchIsSet = false; } QTreeWidgetItem* FilterCriteria::getAttribute() { return attribute; } void FilterCriteria::setAttribute(QTreeWidgetItem &item) { attribute = &item; attributeIsSet = true; valueSet = true; } bool FilterCriteria::isAttributeSet() { return attributeIsSet; } void FilterCriteria::unsetAttribute() { attributeIsSet = false; } bool FilterCriteria::getDeletedOnly() { return deletedOnly; } void FilterCriteria::setDeletedOnly(bool value) { deletedOnly = value; deletedOnlyIsSet = true; valueSet = true; } bool FilterCriteria::isDeletedOnlySet() { return deletedOnlyIsSet; } void FilterCriteria::unsetDeletedOnly() { deletedOnlyIsSet = false; } qint32 FilterCriteria::getLid() { return content; } void FilterCriteria::setLid(qint32 item) { content = item; contentIsSet = true; valueSet = true; if (!selectedNotes.contains(item) && item >= 0) { selectedNotes.append(item); selectedNotesIsSet = true; } } bool FilterCriteria::isLidSet() { return contentIsSet; } void FilterCriteria::unsetLid() { contentIsSet = false; } void FilterCriteria::getSelectedNotes(QList &items) { items.clear(); if (selectedNotesIsSet) { for (qint32 i=0; i &items) { selectedNotesIsSet = true; valueSet = true; selectedNotes.clear(); for (qint32 i=0; iselectedNotes.clear(); } QString FilterCriteria::getSearchString() { return searchString; } void FilterCriteria::setSearchString(QString string) { searchString = string; searchStringIsSet = true; valueSet = true; } bool FilterCriteria::isSearchStringSet() { return searchStringIsSet; } void FilterCriteria::unsetSearchString() { searchStringIsSet = false; } qint32 FilterCriteria::getFavorite() { return favoriteLid; } void FilterCriteria::setFavorite(qint32 lid) { favoriteLid = lid; favoriteIsSet = true; valueSet = true; } bool FilterCriteria::isFavoriteSet() { return favoriteIsSet; } void FilterCriteria::unsetFavorite() { favoriteIsSet = false; } void FilterCriteria::duplicate(FilterCriteria &newFilter) { if (favoriteIsSet) newFilter.setFavorite(favoriteLid); if (attributeIsSet) newFilter.setAttribute(*attribute); if (notebookIsSet) newFilter.setNotebook(*this->notebook); if (contentIsSet) newFilter.setLid(content); for (int i=0; i #include "gui/nnotebookviewitem.h" #include "gui/ntagviewitem.h" #include "gui/nsearchviewitem.h" #include #include class FilterCriteria : public QObject { Q_OBJECT private: bool valueSet; QTreeWidgetItem *notebook; bool notebookIsSet; QList tags; bool tagsIsSet; NSearchViewItem *savedSearch; bool savedSearchIsSet; QTreeWidgetItem *attribute; bool attributeIsSet; QString searchString; bool searchStringIsSet; qint32 favoriteLid; bool favoriteIsSet; bool deletedOnly; bool deletedOnlyIsSet; qint32 content; bool contentIsSet; QList selectedNotes; bool selectedNotesIsSet; public: explicit FilterCriteria(QObject *parent = 0); bool isSet(); QTreeWidgetItem* getNotebook(); void setNotebook(QTreeWidgetItem &item); bool isNotebookSet(); void unsetNotebook(); bool resetNotebook; QList getTags(); void setTags(QList &items); bool isTagsSet(); void unsetTags(); bool resetTags; NSearchViewItem* getSavedSearch(); void setSavedSearch(NSearchViewItem &item); bool isSavedSearchSet(); void unsetSavedSearch(); bool resetSavedSearch; QTreeWidgetItem* getAttribute(); void setAttribute(QTreeWidgetItem &item); bool isAttributeSet(); void unsetAttribute(); bool resetAttribute; bool getDeletedOnly(); void setDeletedOnly(bool value); bool isDeletedOnlySet(); void unsetDeletedOnly(); bool resetDeletedOnly; qint32 getLid(); void setLid(qint32 content); bool isLidSet(); void unsetLid(); bool resetLid; void getSelectedNotes(QList &items); void setSelectedNotes(QList &items); bool isSelectedNotesSet(); void unsetSelectedNotes(); bool resetSelectedNotes; QString getSearchString(); void setSearchString(QString string); bool isSearchStringSet(); void unsetSearchString(); bool resetSearchString; qint32 getFavorite(); void setFavorite(qint32 lid); bool isFavoriteSet(); void unsetFavorite(); bool resetFavorite; void duplicate(FilterCriteria &criteria); signals: public slots: }; #endif // FILTERCRITERIA_H nixnote2-2.0.2/filters/filterengine.cpp000066400000000000000000003165451315604104400201240ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "filterengine.h" #include "filtercriteria.h" #include "global.h" #include "sql/notetable.h" #include "sql/notebooktable.h" #include "sql/tagtable.h" #include "gui/nattributetree.h" #include "sql/notebooktable.h" #include "sql/resourcetable.h" #include "sql/nsqlquery.h" #include "sql/favoritesrecord.h" #include "sql/favoritestable.h" #include extern Global global; FilterEngine::FilterEngine(QObject *parent) : QObject(parent) { } void FilterEngine::filter(FilterCriteria *newCriteria, QList *results) { QLOG_TRACE_IN(); bool internalSearch = true; NSqlQuery sql(global.db); QLOG_DEBUG() << "Purging filters"; sql.exec("delete from filter"); QLOG_DEBUG() << "Resetting filter table"; sql.prepare("Insert into filter (lid) select lid from NoteTable where notebooklid not in (select lid from datastore where key=:closedNotebooks)"); sql.bindValue(":closedNotebooks", NOTEBOOK_IS_CLOSED); sql.exec(); sql.finish(); QLOG_DEBUG() << "Reset complete"; FilterCriteria *criteria = newCriteria; if (criteria == NULL) criteria = global.filterCriteria[global.filterPosition]; else internalSearch = false; QLOG_DEBUG() << "Filtering favorite"; filterFavorite(criteria); QLOG_DEBUG() << "Filtering notebooks"; filterNotebook(criteria); QLOG_DEBUG() << "Filtering tags"; filterTags(criteria); QLOG_DEBUG() << "Filtering trash"; filterTrash(criteria); QLOG_DEBUG() << "Filtering search string"; filterSearchString(criteria); QLOG_DEBUG() << "Filtering attributes"; filterAttributes(criteria); QLOG_DEBUG() << "Filtering complete"; // Now, re-insert any pinned notes sql.prepare("Insert into filter (lid) select lid from Datastore where key=:key and lid not in (select lid from filter)"); sql.bindValue(":key", NOTE_ISPINNED); sql.exec(); // Remove any selected notes that are not in the filter. NSqlQuery query(global.db); QList goodLids; query.exec("select lid from filter;"); while (query.next()) { goodLids.append(query.value(0).toInt()); } query.finish(); if (internalSearch) { // Remove any selected notes that are not in the filter. if (global.filterCriteria.size() > 0) { FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; QList selectedLids; criteria->getSelectedNotes(selectedLids); for (int i=selectedLids.size()-1; i>=0; i--) { if (!goodLids.contains(selectedLids[i])) selectedLids.removeAll(selectedLids[i]); } criteria->setSelectedNotes(selectedLids); } } else { results->clear(); for (int i=0; icontains(goodLids[i])) { results->append(goodLids[i]); } } } } void FilterEngine::filterAttributes(FilterCriteria *criteria) { if (!criteria->isSet() || !criteria->isAttributeSet()) return; QLOG_TRACE_IN(); int attribute = criteria->getAttribute()->data(0,Qt::UserRole).toInt(); NSqlQuery sql(global.db); QDateTime dt; dt.setDate(QDate().currentDate()); int dow = QDate().currentDate().dayOfWeek(); int moy = QDate().currentDate().month(); int dom = QDate().currentDate().day(); dt.setTime(QTime(0,0,0,1)); switch (attribute) { case CREATED_SINCE_TODAY: sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))"); sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_SINCE_YESTERDAY: dt = dt.addDays(-1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_SINCE_THIS_WEEK: dt = dt.addDays(-1*dow); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_SINCE_LAST_WEEK: dt = dt.addDays(-1*dow-7); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_SINCE_THIS_MONTH: dt = dt.addDays(-1*dom+1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_SINCE_LAST_MONTH: dt = dt.addDays(-1*dom+1); dt = dt.addMonths(-1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_SINCE_THIS_YEAR: dt = dt.addDays(-1*dom+1); dt = dt.addMonths(-1*moy+1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_SINCE_LAST_YEAR: dt = dt.addDays(-1*dom+1); dt = dt.addMonths(-1*moy+1); dt = dt.addYears(-1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_BEFORE_TODAY: sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))"); sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_BEFORE_YESTERDAY: dt = dt.addDays(-1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_BEFORE_THIS_WEEK: dt = dt.addDays(-1*dow); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_BEFORE_LAST_WEEK: dt = dt.addDays(-1*dow-7); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_BEFORE_THIS_MONTH: dt = dt.addDays(-1*dom+1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_BEFORE_LAST_MONTH: dt = dt.addDays(-1*dom+1); dt = dt.addMonths(-1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_BEFORE_THIS_YEAR: dt = dt.addDays(-1*dom+1); dt = dt.addMonths(-1*moy+1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CREATED_BEFORE_LAST_YEAR: dt = dt.addDays(-1*dom+1); dt = dt.addMonths(-1*moy+1); dt = dt.addYears(-1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_CREATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_SINCE_TODAY: sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))"); sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_SINCE_YESTERDAY: dt = dt.addDays(-1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_SINCE_THIS_WEEK: dt = dt.addDays(-1*dow); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_SINCE_LAST_WEEK: dt = dt.addDays(-1*dow-7); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_SINCE_THIS_MONTH: dt = dt.addDays(-1*dom+1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_SINCE_LAST_MONTH: dt = dt.addDays(-1*dom+1); dt = dt.addMonths(-1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_SINCE_THIS_YEAR: dt = dt.addDays(-1*dom+1); dt = dt.addMonths(-1*moy+1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_SINCE_LAST_YEAR: dt = dt.addDays(-1*dom+1); dt = dt.addMonths(-1*moy+1); dt = dt.addYears(-1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_BEFORE_TODAY: sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))"); sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_BEFORE_YESTERDAY: dt = dt.addDays(-1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_BEFORE_THIS_WEEK: dt = dt.addDays(-1*dow); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_BEFORE_LAST_WEEK: dt = dt.addDays(-1*dow-7); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_BEFORE_THIS_MONTH: dt = dt.addDays(-1*dom+1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_BEFORE_LAST_MONTH: dt = dt.addDays(-1*dom+1); dt = dt.addMonths(-1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_BEFORE_THIS_YEAR: dt = dt.addDays(-1*dom+1); dt = dt.addMonths(-1*moy+1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case MODIFIED_BEFORE_LAST_YEAR: dt = dt.addDays(-1*dom+1); dt = dt.addMonths(-1*moy+1); dt = dt.addYears(-1); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; sql.bindValue(":key", NOTE_UPDATED_DATE); sql.bindValue(":data", dt.toMSecsSinceEpoch()); break; case CONTAINS_IMAGES: sql.prepare("Delete from filter where lid not in (select data from datastore where key=:notelidkey and lid in (select lid from DataStore where key=:mimekey and data like 'image/%'))"); sql.bindValue(":notelidkey", RESOURCE_NOTE_LID); sql.bindValue(":mimekey", RESOURCE_MIME); break; case CONTAINS_AUDIO: sql.prepare("Delete from filter where lid not in (select data from datastore where key=:notelidkey and lid in (select lid from DataStore where key=:mimekey and data like 'audio/%'))"); sql.bindValue(":notelidkey", RESOURCE_NOTE_LID); sql.bindValue(":mimekey", RESOURCE_MIME); break; case CONTAINS_INK: sql.prepare("Delete from filter where lid not in (select data from datastore where key=:notelidkey and lid in (select lid from DataStore where key=:mimekey and data = 'application/vnd.evernote.ink'))"); sql.bindValue(":notelidkey", RESOURCE_NOTE_LID); sql.bindValue(":mimekey", RESOURCE_MIME); break; case CONTAINS_ENCRYPTED_TEXT: sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:encryptedkey)"); sql.bindValue(":encryptedkey", NOTE_HAS_ENCRYPT); break; case CONTAINS_TODO_ITEMS: sql.prepare("Delete from filter where lid not in (select lid from DataStore where (key=:comp or key=:uncomp) and data=1)"); sql.bindValue(":comp", NOTE_HAS_TODO_COMPLETED); sql.bindValue(":uncomp", NOTE_HAS_TODO_UNCOMPLETED); break; case CONTAINS_FINISHED_TODO_ITEMS: sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:comp and data=1)"); sql.bindValue(":comp", NOTE_HAS_TODO_COMPLETED); break; case CONTAINS_UNFINISHED_TODO_ITEMS: sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:uncomp and data=1)"); sql.bindValue(":uncomp", NOTE_HAS_TODO_UNCOMPLETED); break; case CONTAINS_PDF_DOCUMENT: sql.prepare("Delete from filter where lid not in (select data from datastore where key=:notelidkey and lid in (select lid from DataStore where key=:mimekey and data ='application/pdf'))"); sql.bindValue(":notelidkey", RESOURCE_NOTE_LID); sql.bindValue(":mimekey", RESOURCE_MIME); break; case CONTAINS_ATTACHMENT: sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key)"); sql.bindValue(":key", NOTE_HAS_ATTACHMENT); break; case CONTAINS_REMINDER: sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key)"); sql.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_TIME); break; case CONTAINS_UNCOMPLETED_REMINDER: sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key)"); sql.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_TIME); sql.exec(); sql.prepare("delete from filter where lid in (select lid from datastore where key=:key and data>0)"); sql.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_DONE_TIME); break; case CONTAINS_FUTURE_REMINDER: sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data>:dt)"); sql.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_TIME); sql.bindValue(":dt",QDateTime::currentMSecsSinceEpoch()); break; case SOURCE_EMAIL: sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data = 'mail.clip')"); sql.bindValue(":key", NOTE_ATTRIBUTE_SOURCE); break; case SOURCE_EMAILED_TO_EVERNOTE: sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data = 'mail.smtp')"); sql.bindValue(":key", NOTE_ATTRIBUTE_SOURCE); break; case SOURCE_MOBILE: sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data like 'mobile.%')"); sql.bindValue(":key", NOTE_ATTRIBUTE_SOURCE); break; case SOURCE_WEB_PAGE: sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data = 'web.clip')"); sql.bindValue(":key", NOTE_ATTRIBUTE_SOURCE); break; case SOURCE_ANOTHER_APPLICATION: sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data != 'web.clip' and " "data not like 'mobile.%' and data != 'mail.smtp' and data != 'mail.clip')"); sql.bindValue(":key", NOTE_ATTRIBUTE_SOURCE); break; } sql.exec(); sql.finish(); } void FilterEngine::filterFavorite(FilterCriteria *criteria) { if (!criteria->isSet() || !criteria->isFavoriteSet()) return; QLOG_TRACE_IN(); FavoritesTable ftable(global.db); FavoritesRecord rec; if (!ftable.get(rec, criteria->getFavorite())) return; if (rec.type == FavoritesRecord::ConflictNotebook || rec.type == FavoritesRecord::LocalNotebook || rec.type == FavoritesRecord::LinkedNotebook || rec.type == FavoritesRecord::SharedNotebook || rec.type == FavoritesRecord::SynchronizedNotebook) { qint32 notebookLid = rec.target.toInt(); NotebookTable ntable(global.db); QString guid=""; if (ntable.getGuid(guid, notebookLid)) { filterIndividualNotebook(guid); } return; } if (rec.type == FavoritesRecord::NotebookStack || rec.type == FavoritesRecord::LinkedStack) { QString stackname = rec.target.toString(); filterStack(stackname); return; } if (rec.type == FavoritesRecord::Tag) { NoteTable noteTable(global.db); TagTable tagTable(global.db); NSqlQuery sql(global.db); sql.exec("create temporary table if not exists goodLids (lid integer)"); sql.exec("delete from goodLids"); QList notes; QString tagGuid=""; tagTable.getGuid(tagGuid, rec.target.toInt()); noteTable.getNotesWithTag(notes, tagGuid); sql.prepare("insert into goodLids (lid) values (:note)"); for (qint32 i=0; i :lid"); sql.bindValue(":lid", rec.target); sql.exec(); sql.finish(); } } void FilterEngine::filterNotebook(FilterCriteria *criteria) { if (!criteria->isSet() || !criteria->isNotebookSet()) return; QLOG_TRACE_IN(); QString stackTest = criteria->getNotebook()->data(0,Qt::UserRole).toString(); if (stackTest == "STACK") { QString stackName = criteria->getNotebook()->text(0); filterStack(stackName); } else { FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; qint32 notebookLid = criteria->getNotebook()->data(0,Qt::UserRole).toInt(); NotebookTable notebookTable(global.db); QString notebook; notebookTable.getGuid(notebook, notebookLid); filterIndividualNotebook(notebook); } } // If they only chose one notebook, then delete everything else void FilterEngine::filterIndividualNotebook(QString ¬ebook) { QLOG_TRACE_IN(); NotebookTable notebookTable(global.db); qint32 notebookLid = notebookTable.getLid(notebook); // Filter out the records NSqlQuery sql(global.db); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:type and data=:notebookLid)"); sql.bindValue(":type", NOTE_NOTEBOOK_LID); sql.bindValue(":notebookLid", notebookLid); sql.exec(); sql.finish(); } // Filter based on stack name void FilterEngine::filterStack(QString &stack) { QLOG_TRACE_IN(); bool negative = false; if (stack.startsWith("-")) { negative=true; stack = stack.mid(1); } if (stack.startsWith("stack:")) stack = stack.mid(stack.indexOf("stack:")+6); NotebookTable notebookTable(global.db); QList books; QList stackBooks; notebookTable.getAll(books); notebookTable.getStack(stackBooks, stack); NSqlQuery sql(global.db); if (negative) { sql.exec("create temporary table if not exists goodLids (lid integer)"); sql.exec("delete from goodLids"); sql.prepare("insert into goodLids (lid) select lid from DataStore where key=:key"); sql.bindValue(":key", NOTEBOOK_GUID); sql.exec(); sql.prepare("delete from goodLids where lid=:notebookLid"); } else { sql.prepare("Delete from filter where lid in (select lid from DataStore where key=:type and data=:notebookLid)"); sql.bindValue(":type", NOTE_NOTEBOOK_LID); } for (qint32 i=0; iisSet() || !criteria->isTagsSet()) return; QLOG_TRACE_IN(); QList tags = criteria->getTags(); if (!global.getTagSelectionOr()) { NSqlQuery query(global.db); for (qint32 i=0; idata(0,Qt::UserRole).toInt()) ; query.exec(); } query.finish(); } else { NoteTable noteTable(global.db); TagTable tagTable(global.db); QList goodNotes; for (qint32 i=0; i notes; QString tagGuid; tagTable.getGuid(tagGuid, tags[i]->data(0,Qt::UserRole).toInt()); noteTable.getNotesWithTag(notes, tagGuid); for (qint32 j=0; jisSet() || !criteria->isDeletedOnlySet() || (criteria->isDeletedOnlySet() && !criteria->getDeletedOnly())) { NSqlQuery sql(global.db); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:type and data=1)"); sql.bindValue(":type", NOTE_ACTIVE); sql.exec(); sql.finish(); return; } if (!criteria->getDeletedOnly()) return; // Filter out the records NSqlQuery sql(global.db); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:type and data=0)"); sql.bindValue(":type", NOTE_ACTIVE); sql.exec(); sql.finish(); } // Filter the data based upon what the user enters in the search string void FilterEngine::filterSearchString(FilterCriteria *criteria) { if (!criteria->isSet() || !criteria->isSearchStringSet() || criteria->getSearchString().trimmed() == "") return; QLOG_TRACE_IN(); anyFlagSet = false; if (criteria->getSearchString().trimmed().startsWith("any:", Qt::CaseInsensitive)) anyFlagSet = true; // Tokenize out the words QStringList list; QLOG_DEBUG() << "Original String Search: " << criteria->getSearchString(); splitSearchTerms(list, criteria->getSearchString()); if (!anyFlagSet) filterSearchStringAll(list); else filterSearchStringAny(list); } // Split the search term into specific tokens. void FilterEngine::splitSearchTerms(QStringList &words, QString search) { QLOG_TRACE_IN(); words.clear(); // First go through the string and put null characters between // the search terms. This helps parse out the terms later, since // some may be in quotes qint32 len = search.length(); char nextChar = ' '; bool quote = false; for (qint32 i=0; i 0; i++) { if (search[i] == '\0') { search = search.remove(0,1); i=-1; } else { pos = search.indexOf(QChar('\0')); if (pos != -1) { words.append(search.left(pos).toLower()); search.remove(0,pos); i=-1; } else { words.append(search.toLower()); search = ""; } } } // Now that we have everything separated, we can remove the unneeded " marks for (qint32 i=0; i=:weight and content match :word)") + QString("and lid not in (select data from DataStore where key=:key and lid in ") + QString("(select lid from SearchIndex where weight>=:weight2 and content match :word2))")); sqlnegative.prepare(QString("Delete from filter where lid in ") + QString("(select lid from SearchIndex where weight>=:weight and content match :word)") + QString(" or lid in (select data from DataStore where key=:key and lid in ") + QString("(select lid from SearchIndex where weight>=:weight2 and content match :word2))")); sql.bindValue(":weight", global.getMinimumRecognitionWeight()); sql.bindValue(":weight2", global.getMinimumRecognitionWeight()); sql.bindValue(":key", RESOURCE_NOTE_LID); sqlnegative.bindValue(":weight", global.getMinimumRecognitionWeight()); sqlnegative.bindValue(":weight2", global.getMinimumRecognitionWeight()); sqlnegative.bindValue(":key", RESOURCE_NOTE_LID); for (qint32 i=0; i=:weight and content like :word) or lid in (select data from DataStore where lid in (select lid from SearchIndex where weight>:weight2 and content like :word2))"); prefix.bindValue(":weight", global.getMinimumRecognitionWeight()); prefix.bindValue(":weight2", global.getMinimumRecognitionWeight()); prefix.bindValue(":word", string); prefix.bindValue(":word2", string); prefix.exec(); } else if (string.indexOf("_") >=0) { // underscore search. FTS doesn't do this. string = string.replace("_", "/_"); string = string.replace("*", "%"); if (!string.endsWith("%")) string = string +QString("%"); if (!string.startsWith("%")) string = QString("%") + string; NSqlQuery prefix(global.db); prefix.prepare("Delete from filter where lid not in (select lid from SearchIndex where weight>=:weight and content like :word escape '/') and lid not in (select data from DataStore where key=:key and lid in (select lid from SearchIndex where weight>:weight2 and content like :word2 escape '/'))"); prefix.bindValue(":weight", global.getMinimumRecognitionWeight()); prefix.bindValue(":weight2", global.getMinimumRecognitionWeight()); prefix.bindValue(":word", string); prefix.bindValue(":word2", string); prefix.bindValue(":key", RESOURCE_NOTE_LID); prefix.exec(); } else if (string.indexOf("-") >=0) { // Hyphen search. FTS doesn't do this. string = string.replace("*", "%"); if (!string.endsWith("%")) string = string +QString("%"); if (!string.startsWith("%")) string = QString("%") + string; NSqlQuery prefix(global.db); prefix.prepare("Delete from filter where lid not in (select lid from SearchIndex where weight>=:weight and content like :word) and lid not in (select data from DataStore where key=:key and lid in (select lid from SearchIndex where weight>:weight2 and content like :word2))"); prefix.bindValue(":weight", global.getMinimumRecognitionWeight()); prefix.bindValue(":weight2", global.getMinimumRecognitionWeight()); prefix.bindValue(":word", string); prefix.bindValue(":word2", string); prefix.bindValue(":key", RESOURCE_NOTE_LID); prefix.exec(); } else if (string.startsWith("*")) { // Postfix search. FTS doesn't do this. string = string.replace("*", "%"); if (!string.endsWith("%")) string = string +QString("%"); NSqlQuery prefix(global.db); prefix.prepare("Delete from filter where lid not in (select lid from SearchIndex where weight>=:weight and content like :word) and lid not in (select data from DataStore where key=:key and lid in (select lid from SearchIndex where weight>:weight2 and content like :word2))"); prefix.bindValue(":weight", global.getMinimumRecognitionWeight()); prefix.bindValue(":weight2", global.getMinimumRecognitionWeight()); prefix.bindValue(":word", string); prefix.bindValue(":word2", string); prefix.bindValue(":key", RESOURCE_NOTE_LID); prefix.exec(); } else { // Filter not found. Use FTS search QLOG_TRACE() << "Using FTS search"; if (string.startsWith("-")) { string = string.remove(0,1).trimmed(); if (!string.endsWith("*")) string = string +QString("*"); if (string.contains(" ")) string = "\""+string+"\""; sqlnegative.bindValue(":key", RESOURCE_NOTE_LID); sqlnegative.bindValue(":word", string); sqlnegative.bindValue(":word2", string); sqlnegative.exec(); } else { if (!string.endsWith("*")) string = string +QString("*"); if (string.contains(" ")) string = "\""+string+"\""; sql.bindValue(":key", RESOURCE_NOTE_LID); sql.bindValue(":word", string); sql.bindValue(":word2", string); sql.exec(); } } } sql.finish(); } // filter based upon the title string the user specified. This is for the "all" // filter and not the "any". void FilterEngine::filterSearchStringIntitleAll(QString string) { QLOG_TRACE_IN(); if (!string.startsWith("-")) { string.remove(0,8); if (string == "") string = "*"; // Filter out the records NSqlQuery tagSql(global.db); string = string.replace("*", "%"); if (!string.endsWith("%")) string = string +QString("%"); if (!string.startsWith("%")) string = QString("%") + string; tagSql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data like :title)"); tagSql.bindValue(":key", NOTE_TITLE); tagSql.bindValue(":title", string); tagSql.exec(); tagSql.finish(); } else { string.remove(0,9); if (string == "") string = "*"; // Filter out the records NSqlQuery tagSql(global.db); string = string.replace("*", "%"); if (not string.contains("%")) string = QString("%") +string +QString("%"); tagSql.prepare("Delete from filter where lid in (select lid from datastore where key=:key and data like :data)"); tagSql.bindValue(":key", NOTE_TITLE); tagSql.bindValue(":data", string); tagSql.exec(); tagSql.finish(); } } // filter based upon the note coordinates the user specified. This is for the "all" // filter and not the "any". void FilterEngine::filterSearchStringCoordinatesAll(QString string, int key) { QLOG_TRACE_IN(); bool negative = false; if (string.startsWith("-")) negative = true; int separator = string.indexOf(":")+1; string = string.mid(separator); if (negative) { if (string == "") string = "0"; // Filter out the records NSqlQuery sql(global.db); sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data >= :data)"); sql.bindValue(":key", key); sql.bindValue(":data", string.toDouble()); sql.exec(); sql.finish(); } else { if (string == "") string = "0"; // Filter out the records NSqlQuery sql(global.db); sql.prepare("Delete from filter where lid in (select lid from datastore where key=:key and data <= :data)"); sql.bindValue(":key", key); sql.bindValue(":data", string.toDouble()); sql.exec(); sql.finish(); } } // filter based upon the note author the user specified. This is for the "all" // filter and not the "any". void FilterEngine::filterSearchStringAuthorAll(QString string) { QLOG_TRACE_IN(); bool negative = false; if (string.startsWith("-")) negative = true; int separator = string.indexOf(":")+1; string = string.mid(separator); if (negative) { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("Delete from filter where lid in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("Delete from filter where lid in (select lid from datastore where key=:key and data=:data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_AUTHOR); sql.bindValue(":data", string); sql.exec(); sql.finish(); } else { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data=:data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_AUTHOR); sql.bindValue(":data", string.toDouble()); sql.exec(); sql.finish(); } } // filter based upon the note source the user specified. This is for the "all" // filter and not the "any". void FilterEngine::filterSearchStringSourceAll(QString string) { QLOG_TRACE_IN(); bool negative = false; if (string.startsWith("-")) negative = true; int separator = string.indexOf(":")+1; string = string.mid(separator); if (negative) { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("Delete from filter where lid in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("Delete from filter where lid in (select lid from datastore where key=:key and data=:data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_SOURCE); sql.bindValue(":data", string); sql.exec(); sql.finish(); } else { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data=:data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_SOURCE); sql.bindValue(":data", string.toDouble()); sql.exec(); sql.finish(); } } // filter based upon the note content class the user specified. This is for the "all" // filter and not the "any". void FilterEngine::filterSearchStringContentClassAll(QString string) { QLOG_TRACE_IN(); bool negative = false; if (string.startsWith("-")) negative = true; int separator = string.indexOf(":")+1; string = string.mid(separator); if (negative) { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("Delete from filter where lid in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("Delete from filter where lid in (select lid from datastore where key=:key and data=:data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_CONTENT_CLASS); sql.bindValue(":data", string); sql.exec(); sql.finish(); } else { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data=:data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_CONTENT_CLASS); sql.bindValue(":data", string.toDouble()); sql.exec(); sql.finish(); } } // filter based upon the note content class the user specified. This is for the "all" // filter and not the "any". void FilterEngine::filterSearchStringPlaceNameAll(QString string) { QLOG_TRACE_IN(); bool negative = false; if (string.startsWith("-")) negative = true; int separator = string.indexOf(":")+1; string = string.mid(separator); if (negative) { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("Delete from filter where lid in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("Delete from filter where lid in (select lid from datastore where key=:key and data=:data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_PLACE_NAME); sql.bindValue(":data", string); sql.exec(); sql.finish(); } else { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data=:data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_PLACE_NAME); sql.bindValue(":data", string.toDouble()); sql.exec(); sql.finish(); } } // filter based upon the note source application the user specified. This is for the "all" // filter and not the "any". void FilterEngine::filterSearchStringSourceApplicationAll(QString string) { QLOG_TRACE_IN(); bool negative = false; if (string.startsWith("-")) negative = true; int separator = string.indexOf(":")+1; string = string.mid(separator); if (negative) { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("Delete from filter where lid in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("Delete from filter where lid in (select lid from datastore where key=:key and data=:data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_SOURCE_APPLICATION); sql.bindValue(":data", string); sql.exec(); sql.finish(); } else { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("Delete from filter where lid not in (select lid from datastore where key=:key and data=:data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_SOURCE_APPLICATION); sql.bindValue(":data", string.toDouble()); sql.exec(); sql.finish(); } } // filter based upon the mime type the user specified. This is for the "all" // filter and not the "any". void FilterEngine::filterSearchStringResourceAll(QString string) { QLOG_TRACE_IN(); if (!string.startsWith("-")) { string.remove(0,9); if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); string = string.replace("*", "%"); if (not string.contains("%")) sql.prepare("Delete from filter where lid not in (select data from datastore where key=:notelidkey and lid in (select lid from DataStore where key=:mimekey and data=:data))"); else sql.prepare("Delete from filter where lid not in (select data from datastore where key=:notelidkey and lid in (select lid from DataStore where key=:mimekey and data like :data))"); sql.bindValue(":notelidkey", RESOURCE_NOTE_LID); sql.bindValue(":mimekey", RESOURCE_MIME); sql.bindValue(":data", string); sql.exec(); sql.finish(); } else { string.remove(0,10); if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); string = string.replace("*", "%"); if (not string.contains("%")) sql.prepare("Delete from filter where lid in (select data from datastore where key=:notelidkey and lid in (select lid from DataStore where key=:mimekey and data like :data))"); else sql.prepare("Delete from filter where lid in (select data from datastore where key=:notelidkey and lid in (select lid from DataStore where key=:mimekey and data=:data))"); sql.bindValue(":notelidkey", RESOURCE_NOTE_LID); sql.bindValue(":mimekey", RESOURCE_MIME); sql.bindValue(":data", string); sql.exec(); sql.finish(); } } // filter based upon the mime type the user specified. This is for the "all" // filter and not the "any". void FilterEngine::filterSearchStringResourceRecognitionTypeAll(QString string) { QLOG_TRACE_IN(); if (!string.startsWith("-")) { string.remove(0,9); if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); string = string.replace("*", "%"); if (not string.contains("%")) sql.prepare("Delete from filter where lid not in (select data from datastore where key=:notelidkey and lid in (select lid from DataStore where key=:mimekey and data=:data))"); else sql.prepare("Delete from filter where lid not in (select data from datastore where key=:notelidkey and lid in (select lid from DataStore where key=:mimekey and data like :data))"); sql.bindValue(":notelidkey", RESOURCE_NOTE_LID); sql.bindValue(":mimekey", RESOURCE_RECO_TYPE); sql.bindValue(":data", string); sql.exec(); sql.finish(); } else { string.remove(0,10); if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); string = string.replace("*", "%"); if (not string.contains("%")) sql.prepare("Delete from filter where lid in (select data from datastore where key=:notelidkey and lid in (select lid from DataStore where key=:mimekey and data like :data))"); else sql.prepare("Delete from filter where lid in (select data from datastore where key=:notelidkey and lid in (select lid from DataStore where key=:mimekey and data=:data))"); sql.bindValue(":notelidkey", RESOURCE_NOTE_LID); sql.bindValue(":mimekey", RESOURCE_RECO_TYPE); sql.bindValue(":data", string); sql.exec(); sql.finish(); } } // filter based upon the tag string the user specified. This is for the "all" // filter and not the "any". void FilterEngine::filterSearchStringTagAll(QString string) { QLOG_TRACE_IN(); if (!string.startsWith("-")) { string.remove(0,4); if (string == "") string = "*"; // Filter out the records NSqlQuery tagSql(global.db); if (not string.contains("*")) tagSql.prepare("Delete from filter where lid not in (select lid from datastore where key=:notetagkey and data in (select lid from DataStore where data=:tagname and key=:tagnamekey))"); else { tagSql.prepare("Delete from filter where lid not in (select lid from datastore where key=:notetagkey and data in (select lid from DataStore where data like :tagname and key=:tagnamekey))"); string = string.replace("*", "%"); } tagSql.bindValue(":tagname", string); tagSql.bindValue(":tagnamekey", TAG_NAME); tagSql.bindValue(":notetagkey", NOTE_TAG_LID); tagSql.exec(); tagSql.finish(); } else { string.remove(0,5); if (string == "") string = "*"; // Filter out the records NSqlQuery tagSql(global.db); if (not string.contains("*")) tagSql.prepare("Delete from filter where lid in (select lid from datastore where key=:notetagkey and data in (select lid from DataStore where data=:tagname and key=:tagnamekey))"); else { tagSql.prepare("Delete from filter where lid in (select lid from datastore where key=:notetagkey and data in (select lid from DataStore where data like :tagname and key=:tagnamekey))"); string = string.replace("*", "%"); } tagSql.bindValue(":tagname", string); tagSql.bindValue(":tagnamekey", TAG_NAME); tagSql.bindValue(":notetagkey", NOTE_TAG_LID); tagSql.exec(); tagSql.finish(); } } // filter based upon the notebook string the user specified. This is for the "all" // filter and not the "any". void FilterEngine::filterSearchStringNotebookAll(QString string) { QLOG_TRACE_IN(); if (!string.startsWith("-")) { string.remove(0,9); if (string == "") string = "*"; // Filter out the records NSqlQuery notebookSql(global.db); if (not string.contains("*")) notebookSql.prepare("Delete from filter where lid not in (select lid from NoteTable where notebook = :notebook)"); else { notebookSql.prepare("Delete from filter where lid not in (select lid from NoteTable where notebook like :notebook)"); string.replace("*", "%"); } // notebookSql.bindValue(":type", NOTE_NOTEBOOK_LID); notebookSql.bindValue(":notebook", string); notebookSql.exec(); notebookSql.finish(); } else { string.remove(0,10); if (string == "") string = "*"; // Filter out the records NSqlQuery notebookSql(global.db); if (not string.contains("*")) notebookSql.prepare("Delete from filter where lid not in (select lid from NoteTable where notebook <> :notebook)"); else { notebookSql.prepare("Delete from filter where lid not in (select lid from NoteTable where notebook not like :notebook)"); string.replace("*", "%"); } //notebookSql.bindValue(":type", NOTE_NOTEBOOK); notebookSql.bindValue(":notebook", string); notebookSql.exec(); notebookSql.finish(); } } // filter based upon the notebook string the user specified. This is for the "all" // filter and not the "any". void FilterEngine::filterSearchStringTodoAll(QString string) { QLOG_TRACE_IN(); if (!global.forceSearchLowerCase) string = string.toLower(); if (!string.startsWith("-")) { string.remove(0,5); if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.startsWith("*")) { sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key1 or key=:key2)"); sql.bindValue(":key1", NOTE_HAS_TODO_COMPLETED); sql.bindValue(":key2", NOTE_HAS_TODO_UNCOMPLETED); } else if (string.startsWith("true", Qt::CaseInsensitive)) { sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key1)"); sql.bindValue(":key1", NOTE_HAS_TODO_COMPLETED); } else if (string.startsWith("false", Qt::CaseInsensitive)) { sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key1)"); sql.bindValue(":key1", NOTE_HAS_TODO_UNCOMPLETED); } sql.exec(); sql.finish(); } else { string.remove(0,6); if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.startsWith("*")) { sql.prepare("Delete from filter where lid in (select lid from DataStore where key=:key1 or key=:key2)"); sql.bindValue(":key1", NOTE_HAS_TODO_COMPLETED); sql.bindValue(":key2", NOTE_HAS_TODO_UNCOMPLETED); } else if (string.startsWith("true", Qt::CaseInsensitive)) { sql.prepare("Delete from filter where lid in (select lid from DataStore where key=:key1)"); sql.bindValue(":key1", NOTE_HAS_TODO_COMPLETED); } else if (string.startsWith("false", Qt::CaseInsensitive)) { sql.prepare("Delete from filter where lid in (select lid from DataStore where key=:key1)"); sql.bindValue(":key1", NOTE_HAS_TODO_UNCOMPLETED); } sql.exec(); sql.finish(); } } //#define NOTE_ATTRIBUTE_REMINDER_ORDER 5032 //#define NOTE_ATTRIBUTE_REMINDER_TIME 5033 //#define NOTE_ATTRIBUTE_REMINDER_DONE_TIME 5034 // filter based upon the reminder string the user specified. This is for the "all" // filter and not the "any". void FilterEngine::filterSearchStringReminderOrderAll(QString string) { QLOG_TRACE_IN(); if (!global.forceSearchLowerCase) string = string.toLower(); if (!string.startsWith("-")) { string.remove(0,14); if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.startsWith("*")) { sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key1)"); sql.bindValue(":key1", NOTE_ATTRIBUTE_REMINDER_ORDER); } else { int data= string.toInt(); sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key1 and data=:data)"); sql.bindValue(":key1", NOTE_ATTRIBUTE_REMINDER_ORDER); sql.bindValue(":data", data); } sql.exec(); sql.finish(); } else { string.remove(0,15); if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.startsWith("*")) { sql.prepare("Delete from filter where lid in (select lid from DataStore where key=:key1)"); sql.bindValue(":key1", NOTE_ATTRIBUTE_REMINDER_ORDER); } else { sql.prepare("Delete from filter where lid in (select lid from DataStore where key=:key1 and data=:data)"); int data = string.toInt(); sql.bindValue(":key1", NOTE_ATTRIBUTE_REMINDER_ORDER); sql.bindValue(":data", data); } sql.exec(); sql.finish(); } } void FilterEngine::filterSearchStringDateAll(QString string) { QLOG_TRACE_IN(); int separator = string.indexOf(":")+1; QString tempString = string.mid(separator); QDateTime dt = calculateDateTime(tempString); NSqlQuery sql(global.db); int key=0; if (string.startsWith("created:", Qt::CaseInsensitive)) { sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>=(datetime(:data/1000)))");; key = NOTE_CREATED_DATE; } else if (string.startsWith("updated:", Qt::CaseInsensitive)) { sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>=(datetime(:data/1000)))");; key = NOTE_UPDATED_DATE; } else if (string.startsWith("subjectdate:", Qt::CaseInsensitive)) { sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>=(datetime(:data/1000)))");; key = NOTE_ATTRIBUTE_SUBJECT_DATE; } else if (string.startsWith("-created:", Qt::CaseInsensitive)) { sql.prepare("Delete from filter where lid in (select lid from DataStore where key=:key and datetime(data/1000)<=(datetime(:data/1000)))");; key = NOTE_CREATED_DATE; } else if (string.startsWith("-updated:", Qt::CaseInsensitive)) { sql.prepare("Delete from filter where lid in (select lid from DataStore where key=:key and datetime(data/1000)<=(datetime(:data/1000)))");; key = NOTE_UPDATED_DATE; } else if (string.startsWith("-subjectdate:", Qt::CaseInsensitive)) { sql.prepare("Delete from filter where lid in (select lid from DataStore where key=:key and datetime(data/1000)<=(datetime(:data/1000)))");; key = NOTE_ATTRIBUTE_SUBJECT_DATE; } sql.bindValue(":key", key); sql.bindValue(":data", dt.toMSecsSinceEpoch()); sql.exec(); sql.finish(); } QDateTime FilterEngine::calculateDateTime(QString string) { QLOG_TRACE_IN(); QDateTime tam; // datetime - midnight today tam.setDate(QDate().currentDate()); tam.setTime(QTime(0,0,0,1)); int dow = QDate().currentDate().dayOfWeek(); // Current day of week int moy = QDate().currentDate().month(); // Current month int dom = QDate().currentDate().day(); // current day of month int offset; QDateTime value; if (string.startsWith("today")) { value = tam; string = string.mid(5); offset = 0; if (string != "") offset = string.toInt(); value = value.addDays(offset); return value; } else if (string.startsWith("day")) { value = tam; string = string.mid(3); offset = 0; if (string != "") offset = string.toInt(); value = value.addDays(offset); return value; } else if (string.startsWith("month")) { value = tam; value = value.addDays(-1*dom+1); string = string.mid(5); offset = 0; if (string != "") offset = string.toInt(); value = value.addMonths(offset); QLOG_DEBUG() << value.toString(); return value; } else if (string.startsWith("year")) { value = tam; value = value.addDays(-1*dom+1); value = value.addMonths(-1*moy+1); string = string.mid(4); offset = 0; if (string != "") offset = string.toInt(); value = value.addYears(offset); QLOG_DEBUG() << value.toString(); return value; } else if (string.startsWith("week")) { value = tam; value = value.addDays(-1*dow); string = string.mid(4); offset = 0; if (string != "") offset = string.toInt(); value = value.addDays(offset*7); QLOG_DEBUG() << value.toString(); return value; } // If we've gotten this far then we have some type of number int year = string.mid(0,4).toInt(); int month = string.mid(4,2).toInt(); int day = string.mid(6,2).toInt(); int hour = 0; int minute = 0; int seconds = 0; value.setDate(QDate(year, month, day)); string = string.mid(8); if (string.startsWith("t",Qt::CaseInsensitive)) { hour = string.mid(1,2).toInt(); minute = string.mid(3,2).toInt(); seconds = string.mid(5,2).toInt(); value.setTime(QTime(hour, minute, seconds, 0)); if (string.endsWith("z", Qt::CaseInsensitive)) value = value.toUTC(); } return value; } // Filter based upon the words the user specified (as opposed to the notebook, tags ...) // this is for the "any" filter (the default), not the default of all void FilterEngine::filterSearchStringAny(QStringList list) { QLOG_TRACE_IN(); // Filter out the records NSqlQuery sql(global.db), sqlnegative(global.db); NSqlQuery resSql(global.db), resSqlNegative(global.db); sql.exec("create table if not exists anylidsfilter (lid int);"); sql.exec("delete from anylidsfilter"); sql.exec("create table if not exists anylidsfilterRes (lid int);"); sql.exec("delete from anylidsfilterRes"); sql.prepare("insert into anylidsfilter (lid) select lid from SearchIndex where weight>=:weight and source='text' and content match :word"); resSql.prepare("insert into anylidsfilterRes (lid) select lid from SearchIndex where source='recognition' and weight>=:weight and content match :word"); sqlnegative.prepare("insert into anylidsfilter (lid) select lid from SearchIndex where lid not in (select lid from searchindex where source='text' and weight>=:weight and content match :word)"); resSqlNegative.prepare("insert into anylidsfilterRes (lid) select lid from SearchIndex where lid not in (select lid from searchindex where source='recognition' and weight>=:weight and content match :word)"); sql.bindValue(":weight", global.getMinimumRecognitionWeight()); sqlnegative.bindValue(":weight", global.getMinimumRecognitionWeight()); resSql.bindValue(":weight", global.getMinimumRecognitionWeight()); resSqlNegative.bindValue(":weight", global.getMinimumRecognitionWeight()); // We start at the second entry because the first is "any:" for (qint32 i=1; i :notebook"); else { notebookSql.prepare("insert into anylidsfilter (lid) select lid from NoteTable where notebook not like :notebook"); string.replace("*", "%"); } notebookSql.bindValue(":notebook", string); notebookSql.exec(); notebookSql.finish(); } } // filter based upon the notebook string the user specified. This is for the "any:" // filter and not the default void FilterEngine::filterSearchStringTodoAny(QString string) { QLOG_TRACE_IN(); if (!string.startsWith("-")) { string.remove(0,5); if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.startsWith("*")) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key1 or key=:key2"); sql.bindValue(":key1", NOTE_HAS_TODO_COMPLETED); sql.bindValue(":key2", NOTE_HAS_TODO_UNCOMPLETED); } if (string.startsWith("true", Qt::CaseInsensitive)) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key1"); sql.bindValue(":key1", NOTE_HAS_TODO_COMPLETED); } if (string.startsWith("false", Qt::CaseInsensitive)) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key1"); sql.bindValue(":key1", NOTE_HAS_TODO_UNCOMPLETED); } sql.exec(); sql.finish(); } else { string.remove(0,6); if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.startsWith("*")) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key<>:key1 or key<>:key2"); sql.bindValue(":key1", NOTE_HAS_TODO_COMPLETED); sql.bindValue(":key2", NOTE_HAS_TODO_UNCOMPLETED); } if (string.startsWith("true", Qt::CaseInsensitive)) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key1"); sql.bindValue(":key1", NOTE_HAS_TODO_UNCOMPLETED); } if (string.startsWith("false", Qt::CaseInsensitive)) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key1"); sql.bindValue(":key1", NOTE_HAS_TODO_COMPLETED); } sql.exec(); sql.finish(); } } // filter based upon the reminder: string the user specified. This is for the "any:" // filter and not the default void FilterEngine::filterSearchStringReminderOrderAny(QString string) { QLOG_TRACE_IN(); if (!string.startsWith("-")) { string.remove(0,14); if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.startsWith("*")) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key1"); sql.bindValue(":key1", NOTE_ATTRIBUTE_REMINDER_ORDER); } else { int data=string.toInt(); sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key1 and data=:data"); sql.bindValue(":key1", NOTE_ATTRIBUTE_REMINDER_ORDER); sql.bindValue(":data", data); } sql.exec(); sql.finish(); } else { string.remove(0,15); if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.startsWith("*")) { sql.prepare("insert into anylidsfilter (lid) select distinct lid from DataStore where lid not in (select lid from DataStore where key = :key)"); sql.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_ORDER); } else { int data = string.toInt(); sql.prepare("insert into anylidsfilter (lid) select distinct lid from DataStore where lid not in (select lid from DataStore where key = :key and data=:data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_ORDER); sql.bindValue(":data", data); } sql.exec(); sql.finish(); } } // filter based upon the tag string the user specified. This is for the "any:" // filter and not the default void FilterEngine::filterSearchStringTagAny(QString string) { QLOG_TRACE_IN(); if (!string.startsWith("-")) { string.remove(0,4); if (string == "") string = "*"; // Filter out the records NSqlQuery tagSql(global.db); if (not string.contains("*")) tagSql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:notetagkey and data in (select lid from DataStore where data=:tagname and key=:tagnamekey)"); else { tagSql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:notetagkey and data in (select lid from DataStore where data like :tagname and key=:tagnamekey)"); string = string.replace("*", "%"); } tagSql.bindValue(":tagname", string); tagSql.bindValue(":tagnamekey", TAG_NAME); tagSql.bindValue(":notetagkey", NOTE_TAG_LID); tagSql.exec(); tagSql.finish(); } else { string.remove(0,5); if (string == "") string = "*"; // Filter out the records NSqlQuery tagSql(global.db); if (not string.contains("*")) tagSql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select lid from datastore where key=:notetagkey and data in (select lid from DataStore where data=:tagname and key=:tagnamekey))"); else { tagSql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select lid from datastore where key=:notetagkey and data in (select lid from DataStore where data like :tagname and key=:tagnamekey))"); string = string.replace("*", "%"); } tagSql.bindValue(":tagname", string); tagSql.bindValue(":tagnamekey", TAG_NAME); tagSql.bindValue(":notetagkey", NOTE_TAG_LID); tagSql.exec(); tagSql.finish(); } } // filter based upon the title string the user specified. This is for the "any" // filter and not the default. void FilterEngine::filterSearchStringIntitleAny(QString string) { QLOG_TRACE_IN(); if (!string.startsWith("-")) { int pos = string.indexOf(":")+1; string = string.mid(pos); if (string == "") string = "*"; // Filter out the records NSqlQuery tagSql(global.db); string = string.replace("*", "%"); if (not string.contains("%")) string = QString("%") +string +QString("%"); tagSql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:key and data like :title"); tagSql.bindValue(":key", NOTE_TITLE); tagSql.bindValue(":title", string); tagSql.exec(); tagSql.finish(); } else { int pos = string.indexOf(":")+1; string = string.mid(pos); if (string == "") string = "*"; // Filter out the records NSqlQuery tagSql(global.db); string = string.replace("*", "%"); if (not string.contains("%")) string = QString("%") +string +QString("%"); tagSql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select lid from datastore where key=:key and data like :title)"); tagSql.bindValue(":key", NOTE_TITLE); tagSql.bindValue(":title", string); tagSql.exec(); tagSql.finish(); } } // filter based upon the mime type the user specified. This is for the "any:" // filter and not the default void FilterEngine::filterSearchStringResourceAny(QString string) { QLOG_TRACE_IN(); if (!string.startsWith("-")) { string.remove(0,9); if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); string = string.replace("*", "%"); if (not string.contains("%")) sql.prepare("insert into anylidsfilter (lid) select data from datastore where key=:notelidkey and lid in (select lid from DataStore where key=:mimekey and data=:data)"); else sql.prepare("insert into anylidsfilter (lid) select data from datastore where key=:notelidkey and lid in (select lid from DataStore where key=:mimekey and data like :data)"); sql.bindValue(":notelidkey", RESOURCE_NOTE_LID); sql.bindValue(":mimekey", RESOURCE_MIME); sql.bindValue(":data", string); sql.exec(); QLOG_DEBUG() << sql.lastError(); sql.finish(); } else { string.remove(0,10); if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); string = string.replace("*", "%"); if (not string.contains("%")) sql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select data from datastore where key=:notelid and lid in (select lid from DataStore where data=:data and key = :mimekey))"); else sql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select data from datastore where key=:notelid and lid not in (select lid from DataStore where data=:data and key like :mimekey))"); sql.bindValue(":notelid", RESOURCE_NOTE_LID); sql.bindValue(":mimekey", RESOURCE_MIME); sql.bindValue(":data", string); sql.exec(); QLOG_DEBUG() << sql.lastError(); sql.finish(); } } // filter based upon the note coordinates the user specified. This is for the "all" // filter and not the "any". void FilterEngine::filterSearchStringCoordinatesAny(QString string, int key) { QLOG_TRACE_IN(); bool negative = false; if (string.startsWith("-")) negative = true; int separator = string.indexOf(":")+1; string = string.mid(separator); if (negative) { if (string == "") string = "0"; // Filter out the records NSqlQuery sql(global.db); sql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:key and data >= :data"); sql.bindValue(":key", key); sql.bindValue(":data", string.toDouble()); sql.exec(); sql.finish(); } else { if (string == "") string = "0"; // Filter out the records NSqlQuery sql(global.db); sql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:key and data <= :data"); sql.bindValue(":key", key); sql.bindValue(":data", string.toDouble()); sql.exec(); sql.finish(); } } // filter based upon the note author the user specified. This is for the "any" // filter and not the default void FilterEngine::filterSearchStringAuthorAny(QString string) { QLOG_TRACE_IN(); bool negative = false; if (string.startsWith("-")) negative = true; int separator = string.indexOf(":")+1; string = string.mid(separator); if (negative) { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:key and data like :data"); } else sql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:key and data = :data"); sql.bindValue(":key", NOTE_ATTRIBUTE_AUTHOR); sql.bindValue(":data", string); sql.exec(); sql.finish(); } else { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select lid from datastore where key=:key and data = :data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_AUTHOR); sql.bindValue(":data", string.toDouble()); sql.exec(); sql.finish(); } } void FilterEngine::filterSearchStringDateAny(QString string) { QLOG_TRACE_IN(); int separator = string.indexOf(":")+1; QString tempString = string.mid(separator); QDateTime dt = calculateDateTime(tempString); NSqlQuery sql(global.db); int key=0; if (string.startsWith("created:", Qt::CaseInsensitive)) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key and datetime(data/1000)>=(datetime(:data/1000))"); key = NOTE_CREATED_DATE; } else if (string.startsWith("updated:", Qt::CaseInsensitive)) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key and datetime(data/1000)>=(datetime(:data/1000))"); key = NOTE_UPDATED_DATE; } else if (string.startsWith("subjectdate:", Qt::CaseInsensitive)) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key and datetime(data/1000)>=(datetime(:data/1000))"); key = NOTE_ATTRIBUTE_SUBJECT_DATE; } else if (string.startsWith("-created:", Qt::CaseInsensitive)) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key and datetime(data/1000)<=(datetime(:data/1000))"); key = NOTE_CREATED_DATE; } else if (string.startsWith("-updated:", Qt::CaseInsensitive)) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key and datetime(data/1000)<=(datetime(:data/1000))"); key = NOTE_UPDATED_DATE; } else if (string.startsWith("-subjectdate:", Qt::CaseInsensitive)) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key and datetime(data/1000)<=(datetime(:data/1000))"); key = NOTE_ATTRIBUTE_SUBJECT_DATE; } sql.bindValue(":key", key); sql.bindValue(":data", dt.toMSecsSinceEpoch()); sql.exec(); sql.finish(); } // filter based upon the note source the user specified. This is for the "any" // filter and not the default. void FilterEngine::filterSearchStringSourceAny(QString string) { QLOG_TRACE_IN(); bool negative = false; if (string.startsWith("-")) negative = true; int separator = string.indexOf(":")+1; string = string.mid(separator); if (negative) { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:key and data like :data"); } else sql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:key and data=:data"); sql.bindValue(":key", NOTE_ATTRIBUTE_SOURCE); sql.bindValue(":data", string); sql.exec(); } else { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select lid from datastore where key=:key and data=:data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_SOURCE); sql.bindValue(":data", string.toDouble()); sql.exec(); sql.finish(); } } // filter based upon the note source the user specified. This is for the "any" // filter and not the default. void FilterEngine::filterSearchStringSourceApplicationAny(QString string) { QLOG_TRACE_IN(); bool negative = false; if (string.startsWith("-")) negative = true; int separator = string.indexOf(":")+1; string = string.mid(separator); if (negative) { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:key and data like :data"); } else sql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:key and data=:data"); sql.bindValue(":key", NOTE_ATTRIBUTE_SOURCE_APPLICATION); sql.bindValue(":data", string); sql.exec(); sql.finish(); } else { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select lid from datastore where key=:key and data=:data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_SOURCE_APPLICATION); sql.bindValue(":data", string.toDouble()); sql.exec(); sql.finish(); } } // filter based upon the note source the user specified. This is for the "any" // filter and not the default. void FilterEngine::filterSearchStringContentClassAny(QString string) { QLOG_TRACE_IN(); bool negative = false; if (string.startsWith("-")) negative = true; int separator = string.indexOf(":")+1; string = string.mid(separator); if (negative) { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:key and data like :data"); } else sql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:key and data=:data"); sql.bindValue(":key", NOTE_ATTRIBUTE_CONTENT_CLASS); sql.bindValue(":data", string); sql.exec(); sql.finish(); } else { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select lid from datastore where key=:key and data=:data)"); sql.bindValue(":key", NOTE_ATTRIBUTE_CONTENT_CLASS); sql.bindValue(":data", string.toDouble()); sql.exec(); sql.finish(); } } // filter based upon the note source the user specified. This is for the "any" // filter and not the default. void FilterEngine::filterSearchStringResourceRecognitionTypeAny(QString string) { QLOG_TRACE_IN(); bool negative = false; if (string.startsWith("-")) negative = true; int separator = string.indexOf(":")+1; string = string.mid(separator); if (negative) { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:key and data like :data"); } else sql.prepare("insert into anylidsfilter (lid) select lid from datastore where key=:key and data=:data"); sql.bindValue(":key", RESOURCE_RECO_TYPE); sql.bindValue(":data", string); sql.exec(); sql.finish(); } else { if (string == "") string = "*"; // Filter out the records NSqlQuery sql(global.db); if (string.contains("*")) { string = string.replace("*", "%"); sql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select lid from datastore where key=:key and data like :data)"); } else sql.prepare("insert into anylidsfilter (lid) select lid from datastore where lid not in (select lid from datastore where key=:key and data=:data)"); sql.bindValue(":key", RESOURCE_RECO_TYPE); sql.bindValue(":data", string.toDouble()); sql.exec(); sql.finish(); } } // Check if a resource contains a specific search string. Used in highlighting PDFs & attachments // This function is used in two different ways. If the *returnHits pointer is NULL, it searches // for the first match in a PDF and exits with true/false if a match is found. If the pointer is // not null, it will return a list of all of the searchString terms that are found. This is useful // in knowing what to highlight in a PDF. bool FilterEngine::resourceContains(qint32 resourceLid, QString searchString, QStringList *returnHits) { QLOG_TRACE_IN(); bool returnValue = false; if (returnHits != NULL) returnHits->empty(); NSqlQuery query(global.db); NSqlQuery query2(global.db); query.prepare("select lid from SearchIndex where lid=:resourceLid and weight>=:weight and content match :word"); query2.prepare("select lid from SearchIndex where lid=:resourceLid and weight>=:weight and content like :word"); QStringList terms; splitSearchTerms(terms, searchString); for (int i=0; iappend(term); else return true; } } else { query.bindValue(":resourceLid", resourceLid); query.bindValue(":weight", global.getMinimumRecognitionWeight()); query.bindValue(":word", term); query.exec(); if (query.next()) { returnValue = true; if (returnHits != NULL) returnHits->append(term); else return true; } } } } return returnValue; } // Filter based on reminder time void FilterEngine::filterSearchStringReminderTimeAll(QString string) { QLOG_TRACE_IN(); int separator = string.indexOf(":")+1; QString tempString = string.mid(separator); QDateTime dt = calculateDateTime(tempString); NSqlQuery sql(global.db); int key= NOTE_ATTRIBUTE_REMINDER_TIME; if (string.startsWith("-", Qt::CaseInsensitive)) { sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))");; } else { sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>=(datetime(:data/1000)))");; } sql.bindValue(":key", key); sql.bindValue(":data", dt.toMSecsSinceEpoch()); sql.exec(); sql.finish(); QLOG_TRACE_OUT(); } // Filter based on reminder time void FilterEngine::filterSearchStringReminderTimeAny(QString string) { QLOG_TRACE_IN(); int separator = string.indexOf(":")+1; QString tempString = string.mid(separator); QDateTime dt = calculateDateTime(tempString); NSqlQuery sql(global.db); int key = NOTE_ATTRIBUTE_REMINDER_TIME; if (string.startsWith("-reminderDoneTime:", Qt::CaseInsensitive)) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000))"); } else { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key and datetime(data/1000)>=(datetime(:data/1000))"); } sql.bindValue(":key", key); sql.bindValue(":data", dt.toMSecsSinceEpoch()); sql.exec(); sql.finish(); } // Filter based on reminder done time void FilterEngine::filterSearchStringReminderDoneTimeAll(QString string) { QLOG_TRACE_IN(); int separator = string.indexOf(":")+1; QString tempString = string.mid(separator); QDateTime dt = calculateDateTime(tempString); NSqlQuery sql(global.db); int key = NOTE_ATTRIBUTE_REMINDER_DONE_TIME; if (string.startsWith("-", Qt::CaseInsensitive)) { sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000)))"); } else { sql.prepare("Delete from filter where lid not in (select lid from DataStore where key=:key and datetime(data/1000)>=(datetime(:data/1000)))"); } sql.bindValue(":key", key); sql.bindValue(":data", dt.toMSecsSinceEpoch()); sql.exec(); sql.finish(); QLOG_TRACE_OUT(); } // Filter based on reminder done time void FilterEngine::filterSearchStringReminderDoneTimeAny(QString string) { QLOG_TRACE_IN(); int separator = string.indexOf(":")+1; QString tempString = string.mid(separator); QDateTime dt = calculateDateTime(tempString); NSqlQuery sql(global.db); int key = NOTE_ATTRIBUTE_REMINDER_DONE_TIME; if (string.startsWith("-reminderDoneTime:", Qt::CaseInsensitive)) { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key and datetime(data/1000)<(datetime(:data/1000))"); } else { sql.prepare("insert into anylidsfilter (lid) select lid from DataStore where key=:key and datetime(data/1000)>=(datetime(:data/1000))"); } sql.bindValue(":key", key); sql.bindValue(":data", dt.toMSecsSinceEpoch()); sql.exec(); sql.finish(); QLOG_TRACE_OUT(); } nixnote2-2.0.2/filters/filterengine.h000066400000000000000000000074611315604104400175630ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef FILTERENGINE_H #define FILTERENGINE_H #include #include "filtercriteria.h" class FilterEngine : public QObject { Q_OBJECT private: void filterFavorite(FilterCriteria *criteria); void filterNotebook(FilterCriteria *criteria); void filterIndividualNotebook(QString &guid); void filterStack(QString& stack); void filterTags(FilterCriteria *criteria); void filterTrash(FilterCriteria *criteria); void filterAttributes(FilterCriteria *criteria); void filterSearchString(FilterCriteria *criteria); void filterSearchStringAll(QStringList list); void splitSearchTerms(QStringList &list, QString search); void filterSearchStringNotebookAll(QString string); // void filterSearchTodoAll(QStringList list); void filterSearchStringTodoAll(QString string); void filterSearchStringReminderOrderAll(QString string); void filterSearchStringReminderDoneTimeAll(QString string); void filterSearchStringReminderDoneTimeAny(QString string); void filterSearchStringReminderTimeAll(QString string); void filterSearchStringReminderTimeAny(QString string); void filterSearchStringTagAll(QString string); void filterSearchStringIntitleAll(QString string); void filterSearchStringResourceAll(QString string); void filterSearchStringCoordinatesAll(QString string, int key); void filterSearchStringAuthorAll(QString string); void filterSearchStringSourceAll(QString string); void filterSearchStringSourceApplicationAll(QString string); void filterSearchStringContentClassAll(QString string); void filterSearchStringPlaceNameAll(QString string); void filterSearchStringResourceRecognitionTypeAll(QString string); QDateTime calculateDateTime(QString string); void filterSearchStringDateAll(QString string); void filterSearchStringAny(QStringList list); void filterSearchStringNotebookAny(QString string); void filterSearchStringTodoAny(QString string); void filterSearchStringReminderOrderAny(QString string); void filterSearchStringTagAny(QString string); void filterSearchStringIntitleAny(QString string); void filterSearchStringResourceAny(QString string); void filterSearchStringCoordinatesAny(QString string, int key); void filterSearchStringAuthorAny(QString string); void filterSearchStringDateAny(QString string); void filterSearchStringSourceAny(QString string); void filterSearchStringSourceApplicationAny(QString string); void filterSearchStringContentClassAny(QString string); void filterSearchStringResourceRecognitionTypeAny(QString string); bool anyFlagSet; public: explicit FilterEngine(QObject *parent = 0); void filter(FilterCriteria *newCriteria=NULL, QList *results=NULL); bool resourceContains(qint32 resourceLid, QString searchString, QStringList *returnHits); signals: public slots: }; #endif // FILTERENGINE_H nixnote2-2.0.2/filters/lenseresults.h000066400000000000000000000004371315604104400176340ustar00rootroot00000000000000#ifndef LENSERESULTS_H #define LENSERESULTS_H #include #include "qevercloud/include/QEverCloud.h" class LenseResults : public QObject { Q_OBJECT public: explicit LenseResults(QObject *parent = 0); Note note; signals: public slots: }; #endif // LENSERESULTS_H nixnote2-2.0.2/filters/notesortfilterproxymodel.cpp000066400000000000000000000056171315604104400226520ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "notesortfilterproxymodel.h" #include "global.h" NoteSortFilterProxyModel::NoteSortFilterProxyModel() : QSortFilterProxyModel() { lidMap = new QMap(); } NoteSortFilterProxyModel::~NoteSortFilterProxyModel() { delete lidMap; } bool NoteSortFilterProxyModel::filterAcceptsRow(qint32 source_row, const QModelIndex &source_parent) const { QModelIndex idx = sourceModel()->index(source_row,NOTE_TABLE_LID_POSITION, source_parent); qint32 rowLid = sourceModel()->data(idx).toInt(); if (lidMap->contains(rowLid)) { lidMap->remove(rowLid); lidMap->insert(rowLid, source_row); return true; } return false; } bool NoteSortFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const { QVariant leftData = this->sourceModel()->data(left); QVariant rightData = this->sourceModel()->data(right); if (left.column() == NOTE_TABLE_IS_DIRTY_POSITION) return leftData.toBool() < rightData.toBool(); if (leftData.type() == QVariant::Invalid || rightData.type() == QVariant::Invalid) return true; if (leftData.type() == QVariant::Icon || rightData.type() == QVariant::Icon) return true; if (leftData.type() == QVariant::Image || rightData.type() == QVariant::Image) return true; if (leftData.type() == QVariant::String && rightData.type() == QVariant::String) { QString left = leftData.toString(); QString right = rightData.toString(); return left.toLower() < right.toLower(); } if (leftData.type() == QVariant::Int && rightData.type() == QVariant::Int) return leftData.toInt() < rightData.toInt(); if (leftData.type() == QVariant::LongLong && rightData.type() == QVariant::LongLong) return leftData.toLongLong() < rightData.toLongLong(); if (leftData.type() == QVariant::Double && rightData.type() == QVariant::Double) return leftData.toDouble() < rightData.toDouble(); return true; } nixnote2-2.0.2/filters/notesortfilterproxymodel.h000066400000000000000000000030261315604104400223070ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NOTESORTFILTERPROXYMODEL_H #define NOTESORTFILTERPROXYMODEL_H #include #include #include class NoteSortFilterProxyModel : public QSortFilterProxyModel { Q_OBJECT public: explicit NoteSortFilterProxyModel(); ~NoteSortFilterProxyModel(); bool filterAcceptsRow(qint32 source_row, const QModelIndex &source_parent) const; //void sort(int column, Qt::SortOrder order); bool lessThan(const QModelIndex &left, const QModelIndex &right) const; QMap *lidMap; signals: public slots: }; #endif // NOTESORTFILTERPROXYMODEL_H nixnote2-2.0.2/filters/remotequery.cpp000066400000000000000000000102471315604104400200200ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "remotequery.h" #include "global.h" #include "filters/filterengine.h" extern Global global; RemoteQuery::RemoteQuery(QObject *parent) : QObject(parent) { this->initDbus(); note = NULL; lid = -1; } void RemoteQuery::initDbus() { return; QLOG_DEBUG() << "inside InitDbus()"; if (!QDBusConnection::sessionBus().isConnected()) { return; } QLOG_DEBUG() << "registerintg service()"; if (!QDBusConnection::sessionBus().registerService(DBUS_SERVICE_NAME)) { fprintf(stderr, "%s\n", qPrintable(QDBusConnection::sessionBus().lastError().message())); exit(1); } QLOG_DEBUG() << "Registering object"; QDBusConnection::sessionBus().registerObject("/com/canonical/unity/scope/notes/NixNote/RemoteQuery", this, QDBusConnection::ExportAllSlots); QLOG_DEBUG() << "leavining init"; } Q_SCRIPTABLE bool RemoteQuery::setNote(qint32 lid) { this->lid = lid; NoteTable ntable(global.db); if (note != NULL) delete note; note = new Note(); if (ntable.get(*note, lid, false,false)) return true; delete note; note = NULL; return false; } Q_SCRIPTABLE QString RemoteQuery::getNoteTitle() { if (note == NULL) return ""; if (note->title.isSet()) return note->title; return ""; } Q_SCRIPTABLE QString RemoteQuery::query(const QString &arg) { QList results; FilterCriteria filter; filter.setSearchString(arg); FilterEngine engine; engine.filter(&filter, &results); QString retVal = ""; for (int i=0; iupdated.isSet()) dt = note->updated; if (dt==0) return ""; QDateTime timestamp; timestamp.setTime_t(dt/1000); if (timestamp.date() == QDate::currentDate()) return tr("Today") +" " + timestamp.time().toString(Qt::SystemLocaleShortDate); return timestamp.toString(global.dateFormat + QString(" ") +global.timeFormat); } Q_SCRIPTABLE QString RemoteQuery::getNoteDateCreated() { qlonglong dt = 0; if (note->created.isSet()) dt = note->created; if (dt==0) return ""; QDateTime timestamp; timestamp.setTime_t(dt/1000); if (timestamp.date() == QDate::currentDate()) return tr("Today") +" " + timestamp.time().toString(Qt::SystemLocaleShortDate); return timestamp.toString(global.dateFormat + QString(" ") +global.timeFormat); } Q_SCRIPTABLE QString RemoteQuery::getNoteTags() { if (!note->tagNames.isSet()) return ""; QString taglist = ""; QList tagNames = note->tagNames; for (int i=0; i0) taglist = taglist +", "; taglist = taglist+tagNames[i]; } return taglist; } nixnote2-2.0.2/filters/remotequery.h000066400000000000000000000034721315604104400174670ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef REMOTEQUERY_H #define REMOTEQUERY_H #include #if QT_VERSION < 0x050000 #include #else #include #endif #include #include #include "sql/notetable.h" #define DBUS_SERVICE_NAME "com.canonical.Unity.Scope.Notes.NixNote" class RemoteQuery : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.canonical.Unity.Scope.Notes.NixNote.RemoteQuery") private: Note *note; qint32 lid; public: explicit RemoteQuery(QObject *parent = 0); void initDbus(); signals: public slots: Q_SCRIPTABLE QString query(const QString &arg); Q_SCRIPTABLE QString getNoteTitle(); Q_SCRIPTABLE bool setNote(qint32 lid); Q_SCRIPTABLE QString getNotePreview(); Q_SCRIPTABLE QString getNoteDateUpdated(); Q_SCRIPTABLE QString getNoteDateCreated(); Q_SCRIPTABLE QString getNoteTags(); }; #endif // REMOTEQUERY_H nixnote2-2.0.2/global.cpp000066400000000000000000001150611315604104400152270ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "global.h" #include #include #include #include #include #include // The following include is needed for demangling names on a backtrace // Windows Check #ifndef _WIN32 #include #include #include #include #include #endif // End Windows Check #include "sql/usertable.h" //****************************************** //* Global settings used by the program //****************************************** Global::Global() { dbLock = new QReadWriteLock(QReadWriteLock::Recursive); listView = ListViewWide; FilterCriteria *criteria = new FilterCriteria(); filterCriteria.push_back(criteria); filterPosition = 0; this->argv = NULL; this->argc = 0; criteria->resetNotebook = true; criteria->resetTags = true; criteria->resetSavedSearch = true; criteria->resetAttribute = true; criteria->resetFavorite = true; criteria->resetDeletedOnly = true; criteria->setDeletedOnly(false); criteria->resetLid = true; this->accountsManager = NULL; criteria->resetSearchString = true; this->application = NULL; this->autoHideEditorToolbar = false; this->showGoodSyncMessagesInTray = false; this->batchThumbnailCount = 4; username = ""; this->defaultFontSize = 8; this->countBehavior = Global::CountAll; password = ""; javaFound = false; reminderManager = NULL; settings = NULL; startupNewNote = false; this->sharedMemory = NULL; this->forceSystemTrayAvailable = false; this->guiAvailable = true; strictDTD = true; forceUTF8 = false; startupNote = 0; db = NULL; this->forceWebFonts = false; this->indexPDFLocally = true; this->indexRunner = NULL; this->isFullscreen = false; this->indexNoteCountPause = -1; this->maxIndexInterval = 500; this->forceNoStartMimized = false; this->forceSearchLowerCase = false; this->forceStartMinimized = false; this->globalSettings = NULL; this->disableUploads = false; this->enableIndexing = true; this->disableThumbnails = false; this->defaultGuiFont = ""; this->defaultGuiFontSize = 8; this->minIndexInterval = 500; this->minimumThumbnailInterval = 500; this->purgeTemporaryFilesOnShutdown = true; this->indexResourceCountPause = 500; this->maximumThumbnailInterval = 500; this->disableEditing = false; this->nonAsciiSortBug = false; this->startMinimized = false; this->pdfPreview = true; this->shortcutKeys = NULL; this->cryptCounter = 0; this->connected = false; } // Destructor //Global::~Global() { // FilterCriteria *criteria; // for (int i=0; iguiAvailable = guiAvailable; fileManager.setup(startupConfig.homeDirPath, startupConfig.programDirPath, startupConfig.accountId); shortcutKeys = new ShortcutKeys(); QString settingsFile = fileManager.getHomeDirPath("") + "nixnote.conf"; globalSettings = new QSettings(settingsFile, QSettings::IniFormat); int accountId = startupConfig.accountId; if (accountId <=0) { globalSettings->beginGroup("SaveState"); accountId = globalSettings->value("lastAccessedAccount", 1).toInt(); globalSettings->endGroup(); } globalSettings->beginGroup("MemoryKey"); QString key = globalSettings->value("key", "").toString(); if (key == "") { key = QUuid::createUuid().toString().replace("}","").replace("{",""); globalSettings->setValue("key",key); } globalSettings->endGroup(); key = key+QString::number(accountId); sharedMemory = new CrossMemoryMapper(key); settingsFile = fileManager.getHomeDirPath("") + "nixnote-"+QString::number(accountId)+".conf"; settings = new QSettings(settingsFile, QSettings::IniFormat); setDebugLevel(); this->forceNoStartMimized = startupConfig.forceNoStartMinimized; this->forceSystemTrayAvailable = startupConfig.forceSystemTrayAvailable; this->startupNewNote = startupConfig.startupNewNote; //this->syncAndExit = startupConfig.syncAndExit; this->forceStartMinimized = startupConfig.forceStartMinimized; this->startupNote = startupConfig.startupNoteLid; startupConfig.accountId = accountId; accountsManager = new AccountsManager(startupConfig.accountId); if (startupConfig.enableIndexing || getBackgroundIndexing()) enableIndexing = true; this->purgeTemporaryFilesOnShutdown=true; cryptCounter = 0; attachmentNameDelimeter = "------"; username = ""; password = ""; connected = false; server = accountsManager->getServer(); // Cleanup any temporary files from the last time QDir myDir(fileManager.getTmpDirPath()); QStringList list = myDir.entryList(); for (int i=0; ibeginGroup("Debugging"); disableUploads = settings->value("disableUploads", false).toBool(); nonAsciiSortBug = settings->value("nonAsciiSortBug", false).toBool(); settings->endGroup(); setupDateTimeFormat(); settings->beginGroup("Appearance"); int countbehavior = settings->value("countBehavior", CountAll).toInt(); if (countbehavior==1) countBehavior = CountAll; if (countbehavior==2) countBehavior = CountNone; pdfPreview = settings->value("showPDFs", false).toBool(); defaultFont = settings->value("defaultFont","").toString(); defaultFontSize = settings->value("defaultFontSize",0).toInt(); defaultGuiFontSize = settings->value("defaultGuiFontSize", 0).toInt(); defaultGuiFont = settings->value("defaultGuiFont","").toString(); forceWebFonts = settings->value("forceWebFonts", false).toBool(); disableEditing = false; if (settings->value("disableEditingOnStartup",false).toBool() || startupConfig.disableEditing) disableEditing = true; settings->endGroup(); if (defaultFont != "" && defaultFontSize > 0 && this->guiAvailable) { QWebSettings *settings = QWebSettings::globalSettings(); settings->setFontFamily(QWebSettings::StandardFont, defaultFont); // QWebkit DPI is hard coded to 96. Hence, we calculate the correct // font size based on desktop logical DPI. settings->setFontSize(QWebSettings::DefaultFontSize, defaultFontSize * (QApplication::desktop()->logicalDpiX() / 96.0) ); } if (defaultFont != "" && defaultFontSize <= 0 && this->guiAvailable) { QWebSettings *settings = QWebSettings::globalSettings(); settings->setFontFamily(QWebSettings::StandardFont, defaultFont); } settings->beginGroup("Appearance"); QString theme = settings->value("themeName", "").toString(); loadTheme(resourceList,colorList,theme); autoHideEditorToolbar = settings->value("autoHideEditorToolbar", true).toBool(); settings->endGroup(); minIndexInterval = 5000; maxIndexInterval = 120000; indexResourceCountPause=2; indexNoteCountPause=100; isFullscreen=false; indexPDFLocally=getIndexPDFLocally(); forceSearchLowerCase=getForceSearchLowerCase(); strictDTD = getStrictDTD(); bypassTidy = getBypassTidy(); forceUTF8 = getForceUTF8(); settings->beginGroup("Thumbnail"); minimumThumbnailInterval = settings->value("minTime", 5).toInt(); maximumThumbnailInterval = settings->value("maxTime", 60).toInt(); batchThumbnailCount = settings->value("count", 1).toInt(); disableThumbnails = settings->value("disabled", false).toBool(); settings->endGroup(); // reset username full_username = ""; // Set auto-save interval autoSaveInterval = getAutoSaveInterval()*1000; multiThreadSaveEnabled = this->getMultiThreadSave(); useLibTidy = this->getUseLibTidy(); exitManager = new ExitManager(); exitManager->loadExits(); } // Return the path the program is executing under // If we are in /usr/bin, then we need to return /usr/share/nixnote2. // This is because we want to find other paths (like images). This // allows for users to run it out of a non-path location. QString Global::getProgramDirPath() { QString path = QCoreApplication::applicationDirPath(); if (path.endsWith("/bin")) { path.chop(3); return path+"share/nixnote2"; } return path; } void Global::setDeleteConfirmation(bool value) { settings->beginGroup("Appearance"); settings->setValue("confirmDeletes", value); settings->endGroup(); } // Should we confirm all deletes? bool Global::confirmDeletes() { settings->beginGroup("Appearance"); bool confirmDeletes = settings->value("confirmDeletes", true).toBool(); settings->endGroup(); return confirmDeletes; } // Should we display tag counts? This is really just a stub for future changes QString Global::tagBehavior() { return "Count"; } // Append the filter criteria to the filterCriteria queue. void Global::appendFilter(FilterCriteria *criteria) { // First, find out if we're already viewing history. If we are we // chop off the end of the history & start a new one if (filterPosition+1 < filterCriteria.size()) { int position = filterPosition; while (position+1 < filterCriteria.size()) delete filterCriteria.takeAt(position); } filterCriteria.append(criteria); } // Should we show the tray icon? bool Global::showTrayIcon() { bool showTrayIcon; settings->beginGroup("Appearance"); showTrayIcon = settings->value("showTrayIcon", false).toBool(); settings->endGroup(); return showTrayIcon; } // Should we minimize to the tray bool Global::minimizeToTray() { bool minimizeToTray; settings->beginGroup("Appearance"); minimizeToTray = settings->value("minimizeToTray", false).toBool(); settings->endGroup(); return minimizeToTray; } // Should we close to the tray? bool Global::closeToTray() { bool showTrayIcon; settings->beginGroup("Appearance"); showTrayIcon = settings->value("closeToTray", false).toBool(); settings->endGroup(); return showTrayIcon; } // Save the user request to minimize to the tray void Global::setMinimizeToTray(bool value) { settings->beginGroup("SaveState"); settings->setValue("minimizeToTray", value); settings->endGroup(); } // Save the user's request to close to the tray void Global::setCloseToTray(bool value) { settings->beginGroup("SaveState"); settings->setValue("closeToTray", value); settings->endGroup(); } // Should we whow the note list grid? bool Global::showNoteListGrid() { bool showNoteListGrid; settings->beginGroup("Appearance"); showNoteListGrid = settings->value("showNoteListGrid", false).toBool(); settings->endGroup(); return showNoteListGrid; } // Should we alternate the note list colors? bool Global::alternateNoteListColors() { bool alternateNoteListColors; settings->beginGroup("Appearance"); alternateNoteListColors = settings->value("alternateNoteListColors", true).toBool(); settings->endGroup(); return alternateNoteListColors; } // Save the position of a column in the note list. void Global::setColumnPosition(QString col, int position) { if (listView == ListViewWide) settings->beginGroup("ColumnPosition-Wide"); else settings->beginGroup("ColumnPosition-Narrow"); settings->setValue(col, position); settings->endGroup(); } // Save the with of a column in the note list void Global::setColumnWidth(QString col, int width) { if (listView == ListViewWide) settings->beginGroup("ColumnWidth-Wide"); else settings->beginGroup("ColumnWidth-Narrow"); settings->setValue(col, width); settings->endGroup(); } // Get the desired width for a given column int Global::getColumnWidth(QString col) { if (listView == ListViewWide) settings->beginGroup("ColumnWidth-Wide"); else settings->beginGroup("ColumnWidth-Narrow"); int value = settings->value(col, -1).toInt(); settings->endGroup(); return value; } // Get the position of a given column in the note list int Global::getColumnPosition(QString col) { if (listView == ListViewWide) settings->beginGroup("ColumnPosition-Wide"); else settings->beginGroup("ColumnPosition-Narrow"); int value = settings->value(col, -1).toInt(); settings->endGroup(); return value; } // Get the minimum recognition confidence. Anything below this minimum will not be // included in search results. int Global::getMinimumRecognitionWeight() { settings->beginGroup("Search"); int value = settings->value("minimumRecognitionWeight", 20).toInt(); settings->endGroup(); return value; } void Global::setClearNotebookOnSearch(bool value) { settings->beginGroup("Search"); settings->setValue("clearNotebookOnSearch",value); settings->endGroup(); } void Global::setClearTagsOnSearch(bool value) { settings->beginGroup("Search"); settings->setValue("clearTagsOnSearch",value); settings->endGroup(); } void Global::setClearSearchOnNotebook(bool value) { settings->beginGroup("Search"); settings->setValue("clearSearchOnNotebook",value); settings->endGroup(); } void Global::setTagSelectionOr(bool value) { settings->beginGroup("Search"); settings->setValue("tagSelectionOr",value); settings->endGroup(); } bool Global::getClearNotebookOnSearch() { settings->beginGroup("Search"); bool value = settings->value("clearNotebookOnSearch",false).toBool(); settings->endGroup(); return value; } bool Global::getClearSearchOnNotebook() { settings->beginGroup("Search"); bool value = settings->value("clearSearchOnNotebook",false).toBool(); settings->endGroup(); return value; } bool Global::getClearTagsOnSearch() { settings->beginGroup("Search"); bool value = settings->value("clearTagsOnSearch",false).toBool(); settings->endGroup(); return value; } bool Global::getBackgroundIndexing() { settings->beginGroup("Search"); bool value = settings->value("backgroundIndexing",false).toBool(); settings->endGroup(); return value; } void Global::setBackgroundIndexing(bool value) { settings->beginGroup("Search"); settings->setValue("backgroundIndexing",value); settings->endGroup(); } bool Global::getTagSelectionOr() { settings->beginGroup("Search"); bool value = settings->value("tagSelectionOr",false).toBool(); settings->endGroup(); return value; } void Global::setIndexPDFLocally(bool value) { settings->beginGroup("Search"); settings->setValue("indexPDFLocally",value); settings->endGroup(); indexPDFLocally=value; } bool Global::getIndexPDFLocally() { settings->beginGroup("Search"); bool value = settings->value("indexPDFLocally",true).toBool(); settings->endGroup(); indexPDFLocally = value; return value; } void Global::setForceSearchLowerCase(bool value) { settings->beginGroup("Search"); settings->setValue("forceLowerCase",value); settings->endGroup(); indexPDFLocally=value; } bool Global::getForceSearchLowerCase() { settings->beginGroup("Search"); bool value = settings->value("forceLowerCase",false).toBool(); settings->endGroup(); forceSearchLowerCase = value; return value; } void Global::setStrictDTD(bool value) { settings->beginGroup("Debugging"); settings->setValue("strictDTD",value); settings->endGroup(); strictDTD=value; } bool Global::getStrictDTD() { settings->beginGroup("Debugging"); bool value = settings->value("strictDTD",true).toBool(); settings->endGroup(); strictDTD = value; return value; } void Global::setBypassTidy(bool value) { settings->beginGroup("Debugging"); settings->setValue("bypassTidy",value); settings->endGroup(); bypassTidy=value; } bool Global::getBypassTidy() { settings->beginGroup("Debugging"); bool value = settings->value("bypassTidy",true).toBool(); settings->endGroup(); bypassTidy = value; return value; } bool Global::getForceUTF8() { settings->beginGroup("Debugging"); bool value = settings->value("forceUTF8",true).toBool(); settings->endGroup(); forceUTF8 = value; return value; } void Global::setForceUTF8(bool value) { settings->beginGroup("Debugging"); settings->setValue("forceUTF8",value); settings->endGroup(); forceUTF8=value; } // Save the minimum recognition weight for an item to be included in a serch result void Global::setMinimumRecognitionWeight(int weight) { settings->beginGroup("Search"); settings->setValue("minimumRecognitionWeight", weight); settings->endGroup(); } // Should we synchronize attachments? Not really useful except in debugging bool Global::synchronizeAttachments() { settings->beginGroup("Search"); bool value = settings->value("synchronizeAttachments", true).toBool(); settings->endGroup(); return value; } // Should we synchronize attachments? Not really useful except in debugging void Global::setSynchronizeAttachments(bool value) { settings->beginGroup("Search"); settings->setValue("synchronizeAttachments", value); settings->endGroup(); } // get the last time we issued a reminder qlonglong Global::getLastReminderTime() { settings->beginGroup("Reminders"); qlonglong value = settings->value("lastReminderTime", 0).toLongLong(); settings->endGroup(); return value; } // Save the last time we issued a reminder. void Global::setLastReminderTime(qlonglong value) { settings->beginGroup("Reminders"); settings->setValue("lastReminderTime", value); settings->endGroup(); } // Setup the default date & time formatting void Global::setupDateTimeFormat() { QString datefmt; QString timefmt; enum DateFormat { MMddyy = 1, MMddyyyy = 2, Mddyyyy = 3, Mdyyyy = 4, ddMMyy = 5, dMyy = 6, ddMMyyyy = 7, dMyyyy = 8, yyyyMMdd = 9, yyMMdd = 10 }; enum TimeFormat { HHmmss = 1, HHMMSSa = 2, HHmm = 3, HHmma = 4, hhmmss = 5, hhmmssa = 6, hmmssa = 7, hhmm = 8, hhmma = 9, hmma = 10 }; settings->beginGroup("Locale"); int date = settings->value("dateFormat", MMddyy).toInt(); int time = settings->value("timeFormat", HHmmss).toInt(); settings->endGroup(); datefmt = "MM/dd/yy"; switch (date) { case MMddyy: datefmt = "MM/dd/yy"; break; case MMddyyyy: datefmt = "MM/dd/yyyy"; break; case Mddyyyy: datefmt = "M/dd/yyyy"; break; case Mdyyyy: datefmt = "M/d/yyyy"; break; case ddMMyy: datefmt = "dd/MM/yy"; break; case dMyy: datefmt = "d/M/yy"; break; case ddMMyyyy: datefmt = "dd/MM/yyyy"; break; case dMyyyy: datefmt = "d/M/yyyy"; break; case yyyyMMdd: datefmt = "yyyy-MM-dd"; break; case yyMMdd: datefmt = "yy-MM-dd"; break; } timefmt = "HH:mm:ss"; switch (time) { case HHmmss: timefmt = "HH:mm:ss"; break; case HHMMSSa: timefmt = "HH:MM:SS a"; break; case HHmm: timefmt = "HH:mm"; break; case HHmma: timefmt = "HH:mm a"; break; case hhmmss: timefmt = "hh:mm:ss"; break; case hhmmssa: timefmt = "hh:mm:ss a"; break; case hmmssa: timefmt = "h:mm:ss a"; break; case hhmm: timefmt = "hh:mm"; break; case hhmma: timefmt = "hh:mm a"; break; case hmma: timefmt = "h:mm a"; break; } this->dateFormat = datefmt; this->timeFormat = timefmt; } // Get the username from the system QString Global::getUsername() { if (!autosetUsername()) return ""; // First, see if the Evernote user record is available UserTable userTable(db); User user; userTable.getUser(user); if (user.name.isSet()) return user.name; // Windows Check #ifndef _WIN32 register struct passwd *pw; register uid_t uid; QString username=""; uid = geteuid(); pw = getpwuid(uid); if (pw) { username = pw->pw_gecos; username.remove(QChar(',')); if (username != "") return username.trimmed(); username = pw->pw_name; return username.trimmed(); } #else return qgetenv("USERNAME"); #endif // End Windows Check return ""; } // Determine if we should automatically set the username on new notes bool Global::autosetUsername() { settings->beginGroup("Appearance"); bool value = settings->value("autosetUsername", true).toBool(); settings->endGroup(); return value; } // Set the preference of auto-setting the username void Global::setAutosetUsername(bool value) { settings->beginGroup("Appearance"); settings->setValue("autosetUsername", value); settings->endGroup(); } // Utility function for case insensitive sorting bool caseInsensitiveLessThan(const QString &s1, const QString &s2) { return s1.toLower() < s2.toLower(); } // Get the default GUI font QFont Global::getGuiFont(QFont f) { if (defaultGuiFont != "") f.setFamily(defaultGuiFont); if (defaultGuiFontSize > 0) f.setPointSize(defaultGuiFontSize); return f; } // Get a QIcon of in an icon theme QIcon Global::getIconResource(QHash &resourceList, QString key) { if (resourceList.contains(key) && resourceList[key].trimmed()!="") return QIcon(resourceList[key]); return QIcon(key); } QString Global::getEditorStyle(bool colorOnly) { QString returnValue = ""; if (!colorOnly) { returnValue = "document.body.style.background='"+this->getEditorBackgroundColor()+"'; "; } returnValue = returnValue+"document.body.style.color='"+this->getEditorFontColor()+"';"; return "function setColor() { "+returnValue +" }; setColor();"; } QString Global::getEditorFontColor() { if (colorList.contains("editorFontColor")) return colorList["editorFontColor"].trimmed(); else return "black"; } QString Global::getEditorBackgroundColor() { if (colorList.contains("editorBackgroundColor")) return colorList["editorBackgroundColor"].trimmed(); else return "white"; } QString Global::getEditorCss() { QString css=fileManager.getQssDirPath("")+"editor.css"; if (colorList.contains("editorCss")) { css = fileManager.getQssDirPathUser("")+colorList["editorCss"].trimmed(); if (QFile(css).exists()) return css; css = fileManager.getQssDirPath("")+colorList["editorCss"].trimmed(); if (QFile(css).exists()) return css; } return css; } // Get a QIcon in an icon theme QIcon Global::getIconResource(QString key) { return this->getIconResource(resourceList, key); } // Get a QPixmap from an icon theme QPixmap Global::getPixmapResource(QString key) { return this->getPixmapResource(resourceList, key); } // Get a QPixmap from an icon theme QPixmap Global::getPixmapResource(QHash &resourceList, QString key) { if (resourceList.contains(key) && resourceList[key].trimmed()!="") return QPixmap(resourceList[key]); return QPixmap(key); } // Load a theme into a resourceList. void Global::loadTheme(QHash &resourceList, QHash &colorList, QString theme) { resourceList.clear(); colorList.clear(); if (theme.trimmed() == "") return; #ifndef _WIN32 QFile systemTheme(fileManager.getProgramDirPath("theme.ini")); #else QFile systemTheme(fileManager.getProgramDirPath("theme.ini").replace("\\","/")); #endif this->loadThemeFile(resourceList,colorList, systemTheme, theme); #ifndef _WIN32 QFile userTheme(fileManager.getHomeDirPath("theme.ini")); #else QFile userTheme(fileManager.getHomeDirPath("theme.ini").replace("\\","/")); #endif this->loadThemeFile(resourceList, colorList, userTheme, theme); } // Load a theme from a given file void Global::loadThemeFile(QFile &file, QString themeName) { this->loadThemeFile(resourceList, colorList, file, themeName); } // Load a theme from a given file void Global::loadThemeFile(QHash &resourceList, QHash &colorList, QFile &file, QString themeName) { if (!file.exists()) return; if(!file.open(QIODevice::ReadOnly)) return; QTextStream in(&file); bool themeFound = false; QString themeHeader = "[" + themeName.trimmed() + "]"; while(!in.atEnd()) { QString line = in.readLine(); if (!line.startsWith("#")){ if (line.startsWith("[") && themeHeader != line) themeFound = false; if (line.startsWith("[") && themeHeader == line) themeFound = true; if (themeFound && !line.startsWith("[") && line != "") { QStringList fields = line.split("="); if (fields.size() >= 2) { QString key = fields[0].simplified(); QString value = fields[1].split("#").at(0).simplified(); #ifdef _WIN32 value = value.replace("/usr/share/nixnote2/images/",fileManager.getImageDirPath("").replace("\\","/")); #endif QFile f(value); if (f.exists()) { resourceList.remove(":"+key); resourceList.insert(":"+key,value); } else { colorList.remove("key"); colorList.insert(key,value); } } } } } file.close(); } // Get all available themes QStringList Global::getThemeNames() { QStringList values; values.empty(); #ifndef _WIN32 QFile systemTheme(fileManager.getProgramDirPath("theme.ini")); #else QFile systemTheme(fileManager.getProgramDirPath("theme.ini").replace("\\","/")); #endif this->getThemeNamesFromFile(systemTheme, values); #ifndef _WIN32 QFile userTheme(fileManager.getHomeDirPath("theme.ini")); #else QFile userTheme(fileManager.getHomeDirPath("theme.ini").replace("\\","/")); #endif this->getThemeNamesFromFile(userTheme, values); if (!nonAsciiSortBug) qSort(values.begin(), values.end(), caseInsensitiveLessThan); return values; } // Get themes contained in a given file void Global::getThemeNamesFromFile(QFile &file, QStringList &values) { if (!file.exists()) return; if(!file.open(QIODevice::ReadOnly)) return; QTextStream in(&file); while(!in.atEnd()) { QString line = in.readLine().simplified(); if (line.startsWith("[")) { QString name = line.mid(1); name.chop(1); if (name.simplified() != "") { if (!values.contains(name, Qt::CaseInsensitive)) { values.append(name); } } } } file.close(); } // Get the full path of a resource in a theme file QString Global::getResourceFileName(QHash &resourceList, QString key) { if (resourceList.contains(key) && resourceList[key].trimmed()!="") return resourceList[key]; // If we have a default resource QString fileName = key.remove(":"); return fileManager.getImageDirPath("")+fileName; } // save the proxy address void Global::setProxyHost(QString proxy) { settings->beginGroup("Proxy"); settings->setValue("hostName", proxy); settings->endGroup(); } // save the port for the proxy server void Global::setProxyPort(int port) { settings->beginGroup("Proxy"); settings->setValue("port", port); settings->endGroup(); } // Save the proxy password void Global::setProxyPassword(QString password) { settings->beginGroup("Proxy"); settings->setValue("password", password); settings->endGroup(); } // Save the proxy userid void Global::setProxyUserid(QString userid){ settings->beginGroup("Proxy"); settings->setValue("userid", userid); settings->endGroup(); } // get the proxy hostname QString Global::getProxyHost() { settings->beginGroup("Proxy"); QString value = settings->value("hostName", "").toString(); settings->endGroup(); return value; } // Get the proxy port number int Global::getProxyPort() { settings->beginGroup("Proxy"); int value = settings->value("port", 0).toInt(); settings->endGroup(); return value; } // Get the proxy password QString Global::getProxyPassword() { settings->beginGroup("Proxy"); QString value = settings->value("password", "").toString(); settings->endGroup(); return value; } // Get the proxy userid QString Global::getProxyUserid() { settings->beginGroup("Proxy"); QString value = settings->value("userid", "").toString(); settings->endGroup(); return value; } // Get the proxy userid void Global::setProxyEnabled(bool value) { settings->beginGroup("Proxy"); settings->setValue("enabled", value); settings->endGroup(); } // Get the proxy userid bool Global::isProxyEnabled() { settings->beginGroup("Proxy"); bool value = settings->value("enabled", false).toBool(); settings->endGroup(); return value; } // Set the Sock5 proxy void Global::setSocks5Enabled(bool value) { settings->beginGroup("Proxy"); settings->setValue("socks5", value); settings->endGroup(); } // Get the Socks5 proxy bool Global::isSocks5Enabled() { settings->beginGroup("Proxy"); bool value = settings->value("socks5", false).toBool(); settings->endGroup(); return value; } // Mouse middle click actions void Global::setMiddleClickAction(int value) { settings->beginGroup("Appearance"); settings->setValue("mouseMiddleClickOpen", value); settings->endGroup(); } int Global::getMiddleClickAction() { settings->beginGroup("Appearance"); int value = settings->value("mouseMiddleClickOpen", 0).toInt(); settings->endGroup(); return value; } bool Global::newNoteFocusToTitle() { settings->beginGroup("Appearance"); bool returnValue = settings->value("newNoteFocusOnTitle", false).toBool(); settings->endGroup(); return returnValue; } void Global::setNewNoteFocusToTitle(bool focus) { settings->beginGroup("Appearance"); settings->setValue("newNoteFocusOnTitle", focus); settings->endGroup(); } bool Global::disableImageHighlight() { settings->beginGroup("Debugging"); bool value = settings->value("disableImageHighlight", false).toBool(); settings->endGroup(); return value; } // What version of the database are we using? int Global::getDatabaseVersion() { settings->beginGroup("SaveState"); int value = settings->value("databaseVersion", 1).toInt(); settings->endGroup(); return value; } // What version of the database are we using? void Global::setDatabaseVersion(int value) { settings->beginGroup("SaveState"); settings->setValue("databaseVersion", value); settings->endGroup(); return; } // What is doing the system notification? QString Global::systemNotifier() { settings->beginGroup("Appearance"); QString value = settings->value("systemNotifier", "qt").toString(); settings->endGroup(); return value; } void Global::stackDump(int max) { // Windows Check #ifndef _WIN32 void *array[30]; size_t size; QLOG_ERROR() << "***** Dumping stack *****"; // get void*'s for all entries on the stack size = backtrace(array, 30); char **messages = backtrace_symbols(array, size); if (max > 0) size = max+1; // We add one here because we always skip the first thing on the stack (this function). for (size_t i = 1; i < size && messages != NULL; ++i) { char *mangled_name = 0, *offset_begin = 0, *offset_end = 0; // find parantheses and +address offset surrounding mangled name for (char *p = messages[i]; *p; ++p) { if (*p == '(') { mangled_name = p; } else if (*p == '+') { offset_begin = p; } else if (*p == ')') { offset_end = p; break; } } // if the line could be processed, attempt to demangle the symbol if (mangled_name && offset_begin && offset_end && mangled_name < offset_begin) { *mangled_name++ = '\0'; *offset_begin++ = '\0'; *offset_end++ = '\0'; int status; char * real_name = abi::__cxa_demangle(mangled_name, 0, 0, &status); // if demangling is successful, output the demangled function name if (status == 0) { QLOG_ERROR() << "[bt]: (" << i << ") " << messages[i] << " : " << real_name << "+" << offset_begin << offset_end; } // otherwise, output the mangled function name else { QLOG_ERROR() << "[bt]: (" << i << ") " << messages[i] << " : " << mangled_name << "+" << offset_begin << offset_end; } free(real_name); } // otherwise, print the whole line else { QLOG_ERROR() << "[bt]: (" << i << ") " << messages[i]; } } free(messages); QLOG_ERROR() << "**** Stack dump complete *****"; #else Q_UNUSED(max) #endif // End windows check } //************************************************ //* Set the user debug level. //************************************************ void Global::setDebugLevel() { settings->beginGroup("Debugging"); int level = settings->value("messageLevel", -1).toInt(); settings->endGroup(); // Setup the QLOG functions for debugging & messages QsLogging::Logger& logger = QsLogging::Logger::instance(); if (level == QsLogging::TraceLevel) logger.setLoggingLevel(QsLogging::TraceLevel); else if (level == QsLogging::DebugLevel) logger.setLoggingLevel(QsLogging::DebugLevel); else if (level == QsLogging::InfoLevel || level == -1) logger.setLoggingLevel(QsLogging::InfoLevel); else if (level == QsLogging::WarnLevel) logger.setLoggingLevel(QsLogging::WarnLevel); else if (level == QsLogging::ErrorLevel) logger.setLoggingLevel(QsLogging::ErrorLevel); else if (level == QsLogging::FatalLevel) logger.setLoggingLevel(QsLogging::FatalLevel); else { logger.setLoggingLevel(QsLogging::InfoLevel); QLOG_WARN() << "Invalid message logging level " << level; } } Global global; // Should we preview fonts in the editor window? bool Global::previewFontsInDialog() { settings->beginGroup("Appearance"); bool value = settings->value("previewFonts", false).toBool(); settings->endGroup(); return value; } // Set the previewing of fonts in the editor window. void Global::setPreviewFontsInDialog(bool value) { settings->beginGroup("Appearance"); settings->setValue("previewFonts", value); settings->endGroup(); } // Should we show a popup on sync errors? void Global::setPopupOnSyncError(bool value) { global.settings->beginGroup("Sync"); global.settings->setValue("popupOnSyncError", value); global.settings->endGroup(); } bool Global::popupOnSyncError() { global.settings->beginGroup("Sync"); bool value = global.settings->value("popupOnSyncError", true).toBool(); global.settings->endGroup(); return value; } // save the user-specified auto-save interval int Global::getAutoSaveInterval() { global.settings->beginGroup("Appearance"); int value = global.settings->value("autoSaveInterval", 500).toInt(); global.settings->endGroup(); return value; } // Save the user specified auto-save interval void Global::setAutoSaveInterval(int value) { global.settings->beginGroup("Appearance"); global.settings->setValue("autoSaveInterval", value); global.settings->endGroup(); global.autoSaveInterval = value*1000; } // Should we intercept SIGHUP on Unix platforms bool Global::getInterceptSigHup() { global.settings->beginGroup("Appearance"); bool value = global.settings->value("interceptSigHup", true).toBool(); global.settings->endGroup(); return value; } void Global::setInterceptSigHup(bool value) { global.settings->beginGroup("Appearance"); global.settings->setValue("interceptSigHup", value); global.settings->endGroup(); } // Should we use multiple theads to do note saving bool Global::getMultiThreadSave() { global.settings->beginGroup("Appearance"); bool value = global.settings->value("multiThreadSave", false).toBool(); global.settings->endGroup(); return value; } void Global::setMultiThreadSave(bool value) { global.settings->beginGroup("Appearance"); global.settings->setValue("multiThreadSave", value); global.settings->endGroup(); this->multiThreadSaveEnabled = value; } // Should we use multiple theads to do note saving bool Global::getUseLibTidy() { global.settings->beginGroup("Appearance"); bool value = global.settings->value("useLibTidy", false).toBool(); global.settings->endGroup(); return value; } void Global::setUseLibTidy(bool value) { global.settings->beginGroup("Appearance"); global.settings->setValue("useLibTidy", value); global.settings->endGroup(); this->useLibTidy = value; #ifndef _WIN32 this->useLibTidy = false; // Removing obsolete setting. #endif } nixnote2-2.0.2/global.h000066400000000000000000000440001315604104400146660ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef GLOBAL_H #define GLOBAL_H #include #include "application.h" #include #include "logger/qslog.h" #include "logger/qslogdest.h" #include "settings/filemanager.h" #include "settings/startupconfig.h" #include "filters/filtercriteria.h" #include "models/notecache.h" #include "gui/shortcutkeys.h" #include "settings/accountsmanager.h" #include "reminders/remindermanager.h" #include "sql/databaseconnection.h" #include "threads/indexrunner.h" #include "utilities/crossmemorymapper.h" #include "exits/exitpoint.h" #include "exits/exitmanager.h" #include #include #include //******************************* //* This class is used to store //* global values across the //* program. //******************************* #define NOTE_TABLE_LID_POSITION 0 #define NOTE_TABLE_DATE_CREATED_POSITION 1 #define NOTE_TABLE_DATE_UPDATED_POSITION 2 #define NOTE_TABLE_TITLE_POSITION 3 #define NOTE_TABLE_NOTEBOOK_LID_POSITION 4 #define NOTE_TABLE_NOTEBOOK_POSITION 5 #define NOTE_TABLE_TAGS_POSITION 6 #define NOTE_TABLE_AUTHOR_POSITION 7 #define NOTE_TABLE_DATE_SUBJECT_POSITION 8 #define NOTE_TABLE_DATE_DELETED_POSITION 9 #define NOTE_TABLE_SOURCE_POSITION 10 #define NOTE_TABLE_SOURCE_URL_POSITION 11 #define NOTE_TABLE_SOURCE_APPLICATION_POSITION 12 #define NOTE_TABLE_LATITUDE_POSITION 13 #define NOTE_TABLE_LONGITUDE_POSITION 14 #define NOTE_TABLE_ALTITUDE_POSITION 15 #define NOTE_TABLE_HAS_ENCRYPTION_POSITION 16 #define NOTE_TABLE_HAS_TODO_POSITION 17 #define NOTE_TABLE_IS_DIRTY_POSITION 18 #define NOTE_TABLE_SIZE_POSITION 19 #define NOTE_TABLE_REMINDER_ORDER_POSITION 20 #define NOTE_TABLE_REMINDER_TIME_POSITION 21 #define NOTE_TABLE_REMINDER_TIME_DONE_POSITION 22 #define NOTE_TABLE_PINNED_POSITION 23 #define NOTE_TABLE_COLOR_POSITION 24 #define NOTE_TABLE_THUMBNAIL_POSITION 25 #define NOTE_TABLE_COLUMN_COUNT 26 #define MOUSE_MIDDLE_CLICK_NEW_TAB 0 #define MOUSE_MIDDLE_CLICK_NEW_WINDOW 1 using namespace std; // Forward declare future classes class DatabaseConnection; class IndexRunner; class Global { public: Global(); // Generic constructor //~Global(); // destructor // Possible ways tags & notebook counts may be displayed to the user enum CountBehavior { CountAll = 1, CountNone = 2 }; CountBehavior countBehavior; // How does the user want tags/notebooks to be counted. bool disableUploads; // Should we disable all uploads to Evernote? Useful for testing. // Valid values for the note list appearance. Should it be a narrow or wide list enum ListViewSetup { ListViewWide = 1, listViewNarrow = 2 }; ListViewSetup listView; // Current desired note list value int argc; // Initial argument count from the program start char** argv; // List of arguments from the program start FileManager fileManager; // Manage file paths AccountsManager *accountsManager; // Manage user account QCoreApplication *application; // pointer to this current application unsigned int cryptCounter; // Count of crytpographic entries. This is incremented each time we encrypt some text. QString attachmentNameDelimeter; // Delimeter between attachment ID & name string username; // This is probably obsolete string password; // This is probably obsolete bool connected; // Are we currently connected to Evernote? bool enableIndexing; // background indexing bool pdfPreview; // Should we view PDFs inline? bool showGoodSyncMessagesInTray; // Should we show good sync messages in the tray, or just errors? CrossMemoryMapper *sharedMemory; // Shared memory key. Useful to prevent multiple instances and for cross memory communication bool confirmDeletes(); // Should we confirm deletes? bool purgeTemporaryFilesOnShutdown; // Should we purge temporary files on shutdown? void setDeleteConfirmation(bool value); // Set delete confirmation QString tagBehavior(); // Should inactive tags be shown? bool newNoteFocusToTitle(); // Should we focus on the note title when a new note has been created? void setNewNoteFocusToTitle(bool focus); // Set if we should focus on the title when a new note is created QString server; // Evernote server to sync with QSettings *settings; // Pointer to the nixnote config file. There is a different one for each account. QSettings *globalSettings; // Pointer to all the config file that is common to all accounts. ShortcutKeys *shortcutKeys; // Keyboard shortcuts defined by the user QList expungedResources; // List of expunged resource LIDs QFileSystemWatcher *resourceWatcher; // Watcher for file system directories. New files here will create anote bool showTrayIcon(); // Should we show the tray icon? bool closeToTray(); // Close it to the tray. We really just hide it. bool minimizeToTray(); // Minimize it to tray rather than the task list. We really just hide it. void setMinimizeToTray(bool value); // Set if we should minimize it to the tray void setCloseToTray(bool value); // Set if we should close it to the tray bool showNoteListGrid(); // Should we whow the table grid? bool alternateNoteListColors(); // Should we alternate the table colors? bool getForceUTF8(); // force UTF8 encoding if not given by Evernote void setForceUTF8(bool value); // force UTF8 encoding if not given by Evernote void setColumnPosition(QString col, int position); // Save the order of a note list's column. void setColumnWidth(QString col, int width); // Save the width of a note list column int getColumnPosition(QString col); // Get the desired position of a note column int getColumnWidth(QString col); // Get the desired width o a note column. int getMinimumRecognitionWeight(); // Minimum OCR recognition confidence before including it in search results. void setSynchronizeAttachments(bool value); // Should at bool synchronizeAttachments(); // This is probabably obsolete qlonglong getLastReminderTime(); // Get the last time we actually showed a user note reminders. void setLastReminderTime(qlonglong value); // Save the date/time we last showed a user note reminders. void setMinimumRecognitionWeight(int weight); // Set the minimum OCR recgnition confidence before including it in search results. bool popupOnSyncError(); // Should we do a popup on every sync error? void setPopupOnSyncError(bool value); // Set if we should do a popup on sync errors. void setBackgroundIndexing(bool value); // Should we do indexing in a separate thread? bool getBackgroundIndexing(); // Should we do indexing in a separate thread? QString dateFormat; // Desired display date format QString timeFormat; // Desired display time format DatabaseConnection *db; // "default" DB connection for the main thread. bool javaFound; // Have we found Java? bool forceUTF8; // force UTF8 encoding QString defaultFont; // Default editor font name int defaultFontSize; // Default editor font size int defaultGuiFontSize; // Default GUI font size QString defaultGuiFont; // Default GUI font name bool startupNewNote; // Were we started with the command to begin a new note? bool forceNoStartMimized; // Force the system to not start minimized, despite the user's settings bool forceSystemTrayAvailable; // Override QSystemTrayIcon::isSystemTrayAvailable() bool forceStartMinimized; // Force it to start minimized, despiet the user's settings bool startMinimized; // Do user prefernces say to start minimized? bool forceWebFonts; qint32 startupNote; // Initial note to startup with. qint32 minIndexInterval; // Minimum interval to check for any unindexed notes. qint32 maxIndexInterval; // Maximum interval to check for any unindexed notes. qint32 indexResourceCountPause; // After indexing this many resources we pause to avoid overloading the CPU qint32 indexNoteCountPause; // After indexing this many notes we pause to avoid overloading the CPU // Filter criteria. Used for things like the back & forward buttons QList filterCriteria; qint32 filterPosition; QReadWriteLock *dbLock; // Database read/write lock mutex QHash cache; // Note cache used to keep from needing to re-format the same note for a display void setup(StartupConfig config, bool guiAvailable); // Setup the global variables bool guiAvailable; // Is there a GUI available? QString full_username; // current username bool autosetUsername(); // Should the username be set automatically? void setAutosetUsername(bool value); QString getUsername(); // pull username from the system. QString getProgramDirPath(); // Get the path the program is executing from QList< QPair > passwordRemember; // Cache of passwords QHash< QString, QPair > passwordSafe; // Saved passwords void appendFilter(FilterCriteria *criteria); void setupDateTimeFormat(); // Setup the user's desired date & time format QFont getGuiFont(QFont f); // Get the user's desired GUI font int getDatabaseVersion(); // What DB version are we using? void setDatabaseVersion(int value); // Save the current database version bool nonAsciiSortBug; // Workaround for non-ASCII characters in tag name sorting bool autoHideEditorToolbar; // Should the editor bar be hidden when focus is lost? ReminderManager *reminderManager; // Used to alert the user when a reminder time has expired // These functions deal with proxy settings void setProxyHost(QString proxy); void setProxyPort(int port); void setProxyPassword(QString password); void setProxyUserid(QString userid); QString getProxyHost(); int getProxyPort(); QString getProxyPassword(); QString getProxyUserid(); bool isProxyEnabled(); bool isSocks5Enabled(); void setProxyEnabled(bool value); void setSocks5Enabled(bool value); QString systemNotifier(); bool previewFontsInDialog(); void setPreviewFontsInDialog(bool value); // Search Behavior void setClearNotebookOnSearch(bool value); void setClearSearchOnNotebook(bool value); void setClearTagsOnSearch(bool value); void setTagSelectionOr(bool value); bool getClearNotebookOnSearch(); bool getClearSearchOnNotebook(); bool getClearTagsOnSearch(); bool getTagSelectionOr(); void setDebugLevel(); bool disableImageHighlight(); // Middle click settings int getMiddleClickAction(); void setMiddleClickAction(int value); bool disableEditing; // Disable all editing of notes bool isFullscreen; // Are we in fullscreen mode? // These functions deal with the icon themes QHash resourceList; // Hashmap of icons used in the current theme QHash colorList; // List of colors used in the current theme bool indexPDFLocally; // Should we index PDFs locally? bool forceSearchLowerCase; // force storing of notes to lower case bool getIndexPDFLocally(); // Should we index PDFs locally (read from settings) void setIndexPDFLocally(bool value); // save local index of PDFs option bool strictDTD; // Should we do strict enml checking? bool getStrictDTD(); // Should we do strict enml checking? (read from settings) void setStrictDTD(bool value); // save strict enml checking bool bypassTidy; // Bypass HTML Tidy bool getBypassTidy(); // should we bypass HTML tidy? void setBypassTidy(bool value); // Set if we should bypass HTML tidy. QString getEditorStyle(bool colorOnly); // Get note editor style overrides QString getEditorFontColor(); // Get the editor font color from the theme QString getEditorBackgroundColor(); // Get the editor background color from the theme QString getEditorCss(); QPixmap getPixmapResource(QHash &resourceList, QString key); // Get a pixmap from the user's (or default) theme QPixmap getPixmapResource(QString key); // Get a pixmap from the user's (or default) theme QIcon getIconResource(QHash &resourceList, QString key); // Get an icon from the user's (or default) theme QIcon getIconResource(QString key); // Get an icon from the user's (or default) theme void loadTheme(QHash &resourceList, QHash &colorList, QString themeName); // Load an icon theme into the resourceList void loadThemeFile(QFile &file, QString themeName); // Load a given theme's values from a a file. void loadThemeFile(QHash &resourceList, QHash &colorList, QFile &file, QString themeName); // Load a given theme's values from a file QStringList getThemeNames(); // Get a list of all available theme names QString getResourceFileName(QHash &resourceList, QString key); // Get the actual file path for a given icon theme QString getResourcefileName(QString key); // Get the actual file path for a given icon theme void getThemeNamesFromFile(QFile &file, QStringList &values); // Get all themes available in a given file void stackDump(int max=0); // Utility to dump the running stack bool getForceSearchLowerCase(); // Get value to force search db in lower case from settings void setForceSearchLowerCase(bool value); // save forceSearchLowerCase IndexRunner *indexRunner; // Pointer to index thread int minimumThumbnailInterval; // Minimum time to scan for thumbnails int maximumThumbnailInterval; // Maximum time to scan for thumbnails bool disableThumbnails; // Disable thumbnail generation int batchThumbnailCount; // Maximum number of thumbails to generate per batch int getAutoSaveInterval(); // Time (in seconds) between auto-saving of notes. void setAutoSaveInterval(int value); // Save auto save interval int autoSaveInterval; // current auto save interval bool getInterceptSigHup(); // Intercept SIGHUP on Unix platforms. void setInterceptSigHup(bool value); // Intercept SIGHUP on Unix platforms void setMultiThreadSave(bool value); // Should we use multiple theads in the browser window to save bool getMultiThreadSave(); bool multiThreadSaveEnabled; void setUseLibTidy(bool value); // Should we use new tidy or classic bool getUseLibTidy(); bool useLibTidy; ExitManager *exitManager; // Utility to manage exit points. }; bool caseInsensitiveLessThan(const QString &s1, const QString &s2); // Helper function to sort values case-insensitive. #endif // GLOBAL_H nixnote2-2.0.2/gpl.txt000066400000000000000000000350021315604104400146020ustar00rootroot00000000000000GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. nixnote2-2.0.2/gui/000077500000000000000000000000001315604104400140435ustar00rootroot00000000000000nixnote2-2.0.2/gui/browserWidgets/000077500000000000000000000000001315604104400170555ustar00rootroot00000000000000nixnote2-2.0.2/gui/browserWidgets/authoreditor.cpp000066400000000000000000000061411315604104400222740ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "authoreditor.h" #include "global.h" #include "sql/notetable.h" extern Global global; AuthorEditor::AuthorEditor(QWidget *parent) : QLineEdit(parent) { // Setup the note title editor QPalette pal; //pal.setColor(QPalette::Text, QColor(102,153,255)); //pal.setColor(QPalette::Text, QColor(14,28,209)); pal.setColor(backgroundRole(), QPalette::Base); setPalette(pal); setFont(global.getGuiFont(font())); this->setPlaceholderText(tr("Click to set author")); inactiveColor = "QLineEdit {background-color: transparent; border-radius: 0px;} "; activeColor = "QLineEdit {border: 1px solid #808080; background-color: white; border-radius: 4px;} "; this->setCursor(Qt::PointingHandCursor); this->setStyleSheet(inactiveColor); hide(); } void AuthorEditor::setActiveColor() { setStyleSheet(activeColor); } void AuthorEditor::setAuthor(qint32 lid, QString text) { currentLid = lid; blockSignals(true); setText(text); blockSignals(false); initialText = text; priorText = text; } void AuthorEditor::focusInEvent(QFocusEvent *e) { QLineEdit::focusInEvent(e); setStyleSheet(activeColor); this->setCursor(Qt::ArrowCursor); emit(focussed(true)); } void AuthorEditor::focusOutEvent(QFocusEvent *e) { QLineEdit::focusOutEvent(e); this->setCursor(Qt::PointingHandCursor); setStyleSheet(inactiveColor); textModified(text()); emit(focussed(false)); } void AuthorEditor::textModified(QString text) { if (this->hasFocus()) return; this->blockSignals(true); NoteTable noteTable(global.db); Note n; noteTable.get(n, currentLid, false,false); QString oldAuthor; NoteAttributes attributes; if (n.attributes.isSet()) attributes = n.attributes; if (attributes.author.isSet()) oldAuthor = attributes.author; if (oldAuthor.trimmed() != text.trimmed()) noteTable.updateAuthor(currentLid, text, true); setText(text); this->blockSignals(false); if (text.trimmed() != initialText.trimmed() || priorText.trimmed() != text.trimmed()) { emit textUpdated(); } priorText = text; } QString AuthorEditor::getText() { return text(); } nixnote2-2.0.2/gui/browserWidgets/authoreditor.h000066400000000000000000000031001315604104400217310ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef AUTHOREDITOR_H #define AUTHOREDITOR_H #include class AuthorEditor : public QLineEdit { Q_OBJECT private: QString activeColor; QString inactiveColor; QString initialText; QString priorText; qint32 currentLid; public: explicit AuthorEditor(QWidget *parent = 0); QString getText(); public slots: void setActiveColor(); void textModified(QString text); void setAuthor(qint32 lid, QString text); signals: void focussed(bool hasFocus); void textUpdated(); protected: virtual void focusInEvent(QFocusEvent *e); virtual void focusOutEvent(QFocusEvent *e); }; #endif // AUTHOREDITOR_H nixnote2-2.0.2/gui/browserWidgets/colormenu.cpp000066400000000000000000000036371315604104400215750ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "colormenu.h" ColorMenu::ColorMenu(QObject *parent) : QObject(parent) { this->parent = parent; currentColor.setNamedColor("black"); populateList(); } void ColorMenu::populateList() { QStringList list = QColor::colorNames(); for (int i=0; isetToolTip(list[i]); newAction->setText(list[i]); menu.addAction(newAction); connect(newAction, SIGNAL(hovered()), this, SLOT(itemHovered())); } } QColor *ColorMenu::getColor() { return ¤tColor; } QMenu *ColorMenu::getMenu() { return &menu; } void ColorMenu::setDefault(QColor color) { currentColor = color; } void ColorMenu::itemHovered() { if (menu.activeAction() != NULL && menu.activeAction()->toolTip() != NULL) { currentColor.setNamedColor(menu.activeAction()->toolTip()); } } nixnote2-2.0.2/gui/browserWidgets/colormenu.h000066400000000000000000000026011315604104400212300ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef COLORMENU_H #define COLORMENU_H #include #include #include class ColorMenu : public QObject { Q_OBJECT private: QMenu menu; QObject *parent; void populateList(); QColor currentColor; public: explicit ColorMenu(QObject *parent = 0); void setDefault(QColor color); QColor* getColor(); QMenu* getMenu(); signals: public slots: void itemHovered(); }; #endif // COLORMENU_H nixnote2-2.0.2/gui/browserWidgets/dateeditor.cpp000066400000000000000000000113271315604104400217110ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "dateeditor.h" #include "sql/notetable.h" #include #include #include DateEditor::DateEditor(QWidget *parent) : QWidget(parent) { QVBoxLayout *layout = new QVBoxLayout(); QHBoxLayout *vLayout = new QHBoxLayout(); vLayout->setMargin(4); QHBoxLayout *v2Layout = new QHBoxLayout(); v2Layout->setMargin(4); layout->setMargin(0); vLayout->addWidget(new QLabel(tr("Created:"))); vLayout->addWidget(&createdDate); vLayout->addStretch(5); vLayout->addWidget(new QLabel(tr("Updated:"))); vLayout->addWidget(&updatedDate); vLayout->addStretch(5); vLayout->addWidget(new QLabel(tr("Subject:"))); vLayout->addWidget(&subjectDate); vLayout->addStretch(10); layout->addLayout(vLayout); v2Layout->addWidget(&authorEditor); v2Layout->addWidget(&locationEditor); layout->addLayout(v2Layout); connect(&createdDate, SIGNAL(dateChanged(QDate)), this, SLOT(emitChangedSignal())); connect(&updatedDate, SIGNAL(dateChanged(QDate)), this, SLOT(emitChangedSignal())); connect(&subjectDate, SIGNAL(dateChanged(QDate)), this, SLOT(emitChangedSignal())); connect(&createdDate, SIGNAL(timeChanged(QTime)), this, SLOT(emitChangedSignal())); connect(&updatedDate, SIGNAL(timeChanged(QTime)), this, SLOT(emitChangedSignal())); connect(&subjectDate, SIGNAL(timeChanged(QTime)), this, SLOT(emitChangedSignal())); connect(&authorEditor, SIGNAL(textUpdated()), this, SLOT(emitChangedSignal())); connect(&locationEditor, SIGNAL(clicked()), this, SLOT(emitChangedSignal())); setLayout(layout); hide(); } void DateEditor::setNote(qint32 lid, Note n) { createdDate.setNote(lid, n.created, NOTE_CREATED_DATE); updatedDate.setNote(lid, n.updated, NOTE_UPDATED_DATE); NoteAttributes attributes; if (n.attributes.isSet()) attributes = n.attributes; if (attributes.subjectDate.isSet() && attributes.subjectDate > 0) subjectDate.setNote(lid, attributes.subjectDate, NOTE_ATTRIBUTE_SUBJECT_DATE); else subjectDate.setNote(lid, n.updated, NOTE_ATTRIBUTE_SUBJECT_DATE); QString author; if (attributes.author.isSet()) author = attributes.author; authorEditor.setAuthor(lid, author.trimmed()); double longitude=0, altitude=0, latitude=0; QString placeName = ""; if (attributes.longitude.isSet()) longitude = attributes.longitude; if (attributes.latitude.isSet()) latitude = attributes.latitude; if (attributes.altitude.isSet()) altitude = attributes.altitude; if (attributes.placeName.isSet()) placeName = attributes.placeName; locationEditor.setGeography(lid, longitude,latitude, altitude, placeName); } void DateEditor::hideEvent(QHideEvent* event) { Q_UNUSED(event); // suppress unused createdDate.hide(); subjectDate.hide(); updatedDate.hide(); authorEditor.hide(); locationEditor.hide(); } void DateEditor::showEvent(QShowEvent* event) { Q_UNUSED(event); // suppress unused createdDate.show(); subjectDate.show(); updatedDate.show(); authorEditor.show(); locationEditor.show(); } void DateEditor::emitChangedSignal() { emit(valueChanged()); } void DateEditor::setUpdateDate(qint64 value) { this->blockSignals(true); updatedDate.setDate(value); this->blockSignals(false); } void DateEditor::clear() { blockSignals(true); subjectDate.blockSignals(true); subjectDate.setDateTime(QDateTime::currentDateTime()); subjectDate.blockSignals(false); updatedDate.blockSignals(true); updatedDate.setDateTime(QDateTime::currentDateTime()); updatedDate.blockSignals(false); createdDate.blockSignals(true); createdDate.setDateTime(QDateTime::currentDateTime()); createdDate.blockSignals(false); blockSignals(false); } nixnote2-2.0.2/gui/browserWidgets/dateeditor.h000066400000000000000000000035101315604104400213510ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef DATEEDITOR_H #define DATEEDITOR_H #include #include #include "gui/browserWidgets/authoreditor.h" #include "gui/browserWidgets/datetimeeditor.h" #include "gui/browserWidgets/locationeditor.h" #include "qevercloud/include/QEverCloud.h" using namespace qevercloud; using namespace std; class DateEditor : public QWidget { Q_OBJECT private: public: explicit DateEditor(QWidget *parent = 0); AuthorEditor authorEditor; LocationEditor locationEditor; DateTimeEditor subjectDate; DateTimeEditor createdDate; DateTimeEditor updatedDate; void setNote(qint32 lid, Note n); void setUpdateDate(qint64 value); void clear(); signals: void valueChanged(); protected: void hideEvent(QHideEvent* event); void showEvent(QShowEvent* event); public slots: private slots: void emitChangedSignal(); }; #endif // DATEEDITOR_H nixnote2-2.0.2/gui/browserWidgets/datetimeeditor.cpp000066400000000000000000000062521315604104400225710ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "datetimeeditor.h" #include #include #include "global.h" #include "sql/notetable.h" using namespace std; extern Global global; DateTimeEditor::DateTimeEditor(QWidget *parent) : QDateTimeEdit(parent) { this->setFont(global.getGuiFont(font())); QPalette pal; pal.setColor(QPalette::Text, QColor(14,28,209)); pal.setColor(backgroundRole(), QPalette::Base); setPalette(pal); inactiveColor = "QDateTimeEdit {background-color: transparent; border-radius: 1px;} QDateTimeEdit:hover {border: 1px solid #808080; background-color: white; border-radius: 4px;} QDateTimeEdit::up-button {width: 0px; image:none;} QDateTimeEdit::down-button{width: 0px; image: none;}"; activeColor = "QDateTimeEdit {border: 1px solid #808080; background-color: white; border-radius: 4px;} QDateTimeEdit::up-button {width: 14px;} QDateTimeEdit::down-button{width: 14px;}"; //editor.setCalendarPopup(true); //display.setStyleSheet(inactiveColor); setStyleSheet(inactiveColor); setCalendarPopup(true); setCursor(Qt::PointingHandCursor); connect(this, SIGNAL(dateChanged(QDate)), this, SLOT(valueChanged())); connect(this, SIGNAL(timeChanged(QTime)), this, SLOT(valueChanged())); this->setDisplayFormat(global.dateFormat + " " +global.timeFormat); hide(); } void DateTimeEditor::focusOutEvent(QFocusEvent *e) { QDateTimeEdit::focusOutEvent(e); this->setCursor(Qt::PointingHandCursor); setStyleSheet(inactiveColor); } void DateTimeEditor::focusInEvent(QFocusEvent *e) { QDateTimeEdit::focusInEvent(e); this->setCursor(Qt::ArrowCursor); setStyleSheet(activeColor); } void DateTimeEditor::setNote(qint32 lid, Timestamp value, qint32 key) { this->lid = lid; this->value = value; this->key = key; QDateTime dt; dt.setMSecsSinceEpoch(value); blockSignals(true); setDateTime(dt); blockSignals(false); } void DateTimeEditor::setDate(qint64 value) { this->blockSignals(true); QDateTime dt; dt.setMSecsSinceEpoch(value); setDateTime(dt); this->blockSignals(false); } void DateTimeEditor::valueChanged() { NoteTable noteTable(global.db); QDateTime dt = this->dateTime(); noteTable.updateDate(lid, dt.toMSecsSinceEpoch(), key, true); } nixnote2-2.0.2/gui/browserWidgets/datetimeeditor.h000066400000000000000000000032511315604104400222320ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef DATETIMEEDITOR_H #define DATETIMEEDITOR_H #include #include #include #include #include "qevercloud/include/QEverCloud.h" using namespace qevercloud; using namespace std; class DateTimeEditor : public QDateTimeEdit { Q_OBJECT private: QString activeColor; QString inactiveColor; Timestamp value; qint32 key; qint32 lid; public: explicit DateTimeEditor(QWidget *parent = 0); void setNote(qint32 lid, Timestamp value, qint32 key); void setDate(qint64 value); signals: protected: void focusOutEvent(QFocusEvent *e); void focusInEvent(QFocusEvent *e); public slots: private slots: void valueChanged(); }; #endif // DATETIMEEDITOR_H nixnote2-2.0.2/gui/browserWidgets/editorbuttonbar.cpp000066400000000000000000001052001315604104400227660ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "editorbuttonbar.h" #include #include #include "global.h" #include #include #include extern Global global; EditorButtonBar::EditorButtonBar(QWidget *parent) : QToolBar(parent) { contextMenu = new QMenu(); undoVisible = contextMenu->addAction(tr("Undo")); redoVisible = contextMenu->addAction(tr("Redo")); cutVisible = contextMenu->addAction(tr("Cut")); copyVisible = contextMenu->addAction(tr("Copy")); pasteVisible = contextMenu->addAction(tr("Paste")); removeFormatVisible = contextMenu->addAction(tr("Remove Formatting")); boldVisible = contextMenu->addAction(tr("Bold")); italicVisible = contextMenu->addAction(tr("Italics")); superscriptVisible = contextMenu->addAction(tr("Superscript")); subscriptVisible = contextMenu->addAction(tr("Subscript")); underlineVisible = contextMenu->addAction(tr("Underline")); strikethroughVisible = contextMenu->addAction(tr("Strikethrough")); leftJustifyVisible = contextMenu->addAction(tr("Align Left")); centerJustifyVisible = contextMenu->addAction(tr("Align Center")); fullJustifyVisible = contextMenu->addAction(tr("Align Full")); rightJustifyVisible = contextMenu->addAction(tr("Align Right")); hlineVisible = contextMenu->addAction(tr("Horizontal Line")); insertDatetimeVisible = contextMenu->addAction(tr("Insert Date && Time")); shiftRightVisible = contextMenu->addAction(tr("Shift Right")); shiftLeftVisible = contextMenu->addAction(tr("Shift Left")); bulletListVisible = contextMenu->addAction(tr("Bullet List")); numberListVisible = contextMenu->addAction(tr("Number List")); fontVisible = contextMenu->addAction(tr("Font")); fontSizeVisible = contextMenu->addAction(tr("Font Size")); fontColorVisible = contextMenu->addAction(tr("Font Color")); highlightVisible = contextMenu->addAction(tr("Highlight")); todoVisible = contextMenu->addAction(tr("To-do")); spellCheckButtonVisible = contextMenu->addAction(tr("Spell Check")); insertTableButtonVisible = contextMenu->addAction(tr("Insert Table")); htmlEntitiesButtonVisible = contextMenu->addAction(tr("HTML Entities")); formatCodeButtonVisible = contextMenu->addAction(tr("Format Code Block")); undoVisible->setCheckable(true); redoVisible->setCheckable(true); cutVisible->setCheckable(true); copyVisible->setCheckable(true); pasteVisible->setCheckable(true); removeFormatVisible->setCheckable(true); boldVisible->setCheckable(true); italicVisible->setCheckable(true); underlineVisible->setCheckable(true); strikethroughVisible->setCheckable(true); superscriptVisible->setCheckable(true); subscriptVisible->setCheckable(true); leftJustifyVisible->setCheckable(true); centerJustifyVisible->setCheckable(true); fullJustifyVisible->setCheckable(true); rightJustifyVisible->setCheckable(true); hlineVisible->setCheckable(true); shiftRightVisible->setCheckable(true); shiftLeftVisible->setCheckable(true); bulletListVisible->setCheckable(true); numberListVisible->setCheckable(true); todoVisible->setCheckable(true); fontColorVisible->setCheckable(true); highlightVisible->setCheckable(true); fontColorVisible->setCheckable(true); fontSizeVisible->setCheckable(true); fontVisible->setCheckable(true); spellCheckButtonVisible->setCheckable(true); spellCheckButtonVisible->setChecked(true); insertTableButtonVisible->setCheckable(true); htmlEntitiesButtonVisible->setCheckable(true); insertDatetimeVisible->setCheckable(true); formatCodeButtonVisible->setCheckable(true); connect(undoVisible, SIGNAL(triggered()), this, SLOT(toggleUndoButtonVisible())); connect(redoVisible, SIGNAL(triggered()), this, SLOT(toggleRedoButtonVisible())); connect(cutVisible, SIGNAL(triggered()), this, SLOT(toggleCutButtonVisible())); connect(copyVisible, SIGNAL(triggered()), this, SLOT(toggleCopyButtonVisible())); connect(pasteVisible, SIGNAL(triggered()), this, SLOT(togglePasteButtonVisible())); connect(removeFormatVisible, SIGNAL(triggered()), this, SLOT(toggleRemoveFormatVisible())); connect(boldVisible, SIGNAL(triggered()), this, SLOT(toggleBoldButtonVisible())); connect(italicVisible, SIGNAL(triggered()), this, SLOT(toggleItalicButtonVisible())); connect(underlineVisible, SIGNAL(triggered()), this, SLOT(toggleUnderlineButtonVisible())); connect(strikethroughVisible, SIGNAL(triggered()), this, SLOT(toggleStrikethroughButtonVisible())); connect(superscriptVisible, SIGNAL(triggered()), this, SLOT(toggleSuperscriptButtonVisible())); connect(subscriptVisible, SIGNAL(triggered()), this, SLOT(toggleSubscriptButtonVisible())); connect(insertDatetimeVisible, SIGNAL(triggered()), this, SLOT(toggleInsertDatetimeVisible())); connect(leftJustifyVisible, SIGNAL(triggered()), this, SLOT(toggleLeftJustifyButtonVisible())); connect(centerJustifyVisible, SIGNAL(triggered()), this, SLOT(toggleCenterJustifyButtonVisible())); connect(fullJustifyVisible, SIGNAL(triggered()), this, SLOT(toggleFullJustifyButtonVisible())); connect(rightJustifyVisible, SIGNAL(triggered()), this, SLOT(toggleRightJustifyButtonVisible())); connect(hlineVisible, SIGNAL(triggered()), this, SLOT(toggleHlineButtonVisible())); connect(shiftRightVisible, SIGNAL(triggered()), this, SLOT(toggleShiftRightButtonVisible())); connect(shiftLeftVisible, SIGNAL(triggered()), this, SLOT(toggleShiftLeftButtonVisible())); connect(bulletListVisible, SIGNAL(triggered()), this, SLOT(toggleBulletListButtonVisible())); connect(numberListVisible, SIGNAL(triggered()), this, SLOT(toggleNumberListButtonVisible())); connect(fontVisible, SIGNAL(triggered()), this, SLOT(toggleFontButtonVisible())); connect(fontSizeVisible, SIGNAL(triggered()), this, SLOT(toggleFontSizeButtonVisible())); connect(todoVisible, SIGNAL(triggered()), this, SLOT(toggleTodoButtonVisible())); connect(highlightVisible, SIGNAL(triggered()), this, SLOT(toggleHighlightColorVisible())); connect(fontColorVisible, SIGNAL(triggered()), this, SLOT(toggleFontColorVisible())); connect(insertTableButtonVisible, SIGNAL(triggered()), this, SLOT(toggleInsertTableButtonVisible())); connect(spellCheckButtonVisible, SIGNAL(triggered()), this, SLOT(toggleSpellCheckButtonVisible())); connect(htmlEntitiesButtonVisible, SIGNAL(triggered()), this, SLOT(toggleHtmlEntitiesButtonVisible())); connect(formatCodeButtonVisible, SIGNAL(triggered()), this, SLOT(toggleFormatCodeButtonVisible())); undoButtonAction = this->addAction(global.getIconResource(":undoIcon"), tr("Undo")); undoButtonShortcut = new QShortcut(this); setupShortcut(undoButtonShortcut, "Edit_Undo"); redoButtonAction = this->addAction(global.getIconResource(":redoIcon"), tr("Redo")); redoButtonShortcut = new QShortcut(this); setupShortcut(redoButtonShortcut, "Edit_Redo"); redoButtonShortcut->setContext(Qt::WidgetShortcut); cutButtonAction = this->addAction(global.getIconResource(":cutIcon"), tr("Cut")); cutButtonShortcut = new QShortcut(this); setupShortcut(cutButtonShortcut, "Edit_Cut"); copyButtonAction = this->addAction(global.getIconResource(":copyIcon"), tr("Copy")); copyButtonShortcut = new QShortcut(this); setupShortcut(copyButtonShortcut, "Edit_Copy"); pasteButtonAction = this->addAction(global.getIconResource(":pasteIcon"), tr("Paste")); //this->setupShortcut(pasteButtonAction, "Edit_Paste"); // This is captured in NWebView via a keyevent statement removeFormatButtonAction = this->addAction(global.getIconResource(":eraserIcon"), tr("Remove Formatting")); removeFormatButtonShortcut = new QShortcut(this); this->setupShortcut(removeFormatButtonShortcut, "Edit_Remove_Formatting"); boldButtonWidget = new QToolButton(this); boldButtonWidget->setIcon(global.getIconResource(":boldIcon")); boldButtonWidget->setText(tr("Bold")); boldButtonAction = this->addWidget(boldButtonWidget); boldButtonShortcut = new QShortcut(this); this->setupShortcut(boldButtonShortcut, "Format_Bold"); italicButtonWidget = new QToolButton(this); italicButtonWidget->setIcon(global.getIconResource(":italicsIcon")); italicButtonWidget->setText(tr("Italics")); italicButtonWidget->setToolTip(tr("Italics")); italicButtonAction = this->addWidget(italicButtonWidget); italicButtonShortcut = new QShortcut(this); this->setupShortcut(italicButtonShortcut, "Format_Italic"); underlineButtonWidget = new QToolButton(this); underlineButtonWidget->setIcon(global.getIconResource(":underlineIcon")); underlineButtonWidget->setText(tr("Underline")); underlineButtonWidget->setToolTip(tr("Underline")); underlineButtonAction = this->addWidget(underlineButtonWidget); underlineButtonShortcut = new QShortcut(this); this->setupShortcut(underlineButtonShortcut, "Format_Underline"); strikethroughButtonAction = this->addAction(global.getIconResource(":strikethroughIcon"), tr("Strikethrough")); strikethroughButtonShortcut = new QShortcut(this); this->setupShortcut(strikethroughButtonShortcut, "Format_Strikethrough"); superscriptButtonAction = this->addAction(global.getIconResource(":superscriptIcon"), tr("Superscript")); superscriptButtonShortcut = new QShortcut(this); this->setupShortcut(superscriptButtonShortcut, "Format_Superscript"); subscriptButtonAction = this->addAction(global.getIconResource(":subscriptIcon"), tr("Subscript")); subscriptButtonShortcut = new QShortcut(this); this->setupShortcut(subscriptButtonShortcut, "Format_Subscript"); centerJustifyButtonAction = this->addAction(global.getIconResource(":centerAlignIcon"), tr("Center Justify")); centerJustifyButtonShortcut = new QShortcut(this); this->setupShortcut(centerJustifyButtonShortcut, "Format_Alignment_Center"); fullJustifyButtonAction = this->addAction(global.getIconResource(":fullAlignIcon"), tr("Fully Justify")); fullJustifyButtonShortcut = new QShortcut(this); this->setupShortcut(fullJustifyButtonShortcut, "Format_Alignment_Full"); rightJustifyButtonAction = this->addAction(global.getIconResource(":rightAlignIcon"), tr("Right Justify")); rightJustifyButtonShortcut = new QShortcut(this); this->setupShortcut(rightJustifyButtonShortcut, "Format_Alignment_Right"); leftJustifyButtonAction = this->addAction(global.getIconResource(":leftAlignIcon"), tr("Left Justify")); leftJustifyButtonShortcut = new QShortcut(this); this->setupShortcut(leftJustifyButtonShortcut, "Format_Alignment_Left"); hlineButtonAction = this->addAction(global.getIconResource(":hlineIcon"), tr("Horizontal Line")); hlineButtonShortcut = new QShortcut(this); this->setupShortcut(hlineButtonShortcut, "Format_Horizontal_Line"); insertDatetimeButtonWidget = new QToolButton(this); insertDatetimeButtonWidget->setIcon(global.getIconResource(":dateTime")); insertDatetimeButtonWidget->setText(tr("Insert Date & Time")); insertDatetimeButtonWidget->setToolTip(tr("Insert Date & Time")); insertDatetimeButtonAction = this->addWidget(insertDatetimeButtonWidget); insertDatetimeButtonShortcut = new QShortcut(this); insertDatetimeButtonShortcut->setKey(insertDatetimeButtonWidget->shortcut()); shiftRightButtonAction = this->addAction(global.getIconResource(":shiftRightIcon"), tr("Shift Right")); shiftRightButtonShortcut = new QShortcut(this); this->setupShortcut(shiftRightButtonShortcut, "Format_Indent_Increase"); shiftLeftButtonAction = this->addAction(global.getIconResource(":shiftLeftIcon"), tr("Shift Left")); shiftLeftButtonShortcut = new QShortcut(this); this->setupShortcut(shiftLeftButtonShortcut, "Format_Indent_Decrease"); bulletListButtonAction = this->addAction(global.getIconResource(":bulletListIcon"), tr("Bullet List")); bulletListButtonShortcut = new QShortcut(this); this->setupShortcut(bulletListButtonShortcut, "Format_List_Bullet"); numberListButtonAction = this->addAction(global.getIconResource(":numberListIcon"), tr("Number List")); numberListButtonShortcut = new QShortcut(this); this->setupShortcut(numberListButtonShortcut, "Format_List_Numbered"); fontNames = new FontNameComboBox(this); fontSizes = new FontSizeComboBox(this); loadFontNames(); fontButtonAction = addWidget(fontNames); fontSizeButtonAction = addWidget(fontSizes); fontColorMenuWidget = new ColorMenu(); fontColorButtonWidget = new QToolButton(this); fontColorButtonWidget->setAutoRaise(false); fontColorButtonWidget->setMenu(fontColorMenuWidget->getMenu()); fontColorButtonWidget->setIcon(global.getIconResource(":fontColorIcon")); fontColorButtonWidget->setToolTip(tr("Font Color")); fontColorAction = this->addWidget(fontColorButtonWidget); highlightColorMenuWidget = new ColorMenu(); highlightColorMenuWidget->setDefault(Qt::yellow); highlightColorButtonWidget = new QToolButton(this); highlightColorButtonWidget->setAutoRaise(false); highlightColorButtonWidget->setMenu(highlightColorMenuWidget->getMenu()); highlightColorButtonWidget->setIcon(global.getIconResource(":fontHighlightIcon")); highlightColorButtonWidget->setToolTip(tr("Highlight")); highlightColorAction = this->addWidget(highlightColorButtonWidget); highlightColorShortcut = new QShortcut(this); this->setupShortcut(highlightColorShortcut, "Format_Highlight"); todoButtonAction = this->addAction(global.getIconResource(":todoIcon"), tr("Todo")); todoButtonShortcut = new QShortcut(this); this->setupShortcut(todoButtonShortcut, "Edit_Insert_Todo"); spellCheckButtonAction = this->addAction(global.getIconResource(":spellCheckIcon"), tr("Spell Check")); spellCheckButtonShortcut = new QShortcut(this); this->setupShortcut(spellCheckButtonShortcut, "Tools_Spell_Check"); insertTableButtonAction = this->addAction(global.getIconResource(":gridIcon"), tr("Insert Table")); insertTableButtonShortcut = new QShortcut(this); this->setupShortcut(insertTableButtonShortcut, "Edit_Insert_Table"); htmlEntitiesButtonAction = this->addAction(global.getIconResource(":htmlentitiesIcon"), tr("Insert HTML Entities")); htmlEntitiesButtonShortcut = new QShortcut(this); setupShortcut(htmlEntitiesButtonShortcut, "Edit_Insert_Html_Entities"); htmlEntitiesButtonShortcut->setContext(Qt::WidgetShortcut); formatCodeButtonAction = this->addAction(global.getIconResource(":formatCodeIcon"), tr("Format Code Block")); formatCodeButtonShortcut = new QShortcut(this); this->setupShortcut(formatCodeButtonShortcut, "Format_Code_Block"); } EditorButtonBar::~EditorButtonBar() { delete undoVisible; delete redoVisible; delete cutVisible; delete copyVisible; delete pasteVisible; delete boldVisible; delete italicVisible; delete underlineVisible; delete strikethroughVisible; delete leftJustifyVisible; delete centerJustifyVisible; delete formatCodeButtonVisible; delete fullJustifyVisible; delete rightJustifyVisible; delete hlineVisible; delete shiftRightVisible; delete shiftLeftVisible; delete bulletListVisible; delete numberListVisible; delete fontVisible; delete fontSizeVisible; delete todoVisible; } void EditorButtonBar::contextMenuEvent(QContextMenuEvent *event) { contextMenu->exec(event->globalPos()); } void EditorButtonBar::saveVisibleButtons() { global.settings->beginGroup("SaveState"); bool value; value = undoButtonAction->isVisible(); global.settings->setValue("undoButtonVisible", value); value = redoButtonAction->isVisible(); global.settings->setValue("redoButtonVisible", value); value = cutButtonAction->isVisible(); global.settings->setValue("cutButtonVisible", value); value = copyButtonAction->isVisible(); global.settings->setValue("copyButtonVisible", value); value = pasteButtonAction->isVisible(); global.settings->setValue("pasteButtonVisible", value); value = removeFormatButtonAction->isVisible(); global.settings->setValue("removeFormatButtonVisible", value); value = boldButtonAction->isVisible(); global.settings->setValue("boldButtonVisible", value); value = italicButtonAction->isVisible(); global.settings->setValue("italicButtonVisible", value); value = hlineButtonAction->isVisible(); global.settings->setValue("hlineButtonVisible", value); value = underlineButtonAction->isVisible(); global.settings->setValue("underlineButtonVisible", value); value = strikethroughButtonAction->isVisible(); global.settings->setValue("strikethroughButtonVisible", value); value = superscriptButtonAction->isVisible(); global.settings->setValue("superscriptButtonVisible", value); value = subscriptButtonAction->isVisible(); global.settings->setValue("subscriptButtonVisible", value); value = leftJustifyButtonAction->isVisible(); global.settings->setValue("leftJustifyButtonVisible", value); value = rightJustifyButtonAction->isVisible(); global.settings->setValue("rightJustifyButtonVisible", value); value = centerJustifyButtonAction->isVisible(); global.settings->setValue("centerJustifyButtonVisible", value); value = fullJustifyButtonAction->isVisible(); global.settings->setValue("fullJustifyButtonVisible", value); value = shiftLeftButtonAction->isVisible(); global.settings->setValue("shiftLeftButtonVisible", value); value = shiftRightButtonAction->isVisible(); global.settings->setValue("shiftRightButtonVisible", value); value = bulletListButtonAction->isVisible(); global.settings->setValue("bulletListButtonVisible", value); value = numberListButtonAction->isVisible(); global.settings->setValue("numberListButtonVisible", value); value = fontButtonAction->isVisible(); global.settings->setValue("fontButtonVisible", value); value = fontSizeButtonAction->isVisible(); global.settings->setValue("fontSizeButtonVisible", value); value = highlightColorAction->isVisible(); global.settings->setValue("highlightButtonVisible", value); value = fontColorAction->isVisible(); global.settings->setValue("fontColorButtonVisible", value); value = todoButtonAction->isVisible(); global.settings->setValue("todoButtonVisible", value); value = insertTableButtonAction->isVisible(); global.settings->setValue("insertTableButtonVisible", value); value = spellCheckButtonAction->isVisible(); global.settings->setValue("spellCheckButtonVisible", value); value = htmlEntitiesButtonAction->isVisible(); global.settings->setValue("htmlEntitiesButtonVisible", value); value = insertDatetimeButtonAction->isVisible(); global.settings->setValue("insertDatetimeButtonVisible", value); value = formatCodeButtonAction->isVisible(); global.settings->setValue("formatCodeButtonVisible", value); global.settings->endGroup(); } void EditorButtonBar::setupVisibleButtons() { global.settings->beginGroup("SaveState"); undoButtonAction->setVisible(global.settings->value("undoButtonVisible", true).toBool()); undoVisible->setChecked(undoButtonAction->isVisible()); redoButtonAction->setVisible(global.settings->value("redoButtonVisible", true).toBool()); redoVisible->setChecked(redoButtonAction->isVisible()); cutButtonAction->setVisible(global.settings->value("cutButtonVisible", true).toBool()); cutVisible->setChecked(cutButtonAction->isVisible()); copyButtonAction->setVisible(global.settings->value("copyButtonVisible", true).toBool()); copyVisible->setChecked(copyButtonAction->isVisible()); pasteButtonAction->setVisible(global.settings->value("pasteButtonVisible", true).toBool()); pasteVisible->setChecked(pasteButtonAction->isVisible()); removeFormatButtonAction->setVisible(global.settings->value("removeFormatButtonVisible", true).toBool()); removeFormatVisible->setChecked(removeFormatButtonAction->isVisible()); boldButtonAction->setVisible(global.settings->value("boldButtonVisible", true).toBool()); boldVisible->setChecked(boldButtonAction->isVisible()); italicButtonAction->setVisible(global.settings->value("italicButtonVisible", true).toBool()); italicVisible->setChecked(italicButtonAction->isVisible()); underlineButtonAction->setVisible(global.settings->value("underlineButtonVisible", true).toBool()); underlineVisible->setChecked(underlineButtonAction->isVisible()); strikethroughButtonAction->setVisible(global.settings->value("strikethroughButtonVisible", true).toBool()); strikethroughVisible->setChecked(strikethroughButtonAction->isVisible()); superscriptButtonAction->setVisible(global.settings->value("superscriptButtonVisible", true).toBool()); superscriptVisible->setChecked(superscriptButtonAction->isVisible()); subscriptButtonAction->setVisible(global.settings->value("subscriptButtonVisible", true).toBool()); subscriptVisible->setChecked(subscriptButtonAction->isVisible()); hlineButtonAction->setVisible(global.settings->value("hlineButtonVisible", true).toBool()); hlineVisible->setChecked(hlineButtonAction->isVisible()); leftJustifyButtonAction->setVisible(global.settings->value("leftJustifyButtonVisible", true).toBool()); leftJustifyVisible->setChecked(leftJustifyButtonAction->isVisible()); centerJustifyButtonAction->setVisible(global.settings->value("centerJustifyButtonVisible", true).toBool()); centerJustifyVisible->setChecked(centerJustifyButtonAction->isVisible()); fullJustifyButtonAction->setVisible(global.settings->value("fullJustifyButtonVisible", true).toBool()); fullJustifyVisible->setChecked(fullJustifyButtonAction->isVisible()); rightJustifyButtonAction->setVisible(global.settings->value("rightJustifyButtonVisible", true).toBool()); rightJustifyVisible->setChecked(rightJustifyButtonAction->isVisible()); shiftLeftButtonAction->setVisible(global.settings->value("shiftLeftButtonVisible", true).toBool()); shiftLeftVisible->setChecked(shiftLeftButtonAction->isVisible()); shiftRightButtonAction->setVisible(global.settings->value("shiftRightButtonVisible", true).toBool()); shiftRightVisible->setChecked(shiftRightButtonAction->isVisible()); bulletListButtonAction->setVisible(global.settings->value("bulletListButtonVisible", true).toBool()); bulletListVisible->setChecked(bulletListButtonAction->isVisible()); numberListButtonAction->setVisible(global.settings->value("numberListButtonVisible", true).toBool()); numberListVisible->setChecked(numberListButtonAction->isVisible()); fontButtonAction->setVisible(global.settings->value("fontButtonVisible", true).toBool()); fontVisible->setChecked(fontButtonAction->isVisible()); fontSizeButtonAction->setVisible(global.settings->value("fontSizeButtonVisible", true).toBool()); fontSizeVisible->setChecked(fontSizeButtonAction->isVisible()); todoButtonAction->setVisible(global.settings->value("todoButtonVisible", true).toBool()); todoVisible->setChecked(todoButtonAction->isVisible()); insertTableButtonAction->setVisible(global.settings->value("insertTableButtonVisible", true).toBool()); insertTableButtonVisible->setChecked(insertTableButtonAction->isVisible()); fontColorAction ->setVisible(global.settings->value("fontColorButtonVisible", true).toBool()); fontColorVisible->setChecked(fontColorAction->isVisible()); highlightColorAction->setVisible(global.settings->value("highlightButtonVisible", true).toBool()); highlightVisible->setChecked(highlightColorAction->isVisible()); spellCheckButtonAction->setVisible(global.settings->value("spelLCheckButtonVisible", true).toBool()); spellCheckButtonVisible->setChecked(spellCheckButtonAction->isVisible()); htmlEntitiesButtonAction->setVisible(global.settings->value("htmlEntitiesButtonVisible", true).toBool()); htmlEntitiesButtonVisible->setChecked(htmlEntitiesButtonAction->isVisible()); insertDatetimeButtonAction->setVisible(global.settings->value("insertDatetimeButtonVisible", true).toBool()); insertDatetimeVisible->setChecked(insertDatetimeButtonAction->isVisible()); formatCodeButtonAction->setVisible(global.settings->value("formatCodeButtonVisible", true).toBool()); formatCodeButtonVisible->setChecked(formatCodeButtonAction->isVisible()); global.settings->endGroup(); } void EditorButtonBar::toggleUndoButtonVisible() { undoButtonAction->setVisible(undoVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleRedoButtonVisible() { redoButtonAction->setVisible(redoVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleCutButtonVisible() { cutButtonAction->setVisible(cutVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleCopyButtonVisible() { copyButtonAction->setVisible(copyVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::togglePasteButtonVisible() { pasteButtonAction->setVisible(pasteVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleRemoveFormatVisible() { removeFormatButtonAction->setVisible(removeFormatVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleBoldButtonVisible() { boldButtonAction->setVisible(boldVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleItalicButtonVisible() { italicButtonAction->setVisible(italicVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleUnderlineButtonVisible() { underlineButtonAction->setVisible(underlineVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleStrikethroughButtonVisible() { strikethroughButtonAction->setVisible(strikethroughVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleSuperscriptButtonVisible() { superscriptButtonAction->setVisible(superscriptVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleSubscriptButtonVisible() { subscriptButtonAction->setVisible(subscriptVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleInsertDatetimeVisible() { insertDatetimeButtonAction->setVisible(insertDatetimeVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleLeftJustifyButtonVisible() { leftJustifyButtonAction->setVisible(leftJustifyVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleCenterJustifyButtonVisible() { centerJustifyButtonAction->setVisible(centerJustifyVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleFullJustifyButtonVisible() { fullJustifyButtonAction->setVisible(fullJustifyVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleRightJustifyButtonVisible() { rightJustifyButtonAction->setVisible(rightJustifyVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleHlineButtonVisible() { hlineButtonAction->setVisible(hlineVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleShiftRightButtonVisible() { shiftRightButtonAction->setVisible(shiftRightVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleShiftLeftButtonVisible() { shiftLeftButtonAction->setVisible(shiftLeftVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleBulletListButtonVisible() { bulletListButtonAction->setVisible(bulletListVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleNumberListButtonVisible() { numberListButtonAction->setVisible(numberListVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleFontButtonVisible() { fontButtonAction->setVisible(fontVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleFontSizeButtonVisible() { fontSizeButtonAction->setVisible(fontSizeVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleTodoButtonVisible() { todoButtonAction->setVisible(todoVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleHighlightColorVisible() { highlightColorAction->setVisible(highlightVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleFontColorVisible() { fontColorAction->setVisible(fontColorVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleInsertTableButtonVisible() { insertTableButtonAction->setVisible(insertTableButtonVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleSpellCheckButtonVisible() { spellCheckButtonAction->setVisible(spellCheckButtonVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleHtmlEntitiesButtonVisible() { htmlEntitiesButtonAction->setVisible(htmlEntitiesButtonVisible->isChecked()); saveVisibleButtons(); } void EditorButtonBar::toggleFormatCodeButtonVisible() { formatCodeButtonAction->setVisible(formatCodeButtonVisible->isChecked()); saveVisibleButtons(); } // Load the list of font names void EditorButtonBar::loadFontNames() { if (global.forceWebFonts){ QStringList fontFamilies; fontFamilies.append("Gotham"); fontFamilies.append("Georgia"); fontFamilies.append("Helvetica"); fontFamilies.append("Courier New"); fontFamilies.append("Times New Roman"); fontFamilies.append("Times"); fontFamilies.append("Trebuchet"); fontFamilies.append("Verdana"); fontFamilies.sort(); bool first = true; for (int i = 0; i < fontFamilies.size(); i++) { fontNames->addItem(fontFamilies[i], fontFamilies[i].toLower()); QFont f; global.getGuiFont(f); f.setFamily(fontFamilies[i]); fontNames->setItemData(i, QVariant(f), Qt::FontRole); if (first) { loadFontSizeComboBox(fontFamilies[i]); first=false; } } return; } // Load up the list of font names QFontDatabase fonts; QStringList fontFamilies = fonts.families(); fontFamilies.append(tr("Times")); fontFamilies.sort(); bool first = true; for (int i = 0; i < fontFamilies.size(); i++) { fontNames->addItem(fontFamilies[i], fontFamilies[i].toLower()); QFont f; global.getGuiFont(f); f.setFamily(fontFamilies[i]); if (global.previewFontsInDialog()) fontNames->setItemData(i, QVariant(f), Qt::FontRole); if (first) { loadFontSizeComboBox(fontFamilies[i]); first=false; } } } // Load the list of font sizes void EditorButtonBar::loadFontSizeComboBox(QString name) { QFontDatabase fdb; fontSizes->clear(); QList sizes = fdb.smoothSizes(name, "Normal"); for (int i=0; iaddItem(QString::number(sizes[i]), sizes[i]); } if (sizes.size() == 0) { fontSizes->addItem("8", 8); fontSizes->addItem("9", 9); fontSizes->addItem("10", 10); fontSizes->addItem("11", 11); fontSizes->addItem("12", 12); fontSizes->addItem("14", 14); fontSizes->addItem("15", 15); fontSizes->addItem("16", 16); fontSizes->addItem("17", 17); fontSizes->addItem("18", 18); fontSizes->addItem("19", 19); fontSizes->addItem("20", 20); fontSizes->addItem("21", 21); fontSizes->addItem("22", 22); } } //void EditorButtonBar::setupShortcut(QAction *action, QString text) { // if (!global.shortcutKeys->containsAction(&text)) // return; // QKeySequence key(global.shortcutKeys->getShortcut(&text)); // action->setShortcut(key); //} void EditorButtonBar::setupShortcut(QShortcut *shortcut, QString text) { if (!global.shortcutKeys->containsAction(&text)) return; QKeySequence key(global.shortcutKeys->getShortcut(&text)); shortcut->setKey(key); } //void EditorButtonBar::setupShortcut(QToolButton *action, QString text) { // if (!global.shortcutKeys->containsAction(&text)) // return; // QKeySequence key(global.shortcutKeys->getShortcut(&text)); // action->setShortcut(key); //} void EditorButtonBar::reloadIcons() { undoButtonAction->setIcon(global.getIconResource(":undoIcon")); redoButtonAction->setIcon(global.getIconResource(":redoIcon")); cutButtonAction->setIcon(global.getIconResource(":cutIcon")); copyButtonAction->setIcon(global.getIconResource(":copyIcon")); pasteButtonAction->setIcon(global.getIconResource(":pasteIcon")); removeFormatButtonAction->setIcon(global.getIconResource(":eraserIcon")); boldButtonWidget->setIcon(global.getIconResource(":boldIcon")); italicButtonWidget->setIcon(global.getIconResource(":italicsIcon")); underlineButtonWidget->setIcon(global.getIconResource(":underlineIcon")); strikethroughButtonAction->setIcon(global.getIconResource(":strikethroughIcon")); leftJustifyButtonAction->setIcon(global.getIconResource(":leftAlignIcon")); rightJustifyButtonAction->setIcon(global.getIconResource(":rightAlignIcon")); centerJustifyButtonAction->setIcon(global.getIconResource(":centerAlignIcon")); fullJustifyButtonAction->setIcon(global.getIconResource(":fullAlignIcon")); hlineButtonAction->setIcon(global.getIconResource(":hlineIcon")); shiftRightButtonAction->setIcon(global.getIconResource(":shiftRightIcon")); shiftLeftButtonAction->setIcon(global.getIconResource(":shiftLeftIcon")); bulletListButtonAction->setIcon(global.getIconResource(":bulletListIcon")); numberListButtonAction->setIcon(global.getIconResource(":numberListIcon")); fontColorButtonWidget->setIcon(global.getIconResource(":fontColorIcon")); highlightColorButtonWidget->setIcon(global.getIconResource(":fontHighlightIcon")); todoButtonAction->setIcon(global.getIconResource(":todoIcon")); spellCheckButtonAction->setIcon(global.getIconResource(":spellCheckIcon")); insertTableButtonAction->setIcon(global.getIconResource(":gridIcon")); htmlEntitiesButtonAction->setIcon(global.getIconResource(":htmlentitiesIcon")); formatCodeButtonAction->setIcon(global.getIconResource(":formatCodeIcon")); } nixnote2-2.0.2/gui/browserWidgets/editorbuttonbar.h000066400000000000000000000151121315604104400224350ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef EDITORBUTTONBAR_H #define EDITORBUTTONBAR_H #include #include #include #include #include #include "gui/browserWidgets/colormenu.h" #include "gui/browserWidgets/fontnamecombobox.h" #include "gui/browserWidgets/fontsizecombobox.h" class EditorButtonBar : public QToolBar { Q_OBJECT public: QMenu *contextMenu; QAction *undoVisible; QAction *redoVisible; QAction *cutVisible; QAction *copyVisible; QAction *pasteVisible; QAction *removeFormatVisible; QAction *boldVisible; QAction *italicVisible; QAction *underlineVisible; QAction *strikethroughVisible; QAction *insertDatetimeVisible; QAction *leftJustifyVisible; QAction *centerJustifyVisible; QAction *fullJustifyVisible; QAction *rightJustifyVisible; QAction *hlineVisible; QAction *shiftRightVisible; QAction *shiftLeftVisible; QAction *bulletListVisible; QAction *numberListVisible; QAction *fontVisible; QAction *fontSizeVisible; QAction *todoVisible; QAction *highlightVisible; QAction *fontColorVisible; QAction *insertTableButtonVisible; QAction *spellCheckButtonVisible; QAction *htmlEntitiesButtonVisible; QAction *subscriptVisible; QAction *superscriptVisible; QAction *formatCodeButtonVisible; QAction *removeFormatButtonAction; QShortcut * removeFormatButtonShortcut; QAction *undoButtonAction; QShortcut *undoButtonShortcut; QAction *redoButtonAction; QShortcut *redoButtonShortcut; QAction *cutButtonAction; QShortcut *cutButtonShortcut; QAction *copyButtonAction; QShortcut *copyButtonShortcut; QAction *pasteButtonAction; // QShortcut *pasteButtonShortcut; Captured van NWebView QAction *boldButtonAction; QShortcut *boldButtonShortcut; QAction *italicButtonAction; QShortcut *italicButtonShortcut; QAction *underlineButtonAction; QShortcut *underlineButtonShortcut; QAction *strikethroughButtonAction; QShortcut *strikethroughButtonShortcut; QAction *subscriptButtonAction; QShortcut *subscriptButtonShortcut; QAction *superscriptButtonAction; QShortcut *superscriptButtonShortcut; QAction *insertDatetimeButtonAction; QShortcut *insertDatetimeButtonShortcut; QAction *leftJustifyButtonAction; QShortcut *leftJustifyButtonShortcut; QAction *centerJustifyButtonAction; QShortcut *centerJustifyButtonShortcut; QAction *fullJustifyButtonAction; QShortcut *fullJustifyButtonShortcut; QAction *rightJustifyButtonAction; QShortcut *rightJustifyButtonShortcut; QAction *hlineButtonAction; QShortcut *hlineButtonShortcut; QAction *shiftRightButtonAction; QShortcut *shiftRightButtonShortcut; QAction *shiftLeftButtonAction; QShortcut *shiftLeftButtonShortcut; QAction *bulletListButtonAction; QShortcut *bulletListButtonShortcut; QAction *numberListButtonAction; QShortcut *numberListButtonShortcut; QAction *highlightColorAction; QShortcut *highlightColorShortcut; QAction *fontColorAction; QShortcut *fontColorShortcut; QAction *todoButtonAction; QShortcut *todoButtonShortcut; QAction *fontButtonAction; QAction *fontSizeButtonAction; QAction *insertTableButtonAction; QShortcut *insertTableButtonShortcut; QAction *spellCheckButtonAction; QShortcut *spellCheckButtonShortcut; QAction *htmlEntitiesButtonAction; QShortcut *htmlEntitiesButtonShortcut; QAction *formatCodeButtonAction; QShortcut *formatCodeButtonShortcut; FontNameComboBox *fontNames; FontSizeComboBox *fontSizes; QToolButton *boldButtonWidget; QToolButton *italicButtonWidget; QToolButton *underlineButtonWidget; QToolButton *insertDatetimeButtonWidget; QToolButton *fontColorButtonWidget; ColorMenu *fontColorMenuWidget; QToolButton *highlightColorButtonWidget; ColorMenu *highlightColorMenuWidget; // void setupShortcut(QToolButton *toolbutton, QString text); // void setupShortcut(QAction *action, QString text); void setupShortcut(QShortcut *shortcut, QString text); explicit EditorButtonBar(QWidget *parent = 0); ~EditorButtonBar(); void contextMenuEvent(QContextMenuEvent *event); void saveVisibleButtons(); void setupVisibleButtons(); void reloadIcons(); signals: public slots: void toggleUndoButtonVisible(); void toggleRedoButtonVisible(); void toggleCutButtonVisible(); void toggleCopyButtonVisible(); void togglePasteButtonVisible(); void toggleBoldButtonVisible(); void toggleItalicButtonVisible(); void toggleUnderlineButtonVisible(); void toggleStrikethroughButtonVisible(); void toggleSuperscriptButtonVisible(); void toggleSubscriptButtonVisible(); void toggleInsertDatetimeVisible(); void toggleLeftJustifyButtonVisible(); void toggleCenterJustifyButtonVisible(); void toggleFullJustifyButtonVisible(); void toggleRightJustifyButtonVisible(); void toggleHlineButtonVisible(); void toggleShiftRightButtonVisible(); void toggleShiftLeftButtonVisible(); void toggleBulletListButtonVisible(); void toggleNumberListButtonVisible(); void toggleFontButtonVisible(); void toggleTodoButtonVisible(); void toggleFontSizeButtonVisible(); void toggleSpellCheckButtonVisible(); void toggleFontColorVisible(); void toggleRemoveFormatVisible(); void toggleHighlightColorVisible(); void toggleInsertTableButtonVisible(); void toggleHtmlEntitiesButtonVisible(); void loadFontSizeComboBox(QString font); void loadFontNames(); void toggleFormatCodeButtonVisible(); }; #endif // EDITORBUTTONBAR_H nixnote2-2.0.2/gui/browserWidgets/expandbutton.cpp000066400000000000000000000043311315604104400222750ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "expandbutton.h" #include "global.h" extern Global global; ExpandButton::ExpandButton(QWidget *parent) : QToolButton(parent) { setIcon(global.getIconResource(":downArrowSmallIcon")); this->resize(5,5); currentState = EXPANDBUTTON_1; connect(this, SIGNAL(clicked()), this, SLOT(buttonClicked())); } void ExpandButton::setState(int state) { currentState = state; switch (currentState) { case EXPANDBUTTON_1 : setIcon(global.getIconResource(":downArrowSmallIcon")); emit(stateChanged(currentState)); break; case EXPANDBUTTON_2 : setIcon(global.getIconResource(":downArrowSmallIcon")); emit(stateChanged(currentState)); break; case EXPANDBUTTON_3 : setIcon(global.getIconResource(":upArrowSmallIcon")); emit(stateChanged(currentState)); break; } } void ExpandButton::buttonClicked() { switch (currentState) { case EXPANDBUTTON_1 : currentState = EXPANDBUTTON_2; break; case EXPANDBUTTON_2 : currentState = EXPANDBUTTON_3; break; case EXPANDBUTTON_3 : currentState = EXPANDBUTTON_1; break; } setState(currentState); } void ExpandButton::reloadIcon() { this->setIcon(global.getIconResource(":downArrowSmallIcon")); } nixnote2-2.0.2/gui/browserWidgets/expandbutton.h000066400000000000000000000025741315604104400217510ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef EXPANDBUTTON_H #define EXPANDBUTTON_H #include #define EXPANDBUTTON_1 1 #define EXPANDBUTTON_2 2 #define EXPANDBUTTON_3 3 class ExpandButton : public QToolButton { Q_OBJECT public: explicit ExpandButton(QWidget *parent = 0); int currentState; void setState(int state); void reloadIcon(); signals: void stateChanged(int state); public slots: void buttonClicked(); }; #endif // EXPANDBUTTON_H nixnote2-2.0.2/gui/browserWidgets/fontnamecombobox.cpp000066400000000000000000000034211315604104400231210ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "fontnamecombobox.h" #include #include "global.h" extern Global global; FontNameComboBox::FontNameComboBox(QWidget *parent) : QComboBox(parent) { expanded = false; setEditable(true); QLineEdit *e; e = lineEdit(); e->setReadOnly(true); } void FontNameComboBox::showPopup() { expanded = true; QComboBox::showPopup(); } void FontNameComboBox::hidePopup() { QComboBox::hidePopup(); expanded = false; } bool FontNameComboBox::isExpanded() { return expanded; } //void FontNameComboBox::focusInEvent(QFocusEvent *event) { // //expanded = true; // QComboBox::focusInEvent(event); // QLOG_DEBUG() << "focusin"; //} //void FontNameComboBox::focusOutEvent(QFocusEvent *event) { // //expanded = false; // QComboBox::focusOutEvent(event); // QLOG_DEBUG() << "focusout"; //} nixnote2-2.0.2/gui/browserWidgets/fontnamecombobox.h000066400000000000000000000025511315604104400225710ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef FONTCOMBOBOX_H #define FONTCOMBOBOX_H #include class FontNameComboBox : public QComboBox { Q_OBJECT private: bool expanded; public: explicit FontNameComboBox(QWidget *parent = 0); bool isExpanded(); protected: // void focusInEvent(QFocusEvent *event); // void focusOutEvent(QFocusEvent *event); signals: public slots: void showPopup(); void hidePopup(); }; #endif // FONTCOMBOBOX_H nixnote2-2.0.2/gui/browserWidgets/fontsizecombobox.cpp000066400000000000000000000026321315604104400231560ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "fontsizecombobox.h" #include FontSizeComboBox::FontSizeComboBox(QWidget *parent) : QComboBox(parent) { expanded = false; setEditable(true); QLineEdit *e; e = lineEdit(); e->setReadOnly(false); } void FontSizeComboBox::showPopup() { expanded = true; QComboBox::showPopup(); } void FontSizeComboBox::hidePopup() { expanded = false; QComboBox::hidePopup(); } bool FontSizeComboBox::isExpanded() { return expanded; } nixnote2-2.0.2/gui/browserWidgets/fontsizecombobox.h000066400000000000000000000024411315604104400226210ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef FONTSIZECOMBOBOX_H #define FONTSIZECOMBOBOX_H #include #include class FontSizeComboBox : public QComboBox { Q_OBJECT private: bool expanded; public: explicit FontSizeComboBox(QWidget *parent = 0); bool isExpanded(); signals: public slots: void showPopup(); void hidePopup(); }; #endif // FONTSIZECOMBOBOX_H nixnote2-2.0.2/gui/browserWidgets/locationeditor.cpp000066400000000000000000000116361315604104400226070ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "locationeditor.h" #include "dialog/locationdialog.h" #include "sql/notetable.h" #include #include #include "global.h" extern Global global; LocationEditor::LocationEditor(QWidget *parent) : QToolButton(parent) { QPalette pal; pal.setColor(backgroundRole(), QPalette::Base); setPalette(pal); this->setFont(global.getGuiFont(font())); inactiveColor = "QToolButton {background-color: transparent; border-radius: 0px; border:none; margin 0px; padding: 4px} "; this->setCursor(Qt::PointingHandCursor); this->setStyleSheet(inactiveColor); defaultText = QString(tr("Click to set location...")); this->setText(defaultText); actionMenu = new QMenu(); editAction = actionMenu->addAction(tr("Edit...")); clearAction = actionMenu->addAction(tr("Clear")); viewAction = actionMenu->addAction(tr("View on map")); connect(editAction, SIGNAL(triggered()), this, SLOT(buttonClicked())); connect(viewAction, SIGNAL(triggered()), this, SLOT(viewClicked())); connect(clearAction, SIGNAL(triggered()), this, SLOT(clearClicked())); setAutoRaise(false); setMenu(actionMenu); this->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); this->reloadIcons(); connect(this, SIGNAL(clicked()), this, SLOT(buttonClicked())); hide(); } void LocationEditor::reloadIcons() { this->setIcon(global.getIconResource(":navigationIcon")); } void LocationEditor::setActiveColor() { setStyleSheet(activeColor); } void LocationEditor::buttonClicked() { const QWeakPointer dialogPtr(new LocationDialog(this)); if (LocationDialog *const dialog = dialogPtr.data()) { dialog->setLongitude(this->startLongitude); dialog->setLatitude(this->startLatitude); dialog->setAltitude(this->startAltitude); dialog->exec(); } if (LocationDialog *const dialog = dialogPtr.data()) { const double lon = dialog->getLongitude(); const double lat = dialog->getLatitude(); const double alt = dialog->getAltitude(); startAltitude = alt; startLongitude = lon; startLatitude = lat; if (dialog->okPressed()) { NoteTable ntable(global.db); if (lon == 0.0 && lat == 0.0) { setText(defaultText); ntable.resetGeography(currentLid, true); } else { setText(dialog->locationText()); ntable.setGeography(currentLid, lon,lat,alt, true); } } delete dialog; } } void LocationEditor::setGeography(qint32 lid, double longitude, double latitude, double altitude, QString placeName) { this->startLongitude = longitude; this->startLatitude = latitude; this->startAltitude = altitude; currentLid = lid; Note n; NoteTable ntable(global.db); ntable.get(n, lid, false, false); NoteAttributes attributes; if (n.attributes.isSet()) attributes = n.attributes; if (!attributes.latitude.isSet() || !attributes.longitude.isSet()) return; if (placeName == "") { LocationDialog dialog; dialog.setLongitude(this->startLongitude); dialog.setLatitude(this->startLatitude); dialog.setAltitude(this->startAltitude); this->setText(dialog.locationText()); } else this->setText(placeName); } void LocationEditor::getGeography(double &longitude, double &latitude, double &altitude, QString &placeName) { longitude = this->startLongitude; latitude = this->startLatitude; altitude = this->startAltitude; placeName = text(); } void LocationEditor::clearClicked() { NoteTable ntable(global.db); ntable.resetGeography(currentLid, true); } void LocationEditor::viewClicked() { if (this->text().toLower() == defaultText.toLower()) return; QDesktopServices::openUrl(QUrl("http://maps.google.com/maps?z=6&q=" +QString::number(startLatitude) +"," +QString::number(startLongitude))); } nixnote2-2.0.2/gui/browserWidgets/locationeditor.h000066400000000000000000000035021315604104400222450ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef LOCATIONEDITOR_H #define LOCATIONEDITOR_H #include #include #include class LocationEditor : public QToolButton { Q_OBJECT private: QString activeColor; QString defaultText; QString inactiveColor; double startAltitude; double startLongitude; double startLatitude; QMenu *actionMenu; QAction *clearAction; QAction *editAction; QAction *viewAction; qint32 currentLid; public: explicit LocationEditor(QWidget *parent = 0); void setGeography(qint32 lid, double longitude, double latitude, double altitude, QString placeName) ; void getGeography(double &longitude, double &latitude, double &altitude, QString &placeName) ; void reloadIcons(); signals: public slots: void setActiveColor(); void buttonClicked(); void clearClicked(); void viewClicked(); }; #endif // LOCATIONEDITOR_H nixnote2-2.0.2/gui/browserWidgets/notebookmenubutton.cpp000066400000000000000000000207021315604104400235230ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "notebookmenubutton.h" #include "sql/notebooktable.h" #include "sql/notetable.h" #include #include #include "global.h" extern Global global; NotebookMenuButton::NotebookMenuButton(QWidget *parent) : QPushButton(parent) { setMenu(&rootMenu); setIcon(global.getIconResource(":notebookSmallIcon")); currentNotebookName = ""; loadData(); rootMenu.setFont(global.getGuiFont(rootMenu.font())); this->setFont(global.getGuiFont(font())); currentAction = 0; this->setStyleSheet("QPushButton {" "text-align:left;" "}"); } void NotebookMenuButton::setCurrentNotebook(int lid, Note note) { if (actions.size() == 0) loadData(); if (lid <=0) return; blockSignals(true); currentNoteLid = lid; NotebookTable notebookTable(global.db); Notebook notebook; notebookTable.get(notebook, note.notebookGuid); if (currentAction < actions.size()) actions[currentAction]->setChecked(false); if (notebook.name.isSet()) this->setText(notebook.name); for (int i=0; isetChecked(false); QString notebookname = ""; if (notebook.name.isSet()) notebookname = notebook.name; if (actions[i]->text().toLower().trimmed() == notebookname.toLower().trimmed()) { currentAction = i; actions[currentAction]->setChecked(true); } } notebookLid = notebookTable.getLid(note.notebookGuid); if (notebook.name.isSet()) notebookName = notebook.name; blockSignals(false); } void NotebookMenuButton::updateCurrentNotebook(int notebookLid, QString notebookName) { if (currentAction < actions.size()) actions[currentAction]->setChecked(false); this->setText(notebookName); for (int i=0; isetChecked(false); if (actions[i]->text().toLower().trimmed() == notebookName.toLower().trimmed()) { currentAction = i; actions[currentAction]->setChecked(true); } } this->notebookLid = notebookLid; this->notebookName = notebookName; blockSignals(false); } // Read in all of the data and build the menu. void NotebookMenuButton::loadData() { rootMenu.clear(); NotebookTable notebookTable(global.db); QList lids; notebookTable.getAllOrderByName(lids); if (notebookTable.findByName(currentNotebookName) <= 0) currentNotebookName = ""; for (qint32 i=0; isetText(book.name); action->setCheckable(true); connect(action, SIGNAL(triggered()), this, SLOT(notebookSelected())); QFont f = action->font(); f.setPixelSize(10); action->setFont(f); QMenu *currentMenu = findStack(book); addNotebookMenuItem(currentMenu, action); if (currentNotebookName == "" && book.defaultNotebook.isSet() && book.defaultNotebook) { currentNotebookName = book.name; setText(currentNotebookName); currentAction = actions.size()-1; } QString bookname = ""; if (book.name.isSet()) bookname = book.name; if (bookname == currentNotebookName) { action->setChecked(true); } } } } // Add a new stack to the menu. The action item is a hidden action // item with the menu's text. void NotebookMenuButton::addStackMenuItem(QMenu *newMenu) { QList items = rootMenu.actions(); for (int i=0; ititle().toLower() == items[i]->text().toLower() ) { rootMenu.insertMenu(items[i], newMenu); return; } } } // Add a new notebook menu item to the specified menu. This will // be the root menu for anything without a stack, otherwise it // will be the stack itself. void NotebookMenuButton::addNotebookMenuItem(QMenu *menu, QAction *action) { QList items = menu->actions(); for (int i=0; itext().toLower() == items[i]->text().toLower() ) { menu->insertAction(items[i], action); return; } } action->setFont(global.getGuiFont(font())); menu->addAction(action); } // Search through the list of known stack menu items & find the menu for // this notebook's stack. If one doesn't exist we add it. QMenu* NotebookMenuButton::findStack(Notebook n) { QString stack = ""; if (n.stack.isSet()) stack = n.stack; stack = stack.trimmed(); if (stack == "") return &rootMenu; for (int i=0; ititle().toLower() == stack.toLower()) return stackMenus.at(i); } // Create a new stack. We add a dummy action item to the // menu so we know where to add the menu later. This // keeps things in sorted order QMenu *newMenu = new QMenu(this); newMenu->setTitle(stack); QFont f = newMenu->font(); f.setBold(false); newMenu->setFont(global.getGuiFont(f)); stackMenus.append(newMenu); QAction *placeHolder = new QAction(this); placeHolder->setVisible(false); placeHolder->setText(stack); addNotebookMenuItem(&rootMenu, placeHolder); addStackMenuItem(newMenu); return newMenu; } void NotebookMenuButton::notebookSelected() { blockSignals(true); if (!actions[currentAction]->isChecked()) actions[currentAction]->setChecked(true); else { actions[currentAction]->setChecked(false); for (int i=0; iisChecked()) { currentAction = i; i=actions.size(); } } } this->setText(actions[currentAction]->text()); blockSignals(false); NoteTable noteTable(global.db); NotebookTable notebookTable(global.db); QString name = text(); qint32 notebookLid = notebookTable.findByName(name); if (notebookLid > 0) { noteTable.updateNotebook(currentNoteLid, notebookLid, true); this->notebookLid = notebookLid; this->notebookName = name; emit(notebookChanged()); } } void NotebookMenuButton::reloadData() { for (int i=actions.size()-1; i>=0; i--) { delete actions[i]; } for (int i=stackMenus.size()-1; i>=0; i--) { delete stackMenus[i]; } stackMenus.clear(); actions.clear(); loadData(); // Restore the proper notebook selection if (currentNoteLid > 0) { Note n; NoteTable noteTable(global.db); NotebookTable notebookTable(global.db); if (noteTable.get(n, currentNoteLid, false, false)) { QString notebookGuid = n.notebookGuid; QList bookList; notebookTable.getAll(bookList); QString bookName; for (int i=0; i #include #include #include #include #include #include "qevercloud/include/QEverCloud.h" using namespace std; using namespace qevercloud; class NotebookMenuButton : public QPushButton { Q_OBJECT private: QString currentNotebookName; QMenu rootMenu; QList stackMenus; QList actions; int currentAction; qint32 currentNoteLid; void addNotebookMenuItem(QMenu *menu, QAction *action); void addStackMenuItem(QMenu *newMenu); QMenu *findStack(Notebook n); public: explicit NotebookMenuButton(QWidget *parent = 0); void setCurrentNotebook(qint32 lid, Note n); void updateCurrentNotebook(int notebookLid, QString notebookName); void addNotebook(qint32 lid); qint32 notebookLid; QString notebookName; void reloadIcons(); signals: void notebookChanged(); public slots: void loadData(); void reloadData(); private slots: void notebookSelected(); }; #endif // NOTEBOOKMENUBUTTON_H nixnote2-2.0.2/gui/browserWidgets/ntitleeditor.cpp000066400000000000000000000113021315604104400222640ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "ntitleeditor.h" #include "sql/notetable.h" #include "global.h" #include using namespace qevercloud; extern Global global; NTitleEditor::NTitleEditor(QWidget *parent) : QLineEdit(parent) { // Setup the note title editor QPalette pal; //pal.setColor(QPalette::Text, QColor(102,153,255)); pal.setColor(QPalette::Text, QColor(14,28,209)); pal.setColor(backgroundRole(), QPalette::Base); setPalette(pal); inactiveColor = "QLineEdit {background-color: transparent; border-radius: 0px;} QLineEdit:hover {border: 1px solid #808080; background-color: white; border-radius: 4px;} "; activeColor = "QLineEdit {border: 1px solid #808080; background-color: white; border-radius: 4px;} "; this->setStyleSheet(inactiveColor); connect(this, SIGNAL(textChanged(QString)), this, SLOT(titleChanged(QString))); this->setFont(global.getGuiFont(font())); } void NTitleEditor::setActiveColor() { setStyleSheet(activeColor); } // We now have focus. Change the appearance void NTitleEditor::focusInEvent(QFocusEvent *e) { QLineEdit::focusInEvent(e); setStyleSheet(activeColor); emit(focussed(true)); } // Focus is lost. Set the colors back and check for text changed void NTitleEditor::focusOutEvent(QFocusEvent *e) { QLineEdit::focusOutEvent(e); setStyleSheet(inactiveColor); titleChanged(cleanupTitle(text())); emit(focussed(false)); this->setCursorPosition(0); } // Set the title and values. default is the default title if the user // blanks everything else out. The default text logic should eventually be // moved to the browser editor since it has the actual text of the note // we need for the note. void NTitleEditor::setTitle(qint32 lid, QString title, QString defaultT) { priorTitle = title; currentLid = lid; initialTitle = title; defaultTitle = defaultT; blockSignals(true); setText(title); this->setCursorPosition(0); blockSignals(false); } // This function gets control whenever the text is edited. void NTitleEditor::titleChanged(QString text) { if (currentLid <= 0) return; this->blockSignals(true); // Check that we have some type of title. If not we go with // the default text = cleanupTitle(text); int cursorPosition = this->cursorPosition(); this->setText(text); this->setCursorPosition(cursorPosition); this->blockSignals(false); emit(titleUpdated(text)); // Now check that the text has actually changed. We need to do this because // we can also get here when focus is lost. if (!hasFocus()) { if (text.trimmed() != initialTitle.trimmed() || priorTitle.trimmed() != text.trimmed()) { NoteTable noteTable(global.db); noteTable.updateTitle(currentLid, text, true); emit(titleChanged()); setText(text); priorTitle = text; initialTitle = text; } } } QString NTitleEditor::cleanupTitle(QString text) { if (text.trimmed() == "" && !hasFocus()) { text = tr("Untitled note"); } if (text.length() > EDAM_NOTE_TITLE_LEN_MAX) text = text.mid(0,EDAM_NOTE_TITLE_LEN_MAX-1); return text; } void NTitleEditor::setTitleFromContent(QString s) { if (initialTitle.toLower() != tr("untitled note")) return; if (s.trimmed() == "") s = tr("Untitled note"); int newline = s.indexOf("\n"); if (newline != -1) s = s.mid(0,newline); s = cleanupTitle(s); blockSignals(true); this->setText(s); blockSignals(false); emit(titleUpdated(s)); } void NTitleEditor::checkNoteTitleChange() { if (this->text() != initialTitle) { NoteTable noteTable(global.db); noteTable.updateTitle(currentLid, text(), true); emit(titleChanged()); priorTitle = text(); } } nixnote2-2.0.2/gui/browserWidgets/ntitleeditor.h000066400000000000000000000035141315604104400217370ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NTITLEEDITOR_H #define NTITLEEDITOR_H #include "qevercloud/include/QEverCloud.h" #include #include using namespace qevercloud; class NTitleEditor : public QLineEdit { Q_OBJECT private: QString activeColor; QString inactiveColor; QString initialTitle; QString priorTitle; qint32 currentLid; QString defaultTitle; QString cleanupTitle(QString text); public: explicit NTitleEditor(QWidget *parent = 0); void setTitle(qint32 lid, QString title, QString defaultT); void setTitleFromContent(QString s); public slots: void setActiveColor(); void titleChanged(QString text); void checkNoteTitleChange(); signals: void focussed(bool hasFocus); void titleChanged(); void titleUpdated(QString); protected: virtual void focusInEvent(QFocusEvent *e); virtual void focusOutEvent(QFocusEvent *e); }; #endif // NTITLEEDITOR_H nixnote2-2.0.2/gui/browserWidgets/reminderbutton.cpp000066400000000000000000000027641315604104400226330ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "reminderbutton.h" #include #include #include #include "global.h" extern Global global; ReminderButton::ReminderButton(QWidget *parent) : QPushButton(parent) { this->reloadIcons(); doneAction = menu.addAction(tr("Mark as Done")); setAction = menu.addAction(tr("Change Date")); clearAction = menu.addAction(tr("Clear Reminder")); QFont f = font(); this->setFont(f); menu.setFont(f); this->setMenu(&menu); } void ReminderButton::reloadIcons() { setIcon(global.getIconResource(":alarmclockIcon")); } nixnote2-2.0.2/gui/browserWidgets/reminderbutton.h000066400000000000000000000025141315604104400222710ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef REMINDERBUTTON_H #define REMINDERBUTTON_H #include #include #include class ReminderButton : public QPushButton { Q_OBJECT public: explicit ReminderButton(QWidget *parent = 0); QMenu menu; QAction *setAction; QAction *clearAction; QAction *doneAction; void reloadIcons(); signals: public slots: }; #endif // REMINDERBUTTON_H nixnote2-2.0.2/gui/browserWidgets/table/000077500000000000000000000000001315604104400201445ustar00rootroot00000000000000nixnote2-2.0.2/gui/browserWidgets/table/tablepropertiesdialog.cpp000066400000000000000000000771671315604104400252560ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2017 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "tablepropertiesdialog.h" #include "global.h" #include #include extern Global global; // Default constructor TablePropertiesDialog::TablePropertiesDialog(QString tableCss, QString cellCss, QWidget *parent) : QDialog(parent) { tableLeftMargin = 0; tableRightMargin = 0; tableBottomMargin = 0; tableTopMargin = 0; tableTopMarginUnit = "px"; tableBottomMarginUnit = "px"; tableLeftMarginUnit = "px"; tableRightMarginUnit = "px"; cellMargin = 10; cellWidth = 33.33; tableBorderCollapse = "collapse"; tableExtras="-evernote-table:true;width:100%;table-layout:fixed;"; cellBorderStyleBottom = "solid"; cellBorderStyleTop = "solid"; cellBorderStyleLeft = "solid"; cellBorderStyleRight = "solid"; cellExtras = "margin:0px;width:33.33%;"; cellBorderWidth=1; cellBorderColorB = 211; cellBorderColorG = 211; cellBorderColorR = 211; cellBackgroundColorR = -1; cellBackgroundColorG = -1; cellBackgroundColorB = -1; cellFontColorR = -1; cellFontColorG = -1; cellFontColorB = -1; tableWidth = 80; tableWidthUnit = "%"; cellPaddingSize = 10; horizontalAlignment = ""; verticalAlignment=""; evernoteTable = false; tableWidth=80; tableLayout = "fixed"; okButtonPressed = false; setWindowTitle(tr("Table Properties")); mainLayout = new QVBoxLayout(); setLayout(mainLayout); QScrollArea *scrollArea = new QScrollArea(this); scrollArea->setWidgetResizable(true); tabs = new QTabWidget(this); scrollArea->setWidget(tabs); mainLayout->addWidget(scrollArea); this->setFont(global.getGuiFont(font())); scrollArea->setMinimumHeight(200); scrollArea->setMinimumHeight(this->height()/2); cancelButton = new QPushButton(tr("Cancel"), this); okButton = new QPushButton(tr("OK"), this); connect(okButton, SIGNAL(clicked()), this, SLOT(okButtonClicked())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancelButtonClicked())); QSpacerItem *spacer1 = new QSpacerItem(0,0,QSizePolicy::MinimumExpanding); QSpacerItem *spacer2 = new QSpacerItem(0,0,QSizePolicy::MinimumExpanding); buttonLayout = new QHBoxLayout(); buttonLayout->addSpacerItem(spacer1); buttonLayout->addWidget(okButton); buttonLayout->addWidget(cancelButton); buttonLayout->addSpacerItem(spacer2); buttonLayout->setStretch(0,100); buttonLayout->setStretch(3,100); cellPanel = new QWidget(); tablePanel = new QWidget(); tabs->addTab(tablePanel, tr("Table Properties")); tabs->addTab(cellPanel,tr("Cell Properties")); preview = new QWebView(); mainLayout->addWidget(preview); mainLayout->addLayout(buttonLayout); this->resize(this->size().width()*1.2, this->size().height()*1.2); this->setupTablePanel(); this->setupCellPanel(); setCellStyle(cellCss); setTableStyle(tableCss); loadValues(); this->generatePreview(); } // Load the initial values passed into the constructor into the widgets void TablePropertiesDialog::loadValues() { tableWidthSpinner->setValue(this->tableWidth); if (tableWidthUnit.toLower() == "px") tableWidthUnitCombo->setCurrentIndex(1); else tableWidthUnitCombo->setCurrentIndex(0); tableTopMarginSpinner->setValue(tableTopMargin); tableBottomMarginSpinner->setValue(tableBottomMargin); tableLeftMarginSpinner->setValue(tableLeftMargin); tableRightMarginSpinner->setValue(tableRightMargin); if (tableTopMarginUnit == "%") tableTopMarginUnitCombo->setCurrentIndex(0); else tableTopMarginUnitCombo->setCurrentIndex(1); if (tableBottomMarginUnit == "%") tableBottomMarginUnitCombo->setCurrentIndex(0); else tableBottomMarginUnitCombo->setCurrentIndex(1); if (tableLeftMarginUnit == "%") tableLeftMarginUnitCombo->setCurrentIndex(0); else tableLeftMarginUnitCombo->setCurrentIndex(1); if (tableRightMarginUnit == "%") tableRightMarginUnitCombo->setCurrentIndex(0); else tableRightMarginUnitCombo->setCurrentIndex(1); borderSizeSpinner->setValue(this->cellBorderWidth); paddingSizeSpinner->setValue(cellPaddingSize); setInitialBorderSelection(borderComboTop, cellBorderStyleTop); setInitialBorderSelection(borderComboBottom, cellBorderStyleBottom); setInitialBorderSelection(borderComboLeft, cellBorderStyleLeft); setInitialBorderSelection(borderComboRight, cellBorderStyleRight); horizontalAlignmentCombo->setCurrentIndex(0); if (horizontalAlignment.toLower() == "left") horizontalAlignmentCombo->setCurrentIndex(1); if (horizontalAlignment.toLower() == "right") horizontalAlignmentCombo->setCurrentIndex(2); if (horizontalAlignment.toLower() == "center") horizontalAlignmentCombo->setCurrentIndex(3); } // Set initial values for some of the border combo boxes void TablePropertiesDialog::setInitialBorderSelection(QComboBox *box, QString value) { box->setCurrentIndex(0); box->blockSignals(true); if (value.toLower() == "none") box->setCurrentIndex(1); if (value.toLower() == "dotted") box->setCurrentIndex(2); if (value.toLower() == "dashed") box->setCurrentIndex(3); if (value.toLower() == "double") box->setCurrentIndex(4); if (value.toLower() == "right") box->setCurrentIndex(5); if (value.toLower() == "inset") box->setCurrentIndex(6); if (value.toLower() == "outset") box->setCurrentIndex(7); box->blockSignals(false); } // User clicked the cancel button void TablePropertiesDialog::cancelButtonClicked() { this->close(); } // User clicked the "OK" button void TablePropertiesDialog::okButtonClicked() { okButtonPressed = true; this->close(); } // Generate a preview of the table from user selected values void TablePropertiesDialog::generatePreview() { QString cellCss = "style='"+getCellCss()+ "'"; QString html = ""+ "
"+tr("Row 1 Cell 1")+""+tr("Row 1 Cell 2")+""+tr("Row 1 Cell 3")+"
"+tr("Row 2 Cell 1")+""+tr("Row 2 Cell 2")+""+tr("Row 2 Cell 3")+"
"+tr("Row 3 Cell 1")+""+tr("Row 3 Cell 2")+""+tr("Row 3 Cell 3")+"
"; preview->setHtml(html); } // Parse out the table CSS values & save them for later use void TablePropertiesDialog::setTableStyle(QString value) { tableExtras = ""; QStringList attributes = value.split(";"); for (int i=0; itableLeftMargin = attr.toInt(); } else if (attr.startsWith("margin-right:")) { attr = attr.mid(13); if (attr.endsWith("px")) { attr.chop(2); tableRightMarginUnit = "px"; } else { attr.chop(1); tableRightMarginUnit = "%"; } this->tableRightMargin = attr.toInt(); } else if (attr.startsWith("margin-top:")) { attr = attr.mid(11); if (attr.endsWith("px")) { attr.chop(2); tableTopMarginUnit = "px"; } else { attr.chop(1); tableTopMarginUnit = "%"; } this->tableTopMargin = attr.toInt(); } else if (attr.startsWith("margin-bottom:")) { attr = attr.mid(15); if (attr.endsWith("px")) { attr.chop(2); tableBottomMarginUnit = "px"; } else { attr.chop(1); tableBottomMarginUnit = "%"; } this->tableBottomMargin = attr.toInt(); } else if (attr.startsWith("table-layout:")) { attr = attr.remove(0,13); tableLayout = attr; } else if (attr.startsWith("width:")) { attr = attr.remove(0,6); if (attr.endsWith("%")) { attr.chop(1); tableWidthUnit = "%"; } else { attr.chop(2); tableWidthUnit="px"; } tableWidth = attr.toInt(); } else if (attr.startsWith("-evernote-table:true")) { evernoteTable = true; } else if (attr.startsWith("text-align:")) { attr = attr.remove(0,11); this->horizontalAlignment = attr; } else if (attr.startsWith("vertical-align:")) { attr = attr.remove(0,15); this->verticalAlignment = attr; } else if (attr.trimmed() != "") { this->tableExtras = tableExtras+";"+attr; } } } // Return a string of the table CSS from user selected values QString TablePropertiesDialog::getTableCss() { QString retVal = tableExtras+";"; if (evernoteTable) { retVal = retVal + "-evernote-table:true;"; } retVal = retVal + "border-collapse:"+tableBorderCollapse+";"; retVal = retVal + "width:"+QString::number(tableWidth)+tableWidthUnit+";"; retVal = retVal + "table-layout:" + tableLayout + ";"; retVal = retVal + "margin-left:"+QString::number(tableLeftMargin)+tableLeftMarginUnit+";"; retVal = retVal + "margin-right:"+QString::number(tableRightMargin)+tableRightMarginUnit+";"; retVal = retVal + "margin-top:"+QString::number(tableTopMargin)+tableTopMarginUnit+";"; retVal = retVal + "margin-bottom:"+QString::number(tableBottomMargin)+tableBottomMarginUnit+";"; // if (verticalAlignment != "") // retVal =retVal + "vertical-align:"+verticalAlignment+";"; if (horizontalAlignment != "") retVal =retVal + "text-align:"+horizontalAlignment+";"; retVal = retVal.replace(";;", ";"); // Just n case we have a double ; if (retVal.startsWith(";")) retVal.remove(0,1); return retVal; } // Parse out the cell CSS and save values for later use void TablePropertiesDialog::setCellStyle(QString value) { cellExtras.clear(); horizontalAlignment = ""; verticalAlignment = ""; QStringList attributes = value.split(";"); for (int i=0; icellBorderStyleTop = attr; this->cellBorderStyleLeft = attr; this->cellBorderStyleRight = attr; this->cellBorderStyleBottom = attr; } else if (attr.startsWith("border-top-style:")) { attr = attr.remove(0,17); this->cellBorderStyleTop = attr; } else if (attr.startsWith("border-bottom-style:")) { attr = attr.remove(0,20); this->cellBorderStyleBottom = attr; } else if (attr.startsWith("border-left-style:")) { attr = attr.remove(0,18); this->cellBorderStyleLeft = attr; } else if (attr.startsWith("border-right-style:")) { attr = attr.remove(0,19); this->cellBorderStyleRight = attr; } else if (attr.startsWith("text-align:")) { attr = attr.remove(0,11); this->horizontalAlignment = attr; } else if (attr.startsWith("vertical-align:")) { attr = attr.remove(0,15); this->verticalAlignment = attr; } else if (attr.startsWith("border-width:")) { attr = attr.mid(13); if (attr.endsWith("px")) attr.chop(2); if (attr.endsWith("%")) attr.chop(1); this->cellBorderWidth = attr.toInt(); } else if (attr.startsWith("border-color:rgb(")) { attr = attr.remove(0,17); attr.chop(1); QStringList c = attr.split(","); cellBorderColorR = c.at(0).toInt(); cellBorderColorG = c.at(1).toInt(); cellBorderColorB = c.at(2).toInt(); } else if (attr.startsWith("padding:")) { attr = attr.remove(0,8); if (attr.endsWith("px")) attr.chop(2); cellPaddingSize = attr.toInt(); } else if (attr.startsWith("margin:")) { attr = attr.remove(0,7); if (attr.endsWith("px")) attr.chop(2); cellMargin = attr.toInt(); } else if (attr.startsWith("width:")) { attr = attr.remove(0,6); if (attr.endsWith("%")) attr.chop(1); cellWidth = attr.toDouble(); } else if (attr.trimmed() != "") { cellExtras = cellExtras +";" + ";" +attr; } } } // Return the current user CSS values for the cells. QString TablePropertiesDialog::getCellCss() { QString retVal; retVal = cellExtras+";"; retVal = retVal + "border-top-style:" + cellBorderStyleTop + ";"; retVal = retVal + "border-bottom-style:" + cellBorderStyleBottom + ";"; retVal = retVal + "border-left-style:" + cellBorderStyleLeft + ";"; retVal = retVal + "border-right-style:" + cellBorderStyleRight + ";"; retVal = retVal + "border-width:"+QString::number(cellBorderWidth)+"px;border-color:rgb("+ QString::number(cellBorderColorR)+","+ QString::number(cellBorderColorG)+","+ QString::number(cellBorderColorB)+");"; if (cellBackgroundColorB != -1 && cellBackgroundColorG != -1 && cellBackgroundColorR != -1) { retVal = retVal + "background-color:rgb(" + QString::number(cellBackgroundColorR) + "," + QString::number(cellBackgroundColorG) + "," + QString::number(cellBackgroundColorB) + ");"; } if (cellFontColorB != -1 && cellFontColorG != -1 && cellFontColorR != -1) { retVal = retVal + "color:rgb(" + QString::number(cellFontColorR) + "," + QString::number(cellFontColorG) + "," + QString::number(cellFontColorB) + ");"; } retVal = retVal + "padding:"+QString::number(cellPaddingSize)+"px;"; if (retVal.startsWith(";;")) retVal.remove(0,1); retVal = retVal.replace(";;",";"); return retVal; } // Build the table tab widget void TablePropertiesDialog::setupTablePanel() { int row=0; int col=0; tablePanelLayout = new QGridLayout(); tablePanelLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); tablePanel->setLayout(tablePanelLayout); QHBoxLayout *widthLayout = new QHBoxLayout(); tableWidthLabel= new QLabel(tr("Width")); tableWidthLabel->setAlignment(Qt::AlignCenter|Qt::AlignRight); widthLayout->addWidget(tableWidthLabel); tableWidthSpinner = new QSpinBox(); tableWidthSpinner->setMinimum(1); tableWidthSpinner->setMaximum(100); widthLayout->addWidget(tableWidthSpinner); tableWidthUnitCombo = new QComboBox(); tableWidthUnitCombo->addItem(tr("Percent"), "%"); tableWidthUnitCombo->addItem(tr("Pixels"), "px"); widthLayout->addWidget(tableWidthUnitCombo); tablePanelLayout->addLayout(widthLayout, row, col++); row=1; col=0; QHBoxLayout *topMarginLayout = new QHBoxLayout(); tableTopMarginSpinner = new QSpinBox(); tableTopMarginSpinner->setMinimum(0); tableTopMarginSpinner->setMaximum(100); tableTopMarginUnitLabel = new QLabel(tr("Top Margin")); tableTopMarginUnitLabel->setAlignment(Qt::AlignRight | Qt::AlignCenter); tableTopMarginUnitCombo = new QComboBox(); tableTopMarginUnitCombo->addItem(tr("Pixels"),"px"); tableTopMarginUnitCombo->addItem(tr("Percent"),"%"); topMarginLayout->addWidget(tableTopMarginUnitLabel); topMarginLayout->addWidget(tableTopMarginSpinner); topMarginLayout->addWidget(tableTopMarginUnitCombo); tablePanelLayout->addLayout(topMarginLayout, row, col++); QHBoxLayout *bottomMarginLayout = new QHBoxLayout(); tableBottomMarginSpinner = new QSpinBox(); tableBottomMarginSpinner->setMinimum(0); tableBottomMarginSpinner->setMaximum(100); tableBottomMarginUnitLabel = new QLabel(tr("Bottom Margin")); tableBottomMarginUnitLabel->setAlignment(Qt::AlignRight | Qt::AlignCenter); tableBottomMarginUnitCombo = new QComboBox(); tableBottomMarginUnitCombo->addItem(tr("Pixels"),"px"); tableBottomMarginUnitCombo->addItem(tr("Percent"),"%"); bottomMarginLayout->addWidget(tableBottomMarginUnitLabel); bottomMarginLayout->addWidget(tableBottomMarginSpinner); bottomMarginLayout->addWidget(tableBottomMarginUnitCombo); tablePanelLayout->addLayout(bottomMarginLayout, row, col++); row++; col=0; QHBoxLayout *leftMarginLayout = new QHBoxLayout(); tableLeftMarginSpinner = new QSpinBox(); tableLeftMarginSpinner->setMinimum(0); tableLeftMarginSpinner->setMaximum(100); tableLeftMarginUnitLabel = new QLabel(tr("Left Margin")); tableLeftMarginUnitLabel->setAlignment(Qt::AlignRight | Qt::AlignCenter); tableLeftMarginUnitCombo = new QComboBox(); tableLeftMarginUnitCombo->addItem(tr("Pixels"),"px"); tableLeftMarginUnitCombo->addItem(tr("Percent"),"%"); leftMarginLayout->addWidget(tableLeftMarginUnitLabel); leftMarginLayout->addWidget(tableLeftMarginSpinner); leftMarginLayout->addWidget(tableLeftMarginUnitCombo); tablePanelLayout->addLayout(leftMarginLayout, row, col++); QHBoxLayout *rightMarginLayout = new QHBoxLayout(); tableRightMarginSpinner = new QSpinBox(); tableRightMarginSpinner->setMinimum(0); tableRightMarginSpinner->setMaximum(100); tableRightMarginUnitLabel = new QLabel(tr("Right Margin")); tableRightMarginUnitLabel->setAlignment(Qt::AlignRight | Qt::AlignCenter); tableRightMarginUnitCombo = new QComboBox(); tableRightMarginUnitCombo->addItem(tr("Pixels"),"px"); tableRightMarginUnitCombo->addItem(tr("Percent"),"%"); rightMarginLayout->addWidget(tableRightMarginUnitLabel); rightMarginLayout->addWidget(tableRightMarginSpinner); rightMarginLayout->addWidget(tableRightMarginUnitCombo); tablePanelLayout->addLayout(rightMarginLayout, row, col++); connect(tableWidthSpinner, SIGNAL(valueChanged(int)), this, SLOT(tableWidthChanged(int))); connect(tableWidthUnitCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(tableWidthUnitChanged(int))); connect(tableTopMarginSpinner, SIGNAL(valueChanged(int)), this, SLOT(tableTopMarginChanged(int))); connect(tableBottomMarginSpinner, SIGNAL(valueChanged(int)), this, SLOT(tableBottomMarginChanged(int))); connect(tableLeftMarginSpinner, SIGNAL(valueChanged(int)), this, SLOT(tableLeftMarginChanged(int))); connect(tableRightMarginSpinner, SIGNAL(valueChanged(int)), this, SLOT(tableRightMarginChanged(int))); connect(tableRightMarginUnitCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(tableMarginUnitChanged(int))); connect(tableLeftMarginUnitCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(tableMarginUnitChanged(int))); connect(tableTopMarginUnitCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(tableMarginUnitChanged(int))); connect(tableBottomMarginUnitCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(tableMarginUnitChanged(int))); } // Build the cell tab widget void TablePropertiesDialog::setupCellPanel() { int row=0; int col=0; cellLayout = new QGridLayout(); borderColorButton = new QPushButton(); backgroundColorButton = new QPushButton(); fontColorButton = new QPushButton(); borderColorButton->setText(tr("Border Color")); fontColorButton->setText(tr("Font Color")); backgroundColorButton->setText(tr("Background Color")); cellPanel->setLayout(cellLayout); cellLayout->addWidget(borderColorButton, row, col++); cellLayout->addWidget(backgroundColorButton, row, col++); cellLayout->addWidget(fontColorButton, row, col++); row++; col=0; borderSizeLayout = new QHBoxLayout(); borderSizeSpinner = new QSpinBox(); borderSizeSpinner->setMinimum(0); borderSizeSpinner->setMaximum(50); borderSizeLabel = new QLabel(tr("Border Size")); borderSizeLabel->setAlignment(Qt::AlignRight | Qt::AlignCenter); borderSizeLayout->addWidget(borderSizeLabel); borderSizeLayout->addWidget(borderSizeSpinner); cellLayout->addLayout(borderSizeLayout, row, col++); paddingLayout = new QHBoxLayout(); paddingSizeSpinner = new QSpinBox(this); paddingSizeSpinner->setMinimum(0); paddingSizeSpinner->setMaximum(50); paddingLabel = new QLabel(tr("Padding")); paddingLabel->setAlignment(Qt::AlignRight | Qt::AlignCenter); paddingLayout->addWidget(paddingLabel); paddingLayout->addWidget(paddingSizeSpinner); cellLayout->addLayout(paddingLayout, row, col++); row++; col=0; QHBoxLayout *borderLayoutTop = new QHBoxLayout(); QLabel *borderLabelTop = new QLabel(tr("Top Border")); borderLabelTop->setAlignment(Qt::AlignCenter | Qt::AlignRight); borderComboTop = new QComboBox(); borderLayoutTop->addWidget(borderLabelTop); borderLayoutTop->addWidget(borderComboTop); loadBorderCombo(borderComboTop); cellLayout->addLayout(borderLayoutTop, row, col++); QHBoxLayout *borderLayoutBottom = new QHBoxLayout(); QLabel *borderLabelBottom = new QLabel(tr("Bottom Border")); borderLabelBottom->setAlignment(Qt::AlignCenter | Qt::AlignRight); borderComboBottom = new QComboBox(); borderLayoutBottom->addWidget(borderLabelBottom); borderLayoutBottom->addWidget(borderComboBottom); loadBorderCombo(borderComboBottom); cellLayout->addLayout(borderLayoutBottom, row, col++); QHBoxLayout *borderLayoutLeft = new QHBoxLayout(); QLabel *borderLabelLeft = new QLabel(tr("Left Border")); borderLabelLeft->setAlignment(Qt::AlignCenter | Qt::AlignRight); borderComboLeft = new QComboBox(); borderLayoutLeft->addWidget(borderLabelLeft); borderLayoutLeft->addWidget(borderComboLeft); loadBorderCombo(borderComboLeft); cellLayout->addLayout(borderLayoutLeft, row, col++); QHBoxLayout *borderLayoutRight = new QHBoxLayout(); QLabel *borderLabelRight = new QLabel(tr("Right Border")); borderLabelRight->setAlignment(Qt::AlignCenter | Qt::AlignRight); borderComboRight = new QComboBox(); borderLayoutRight->addWidget(borderLabelRight); borderLayoutRight->addWidget(borderComboRight); loadBorderCombo(borderComboRight); cellLayout->addLayout(borderLayoutRight, row, col++); row++; col=0; QHBoxLayout *alignmentLayoutHorizontal = new QHBoxLayout(); QLabel *alignmentLabelHorizontal = new QLabel(tr("Horizontal Alignment")); alignmentLayoutHorizontal->setAlignment(Qt::AlignCenter | Qt::AlignRight); horizontalAlignmentCombo = new QComboBox(); alignmentLayoutHorizontal->addWidget(alignmentLabelHorizontal); alignmentLayoutHorizontal->addWidget(horizontalAlignmentCombo); horizontalAlignmentCombo->addItem(tr("Default"), ""); horizontalAlignmentCombo->addItem(tr("Left"),"left"); horizontalAlignmentCombo->addItem(tr("Right"),"right"); horizontalAlignmentCombo->addItem(tr("Center"),"center"); cellLayout->addLayout(alignmentLayoutHorizontal, row, col++); connect(horizontalAlignmentCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(horizontalAlignmentChanged(int))); // Vertical alignment doesn't work for some reason. // QHBoxLayout *alignmentLayoutVertical = new QHBoxLayout(); // QLabel *alignmentLabelVertical = new QLabel(tr("Vertical Alignment")); // alignmentLabelVertical->setAlignment(Qt::AlignCenter | Qt::AlignRight); // verticalAlignmentCombo = new QComboBox(); // alignmentLayoutVertical->addWidget(alignmentLabelVertical); // alignmentLayoutVertical->addWidget(verticalAlignmentCombo); // verticalAlignmentCombo->addItem(tr("Default"), ""); // verticalAlignmentCombo->addItem(tr("Bottom"),"bottom"); // verticalAlignmentCombo->addItem(tr("Top"),"top"); // verticalAlignmentCombo->addItem(tr("Center"),"center"); // cellLayout->addLayout(alignmentLayoutVertical, row, col++); // connect(verticalAlignmentCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(verticalAlignmentChanged(int))); colorDialog = new QColorDialog(); connect(borderColorButton, SIGNAL(pressed()), this, SLOT(cellBorderColorButtonPressed())); connect(backgroundColorButton, SIGNAL(pressed()), this, SLOT(cellBackgroundColorButtonPressed())); connect(fontColorButton, SIGNAL(pressed()), this, SLOT(cellFontColorButtonPressed())); connect(borderSizeSpinner, SIGNAL(valueChanged(int)), this, SLOT(cellBorderSizeChanged(int))); connect(paddingSizeSpinner, SIGNAL(valueChanged(int)), this, SLOT(cellPaddingSizeChanged(int))); } // Load the border combo box styles void TablePropertiesDialog::loadBorderCombo(QComboBox *box) { box->addItem(tr("Solid"), "solid"); box->addItem(tr("None"), "none"); box->addItem(tr("Dotted"), "dotted"); box->addItem(tr("Dashed"), "dashed"); box->addItem(tr("Double"), "double"); box->addItem(tr("Ridge"), "ridge"); box->addItem(tr("Inset"), "inset"); box->addItem(tr("Outset"), "outset"); connect(box, SIGNAL(currentIndexChanged(int)), SLOT(cellBorderChanged(int))); } // Signaled when a border color button is pressed void TablePropertiesDialog::cellBorderColorButtonPressed() { QColor c = colorDialog->getColor(); if (!c.isValid()) return; cellBorderColorB = c.blue(); cellBorderColorG = c.green(); cellBorderColorR = c.red(); generatePreview(); } // Signaled when the background color button si presesd void TablePropertiesDialog::cellBackgroundColorButtonPressed() { QColor c = colorDialog->getColor(); if (!c.isValid()) return; cellBackgroundColorB = c.blue(); cellBackgroundColorG = c.green(); cellBackgroundColorR = c.red(); generatePreview(); } // Signaled when the font color button is pressed void TablePropertiesDialog::cellFontColorButtonPressed() { QColor c = colorDialog->getColor(); if (!c.isValid()) return; cellFontColorB = c.blue(); cellFontColorG = c.green(); cellFontColorR = c.red(); generatePreview(); } // Signaled when the cell padding spinner chnanges values void TablePropertiesDialog::cellPaddingSizeChanged(int size) { cellPaddingSize = size; generatePreview(); } // Signaled when a cell border style changes void TablePropertiesDialog::cellBorderChanged(int index) { Q_UNUSED(index); #if QT_VERSION >= 0x050000 cellBorderStyleBottom = borderComboBottom->currentData().toString(); cellBorderStyleTop = borderComboTop->currentData().toString(); cellBorderStyleLeft = borderComboLeft->currentData().toString(); cellBorderStyleRight = borderComboRight->currentData().toString(); #endif #if QT_VERSION < 0x050000 cellBorderStyleBottom = borderComboBottom->itemData(borderComboBottom->currentIndex()).toString(); cellBorderStyleTop = borderComboTop->itemData(borderComboTop->currentIndex()).toString(); cellBorderStyleLeft = borderComboLeft->itemData(borderComboLeft->currentIndex()).toString(); cellBorderStyleRight = borderComboRight->itemData(borderComboRight->currentIndex()).toString(); #endif generatePreview(); } // Signaled when the horizontal alignment changes void TablePropertiesDialog::horizontalAlignmentChanged(int index) { Q_UNUSED(index); #if QT_VERSION >= 0x050000 horizontalAlignment = horizontalAlignmentCombo->currentData().toString(); #endif #if QT_VERSION < 0x050000 horizontalAlignment = horizontalAlignmentCombo->itemData(horizontalAlignmentCombo->currentIndex()).toString(); #endif generatePreview(); } // Signaled when the vertical alignment changes void TablePropertiesDialog::verticalAlignmentChanged(int index) { Q_UNUSED(index); #if QT_VERSION >= 0x050000 verticalAlignment = verticalAlignmentCombo->currentData().toString(); #endif #if QT_VERSION < 0x050000 verticalAlignment = verticalAlignmentCombo->itemData(verticalAlignmentCombo->currentIndex()).toString(); #endif generatePreview(); } // Signald when the table left margin changes void TablePropertiesDialog::tableLeftMarginChanged(int size) { tableLeftMargin = size; generatePreview(); } // Signaled when the table right margin changes void TablePropertiesDialog::tableRightMarginChanged(int size) { tableRightMargin = size; generatePreview(); } // Signaled when the table top margn changes void TablePropertiesDialog::tableTopMarginChanged(int size) { tableTopMargin = size; generatePreview(); } // Signaled when a table bottom margen changes void TablePropertiesDialog::tableBottomMarginChanged(int size) { tableBottomMargin = size; generatePreview(); } // Signaled when a cell border size changes void TablePropertiesDialog::cellBorderSizeChanged(int size) { cellBorderWidth = size; generatePreview(); } // Signald when a table margin unit changes void TablePropertiesDialog::tableMarginUnitChanged(int index) { Q_UNUSED(index); #if QT_VERSION >= 0x050000 tableRightMarginUnit = tableRightMarginUnitCombo->currentData().toString(); tableTopMarginUnit = tableTopMarginUnitCombo->currentData().toString(); tableLeftMarginUnit = tableLeftMarginUnitCombo->currentData().toString(); tableBottomMarginUnit = tableBottomMarginUnitCombo->currentData().toString(); #endif #if QT_VERSION < 0x050000 tableRightMarginUnit = tableRightMarginUnitCombo->itemData(tableRightMarginUnitCombo->currentIndex()).toString(); tableTopMarginUnit = tableTopMarginUnitCombo->itemData(tableTopMarginUnitCombo->currentIndex()).toString(); tableLeftMarginUnit = tableLeftMarginUnitCombo->itemData(tableLeftMarginUnitCombo->currentIndex()).toString(); tableBottomMarginUnit = tableBottomMarginUnitCombo->itemData(tableBottomMarginUnitCombo->currentIndex()).toString(); #endif generatePreview(); } // Signaled when a table width spinner changes void TablePropertiesDialog::tableWidthChanged(int size) { tableWidth = size; generatePreview(); } // Signaled when a table width unit changes void TablePropertiesDialog::tableWidthUnitChanged(int index) { tableWidthUnit = tableWidthUnitCombo->itemData(index).toString(); if (tableWidthUnit == "%") tableWidthSpinner->setMaximum(100); else tableWidthSpinner->setMaximum(1000); generatePreview(); } nixnote2-2.0.2/gui/browserWidgets/table/tablepropertiesdialog.h000066400000000000000000000250141315604104400247030ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2017 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef TABLEPROPERTIESDIALOG_H #define TABLEPROPERTIESDIALOG_H #include #include #include #include #include #include #include #include #include #include #include #include class TablePropertiesDialog : public QDialog { Q_OBJECT private: int tableLeftMargin; // current user value for the table left margin int tableRightMargin; // current user value for the table right margin int tableBottomMargin; // current user value for the table bottom margin int tableTopMargin; // current user value for the table top margin QString tableLeftMarginUnit; // current user value for the table left margin unit QString tableRightMarginUnit; // current user value for the table right margin unit QString tableBottomMarginUnit; // current user value for the table bottom margin unit QString tableTopMarginUnit; // current user value for the table top margin unit QString tableLayout; // Current user value for the table layout. Typically "fixed" & I don't provide a way to change it. bool evernoteTable; // Evernote style table? QString tableExtras; // Anything extra that isn't specified goes in this CSS value string. QString tableBorderCollapse; // table-collapse value. int tableWidth; // Table overall width QString tableWidthUnit; // Table width units (% or px) QLabel *tableWidthLabel; // Label for user width selection QSpinBox *tableWidthSpinner; // Spinner to allow user to specify value for the total table width QComboBox *tableWidthUnitCombo; // Combo box to change table width units (pixels or percent). QSpinBox *tableLeftMarginSpinner; // Table left margin spin box QSpinBox *tableRightMarginSpinner; // Table right margin spin box QSpinBox *tableTopMarginSpinner; // table top margin spin box QSpinBox *tableBottomMarginSpinner; // Table bottom margin spin box QComboBox *tableTopMarginUnitCombo; // Table top margin unit combo box QComboBox *tableBottomMarginUnitCombo; // Table bottom margin unit combo box QComboBox *tableLeftMarginUnitCombo; // Table left margin unit combo box QComboBox *tableRightMarginUnitCombo; // Table right margin unit combo box QLabel *tableTopMarginUnitLabel; // Label for user top margin selection QLabel *tableBottomMarginUnitLabel; // Label for user bottom margin selection QLabel *tableLeftMarginUnitLabel; // Label for unit left margin selection QLabel *tableRightMarginUnitLabel; // Label for unit right margin selection QString horizontalAlignment; // current user value for horizontal alignment value QString verticalAlignment; // current user value for vertical alignment value double cellWidth; // Cell overall width QString cellExtras; // any current table css value that we don't allow specification for. QString cellBorderStyleBottom; // Cell bottom border style QString cellBorderStyleTop; // cell top border style QString cellBorderStyleLeft; // cell left border style QString cellBorderStyleRight; // cell right border style int cellBorderWidth; // Width of the cell border int cellMargin; // Cell margins int cellBorderColorR; // cell red border value int cellBorderColorG; // cell green border value int cellBorderColorB; // cell blue border value int cellBackgroundColorB; // cell background blue value int cellBackgroundColorR; // cell background red value int cellBackgroundColorG; // cell backgronud green value int cellFontColorR; // cell font red value int cellFontColorG; // cell font green value int cellFontColorB; // cell font blue vaule int cellPaddingSize; // Current cell padding sizes void setupCellPanel(); // Setup the cell tab void setupTablePanel(); // Setup the table tab QHBoxLayout *buttonLayout; // Layout used for the "OK" & "Cancel" buttons. QGridLayout *tablePanelLayout; // Man layout used in the "table" tab QVBoxLayout *mainLayout; // Main dialog layout QPushButton *okButton; // Dialog box OK button QPushButton *cancelButton; // Dialog box cancel button QTabWidget *tabs; // Tab widget holding table & cell options QWebView *preview; // HTML page showing the user's selected values QLabel *paddingLabel; // Label used to show cell padding selection QHBoxLayout *borderSizeLayout; // layout used for the border size selection QHBoxLayout *paddingLayout; // layout used for the cell padding selection QLabel *borderSizeLabel; // Label for border size spinner QColorDialog *colorDialog; // Color dialog used for user selections QPushButton *borderColorButton; // Show the border color dialog QGridLayout *cellLayout; // Main layout used in the cell tab QPushButton *fontColorButton; // show the dialog for the font color QPushButton *backgroundColorButton; // show the dialog for the background color QSpinBox *borderSizeSpinner; // border size spinner QSpinBox *paddingSizeSpinner; // cell padding spinner QComboBox *borderComboBottom; // Show the bottom border units QComboBox *borderComboLeft; // Show the left border units QComboBox *borderComboRight; // Show the right border units QComboBox *borderComboTop; // Show the top border units. QComboBox *verticalAlignmentCombo; // Shows the vertical alignment values QComboBox *horizontalAlignmentCombo; // Shows the horizontal alignment values void loadBorderCombo(QComboBox *combo); // Load a list of available border types into a combo box void setTableStyle(QString value); // Setup the table values from the current css. void setCellStyle(QString value); // Setup the cell values from the current css. QWidget *cellPanel; // Cell settings tab QWidget *tablePanel; // Table settings tab void loadValues(); // load initial values into widgets void setInitialBorderSelection(QComboBox *box, QString value); // Set initial value for the border combos public: explicit TablePropertiesDialog(QString tableCss, QString cellCss, QWidget *parent = 0); bool okButtonPressed; // Was OK pressed? true=yes, false=no QString getCellCss(); // User selected cell CSS values QString getTableCss(); // User selected table CSS values signals: public slots: void okButtonClicked(); // Called when user clicks "OK" void cancelButtonClicked(); // Called when user clicks "Cancel" void generatePreview(); // Generate a preview of a table using user-selected values void cellBorderColorButtonPressed(); // Display a color dialog so user can set border color void cellBackgroundColorButtonPressed(); // Display a color dialog so user can set background color void cellFontColorButtonPressed(); // Display a color dialog so user can set font color void cellPaddingSizeChanged(int size); // Change cell padding in the table void verticalAlignmentChanged(int index); // Change the vertical alignment. Doesn't currently work. void horizontalAlignmentChanged(int index); // Set horizontal alignment void cellBorderChanged(int index); // Change the type of border in a table void tableLeftMarginChanged(int size); // Set the left margin around a table void tableRightMarginChanged(int size); // Set the right margin around a table void tableTopMarginChanged(int size); // Set the top margin around a table void tableBottomMarginChanged(int size); // Set the bottom margin around a table void cellBorderSizeChanged(int size); // Set the border size void tableMarginUnitChanged(int index); // Called when a table margin unit (i.e. pixel or %) changes. void tableWidthUnitChanged(int index); // Called when a table width unit (i.e. pixel or %) changes. void tableWidthChanged(int size); // Called when a table width changes }; #endif // TABLEPROPERTIESDIALOG_H nixnote2-2.0.2/gui/browserWidgets/tageditor.cpp000066400000000000000000000251761315604104400215560ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "tageditor.h" #include "global.h" #include #include #include #include #include "tagviewer.h" #include "sql/notetable.h" #include "sql/tagtable.h" extern Global global; //******************************************************* //* Constructor //******************************************************* TagEditor::TagEditor(QWidget *parent) : QWidget(parent) { QLOG_TRACE_IN() << typeid(*this).name(); layout = new FlowLayout(this); layout->addWidget(&tagIcon); setLayout(layout); currentLid = 0; newEditorHasFocus = false; QPixmap pix = global.getPixmapResource(":tagIcon"); tagIcon.setPixmap(pix); for (int i=0; iaddWidget(&tags[i]); connect(&tags[i],SIGNAL(closeClicked(QString)), this, SLOT(removeTag(QString))); } connect(&newTag, SIGNAL(focussed(bool)), this, SLOT(newTagFocusLost(bool))); connect(&newTag, SIGNAL(tabPressed()), this, SLOT(newTagTabPressed())); tagNames.clear(); layout->addWidget(&newTag); //delete pix; account = 0; hide(); QLOG_TRACE_OUT() << typeid(*this).name(); } //******************************************************** //* Set the current note lid //******************************************************** void TagEditor::setCurrentLid(qint32 l) { QLOG_TRACE_IN() << typeid(*this).name(); currentLid = l; QLOG_TRACE_OUT() << typeid(*this).name(); } //******************************************************* //* The new tag editor has lost focus. Check for a new tag //******************************************************* void TagEditor::newTagFocusLost(bool focus) { QLOG_TRACE_IN() << typeid(*this).name(); if (focus) { newEditorHasFocus = true; QLOG_TRACE_OUT() << typeid(*this).name(); return; } newEditorHasFocus = false; checkNewTagEditor(); QLOG_TRACE_OUT() << typeid(*this).name(); } //******************************************************* //* Check the new tag editor for a new tag. //******************************************************* bool TagEditor::checkNewTagEditor() { QLOG_TRACE_IN() << typeid(*this).name(); if (newTag.getText().trimmed() != "") { QString name = newTag.getText().trimmed(); for (qint32 i=0; iinvalidate(); QLOG_TRACE_OUT() << typeid(*this).name(); } //******************************************************* //* Reload the tags after a sync //******************************************************* void TagEditor::reloadTags() { QLOG_TRACE_IN() << typeid(*this).name(); NoteTable noteTable(global.db); Note n; noteTable.get(n, currentLid, false, false); QStringList names; QList tagNames; if (n.tagNames.isSet()) tagNames = n.tagNames; for (int i=0; i0) { NoteTable noteTable(global.db); noteTable.removeTag(currentLid, lid, true); } j = i; } if (found && i=0) { tags[tagNames.size()-1].clear(); tags[tagNames.size()-1].setVisible(false); tags[tagNames.size()-1].setMinimumWidth(0); tagNames.removeAt(j); } emit(tagsUpdated()); QLOG_TRACE_OUT() << typeid(*this).name(); } //******************************************************* //* Empty out all tags //******************************************************* void TagEditor::clear() { QLOG_TRACE_IN() << typeid(*this).name(); emptyTags(); tagNames.clear(); layout->invalidate(); QLOG_TRACE_OUT() << typeid(*this).name(); } //******************************************************* //* Hide this window //******************************************************* void TagEditor::hideEvent(QHideEvent* event) { QLOG_TRACE_IN() << typeid(*this).name(); Q_UNUSED(event); // suppress unused tagIcon.hide(); newTag.hide(); for (qint32 i=0; i=0; i--) { tags[i].clear(); tags[i].setMinimumWidth(0); tags[i].setVisible(false); } QLOG_TRACE_OUT() << typeid(*this).name(); } //******************************************************* //* The user pressed "tab". If it is a valid tab we //* add it and reset focus back to this window //******************************************************* void TagEditor::newTagTabPressed() { QLOG_TRACE_IN() << typeid(*this).name(); if (checkNewTagEditor()) newTag.setFocus(); QLOG_TRACE_OUT() << typeid(*this).name(); } void TagEditor::setAccount(qint32 a) { QLOG_TRACE_IN() << typeid(*this).name(); account = a; this->newTag.setAccount(account); QLOG_TRACE_OUT() << typeid(*this).name(); } void TagEditor::reloadIcons() { QLOG_TRACE_IN() << typeid(*this).name(); tagIcon.setPixmap(global.getPixmapResource(":tagIcon")); QLOG_TRACE_OUT() << typeid(*this).name(); } nixnote2-2.0.2/gui/browserWidgets/tageditor.h000066400000000000000000000042051315604104400212110ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef TAGEDITOR_H #define TAGEDITOR_H #include #include #include "tageditornewtag.h" #include "tagviewer.h" #include #include "gui/flowlayout.h" #define MAX_TAGS 100 class TagEditor : public QWidget { Q_OBJECT public: explicit TagEditor(QWidget *parent = 0); void addTag(QString text); void setTags(QStringList names); void getTags(QStringList &names); void clear(); void loadTags(); void setCurrentLid(qint32 l); void setAccount(qint32 a); void tagRenamed(qint32 lid, QString oldName, QString newName); TagEditorNewTag newTag; void reloadIcons(); private: qint32 currentLid; qint32 account; QLabel tagIcon; TagViewer tags[MAX_TAGS]; FlowLayout *layout; QStringList tagNames; void emptyTags(); bool checkNewTagEditor(); bool newEditorHasFocus; signals: void buttonClicked(QString); void tagsUpdated(); void newTagCreated(qint32 lid); public slots: void removeTag(QString text); void newTagFocusLost(bool focus); void newTagTabPressed(); void reloadTags(); protected: void hideEvent(QHideEvent* event); void showEvent(QShowEvent* event); }; #endif // TAGEDITOR_H nixnote2-2.0.2/gui/browserWidgets/tageditornewtag.cpp000066400000000000000000000216661315604104400227640ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "tageditornewtag.h" #include "global.h" #include "sql/tagtable.h" #include #include #include #include #include #include #include extern Global global; //**************************************************** //* Constructor //**************************************************** TagEditorNewTag::TagEditorNewTag(QWidget *parent) : QLineEdit(parent) { QLOG_TRACE_IN() << typeid(*this).name(); account = 0; this->setCursor(Qt::PointingHandCursor); // Setup the note title editor QPalette pal; pal.setColor(backgroundRole(), QPalette::Base); setPalette(pal); this->setFont(global.getGuiFont(font())); inactiveColor = "QLineEdit {background-color: transparent; border-radius: 0px;} "; activeColor = "QLineEdit {border: 1px solid #808080; background-color: white; border-radius: 4px;} "; this->setStyleSheet(inactiveColor); this->setPlaceholderText(tr("Click to add tag...")); connect(this, SIGNAL(textChanged(QString)), this, SLOT(textModified(QString))); // connect(this, SIGNAL(focussed(bool)), this, SLOT(gainedFocus(bool))); completer = new QCompleter(this); //completer->popup()->setItemDelegate(new TagEditorNewTagCompleterPopupDelegate()); connect(completer, SIGNAL(activated(QString)), this, SLOT(mouseCompleterSelection(QString))); loadCompleter(); connect(this, SIGNAL(returnPressed()), this, SLOT(enterPressed())); hide(); QLOG_TRACE_OUT() << typeid(*this).name(); } void TagEditorNewTag::mouseCompleterSelection(QString value) { QLOG_DEBUG() << "Mouse selection completer for tag: " << value; QKeyEvent *event = new QKeyEvent (QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier); QCoreApplication::postEvent (this, event); } void TagEditorNewTag::enterPressed() { QLOG_DEBUG() << "Enter pressed in new tag"; QKeyEvent *event = new QKeyEvent (QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier); QCoreApplication::postEvent (this, event); } //*********************************************************** //* Load the completer with the list of valid tag names //*********************************************************** void TagEditorNewTag::loadCompleter() { QLOG_TRACE_IN() << typeid(*this).name(); QList tagList; TagTable tagTable(global.db); QStringList tagNames; QHash nameTable; QHash completerEntries; tagTable.getAllNames(&nameTable); tagTable.getAllInAccount(tagList, account); completerEntries.clear(); for (qint32 i=0; isetModelSorting(QCompleter::CaseInsensitivelySortedModel); completer->setCaseSensitivity(Qt::CaseInsensitive); #if QT_VERSION >= 0x050000 completer->setFilterMode(Qt::MatchContains); #endif setCompleter(completer); QStringListModel *model; model = (QStringListModel*)(completer->model()); if(model==NULL) model = new QStringListModel(); model->setStringList(tagNames); completer->setModel(model); //completer->popup()->setItemDelegate(new Tag) QLOG_TRACE_OUT() << typeid(*this).name(); } //****************************************************** //* Set the color whe the editor has a good focus //****************************************************** void TagEditorNewTag::setActiveColor() { QLOG_TRACE_IN() << typeid(*this).name(); setStyleSheet(activeColor); QLOG_TRACE_OUT() << typeid(*this).name(); } //******************************************************* //* Focus event. The editor has gained focus //******************************************************* void TagEditorNewTag::focusInEvent(QFocusEvent *e) { QLOG_TRACE_IN() << typeid(*this).name(); this->setCursor(Qt::ArrowCursor); QLineEdit::focusInEvent(e); setStyleSheet(activeColor); emit(focussed(true)); QLOG_TRACE_OUT() << typeid(*this).name(); } //******************************************************* //* Focus event. The editor has lost focus //******************************************************* void TagEditorNewTag::focusOutEvent(QFocusEvent *e) { QLOG_TRACE_IN() << typeid(*this).name(); this->setCursor(Qt::PointingHandCursor); QLineEdit::focusOutEvent(e); setStyleSheet(inactiveColor); emit(focussed(false)); QLOG_TRACE_OUT() << typeid(*this).name(); } //******************************************************* //* The current text has changed //******************************************************* void TagEditorNewTag::textModified(QString text) { QLOG_TRACE_IN() << typeid(*this).name(); if (this->hasFocus()) { QLOG_TRACE_OUT() << typeid(*this).name(); return; } this->blockSignals(true); setText(text); this->blockSignals(false); QLOG_TRACE_OUT() << typeid(*this).name(); } //******************************************************* //* Get the current text. If the text is the default //* text, the n return an empty string. //******************************************************* QString TagEditorNewTag::getText() { QLOG_TRACE_IN() << typeid(*this).name(); QString retval = text().trimmed(); QLOG_TRACE_OUT() << typeid(*this).name(); return retval; } //******************************************************* //* Set the list of valid tags for the completer //******************************************************* void TagEditorNewTag::setTags(QStringList s) { QLOG_TRACE_IN() << typeid(*this).name(); currentTags = s; loadCompleter(); QLOG_TRACE_OUT() << typeid(*this).name(); } //******************************************************* //* Add a new tag to the completer list //******************************************************* void TagEditorNewTag::addTag(QString s) { QLOG_TRACE_IN() << typeid(*this).name(); currentTags.append(s); loadCompleter(); QLOG_TRACE_OUT() << typeid(*this).name(); } //******************************************************* //* Override the event loop. If the user presses "TAB" //* and there is a valid tag entered, we signal the parent //* that a new tag is needed. //******************************************************* bool TagEditorNewTag::event(QEvent *event) { QLOG_TRACE_IN() << typeid(*this).name(); if (event->type() == QEvent::KeyPress) { QKeyEvent *ke = (QKeyEvent*)event; if (ke->key() == Qt::Key_Tab) { if (getText().trimmed() != "") { emit(tabPressed()); QLOG_TRACE_OUT() << typeid(*this).name(); return true; } QLOG_TRACE_OUT() << typeid(*this).name(); return QLineEdit::event(event); } } QLOG_TRACE_OUT() << typeid(*this).name(); return QLineEdit::event(event); } //******************************************************* //* Reset the tag editor to the default text //******************************************************* void TagEditorNewTag::resetText() { QLOG_TRACE_IN() << typeid(*this).name(); blockSignals(true); setText(""); blockSignals(false); QLOG_TRACE_OUT() << typeid(*this).name(); } void TagEditorNewTag::notebookSelectionChanged(qint32 notebook) { QLOG_TRACE_IN() << typeid(*this).name(); account = notebook; loadCompleter(); QLOG_TRACE_OUT() << typeid(*this).name(); } void TagEditorNewTag::setAccount(qint32 account) { QLOG_TRACE_IN() << typeid(*this).name(); this->account = account; loadCompleter(); QLOG_TRACE_OUT() << typeid(*this).name(); } void TagEditorNewTag::keyPressEvent(QKeyEvent * event) { if (event->key() == Qt::Key_Comma) this->enterPressed(); else QLineEdit::keyPressEvent(event); } nixnote2-2.0.2/gui/browserWidgets/tageditornewtag.h000066400000000000000000000037041315604104400224220ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef TAGEDITORNEWTAG_H #define TAGEDITORNEWTAG_H #include #include #include class TagEditorNewTag : public QLineEdit { Q_OBJECT private: QString activeColor; QString inactiveColor; QCompleter *completer; QStringList currentTags; qint32 account; public: explicit TagEditorNewTag(QWidget *parent = 0); QString getText(); void setTags(QStringList s); void resetText(); void addTag(QString s); public slots: void setActiveColor(); void textModified(QString text); // void gainedFocus(bool focus); void notebookSelectionChanged(qint32 notebook); void setAccount(qint32 account); void loadCompleter(); void mouseCompleterSelection(QString); void enterPressed(); void keyPressEvent(QKeyEvent * event); signals: void focussed(bool hasFocus); void tabPressed(); protected: virtual void focusInEvent(QFocusEvent *e); virtual void focusOutEvent(QFocusEvent *e); bool event(QEvent *event); }; #endif // TAGEDITORNEWTAG_H nixnote2-2.0.2/gui/browserWidgets/tagviewer.cpp000066400000000000000000000057741315604104400215730ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "tagviewer.h" #include "global.h" #include #include #include extern Global global; TagViewer::TagViewer(QWidget *parent) : QLabel(parent) { clearButton = new QToolButton(this); clearButton->setIcon(global.getIconResource(":filecloseIcon")); clearButton->setStyleSheet("QToolButton { border: none; padding: 0px; }"); clearButton->setCursor(Qt::PointingHandCursor); setStyleSheet("QFrame{border: 1px solid darkgray; border-radius: 8px;}"); connect(clearButton, SIGNAL(clicked()), this, SLOT(buttonClicked())); this->setFont(global.getGuiFont(font())); // int width = this->minimumWidth()+clearButton->minimumWidth()+2; // setMinimumWidth(width); // resize(); } //QSize TagViewer::sizeHint() { // QSize size; // size.setWidth(this->minimumWidth()+clearButton->minimumWidth()+2); // size.setHeight(this->minimumHeight()); //} void TagViewer::resizeEvent(QResizeEvent *) { resize(); } //void TagViewer::updateCloseButton(const QString& text) //{ //// clearButton->setVisible(!text.isEmpty()); //} void TagViewer::hideEvent(QHideEvent* event) { Q_UNUSED(event); // suppress unused hide(); clearButton->hide(); } void TagViewer::showEvent(QShowEvent* event) { Q_UNUSED(event); // suppress unused show(); clearButton->show(); } void TagViewer::resize() { QFontMetrics fm(font()); int width = fm.width(text()); // setMaximumWidth(width+sz.width()+2+clearButton->minimumWidth()); // setMinimumWidth(width+sz.width()+2+clearButton->minimumWidth()); int x = width + clearButton->minimumWidth()+20; setMinimumWidth(x); setMinimumWidth(x); int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); #ifndef __WIN32 int height = fm.descent(); clearButton->move(rect().left() + width + frameWidth, (rect().top()- height)/2); #else clearButton->move(rect().left() + width + frameWidth, (rect().top()- (fm.height()/2))/2); #endif } void TagViewer::buttonClicked() { emit(closeClicked(text())); } nixnote2-2.0.2/gui/browserWidgets/tagviewer.h000066400000000000000000000027211315604104400212250ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef TAGVIEWER_H #define TAGVIEWER_H #include #include class TagViewer : public QLabel { Q_OBJECT protected: void resizeEvent(QResizeEvent *); void hideEvent(QHideEvent* event); void showEvent(QShowEvent* event); private: QToolButton *clearButton; public: explicit TagViewer(QWidget *parent = 0); void resize(); signals: void closeClicked(QString); private slots: // void updateCloseButton(const QString &text); void buttonClicked(); }; #endif // TAGVIEWER_H nixnote2-2.0.2/gui/browserWidgets/urleditor.cpp000066400000000000000000000076511315604104400216030ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "urleditor.h" #include "global.h" #include "sql/notetable.h" #include extern Global global; UrlEditor::UrlEditor(QWidget *parent) : QLineEdit(parent) { // Setup the note title editor QPalette pal; //pal.setColor(QPalette::Text, QColor(102,153,255)); //pal.setColor(QPalette::Text, QColor(14,28,209)); pal.setColor(backgroundRole(), QPalette::Base); setPalette(pal); this->setFont(global.getGuiFont(font())); inactiveColor = "QLineEdit {background-color: transparent; border-radius: 0px;} "; activeColor = "QLineEdit {border: 1px solid #808080; background-color: white; border-radius: 4px;} "; this->setCursor(Qt::PointingHandCursor); this->setStyleSheet(inactiveColor); this->setPlaceholderText(tr("Click to set source URL...")); // defaultText = QString(tr("Click to set source URL...")); connect(this, SIGNAL(textChanged(QString)), this, SLOT(textModified(QString))); //this->textModified(defaultText); //connect(this, SIGNAL(focussed(bool)), this, SLOT(gainedFocus(bool))); hide(); } void UrlEditor::setActiveColor() { setStyleSheet(activeColor); } void UrlEditor::setUrl(qint32 lid, QString text) { currentLid = lid; blockSignals(true); setText(text); blockSignals(false); initialText = text; priorText = text; } void UrlEditor::focusInEvent(QFocusEvent *e) { QLineEdit::focusInEvent(e); setStyleSheet(activeColor); this->setCursor(Qt::ArrowCursor); emit(focussed(true)); } void UrlEditor::focusOutEvent(QFocusEvent *e) { QLineEdit::focusOutEvent(e); this->setCursor(Qt::PointingHandCursor); setStyleSheet(inactiveColor); textModified(text()); emit(focussed(false)); } void UrlEditor::textModified(QString text) { if (hasFocus()) return; this->blockSignals(true); NoteTable noteTable(global.db); noteTable.updateUrl(currentLid, text, true); if (text.trimmed() == "" && !hasFocus() && priorText.trimmed() == text.trimmed()) return; else setText(text); this->blockSignals(false); if (text.trimmed() != initialText.trimmed() || priorText.trimmed() != text.trimmed()) emit(textUpdated()); priorText = text; } QString UrlEditor::getText() { return text(); } // Listen for mouse press events. This tells us if // we need to open based on a middle click. void UrlEditor::mouseReleaseEvent(QMouseEvent *e) { if ( e->button() == Qt::MidButton) { if (text().trimmed() != "") { QString url = text().trimmed(); if (!url.toLower().startsWith("http://") && !url.toLower().startsWith("https://") && !url.toLower().startsWith("mailto://") && !url.toLower().startsWith("mailto:") && !url.toLower().startsWith("ftp://") && !url.toLower().startsWith("file://")) url = "http://"+url; QDesktopServices::openUrl(QUrl(url)); } } else QLineEdit::mouseReleaseEvent(e); } nixnote2-2.0.2/gui/browserWidgets/urleditor.h000066400000000000000000000032141315604104400212370ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef URLEDITOR_H #define URLEDITOR_H #include #include class UrlEditor : public QLineEdit { Q_OBJECT private: QString activeColor; QString inactiveColor; // QString defaultText; QString initialText; QString priorText; qint32 currentLid; public: explicit UrlEditor(QWidget *parent = 0); QString getText(); public slots: void setActiveColor(); void textModified(QString text); void setUrl(qint32 lid, QString text); void mouseReleaseEvent(QMouseEvent *e); signals: void focussed(bool hasFocus); void textUpdated(); protected: virtual void focusInEvent(QFocusEvent *e); virtual void focusOutEvent(QFocusEvent *e); }; #endif // URLEDITOR_H nixnote2-2.0.2/gui/datedelegate.cpp000066400000000000000000000033151315604104400171610ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "datedelegate.h" #include #include "global.h" extern Global global; DateDelegate::DateDelegate(QObject *parent) : QStyledItemDelegate(parent) { } QString DateDelegate::displayText(const QVariant &value, const QLocale &locale) const { Q_UNUSED(locale); // suppress unused variable if (value.toLongLong() == 0) return ""; QDateTime timestamp; timestamp.setTime_t(value.toLongLong()/1000); //QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedKingdom)); if (timestamp.date() == QDate::currentDate()) return tr("Today") +" " + timestamp.time().toString(global.timeFormat); return timestamp.toString(global.dateFormat + QString(" ") +global.timeFormat); // return timestamp.toString(Qt::SystemLocaleShortDate); } nixnote2-2.0.2/gui/datedelegate.h000066400000000000000000000023311315604104400166230ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef DATEDELEGATE_H #define DATEDELEGATE_H #include class DateDelegate : public QStyledItemDelegate { Q_OBJECT public: DateDelegate(QObject * parent = 0); QString displayText(const QVariant &value, const QLocale &locale) const; }; #endif // DATEDELEGATE_H nixnote2-2.0.2/gui/externalbrowse.cpp000066400000000000000000000127301315604104400176160ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "externalbrowse.h" #include #include #include "global.h" extern Global global; ExternalBrowse::ExternalBrowse(qint32 lid, QWidget *parent) : QMdiSubWindow(parent) { setAttribute(Qt::WA_QuitOnClose, false); this->setWindowTitle(tr("NixNote")); setWindowIcon(global.getIconResource(":windowIcon")); browser = new NBrowserWindow(this); setWidget(browser); // Setup shortcuts focusTitleShortcut = new QShortcut(this); focusTitleShortcut->setContext(Qt::WidgetShortcut); this->setupShortcut(focusTitleShortcut, "Focus_Title"); connect(focusTitleShortcut, SIGNAL(activated()), &browser->noteTitle, SLOT(setFocus())); focusNoteShortcut = new QShortcut(this); focusNoteShortcut->setContext(Qt::WidgetShortcut); this->setupShortcut(focusNoteShortcut, "Focus_Note"); connect(focusNoteShortcut, SIGNAL(activated()), browser->editor, SLOT(setFocus())); fileSaveShortcut = new QShortcut(this); fileSaveShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(focusNoteShortcut, "File_Save_Content"); connect(fileSaveShortcut, SIGNAL(activated()), browser, SLOT(saveNoteContent())); focusTagShortcut = new QShortcut(this); focusTagShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(focusTagShortcut, "Focus_Tag"); connect(focusTagShortcut, SIGNAL(activated()), browser, SLOT(newTagFocusShortcut())); focusUrlShortcut = new QShortcut(this); focusUrlShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(focusUrlShortcut, "Focus_Url"); connect(focusUrlShortcut, SIGNAL(activated()), browser, SLOT(urlFocusShortcut())); focusAuthorShortcut = new QShortcut(this); focusAuthorShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(focusAuthorShortcut, "Focus_Author"); connect(focusAuthorShortcut, SIGNAL(activated()), browser, SLOT(authorFocusShortcut())); focusNotebookShortcut = new QShortcut(this); focusNotebookShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(focusNotebookShortcut, "Focus_Notebook"); connect(focusNotebookShortcut, SIGNAL(activated()), browser, SLOT(notebookFocusShortcut())); focusFontShortcut = new QShortcut(this); focusFontShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(focusFontShortcut, "Focus_Font"); connect(focusFontShortcut, SIGNAL(activated()), browser, SLOT(fontFocusShortcut())); focusFontSizeShortcut = new QShortcut(this); focusFontSizeShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(focusFontSizeShortcut, "Focus_Font_Size"); connect(focusFontSizeShortcut, SIGNAL(activated()), browser, SLOT(fontSizeFocusShortcut())); findShortcut = new QShortcut(this); findShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(findShortcut, "Edit_Search_Find"); connect(findShortcut, SIGNAL(activated()), browser, SLOT(findShortcut())); findReplaceShortcut = new QShortcut(this); findReplaceShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(findReplaceShortcut, "Edit_Search_Find_Replace"); connect(findReplaceShortcut, SIGNAL(activated()), browser, SLOT(findReplaceShortcut())); findNextShortcut = new QShortcut(this); findNextShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(findNextShortcut, "Edit_Search_Find_Next"); connect(findNextShortcut, SIGNAL(activated()), browser, SLOT(findNextShortcut())); findPrevShortcut = new QShortcut(this); findPrevShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(findPrevShortcut, "Edit_Search_Find_Prev"); connect(findPrevShortcut, SIGNAL(activated()), browser, SLOT(findPrevShortcut())); // Load actual note browser->setContent(lid); } // We don't really close the window, we just hide it. This // solves problems later on if the user wants to re-open the same // note in an external window. void ExternalBrowse::closeEvent(QCloseEvent *closeEvent) { if (this->browser->editor->isDirty) this->browser->saveNoteContent(); this->setVisible(false); closeEvent->ignore(); } void ExternalBrowse::setTitle(QString text) { this->setWindowTitle(tr("NixNote - ") +text); } // Load any shortcut keys void ExternalBrowse::setupShortcut(QShortcut *action, QString text) { if (!global.shortcutKeys->containsAction(&text)) return; QKeySequence key(global.shortcutKeys->getShortcut(&text)); action->setKey(key); } nixnote2-2.0.2/gui/externalbrowse.h000066400000000000000000000035331315604104400172640ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef EXTERNALBROWSE_H #define EXTERNALBROWSE_H #include #include class ExternalBrowse : public QMdiSubWindow { Q_OBJECT private: QShortcut *focusTitleShortcut; QShortcut *focusTagShortcut; QShortcut *focusNoteShortcut; QShortcut *focusUrlShortcut; QShortcut *fileSaveShortcut; QShortcut *focusAuthorShortcut; QShortcut *focusNotebookShortcut; QShortcut *focusFontShortcut; QShortcut *focusFontSizeShortcut; QShortcut *findShortcut; QShortcut *findReplaceShortcut; QShortcut *findNextShortcut; QShortcut *findPrevShortcut; void setupShortcut(QShortcut *shortcut, QString keySequence); public: explicit ExternalBrowse(qint32 lid, QWidget *parent = 0); NBrowserWindow *browser; signals: public slots: void closeEvent(QCloseEvent *closeEvent); void setTitle(QString text); }; #endif // EXTERNALBROWSE_H nixnote2-2.0.2/gui/favoritesview.cpp000066400000000000000000000677441315604104400174660ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "favoritesview.h" #include "global.h" #include "gui/favoritesviewdelegate.h" #include "gui/favoritesviewitem.h" #include "gui/widgetpanel.h" #include "sql/favoritesrecord.h" #include "sql/favoritestable.h" #include "sql/tagtable.h" #include "sql/notebooktable.h" #include "sql/searchtable.h" #include "sql/notetable.h" #include "gui/nnotebookviewitem.h" #include "sql/linkednotebooktable.h" #include "sql/sharednotebooktable.h" #include #include extern Global global; #define NAME_POSITION 0 FavoritesView::FavoritesView(QWidget *parent) : QTreeWidget(parent) { setAcceptDrops(true); setDragEnabled(true); setDropIndicatorShown(true); setSelectionMode(QAbstractItemView::SingleSelection); dataStore.clear(); targetStore.clear(); this->setFont(global.getGuiFont(font())); filterPosition = -1; maxCount = 0; // Highest count of any notebook. Used in calculating column width // setup options this->setEditTriggers(QAbstractItemView::NoEditTriggers); this->setSelectionBehavior(QAbstractItemView::SelectRows); this->setSelectionMode(QAbstractItemView::SingleSelection); this->setDragDropMode(QAbstractItemView::InternalMove); this->setRootIsDecorated(true); this->setSortingEnabled(true); this->header()->setVisible(false); this->setStyleSheet("QTreeView {border-image:none; image:none;} "); root = new FavoritesViewItem(0); root->setData(NAME_POSITION, Qt::UserRole, "root"); root->setData(NAME_POSITION, Qt::DisplayRole, tr("Shortcuts")); QFont rootFont = root->font(NAME_POSITION); rootFont.setBold(true); root->setFont(NAME_POSITION, rootFont); root->setIcon(NAME_POSITION, global.getIconResource(":favoritesIcon")); root->setRootColor(false); expandedImage = new QImage(":expandedIcon"); collapsedImage = new QImage(":collapsedIcon"); this->setAcceptDrops(true); this->setItemDelegate(new FavoritesViewDelegate()); this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); this->setFrameShape(QFrame::NoFrame); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); this->setMinimumHeight(1); this->addTopLevelItem(root); this->rebuildFavoritesTreeNeeded = true; this->loadData(); context.addSeparator(); deleteAction = context.addAction(tr("Remove from shortcuts")); deleteAction->setShortcut(QKeySequence(Qt::Key_Delete)); deleteShortcut = new QShortcut(this); deleteShortcut->setKey(QKeySequence(Qt::Key_Delete)); deleteShortcut->setContext(Qt::WidgetShortcut); connect(deleteAction, SIGNAL(triggered()), this, SLOT(deleteRequested())); connect(this, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(calculateHeight())); connect(this, SIGNAL(itemCollapsed(QTreeWidgetItem*)), this, SLOT(calculateHeight())); connect(this, SIGNAL(itemSelectionChanged()), this, SLOT(buildSelection())); connect(deleteShortcut, SIGNAL(activated()), this, SLOT(deleteRequested())); root->setExpanded(true); this->setProperty("animated", false); resetSize(); } // This allows for the tree item to be toggled. If the prior item is selected again // it is deselected. If it is the root item, we don't permit the selection. void FavoritesView::mousePressEvent(QMouseEvent *event) { QModelIndex item = indexAt(event->pos()); bool selected = selectionModel()->isSelected(indexAt(event->pos())); QTreeView::mousePressEvent(event); if (selected && (event->buttons() & Qt::LeftButton)) selectionModel()->select(item, QItemSelectionModel::Deselect); for (int i=0; iselectedItems() .size(); i++) { if (this->selectedIndexes().at(i).data(Qt::UserRole).toString().startsWith("root", Qt::CaseInsensitive)) { if (!root->isExpanded()) root->setExpanded(true); selectionModel()->select(this->selectedIndexes().at(i), QItemSelectionModel::Deselect); } } } void FavoritesView::loadData() { QHashIterator i(dataStore); // Cleanup old items in the tree. We go through // it twice. The first time is to remove children // not in root (i.e. notebooks in a stack). The // second time is to remove items at a root level. while(i.hasNext()) { i.next(); if (i.value() != NULL && i.value()->parent() != root) { i.value()->parent()->removeChild(i.value()); } } i.toFront(); while(i.hasNext()) { i.next(); if (i.value() != NULL) { i.value()->setHidden(true); root->removeChild(i.value()); delete i.value(); dataStore.remove(i.key()); } } // Now start rebuilding the table FavoritesTable ftable(global.db); dataStore.clear(); targetStore.clear(); QList lids; ftable.getAll(lids); QList children; // First pass, we just get the top level ones for (int i=0; isetFlags(item->flags() & ~Qt::ItemIsDropEnabled); item->record.lid = record->lid; item->setData(NAME_POSITION, Qt::UserRole, record->lid); item->record.type = record->type; item->record.target = record->target; item->record.order = record->order; item->setText(NAME_POSITION, record->displayName); switch (record->type) { case FavoritesRecord::Tag : item->setIcon(NAME_POSITION, global.getIconResource(":tagIcon")); break; case FavoritesRecord::Note : item->setIcon(NAME_POSITION, global.getIconResource(":newNoteIcon")); break; case FavoritesRecord::ConflictNotebook : item->setIcon(NAME_POSITION, global.getIconResource(":notebookConflictIcon")); break; case FavoritesRecord::LinkedNotebook : item->setIcon(NAME_POSITION, global.getIconResource(":notebookLinkedIcon")); break; case FavoritesRecord::LinkedStack : item->setIcon(NAME_POSITION, global.getIconResource(":silhouetteIcon")); break; case FavoritesRecord::LocalNotebook : item->setIcon(NAME_POSITION, global.getIconResource(":locaNotebookIcon")); break; case FavoritesRecord::Search : item->setIcon(NAME_POSITION, global.getIconResource(":searchIcon")); break; case FavoritesRecord::SharedNotebook : item->setIcon(NAME_POSITION, global.getIconResource(":notebookSharedIcon")); break; case FavoritesRecord::SynchronizedNotebook : item->setIcon(NAME_POSITION, global.getIconResource(":notebookSmallIcon")); break; case FavoritesRecord::NotebookStack : item->setIcon(NAME_POSITION, global.getIconResource(":stackIcon")); break; } dataStore.insert(record->lid, item); if (record->target.toInt() > 0) targetStore.insert(record->target.toInt(), item); parent->addChild(item); } void FavoritesView::calculateHeight() { int h = 0; int topLevelCount = topLevelItemCount(); for(int i = 0;i < topLevelCount;i++) { QTreeWidgetItem * item = topLevelItem(i); h += calculateHeightRec(item); h += item->sizeHint(0).height() + 5; } if(h != 0) { setMinimumHeight(h); setMaximumHeight(h); } this->setMaximumWidth(this->sizeHint().width()); } int FavoritesView::calculateHeightRec(QTreeWidgetItem * item) { if(!item) return 0; QModelIndex index = indexFromItem(item); if(!item->isExpanded()) { return rowHeight(index); } int h = item->sizeHint(0).height() +rowHeight(index); int childCount = item->childCount(); for(int i = 0; i < childCount;i++) { h += calculateHeightRec(item->child(i)); } return h; } void FavoritesView::resetSize() { calculateHeight(); } QSize FavoritesView::sizeHint() { return QTreeView::sizeHint(); } void FavoritesView::contextMenuEvent(QContextMenuEvent *event) { QList items = selectedItems(); if (items.size() == 0) { deleteAction->setEnabled(false); } else { deleteAction->setEnabled(true); } context.exec(event->globalPos()); } void FavoritesView::drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const { if (!index.child(0,0).isValid()) return; painter->save(); if (isExpanded(index)) { int offset = rect.width()-expandedImage->width()-1; int voffset = (rect.height() - expandedImage->height()) / 2; painter->drawImage(offset, rect.y()+voffset,*expandedImage); } else { int offset = rect.width()-collapsedImage->width()-1; int voffset = (rect.height() - collapsedImage->height()) / 2; painter->drawImage(offset, rect.y()+voffset,*collapsedImage); } painter->restore(); return; } // Implement of dropEvent so dropMimeData gets called void FavoritesView::dropEvent(QDropEvent *event) { QTreeView::dropEvent(event); const QMimeData* data = event->mimeData(); QModelIndex droppedIndex = indexAt( event->pos() ); if (!droppedIndex.isValid()) return; int row = droppedIndex.row(); qint32 lid = 0; if (data->hasFormat("application/x-nixnote-tag")) { QByteArray d = data->data("application/x-nixnote-tag"); lid = d.trimmed().toInt(); addRecord(lid, FavoritesRecord::Tag, row); } if (data->hasFormat("application/x-nixnote-note")) { QByteArray d = data->data("application/x-nixnote-note"); lid = d.trimmed().toInt(); addRecord(lid, FavoritesRecord::Note, row); } if (data->hasFormat("application/x-nixnote-search")) { QByteArray d = data->data("application/x-nixnote-search"); lid = d.trimmed().toInt(); addRecord(lid, FavoritesRecord::Search, row); } if (data->hasFormat("application/x-nixnote-favorite")) { QByteArray d = data->data("application/x-nixnote-favorite"); lid = d.trimmed().toInt(); FavoritesTable ftable(global.db); FavoritesRecord rec; if (ftable.get(rec,lid)) { ftable.expunge(lid); rec.order = row; ftable.insert(rec); } } if (data->hasFormat("application/x-nixnote-notebook")) { QString d = data->data("application/x-nixnote-notebook"); int pos = d.indexOf("/"); if (pos == -1) return; int type = d.mid(0,pos).toInt(); d = d.mid(pos+1); pos = d.indexOf("/"); if (pos == -1) return; lid= d.mid(0,pos).toInt(); QString stack = d.mid(pos+1); FavoritesRecord::FavoritesRecordType rectype = FavoritesRecord::LocalNotebook; switch (type) { case NNotebookViewItem::Local : rectype = FavoritesRecord::LocalNotebook; break; case NNotebookViewItem::Synchronized : rectype = FavoritesRecord::SynchronizedNotebook; break; case NNotebookViewItem::LinkedStack : rectype = FavoritesRecord::LinkedStack; break; case NNotebookViewItem::Conflict : rectype = FavoritesRecord::ConflictNotebook; break; case NNotebookViewItem::Stack : rectype = FavoritesRecord::NotebookStack; break; case NNotebookViewItem::Shared: rectype = FavoritesRecord::SharedNotebook; break; case NNotebookViewItem::Linked : rectype = FavoritesRecord::LinkedNotebook; break; } if (lid > 0) addRecord(lid, rectype, row); else { FavoritesTable table(global.db); FavoritesRecord record; record.type = rectype; record.target= stack; record.lid = 0; record.order = row; record.parent = 0; qint32 newLid = table.insert(record); QList lids; NotebookTable ntable(global.db); ntable.findByStack(lids, stack); for (int i=0; iloadData(); } void FavoritesView::addRecord(qint32 lid, FavoritesRecord::FavoritesRecordType t, int row) { FavoritesTable table(global.db); FavoritesRecord record; record.type = t; record.target= lid; record.lid = 0; if (row < 0) row = root->childCount(); record.order = row; record.parent = 0; table.insert(record); } void FavoritesView::mouseMoveEvent(QMouseEvent *event) { if (currentItem() == NULL) return; if (!(event->buttons() & Qt::LeftButton)) return; QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; mimeData->setData("application/x-nixnote-favorite", currentItem()->data(NAME_POSITION, Qt::UserRole).toByteArray()); drag->setMimeData(mimeData); drag->exec(Qt::MoveAction); } // Drag event. Determine if dragging is even possible void FavoritesView::dragEnterEvent(QDragEnterEvent *event) { // Check that we are dropping proper data and that it has a proper lid or stack type if (event->mimeData()->hasFormat("application/x-nixnote-tag")) { if (event->mimeData()->data("application/x-nixnote-tag").trimmed().toInt() > 0) event->accept(); else event->ignore(); return; } if (event->mimeData()->hasFormat("application/x-nixnote-note")) { if (event->mimeData()->data("application/x-nixnote-note").trimmed().toInt() > 0) event->accept(); else event->ignore(); return; } if (event->mimeData()->hasFormat("application/x-nixnote-search")) { if (event->mimeData()->data("application/x-nixnote-search").trimmed().toInt() > 0) event->accept(); else event->ignore(); return; } if (event->mimeData()->hasFormat("application/x-nixnote-notebook")) { QLOG_DEBUG() << event->mimeData()->data("application/x-nixnote-notebook").trimmed(); if (event->mimeData()->data("application/x-nixnote-notebook").trimmed() != "") event->accept(); else event->ignore(); return; } if (event->mimeData()->hasFormat("application/x-nixnote-favorite")) { event->accept(); return; } event->ignore(); } // Accept the drag move event if possible void FavoritesView::dragMoveEvent(QDragMoveEvent *event) { if (event->mimeData()->hasFormat("application/x-nixnote-favorites")) { if (event->answerRect().intersects(childrenRect())) event->acceptProposedAction(); return; } WidgetPanel *parent = (WidgetPanel*)parentWidget(); parent->dragMoveHandler(event); } // Remove one of the favorites. Any children will be removed automatically void FavoritesView::deleteRequested() { QList items = selectedItems(); if (items[0] == root) return; qint32 lid = items[0]->data(NAME_POSITION, Qt::UserRole).toInt(); if (global.confirmDeletes()) { QMessageBox msgBox; msgBox.setIcon(QMessageBox::Question); msgBox.setText(tr("Are you sure you want to remove this shortcut?")); msgBox.setWindowTitle(tr("Verify Delete")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::No); int ret = msgBox.exec(); if (ret == QMessageBox::No) return; } FavoritesTable s(global.db); s.expunge(lid); items[0]->setHidden(true); for (int i=items[0]->childCount()-1; i>=0; i--) { FavoritesViewItem *child = (FavoritesViewItem*)items[0]->child(i); child->setHidden(true); child->parent()->removeChild(child); child = dataStore.take(child->record.lid); if (child != NULL) { targetStore.remove(child->record.target.toInt()); delete child; } } FavoritesViewItem *parent = (FavoritesViewItem*)items[0]->parent(); parent->removeChild(items[0]); FavoritesViewItem *item = dataStore.take(lid); if (item != NULL) { targetStore.remove(item->record.target.toInt()); delete item; } if (parent != root) { if (parent->childCount() == 0) { root->removeChild(parent); parent = dataStore.take(parent->record.lid); if (parent != NULL) { targetStore.remove(parent->record.target.toInt()); delete parent; } } } resetSize(); } //************************************************************* // This function is called when a user selects something // within this tree. It also emits a signal that will // be picked up by the main nixnote program. //************************************************************* void FavoritesView::buildSelection() { QLOG_TRACE() << "Inside FavoritesView::buildSelection()"; QList selectedItems = this->selectedItems(); // First, find out if we're already viewing history. If we are we // chop off the end of the history & start a new one if (global.filterPosition+1 < global.filterCriteria.size()) { while (global.filterPosition+1 < global.filterCriteria.size()) global.filterCriteria.removeLast(); } filterPosition++; FilterCriteria *newFilter = new FilterCriteria(); global.filterCriteria.push_back(newFilter); global.filterPosition++; if (selectedItems.size() > 0) { qint32 lid = selectedItems[0]->data(NAME_POSITION, Qt::UserRole).toInt(); if (lid>0) { newFilter->setFavorite(lid); FavoritesViewItem *item = (FavoritesViewItem*)selectedItems[0]; if (item->record.type == FavoritesRecord::Note) { newFilter->setLid(item->record.target.toInt()); } if (item->record.type == FavoritesRecord::Search) { SavedSearch search; SearchTable table(global.db); QLOG_DEBUG() << item->record.target.toInt(); table.get(search, item->record.target.toInt()); if (search.query.isSet()) newFilter->setSearchString(search.query); } } } newFilter->resetAttribute = true; newFilter->resetDeletedOnly = true; newFilter->resetNotebook =true; newFilter->resetTags = true; newFilter->resetSavedSearch = true; newFilter->resetSearchString = true; newFilter->resetSelectedNotes = true; emit updateSelectionRequested(); QLOG_TRACE() << "Leaving FavoritesView::buildSelection()"; } //************************************************************* // This function is called from the main NixNote class. // it will reset the items which are selected based upon // what the user did somewhere else (outside this widget). //************************************************************* void FavoritesView::updateSelection() { blockSignals(true); FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; if (global.filterPosition != filterPosition) { QList selectedItems = this->selectedItems(); for (int i=0; isetSelected(false); } } if (criteria->isFavoriteSet()) { dataStore[criteria->getFavorite()]->setSelected(true); } filterPosition = global.filterPosition; blockSignals(false); } // An item was rename void FavoritesView::itemRenamed(qint32 lid, QString oldName, QString newName) { Q_UNUSED(oldName); if (targetStore.contains(lid)) { FavoritesViewItem *item = targetStore[lid]; item->setText(NAME_POSITION, newName); item->record.displayName = newName; FavoritesTable ftable(global.db); ftable.add(item->record); repaint(); } } // Update the total counts for the shortcut. *** UNUSED *** void FavoritesView::updateTotals(qint32 lid, qint32 subTotal, qint32 total) { subTotal = -1; maxCount = -1; return; // This is terribly inefficient, but we shouldn't need to do it too often. // We look for a key in the targetStore. if (targetStore.contains(lid)) { FavoritesViewItem *item = targetStore[lid]; if (item == NULL) return; item->subTotal = subTotal; item->total = total; if (total > maxCount) maxCount = total; } repaint(); } void FavoritesView::itemExpunged(qint32 lid, QString name) { itemExpunged(lid); Q_UNUSED(name); } void FavoritesView::itemExpunged(qint32 lid) { if (dataStore[lid] == NULL) return; FavoritesTable s(global.db); s.expunge(lid); dataStore[lid]->setHidden(true); for (int i=dataStore[lid]->childCount()-1; i>=0; i--) { FavoritesViewItem *child = (FavoritesViewItem*)dataStore[lid]->child(i); child->setHidden(true); child->parent()->removeChild(child); child = dataStore.take(child->record.lid); if (child != NULL) { targetStore.remove(child->record.target.toInt()); delete child; } } FavoritesViewItem *parent = (FavoritesViewItem*)dataStore[lid]->parent(); parent->removeChild(dataStore[lid]); FavoritesViewItem *item = dataStore.take(lid); if (item != NULL) delete item; if (parent != root) { if (parent->childCount() == 0) { root->removeChild(parent); parent = dataStore.take(parent->record.lid); if (parent != NULL) { targetStore.remove(parent->record.target.toInt()); delete parent; } } } resetSize(); } void FavoritesView::stackRenamed(QString oldName, QString newName) { FavoritesTable ftable(global.db); QList lids; ftable.getAll(lids); for (int i=0; isetText(NAME_POSITION, newName); return; } } } } void FavoritesView::stackExpunged(QString stackname) { FavoritesTable ftable(global.db); QList lids; ftable.getAll(lids); for (int i=0; isetHidden(true); return; } } } } void FavoritesView::reloadIcons() { root->setIcon(NAME_POSITION, global.getIconResource(":favoritesIcon")); QHash::iterator i; for (i=dataStore.begin(); i!=dataStore.end(); ++i) { FavoritesViewItem *record = i.value(); if (record != NULL) { FavoritesRecord *r = &record->record; if (r != NULL) { switch (r->type) { case FavoritesRecord::Tag : record->setIcon(NAME_POSITION, global.getIconResource(":tagIcon")); break; case FavoritesRecord::Note : record->setIcon(NAME_POSITION, global.getIconResource(":newNoteIcon")); break; case FavoritesRecord::ConflictNotebook : record->setIcon(NAME_POSITION, global.getIconResource(":notebookConflictIcon")); break; case FavoritesRecord::LinkedNotebook : record->setIcon(NAME_POSITION, global.getIconResource(":notebookLinkedIcon")); break; case FavoritesRecord::LinkedStack : record->setIcon(NAME_POSITION, global.getIconResource(":silhouetteIcon")); break; case FavoritesRecord::LocalNotebook : record->setIcon(NAME_POSITION, global.getIconResource(":notebookLocalIcon")); break; case FavoritesRecord::Search : record->setIcon(NAME_POSITION, global.getIconResource(":searchIcon")); break; case FavoritesRecord::SharedNotebook : record->setIcon(NAME_POSITION, global.getIconResource(":notebookSharedIcon")); break; case FavoritesRecord::SynchronizedNotebook : record->setIcon(NAME_POSITION, global.getIconResource(":notebookSmallIcon")); break; case FavoritesRecord::NotebookStack : record->setIcon(NAME_POSITION, global.getIconResource(":stackIcon")); break; } } } } } void FavoritesView::updateShortcutName(QString uuid, qint32 lid, QString content) { Q_UNUSED(uuid); this->itemRenamed(lid, "",content); } nixnote2-2.0.2/gui/favoritesview.h000066400000000000000000000056241315604104400171200ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef FAVORITESVIEW_H #define FAVORITESVIEW_H #include #include #include #include #include #include #include #include "gui/favoritesviewitem.h" class FavoritesView : public QTreeWidget { Q_OBJECT private: QImage *collapsedImage; QImage *expandedImage; QAction *deleteAction; QShortcut *deleteShortcut; int maxCount; void addRecord(qint32 lid, FavoritesRecord::FavoritesRecordType type, int row); void buildTreeEntry(FavoritesViewItem *parent, const FavoritesRecord *record); private slots: int calculateHeightRec(QTreeWidgetItem * item); void calculateHeight(); void updateShortcutName(QString uuid, qint32 lid, QString content); public: explicit FavoritesView(QWidget *parent = 0); virtual void mousePressEvent(QMouseEvent *event); int filterPosition; FavoritesViewItem *root; QMenu context; void resetSize(); void updateSelection(); void loadData(); bool rebuildFavoritesTreeNeeded; void contextMenuEvent(QContextMenuEvent *event); QHash dataStore; QHash targetStore; QSize sizeHint(); void dropEvent(QDropEvent *event); void drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const; void mouseMoveEvent(QMouseEvent *event); void dragEnterEvent(QDragEnterEvent *event); void dragMoveEvent(QDragMoveEvent *event); void reloadIcons(); signals: void updateSelectionRequested(); void updateCounts(); public slots: void deleteRequested(); void itemRenamed(qint32 lid, QString oldName, QString newName); void buildSelection(); void updateTotals(qint32 lid, qint32 subTotal, qint32 total); void itemExpunged(qint32 lid); void itemExpunged(qint32 lid, QString name); void stackExpunged(QString stackname); void stackRenamed(QString oldName, QString newName); }; #endif // FAVORITESVIEW_H nixnote2-2.0.2/gui/favoritesviewdelegate.cpp000066400000000000000000000064351315604104400211470ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "favoritesviewdelegate.h" #include "gui/favoritesview.h" #include "gui/favoritesviewitem.h" #include "global.h" extern Global global; FavoritesViewDelegate::FavoritesViewDelegate(QObject *parent) : QStyledItemDelegate(parent) { } QSize FavoritesViewDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { QSize sz=QStyledItemDelegate::sizeHint(option, index); return sz; } void FavoritesViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { #if QT_VERSION < 0x050000 QStyleOptionViewItemV4 options = option; #else QStyleOptionViewItem options = option; #endif initStyleOption(&options, index); options.widget->style()->drawControl(QStyle::CE_ItemViewItem, &options, painter); if (global.countBehavior == Global::CountNone) return; qint32 lid = index.data(Qt::UserRole).toInt(); QString test = index.data(Qt::UserRole).toString().toLower(); if (test == "stack") return; FavoritesView *tree = NULL; FavoritesViewItem *item = NULL; if (lid > 0) { tree = (FavoritesView*)options.widget; item = tree->dataStore[lid]; } else { return; } if (item->record.type == FavoritesRecord::NotebookStack || item->record.type == FavoritesRecord::LinkedStack || item->record.type == FavoritesRecord::Search) return; qint32 total = item->total; qint32 subTotal = item->subTotal; if (total < 0 || subTotal < 0) { return; } QString countString; if (total == subTotal){ countString = QString("(")+QString::number(total) + QString(")"); } else { countString = QString("(")+QString::number(subTotal) + QString("/") + QString::number(total) + QString(")"); } painter->save(); // shift text right to make icon visible QSize iconSize = options.icon.actualSize(options.rect.size()); painter->translate(options.rect.left()+iconSize.width(), options.rect.top()); QRect clip(0, 0, options.rect.width()+iconSize.width(), options.rect.height()); painter->setClipRect(clip); QFont f = options.font; f.setBold(false); painter->setFont(f); painter->setPen(Qt::darkGray); //painter->drawText(6+fm.width(index.data().toString()+QString(" ")),fm.ascent(),countString); painter->restore(); } nixnote2-2.0.2/gui/favoritesviewdelegate.h000066400000000000000000000026331315604104400206100ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef FAVORITESVIEWDELEGATE_H #define FAVORITESVIEWDELEGATE_H #include class FavoritesViewDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit FavoritesViewDelegate(QObject *parent = 0); QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; signals: public slots: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; }; #endif // FAVORITESVIEWDELEGATE_H nixnote2-2.0.2/gui/favoritesviewitem.cpp000066400000000000000000000031361315604104400203260ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "favoritesviewitem.h" FavoritesViewItem::FavoritesViewItem(QTreeWidget* parent):QTreeWidgetItem(parent){ total=0; subTotal=0; } FavoritesViewItem::FavoritesViewItem():QTreeWidgetItem(){} bool FavoritesViewItem::operator<(const QTreeWidgetItem &other)const { int column = treeWidget()->sortColumn(); FavoritesViewItem *i = (FavoritesViewItem*)&other; if (record.order != i->record.order) return record.order < i->record.order; return text(column).toLower() < other.text(column).toLower(); } void FavoritesViewItem::setRootColor(bool val) { if (val) { QFont f; f.setBold(true); setFont(0, f); } } nixnote2-2.0.2/gui/favoritesviewitem.h000066400000000000000000000026241315604104400177740ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef FAVORITESVIEWITEM_H #define FAVORITESVIEWITEM_H #include #include "sql/favoritesrecord.h" class FavoritesViewItem : public QTreeWidgetItem { public: explicit FavoritesViewItem(QTreeWidget* parent); explicit FavoritesViewItem(); void setRootColor(bool value); FavoritesRecord record; qint32 total; qint32 subTotal; bool operator<(const QTreeWidgetItem &other)const; signals: public slots: }; #endif // FAVORITESVIEWITEM_H nixnote2-2.0.2/gui/findreplace.cpp000066400000000000000000000106471315604104400170330ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "findreplace.h" #include #include #include #include #include #include "global.h" extern Global global; FindReplace::FindReplace(QWidget *parent) : QWidget(parent) { QHBoxLayout *layout = new QHBoxLayout(); this->setLayout(layout); findLine = new QLineEdit(this); closeButton = new QPushButton(this); closeButton->setIcon(global.getIconResource(":filecloseIcon")); closeButton->setStyleSheet("border:none;"); connect(closeButton, SIGNAL(clicked()), this, SLOT(hide())); findLine->setMaximumWidth(300); nextButton = new QPushButton(tr("Next")); prevButton = new QPushButton(tr("Previous")); caseSensitive = new QCheckBox(tr("Match case")); QSpacerItem *spacer = new QSpacerItem(this->width()/3,findLine->height(), QSizePolicy::MinimumExpanding); replaceLine = new QLineEdit(); replaceLine = new QLineEdit(); replaceLine->setMaximumWidth(300); replaceButton = new QPushButton(tr("Replace"), this); replaceAllButton = new QPushButton(tr("Replace all"),this); QVBoxLayout *closeLayout = new QVBoxLayout(); closeLayout->addWidget(closeButton); QLabel *closeSpacer = new QLabel(this); closeLayout->addWidget(closeSpacer); QVBoxLayout *lineLayout = new QVBoxLayout(); lineLayout->addWidget(findLine); lineLayout->addWidget(replaceLine); QVBoxLayout *button1Layout = new QVBoxLayout(); button1Layout->addWidget(nextButton); button1Layout->addWidget(replaceButton); QVBoxLayout *button2Layout = new QVBoxLayout(); button2Layout->addWidget(prevButton); button2Layout->addWidget(replaceAllButton); QVBoxLayout *checkLayout = new QVBoxLayout(); checkLayout->addWidget(caseSensitive); checkLayout->addSpacerItem(spacer); layout->addLayout(closeLayout); layout->addLayout(lineLayout); layout->addLayout(button1Layout); layout->addLayout(button2Layout); layout->addLayout(checkLayout); nextButton->setDisabled(true); prevButton->setDisabled(true); replaceButton->setDisabled(true); replaceAllButton->setDisabled(true); caseSensitive->setDisabled(true); connect(findLine, SIGNAL(textChanged(QString)), this, SLOT(textChanged())); connect(replaceLine, SIGNAL(textChanged(QString)), this, SLOT(textChanged())); this->hide(); } void FindReplace::showFind() { replaceLine->hide(); replaceButton->hide(); replaceAllButton->hide(); caseSensitive->hide(); if (isHidden()) { show(); this->findLine->setFocus(); this->findLine->selectAll(); } } void FindReplace::showFindReplace() { replaceLine->show(); replaceButton->show(); replaceAllButton->show(); caseSensitive->show(); if (isHidden()) show(); } void FindReplace::textChanged() { nextButton->setDisabled(true); prevButton->setDisabled(true); replaceButton->setDisabled(true); replaceAllButton->setDisabled(true); caseSensitive->setDisabled(true); if (findLine->text().trimmed() != "") { nextButton->setDisabled(false); prevButton->setDisabled(false); replaceButton->setDisabled(false); replaceAllButton->setDisabled(false); caseSensitive->setDisabled(false); } } QWebPage::FindFlags FindReplace::getCaseSensitive() { QWebPage::FindFlags ff; ff = QWebPage::HighlightAllOccurrences; ff = 0; if (caseSensitive->isChecked()) ff = ff | QWebPage::FindCaseSensitively; return ff; } nixnote2-2.0.2/gui/findreplace.h000066400000000000000000000031561315604104400164750ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef FINDREPLACE_H #define FINDREPLACE_H #include #include #include #include #include #include class FindReplace : public QWidget { Q_OBJECT public: explicit FindReplace(QWidget *parent = 0); void showFind(); void showFindReplace(); QLineEdit *findLine; QPushButton *closeButton; QPushButton *nextButton; QPushButton *prevButton; QPushButton *replaceButton; QPushButton *replaceAllButton; QLineEdit *replaceLine; QCheckBox *caseSensitive; QWebPage::FindFlags getCaseSensitive(); signals: public slots: void textChanged(); }; #endif // FINDREPLACE_H nixnote2-2.0.2/gui/flowlayout.cpp000066400000000000000000000140631315604104400167600ustar00rootroot00000000000000#include "flowlayout.h" #include "global.h" /**************************************************************************** ** ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor ** the names of its contributors may be used to endorse or promote ** products derived from this software without specific prior written ** permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** $QT_END_LICENSE$ ** ****************************************************************************/ #include FlowLayout::FlowLayout(QWidget *parent, int margin, int hSpacing, int vSpacing) : QLayout(parent), m_hSpace(hSpacing), m_vSpace(vSpacing) { setContentsMargins(margin, margin, margin, margin); } FlowLayout::FlowLayout(int margin, int hSpacing, int vSpacing) : m_hSpace(hSpacing), m_vSpace(vSpacing) { setContentsMargins(margin, margin, margin, margin); } FlowLayout::~FlowLayout() { QLayoutItem *item; while ((item = takeAt(0))) delete item; } void FlowLayout::addItem(QLayoutItem *item) { itemList.append(item); } void FlowLayout::insertWidget(int index, QWidget *widget) { itemList.insert(index, new QWidgetItem(widget)); } int FlowLayout::horizontalSpacing() const { if (m_hSpace >= 0) { return m_hSpace; } else { return smartSpacing(QStyle::PM_LayoutHorizontalSpacing); } } int FlowLayout::verticalSpacing() const { if (m_vSpace >= 0) { return m_vSpace; } else { return smartSpacing(QStyle::PM_LayoutVerticalSpacing); } } int FlowLayout::count() const { return itemList.size(); } QLayoutItem *FlowLayout::itemAt(int index) const { return itemList.value(index); } QLayoutItem *FlowLayout::takeAt(int index) { if (index >= 0 && index < itemList.size()) return itemList.takeAt(index); else return 0; } Qt::Orientations FlowLayout::expandingDirections() const { return 0; } bool FlowLayout::hasHeightForWidth() const { return true; } int FlowLayout::heightForWidth(int width) const { int height = doLayout(QRect(0, 0, width, 0), true); return height; } void FlowLayout::setGeometry(const QRect &rect) { QLayout::setGeometry(rect); doLayout(rect, false); } QSize FlowLayout::sizeHint() const { return minimumSize(); } QSize FlowLayout::minimumSize() const { QSize size; QLayoutItem *item=NULL; foreach (item, itemList) { if (item->widget()->isVisible()) size = size.expandedTo(item->minimumSize()); } if (item != NULL) { size = item->minimumSize(); size += QSize(2*margin(), 2*margin()); } return size; } int FlowLayout::doLayout(const QRect &rect, bool testOnly) const { int left, top, right, bottom; getContentsMargins(&left, &top, &right, &bottom); QRect effectiveRect = rect.adjusted(+left, +top, -right, -bottom); int x = effectiveRect.x(); int y = effectiveRect.y(); int lineHeight = 0; QLayoutItem *item; foreach (item, itemList) { QWidget *wid = item->widget(); int spaceX = horizontalSpacing(); if (!wid->isVisible()) spaceX = 0; if (spaceX == -1) spaceX = wid->style()->layoutSpacing( QSizePolicy::PushButton, QSizePolicy::PushButton, Qt::Horizontal); int spaceY = verticalSpacing(); if (spaceY == -1) spaceY = wid->style()->layoutSpacing( QSizePolicy::PushButton, QSizePolicy::PushButton, Qt::Vertical); int nextX = x + item->sizeHint().width() + spaceX; if (nextX - spaceX > effectiveRect.right() && lineHeight > 0) { x = effectiveRect.x(); y = y + lineHeight + spaceY; nextX = x + item->sizeHint().width() + spaceX; lineHeight = 0; } if (!testOnly) item->setGeometry(QRect(QPoint(x, y), item->sizeHint())); x = nextX; lineHeight = qMax(lineHeight, item->sizeHint().height()); } return y + lineHeight - rect.y() + bottom; } int FlowLayout::smartSpacing(QStyle::PixelMetric pm) const { QObject *parent = this->parent(); if (!parent) { return -1; } else if (parent->isWidgetType()) { QWidget *pw = static_cast(parent); return pw->style()->pixelMetric(pm, 0, pw); } else { return static_cast(parent)->spacing(); } } nixnote2-2.0.2/gui/flowlayout.h000066400000000000000000000061431315604104400164250ustar00rootroot00000000000000#ifndef FLOWLAYOUT_H #define FLOWLAYOUT_H #include /**************************************************************************** ** ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor ** the names of its contributors may be used to endorse or promote ** products derived from this software without specific prior written ** permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #include #include class FlowLayout : public QLayout { public: FlowLayout(QWidget *parent, int margin = -1, int hSpacing = -1, int vSpacing = -1); FlowLayout(int margin = -1, int hSpacing = -1, int vSpacing = -1); ~FlowLayout(); void addItem(QLayoutItem *item); void insertWidget(int index, QWidget *widget); int horizontalSpacing() const; int verticalSpacing() const; Qt::Orientations expandingDirections() const; bool hasHeightForWidth() const; int heightForWidth(int) const; int count() const; QLayoutItem *itemAt(int index) const; QSize minimumSize() const; void setGeometry(const QRect &rect); QSize sizeHint() const; QLayoutItem *takeAt(int index); private: int doLayout(const QRect &rect, bool testOnly) const; int smartSpacing(QStyle::PixelMetric pm) const; QList itemList; int m_hSpace; int m_vSpace; }; #endif // FLOWLAYOUT_H nixnote2-2.0.2/gui/imagedelegate.cpp000066400000000000000000000044751315604104400173360ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "imagedelegate.h" #include #include ImageDelegate::ImageDelegate() { } QString ImageDelegate::displayText(const QVariant &value, const QLocale &locale) const { Q_UNUSED(locale); // suppress unused variable Q_UNUSED(value); return ""; } void ImageDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyledItemDelegate::paint(painter,option, index); QString filename = index.data().toString(); if(filename != "") { #if QT_VERSION < 0x050000 QStyleOptionViewItemV4 options = option; #else QStyleOptionViewItem options = option; #endif initStyleOption(&options, index); QImage image(filename); if (image.isNull()) return; painter->save(); QSize imageSize = options.icon.actualSize(options.rect.size()); imageSize.scale(imageSize.width(), imageSize.height(), Qt::KeepAspectRatioByExpanding); painter->translate(options.rect.left() + imageSize.width(), options.rect.top()); QPixmap pix = QPixmap::fromImage(image); pix = pix.scaledToHeight(options.rect.height(), Qt::SmoothTransformation); if (pix.width() > options.rect.width()) pix = pix.scaledToWidth(options.rect.width(), Qt::SmoothTransformation); painter->drawPixmap(0,0,pix); painter->restore(); } } nixnote2-2.0.2/gui/imagedelegate.h000066400000000000000000000024451315604104400167760ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef IMAGEDELEGATE_H #define IMAGEDELEGATE_H #include class ImageDelegate : public QStyledItemDelegate { public: ImageDelegate(); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QString displayText(const QVariant &value, const QLocale &locale) const; }; #endif // IMAGEDELEGATE_H nixnote2-2.0.2/gui/lineedit.cpp000066400000000000000000000143611315604104400163510ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (c) 2007 Trolltech ASA ** ** Use, modification and distribution is allowed without limitation, ** warranty, liability or support of any kind. ** ****************************************************************************/ #include "lineedit.h" #include #include #include #include "global.h" extern Global global; LineEdit::LineEdit(QWidget *parent) : QLineEdit(parent) { filterPosition = -1; clearButton = new QToolButton(this); QPixmap pixmap(global.getPixmapResource(":fileclose.png")); clearButton->setIcon(QIcon(pixmap)); clearButton->setIconSize(pixmap.size()); clearButton->setCursor(Qt::ArrowCursor); clearButton->setStyleSheet("QToolButton { border: none; padding: 0px; }"); clearButton->hide(); connect(clearButton, SIGNAL(clicked()), this, SLOT(clear())); connect(this, SIGNAL(textChanged(const QString&)), this, SLOT(updateCloseButton(const QString&))); int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); setStyleSheet(QString("QLineEdit { padding-right: %1px; } ").arg(clearButton->sizeHint().width() + frameWidth + 1)); QSize msz = minimumSizeHint(); setMinimumSize(qMax(msz.width(), clearButton->sizeHint().height() + frameWidth * 2 + 2), qMax(msz.height(), clearButton->sizeHint().height() + frameWidth * 2 + 2)); defaultText = QString(tr("Search")); this->setText(defaultText); inactiveColor = "QLineEdit {color: gray; font:italic;} "; activeColor = "QLineEdit {color: black; font:normal;} "; connect(this, SIGNAL(returnPressed()), this, SLOT(buildSelection())); connect(this, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString))); connect(clearButton, SIGNAL(clicked()), this, SLOT(buildSelection())); setStyleSheet(inactiveColor); } void LineEdit::resizeEvent(QResizeEvent *) { QSize sz = clearButton->sizeHint(); int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); clearButton->move(rect().right() - frameWidth - sz.width(), (rect().bottom() + 1 - sz.height())/2); } void LineEdit::updateCloseButton(const QString& text) { clearButton->setVisible(!text.isEmpty()); } //************************************************************* // This function is called when a user selects something // within this tree. It also emits a signal that will // be picked up by the main nixnote program. //************************************************************* void LineEdit::buildSelection() { QLOG_TRACE() << "Inside LineEdit::buildSelection()"; savedText = text().trimmed(); // First, find out if we're already viewing history. If we are we // chop off the end of the history & start a new one if (global.filterPosition+1 < global.filterCriteria.size()) { while (global.filterPosition+1 < global.filterCriteria.size()) global.filterCriteria.removeLast(); } filterPosition++; FilterCriteria *newFilter = new FilterCriteria(); global.filterCriteria.push_back(newFilter); FilterCriteria *oldFilter = global.filterCriteria[global.filterPosition]; global.filterPosition++; newFilter->setSearchString(text()); if (!global.getClearNotebookOnSearch() && oldFilter->isNotebookSet()) newFilter->setNotebook(*oldFilter->getNotebook()); if (!global.getClearTagsOnSearch() && oldFilter->isTagsSet()) { QList items = oldFilter->getTags(); newFilter->setTags(items); } newFilter->resetTags=true; newFilter->resetNotebook=true; newFilter->resetAttribute = true; newFilter->resetFavorite = true; newFilter->resetDeletedOnly = true; newFilter->resetSavedSearch = true; QList oldLids; oldFilter->getSelectedNotes(oldLids); newFilter->setSelectedNotes(oldLids); newFilter->setLid(oldFilter->getLid()); emit updateSelectionRequested(); QLOG_TRACE() << "Leaving LineEdit::buildSelection()"; } //************************************************************* // This function is called from the main NixNote class. // it will reset the items which are selected based upon // what the user did somewhere else (outside this widget). //************************************************************* void LineEdit::updateSelection() { blockSignals(true); FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; // if (criteria->resetSearchString) { // this->blockSignals(true); // this->setText(defaultText); // setStyleSheet(inactiveColor); // this->blockSignals(false); // } if (global.filterPosition != filterPosition) { if (criteria->resetSearchString) { setText(defaultText); setStyleSheet(inactiveColor); } if (criteria->isSearchStringSet()) { setText(criteria->getSearchString()); setStyleSheet(activeColor); } } filterPosition = global.filterPosition; blockSignals(false); } void LineEdit::textChanged(QString text) { this->blockSignals(true); if (text.trimmed() == "" && !hasFocus()) this->setText(defaultText); this->blockSignals(false); if ((text == defaultText || text == "") && savedText != "") { buildSelection(); } } void LineEdit::focusInEvent(QFocusEvent *e) { QLineEdit::focusInEvent(e); if (this->text() == defaultText) { blockSignals(true); setText(""); blockSignals(false); } setStyleSheet(activeColor); // this->setCursor(Qt::ArrowCursor); } void LineEdit::focusOutEvent(QFocusEvent *e) { QLineEdit::focusOutEvent(e); if (this->text().trimmed() == "") { blockSignals(true); setText(defaultText); blockSignals(false); setStyleSheet(inactiveColor); } // this->setCursor(Qt::PointingHandCursor); } // Check if any value is set bool LineEdit::isSet() { if (this->text().trimmed() != defaultText && this->text().trimmed() != "") return true; else return false; } void LineEdit::reloadIcons() { clearButton->setIcon(global.getIconResource(":filecloseIcon")); } nixnote2-2.0.2/gui/lineedit.h000066400000000000000000000021351315604104400160120ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (c) 2007 Trolltech ASA ** ** Use, modification and distribution is allowed without limitation, ** warranty, liability or support of any kind. ** ****************************************************************************/ #ifndef LINEEDIT_H #define LINEEDIT_H #include class QToolButton; class LineEdit : public QLineEdit { Q_OBJECT private: int filterPosition; QString savedText; QString defaultText; QString activeColor; QString inactiveColor; public: LineEdit(QWidget *parent = 0); void updateSelection(); bool isSet(); void reloadIcons(); protected: void resizeEvent(QResizeEvent *); void focusInEvent(QFocusEvent *e); void focusOutEvent(QFocusEvent *e); private slots: void updateCloseButton(const QString &text); void buildSelection(); void textChanged(QString text); private: QToolButton *clearButton; signals: void updateSelectionRequested(); }; #endif // LIENEDIT_H nixnote2-2.0.2/gui/nattributetree.cpp000066400000000000000000000553221315604104400176170ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "nattributetree.h" #include "global.h" #include #include extern Global global; NAttributeTree::NAttributeTree(QWidget *parent) : QTreeWidget(parent) { this->setFont(global.getGuiFont(font())); filterPosition = -1; // setup options this->setEditTriggers(QAbstractItemView::NoEditTriggers); this->setSelectionBehavior(QAbstractItemView::SelectRows); this->setSelectionMode(QAbstractItemView::SingleSelection); this->setRootIsDecorated(true); this->setSortingEnabled(false); this->header()->setVisible(false); //this->setStyleSheet("QTreeWidget { border: none; background-color:transparent; }"); // Build the root item root = new QTreeWidgetItem(this); QIcon icon(":attributes.png"); root->setIcon(0,icon); root->setData(0, Qt::UserRole, "root"); root->setData(0, Qt::DisplayRole, tr("Attributes")); QFont font = root->font(0); font.setBold(true); root->setFont(0,font); this->setMinimumHeight(1); this->addTopLevelItem(root); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); connect(this, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(calculateHeight())); connect(this, SIGNAL(itemCollapsed(QTreeWidgetItem*)), this, SLOT(calculateHeight())); connect(this, SIGNAL(itemSelectionChanged()), this, SLOT(buildSelection())); // Allocate memory for everything needed createdRoot = new QTreeWidgetItem(root); lastUpdatedRoot = new QTreeWidgetItem(root); containsRoot = new QTreeWidgetItem(root); sourceRoot = new QTreeWidgetItem(root); createdSinceRoot = new QTreeWidgetItem(createdRoot); createdSinceToday = new QTreeWidgetItem(createdSinceRoot); createdSinceYesterday = new QTreeWidgetItem(createdSinceRoot); createdSinceThisWeek = new QTreeWidgetItem(createdSinceRoot); createdSinceLastWeek = new QTreeWidgetItem(createdSinceRoot); createdSinceThisMonth = new QTreeWidgetItem(createdSinceRoot); createdSinceLastMonth = new QTreeWidgetItem(createdSinceRoot); createdSinceThisYear = new QTreeWidgetItem(createdSinceRoot); createdSinceLastYear = new QTreeWidgetItem(createdSinceRoot); createdBeforeRoot = new QTreeWidgetItem(createdRoot); createdBeforeToday = new QTreeWidgetItem(createdBeforeRoot); createdBeforeYesterday = new QTreeWidgetItem(createdBeforeRoot); createdBeforeThisWeek = new QTreeWidgetItem(createdBeforeRoot); createdBeforeLastWeek = new QTreeWidgetItem(createdBeforeRoot); createdBeforeThisMonth = new QTreeWidgetItem(createdBeforeRoot); createdBeforeLastMonth = new QTreeWidgetItem(createdBeforeRoot); createdBeforeThisYear = new QTreeWidgetItem(createdBeforeRoot); createdBeforeLastYear = new QTreeWidgetItem(createdBeforeRoot); lastUpdatedSinceRoot = new QTreeWidgetItem(lastUpdatedRoot); lastUpdatedSinceToday = new QTreeWidgetItem(lastUpdatedSinceRoot); lastUpdatedSinceYesterday = new QTreeWidgetItem(lastUpdatedSinceRoot); lastUpdatedSinceThisWeek = new QTreeWidgetItem(lastUpdatedSinceRoot); lastUpdatedSinceLastWeek = new QTreeWidgetItem(lastUpdatedSinceRoot); lastUpdatedSinceThisMonth = new QTreeWidgetItem(lastUpdatedSinceRoot); lastUpdatedSinceLastMonth = new QTreeWidgetItem(lastUpdatedSinceRoot); lastUpdatedSinceThisYear = new QTreeWidgetItem(lastUpdatedSinceRoot); lastUpdatedSinceLastYear = new QTreeWidgetItem(lastUpdatedSinceRoot); lastUpdatedBeforeRoot = new QTreeWidgetItem(lastUpdatedRoot); lastUpdatedBeforeToday = new QTreeWidgetItem(lastUpdatedBeforeRoot); lastUpdatedBeforeYesterday = new QTreeWidgetItem(lastUpdatedBeforeRoot); lastUpdatedBeforeThisWeek = new QTreeWidgetItem(lastUpdatedBeforeRoot); lastUpdatedBeforeLastWeek = new QTreeWidgetItem(lastUpdatedBeforeRoot); lastUpdatedBeforeThisMonth = new QTreeWidgetItem(lastUpdatedBeforeRoot); lastUpdatedBeforeLastMonth = new QTreeWidgetItem(lastUpdatedBeforeRoot); lastUpdatedBeforeThisYear = new QTreeWidgetItem(lastUpdatedBeforeRoot); lastUpdatedBeforeLastYear = new QTreeWidgetItem(lastUpdatedBeforeRoot); containsImages = new QTreeWidgetItem(containsRoot); containsAudio = new QTreeWidgetItem(containsRoot); containsInk = new QTreeWidgetItem(containsRoot); containsEncryptedText = new QTreeWidgetItem(containsRoot); containsToDoItems = new QTreeWidgetItem(containsRoot); containsUnfinishedToDoItems = new QTreeWidgetItem(containsRoot); containsFinishedToDoItems = new QTreeWidgetItem(containsRoot); containsPDFDocument = new QTreeWidgetItem(containsRoot); containsAttachment = new QTreeWidgetItem(containsRoot); containsReminder = new QTreeWidgetItem(containsRoot); containsUncompletedReminder = new QTreeWidgetItem(containsRoot); containsFutureReminder = new QTreeWidgetItem(containsRoot); sourceEmailedToEvernote = new QTreeWidgetItem(sourceRoot); sourceEmail = new QTreeWidgetItem(sourceRoot); sourceWebPage = new QTreeWidgetItem(sourceRoot); sourceMobile = new QTreeWidgetItem(sourceRoot); sourceAnotherApplication = new QTreeWidgetItem(sourceRoot); // Start building selection criteria createdRoot->setText(0, tr("Created")); createdRoot->setData(0, Qt::UserRole, 0); createdSinceRoot->setText(0, tr("Since")); createdSinceRoot->setData(0, Qt::UserRole, 0); createdRoot->addChild(createdSinceRoot); createdSinceToday->setText(0, tr("Today")); createdSinceToday->setData(0, Qt::UserRole, CREATED_SINCE_TODAY); createdSinceRoot->addChild(createdSinceToday); createdSinceYesterday->setText(0, tr("Yesterday")); createdSinceYesterday->setData(0, Qt::UserRole, CREATED_SINCE_YESTERDAY); createdSinceRoot->addChild(createdSinceYesterday); createdSinceThisWeek->setText(0, tr("This week")); createdSinceThisWeek->setData(0, Qt::UserRole, CREATED_SINCE_THIS_WEEK); createdSinceRoot->addChild(createdSinceThisWeek); createdSinceLastWeek->setText(0, tr("Last week")); createdSinceLastWeek->setData(0, Qt::UserRole, CREATED_SINCE_LAST_WEEK); createdSinceRoot->addChild(createdSinceLastWeek); createdSinceThisMonth->setText(0, tr("This Month")); createdSinceThisMonth->setData(0, Qt::UserRole, CREATED_SINCE_THIS_MONTH); createdSinceRoot->addChild(createdSinceThisMonth); createdSinceLastMonth->setText(0, tr("Last Month")); createdSinceLastMonth->setData(0, Qt::UserRole, CREATED_SINCE_LAST_MONTH); createdSinceRoot->addChild(createdSinceLastMonth); createdSinceThisYear->setText(0, tr("This Year")); createdSinceThisYear->setData(0, Qt::UserRole, CREATED_SINCE_THIS_YEAR); createdSinceRoot->addChild(createdSinceThisYear); createdSinceLastYear->setText(0, tr("Last Year")); createdSinceLastYear->setData(0, Qt::UserRole, CREATED_SINCE_LAST_YEAR); createdSinceRoot->addChild(createdSinceLastYear); createdBeforeRoot->setText(0, tr("Before")); createdBeforeRoot->setData(0, Qt::UserRole, 0); createdRoot->addChild(createdBeforeRoot); createdBeforeToday->setText(0, tr("Today")); createdBeforeToday->setData(0, Qt::UserRole, CREATED_BEFORE_TODAY); createdBeforeRoot->addChild(createdBeforeToday); createdBeforeYesterday->setText(0, tr("Yesterday")); createdBeforeYesterday->setData(0, Qt::UserRole, CREATED_BEFORE_YESTERDAY); createdBeforeRoot->addChild(createdBeforeYesterday); createdBeforeThisWeek->setText(0, tr("This week")); createdBeforeThisWeek->setData(0, Qt::UserRole, CREATED_BEFORE_THIS_WEEK); createdBeforeRoot->addChild(createdBeforeThisWeek); createdBeforeLastWeek->setText(0, tr("Last week")); createdBeforeLastWeek->setData(0, Qt::UserRole, CREATED_BEFORE_LAST_WEEK); createdBeforeRoot->addChild(createdBeforeLastWeek); createdBeforeThisMonth->setText(0, tr("This Month")); createdBeforeThisMonth->setData(0, Qt::UserRole, CREATED_BEFORE_THIS_MONTH); createdBeforeRoot->addChild(createdSinceThisMonth); createdBeforeLastMonth->setText(0, tr("Last Month")); createdBeforeLastMonth->setData(0, Qt::UserRole, CREATED_BEFORE_LAST_MONTH); createdBeforeRoot->addChild(createdBeforeLastMonth); createdBeforeThisYear->setText(0, tr("This Year")); createdBeforeThisYear->setData(0, Qt::UserRole, CREATED_BEFORE_THIS_YEAR); createdBeforeRoot->addChild(createdBeforeThisYear); createdBeforeLastYear->setText(0, tr("Last Year")); createdBeforeLastYear->setData(0, Qt::UserRole, CREATED_BEFORE_LAST_YEAR); createdBeforeRoot->addChild(createdBeforeLastYear); //** Start doing the "Last Modified" selection criteria lastUpdatedRoot->setText(0, tr("Last Modified")); lastUpdatedRoot->setData(0, Qt::UserRole, 0); lastUpdatedSinceRoot->setText(0, tr("Since")); lastUpdatedSinceRoot->setData(0, Qt::UserRole, 0); lastUpdatedRoot->addChild(lastUpdatedSinceRoot); lastUpdatedSinceToday->setText(0, tr("Today")); lastUpdatedSinceToday->setData(0, Qt::UserRole, MODIFIED_SINCE_TODAY); lastUpdatedSinceRoot->addChild(lastUpdatedSinceToday); lastUpdatedSinceYesterday->setText(0, tr("Yesterday")); lastUpdatedSinceYesterday->setData(0, Qt::UserRole, MODIFIED_SINCE_YESTERDAY); lastUpdatedSinceRoot->addChild(lastUpdatedSinceYesterday); lastUpdatedSinceThisWeek->setText(0, tr("This week")); lastUpdatedSinceThisWeek->setData(0, Qt::UserRole, MODIFIED_SINCE_THIS_WEEK); lastUpdatedSinceRoot->addChild(lastUpdatedSinceThisWeek); lastUpdatedSinceLastWeek->setText(0, tr("Last week")); lastUpdatedSinceLastWeek->setData(0, Qt::UserRole, MODIFIED_SINCE_LAST_WEEK); lastUpdatedSinceRoot->addChild(lastUpdatedSinceLastWeek); lastUpdatedSinceThisMonth->setText(0, tr("This Month")); lastUpdatedSinceThisMonth->setData(0, Qt::UserRole, MODIFIED_SINCE_THIS_MONTH); lastUpdatedSinceRoot->addChild(lastUpdatedSinceThisMonth); lastUpdatedSinceLastMonth->setText(0, tr("Last Month")); lastUpdatedSinceLastMonth->setData(0, Qt::UserRole, MODIFIED_SINCE_LAST_MONTH); lastUpdatedSinceRoot->addChild(lastUpdatedSinceLastMonth); lastUpdatedSinceThisYear->setText(0, tr("This Year")); lastUpdatedSinceThisYear->setData(0, Qt::UserRole, MODIFIED_SINCE_THIS_YEAR); lastUpdatedSinceRoot->addChild(lastUpdatedSinceThisYear); lastUpdatedSinceLastYear->setText(0, tr("Last Year")); lastUpdatedSinceLastYear->setData(0, Qt::UserRole, MODIFIED_SINCE_LAST_YEAR); lastUpdatedSinceRoot->addChild(lastUpdatedSinceLastYear); lastUpdatedBeforeRoot->setText(0, tr("Before")); lastUpdatedBeforeRoot->setData(0, Qt::UserRole, 0); lastUpdatedRoot->addChild(lastUpdatedBeforeRoot); lastUpdatedBeforeToday->setText(0, tr("Today")); lastUpdatedBeforeToday->setData(0, Qt::UserRole, MODIFIED_BEFORE_TODAY); lastUpdatedBeforeRoot->addChild(lastUpdatedBeforeToday); lastUpdatedBeforeYesterday->setText(0, tr("Yesterday")); lastUpdatedBeforeYesterday->setData(0, Qt::UserRole, MODIFIED_BEFORE_YESTERDAY); lastUpdatedBeforeRoot->addChild(lastUpdatedBeforeYesterday); lastUpdatedBeforeThisWeek->setText(0, tr("This week")); lastUpdatedBeforeThisWeek->setData(0, Qt::UserRole, MODIFIED_BEFORE_THIS_WEEK); lastUpdatedBeforeRoot->addChild(lastUpdatedBeforeThisWeek); lastUpdatedBeforeLastWeek->setText(0, tr("Last week")); lastUpdatedBeforeLastWeek->setData(0, Qt::UserRole, MODIFIED_BEFORE_LAST_WEEK); lastUpdatedBeforeRoot->addChild(lastUpdatedBeforeLastWeek); lastUpdatedBeforeThisMonth->setText(0, tr("This Month")); lastUpdatedBeforeThisMonth->setData(0, Qt::UserRole, MODIFIED_BEFORE_THIS_MONTH); lastUpdatedBeforeRoot->addChild(lastUpdatedBeforeThisMonth); lastUpdatedBeforeLastMonth->setText(0, tr("Last Month")); lastUpdatedBeforeLastMonth->setData(0, Qt::UserRole, MODIFIED_BEFORE_LAST_MONTH); lastUpdatedBeforeRoot->addChild(lastUpdatedBeforeLastMonth); lastUpdatedBeforeThisYear->setText(0, tr("This Year")); lastUpdatedBeforeThisYear->setData(0, Qt::UserRole, MODIFIED_BEFORE_THIS_YEAR); lastUpdatedBeforeRoot->addChild(lastUpdatedBeforeThisYear); lastUpdatedBeforeLastYear->setText(0, tr("Last Year")); lastUpdatedBeforeLastYear->setData(0, Qt::UserRole, MODIFIED_BEFORE_LAST_YEAR); lastUpdatedBeforeRoot->addChild(lastUpdatedBeforeLastYear); //*** Contains selection criteria this->containsRoot->setText(0, tr("Contains")); this->containsRoot->setData(0,Qt::UserRole, 0); this->containsImages->setText(0, tr("Images")); this->containsImages->setData(0, Qt::UserRole, CONTAINS_IMAGES); this->containsRoot->addChild(containsImages); this->containsAudio->setText(0, tr("Audio")); this->containsAudio->setData(0, Qt::UserRole, CONTAINS_AUDIO); this->containsRoot->addChild(containsAudio); this->containsInk->setText(0, tr("Ink")); this->containsInk->setData(0, Qt::UserRole, CONTAINS_INK); this->containsRoot->addChild(containsInk); this->containsEncryptedText->setText(0, tr("Encrypted Text")); this->containsEncryptedText->setData(0, Qt::UserRole, CONTAINS_ENCRYPTED_TEXT); this->containsRoot->addChild(containsEncryptedText); this->containsToDoItems->setText(0, tr("To-do items")); this->containsToDoItems->setData(0, Qt::UserRole, CONTAINS_TODO_ITEMS); this->containsRoot->addChild(containsUnfinishedToDoItems); this->containsUnfinishedToDoItems->setText(0, tr("Unfinished to-do items")); this->containsUnfinishedToDoItems->setData(0, Qt::UserRole, CONTAINS_UNFINISHED_TODO_ITEMS); this->containsRoot->addChild(containsUnfinishedToDoItems); this->containsFinishedToDoItems->setText(0, tr("Finished to-do items")); this->containsFinishedToDoItems->setData(0, Qt::UserRole, CONTAINS_FINISHED_TODO_ITEMS); this->containsRoot->addChild(containsFinishedToDoItems); this->containsPDFDocument->setText(0, tr("PDF document")); this->containsPDFDocument->setData(0, Qt::UserRole, CONTAINS_PDF_DOCUMENT); this->containsRoot->addChild(containsPDFDocument); this->containsAttachment->setText(0, tr("Attachment")); this->containsAttachment->setData(0, Qt::UserRole, CONTAINS_ATTACHMENT); this->containsRoot->addChild(containsAttachment); this->containsReminder->setText(0, tr("Reminder")); this->containsReminder->setData(0, Qt::UserRole, CONTAINS_REMINDER); this->containsRoot->addChild(containsReminder); this->containsUncompletedReminder->setText(0, tr("Uncompleted Reminder")); this->containsUncompletedReminder->setData(0, Qt::UserRole, CONTAINS_UNCOMPLETED_REMINDER); this->containsRoot->addChild(containsUncompletedReminder); this->containsFutureReminder->setText(0, tr("Future Reminder")); this->containsFutureReminder->setData(0, Qt::UserRole, CONTAINS_FUTURE_REMINDER); this->containsRoot->addChild(containsFutureReminder); //*** Source selection criteria this->sourceRoot->setText(0, tr("Source")); this->sourceRoot->setData(0,Qt::UserRole, 0); this->sourceEmailedToEvernote->setText(0, tr("Emailed to Evernote")); this->sourceEmailedToEvernote->setData(0, Qt::UserRole, SOURCE_EMAILED_TO_EVERNOTE); this->sourceRoot->addChild(sourceEmailedToEvernote); this->sourceEmail->setText(0, tr("Email")); this->sourceEmail->setData(0, Qt::UserRole, SOURCE_EMAIL); this->sourceRoot->addChild(sourceEmail); this->sourceWebPage->setText(0, tr("Web page")); this->sourceWebPage->setData(0, Qt::UserRole, SOURCE_WEB_PAGE); this->sourceRoot->addChild(sourceWebPage); this->sourceMobile->setText(0, tr("Mobile")); this->sourceMobile->setData(0, Qt::UserRole, SOURCE_MOBILE); this->sourceRoot->addChild(sourceMobile); this->sourceAnotherApplication->setText(0, tr("Another application")); this->sourceAnotherApplication->setData(0, Qt::UserRole, SOURCE_ANOTHER_APPLICATION); this->sourceRoot->addChild(sourceAnotherApplication); // Add the options to the root root->addChild(createdRoot); root->addChild(lastUpdatedRoot); root->addChild(containsRoot); root->addChild(sourceRoot); root->setExpanded(true); this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); this->setFrameShape(QFrame::NoFrame); expandedImage = new QImage(":expandedIcon"); collapsedImage = new QImage(":collapsedIcon"); this->setProperty("animated", false); } NAttributeTree::~NAttributeTree() { //delete root; } void NAttributeTree::calculateHeight() { int h = 0; int topLevelCount = topLevelItemCount(); for(int i = 0;i < topLevelCount;i++) { QTreeWidgetItem * item = topLevelItem(i); h += calculateHeightRec(item); h += item->sizeHint(0).height() + 5; } if(h != 0) { setMinimumHeight(h); setMaximumHeight(h); } this->setMaximumWidth(this->sizeHint().width()); } int NAttributeTree::calculateHeightRec(QTreeWidgetItem * item) { if(!item) return 0; QModelIndex index = indexFromItem(item); if(!item->isExpanded()) { return rowHeight(index); } int h = item->sizeHint(0).height() + 2 + rowHeight(index); int childCount = item->childCount(); for(int i = 0; ichild(i)); } return h; } void NAttributeTree::resetSize() { calculateHeight(); } //************************************************************* // This function is called when a user selects something // within this tree. It also emits a signal that will // be picked up by the main nixnote program. //************************************************************* void NAttributeTree::buildSelection() { QLOG_TRACE() << "Inside NNotebookView::buildSelection()"; QList selectedItems = this->selectedItems(); if (selectedItems.size() > 0 && selectedItems[0]->data(0,Qt::UserRole) == "root") { blockSignals(true); root->setSelected(false); blockSignals(false); return; } for (int i=0; idata(0, Qt::UserRole) == 0 || item->data(0,Qt::UserRole) == "root") { item->setSelected(false); } } selectedItems = this->selectedItems(); // if (selectedItems.size() == 0) // return; // First, find out if we're already viewing history. If we are we // chop off the end of the history & start a new one if (global.filterPosition+1 < global.filterCriteria.size()) { while (global.filterPosition+1 < global.filterCriteria.size()) global.filterCriteria.removeLast(); } filterPosition++; FilterCriteria *newFilter = new FilterCriteria(); global.filterCriteria.push_back(newFilter); global.filterPosition++; if (selectedItems.size() > 0) { newFilter->setAttribute(*(selectedItems[0])); } newFilter->resetSavedSearch = true; newFilter->resetDeletedOnly = true; newFilter->resetNotebook =true; newFilter->resetTags = true; newFilter->resetAttribute = true; newFilter->resetFavorite = true; newFilter->resetSearchString = true; emit updateSelectionRequested(); QLOG_TRACE() << "Leaving NNotebookView::buildSelection()"; } //************************************************************* // This function is called from the main NixNote class. // it will reset the items which are selected based upon // what the user did somewhere else (outside this widget). //************************************************************* void NAttributeTree::updateSelection() { blockSignals(true); FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; if (global.filterPosition != filterPosition) { QList selectedItems = this->selectedItems(); for (int i=0; iresetAttribute; i++) { selectedItems[i]->setSelected(false); } if (criteria->isAttributeSet()) { criteria->getAttribute()->setSelected(true); } } filterPosition = global.filterPosition; blockSignals(false); } // This allows for the tree item to be toggled. If the prior item is selected again // it is deselected. If it is the root item, we don't permit the selection. void NAttributeTree::mousePressEvent(QMouseEvent *event) { QModelIndex item = indexAt(event->pos()); bool selected = selectionModel()->isSelected(indexAt(event->pos())); QTreeView::mousePressEvent(event); if (selected) selectionModel()->select(item, QItemSelectionModel::Deselect); for (int i=0; iselectedItems() .size(); i++) { if (this->selectedIndexes().at(i).data(Qt::UserRole) == "root") { if (!root->isExpanded()) root->setExpanded(true); selectionModel()->select(this->selectedIndexes().at(i), QItemSelectionModel::Deselect); } } } QSize NAttributeTree::sizeHint() { return QTreeView::sizeHint(); // QSize sz = QTreeView::sizeHint(); // if (root->isExpanded()) // return sz; // QFontMetrics fm(root->font(0));; // int numWidth = fm.width(tr("Attributes")); // sz.setWidth(numWidth+44+root->icon(0).availableSizes().at(0).width()); // Add some extra at the end for totals // return sz; } void NAttributeTree::drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const { if (!index.child(0,0).isValid()) return; painter->save(); if (isExpanded(index)) { int offset = rect.width()-expandedImage->width()-1; int voffset = (rect.height() - expandedImage->height()) / 2; painter->drawImage(offset, rect.y()+voffset,*expandedImage); } else { int offset = rect.width()-collapsedImage->width()-1; int voffset = (rect.height() - collapsedImage->height()) / 2; painter->drawImage(offset, rect.y()+voffset,*collapsedImage); } painter->restore(); return; } void NAttributeTree::reloadIcons() { root->setIcon(0,global.getIconResource(":attributesIcon")); } nixnote2-2.0.2/gui/nattributetree.h000066400000000000000000000135161315604104400172630ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NATTRIBUTETREE_H #define NATTRIBUTETREE_H #include #include #define CREATED_SINCE_TODAY 1 #define CREATED_SINCE_YESTERDAY 2 #define CREATED_SINCE_THIS_WEEK 3 #define CREATED_SINCE_LAST_WEEK 4 #define CREATED_SINCE_THIS_MONTH 5 #define CREATED_SINCE_LAST_MONTH 6 #define CREATED_SINCE_THIS_YEAR 7 #define CREATED_SINCE_LAST_YEAR 8 #define CREATED_BEFORE_TODAY 101 #define CREATED_BEFORE_YESTERDAY 102 #define CREATED_BEFORE_THIS_WEEK 103 #define CREATED_BEFORE_LAST_WEEK 104 #define CREATED_BEFORE_THIS_MONTH 105 #define CREATED_BEFORE_LAST_MONTH 106 #define CREATED_BEFORE_THIS_YEAR 107 #define CREATED_BEFORE_LAST_YEAR 108 #define MODIFIED_SINCE_TODAY 201 #define MODIFIED_SINCE_YESTERDAY 202 #define MODIFIED_SINCE_THIS_WEEK 203 #define MODIFIED_SINCE_LAST_WEEK 204 #define MODIFIED_SINCE_THIS_MONTH 205 #define MODIFIED_SINCE_LAST_MONTH 206 #define MODIFIED_SINCE_THIS_YEAR 207 #define MODIFIED_SINCE_LAST_YEAR 208 #define MODIFIED_BEFORE_TODAY 301 #define MODIFIED_BEFORE_YESTERDAY 302 #define MODIFIED_BEFORE_THIS_WEEK 303 #define MODIFIED_BEFORE_LAST_WEEK 304 #define MODIFIED_BEFORE_THIS_MONTH 305 #define MODIFIED_BEFORE_LAST_MONTH 306 #define MODIFIED_BEFORE_THIS_YEAR 307 #define MODIFIED_BEFORE_LAST_YEAR 308 #define CONTAINS_IMAGES 401 #define CONTAINS_AUDIO 402 #define CONTAINS_INK 403 #define CONTAINS_ENCRYPTED_TEXT 404 #define CONTAINS_TODO_ITEMS 405 #define CONTAINS_UNFINISHED_TODO_ITEMS 406 #define CONTAINS_FINISHED_TODO_ITEMS 407 #define CONTAINS_PDF_DOCUMENT 408 #define CONTAINS_ATTACHMENT 409 #define CONTAINS_REMINDER 410 #define CONTAINS_UNCOMPLETED_REMINDER 411 #define CONTAINS_FUTURE_REMINDER 412 #define SOURCE_EMAILED_TO_EVERNOTE 501 #define SOURCE_EMAIL 502 #define SOURCE_WEB_PAGE 503 #define SOURCE_MOBILE 504 #define SOURCE_ANOTHER_APPLICATION 505 class NAttributeTree : public QTreeWidget { Q_OBJECT private: QTreeWidgetItem *createdRoot; QTreeWidgetItem *lastUpdatedRoot; QTreeWidgetItem *containsRoot; QTreeWidgetItem *sourceRoot; QTreeWidgetItem *createdSinceRoot; QTreeWidgetItem *createdSinceToday; QTreeWidgetItem *createdSinceYesterday; QTreeWidgetItem *createdSinceThisWeek; QTreeWidgetItem *createdSinceLastWeek; QTreeWidgetItem *createdSinceThisMonth; QTreeWidgetItem *createdSinceLastMonth; QTreeWidgetItem *createdSinceThisYear; QTreeWidgetItem *createdSinceLastYear; QTreeWidgetItem *createdBeforeRoot; QTreeWidgetItem *createdBeforeToday; QTreeWidgetItem *createdBeforeYesterday; QTreeWidgetItem *createdBeforeThisWeek; QTreeWidgetItem *createdBeforeLastWeek; QTreeWidgetItem *createdBeforeThisMonth; QTreeWidgetItem *createdBeforeLastMonth; QTreeWidgetItem *createdBeforeThisYear; QTreeWidgetItem *createdBeforeLastYear; QTreeWidgetItem *lastUpdatedSinceRoot; QTreeWidgetItem *lastUpdatedSinceToday; QTreeWidgetItem *lastUpdatedSinceYesterday; QTreeWidgetItem *lastUpdatedSinceThisWeek; QTreeWidgetItem *lastUpdatedSinceLastWeek; QTreeWidgetItem *lastUpdatedSinceThisMonth; QTreeWidgetItem *lastUpdatedSinceLastMonth; QTreeWidgetItem *lastUpdatedSinceThisYear; QTreeWidgetItem *lastUpdatedSinceLastYear; QTreeWidgetItem *lastUpdatedBeforeRoot; QTreeWidgetItem *lastUpdatedBeforeToday; QTreeWidgetItem *lastUpdatedBeforeYesterday; QTreeWidgetItem *lastUpdatedBeforeThisWeek; QTreeWidgetItem *lastUpdatedBeforeLastWeek; QTreeWidgetItem *lastUpdatedBeforeThisMonth; QTreeWidgetItem *lastUpdatedBeforeLastMonth; QTreeWidgetItem *lastUpdatedBeforeThisYear; QTreeWidgetItem *lastUpdatedBeforeLastYear; QTreeWidgetItem *containsImages; QTreeWidgetItem *containsAudio; QTreeWidgetItem *containsInk; QTreeWidgetItem *containsEncryptedText; QTreeWidgetItem *containsToDoItems; QTreeWidgetItem *containsUnfinishedToDoItems; QTreeWidgetItem *containsFinishedToDoItems; QTreeWidgetItem *containsPDFDocument; QTreeWidgetItem *containsAttachment; QTreeWidgetItem *containsReminder; QTreeWidgetItem *containsUncompletedReminder; QTreeWidgetItem *containsFutureReminder; QTreeWidgetItem *sourceEmailedToEvernote; QTreeWidgetItem *sourceEmail; QTreeWidgetItem *sourceWebPage; QTreeWidgetItem *sourceMobile; QTreeWidgetItem *sourceAnotherApplication; int filterPosition; QImage *collapsedImage; QImage *expandedImage; public: explicit NAttributeTree(QWidget *parent = 0); ~NAttributeTree(); QTreeWidgetItem *root; void updateSelection(); void resetSize(); void mousePressEvent(QMouseEvent *event); QSize sizeHint(); void drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const; void reloadIcons(); signals: void updateSelectionRequested(); public slots: private slots: int calculateHeightRec(QTreeWidgetItem * item); void calculateHeight(); void buildSelection(); }; #endif // NATTRIBUTETREE_H nixnote2-2.0.2/gui/nbrowserwindow.cpp000066400000000000000000004333201315604104400176450ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "nbrowserwindow.h" #include "sql/notetable.h" #include "sql/notebooktable.h" #include "gui/browserWidgets/urleditor.h" #include "sql/tagtable.h" #include "html/noteformatter.h" #include "html/enmlformatter.h" #include "sql/usertable.h" #include "sql/resourcetable.h" #include "sql/linkednotebooktable.h" #include "email/smtpclient.h" #include "email/mimehtml.h" #include "email/mimemessage.h" #include "email/mimeinlinefile.h" #include "global.h" #include "gui/browserWidgets/colormenu.h" #include "gui/plugins/pluginfactory.h" #include "dialog/insertlinkdialog.h" #include "html/thumbnailer.h" #include "dialog/tabledialog.h" #include "dialog/insertlatexdialog.h" #include "dialog/endecryptdialog.h" #include "dialog/encryptdialog.h" #include "dialog/emaildialog.h" #include "sql/configstore.h" #include "utilities/encrypt.h" #include "utilities/mimereference.h" #include "html/attachmenticonbuilder.h" #include "dialog/remindersetdialog.h" #include "dialog/spellcheckdialog.h" #include "utilities/pixelconverter.h" #include "gui/browserWidgets/table/tablepropertiesdialog.h" #include "exits/exitmanager.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if QT_VERSION < 0x050000 #include #else #include #endif extern Global global; NBrowserWindow::NBrowserWindow(QWidget *parent) : QWidget(parent) { // Setup a unique identifier for this editor instance. QUuid uuid; this->uuid = uuid.createUuid().toString().replace("{","").replace("}",""); browserThread = new QThread(); connect(browserThread, SIGNAL(started()), this, SLOT(browserThreadStarted())); browserRunner = new BrowserRunner(0); connect(this, SIGNAL(requestNoteContentUpdate(qint32, QString, bool)), browserRunner, SLOT(updateNoteContent(qint32, QString, bool))); browserThread->start(); // this->setStyleSheet("margins:0px;"); QHBoxLayout *line1Layout = new QHBoxLayout(); QVBoxLayout *layout = new QVBoxLayout(); // Note content layout // Setup the alarm button & display alarmText.setStyleSheet("QPushButton {background-color: transparent; border-radius: 0px;}"); connect(alarmButton.setAction, SIGNAL(triggered()), this, SLOT(alarmSet())); connect(alarmButton.clearAction, SIGNAL(triggered()), this, SLOT(alarmClear())); connect(alarmButton.doneAction, SIGNAL(triggered()), this, SLOT(alarmCompleted())); connect(&alarmButton.menu, SIGNAL(aboutToShow()), this, SLOT(alarmMenuActivated())); // Setup line #1 of the window. The text & notebook connect(&alarmText, SIGNAL(clicked()), this, SLOT(alarmCompleted())); layout->addLayout(line1Layout); line1Layout->addWidget(¬eTitle,20); line1Layout->addWidget(&alarmText); line1Layout->addWidget(&alarmButton); line1Layout->addWidget(¬ebookMenu,4); line1Layout->addWidget(&expandButton); // Add the second layout display layout->addLayout(&line2Layout); line2Layout.addWidget(&urlEditor,1); line2Layout.addWidget(&tagEditor, 3); // Add the third layout display layout->addLayout(&line3Layout); line3Layout.addWidget(&dateEditor); editor = new NWebView(this); editor->setTitleEditor(¬eTitle); setupToolBar(); layout->addWidget(buttonBar); // setup the source editor sourceEdit = new QTextEdit(this); sourceEdit->setVisible(false); sourceEdit->setTabChangesFocus(true); QFont font; font.setFamily("Courier"); font.setFixedPitch(true); global.getGuiFont(font); sourceEdit->setFont(global.getGuiFont(font)); sourceEditorTimer = new QTimer(); connect(sourceEditorTimer, SIGNAL(timeout()), this, SLOT(setSource())); // addthe actual note editor & source view QSplitter *editorSplitter = new QSplitter(Qt::Vertical, this); editorSplitter->addWidget(editor); editorSplitter->addWidget(sourceEdit); layout->addWidget(editorSplitter); setLayout(layout); layout->setMargin(0); findReplace = new FindReplace(); layout->addWidget(findReplace); findReplace->setVisible(false); connect(findReplace->nextButton, SIGNAL(clicked()), this, SLOT(findNextInNote())); connect(findReplace->findLine, SIGNAL(returnPressed()), this, SLOT(findNextInNote())); connect(findReplace->prevButton, SIGNAL(clicked()), this, SLOT(findPrevInNote())); connect(findReplace->replaceButton, SIGNAL(clicked()), this, SLOT(findReplaceInNotePressed())); connect(findReplace->replaceAllButton, SIGNAL(clicked()), this, SLOT(findReplaceAllInNotePressed())); connect(findReplace->closeButton, SIGNAL(clicked()), this, SLOT(findReplaceWindowHidden())); // Setup shortcuts focusNoteShortcut = new QShortcut(this); setupShortcut(focusNoteShortcut, "Focus_Note"); connect(focusNoteShortcut, SIGNAL(activated()), this, SLOT(focusNote())); focusTitleShortcut = new QShortcut(this); setupShortcut(focusTitleShortcut, "Focus_Title"); connect(focusTitleShortcut, SIGNAL(activated()), this, SLOT(focusTitle())); insertDatetimeShortcut = new QShortcut(this); setupShortcut(insertDatetimeShortcut, "Insert_DateTime"); connect(insertDatetimeShortcut, SIGNAL(activated()), this, SLOT(insertDatetime())); copyNoteUrlShortcut = new QShortcut(this); setupShortcut(copyNoteUrlShortcut, "Edit_Copy_Note_Url"); connect(copyNoteUrlShortcut, SIGNAL(activated()), this, SLOT(copyNoteUrl())); // Setup the signals connect(&expandButton, SIGNAL(stateChanged(int)), this, SLOT(changeExpandState(int))); connect(¬ebookMenu, SIGNAL(notebookChanged()), this, SLOT(sendNotebookUpdateSignal())); connect(&urlEditor, SIGNAL(textUpdated()), this, SLOT(sendUrlUpdateSignal())); connect(¬eTitle, SIGNAL(titleChanged()), this, SLOT(sendTitleUpdateSignal())); connect(&dateEditor.authorEditor, SIGNAL(textUpdated()), this, SLOT(sendAuthorUpdateSignal())); connect(&dateEditor.locationEditor, SIGNAL(clicked()), this, SLOT(sendLocationUpdateSignal())); connect(&dateEditor.createdDate, SIGNAL(editingFinished()), this, SLOT(sendDateCreatedUpdateSignal())); connect(&dateEditor.subjectDate, SIGNAL(editingFinished()), this, SLOT(sendDateSubjectUpdateSignal())); connect(&dateEditor, SIGNAL(valueChanged()), this, SLOT(sendDateUpdateSignal())); connect(&tagEditor, SIGNAL(tagsUpdated()), this, SLOT(sendTagUpdateSignal())); connect(&tagEditor, SIGNAL(newTagCreated(qint32)), this, SLOT(newTagAdded(qint32))); connect(editor, SIGNAL(noteChanged()), this, SLOT(noteContentUpdated())); connect(sourceEdit, SIGNAL(textChanged()), this, SLOT(noteSourceUpdated())); connect(editor, SIGNAL(htmlEditAlert()), this, SLOT(noteContentEdited())); connect(editor->page(), SIGNAL(linkClicked(QUrl)), this, SLOT(linkClicked(QUrl))); connect(editor->page(), SIGNAL(microFocusChanged()), this, SLOT(microFocusChanged())); editor->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); connect(editor->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(exposeToJavascript())); connect(editor->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), editor, SLOT(exposeToJavascript())); editor->page()->settings()->setAttribute(QWebSettings::PluginsEnabled, true); factory = new PluginFactory(this); editor->page()->setPluginFactory(factory); buttonBar->setupVisibleButtons(); printPage = new QTextEdit(); printPage->setVisible(false); //connect(printPage, SIGNAL(loadFinished(bool)), this, SLOT(printReady(bool))); printPreviewPage = new QTextEdit(); printPreviewPage->setVisible(false); hammer = new Thumbnailer(global.db); lid = -1; thumbnailer = NULL; //Setup shortcuts for context menu removeFormattingShortcut = new QShortcut(this); this->setupShortcut(removeFormattingShortcut, "Edit_Remove_Formatting"); connect(removeFormattingShortcut, SIGNAL(activated()), this, SLOT(removeFormatButtonPressed())); //removeFormattingShortcut->setContext(Qt::WidgetWithChildrenShortcut); insertHtmlEntitiesShortcut = new QShortcut(this); this->setupShortcut(insertHtmlEntitiesShortcut, QString("Edit_Insert_Html_Entities")); connect(insertHtmlEntitiesShortcut, SIGNAL(activated()),this, SLOT(insertHtmlEntities())); //insertHtmlEntitiesShortcut->setContext(Qt::WidgetWithChildrenShortcut); encryptTextShortcut = new QShortcut(this); this->setupShortcut(encryptTextShortcut, QString("Edit_Encrypt_Text")); connect(encryptTextShortcut, SIGNAL(activated()),this, SLOT(encryptButtonPressed())); //encryptTextShortcut->setContext(Qt::WidgetWithChildrenShortcut); insertHyperlinkShortcut = new QShortcut(this); this->setupShortcut(insertHyperlinkShortcut, QString("Edit_Insert_Hyperlink")); connect(insertHyperlinkShortcut, SIGNAL(activated()),this, SLOT(insertLinkButtonPressed())); //insertHyperlinkShortcut->setContext(Qt::WidgetWithChildrenShortcut); insertQuicklinkShortcut = new QShortcut(this); this->setupShortcut(insertQuicklinkShortcut, QString("Edit_Insert_QuickLink")); connect(insertQuicklinkShortcut, SIGNAL(activated()),this, SLOT(insertQuickLinkButtonPressed())); //insertQuicklinkShortcut->setContext(Qt::WidgetWithChildrenShortcut); removeHyperlinkShortcut = new QShortcut(this); this->setupShortcut(removeHyperlinkShortcut, QString("Edit_Remove_Hyperlink")); connect(removeHyperlinkShortcut, SIGNAL(activated()),this, SLOT(removeLinkButtonPressed())); //removeHyperlinkShortcut->setContext(Qt::WidgetWithChildrenShortcut); attachFileShortcut = new QShortcut(this); this->setupShortcut(attachFileShortcut, QString("Edit_Attach_File")); connect(attachFileShortcut, SIGNAL(activated()),this, SLOT(attachFile())); //attachFileShortcut->setContext(Qt::WidgetWithChildrenShortcut); insertLatexShortcut = new QShortcut(this); this->setupShortcut(insertLatexShortcut, QString("Edit_Insert_Latex")); connect(insertLatexShortcut, SIGNAL(activated()),this, SLOT(insertLatexButtonPressed())); // Restore the expand/collapse state global.settings->beginGroup("SaveState"); int expandButton = global.settings->value("ExpandButton", EXPANDBUTTON_1).toInt(); global.settings->endGroup(); this->expandButton.setState(expandButton); connect(&focusTimer, SIGNAL(timeout()), this, SLOT(focusCheck())); focusTimer.setInterval(100); focusTimer.start(); connect(&saveTimer, SIGNAL(timeout()), this, SLOT(saveTimeCheck())); saveTimer.setInterval(global.autoSaveInterval); saveTimer.start(); hunspellInterface = NULL; } // Destructor NBrowserWindow::~NBrowserWindow() { browserThread->quit(); while (!browserRunner->isIdle); } // Browser helper thread is ready void NBrowserWindow::browserThreadStarted() { browserRunner->moveToThread(browserThread); } // Setup the toolbar window of the editor void NBrowserWindow::setupToolBar() { buttonBar = new EditorButtonBar(); // Toolbar action connect(buttonBar->undoButtonAction, SIGNAL(triggered()), this, SLOT(undoButtonPressed())); connect(buttonBar->undoButtonShortcut, SIGNAL(activated()), this, SLOT(undoButtonPressed())); connect(buttonBar->redoButtonAction, SIGNAL(triggered()), this, SLOT(redoButtonPressed())); connect(buttonBar->redoButtonShortcut, SIGNAL(activated()), this, SLOT(redoButtonPressed())); connect(buttonBar->cutButtonAction, SIGNAL(triggered()), this, SLOT(cutButtonPressed())); connect(buttonBar->cutButtonShortcut, SIGNAL(activated()), this, SLOT(cutButtonPressed())); connect(buttonBar->copyButtonAction, SIGNAL(triggered()), this, SLOT(copyButtonPressed())); connect(buttonBar->copyButtonShortcut, SIGNAL(activated()), this, SLOT(copyButtonPressed())); connect(buttonBar->pasteButtonAction, SIGNAL(triggered()), this, SLOT(pasteButtonPressed())); //connect(buttonBar->pasteButtonShortcut, SIGNAL(activated()), this, SLOT(pasteButtonPressed())); // Handled via NWebView connect(buttonBar->removeFormatButtonAction, SIGNAL(triggered()), this, SLOT(removeFormatButtonPressed())); connect(buttonBar->removeFormatButtonShortcut, SIGNAL(activatedAmbiguously()), this, SLOT(removeFormatButtonPressed())); connect(buttonBar->boldButtonWidget, SIGNAL(clicked()), this, SLOT(boldButtonPressed())); connect(buttonBar->boldButtonShortcut, SIGNAL(activated()), this, SLOT(boldButtonPressed())); connect(buttonBar->italicButtonWidget, SIGNAL(clicked()), this, SLOT(italicsButtonPressed())); connect(buttonBar->italicButtonShortcut, SIGNAL(activated()), this, SLOT(italicsButtonPressed())); connect(buttonBar->underlineButtonWidget, SIGNAL(clicked()), this, SLOT(underlineButtonPressed())); connect(buttonBar->underlineButtonShortcut, SIGNAL(activated()), this, SLOT(underlineButtonPressed())); connect(buttonBar->leftJustifyButtonAction, SIGNAL(triggered()), this, SLOT(alignLeftButtonPressed())); connect(buttonBar->leftJustifyButtonShortcut, SIGNAL(activated()), this, SLOT(alignLeftButtonPressed())); connect(buttonBar->rightJustifyButtonAction, SIGNAL(triggered()), this, SLOT(alignRightButtonPressed())); connect(buttonBar->rightJustifyButtonShortcut, SIGNAL(activated()), this, SLOT(alignRightButtonPressed())); connect(buttonBar->centerJustifyButtonAction, SIGNAL(triggered()), this, SLOT(alignCenterButtonPressed())); connect(buttonBar->centerJustifyButtonShortcut, SIGNAL(activated()), this, SLOT(alignCenterButtonPressed())); connect(buttonBar->fullJustifyButtonAction, SIGNAL(triggered()), this, SLOT(alignFullButtonPressed())); connect(buttonBar->fullJustifyButtonShortcut, SIGNAL(activated()), this, SLOT(alignFullButtonPressed())); connect(buttonBar->strikethroughButtonAction, SIGNAL(triggered()), this, SLOT(strikethroughButtonPressed())); connect(buttonBar->strikethroughButtonShortcut, SIGNAL(activated()), this, SLOT(strikethroughButtonPressed())); connect(buttonBar->subscriptButtonAction, SIGNAL(triggered()), this, SLOT(subscriptButtonPressed())); connect(buttonBar->subscriptButtonShortcut, SIGNAL(activated()), this, SLOT(subscriptButtonPressed())); connect(buttonBar->superscriptButtonAction, SIGNAL(triggered()), this, SLOT(superscriptButtonPressed())); connect(buttonBar->superscriptButtonShortcut, SIGNAL(activated()), this, SLOT(superscriptButtonPressed())); connect(buttonBar->hlineButtonAction, SIGNAL(triggered()), this, SLOT(horizontalLineButtonPressed())); connect(buttonBar->hlineButtonShortcut, SIGNAL(activated()), this, SLOT(horizontalLineButtonPressed())); connect(buttonBar->shiftRightButtonAction, SIGNAL(triggered()), this, SLOT(shiftRightButtonPressed())); connect(buttonBar->shiftRightButtonShortcut, SIGNAL(activated()), this, SLOT(shiftRightButtonPressed())); connect(buttonBar->shiftLeftButtonAction, SIGNAL(triggered()), this, SLOT(shiftLeftButtonPressed())); connect(buttonBar->shiftLeftButtonShortcut, SIGNAL(activated()), this, SLOT(shiftLeftButtonPressed())); connect(buttonBar->bulletListButtonAction, SIGNAL(triggered()), this, SLOT(bulletListButtonPressed())); connect(buttonBar->bulletListButtonShortcut, SIGNAL(activated()), this, SLOT(bulletListButtonPressed())); connect(buttonBar->numberListButtonAction, SIGNAL(triggered()), this, SLOT(numberListButtonPressed())); connect(buttonBar->numberListButtonShortcut, SIGNAL(activated()), this, SLOT(numberListButtonPressed())); connect(buttonBar->todoButtonAction, SIGNAL(triggered()), this, SLOT(todoButtonPressed())); connect(buttonBar->todoButtonShortcut, SIGNAL(activated()), this, SLOT(todoButtonPressed())); connect(buttonBar->spellCheckButtonAction, SIGNAL(triggered()), this, SLOT(spellCheckPressed())); connect(buttonBar->spellCheckButtonShortcut, SIGNAL(activated()), this, SLOT(spellCheckPressed())); connect(buttonBar->fontSizes, SIGNAL(currentIndexChanged(int)), this, SLOT(fontSizeSelected(int))); connect(buttonBar->fontNames, SIGNAL(currentIndexChanged(int)), this, SLOT(fontNameSelected(int))); connect(buttonBar->fontColorButtonWidget, SIGNAL(clicked()), this, SLOT(fontColorClicked())); //connect(fontColorButtonShortcut, SIGNAL(activated()), this, SLOT(fontColorClicked())); connect(buttonBar->fontColorMenuWidget->getMenu(), SIGNAL(triggered(QAction*)), this, SLOT(fontColorClicked())); connect(buttonBar->highlightColorButtonWidget, SIGNAL(clicked()), this, SLOT(fontHighlightClicked())); //connect(fontHighlightColorShortcut, SIGNAL(activated()), this, SLOT(fontHighlightClicked())); connect(buttonBar->highlightColorAction, SIGNAL(triggered()), this, SLOT(fontHighlightClicked())); connect(buttonBar->highlightColorMenuWidget->getMenu(), SIGNAL(triggered(QAction*)), this, SLOT(fontHighlightClicked())); connect(buttonBar->insertTableButtonAction, SIGNAL(triggered()), this, SLOT(insertTableButtonPressed())); connect(buttonBar->insertTableButtonShortcut, SIGNAL(activated()), this, SLOT(insertTableButtonPressed())); connect(buttonBar->htmlEntitiesButtonAction, SIGNAL(triggered()), this, SLOT(insertHtmlEntities())); connect(buttonBar->htmlEntitiesButtonShortcut, SIGNAL(activated()), this, SLOT(insertHtmlEntities())); connect(buttonBar->insertDatetimeButtonAction, SIGNAL(triggered()), this, SLOT(insertDatetime())); connect(buttonBar->insertDatetimeButtonWidget,SIGNAL(clicked()), this, SLOT(insertDatetime())); connect(buttonBar->insertDatetimeButtonShortcut, SIGNAL(activated()), this, SLOT(insertDatetime())); connect(buttonBar->formatCodeButtonAction, SIGNAL(triggered()), this, SLOT(formatCodeButtonPressed())); connect(buttonBar->formatCodeButtonShortcut, SIGNAL(activated()), this, SLOT(formatCodeButtonPressed())); } // Load any shortcut keys void NBrowserWindow::setupShortcut(QShortcut *action, QString text) { if (!global.shortcutKeys->containsAction(&text)) return; QKeySequence key(global.shortcutKeys->getShortcut(&text)); action->setKey(key); } // Load the note content into the window void NBrowserWindow::setContent(qint32 lid) { QLOG_DEBUG() << "Setting note contents to " << lid; // First, make sure we have a valid lid if (lid == -1) { blockSignals(true); setReadOnly(true); clear(); blockSignals(false); return; } // If we are already updating this note, we don't do anything QLOG_DEBUG() << "this.lid:" << this->lid << " " << lid; if (lid == this->lid) return; bool hasFocus = false; if (this->editor->hasFocus()) hasFocus = true; QLOG_DEBUG() << "editor is dirty"; if (this->editor->isDirty) this->saveNoteContent(); // let's load the new note this->lid = lid; this->editor->isDirty = false; NoteTable noteTable(global.db); Note n; QLOG_DEBUG() << "Getting note"; bool rc = noteTable.get(n, this->lid, false, false); if (!rc) return; QByteArray content; bool inkNote = false; bool readOnly = false; // If we are searching, we never pull from the cache since the search string may // have changed since the last time. FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; if (criteria->isSearchStringSet() && criteria->getSearchString().trimmed() != "") global.cache.remove(lid); QLOG_DEBUG() << "Checking if note is in cache"; if (global.cache.contains(lid)) { QLOG_DEBUG() << "Fetching from cache"; NoteCache *c = global.cache[lid]; if (c == NULL || c->noteContent == (char*)NULL) { QLOG_DEBUG() << "Invalid note found in cache. Removing it."; global.cache.remove(lid); } else { QLOG_DEBUG() << "Setting content from cache."; content = c->noteContent; readOnly = c->isReadOnly; inkNote = c->isInkNote; } } if (!global.cache.contains(lid)) { QLOG_DEBUG() << "Note not in cache"; NoteFormatter formatter; if (criteria->isSearchStringSet()) formatter.setHighlightText(criteria->getSearchString()); formatter.setNote(n, global.pdfPreview); //formatter.setHighlight(); QLOG_DEBUG() << "rebuilding note HTML"; content = formatter.rebuildNoteHTML(); if (!criteria->isSearchStringSet()) { QLOG_DEBUG() << "criteria search string set"; NoteCache *newCache = new NoteCache(); newCache->isReadOnly = formatter.readOnly; newCache->isInkNote = formatter.inkNote; newCache->noteContent = content; QLOG_DEBUG() << "adding to cache"; global.cache.insert(lid, newCache); } readOnly = formatter.readOnly; inkNote = formatter.inkNote; } setReadOnly(readOnly); QLOG_DEBUG() << "Setting up note title"; noteTitle.setTitle(lid, n.title, n.title); dateEditor.setNote(lid, n); QWebSettings::setMaximumPagesInCache(0); QWebSettings::setObjectCacheCapacities(0, 0, 0); QLOG_DEBUG() << "Setting editor contents"; //**** BEGINNING CALL TO PRE-LOAD EXIT QHash *points; points = global.exitManager->exitPoints; if (points->contains("ExitPoint_LoadNote") && points->value("ExitPoint_LoadNote") != NULL && points->value("ExitPoint_LoadNote")->getEnabled()) exitPoint(points->value("ExitPoint_LoadNote")); //**** END OF CALL TO PRE-LOAD EXIT editor->setContent(content); // is this an ink note? if (inkNote) editor->page()->setContentEditable(false); // Setup the alarm NoteAttributes attributes; QLOG_DEBUG() << "Setting attributes"; if (n.attributes.isSet()) attributes = n.attributes; if (attributes.reminderTime.isSet()) { Timestamp t; if (attributes.reminderTime.isSet()) t = attributes.reminderTime; QFont f = alarmText.font(); if (attributes.reminderDoneTime.isSet()) { f.setStrikeOut(true); } else { f.setStrikeOut(false); } alarmText.setFont(f); alarmText.setVisible(true); QDateTime atime; atime.setMSecsSinceEpoch(t); if (atime.date() == QDate::currentDate()) alarmText.setText(tr("Today")); else if (atime.date() == QDate::currentDate().addDays(+1)) alarmText.setText(tr("Tomorrow")); else if (atime.date() == QDate::currentDate().addDays(-1)) alarmText.setText(tr("Yesterday")); else alarmText.setText(atime.date().toString(global.dateFormat)); } else { alarmText.setText(""); alarmText.setVisible(false); } // Set the tag names QLOG_DEBUG() << "Setting tags"; tagEditor.clear(); QStringList names; QList tagNames; if (n.tagNames.isSet()) tagNames = n.tagNames; for (int i=0; ilid = lid; notebookMenu.setCurrentNotebook(lid, n); QLOG_DEBUG() << "Setting URL"; urlEditor.setUrl(lid, ""); NoteAttributes na; QLOG_DEBUG() << "Setting note attributes"; if (n.attributes.isSet()) { na = n.attributes; if (na.sourceURL.isSet()) { QLOG_DEBUG() << "Setting sourceUrl"; urlEditor.setUrl(lid, na.sourceURL); } } QLOG_DEBUG() << "Calling set source"; setSource(); if (criteria->isSearchStringSet()) { QStringList list = criteria->getSearchString().split(" "); for (int i=0; ipage()->findText(list[i], QWebPage::HighlightAllOccurrences); } } QLOG_DEBUG() << "Checking thumbnail"; if (hammer->idle && noteTable.isThumbnailNeeded(this->lid)) { hammer->render(this->lid); } this->setEditorStyle(); if (hasFocus) this->editor->setFocus(); QLOG_DEBUG() << "Exiting setContent"; } void NBrowserWindow::setReadOnly(bool readOnly) { isReadOnly = readOnly; if (readOnly || global.disableEditing) { noteTitle.setFocusPolicy(Qt::NoFocus); tagEditor.setEnabled(false); buttonBar->setVisible(false); tagEditor.setFocusPolicy(Qt::NoFocus); //authorEditor.setFocusPolicy(Qt::NoFocus); //locationEditor.setFocusPolicy(Qt::NoFocus); urlEditor.setFocusPolicy(Qt::NoFocus); notebookMenu.setEnabled(false); dateEditor.setEnabled(false); editor->page()->setContentEditable(false); alarmButton.setEnabled(false); return; } noteTitle.setFocusPolicy(Qt::StrongFocus); tagEditor.setEnabled(true); tagEditor.setFocusPolicy(Qt::StrongFocus); urlEditor.setFocusPolicy(Qt::StrongFocus); notebookMenu.setEnabled(true); dateEditor.setEnabled(true); editor->page()->setContentEditable(true); alarmButton.setEnabled(true); } // Show / hide various note attributes depending upon what the user // has clicked void NBrowserWindow::changeExpandState(int value) { switch (value) { case EXPANDBUTTON_1: urlEditor.hide(); tagEditor.hide(); dateEditor.hide(); break; case EXPANDBUTTON_2: urlEditor.show(); tagEditor.show(); break; case EXPANDBUTTON_3: urlEditor.show(); tagEditor.show(); dateEditor.show(); break; } global.settings->beginGroup("SaveState"); global.settings->setValue("ExpandButton", value); global.settings->endGroup(); } // Send a signal that a tag has been added to a note void NBrowserWindow::newTagAdded(qint32 lid) { emit(tagAdded(lid)); } // Add a tag to a note void NBrowserWindow::addTagName(qint32 lid) { TagTable table(global.db); Tag t; table.get(t, lid); tagEditor.addTag(t.name); } // Rename a tag in a note. void NBrowserWindow::tagRenamed(qint32 lid, QString oldName, QString newName) { tagEditor.tagRenamed(lid, oldName, newName); } // Remove a tag in a note void NBrowserWindow::tagDeleted(qint32 lid, QString name) { Q_UNUSED(lid); /* suppress unused */ tagEditor.removeTag(name); } // A notebook was renamed void NBrowserWindow::notebookRenamed(qint32 lid, QString oldName, QString newName) { Q_UNUSED(lid); /* suppress unused */ Q_UNUSED(oldName); /* suppress unused */ Q_UNUSED(newName) /* suppress unused */ notebookMenu.reloadData(); } // A notebook was deleted void NBrowserWindow::notebookDeleted(qint32 lid, QString name) { Q_UNUSED(lid); /* suppress unused */ Q_UNUSED(name); /* suppress unused */ notebookMenu.reloadData(); } // A stack was renamed void NBrowserWindow::stackRenamed(QString oldName, QString newName) { Q_UNUSED(oldName); /* suppress unused */ Q_UNUSED(newName); /* suppress unused */ notebookMenu.reloadData(); } // A stack was deleted void NBrowserWindow::stackDeleted(QString name) { Q_UNUSED(name); /* suppress unused */ notebookMenu.reloadData(); } // A stack was added void NBrowserWindow::stackAdded(QString name) { Q_UNUSED(name); /* suppress unused */ notebookMenu.reloadData(); } // A notebook was added void NBrowserWindow::notebookAdded(qint32 lid) { Q_UNUSED(lid); /* suppress unused */ notebookMenu.reloadData(); } // A note was synchronized with Evernote's servers void NBrowserWindow::noteSyncUpdate(qint32 lid) { if (lid != this->lid || editor->isDirty) return; setContent(lid); } // A note's content was updated void NBrowserWindow::noteContentUpdated() { if (editor->isDirty) { NoteTable noteTable(global.db); noteTable.setDirty(this->lid, true); editor->isDirty = false; qint64 dt = QDateTime::currentMSecsSinceEpoch(); emit(noteUpdated(this->lid)); emit(updateNoteList(this->lid, NOTE_TABLE_DATE_UPDATED_POSITION, dt)); } } // Save the note's content void NBrowserWindow::saveNoteContent() { microFocusChanged(); if (this->editor->isDirty) { // BEGIN EXIT POINT QHash *points; points = global.exitManager->exitPoints; if (points->contains("ExitPoint_SaveNote") && points->value("ExitPoint_SaveNote") != NULL && points->value("ExitPoint_SaveNote")->getEnabled()) exitPoint(points->value("ExitPoint_SaveNote")); // END EXIT POINT QString contents = editor->editorPage->mainFrame()->documentElement().toOuterXml(); EnmlFormatter formatter; formatter.setHtml(contents); formatter.rebuildNoteEnml(); if (formatter.formattingError) { QMessageBox::information(this, tr("Unable to Save"), QString(tr("Unable to save this note. Either tidy isn't installed or the note is too complex to save."))); return; } // get a list of lids found in the note. // Purge anything that is no longer needed. QList validLids = formatter.resources; QList oldLids; ResourceTable resTable(global.db); resTable.getResourceList(oldLids, lid); QLOG_DEBUG() << "Valid Resource LIDS:"; for (int i=0; iisDirty = false; if (thumbnailer == NULL) thumbnailer = new Thumbnailer(global.db); QLOG_DEBUG() << "Beginning thumbnail"; thumbnailer->render(lid); QLOG_DEBUG() << "Thumbnail compleded"; NoteCache* cache = global.cache[lid]; if (cache != NULL) { QLOG_DEBUG() << "Updating cache"; QByteArray b; b.append(contents); cache->noteContent = b; global.cache.remove(lid); } QLOG_DEBUG() << "Leaving saveNoteContent()"; } } // The undo edit button was pressed void NBrowserWindow::undoButtonPressed() { this->editor->triggerPageAction(QWebPage::Undo); this->editor->setFocus(); microFocusChanged(); } // The redo edit button was pressed void NBrowserWindow::redoButtonPressed() { this->editor->triggerPageAction(QWebPage::Redo); this->editor->setFocus(); microFocusChanged(); } // The cut button was pressed void NBrowserWindow::cutButtonPressed() { this->editor->triggerPageAction(QWebPage::Cut); this->editor->setFocus(); microFocusChanged(); } // The copy button was pressed void NBrowserWindow::copyButtonPressed() { // editor->downloadImageAction()->setEnabled(true); // selectedFileName = f; // selectedFileLid = l.toInt(); // If we have text selected if (this->editor->selectedText().trimmed() != "") { this->editor->triggerPageAction(QWebPage::Copy); this->editor->setFocus(); } else { // If we have an image selected, we copy it to the clipboard. if (editor->downloadImageAction()->isEnabled()) { QString fileName = global.fileManager.getDbaDirPath()+selectedFileName; QApplication::clipboard()->setPixmap(QPixmap(fileName)); } } microFocusChanged(); } // Build URL from pasted text QString NBrowserWindow::buildPasteUrl(QString url) { if (url.toLower().startsWith("http://") || url.toLower().startsWith("https://") || url.toLower().startsWith("mailto://") || url.toLower().startsWith("mailto:") || url.toLower().startsWith("ftp://")) { QString newUrl = QString("text() +QString("\" title=\"") +url +QString("\" >") +url +QString(""); return newUrl; } return url; } // The paste button was pressed void NBrowserWindow::pasteButtonPressed() { if (forceTextPaste) { pasteWithoutFormatButtonPressed(); return; } const QMimeData *mime = QApplication::clipboard()->mimeData(); if (mime->hasImage()) { editor->setFocus(); insertImage(mime); editor->setFocus(); return; } QLOG_DEBUG() << "Have URL?: " << mime->hasUrls(); if (mime->hasUrls()) { QList urls = mime->urls(); for (int i=0; ieditor->triggerPageAction(QWebPage::InsertParagraphSeparator); } // If inserting a URL if (urls[i].toString().toLower().startsWith("https://") || urls[i].toString().toLower().startsWith("http://") || urls[i].toString().toLower().startsWith("ftp://") || urls[i].toString().toLower().startsWith("mailto:")) { QString url = this->buildPasteUrl(urls[i].toString()); QString script = QString("document.execCommand('insertHtml', false, '%1');").arg(url); editor->page()->mainFrame()->evaluateJavaScript(script); } } this->editor->setFocus(); microFocusChanged(); return; } QLOG_DEBUG() << "Has HTML:" << mime->hasHtml() << " " << mime->html(); QLOG_DEBUG() << "Has Color:" << mime->hasColor(); QLOG_DEBUG() << "Has Url:" << mime->hasUrls(); if (mime->hasText()) { QString urltext = mime->text(); QLOG_DEBUG() << "Url:" << urltext; if (urltext.toLower().startsWith("https://") || urltext.toLower().startsWith("http://") || urltext.toLower().startsWith("ftp://") || \ urltext.toLower().startsWith("mailto:")) { QString url = this->buildPasteUrl(urltext); QString script = QString("document.execCommand('insertHtml', false, '%1');").arg(url); editor->page()->mainFrame()->evaluateJavaScript(script); return; } if (urltext.toLower().mid(0,17) == "evernote:///view/") { QStringList urlList = urltext.split(" "); QString url = ""; for (int i=0; i%3").arg(urlList[i], n.title, n.title); QLOG_DEBUG() << "HTML to insert:" << url; if (i+1 "; } else { if (urltext != "") { QLOG_ERROR() << "Error retrieving note: " << urlList[i]; } } } QLOG_DEBUG() << url; QString script = QString("document.execCommand('insertHtml', false, '%1');").arg(url); editor->page()->mainFrame()->evaluateJavaScript(script); return; } } this->editor->triggerPageAction(QWebPage::Paste); this->editor->setFocus(); microFocusChanged(); } // The paste button was pressed void NBrowserWindow::selectAllButtonPressed() { this->editor->triggerPageAction(QWebPage::SelectAll); this->editor->setFocus(); microFocusChanged(); } // The paste without mime format was pressed void NBrowserWindow::pasteWithoutFormatButtonPressed() { const QMimeData *mime = QApplication::clipboard()->mimeData(); if (!mime->hasText()) return; QString text = mime->text(); QApplication::clipboard()->clear(); QApplication::clipboard()->setText(text, QClipboard::Clipboard); this->editor->triggerPageAction(QWebPage::Paste); // This is done because pasting into an encryption block // can cause multiple cells (which can't happen). It // just goes through the table, extracts the data, & // puts it back as one table cell. if (insideEncryption) { QString js = QString( "function fixEncryption() { ") +QString(" var selObj = window.getSelection();") +QString(" var selRange = selObj.getRangeAt(0);") +QString(" var workingNode = window.getSelection().anchorNode;") +QString(" while(workingNode != null && workingNode.nodeName.toLowerCase() != 'table') { ") +QString(" workingNode = workingNode.parentNode;") +QString(" } ") +QString(" workingNode.innerHTML = window.browserWindow.fixEncryptionPaste(workingNode.innerHTML);") +QString("} fixEncryption();"); editor->page()->mainFrame()->evaluateJavaScript(js); } this->editor->setFocus(); microFocusChanged(); } // This basically removes all the table tags and returns just the contents. // This is called by JavaScript to fix encryption pastes. QString NBrowserWindow::fixEncryptionPaste(QString data) { data = data.replace("", ""); data = data.replace("", ""); data = data.replace("", ""); data = data.replace("", ""); data = data.replace("", ""); data = data.replace("", "
"); data = data.replace("

", "
"); return QString("")+data+QString(""); } // The bold button was pressed / toggled void NBrowserWindow::boldButtonPressed() { QAction *action = editor->page()->action(QWebPage::ToggleBold); action->activate(QAction::Trigger); this->editor->setFocus(); microFocusChanged(); } // The toggled button was pressed/toggled void NBrowserWindow::italicsButtonPressed() { QAction *action = editor->page()->action(QWebPage::ToggleItalic); action->activate(QAction::Trigger); this->editor->setFocus(); microFocusChanged(); } // The underline button was toggled void NBrowserWindow::underlineButtonPressed() { this->editor->triggerPageAction(QWebPage::ToggleUnderline); this->editor->setFocus(); microFocusChanged(); } // The underline button was toggled void NBrowserWindow::removeFormatButtonPressed() { this->editor->triggerPageAction(QWebPage::RemoveFormat); this->editor->setFocus(); microFocusChanged(); } // The strikethrough button was pressed void NBrowserWindow::strikethroughButtonPressed() { this->editor->triggerPageAction(QWebPage::ToggleStrikethrough); this->editor->setFocus(); microFocusChanged(); } // The horizontal line button was pressed void NBrowserWindow::horizontalLineButtonPressed() { this->editor->page()->mainFrame()->evaluateJavaScript( "document.execCommand('insertHorizontalRule', false, '');"); editor->setFocus(); microFocusChanged(); } // The center align button was pressed void NBrowserWindow::alignCenterButtonPressed() { this->editor->page()->mainFrame()->evaluateJavaScript( "document.execCommand('JustifyCenter', false, '');"); editor->setFocus(); microFocusChanged(); } // The center align button was pressed void NBrowserWindow::formatCodeButtonPressed() { QString text = editor->selectedText(); if (text.trimmed() == "") text = tr("Insert your code here."); QString buffer; // buffer.append("
");
    buffer.append("
");
    buffer.append(text);
    buffer.append("

"); QString script = QString("document.execCommand('insertHtml', false, '%1');").arg(buffer); editor->page()->mainFrame()->evaluateJavaScript(script).toString(); QKeyEvent *left = new QKeyEvent(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier); QCoreApplication::postEvent(editor->editorPage, left); } // The full align button was pressed void NBrowserWindow::alignFullButtonPressed() { this->editor->page()->mainFrame()->evaluateJavaScript( "document.execCommand('JustifyFull', false, '');"); editor->setFocus(); microFocusChanged(); } // The left align button was pressed void NBrowserWindow::alignLeftButtonPressed() { this->editor->page()->mainFrame()->evaluateJavaScript( "document.execCommand('JustifyLeft', false, '');"); editor->setFocus(); microFocusChanged(); } // The align right button was pressed void NBrowserWindow::alignRightButtonPressed() { this->editor->page()->mainFrame()->evaluateJavaScript( "document.execCommand('JustifyRight', false, '');"); editor->setFocus(); microFocusChanged(); } // The shift right button was pressed void NBrowserWindow::shiftRightButtonPressed() { this->editor->page()->mainFrame()->evaluateJavaScript( "document.execCommand('indent', false, '');"); editor->setFocus(); microFocusChanged(); } // The shift left button was pressed void NBrowserWindow::shiftLeftButtonPressed() { this->editor->page()->mainFrame()->evaluateJavaScript( "document.execCommand('outdent', false, '');"); editor->setFocus(); microFocusChanged(); } // The number list button was pressed void NBrowserWindow::numberListButtonPressed() { this->editor->page()->mainFrame()->evaluateJavaScript( "document.execCommand('InsertOrderedList', false, '');"); editor->setFocus(); microFocusChanged(); } // The bullet list button was pressed void NBrowserWindow::bulletListButtonPressed() { this->editor->page()->mainFrame()->evaluateJavaScript( "document.execCommand('InsertUnorderedList', false, '');"); editor->setFocus(); microFocusChanged(); } void NBrowserWindow::contentChanged() { this->editor->isDirty = true; saveNoteContent(); this->sendDateUpdateSignal(); } // The todo button was pressed void NBrowserWindow::todoButtonPressed() { QString script_start="document.execCommand('insertHtml', false, '"; QString script_end = "');"; QString todo = ""); QString selectedText = editor->selectedText().trimmed(); QRegExp regex("\\r?\\n"); QStringList items = selectedText.split(regex); if (items.size() == 0) items.append(" "); QString newLineChar = "

"; for (int i=0; ipage()->mainFrame()->evaluateJavaScript( script_start +todo +items[i] +newLineChar + script_end); } editor->setFocus(); microFocusChanged(); } // The font size button was pressed void NBrowserWindow::fontSizeSelected(int index) { int size = buttonBar->fontSizes->itemData(index).toInt(); if (size <= 0) return; QString text = editor->selectedHtml(); if (text.trimmed() == "") return; // Go througth the selected HTML and strip out all of the existing font-sizes. // This allows for the font size to be changed multiple times. Without this the inner most font // size would always win. for (int i=text.indexOf("<"); i>=0; i=text.indexOf("<",i+1)) { QString text1=""; QString text2=""; text1 = text.mid(0,i); QString interior = text.mid(i); if (!interior.startsWith("",i); if (endPos>0) { interior = text.mid(i,endPos-i); text2 = text.mid(endPos); } // Now that we have a substring, look for the font-size if (interior.contains("font-size:")) { interior = interior.mid(0,interior.indexOf("font-size:"))+ //QString::number(size)+ interior.mid(interior.indexOf("pt;")+3); text = text1+interior+text2; } } } // Start building a new font span. int idx = buttonBar->fontNames->currentIndex(); QString font = buttonBar->fontNames->itemText(idx); QString newText = ""+text+""; QString script = QString("document.execCommand('insertHtml', false, '"+newText+"');"); editor->page()->mainFrame()->evaluateJavaScript(script); editor->setFocus(); microFocusChanged(); } void NBrowserWindow::insertHtml(QString html) { QString script = QString("document.execCommand('insertHtml', false, '%1');").arg(html); editor->page()->mainFrame()->evaluateJavaScript(script); microFocusChanged(); } // The font name list was selected void NBrowserWindow::fontNameSelected(int index) { QString font = buttonBar->fontNames->itemData(index).toString(); buttonBar->fontSizes->blockSignals(true); buttonBar->loadFontSizeComboBox(font); buttonBar->fontSizes->blockSignals(false); this->editor->page()->mainFrame()->evaluateJavaScript( "document.execCommand('fontName', false, '"+font+"');"); editor->setFocus(); microFocusChanged(); } // The font highlight color was pressed void NBrowserWindow::fontHighlightClicked() { QColor *color = buttonBar->highlightColorMenuWidget->getColor(); if (color->isValid()) { this->editor->page()->mainFrame()->evaluateJavaScript( "document.execCommand('backColor', false, '"+color->name()+"');"); editor->setFocus(); microFocusChanged(); } } // The font color was pressed void NBrowserWindow::fontColorClicked() { QColor *color = buttonBar->fontColorMenuWidget->getColor(); if (color->isValid()) { this->editor->page()->mainFrame()->evaluateJavaScript( "document.execCommand('foreColor', false, '"+color->name()+"');"); editor->setFocus(); microFocusChanged(); } } void NBrowserWindow::insertLinkButtonPressed() { QString text = editor->selectedText().trimmed(); if (text == "" && currentHyperlink == "") return; InsertLinkDialog dialog(insertHyperlink); // If we have a link already highlighted, set it to the dialog. if (text.startsWith("http://", Qt::CaseInsensitive) || text.startsWith("https://", Qt::CaseInsensitive) || text.startsWith("ftp://", Qt::CaseInsensitive) || text.startsWith("mailto:", Qt::CaseInsensitive)) { dialog.setUrl(text); } if (currentHyperlink != NULL && currentHyperlink != "") { dialog.setUrl(currentHyperlink); } dialog.exec(); if (!dialog.okButtonPressed()) { return; } // Take care of inserting new links if (insertHyperlink) { QString selectedText = editor->selectedText().replace("'","\\'"); if (dialog.getUrl().trimmed() == "") return; QString durl = dialog.getUrl().trimmed().replace("'","\\'"); QString url = QString("%3").arg(durl,durl,selectedText); QString script = QString("document.execCommand('insertHtml', false, '%1')").arg(url); editor->page()->mainFrame()->evaluateJavaScript(script); return; } QString x = dialog.getUrl(); // Edit existing links QString js = "function getCursorPos() {" "var cursorPos;" "if (window.getSelection) {" " var selObj = window.getSelection();" " var selRange = selObj.getRangeAt(0);" " var workingNode = window.getSelection().anchorNode.parentNode;" " while(workingNode != null) { " " if (workingNode.nodeName.toLowerCase()=='a') workingNode.setAttribute('href','"; js = js + dialog.getUrl() +QString("');") +QString(" workingNode = workingNode.parentNode;") +QString(" }") +QString("}") +QString("} getCursorPos();"); editor->page()->mainFrame()->evaluateJavaScript(js); if (dialog.getUrl().trimmed() != "" ) { contentChanged(); return; } // Remove URL js = QString( "function getCursorPos() {") + QString("var cursorPos;") + QString("if (window.getSelection) {") + QString(" var selObj = window.getSelection();") + QString(" var selRange = selObj.getRangeAt(0);") + QString(" var workingNode = window.getSelection().anchorNode.parentNode;") + QString(" while(workingNode != null) { ") + QString(" if (workingNode.nodeName.toLowerCase()=='a') { ") + QString(" workingNode.removeAttribute('href');") + QString(" workingNode.removeAttribute('title');") + QString(" var text = document.createTextNode(workingNode.innerText);") + QString(" workingNode.parentNode.insertBefore(text, workingNode);") + QString(" workingNode.parentNode.removeChild(workingNode);") + QString(" }") + QString(" workingNode = workingNode.parentNode;") + QString(" }") + QString("}") + QString("} getCursorPos();"); editor->page()->mainFrame()->evaluateJavaScript(js); contentChanged(); } void NBrowserWindow::removeLinkButtonPressed() { // Remove URL QString js = QString( "function getCursorPos() {") + QString("var cursorPos;") + QString("if (window.getSelection) {") + QString(" var selObj = window.getSelection();") + QString(" var selRange = selObj.getRangeAt(0);") + QString(" var workingNode = window.getSelection().anchorNode.parentNode;") + QString(" while(workingNode != null) { ") + QString(" if (workingNode.nodeName.toLowerCase()=='a') { ") + QString(" workingNode.removeAttribute('href');") + QString(" workingNode.removeAttribute('title');") + QString(" var text = document.createTextNode(workingNode.innerText);") + QString(" workingNode.parentNode.insertBefore(text, workingNode);") + QString(" workingNode.parentNode.removeChild(workingNode);") + QString(" }") + QString(" workingNode = workingNode.parentNode;") + QString(" }") + QString("}") + QString("} getCursorPos();"); editor->page()->mainFrame()->evaluateJavaScript(js); contentChanged(); } void NBrowserWindow::insertQuickLinkButtonPressed() { QString text = editor->selectedText(); if (text.trimmed() == "") return; NoteTable ntable(global.db); QList lids; if (!ntable.findNotesByTitle(lids, text)) if (!ntable.findNotesByTitle(lids, text.trimmed()+"%")) if (!ntable.findNotesByNotebook(lids, "%"+text.trimmed()+"%")) return; Note n; // If we have a good return, then we can paste the link, otherwise we fall out // to a normal paste. if (ntable.get(n, lids[0],false, false)) { UserTable utable(global.db); User user; utable.getUser(user); QString href = "evernote:///view/" + QString::number(user.id) + QString("/") + user.shardId +QString("/") + n.guid +QString("/") + n.guid + QString("/"); QString url = QString("") +text +QString(""); QString script = QString("document.execCommand('insertHtml', false, '")+url+QString("');"); editor->page()->mainFrame()->evaluateJavaScript(script); return; } } void NBrowserWindow::insertLatexButtonPressed() { this->editLatex(""); } void NBrowserWindow::insertTableButtonPressed() { TableDialog dialog(this); dialog.exec(); if (!dialog.isOkPressed()) { return; } int cols = dialog.getCols(); int rows = dialog.getRows(); int width = dialog.getWidth(); bool percent = dialog.isPercent(); QString tableStyle = "style=\"-evernote-table:true;border-collapse:collapse;width:%1;table-layout:fixed;margin-left:0px;\""; QString cellStyle = "style=\"border-style:solid;border-width:1px;border-color:rgb(211,211,211);padding:10px;margin:0px;width:33.33%;\""; QString newHTML = QString(""; for (int i=0; i"; for (int j=0; j "; } newHTML = newHTML +""; } newHTML = newHTML+"
"; QString script = "document.execCommand('insertHtml', false, '"+newHTML+"');"; editor->page()->mainFrame()->evaluateJavaScript(script); contentChanged(); } void NBrowserWindow::insertTableRowButtonPressed() { QString js ="function insertTableRow() {" " var selObj = window.getSelection();" " var selRange = selObj.getRangeAt(0);" " var workingNode = window.getSelection().anchorNode.parentNode;" " var cellCount = 0;" " while(workingNode != null) { " " if (workingNode.nodeName.toLowerCase()=='tr') {" " row = document.createElement('TR');" " var nodes = workingNode.getElementsByTagName('td');" " var style = '';" " for (j=0; jpage()->mainFrame()->evaluateJavaScript(js); contentChanged(); } void NBrowserWindow::insertTableColumnButtonPressed() { if (!editor->insertTableColumnAction->isEnabled()) return; QString js = "function insertTableColumn() {" " var selObj = window.getSelection();" " var selRange = selObj.getRangeAt(0);" " var workingNode = window.getSelection().anchorNode.parentNode;" " var current = 0;" " var style = '';" " while (workingNode.nodeName.toLowerCase() != 'table' && workingNode != null) {" " if (workingNode.nodeName.toLowerCase() == 'td') {" " var td = workingNode;" " if (style == '' && td.hasAttribute('style')) style = td.attributes['style'].value;" " while (td.previousSibling != null) { " " current = current+1; td = td.previousSibling;" " }" " }" " workingNode = workingNode.parentNode; " " }" " if (workingNode == null) return;" " for (var i=0; ipage()->mainFrame()->evaluateJavaScript(js); contentChanged(); } void NBrowserWindow::tablePropertiesButtonPressed() { if (!editor->tablePropertiesAction->isEnabled()) return; tableCellStyle = ""; tableStyle = ""; // First go through the table & find the existing cell & table attributes QString js = "function tableProperties() {" " var selObj = window.getSelection();" " var selRange = selObj.getRangeAt(0);" " var workingNode = window.getSelection().anchorNode.parentNode;" " var current = 0;" " var style = '';" " while (workingNode.nodeName.toLowerCase() != 'table' && workingNode != null) {" " if (workingNode.nodeName.toLowerCase() == 'td') {" " var td = workingNode;" " if (style == '' && td.hasAttribute('style')) style = td.attributes['style'].value;" " while (td.previousSibling != null) { " " current = current+1; td = td.previousSibling;" " }" " }" " workingNode = workingNode.parentNode; " " }" " if (workingNode == null) return;" " window.browserWindow.setTableCellStyle(style);" " window.browserWindow.printNodeName(style);" " if (workingNode.hasAttribute('style')) {" " var td = workingNode;" " style = td.attributes['style'].value;" " window.browserWindow.setTableStyle(style);" " }" "} tableProperties();"; editor->page()->mainFrame()->evaluateJavaScript(js); QLOG_DEBUG() << this->tableStyle; QLOG_DEBUG() << this->tableCellStyle; TablePropertiesDialog dialog(tableStyle, tableCellStyle); dialog.exec(); if (!dialog.okButtonPressed) return; QString newTableStyle = dialog.getTableCss(); QString newCellStyle = dialog.getCellCss(); // Go through the table & change the styles attributes. js = "function setTableProperties() {" " var selObj = window.getSelection();" " var selRange = selObj.getRangeAt(0);" " var workingNode = window.getSelection().anchorNode.parentNode;" " var style = '';" " while (workingNode.nodeName.toLowerCase() != 'table' && workingNode != null) {" " if (workingNode.nodeName.toLowerCase() == 'td') {" " var td = workingNode;" " while (td.previousSibling != null) { " " td = td.previousSibling;" " }" " }" " workingNode = workingNode.parentNode; " " }" " if (workingNode == null) return;" " workingNode.attributes['style'].value = '%1';" " window.browserWindow.setTableCellStyle(style);" " var rowCount = workingNode.rows.length;" " for (var i=0; ipage()->mainFrame()->evaluateJavaScript(js); this->editor->isDirty = true; microFocusChanged(); } void NBrowserWindow::deleteTableRowButtonPressed() { if (!editor->deleteTableRowAction->isEnabled()) return; QString js = "function deleteTableRow() {" " var selObj = window.getSelection();" " var selRange = selObj.getRangeAt(0);" " var workingNode = window.getSelection().anchorNode.parentNode;" " var cellCount = 0;" " while(workingNode != null) { " " if (workingNode.nodeName.toLowerCase()=='tr') {" " workingNode.parentNode.removeChild(workingNode);" " return;" " }" " workingNode = workingNode.parentNode;" " }" "} deleteTableRow();"; editor->page()->mainFrame()->evaluateJavaScript(js); contentChanged(); } void NBrowserWindow::deleteTableColumnButtonPressed() { if (!editor->deleteTableColumnAction->isEnabled()) return; QString js = "function deleteTableColumn() {" " var selObj = window.getSelection();" " var selRange = selObj.getRangeAt(0);" " var workingNode = window.getSelection().anchorNode.parentNode;" " var current = 0;" " while (workingNode.nodeName.toLowerCase() != 'table' && workingNode != null) {" " if (workingNode.nodeName.toLowerCase() == 'td') {" " var td = workingNode;" " while (td.previousSibling != null) { " " current = current+1; td = td.previousSibling;" " }" " }" " workingNode = workingNode.parentNode; " " }" " if (workingNode == null) return;" " for (var i=0; ipage()->mainFrame()->evaluateJavaScript(js); contentChanged(); } void NBrowserWindow::rotateImageLeftButtonPressed() { rotateImage(-90.0); } void NBrowserWindow::rotateImageRightButtonPressed() { rotateImage(90.0); } void NBrowserWindow::rotateImage(qreal degrees) { // rotate the image QWebSettings::setMaximumPagesInCache(0); QWebSettings::setObjectCacheCapacities(0, 0, 0); QImage image(global.fileManager.getDbaDirPath() +selectedFileName); QMatrix matrix; matrix.rotate( degrees ); image = image.transformed(matrix); image.save(global.fileManager.getDbaDirPath() +selectedFileName); editor->setHtml(editor->page()->mainFrame()->toHtml()); // Now, we need to update the note's MD5 QFile f(global.fileManager.getDbaDirPath() +selectedFileName); f.open(QIODevice::ReadOnly); QByteArray filedata = f.readAll(); QCryptographicHash hash(QCryptographicHash::Md5); QByteArray b = hash.hash(filedata, QCryptographicHash::Md5); updateImageHash(b); // Reload the web page editor->triggerPageAction(QWebPage::ReloadAndBypassCache); contentChanged(); } void NBrowserWindow::updateImageHash(QByteArray newhash) { QString content = editor->page()->mainFrame()->toHtml(); int pos = content.indexOf("", pos); QString section = content.mid(pos, endPos-pos); if (section.contains("lid=\"" +QString::number(selectedFileLid) + "\"")) { ResourceTable rtable(global.db); QString oldhash = section.mid(section.indexOf("hash=\"")+6); oldhash = oldhash.mid(0,oldhash.indexOf("\"")); section.replace(oldhash, newhash.toHex()); QString newcontent = content.mid(0,pos) +section +content.mid(endPos); QByteArray c; c.append(newcontent); editor->page()->mainFrame()->setContent(c); rtable.updateResourceHash(selectedFileLid, newhash); return; } } } void NBrowserWindow::imageContextMenu(QString l, QString f) { editor->downloadAttachmentAction()->setEnabled(true); editor->rotateImageRightAction->setEnabled(true); editor->rotateImageLeftAction->setEnabled(true); editor->openAction->setEnabled(true); editor->downloadImageAction()->setEnabled(true); selectedFileName = f; selectedFileLid = l.toInt(); } void NBrowserWindow::attachFile() { QFileDialog fileDialog; if (attachFilePath != "") fileDialog.setDirectory(attachFilePath); else fileDialog.setDirectory(QDir::homePath()); fileDialog.setFileMode(QFileDialog::ExistingFiles); //connect(&fileDialog, SIGNAL(fileSelected(QString)), this, SLOT(attachFileSelected(QString))); //fileDialog.exec(); QStringList list = fileDialog.getOpenFileNames(); for (int i=0; iboldButtonWidget->setDown(false); buttonBar->italicButtonWidget->setDown(false); buttonBar->underlineButtonWidget->setDown(false); editor->openAction->setEnabled(false); editor->downloadAttachmentAction()->setEnabled(false); editor->rotateImageLeftAction->setEnabled(false); editor->rotateImageRightAction->setEnabled(false); editor->insertTableAction->setEnabled(true); editor->insertTableColumnAction->setEnabled(false); editor->insertTableRowAction->setEnabled(false); editor->tablePropertiesAction->setEnabled(false); editor->deleteTableRowAction->setEnabled(false); editor->deleteTableColumnAction->setEnabled(false); editor->insertLinkAction->setText(tr("Insert Link")); editor->removeLinkAction->setEnabled(false); editor->insertQuickLinkAction->setEnabled(true); editor->rotateImageRightAction->setEnabled(false); editor->rotateImageLeftAction->setEnabled(false); // QLOG_DEBUG() << editor->page()->inputMethodQuery(Qt::ImCursorPosition).toInt(); // QLOG_DEBUG() << editor->page()->inputMethodQuery(Qt::ImSurroundingText).toString(); insertHyperlink = true; currentHyperlink =""; insideList = false; insideTable = false; insideEncryption = false; forceTextPaste = false; insidePre = false; if (editor->selectedText().trimmed().length() > 0 && global.javaFound) editor->encryptAction->setEnabled(true); else editor->encryptAction->setEnabled(false); // +QString(" window.browserWindow.printNodeName(workingNode.firstChild.nodeValue);") QString js = QString("function getCursorPos() {") +QString("var cursorPos;") +QString("var insideUrl=false;") +QString("if (window.getSelection) {") +QString(" var selObj = window.getSelection();") +QString(" var selRange = selObj.getRangeAt(0);") +QString(" var workingNode = window.getSelection().anchorNode.parentNode;") //+QString(" window.browserWindow.printNodeName(workingNode.nodeName);") +QString(" while(workingNode != null) { ") //+QString(" window.browserWindow.printNodeName(workingNode.nodeName);") +QString(" if (workingNode.nodeName=='TABLE') {") +QString(" if (workingNode.getAttribute('class').toLowerCase() == 'en-crypt-temp') window.browserWindow.insideEncryptionArea();") +QString(" }") +QString(" if (workingNode.nodeName=='PRE') window.browserWindow.setInsidePre();") +QString(" if (workingNode.nodeName=='B') window.browserWindow.boldActive();") +QString(" if (workingNode.nodeName=='I') window.browserWindow.italicsActive();") +QString(" if (workingNode.nodeName=='U') window.browserWindow.underlineActive();") +QString(" if (workingNode.nodeName=='UL') window.browserWindow.setInsideList();") +QString(" if (workingNode.nodeName=='OL') window.browserWindow.setInsideList();") +QString(" if (workingNode.nodeName=='LI') window.browserWindow.setInsideList();") +QString(" if (workingNode.nodeName=='TBODY') window.browserWindow.setInsideTable();") +QString(" if (workingNode.nodeName=='A') {") +QString(" insideUrl = true;") +QString(" for(var x = 0; x < workingNode.attributes.length; x++ ) {") +QString(" if (workingNode.attributes[x].nodeName.toLowerCase() == 'href')") +QString(" window.browserWindow.setInsideLink(workingNode.attributes[x].nodeValue);") +QString(" }") +QString(" }") +QString(" if (workingNode.nodeName=='SPAN') {") +QString(" if (workingNode.getAttribute('style') == 'text-decoration: underline;') window.browserWindow.underlineActive();") +QString(" }") +QString(" workingNode = workingNode.parentNode;") +QString(" }") +QString("}") +QString("} getCursorPos();"); editor->page()->mainFrame()->evaluateJavaScript(js); QString js2 = QString("function getFontSize() {") + QString(" var node = document.getSelection().anchorNode;") + QString(" var anchor = (node.nodeType == 3 ? node.parentNode : node);") + QString(" var size = window.getComputedStyle(anchor,null)[\"fontSize\"];") + QString(" var font = window.getComputedStyle(anchor,null)[\"fontFamily\"];") + QString(" window.browserWindow.changeDisplayFontSize(size);") + QString(" window.browserWindow.changeDisplayFontName(font);") + QString("} getFontSize();"); editor->page()->mainFrame()->evaluateJavaScript(js2); saveTimer.setInterval(global.autoSaveInterval); saveTimer.start(); } void NBrowserWindow::printNodeName(QString v) { QLOG_DEBUG() << v; } // Tab button pressed void NBrowserWindow::tabPressed() { if (insideEncryption) return; if (!insideList && !insideTable) { QString script_start = "document.execCommand('insertHtml', false, '     ');"; editor->page()->mainFrame()->evaluateJavaScript(script_start); return; } if (insideList) { shiftRightButtonPressed(); } if (insideTable) { QString js = "function getCursorPosition() { " " var selObj = window.getSelection();" " var selRange = selObj.getRangeAt(0);" " var workingNode = window.getSelection().anchorNode;" " var rowCount = 0;" " var colCount = 0;" " while(workingNode != null && workingNode.nodeName.toLowerCase() != 'table') { " " if (workingNode.nodeName.toLowerCase()=='tr') {" " rowCount = rowCount+1;" " }" " if (workingNode.nodeName.toLowerCase() == 'td') {" " colCount = colCount+1;" " }" " if (workingNode.previousSibling != null)" " workingNode = workingNode.previousSibling;" " else " " workingNode = workingNode.parentNode;" " }" " var nodes = workingNode.getElementsByTagName('tr');" " var tableRows = nodes.length;" " nodes = nodes[0].getElementsByTagName('td');" " var tableColumns = nodes.length;" " window.browserWindow.setTableCursorPositionTab(rowCount, colCount, tableRows, tableColumns);" "} getCursorPosition();"; editor->page()->mainFrame()->evaluateJavaScript(js); } } // Backtab pressed. void NBrowserWindow::backtabPressed() { if (insideEncryption) return; if (insideList) shiftLeftButtonPressed(); if (insideTable) { QString js = "function getCursorPosition() { " " var selObj = window.getSelection();" " var selRange = selObj.getRangeAt(0);" " var workingNode = window.getSelection().anchorNode;" " var rowCount = 0;" " var colCount = 0;" " while(workingNode != null && workingNode.nodeName.toLowerCase() != 'table') { " " if (workingNode.nodeName.toLowerCase()=='tr') {" " rowCount = rowCount+1;" " }" " if (workingNode.nodeName.toLowerCase() == 'td') {" " colCount = colCount+1;" " }" " if (workingNode.previousSibling != null)" " workingNode = workingNode.previousSibling;" " else " " workingNode = workingNode.parentNode;" " }" " var nodes = workingNode.getElementsByTagName('tr');" " var tableRows = nodes.length;" " nodes = nodes[0].getElementsByTagName('td');" " var tableColumns = nodes.length;" " window.browserWindow.setTableCursorPositionBackTab(rowCount, colCount, tableRows, tableColumns);" "} getCursorPosition();"; editor->page()->mainFrame()->evaluateJavaScript(js); } } // Backtab pressed. bool NBrowserWindow::enterPressed() { if (!insidePre) return false; QString script = "document.execCommand('insertHTML', false, ' ');"; editor->page()->mainFrame()->evaluateJavaScript(script); return true; // QKeyEvent *down = new QKeyEvent(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier); // QCoreApplication::postEvent(editor->editorPage, down); } // If a user presses backtab from within a table void NBrowserWindow::setTableCursorPositionBackTab(int currentRow, int currentCol, int tableRows, int tableColumns) { // suppress unused warninsg Q_UNUSED(tableRows); Q_UNUSED(tableColumns); // Determine what key to emulate. if (currentRow == 1 && currentCol == 1) { return; } QKeyEvent *up = new QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier); QCoreApplication::postEvent(editor->editorPage, up); } // If a user presses backtab from within a table void NBrowserWindow::setTableCursorPositionTab(int currentRow, int currentCol, int tableRows, int tableColumns) { if (currentRow == tableRows && currentCol == tableColumns) { this->insertTableRowButtonPressed(); } QKeyEvent *down = new QKeyEvent(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier); QCoreApplication::postEvent(editor->editorPage, down); } // Set the background color of a note void NBrowserWindow::setBackgroundColor(QString value) { QString js = QString("function changeBackground(color) {") +QString("document.body.style.background = color;") +QString("}") +QString("changeBackground('" +value+"');"); editor->page()->mainFrame()->evaluateJavaScript(js); NoteTable noteTable(global.db); noteTable.setDirty(this->lid, true); this->editor->isDirty = true; editor->setFocus(); microFocusChanged(); } // The user clicked a link in the note void NBrowserWindow::linkClicked(const QUrl url) { if (url.toString().startsWith("latex:///", Qt::CaseInsensitive)) { editLatex(url.toString().mid(9)); return; } if (url.toString().startsWith("evernote:/view/", Qt::CaseInsensitive) || url.toString().startsWith("evernote:///view/", Qt::CaseInsensitive)) { QStringList tokens; if (url.toString().startsWith("evernote:/view/", Qt::CaseInsensitive)) tokens = url.toString().replace("evernote:/view/", "").split("/", QString::SkipEmptyParts); else tokens = url.toString().replace("evernote:///view/", "").split("/", QString::SkipEmptyParts); QString oguid =tokens[2]; QString eguid = tokens[3]; NoteTable ntable(global.db); qint32 newlid = ntable.getLid(eguid); if (newlid <= 0) newlid = ntable.getLid(oguid); if (newlid <= 0) return; bool newExternalWindow = false; bool newTab = false; if (QApplication::keyboardModifiers() & Qt::ShiftModifier) { if (global.getMiddleClickAction() == MOUSE_MIDDLE_CLICK_NEW_WINDOW) newExternalWindow = true; else newTab = true; } else { // Setup a new filter FilterCriteria *criteria = new FilterCriteria(); global.filterCriteria[global.filterPosition]->duplicate(*criteria); criteria->unsetSelectedNotes(); criteria->unsetLid(); criteria->setLid(newlid); global.appendFilter(criteria); global.filterPosition++; } emit(evernoteLinkClicked(newlid, newTab, newExternalWindow)); return; } if (url.toString().startsWith("nnres:", Qt::CaseInsensitive)) { if (url.toString().endsWith("/vnd.evernote.ink")) { QMessageBox::information(this, tr("Unable Open"), QString(tr("This is an ink note.\nInk notes are not supported since Evernote has not\n published any specifications on them\nand I'm too lazy to figure them out by myself."))); return; } QString filepath = global.fileManager.getDbaDirPath(); // Windows check #ifdef _WIN32 filepath = filepath.replace("\\", "/"); #endif // End windows check QString fullName = url.toString().mid(6).replace(filepath,""); filepath = filepath.replace("\\", "/"); QLOG_DEBUG() << global.fileManager.getDbaDirPath(); int index = fullName.lastIndexOf("."); QString guid = ""; if (index != -1) { guid = fullName.mid(0,index); } else guid = fullName; QDirIterator dirIt(global.fileManager.getDbaDirPath()); QString fileUrl = ""; while (dirIt.hasNext()) { if (QFileInfo(dirIt.filePath()).isFile() && QFileInfo(dirIt.filePath()).baseName() == guid) { fileUrl = dirIt.fileName(); } dirIt.next(); } if (fileUrl == "") return; fileUrl = global.fileManager.getDbaDirPath()+fileUrl; // Windows check #ifdef _WIN32 fileUrl = fileUrl.replace("\\", "/"); #endif // End windows check global.resourceWatcher->addPath(fileUrl); QDesktopServices::openUrl(fileUrl); return; } QDesktopServices::openUrl(url); } // show/hide view source window void NBrowserWindow::showSource(bool value) { setSource(); sourceEdit->setVisible(value); sourceEditorTimer->setInterval(1000); if (!value) sourceEditorTimer->stop(); else sourceEditorTimer->start(); } // Toggle the show source button void NBrowserWindow::toggleSource() { if (sourceEdit->isVisible()) showSource(false); else showSource(true); } // Clear out the window's contents void NBrowserWindow::clear() { sourceEdit->blockSignals(true); editor->blockSignals(true); sourceEdit->setPlainText(""); editor->setContent(""); sourceEdit->setReadOnly(true); editor->page()->setContentEditable(false); lid = -1; editor->blockSignals(false); sourceEdit->blockSignals(false); noteTitle.blockSignals(true); noteTitle.setTitle(-1, "", ""); noteTitle.blockSignals(false); tagEditor.blockSignals(true); tagEditor.clear(); tagEditor.blockSignals(false); // authorEditor.blockSignals(true); // authorEditor.setText(""); // authorEditor.blockSignals(false); urlEditor.blockSignals(true); urlEditor.setUrl(-1, ""); urlEditor.blockSignals(false); // dateEditor.setEnabled(false); // editor->page()->setContentEditable(false); dateEditor.clear(); } // Set the source for the "show source" button void NBrowserWindow::setSource() { if (sourceEdit->hasFocus()) return; QString text = editor->editorPage->mainFrame()->toHtml(); sourceEdit->blockSignals(true); int body = text.indexOf("",body); if (body != -1) { sourceEditHeader =text.mid(0, body+1); text = text.mid(body+1); } } text = text.replace("", ""); sourceEdit->setPlainText(text); // sourceEdit->setReadOnly(true); sourceEdit->setReadOnly(!editor->page()->isContentEditable()); sourceEdit->blockSignals(false); } // Expose the programs to the javascript process void NBrowserWindow::exposeToJavascript() { editor->page()->mainFrame()->addToJavaScriptWindowObject("browserWindow", this); } // If we are within bold text, set the bold button active void NBrowserWindow::boldActive() { buttonBar->boldButtonWidget->setDown(true); } // If we are within italics text, make the text button active void NBrowserWindow::italicsActive() { buttonBar->italicButtonWidget->setDown(true); } // If we are within encrypted text, make sure we force a paste text void NBrowserWindow::insideEncryptionArea() { insideEncryption = true; forceTextPaste = true; } // If we are within underlined text, make the button active void NBrowserWindow::underlineActive() { buttonBar->underlineButtonWidget->setDown(true); } // Set true if we are within some type of list void NBrowserWindow::setInsideList() { insideList = true; } // If we are inside a pre-formatted tag
void NBrowserWindow::setInsidePre() {
    this->insidePre = true;
}



// If we are within a table, set the menu options active
void NBrowserWindow::setInsideTable() {
    editor->insertTableAction->setEnabled(false);
    editor->insertTableRowAction->setEnabled(true);
    editor->tablePropertiesAction->setEnabled(true);
    editor->insertTableColumnAction->setEnabled(true);
    editor->deleteTableRowAction->setEnabled(true);
    editor->deleteTableColumnAction->setEnabled(true);
    editor->encryptAction->setEnabled(false);
    insideTable = true;
}


// Set if we are within a link
void NBrowserWindow::setInsideLink(QString link) {
    currentHyperlink = link;
    editor->insertLinkAction->setText(tr("Edit Link"));
    editor->removeLinkAction->setEnabled(true);
    currentHyperlink = link;
    insertHyperlink = false;
}




// Edit a LaTeX formula
void NBrowserWindow::editLatex(QString guid) {
    QString text = editor->selectedText();
    QString oldFormula = "";
    if (text.trimmed() == "\n" || text.trimmed() == "") {
        InsertLatexDialog dialog;
        if (guid.trimmed() != "") {
            Resource r;
            ResourceTable resTable(global.db);
            resTable.get(r, guid.toInt(), false);
            if (r.attributes.isSet()) {
                ResourceAttributes attributes;
                attributes = r.attributes;
                if (attributes.sourceURL.isSet()) {
                    QString formula = attributes.sourceURL;
                    formula = formula.replace("http://latex.codecogs.com/gif.latex?", "");
                    oldFormula = formula;
                    dialog.setFormula(formula);
                }
            }
        }
        dialog.exec();
        if (!dialog.okPressed()) {
            return;
        }
        text = dialog.getFormula().trimmed();
    }

    ConfigStore cs(global.db);
    qint32 newlid = cs.incrementLidCounter();
    Resource r;
    NoteTable ntable(global.db);
    ResourceTable rtable(global.db);
    QString outfile = global.fileManager.getDbaDirPath() + QString::number(newlid) +QString(".gif");

    // Run it through "mimetex" to create the gif
    QProcess latexProcess;
    QStringList args;
    args.append("-e");
    args.append(outfile);
    args.append(text);
    QLOG_DEBUG() << "Formula:" << "mimetex -e "+outfile +" '" +text +"'";
    //latexProcess.start(formula, QIODevice::ReadWrite|QIODevice::Unbuffered);
    latexProcess.start("mimetex", args, QIODevice::ReadWrite|QIODevice::Unbuffered);

    latexProcess.waitForStarted();
    latexProcess.waitForFinished();
    QLOG_DEBUG() << " LaTeX Return Code: " << latexProcess.state();
    QLOG_DEBUG() << "mimetex Errors:" << latexProcess.readAllStandardError();
    QLOG_DEBUG() << "mimetex Output:" << latexProcess.readAllStandardOutput();

    // Now, check if the file exists.  If it does, we continue to create the resource
    QFile f(outfile);
    if (!f.exists()) {
        QMessageBox msgBox;
        msgBox.setText(tr("Unable to create LaTeX image"));
        msgBox.setInformativeText(tr("Unable to create LaTeX image.  Are you sure mimetex is installed?"));
        msgBox.setStandardButtons(QMessageBox::Ok);
        msgBox.setIcon(QMessageBox::Critical);
        msgBox.setDefaultButton(QMessageBox::Ok);
        msgBox.exec();
        return;
    }
    f.open(QIODevice::ReadOnly);
    QByteArray data = f.readAll();
    f.close();
    f.open(QIODevice::ReadOnly);
    QCryptographicHash md5hash(QCryptographicHash::Md5);
    QByteArray hash = md5hash.hash(data, QCryptographicHash::Md5);

    Data d;
    if (r.data.isSet())
        d = r.data;
    d.body = f.read(data.size());
    r.data = d;
    f.close();
    d.bodyHash = hash;
    d.size = data.size();
    r.data = d;

    r.guid = QString::number(newlid);
    r.noteGuid = ntable.getGuid(lid);

    r.mime = "image/gif";
    r.active = true;
    r.updateSequenceNum = 0;
    r.width = 0;
    r.height = 0;
    r.duration = 0;

    ResourceAttributes a;
    a.attachment = false;
    a.sourceURL = "http://latex.codecogs.com/gif.latex?" +text;
    r.attributes = a;

    rtable.add(newlid, r, true, lid);

    // do the actual insert into the note

    QString buffer;
    buffer.append("");
    buffer.append("");

    // If this is a new formula, we insert it, otherwise we replace the old one.
    if (oldFormula == "") {
        QString script_start = "document.execCommand('insertHTML', false, '";
        QString script_end = "');";

        editor->page()->mainFrame()->evaluateJavaScript(
                script_start + buffer + script_end);
    } else {
        QString oldHtml = editor->page()->mainFrame()->toHtml();
        int startPos = oldHtml.indexOf("", startPos);
            if (endPos != -1) {
                QString slice = oldHtml.mid(startPos, endPos-startPos+4);
                if (slice.contains("lid=\""+guid+"\"") && slice.contains("en-latex")) {
                    oldHtml.replace(slice, buffer);
                }
                startPos = oldHtml.indexOf("page()->mainFrame()->setHtml(oldHtml);
            }
        }
	editor->reload();
	contentChanged();
    }
}


// Set the focus to the note title
void NBrowserWindow::focusTitle() {
    this->noteTitle.setFocus();
}


// Set the focus to the note
void NBrowserWindow::focusNote() {
    this->editor->setFocus();
}


// Insert the date/time into a note
void NBrowserWindow::insertDatetime() {
    QDateTime dt = QDateTime::currentDateTime();
    QLocale locale;
    QString dts = dt.toString(locale.dateTimeFormat(QLocale::ShortFormat));

    editor->page()->mainFrame()->evaluateJavaScript(
        "document.execCommand('insertHtml', false, '"+dts+"');");
    editor->setFocus();
}



// Insert an image into the editor
void NBrowserWindow::insertImage(const QMimeData *mime) {

    // Get the image from the clipboard and save it into a QByteArray
    // that can be saved
    QImage img = qvariant_cast(mime->imageData());
//    QClipboard *clipboard = global.clipboard;
//    QImage img = clipboard->pixmap().toImage();
    QByteArray imageBa;
    QBuffer b(&imageBa);
    b.open(QIODevice::WriteOnly);
    img.save(&b, "PNG");

    QString script_start = "document.execCommand('insertHTML', false, '";
    QString script_end = "');";

    Resource newRes;
    qint32 rlid = createResource(newRes, 0, imageBa, "image/png", false, "");
    if (rlid <= 0)
        return;

    // The resource is done, now we need to add it to the
    // note body
    QString g =  QString::number(rlid)+QString(".png");
    QString path = global.fileManager.getDbaDirPath() + g;

    // do the actual insert into the note
    QString buffer;
    Data d;
    if (newRes.data.isSet())
        d =newRes.data;
    QByteArray hash;
    if (d.bodyHash.isSet())
         hash = d.bodyHash;
    buffer.append("");

    // Insert the actual note
    editor->page()->mainFrame()->evaluateJavaScript(
            script_start + buffer + script_end);

    return;
}


// Create  a new resource and add it to the database
qint32 NBrowserWindow::createResource(Resource &r, int sequence, QByteArray data,  QString mime, bool attachment, QString filename) {
    ConfigStore cs(global.db);
    qint32 rlid = cs.incrementLidCounter();

    QByteArray hash = QCryptographicHash::hash(data, QCryptographicHash::Md5);

    QString guid =  QString::number(rlid);
    NoteTable noteTable(global.db);
    r.guid = guid;
    r.noteGuid = noteTable.getGuid(lid);
    QString noteguid = r.noteGuid;
    if (noteguid == "")
        return 0;
    r.mime = mime;
    r.active = true;
    r.updateSequenceNum = sequence;
    r.width = 0;
    r.height = 0;
    r.duration = 0;
    ResourceAttributes a;
    if (r.attributes.isSet())
        a = r.attributes;
    a.attachment = attachment;
    if (filename != "") {
        a.fileName = filename;
    }

    Data d;
    d.body = data;
    d.bodyHash = hash;
    d.size = data.size();

    r.data = d;
    r.attributes = a;
    ResourceTable resourceTable(global.db);
    resourceTable.add(rlid, r, true, lid);

    return rlid;
}




// Prepare the email for sending.  This function scans through
// the email for images & attachments.  The resulting
// MimeMessage has all of the email contents.
void NBrowserWindow::prepareEmailMessage(MimeMessage *message, QString note) {
    MimeHtml *text = new MimeHtml();

    // Prepare the massage the same as if we were printing it.
    QString contents = this->stripContentsForPrint();
    QString textContents = editor->page()->currentFrame()->toPlainText();
    QStringList images;
    QStringList attachments;

    // Now, go thgough & reformat all the img tags.
    int cidCount=0;
    int pos = contents.indexOf("src=\"file:");
    while (pos>=0) {
        QString localFile = contents.mid(pos+13);
        int endPos = localFile.indexOf("\"");
        localFile = localFile.mid(0,endPos);
        images.append(localFile);
        endPos = pos+endPos;
        QString part1 = contents.mid(0,pos);
        QString part2 = contents.mid(endPos+14);
        cidCount++;
        contents = part1 + "src='cid:file" +QString::number(cidCount) +"'" + part2;

        pos = contents.indexOf("src=\"file:", pos+5);
    }

    // next, look for all the attachments
    pos = contents.indexOf("href=\"nnres:");
    while (pos != -1) {
        QString localFile = contents.mid(pos+12);
        int endPos = localFile.indexOf("\"");
        localFile = localFile.mid(0,endPos);
        attachments.append(localFile);
        cidCount++;
        pos = contents.indexOf("href=\"nnres:", pos+5);
    }

    // If the user adds a note, then prepend it to the beginning.
    if (note.trimmed() != "") {
        int pos = contents.indexOf("", pos);
        contents.insert(endPos+1,  Qt::escape(note)+"


"); } text->setHtml(contents); message->addPart(text); // Add all the images for (int i=0; isetContentName(ra.fileName); } file->setContentId("file"+QString::number(i+1)); file->setContentType(mime); message->addPart(file); } // Add all the attachments for (int i=0; isetContentName(ra.fileName); } file->setContentType(mime); message->addPart(file); } return; } // Email current note. void NBrowserWindow::emailNote() { global.settings->beginGroup("Email"); QString server = global.settings->value("smtpServer", "").toString(); int port = global.settings->value("smtpPort", 25).toInt(); QString smtpConnectionType = global.settings->value("smtpConnectionType", "TcpConnection").toString(); QString userid = global.settings->value("userid", "").toString(); QString password = global.settings->value("password", "").toString(); QString senderEmail = global.settings->value("senderEmail", "").toString(); QString senderName = global.settings->value("senderName", "").toString(); global.settings->endGroup(); if (senderEmail.trimmed() == "" || server.trimmed() == "") { QMessageBox::critical(this, tr("Setup Error"), tr("SMTP Server has not been setup.\n\nPlease specify server settings\nin the Preferences menu."), QMessageBox::Ok); return; } EmailDialog emailDialog; emailDialog.subject->setText(noteTitle.text()); emailDialog.exec(); if (emailDialog.cancelPressed) return; emit(setMessage(tr("Sending Email. Please be patient."))); QStringList toAddresses = emailDialog.getToAddresses(); QStringList ccAddresses = emailDialog.getCcAddresses(); QStringList bccAddresses = emailDialog.getBccAddresses(); if (senderName.trimmed() == "") senderName = senderEmail; SmtpClient::ConnectionType type = SmtpClient::TcpConnection; if (smtpConnectionType == "SslConnection") type = SmtpClient::SslConnection; if (smtpConnectionType == "TlsConnection") type = SmtpClient::TlsConnection; SmtpClient smtp(server, port, type); smtp.setResponseTimeout(-1); // We need to set the username (your email address) and password // for smtp authentication. smtp.setUser(userid); smtp.setPassword(password); // Now we create a MimeMessage object. This is the email. MimeMessage message; EmailAddress sender(senderEmail, senderName); message.setSender(&sender); for (int i=0; iisChecked()) { EmailAddress *cc = new EmailAddress(senderEmail, senderName); message.addRecipient(cc); } for (int i=0; itext().trimmed()); // Build the note content QString text = emailDialog.note->toPlainText(); prepareEmailMessage(&message, text); // Send the actual message. if (!smtp.connectToHost()) { QLOG_ERROR()<< "Failed to connect to host!"; QMessageBox::critical(this, tr("Connection Error"), tr("Unable to connect to host."), QMessageBox::Ok); return; } if (!smtp.login()) { QLOG_ERROR() << "Failed to login!"; QMessageBox::critical(this, tr("Login Error"), tr("Unable to login."), QMessageBox::Ok); return; } if (!smtp.sendMail(message)) { QMessageBox::critical(this, tr("Send Error"), tr("Unable to send email."), QMessageBox::Ok); QLOG_ERROR() << "Failed to send mail!"; return; } smtp.quit(); emit(setMessage("Message Sent")); // QMessageBox::information(this, tr("Message Sent"), tr("Message sent."), QMessageBox::Ok); } // Strip the contents from the current webview in preparation for printing. QString NBrowserWindow::stripContentsForPrint() { // Start removing object tags QString contents = this->editor->selectedHtml().trimmed(); if (contents == "") contents = editor->editorPage->mainFrame()->toHtml(); int pos = contents.indexOf("", pos); QString lidString = contents.mid(contents.indexOf("lid=", pos)+5); lidString = lidString.mid(0,lidString.indexOf("\" ")); #ifndef _WIN32 contents = contents.mid(0,pos) + "")+contents.mid(endPos+1); #else contents = contents.mid(0,pos) + "")+contents.mid(endPos+1); #endif pos = contents.indexOf(" tags & replaces them with . void NBrowserWindow::printPreviewNote() { QString contents = stripContentsForPrint(); // Load the print page. When it is ready the printReady() slot will // do the actual print printPreviewPage->setHtml(contents.toUtf8()); QPrinter printer(QPrinter::HighResolution); QPrintPreviewDialog preview(&printer, this); preview.setWindowFlags(Qt::Window); connect(&preview, SIGNAL(paintRequested(QPrinter *)), this, SLOT(printPreviewReady(QPrinter*))); preview.exec(); } // Slot for when the printPreview is ready. void NBrowserWindow::printPreviewReady(QPrinter *printer) { printPreviewPage->print(printer); } // Print the contents of a note. Basically it loops through the // note and replaces the tags with tags. The plugin // object should be creating temporary images for the print. void NBrowserWindow::printNote() { QString contents = stripContentsForPrint(); // Load the print page. When it is ready the printReady() slot will // do the actual print printPage->setDocumentTitle(editor->title()); printPage->setHtml(contents.toUtf8()); QPrinter *printer; global.settings->beginGroup("Printer"); QPrinter::Orientation orientation = static_cast(global.settings->value("orientation").toUInt()); QString name = global.settings->value("printerName", "").toString(); QPrinter::OutputFormat format = static_cast(global.settings->value("outputFormat", 0).toUInt()); QPrinter::PaperSize pageSize = static_cast(global.settings->value("pageSize", 2).toUInt()); QPrinter::ColorMode colorMode = static_cast(global.settings->value("colorMode", 1).toUInt()); QString fileName = global.settings->value("outputFileName", "").toString(); global.settings->endGroup(); bool error = false; printer = new QPrinter(); printer->setPageSize(pageSize); printer->setOutputFormat(format); printer->setOrientation(orientation); printer->setColorMode(colorMode); if (fastPrint) { if (format == QPrinter::PdfFormat) { if (fileName == "") error = true; else printer->setOutputFileName(fileName); } else { if (name == "") error = true; else printer->setPrinterName(name); } if (error) { fastPrint = false; // Re-initialize printer object so we don't have any bogus // values from settings. delete printer; printer = new QPrinter(); } } if (!fastPrint) { if (format == QPrinter::PdfFormat && fileName.trimmed() != "") printer->setOutputFileName(fileName); if (name.trimmed() != "") printer->setPrinterName(name); QPrintDialog dialog(printer); if (dialog.exec() == QDialog::Accepted) { printer = dialog.printer(); global.settings->beginGroup("Printer"); global.settings->setValue("orientation", printer->orientation()); global.settings->setValue("printerName", printer->printerName()); global.settings->setValue("outputFormat", printer->outputFormat()); global.settings->setValue("outputFileName", printer->outputFileName()); global.settings->setValue("pageSize", printer->pageSize()); global.settings->setValue("colorMode", printer->colorMode()); global.settings->endGroup(); printPage->print(printer); } } else { printPage->print(printer); // QTextDocument td; // td.setHtml(printPage->toHtml()); // td.setPageSize(printer->pageRect().size()); // QRect innerRect = printer->pageRect(); // innerRect.setTop(innerRect.top() + 20); // innerRect.setBottom(innerRect.bottom() - 30); // QRect contentRect = QRect(QPoint(0,0), td.size().toSize()); // QRect currentRect = QRect(QPoint(0,0), innerRect.size()); // QPainter painter(printer); // int count = 0; // painter.save(); // painter.translate(0, 30); // while (currentRect.intersects(contentRect) && count < td.pageCount()) { // td.drawContents(&painter, currentRect); // count++; // currentRect.translate(0, currentRect.height()); // painter.restore(); // painter.drawText(10, 10, editor->title()); // painter.drawText(10, printer->pageRect().bottom() - 10, QString("Page %1 of %2").arg(count).arg(td.pageCount())); // painter.save(); // painter.translate(0, -currentRect.height() * count + 30); // if (currentRect.intersects(contentRect) && count < td.pageCount()) // printer->newPage(); // } // painter.restore(); // painter.end(); } this->fastPrint = false; } void NBrowserWindow::noteSourceUpdated() { scrollPoint = editor->page()->mainFrame()->scrollPosition(); connect(editor, SIGNAL(loadFinished(bool)), this, SLOT(repositionAfterSourceEdit(bool))); QByteArray ba; QString source = sourceEdit->toPlainText(); //source = Qt::escape(source); ba.append(sourceEditHeader); ba.append(source); ba.append(""); editor->setContent(ba); this->editor->isDirty = true; emit noteContentEditedSignal(uuid, lid, editor->editorPage->mainFrame()->documentElement().toOuterXml()); } // Called after the source is edited and a reposition is needed to keep the page from being positioned at the top void NBrowserWindow::repositionAfterSourceEdit(bool) { editor->page()->mainFrame()->setScrollPosition(scrollPoint); disconnect(editor, SIGNAL(loadFinished(bool)), this, SLOT(repositionAfterSourceEdit(bool))); } // Update a resource's hash if it was edited somewhere else void NBrowserWindow::updateResourceHash(qint32 noteLid, QByteArray oldHash, QByteArray newHash) { if (noteLid != lid) return; QString content = editor->editorPage->mainFrame()->documentElement().toOuterXml(); // Start going through & looking for the old hash int pos = content.indexOf("", pos); // Find the matching end of the tag hashPos = content.indexOf(hashString, pos); if (hashPos < endPos && hashPos != -1) { // If we found the hash, begin the update QString startString = content.mid(0, hashPos); QString endString = content.mid(hashPos+hashString.length()); QString newContent = startString + "hash=\"" +newHash.toHex() +"\"" +endString; QByteArray byteArray; byteArray.append(newContent); editor->setContent(byteArray); noteUpdated(lid); return; } else { pos = content.indexOf("<", pos+1); } } } void NBrowserWindow::attachFileSelected(QString filename) { // Read in the file QFile file(filename); // Save prior path for future use QFileInfo fileInfo(file); attachFilePath = fileInfo.path(); file.open(QIODevice::ReadOnly); QByteArray ba = file.readAll(); file.close(); QString script_start = "document.execCommand('insertHTML', false, '"; QString script_end = "');"; MimeReference mimeRef; QString extension = filename; int endPos = filename.lastIndexOf("."); if (endPos != -1) extension = extension.mid(endPos); QString mime = mimeRef.getMimeFromExtension(extension); Resource newRes; bool attachment = true; if (mime == "application/pdf" || mime.startsWith("image/")) attachment = false; qint32 rlid = createResource(newRes, 0, ba, mime, attachment, QFileInfo(filename).fileName()); QByteArray hash; if (newRes.data.isSet()) { Data d = newRes.data; if (d.bodyHash.isSet()) hash = d.bodyHash; } if (rlid <= 0) return; // If we have an image, then insert it. if (mime.startsWith("image", Qt::CaseInsensitive)) { // The resource is done, now we need to add it to the // note body QString g = QString::number(rlid)+extension; QString path = global.fileManager.getDbaDirPath() + g; // do the actual insert into the note QString buffer; QByteArray hash = ""; if (newRes.data.isSet()) { Data d= newRes.data; if (d.bodyHash.isSet()) hash = d.bodyHash; } buffer.append(""); // Insert the actual image editor->page()->mainFrame()->evaluateJavaScript( script_start + buffer + script_end); return; } if (mime == "application/pdf" && global.pdfPreview) { // The resource is done, now we need to add it to the // note body QString g = QString::number(rlid)+extension; // do the actual insert into the note QString buffer; QByteArray hash; if (newRes.data.isSet()) { Data data = newRes.data; if (data.bodyHash.isSet()) hash = data.bodyHash; } buffer.append(""); // Insert the actual image editor->page()->mainFrame()->evaluateJavaScript( script_start + buffer + script_end); return; } // If we have something other than an image or PDF // First get the icon for this type of file AttachmentIconBuilder builder; QString g = global.fileManager.getDbaDirPath()+ QString::number(rlid)+extension; QString tmpFile = builder.buildIcon(rlid, filename); // do the actual insert into the note QString buffer; buffer.append(""); buffer.append(""); buffer.append(""); buffer.replace("\'", """); // Insert the actual attachment editor->page()->mainFrame()->evaluateJavaScript( script_start + buffer + script_end); } // Alarm has been completed void NBrowserWindow::alarmCompleted() { QFont f = alarmText.font(); f.setStrikeOut(!f.strikeOut()); alarmText.setFont(f); NoteTable noteTable(global.db); noteTable.setDirty(this->lid, true); noteTable.setReminderCompleted(this->lid, f.strikeOut()); global.reminderManager->remove(this->lid); emit(noteUpdated(this->lid)); emit noteAlarmEditedSignal(uuid, lid, f.strikeOut(), alarmText.text()); } void NBrowserWindow::alarmSet() { ReminderSetDialog dialog; Note n; NoteTable ntable(global.db); ntable.get(n, lid, false, false); NoteAttributes attributes; if (n.attributes.isSet()) attributes = n.attributes; if (attributes.reminderTime.isSet()) { QDateTime dt; dt.setMSecsSinceEpoch(attributes.reminderTime); dialog.time->setTime(dt.time()); dialog.calendar->setSelectedDate(dt.date()); } else { QTime t = QTime::currentTime(); dialog.time->setTime(t.addSecs(60*60)); } dialog.exec(); if (!dialog.okPressed) return; QDateTime dt; dt.setTime(dialog.time->time()); QTime t = dialog.time->time(); t.setHMS(t.hour(), t.minute(), 0,0); dt.setTime(t); dt.setDate(dialog.calendar->selectedDate()); ntable.updateDate(this->lid, dt.toMSecsSinceEpoch(), NOTE_ATTRIBUTE_REMINDER_TIME, true); //alarmText.setText(dt.date().toString(Qt::SystemLocaleShortDate)); if (dt.date() == QDate::currentDate()) alarmText.setText(tr("Today")); else if (dt.date() == QDate::currentDate().addDays(+1)) alarmText.setText(tr("Tomorrow")); else if (dt.date() == QDate::currentDate().addDays(-1)) alarmText.setText(tr("Yesterday")); else alarmText.setText(dt.date().toString(global.dateFormat)); alarmText.setVisible(true); QFont f = alarmText.font(); f.setStrikeOut(false); alarmText.setFont(f); // Update the reminders global.reminderManager->updateReminder(this->lid, dt); this->noteUpdated(this->lid); this->editor->isDirty = true; emit noteAlarmEditedSignal(uuid, lid, false, alarmText.text()); } void NBrowserWindow::alarmClear() { alarmText.setText(""); alarmText.setVisible(false); NoteTable noteTable(global.db); noteTable.setDirty(this->lid, true); noteTable.removeReminder(this->lid); emit(noteUpdated(this->lid)); emit noteAlarmEditedSignal(uuid, lid, false, ""); } void NBrowserWindow::alarmMenuActivated() { QFont f = alarmText.font(); f.setStrikeOut(false); emit noteAlarmEditedSignal(uuid, lid, false, alarmText.text()); alarmText.setFont(f); NoteTable noteTable(global.db); noteTable.setDirty(this->lid, true); noteTable.setReminderCompleted(this->lid, false); emit(noteUpdated(this->lid)); } void NBrowserWindow::decryptText(QString id, QString text, QString hint, QString cipher, int len) { if (cipher != "RC2") { QMessageBox::critical(this, tr("Decryption Error"), tr("Unknown encryption method.\n" "Unable to decrypt.")); return; } EnCrypt crypt; QString plainText = ""; QUuid uuid; QString slot = uuid.createUuid().toString().replace("{","").replace("}",""); // First, try to decrypt with any keys we already have for (int i=0; i newEntry; newEntry.first = id; newEntry.second = global.passwordRemember.at(i).second; global.passwordRemember.append(newEntry); removeEncryption(id, plainText, false, slot); return; } } EnDecryptDialog dialog; if (hint.trimmed() != "") dialog.hint->setText(hint); while (plainText == "" || !dialog.okPressed) { dialog.exec(); if (!dialog.okPressed) { return; } int rc = crypt.decrypt(plainText, text, dialog.password->text().trimmed()); if (rc == EnCrypt::Invalid_Key) { // QMessageBox.warning(this, tr("Incorrect Password"), tr("The password entered is not correct")); } } QPair passwordPair; passwordPair.first = dialog.password->text().trimmed(); passwordPair.second = dialog.hint->text().trimmed(); global.passwordSafe.insert(slot, passwordPair); bool permanentlyDecrypt = dialog.permanentlyDecrypt->isChecked(); removeEncryption(id, plainText, permanentlyDecrypt, slot); bool rememberPassword = dialog.rememberPassword->isChecked(); if (rememberPassword) { QPair pair; pair.first = dialog.password->text().trimmed(); pair.second = dialog.hint->text().trimmed(); global.passwordRemember.append(pair); } } void NBrowserWindow::removeEncryption(QString id, QString plainText, bool permanent, QString slot) { if (!permanent) { plainText = "
" +plainText+"
"; } QString html = editor->page()->mainFrame()->toHtml(); QString text = html; int imagePos = html.indexOf("", imagePos); QString tag = text.mid(imagePos-1,endPos); if (tag.indexOf("id=\""+id+"\"") > -1) { text = text.mid(0,imagePos) +plainText+text.mid(endPos+1); editor->page()->mainFrame()->setHtml(text); editor->reload(); if (permanent) contentChanged(); } imagePos = text.indexOf("selectedText(); if (text.trimmed() == "") return; text = text.replace("\n", "
"); EnCryptDialog dialog; dialog.exec(); if (!dialog.okPressed()) { return; } EnCrypt crypt; QString encrypted; int rc = crypt.encrypt(encrypted, text, dialog.getPassword().trimmed()); if (rc != 0) { QMessageBox::information(this, tr("Error"), tr("Error Encrypting String. Please verify you have Java installed.")); return; } QString buffer; buffer.append("\"");"); QString script_start = "document.execCommand('insertHtml', false, '"; QString script_end = "');"; editor->page()->mainFrame()->evaluateJavaScript( script_start + buffer + script_end); } void NBrowserWindow::sendAuthorUpdateSignal() { emit noteAuthorEditedSignal(uuid, lid, dateEditor.authorEditor.getText()); } void NBrowserWindow::sendLocationUpdateSignal() { double longitude, latitude, altitude; QString name; dateEditor.locationEditor.getGeography(longitude, latitude, altitude, name); emit noteLocationEditedSignal(uuid, lid, longitude, latitude, altitude, name); } void NBrowserWindow::sendDateCreatedUpdateSignal() { emit noteDateEditedSignal(uuid, lid, NOTE_CREATED_DATE, dateEditor.createdDate.dateTime()); } void NBrowserWindow::sendDateSubjectUpdateSignal() { emit noteDateEditedSignal(uuid, lid, NOTE_ATTRIBUTE_SUBJECT_DATE, dateEditor.subjectDate.dateTime()); } // Send a signal that the note has been updated void NBrowserWindow::sendTitleUpdateSignal() { NoteTable ntable(global.db); QString text = this->noteTitle.text().replace("\n"," ").trimmed(); ntable.updateTitle(this->lid, text, true); emit noteTitleEditedSignal(uuid, lid, text); emit(this->noteUpdated(lid)); emit(this->updateNoteList(lid, NOTE_TABLE_TITLE_POSITION, text)); sendDateUpdateSignal(); } // Send a signal that the note has been updated void NBrowserWindow::sendNotebookUpdateSignal() { NoteTable ntable(global.db); // QString notebook = notebookMenu.d // ntable.updateNotebook(this->lid, this->noteTitle.text().trimmed(), true); // this->editor->isDirty = true; ntable.setDirty(this->lid, true,false); emit(this->noteUpdated(lid)); qint32 lid = notebookMenu.notebookLid; QString name = notebookMenu.notebookName; emit(this->updateNoteList(lid, NOTE_TABLE_NOTEBOOK_POSITION, name)); emit(this->updateNoteList(lid, NOTE_TABLE_NOTEBOOK_LID_POSITION, lid)); emit noteNotebookEditedSignal(uuid, this->lid, lid, name); //sendDateUpdateSignal(); } // Send a signal that the note has been updated void NBrowserWindow::sendDateUpdateSignal(qint64 dt) { NoteTable ntable(global.db); ntable.setDirty(this->lid, true); if (dt == 0) { dt = QDateTime::currentMSecsSinceEpoch(); this->dateEditor.setUpdateDate(dt); } emit(this->noteUpdated(lid)); emit(this->updateNoteList(lid, NOTE_TABLE_DATE_UPDATED_POSITION, dt)); } // Send a signal that the note has been updated void NBrowserWindow::sendTagUpdateSignal() { NoteTable ntable(global.db); ntable.setDirty(this->lid, true,false); emit(this->noteUpdated(lid)); //sendDateUpdateSignal(); QStringList names; tagEditor.getTags(names); emit noteTagsEditedSignal(uuid, lid, names); } // Send a signal that the note has been updated void NBrowserWindow::sendUrlUpdateSignal() { NoteTable ntable(global.db); ntable.setDirty(this->lid, true); emit(this->noteUpdated(lid)); sendDateUpdateSignal(); emit(this->updateNoteList(lid, NOTE_TABLE_SOURCE_URL_POSITION, urlEditor.getText())); emit noteUrlEditedSignal(uuid, lid, urlEditor.getText()); } void NBrowserWindow::spellCheckPressed() { // Check if we have a plugin for Hunspell loaded. This could have been done at startup, but if this is // an external window we could need to load it again. if (!hunspellInterface) { this->loadPlugins(); } // If we STILL don't have a plugin then it can't be loaded. Quit out if (!hunspellPluginAvailable) { QMessageBox::critical(this, tr("Plugin Error"), tr("Hunspell plugin not found or could not be loaded."), QMessageBox::Ok); return; } QWebPage *page = editor->page(); page->action(QWebPage::MoveToStartOfDocument); page->mainFrame()->setFocus(); Qt::KeyboardModifier ctrl(Qt::ControlModifier); QKeyEvent key(QEvent::KeyPress, Qt::Key_Home, ctrl); editor->keyPressEvent(&key); page->mainFrame()->setFocus(); QStringList words = page->mainFrame()->toPlainText().split(" "); QStringList ignoreWords; QStringList rwords; //SpellChecker checker; bool finished = false; for (int i=0; ifindText(currentWord); rwords.clear(); if (!hunspellInterface->spellCheck(currentWord, rwords) && !ignoreWords.contains(currentWord)) { SpellCheckDialog dialog(currentWord, rwords, this); dialog.move(0,0); dialog.exec(); if (dialog.cancelPressed) finished = true; if (dialog.ignoreAllPressed) ignoreWords.append(currentWord); if (dialog.replacePressed) { QApplication::clipboard()->setText(dialog.replacement); pasteButtonPressed(); } if (dialog.addToDictionaryPressed) { hunspellInterface->addWord(global.fileManager.getSpellDirPathUser() +"user.lst", currentWord); } } } // Go to the end of the document & finish up QKeyEvent key2(QEvent::KeyPress, Qt::Key_End, ctrl); editor->keyPressEvent(&key2); QMessageBox::information(this, tr("Spell Check Complete"), tr("Spell Check Complete."), QMessageBox::Ok); } void NBrowserWindow::insertHtmlEntities() { emit showHtmlEntities(); } void NBrowserWindow::hideHtmlEntities() { buttonBar->htmlEntitiesButtonVisible->setVisible(false); buttonBar->htmlEntitiesButtonAction->setVisible(false); editor->insertHtmlEntitiesAction->setVisible(false); } void NBrowserWindow::handleUrls(const QMimeData *mime) { QList urlList = mime->urls(); bool ctrlModifier = QApplication::keyboardModifiers() & Qt::ControlModifier; for (int i=0; i
"); } else if (file.toLower().startsWith("file://") && ctrlModifier) { QString url = QString("%3").arg(file).arg(file).arg(file); QLOG_DEBUG() << url; insertHtml(url); if (i
"); } else { editor->setFocus(); QApplication::clipboard()->clear(); QApplication::clipboard()->setText(file, QClipboard::Clipboard); this->editor->triggerPageAction(QWebPage::Paste); } } } // This is used to notify the tab window that the contents of a // note have changed. It avoids some of the overhead that happens // when a note is first edited, but it is signaled on every change. // The tab window uses it to update any duplicate windows (i.e. a note // was edited in an external editor and is still being viewed internally // so we need to keep the contents in sync. void NBrowserWindow::noteContentEdited() { emit noteContentEditedSignal(uuid, lid, editor->editorPage->mainFrame()->documentElement().toOuterXml()); } void NBrowserWindow::changeDisplayFontSize(QString size) { bool convert =true; if (size.endsWith("px", Qt::CaseInsensitive)) convert = true; size.chop(2); // Remove px from the end int converted = size.toInt(); if (convert) { PixelConverter c; converted = c.getPoints(converted); size = QString::number(converted); } int idx = buttonBar->fontSizes->findData(size, Qt::UserRole); if (idx > 0) { buttonBar->fontSizes->blockSignals(true); buttonBar->fontSizes->setCurrentIndex(idx); buttonBar->fontSizes->blockSignals(false); } } // This function is called when the cursor position within the document changes. It should // change the combo box to the current font name. void NBrowserWindow::changeDisplayFontName(QString name) { //QLOG_DEBUG() << "Font Name:" << name; if (name.startsWith("'")) { name = name.mid(1); int idx = name.indexOf("'"); if (idx != -1) name = name.mid(0,idx); } name = name.toLower(); buttonBar->fontNames->blockSignals(true); int idx = buttonBar->fontNames->findData(name, Qt::UserRole); if (idx != -1) buttonBar->fontNames->setCurrentIndex(idx); buttonBar->fontNames->blockSignals(false); } void NBrowserWindow::focusCheck() { bool buttonBarVisible = false; if (editor->hasFocus()) buttonBarVisible = true; if (editor->contextMenu->hasFocus()) buttonBarVisible = true; if (buttonBar->hasFocus()) buttonBarVisible = true; if (buttonBar->fontNames->isExpanded()) buttonBarVisible = true; if (buttonBar->fontNames->lineEdit()->hasFocus()) buttonBarVisible = true; if (buttonBar->fontSizes->lineEdit()->hasFocus()) buttonBarVisible = true; if (buttonBar->fontSizes->isExpanded()) buttonBarVisible = true; if (!global.autoHideEditorToolbar) buttonBarVisible = true; if (global.isFullscreen) buttonBarVisible = false; if (!editor->page()->isContentEditable()) buttonBarVisible = false; buttonBar->setVisible(buttonBarVisible); } void NBrowserWindow::saveTimeCheck() { if (editor->isDirty) this->saveNoteContent(); } void NBrowserWindow::notebookFocusShortcut() { this->notebookMenu.setFocus(); this->notebookMenu.click(); } void NBrowserWindow::fontFocusShortcut() { if (this->buttonBar->fontNames->isVisible()) { this->buttonBar->fontNames->setFocus(); this->buttonBar->fontNames->showPopup(); } } void NBrowserWindow::fontSizeFocusShortcut() { if (this->buttonBar->fontSizes->isVisible()) { this->buttonBar->fontSizes->setFocus(); this->buttonBar->fontSizes->showPopup(); } } void NBrowserWindow::authorFocusShortcut() { if (!this->dateEditor.authorEditor.isVisible()) { this->changeExpandState(EXPANDBUTTON_3); this->expandButton.setState(EXPANDBUTTON_3); } dateEditor.authorEditor.setFocus(); } void NBrowserWindow::urlFocusShortcut() { if (!this->urlEditor.isVisible()) { this->changeExpandState(EXPANDBUTTON_2); this->expandButton.setState(EXPANDBUTTON_2); } this->urlEditor.setFocus(); } void NBrowserWindow::copyNoteUrl() { Note n; NoteTable ntable(global.db); ntable.get(n,this->lid,false,false); UserTable utable(global.db); User user; utable.getUser(user); QString href = "evernote:///view/" + QString::number(user.id) + QString("/") + user.shardId +QString("/") + n.guid +QString("/") + n.guid + QString("/"); QApplication::clipboard()->setText(href, QClipboard::Clipboard); } void NBrowserWindow::newTagFocusShortcut() { if (!this->tagEditor.newTag.isVisible()) { this->changeExpandState(EXPANDBUTTON_2); this->expandButton.setState(EXPANDBUTTON_2); } tagEditor.newTag.setFocus(); } // User pressed the superscript editor button void NBrowserWindow::superscriptButtonPressed() { editor->page()->mainFrame()->evaluateJavaScript("document.execCommand('superscript')"); } // User pressed the subscript editor button void NBrowserWindow::subscriptButtonPressed() { editor->page()->mainFrame()->evaluateJavaScript("document.execCommand('subscript');"); } // Set the editor background & font color void NBrowserWindow::setEditorStyle() { QString qss = global.getEditorCss(); #ifndef _WIN32 editor->settings()->setUserStyleSheetUrl(QUrl("file://"+qss)); #else editor->settings()->setUserStyleSheetUrl(QUrl("file:///"+qss)); #endif return; } void NBrowserWindow::loadPlugins() { hunspellPluginAvailable = false; QStringList dirList; dirList.append(global.fileManager.getProgramDirPath("")); dirList.append(global.fileManager.getProgramDirPath("")+"/plugins"); dirList.append("/usr/lib/nixnote2/"); dirList.append("/usr/local/lib/nixnote2/"); dirList.append("/usr/local/lib"); dirList.append("/usr/lib"); for (int i=0; i(plugin); if (hunspellInterface) { hunspellPluginAvailable = true; hunspellInterface->initialize(global.fileManager.getProgramDirPath(""), global.fileManager.getSpellDirPathUser()); } } else { QLOG_ERROR() << pluginLoader.errorString(); } } } } } // Find shortcut activated void NBrowserWindow::findShortcut() { if (!findReplace->isVisible()) { findReplace->showFind(); } else { if (findReplace->findLine->hasFocus()) findReplace->hide(); else { findReplace->showFind(); findReplace->findLine->setFocus(); findReplace->findLine->selectAll(); } } } //******************************************* //* Search for the next occurrence of text //* in a note. //******************************************* void NBrowserWindow::findNextShortcut() { findReplace->showFind(); QString find = findReplace->findLine->text(); if (find != "") editor->page()->findText(find, findReplace->getCaseSensitive() | QWebPage::FindWrapsAroundDocument); } //******************************************* //* Search for the previous occurrence of //* text in a note. //******************************************* void NBrowserWindow::findPrevShortcut() { findReplace->showFind(); QString find = findReplace->findLine->text(); if (find != "") editor->page()->findText(find, findReplace->getCaseSensitive() | QWebPage::FindBackward | QWebPage::FindWrapsAroundDocument); } // Find shortcut activated void NBrowserWindow::findReplaceShortcut() { this->findReplace->showFindReplace(); } //*************************************** //* Find/replace button pressed, so we //* need to highlight all the occurrences //* in a note. //*************************************** void NBrowserWindow::findReplaceInNotePressed() { QString find = findReplace->findLine->text(); QString replace = findReplace->replaceLine->text(); if (find == "") return; bool found = false; found = editor->page()->findText(find, findReplace->getCaseSensitive() | QWebPage::FindWrapsAroundDocument); if (!found) return; QApplication::clipboard()->setText(replace); editor->pasteAction->trigger(); } //************************************************* //* Replace All button pressed. //************************************************* void NBrowserWindow::findReplaceAllInNotePressed() { QString find = findReplace->findLine->text(); QString replace = findReplace->replaceLine->text(); if (find == "") return; bool found = false; while (true) { found = editor->page()->findText(find, findReplace->getCaseSensitive() | QWebPage::FindWrapsAroundDocument); if (!found) return; QApplication::clipboard()->setText(replace); editor->pasteAction->trigger(); } } //******************************************* //* Search for the next occurrence of text //* in a note. //******************************************* void NBrowserWindow::findNextInNote() { findReplace->showFind(); QString find = findReplace->findLine->text(); if (find != "") editor->page()->findText(find, findReplace->getCaseSensitive() | QWebPage::FindWrapsAroundDocument); } //******************************************* //* Search for the previous occurrence of //* text in a note. //******************************************* void NBrowserWindow::findPrevInNote() { findReplace->showFind(); QString find = findReplace->findLine->text(); if (find != "") editor->page()->findText(find, findReplace->getCaseSensitive() | QWebPage::FindBackward | QWebPage::FindWrapsAroundDocument); } //******************************************* //* This just does a null find to reset the //* text in a note so nothing is highlighted. //* This is triggered when the find dialog //* box is hidden. //******************************************* void NBrowserWindow::findReplaceWindowHidden() { editor->page()->findText(""); } //************************************************ //* Set the current edited cell style in a table //* This is called from a javascript function to //* get the current cell style the cursor is in. //************************************************* void NBrowserWindow::setTableCellStyle(QString value) { this->tableCellStyle = value; } //************************************************ //* Set the current table style //* This is called from a javascript function to //* get the currenttablel style the cursor is in. //************************************************* void NBrowserWindow::setTableStyle(QString value) { this->tableStyle = value; } //************************************************** //* This is called when a note's content is saved. //* It is used to call user exits. //************************************************** void NBrowserWindow::exitPoint(ExitPoint *exit) { QLOG_TRACE_IN(); ExitPoint_NoteEdit *saveExit = new ExitPoint_NoteEdit(); #if QT_VERSION >= 0x050000 QJSEngine engine; QJSValue exit_s = engine.newQObject(saveExit); engine.globalObject().setProperty("note", exit_s); // Start loading values QLOG_INFO() << tr("Calling exit ") << exit->getExitName(); saveExit->setExitName(exit->getExitName()); saveExit->setTitle(this->noteTitle.text()); saveExit->setNotebook(notebookMenu.notebookName); saveExit->setCreationDate(dateEditor.createdDate.dateTime().toMSecsSinceEpoch()); saveExit->setUpdatedDate(dateEditor.updatedDate.dateTime().toMSecsSinceEpoch()); saveExit->setSubjectDate(dateEditor.subjectDate.dateTime().toMSecsSinceEpoch()); QStringList tags; tagEditor.getTags(tags); saveExit->setTags(tags); saveExit->setContents(editor->page()->mainFrame()->toHtml()); // Set exit ready & call it. saveExit->setExitReady(); QJSValue retval = engine.evaluate(exit->getScript()); QLOG_INFO() << "Return value from exit: " << retval.toString(); #endif #if QT_VERSION < 0x050000 QScriptEngine scriptEngine; QScriptValue exit_qs = scriptEngine.newQObject(saveExit); scriptEngine.globalObject().setProperty("note", exit_qs); // Start loading values QLOG_INFO() << tr("Calling exit ") << exit->getExitName(); saveExit->setExitName(exit->getExitName()); saveExit->setTitle(this->noteTitle.text()); saveExit->setNotebook(notebookMenu.notebookName); saveExit->setCreationDate(dateEditor.createdDate.dateTime().toMSecsSinceEpoch()); saveExit->setUpdatedDate(dateEditor.updatedDate.dateTime().toMSecsSinceEpoch()); saveExit->setSubjectDate(dateEditor.subjectDate.dateTime().toMSecsSinceEpoch()); QStringList tags; tagEditor.getTags(tags); saveExit->setTags(tags); saveExit->setContents(editor->page()->mainFrame()->toHtml()); // Set exit ready & call it. saveExit->setExitReady(); QScriptValue retval = scriptEngine.evaluate(exit->getScript()); QLOG_INFO() << "Return value from exit: " << retval.toString(); #endif // Check for any changes. if (saveExit->isTitleModified()) { this->noteTitle.setText(saveExit->getTitle()); } if (saveExit->isTagsModified()) { QStringList newTags = saveExit->getTags(); QStringList oldTags; tagEditor.getTags(oldTags); for (int i=0; iisNotebookModified()) { NotebookTable ntable(global.db); QString notebookName = saveExit->getNotebook(); qint32 notebookLid = ntable.findByName(notebookName); if (notebookLid >0) { this->notebookMenu.updateCurrentNotebook(notebookLid, notebookName); NoteTable noteTable(global.db); noteTable.updateNotebook(this->lid, notebookLid, true); emit (noteNotebookEditedSignal(uuid, lid, notebookLid, notebookName)); } else QLOG_ERROR() << tr("Notebook was not found:") << notebookName; } if (saveExit->isContentsModified()) { QByteArray data = saveExit->getContents().toUtf8(); this->editor->setContent(data); } editor->isDirty = saveExit->isContentsDirty(); NoteTable ntable(global.db); ntable.setDirty(this->lid, editor->isDirty,false); QLOG_TRACE_OUT(); } nixnote2-2.0.2/gui/nbrowserwindow.h000066400000000000000000000261041315604104400173100ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NBROWSERWINDOW_H #define NBROWSERWINDOW_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "gui/nwebview.h" #include "qevercloud/include/QEverCloud.h" #include "gui/browserWidgets/ntitleeditor.h" #include "gui/browserWidgets/notebookmenubutton.h" #include "gui/plugins/pluginfactory.h" #include "gui/browserWidgets/expandbutton.h" #include "gui/browserWidgets/urleditor.h" #include "gui/browserWidgets/tageditor.h" #include "gui/browserWidgets/authoreditor.h" #include "gui/browserWidgets/locationeditor.h" #include "gui/browserWidgets/dateeditor.h" #include "gui/browserWidgets/colormenu.h" #include "gui/browserWidgets/editorbuttonbar.h" #include "gui/nwebview.h" #include "xml/xmlhighlighter.h" #include "gui/browserWidgets/editorbuttonbar.h" #include "gui/browserWidgets/reminderbutton.h" #include "html/thumbnailer.h" #include "email/mimemessage.h" #include "plugins/hunspell/hunspellinterface.h" #include "plugins/hunspell/hunspellplugin.h" #include "gui/findreplace.h" #include "threads/browserrunner.h" class ToolbarWidgetAction; using namespace qevercloud; class NWebView; class NBrowserWindow; class NMainMenuBar; class EditorButtonBar; class NBrowserWindow : public QWidget { Q_OBJECT private: QThread *browserThread; BrowserRunner *browserRunner; void setupToolBar(); QTimer *sourceEditorTimer; bool insertHyperlink; QString currentHyperlink; bool insideList; bool insideTable; bool insideEncryption; bool insidePre; bool forceTextPaste; void editLatex(QString guid); QString selectedFileName; qint32 selectedFileLid; void rotateImage(qreal degrees); void updateImageHash(QByteArray newhash); void insertImage(const QMimeData *mime); qint32 createResource(Resource &r, int sequence, QByteArray data, QString mime, bool attachment, QString filename); PluginFactory *factory; Thumbnailer *hammer; Thumbnailer *thumbnailer; QTimer focusTimer; QTimer saveTimer; QString attachFilePath; // Save path of last selected attachment. // Global plugins bool hunspellPluginAvailable; HunspellInterface *hunspellInterface; void loadPlugins(); // Shortcuts for context menu QShortcut *attachFileShortcut; QShortcut *removeFormattingShortcut; QShortcut *insertQuicklinkShortcut; QShortcut *insertHtmlEntitiesShortcut; QShortcut *insertHyperlinkShortcut; QShortcut *encryptTextShortcut; QShortcut *removeHyperlinkShortcut; QShortcut *insertLatexShortcut; QShortcut *copyNoteUrlShortcut; FindReplace *findReplace; QString stripContentsForPrint(); QString tableCellStyle; QString tableStyle; QPoint scrollPoint; void exitPoint(ExitPoint *exit); public: explicit NBrowserWindow(QWidget *parent = 0); ~NBrowserWindow(); QString uuid; NWebView *editor; void setContent(qint32 lid); NTitleEditor noteTitle; ReminderButton alarmButton; QPushButton alarmText; NotebookMenuButton notebookMenu; ExpandButton expandButton; UrlEditor urlEditor; TagEditor tagEditor; DateEditor dateEditor; //AuthorEditor authorEditor; //LocationEditor locationEditor; void setReadOnly(bool readOnly); //NMainMenuBar *mainMenuBarHook; bool isReadOnly; QString buildPasteUrl(QString url); void setEditorStyle(); EditorButtonBar *buttonBar; QShortcut *focusNoteShortcut; QShortcut *focusTitleShortcut; QShortcut *insertDatetimeShortcut; QTextEdit *printPage; QTextEdit *printPreviewPage; bool fastPrint; //QShortcut *leftJustifyButtonShortcut; QHBoxLayout line2Layout; QHBoxLayout line3Layout; qint32 lid; void setBackgroundColor(QString); void showSource(bool); QTextEdit *sourceEdit; QString sourceEditHeader; XmlHighlighter *highlighter; void tabPressed(); void backtabPressed(); bool enterPressed(); void clear(); void setupShortcut(QShortcut *action, QString text); void contentChanged(); void printPreviewNote(); void printNote(); void updateResourceHash(qint32 noteLid, QByteArray oldHash, QByteArray newHash); void insertHtml(QString html); void hideHtmlEntities(); signals: void noteUpdated(qint32); qint32 tagAdded(qint32); void evernoteLinkClicked(qint32 lid, bool newTab, bool newWindow); void updateNoteList(qint32 lid, int column, QVariant data); void noteContentEditedSignal(QString uuid, qint32 lid, QString content); void noteTitleEditedSignal(QString uuid, qint32 lid, QString content); void noteAuthorEditedSignal(QString uuid, qint32 lid, QString content); void noteDateEditedSignal(QString uuid, qint32 lid, int dateID, QDateTime dt); void noteNotebookEditedSignal(QString uuid, qint32 lid, qint32 notebookLid, QString notebookName); void noteUrlEditedSignal(QString uuid, qint32 lid, QString content); void noteTagsEditedSignal(QString uuid, qint32 lid, QStringList names); void noteLocationEditedSignal(QString uuid, qint32 lid, double longitude, double latitude, double altitude, QString name); void noteAlarmEditedSignal(QString uuid, qint32 lid, bool strikeout, QString text); void showHtmlEntities(); void setMessage(QString msg); void requestNoteContentUpdate(qint32, QString, bool); public slots: void saveNoteContent(); void changeExpandState(int value); void tagRenamed(qint32 lid, QString oldName, QString newName); void notebookRenamed(qint32 lid, QString oldName, QString newName); void tagDeleted(qint32 lid, QString name); void notebookDeleted(qint32 lid, QString name); void notebookAdded(qint32 lid); void addTagName(qint32 lid); void stackRenamed(QString oldName, QString newName); void stackDeleted(QString name); void stackAdded(QString name); void noteSyncUpdate(qint32 lid); void noteContentUpdated(); void microFocusChanged(); void undoButtonPressed(); void redoButtonPressed(); void cutButtonPressed(); void copyButtonPressed(); void printPreviewReady(QPrinter *printer); void emailNote(); void prepareEmailMessage(MimeMessage *message, QString note); void pasteButtonPressed(); void pasteWithoutFormatButtonPressed(); void boldButtonPressed(); void selectAllButtonPressed(); void italicsButtonPressed(); void underlineButtonPressed(); void strikethroughButtonPressed(); void superscriptButtonPressed(); void subscriptButtonPressed(); void alignLeftButtonPressed(); void alignCenterButtonPressed(); void alignFullButtonPressed(); void alignRightButtonPressed(); void horizontalLineButtonPressed(); void shiftLeftButtonPressed(); void shiftRightButtonPressed(); void bulletListButtonPressed(); void numberListButtonPressed(); void todoButtonPressed(); void fontSizeSelected(int index); void fontNameSelected(int index); void fontColorClicked(); void fontHighlightClicked(); void encryptButtonPressed(); void decryptText(QString id, QString text, QString hint, QString cipher="RC2", int len=64); void insertLinkButtonPressed(); void insertQuickLinkButtonPressed(); void removeLinkButtonPressed(); void insertLatexButtonPressed(); void insertTableButtonPressed(); void insertTableRowButtonPressed(); void insertTableColumnButtonPressed(); void tablePropertiesButtonPressed(); void deleteTableRowButtonPressed(); void deleteTableColumnButtonPressed(); void rotateImageLeftButtonPressed(); void rotateImageRightButtonPressed(); void removeFormatButtonPressed(); void formatCodeButtonPressed(); void linkClicked(const QUrl url); void toggleSource(); void setSource(); void focusTitle(); void focusNote(); void imageContextMenu(QString lid, QString filename); void insertDatetime(); void attachFile(); void attachFileSelected(QString filename); void setTableCellStyle(QString value); void setTableStyle(QString value); void exposeToJavascript(); void boldActive(); void italicsActive(); void insideEncryptionArea(); void underlineActive(); void setInsideList(); void setInsideTable(); void setInsidePre(); void noteSourceUpdated(); void setInsideLink(QString link); QString fixEncryptionPaste(QString data); void alarmCompleted(); void alarmSet(); void alarmClear(); void alarmMenuActivated(); void removeEncryption(QString id, QString plainText, bool permanent, QString slot); void spellCheckPressed(); void noteContentEdited(); void insertHtmlEntities(); void handleUrls(const QMimeData *mime); void setTableCursorPositionTab(int currentRow, int currentCol, int tableRows, int tableColumns); void setTableCursorPositionBackTab(int currentRow, int currentCol, int tableRows, int tableColumns); void changeDisplayFontSize(QString size); void changeDisplayFontName(QString name); void printNodeName(QString node); void sendDateCreatedUpdateSignal(); void sendDateSubjectUpdateSignal(); void newTagFocusShortcut(); void authorFocusShortcut(); void notebookFocusShortcut(); void fontFocusShortcut(); void fontSizeFocusShortcut(); void urlFocusShortcut(); void copyNoteUrl(); void findShortcut(); void findReplaceShortcut(); void findNextShortcut(); void findPrevShortcut(); void findReplaceAllInNotePressed(); void findNextInNote(); void findPrevInNote(); void findReplaceWindowHidden(); void findReplaceInNotePressed(); private slots: void sendTitleUpdateSignal(); void sendNotebookUpdateSignal(); void sendDateUpdateSignal(qint64 dt=0); void sendLocationUpdateSignal(); void sendAuthorUpdateSignal(); void sendTagUpdateSignal(); void sendUrlUpdateSignal(); void newTagAdded(qint32); void focusCheck(); void saveTimeCheck(); void browserThreadStarted(); void repositionAfterSourceEdit(bool); }; #endif // NBROWSERWINDOW_H nixnote2-2.0.2/gui/nmainmenubar.cpp000066400000000000000000000670371315604104400172400ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "nmainmenubar.h" #include "global.h" #include #include #include #include extern Global global; struct QPairFirstComparer { template bool operator()(const QPair & a, const QPair & b) const { return a.first < b.first; } }; NMainMenuBar::NMainMenuBar(QWidget *parent) : QMenuBar(parent) { this->parent = (NixNote*)parent; QFont f; f = global.getGuiFont(f); this->setFont(f); setupFileMenu(); setupEditMenu(); setupViewMenu(); setupNoteMenu(); setupToolsMenu(); setupHelpMenu(); } void NMainMenuBar::setupFileMenu() { QFont f; f = global.getGuiFont(f); this->setFont(f); fileMenu = this->addMenu(tr("&File")); fileMenu->setFont(f); emailAction = new QAction(tr("Email Note"), this); emailAction->setToolTip(tr("Email a copy of this note")); connect(emailAction, SIGNAL(triggered()), parent, SLOT(emailNote())); setupShortcut(emailAction, QString("File_Email")); fileMenu->addAction(emailAction); printPreviewAction = new QAction(tr("Print Preview Note"), this); printPreviewAction->setToolTip(tr("Print preview of this note")); connect(printPreviewAction, SIGNAL(triggered()), parent, SLOT(printPreviewNote())); setupShortcut(printPreviewAction, QString("File_Print_Preview")); fileMenu->addAction(printPreviewAction); //printPreviewAction->setVisible(false); // for some reason images don't show up in print preview, so this is useless. Check again in Qt5 printAction = new QAction(tr("&Print Note"), this); printAction->setToolTip(tr("Print this note")); connect(printAction, SIGNAL(triggered()), parent, SLOT(printNote())); setupShortcut(printAction, QString("File_Print")); fileMenu->addAction(printAction); fileMenu->addSeparator(); backupDatabaseAction = new QAction(tr("&Backup Database"), this); backupDatabaseAction->setToolTip(tr("Backup database to a file")); connect(backupDatabaseAction, SIGNAL(triggered()), parent, SLOT(databaseBackup())); setupShortcut(backupDatabaseAction, QString("File_Backup_Database")); fileMenu->addAction(backupDatabaseAction); restoreDatabaseAction = new QAction(tr("&Restore Database"), this); restoreDatabaseAction->setToolTip(tr("Restore from a backup")); connect(restoreDatabaseAction, SIGNAL(triggered()), parent, SLOT(databaseRestore())); setupShortcut(restoreDatabaseAction, QString("File_Restore_Database")); fileMenu->addAction(restoreDatabaseAction); fileMenu->addSeparator(); exportNoteAction = new QAction(tr("&Export to NixNote Export"), this); exportNoteAction->setToolTip(tr("Export selected notes to a NNEX file")); connect(exportNoteAction, SIGNAL(triggered()), parent, SLOT(noteExport())); setupShortcut(exportNoteAction, QString("File_Note_Export")); fileMenu->addAction(exportNoteAction); exportAsPdfAction = new QAction(tr("&Export Notes as PDF"), this); exportAsPdfAction->setToolTip(tr("Export selected notes to a PDF file")); connect(exportAsPdfAction, SIGNAL(triggered()), parent, SLOT(exportAsPdf())); setupShortcut(exportAsPdfAction, QString("File_Note_Export_Pdf")); fileMenu->addAction(exportAsPdfAction); importNoteAction = new QAction(tr("&Import Notes"), this); importNoteAction->setToolTip(tr("Import notes from an export file")); connect(importNoteAction, SIGNAL(triggered()), parent, SLOT(noteImport())); setupShortcut(importNoteAction, QString("File_Note_Import")); fileMenu->addAction(importNoteAction); fileMenu->addSeparator(); QList names = global.accountsManager->nameList(); QList ids = global.accountsManager->idList(); QList< QPair > pairList; for (int i=0; i(ids[i], names[i])); } qSort(pairList.begin(), pairList.end(), QPairFirstComparer()); for (int i=0; isetData(pairList[i].first); accountAction->setCheckable(true); if (global.accountsManager->currentId == pairList[i].first) accountAction->setChecked(true); else { accountAction->setText(tr("Switch to ")+pairList[i].second +" - (" +QString::number(pairList[i].first)+")"); } fileMenu->addAction(accountAction); connect(accountAction, SIGNAL(triggered()), parent, SLOT(switchUser())); userAccountActions.append(accountAction); } addUserAction = new QAction(tr("&Add Another User..."), this); fileMenu->addAction(addUserAction); connect(addUserAction, SIGNAL(triggered()), parent, SLOT(addAnotherUser())); userMaintenanceAction = new QAction(tr("&User Account Maintenance"),this); fileMenu->addAction(userMaintenanceAction); connect(userMaintenanceAction, SIGNAL(triggered()), parent, SLOT(userMaintenance())); fileMenu->addSeparator(); openCloseAction = new QAction(tr("&Open/Close Notebooks"), this); openCloseAction->setToolTip(tr("Open/Close Notebooks")); connect(openCloseAction, SIGNAL(triggered()), parent, SLOT(openCloseNotebooks())); setupShortcut(exitAction, QString("File_Notebook_OpenClose")); fileMenu->addAction(openCloseAction); fileMenu->addSeparator(); exitAction = new QAction(tr("E&xit"), this); exitAction->setToolTip(tr("Close the program")); connect(exitAction, SIGNAL(triggered()), parent, SLOT(closeShortcut())); exitAction->setShortcut(QKeySequence::Close); exitAction->setIcon(QIcon::fromTheme("exit")); setupShortcut(exitAction, QString("File_Exit")); fileMenu->addAction(exitAction); } void NMainMenuBar::addUserAccount(QAction *action) { fileMenu->insertAction(addUserAction, action); userAccountActions.append(action); } void NMainMenuBar::setupEditMenu() { editMenu = this->addMenu(tr("&Edit")); QFont f; f = global.getGuiFont(f); editMenu->setFont(f); undoAction = new QAction(tr("&Undo"), this); setupShortcut(undoAction, QString("Edit_Undo")); editMenu->addAction(undoAction); redoAction = new QAction(tr("&Redo"), this); setupShortcut(redoAction, QString("Edit_Redo")); editMenu->addAction(redoAction); editMenu->addSeparator(); cutAction = new QAction(tr("&Cut"), this); setupShortcut(cutAction, QString("Edit_Cut")); editMenu->addAction(cutAction); copyAction = new QAction(tr("C&opy"), this); setupShortcut(copyAction, QString("Edit_Copy")); editMenu->addAction(copyAction); pasteAction = new QAction(tr("&Paste"), this); setupShortcut(pasteAction, QString("Edit_Paste")); editMenu->addAction(pasteAction); pasteAsTextAction = new QAction(tr("Pas&te as Unformatted Text"), this); setupShortcut(pasteAsTextAction, QString("Edit_Paste_Without_Formatting")); editMenu->addAction(pasteAsTextAction); removeFormattingAction = new QAction(tr("Remo&ve Formatting"), this); //setupShortcut(removeFormjattingAction, QString("Edit_Remove_Formatting")); // For some reason this one makes the editorButtonBar one ambiguous editMenu->addAction(removeFormattingAction); editMenu->addSeparator(); selectAllAction = new QAction(tr("Select &All"), this); setupShortcut(selectAllAction, QString("Edit_Select_All")); editMenu->addAction(selectAllAction); editMenu->addSeparator(); findReplaceMenu = editMenu->addMenu(tr("F&ind and Replace")); searchNotesAction = new QAction(tr("&Search Notes"), this); setupShortcut(searchNotesAction, QString("Edit_Search_Notes")); findReplaceMenu->addAction(searchNotesAction); connect(searchNotesAction, SIGNAL(triggered()), parent->searchText, SLOT(setFocus())); resetSearchAction = new QAction(tr("&Reset Search"), this); setupShortcut(resetSearchAction, QString("Edit_Reset_Search")); findReplaceMenu->addAction(resetSearchAction); connect(resetSearchAction, SIGNAL(triggered()), parent, SLOT(resetView())); findReplaceMenu->addSeparator(); searchFindAction = new QAction(tr("&Find in Note"), this); setupShortcut(searchFindAction, QString("Edit_Search_Find")); findReplaceMenu->addAction(searchFindAction); connect(searchFindAction, SIGNAL(triggered()), parent, SLOT(findInNote())); searchFindNextAction = new QAction(tr("Find &Next"), this); setupShortcut(searchFindNextAction, QString("Edit_Search_Find_Next")); findReplaceMenu->addAction(searchFindNextAction); connect(searchFindNextAction, SIGNAL(triggered()), parent, SLOT(findNextInNote())); searchFindPrevAction = new QAction(tr("Find &Previous"), this); setupShortcut(searchFindPrevAction, QString("Edit_Search_Find_Prev")); findReplaceMenu->addAction(searchFindPrevAction); connect(searchFindPrevAction, SIGNAL(triggered()), parent, SLOT(findPrevInNote())); findReplaceMenu->addSeparator(); searchFindReplaceAction = new QAction(tr("Replace &Within Note..."), this); setupShortcut(searchFindReplaceAction, QString("Edit_Search_Find_Replace")); findReplaceMenu->addAction(searchFindReplaceAction); connect(searchFindReplaceAction, SIGNAL(triggered()), parent, SLOT(findReplaceInNote())); editMenu->addSeparator(); setupThemeMenu(); editMenu->addMenu(themeMenu); preferencesAction = new QAction(tr("Preferences"), this); setupShortcut(preferencesAction, QString("Edit_Preferences")); editMenu->addAction(preferencesAction); connect(preferencesAction, SIGNAL(triggered()), parent, SLOT(openPreferences())); } void NMainMenuBar::setupViewMenu() { viewMenu = this->addMenu(tr("&View")); QFont f; f = global.getGuiFont(f); viewMenu->setFont(f); viewNoteListWide = new QAction(tr("Wide Note List"), this); setupShortcut(viewNoteListWide, "View_Note_List_Wide"); viewMenu->addAction(viewNoteListWide); viewNoteListWide->setCheckable(true); viewNoteListNarrow = new QAction(tr("Narrow Note List"), this); setupShortcut(viewNoteListNarrow, "View_Note_List_Narrow"); viewNoteListNarrow->setCheckable(true); viewMenu->addAction(viewNoteListNarrow); connect(viewNoteListNarrow, SIGNAL(triggered()), parent, SLOT(viewNoteListNarrow())); connect(viewNoteListWide, SIGNAL(triggered()), parent, SLOT(viewNoteListWide())); viewSourceAction = new QAction(tr("&Show Source"), this); setupShortcut(viewSourceAction, "View_Source"); viewMenu->addAction(viewSourceAction); viewHistoryAction = new QAction(tr("Note &History"), this); setupShortcut(viewHistoryAction, "View_Note_History"); viewMenu->addAction(viewHistoryAction); viewMenu->addSeparator(); viewPresentationModeAction = new QAction(tr("&Presentation Mode"), this); setupShortcut(viewPresentationModeAction, "View_Presentation_Mode"); viewMenu->addAction(viewPresentationModeAction); viewLeftPanel = new QAction(tr("Show &Left Panel"), this); setupShortcut(viewLeftPanel, "View_Show_Left_Side"); viewLeftPanel->setCheckable(true); viewLeftPanel->setChecked(true); viewMenu->addAction(viewLeftPanel); connect(viewLeftPanel, SIGNAL(triggered()), parent, SLOT(toggleLeftPanel())); viewFavoritesTree = new QAction(tr("Show &Favorites"), this); setupShortcut(viewFavoritesTree, "View_Show_Favorites_List"); viewFavoritesTree->setCheckable(true); viewFavoritesTree->setChecked(true); viewMenu->addAction(viewFavoritesTree); connect(viewFavoritesTree, SIGNAL(triggered()), parent, SLOT(toggleFavoritesTree())); viewNotebookTree = new QAction(tr("Show &Notebooks"), this); setupShortcut(viewNotebookTree, "View_Show_Notebook_List"); viewNotebookTree->setCheckable(true); viewNotebookTree->setChecked(true); viewMenu->addAction(viewNotebookTree); connect(viewNotebookTree, SIGNAL(triggered()), parent, SLOT(toggleNotebookTree())); viewTagTree = new QAction(tr("Show Ta&gs"), this); setupShortcut(viewTagTree, "View_Show_Tag_List"); viewTagTree->setCheckable(true); viewTagTree->setChecked(true); viewMenu->addAction(viewTagTree); connect(viewTagTree, SIGNAL(triggered()), parent, SLOT(toggleTagTree())); viewSearchTree = new QAction(tr("Show Sa&ved Searches"), this); setupShortcut(viewSearchTree , "View_Show_Saved_Search_List"); viewSearchTree ->setCheckable(true); viewSearchTree ->setChecked(true); viewMenu->addAction(viewSearchTree); connect(viewSearchTree , SIGNAL(triggered()), parent, SLOT(toggleSavedSearchTree())); viewAttributesTree = new QAction(tr("Show &Attribute Filter"), this); setupShortcut(viewAttributesTree, "View_Attributes_List"); viewAttributesTree ->setCheckable(true); viewAttributesTree ->setChecked(true); viewMenu->addAction(viewAttributesTree); connect(viewAttributesTree , SIGNAL(triggered()), parent, SLOT(toggleAttributesTree())); viewTrashTree = new QAction(tr("Show T&rash"), this); setupShortcut(viewTrashTree, "View_Trash"); viewTrashTree ->setCheckable(true); viewTrashTree ->setChecked(true); viewMenu->addAction(viewTrashTree); connect(viewTrashTree, SIGNAL(triggered()), parent, SLOT(toggleTrashTree())); viewNoteList = new QAction(tr("Show N&ote List"), this); setupShortcut(viewNoteList, "View_Show_Note_List"); viewNoteList->setCheckable(true); viewNoteList->setChecked(true); viewMenu->addAction(viewNoteList); connect(viewNoteList, SIGNAL(triggered()), parent, SLOT(toggleNoteList())); viewNotePanel = new QAction(tr("Show Note &Panel"), this); setupShortcut(viewNotePanel, "View_Show_Note_Panel"); viewNotePanel->setCheckable(true); viewNotePanel->setChecked(true); viewMenu->addAction(viewNotePanel); connect(viewNotePanel, SIGNAL(triggered()), parent, SLOT(toggleTabWindow())); viewMenu->addSeparator(); viewExtendedInformation = new QAction(tr("View Note &Info"), this); setupShortcut(viewExtendedInformation, "View_Extended_Information"); viewMenu->addAction(viewExtendedInformation); viewToolbar = new QAction(tr("View &Toolbar"), this); setupShortcut(viewToolbar, "View_Toolbar"); viewMenu->addAction(viewToolbar); viewToolbar->setCheckable(true); viewToolbar->setChecked(true); connect(viewToolbar, SIGNAL(triggered()), parent, SLOT(toggleToolbar())); viewStatusbar = new QAction(tr("View Status&bar"), this); setupShortcut(viewStatusbar, "View_Statusbar"); viewMenu->addAction(viewStatusbar); viewStatusbar->setCheckable(true); connect(viewStatusbar, SIGNAL(triggered()), parent, SLOT(toggleStatusbar())); } void NMainMenuBar::setupNoteMenu() { noteMenu = this->addMenu(tr("&Note")); QFont f; f = global.getGuiFont(f); noteMenu->setFont(f); newNoteAction = new QAction(tr("New &Note"), noteMenu); setupShortcut(newNoteAction, QString("File_Note_Add")); noteMenu->addAction(newNoteAction); connect(newNoteAction, SIGNAL(triggered()), parent, SLOT(newNote())); newWebcamNoteAction = new QAction(tr("New &Webcam Note"), noteMenu); setupShortcut(deleteNoteAction, QString("File_Note_New_Webcam")); noteMenu->addAction(newWebcamNoteAction); connect(newWebcamNoteAction, SIGNAL(triggered()), parent, SLOT(newWebcamNote())); duplicateNoteAction = new QAction(tr("Dupl&icate Note"), noteMenu); setupShortcut(duplicateNoteAction, QString("File_Note_Duplicate")); noteMenu->addAction(duplicateNoteAction); connect(duplicateNoteAction, SIGNAL(triggered()), parent, SLOT(duplicateCurrentNote())); deleteNoteAction = new QAction(tr("&Delete"), noteMenu); setupShortcut(deleteNoteAction, QString("File_Note_Delete")); noteMenu->addAction(deleteNoteAction); connect(deleteNoteAction, SIGNAL(triggered()), parent, SLOT(deleteCurrentNote())); reindexNoteAction = new QAction(tr("Reindex Note"), noteMenu); setupShortcut(reindexNoteAction, QString("File_Note_Reindex")); noteMenu->addAction(reindexNoteAction); connect(reindexNoteAction, SIGNAL(triggered()), parent, SLOT(reindexCurrentNote())); if (parent->hunspellPluginAvailable) { noteMenu->addSeparator(); spellCheckAction = new QAction(tr("&Spell Check"), noteMenu); // setupShortcut(spellCheckAction, QString("Tools_Spell_Check")); This shortcut is done by the editor button bar noteMenu->addAction(spellCheckAction); connect(spellCheckAction, SIGNAL(triggered()), parent, SLOT(spellCheckCurrentNote())); } noteMenu->addSeparator(); pinNoteAction = new QAction(tr("&Pin Note"), noteMenu); setupShortcut(pinNoteAction, QString("NOTE_PIN")); noteMenu->addAction(pinNoteAction); connect(pinNoteAction, SIGNAL(triggered()), parent, SLOT(pinCurrentNote())); unpinNoteAction = new QAction(tr("&UnPin Note"), noteMenu); setupShortcut(unpinNoteAction, QString("NOTE_UNPIN")); noteMenu->addAction(unpinNoteAction); connect(unpinNoteAction, SIGNAL(triggered()), parent, SLOT(unpinCurrentNote())); } void NMainMenuBar::setupToolsMenu() { toolsMenu = this->addMenu(tr("&Tools")); QFont f; f = global.getGuiFont(f); toolsMenu->setFont(f); synchronizeAction = new QAction(tr("&Synchronize"), this); synchronizeAction->setToolTip(tr("Synchronize with Evernote")); connect(synchronizeAction, SIGNAL(triggered()), parent, SLOT(synchronize())); setupShortcut(synchronizeAction, QString("Tools_Synchronize")); toolsMenu->addAction(synchronizeAction); disconnectAction = new QAction(tr("&Disconnect"), this); disconnectAction->setToolTip(tr("Disconnect from Evernote")); connect(disconnectAction, SIGNAL(triggered()), parent, SLOT(disconnect())); setupShortcut(disconnectAction, QString("")); toolsMenu->addAction(disconnectAction); disconnectAction->setEnabled(false); disconnectAction->setVisible(false); /// We can probably delete this whole menu option pauseIndexingAction = new QAction(tr("Pause &Indexing"), this); pauseIndexingAction->setToolTip(tr("Temporarily pause indexing")); setupShortcut(pauseIndexingAction, QString("Tools_Pause_Indexing")); connect(pauseIndexingAction, SIGNAL(triggered()), parent, SLOT(pauseIndexing())); pauseIndexingAction->setCheckable(true); toolsMenu->addAction(pauseIndexingAction); pauseIndexingAction->setVisible(global.enableIndexing); disableEditingAction = new QAction(tr("Disable &Editing"), this); disableEditingAction->setToolTip(tr("Temporarily disable note editing")); setupShortcut(disableEditingAction, QString("Tools_Disable_Editing")); disableEditingAction->setCheckable(true); disableEditingAction->setChecked(global.disableEditing); connect(disableEditingAction, SIGNAL(triggered()), parent, SLOT(disableEditing())); toolsMenu->addAction(disableEditingAction); accountDialogAction = new QAction(tr("A&ccount"), this); accountDialogAction->setToolTip(tr("Account information")); connect(accountDialogAction, SIGNAL(triggered()), parent, SLOT(openAccount())); setupShortcut(accountDialogAction, QString("Tools_Account_Information")); toolsMenu->addAction(accountDialogAction); toolsMenu->addSeparator(); databaseStatusDialogAction = new QAction(tr("&Database Status"), this); databaseStatusDialogAction->setToolTip(tr("Database Status")); setupShortcut(databaseStatusDialogAction, QString("Tools_Database_Status")); connect(databaseStatusDialogAction, SIGNAL(triggered()), parent, SLOT(openDatabaseStatus())); toolsMenu->addAction(databaseStatusDialogAction); reindexDatabaseAction = new QAction(tr("&Reindex Database"), this); reindexDatabaseAction->setToolTip(tr("Reindex all notes")); setupShortcut(reindexDatabaseAction, QString("Tools_Database_Reindex")); connect(reindexDatabaseAction, SIGNAL(triggered()), parent, SLOT(reindexDatabase())); toolsMenu->addAction(reindexDatabaseAction); reindexDatabaseAction->setVisible(global.enableIndexing); toolsMenu->addSeparator(); importFoldersDialogAction = new QAction(tr("&Import Folders"), this); importFoldersDialogAction->setToolTip(tr("Import Folders")); setupShortcut(importFoldersDialogAction, QString("Tools_Import_Folders")); connect(importFoldersDialogAction, SIGNAL(triggered()), parent, SLOT(openImportFolders())); toolsMenu->addAction(importFoldersDialogAction); } void NMainMenuBar::setupHelpMenu() { helpMenu = this->addMenu(tr("&Help")); QFont font; font = global.getGuiFont(font); helpMenu->setFont(font); openManualAction = new QAction(tr("&User's Guide"), this); openManualAction->setToolTip(tr("Open the user manual.")); connect(openManualAction, SIGNAL(triggered()), this, SLOT(openManual())); helpMenu->addAction(openManualAction); themeInformationAction = new QAction(tr("Theme &Information"), this); themeInformationAction->setToolTip(tr("View information about the current theme.")); connect(themeInformationAction, SIGNAL(triggered()), this, SLOT(openThemeInformation())); helpMenu->addAction(themeInformationAction); QString url = global.getResourceFileName(global.resourceList, ":themeInformation"); themeInformationAction->setVisible(false); if (url.startsWith("http://", Qt::CaseInsensitive) || url.startsWith("https://", Qt::CaseInsensitive)) themeInformationAction->setVisible(true); QFile f(url); if (f.exists()) themeInformationAction->setVisible(true); global.settings->beginGroup("Appearance"); QString themeName = global.settings->value("themeName","").toString(); global.settings->endGroup(); if (themeName == "") themeInformationAction->setVisible(true); openShortcutsDialogAction = new QAction(tr("Shortcuts"), this); openShortcutsDialogAction->setToolTip(tr("View currentt shortcuts")); connect(openShortcutsDialogAction, SIGNAL(triggered(bool)), parent, SLOT(openShortcutsDialog())); helpMenu->addAction(openShortcutsDialogAction); openMessageLogAction = new QAction(tr("Message &Log"), this); openMessageLogAction->setToolTip(tr("View current program messages")); connect(openMessageLogAction, SIGNAL(triggered()), parent, SLOT(openMessageLog())); helpMenu->addAction(openMessageLogAction); openGithubAction = new QAction(tr("Github Page"), this); openGithubAction->setToolTip(tr("Goto the NixNote2 Github project page.")); connect(openGithubAction, SIGNAL(triggered(bool)), parent, SLOT(openGithub())); helpMenu->addAction(openGithubAction); helpMenu->addSeparator(); openEvernoteAccountPageAction = new QAction(tr("&Evernote Account Page"), this); openEvernoteAccountPageAction->setToolTip(tr("Go to your Evernote account page.")); connect(openEvernoteAccountPageAction, SIGNAL(triggered()), this, SLOT(openEvernoteAccountPage())); helpMenu->addAction(openEvernoteAccountPageAction); openEvernoteSupportAction = new QAction(tr("Evernote &Support"), this); openEvernoteSupportAction->setToolTip(tr("Go to Evernote's support page")); if (global.accountsManager->getServer() == "app.yinxiang.com") { openEvernoteSupportAction = new QAction(tr("Yinxiang Biji Support"), this); openEvernoteSupportAction->setToolTip(tr("Go to Yinxiang Biji's support page")); } connect(openEvernoteSupportAction, SIGNAL(triggered()), parent, SLOT(openEvernoteSupport())); helpMenu->addAction(openEvernoteSupportAction); openTrunkAction = new QAction(tr("Evernote &Trunk"), this); openTrunkAction->setToolTip(tr("Go to Evernote Trunk")); connect(openTrunkAction, SIGNAL(triggered()), parent, SLOT(openTrunk())); helpMenu->addAction(openTrunkAction); openUserForumAction = new QAction(tr("Evernote User &Forum"), this); openUserForumAction->setToolTip(tr("Go to the Evernote user support forum.")); connect(openUserForumAction, SIGNAL(triggered()), this, SLOT(openUserForum())); helpMenu->addAction(openUserForumAction); helpMenu->addSeparator(); aboutAction = new QAction(tr("&About"), this); aboutAction->setToolTip(tr("About")); connect(aboutAction, SIGNAL(triggered()), parent, SLOT(openAbout())); helpMenu->addAction(aboutAction); aboutQtAction = new QAction(tr("About &Qt"), this); aboutQtAction->setToolTip(tr("About")); connect(aboutQtAction, SIGNAL(triggered()), parent, SLOT(openQtAbout())); helpMenu->addAction(aboutQtAction); } void NMainMenuBar::setupShortcut(QAction *action, QString text) { if (!global.shortcutKeys->containsAction(&text)) return; QKeySequence key(global.shortcutKeys->getShortcut(&text)); action->setShortcut(key); } void NMainMenuBar::openManual() { #ifndef _WIN32 QDesktopServices::openUrl(QString("file://") + global.getProgramDirPath()+"/help/UserDocumentation.pdf"); #else QDesktopServices::openUrl(QString("file:///") + global.getProgramDirPath().replace("\\","/")+"/help/UserDocumentation.pdf"); #endif } void NMainMenuBar::openUserForum() { QDesktopServices::openUrl(QUrl("https://discussion.evernote.com/index.php")); } void NMainMenuBar::openEvernoteAccountPage() { QDesktopServices::openUrl(QUrl("https://www.evernote.com/Settings.action")); } void NMainMenuBar::setupThemeMenu() { themeMenu = editMenu->addMenu(tr("Theme")); QStringList list = global.getThemeNames(); QFont f; global.getGuiFont(f); global.settings->beginGroup("Appearance"); QString userTheme = global.settings->value("themeName", "").toString(); global.settings->endGroup(); // Setup system default QAction *themeAction = new QAction(tr("System Default"), this); themeAction->setCheckable(true); themeAction->setData(""); if (userTheme == "") themeAction->setChecked(true); themeAction->setFont(f); connect(themeAction, SIGNAL(triggered()), parent, SLOT(reloadIcons())); themeActions.append(themeAction); // Setup the user themes for (int i=0; isetData(list[i]); themeAction->setCheckable(true); themeAction->setFont(f); connect(themeAction, SIGNAL(triggered()), parent, SLOT(reloadIcons())); if (list[i] == userTheme) { themeAction->setChecked(true); } themeActions.append(themeAction); } themeMenu->addActions(themeActions); } void NMainMenuBar::openThemeInformation() { global.settings->beginGroup("Appearance"); QString themeName = global.settings->value("themeName","").toString(); global.settings->endGroup(); if (themeName == "") { QDesktopServices::openUrl(QUrl(global.fileManager.getImageDirPath("")+"themeInfo.html")); return; } QString url = global.getResourceFileName(global.resourceList, ":themeInformation"); QDesktopServices::openUrl(QUrl(url)); } nixnote2-2.0.2/gui/nmainmenubar.h000066400000000000000000000101171315604104400166700ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NMAINMENUBAR_H #define NMAINMENUBAR_H #include #include #include "nixnote.h" class NixNote; class NMainMenuBar : public QMenuBar { Q_OBJECT private: NixNote *parent; void setupFileMenu(); void setupEditMenu(); void setupViewMenu(); void setupNoteMenu(); void setupToolsMenu(); void setupHelpMenu(); void setupShortcut(QAction *action, QString text); public: QList userAccountActions; QList themeActions; QMenu *fileMenu; QMenu *editMenu; QMenu *viewMenu; QMenu *noteMenu; QMenu *toolsMenu; QMenu *helpMenu; QMenu *findReplaceMenu; QMenu *themeMenu; QAction *exitAction; QAction *openCloseAction; QAction *printAction; QAction *printPreviewAction; QAction *emailAction; QAction *synchronizeAction; QAction *importFoldersDialogAction; QAction *addUserAction; QAction *disconnectAction; QAction *databaseStatusDialogAction; QAction *reindexDatabaseAction; QAction *restoreDatabaseAction; QAction *backupDatabaseAction; QAction *exportNoteAction; QAction *exportAsPdfAction; QAction *importNoteAction; QAction *accountDialogAction; QAction *pauseIndexingAction; QAction *disableEditingAction; QAction *userMaintenanceAction; QAction *aboutAction; QAction *aboutQtAction; QAction *undoAction; QAction *redoAction; QAction *cutAction; QAction *copyAction; QAction *pasteAction; QAction *pasteAsTextAction; QAction *removeFormattingAction; QAction *selectAllAction; QAction *preferencesAction; QAction *searchNotesAction; QAction *searchFindAction; QAction *searchFindNextAction; QAction *searchFindPrevAction; QAction *searchFindReplaceAction; QAction *resetSearchAction; QAction *viewSourceAction; QAction *viewHistoryAction; QAction *viewPresentationModeAction; QAction *viewExtendedInformation; QAction *viewNoteListWide; QAction *viewNoteListNarrow; QAction *viewLeftPanel; QAction *viewFavoritesTree; QAction *viewNotebookTree; QAction *viewTagTree; QAction *viewSearchTree; QAction *viewAttributesTree; QAction *viewTrashTree; QAction *viewNoteList; QAction *viewNotePanel; QAction *viewToolbar; QAction *viewStatusbar; QAction *deleteNoteAction; QAction *newNoteAction; QAction *reindexNoteAction; QAction *newWebcamNoteAction; QAction *duplicateNoteAction; QAction *pinNoteAction; QAction *unpinNoteAction; QAction *spellCheckAction; QAction *openTrunkAction; QAction *openManualAction; QAction *openEvernoteSupportAction; QAction *openMessageLogAction; QAction *openUserForumAction; QAction *openEvernoteAccountPageAction; QAction *themeInformationAction; QAction *openShortcutsDialogAction; QAction *openGithubAction; explicit NMainMenuBar(QWidget *parent = 0); void addUserAccount(QAction *action); void setupThemeMenu(); signals: public slots: void openManual(); void openUserForum(); void openEvernoteAccountPage(); void openThemeInformation(); }; #endif // NMAINMENUBAR_H nixnote2-2.0.2/gui/nnotebookview.cpp000066400000000000000000001117421315604104400174460ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "nnotebookview.h" #include "global.h" #include "nnotebookviewitem.h" #include #include #include #include #include #include #include #include #include "sql/notebooktable.h" #include "sql/linkednotebooktable.h" #include "sql/sharednotebooktable.h" #include "sql/notetable.h" #include "dialog/notebookproperties.h" #include "gui/nnotebookviewdelegate.h" #include "gui/widgetpanel.h" #include "sql/nsqlquery.h" #define NAME_POSITION 0 extern Global global; // Constructor NNotebookView::NNotebookView(QWidget *parent) : QTreeWidget(parent) { stackStore.clear(); dataStore.clear(); this->setFont(global.getGuiFont(font())); filterPosition = -1; maxCount = 0; // Highest count of any notebook. Used in calculating column width // setup options this->setEditTriggers(QAbstractItemView::NoEditTriggers); this->setSelectionBehavior(QAbstractItemView::SelectRows); this->setSelectionMode(QAbstractItemView::SingleSelection); this->setRootIsDecorated(true); this->setSortingEnabled(false); this->header()->setVisible(false); this->setStyleSheet("QTreeView {border-image:none; image:none;} "); root = new NNotebookViewItem(0); root->setType(NNotebookViewItem::Stack); root->setData(NAME_POSITION, Qt::UserRole, "rootsynchronized"); root->setData(NAME_POSITION, Qt::DisplayRole, tr("Notebooks")); QFont rootFont = root->font(NAME_POSITION); rootFont.setBold(true); root->setFont(NAME_POSITION, rootFont); root->setRootColor(false); this->setMinimumHeight(1); this->addTopLevelItem(root); this->rebuildNotebookTreeNeeded = true; this->loadData(); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); connect(this, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(calculateHeight())); connect(this, SIGNAL(itemCollapsed(QTreeWidgetItem*)), this, SLOT(calculateHeight())); connect(this, SIGNAL(itemSelectionChanged()), this, SLOT(buildSelection())); addAction = context.addAction(tr("Create New Notebook")); addAction->setShortcut(QKeySequence(Qt::Key_Insert)); addAction->setShortcutContext(Qt::WidgetShortcut); addShortcut = new QShortcut(this); addShortcut->setKey(QKeySequence(Qt::Key_Insert)); addShortcut->setContext(Qt::WidgetShortcut); context.addSeparator(); deleteAction = context.addAction(tr("Delete")); deleteAction->setShortcut(QKeySequence(Qt::Key_Delete)); deleteShortcut = new QShortcut(this); deleteShortcut->setKey(QKeySequence(Qt::Key_Delete)); deleteShortcut->setContext(Qt::WidgetShortcut); // Start building the stack menu stackMenu = context.addMenu(tr("Add to stack")); QAction *newAction; NotebookTable table(global.db); QStringList stacks; table.getStacks(stacks); for (int i=0; iaddAction(stacks[i]); connect(newAction, SIGNAL(triggered()), this, SLOT(moveToStackRequested())); } sortStackMenu(); if (stacks.size() > 0) { stackMenu->addSeparator(); } newStackAction = stackMenu->addAction(tr("Create New stack")); connect(newStackAction, SIGNAL(triggered()), this, SLOT(moveToNewStackRequested())); removeFromStackAction = context.addAction(tr("Remove from stack")); removeFromStackAction->setShortcutContext(Qt::WidgetShortcut); removeFromStackAction->setVisible(false); renameAction = context.addAction(tr("Rename")); renameAction->setShortcutContext(Qt::WidgetShortcut); //renameShortcut = new QShortcut(this); //renameShortcut->setKey(QKeySequence(Qt::Key_F2)); //renameShortcut->setContext(Qt::WidgetShortcut); context.addSeparator(); propertiesAction = context.addAction(tr("Properties")); connect(addAction, SIGNAL(triggered()), this, SLOT(addRequested())); connect(deleteAction, SIGNAL(triggered()), this, SLOT(deleteRequested())); connect(renameAction, SIGNAL(triggered()), this, SLOT(renameRequested())); connect(propertiesAction, SIGNAL(triggered()), this, SLOT(propertiesRequested())); connect(addShortcut, SIGNAL(activated()), this, SLOT(addRequested())); connect(deleteShortcut, SIGNAL(activated()), this, SLOT(deleteRequested())); //connect(renameShortcut, SIGNAL(activated()), this, SLOT(renameRequested())); connect(removeFromStackAction, SIGNAL(triggered()), this, SLOT(removeFromStackRequested())); this->setAcceptDrops(true); this->setItemDelegate(new NNotebookViewDelegate()); root->setExpanded(true); this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); this->setFrameShape(QFrame::NoFrame); //setStyle(new MyStyle("QTreeView")); // setStyle(new QCleanlooksStyle); //setStyleSheet("::branches {image: url(:right-arrow.png);}"); // setStyleSheet("QTreeView::branch { image: url(:right-arrow.png); }"); expandedImage = new QImage(":expandedIcon"); collapsedImage = new QImage(":collapsedIcon"); this->setProperty("animated", false); } // Destructor NNotebookView::~NNotebookView() { this->blockSignals(true); delete root; } void NNotebookView::calculateHeight() { int h = 0; int topLevelCount = topLevelItemCount(); for(int i = 0;i < topLevelCount;i++) { QTreeWidgetItem * item = topLevelItem(i); h += calculateHeightRec(item); h += item->sizeHint(0).height() + 5; } if(h != 0) { setMinimumHeight(h); setMaximumHeight(h); } this->setMaximumWidth(this->sizeHint().width()); } int NNotebookView::calculateHeightRec(QTreeWidgetItem * item) { if(!item) return 0; QModelIndex index = indexFromItem(item); if(!item->isExpanded()) { return rowHeight(index); } //int h = item->sizeHint(0).height() + 2 + rowHeight(index); int h = item->sizeHint(0).height() +rowHeight(index); int childCount = item->childCount(); for(int i = 0; i < childCount;i++) { h += calculateHeightRec(item->child(i)); } return h; } // This allows for the tree item to be toggled. If the prior item is selected again // it is deselected. If it is the root item, we don't permit the selection. void NNotebookView::mousePressEvent(QMouseEvent *event) { QModelIndex item = indexAt(event->pos()); bool selected = selectionModel()->isSelected(indexAt(event->pos())); QTreeView::mousePressEvent(event); if (selected && (event->buttons() & Qt::LeftButton)) selectionModel()->select(item, QItemSelectionModel::Deselect); for (int i=0; iselectedItems() .size(); i++) { if (this->selectedIndexes().at(i).data(Qt::UserRole).toString().startsWith("root", Qt::CaseInsensitive)) { if (!root->isExpanded()) root->setExpanded(true); selectionModel()->select(this->selectedIndexes().at(i), QItemSelectionModel::Deselect); } } } // Load up the data from the database void NNotebookView::loadData() { NSqlQuery query(global.db); NotebookTable notebookTable(global.db); QList closedLids; notebookTable.getClosedNotebooks(closedLids); QHash::iterator i1; for (i1=dataStore.begin(); i1!=dataStore.end(); ++i1) { if (i1.value() != NULL) i1.value()->setHidden(true); } QHash::iterator i2; for (i2=stackStore.begin(); i2!=stackStore.end(); ++i2) { if (i2.value() != NULL) i2.value()->setHidden(true); } dataStore.clear(); query.exec("Select lid, name, stack, username from NotebookModel order by username, name"); while (query.next()) { qint32 lid = query.value(0).toInt(); if (!notebookTable.isDeleted(query.value(0).toInt())) { NNotebookViewItem *newWidget = new NNotebookViewItem(lid); newWidget->setData(NAME_POSITION, Qt::DisplayRole, query.value(1).toString()); newWidget->setData(NAME_POSITION, Qt::UserRole, lid); if (closedLids.contains(lid)) newWidget->setHidden(true); QString username = query.value(3).toString(); if (username.trimmed() != "") newWidget->stack = username; else newWidget->stack = query.value(2).toString(); this->dataStore.insert(query.value(0).toInt(), newWidget); root->addChild(newWidget); if (newWidget->stack != "" && !stackStore.contains(newWidget->stack)) { NNotebookViewItem *stackWidget = new NNotebookViewItem(0); stackWidget->setData(NAME_POSITION, Qt::DisplayRole, newWidget->stack); stackWidget->setData(NAME_POSITION, Qt::UserRole, "STACK"); if (username != "") stackWidget->setType(NNotebookViewItem::LinkedStack); stackStore.insert(newWidget->stack, stackWidget); root->addChild(stackWidget); } } } query.finish(); this->rebuildTree(); this->resetSize(); } // Rebuild the notebook tree view void NNotebookView::rebuildTree() { if (!this->rebuildNotebookTreeNeeded) return; // Go through all the widgets in the view. If // it should be hidden (because the notebook is closed // then hide it, othwise make it visible. If it has // a stack, then save the stack name later so we can // display stacks properly. NotebookTable notebookTable(global.db); QList closedLids; notebookTable.getClosedNotebooks(closedLids); QHashIterator i(dataStore); while (i.hasNext()) { i.next(); NNotebookViewItem *widget = i.value(); if (widget != NULL) { if (i.value()->stack != "") { NNotebookViewItem *stackWidget = NULL; if (stackStore.contains(i.value()->stack)) { stackWidget = stackStore[i.value()->stack]; } else { NNotebookViewItem *stackWidget = new NNotebookViewItem(0); stackWidget->setData(NAME_POSITION, Qt::DisplayRole, i.value()->stack); stackWidget->setData(NAME_POSITION, Qt::UserRole, "STACK"); stackStore.insert(widget->stack, stackWidget); root->addChild(stackWidget); } i.value()->parent()->removeChild(i.value()); stackWidget->childrenLids.append(i.key()); stackWidget->addChild(i.value()); } if (closedLids.contains(widget->lid)) widget->setHidden(true); else widget->setHidden(false); } } // Remove any empty stacks QHashIterator s(stackStore); while (s.hasNext()) { s.next(); if (s.value()->childCount() == 0) { root->removeChild(s.value()); stackStore.remove(s.key()); } else { s.value()->setHidden(true); // hide by default. We'll unhide later when chirdren are found } } // unhide any empty stacks. They were hidden above but // we look for any children that are visible. If they are // visible we make the parent visible. This way, any stack // that has all hidden chilren are visible, but others are // hidden. QHashIterator h(dataStore); while (h.hasNext()) { h.next(); if (h.value() != NULL && h.value()->parent() != NULL && !h.value()->isHidden()) h.value()->parent()->setHidden(false); } this->sortByColumn(NAME_POSITION, Qt::AscendingOrder); this->rebuildNotebookTreeNeeded = false; this->resetSize(); } void NNotebookView::notebookUpdated(qint32 lid, QString name, QString stackName, bool isLinked, bool shared) { this->rebuildNotebookTreeNeeded = true; // Check if it already exists if (this->dataStore.contains(lid)) { NNotebookViewItem *newWidget = dataStore[lid]; if (newWidget == NULL) { newWidget = new NNotebookViewItem(lid); dataStore.remove(lid); dataStore.insert(lid, newWidget); } newWidget->setData(NAME_POSITION, Qt::DisplayRole, name); newWidget->setData(NAME_POSITION, Qt::UserRole, lid); newWidget->stack = stackName; if (stackName != "" && !this->stackStore.contains(newWidget->stack)) { NNotebookViewItem *stackWidget = new NNotebookViewItem(0); stackWidget->setData(NAME_POSITION, Qt::DisplayRole, newWidget->stack); stackWidget->setData(NAME_POSITION, Qt::UserRole, "STACK"); if (isLinked) stackWidget->setType(NNotebookViewItem::LinkedStack); stackStore.insert(newWidget->stack, stackWidget); root->addChild(stackWidget); } root->addChild(newWidget); } else { NNotebookViewItem *newWidget = new NNotebookViewItem(lid); newWidget->setData(NAME_POSITION, Qt::DisplayRole, name); newWidget->setData(NAME_POSITION, Qt::UserRole, lid); newWidget->stack = stackName; this->dataStore.insert(lid, newWidget); NNotebookViewItem *stackWidget = NULL; if (stackName !="" && this->stackStore.contains(newWidget->stack)) { stackWidget = stackStore[stackName]; } if (stackName !="" && !this->stackStore.contains(newWidget->stack)) { stackWidget = new NNotebookViewItem(0); stackWidget->setData(NAME_POSITION, Qt::DisplayRole, newWidget->stack); stackWidget->setData(NAME_POSITION, Qt::UserRole, "STACK"); if (isLinked) stackWidget->setType(NNotebookViewItem::LinkedStack); if (shared) newWidget->setType(NNotebookViewItem::Shared); stackStore.insert(newWidget->stack, stackWidget); root->addChild(stackWidget); } if (stackWidget == NULL) { root->addChild(newWidget); } else { stackWidget->addChild(newWidget); stackWidget->childrenLids.append(newWidget->lid); } if (this->dataStore.count() == 1) { this->expandAll(); } } resetSize(); this->sortByColumn(NAME_POSITION); } void NNotebookView::resetSize() { calculateHeight(); } //************************************************************* // This function is called when a user selects something // within this tree. It also emits a signal that will // be picked up by the main nixnote program. //************************************************************* void NNotebookView::buildSelection() { QLOG_TRACE() << "Inside NNotebookView::buildSelection()"; QList selectedItems = this->selectedItems(); if (selectedItems.size() > 0 && selectedItems[0]->data(0,Qt::UserRole).toString().startsWith("root"), Qt::CaseInsensitive) return; // First, find out if we're already viewing history. If we are we // chop off the end of the history & start a new one if (global.filterPosition+1 < global.filterCriteria.size()) { while (global.filterPosition+1 < global.filterCriteria.size()) global.filterCriteria.removeLast(); } int currentCount = global.filterCriteria.size(); FilterCriteria *newFilter = new FilterCriteria(); if (currentCount > 0) { FilterCriteria *currentFilter = global.filterCriteria[currentCount-1]; if (currentFilter->isLidSet()) { newFilter->setLid(currentFilter->getLid()); } if (currentFilter->isSelectedNotesSet()) { QList lids; currentFilter->getSelectedNotes(lids); newFilter->setSelectedNotes(lids); } } if (selectedItems.size() > 0) { newFilter->setNotebook(*(selectedItems[0])); } qint32 notebookLid = 0; if (selectedItems.size() > 0) notebookLid = selectedItems[0]->data(NAME_POSITION, Qt::UserRole).toInt(); newFilter->resetAttribute = true; newFilter->resetDeletedOnly = true; newFilter->resetFavorite = true; newFilter->resetNotebook = true; newFilter->resetSavedSearch = true; newFilter->resetTags = true; newFilter->resetSearchString = true; filterPosition++; global.filterPosition++; global.filterCriteria.push_back(newFilter); emit updateSelectionRequested(); emit notebookSelectionChanged(notebookLid); QLOG_TRACE() << "Leaving NNotebookView::buildSelection()"; } //************************************************************* // This function is called from the main NixNote class. // it will reset the items which are selected based upon // what the user did somewhere else (outside this widget). //************************************************************* void NNotebookView::updateSelection() { blockSignals(true); FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; if (global.filterPosition != filterPosition) { QList selectedItems = this->selectedItems(); for (int i=0; iresetNotebook; i++) { selectedItems[i]->setSelected(false); } if (criteria->isNotebookSet()) { criteria->getNotebook()->setSelected(true); } } filterPosition = global.filterPosition; if (selectedItems().size() == 0) root->setSelected(false); blockSignals(false); } void NNotebookView::notebookExpunged(qint32 lid) { // Check if it already exists if (this->dataStore.contains(lid)) { NNotebookViewItem *item = this->dataStore.value(lid); NNotebookViewItem *parent = (NNotebookViewItem*)item->parent(); //this->removeItemWidget(item, 0); dataStore.remove(lid); if (parent != NULL) { parent->removeChild(item); if (parent->childCount() == 0 && parent->parent() != NULL) { parent->parent()->removeChild(parent); stackStore.remove(parent->stack); dataStore.remove(parent->lid); } } //delete item; } this->resetSize(); } void NNotebookView::contextMenuEvent(QContextMenuEvent *event) { QList items = selectedItems(); QAction *stackAction = stackMenu->menuAction(); context.removeAction(stackAction); if (items.size() == 0) { propertiesAction->setEnabled(false); deleteAction->setEnabled(false); renameAction->setEnabled(false); removeFromStackAction->setVisible(false); } else { propertiesAction->setEnabled(true); deleteAction->setEnabled(true); renameAction->setEnabled(true); removeFromStackAction->setVisible(false); NotebookTable table(global.db); for (int i=0; idata(NAME_POSITION, Qt::UserRole).toString() == "STACK") { deleteAction->setEnabled(false); removeFromStackAction->setVisible(false); } else { qint32 lid = items[i]->data(NAME_POSITION, Qt::UserRole).toInt(); if (table.isStacked(lid)) { removeFromStackAction->setVisible(true); } else { removeFromStackAction->setVisible(false); context.insertAction(renameAction, stackAction); } } } } context.exec(event->globalPos()); } void NNotebookView::addRequested() { NotebookProperties dialog; QList items = selectedItems(); dialog.setLid(0); dialog.exec(); if (!dialog.okPressed) return; NotebookTable table(global.db); QString name = dialog.name.text().trimmed(); qint32 lid = table.findByName(name); NNotebookViewItem *newWidget = new NNotebookViewItem(lid); newWidget->total = 0; newWidget->subTotal = 0; newWidget->setData(NAME_POSITION, Qt::DisplayRole, name); newWidget->setData(NAME_POSITION, Qt::UserRole, lid); this->dataStore.insert(lid, newWidget); root->addChild(newWidget); this->sortItems(NAME_POSITION, Qt::AscendingOrder); resetSize(); this->sortByColumn(NAME_POSITION); emit(notebookAdded(lid)); } void NNotebookView::propertiesRequested() { NotebookProperties dialog; QList items = selectedItems(); qint32 lid = items[0]->data(NAME_POSITION, Qt::UserRole).toInt(); QString oldName = items[0]->data(NAME_POSITION, Qt::DisplayRole).toString(); dialog.setLid(lid); dialog.exec(); if (!dialog.okPressed) return; QString newName = dialog.name.text().trimmed(); if (newName != oldName) { items[0]->setData(NAME_POSITION, Qt::DisplayRole, newName); this->sortByColumn(NAME_POSITION, Qt::AscendingOrder); this->rebuildNotebookTreeNeeded = false; this->resetSize(); emit(notebookRenamed(lid, oldName, newName)); } } void NNotebookView::deleteRequested() { QList items = selectedItems(); qint32 lid = items[0]->data(NAME_POSITION, Qt::UserRole).toInt(); if (global.confirmDeletes()) { QMessageBox msgBox; msgBox.setIcon(QMessageBox::Question); msgBox.setText(tr("Are you sure you want to delete this notebook?")); msgBox.setWindowTitle(tr("Verify Delete")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::No); int ret = msgBox.exec(); if (ret == QMessageBox::No) return; } NotebookTable table(global.db); table.deleteNotebook(lid); items[0]->setHidden(true); dataStore.remove(lid); emit(notebookDeleted(lid, items[0]->data(NAME_POSITION, Qt::UserRole).toString())); } //********************************************************* //* A rename of the notebook / stack was requested. //********************************************************* void NNotebookView::renameRequested() { editor = new TreeWidgetEditor(this); connect(editor, SIGNAL(editComplete()), this, SLOT(editComplete())); QList items = selectedItems(); editor->setText(items[0]->text(NAME_POSITION)); if (items[0]->data(NAME_POSITION, Qt::UserRole).toString() != "STACK") { editor->lid = items[0]->data(NAME_POSITION, Qt::UserRole).toInt(); } else { editor->lid = -1; editor->stackName = items[0]->data(NAME_POSITION, Qt::DisplayRole).toString(); } editor->setTreeWidgetItem(items[0], NAME_POSITION); QFontMetrics m(font()); editor->setMinimumHeight(m.height()+4); editor->setMaximumHeight(m.height()+4); setItemWidget(items[0], NAME_POSITION, editor); editor->setFocus(); } void NNotebookView::editComplete() { editor->setVisible(false); QString text = editor->text().trimmed(); // Check if this is a notebook or a stack if (editor->lid > 0) { qint32 lid = editor->lid; NotebookTable table(global.db); Notebook notebook; table.get(notebook, lid); QString oldName = ""; if (notebook.name.isSet()) oldName = notebook.name; // Check that this notebook doesn't already exist // if it exists or the length == 0, we go back to the original name qint32 check = 0; if (text.toLower() == oldName.toLower() && text != oldName) check = 0; else check = table.findByName(text); if (check != 0 || text.trimmed() == "") { NNotebookViewItem *item = dataStore[lid]; item->setData(NAME_POSITION, Qt::DisplayRole, oldName); } else { notebook.name = text; table.update(notebook, true); emit notebookRenamed(lid, oldName, text); } //delete editor; this->sortItems(NAME_POSITION, Qt::AscendingOrder); resetSize(); this->sortByColumn(NAME_POSITION); } else { // This is if we are renaming a stack QString oldName = editor->stackName; NNotebookViewItem *item = stackStore[oldName]; // If this is null, then we are on our second time here. if (item == NULL) return; if (text.trimmed() == "" || stackStore[text.trimmed()] != NULL) { item->setData(NAME_POSITION, Qt::DisplayRole, oldName); return; } NotebookTable table(global.db); table.renameStack(oldName, text); // Rename it in the stackStore stackStore.remove(oldName); stackStore.insert(text, item); // Remove the old menu item for (int i=0; iactions().size(); i++) { if(stackMenu->actions().at(i)->text() == oldName) { stackMenu->removeAction(stackMenu->actions().at(i)); i = stackMenu->actions().size(); } } // Create a new menu item bool found = false; for (int i=0; iactions().size()-1; i++) { if (stackMenu->actions().at(i)->text().toUpper() > text.toUpper()) { QAction *newAction = stackMenu->addAction(text); stackMenu->removeAction(newAction); stackMenu->insertAction(stackMenu->actions().at(i), newAction); connect(newAction, SIGNAL(triggered()), this, SLOT(moveToStackRequested())); i=stackMenu->actions().size(); found = true; } } if (!found) { QAction *newAction = stackMenu->addAction(text); stackMenu->removeAction(newAction); int endPos = stackMenu->actions().size()-1; stackMenu->insertAction(stackMenu->actions().at(endPos), newAction); connect(newAction, SIGNAL(triggered()), this, SLOT(moveToStackRequested())); } this->sortItems(NAME_POSITION, Qt::AscendingOrder); resetSize(); this->sortByColumn(NAME_POSITION); emit(stackRenamed(oldName, text)); } } void NNotebookView::moveToStackRequested() { QList items = selectedItems(); if (items.size() == 0) return; QAction *action = (QAction*)sender(); qint32 lid = items[0]->data(NAME_POSITION, Qt::UserRole).toInt(); Notebook notebook; NotebookTable table(global.db); table.get(notebook, lid); notebook.stack = action->text(); table.update(notebook, true); // Now move it in the actual tree NNotebookViewItem *stackWidget, *notebookWidget; stackWidget = stackStore[action->text()]; notebookWidget = dataStore[lid]; notebookWidget->parent()->removeChild(notebookWidget); stackWidget->addChild(notebookWidget); this->sortItems(NAME_POSITION, Qt::AscendingOrder); resetSize(); this->sortByColumn(NAME_POSITION); } void NNotebookView::moveToNewStackRequested() { QList items = selectedItems(); if (items.size() == 0) return; QString newStackName = "New Stack"; int i=1; QString iStr; QList books; NotebookTable table(global.db); while (i>=0) { books.clear(); table.findByStack(books, newStackName); if (books.size() == 0) { i=-1; } else { iStr = QVariant(i).toString(); newStackName = tr("New Stack (") +iStr +tr(")"); i++; } } // Create the new stack & move the child to it NNotebookViewItem *newStack = new NNotebookViewItem(0); newStack->setText(NAME_POSITION, newStackName); newStack->setData(NAME_POSITION, Qt::UserRole, "STACK"); stackStore.insert(newStackName, newStack); topLevelItem(0)->addChild(newStack); items[0]->parent()->removeChild(items[0]); newStack->addChild(items[0]); // Create a new action item for the menu QAction *newAction = stackMenu->addAction(newStackName); connect(newAction, SIGNAL(triggered()), this, SLOT(moveToStackRequested())); menuData.insert(newStackName, newAction); sortStackMenu(); // Update the note in the database qint32 lid = items[0]->data(NAME_POSITION, Qt::UserRole).toInt(); Notebook book; table.get(book, lid); book.stack = newStackName; table.update(book, true); this->sortItems(NAME_POSITION, Qt::AscendingOrder); resetSize(); this->sortByColumn(NAME_POSITION); newStack->setExpanded(true); emit(stackAdded(newStackName)); } void NNotebookView::removeFromStackRequested() { QList items = selectedItems(); qint32 lid = items[0]->data(NAME_POSITION, Qt::UserRole).toInt(); NotebookTable table(global.db); table.removeFromStack(lid); // Now move it in the actual tree NNotebookViewItem *stackWidget, *notebookWidget; notebookWidget = dataStore[lid]; stackWidget = (NNotebookViewItem*)notebookWidget->parent(); stackWidget->removeChild(notebookWidget); stackWidget->parent()->addChild(notebookWidget); if (stackWidget->childCount() == 0) { stackWidget->parent()->removeChild(stackWidget); QString text = stackWidget->text(NAME_POSITION); for (int i=0; iactions().size(); i++) { if (stackMenu->actions().at(i)->text() == text) { stackMenu->actions().at(i)->setVisible(false); emit(stackDeleted(text)); i = stackMenu->actions().size(); } } } this->sortItems(NAME_POSITION, Qt::AscendingOrder); resetSize(); this->sortByColumn(NAME_POSITION); } void NNotebookView::sortStackMenu() { QList keyList = menuData.keys(); for (int i=0; iremoveAction(menuData[keyList[i]]); } // Sort the key qSort(keyList); for (int i=0; iinsertAction(stackMenu->actions().at(0), menuData[keyList[i]]); } } void NNotebookView::updateTotals(qint32 lid, qint32 subTotal, qint32 total) { NNotebookViewItem *item = NULL; if (lid == -1) { item = root; root->total = 0; root->subTotal = 0; QHash::iterator s; for (s=stackStore.begin(); s!=stackStore.end(); ++s) { if (s.value() != NULL) { s.value()->total = 0; s.value()->subTotal = 0; } } QHash::iterator i; for (i=dataStore.begin(); i!=dataStore.end(); ++i) { if (i.value() != NULL) { root->total += i.value()->total; root->subTotal += i.value()->subTotal; if (i.value()->stack != "") { NNotebookViewItem* stack = stackStore[i.value()->stack]; if (stack!=NULL) { stack->total += i.value()->total; stack->subTotal += i.value()->subTotal; } } } } } if (lid > 0) { if (dataStore.contains(lid)) { item = dataStore[lid]; } if (item == NULL) return; item->subTotal = subTotal; item->total = total; if (subTotal > maxCount) maxCount = subTotal; } repaint(); return; } // Handle what happens when something is dropped onto a tag item bool NNotebookView::dropMimeData(QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action) { Q_UNUSED(index); // suppress unused variable Q_UNUSED(action); // suppress unused variable // If this is a note-to-tag drop we are assigning tags to a note if (data->hasFormat("application/x-nixnote-note")) { QByteArray d = data->data("application/x-nixnote-note"); QString data(d); // Find the tag lid we dropped onto qint32 bookLid = parent->data(NAME_POSITION, Qt::UserRole).toInt(); if (bookLid <=0) return false; NotebookTable bookTable(global.db); Notebook notebook; bookTable.get(notebook, bookLid); // The string has a long list of note lids. We parse them out & update the note QStringList stringLids = data.split(" "); for (int i=0; i 0) { NoteTable noteTable(global.db); qint32 currentNotebook = noteTable.getNotebookLid(noteLid); if (currentNotebook != bookLid) { noteTable.updateNotebook(noteLid, bookLid, true); emit(updateNoteList(noteLid, NOTE_TABLE_NOTEBOOK_POSITION, notebook.name.value())); // qint64 dt = QDateTime::currentMSecsSinceEpoch(); // noteTable.updateDate(noteLid, dt, NOTE_UPDATED_DATE, true); // emit(updateNoteList(noteLid, NOTE_TABLE_DATE_UPDATED_POSITION, dt)); } } } } if (stringLids.size() > 0) { emit(updateCounts()); } return true; } return false; } // Implement of dropEvent so dropMimeData gets called void NNotebookView::dropEvent(QDropEvent *event) { QTreeView::dropEvent(event); } // Drag tag event. Determine if dragging is even possible void NNotebookView::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasFormat("application/x-nixnote-note")) { event->accept(); return; } if (event->mimeData()->hasFormat("application/x-nixnote-notebook")) { event->accept(); return; } if (event->mimeData()->hasFormat("application/x-nixnote-tag")) { event->accept(); return; } event->ignore(); } // Accept the drag move event if possible void NNotebookView::dragMoveEvent(QDragMoveEvent *event) { WidgetPanel *parent = (WidgetPanel*)parentWidget(); parent->dragMoveHandler(event); if (event->mimeData()->hasFormat("application/x-nixnote-note")) { if (event->answerRect().intersects(childrenRect())) event->acceptProposedAction(); return; } } QSize NNotebookView::sizeHint() { return parentWidget()->size(); //return QTreeView::sizeHint(); } void NNotebookView::drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const { if (!index.child(0,0).isValid()) return; painter->save(); if (isExpanded(index)) { int offset = rect.width()-expandedImage->width()-1; int voffset = (rect.height() - expandedImage->height()) / 2; painter->drawImage(offset, rect.y()+voffset,*expandedImage); } else { int offset = rect.width()-collapsedImage->width()-1; int voffset = (rect.height() - collapsedImage->height()) / 2; painter->drawImage(offset, rect.y()+voffset,*collapsedImage); } painter->restore(); return; // if (index.data(Qt::UserRole).toString() == "rootsynchronized") // return; // QTreeView::drawBranches(painter, rect, index); } void NNotebookView::mouseMoveEvent(QMouseEvent *event) { if (currentItem() == NULL) return; if (!(event->buttons() & Qt::LeftButton)) return; QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; NNotebookViewItem *current = (NNotebookViewItem*)currentItem(); QString mime = QString::number(current->type) +QString("/") +QString::number(current->lid) +QString("/") + current->data(NAME_POSITION, Qt::DisplayRole).toString(); QString userdata = current->data(NAME_POSITION, Qt::UserRole).toString(); if (userdata.startsWith("root", Qt::CaseInsensitive)) return; mimeData->setData("application/x-nixnote-notebook", mime.toUtf8()); drag->setMimeData(mimeData); drag->exec(Qt::MoveAction); } void NNotebookView::reloadIcons() { QHash::iterator i; for (i=dataStore.begin(); i!=dataStore.end(); ++i) { NNotebookViewItem* data = i.value(); data->reloadIcon(); } QHash::iterator j; for (j=stackStore.begin(); j!=stackStore.end(); ++j) { NNotebookViewItem* data = j.value(); data->reloadIcon(); } root->reloadIcon(); } nixnote2-2.0.2/gui/nnotebookview.h000066400000000000000000000070671315604104400171170ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NNOTEBOOKVIEW_H #define NNOTEBOOKVIEW_H #include "nnotebookviewitem.h" #include "treewidgeteditor.h" #include #include #include class NNotebookView : public QTreeWidget { Q_OBJECT private: virtual void mousePressEvent(QMouseEvent *event); int filterPosition; QMenu context; QMenu *stackMenu; QAction *addAction; QAction *propertiesAction; QAction *deleteAction; QAction *renameAction; QAction *newStackAction; QAction *removeFromStackAction; //QShortcut *renameShortcut; QShortcut *addShortcut; QShortcut *deleteShortcut; TreeWidgetEditor *editor; QHash menuData; int maxCount; void sortStackMenu(); QImage *collapsedImage; QImage *expandedImage; private slots: int calculateHeightRec(QTreeWidgetItem * item); void calculateHeight(); void editComplete(); public: explicit NNotebookView(QWidget *parent = 0); ~NNotebookView(); NNotebookViewItem *root; void resetSize(); void updateSelection(); void loadData(); bool rebuildNotebookTreeNeeded; void contextMenuEvent(QContextMenuEvent *event); QHash dataStore; QHash stackStore; QSize sizeHint(); void drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const; void reloadIcons(); signals: void updateSelectionRequested(); void notebookRenamed(qint32 lid, QString oldName, QString newName); void notebookDeleted(qint32 lid, QString name); void notebookAdded(qint32 lid); void stackAdded(QString name); void stackDeleted(QString name); void stackRenamed(QString oldName, QString newName); void notebookSelectionChanged(qint32); void updateNoteList(qint32 noteLid, int column, QVariant tags); void updateCounts(); public slots: void notebookUpdated(qint32 lid, QString name, QString stackName, bool linked, bool shared); void rebuildTree(); void buildSelection(); void addRequested(); void propertiesRequested(); void deleteRequested(); void renameRequested(); void moveToStackRequested(); void moveToNewStackRequested(); void removeFromStackRequested(); void notebookExpunged(qint32 lid); void updateTotals(qint32 lid, qint32 subTotal, qint32 total); bool dropMimeData(QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action); void dropEvent(QDropEvent *event); void dragEnterEvent(QDragEnterEvent *event); void dragMoveEvent(QDragMoveEvent *event); void mouseMoveEvent(QMouseEvent *event); }; #endif // NNOTEBOOKVIEW_H nixnote2-2.0.2/gui/nnotebookviewdelegate.cpp000066400000000000000000000106221315604104400211340ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "nnotebookviewdelegate.h" #include #include "nnotebookviewitem.h" #include "nnotebookview.h" #include "global.h" #include extern Global global; NNotebookViewDelegate::NNotebookViewDelegate(QObject *parent) : QStyledItemDelegate(parent) { } void NNotebookViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { #if QT_VERSION < 0x050000 QStyleOptionViewItemV4 options = option; #else QStyleOptionViewItem options = option; #endif initStyleOption(&options, index); options.widget->style()->drawControl(QStyle::CE_ItemViewItem, &options, painter); if (global.countBehavior == Global::CountNone) return; qint32 lid = index.data(Qt::UserRole).toInt(); QString test = index.data(Qt::UserRole).toString().toLower(); if (test == "stack") return; painter->save(); NNotebookView *tree = NULL; NNotebookViewItem *item = NULL; if (lid > 0) { tree = (NNotebookView*)options.widget; item = tree->dataStore[lid]; } else { tree = (NNotebookView*)options.widget; item = tree->root; } qint32 total = item->total; qint32 subTotal = item->subTotal; QString countString; if (total == subTotal){ countString = QString("(")+QString::number(total) + QString(")"); } else { countString = QString("(")+QString::number(subTotal) + QString("/") + QString::number(total) + QString(")"); } // shift text right to make icon visible QSize iconSize = options.icon.actualSize(options.rect.size()); painter->translate(options.rect.left()+iconSize.width(), options.rect.top()); QRect clip(0, 0, options.rect.width()+iconSize.width(), options.rect.height()); painter->setClipRect(clip); QFontMetrics fm = options.fontMetrics; QFont f = options.font; f.setBold(false); painter->setFont(f); painter->setPen(Qt::darkGray); painter->drawText(10+fm.width(index.data().toString()+QString(" ")),fm.ascent(),countString); painter->restore(); } QSize NNotebookViewDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { // int theWidth=-1; // // handle other types of view here if needed // QTreeView* tree=qobject_cast(this->); // if(tree) // { // qDebug("WIDTH @ %d : %d",index.column(),tree->header()->sectionSize(index.column())); // theWidth=tree->header()->sectionSize(index.column()); // } QSize sz=QStyledItemDelegate::sizeHint(option, index); // if(theWidth>=0) // sz.setWidth(theWidth); return sz; } bool NNotebookViewDelegate::helpEvent(QHelpEvent *e, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index) { if ( !e || !view ) return false; if ( e->type() == QEvent::ToolTip ) { QRect rect = view->visualRect( index ); QSize size = sizeHint( option, index ); if ( rect.width() < size.width() ) { QVariant tooltip = index.data( Qt::DisplayRole ); if ( tooltip.canConvert() ) { QToolTip::showText( e->globalPos(), QString( "
%1
" ) .arg( Qt::escape( tooltip.toString() ) ), view ); return true; } } if ( !QStyledItemDelegate::helpEvent( e, view, option, index ) ) QToolTip::hideText(); return true; } return QStyledItemDelegate::helpEvent( e, view, option, index ); } nixnote2-2.0.2/gui/nnotebookviewdelegate.h000066400000000000000000000031311315604104400205760ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NNOTEBOOKVIEWDELEGATE_H #define NNOTEBOOKVIEWDELEGATE_H #include #include class NNotebookViewDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit NNotebookViewDelegate(QObject *parent = 0); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; signals: public slots: bool helpEvent(QHelpEvent *e, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index); }; //Q_DECLARE_METATYPE(NNotebookViewDelegate) #endif // NNOTEBOOKVIEWDELEGATE_H nixnote2-2.0.2/gui/nnotebookviewitem.cpp000066400000000000000000000076031315604104400203250ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "nnotebookviewitem.h" #include "sql/sharednotebooktable.h" #include "sql/linkednotebooktable.h" #include "sql/notebooktable.h" /* * These constructors are somewhat confusing * If they are like they should be, a comment about the choices here * would be really helpful */ NNotebookViewItem::NNotebookViewItem(qint32 lid, QTreeWidget* parent):QTreeWidgetItem(parent) { total = 0; subTotal = 0; this->lid = 0; this->lid = lid; this->setIconType(); } NNotebookViewItem::NNotebookViewItem(qint32 lid):QTreeWidgetItem(){ subTotal = 0; total = 0; this->lid = lid; this->setIconType(); } void NNotebookViewItem::setRootColor(bool val) { if (val) { QFont f; f.setBold(true); setFont(0, f); } } // Custom sort bool NNotebookViewItem::operator<(const QTreeWidgetItem &other)const { // We sort two ways. First we see if the type is a stack for a linked notebook // If one is a linked stack and the other is not, the one that is not wins. This // makes the linked stack appear at the bottom of the list. int column = treeWidget()->sortColumn(); NNotebookViewItem *ptr = (NNotebookViewItem*)&other; if (this->type == LinkedStack && ptr->type != LinkedStack) return false; // Otherwise we just sort by name. return text(column).toLower() < other.text(column).toLower(); } void NNotebookViewItem::reloadIcon() { setType(this->type); } void NNotebookViewItem::setType(NNotebookWidgetType type) { this->type = type; if (type == Linked) setIcon(0, global.getIconResource(":notebookLinkedIcon")); if (type == Shared) setIcon(0, global.getIconResource(":notebookSharedIcon")); if (type == Local) setIcon(0, global.getIconResource(":notebookLocalIcon")); if (type == Synchronized) setIcon(0, global.getIconResource(":notebookSmallIcon")); if (type == Stack) setIcon(0, global.getIconResource(":stackIcon")); if (type == LinkedStack) setIcon(0, global.getIconResource(":silhouetteIcon")); if (type == Conflict) setIcon(0, global.getIconResource(":notebookConflictIcon")); } void NNotebookViewItem::setIconType() { LinkedNotebookTable linkedTable(global.db); SharedNotebookTable sharedTable(global.db); NotebookTable bookTable(global.db); if (lid == 0) { this->setType(Stack); return; } if (linkedTable.exists(lid)) { this->setType(Linked); return; } if (sharedTable.exists(lid)) { this->setType(Shared); return; } if (!bookTable.isLocal(lid)) { this->setType(Synchronized); return; } Notebook notebook; bookTable.get(notebook, lid); QString notebookname = ""; if (notebook.name.isSet()) notebookname = notebook.name; if (notebookname.startsWith("Conflict", Qt::CaseInsensitive)) { this->setType(Conflict); return; } this->setType(Local); return; } nixnote2-2.0.2/gui/nnotebookviewitem.h000066400000000000000000000033451315604104400177710ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NNOTEBOOKVIEWITEM_H #define NNOTEBOOKVIEWITEM_H #include class NNotebookViewItem : public QTreeWidgetItem { public: enum NNotebookWidgetType { Local = 0, Synchronized = 1, Conflict = 2, Stack = 3, Shared = 4, Linked = 5, LinkedStack = 6 }; void setIconType(); void setType(NNotebookWidgetType type); explicit NNotebookViewItem(qint32 lid); explicit NNotebookViewItem(qint32 lid, QTreeWidget* parent); QString stack; QList childrenLids; qint32 subTotal; qint32 total; NNotebookWidgetType type; qint32 lid; bool operator<(const QTreeWidgetItem &other)const; void setRootColor(bool val) ; void reloadIcon(); signals: public slots: }; #endif // NNOTEBOOKVIEWITEM_H nixnote2-2.0.2/gui/nsearchview.cpp000066400000000000000000000432431315604104400170730ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "nsearchview.h" #include "global.h" #include "nsearchviewitem.h" #include "dialog/savedsearchproperties.h" #include "sql/searchtable.h" #include "gui/treewidgeteditor.h" #include "gui/widgetpanel.h" #include "sql/nsqlquery.h" #include #include #include #include #include #include #include #define NAME_POSITION 0 extern Global global; // Constructor NSearchView::NSearchView(QWidget *parent) : QTreeWidget(parent) { this->setFont(global.getGuiFont(font())); setAcceptDrops(false); setDragEnabled(true); filterPosition = -1; // setup options this->setEditTriggers(QAbstractItemView::NoEditTriggers); this->setSelectionBehavior(QAbstractItemView::SelectRows); this->setSelectionMode(QAbstractItemView::SingleSelection); this->setRootIsDecorated(true); this->setSortingEnabled(false); this->header()->setVisible(false); // Build the root item QIcon icon = global.getIconResource(":searchIcon"); root = new NSearchViewItem(this); root->setIcon(NAME_POSITION,icon); root->setRootColor(true); root->setData(NAME_POSITION, Qt::UserRole, "root"); root->setData(NAME_POSITION, Qt::DisplayRole, tr("Saved Searches")); this->addTopLevelItem(root); this->loadData(); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); connect(this, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(calculateHeight())); connect(this, SIGNAL(itemCollapsed(QTreeWidgetItem*)), this, SLOT(calculateHeight())); connect(this, SIGNAL(itemSelectionChanged()), this, SLOT(buildSelection())); addAction = context.addAction(tr("Create Saved Search")); addAction->setShortcut(QKeySequence(Qt::Key_Insert)); addAction->setShortcutContext(Qt::WidgetShortcut); addShortcut = new QShortcut(this); addShortcut->setKey(QKeySequence(Qt::Key_Insert)); addShortcut->setContext(Qt::WidgetShortcut); context.addSeparator(); deleteAction = context.addAction(tr("Delete")); deleteAction->setShortcut(QKeySequence(Qt::Key_Delete)); deleteShortcut = new QShortcut(this); deleteShortcut->setKey(QKeySequence(Qt::Key_Delete)); deleteShortcut->setContext(Qt::WidgetShortcut); renameAction = context.addAction(tr("Rename")); renameAction->setShortcutContext(Qt::WidgetShortcut); context.addSeparator(); propertiesAction = context.addAction(tr("Properties")); connect(addAction, SIGNAL(triggered()), this, SLOT(addRequested())); connect(deleteAction, SIGNAL(triggered()), this, SLOT(deleteRequested())); connect(renameAction, SIGNAL(triggered()), this, SLOT(renameRequested())); connect(propertiesAction, SIGNAL(triggered()), this, SLOT(propertiesRequested())); connect(addShortcut, SIGNAL(activated()), this, SLOT(addRequested())); connect(deleteShortcut, SIGNAL(activated()), this, SLOT(deleteRequested())); this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); this->setFrameShape(QFrame::NoFrame); expandedImage = new QImage(":expandedIcon"); collapsedImage = new QImage(":collapsedIcon"); this->setProperty("animated", false); } // Destructor NSearchView::~NSearchView() { delete root; } // This allows for the tree item to be toggled. If the prior item is selected again // it is deselected. If it is the root item, we don't permit the selection. void NSearchView::mousePressEvent(QMouseEvent *event) { QModelIndex item = indexAt(event->pos()); bool selected = selectionModel()->isSelected(indexAt(event->pos())); QTreeView::mousePressEvent(event); if (selected && (event->buttons() & Qt::LeftButton)) selectionModel()->select(item, QItemSelectionModel::Deselect); for (int i=0; iselectedItems() .size(); i++) { if (this->selectedIndexes().at(i).data(Qt::UserRole) == "root") { if (!root->isExpanded()) root->setExpanded(true); selectionModel()->select(this->selectedIndexes().at(i), QItemSelectionModel::Deselect); } } } // Load up the data from the database void NSearchView::loadData() { NSqlQuery query(global.db); query.exec("Select lid, name from SearchModel order by name"); while (query.next()) { qint32 lid = query.value(0).toInt(); SearchTable table(global.db); if (!table.isDeleted(lid)) { NSearchViewItem *newWidget = new NSearchViewItem(); newWidget->setData(NAME_POSITION, Qt::DisplayRole, query.value(1).toString()); newWidget->setData(NAME_POSITION, Qt::UserRole, lid); this->dataStore.insert(query.value(0).toInt(), newWidget); root->addChild(newWidget); } } query.finish(); } //************************************************************* // This function is called when a search has been updated from // somewhere else. //************************************************************* void NSearchView::searchUpdated(qint32 lid, QString name) { // Check if it already exists if (this->dataStore.contains(lid)) { NSearchViewItem *newWidget = this->dataStore.value(lid); newWidget->setData(NAME_POSITION, Qt::DisplayRole, name); newWidget->setData(NAME_POSITION, Qt::UserRole, lid); } else { NSearchViewItem *newWidget = new NSearchViewItem(); newWidget->setData(NAME_POSITION, Qt::DisplayRole, name); newWidget->setData(NAME_POSITION, Qt::UserRole, lid); this->dataStore.insert(lid, newWidget); root->addChild(newWidget); if (this->dataStore.count() == 1) { this->expandAll(); } } this->sortItems(NAME_POSITION, Qt::AscendingOrder); resetSize(); this->sortByColumn(NAME_POSITION); } //************************************************************* // This function is called when a search has been removed // during a sync. //************************************************************* void NSearchView::searchExpunged(qint32 lid) { // Check if it already exists if (this->dataStore.contains(lid)) { NSearchViewItem *item = this->dataStore.value(lid); item->parent()->removeChild(item); this->dataStore.remove(lid); } this->resetSize(); } //************************************************************* // Calculate the tree height. //************************************************************* void NSearchView::calculateHeight() { int h = 0; int topLevelCount = topLevelItemCount(); for(int i = 0;i < topLevelCount;i++) { QTreeWidgetItem * item = topLevelItem(i); h += calculateHeightRec(item); h += item->sizeHint(0).height() + 5; } if(h != 0) { setMinimumHeight(h); setMaximumHeight(h); } setMaximumWidth(sizeHint().width()); } int NSearchView::calculateHeightRec(QTreeWidgetItem * item) { if(!item) return 0; QModelIndex index = indexFromItem(item); if(!item->isExpanded()) { return rowHeight(index); } int h = item->sizeHint(0).height() + 2 + rowHeight(index); int childCount = item->childCount(); for(int i = 0; i < childCount;i++) { h += calculateHeightRec(item->child(i)); } return h; } void NSearchView::resetSize() { calculateHeight(); } //************************************************************* // This function is called when a user selects something // within this tree. It also emits a signal that will // be picked up by the main nixnote program. //************************************************************* void NSearchView::buildSelection() { QLOG_TRACE() << "Inside NNotebookView::buildSelection()"; QList selectedItems = this->selectedItems(); // First, find out if we're already viewing history. If we are we // chop off the end of the history & start a new one if (global.filterPosition+1 < global.filterCriteria.size()) { while (global.filterPosition+1 < global.filterCriteria.size()) global.filterCriteria.removeLast(); } filterPosition++; FilterCriteria *newFilter = new FilterCriteria(); global.filterCriteria.push_back(newFilter); global.filterPosition++; if (selectedItems.size() > 0) { newFilter->setSavedSearch(*(NSearchViewItem*)(selectedItems[0])); qint32 lid = selectedItems[0]->data(NAME_POSITION, Qt::UserRole).toInt(); SearchTable stable(global.db); SavedSearch search; if (stable.get(search, lid)) newFilter->setSearchString(search.query); } newFilter->resetAttribute = true; newFilter->resetFavorite = true; newFilter->resetDeletedOnly = true; newFilter->resetNotebook =true; newFilter->resetTags = true; newFilter->resetSavedSearch = true; newFilter->resetSearchString = true; emit updateSelectionRequested(); QLOG_TRACE() << "Leaving NNotebookView::buildSelection()"; } //************************************************************* // This function is called from the main NixNote class. // it will reset the items which are selected based upon // what the user did somewhere else (outside this widget). //************************************************************* void NSearchView::updateSelection() { blockSignals(true); FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; if (global.filterPosition != filterPosition) { QList selectedItems = this->selectedItems(); for (int i=0; iresetSavedSearch; i++) { selectedItems[i]->setSelected(false); } } filterPosition = global.filterPosition; blockSignals(false); } //************************************************************* // This function is called when a user right-clicks on an // item to bring up the popup menu. //************************************************************* void NSearchView::contextMenuEvent(QContextMenuEvent *event) { QList items = selectedItems(); if (items.size() == 0) { propertiesAction->setEnabled(false); deleteAction->setEnabled(false); renameAction->setEnabled(false); } else { propertiesAction->setEnabled(true); deleteAction->setEnabled(true); renameAction->setEnabled(true); } context.exec(event->globalPos()); } //************************************************************* // This function is called when a user clicks "add" from // the popup menu. //************************************************************* void NSearchView::addRequested() { SavedSearchProperties dialog; QList items = selectedItems(); dialog.setLid(0); dialog.exec(); if (!dialog.okPressed) return; SearchTable table(global.db); NSearchViewItem *newWidget = new NSearchViewItem(); QString name = dialog.name.text().trimmed(); qint32 lid = table.findByName(name); newWidget->setData(NAME_POSITION, Qt::DisplayRole, name); newWidget->setData(NAME_POSITION, Qt::UserRole, lid); this->dataStore.insert(lid, newWidget); root->addChild(newWidget); this->sortItems(NAME_POSITION, Qt::AscendingOrder); resetSize(); this->sortByColumn(NAME_POSITION); dataStore.insert(lid, newWidget); } //************************************************************* // This function is called when a user clicks "properties" // from the popup menu. //************************************************************* void NSearchView::propertiesRequested() { SavedSearchProperties dialog; QList items = selectedItems(); qint32 lid = items[0]->data(NAME_POSITION, Qt::UserRole).toInt(); dialog.setLid(lid); dialog.exec(); if (!dialog.okPressed) return; items[0]->setData(NAME_POSITION, Qt::DisplayRole, dialog.name.text().trimmed()); } //************************************************************* // This function is called when a user clicks "delete" from // the popup menu. //************************************************************* void NSearchView::deleteRequested() { QList items = selectedItems(); qint32 lid = items[0]->data(NAME_POSITION, Qt::UserRole).toInt(); if (global.confirmDeletes()) { QMessageBox msgBox; msgBox.setIcon(QMessageBox::Question); msgBox.setText(tr("Are you sure you want to delete this saved search?")); msgBox.setWindowTitle(tr("Verify Delete")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::No); int ret = msgBox.exec(); if (ret == QMessageBox::No) return; } SearchTable s(global.db); s.deleteSearch(lid); items[0]->setHidden(true); dataStore.remove(lid); emit searchDeleted(lid); } //************************************************************* // This function is called when a user clicks "rename" from // the popup menu. //************************************************************* void NSearchView::renameRequested() { editor = new TreeWidgetEditor(this); connect(editor, SIGNAL(editComplete()), this, SLOT(editComplete())); QList items = selectedItems(); editor->setText(items[0]->text(NAME_POSITION)); editor->lid = items[0]->data(NAME_POSITION, Qt::UserRole).toInt(); editor->setTreeWidgetItem(items[0], NAME_POSITION); QFontMetrics m(font()); editor->setMinimumHeight(m.height()+4); editor->setMaximumHeight(m.height()+4); setItemWidget(items[0], NAME_POSITION, editor); editor->setFocus(); } //************************************************************* // This function is called when a user has finished editing a // search. //************************************************************* void NSearchView::editComplete() { QString text = editor->text().trimmed(); qint32 lid = editor->lid; SearchTable table(global.db); SavedSearch s; table.get(s, lid); QString oldName = ""; if (s.name.isSet()) oldName = s.name; // Check that this search doesn't already exist // if it exists, we go back to the original name qint32 check = 0; if (text.toLower() == oldName.toLower() && text != oldName) check = 0; else check = table.findByName(text); if (check != 0 || text.trimmed()=="") { NSearchViewItem *item = dataStore[lid]; QString name = ""; if (s.name.isSet()) name = s.name; item->setData(NAME_POSITION, Qt::DisplayRole,name); } else { s.name = text; table.update(lid, s, true); } this->sortItems(NAME_POSITION, Qt::AscendingOrder); resetSize(); this->sortByColumn(NAME_POSITION); } QSize NSearchView::sizeHint() { return QTreeView::sizeHint(); } //************************************************************* // Draw the branches of the tree. //************************************************************* void NSearchView::drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const { if (!index.child(0,0).isValid()) return; painter->save(); if (isExpanded(index)) { int offset = rect.width()-expandedImage->width()-1; int voffset = (rect.height() - expandedImage->height()) / 2; painter->drawImage(offset, rect.y()+voffset,*expandedImage); } else { int offset = rect.width()-collapsedImage->width()-1; int voffset = (rect.height() - collapsedImage->height()) / 2; painter->drawImage(offset, rect.y()+voffset,*collapsedImage); } painter->restore(); return; } //************************************************************* // Process mouse movements. //************************************************************* void NSearchView::mouseMoveEvent(QMouseEvent *event) { QTreeView::mouseMoveEvent(event); if (currentItem() == NULL) return; if (!(event->buttons() & Qt::LeftButton)) return; QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; NSearchViewItem *current = (NSearchViewItem*)currentItem(); QByteArray mime = current->data(NAME_POSITION, Qt::UserRole).toByteArray(); QString userdata = current->data(NAME_POSITION, Qt::UserRole).toString(); if (userdata.startsWith("root", Qt::CaseInsensitive)) return; mimeData->setData("application/x-nixnote-search", mime); drag->setMimeData(mimeData); drag->exec(Qt::MoveAction); QTreeView::mouseMoveEvent(event); } //************************************************************* // Reload icens in the tree. This is useful if the theme // changes. //************************************************************* void NSearchView::reloadIcons() { root->setIcon(NAME_POSITION,global.getIconResource(":searchIcon")); } nixnote2-2.0.2/gui/nsearchview.h000066400000000000000000000052301315604104400165320ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NSEARCHVIEW_H #define NSEARCHVIEW_H #include #include #include #include #include #include "global.h" #include "nsearchviewitem.h" #include "gui/treewidgeteditor.h" //**************************************************** //* This is the tree for the list of saved searches. //**************************************************** class NSearchView : public QTreeWidget { Q_OBJECT private: virtual void mousePressEvent(QMouseEvent *event); int filterPosition; QMenu context; QAction *addAction; QAction *propertiesAction; QAction *deleteAction; QAction *renameAction; //QShortcut *renameShortcut; QShortcut *addShortcut; QShortcut *deleteShortcut; TreeWidgetEditor *editor; QImage *expandedImage; QImage *collapsedImage; private slots: int calculateHeightRec(QTreeWidgetItem * item); void calculateHeight(); void editComplete(); public: explicit NSearchView(QWidget *parent = 0); ~NSearchView(); NSearchViewItem *root; QHash dataStore; void resetSize(); void loadData(); void contextMenuEvent(QContextMenuEvent *event); QSize sizeHint(); void drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const; void reloadIcons(); signals: void updateSelectionRequested(); void searchDeleted(qint32); public slots: void searchUpdated(qint32 lid, QString name); void searchExpunged(qint32 lid); void buildSelection(); void updateSelection(); void addRequested(); void propertiesRequested(); void deleteRequested(); void renameRequested(); void mouseMoveEvent(QMouseEvent *event); }; #endif // NSEARCHVIEW_H nixnote2-2.0.2/gui/nsearchviewitem.cpp000066400000000000000000000026321315604104400177470ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "nsearchviewitem.h" NSearchViewItem::NSearchViewItem(QTreeWidget* parent):QTreeWidgetItem(parent){} NSearchViewItem::NSearchViewItem():QTreeWidgetItem(){} bool NSearchViewItem::operator<(const QTreeWidgetItem &other)const { int column = treeWidget()->sortColumn(); return text(column).toLower() < other.text(column).toLower(); } void NSearchViewItem::setRootColor(bool val) { if (val) { QFont f; f.setBold(true); setFont(0, f); } } nixnote2-2.0.2/gui/nsearchviewitem.h000066400000000000000000000024431315604104400174140ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NSEARCHVIEWITEM_H #define NSEARCHVIEWITEM_H #include class NSearchViewItem : public QTreeWidgetItem { public: explicit NSearchViewItem(QTreeWidget* parent); explicit NSearchViewItem(); void setRootColor(bool value); bool operator<(const QTreeWidgetItem &other)const; signals: public slots: }; #endif // NSEARCHVIEWITEM_H nixnote2-2.0.2/gui/ntableview.cpp000066400000000000000000002136421315604104400167170ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "ntableview.h" #include "global.h" #include "datedelegate.h" #include "numberdelegate.h" #include #include #include #include #include #include "sql/nsqlquery.h" #include #include #include #include #include "filters/filterengine.h" #include "sql/usertable.h" #include "sql/notetable.h" #include "sql/notebooktable.h" #include "utilities/nuuid.h" #include "dialog/noteproperties.h" //***************************************************************** //* This class overrides QTableView and is used to provide a //* list of notes to the user //****************************************************************** extern Global global; //* Constructor NTableView::NTableView(QWidget *parent) : QTableView(parent) { QLOG_TRACE() << "Entering NTableView constructor"; this->setSelectionBehavior(QAbstractItemView::SelectRows); this->verticalHeader()->setVisible(false); noteModel = new NoteModel(this); tableViewHeader = new NTableViewHeader(Qt::Horizontal, this); this->setHorizontalHeader(tableViewHeader); #if QT_VERSION < 0x050000 this->horizontalHeader()->setMovable(true); #else this->horizontalHeader()->setSectionsMovable(true); #endif QLOG_TRACE() << "Setting up edit triggers"; this->setEditTriggers(QAbstractItemView::NoEditTriggers); // Set the default column height QLOG_TRACE() << "Setting up fort metrics"; this->verticalHeader()->setDefaultSectionSize(QApplication::fontMetrics().height()); QLOG_TRACE() << "Initializing proxy"; this->proxy = new NoteSortFilterProxyModel(); proxy->setSourceModel(model()); global.settings->beginGroup("SaveState"); Qt::SortOrder order = Qt::SortOrder(global.settings->value("sortOrder", 0).toInt()); int col = global.settings->value("sortColumn", NOTE_TABLE_DATE_CREATED_POSITION).toInt(); global.settings->endGroup(); this->setSortingEnabled(true); proxy->setFilterKeyColumn(NOTE_TABLE_LID_POSITION); sortByColumn(col, order); noteModel->sort(col,order); //refreshData(); setModel(proxy); // Set the date deligates QLOG_TRACE() << "Setting up table deligates"; dateDelegate = new DateDelegate(); blankNumber = new NumberDelegate(NumberDelegate::BlankNumber); kbNumber = new NumberDelegate(NumberDelegate::KBNumber); trueFalseDelegate = new TrueFalseDelegate(); thumbnailDelegate = new ImageDelegate(); reminderOrderDelegate = new ReminderOrderDelegate(); this->setItemDelegateForColumn(NOTE_TABLE_DATE_CREATED_POSITION, dateDelegate); this->setItemDelegateForColumn(NOTE_TABLE_DATE_SUBJECT_POSITION, dateDelegate); this->setItemDelegateForColumn(NOTE_TABLE_DATE_UPDATED_POSITION, dateDelegate); this->setItemDelegateForColumn(NOTE_TABLE_DATE_DELETED_POSITION, dateDelegate); this->setItemDelegateForColumn(NOTE_TABLE_REMINDER_TIME_DONE_POSITION, dateDelegate); this->setItemDelegateForColumn(NOTE_TABLE_REMINDER_TIME_POSITION, dateDelegate); this->setItemDelegateForColumn(NOTE_TABLE_ALTITUDE_POSITION, blankNumber); this->setItemDelegateForColumn(NOTE_TABLE_LONGITUDE_POSITION, blankNumber); this->setItemDelegateForColumn(NOTE_TABLE_LATITUDE_POSITION, blankNumber); this->setItemDelegateForColumn(NOTE_TABLE_SIZE_POSITION, kbNumber); this->setItemDelegateForColumn(NOTE_TABLE_IS_DIRTY_POSITION, trueFalseDelegate); this->setItemDelegateForColumn(NOTE_TABLE_HAS_ENCRYPTION_POSITION, trueFalseDelegate); this->setItemDelegateForColumn(NOTE_TABLE_HAS_TODO_POSITION, trueFalseDelegate); this->setItemDelegateForColumn(NOTE_TABLE_PINNED_POSITION, trueFalseDelegate); this->setItemDelegateForColumn(NOTE_TABLE_REMINDER_ORDER_POSITION, reminderOrderDelegate); this->setItemDelegateForColumn(NOTE_TABLE_THUMBNAIL_POSITION, thumbnailDelegate); QLOG_TRACE() << "Setting up column headers"; global.settings->beginGroup("Debugging"); this->setColumnHidden(NOTE_TABLE_LID_POSITION,!global.settings->value("showLids", false).toBool()); global.settings->endGroup(); this->setColumnHidden(NOTE_TABLE_NOTEBOOK_LID_POSITION, true); this->setColumnHidden(NOTE_TABLE_DATE_DELETED_POSITION, true); this->setColumnHidden(NOTE_TABLE_ALTITUDE_POSITION, true); this->setColumnHidden(NOTE_TABLE_LATITUDE_POSITION, true); this->setColumnHidden(NOTE_TABLE_LONGITUDE_POSITION, true); this->setColumnHidden(NOTE_TABLE_SOURCE_APPLICATION_POSITION, true); this->setColumnHidden(NOTE_TABLE_HAS_TODO_POSITION, true); this->setColumnHidden(NOTE_TABLE_HAS_ENCRYPTION_POSITION, true); this->setColumnHidden(NOTE_TABLE_SOURCE_APPLICATION_POSITION, true); this->setColumnHidden(NOTE_TABLE_PINNED_POSITION, true); this->setColumnHidden(NOTE_TABLE_COLOR_POSITION, true); blockSignals(true); if (!isColumnHidden(NOTE_TABLE_DATE_CREATED_POSITION)) tableViewHeader->createdDateAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_DATE_UPDATED_POSITION)) tableViewHeader->changedDateAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_TITLE_POSITION)) tableViewHeader->titleAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_NOTEBOOK_POSITION)) tableViewHeader->notebookAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_AUTHOR_POSITION)) tableViewHeader->authorAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_DATE_SUBJECT_POSITION)) tableViewHeader->subjectDateAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_SOURCE_POSITION)) tableViewHeader->sourceAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_SOURCE_URL_POSITION)) tableViewHeader->urlAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_LATITUDE_POSITION)) tableViewHeader->latitudeAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_LONGITUDE_POSITION)) tableViewHeader->longitudeAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_ALTITUDE_POSITION)) tableViewHeader->altitudeAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_HAS_ENCRYPTION_POSITION)) tableViewHeader->hasEncryptionAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_HAS_TODO_POSITION)) tableViewHeader->hasTodoAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_IS_DIRTY_POSITION)) tableViewHeader->synchronizedAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_SIZE_POSITION)) tableViewHeader->sizeAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_THUMBNAIL_POSITION)) tableViewHeader->thumbnailAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_TAGS_POSITION)) tableViewHeader->tagsAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_REMINDER_TIME_POSITION)) tableViewHeader->reminderTimeAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_REMINDER_TIME_DONE_POSITION)) tableViewHeader->reminderTimeDoneAction->setChecked(true); if (!isColumnHidden(NOTE_TABLE_REMINDER_ORDER_POSITION)) tableViewHeader->reminderOrderAction->setChecked(true); connect(tableViewHeader, SIGNAL(setColumnVisible(int,bool)), this, SLOT(toggleColumnVisible(int,bool))); blockSignals(false); this->model()->setHeaderData(NOTE_TABLE_TITLE_POSITION, Qt::Horizontal, QObject::tr("Title")); this->model()->setHeaderData(NOTE_TABLE_AUTHOR_POSITION, Qt::Horizontal, QObject::tr("Author")); this->model()->setHeaderData(NOTE_TABLE_NOTEBOOK_POSITION, Qt::Horizontal, QObject::tr("Notebook")); this->model()->setHeaderData(NOTE_TABLE_TAGS_POSITION, Qt::Horizontal, QObject::tr("Tags")); this->model()->setHeaderData(NOTE_TABLE_DATE_CREATED_POSITION, Qt::Horizontal, QObject::tr("Date Created")); this->model()->setHeaderData(NOTE_TABLE_DATE_UPDATED_POSITION, Qt::Horizontal, QObject::tr("Date Updated")); this->model()->setHeaderData(NOTE_TABLE_DATE_SUBJECT_POSITION, Qt::Horizontal, QObject::tr("Subject Date")); this->model()->setHeaderData(NOTE_TABLE_DATE_DELETED_POSITION, Qt::Horizontal, QObject::tr("Deletion Date")); this->model()->setHeaderData(NOTE_TABLE_REMINDER_ORDER_POSITION, Qt::Horizontal, QObject::tr("Reminder")); this->model()->setHeaderData(NOTE_TABLE_REMINDER_TIME_POSITION, Qt::Horizontal, QObject::tr("Reminder Due")); this->model()->setHeaderData(NOTE_TABLE_REMINDER_TIME_DONE_POSITION, Qt::Horizontal, QObject::tr("Reminder Completed")); this->model()->setHeaderData(NOTE_TABLE_SOURCE_POSITION, Qt::Horizontal, QObject::tr("Source")); this->model()->setHeaderData(NOTE_TABLE_SOURCE_URL_POSITION, Qt::Horizontal, QObject::tr("Source URL")); this->model()->setHeaderData(NOTE_TABLE_SOURCE_APPLICATION_POSITION, Qt::Horizontal, QObject::tr("Source Application")); this->model()->setHeaderData(NOTE_TABLE_LONGITUDE_POSITION, Qt::Horizontal, QObject::tr("Longitude")); this->model()->setHeaderData(NOTE_TABLE_LATITUDE_POSITION, Qt::Horizontal, QObject::tr("Latitude")); this->model()->setHeaderData(NOTE_TABLE_ALTITUDE_POSITION, Qt::Horizontal, QObject::tr("Altitude")); this->model()->setHeaderData(NOTE_TABLE_HAS_ENCRYPTION_POSITION, Qt::Horizontal, QObject::tr("Has Encryption")); this->model()->setHeaderData(NOTE_TABLE_HAS_TODO_POSITION, Qt::Horizontal, QObject::tr("Has To-do")); this->model()->setHeaderData(NOTE_TABLE_IS_DIRTY_POSITION, Qt::Horizontal, QObject::tr("Sync")); this->model()->setHeaderData(NOTE_TABLE_SIZE_POSITION, Qt::Horizontal, QObject::tr("Size")); this->model()->setHeaderData(NOTE_TABLE_THUMBNAIL_POSITION, Qt::Horizontal, QObject::tr("Thumbnail")); this->model()->setHeaderData(NOTE_TABLE_PINNED_POSITION, Qt::Horizontal, QObject::tr("Pinned")); contextMenu = new QMenu(this); this->setFont(global.getGuiFont(font())); contextMenu->setFont(global.getGuiFont(font())); openNoteAction = new QAction(tr("Open Note"), this); contextMenu->addAction(openNoteAction); connect(openNoteAction, SIGNAL(triggered()), this, SLOT(openNoteContextMenuTriggered())); openNoteAction->setFont(global.getGuiFont(font())); openNoteNewTabAction = new QAction(tr("Open Note In New Tab"), this); contextMenu->addAction(openNoteNewTabAction); connect(openNoteNewTabAction, SIGNAL(triggered()), this, SLOT(openNoteNewTabTriggered())); openNoteNewTabAction->setFont(global.getGuiFont(font())); openNoteExternalWindowAction = new QAction(tr("Open Note In New Window"), this); contextMenu->addAction(openNoteExternalWindowAction); connect(openNoteExternalWindowAction, SIGNAL(triggered()), this, SLOT(openNoteExternalWindowTriggered())); openNoteExternalWindowAction->setFont(global.getGuiFont(font())); contextMenu->addSeparator(); addNoteAction = new QAction(tr("Add Note"), this); contextMenu->addAction(addNoteAction); connect(addNoteAction, SIGNAL(triggered()), this, SLOT(createNewNote())); addNoteAction->setFont(global.getGuiFont(font())); deleteNoteAction = new QAction(tr("Delete Note"), this); contextMenu->addAction(deleteNoteAction); connect(deleteNoteAction, SIGNAL(triggered()), this, SLOT(deleteSelectedNotes())); deleteNoteAction->setFont(global.getGuiFont(font())); deleteNoteAction->setShortcut(QKeySequence::Delete); QShortcut *deleteShortcut = new QShortcut(this); deleteShortcut->setKey(QKeySequence(Qt::Key_Delete)); deleteShortcut->setContext(Qt::WidgetShortcut); connect(deleteShortcut, SIGNAL(activated()), this, SLOT(deleteSelectedNotes())); restoreNoteAction = new QAction(tr("Restore Note"), this); contextMenu->addAction(restoreNoteAction); connect(restoreNoteAction, SIGNAL(triggered()), this, SLOT(restoreSelectedNotes())); restoreNoteAction->setFont(global.getGuiFont(font())); restoreNoteAction->setVisible(false); copyNoteLinkAction = new QAction(tr("Copy Note Link"), this); contextMenu->addAction(copyNoteLinkAction); copyNoteLinkAction->setFont(global.getGuiFont(font())); connect(copyNoteLinkAction, SIGNAL(triggered()), this, SLOT(copyNoteLink())); copyNoteAction = new QAction(tr("Duplicate Note"), this); contextMenu->addAction(copyNoteAction); copyNoteAction->setFont(global.getGuiFont(font())); connect(copyNoteAction, SIGNAL(triggered()), this, SLOT(copyNote())); reminderMenu = new QMenu(tr("Reminders")); reminderMenu->setFont(global.getGuiFont(font())); contextMenu->addMenu(reminderMenu); reminderRemoveAction = new QAction(tr("Remove"), this); reminderMenu->addAction(reminderRemoveAction); reminderRemoveAction->setFont(global.getGuiFont(font())); connect(reminderRemoveAction, SIGNAL(triggered()), this, SLOT(removeReminder())); reminderMarkCompletedAction = new QAction(tr("Mark Completed"), this); reminderMenu->addAction(reminderMarkCompletedAction); reminderMarkCompletedAction->setFont(global.getGuiFont(font())); connect(reminderMarkCompletedAction, SIGNAL(triggered()), this, SLOT(markReminderCompleted())); pinNoteAction = new QAction(tr("Pin Note"), this); contextMenu->addAction(pinNoteAction); pinNoteAction->setFont(global.getGuiFont(font())); connect(pinNoteAction, SIGNAL(triggered()), this, SLOT(pinNote())); unpinNoteAction = new QAction(tr("Unpin Note"), this); contextMenu->addAction(unpinNoteAction); unpinNoteAction->setFont(global.getGuiFont(font())); connect(unpinNoteAction, SIGNAL(triggered()), this, SLOT(unpinNote())); mergeNotesAction = new QAction(tr("Merge Notes"), this); contextMenu->addAction(mergeNotesAction); mergeNotesAction->setFont(global.getGuiFont(font())); connect(mergeNotesAction, SIGNAL(triggered()), this, SLOT(mergeNotes())); createTableOfContentsAction = new QAction(tr("Create Table of Contents"), this); contextMenu->addAction(createTableOfContentsAction); createTableOfContentsAction->setFont(global.getGuiFont(font())); connect(createTableOfContentsAction, SIGNAL(triggered()), this, SLOT(createTableOfContents())); contextMenu->addSeparator(); colorMenu = new QMenu(tr("Title Color")); colorMenu->setFont(global.getGuiFont(font())); contextMenu->addMenu(colorMenu); contextMenu->addSeparator(); propertiesAction = new QAction(tr("Properties"), this); contextMenu->addAction(propertiesAction); propertiesAction->setFont(global.getGuiFont(font())); connect(propertiesAction, SIGNAL(triggered()), this, SLOT(showPropertiesDialog())); noteTitleColorWhiteAction = new QAction(tr("White"), colorMenu); colorMenu->addAction(noteTitleColorWhiteAction); connect(noteTitleColorWhiteAction, SIGNAL(triggered()), this, SLOT(setTitleColorWhite())); noteTitleColorRedAction = new QAction(tr("Red"), colorMenu); colorMenu->addAction(noteTitleColorRedAction); connect(noteTitleColorRedAction, SIGNAL(triggered()), this, SLOT(setTitleColorRed())); noteTitleColorBlueAction = new QAction(tr("Blue"), colorMenu); colorMenu->addAction(noteTitleColorBlueAction); connect(noteTitleColorBlueAction, SIGNAL(triggered()), this, SLOT(setTitleColorBlue())); noteTitleColorGreenAction = new QAction(tr("Green"), colorMenu); colorMenu->addAction(noteTitleColorGreenAction); connect(noteTitleColorGreenAction, SIGNAL(triggered()), this, SLOT(setTitleColorGreen())); noteTitleColorYellowAction = new QAction(tr("Yellow"), colorMenu); colorMenu->addAction(noteTitleColorYellowAction); connect(noteTitleColorYellowAction, SIGNAL(triggered()), this, SLOT(setTitleColorYellow())); noteTitleColorBlackAction = new QAction(tr("Black"), colorMenu); colorMenu->addAction(noteTitleColorBlackAction); connect(noteTitleColorBlackAction, SIGNAL(triggered()), this, SLOT(setTitleColorBlack())); noteTitleColorGrayAction = new QAction(tr("Gray"), colorMenu); colorMenu->addAction(noteTitleColorGrayAction); connect(noteTitleColorGrayAction, SIGNAL(triggered()), this, SLOT(setTitleColorGray())); noteTitleColorCyanAction = new QAction(tr("Cyan"), colorMenu); colorMenu->addAction(noteTitleColorCyanAction); connect(noteTitleColorCyanAction, SIGNAL(triggered()), this, SLOT(setTitleColorCyan())); noteTitleColorMagentaAction = new QAction(tr("Magenta"), colorMenu); colorMenu->addAction(noteTitleColorMagentaAction); connect(noteTitleColorMagentaAction, SIGNAL(triggered()), this, SLOT(setTitleColorMagenta())); repositionColumns(); resizeColumns(); setColumnsVisible(); if (!isColumnHidden(NOTE_TABLE_THUMBNAIL_POSITION) && global.listView == Global::ListViewWide) verticalHeader()->setDefaultSectionSize(100); if (!isColumnHidden(NOTE_TABLE_THUMBNAIL_POSITION) && global.listView == Global::listViewNarrow) verticalHeader()->setDefaultSectionSize(100); setDragEnabled(true); // Hide this column because it isn't really used. this->setColumnHidden(NOTE_TABLE_REMINDER_ORDER_POSITION, true); // Set note list appearance this->setShowGrid(global.showNoteListGrid()); this->setAlternatingRowColors(global.alternateNoteListColors()); QLOG_TRACE() << "Exiting NTableView constructor"; } //* Destructor NTableView::~NTableView() { delete dateDelegate; delete blankNumber; delete kbNumber; delete this->tableViewHeader; delete this->noteModel; delete this->proxy; } NoteModel* NTableView::model() { return noteModel; } void NTableView::contextMenuEvent(QContextMenuEvent *event) { openNoteAction->setEnabled(false); deleteNoteAction->setEnabled(false); QList lids; getSelectedLids(lids); mergeNotesAction->setVisible(false); // Deterimne if the merge notes menu option is visible. // If it is a read-only notebook or if the number of selected notes // is < 1 then we can't merge. if (lids.size() > 1) { mergeNotesAction->setVisible(true); NoteTable nTable(global.db); NotebookTable bookTable(global.db); for (int i=0; isetVisible(false); i=lids.size(); } } } if (lids.size() > 0) { bool readOnlySelected = false; for (int i=0; isetEnabled(true); openNoteAction->setEnabled(true); } if (global.filterCriteria[global.filterPosition]->isDeletedOnlySet() && global.filterCriteria[global.filterPosition]->getDeletedOnly()) restoreNoteAction->setVisible(true); else restoreNoteAction->setVisible(false); contextMenu->popup(event->globalPos()); } // Update a specific table row/column. void NTableView::refreshCell(qint32 lid, int cell, QVariant data) { SelectionMode mode = selectionMode(); // this->blockSignals(true); // proxy->blockSignals(true); // model()->blockSignals(true); QList selectedLids; getSelectedLids(selectedLids); // Check the highlighted LIDs from the history selection. if (proxy->lidMap->contains(lid)) { int rowLocation = proxy->lidMap->value(lid); if (rowLocation >= 0) { QModelIndex modelIndex = model()->index(rowLocation,cell); model()->setData(modelIndex, data); } } // We need to re-select all the rows. The selection model is // temporarily set to multiselection so it allows multiple rows. setSelectionMode(QAbstractItemView::MultiSelection); for (int i=0; ilidMap->value(selectedLids[i]); QModelIndex sourceIndex = model()->index(sourceRow, NOTE_TABLE_LID_POSITION); QModelIndex proxyIndex = proxy->mapFromSource(sourceIndex); selectRow(proxyIndex.row()); } setSelectionMode(mode); // this->blockSignals(false); // proxy->blockSignals(false); // model()->blockSignals(false); } // Update the list of notes. void NTableView::refreshData() { QLOG_TRACE() << "Getting valid lids in filter"; // Save the current selection in case we need it later priorSelectedLids.clear(); getSelectedLids(priorSelectedLids); priorLidOrder.clear(); for (int i=0; irowCount(); i++) { QModelIndex idx = proxy->index(i, NOTE_TABLE_LID_POSITION); priorLidOrder.append(idx.data().toInt()); } NSqlQuery sql(global.db); sql.exec("select lid from filter"); proxy->lidMap->clear(); while(sql.next()) { proxy->lidMap->insert(sql.value(0).toInt(), 0); } sql.finish(); QLOG_DEBUG() << "Valid LIDs retrieved. Refreshing selection"; model()->select(); while(model()->canFetchMore()) model()->fetchMore(); // resort the table. I'm not sure why, but it doesn't always // do this itself. Qt::SortOrder so = this->tableViewHeader->sortIndicatorOrder(); int si = this->tableViewHeader->sortIndicatorSection(); this->sortByColumn(si, so); // Re-select any notes refreshSelection(); if (this->tableViewHeader->isThumbnailVisible()) verticalHeader()->setDefaultSectionSize(100); else { QFont f = font(); global.getGuiFont(f); //f.setPointSize(global.defaultGuiFontSize); QFontMetrics fm(f); verticalHeader()->setDefaultSectionSize(fm.height()); //verticalHeader()->setDefaultSectionSize(QApplication::fontMetrics().height()*200); } } // The note list changed, so we need to reselect any valid notes. void NTableView::refreshSelection() { this->blockSignals(true); bool lidHidden = isColumnHidden(NOTE_TABLE_LID_POSITION); if (lidHidden) setColumnHidden(NOTE_TABLE_LID_POSITION, false); FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; QList historyList; criteria->getSelectedNotes(historyList); if (criteria->isFavoriteSet() && criteria->getFavorite()>0) historyList.append(criteria->getFavorite()); QLOG_TRACE() << "Highlighting selected rows after refresh"; SelectionMode mode = selectionMode(); if (!criteria->isLidSet()) { setSelectionMode(QAbstractItemView::MultiSelection); // Check the highlighted LIDs from the history selection. for (int i=0; ilidMap->contains(historyList[i])) { int rowLocation = proxy->lidMap->value(historyList[i]); if (rowLocation >= 0) { QModelIndex modelIndex = model()->index(rowLocation,NOTE_TABLE_LID_POSITION); QModelIndex proxyIndex = proxy->mapFromSource(modelIndex); selectRow(proxyIndex.row()); } } } } if (criteria->isLidSet() && proxy->lidMap->contains(criteria->getLid())) { int rowLocation = proxy->lidMap->value(criteria->getLid()); if (rowLocation >= 0) { QModelIndex modelIndex = model()->index(rowLocation,NOTE_TABLE_LID_POSITION); QModelIndex proxyIndex = proxy->mapFromSource(modelIndex); selectRow(proxyIndex.row()); } } setSelectionMode(mode); // Make sure at least one thing is selected QLOG_TRACE() << "Selecting one item if nothing else is selected"; QModelIndexList l = selectedIndexes(); if (l.size() == 0) { if (!criteria->isLidSet() || !proxy->lidMap->contains(criteria->getLid())) { qint32 rowLid; rowLid = selectAnyNoteFromList(); criteria->setLid(rowLid); } } QLOG_TRACE() << "Highlighting complete"; // Save the list of selected notes QList selectedNotes; this->getSelectedLids(selectedNotes); global.filterCriteria[global.filterPosition]->setSelectedNotes(selectedNotes); if (lidHidden) setColumnHidden(NOTE_TABLE_LID_POSITION, true); QLOG_TRACE() << "refleshSelection() complete"; this->blockSignals(false); } // Listen for mouse press events. This helps determine if we should // open a note in a new window or the existing window void NTableView::mouseReleaseEvent(QMouseEvent *e) { QTableView::mouseReleaseEvent(e); if ( e->button() == Qt::RightButton ) { } else if ( e->button() == Qt::LeftButton ) { this->openSelectedLids(false); } else if ( e->button() == Qt::MidButton ) { int v = global.getMiddleClickAction(); if (v == MOUSE_MIDDLE_CLICK_NEW_WINDOW) this->openNoteExternalWindowTriggered(); else this->openSelectedLids(true); } } // Listen for up & down arrows void NTableView::keyPressEvent(QKeyEvent *event) { QTableView::keyPressEvent(event); if (event->key() == Qt::Key_Up || event->key() == Qt::Key_Down || event->key() == Qt::Key_PageUp || event->key() == Qt::Key_PageDown) this->openSelectedLids(false); } // Open a selected note. This is not done via the context menu. void NTableView::openSelectedLids(bool newWindow) { QList lids; getSelectedLids(lids); if (lids.size() == 0) { QLOG_DEBUG() << "No selected lids"; return; } // First, find out if we're already viewing history. If we are we // chop off the end of the history & start a new one if (global.filterPosition+1 < global.filterCriteria.size()) { while (global.filterPosition+1 < global.filterCriteria.size()) delete global.filterCriteria.takeAt(global.filterCriteria.size()-1); } FilterCriteria *newFilter = new FilterCriteria(); global.filterCriteria.at(global.filterPosition)->duplicate(*newFilter); newFilter->setSelectedNotes(lids); if (lids.size() > 0) newFilter->setLid(lids.at(0)); global.filterCriteria.push_back(newFilter); global.filterPosition++; if (lids.size() > 0) { emit openNote(newWindow); } } // Restore notes from the trash void NTableView::restoreSelectedNotes() { QList lids; this->getSelectedLids(lids); if (lids.size() == 0) return; NoteTable ntable(global.db); NSqlQuery sql(global.db); //transaction.exec("begin"); sql.prepare("Delete from filter where lid=:lid"); for (int i=0; i lids; this->getSelectedLids(lids); if (lids.size() == 0) return; QString typeDelete; QString msg; FilterCriteria *f = global.filterCriteria[global.filterPosition]; bool expunged = false; typeDelete = tr("Delete "); if (f->isDeletedOnlySet() && f->getDeletedOnly()) { typeDelete = tr("Permanently delete "); expunged = true; } if (lids.size() == 1) msg = typeDelete + tr("selected note?"); else msg = typeDelete +QString::number(lids.size()) + " notes?"; QMessageBox msgBox; msgBox.setWindowTitle(tr("Verify Delete")); msgBox.setText(msg); msgBox.setStandardButtons(QMessageBox::Yes|QMessageBox::No); msgBox.setIcon(QMessageBox::Question); msgBox.setDefaultButton(QMessageBox::Yes); int rc = msgBox.exec(); if (rc != QMessageBox::Yes) return; NoteTable ntable(global.db); NSqlQuery sql(global.db); // NSqlQuery transaction(*global.db); //transaction.exec("begin"); sql.prepare("Delete from filter where lid=:lid"); for (int i=0; i &lids) { lids.clear(); // This is a bit of a hack. Basically we loop through // everything selected. For each item selected we look at // the lid position and pull the lid from the table. // Since multiple items in a row are selected, we end up // getting the same lid multiple times, but it is the best // way since I can't determine exactly how many rows are // selected. QModelIndexList l = selectedIndexes(); for (int i=0; i 0) { int lidPosition = -1; for (int i=0; ilidMap->contains(priorLidOrder[i])) { for (int j=0; jrowCount(); j++) { QModelIndex idx = proxy->index(j,NOTE_TABLE_LID_POSITION); qint32 rowLid = idx.data().toInt(); if (rowLid == priorLidOrder[i]) { QLOG_DEBUG() << "" << "Selecting row " << j << "lid: " << rowLid; selectRow(j); this->blockSignals(true); emit openNote(false); this->blockSignals(false); return rowLid; } } } } // We didn't find one lower in the list, so start looking up. for (int i=lidPosition; i>=0 && found; i--) { if (proxy->lidMap->contains(priorLidOrder[i])) { for (int j=0; jrowCount(); j++) { QModelIndex idx = proxy->index(j,NOTE_TABLE_LID_POSITION); qint32 rowLid = idx.data().toInt(); if (rowLid == priorLidOrder[i]) { QLOG_DEBUG() << "" << "Selecting row " << j << "lid: " << rowLid; selectRow(j); this->blockSignals(true); emit openNote(false); this->blockSignals(false); return rowLid; } } } } } // if nearestLid = 0, then we just pick the next valid lid (depending on sort order). int rowCount = proxy->rowCount(QModelIndex()); Qt::SortOrder so = this->tableViewHeader->sortIndicatorOrder(); if (so == Qt::AscendingOrder) { for (int j=rowCount-1; j>=0; j--) { QModelIndex idx = proxy->index(j,NOTE_TABLE_LID_POSITION); qint32 rowLid = idx.data().toInt(); if (rowLid > 0) { QLOG_DEBUG() << "" << "Selecting row " << j << "lid: " << rowLid; selectRow(j); this->blockSignals(true); emit openNote(false); this->blockSignals(false); return rowLid; } } } if (so == Qt::DescendingOrder) { for (int j=0; j<=rowCount; j++) { QModelIndex idx = proxy->index(j,NOTE_TABLE_LID_POSITION); qint32 rowLid = idx.data().toInt(); if (rowLid > 0) { QLOG_DEBUG() << "" << "Selecting row " << j << "lid: " << rowLid; selectRow(j); this->blockSignals(true); emit openNote(false); this->blockSignals(false); return rowLid; } } } return -1; } // A user asked to open new notes via the context menu. void NTableView::openNoteContextMenuTriggered() { QList lids; getSelectedLids(lids); if (lids.size() == 0) return; // First, find out if we're already viewing history. If we are we // chop off the end of the history & start a new one if (global.filterPosition+1 < global.filterCriteria.size()) { while (global.filterPosition+1 < global.filterCriteria.size()) delete global.filterCriteria.takeAt(global.filterCriteria.size()-1); } for (int i=0; iduplicate(*newFilter); newFilter->setSelectedNotes(lids); newFilter->setLid(lids.at(i)); global.filterCriteria.push_back(newFilter); global.filterPosition++; emit openNote(true); } } // Copy (duplicate) a note void NTableView::copyNote() { // Make sure we save whatever we are currently viewing emit saveAllNotes(); QList lids; getSelectedLids(lids); if (lids.size() == 0) return; NoteTable noteTable(global.db); qint32 saveLid = 0; QList newLids; for (int i=0; iduplicate(*criteria); criteria->resetSelectedNotes = true; criteria->setSelectedNotes(newLids); criteria->setLid(saveLid); global.filterCriteria.append(criteria); global.filterPosition++; FilterEngine engine; engine.filter(); refreshData(); this->openNote(false); } // Copy a note link into the clipboard void NTableView::copyNoteLink() { QList lids; getSelectedLids(lids); if (lids.size() == 0) return; UserTable userTable(global.db); User user; userTable.getUser(user); bool syncneeded = false; QString userid; if (user.id.isSet()) userid = QVariant(user.id).toString(); else { syncneeded = true; userid = "0000"; } QString shard; if (user.shardId.isSet()) shard =user.shardId; else { syncneeded = true; shard = "s0"; } Note note; NoteTable ntable(global.db); QString lidUrl = ""; for (int i=0; isetText(lidUrl); } // Toggle columns hidden or visible void NTableView::toggleColumnVisible(int position, bool visible) { setColumnHidden(position, !visible); if (this->tableViewHeader->isThumbnailVisible()) verticalHeader()->setDefaultSectionSize(100); else verticalHeader()->setDefaultSectionSize(QApplication::fontMetrics().height()); } // Save which columns are visible so it can be restored on the next stat void NTableView::saveColumnsVisible() { if (global.listView == Global::ListViewWide) global.settings->beginGroup("ColumnHidden-Wide"); else global.settings->beginGroup("ColumnHidden-Narrow"); bool value = isColumnHidden(NOTE_TABLE_ALTITUDE_POSITION); global.settings->setValue("altitude", value); value = isColumnHidden(NOTE_TABLE_AUTHOR_POSITION); global.settings->setValue("author", value); value = isColumnHidden(NOTE_TABLE_DATE_CREATED_POSITION); global.settings->setValue("dateCreated", value); value = isColumnHidden(NOTE_TABLE_DATE_DELETED_POSITION); global.settings->setValue("dateDeleted", value); value = isColumnHidden(NOTE_TABLE_DATE_SUBJECT_POSITION); global.settings->setValue("dateSubject", value); value = isColumnHidden(NOTE_TABLE_DATE_UPDATED_POSITION); global.settings->setValue("dateUpdated", value); value = isColumnHidden(NOTE_TABLE_HAS_ENCRYPTION_POSITION); global.settings->setValue("hasEncryption", value); value = isColumnHidden(NOTE_TABLE_AUTHOR_POSITION); global.settings->setValue("author", value); value = isColumnHidden(NOTE_TABLE_HAS_TODO_POSITION); global.settings->setValue("hasTodo", value); value = isColumnHidden(NOTE_TABLE_IS_DIRTY_POSITION); global.settings->setValue("isDirty", value); value = isColumnHidden(NOTE_TABLE_LATITUDE_POSITION); global.settings->setValue("latitude", value); value = isColumnHidden(NOTE_TABLE_LID_POSITION); global.settings->setValue("lid", value); value = isColumnHidden(NOTE_TABLE_LONGITUDE_POSITION); global.settings->setValue("longitude", value); value = isColumnHidden(NOTE_TABLE_NOTEBOOK_LID_POSITION); global.settings->setValue("notebookLid", value); value = isColumnHidden(NOTE_TABLE_NOTEBOOK_POSITION); global.settings->setValue("notebook", value); value = isColumnHidden(NOTE_TABLE_SIZE_POSITION); global.settings->setValue("size", value); value = isColumnHidden(NOTE_TABLE_THUMBNAIL_POSITION); global.settings->setValue("thumbnail", value); value = isColumnHidden(NOTE_TABLE_SOURCE_APPLICATION_POSITION); global.settings->setValue("sourceApplication", value); value = isColumnHidden(NOTE_TABLE_SOURCE_POSITION); global.settings->setValue("source", value); value = isColumnHidden(NOTE_TABLE_SOURCE_URL_POSITION); global.settings->setValue("sourceUrl", value); value = isColumnHidden(NOTE_TABLE_TAGS_POSITION); global.settings->setValue("tags", value); value = isColumnHidden(NOTE_TABLE_TITLE_POSITION); global.settings->setValue("title", value); value = isColumnHidden(NOTE_TABLE_REMINDER_TIME_POSITION); global.settings->setValue("reminderTime", value); value = isColumnHidden(NOTE_TABLE_REMINDER_TIME_DONE_POSITION); global.settings->setValue("reminderTimeDone", value); value = isColumnHidden(NOTE_TABLE_REMINDER_ORDER_POSITION); global.settings->setValue("reminderOrder", value); value = isColumnHidden(NOTE_TABLE_PINNED_POSITION); global.settings->setValue("isPinned", value); global.settings->endGroup(); } // Set which columns are visible (used after restarting) void NTableView::setColumnsVisible() { if (global.listView == Global::ListViewWide) global.settings->beginGroup("ColumnHidden-Wide"); else global.settings->beginGroup("ColumnHidden-Narrow"); bool value = global.settings->value("dateCreated", false).toBool(); tableViewHeader->createdDateAction->setChecked(!value); setColumnHidden(NOTE_TABLE_DATE_CREATED_POSITION, value); value = global.settings->value("dateUpdated", false).toBool(); tableViewHeader->changedDateAction->setChecked(!value); setColumnHidden(NOTE_TABLE_DATE_UPDATED_POSITION, value); value = global.settings->value("dateSubject", true).toBool(); tableViewHeader->subjectDateAction->setChecked(!value); setColumnHidden(NOTE_TABLE_DATE_SUBJECT_POSITION, value); value = global.settings->value("tags", false).toBool(); tableViewHeader->tagsAction->setChecked(!value); setColumnHidden(NOTE_TABLE_TAGS_POSITION, value); value = global.settings->value("title", false).toBool(); tableViewHeader->titleAction->setChecked(!value); setColumnHidden(NOTE_TABLE_TITLE_POSITION, value); value = global.settings->value("notebook", false).toBool(); tableViewHeader->notebookAction->setChecked(!value); setColumnHidden(NOTE_TABLE_NOTEBOOK_POSITION, value); value = global.settings->value("isDirty", false).toBool(); tableViewHeader->synchronizedAction->setChecked(!value); setColumnHidden(NOTE_TABLE_IS_DIRTY_POSITION, value); value = global.settings->value("source", true).toBool(); tableViewHeader->sourceAction->setChecked(!value); setColumnHidden(NOTE_TABLE_SOURCE_POSITION, value); value = global.settings->value("author", false).toBool(); tableViewHeader->authorAction->setChecked(!value); setColumnHidden(NOTE_TABLE_AUTHOR_POSITION, value); value = global.settings->value("sourceUrl", true).toBool(); tableViewHeader->urlAction->setChecked(!value); setColumnHidden(NOTE_TABLE_SOURCE_URL_POSITION, value); value = global.settings->value("altitude", true).toBool(); tableViewHeader->altitudeAction->setChecked(!value); setColumnHidden(NOTE_TABLE_ALTITUDE_POSITION, value); value = global.settings->value("longitude", true).toBool(); tableViewHeader->longitudeAction->setChecked(!value); setColumnHidden(NOTE_TABLE_LONGITUDE_POSITION, value); value = global.settings->value("latitude", true).toBool(); tableViewHeader->latitudeAction->setChecked(!value); setColumnHidden(NOTE_TABLE_LATITUDE_POSITION, value); value = global.settings->value("hasTodo", false).toBool(); tableViewHeader->hasTodoAction->setChecked(!value); setColumnHidden(NOTE_TABLE_HAS_TODO_POSITION, value); value = global.settings->value("hasEncryption", false).toBool(); tableViewHeader->hasEncryptionAction->setChecked(!value); setColumnHidden(NOTE_TABLE_HAS_ENCRYPTION_POSITION, value); value = global.settings->value("size", false).toBool(); tableViewHeader->sizeAction->setChecked(!value); setColumnHidden(NOTE_TABLE_SIZE_POSITION, value); value = global.settings->value("thumbnail", true).toBool(); tableViewHeader->thumbnailAction->setChecked(!value); setColumnHidden(NOTE_TABLE_THUMBNAIL_POSITION, value); value = global.settings->value("reminderTime", false).toBool(); tableViewHeader->reminderTimeAction->setChecked(!value); setColumnHidden(NOTE_TABLE_REMINDER_TIME_POSITION, value); value = global.settings->value("reminderTimeDone", false).toBool(); tableViewHeader->reminderTimeDoneAction->setChecked(!value); setColumnHidden(NOTE_TABLE_REMINDER_TIME_DONE_POSITION, value); value = global.settings->value("reminderOrder", false).toBool(); tableViewHeader->reminderOrderAction->setChecked(!value); //setColumnHidden(NOTE_TABLE_REMINDER_ORDER_POSITION, value); setColumnHidden(NOTE_TABLE_REMINDER_ORDER_POSITION, true); // Column hidden because it isn't really needed value = global.settings->value("isPinned", false).toBool(); tableViewHeader->pinnedAction->setChecked(!value); setColumnHidden(NOTE_TABLE_PINNED_POSITION, value); global.settings->endGroup(); } // Change the order of the columns (used after restarting) void NTableView::repositionColumns() { int from = horizontalHeader()->visualIndex(NOTE_TABLE_AUTHOR_POSITION); int to = global.getColumnPosition("noteTableAuthorPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_ALTITUDE_POSITION); to = global.getColumnPosition("noteTableAltitudePosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_DATE_CREATED_POSITION); to = global.getColumnPosition("noteTableDateCreatedPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_DATE_DELETED_POSITION); to = global.getColumnPosition("noteTableDateDeletedPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_DATE_SUBJECT_POSITION); to = global.getColumnPosition("noteTableDateSubjectPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_DATE_UPDATED_POSITION); to = global.getColumnPosition("noteTableDateUpdatedPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_HAS_ENCRYPTION_POSITION); to = global.getColumnPosition("noteTableHasEncryptionPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_HAS_TODO_POSITION); to = global.getColumnPosition("noteTableHasTodoPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_IS_DIRTY_POSITION); to = global.getColumnPosition("noteTableIsDirtyPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_LATITUDE_POSITION); to = global.getColumnPosition("noteTableLatitudePosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_LID_POSITION); to = global.getColumnPosition("noteTableLidPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_LONGITUDE_POSITION); to = global.getColumnPosition("noteTableLongitudePosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_NOTEBOOK_LID_POSITION); to = global.getColumnPosition("noteTableNotebookLidPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_NOTEBOOK_POSITION); to = global.getColumnPosition("noteTableNotebookPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_SIZE_POSITION); to = global.getColumnPosition("noteTableSizePosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_THUMBNAIL_POSITION); to = global.getColumnPosition("noteTableThumbnailPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_SOURCE_APPLICATION_POSITION); to = global.getColumnPosition("noteTableSourceApplicationPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_SOURCE_POSITION); to = global.getColumnPosition("noteTableSourcePosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_SOURCE_URL_POSITION); to = global.getColumnPosition("noteTableSourceUrlPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_TAGS_POSITION); to = global.getColumnPosition("noteTableTagsPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_TITLE_POSITION); to = global.getColumnPosition("noteTableTitlePosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_REMINDER_TIME_POSITION); to = global.getColumnPosition("noteTableReminderTimePosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_REMINDER_TIME_DONE_POSITION); to = global.getColumnPosition("noteTableReminderTimeDonePosition"); if (to>=0) horizontalHeader()->moveSection(from, to); from = horizontalHeader()->visualIndex(NOTE_TABLE_REMINDER_ORDER_POSITION); to = global.getColumnPosition("noteTableReminderOrderPosition"); if (to>=0) horizontalHeader()->moveSection(from, to); } // Change the size of the columns (used after restarting) void NTableView::resizeColumns() { int width = global.getColumnWidth("noteTableAltitudePosition"); if (width>0) setColumnWidth(NOTE_TABLE_ALTITUDE_POSITION, width); width = global.getColumnWidth("noteTableAuthorPosition"); if (width>0) setColumnWidth(NOTE_TABLE_AUTHOR_POSITION, width); width = global.getColumnWidth("noteTableDateCreatedPosition"); if (width>0) setColumnWidth(NOTE_TABLE_DATE_CREATED_POSITION, width); width = global.getColumnWidth("noteTableDateDeletedPosition"); if (width>0) setColumnWidth(NOTE_TABLE_DATE_DELETED_POSITION, width); width = global.getColumnWidth("noteTableDateSubjectPosition"); if (width>0) setColumnWidth(NOTE_TABLE_DATE_SUBJECT_POSITION, width); width = global.getColumnWidth("noteTableDateUpdatedPosition"); if (width>0) setColumnWidth(NOTE_TABLE_DATE_UPDATED_POSITION, width); width = global.getColumnWidth("noteTableHasEncryptionPosition"); if (width>0) setColumnWidth(NOTE_TABLE_HAS_ENCRYPTION_POSITION, width); width = global.getColumnWidth("noteTableTodoPosition"); if (width>0) setColumnWidth(NOTE_TABLE_HAS_TODO_POSITION, width); width = global.getColumnWidth("noteTableIsDirtyPosition"); if (width>0) setColumnWidth(NOTE_TABLE_IS_DIRTY_POSITION, width); width = global.getColumnWidth("noteTableLatitudePosition"); if (width>0) setColumnWidth(NOTE_TABLE_LATITUDE_POSITION, width); width = global.getColumnWidth("noteTableLidPosition"); if (width>0) setColumnWidth(NOTE_TABLE_LID_POSITION, width); width = global.getColumnWidth("noteTableLongitudePosition"); if (width>0) setColumnWidth(NOTE_TABLE_LONGITUDE_POSITION, width); width = global.getColumnWidth("noteTableNotebookLidPosition"); if (width>0) setColumnWidth(NOTE_TABLE_NOTEBOOK_LID_POSITION, width); width = global.getColumnWidth("noteTableNotebookPosition"); if (width>0) setColumnWidth(NOTE_TABLE_NOTEBOOK_POSITION, width); width = global.getColumnWidth("noteTableSizePosition"); if (width>0) setColumnWidth(NOTE_TABLE_SIZE_POSITION, width); width = global.getColumnWidth("noteTableSourceApplicationPosition"); if (width>0) setColumnWidth(NOTE_TABLE_SOURCE_APPLICATION_POSITION, width); width = global.getColumnWidth("noteTableSourcePosition"); if (width>0) setColumnWidth(NOTE_TABLE_SOURCE_POSITION, width); width = global.getColumnWidth("noteTableSourceUrlPosition"); if (width>0) setColumnWidth(NOTE_TABLE_SOURCE_URL_POSITION, width); width = global.getColumnWidth("noteTableTagsPosition"); if (width>0) setColumnWidth(NOTE_TABLE_TAGS_POSITION, width); width = global.getColumnWidth("noteTableTitlePosition"); if (width>0) setColumnWidth(NOTE_TABLE_TITLE_POSITION, width); width = global.getColumnWidth("noteTableThumbnailPosition"); if (width>0) setColumnWidth(NOTE_TABLE_THUMBNAIL_POSITION, width); width = global.getColumnWidth("noteTableReminderTimePosition"); if (width>0) setColumnWidth(NOTE_TABLE_REMINDER_TIME_POSITION, width); width = global.getColumnWidth("noteTableReminderTimeDonePosition"); if (width>0) setColumnWidth(NOTE_TABLE_REMINDER_TIME_DONE_POSITION, width); width = global.getColumnWidth("noteTableReminderOrderPosition"); if (width>0) setColumnWidth(NOTE_TABLE_REMINDER_ORDER_POSITION, width); } // Combine multiple notes void NTableView::createTableOfContents() { QList lids; getSelectedLids(lids); if (lids.size() == 0) return; NoteTable nTable(global.db); Note note; NoteAttributes na; NUuid uuid; note.title = tr("Table of Contents"); note.guid = uuid.create(); note.created = QDateTime::currentMSecsSinceEpoch(); note.updated = QDateTime::currentMSecsSinceEpoch(); note.updateSequenceNum = 0; // Set the author if (global.full_username != "") na.author = global.full_username; QString content = QString("")+ QString("")+ QString("
    "); QStringList tagGuids; QStringList tagNames; UserTable utable(global.db); User user; utable.getUser(user); QString href = "evernote:///view/" + QString::number(user.id) + QString("/") + user.shardId +QString("/"); bool unsyncedNote = false; for (int i=0; isize(); j++) { if (!tagGuids.contains(n.tagGuids->at(j))) { tagGuids.append(n.tagGuids->at(j)); tagNames.append(n.tagNames->at(j)); } } } QString tempTitle = n.title; tempTitle.replace("&", "&"); QString url = QString("")+tempTitle+QString(""); content = content+"
  1. "+url+"
  2. "; } content = content+QString("
"); note.content = content; note.attributes = na; note.active = true; note.tagGuids = tagGuids; note.tagNames = tagNames; if (!unsyncedNote || QMessageBox::Yes == QMessageBox(QMessageBox::Warning, "Warning", tr("One or more notes are unsynchronized.\nThis can cause issues if they are later synchronized.\nDo you wish to continue?"), QMessageBox::Yes|QMessageBox::No).exec()) { qint32 lid = nTable.add(0, note, true,0); FilterEngine engine; engine.filter(); refreshData(); int sourceRow = proxy->lidMap->value(lid); QModelIndex sourceIndex = model()->index(sourceRow, NOTE_TABLE_LID_POSITION); QModelIndex proxyIndex = proxy->mapFromSource(sourceIndex); selectRow(proxyIndex.row()); FilterCriteria *criteria = new FilterCriteria(); global.filterCriteria[global.filterPosition]->duplicate(*criteria); criteria->unsetSearchString(); criteria->setLid(lid); global.filterCriteria.append(criteria); global.filterPosition++; emit(refreshNoteContent(lid)); emit(openNote(false)); } } // Combine multiple notes void NTableView::mergeNotes() { QList lids; getSelectedLids(lids); if (lids.size() == 0) return; NoteTable nTable(global.db); ResourceTable rTable(global.db); Note note; qint32 lid = lids[0]; nTable.get(note, lid, false, false); QString content = ""; if (note.content.isSet()) content = note.content; content = content.replace("","

"); // Duplicate the source notes so we can undelete them later if something // goes horribly wrong for (int i=1; i resLids; rTable.getResourceList(resLids, newLid); for (int j=0; j", "

"); int startPos = oldContent.indexOf("", startPos)+1; content = content+oldContent.mid(startPos); QLOG_DEBUG() << content; nTable.deleteNote(lids[i], true); nTable.expunge(newLid); } content = content+QString(""); QLOG_DEBUG() << content; nTable.updateNoteContent(lid, content, true); global.cache.remove(lid); FilterEngine engine; engine.filter(); refreshData(); emit(refreshNoteContent(lid)); } // Pin notes void NTableView::pinNote() { QList lids; ConfigStore cs(global.db); getSelectedLids(lids); if (lids.size() == 0) return; NoteTable noteTable(global.db); for (int i=0; i lids; ConfigStore cs(global.db); getSelectedLids(lids); if (lids.size() == 0) return; NoteTable noteTable(global.db); for (int i=0; isource() == this) { event->ignore(); return; } if (event->mimeData()->hasFormat("application/x-nixnote-note")) { event->accept(); return; } event->ignore(); } void NTableView::dragLeaveEvent(QDragLeaveEvent *event) { QTableView::dragLeaveEvent(event); } void NTableView::dropEvent(QDropEvent *event) { QTableView::dropEvent(event); } // Accept the drag move event if possible void NTableView::dragMoveEvent(QDragMoveEvent *event) { QTableView::dragMoveEvent(event); } void NTableView::mousePressEvent(QMouseEvent *event) { dragStartIndex = this->indexAt(event->pos()); QTableView::mousePressEvent(event); } // Procees mouse move events void NTableView::mouseMoveEvent(QMouseEvent *event) { if (!(event->buttons() & Qt::LeftButton)) { event->ignore(); return; } if (dragStartIndex.row() == this->indexAt(event->pos()).row()) { event->ignore(); return; } QList lids; getSelectedLids(lids); if (lids.size() == 0) return; QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; QByteArray ba; for (int i=0; isetData("application/x-nixnote-note", ba); drag->setMimeData(mimeData); drag->exec(Qt::MoveAction); } void NTableView::openNoteExternalWindowTriggered() { QList lids; getSelectedLids(lids); for (int i=0; iopenSelectedLids(true); } void NTableView::createNewNote() { emit(newNote()); } void NTableView::setTitleColorWhite() { setTitleColor("white"); } void NTableView::setTitleColorRed() { setTitleColor("red"); } void NTableView::setTitleColorBlue() { setTitleColor("blue"); } void NTableView::setTitleColorGreen() { setTitleColor("green"); } void NTableView::setTitleColorYellow() { setTitleColor("yellow"); } void NTableView::setTitleColorBlack() { setTitleColor("black"); } void NTableView::setTitleColorGray() { setTitleColor("gray"); } void NTableView::setTitleColorCyan() { setTitleColor("cyan"); } void NTableView::setTitleColorMagenta() { setTitleColor("magenta"); } void NTableView::setTitleColor(QString color) { QList lids; getSelectedLids(lids); QString value = color; if (color == "white") value = ""; NoteTable ntable(global.db); for(int i=0; i i+1) value = value + ","; } this->refreshCell(lid, NOTE_TABLE_TAGS_POSITION, QVariant(value)); } void NTableView::noteNotebookUpdated(QString uuid, qint32 lid, QString name) { Q_UNUSED(uuid); this->refreshCell(lid, NOTE_TABLE_NOTEBOOK_POSITION, QVariant(name)); } void NTableView::downNote() { QKeyEvent *event = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier); QCoreApplication::postEvent(this, event); } void NTableView::upNote() { QKeyEvent *event = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier); QCoreApplication::postEvent(this, event); } void NTableView::showPropertiesDialog() { NoteProperties prop; QModelIndexList l = selectedIndexes(); if (l.size() > 0) { QString currentLid = l.at(0).sibling(l.at(0).row(),NOTE_TABLE_LID_POSITION).data().toString(); QString title = l.at(0).sibling(l.at(0).row(),NOTE_TABLE_TITLE_POSITION).data().toString(); QString notebook = l.at(0).sibling(l.at(0).row(),NOTE_TABLE_NOTEBOOK_POSITION).data().toString(); QString tags = l.at(0).sibling(l.at(0).row(),NOTE_TABLE_TAGS_POSITION).data().toString(); QString author = l.at(0).sibling(l.at(0).row(),NOTE_TABLE_AUTHOR_POSITION).data().toString(); bool synchronized = l.at(0).sibling(l.at(0).row(),NOTE_TABLE_IS_DIRTY_POSITION).data().toBool(); bool encryption = l.at(0).sibling(l.at(0).row(),NOTE_TABLE_HAS_ENCRYPTION_POSITION).data().toBool(); bool todo = l.at(0).sibling(l.at(0).row(),NOTE_TABLE_HAS_TODO_POSITION).data().toBool(); double altitude = l.at(0).sibling(l.at(0).row(),NOTE_TABLE_ALTITUDE_POSITION).data().toDouble(); double longitude = l.at(0).sibling(l.at(0).row(),NOTE_TABLE_LONGITUDE_POSITION).data().toDouble(); double latitude = l.at(0).sibling(l.at(0).row(),NOTE_TABLE_LATITUDE_POSITION).data().toDouble(); QString sourceAppl = l.at(0).sibling(l.at(0).row(),NOTE_TABLE_SOURCE_APPLICATION_POSITION).data().toString(); QString source = l.at(0).sibling(l.at(0).row(),NOTE_TABLE_SOURCE_POSITION).data().toString(); QString sourceURL = l.at(0).sibling(l.at(0).row(),NOTE_TABLE_SOURCE_URL_POSITION).data().toString(); QDateTime dateCreated; dateCreated.setTime_t(l.at(0).sibling(l.at(0).row(),NOTE_TABLE_DATE_CREATED_POSITION).data().toLongLong()/1000); QDateTime dateDeleted; dateDeleted.setTime_t(l.at(0).sibling(l.at(0).row(),NOTE_TABLE_DATE_DELETED_POSITION).data().toLongLong()/1000); QDateTime dateUpdated; dateUpdated.setTime_t(l.at(0).sibling(l.at(0).row(),NOTE_TABLE_DATE_UPDATED_POSITION).data().toLongLong()/1000); QDateTime dateSubject; dateSubject.setTime_t(l.at(0).sibling(l.at(0).row(),NOTE_TABLE_DATE_SUBJECT_POSITION).data().toLongLong()/1000); QDateTime reminderDue; dateSubject.setTime_t(l.at(0).sibling(l.at(0).row(),NOTE_TABLE_REMINDER_TIME_POSITION).data().toLongLong()/1000); QDateTime reminderCompleted; dateSubject.setTime_t(l.at(0).sibling(l.at(0).row(),NOTE_TABLE_REMINDER_TIME_DONE_POSITION).data().toLongLong()/1000); int row = 0; int col = 0; prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Note LID"))); prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(currentLid)); prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Title"))); prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(title)); prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Notebook"))); prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(notebook)); prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Tags"))); prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(tags)); prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Synchronized"))); if (synchronized) prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(tr("No"))); else prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(tr("Yes"))); prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Has Encryption"))); if (encryption) prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(tr("Yes"))); else prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(tr("No"))); prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Has To-Do"))); if (todo) prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(tr("Yes"))); else prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(tr("No"))); prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Date Created"))); prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(dateCreated.toString(global.dateFormat + QString(" ") +global.timeFormat))); prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Date Updated"))); prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(dateUpdated.toString(global.dateFormat + QString(" ") +global.timeFormat))); prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Date Deleted"))); if (dateDeleted.toMSecsSinceEpoch() > 0) { prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(dateDeleted.toString(global.dateFormat + QString(" ") +global.timeFormat))); } else { col--; row++; } prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Subject Date"))); if (dateSubject.toMSecsSinceEpoch() > 0) { prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(dateSubject.toString(global.dateFormat + QString(" ") +global.timeFormat))); } else { col--; row++; } prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Author"))); prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(author)); prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Longitude"))); if (longitude > 0) { prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(longitude)); } else { col--; row++; } prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Latitude"))); if (latitude > 0) { prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(latitude)); } else { col--; row++; } prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Altitude"))); if (altitude > 0) { prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(altitude)); } else { col--; row++; } prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Source"))); prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(source)); prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Source Application"))); prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(sourceAppl)); prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Source URL"))); prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(sourceURL)); prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Reminder Due"))); if (reminderDue.toMSecsSinceEpoch() > 0) { prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(reminderDue.toString(global.dateFormat + QString(" ") +global.timeFormat))); } else { col--; row++; } prop.tableWidget->setItem(row,col++, new QTableWidgetItem(tr("Reminder Completed"))); if (reminderCompleted.toMSecsSinceEpoch() > 0) { prop.tableWidget->setItem(row++,col--, new QTableWidgetItem(reminderCompleted.toString(global.dateFormat + QString(" ") +global.timeFormat))); } else { col--; row++; } prop.tableWidget->resizeColumnsToContents(); prop.exec(); } } void NTableView::markReminderCompleted() { // Make sure we save whatever we are currently viewing emit saveAllNotes(); QList lids; getSelectedLids(lids); if (lids.size() == 0) return; NoteTable ntable(global.db); for (int i=0; ilidMap->value(lids[i]); QModelIndex sourceIndex = model()->index(sourceRow, NOTE_TABLE_REMINDER_TIME_POSITION); qlonglong value = sourceIndex.data().toLongLong(); QLOG_DEBUG() << value; if (value > 0) ntable.setReminderCompleted(lids[i], true); } FilterEngine engine; engine.filter(); refreshData(); } void NTableView::removeReminder() { // Make sure we save whatever we are currently viewing emit saveAllNotes(); QList lids; getSelectedLids(lids); if (lids.size() == 0) return; NoteTable ntable(global.db); for (int i=0; i #include #include "ntableviewheader.h" #include "models/notemodel.h" #include "datedelegate.h" #include "numberdelegate.h" #include "reminderorderdelegate.h" #include "truefalsedelegate.h" #include "filters/notesortfilterproxymodel.h" #include "gui/imagedelegate.h" class NTableViewHeader; class NTableView : public QTableView { Q_OBJECT private: //DatabaseConnection *db; //unsigned int filterPosition; DateDelegate *dateDelegate; NumberDelegate *blankNumber; NumberDelegate *kbNumber; TrueFalseDelegate *trueFalseDelegate; ImageDelegate *thumbnailDelegate; ReminderOrderDelegate *reminderOrderDelegate; QModelIndex dragStartIndex; public: explicit NTableView(QWidget *parent = 0); ~NTableView(); NTableViewHeader *tableViewHeader; NoteModel *noteModel; NoteModel *model(); NoteSortFilterProxyModel *proxy; void mouseReleaseEvent(QMouseEvent *event); void openSelectedLids(bool newWindow); void refreshSelection(); void keyPressEvent(QKeyEvent *event); QMenu *contextMenu; QMenu *colorMenu; QMenu *reminderMenu; QAction *addNoteAction; QAction *deleteNoteAction; QAction *restoreNoteAction; QAction *openNoteAction; QAction *openNoteExternalWindowAction; QAction *openNoteNewTabAction; QAction *copyNoteLinkAction; QAction *copyNoteAction; QAction *pinNoteAction; QAction *unpinNoteAction; QAction *mergeNotesAction; QAction *createTableOfContentsAction; QAction *propertiesAction; QAction *noteTitleColorWhiteAction; QAction *noteTitleColorRedAction; QAction *noteTitleColorBlueAction; QAction *noteTitleColorGreenAction; QAction *noteTitleColorYellowAction; QAction *noteTitleColorBlackAction; QAction *noteTitleColorGrayAction; QAction *noteTitleColorCyanAction; QAction *noteTitleColorMagentaAction; QAction *reminderMarkCompletedAction; QAction *reminderRemoveAction; void getSelectedLids(QList &lids); QList priorLidOrder; QList priorSelectedLids; bool isLidSelected(qint32 lid); qint32 selectAnyNoteFromList(); void resizeColumns(); void repositionColumns(); void saveColumnsVisible(); void setColumnsVisible(); signals: void noteAdded(qint32 newNote); void openNote(bool newWindow); void notesDeleted(QList lid, bool expunged); void notesRestored(QList); void refreshNoteContent(qint32 lid); void openNoteExternalWindow(qint32 lid); void saveAllNotes(); void newNote(); public slots: void refreshData(); void contextMenuEvent(QContextMenuEvent *event); void deleteSelectedNotes(); void restoreSelectedNotes(); void openNoteContextMenuTriggered(); void openNoteExternalWindowTriggered(); void openNoteNewTabTriggered(); void copyNoteLink(); void toggleColumnVisible(int position, bool visible); void copyNote(); void pinNote(); void unpinNote(); void createNewNote(); void mergeNotes(); void createTableOfContents(); void showPropertiesDialog(); void refreshCell(qint32 lid, int cell, QVariant data); void dragMoveEvent(QDragMoveEvent *event); void dragEnterEvent(QDragEnterEvent *event); void mouseMoveEvent(QMouseEvent *event); void dragLeaveEvent(QDragLeaveEvent *event); void dropEvent(QDropEvent *event); void mousePressEvent(QMouseEvent *event); void setTitleColorWhite(); void setTitleColorRed(); void setTitleColorBlue(); void setTitleColorGreen(); void setTitleColorYellow(); void setTitleColorBlack(); void setTitleColorGray(); void setTitleColorCyan(); void setTitleColorMagenta(); void setTitleColor(QString color); void markReminderCompleted(); void removeReminder(); void noteTagsUpdated(QString uuid, qint32 lid, QStringList names); void noteNotebookUpdated(QString uuid, qint32 lid, QString name); void downNote(); void upNote(); }; #endif // NTABLEVIEW_H nixnote2-2.0.2/gui/ntableviewheader.cpp000066400000000000000000000257661315604104400201000ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "ntableviewheader.h" #include "global.h" extern Global global; //************************************************************ //* This overrides QHeaderView and is used so we can have //* things like custom context menus //************************************************************ NTableViewHeader::NTableViewHeader(Qt::Orientation orientation, QWidget *parent) : QHeaderView(orientation, parent) { #if QT_VERSION < 0x050000 setClickable(true); #else setSectionsClickable(true); #endif setSortIndicatorShown(true); setContextMenuPolicy(Qt::ActionsContextMenu); createdDateAction = new QAction(this); createdDateAction->setText(tr("Date Created")); createdDateAction->setCheckable(true); addAction(createdDateAction); changedDateAction = new QAction(this); changedDateAction->setText(tr("Date Updated")); changedDateAction->setCheckable(true); addAction(changedDateAction); titleAction = new QAction(this); titleAction->setText(tr("Title")); titleAction->setCheckable(true); addAction(titleAction); notebookAction = new QAction(this); notebookAction->setText(tr("Notebook")); notebookAction->setCheckable(true); addAction(notebookAction); tagsAction = new QAction(this); tagsAction->setText(tr("Tags")); tagsAction->setCheckable(true); addAction(tagsAction); authorAction = new QAction(this); authorAction->setText(tr("Author")); authorAction->setCheckable(true); addAction(authorAction); subjectDateAction = new QAction(this); subjectDateAction->setText(tr("Subject Date")); subjectDateAction->setCheckable(true); addAction(subjectDateAction); sourceAction = new QAction(this); sourceAction->setText(tr("Source")); sourceAction->setCheckable(true); addAction(sourceAction); urlAction = new QAction(this); urlAction->setText(tr("Source URL")); urlAction->setCheckable(true); addAction(urlAction); latitudeAction = new QAction(this); latitudeAction->setText(tr("Latitude")); latitudeAction->setCheckable(true); addAction(latitudeAction); longitudeAction = new QAction(this); longitudeAction->setText(tr("Longitude")); longitudeAction->setCheckable(true); addAction(longitudeAction); altitudeAction = new QAction(this); altitudeAction->setText(tr("Altitude")); altitudeAction->setCheckable(true); addAction(altitudeAction); hasEncryptionAction = new QAction(this); hasEncryptionAction->setText(tr("Has Encryption")); hasEncryptionAction->setCheckable(true); addAction(hasEncryptionAction); hasTodoAction = new QAction(this); hasTodoAction->setText(tr("Has To-do")); hasTodoAction->setCheckable(true); addAction(hasTodoAction); synchronizedAction = new QAction(this); synchronizedAction->setText(tr("Synchronized")); synchronizedAction->setCheckable(true); addAction(synchronizedAction); sizeAction = new QAction(this); sizeAction->setText(tr("Size")); sizeAction->setCheckable(true); addAction(sizeAction); reminderOrderAction = new QAction(this); reminderOrderAction->setText(tr("Reminder")); reminderOrderAction->setCheckable(true); reminderOrderAction->setVisible(false); // Hidden because it isn't really needed addAction(reminderOrderAction); reminderTimeAction = new QAction(this); reminderTimeAction->setText(tr("Reminder Due")); reminderTimeAction->setCheckable(true); addAction(reminderTimeAction); reminderTimeDoneAction = new QAction(this); reminderTimeDoneAction->setText(tr("Reminder Completed")); reminderTimeDoneAction->setCheckable(true); addAction(reminderTimeDoneAction); pinnedAction = new QAction(this); pinnedAction->setText(tr("Pinned")); pinnedAction->setCheckable(true); addAction(pinnedAction); thumbnailAction = new QAction(this); thumbnailAction->setText(tr("Thumbnail")); thumbnailAction->setCheckable(true); addAction(thumbnailAction); this->setMouseTracking(true); connect(this, SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)), this, SLOT(saveSort(int, Qt::SortOrder))); connect(createdDateAction, SIGNAL(toggled(bool)), this, SLOT(createdDateChecked(bool))); connect(titleAction, SIGNAL(toggled(bool)), this, SLOT(titleChecked(bool))); connect(changedDateAction, SIGNAL(toggled(bool)), this, SLOT(changedDateChecked(bool))); connect(subjectDateAction, SIGNAL(toggled(bool)), this, SLOT(subjectDateChecked(bool))); connect(notebookAction, SIGNAL(toggled(bool)), this, SLOT(notebookChecked(bool))); connect(tagsAction, SIGNAL(toggled(bool)), this, SLOT(tagsChecked(bool))); connect(urlAction, SIGNAL(toggled(bool)), this, SLOT(urlChecked(bool))); connect(authorAction, SIGNAL(toggled(bool)), this, SLOT(authorChecked(bool))); connect(hasTodoAction, SIGNAL(toggled(bool)), this, SLOT(hasTodoChecked(bool))); connect(hasEncryptionAction, SIGNAL(toggled(bool)), this, SLOT(hasEncryptionChecked(bool))); connect(sizeAction, SIGNAL(toggled(bool)), this, SLOT(sizeChecked(bool))); connect(thumbnailAction, SIGNAL(toggled(bool)), this, SLOT(thumbnailChecked(bool))); connect(latitudeAction, SIGNAL(toggled(bool)), this, SLOT(latitudeChecked(bool))); connect(longitudeAction, SIGNAL(toggled(bool)), this, SLOT(longitudeChecked(bool))); connect(altitudeAction, SIGNAL(toggled(bool)), this, SLOT(altitudeChecked(bool))); connect(synchronizedAction, SIGNAL(toggled(bool)), this, SLOT(synchronizedChecked(bool))); connect(sourceAction, SIGNAL(toggled(bool)), this, SLOT(sourceChecked(bool))); connect(reminderTimeAction, SIGNAL(toggled(bool)), this, SLOT(reminderTimeChecked(bool))); connect(reminderTimeDoneAction, SIGNAL(toggled(bool)), this, SLOT(reminderTimeDoneChecked(bool))); connect(reminderOrderAction, SIGNAL(toggled(bool)), this, SLOT(reminderOrderChecked(bool))); connect(pinnedAction, SIGNAL(toggled(bool)), this, SLOT(pinnedChecked(bool))); this->setFont(global.getGuiFont(font())); } void NTableViewHeader::saveSort(int logicalIndex, Qt::SortOrder order) { global.settings->beginGroup("SaveState"); global.settings->setValue("sortOrder", order); global.settings->setValue("sortColumn", logicalIndex); global.settings->endGroup(); } void NTableViewHeader::saveHeader() { QByteArray state = this->saveState(); QByteArray geometry = this->saveGeometry(); global.settings->beginGroup("SaveState"); global.settings->setValue("listViewWideHeaderState", state); global.settings->setValue("listViewWideHeaderGeometry", geometry); global.settings->endGroup(); } void NTableViewHeader::checkActions() { int count = 0; QList actions = this->actions(); for (int i=0; iisChecked()) count++; actions[i]->setEnabled(true); } if (count <= 1) { for (int i=0; iisChecked()) actions[i]->setEnabled(false); } } } void NTableViewHeader::createdDateChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_DATE_CREATED_POSITION, checked)); checkActions(); } void NTableViewHeader::changedDateChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_DATE_UPDATED_POSITION, checked)); checkActions(); } void NTableViewHeader::subjectDateChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_DATE_SUBJECT_POSITION, checked)); checkActions(); } void NTableViewHeader::tagsChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_TAGS_POSITION, checked)); checkActions(); } void NTableViewHeader::titleChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_TITLE_POSITION, checked)); checkActions(); } void NTableViewHeader::notebookChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_NOTEBOOK_POSITION, checked)); checkActions(); } void NTableViewHeader::synchronizedChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_IS_DIRTY_POSITION, checked)); checkActions(); } void NTableViewHeader::sourceChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_SOURCE_POSITION, checked)); checkActions(); } void NTableViewHeader::authorChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_AUTHOR_POSITION, checked)); checkActions(); } void NTableViewHeader::urlChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_SOURCE_URL_POSITION, checked)); checkActions(); } void NTableViewHeader::altitudeChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_ALTITUDE_POSITION, checked)); checkActions(); } void NTableViewHeader::longitudeChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_LONGITUDE_POSITION, checked)); checkActions(); } void NTableViewHeader::latitudeChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_LATITUDE_POSITION, checked)); checkActions(); } void NTableViewHeader::hasTodoChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_HAS_TODO_POSITION, checked)); checkActions(); } void NTableViewHeader::hasEncryptionChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_HAS_ENCRYPTION_POSITION, checked)); checkActions(); } void NTableViewHeader::sizeChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_SIZE_POSITION, checked)); checkActions(); } void NTableViewHeader::thumbnailChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_THUMBNAIL_POSITION, checked)); checkActions(); } void NTableViewHeader::reminderTimeChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_REMINDER_TIME_POSITION, checked)); checkActions(); } void NTableViewHeader::reminderTimeDoneChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_REMINDER_TIME_DONE_POSITION, checked)); checkActions(); } void NTableViewHeader::reminderOrderChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_REMINDER_ORDER_POSITION, checked)); checkActions(); } void NTableViewHeader::pinnedChecked(bool checked) { emit (setColumnVisible(NOTE_TABLE_PINNED_POSITION, checked)); checkActions(); } bool NTableViewHeader::isThumbnailVisible() { return thumbnailAction->isChecked(); } nixnote2-2.0.2/gui/ntableviewheader.h000066400000000000000000000053731315604104400175350ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NTABLEVIEWHEADER_H #define NTABLEVIEWHEADER_H #include #include #include #include #include class NTableViewHeader : public QHeaderView { Q_OBJECT public: explicit NTableViewHeader(Qt::Orientation orientation, QWidget *parent = 0); QAction *createdDateAction; QAction *changedDateAction; QAction *subjectDateAction; QAction *tagsAction; QAction *titleAction; QAction *notebookAction; QAction *synchronizedAction; QAction *sourceAction; QAction *authorAction; QAction *urlAction; QAction *altitudeAction; QAction *longitudeAction; QAction *latitudeAction; QAction *hasTodoAction; QAction *hasEncryptionAction; QAction *sizeAction; QAction *thumbnailAction; QAction *reminderTimeAction; QAction *reminderOrderAction; QAction *reminderTimeDoneAction; QAction *pinnedAction; void checkActions(); bool isThumbnailVisible(); signals: void setColumnVisible(int position, bool visible); public slots: void saveSort(int pos, Qt::SortOrder order); void saveHeader(); void createdDateChecked(bool); void changedDateChecked(bool); void subjectDateChecked(bool); void tagsChecked(bool); void titleChecked(bool); void notebookChecked(bool); void synchronizedChecked(bool); void sourceChecked(bool); void authorChecked(bool); void urlChecked(bool); void altitudeChecked(bool); void longitudeChecked(bool); void latitudeChecked(bool); void hasTodoChecked(bool); void hasEncryptionChecked(bool); void sizeChecked(bool); void thumbnailChecked(bool); void reminderTimeChecked(bool); void reminderTimeDoneChecked(bool); void reminderOrderChecked(bool); void pinnedChecked(bool); }; #endif // NTABLEVIEWHEADER_H nixnote2-2.0.2/gui/ntabwidget.cpp000066400000000000000000000731101315604104400167010ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "ntabwidget.h" #include #include #include "html/noteformatter.h" #include "gui/externalbrowse.h" #include "sql/notetable.h" #include "global.h" extern Global global; NTabWidget::NTabWidget(NixNote *p, SyncRunner *s, NNotebookView *n, NTagView *t) { parent = p; syncThread = s; notebookTreeView = n; tagTreeView = t; this->lastExternal = NULL; this->setFont(global.getGuiFont(font())); tabBar = new QTabBar(this); tabBar->setHidden(true); tabBar->setMovable(true); tabBar->setTabsClosable(true); tabBar->setShape(QTabBar::RoundedNorth); // tabBar.setMinimumHeight(20); // tabBar.setMaximumHeight(20); browserList = new QList(); externalList = new QList(); vboxlayout.addWidget(tabBar); vboxlayout.addWidget(&stack); setLayout(&vboxlayout); connect(tabBar, SIGNAL(currentChanged(int)), &stack, SLOT(setCurrentIndex(int))); connect(tabBar, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int))); connect(tabBar, SIGNAL(tabMoved(int, int)), this, SLOT(moveTab(int, int))); this->layout()->setMargin(0); htmlEntities = new HtmlEntitiesDialog(); htmlEntities->setHidden(true); connect(htmlEntities, SIGNAL(entityClicked(QString)), this, SLOT(htmlEntitiesClicked(QString))); } NTabWidget::~NTabWidget() { htmlEntities->close(); delete browserList; } void NTabWidget::addBrowser(NBrowserWindow *v, QString title) { tabBar->addTab(title); int index = stack.addWidget(v); stack.setCurrentIndex(index); browserList->append(v); tabBar->setCurrentIndex(index); tabBar->raise(); setupConnections(v); if (browserList->size() <= 1) tabBar->setHidden(true); else tabBar->setHidden(false); connect(v, SIGNAL(showHtmlEntities()), this, SLOT(showHtmlEntities())); connect(v, SIGNAL(setMessage(QString)), parent, SLOT(setMessage(QString))); return; } void NTabWidget::closeTab(int index) { if (browserList->at(index)->editor->isDirty) { browserList->at(index)->saveNoteContent(); } tabBar->removeTab(index); stack.removeWidget(browserList->at(index)); delete browserList->at(index); browserList->removeAt(index); if (browserList->size() <= 1) tabBar->setHidden(true); else tabBar->setHidden(false); } void NTabWidget::closeTab() { if (browserList->size() <=1) return; closeTab(tabBar->currentIndex()); } void NTabWidget::moveTab(int from, int to) { stack.removeWidget(browserList->at(from)); stack.insertWidget(to, browserList->at(from)); browserList->move(from, to); } // Show the next tab in the list void NTabWidget::nextTab() { if (browserList->size() <= 1) return; int i = tabBar->currentIndex()+1; if (i>=stack.count()) i=0; tabBar->setCurrentIndex(i); tabBar->raise(); stack.setCurrentIndex(i); stack.raise(); return; } // Show the previous tab in the list void NTabWidget::prevTab() { if (browserList->size() <= 1) return; int i = tabBar->currentIndex()-1; if (i<0) i=stack.count()-1; tabBar->setCurrentIndex(i); tabBar->raise(); stack.setCurrentIndex(i); stack.raise(); return; } // Function to find a window matching the current lid. Retval // is set to the NBrowserWindow of matching window. // If a match is found true is returned. // If a match is not found, false is returned and retval is set // to the current browser. bool NTabWidget::findBrowser(NBrowserWindow *retval, qint32 lid) { Q_UNUSED(retval); // stop unused warning // Look through any tab for the matching lid for (int i=0; isize(); i++) { NBrowserWindow *window = browserList->at(i); if (window->lid == lid) { retval = window; return true; } } // Look through any external list for (int i=0; isize(); i++) { NBrowserWindow *window = externalList->at(i)->browser; if (window->lid == lid) { retval = window; return true; } } retval = currentBrowser(); return false; } NBrowserWindow* NTabWidget::currentBrowser() { // If the current tab has focus, then we return it. if (this->browserList->at(tabBar->currentIndex())->hasFocus()) return this->browserList->at(tabBar->currentIndex()); // If no tab has focus, then an external window has focus for (int i=0; isize(); i++) { if (externalList->at(i)->hasFocus()) return externalList->at(i)->browser; } // If no external window has focus then we return any current // tab. This can happen if a user clicks on an html entities dialog // from an external window. return this->browserList->at(tabBar->currentIndex()); } // Open upCurrentTab a note. If it is already open in a tab we raise that tab. void NTabWidget::openNote(qint32 lid, OpenNoteMode mode) { // If the lid < 0, then we just clear it & get out if (lid < 0 && mode != ExternalWindow) { currentBrowser()->setContent(-1); return; } // If we've gotten this far, we have a good note Note n; NoteTable noteTable(global.db); noteTable.get(n, lid, false, false); NBrowserWindow *view; bool found = false; // Find out if we already have it open somewhere else for (int i=0;isize() && !found && mode != ExternalWindow; i++) { if (browserList->at(i)->lid == lid) { found = true; tabBar->setCurrentIndex(i); tabBar->raise(); stack.setCurrentIndex(i); stack.raise(); return; } } for (int i=0;isize() && !found && mode == ExternalWindow; i++) { if (externalList->at(i)->browser->lid == lid) { ExternalBrowse *external = externalList->at(i); external->setVisible(true); external->raise(); external->setFocus(); this->lastExternal = external; return; } } // if we want a new window AND it isn't already open, create a new tab if (mode == NewTab && !found) { view = new NBrowserWindow(); if (n.title.isSet()) addBrowser(view, n.title); else addBrowser(view, tr("Untitled Note")); setupConnections(view); } else { if (mode == CurrentTab) { view = currentBrowser(); if (n.title.isSet()) tabBar->setTabText(tabBar->currentIndex(), n.title); else tabBar->setTabText(tabBar->currentIndex(), tr("Untitled Note")); } else { ExternalBrowse *external = new ExternalBrowse(lid); externalList->append(external); setupExternalBrowserConnections(external->browser); external->setWindowTitle(tr("NixNote - ") +external->browser->noteTitle.text()); external->show(); connect(external->browser->editor->titleEditor, SIGNAL(titleUpdated(QString)), external, SLOT(setTitle(QString))); this->lastExternal= external; return; } } view->setContent(lid); } // Set the title of the current tab based on the note's title void NTabWidget::setTitle(QString t) { this->setTitle(tabBar->currentIndex(), t); } // Set the title of a particular tab based on the note's title void NTabWidget::setTitle(int index, QString t) { tabBar->setTabText(index, t); } // A signal that a note has been updated. void NTabWidget::noteUpdateSignaled(qint32 lid) { // COMMENTED OUT TO PREVENT SEGFAULT emit(this->noteUpdated(lid)); Note n; NoteTable noteTable(global.db); noteTable.get(n, lid, false, false); for (int i=0;isize(); i++) { if (browserList->at(i)->lid == lid) { if (n.title.isSet()) setTitle(i, n.title); return; } } } // A signal that a note has been updated. void NTabWidget::updateNoteListSignaled(qint32 lid, int column, QVariant data) { emit(this->updateNoteList(lid, column, data)); } // A note has been synchronized void NTabWidget::noteSyncSignaled(qint32 lid) { // COMMENTED OUT TO PREVENT SEGFAULT emit(this->noteUpdated(lid)); Note n; NoteTable noteTable(global.db); noteTable.get(n, lid, false, false); for (int i=0;isize(); i++) { if (browserList->at(i)->lid == lid && !browserList->at(i)->editor->isDirty) { setTitle(i, n.title); browserList->at(i)->blockSignals(true); browserList->at(i)->clear(); browserList->at(i)->setContent(lid); browserList->at(i)->blockSignals(false); return; } } for (int i=0;isize(); i++) { if (externalList->at(i)->browser->lid == lid && !externalList->at(i)->browser->editor->isDirty) { externalList->at(i)->setWindowTitle(tr("NixNote - ")+ n.title); externalList->at(i)->browser->blockSignals(true); externalList->at(i)->browser->clear(); externalList->at(i)->browser->setContent(lid); externalList->at(i)->browser->blockSignals(false); return; } } } void NTabWidget::tagCreationSignaled(qint32 lid) { emit(this->tagCreated(lid)); } void NTabWidget::setupConnections(NBrowserWindow *newBrowser) { connect(tagTreeView, SIGNAL(tagRenamed(qint32,QString,QString)), newBrowser, SLOT(tagRenamed(qint32,QString,QString))); connect(tagTreeView, SIGNAL(tagDeleted(qint32, QString)), newBrowser, SLOT(tagDeleted(qint32, QString))); connect(tagTreeView, SIGNAL(tagAdded(qint32)), &newBrowser->tagEditor.newTag, SLOT(loadCompleter())); connect(notebookTreeView, SIGNAL(notebookRenamed(qint32,QString,QString)), newBrowser, SLOT(notebookRenamed(qint32,QString,QString))); connect(notebookTreeView, SIGNAL(notebookDeleted(qint32, QString)), newBrowser, SLOT(notebookDeleted(qint32, QString))); connect(notebookTreeView, SIGNAL(notebookAdded(qint32)), newBrowser, SLOT(notebookAdded(qint32))); connect(notebookTreeView, SIGNAL(stackRenamed(QString,QString)), newBrowser, SLOT(stackRenamed(QString,QString))); connect(notebookTreeView, SIGNAL(stackDeleted(QString)), newBrowser, SLOT(stackDeleted(QString))); connect(notebookTreeView, SIGNAL(stackAdded(QString)), newBrowser, SLOT(stackAdded(QString))); connect(newBrowser, SIGNAL(noteUpdated(qint32)), this, SLOT(noteUpdateSignaled(qint32))); connect(newBrowser, SIGNAL(tagAdded(qint32)), this, SLOT(tagCreationSignaled(qint32))); connect(newBrowser, SIGNAL(updateNoteList(qint32,int,QVariant)), this, SLOT(updateNoteListSignaled(qint32,int,QVariant))); connect(syncThread, SIGNAL(noteUpdated(qint32)), this, SLOT(noteSyncSignaled(qint32))); connect(newBrowser, SIGNAL(noteContentEditedSignal(QString,qint32,QString)), this, SLOT(noteContentEdited(QString,qint32,QString))); connect(newBrowser, SIGNAL(noteTitleEditedSignal(QString,qint32,QString)), this, SLOT(noteTitleEdited(QString,qint32,QString))); connect(newBrowser, SIGNAL(noteAuthorEditedSignal(QString,qint32,QString)), this, SLOT(noteAuthorEdited(QString,qint32,QString))); connect(newBrowser, SIGNAL(noteLocationEditedSignal(QString,qint32,double,double,double,QString)), this, SLOT(noteLocationEdited(QString,qint32,double,double,double,QString))); connect(newBrowser, SIGNAL(noteUrlEditedSignal(QString,qint32,QString)), this, SLOT(noteUrlEdited(QString,qint32,QString))); connect(newBrowser, SIGNAL(noteAlarmEditedSignal(QString,qint32,bool,QString)), this, SLOT(noteAlarmEdited(QString,qint32,bool,QString))); connect(newBrowser, SIGNAL(noteTagsEditedSignal(QString,qint32,QStringList)), this, SLOT(noteTagsEdited(QString,qint32,QStringList))); connect(newBrowser, SIGNAL(noteNotebookEditedSignal(QString,qint32,qint32,QString)), this, SLOT(noteNotebookEdited(QString,qint32,qint32,QString))); connect(newBrowser, SIGNAL(noteDateEditedSignal(QString,qint32,int,QDateTime)), this, SLOT(noteDateEdited(QString,qint32,int,QDateTime))); connect(newBrowser, SIGNAL(evernoteLinkClicked(qint32,bool,bool)), this, SLOT(evernoteLinkClicked(qint32, bool,bool))); connect(newBrowser->editor, SIGNAL(escapeKeyPressed()), this, SLOT(escapeKeyListener())); } void NTabWidget::evernoteLinkClicked(qint32 openLid, bool newTab, bool newWindow) { emit(updateSelectionRequested()); if (newTab) openNote(openLid, NewTab); else if (newWindow) openNote(openLid, ExternalWindow); else openNote(openLid, CurrentTab); } void NTabWidget::undoButtonPressed() { currentBrowser()->undoButtonPressed(); } void NTabWidget::redoButtonPressed() { currentBrowser()->redoButtonPressed(); } void NTabWidget::cutButtonPressed() { currentBrowser()->cutButtonPressed(); } void NTabWidget::copyButtonPressed() { currentBrowser()->copyButtonPressed(); } void NTabWidget::pasteButtonPressed() { currentBrowser()->pasteButtonPressed(); } void NTabWidget::pasteAsTextButtonPressed() { currentBrowser()->pasteWithoutFormatButtonPressed(); } void NTabWidget::selectAllButtonPressed() { currentBrowser()->selectAllButtonPressed(); } void NTabWidget::viewExtendedInformation() { switch (currentBrowser()->expandButton.currentState) { case (EXPANDBUTTON_1) : currentBrowser()->expandButton.click(); currentBrowser()->expandButton.click(); break; case (EXPANDBUTTON_2) : currentBrowser()->expandButton.click(); break; case (EXPANDBUTTON_3) : currentBrowser()->expandButton.click(); break; } } void NTabWidget::toggleSource() { currentBrowser()->toggleSource(); } void NTabWidget::updateResourceHash(qint32 noteLid, QByteArray oldHash, QByteArray newHash) { for (int i=0; isize(); i++) { NBrowserWindow *browser = browserList->at(i); browser->updateResourceHash(noteLid, oldHash, newHash); } } // Refresh a note's content void NTabWidget::refreshNoteContent(qint32 lid) { for (int i=0;isize(); i++) { if (browserList->at(i)->lid == lid) { browserList->at(i)->setContent(lid); return; } } } // Called when an external editor is created void NTabWidget::setupExternalBrowserConnections(NBrowserWindow *newBrowser) { connect(tagTreeView, SIGNAL(tagRenamed(qint32,QString,QString)), newBrowser, SLOT(tagRenamed(qint32,QString,QString))); connect(tagTreeView, SIGNAL(tagDeleted(qint32, QString)), newBrowser, SLOT(tagDeleted(qint32, QString))); connect(tagTreeView, SIGNAL(tagAdded(qint32)), &newBrowser->tagEditor.newTag, SLOT(loadCompleter())); connect(notebookTreeView, SIGNAL(notebookRenamed(qint32,QString,QString)), newBrowser, SLOT(notebookRenamed(qint32,QString,QString))); connect(notebookTreeView, SIGNAL(notebookDeleted(qint32, QString)), newBrowser, SLOT(notebookDeleted(qint32, QString))); connect(notebookTreeView, SIGNAL(notebookAdded(qint32)), newBrowser, SLOT(notebookAdded(qint32))); connect(notebookTreeView, SIGNAL(stackRenamed(QString,QString)), newBrowser, SLOT(stackRenamed(QString,QString))); connect(notebookTreeView, SIGNAL(stackDeleted(QString)), newBrowser, SLOT(stackDeleted(QString))); connect(notebookTreeView, SIGNAL(stackAdded(QString)), newBrowser, SLOT(stackAdded(QString))); connect(newBrowser, SIGNAL(noteUpdated(qint32)), this, SLOT(noteUpdateSignaled(qint32))); connect(newBrowser, SIGNAL(tagAdded(qint32)), this, SLOT(tagCreationSignaled(qint32))); connect(newBrowser, SIGNAL(updateNoteList(qint32,int,QVariant)), this, SLOT(updateNoteListSignaled(qint32,int,QVariant))); connect(syncThread, SIGNAL(noteUpdated(qint32)), this, SLOT(noteSyncSignaled(qint32))); connect(newBrowser, SIGNAL(noteContentEditedSignal(QString,qint32,QString)), this, SLOT(noteContentEdited(QString,qint32,QString))); connect(newBrowser, SIGNAL(evernoteLinkClicked(qint32,bool,bool)), this, SLOT(evernoteLinkClicked(qint32, bool,bool))); connect(newBrowser, SIGNAL(noteTitleEditedSignal(QString,qint32,QString)), this, SLOT(noteTitleEdited(QString,qint32,QString))); connect(newBrowser, SIGNAL(noteAuthorEditedSignal(QString,qint32,QString)), this, SLOT(noteAuthorEdited(QString,qint32,QString))); connect(newBrowser, SIGNAL(noteLocationEditedSignal(QString,qint32,double,double,double,QString)), this, SLOT(noteLocationEdited(QString,qint32,double,double,double,QString))); connect(newBrowser, SIGNAL(noteUrlEditedSignal(QString,qint32,QString)), this, SLOT(noteUrlEdited(QString,qint32,QString))); connect(newBrowser, SIGNAL(noteAlarmEditedSignal(QString,qint32,bool,QString)), this, SLOT(noteAlarmEdited(QString,qint32,bool,QString))); connect(newBrowser, SIGNAL(noteTagsEditedSignal(QString,qint32,QStringList)), this, SLOT(noteTagsEdited(QString,qint32,QStringList))); connect(newBrowser, SIGNAL(noteNotebookEditedSignal(QString,qint32,qint32,QString)), this, SLOT(noteNotebookEdited(QString,qint32,qint32,QString))); connect(newBrowser, SIGNAL(noteDateEditedSignal(QString,qint32,int,QDateTime)), this, SLOT(noteDateEdited(QString,qint32,int,QDateTime))); // Hide the html entities dialog since it doesn't work. newBrowser->hideHtmlEntities(); } // A note was edited, so we need to make sure all the windows // are in sync. void NTabWidget::noteContentEdited(QString uuid, qint32 lid, QString content) { for (int i=0; isize(); i++) { if (lid == browserList->at(i)->lid && browserList->at(i)->uuid != uuid) { browserList->at(i)->editor->blockSignals(true); browserList->at(i)->editor->setHtml(content); browserList->at(i)->editor->blockSignals(false); } } for (int i=0; isize(); i++) { if (lid == externalList->at(i)->browser->lid && externalList->at(i)->browser->uuid != uuid) { externalList->at(i)->browser->editor->blockSignals(true); externalList->at(i)->browser->editor->setHtml(content); externalList->at(i)->browser->editor->blockSignals(false); } } // Invalidate the cache (if needed) if (global.cache.contains(lid)) { NoteCache *cache = global.cache[lid]; if (cache != NULL) cache->noteContent = content.toUtf8(); else global.cache.remove(lid); } } // A note's notebook was edited, so we need to make sure all the windows // are in sync. void NTabWidget::noteNotebookEdited(QString uuid, qint32 lid, qint32 notebookLid, QString notebookName) { for (int i=0; isize(); i++) { if (lid == browserList->at(i)->lid && browserList->at(i)->uuid != uuid) { browserList->at(i)->notebookMenu.blockSignals(true); browserList->at(i)->notebookMenu.updateCurrentNotebook(notebookLid, notebookName); browserList->at(i)->notebookMenu.blockSignals(false); } } for (int i=0; isize(); i++) { if (lid == externalList->at(i)->browser->lid && externalList->at(i)->browser->uuid != uuid) { externalList->at(i)->browser->notebookMenu.blockSignals(true); externalList->at(i)->browser->notebookMenu.updateCurrentNotebook(notebookLid, notebookName); externalList->at(i)->browser->notebookMenu.blockSignals(false); } } emit (noteNotebookUpdated(uuid, lid, notebookName)); } // A note's notebook was edited, so we need to make sure all the windows // are in sync. void NTabWidget::noteDateEdited(QString uuid, qint32 lid, int dateType, QDateTime dt) { for (int i=0; isize(); i++) { if (lid == browserList->at(i)->lid && browserList->at(i)->uuid != uuid) { DateTimeEditor *dte=NULL; switch(dateType) { case NOTE_CREATED_DATE: dte = &browserList->at(i)->dateEditor.createdDate; break; case NOTE_UPDATED_DATE: dte = &browserList->at(i)->dateEditor.updatedDate; break; case NOTE_ATTRIBUTE_SUBJECT_DATE: dte = &browserList->at(i)->dateEditor.subjectDate; break; default: return; } dte->blockSignals(true); dte->setDateTime(dt); dte->blockSignals(false); } } for (int i=0; isize(); i++) { if (lid == externalList->at(i)->browser->lid && externalList->at(i)->browser->uuid != uuid) { DateTimeEditor *dte=NULL; switch(dateType) { case NOTE_CREATED_DATE: dte = &externalList->at(i)->browser->dateEditor.createdDate; break; case NOTE_UPDATED_DATE: dte = &externalList->at(i)->browser->dateEditor.updatedDate; break; case NOTE_ATTRIBUTE_SUBJECT_DATE: dte = &externalList->at(i)->browser->dateEditor.subjectDate; break; default: return; } dte->blockSignals(true); dte->setDateTime(dt); dte->blockSignals(false); } } } void NTabWidget::saveAllNotes() { for (int i=0; isize(); i++) { browserList->at(i)->saveNoteContent(); } for (int i=0; isize(); i++) { externalList->at(i)->browser->saveNoteContent(); } } // A note title was edited, so we need to make sure all the windows // are in sync. void NTabWidget::noteTitleEdited(QString uuid, qint32 lid, QString content) { for (int i=0; isize(); i++) { if (lid == browserList->at(i)->lid && browserList->at(i)->uuid != uuid) { browserList->at(i)->noteTitle.blockSignals(true); browserList->at(i)->noteTitle.setText(content); browserList->at(i)->noteTitle.blockSignals(false); } } for (int i=0; isize(); i++) { if (lid == externalList->at(i)->browser->lid && externalList->at(i)->browser->uuid != uuid) { externalList->at(i)->browser->noteTitle.blockSignals(true); externalList->at(i)->browser->noteTitle.setText(content); externalList->at(i)->browser->noteTitle.blockSignals(false); } } emit(updateNoteTitle(uuid, lid, content)); } // A note title was edited, so we need to make sure all the windows // are in sync. void NTabWidget::noteAuthorEdited(QString uuid, qint32 lid, QString content) { for (int i=0; isize(); i++) { if (lid == browserList->at(i)->lid && browserList->at(i)->uuid != uuid) { browserList->at(i)->dateEditor.authorEditor.blockSignals(true); browserList->at(i)->dateEditor.authorEditor.setText(content); browserList->at(i)->dateEditor.authorEditor.blockSignals(false); } } for (int i=0; isize(); i++) { if (lid == externalList->at(i)->browser->lid && externalList->at(i)->browser->uuid != uuid) { externalList->at(i)->browser->dateEditor.authorEditor.blockSignals(true); externalList->at(i)->browser->dateEditor.authorEditor.setText(content); externalList->at(i)->browser->dateEditor.authorEditor.blockSignals(false); } } } // A note title was edited, so we need to make sure all the windows // are in sync. void NTabWidget::noteLocationEdited(QString uuid, qint32 lid, double longitude, double latitude, double altitude, QString name) { for (int i=0; isize(); i++) { if (lid == browserList->at(i)->lid && browserList->at(i)->uuid != uuid) { browserList->at(i)->dateEditor.locationEditor.blockSignals(true); browserList->at(i)->dateEditor.locationEditor.setGeography(lid, longitude, latitude, altitude, name); browserList->at(i)->dateEditor.locationEditor.blockSignals(false); } } for (int i=0; isize(); i++) { if (lid == externalList->at(i)->browser->lid && externalList->at(i)->browser->uuid != uuid) { externalList->at(i)->browser->dateEditor.locationEditor.blockSignals(true); externalList->at(i)->browser->dateEditor.locationEditor.setGeography(lid, longitude, latitude, altitude, name); externalList->at(i)->browser->dateEditor.locationEditor.blockSignals(false); } } } // A note title was edited, so we need to make sure all the windows // are in sync. void NTabWidget::noteUrlEdited(QString uuid, qint32 lid, QString content) { for (int i=0; isize(); i++) { if (lid == browserList->at(i)->lid && browserList->at(i)->uuid != uuid) { browserList->at(i)->urlEditor.blockSignals(true); browserList->at(i)->urlEditor.setText(content); browserList->at(i)->urlEditor.blockSignals(false); } } for (int i=0; isize(); i++) { if (lid == externalList->at(i)->browser->lid && externalList->at(i)->browser->uuid != uuid) { externalList->at(i)->browser->urlEditor.blockSignals(true); externalList->at(i)->browser->urlEditor.setText(content); externalList->at(i)->browser->urlEditor.blockSignals(false); } } } // A note title was edited, so we need to make sure all the windows // are in sync. void NTabWidget::noteTagsEdited(QString uuid, qint32 lid, QStringList names) { for (int i=0; isize(); i++) { if (lid == browserList->at(i)->lid && browserList->at(i)->uuid != uuid) { browserList->at(i)->tagEditor.blockSignals(true); browserList->at(i)->tagEditor.setTags(names); browserList->at(i)->tagEditor.blockSignals(false); } } for (int i=0; isize(); i++) { if (lid == externalList->at(i)->browser->lid && externalList->at(i)->browser->uuid != uuid) { externalList->at(i)->browser->tagEditor.blockSignals(true); externalList->at(i)->browser->tagEditor.setTags(names); externalList->at(i)->browser->tagEditor.blockSignals(false); } } emit(noteTagsUpdated(uuid, lid, names)); } // A note title was edited, so we need to make sure all the windows // are in sync. void NTabWidget::noteAlarmEdited(QString uuid, qint32 lid, bool strikeout, QString text) { for (int i=0; isize(); i++) { if (lid == browserList->at(i)->lid && browserList->at(i)->uuid != uuid) { QFont f = browserList->at(i)->alarmText.font(); f.setStrikeOut(strikeout); browserList->at(i)->alarmText.setFont(f); browserList->at(i)->alarmText.setText(text); } } for (int i=0; isize(); i++) { if (lid == externalList->at(i)->browser->lid && externalList->at(i)->browser->uuid != uuid) { QFont f = externalList->at(i)->browser->alarmText.font(); f.setStrikeOut(strikeout); externalList->at(i)->browser->alarmText.setFont(f); externalList->at(i)->browser->alarmText.setText(text); } } } void NTabWidget::showHtmlEntities() { htmlEntities->setVisible(true); } void NTabWidget::htmlEntitiesClicked(QString entity) { currentBrowser()->insertHtml(entity); } void NTabWidget::reloadIcons() { for (int i=0; ibrowserList->size(); i++) { this->browserList->at(i)->buttonBar->reloadIcons(); this->browserList->at(i)->expandButton.reloadIcon(); this->browserList->at(i)->dateEditor.locationEditor.reloadIcons(); this->browserList->at(i)->alarmButton.reloadIcons(); this->browserList->at(i)->tagEditor.reloadIcons(); this->browserList->at(i)->notebookMenu.reloadIcons(); } for (int i=0; iexternalList->size(); i++) { this->externalList->at(i)->browser->buttonBar->reloadIcons(); this->externalList->at(i)->browser->expandButton.reloadIcon(); this->externalList->at(i)->browser->dateEditor.locationEditor.reloadIcons(); this->externalList->at(i)->browser->alarmButton.reloadIcons(); this->externalList->at(i)->browser->tagEditor.reloadIcons(); this->externalList->at(i)->browser->notebookMenu.reloadIcons(); } } void NTabWidget::changeEditorStyle() { for (int i=0; isize(); i++) { browserList->at(i)->setEditorStyle(); } for (int i=0; isize(); i++) { externalList->at(i)->browser->setEditorStyle(); } } void NTabWidget::escapeKeyListener() { emit escapeKeyPressed(); } nixnote2-2.0.2/gui/ntabwidget.h000066400000000000000000000110201315604104400163360ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NTABWIDGET_H #define NTABWIDGET_H #include "gui/nbrowserwindow.h" #include "gui/ntagview.h" #include "gui/nnotebookview.h" #include "threads/syncrunner.h" #include "gui/externalbrowse.h" #include "dialog/htmlentitiesdialog.h" #include "nixnote.h" #include #include class SyncRunner; class NBrowserWindow; class NixNote; class NTabWidget : public QWidget { Q_OBJECT private: void setupConnections(NBrowserWindow *browserWindow); void setupExternalBrowserConnections(NBrowserWindow *browserWindow); NTagView *tagTreeView; NNotebookView *notebookTreeView; SyncRunner *syncThread; HtmlEntitiesDialog *htmlEntities; NixNote *parent; public: explicit NTabWidget(NixNote *p, SyncRunner *s, NNotebookView *n, NTagView *t); ~NTabWidget(); QTabBar *tabBar; QVBoxLayout vboxlayout; QList *browserList; QList *externalList; void addBrowser(NBrowserWindow *v, QString title); void setTitle(QString t); void setTitle(qint32 index, QString title); QStackedWidget stack; NBrowserWindow *currentBrowser(); enum OpenNoteMode { CurrentTab = 0, NewTab = 1, ExternalWindow = 2 }; void reloadIcons(); void changeEditorStyle(); bool findBrowser(NBrowserWindow *retval, qint32 lid); ExternalBrowse *lastExternal; signals: void updateSelectionRequested(); void noteUpdated(qint32); void tagCreated(qint32); void updateNoteList(qint32, int, QVariant); // A note was edited so we update the note list void updateNoteTitle(QString uuid, qint32 lid, QString content); void escapeKeyPressed(); void noteTagsUpdated(QString uuid, qint32 lid, QStringList names); void noteNotebookUpdated(QString uuid, qint32 lid, QString name); public slots: void closeTab(int index); void closeTab(); void moveTab(int to, int from); void openNote(qint32 lid, OpenNoteMode mode); void tagCreationSignaled(qint32 lid); void noteSyncSignaled(qint32 lid); void noteUpdateSignaled(qint32); void evernoteLinkClicked(qint32 openLid, bool newTab, bool newWindow); void escapeKeyListener(); void saveAllNotes(); void undoButtonPressed(); void redoButtonPressed(); void cutButtonPressed(); void copyButtonPressed(); void pasteButtonPressed(); void pasteAsTextButtonPressed(); void selectAllButtonPressed(); void viewExtendedInformation(); void toggleSource(); void updateResourceHash(qint32 noteLid, QByteArray oldHash, QByteArray newHash); // Update the hash of a resource in a note void refreshNoteContent(qint32 lid); // refresh a note's contents void updateNoteListSignaled(qint32, int, QVariant); // A note was edited so we update the note list void noteContentEdited(QString uuid, qint32 lid, QString content); void noteTitleEdited(QString uuid, qint32 lid, QString title); void noteAuthorEdited(QString uuid, qint32 lid, QString title); void noteNotebookEdited(QString uuid, qint32 lid, qint32 notebookLid, QString notebookName); void noteDateEdited(QString uuid, qint32 lid, int dateID, QDateTime dt); void noteUrlEdited(QString uuid, qint32 lid, QString title); void noteLocationEdited(QString uuid, qint32 lid, double longitude, double latitude, double altitude, QString name); void noteTagsEdited(QString uuid, qint32 lid, QStringList names); void noteAlarmEdited(QString uuid, qint32 lid, bool strikeout, QString text); void showHtmlEntities(); void htmlEntitiesClicked(QString entity); void nextTab(); void prevTab(); }; #endif // NTABWIDGET_H nixnote2-2.0.2/gui/ntagview.cpp000066400000000000000000000752351315604104400164070ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "ntagview.h" #include "global.h" #include "ntagviewitem.h" #include "sql/tagtable.h" #include "dialog/tagproperties.h" #include "filters/filtercriteria.h" #include "gui/ntagviewdelegate.h" #include "sql/nsqlquery.h" #include #include #include #include #include #include "sql/linkednotebooktable.h" #include "sql/notebooktable.h" #include "gui/widgetpanel.h" #include "sql/notetable.h" #include #include #define NAME_POSITION 0 extern Global global; // Constructor NTagView::NTagView(QWidget *parent) : QTreeWidget(parent) { accountFilter = 0; this->setFont(global.getGuiFont(font())); filterPosition = 0; maxCount = 0; // setup options this->setEditTriggers(QAbstractItemView::NoEditTriggers); this->setSelectionBehavior(QAbstractItemView::SelectRows); this->setSelectionMode(QAbstractItemView::ExtendedSelection); this->setRootIsDecorated(true); this->setSortingEnabled(false); this->header()->setVisible(false); //this->setStyleSheet("QTreeWidget { background:transparent; border:none; margin:0px; padding: 0px; }"); // Build the root item root = new NTagViewItem(this); root->setIcon(NAME_POSITION,global.getIconResource(":tagIcon")); root->setData(NAME_POSITION, Qt::UserRole, "root"); root->setData(NAME_POSITION, Qt::DisplayRole, tr("Tags from Personal")); root->setExpanded(true); QFont rootFont = root->font(NAME_POSITION); rootFont.setBold(true); root->setFont(NAME_POSITION, rootFont); this->setMinimumHeight(1); this->addTopLevelItem(root); this->rebuildTagTreeNeeded = true; this->loadData(); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); connect(this, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(calculateHeight())); connect(this, SIGNAL(itemCollapsed(QTreeWidgetItem*)), this, SLOT(calculateHeight())); connect(this, SIGNAL(itemSelectionChanged()), this, SLOT(buildSelection())); setAcceptDrops(true); setDragEnabled(true); global.settings->beginGroup("SaveState"); hideUnassigned = global.settings->value("hideUnassigned", false).toBool(); global.settings->endGroup(); addAction = context.addAction(tr("Create New Tag")); addAction->setShortcut(QKeySequence(Qt::Key_Insert)); addAction->setShortcutContext(Qt::WidgetShortcut); addShortcut = new QShortcut(this); addShortcut->setKey(QKeySequence(Qt::Key_Insert)); addShortcut->setContext(Qt::WidgetShortcut); context.addSeparator(); deleteAction = context.addAction(tr("Delete")); deleteAction->setShortcut(QKeySequence(Qt::Key_Delete)); deleteShortcut = new QShortcut(this); deleteShortcut->setKey(QKeySequence(Qt::Key_Delete)); deleteShortcut->setContext(Qt::WidgetShortcut); renameAction = context.addAction(tr("Rename")); renameAction->setShortcutContext(Qt::WidgetShortcut); mergeAction = context.addAction(tr("Merge")); context.addSeparator(); hideUnassignedAction = context.addAction(tr("Hide Unassigned")); hideUnassignedAction->setCheckable(true); hideUnassignedAction->setChecked(hideUnassigned); connect(hideUnassignedAction, SIGNAL(triggered()), this, SLOT(hideUnassignedTags())); context.addSeparator(); propertiesAction = context.addAction(tr("Properties")); connect(addAction, SIGNAL(triggered()), this, SLOT(addRequested())); connect(deleteAction, SIGNAL(triggered()), this, SLOT(deleteRequested())); connect(renameAction, SIGNAL(triggered()), this, SLOT(renameRequested())); connect(propertiesAction, SIGNAL(triggered()), this, SLOT(propertiesRequested())); connect(mergeAction, SIGNAL(triggered()), this, SLOT(mergeRequested())); connect(addShortcut, SIGNAL(activated()), this, SLOT(addRequested())); connect(deleteShortcut, SIGNAL(activated()), this, SLOT(deleteRequested())); this->setItemDelegate(new NTagViewDelegate()); this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); this->setFrameShape(QFrame::NoFrame); expandedImage = new QImage(":expandedIcon"); collapsedImage = new QImage(":collapsedIcon"); this->setProperty("animated", false); } // Destructor NTagView::~NTagView() { delete root; } // Called when the notebook has changed. If this is a non-linked notebook we // display all available tags owned by this user. If it is a linked notebook // we only show the tags that are connected to that notebook void NTagView::notebookSelectionChanged(qint32 notebookLid) { LinkedNotebookTable table(global.db); if (table.exists(notebookLid)) { accountFilter = notebookLid; NotebookTable notebookTable(global.db); Notebook notebook; notebookTable.get(notebook, notebookLid); root->setData(NAME_POSITION, Qt::DisplayRole, tr("Tags from ")+notebook.name); } else { root->setData(NAME_POSITION, Qt::DisplayRole, tr("Tags from Personal")); accountFilter = 0; } if (accountFilter > 0) { addAction->setEnabled(false); deleteAction->setEnabled(false); } else { addAction->setEnabled(true); deleteAction->setEnabled(true); } } void NTagView::calculateHeight() { int h = 0; int topLevelCount = topLevelItemCount(); for(int i = 0;i < topLevelCount;i++) { QTreeWidgetItem * item = topLevelItem(i); h += calculateHeightRec(item); h += item->sizeHint(0).height() + 5; } if(h != 0) { setMinimumHeight(h); setMaximumHeight(h); } this->setMaximumWidth(sizeHint().width()); } int NTagView::calculateHeightRec(QTreeWidgetItem * item) { if(!item) return 0; QModelIndex index = indexFromItem(item); if(!item->isExpanded()) { return rowHeight(index); } int h = item->sizeHint(0).height() + 2 + rowHeight(index); int childCount = item->childCount(); for(int i = 0; ichild(i)); } return h; } // This allows for the tree item to be toggled. If the prior item is selected again // it is deselected. If it is the root item, we don't permit the selection. void NTagView::mousePressEvent(QMouseEvent *event) { QModelIndex item = indexAt(event->pos()); bool selected = selectionModel()->isSelected(indexAt(event->pos())); QTreeView::mousePressEvent(event); if (selected && (event->buttons() & Qt::LeftButton)) selectionModel()->select(item, QItemSelectionModel::Deselect); for (int i=0; iselectedItems() .size(); i++) { if (this->selectedIndexes().at(i).data(Qt::UserRole) == "root") { if (!root->isExpanded()) root->setExpanded(true); selectionModel()->select(this->selectedIndexes().at(i), QItemSelectionModel::Deselect); } } } // Load up the data from the database void NTagView::loadData() { // Empty out the old data store QList keys = dataStore.keys(); for (int i=0; iparent() != NULL) ptr->parent()->removeChild(ptr); ptr->setHidden(true); // delete ptr; << We can leak memory, but otherwise it sometimes gets confused and causes crashes } } NSqlQuery query(global.db); TagTable tagTable(global.db); query.exec("Select lid, name, parent_gid, account from TagModel order by name"); while (query.next()) { qint32 lid = query.value(0).toInt(); QString name = query.value(1).toString(); QString parentGid = query.value(2).toString(); qint32 account = query.value(3).toInt(); NTagViewItem *newWidget = new NTagViewItem(); newWidget->setData(NAME_POSITION, Qt::DisplayRole, name); newWidget->setData(NAME_POSITION, Qt::UserRole, lid); newWidget->account = account; if (account != accountFilter) newWidget->setHidden(true); else newWidget->setHidden(false); this->dataStore.insert(lid, newWidget); newWidget->parentGuid = parentGid; newWidget->parentLid = tagTable.getLid(parentGid); root->addChild(newWidget); } query.finish(); this->rebuildTree(); } // Rebuild the GUI tree. void NTagView::rebuildTree() { if (!this->rebuildTagTreeNeeded) return; QHashIterator i(dataStore); TagTable tagTable(global.db); while (i.hasNext()) { i.next(); NTagViewItem *widget = i.value(); if (widget != NULL && widget->parentGuid != "") { if (widget->parentLid == 0) { widget->parentLid = tagTable.getLid(widget->parentGuid); } NTagViewItem *parent = dataStore[widget->parentLid]; widget->parent()->removeChild(widget); if (parent != NULL) { parent->childrenLids.append(i.key()); parent->addChild(widget); } } } this->sortByColumn(NAME_POSITION, Qt::AscendingOrder); this->rebuildTagTreeNeeded = false; this->resetSize(); } // A tag has been updated. Things like a sync can cause this to be called // because a tag's name may have changed. void NTagView::tagUpdated(qint32 lid, QString name, QString parentGuid, qint32 account) { this->rebuildTagTreeNeeded = true; qint32 parentLid = 0; NTagViewItem *parentWidget = root; TagTable tagTable(global.db); // Check if it already exists and if its parent exists NTagViewItem *newWidget = NULL; if (this->dataStore.contains(lid) && dataStore[lid] != NULL) { newWidget = dataStore[lid]; if (newWidget->parent() != NULL) newWidget->parent()->removeChild(newWidget); } else { newWidget = new NTagViewItem(); newWidget->account = account; dataStore.remove(lid); dataStore.insert(lid, newWidget); } parentLid = tagTable.getLid(parentGuid); if (parentGuid != "") { if (parentLid > 0 && dataStore.contains(parentLid)) { parentWidget = dataStore[parentLid]; if (parentWidget == NULL) { parentWidget = new NTagViewItem(); parentWidget->account = account; if (account != this->accountFilter) parentWidget->setHidden(true); dataStore.remove(parentLid); dataStore.insert(parentLid, parentWidget); } } else { if (parentLid == 0) { Tag parentTag; parentTag.guid = parentGuid; parentTag.updateSequenceNum = 0; parentTag.name = parentGuid; parentLid = tagTable.add(0, parentTag, false, account); } parentWidget = new NTagViewItem(); root->addChild(parentWidget); parentWidget->setData(NAME_POSITION, Qt::UserRole, parentLid); parentWidget->setData(NAME_POSITION, Qt::DisplayRole, tr("--")); dataStore.insert(parentLid, parentWidget); } } if (account != accountFilter) newWidget->setHidden(true); else newWidget->setHidden(false); parentWidget->addChild(newWidget); newWidget->setData(NAME_POSITION, Qt::DisplayRole, name); newWidget->setData(NAME_POSITION, Qt::UserRole, lid); newWidget->parentGuid = parentGuid; newWidget->parentLid = parentLid; newWidget->account = account; if (this->dataStore.count() == 1) { this->expandAll(); } resetSize(); this->sortByColumn(NAME_POSITION); } // Force a reset of the size. Useful when hiding tags so that the display looks // correct. void NTagView::resetSize() { calculateHeight(); } // A tag was selected so a new FilterCriteria is created and the // filtered table will display the results. void NTagView::buildSelection() { QLOG_TRACE() << "Inside NTagView::buildSelection()"; QList selectedItems = this->selectedItems(); if (selectedItems.size() > 0 && selectedItems[0]->data(0,Qt::UserRole) == "root") return; // First, find out if we're already viewing history. If we are we // chop off the end of the history & start a new one if (global.filterPosition+1 < global.filterCriteria.size()) { while (global.filterPosition+1 < global.filterCriteria.size()) global.filterCriteria.removeLast(); } FilterCriteria *oldFilter = global.filterCriteria[global.filterPosition]; filterPosition++; FilterCriteria *newFilter = new FilterCriteria(); if (selectedItems.size() > 0) { newFilter->setTags(selectedItems); } newFilter->resetAttribute = true; newFilter->resetDeletedOnly = true; newFilter->resetSavedSearch = true; newFilter->resetFavorite = true; newFilter->resetTags = true; newFilter->resetNotebook=true; if (oldFilter!= NULL && oldFilter->isNotebookSet()) { QTreeWidgetItem *notebook =oldFilter->getNotebook(); if (notebook!= NULL) newFilter->setNotebook(*notebook); } global.filterCriteria.push_back(newFilter); global.filterPosition++; emit updateSelectionRequested(); QLOG_TRACE() << "Leaving NTagView::buildSelection()"; } void NTagView::updateSelection() { blockSignals(true); FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; if (global.filterPosition != filterPosition) { QList selectedItems = this->selectedItems(); for (int i=0; iresetTags; i++) { selectedItems[i]->setSelected(false); } for (int i=0; igetTags().size() && criteria->isTagsSet(); i++) { criteria->getTags()[i]->setSelected(true); } } root->setSelected(false); filterPosition = global.filterPosition; blockSignals(false); } // Add a new tag to the table void NTagView::addNewTag(qint32 lid) { TagTable tagTable(global.db); Tag newTag; tagTable.get(newTag, lid); if (newTag.name.isSet()) { tagUpdated(lid, newTag.name, "", 0); } } // Accept the drag move event if possible void NTagView::dragMoveEvent(QDragMoveEvent *event) { WidgetPanel *parent = (WidgetPanel*)parentWidget(); parent->dragMoveHandler(event); QWidget::dragMoveEvent(event); if (event->mimeData()->hasFormat("application/x-nixnote-note")) { if (event->answerRect().intersects(childrenRect())) event->acceptProposedAction(); return; } } // Drag tag event. Determine if dragging is even possible void NTagView::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasFormat("application/x-nixnote-note")) { event->accept(); return; } if (event->source() == this) { if (global.tagBehavior() == "HideInactiveCount") { event->ignore(); return; } WidgetPanel *parent = (WidgetPanel*)parentWidget(); parent->dragEnterHandler(event); event->accept(); return; } event->ignore(); } // Handle what happens when something is dropped onto a tag item bool NTagView::dropMimeData(QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action) { // If this is a note-to-tag drop we are assigning tags to a note if (data->hasFormat("application/x-nixnote-note")) { QByteArray d = data->data("application/x-nixnote-note"); QString data(d); // Find the tag lid we dropped onto qint32 tagLid = parent->data(NAME_POSITION, Qt::UserRole).toInt(); // The string has a long list of note lids. We parse them out & update the note QStringList stringLids = data.split(" "); for (int i=0; i 0) { NoteTable noteTable(global.db); if (!noteTable.hasTag(noteLid, tagLid)) { noteTable.addTag(noteLid, tagLid, true); QString tagString = noteTable.getNoteListTags(noteLid); emit(updateNoteList(noteLid, NOTE_TABLE_TAGS_POSITION, tagString)); // qint64 dt = QDateTime::currentMSecsSinceEpoch(); // noteTable.updateDate(noteLid, dt, NOTE_UPDATED_DATE, true); // emit(updateNoteList(noteLid, NOTE_TABLE_DATE_UPDATED_POSITION, dt)); } } } } if (stringLids.size() > 0) emit updateCounts(); return true; } // If this is a tag-to-tag drop then we are modifying the hierarchy if (data->hasFormat("application/x-nixnote-tag")) { // If there is no parent, then they are trying to drop to the top level, which isn't permitted if (parent == NULL) return false; // Get the lid we are dropping. QByteArray d = data->data("application/x-nixnote-tag"); qint32 lid = d.toInt(); if (lid == 0) return false; qint32 newParentLid = parent->data(NAME_POSITION, Qt::UserRole).toInt(); qint32 oldParentLid = dataStore[lid]->parentLid; if (newParentLid == oldParentLid) return false; if (newParentLid == lid) return false; NTagViewItem *item = dataStore[lid]; // If we had an old parent, remove the child from it. if (oldParentLid > 0) { NTagViewItem *parent_ptr = dataStore[oldParentLid]; for (int i=0; ichildrenLids.size(); i++) { if (parent_ptr->childrenLids[i] == lid) { parent_ptr->childrenLids.removeAt(i); i=parent_ptr->childrenLids.size(); } } parent_ptr->removeChild(item); } else { root->removeChild(item); } // Update the actual database Tag tag; TagTable tagTable(global.db); tagTable.get(tag, lid); QString guid; tagTable.getGuid(guid, newParentLid); tag.parentGuid = guid; tagTable.update(tag, true); if (newParentLid>0) { NTagViewItem *parent_ptr = dataStore[newParentLid]; parent_ptr->addChild(item); parent_ptr->childrenLids.append(lid); item->parentLid = newParentLid; item->parentGuid = tag.guid; } else { item->parentLid = 0; item->parentGuid = ""; root->addChild(item); } // Resort the data this->sortByColumn(NAME_POSITION, Qt::AscendingOrder); sortItems(NAME_POSITION, Qt::AscendingOrder); return QTreeWidget::dropMimeData(parent, index, data, action); } return false; } // Implement of dropEvent so dropMimeData gets called void NTagView::dropEvent(QDropEvent *event) { QTreeView::dropEvent(event); } void NTagView::mouseMoveEvent(QMouseEvent *event) { if (currentItem() == NULL) return; if (!(event->buttons() & Qt::LeftButton)) return; QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; qint32 lid = currentItem()->data(NAME_POSITION, Qt::UserRole).toInt(); if (lid == 0) return; mimeData->setData("application/x-nixnote-tag", currentItem()->data(NAME_POSITION, Qt::UserRole).toByteArray()); drag->setMimeData(mimeData); drag->exec(Qt::MoveAction); } // Display the popup context menu void NTagView::contextMenuEvent(QContextMenuEvent *event) { QList items = selectedItems(); mergeAction->setEnabled(true); if (items.size() <=1) mergeAction->setEnabled(false); if (items.size() == 0) { propertiesAction->setEnabled(false); deleteAction->setEnabled(false); renameAction->setEnabled(false); } else { propertiesAction->setEnabled(true); deleteAction->setEnabled(true); renameAction->setEnabled(true); } context.exec(event->globalPos()); } // Add a new tag to the tree void NTagView::addRequested() { TagProperties dialog; QList items = selectedItems(); dialog.setLid(0); dialog.exec(); if (!dialog.okPressed) return; TagTable table(global.db); NTagViewItem *newWidget = new NTagViewItem(); QString name = dialog.name.text().trimmed(); qint32 lid = table.findByName(name, accountFilter); newWidget->setData(NAME_POSITION, Qt::DisplayRole, name); newWidget->setData(NAME_POSITION, Qt::UserRole, lid); root->addChild(newWidget); this->sortItems(NAME_POSITION, Qt::AscendingOrder); resetSize(); this->sortByColumn(NAME_POSITION); // Now add it to the datastore dataStore.insert(lid, newWidget); emit(tagAdded(lid)); } // Display the properties dialog void NTagView::propertiesRequested() { TagProperties dialog; QList items = selectedItems(); qint32 lid = items[0]->data(NAME_POSITION, Qt::UserRole).toInt(); QString oldName = items[0]->data(NAME_POSITION, Qt::DisplayRole).toString(); dialog.setLid(lid); dialog.exec(); if (!dialog.okPressed) return; QString newName = dialog.name.text().trimmed(); if (newName != oldName) { items[0]->setData(NAME_POSITION, Qt::DisplayRole, dialog.name.text().trimmed()); this->sortItems(NAME_POSITION, Qt::AscendingOrder); resetSize(); this->sortByColumn(NAME_POSITION); emit(tagRenamed(lid, oldName, newName)); } } // Delete an item from the tree. We really just hide it. void NTagView::mergeRequested() { QList items = selectedItems(); QMessageBox msgBox; msgBox.setIcon(QMessageBox::Question); msgBox.setText(tr("Are you sure you want to merge these tags?")); msgBox.setWindowTitle(tr("Verify Merge")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::No); int ret = msgBox.exec(); if (ret == QMessageBox::No) return; qint32 lid = items[0]->data(NAME_POSITION, Qt::UserRole).toInt(); NoteTable ntable(global.db); QList notes; for (int j=1; jdata(NAME_POSITION, Qt::UserRole).toInt()); for (int i=0; idata(NAME_POSITION, Qt::UserRole).toInt(); TagTable table(global.db); table.deleteTag(lid); // Now remove it in the datastore NTagViewItem *ptr = dataStore.take(items[i]->data(NAME_POSITION, Qt::UserRole).toInt()); emit(tagDeleted(lid, ptr->data(NAME_POSITION, Qt::DisplayRole).toString())); delete ptr; } } // Delete an item from the tree. We really just hide it. void NTagView::deleteRequested() { QList items = selectedItems(); if (global.confirmDeletes()) { QMessageBox msgBox; msgBox.setIcon(QMessageBox::Question); if (items.size() == 1) msgBox.setText(tr("Are you sure you want to delete this tag?")); else msgBox.setText(tr("Are you sure you want to delete all selected tags?")); msgBox.setWindowTitle(tr("Verify Delete")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::No); int ret = msgBox.exec(); if (ret == QMessageBox::No) return; } for (int i=0; idata(NAME_POSITION, Qt::UserRole).toInt(); TagTable table(global.db); table.deleteTag(lid); // Now remove selected tags NTagViewItem *ptr = dataStore.take(items[i]->data(NAME_POSITION, Qt::UserRole).toInt()); QList children = ptr->takeChildren(); ptr->parent()->addChildren(children); ptr->parent()->removeChild(ptr); emit(tagDeleted(lid, ptr->data(NAME_POSITION, Qt::DisplayRole).toString())); delete ptr; } } // Rename the current tag. This is just the setup for the edit. When it is // complete the editComplete() function is called so the edit can be validated. void NTagView::renameRequested() { editor = new TreeWidgetEditor(this); connect(editor, SIGNAL(editComplete()), this, SLOT(editComplete())); QList items = selectedItems(); editor->setText(items[0]->text(NAME_POSITION)); editor->lid = items[0]->data(NAME_POSITION, Qt::UserRole).toInt(); editor->setTreeWidgetItem(items[0], NAME_POSITION); QFontMetrics m(font()); editor->setMinimumHeight(m.height()+4); editor->setMaximumHeight(m.height()+4); setItemWidget(items[0], NAME_POSITION, editor); editor->setFocus(); } // An edit is complete. Validate it is an acceptable tag void NTagView::editComplete() { QString text = editor->text().trimmed(); qint32 lid = editor->lid; TagTable table(global.db); Tag tag; table.get(tag, lid); QString oldName = ""; if (tag.name.isSet()) oldName = tag.name; // Check that this tag doesn't already exist // if it exists, we go back to the original name qint32 check = 0; if (text.toLower() == oldName.toLower() && text != oldName) check = 0; else check = table.findByName(text, accountFilter); if (check != 0) { NTagViewItem *item = dataStore[lid]; QString tagname = ""; if (tag.name.isSet()) tagname = tag.name; item->setData(NAME_POSITION, Qt::DisplayRole, tagname); } else { tag.name = text; table.update(tag, true); } this->sortItems(NAME_POSITION, Qt::AscendingOrder); resetSize(); this->sortByColumn(NAME_POSITION); emit(tagRenamed(lid, oldName, text)); } // A tag is purged. void NTagView::tagExpunged(qint32 lid) { // Check if it already exists if (this->dataStore.contains(lid)) { NTagViewItem *item = this->dataStore.value(lid); item->parent()->removeChild(item); this->dataStore.remove(lid); } this->resetSize(); } // Update the total counts for the tag. void NTagView::updateTotals(qint32 lid, qint32 subTotal, qint32 total) { if (dataStore.contains(lid)) { NTagViewItem *item = dataStore[lid]; if (item != NULL) { item->subTotal = subTotal; item->total = total; } if (total > maxCount) maxCount = total; } } // If a tag has a zero count and if we should hide the tags, hide it. // Make sure the tag's parents are also visible if the child has a non-zero // count. void NTagView::hideUnassignedTags() { NTagViewItem *item; if (hideUnassignedAction->isChecked()) hideUnassigned = true; else hideUnassigned = false; // Save this option global.settings->beginGroup("SaveState"); global.settings->setValue("hideUnassigned", hideUnassigned); global.settings->endGroup(); QList keys = dataStore.keys(); // Unhide everything if they don't want items hidden. if (hideUnassigned != true) { for (int i=0; iaccount == accountFilter) item->setHidden(false); else item->setHidden(true); } } resetSize(); return; } // Start hiding unassigned tags for (int i=0; isubTotal == 0 || item->account != accountFilter) item->setHidden(true); else item->setHidden(false); } } for (int i=0; iisHidden()) { while(item->parentLid > 0) { item->parent()->setHidden(false); item = (NTagViewItem*)item->parent(); } } } resetSize(); } // Return a pointer to the tag item NTagViewItem* NTagView::getItem(qint32 lid) { return dataStore[lid]; } QSize NTagView::sizeHint() { return parentWidget()->size(); } void NTagView::drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const { if (!index.child(0,0).isValid()) return; painter->save(); if (isExpanded(index)) { int offset = rect.width()-expandedImage->width()-1; int voffset = (rect.height() - expandedImage->height()) / 2; painter->drawImage(offset, rect.y()+voffset,*expandedImage); } else { int offset = rect.width()-collapsedImage->width()-1; int voffset = (rect.height() - collapsedImage->height()) / 2; painter->drawImage(offset, rect.y()+voffset,*collapsedImage); } painter->restore(); return; // if (index.data(Qt::UserRole).toString() == "root") { // return; // } // QTreeView::drawBranches(painter, rect, index); } void NTagView::reloadIcons() { root->setIcon(NAME_POSITION,global.getIconResource(":tagIcon")); } nixnote2-2.0.2/gui/ntagview.h000066400000000000000000000065131315604104400160450ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NTAGVIEW_H #define NTAGVIEW_H #include "ntagviewitem.h" #include "treewidgeteditor.h" #include #include #include #include class NTagView : public QTreeWidget { Q_OBJECT private: virtual void mousePressEvent(QMouseEvent *event); int filterPosition; int maxCount; QMenu context; QAction *addAction; QAction *propertiesAction; QAction *deleteAction; QAction *renameAction; QAction *hideUnassignedAction; QAction *mergeAction; //QShortcut *renameShortcut; QShortcut *addShortcut; QShortcut *deleteShortcut; TreeWidgetEditor *editor; qint32 accountFilter; QImage *expandedImage; QImage *collapsedImage; private slots: int calculateHeightRec(QTreeWidgetItem * item); void calculateHeight(); void editComplete(); public: NTagViewItem *root; explicit NTagView(QWidget *parent = 0); ~NTagView(); QHash dataStore; void resetSize(); bool hideUnassigned; void updateSelection(); void loadData(); bool rebuildTagTreeNeeded; void dragEnterEvent(QDragEnterEvent *event); bool dropMimeData(QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action); void mouseMoveEvent(QMouseEvent *event); void dropEvent(QDropEvent *event); void contextMenuEvent(QContextMenuEvent *event); NTagViewItem* getItem(qint32 lid); QSize sizeHint(); void drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const; void reloadIcons(); signals: void updateSelectionRequested(); void tagRenamed(qint32 lid, QString oldName, QString newName); void tagDeleted(qint32 lid, QString name); void tagAdded(qint32 lid); void updateNoteList(qint32 noteLid, int column, QVariant tags); void updateCounts(); public slots: void tagUpdated(qint32 lid, QString name, QString parentGuid, qint32 account); void rebuildTree(); void buildSelection(); void addNewTag(qint32 lid); void addRequested(); void propertiesRequested(); void deleteRequested(); void renameRequested(); void mergeRequested(); void tagExpunged(qint32 lid); void updateTotals(qint32 lid, qint32 subTotal, qint32 total); void hideUnassignedTags(); void notebookSelectionChanged(qint32 notebookLid); protected: void dragMoveEvent(QDragMoveEvent *event); }; #endif // NTAGVIEW_H nixnote2-2.0.2/gui/ntagviewdelegate.cpp000066400000000000000000000073111315604104400200700ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "ntagviewdelegate.h" #include "ntagview.h" #include "ntagviewitem.h" #include "global.h" #include #include extern Global global; NTagViewDelegate::NTagViewDelegate(QObject *parent) : QStyledItemDelegate(parent) { } void NTagViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { #if QT_VERSION < 0x050000 QStyleOptionViewItemV4 options = option; #else QStyleOptionViewItem options = option; #endif initStyleOption(&options, index); options.widget->style()->drawControl(QStyle::CE_ItemViewItem, &options, painter); if (global.countBehavior == Global::CountNone) return; painter->save(); qint32 lid = index.data(Qt::UserRole).toInt(); if (lid > 0) { NTagView *tree = (NTagView*)options.widget; NTagViewItem *item = tree->getItem(lid); qint32 subTotal = item->subTotal; qint32 total = item->total; QString countString; if (total == subTotal) { countString = QString("(")+QString::number(total) + QString(")"); } else { countString = QString("(")+QString::number(subTotal) +QString("/") +QString::number(total) + QString(")"); } QSize iconSize = options.icon.actualSize(options.rect.size()); painter->translate(options.rect.left()+iconSize.width(), options.rect.top()); QRect clip(0, 0, options.rect.width()+iconSize.width(), options.rect.height()); painter->setClipRect(clip); QFontMetrics fm = options.fontMetrics; QFont f = options.font; f.setBold(false); painter->setFont(f); painter->setPen(Qt::darkGray); painter->drawText(10+fm.width(index.data().toString()+QString(" ")),fm.ascent(),countString); // painter->drawText(6+fm.width(index.data().toString()+QString(" ")),fm.ascent(),countString); } painter->restore(); } bool NTagViewDelegate::helpEvent(QHelpEvent *e, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index) { if ( !e || !view ) return false; if ( e->type() == QEvent::ToolTip ) { QRect rect = view->visualRect( index ); QSize size = sizeHint( option, index ); if ( rect.width() < size.width() ) { QVariant tooltip = index.data( Qt::DisplayRole ); if ( tooltip.canConvert() ) { QToolTip::showText( e->globalPos(), QString( "

%1
" ) .arg( Qt::escape( tooltip.toString() ) ), view ); return true; } } if ( !QStyledItemDelegate::helpEvent( e, view, option, index ) ) QToolTip::hideText(); return true; } return QStyledItemDelegate::helpEvent( e, view, option, index ); } nixnote2-2.0.2/gui/ntagviewdelegate.h000066400000000000000000000027111315604104400175340ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NTAGVIEWDELEGATE_H #define NTAGVIEWDELEGATE_H #include #include class NTagViewDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit NTagViewDelegate(QObject *parent = 0); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; signals: public slots: bool helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index); }; #endif // NTAGVIEWDELEGATE_H nixnote2-2.0.2/gui/ntagviewitem.cpp000066400000000000000000000043571315604104400172630ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "ntagviewitem.h" NTagViewItem::NTagViewItem(QTreeWidget* parent):QTreeWidgetItem(parent) { parentLid = 0; // The Id of the parent to this tag account = 0; // The notebook account that owns this tag (non zero if this tag is from a linked notebook). childrenLids.clear(); // Children of this tag. parentGuid = ""; // GUID of the parent of this tag. subTotal = 0; // Count of notes matching this tag total = 0; } NTagViewItem::NTagViewItem():QTreeWidgetItem(){ parentLid = 0; // The Id of the parent to this tag account = 0; // The notebook account that owns this tag (non zero if this tag is from a linked notebook). childrenLids.clear(); // Children of this tag. parentGuid = ""; // GUID of the parent of this tag. subTotal = 0; // Count of notes matching this tag total = 0; // Total of all notes with this tag } // Setup the root view of the tree void NTagViewItem::setRootColor(bool val) { if (val) { QFont f; f.setBold(true); setFont(0, f); } } // Used when sorting tags. We want to sort case insensitive bool NTagViewItem::operator<(const QTreeWidgetItem &other)const { int column = treeWidget()->sortColumn(); return text(column).toLower() < other.text(column).toLower(); } nixnote2-2.0.2/gui/ntagviewitem.h000066400000000000000000000026331315604104400167230ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NTAGVIEWITEM_H #define NTAGVIEWITEM_H #include class NTagViewItem : public QTreeWidgetItem { public: explicit NTagViewItem(); explicit NTagViewItem(QTreeWidget* parent); qint32 parentLid; QList childrenLids; QString parentGuid; qint32 total; qint32 subTotal; qint32 account; bool operator<(const QTreeWidgetItem &other)const; void setRootColor(bool val) ; signals: public slots: }; #endif // NTAGVIEWITEM_H nixnote2-2.0.2/gui/ntrashtree.cpp000066400000000000000000000224261315604104400167340ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "ntrashtree.h" #include "global.h" #include #include #include "sql/notetable.h" #include "gui/ntrashviewdelegate.h" #include extern Global global; NTrashTree::NTrashTree(QWidget *parent) : QTreeWidget(parent) { this->count = 0; this->setFont(global.getGuiFont(font())); filterPosition = -1; // setup options this->setEditTriggers(QAbstractItemView::NoEditTriggers); this->setSelectionBehavior(QAbstractItemView::SelectRows); this->setSelectionMode(QAbstractItemView::ExtendedSelection); this->setRootIsDecorated(true); this->setSortingEnabled(false); this->header()->setVisible(false); this->setContentsMargins(10,10,10,10); //this->setStyleSheet("QTreeWidget { border: none; background-color:transparent; }"); // Build the root item QIcon icon(":trashIcon"); root = new QTreeWidgetItem(this); root->setIcon(0,icon); root->setData(0, Qt::UserRole, "root"); root->setData(0, Qt::DisplayRole, tr("Trash")); QFont font = root->font(0); font.setBold(true); root->setFont(0,font); this->setMinimumHeight(1); this->addTopLevelItem(root); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); connect(this, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(calculateHeight())); connect(this, SIGNAL(itemCollapsed(QTreeWidgetItem*)), this, SLOT(calculateHeight())); connect(this, SIGNAL(itemSelectionChanged()), this, SLOT(buildSelection())); restoreAction = contextMenu.addAction(tr("Restore Deleted Notes")); connect(restoreAction, SIGNAL(triggered()), SLOT(restoreAll())); contextMenu.addSeparator(); expungeAction = contextMenu.addAction(tr("Empty Trash")); connect(expungeAction, SIGNAL(triggered()), this, SLOT(expungeAll())); setItemDelegate(new NTrashViewDelegate()); this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); this->setFrameShape(QFrame::NoFrame); } void NTrashTree::calculateHeight() { int h = 0; int topLevelCount = topLevelItemCount(); for(int i = 0;i < topLevelCount;i++) { QTreeWidgetItem * item = topLevelItem(i); h += calculateHeightRec(item); h += item->sizeHint(0).height() + 5; } if(h != 0) { setMinimumHeight(h+5); setMaximumHeight(h+5); } this->setMaximumWidth(this->sizeHint().width()); } int NTrashTree::calculateHeightRec(QTreeWidgetItem * item) { if(!item) return 0; QModelIndex index = indexFromItem(item); if(!item->isExpanded()) { return rowHeight(index); } int h = item->sizeHint(0).height() + 2 + rowHeight(index); int childCount = item->childCount(); for(int i = 0; ichild(i)); } return h; } void NTrashTree::resetSize() { calculateHeight(); } // This allows for the tree item to be toggled. If the prior item is selected again // it is deselected. If it is the root item, we don't permit the selection. void NTrashTree::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { QModelIndex item = indexAt(event->pos()); bool selected = selectionModel()->isSelected(indexAt(event->pos())); QTreeView::mousePressEvent(event); if (selected) { selectionModel()->select(item, QItemSelectionModel::Deselect); } return; } QWidget::mousePressEvent(event); } //************************************************************* // This function is called when a user selects something // within this tree. It also emits a signal that will // be picked up by the main nixnote program. //************************************************************* void NTrashTree::buildSelection() { QLOG_TRACE() << "Inside NTrashTree::buildSelection()"; // First, find out if we're already viewing history. If we are we // chop off the end of the history & start a new one if (global.filterPosition+1 < global.filterCriteria.size()) { while (global.filterPosition+1 < global.filterCriteria.size()) global.filterCriteria.removeLast(); } filterPosition++; FilterCriteria *newFilter = new FilterCriteria(); global.filterCriteria.push_back(newFilter); global.filterPosition++; if (root->isSelected()) newFilter->setDeletedOnly(true); else newFilter->setDeletedOnly(false); newFilter->resetSavedSearch = true; newFilter->resetDeletedOnly = true; newFilter->resetAttribute = true; newFilter->resetFavorite = true; newFilter->resetNotebook =true; newFilter->resetTags = true; newFilter->resetSearchString = true; emit updateSelectionRequested(); QLOG_TRACE() << "Leaving NTrashTree::buildSelection()"; } //************************************************************* // This function is called from the main NixNote class. // it will reset the items which are selected based upon // what the user did somewhere else (outside this widget). //************************************************************* void NTrashTree::updateSelection() { blockSignals(true); FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; if (global.filterPosition != filterPosition) { QList selectedItems = this->selectedItems(); for (int i=0; iresetDeletedOnly; i++) { selectedItems[i]->setSelected(false); } if (criteria->isDeletedOnlySet() && criteria->getDeletedOnly()) { root->setSelected(true); } } filterPosition = global.filterPosition; blockSignals(false); } void NTrashTree::contextMenuEvent(QContextMenuEvent *event) { contextMenu.exec(event->globalPos()); } //*********************************************** //* Restore all notes from the trash //*********************************************** void NTrashTree::restoreAll() { NoteTable ntable(global.db); QList lids; ntable.getAllDeleted(lids); for (int i=0; i lids; ntable.getAllDeleted(lids); for (int i=0; i0) { ntable.addToDeleteQueue(lids[i],n); } } emit(updateSelectionRequested()); } //************************************************** //* Update the trash count //************************************************** void NTrashTree::updateTotals(qint32 total) { this->count = total; repaint(); } QSize NTrashTree::sizeHint() { return QTreeView::sizeHint(); // QSize sz = QTreeView::sizeHint(); // QFontMetrics fm(root->font(0)); // QString numString = tr("Trash ") + // QString("(")+QString::number(count) +QString(")"); // int numWidth = fm.width(numString); // sz.setWidth(root->icon(0).availableSizes().at(0).width() // + numWidth+24); // Add some extra at the end for totals // QLOG_DEBUG() << sz.width(); // return sz; } void NTrashTree::drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const { // suppress unused Q_UNUSED(painter); Q_UNUSED(rect); Q_UNUSED(index); return; } void NTrashTree::reloadIcons() { root->setIcon(0,global.getIconResource(":trashIcon")); } nixnote2-2.0.2/gui/ntrashtree.h000066400000000000000000000035751315604104400164050ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NTRASHTREE_H #define NTRASHTREE_H #include #include #include class NTrashTree : public QTreeWidget { Q_OBJECT private: int filterPosition; QTreeWidgetItem *root; QMenu contextMenu; QAction *restoreAction; QAction *expungeAction; virtual void mousePressEvent(QMouseEvent *event); public: explicit NTrashTree(QWidget *parent = 0); void updateSelection(); void resetSize(); QSize sizeHint(); qint32 count; void drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const; void reloadIcons(); signals: void updateSelectionRequested(); public slots: void contextMenuEvent(QContextMenuEvent *event); void updateTotals(qint32 total); private slots: int calculateHeightRec(QTreeWidgetItem * item); void calculateHeight(); void buildSelection(); void restoreAll(); void expungeAll(); }; #endif // NTRASHTREE_H nixnote2-2.0.2/gui/ntrashviewdelegate.cpp000066400000000000000000000047261315604104400204450ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "ntrashviewdelegate.h" #include #include "ntrashtree.h" #include "global.h" extern Global global; NTrashViewDelegate::NTrashViewDelegate(QObject *parent) : QStyledItemDelegate(parent) { } void NTrashViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { #if QT_VERSION < 0x050000 QStyleOptionViewItemV4 options = option; #else QStyleOptionViewItem options = option; #endif initStyleOption(&options, index); painter->save(); options.widget->style()->drawControl(QStyle::CE_ItemViewItem, &options, painter); if (global.countBehavior == Global::CountNone) { painter->restore(); return; } NTrashTree *tree = (NTrashTree*)options.widget; qint32 count = tree->count; QString countString = QString("(")+QString::number(count) + QString(")"); // shift text right to make icon visible QSize iconSize = options.icon.actualSize(options.rect.size()); painter->translate(options.rect.left()+iconSize.width(), options.rect.top()); QRect clip(0, 0, options.rect.width()+iconSize.width(), options.rect.height()); painter->setClipRect(clip); options.font.setBold(true); QFontMetrics fm = options.fontMetrics; painter->setPen(Qt::darkGray); painter->drawText(10+fm.width(index.data().toString()+QString(" ")), fm.ascent(),countString); // Maybe fm.ascent? // painter->drawText(6+fm.width(index.data().toString()+QString(" ")),fm.height()-1,countString); // Maybe fm.ascent? painter->restore(); } nixnote2-2.0.2/gui/ntrashviewdelegate.h000066400000000000000000000024731315604104400201070ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NTRASHVIEWDELEGATE_H #define NTRASHVIEWDELEGATE_H #include class NTrashViewDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit NTrashViewDelegate(QObject *parent = 0); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; signals: public slots: }; #endif // NTRASHVIEWDELEGATE_H nixnote2-2.0.2/gui/numberdelegate.cpp000066400000000000000000000036721315604104400175420ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "numberdelegate.h" NumberDelegate::NumberDelegate(Format f) { fmt = f; } QString NumberDelegate::displayText(const QVariant &value, const QLocale &locale) const { Q_UNUSED(locale); // Suppress unused variable // If we should hide zero values... if (value.toLongLong() == 0 && fmt == BlankNumber) return ""; // If we should format in kb/mb if (fmt == KBNumber) { QString f = " B"; float number = value.toLongLong(); float value = number; if (number >= 1024 && number < 1048576) { value = number / 1024; f = " KB"; } else { if (number >= 1048576) { f = " MB"; value = number/1024/1024; } } QString rval = QString().number(value); if (rval.contains(".")) rval.truncate(rval.indexOf(".")+2); if (rval.endsWith(".0")) rval.truncate(rval.indexOf(".0")); return rval + f; } // Return default return value.toString(); } nixnote2-2.0.2/gui/numberdelegate.h000066400000000000000000000024561315604104400172060ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NUMBERDELEGATE_H #define NUMBERDELEGATE_H #include class NumberDelegate : public QStyledItemDelegate { public: enum Format { KBNumber, BlankNumber, ZeroNumber }; Format fmt; NumberDelegate(Format f); QString displayText(const QVariant &value, const QLocale &locale) const; }; #endif // NUMBERDELEGATE_H nixnote2-2.0.2/gui/nwebpage.cpp000066400000000000000000000036061315604104400163440ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "nwebpage.h" #include #include #include "global.h" //******************************************************* //* This class inherits everything from QWebPage. It //* handles some of the special things we need in //* QWebPage to be able to edit notes. //******************************************************* extern Global global; NWebPage::NWebPage(QWidget *parent) : QWebPage(parent) { connect(this,SIGNAL(contentsChanged()), this, SLOT(editAlert())); mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAsNeeded); } // This class overrides the one provided by QWebPage. This shows us // any javascript console messages that are produced. void NWebPage::javaScriptConsoleMessage(QString message, int lineNumber, QString sourceID) { QLOG_DEBUG() << "Javascript message: " << "Line: " << lineNumber << " Source: " << sourceID << " message: " << message; } void NWebPage::editAlert() { isDirty = true; } nixnote2-2.0.2/gui/nwebpage.h000066400000000000000000000030411315604104400160020ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NWEBPAGE_H #define NWEBPAGE_H #include //******************************************************* //* This class inherits everything from QWebPage. It //* handles some of the special things we need in //* QWebPage to be able to edit notes. //******************************************************* class NWebPage : public QWebPage { Q_OBJECT public: explicit NWebPage(QWidget *parent = 0); // Constructor bool isDirty; protected: void javaScriptConsoleMessage(QString message, int lineNumber, QString sourceID); signals: public slots: void editAlert(); }; #endif // NWEBPAGE_H nixnote2-2.0.2/gui/nwebview.cpp000066400000000000000000000506351315604104400164060ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "nwebview.h" #include "nwebpage.h" #include "global.h" #include #include #include #include #include "settings/colorsettings.h" //#include "./libencrypt/encrypt_global.h" //#include "./libencrypt/encrypt.h" #include "../dialog/endecryptdialog.h" #include "sql/resourcetable.h" extern Global global; //**************************************************** //* This inherits everything from QWebView. It is //* useful to allow us to setup things that are //* needed to view & edit notes. //**************************************************** // Override the constructor so we always use a NWebPage // rather than a QWebPage NWebView::NWebView(NBrowserWindow *parent) : QWebView(parent) { this->parent = parent; editorPage = new NWebPage(this); setPage(editorPage); isDirty = false; this->setFont(global.getGuiFont(font())); contextMenu = new QMenu(this); openAction = new QAction(tr("Open"), this); contextMenu->addAction(openAction); contextMenu->addSeparator(); contextMenu->setFont(global.getGuiFont(font())); cutAction = new QAction(tr("Cut"), this); this->setupShortcut(cutAction, "Edit_Cut"); contextMenu->addAction(cutAction); connect(cutAction, SIGNAL(triggered()), parent, SLOT(cutButtonPressed())); copyAction = new QAction(tr("Copy"), this); this->setupShortcut(copyAction, "Edit_Copy"); contextMenu->addAction(copyAction); connect(copyAction, SIGNAL(triggered()), parent, SLOT(copyButtonPressed())); pasteAction = new QAction(tr("Paste"), this); setupShortcut(pasteAction, "Edit_Paste"); contextMenu->addAction(pasteAction); connect(pasteAction, SIGNAL(triggered()), parent, SLOT(pasteButtonPressed())); pasteWithoutFormatAction = new QAction(tr("Paste as Unformatted Text"), this); this->setupShortcut(pasteWithoutFormatAction, "Edit_Paste_Without_Formatting"); contextMenu->addAction(pasteWithoutFormatAction); connect(pasteWithoutFormatAction, SIGNAL(triggered()), parent, SLOT(pasteWithoutFormatButtonPressed())); removeFormattingAction = new QAction(tr("Remove Formatting"), this); this->setupShortcut(removeFormattingAction, "Edit_Remove_Formatting"); contextMenu->addAction(removeFormattingAction); connect(removeFormattingAction, SIGNAL(triggered()), parent, SLOT(removeFormatButtonPressed())); copyNoteUrlAction = new QAction(tr("Copy Note URL"), this); this->setupShortcut(copyNoteUrlAction, "Edit_Copy_Note_Url"); contextMenu->addAction(copyNoteUrlAction); connect(copyNoteUrlAction, SIGNAL(triggered()), parent, SLOT(copyNoteUrl())); contextMenu->addSeparator(); QMenu *colorMenu = new QMenu(tr("Background Color"), this); colorMenu->setFont(global.getGuiFont(font())); // Build the background color menu backgroundColorMapper = new QSignalMapper(this); QAction *action; ColorSettings colorSettings; QList< QPair > colorList = colorSettings.colorList(); for (int i=0; iaddAction(colorList[i].first); backgroundColorMapper->setMapping(action, colorList[i].second); connect(action, SIGNAL(triggered()), backgroundColorMapper, SLOT(map())); connect(backgroundColorMapper, SIGNAL(mapped(QString)), this, SLOT(setBackgroundColor(QString))); } // QAction *action = setupColorMenuOption(tr("White")); contextMenu->addMenu(colorMenu); contextMenu->addSeparator(); todoAction = new QAction(tr("To-do"), this); contextMenu->addAction(todoAction); this->setupShortcut(todoAction, "Edit_Insert_Todo"); connect(todoAction, SIGNAL(triggered()), parent, SLOT(todoButtonPressed())); contextMenu->addSeparator(); insertHtmlEntitiesAction = new QAction(tr("HTML Entities"),this); contextMenu->addAction(insertHtmlEntitiesAction); this->setupShortcut(insertHtmlEntitiesAction, "Edit_Insert_Html_Entities"); connect(insertHtmlEntitiesAction, SIGNAL(triggered()), parent, SLOT(insertHtmlEntities())); contextMenu->addSeparator(); encryptAction = new QAction(tr("Encrypted Selected Text"), this); contextMenu->addAction(encryptAction); this->setupShortcut(encryptAction, "Edit_Encrypt_Text"); connect(encryptAction, SIGNAL(triggered()), parent, SLOT(encryptButtonPressed())); insertDateTimeAction = new QAction(tr("Insert Date && Time"), this); this->setupShortcut(insertDateTimeAction, "Insert_DateTime"); contextMenu->addAction(insertDateTimeAction); connect(insertDateTimeAction, SIGNAL(triggered()), parent, SLOT(insertDatetime())); insertLinkAction = new QAction(tr("Insert Hyperlink"), this); contextMenu->addAction(insertLinkAction); this->setupShortcut(insertLinkAction, "Edit_Insert_Hyperlink"); connect(insertLinkAction, SIGNAL(triggered()),parent, SLOT(insertLinkButtonPressed())); insertQuickLinkAction = new QAction(tr("Quick Link"), this); contextMenu->addAction(insertQuickLinkAction); this->setupShortcut(insertQuickLinkAction, "Edit_Insert_QuickLink"); connect(insertQuickLinkAction, SIGNAL(triggered()),parent, SLOT(insertQuickLinkButtonPressed())); removeLinkAction = new QAction(tr("Remove Hyperlink"), this); contextMenu->addAction(removeLinkAction); this->setupShortcut(removeLinkAction, "Edit_Remove_Hyperlink"); connect(removeLinkAction, SIGNAL(triggered()),parent, SLOT(removeLinkButtonPressed())); attachFileAction = new QAction(tr("Attach File"), this); contextMenu->addAction(attachFileAction); this->setupShortcut(attachFileAction, "Edit_Attach_File"); connect(attachFileAction, SIGNAL(triggered()),parent, SLOT(attachFile())); contextMenu->addSeparator(); insertLatexAction = new QAction(tr("Insert LaTeX Formula"), this); contextMenu->addAction(insertLatexAction); this->setupShortcut(insertLatexAction, "Edit_Insert_Latex"); connect(insertLatexAction, SIGNAL(triggered()),parent, SLOT(insertLatexButtonPressed())); contextMenu->addSeparator(); tableMenu = new QMenu(tr("Table"), this); tableMenu->setFont(global.getGuiFont(font())); contextMenu->addMenu(tableMenu); insertTableAction = new QAction(tr("Insert Table"), this); this->setupShortcut(insertTableAction, "Edit_Insert_Table"); tableMenu->addAction(insertTableAction); connect(insertTableAction, SIGNAL(triggered()), parent, SLOT(insertTableButtonPressed())); tableMenu->addSeparator(); insertTableRowAction = new QAction(tr("Insert Row"), this); this->setupShortcut(insertTableRowAction, "Edit_Insert_Table_Row"); tableMenu->addAction(insertTableRowAction); connect(insertTableRowAction, SIGNAL(triggered()), parent, SLOT(insertTableRowButtonPressed())); insertTableColumnAction = new QAction(tr("Insert Column"), this); this->setupShortcut(insertTableColumnAction, "Edit_Insert_Table_Column"); tableMenu->addAction(insertTableColumnAction); connect(insertTableColumnAction, SIGNAL(triggered()), parent, SLOT(insertTableColumnButtonPressed())); tableMenu->addSeparator(); deleteTableRowAction = new QAction(tr("Delete Row"), this); tableMenu->addAction(deleteTableRowAction); this->setupShortcut(deleteTableRowAction, "Edit_Delete_Table_Row"); connect(deleteTableRowAction, SIGNAL(triggered()), parent, SLOT(deleteTableRowButtonPressed())); deleteTableColumnAction = new QAction(tr("Delete Column"), this); tableMenu->addAction(deleteTableColumnAction); this->setupShortcut(deleteTableColumnAction, "Edit_Delete_Table_Column"); connect(deleteTableColumnAction, SIGNAL(triggered()), parent, SLOT(deleteTableColumnButtonPressed())); tableMenu->addSeparator(); tablePropertiesAction = new QAction(tr("Table Properties"), this); this->setupShortcut(tablePropertiesAction, "Edit_Table_Properties"); tableMenu->addAction(tablePropertiesAction); connect(tablePropertiesAction, SIGNAL(triggered()), parent, SLOT(tablePropertiesButtonPressed())); contextMenu->addSeparator(); imageMenu = new QMenu(tr("Image"), this); imageMenu->setFont(global.getGuiFont(font())); contextMenu->addMenu(imageMenu); downloadImageAction()->setText(tr("Save Image")); imageMenu->addAction(downloadImageAction()); // Don't connect this signal. The download attachmen signal will handle it. Otherwise // the signal fires twice. //connect(editorPage, SIGNAL(downloadRequested(QNetworkRequest)), this, SLOT(downloadRequested(QNetworkRequest))); imageMenu->addSeparator(); rotateImageLeftAction = new QAction(tr("Rotate Left"), this); imageMenu->addAction(rotateImageLeftAction); this->setupShortcut(rotateImageLeftAction, "Edit_Image_Rotate_Left"); connect(rotateImageLeftAction, SIGNAL(triggered()), parent, SLOT(rotateImageLeftButtonPressed())); rotateImageRightAction = new QAction(tr("Rotate Right"), this); this->setupShortcut(rotateImageRightAction, "Edit_Image_Rotate_Right"); imageMenu->addAction(rotateImageRightAction); connect(rotateImageRightAction, SIGNAL(triggered()), parent, SLOT(rotateImageRightButtonPressed())); contextMenu->addSeparator(); downloadAttachmentAction()->setText(tr("Save Attachment")); contextMenu->addAction(downloadAttachmentAction()); connect(editorPage, SIGNAL(downloadRequested(QNetworkRequest)), this, SLOT(downloadRequested(QNetworkRequest))); connect(editorPage, SIGNAL(contentsChanged()), this, SLOT(editAlert())); editorPage->setContentEditable(true); // Set some of the menus as disabled until a user selects an image or attachment downloadAttachmentAction()->setEnabled(false); rotateImageRightAction->setEnabled(false); rotateImageLeftAction->setEnabled(false); openAction->setEnabled(false); downloadImageAction()->setEnabled(false); connect(this->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(exposeToJavascript())); //this->setStyleSheet("QWebView,html,body { background-color : red; foreground-color : white; }"); QString qss = global.fileManager.getQssDirPathUser(""); if (qss == "") qss = global.fileManager.getQssDirPath(""); this->settings()->setUserStyleSheetUrl(QUrl("file://"+qss+"editor.css")); this->pasteSequence = QKeySequence(this->pasteAction->shortcut()).toString().toLower(); if (pasteSequence.trimmed() == "") pasteSequence = "ctrl+v"; pasteUnformattedSequence = QKeySequence(pasteWithoutFormatAction->shortcut()).toString().toLower(); if (pasteUnformattedSequence.trimmed() == "") pasteUnformattedSequence = "ctrl+shft+v"; fileSaveSequence = "ctrl+s"; } QAction *NWebView::downloadAttachmentAction() { return pageAction(QWebPage::DownloadLinkToDisk); } QAction *NWebView::downloadImageAction() { return pageAction(QWebPage::DownloadImageToDisk); } QAction* NWebView::setupColorMenuOption(QString color) { QAction *backgroundColor = new QAction(color, this); color = color.replace(" ", ""); //connect(backgroundColor, SIGNAL(triggered()), this, SLOT() return backgroundColor; } void NWebView::focusOutEvent(QFocusEvent *e) { QWebView::focusOutEvent(e); titleEditor->checkNoteTitleChange(); } void NWebView::editAlert() { // If this is the first time the note is dirty, set the dirty // flag (this is checked elsewhere) and signal the change if (!isDirty) { isDirty = true; emit(noteChanged()); } emit (htmlEditAlert()); // This should already be set, but just in case... isDirty = true; } void NWebView::exposeToJavascript() { page()->mainFrame()->addToJavaScriptWindowObject("editorWindow", this); } void NWebView::decryptText(QString id, QString text, QString hint) { /* Suppress unused */ Q_UNUSED(id); Q_UNUSED(text); Q_UNUSED(hint); // EnCrypt crypt; // QString plainText; /* // // First, try to decrypt with any keys we already have for (int i=0; i passwordPair = new Pair(); // passwordPair.setFirst(dialog.getPassword()); // passwordPair.setSecond(dialog.getHint()); // Global.passwordSafe.put(slot, passwordPair); // removeEncryption(id, plainText, dialog.permanentlyDecrypt(), slot); // if (dialog.rememberPassword()) { // Pair pair = new Pair(); // pair.setFirst(dialog.getPassword()); // pair.setSecond(dialog.getHint()); // Global.passwordRemember.add(pair); // } */ } void NWebView::contextMenuEvent(QContextMenuEvent *event) { if (event != NULL) contextMenu->exec(event->globalPos()); downloadAttachmentAction()->setEnabled(false); rotateImageRightAction->setEnabled(false); rotateImageLeftAction->setEnabled(false); openAction->setEnabled(false); downloadImageAction()->setEnabled(false);} bool NWebView::event(QEvent *event) { if (event->type() == QEvent::KeyPress) { QKeyEvent *ke = (QKeyEvent*)event; if (ke->key() == Qt::Key_Tab) { parent->tabPressed(); ke->accept(); return true; } if (ke->key() == Qt::Key_Backtab) { parent->backtabPressed(); ke->accept(); return true; } if (ke->key() == Qt::Key_Enter || ke->key() == Qt::Key_Return) { bool retval = parent->enterPressed(); if (retval) { ke->accept(); return true; } } } if (event->type() == QEvent::MouseButtonDblClick) { QLOG_DEBUG() << "DOUBLE CLICK!!!"; } return QWebView::event(event); } void NWebView::keyPressEvent(QKeyEvent *e) { // This is done because if we set the content as editable, the scroll keys are // ignored by wbkit. if (e->key() == Qt::Key_PageUp || e->key() == Qt::Key_PageDown) { int bottom = this->page()->mainFrame()->geometry().bottom(); int top = this->page()->mainFrame()->geometry().top(); int scrollValue = top-bottom; if (e->key() == Qt::Key_PageDown) scrollValue = -1*scrollValue; page()->mainFrame()->scroll(0,scrollValue); } // Exit presentation mode if (e->key() == Qt::Key_Escape) { emit escapeKeyPressed(); // Return without going forward or the current selected text is removed return; } // Hard override of paste because I can't seem to get it any other way. // if (e->key() == Qt::Key_V && e->modifiers().testFlag(Qt::ControlModifier)) { QKeySequence ks(e->modifiers()|e->key()); if (ks.toString().toLower() == pasteSequence) { parent->pasteButtonPressed(); e->accept(); return; } if (ks.toString().toLower() == pasteUnformattedSequence) { parent->pasteWithoutFormatButtonPressed(); e->accept(); return; } if (ks.toString().toLower() == fileSaveSequence) { parent->saveNoteContent(); e->accept(); return; } QWebView::keyPressEvent(e); } void NWebView::downloadAttachment(QNetworkRequest *req) { QLOG_DEBUG() << req->url().toString(); emit(downloadAttachmentRequested(req)); } void NWebView::setBackgroundColor(QString color) { parent->setBackgroundColor(color); } void NWebView::printNodeName(QString s) { QLOG_DEBUG() << s; } void NWebView::setTitleEditor(NTitleEditor *editor) { titleEditor = editor; if (editor == NULL) return; connect(page(), SIGNAL(contentsChanged()), this, SLOT(setDefaultTitle())); } void NWebView::setDefaultTitle() { QString body = this->page()->mainFrame()->toPlainText(); titleEditor->setTitleFromContent(body); } void NWebView::setupShortcut(QAction *action, QString text) { if (!global.shortcutKeys->containsAction(&text)) return; QKeySequence key(global.shortcutKeys->getShortcut(&text)); action->setShortcut(key); } void NWebView::downloadRequested(QNetworkRequest req) { QString urlString = req.url().toString(); if (urlString == "") { downloadImageAction()->trigger(); return; } if (urlString.startsWith("nnres:")) { int pos = urlString.indexOf(global.attachmentNameDelimeter); QString extension = ""; if (pos != -1) { extension = urlString.mid(pos+global.attachmentNameDelimeter.length()); urlString = urlString.mid(0,pos); } urlString = urlString.mid(6); if (urlString.lastIndexOf("/") > 0) urlString = urlString.mid(urlString.lastIndexOf("/")+1); if (urlString.indexOf(".")>0) urlString = urlString.mid(0,urlString.indexOf(".")); qint32 lid = urlString.toInt(); ResourceTable resTable(global.db); Resource r; resTable.get(r, lid, true); QString filename; ResourceAttributes attributes; if (r.attributes.isSet()) attributes = r.attributes; if (attributes.fileName.isSet()) filename = attributes.fileName; else filename = urlString + QString(".") + extension; QFileDialog fd; fd.setFileMode(QFileDialog::AnyFile); fd.setWindowTitle(tr("Save File")); fd.setAcceptMode(QFileDialog::AcceptSave); fd.selectFile(filename); fd.setConfirmOverwrite(true); if (fd.exec()) { if (fd.selectedFiles().size() == 0) return; filename = fd.selectedFiles()[0]; QFile newFile(filename); newFile.open(QIODevice::WriteOnly); Data d; if (r.data.isSet()) d = r.data; QByteArray body; if (d.body.isSet()) body = d.body; int size = 0; if (d.size.isSet()) size = d.size; newFile.write(body, size); newFile.close(); return; } } if (urlString.startsWith("file:////")) { if (!req.url().isValid()) return; urlString = urlString.mid(8); QFileDialog fd; fd.setFileMode(QFileDialog::AnyFile); fd.setWindowTitle(tr("Save File")); fd.setAcceptMode(QFileDialog::AcceptSave); QString oldname = urlString; fd.selectFile(urlString.replace(global.fileManager.getDbaDirPath(), "")); fd.setConfirmOverwrite(true); if (fd.exec()) { if (fd.selectedFiles().size() == 0) return; QString newname = fd.selectedFiles()[0]; QFile::remove(urlString); QFile::copy(oldname, newname); return; } } } void NWebView::dropEvent(QDropEvent *e) { setFocus(); const QMimeData *mime = e->mimeData(); parent->handleUrls(mime); parent->contentChanged(); } nixnote2-2.0.2/gui/nwebview.h000066400000000000000000000072021315604104400160430ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NWEBVIEW_H #define NWEBVIEW_H #include #include #include #include #include #include #include #include "gui/nbrowserwindow.h" #include "gui/browserWidgets/ntitleeditor.h" class NBrowserWindow; //**************************************************** //* This inherits everything from QWebView. It is //* useful to allow us to setup things that are //* needed to view & edit notes. //**************************************************** class NWebView : public QWebView { Q_OBJECT private: QAction *setupColorMenuOption(QString color); void setupShortcut(QAction *action, QString text); QSignalMapper *backgroundColorMapper; public: explicit NWebView(NBrowserWindow *parent = 0); NBrowserWindow *parent; NTitleEditor *titleEditor; QString pasteSequence; QString pasteUnformattedSequence; QString fileSaveSequence; QMenu *contextMenu; QMenu *tableMenu; QMenu *imageMenu; QAction *cutAction; QAction *copyAction; QAction *pasteAction; QAction *removeFormattingAction; QAction *insertDateTimeAction; QAction *pasteWithoutFormatAction; QAction *todoAction; QAction *encryptAction; QAction *downloadAttachmentAction(); QAction *downloadImageAction(); QAction *rotateImageRightAction; QAction *rotateImageLeftAction; QAction *insertLinkAction; QAction *removeLinkAction; QAction *insertLatexAction; QAction *attachFileAction; QAction *insertTableAction; QAction *insertTableRowAction; QAction *tablePropertiesAction; QAction *insertTableColumnAction; QAction *deleteTableColumnAction; QAction *deleteTableRowAction; QAction *openAction; QAction *insertQuickLinkAction; QAction *insertHtmlEntitiesAction; QAction *copyNoteUrlAction; QShortcut *attachFileShortcut; bool isDirty; NWebPage *editorPage; bool event(QEvent *event); void keyPressEvent(QKeyEvent *); void downloadAttachment(QNetworkRequest *req); void focusLostNotify(QString text); signals: void noteChanged(); void downloadAttachmentRequested(QNetworkRequest*); void htmlEditAlert(); void escapeKeyPressed(); public slots: void editAlert(); void decryptText(QString id, QString text, QString hint); void contextMenuEvent(QContextMenuEvent *event); void setBackgroundColor(QString color); void printNodeName(QString s); void setTitleEditor(NTitleEditor *editor); void focusOutEvent(QFocusEvent *e); private slots: void exposeToJavascript(); void setDefaultTitle(); void downloadRequested(QNetworkRequest); void dropEvent(QDropEvent *e); }; #endif // NWEBVIEW_H nixnote2-2.0.2/gui/plugins/000077500000000000000000000000001315604104400155245ustar00rootroot00000000000000nixnote2-2.0.2/gui/plugins/pluginfactory.cpp000066400000000000000000000043721315604104400211240ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "gui/plugins/pluginfactory.h" #include "gui/plugins/popplerviewer.h" #include #include PluginFactory::PluginFactory(QObject *parent) : QWebPluginFactory(parent) { manager = new QNetworkAccessManager(this); } QList PluginFactory::plugins() const { QWebPluginFactory::MimeType mimeType; mimeType.name = "application/pdf"; mimeType.description = "PDF Viewer"; mimeType.fileExtensions = QStringList() << "pdf"; QWebPluginFactory::Plugin plugin; plugin.name = "PDF file viewer"; plugin.description = "A CSV file Web plugin."; plugin.mimeTypes = QList() << mimeType; return QList() << plugin; } QObject *PluginFactory::create(const QString &mimeType, const QUrl &url, const QStringList &argumentNames, const QStringList &argumentValues) const { Q_UNUSED(url); // suppress unused variable warning if (mimeType == "application/pdf") { PopplerViewer *view; view = new PopplerViewer(argumentValues[argumentNames.indexOf("type")], argumentValues[argumentNames.indexOf("lid")]); if (view->doc == NULL || view->doc->isLocked()) return 0; return (QObject*)view; } return 0; } nixnote2-2.0.2/gui/plugins/pluginfactory.h000066400000000000000000000033221315604104400205630ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef POPPLERFACTORY_H #define POPPLERFACTORY_H #include #include #if QT_VERSION < 0x050000 #include #else #include #endif #include "gui/plugins/popplerviewer.h" #include class QNetworkAccessManager; class QNetworkReply; class PluginFactory : public QWebPluginFactory { Q_OBJECT public: explicit PluginFactory(QObject *parent = 0); QObject *create(const QString &mimeType, const QUrl &url, const QStringList &argumentNames, const QStringList &argumentValues) const; QList plugins() const; private: QNetworkAccessManager *manager; QWebPage *editor; signals: public slots: }; #endif // POPPLERFACTORY_H nixnote2-2.0.2/gui/plugins/popplergraphicsview.cpp000066400000000000000000000026751315604104400223370ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "popplergraphicsview.h" #include "global.h" #include #include #include extern Global global; PopplerGraphicsView::PopplerGraphicsView(QWidget *parent) : QGraphicsView(parent) { } PopplerGraphicsView::PopplerGraphicsView(QGraphicsScene *&scene) : QGraphicsView(scene) { } void PopplerGraphicsView::mousePressEvent(QMouseEvent * e) { Q_UNUSED(e); // suppress unused variable warning QDesktopServices::openUrl(QUrl(filename)); QGraphicsView(parent); } nixnote2-2.0.2/gui/plugins/popplergraphicsview.h000066400000000000000000000025161315604104400217760ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef POPPLERGRAPHICSVIEW_H #define POPPLERGRAPHICSVIEW_H #include class PopplerGraphicsView : public QGraphicsView { Q_OBJECT public: explicit PopplerGraphicsView(QWidget *parent = 0); explicit PopplerGraphicsView(QGraphicsScene *&scene); QString filename; signals: public slots: void mousePressEvent(QMouseEvent * e); }; #endif // POPPLERGRAPHICSVIEW_H nixnote2-2.0.2/gui/plugins/popplerviewer.cpp000066400000000000000000000164761315604104400211510ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "popplerviewer.h" #include #include #include #if QT_VERSION < 0x050000 #include #else #include #endif #include #include #include #include "filters/filterengine.h" #include extern Global global; PopplerViewer::PopplerViewer(const QString &mimeType, const QString &reslid, QWidget *parent) : QWidget(parent) { pageLabel = new QLabel(this); this->mimeType = mimeType; this->lid = reslid.toInt(); printImageFile = global.fileManager.getTmpDirPath() + QString::number(lid) +QString("-print.png"); QString file = global.fileManager.getDbaDirPath() + reslid +".pdf"; doc = Poppler::Document::load(file); if (doc == NULL || doc->isLocked()) return; currentPage = 0; totalPages = doc->numPages(); FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; searchHits.empty(); QList searchLocations; if (criteria->isSearchStringSet() && criteria->getSearchString() != "") { FilterEngine engine; if (engine.resourceContains(lid, criteria->getSearchString(), &searchHits)) { pageLabel->setStyleSheet("QLabel { background-color : yellow; }"); findNextPage(searchHits, &searchLocations); } } image = new QImage(doc->page(currentPage)->renderToImage()); QPixmap finalPix = highlightImage(); scene = new QGraphicsScene(); view = new PopplerGraphicsView(scene); view->filename = file; item = new QGraphicsPixmapItem(finalPix); finalPix.save(printImageFile); // This is in case we want to print a note. Otherwise it isn't used. scene->addItem(item); view->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); QHBoxLayout *buttonLayout = new QHBoxLayout(); pageLabel->setText(tr("Page ") +QString::number(currentPage+1) + QString(tr(" of ") +QString::number(totalPages))); pageLeft = new QPushButton(); pageRight = new QPushButton(); pageRight->setMaximumWidth(30); pageLeft->setMaximumWidth(30); pageLeft->setIcon(global.getIconResource(":leftArrowIcon")); pageRight->setIcon(global.getIconResource(":rightArrowIcon")); buttonLayout->addStretch(100); buttonLayout->addWidget(pageLeft); buttonLayout->addWidget(pageLabel); buttonLayout->addWidget(pageRight); buttonLayout->addStretch(100); QVBoxLayout *layout = new QVBoxLayout(this); layout->addLayout(buttonLayout); layout->addWidget(view); this->setLayout(layout); connect(pageRight, SIGNAL(clicked()), this, SLOT(pageRightPressed())); connect(pageLeft, SIGNAL(clicked()), this, SLOT(pageLeftPressed())); if (totalPages == 1) { pageRight->setEnabled(false); } if (currentPage == 1) pageLeft->setEnabled(false); } void PopplerViewer::pageRightPressed() { if (currentPage+1 < totalPages) { currentPage++; if (image != NULL) delete image; image = new QImage(doc->page(currentPage)->renderToImage()); image->save(printImageFile); if (item != NULL) delete item; QPixmap finalPix = highlightImage(); item = new QGraphicsPixmapItem(finalPix); scene->addItem(item); if (currentPage+1 == totalPages) pageRight->setEnabled(false); if (currentPage>0) pageLeft->setEnabled(true); pageLabel->setText(tr("Page ") +QString::number(currentPage+1) + QString(tr(" of ") +QString::number(totalPages))); } } void PopplerViewer::pageLeftPressed() { if (currentPage>0) { currentPage--; if (image != NULL) delete image; image = new QImage(doc->page(currentPage)->renderToImage()); if (item != NULL) delete item; QPixmap finalPix = highlightImage(); item = new QGraphicsPixmapItem(finalPix); scene->addItem(item); if (currentPage==0) pageLeft->setEnabled(false); if (totalPages>1) pageRight->setEnabled(true); } } // Search for the next page containing text void PopplerViewer::findNextPage(QStringList searchHits, QList *searchLocations) { int page = currentPage; bool found = false; searchLocations->clear(); while (page < doc->numPages() && !found) { for (int i=0; i results = doc->page(page)->search(searchHits[i], Poppler::Page::CaseInsensitive); //#else QList results = doc->page(page)->search(searchHits[i], Poppler::Page::IgnoreCase); //#endif searchLocations->append(results); if (results.size() > 0) { currentPage = page; return; } } page++; } } QPixmap PopplerViewer::highlightImage() { // Highlight any search terms QPixmap overlayPix(image->size()); overlayPix.fill(Qt::transparent); QPainter p2(&overlayPix); p2.setBackgroundMode(Qt::TransparentMode); p2.setRenderHint(QPainter::Antialiasing,true); QColor yellow(Qt::yellow); p2.setBrush(yellow); QList searchLocations; for (int i=0; ipage(currentPage)->search(searchHits[i], Poppler::Page::CaseInsensitive)); //#if QT_VERSION < 0x050000 // searchLocations.append(doc->page(currentPage)->search(searchHits[i], Poppler::Page::CaseInsensitive)); //#else searchLocations.append(doc->page(currentPage)->search(searchHits[i],Poppler::Page::IgnoreCase)); //#endif } for (int i=0; i 0) pageLabel->setStyleSheet("QLabel { background-color : yellow; }"); else pageLabel->setStyleSheet(""); // Create the actual overlay. We do this in two steps to avoid // constantly painting the same area QPixmap finalPix(image->size()); finalPix.fill(Qt::transparent); QPainter p3(&finalPix); p3.setBackgroundMode(Qt::TransparentMode); p3.setRenderHint(QPainter::Antialiasing,true); p3.drawPixmap(0,0,QPixmap::fromImage(*image)); p3.setOpacity(0.4); p3.drawPixmap(0,0,overlayPix); p3.end(); return finalPix; } nixnote2-2.0.2/gui/plugins/popplerviewer.h000066400000000000000000000040101315604104400205730ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef POPPLERVIEWER_H #define POPPLERVIEWER_H #include #include #include #include #include #include #include #include #if QT_VERSION < 0x050000 #include #else #include #endif #include "gui/plugins/popplergraphicsview.h" class PopplerViewer : public QWidget { Q_OBJECT public: PopplerViewer(const QString &mimeType, const QString &lid, QWidget *parent = 0); private: QGraphicsScene *scene; PopplerGraphicsView *view; QGraphicsPixmapItem *item; QImage *image; QString mimeType; QLabel *pageLabel; QLabel *imageLabel; int currentPage; int totalPages; QPushButton *pageLeft; QPushButton *pageRight; qint32 lid; QString printImageFile; QStringList searchHits; void findNextPage(QStringList searchHits, QList *searchLocations); QPixmap highlightImage(); public: Poppler::Document *doc; public slots: void pageRightPressed(); void pageLeftPressed(); }; #endif // POPPLERVIEWER_H nixnote2-2.0.2/gui/reminderorderdelegate.cpp000066400000000000000000000033171315604104400211070ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "reminderorderdelegate.h" #include "global.h" extern Global global; ReminderOrderDelegate::ReminderOrderDelegate() { } void ReminderOrderDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QString value = index.data().toString(); QModelIndex ix; // Dummy model index so we don't put the actual value in the column QStyledItemDelegate::paint(painter,option, ix); if(value != "0") { painter->save(); QPixmap dot = global.getPixmapResource(":blackDotIcon"); int centerDot = dot.width()/2; int len = (option.rect.right() - option.rect.left())/2; len = len-centerDot; painter->drawPixmap(option.rect.x()+len,option.rect.y()+2,dot); painter->restore(); } } nixnote2-2.0.2/gui/reminderorderdelegate.h000066400000000000000000000025541315604104400205560ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include #include #include #include #ifndef REMINDERORDERDELEGATE_H #define REMINDERORDERDELEGATE_H #include class ReminderOrderDelegate : public QStyledItemDelegate { public: ReminderOrderDelegate(); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; }; #endif // REMINDERORDERDELEGATE_H nixnote2-2.0.2/gui/shortcutkeys.cpp000066400000000000000000000342311315604104400173210ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "shortcutkeys.h" #include "global.h" #include extern Global global; ShortcutKeys::ShortcutKeys(QObject *parent) : QObject(parent) { File_Note_Add = new QString("Ctrl+N"); // Add a new note File_Note_Reindex = new QString(); // Reindex the current note File_Note_Modify_Tags = new QString(); // Change current note tags File_Note_Delete = new QString("Ctrl+Shift+D"); // Delete a note File_Note_Reindex = new QString(""); // Reindex the current note File_Note_Restore = new QString(); // Undelete a note File_Note_Duplicate = new QString(); // Duplicate a note File_Notebook_Add = new QString(); // Add a notebook File_Notebook_Edit = new QString(); // Edit an existing notebook File_Notebook_Delete = new QString(); // Delete the existing notebook File_Notebook_Open = new QString(); // Open a closed (i.e. archived) notebook File_Notebook_Close = new QString(); // Close (i.e. archive) a notebook File_Tag_Add = new QString("Ctrl+Shift+T"); // Add a notebook File_Tag_Edit = new QString(); // Edit an existing notebook File_Tag_Delete = new QString(); // Delete the existing notebook File_SavedSearch_Add = new QString(); // Add a notebook File_Save_Content = new QString("Ctrl+S"); // Do a force save of the note's content File_SavedSearch_Edit = new QString(); // Edit an existing notebook File_SavedSearch_Delete = new QString(); // Delete the existing notebook File_Email = new QString("Ctrl+Shift+E"); // Email note File_Print = new QString("Ctrl+P"); // Print File_Backup = new QString(); // Backup File_Restore = new QString(); // Restore File_Empty_Trash = new QString(); // Purge all delete notes File_Exit = new QString("Ctrl+Q"); // I'm outahere Edit_Find_In_Note = new QString("Ctrl+F"); // Search only within the current note Edit_Undo = new QString("Ctrl+Z"); // Undo last change Edit_Redo = new QString("Ctrl+Y"); // Redo the last undone change Edit_Cut = new QString("Ctrl+X"); // Cut current selection to the clipboard Edit_Copy = new QString("Ctrl+C"); // Copy the current selection to the clipboard Edit_Paste = new QString("Ctrl+V"); // Paste Edit_Paste_Without_Formatting = new QString("Ctrl+Shift+P"); // Paste as plain text Edit_Remove_Format = new QString(); // Remove formatting Edit_Preferences = new QString(); // Settings dialog box Edit_Select_All = new QString("Ctrl+A"); Edit_Insert_Hyperlink = new QString("Ctrl+K"); // Insert a hyperlink Edit_Insert_Table = new QString(); // Insert a table Edit_Insert_Table_Row = new QString(); // Insert a table row Edit_Delete_Table_Row = new QString(); // Delete a table row Edit_Table_Properties = new QString(); // Show table properties Edit_Insert_Todo = new QString(); Edit_Encrypt_Text = new QString(); Edit_Rotate_Image_Right = new QString(); Edit_Rotate_Image_Left = new QString(); Edit_Search_Notes = new QString("F6"); Edit_Search_Find = new QString("Ctrl+F"); Edit_Search_Find_Next = new QString("Ctrl+G"); Edit_Search_Find_Prev = new QString("Ctrl+Shift+G"); Edit_Search_Find_Replace = new QString("Ctrl+H"); Edit_Reset_Search = new QString("Ctrl+Shift+A"); View_Extended_Information = new QString("F8"); // View details on the current note View_Show_Left_Side = new QString("F10"); // Show/hide the left side panel View_Show_Note_List = new QString("F11"); // Show/hide the list of notes View_Show_Note_Panel = new QString("Ctrl+F11"); // Show/hide the note browser View_Source = new QString(); Format_Bold = new QString("Ctrl+B"); // Bold (duh) Format_Underline = new QString("Ctrl+U"); // Underline Format_Italic = new QString("Ctrl+I"); // Italic Format_Strikethrough = new QString("Ctrl+-"); // Strikethrough Format_Horizontal_Line = new QString(); // Href line Format_Superscript = new QString("Ctrl+="); // Set superscript Format_Subscript = new QString("Ctrl+Shift+="); // Subscript Format_Alignment_Left = new QString("Ctrl+L"); // Left align text Format_Alignment_Center = new QString("Ctrl+E"); // Center text Format_Alignment_Right = new QString("Ctrl+R"); // Right align text Format_List_Bullet = new QString("Ctrl+Shift+B"); // Bullet list Format_List_Numbered = new QString("Ctrl+Shift+N"); // Numbered list Format_Indent_Increase = new QString("Ctrl+M"); // Increase the indentation Format_Indent_Decrease = new QString("Ctrl+Shift+M"); // Decrease the indent Online_Note_History = new QString(); Online_Synchronize = new QString("F9"); // Synchronize with Evernote Online_Connect = new QString(); // Connect to Evernote Tools_Account_Information = new QString(); // Show account information Tools_Database_Status = new QString(); // Show database status Tools_Database_Reindex = new QString(); // Reindex all notes & resources; Tools_Import_Folders = new QString(); // Show database status About_Release_Notes = new QString(); // Current version's release notes About_Log = new QString(); // Message log About_About = new QString(); // About dialog box Insert_DateTime = new QString("Ctrl+;"); Focus_Title = new QString("Ctrl+Space"); Focus_Tag = new QString(); Focus_Note = new QString("Ctrl+E"); Focus_Author = new QString(); Focus_Url = new QString(); Focus_Notebook = new QString(); Focus_Font = new QString(); Focus_Font_Size = new QString(); Prev_Tab = new QString("Ctrl+PgUp"); Next_Tab = new QString("Ctrl+PgDown"); Close_Tab = new QString("Ctrl+W"); Up_Note = new QString(); Down_Note = new QString(); // Setup value Array shortcutMap = new QHash(); actionMap = new QHash(); // Load the defaults loadkey(QString("File_Note_Add"), File_Note_Add); loadkey(QString("File_Tag_Add"), File_Tag_Add); loadkey(QString("File_Email"), File_Email); loadkey(QString("File_Print"), File_Print); loadkey(QString("File_Backup"), File_Backup); loadkey(QString("File_Restore"), File_Restore); loadkey(QString("File_Exit"), File_Exit); loadkey(QString("File_Save_Content"), File_Save_Content); loadkey(QString("File_Note_Delete"), File_Note_Delete); loadkey(QString("File_Note_Reindex"), File_Note_Reindex); loadkey(QString("Edit_Find_In_Note"), Edit_Find_In_Note); loadkey(QString("Edit_Undo"), Edit_Undo); loadkey(QString("Edit_Redo"), Edit_Redo); loadkey(QString("Edit_Cut"), Edit_Cut); loadkey(QString("Edit_Copy"), Edit_Copy); loadkey(QString("Edit_Paste"), Edit_Paste); loadkey(QString("Edit_Paste_Without_Formatting"), Edit_Paste_Without_Formatting); loadkey(QString("Edit_Remove_Formatting"), Edit_Remove_Format); loadkey(QString("Edit_Insert_Hyperlink"), Edit_Insert_Hyperlink); loadkey(QString("Edit_Insert_Table_Row"), Edit_Insert_Table_Row); loadkey(QString("Edit_Delete_Table_Row"), Edit_Delete_Table_Row); loadkey(QString("Edit_Table_Properties"), Edit_Table_Properties); loadkey(QString("Edit_Insert_Todo"), Edit_Insert_Todo); loadkey(QString("Edit_Rotate_Image_Right"), Edit_Rotate_Image_Right); loadkey(QString("Edit_Rotate_Image_Left"), Edit_Rotate_Image_Left); loadkey(QString("Edit_Select_All"), Edit_Select_All); loadkey(QString("Edit_Search_Notes"), Edit_Search_Notes); loadkey(QString("Edit_Search_Find"), Edit_Search_Find); loadkey(QString("Edit_Search_Find_Next"), Edit_Search_Find_Next); loadkey(QString("Edit_Search_Find_Prev"), Edit_Search_Find_Prev); loadkey(QString("Edit_Search_Find_Replace"), Edit_Search_Find_Replace); loadkey(QString("Edit_Reset_Search"), Edit_Reset_Search); loadkey(QString("Edit_Preferences"), Edit_Preferences); loadkey(QString("View_Extended_Information"), View_Extended_Information); loadkey(QString("View_Source"), View_Source); loadkey(QString("View_Show_Left_Side"), View_Show_Left_Side); loadkey(QString("View_Show_Note_List"), View_Show_Note_List); loadkey(QString("View_Show_Note_Panel"), View_Show_Note_Panel); loadkey(QString("Format_Bold"), Format_Bold); loadkey(QString("Format_Underline"), Format_Underline); loadkey(QString("Format_Italic"), Format_Italic); loadkey(QString("Format_Strikethrough"), Format_Strikethrough); loadkey(QString("Format_Superscript"), Format_Superscript); loadkey(QString("Format_Subscript"), Format_Subscript); loadkey(QString("Format_Alignment_Left"), Format_Alignment_Left); loadkey(QString("Format_Alignment_Center"), Format_Alignment_Center); loadkey(QString("Format_Alignment_Right"), Format_Alignment_Right); loadkey(QString("Format_List_Bullet"), Format_List_Bullet); loadkey(QString("Format_List_Numbered"), Format_List_Numbered); loadkey(QString("Format_Indent_Increase"), Format_Indent_Increase); loadkey(QString("Format_Indent_Decrease"), Format_Indent_Decrease); loadkey(QString("Tools_Synchronize"), Online_Synchronize); loadkey(QString("Tools_Database_Status"), Tools_Database_Status); loadkey(QString("Tools_Database_Reindex"), Tools_Database_Reindex); loadkey(QString("Tools_Import_Folders"), Tools_Import_Folders); loadkey(QString("Focus_Title"), Focus_Title); loadkey(QString("Focus_Tag"), Focus_Tag); loadkey(QString("Focus_Note"), Focus_Note); loadkey(QString("Focus_Author"), Focus_Author); loadkey(QString("Focus_Notebook"), Focus_Notebook); loadkey(QString("Focus_Url"), Focus_Url); loadkey(QString("Insert_DateTime"), Insert_DateTime); QString userFileName = global.fileManager.getHomeDirPath("") + QString("shortcuts.txt"); QString systemFileName = global.fileManager.getProgramDirPath("") + QString("shortcuts.txt"); #ifdef _WIN32 userFileName = userFileName.replace("\\","/"); systemFileName = systemFileName.replace("\\","/"); #endif // QLOG_DEBUG() << "Loading system shortcuts from " << systemFileName; loadCustomKeys(systemFileName); // QLOG_DEBUG() << "Loadng user shortcuts from " << userFileName; loadCustomKeys(userFileName); } // Read in the custom keys (if they exist) void ShortcutKeys::loadCustomKeys(QString fileName) { QFile file(fileName); file.open(QFile::ReadOnly); if (file.isOpen()) { while (!file.atEnd()) { QString line = file.readLine(); line = line.replace("\t", " "); line = line.replace("\n", " "); line = line.replace("\r", " " ); line = line.trimmed(); QStringList list = line.split(" "); QStringList keyvalue; for(int i=0;i= 2) loadkey(keyvalue[0], &keyvalue[1]); } file.close(); } else { QLOG_DEBUG() << "Unable to open file for reading or file does not exist."; } } // Load a key value into the map for later use void ShortcutKeys::loadkey(QString action, QString *shortcut) { action = action.toLower().trimmed(); QString sc = shortcut->toLower().trimmed(); // If we have an existing one, remove it. if (actionMap->contains(action)) removeByAction(action); if (shortcutMap->contains(sc.toLower().trimmed())) removeByShortcut(sc.toLower().trimmed()); if (sc == "") { removeByShortcut(sc); return; } //Add the new value actionMap->insert(action.toLower(), sc); shortcutMap->insert(sc.toLower(), action); } // Remove a shortcut by the Shortcut key void ShortcutKeys::removeByShortcut(QString shortcut) { QString action = shortcutMap->key(shortcut.toLower(), ""); shortcutMap->remove(shortcut.toLower()); if (action != "") actionMap->remove(action.toLower()); } // Remove a shortcut by the action itself void ShortcutKeys::removeByAction(QString action) { QString shortcut = actionMap->key(action.toLower(),""); actionMap->remove(action.toLower()); if (shortcut != "") shortcutMap->remove(shortcut.toLower()); } // Check if a shortcut key exists bool ShortcutKeys::containsShortcut(QString *shortcut) { QString sk(shortcut->toLower()); QString key = shortcutMap->value(sk, ""); if (key.trimmed() == "") return false; else return true; } // Check if an action exists bool ShortcutKeys::containsAction(QString *action) { QString key = actionMap->value(action->toLower(), ""); if (key.trimmed() == "") return false; else return true; } // Get a key based upon the action QString ShortcutKeys::getShortcut(QString *action) { if (!actionMap->contains(action->toLower())) return ""; QString retval(actionMap->value(action->toLower())); return retval; } // Get an action based upon the key QString ShortcutKeys::getAction(QString *shortcut) { if (!shortcutMap->contains(shortcut->toLower())) return ""; return shortcutMap->value(shortcut->toLower()); } nixnote2-2.0.2/gui/shortcutkeys.h000066400000000000000000000155141315604104400167710ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef SHORTCUTKEYS_H #define SHORTCUTKEYS_H #include #include #include using namespace std; class ShortcutKeys : public QObject { Q_OBJECT private: void loadCustomKeys(QString fileName); public: explicit ShortcutKeys(QObject *parent = 0); QString *File_Note_Add; // Add a new note QString *File_Note_Reindex; // Reindex the current note QString *File_Note_Modify_Tags; // Change current note tags QString *File_Note_Delete; // Delete a tag QString *File_Note_Restore; // Undelete a note QString *File_Note_Duplicate; // duplicate a note QString *File_Notebook_Add; // Add a notebook QString *File_Notebook_Edit; // Edit an existing notebook QString *File_Notebook_Delete; // Delete the existing notebook QString *File_Notebook_Open; // Open a closed (i.e. archived) notebook QString *File_Notebook_Close; // Close (i.e. archive) a notebook QString *File_Tag_Add; // Add a notebook QString *File_Tag_Edit; // Edit an existing notebook QString *File_Tag_Delete; // Delete the existing notebook QString *File_Save_Content; // Do a force save of all notes QString *File_SavedSearch_Add; // Add a notebook QString *File_SavedSearch_Edit; // Edit an existing notebook QString *File_SavedSearch_Delete; // Delete the existing notebook QString *File_Email; // Email note QString *File_Print; // Print QString *File_Backup; // Backup the database QString *File_Restore; // Restore the database QString *File_Empty_Trash; // Purge all delete notes QString *File_Exit; // I'm outahere QString *Edit_Find_In_Note; // Search only within the current note QString *Edit_Undo; // Undo last change QString *Edit_Redo; // Redo the last undone change QString *Edit_Cut; // Cut current selection to the clipboard QString *Edit_Copy; // Copy the current selection to the clipboard QString *Edit_Paste; // Paste QString *Edit_Remove_Format; // Remove formatting QString *Edit_Paste_Without_Formatting; // Paste as plain text QString *Edit_Preferences; // Settings dialog box QString *Edit_Insert_Hyperlink; // Encrypt selected text QString *Edit_Insert_Table; // Insert table into note QString *Edit_Insert_Table_Row; // Insert row into table QString *Edit_Table_Properties; // Show table properties QString *Edit_Delete_Table_Row; // Delete a table row QString *Edit_Insert_Todo; // Insert todo QString *Edit_Encrypt_Text; // Encrypt selected text QString *Edit_Rotate_Image_Right; // Rotate an image right QString *Edit_Rotate_Image_Left; // Rotate an image left QString *Edit_Select_All; QString *Edit_Search_Notes; QString *Edit_Reset_Search; QString *Edit_Search_Find; QString *Edit_Search_Find_Next; QString *Edit_Search_Find_Prev; QString *Edit_Search_Find_Replace; QString *View_Extended_Information; // View details on the current note QString *View_Show_Left_Side; // Show/hide the left hand panel QString *View_Show_Note_List; QString *View_Show_Note_Panel; QString *View_Source; QString *Format_Bold; // Bold (duh) QString *Format_Underline; // Underline QString *Format_Italic; // Italic QString *Format_Strikethrough; // Strikethrough QString *Format_Horizontal_Line; // Href line QString *Format_Superscript; // Set superscript QString *Format_Subscript; // Subscript QString *Format_Alignment_Left; // Left align text QString *Format_Alignment_Center; // Center text QString *Format_Alignment_Right; // Right align text QString *Format_List_Bullet; // Bullet list QString *Format_List_Numbered; // Numbered list QString *Format_Indent_Increase; // Increase the indentation QString *Format_Indent_Decrease; // Decrease the indent QString *Online_Note_History; // Synchronize with Evernote QString *Online_Synchronize; // Synchronize with Evernote QString *Online_Connect; // Connect to Evernote QString *Tools_Account_Information; // Show account information QString *Tools_Database_Status; // Current database information QString *Tools_Database_Reindex; // Reindex all notes & resources QString *Tools_Import_Folders; // setup import folders QString *About_Release_Notes; // Current version's release notes QString *About_Log; // Message log QString *About_About; // About dialog box QString *Focus_Title; // Switch focus to the title bar QString *Focus_Tag; // Switch focus to the tag edit QString *Focus_Note; // Switch focus to the note QString *Focus_Author; // Switch focus to the author QString *Focus_Url; // Switch focus to the URL QString *Focus_Notebook; // Switch focus to the notebook button QString *Focus_Font; // Switch focus to the font name drop down QString *Focus_Font_Size; // Switch focus to the font size drop down QString *Prev_Tab; // Previous Tab Shortcut QString *Next_Tab; // Next Tab Shortcut QString *Close_Tab; // Close the current tab QString *Down_Note; // Move down one note in the list QString *Up_Note; // Move up one note in the list QString *Insert_DateTime; // Insert the current date/time QHash *actionMap; QHash *shortcutMap; void loadkey(QString action, QString *shortcut); void removeByShortcut(QString shortcut); void removeByAction(QString action); bool containsShortcut(QString *shortcut); bool containsAction(QString *action); QString getShortcut(QString *action); QString getAction(QString *shortcut); signals: public slots: }; #endif // SHORTCUTKEYS_H nixnote2-2.0.2/gui/traymenu.cpp000066400000000000000000000060231315604104400164140ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "traymenu.h" #include "sql/notetable.h" #include "sql/favoritestable.h" #include "global.h" extern Global global; TrayMenu::TrayMenu(QWidget *parent) : QMenu(parent) { signalMapper = new QSignalMapper(); connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(noteChosen(int))); connect(this, SIGNAL(aboutToShow()), this, SLOT(buildActionMenu())); } void TrayMenu::setActionMenu(ActionMenuType type, QMenu *menu) { if (type == PinnedMenu) pinnedMenu = menu; if (type == RecentMenu) recentlyUpdatedMenu = menu; if (type == FavoriteNotesMenu) favoriteNotesMenu = menu; } void TrayMenu::buildActionMenu() { for (int i=actions.size()-1; i>=0; i--) { signalMapper->removeMappings(actions[i]); pinnedMenu->removeAction(actions[i]); recentlyUpdatedMenu->removeAction(actions[i]); } actions.clear(); QList< QPair< qint32, QString> > records; NoteTable noteTable(global.db); noteTable.getAllPinned(records); buildMenu(pinnedMenu, records); records.clear();; noteTable.getRecentlyUpdated(records); buildMenu(recentlyUpdatedMenu, records); records.clear(); FavoritesTable ftable(global.db); QList lids; ftable.getAll(lids); for (int i=0; i pair; pair.first = record.target.toInt(); pair.second = record.displayName; records.append(pair); } } favoriteNotesMenu->clear(); buildMenu(favoriteNotesMenu, records); } void TrayMenu::buildMenu(QMenu *actionMenu, QList< QPair > records) { for (int i=0; iaddAction(records[i].second); signalMapper->setMapping(newAction, records[i].first); connect(newAction, SIGNAL(triggered()), signalMapper, SLOT(map())); actions.append(newAction); } } void TrayMenu::noteChosen(int note) { emit (openNote(note)); } nixnote2-2.0.2/gui/traymenu.h000066400000000000000000000031671315604104400160670ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef TRAYMENU_H #define TRAYMENU_H #include #include class TrayMenu : public QMenu { Q_OBJECT private: QList actions; QMenu *pinnedMenu; QMenu *favoriteNotesMenu; QMenu *recentlyUpdatedMenu; QSignalMapper *signalMapper; void buildMenu(QMenu *actionMenu, QList > records); public: enum ActionMenuType { PinnedMenu, RecentMenu, FavoriteNotesMenu }; explicit TrayMenu(QWidget *parent = 0); void setActionMenu(ActionMenuType type, QMenu *menu); signals: void openNote(qint32); public slots: void buildActionMenu(); void noteChosen(int note); }; #endif // TRAYMENU_H nixnote2-2.0.2/gui/treewidgeteditor.cpp000066400000000000000000000040311315604104400201170ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "treewidgeteditor.h" #include #include #include #include "global.h" extern Global global; TreeWidgetEditor::TreeWidgetEditor(QTreeWidget *parent) : QLineEdit(parent) { this->parent = parent; this->setFont(global.getGuiFont(font())); lid = 0; stackName = ""; connect(this, SIGNAL(returnPressed()), SLOT(textChanged())); } void TreeWidgetEditor::setTreeWidgetItem(QTreeWidgetItem *w, int col) { this->originalWidgetItem = w; this->column = col; this->originalWidget = parent->itemWidget(w, col); } void TreeWidgetEditor::focusOutEvent(QFocusEvent *e) { // suppress unused Q_UNUSED(e); originalWidgetItem->setData(0, Qt::DisplayRole, text().trimmed()); parent->setItemWidget(originalWidgetItem, column, originalWidget); emit(editComplete()); } // When a user presses "Enter", force a focus out to save the data void TreeWidgetEditor::textChanged() { // originalWidgetItem->setData(0, Qt::DisplayRole, text().trimmed()); // parent->setItemWidget(originalWidgetItem, column, originalWidget); emit(editComplete()); } nixnote2-2.0.2/gui/treewidgeteditor.h000066400000000000000000000030261315604104400175670ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef TREEWIDGETEDITOR_H #define TREEWIDGETEDITOR_H #include #include class TreeWidgetEditor : public QLineEdit { Q_OBJECT private: QTreeWidget *parent; QTreeWidgetItem *originalWidgetItem; QWidget *originalWidget; int column; public: explicit TreeWidgetEditor(QTreeWidget *parent = 0); void setTreeWidgetItem(QTreeWidgetItem *w, int col); qint32 lid; QString stackName; signals: void editComplete(); public slots: void textChanged(); protected: virtual void focusOutEvent(QFocusEvent *e); }; #endif // TREEWIDGETEDITOR_H nixnote2-2.0.2/gui/truefalsedelegate.cpp000066400000000000000000000034631315604104400202420ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "truefalsedelegate.h" #include "global.h" #include "sql/notetable.h" extern Global global; TrueFalseDelegate::TrueFalseDelegate() { } QString TrueFalseDelegate::displayText(const QVariant &value, const QLocale &locale) const { Q_UNUSED(locale); // suppress unused variable Q_UNUSED(value); return ""; } void TrueFalseDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { bool value = index.data().toBool(); QStyledItemDelegate::paint(painter,option, index); if(value) { painter->save(); QPixmap dot = global.getPixmapResource(":blackDotIcon"); int centerDot = dot.width()/2; int len = (option.rect.right() - option.rect.left())/2; len = len-centerDot; painter->drawPixmap(option.rect.x()+len,option.rect.y()+2,dot); painter->restore(); } } nixnote2-2.0.2/gui/truefalsedelegate.h000066400000000000000000000026161315604104400177060ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef TRUEFALSEDELEGATE_H #define TRUEFALSEDELEGATE_H #include #include #include #include class TrueFalseDelegate : public QStyledItemDelegate { public: TrueFalseDelegate(); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QString displayText(const QVariant &value, const QLocale &locale) const; }; #endif // TRUEFALSEDELEGATE_H nixnote2-2.0.2/gui/widgetpanel.cpp000066400000000000000000000120211315604104400170460ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "widgetpanel.h" #include #include #include #include #include #include #include "global.h" extern Global global; WidgetPanel::WidgetPanel(QWidget *parent) : QWidget(parent) { vboxLayout = new QVBoxLayout(); this->setLayout(vboxLayout); vboxLayout->setSpacing(10); vboxLayout->setSizeConstraint(QLayout::SetNoConstraint); this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); this->setStyleSheet("QTreeView {background:transparent; border:none; margin:0px; padding: 0px;} "); this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); connect(&timer, SIGNAL(timeout()), this, SLOT(scrollTimer())); } WidgetPanel::~WidgetPanel() { delete vboxLayout; } void WidgetPanel::addWidget(QWidget *widget) { widget->setParent(this); vboxLayout->addWidget(widget); } void WidgetPanel::paintEvent(QPaintEvent *e) { //Suppress unused Q_UNUSED(e); return; QStyleOption opt; opt.init(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); } QSize WidgetPanel::sizeHint() { return minimumSizeHint(); } void WidgetPanel::addFavoritesView(FavoritesView *view) { view->setObjectName("Favorites"); this->favoritesView = view; addWidget(view); } void WidgetPanel::addNotebookView(NNotebookView *view) { view->setObjectName("Notebooks"); notebookView = view; addWidget(view); } void WidgetPanel::addTagView(NTagView *view) { view->setObjectName("Tags"); tagView = view; addWidget(view); } void WidgetPanel::addSearchView(NSearchView *view) { view->setObjectName("SavedSearches"); searchView = view; addWidget(view); } void WidgetPanel::addTrashTree(NTrashTree *view) { view->setObjectName("Trash"); trashTree = view; addWidget(view); } void WidgetPanel::addAttributeTree(NAttributeTree *view) { view->setObjectName("Attributes"); attributeTree = view; addWidget(view); } void WidgetPanel::addSeparator(QLabel *separator) { addWidget(separator); } void WidgetPanel::scrollTimer() { QScrollArea *scrollArea = (QScrollArea*)this->parentWidget(); if (scrollUp) { int visibleY = this->visibleRegion().boundingRect().y(); if (visibleY == 0) { timer.stop(); return; } scrollArea->scroll(0,1); } else { bool bottomVisible = this->visibleRegion().contains(tagView->geometry().bottomLeft()); if (!bottomVisible) scrollArea->scroll(0,-1); else timer.stop(); } } void WidgetPanel::dragEnterHandler(QDragEnterEvent *event) { Q_UNUSED(event); priorMousePosition = QCursor::pos(); } void WidgetPanel::dragMoveHandler(QDragMoveEvent *event) { //QPoint pos = event->source()->mapToGlobal(event->pos()); QWidget *source = qobject_cast(event->source()); QPoint pos = QCursor::pos(); pos = this->mapFromGlobal(pos); int mouse = QCursor::pos().y(); // Check if we are close to the top. If so, then start scrolling up. if (pos.y()visibleRegion().boundingRect().y(); int top = this->mapFromGlobal(this->geometry().topLeft()).y() *-1; if (!scrollUp) timer.stop(); if (mouse-top < 50 && visibleY > 0) { scrollUp = true; timer.start(5); } } // Check if we are close to the bottom. If so, start scrolling down if (pos.y()>priorMousePosition.y()) { timer.stop(); scrollUp=false; if (source->objectName()=="Tags") { int bottom = source->mapToGlobal(source->visibleRegion().boundingRect().bottomLeft()).y(); int actualBottom = source->mapToGlobal(source->geometry().bottomLeft()).y(); bool bottomVisible = this->visibleRegion().contains(source->geometry().bottomLeft()); if (bottom-mouse < 50 && bottom < actualBottom && !bottomVisible) { timer.start(5); } } } priorMousePosition = pos; } nixnote2-2.0.2/gui/widgetpanel.h000066400000000000000000000044431315604104400165240ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef WIDGETPANEL_H #define WIDGETPANEL_H #include #include #include #include #include #include "gui/favoritesview.h" #include "gui/nnotebookview.h" #include "gui/ntagview.h" #include "gui/nsearchview.h" #include "gui/nattributetree.h" #include "gui/ntrashtree.h" class WidgetPanel : public QWidget { Q_OBJECT private: void addWidget(QWidget *widget); FavoritesView *favoritesView; NTagView *tagView; NSearchView *searchView; NNotebookView *notebookView; NTrashTree *trashTree; NAttributeTree *attributeTree; QPoint priorMousePosition; QTimer timer; bool scrollUp; public: QVBoxLayout *vboxLayout; explicit WidgetPanel(QWidget *parent = 0); ~WidgetPanel(); void paintEvent(QPaintEvent *); QSize sizeHint(); QScrollArea *scroll; void dragMoveHandler(QDragMoveEvent *event); void dragEnterHandler(QDragEnterEvent *event); void addFavoritesView(FavoritesView *view); void addNotebookView(NNotebookView *view); void addTagView(NTagView *view); void addSearchView(NSearchView *view); void addAttributeTree(NAttributeTree *view); void addTrashTree(NTrashTree *view); void addSeparator(QLabel *separator); signals: public slots: //void dragMoveEvent(QDragMoveEvent *event); void scrollTimer(); }; #endif // WIDGETPANEL_H nixnote2-2.0.2/help/000077500000000000000000000000001315604104400142075ustar00rootroot00000000000000nixnote2-2.0.2/help/UserDocumentation.odt000066400000000000000000003775531315604104400204130ustar00rootroot00000000000000PK:¥úJ^Æ2 ''mimetypeapplication/vnd.oasis.opendocument.textPK:¥úJ¾šõqëëThumbnails/thumbnail.png‰PNG  IHDRÆ߃ùrPLTE  #0$%%%0/)7767Lb/r3n;*h*/s(6TQO:I55a?F&MH'SV*sg1yYFUE7^P5J{(gF`JiS nSvLtT vZoR"gZ:~gua%HHHHTL[FFWWWBnJZdN`HKc\BvJzidSxlIxgVgggoopwww_)ƒc*‰i-“g0‰m4–v<†s3›z4©~5°WNƒ{Bˆ9„4-„1.50+62™C#ŸV9ŽLE†(A•,SŽ6V™&l‰uŠo’#{£X†MXŽp_¾mh˜}‡Y †[7’p ’y0­v¡x7\ZUq‰nB‡{XœjWliŽas‰tcgi˜dxŸy|¢kV©yE¥uZ±|G´yT¦kq‚=¤‚7µŽ<LJH‡ˆF–ŽTƒ•U‡’Xš”I¯”uƒ¥Z§[­ªp„´l¨šAÖ«TΪKãºaÌȃÀlȈ€„) ›ƒ;³‹ ³0µ«·¢>–…Uއtˆ¾g­”Fªœ_¸…C½„Y´˜G³œV®”n¹£G¨ }µ¢i¾­vÅŠÉ—ÄӚɗ3Ö¬ Æ¥(¢>Ͱ#×¥%Ù¦4ذ.î¸ è´.É’PÊ‘kͬLÈ¢iÆ®x˶hεy×­yضkм|å±Mã¬kðÄôÇ0×ÃoØÃvôÍQéÇwïÐnòÎhöÓgö×wúâj†††˜˜˜ªŠ¤ˆ¹‡œ¸–†º†¥«¤¨¨¨³¯¢²±©¸¸¸¾ÙбàÅË‘ŠÌ§‹Å¬’ȶ„ʼգҮٶش—Ó¼¥å¹ç¡«ä‡Ãæ”Èì¤Òó«ØÕŠÖË˜ÌÆ³åÊ†êÆ’êÓ‰èÓ—÷܇öÞ“éÙ¨ùã‹ùá–ïã¼ùå¦úê·ÆÆÆÐÏËÓÖÌØ××äÝÄãÝÙðÀßëÎáõÚëëãÉçäÙúíÅóìÕûðÌüò×çççæòãîóðôïãýíöü÷èþþþàÚ.½¦IDATxÚí xeÀ“‘HÄvˆâ† ¢85¹Á³öbýþþÖQ+}˜s°9šKçäÙ$í¦>kËT6Ï\?Na\ÛM}pͱÌ%܉HÜ)ˆ6¿ÇXزô²kú‘ã]rþß»¤k¡<¬]›Ïÿ½6ÍûÏ%}÷ÿzßÿ{}j3^͆ˆˆˆˆˆˆˆ/ß!³†‘7ñ’ήe_`)ô§À¡:l´ÙrÉ1,‚ì(F(?†ë¬ ÊiRØÜn»Tb iÚÈÈH6k œBÀìNî÷Æ- [¹ÓnÏ”#odóÙ‘¡~Ú€ÄÒÀavs“ø½.Û™æ+- z¨?•J&“©”5p ‘‚\ÙÉ™•³È`·Ù/}Z.7Ý   H&c‰£±D2E5©Tíf'eWÎ2”1L ¼äYÏüûßÏN7F>?ÒÿŸ«®¾ú[|ßÕ—ì¥CCTðû?|ðªKRýà “P‡SNK6»¢¤ÀÐ'>çùŸ|õŸÿü×´cd‡RÛ¯á~îK–\žHQI‚ào¬æ*““T‡KrÇåšÓ£FzÂSþò©Ï†ùÇÿ¦ƒ†©þÔöÅÜ÷ûôǯôWþ:.‘Jþìî£oŒD²L¼Ê;Æ¥ÎB¿Üg¿aÁ‚lö48‡:QDþó'?|áÞóÌ´ûF6ÛOG½âž}ö‡ì[càèÉ øÒ\EŒª#›Ï†>.ŒæcT`”Éïìø»j7Ë  åÅ¿-ûµ}ùÂ×epº#õpc¿¬•ÿ&;ÿNðìd |{À_ ^or“<$IzœÉ•/ s-í¢wLˆ‘ ·}ä3oû:™þ€ ѵ€ÑÐÈwÔ³—D!DÅW¥Ê±8¬”822d~e 2S £´›¼ãЧžüÍoÿvè¹|^§y|t–;$ <Ïïš©9õTÁ¨üÌÿߺfqmD,jCÜøý»`ÜQ³E9ŽÝ*ÜrS¶Ï”ö¹F³»«vW,¶wï±þ‘ÓyƒªÃ^X=EÛ}“^NÍ7*ç±wóË8W·Øbi£2rëú@Ïž M ‚‡74mì r¬¿QoáêÅHßš›×?n qlSÓ­‘Èêušþx‚m§è ÑEF ê®ã†aÌ 6†Š‘Š«¨›¿”°ä ±åZª …¸>èÿ¥^sc_s°zgO­©f··ëžæP€e¹uâFTÄØÖæŸå¸G ׌œt8¦hP“ÖFѨ¸ áíl¿Ê_Á·\ã7µ!‚oô„»k8S¨zu¸7è_Ùè_Ó½ž«6«WuÕøÙ® ,wíªU];›ƒU]]þÀ¾§SÇQ:[·y  ¾ã¾©¬ë'™7(ÆjŠ!vT®å;—,l)¤?êâ]Ýážj.È^ƒ6V÷°ìÍ`T;CÁ*!¼5è_!ì r5á°°5Ä}wãÆ[ƒìƒ0¿>uÊmwØÎ« óÔÔŠ%“ÑÆÐh¤ªèßÎnáWq•W]œb@V^ Tw áž»ZXã¿%D1üõ‚Øô×wÃÓA6ý\0Þ³-–ΓÌ›}.h‚o»gx¦Wc#ØxOÝFö|ÓÅý`TAv‹(læülc7õÊpœ¡~'篢ìÊðž }*4ÙúeË–­\±;‘: >Nôò+x^àÛîÍ31>R‰ñÝÕ[ùV®rŒQm÷€{/bÙ´q³Ø½–ãü×w¯õ³[÷l^Û%vs\uïÆ®›ýlUOwßÃMƒQ…ö@ß·µ<:õêÛä#Õ˜SUB†ØSà;¾Ë.áø6ˆT‘uA¶'²!T}óžj.ÐÓd¿‰ô€jêÅ=, UC?²ÎïWîX[íAã¬øôð‘ma~®­¶åuçPé™Z¤ª¤Iì‹`JÂ&#ëj.Þ}ð–5õ‘HoMÕÚ¾uË{á”Ë—oÝÙÓÐXUßÙ‰öݸ¨êâë:" UU5U57=•:92ð§;!Bͱ½b•QmŒ1ªHìþèþy»ùåE 3{Ç¢û`&³L?`’ O£¿3ûTк´ö—pJ4ö;È~ý'¸ ’EËËUH¦7R%M£ZA—±DtÓâù®€5õ¦St^ íiú@g³I:!,6³÷ÔÂw¼{wNK<} (ÝÎÓÙÇ7€HJ¥ +àÞt ¸o^  ˜¬õF"aM « kÆnտРz›;wÁÏMÉqPÅC·Ñ¼Ývï€a·•—È7 Fµœ£kÖ¬`çC ˜‘*F+%Ct¹+<ó±ØFè:j´ÿ\kû‚è²phàäÀ60(¡íOÿ˜b”—ÂÅ­µøök¸÷~~Œš^údìÈ »Ê*Ë\åå‹Gqáš'ɦÀˆüxx8›8r;o®òŽ…Mßpl/6¬Ï›?ò!®Ò¬R¥’»+»¼é&– ¬rh>—7Ë#ùâ†Uc°~?úäÝ‚ tžÿþA2ø§;Lƒúõ09&´ÐÉáÜp¶Ú Üíó«=_Y´¤òé]˜¦’—_»hÛÕ‹ª«/H™UÜÜ™r”Uó7Ž&€",ÔÚ\² ê¿ÄüÐ>÷¼ó.j†J¢ pŽc›7õþ}׿môÚÓ2ô±Í›7_¾ióæmýýfÑðÅõÏ1ý'Á¤„ómöªŠ¸µ_ñu;:!VšŠ:]GE1z‚^û¬U‰6CiʬQ½t ×zá¨P䨢Ê,ÞjÛ;…N¾“¾”(6,ïHB~(úA¶¸ÝA½ûå Ñ'-“øºöÚ9s:¨AÁÇuaç(_4?ãÚ0Ì:XRaWÆ(Ö²Ù³Ûn:n¶³|¤vÁæµ!ŠãR¾@ž²]MvïÏŠþùü™¿B,=‹íØ>s´|»¡ž§o ƒ^»íÒ΃ tggÞ7ÆìYcKçù¼q6[ù»- “bÇ\FQÙC÷c/+›ÐÌ%І1¾ÊoŒ†¦³²hÒÕ ¾ÜG!øÎ–‹Îìý--øÆ¾\)"Õø­‹)´üÀã­½OÜËC¬í¬›ë,ó˜Í鸌ÛÎŽç¦NQâ›-ž=òÄcöÔÕÕ-½ì÷§‹£Ö¯««Û±£õÙsùàÒb zâ‘_ýuéÒÚ¥ï:}FúÐÒººÚƒÆ«#þíC–å¼p =—˯ Õ­äfè£K‰‘™¹ÆÛÂ11111^sĺÛQv¼x5mŸè¶TÆa÷Η٠›}ŠËV®Ìª6Êè ]Ä9Á‹>Ñ휒]Ž;­[ò»·Þ§Û=ŠÇAfÃ㥃sµõ¸ã†¡Ié+(WºaxqèÊn\eUN{<ÖF.xA²öÆÊÐÛT‹sT­³…!¹`vÙ>¯M1˜2—/n÷úìÕ“Ïîõ€ÐSæbœg6‹Ý^SôVhÆ5Zl°Ïª61˜r° ¸˜^ávCµÉ†¦é65MoLu1F™;gøÜEoò–™>cxŠpʹþ1Ê9bè6-c‹²õ'%T/Fޱ»50}"™#õê&MÁ{t—Ûºì&Aqð’C™ÕHEGâuÑk«¨Šªi6³ø¡¹œ”´c2 € Rgz4xÀÑãs¬`æqé³7Ünêœ4âªn]vÒ”14›æöçMj>ª}‰S6 •*É9˜v0æSŸ›äfƒ±Q«'eŽrp j)ÄewÙÝÄ72NGX™›±"»ùw'„: qÙlžœ\Ä4ÈÙõ HÖu–%©}NâRtX—e¦A˜±âmFQU%mhÔôriú¨‚Á©TJfçTˆˆˆˆˆñšÂ€yöøî²™ð¯ ]ÎÄU¢¥ E†E„îcÒš‹ Fƒõ…¢kª¡2DuËp‚ªK Qt5®…H°<ñi$£ê:¼[QÒÑ´YĈk’Ýia↤3šÄÈž¸×}¥‘öú|Œ"y‰Á·[‘U—dDE2C‚®Ç+{ã²Ïí–eIžE Yf⾸G’3#0"…a$ÃxeCòIÅ0àÚ{`ȧ$F: x}ªÇ YŠ{e_œÉ¸ˆÇ#ÅeϬ֩29#‡nÝ¢C×u’Éi9ƒdt¢Ý×ÈÀWŽät8žÂ«9xUƒ7Z¢c¤B Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä@ Ä8k MÉÝ Ñ !éŒF ¢ÄP5ÃüŸ%ª–9Uy…cÐ&/©Šz@‘eEÉ(ª¡ÊjÆ jZÎÀËDUrÀ §_ái¥ϨZü€ªÊº¢)Š*†¬5“¡?µ¸.õUæt¼z]11111111111ã5Ðþ¦w,ÒÅå¼IEND®B`‚PK:¥úJ layout-cache5ѱKBQÇñßó:&H H ¶4&¸A¸ 5BKý©kc!´V†„C†ˆ.šØ´5¹® ‘k4¤sçÁý¾és~÷Üsßå T}ŒH…É~¥˜TŽJk«Òo\Ú[¢)ydÁ¨€Kp!RºeÈ>í‘ Ò›žÁ+}Ã;ŧ¡CË”tfh“Š™‹` l€ÍÀïÌ~Hs Àò¡¡É)'Vl³R6\±rfÅç×h©z¤·Ì~Ð}ðÞÀøcº³w»gz*ÂÅ@ì€}p NAœƒ p Z žÀ|€9pÎÿnÒù‡ ‹e+æëV|s½-ç± ŠàÈðPKof;²PK:¥úJGrOÞÓÓ5Pictures/10000201000001F2000000BFE6D670FA6EA89166.png‰PNG  IHDRò¿ ^ÖsRGB®ÎébKGDùC» pHYs × ×B(›xtIMEÝ 8!|wþ IDATxÚì½w¸$Wyîû[«ª:í<{OŽMTBIHB ¢°A`ÀÆ\ ¶1÷p°9N÷Øç:ÜãpllŒm°m Æ" ”e'hrÚ³sèÞªÖZ÷ªî®®®îݽ'Jêõ<=½§c­U]ëýÞ÷KÂcèŒÎèŒÎèŒÎ茗ä%èŒÎèŒÎèŒÎxéûå8©)2!:¿šÎèŒÎèŒÎèùK À£ßqºú‰ZƒŽÓÑqzñRò‘¿Cmö9ÇX'ôN·SÖùÎèŒÎ茟@à:Ó[PO€;öÓdNØ<;€ÞÑÑòã `'rJíƒÕ±ÜÂO‘9©óì€ygtFgtFÈÛ.sœ^s¬€ÖxÍvퟒ“y ï\;£3:£3:ãeäÇÀÍ|_Ò*-ÌN&p™c|þXA[´¸”0ïŒÎèŒÎ8Qã´É#ŸÄMèÖèqSëF·Ø÷Ä|vÃ÷Òø=5Ï(ànuZX‹­S+ç¤þÜvêuFgTÇwÞÕY„Îxù0òÖ¾ÞÌÿ˜1-¾¯Ùsm0íX–)ÚüÌceߦMÅaÑú¢y‰;ïŒÎ–/_ÉÈÈH[ïéîî&“ÉpäÈ¡ÎvÆKƒ‘·ÎÂ<ÖÓ6€Ýò|èÖ”©/†Þ"ëoit kÓÂ\c¿£Uc3õøÆ7¾I"‘²œ¶A ›Í222‚e9X–ÃÚµgtµ3N_FnÚbŽÍØw 7ü.3?“¬a-üÝðõí°ôvÓÞúÍÿ³hòÑ„©‹¶æÙaçñr–åœÐÏWÊí,rgœ@¾`®˜ÇŒ™à›=ÖLBŽ0ÑèD{ ÖÒš´cÀ˜…€¹hÓˆiÕ€0íH§»(•J'~³úí,zgœ: ?vop?ßó-[+@&¶X ȵ°Ç͈iÇGÞÌ8Yè\EÌ;£ÃÂ[Þ/ýkVW®!@›;ïŒSä¦%y{!õÙ6{ßB˜ip‡[(ȵ|%›cÚ™{+ªC£u˜ïý0·Ã¿mÛ"™°1ÆP*yxÊó/áеÒôÎ8i@Þ6ˆ7'Ü•Ç[õv˜i+àyîxzË>ß|Û5`Úî8¦‘ZÑÈ8ê€ygt@á)”–$l‹D"Aww7K—.&ÎÍÎ’ÉdB01>ÎÌl¥ :`Þò“=Úñx=˜›–™y=ˆ B e" fê“Áǘ]´°6xy®º¹Ó®SQ!Z4`jz>wÀ¼3^cjjꄇ6¥ –e‘N§éëë§··—d2I¡P$›ÍáyZC.—ÅSþuí8I\·Ø9I ?Ñl|>oV¡¢%&TÄÄÔ¹©8bäg€Iˆ‰ ÄŒVo`¯ÔÒ dÔŒæ5à’ÜkXkƒµiŰ1z#¦¼­‚y­¯{~FƺlÀÎÛóÎèŒÓmœè<ñðå/X–…ãØ8Ž”˲H&“¤Ói2™.<ÏÃÓ^.´Ö$)J¥Bçdu€üT‚xøqݼtÝãuàûQƒ¡ …X©@Ë„€]H0Q³ŠŸ¸ è&îÐ2Ö…• ù›Êcñë7o£ˆÚyÖ0²V…¨1XÊk¤çaç­ƒy‡•wÆ+uRJÇÁ²l´6ÌÌL3==Ãìì,Jy$ 'A*™¤X(âyþ>àKíÑòS âMY¸Ž1SyLW__tQC!î¸D×ÂÌ;ò·‘ $ È€€y= mU•ˆ¸žÇˆiƒ‘Ç02èaƒ%ìN(¿W6<:`Þ/Áñ»¿û{'ç‹ ØR`[ZkŠÅ"ccã”J%fgg˜žžfvv­Uåf P¡ÚŽ¿ühüïô³æ@Þˆë^§*pÅÝ7bô­tëŠñûŠ—ÁYÈÐÿý{–›Ë¯ ?FÐEü:5ôý‡”£C"X#£›=±FŒˆàx£9‹È\C€^7×áSówd ÊÔ#jDÔ±“wÆ©'KVH$úúüˆõþþ¤´(òd³Y …<ÓÓ3ˆ@{›Ëåq]¯nG[³f {öìꜸŸh6Þ*ˆ×2lcToÀÌÃÒ;qN¢9Þ!?qp‹:ôˆìÜÌš=Í”] àuk¥ƒjä^hÀÆãŽ·å¹FÖ¨e0ožcÞóÎx%¹eYôôdèéé!•Jãy.ÙlŽb±@>_Äu=ÿ ’­uÃÏé°ò' _(ˆ7c¯òß*ôú*È›ºÏ wø">—»†!†AÛ¿ ²ªWþ–€åßG®! …+Nµ¨—Ñk•ˆ¨Q£êçÛÔˆ!Þ€©cØáµ°BYMÀ\¶æ¢I½úwÆ+ Ä,)H$œD!À-•(äK(m²õk¡·wÉÉáÎ ìùñbãÍ$u=ˆë€…Á;Ô«LUQï/¶è$†™Š6*b€ËªïÊß± G- ÅU?«YŸ¸€¾èÜT €«à7’ØMŒñR¯@ˆ`¶"Æ‹UcÈaµæ’ÖªáuÀ¼3^y@.„À¶ükEZéæ®”ò:'ð0N`y£ÆR¦"ZFŲx©ZFnTˆ­‡<*;Ïë'¦\EådFb„(„±@hàÁwàf `a„A”ߌ®gä&šG‘Á²ð`*J„j ZÌ#`âæ]c#|ÀF†æjB÷å¿Ëe ­ z×BR%‰˜7ÑTµNJZgœcùò•'ý;1¸ÞñàW‚ï|çVn¼ñmÙaäÇ“7 àŠ€UØ^nbå ª  ö:[ò:p=EØ>È « àBÖ2Ö:vÞ &yl!—¨/ŸÄÞaåqzùÈÈÈKz_y‡‘g6Nö:FG@Ë«q£0•Ǽà½^ØÂ€4F< EäeCUJ!°¢ÌÆ…å3taB˜J=3!v.ƒ®0 Ç©ĤÕÅÈ鱆Œaîþ{L]þ=µ¬8ÂÄ…)§˜•A8ø 0SaaL 3LÜ2»Êü¥0:«¨ô\§~¥7Q½)èRÈ1dP ½!£BFŽ¢ÖEõ»Ç1rYͯHêeãÅÍÁ74DHV¯óÐ:–eöÊ â$ö0ïxg¼4€¼ ¬•ªÆÆp¼B‡ePFZV§b(•\´Ömú9çœÇ³Ï>Ý9™§ëÿhh¬ÙÇ~ ¦=6ç³ä@ûùÑa𠃸âáÇUýpXm–Ñ%Ps €@X™&’º°RtHì´Á"Î,ÂFL¹Jœh°6Q6 èk`ÄTžkhÈ4ˆ\ °@¨ À Ô;fßX1²<Ï*WN©0‚Æg`z VT0»5_y‡•tÆé0¤”XRøqŸBJ%I&“”JÙ\ÏS 2F+5•‚ÂR–m‘J¥èî¯Ÿ\nŽ#GŽP,–Úº\·Ô9i§ëð4̸÷0–€‘¶}Kîô`ä Øxùÿ1éeÕ eQ¹8âÚ =æ†@ÜmlQF**ãÍVÙ¹ö› /‡HôWYi ­‹2+5Á½´+G䨦ŒùŒU‡–8 ì òÉc] U&nb|c&øíÍTüú>~AjÆEˆD0GrToFhDÙh ΣQ˜ u)⾡"Lm€)ç·W‚àðßßaåñ–%qlÿð”í»ÑúH§RLŒO0:6F±èÎ Úe¯“1>xëÀÀ¶¤ïÒ+ŠäóE<Ïcppˆ³ÏÞJ//<¿bÉmÌ …N#•Órä=Ì‘9Ì¡ºàú\ªÛÁZÕƒXšA8òtòyØx¤N(xKGÛT„‰{!w«òrÐMÐ"9×F—ßë3¼Z¦§0¥ „ÝE5µ¬ìö|Ž­PT!Ó Ÿy—kÅ/\qY½Õ4$ =5l¼ªLĪÚYU#¿í‚;å¯M(˜Ì AÚþZˆÆîªÄˆ ˜À/MÈp)ŸWí¦$pÔmU¸*uØ£ç>‚ÙÆ,X^êŒÎ8ÑC p]×s+girÏóbÑà N"Á‘ÃG(KóSFœ„COO‹õ300@:bn.Ï‘ÃG8|d˜çž{·TbÕš5LMN±ÿÀ¡–SÒŽ9Ò9q§Ó03íböÏbFò˜’B)Ö fЍ‰Öú^ì3úIëÄù¼²zS6nšçIÇx…»€»5 ^µˆ½„&ð'×ÎÁ¥¢K2é 0s™¨2ÔÐ|YÝC„ª·‘a X«öýá"ÌÈËòº0‘~ßq@^N-‹Äh/´!5¢²;/-îTEyÐZ#¥¨¨Úsñ”&áxàVÊòvàbPþ|´ÁàøUY¸ã¿#Ã>º•%û²Ò j×ã5ªxgaG^ïŒÓ@ Uþ>ÒßßÏÚ5«X´ˆÉÉ)vïÞÞ={X¾|k×®A+Å¡ÃG™½žÕ+¥1Úßõ³qãÖ¬YêU+Y´h®®.Œ1LNNòÌ3Ïpß}ðÜóÏ“/brjšééÙ–lÞN#•ÓÕ†£yôþ,zjã¿N€öïQŠúy´ÁÞ8€pæó“µ^ê p«I+ûÇQ±L³Äu© ì5@熤õªa _¹LRKÚ¨ñ Û7P:ÿ~º»XŒ.ìT‚ð* a,\ù,\ê@b €[ÖºÊlµ~sMµ!KŒÑcLÅi ând¾n=kws> ‹ µLR¤8e ÔyÿýÒFÈdDRŽ]š '$›7N-3耕—Á;zkÔÖUœà}œÛfø23fæ[ãÓe¾–%Y·n-¯yÍ¥œ{î¹,_¾œ™™YyäQxàA:@2™À²¬: OCJÉòåK9ÿüóÙ¼y3ƒƒƒôôôЕÉL¥ÈdÒôö¼ŠË.»ŒåËWðo~ƒCRÌçI&,«y‰ÖÎ8ÍFÄ,îL¶„V­(ƒÑ£µï®T Þ3c$“É3N¡´­gûÿ0héÚ”³Èjó£Cì»ÄK5`†ñ0•hî°¯ØÆOå)ÌÑMÌíÆîÂNð“© ×\—'“r‚C+ùQܹ¹ æNERGj„.Ëêþÿ«¬¬j¤wôÊÝÒ"Z[Ȩ‰÷‰‡AÜ­‚xˆ‘Wnx•HW)Å¢‡£V€ë L™ÉRÔ³¤’v |—@¹£EÂgà”•ˆQ¾‡Š{ ’Qf¢sš§¿°zþ›½Õnô'cS?Á»•ã{)üBÖ6î=§b®K–,ášk®åüó_Åš5«éïÀÃÀÀÜyçìܱ'áÄ3~¥6€eË–rùå—³uëVÑÝÝM*•"•J“H8d2]tuuÑÛÛËõ×_ËÔÔ$ßÿÞí92Lww†t*A6—ï(T/ñÄÈ6vîØÅµÓëYä¥(*/í@™ À\k A%?3éažÅHa-JŸ" ¯cà1^š"”çLÕ§mj<$×0ÐRÌ´‘›ƒ×¢˜žÉ“pé&ÆmR³ë‘{ÏÂ+¸è‚BHÅå…+øúI>þÁË6¬J¾]+`áAµÐ3À¶ÂÂ}9`•Æg 2ä‘> ,žBF–(\#]Å¶ÕºÊ ^Šq?ø©g#ã9lK2èœ8²žÂh/ªèá]tÑð͹Oñw]ˆ1†d"qtà¬Q´µßg^Æ_S-ckLñ¬¬Ÿ®¦ë}冮G¼»¡½Þ§xضÍÙgoeÓ¦ ô÷÷“Éd°mÏuéïëeëÖ-x®K.7ˇò¤RIÎ9g+›7oaýúõ¬X±‚ÞÞžJŸq˲RòúBHÎ=÷\víÞÅ?É\¾ˆm[ëàt'á^‰oí}€¿|ìföá72×óáÌëè#ÖÚgáž þ®²rŒ¯|–ÍPÚ=Eº?Õ4’}Á@ÞØ?>Ÿ¬ r«+Í›ŽHêeÖ>+M¬ú•–YJÁæõËèËdøoïúïܰ\"¤DZíÁH.Ç[/ø(oý¥Oðª­Kùö·5ý¼Òž?€ÛÔ²ð@5¯0ð2 ‹è…ë6ƒç©ô)/W{‹”Æ-/JCi½õœòòoïX7±Óu¿T%ꓵ®'u®Æ0ÐßËÆ›Y¼x K—.eåÊUôöö`ŒŸã½fíZ6nÚÈäÔ8ßüæ·(Š5ñaÕjåŠå\qùk¹èÕ±iÓ&I&“$Il»º-‹††‘Ig˜åì³Ïe×Î]LNM£õËï÷û²î>¾¶ý6þçãw³jSòøtî{¨î꾆~‘Ayžà¦,«ãÇ#Ÿ­c …Ý“8°ûS§Š‘ÇÉìÔ·Ô¬ñl46‚½ÖGœXõ¡–¾¾×bCßÍï#aÙ£»A°¥ÅÅÝì˜=ÌícñøäNœdÿÁéy?7qÆoSÚýgþ„¡RŽ\sBÁnQ©=ÜD…Úõ0Ñ<úhzYUNoâ·ß½€™ä)z& 3˜’b®0GJÑìã¯ÿå!–-îfx4ÛÂùô|ÀÖ¤¨²ðÐñ"åhËóÔÕ{#j ÅÔÈéq Þ|#ogÓ>~@s²6Rq/Å«fœNÆÑq«€+–qþùçqÉ%³jÕjº»»jÎç•8묳˜ËÍñãý„Ý{öÄ£ !غõ,®~ÝÕœsÎÙô÷÷#¥íŒrÿ}÷sdx˜³Ï>‡+®¸ŒÁÁÅtww³hp©TŠçžy†ÇŸx²­Ã_³fû÷ïí€ëÉÀoåqdöiú§þ‚53÷²I,áp©帚æ³cwÒUrøùî+ȧìft@äÊ>s<>’CMæO×5H‰‘ÕMÕo\ËÐÃMST(àË U5 äó`üÑknkùоzð÷ñPìÝÇ.à'¥ù·™ûxhêY²j˜ V–xóo®âé»oM}6ö3îNý%÷Þ{/·Þù o»þœÚ °@^¯ó(„Ä¢kT“6çÅ =ÖÂ:öž·ʳªwˆïêÇøË‰»Øçî⬡I®*Ò°mÄáèÒ4 å×> ¯ƒ{ï½—ßû³ïóÆ«7à8U&ˆó0#·h¹^q7ÄGíW$ö²¼ÞÂøIñG,)RéI«Ä` J—TÆf2[dïðÓ<’ý×ý| §ÖÅQeáÆÅé—s5ð0Z"dèœj´@ 1q!kYz¹Ük‹¾òË Í |¯8Á×\{êı€\ûkmNÉ\už¶m³eó¶lÙÂØØüÇÌ¿øE6mÚÌþýÙ³gŸøÄçÌ37ÐÛÛÃ^À½÷ÝG.›ÅSÇq€r=@ÐÛÛøÃm@pàà~þâ/þ_ûÚ×H%S\wÙµœ¹a÷Þ{?®ëñ±}Œ¡¡!qõÕWòÅ/þg[@Þ'~ìœ>È?oû._yñ^öOò«(àWV óÛk‘Ë ~<Ò…í ö¨£ü“{'ËõqYjC5ý¬,«k‚´\p2MÙ8TðN¦“z×+»&ÈKSM¿Òõ€Ö憓îqyí嫹ö’óX´&ÁÍ¥ÇMíä=FyÿÆY²FòŸûz¹õpG»zøó‰æ’µeYlß=ΗoyÜ6Ó%?ê[—B)r¥JZÔÇ[N6f®&Rk¾®ª[ ãÂÄ(ï\>ΖÌñšAýpfO’•]’å=ë2çñ{ë¾ÖâbF¾_@m¼à>Rï¾ÆO:ßZ‡2Lí-ÖýolÖÏ´qk÷»zkåóO £ö늛¬í‰Gƒ=”¡çÊuØK»NMdö¨¼NY½1+7´`áï^¼nƒK¡$±„áU}®!cJÜq¨ïïï¢FZ ‘¶ñÖ%ÉOÎ’¶zbYùÀÜrË-üá_ßË»Þr錨ñ‘W}梆™WsÊMˆ‘‹#× A¼&W\·ÆÈŸ,.â…£CÌÎJYƒ—ÕÈ¢‡È+\ÚÖRºA ›ðYx…™ûõÙý¿ýÂ9þs¡þ敹‡ƒ DuÞ岸åßMMÃqLì³=#Ô´à::CˆޱÙkÄ T1Z5ì×w‰&ŸÛšf~Ù]Ò´ ™L233ÃC>4SlÛök×®a``€{⦅o|;_| ]]ººÒxÊe •dåŠÕ$“ FGGñ÷€àkæ;·~Ï+!¥Öš;v°hÑ".¹äb²ÙY~üãñ†7\O_ßË—/gÅŠ¼ðÂŽŠžâ1^˜ææ=÷ð¹m·±ml/ªä!]žÆÖ†Ã9‡Ï¼¸ŒA¡¸fp–¬㯧3V” 4÷L?ÍÅÖ¼§ï ¤ŸÜÇÆäÚ>z_»çŒ~Ä<µ×O°ã$ê‚y˜5©öVS F/ˆ‘—ìQVnDƒRš´´¸ÖéC:]üûð2¾3>„IHDRBÒ‚„„EI>¥>Ùð3÷ìÙC*•âðH–Ï~é‘/…Òãª)bè@-«ÎýV‘ºê‘~tÔ[«Útp.Å‹¥.Æ=‡YcS’"#É{m‚aqQn—i)«C‹ZUÙºÑþs„;´é˜[”­ë& ý8ÞₚŒŠ¸÷é6oÇrlºÁ16é,8ïz#&Ý´¥µm²Öó½î8̳ÌÔãnå÷Žcá¹.{÷í­ ÃÃGyî¹géêJ155ÉîÝ»|øW¥ Åb‰|6Çû9|ø0ÉdŠžÞ^<„ëú)ž££#<ýô3•ïI¥tww±sçî½÷^´]»v355 R©½½}/ˬ‹—ÒØ1s€ÿõÓÿàžüÏîA¹ áù ŽgžÆö4»¦“|fǶO§yóÒ,o^:MBi,O2U˜å[³/?‚(3q[ÐuÎRúoØ@òÌ 'ÇÈ›þ€Zýq™x™Ý—‚Î+×Po]ú°39/ó+!c–ÄR‹¹kt#OpÒ@ÒÂ$$Ú¸ŽE_·dëÙ6Í}.ösß‘úSÞùÎwð;~/Ó˜Åj‚ÜnöpÔ¹1ñ€n*%Y# ŽŠ zkiXa´”Zú0j¤@[m¹.·O w[ó‹Ïø¥bËÝæÊ ïQ×ÍŽ›rM—¶à^o̱QÌûÚ’õÍž?Þ·&¹Ð‚[¢•õl÷5ÍŽ§U—Á<¯™÷³Mæ_¼x¨ò5…BÏóH¥’~H¦¸Å"ÇrèÐaŽallÏsÙõâNÆÇÇ™™É115Ë‘ÃGyñÅÝìÚµ‹ÑÑ1îºû^xáyJ¥®ëQ*•*ßS*yÌÍŸbÛ¶íìÝ»—ÉÉ)J%¿W‚Öº&E­3NîðT‘z„ÿû‘àóÛ¿ÇXnÊnWƒ[q\ƒTéžKóù‹p=ÉϬÊrNOãi,%xnf?š~Oi¬î$½—¯¦ï ëq–u·é:a~«y.¢FLM|Å7 é± IDATuÝÆÑ(–nGëÆh¿ö°1t;=,™îCffÑ«‚5 cxí`–WwåÉhÃýÙGàH¼¿¼ôÄr˜œœäSŸ˜?þ­kA ¿ö¸AŠ-¨¦”†ê±bs­­rnšŽd×éo¾‘² )G‘J»$ðHHÇ1xŽ"7Õ^-fc¢ÆÈp}Y]+!IP>¹ˆ3 ’@ËÒº :¯r{eÁL½œ^‘ÞE R»iÑè4MÞcZxÿñ”ŸÉéÍ\ 1Á€&î³Z‘ÛÍÂç1oÓÆçµjdŠ}M‹R|üw•£½µVäçæH8+W®ôß)ÃÈØs…%·„eY<þØ#¨cÈdÒ¤R‰€í··ÿuÆqj„™ñoñýß塃sŠ ”F¸þÍq®A(ƒp Bi”«ùÁÁ.Îí*ðÆås¼aÙ/•<Áœ—ç¡Ù¸qÓU¬½êLg "m«­Ã: fÝ|–v”•‡ZœÆJ­ªmFîŠ,KÖÍIaý¾²Û—éâl·‡^#˜JXH «E>°x„5¶Ëóã)n;ša[2Ñ©¿æ½ýŸ¨ûìsû®!sÉ(_øÂøôžà#ï;ŸU+}²¾o£œo­CØäÓäPþtеÖkغŽípÖʸ4=Á¥Ë‹dJ §¤‘®!?g‘ŸìsK<ðìpåÐ/¶!­[¡[p,ª²n¸B¤òAݨê+ÕìDÕaP/oÌeѨ\ .äO¯”sù½ Ñ"à¶šY±PPZÈ-£h2ßf‘ý"¾ý±ÎÁ˜…­mKÆi`ÔÌÓúÖDþßpžÍcʉ®ërøð!¤%Ùºu RH´Vi1;›czz–t¦‹áÛyfünºà¶¼Û¢·GâANi2¶Äó$39ÃOwç8pø~ð<ÎØx66näȑñßo lÙ²…ž?V§P(033ÛÕ“<žŸÚÅÞ‘/pqñ³|°+Çhï:nYÌœ+" îÿMHf·”f:/ùæî.6f—/qyhÀå'‡m†2}¬¿`‹Þº‰Ôº% :¶“«Ï4’ú°qS×Þ4êKmÈÓûèïM¡”@jVÏ$3 6÷­fíþ]Ì®.qq÷,¿6t˜Ù¼äËøéHš©¬Àîr™Úô"ŒÄþú]ï`åÊ;9tèÿû~Ìßÿñ ð®VPÜOÛ /á\r‘•«±Q©Ý„]­,½‚a•âPÖafVP˜3è9PsšÂø,ï軡m½V&7Uð6(„,ƒz(Ç\ ÒŸ ÂïW>öJ;WY=¯BRS®&¯?tDT‹H£X³f-oûôõ †ƒsðàÁ¶Òé:¥\> ªÄÃñ·Ûnáðä|¸/ÍMð»Ëöâåá¹A”R™ € Oþrƒ ÀeØ6–à‡ûS¼g}«–—șռûuïὯ{‹—-øO£%±Nm•·š`]h&ÔLÄT:ƒµ6zæ°­ „Ì“pf±-ƒqmÒ¬šcóO†Y²¾À‡ÖNðüt†=¼”ᜅ†U=E.M¹l‹â©;þ€ Ù?ª¿H<›ë¯¿ž/|á üëןã7~ñ¶n\ËÊk:‡^ÌCkTÓ‡<MïjmÌñÐÄrTV#æJ$‹."§‘…ë:íq2ãb´å6Q‘ËCQëZúµÚEÀÆ[eÖF…Z¹FY¹í¯‘f+5@¥™¯œë¼` .¦Mp?Vf.Z8dÑø="¼ŒhìmÈÓmIêíE 0ˆ„ˆŸì\›0¦Ù皺UöY±aÇŽìØ±×\vŸø­ßdïþý<ÿü ¬txã’ë/¤“劒’gpƒdå \×°ï¨føäK†+.u8kÝssÿ›kÏbø¦ ?üI‰ƒ#0W#«V­á÷~ïw¸ì²ËƒŽ?þ8‡·×c|ff¦ƒÈ ‡æÆøÏýwó//~S‡ dñwÙU$=÷Žðñe™ÌIîíøe÷A\DX¹ð yÏðàô+®Út¯»þC\rî dRéc:Î ä¦öªòfEêš1òÅîÁ²Æ°t–L&‹47çàà1ØK´Gê‘4÷/äó£+(A&Qä†i^ŸÎr®R¤Ò†Ä¥{øém°:uI=+ßq›7?ÌöíÛù?ý7úÆÈÊ,\T7ßhEDYyÈulžy]ùÚÆ«2Óœ;¶Ë`¯KÆñг^^²?Q``xiç5äó6Ú|“e™Ý üܾ¤îW •jÕ^Pü¿¼yªZ 2MjÂl¼Ò¥º)×ñV$â8ðˆ¹oö\Óßu+ Þ3­Y 5P.Œ™Ô"±·Þ 1Š}]ÌÜcçÚl©cªÆ¢Þp:zt˜Gy” /¼ˆ+¯¼ŠO~ò“|þo~Ÿ«Öpõ}½;%”ôeÚßv+Ž-ز Î\'˜…Þ>RKrV×$øÁM×%øáC>­qkùåÿ&?÷Þ_ •J¡´æèÑ1n¿ýv¦§§Û:SSSSTnsÎ>ËŸl»¯î{„‰ü ¢äû¾÷z)þîÀ*z´æmýüÖêCLd%Îep*®«ì*~S`+ÃD¡‹Bÿõ\pÅûè[r1R:Ç|¬§0ô1î²óhºO$%©ÕIv? ¿ ©Ññ×HŠU¢Pì}öõÜ¿ê¬rXÓ•ã]Ýcüìò1VØ£)æJ6çlLðÓU7ÃX= #¹ð پ};·ü`7?~â—]¸&Ô\D"´[ÓÁ¦¶­i|À[M€*RºUµlÐ|déaÞ¹d„“FZ†DZ1›L3›KðäL‰á¶NùɃ.pCCAo^°Zƒ¦2Oªf'›t¸¥kPýNèÚM¼FF wŽ›‡uÎǼc£Õ©ï ÐÐÊÊE{Òz´õ¬<ØçõÖªæµmµ¼†mTÃk4×(7¢þw6ïõ¶=ù§œ¹aŒ.:–)—^Oae4N—9+W_5ÁÝ7ßźÄuuß³uÏ/pñÅ/òè£òÿüÕ¸ëK+` ˜9QSRÕf\ný)BojªÛÕwÀËÏÏ?R’RS œpÊH²®  AµíëõÀؘۘ‡€\¸¼”o­ \ Ÿf ÒTɶ(—®-3è›j”`ðÃÒzxó/2Ù4T„Ztæô¸ïnñ‚qQçMüä"´*ëhq aª-D­Eó<ÞŠ¼.¢A1s ?Þ Ô›0µt^ˆ¤¯œ Ö†'Ÿ|Šû⹋{üÓt¹ÏÓÝïÐÕ ©.D²µ‘U®JlƒpÒ¶‘² áH $ËAæ°™QÄ+HKÖ‘bEî0S3Ÿbv¤œ»š©B†îÛ…T3Ô¶ýíŒã# „:Š™øWÔÄ¿Ñ_ÚÅÇûl’¥<•_ͤ²±< žß©ì±‰.þÉ,ehÝ^ÛŸãK¦øÜô"\ì ÷ÝÒ‚-+×óÑ·¼Ÿw\öFz2ÝÇõØk N fæí¤_Qy»02Øï ]£Ö½yÿ \’ûsÞº¹À´N3=ÀJkÒ]Ån¹¬ÃÊ%0°õ›˜¯µ¦–-ó|üß¿o¼jcô»ÕE®ûàeêü½Ät@ ËêA®v‹Òz: ”-ÚhŒñ×EÈv ”ýÞV­ì4J1åÜñ@ð•ˆliUŒüM·6°ØD6Úp+Ôppœh,97eŽ EªÖ¿&\‘p>ÒX¸‰—u«EÀÚ4`çF4»(ØGåfÑf$y£¨Nikd5ñ— ÑÀ i0×:Ã&jÀQ%h`À&¶) ÆøRyvfœm}ž¥“Rù ô;t§¡+å_ÅÆ„1>ç°ýŸ¨”A°™a–D@’‘æ@Lûåœ-)ßøO$,Ô º³¨ì6r3°øZƒ(Ù|énÍä¬nkÿí°ñf?é¢ð4zôïPSß@«9\#èÂãC½‡IñO¥¥”Áòü›v w ÷p†UàC«&yÛ’,?IñÀ‘Fùég(CRÚ¼vËE|üm¿Ì5¯ºì„ži=ZÀÁDoÔö´ÑFÛ|Èàó[P¢*™X{軬O½ší·oÆ;çIúç™™v(ÍÙ¤z]Ò=¥‚W’\rQŽïoÿgØ?[÷]þ*Ùk²ÜsÏ=üþ_=Ìë¯X‹%BÁna^8@ÄøÉk$tE]C™6” ˪nRVýóBˆö+D… ¡BmMƒ]«ÜýLó-Gï—ç¯EÄUéKðµÅ&xÞTÓÕÊMVjdxјYÎËý¦bºóEêX|½ó»i$%©9 h‚{ 37ó0ØFŠÀ¼Ì¼Ùº4[ÛòÔlí"Á~" Î&nî¢U"Æ2õ ŠÒ¹@-ƒ¤#¸tƒËæôÓ$f ÝýiÒI“Ûi‰%_ –o¯ ¤e#-!“Hú˜1²Æñ]Iþ½°ZÈèI“XÊ¢¡¿(‡yñàûŸÚjÁ/›áM`f¾‰žø*ûÚ´öINnÎaúpo›É’MIþ+;Àœ+p”ÆV†’+øú>68%®ÌóÖ¥Y¶ÚŒ$¶Ö,JõqÓkÞȯ¾é}l^¹þ„Má$u?kÿõ¦͘(£jM­Â/F¯•ðÿúa'"qòðùÉSÿ«.Õ -Ësô`7‰´G*ã’OÙè‚ÍÒ›UÜŽûÓ7ãÈdÝ÷)¥RòìŽ ¾òÝm¼÷ígÁn²ž•Ϲ®+9äµ)g¡€·†¥)ïÝ:SØV»þª=ã… ¥ÇUÊèº~÷7̹\}ÎDZ˜ÊÈÿј `ލˆ)K‰² âV%ægä­0FÓ èÒè€ešÈ÷ däq¬ÓDÁ'NBTÁ=2ù<¨Ç±òè9šïZmäoÕ0jC^ŽÝD@»é\ã˜zÂè9ð¿iÿ¾=ôôôõ‹o½HrÆ’$Ž-HØ'É”À²À’·Y[+Ø{dù;Ò`Öøî'¡ÁŒJ×þ¥`˜6ÌfçH9yú26Ë–Î\!°žOupø˜Fáôø§ÑSßD—FÑF¢_¼gv:ÁÑýÝ 6kWÎòáT–±}‚ïfûОÁò4Ž2ÎÛüמ^6$=Îëu¹¨¯È¦¬_¼†_¹þݼïÊê8¡Ó8Åuþr£À$³°’œÒ .L Ò2¨’ °ÀÔ}Ô€}÷Üq5{7é.LO‰BÖ&=àÒÝ_¢xÈÂÒ‚‹ÎóøÖ3_e=ï¯û¾ëK¿Mß[ú¸õÖ[ù_Ÿ~”w¼q©d-+¯‚y\>9µ.„2ˆW"ÕƒÇÚ`äÒ*“0Æ— = J^»Œ<à&")qø­L+–B¸ŽKl Fn+P d »ëêîhÂ…b¢>Ð&ÀÓ `•‡5‘jƒqØL«@.Z|8šï¼¢æ5µ D8x2vÄøÑÏE®©o¼A¤å7Ú¤ŸBCuƒúù‡ 'E˜Ê\å< ³Ž±qÕÿKé¤äò-°zÐk"aH& áœΈ$eÙäþöEaƒÈ‚> rÒ7`ÃklÀr ª¨9:¢Ù±ÝŸ‚u+†qVXÌNÆge›ÞEe9(åÒ`ôÌþ=þYôìÝh㡟aT*I&FÓŒÉ`Ùš%벤º\’JòóCc웲yz*UÉw<3‘ඃ]¼kõ¯T¤û/⽯ûn¸àµ¤©>ûä‚ö|›\\Ny¤KZ«Á1aYY†÷% ž q%‹íá_æ‘§æõ¯ÍÓÝSb|,ƒ.I’IE÷@‰éñý].¹›é½‘»¾¥àÞ½{I&“ì;œå_n~†þâAÿn·F¡®±@njÛÂn¦=F.Ëê³ "å@ÚþǦ ð‘‡Ê©–}âBX~z™ oI—!p 1ñJ¯vccÁ¦ZG@„Ö*ÜË]4AĪ€·ŽaÝ‘€Êp]Ã<t Qëqùâq° Ga‡AMFÀZÖ‚MlvjšNiG`¢iÖ¶Ø´°~µ D½ž«¬5`‚y×ͱU&㞌dã*ƒeû¥–mËà$¶#–ïºòÙ¸¤©ñ–@Jƒt’H±c21ú ˜áàkeÅÒ¤eÈNÂŽŠ©Š’Å)p\MnÂctZpd\µ¤Úi°î!˜ü"fê ¨ü?ƒÖ”çlŽêbf"E÷@‰ÞŤ¥q] e$g¥‹üì¢iOÙL¸Â¯¥® %×ðƒ)ÎíMðæW¿ž÷mú0«–nÁ²¬“2¥Ó¤òþ|MÚy}£m øWŒå_n©þõk€»¾õ.8ûKôõ¹ÌÎ(ŠY‹®E.©.BNQò,Îß*øú_£ÇûõºÏxWןñìÛ¿ÀW¿úUþ¿Ï>Éûv3½="”Sv"X®Èý 0¦ŠZØ_ÞÂèΔÕè²¼®ƒ}TP(µ{‘‡ŠÕ” ÀTŒ”ò¦XOZ–;psˆà$ˆòf/C÷•žåe¹/a˜yÝ S E€¶±dnjû¦›(ûÖu›y#¯ç+JCàˆÊÜ¢.`KÔƒZÄkî#–Á6ò9·`”›&õêTŒ¸¿c\ÑuŒU h2×(¨ëÚyÎkÀˆÈ©XŽ¡7 ¶ض!€¸¤.…b@[¾ûN„ƒ½H™öCï1ÄA?­ý÷k8xÀ°ã9…—5 ¦Ý}Êз迼¤j]aÀîTqkB@ aÆþ5ó´7Ö~Ñ.¥ ³3 Žè¡X°X–§k „Áà* ¥|¿9ÉžÇE¢È=*Tl À8ËéÙð6¶¼úgIv¯>©S³O>`·"?6KiYبnW¦jÜA#ƒ©î]<øãðÖ7Ž20T`ø@nÁgå™oBÒ—¼úuðâíoeQbMÝgœ=önzz¾ÇøÔ,ÿŧùÝ_»8Ò<%ذ¨g­Q§\¾¶õè}¥}ÐF „ÐÕm°*1?#Ž­Ü\éfxG†Õ*¾pƒ˜µÚ`„í3rmûAnZËP×Àáíá®MœEræqà\[AЯ®vÛ™­™JÔ¦´Þп_þÅÆù€C [„ró…ŒÈí2ÂZe¼4-ê%f9VÓ¬öC\§:uƒzc©\޹+3"F¨cå`?Œ%¡PÒì³èÊÀ’E‚L·ÁvªA¤Røòµ±‚"0¶â?$BÚ`’~‹JyaFªç\)? VJr³š^PŒî3tÛ†¥}NøÌ¾2<‰Pš|A‡ %—œª`ÂŽ[|¥ÊëF3· Çÿ•}c Ê“!ð<ÁØp#»±“š%ks$2ž(ÏFÁoù‡™‘$ÝZpýâ; ‚ á.\»•߸áý¼í¢kH¦2'}~§ˆ‘›¾Æ,ÔuШ½Z”~uµq^–°yð¶_àê+þšž.®^—|Ö!“pIw»äs6¥’Í–3 Û—Æëû–‹¹4oyË[¸ùæ›ù?Ÿ†_ºi3Ë÷U+½Õ) 2ÈMLu·häz Òº$T»Þß´uÀlºÒ vCU7Ïð}åÈ«€*ÊÒ¹Ö•´?ÿÞ À>8§ÒTüþ¾üoì\‡¤t+´QÇÈë±rp|¯û:¶ZW^ß:¶N `>¯Ó2r˜q`>t¶µ&*F•¨fBÔ°wÃfã|ðåù˜ë±idºŽgà&Tb™8ÉÝ4•ÖMØÏ.5Ò¹1 Dœ2Ñ®ãûEîxB06®Ø´F`¥$g®?¹@Þ1hd+¤› …”SÀ‚Yÿ¸´Fk žFk;ƒ> ×9ò>èÊø¸ÒR×”A{Â(žÚe88 !øÊ•ËÙ´i{öìaïÞ½#+ÝÛ^ÙRú^ÄäPãÿŒ)Bi‰Öþy*æl†v1=ž¦k È¢¥y¤í÷âPÊÂÓÏ•ä&dÇ“Çô8_(.q˜žëåºó^ËÇnx?—o¾ð”Mñ4kj{bü8‰˜rsá~Iø´šÚ%æZ¾vË­üê/蠟Çen6* ì„¡«×űH$$ç]ú OûY;çÔ}ÆÖC?ÇÒ¥÷pôèQþüsOò©ß-òvMó”p Z4ò‡Wb-;oedR`'4®vYÒVþq¸^›-ƒöqFªÀ% ‚MÖ­· „_ô¥ Ôµ-\íà5Að\è&|¡íøËEêuh“–1su'.h-¼cÒüÂç¢A}Ó¬³—ˆo/*æðŠq"ê@¼êÿ­²RSVFÊŒ½pa†J„­ÇBäÙ¦ trEÔþ¿að`Ã<òòqUF#ª€-Ês ÿ61óŒ3üjçl"çÄï(iö88 Ëz=)ÈÎÙ¼j«$í„mƒ°%$ú6“DŠŒ™Aq ´g(ä Gž}N33ªYµH°t2I‰e°|¢!0äçżÇÔ\’¯ÿÈa2[ïL§S\tÑ…œuÖY<ö裼°};3ÓÓHaÕœÏK.¹”GùÉËŸ…‘»=þÌÌ(•Gi? M)ÁÌd‚á=xžÅЊ\ ¥ J®åƒ½ç,fG³V·ÂéU(!H*ÁõksÉ…7ñ¶KßÉKWŸÒ¹¾ºÓ;¸—J@ÚTR®Êñ%Z \·iììƒl¿æwذ¶HvÖaf*IßÒ‰´G"ãQ,:l^çð욯À‘z n‚ë®»Ž/ùËüó×vðÑ_ØÊ†µƒÕ†^Ø1)h¢Vº4¡*náp¦ui]ž+±ƒRÛt`Ñ[v»g¤|<²*­›ð&hBFŠ®ºÖP6Á½ ¤ò‘kŸ†ŒÜH_ZCG‡ÖÉŠñ›6òçÃçoUÇÆÍ|@ÔæÏØ4Ók™b¬E ¨‡ ¿(7!`À]Yla`ñÏ7w{EüÜ!•ÃDA»‘a›b"ÒzÔˆ E¦s 0± nB¾õbj"ãkÏ…c‹J·áѹ$“JÐ% lÑ#Wp¸àlX:VB c;(ÙƒÇ Œ]áo4¹YÃô¤fÏ_”fËú`Ërèé ¤tÛT¦¨J’\®Ät~ˆRò òK/eñ™»qvÞR…»'—ËqäÈ6mÚÌ뮹–Í[¶²k×N¶mßÎääteYü‰—? ÷Æaú«¨ñÏ óÛÐÚßÿµ¸%ÉøH†±Ãœ”fÙºì¤Fi‰R~Ð›ç æffGR(©A™2xZ¢•C÷à…ܰå ­º'Ñuʧ{ê¼)òýã–åG%Ju=!Ü3O¥¼>s.ß½ííüÚ‡¾ÍÀâ4õ 9˜G#ÓEHض©±b¤²6±†­KjòÍCAd‚ù¥uɯ‹ü¯s[¨ H¨BÃëºÖ—]M¥“1sµª*¦&†@Ä0‘u7aFNpÍ’ É™6²êì I9‚‰ßÅhÍø„`vÖ>dpR­§ñ´A¹RR‹3‚t¿À‘¾oݶ Rø¹çZ Úຊ‚›B÷^³úM8ƒg£­ ž[BͺÕkxÍe—ò ;‚æ)þòe³sìܹ“õëÏàÜsÏC)M"ápæ™ë9tè »^Ü…ëúÍŒ^–AoÆ…ì1ãž½åÐF¢ h-™L0¼¿ϳX^ Ó[ž*3qI1/™MQœ³qzv· ÄHœÔ*Vlþ¿XzæÏÌ,;­¦nó "níUÛˆ–÷ŽVÈ~·XÍ·þëF>ñ?¾Eß@씃›·HõúcܼÄ-YœáQîÚ~7˹¾î3Î9ðvž¿“§žzŠ?øÛ'ùîç®ð0”ÓŒl¤µÞj6?ªÒºÑ Ñ"'lÂO‘ñ7q_ò6Z0W\@‰VD «‡öÀ2›@:¯ä~ùàBEnAw3¡@8”+Ãüç… Ý…¼_úÀ_޼à 3–IÆv¨Bïh½*ø›Ø`­(ˆ›ÆÞÐ#À.ÊQÛ2È£¬TÈì|WMc¶ñµ×EÈ7ZK—·­3’tµ?@€ÇDÑu‹1bÂì;4'QVh*ànEÊûʪ!PcÀ”£âK¸&ìr…aÁà¢^Ö®^†ã$é]}9^aŒâ¡éŠÂôv[,]+I$ BkŠEPÌûúSùrÕÚw?i%PÒ ]C¾%k%öšwb-½;ÙK2•!ñlI>_@X’µ«Ö`[2h‚T>dA©äòâ‹;Y³f ÝÝ=(¥Y¼x1[·nexø(“È—czš…©ÿBýª°cüÞÆ€ëZŒÉ0z8C"¥X¼&K"­QZT\)AnÆ!;šBkAr‘‹L”‘(eÓ½øÕ¬ÚòAW_‡e%O»éŸ¦@~,6bÜ%^¹¾xHY @'‘hñ3¼—Çz—^8Ë¢¥~:Z"­H¦‰´‡—“,éµXöª[pŸ¼²®t«@°bÅ žzê)îüñ0wýø ×]¶ªžu‹h‘“¨Ÿ¼6rÝÐZÆrEÓjuÿâ×FÓþe¹Vª@$xOR‰_)î"†]ö‘[~žm¹ ªÆ—n„íø~ôJ›ªÝ¤ë¾âÜñ@Ó¼#]æLå5óå›·ó»m!È­FR‚nЄ£È­ÀûÈëllÀœháðçK7 —Ëí úTŒ£xF.b<|oU•‰°Sa衬Š2°Ç¨¦.6Á¿O!ŽmÑ×Û…1.”HezÚô&&uÂð×Ë)òSà lKÄøW©¶¶ÑÂÏQÊPRWù?wÏòªÓ{6É•oÆ8mÀu X– ‘HbÛ‰„ƒçzlÚ´‘eK‡8tx²å‹…{wïáঃlݺ¥dÇöäçæj¤à— +/< ペºÅÏ W¾/\I>g1¼¿‡™É}Cyú—@\%QJúkïJfÇ“d'Ȥ!9à‚íûá›%ëodÕY¤«ói›£ÿŠ`ä©„Àh¿Z`êAÇ4 ¾Šéñ^Í 01Œ\ÇäI‡º£µÚ‘³ ÇJꢎ‰›C5@nEÀ.(’DQO?y|:ŸiȲu €«ˆÄNì†×ÄDנ΀±ja î¯¨‰ ˆþ^⺦Õ~2rË28–]Dà‚öH¤ºY¼é&…bføòsš‰£`òФ#*ÍŒ¥<´‚¢'(• ®gðØ–@$û°W¼{ùNFçÂÆI,Ë"I“Ét!„`zj†t:ÃÛß~#ÿðÿT‘Ö…ð‚l¾È3Ï<ÃÜ\ŽL¦‹½{÷±gï^ ÅÒË«XŒžƒì˜ñO£³ ”Bi¬µ`z"ÉÑݸždÉÚ,]}%Ÿ…»~Z™R‚bÁ&;š"Ÿ³It{$z})Ýó,Ýg°|ÃûX¾ñÝ8©ÁÓz)^@^r5"#AøÖ±eC1/±,ÛNÓ‘·òðOnãš«ÓÕS¢Oã GÑ=Xbz4EO·dóeßgìþëHY½1ѯ¼ôÄó“|û®ýüÌõk¨¦cÅ9Dë®—7F“h ÈÓ‰ î³iü Ær bÎ"™ôÚ½‚*>Æò¶[Ò+…c%)©Bà*ˆy§ÑTt)ØxU¼k"ÙË·r¾ºð[H¼ª/XÈšò£ñÒzƒŠc1^ÏÐU¬¼nU*«Añ&9ѱ¨>¿\”£®ÃùÑQV’ØEdžAUjg¾`7hžvÖ  ¼¶ÑÀ·h?m_Kmꘈ3`‚ʈ•9Z5ê„¡Hw‚rÉ«÷7½ëçH8¢ä.2¸YR¡µÀéb`ó'ÉÌ‘g˜˜)R,i2)Aó“ ÀQ±syƒÒ „¤+“Àê9¹ô*ä’«1B¢¼,XÛ¡»·—Aº»»I¥Ò$’I–¯XÆð‘£\wýëùέ·±oÿÁÊ1K)pK.Ï?¿;wÓÛÛM.7ÇÿÏÞyÇYRÕiÿ{NUÝÜy¦g`f`H’3*TX]Ó®º*¨(†5¯®¾»F\úê*¦UÙŸ»,¨*bÌbxEAI;wßTáœóþqNÕ­º§{ôuU¦æs>}{úÞ §êž_z~ÏÓl¶‘°0²Qy|fî0÷1’ð6h³,mQä1³³Ì쮲E¥o©S(+’¤S O” ¹`SéÊÊã²ìêå¦ÌðäÉl:âYŒo:Ï/ýÑOÇ!7kUZýæy9'c£óBA£”$1«·äRø|ëŠgsÒ‰o¥6Q_(5}ªc1¥JB»…>ÇóùŸ\ÁÆv¿ Ê#“ üð÷òµ¯}×^øsþò!)LЕÝÞÒ¨¦½¾ç­AÚ.®etÓÚ€§h¶÷B©Îè.­èùp7¡jQôÊh£PFõÝS&TMv4nvliÜEáFxŽÖÒI¤ '‹šÞzÒÈ}ˆëeRÀ]©õAµqÕ“^W9Õ¹ÞÈr%¦·• ùН…XÖ˜›\äÓÍ=‘©É¢ÕAÑz¿qÛ3jîktЗߛMêšËŽ#dÌ`\ÈS²v9#¹|ÓSfèÂ@e´žëÃ%ŠAzk,W‚ ÅÀÍ$QQ(WXÄÙ”†·²°ýÿ²¸¸f»…4‰¥m5"C½ ƒ¥¡Íö;oÃCÕC1:F+…ô‹‹E††GY¿~=CÃ# „(­ñ=ŸuëÖqôÑGqæ#ÎÅ•ƒiØ]†SSÓ!qkøÿ´PìÆÄˆöÏ1ÓÀ,\ŽV ®ç´’´>»·UYœ/14Þfd}áâH¸z·$ %ÙÍ…²¨)Ä ‰òþ8“›ÏdÓç24qìŸÌ¼Ü+"òfË@-Ïìd²TÔZ·Jû|í+'ð¤'þŒñõmî¹cÈR·–Ê5xÖ§\”œ|úuÜò…GQ ¨²_ûx‚àZn»«ÁÇ/¿óŸ|¨‹ÓÌ y¾þØ‹\ßó¦L*9"0–êÎr¯8.é5§Öóà6 ±ѱ&Ö¡sTÏÐþm>ÜÍ=õ[0&"¥^鞢ۥcI†Z·ŠQÂ>²"v[»!l`º£oÓcØã8D«¸§Fž#?@_*„À÷}DÏb¹¨D¡t¾}Mö¾–RôÛú™Éõ.¥°½1äjäÙðŒ˜^7f9¸©õekT½e/gÔ´ãõe #×ñ‹): XÏT«>ëÆ‡­Ñl¶hµq¬ÑZ!¥Çø§04yKS¿¦9{IcÊ©øZ5ÀZe¿²…âÈ‚ñû K“ö Ru0Ï+Q,—fl|‚¡¡…À}°€;£5Åb‘ýöÛ'?åÉ|ýë_ç¶ßÞ‰”~—ïl··è©”Ë4[­?Tú"bñK˜™CÕ€61ZK4$’…™SÛª(-˜ØÔ 2[TzâÙ”º–´ëõé"aÛ#¨%xU•HJdzáà¿bÃ!O¤XÙð'eãî¨uáÔD~8Í^þ7^{ñð—1<œ0<Öfq¾ÄpÁP®%´—QìsȆ›÷û,L½ ï󇯧ó˜ÇÜÆå—_ÎÛ>z O{Ìfªå¢M—wQKö/ž†žˆq•`TÒc:”-Bˆ>NíÕEäÀ–[ü´IˆTmT6:ŽDB+Yb¶½ƒ¥htœ!×mJÝïtÂ=E­ãY£.<2•5!»Ëò,rd°É§ÖûRê."× _yÕëVèÅ<á¯Ç󽞳ZÙ˜'‰â+ÿç{<¦Ò þçwPîDàYmXôG¥}õõåÙŠ\ëfPd>¨¿7«‘Ái¾ø²W¯[ñ!:=ñ^ΰ/S+§¿»A 2ä²!ÿú®·QÌòbÁ㤎æ¨#µd-1$‘F%‰ÃÐЊB¹ÆÄ÷gdÓIDí%Hb0 Zxx…adq áWщƨ&é•~B±D­6ÄÈð0µjÙñŒ)ß"¢)N=õœ}öãyï…f1Ùš·ºDh%ôk¸‰~ sCÏ~݉6ÂqQä1µ­ÆÌî2ÅJÂúM‚’²it%­O<‹>KS%{/Ç¢¨ÐÚC)áɰåèç3ºñx~ùOÎÆÝ+ˆx­âP*Vb_K©Ñjuì—~²ë÷ª9„Ëþû ah8Æó QSâûÚÒü%_Ž{ðYÔ¿¸Ïã—žJ¥RaçtÈû?}«M!›3p(7÷¾ôµ^uj}|$Ç7/sßvaã½ híªÙë._™„H· U“V²D+Y¢™,ÒLi«¦5ð&²uòl„bL„Ñ¡M½ëö€bt£Ú Úî}ù÷÷¼ÎÞÓÕÝr?íþŒjÛýeŸqïÑéþíß#Ý!¼¢k[Eá²ÿö¢ózÎs¹kë ´öxÌo âÆ€}´ì|ªüµõ¿'½ÆÎõ†Ýóœýsææ²g_º•Í«Yî˜jõóša+Tþ\s÷1;ß0wÿzî·ê~~:×Öê{ýâ>—b`²å¢ T0tÐ&~úƒ®ž¦X€À×Hb1’Ä=Wu<©)WG(¬§4º™Êè‚ò¸¥†NêÝ@x>A¡@¥\dtdˆñ±FG†ºø z`c‰tŠÅ"çž{Gy8Z«eµ#öà–3<<üÇšKÇ4¾ ;_…ž~*º³Ó6fõÅwþz”é†'BÖonà4I,]$.‰Cù]Ev”Á7”&DÉ ´M¥ïwŸgrØýÞìêáå?Iw¯ˆÈãDƒgkÂBjH,«“2¦«uc¹íóŸÿ8½Þ]kÜó63µ¢åVZ"„­q#ö‚&Gø’¯•÷¤ì£t”IHtÜÁ¥`·ŒîÕs©õ´N®\ÚÝ)Ÿ¥õñ¾v«‘U_=×ôÔbÍ$µê'†Iߣ“Uazñ±jÓHXˆ¦PqOzý©¢A9aâ™Çc ±RkÖ€¿ ± *~P{ŸDë2óºlG@?ØÍ½fl…ÑaO AtEà6{Ó¹v1 ±b9Á]o­âÅ¥m®Z­qúCÀäz‹(<EQ*´Û‘S[§7FcLLJ'l2Za÷\KIPð(–J”ËUÊ•¥r•b©L¡–œ‘ZJá"tÅÑÇÃ3žqÿô–·ÒjGY&eµQ9@Øan~á(•Þ€…ÿ†é [7¡tb[ư/óÓ%vÜQ6l]¢XM,èMI-,ÁN3`qg‰(ô(Œ$øU…66_¨Ì–#Îgò ÇGþ¤mܽÂûžÄh‰°?…•ô$®~µ‡‡< ùáć¸ÿLGw¼À:¾þù'²õ%ÿ͸£nm.¨ŽÇT†ÚMÁýr×}úFÆe?û1»žÆµë¯ejjŠw}ì6þå•GÒ­è•O–õ’o(G&³ºh:l:]k,hËòf,»]íØ-xëiÙI£r¥c”IÐF£SäröžÄ-T)ˆÍÏÕÉ“J]wnB¤F=å÷V@[›Ð2ŽPy‰êÀiµG @Ÿ£cBÕ¤‘,ÐJê¼ìœðþO}«Ç8J±§¤EɲÇìÅØìF;g¬½nc· ©é3n{×~6 f@¹ÐG¾Vlº3ÔÎX›å{éM 2u``pkŸýÿ·¿ýí ÕÚmMœ(„œpÜwì}0ª ¤ž ZöPI€Š[$I ÂC"1(kÌ7™¯ÃOHÛ^­U(Uj”ËC”Ê‚B!=wŽº ×ÓÁ¦8£ŽpΓâñW_}5ßúöw=µòÕlI¢iµÚ<‹vt;Ì}3÷IT¸“DYŸ6†3;+Lï¬R®ÅŒï×Ä L–FO´DÅ‚æbÅÝEŒT&CD%0¦ÌȆSÙ|äsÛïÈ?B‚—}†|`nÝFâiß´Ñ"«™ûÞêvñå/™éûNs–xCöK·=‰Ûo»š#˜ct¼ÍÌî I[Rª$”« õ…"#†‰c.Eÿòè¾N8ýôÓ¹ôÒKùð¥wñÂ'oæ ÍÕžZÝuð®Hܬ:"ÏæÁÓŽ ÇXîÄ^Xœ0ÑÃ%n° o;iëƒF…Ò1‰‰;Rª:Ê‘•¤mg²£—1¿y¹6"opD™å—Ëb˜e2f °­óZgùž0Ýi`El"bÕ&RDTô*¨¤…çùËÀzÏÔ²ÇìÅcKäÝLOD.º¢ÒÁV˵ÞcÌ—etóÔÊŽS6_kÀV˜È t~¾V¾<»Y¶OþùíïÀ|Œ1ëðOŒrß“¥\À¦é…‡Ö˜ûž R”DEISEh£\[¤çŒwG~W`ÐÆàûEŠååJJ¥B¹RÅ |ü …£¦-{9vƒ»®^¡ÅÿlÙ²™¿ú«'ñÃïŸXé¬jºê¨\ØÌåÿv;š11¢õ}˜~?jáK(Õ¶2ÔFhA«°{[•úB‘Ñu!CëÚalk™–( Q(©Ïi.ðJšÂHŒñ¬Šð×1yÀcØtĹTGï³wˆç}†üé"¥°ß'Od™*)Èõw®"Ë£µmÕÈ})|Qæ ÿ}.G½ùBjÃ1KóЍ-) Õ‘˜°í·%Çžt7×Þ|=ãº_PåèmÏ`ëÖë¹ãŽ;xÛE·qÑGç8ÌÅ2éÌŽ!7«4ä*Á Q-„AxfÕ¤8ùºU*Ù˜Ÿm4‘j±Ï&ÍÌ0%:"R¶æ«Ðö\Ê1SPsêÂöwˆ_zL} swJ´Ïùée锡ºÛxçIano¶!Ö!JǹvLju„Á …G ‹¼üÙgòþ_µžF䃙èˆX‡´’¥ o Œ«W÷R°L­‹ŽÁ[΀¯´¸õõÉwÒëf91š^4{×ÿ­<¯‰‰»®Õís`r_¿³|Zý=ï½ÀÓÖ (ú†RÁãÄbËæõ`ÚtW!‘¾¡\òHbˆ¢È¡Â:3ÚýŽ0‹•J…j­F±\¥X,áÒo‡BÞÁHŸ¯.éÙ\i ÛBV.—8ãŒÓ9äÐC¹éæ[Rþ®ZSø-™E,}5ý~Lë'™Ü¨6¶¿{i®Äî{ªÄ±dbS“êhd{‰2HÚMŸ¥™"aÓ£çJOJC³ñпaã¡O&(ŽþyÙ¸{ƒ!WÆŠ i¶”Žù©k½ÜãöýïŸá3ßǃ^ÚY†§Î7¯ù"gœq#ëÚìÚV¥X ŠJ-fi!`¼ê1yÜeDÿ÷« œ_ƕlj'žÈwÜÁ^µ“?uÇ1´rÍ··…g58m½Ú,;gL¶¶ÆkvÀ38i}Ü舶j²Nшðe@Á+gQU[5-Ø-©ÓN´—‹šºjåÒÖÈì´™~Cn"®{Îr¤%¦¿—9ë-W"Èþ}+“ LâîCï 9l$žððeà¢òvWï®èK³‹œÓ1ø˜‰Ž»ñ$äÅ2-W}œô9’Äòå‰> u³BŠ} L?Ûé}ßæU™îk5&샽)u³ó²Ó­ÒãÄ|ô¢‹(ú«*ìpžfÿMûsÌ‘‡â;ÿº_´Æ6*i·qlH”FƒqÝÒó E*Õ!ªµAÑR® i8E?ÒZ_ž;@tôLçûÖ§¸' l9€Ç?þqüêŸÿÅ]ÃÚkå¾_ I¢?dáo`î"ôÜc¢m('9j„méUæ¦,*}æ:AY‘(‘ɎƱ¤µ°4SB Ai‹ñýOCÈŸ»WréÖEáÛH#Àq¯‚µíëöÛoçA9¶>!$?úòs9õÔ ZM¨ÖbZ‹>C塈֒mo8åäY¾pã5¬OúUNØù~sÌo¸ñƹà÷ó¹÷³LÍ7•â4Žžu †´ CžÊ.ò’AÆÛ¬Ø`2€×àô³ eö’HáÛ¨ü¹Oä}ÿqivoó’ºÝ‘¹ÞÃüç+&h 6w—y@l9 «HS™yç¼Í Ù^öJóšWZ#+Éôé­§ÏFRô90]¼õ9З ~±cðŒB¡ÌñÇ܇‘¡F·\¤{.…c• |‰ïû”‹>a¤#…6!¤W (T e‚B¿à9œ¦Â;†DÐi™«›K¤ÂC©Ï€¦&û?c •j™³÷x.þØ'عkW__ùên† (Çáÿ®CDã›0ûtýj’8´­eޏki¾Àî{j4ÃëÛ ¯ Òd,mZ ÂÐgiºHk1@–4¥‘áÙ÷øÅ ¬ßúx6öT›JÿsÍ:ß yœäY ʽŒ0DkŒFó›ßðÓ£/â¤çw…Æq|ã+÷ãìÇ_ÏðhDk»OÔ’ÊšÚXÌü”G©,8âÁW°ó›&¥ž…X°iÓ&n¼ñF¾üÝ9®ýÑ =e”•QتW\}Å­R²»ÓZ M‰ë´ }/¾í†AÑíñŒÎ!zN2ÀœK«§r”è.Mén#•R–zÝé`³B¸‡…¬[;{cÛÚ;òéò4j¸‡‡ÎEå!žçõ§×óJ\k8¦0qÇÀõõMç)Jù²„(‚©ÜŸ¾úZMQ\äû~ƒ#û­¨uâ "ñ¾Ö©Î<ÖÑNê(“ì‘Á:áqŠè~6rŽžèet[†Åí’K.¥T]ŒÖš˜d˦õ.Û}¨w!r¸ )| ‡”Ï<<¿„ïñ«`&}'db'*²(Ü :Ü÷ôf«t¸éq¨­“~àpÊ)'ó¥/]õ;­™Zëÿÿ s2…XøOôÌÅèÖMh£QÚ–/U"™Ù]a÷¶ ^`˜< N©– Œ ‰]=\IZK>‹»K$‰ 0ì^Œ ‰KÑ,‹Ñô/³è•yîÓ̦êa6v µ`tå{øŽ‘—lÐù—þŠŒô%ûvE#ø‡S¼ó1üè‡Ò˜#¬—I‰ôc‚JÚúÝìwìMìwÔíT'š)i‘'< ¾å±÷×òJìèÖe.5©þ»é¤ëI³Nª#ðbarVº¾¨¼³6”ŠŽ?þ8¾ô¥«~§ô:üæaoÿf/D/\ާÐNèÄ ˆBwט›.141¼® ´E£'¶F)8áa_åæ+Ï $G¦´„üø¦_¸n†³6¶Œ¼µ±}àk¨‘ éº*èn•ѽnf)û:tÈ´¿;DÆ”ü*RØÈÔ—Û[žªŽ †1bUâ+)ÑÊ_ür^ô¾q'+FäW¿þw~_ÄÚ,»ï¶jX Ù®tðJÏ—Þƒ1•«/žìë­aÕÄ®MOtRé¦_»;5è7ýIÜýݧã ÂH¡‘ÂCE¢c„(¶“­¤Ž@d~~ç¾úÑ¿!1!§œuG>àŠåÖ2©öîè»÷ÞFªE2Y¢ KY ÚÀ…J+nd´8ɆÊVÊ^mùh2æ »®{Z½”3âzæáˆÝÏÀ›{ Á&CÑ£‘htÍù!–æÊÜuóF}BN|ìw9ì·P ÝúØ.‘4Ë¢ Fš¢´ÄT]?ÁïÜýCæÚLe·ò`OTn´¦P,pôÑGQ­”i¶¢,XßÛí÷nÌMkÐSïÁÔ¯Ãè6ÚX´¹Ò‚æRwUi5 ŒohQ‹@”òH›J"Å)›JjŠ`Ha„EµË`=ûö6~.¥¡­^jo{(ÿÙožãV—2GQjñoøkpe&Ç$¯}–p]uUêjû Ocû¶*å²f|}›Æ|C¹Ä‚­ÄÈM_¸ÿG›×qÆgX§áC÷·=-mêùXÍbŸ{…ÎÖ1­l»K¹¸„0=©þ…hŠ…pŠf²D¨Z®‡\e¨í‚W¦èU£ÏçXœQ71˜˜™Öv¶×oe¶½ƒP5ItL¬Âl„ªE3¶$+x7žÿÔ†¸Ü0v|éuŸÂ“>E¤ÛD)ú»g¿õhŽÛùõÜlË™IÜÏxå"ƒ1Y[XïÐŽF×Ráæ¢òžŸ±ùa”=NzL³§cö¦Ö»ÏÕècbÇ’çæA‡ÌݳßúÀ?±í»ÏFRpÀ2•!á#Õ¦™,Òˆh' BÕB£ð¥ì°}ñ‹¶÷[~ø…GñÙ÷>‘í·MÚóu }vØ{`Òa"æÃÝÙ}U&&Զá­VØc^p)<ªÁëÊ›Y_ÞBɯÙ¿Üýëºñœë¯sÏBœc ™›Ùɵ߼šb~ýx¿¼‚¯/#˜œ­H;î¥-¸0Öa6GmÕ ­]ŽÇ®¸ŸzÍSùÎ%'Õ­Á$–ŠØ¤÷ ¶1&vÿŸþîî_Öv–oÑË0ó<ÿ]íö§vÀþûíÏøø„æüÖO/øý,Äjæþ³ýå襯 TH¢¬Y æ¦ËÜùëÂÐgòÀ:µ‰ƒ N<âÄöˆ7sÛÊ´J£ Á°B!ˆBå>l=þïÙzÜË)t¯1â÷šˆlÿÕýøÕoF¨!×Ûo{·9¾NŸ 6SΙP&A%±m§3:ëßW:fzÇ&>óþ'sæ9—²~¿yÆ&§(*cX‘ü%=n/`1M÷d‰j0‚>± ID4 IÔK1XÏ]ð«›~Nà Z·¼q÷«‰‹vÏmD¢c”±Î¨Ö©S¦QîyÉgZR ƒæß<’Ÿ}ã0ÎzÑ7ÙzÜø&#bˤµ°B:ÆfP žsÆ\½Ý$d ÐAQy–Zï<(Ji”ÒHÏgl|‚·nåî{îqçg~/Æ|ï#s oFÌ~=ûIt2çdGAÔò˜ÞUazG…R5aÝæ&^A[ãíPé*–4}–¦K„M¥ ‰’ÊŒm<•ÍG=ŸñM§qoÜî\ë´vòØZŒ£ÉšpL‚rQòÁWÙ´ÞÕW_Ý÷Žæ]gó³ö£RK¨ EDm‰QP,**Ã1ªé±q=¶~n°g5?Á£õ(þé¢4[q·:W— Çê#r)Sô¾è”aµ•ˆ\ªïí½‡JÓ$DÚFE¡jë¶í ÆF7ÖXÎRç{¢îëJŒ5Íx©Ö=Lµîa>ÜÍRü™éNJ½Ëðõ“j¬³P¤—óä…A+¨ÕÄÍ÷òÚñyb»àuÒØ¡jæDSzDWrÎÉ›?ðnÚI…hšDG€qÆÇÇÃYŒ@R FùÇç=Û-Öq–ÎýÊ›¯¦à•³Ú½ÒqvNm› w1íf!œb)šáÒÿ¼¶gqU{äñ5”NˆT‹F¼À›Þõ,F3´’%"·è+“ ñlTžë+·Ò¨=:èkЙ·OeÒíxd†"aîž-Ütå[,1‰i«&mU'L„ªI˜4©Çs̶w0Õº›©ÖÝìnÝÅTó®ì÷©ÖÝL··±M[g(ç ×u \ñ‰Ç²óîZ§Ñ•FNzž‘˜–ªSçXŒfXŒf¨ÇóÙýÍ×»ÓV êñ|öÞþ1í#{ƺÎÃ:w?¿á§ø²ÀÒ.Ù³:Yž¤ãÔ4’Â)fZÛØÝ¼“©Ö]nÜÍL{;³í̶w°NYá“d=ïöûðý/ÆÕŸ8•ØRGþ|L6/ʉ%u+îõŠi;îRŠ8Ž Ãˆf£E}i‰F½A…ÄqŒïyrè!Àó|~Ÿ¼0¶¥Í¬Î˜Ç÷ æ>‚ÙùjôÒWHTB¢lkY{Lï¬p÷m#Ä‘ÇúŒN¶,â<–$Ú¦ÜKóÛK4‚á„âxŒ–†( (Ïǽ‚Ž} •‘C¸7o÷ŠÔz± @Y&³šßj•5r!\þŽ1žðš9¾óïpô_~—M³êÍéÓ¸áÇWò€ÝÄØDÈî«Y^I(×b–æ‹L ÆŽºŒø¦W÷Yê5õ¨Gqùå—óÎOMó¬Ç3>,ó9DzÛ»ö´ •­ÓG’r9±Ÿ26"oµö•½Z¼\Ýx±GIÀtÐÕÀÛ?ô>^|þ9½ 2ãm#Z™¥±}Y èU¬ÁÏÕ•çþ¸,í™Ö7Óºu;±F¡ÏÑJ–ˆUH[5ùŸO}=Ó¬4+jd6汎h%KH ÍdѤÀÏ”±å¢ò¿‚ ?øžn0ÃZsëF9'5‡‚v©äŸáUè¤ $ĺ92¶ÞÛ¢™,±ÍdF:qlt} …(û5*Áˆ@vÔʲìˆ*pÙ'ÌË_÷YêtŠ„ªE#ž§•,¡tâp% ²ÜEš¤QY @;ÌÅòßÎô9qNCÚªææôæ›o!ðaç?Œž)‘Q6'N­•¤Æ4x!‹¸û£ IÁ+3T§ŒRô*ˆ”/Á„üôš)68í±»ð[úÂ-1ÒÛ4»v:ê(´rÂA)HÏGÅÏ¶Ì I)”Ò´Ã¥@z>Åb™ X¿~’á‘!ZÍvÖÀö»ly£íûšÍ:B‚ è"8Jß+Ú?¶/óW “Ý$Z8jlA³é3µ½Êâ|‘ÊPÌÈú6^ ­Z™²ô8qèSŸ h̾¡´>Æ+-AÖ˜Ø|ûÝçéŒn¸ï½•¾Ï»5Q:Gc\›‡Y[j=׺òÈû—ø‹S |ãÇß¾ãó»ë`®üìÑœýÄŸåæ²ã˜¤í‰síÌG» “&žô©ú#”ý¾cÝêŽÊU–ÍI3˧¥{ÚtKÚí·ÿ–À‡Ý? ÑÎÇ"ÜœDÚ>i¹¥/0îÌŒ¸e#lôÍI~^|à ©^1;ûŒú\÷ÙCÙï i>ª‰ô­ £ôì=ÒJ }×ë¯m·‡F+‰6>‰öPJb„Á³lfŽõL)ÐÆÅ¥@HI´›à€-›9ö˜cøÞ÷~àzÝ?F<Ý8`+¿øÅ T«Ujµ\‰KWb¦ß‡iþ­ÚY®µ`i¾Èλ‡ˆ#Éèd‹ÚhŒ’ijŠeZ¶|w‰Z>~UáWF ¢Dâ6²á¿fÿÞByø öm÷"C.]µÑt§”c$ñš,y·8Ç[ÿv”oœ·››nº‰ïöP·úíÃùÜÿ<”¿ú›ëÙyO•bÅêW†b’9ÉHÉgýq—Ñüé1ý‚*a‘‡=ìa\~ùå|ð²žÿ„a6Oz¢µÕ-øaI ô ZãZ;þ7К>R‹®ÕCðâ¿¿’xÑa´U#¼yÂËZÙ´«j“ &øç—_ÀCG1Y¶õèPÕ]z;Ì¢¯¶j¸4}Ë¡´çyñy;úIOLæj®Ê¥E…5ß9°›½>éÎ_‰/ Oò±¾˜w\ø¦®ÞüµSäK,Έ7'¸ë‡/D ㌶3âmÇÕ^§ϳÍÚZ°²¿_öékúöÿ¨§ï€fÞ€ÞØìˆ›;O|ÿ§sÚÃ~ÅèXƒÂ³dCn=sÎ9—ßÞq'÷lÛ”^F—ÿ¹VžnÓÓÓlÛ¶r¹Ì–-[¬1OvÁÜÅ0{1:¼ ¥-•í÷˜ÙYb×=5‚’fý–ÅJbÕÊ”píg’öRÀâ®"‰–G¼¢&qâNå‘cØ|ÔsY·åLüÂð>ë}o3äV~Z |gÄ€0²ìaþZkä¹~ßc)pΣ«|êË n¸á´µûÝ·~ï<¦þ&&"ªµ˜æB¡õ!¥jB³îǧÜo_ºñ ÇèʧžÅõ›®gÛ¶m¼ýã³|ðÕëº÷"òb¤§Ib( üÒîbï#r³æ,p¯¡Ì×É|¼íïäoÏ&•`˜j0ꌉÈ>—¶¸¼eˆá¾U !DV¯OÙÒtnŠToÄóüÏ'¯Z&ËÑQ˜ZmvÂ{úþ·ðê—½É÷λ<`¤A‰0¶GûÂwÿ /{å­ÙA³oÍñ–»û­?|"ÆÀ£`Û̬3c…H,À,‡Ë>õµÜa;ŽÕÕ—ü”gŸw0±³BáØ„ò‘q”¸æëGð„¿º¾ë4ŸÿÖ§õEèO8çl®Øˆß«La§ÇItÄ~üó}ç×+€’åŒ5â÷lÛŽ'¡¹ó4Œ‹Ä-¸­ñÐÕÅ—âY×z×äü^É}0Z:B Ò’/áqõgnåÙçL¤Úø"pªgé~¦†Ðâ"|nøÁ(xxh¹Õ…v­ ‘_Œß— ÂYIƒ ¡²Ù+¥ åäQ-Ò=í~0*a~~Ï/ð—gý%ssó¼ó]ïbzfÆê`òFG‡‘RP¯·ÃpMF<ÝN9å¾|úÓŸbqq‘ã”–>ˆšÿ,F5³¾pc }vÞUcvW…‘õmF7¶@š¬¥LJ<–fêS%dÑPžˆÀ(å¡µÏØæ3Ù|ôùŒ¬?){öömý!æŸõx"'”eHW/o¯EùKäÚAÜxãù–ØeçÎüpâC]o÷Ô:¾ü¹³ñ<Ãèxhµš…bBm$B(õÐÏwêzùÃ%>'tŸ¼ªÎ¯~öô•ëU/øQŒ£Ž´^²k°—4:ô¿ðÓźÖAn§Ñzà÷¡‹>f 36ÊNSØé¢ï‰€Š?LÕ¡èU0ñ<õx>«­†ª•-Ôx‘Ø)²]ò‰/æ€fyyï<¯ÕÁ±ÑXÙ¯e©^ë«—N3\ )ze¦¶7 ®¼§(®Šm7žmåcSGÆtZª¬Ó¤4\Ÿ~›K>qÆ¡¥íHìÀö5_|ñÿ©vvRcé ßE¨"Ã/!ùéõÇÒ­Ö§»åNÝÏ •Y_ÞB5éÊ\,›í0Ž §‹«ÝtÝCãÄYì¹k< RîøÞÙœ¤éôØõÐ[禞±¶’%î{| éÙh^ t?…H9>öɯÐLl‰ÆËêü%<áwEƒáÒìVªl3IvÞÂ͉P,øÔjFF†eݺ Ö­gll”±±Qª•¥R‰B¡„ïYJX­5FÛ¨^% ósc8÷™çpÎ3žA¡P´ï1)%›6íω'žÀá‡ÊÐPÍÅ'f•F¼ã¼=ç¼§³ó7FÝy>jîÓèœ×Z°´Pä·717]bÝuÆ753ÙÑDK-ˆÚ>s;J,î*ãU¥‰#-{Á:6ù|;õÍŒ¬?yŸ¿7òV¤í÷Ûr%¥Ak[“õ½µNWGõ!Ùo]Àkαuñk¯íûĶžÌí·QªXA•¨á!´È¨[u(8äÐi‘k{½ÓÏãðÃGk¸àßç»ÁµÔo‡Ë®Šk„ãX· ¦V†fûCïp€ Iº@›Þß5Ã… ¤ðP&v(B›)dÖž$…G¢m›YÓµ(¥õÍvR§¥uñFVûl¼{¸Ù÷*å`?wÁ»_™eº¢r×[îËÀF¸^öâ×ôÔ`‹¬Ng·ûyØqë}‰šë,:Üõ‡ÛÞè(SNKQÖ)¹I_Ü#œÞƒ4BdÏ>ÊÂæ8¿øùdÏüö<·ÆpŸÑû1RX'‚½ºVzÚ±zÏ{j×N< í…ƒ\”Ü3'&ÊqR@f¬C>õïWà{Âq™¶oêŽV¸N‘æ ù˜Íd™’WÅ“Aæ¤ø•ìÚnÜçZ«Ï¿ë0ŽFJAxT*%F†k¬_7Á† “lØ0Éää:6L®gtt˜ÚÐ¥rÉ)©I7­š8Ž™¥V«ñüœÏ#ñˆlã8æÖ[ogÇŽT«:è 6n˜¤\,¬rþí¶qæ¥O‡lý E~îzÙ…•=¦wV¹ó×£(-ØÿÐ%†&BkÀ+$•(Ik±ÀÌÝZ‹Jã1Åq…B¢tòèq|òëÙzâ+(–7Ü«^öòe2)ïHZò|ƒJ$ÉZ8D¶±3ê÷ô1ß}wTN…/^ò44†Ñu-t"…‚¦TMð„Á3pÜéW’˜Vÿ!dË–-|áÛ-~pc»ÇجÎGÊÞn¿ ì'„Áh«G.÷ú)#á­ï{ í¤Î|8E¨[(†ÊPìh‡8^¢™,f£‘,8ÐÒRÆ:×L–¨GsüÏ'®¤‹¼Ä˜Çþ]8.…°=ËþÖ‰ÊSySÛEað„OÉ«v¥ö}Y°t·kœ¯Ý¿=Ñv  3®tb •ü¥$7±¹äãW挢ÐhÇ[/|³#I‰)xe ^Éòô<Âý»ùæ ”<ÍÍçHÑ‚ÅĪŸ¥¤Tûî_çkº°íÁD—æ¹emëÌvb:ýÈ'ñ¤°Æ[© šœF}&\äæfëð1 Æ)zeǯ/;uòœÀw¿d†[`\ö#Õ¼×îXÆEé8ô;ø¾ X ª2>6ÂúÉulܰ'Ù0¹ž±± ªCU ¥"RJ’DѨ×Ù¹s'¸•ç=ÿ|?üPŒQH)i6[ÜxãMüìg7Ðj5Ù´y3[:ˆÑÑá=Î}N>ZsÁ‹àÿ<Ƈë™WZ ›JßuW•r-a¿ƒ–(TqìPéJE’¥é"s;Êh#©LFø5e ^Ä£û?’ƒOy=yÒ+í³ÔûjäÎöûÅÔZ …vQ‘Aøk4\¹yúåªH.|åz^öî)¾úÕ¯òÀû½¤ëSÍ{Î䯾Èq'Üź -vn«”•¡ˆVÝ#Œ|6mjðëý¯†Oè;êCê¯`îä9~ò“Ÿðú/ðµ÷¯° ­¼• „FkI l½MHˇ®Ô>"7YJ”Qïà×o{ÿ[xÁóžK-Å |¤ð³hVéE< kAH¶œ«‹âŠå½Vü¿µ;9oz×+yÓ«ÞеÓÙ}Ú ƒ²zÕÂ#ðмâ¥ÿÈ{Þÿ6á•l浇Sè>Ï™‡fCJàbÙÛ’Œ:·»ªsç¼òµ²HɯY§c{Øsuéì§ÜsWΛå¹ÖZ’YÑæç„Bff§3'uöžS-ÚݘŒp(“ÄĹڼà…/|(°íP:Š¡`O^(<PôÊ:š°NÓHÀ=‡ÞÁtl»³¦ÑajK%‘¾Gâb‹ž“ön;@œ”øžçùT„ÁUk!f›F½E£Ù¢Ý‰¢ˆÙÙ9ªÕ!öЇröcË…¿ýa9ð›¡ÑhsÛm·±~ýz:è ªµ·ÞzssstK(»Ì^Usæƒá <Áf*’D:ä¹dq¾ÀÔö*QÛcdC›¡ñD‘—±¹…MŸ¥™"í†_I¹Ò!Ž} •-¬Ûúx6ò×TGÞg¡÷Eät-V)“›¶_Yëe¤/÷àØú çŠœä¦ð8ïl•k­ùZðÏ=KºÇ7?ó´2T†bªC1­%)`h<†¤û«‰˜xècÆÀ÷~óåï·ºÒ“«5äá'Ô &ñ~wÂñûüà ˆ|cøðGþPµ.-íIW£u=Äiê¸+…ìøÚ•qõà]Þ¯&÷{½ÀnaŽT¼7*ï,õ$&'b»,J^•‚W^óñçg6ÚÈ;¥u½Õöµ8¯ËeBzß;^ÚŸZ0†ß— ]QµD2==žOM,3GkNq¬!CÑÙfwÚEb“Í ª«Õ­è•ÙP>ÃÆNá áã.L,kÄÁ2Â…ª‰@Rö‡²ö9C„’m·WzÄxòÄ*v|=Y…ž}Ýy_øÔj5ÆÇÇ™œ\Ïøø8CÃÃA@»Ýf×®HÏç)Oy Çl§"¬2_’vìØÁÍ7ߌ1†<€r¹˜u%¤Ûæ š—<Þò8í«*©´Dc õîí¶Ý>‚Ö’u[š ­ Ñ@œx.©Ï˜Ý^¦Ýò(ŒX®t QÕ‰SØz«ØrÔó÷ñ}†|@ÚÁ—ÎQwjÉF4JC¯ey–¹ú¸kq¯=ßç²wØø·¿ýíþ/üüÉ|çÚ“(–µáHt"(ª£I]²n<¦xà•}ÈÒÃyÈC¬1ãG—ÐJ³–úí®Y'›(p`kÐÔÔ›øˆ\¬j1Κ|:¶°ŽÀ+â Û¿›"†—sâl‡·¶7×"4ØiX{[ßj·7½û•$&"Îß±|‘KÇ/?ÌÛ_ýoÙ eÙ¥àW©º­Q²u_å\œŠ×r¥˜.\‚­°£èíù|„S¿[\üCu˜Ý©f£äRèq–BOyÔÓgÄÃ… &+2QÚŸ‚,Y:Úâ,ùa †æˆ´E¯§Y¢®§\X‡ni©å¦*ÅBä€te©Œ» šãiÏý]kP|jC5ÆÇÇchxÏó¨×ëìØ¾cŽ=–'<በç®;=ÙÙYnþÕÍ„aÈää<)²ÇàA'hÞñ xéÓaë&2t 4—\E { IDATîþÍÓÛkTG¢Nk™²‚'‰–Ä‘giVw”0Jc ^E£ŒD™ ë¶>‘COyë<›BitŸeÞgÈû·0²HõŒ9ÌXå/OvÔW£Ï ¸¸á~?ë´ÎxÉâß÷}üú«žÇR]22R(*ÚK>ž€rUQ(*ˆ$Ç=è[´Å·híÙH)ùåo—|½½&C;®“®J„xÞÞ„ÔùTêïP+«7Pé*÷– ß”1€²¸G´szžÆhþëâϬÒhÿ.×”®ÐÇOäêáiTž:‡)uk ‹”¼Õ`„º•1í\+]‘ªÐ•\ÔéÜF»hÔ¬H±»òÜïé²sÏ‚1D±è޼;–«3þ@i QX Ê1üi“›×ZVòk ãT|['u‹–ª¯j¤˜ŒX‡¹Ÿ•Ò5Ç« Rw|é8œ‚5Æ¢ç~ˆ\±ÂÞ^‘eü,(®ƒ.—Îà !RP©”cbbœááa„ÌÌÌÐj6yÌYgqä‡÷Ý~ßø^@½Ùà®»î"††‡(5O;KóÞÿ?F†q-c¶ulnºÌo5F³°~sƒÑ-„gÅL’ÄCiIØô™½»B}¦@0¤(ÇØö3¯¸…Ž{9‡œô ­;ùûRZÛgÈÿü¶RÁ=è²Ó,¤MôZ:‹„S'BvEãöÿ¬QÿþÇïÀM7ÝÔÿñp ×]õH}óÅ Âhõ†¼à“•<Ï^»¶Æ¥×X#¿[ÏOÏ¢X6%û±7\ÁDi† ã²°êE] xúyOÖ+±7©õÜ³âÆ›þõ5ËFåk° ^‰¢Wæcoú2‘j9®y2:ÔÕ¤ò•X°mU*tÔ£a¦l¶j§e/ mŠÐV&&Ò!È&y½ùÎ{ŸZ_ñ^åRé³³Ùk­=ªµ´+³(ø³:㤽',éK¤Z{àu_~,E³4OAÚ% ÊVöߺ4 ÔÍ ‘:[&'Sši1Ðy¢«o T*022ÂÄÄ8CC5”RlÛ¶­[䌿8J¥’=_R*•¨Ö*ÔªU¢0bjjŠ7¼á…’·¾Ž»U‘T‰#§‰»ï®rׯGŠšý^¤8»(Ü ž$JPŸ˜¾³Lz”ÖGøC e<’ħ:v‡œò6y…Êä>Túï’u¾7\¤RîQwLf)U¬y-éA­‹þEäøÃ‡²×¾ë|^pÀE]{¸ñ[çpÆ£¯£\ ©Tc¶‡_ÔT†cÚ-Ÿ°áqôý¯çÛ¿>“RÒ_':Õ<“k ×p÷®ˆ‹®lñâ'­Ñ©´m½ÓhT"ñ|•&'H’½M#ïµRÔ*Œ£íŠ ÅÊvÆÀhq2#i&K@´:gÆ+3\˜è,®}îÝÂbpNÞ29Œ4*\V:Æ7Û[žÄŒÞÕºWöÇ;ÇÅ$Ñ&€L¦tEžòÐÕ£ÉS²•”¶Xïžc~÷lÇ*c“{1{÷© M³4spf¼µ‹Æ»©cë4Gþïžè·©ûTÍ-ÕØr`ŒA—.ÒN+)æÃä¦M8GIƒçu"pƒ…JQò¤¿£) ŒŽŽfkT³Ù ÝnógœÁ%—üwÜq§ý^*Õ A¡€V¶ö~äAu^õLÁ#¨)l*Ý[Ú’w1?]bt}‹‘ !F”ò2¦¶$–Ôg‹,Í%Me4ßR±Qaâ€Gràq/¢:vÔ>+¼/"_Ý%®áÇ3¹rŸ•]ØÍëO­ Ù7~}åqlß¾o½·kžå¿.þk‚@34¡"[+÷}Mm8“P <&ûÌÀSðG8óÌ3ø—OµX¨¯nÑi…NÆ5¥«E ];^¬ö>µ¾ÞPO:¸ÓÆ×™÷«ßñsJ~5¥”­{:–/ Nôc˜¿}Á߈ºåÊcÍs“ÏÜtÆ›ÞóºQ¹2K‡§ll©Ìg[Ù¾yµ’´i.]=:±;ÓÖV¨¬jmQî èY®lÆsç¯tÂúõó{žãûYkÙbÐÐ9èäA? ¾TéÖ?ïa4®}q1šf¦½=SÛÛ1ÕºÇòɇ»™ wYr"SoÈÌq2F¸(Zf´¯ÆtÜ4-o[f;Q¹q-ié{Òß;©v™ý¡06>ÊÆX·n­ Gu4Çs,RÊÜ~=?`dHò„¿€w¿Rñ¸ÓcŠÅ2å±´p×­#,ÌY·¥ÉØþmË ˜Hb%ˆË•>¿³ÌÒL`XQ^£… N¼Òö;ìY|òk÷ñ}ù—Õ¼>‡°Ýš`’5ö‘{=Hˆî ›7TxÅ3öã=ŸÞÁõ×_ÏiGvïfæ–'p˯®æ>Gìfi¡@s>`d2¤PI(ÔÂÈã¤SoáªA%êT9¥ñL®¾Ž™ÅE.¼´½ºí»ˆ\ƒïëBìm|$z"ò½1äV“)@»wÛ¯éª|õ7RðGê‘dÆ£Ûô‚TÓZ ‰çäC_÷² xË…ìÁ“Û %2{Ä#%z‚ßî¨\Ðé9ÖF¡h¥ú œIõ¨ûN³;"ŸØïVî¼ýˆ®÷æ ä€íÊ‘òRžéµ¤ÀºÄ±ÇmÞ2½&'(udVŽˆ÷´¿`ÌÚH˾cÛÇòˆgï·ð@øvÈÀ¦ÐeÁQ@È"F0¢èœ9Û•¶µ!s 5‰Ö&‹BàIaê=†[)çynUëDòit' Zâ8¢Ùl²´ÔäàƒbllŒ8ž"ðáä#CÎyL›3R)Ç“.ЋÓ;*,Í©ŽÄŒN¶‘&Ž¥#D¡Gc¶Hs1 ¥‰-HôÁð©Œòtƶœ†ô÷¼ìK­³—FC`‘ëî»(ð-^3³›]4EnØÌ}Ý—zl¸Ä»þÎÖ¸¯¹¦Ÿ~µ±í¡üä‡GR,)†FC¢¦‡Q‚R5¡è¨[:ô.ôèžÊÉóç±qãFš«³ãT+ Œp‹N¿Çí¼7F8¿üímD.{Øò:)FÑ&ÔF+«¡ÝV À•¾´TP5ûF¤Úc%CY¤è•ñE@2–=¦ÙY«ªŒ×½¨÷ !†G¦smPIVêJOçÆòŽ Ýó($y …Ê´ëW™vû ­à•8÷¼¿ÚC Ü^Ï•oû#Åu–ÇõV§Y„ÄÑž¦ÜåÅò,÷;9éÛÑ[–JÿŸ´>Ý&R­ŒåNdiýÞGÏ<ÙÐÆ:ïÚØïl+§Mï2L?·¸@pÞsžÞ³v=£2—mãæža“wëô÷\›Ìé÷\œÿ{ŠÙ±$M6åneI…S\3.3eiX-)Lâ"Ïó\”n²(ÊÄ™°E¤Û™ÆvËñ¨/E³}â¶j L’q]§‘yªaþ²¾!üî×™ƒ¶†ˆDÐmÀeÐ5^ù–Ù:¸jf½ÝV1³ì¨í.¼¾ó?ìøïd|âÚ­zQëißôºÒæœQì¿þôoi5à½bÖ—²ÇuPÚ¡jrÒý~½¬#“J'„ªI3YB™$ão_Á,¼ÁÃ}çîºg»íc$Z âÄί2 ‘nÑN(tnY¤âñå¯Nö=—Ý΃ßå䬊WŠ‹°k„ϧ_õ>óê÷pé«ÞÆ{_pnVß·‘wÞ ®ƒFvDhÜÿ§º5öÿ½÷“å*ïü?çTè09ܬ+Ý+¸Ê I( €°00HÂfmÖ?X{k0¶÷gì%ØØ´‹D2$D ¡ÊBWáÆI=ÓÓ¹«êœ³œêêêžž™î+ /xêyæ™™žžîªÓUõ}ßïû¾ß¯´säÉ9Ñv¡£æ­µ&êõ:Õj•b±Èüü‡bß¾G˜™™eÏÑ’?ùÅ[_ðÔ“”-5*;4]=:Ê¡GFq}ͦ5†ÆC”ñXYIÊ >‹ó„¡$;Ñx •ƒÊœÎøî7°ã„W0µåxr¹nLn€ù¼9ŽIõS‰vr-Ì€ ÐÊ{5½¹Y9ÂÅó|®}ï)@o‘S9‘ï]¾§™ÞZ¥^vQMI6¯Èd(ضmwëwzî͹Å×sì±ý) y®½‡Kap„­mýL=gðf.±¢sЗ©uKóu¬¥Ã7þò|'ˆ€ŠÁ»e„bë™ËÔU…r°ÈrsŽÅÆ!‡©ÅÈ­Ñ­Ž:´ H†½qþì÷ÞÖÀ:¾R`<бõïYùÓžùµÄ-ÒA¢Á>(­oºÏ?éñ´ËnC%f ª=;—-á’uíÌzÖâ÷_ÿºdÍ;Ö f¾öž›q¥g©ZÕl;Ñ™¶ž{ ±{X•ß|îrüzÞš_¯ûë7±Ø8LSÕzè·›ìÁË_ùœ5ƒH"eì¤Jë÷È$C5\&ЄVoQ)9w„¯}ö…I€Ô-5×½\qÝ›x¶:*ìà«o¿Ž¯¿ý“lÉïbÔŸ"ïŽs†cÛQéx˜ô !¤ã&”¸62™è°,ŒÀèxâÆX÷\/D­ JÛrY3i6šÍ&•J……Â"‡ÍpàÀöíÛÇ£îÃW7ñ‡/=Èk^¨Ù¾ÅRèZ; ÕŠÇ#Œ±8—e|KÉí5_ÅceZI‚¦ÃÒ¡˳YdV“› ÁW„JR,ƒ3ökl>á-lÝý,Æ&¶’Ëåð<ÇqE¹m£F>ü:Ö¼Õ%ª´uYijHq¯Q´ôÍ7ö[¾|;pŸ©ý®ÊÿeÇkÞqãâi—ü˜übl¼I½ì14Ùdh" ¾ßEº‚S.ý·òBrû£vïÞÍC=´þÍÞ*Ó¢´ ^D«;VBé¼³F~$@Gv¢}ź!à«ñ펺x2Že¢XM«Û’.¨:µ¨Äǯù:/|ɹdÝ¡ØK&ã[vÈvr»Ò'ëaŒá¿÷g¼ãþUãpd‡gˆA¼Çk¥·g¿ða~xƒ¡UÈ8ùØ,5lúl$lcjƦšœùô¯sówžagÕc]zc,{N©[ë–0ìMðgoþÞý÷­(Üðž›È8® €T”­ùè–»[ ¬€Ê¥Ï¸-[\úm Bu‡È:C«6¼Yö`šI¹wþÞSØ’?†Éìv2NnÅë)qúËOáÐh4Ð.{Í3¸öïþ )|™aK-Ó‰ƒ#]|¬©+=þôMÄXfo{ß[9Q!RS ®ÿïßDÒŽtñ¤Lµ¨L±9‹¸ÛÒ½²]/Ogó-°‹W×µ£e2V¨Ô ×ÍF–j7ƲaÒh4¨Tê”Je ‹‹ÌÎÎ2?_ 0'MßÂ3θƒ-“%{=(ûþÊÀáƒY¾ô Ÿëo-šˆ+¯<÷R¥¢(ÖJ¯»,Ïd ê.ÙÉÐ*´iP‘Ëì¢âº¯Uùëþ£ãÛÈf³¸®Ûà ¾äG¶ŽiU¢l‡¨’‰•ç`t°Ó³¶ÛyÇOk% ¾û±ó¸øwnâg?ûW×M‘oåÆ/<¼üsä‡Cê5Xw´á©€åÙ,“²Ç|ðѮإ§WÿÅ3¹ýöÛ×Üõf@l#RÙ$i0¡D:~&ÖGê¯Laâl§K#nZoÕÅ Úf᩺xS×cg³RBÍÖ¢r’=»Âë°6u¥Ça´¥ˆ¥Œožv&½ û¡ž§[¬¢¬VW†?~÷?ðÞ·½_fÛ£P1=ÚnøZÐ njßÛYìs®¾“ûïÞIavYw¨Í¦Äi à IÎà=ðN&³Û˜Îîˆep}rî*Á”ªRÊ4T•¦ªÓP5Æ7?Ìk^íã_ëÆmŒa2»Ý*ô ‡†n& o-æG ‡¬;lµèÝaòÞÃÞD,Ô¹i£i¨*Bº„‘¡ØW)H‚9eB"âH7®s;B …)pŒu¢ËºCäÜ>øÖ‘qrŒù›ðœ•²³®ðɺvýÖ˜F ™X¢*Q™«ï³Ù¸tÑqéBŒ™“ô‰Ø¤3IR"[£hR&µs£!RB8q=Ü„µZ“R¹ÂÒR‘Ba‰¹ùyfgghVá©»ÂŧÝÇp.@++W­Œû¾ÿ¾ ýQÃg¿×ö{øÖO R’g_ä¢âzxi&‹6‚üæ‘ÑD‘ Jî(àS_­òÃ;š|æÉ§S­–;@|½sacÛ Ö׎VœøÂ±¹’Hi]«AéàTPB­9kÒ}çœ6•¼Ä?zÊ—½ÿß~‹ÙÙQFÇ2YEPup„&—ÈEÐt8õˆDqÅ-\ ¸âè׬ÿA‹T!­G»šPAFÞ¯9¢9kÚµçdí¼6-\¾öß¿¹F]¼F#ªÐL¼Æ­£Ù§?yk²æ×}ò´Q4¢JR#oÑÖ¶^—ÿþk^šúܼΟŒ…ôÒ‹¿ûñëù©/û·©Mùø8­í¨• ín ë³Òk—RTþ ^þ#Œc6P¸–mÕÍ\iÝ»l#`žñÌæŽf¶V3a¨›4U- ¦Õ .S©GeêQ™Àxík$ÇÜ>öÕ¿„ôëÏVÃ[gG¼À‹5†¼1òÞywWú+tЛªN%\â@å~ .µzH¨ QA/ù½7'V¸‘ RcV¼¥¥wŸqòö½ÜQ\á%­fž¢j³ºA=ªP —í9ªjT‚%‡)…¤î.ãÏÊqÚ¥%!íù(„¥Ù…”±KYzÔU$£uRZ!¥AP­Õ)Ë æææ9tè0ûìçà‡ñÂÛ¹â´xÖÙw1œ ˆZ¾áJP«xû½êŠãûÛCi>Cñ`\,ˆû†H9,. nü·ûñe¾[3QËô}#ßòÇoÓÄ#N­æ©‰ ùÜ@Õö.½õTͳë«ÌïýÒeìÛ·oå‡`†ùêµ/EÃøtAÔtÈf¹‘”f|4`üø/õÜ«üì.Î?ÿüµkä8-·7FK;Æ¢9_Ái#V2Rë"Ñ]àùw}³ºx‰¦®ÇÙx‰ë>õÓò})V~³´eZ-͆A=êå¯]×ëdºhr’ÿív‡êÈÈe¦Ç—Ÿúj?þÎ]›Ô™Ó¯¿²Tcz6há#„™ø»Ýo!}Ž=.à7_v=µÈ Ë´¼¸Ã؃»ظÂ#ë %^-lª•°˜Ô–›ºN-,QlÎQ ¨E¥¸^ñê;9å”! Ò«·¿bÚ oV«¼ÕØ×ê,w„‡/³xNOú èwk—ƒsµG9P¹eêˆ0‘õp½þ÷¡-'.pÊDI€£Â.¾“íp1óe®gàÐ ÚkÔTµ”özÙ6b†K,ó4¢*BzèVͳ)ÖÁOkƱõqO–iGÑbðñ ¹Ö&)‹‚€Z­A¹\¦PXdfvŽ}û÷³ÿÀæg`ÛÐxÎÙßáœö!…Í „¡¤¸åÀƒ£Üy¿äÛ?«õ¼T=¤ùà5Šr!‹;¬ÉMhàáŠk¿\å¯+ñÐ~µ¢d²àÔúãwÒÒè‰Öˆ&þ]ô=¾•dä nNG+­°"Ÿg›eí:j´áÞ÷2þè„Ot¼ôÜÏfßÞ¯rÔ±û­ÍiÕÃõù‘fÍ¥Q÷8íÂïò½Ÿ‰m¥-šb‘ù²‰×Bam6\:­%È(qAEÔÀ¤©ù*Íni ë9ú$<Ò..-Å诼ý3«ÖÅ›ªF5Z¦.ÅuñMUã-r›Û¨?û~[:U‘ÌKdÏzùŸ¿þõ¼ó?Ú>Öî™çDü$L´´Ó®b¦•qö,°¯”µÍd=œx¶=-cià(édOˉv¾_<¯ÜüíŸÏ}zÈ|ƒë>~N4Š—¤pÐ&ƒ6Çm{»ªA(šôwK~µUXæ)6稄EªJ`yÕëîã™ÏI£XQkïYó^ÿþ÷ðŽ×¾¤£~ÝVÄ‘.Ú86 £N¨œÃÒZ§zTf±q˜r°D£©h†m1!ÇqÈäFÈåFxÖoüŒ»árÌÄ£}RH”p<wéË8ˆë^“µJ­€³¡j±Í©í”·I…L²q!\Ûè&$kÉ‹”˜8;×FÄjŒv ZjŒö0D*¤(*Õ&µZâr™…Â"só ÌÍÎc‚8cç휳g/SãuÛ‘®íçP¯»,ÌäY^ÈâåW¥ÒX™»æë.}Z†£Æ%‘’Tk‚ÛïkòåïÔ¸ù΀ ìÝû°â@þ¸fä­(_ÄàѪ˜”LvPê­“Uä&ɬ›°œ‡¾û¶_üŠÅ"?¿–Ó‹/M=Ýás×üÿù/ÞÅðh@µâ7cȆ ‡Œ„ͧ}–ÅÛÞ´b×üÂæuw½%K‰N{e‹ÁÇÏzˆâ¬tÄ lš- ï±F]ÜfN-·7·ÕÂç3´ê®þå?†·ý§R5 ÏÉĵX·-‰X¥^žâ´£j,åi3Ñr’Õ¦´ 6#]6–«ÜùAÀýЧù‹7\•ˆÄ´À,L¬7ÛZé-ïõ¤!¬•¯XO’ ä‚K4ÛŽú1ÿüá£XšÙ‰ïdñd–È„¸Ú³]çªAÍ)% O2w­’®ôFd³Íjh'F¦áÞTâôSÇ»‚:Ñ¡l¶òAWýºÕ‰L6.‘¨S±œ˜pñdWz) 7(£lÉEÕÐFQ©4C;¥a ä\\~ ¤Ïs«€áFnüêY˜X,Æ•¾-qèPXš>ãäñMH ú‹ö#&lGCÙrOSÕRôéØ Ï‰tfTà´Î/Õzd½âÓuÈÍ’™ÁÃs_\æy/þ6/»z9w„¬3„çd’Þ ÇØÀE„"‘þí5û,RÍJ‡4TP7l¤£D¨Hé(nâ›°å7é¡M0 Ç22þ q-=ž’ÑÚNšh­ BC3ˆ¨Ö,Ë,.™›/033Giù0{6ÝÂy'ÜËÎÍËR†'FP˜É3w`Ç3L晴RTê†ë¤Y¯Uæ[759ýø¯¿Î÷omRXÖ° ˆ8އRáÊþ‡ò®Ì¿hÎóÀDqMØ €+A*³Äe‡’S'·éu«¼"xóËŽçOßwarƒ÷^ž¾­ã-~üõWsÖùoajsjÙ£VôÈO„ä†#šu£á„‹¯cÀ*AY IDATï oë¢(×^¯¬®kIVF ÚÊäÖu@f"m“šw T½'Ðuƒ~‡Â:u¹Ò·UØnjÕ[5d}ŸOÿ밞ܣ}ý|ê.Þø’³òÆÑFS*”ÃEšQ !¬©JÆÉãÅ™tÆÉÛúxÌZ4T•FTa¶þ(‡«{©Kh:›²ZàâgF,° Ñç¹l÷ñíÿtÿíU±¬ëÔÃ2åp‰FTézŸÞï'dW×zˆ§ÿöÊWžóüùügàÇ?œF5&p¥‡.®ðâr‘íMˆb´–£™ô9ã¼Y~ûåclß¾­•Þ ÈÅšÇÝb þê7†«Ÿ;DÞÁ‘ž¥¨£*Ž´â5ž“Áĵþî'}~Õ:y{)Ž7D&?j×)ÈŸøì~~ÿuÇ’u†ðe6éÏhj¬ê'â1²––z¼[Rµ_¾qFØ~#Ú"î ÑÆAâÆÙ¹gÛH«Ä(ãÚ¹¶úûÍ@ÑhD,—«—+,–˜›[`n¾€j<Ä…ÇÝÄSžô(£CM´DÚªZÃÌ£#,Îe™ ß\Çq­ëRIpÓO×ïúÝ»?â}/±wH´Ê¤ËF¾‘‘?a[ ãFa‡ªµ†ÁF¨[Ô—\逶cçu}_pÍ{Ïão»‰üà<óÜ®[[õX¾ûµgðë/ü&ãÓ ç³è¼ ;’©ºÔ«G÷{oþ,ŸÚ÷žç2E‚LN£#ab#Ð åäZåõÞÌ„H;|ÉÄ­ku ëŸV™¾î›‡ÑF³Üœg¦ö0óõ}ÔÂÒ*€Åuáþ@`ÄŸÄÍbã0 =ÁØŽ8Ø1£Œ¯ûû£´fuu…®;Þá罞„m ül†wÿ¯[ЭQŠÍt+ý«…xÞHoZ½ (ÓÏ™Þ ¯}#¼ö%n¾y‘ÛnU<ü Oa.G­êFD?_crºÎ®Ý!g?5ÃÅOŽ¢§{]·ÒߪÝ÷fű·Õðé¯DÀRÇc¿öÌ9|'‹iê8¨ª®y~5ƒ¶^»ë:d²£6Àj­[2àÓ›}®ýüW=o4îÚ÷hD6x“nD&«1ä²Ôë‚jE4T$;€=4_ºa ÄŠI&2ü¤ÉÓÄßAÆt»mž5-5=d"Õ)Mi‚ÈP­”Ê5––JÌ-,& >âÞÅ%O¹…wÎâ¹­E¢—^«x|h„zÕcê¨Ã뮌àð‚faiý`~jz {,F+É– ßò#Máû~¦ã´ÔܬŒ0±H çHjä­Lœ•1"iÛêòö îê_ßÍ+ÞvÆ>ßü¯¼ óoó³ï¼œ žñ=F'š”–|üd@~4 ¨;¨¦ä„‹>ý_>¹‡Xï-ãÛ0D+®‰©u»¥ê y»F.beª7|àƒq&—¾‘ËŸUëæÛáö{ÿî>Üçç«bðÈöy´2¾›×8ZßcAØl?+Ç'•iŠŽÿ+êÃ@¿Ú1™Ô£ög¯EžXy¥Änìô«þ½óçsÎ3œÓ¡o¦JI#ÀhÀEt~ÞÝÇ/ºÖg•ÏEt_¯c¶_7ܘÅÐS§¥?ðÑ^Ó¹†ÆÆÆÈf2ÌζÅ`Èó›™µ  £¬–^ÿÏ|© b®Õ"ž =$iƒ$cbÿo! #M£"„K&›9!;Ç* BZ`ñï/fø¬2œˆuØM|})eCC½R­5).W),–˜›_d~¡ÀÒâAvOýŒËOÿ)Û6•cÏp{+%Y.f8ôÐ(ÃÖcËdó‘u,‹^iÉ—¿Ú)žõ’\Ž‘‘a‹ ¾䃀´X¥6;؉Ӓ–0ÉýP$6žƒ4l VI$t;4³½±ØÖp#t,îÐu€o~ôr.Õ7¹ýöÛyA—HŒŒ¦øò§®â%¯ùS[êÚ7BfH’ËE4òÕªÇÖ£ðóM7¡æÏïkß«uÍYYZ3ý&Ö¤ö“îÖ ÆÁ¬h€“)KRÑm±ÆgÛËu›„xB¦'{½÷j½V]Xô>[_qâ­êNp[ù˜Xãoëgå°¾ü«Xåº}¬AþžÇÞuÜ)ðî^D×c¦éxy)¬ð‘ç{4‚xW€a'K6?Ž9HϨ‹ûbÚV³-;Pë¹ÔyìBÄ‚RBbDd«ô"ÖØ—™”)Œ‡ðÒÇ$£–~\+÷Û»pÐÆ‰­MJiš¡Þˆ(•k—«,ŠÌ/,1;7n>ÂS޹‹Nyñá¦ðøšš.…Ù< 3929ÅôÎާ‰¢–í¨$Œõ’Ïw¯ßÌçyAàûþ@ žÍæi4jH»‘‘?öÍsl6Žc/P­íía -”nA˜–CÊi%½.''“º±]xö¶äe?:ûf^µåv¼ÕŸ^Éý׳mÇcMªË#›š OÔË>FÁ©—}žÛ>õT$ëÕÉ´uzŒÒ5˜¦°v‰ƒ]W?¢‡|m*{ïÊLÓ7³ôL úab猠€¯èõjÂícZ/aicIŒºG&Þœ×ËÂtÑ#xîÅ>ȵ}ãï}Ü]`Þs ÿÿÿøÛŽ×µ• A6äŒo<Þ´ñqýávgª/“z‘¸æ®ü}EP*bïp‰Fˆ¤³'“˜)µ´ÚÛ²½.Âñm½œXáMx±²›½–”‚H)MM­R®ÔY\*3¿°Äü …Y†Ýû9çäŸq枃x޶£eF • Rö™?˜§RÊ02Ý`|S$„¡@i¥aÝ¡¼èS+ùTKë^a255Åìì,-kà~¶nàߨ~%\†Fê5—°îàe#Ó grLN-‘?ú[4ö]±~í×ÜB“ІZCA³Û*AöÎì¼½´òHÙqsëRÒ«|þBÁùa zíO‹V^ Ø=3Ñ>¾Ä d[;O_3è‡vïÅô\×Þ@-ÖËÄ×`ÐDúx/Z½û8ßóž¿´]Ü¢sGÐŒÁÊy\'—üì8¹x„…¤Ð&å&É.MÇzu’ £gâ`µÓ£#°@îdNcd\ó¶€.[4;à%H76R±#hJY±ªZÃŽÐKU–KÌŠÌÍ/R)ਉ»¹à„{9vû’µlUv_Â@²TÈQ8œCɦUr£Ú¢Ð±ÍoJR¯¸T ‚¦CÅ,Uû“·t«]¿±mùcÌŽȵ‰ëYöÕÊÒÛ*’„á )y'µÞá™ÝÑÁžrab:o%˜ïÙ=™¼òûþ ޲皎w›ð2î»ëK<ù„½”—ACâe¹|D~$¤Q÷8ù¢/ó“k/Bšüš{~pž´Ý$Ë©…Ý#Gš¾êc+ÖÞ%†Vó_«Ô`)w'Õü•vNë†k ‰t‚‚è+[ï‡F^%hèI­‹MnýÐë½ÞgíF¶ÞT{çcâˆëäëQìb z½.û//¬É>ô*-tÒ굺²J©óÀÈf]Bå(I#° ,H'—EÈl{ü1ÉÊ…M‚JâçˆÔùÕÅÅ×€AØó[Êx ¼xì0ƒnÜ?Òº6Ugfÿ0aCâ幡fÃel¸ÆØž¯S~à…kîz>RÐm6QJƒ’lVPh¤­ûuØ9:) ×6Å.D÷xžl4«ƒYÓYÒãI©‹5èõÕºÔ×nò 6~çØýÑà÷‘ÔÉ{Ñëb@ï|îúÇßÕ´·¢ém%­þŽw¼ƒzjT‹ð<×Έ‹ š ‘v ‚G ŒÈ$Ôº@[©æ[.RV R ûœ˜52F'¬ƒm”“bB_ „k³qd!6cƒºÄi7À!ãLÜê¡B)¨Ô–K Kåx´l‰……“¹»9ÿÔ;9þè92¾J¨tc ´”åð£#D‘`bsüx€Ø®t-ÑFЬ9”æ³Ô«.^^á +pˆõÖû ߥŒíH]¢Ho4¹mùcíO Ç‘«jf´Àu 䀆!m“A,#º©õîz°I²q´ØT¸W›¦†“g¾ûöògg~®ãƒÅSùÉ÷ÎãÜ‹ÌÈXH¹äãešäF"굈FÃãŒK®ç»{/Cª‰Õ/Bk=n3q/¡P4ƒÖÈe;ÛÀMÍ×»µ¾•5óN5¸Z¶gs«HœöÊÜŸ¨óo%E,úÊÌ{däÝûÛ£áMôÌRûlÓW=|Z}Õ`†U€ºW6¾Îñw5˜‰tÀÑ£ž÷f ¬“_êå„x[w¼aüì‘öhÙŒGnxéæÁñ0J!ÑA©#,c'¥i;ÏA—`”hú±Þ¹V]£c¶Ý·@gÙ6°mu »±‚[»¥´í› #håJ@±–Í™[¤Xœå¸-·sÁ)÷³c²Œ–J×Øï…™³û‡ñ²Šé£kd²Êz¢Gvö<2‚zÉcy&‹Ö’ÜDˆÌjKãGéoEëþ†OkµÆFFFXZ*ò¸÷¦ll¿l@.Ãÿ þ¿Í@CFÚ‰+‘ît•u­wx§Á›´l«Xä­Q’¤s=¶l©Ëo}%ãg}œf³·–ó÷¾ðνø†Ç*%°áàåC£AÃA ÅÖÓ¾ÀÜí¯\u}´aŽÓ¾yYq98ŠöèÂfivBàvvµ'Y»¥ÙMZ nÍ.÷^Ù÷ÚÖ ßyÙ @½èuX»ÙmÀ ÓaÛ¬Òžf}}½r}”Öû½Ïã7k×ÇÓÏ™™+&míÇ ‰ð3öWµF³‚ã9¸ÞÈ\Lw묓u±u¬LÕÌSL¡èq&uÚ …|-,#`Ýçâs_¶úhl€+¤ÍÀm‡º hj€JµÉÒr•…Â2³s‹ÌÍ/Ò¬àÂãÂy'ZðÕöSš‡÷P8œc|Kƒ‰-õXTIÄ3äÖ?¼\ð)Íåp²ŠÜt`½´$R"w:cG_ˆÒÚ÷)šË娱c‹‹Kl$äÿa¼ßæ¤õꦃJÇ4TëÖK” q­­úo’wÖʆ7gäï–ól¶­Nöç?þ Þyî—;4ØÆç¯}6W¾ü‹ ‡”—3øyE&k)özÕã¤sÀÌÝ¿† ¶÷fš`„‰»pE7é:pFÞ»¼à¥¬I½ÚômºÝI·L­mg ²wV¸ÖhÚ‘4¼‰µÏÕ5;Ø¡¯ºp¿`&€.ïÄGÔ©Þ'µÞ«¼ Öù®cïÔXè>îÕÀ¼ó8aûìM/k3hÒhÎÑŒÀõ†NŽzÓàeZx¶“\zˆØõ¬µ7V¶Ø$¸-„°T{‹rVQMJ'60É+B"ƒtÁ„ĵñ,±%&m@Æî~JK«Ë‡6 ¯Õ–Ku–Šeæ ËÌÍ/±°°Àˆûs.?ëÎxò R¢XÜEi¨–}?:J­â±ygá©fܱ.‰´@)AД” ªKüáˆÌX„F)—È “™¼”ÍOzý•®üR©D>ŸÇó<¢HmÐëÔz¿™¶xÌY¹ïÚ¨Ý^œ"¹ èéÚ³~FÞcŽ|Uz½uCRT稕ˆÿ& µ;_KþÔ¬*óàM/ãð3¾ÍôÖ •²Gµè14ÍG4j.Röœÿyö~çM=w}(nØN|ì:µOŸ¥:ý•êHhöŽÚ¹Hþ/_N _+#—ë`ð  o¢OZy%‹5;´ûóô(Ôz .zðàÂ0ýdæëŒ uã¬C«w»è â°Z£[rŒÆÐ XQoýÜ #Âà >ž?L#4d#‰t²8n>VÒ”¾”`t«ÞkÞ7¥j„8±Î‚4¤aˆËÀà¸ùD‚UH‰1¶)N¸„¡±`\©Õl¾T¬07¿ÈÜü¥â!Žš¸‡Ëϸ‡[KvT,®‡G¡Ãòb†™}¶·íØÙ‘ÉÄÙL)I½âP^ÈÔ]r“!î°B)›…kgù-ÏgËîç1:¾Û§†|¯-Ь޽çy}ß•Rll¿R@ÞoãOïHÞ¬Wo\ó´`¥#bq‹: Ša)N5y‰ž™g7ÇÙ(Qû=¥å¼Öbô}W¼ê+=Eb„曟{1/}ÃG˜ÚÜ`îpލ!ÉG4ªµªÇ1'ßÂ÷>ˆ.?yÅž×›$#`J W'»z­¥]¦ݼv}Pz1`»)€í5J¢Ôœywͼ' ¶~|³ÕšÝXœÖ{¼Ÿ€a-0]_7=©1QF¿½¾þÞÚoëûâ5¢3#oeÉͰÇÙ:îz³Ž lÛ¶c|š!„Ê™µçj,£u›q¹I&Z{?l[,&‡LR:ɨšíWv¼UfnáxvÌS:±S“D:)#E­P®4X*VXh©´Í0Á#œ½ûNžvÊCŒ (Séu…™!–æ³ä†C¦¶×p¨ûð5¥h× hÄÇÜhˆ4{¼ÖàGt‡t´¼í…,*Dj;¥\©PªhãZ‡1m©uév[ïšö5iì4Æ [³å‚äg{k²ç«ã¤£­U)Nl)ëƒ6DÊà8AhÐÚŠ»ÔêåJÂb‰……"ó…%f™È>À9§ÞÍ)»gñ=Û•nŒ¥ÉKK>ó‡Fh6\&¶Ô™h`¤ e"³Ú¬¹”|57kðG#Lܹ‰i2S3±óùLl>‰|>ã¸xžÇÝwß½ò~é8 åY^^îx< C2ëçû>““SA@£Ù$h6‰”Z×W`cû¥rAýÜì:U¢Ì€`®Mû?¤4Öû«öV¨ï<‚Œ¼¥žZ—²Yr£êÔ[O YñwƒÐ†;¾ø"ÎxÞuìÝ»6u¯‚Ë—?ñ*Þð_ßÍÄ&+Ý5%™Œ"7QYöØvÌÏÙ;ùS¢ÅÓ;#ãX¢ZÄåá„#0‘El‹{d*€‘1˜ãÆJU^gí¼5ŽÓ´2ñ½ÞÑÝ  µÞ ¼ú(éˆõèòîŽv»XMŠr7ë5ªõ3¦¶^0°n`Ó¯\k¼:¿‘Ò@ïM³ÛÇ<˜jµ‚ã85e8n @aYpÏ~—¥rFÓ˜[ÄÉÑ»vS­…4C—ÉÆÍn:®_·dXíµdà±7Z£b0·è)U׸¬ µA㌬[žÈ`ŒÒº,†Ê„šfQ*×)Uj % Ef稔±{ÓÝ<í„û9zsÉš$*ëâ 39çrH×°é¨ Ù¡… l >R’Zɧ\È "If,ÂÉÙ®ô0àïaxËo0uÔåŒM…ïû¸®q!>úhϬ»T*õÈÒÝäïQ14”çè£wâ¸a3àá‡a©X¬xcûÊÈ“òT{D+ÉZÅjôÝÙX+’Ž•Í´Èø&Q(OH)Ë.e3§‡(Jo©Ö¤s½cÍ$;BsžÍÉÛý݃¯ä÷ŸüñŽ]¨:ŸÛ| §}£ *¥ £›š †ÔK.JINºä3üôs§vh‘·ýZW«ˆÝ³weoÏͧ:Õ;2óV}¼eÍè®ø!Rã{ôÊÌÿ=2ò•ï!úôU«_0ï‘E :©ó@ëú±^6ßG0ÐgF.Ö©‡õ…pV?†ž7¢ýóõßü¯xáy<ûlxʉÓ›%#¾AI8°ßpÍõ’ïþLSmÀ¾ƒ (2wÂ),+ NbTW¢”F 0Ú¸ãÈØ­M|~=ÌS½³ŽÛÏÄh€Ö •]ZÅcfßÕ²ÏÐxÀèTÇׄÊÖÁ-PKÊóYªE‘1d§‚˜u”‘‹3ò4Ævü&Ó;Î%?4ŽïûÀ¥@J‡z£ÎììÜÊOŬ”{ö@¼_Àîí§ÕÏVï3#_Må.yhÀ&¿žÇkºÓµ‹ö‡×\áòä£ “¶ö¬âÀx×Ñ‚?x‘æèí’ÿõuM±bxtßA®¿áÛLLnarr3###hc­HøîçÈXV¤ø3£q¤}À•¶æ-Ki9®»ís] #¬=©1¶†Šr¥A¹R£°¸Ì‚+›[`*wOÊÔ<¾«Q1•® ”–2ìß;ŠÖ’éUr£Q"¯E±ÀKÃaùpŽFÕ%3â +´ˆ­Iå8þô¯1½ëJF'w“ÍæÉf=ËD¨a®ãóóû`nn®Ïà²M»×jÖE)C¹\áÁ$›ÍpƧsêi§4ëÆ4˜ Rƒ6lÙ4–¼å{?=ã³»Ñ\:›¾uç_þm²9+Õêg™\ÄÐX@­æsÒÅŸá–ÿsÛr ŒŽàZw,;>EŠ ÐÒTzZÍ-]>¾ã¦ÆÒÒ»ìj~ëpÑG'4<z¢O0[¸Ž˜Vºk€üZêbýöºôzGV¾;Ñçñ Ó?¨Û7C&'1-SÁx‹äó’+/¶ŒÓG¾¬)U îÝÇuŸþ,ÚH®¸â &&ÆQJuª´&ò/éH„Rá`ŒB'™1×J!‡Xb*nvsÑÚÁ{_ CE£Q­7(­BÛBa‰™™ŠÅYöl¾ƒËθ‡M–7ئ´ù™<3“ŠØ²£Œãk”Âv­Çö£-¥%¹M2£QÆv®+gÃÛ_ÄôÑW02:…ïyP?HýàÐý´zz×!øù^¶Ž”YXèÏR)…R*û1;c¨T*ÜwßýcÈdsÇÛ@×_ij}5Po©ž¥oà=Ç‘bêuZõG‹>“ÊíûÈfŽZèRKÂãþ¹ ÏäFß³6nÞ‚¸Û%IÚ)ÕÚvB#•™„4Ýn~+ÞþFÆÏüàª&?úÊ+9û‚2>ÕäУaSâç4Ù¡ÈJ·Ž,1ö¤)í}– fÜ!t,™*„‰1Y´Æèü€¢ÓYV²KƳn7q²€Ýš-÷ºÊ¢ýšIÆ¿Zô‘M.<&0b`ë3(X7ûéK3f}:~]pìãýVÝ×Õ²óµúÖz=³úñ®Qó¿çg1>jp¥íæ^aú' Ÿ•\u© ÿå«sKš»ïÝËò¿\Cq¹Ê ^ð|¶lÙÒ±,"®•'2¬ŽÛ—zh­bޏa³t md,²"bÛÑR©ÊR±Äâb‘¹ù³s¢ú#œ¿çV.<í!ò~dרQÐFÃafß0‹óyÆ7×™ÜVƒw¯KT$)/¶^ò›¬À‹ø "w›v¿‚Éíç’Íeñý,T tç»ÐK_$?¦ÀóâÞ[ÃñcW]¬¹çPëy>Ÿ§^¯Ól6 Ã0EÁk††òø¾O½^gqq‘åå"Û¦äºþÊy‡áw/j2 ÞÝ|7p‹T—¸dùß?8„;‘Gg̰¤™ñ0y'’˜ÊBÿ@ÞÑ•Þ=Gî¬öÎ{gÛH Ä´ºtE»&˜Ëç’ÿ|ÇÍÏåç|©sWÂi¾òéðÂW~’щ&‹…^¦A.Gk4N»è¾ÿÐ¥“áà¡Ë9vÇ8Æ­Ó "[k“#¨ ÇCþ„ÌÈÓ5qÑrsêlÿ7À‘V#=Ž&;éõ]ëke½â‰;oûÊL{—8"«UÓãÓãß×ʼWH1Èó‘«ÔÒ(+z4æu1 M;û-„P«®d.+¸òR0ÆáÃ_ˆ˜ë˜ IDAT(”=´Ÿÿ}í§¨7B®¾újvµÃ¾kÌ“ ‹ÍIžÑRd—Ž›PïBZU8­-èÛ†3;ë]oF4ÂÕª5;™iôBa–÷.<óN;vé˜xî"åP)ùÌî¢^÷ØzL…ቦvÑmj.¥ŸzÉà ñÆ#ŒDÊA™q܉Kزç·ßM.—Åó|Šêá1K×3:íáMç1ž´}1ˆà裎ö°s+>£L&Óä¶d'Èår„aH¹l›ørN7ÿ¦»®¿ÒyO°O[¸·)W‘h[Ó3@F¾3áæBœ¼Bæ ›o2:bØ123T`_®&¯¶Ûë¹ AkÓÇB·šÝ¼žYyíî·?ùýèUèÿrKÏù£ãe·«Fd†#†Æš4c8Î&òGÝG}ÿéüüã8ç¬S^Dج„Z5©5ÊÜ÷hÆù̺šÝ¤ÓμõªT–ÞrÙ²nLKÜ®âc¾*µ¾à®šf€ç²>(=&}Pn ŸLz €ìÉ#ܱf9A<ÇÛ»,pû?<‰Ñ1ÒRÚÎÊ„¼Ìó‚ç\ (]þåëŠjCqèÐ,ŸüÔg¨Öš¼èE/âÉO:é:h¥â¾‹É. O‹Åˆ$¿°A¹Š‚êõZ#B)ÅR±ÄüÜsó ”ŠûØ5uœx»¶-c ÉÜw8,ÎåX˜É#]ö]e2C¡ŠÍN„‘C½ìQ^°]éÙ©7¯cÀE{»Úò<&w^ÁØø\×#“Éà¸&¬V êQàá” d5&#Ž@x†G9¸‚·e‘ʺayyÏóð<¯c•sÙ XZZ¤ÑhR*5¸ø\Íóž.(Ý2ÎèÙE6¶_5 O@š®Œ4~|­L\ô˜Ûîs»pºÉ¦Í¹¼!—WhOú’šã0;Ô3û–]¢'ÎÞä­Îõø8%1˜Ó®—ËÖȹÁñÚ7±·ßôÞuÞW:vGšŸ¿æå¼ö?ÿÛ&ãKAd ®7ŒŸ?ލþžtFÀû >X¢T©0’ÍE© ® ‡æ š_‚¼Ú]ãxq™ÊÒ[T{·;Ú ûWzdärU ¿Ó”A3Õµ^gj}¿­P„[ýùb ÷t} jÄ:ï߃mˆÿåÖOÖ78žVG¨õ?-“’<Ã0WT\÷A½¡Ø`†O]÷Yææ ¼ô¥/á©ç<×ÍaŒŠçÌéÐbogèñ¼¹¥4 išj­ÁÒr‰F#¤4Y\\fa¡€ÎSvýŒsˆÉ±F¬n©ôjÅ ¼”—2äF&67¬ÀKìX¦4„M—ê¢Ou9¶ž¥Û#3Œ:“‰¿É¦£.$—Â÷}ÇAÊØ¡MJ„ôPJÖÁ C 4ÚÁD&b$ïRkF«|V½OJmm ¥r™f3 Œ4[ÆW^î1½œ¬ ~ï8¹7ÀüWÈW»¨WipKFÐdª•Ö7—ÕÈo<˜%Ûôqó¡/²AÎ¥‘õiV¹` _‘;)ªØYœZ›Ž¿RÇÛæ-qƒ‰-G›¼•ÌqÀµKÂK'þ¦ã {ŸÉ¯¿—M›¾Åñ;=*ËÇ#ü“1b®—al²Nলèr`vž“ví@Èx†VÀÙoÜó‰ã±ÔñJ·KÆe…d«”)å7™jxëᎶZ£cRvé'#ÿEœ»ë<çñØ·5Éúõï§Ãi2Ãcí_0«×ùÑÄÏÇêž»Òjœ¯…æ­ÌzÛxÞÓ< ø·{5Íüü_þÊ×843Ëo¿ôe\vù3³ §ÆFÔ­ö·–Š[kú%Š"‚P!Õjr¥Aq¹ÊRq™J¥F±X`"sç|'3KÎW¨È²Z –æ³ÌFiÁÄÖ:CcF`^âñØzÕ£<Ÿ%¨;xC wĪÇE‘$d™Ég2}Ìó›>Ž\.‹ëº¸®»¸µ“«¼KʶXÀ¦m Œ 4K’­³KQ꣓©@¹}Ë燨×ëÏk!ÍÀŽÎy¾ÇU .<ÏÁÍT 1Ά@Ì/1§£¸´¿4ôž1oÐF¶3Öô¼¶«”ô·ÍÔdÙEG&ç`´kÇF p¢ wE“›X…nóäm 7‰×q*NƒyJÆÄÀ~Ë~‡³Ÿÿ1î»ÿè–nEòã/½€'_z#Çí:ã<åqƒ6u²Ÿ¡m‡È-MóóGqâ1;p»~RJnºëAÎøãm/Iƒ_«>NWÓ[«FÞ¢Óá˜h§&V¨»±N£Ù/è&!ú­yIm| Àƒfï}dð=w­_Q˜~2ïAlÖîøñ‡NÃSóä†$~FãyÒÚKµîK cÓhßœ¸Grõ¥p`ÞðȬÀHC¹\çû?¼‰ƒfØè0W]yÛ·o£QJãºJµ&=°sÞZ„ŠF#´ ½¼ÌR±D±Xa~®@µ<ËñÛïàüïeǦA¤í} h:Ì¢0›#;¬˜ÞRÃË)[­å¨Ò’j1CiÎÇAf"ÄÉjJtæ8F·_ÉÔŽKÝ„çùø¾Ÿ°SBÄ6«{ :ì ­¦¥ž¡5¨PÐhh¢†aë¸æ^Ç!Ôí{vúõ:0ß{ÛÏiuûŸu¬àÊËd`GâÊ72rNimÿ_ò$B]•>7ôGëѬdVfâtØ~¶­BÒšp$àÑßæh ˆNëb4 ´¶v‚J pÜ¢'BôÈÄpKSÈEl bº³Í˜Ç{ú÷SOj«Ï}ð‘WóÆ]ÿܱ_£Ñ1|õk'qÅ%¯$7ä4›@ÓfÀv\dþ¡c¹ã¾ò¬ ÎÄ‘6j?0S`ßLó7xtˆ¼x u.¤ÛA§ ÑE£wÔÏS³èÈþbM©SñÜðWÚ]<à}ÀÜwfÝ?ÿ˜™‰ÖâÎO]…‰fi÷'q|¤Â(Di)B<Ù$ãCn²¹Ïwð=‰ç™¶`?›‚Ñ\t–ä‘Cðá¯@µ®‘T ¹ÿçòáÿ‡Ïñò—¿‚“N:‰¶’£qÂн ‚€Z­A©\¦X,R(,1;;Çìì<„pÉÉ·pÚ±û™ŽÉ´ ¯U=>‚ÙKi¨w+ºy1x·²pÑeyšjXì‚‘]f3‚µ¥>Qµ·~€TákšÇö¾Æôù|ó¬×‘õüäý“Œ@6#p=ôdl%jÕÐrqŠ'„Aº2®ýJ\!ð|mÕØ9”9(]صGðü§ ~~HpÿA4‹8Ë\®T¸þúo²P(ðú×ý.Ï}Þóðý AP«5©T*,//SX\b~~¹¹y–—e×ÔO¹øä;9js)ö ·*maèP˜É1wpˆL>bzGÇ·Þâ*²Ï‹”C½äQšÍ¢ ä·4‘gá.ÆÛÍÐÖ+Ù²û×ÉÛŽtÇMtÏ[Ÿ…ÖÇÔju:Äòr5ÉÕ†H<*´Ñ±¬!Œ Qh8z“äé'I>w³¡Ö°3õëÍ•·ivMÃÕ ~ý©e½,œÄ.:.-ll¿ @>€Lk‡wh—mešZOx–1€ Ó´ým‡*C9Š"üУÖ4ý’»u¼^²ÉñÇãdB¤gË»3õtâ³rälE×z¿4î/z¿àÿ[8Íàï·^ÛxüX‰ïýÍf&G™ŒÆËr9阘™ÒxÊÇ(…6 )%¾/qÂÒàÒ9²¥ÓñqJ%ðópö™—ÜÌEÔƒ¸Ó€.‘Òüäæ[Y.þ <º«¯¾šááJ¥‹KK,,˜›ca~ž¨¾—§sžô£Ca’+-hÔ]æQ,äj0¾¥Ž¶Y­•­Cuɧ²˜AøšüDNìXfòÈ¡3™Úõ2¦¶ƒïgÈf3qC›D)…ëºH)c;UC£0?¿ÀÒRÑêÈ…0hEÙywa,ˆ·>z)ù,\rª§ù ÅÚúkºyÎÙ#¸äTÉSŽƒÉ #ÁY±ÅPA2©´±ýÒRë¬~ƒNϛη­…·èua[O :TÜ4Ößæ—N§"nΧœ5ŒäFf—»™åÌÁ3Ñ•”ºè¦Ø;ºÖS±i¹¶…»ÔZ$&1I&.lÆÿŒŒŒ´ƒ‚wÝò|Þ~öVìâ)Ko壟ýüîÕWpÌöÍ€ana‰-[†Ÿ6|á[?懷ßË1Ù³xÑö!~ø©¬ÜíÝÁN—?{Z^·Cا+[áEÞ¯RØÿ+ -ž€×ì—?‚ñ¶Ç‰ž#%xA6/Èæ<\GÇs)!ãi"-0ÆÅé¤ä1÷5 eËS&´ÁÀÔfxþ\òÃ{­Zš5ÔÆpßýòÁ|ˆ»î¾—«®ºŠééMÌÏÏ133Ãba†aç~.>åVÎxòA<Ç t[Fµ´”aîàAÓazG•áÉ&Z[“;Z&hÖÊ… Ї7¬ðG#ûÿ‘$›ÉL^Êô®+Ÿ~2Ùl6q+k–9Ž—dâR ¤„f£F±¸„JÕöMr]Y°·@žxä3F%Ï:CsÌ4üè˜]4TA3(kÆÎhΰ}\ðäí‚ãvHvN ¶LÂÔø{›òŒ@HlŽÏpœ jý ¿;sd¦sfU…(³´L ¼Œ-ҘȌ-Ú‰À„ íwcBÐAüX€ÑM0ètcü£^³æ>¾úùã|ånü“¯B]QväsyªNÀα-d†³ŒìÚÄ‹ßz“£Ÿºa™j}õåöÿ#BÆ –|÷ÚÙg ] t&Y“¸`e¢øçÖqw®C{-ìïaÐ`hÏÿ÷ïs²Ä7ÓæþÙã×À:œùqvîÛÀFzÍpéæ7:õé®óïÑìv¤Yòã´=nÞÇëˆ#ZÛÞ?ÅèxD~ØÉy¸BáHk^bâ]3q‰`uc\æ¸ëÜHЄT ŸüWÅßÿ«bfÉfü+—\“ÍfÙyôNžyù3Ù½ûXJËûØ5þÎ;ñŽÝR´ mÆ–u‡…Ã9–òxYÅä–~^§dV*”T—}ÊÀlWº‘D‘‹ÉœÀèöç3¹ãüßöÎ=È’ë®ïŸsNwß×¼vfwµZíjµ–-Y~IÆBÆïãB²À ')’P¡ò€„Ê;ä‰`“ĉ± LÀÇ&26XÈ¿daiwvç=÷ÑÝçœ_þ8Ý÷ö½sçµZiw¥þUMÍîǽ·§»¿çû=ßß÷73w”F#)f‡GC ªøÔ¶òñµ•>ó¹/eZ”ä´VÎò{HšžæŒ"ŠÖ â„þz[ží.l46‡,‡.ô2¡Û†mãZÑj*fh7&´[ÂÌ,™ƒN',Ò"£‘HH´þè|õV¶×6#WãUcf·]äu4J ‡º¸!ë|¡9žÿ÷áÊ]wÿë©Ïº8§I3áß|çqNÌkrÛáD²ˆOVE$&AËGùñv’Ÿÿµ 2ëù…ߨš æÙãﮌäŒ+êÀ6^£¨I:!ïÖ…¢P~­ÒÃ9dæ#©]U¤÷¸¡éþÙ;è¼à»¯È @|4o\Š jøËd’Û¤Z11ñŒ]†q<#òôÕºä¾\}éꊽ¯¢Â5)‹‰‚Ô+T| ¾²µ—ÀpÈ— Åû7Vá ´æ¯»Só›Ÿt,¯‡=ßêÛ*ãW·»}>ýÈŸòØç[þ¼õ«7¸ó–ϲ0›â½¦hˆa{#áüŸwèoÇÌ0·”¢Œ[3”ÒÓ~ÄöJƒîfDÔZó9D‚uë;Dó¯áÈßÄ‘ã/£Ý™-^t1zÙ£uhuÎc­Ç=t¬;ç†ûÚ£¶0ÁÙ°@0n€w ¢°]a=I¢hØpà3I¬h5BŸ¹…wªPÀèpÿ"E»í¶¢Ó†v’†&ŽÂ^¼6jÈÛ0á–½ý¿ç™yÓF¸WïÞ‚¶—ám7y½*µšbÉ]„§(S,Ñ= (?Œ4}ùKo&{ü¿ 6°×­­.ç/¬²yáIìcltjñ“¸Õ»åˆtŒUžÈ(|¤xøóÿ‚[O+Þ~ï¾åëoçÇßùºJ[Y4xÅS@<ªÌÚÖS€¼¤~Ø‹9t®W>‚¤^Æ  b¯‰†ì±w,Þê†CJ–?T?Ê«Iø¶ðúã'ùGë5ü¥·¼„ñ=èÑ~õxŸü¸¹O¨0mM(“ÇDWØ·‹Ù™—?¥ílŸhVuU‚ï3ñšäŠðåzï"£¥HI3àüp~NùkÆÚÊv1î«Ã‚¹ `â%ܳŒS$M8uFqÏ]š?úœðäšöbÑQ1‹ Ðë÷ùä'‡ïÿ늅™`F+ãVWη¹ð¥:ò»±K£“#hò\ã )½·³y¡Í5yGÔ =Öά:Aãø›Y<õfŽ>f³I™áÌóØ£¾íîr¹+zøêµ!"äΑZCìcÀMjJ+"#dqpFò$.œíB¸ç€<Ò‚6ÇBœ„Üv:-M«ñü« …ÃÙzŸüaä{õWù”6´ÀB'oê¦î¨ôâs’R¦>…|rÊaDÌÎh:¦Ï 1@Ùë…ÇÏÿ7½ü!¤÷"dð¢ö6fñðÈ—~–ÞÔ€*Ѝ¹TÈÂÉ8ˆ hŽu¼?~ÈºË fºjv›`ã““ÑÆüŒƒ´Ú%èY Â×Âë”§õ¹œ$8—ã½'·BÔ,7}È·{ ƒµ”·% Ÿy40sDó†W>ö)Å/ý®#³¡ç:ÈÕ;M= ß÷#Â~¢Ó‚<3\x¢Ã…smÚ³9G®ïÅWf¥û`\ë®Çl.7QšGst,aŠÕ¼ˆ¹ÞÊÒ©703»H’$Äq×-EèæÇ±­‡X^{FÃQ ·žIp^¡Ì ºu•)L[Ué8ž`â9]Ç­qÕa"“®êÍR¨¶]©â³L Š ‹É‡ÌœÀUÁÆElѯVaãWFiøß}ïNÐTj ¯Že&€=ž0»ªÅð±q¶­vì‡O˜Ý&ÛÎÔ3$«_µÀ+רë=Øï ó¼¥°ÏÎi"#ÏØûU%Óö Ÿ ¹óópÏ+ŸøœðgO0ìôØ­~ò—áî×Á¿<æÉ/̲µ™°x]Ÿ¹¥4„·X…“°'žgšÍ‹Mzk q'ÚD+2«qÒÆÌ~ §ÿK'n§ÝéT¼ˆY.´¥ BG;vKDB›WEÄqB¿?àX¯8M3óä™ÁD‚‰T0£E‚q9qЦÑ´Þ¬q$:0sm Wz¤ˆ¢ÀÈ£"͘’1uÝÛ°¯"ÖeŽ…{ë”·kȧ;Ó¥õa®º0ÞS\°òro¼%¥\!=» «»ÊuŸC4‹òY èÉÒÿszç=q¤8}]0ϱ¯¯÷˯ ß¹O>ɼ'åõqI}'+—#2ׂ…kÀ•îöŠtäðÖÐ ïsHŽ‚n¡ì ÒXB2…ö”XD<ÚhœDDíã(Ó à¯›hSdï×Íhÿwhx3;Ãa¦ÆŽN0òÊ‚dôµÉ9åUV^açÊ’º+€ÜWöÈ}!­\ñ²È'÷KG}ì;£RÍ0t…‡¶–)ïÌ™^˜þv´œM{—êV¯ëZY48±xç‡ëLñ Q¾œQò´ƒ¸8ÖB/ºØö†n9'?ñørF?Ý® ¤3>ÿðÓž?}rÀë_›7<¹Õøbn¸µšþzÌæ…&Níã9ºY:×c|ãæoxK§ßH§3G£Ñ ŽãbþAø[”½áaáË{­1ã9ç¥ün­#ŠcšÍqlH3 (,¡/¿œ^.N"òØM¬ÑÚ“ç¡ÕÏÙÊfhÁ9Œ*" a°š_£ïÃá”.Nш=O>0ËõßTËì×#Ÿ”×Ë¥Ù^¬\•f·)`^‰8E™Ñ|q£ö&×ûÉ&C,(ñ¨h‘vz‚è6Qr,€˜i¡¢Y0Í¢¥ª$ÝÏOŸº'^Í[¯FŽîäUpn)TûÊõÐ&eº¸áç w—æ67.§YxXz«!ãŸs5mâÜDªÞpNx5vv²½nÄÇûÇÕd0Χººv\ãu]ÒB¿Z¯ÿžMþÏsxoq>0Aäé]J C‘$8±³za» «]áb_XÞzÞp»ey~é7G?Ÿf·1 ³ðÁßß䫾²&–¹À³AÄÖJƒÞFBÔrtæsÄ@žœÌbæ^ÅâoeéÄ—Ñn7‹a'zh|-•ÂrÑ1Ú—±cé 4}!¹{K#=æ ËòÅ œÿÌg8cüؾy¹J1ÅKLØâȬ õèÆÃ×îZSÈþAf?ÔJÚx¼M«-\ü`‡£_Û­/”«È'ÍoSÐvaåJdæCfN!©Çˆn$Vd(ÀKp|‹žuå0-ˆŠÿ[¤Ìú6m”î€i„çÔMT4Wì'£ùÙ$SÛ&ƒ`&G—š]@‹`ŽŒŽб¥B Þ˜ P%uTÁÀ‹\õÒà6êÙ§ÒË¿Wâ×$°–ì_OlŒÀ»i5dæzʬñÊU¾[ôª:HëÕDÏ–‘+vœ¬ÒzÒ,•'÷´ÈV¥tëÂGšC ltauS¸¸.,o zž…EÏݯ÷8àÿ>ë[ã»a“õÁÿëøÖ{…ßb°NÓߎغРO#’ùœdÆáQ!¥“´Žßͱ³oa~ñ ÍfcÌXÌjÙî½>ó¼•Rél¡w|4‘lôÇÐcè÷z<ø[¿Éú§?ÆM_!áz®´§)Š[œ”ƒÖI¬ð‘àìNŸ€Ra\|±_^4Ôf$@xŸáöeLPÖ><Ë‘»kf~ù€÷ÆeV®il%ˆ3þ»L3Ìê.³{¥× ìÚ÷.—EÐ ”ÏÃdâb‹R J7€*ät]"lIÍHJ/ALG"@tÿIDATÃBôÄÓèªÝXg±O.c¦7_‘Ù'عÒ#I7:V…P‰Þ”À.vï(M8Ub¯°óIg¾ÚñþK¯Ç½Õrôt ¯eõgýÅçÕ ©_Îk"-(uyÇcMJé™…Aݾ°ÑV7…å5áâš°9ð<ÿ¬çÕ_æ9s`ÿöïÀ?x‡ÐíïþÝ>|èAÇ n «ÝÕ 4—2T£œXCë%,\ÿ,Þðææ½ác¢a¨ËPL±7î Õ¯KqÏ Òz§:šzV˜áŠ{K·»Ío}ô·øð¯ü"¯¿¹_„5…Ž¡rŒi㡊CdÂãQB¡˜Œß.ŒV#ï´õ÷˘°DÐûµ96»pâ-µ îŠùž#MÄÊuåa©HìL ÝߦË\òd|˜·ÝÀG‚2|óÂà¡t£p àUq`«aS«*öâ‹ £1nv KcãJWz¦w9ÓËY¿Ã pÚ~yèÅ1Røq@WU>Þ7®ÆÌnìÏÈ'ƒYÔ¤Ü^u±›q/ÀŽ÷? Ä'Ýé\õl¼®§I „Œ„É|eäðIm‡•ÒSa»ë[ÂÅ áÂzøðÊs×펻îBt©÷Š¿ú Á´ö¯þ“cy}÷EF X?×¢·µ=ɬ2Í­ŸÁÌ½Ž£7½•¹£/¡ÓéÇÉ×¹mc¦?Z¹5–}앱Ðå˜RcÌØ`¤ð3†­­m>ü¿>Ä{ß{?Ò_fî¥qhpÕ %z­Êã¤ÆÆ¨(ÜVTál©Þ6Êí¡E·èÍ¿ÔËuìÖ(¬°þáyZw~ˆÆÑ×ÔÊÕ!­„•Sù·õ!¦KñKnGÒ9€2AR§씺fÜÊ¥…+#í#—&636kL"Gg™&œÙZ–?Ù/=ÔÔ¾Q£Åq(/@e*€®&]ì¼dÜ…+Ƹá8C6^†èH…W®ÆiZÙ$ûÝ‘‡^u±ëÝ q“‹5å{Ùg¯®Õ³º´¡ó"$©Äû°.¾Œ î|ñA6’Ò×¶ )}=°ñ#G¯¿Ëó’[$$Ùpþ[§X=ßâÎfùÑ¿›qßëüÞh4¼àh‡ÞfLcÁµÃèR›k¼¾žÖõoaéô›™_<=t¥—Á-¥"2L`žþåùpܱ'KÕ}ñòñÀâ5çÎ/sÿû~’÷Þÿ>–—/pãñHHh+áËKMO¹$5ŒÆìq5êËq‰N¬Ý=ŠFâ±ô5lö5ÇêµgÈÎÊÕÄÃU}g aŠä3”)f\HPÒ,N|ä 3@¾n+€a8ÇlfÄ ã–lXAÈ|×¥.£«A©±}dµ›¡kÚù°?´`ÏÊ ŠìReÛT q~¤…U%u$¤º¹Ô'ë“cTw,Ç_³ÚaRÓ•žó C_•…O“ç§.nÔ>‹«G®ërÊú&ô);xK1ølWñêR@<¯HéëÛÂʦpa-°ðµmÏÙ=_ýÏ©áŠpN#À o8÷ÅYV—[Ì-¥¼öÖ>ó'"¾õ:V'º¥N‹9s}BëXŽJб£NCëe,œúŽz™¹¢·;˜¨0©©á®¼g–.õr¶xùµÒdWþ2[½úžµ6|þóŸã]ïzïþ/ÿ…n¯Ö1Í8Ä©zT?©®—‹Ñ¦J®¿i±t¡–i†ãoÙ®/˜+ËÈwcå²÷² =Ì‹1‡D!FÊ—Ý2ÍaÛ•x„b 3`–Àn€ß.pÍŽXú˜<Mìyk”vìÈ ¯FÈ1 $úê[9#²dN'þ¸Ñ­ÃçœøPRa⯡àªêŒ¯®Å'þ.2÷3g6^õLÛôîÀ}  ¶´Ÿ­¥qá\U ¥üðԂ̥䨀VšÚz)l÷„µ­‘Œ~~UåyÕ—9^}§07C‘äôí͘sÍÑëŽê2»˜á=?æ½ßoxçOg|ô!K–‡ç|Ëë;ÜpÖ£âbb™ŸÃÌ¿ž£gÞÆ‘ë^L«ÕÉlÆŒ|?U6>îV—±¯O¾ÏÐ3î voðÞóðûüðÿ0ïÿäyŠÖZ ÄÓˆÍðúî¨+5ÚºÔOÏ´úÃ/ÄÊ[aH‘sN×Ë•ò±ò±Yä“d½Ý:~v)â2T£8û*m[c,Õ ¥fQ>ô”û™ap %ÃWQ`æ3[Ø.În]‘üK©¸¼Û쎢*Jœw-IU=¤'…Q®\ÄŒºŒV•ýðrE¹È(X¸»Z&eì‰V´± µ“eW†ž¨)a2Ó mÓTŠÝ$þš?›«L7ÐJ¡´Üh\&@ AiÊi2)§÷RØ* më¹ayÝ3?ïyÝ—{^ô!‰)úª¯]lrþñL'ÏnÓèØÐ÷]Ì¿íæ˜úûm~ï÷5=’qóó4w¾ÜÐljr«qæ­ëîe鯝gþÈÉ"+=ƒֺØûVÃÓ=ä£ëÊ43¾ÀwÔ}Wåóª¼E1Öf|àà‡ïûQ>úàG p†íbÍXˆµ„;€b,‚­Úþ}E//r‘ðÞ$"Ïg}}±\Œ| +ŸÆ¸†ß¢ Ö ¹üÖ¨hŸˆÃm`Œ¥NHÏCó¨ M\|ÎGãR‡àX¾Sq®WK1´jªÑB#˜ÞªÒ³LÈÉŒËðÓ ]S´gûŒÜüRî…y à¿«zDöÀÊýXùÎD65•qO“Ðw“ÓÙC­¨AûÙZûó4£B ÒTÎ')w—FkÉ*ÈÈýuªœÞ/@|e#ìƒ?¹"¬÷gN{^{§çìi ¶§ð¢‹±£Ö.6iÏæ,\7 J\á8/bVsCw-f{µÁ-7ÂK_ªÑ ¥g6æ‹™¿á›9~ãWÒjÏ ÇŽ–îò09L ÉR^/y¬G`/€zˆbMXYYá=ïy÷ß?>ú( +.öÚJZ˜D*£a+à^4¿\I9 ç#¬Ó¤ƒ Õ¹£¾`®Ogåioc“ÐöóÊ0ÛaϹF‰ßCv–‘ñ«ü÷èl mHáF÷„ñ¡j|Yª˜èJÙÉB+{çcr•ÙVÁ}àw‘ħIîÅóHu¯œiTŽŸì|Þ㤦Äìü·Úá<ß ´õ‹‚ÃxÍÆŸElÜYĨ! (<âe´^Þí4P»ƒ¸—ÑžøV!§/¯ O\Rçxù‹_þ2aéHÒp¢Ù^O8÷ÅYÒÔ°p|ÀÜbŠ(‚L^°õt`غФ¿uɬE”"Ï5N戎¼Å¿‘…c/£Ýn“$!+½”ÐËo­Ã˜Ñà4WÃ~ðÑ3ÆÀ½úf¥›Ë)ÿøCÜwßðÁþ2ëëëE¦ÃøA‹"h5ÂÄ9oKˉlêªX7—·/ï#r«H3G6ÈÉš|óƒõsõ0ò½$öÉÜï*˜Ëh?z(7€¨d©c€^•˜«lµ”°Ç’Íâñï+Ý6czEæ/€}ç^ðä`”*pÉÒúÿÀA½p£«‰}zcåL¼wØu Än{EAPÙçÞ×ȶûHÒš‰?wJŠQg&…1šSÃÙû™ñ4ƶµ­BN_õ4;ŽW½Øóâ[GRºRÖÖε¹ðD"8^Œ-evïUxÙ*ÇŽ’KÔvˆ„¯9s#Í£÷pìì70;b(¥Çq<Á¬Õ°¥,HìeÂÚÈy^½G_¯à@ëp›þÌgþŒøŸ¼ÿý?Ï'>ñI¼·Ã¯M»´czaB«ŸAé› —îG¸¬T\À{C–úý›:ú]Åm£ˆ¹â@¾7+Ÿó‰eöØ·é È–½Ý~b¹";S1¢)Ù™j¦dÿåa)Ÿ‡šT÷æÌ!™§š–ÇD&'ÂMÈâjÂ}>õÿå3í ‘=%õê+QSdöÝÀ]ìÿ;äú½~ÿîçR]ÏŽúè;N¡•"j@Ü‚fC¡uÕ¿ÁÆ“VÃ^Ê´¶n_X-Œm+ž“×;^q»ãúëCZ ïu#Î}q†ÍÕ&³G2®ëcbµ&ßD‘eŠí•ÛT"4æ¨HpÞ0H¡+/äÌK¾ƒ¥“¯¤33_ )ÑÅìpvÈäZ«aVzÙJV²óÑû‘±‘¥åce|ëòòy~æ§šø>õð#¬¯¯¢”ÞÄ)@¼—©Áµî|Å¥~%õ²ùÈ;Í Wô»Y_èuáe»vª_5Œü²y è;Ì`ŠÉèÑ*KÎPa÷y˪‚7EøÊØ3Ú+Jû¿Ó±Lõʈ¢Ýö¾'SÛD&ZÌ&ŸYÁ‚Õ¹}/@gŸÇ&g-©?çdõt•fZMètq41pãn©†½Lü⺰yn}å¥/ôÌÌÓX Лk Î}a†ÌŽêÑYH †®‡ß3è6Ï·èoG$3ŽdÞâ•`]D¿ëù“G|ìO×xÛB“³·-‘$aÈJõ£¼÷•òyµï»ÊÎËó¼ î¼Ã÷ml¬ó‘_ýUÞwÿOð»¿û;¬­m?¿7k­DcLÜÃCáxniÏ 6äU¼(r§HžÁÀ2è)ºÛ îü{+õ…rMIëói &•åä.²syÂî˜ÙÙ†5‰Ns—Oì•ïp8ø,í}”e™8NjÊ(Òia/Jvm9Ä“³{ž.¿ï à»Êø5ˆ?W*‰„vS“4<±ÑH¢–«§Ñ~ oUs[ÉÄ×»Âê–GŒçå/±ÜtZH…sÚ\³r¾ÅòâÄsâÌIÛc½Â[ƒó¡Õ©·YL,óŠæÑœ¨éq¢p¹¦ß³¬žë³ñDŸåÏÿ ÿüŸ~ÿï÷¾–·¿ýí¼ð…· Á¸z¿ ,»ê<ÿÛë¡)W5ïÞŽ¶˜ïñ­cÿ×*Sdç)rúþð ö7~ˆ…îV»žú;X:Ù¦ÎWS‡ÃÆØh÷õ‹ ƒJé5`?êÁÿxœD)âD¡Œ"Ë!Ñ­ýØîÙØ¸…]@¼”Ó{iHlÛè YÇÍ79Ž íšÁ•® ËwX»Øbv1åÈu}t$¡eÌéÀ sÃöJÌöJÝZK9èàJÏ-d=‹Ýî!ËBKñ–s<Êz×øÅ_úe¾îkïåî»ïæÖ[o娱%Ö0+j*[cÓŽ­­-žxâö™?åã=Äo?øÛ|êá‡ÙÜØ$Í2¬uCÐÒJH"VaJ™1Z†ùæjh(¾œ’ËèoWú“Ã<+M–Gô)yf±™Âæ†Aßrûwõë‹ãZ`ä‡óiÀ¶Ä<ÉPe"5íÀÒò~ÀtX®öJ¦¼×)­zcï}r/¬¼ú˜Úmá°ˆîÕã}€½ô±ðÝŸ¿fãϾRn ƒõBìÀæž( ŒÄ ÚŒ@)öP+—–÷á|¶. @é§ÂVºYÄÑã}Μ¶ÌtB°Kò²µÞàÜã3¤ÃÒÉ3‹a¨xn#¬ï5Yß°y±A+&ž)\éZá¬!Ï=¶ŸešÚ£ÐoiŽÍ'4Ÿ½hyôÓò¹Ï~†Ÿø‰Ÿä¦›nâyÏ;Ë™3g8uêŽ;Ê¢(&MS6Ö×éôz=²,euuÏ~ö3<ñÄŸsþü.^Xfk»‹s~GšÛa5Ï$‚N# BILˆ“ÔhÒñäXã§BÁ‹Ï.í‚z¼®è&ôRÒd}CêçyÅßþR}Q\kÒúeói€>)«Ø!ªÚÌ´ß»€«ýöÇ÷ö‰ã²hŸVöoöïýäïƒ(—à5ˆ?;ëñ?xO`Òœ\> Ó¾Œ2E+sè+ peă×´µÈû)lvak°ÈâñÛyÞ™›'q^{®Y=×âü3D‰çÄ™m’ŽÅù²­l$¥o-7±NÓ\̉Zç5Î*òÔÙ”¶IQ Á[Ej„fìi6‹3ž£Å™ÆZÏÅ‹+¬¬¬ð‡ø‡Åd³0¢4ŠbŒÑ8çȲï-"£þqkí„s½ŒG~jÇ<60ÓT4“ê¯ðÅ­ÒKá#zª¤¼ÈÖòNa}-q ­½¾'Mƒ.ô{/ýÎúb¸–ü’À|W`›èjŸ!snïB‡d¡S\í¿¬­þŒì{@Ç›Lë?ä àƒ¨ì³Ï½ïû®Aü9ÈÇÉmøËÛ òâŽã¬`“0]0Šb Bk‹RQhêÔÅ$?rÙ­Wô3as[ØêÍÐY¼‡£Ç_†õ«(ý$^ ß9ÿø ›k 3‹GŽ0‘'w…”îY®ÙZiÐ]m c¡u,CÅEVºŸettJ»a1Jas°E` .É: ÍÑáÉ Ši#åÀ{Kž[ =ð½ñr—ÖÐ4ÐT£èWo%ô“{5jÐy ígâÁ[EîâП/Y0ZÍ-i*d}è÷ wþýÄŸ@~80gÐ÷œ)²3ìaü:(ˆD"ÞÀÕ%<ïa@]MÿþKð§ÀÐk¯k:}ç·óé}O?lâTÑÈ!Ž5&2“atLcÚ†{j˜Éž[ƒu°Ý÷¬wÌ,ÝÃu'^öÁ³[A>ÉÖšçÜçqNqìtö\† Èr3ŒZM{盤ýˆdÎ’Ì8DC\nãR–šmTŸ NÀæAIȈZ1,ÍÂ\6zWÏБá5U%Û¾LMççB苦4ïÇÌ+ѹ%²63›g8çpNðò\‘öݾðß]ï?ë€üà`>¤ö•Ç"Ÿ˜uXÛ¼/€ïõü²ówï8S=¢\>™Úÿ±)5ˆ?×ëMÿ¬Ç‡ÿy›4âTÐZˆЈ“x"­1&ÌÉVJíFJ›R règ°5Hh/¾ã׿”Áæ+gÙ¸ðÖž|‚¨á9qº畬tç4Ýõ˜­‹Mœ×´–rL+°|—)\îhª”ÅvN;ŒÕZÁZÈs!(R§ÈÃZçfÐN]¹ª<›ª`äå~µµBžKh³(l™rı!ŠºH~ÓfüR-} ÃyT¥ë^ V 6ÏÉR¶<¬à3ŽU&ll _õOjÖùþ`¾ £TûìiìôRAí€û»ïÃ>ÿlZíò€È!Ÿï»:ìûS:êzîÔÝÿ²ÇGß}7+ýZ :Ž…XŽ„Ø„5¥…Hk´'; Ó̲˜Ùc¯æúSoBë¤`Ž,=J¿ûb:GÎ1t)r«ñ>Héy¦Ù\iÐ]K‚+}1…HasEîÊæÌG)ómGÃ(Y&à!Í`ÐSluý¾#·ø”R](W[©‘c<+Ìy.äVXhxˆd™Gëˆ$”H˜ÔœŒ·P$\«Q|‡µšÔ .çž|`°ið d™#sšW}o¯>ÙŸ @^½‰ Ð';ð^²âà²ú€û20ÐÃ=¿ìó{ee Ðï¶HP—x|j¯ëàõº¿ñá±ÿÿü÷!ïžÇ1)²ÊJ‡Ö,WtsÍÌ✾ékh·ÈóçynñbhÌÜL»ý)Ð[EkY!¥÷#6—› ¶ƒ”ÏFç œKÊ‘FÊL’X¡”Æ9!Ï!í‡>ç^z=O¯/ä òŽ©•Ëbü~º*óÐσk<³B– ýTÓH)À¡uü8*úØ ö­tXÈ8®Uç…Ìy¼uØL°V‘4ýž0Èrr ·½õWXºù«ê“ü¹äû³óú$íÇÔ/¤ÔAÁúrÔ.À} ç“KéK}êPïºê*ë­ÿö±±ÿÿÔß9‚–> Á:p¢èY˜]z!g_øffç¯#·çÖZ¼wxçp~‰nï4ë V±VÓßLBVºW4—rLðbï˜Õ)s± Á)Q‘ )ŽÁÀ“¥Bš‡|:¶ûB–…Þõ^d~ëÖ_½Hî|Xpd9 ÐH„(òô*,˜P¤© .~ŸEM„6åB~îÀ9È­Çåa!“ÞiúÏf×Ó(úáµ5ˆ?w|0ß ŒÕÞ€uh¹ù  õJü8ì¢D.ñ9j¯ë™/á[ï[ÁZKš¦¼÷ïÝÌVw‹ù¥›¹õ¥_DZ£7â¬ÅZ‹³næÎcäÙ-Xw£Ÿîª§»ÖB7í¥ ecI-h›³`rfž$Rhíç±¹g0€~z}E¿Û}¡×ƒíž°•B?WôóòY.…ô¬h4ÃŒt¡Ýn³ºzñi;^óóÇÉóÁÖÚØ²,¸¬WäNHó°0IbE¯_ÄóÉC’uŽ·‚Ž<ʆy²âk.—Ð’—AšB–Ašºª·-¬n'üÍwoÖ'ðsÈ«7ùýÙùn }‚>eÐxêòa@LD.Ãë’§ô/¸×à]×áA\D°Ö’eý~Ÿ{¾÷AÖ/|‰™ô q`á®âÎ9¼ó8çï±6"·wàBºõis]’SahJžzô`@"ÄB& ©àê̓ãº×ú}èö¡Ûõ¬m ݾ°™B?St3E7…‹ÛBNñWfÈÇÆÆòÔÇ_ô¢ÓÔZž``-ýœÂ´i&DFÑ5ª˜<&ØL7ÂÏjãB;±8.žeÁ7æ0H…´HÕû+?šÖ'o ä—ÂÎ÷õg‚_^?øBæédá5ˆ×uåA¼d؃Á€­­-6W—i.°Ø Ÿ[b èÎ}‰½s/'š‰0?ÂÒÅæŠA×’¯ 06ÇÅŠÌx’HGá’ ’» ÝôŽ-a«½ºl§° +ÛðäºÐí^}“ºþäOþûë_ÑêA ¢(Èë*-zê3!‰…8´`´à Z'Úòà  HSa³çùŽwçõÉ[ùÁàp Î>ÿôØS¯½~þ` ¯®Øßª®º.Ľ÷äy>ñõšýe ·Ö@Ü÷ÞÜ—`î=¢4ν×íàùÝõÇÙZîáúž(ÑÄÆ“ÄäŠÀLƒ~&¤¡?€íÐëïeARï`£§øØ£×Íœ¢›*¶B#âHE‚Â#N“©îF Úè¢ýaÌ­µ” +¡{ /¬lE|÷OÕL¼òËÎÐ÷´§êZ¿z@íÒE]u]½ ^•Ô···ÙÚX#Ú>ÇB” ^2ñR^ŸÂÄ ÷Þ#âdk+ÂúEGw³‡v6€·"\ÚJKèY/)z' Ò`Ël‘·Sè{â½LØ>òÉÁ5sŒ¿é¯}/ÿëgþ=+Ý»ntÙJ&)‹L1ž¼mêŠ,Wë+Oó0¨fe þñÏÖíeW%VÊ5„WÛK½RŒôJ‡š‰×u¹€¼”Ó»Ý.ëk«øÕ/2+h—cÅæç<ÞW¥õ‚‘[‹ó%;L’Ð9r‚¥³·±xòf:GŽòw¿v#=æšÐLdÈ:•.ê̽@n¨,d6øvªèepÇëÞÆ÷ý‡Ÿº&õ7¿²ÁñYa©Gf Ý„89ìhˆÂy0JÐJa]P*2<Ý4$Øýëÿ™Õ'n ä×.°ÕÀUW]—Ľ÷CsÛÆúÙÅÇh¥0’ãr7l5ó>0ó*#÷ÞY]“´è=É‘SÏçÈɳ´ç—†×mõÚýޝJHŒEŠX6jŠ!-^B»(œ6žå°9PDÍÞÿÑó×ìñ~òÏ?Ïßú†ÛXh óma¡#̵(¨q¬†1¬ÎƒhE– ýTXÛVlö5?ö¿õ‰[y]uÕU×N6ž¦)Ýn—þ…/`6þíRœÍGÀ=ENwÖ…ä±F“¹c§9rúNœ¡Ñ™ à“õ×ï9Ió"Íâ( Bñ>LhóåÌsƒ\ñ—¿óßð¿í{žÇýkîhÐI`¶%Ì6 C#‚V,(­/ôÂ:XÅV?⽿ѭOØÈ몫®ºvò~¿ÇÚ—>Y m»aO¼Hn›sï=Î{’öã§Y8y3ó×"iÍ\òüîïzÛËxìs†½ò‚™Ÿîÿ‘4Üõȃc=œ¹ù%¼ã§ªOÔÈ몫®ºöòýöoóðïþo¼ý&:­„,+%ôç<Ö…Ð/BÔšeöú³9y3Å눛íKðºêz6UT‚ºêªëJÔ#?Ì|Ç;8÷ùG¹ùèÛ¹íì©1&..LíHf˜½þyÌŸ¼™öÂQ¢¤Yx]uÕ@^W]u]Ézü‹_ä¾ûîã#ù­$æW|ˆK ´1âıxn‰™g™¿áù4fˆâ¤ðºêª¼®ºêºÒµ¶¶ÊÝ÷CüìÏýÖZ¶¬åç>ü ó³mÞüº»8rü$ëÎ0wýóhíâ@¯«®ºj ¯«®º®@ml¬ó®w¾“ûß{ÿpȇ֚ÔÁ£Ë)÷¿•^ñJ3 5€×UW äuÕU×ÕTÛÛÛ¼ïþûy×»~Œ­ím’$aii‰»îº‹{ï½—7¾ñœ={vøý5€×UW äuÕU×URé`Àûÿûçïø!V×ÖxþóŸÏ«_ýjî½÷^^ùÊWræÌ™ú ÕU×%VÝ~VW]u=½ ž¦<ðÀÏóÿîè ¼éMoâÞ{ïå®»îâØ±cõª«®š‘×UW]Ws­¯¯óéGåî{îáî»ïæö;î`qq±>0uÕU3òºêªëZ¨<Ϲxñ"N‡¹¹¹ú€ÔUW äuÕUW]uÕUWYÿó.›qÌPIEND®B`‚PK:¥úJ styles.xmlí]Ý’Û¶¾ïShÔIï¸EiWÚÆé´nÝfÆvÜØ™\f ’ØP‡?«Ý\öeú}¬¾BñK‚ @’–+k•ÌØÏpp~> øíŸ·Ñà¦Yˆâ7C÷f<ÀØGA¯ß úòΙÿôÝï¾E«UèÃûùÅƹ“åO̸pœÝ3â›a‘Æ÷davƒ-Ìîsÿ%0…îeî{Ú{B+³-N™åÒ9|Ìm ÞZY°´o™2Ë¥ƒìl ^¬S¹ø Ù~Ì"g…m‡ŠQÿúf¸Éóä~4Úív7;ï¥ë‘»X,F”Z ì—|I‘F”+ðG0‚¤±läÞ¸#Á»…9°•ðÊ"ÅÅv SkÕ€4¬š=¬­=âamP¿©µoPæºy½ÀÞ¼^ —Ý‚|c°É|ôéÞW¾nmÛ"¼5Uùi˜Xw“qËåB¥¨¤ P*îd<žŽØo‰{×ʾKæ»ßÊîƒÈ/5޶:¥a>w„9ø@ÜTp§¤ÓÆšg£&(ÍKAVö…µ3)Ãk“o#sxª`]§A eÅâx#jØÑ‡î~?¬!g»Š( í+B™dœj-àŽG„§ l’ TÓu û+Tĸx¨à „ LCB-v_«Aö²P%+¤jÂHDhÙ%m59ÛÌ cì˜(¹—J×Ð"˼\g¾/?ŽÍ!£ÆGÞŽ4hN†ß‰r…ðè¸>tèGÙwß2d+Øo"ä›áXêÏOÛ%ŠÜáØ`ۆѓL¤ZNe úèdŒ:joåsÒ²µ‘ñˆF~ƃ™4dš6dZUEæ>ÆÈ†ÌY꣱;1’³†1ö N)Ú‚øùDû3®Dk_JØWúˆ×ú⌲¯|͉ZÄS Xƒ(FF¡¾çì-Ø.±Giª(ÇÁžæ¿`°Íˆ ?òªôzQø,ôr´h,ÐLØÖt¶ ³vÔÚk”(ĺ×EPž±ù/`ƒ•§i½$‘=e9Ü#‡O#®ßúÈ4%àÏÙZHÀ("¾²5s‘Ö)H6¡?¼ü·“àÙ LóéF–§èWˆ×B‹¯ßéÙÚáÙN•”ÅÂ÷W«á`…îw¸*%9ÉÄÈ!¿y‘l´s°´x¼sß Ç7®;wÃXKjÒñÔ"wðú:Y|<p6( CdNƸÝi÷雯áÅSvëz¼ºZ¹º#Ü]˜o–SX(“ü() š¯é’¿Š‘F°s…DŒDɦŒ3*Ç2…¯×±±B?²h"‘1àÍ0J|Ys¯0 Y©Ü‹Ü!¤Ïû±¡$#þg»d'r7zSd«!&ÆeSæ6yZÔ§BàÇ^EÉYø&»“$§Ï"WXãG1ùx꟧Øo~úܨÖÁ«4k1¤b$ Fw|3KJuжõ· ðFáíÇfÓ$—ÁG-Ð&KÖ7¥É’º ÕFKÒ÷‡•j‘o¥E‡­®‰U¼yJ60¦³'ž_8TêQ¸ Kñ-=8)b?/X…*p/q¿±#îwqášNâXI#ØfUôéB`tuÔwTÙ ÀÕ¹R¸aLGÂÃ& ¦¤È6 ËQÀRðEPö–­]¢”8=ñ) øØ?"dÄ]mØIÑNi?QÂïW'Gk˜oH:”„×¾†åËå{€4Q@/Y†Åá"mž¨¤NBÌÍjÛ [âxÆRãØ‡,ø³%Ês’¡Ã㦷 $–‘ñ±¿á¿ ©£&®7Øà®;û†>E)•8^² q ³_B:"1O#S½q›tüŠqý4ŸÏØè°˜•-S m[Ô2nš?Ë…€€£Ó®T”s+$h€XK‹û9¸L‚Ó ™ ks+5œÔ ZSs¹Ù¨ä=láY•7,@+sg*vÛ¤Fþüg 2ö@Å? ¤±ØˆøA¹‰çèQ&&ž-3|Á~™ŒY¢àI‡8p寽½™Àe<÷f¶èB–NÙc:eÑÖ yçë‡ô´1"R¥EŒÖünbáw®ãY÷ü- ‰‘šw5±Rô(¬ì6S2â§aÉÄž‘xå˜ã9‚o†ÕŒLkœª)|°™í–C’ %Kaí'ßÇ|<¡—„´¾V/9‘=Ï'ÖøÜ…†«‡]Î1pO¡éÆüFe«3TäT™| KH÷hܾñx—‹Þ«ÂCoǯ¼—ÄïŠÏ…_=\X¸Ï_~xKbYÉi*™˜ÞŽHzêÖ‡Æu™Ü ³zù*vš}ü ˆ"„b"ÀiÛ¦ÞIÎ49B®S¤—Ûö¿é“‡“T¸8É¡%e61W3Òp¬Ò”ø3JcÁÒLt¶Kº ¨ó.iηÄ|qžµ,¸KO+nûä‡u*ôvá4ú¡ÏöšÊÌ{Ü,zb5ÙwqNÌ0½0-7ö˜Õ¢W( Ùy<ïf"ÉŸÜA’·$“™ ßÞ4ʦDÉ ’$­›ÝöÁq5ÚWf4y0¤UÊa Ÿ¼Ê!Ã@W9]Í&óº ¤Ì–ŠcœfØ …)b†ô`&¯‘ Lά85â»nÄ(ŸT×CØ žçœ ]ÏZýlz‘Ö°Î/¶Ÿ…þ1ëgg ÇÖ5V©ÍãZ'ÐØI•õL»¢·V ÊÚäé¶[âO™[Jºðóè ®båfàË\®›»¿ ÷9;¢…ë¸PyEÿ*²<\=9äd'nm‡Ò qzÍæÝm¦.»ÙÌPú@›©ª=¥ÙZÎqœ…é¦BP·¦X͇öìl±âŸøgrzD:;Å€ÅmCßLï:-¼;=ÂjH{Ž/n­Oñ=Û '%ø¦í{Ó¾"Ç>œ*Öë²-`34>Ѣà gÒ ~J\Ñ0šVÔ!Ì;A¸¾rN‡ñ’3ÏÚyöÂÎ<;gžºw/ìÌsÙ™­¼v®8V'¯4>Ðç>¥\7òí»2çñ[‡eGçì÷)W¨ÏuÀ¾¼líŽú Fk›]nR%M :Ù4ÓÊ^zkó¶…†8Ê&gWmWå)9 ]90ÉýóÏóÅvòÛX”\îõBq»‡ê|=Ü|b¶›¹q –m?sy+.ùÆ–n&jl€u3Qíö=H}‡I]ÿõûZöÅL§°W㥳2iänÊ”nRUyŠ‹†Ì:Õ×®j´E†¾üÕ»BʹCŠw…”ÓAŠw…”çó׿²%^m+Šüx‡ëׯx‰jWj óÖ,Ôr4J>›Eþx»©^’5¼2yjí˜W­Ý»¾4q‡¢¯/M¾~W¶’|а·XjÎõôßažÓéôß÷d&†ÔVì†hC®ÌÒ°’»ËÈecãÙ»ýŠ<ÄjCQXva@®`–ïQ8xKl $ÿî~Ð.®w¿õRg÷dÝÔ'ä­(³ögÇö´'›êuÇgúZAÍvýb 6{ f;_xaP»}­ f»PIP»{­ f»Ê1P›¿NP³M¼0¨-^+¨Ù¦ zµkzáüÓ ^_éï²-Ëóªg˜]ð.y̲:òs¶©ï²,÷¤1ÓsfáÂñÌêצ.Í&' ˜þ³ ŽgVo^gJáÂÑÌ;óÙ™9£pÑxfõÝÙ¦.ͦg6;»fÎ"›@.rÈÈ=«p]ð»ØK‚Ãïô_•ŸReÉ…}§vî*±:7ù…±Hý.‰º©EÄ‚4w@T@ò/öPH–INÀÖÊ” ‡Ô ¿ØòKìUã@þ˜lý¼’VÀQéù1¬$Ð5cü¦Z­èí´ÕzÌêáµTj ÞÃiaì§pKÝlVÝ">Bô…ü ¹ Iš0°Kq ¸+<€R'_ Áx‘uâ(ã߇à|4õT9±¶ñîpèó{°KóŸä^@Ü×ÐwÕÑL‚}øtÐçù×P«Þ÷ôe¬Äë+€¸×ÝÍTÄyŠ¥þéópÀzºO³×7O¼[àÎdJ%ªÂc}aŇO}*TQY×ÎÄ“¼¡.d²u‡{œs……_&9/_D§OËźÆ0âµã0Í„'1Ã-¬”æ)óÆ÷l”ÓªOÙ“WÍïäHòX–¸ÀË“ÿuJ¼¹Ž¸Y¥1è4ÙÒbùT±éy˜ òÝ#ð(‰vÊm72Uw _=ÔÂAûÃ^}UVƒG1H°Ù8•S6~8[ðXë­p¶’!ƒâ Àe[ãñd=,)F<<±X’ëДÉ[Ì5L`EÏëxä[SeÝ‚€À ƒqîìyŠÇz.Ó¤ú |7ëx,œ>|D7ô*LÖüHV‚x¨0r’òyìÞ5×9æ“Q|è«:P—¦Ù+ 0™|=`b|½¸_(¹½BÉJ®PÒ„ï ¡d|s7¿›êñDG+T7(å'Ei/¼œ{Ôî!?8ÐVdázÓ³t½æÇg+×kÒ,\Oºº^o®72®¼9a ²²Ž²5þÔTsUõK‘²Ìšõ“gO’fº–,ò¿ûDá,¤:9˜Áú,µ€êEšÒÄÞdÊs`¿H‹%ʈPþ”º´¯—ïÂ4ã·1¯¡ä"òÍ©„e Óµª¨nS€êWÙ…&íu5i w‡tîû8€­B{U¦ÃTÉ?¾|xßZǔʪw1ñX¤ïáÿPK ØÕ@¿PK:¥úJmeta.xml”K›0…÷ýˆÎló ±€QGU¥JSµjS©»È±âldÌþûšg“(‹,¹ç;÷\_ Ù󹮜7®[¡dî"º—T1!ËÜý¹ûä¥îsñ.SÇ£ 3E»šKãÕÜÇZe‹')w;-±"­h±$5o±¡X5\.|Iã1hªœ+!ÿäîɘÐ÷½ß‡¾Ò%@ÛíŒê‚2ºrM§«‘bðŠ -@> ;LøèP{9’Rj ðiè1.€0ÓóB—š±êÞ,;!1Ä{¼ï:óñ/¸Å²ÝaŒ"‡RA*jNŒÒÅ éê’|ÿ»òdŸl[Ï&ò"€y0ôàf·ÅÂÙ}ÍeŒâ۱´$;”àá8ô#”À4„Ñ& 6eqf'¥GÿÒŠ· ã¹ùpM³NÉÅ·äã. ¿„èÇm%&cÉ%×ã_ÅAó¯ã¢@쇾ÝÜÓ«Ýyÿ+MöIä\ûF«ßœÂ>½t¢b^0ýï8%¬Wº56¸5‚:cÝCÅ=ª:ir×ÞŒiï5)×"š‹ê0dݢ͙¤kQ“R“æ´() g©Wš­7 ZúГõPÃõ* ŽâY•ö-ö'axÛjónáÔ¢ÌgíZ«0~’³Ùo¿ŠÜý,ÊAaÁcXø ¸ºÿàÞ¿¦øPK"ÏàŒ©PK:¥úJ settings.xmlµZÝnǾïS¨D 4@d’¢-›¬%ƒ¤ÌD6%$£i{1Ü=$7Î,ffMAœI›¦ Ðm'MRßíeHð£h`_¡gvIE–¸³Ë¹µ?çÌœŸï|çÌÞ¾s2¢@H‡³\ñZ!·Ìâ¶Ã;¹ÝÆæ­ÜÝŸÝæý¾cAÅæ–7¦6%(…È |ÉJ|{'ç VáD:²ÂÈdEYî[¼V¹øt%R_9¡;ÞÉ •r+ùüx<¾6.]ãb/–Ëå|twñ¨ÅY߬ª*~ú¢*Îù¹"ýB¼˜HÙV¡p=ÿŸÛ˜/ò‚i¶r» ;,¶¿{{® þ³é(iÛlÌ/ë¥íäPeå‘ãs«å–½÷ê;ïàóU¤ËÝÜ⎚¸x‡r6ÈínݼQºyëvþªœÕe7¡¯– /d“ûбÕp©àÒv©PÊ&ümpÃåË.Þ(—R.½3äã6ØhP6yICs „åv•ð Ž}V|,á€Û$½O¨\Yü戸›³áì«ÆZeÑ;˜b²šÉ÷íKK•J8ÚØ: ·Ò»21öŠ[¥òÍôróåV¡P*¦•+…õ§K$ÖL†G¢Û‰©¢1›5j\)>Z¾òr±TØN'ý]ÎG]”u9ê†\¨LÀÔ$î©:§Þˆ]NîuI¯q~¼¶ì¾j—±Ë×^,¤\ý¾ìKÝxÁÀÒ«ÌÂ5‚Ý…u„õ´O9¦ÿ€X“Ê–\¼iI·ç(¹ü,Ë«òø‚'ˆBZðS*z qSµ—.ZÛ€™#ù£ZÄHùŠ×²kÄ:î±Ë¥a]JêÉ©©=Tã*rß’\Í‘ü·q‡Žejù¨›ôqƒœ^E‚yÝϯ(.ˆ†à£(ïr[[¸kHiQbÁS.CãZÀËué¤Eh¯qÜàbDT—z£D61´¹6èæ³,ƒü.éi$Æí f@þ]4ÝÀ4NŒÑ Â;žˆÐG;ÿ!z¥3"”ÐóÎiÿk{í 2ŽÐ~ýÊêÔq]°[Ž¥<‘œÚ44('J¤n‡|9Þ„–Èó‰Ä¦ü?^M#ŒáŠ6“)|í`Q¸Ç{F’C'C¸²ÂBR„ub{{ýAMQ ܹjRJuЬ_M[:v›óËt ˆŒ·T.mÝ(§Œ!d%¨á…㪌øþiÀ5D kD‚2T©3`zNe¢dÙ1•?ê÷‘žšdÈ&éÝ›ÚL%!ˆL4äÈSÚÒM¬¢ô7P[š¬Øû†=NÃR5Që>öLí3“*¸6Q 9VF.Å߆«† ëØ šShóñ}€Dš˜~ýQ9²ÁÞ#Xù0÷2ETìc\°¬2ÂŽ%’Aíî:¡–G£žbý{x áˆÚó”8\nro‘%‚UUã‰tÇ%Ök‚6ý^:ä¼Eyœ£šïØP\É6hŸ<‚.óÑ€]¡–V§b±\*\O9{eVÐî6MAlT¾_ÛKfm0x…N>CÐô¶ƒÙÍt'`¦jZ!Ô<#ªª£ˆHT–~7 ]¡ªžâ1ª›B“õh‰¹L4JCÔa!ÖùÈÅNIŸÎ­}`¬aêøäïˆÕ)—&æ¢z'ʤËç%CcŸ>Õ`©Nt†Î`¸‰E>¬ YZnx«J‡°–ǰ™5Wõ ÄQï=ÄÈ—ŽV´®˜K>ZC­½tÎ1ûA[“°‡(œà˜÷HÚ&ÍÓú¤Þk¥<î ›D+°¨ ¦ISº~þË7Þ¼Vùõßÿáå·/ÿsæÿãÌzæãÿžùÿ;ûðqàø§ÿQàø ü?þ_ÿ‹Àÿ[pú$8ý28}œ~<þ>x< ?§„ÓÂé'áôÓpúY8ýg8}N¿§³pö4œ}ξ gÿgÏÂç_…Ï¿_ü+%×dök¶õ‹_ýöwï¿üîå³3ÿïgþ—ÿqàÿ1ð? üÏÿóÀÿk8ý0œ~N¿gOÂÙ·á‹oÂÏÌ‚¬€äˆ~ʱ]¥“ÌÒðžî¶£©Ô¢4á"”òq‹Øú»–‡ŽF‡ušé™Á¨ yÈ÷ OÔp€¾‘G¬uµm0g°lŸ€Xú-ÀOL }PZ•çÍ×¢’?ø¨ÀjÖ4¬.ñË ü•~óIŸCïþPKKÙg$P-PK:¥úJConfigurations2/progressbar/PK:¥úJConfigurations2/toolbar/PK:¥úJ'Configurations2/accelerator/current.xmlPKPK:¥úJConfigurations2/images/Bitmaps/PK:¥úJConfigurations2/popupmenu/PK:¥úJConfigurations2/menubar/PK:¥úJConfigurations2/floater/PK:¥úJConfigurations2/statusbar/PK:¥úJConfigurations2/toolpanel/PK:¥úJ manifest.rdfÍ“Ánƒ0 †ïyäÛ&Ú¸®¯^Úój‹•¯j~ š*!–eI—‡Ü^äeYЬE‘xE‚«%yL,Ƽ‰ ­FåÌD~ûªåÌTs¤uИz÷ =‹itP90;¥¿‡v 0‰˜´ Ó- è{£´ÈÓBŒš¤€®_ƒõÎ š‹€!®8~c»+Ñô¾[Pó¨-ý‘ÇbV$>KGç³øÎ-<üj#–<^¸Æ?E¼ÈËm„—;Þ;qO'ï#wjùj¢OPKŠñ²ÿƒPK:¥úJMETA-INF/manifest.xml­TÉnƒ0½ç+¯6p ) ‰Ò69÷~€kbÉ ò…¿¯AÙª*UPñÅ{æ½73¶«£ÑŒåZ•(Å Š@1]qÕ”ès·çhµœ-$U¼ëŠó" qÊ^Ìy£ M-·…¢láX¡[P•f^‚rÅOÿb`ºX72´œEW¾š ˆC¼é®Þµ"n©Û—ˆÜ¹nK¨8]×B‰hÛ Î¨ nä *<Æ·:±ƒ£CdŒ†ÝÞË/E¹°Ä—¸UÍ \ÒH>ŠEÐN{3Êöð@v_\QÓ£øàÌy–¤IY2LIºÍ†9yÝnò÷ü9Ù®óÍzþ’æùôY2­\ß…p[î÷ý!ýñ(\ë:vrX ŽN¯œ ÏozµoZÕ¼ñf¸!6#”1LmóÆü]øÿq=ø ­W½ì9f·#ÛrÚæª ^O§b.ȯŸnù PKS3ŠW$PK:¥úJ content.xmlì½ÛrãH– ø¾_ÓØ”E¶é‹(’Q“Q‘‘©éˆÌ蔲sê© $@ $À@]úa¬þaÌv­Íf_öaö³êKÖÏÅîHÀI¢$¶Íd…À/ç?~îç¿ýåa6uîü8 ¢ðû£öiëÈñÃqäáÍ÷G¿_:ýåÝÿñߢÉ$ûo½h¼˜ùaz2ŽÂTü¯#¾“·ôôû£E¾Ü$HÞ†îÌOÞ¦ã·ÑÜåWoõ·ßâ\ôK’>NkŽ/ë_§þCZ÷cx×øÖÕŸ_Ö¿öb÷¾îÇð®ªþù$ªûñC2=™Dê³¹›¹UÁ—t¾¹òƒvë ÞQÇXHÆäãuM¢E(6!î. ÿ0÷ã¹Süì­1‚NõÓh!ùîÒF0zàO%ÇP[*&ŠNf‰ qP¢ù[íkó~ˆgõ†ƒÃy“üˆ9F1N’nZF׿Á³¸ÅÀ3ibAç蔈$gꇉN&îØ?ñüñ4y÷߈—«ŸúÖýýѯb#W³Q4m9‚qË×fÁôQzäh£gN|±ò‡“„žž­žå*uc5N~ãá“ü!®s“’’9ôgÙó ‹[áÎ:íqéþŠ{£G'7~(ˆF°ã8š¹áö–ö^ RŠ_|Põõ7¼)ÿœžT}oÑ «æC´ˆ?v~ñïKÆù“;’?kïÐ+¡>‹B˜C–è|‰Âhé¢rïmaÜÙHPTÉ‚²'›‚Šé¯ÿMÎo§]æ?[ØÔ(Prè7õ$X²§®â@ ¡ìÑÕ{ :ëèì‰è¬; ÏÝ×Bg:Û1 èLÒYÿ@gÛqüVxþZhhp ¡-ÒÐJÙëUÑÙp[tÖFÝn=Éw¥þ¶×²g4¹½’MtZ“aÛfk™=¶¼‰~¯;Ølbk–kB£¥7¼½­)ó¶Ûk_œ'£ LïXlok:¤5ö&ÃaÕÃïXlokª‹=öý~¿ {øŽÅö¶&1oc{=oèw[6ÛÛš0·>´?aO#)4Kh½‘&ÚþdrÑ­’Dñ‹í=¹4‘0{ƒ–ÍýÔyr"·ô û¬íööFºè¶zÃ^áñ;ÛÛé¢Îö.¼ñÅгÙÞÞHu¶×ï´Úßf{O$],ÓÛy-Ù#©[/A)¿üŠÅæŸHö¨o´èx·S¥xò;»ÝÉ5 «¯JítO$MÕ]ï|2RîjFÚö»#Ç ë>‘ ×,èä;»Ýɇՠ+¹Åº£ÉE×z")´>mõÏåt*@ÇïìtO$áÖÝ 3ð'²“|g· {"é¹>膽Ѹ"–@¾³[ÐídÞ¸çÝŠƒÉïXloì~ƒ‰×ó+´bzÇb{{c÷ëvÚ#·J+¦w,¶÷äv?…™Q·ïO*°GïXlïÉ-‚vÛ›t†6&›óý±ÒÒÞÞ“Û KNX·å_ØðÇó'·6fûä¶Áâ&λ4´ÙÄÞXyé oooäŒ^o8îW\ÄüŽÅööFÎè üñ¸Â}ÊïXloo䌶?tÝ*VNïXlïÉåŒÓPwÔº°ñ/žï4ѺUöVzÇ"Æ}o¤‰‹ÞÐÚ0‡Þ“K ¹¥¯&<ëí=¹ ¡–~Ñ´+n.~Çb{O.]¨¥ç )ß±Ø^3rG¶’܃Ð?¹eûH»Ýû¯¸Ñ(žßºaòýQÿ¼¼èÿRÐrGb¾hžd)›aûᓽ½‘[ØéÚ¬c¶·7rËEÜ;¯âw,¶·7rË…/föè‹í=¹Üb³½þ Ûòl”ÓÞþH4ÞÛjWH4ôŽE6U3MCœ·ÉDç~Ç« äw,ÀÕŒµàbO] ož¸öF*ë_´¼Þ¸b{ôŽÅööF*«µ½q§×²Q¸/öÆÄ\»YÎ~±7RUßõ'UyÿüŽÅöš‘ªžœUåý›£hê•qÐŒý µR¾Ãp)z7iðâcåÛÄ,°'qiË€ÖˆK¸q íDi‹ííD9ôÜ^¯ÂLËïXäMoÇF¶Q€–Åê·c&Û‘‰¼¿y«DÕ"Ãp³ÆãþvÄ©Y ûÛ‘–vdëoG*Y½ÛíyU°§w,V¿Ý¢ Õ¡U8Y~n#´ªßŒ²)°nüßdÒkWp}ùÎn!½Ýb5Âû\ÿ’@VÞæüÎn!³§† oQ©cWR‹…šb±ú]I-Ñ·«ß•ÔRkõÄ;,V¿Ý⇕œÛº8¯°üÈw–žú¦5¸Áv‹6“Éxè­º‡Év ä5·×õ«n‡Æa²¹m£Sb±úí–çù_^„ž£è¥Þáê§uE…úŠ¿ŽmÚF¥¤°ü /I4*l ¶+†m)Ì‘,¹Ö³@ÊÖL^ÛFŠd‰–ló9 e¸µ`¶f²ô&ÛÅ9)Ütö±¼ ‡[ ÐÛ.:vrBžÍ(%Ë '£Øw¿ŒüIû0ôÍUÞ-6µ–®r-Öó·Nëo£È{ÜA±ÀázÊÃb”éÔ¯>XÆò¼%ËXn¯€ A¯ZqIš;ÿP*>¶×zzE pmP·Ï¶‚âp3E€_™¹ ”$…ÓÄoTžÃ™ßáÉÔŸ×:í´Sþ9&Ö×2M£yá·Q”¦Ðß®uÚîáõÃVšéÂf…R©§ÃÖSø ÑŽÊuÑþ ùƉñ§‘ÛpãFxW>Hn]ZþÏÇšôÚ ,.QÃà\¯EIÐPlìúý|4OÒÑ®BhËüj#oÒ¯ˆ’ãw,Ès3M¯1òì¶Ûƒ…î…îȹ8ÜL«=à‹%À}IÀn¦â(ô@¡–j›CÕnmfð8èD-IÔ6U¨ÝÚÌt щZ’¨m²^»µ™aì@¢µ$QÛŒÄvk³Œ‰HÔŽD­‹5·[›EÈHô@¢–$j›×nm°t щn9ÿ¶ÝÚ·ÑD_ ‰ÚæP·[×ÑDwI¢¿sÞµIýj·š ™<â‹£·­xŠÚ­f¢Aôö:éÍÚïÓP÷Ù½½Nz³vâ4Ôø@o¯“Þ¬=2 un>ÐÛë¤7k÷JCM¶ôö*éÍÞWÒP×ó½½Nz³¶*7Ô†þ@o¯“Þ¬mííVj<ÐÛ˦7k—D{»5¡ôö¢émÐø6å}þôv ·µéí¢7²Ôþ…½íÐÅß9øô¶C}çà_x ôÖ¬’ÙÙ±“ {~ š—›ÞîìIŠEïâÅr§×Ö¶•–‰íÎNÝ/˜ôVÞvê68ÐÛ¾ÒÛ¤fá< *”tµýмíÎN*~.T¼¢÷Et¼§íÎ~ä^¼PEòéVÂZ:‡š^ë‘èIë´Å÷ÆK&ÔÑá¾Tîê÷:ÏŠ¬rW$Ú]ËÃò°¦ Ô.Ƽò?ÈI¢D;òÊÅé°CäÊ/>ÎÅŒH°ò§©ïz‘øÇ÷Gž PßË=€tªB[ÁJ„Õ†ÜZ¾rí× ¹µ æ:亯r[² _ Öú°úVYÊn'OUr½Ým¤ÒË4HÌ>gç²¶mQÕÜfëT)n½³öÖmßHm‰ââ»;Y|#šo“‹/!ºvï¼SÕD–ß±Ùz#jUqë½à­Y¼¸ø‹],þ¼‘úªM.~5iùC×Xm°‘êœ[Ú`n[Mo½‘ªÅ­÷ŸÁÖg¶ŒõÎd8Vttãwl¶¾%٥ѭo¥yû|K²Ëàl}K’O»õ ö¾%Á©QŠïwÚƒqÅaçwl¶¾%Á©Y>7pÏA3_µõóîÀY¹îÏ·$v5z»õ¼¡ß­è|ÎïXl½·%¡mØ(Á»þ¤çU<½c³õ-‰sð9›ÕoI"k–KóYlø¼ö¶$’5|CùN¯âwlö¾-{R£{w/Fýa…A‰ß±Ùû–„²f÷Î$ g™ôž…T6¼p»U¥é›½oI*k¯v ­á$\Û¢\*æyý~¿JÌÃwl`¹%1oÏaÙM.ª`IïØÀr;rãþrYozGq\[’QÛ;1‹^lIÌ<ÏðZ:í¶äÃ•Ž§z¼]!õT´Œ–ï,¥´Æ#_/¶%T6°ñhTŽä;;ض$Ñæµ­ ñS¾³C€mK|m`n¯W%·ñ;;ضdޕμzëx~·Âü(ßÙ!À¶%(o°ÞùdXi¾âwv°mIà PØ`r1¨0Èwv°-™J› °~gèU¸ÿä;»X[Âk5Óǧy™_^„ž£¡Þ }›¤5E8ÚA¥®°ü ¯K4«nô·e~ZŒ­'C>Œ=®³MŒ­'“=Œ=½²ÕøQÙ%¤¿-•ke`.þΞ4¸Étˆ4vÃd"~”Nã,ÿä>½èþ¿GÓ(þþ(¾Ž›v§Á(²ã‘ÿáƒmkžR®†ŸB4°ÊâÐQÏ‚•;§ueŠîx0@ïØla-±t ˘âÓ´è´Ö’Æžlg»*KÜi­%(m .;²ñuZ› /ë·Œ°Yå¦Â‹º ‹@êµ™”´& í£]û6šhtÚ›Ê8«ø,‡Kín*º¬»À­“r{Se·;ÛIn*þ´÷@?Y}ü·N^ôFã s¿cƒ«M¼'§á-ÁeS©qix'¼qSÙ´qøí JÍdí´7•f_$·Zô¶ÓÞ\t~A0´c¿Bçwl`¼¹à¿]­l8l ÇZ¿c±íΦòù.Âu:› év~ã.±6ëßT߯úWë÷ö{ÜT¬Þ`ËÂæx=Åô/ëÚEΦ’èl¯ä…õ«7u:›Êœ–e·¤ºì 07@·@N«óØzƒÖªÊ“ÛÒ¦ÂåV¡”Ïñ³ÌÜü6¹wJŒ6ãQ÷ÂÊhÓÙT¡¬µ£þZõZ¦×Î×°5×¶gY CÐr¹«éŠéõ:¸ï'&ve|[¯qü‹‚ÙdÒk[Å>­×¯¾W+¹`·Ñ®¸³^Gúu·°«×zå×ÝÂVsÖëÿ9HRXÿ×ü»Ã ~YÌðl÷Î;UäÈïØb-yow€°ÙÊZbݓഄŽ;ý®•„·^Ï÷'%aÞdÓ€XK \Ën[3%£~BFk·™0}|îVñ;6HXK¼Ò©T‹Áƒ—Ö‘ƒÄŸlîgw’ª—·}q]¸õa*ëÆK%ú-XR¯ ·üZK^n:Þéf ÷}C›éN&ýödÇ›)ÜÙ m¦¤dÚö7S¸µ›"³Q·ïï3…;¹¡Í”hÞþf ÷jC›tþ¤»ãÍ6SÙõv›)˜ڌ۾ ‡;ÞL1\~ån–jF3ÚÝÆ%3^œ'V3Ú]¦e3¬讋ß¶3’÷ÛbF»ki©``1£ÝÝQ2ã`âõ,l×ÅZÛG“ÎÐ ªv\¸,ó½Õ·IÖº.F^ZÏhW¾ãº‡h9c§ßël Z ´qàžw-¼À×Åp>Û-㮋x¶3z·c5ã¦<Ç6±ðº¡f9c·Ó¹6´ZŒ«º{Ò ‹ÑSMÜÄ=Z UjzI²¬¤&oÀÜ/³däu1t©q•¢— Ok9Ùš>n$¹ßð,k5 ÏWU"öº¶<ë4ÍU_t›‘ëbhÛŽ°thRkƒ%k ï:XªÎM·cmãµeµ½îس©[Ë‹æpE)›)7å>¬ùÙL¹)÷±6çµ-ëæ AídÿeЂÿÛѸmYl§d™¬bS&6uÆnÛjÊM™˜mQ1å¦Ll0ö+޲q žß9ïÚÈ¥í‹ð ÏÇ“žÚÖÞ¸ ÏPÃV€Ý¸ ϰ?ìz61ìíëðØv8Sn*BqU;›)×+J‰O¿? Rw(G%¾¼=?Æ öüEqÕHÑÅJ›Š9r=£  l.ˇؠè}¡fáU«’áó€äzE7s|1tµ^ÊŒ¢}ÑMžÃuRésðÚJñIûšKëÁË.åÛ¶ÙÓzéÖ{*á!^kÐêív·–U‰J==«ûÕ²pOY¡Õq«g7å¦R„ÛuÏÛVÒ½eI•’){]`%EX–=)™òbÔZ‰g–eMJ¦tÇ®g±ËI\ ,kŸ]%•ò¢7µ.þ¤è »âà?ÄÁr§'ó(ùþh,†òU„•ö4ö§%UúgAƒž¨¸üxÌ¿?Šýqú¦„ÇŽñŸïŽ/vïßN³ tñXië¿òoc1Mì&©öSì{Ú_7±ï‡ÚߣéBÿþÆÍÜïÚ-mD¡Âžá/`…²;= fTA$~úXòÙ,òÄèIꆞ[˜]¯ÄÎ KÄb üw¾'nù°LZ«ü@¬i1 ¥b.þy‚&±î#í·W€úCh«-Ì”ßP¬ÖÅÂØÌgèØž½0õïü)ÓÙh1ú©Cáw\ þ©âøtθzœ¢iÂïÐç'ã[WÏ?þþÿ¨jiÐɯAj€ûèÁt Ÿ6uGâ±”n™ ä²as¯ðØøã$šN£{ß; ¤Á'GÚä²ñ²š_€û´WÖ¥ã¤uÚé™M=¸Ó¾Ÿ!¨t¿âé*¨[ळ6Nþ¯ÿ÷ã¤o‹”þN±Ò]+ÿçÿ÷l±Ò¶BI{—ø8œ«A¾&Jè÷a¥÷yWÛò>iïö>¹x•œËö>iïø>é¿FþÕ±BIg—ø¼FÎÕ±½O:;¾O†¯‘wu,ï“ÎnïLx…¬ËöBé4s¡hëhÿƒöÐþŸ!NÚÿþaå ýï>Úÿ^bå ýïNÚÿþaå ýï>Úÿ^bå ýï!Rž…öß=hÿíÿâä ýïVÚÿžáã ýï%VÚÿþáä ýïVÚÿžáã ýï%VÚÿ"åYhÿçí¿Zû?œÛ蓃 `Ë6€¡5fø“ƒ`»ÒtËǫ̈O-[lÏŒúä`زUÀþÌìúžy­¶û3³ë{æuÚìï™ÎÎï™×j)°=3ß3¯ÕZ`fv}ϼZ›ý¡i袱´ôvd7ø_Ï™/6jàYãäÅF Úÿ^bå ýïNÚÿþaå ýï>Úÿ^bå ýï!Rž…ö?¯S»±ÆU™Iç•âjw%ÖX*³Ù¼V,í8ÎÄWeF™W‹«]FŸXcªÌêòj1µÛ˜k\•™U^)®v©b¥2»ÉkÅÒŽãW¬qUfyµ¸ÚeT‹5¦J-¯U»u‘Ȳ5m ¦uM=» N~q0o<¶-[lÑÇSù-˳%¿8:ž[]˳%¿8˜:žÄÔa}¶v|o̶lï­ö®ï­ƒÁC“ùmï­Î®ï­ƒáCÖí½ÕÙõ½u0}è¦ë³µã{ë`þÐÑe{quº¸l ÃäÛñÂ1uˆíx.¸:Äv< ,b;ž®±ÏS‡ØŽç‚«CldzÀÒ!¶ãáêÛñlPµ/±g‘ðØë.ÒH5Ó1?EÞ£ú>§-ÿ$‰&éÉܽñOF±ï~K¾?Jã…¤Þ<%üW~â͉;Mü#~8ŸOOuO¢E: Bÿ„)O‘ÜåtºHÒØL”Ï`1ص;š.Y§Í(âŸò1vïÅAÊ’—J¡6/žÁ¯sˆáñÄ÷o'±øÉÁê¯LâöýJßÄîü6'Òšå†ãÛ(>IçâáÜ]|AœÙ»›·÷—Þ …â´×í"m÷~ps‹tÝî $€ƒÿ„د'˜ òrÄ®¿½½ý‰Xm0N±Ÿœµ[âÿ:-üŸVûSÿ·õç/>^ô[ŸÞ_üø~0l_\œÎPxZ`Ìækü[rÝä‹âÉŸ\1…›Š7£ðsäzÒ <¾ó ž½ûW?N9ÓÖ)£vî†Å—¯ŽÞu$ÖÄ;µfÐJ ‡|ÏÞýžøñŸ\Áhþœ8?-ÏwVÎ<ËÌPŸÚ¹öÇ·a0v§Î¯w~|ø÷uVÓUô{xü:¿ûÍ¿ ß[MaHÛÿ}1}t:çÇòÕ³wâÜö- ¾ÝÍ–”Û=‰&'ã(LÕu¬¿~åSÉÄ™Š?}/¨w¢‰óFJÚGKæ×Ý"ûôqŽ«³ˆüë$ Rñiê 6#ØHqqr.z~ö]Øö»ÂJ&eC.[¢øÿñcnâÜRËúzÚæVhÄñ­;Oýø¬äüPú;K=,·çëKQn*vîÇœ¹|zT6 $¼¨k­bÓ€¦Ì⯃¦ózASf`×AÓ}½ )³jë 9½ )3"ë é½^ДYmuÐ\¼^ДIuÐô_/hÊ,“:h¯4e†@4Ã× šRË›!óµž=p–¼F2»1 ´ò¢õj b™®€Ò»„]‰Òb%èÏß%þ•úÕ*z(´GhñÎ/ÁÃ/ðo¥·K˜œ½k×R°Ä€rŒŸÇøQ¢SwˆÁdâÇ`yJœ‘ŸÞû~è”­S»[wì£ûÐùÌ‚ x‰6H¯î —a’ºÓ) }߯ûý×éâ&0¦ÔŸZœ(wœ BpîƒôVFlXk° ¤;u®Ãñm…Áä·T{¨+lXÓ£8/Î"ñãÀCTÍÝ$¹bo­1Íe9ìýÎ&ë öãlž> Ó[qVc7¹Õ©»Uw˜ßc¶˜¦Á\ÂŒ,ÇãhGQ´ö™¡A‹TÝ®wdIJàÃÄþËÐÀ7'\ûë/>øn6™ÅmYÔàãb> Æ.ž× ׂ æwüí&8ôœq4âµùWÁ4%8𒬓¯â(Á~ôëq¸ºL×þ8Çs„åµxc­1ˆý_ùì\áå¹þ Ÿƒð[bÿ9Ÿ‡Q™_Ÿ×üCì#=;¾Ð?€—yþÔO%z×ý*¤¶Þ§lþ4Ýfgï~û!’?ï4J6\c DŒãÃzW£ÆÖ˜¾{ç{ΕïÆã[“¥\Ôâ“{'.£Cªw9‹¯?J,xj½Kö0ŽAfù0 æs?^kˆÀƒ Ö_Ä?û£È,o£8/Òõ†¹¾õgë¬ÄœØ—rœ.Ö»kQÖb¬ÉÉ:õˆ Ã‚’ðP$Kœúþæ¼'™ûã`ŒéÚs¢… !‰±ïx®ØMüµ&ùõÃoÎG1ÀZ¿Og¹ù¦Rÿû‰Ù9#ðvE†ŒÖ©Ml—³¹ UgM…Ž·ÉgþŽ$”$/ÎÚ#D°˜ŸÅ>È&~ÙPõ„O¸Èø0çyr·öqøì^ûÿÃùÅBút!j š¢Ù ΃XÐòæy¨[[B¹õ§s û“ù¯¿àŸôß“¿¬5¨PªÊþ4MÿáÒþt“þy½Äq_ïÃÛEê Qÿ¸¶ÈqâŸ`­ïÿ}áÇÚö“üþk$¤/¯ o*c¸â* £Ö– \oƒo§‚•ç¿®ÍÕPjóóŸ×Äç>ˆÓëlHÿ´ûŸ³µ?!çZëÓH`Y²)}€z¬N ò§¿ÑÅåNZö_ƒAë!0®­óúZøH(ð çj,` Pïäˆ~òS¼?,Q ¶]‰ŒS—I²0$¦óÚäöõã'GH]`»sÆî"‰´Ç¥‘3«ÇéZ_E3ßI¤ éxQø¿ÿgêÜGñ·õ”˺u'À ;÷·BfŽX•Ê Üit㌢X½3{Ìl.`f‚1?¹³ùŸ•©i½]“YèÑ ÆQ(6è'´Eà{n ך\òÉ­\ð,ƒYð`ü^¼‰g û¸¹BKŽþ:‹ò)Ƽtúè¼O@¢ø¸ü-~^û°ÿqë¦8'Bé…À8ܼÚm²˜úËZ\:t§ó`ÇÎh‘‚Ð| (¾Å+%9up€§ÐÙª)ÞHœyÝÄîì/âD8AêŒâè›®·®8WbcŽ+€a?Nè_yå˜ýäãz"±ì›ˆè2Ž7™ÙuM¸$Øo‚;ÒÝ,ë øÇí#JŠÜKÁ +'N=3œ@ZúÖB`É($m´OÖk‰ŒgPˆþúøN,0'2sÇ¿^¡.÷JX@6Át |B«‘/Ëξ¸cçŽC'…Ð.ëK­}å81ä#·ùœ8ûÛßÖRÐs¼À¹b‹ÙÈñâàÎ_o@AN×¹ G0žÄ;FBÿ½Rç›ÿè$‘8c1õ\œñÄùÆÓ“OÎ$Žf@{÷ô½€ïíø‹¹ÜzKú9ºÇÉ.PÖ‡“Xr¦q ‡ïÌ¢Ð\c,ð)'3šµï{µíþW|· ¸¸’1Íà?¼ §@ÊBç£? ÜðŒd }¦zbˆÅL?‰ÿ"}ŠÚÞ‚ºS|ò½(Ö5Þ^m¬X êû…,$¡óÃ"˜zånŽ^m³äWm­ŸÝðf!˜ÇZ},iê¬XwÎЫmä¼¾-±ÿ¶C^±ßaÙ18L™… °:ÇÜ´žõ,¬gžÿÀ³Ðbõaê_»àócc Ä~¤ óÎÇ öÇà+r~Åã[ÝkÔ«í,³„8o&âî÷ˆSˆ ä;mä‹zç·“ Ž_ƒ±LÄÅëDÀ£Õu$äq„&‚6Å -'¡èq gòE#bÅr†*ã¶äi§%ãj–„ƒyMˆˆ¯!VjÄXÓ³;wºƒTÆ+ÐâoWO?¿<ãh6ןåƒñ-œš»À çÏT vMÇÇ‘¸?• âG0Qé4‹NW3ð/å¡íý‹£wrF#ƒ‚SÌ|’RÍqE”|KŒ…2’>бüzuì|›Züó}èÅQàËa¯·âN=v~˜ºão?øqüH®®{äôäZ´Í )-ˆ…8,¸» 6PúúÇßÿw,ä#ÌÚŽIšýÇßÿo‚x@KIcŸAíBÎ[‚¢Ê+p”qcÇB1½û8Há‰@OB«r3ôû7nìMA”c“øƒ¹`ªÅBZ•¨QÀµ­|,)P "‹ØÎýÀb„Û4¿=;»¿¿?õ§§‚dNëSAiïG JŒ d¥6)• È Ö³xÐó¨“.ªu$fã üÝ"Yx‹Ã2Œ )7…‚š àÄȸXXˆä!oކ¶ ŒvË”K‘B}å’µqVƒp<]x~õwúWos‹„Pça6}x”Úmµ[ƒ^¿×+˶øÜ>Ò¾; R¶òº8?z÷© ”âÜ­kåÊÒ¼´Ãh0w†I·Ó·ªŸ²±™0”[ A¢b­.X‚;TTOó×Y*µ¡ú§; ¦AúHö2A>h4µ`I©{#þ«ÖA¯$è¿Nؽµµ1Ã$ÜÁ¼©ù¯t¡ó ¾¯#j[Ë‘|„Ò-áÁ«ÆÑMˆùÊ™i)5,NòòknYWÌ^=,ÒZ5_öÃj²Rèiw– =…øÈz"Ë5ÛÃþM¿â‚º') IÜ ‚ ÜDp8\'*ßä[t¹ÿîÞ¹æ%.~¥ð?¼Êï]”zLFŒ˜8.Ùîàf€‹Û™á-1s‡B-Ó^Y†x/§a‹ß‰±&`±£ú÷È×Q(æ }ßˉNBs“<‚ä&)2C2Š R€Xˆ)â¾öÉ a!üðPƒ "Ïn…\ÏDˆ‚rÂ7½˜IP°˜ ö%'ÇUøÙšcÞ½ÃÙ°îåƒÆÜð‰¶zXá£Î4Íö£ã­Ì‚©ðˆ½ÀSF¿{¸ímEᄇ b¾-ïî{L‰dS§$4†u"`S´`ù‚±ˆÍ¶OÏ5 ¾OY6 f‚y^ ¦9Ô䑤x€ÅK`tð§G°Û§2ò\ AÐsüpLJ¤MÃ>3îöèäˆ:ÂÅ2Qó€¡ "ed˜jT>òSp-¤ÿAPf1+ §b©F Zzí´Bô…‡NKн¹‰n»4Wƒ)Y 5‹ʧÁ7_P 8žÅx°Fa·Ib¸nù‘Ø»´q¶O/òøµeJµ#®kp+Ü!’"\Z­µh›—¿ÀÍ7ßWöÇ ë:¬ÑÂéfft Ö…ŒÄ%xæ±4ŒÂ@b^¶Sí“«ŒúÄÁ¹D>AG)sLÔÌJË1 Å» N"óµï¼±É,Üœ…ü^Ò#+?X„¨ÑÀs¡—6 þ€/«À£wš€Ï¿RT²u¸ÀPÈŠ’šðDKŒ wLNu+иÐk$Á›N+eÜÎù 7huò,¿Ï;·G" ‹EBÒMÝPA’)$ˆ£¦V¦¡ýh$ü†R°"0BiðqÒå'·Ïª+œZÁ7f¬‡âVN}¡Z“.š #²'œBèŽà/.8Žyà(Žñĥ!Ê·A8Šàî@¾1 @% É6Á¾¢DPZf6²ìdÉhr—bn5&ØzÜ@¹_Á—ÊàU£#_ÍÞÓÖ-æ8Í,PÀºç±Ÿ&äÓÓDGDš­ª’ÌÇ:Mç¶²++/O.‹¶²±è7¼È®It°_ýËç »Ó?]_IØú¡¸ì|s—R/p¢PÐ$@ŽÅy3ÎÜt|«}cÐL0AKž8W d¼@K½b(w L|7(ü¿y pqŒßŒQbT8×_â·ø' ì…BÑE`©O‚S[ß_ilñë±àš÷ÀÌŽs©•ÒEEGæÂLº#w2nXŽŒoéWmäÜÀÝ@±üHtÿ]ŒÒ&T«ÔRÐpcé<î—˜ÐÑ,öO¹õÁ÷©PfØ °yMÁÄÍ/D¬òó¬âÔPØÇ{‹Ö¤lBrAp¨oJ ¾TœçÿŽÜ¾8o÷º½Áy{ØôdÊ>œõ \øKM´›qí{PQÑ|rÇÌÄê˜  ©¼ Ñ!¹ucÓÂwéänÅ•ƒC­¸6ÍA#Çe>%—´òì–—†Q!·ÂæÐĸ¢53V¼$fú“c îÏ„^–‚†ö-š+U2hb'`.~™]æâ¶„½ !yâšÇ„Ó¹¥6£³ x¿ð‚HZ2bd ‚ìA,’í¥¾Wf]7mÈê°<ˆƒ(˜©¥Üß¼½³ûØ8N#ÐÄà®gÆA¦m2‘q—985{Z ôf'_™¨ñ|5Wä™ÁKel)h Ü%=Ë`d°O¥ó„htæd£‰åÇÀÀŸï.?–²î…Ìä(U ù”‚x0¤@ïEÅ›ÁÁ`4m˜ˆìDlRà+;Ð1ò…U,¹ ÀXx"Ò?‚!ò>”ÜÀ•cÀÅæ×üël.†U€É‚,ë¦)Kc3m[:ܵýb=i3[0jqQˆ \P@TÐï8вyH—¨1"ýr.ÞôÛç­^¯¬Â箇ҎD$Eµ ’=Í6+H|æòâÄ!L(b®äÆÔŒtGMÅyC?¦å†5®¤ËìBvÊö¨Ü?Fíœ@,¯ü[ ýlÝð³ÆÖ'Yl¸'Œ+„®ù óÀÁ!‹$*8*ÏÄ7EwJÄ t¶| “غÍwKüj+‘†1‹dò€ü·E’âV‚¸Ò¤÷FÜW™x)¥cp¼/@'‘XšxHBôN=v÷äl…Œ »å›F¹û2Á#Áƒ¿^Ã.¨Îâ /Å‘˜¤®xI'©;%—)Øåí}KõÅkPÀHaîV Îg:e:‘¶©~€¼*U0x@¦h¸w€,Q|‡u…$xƒ÷ª#?{àF«D-A¥[óAçXÕý5tÙ\d9Ax`©~™Â ^^=`‘»ÿíÇ÷Ÿ?ÿU‘1Ü™ŽB—Ž)‡Ä,_L|Ÿü¶âôOñˆ"Ó“Ç¢7Cty¶œ]ºLÖ!`&¤34îU S¸/ÙSä¨â@žgäíËJÎb0‡6j6寸à¼m9‹ y†¾g* ïú•`Ž"½;½w›¬)º$´™¾q¼JQX)! z:ãÄÐà÷ž¦Ö¹Å…°ó.ÈË«åá®_ù ×c¯ýÌhbbm6:˜â€Gο/‚ñ71÷η Üî…½pÁ±Ö[Sµ{P  ×€ÞM8ÍCɈH‰†¤à>¢LV(*>FHÃâz£¼ôÑ‹™A2;»"‹g(Ê\j0Ïä2?@tymE|ü .€ßC…—á^‹b>Æ’þñ÷ÿLTcª³k]nùmæþºhëö—ŒHéŠ:uÞ'`ÿM)„ïÎ?ÎÙ0£l¥FÕ£n8AbÃ,ŠvÓƒ1`n‰ÀYN_3M%Úì2ñŽKÕh–¦Xq›ƒÖ/jî%Fƒï\ØShGrAðû½¥R¡Œ ‚OiwÂ4¢Ä~i(ŒÍ¶÷Â{œ‰‡Ö8š35hÅuÈÌ=ޝŠ}r-9¾›<ÊLâôí¶:u~`W›ìÙ‘¬LJèŽÈ §¹Í5ˆÃve„s©¤F±ó3#¡Xü£8¥3Îm\²HMh5r+­îíŽX äRŒ%f$´ŸæL0Æ]éž³ÈÃ\J2¼Rüš\G&òטxäO0~I ‹|&Å‚Â& n\Ž/Œp‰p˜µjãæWy:25Õ[Œ•à:’¸Rü—âŸP9ÖÊ® dÕ¡b%!Án±DÊØwÛÕåO?ÿþU ”zïݹbAöI‡$¤ƒ©€j†‘_`†CÅ4ºoÈžÃP¡ïv@€Ç@ˆ}.‘ƒÁï œÕQxêÒC()’N¶ ƒðáa8‚¢CùëÖê‡õ¦‘k©pk±/ ºÅò‰¾OAÛ>4È ðI ÒŽf% £Ä+n8 º QÊÒȽ\Ÿc xñ&Êxd@Š ÃhtsCÂ脲ÏyNçž3—<)h§ :u~ÌP’‘D[B˜A>Ž,˜…jðXh{’ a+q*°P{›écsœSÅHÈšjN’>ñÀ–+4¯9ÁµÈ†[“§ÑŒ|õãG.$tà:˜³òéÚݺª_{©êg¾¬ÔúÀ‰" 9ÓòY½¸sã Z$ÄY=ê‹PV"ë«y·Ü J Í–C×F>ߣ†¶ •1w³zZŠÈÓ'Oœ7óŽ®`m%z芿3Ó´Ä Uœñ7ÐrjÛ;†@¢c `åIŽ7æ¼1Á“’…PƼù·ç$À²3àäƒ! îŒ „k‘ ÅŒ‹Ú}8°˜–÷3D½ $åå^¹©±ë©=áÊ~ûúE[GÝ=Çó™s²¸»]¹i1tɦm·Ú=Bÿr ÑÚò÷ñÇþ‰·ƒHÙ££ [à%£•€Ž–à1`b"bý³“Dë””ÕV-´Jeç€5pq3€ÆÂHûç“¥£[3ëk7úšW`v·&žFn E<ʬGyý"ÚOÏøÓä0Œã`ž%gñ½Ź@uç«dÎøÖc\V<ä.Ž¥:G¶rƪæ2ªÀø\P)F‘×ÅÆ{u'AH™aBy9.‡*;nH‰ŸÍ1„Ý¢±8&ù@HÔFp‚Ù@YMøÞõ²¸óĈ,Ñ,¥S›-… ˆ*bú&Š(LdºG3æVŸáw°Ø1)ÿʨ!¨t6O9Ð¥6TΣÃËU]ˆvÝ)Ö,·…ùulÁ@@KPVøy)¶ærô; :Œ3Kñ˜N.3ɘÜ] ¡G‚ec?W2þT\‹»¢Y5õÀ^RÖæ¬$ØoµÐO¡ŒÀ¯@ÄŸ žýÕ¥ßàMý+ˆT«qè—¬©ÄâæV Ö;z·ÊPgÍ'—¶!²º)ÁQ»!QsÚ=ð¶.@j=Já2 Ð ±*¢ú²(/÷p±p(ŸSeLlL‡“fL±«§S’,AÇH:Ð »áPáû*WÄbõ»½Vï|xQÖCö?¿,fVigón9 !Pã£cÊ7€ ™@w$ï>íÿ_ެÐAõÃ\‰…ŠMœ‚”Yuï9Þ ná¢ç²dPj&—OcF0Bf7@«Ð –Mþ&4²¡ŒýúœôàG”§qüFº¡rí0“9< ©2fǨG’R3‚1œLfT„†/õ‘êQ·.Ó«Ãe.HjpÞëKã-‰ŸòÎ<êYI*±m¨CePŠXKçN7Elaƒ¸ÁßXQO˜@&ëÑ.Lu,À`ІŸ–«ò2I +a2Ò 3¹mÍÚÀÁŸè~ÁéÅ,c2¥¿5¡‘{W¼Æd„3ßM´$pB«ñßÑ\Æ$Þ ÍáÔ¹ò} Ö¢"iÁ%påSeíÈ- *íŒ ˜i„ÕT ,ƒ}£¦3þe¿`­«àfk Füú%V¸-PT=´Û}µ‰«hü-é» Ÿx3l,~š…±ï$,ãç(IáGZè5ý¢âsñ=6#3Ðg³E(Ûpîܳí|åˆûü—\5“:½¥²òOµÐß¹ /S-NL`+ çC>ߣm|eã oCšb6ÞÀŠõõŒz†ÅÛD7)+k²ò:dÖ\Ì냪èf‡ëaIÎ \Ë—€ ÓŠU$\ Œ£j*p¤ßb)@vֲû֚`Ö-ï$¬^‡E¡–^t³ð¤Ôc&Ó(òØ u‡´‰Ê7QW¢‹ßþñ÷ÿÄLhw¤KH`÷›‹ÍXá2ø‘o)*UˆnÁK n°bGhš„ÅsaBå47l H‰…·¼è& ¾,-k™Á´ßbŽ¥ <’ž‡‘´Ex_ˆA*§¹²\RÅ%ߘ,ÄU¤#øM/àˆb¨‚øèbåš Ç>‹¨j› ÒV¡Æ„\D6~´«Cji¶ZåÅZeí*é“]ËÌ¥pÈ5re<=á(º#P¨AsÞŸPü»Ü$£T@P ü’1ᬠ¥ä ¾æ­ì 4$Y±›hÉtËÀÌ™šÞ$'Vi|ÂÐ[³‚„°ü‘/”˜"¹ cæ  8<7 "ÈäjÍŠ¢¨JRyH+Üý¨‹×ä·Î¸[¢ó¢ž¹!E êGd ãA L#! gTX®U©Õ¦—Ìf+Çz49¸¬‡£T¡êUF^ÀP×äµP°ûe’Ì0Âûãk¨-h*Ü ìTw°l8Ý6Ë€€ü"†^ƒ¡¢b…ùƒ  ó$ÿ˜@:^ÑVQŠôR¢?6<ìxà–¢¨oÆÓI©¡ðuƒvùÔªígõ ,Â…†GJWãr›:)'þxC’ˆ^È@>ŠnB›~䀟@H,s¡Æ="¿ÎZ‚Hî†GÛ•eµ“P‹_}þ!f]‚l©“/ ­M@êSpF˜•ÓiTfu<):Ðå{ö¢ ¾%³ ¦+“ÈG²ºër”X(˜R §ë^_¿£ujyéï—Ùy;ç´1"gX(Y>Ø•@êÉDÌ”0Õsˆ?K#ŠOѲ%·¬çV1Œ-$cÓŒ@ÙOÁÕ ­67‰‡ Ýyž##Aÿ()Uˆ (E~+k±ê¸Õ1žŽ¸K¦)‰Á¬Þö}zß™@ÍŠÞ¸@´CŒ¥òt'< 誵‹å“•€¨V%„7(Æ‘¡¯Í”,É«Aóž}´ûߺ€)yK,뙺hxTáRQ+…ï@»Å3Ò°Õr6L¢3Q^ÂÙö|a*1:Vù]-ÚÎjÖÿRÑÚðS½pxS•LȾV”xX¨™Õ*;º¢*%pH®“cpÉÊîýý|J¶–nW&Æå6Ëò|y¬‡)}0ÃRZœø6/ó] ºNа.•;>¢²ÒŒÙFa%3­Îçr2u€«„ÉØ+Uz01“åkà„z ñQ†N„à¤._džÆF¤š˜QWœá8q€ŽŽ"µ™²‚„\ O:PATl{FQØs¶}T®>Í—"ÕÊÖwÍR¶eæM&¹ÈEajP­’È(ƒ°ÖÙýâÇ7ª Z½ó+CfâS“€à–Pl“(>n|ØIIù@4‡ŒµbH¹o u°ðª“+¨,Œ+@–¿èàÈ{dŽ1p­^v •®Ho!w±ÊнaX±:£-|)#¿vo¡‘’ÍýY°˜¡ÝP0"鑪êù´Á¢d®ÌE,|Qaó&—[Re'?zµCòÒ dûDY»@›ehÏ*h\°ÕŒdˆâõhu%y<Ð*ãšÚÑ{RQŽ˜ÑÔ ú) ¬*A'/B«ê Z°tP“Ù¸ù0`À68Û0¿#SY¡¬ÀÅmaøƒrJŠs=b;¦ ]+™ws5yõ <ÌdºÃýB \#9—®ÔŒ5\em`h½@Ñ%ˆ¼?áxVåt©Ö`¾ˆÄ=gJšæüÍ2,_Uâ1Y9–ÙìrKFç6Ò7|®Ù¤¥/)cCt'Ù±Øñ¦dð¯\OFq_ËÛAtËjOgÚu1„LÅCdtþ "éØÂÉJ@·(©Òé>d‚‚l) X·'#€e›CÕø°àÑ/n,å|†UK.Fæs|üÌe<”»Aœ„Jû@^d.ô"õLj"=#Ìü ïMœj­r«ðT.å Y Qºð­,fœrÅU ÷îq ²0#ªx.É[NáôÇÅ“)gƒ¬Y¹¢b\ÖA\@ý~ǰæÔïp¤~Õò!A@“KÅ„¢P‹=§ °”Ô¶D2Éy°ˆ(^ãÞÞ¡L”²eh:4ipG N¡B¥Vú–ZiçYîOBVQÕ’ЗCuçbÍßÔÛÿ*ˆÎ@SÞ>Ï^gùÒî8½^~ÿzµ´ÄÀª a@´KýX¨@¹ª¤‚ÖKÔhp°ªq²°nãœÃòàuD± |B8fŒ oÙK K:/uÁÝ"h£û]Y/–O|ƒ¬Cçs 8X“§ÊÅ"Ds¤H K:òU…oá«Q‹1Ö³­ËCHjQÕùrªú1Çs$”kñF¨€ãyнh|= ÇpMÐõø†3P'©Ð(©n%ôe<>;E¨ZVYÉyÃÈÊ Ð¦§õ=Q¼Øà«ŒÞ1)žž&zr|Ö½D˜f‹ i¸ÀbOÈÄü æVïJó*‰ýÄ‘¯šEù0#1R”ŠšPx°ú  ´“d<¡P :3†â=\©@ȱ¡pÓšŒÚšà©HÈœm*j¡9ïb®-‰N‹Ì |Aªô‹œiõãHî´g4㨌'˜ù®^_ZËZo> ­ÚZ3v`vPå|b!Nmäzâ¿Y=M„4¯âŸS­H•È;Ü8•%Ê¥iJ„ÓÕ-Wf¤FIµ¦õé ROêZIzïK™¥ºý¶(À`iFºʬ†¨ø!š?buËß>›æIÍäiÃ"˜0”x{_†™¾Vf¤³®Ú¶„ß4…ÊΩ (ÙÉ©X_-·z+-ÁØHaCkð6âK½¥^ Ó‰ž&©}”-jÒ©DçQœuòÌ… äÊð!mÓr9f©s6mˆ“®AJJ:ùÍ¡»„VMV £Íõ_TÛ%q[£¬#õÈ[PP½ýPÓ°o¢B®â£O(÷žà›XâQCÈ4·ºK*‚®W¥²¯²é*ÿ‹¹ m•dÙÇ|´ˆS!+ÅüÜšÞá¿êº–fð*qBEŒå‚CißËÇÒ#‘a=W¾,™”+—ÏÇ•âôÅkñ3¥q8ŠRòþ‘’Õ©éˬ‡ƒßà0eV6\™MNÝh! qMi#wd¨ÅRïCÙʼ×`ù¿L‚PGWŠ#²µíp •¯“<ºkkˆÜÌ`LðÀ ýè|.µTÉç³ftÌëBÕÔã^^܆t?¹ÊI¹ô á0Ðc¸&&?JVk6‹PU!‘ýzgù ̈_GxŒÀ†Á±*jLšÙUW8|zcÃlÄœáN} ØwIV‘,„oÚ^ZWB…¨}ÉÈ‚VÓ¢Ç9Ê/¥úÄT)°ã-}¬K!òÞ7¶Îú$óˆ¯pµl“ÒäúÌÄqgò2<Ó?É×BÓUl9tÆÔàºù›^ ÈFæÖØ©áOò9üS˜…$:uC±]©Ïf3! ¿þ³¹l£ÆÈ7£—pM8Ò¦òæ¯BĪtê•É.P[yÑE«Þ¼Ä Íá8Tê íA˜‰S#,U©ì¨]”šcö½R)–cNÞª;¹6¤xÌ×jÊŒ§²ß š`™Í¶j|E$ÒªÒÔz˯¥' RDUôFðYi˜ Ÿ}Àé*GÉ Ç2¿Úh룕CÊå^–ëá&ø¤y £õÀöÛ‹ã82KKvëb•µ¬[—ŒIÍ9±è ½=!”h=ˆ‚‰É 0ωïS—!ů‘~(2ÉI±Aò­(åÕYK@ÕO.•byV(«(ëÝç–H3¶:ѵ{SóøÂ›ºfIyŒ!E³«›®æ:·Ã_óÒFæŠLÝd’INu!JÃÝ›ÌØ‚0šë=¾ ¦^ì³åIRl¡Ü> f‚¯b‡ò>Õ«ÂtT¢LÁB9^xêŽI1O9à Q m'iì—ˆÏh‡(™hæÓó§T+#Œ˜¦c0#ËyRŽWb f PhZ°-+€n,_È0‹úeFY¨Èˆ”èŒ31hiÚÅ«b5ƒ"~¢ Æ‘Z}cd¬¡îté“ßcÎwÚ¿iÆH‰/U䲚 Â¶f ÐÈ…”Æ#*£¦QTNºóT@†I¡2V k(]?Û[¤<ñë?ç¸ ªóJ-J 3f:sHÖ·ŠÐø±£Z7CFFõÂå€îZeL†ë䃬biWhT¸â¾åõh‘¾Q½ÎYÕȤ]&„åJÞ%¸Ÿ•.Ùç3uз#kê±9?ÑsùC¡»Ž±,å½ìvöͤFëYkŸG:¾Ó E×£ …8~Îe±<Ës?d5V'ÀBÖYJÃ|-¿By“î`p>ì JŠ›|îÙ5k¶‰;•' =«™íù øàÄOo¿ËÖtV:~íùð{#èµÁ1¥ð休"CƒƒS¯ó† k580» Þ¢ùßëm½h-é¯Áù>°©ê Û¬úwî¦ú†Ûª6 ¥Åèßà&ù›„þ‚Iš$öHÜ—oRñßýÍG7q(ðzý8‹#)Ôîj:¨,¿AM·Áa?GáM.„j÷f*ÿÙäð‚´ytþW“Œ`*w§5Ï~¨¢ ×ó.×ÇÒÞCp¬5³™Çþ$xP%ãÅCùïP¨N¨™¼ N… {‚ÜÕDñ _šAR¼µ´ëówU¢…§Ã¸p½ù§²ŒqS>åÄ $ðs‹XçÍDïpœ} ²‰Xš”ú æ´'ù®žu±TâøäÞE0wa£ÝÓÞÏëSI¹6•wìßAܺW¨B ¯ô~Èà NŒbý:3H £OG‹$mLÔâI$ÎÊ%«\t•MjWiôÎ2Ø$Ìl>U¢X×Ú¹ÛcQÃT"Ø›à³G?Íêqsb˜™ž€ 7U«•ÍÃ_êÉ 9;5*n‰R±—*v„£¥=Yz !9M5· ´Áš ýĈÚPE7óï˜ •ayƦ‘OÉÖNÖÍyHd”T±+$t£»# ™«ÂwšÍÍ»¢0ËÔ®±fà˜Q –=)¯É}UDDYä-÷–1µ^pWm˜¡G5w¨4Ìì`Rç}¸sÙU“¢Žiš5¨J£h 1oŒ¯)#ù½_„¢‚„Þ âßTœûÎÐ>É ¤õ$kHü¼»Q¡<ä$û©*ØT“;¢QAuØæÁÈÒw¦±òWÙ2=ñsµµ,Í'¡Ç¹™¶ÏÆÌ2ÚÙ€¡Õ¥¼+›€¢‡H/“& Õ:ü?LC’ˆI…æ¢ M‰YVþ£ŒŸ£l!C½ ̬x£e`^ ü'g—ôü>OèÇF`hפ9=‚&ÍNKûŒ”Bb°öyÄHw(•VŸ«.ÉÅ+ â§}­ pÞT¨Ð$kL5ÕY+9ulÄÉŽ*^6‰$cL/7¢Óªt™Õ)F(OI¾€#.ûO#:e8¾­¼ÚBëÑúœ¤{R/SaûX󣄙»UèLÆ$3÷#È(Ô²ËôÔ¶Gr£ûk X-¤=ÎJx'fµV,–SQ$ýs×uUŽIuª¢Œ LSLŽåÍŒk¤¬µÝÊF—'ø­Ž&O ;“Ô ¬—’˜õ ͬçÃþªác>—¤t r¤Øs,½y¦‹€É§š†~õ7æT2I¯ó…x3].ýªŠŸ|e®£K¯ì„»Áé•Ä#NT¸*JÙ쩚š_ÕMÕè£MʼndÁë°2Ý 5S[õlP­Ëñ%ÌŽB›oI·àOÍòœ$I Õ‹©¿ëÐï¡þR>]±Ô#ÊU\2ë_å0ŸÄö¸)xñ(@‚ R8Üâ©"O¡®ëÖ7"?j¥Ïw÷´¿³WurÕTƒ:Š˜¸­/ï0ªÂï²›,ú®JÙiâ¡«TŠ{¸ClWIÞ¹TϬêP y¨w¦µG­m†³»3åtUN›Î Û´Ú~™ÛæÂÎm3¬QFTÖC×õ3çDVó3Û¯g‘f¬–§*—BY*U °% ŽŒN"F²ý“8滽ƒ¬ @üOn¥âÒ¿* ®êÃ/ZÕ“c¥5¸¹Ï3Ãb”ß/ÏôÚ`£çTÌü#¯æëÇO•{NœK,ü• %ÂX(™X¿B‰?4p¢;ªÅ$zÒÖ€Ìä¤Z%8¤ýõ—Ÿ¸„H$o 8?sí1pîfC¾¨Rd^2x|ó-³•ÆFCä9«tXµSœúÔS¯´Ð7šñ&ª4Õm¢Ñò!s4%É) DJÂ3“üœ’`¹NjŠð9~6u!›åm CBA#g´RÚÔL¶oóâ°Ù¬ñg$ ‰ãŸB¸ÓYmv2ÕC¬ðÂøxëB#¡‰j‰Šƒs\ÉT¦Ø±ù3Ñ®Q_–³³Œ‹šc¨Ù,Àâœ^p™]Ü÷nfoݹËüÞr¹ªûŠu©YΧJÌ@y<\@ LZY}Ôd¬±pbC¨7ÁB(¹Í4Ó®ž›G\ɸ.! 0i”ºÓDJ5†È® ïâö©²¹SoäSLâJô•¾âÇ|Z¥@æ{ ñ×ü+0 ¼¢&Q(‹ˆ»Fž±2„äcï`¨r“Õ¯ˆQ9‹¯©|<#G^ÄÄ×Fq¤..çú§|¨áÿ–ÿ2Yt¨up×<„Që°¥F×üž[BëÉÀd3¤¥Ká_µŽ†dk±¶+FÅ4²¸>ÔO¹©$L$ϯì}Ö’Åd¨Ð(J5'Ï>G^$‡(õàm¾à ymX€H5™092¸¬óª3’^Mr6ºaqk¯9OÍÛ] ¡*¢òHñ Õå#¥öor0Bö‘–ça4=Ædþ2ÚÐCŒú‘¬B¯®YS•V¸59œl9?°íEö ’Lå¼—Q¶ãѸiжU pº\)È|`ÁNâšûMs¨µdš\IŒ$çx¹]Þ.Ò aSWöB–7ŸŒ$i†»ðîi×âÒ"%Sˮµ­ˆ3ùé^ª«*5¯ÉÕBÝ ±ª©Z§j˜ˆO°&Õ‰(¡ŸfBLù ]h4þ€ ïÁ†mycES#4O™™“¬´»ð]›ÙGG]ˆg?ƒ[€a¥]‡‚{éOd¾kÐrssêD–Õ=€ª,>×åm|ÿ‘qµ×AQWØÍP–û*Àhf]Ÿ Á™(1Y‹2i(yÚþ-@È+’¸ÊÎÒÒ08œiéÉ8Æžd  (­"|&ç IüU†þVV¿ÿ[ˆ¼”³øØ¼%£;LwÒüõ7ìå€ù%ð¼æ¹Žèñ¢ygØOeTY"íTrÆ`S ÓEµ¼Ø’7ÏO¿_¢âüÉÍÿì\ %_µ K|3A_¯/ï’¢Bþ‘€\‰N¥/½$mJ¦²‚œÏ…U߯÷mÄ…©eª4-–f½þ¿jÙ„å1¨çËj÷%1 Šsƒ W¬:nŒ.kQ*[ ñ;­ThbW…“õÖ‚Ë€z¨Ý ÐM¤;£œÚ6Géjçd?ó¡Ù¦@äµ²>»#É“ÀbU`dœgÁ €@H#­>'\¡`Þ]ÇŽÌX•V~“Z;ç®mÜpV†¤ª•ŠÁÄò’,Ï÷Oÿ¾ˆÒ?纱ë% Ñ·TË«.¦þŧJ‘2¦U…"¼ÕúJ½m‚¢)Ä•«\ÇÕÐ’W[hŽ1xÊ¥w[šòT„afU¤ƒÕ’€Ü`ÝÌ"]C”(+GY’lØ Ý~ï¼ÌqÝ·r\Ÿwª/ Øò‡)”5PY}™ÚÝœIECÉòn˜R–¹uó¨Q¶grЈÔknL3¹š¸™íWËË Žï)O±WâbÌVAœˆW"Kð³ôpnõf*š˜¶ó› x- ±…ê9/ˆ*oœdÞ¦-\!ä–'^»7ÛÄgª7‚¶*m+º×¡Ä–t<õ ¦ï˜>'—Ãà|£"h2mGÙϧ!š@Bå 2ë¿€ßNÖ< {Ý•bˆ_d€#<Ô„ð¼Fž•¯Ð½kÄ^ÍšTÿ¹ E«ªž¼áW|ÿË_|lM¡.¾\2æ ^2ÚçϹêK†Û9æ¾€ãn1sôüÔ?|ˆ‘×,ª¹vš@ ±ö¾¬(·á˜B …^b™C.ﮪ†Ýëiëâb£VÎ,¼Ç‰©‹êõéóÏdÏÅ8ì±CÑ’l]ABï Uò—¥Ø‘…Ã*sE JHOàýs:à¦Z,`D­ˆ @œÎ™F¼ßá­‘RQ_J eªkö 2 I}DŸ'ZÑw"„]q0ÿ@@£R³¹;Nµ+öJaf…GÁ˵š]KqÕ˜uʨ#¬Ðž½“Y`êâ‘Á¯ž?ZÜ `dp¸MìÜ>à”†jì*¿)'4åJºùX7RšôI·O µáï0è…JÂc}hy+½áü¼Ý?ï †­2µa`§6íêËõWqÃCÉÙ¬Ó<-KÕë-Ãn‘‚/4Å ¡Ù²>ñ°y±W<.ØlQÞÈü¸:×ÈÖ5 °JpöÂR4º"èxÙBø·º%1fFÆól *fyDIY+y±–ÊÖÛòz®|Š`çéõò£\FRÅþ|úx>tÏêaÓÔŠë1¿ˆ§Ùrà]”cø)ˆ`‹ô&Rd"Ͼ]ëñ²õ\ô ½–=N4Θ˜2¹Ö…r]ᦾš øc<ëøyî p»@\Ö•h½.UäZ2§lÈÌ ;sªzt×Tô»>˜päš@ØÍ ‹øBmB—"˜ÅÚpi”Ì‘-œ—èµ§’·ÿ&þ>u´2 ÇÚîù[¹SÔöq8ê6Bci1¸“¨nËà^îJÈáÀO°o´ºpªxù°Ûî »2V>´bå½–òV¶Oy¡­HБ¯pŽA³Z46†)ƒð•yw\GÌÍì¯`—MdIG­> ¦XS–O|£V:b£iÄig°¶Ì9N҇˺#ël’ŠqF¦ZŠk\ˆ \ø\êY^Ù° rË>åì@¤^ˆÍNJ#¬„Ñv©ÒÎ^æØÜPl\¨eq·äÓ‘g|?ò' †ÇñdêûóSqͧ©á ¯€‚GLSð Uªþª~W¹Èñ:¶ êÃQ•*„@ãáIR¶öÔùWwx¤ZCiŸ Åÿ‘Ž©iÚíFa.µê5†4拜|Wv4AίŸ¤ÌñP@°‰!Ònñf”ä‡`×Nº@¸‡Z€à8ðrÇT%„"™¢9J•u𹏧,rš™¼NMXk‹~ÇÅüZtO‚ Y€óâìö‡Íáý‡Ö0X¢ÅÉ”#Ï:Ôþqcí¼!̲vt"WÞ¨ ¼Gy.!]:°ˆksI`¨$ŠIegTÁ‡£¿ct’ªå¶©©µaLÁ{ïnwo Í­zpR³/ÎQª÷U\Èín·?ìv/ze72ty·!ûÉ4`¿’wöb>\ºDMC²Õü”L”"Oư7ø’a¤òn±O¯4ÞHs5v%ƒº4Å. ª³li#SdyÊ‚!“ÂdÐT W<ªIq¼ Þah³!÷rãv°ºFÃög¡PCËÁª1+Ñò;R§Ê†©>ý-ÔZ0Üjðqùñ;<Æ[º¢óX0â8 „ û^K*ÇäŒù[Vqn÷¤Õ‚£˜=ŠÐȵ@v áÝKæ2pXÈo¼8”„„^ÅUUÅÕæaòBÁEÞ_}¸¼Œ…ˆov±ùd¬ÄYC†%V?‹tƒQ*p_U6[ GaµJï“·tYÃ7Á›3›'Zõn)¥Q`ò&œB SCZâ…T2ñ±ñ{ð€Á\ØŒŠ¦—W©Îà×,=…:W²7CŸnEV´HÀ¥ul’º5Žd÷üèÝ`DpŒªüØ¿ŽÜ˜ EO$VIƽ?ªòÀlPüÞ¼h. ¦ø‘%ä;C]é"¾L©ï/Æh§–VŒ}³\£êEýêvpŠGÇÐâñ¤â’¥=*¾›²nÕÃ¢Šø zœÊÆš‚åþãïÿ)FóCìIA[qÅl®Ràêhž(’1ŒMê®ﱌΠL Í•®b;蜧úl?œšÉýèõ8 ÿ~ýi=#O‘ºáÆ“ýu(’ܧÎBhgÆ(œiúg!»üé&ý³s‹ÉÍĈ ,Zÿ4Ë?£µXRØ@4&¨ñt €€›QãèïÁº2«‹¥·ôDUq—–‡îÔ4Ò+‰¶¤•ÁU¡lg˜|Ì‹52 O—Ӫ͑¥ÞC톿SVíðA±¢‰ åÜ!K ÈO¤jj1Q¨CŒcñÑö=r‚1g. Sªr' ‹>×§ä¦sß ªàý-Tä‘vm•FÉà÷Ĩå µ/º¡E¬J-TšgDõÜ ¨pÔ’#£ïX˜¢[Úñè þ×%бfª%`8Ñ’Çæ3P\•ü¼œ˜¥ $¿Õ¿bjö™ŒÀã%Ç*qÉè˜9zÖ½0“î8E—ɇ·E{ÕÞ:«$dˆrš+‡/5æi0JÅ ¨’@ë!´B‚ ÄpÉäÑ"˜zf%4„Œ¶óQ€Þp1×Ô 9¶ö’îètzœ¯¦ ¥ið)Åà —:xÁo7±;@J×»‘~§ÚÏêvc¼ÓU¸d.´§…|A#fØHºF2³JÊ.ËÞ¥erƒçƒ2ƒõ ÆC(#)TÃ?‹kÛ%Y‡AGC×·À¢,‚¡@( òkæË¾\{É58ò•5U¹”ãn2gýÄH¼¹Ä†*ä%„ES7Ò²²J|’÷aQÔc0ðâ¸âˆø\uæ‹û Ùñ~!áTbß– €Éë¦AG c?ËîS!èx!鎤ò¶1Sg™§È"¨Šíü¼ÅÃ% È•‹Xá3 p,郪•%㛄:£¢mUH«Œ/¹e-R Ë‹ái.³·4š)¸X Hzº£ }\9ûm·ÕRöÆ7=ŽZœ~×kZ]¾Óù •ÎØŽÀEð˜gØÝ+€°]úD3ñ>Ú€¯ì1 uòôœpH± \ªg4t!QâšD˜øƒ—–Œ— TqàX€~Ò“å=Ç‹øÔi\?vevÓØW•ÈÇ¢\j‚Œ>°uiwŠ)ó†0†¤<²’Ù§ÓDzl$sqÕ{ MP÷Uò3Š@õ …î]è'Æ+âþ^dCû8òÚl½‚×ù $56ê±6”Eàûæ3-ëc”IM9×µ¸³ÌÞ†)Þ¸mup&ïÝ8\¯ï5Iœu|úÖ;ýƒ¥g—‚nÀk­—&bP1¤RK¤E7»ØaH­eâÍYË0Ôä:>¹©¼W2ËÅâļ“á\ “ÆâyxỶц& ¢À» >ú"×3Oe½Víõ³œ†U„—T¦ns,ª WžhÝõ—ÒmˆáfRnèR¿Õ…¬žÉðS}ˆ“œºÉa“tñã½@ŠÚ™rMÐ{œó#huÍ¥ô,ãLBeÏ ™jë(Øìj<‰§Ôúôä„>‘0Ì7’쯬<^~d@@éG'£Ü‚ñ-Y m¾þ„„LêZ|NÞ<¾£…`d¦ž[“È’®¹ÕÕÀë0#0ò8å7ª^‚R¥a;’‚ž‡Šˆ{㡪 Ò:/à¢Ñ€6,š+ñW9và}aq˜Û<›Ír+ùö ¤eLÊ ™™ŠØßˆŽVDž®jZ+(¿t_V(·GïdèrΧ«%áP¦‚ÑÏ: ;ŸÍ|/Ê^ÖÔ…{b‹rïc%UMJ¥­VM[pB˺ÜYÒ‚ŠÎÉ"‹X¡àMÖd €›š„$ Ê¥¥‹$ß…³Öñë.oýá7$ÑzÇÊÌ-¹ñÓDµU’ú ¨‚ØM½*|£Yi±|Ï,X@‹O‹ønÅFx¾qlÔb00žnCøÞ¡€.qn0¹…Œ?€Û|W-s…_Êç­pG®·0AFŽ&ï|**8™ÙOĽ$îÍUŽŽ¥± ‹Í•a±z…žÇQSA*³Y³\’š-{¿T!Uu‰ÎPªíj´¦pƒD:´³ÜMXá"4úR!A§å‚SsbDŸÜÙ¦7Äû,^¾•êQ=9G “`Ž/ôÔŠ&ÐæÄwÞüø0ö…Øÿ«XdêI™ëØæZ@ÿ¢¨|=ÿk$4°ïĨ0g%ŸÃ•郠> 4åEãEÞ«(ûµ c®f°]â…:3pÍÐÕVqÁm„ƌل$û.GTÓò#VyØ.Nx^$¶ 7È`!gôÑ(=©ôW£È±šCõ/ Z¶Xâ+ÉÊÚª^ïùÒæÀ³°%íú’‘KÅÓz¹\™ÊÉÌš¬Ka¨«ëV‹>Û$öè€NVªæ€–ÞU0¨‡Œá+zڇ̃ªu~W Ù+ÎÍl*·>??n/óës8¹Ö†&×ðe‰ŸBuHdÒŒ°ù@ÈQÙýDaÜh~'‹ —96–${AÑ×YA± §ŠjaÈ…ÙØúP¯M“ïx(û#Õa˜+z ÜPCµZÕ;èRo U‡núùoð’Çø&!Üh’³i…åF]]Q¤XQ>–²¦[eE·¡1ÐZBÑ­úüuWßè@À4‹Ø80_ˆ*Q±¤2kwV1q+R~9 5sÆåº‚p—„Û×s²Œ«—E„ YRö6;S%+-¬•i°)Õ?ÇÏC­.–{5—¤-S³x¾¬ª$d`°å†äØ{ +•ÀЫäZêq;F×.Ç ì%8ÉU~*Å£¬ö„ìꕸ°PîšèAÀ˜¯%û)(ÂfYoPå¡”W€b-Š#Œ_( (B@Dg•­5p–”7—¸gªÏx¯Yi …ó„É <0Ÿ†eê|èd¢)Ô0àhy ¹jd ü ]ï‡ÈÍ<“ ÇèÔÅž1¤ò`èwÈ®èd1’Û ¤÷~Nï?:Þÿöã§ß?/vTËY@Æ™Î- :—_¾þúÛµóþ—ÎÇ?ÿxýc.HŠä¤šó„$Å:0|c$~Ší9säzFK¿!†È‰£(-ô×]fš˜”ð…LˆصgíMvؾcôBò \Ë k%ì©mœêCW=8¢ÄnU'䪉~Z3RAÐéνsì­ë6´£ã|æ? Å÷­©¹v¥¡¶ð  ˆ*tÐJ±ªy?(¦Ág+_ëG|C…!ðyI4¿Sü‹Pv< C”8=©3îöôÇUU(ò« ž‡™ã¤}‘š†}“5œP4 º××ë6‹¦;Pºµ^¾C[B¥ÒƒÚ£¾JVÇúä¦LÎY†”Q–)ÌìŒBCÀßÍFïCu)^2§ÃüÐ’bæ«ö¿Úø½¼k2ô¨\Ìϸ­ Óå8Âï×Â/N( Ð`¿âÔ¥?50Η|K}L ,,^ž• ú¶Ä•W¯V‘Ì®.á`x€¶;bOúaù.Z´ CÕ^Â~0¥ÁÀÀu5U«àG9j>{G1’*ö—>(ßÛ·rT±Ô¼’nFL¯àrÖ„â^ûÿÃù$D€ÅÔÝÜÔ ¦crBC²=½~VÎÒËÐhäŠr 5k€WéÔ+iÕòL*¤eC ú=DaY®¹}ú Û) ’F_n6³±¼Â¬¦ÒB¦vpkv±&» dÏ-5;ùs¨'•8ƒ-û²vÓdyÄá ´dƒL ©}HQÔ´ë¢>4´`X}À‰€ëÌ-óÈŽ\Z|Nb™£þe¯…Qô€”D ‚Þ²ÖeÈ!Ízƒï+‰OÜ@ý‡[“Ý4ó’Ë‘­3wNÔ®ßhﻘra26&…HNÐ+À•Áâ L©÷d¡pD2BÀ³¬_=kLªF¨QLM·WÀULñS96¥«¬÷Xú Ðò–5s°'/”FQMñÅÌÐËSÿ£·©ÄïHGhÞäLcUKš³Š‚IåLx‰p.˜ðö—¿í¯tßÖŠRY¢µvVsYH܃€C'×KõädõÝÔÎ>û üç„þ{ò—X¬Œ‘¥@Ù*~ÊW½FãçK®6 ²‡ Ò€êØ”»G†eOúd@©ƒ®)[+眃æök6 9^Ô’õÔ¨1Aêm`«ŽªÇ%ô3bqÕAÐë¥÷=€&ð0;êm…TÒSu¦Ž$'»YpU å.xóxx‘D²j¶s.¶ŽQÖhÌç5×Ö[´Ûqî%©Ê´—ÒÝ$Šƒ7aN<[¡  "ÝɉàÏ)bï‹j­÷–Ë–rko6$Ëj&ıõîÊÚ g/Ï fñé%SBXšO²F~ÐÏ·–•A.˜ü¢Ò¡×ÄbÑð‡<\µÂ“ íëÂ_jEx¹f\‘\.N«±¾§ÛP–ÆWaŒËã*ÅC®~²!§7Ä%½…^2V¡fF¿y=ïVÖ­U¥9I™9TQ ·.ƒ œ‘]“üŠ.J3NkUX»rá9³Ï,îKmÑš‡24ºÒ«#Å—¤¹Lz`Íö9oɦD@KŽ÷ªÿÝÛLˆ£fg‰Yø5àZSK:j«ž‰¹/Šc„Ýa×@NöÍÞ¦;ƒFÑj!÷ÔƒêOª›GyépÜ‘Q;•+AjŸ Ú¸qc‰Ts¿¨Ý%ÆËpYÉÙÝK ä$ÏÜ~eV±Œ5ðVP¿1)amƱBïCJˈU\éC“‹G«j!kãÁúýR—Ü'@º’#/OËä•ÕžAV[noÀ»Çz7fo/.áùÈvà}I°Ð |YW:Ã’,_æ*4;¢Tã׋ªZ!’‰1jˆ`P­éjy:Þ×±;>þ¨ï…!fà¥G-bi?«Üйñ²ä(ƒXïU¶2Nv¬!ÃXö1¹³ËÛRZnw—ö­ÓÛ-!§/“ò4þ¹¶W9y¥ð¶mÙl5}vþÿö¾u7n,IóU/ °vR÷»vÃe»ª4ãºZîêž?3“’ØÊ$³’LÉj ók`ç×ûtý$_Dœ“™<”%ÛÝ[‹Áv9Ež'Nœ¸|±š?5 2†GO#Œ,ï°Y&,ÛC±K«ÓUµš¹»`^WÙä‚£çÁMØO\ƒ³~g¡Çc¡òö½( \´»wÜ‹KšLÁèÁ!9ìåéBü³yæ@Ü}zú;§<§ÐNÎï<ÿDé @öëOb!ÐM¸PxÈH¼žLlÙ.쬦“Æ‹¬¸ÐEV§œb‚û”KFúú¢çv“‰rðKdW ã¦ó(h­‰å¸ïG¬(ÈŒòÔtÓ‚.t³º ,Dîa 9Æ™@Öç†"öG NAÑÃà ºåL‰Šé0Sà’ .‰P’°­ÝYÝä»ÿÀ';iÈý‡æŒ¢üŽ‹8U´äWËF’Ö%¼Òg„+è 2átqö+9¢.ùìúÅ«#0D¢t¶¨ß nÉmÒüsr‘g-c#ù­c2Jmÿ<ØÎšËhÂO¾aÄ_nK=³Ô¥Íü áOaøÇ$+.ë+ó¯gø¦„ér‰œs”1W€Öæ tó+èÍ`AòsÀq3†+þXzDèï-ÙçR R-Þ§fœ§™Øò«¬ãÕl!ŸEª n@0ñc¬0›¾*Z†f臂áŒl‹…cÉ„/£JC)N“œþCŽC2l<ÀµM9à^C.C²Æ¤¥•È€»˜òùÑã‡ơœÜÍŠu?a+´ß£Ç®ÌØ,]&˜¼ûåÍýúƒ¥ 2Úç÷èCÛŠ¯8\—œÅKÂ$z´yÛhHQäh>í1³‰R£ìÊ ûk KGÚF<‰8– ¡€L6¶˜fsxš¹Bu3[Ç\¬’ƒ@R(‘Ò*óÚVâûOFõžçZ·Ò‚_øá%7-`ž•»ÏAÕSxE¥ŠÌõà·\½=IòÌôýËÜWtijèð"íà‘YA·l>âòºu°[åjÅÛŠGÔ¬S³j›|$ÃÅAP+yÓÃ8ˆ»Ð  ¡§X_©Ûyòüµ$]%ÿc7´=ß:0„í»gñÑx,ájh± MS—QW\G$Êž2û“üOþÿU47ŠÜ¢í*†*&âZ4§W¯ÍAã Lžº-ÞÝ êJBͱ{F”—ÝÜXÈÞv÷‘zEþÏï‰å”X#BÚð í¡X%¿%¾f­?ýÏÄýMU:ùá«ü«zwçÙW…ü3jV‡Þ†ïE½qô¬0šw²Â</ï»m}ÍçÅlpY¸]Hžþdži ¸”ÜÃJ©1U$¬mŸy‡¼]Nm_AÚ¶CÇq˜ùäíõòýæyÃ8q¬q´Äÿ¯ÿv¦RÒÛoúmvq8ø*=†,‹ò¡œ®ô¡ÀC;4ßÚ‰Šñ´_Ë\X-ˆ‰¶bØ©X™z:4D^lòû®Ä¥‹,y9¹’ïa› ™`]r¤œ®T{;×Ü ¡ÂeûøcN{ûcâœìß[òÍ|1¿5Äè$zÞ „D>dó:ã1¡Úz–öW§nwlÉ[`2CØzäÙ;¢+ä¿,§ ‚­3lâˆÛ¥È4ÇÇÏ»‡¿ósƒÝDocè³WÁ¤¨ÞÂÆíÍÑ5As»â 2ÿýˆ÷ȤJXq31«×„èìžQ^b2ô?þÂÕ:¾Ï½zx3ö ÐÛUiPöj«‰¶Õo¥Ñ0µg.}Ïé­hçæ=Ë[ÂÚ^QŠÞ!Šßïþ/õîE¿DFTü»ðÌuÜYÕ¼‚x¡»ܪÿyodƒ¬¥Ö£1ãQÿ$'µÈœc â½Cñ¥öú¢ïõký¾tÙóKî.äh‹†õŒsÞ^lý–eQŽÓ;®‘×@¶3~2²l â{ìµâ–èçj?Côޤÿ<~Gÿoóûï7Çãóï¾{6>«ª­¿ýíoÿ¾?Ì11ò7œë¬5»67=>Ü===ÝÜÙÝÜÙ?ßÛy¶¿ólggkggçß¹±eiåÓ¿¦Å­9÷ Þ@AM~¼¿t:Ž“¹©³B ­¿9écÙ.à5¹p\£ìx†sW]4qw$­´×n|$›â›ýØô ›bxÔ­y΋wßò@¯ï}©<½»O¤„*}¦8†~‹\í%IÊW« tnùmmB‚ÝöÉâÜ~íÎ ¯^,¸™K«€mgÆÇç¯øç÷K öbFCþÞܸ·³·«Ü¸³ÅxÜÈÿeÚ>œMº¶Ð}MY`Þ¹1Ð}lYߣƠ+¨4ú±g‹‹¸¡b¡lpnEª¢ŒÈ½N#rG—ðqfäÞïfdƒÝdo¦&M`ªÌÿwCµ ´ÕÈæ¹_â…EŒÚG¹ó£Ö³ì/?¸UñG,(·êY>æêvn/¤¥³æ¿&g¯x™ñî5¡úúpLÊÆ›ñ›Ú÷åS•½rWëíѦGgý\<☜é¹ì‘l¬Wu‹cŠvGE,q¹IÌ… \åüWSU9p28§áÇú¢ù„n‡µ+ÿEŸY<;)c—®R󓯾Úû»Î¡óõ çÿ® ögÒÎÕôYüÞ}¿Ï`€ËŒ‡¸+ë5­Õg©×D3ïб3ašÎ¯¥–¥Á–öÚõGزÝ~[æñëË JN=Käð¬Oì ·kÓ«¢¥pp¬†LÛøJ* ¯Æ$õ ­PãÛfÖ_ î Š.÷¨ÇƒŽ¡¤ýIjF)83b?- Î%%rÅÐÚÖA¼]m ññµ/¸´:‘rýœ!)§i>¹Izôäùk¼»æ¼ýÅ‹d’ªÝ „¼§rL¨ÜµA1-ßãxg'v•gµî6yÜjëÒ,”—ðžÌÂyVU¾¥5Êg\¥Uÿä-à{ÃY››4Në AŸ-·Ï–'çfø¥’êkÒaSþ?´%¨ÔÛ$£}çö_£‘ÿ¯!ýÓš;6öûHÖQ”T©t>F¾œÝ¹Õ¯º-œ†ßB± ûXÖë?îeLþ³P›>¶‚ñž%_Ó“h{$zon®þ¸ú…Î÷Ã~€ü ß3릡Gç”i»jÝf³y&g­·âÒ‚{+H«û-Jù…§3Í ¦Ãëh«­ *Ä0ê¨ðCi€bZÛ=u¥Ë2MšúûéOþs‡ß/ªõL{´ºÈ/ ™N¾]ä1 Û­\Ÿ 0M1öª¹rå[x¼¥(°µfü’«ébÎÄ~p&ºgÙ\w¨ Åž˜\€©£|¥£E ¿ÄÕÏlÝdSáë*éEŽ¡)Ü—R»{Ýz¡«{×köÌ\XÞH¸)×{Ö;G‘³ëž÷™r93¼Ùæ¤CÔ½çwŽF«iâFh4*×,æG›ºÑ¹zOÜS‘( $t"É}/«{’Å6€¡ áÊ %黺²Ûótø±k”í Iô®òõ4ŠL—á÷YgÁM¹1œv–ùÂLÛp¯u¾l«þ~ÏÕe¬"'îo|Í)­Ø€ûL´»ÆË‰‚ø;ºª6ŽXHOY²5éÌ$áa(~³Éœæ2Þ迤£ß5ÂpwE!º]øšó:¦}î‰Ë¼jýó‘•H a€lçè{\à˹A—i^pm¹y9Sì&Ã=ÌÊÜ«- áˆl´àÝò´G\‚³yycº3•\ÈQhßÉ›z’»w88“‘ûr§ zˆ;b×·)T„ Ö`%9.­¸ƒvY¸²z¦,^X*Úè*©÷ÈÌårÊžëeÿ²ç\*㡹øíxL"z.ñ¯ïñ+—çólç9«®EwÖàHêÕE]ÁÜ{¦«¤Q[ßêb3m*ÄÕyÑ’£`A‡ŒØ–,.o#Ší…4²Ó⡆úK£@âpŸmÄ7ºJ‹K—äÃÉÞ¾yJ¤ø×r™"u0û‰’‰ ÿæE‰öIÅÎrÔ‹ nžMoÒ·Ìû]ïÓ1| ºý\&ÃE>WÁHÝŸç—õc:ÔAëP $gä ÃÙæåâR¤vK·³…t>{mÌh;¨àász«¦£Tß–ÌœAW6zðΖ¥a˜ß”)רdVƼÖ/÷–¼ø–$¦y±ïmq|¢[ËGפ} µÙg>·Š:+å/Ô=è¦Íµ^OÓå$e®ú5á|M?iç éRM?®·(¨áD˺βY’á½ZÊ!”ľWÜWãÁÏÆ.Ÿ »§ëÇŸ¿;ÿþPßÚ7Ã}Ç«¡Þô~B5öszjÍ<=6QÓÄå:îüaìï$\ëŒ|¸Åä•™´žõG=€Ö––;\»Ö¶|¹û Wå¼Íѫ֦¤Ö‘vþ€ãÖò*Ÿ×wk…34+ÃlMë ÇŸxw°®!Ïdmý„YÙ“ûÜ~€¤f\ÓÔÚTêjºiÝh^pÊôŠ®L£yØ–np&g8º‚°ü/lqÅìgz%£¨`½b! ß"]£â·›tÑt$iz¤ÍŒäOãä±ég¸é"2<+ëN zw¶Ì•@Іà%¾O"Æÿ´kÐŒcÜN<·OI—¢£o•ÎsR’ŽL G¦_¥sÇîéí¿aöDìl~³º¬Ó§àcød*œT ðMâþbIO?•(u¼MSÍæ;×>+w\fRýœØÎ>çû#H¢(bŠ&õ)‰ik* 1ò1¸PW’3Ù]øãщ34½|Q÷¤MÞ-gÑ·’lÉ)ÇsÖ!P%ñåÅ8¿ÉǨŠÈ™¡­Ÿ—xar¦–:d6x¹21=t Iç²õ¬¡t2»J‡Y#At¼²`Ú'Ú—·¤ =Ýè·5÷°gu[Xšr¿Äu”|x‚tåÛ‚¼ÔÈÓ+Ò×>áYv´±VQóº÷¦5ç@dUíκÍÀýŒ”{'Å|?áÆŠ“([ŠDÿ#O U|v¾Ó Ÿ›íPò«jGºœ¾ú°ˆ&Ez‘9¯‚gšÓ,²Q‰Ö¤Ulª©É¶‹bÑÇ;¤ªî­tðTá‰Y½¶€‘¿ÀõU!ï®^ˆÏY¾÷úxâñz0ˆ4iŽRžvÕ:Ú•8Kª #7¢•ì5žK½çûèÉsãSë㾚ˆziÓ¡ ˆJzŒ´ÄIk;ÃòMê#!g”ìj»WP/uŽUùÙ˜º[j1‡^AÎfM‘°½²ªx¶ˆN2ö*&â³?¡k¼¬ç“y›<­½¶"¼#ܦy´ Nf7= (Ó&=“3Îæ7¨tÖæzUO&ÓNˆ¡ÙÊf£UûíOÇ,²Ä¸È9Û9çZ†‚¸3¾«\½íCµdï^';U‹àc°ÅUCf ƒ÷„¸7çÙ¬¬¸VH6vºq]ζbðó´€µGî0E°ÿäù§ónÿ[–…éŽÑ`‚ÓÕ`A/&/™Ãô·›<•؇¤©–-ݺt†ÿ kÖ&ó ”‰øÖìp{à™%)"Ì‚ôãâ·éؽÎÞ#ÁMN^?ÅH‚u™ Ìs@FíËiWri­0ñp>Ö'Órªñð ™MU¢o¡NêjÍH݋ѓ&„FK?¤Sõg× ~÷ËãcºÐnLĆœ²xFªX1"Íôµ^–iòa’×Ïê»­¯ÊáÑ}¢¿]ͳ‹?<ÙÚÚöÿ¯%nAPdõû½÷xQ¹Éé€dãMÿÑ?ÉoxÒë ÞꤣÔ‘èþÇ+ M_rΘ÷e¶E3Ýžm³¢‰l¿‡se[6àS%z.Ž4‘ {@,ØÍ´o}¦Uß 08¹²$ñäP­’vb6æ—L3v5÷‡Å2ãÅM¥]¨ÚBª…1ßþs{Kw}›~®6?¸|žøz‡P`¥Nvê;ð)ƒa±!ª¥·Q|.K:…³ Ê¢‡̪ûÜP‡Då³b4YŒ;¯ táZµ„£S16"SiäîAâVö0és~êÉÉ•Kk.ã<½,Ê*[1î™7œ"¼Ù¤/6¦„Œ,Ù–_j#ÙV|ÿèädïàd·*¾× *޶d×è©UÜEDgoñþ2H oæ¤{Šß7dž©AG¯üñA<ʘî¯W©µGÌMæÅ ¯ºø âù¯žy÷¤sòâõÆ—å\Û*\¶ÿ‰&äöÂ2$Ñ0?›<ý¶ E`üÛ«×c3dõhãaûhÌþ*ó÷Ô´RYOóÙtð>)d”Ãçöv¬¼‹sX®îšÊ±L%B!„°ãæjXÏ:œeÕf8/¯e¦9»£0_õ£24‹Mh¼–×øc/QˈÄŸÅÿ¸–0ô8›GÿØ.>’fgU ‡¤7cR]·q!k‘WF‘u¯¬ÖCYÞâGJ ÙkxÆ?†^`1ÝàÚÐá9ÊŒÝ7ªG$“ø>¥à§4)½2+þ9¨kT=Üy?»HL9@öº …æÉÓ0§ê›qkl Ñ00qËqRšÖpýLóÜ/Œ^`è>@üãí°§û­çdeÐóœÌ}cŽ…¶½«™èiRGŸÆcè d>Ó™UœLnÂŒkUÌ9±¸6•õÖàÌÌ^AÃvÉÉJÉ¿1dóÌ×Ð׺HŽ:Ú˜®pÆÐÁùéÕ7Èҽɳ[§1ö=¢B¨é»1ƒ“Ä“½K.Œ§Ýªà…ÍŠt81ÿÉ RgÁM’Í ±KŸOlºz!=ct[l+1Kä„3Ê˜Õ¯Š³ö\Zûr.r\õ«Õ´{Ë©»âX«øûýű4s‰.t µz@M¶“!]Õ1þZo±¶—4UÏÆóØ£CÛÅ#K×Û‘'y‘î¶á°£ƒR,l¥ ÒñßšùAÏ×â=¥} •ÿNî,·–0É[ã¡[‰¦'sPªZ¨‹ÞNÓvs„˜å®ÃîÝÄåC÷ ÀÚhÓЙÀe°(GÙÌT}žJœ¨ñ 6>sÝA óB}Ù vùrÕˆ!×WžÍ8˜W›°ý«—™T ñkñ9Í¢ˆÖak|¤‡£53+­Õ ¸=JK\‹uâ>p\`Ë+%º½áÚb ûMΠG{p'Š?“3ßãPOîj…ç&˜Èõs}¸•¼&šÃg ðìvìZä’Q&d°‰¶¦BŒœ>„Hñé\d†ûøA"±×ЦNvdH’¥ƒí"d… ïŸƒ˜ÖÙ‹Y8!³¾ÈÀ½ñ}K¶•tŒ¨Öš Ãò—ïg‡ðôÎåÓ@Ÿò‚É@àtj &¬•„»|{ð•Ñ °cƒÒ6ÅcP;7vw³#í¸179µé¹Ý­Å^©3&+nòyYp '›ýM’îçó÷oÏÿòæõûÿôú—_Î^½þÃe}½±÷l­ùÉo hN¾ôN›D U m,ŽÎ"W“ḓ†î{¬Œ ÝË 6u'p|Ðr/ÕS“ÒØ×´Ý¬5¹Ä2¯’í‹k—‚Üüõ¿¢@P'Çï‹\®ç´?ù@¼23g\b·^ ç&-òê ýÀ·¦¦¡ä…Ñû(¢ÃRízà!dmõ°^'¤/cw9MP'z ¨«ÀrÏ^Ð˰# Žó‰÷Âæ¢ÅVÂ]ôRý‚å“ÉÒI#&O4ÀÒŸuÿÛTÓŽ~–8©<¹•ø!„|2ÖkÌêáZ]¤‡UwUÍWN„ÜÖMGæ@Ëx$ÿûŸËoóª·èN¹àÊMi± ¥7Cà&y]O4Ì»â²ô]t=‘ {kÓǮ’ÛROÒv«`EµU·8ËÓ‹ f÷πт¥¬Ø6ðîáÊ¢]km‡½Õ]*عde’ªò•äÙ:kìõ‡xÃÆk•±Ôî”ùLí]Âr•u­­?ÉOž³ŒïÓPTÕÉ nûe¦ÐðwÀ<ž<Ÿ¦%Áøø?°ÖhTÎ8E†)ðÃ|¢ÅÈCL¹s ¼¸3~ÌGÔ Àh!Ù mµûÍÙû¸F)Ú3àkCó§lÔÛ…!Š|³¹©Î°iô¿ß¤#Ír[/ÖöØÏJ}V ‚%%ÏoQ6kIùìË«gŠã n\xž XTP¢V8§néþ¿ô  ø#™ä¬¨ÃXÄð4¶á{Pc’_C0Ù6%±ÅY¸PyŒfÌmÒÈBõÃ2Z4“H0Í]¡FÙ¶{}i)ÆFŽØ’Ïílc}"Íœà©*  “ÒÕg’ç¤eqÊîÞêç/i÷Ï1+‡l³.7忚éÈìvYÖ‰Q°.KQl¤F‘9ýÑÒ¥li®$qæR‡äV•YÑ?Í7üØMíÛ®þ©h; þ2$îFoy>I•7Ëñ×ArUÞÂͤ…¯SÓ¶‡Yb­¶#pK…?t8s¹’Jîj“ôª‹â†œgãÅHW4 „ý„YÍÎqnE‚Ej‹‰N®ÿÔ&…ÇXÂÐ>ú`Wî º¤ù@µUk0–-ìûEͳiæj—¡çгÍm3Æ,ÊÙ4$ò :b¿éÍœœÉ³€Žó•m?!°عb¤ßÙùϬ¸ È5TT¡ö  à9ó»™Õé­ _‚èö¿ÒÁÑ–Cx7=%¹1\†ý:t[GÓ78+&xJlöâ§3æ –e In䣴r*†ÎckµÌqr*ê’–(¬|.¹¿œÏª½Q¸hwÅÃM$C€ñr!ž3wÆÅ%<÷Ï:ΩK\´¡<ðÍ«Î& …6ù·NQ0÷n¢Í글ƒ¸FéTΓ‰d¤pŽU¶o³aôƒ÷I¢»«³Àœ7! Iãך7²¤äüXˆþL´2ÊTC#j!¿ÿ¾/ÔxEn¥>c6>­(v]Ýàט=*òõfäÑîÖ‡¶XëZ&Ž(“æ Ïíj‚zH=‡b3v6• ŸÈGHAÅcÚ£‘8?äš—b¢›ÆyDC)¦Úšê#Á1ÉëœÍ»³x_ÑΫœSñ´Rˆ¥„g]€c™€¶‘'õ¬O‚Ì^M 4Æ9¸ÅíSâÆ1™Ĥ,Þ"½1ä¶%y“5pio”}¯f/lšw% ANÞ¾}ã´Ð‘Ø<¸{”ŸÂñ'ì Άw颖T9AèŠjLlÈã"ìOÃú/Ïä>ä7’åÌW/äLaz¬Ë‚!&8rì¸5Å÷ïßÇlj&3Æ·—¹Ï0ñ¬ª])âL.ÅlÓTgÜå ,½OÑ—*í¦EÜiŸ$|ÁÇ+z#\Eì>ÍÙ.Ò ŽÃ”cþa]!{»˜ÂÅRÙŠe¹b™é®ãˆS8-Eß7ƒ¾j¼Iϳ?³b¹˜¤•\u‡ê*£ e òe”ŽÇÚPÎyˆ“ÂB‹B 1Ú˜é0Ïé&UßϳÑUacÓv³6¤!2:ó¡tŒç6懣A§$•ÿb ÷c?Af0ÛÀ×ê¨g9˜‹íÎÂÑ}פìÜM‡å$rmœ[yáØº§UÑøK¼˜•:Þ­jáYé\_Þ\[‡N®[ÊB]1ÓÙBã;u"Ý$úß°kmd¿ˆ+_b:—º& šuÀI8"”f«( ,ðñÈ€ÞüF«ãw·üµÞWîÃV ÛI)JrÓúþç5îÇ‹¥(¹Y±Ÿü£H}`r ‰*Þ:Ÿ€J¯Ù½±ýµ󸀴ö9°É©bçKHLÉÑ rÂuJ4צC"p©L²â €€¨ï·K³Á1æõ eÐì Tœr'M33„2[^`ri?>†qx_Óè‹â6$»Û³p5.${«(0þýæ»3 Òhigñ¹‚Äß•·Lª3všÄºfü¦ÂæÁ½šÞñýQ–{¬dÅ_Ë;c}MÅ×4–Ë`BDõ}“é-éÛ’E圽„&hZ%Œ®A[»1Wöq¾<ðt$ee ‡ û†â2*‡8¡åàÏWkú·z1ÜZÀà\Þ€¦/>´ŽËÕ .+¸]†1\/æùåý*²ØänØ9s3.è€y®7NPÒYêÝÉ=}Éí‚`² ØS¾¸¼Ôh—øŠ„ jW~ä½aiFVD5á²4b}³Çb’— xÃWd€}$ŠïÛ#Δ¬Þ»(whá­¾ë„öOêôÓ}GŽIÂ9ò|kÜC8¬b¤‹ïC\dÙÄl/: ðæ’òäÈÁ‚ê"½)ÙÔ]‘¥\ß-¹ ÀfàÉ*pÊn½lJö£œ iXŒÜ‰Aít$—‘¾r.ÙÚš|ê*p”I€Û½½*oÆQG~[E¹'¸¨‡/x* +â²Lµhrø-DâÙhá [F¤7Þ#‚)Xy5þJøÂq3 ©ä9Œ¸¤i,­"fOº (wÆ©ž?×ÒnŒ 96þ*.Ù§«S~%Û.Ú—XßÅ?Mó!ÄÛú¶˜p= [\c+¨˜ÇûþH&ÚgLøkXX_úrº=°$û›à ƒ‡²ÃÝ‹<ÛÁ•ñ2e¥%õ®Gõ £“'ÏŸ–¸ˆóJ U6{ØØ2L¸d²± jïSfIïÅ—XÄr}Ǫ„5Ø3A:vã˜òÏøÌ}‡jæ3Gd& ø,ó0° s­±‰äQC °¡–f¶È§@Ÿ‰x&¤Ò½×ªyÁ­ã²ä7¶îâ_'>åšÙÌ8¬$¢ÈTßH’‚cñÑ:î‹czi ½-¸1˜ù\ç,]#¤„w"Ƥ=»ŒQö\¢œÜïDÁ²J £ú—á¾Ì;!Y¤¤5¦¸Én¯¡ñ„îÏnjiÕÛý6Ü»LyI èß;“U5®\4 3ñi¦ó»eÊâœÜ {Aé–œaoã?“Ôçá4älúŠ]e¡õ w’MˆÐŒwOW€ÏöÖ+z;+À$(~¢8V’d¡æÃw×’ãð©äU6ÌÓb[ʨôÄw° YeÖƒ¨gÈr¤Ðã g€Ñ$ØÿP09í éóÝVòÎ+‚´€.3«70Ù–h_ª³zO ‘©oè³ÓªËÐò/ (ð˜Ÿ1˜;FwA ⧃Êf0cò{’Ÿ]¹ KEܯ;GKé͇{§»§‡GG­ùÍû½ò›»J£ÒS¥›×›#º©»Ã(b}g@AùE ã‰3³œèA2 ŽüÚ$wU—Åâó?[TwèZ~ßÕŸ½zíáÇYëoõÁæ8»Ù}»’û/găñ.>Ʀc!›Õø:†“ŸÏƒI]çu¼*sl;ж¶íúþ#¬ô:>¿Õ‡·Ù–‚ÝŒÙÇäW~< „hªÍŽ©Ãx4çY9#sk¾©<øàâã'_¸Ž¥/. v'^{]ÞòGÛFG’ÃX’t,óñwó¤«Ð%ˆoo„ì’|[itÃ4ˆ~ñ¨'œÐaN€*~ù' ùâ §Q:µÀ°OÕìî4—¯E5Ë&“G90ßéàmÔ?p{êGé/uñ6ˆ1,˪~J|‘“—ÿò/˘ï/üàMê¬Ò› Ïé±’Þ§è^j6mjb\Ò}™;>꨼ð(‡*úašÔ %ËïvJm9[Ó€Ú–îàY'åh´˜KÈZ`ÍãLª‹–ÑP!Fb¥þgu)޳Êö%ì9Œ#+©ñ Öä¾ ~‚Zò™YIËß8Ž*M»dÖ}¥ß^©.üÏ¢¦ÌCsF:!>÷ ê;½É>䔼(ÒÉÝߣÉIŒ’|ØO’WeèЩºè索˜øàæl1Ÿ!Wúé]:mºì¯ 4g©lŠG¤Ä0MPœÿú’¦X\ä—Ÿ•u^X—¹Lf1—*õ¥jY¿‚ýZ[‚ f%“ôòsyqÝÃM@ÜíºØÏuû4DqUMbݽVfH•ðÑb.Ù˜‹ÂôRøLDB=ù¸Šså¿«%íÉ4¿£3p“‘éÍM¡éßþþÍ#,ýte¾mEMëŒv œƒ(¾Èîåà þvssL6aã?KžÓ¯%@>Øp^ÞVRön,@Å?Øü/)áöW]Lm›ÑbFûÖû OŃç¿ñÁ › ÔŒîI„Ìþ'”=›çTV'ÇÆš%»ÖóÖV¨ïˆqí=fŒk—c\ßÒƒeÙ7¸Õ¥®ß/ü}Åž®¨9벂ͶXüxÄA^¸,›fsº»7Ñ °ü«Òxç¾Dàâ?µƒÔÅrÚëS&¶×ÓëµÈ,]²Ñ•&è5¡^ÅŠ÷wNN÷[Ãy½Ây']:åþÒén6oFPNÑËZnµ¼öéZßL¤[1Bä¬aS Ð%£ÏæNK<ýö—Ÿ6Üizš]n%ã‡Þ'ùˆî—Œ¸Á!`9jÑÓÚw•ÅL.{¯%™X.ãYËÉ#ÜÛ·+Û÷[½ý[½©ÁÈø5a›èüFJúµž¼$ÄÏl¶‰¿lkx¦ÿUý‚c2sHÆp«+b+ùÁ]Ù®¯ Xvzü3-všót“&XmKæ>«•“‰¢{Q»gr õÕ´’ý)ç3Ê Gi9¤FÛ À$Ë¢z ¥¬×®›˜K(±%„6yGJÌB x?Ù×Ý⪠<2n?÷j&꫾~ñÎå(RTw©È&Û©º–ûÓâZDêÕÊ’ïÕ}¼•kIDûC:ýÜËœ¨;ù;þ9|À=Ww1É>ô_Ú§tÛö[ÏpÉ'¹W_‚+6Z‘í5Ùž]_Šçó>Ëý²|§=7ùr4ºÏ~ûû䥺Gé?Œ¾ð¹ouJÝgQVd“ìñ¬¸¬¯l¾‘ab®SÇÅìêΊ¡§ÒÌJœ¨ÐŽÎß¼} ÎáJwaE¨žNàY¼Ç†ÃÅ(å串–­S.MPžW¦øÓŸéM.Øc°x'•V]d€äE½}?ïÜþ+áœûø> ;ûï`û&—ó´eËÖVîjr‡ÔϾÕQ½IV¥åê9ª©K™f²··T°Ë¯c¤OÙf_K)"•ؾæWó½0ÙΓÛ÷œ ø÷ÿú¿ã⢠¡Ž•'VZ%óR$—œYìŸÒwz!ƉöO÷NZ}L‡½|LG]NŠ=†²×R.Ž.×°7?ÄÚ pcWÝjT]ø­–5õbP"÷0Çh*=ê]Ñ'ÚB:ý¾wo¬3>ÿð»Ígý¶cÿÈmGkì0ÚQ£ÉÒÈû>GˆÖ×û¾oìŸ| Ptôv?6]¾€íß?m ?: c¡ä÷= Xz~î…¡·üòì>Â3úLÜÕä?¿öºêÅ^ý>T±NÕ•DÇ}l|zã!k|@½~ò½j¥Z¿Ð­è“ £®6—ðqÞNŽO–ʵÂçe¯½&ÒâÄü\ûÕtVÆ-%ú£½O HÝ@—î{dñ®/íî)ì,S “_OñÑ`LQb‡oÿÃÛ‹)¾ ïp9jö¥ÆgAD®'^µ|Ͼ¿ÇƒFOý¾çöÂ#£Øª-Ö·ÃZM¤Äù¤IÕg:+—8Âa÷=.‹²>:˜{Ó?·/ßýôvÙÇÔוªAÅÄ6Ñž`·y%åîðö£.ºW¬´˜Ï¦›Ì[ý ò5³ä/?}o¤ËµöüâÆ“”+ùºº¿lÊEå—EÉ`Ì<ú:\ò¢·–ä;µUÍ>pù æVd‡›udl‘§ÕW|u=vvEÍ[º1¿Õ@N:þnàP#ô{]çàtÇ5®”Èe•<å*âCßNö7†°ŒM%b-D åfâ¥:ïníoU¥ Åì¯øÅTñÐC@Š¸Ò¬¥.7Òn’ôÒ´£~+ÞÓzZðÐ# —iYBûÐH@TM@^¾k½¬(.[“ˆ›J,·“Œ6ök[p߈ßÛ«Örº¶Ÿ+š—‹sù…mPІÛ?¢â‚¢cÓ›2säy’jmè€F³1‹Þ3µÎL—ÿë´7ÍïáÌØ®4‹B^0ϳª#mg¹Ë·5néïÁrœ+{šjµÓ¼X€½ž+‘,ì½â—(3­…‡µÿÒ€XÕ”Eu'RÃn¿^i8mà *¢?‡_š 4¸¼'CˆLwT¯ï‚šüU¶sÕõ°)FL(KŽšdR›:–ôK¥†k¯;¸ÖðLØ­M|•÷¥ÇG“QçÎ.EMwî ›Vy{©ÿKœ$­6npÞ‘ªÜê½y|£-{晫šjŠPnmóéܪ®L}BÞKM„êm:¹Ö¬RhØvã1€ ­Ýg>÷c1 Àù‚â7IAC7‰©Öö:ˆMÊQêµ™’è[ŽÎyó)"rýÄ9öï¬Ùà“‹´§ó­Ë¿ñÌü¶ÑH¢_U’¨ÌËÞs«In†$¥š`·œ«Ãef@YhÝcs 5¼è57쨹 ÌôA8–· UÜÕÿÆ|#„³—yƒ,}#Ô?yAé7Z¢8âæ:u ‰¼BÎyW딃'Ï¡Yºùy…Þ¿Õ1ЮímÏí¿ÑWдaÍ=7•×ÌL*‹3ûÚÍ•ÜÁRzšˆrˆ¬ÁXÓ.ÎÐlN;;[j¡F9Iain\çº5ç•ÎJÆ×ƒ€áuRè–éhçór^oµÂÖ¢*Eïž®h N;þJûúõÛe¢fW!+Ô Nªß&(ël›^H{­†›H¯Ò$­kº0¦Ò‹…Ðb:,Ò|"%ïÃ3 Cu~»J硃èBzuËåôŸÛ[EÿÑ|ùcl‡›¯ŽF(˜ $B¸ÔiÞ9à7(N³´è%ÄõÉÆák7¬~7t^Ûª³Xª¬³ßõÛ ú{„ öhÉ$ ßi,ˆ~J[rn÷¸1œ¡øê!ëUc¾`£½&­R4KÉÆÜÀo\Êíú~v<ÌW¬ÄtöS¹ úBå—¥ܤ“\@Wú0—FÛ° =ׯ¦“vv'ujÍÜíe¯ÒÆœ¥¾%@÷VœzI2oL“:ç^4²tÑGî„Cc:æs–h­c­ذ ”>¥—ì5ÂbýýØR“<]_ãp¯‘¬ î¥dWctµLu(i)Iœd} Òâ¥ú±—ˆÔg"õX›%ø¯Cn¦™^ÊNض"‹"ÿm‘%Úâ '­àé·ïÎ^m$è¤gÚÍ¢Ö¦íj°=>x?¬1ø•áÓ)zC/³«tœR•ªN)çóÍÉ­‘’ñ‚|Òî‡Ãziv¨Ekí ÔYkš8èY3ä¢-Í˪ò bvЦëí=Î o Ý{ëY‹¸±EDË„]U¹áZBA/›·xŸRÓ½O6úôa«¾Ø=4R"7ÅÓ«»¦¯ÓßI‰ ÷ΑÇl«zêä滂›—Š ’sªZfË=ýÞUÚ†IŽ¨ÈÆ]ÌÐ×Þž¤HÕy‘ Ä®V& ¤PÕÑë^¼t WvTXî)lVOF*³\Ї˫ +b5èbúk8!™>7Pj6'c Caá—HrEö%ˆæ8µoxãÏÁîïÏr¶¹*\þ-×6‚î°Ý+6%ÍóÁ${µ¾- Ù!ÍmkYît¿zÖ/„·W9KÿÊ—n?w²™þÕù¡^5ý~vk£±L#"tçÅE}[¶*k]w7AÐ3à·Ø®¤)?&šÔ Í20(ï5êË·mµ}Z%7A¡k/ËoÔÌ7–-,΃ý€vÕ¥éIß¼~ίзê§Ñc_Ÿ§–Ø¡ép[Ø–¢¬øKÞiI"·ò` çTûpóðì™äÖݹPtšç>u9©ú`‹À”Ç+é ƒI§(ήD6nB^K(¡ˆ>æó\òÑx:$¿æc>ÎOgó¬®ïH!]¹¾st|6Ø{ÁÂm[«\ú(ÉüÛ§<ÍRÓ’w!]Γ±ù÷Ü–=·74Ÿ^ÑéiA•û››ÜêJ¹Q<3b_¶Nâ»]C¦‹²œÀ/ÅÏ2=™ˆÒƒ¡ÏW‹9Lˆ9ëªÅ(Ê_fÎ¥7‡„.ÃÛÂqV°'Ïc.Á§wŽ÷÷÷ZáÓGýàÓ;Ož¿¥süË¢(ì&”C#ŸãìÃã ý"<›ƒWkF °äðÒ/DzZ}›©na€qÇûé-÷Qãê´Å?×K§Š{í$ÙmBŠê„¸›iކö¿ ÂÆ6ŽÕŠ,»qr'w"ÂiÑóÅLÇ­°\FWÒ¬C¦û´¾›içHžöx1Wù}µ¨ä®Ñ‰tª®Î3fÝt„ùz‹¥NØ1n¶5í¹–øPœÁ -ƉØ8Q »<ò ŠÓ"/ÔI´M5Á£t,93uј‡ú@I>hÃÍ×ôÐn£Å˜•òÉù݆>¼ñ¿÷æ#-…=IÄ:Ñ$ËfÒ N<Ñ$õ3§7É…Aæ|ef93Piæq¤»Ž®«Ö׉ké>ÈÞqIá§B§~Ry½Y@{MŠà0½)5™÷V9˜ ¸YªEWFUÁ}>LG׿Zð+7RË+¢lÁ-^ B´ìbœØ¶q˜eö¡ÐnŠgj"+ÒónpÃHOé… ¯æ…ZLóNÔ^Ñ’ö½>äMÆ•p¯r˜ ‹.ó¹ç.ôP»¨Õ,6Ò¤¼ÌG6dȱ¬É†¿o¡c$/z§Á7öçr´Æ‹AÅ•V «Þ~Ó2Ȫ‹P–))ѹÜ9æËá â$4&,.Ÿ%px §Üó­¶š™2–ßœÛÞOâúä5”85ú8”‘³T3ÐŽfþ.pÇå:77] emn¢º¼Î”æU2êEU-¦<3¹ZŒ ª¸f^Û~‘ 7$t}*í;Ú©ï Ó͸M¡ ›+-Ó29Ò….,Ä,*’6Xɠݽõ¬kTk'¢õÌÆ›X7ÏæÓ¼ªôÁ”—'[¡a_?ˆîh©—Ódò²øaBþ缜AsCf6žÖ+ݬ‡0öÀó `í’W›‘²N» d7NÊâRõnרs#:Ù8¿ÉÇP:´ñN°9ÞŒ–AÒØN¦ùaG|®¾2™45ŸÈMÐOùÌâ€gÃà_ÌãÙĈØuìŽG­÷D#3dè. W¹-&àŒºÌ¥1,>ÌlæÞ´ãï•:èתp‡Ožçþ^1J`tµ(®«ðGÆ ¿ éÀwlLg"H—Æ ­c{oåUG â¶ØˆJȺfõhk+¸(6¬ ðÆ4‡‡ƒ] í_9‡)*!o„†xÌŸÒäü¢zãmÿõè÷Íp»R(J‰VŽ[aUZ÷±º•0\„·“¤¼á®”DiöÛà_«f°L¢‡ŒtŽ<®?8^in½†*ã{‚—«ªç)££èDÓmâïë‹Âê·ág‚ÆtûŠ"®Îò%ájÜmÆ øcþÞ}Ã%Ú¸tÙÀqç™ëRSЊβB|‘Ž2 øÊÆ9ÇMksËl`v(vG"ÙÆñËáùs›EÐpÌ ©LÖ1»küÒðÄÒ0mþÙ½5Ýò{­Å4bó¸JŒ­ãEîd§aÐ×ís5îÈùjVU>´9ãl‡8·J­ƒ[ÐË^ Õ¾X߯¤cpc&ñ^wkcçO5 U6óÄÀèÚM™ƒWØ \ßd«Û«Z)³µ„9·PÔ¨¯…WŸ(+¶‡ÞÌÃà?,Oœ57Í+A‰*¾¨Y‡Ê›Ïë»O^á'Õ1Xctðg;߉ÅÉýó«’£ýª>H hVôjßnƒÛð2Ëßðƒ"(Œ$мØÅæOkýr0¡tY{ÅWxãxHËûË–”0¦|S†éÂÒ‚g¦—nZ±¦ÄA\!_$#qµðÔøoÍEÏȃ]ß +§C m®2ßåÀÄOƒ<_‹…$ëQ·<ñ+BJ®›ù€™ý©±gôg̹’‘þxvmoŪãr‹‘ègZ¨Ô¯'ç/¾Ýí¯hÒ[{«­ÿ`]æJÓ0*Û,—ÐÃrð€à½,Éx‹ªRƒägþ1Ð?ý¸Y{OÈÔÙžXg‹WÿšVÚò×À¹˜°ÞryÁw`cܽUêšñD3ó4”M{êô‹F¼Ÿ¿ÄTã³\z&JµFÔO9’t€ê x|}Â@¢É5B¤ªŽ®m?n«ÉÂOw×&Ä"ùGÈ3ð¼W—¼"2ã»À|ª"ÁÆ»„–\߉W•(z¢rY'JSa·ÂïÆõ“VZuI9¤›r`@´P}/KÓØØ Ñ—o ç˜CômÌÀZ ÇNÓ¿z¶F™u‰{GŸ©ÜûìX @;jR…7 pÇSEE3ø!Í@ QãXª¼±äz¬6ZHz~/àï=`¶ÉJd¶H_æL¤Ò’Ħ –Å*’ŸÖò’zn|Ÿs;îäü#©ìAZIÌëtáÁÍý]ôµ ·EÀ§ºU`$8¿q613&‹ÂÍâƒç/מWÏm)ÄfÁ¨»;K\3p~Vs %De9?3HJù˜u«Mš Ý¼ÈÙÔâÁXkδÊXCb‘‚ÈJR!TèÄ&<'áåµz• Aoñ%O;¹óíZ¿ÙýÎV³ªJ6ÕwfØÜùÿp’E(ç|ŽŒ¢eæ!ð"ŽF‹I:_rj4-ï3Eƒ°Žï;øT,̆}*8“- ¾Ñp;qîc'Ö¶ 9 ’³2µ!’È/ÒŤn†“‡!‡†ÛJ”)´¿-.5÷¡šnnʃ#g$Œ«AòÓßÞ¼¡¾¯œ´R;ۦñW”CÀ$¸.¨A!Sz ÷¤L¡ü”<ýåå»Ä6bgERÖ8æõ¨ æÙ2d:“œQˆc).%Ò_…TÖ6mFŠè4•ûâ]‘,œ_Ž&þ´gmךT#6súOmÿ  Üªž/xŸc¿Pââm½7EÂמ«ËÇ]ŒËÛ„t£hYç‘@íÔ5Ÿþ8¬Jè°«ê)¯z³~ ñVÿÛ–f”à V1ŸMÄvÃûØé¼ß¾ýVétð‡¤ºÊ2ÅÿºMƒ Ý^V.ò€¶¢QÆz­Ç=¥ÙbèD~Ãvçhû„5£4¯¥?]%p¿Ü‘ƒ4Qv¡\e“Yå¾£ §+Ï-mKØbÂ~l¤85/ÓACýƒ?ZT5]cñÿÃA‡ý´µÎb?ó›|då-ks™|7õˆ5™Sa)$3èHSp<”ÎzüüžW_'gÛ?&W$@3!¶à–gR¢˜÷C›!eUÙA¢ù,柽y†Ý òvì¬VYH|U¥“öxCœ¸@0y¢õ‹ÿ©Ø.¸Šg®·÷4¯È¬¥3n¡Ù”㦷¦}) 7ÏܦdÖê-¸¤ŠÚ|+±EP’tSÊ‚8wGìw¤6·/£ë.ƒËë¢?òa:i¿çh§?ôg“ oÉzï“F¯±s_×Pýãþ|xÐQSòx¥oग़»o`îþ¨=Ÿ†ýM‡µŸŽB'… jv„]¶ªñT¹–ÃSÆ×.aŽœ,a’ØæP¨“ÎÚó~˜î­8¦ü:C@#“Ìk:ÅPS2¥t20(Hu[úÀ´>[Ìj©èjËÚèMW‰Š ]Ž¿Êá†4µ=‘ÝW›©A&s7cµ·¥w™Á oBÚu9çšW¶Ëy-eÙ‡/Âÿ)¨ã%ß…«E¥9­U?ͦpøTÙåTÑPЀñåÍîü1»}Wße\úüýÞÎûEãö»j–:FfÒiÖXbWûC¸Ú¶ÈÉZ?xÖÀ]h ÍŠhÖ]XvYšŒÎØÐ–L–[â­;J)Ÿ™pMKÌä…feXÈÆê­[™U¬¢U¸  ²ï*Î’ÙûÖœ(uk²›W©Ù‡¼^ãhg{kÂm\°za}ö½Êë…¦i!Óy®E³¤©81¡ïC®ðà8]ïYØ9…[ÝgK–>XΙÏ·©?ÄT-c ¹øNåæÎÁo!-í9å+×+¹7)Ç5åǬ~ÊÑ'p’PiXuÉe¤(ó1 :(Ëe8ìIÖÏÅýË`(iP è¬X =ƒî°ý½pÑEÏe±é½K.¼ŸHªÔÜ0;ÊÌ‚bþ#6ñÙó¬ïW*o$0J54¢kõß7@‚ö£ÎÁü–Rº:àçœj¶±‰7ô³1±þo$eàn–qV?ÀP'3-•žà@HD}ŽÓ£ÓýÃÝÖúǽêsœœ˜ˆa¸OV Ú*ÂN½\¾Ó¶[¿ýQs‘ÖQ¼ÍÜ_Ž¥™m’h—ÊREz˜{G% ¥­Œa²Œ[6“ºÎî¼DäÛÕ‰-^›ŒÕÆ©RR?¸¬H˜gõb^ÐÁgGZ©gmkÊ{s´UÉÔ™çÆ ®£uýËK“7—„$0u\wÍ17¸…a8þ\I-õ$sÕmÝ;ÉÒù:5ï©ìZà1.=8©æŠßæ£lãá²Â×îYâ~p3  ÀÖn¡¤gx»> |ÂDø»ã!þ8¬Z nþGùØGfÃÃf1ZÃÄJô N5€¨,‹„ dm®Èt óˆXÄæf€¶èjëµð#”¸­Û‹*· /÷Áq^Í&dÖ2Éõ꙼ꞒUÚ£‹ ·›´¸M¢‰£Fx¶œ_Kb„€ÆPܻٴ´:Ö.'\ïK¥$)…ëzˆ'QŠÎ}8Ô|IÉ@œ°€eÔ+ãìë7×u*`7—¨$gÈÀ]eå4)®LfO;)Nx·£Aá7Ås7U§¥{ýpoçèøðàø¨õZ?éw­Ÿ®¸Öa}Àº7ºùJSVb^¢õçr)zÑ®Ú sÙ¹NýZ¾çܬé‹h“WË\0‡î%F–3, Bæä#ŠS]z©/Mà ¿Ä.r½¦Y-h€‹4«L’Fäìµ!€ýŒ%ƒ¹cFŽ._}ô¹|¤¤ꤶþ¨Ê†' idµË[c< ´…HyÛtÀ<±âVq·ÜÍ:7ŸkÎ^ê©,{ÔÛ`÷K¦‰UûU²®S#¼[#J|w_ V¾{Q­(ê±ä_3œíÖk¤YâêAŠ 5ÍRèDÌïBùÉó4^SgrœDù—¬Ê%Ñx°sLFÏîáN{IÂÓ^²ñtg‰;$8 6–àù~…ˆ47À-]Xt Å<²·Í> C›)f²=òF3w¨Ç;Zm3aCËvéн7ލæàsÞ°È"—ÔlÏÁtÖZ½ü¬–ÏØK¥ãàÖ%ËMí†Dÿ¨…Ö£­í@¡K¥%Ô³²K°ç‰Ön•téh‡¯ü¸üFâqÿ{ã¨BæT~}]ËáÉ4òúaÕÓCFø–tû=ÃßÝ¿†åøÎýk\Ž˜÷¦"ÞŸÿ?PKû…CÆÃéÜPK:¥úJ^Æ2 ''mimetypePK:¥úJ¾šõqëëMThumbnails/thumbnail.pngPK:¥úJof;² nlayout-cachePK:¥úJGrOÞÓÓ5ªPictures/10000201000001F2000000BFE6D670FA6EA89166.pngPK:¥úJ ØÕ@¿ Ðstyles.xmlPK:¥úJ"ÏàŒ©H'meta.xmlPK:¥úJKÙg$P- ƒ)settings.xmlPK:¥úJZ1Configurations2/progressbar/PK:¥úJ”1Configurations2/toolbar/PK:¥úJ'Ê1Configurations2/accelerator/current.xmlPK:¥úJ!2Configurations2/images/Bitmaps/PK:¥úJ^2Configurations2/popupmenu/PK:¥úJ–2Configurations2/menubar/PK:¥úJÌ2Configurations2/floater/PK:¥úJ3Configurations2/statusbar/PK:¥úJ:3Configurations2/toolpanel/PK:¥úJŠñ²ÿƒ r3manifest.rdfPK:¥úJS3ŠW$¯4META-INF/manifest.xmlPK:¥úJû…CÆÃéÜ I6content.xmlPK Húnixnote2-2.0.2/help/UserDocumentation.pdf000066400000000000000000010263011315604104400203550ustar00rootroot00000000000000%PDF-1.4 %äüöß 2 0 obj <> stream xœuQMkÃ0 ½ûWè> stream ÿØÿàJFIFYZÿÛC     ÿÛC   ÿ¿ò"ÿÄ ÿÄÿÚ ú¤§Š¼¼÷ÓÅOo5÷Ê©BªSǧšž”z¨ô´]|«Ÿ> ž‰à(§Šy¦>´—|bYЛcïWwÏv^ð¯ïÃ{Ï‹^ùwÎ%­)võ·²gúǽ½ºùõ6!èòOÖߘ†¥ZzÉž>Ÿú³òÏô°èJ€O­ÇínoI¹Ëäüÿ$ÝîwX°¶wÙ9ܯO³°Æó&<wÎöØN?›zÉ6>¢ÌÕgèjæzµîÛ[ÚŒ¼­(*£ÅTzôóRª ©BªO5+ù×ú'𗬘{è,¥ˆã7¶—–>ùøíSÐð vl#¸‡Ð¨ä8Rl¸ë2„5`yµvÌapÏ ÎX|Ñ1C³ý—+o D ×ˆ>­ùbIºÆhÆñkŽËå÷‚•û$w¶Á̼÷é]†“;çÐn/k2z Ö=6c¿çÔfµèrØW_ë/6Á»>lt¸ßón<²Ø5‹,úáÜŸ Ÿ‡>ÜøÿZ^ãµÃØü{£å¹Þº<è´þfûCä©«ê¼÷ÙƒÀxú™÷?8÷š>'8ã¿ï%>îŠÅòÆÈæÍë0eÂw|'5aóDÇLW¶QçQËr}&2¼u4Åü¿E\…åî+ߘ¥¸Ž[î¼àrq2¯°’Z§Œ­G­»óªóµÇWⵞeÍù’C´ÊZÃÒÁZ¾ýG‘Åo¹Ø7uÐÝž=­uI=äüÓÜ÷rMw´W¸˜vß2w6Ì|®ëKc™ëº=¯WWùµn{ù’×WôËñGÚà =t{ÆÙlù›=Og¥•sîý&Œ.u€6oYƒ,»á9«š&8rc¼²ŽùŽŸ¤Þà K¼´¿Ñ°ÝýÜy)r"—æö>ÈÇÈ¿ÃyªÎÔØÍ$ųÄAÇI!p<í{l; >.ä$ånoõ}޼Åõœ¥T³w1v9ªÏÚOåm°ët\$áÍeãÝê~¦`Çâ>i>¯KæRï0æf¿œ»j}y×+WNf¯Œø+ôWä›Ý8ëß”:<=ýãyWÍ//âgJ¹4qôj@ÙÀÍ›Ö`Ë„îøNjÃæ‰Ž˜ïl£®«–ë§óm} ó9äKÜžî| ×K›øÇùXÙVømu;mVüÓo ÑC¼†Æ&ǰ»=O "œüCbßUËÍ5x|åkqÎý‚)J4¢OŸI(óü_™äÔýÀIœv:v:GÕ1ž"Šçðò/Ù÷°Ó¥äºú&žo+S—õ<œÑÁ¬%¹ãl䮟柹oµ|Ü; Àô›7¬Á– ÞpœÝ‡Ìó$71ÝÙÇ=· ߨÃ-ò}·Ÿcò¼«ÁtýÜ ™Íô[ð˜[“Z`ó×eüó[Y zÛQ£íP#Í×SYñæ6{jÇç7®íi›BÞS[(÷?³lùªõ¶¬^s±´ÕÍìo:üãõ¾X:ù±äyÜÜÁž- ¯¹M-1ìô|æïÄšlªý{œÖ~œ~k~—KŽÐæÕße¯á»ÞFƒwå^³îz¸¹™.;–"Ý•ë“‹ùŸì(Æm惭-­ß)Ýö8} o7ŽÔóêÿ«]k †^c²¬Võ}òÅ2(X¦CÏqÙ+z?Ò›¹¹¼îó,˜y-&‡ç×ÓRæúÞ~æ?ή¯beÊé5lceÅø“/9Ðéì>óùöm­—t:ÚÀ§tѳ±_?;¥í¬sv:­¥Ü‹ >îú¸ÔÃÅÚ[דQcuçFmvF]ɱµ“_všÊÖ»1ÑQE^¨¨¢¢ŠŠ*)ȱ¯=a¬­ê+¨³gj/úÚ5íé»þ—ØXÁc!Ãuõ·£_›þŠâ®¶µÚ>q}LÜ7¸Ê‘ŒöT/4ÀR£ÏŸlV©u†Výz¯¾y­YùO>Þ-®S|WÛÕ*®^ B~¾›r(ñºÕñ—v±¼hióÙF½¯mVvߥúw3DŸgb%}oÆdqW’·žzçs·ëz ¿Ñ(,Þ:ÚÈ:346ÿ¢ÖØÖsÒH ÙwjÇО0”š‹(jTØ£Ì6bÿÄ44056 @!"$%&2P3AE`ÿÚÿêu 5’õ”÷Sòcz¯’GêÌ …}¶£pÜ7 Ã_Ž£pÜ7 ~㬙3‹—ðŒ[Ÿ¶ ãô¯9_7ÚƒP5ŽAÈ ÀJcPj±È ÀK`¾ÚÚÉë›=4ø™›ÃN®;´Ƚ¥ó5úŒ(ćÐÃjêV<"fõ/KËaU­ž¢Ð8â CpR…†{G_.G Î4¬Ú¢µTÙ…Uô”(ÛbÊòI¹† ö;$eÍ“WÓcÇÎqUcF:Xê\Áü£2I=—ÆviO[NER˜ú ,ÆTÛuý†?\ÛÍMK¸óI™½U•ZV7¨ê¤Ý6˜HÂOL͵˜#ûZioVôþ ù–+×½UwÔ»×ÝËÕ9WÝ*ö§“:sPÈ2É6«}ÿšEÆRþA4tÄgèPpe^ݯì)L6#œÙöµhˆ˜v_‡îZp”[‚Ì©ÖU³& †Sü3ÞM¨!@”5øj5†á¸n†£_Ž£Q¸j5øá/œW訣U´PÒø¼Ã ]«7CÐðáÑSWáŸ"eŠ#Äù‘ì­Ò‡Q‡á2u†Œ×Ò àʽ»_ØTv¯>¨¶ÎscM‰µXºž‡¸(Â}NŸò«ŸÞaÞñB‚V°K†ðkƒrAÈ `–7 Ãx5ãx%Ãp5,eVÛÈ\æ"¡ëUÈjÔÖ?_Rí“} ´U^Iõ)D‚°¹"K®›¢dE\5Šá‰©këPpe^ݯì*{[ÿ™¨¼‡¹-tÖ,HD†MA¥QéSûÌCÞ9 ЦVdÎ˱K€œ€ÜèvɆ•óh¡/’Òo’Sóh¡·Éi' äà7GÍb†f´ø'8–[ÅÈì27kUÒC«8UfµXãEcV…ÈÆíä]<å­ÃwôÿD‰HŒ› U<§Øp«Ÿ´r s5íù  «Ûµý…Gk?¾©³WmÔÏ‹>'Ø¡´F ß¨ÔzTîï÷…ÝLÙSéigŹ%‚prƒtƒ tÊÔå(bV†¶ì\þ=é*Bi]Ö¤œKC%Í© Ü }I\•-ÒprŒ¢Õr†;Vš˜/°{™†·3dˆÇY1òiáÒl¨©í¾3lÒÀ~bä©NíxòŸ6ÛKHòTW·kû ŽÖÿV§é1«©W0ùÙã^‡1¹ñZõ JÞb~ï¾smȯ2&vPª¼Lºë+<î2—eÉ¿õ$¥N’•L—ÒýdŸñ¨^Ú‹+µ¸nÚ!ÉI:Kß2Wøæ¸ù>u¶W ÃYö6^·¥% wÝ]”ÈŒpg75„,è!Ô“kŠ|:qÔ´¡67“®$ì×*¨[‡æ(82¯n×ö=­‡€µòàÔ)EcÒ/†‘…ÏðRšõ ŸIŸÞb~ïÈ}N‹×EýW€ÒøM˜ÎÜLŽÃqY¾õe$»YðŽªIß´•þ*‡–ïåŽBnfG\†&3 áÊ~#OˆšoˆÄ§SY £¸g%®'&•Ì>Q™eÜ"Y””‘,޹·°Œ3üeº %¶‡ã³®¥x·[Žã› cöŽA¯j~bƒƒ*öíaQÚÏïºz_Çåôj·¬Æ­Ó­¬?Ìä:Ø«”S•QéS{¼KÝùªQzö‚öa8ZwTØ*²bL–›ïQÅ}c&¯æŒÓœg!{Ó)³V0ñêšE¥ÚŒ˜õ3läÈÐ8cÿ•õlEÁþò3.J•øfÐ~´PÅ*…9 ÿ]@^9Œ`‹–†‰¶SÛEE‰4!-'ÍPpe^ݯì*{Yý÷N‹Zí£ ­:‚¢YM‡sø±TzTÞï÷†GùZcÿªþÞwƒjl­¥Y‰“µN4¸îc¼NdfH³Ä4]ѵ¸­à|®zÜI¦©’z’â¥ê—klÜ‚Sm ÓÆ1÷ZsŒ^6pì¢>QÞn·&XÖ;5–ÜI­¬‚B"íN–'Å<Ù I%gzMêÏ2‰¬M£ÊÓ.–6l䜋O=AÁ•{v¿°©í§é½7/ãvŒžŒ¯j1ûE´¹ñ“&:ÒhUO¤ÎîñxKÇàØ9¯ƒ"e,k3‰V0÷AÉÆ1*ØÎ½QR£TDˆ¾!"µ‰cðõpDd´…0KK¸•[ê…Á¯Wâ 3)%=Ethí0ÙcÍŽÁ°p°ê¡«iöXKHqä°‰v¯X- D@·6G$åÞmý°¥˜»9AÁ•{v¿°¨ídþr:k餤ŒÎ¨¨îhfs1ybê=*ow†ûÉ ØãcŒqŽ1Æ8ÇãcŒqŽ1Æ8ÇãJií¹UèÆ }ã #õαjoZÿÒ§´”Jv®%ûFKt#}T/–VyÆQnWömÝm;·Ž™—ñ‰H4‹êvîêê%I‚òÉ«(´¿œ'\æ{ üó4$%#hØ6£hÚ6£hÚ6£hÚ6£h¶œ™R&ÂjÂ=uü¬ ξtkXªÑ%:è™p˜ÑN¹¼$µÕÑ%ãœpí(Ö[ÿo‚Ær}³NÍùÆC"Šäº8­Íaˆ8ãËaM€÷N I‰P”¡hÞ;!3ê-§V©Ëù‰´/EÀ𬕠!§Ñ ÓéÓéÈŸqR| !²l†MJ›ºÌ)Ÿ‰Î…˜þ+a´¢ [„ÙïzÅÈ­BEœ•²[÷' Ä×6\lS‹ ¦nš:ÉP<õZCíî"‡©Çga%’6…$)Ú;ɰ”¤}†HÞÉ¥ñ™=S–ã’N)lª›•<+(Tøe„0“Ìb¶k¾!µÅ# Æ$˜‰-pÝ-©ióŒA¶F8`†ƒ@iÁ°AØä’ ËøM˜i«RÁ¼½ÄŒ‹Šº$ÇZ|2LÊ·g"ËfåÖT¯ÑX•¿;ì4 ŸNƒA§ÙË’¢µ)ᾤ¥Mnf{–y éu®ÂëM‹Hs­Ò…§Uo¬Rë«}ÊÔï›JdLQC¼®ÅÇÍa¦[`¿ÖÉ`·Æá¡ØL$?´“=Ò­šCeY?)y®‡6NEiôVIèR˜›Ò T詟µ¿š#l~òUej+#¯1šø•Ù93,Qºø‹\Ä1e…ÕØ†º`žZÊÈôðþ›œ5”–:vdä èõqÿØd˜«ùTªlz¾ºÿÄ0!1"A 0Q#2@aBPq±ÁðÿÚ?ÿ" ᮀ@¤#ú@¥Ff›X5»¶ bÈÈŠ’ýGé+‘œœîç.ÿ1×î'>²qÌ«âBÛ?dgŸñyª²›kVNÏÌJú•ó‰V’š™¨Ìa±ùy‹Mw [DeÄŒ“l ¶Ñûm‡^A”éWx¼ŒÇ÷ú¯©W´/±„µ3Ô¯Ö3)ê7´oÆ#U<1jóbûCPÃTðÁL5,4Ï ÙX—;XrßEBþ§ê=‰B˯kÓé¾¥^Ñ;í2³¹vžâ–cØÿ̧¨{ö%€ŽDÝýá\/3nŽw.a!D!ñº'¨NIiÊrÝG™`†*—8YF‘jõ?&_ª Àî;—9o¨Jú•{N¬Î×Þ%‹¸JA˜}¡ìF| Èæ3îX„mÄ'ŒGêoy•œsÃf3dq¸ûG¼´Ê¨k¦¦–5¯™~¯<'ؾ¥^ѨBAàÊ[#a‹ÁíÆa¶y§–y§–y§”O4òæy6ñ<¢5’­1³ÔýG±)XÇqÏÙZ5T?IßûÿÔ݃ÜßÌ‚6£ž#¸À;ÍÓtÝ7MÓtÝ)Csì©·™ª§Ê¹ÅÜÇh”é…~§î_ª Àîh¿y˜¿1ô–‡ ~—ÃHo²­ˆš£íÝ7E|O,6fö49óŒ|™½„»OµÅˆeú²Ü'Ëá½·É”8ÚÓUJÐûTýœÌüó3öt·;d‰úű}6"Öw|þ@ÌgTš_¯fâ¾ïú1 …؃Æä~j̇+׳ù±ÿÄC !1A"Qaq±ÁÑ #02r‘áð3456@¡BR¢²Â%bcƒÿÚ?ðÜ_ÃqÕ-ËI" ’F地T‚ ‰a*¿êaõça*„ÄvuëpϘC¥±8Õ€Í /á qM,Û^Ò½~–Ó1›”µâݰ?HDX|-+>[tˆîÜ‚ââþEü*u´*Çå©D‚Ä£Ë6œIÛ‰¿ë,ÒdVð¯`|rhâۀζ}‚yÈ Ê‹1³ój"øÛ~¿A_a*$T£úª=t#umPãšÜdÿj„刣þDõŒýƒo‘i>D8I’A/i¹ˆhíYÊÍyé Ù«2.ŒI5¹3Ÿ¥½ü¤}${~¹ÆŒÓ×Káq—¹Ecå+d4R”ËŠz£ ±YFI#æßÜ!éSu:Š©¦ÞY‘-¹¾" ¦´V®™¢èYE¸÷û…Z£â¸ª˜´ß ¿s°nR4ƪÒ“JFjèå¿N2M…‰;í‘|Åv˜ßáÍ£²3.žRå!w óÍÇA¸é؈TknÎóQø¨ýϸ…2йZ²OÖÎðÄvã#eo){Ÿ\†›ýÁžžÁ¤¥ŠŒÉ{=CGÝmä9J•ê8YsÖcG\TWÞ Îß{tüË2\Ö¢ŽÃ\‹"þ• åÔû ê ïåÛÓþCèø¬¢È½Bçþovïˆnt*ö¾æE—O9{ÆR\¤VÝe͘ÇÊX’+²ƒ_)m ¾d܆Ró{CEêM Þ§ºvj=…¼ÄØÓê ¢cûbKwx¦ÐÉ¿9#áÞ6ykØ$úä4ßî ôö OûS%ìõ¡H2Zv­ æEj·í±+°ýÇõÒIè©ÐãÉNõ•úpªâq_G_ðOQ9)mêõªÃ²×;['… ²uXy.v Fq…chÍ'ÍR$8x–³3é0pÍy«0QÜIY&`àï‰ N,̺L†ÞcìÖiè;²¹\u«=îR’B\Qs˜&Ýtîê]'q:²˜×f&jåÜ]æ"Á~{¦{Lö™öòM!(-Þ…bB8Ä+:Šƒ ´Ž9–ì»EfC`¶†VG°>±ÔØúý†‘aa„aô5HPh›%X#G”Û¾xòS×Ã%çÚ)-»Â²+xt¥8I°fÏ,’4y† Ž2¿bïDEbýF¤XŒ)´(°¨ƒl¶×¨^¶‡K Êá¨í3öi· ÿÄI !A1Q±"2Baqt‘ #@Rbs‚¡²³Ñ034CPr’Á$S“Òð5`£ÂñáÿÚ?ÿt-Ç–Û@´¥¨Ð®ÎDfëÇuL{ÒžÃd©ÿÀßöÂV¹¶æR>íÖSdþ &_(¤dÉš}bÕàUv³ÁÆãÛøÛY‡i Lž'›OXպ˰@rŒ‡”In””ufúÿ/åÙ«ñ©™×ͧ_YYääƒvèªë~¸C­,¶â ¤­&„q'>‹³í…8ªÄuøªÜqa  ZR”hõø\þØK2óEÇÁµŠöˆþ1ÐÂNƒ§Ù@Ê o›X¤w®Ë?>ófÊ‚P¥PóbUìóAVj/ëç‹S—¡E’¢;!Rò3Y÷R›e9µ&î±ËãìÒ8V`¾ÚVä–ƒoˆa¶œp٩ĦұuT›Jû‰Í¯°®C¹ °¥ ¸•x&Ú;ú:›„.M’BÅÖÎ<Ñi*¾àǿʽßpÄ·£NÈ[ë@.ªV)妨A­oQ½G”ÂÛXÜoÐc¹ß?ÆIø'+ÆUw™g§½¶ͱ]7Á$Y^‚!Þ€~ ñŒ°¹efÞTÊZÓ¤&2̃…N§0œÛ|#là6ÄŒÔÄ”ÃhmÍòŠn‚…rÒÁ9¶ÏÔV±>ãõ9‡<Vš)¸ÿKWºŸ¢S®`+di1@K, IÛát몜a®å,rÖa-£@ïò¯EwÜ1-èÓ²¥Ñ7,¥Ø@Z—DéUú!+e4@Óó‰|¡÷ ð3Í8õ@ ÔwrÇO{l[rѪÁP´#‚ 9ÐÄ1•²t䢖y%¶¡K+ f‘EkƪݨÀ[©!ÑpZM.„äùfM¢3–U}7&ëKÖi¯€Ÿ¡ o—²;¡OoÞ«É›— Ë”Ÿ%P™ÙڲϬWÏ m¤ÛN„§è2¯EwÝ1-èÓ²ê‡]G ¨ûbÒwÍ­5¸‡s|¢ɯª³wxÍñNîXéïm†ýhwžèâË-)²k8êíÌ`-*ñ¿u#®(È-£ËV˜™²…¨.€ª,\GÝâbc%¼ÝžìF«ÂÑSÙK^Îþ¤ÐA6S¯\U{ÔjŽçmÒ×ë5AI4ikõˆ IªN‚;ï´³úÄÛ¨ršlª»ªZÔ„Š’p?7š¦zÛ„i³SX+i°âTo%H<Ôo~½XCòËU ˆ)ºJÓGYQBÐq†çÚ£/4 ¶È¡"S(4(—Ñ[>IÐGQ¨ïj£~¨³§RZY´¼#R5à"ö*:OÑå^Šï¸b[ѧd5Õ‘[aöíQÆ]%’°—SÇÃR±¦ÈðgEuCÙ!Õo˜ß²N-Ÿ–æWéÎ톽m°ï<9ÐOÄ댳m ¥  0‰gžbËHµU[O’y{鎯tn9(³¾FýØûvÄÏ£VÍÉ"tæS³r®-(q¤TŽòz¸Xÿ¶ê¤oŽuQfžËÖb©ÑÜ"á¹/•šMž êkÀî0µw,éM—tjèý=áJ/V½Phy×[¼â`;3T§V&P”ŒÒe^Šï¸b[ѧd5Õ>‘[bs(0šÌÉÏ8ª2(›Bv¼÷¤êVh ø¾Ê }t±µO)›J4BM”{LUÍê<˜ ´“ÕnÑnêÀ}6Uè®û†%½vC\ɉŸH­±”zs›Éh—wÃK©ê„¬ðø+ç×íê¡ì’áÞ»-ÍŠc+tçvÃ>¾Øwžè'â«`‰O[Ý;™æ’»§@☭/.Ù ºÒ”p–šHCi¸õl‡R ’ÂÄ8ÁàŽ 8ˆš“Qûµ)¾ËÇùË%|æŸdiI8òC‹^ºÂlç«h zᧇU Ãnþtƒ"'3̶õ›Î$i€´É°•&ðCB¢5C}Ц…öP¬f³*ÍY³bÈ¥5BË žV‘ÜRœàØh¡‹‰k†Œa¹¹fë!3xG¬Sư҃„!Rµe(U{£EžnXi…¼©—šZ8ò˜´£mÈ®„yX²Ø¿'éò¯EwÜ1-èÓ²ê‰H­±”zs›™ûd±Î²uù½(C‡ê^WÉ q¶0ÎöfYYÄ~â'¦²™[”Õ[á¯[l;ù¡Î‚~ ‡ú¶”õ½Ó¸eÇ÷,iŒï ¥ -?¼$…$Þ‡ú¶Bý Ú L oÚÓÊŸó÷Š‹Œ”Pâ6Ú½bP¦ñ› ë`b&a<'»=êÚ9áÞ­–Zq ­Z3•¡­–ýJùGÖË~¥|¡×Vô³à¢Ïr¤{9;ÉÆ«¿±©B™ž†tØã*Ī,¦íè‹-öÆvb¡±T¤YHÀx†Uè®û†%½vC^¬LzEmŒ£ÓœØÅÑ4’ž6ÐpK˜ˆ²¯¬oz®Q‹x+O<:ÁZíÓT7ëm‡49ÐOÄ1êû¢$ýotÅõ‹›ŽwNöað%7µ«ÿ°¦]M‡r“MÏ«Yðj®ƒª¯&Á §òNÑ"¢kîÎù– ñ(• ¥L$êÁ´’©rw®|áA§¬%W”Á%VÜTwlÚ,9÷m)å;“X¥¥ŽP`¸‡…èªM!”©Å,éW$¦V¤Ü¤§– ªx"îŠÓXm¼U\+wdOÓ@ÍÿÛrøÍ3¿pà#?6«kÁLœ»Î€›J±¦3“-ë‡jŒšRedDÊÊézkCZè»Ä²¯EwÝ1-èÓ²õb`ëq[c(ô÷6'qémðÚ_’±¢êÒR´œÛí‘CÊ ŠÔr¹00Rn"æVØwžè'â.>͵&Ú†Ã}‰{§AÎ(þñiöÊ)Ã#d!ÔKⓜ^žÝÌäÃ6×K5´EÝP‡—)Z  sŠÓÛž•eÕkZ‹lJ²ÊéKM ¸3ì6õ4[Mi`–þ’a(BBP‘@‘ A •(|Åì‹LK! ò´žÓ»eæòA­MaN™@wz…”ŠÓM…:”QIÐmi~Uñœ~Y*_” I<ôÓeÿ‘_8´%¬àµÂa(BB‘@.*£©k“ŠðRñÒ£Q¶äN¸¯æÙtZóé¹!6àHqöê‚tT¦¾#•z+¾é‰oF×T;ùŒežæÄî§(·t¤ò¬<.`zïöÁ—Uênôò¦3£Fƒ úÐïæ‡:øƒÅ2niµ¬UiÞŠßu?x-Ì´¶RฬD™ó7W“|[t–¥õbbÃ#6ØÆ,·ÛǪ”{LN8›§–¡Û;¨i iKS¦Ëa¶Ž¡rvóÎÊ·JZ ¥|G*ôW}ÃÞ; #>ÒB|ÛâÑ5­õŒ£ÓÜØÙ™'.K© W’p=±›}%¹ÙEXq ÿ1J7È>Èu®;+(0âð*4æ­Ðç@?x¢YjŠm»í Á0¦^M¤*;ŽjÓù5w§“š1*ê^iXˆ¾ÓBÛ„ÜgæÍ·0F-;r|˜°€y„»¾^¬9iÅ$TŠši<8 9«>tIÙ¯sɸ—ÖyA¨•§Añ¢ÃI¶ë’î! ÖJM!†œÉYAHAR¥È•Û[ê)F¢3C'ÍLÇ–jÚbiS2îK¦Öê袬РhïÊò2ê˜4ÍL´Ðª”8ªüå…!y*)…Þ@•5\N‰<“>s­€¶ÖÁ¶ÙÁTA‘r:)‡ç‘™”`Jf«0ÝŠªØ7vx’%‚¬µbÙÌh‹·nž;æÏ,2£f´q…pUÁÑXÄ‚–ü#Ç„³&Û†95à#z/ÄÂRƒJã ç…>‚V®Tã‰J|Ûà4Ц$âaiMAñ>O ·d[¥-Rÿ—v¼4Ù§7þ÷•&øs+6É (ïÓæ†Wh¥§mÊj1e®Ø¶õRX˜ H ÒúŸl[Ð}74n[EãŒqVÕÎ1‡0ȼ¶š“]ùíÝÍ´-¸tù³œ{ŠŒUÞ‘ ™e+NúÞdh¯ínï—³uFeà§ø²è½gå ª`Ø`+Á° „sw¨Íq*V¡øtÑ|YrÞƒ«diŒÛzuê‚ÝÅF<· WIöLܜš˜oÀ2LL)5Lo2c#ó8L¡äI àÂh{aN8²âÕ¥J5&°‘º–ÛÜUÁ"¹—)­¤|â¡-4H§áÞ„9u*¤ßÛíÉw)@+i>ßœXÒ¸Ëׄ'YŠZ¯,Q0¹y³‡Žµ%âOøaܰ¥·]òS/d‘ÏhÇÚ§ÿ¨ìµOÿQÙ óÓ=‚²´Žª °fåòƒsIi ZÒ¦ÊpÃMa7îfX¹#†áÐ m;åñÜ¥êüAÙ‰…†™lZRŒwD­Nø¦Æ"*ñͧV1àÑ”tÀ£FQC+D{4G‡Êkq¬RÛVUÛS²-*Þm¤ö“¬÷ÎL˼¹)‡/U‘iâi¯®)©mâjÉí©ŒÌ³a¦ëZi¿ñµ57™Émߘg„áå1š‘–K#‰ç>7ÿÄ*!1AQaq ‘¡ð0@±ÁÑáPñÿÚ?!ðܾ7/Ë—._ý;—.\¹|n\¹rþáóPÅ©txa­WRá•Ø{Y•­àbðÍeá߸aÚ!аp Ò³£Ë_l±‡‹ ‹—x$’?oÌÆ`k`k§JÇCH)Ô¤…ÌUWÜ«É*©v³YG`ëðZñÛà¾ÛR•-¥ŠÑ@^"éb_N µ:Bô¦l ¢0ц­ át Þ¾¨„_ Ô†C•W@‰Òc3zÙ¥Ô ™›ACŸdgžÛv³éRšWpÕÄ·†ðt¤›}ÂÁfŽpãYvxl¥ª›ÆÀe…ÔGÎ\EqAlGÁƒà¹råË—á¹rü_¡G/I‹tÔ)£qd‚.l^ú9»ó ‡ùÂÝš!¢.MŠäŸM»0)PÐ÷ )ï4«99>Áµ> ’$HE-káÚk˜°:YzÀH™û‰ï¡¸£s9=Æ\GƒÖ<9±ÖP_‹iÅ-cm|2“Ë—.\¹|._ —/ǘ–é¦Ï]<ãZÅÎ \ÍNÈ2*âã‹éW7«*u½zA|¨mŠ%ô´úÕÕ1íÖõΫyxêY«÷‰y˜‘‹9s—ÕÏwâÇG(ø.H’½êÀÁJTe[t×Îhs„Ütý?ò ­P-Ûë0K Àá&ž/9f€ÀA™VÜuàÄb/—ÂC…rø4‹—/%¬BïQžÕ;ÉÝ]Ýã­^b?.ÊmÚ5³þ¹x'@[/–žÿEÃ=žèÊõ“¥Ñ)¨”} ‰mÑŸa4P(< fŽ%_É=”éåN¹Yç¤0)äÀI«jý4˜Kýq¿žÇŽ î—ï @ªcO‡kÀ¼îÂMâgpÆ ö­r§>Y#4>E—È€;Åv6—WÁ˜3ªÊËlH˜Ç s‹v¹îñ½0j³i0ïì—O¿ž^ñ"“i›ýZ0ßsJæõñ1š8Ä|' e𲙋-ÝðYŸYO¾?oM}e¶êš<µò€ ‹‰ªù]"©Ë:c62}céãˆñ}ƒ ÔâO€~à‡5¢Ä†œÖ¥ˆ8Ih±8'\ïâÊ¿3¶¢©éÇVbž 2¬Çí3Ð×ç5•23Ù)<äÐF³È:&†\É¥Õ‘t\-Åd§&òŽXì´êк,¬Õø{y¬¢²ìð2A¡Ø—ð­Ëø,Î*ñáŒÑÆ#à¹'¶ŸŽæêÉ”ˆ€-ä Há­¿Q9ó,ÓÌûôâ.ï£%|-žÑ±q7fóXа0[Tñhëç`ƒìÖw.l¯/²&§þÈÑÔU•ôά•ʬu8 —žðàTàÈ› üÂTÕïg¨d?ËPLíð×­Ï„-SØOÄ'‘ÀG(ðm0Þ³NKP/€d›û!ÉéÔýC¹s\˲9¿Ì&<€Ðc4qˆø.H=)+KmͨþÁŸ'œÏŸΞ’ÓRŽûžrÃÝ}Ú’›íÒ<ǧKÑ 1ˆ[³1šÕi£©G¼ <‹‘éšy…ªÀ?ÆlÚ^òÜù®×¶PåÈκÇsÇ--…¸¦]†×Ú ̲u½Ÿ šý¡%h.^Ø †ê¢ô͆ÇwjãØØ„Å9÷Œ•9¨~@¨yÝ V•L³äˆÍ’·6ès,uïÉýJ£K9–ŸRcÿ Ën㯠ØÅ'äOgeаìèZ¸·y¯äpËÀj„âÉô‹£ŒGÁrpÁsA2Xàd"›#Û;ÏÐS:y¥ ¥èrw>sX^ŸŠµõáô$¦-/{¹îiÊ& ’cÙžæá ÓïÌ~úù£­‰Îø„Z&jøsþÍ  uÏQámÿ4Ê2‹‚”Ìåg™Héçüÿ!¾e¹FÇ`¼ÛÙËkŠÝV6˜&džý³µnõÅŠ¢gh¹â B‘Þm®MæÛË'”0 ÁŽìn"h ÌÇnF;`¼ó¤DˆóYk u5ä;Tì™ÈU³,¯ÇqŽˆZ®X›c&·õ $òs~mÄ©Db?­­fU«YøK:³§]*%8qymKëF2ð®fº ·hÿ9.9 ê{ŒÆ]×)W€³Û]¡š ú¬fŽ1_É=¼#Ý,‰BíWi­ÒöäôX¨üÈ lïP C}PmÒLâÊnr¦éÑvŠØ‹ÂÍô¬G 4X/)‡æ9Å:j Žc² Q5嬎l ¡µÐlÃX5jú‘‰G+œÜ8yµ«Ÿ.ýBh †Ô…Œb‘°~ˆ')2ÊýFUè!t÷búrä!GCTçq5P«Ç>³¸ß| ¸:`Ô†°e{â²ÛF‹ÖP>d$­@"â1‚aá^^»yòí LÉ*#:Œ(ìúYò7b +Óû€ÔΚÏð‚Œ '2ÒÐCj¼Ë+Ú ./]eµMy„‹ŸY‡B7©=XÂr–´nÑñ´Y4†/´aƒƒœÙgdlð—VK^ú'›"×»^”£G7FÑe´lU=¢‡uê-KQÞ¡c™I›š¸Zi¾¥ð*T®%J•+‚¥J•-¸Œ èÏLiþEI\(¨‡’UAº÷1³Ö6šõû”ƒä+·hçâÞ„ …_±oueÎ7Q-M¶ùŒ5,X^rÞ{4T¢¹ËÕæÆÓ nÿ õÒY·ô˜J¬±®~:)KÈ[°å~@à©R¥J•+Nj\zZïçi àµ†›C¦„LŽZ@ådoÞòi„Q¿Î±’ó›{°âÁÅåÊú²–®mq›©jƒÔÁ…ÐüÞ(°š¸úþk„¡ÄR©G¼¢ØâFµ(Âm€ð.¢BpãO‘Êô7e“†Ýž|ã+õ¢ö»è½ b6Í  *<›=¿&UV„b¿w¬H<#¶£l<•þýz‰<Š•*W€T¯±R Š)?wŽ4Ë /]ƒœ¾cÛwþGj»ïšÉ↓-l&âhzMQ_É7;…5'ºÇåWp;Ï=ÑíÀ Xˆ­ÝXV/›ÑßkÖ)yl0¼ñö5*Wûƒ[7AÓQå5 s¯*e§DÏ”ÕK®ÒÇ {k(%*ŠÊr½ÓE hj;5v™CÖžÏJ™«ÙŒÙw²TyK«*­Îu­¹à‘¢ Z¥Öšÿav7ì(Õeõé–¿è*P§€Šr©Åu,̇ÎEŽ–58hîÖ¯c šÒ7,Â3Ì ]£Tu|OÔ0¶ÙqmÐÕÜÂiß• =!KåR¥j«—ÏmÿEm8>ambX‡ÓϾ?wÿÚ ó‰¸ð©³ío<óÏ<óÏ<㯼óÏ<óÏ<𘿚Nj‘>¼óÏ<óÏ<ø¬¾óÏ<óÍ< ˜švöi^q2góÏ<óíÖ*ÿÓ…|óÏ<ðÎ|'ÖwÀ—<óÏ<òЉ[­ŒÇüóÏ<óË 3Ï 3Ï<óÏ<ò…λÏ?7Ï<óÏ<ÿÄ(1!AQaq ¡±ÁÑ0@á‘ðÿÚ?ãR¸Ô¯Ú¾#ˆKb±IGì fÀ·•óqzË–ë4éôÞoMi¦_@Xê.NŽPÀ­V¥ë›ø•18T©^ â„íã¬yMÐÁÉ2^kÉyìÉ0õéÇ85ö„å+—"ò[q¿³QßsÏ?ì®kIe믬h lA–ŠËED%¢2ñdl©@Š4 Ó…~|5ƒM݈!dêÓdÇmÇ|ج](Ð7%`s[-bhqÎeí0ì‚'vUÕÔzí($ïÑÜŸ?¼Ô÷^ˆ¾±!\_©/Ë„M ð•(=e—¸ñ¬ÓäÝú”S@Á¬rxs™{L{ -ËòäùDm£Üÿ¬èÍiôÿG¨O“ÞzÒ6®§¼Í&„ QµÖËÐs‚zJTùK d€vìªàß`µCY[À0­edØû›™ì–jßs/id»=å'Gáøÿ!Þoèÿ!:ù™÷‘Óu=à*ËCCr„¢°ô—UJªÞòC~Hn·¬e™c(æÝ¦0™[ó‰||þ¢Þ¯9—´Ç²k}à®&#e?áó=a°c«õ ,ÁsfT(š1*æ¸ê† ¹ub¢™ Ö“bù7~¥k€Š¯wðç5Ä MsHÛ£5Îh"¡ìöþ}ÂԢشI­------¥\ÂûWË CN>¥Úí(µ}ܽÕöBµÖ³/†^Ú߯™ñ_€eQ`Q¢ÿÀy7Ú¾ëƒÞüJš›oßù,4Î|§n BÆk:õ;þ®K—-øŠnY]a`ë+„«S‰‡xÅ(#o|Ýú÷ëV¿°URÙ.ogÁLüÿÄ)!1AQaq‘ 0¡±ÁðÑ@áñÿÚ?ø\L ¹rþ¥JúkP%Ç7ÀMÄw ÃééTLkí¨ZÅZßââY…–:¼ï{ßLI%2¼YD±wéæ["ÀaFÁ|Ô¢Ì4—))).\¹IM ·ÁùV€\,)¥ÈºÇV¯†¸ºdÛä›Õ?1qmÁO²$%ºëP(ÁzÓ¸YŠô¿¾m®'!zBÌ5gê!‹U¸-„n4nr“¿Ìå& ÎRn+™Y$ÇûÞ£v›ê¯hî[äg.@wóòçÑéÏ€àîâUÊ€÷ßSŠã£¢Uayz¤×p·?-÷gæwdÃ)À«Ã•ÔS™RtGb)é6ãô˜Zòpÿs‰šCv¢[ gñL»wŠ•²Ì[‹\¥À\f2ÆÊ Rŕѫíož@`²ù„„=š‰ˆE§†·LïMdt€ræbÜå/`â }ß/1Yéçà=zFì®ï°6·vü×ÝŸ™ýÝ‘ ¦~p³ÔÄN‚œ t*:€æ œ8Noº»ð±|3¨ã%† ­ÓmùUz˜n†å&H¦7£woªPbÜ`z‡¾Ui‰@xT}·dYV#¨Ù~žâC^‡¶º[jÚ¥Ý&jŒ•ª4À‚-tX- r–Õ ÷ qh`'R(Œ/¥Á˜e¡0&­Av ™Œ Ìª®›rýÛ¸ÑI(‚Ê],µ;âWGˆu÷—ûíÌ}½yÑÿßrPùÿ½ßx³î÷^_žû³ó?»²$Ò3Y‡¸³¸Ðè—5¼…µ‡Å^µŽ‘_jnh,ö`é´YÈiÛ¡eì¨Þ±ª{”X³H<‘4»Z¬¡æœ"p)™¢F=J¯PSï‹"u§ ÷/' ÍÈÅGq.¹iŠ á.éhh,‹h4Z U¦”0êÖø€ÕJ\†iâõ_zâe€ˆ†üËÕ¥êVdõŒa=x—®9rE«ÆÎè@†—€îú[ˆ” ì!t×'­»8ÐáÛ¿û9ñ®·}{çæwd³û°˜SK<“¸è}Ü Ñ½ ½±€Çì쟢Jv"°ºªÅj±)Ø C ]WiÀ ´ª{”Á!…Zn­uy¨ÕŠêæ(8".½ê‡²Ô ÔHîyi#]P–\]ÍÈ<Dê~K xwþÍ󨑼íWã¤ÒQb£ô’ÆzŸ™Y(²b®°Þ%Çê_¤&„‘u’³äÃìB r¨¡,i)°NÓUQʰñB,•µ;±ñ.ÄìJ7)ƒ•Ô»ëFîΚ+¿´r|ô:=9êx!'«¯çޱt•ô>ÿú&úâ¾zø~Þ—¥Ë². ©—ÖP »¬ùh—v}Ek€;ýd¶ TµÃJcü”äÁ¥N êÔ3WÍŒÚéæŸ«Žáì—¡¿ðw`¸…P»*ŽäãOk„{r÷röטQ*îŸÔÅ”zʱ?¾Üé˜7š³]À룗<ð|èbHBYX} <-öqYñǬ> s‡}ºžÐ GÑÆx;ãAÓ:°àö¿‹yÇn`¡ ÿ‘x·r–SÄ´¤øÔ@ïPO<ûýÿÄ*!1AQaq 0‘@¡±ÁÑáðPñÿÚ?úËe¾¥ý`ý©q†Y¬$ú}ó߃_¦BÊÍr°ª@`Ÿ«[°h¨®Ohë&”X‰“\dÒaÃ6#Ãâ `Ôä]–-ž*'j"öS—èÖ¢úÃ9‰î¸l¾ÍŽe{€»†ó-ƒpkôµ–yâ ªÕ‘¯RP»ÕB(ÅàÍjaÊ(ˆ©^+Ãô~¶ú%W™W5 w p™g2þ`¤•ÞeÏ$³™ufY–n?H£ê!¥­YpÂŒÑMú;h¸I@¹,SíFpVFÄ€/UJ¬…ˆýÕÁ'Ðê:Љ@ ‹W€ªÐË\‘nôƒz''¨Ô´$ºDdaD!sÀÆr€-P.`f\nnUy‰ÆÃf­F ª :A±èؤçÞejx)xØsBræÁ¡¼ë Xð2zßÖß­×Ð,õÓYì¸s kÅ”…Æ{‡P4µJ«lˆP¾ÁÃNº«òdÃè^D#t¦Ö“í‰0µh"HƇ\Œã·|AkmÇƒÜÆ×± 'çÕסa” ÆÞÃÑ (_8S…ZЏ…Ù¢ j3EŸª&JiM[`::­¥W$¨Ìù@æ žÖP ég@LêÑv,º_Íž%›Ã;+2à–$¹aõž‹Kú} NU X6Õz¡yqGém­Æ-ðB24bEÃÒ•™ìÔ­å¥Ý¡÷¢›šPùylr€Pà~ÄÆ½`Ǭ~hÁN°DZ)Ä:élµ9WÝõÓаÌ«èlJŽÑ736dG*P<±ˆTªY·2y¼$6–è†b憊…`¸QzAb&ÆeŽb·žã4¡tJiCųœ¯¼²MÂf!&åõ̯rÀ¼À¼Ày„ËHGp=Ëa$¶'ˆ"HQů ¿ÚÖ¿/ÿ'ˆ³9\óNO Ë£¦‘Ö1pó2ë´KUm¯@äÏ ¥Ûñƒ^o.>Í4ÂPü‹ú—’ÁÉâTNdï=:xŽ=Š…ÁÞpåñ îΜà£I¬Ý5cô\7à_Zp “ÀUáa\Xl¥KälNý Ì…¶{ £“ r$r‰]Ó>ÌÂè.Û;’ÁÌvðZÄ?©W÷þĺDÀÌÕ™«3Faç*æÌóGÏÒ÷Ï$˜ÀÄʹ€s÷¸/3ÏÜèšmò ü±JÀÂǹ±ñ`ž1bþ"‘tÿiåÏ‚¹ln6혫í þÛ[«XÆå<FJ‰k"+F_P:{UE;Nî„Ùò_ˆbFøn“÷\t7@tÿ¤ (×Ó¤Önš>½C;£?äŽÖ­åÊuk@¿`vrfI…`eã|¯ÃÊ Ãg/¨2é´ÜE¼X xDeÛEo"(æ‹ùD¶¶Ó~Ér˜å’Â[t&×¢:…Gã<±˜ Ü ÜÝ™U#Íp%‹fùŒøS¼Q"ÄL"suŒZ« "“çüÐlè¢Eˆ›o0* ÎfìÁº¦_Yr½ÕÙ«§ðÁyܤ¹~B‡ ûAKEmKát]j^Þ*Ö÷lýåž'!ù42+íý uD¬ ¸Óñj°EEéÂ>Ó>†@pF©m¥.3lõdaa>– Q™VmNßù‡uà¾îa2ìÂ!JÓ߃Áõé5›¦¯PÚ[cO¼§äFW6¢¨ˆ‹œ˜ áÍv7Ì/í"È…Þë(x3¹xtµrÏ-o`E†âµïøR…Ÿ'ºX|ÏÄt’®¨M–Øšâ,GªNî Áƒ™_3^a†æ Ï,XFÌ\A ƒÜWmZoŒSȸ˜„‡+s1ø';T}ùš0½ !€…ˆéAçÉF;ODןðO,«˜Î©ãeEÝͨÀ1Ž©›­½ò²Ù"èr0M^erÁÀ¯32ÀXH*ì'•wÔl€£fÀg¦ 0Óÿ³y9g±çßS,S‘·kËâb†wø >| ±¤Önš>½CT)þÙàÓj1ÆZ}°¹B’àV¶±eáÚnéÄz9¯ñ‹<„pÅ‹±3T®wŒe “ç⋤á4œ"Ekÿu– «î! p[úô ’ìf¤GX!gõR˜ÖB³d`Ù¢%ñÈ£"<ÄÞM¬¢’¨Z`YeXÂ.hÁ€z-µÊÙAPLÙlÊ—@³w2K°ÒŠ@º^%q½`Z6Ñ«l¥.Ì"ZšL:rséFò(õŒuÐW˜»Ÿ@À±[æúËJlðâaX]CØ8°÷9(ôgm™¼ƒ *4hϲ+¾Ød‰RÂy#·ÇËÀ€´V#Tø•$­h¾âzW>'m›ñcŒn[áÂi±öq)Iô¸¿ñ[gÔ|Ö’Õ›5åb-âgÿ&0Å»¤–uî‹ú(}ŠÑhƒÜ4¥< L¨ >À²÷Q”ŒBì´Z(ÞóÀÚ«•UUjªª¬W~ˆR‚ƒ„E€Óʧjê- T EÒ’ÜØ+òb±ØT)Ä{¥Ÿ‘0ù ¸|]ÙípPY@¨uû;lªMÐe+S2~wzo ¼0F BÊ8µÇ˜†ÚêݾXzx«Â’ÕÒëtu›•a`"œÅb„ôGÄ;?r0JàùeB€º]w¬kø0ªÄÉ[€-¶ØX-\-[b+HôÀ1ÃñfrÍ’á¦ÈÆ”Saö‰x—¥\ÂoL†}‡ÄxeZlû_¹ª”–¥%¬C$_òŽh<bÃZƒ£Áæâ#ø é‹åëÁ·¤Önš>½C+\kŽ×Ѧ^“1[ÓH ØÀš—×îóÙM’ðøeì1~|K*àm H" mOaHÜTt¶mÑûÁqQ¢·ÂË*4£‘àÁµ+‹„+צ[Ä×]ò˜¢–,Cˆ‰9èrò;ÉåIoY ŠYø±…,á{;ü3U®›Êÿˆö׈¢SŠ ÂѯMYe1›Á#’Uù´â·±wñ/™uÄzq8Tj/æ®7yÈý®¾%^$$ZdZX UÚ²´î‡†PIJÏ¢Ñ+±:]@âb ¢Y‘ÒLk)É_øJ›Ü^­¼Ýå•¢àòùL˜f{^P`^qý‰ŽÞ˜sI¬Ý4}z†ÿ ãÕ²÷8Âr»º“S€ÅUB^ܹ8÷½­Ü]^Ð+¿†}È.¸çÑþ@t!ÄÂæðB™Éï è(0ƒ£"â¥u¸¶-§ ôNÃaB:‰UIŠ5³±Å³]Œêψ‰„DQƒl“MakZa•Å9‰–î%KÇŽ.9AØ"rG«Àc•­—"×.u’-B*®iܯOÃèÕ…1§YÃVr ¨9*€mT)WEÝŸj+*Àðà#¦š˜…Ê(Y¼¥^/ ¨Ñ$.­U€Ôt­P*Qeƒ^£të¨X^ÄÆ ojÒdp%*%VÊÓ%¬°2"“hià¢ÒW•W˜…YjQU…po;†JJœ[â8Ùۉܩ¥»ðK«•fÙè?ÔGc7@iÙ5 ¥²†ô I˜>\âWÞ; ñ}Ý&³tÑõîOñ’›R]"ߤWŽ6¤q-°.>c†£XA ¦‡LËÄ$ºÇ¹q{¢î¦ &Áqçþ¥†«-Ê”Çñë€h O&K£S,9‡ ' ªRÎó) Z¤£H4‰Ü¼:•«-µï1…_ŽRYA¤IQ—ÁШ´ñr˜å¥ x:—êÅך ]]B¦%@`"eðà;ÂF¶ü*sà€öØU„†xeú„¼z ‚÷KÜ£6=ŠT‚álošË‰+áC…²c+[=äPp;É82JeFªØ¦Ôv­ü·ˆ—MÌ´´ÉjÊi) ™R€À`Y’Û`kòfy|ÐÛ“Úáá ºpèpó/óaªž–4€Ö _寞åT2h˜w(ЫUk¿»¤ÖhÃc£á•þÈ$¶$O£²Èµb"`ѪhŠo(ùAÙßmžÑê¥ %^Çpe£÷Ë‘×ûÊ$JF%‰ƒPõª°¤øGÂ&á7è‡Ô/p{Ò ”()V˜ÃÎ÷0D§ar™²Šò~e^ pEXàÅ·aoûîRe´Öxÿh”í4˜_¼Ô‡‡ÜxCÜTèIøBN |bâàŠ6`7½-T+3þRô.Jº·wOAÃ,BzhkyÆžH)bB:…åk‹¹…‰/5.¼I†F*rÈX(è‹Vr9FŽ„\!äŽHXÓ€2Ÿ™5ürÿa+3ï KáÖ Jø•ñ+â0JJįR²°0Ju s¸"¼·”·û†Þðû­wtù7˜«tl9\@ÚÊ‚øö¸ßƒÌ¨5^qâ¿q¢0}øð÷|j3Ö0aóûØ_„åóæ­ÅZu+ð£Ãú(9!Àÿ"Ru (·HF¸¸Ïkð×#„ì~멤°eãZ"U@X¡˜É¨Ø»«®#èÐZ=Pºl—¥3-‡ÂÄ¢ºiÎD2ùÜ’%:€-L]ÊN 3ˆ«q•ZÛQ!¨ô¡j]ˆMP%&O²)€ Ö,Ò²¨2”  :Œ®{pHMÕ±C+©Pbx¡ž§¶{g²{>ŸöOo§Û=±¸Øqò*š[mÕ@T,#ÐÚW ~ÇQEœÛAàVcåNóFšMÓ©nh¶ÿaá7ÑÐBä‹ C—̱»Tíýã¶À0НfÙ{)Æ&žã9ž.‚ Víù)Ì£múLyÈÇy—™Á¢æi‡ÙJ!iÙ§|Ì Ù{”V%Aˆá©oÛÄ%ÔL*‹jkV°ÇRšÄ`1+5$¦S)úÀ´¦Sè|÷†{eæñªÇk¿kаP4[,ϹãÁ¶r^½ê¨5j§tð÷Ø_ö…rE¿‘px„>¨è'>Щ+‚å: ïD$d’ã±k†‚\4jæž’Úá|Š56¥4Ÿ5e–4µ÷R –Ãvæ B“41Ô9Â`V½™gz”½AêQÇ¢£Ð+ïhä°I±”r ÚŽ£Bº˜ûáZ¿Ñæ)ôöþAÁ)™sßù^5 x¥ÌS"Ç,«UF H¥©øÎüÃBô0zàÐ`FšÑ\±¨g¼Úø¨Mzü! ª°dºsm”œ9[À¹¸•K`2·¨ ôeôÉ ÷Ö"qP‡e+ÁNnà$ùd‰™!ÿwœB–Vâ D҃̽ÁW"²"bÊ*è6{%®d@ùÒÉô`ß|~(*¶Cj²ÁA ?„ âYWÄD% ¢Ö•|àUp´L%G9¦@\akš ÐàûéôŠ•~Š}*Q+Ò˜ú ýáAïr¨¡”Å,‘H,‰j«PÖìq»UÁч®ò÷ˆ6^<Ÿ¼°Ò̤I(àÑ¡ÚFyhCI‹c—G©ƒKIˆr£AT(ä)Ff¾R‰ÄUL›Ep ]2üÙ¨ò²*´ºÂAE (Äù­Ó‚´Å­¯è¨”J%}5*Wèëë2~ë å`Þ\„†©_)o;“ø ´5ÎCå×Ä3:aGl›mÞS¦á 8¦—+ÅØ2—i´¼‰]}'•9P´µ²Io&õ6§-»,ÅÜéÉ“/_i ÿ :á­œ&€{ŒL%;g)“õÿÙ endstream endobj 5 0 obj <> stream xœíÁ  ÷Om7 ž s endstream endobj 6 0 obj 115 endobj 8 0 obj <> stream xœÝ[Moã6½ûWè\À.gH‰ ˆ7É¡· ôPôÖm ì^öï—R­Rñn:ÅÖIÍ{3œydԚﻯrŸ°±6ß¾ì~ÿ¥ù/žUÍ·vÇÓ®í}Ó úÐ5§¿š_ŸuîÛߌ ¦=Ž •¦¿fr‡VuÓ^ÊÒ©ÞŸêüa ßv2£z ¯ÇpwòãÓôçé·ÝÓi÷Y€…ƒÀ€8í]ƒZ¡oô„jCß[×"tŒáš²`'/ú!‚?Õ»SnØ® è‡ðØ½Žž†qéÅwIÅSÇÜÈQãa‡þé½|¦ý0Ž9ÌL0› ¦Ó¿y”[˜i¶˜j& ,§.Þ¤ÎWÃ}X"0ú€r¿ÕMÿÊPÕ=–‰ÂìïãA‰(œg­{ŠqÈå9„¦ÙcÏÞKÕ4û®#ËÞÇ"Lv¾‡¨sŒ×Ññ*† {Ûx“‹!ƒq¦ß÷#’«Lf…±H@çÝ—fCbvœÁEš¿l="("aÙ-'éIù“ ,­Ü}í qçø¿œ ̶#v%.´Ú5/]¦ Òg&&søç{°bwµ1¬Ìš"žÜ^#@O‹î¸Â³_ £”×j;t.%–­mÃê¸ý„—r{ŽøPDµÕ†¬—&s,%väš4Ÿ§þi"ô{P~Þ=N}ÎñxÕtžórÇ#·6v¯ˆíÆsnÉs)`g=S´våãùxüš„u‹”“]]—ä„‘ É$²J/¯ ú!3ÔÚ,¸ΔYÁ,·Å Ðnò]±‚À^—„ëPáX¡Žt=Lá.¥ :Ÿ(¡Ôœ3{žìã3õIœ£gc¶9÷¯ü¹”¿Õâ{Ô&ÁM)Q¦³Æ ÌÀBCôø¹û–·Ñ!”šâ¼¤tn²9*ë‚lmlßùŸàÅÚr[¬°&#"RÉ}– <&àÎá!Íæ2Ÿ‚Ê9!/ǼØd½Š*Ž¢:¨7¥GDð 2{Œ ÔsÈÖ0½N«³ú'`júËÒÌÀDØ£«â97¼Jé ñ„òÐdIBC>´^#–^¨6ŽY4oîÚÄ fÇŠ²zl´a"Y™?&Éõ#õV¬ªT(Ãɬå¼­¡åꙸL“¯é‡C+·SݘwÛµ@2k–€´½RmIyÓ©`ó +nÞ¯mñ7Cªr æùÀí¿Í«˜È¦‘"r2߯-íkyÒZÏ¡ÓÚxh^0{oóÂt\LË,øº$ûG|}'bWÕq~—,x-¾0D¶ù‚Àeµ°Äÿg/þ‡¼>Hx” ¯kúËàBeœc²5Ýàq(Õóæ\+#Ìl´‰0SÁ´žA$8CöàK¤œ´#Mί$ÚÃ"çè<´­8‚ÚàܼJŽÏ-¼M »Îçµ!IÕL˦,Ñ»/ÝZ‹ø4J,óI!§°>ëá㨠ýÝÒ¤L{eEÆ2 û kûR¤Ïঠ©íÚPU%E:f-^vSN‘k]‹ f`·_˜c×¹qˆMW·é 0¹×eßÄË…3L@¦Y:dñ©$/Äsíc)äCë¼ì’t:×suxïö…Û›,V¿Dœ7ïõè9å„°§/.ö¯–vÕyhvé^¹žÅþ«Sã͈U†“ÙfNÓsµ.Wâ›KÑ>ê„ùœLw®m±‡ê&¿9PuýšÙ¼D÷5—ã$qáì¼tØd%bóÕñ|ÇŒ(ãϬí3øÇb P† pº[ŠøXÅq­¦›'ÿ'Wµa,ï­°Ý+MžÄ=:áA\Ö„—P²8$*Ï×2T+ëR&É„+¯Å*f¡MVÙo L6­D£B¿Z)´VÛÿ?0^Ì Ë%->7ÿ6Lˆþ endstream endobj 9 0 obj 1448 endobj 11 0 obj <> stream xœå[K«ë6ÞçWd]H*iô°ÀNÎIÝ]8ÐE鮸‹ ½›þýJ#Ù–=’|žQrKÀ$Žm)ó}3šùFaG¾ÿw÷Ïž¹—æbo¬Øÿs÷ëOûoñ,Ûÿ{wzÞ™îØíPî†ç?ö?_Äž»wýÖó‡á½¸ ¦gb8ˆžKdrñ­°Ã÷Ìp3Àø­§sW1÷w­Üy¶?Ôh¤¬>ÚltLj‚wdFšàÐ>ç,óÔr5€¿é²HŠLê\ž—º5cnŽyU¼©·ñ6Æ%V«È¯§B*©ÆÐë7F åË ÙŸ†¨×%¶ÚFT—.­<©GxNi¡hÿí,s™ñ¦ ¥ +aÂÐ0w½¯Ñ“Š×y›Ïú(òT”l ®Db˜«¬òÒëÙmâ,,•±SJM‡:zõÊ)Ý»ÒÂ{bî±Í=ïUf¾…ØþQþOÐØæ“D;„ÆkÄöŸ9ž'Kê‰5•2;Nkè¯N©:xÄB›à±T®¨ÿa°Nú™xýá0[VšSsH>ÌK-RSzPŠJ‚±W;m®ˆJo OjmÒF ÝX°¦È8ZÔõ$Àì7“²£«¡¡Œ÷s;å[‘2z¹A`C.–Ùq[CÞ€Lu8‰¶áäŠÈyU8ycžC›O t”r©p éNg'Ôw!Öʵ‰7¹ ¬&ú€×jâªìJ'p9ú(þøáqÑšJªU·ˆówðÂBvr­1¿1VTù@íçùP¬ð| Œ¦¢ž\mÆt„ð’~àk÷er%&;‡Ö Þ4!ê$ Öì…¨+»Â‰D'ÇžaLcŸà ëwpèÛÔýC¼>4’£R\ð}YŸ¸5z±½`B°q<â¬Ê# {Dçý!ÙPc˜HºÌ·¢cÌ™TÀ¨±M»Ì¡zd+ý¶^:åà ™UkÝÅêÔB VZeP@ÜùnÒ[ÇkqѤ̢L çÁ%$g$ÁÖ ¸7éÅßôÞ^ùǸ”{Þr?¡5SÞÈ©:¶äwn¢ëŠ¢¹%9â¸ïd.$sÇÙ±©_K^ôkÍ]ž“¶µßˆÈ û:µò6\¥±–æÖ=»JG8w{k´îáÏæAl›#ˆ^{!Ê';Ïæ‚ŸÊ[ß'’ÙǶæÁÍš:/ŽBTyÁ;"&¼ˆ4‚ŸV=ã™#µbSfhùÝ0¥Ž6±ì&Úˆ(“:;!W;½4m@¶Tr¹a[ƒÙˆ U@‰™6ñÔ–êwénBÔ‚¯ù¨¸­Ðú¿„eÜÜæWGëê.MÌî×õùoÀ_öÿøHÁË endstream endobj 12 0 obj 1547 endobj 14 0 obj <> stream xœå[K‹ä6¾÷¯ð9Ð=- Ãx‡Ür¹eÈ!½äï§T’-Ù%ÉÝa2òÌ2`f{ì’\ßW_=ÔË.¼ûçôwÇà§ç¢3Vtß¾ž~þ¡û+|ʺoœ¦×“.Cg„†^ë~|‡ß~ÿåÊÍ(¯âe<ópeb<‹+WîÊz÷ à®Gø´ñ†__:=¿ž¾lᪿˆü*GÿÏöúA¯4´â•Aã*„èÇ×?sÏxš0fhâép/)`:o³9蟜$ubDv‰Ñ}1Yb<ŒgµÁɇtĸ™"’nd­7‡üC§ 8õ/.Mp½ò bìèïúÛQ·nWd‰ÖXÕ÷a‡&Y‚ó*7D‘[v „ܽ.(¤ˆW‡Ûyá2VÎ|k¼ßSuĈ‡ö1cüÒS̸¾rë«?ô(•âÊ-Ÿ±ÕÚyÿÙÑŸãZ§ ÁËåû‡]´é/vK i ñ{ãB:g®5 ¾þTYA1Ùg…P­­a©€½$ÕUòQ‚ð[L/eZ Ðäìµ÷“SâbTö‰! À¹Ò©,ÐbÀ…G=q Q‰8ÚæWkNfTªƒI|åÀ|¬‚É\7QîB;Ts †—BÕ/  C¹5[ñ&àùZ'Ad—8 ®¤kD¢øÊÁ"'¼ ÄÙRŽ5Öµ•ªv¨ Jû HÊbzÑ:¤;ÍmõQ}´k3Ä«ûœš w´€;Ìwb 1AuJùdòá9眆r£¬>_­ ?§Ä¬#¥™ïMNÌÑdx*NKÀƒv#cÉN¶Çìð$F ¨o´@X—¿²kšRS•\$–§ÖXÚš/‘ˆžT½{]S‚ÖÃÄÊ…c‚uOB‘Íß()²ªw°š³Ý&ëõ˜#ÞÛ91h2Ž“šPÛó4fXøã°„YlÑæ0Jä9‰¹­R¾•æ>¤ŸùssYÀ¤Üï#ŠÀêm*ñï£! ÷xÆæßŸ©c‚ż“V/Q¯nÔ ƒÂp: «,â3i½¸æ²kV»ÉÌ 8~ûhA>ÄïĶØ™Ýsó8|“˜­F%}ïZTbã$TOæbPd=‹)º]IÆ.msš;üw _Èi¦Y8°K Á7£¦Ù±H”ÀÌvݲÀ;pE=êzîê=™€©c7VI³ßQJH늱1aãƒ+qÍ%€YĹØ-è’š-M›î@çCRº™vÎÍ9WÇ›ìxoFÎéÍxÖ³}RXR*üólnË¥Ïsµšö_fKCÕ¸­¶¿yŽVA„°5=q—iï;OÐ(HK->Czê6eÖ;Œ¦›¢¹p`µäN,€^èÇy4åkôälÃàü:1“ ¬ßa™¢žéø`¾»ÑÕñrgQîFï™É~ég’ åy3z5쪪[æ]«VNBÑ4“û†ÿdçA¸T˜”â!T¶á€QèËÓD¢×Yå5êè}Ö}õÛÇzu"AÇ£rÏAb£¿ }4£kñÇ›æp®VÄ\:Ź9¿•ã”K v³Ö›‡Ë;Þ›–6Ô£û*$ýRZ*Î3Þ£ÍM;HI(¨IhKã"ÉGCþÖ2}„tÿ3&·óÖ‚Ä/»$°¥å­ëxèpØ.玆M‰¾ÜVi¢ /g ŒVÁYKØä§Ð´tJ æJ%˼oæ¥?()ªt ¯¹Ë#ÉôªØì`a¿­¶$©[ bÃ8ÄVb÷PHd¶ô)ûÝÅ‚8vÍŽ/Ý¿Š_4 endstream endobj 15 0 obj 1671 endobj 17 0 obj <> stream xœåZK‹#7¾ûWø°#•^-hc{|ÈmÁCÈ-Èaa÷’¿I%u«õj';q{gðÌ´[R©¾¯ž9Òýß»/{b$…½Ò°ÿúûîçöŸÃS²ÿúçîtÛ©á8ì;àöÛþÇ+ì©ýë_F& ád0🊠c½˜‰4ê †ÚgÜ=£ÚþÇFÿ•v´Gý[„ž©¶¿™ûJ¹—x2¥ûÇ¿nMÿ=c'´KÙ?/a©d\Xx\=ùg=ÿë¼|ÏÊÏã&”3ݤ“POê׉ÛwÜ·(;3ðÏÂ^Â$l^cô¯…I‚~½ý´{½í>U¢äÈ3„ü8¦ƒpNõk83»¶–¡‚ÕW9?ë9èñ|6ðœZ,JDFr³¹ýÕ¤ŠÄQåÆ,'6FË#'4çÀ¤Ž7@¸zÖ{;ñ„õOwýhd• ÜÃ/üÜþ¹. ‰ƒûi“„hHþAÉÕ%E©§uRÈ¿W(îÁE/¥gÐgxÃÔƒê‰,ÁqªàÙäë3‘60eÃQ)ò‡Aÿ1,Êô»Î!&,ƒ< „9È"šJ;Içƒô„Ô9…4ŒÆˆ‰mTÕžzÈ*8®CÝA9¯D gqÕS˜7.‚ò*L/"÷1÷¸ÚÅ Ó~\°//Ã,ˆìÕå'l¯èi”V <©‰èÉJ,“dƒ,Ó‹e~6ÌŒ“0I8¬bмÐâÐ_«n!enO+9CÏF) ŽCµY7òØÒÂï±ó£UKZuëÅ‘=&¹U ¶5;´Räg‡JRØÕªknN“MiÖ…µÔ×:¬ ްž@pÔñóï‡É"y={ìX6 CÓÑw">å6â×äÛÀÿØ·¢@¡¯„tàê(r¿& ÍùYx½×Ê€–I3ÒZlsäž’ }œ =Ž Éµ³TNõà>³\í2w3Ж½ÑrÓO+B¢ÿ¦ùžr{lsøÄ_˜Fª’ðI†/Íó…÷µæ4§O4ÆZ/¤âd³cgF‚R‹*&–¨ …³AÚ`YÓÞ&téÓ¢ÒÒ‚’.-ÈP4úÞ-8¯½DCþßBœ3[L×ótNâÛSìÒ9’VÀðŒáÃP´ßclí&TŒwI7ÈÒ¤ µj¬iæÉ¢M— ¥ü– ]2È¡hÐF—4¹¥zµÀœZik‰1×zÄæ"Ÿ»õX—,[)c›-G]ÝÏ# ÜÄ3|;a m9ïqé†ç% þ«õç=øò)@O=èð ‰;ÕÚî¢ìñ¸7Üè³"Óä:'@mDLèæ3D2i÷…Þ`³El!TxsŸ˜}\ m®#KtÙ lû§ÏóPO R´ç‰X[os`6»e¡'éeJ6袗ÜH;×h œ›Y6¥ÔÎW›ukÅ>œ'óØ% =:øÎ!S¤èÌ…*àâ°kj¸^–ÛyJ¸8%jѨv‚! ]-#Í]†Y@YÞ´(N|0!Ó‰w<û< iUÒõØkZzbšõIRìÅ’„©.I¬SÎÛ}P † ›§ßE•ÌãèŒ*Í ØÈU“fk?ñpÐûr~ॠ1¢1Ææº¹l´%hÖONBñ 5.ÿ}„äênà› ¹mÄ(´ÚcŠO @˲ÓxGíw ¡Á+“ÆN4|<‘š›zžWÖ=PÎ~™Æä-\2 vP‹F ª²oMž‡ÑªK„R3ŽÝ"(Y´É—1—ûyÌŸªý¤å3Ý•À›¡×x)ƒä~î,ñ3„[’‘4xÝDš©óÇ'^ù}MÞ¦Í0ØpYÛëwMŒ>ŠÝŽL5Ï|ü![w×É€7“öm,Øt躣ŸÎ…~ïtMv.=cÓ±vøŽ µó…9fË/Ì¡÷åÂ×´ó4Tx+Ò{\' k\ZxeæyŸ‰0Ä¥fžÈw¼a²=.éòiÿ(å³Õ endstream endobj 18 0 obj 1516 endobj 20 0 obj <> stream xœµYË‹û6¾ç¯È¹àT/Ë6Ã:›=ôöƒ@¥·> ‡B{é¿_iš‘ì8^ºea7±¥y~úfFk.öüÏ鯳I?Ѻó0¹óß¿ž~üîüg~zqÖ1ýõƒëCúÛÇ1¦¿Ÿ–ÇipisýùñËùûp¶áüøí§«±sç®ÆÍöj¼ ¦‡¯1ÒƒqîÒ§iöWzó–ßàÓÅÜÌûìò‡fý]äÁ‡[úø1ÿüøátœ¾‘¦2,é7˜æÎÖ‚iÖÍ]ÈR\ÖlýìÌÕøÜ'µ”»¤:ÀÚüÜ ÎÌ׸>­qÙ(;$'p»YænLëì2W·À#ØéÁ@ÛP-ö¤%Î+NA‰YÒ3³`ß‚¯•t%•L ùÝÞ¡ Ô•U6Ç^à#ý¦ü†è¼²M$C! )ŸoÍò »§ç¡8°Ÿ´Þ]B“´"#Ë.žøI⦡ðý6wSÕÀùž§ë«”C(’ªáI~:+ *ˆ X…âIŽh ħ14= ãì§"Ì‘Äã’åßÑpJ%!éKßñH—aõ")Í€ZCDyXmYÅ„û~ýpš6þ"´nÌ^.¬@4’gû| ¸Ä×à+`$’BdG†±VM'÷8‹ð/¬E›œÞP'¼…±I¸Æž¢Xr<ðAÀMЇrkÒ჉ÇÌ EdºþåYr¾MÄmîù$“ë‚$6Ñ’–bpSSffŸˆ¾‰[7èTx'ËÍB'—Î^ái`S2½â˲cyJ¥µ‰‚%4zAà’¶*’Z5à飒N¬`û«ðËýU´ÍxiãMhnÁgt90[j†§…w:ØŠ¦–ƒˆ¶À]h•󂩬oVÁgTE‰¼þ‹)¼U§²«sYŠX“¥@ƒ…!¨ª*{Ö L×G Ã^âúÉ_b“¸×öÑ+aG*Ȱ€“3žöN²WŽÌvÛ¯×X 8éV˜‹å¡– ó6:0†Kžj8³áîoþ–€š~æÉdZc¶<Ò=Ù[Ó0¥ý»9ˆãejrõˆS'Vá•m Ü éiͽFR‹ÎR[V*4I¯ÀÐdš;a®S‰‹•FZ4H5I¥Ê‡¦¦àÁ´E= EýµÊX4¾ôOAs*g†+LEˆ™ò>Èέ.x?‡}¸¸¶ßC+ÐñóRU£^è`ñ¦ÍÚèjZ1ä/{]–g6Qç. Z,¤ ËU_ý…üû½UWÁ‰²ªã9gÊ^AÈ[ËSÜQÈË|¿®ÐÒé!«°Ò´Ür¸Üº­¨ \Š`$¶Èºob¡°¬&¸¥y“-Tãh5ˆ®÷ƽ\ì °FnF|ñ}@û)®‡¹—óþ‘6àáËsÊAx¨_ #·Ÿ¥»Æòóv©²ÊxƒkNêú"ò¿°ìn¶ÂÀÉÑlÉŽ/ÎÖVw¸7ÑìöÏÖ­T5Ω™›[V™ Ÿ”ÌýƺWËÿ¿‹öW)vŽ™£)–RôÞUÑÛ»Øê%éßÌ©*ÐêzªÄI€FUjóõ%Áá³àÆ!q¢WĘæ‡0n홤T€S{·’tµ¦„üÛù_g endstream endobj 21 0 obj 1524 endobj 23 0 obj <> stream xœ­XIËÜF½Ï¯Ð9 ¥7uK >ýr3 är‹mÈ!`_ü÷]]ÕKUK³‚±g¦—ÚÞ«ê*«I?.ß¼6CXÍðýóåÏ߆ÿÒêd´>m0³ƒÏÙ/N|½ì·K0pÙ/v¸ý3üþîí†Û—¿6µ««úMúâ£ÞTP6ŽaSKõ¦•ºjví:mâß·?.o—OÙ%øÿ¢ 3h*ì 7ÍGãâè65£DóŽ*l4jÓiɽGØ4é QðU{´$†ßÌŠwB´›Y Fqx l_ó×$—ª78hÓÁ½í¢„tn6q%‹çKb¿(#7| Eï©3cïM²Vï¤EàmYޤÁ®k?–d+ª·d÷t-i'”ØújHìÒRÓ‘¿–p€aá1޳™\‡c Ž‘‚À#(4›Že—Ñ˼}”²è-DsÔÕ 8Îði×ãßÒ©¬#š¸hŸ#FZ?VÞ¬mQšR¼(’Èf êš4@dU³‡ß£+’Gªñ1Ý̲pƒù Ó5ˆÒ0ƒ^HþªíL“•ÐØì2¯ÐÍÍ£¼HæÛ9.X)|«v!pC‰QÖÝU§UJ0¯¿Xº{¡2~a%]ªSF¿ð.'K~;˜u…¸øT4]¬(Š:o×*÷Ɉǩeê!Ê:/vò=î¯ÇVKRàs /Vþ©.-FžŒHw0?« …Âõ.ö0‘´wkÜ\£L/Yêl«òŒ#%«uã=ÃèpÔ°¡‘šÖ—C‚ì¢ÌeÀYÙ|-›$~­æÔ×§u tÏ5ðX[ÓU÷WÃ\àu&¶gš¶’ äÎ.v…)‘øš=ÇP¡È«Ç0Ín2Ïr’=7O’ѬÓ|šŒ÷ž30.[Ÿp]ÑbýH¯Ovûõ––'Bß–p!…;«4J ötåO<…HÓ¡@¦”¥aˆ€¿©#ÝѳŠc®‘à&q©gËm¶ïÒöØrgÝ!ÔnZÎò¶v£º $Dç]yÙôýûiH‚÷Ü;58xÓã6 ꤥœgEƒrp. îªi¦² ×4n½ecO Ñ~v0#¯›ã…­gvÊ™…¢x,,ÁSê0KR´@U2áæcóP‹“´a-Ú½yæ Ô0Ôñ¥’CöÂþkC‘íž´ÃIUòNÑK Ð3˜ÙµßZ·&µ’Òî•×Ñ-óaXÔ{øèF ÷=º(§‘¨©ÏÚÆœ¯rJ§Ù‹m!§*Ä;lYn±Úµ–p®]ÞÉV|‰Ú<( nÂî•OòctºÙqç,±ªƒf )ÖÜÇXu 똜ŽÖ‰¢äÚaªg¥Sæv»!ÒD¾T÷§“œ4]Þ‹>ÇÏJLž®Ïõ‹¨HwÖ¹ÔrÊë ëÊøQfÃýNÃ,:~»Ú~³D·l쥞¥"=HÚÔ5Þþ¥ Ÿ†ŸJóL| endstream endobj 24 0 obj 1217 endobj 26 0 obj <> stream xœ½[I‹$·¾÷¯¨³¡ÊÚrƒ$¡³ºæà›¡Áã›x‡ï]ü÷-)$E„–LåÌ`Œ§»²”Zbý¾µxÈÛßoÿ» ûß(ÕmZÔíÿ¼ýòÃí¿îéCI9ö§žÔ`ìÏaœG;⯷ýómRöåqÖ·Ïßo?~17inŸþºJ½ÉU<¥Ùô*´0öÿa»«UBK¹ÝÍ*æí.W9ºqZLâ˦Ü/z›V „ô¿+fÂWþ­É>€1‹[¾ywßÀÓ]<Ň›uOã·ß>z{}¾ýN+Ø)ÆÉþëÏ¡nRús¨ÉNmX]ÙiÝ<~Óö„vj³·9ØÓ¿´›í-7£ãÿ¯ú†Í›ôï[QÈÅ~Òî%’VÚÃûT¬j÷óÀáL= ÿ®Û¬èzqòôƒü·0ýâ?Û>AÒòãE8ˆTî : ðoZÝz…ÒMÛ_Ÿv®I¾ÈæÜ{ìių¤eéQü·°W~È·{¨ÂA=L¦B8wyX¿s.-«Ã´Ë/åÊîxþÐJ ÚýTþÐêÃ[4›ÖŸÑ=ÑKKw(x;…—ùßË ¸{&.ÿÜr›ñƒ>È6á;g‘#ÑdšŽÈ7éǼ{øaæ=é£%3â!äm1ëIO)ד!BÑÛ²&có¨d²ä°[ûäžVýZM ö{ôŠÚDa‰$4A-™¸•A¹T­u…%n9<¡¢"Ò`÷Áýâô6‚M\<舗º¹Øü>ƒ§ëMéLkÕ3P¤P–ŒPK\4Ä\á[I 1;­ †y‹ãçbžýlŒrðÂ|Êçáù†e~ä'Ôó6tÅÐp r– q“E†¸Œ?\_¦Hbq…ËJbh™ /Ó­>S=8†C-,:ÂJ`_û6Ùèðj }Nè“~Œ ô„î²þçj/H1ó7PMC=)RÅyù{‹©†ìdã0ÒjwNÊd¦ccq‚ ¥gNÅêUHÁÖ‰åS N“â4Ú>4Ð!K€DÒÒkPÓ0?–<Êï)PÅ3… ~¡ÄÙú)DÊ‚yëžr_ðÆ=¦?â ŽÚxª!q4NäB‘ŸÃ,û63UpØq!´œ0ïLçD Æ/;Gtþ‘@Óšg<)ç „à!µ ˆ¶rf&‡êHlaEÜ>úз@gɱÞ"à¸A× ú“³ÌÈBýK”××§(‚ºK5šËíÃë6™ª$ËÈÀUãs8¨ÿݦÍ;—7æhYðZH1¦È>TP‹K_q’ò<~’ô ßò ¡cµA˜€ÏÊŒqyT õÌAZ>¯Ü”˜üTîø:ÑŒ *KÊ6}T*>ç8íáM‰‚˜³‹¤-XéÑÓbù=ƒj‡¾¥FS°}I/PUøi}."ä!8DºÑÙËàÈIçª iXj§nÁ›‡®œÒAoJt’‘È4Q´öª—€pÒN”b–²gýž@K½‹Dª I y1Žc$‘ÞXAòUçkµ‹ã#°Ö“ᲂ¤WŽÃÒ_lp7 -ÇÑJ™ÇÅx…oðë|YCý›ÂT„*Éäsö'3ŒîÇ)ÿ„ÝrºÜ n&êºÊ(žòA\9_ŽʲG™Çb+ZÁ¢N¼CŠ‚º3¹³ú¥¾„7¥:zò •» i´µ{tÑŽÑŒ3‘^ÂŽ`!»*RÜŠÊÙßH¼û—•9äN† º+“.5þ`3{U­ÇZ’ËPp÷C`ÎéâðîìÓÑØ¢Ô Ê ¯lÀÒ{¯¢/v8b™É ”¼6c5oÊ0Í2fK:)lTçý'÷ð‚&fQö©Q4¤·Ñ¢ì˜÷ÙuNгH%±&+y&9¹\'‡±Ê™‹Œ¶d‘ŠÇ_ŒRµåäl>‹î[¤ø¥X°Ýë?¹@qå¶VùÖë@9 ¹7Fƒ`_íedÙÌmûÚíj^Ïá5‚‚V«$exLÀ˜€áXò‘z½xq­`b]¯ø±šJëNé!n‘rŒ<··7’ô;£< .¼À€\T“Î0@H½ãâí"ê-±®š<°.ºÜ|€&‰"YfLPÊ+yo[q“M¬æÐÂ’.q|EUÚ¥b~Õ:ž¨ÙMT;¬rGF]·g^}ö×P2ÚªD'‹Hq…Ýii3`P@VŽ*pø‚Ñ‚2:ùÛÿ<ì6^ºO€P˜ÞÒR¯L¢NÄ B›¹´.¾Õ¯Þˆ;jŽ©¬œÒ*‘txg¶Z³èzŽÑmn(,7Åq5­°RIÅ Òy‹ß>+-SïNb¨í‡Ý–•C:+[½¸ÞÍÿ˜_{)óq«ö]œã›²Î1Þô\Þ)˜73W vs&-ÝŸè3­J¥ìõóíJQíß endstream endobj 27 0 obj 2640 endobj 29 0 obj <> stream xœ•YËŽë6 Ýç+².T/K6`¸žÌ,º+ ‹¢»>€. ônúû•IQ¤¶\ 3בdŠ<<<䨻¾þwù÷ªâ?¯Í5LæúýË/?\ÿIOÕõû_—õyÑjŒkƒšîãõùûõÇ/sÕúúüó×Y ‹™•YnñóÛrs³òËMÏz{l†EÏ*hßšÅÓBX¢>U0~›¶§ÚÃjˆcp¿›â×qÍ-lG®z[†ß¤ð6¨`ñDØm£f3Á‹L^¯?â;‚Ý,4+åÀzÜï¾à?p <"ãh)Ý3]wÁ¢´ž'àÑÑXß[ß»â.hf4|NÙ.kÔöÖø•ÞÎ\~{þtù|^~îFÊOCüìD*ºäV¬ÑŠG ÐæúÛ°ÙÃ1E7£ ·÷'Ã_Œ’ãËÀ¡BÔèd\¼±Æ7?áûq=ø£I¶€ñG,öÂ.Ò€OV ¡šÍQmq’Ž9 À¨î®À0a¾Øo–ÞZB=˜.â猡|}v#F4ž3¸ã_Sš1¬“-pÑ‘QìQ/ñ?n{£gíl%òå•3’óùÖj=u«î¡Ë@kr ƒT &Æ|V×tŒ?'‚™öARô1²ÁcÏäIm»”‡Ú;+½<ÿ>¸¡«óvs¥Ä› ï~ÅwàmD ÁD¸ûý´\™é ÷%ã;†ìI ®0?chcîúƒ„ BAö[ÎК•æ,8JÞå6ÍÀšSvxâiÆßm4³èˆ‰¯œnƒWÄ÷~&>'üD?1qÜ*·QJÔiGœÕ½#¦uKîc™JÂÈ £&÷è¾M`[eAB,HÁG.±h`K;Æï@ñ$Zß}™ÝŒcYÛkRLií ‹[¼ëˆŠŽ2—峿rUã„HºK+%w0ÀoE®ô3ìú8¤®aô÷é-ò;rÌ´aŒƒvÊ™ª¥Q7;FUR¨¦k»™²ì‰*¬øYL§Ä.òZ*(\_ÊàIÑOÚ¤«Ûu“Â?´Uó ÏE,¼bC*@•Õ›p%É ãt‚¹›:4-ö[á\¢x?x’Z£|®Õók7&À{ÎϵÔ%p fÜ¿£é@ˆ †J/Î2JZ檕Iªœ¢l†>¤í‡uP&Óº>U4ÃîCMs~sõ¤J³^ßSáºÖ…™Ù°z±LŠ@qÇ‚'´â"9Ñ.SÁ,«TQ2 Àð-^‰‚”Ð_ËöRäH9cLOãLÛìb÷ñ%Ú×ÀÝkÍÎuÊâ“SDÓ³DcW¬P _ä_}ó36×ãý=)*v0e€Äo òU÷¾¬ ÜGrèw%XÆî‘Z®•8:!”Må±€Ešt¥ Bš&:Š0’âmL––M°ìå³z¨KÖnéA¸%”œÀPÙ¦‘”9ˆ–*Ýו«H‹¦VrëÅ&Ë § jîëÖ¶zOŠ$¥“…—ªùžü-k¼ÊhF<†âQAÄL"7iè'÷ÇárãØ4¨/€þÃËH )FÅzà†"×¢ý ¤iB¼\Eì^·"j/9ä@âÃ$3j¹ÜþçªCÀÉö‘ÔšæehÈyÔöõœw“Ð$Оn-²(›i"ÐÙ4¿ô²ûM@Ì5*ù8&£ÞÝSð¸£ñfB[²)S ª£ Rjòñ¤>87QÃûb};²g‡MøŽóYU‡5;/·DÒ{Rºáð‹­{Õ-æ;Ñ+ì‘Ǻ%¿zi¦¡ã9·î‹ß·–NOmG|Ì>LøE{'C¿>÷‹/Nº¡8GJ;Å/{B1v¨}‘bÄ.§ŽÊLšŒ&åü€Üï7°‰d˜u_•¬…Üp±"xž=R Ryûp.÷¤Ûå8¬·ŸZ•×ðÍ‘Õÿ[Ï1lí¨š®tïÏxâwÌG®Zsa(DË‘Â,•MÊDò΋=†˜E Úði–hu,PŠè6óõF’TëöšEJõfeAš> stream xœµ[Ɏ丽×WäÙ@¦¹‰’A@)«êàÛÌaà›gðÁ€}ñï›d$µdÏ då"q‰åÅ{AµzèÛßþ}SáŸ×æ6ÎæöŸ_ß~þËí_ñÛ‡Ñzôá¯ÍàÂßÁO>\ñûÛöý6šp³Ÿìíû·¿~¹›v·ïß~Yô¸ÚE ëÝ,ʯzQ_«IŸçEMë°è)~ùÔózÕ¨æxÃÞ¦ËÓZ¯ÿþÛÛç÷ÛO¸:%fuæá`^sÓ:Ík‡p·ÙÒ¼&aW3ã{5¦eůÿê>„¿v^Ç|Ï>êôÎ¥×a_‡°Æ÷Õ-*|p‹‰ÓÁ[× ã{ú2Ý ÷Å·aº]Ž ƒ5l¾cNàÆ4P^'Ýg¹K2Œ®5Ûr² ?Çð¶´¸ü=ÎL­?]¶žM´õ,ï·3~Ø„•Ñ4Çþ2ãc¬üUVoòþÓHâ"mZ †Õ~Åß`iiIpqÚuZurŠ~î­e¶ó #v€•,J¯ßÿì]®µæ×ïGZ Œ¸²nÔ=‚G;[ÐéÂXéj¬t­)á‚?B\&®aìVO>Éa Ó'–!ÉYe·)üRVñµ0M\lö¿?à„ašµàN6C2m2§BZübW pØ-ÿä[Ø€?ÂΓ«­‰WöU¶ ®Dúsg`–Al&#Ã+º€D­î=F÷Îp' “u”®¤OJež¶:Lb—ÁDÛ«ÕÉdλ {óqÉcLéƒþnÓ×£íü€ØÓ¾²°î`¤±d0J¡ g!ô2šU‡yæ0Å(€Æg0%í¼’&b«Â—» —ÊÚ,sËkõF2i"Ks«¥ÊJODzQÙu+q8;b˜s¦d Ú:l­$Bª‰z,l„¹ Ö?ÓÞúe]×ßx ˆ>`!\p¼—U.%FQ38ÂIº¦.þJVÐ<„ØºÏ g_ÉîN½:q™sSç™ñ€EÕÈ`ÁÕ|-#Š7ú+¥À;AY‡A’ªM‚ñ+‚q/„“'?bÚwÀQoë´H`gÅ¥)ŠÛ<¥›¥?Ýç@››ù1Ô¥ûEðV;è}¼stw8UºaÃ!«Ñ0 àuëÆ=ÖOX \øzm \)òòKÄ‚Æ5Hìð„ ¢c´{Lu2ôÖ˜fÄøÉ(ÆÂ ˜¥ŽXCLH¬J¢¤èÔë!’™‡º!ÍÇ«/ˆaŒ—ÀŠÀÅŸr8;øLÞ Â¢{ÙZDÅàJ¹'аÍ?(¸yUGÀ_"Ž`8÷‘½|è& *“bËC0!;”Ó …_䎌úìÁj }Šb¸Jkî‡Uéã¸Ö©Œ@ŸxÄMC«k¨")àE÷,ƒ¹ul'cÝ“¡lF¡ t…ÊîÑšWÙCŒ&QlÄg[¢hЫ6SüEk Ÿ6+¡˜{BÓN&e¯îÔ“šÏØÓr£j„í®‰òÚœ03Á=¢\aF™J¯eOd™™RŽ~מÙ¨_Ñ£Œml9Úõžp‡ :Ê܆{za]Z'æ›}ý1òNE`Éõ'¶j5:†¥9& S&‘¾˜LUK Ï+pcT&……wCÐ1hd!¸½¤6œÝöº áW,4­nÚÅÌÒwK4V'¼Ì ܈"ꓸ’2ž¸ÆéF®Ÿõ{ÌzMB¹Z² (ÜŒS6A'yXÖücŠ‚K¹õìnyþ¡áIÇÊiŸ…÷Åž»ƒ’ƒ€£±>R½"@î ßú,ØfˆÌ­¨ì±Võ»ä[S’`„pÙ}I¶ÈTcLÉAP•=}I.ÁÚl¯¢v¦-™HšÍd)Ý(w™Ÿ@UB/¹*“ØÏ©Ý›Û²[Ù> _xÇ)QÌŽYÒñ<ç•@}"/L•D°Ý6¶ÎʹXkæ Ðt’îØ#vaî¦Õ8R,t2·ìn—Ò{rE‚pU‚5Y²ïÖoQi×ßKÁ#š-̺Bhlñbw [Ö›¬¿/»ƒØ£Lðò<6ÆcÒMQw#ÄÁ‰è”íÇû¿í.X0Í=VÆ’E@f~F #q€E@Ú6ìÒÊž”$…Ë£²“ŒqãŽzï®ñf”'X)²Ðî¢@ƒ·±yB¥ã‹®“Z®:ÚäÁš#€¹óe0}ICöžØ"iäþ!!’SÖüäYxâk[5O)ûbHñ>ËË~ç\‰]2KWõt›…Ä¿‹ê,4:7Ýñä³Ñ_-CíÒ;[1ÏíÄÖ5Ú—J®èuæÂ[W3ÄY†© ,žL¯Å9 ºsòØ®_«¬ ›=@6³¼£z`‚‰ m$L’¼8Òñ€zœðx:B’O9´pX·8°½" þ¾ƒñxokÝס™âxÑ;É=8CÏ~Ð öi‚öÖ"Ö]`;nŸèÀ°ÙucrŠž‡Vc¶É^h"aÖï50f枬çÆOÐë®4'À#4±ÓΟ„à •B ¿98;áAÓ™<6¥TÞŽe;ä“°V[%—>¥ìU ¸cRšTôx~ŽËäÞ¶Î*Yàôà³ÞºˆìŽ<(§ƒÆS&×.<œžõà¡BnÕ çDséöð¡…­“@rºU]ÿ?©3¦ËxT ÈAˆo„íÍ¥S-ú²zg©ˆ³o/œ8¦£ý³¼Nþˆp=ñˆñìºÖZíJ{ÊjN ÿÁÇú¾>“¼‚ÃÌ8FæBòM!ï#Æ> stream xœ…TMk1 ½Ï¯ð¹°KöØc e÷Ð[` ‡Ð[›@…æ’¿Kò×lvRÌ®-éIï=­A½ÿ”N¨|@õögøùMýÍ·Z½½ ë6†Ñ)¯Ã8«í·z¸¢PÛóÓ>šE'›O˜".°j.‚k<ᢑO×è0µ„¡Ž¶<Òïtœ`Zr.‡hÏ/rAX”žžã)P02®¥2‚ÊP;©¸moøº6æò+¡:ºç–®D!º$3~ú ”l ZSzÆTCjV;ÏÌ7Èq躃’8™Šçkñ™i(“üÚ~ —mx¼+‘ SõF¢ÏB§Ìաׇ†ÿR t\„w)’·sÄŽn—‡-n(ô¹%K-éÌ@õ'¶†µ9îvO(@Z#XG~9‸óz´ÂÝ$ÜQ­íõ ¶[Fc;AšªšXª…³ ®bλtY—«Ø¸ó²> stream xœÅYM‹ä6½÷¯ð9`G_–,h íÞžCn 9„Üò9’Kþ~$UI*Y²ì]6„éi[.UÕ«Wõäaþ¹ý50÷£¹ŒÃß¿Þ~ünøÓ_çF»OiĬÜç¬íVü~ÛÞ7#ÜÃz‘Ãû—áû5p5¼ûéÎ+¿³yÅóUÜ™av•w¾ñ-üá¾?™†5?¿¸½Þ·Ïè+,kã~Ûbàl/Þ€ZGuç6|á³Û‚sb¹û0‚­î¶ñ7•÷Â]áîVXÜQþ>ÜJO‡õìá-ãoX­Ã“Å3†I°.}tàŒ·ã¢“£v‹\¼Áä/8S­ŠôGG›° ØRî²°¸¯Íë!Tô!8-¶ð%Æ66H\ÙIÌB°˾§Ð6ŠIq²´K³YLj‡YJ‹Èú˜B„üyfQ˜Éì«à…aëØ­!ÂÖ%œ$ß—rÅÉB\Õc]ÊÈ|ýaYÜÕ4bgFú•ÅV*ƒ.¨­UÏ4¥â¤ à`ƒ…äm«’¯|Æï–p$Dù\GëÍÇ蹈íR)p¹/«xÃP9©*MœÐ”Í`uº9òkÄìï͑҄_̃õd¤¾£C™Ÿ —ŠÒË…µbs–åc¹MDCç5 \rïêÓ:.‰I”ì(hø2¾¥ò*Ú“¯ps ŠÙ.S)Ç£.X6AOÕ³Œœô~#¾*[r)‘ˆŽ»`ÎÙ.m¬hõˆtda&Iº¨7—ÄNɱ6Üê§Œ3Fü¿%Þ…f^&»ƒ¦C†Ð fd,•Øhþc6”émawˆð5uÝOœT“Ø%N:§,b*±þxFž´âfà_>oÂû'%Fõ­š½ŠÉÍë¾A²ê&,Egñ¶‚$B‰W7DMetÂ] i£t‡qu"úðå(úq;Í{Í@öÂp.2‘‡2ð\åâ‰ñRÅ ¢Ó° ×YwŒJ‘C¥ÔYY5-»˜…YÚJÙA}ÔÒ.µ!Λr`ø6âÉTT˜@è?á1¸“ ãÔ‰“±ÂÓÑâ+ï׊ÆTKé\ª¶àzÀ…UÇë㤥ÿ2ubb§Ž5 #Ý ³Q^™fTÞ¥©Åj"n¯öµøèiV/çbkÒÀØÎ@ÑsužB§r=d¦Å—“åsµ—t™_vÀ¸ú„Å Ù!D„\c‹—©E1¢#ÎŽ’´E€}ì´­\i¢ä\sZØÝ€Ææ‡ Ä/!È|<Í>RC\ÌÅu:Ô̪£cˆ€:kplõ\l!©…~“As¡\ã¼§­ ¬Í/%^ˆ7o͠ΑáÚ—´Ú‚ÿ:Q¶|ÓRk¶> ²:ÐÏGÊî.¥z—Ñ‘¤4ŽÐ¢‘Û46ŠøS¥vä¼:,Ém%øÁ ¨©›rLG*‚„Tä½(çí ”T-žÓÖŒÐ>µw~Щ÷‡Œ2êt4ÐfÚ@dzŸ… ÃyS5ˆ(á-²0†Nuñ’V×gÎvÍ;7²Ã×:-}D_ö_¸0Iô3䓦H‘Çæ„úEñȪ%k¨;¤=—””ƒÍ‡é½c'\‘†W‡Êc5ñå¯]]Ÿ;{ã›jµ"áTQC 0Òh¨:J3]—ÝrÛæàÈùÚ2ÛwC%¾ÓMÃú Úåøiœ4úð̦:ºV8“w‡ô„^—ˆÕöÄn=öŠé¬¯]—iŸý£âa¢´:â\ÝO1¨ˆ†â¯T¥™¥ÍñäO¼€~;¹F ÙÔ)¹pÂ죣DuJ-þ@dS_xì"ã:£\ªö(–U- É}è¯SNIU–üÿwÞÀŸ‡G–¨ endstream endobj 39 0 obj 1397 endobj 41 0 obj <> stream xœÍYK«+7 ÞçWd]Hêר32ç&‹î.º(Ýõ]ÚMÿ~mK¶äÇxrJ åÀ9'“±¤ù$}zŒ¸Êó_§?ÎÂÿX©ÎnQç?>}ÿÍù÷põª¤tÖÿÕNMÆÿìlý¿ž¶×É)ØÎúüúéüíÓœ¥9¿~ùá&?Ö‹¾ÉM~Y/ê&«¼‰ÕÞÄ?ËõÇ×w§ÇëôÕŠBœuþw¨ÎRFzò"ÔN eèU-ø¿pÒ­:^tÉúÞ¯Ñëu깺›¸¯sK¸C-á‚ ¤‰G¦5œSbM·€@.Qֆʅ†?Q |/(¹^òÍhšéA_ŒóY¹ÄðmTš?„ó'kÀè}Ø÷oI¾ÿ# ÂFKÇ@`Æ>›ÔÕT>{[·”à Š9(\0+sPte¾=¸¬]Hk‰}ü$øܵQFQL„`^PîꎂÖÛ~ÏV£ƒ/ Yö ‘äŒÒˆˆNXFAW¶x:ï\—P‰®8¢LZœèˆ¨B˜ù-šoªh“A¶Œ¨xƒ+¨ÕÙUxöÍDèûv~½(uåC¢ÑD\PT€1§éxgô»ÿ|™Âš8 ÍqUà±h…Ð5þ,ØñBÂà¿â·†“¦?a9v'zóºl†Xä;™ä¾…8sç1‘€nã%b£ÎèÜë*„Aˆ‡¡O§e¾Ö^Õ:xÆ‹šßæHIÈL;¥$,ôS5èÑÍHtgf‡ ËAÊ$vu`xzFoyä Ðp4³*¯~Üè…2¾Lpo2¹‡i¢‡¡ßf}µu6n¨˜Ñ¥@Í{6dlŽ@JY^T’/yÞJLdW×þl)X±aÝçYÃË J–å+ÝÉ…C™(2ÒX ƒôè!›2íÉž“š^ÝsH1_•Ü,J”ä=v—¯KÝ|ŽŒb©ê0æªêTÞ(23ðu§x\ëß*±}fDû Rß8É%¸7F´p¶ª¿ä UiÏméRQxߌ@sX'7"-o=½û]XËQ ÀhÀØoj¹Nu*÷ü4ìè L¶u¦s)!]Aã1v‹$b=|ªÍM-4„ëœ {õ²É–£^‹¥!:ŒÂ§Wk©MP"ªŠ†v^¥:êŸÆ®æ:×)6¯n*b hh z@“4‰ºéý¿sw~ló¼ž,°[¨˜¼ FÎÌ«2¥z*"¾´a3$«Ànªç8åÌ"š!ºm*¶rô¨Ê¥© y»ÁU¦,²èêå_kO|ÄÎ9â}fBŸñ;øR(-f×T×Ì\ñYuI'yxóy´r´mü|L™ÆMÍ@Íh'4$ å%kÐ*X\ý}‰‹DlÐÓ¦,J!ë;?‘WÔ¬x°t5/²V.÷F¤…BªàlÑI=0óp~¬œzèªCÆ4“h&€ù3›ª6 ayõxìp•p5ñƒ)›×zøXOLòÀɰá %LŸ *æ„Rkè§à–8«ëðËŒÕ ÙÎií ï¡µåÒ f%^—ÞY+9soh uvÔ8ÒðšrÏÔì|îeÞ0–ʪˆVôÐ]sÁþ€ænN 4×åaq ¡x—çÎ`Ó‹¡6\\'i 0æ.=Ûvr«Ëiw™Ãûï¶â5}ù›1aë^êh·…‹‚p`é´=CœÛ ´läÐÕ}Ø<å0,ü59ºc‹œï‰ø>3q%§ú¡?lG»hÀ&*ËR¹`«?ŒcÖÄÜ9ï³i•ÃA‡ —(\¶XîÚgH±C]6ô!Ù> stream xœ­ZI‹+7¾Ï¯ð9`G¥­[`Æž™@n/È!ä” BH.ïïG*mU’z¿0à±»ÕR©–¯¾*µ¸ÀéóÓ?'áÿ,ÈÓääéß_Ÿ~øêôw¸z‘“õÿÕ$öÿ­ñûÓíýi’þakç‹:½ÿrúúMŸ@ŸÞûñ Ï \…YÎò*&¡„nQW0þÇ=^†×0b^ÎþómñÃîb’ˆ¿Ë0Ê?¿Ly:®ø9—ŸÞ¿}z}ú„R*áæ œ0sø?i/5Rû›EH•…T8«ÿ¼ãçæ¾/úêÅ 2ÞðêìŃ7¼ “ž¤õwuxƆ˜%O$-Šêâþã¤a¬—]„qTtü£’Ê$§<D9ç×9ë+8ü&ˆ„šðB*ï‹pÃÿ°A_Q›xoJ z±ùžEMO8“ŸólãD: :“üWVœüÚR„ûþÉ)!-¢(^ßC1^²^êHM?2GéÝ"åjE¸,hˆ¾ÖÔ,ѯ d9£7 –7/ -ß«lYÃÚ¹$² Ôdþe*]ð,Ùdè\œ×Î>ëØ®Ú*j^´í›„ˢɮlÒÓLlkJËÀ€lüÔÛc•VW¨³¬_HÄKG 0ÄpÔ|7kí‘€ŽÕ²­|éúCœ¤ƒ¦sÉÛØ+íÙT"èç’0,sGZ4 æÛ°ÿFz¹bZŒ×·ÈÓÛ¦þ°ŒZÍq¬³Ìª£ßC%iËÌAT"OTŠˆC›·ìá®úwOúËéHa †±Q0(8z „0Tïg9*ß»Åk9jóÐ?(Pw<ÞôG7ŒÞ<"ʘM–JlÔ^§´D¤Ü›S `‚ÙÍRÅEŽËRÌS´cH.k4­Œ`Ì1ÒíØBõ0ÅÏ:(ïÇô‘€-a`¼éIÀ¬t")£¢É µ7ìGØHŽÁlŸcšß… ('Gáú³O]åtõ,Z¹/wÞlx<ѧé“Á Ö„k]ÁÀJÑ; ˆ©Ùä‘B`µ-µíÈàl_š¢Ð«-y–_Ž‘qÖûoª8ñøŠ\¤]ˆ£|•›¼}°ùˆï‘'ºTÕ’cæEqHrË}T¿l“áýòeݶmû½‚`K+yg3Üú—"JeÙ¾ÎÒ¼d”º—±Ð8vβãŠfêìV^6ê•~»ã}«.;:ñ,@K’Y޲ÃÁŽì€1G!±?šiõѳ²ukÙÕÇšR¼=»ÞçÜoãŽBÿÚLvìÀœ ÈÚ5@p%Æb|ùHÄ‘ŸYùéõ¹ŠY ŽdC€ùcx- ¯¡Ñ3ö³^üæÓnIÓ®yGÌ@RKEZYâà’L©¶Ù«Rjv÷,`“vfÔÉ}¢çJÚh/`Çõ…êkÇGZª›…öø¨¸v£&£Ý?öv_ÿî݇ÝzôºÌˆ]ön¾Ýêj‘kSÿóÜÕ†Ç_x¢èÁ^ ?ä2Ø™6Q§}ý+Û—6RÊ¡åàˆHm õÙBÁ,O„Y[3öÚ«ˆkÖóä ¡Ö˜=v·6“‚É'“n¦«¬‡;ŸNÿªZî¬ endstream endobj 45 0 obj 2356 endobj 47 0 obj <> stream xœµZËŠì6ÝÏWô:нeƒ1\Ïô,²»0EÈ.È"»ÉïGRIªÒËLÂ…¾=nK–Ꜫ:U2{ðÛß/ݘûg¸¸ÙYܾýúòãw·?ãUvûöûËöñÂ…q÷Z6?¦ÛÇ/·ïßÅóÛÇo?-ܬ|Ûz áÓr»ÊEhwëÕ]˜ýe®Â§¿ÛÝá¯Kwû¿˜q_–0*ü¾±§»Ì톫……ù¬`«¢s³/áÇ0Mú5Ì¿†E|Ÿüa6>‡?ÂD°°´k¿ÿ‡„瘸f%l( “ñ¦ð8Ë·¼Z•Vç —Ò £­?üðòüxùÚµ¼™µû,-/x6[زä~&1‡«nѬ5´ôëðalò³ì¡àa¶0¹~ü±³<‘—§^Å[dƒg‡5:ãm¸&“(dÉxÜ€»Ž@‚)ásSonšçz÷WS˜{sð€%“‰3ê Û>Eæä›Yú¬£d‘‹’aCfsC)•q?C¾²>Ø¡õÃÖ~‰î„³‡­ˆ÷@·gK¸Ž6C¼œùãzü‚‰ñ,~‰’š):xµŸC®I~i²võº ·¾ª™"ƒ‘$8pÚn‹a@ònOPá±~Ž xT(ü(Ý7 &2H¯ ²ÁšKÅÊÇçuް E“èŠE$DFr8ºÙt úÐŒÐq-oÌ»ùN3Ž›‡ì1îsž Ñ–À‘'l*<µïq±ç|‹Dôu–¡Œ ¤IsvÈÏ 6'H#·1`üa* 2Ÿø­!HÄJaÎä\Y80挜ֶuZúîïñ’뼜 ÷y)¼#‡:àÝó¾xì{’I$ sËœ ®'ÇÈÞeŠTH²2$N7hÆû‹À°†žÌc>¡ˆhÌ4µæ —‚­ ˆ(Šœ™8‰³Ìx¸ôlK~X')ò¥`ל×JÍîÍ•A¦N¦ Á8‚!5ngý§œè0V­ìC_J~dI°¢¸†à=a­…útfTÎ.F”BêÔ,ïîR= ¸K˜B~Y³KåLÔ$‚’ݰ]OL%üF¦Sν“wuËU¤hë›ÿïðy oqï·¾Hmx-ŒzÌôú,ò{óEŒÉÁt*¡ vÑà*sŽ?0ŸšäŪ„Œ¨Ôbßœ)Þ¼3@âAñA,ƒb¬2bJn½ø{4FsC]ïÞ]1M¹Þ崜ȫ2'S™2SSN B ¡Qb*¬§°ô.½2¥WvBS|ÞÑ”ºÈu%>'Í5} B<íÜTÔ[cÀR¬Z„r´"Ö`]4m…¶„´¿o5>'IÖn8â¤å$ÃüßÂÜxXaÍþ–ËÏþ„U±[øÊÅD”dWÒ»ôs2ÕªþO/휔ëIàɈó.£¦¨1 n^ˆR ¤cÇ“zc«q‚Ä·n}ß‘þàûoÑr:Ö™^ëFÍvrí6e _iï _?¦ãC°EƒKN9HÔ±oJ‹ÆÄ¬í„øf´?I¿!õY¨ˆ§98µŠI§˜c©Â¬’^öÌU6£ë•ì£éñÉÜì9,àJÅ5_§Y(õˆ£†&‘¥NA~§þĸû¥r1¸¿R®?¡‹ÊXû%ݭ†q3ÒÊô`%^wÎJ5Õ/$Ùâ´¨è?=e“\ —b£=ÚP¿Ä6rÙ3j¨šâÁÙ¾bŒF»@2Þ#0—Iú:Å©Ma=`éŒ>CÁ¦:Ÿ¶¸ºú°<’ô-јՙ8`¢Ô¾éGe’Çã=É;ÇÁ7áï .¢‡f–æd‹ptðð¬&WúT 6@)&Ó74Ù‰ÅÆÝ¾ÿ^WîRx§ÿÍCRo›—BaKµí^ƺrØ‹´øõtºØÔ ,ßmýåŒmŠ«]õƒ·]-Úý«& ½ŠN…7¸÷³¼=¬¡J±$µþ «ª'šø—HÀN¢ÀýöÄÍxÖÏÒJðˆ‘†À\àœê³ã±%¥F”ww®k1·•VÆ–;Î1ðÃ'$¸ÑÙß>VºFê¨sH§&E2Á"Ñ&ÎáhÑ÷j"FéÂ…‡õ¼öpsȦGD[qâîi"Ï—¬Ë³ÐHÒ_qX:¡¬”¢ZPe:"4» í9U+Õÿ¹ÜÈ–êÞ.MâÁ“®ò„b/Ūdˆ`Ì5ä°#8 Éù'Ž;{‡, û:Mx6uìo¢ë>ŠÂ65os\Z1#œÛ'«ÔfOÆæÃ®6lzPÉæÉý§™žüÿVqn鸕i êÆ%ÄxcQÌ™€Qíõ _z‘O6â"\—~ ù¢³x®‚¸ŸIìš’ëNKùdܧ燃’$¿3 ûÁ'û4;pCNG´ð‹ÕM·?›xLSD-çpÝ•%.äÙ{H´öáQmËzäíC·…oÌô42A¼H ©*´ œé=Š¥Ü'.œ.W2À¿WÐÕ-êjŠ´”èùÆb¢m–÷2ŒNÖ(’Ñ>Í+éU¢©$~.öcÈK,m˜ßï9qVS²ñ&¿€¹òòÎ1o! ½÷'¡Y¦[;¦ßp!5e4¹¶»ål„mÞ£W³Pµ–J‡ý±ÒØ y(Wý‹i±¦ý—2„Ë#JNm[¾¤„nSÈäT|4’Ó4‡çžFàœejËwëëòM5¾ä³®s¡Ôº½–  Ýh>b½ÒƒÚÌvX`ˆIùŽÌÔ*ìwGÁw9$WÑδpÆÞsÿëíŠYVÛ endstream endobj 48 0 obj 2130 endobj 50 0 obj <> stream xœÍYËŠì6Ý÷WxpG%É–F0šÛ³ÈîBC!»Ü²änòû‘Tz”,ùÑ00ÓmëQU§êÔ‘†Ýaøçö÷ÀÜÏ |Pšß¿Ý~þaø+>eÃ÷?nöySÜ ULß—áùÛðã†ç↓üÃŒ°2nF¾‚0œ­|2°‚2béŸÆwá3Ìî{3£\™eÊOÐqN›Œ› ð ›ÃÒJè²x†2Å,O¯ÇÙ? ‹ã0f$wT¸"Ú6'+9ä‡,¬ç6¿>õ!š–ÛèÓœ^Q;Â<\Åâë`N"¸wÎXé­â$77<Ã0Å/¸œ2¿>º=ž·¯=df=¹ßÿodˆã¸ ºDï1fÆi¥«+áý8ŠÝå&°xtqC¾ 5Áé„wÌçB ‹&»rrƒGrç:¯WÑp¿C9ê&¢Ïóʳ7|Ô~#Å êÌ87æqžzákÁ ÑÇ5l1¤ÆÒ{Qr߀Ago.%¿3Vr%9§é®6€2u¢*ÉŠÁ#9ÈrDrðANš\4½ªí8_¬§qVLÐù¥þÛdJ0Ox‹ëÜù±Mþ£X{h1'…â¤è‰%»î!~‰k²/ Ù„°‚'·¼6Ì‹E™µÂ Íà2ï6ʾ'QÂ|#¾\Y‹ 3„mhPº‘]¶ÁŠoSª¢æ&™ÔëÜË2ùšqA2Jõ€ö󒄃áÝÓÉ1‚|¾‹moð†Ý„«É3LK"hÚú“T¸‘”pÑÅz<ÄBÐî•lÀ.·Ùéj×( ‚¶q7¹âb£>Û]ñ¸ÏÛškÊk§wé¼Á`fÅ%6¦½ðB¨÷ôC‚ßèõ<ä”»íaG£=ÂFßLŸÂBöSœ¸â½IÏw½mv[9€ŸÁq¼‡ûÍ7{ˆ©D&pýeŽMfÞÔn `%K^!u"žûec"jô³©ŒFFSäF*ìɨ6ï"åd8 W•±s†Ñå€f`’Ä×d}L»$·„õ©ç¡u&:!{RòÓ¤îÓ6iæÒBB¡ÏT4mLV%ç}£[ v{8á:F w'aRLÊ©Kgtkž‚*caúωzB;2F~Þó&•³2LÊå<Úʓ⠵©ó6É›óp]O—,9@sføØÚWüœÎH))“Ê%M¨ÍiÒêššÈg¢¾Î¡§k¦Mm§½×-{”ôPƒ+WŒN=ü/:îÄ—æôœË/W;…tQµë]0½¸?®]-þ¯’Šš!ÕœÒI ’Pó[€ó»Áƒ¥s÷²sñiïþÿËúWnSðCG¯lã#áùÁ (§ ·B\Ó9Ìãì8Þר6>Ã` oÝ6£HÃýHg×Q\å ò¼twv/k¯Eï¦ÛæXÔvµ"ó JÞðL„ºCŽ-û?I—;ãµ[šRÓɃˆgÂÞ,Ù6UW½3ä–W…”s+C?áI¥ „cu²Âk¡$XðÑGÍ#¬Gn—oør&-QÓiÍ{}Æ|Ôl"m*¤RÕ«ÓMÛ€å»áj‹Yd•ø¨p¿¤ ¥'}D%ú¡¯¯öÛ:¥ìð ùëÌo¿%ê(JlnG=A°ÙÐ „û.œï¥Ûu»Vï6"й)Ó–&’ ¢ ãP(•tÝÚ¼»jç²ì$Pœg[‘‡ñ&: óî­ž¤†P¥¬ö®+?!"ßùôHÕëTÎ4naˆ´Ÿ¥uzÛUì!÷ˆ½6pRæ³ÇØ1Þ(÷W./aR]ôlîÊHè=«DP5XZÞ)8I€‹œ+q‚½?ä Ëó¤gÅrú#mÁ)™LL¿”°s9ÄM,ª‘î5ç'jh.XI˰ÅrODN'äÒµA$.”®·{ŸH.ŒÛ®šÊEE­ïé? .wp^€ŽÝ —§¨ÓStºŸ Ý‹¥YÖ1vJ4r½øEÆýáb"áÒÜלý{¦/Ú6—,dÛ¿åá‹ 9Ú0¾¹Dg5aØÝ€ ®·4+­À€™çŸ8åëð/;u_³ endstream endobj 51 0 obj 1566 endobj 53 0 obj <> stream xœµZÉŽã6½÷WøÀޏh-·ûÛ ää–I€$—ü~È*’UER”5=An[–¸ÔòêÕ£»›ºüûò÷¥sƒÒ—qÖ—¾¾üüÃå/õ¦•÷ߌº·î?Lƒ»ã—íãeÔîáa˜næòñÛåÇw{Qöòñû/‹׫Z”ZõÒÝ»~½êE=Vµt“¿Þmîâ›ÿnëuìÌúëÇO/—/0©éæÉÏÕõ“ÿ?Z·1§u_¦9 ÌÙm0öàÇý¨f…%œXѰ †U¯nýzÑf½Ž~ýfÏnž«ñõ~"÷6› þøÀ]­¤ÓÐ0š]¯vQ3|P~h6Ñn7Þ4jô7½®Ö¿ø;á–Íuð–ÛàB7{»»ý³*|§;÷”2«î`8÷˜+ ¯Óèc¼¦z¿ô‰²ðˆXQz¿ôF÷Á6¼³ê †¹q|6«ð>Œç®Ù%ιsø8F¶E?¤¿QûÛ:ö…óì,¸é—~êoCî¿CÜF·^û…Os€•ïëuöË{µ*=ùۼǂ'Ðød+Û»§|=娄 .ÖÁÖ㬆óì:,F…çê&€õ?p¹Á3Eëoa–„|ÄÁÃE¸/Îæ]<¿ƒëàÒ3++ô;`|  ãCÐã îÞÎmGŽÝmÎi'Xíæ,Ʊ•úŽñ‹PA@âÆdÁ}»o†ø¾ŠÄ ¦Ò½4G4yœsH¶S[|d/1…ÇSØ„„ xQæXÜô”‡ºé`éÛ¶§úá¦ó”ËÓw`¼¥Uò@²˜[Ñ´³céÙƒ, ¦¡ï™GÚêPìÇ£€`&àà†{Û FÅFV8j,Xޱ]†Xy§¼x4‰À3›_Œ|ïs0â÷nb`´;„mas–*Y ^ñ¡4¼y]S"ÅK3Y¶HÙ½KÎî«#gÛWj¸M¹¯Ž¡p3lÓ™b.K˜b´1m?=ân†£G¶?,C c¡d%f°gÁQâ zgÉò6‚ b> ¥5ÂÏðd-ïüë·§¿ŽEí±Zí«ˆ¶ «u};N¶‚K,. Œ•‘…J×§‚Ÿëd½}„ø ŸÔö•‹0T(ª!OZ'Uïe,´é2;7›¹,ƒ*jÕÁYdTKE¶CÁÌ‹ j²GÈ5ó™Bô‹zŽ5ɘa’qõRQÀ*38ÃRr§ˆÒ¬Ðö8vз1ëràÛÐȸi¡[óÞ©°à…²ÿñ¯Ï4@ÖæJ´y¯^˜xtÁú\•¾÷Êgc¼û—SY„š|—BŒ/¹g³É×@QˆÎcœeèÂ~‹ŒV‡]ا’¹í>cŠþC³bªX¬N˜ŠÃkÍ¥»4ˆåƒ²Jâ„/ek:˜1\Œön4ÑZÜ• {ϾQoX–0FX8 K+†#7Ä“Ъ©hf9+wló|×V®Í¨§B°»OAÁpŸm¦TëÖ4…]Üro; ãfšÙÄî2a&¨WR|ÔzÐé0ÑF\uÓ‹fœ‹þJwŒ fF·%Kº•ÒYThô(ãêc0.™ýô8è¨p~6>%!÷¿ˆ LÙJH ‚%&k úZ’´‚×ÌùˆÄ¢^¸Î"9êcÙ¾{†Ì˜Á-]aÑb“U¬h`¿§þÙj\…ÒÓá˜AǾe…Õ†¶‚ *ÄÎN¿fïuüÕ[ˆsȬûÚÏeŸ™cÿe™bà¦ÃÆöDŒE…¤bîÕyÌé!QšžMÓѺ/ÿYÌEò‹)‹«åhyЇ%vï#>¯—5j_Í„@R6ŠÒüª&TxöDÒð×Uo+ÕsÔ›Ÿ+ŽFuE«ó¶¤ØXDF$¾è Êé‚üWœ Ù  <Ìý¼[L$/V_ÛéT‘[UŠV^ ±à U0/ R«9 gÑná=„EÓKzîcs"½ÄÊ'—¥v^Ê=íîn¿zœ…)=ª¼­šƒÖ«“4œI=ω] XJ#M€…˜ -ˆ¦ùú¡ éÏöY{‚hÖkuy³¥R À¨Làs¼‰gç'‚’GNà°J„³þx'ܨBï":zM7lŒ‹¿9€I¥}ÎñLs’Ñ0¹ç¶û¬* ü¹¾¥ÆV=.ÆDŸõ’aJ³t“5‹'‡t¡ôëêSû ãû†÷F£!S¦¸S€Ô¹Xp ¥ª~*ú3Užq:&Q’2 ¸+’O<æÈU·§ÛòöÉ-­T2ßskGöÍ”¥®Ô1ȳ¨6”œÝ—Ô§ÀGYSô¼{géÃŽöd¢ò\ºnñ’@‚l@€D‚À¾9Õ“¿æ‰'.œýµ¥Il!òãA¡/Œö½p!–B:µÉÀàŒ\=c™Òmz*š‘cõ±Ä]¦Ác‚‚B¼ET¿P‹µui¥XÌ8WTÁ¡õ›—šþcîéT3?XÓv=5áÁ/.b¡&¯*ª%‰5¦l;GÝüaþÖtŽïyâ,ñ[Vá ìcé•ÙS-Ò­Î[&veCìpÈyA ‡àÀvôôJárüS­i.’Zú¶<߷°_¦U ’PŽÛi/âð!'L5Ï4éR…Gy™!¶­þº­ÆÅ²3£ýÓ¯Z!~Jµoºh´õ>ôlõ-6Èï{zQ¤Î5êË1H†·BdÚEìK>upXO²gB¨ˆZøÑûæÜ¤–ž¬W9+'€Ój§Ú¯÷F2ʺV©iQ#ªâ#_.ÿwϲ endstream endobj 54 0 obj 2320 endobj 56 0 obj <> stream xœ¥ZÉŽ#7 ½÷WøÀŽ(©6À( Ëör ‚ܲ9È\òû‘HJ"%UÙ=Án»-äãã#5æ§ßþ9™ðo{š{úöûÛÏ?œþæ«æôíÏ·íãm²áÑÉ,—ùôñÛéÇ/öpúøã—«V¸Úm=Û«±ø9ùÛêÆ+lƯþjÆõ ù–qtÂæïf‚iuWðxŸž ž¯Ñm·Z“>‡5¾ºž—£ñðÑ‘*RdXÇœ^ƒ!lJ—ј.)ê(Èr:³eŸÄ Àe¬cEä<šyëÚS³MÎÒÛbœ ß{]#^[„çê UŒ!3¢"’5yÐý¤*Œ(7¥¸êÿ.ÛTÀù\lóxYªè6ѹ`ˆ/qE7âÜh—£{Ÿ¶FEŒ%© %` Çb¾ü<GSÈþmzƒ¤ùLx@Jº<%´![<«²¦¡ÄÖèà4U«)iL™-{(sáÞœb1y;o·C†ŒÜv¥UsÞ¶/Äó0L—¡æe4W F÷¾æy—´Ö‰Hawžw<Š“ õí$È?E{“áyßBšÄ¥Eá/U~¡9Í%·¥4­e)¡eOWyAéß“ogS…¥c2%@©l ѰMòi Wžñ+æ¤mÖéð‘û3÷ÃÜÔ˜Ú„LQ ­›†žÆWíGûÆD×$§IùCØý•—ûºµ%÷À ÖS¨º°€Ôo),•=òE äëØ9ƵEƒE¤ Ò0Íð¬t–Ô‚¤žµÈU”˜E!Š»,ø+¡A{/fÓ2KŸ’ÆvcÔVUç䳎~†\ºrP†oôÄTUsõ¹õÐc~ž›J¢[»a¨òµ˜Ì ®Jw„crd]x¡Þ²d3ÉÐ(ÆOKÕ]µÚà—J©ŒÜ_ ª‡¢}¤~’R¡ò^OQèa²+â îXÐø©¼&„ð‚ÁŠ¢\$ýu ÷lz ²Î¿õv)\‡$bU¹ƒˆpó: ²iîZ½JpO+8=Ù¢‹!íÇÔ5¾FØ¡p üq¨Ýzì¥aiŠJ-ªiˆ÷i’öΧª§$é-âÌq!LéÎØ-¤Pp4:^û²,Ã×;2åvw¼CX’bÏ;‚:°óõiºu)læ>J§spÀ^Ÿ³$žÓnq°}Š`t–:r: x-…Ë¥–rºè.Œà<¢Sv‚Ü4¦Äà–„çñb›Ÿl÷=ˆiüd†¶zä5öÅ;ɵáû´ÉÔÕA*›N2: *}Ò¥›,e0,¥9¯ËÅÑ©v¿–=ÖÏ™ÔM•@6:d>TÅ’uJö-<å ·˜¦à)P×=éA¨¤TzžE$ V·²ÅABɸ;ÜöƒÔQ[`ªV«„Ž:ÑȆe ð”ôU-Ö¨‘Mo8!äˆ6 ãVí…@sÓÐHa§'X:m‡Ô.VEǤâ%w[²Ìp’&úêÐ šÈ£ñu†ÇRÔYG<71ä=…ß¡Ö`u¶bDu"šZBÝc2Ò´o¯ÝÒIcl[g]ôò‘ʱ×Fh®Š:ÉÚa«å+1ßÁôTñ–l£6Œ«-ªS„¬SŒšF5íJ†ÔFÚ•Ä›Ð@LÔâdÉ—¥Ù‡ì¡lbtÞ@ÔT¯ÕL²yÒ«P¨w?~º…áܘêÔçêhÎ=F:|rѳpŒ íùÌN˜ –E÷²@ï6Þ•ò>rú˜¸DKäþ!îÞŽ«’N¥žÊŒ±OªeþTµœ×šê²s jáNš>v¤©Ý¨+ÅÞ¡E©ôŸ \9Ug83ÊÕˆ­ŠÀoãxõ÷Òj(Bà0ƒSÓI8­žÕ«©"•œìíLPŠízŒò¨Ÿ£ÑÚe×Lwè2»ØöÜî¸Vì4ÀûÚH"r7 %@äêÂw¡Ÿl®„7Á³ÑéÌ15- KÙÙGtÏÍÉX¬çN›p׿|¨#š‘bQi׿蕯§ÿ —¢ endstream endobj 57 0 obj 1971 endobj 59 0 obj <> stream xœ­ZI‹ì6¾Ï¯ès ;ÚlÙ` Ó==‡Ü9„ܲ@¼Kþ~¤ª’TZ,Û3=ýÜÖRÛW_•$nòòßË¿áþR]ì¬.ßþxùå‡Ë?þéM‹yr1Lþ¯5RÚË·¿^î/V¹±ãloóåã÷Ëïæ"õåãÏ_q_¯rãªaW÷M»9âÿ¡ôzÕ‹”ëo?½¶”û4q) K)¹^ݤÆÏ “ŠÙ/h×aøip?ɧÿªðÁ´^Gÿ²{ã<ÖÑðƒ7‡„‰ýO4 çy]GZYÞã×ÖúRÒ<jakâàÑá|*ÐY®!øÇ2Ø›E…¨ é×°èè7¬@ é ‚Oý‡–´5/Ub5‹´~œÁ}Z7ÀÒØð»^• GønšÞïØÂ4ÎŒ0-RC=ÊO¤îðˆVD¥eïöà*ÐÆ +ð·É?Rn£BÓ&a}ZºÐÉä i¼ó˜ ¾í_”· k&PX–½á~ºÃœÎ)à¿}3]iG£LVÛ`àå¶P«8“¢7ô ƒÔ;Ì ‹¯œÞ°Wô¼ï8F©- Æ_£ ÑGPF´n"ú¢(5óªèNHœÞ¿K"¢±Ù†aêɤ$wë›JM·ÒXg,€^£É–¬Á–IþvbÄ@Ðs–ÏÃïX`Ã9W&îÆ‘ÜH–ãöäGùT_0g×ZÃ|%’Â…CJ<­é±Ès'‰ú99î9¢ÔW(apÄ­ÅR )‡EÎa«‰spjyŠŸ ÆÜ¦ÂV_ ÄN8T/ä"ØP›øœstqß-‰qó×¹Ú]Ciá>ñ ¡p^|H4Œì‡Ÿk´–%ͪNxÂßc®K)š& 9å*Ã&ËW'4D+6@Ž=­Ë!”Ýß'<º«™YT5­«™s^‘jÃ;ùTé$ï©ÐhäŸÝ51§ì‘a¤}ð©ˆ{'«©t5‹·KW=| @ûF²%Û.ðê´2­Sô5%%›qÁ‚¼õsȵi¹¬Ö=¶¨ih¹Ð¦çfÿ…Rj)C5©%yØÂÜÉ™ÅÀ[ÁÍú†å—êÙ;ÚTØŠ‘- Ô…d&vè)ý†/S§Á$*ËKVÌ$§gªx†M“ÔeÚΘµ¯CÖj«Q¨o3Ö…ë)تñk„ GóÐ ¾yzæt ¾™7ªÅ|zÔE°cû@‹·ë-¿DÈ]IÕ‹*¬lb®¬lL‹füµ@‰jõ-¥eU¥æµ'çÇGÃä|«"ï_¢¦óò3H[§µlw<ªÜ»`À;xÿ!v³¶°Uq*YõÇœ!Ä^#iÉ<\ÃÉÞSÓ"}`†ëpŸlwÉ`c¶×îÜ/›#)XCÆpO†w Y¸«q€óQ(T.ŠXìšSϪ®^ÉÐÙw uÒp0Ð3¿V¬}ÆN•̬QBt°e0%.q§)s ÏFZ^œ#ýI¾¹µ¹¿õÍdmU¸n:(f4–³à1]4œUs? 69w§ê¸x'ßAÝñO}=p¦õT•'{ŒL¦fV ‘vaèbsq|Ö”$ÕÊ¡Y=îca© xýð©V;+ð@ò5Â8DWgŒ‰Öl Â責c¤ó«•®j½J®ê‚¦oÒûχ`ÐAíH3I‹yKB¼ý-ž•þ¹U†Ÿ¬$ŠÛÊ©l³Î§ðìœÓõ.J c«²‹žV;,¼é êljÓdý@%×Kî‡IÔ1oá?wˆ¸”Ÿñ]?ÿN5Ȉ펩˜ÙP_3f²Eyº¶R³©J·n R‘»Yƒƒœí¦fB nžæÙÂgòá¡è–ìœé/½'ºwÇøc Ù+ê·±2;¿¾½ì\•r}à<^÷AÑŰv1óJ×FԱʼnÒfS?rŒNŒFŠ;∛ÌoÓ€Dx;¥ÅÆ.ŸPƒawHõOÒS¼“{./øÐ-žúnF"ïAD¸¯dš3¤K=ñîO¸Ôƒƒ‡—z”u)u„ÏðRâ´,©Ü{äöϨ’dîs­kT©N¢Ùçä0Õ¡l¿¥Uv¤3®Äð—8{†Ñ¡–ÍËþ0˜5Õ0’`mýºÂÿAE}“¨áàaÞ¡ò%d»1Ußìè¯*QD»Åtôl‚Ù + ª ‹{ã›ÊôXnmã¼£¬DT»xZ»uæÞ=WÙÇa)ꢨh‚`¼ø8ÒÅÕµ®7}¦sÚlŒ3~™îY¸°@\ ·GbA‹`Þ•ZNcu4V$í2ò2‘æ} žsR ÏÃd÷<×äu2Ù¶ÊÞ¨M‘I›nèŒyŽåUWL¨CCaú¡ÇÄ$jQúf²²]¬ž’Œ8ßy“ÂDrÃOj‰l¦gÏN‹ƒÎ ƒÜ<ž)!PS‘_‰Ìo¥íRõî0~ÏÐãSNéšjë˵<¯aUÎàîë¼Û)•ºLî€CYo);ר–ÞÇÖV+—ßßâ-Jt6 Šé7Ksÿì²Ìuòt¯ÓEÊùfÞòdï:}ëPÜÓàû!Ž´=­).»¼q)HJ²‘¥³îu] ¢Ý:+`.‘M¸Á¹ÍåEcvîÀswh ìWO¶:cã@V\†ÚêÒ¥£ÝÏÇd”uÍÕd|GmªœÌá¹™¨¦ÍPtk&-ýÍÎj¦E ñ¶~üC~¾ü–õ» endstream endobj 60 0 obj 2373 endobj 62 0 obj <> stream xœ¥XËŠÜ0¼ÏWø°£ÖÛ` ãÍî!·À@!·< ‡@rÉïGR·d=lyCXØ{¬VwUw©¼l‚áÏí×ÀÜ>˜™¿¿Þ>¾~ú»“`³uSÖÿ5À ¿¿ß¶ÇÍp·VÏfš‡Ç—áí‹@ oŸ¾­ÀíÂæuä <¬ŸïoÏÛÚˆ,Ÿ$Fà@ˆ Ô Z-`V±p¦ÖQ/Ì0¹Ê¤Ì X÷½»3º[s¸µº-õêp· üCÞî—\XDáÊ?’åÌÝwéct†.8­ ‘BVŠöฅ¿ÇܳÖ_† JxÏ(²q_r·û=FY•u„,}jìîkÅŠÝ:> KžÖqö‰„‹£!;\'®4}‚´™LEÖ‚…Š„ŽL!’/«)ÒÍö.éñW9цjªQVˆØž=m‡¤ÐCwB&r‰{a‡H‡WÚì£òˆ¼øk àoP­d©PÈö¥äjî07+ÜÞŸ–1LŸ %j.B¡!Ôž7R ÷±³Ï …¶ÃãèØeˆ(ìšcÇôûй™'C¨%ºìW?ò1ÜÁ(.0~ÆÞÀÞÊ>†1ñƒ5¾n²¤*6Ú!dù¨b…˜}Ø¿¢ìû„q;Õ”Ih0p²í``ccÆ ª LÌD˜Ãˆ]ÔÖ5¥©*„¶m” ŠfòácbË™<î]ÅËJûæà>ɸ¶ÂˆÄ·˜Ù¢ô>; &]±ƒJÛõ¶Z¿Ù~,xÑ :ó–¯3•@WXG,ñ„K³Ö¡3„|ê¨=Fs¬¬âYDÝV[Î=qÇÁ«y”•ö:Š5Io;òRµH—65Ûh;mg8ü»Æö¥RFNÅÑP6‚Ó§IÊÉÖ‡v¦,-ü4òžæ‘îÌÎô¤éí™À¶ˆ_(iS „‰›WåŸéI·ÜYÉ¢àbš]ÿ¤xöË-g 7ŠPÛP}èB–¬j:ù$øŽ\Â2J§|Wb]f±¿¹ÑͬàSn­ô>&øjRÈ}¡öñ:j-·»N‡~ö¼ƒ!¹§Tâ: «¼‰„ùÜ:FdúljÞ¯_N«ÆÄtÖÉ ¤øp2ao ×^¥©ürÂt}z·êÚ¶góþX Üü *Û¥bûŸ—ÅXóê[£eÂÛukôgíDôÿ©ÝÙÿ'ey(wǦ¬#ÀÇG·i€2×_¾Lü— çkåé2'm튱°Ò¯[x­ã„I1šiåÄ&wVì$On¥KTØÆ¿{Ïe‹¼.*à[iÆõúøK> óÄ endstream endobj 63 0 obj 1115 endobj 65 0 obj <> stream xœ•Xɪì6Ý÷WxhG¥Ñ#°oºÙ=hÈ"d—²ämòû‘TJòÌ…î¾R•tjPM¬‡î¿Ç¿sxgFÞ}ÿãñËÝ?~µlÜ—bjðßF˜îû_åó0ÜñêÑôc÷ù½ûñ-;ÝçÏ_'xÛ'ŸØhÕÄxø),Ll¶O3±ÁòDVÇðSºŸ ¬™¸c¸`ûüüx}ß"@VÝ<ð^âͼ7óŸìÓ1ëˆwk¿Ä Sîb\ û ,ggVN| „H®ìS;rXÀ3xªI@Ø1 *G¬-ŽãÊ ã–Á_†âQN89¬Ï(àn?ÁEXHt<Ø“¸^‘r §F¤ö„ðåî3ÜØ§òäà4ygxž2Û$ß¿KŒÑ€™¯ŒJ\è…A—Žr@I=Y 2ÇÆÓ¦7ñ/\ÊßÞhøYì@UV}ŸÉ Öþ í¢,’¨´ ÂÔr”À#‹)a¹âfƹ“ȧ,ÄÑX+A,ðh4Ý¢|-xм ¨Ù½PÁˆ á4¾É€äÐTJ´¯ U.@¿ÁceõÞ¼lhÆèBÈä–ÙÚyó1zâ#ž²z.(í×1b>ô-f¡Vï9¿@¬`™¢6Faä^9®9õ[–}\(_{2ÌËÄD¯Q&…2yu}þÞb6ÔY r°š k®²ãF\ V¢îƒ›þT9H4{OMÎv¨Üæàhù’Ë¡n”Rº¨ÂQyˆV1šT-r.¡wÎ!)Ùó{ G†´ñäy|}¸ªbv *w07µ½ÅpE«|ìÕ= GÑêRBhyËÉ“zƒ³ì97=Ëd?Ü[8ÚòDý½‹ç²¬É¢S´rðŸwÐŽ[hƒúi6%i b"/'³K ‹¯¢¾áyíŠ+šR*yW5U8І(W…÷‚©ªåŒOIÏ‘ –*œ«È GA΂}VÁ{7ѰQIõt@=»—l2}ã/Hä›AÉ:4^›jNÎçŽÐ1†m±'詈b€T%\’p¬²F@ªËƒÌI£Ù8‡¥ôÍDO8J- VŽ•¦ü嘼b~'¹¶}–.n8±”+—èKÙ$þe¬Æc*âsAÜÌÚ„£ ‚%?{L$%² ¯Þ¾™›9œp€Òr ÊµQÿH"PUÍ]ZV¶Á{*w}ó½¼N8*±Ö‘}_œ(Ë!ƒ¹,‚27³=áhJ“¹}›J•rþH„Уp!Ö ½ôŸ©€Ö%’?Xl¶f 'm)¤^+'=Ü]Žcu1zôç,¤ˆ-Tn›±}§\›Â„˜=Î8"€¥þfnS7A`š8㔹S‰q®q¶2ñ ÝÇW¼ëëdbÁaX×/?¬Újªai‰³88ÁÁj)ÎWŽdh¦5­qÉ4†”þ*ÿ\ ‰°´@ë7ÞdªóÚq²‚¢\›ºÁiSi—“ï·šÙj$/Œš¸ëƒÛ²ŠvQeÁÇH¢Žê˜G%dЂì«Ç³5_@‰ˆá³g§Ul”å¼Vƒ£å'?yÀ¸¥x‹$u]ÐΕÚ]Óºpô‚ª4>{LcQ„\öÇ5|¡®ZÕ/|°r¨zñ¨Ô½“øöyuÒL˜œ¾uÿ`æˆ endstream endobj 66 0 obj 1245 endobj 68 0 obj <> stream xœ•UMkÝ0¼ûWè\°«•d}€įΡ·€¡‡Ò[ÓB…ä’¿ßÕj%Kï+ lË–fggFzrñ6¼‰? J¸ Äëóðí“ø›ÞNZ·YÎ>Ýpâõ÷°îƒS¸Ö7±ÿŸ-ö_ßõ%Z¹ÈGµHEWñb",òG½H—5^âýë°íó¼W“ÉðJ¼ö1è\D 3"ƒÎð£YÀ&ä\tŽ£ÅRüÁÐ;>Bp„P„Q¤Y묡ESs„Òœ’Ñ,j-kŽl©ï$a$¢iU‡NìW|¤Æ•X¡.!R}ÉÔ{–j1!=–•+vT›´X‡ç¯•wâ*¨@šÊ2tB…v÷ݰnrgnÀVˆr§!Ïת¼-/R¿ãœîW{’Û­/ ŽžæÃ”eoJÓ;6/û_]ºÆ‘ÈÐ"}Ïr_q•ð‡\;êê÷¨8=ô¼K8Õ£3÷¸ÌÿŽQ³>³Éhj9¤t7êUÔæÈZŽIIÈš“L¿„%9YàI‡:7\¦ñé~ÊOç=(Ÿ5MkÚÿìX’Ó˜÷qûš”ܬȩZ󇦺™ifö>±uçdÙ%ìA³¨ó ßÎYÛnç"ò¥-¿¶úf£/]*ïû z²ç~>Òžn:ÔÜ‹îš"å ×+N¦4(>NÚ3¾i$Ÿß‡Çm¢û#×)“wj“ƒn÷gš÷s¬¼ÁƵ¿ìÛGã»#‹ÝBÒ`&u‰´€Ä¿ÏýO^ò$þF°¨ endstream endobj 69 0 obj 594 endobj 71 0 obj <> stream xœ½ZËŽë6Ý÷WxÀŽø(†Ë·ï"» dd—0‹&›ùýUE²Š¤h»“4жõ Èzœ:u¨é¢Nÿûßi ‹Ò'çõéÏßÞ~úîôßxôb&¿†yš×øé¬RîôçoûÇ›ÓáÞÅ»‹?}üzúþ«=)súøýç«2“ÙÔUíÛÙ\áëäâ¿ûf¯Óª÷íì®Óºéë® ç–ø®‚[ÕöËÇoïo?ÒÜ&ñÐU_,>TŸ”‡†!Ãz[®Óm;Ûø5PKÓ†'+ksÊmç9~ÂQ5oéR¸krzŽÓˆ‡'CÇà‡ c…ÁñZx~×;Íâœ)Çv›Áð ußÎ>ŽætS ïì€Ti˜ãÉ® ·%цm¥³%åg dI9Z߉à2çû¢Kƒ ]UM0Ü›f8vܼ^–Êq&”{_-©J–xÎáè` fŽŒgó‡ ³ÇÞF’@Ì[§²y¶0[Œ5­ “<Êü1‚ˆrÓ¼¬‘Q#/¥cmô|‘Ž V^ß4VÒoŸ6K!ÇI#ã ƒTC÷xÓ°ÃØèãr.ï¼8‘³ª÷Ai³ÌåªÉò–.-zS§ík;5Ò1¥‚às°ï×Küq7¥«å¡«?ƒC':ߊÓJº{9 䫳LÖzÜ@•WìãP"ÍÓÔ°xW"sб…ëÑOEй ¡Ö8¹4+›šòòf hC¹I¯6 _íÞ^7»v¶ÈG2ʆâ׌tU“¾mÿÁ[~<ý:þ‚ endstream endobj 72 0 obj 2374 endobj 74 0 obj <> stream xœÍVM‹Ü0 ½Ï¯È¹Ô²;†`˜ ³‡Þ=”ÞÚ-ôPè^ú÷kK²­|Í–öRLâȲ¤÷ô4ªƒæ×åg£âÏ‚nœ×Íë×ËÇwÍÞUÍë·Ëm¹8MòÝØ,_š÷Oºh–—OÓ`Lf†úÐêIŵŸÀÓ !.6Z(Þ£]zÑ74Å-=Pü 3ïƒeOÊ¡eØÂ­pÍßmh³÷h»õ®œÂãt8}M‹šÊ=).ÐÎÉÊ™Yy|Â<Ò­q'=Óà‚áJ~«*?BÍ'¥•(q·9Fç̰Ë0|^>\îËåù2뇸®!£`záãÏýïX`+ ÄwãKø1ÁhsÅx1>‡Ûú)YÓJ_é­RX˜7ZS¢¢˜NÚ‰}|œC듉ÓÉEÁæã‘U×o<¹ã`X×(´.7ELÐåê'tÈ\K¿pÕ6¼ Êí[íÏ9‚ÖZòÙ×"ìۖ¸¦°´Ì)㔉g³A ÜæÞVÕÃÀ7cVpTLV"}E éËýX^l)âšX­^3ë1¶vèܶKÿ…Š9™~l Rú`…|U;ä‚¡/VôˆÛYc*AV=9”VMù Ár)^ˆ8W¡Ò63âXQ\Ô º÷„¶1%–žÌ.Lj ‡ªJHÊ1¤çÜ]e-2t(RVÉnfŒó,°‡š Ó•ê²ý%ˆUxʉ lVLÅr‚ð4`±)”-?ãµíÀ@Š´ÞÔ´QCª‰—.+ÉÁÛÝdlg¶J¹e£MÄO,vZ`dâ«´UMYlÑr\·’¾ŠY°2í{ƒWyžoýjŒV•›E†ÊØ-`bLEIÇt6ÿK/ëéK Z&ú±¤Õ±_U5›² °´aá|%™„NN6îóǨièìµHˆ–sFÎ&в~‰*¾Ê‡ºãØ£Ñ\SÃ6$f0ä?Ÿ«á%.«ê±pžeªÇ>¦jÆ}¦cèGÎTöáiÍ ôÞ{š@é9,ßéÈsó_æ… endstream endobj 75 0 obj 769 endobj 77 0 obj <> stream xœµZÉŽä6 ½÷WÔ9@W´Ù²Ã@»§æÛ ää–È!@rÉïGµtÖX0Ÿ•Ó>ŠÆÌþê•CpœO¥TönK¤ IáQGú-‰vyµQ™¤?:†ZÚÊDo«Ù?Z€Âõ而ÊDzKXyÒD ¡‡SJG³ØÕ!‚#¤ŒEÈõãÖp)&Ÿ”gÞÕ'/'ÙÒkk‹r$Q…ûuJç&(är1ŸÜ‘>€XµFïh‚BØ,¯†xxR è‘E%g쪂?B|f­hDrÛm–žõ™vHXô–^ü÷=ã‘5†iº—öHêyÛ0ÌטÚÝXRCr7ˆJ1Àù䤳{}wÓüß!‡Qßǧ`3΀(rØ%‹Ð±³Qâ¯{Œê%‚~’µ UdȦÌ'Òl¶™œXV9] LP|! Šá rcG›áë°d-Ù¦’ƒ°ˆ™îs Å z #wõ‰7¹÷žÀW”/Ê›=ËÇÔE‡å‘C´*sWÏ¡5Ï´®Ê.òa¤c#å­üð\fZÁÝ €ø€ƒžïO²ÇÕ2¦$ÿ£¼a+£ø´Ju7Œ+H‹AÒäõ²!nj£sV§?¢˜ïC“†øƒçô˜¹“‡Â2†ârªÒ$ô·ÄIÓp*b<žAè” àsÊN)yF“”á73:ïŤ«ýÅ¿WH+)-Ôñ+Pú1 É2¬gëå.„ 3›ûTZ©– Üm/2Jƒ°!ÕÆTß`ÍeHá¡mÛ#ÏÁ}²Åœ®åªS9±EXg¾H§Ëå+bصX†ÊÙ…`²Ÿ`UÅ……ˆ9çŸè”µ^¸›–„WfAÁÂpªžO|‘ÿÎÚãk¡f#žk빟FdÚh.ÿ³yrù0_dfꂪ<°¤ºQX›s}É ù~=²*7P3*+0ˆ¢†VÏ“b®ÛÒžÊÐbÐV ´Äƨ¯òN 5ˆª¦lù6üF¼­‘³Ÿ[{ LÍ> stream xœµZK‹ä6¾Ï¯ès ;zÛ‚Æ0=3{Èma ‡[C {ÉߤңJËžÙ°0ÛÝvÉ¥z|õUÉìÆ/ÿ>ýsaîŸáâ²XqùöûÓÏ?\þŽ¿²Ë·?ŸïO–¹[foëåý·Ë_ô…óËûwÆ·÷¿žÞÞŸ¾Vœ­TB€Ä/wõ²‰å.Ô&îLmWuzã,~æf».w¶p±©;s_x¹Àï\;!.½ä’~¸÷E­›qwŠí*î‚©E®›´QDù A‚ùïêu»®þ–·Mû¥ž·«ô7¹¥žýÃØƒ-áFñ‚a ÷Ñzâ¼Z7h¾D±e“ñâŸæ,jé€wç®Ø¤?Ûâv“2 lX‚Iø/HÁõðCÜô³·ZZVVðÍ/È¢bîŽ_ß{ÍXíþR¯9‡ø'JXv·¬ôOîy´ü⿸¿KÚ@Øq±(Ž÷¦žÒwd⢠öLëð®õ;>÷÷pÖ¤Æ$¸ëÂGÏ8`•EA2Ðtÿo³Zn÷o…¤4 »©SI‰$PRŠ×à¼ùމân…õ7ƒÝA]Øyê5¤šË1'Ù{ ]ެA’MÏ—¶î×5cÿ&W¡ÐÃfö&|˜€{†×)¹†2.úoµhbÀ›´¡ý„Ôú¶Ô ÙA”nøŠiI~.~d Ò¹ÃtùØD¥b ‚%ÉçNª} ØZ—•’P!{7þæ\–BÀé¡>Ô„­“‡;s4ï©E¢d~LNwß¿ÌÜä9‰!¢qPYc6ÿ‚ƒOööZb~^À‘ʼn>®XÜl¹ÍÓ†èÏÌ2涪…ŸƒLíÌR~"2²Ÿ€‚ÇÆô¿ª^<·0tÒFûP -¿™.€x" ‡ ¸·@Ú˜›=@H¢æ}ë&8Å-¹ÙÔYáÝZN¿òûº«Kºˆr=ø4ä0Ž6Ï^(½ÀBx9WÖ<C·®;üdP>K9ÂÆ'±¤ÅMT^"ëumåtyl+¡ ño§¥ðOi4ó{Kõ7þlísÔ¯ÈX—ƒLHòBüåc_êbØâ§0Êá ³?†à`&iŠxAòŽÄËÙ¼ÀðÜfL<$—›®œV2VJDÔ4/Cø÷à¯3¸ _:¬°®ÊnPJÙÖû^=åÂx¯,òxϦ•¨ ªT–tÒx–î Ó7C0p˜ ¡d™ªÏ«ø1æA m(R!  Pà ”•Þ]¡ û¡¬†«‡ö²ã@p‡^›†¬ =œ/&ÕÍAÜq±x¼M .y.QǃÛ)Lƒ5¦±ƒ"9Oº ­öbÏìc[L y2%ähˆ1ŒqØò[¶‹De³úX({ొ¹%¸ÿµîVÒBÔcâ‚×âèu:™ ¾„}ZêƒÈ?µj»„IsÛtÃF¶×c¬(M jzS,ßCyðhßô³°’V¥†é``! ZR…€¦6E¾Î4êxÔ‰…Vn9ò©âĘ.#´z44£šJü_…n¡HcO¶ŠH[Û‘2ñ¹C±ÏD—‚;T*4 ÷D;Ç Â¨~2ö)È> IW‡Fû¸öªíÔåÊKïèîƒ6óÆÄg:S¿e»êÎØ-ÞC´ïVЙÅÊw~ÁÀHbl`µ‹Ù4—ú†¦HÙº‰¡ËPà#––ÙŠÓgÅH@õ+K‰#Ï jîs$aLÓ—9}ÐpóóͲ¹§O­ÅQO‰±§£Ÿj£™fîö N£‘"l× qYÇ[мtžPžÂz·Î—@C?lÂP÷òýŸ¡ ®±HšÆ1J=oŒæ¯³4e4»¤¤ SuÚmúb{X¿È®wmòQJ¶ODMïqÀ:iD™0wã+t@ÜSÏ>9°úþÜ¡I±ú½ ?:N‰f>âëÒôI‡"26n(±éä‚ç |˳ñBÈ2’ÐêÜsåPçÕ× rˆ[N %·ÈwùÌy‚E܈“-’øTK$â¸9óJÓË8Ga‰)Gƾ±R8-ºhdöÀ 4ªÏÓ>Ö%îÀï$ÜÕÚôFß’>…=¹Û'óòþ,Cøig»ÀI©‰€¨ª«$JO4­M#Dt2_††ªMò™W¤lOÈF(«Vºê#µì¼q¦•ŸÁSûÜK”H¢šýe*åþ“,¨ »ì½F¿f:-€–Ç ò]4^nÞ§(|¥¤ñ\‡ÓëQe€&· …Û!7ð¾Î'&‹“£cÚ쇞UMƒ5<â×ù|A¼‘Ú›òƒó:4 ªî½6ô]Þ±k>¥.=Xö-srŠÒôÔn÷D”£À‰`T?`ABÈQ¸ Ý%Ö0qX¶â¶ªÖ¶´W’\¹Ьtg/œåþzùí©{ endstream endobj 81 0 obj 2083 endobj 83 0 obj <> stream xœÅZÉj$G½ë+úlèvn•YMªG:ø6 ðÁøæ±Áƒçâßwî‘{iä1u+×X^¼ˆ r£—žþ¾ýORvQ»|ýòôó—¿ü·äòõ§ã퉒UUd»­—·ß.?¾² ¥—·ß¹S¹Ó;;ö+»f*²ìú?±_Žì2~OÕÎïTØr¿RýßÌ'j&¸?Øåôдª›¥Ç+ð}ZÔÿ/wå·´CÜŠ|¿J3ÄnâNÅâ¯ô¡ÿ¢ºS¶ºñ~œÒ'‰ë3xÚ´´þõìía¹ûèN¼êoüÉ6ûÆÑáP þÌà¢v®ÞÂ~¿ÿúöÓÓËÛÓ窂ä¶èŸXAŒì‰ÒÊ™möJA3þbik;”Ó (iy§¯I,ve7úÑ:×F̱¹ w¬ÅëNèþögç"iF²´¿µ¼{™3z¥=GÕë 0+±žIp­ˆ-³;«.!ÈûdÅ#vkÂñÆâ“žª?s³Ä’™"°/gêîPþhv«CKñÀ¶%o—`¯I3VÂîúÊT9ª> Ó,™$c¯-ÒìâçØÚ²ÜT¦¢–;cD€P\“ÒÜ׎*2œKî½Á¥Ç¾ C£V~ïÜϒ׳5©‡%y! Ö×è" @\6)‡"ôq~–ï ¦]5h¿¯ ‘CAS =d.,¥­3¨ ½h¼0Öˆo(I©7“o…ÀÑqŸxoyŽ~â@Ék†óùدÛý»@ÿ@=LÞxqƒ`Aó˜É÷Ì&P°8ýé÷*ò›%NB¿bú–‹’·-G‰¥Ô¨—;]ÌÅa°wº¦ÐÀȲ7 Cªî<;ÂjãÔ@TÜdV'£TBª"{è××*ZÀÔx`¼ƒ€Ë×-¤Œ“Ì8pä≨‰Hwëx]5Kdÿ‹¸ª k‡ôU‡Ö¥Y¿Õ¹ ¦Û¢¾½rµÙäÿ\Sêá4ÿ 6#(-(HpÁ1Ð’—÷¢'åÁp IŠìûƒÃgòßS²ÎÑFf`3²ÐÚð%$ʳh“fœB›q"IbVÂÚ̦ ì;RuRÍ7`qaQÎ3FÎh™NO¸I3™ìR%¶óÇDÀâFÉ’£ï¡Šâ¨MϦ™» D¿Ì>ÊUûú!²Hˆ‡$¢a'rέÙJCJ7éÖ`pkç´Y¹‰ÉÍG†ëµ£¢FÉ:¼O‰U_¯b/³¹>ÞÆž*§o±LüšAUã\ˆmäïž' Æt‰¯kLLæZÊ‹UéÃ-ù† 7àY‡V.ÕAA“¤ò¾6©œ­OpjŒÐû ›ªBŒ ˜-¬|Õj<™Z¡Õݩ̹›‰zæÉî,¬UÄäÙ§ #eíªW–N ž¨ÏCY!|ÿ:ÕP@EœcÎǸ*²ÆSò7jæG^¯ãQ_þ‰r£>2‹ý`^É(;™Å‚ yP7Î5<+*½ºØ&¬­ÄãëԵĚà5çö0y§743)Ë;£ äÏ ¾ÿñƒñ{v,1tHЬk ¼â¼çž¨¹ ï4t[ˇÐ$~hÒ‰Io†'@¥9‚·\*(Ärm²Ð°<»¶éis‰‰›…Ñ 2ç ù!Ì}IîT½KÃf' éøpºt±O¯2öï³ ]­|æIwÀZoJ‘sÓ#Ì ´ø]æ,N\@è(HI~‚ÇLgݨ c1‡sVÕÆûÔÓ*Ά×Ig˜Là°ŽäZdÎesf¥ã¦ E m§W-•,æš~+ÊÌ)ÙÍöñ¾òØ9Ñ;ZöžÀs$H@"ä3ÊZD™T#\ë[•¯áÕØòÌ[0Ng|¸ïÕG+)P«Ú1æùf=h!‚û\+–þ1‰ïô|”À·²6¬½3Û`™má³Î"ذ‘u@è ¥âd~ fÀüº(œÆ Ø&M×ôË×=©¢×ÞåŸm2¦ÒmCÉÕ3üãT‚àhÙU²Ôªu³‚6 ‚1´«°Èº"Z!d®8K-Ôe+f€™W_PßA·M­È-†7ìq¥»f®¢¢vv¦ÐFî¼ô8`³Y g³pãÃ0À;à êIR yUôÕµ.Eš B™§† ´Âã¯éuªýj Ñ5Ø^jG˺q¡D…@ŠæÕÐ÷³ñ e\z†¬Ô[,#®¿Øn,‡a“ðï8)È·:(gòlEÊÇÙ ‰›vŸÊü‘ÞÓôY‹mÈ óÚÒt[ݧÄ¥Îb4D½ž)5;’€ñTP.r߬-=Y¶çk-­°UØâ²ø±îb­e3­•¸Ž_¬\éNäßçË¿ÈzS™ endstream endobj 84 0 obj 2336 endobj 86 0 obj <> stream xœå[K‹ìºÞϯèu ;zY²¡1Œçô,²»0EÈ.7,¹›üýØ*IU¥’ü˜! ô™q[R©_ÕWÒQ}û×Û?ojýñÚÜÂdn¿ýúöÇßÝþ‘žªÛo{[¾Þ´×wƒšãíë/·ßš›Ö·¯¿þé©Í|wOeÕú¯yj;õÔ.þ>Ì뇟õ¾SÁ½ÏãS¹m¼bÔ¼Ž}3Lñ?þÆúx è0ÛôH-*À+fX'ߤ×Ò:›Sú+.EwÒ°D~ÂÆï\™_m×?p#ðø¥&_ÂQI/eO`fPYü6‹²š¥<5:¾ +ÁËëØ0ÿùëo¯¯·_šVòÓ°~r+Ù¸.™ºh·£îmCð:WEœG£ôéyœ3 Õ0Ìw¿=¯=ÙÆ¾æ»Åõ}V™õðÔ“°ºùŒ«SÛy¢L^i–l¢(¡%–YçfÜxEaÆ9|­_€êãtYrtœûÀ£z¸ÊÄuÓ~¢©£›Æ…’ê’àÄh¸u Äa-hŸH–TžÜeÉ_‹0q é8•}Gs&ÿlêEôv̶Ùax„Úïô£ «É50~K`­Ÿî[$R™£bx'W‹o /HÞkK°5&ê½øà¶ŠÞâcÂÓ²n®å8+0èq b³‰bai± 0É„Z™‡`Û' ½>Ö]ôÕwR0›«ÁBÅ"zŠp(×1–‚å +I6TPIj¡z=AýI‘¾BLó}”࢒âLÎãôŠ;!cºÐf0¤‡í ‡gÉÑæûPI’Q'G=íÛÄø‡­¬BT£É¯£“Ú&Vúáaâ&~*=ý}ÂpDÅ}˜Û’ÖÄÏã#(`ý"ëÓÂàîlŒí„úaWÙ¥¥²{•kÛ“S?Š‘D«‚e]Ë3[ò)³¿µSâž5÷Ñ1j~þ1]Ò<!4ßW†ÜÉQ)îD Uý“h£ v"6³R5©µXîñî[žb÷m9ÙCeæa®)GeÎÖ§Òˆ¦’@IZ®ËDÐâ°:ýB1/yø@´L´S±I…½LpZšcK-T–:*¼md¸Ð<2— áš¹p1—U˜Ì‰çÄ@Œb×ðR£‹Ð )Ji.#g /ïEÿ¢$¨L‘cÂï†DÏŸ‹ e29;«dAc„M 7&3c®Y(ÃIú^?ÃsÏãI»7•êz0ðµähú0³F@“HG3Qsþ·pË…1S³“6"#zI€'’ Jì¾Évë–X¶38a14{(%%矄à.›çAôòŠ“À½ €èSªl¦bgU#®ªþ…U¦JåyÈPw“+ØX\Ç«»KÞ[ ªà‰°»}XÁ¢bB²ýL>HLó°Z=C+ÏÑJúp*²E Gtvizäm@ÊÏÒMx{A‚²°LÀä+]©VÉ»Å^§ÏEãƒÅD€¾ñQôN¤;4»­6¸OG¬Äé:º*[r•jþB+È.œnVObÌFzT¥“ªÝ­-..±@¦ª` —¤žO‚bC4ªs ©»²Ó$xã•ÎDvðÌb#ÓçÍ'D¡,^‚ ÜŽ£aÚ«U­Ž×]ûˆj«BmLJ ÚGέ‰ÔÕš$ÃK<ìÖRo,žÐÉ0ÕÆ^ha‚ QM2î›mt‚cÓ’D„–À RƤ@Û‡ulaÕG„ØÛ •û¨¤ÖZ1 {¬YçA¨œñȪ\[KºIE§7´s"«´Tƒû¼¼X£ç4Âî[ÆO‚ƒ³vK¨¸”Z‹à’VŠ4,ÉE‚†k×XU‡ªŒ¢žL­E„wãh‹¿BÄhɺ”`ÕC©ÈIÈÒA”ÛÏz‡V‹M Þ7ß0ÖOÀ¬¹b!þÑêwvwkPkÕELFTm­1=­ð:F\ÙçÊ¢ÓpÁ\|àôjà¦iXß’nÿ}cO¹ñ.ÛîÌ·VÏÖñøzíŸóX=ȃÑÎZqßB&–°°Ë'i¦*ôi»¨Á\ ¹Þ¶R¿–µ °<κ„h¿×(Ǵ³9=Éfo|Òs€ÞB}`§u_†QZÐgA޲’2SbJn«ç •×9ð¤Çd÷¢ÍÀ¬P!p& LÎ=Ób‹ ’ƒ@">I&Ò5{%ñÚÍèuþNA#»jM.,¤o"àèS~)ѯS«ÏÓ ò|Ç}QS4Sö”gkÑP–¶&Òo<°UЂ_7÷úù[ 5v.wì zŸM¦˜EžbèvtÛ†(ù'Xó^º7.\Jöå}Ún*}ž>ÿ§ø{©Ð‡µ<ä*dx¦ãsÖB¬“rÌý|·¤æx»y¯ß rÔAÛi“oôú¥¼t¹{±fNƒ‚f¤’Žðø“)#¨ó¾ÉdÃ(ÄÖ}™bO/̉' Úyà•nëâ¡a¹Ä."µþ€Ÿù€ŸfߎÝ%J™Ôï±ú‚‚.Ê“–S‰E‡ñâñ7AÏS ;'˰5,zuβ²5È:¤¨Ó…Þ²„¸ýɸu+Åp ¹¿PŸYQju-ß4êɺšÀô¼‚5BÈ~Eï™SµýpÑÞ ¦OP3À3àÚBže’Ι“D}'Û\†ÈŠjI°’‡¶Ô ÎV0¢QLðÀXn|ŸÑÊ{ºXŸÉ#‹6ûGÄa-!r¬YøÍöIï^lãðk·©‡)8µc°ZôJøX'‰>®Ü>yìÀç1R‹ªï.*Òɬ/V¤"–;ÙÄWɤ0ž|¿’¢?‹³GYGMOÐÉ‘u¼ãlÆÙ‰îÿ…|“ël­9x²l£›ŽúSÙfr’óÿ¿&7Æ÷³aŒ)ùËíߨ# endstream endobj 87 0 obj 2334 endobj 89 0 obj <> stream xœÅ[ÉŠäF½÷WÔÙPåÜ´A!hõrðm Áã›ðÁà¹ø÷ÊÈåE.JU{Œ1´»«¤T*–ñ^䈛¼üýô×EØÿF©.Ó¢._}úñ»ËŸþSqùúûÓöñ$Ål¯Är›/¿\¾W)/¿ýtWb5w9¬ê®†UÞÕûz•wñ¼^Í]¨õªîr´Ó¯bt_NrZu¸†~Nn½¸«&w‹ÚÖ1Ü7IãþïþrOô_ìw¹nI©÷?·õ:Ã"ûen]ÚŸÜ·@ËÑ6Ì »ØÜ>Ü:Zº[ßÖëb¿q—ѫثð&«ZÜÂnCôlûûuÜouŸ=§MÓ[¡&zçôX¾qã§Eן?~xzûxúRõ͸ ö'÷·{û)¸EÓî˜áéIÉÊ´-¾óï e/ ¢ÏÈ2ôÅ@ýÑ’d²ª ‚»Ç»5vÅ-ò¥eIíÆ˜ÄÍdÆÐC2«ß¡yY—»TnG‹ß™sñþ4ó qäB…bÇÅBòŠµË„~¢è\xtBø‹¸€}É1s÷#û*|å®0ÉædCtzd[Ñ5£nÓ)3J5Ýõæ¼Oq¢)!Mž°î[óʶO†í³èÈ‘®v‘&}f74A²Eô%$m‘L笳¤úǺtgû0£‡¢ôbgÞõü›ºW|±×73}»S”Oó\rrýøãT Ö_Ö]ò-¦cBPâßv?‹Ç«‰O Ô PcÕ”ÎvŒv -´êݰ³[?Á}ŒÜÝ–jî :3ñ[@ ÚÇÛ:‡W-«å!}²¹|‰Ñbŧ \YØ€¹¼Õb¼éª‹¨ÂWb¶Àh[àÙ,ºáÍJ8¦”*ŠðÖ*mÜ"Þ±#æcæ|Â.¡-Œ¥÷º“(æW¾²?WCñ évë^ ´ ó¿ã—a‘·1÷ˆؾA‚¥¢Íþ}Ȇ‚¾óúÞèã½Ó®ƒ}uúÄDã׳Ò=%8Cjmx휥ݦR¯ÒDhfäØW´²]uÀ ãx[‚8¸@N½:ë$ —áï=SSåz"€*`ƒd`Àj‚#ûªÒ0G\M‡I+ú^šuÁ»¡œaà–æáº‡á•׉ÂxÈNœq¶UšÜy>¦MG郹³<;e=¥6±66Î,MªFg´ 3Îo—3‰]NSpðº'}š[[S.3 ”U'/О£AóÈ 'ôä§ÛBcÌCЯÿ4ïÍ :#[Œß¦‚ÅÚ ˆe_µ7OTBÇ…‡”l—K”G–!CUÞfž|üR!ä°ÉÚYtNE’¨Z œáWAþ£ôø ¬º¿U\{L‚‚^+Ú&aG 7©6v£¢ä z6ÌÓY k½[dóàäöç“/ 4QLKõÂ$ljp†¦.S%¤ÀžšJ6Ä©›Y“©=„éäê"ZSúAYtb‰Ÿꄘ”{ôz^ – koÍ®B2m“1¶1ú–+ ­jCQZw¬ëÄ[ѱd \šô³ ü8Ä›T£}ë{0ì`íó ¬$š§F ã£i(¬â¼NÌ ¥ÏDU$Øb ’æ2\”*Ž%M¤û<–“2©!oãuÙ¤èÚ°*6Ûöª-¿Ç{Ô.2R<Äáå°ñôŽGFQPÖh{Pƒ“„›Æ6¢–L­2oÊ!x@sYòÖÀæ èÔGEQlG£jwÏÙàÉ~ç°~ê­ÊB:ÅEëáAú w’«Ü…ÿá¢L/áC°‚ˆ±¨©L:Šx~¬ÆgJ.!GqRJ†zëxM©‚Ÿ7‰<ÀR.™+Ò%×N.8F}ÙYýa­Ö7ÏSŠ994¢ øfí…ò#q0’ •޹²ãû³˜*§8‹3Ø(Z—Q™Î·40"i¡Ý«‡hâ\Áبx4:ÉY¶{²G‚;ðìCJ¯Ì±‹ìð#w§1»9ˆÍgéÙÍ‘P>u`'Œ M?>£ÛTíë)6w%6NI¼´5Å eÌ&;™*ïúÄÍ/M!غÏrœ R-ýÐ2ò/füô²ï¾„c÷ãl³‡ÜÒ²Skd%;³…뤜Š™”ß¿~^™Í#­) a6j„z°±PÜêY?ØÉމ÷Ä` >mãI™²­ȪCÉ[xAÈÄË'?£Õ’rϪnÒs‹rž)Ò™W¡FOv< —‚6 ߃ 1¶O¨7aÉÍ_Ç €øš\*ªPõ_)ø¶·díqpsÂ÷¸üU‘‚Rpt¼¥LÁÇÛÁ“-O¢(;d‹a@Aqdä²Q:/TžŽx’÷ÀöO 5K½¬æä+xœê¤¹Oà<l"‡þÚù¬&?• Šäµ#‘=¬*Y”§Baн×È!@™RGk„“pSµ Í»ÓyÍC Ó'¯tô]Ô-1R´Èxr¡È§K5°! ½ K«Ãü˜DŒ×ŠjsZL¹™PC|ÂqÍô9 ‡e“ÔßLu:åà(ܰH®¯{-‡¨Ù¸AxáË/Ì\;‘ÒZIKcIa±Ò]¼ˆ×˜¶_.ÿ ع endstream endobj 90 0 obj 2691 endobj 92 0 obj <> stream xœ­ZÉnä6½û+ú ;ÜDJ€ Àò؇Ü0C[ ‡™K~?«H>.’hg0ÀÌt[‹µ¼z¯hñ·Ÿþ¹‰í•êæ&uûöûÓÏ?ÜþæoÅíÛŸOëû“ãö¬Óc¼½ÿvûñMݤ¼½ÿñˬޖ»œ…Zîj–zQ³žü‡…>‹Y ‹œ¥[ô,Íþ#%à ÄërŸfá”\Ü,h¡]înÿjÊ¿…¾ÏË}[fýnÎ¿Ž¿ò;ùy‘ÿ-ò_o[É}‘0ñy/VéIGf{3·çã›ýÒ{ü³+ýØ.áôôÿò…µ[BþØV­xG'a»iG™^è–_ßzz}úÚ „†íï<‚äb؎ߟlõ‘Ú ü|ð¼'¶õŽ$?Iÿ>ŠKá”픫ZÙã¶p²™¦ñFGšm¹ÛýaŠ•Ý³…žõG ËlZU:‚Ì9·­ ë³Ì¸rý(¦p=y€]ï3'¦UÈà}gò¹—ó>|oçh”?z"T4ŠÝ[ø÷ÅPÄZ£„{NqëìàBcYM» üv< Ñ±VÙñðÃiÿWýÄ[NÇÕ‹ÊÏ,ÃAã3Z.:Z;<\»"ÞR•Sp®+¹ƒC‚aÁdÌüxdÏ$vs —ç@ÆÌB.ï˜oÊr6/Z¤Ø„(ûpz¯S|CþGd\²¤ØLÅác®æËr·×ê×e˜Oò?€W|ÖÉa–S#2l_e .Ûà4€p(` ¬löÐcÆEëU®¡l ³›°`Æå¥xžkÊ>ô 4+dJu@›R‰p™˜Ñ9c×HvlÙ¹ jömëfÑjº.‹§Àëq_ßãNàO¤$lç+»œ>ì—7†;v†‹XŒê¡ÊÚÝK¨“匉Ɣ³ÛŒV8"犊ÿ)îR7åÝÐÍЯ\c®´Ô = !ñpÁ‹Ði¡Vˆ*æ…ô¼Œ›uá{ª²¼upSªõ×)%ˆÐKÕåÆEª³"å(y7ûSpdƒéY…˜ú6¤!7…J`Ä™  Y&·òWæ”iœ‡gP•hn*¡±…t•ÃÝ?õŸL³¾¡åA.;¥l³H樾e~¼À&:éaÎWÀü^>ª¦GÍ÷u=Vr¹{¾P«æC«¶EE‹AÉÛqÃB˜dóTèÆ+’AX„"3ÌF*õ(߀_‰²8A`îE&¯ÃBÔ]ÄGéJSWVÃín ÄÛ›.Û¨RªµƒYJÔÜ‹%‚xoB&CGóæôD3A¯vJDX"qƒW7ë5MzÐë-Ãǘ¬‚;pð)uØ0⌗šgÁ (g(YÚï_˜•§7C•zªØ2´ĹGï·ôá5昱š¥Z¿ªøµjÐ%TëìÅü¶uƒÏŠ5O…Ý?q¬ÍªÔsí˜ÒÊì%ÿÍÙ¾šó¢tŠ=Œ±Q›†yõ¤õ> stream xœÅZI‹3G½÷¯ÐÙ ¹r©Ì**µ¾ƒo††9 ¾Ù3àƒÁ¾Ìߟ̈\^.µÈ634¨¥ª\cy/"2‡›¸üçã÷ËàþŒ;ËË¿|üã»ËoþéM aû¯¬µû?šÉ¸ÿþX¿>¬t™nêòõóåûoú"ôåë_ÿ¼‹Ç"îø\å} ¯jø\Ü÷'?¯å§¯>^_?Òj˜'?ô0Nþ¿ÕnÎb -o:M!Ân,7¤]®ÊOŸÚ?ôuv³Š•0-á7wx„‡WsbÑwÁü;1ºVRúV4”Io†§ï% Ãs>“›à~è—/íÍòòe\¾–«›[‡1­Û­@ÑžÜó+-‡Ÿ wéW&¬ß‰[¿P¾+¿U}©0~•šf 1h8ÞÈËõ$‰ðë™~p+êå†~‹NxShä§LŸÖ=ÓqD³XßCŒn å:ùn´ÆbqXÚØ*W¿e^0bÃR¨]øtËZ¡!U‚„%žî•þ…šÃÈ<˜L££XÃ÷WX_œx_kBU:ã…ðPü ¯¥”åe&­Ú?’ƒŸdN3=%SÏa±ð ÖiØbêvE}FoÉ®žvG*äY£èI4°¶ðö‘‡‹3ò‹•æŽËŽsɸSwà¤êE × šŽ×C+&¯J Ûü²XD`Tò„rÆ9NR¬6»ÍÌ-¢{OBÓOõòì>ÇÂ(û’Õú“í'™˜ ýÉ&ªÆ,˜Â°-ÚÇ#Ûάhn2ÅÌÏÑý ?F½`æ(bPdáÉ]}Òq¯‡ØŸLóœÒ&u3•Ò‚?'ÔÁƒÝÉÒ¢ç¬Î<:N€b/‹–9߯š›OÅ4½=¥et`¨Ð/[ˆ #oð¡£§%3b÷ŒJê98»=ƒÌ¯„íû$…ì)ˆªÜ§ •2SHq;®Ûחз©ÖW–PÜL¦8Ž£"¢ÑeµÄµ`¶°Á¬–¬›Äãic)È1ïÄ82Ä8ú1BÉ'6bÙù0¸ÏŠjÿR|SJÃÇ7» ÐvŒ)[Z€žh€6臚’°/˰Ìdx»ÒãÇ"m·º·H î &"®æÐ 칊J!”Qº\޵`Ú¾{R÷}-™¡ÉL3¥ÁÁ+!§˜¸ƒ&)šF 1§'[RTg?§´ú›·âÊÅíSHð) ÑÈà ûÑýieÅõ>ô ê¸x‹¦…Ýè6²C1í¡°˜Ç¿µÖ@}¨¡@ÑfÛI œ“Š´ºñ.ª$ƒ3¦FÄ“"ðcÎ$r†Ÿ´M2yD×§y˜ŸÏľà=ÙZ#U#ö“ bqã˜ÂßKÔlšTL<ˆXX‚Ë8í.÷©&Ó‘ /Iœj™ «í™Ëp®L=ÆÁ»§W•!–e­pö6ßú^v˜`|EXޤrX køÖê «ZM¤ÞÁ|žc_1ƶ ODÆ4VH#X8s|Rš%󖈽ôú3®l«jŠ!\Œj£Y"õÌ … !íª`¥·«0,!\ʾŠFÙ&5­}tãÔ€éblƒÂÈ\¬ºå>zÒ®2o˜bBtê&†I"Ý_@-JÖz#| eO•–V)çf-y‹²1…¨¬W‹=åjʶÉN:À¾Îw”t&«D®hNåû‡¤¯¤j2¤^ù°°hS!;žTˆq˜X|²Ÿ=¼—Ý$cÚݰœ§&#ëð; |Eg/rPd ‚ø7Rêâ EŒÖ€$ty7NpD4ö$Là¤ð¯Ü‘mŽ/¡"œŽØºsÔ1iFkªûZ™T›!ô4Ž…g¾K£§lÇñ:ål4ÔÓ*çR©Ü‰yƒ F?ëèêíVŽué[‰P†Êp:Òõ'”Pi&cÕê]iÝ$§ŠGiÙë0:ƒ) ɺ‘¤^e]l¢ îJ¦Ô5þ–Ø Ë¦…apï£\ê ýpq{¤“§˜ŠãH^û+ôÆÜ¾ŸÅa\™q¢òåÍìëJÎMVãòSF¡˜¯õW/Ç9åÇ4à9jvè<)è÷^ha[3=^ëÄà¢,nˆÍ±¦FvB¸âì1ÿàŽz̸m3„kl: Šâ „Q»©Kè&]DÀ|¤Sò©Ñ 3c¬Õ”!!]NhÐA#iCЖ cÒìÙõ¡kQo^)\Š’{÷5ÔÇäW]»áw±½ M€¿÷*úE„s²X"‡¡I%ß;ÖÂÄù ҾƶQm¹Ü¸‘)Ë } -…7¤ˆ‚Ú"™+6@½»Ž£ú³õ»ÃK¶¨WîªFLc“BâE€×ΉH‘ÖXfB€áDÂEf!H«oŨ§ƒ> US` <®ŽËc€ò ÓýÜ<ºðacs˜£? $ˆØ¶y6VÜ4ª,íøXeû|q_vh3É£B`S‡Á°"aˆŽ8*ãO÷ZHSï–j‘ ZXÃ×¶Fû¾_EÂŒpË~åñùŠ\®`›ëë"uéæ¾[ñpûÊM{àö¿¼&KîE•”±-ä4`ˆvÝUþYUÁYm¯ÒÏçj&×@Þ øÅ`b®”B~—Pˆx+„.dâõ²¦º=âh|¾ŸOä¹ a®éP)/ë`„ iÕ„ €¦ï#èʡޤùô¡¨¿¥ŸâdY7Cz(Á­¨^®ªo"¦ë‹éàšæ(6ó1[[êmŒ“¼ià?²Ñ#A"1aé|½„ï=-ZÛ¦yó‚ع◡ w“´œ)¡Æ2\5ëTÉñ6ìfy¾º1Êy%"•xZ¥ÿ‡¥¹ýBžuÞÈIÓñR“ݹðBO”qs$%üÕ¯f$‡Ê._¿r—/ÿrÿÍ endstream endobj 96 0 obj 2447 endobj 98 0 obj <> stream xœuSMkÃ0 ½çWø> stream xœµYIó6 ½çWä\ ©6K6ˆ3™Co ‡¢·.@ÚKÿ~%R )ÉK¦(Hf<¶$’´¸Êó?§¿ÎÂÿX©ÎnRç¿=ýøÝùÏpõª¤tÖk§ã¿;ZÇï§åurÊ?lG}~ýrþþÓœ¥9¿~û首Yjuv–ø!)çŸ_?œž¯Ó7XU‹i ‹‰a ßÎø]Ø¢ÃpUyY ËÊû¬oròJøeý&làæ‹Ô71ú ê9_`_å·œ/þê]èpO¸±:üÐõtu¸£:K‰†¸°ÙàVŸ~—›ÂÊ:|ØùâüÞz ;ÂuqŸ/&lîo .‡;üÏɰT¸ â?…ð,þ_чg’ð½ø§ÆY‚~e9ù¿t<¸Ö?$Ãýð—$ûàÊå2˜€'°è¿žóeÀ«ñèøé7†Ó™ÙlÛŽÇ-Ëúßü‚þ‹€M>0ÑX´¶ÇCâ²þÓ¥[“‹‚O.¶<—ØŸªà¥ãøcºäBâo¾!.Â}=p½ÉÇ|™Â“Nƒý ìŸC:åv‚*#Þ£hð‚¶Æ{b ÂÂ'ºæm¹4×àÌŸ|ÓIÂg^妯D¿×}f‹Æx÷l‰'6™Ç~Æ Ï Å»–³ÑiE äƒFÁÞØnÝóp·â9öÓvì/Ò%àÇ-0qàñÆ WÖk¤MT½ÍhšÑ]M›y‰Òve;åÐtl+Ì¿Íì,%*uò¢CGǤ‘^ý3Ñe«B8:€®uÓ´š¯‹˜pÓBÄo;`þ³žE¬%u_QÒê{,qÅôÜ}ä/hA©«„Ö™ RläZ}þJë<Þ`7Æk¯B©b£‚(ËHC­½¡« ŒY×ÈÅ"³aÈ3Î~Þ˜Y˜Z>ó©Œü%ôc¡:¢‘b(bh;ŒZ·“À»^Š2¸Òa0§ÉÌ]Y/b­ŸHäsíc¸¦8L~ “¢€ч~ÐærE—$=<¼‚ñðÀf>çlТØÜ7 Kè45Êë}[Y¨ô ì^ýžÏÞ*%.úï.y5ØÜXëTä_™Ý›er3Ð[¿í\„x5¡ÙBmgLÕNýè|ƒ<Å \ *¾WîŠa;I:ò‚D×´ oØtšS ïGvãh!mã{P'©¸ª{ç-ÅÁ!k5ƒÓjìMÙ;/ûÖSM&ˆN“7Îfd^Ù™"ji¼nVº‰‡ºÏ¯?ð‘oç9š´ž endstream endobj 102 0 obj 1876 endobj 104 0 obj <> stream xœV˪1 Ýç+f]˜©%{Æc0†Lš,º»è¢t×ÛB…ÞM¿²üžI&7%Ä/éXçH² û{øÓ úL€6ؽ½¾|è~ûÙA 3ÓÏ(ÆÙÿj »·Ÿ‡åzÐHg'£Ó]¿w/ªÙ]|µh„q=ZQ:iá“ë¥E!‘B9°BÒ€j?œ\¯òJ?Y1;ô³hñì Ѹ­8:mƒåp̸o×χóõð/ d3* À‘É‘ÎáÂ&0Bp=ÑÎCtÊJ‚¥¢¼Ðš M¼ ŠOL~?MI‡&Y *LþRü–Dqpa<ÇËì¦:H_þΚàÃÀS:üð zÐôWùÐ8€ ÒÉkˆÕý*I‚Ëí„Ñ‚¹±Üëg.‹›#f6øèyú´4ž@> Q¸ËÞ¤½b/u0×"¾)DÉ;ç+¨ÂÌiß•’e"),‰lŽ ©A'¯—²¿GRǬeº U`6™FGA•Å KÖàTÑ&4A’Ù;ºÆZÕÊi¤Ž*d5ÓÜ…MšVåôTîÄnÀeÉñ¾Ã¡ÆõÆU‘“ZàDöèça¶&cvP'òƒð7ʦ˥DLÙç5áÕ1Q‹#E—ºÔ‹gŠK.í-î+…±* ùò+ÿJ@v¾Já%ôÎopj§¤ɧ€Š„¨.Nc€¿+²m>òÁcžI! ½™ê¢Iõ€š%ŒD]‚á¥m !K"|°µ`KÓ9c À6­šÛK-U²F›šê ¯¦–ºÇµÿÔç3_•ªRj[¥Ž·«š«dyFÅ^I½aþ—@ÚÜí«äÝT»@CMhÆwëz9Þ™þ r)Rˆ"÷o$VUsŸ"­\QtOxq°â–¼…”0¥ðD·9ž6ý1€gÇ*\Ê?ê¤à'G.¼çÎuéŒÚeç@õ÷iC¯hRÙfÔ¢û]'Ê.';ÕˆÂuõ:«ÚA³´ÏÊh†qÍÊ’ƒ7•\iNãáÙf^UŸdp[ÕÖo¶Uv¼÷}ûTLoŸóBcÖ^½Rç(CâØ4ºÜïD8+bHΛN„³Ss÷k¤Ÿ{KVœð䮿‘—î]Úb endstream endobj 105 0 obj 852 endobj 107 0 obj <> stream xœTɪÜ0¼û+tØéEÖ¢!Þr{`È!ä–r$—ü~Z‹=ò¼Y€F–{©ª.&4‡ßôçŒdþ|>½3¿òéDˆÞé?{š­þÏ.8ø1,ëàI“]`³~5ïÏÖ 5ë÷Ï ƒ`‚Ì2R"Š >È8'¢Ë.Gx`,›}Ñ`Lˆòeý8¼¬ÃkÇ~ÎëZ:’A,m² ¬Œ6•’´äÞàÑ—®ž£ø”q¥’;ZÑh[ÎfÑ…et Î £`HSóè,#Öê­QI*ù·ð¢ý‚ðö:–‡U²¨bªØoÙ.WV¶VY¹‚$çöáª%l15É÷Z— Ör˜ÆCÙŠÏŠë*’t Ž’~%-ÇAÛç™ÚZ‰|<º™&{5º2¤¬·A¶7øåç“‚ò3 R¨/!6uóÄz‡üÑ?“Õw¶hW®,qÛÖ㸨:ÜœÅnÿVлÖQyì.»:[çáæìê‹û{¡¸9“láÆM-Áöà%êùdŽì'=Çž‰\ö7è¦+ñ$c̼v*çc‰*ûÛJݱ¿ªËÑ,å;wuiºâÚ@{v˜Í3uiÐ €b+×Ë®`ü¿ðlDÄWªƒ¨N­6Î_ŠV¼ñÞ†ØCɶŠÆÆ¼ÝnñÒáp£®É—KÔE-q‡«ä8Lîš]Z¡*ì•íDo+%"8Ëú³¦¼šÑ ‚Ð endstream endobj 108 0 obj 563 endobj 110 0 obj <> stream xœÝXËŠì6Ý÷WxhG/KÁx¦g‘Ý…†,Bvy@d“ßO©ª$—lí&»0Ð=cKUGuN=4ª×Ý?·¿:?^›.DÓýýëíÇïº?óÓÞh<|Û`߃=¬øý6?oÁÀf?ÚîùK÷ý§ë´ëž¿ý4é1éIÅd'3'mͤ¬µé>NjLw=™äÔ¤|^ätLä?ÒÝLzÆ=Z§ŸŸ?ÜÏÛ7†¥w>À':4ÖÅ¡[éî&ñ=$0ˆ. ø„¯X²“—æ·*à{zœWá£üÚè ì¹I½e£lÍͼO³ ´çqCþTÙ“KìÈIÇÖ-œr€×6"Dh“Q“(^ú#£Üâ[ÂÑ AÅíï°(d'ùžq«»ÏÐæ4–Goâ3k—7Г|¦¹š¬æa.üA+gN ˜9LïÖœmƒïÞ)õØŠ_"5H%ºpþ™#AÑCTDO¡‚„B8k ™/Ѭ1)ü‹SÅûü"—cÝ¢•Õá¥ßu‹–O’’üh#SQà©GºÇÝŒž {|`D%êU€?ªB² X UÕ1Y6ôaM–[$ë)²KdW΢0c• mÃzìTÛ•Ë¢j¡û–d+’™ø™YŽÜP/¨[)Ñ^ÌHY>Š3. ̰¿•ø‹ž}ÁÙÒPUöÀl,±§T ¢zÕÇ‹ldY{°öHíX(Cû5k"ÐìGY²WÈráè bÚꇥ„"_lñ<Šî›$_ŠE˜jp¡ÆWfâ’ŽMÍ©°†% ?ñ‰5ã8XÁöþ\â"k@…“*w>Üž$W¦D‘+Làqþ?TøÚ—`ŠXdÍÁ•‰sÆÓ0öq¯U ÿzÝ=¡o{Ê¥>½´i²…\dž Í5ÃÂÑÒÖDSC8ÏäGÀTÜ™_¨Ò'‡uaà¶0¬‡ 5/£ÙÁÀAw;تŒ'}d°®7ë4›—šô|<ù~›x¢%ص Ø«® ­Í¸ÊŽÁD#©?y=šYŒsDªa‰_ zßÚ6±É×Ã9õ$Ýtì‡u‘•UIˆiÕ|MN1b©é‹V É& 7cÊîuÀí‰AŽAÃ7H‰èÕX·Ói3•µ z(™ÚÝ—´mF>¤¼òfa]²Ó™ –3¹Çd)×k²Î `«J$N«3¯Y%]§V5·DÌï³u¬ÃÝ⺰“t›â7—»ÓÚwm0ÈØã.h‘ˆ3ÚFçD6\˜C+Éø!e.ªímùÊ^Ç¿_‰ÃëÐHѤè¡çòý’ÙÇ¥vtA…rØ’úÒKξpòåZ ùÐ9”ÇíËùa{Q¾Ò'jFkñ‚E¿b® Í3]3WqkÆÇÒ¶D¯‘w¦“±ðê=g釛lÀù¢VúZ*[²Jk<uÜ¿"ÆŒ˜±ãf|7crã+Ïê<œl,MÆh•žЖoÝ¿Æ(h endstream endobj 111 0 obj 1132 endobj 113 0 obj <> stream xœÅZK‹ä6¾Ï¯èsÀ½,YЦ{{¹- ärË&C ¹äïGR•¤ÒË™…°Ð³m·åRÕ÷U}U6»òË¿/_˜û§¹¸+.ÿ|{ùù‡Ë_þèUpn´û+˜•û;ëE»_üñr1Â]¬yyÿíò㛺puyÿý—›àë$nL¯üÆí:ÅOfWycs8÷êα%œ[üx\ÂAöÌ6î„_Îr¾þúþÓËóýåk0M2»x‹Ø¼ø¿F9S Ëfã>£ml«¿Í:É¿ûEÝüo›ö‡™Zñ»Tþ”ûÔç.›ÃÚS“†Åö7ž‹í†twJ\ìN¤Ý}ñ+‹`!ŸÝ¢üÎŒ3UÁ71;_†nÜ͹Â8Mœy_¿®“ò¶¨xF„O×¾…h…h(ÿCX~èÿë~W-ê×+Ÿ]üñ’‰ÇÉ(rs5Uœ¥&øÎ‚E"~7;õ:Ç@Á¹‡s.ºÜ›,Ͷ‡™¬ü+ƒƒ{aG¸óâKØ%þ=èîið‹´!8ÞUÌ"¢kޏÚð»[[ãjé Ê!Wé,®×Ä傿£æŽ°ln¶-òuMû Aæwñža]ׄ?áÀ–¬Ýñ<#‚[÷,™}ä¶bä@s­£Ä³Às6|Énð–s^y,l>óCW®4nrd‰UW}™µtŸ=>¶»›ÌaZ©çö]årµ5JŸ÷îÃ'+×½œv¸ÿ ƒ™ˆßfãmS,™‡“ÕsìÁæ®5n£;ñð0Éæaf"ÖˆYpbÇYÒàg„5’Ë5Þ$µ‹Sp×Û¬Á{W˜3 Ò;E(´]¡®¢F÷‘º$;YC‚ ;r_ïéçÁcÈ`Üa˜‹…$ìB¦Hyºtá xä¶Ê è?üœËÈþ2¨bU‚ûòK7 ÙŒñÔ%B¶#Åìu®#µGðª–kš‹ZÔus›’yrøMŠàP0Be@@ƒ_žÃXÁ=å#gˆC€Á12†¥%¦ŽXô Öò˃ÈÀ%Ž 6" Õ%=Ɖe<2²˜Úãª,c4b'˜«2o_S´¢ ^؂ǭ×4[ˆpÑ3,ªÏ’»¥Brrr‰£uÇ` +T4²Îb¿Ì‘<5(µ×]˜iJà‘.½ˆ’®€4$é HõÝsöߣš¡ÛЀ0$¯R“ªÊ[%Ò¾;âY]¾?æm¡.³yñø÷D}ÄÛñ“, øL„êÛ"ÍRÔ6ß„Yè/t€èËÚ•áªX››D—$}¨H̺2µ·²èÁÍz²gø¬Ö“öļˆxÝ¢½‰6c«ÝÅ}­Ž\©Ö:V$Ÿ–œ›T¯–FМ’Š‘<Œª%MJ!„ÅŽzÏt¡Õg­[%ÇB Ý“,@û² Ú ™´¼iG†¹ähR÷—-EHË' ïèì»èO]Fh&­`%Ÿœ2„â­ ]ø,Že‹èÄâžyDÀ²"Ô­\± ŲäÝVÍEÉè¦UsõAuÁ¬ú×¢ì7ðU𵂡8 ÒSåyXüÍ%¬–¦P¸‘u+A‰?˜mœˆëQE키yÓKÒ’FåG‰ a(ôw’¬”¦i±RšœŠø"åöò¹ëžy·yŽé•¿õô–d\òÈàÅO³æ^(æ=»5+ÄQšÛ(÷ãïò!Às®b¤ IL §(A…ÇcB4}VÑâ¶ÙñÔ4«Û£´Í|˜†8¨²¾¼WËŒ"T(ŸÌ,de;rM@)õ¬…5[½c›B²4„Ò•Êör?K@`wy_gç _‰¦Š‚@…CCºœU*;(ž:#™”ŸŒäOVµ/4—ùx&$µ¹ŽÖ£4jßÉ"›†°ÎÜà2[%üØ2Úâþ“Jéx‚„h–ÄÊzØaÌ‹‚®ÂaPQ¶w+B£`võíå½d¹•I-ö™ý—#Ìnsš‰ÁºCÒ±ñï‰m¡iIk(–ú¸óÞ‹Ë,ÛÖ’hT„-ºÉF….øÀ užéú Ê2I.Äg+Ç1´‹bã‘ÂPUìÍûc¡,‹UŒþ¦ K8~nôÇŽ’«÷t0t3GFýuâvô¸jzЊ&¿ØñÅ6íU ×jæh8Q¶ú0¬+R¶¨í»ó™„–%Mm3IW6IC§KQJªp"e;ÈTÊ#E²àì`oVÛ÷UZ,Uæ89nÚx&á0ª}(×Ä€ŽJhÆiг ܯ ísÅà‘¿&úò!V§â5ɰךæqplW2MÇ—©Gëõƒ|$ l‡C³¦á„ÙÜž9}l“oøR¨t"€{Ú Ñô2'öÖ]Ä.EW†&TMÍV›q´Îè°€¶û‰À¨…|öÂv€ÔÜ´˜žÈ”Ç5öàéN”ZÅG!´ëʱõÎÆ‰’M“Õ0•<°©ÓHçÁgOXößJé·µ½.¡35lƒxö5!.XlxËׄ|-‰ªeû*ÎtÛ a3ü?dÊ &‡C ê^Àâ` ~ÿFÆUXI´FUË:#Êa/µ¥ž6ciyÛ° F—‡¯î æ?à~]H´ÞA\»ûHæj³Ž-*ä‰LSq( ŠùdìÍÀÝttuÀ o"Üb”\ÓAòl Cj²vßZ¤ï=-Ê™-—öå¯eUK;Ñï_rÿ¶O³ÒMöXßÿ„K¾^þ1KÒ endstream endobj 114 0 obj 2124 endobj 116 0 obj <> stream xœíZMÛ6½ûWø\À.?E Ø^ï¡·z(zkZ ‡Í¥¿ÃRŠ¥x7@Ò&´^Y$‡3oÞ›¡VœåñŸÃßGÿ;©ŽnPÇO?ÿpü+ÜÇO®Ã`ÎÝщáÜ¿|UG)ßõ}²þrÒ£t“•˜ ]¤Ô(†é¤FiðÚMrTþ!ÑM'9Z7ÜhÜð€ ·ô·…3wádïŸÆ/倿à¬8“P~RáÒb´Œ¾ÀG5ø©ÂêÚç×¥q4] áŽÃ/àÖ©ƒ_h”°“Œ‹ÈÜuÚzû¯ø%Ù‹;td6<ÙšÄ=Ò,\ × ÓǵTü¦ Û #pŠ´×dÔü$­ê¦_?îÇZĺÁBˆóˆí “¼M§Á/ë0`´/øõ:?Ž~##âfh83švF{Ñs¼¼a†.s:T½âž.`V|z hÆ! æØ°ý%há°ˆjÂÔ|¿0¿H6‡¨v9NÚ‘êÅÙ,#åÇ‘OêfC”øœg-†~Xa{ÿÓ)]XÄ)BgíÙÑ"f^Dú )?ç ™ ©ì#CƒÏ¯xµkæÓÌf ³ 7³9>8îÁïÞ9&Œi4FdŽ;Î5¯±ƒ+²x (2ä›9da5‚нRJæ­Á#ש£.ìŠëÁ4£X»hk°©0ÌJIÅùŸ ~æäÍʈéÝÕ§êÎzP–ëòñç¢k!áú]3¾Ͱ}w¾kÆ7 rU}iͰÆíªfp‰Ð}Š[‚ÝÅo(>Ób«UQ[þÇ$¤F÷)‰yÞî ûÀÃ!ãštïD £ÌŸ”RÑÒh4»«îIŒº¸‰Ì´v@e_–žW N.ƒJ*$÷ú$‰ á-™KsKÑÐSÎp Œó¼À(3è¢Ö¢Åž%ù6MzF’Z–ôŸKÒ²”«]xpC’Ô¸P?F^ëŠD•L¡“°l3V®%k]Nöi9JBüœ-ƒXŒjtÚ/GïP|¦PŽÜºµCÒ ãâŒß[ŒŒb]:‹Q+6/•Æøù~ôÞÖ¸4Џ£‹-ε8h‘5Ý&5£LQÍ*XcH4gOò*àÁq´ò`#’ð !)(‰LFÑ!:¥z]'iºJáqÈH0”¹¶d€ ‚ËNéqÍkL¢õ”ªZ²Bg½”eY1;OfôO«ÑÂKBÛ€/ÅP E}K@[-§drÈ•³ ú×çö³Ô¬m˸¥fÚ_)ÎkgmB 9<$SÄVF"ÁñÀS&E¥fÌÛð×WŸº·EQj4|¼îéŸýGso/Ù‰X¢þ¿zLÀ~Æ5+b\.äte²Ñ«>[´ÃflQò››æ¥R®î—m R¦ÛÓ0nJ7u’î+‘nV²¼Ü%ÝkZÜ…–e±¾-Þ­r2ŒŒR²`×̇G÷™¥—öæDW+÷#=ð9 ñº‘Êû"„­‡bõ.m¬èIü„¤!žNüتçýÙâÌì]BÉ–•þ´*Åý$Õf×Òt½dQ½‡Ô󀑪…¬aYrÓÛP–Ξ@™oC¯ZµnÓÍg†IÎ#Y…ÒÉDœOvˆ€ü0 ˜Ã‘—- ¯%°ß¦V{­ßn‡Ï­«!i½™âDà¾Fç·ª8fæ™™IƒñË3 o‚à9“åjÇ6º/Fî×4¾LÍVÏŽ™ÌZ·U§ÒiN3ÎÕü^ÏÈ·Tð)­ªI³¬$Å&8´+{!ÂÖU¬¾0aGr92Ź$‚¼ÄNYŽò¸TœhCö©õùÆð2ÝÖ™»¹ÙÞ¼d‡±Ü^ÓÛç˜é‹ ’ªèxx}Ì(äó.i÷Yrp(‚ïi\In{FV;…¥V’gYî“ÜÂ"Š×•½™f'¦ÙIbõeʦ|V³x‰¡ÍFIö}Ñ(•ä—9ÐåþãdÇ»ÜÓëB©ŒZ9—HÙ_Ÿ¼ %YA™/“Ê8šì®4•Xl%TµË‰‡Ñp:[iJyÔÛqqºè&?‡ì+EUD%™½z>³ÂÍóˆ¼mcïAö;uñFÄ~FDX=Є”[Ö91Bg+§gÍ?§ú®Û—wô5´+d6P'øä1 Oñ2‰5€+[°|Á•6Ç·œÐ2seYðJgÝÓÂKcžèÙJKú=%êÍIw;="DSÁ·Q…JPFØ…Ê¿½¹ç¯b«òõ¼IÇZd¸xYC>ÚhVávVJÉzßàØ9Ø–Ûœ¨ö {£#Òw¶/Tü¬xç´³j±ê=Pu_;½7}@Û°§1ÒÒ€l3 þM?iȇã¿ètÐ’ endstream endobj 117 0 obj 1780 endobj 119 0 obj <> stream xœÅZËŠì6ÝÏWxpGoÙ` íéžEv²Ùå&E w“ߤңdI–{fnÂ@?~z¹?^¾T=¢&i|XñHØê£‰6yr•½în³²àÅɆ%Þl Áθ3ÆŸµ]‘‹(m·ŠØÈDÛÕÎt«¶½ª—¯,FÂ.í ¢)ðDƒhI0ÌåËŒ|ù)†syѵ “ùSÊ/òªúÈÊ“…d®oAªË"Ыˆ«=Ðj „M­7ØÍ çƒZ&ìÆ9âùè¸û‚SÍ÷¶ù·Yãwq¹ƒ³ÄîÆî•âØÖ)$RBSæ¶á>)@Þ»FNê«•âð.Ò¹‡Öq®çG„B ¨Eg–Pk'N<µÈ!Öf-ôR¦k™¢æµf$Ú“–ÁMsDs|÷È÷]JZru™«m>Nà±Ìà~z1¸½»P+ßõ Rcz—ãaŽpn"wdêb¹Ø0^p¼~Xúå¼£sö·2°ÉlCÒ@=©Ã¤Ù”Òx5M¼Ž‰K™:K§{³£íx]ÿ±‘ÞöBG¦‚¥‚·x*þÄšZÔϹ Àô-¹*'´?ª,›g-J¨£ÛRee‚†;—à¶*òiŸ±Ï ‰mOªõŽx˜î'›Y¶ ¨[~ƒwŠWq7rÄTúT‚ÕêM7Ê-B;È;¡QsA„ÏÀ  ŠôC¶’¶ûÓ¢Ÿu‡ïçØ”æÅ¹J„}q<[´•0eá zp) bßT„ ýA´Øw©#´8 WF¨¦ø l(3§~ÂagÕ«LËœ ô?@Ç)ZÌÙÆ£æ8ÒÍ(cä¹£)âD“¹CºÉâÜÕ,à›ãE¦w47š…akh£˜Ð%ðiMšKC!ç\1M>i«­)½ÅéÙJíøæ#*^W¦>92çÎÓd$s¬yqóg2eÆÔJØvÌ9ŸP72  ¸Dýâ8jTSÚ 8òé–<ûbêÍàÔˆ0–Hï°TCê@C÷yÝ;m 5¤rØt^|õÓ§s`Á!ûƒËñ8â—™mýû½áµ‡‡„gAÉ#fëuÚF³¯JgS+|DC¤‰ÖÕDóiöL yó3*n>¾£ô–M.7GSgÕ’yGãÊOTŽCÂ&YL¿'Z­Ø=á\èTõy„ðïrÂÆ-¦cèþ¹‘^¦b÷Å¡²ˆm€q†äÊÅ3ÝTÚuà–Ú–ÊÅæB¢c¤Ç3+ò8¼;mbŠF\@3Å ˜“…4¨ ŸK±‡xäˆp0+:aªöðCúËÔ’¸û“6,#ùX£aX{gãî¤÷³ ci(è艋 -±ôÿh×Zæ­Ð…rßb‘04³xåÓ‘rvÔÐhAOµ¹Œ¾uü?±bòia-¯A- ¬¸ÊIl{®ªÖ†÷Š“Úo~b* ‡ ˆ‹FØ, ÈÑ›(܉ƒÒÅ\#®Ï¾p\‘)a2\EçŽyg`êmÖ˜­s¾“ûø n¼ªßwmKôXçÚâác¶7¸ÉŠQâüÓ†z쎉mûß•Þ(«þߣß;YÙŸÝÓE±õHeS9A|Iâ7·„Õd‡ÕÝ^¬+­XÜbþ‘‰©ž;zÂH©=,˼sádžÌ›$r²ïZPª½»43dЏ|j¶î!)4ÕÙ3j×á”UZ»ë¼'ušjÏbFvlìá?PS„ºÎ&@P÷¨ºM?w³jvвù¯×4-iüH.m•§ÛŽ)€…ý :!GªfWèƒÏ¡Ò< æÆI‹‚O[ÂJþ„[¾ ÿZ©( endstream endobj 120 0 obj 1798 endobj 122 0 obj <> stream xœíYK‹#7¾Ï¯èsÀŽÞjLïx¹-r¹å9²—üýHUz«[ݶ‡eÀÇnwKUõ}UŸªLÎtú÷埉¸?EÙ¤ ›¾þþòóÓßá*™¾þù²Ü^Œ8«Isž§ÛoÓŸÙDétûã— å–™ aöÄ.T[~!Êžè…Îî-•Ö]T–Â÷ÔýÓp‰}†[à aO"Ü(üÄ¿Wûëí§—ëíåËšj–ÎðÚ~µÒ¿œ8šÁˆø‹Â°1˶JmOú"H2/ ê/-®ÎlïN°Õ¬øæ6Ðy3܆¿zW_*ìÎmˆÑšë¢¹ôÆ-°$ækg“[q“ƒ oÉ+¬‹âÝðÞ-}Rñƒ[R%SðBð\ ËÁx+D‚è1šœEK‹#ÐOödÀk@ýr—t;<ÃÇsô5 á F·‚ª‚Eö¹Ë"Åc^0ãI|!®€Gá_æ <–h |à`éÒ_·>É6gTKžŒ‘’ò¬[¤ö2Ò¡4\“R±Ì'—f²Œ´iF!Ëìi¾ ÿIL€H×âöPB"WznwÁÒôi”\Á}À ˆb‰­á- –Ï—EPðÀˆLR¹Žè™3»’ÈÙÿׂRB¬™«tЍ3Ç ‹d·õ¹åÅWÂ!à`Ð+\X¬ ¹§…å[@Â.ÒPgå’ÈÒ†…V*}ò„J D'r° 7ñ+iç9µ‰äŽR©³Y+FÁÜ-ubï%NR°3û§ïEœ$Ógù!Nÿq’”õ§Ë'ÅIÌóè¤ø>òü ×¢†´êTܼ^ÔV æjÕ-$$g£z1#YÌtäB33³Å»ÃaYWÃÁhJ*Œ'õW¡·{,ÜÝÄ@¼eHW+æúr.æ¦büc÷I]èò Ž >wG5)%àŒÉ¤}k/o».'Õho8Àßf«¶œ§²/XÔŠb±[þSð¼ýƒè9,œ&aË1HÏ^xbmÕájÜl 뺚Öyðñ„"Ôª¨„P:qgOêÌ[êˆVI·{ôHªQ¹FZÝ(œ«¾/0†EÇìãÆÄçæ!ƒ‘#z ž•Å& jà*(Si¨`eÅÊñ)Éê Ö2F¬ÇŽ|[fÑž«wô\ÛÇ£0µ³î$÷£VQlŒÙ,ºó;É´:@Jõ>œÜN·ò[ÌÔ㌔¦;×—J®‚ñLUÒ^èDÝKr’žD6ž,t„ͨU:m$Vðºò^3åmØÊÎ>Ùl‡—b§ùT£¡ŒòaŒ•] $fßÙR’ÂE_mÐÑ€Òµî&— à›¡8Y£Qø«œMc¬ìUç{o5ñû¦8¨öÜ\¶Ê ÒNº~¨tí !ëöï„['רôYX·E“Þmå_M=*cÇl•Æ/æ^ånÅ!²ëGvO®Þ3-ÊqŸ[ÝQ­™ŸÐZùºPµ¾Ñr¢ÛyÉ]|±T¨ÔëëË6¤›§«N;‡Y=aAa†v Ýô½³€ç©<Ķ}àf¾Gl*ñLÇç¥Ô§°âZ•s§ÿ Â}aÖcàD5ýØ:¾Ž1ÓªkŸnR»IËÝ:Ò2/ ’ªO£H ”/ûбú{A סÜãÉJ†¹VvóÕjuº±;(f’Ʀ±‡‰p˜ »}ä±™0ãmê'¤Mâ!‘ÊÔvç¶"›Ý¼¿G€ÇŽ<÷—±‹–®6ñ©Ã?dW9¬®E¹º?c†„ª¹“KO$³Ê°Æ±f¹+’h "ól c]sVÔ‹ìXÅîœE"üXàP–HhY⬯ ¡"‡D®Åà~GV©Ñ]›òMôÔqÐI| è¿í€žÊ¹k>ôß〞 Þÿ”ò䀞ÒyxÈ~bÐ)y|ÚD«ƒw˜öÏvYóÛIFõûæ–‘´½ûèoýØé‰Ë8øDt‡éGøýôØÌ©­Tw fg=s:6rb³ Ÿ;¥b³s5Þ 4§Â•·n¥‹qeoá#_¦ÿdC endstream endobj 123 0 obj 1544 endobj 125 0 obj <> stream xœíZK‹#7¾Ï¯ð9`GoµÀ4Œ=ö!·…–Üò€ÙKþ~$•¥G«»í’…e gÜî.©¾ªúê¡!'zøçåï±?вƒ6ìðå·—Ÿ8üî’×?^.ï/FœÔAsšï¿~¼³¥‡÷ß?Ÿùm–îräg¢æ#=6«3yâL„»29Óð'U3%î‰#;S>³³Ôö;ñ&ˆ{$¾n¿¬ß'H~_0FfûÈÅßÑ3‡Ûö¯£<û¯š7¨_Ñ.¥ÏD‹Ñôæ6—]Ø5A47þƒœÓXÛ=÷m ¤á¯^¦´ÛîíË<áÅà¥pÃ?V°¿D^íëJôüËûO/·÷—O=Ó)#­­KÓ‰É*–B[#š8éìžÍá5íð×™ƒ½nQyxÙŠ›†x,"¡<° œ@3Š#àk«YÇûpCÃjQZÀRå—»è¹uÊ›””ëFØgæ£ó³±m&r•m°j2 'ç­&L°9ïá²Æ Çcpx½Iñµ[ŠAÞ Aðx»“´Wiœ0{•v'c¤¤<ée‚Õõ²¹°º-éÔÏZY•Ød daL1qlÞ×BÍÉI±y£ß©FRå½ÈG/`šà÷7Ížè&ØdlQS r×ÒU—Ç0gÝ õ:! ÈEȨͿ T‘*%î³ÆHZÃù¬ù8HbðN’P£„‚ÊA‡øûŸ=ÀNíóŸ«ä°d.Á™¥ýÎÛø™éb‡3‡‹½jwch}¦N¼k­Çœ¾9™p7”¿Øñ–ö(^ÙÍ3ºÊWçu>‡ø4s“_`³¥j€\¼Xà8Ï‘`)… Ò¤@ »ºŸPÑÜ)™M,oîŒyåȕܭRÌ]ÉÝ>suWr·›g™ _¯D¥öZá9¢o3Så,¨Éä4Aù)‡䄌íV]–ªá,fe$eV¸WNêdÅŸ_;l¹c›É7ÉÒCQ‹ä[ç°6Ú×Éu‰[›…[,Á¸Qý*ÕFÂð¢Çðkvbßë.k´² DO•™šô2çWdjǽívlÍXßR[?þRj»§o†}}µ¸™ZöÝI½•—‘¬éfÿ¼k°N߈wqf+:eÚ¢QÃ]¤_®žeoH*¨ºÓ¬±²¨Ý­Ô;ûÆ¡«œáʶøP6uÙèh°‘iõul&›&õÊÐÊâ&÷K±ò }£ÜRö¿ Æ~<ø"x§J²ÝCæÑ‚¸S]¯§Û悱MϾ6Æ1|ÇvØÏÆ<"¦©iJ×þˆF_‰µ÷2ö±KÙòABqtF®™¯cÝ<N7 'ž·ö•ØÁÜQ©ÌÜàŠis+Ô-„i:%LÝÝŠÓ鯽mÀr»/?äÆUq=šAµ£õ ºÕæ~T º¼öÉŽ}—ëØ¯$.dS?cG­\‚zêm]{­øò[ãLÂÖÈÙÍ= !SQ ËÖ³tk½jd‘ 7[Ó¡‘Ó&ìÕ,¨–ƒe|9Ìg2.¹Z*U§¾MX®gŸlþË­j@ªËÅhyÎ26QM=µÉ1‹XìÜã¡~µýrz@Q9r[Öˆ•sÅÚZàÏ7Mìªyý6ž´/Ë3¥ ‚#Êô »jDc}˃ªlÕÍ“|fhS»®·Cc^`jpDƒ»—˜MNAEƒ:~IvþC9ðj¦„¶{ÕkR;-Õ2OçʆFê´û)+l©4©^*:D Ò(ÜÖ_©ž¦Ã½Žm'YS±îT.CZ„^›gÛSÈñÖ˜nê6)òtuáCè¾ç9A‡b9Ï6ÀK,¦léá±xä¢Å39Ï`ô†ã÷+‹™Ò1ÆH6šÄï)[0RÛßÊW…`1'ÂïÐÔ¸êí¶9{T^—ê©NW¥Dݺ+‰K³Ó²l#q»øðYls Õ;+, V„ãæxÕ‡«™:žàNnûÁU¼)Ú;5öÎ̾PHW98$h–Ý´÷&qèóIwæ°H÷»z*8ØG¤+YQ¶·m(î)Ÿšâ³mó¿Z„Î"*›¢õ˜Èùܧ%¨o$¹~|0°N,øõ·M‹ƒ¹5>4†éôÑ_t9Ü),ºÁ±} ÷ÁÑ箪…†1í ÿûyL«Ü{3‰ö?žÇ> stream xœíZI‹+7¾ûWô9`G¥¥Õ‚¦aì±¹=È!ä–rä]ò÷#Ui—Üíž7†¶ÝÖRëW_©ÍN0ü}øk`ö5´áÃ×_?~7üéï²áëï‡óÛÁÈÓ8hfNÓðöËðýÃÛo?ÍìL¯¦Y\—£˜_Žà®Úß`£»AW¡˜áÕݦ«¼rw /òÊÔÂg¼À…ÛÉ|ίêe±Ó.L‹if'–ã83ÍøjÚŽ¡%o¸íËr”³ýÕÎgW;•d¼.ÊMåÌÿäfØÏÒ ‰ƒIjüÕœ•v"¾² »± 0¯Û ØbÜz?¿ýp¸¾¾ô 7e-]îÆ9ZÃ-a­ÀÙÍê³ßÜöeµånÃå8Yý`t†Cóh4W¤g‹ô ³Àè¼¢Ùä¬åÌá2¨ ÞpúXŸáÊvgk— –Ý GXíµÛ* —u5;ÉJE´2Ùi§­Þ@uK_W¢9è£u‰¶–Óü5[&U¬´š×+Œ±³Fz§›(î~÷ÓwÊn'œi¦¢ÐÄ5“Ý,"F$MÖa¼›Îì¨~ìè¾å©Nú#¢KA¼N¨¥sÁÝÑÊüŒKﵬníÅÂ0 žÂy„ wtÌLöM15¹w-´·šæ6OGîsUÆ\}Ay„süÈ4"€ÀëÙJ›ÝºãZŸ'Qy®Þ.ã=W§h^Ëþ—¿ÕŠ5ìz5lÔöZÁº–$© œb;ÀàNg™FÉÑî£\‡P¥Æ“Y e„}gˆ”>ðd4$GbTY0·#Y‡nK xrÁŒêxYMG·2Wi²¿Aߘ·òÔªÛØ<çTµÀ§IäÁ>^$§ÕÉ´²JIxBÆQ^?!¢M„yýPÓºO$?ñ:qDÒ]BzÙ¯ç8‡¥*ЉfMÆ"eDô¸‰y”c{]D¶}Œb|³“C!ÈôKÁ 4i,ápé\ß & ¯æq²î)®OªöÔVZnÅxÃóŒLò ¹h•€ á*˜oפ0Εf¡VÐù!IC|z‹9sмz)ï;ŒœNKgÒt³ cYj(JVÏ|ÈhÂ̪>R¹jH=5´2ó@lD^Y*±ïᎨ P­dùpå!_[|Y+9÷Î[:2…Äà[ºÈ~>ßM2 Ÿ•!9ŠÔ!8ÙɤØ&>€5 ZÙ Q/(i·ƒ H15 xd¢n¤-UÝeʺ_è¹D% ¡Äì¡mV1<À‰^®.åk•KºUËÝM!È`•ïù~EˆUñœ¦X.~\Oò¯›n5U%l[,Ç­4Æ4|0qâÆLO¥YBˆúýçi@1¾!mR†Ó•Læíèç瑹u·)Ó°ã÷²¿±ìJƒ·-˜¼—Ì¥"Ùår÷áÅ÷„y+›ÍO¢ì6›TYØN¼¦Ê%ÿKµ¶ËÿLÃÿûF>'8k8â¿‘MÔ©ì"¶_,ŸË;²cì¸"NV˜*ܨ5>ÍR6q@kß"Õ¤Hr›úCJBÜÎŒc;½Ž³ƒ´0Qwçp¼DÎam0îƒÒN‰»ã¹ªÓa1 ê#½Ü{ HÐ}‰‚âd‚¬ûm‚†…HØv®›ä­:Ü—^üXÂãy™’™í¢èˆ~éVƒ­àUãêñoLˆ"@W"@rH4‹sùø   _‹4­]½¹eêÏR ¬zs3—<%H*K¬Ü(?fˆ:¦øXClŪ„¶Ý(¢"ë4Rç±]V¿ÔucñˆÑŠÃáÂ:ˆÛø1óѳºÍàáž«øÜ2u¬UŸ¥Ö]ÇkÇåg §Ë KŠB5+Y6Cy÷ÔbCVÉŒ>>5/fvzKhñÇ[X?€[¨ÄxÓYe¨”™g¡R¤Bcu¤qu┞ûP2œý“¿Œý=Žg=fµ™°)uÆÀöWÝÏﺹMÂUϯÖÜ“nšÏ÷h‚_}WÒéôîJÛï*”¤'¼Ûc3ïƒ Ù>Žótä[õšæmï¹%uÉôH¯‡’ÿÃÞ윚f3‡½BBùw„H43k<‘Èà(ò>(¾ìDö"®ÿýbÝCB4½öú“«æ¨ãìÿëÑ<íÛxlVožý‰æ“‚i[$´KNóJ¹î˜šVüƒ‰#ÛÀDª^%.6P˜cdó·‹..Ž ^}.Úú4Òq ¤¿løŠÉö¿Uô×Û-ŸÜÊbj8 Ÿ9ù09†ß[I€´€Ü¬4s°¼ýAS¾ ÿ n~ endstream endobj 129 0 obj 1745 endobj 131 0 obj <> stream xœíZ˪ãFÝû+´Èéª~I`¶¯ï"»C!»LYf6óûé®ê§Z_’ †˜ ²-µº^§ªN׌8B÷íð¥îÏvvÄîëçÃÏ?t…»¢ûúÇár?Œêh:+ÆãÐÝë~|Ç »ÿþËIÞ&í/½<šz<žÜÅLpè«›¶î‡zSÂ}Ä O0Òôtꇓ°ê&¬¼L(NÂL=ø«= ·¯ oòWÁÒì$Oâìï »¬€ÐSoüS‹ ‹ï~wŽaßáïnH¯å=ðBÛòæs¡"?hL…ëÔ;yÖÙ¨y,•ZÞ&¯CL)¬rϽÿt¸ÝŸ–BeFíb[‡ªE y{žuz—²ŽRŒƒûÐBþÓ*„[tbGÅÂU.=DÄŠà[éEzMÖìà­´>Ú™€¤Tðiö“˜%½Ý…‚¬ü›‚—8ó[&…%q˜dôÍH?ê=ÁC„¡Âa#HH7Ùå¶…Í0'" £I¤•üNùЋñµ¸ÅCŠã„[žrÖÙoxv·j'nÇMÍѧÎ!&ŠÝKi¡.ÑX•,ñy@ Äû¤êGð®no›]hBŠ›¸bžT)çý^$Îþ:å(I!oÃJ|ùÝ:ãŸÖ¢*8îŒj[záŠÙ½¶y;HhŽrž\3e¹fȤ\¦¡ª€!reîÄ:C0©«¹pt‹‚Þ×í*&À]gU,øw#b>ääßà i£n›²µ5Çq£Ù%?±³4–Âî HQ¤]tºQ ¡Û®û‘ʾñí¥,¦ÌÈ–Prè ¤¹ÍL‡¦£ñ[Î!…È1cJÖ/WF%ƒPS¥Çee:]uÿáÎN/qä+Öæœ~ÀM©òvØ qŽéFù !Õˈœä ^„í^¯„;[¡€°°K±*[ÍÆ>Æm¶ËŽFÜâ¹eþVÜv™ÿ¢«TUÊ#q[£( ëµâêV^ý_ Ê™$'Ƈ@»Füå8Sûˆ=ÄÁ8,ŒI. ¿%Àg²YÌ"O]ê£Ë,ŒÓn° ˆ6[ÒùÝž»p5ÈHX^ð·Ì̸ú vÖe/f=[#ܰ\Q¦Iìt éY=´'˜"j±à•Î §ž]—<`é^PôÐPÿ„ª“‚ïEåò78*>3#…Íœ/SÆâxEV{b@Á‰ËŠ»¸%\WŽ{ËÜ(Ö¶²¹²ßæ|×{r лLØÕ9.R`‡ˆõ˜o&3šº æêª•2ýYÖŽÕ½uqoªö+ê˦ղØZÌFKGúÚ.V<%ÃÖÙ eÛA‚±!à;µŒiJ54˜•wöðrXw@#éúÈ€GªÉê !äGnÁ¡ëg­!êÊrHä?Á(îÍòÄ©&¥†èÊ¡gÿR¥ûTõïÞ ›CËœæq]ÖM‹¢‹jÍŒ°ì:Ë'Š> stream xœíYËŠì6Ý÷WxèŽJ/ÛÐÆ3=‹ì.4d²ËM ‹@î&¿©ª$•üîÉ0Là2àöÈz”Ꜫ:–ÕšN7*üyÐMÛëæÛ×ÓÏ?4q«j¾ýqï§Þ^|ÓªþÒ5÷ßš_uÐÜÿåjnƒ‹—³†+¸A_Uî¯à¸ê×á ²ÁµábU¸˜§Øõi8Û«ÒøÜâµÌU»ÐZ-ÄÛÖÞTkb«c+=Síîza¯có CãP0ÃÙÇyÁ-Ñ}Î2‚s"Ç>èÎPDa)Ä1œM÷mƒ—:°ÅÙ‡lÈEìÓ°BžŸaÿÕÈDç»Âu÷¹ ª¢è”utÉ;ÁÒsKUŽS=6j‡fb5Æ7û°_ öD¡ÅXNØ×´z¬  uØ—T™8œáx¬ZËæ4Z×£I<ëkUâÂöSêçåÐW3žPïÊämؼ¿ôÓ|:3žWÀ%Ùǃ$3®Ú¡>-Á½b•‚xÑ,LÈÃBUÂàÂ>¨âÍ•ÕÍ }a ‡ÿÁ˜ûâé,€Ä÷3 sú¢'n«³¨ÎÚ‰Œ‘^’•\ „Šˆ»…òQmåt{qm(èÆ$ ‚é³6ɬ1"—DÖ¡tEdÍ1•å@Ïe8ÑwYž©Ëþ{jÆvÝe*6$ÒaECyëý$õf&I¿‹ŒÏ-¸*½ë~ÛÍDïwaóAÂÆê-æ—5ŸRÖXÕÏ^>FÖÈCwÓ*R¨<DŸW©¼þ¿”Šñ}¥E© 0yÆén…5}Ö/æ%®/j5ÏÐìÎ͵ÛKu¨Q1} x˜à”ˆœêÈÈHö¦×ñ¥ÜÚ¬Ô "ÃÚRz´Ô‰õGh2Í”ØK 쌬Ûû¥ÃJ±•T‘·õ˜1*iѺÐ.#£ÍÚ\d‰ï)½ŒrëÇÅœ·8Wàô#%ŸXI{Ú¥gÐ[ @='/[’ÍäìUœÙ9ý䀇ݑj+E®Í­ú&ß9Déf"zê¡› SÙ%…o•!7YÝ!ŠCA{“ÝÕ>>?ÝOƒ Fádf} ß{JiU+¢yÏGÎo xÁ"yð_JŒ K&Vv‡¡‚}ÏL3¡;3Sº‚a’§ÒÓpðüéƒpŒ2Ä;Â0GkäË&Å7/1ûü’•˜f*J«ãû, Æ5!¾ç<µê:]µwHÎBôßr¶HݰbñË”³ñM_¤–òåkÙAVODuѹ¨ÜÄ«ˆü<‘$—Hé*¿_ˆ û/jÐëÇN Ë×­#™|»~Æú Æ„ 3NÆo·¦À,£/S@2ÀÊÎåàD¼CïtŸƒÛ8=?—> stream xœµUM‹Ü0 ½çWø\H*ù3†`˜lg½-z(½u[è¡Ð½ôïW–ì|M2[(e ÄéùééÉÕïæ—úyÔ*D­^_šOïÔϲ êõ{3NM´Wb׫é«zÓ QMß>æš\~´f@›Z=€ÎOS? ½Ú#ú„uß$ %C2\8¦§Wt‰6—Xö ÁøÔbÉ+9o'HaK ®ïaÁ&[ÙJn]Pº¿bL‰ãGXòQcŠ”ð”¾L›ëÔ<Ié{GÚo¥t6Å03:ù@,,Ð㸫×Ñ󢙣W=.j@Ð\æµÔœL, /Á~‘óD7^Ðvë+†¾å“é_)>ƒ tŽ(¹Ì°h–ûMHPÎ Vt·èXà}B?;@gwbŸÐ?ÂçÍêª,­wâœN¢Æ,¼?¢>#ÿë,¬`e_„ä8;ËmÇ·Œg]Ì0×äk~0¼t³ðäV1ÙjÑ6ˆGw^¤m1£ÈgKùÇÅ-‡É1æ’‹¬a¬Z­[<âÞ³q9D /I¦˜øÎûÖ”CýªKŒ ­ÏCÍ­ÞN˜ÔÍJ*?”Ärk%l.Õú5zCùqÛÌþ¶¸§^ðùÀ¢07a;~Æu¯[wÒì¥fn{½5`\…sÝõþÛßÌA¤nfîºË·À½8,(Y=Ô»¶ŽÀÿwë$Z d{=núÎì$L6_)ŒÉ¬5"Fq{É8ëÍù?|Ý[úؘžˆî(öÉöeæãrמkÐvúi€pKÓIyVIÇ endstream endobj 138 0 obj 593 endobj 140 0 obj <> stream xœÅZK‹$7 ¾Ï¯ès ;~•« š‚©éÝCn 9„Üò€É%?¶$Ûò»g7f¦««dKúôøä7yùç寋p?VªËº«Ëß¿¾üøÝåOõ¦¤\­û«Wµ÷w±›uwüþr¾¿¬Ê=l7}yÿåòýgs‘æòþÛOw!«º‹Çá~½‰UÊãç÷^>½¿|¡uDö¼Q7ƒÔEJ Õq5w¹û]ø×ò.–ãjïNàzè»Ô‡w¡`©UìðwñKÂ%ÿµ¿õÄ’”¤{—†žõO)q˜;»W}>®²XÖP'H‡Øãººëj‡[ý%Z‡£L/¯àú°o¸*^ýÝA’&tT/ˆƒ{™‚+mnI·$ùt‹<™ÎnÓ¶ØS&ÚP Œ®Vº àÊ(;í'È»V­·µt­Zï´‹-m‡(œ|t•2š׳^q0ÀšYR£ú^å:Út\ Öc6[㚨+®Å€çì´’|l#âžQþM¥>qÏ´uÿ¾WùU»/÷¸9@_ðX–@ D¸Ä'wßÉñ2ñÔ…wdIÀ+3+z‚á!© Çu¡˜@øû B`‰`Š!\nƒLü"€šMYÀýAè†tþ‘)*SZš ý¸båâÍÚ¡M>œÆ"‚‹Åâê5ñÕ²o·Ò[=Ý3àÀV¹FpAËJ_æÃ¸¥Þ n¤ßØ£ ÓmQæÄ*DÉ')¶ æYVoîŠ<W!ÉH ©¡YW}³…YõR`À/»wuCaÅæ Tµµ˜“EÌÛT¸QAx^.Ý7·ZÞP…)ŽÑ¶!ÓeYºÓTVè•Rd™ÊÔñ|yY–í¶— ìs {m׆p¯rÆÈ:OžÇžã -†—-£+%²Ì›…%Bí¹J[™}œàð6溋4æ¦ÊøKëg9än¶PH­Î&阮ù¨é؆ø³g»,»v‹™¸×ÖLAwQmd+‹2L›Ø1KH^È£3?ªý¶”å‰Û¼A_Sy󼉚¡Ææá#v¼ 0·í[iÃSô KÏXʪrΫêÊ`/¯Ðpö´ýæ5:´Ùz,´Œ  õe&áÝÆÉœEíw®>ñä.Û¹ ?`'ëd#ØÇ60>tªÙ…û]8µv[Ù}aRÛ“y²ÛyßA1ĘÃN‘´W6sÃv(™IÕþ‰äö˜3LÊ·Š1¶X‚±àÉÐYc‡ãw.°+µ¹¹²®§ÑÄ·Ê>k¢1¢¹XÊDQEmð±ÓÖ¥"ðœ9¢±+#áf-€Ýy‰E¹Ô‹ŠoßÛD޹¾,þøÕÙN-wx©2ŠØ›ájæT¯Ûû@H­a[ælê‘h¦tÿèífÒ»:QÓ÷^Šõì“‚þd󆼋šðöDŠ(˜SK“¢%Ø‘·J{íÚÍPNñ=yÆÇ‚‡R™¦Û©$&ZÅ1'™«ˆÅ‡Á;¬ùÓ6u-¤)Š¥rÍŠDN‚T—,‡‡>s &R<¼3/Üa,1 5a^•¦ |@“ú¹X`Yf¯Òó)eCÓdi®bÿT¹²2R&R—?"¤¹{j­¸„ߎy@ÁIðIYñ}­S]a1Ne¬Œuw“=ÏÙ‚%í'cói¨µÞl ã&õôz*äº!¡á_È~›—_í„ …_ ‰Ê•/w‹ËÖÃ…­¬¸äŒ1Ο1]S  uUy¯ù¡± t=!\U 3dPYZÇgš_Kôƒð5+.‚]Ç5›Ó5k<’Þ‰êÒWç¤íÐf­˜ãSvã !ù…en+ªi]rÛðôµrud6N  A*5ÍϦ¸¹Œ†O¦ùð*¸ M?Ï P¾FÃæšLe0D1ÅÚa£cçjUÓÉapDRËŒÇtâ-ùʘt–üÆ »à¶I#®rÄ#¸!ëHA×Ï*=‹i»8c1“Ù˜:%­î[­îã›¶,>€·} ÝS¯ÅZ±øºWŸÑaÚËÏ=*fÏIcfÄ!¡3&„È(ƒ\ؼ‡gïÆ^baECÉÿF$mÆa¨µ]†$mSÁ–‹côÉX™ñnF×õ,C‡ÈýcîÕ'Òä ½ö¶c^™5ÜZfçÖ3êæ©ß8ÐZ'i6/Ï Ê¾Íè}œ€ÙånÙ|Òðì Åpb¼ ‘íG«ôþ k†€Ð°Þâ+œ“•Ñ!{ÖEðiưO«FY¢g×Vµ¥Ô¤*n‡‡A=YÁ' g . ê9‰(i÷À¨Ÿumz¢ŸâlñæÄàˆAÊ[7—ØzO¦ÅÃõš¿{Câø¦köê·xx :ß¼‰§t£WFž;ë†C°Dc üuʼnCŒ¨G­yQ–8x²m¢ñ`€7é>ÁäÑd´"†øŒ€5L%ÚÍ ›L±C+ž §GViV9 À±WÔÒ>âæí.'Mý÷Fe{Ïüm)îÙrxgÚƒ³ŽST]*Ó5ZƒÆ¹Á†š1úPõ[ÅÁ"Œÿfí‡a ðlJO :¿^‘²ެÿÇ^P?<"~Z pÇ6É%Úi•&“8C¿MPŽ)øÉ{U&]‘1[+¬»“$é_æ©$ÝÅCŠèÎ/—OÃá+ endstream endobj 141 0 obj 2330 endobj 143 0 obj <> stream xœÕZK‹$7 ¾Ï¯ès ;~•]†¦`z¦çÛÂ@!·< ‡@ö’¿ÛòC~•]=³!aa™î.Ù²ôIú$¹ÐÓßOˆù');)ÍN_}úñ»ÓŸþ[rúúûÓíýIó¨"ú²žÞ9}ÿ¶œ(=½ÿv%t{ÿãéþþô¥ dÍ%Hütez;Ó+aÛ™]©Üè•Kû]6óYÄoÍ2ûlgëÆ¯äy;‹+UöOáþtOñe£r±rt¹Rí„ij¸µÜ¬¼2º 7&ÚýÉ7Füf“³4ÂâÊíéµe»ùS(§6w E1¯u†-ÅVgd­óžó/”Ù/lg„Þ܆ÙÙÓ¯a‰ttú²Íi7‡rþµýüþCßiR/æÿÜiù1íúìæ>0øŠ¿èëvæÎWά¶LX«)°›3¦væ9fuKîW,¼ô4t8”Š\Ä!"‰x$¤U…Gܳ,> ÊÂ:üy ÖxtѪ€3Më××›j›~mllšniÀ;¨uF¿x÷5ØÀˆ­VœZ-YR/às€¸e¹¨2M$l´Íì¿¶{: ’qd²KÎ)€!’àØw’d=l['Co¾™O|˜f6Ùu12'Zt„yN!ž—!ü ÞéÝÚSçû_nä`»Ïú8—ºïe†4¼EÀ4% ‚Ü|·Èð=“Iè¶^g0J¾5FM/òJ‘DÂ)Úo—´Á]—£µ§8#‹Ñé!£7ÏS˜ÿ¯{xÆtç,¨0kQk\J# ‘;"dw"ä>ŽŠ¬ž·Tí}‚| þËSpb`Qò¢Fr÷jbÒˆÄî‚Å£C§?/%?1ÕAáðòñàôq âe=[9æÝ½›õ±(]õpáõo$»°fI”à ‰¬B-]¯˜É¸Ä5"‘XÇlí8"½v’Üd½ŒÈŒuvŒ ,ÃÜS\Í;~l¬O8,‚ÂÕ€è§íÀB]–Òáv§0înJmC(T-KÏF¸hFRÖ@©Â­ùtóÇšr€zAuÖ^ë³ûƒ±ÄM«C›kÊüN¨hbóŽÜÆYÕç¶ãÕaâm&·Ž]ß¹hì í_U¤¦vq¸Î á¬!sܦ·ÐÁ,=̉j÷‹ëH3LÑL«væ'™ÃN:€¯ 0p]ë~÷b¤[ŽyP ý« ©ÓÛB1Ê3‘g3ÂI2°ÁÏ2aõgô-g§1vñ\p<íÀ[„W­ü”}æÉFì1À8šRÀ'µÏˆ…ZCc;Ɉ‘D—7Ë*Ô{êÊðêŽÒ%¾teùv5Šö¨S[÷ «önd”›…ZÚcüš¸•á]„·ÏTD!NÉÝÜùRäÓbVëg Ìm‡ZôTß·%´ëéF™ýþ‘déÇÄ ‹aN P<Ì1ôœcÓ8ÿeƒÅHycèÆL„SаRh#0+r‰ÐÏq)Jî™[ áÚÔ²iišRi¢õ;îÞwŠÐu÷>;‡ëBxšÅ§ÙE—ø$¢?3>LlÓ‘DŒ(+ù¤e|~rôàX¾v–3e¶O·Xq«ýÓTNLüµò¤_DkÌwÀ#ã©6|ýð… žh ùl>ò;8¿uèÁëìöæyÛÍpÓóåzöó_—ª›vùïdf3Sëq(Ø7àZ’ÐÓÎâ:I¸ÆZ¡Óº9!ÜÿAÐik×Q’‰¶ùù¡Z4uF±bÉ ˜ ÈR0‚àHz—g"¹†j©‹Qµä§Ðš < ÃI“[ÜóŒÂG,u/ªÛ˜h¨ä&hê\Û¸5+ÍÑJ É­˜µL3u˜3z9v©ƒ$’ivïS…²C ´Ç;"lŒ5Tî”R{J›5¡ð$¹ú‹rÖ¢‚“~boRë„»’Eƒ£ÿ¸¥`‚iyðjIì¼bQÁò‘ûq/Mƒ´CB„Ü"xPKGÁƒ$"fJàoétÀã’‡ÃH¿wŽ—õîŽËìš|³)±6ØCN§Q‹SåDº S#[i=HLdL…n+ŽWQùnEbª0e¦ùMIc¯6îkú›•ºÁα«²²7™j+C vZ zŠà26r,ÝÓ¨\°…1¾lr]h‡³w{Poí‰!Ô( ’Ëý†‰-ã†3e”õýy¢- šÓ˜`¡ežMcIâHc¯qp¯*ÝÛ Ý¬$ñn)¥ic(—~º,ÏÞ’µËa½ L#Û™}f¨È*RfÈå¾—©:8H@Ã÷Ë7: åƒ÷Ÿ•pã>¤ÇI¦oëp‰›(ov•¤½e&ŠØxa©2×ÔZ´/À³ä )Vßü#µ% •D¬ã aC>è Ëá ‚õL £j ]ü$¸‘DÜäÊIÊÆ—À·[b> l;Ähé€Ýƒb§n“ôÀ-ôà·a³ÞÐΘÆ&nݵ–¤`ÚTòªéŸˆ—ÿúùzðUo$ÑOí¾\ë8¶oé’ò™+N±Oµ2iðAì3m¼Ú:зOêáZøÌ’…JÆûé|é'tÊÄîâ¿ i­vÖI`ônâL Þ¡*k6^€ž<»4̓èÛr…~~îŒÓ ßYäÓýÑ+)»èš"ïqU;ÜâÔ¨‹΋95 ÝÅ•CóòúìEcÄ·Ñ;2Ñ4îµo©zïÛ9JÜÔ’°JÉ[Çlî~¡æÐë&Ö¬3ØSa {µÒ•¼’—_Nÿ ¸ endstream endobj 144 0 obj 2166 endobj 146 0 obj <> stream xœÅZKã6 ¾çWø\ ©^–l 0g’½m ‡¢§¾€¢[ {Ù¿_‰¢$êå8ƒm‹f¶$RäGò#=ìćχ¿fÿi.3‹áÓ¯‡¾þ§løôûa}ff—6Ÿ¦áñËðõ}8¿_nÇbgS¾Cø?žÙ¸ˆ3ËQœ¹^øY²å¨Îâ¾ù™i÷“›Eúw~™}jÎü;ŠWê”ÛÎUõÆVDõ`kXH< Ë£q&gB°£ß;'H€.VõÉiÄØÍýWÎÙ_{–PkÃNê%P“]P#ò¼á¸…¯ºƒ!ˆ ܲÿÔ ï¶zGóÿ·Å'xÇ“)ñLPÐkxÁMôªp‡Ýèÿ9xp·fú$ý­U„âê´’Îbã™Iød߽˽ezåìÀÝã·e>³+ZÛ¾jSø8ñ“.L@‘§Ñ\2> Ï|F+b¦¥Àð 0» pu’?LÒ,µ"¤üYÞÏA?8l+b¶Ð'¥¶¸#¦ÐÑoÞûÂYr§BÀÓ]ËIÙ3[FFÝÍXŠ0goy‚21c²æq‘+0š}€gaW¡{o­Os¡\×A$ÔùJò†ƒ¡±±b`Vi Ôœ˜ü# Ôœ²£—<6Â}Óóï1r¼¢³rŽáµà•FUîNqÊyÊ¡ hkj‚ð(c »Þ‡£8‰2qbžÎ¤! ù¤2˜Í‚ãs8ÁÙ‚¹õL1»ü’¬EdE!¹ ?XPf^ZŒÈƒqéx®‘m¢vë2å CD²•§2ˆ .ñ'¹ %´Ç>šnÔ'›N’æ4–YÀ#-Þ¤Kÿ0è<^%1êÒ€œŽiB¦º„¿Pfäñ!F¼`ô0£²‹æ†±'rïQÇ‹]­­v7(Z:œ¼xLè"Ç”Še„2[cA)H‹»rC‚å¶×„¨ºŸÝ8ö¨_ غuwZ&ç‡Ìï!–Þ‡=;ÝÜ~ì lc ÷õŠÍ¡)iöÔ§ï"üM:é s_È<Ô·ù^®XjÍÊ‹Ä  BeŸœ˜Àšë«Ý¥‘¨fYEFꘄÚ4য䬪öbƒW÷XØÃPÌ'¹ÀQy ’Ä'¯òd¸ ÔòLœ!-;¤É<1¾è¥rªRhòl|²•œ*{ùÍk€S¢’œ—† D•¦Å†^Û¾4sÕ5,ŠwËú ÷\i´ø¸à¤FòE’}yÖ(bVÈKê$Ê1Gƒçj)ðÛ¤áÊžr‚ÒûÝùÝ“Cå8V­ÏK‰ŠÒ³.¨휈1—J㢮ÅȾ\_Öá|7äÃÐ^ÒaM}TÑPT° -//C‰Ë§T¬ê‹ˆ•)#HÝAZm8\ÅœÚkøP1-fLÃíÔ ÆÉ^>Wêð@J/¼#°YáîF†„%¶$CŽæŽ]K?§ª\±H–I~})vêQ®à¦ïÄXuG@ÆUº¤ii4f‹½«ªãàaVl#~lJ.ͤnò*³s8žDÏøùãÙúù_}÷Í G>|„±©Øþöçð}=°ÆÜRB½5¹@VO2¦ž¢®­bš¦ðÛ šd¼jÐvyßÛœ4FohÎ" ›”ó¢ªKiŧºVDÓ`'·•®F]êÍ4Øt ˜tÕ¡½V}nMŽ„Z)S<.SöýcاG€~2Mt'C’Šbˆ»`^32*EÒ¼¤œnÔ/ܶ¿æáÓÔiÖäº4†xý¦ó޶MÈòûÙ¿Ú´åÏS§ÄÉÏÁ#A¥î ÃÄ~ýT×GŠrš•O^…\TD™ ¸œÝ2È-fgò-”&{!Ý<‹r!ª®û…Ƹ5»fíˆÚ£jÀïè‰á>ðPJ¶2½ˆ˜­¾™_l”µ¿%AÓô­Õ¼Hðû9ALÊUÕ©î»§EMxÝö¿=reû—ê$õBÄ¿`ø0üࢠ“ endstream endobj 147 0 obj 1819 endobj 149 0 obj <> stream xœ­TÁŠÜ0 ½ç+|.$µdÇŠ!š™ÃÞ=”ÞÚ.ìaa{éïW–•Äžz(‡ØÒÓÓ{rìæO÷f,?ÐPDóûg÷õ“yÍ»Pà·#=¿Ç0Žxî–µ#ää09³þ0Ÿ/Þ€7ë¯o3Rêa†x9¥g;&?[ÒIN/0Ú–ëÒ÷õ±;¯Ý“R±M‰@¼J4RÄMÉÅÆ„3¸ÔÆÇKF¶˜«ÈoÐl¿¤Þë®%•/>€OaÆ(™$œq‘Mp6IP¿'ä»0T8Ê  ©,}kùp>pÃÆÎ%´'Á-œ(¹¼'R»‚â¸â)ñ…•xÙð‰P‘Ì•öfD9á*‹JµV¡ÒjrUhџŸï߈ƒ¿ö/î6mþðèJT’¦Ô“ƒþî˜_L¥r{g»7Þ¥¸yÈ:þƒØŒóú˜Cøqcë¢ ^Fª­U6Åšû~Þš Yj¯¥3¯^ˆnŸæ’Ä)=mH¯nÞÚ;ºï££®|,¤ëaH‘uxÈ‚áIŠn÷¬W¾ÍÕÒ­bVwã˜òÝÈ ’²Ö’WU«k.¾Ýþö^ŸÛß@ãÌ"ØÜ’ŸŒº/ld2Åac1ãF#µòÕÈü—yp?°'Ï^ºiWVâ”ü¤¤cýÛøÉð=ÒlOö”Ö—’òdþq™[‡ endstream endobj 150 0 obj 526 endobj 152 0 obj <> stream xœ­ZMô¶ ¾ï¯˜sˆ’,ÙÀÀÀzv¶@nIè!è)_@Ðh/ùû•DI$%Ùã÷M±ÀîúCE>|ø!«+\þ|ùÏE…úâ}ùï//ÿøÛåßñîUxþ¯'þNnváß^¶Ï¯Ã`7›ËçÏ—o>ììåó×oæ]åÃÏ]M뫾Ác…›š×W¸R6­Ö~~ûòø|ù.¯¬ÄŒV_-Ω/iNí××é¦<¸0˜UßÔV®Â".<Ò«OT¼^0Ê®¯ö¦\\Yé(J*>JÏõ´²ÛoéU¼2ëRþÅÛ> 0 ›B¥‹°f˜§w’hA¬W^Ät?Ì3¯æ†bÁ’.ð©c¢hHòâØôÀçxÂãKy‹@¡p(öVF†›´ñ»De Q[Õ—ppÙyXTe‘…ÆŽM¨ýÕ7&´UÔ,½5ÄÊVB“ê-Ý*²K»QÁ¡2`Ã’Ñ«)ù°lšT8Z:ΕƙG¸#xpʼAI448^ !=YIâ&;Zjwt?Ö«2½cBæV‘$HÛÃÙƒÏ œ°5³¡ÙÑ:Åán˜› <ŽãsÚ¨SÄ%.½dýžÿ ½V ã°žN“穳ý€ÌÿVq a‚!T„?†o7zd¼iž¯­ùÊöÁ’F—j®¼_×p·†RZ¡…>·Y_r â*E¿Ð½!란yŒÆÉ™«k7¤àn#ñÀjaÃèeŠ™Ê5îª`ióYD9ÒKÐNÞèêVj«Fm!³Â*›y[õ÷\1†B„oÁ—F³²RŒ–H‰n9üØæž°êdçëÒèûKÔ–7…#ž˜VÛ«n—º£iMš-¨+X ¸‘.¥9Šb%q³Fˆ¯ìѱ_Q\ƒé!{-7S‡žÌ¬Éž*6àa¦ßIËLµäq<4V†)5o!{à`çˆÅe5NØHxþ3l¨å:õä’¸<ÑŒ!?üiÒñ¶¾åK9W~?)磥åCÜ·<9)fÂ]ifPî†9Ί4k)D,Üé SÙÙ^ç6rê ç©¥’x+X-1µ4‚SŒå\EÅ'ñ5ây‚Pv–´ã2|ä|·„¯¬x™üðIÄšÔŽe9µLjõ×Ùµ•°] [г ÎhôSô°:‚)ŒZŒmx’Ç @ƒÜ1`+­aÄ#VÆfÊ‚ÈÜ­Îj&%æiŸÁaL5ûsûð iÎHµ‘ä?ß·¤Q]ͩޑã1~K#¿åé„$iHÿˆ6*ORáDµ\alï1 ÃƒLÒåö=†gËè(mîX-;Âê5YI…íaÜíÃx óîyB|ìLЖgtZîÞY%–žª¶9dØkRód«w^xî0¦éÖ ‚?(e)e®ÊlP8oó¨mëR1sªF4ÆOªÉÂ+¯óa®ƒ#øª2Õ¨>,×nž¥jÄ=£2üØ‚ ºõ(}| ûUùÚGä;>¾ã*ðÛ\¥ôê¥ñ„ˆg–”R‰ò¿ø1XMµO5WŒw]9«]&r\~a¶äYr©}‰WÅ,¥¢gŽ® —é¾Ì="Ö ûÞÍ újú­ýj¸“Dp%ÉnØ–mûÁ}ü׺#mÏLæ)'@¨¶â=?¬¾Dgw7yvÉäéy<— ²¯Œ¼¯Âðþ5J=6¢õ]oaÐ4 u¦Ò£²g  Wè5´ƒlÕCûŒºX}Þñ‚“´€ÙßžZ@»¨­K ?åŒ'ä㌬•#Î5„º.0ö|mQq5 #–Hý° LÆÚ¢Œ‰MËJ,^´=—±œ²t,¶ù8Vµ^|éœT5A'sZ±ouu~Ü4Ï·\˜Ê±\¤3…Ò¿)GS°‹f+;jÅ‚˜šü_ÌŸ†˜µÈ°×Àws ²EfÓÕŸÁ"Ú <°þ(l¼G»‹®þŒáËá5Í¥v9 /ñ^a»d„™É¯Íµéœç¬‡yÓ¾¥¶£XžëǼФt‚V¸aA…½-­±nXäQ»í'kYÇÆ”r﬎iŬÎ"½Õb¨…ã>™Yö'¥Í¹¦£ û%4á)¶©½RTÚ£†°Û²Ë=JM%z#”Ò=¤ÿ ¸É³:2*çÏ:’O­¡–/³…jÓ¸%ö΂a£ Çc–HBÚË€*ÃÖ.t_ ãAµìX§HMVÖ¶f`4»8Üi^o!iÜ ý¼ÊëJq–ñ„;a±ýQ¤Ôjmô ZåáY‚— †]-ñÒÑ_e¢èƒ#ÙaŒi¢êÑ2 yR¶áFbü„ðÁ-¥t<él„LÝê1ÑWW\qëÜ´§KZ…FL£™ y@sß#i±¶ ÖW«Ž-ÙW*Ò‹›î ÷ÆX&z™¥ 啇¸#f{â“íëI÷h¦=ü7§šBtªÇSJ„}² z´õñF°ßõ ÏF•í,žiÄs<7s¶äB?ß7ËHEúÜe"âå®Q¸ÆkNÍ{:¹ÅšäÍ72»"œ2‚š¾°d#Æõàî×Uü‚: ‚êG#Pž‰åpš7å,ásŸ›Ø7QE¦¢SæÝY1•ä4ÅÄx]»Qî»Û1‰,ª« w­Žßàìž7!2»†> stream xœu“AKÄ0…ïý9 ©3“4i  ØÕ=x[(xo®‚Á½ø÷dÒn»îRMòòÍË›Z4¿Íy’‰‰ÌéØ¼Ü™ïº æôÙŒSƒD!µ½™ÞÍý¾3ˆfúyújž¦æpyÂûí Ò¯ƒë}Ð1 0²íˆ:I,Ëž-Õ<ûúJ‰-fá¼ae'qšõœÇÀ"¡"Ø)×%Ž¥¨„:¶1c²”F©Wõ‘ תÔ#»ÙJú :xÈ¥WÎf@A À†¬Ê Ù9óÕ²øYÄ ,5¹ÀJå+KZr”i©J*ߦçÛM©“qÛX+Ür{‡BË!Wlñªiì5ý2©†JýB)íϼUB˜C¶U£ý‰«åV:-ÝßÜ_/šV_E¨ŸÂ¿é&½¶ªa­³ßö~ÝUQyMâbw+]êsº®oÃE¸Ô³ï¯äo‘ú–þ“xtqù¿æâÈÎ endstream endobj 156 0 obj 356 endobj 158 0 obj <> stream xœÕZM‹ä6½Ï¯ès ;ú²dAch÷Ìr[È!ä–È!\ò÷#UIª’dËže ½Ón[*U•^½z²¸ÉË?/]Døg¥º8¯.ÿúòãw—?ãÕ›’ÒÙð¿vj2áÿÉÎ6ÜñûËúñâTxØÎúòñËåûws‘æòñÛOwé}ÓrUwayï‹‚ïþ.æeºËG¸(e¸ˆ¯p§_~þøáåíãå ̬…Ÿã„bšãÿÎKª‰º™2µÄ©ŸËUߥ¨×8õ¼\mº*Ì"à «ÅÞÅ'† ïð9‡åôÑÆW´Ñ¤›ÂŸW“Æëâó¯b Ï»°¼4`*|ÚflýáÑ æ®TøªßªÅÃ?¾VånתÊZ`“œ1q<ø&Qw3)øñM8íË/Á;ñW·F÷¸ø³OOæHæ'q®7ˆ¤¦ã}*x' ð™ø~´wåᲓ1Ô # YNKÞâ=/銒`¡Èwé0–Éö¬y%Ì>XàúøƒN®Ëœ, V™lšS"|Á¥áXqm´~Úïe šJ³ä‘ã—py2©›€á¼ÑûäWtHLPlu:„BT^ª—”V;í¸X ®–‹œ’sàq¼]dÒ¾„ ôiÁÃÄ'ã_h´ââ¢ÖözH´ÉÔ^„áÑ š¤O)rIÑp%Í®|[îhòó­ Q—%Ýlu焈¦Éúu`”ÁxÜg°B¬?s“Ó7Û *ÀŠôr"ØLI¸h@è –¾´!œ=¢Ûðh«~O,PöΠ,©tLÕÜš¦ùæÇïÒÄS*QÚVÛM¬ê|Ëöð#mðø¹ÖÙ–G¡Œ¨b¸‰n¸ÃñÝY¶Ž Adžå' ôl(3…߯®ßœ¸ã‡~Óæ¦Žü¶ï£lÜ´qº1„KÙ!I»Có@ÝŽ:ëxœogòˆÌÃ$ ¾S€þÏ +ý³ELXi°¾ÇФ ìÞ²Xtu˜­F>G#AàúUFJ’ILT,£ª Å-¡àÐH›Ú`VÀ»c†ys•§Ó088Ü?g1Ž—rSF{åìâkÂÎÁ'…—Ɉdl ø[y"Âä‰G2߰Ρ…Æý²Êæì>í:48ÿ*i¹á*œ£Æ9M5Îsù@ e'â”I=7Oœˆ#7‰®Å¬‚TŠ 1wŒÚaÃÔ› Ö·OªHwÝIÝbX")d¼)9NUÎÛ¦dÌQêSƒÃGÝ&–)ë‰Z}8m›°õÜ./ßµb<Ì߈ô•žìL7=fAGxt^¼>,4RvÝ ž7õ°ÁÅ„5«!}¸G; ³Áse¬±ŒU ß$°ôwZ”êÀ·þºgâ°ó-mŽ Uø"ZŒe„0ݧJÀò¶ÂØ‘-¹ç¢ü1ØšÂJí!7ÓÞÞÚô×ëB}œ&V“åˆ,O†ÀH¤¦Œ¹nÔùÿ%d±r¶ ~Ñ,TŒêoÉ2ã(Ͳ“Žao¿ àÊQÏ1Û”d àV©<“™²NLñº…ZYÊJùÃvlF]¿WÌ–}RKғ˲BÑ’B´¹Š=eчTl“’^M8<~€®TëäY6 #ôŽa…AM Þ±ô›Ê¢:¬´a&¥£)L`À øX¸‹=±¥èa¯y¼‰+óܦâ›b¬ô0(`:@áVÌ[¦¨£Çg#%ÅCeT HökÎ#Ø|°vŸM‘iÝF`ù§Ä«ôЗ‚žV®ë…냈s&*ldüù*®Jý<ƒš»Ý‡ù„‘ÇâÆNÛ7^T F!h]×®{?CصÔ]kÒ3®AsÒ-7ƒ`>üµ‹ oa îœLUHäÀe²^?‹)u[Y9‹\yâhbŸxt`[”Òž·Ä›;?lŸ“‡LHL¸Ò÷XÕŒA˜¯/„ÊÏ]{lž‹¶w¬.à6£Pöƒ/“ŒŽŒûckT<>5w §™)Þ2ú5~Aàß&÷¥Ê&Iô™…Bóàåˆu7£Ö§è“–ï7ó äȵ¡9Œãv·Kq5hò "»jÒzèÔ­9¸¤‡lÖýÑ+¨ËYg;¦Ö©G@z¿CÎú6kKRh nZp€>õ Ýöüw d]´Þ–vÃôqìlË:÷ý ·eÖVÉË€¿Qd¼6˜­l[„¬Q~c䨳µIسPx¹úU4,.’S5.a]üýDdߪܒ·j³”Y¸4L ö8Ž“éšó½ƒêÿ,_VÊwg¯j­I(dÃ2•·:B‡(ÑÊgrä§«œ»Ú‘–A@ëÓ׫EòL9‘9œÞ§©5Z2c­-Ü><³Òšß' 닾GÌž-u‹Ô«Š6K.>f ŽÆ®+méüǸ¸£eøEÏäЫ¥5~ŽO+ir jŒCÇPzέ«÷w¦‘fÍŒK‹­ŽÔ«æÉ–qh6ô8 /¦ øL ´3D] q|‚\ Ÿ³³‚Õ~dòDûnG»ÛKhJ¿å-ü~N² U#3z½ qö¨×ÝzØæ£'ç©;2>Ý!¡°ÕÒ'ìqêÈl(@izG)­˜{… Ó¼ý‰N¸N ÑßÑËMÜG9•º…‚סñ‘W"Kn[MV6yšÒ…âÏe!þÒÎî!Ì8`Nt}ñn îÝNM3?毹Úï a£WV‚×›"fM/¡Œ^‡Úâs¯Ío)Ø­‚Ýñ·œUöÚË~üu=J¼«J8ŽÃ6Ù®{®Çï’%íëÎ[§|¹s†<‚Fh£Äã¬Îï 8‘ë^²ýÛ<¥hH"D—ÉÊìPŸÁÈöÙù‰sˆ @(Ø9 ©‘]s½+ï¼ßt2¡so2´Ç×õ7ÞþñÇÖÝj6 ’w'j^ÌÜýþ¼ZÆ÷ƺ‘BÂr‘'ÿrù|DÅ endstream endobj 159 0 obj 2442 endobj 161 0 obj <> stream xœÍZ9ô¸ÍçWtl`Ú¼DI@CÀhŽÀÙ8X8³½À ¬ÿ}“,¯HŠ-}»1ÀÌt‹"‹u¼zU¤¸ËÛ_~¿ ÷c¥ºÍ«ºýç_/ÿËí7ÿí]I9[÷WÏj2îïdëFüò²¿Ìʽl}ûþçí¯_æ&Ííûß??ÔÇfÕC¡õºÉ‡üØ^ÝG½Í1…g¹Kµ½N±lÓCËM=¤ÿ¥ô¦V7R¼m¯RÓS#Óûaˆ˜Å»°nVšÊ}÷�|~¿ü¤Õb]¼bZüßÙ½=3aºWݤ âšÅϤö0ß¼é‡ óÏ^Dã¥QቓM<¤ ÿO^â0JцÜFçø¦XË‹qàD[°n4KþþÕú%—MzÍù…åê>éj-é£YÂäêËÏD¿i¤NÃõSMøAM¨ù>Wš ^[}î/ž6¤¦-m4Îô:û}úNg4£CD$…Òp¯Ê0E^ýš¢ÃSnYZ_mç,kVØŒse¼~L v”{¶aXž‹yl©+3h¦ ››I!-S¨ß[Ð | ëŒ[+ï$ñN™O¾o¯«<ë)k0™†lê¥3_A°ü®{AmrrγÉ%Ê®Š›’¦¼c˜ï½Ä•À|Ù/‹nxÐÐäQ*M¥dP~Xν•Õ„ps.i9%ÑÉd39gíÛ¼ØÐžÓºÜk‹ÀFXø“T4b“÷°’Ìf´« ¬Øþ£Þ,' ›àóAƒÙ…hÌŽ~†®¤«¨É¨¬S   Ò6Ûè €ŠÊî cr”‹)‚–°N‘ÜÛùØV‹¾ÛÚV?â<°t0F/Ûª1¬U1(i.Ø|,ªK™M=¸jë@¡ŸÉ4…”^ëÂqßÜÇô2½_Ë¢Ó´Ü×Jm }¼G£6žäÚBÔýŠÞ]ÅOÄ„‚Äj%_§ÀÔˆhH¾8·½äÀÝ1JÅÓZµZ£P3—°L}¤LG‘†r¦si;è1Ø5ƒ6’ÓόӠO„ORÿdÌ]õsNãÀRò:Q/ ˆ ž.Pº4èSäÈ)?«SìhÈ î"¤L3ss§‡6-boߤ±ç¤Û‘î¼M;JR_€mEï I1Î7ŽhÂ! ŽM¦ÖûT™¬Ñ銉²“;Ã΋‚KA„ç9ï›Í_¦híg°wóáC‰€ª†±DØò‹ÄpÉ¥Âø "e&ê‡^Qü4Î ¾tÀ•áÉiŸD¹Ç’æ¾t ^ºÿÊXQD¾¼íHx {\ð‚ä20š í˜›U¸ßØ"^ŒƒŒï¡Sppòùj0ܨùôÑ•’á«£ˆôÍ“ –dÆ¢ .‡ˆSŸUiÀ馬zeö×0}¡!È9úw\m-úê9Ô>°f¤VaPÊ+§Í*Åâí:OM©{¾¤}’BŒýêÑÏ#WŸ§|ŸcY²³„!.£M4›q3{•M¹1Ï]öymÄ'9]FèCò@kA=š“! H g/ã»Û°H›Îü)Œ÷N4-$ê'®{Ä´jB˜-v”ZFOä&Õ‚á—rgØèhGWþlA’ÜPò²>ò)èãT¼flF-›2“‘±TËS &Ævª$Ù1a5ya÷ D´† ’ãUfýc6ëD¤q5tO/kRN]_qâQrQnñÂÈûئÒ6å(wAÙÄ–õ ªìÂB)2ÐM ².‚ûýí%sæ¾KvgЈ‹‡x˜¢xhµ(æj{–Øf•‚W—>ÅW˜3³Wr±]„lëÝÌžÁo0ÃCk¸&À­iô[~Ü´¢ïö{•áéynê=V^&Z³Ê¸Ù¹K1uCjá7åppú„eh«šªçJWSf¬Áe®y™——(Rëõž‹Ù’µOµà³ŠÜ@MxÂUYó‹\Ìÿo‚¢ à'5nê½x¾Û„Ñ;lƒîd[ÊÌMù\Œö y~uÛ"Åÿƒ¡a.fÍÛú#²Flî éØSX²ß“ÐÐ!CD]K»¤W00IÚú r­Næ„M´n ;Ü ¡6íbØ ?hÚÖ]ñA“Û»ßEÌr5Ìè ®¢Îmæ¯Sg¶xt¢&Ýó¦U ézx‚wjÕmUuïÎԲ׉L S2³:A‡ò(•<¯¥6åe —Kޤðó¦ìžc"ðØó´_M9wä S£­G‰XM«"Û-ð²Pè749SŠ®ØH£N„À\A>DvÍtf³ÊwáM«Šóì5ž/âÙ;þ¥_ùwDú»ä »ª²¦)¹†§PȽ9“+íq@¼ç¥P$Óu4í8¬¿ŽO!ê~²„öÈ·{8YÇTQ{·R¡1A\ßüS ¹™e/`H÷ÄalD³65ÖI,épŠÄÓcï?[Œ"e.‘³n¿–mô*èèó@ Þð`ªs6^â¥m‹ÓÍ <}š Æ`G¦‰JE±1›æï•%?Û@ë1¾±õ´i*1 ’[µ¬ü¨ùŒsÌ/Q áð¨Žf [àõÂ]’3·:þØ )cl?%šR4j¯r䨤èuUÐÁ¡zèƒ6£ -˜)£ðçEÜÕb]®SSóÞP;:ã:ß ò]®Oh©\DSܺ*F³ó ·€)íaï0–G·ÔÉ€£TT¯8–•zÚЗžÔ–:jkÉPÝæfdаBuÚwéÀ3z·µ24•µMÍ×=zD¾Æ=ƒf‡#F:©bŒ ¾o¹èÜe‡ÂS`xÓ¿p°ž#5òµöÎ_ÍW[^ µ¶hžäç~ﱞµc·ì˜ìž™s’M\ò{}tmË¥KE'N/r‡¦ÄSÓ€ »H¹eå>‘Û$Øõî 6céKWAœ‡Þ×÷Ù:£¸ÿ‘J`lmÛ =X–{ÛaE‡Ú¨»9ýQqü‘Ÿqõ?‰¾ó·d ‚åéNÝANÐÇ›¹ÈjɵVÄTªÅÒmÈÙþÃ_& »V&V8×.@ ­§îÑú åÎpâØÉp?ô0C´7ÿÞJ`ÄÛ}õ®Ïl%Ûx+.4¦y}‚xt?¦Ý:U‡ŽOû±c»‰¹-¼»8}ØÑ9¸&••ØéËB0î !9`º>‚‘%B,Q«€þ_ŠíyGÛ™û}<“c5^ ˆÑÕ- ìMñ14ÕªÚ꺴ŒÎåö'@ì´_!8LAZŠô“ÇÍЂåжë-ô:@zœa§éNL¢Ã˜² öŠÞðàwo3xÒÎÐtóÜ”Ö'É rô÷£5Ôb|_iO¸—Í,½ŽÅÑLZúû«ÍLñ¡Þ¶ï_镟nÿ—­5ë endstream endobj 162 0 obj 2552 endobj 164 0 obj <> stream xœµZK‹7¾Ï¯ðyÁŽ^ýc˜öØ {K2°‡°§¼ l6—üý•ªJª*IÝí,¶§_’êñÕ÷•Ú\ìéÏ·ÿžLü­;M‹;ýñóÛ?ÿvúO:zñf™ã×`†9}OÁÚéôǯoëçÛä⽓Y.óéó§Ó7Ow²öôùËW?ÜìÕ­·³»Ÿ“nñëývW3ÞÎ6šo6 é˜]âþ WÙ1Þî³p•±w»ÄoŸNMé¢ ™þë\Î;s‹ŒCÅŸ4”¸FóÍ…<º8ƒO] |Ýͤ¯Œ+yLT.3Íq)KvFÊHSxmX÷ŽÑjÎC¼ñö¯Ï¼=>ß¾=òŠ5st˸ ñS»ÅxžæF¢ydC«ú…þIN9ò¹û§šü‰gs G!RÙ®xÓÄkæ4 œ>à>S™Œ>I›ƒíŽ–á`fÂeã9°Ñ î:éæÃ"Í¡§éÁÊæ“[8&pøE#ONÀ˜e­å8&Òäž< k9O8“4UxÂ#›c¡áv4—©rÒA€Çõ·IA‹r—åXÆŒÀ+£³¢E˪+;õrçÅhìùqä`xÆCw‚¹óókE @P„%=žü‰¡Qò‰bP§tãþrF£BΞ#?fV ŠDCèô.”# ï¦éSã x6_Z÷—þŽrß_O܉”•ÆG¼íT™Õƒˆv‘;"E)ÉT¾—q¾¢kËUp#ö)¦t — {Ç)ÛæBÉhî#Mî¤õOµ­²¢µ—±²"Z7²‡ÓÂ#–;™G%›Šaíc±Àj¼‹Ó•®w,k˜Ú ™'çdà¼ØçB@1”£­&ÖniõbÝ?þþfâןt滿¿™ÓÙž~?¹°\\úùïÓ÷Møygcäõ,‡aæ(1w“¹E³¡x²@C‰²Æ*­"M‡%y|IÇð”Á…x/»†e¼,G ŸœÌ)l賟ýÓNòèyÑòxˉtÎHç¿s¥’ÙWÊè“§"²‹‡* p—íZ»E”ÆÁ±ñYÁWc°·TØáê©„4ÛVä}Î.Fp\½ až®²<©8þ’Ì2/N«ºÐ^U•ÐPüJæ'vȲñ·%G=ÎcívÁà1»cÚ@„ìï?Keíw¢ Íîx¯Š:…»qš.Φ QW6 š1ªô\<7N—¡N=1N¬ÓFqøjé‚k%V§ø ê‡r‰¢¶ÖK²ž5uB™jA£/Jãl¿înnô‡ PÀ$(ݲ†ú%c`=[’;”lœÒ°£Æ×8iº7*óŽê²InÉ«Võ3%Ná.•³PǼæ-[*Tž: à`£Þž¯‚!‚rÜï»ÓúFÂÑìsø,ì%£U2“1c¹æ«qæˆ wÔû¤‚–‹ˆ Ü…T˜œ4¤š˜Àk+ŠYÚ]ê27¾˜6eÒ ¤Å©¤)`¬USÁª)R'"" „]¹†ø… Æ“[¡M #Ý÷s€ùzD˜@lÖÏtÉVõRutM«ÃÒ¸B Å©ªž …ù×Úœ!„VÞvû¸KpK£ª¨xJ{>ÀA½„˜LF4†Y~ôÕ2—AÒeºˆ¹–Þ__ì‘©\jb5G÷_³ÛÔ¼®°ZšªäÀ¾ëìÐè©ðžGÂä$°/L6…_Z0ñ°’&ZoóN¸ðf²Ù[„[Ä*xäA\ö^­W˜ÿ+‘SÛ=*YÙÕÕL.“¦ “õyÍÝŽ+œ1­bZQ6¥_³k'uƒ>W +nǬⅅü;†_MjiÐÝt¨b?]U;Øm úizi£ØÇÊ÷Žv¤$’•Pæï:ËÏC£9w›x:ú˜Ô­¸Ž~š`¿²?ã mö¤Ž‡Kzm*<:°n9¸!-Àû.„‚§&KŽLÑmÒMÞv#'ÜÅ.5¤8ŒqJØ^X†#×L¶‘Öÿ3ô(Ž`¥‚~F€°#bÿÚ‰àW§ªŠÔNäfÎBn^ê톌ìÔ'ûjÝwÓ06’YvßdÑÔ»–uëFÊaEš:å¿U:§ô.]¡²%Òx_cÛÞÛ,=C~“{Â'ŒSz²pð¾\Rs±fÇkíJñ6¦†Ò®l-xjnO+‰’õVá>ë) Q¸6e«ääFÛ´C€©duž%a—»Ù–XJËKdI­îÆXG÷30TW”S‚¾Ý6J¤šL@à‘ݲƸF™átW"² ðÐᜥm(8…hll~Ê‚ÿ€{§£nBÓ,*‰;*Z!øß¸x Œck:ŸýÝÞ–Xˆ mBTˆ[¼"÷ävÝãæ©Ñ[íˆp?w¾dc ñnÝžE§!ªª3ËÝE±áª³Íõ̽ÙÓEÚ¨ÛÊø²E‰:Pþ2/Cø S~3ÇY¶¸Î}û^ŠŸµ€íä±oš<¢jÁQõE9NàÇNÞŽîlŸkÄAIÕëpóv(ý¼ª4Мb \رߌÖ.—Y/Uàa=È0ìµô) Ònö¾Ò tÃÜÈXÞ—"óUKP¬&S0n6ë=~+Ho‚**¿ŸºVvCZáüÙ*}&^‰he¯‡Á¯gìÊ‚?ô¾ /õ;†Ü©‘ÙŸJ‰}wß*ßæµ“îW`ž6f–BãZ{“^ÿÂ[ƒ8O;gÑdع-Z†” ‰‰JÜ?ïYϺôº ‚V:é™ð-Y|û,Í‘á9hFî“;gB«‚6ú–ÎÆÿK¯•1¾Ø&Þ×V\Sàæöp?ÈՆijtÛ6%Laš¢Õ2ËV¥QöHD“kQɃMãxDäÐ^1Øu™—vQ¨‹’v‹¤Ö¯ê4+®6Á%/ëm5zN"ãpˆ‡8ýÒÌõuë͆QdÞv¯¬~£¡yg‚_•”SæÃ[¾=ý}ùÈ endstream endobj 165 0 obj 2531 endobj 167 0 obj <> stream xœ­XK«ë6ÞçWx]Hª‘dÙcˆ““Bw· tQºê Jo¡ÝÜ¿ßÑŒ#Év—ÜD–æõÍ|3²º@÷åôo§ðÏî†Iwÿý~úé›î¿zуÃÿfнÅÿ½îøó´>OƒÆÃn4Ýó·îÛ‡íÀvÏ?~žÁ,0+£4ýƒU9ü¢~À´œéQ¿œõ¬†å—ç÷§·çéS0@‚Ý€Ÿ$Zw$Úô^ÔJ§ír¶3Jò‚øŸöë¨ÈÎàUòðÀ²Ââ™ü"?7ËÙá ‹‰›WyRóyX—1èǧ|d‡X/‹§ïq—ÅÅ=$eL¸ždù%<3¢¨`÷D?ø‰M6D“õŒbýZ/­§½þû¹÷ Ë@{‹Ò¦íš"Úçp‘´K½D¨×[!¤®a¶Õ,SüJËpC†¢K.£úh”ß Æ{á—§P>a$·¿ |‰Eˆ˜Ä s6ZD2ÙÀq"Mï—gü9£L>ÈŽ“W¤@_¥)Ã(^Eù.e:Yö¼…´D•mÚ²þ53\† 5 H –Óhò …çÂ×™ˆ•¡0A./­ªUøûvì7˜Úëàe@ÖañY*&ãbÑ$xR©íòGUdmÌöG–F§í#ÇGdð`®‹. *ä.iÖ„¥°U"sßZJ-Ž+™}÷þ…´2(§ëCÎÉ2À [ïÄ5×ét)š’u ¹aÌçBÇ‹Ìí§ñRcÔÞ8E³‡e¶\^«‚  Ì$5 `×cnƒ…€ðaüÏH*0SŸã6ŠR™výžØüXýâNÞéÑ›_¥£Wúýœ þÃ/‚E@ ’AT$š¼„}§ÆËž[>yÑéiôßÄyäÙ_?ŸÔÅu_£¾;©î¬ðñç°ŒüãïîÇÆƒÅNXï1¬Aµã„žà…ôãƒëûÝòóQ(‰ë’¹ˆ& ªœƒKa´½–­B-¡’Cë3KäD>ºcÝx“¸ª1Fp•º¢‡†¾DQ5bP©8FršJQ)Á¨±HÑps9ƒ B/|{UðQçk¶jw‡t(y:7ªáuŸ²+6^Žû ï)>Ö’Æöƒt ¢™|{*«ð}ÓŸOµÐãüd†4¸¤&yƒˆs¯ï£\¼0œ¯M«zŒ%ýaac8ݤ–& uÎCsI×Õ)ß9.S³˜0_\ z°8´T#å5ÑàˆÈ3BH^2y/š—"ÛÜDCüò¥›M Éf×­ö#}|”·0Uc’¡ "˜x÷äßSQ6iwÜTÂâ.*˜c‹F›¾Š!ª¢ÖtŘœ²I­¾ö1TªyQÔ¢°‘…br¸¨j冒k\N;¶~ï-h Ę'_yˆû}äòL½ñ‚S¾ Y%r)^o´´°IÇUÅ[G¤¢£{9@ÿ1fvì›WGY D)V½M0¶Ó‡Uä ¦°N5¯Mv_G?bJ'~Û|‹”xÓJoQÎm?‹o÷ø6&qiQ¼æNyˆõ%º±¼î‡™®g‹ª¢eâéêÅë–¤_r;˜Úâ,(í#[ßb¶Þñ¾/•…­ŒÊ$'Ȧ—ÉsÞô­;È-=Z4oصåz\ì¸ÅÕ{’ ø‰±‘4k§Ëó/>ò©ûä»ê endstream endobj 168 0 obj 1463 endobj 170 0 obj <> stream xœÝZK‹ä6¾Ï¯ès ;zˆÆÐîé9ä¶0CÈ-›@ì%?ª‡¤’_mÏ‚wl«¤òWïªV}úëåÏ“Jÿ‚6§Ø›Ó·¯/?~wúž^¬ê»ôŸW¾ƒÿ£Ó:ž¾ýö2¾¿D“hC/ýéý—Ó÷oî¤íéýן®úm8›«²ƒ¾ªX.÷ál¯ÊÃU?T7˜«~…£ðFõH¦'(¬yÐßøV÷ƒ¥K»ÛpŽDIgzX`p;ZVvcÜ—Â{ä¯Î\~Š,Z\§½ ñµ5i‘­¾ÄÊÍÒýÏï?¼<Þ_¾0¶ª­3G ™“Öšõ‰ÎŒx€ácÊŸQGør;U"å‰I¸§³a©Q‰]«íù¾‡Weãs€ Vvbý-ï‹OÑCÌH¤*7€†ÖãÚ˜Œºt^ªûtgy;àÓ°ª@‹Kg{àç¿cº}T˜ˆÚ½®²w«àQz{Fí ü‚N¥Ãâ¶B¼Ä‰h;¨qÁ­+,f7°èÅè†>kù‹ïkÐõ  Óö:OÐ]•Þ_"Ъk)\›=è}@QA8ËÚ‰‘’‚&ÆÓ^´iS±u•cô#¨—eÀžÃO$Ql›d4’kq­´½¬^SÛžG9ò0¤bá$šgx§¼''8;ñï¬`h¨2à H÷ ðľ[Å>ª‹‘ÇìyƒŸ‹"Ö†ÀCCeU³¤›¨Ê"ôO-bå3x‚K¼‚§RÌáñ)xäŽIò!ƒüóÓŒ”g¸4ÉXƒ®ƒÖûöð)h皶α2f˜ì>HŸ3bmr±¢¿{tÍö ÌJ±&[µfß”ø^7h“)‹ýæMa¢ú)|RÚpn\@Úú6÷êlæ@æÆgðjwéŽÁ[)ªë‹ëÔ€¥òZdì TÓ2÷„:@XH"iGí†ò[nfÊÛ AËŒxã&½¯áqUj­Hb»‘2‹Ü]±» ݵ=oÓ’ÏËÏáõˆüźüRœ ÜËóŸtÕcu>àIh»<ÕšMò<ÍM̤ò¨o„Wv!"Yu2ýBÕÖ•`±RŽ¢tGU¢œîíïÜ>'ÉÐ>ùŸËâ½ò­ÿ€|íÇä[yúßÈwn¿’¯S¹¢Þ+ßJ±._J’P‹„5Í~uÉÝ®g òйõ {cWš#›E¬#ä iO†`Ëþ‡¬©ä’誫Áb)ÍÅ6Uõ;dÿ4µsúXQÖo˜¢¡¶_N½!1aó´"“Ãë©eSÖRÎ_Ú+'Ú%¦©j‚„wSb.¡§ÅüÜV۳Ϧm1ˆ²……Ì­–Ï¡þæ:r[„¶×¹ÎÞ)DA±.Æbw%Ç 35¶<¥8q.8ks—(׎çP¿|9lyOrÂÁb[P| ?ªq,¿ÔvŠ®ˆFO2Gè´®þ{;}°ÀŸÁ˜úlXÆ=G®SØ ".b ‰æÎNÚ Wf¹©t@<}L)ƒø ibÿo 'ÇÊ{A±²kM/BöºŠo8Nž¸ Üã¾> stream xœíZI‹ì6¾Ï¯ès ;Z- C{–CnBnY ‡@Þ%?¥ª’T²­¶ÍäxæÙZJU_}µhÔM_þyùû¢àß Í%DsùöÛËOß]þâ·êòí—ùó%*T¼—Ï_/ßø‹Ö—ÏßïJOŸ¾¼¾ü¸˜ ÕØÎp4ã绞§«¹«×i¸ë ÓÕÒ õH/´I/¬ÃôÚâ3ýòùÃæfÁÝ‚ÜÌäÍTðó¤á‡õ“ wkº»‚máݬÿfp' ?Iw×~2wó‘¾?å!E©ÓŠ4Vtw£Ó@maŽ“¥ßx/ZÛ÷DGÅ£‡çÅŠ}Åê$¹~#Y w&‰ÅÊ&7ŠN*NÇÖŽDœ‘Æj½°Dz޽CÀBÆbj °YZGû»Ž¬QVcÒ ÂºK6Rð¤ù,3@ÝŠL¦g1“̰`4+¦Ó¶8-#×Ðz $O#Øán5˜C‡v°dÄ nn X\1‡›š(Šë¿>‡’óà § TgT(ä: ½“Øáåk×sV=×4¶‰|.gñŒ1á‹t‹í‹Í_'°/æ¡c²­ñ?+˼‹EªKŸÊÆz0[ Ä%™\C%O Ø‘1†ÅÕ™…>*>m^ÜÍYnVÅ~xåÇô38­Û)0µ¢0µ%S°û§mËã•ÙžúÝ$4ÀŒÂÿ°K_'˜4'­Ä¤øôhWCûã"¸§ŸlV +«ñ\‡¦ï(ß8]}šàòÛ´ }ã£Äf,®5ôLŠñîføMu7Ä©fÉ ¡ð¼ª¯š0,Ž~¬@V ‹Äw~} v( I˜í@€²E²7gØÀx„6ÏüCw G&A-crm0–ZGš§‚ÓZ0¸ÎŒ½ÉíOx’ŒcãÍ/ÉEœNáEÜ]z·ÊÆÁ$ê+œR•–f¬vîuÊ´ ³´~cȧõy×w|¢za˜t¦¦âÎ{Èp†”^”ŠÛ;o´\þ†ªqƒíD’àöA”3F± ¡ÀÕÈÀg-’²fvLfÜ:ûJ®•ç6ëºÍ¬]Ö¿ÍIµ{–·q¸ §,/fÔ®@DS!á>rÅfL­Xý¼2 ¯F$>Âü²×Ä8îÌÞÈÒ7~‰KMújJ>ØaC"Ì#DþËüRMæ ÷Q L.˜K7‘sç6Qåi_2þ–¬…Ð4[p±ËÆ¢¹B·»È¶õ-.I·l-¥Íì#~¬äõazYÀ:2emí6°¬¹? Õ:ã+$e¨É‘ "WöF‰®˜´ú­O@l"­ZŸ3«´’¹¨…rÕ%K­ŠaˆŒÖUÓD»«Lkré|T™uÆ^¢õÄÙ¹±?Ôœ ¿q’ÕUžŽ©ƒ/DX)Ï–ìÓWKqKñdC­°ö4‹žè_'~ìiX…“w"bÆW4œ›ýômÑ™¯ÛOÇŒÖIÙUš.·î*vÞhE€$&e9“ Â+ŠÉ¤Ë¦à﵎ïòö,ZmåeÀ¾`q®vk\Ä>¸«íKÎ݈’H!šžSª‰vU›ó©É5'åjŠÊ¬ö|îG Z¬™–Ees«æ÷ºû\`†1׸‘*fÔï…LqéÍË¡¡¡L ÿ±ÜEåJË焹šZï¶¥dZ‰6кêåm]ˆŠ¯pD2X{mµ jJmäër¢·²Ô!¢Ÿ–iED?­—+\¾±\NžZÔÙ“e´˜ñe‹®È‰‚«äü¹Ï= Òy!MŸ{P{s)”·naÎò“iÅ­Bm·k‹ˆiÑñœ¥òø/Û ªôÞú¡×‚g•]7/Зmq¨=¢=ýLÆMF—Ë]QxËö2X´@rkÚ¼×=›ŽîdY+f|Ý †êšï]쓔ܨ´· _ÒÄ’–›¡†ªHcé‚Ŷ ¼­= ÚÀÈw5‹n>¦•|E³UN”÷*‚«ÜÜôbEû°)!à4m—~“x‡3=Ä“%­˜±›x‰@…OQíÍE…-½|*a‡’q¥0„Õy·BPq a6@:;Ø[ue)ɉ H,mÙvvÉfs½ *…]Ø×ÊW¬³ºqê¶ížçSÚ»ƒ%ª[V÷öU4løøüg¾–à$Ñ¢ÖV¬?ÅŒ¯³I…”îWõQv͇Ø»µØ¬âD‰K · n £¶År Ã²§nåOV¨bÆê§ÒŽ*õýúoŸº >&®bt¼”4myOŒÝ^[+IôÜ{ÑGƒAæŒ@ó² `ÊâÜt&Yà©Ã±>)¦]Ï=?ªUý !J6@Õ”±EÖWÿ+wHÍ IO7•«mË‘g¤Ï42Ý®u-=:lŸ­˜ÚŒ“·ˆ¸·’ÕéLV+ÝÍðÌhÿñò/z–á1 endstream endobj 174 0 obj 2220 endobj 176 0 obj <> stream xœ½ZËk37¿ç¯ð¹`Wo­À,dçÐ[!ÐCé­è¡ÐïÒ¿£™‘4ûòî&ùB`c¯5Òh~ó–ÔEŸþ{ú÷¤à/hsŠÉœ¾ýñô˧ø­:}ûëix{J †F•.Ýéí÷Ó¯þ¤õéíÏ«ÒýÛßO÷·§Ÿ'Zuc G¿^UêõÕ¨þløi]~ªØû«²ýÙ^ÕKŸòwøhMlzÃßuÂçÐ~¡nHü /´é{ûi‰£ãÅJfLe&úVPÑúÞtW¬¸« ýÞ *ê—ÇÕ 1 +Á{XzÐ>3–ò/0òáwüEÓŽhš»ŠêåsÀЪä9{Áh[Ö±jkˆ„þN,°HóÓ¶/f•YôyîKn,f‚jdy2ÃFÈ£â:°K¨¨Wa賌ńúÆC>ìµ< '˜˜z­n®ëC„¤®½VAKØ+p}‡¹AíÄäâ± ª={±m[gSë¼ÖÖIC<¦xÏܦ߯Û*ð‚±#xÇ ÷ÙÌðÞí]¿ƒŸPçl8†t_qæ†ELdwŒz]–«@ÓÐÿ`L4Ú4&æÞ×t½M#DðÉ‚•JÇ!Y0>ƒ]Œ;î­ë[A¹Uí¯ùé;Ĉ‘ASü F­õŃºQ|ìÄ\£s$¸ù ê‡ïÜ߇:–®_cÖ¶ —c†-(Ú†zE¥:Êõk€ˆ¹ôÜðÕ«-Ê¨Šµ°D×J5F¸EÝZ«}mT|xCš‘úH¥“ƒìI,;Í¡Äð[£S£ãñ·6·¦ Ç…vÿ€KÒÌtZÅM&·øëp %?CP›ƒ}AѬ@ÈY/"%ÇÂ×íÌÅ P›uÑÎC4íF“ûjÃkéxe»Ò!®gCdbd·;ŒÃtñ`FPTÑ:×2JȤք•B'éçB| ÿEÂù‘Cn±'+šbµ• ùÚGn&–iÕ×5ìPû÷òý`„Éç6ìÁnŠ X×Ùv(‰ùßVJðX©±FË.äí—ô­Åþ÷·[Եƕïã“äÉÊ Ý„3µ„LŽŸ¢xŹÂ;O4ëæÇÁ´ãÚ7Ÿ.l)•±‚bš†`¿‡2PÚƒå<8?1ß4F­7W;kK„`lTÛ¥æÛQWS ÏÞ1¿ŠCk[­eõ0æY â “?˜A—;¨¤~|‚"Μ¸6…FçâäoäÖ+¦%Ow#|õG™û!Äëø–º”‹0}„6|ú»ê¨C›f ³U­U#*dÑÀëèC»÷âdØ•q«WXäIÔøòʦéè–è‚bK¬°«U š,¾xËÈ–SÓvËè`þpë.¬WÅÖÖßÙê ‹Xf·X¾®/üP¤Æ¬ ÅøÖö’–Öëlt#ŽÎíú‰I ˜zAŒÕtUkxLlwšO~Æ]£¢Û™2ÁUËXÅJ:öèj¥–v‚¢ÅÃ{ˬÐϸúÝñƒn߬JÞ@¤3Ï\æ¬Æ] A#éîÏ4£?X5‚&‚ýwÝlkS,hî–t ûwæ…ï9Žîs¹‘AnÞæŠ«•#]Lj²pµü) Ý膊ÈñçÂõš8-Äp‹‰J;ñ¸.+µuÊ­…ñm‰²{=ÞîFl:‡MÙsѺn!\ÍìÎWHf3]M0¦êËϧÿ¨g™ endstream endobj 177 0 obj 2136 endobj 179 0 obj <> stream xœ½[ËŽë6Ý÷WxÀ¾$J€! eû.f Y ²K2À,änæ÷‡¬â£Š/É \ÀÝmQd±êðÔ‹WÜäå¿_„û7Ku±«º|ÿåã_?\~ ߊË÷ÿ|ì_«pC­XoËåëçË?¾M)/_¿Þ…ܾþûñúúø±xAŠ…¿aðß…ÙÔ]‰íªîrÝ®ú® ü>Ãçs“ò.ðûî?ÅçöÓ×?›KÌËm¦K¨´„öÍMcµÞÌ]¬0ñ¿~nW÷é–òOðú®÷¡•ûF¸¯Ô7ÿHZÿ@¸´Üäþ^á-“MnÒI¹úi¬òÏ5.cÅ.ýSÿ„Åà+ 5«ÍíV¦åP*X‡KÆ»QF­Ûìwq%Û°á $´l¦Æ& »úÎëä>¹~A5i ºôêEpeÜÞ”ˆ:³°iµçm-vÖ·Ê/oÅÍ”ËwÔ ‚8Ô,t~µ“ÅÝÐëì5 _„ŽâÛk@ Q+Ú*~1'5‹¬D|5L7^|!J´·–~°†zcíɦɰ6OyU¡t²|Ò HO%FÅÂPØâg^€Ì&»Lû7-ÖÅý˜Ä´øŸÖHi™9äÑà´sè'Ì©ýf' ñW³f'8ÇîËe»Nw±Ã>æ €'q¨ô ÏáÉ^ðvŒ tœèÓï¾ÀòCÃÔøàéÇÔk ‘&´£Ž4ù Ä£jPM›ÌšìYéøÇS™OT?É‘ŠN¦°zÙ&l=òÖ3;È¡Þ+ˆa·@E–Feà€jH"ƒˆÈ.ø6Ås³_(ÀÆlÔ€“%^ÙçCqºpê^Fi³Ï=pJ“YoS*²¾db ”pdªm>œ(3è=Î €Ú®_/ùEª²¾‡á‹2ŽhLNîãLWÛ󍯂N`ñ9Äcuå.J¼<æk$Ž­£Mš‡Ñ@S\’’°yÒC„¬˜’3(*½š´kêÂ/Ь‡#PßO/5|P§ÌSgiQ„)ÁG3³Zމ(ì¸}Ž0/Eê}Ók  ™H’É‹SÔ:¡Ô;>÷”ZD¼çÂ+<¨”‡³ÄYéÁ-0õ-ó,ú­HââÆåeTœ“â÷Óé’šF¸Ž4P¬•û)ÜVÊkôTìè:XüŸ£ëR,a´KO=z"¿®1|Iä6%HEw™¨~fn²¨“ˆQ^CíÜ‹Tø` KAÑ96ÛâBê2™IH­Ö!HðÊñ'Ú"‚"T)Ñwá7Hj3šôjÎs0Ê0 h,jfi¬ ò ã‚ÁY—YqTdÏ9…ë8àÜx<6É\ÆüNŸò¯›ŽÖÇ@bÍ:kI²Ïèï۔̆&\i6œ)R<€–ˆC¬àº] ¤Ñg'”æýóÁ'qy 8 7V«¹‘Ð7ØÉAód3˜)3?/n¤xF±®*¢V$ŽTg[žòʨ*¿8Ä>®1€w§UÁõ™CŒP²”ëû7”œ"d'£Ó˜¬îðî(¸ Q·Hι Êé¬ÞMûõˆyr€Á5€;&)RòR™ìĉ²Þè~Фtc•ß×&šæÎ"e¹r4CúfôºM‚5‚äC“[ ¹G/ú±@Ë¥î©D§G‹oé™±/oïÏ£œ®Á£“¿*£í'êËúÓ‚ŸM1ÁµÝðê®ÌadÊ;,©'ÔšcÖ(—XOÒ+»%B¸ŽM $i¿ðìml;[7VÊ,¢yÏŠøàüvªªVÓ¥iªµHÛ6,!o‰Ä›6Ôèóy›»Ï|©Œ±C^ô§N!ørª˜={ ņ¶šªŽ CþŸÝró¶m沘ÂÇ©ÒÔг”:ý!ŠúŠNwFÌ16G£Ùò÷R ,5cfÇ 1åpú„!š´ó8,·)ËzF¼Ô Nòé%mÎò®'KEy˜T:y¿X#ý“Ó—TÊ«{Œ³ÞX™“6öÑÁ˶VÕÓ¿èØú!‘x¯;Z¢e*ONqÓQpì»mØê‘´Ò¥¬ÌÍØåRc·5Þ¿!l!'×4œLýtã.‹ß•AÜŸÐC+Rk€m¦÷-Sw¡>> stream xœµZK‹#7¾Ï¯ð9`G¯–Z`¦g=‡Ür¹eÈ!½äïG*½ªôêö°àÙ¶ÕR©_}U»ñË?/_˜û§¹¸+.ß¿½üüÃ坸-»|ÿãeÿx1 5ÌÞÖËÇo—ßÅ…óËÇï¿Ü…Ùä]Úí*ḭ̂/›û{äÜ=‹ÝÏý&™ƒÄ²qcÜÓëvUw®77ZùÿŠ÷ÍÄoÓxx]°M…¼‚›XÁ'¼ ß>ܺ«Åå×i’Ý}·»Tš;|šð3Za2öO³úá特ܮÚÿê%à{‰™EºÁò¿¹/òP%†¡ 6L-ߘv’ß÷Ÿò±ýúñÓËããåkÏÚ.î“A17ÑÓu(J¹5Œß9¬*q;,ŠTì!¥Ÿc߸ÒwþµËŒZÝž²&òÑVäan¸ ('X0ÉúEn´å¾ *k\Ë»A5Âó—a Ëšæ„QÄCÐlš*–öÎLt¼qj•ÝTe°²„[ÛeI&Éþ6ûFVºIfW÷gaËêÿŹ!K/2…°ºp K3Uîg•!aWéWñ¢øgøeõžåtcRÃOá¿ë|Ór½ÉzÓ¢ ¿~˜°Õ ˜{ü• È^qìB€Þ‚û°nú‰ÂÙ,*‡ô‡]eÖCþBàJ±ñ\œŽ¸à"ŸCAÅÛ>ÄŽë“ac"λ·†1pݼ™z>ÑöÒ½Ÿ9Ð1Ø×ž+£H7æZSdûã2ì t¦i/œA7¢0öƾd¾MI=,RŸëÀ= É-ô‰káÙ¡—2â8|pÒÒ:¯°H»Pá;‰ tz&(efú§Æ«iªåOñH”»*E³F«\©AðaMôºË(Lµ5SísÎrm›_9yžÈmXŠ@µrÈÆ¿„bXÅȶB®OÝâ´Á )&gS´Æ¥µá0ëØìáh•¯µ5wA¥S¶uƒ¥­¼*µîÛ˜Q ÈÔ_êXK*0(kÅ:ÇX*Ÿ`ÅÎ2çs‹ÉÆ^gºmzÃÝ ì1´‘†4T7–¢±—6¥aó£ŸËôHñÄo:C,Ú3öfP0" “&1Cäõ°dºaãzΫJE“£™*Ï6Êcþ'€ÕžE÷0¦¤yÒR¯XOgØy@;Ìþ¦¦í;¸.eAÒàMXÞôQÐg^5ÍÓqÂ+®ùP“‹˜ã ùjòìÌ Ÿ!¥£${š5ø Ôð6£õ§†|•éði ñ×Ñ>þì½ÀA{èb³/¡·ŠíÁ7ei¯O‘]œpÆ©àËšÎpÎ ^Þ ·g BÆ–Ñgį]a*¾|Rë²Ö¹Ô¥zk:ªHÊÞFtÇ™¦9ùàB%g¶- Š|¡È/øOºUÓ§sð„›N¡C‡œ/¶‰ñíô°ŠàHUþ ,_Á'™Æq hS¢ƒ×Ðí¾(©ÊÇÀ­Œ/˜ñùt]‰Ñ«[½‹«qީͬjj‰{ž{:2!™Ga% %ö›³^°vÝ•Ÿ”“]»#|?­ùµô€yéܦ¹¦—°: nµ•ÏÙ/\6"%.Jø>K9‹%Wãp)]»ÔȈbUÐol¬è\K­èÆëáL’ûÛpÍLwÇuu¥¯—Ä‹S4 endstream endobj 183 0 obj 2368 endobj 185 0 obj <> stream xœÅ[ËŠì6ÝÏWô:н,ÙÐÆs{Ù²ÙåY’M~?v•URÉvÏ æ¶%•ªNzH£núò÷ËŸµþóÚ\Âd.ýòòÃ7—?âSuùë·—åã%˜õÓ ¦Ûxùøùòí»¹h}ùøõÇ»Q³»›e¾š»róÕÝÕ+üôóUßUÐ~Ö*¾×v6ê® üf›>æ«_?u¯ÛÇwµ˜÷9ÄÉ`vüö•L¾¨€cõ0¯s9Xæ…ëè)-'ÂoÌ¥‚ƒÚFGÙq@f^pœ[ôÛúy°Ë6!•ä™ ’å`öuM_«‹Ì`†Uœ†l! ŠqQë6íþéã»—ÇÇË÷’ý4¬?¹í”%Z—IaâUR_´ŠbºuUü>½€qñ‘0nµå¦LØ|Š&ËàF`—oLê›UÓ¸þ7¨aÜþNëÀ¶ÔÍá6\Ú†~ߦ\—µwP´Þ&Þ–_ý²i{È?,|ä`¯#îxîÆ ZòÓ¦ÝWØ~†xjïZo†¨—-SùüF½U=Nà9<Êß <`\t'­ãK˜Å·q4¬úØ7û0ÜBmömEli¾ #èbj]hJÞáâÏdÞ.=öÛ£ˆc|ñº­aâ>`2D6Ö:÷5㌺ºE’0á¬r˜Ìün™Çô½„Ͱ›sÍ™P¥u¢|y1à{ŒRGç„Ý:ó)guµ«¶Þ¤¨þŠÉRšÉäHÌóJå[ à; Êu”‘°›Qz”¿\é[Ö`¤ #Æäg™Š-ðÒÎzóuÜ(Cð~õ¬éŒor0á¸k?ão¶² €Ê ûŠ¿`¡µÁQ×ßøxCfâú>"JVù’: w |iõl]q>pË<ÕæKt‹9pµ^û4¸ O”Ii€‘Pr”}j}ó•× õp×SÜ-b•÷ˆ‰ ëå¤>¦âLpULPðºøL ¬_»F—Üjûp&ÍHކœ„IWIkâ¬SÍF‚àÅ!^SصÞ0ùÛtì~Ÿ zà>TĘҕ1UR•.×UD\5•‚H"'tJWå qª–¤ˆ–‹_aCEÂCœH¨&Ú¥,!5‚0Û=‡õL¨Fs3u°ëå¿'èO 3 }…ëh@«ˆ@‹v"Šƒ‘šÂÐÄû81ØWÀnC¥7‚,…  Ô(^•# _M…äé'¶Fº“ƒþ£€}ŠØNŒB`”P<Ô“ ¦«©*&¤$Æx&zúå£$¢Oë"3ÛL“*qßnÎ4%qM_×¡Ö ÉWvK$Õº$Ö¡C'3è°Cà³Y §D,{ YÏ"e™NÎG·éã—f}2Í&ðx™£eKS¤B0ã :iÃ!K*AûF4cSl 1S» ÕƾÆ\¬žÞÊ:æ,Xì× ,™oò‡˜çöbScJ<§uŠ™œÀ³•¥VÅðœÂºÖrª¿”È’Âo2Ĥ£•¼ÕàmS‹ð/Žbõa­ Ü›T‘û–ÕhªIŒá¾‡¤%ˆ¸!Ä.u/vBÅ}9º¸P#‘ùB ·+ µX8Ð*¾`²Ú8MÆàAGdȆY ²InÇMM±* Ñ¾ff™æŽsÜEª!íUc•%rKÇ^nÝ.bñÝ҄«É9¨…æë–˜¦T7m͆~!g RW)ËFëåL-=§%¯tÖ5%,v±K;´DX‘Í{­$f/2PlÛ—ÊX¥IÜ£2u“”×쀱ŒÐ‡\rÄ%Iuúp#Ÿ”½³ˆáç‡R›åÙZÉéi¯®í×D -¦r”ªcsç ïºÉ3ÓZþî,¬BÏ2ZIct[ |ƒ9  1šÐ¾•Tù_».§§âǬU¶oD54/Fº÷’‹ðݵÎ!T¬G»yª¥ÿ{“QëÔˆ–cwcÜ6ùc»„¹ ÿjê4øXK©ç´Ø¥©xþ¸ég'ÕTâl5û{=Öú¡)…›R¹ägçâënxEM4%EJžHöK#.sÿ˜ûWIOÄ$cH:"¶YC‘Œ]nA’Æü™d‹÷S=ãÜ ¢}£ º) s-K2ÛÇ®b~” ˈ\Uôú½RÆXÚÉq©ËN{y¤n¦ <£ª-ãˆã$åÕ¬YGŽ Hòý®F‘{rßnÖ7å Qe‚-ª¾ç©DËj}¦š½›ÀåIеû³èOóæR æ©¡×AY1qîEÿ`"Õ‘žov¢Ræz§Íh¿Ï@‡,m¦=+7ÛJ¡ZR•*JíÛBí¹äy.KVáù çÀ.ªOžµ±Zà\SaésjeAª®>‹œ};¦=\…U1Í-Ž 5OPu6J-â‹…ñ.ÂÎÁ—5ãÃñJžiºÖàÁŠ*’GÜ4•æ³¥ì)£ …ÖmáøÙ! rýˆ•½Ìñi«tKtŠÒ±ë§&õU4OPJlUU9´™j0M)`Ár¥›"FêuWtáö˜ï« *)]•Zí1a™—û@¼=_­Û;²3÷FóZɵwn<68c³~G°ž;$9 ´q|Öa´mËñÒD è&lŸ¸ ÄøˆSf9ai²á@j°Ô¦yÔÞîKÝøDJKž³.4x Ë »÷JxùEÑgÚ> stream xœ­[K‹$7 ¾Ï¯ès`:~Õ š‚­IÏ!·…Bny@ì%?U–mI¶ìr÷,Élw•-ëùé“G]õå¿—/jÿoÔæ2-æòí—_~¸ü>U—o½l/“ÙÔr/¿_~|7­/þzÓn}57µ?Ͱê›ÑëtSæø·¶ëëxS“r«‹Nz<Úü÷Ójoû¿_÷&£ö‡àó}µ1‹~Hß‚bŽï@±˜‰F1Y@­°»?ßà¿ ú¯ü®Á+ŸTK0¢ÒÞKòïzm¹<úS”{'ö9ôÊî!OGí¨ rQTõj—‹&‰hЕ|ÔJ4OD©¬Dp‘%¢Â6·0‡‡àñ"Æä¯“t<À³“¦ÓLÑ"¹/¥½ý\ö¶iÌxµRÒ ë-bL•ù+ºØºÜμ /®•{ÖguçLynY5_þ`*–M|®ˆŽ¼vVv”¾ŽçeÇk«#‰’ìó04)Þà-Ô±Þ9Xx|A2‰5Œ‚ÙT™cEG² Рɧ d²5¦ bœ REn *"¼C×êË“âšæ¦ñºdæâ9|Z_‡j¶Ù%Aó)”Çûi°«<&!·.óÇ@'‡ã]ÀÏí°cØiAÍeydC9ÙžzžëB Qˆ²ä¹Ü‰Üûá[ Ö ± £¹š¼èœf1 pCæõ8/˜ EÊ ª•%Ô!áF¯VUDB䩯hM‚V|¹]Í>–á%Z  ‚ÎwîÀîºgñe§ëÐŒ¯rsDÛ©†èºe²î†»á÷ 9Ì3œaÖN€v4±“  ?¬Mæ Iª+-žY̘¢7äœLN a‰šÊH8D)fI@“äåê–dä@à§"Ý1ÅAŽkž”Æ=ÕMÎíëYå糧ëcn=‚8oÛJÍE'n(çÁ{ŒJnÎDY×±m†@yª*GÄcËeöso«ovÄNJ¾û ÛV±–?±âú:?ÔrøÃ5mç[ð E"øC °«YÍá8ľ¬5ŸøÃŸ…vWy™Œ&©‹¢Ìv91¹{u„8 Iæb(6é¦òe©œD¬¡9 7t´ºnšK6‚âpï™#< d¥#eƒÔÿMU‘3 pxoL|Ø‘f³\)Ão—Èæ!4ýªg!²:ÕNèT¤=©…EUt0pÐBò¶ñÆ‚ÿ«øchæU¥åcõê ~ˆ¢ XÒ/•òH-\bFö"l¤u >‚ç ~ bÞQ1Ï?"ç=±e\6“ #qॶÝRRrÕ­" ¦m^© Ðe̳~´¼Ÿ+g\Á ĉCzÃìâ{»¢xCb¢PÖÒDÅ”‹åœóe zIã”uOp½j7†*àf¿NÔÒ(¯ ¦nD-Eïÿp$|f2pG¦óL%ÀîkØ;PnÖ›I¶(2µ¾™Ár÷d€ÍÑW·•Ö P¸øþÄXvJ gO!mW9³öóõsÒk”±1™I>“1üÓ(¡­ŒI]õ™Ín/Á‘SQ–ÌŽrúA)q%2ÈqNŒh]O8ÈqDßçã)2Ým/…u™Ì¯Òé62Ö¥!(¹Ib„Q§oÛjŠ~úâsõtOªV,ª›4y–aû£ËU‰%¦ÖJv2wÔS|dô\öÍŸ8ŽìòöË ]Ì"„ûœu`Å9¶Ñ„€~nòß“6kþ’ß•”ƒ²rªëê–Q¶èéA­£$›?‚ù•ä¯Íòãœ\cL%O"‘­Ï&zó)×¼Þf“²ïÂÌà ‹¦ õ<—××kS}9©3°NZÍ"¿}gÊÉ[+OáÄà‹¥àË ¢¤Ø€±Ñ•[¥»€¸¡áÙS`y_a¨|ù^Yñ2å¬XÊmur7fò .Áé‡ë§>ÈË@¯ sX´±W“çE'ŒvKÑŠïðmØÝ˜ÈèÕ5L›yUl!^¯£š" ž7,å ð©!UÅ!i¡T23d )v¥òP¿9“y@ؼ<ƒf‰Nv÷s6 ™¶­+›òGÆ"Y§Vû£ϧ¥~ƒhÍ…ÙåW@«7÷Ç(bîÓñÈfIR³ÛɉjóoodL•e¹ôB…™¢¥šÙÌ| k;AfæÕÍÌwL{%«ÝÕ”+Ý̨õúñ7¼òõò?KØ endstream endobj 189 0 obj 2645 endobj 191 0 obj <> stream xœ­ZMã6 ½Ï¯È¹@RI–-  Ä;ÙCo ÐCÑ[?€ t/ýû•EI$EIIv‹’Ibëƒ|$ߣ¬.úôïÛ?'þmNΛÓ×ßß~þáôwúV¾þù¶¼9.uÊ_ÖÓÇo§?›“Ö§?~¹êeÓW³ogsÕn›ŽÏgwUNÍ›¹ª=¾Åk”9®13ü ×Úã+îÐÇv³éÒãÿ³½ÂÍñ"ëÃ÷ùG~0*Ü•æŸ6£®o‚QÌ=þop.ý) â¦yÓË «6>®!ÜZ|Òõft-~{¼L:Þ¶¸”aš|žÜ¡5স`²2•o —Þ¢ŠM`Zø2¶ýúñÓÛýãíKËW‹ŸÃ+÷UÚMó3¥,cI»¦síÙÉ îøQ%‹—}Y“ÿÓÉ:q;Ѱáb­Ó‡¢•­.¯£iät}bùû%_¹£+\±dœ!¸i²°_‚=ÜbµØABô³' ãø=íñ2åŸñÓª.¶òSÄ4ÝZ–Ãx<ò<_\­&î3.gd£q,ÍÐU#¨ûô½H{>ûãgŽ!³'*‹°¨©ÀH©ÏÏ¡áÅh/wX•@¤ØÁy~[‡­ù'Æì-‘fˆãgÜ1“OÅ %tª`›6ê]A‰þ&XÌ£.Mï`lžº»JYgÓv!Î>rueؼö%o#.È|§‘Úàa,3nF†ª»Î,—©Ž¸W°äJ¢4X/1¯`å#kL›'Átð¼–ñâÆ`²}ó*Õ?ƒIÅÑKd%ÏDÓ2›8jyºvpËBsb#4dш¾á冦)_*=go¤BðR!<“Z2öŸÖ—¥ö_ª_`ˆ—™Ç‚,• ž®ÀaŽ„[)½"çÄvÙsÓmËÃ$œá…i%h»«{„Ë£gÆFø—Þã§,’H–.Õ3¦¢ªâ ‚O80A«Ë‡›ýrñ-q ‚0Å|Þ¡s1d‡:cûêJÆsܵQ‹IU¼æ˜ Ù0ï‚&6Hü`˜[Ét᪈Nné†`éDy×mòeíi³é6¡ó3ªyOèÈ.2)T¡$“í?ðÖj.¦öq­k©VlHž5´¨.Y„¥b„·ÔUPâ%Í&"¹b`—Iù5¼Íj^wgµv̳»Ì`[ p+IÚ>‡½‡m›Hô{ŽjxßmôÝz¼šÝÀkùÕ{z¡äÌŠU“_R‘:Äè€G×ìP¦vFô'Rô)˜Shb~Ë|¦ª ‚s/È \v ÃŠ ¡àtͳi¹$hÊÀl2j®>”Ë&1äxLå%GˆgÚäD$ø±/Í*”¢BzÎ`'‰[µ8Oñt¼—ds[Ù/”ÝOÓýÀ[x¯­ CÉ6BU§ÌCf‡¨²ï(ЫªŽT˜6Ì•Q tZSœÅ‰K,u 'Y¡”öÛŒtŸ¼×3;&Ê6t ž„l05àÞfÝf|aZ°ÝJcX6½¶Ôæc’ŒS¹hñBû(Ñž¢bž™pŠF¯ÅÞd‰E&‚„*Géëƒí€„xÚCOY¿JI]Yâm˜5ë˜)ºDO=aB1e•HîŠ&JZ~”c8Î)ɨ(:Kï…Ÿ`˜)ºÖÕP¶kÜ æ³<þÓIò¨/+Vj?È>æêØq¡Ïš«œ _¬÷Ùã¥vWÍ´³MyMƒiÄŒ¸ÇÔVAIͬwÚ\Ì"lè³ÙKÝJ›t½’üš!Xu¦\¨Åì|lÆ ƒhäÄ~Q :Õó´d€‰·ÎÒfÊO{ %×äÂDû©¨HüÍõ¤„,ðÎ+ÜÄÌØÖ Ýú-YÆdè2 Þ‹¶N®ƵŠcCíïár"ø!Á$Àcò#bÝ26ˆöB6ØÄH7´Wáõ…n Âr_FaSj/¥?T³ZÒ*?³LÈñW3»"¶ëc˜$];¿pêÂJyo¸Ûš;JÍBÒ΋é0Ò§m"‘‚×2mß¹À© Vl áQŸ"”%ÖOW5<56ëø•ß|ò˜ƒ¬Ÿú!÷™¼ÊÚµ)ÞI6ô…ŒLöÎÅ8æ€ÕbPÐÓi…5Ú~˜àD/,{±›š›]yPÑ"»©åÓ§$jZfyÐz;’/i=ò-æy?„¹ýU¢¨|[Ù¢ÄÓ¶fLótÅJ-ýµ0æþ4tì áŽÄ‰ø¶åŸFG«‚0 ézê…”Ý1|Æ®›µPãÒæqZà ý~8;Ôyª[Æ›•äè(å3Cå\ú½ç©^–Åî-Vùéýw&ê<èRÕüWQÍ÷‰yé0J á20Ÿ³ßD×:ôÚ´H .|Mnz‘A"±^y9ÖÓßsmX^ý™, ¬Iýzàˆ\õ°É9iErirw1Ñ–¦;:G¹¥i¾¿åyÜ­‡Ž6¾Öï­àlFBçÌ.7?és÷v®‰—MwWŽVK'® "ÚçXõ¬ ß@KÅê_Ò¼µÞièTÕ­Ï»Í;Öºª~¡'2öÝj„L­X†È½t:ÒÊêÃÓtšÏ³\‡CbkçÙvÂmþÈL¡1J>€-:Ú袂£–ª×Q‚®“1&뇕ÐÌNž¦ŽIL€¹ÓIU‹[œZ5N(jöŒª…DFéϱÙÐ$5±‚ÐR³L\÷8f3Tù‚ƒ4‘<“„`6yÄ0vœ5B=“†fÒç¼£iiì³Gs䩯sÇ7¯EvW¡uŽòX@ AG‰ªD‡Ÿœ)WˆäÔ•jÃ{¢º“±_mT³ ]ýrl5@ë¤WëXzÑŸâY&/,^‘“5‘'‡þ§#ïúÄèY >Ó±'õ$dwõ„„JÅ Wøð©­>á}qÚ4ÝŸHÏè1ÑÑ JãУð°ðad YŒ|,‘¢¦‡µNûUvÊ€*½Ô£ÍÒDO=KdåF·F9<±©À …9Ö²¡ÙúšôTÂ2¤"ÀnÅÑz9sªC;m–X„”Ú†!®0«=ôÇ*h‡Y7»2†þ 99iò§éjsÛ>þ‚[¾œþGÆù endstream endobj 192 0 obj 2318 endobj 194 0 obj <> stream xœµYK‹#7¾Ï¯ð9`G¯–Z`ܳö!·…BnÙrd/ùû‘ªJRéáîžÝYzÜI¥¯^_•ÄEžþ{ù÷$Ÿ•êä¼:}ýòòëO§âÓ‹~ÿ&1Íñ¿3RºÓ׿^Ö·§ÂXëÝÅŸÞþ8ýü0'©Ooþv•¯‹¼ /vQWyÇß~9‡›p5W1/çé*õâ®âu9kúZ‡‹œ„K#á©TËYŠ8$Œáw¢q•™fÆ'¥âË0è÷·_^îo/Ÿis¢’zVƒR«“” µžÂxµÂT ®NÎ ˆ$–n䥰qeúÆÄe• ïÂgGéE‰øÞ^Õ#Ê ƒÄ„ŠsÙ…ÆO¯"¬6á”X =6|æŠð4Ìs¶qÛ‰«aXèæ —sšqås(0º0ÜÒä8ÈKâ&@$Zd]œ¾šû6®“»¸W˜ƒOèÑ.¦5Þ8y' š$ €­FÝdð±¾…{Ä6À”“SM†_YD"©¡…}ÖAFÙrÍઃ%L¨¢ ºˆ*ÒØÆ‚‚³l"ªõO5¡Dë*ÖDšH¥-ÀÚFWC{€Ý“Tܪ2Bê @ÑÎð5|‰ÎÌj¥ArCä¬j *qÝòdyx¥˜fnae%a‡Å¡ÂÊÕ*[Ê›¼¾ØFyl9¹âÍ ˆš°¬ÏÈuBµx»´gÂÃ7!d³¢²VŠ0µÎ@;afKÚcHçŒp¦èJž»m¶“SjÍ;'áM1³ãST'‹dN‰?¹Ç†MÙ¬Âg¡Þâ#ó¶¶Å”w}n2æ¢á†yqñ´¤&ùˆÍûÅŒcX‘è<,9Àâ¯û>€öÏTš_¤M†ý>»®ô—©¥/·ü¹ßj Ægƒ­…zÞ)ü"»ªtˆqŠù cCø—&ÉH••÷ÊÄÆ´Œa~ÇmëÉ^wñ6Þ\æ6xò©Ì ²¡ñTÍûRÔ‹¿Qô!; kËý´˜ouH N†¢Yæx.?-®Vq,pL1#¶9|1Ä¥!clª']É(wˆ×òoâïD¸6ø¯…ŸîoY ÙÈß™‘·Ya=§3„ÿ“¸A~òÄdå§X°@hA³Q¦@™)éQ:i<×LuKžž3É£*´\´éÓCë¸çÈ'·õ4M]YÕò=f€ŒÌÃÃÖ8`äŽgjÑ4yÞ#y*×EJ‘ðº)»ð“PH(Ê ê‹-ù¥OuB½µ¢î‰Ï=JòÆUmÉ:fÙ þ¿-܇¸»D˞̣¸„NzMnÛ­_J»Ù¿*e£Rk&ùèH£œ¥vÆ‘#„Ò'ìtÍMÈÅø+Ńפ$C[5ëŒz–] ÑQ&ni¤óTà‚“×Ûr5-EËdŠ.8̸ ½ùF´ ÉŠ4Vj(¤0¥{S¯Ñ¸ÁF¨œ¢ W0ëp±Ò ØÑÒd»b¡®:«š `´Lú*6b}­GÜNkÙ‘wœà ùV’ñwV“ö Õ…OŒšI¨ÃîUIR¥ô¯_µîÅ[D+Dh{¥E4qPmÂuł̆ßtbšªûãˆìNÁ4²iÓoRpNu¼Ò®«uæU©çÐ9X«®íIÕM¾Ê–7Õ ¼êÊŠq/ŒÕPJ>iBd¨ß0ºÊf1JË[´OêðvV¶<Æröµ²®gìLiÀVƒ1O´±Õ(X%ÜbîBuÍ5õ âëæ€aZaš¦j4ÍÅ®EëRœ‡ B…gMDöþ<`'Fˆt·ó‚ž2ºãéTôó½‚ w¶VÀ]@Ŧ›7Õñ­*–XˆÏÀQŽ´5%u¶asOƒyiKÔþÝÒß½ÆÇnÞrFZcf‡#ØãN#fm•$Þa`Òëžî3Jû|?6ÁVÌ«p¾î“ó›®JoãynDHðD%¥à ¸>±b©ªD^ÇÎ=ð%¥BÚõ¶¦Ü˜ýI®üÔ…9Ï8³f森»F‹êû®çÔœÎ™Šøít (È®ïj-Ê’¦™Ïí¹Âdú‚„qVAÖÍØÄ‘sFl£ ïX'–ï É¢ìŒ-vÍÏܘH§ƒ`7V«½çzø”ÊwU'è% ~}oèÇ5÷*û(ŽpŒO¼Ëí~@¿–wùê3öαû-’õm«Oš®Ô"=äŠe³/Ã«ÜÆü%á­Xš¨ñüÜþ} ïÆ®ÔÓˆTopôƪÐ]óe¾Öt Ùã)ûžz„èŠ;†\ÕœP?'?ï£ù¶G»©/dvãšÞà'VÊÌTË ~8æ˜é†w~xT}ZŸªˆƒ“èÀsb«¬šÑ¶ú­>¬š ôÇúÆË¼˜yлzj.ZÆ3Ãn¦«²êuyû‡|>ýCβ endstream endobj 195 0 obj 1906 endobj 197 0 obj <> stream xœ¥”MKÄ0†ïý9 ­™Iš´PV܃7¡àA¼ù½ø÷ÎŒI·»[]d¡ÝNßùz2SÛ€ùª>Œ¥_4±Góù\Ý_˜wµZóùZS‘¤ÑöMg¦'s¹C`¦—‡B‚\ÂbrøTã`[z¶W©öjEÖóóü*«ê0ØØŽ©Žt÷1µ*èçâÁbìizöc3ç 5»æ\€E_ƒ:p j@ŽÿW6ý½NÓmu3UwÇH…®¥ë>)­EczM¤á‹Wh˜F› áìh‹ò*‡ZvÂï¸he¦ųȥe¾ì%Î^™æ]ŸC?;IíÊ™íeÆðÏÝ3áº'ÇmÎÁ6~=‘c9ÍôÇ—FguÑ ðSSå<Æã §ü¶ a牚뚰†]òݱ¯ö©H|ƒ‡‘í.Moârg¾Ngz endstream endobj 198 0 obj 472 endobj 200 0 obj <> stream xœÍZKë¶ÞϯȺ@rõ²d†ñ9™Ew¸‹¢»Ûè¢@Ϧ¿IIÔÃdæd[¢%ò#?’²¸ÉËß/]„ÿ³R]ܤ.ß~}ùï—?ÃÕ›Óèÿ bÃg¤t—o¿¿¬ï/Nù¹vr·éòþ¿ËÞÌEêËûo?ÏJ.jÖÈi¹šð©gá¿ú«Ãrõß_Ÿ\‡Yދŏ„7ô"gϼ‡ßJ·LqHˆã¤ ra ±^¸ºƒp`P„ïòÜÔ^\“ /n†á^œž[~yÿñåþþòéCÕÍàFÕEJب_¿`ðCa×–ž*ý?']ôº˜ðFÂ5lÄoÞiÐ ^ÔaýNh˜‚¿Lš’¦)±Ðu5ø§ÁN3¤Š«A<Ó‹1ñjÃáÜ7?ŒÖ›ŸDáë/ÂixÄʦÂ’DŠ»i*Ê,×íHO4&lÄÜ·u7WÙ†”•ÈT”/Ò£V¿ ZIµd+°Ý°”;&Ð>MÀ°ƒ*B9ðTÜ Aµ€0|t†ûD‘~}‰A;ç™°ôu‘ÆzÛø)ã¡nŒ®4£õb 鎻§ÊÈU¼ÈåQh$úÌPwj‚ÕOÙša|ŠÍŽa“5†½»nÓHR ¢oh/f 08 Þû¡T‡^Yí7ƒteÀ5Ó"ÓܶÉ"‚ì2¹'¨Òƒ¢¿M·Úlˆ$œà$g3ôÈÂmœ¿æââÀA§ä¨?çÑ'‡è›X‘ÐÏÑŽÊÀ;Ù­šeq—V -\éÑñî§-†(h,–v*4ù6Ä’Âeˆšfæþ­ÎMê›­Œ&† ´ÚäËõÀˆ:3n88ñ¡l»LK'Cá0š›zÖdÌßß"½?i b‘‡iñ0L·!¥Å2¦ÅhòbMŸbÂ@Œ1Q…ÜUC¢ª ï¤a,»rîy˜0ñÕô[ÝñGt`šM_¤× Ð…¢ ¨lÄÀþê¡1åC^ÅÕÆ§ÊÅÐ,,ñ5åJð‘7–*a»Ö6æ6Öù Ë>‹ R²“%˜‹GÚ„˜L†õk‚r›S`%÷Šdq8™wGȗ˵UZ\î,ãœríÜÕ‰ðŒå!ÞÉ£Êå<‹œb½A ÿY±ž­btL¤0ÁcŒZ„¨œææ<ŒeW¦xö—Ù5fiçò²Ú¿ÅóNF²zåISÆZ’R%…Ív4 ¸?é÷Í%‡¦Œ}’*ŠÎiLôÏ&¨ìü }ØÊ?’/`ƒ3îñìÖtÚi÷­%DSØ–ÛøÌ,䤊ªÜ¿(>V–§·‰ËZ–{rîÆí6óI+Œ¦’Óæ§¨ÆÃJxÄK~€ $ÌkšÜíxŒé³ÿžÏâK†W™àUËï DzG—Ü~µ'È}ÆÆÊ¦œÝdõ /4ÌTA¦é.•`/#k5U¥_Y2#îe™¿ß «tMè&j¾óÎqr©ÿž>ÏSrÃÔ~2ƶ…í>ůMï§dwÖ W´¬t‚¾ã³%kϬ­ Õçþ²¹:Åt…:`g)¦éEt».U1Ѩ[ɦH Þb‡¨>‚‚âÚÍÙÏŠ 33äDÕÇ,%cíœÏÝ1Ýù`¯ ]„8w³î¶;bð/€uܸ`%‚Üé:Ë ’2u“‡)–®­XW¦ÞØqi=y¿šå=¢*±4)^e?ÇŠùÈ!±S§ßßš’fM±v8ó]ýº¨FG=ç|cía½MœZë2Fªj{eýú"(ð£ SoT†»æÓ“Š¥{6ßÇË. Ä©ƒóIÔщæ-¬>~Xt"/lvXm0…O¿nü®Ãß4·;ß·sM‹à ¼÷…º©bÍN•Y´g76GÉuwkH%çBf“1g×DWô±Šé~ …hTô³ Ûê!ÄBê^1+DAS¹ò¾]ôØžº‚°•‚J§ Ùkbd~Ž— “ÏÔùj;À<®W°³®²ŽN˜øÜV¯­ÊùšZ;ˆÚ7—ÒM½j^ºý®›çn¶û;´É”àíæb¾^Õ…fÍg#–`Íö žü£Ðnn#7gÛŒAwõ£¦&±k ·Å£HW¢¿H§ ÂïA¹£“’s9àiµ²6ú¯r“f¥tQ7>aÙ,,§ÐvTÎT…å,…õïô¦H1vç”Åèÿ+¢?qLÒè»<(?Y”<Œ>ᘤ1—™ªBr_ŽÌÕÌù.æ¢zrÊÅÒ+)³‚¢ ;Ñ'·ˆËNᑦcS¾ÎYâÞã—²£B$°eR²6MµŠţëîw™†ðörîT¹éIâ‹×íd×Ô×á„NÚÇ4’:ØÕrÑ)8®{>~Œ¢D[‚²ÈeöwVhM(¦`ô®)gÅ:ŠØØÍ‹Òêí¾ ”]€V¯ÏÇw¸4ØE MmYøZùªUJ¶ÓÛ`U¯‹äíÎÂTy“[F¤Ùì}ª¯!òà—¶¢HìCÈZYß›Ûj“n¨`$÷þô3s¾†Ê¦«Z«_gÕS§Ìú ðkÚ‡®´¶=çýÔb¤ˆ ÷NŽ`hdU*Îâë ›9Ýäâ¹ *öüØ»¿E‡{»‘‡bÈËQIüU­L”±o¾•’À6£J R¶=ÝüX2•œ³›(±…vúãM·‚GLG¯Îä ÆœÍ:™Óš*¬°×$ûÞ¤|` Y'¾˜'žë¼Ú;øÏ+އø«œ›Z`o©F‡J';›fÇʺB¥u;z¨Ñ„ÖÅØ”j\ÌHë`'.ÛZÓ2¼«ÖHšµ“"Å¡Ÿ.ÿ‚îI endstream endobj 201 0 obj 2282 endobj 203 0 obj <> stream xœÍZK‹ä6¾Ï¯ès ;zY²ÁÖ›ÙCn 9,¹å9’Kþ~$•%•dË;½!,ôv{,¹ž_}U2{ðÛ?/ݘý§¹¸™EÜþþõå§ïn†«ìö÷ï/ûÛËÂì­†-ùööËíûOâÆùíí·Uhþq{ûãåõíåsµ„³¹¹æË*Ì&W¹lw±2ÃÍvŸÜÿrËÊ„»*>mw¾²Û]­lg†)ÿmÚDu£’þFØÊ_ñ7q½ñø[û;^í:{‘­bG÷¥ì’¹ÝA¨×í.W>Û¯ðL¾ø¼ÞÕðÝÞ ¢Œðét‘p|¸Ÿ‚ÙÛÜS9_A·Û]Ç¥@^|¸›Ye™û«Žš1%1üWM:ÛØu³½cûùíǾGô2ÙÏÒ#`ZØsqAáÊz僆 YÖZö*lÔ°8R¨ôòÆ•^ùGk#÷M..@¸ÆÚ¥`¶ú,~WYl]MŸ !fH„%ƒf"é]:…š—Ç j‚£¼/¬íî¦-˜Ò;̵ñvì«™=Tå«:fÕℲtã9ì<€b8èÃh°™ßÞ£…ž¦‡)ÑBš´ k¾¬r"YRÚQCÚ.•e<ªŒiÒKçÝÛ°ˆ €-d²`> ÂÖ{~²³²‹äõàˆ>ûˆ’¥Ó:À®`=‰9U£C‘7N—°+ì)·¥ °Â`T‰¬*Ür€†1ï]jåËfª±È.à“m¤n|†¨íÅž•È)„$UéjÓš…‚Ô:Ä45Ìä½&\{´Í‰Ç„~ÈÚgÔšXÐ%‹Z%:ÎYÂŽz‘°`„–ñ‡®…}Ma›\ ÏFE2±=dFTÒý-¦ƒà^Á„Þ’ÐuE¾Ž¸\g#~¸É‰ìqÀdÉ`âÁ]‰ ¢•y¨™é TÊ‚}›£2Q˜`Iˆ–»FY’·¥U}{™¨Äè¡+§Y?–³¸+¢ÎТjd£æð»¤5\¬ ²Q(p5"ç*™„•-'#b2iUÊ…ÇC‰o82!ä_ôÏnˆeÙ·ë`PT¹Òkl¼c¿ÙOQsrT³ A£¢\%c, DQN€`Ræ1Õµ~vÌ/9ÒD@€Y"D,˜*‘-W‚q5D¼ôµ g|1‹CPî5³úó©—»¹*ÄÐqe!=@Á Áá)Ž’sàbU Ã`¯¸óÒȤW‘Óž˜»E Ò°]Oê)Bi‰ÔÂI*u—YJ‹8“¯z³ä¬Ï,9o®ÉÌò˜ SféÃ@ÒåEôV˜ê…ÉÓÈý÷z V RŒ›U`.¨Ì×8;”udÝØ÷KÙ°EÃHŽ Ñ-¼™¸†¯ÎɬêÎÝŒXeÌ/ÊŒjŽ«ë) â-%%ƒ»ƒÀ…Ü5E¬‰z¦pcð™I†½_ ´ÍA(`FN´õ—¶DjÒÅÊÅ9n±ðα ÀZL0,ÊCMÊ–à†PyÄ üÁ5 Â\mÀøÕ¤ ì 7fõøìa —üÄiºN'þXÒ¤(ÙÑy-·ˆ˜gâq¥Ç Â-Kžc¡ÊšªÅ(À±c„³UY&÷ÒŠ- ÝQFFïŸX[-´ã:o¯JþR‡D¿Õê…Ç5ð%Ô'ÕW U5p+ûxR}éšVõmÌo,ärqÀÀ¨jûä Œ3jÚÓ&af5˜9íqDo‚Imü1€@9ak´= `¶Öm ð Ä¥…N—=hÂñ ?›¥I>2¦¾Ò:TÄaôa€&Ée"Lp‰Éãʺ˜›õJi>î‡ÜÌ»Á¯|›& §.¸OŠÄ‰ágFšÓQâ|‚ŸršÈ)š8ÁOºæÛw/~$á•c,‘šr¼êì©Ì5çýcÈ'ù{øˆ‹ÚNBEqÒY†±²DõuôLàtN}Év×Õº]¹ÕEOÖsˆ“ç£ÍñŒ¼$4i8@ÕTûhÚü†Ýô æ G d>ð®#Ô!"Iš ETLÉñ ÊŸ8 ‹C,<$=JÆéâIJ«‚ƒÉ©ÕÙG¾sÕV¡^9žûiB|²$`†|x1 …ó¨ÏxãðÐàÔZ—Q“Ý Š à;>zÆŒÇü`¬^ñÎc׊¶÷ºÛÞ›Ý,ìy8@|aÉoôrE·Žè\F:ÇÿǧxB ÒSöñGÙë1p²q=­­bËÒôÏSÊA?:ªÑÂô`0Js¥_[5Í€üJbS×T{»Œ%ÄÉáAT¤Å« ‰Ï{g¹Ã„æÌ;\Tà!ï5Ïô‰^E‚¯ š¢D•»ëßÂðr–mz·‹Bì¦ûVÓI±¯Þÿ ,±Ùe"Ù1’ðe&]c‹¿T žãýø)°ˆHü†FËðNŠ]áa2Ä› œzaT~•QýWVyõÄ7³$e{|ÓÎYE½•âúãây¶X·’õ3¬äIõ ø%&‘Ÿ> stream xœí|y\œÕ½÷ï<Ï300ÀÀ [æa„@ ChÄ$d-Di˜À¦3a†`ÒÖDëŠKã¾¶Á¶jª¶CTbôеÖn^Ój[kÛ×¼­Ö¥æcÚëv[üßsæa‰I½í½ïïçófÆóœß9ç·ßvÎÌBCÃ^J }$“»{ÀÈËHO!¢Ÿ±”î]!õ¯7Í|ŒÈ°´7°c`øMj%2Ù‰tçìèßÝÛgºu=QbÚ•}^Oϳ[ü‰DÙoÇ’>L\8}™(GÅ8¿o tñ—ŒC7a\Ýïïö<’ñšã‹1Îð\ø…e\ñ-«ƒžoGƉÛ1>DTQðC¿¦Ò(ÑùïòõÀ7P|gâDkˆ,ý˜cxóÆLÏÇ’¬èô£).>þ|éž lÑ l¥²‰¢¯Ï´i_ôu¾Æ{é+'Ö´W„¦_³b¦ÒûÙèc–ÁÑjRè#DË#t’n%+m¢ÛX åS:m¦ÕLŽ‹®cwGwEߦÏÑMôÍèãì²èƒXÿý>†ÿKaTKk¿™¼ô¶üuDï"#]Eñ´œ6°tòЯðþ:ÜL·Ð¿±/G?†T+]~õÔHÑg¢ŸP)]§ì×½bz”n¤#LíŽúhåѨäŠþ*úR}‹†N.6¥œK¹t]Aw° ù‡€n¥oÓ4K:åUº§!i5m¡A¡Qz~ÂRX›î݉藢o’žR©:ùèmVÃÖH÷) ÑÑWé:L?Â~ù{J¹@y@wÁtCôëÑïS=ÎâØ“ì]•—Fï~YH‹`‘µ³¾JÏÐé/ôWiot/K!ù9–ÃTV‹ÿJÊ.‘.‘_¢…Øm'´¦†Gž #ôló[:Fo0+Ëbç±íìFöW)Aê‘^”ï–É/+Lùìí¤Ø(D÷ÑcÈçèE¦ÿJÖÆ¾ÈüìvöuvL KïJ)Få«Êß•“ºÂécÓ®~@vʤóií…m¿Etˆþ~I¥ÿ ™…-e}ì^fÇØ»’IÊ“ÖIé6é>é»òZùFù¥FY©\¤¼ ¼ª»Rw­Ác˜þäþé›§¿;ýóèãÑŸ#vÁ¿Z`ÑK÷ÑÓô¸ÿ†~OàñþËÙVöH ²«Ù-ì»ì9ösövIâ'-—š Õ/ ÁN—I7K·@ú‹x•^•~/ýYú@ÖÉyòy§|¯–'å£òŸ‹R¨,T)ë”­Jž©Ò£Û¨;¨{H÷}Ý }½¾Gпe¸Ìp¹ñg'KOþ¯išî›OO vˆ¤=°Ä7蛈ûCðÁO`чÆÇè}x!“å²"è]ÇZX+[Ã>Ï.d^v»ŠÝÄî`w³o²ïa؃d€î.©QÚ(y$¯t¹t•t½tï'¤K¿’^‘ŽCs›ì”]ò"yµ¼U¾@ÄBò%òå°ìòƒò‹òKò›ò[òqxͦ,P†•=ÊÊÊ!åçºóuxS÷´nJ÷sÝ'ºOô’>SŸ­¯ÐQPÿƒÞ°ÄÐf¸Æð²á?Œ–ÍJ¡¹:¿ZHÈÁÒƒ’UÙËŽc"‡)”„»à‡ÈŠÿ y~IäëÐ-MÊPR9¥Þ­„AbG¨†=G{õ’ŒJ¬£ûtLyVúý’u± åyP÷)—B5Ú/=)a+éT/m‘½ÁÒˆ÷‹év ÒCì8[ƾÂjÙ^zYJ—7²Ë©>úMIa&¶š h@—*=ô…Ï®‚¬Ž~GoOC1+_F}š¤Ûàчé5öúÓEßEu“Q<¨2×!Þ¯ ^õ:‘g{‘¨ ýúé?Q µúÊ:AÿIoëž@D­D%}sÚ§|Cùc´6ZŽ C–ÑAä]ƒŒyQòÆ|t!2=µ¤ YÝF[©‡¾‚ªwc4½'úÕè~ Ú¿±2ö76†Œ˜E=ýï¯ÑoصÈÃsþ{§ÀtMÑ;ÌÎ Xòá¸n—n¿îAÝ!Ý¿é^Ð/‚µ/§»Ñ@4ÇaÝôsz‡>bFø&ƒÊ¨ú.…îíÔ/uÈOÑ*–Iäl1êøJm'Ap¹ Ö»ùürãêÄ…ôoô “˜ ;ê†|#ø´ÂÎÛ€}?<øU6™TíRú3öÈ–J!ÈsƒÓm¨ZSÐéwô'X;*ô*C]hb[Àë#ú<õ@ÂjcãÔ} •j-5É?ƒ½ó™…V²<ömÐu!C)‡êtd•M¯.•|òS8c¢˜Ãé•EŸc;¡Eöq’ÒØ:ª™Þ@en·»aÅçê—/«[Z[S½¸jQeÅÂò2WiIqQaA¾3/Wu,ÈÉÎḚ̂ÛÒÓ¬©)É–¤DsB|œÉhÐëYbTÖìléRÃ…]a¥Ðyî¹å|ìô`Â3o¢+¬bªåTœ°Ú%ÐÔS1ÝÀìý¦;†éžÅdµžêËËÔf§~¡É©N²­ëÛ_ßäìPÃǼFÀûlœ› µÙÞפ†Y—ÚnÙÕ7ÚÜÕvãñq«œ«¼qåe40PØæ Œ3Û &ÉÖ¼l\"£J…3MÍá g× ,4{zÂmëÛ››²rs;ÊËÂlU·s{˜œ+ÃI.B«„˜°~UØ Ä¨>¾ºV/›½nÒBÛ»\ =ÎÏ…íaÙÓÁe$» ·)lÛóº}næ)«Ú¯š¿š%6Û}*ŽŽ^¥†§Ö·Ï_ÍåÏŽð­TÐÒ5ÚÑ×Áˆ­UH“®èh³+ Rå;ỊíÏëlæ3]_TÃ&çJgßè»àšÌÑ0mØÉÌtŽ£ÌfutS»37Üåìð4e[itÃî‰ ·šqêJyÙ¸%9fØñÄ$ H0ϼ³kèjÝ0kYÆ5r®F@„Õnš´;±§¥üá]J£ÝK†WU¸ñ…M«ºF-Ëø<§ë ,NuôB8¿{êŒG›ÑX> ò8™ 5¬ÏÀa—+\ZÊCİ >…Ž+ĸ¦¼lפ´Ä°¨è`>jƒm=Ë*`þÜ\îàk'Ý´ƒð¾õí±±JÛ³"ä®pu„¥.¾25³’¶™¯ì›Y™%ïr"’‰ÏiacáìI–ôÔæ¾ea–þËÞØzëFgëú­íjóh—fÛÖM§ŒbëKg×4(œºª]Î’4HÊ’Å*‚òÂYd>hO+øO/‚º',#(ÅS[–®scÏŽ¸ÜÜH3i0Î#šŒžàT¢›#Ó´ /s:^~ÊøíFeè«J­›¶ŽŽÆ²Ö‚4:ÚâT[F»F=“Ñ}ÛªÅ9zXz@z`4ÐÜ5ãÐÉè×f…[®ëÀ&úزr\ ¸µuxã„5ÐÊC›Ö&¥w*é”i™â Ê4£ £^7-ÉO²B2ábi'»ËòaýÉúµ–÷ëל¬§À–OðXT™›œ›\€Ãaý‰*O}âÖÑßIU¦ø§¿2Ü9ã3†ÜÎ S¥R©k3LûLûM=ÓI(Í2šl¶Le¯Žé&Y¹;NoÀµˆD|˜,'¶á>»OÚ/)R†ñäÃv´èl]ß>.¹—vÔ¯y¿zàÑìmzŠqÕê¡ë„R5¹i¹Éìµé5ÊõÓk•ïüñßW€íêè[¸y®À¼Š­u÷2ÙºœôÌó²ÎÍ^]ð[Ëkɦ%-Ÿ/ìÍØQxeáM7gÞŸy8ëùÌe%èõæ´t}Fz‘¾$­#cDºRº_ÿ¨þ‡ú„§«c‘rò«%—™óÝ®…Õùî¼b<2rªýùŸäKù-9“Ñ)webRõçråXrÂ9ÿ™£ää”±ÅäÆl9 Úæ\wvrC®;Ë‚‡=³:wR =ªÌqe ŸÀšè±,z`”Ãí¶Æ/XTh,1›; $G‹&°wbzuBæºjVÝoÜPÉ[\’»ÍÆ^³±u¶m6¿M¶e,ö5ÆlºshÍñ÷wï\kéüнÎ}ÜårÁ°'ѽßéz=¥®¢s§ëx'†É)ur¢%fïÔ¹“-Y²¸*==M¶¦Ûr ‹ ‹ôzg^aMõ’%µKpr:óôL¯7èӬ鋫0µ¤†y£®_¼øäd«œU0ýN¼Å ŸûíÎo?µå;¿Íߺ‰}aÉ;ùµíMç7/¶ÄKXx×-×<>=yÝçg×f[Z"Wo½¾5»@Í^ß¼|ú)Uö¢úå[ª kó½ˆvº ¾¾˜„Oº_?L)ÑÝ‹âëj³ÎÉ’R¶è·ÄmIßbïÈþÈ ¯Q–›—§Öd5+­æÖÔæ¬[ wšâq]¢L˜8¢3X¹¥Sãã“(ΖkÌ ,` ,%’\˜4ÉJÜ ,@û /#§!fÍõkŽŸ¬ÿÓZËÎ×çqyo؉vv²ÎUíîø^}o\oz¯Ý—­ëì N×b$l‡« ÁbEi©VL´$f³«XÆe‘ïOOŸ<|Á¸;¥zõîί^¾Ã{¥î‰“'n™~sú?§OL¿zAÇ=Ré}ëzìÞ¯ó컇±w™6&¢¯$9®Á­kÓIûta|&9ª{O§sèºt{uc˜Ða«(Ø#«¦ÜüjÊPêÅ~\Zâ7Ä|=$ô½™eèžø[ öÝ;!§¬”;u˜,°sK|ݦ»Ì·Yêˆ;b:bžÌ4­ì\é}KܺÍéË|>îG ¿Š{%ácÃGfsvRvš;+§:͘\”ötÚ‹iró¤ ¢O´¡—®w'$%¦´%v%J‰ö†…Ç2²ªÙâ®öDŽZ-ú¼’Xï*õölÑ»“lcüб@ím))ðꄟbçÞÍ7P.«HË]—È3+l[à_p`² )×è6'U3r´\q­9γ¤)çÇ™à¶ÚÝÅÖ»{AHP;Ïd䈫£á$ÖyìMM#…+¤-‘y™AEòÞ% )u\éˆwá SÜ 1lÌmpǧ`§Ÿè†•¹ÐD.>Ñ c‘`ZQÔr¹êYòb^w"Ú˜‰©ÖXhqɹé<ÖR k½Mú³/yû‘é?_ác֗޳ýI·|™gåÖ"ùâ-Ö×3¶¡â®{½ñ÷øHâš~~ú©¯\{.ëß³wÕª Ϲ ˆ…» f|Z¹Ý}î[ìMãG©¥)ÏKo餔 ]†Iê°lIÝ’Þa¿]ºC‡ñö„IÓ/¥ßê~gúe›º7õo™-*ýLÿ¬ñ‡ ºaã5úËr2ϸx÷“U1Xë ™]Y,)+1—22Ûc~án‰%ÒMK¶È6“ÏÒ›Ò›î³+Œ'ëL­NA²QšÉ–_X`Kµ £'ïù «žþñ»7M4ÊÔÛo½upð6)ï:¦~þ½¿L?{yôà7»çàAžgvlúOº—(&ÝUKVª¨5¹CÙgו§íRZz²dMIONLM"Kb*#‹d5“âÙ¶øh¼Ï7§gÉIé,šÎÒùp|O€µ>ÕgZÜ`\gl3ÊÆbKEò¶d)y’)nsbj¡dÝFcéSéR:ÏSBuz†íâÃ’b1ŠÄÏèO:q¢Ì×[êù™%l°³377¹Zl[Ÿ†°ÈMC¤,Ò”Žé7ó××­¹¦ßdºk_ê¼kCZð°wiÛå‘i‡RxÏ¡U}—‰ïÔ}KºQ÷uÔƒÜ%*©ÌW’´,ñ¼ÄŽ$CFÙåô4²¥¤Z™-E²2»l2Ä쓌¹“È6f Ûä.tS¸­ ô#iŒÅ”Æo®!wbB¼©"®‚¨‚mƒËyrÛåB[Êæ´ëë#V¹ËºÏºßzÔzª#«ÅªZ+­Š5#óâ±™{Ok¸vckx9nä‡Éâ×ÊOb·JËû"sŽ‹/P_G½M^¬eN'CšXy鬵ñkî;5ÉΚÅ5ÉÒž©ø¢ì¢óìÛ¿|þžºxÓ¥—²L¥ðØô¦Ë\ÙY¯–.^ß¼èVöâ±—¾=} ìS‰ŠiA$”Jƒîoè“õNc‘-Ùæ¼#åëíE·–š Ö«”rÄ|8ñùÜ7œ›?ÌÓ—˜7›½æ[ãoOy ïp‚¡ÑéÎo*Ü‘×SxUÊUÖ+ó¾šoª-lÖ·ÄŸg^—Ô’»2Ï—_TX›P“[“Wã¬É7èãtɦ\»¹(!//ÏiÈÏs—.¶îNÛU2\zuÚå¥w¥ÝZz(ïÓ¼}ÍvýÎÒËôy“ÑŸN—âbë1>6± ŸM8òcãŒL1vg¸ÈÌ–äµäÝa¾%ïy/çésóÌŠ’ÉSúQœÚ´˜Ÿß¶ò¦pbœWPÍ{wN&NmVÉܬ)]l;ÁdbŒº˜"0SÓ‰@ ¶)'Ii)ŽOwƒuúb›|mn0µ¹kj«mü^ns”à¾I6‡¸+¶Í™näOR&kËŒfJ™-(O¹éî\guº;ÛQíHg¯¡./6æ¶|­@*pÛsª 2ùýÛmÃ…ª­ŒU–±Š2V¶ ·ÒÂ,‹Y®¨WI¦†XýŠkˆ]§L(`®‹'yÐ}‚sY\¶µÄsíä#œÑ¼ áð~§¸¸x5êÜÉëÒPl˜œb«Óî®XíÞ‰Wg§¸0äGì6ŧ4$ã¼û˜¹.ÁšPÇÁHB|óÎx|¸0Ü p:¦ˆèÅч«:§®ï±Ç/é¶t…¡Æƒ»’e¦ vÔXÓVO?|Á%¯¾ñêËÅÓ%ok÷WªÙ…왎ö÷ßûÍIVáÚ°¹8»BM³&·®Ørçè“7\»hÅJGºsAZvïy­WÞô‹0ÿ ˜½ýów—œ|øÖmIõ3Œâ›Ñoþ±~î/ÒÎF&íwDAgX1½–VÍ}™ü©/WÍzL)¤2%H«Ñ_%ÕÑÍ€Ñóù Òƒd×=OÀ7v`­tKèR6Â>øwý‹äï(%ÊsºeºŸV fZŒóˆ¿$\+¨‘H¿ÆÒ 3ŸÝ¦ì!þ‰Z|¹+ž²Ð,NŒdAedF –©Y4X!+ëÓ`ÙÙ—5Xø 6ÐØÃl¤B) Á&•nÓà8åû²ªÁñ´Ýð N ^c“›õ‡Œjp"]˜ô…YÛíMzBƒé,u,‘bY¡Á2•YVj°Bq–A ÖQ‚åb Ö¾\ƒ ´Ý²_ƒ”jù«›¨9Y§Áq’'ù< ާE©ÍþZ¼8õwl–·Z“48‘Ú|Є)ÜꉶÛ5X¡LÛ}Öa>Îö´+”nû±€õ˜×Û^Ó`…RloØÀýbûHƒá [TÀFÌ'ØS5X!»Ý!`÷¯½Vƒáߌ ŸŒ †3ÎÑ`ðÌ8 ÁðoÆ„ÿ?Õ`ø7ã ÿf> Áðoæ  ÿf}^ƒá_5Cƒá_õK ÿªÿ[ƒáߢ[ÇmUô †­Šb{ŒÇ|Jq†+´ Ø%ྗâÕ ý‹× 8‘G~±WƒÊ.°Eð¹Qƒ9Ÿo 8•Û¼ø †Í‹Ÿ°•ëSü †>Åo 8 óÖ¦Á ©%iNçø%5 ü’UÎøÌñw 8‹Ç@ÉŒ(¹[À9\Ÿ’q †>% Ø!ð¬Áÿ%çó(y[ƒ%¸”Û§Ô¬Á°OiLÏr^ JK4X™Âþ³0ô/ñcû*]¯Á|~‡bø»5˜Ï_%`á—Ò{5˜Ëým¢Ý /õ’‡ºÑ«ô´MÔ'à5ä§A´†¥¢júi0z0ï*fúA¿P“˜÷ü9UÌj¦ÒF¬ôÓð,Ns«ÑÇä-¢:¼+©\ƒªÄl#(úÑoÍèTÀ/ˆ6D»ðìÖÖ=À\)dôœ¦ç²y8ê,Ö2Ú"¸gµæR—â©R1xø ÛV‚h½àUrF.ÿˆÇnù<½6Í›ÿž°,·[x  ¢‹0Ç¥ý÷m®bÖ kù SHèÆm¤bÌqB×Íð‡Jm‚^¥B!o žë »WØÞ|NçWníAɹ-<ƒN1?û!—ëîîˆåñÅñF„V;fåú´è-^öÓvMëµb¥OXÑmÊfu+>©ñZÇ<‹*î‹UB“°òŒÝ† ‹ ,‹±ˆò Û÷ˆã17(dÍ÷{·ÆË#t㔂#×»òǘõU¡µGÈëÖ¼[áZ5xÄct»gýïÓ¢= yÐ+lÑÛÝŒ‡<šþÃBš*$Ì×jÆóÜ6|<"x÷Í‹Žë¼b²gæcÖiéÖ"5x^<½Â*>ô1ÞÝṴ́°4¨¹˜ö‹Ìíô\SîÏjFB· ß¥Iõi;å#ç0g…^`rn±Ù9»ú4ëúµøþ°Íy5(¢´_hw昘©­ÁÙ½ðµÁoޝiÚz4ûw‹ª§jY:c³!{‡˜Ñó ói>ìyÐbÄ'Ïè]šµc檽Gø*ª°a·¶ŸðZ¿À ˆÜ‹Eã  Œíd~tûf#‹gþÅšg„6<6wi¹«;ý³z ˆÑ\ô†>u"?µ¿nMÆvÁaXXºç”ØôÒNÌÏX–Çv÷ì{El«".¶ Џ ÍÖ“˜×¹î±|iU#–MA-Êæªglu@xÄC{}Lkη[¬ÎEZLz°V@dÉîÙ]ÌÈ5“¯{„%†4<‡bV úg¸D ˆº9£ÛBqö…°¶ gjøò÷B5¿Â.Õi}"—ú òŠQ¶‰ˆy|á,æÿ] #"bb¸ÞyRÖ¢Òo¹߂¶ ‘Çáu˜å'@ žç‹ùfÌlÄ“Çæ98 šñ^#f7áXœh›D4Ïkêì|,Ob h6Ÿ‹Ñî›óÌLEžñóv±ºøÃ³2»gk[,žçΣùÕ2V9æêh,}ZÍ j9½CpñÎÖDž­š4žÝ»´Zº}ö4ŠÉ }†efjçÈluòjçé!Q?BZ>÷jñx&{Íd!·˜w—¹,>]^vòÜ.*cLëíšg5ÎgòP‘ØÕ©–ŠUäÓ£âtÉ3µW1¸‹z µ_³vP«!ÿH6·þfÌÌÕÙݧù«Ý2æß¹bÕÛ#4 Ëú´›Î?ãsU‹ÅÁyµmF.¯$=ÂÒ¾y§Èм»rÙ,öм¸;»?ÛR\»Á&®ü§ðþ¿Hxsþ=t¦>Îaú»¡ ‹sþ}³û‰é5?º´Š³,«Z|ÌUÞScè³v4«ÅÞO÷ÜÌÝ‹Ÿ9^í†ÛMì¾×-¼:ø) }ÊÞsœƒâ¶:,ný±sh—¸ÐüÛÕíý~CÚýϧ}æ9Ó-ît?Ƭ5wcíeëÞIÛ9+Ÿ.áÔóþT¼Ú-6„³g†ÿ|ÒH±OŸÃWS->©x.¨Ÿ«Ñ*‰;²™Z5ÌJ¬.ÂJµ×Òb4Nµ„jðY€7Îý_;ëþû'ãÌZŧ¬7{nÚðözº½êwÔM}^uДºÊ?ðyB>ÿ èï^¨6yBžÿ©‚3S7úû‡ùLP]=ºEuu•åxT-TûûÕ ¾}¡ ºÁôíòö4ù<ý+ýý=3<—‰•O-Ûâ rÖU —V©Åk|ÝCþ ¿7T2‡2CÌ– ^›|PÝ4äéñx†.Rý½Ÿ©¹:äÝá †¼CÞÕ7¨†€ºy£Úæ ©…ê¦5êºÞÞ…ªg°Gõö½#}@[8Ë {öïòúvÏŸòªMCžßàNëƒyËÕ þí`½Ö×Ýçï÷Ë8÷!_·Ï£nô ö`#0ÕÒªUþÁw€ë6´[ z`EÊ׫öxƒ¾ƒejlïÝÀòø°8àòª}ÞA¨¯v÷y†<ÝØ¾î öáT±¶›ïß³°Ao·7ôCßü‡»ûTŸÆŠo~xÐ«ŽøB} ~§æ0ÔA‘n583ñ†|^`wÚ½P–öïòyàïÐ×À'è†Ïƒ\÷£wH¨Ð;ÜßPè ñ~ñ ö Cb«ÁÐî~ï|Kðh r)Þ¡ß Àò_¶èß= A1öø<;ü|}¤6Wû¼ýXįîðíò öµæP¼°Ý ¯èž@À 3v{!$fn7–ê½›ðöïV±· b§Ÿóðõ ó†´D jòºA±Ý«RšÞÃ\Ùánnµ×-ƒ#6 ñ8ÁÖ‡¼ð{¡7a2žxvxöøÁÚê.‹ ä=¾` ß³›‹àÔƒÞ‘`À€j@éŠ!_3æè!ÿ€_p[Ø –UTŒŒŒ,Ðva· ¢/4Ð_1âÿ¶ªb ¸ÍÃ7¾Oþ“#Þ~ÌzÉÚu›V·¬^Õ¸iõºµêºõüÕ«š×nlVÏÙÐܼ¦yí&sœ9nSÌ:c5nbî(Š„„EÏbb3<ùž·ïVwû‡9e76ØYäQ,,"Fá_¤ß Ð=;†¼^‰ Õõyþí<@:E#<œ¼pœ—[zÈÛ‚Ÿ{aÇ9½¸ ý;¼E¸x–®Aôn5Ôô#£æm¨(8£yÖ³Ä<ÚÔ]žþaÏvD˜'ˆ™O½PÝ<(bv÷Ì.°'­r!¼=j0àíö¡èœ¾sVÑÆi===>ˆÊ!Q•Ëøô°­ÈîO)Õïðñ AˆÀñ]Œ©ˆG1éAAÞÞï öq9à3÷úÃUÝj,x5 *HØcuïÜæxõÚ9ì 1¨{ÝÞ¡AmCšÞ9ØçîïAíòyGbåê´ísgn¶—Nýš[ÕfZ´/=æ¯hsòÕòSòä§ñŸ¿~ÊüÙŸ Îþlpögƒ³?œýÙàìÏg68û³ÁÙŸ Îþlpögƒ³?œýÙàìÏg6øøgƒÙï|ô¾Yˆ­œ>­~13| îé«çˆª<kf®…ÞÆø"úøocîÔoN]›¡™¹_ùÏÈqnu‹€æãÄfΣ]âûŽS×O]iÓNßañÙÏ/²r>ö™Öç[ÊÿmèWÊ e¹²JY¢,UÜÊç”V¥n>ö×7ñ¹Ù–Óö›iå#¶8ó׿f[µ»éEŸÒxÞ+®´ÿ_ž¢Eôk:Ãë)ù.JbüMÉwLX¬UîIùΉ¤Ô*w£E¾•ÚÐ$ Ëkh M"¿|#íE“€Þ)_Tu˜q‰Uà_K*Ú>4™ÆðdbìFãø×N¤¦sö_$% º/E*«cÀ„Å^ÕÖh•/&&{åAr’C¾ýôÝèsÐo—{P'¸žî‰$KÕ>Èkzƒœ†"äåtªBß$gR–@Ž$Æä GŠK«ãäU²] $ÉfT#‡l” ‘*‡zDvCS·|õ„)žëwuÄ’Võ”|…l +°öËæHzJŽ£ 4¾“M&sÕþÆy¶¹ fqÈüÕ? žny0F×,gS:Ö.’s( }‹¼ ’æ˜:"ß,Ðnâ\ oEĸ˜wæÄª©F“Ìÿ5@X¾¿AHÛ?Q¸´Š åbªD“`Ô½€ø¿Ý·È£€Fá¦Q¸f®…£¤‡ß¯ÁÊ5À©÷P@¡ýh+`™ ¿¸ê°œ!Ûa ËØŽa6s”È5³GRRš}"!±ªá)9HëÐ$(š°Ù«üGäR±•² {'DL 0-æ ¦s<%gË „%r„ÂŒ%ÉbÒO¤£Ü:ÒKÒ/¹ù´ýOµþ­ÿ÷X’ŽN@Š{Rúï5fKo€Ù6é÷t$‘žÅAã^•&¹Òo¤ÃÔ€þŒ{ÐF¿ý‘Ü9&¥É tÐýîˆ9oVz6âªÐGز4 %½ª±@ú¾ô eƒÅ¯Ñç£Fš¢<ôO£·£Ÿ’Bô#ôJ5´ý!­ÿô$iéqé1œ˜i"’ÈUG ¼{$¢çÝ÷"µU8ž”¾'=D™@ýn¤0³' óIGÀI÷I¡HŽ#¥1Nº—µ³÷4F¯ðžR¤oFj9“ý‘'UÇai¿´ßm¯u¸ËÝ÷Ë••å•÷ËjZ®Öª÷«éÒÁxHXéZÚøHŽ‚ä(HŽ ’£ 9 ’£ 9*HŽ‚ä(HŽj[ cH›KÐö¢íCã´S íh§í”¯a4NEaP„EaP„AaP„Ac Å(ÆÅ(Æ@1Š1A1&wSüëAù/»Fº”µq¸JûX‰è÷Ò»¢¿„^ýWh\ô_¦ûEÿ%ºLô{¨Vô#T(zð}ˆFqÔ&5¦£¬CÛ†æG;€öÚÓh½ˆöZTªqç)I†u††G Otޤ$ý:ýý#ú§õºGôÇô’Ú˜%™EEi¡¯‰ç^<ßCÃ!‚gƒ€¤jÈ­F­Á»Zªv'Wß+e/–²§KÙ#¥ìk¥¬Ñ$ÃQépÏ— 8kw'®p¼‚V[X´•é†ÇÞµ9"…K“ìÉXWâv¡mí~´ËÐjѪÐÊÑ Ðb®øíî<å“hEh¹h*Aéé¸Û¤$݇%3»â93™¸œ¢bЉU¢›Œ­C÷x¤h»£ÑÄ£"~ bÂs¡$âxËßuGGÐŒ8ªÑuFŠ¢» Rô‚£ÑÌ6“Cᤛ´~#öÍû Ç ­8Jй"E…»‚ °ZÂÚéuôU~L’3âXŽ./â¨ãØF*âŽgz*êéÐx/O@¡÷³v…¹ãÇ7;ÞùŸaX„ÇoÔIÝ‹“l‹;Îñdù7€Üèˆ4Æq|œãZæý£Žû ®qÜ ^¬à1ÇŽ…ŽÊ'˜¾z_#DD—©“ÒCîTÇ>G¥#Tþº#è8Ïáqlpt`>â¸Ðñ$W“:X»ôÐcŽ60\]DçL [»nG‘£N}’Û—–ÆøÖ–?É-@U1ée°oiÁ$ñ͵“,Ù]j8aØo¸À°Ò°Üà4är VcŠÑbL4&ãŒF£Þ¨%#­üC»ø?®´ê-¼Ó+ü©Ø"ñ§$þí%IÌ(ÑyN•[¥Ö+Ykxª›Z·«á7:'YÜú­as% §´R릕᥮ÖICtC¸ÖÕ6´]Ð>ÎØ ˜ KWO2ÚÔ>É¢|êŠ,þ·ØÆ]q}Öab,ãŠë;:Èž¾«ÁÞ²"¹®¥é .íéš{Ùçƒ9áÛZ7¶‡ÌéWq šÓѾ”ÿ¥¶ÃR’dnn:,%ò®£ý°’š7ðy%ÐÔ´×¢9hTÄ; W’ÊÑPOVr4ø(†Wràåòxqf*x…qf§0Ž7þŠÚÜ4®ª§€èóJÍÃAÄ€¶i¼°P`9UÖαX»SŠ•FPÊŸÛ‚‘ƒ aáŠ9” ¥f¥FÈ’ÙŽ#†c-žÁ±Çõ?|yWºØÄ¢áKžåü®ËÙìEë _»«ÏÞ·]UÇ/Öþ*^a×öî>Þ{¼áa§·)|‰³I_ôì–ŸåË‹œMãôló¦öñgÝÞ¦È"÷¢f§§©c¢¡¾½ñY×ÌÊj¯?³zάËjh<Ãr#_nಹ¬F.«ÁÝ d5ûxÜ·µieǪ cý„‡îÊÊíX™n ¬à}xy®ý’¬'b)ÞÕNp® ›ÑøRycy#_Bžñ¥Dþµ%û%Ës³ž`µ% ¦“+iÆ´Ä‘ZÃ5ë[ù·¶óP »=göY¿Ä²š}MøãhxÏǤà_¡3½†‡‡ƒü1ìÂgäÖpéÆÖð’õÐÄ`€¨®¦Ì-œ™“e17n25OF§°è‚,ÄÅqÈÅø_rÇáS—AÓ$þQ!4‘™Så 'ø^4|Ž“F"âó²42‘WÀ?¿„&*jb=>Ÿò>’™[ÅÿšA-Hy_ëÝÉåöì/ß_;V0V>V«çŠæ~L:îçGi¤â~™B®àŒ!†:(öŽ ïÞHvŽ<Æ—«ÃdÂ^§›Í}Ö°AkP°Í8$6¤rlÑ5> endobj 216 0 obj <> stream xœ]‘ËNÄ †÷<Ëq1é}F“¦ÉXmÒ…—X}€N+‰¥„ÒEß^ÎaÔÄä;—?QÝ>´Z¹èÕ.¢ÇG¥¥…uÙ¬>À¤4KR.•p׈v1÷†E^Ûí«ƒ¹ÕãR–,zóµÕÙ.rà†E/V‚Uz⇺óq·ó3hÇcVU\ÂèÏyêÍs?CDªc+}Y¹ýè% ﻞRœ„QÄ"a5½Ûë XÇ/›¦b å¿šI†Q|öÖ·&¾5Ž‹¼òœŸä,pŠœ®‘‹Àò‰8‘Ï!ß ß>!ßçò%ä‘ï‰Ïto8£¯“áèèí%\lÖz;èÈt@i࿟dƒ2Zߟ‡n endstream endobj 217 0 obj <> endobj 218 0 obj <> stream xœí|{\\Õ¹è·ÖÞó~3Ù“!„0¼B‚a òŽƒa2 0˜BHªÆg_Q±µ>¢‰Q«ÕÉSm[ßÖ¶ž^[{ªí‰Ñ¶Fm«¶Õ÷[ko0Úã9÷þs7³Ýkk­o­õ½×·öÆ"ýA0ÂÀèö÷®]»|)¼ @’[bÒé¬ïGøUc{oG÷óKNžÐc}AG×`ûM÷½²ÀØ àx¾3èok{ëM+ÀŒ¹8Gy'6\7z½ëØÙݱ­™Æþ‹±þoXoë ü³WL¯Åúß±^ÖíßÚ{Jý “u©Çßܵ÷±g±~@Ñ ½áhl7q¬³±þÞH°7iÃÝX/PoÇ6‚ûT³:D•Z£Õé F“ÙbMJN±¥¦ÙðÿËOuœüÞéb ãcïáý>{ކÆ>d}£á±ßÓß#òå–Oà ¸Á~¼€•ˆÐƒp^ÏÀa€[ÉaˆÂ6؇ðSä´Ö£%Ù¡~ ÅD{ƒK‰ Ô /Ák°n»…¤€œP8&¼(ü¯±ÉbÒ2 VÁQáCx“ˆô<•C+èàyx^€t'A*TÀ2h„ HÓCHësðÉUÕŒ½ nðÁj\yn†½ð2¹…i?Ý'¼¨Z;v×®‚3i!C±¢0w!=I!Ïw‡x÷è_Fÿ1¶9Ÿ e°ê ¹y^_Á»ðw²–´S/]#ôŠ*±c,mì0Òœ %p>^ °Zá[p9Jì8@÷ 7Ž>;ú7´F¯¤ºæ!ÿëQV¯Á¯Iq’d&YJV“ÙC¾ ZI¯ ûèß•‹W¹°W8"ü‡ð¶ðgq©¸U<­6ŒåŽÕuŽm»oìÄØïP¦.È… pÎ p1ø‘«¸®‚ëP[wãuÜÂQ†cp~oÃïà/ð7b&%d>©"í¤‹l%“#äIòSòsÚBýôúšàÖãÚûDkÅbTüù(ŒÎ½qôÀèOÆÌcÇ^û`l¥éB™Ï@‰@qåkàVø®ø(<q¼ŽÃ[ðøJN‡—•؈d“Y¤€‘r²‚¬$ëI‰‘Ar%¹™ì"ß!w“89„ÔüOà(é›Ä+>DöÀÓèI7ÒÍt«h!Šˆ#$&þ\è)ØO?dë¨mâC¸Ú oÝdBÐ ÷R¼B÷¡úàGp¯ZGw¡ÞoºæeL7ô#øzG©†KÐOFÈ^UŒÞO¶ ïS#¬##ôm2_ƒvµ® ‡h£ð 9…ž÷4ÚK=餕dŒÀiò9M×B½ öŠª7È/iTu¢ýøŽ°Lh§)ô©³Ñp=á5¸@x6ÛÐû_£^XFÃpðò8L¾%vHåV*’«ÐƒCÂRÑ‹à°p~H~I¼ð„¸•ôÛÇêFZàSõ~ñqဪ\œ6öòèoȃäõ±ãôÏP1ö²°v´ƒÜ-:Ñ/¿…ÞA àQ7FŒý EhúãÍh¯©Ûtèå‹1r]“¿ Ç\…R*'¹ÐH§ÃfºP#©qÇÑÌðù|Õ Î«š?¯rnÅœ²Ò’ÙÅE…ùÞ¼Y¹3sfd{¦»%WVæ´Œt§Ãž–jKIN²ZÌ&£A¯ÓjÔ*T"ü:ÏâV)žÓs‡Uƒîƒéé¾ccï@z4´¦ÉãŽWgxšýµÓØ`hÕà!§OrNí)È?`M’¥yÀlQ£i2Lôqˆ£3¨~UBœ„QäY†f—RÒäAFæ²"8†s ÍGÅÛP ¡¸®¦uÈ:µ³ñqÕ «GúPíž3Lmñ+-êÖOÌ8†ýãpÜëçå1»ÐÔ "‘Ƽ>§ Ë0-÷ôZ%| ø`EkžW„2w»™VoöÁ&¬Äw¬l’ëlÊ8¾"osœ¶²ž“ã=©kYÏŽñžÄðVšïaž¦Æµ9‰ÿ,Ö´”ºÎyq’ö/ºƒrýjOýÊõMRÝP«"Ûú5SjrÿÜDŸÅSjš„ ª@4Cà½h‰ȬÒdŒ‹3ð?5·ä¶aM‘·iqÜÚºT.›õn÷74<ö1ÅÃ2ãó¼Sëó§Ô§g`1‡Ö¯Y?4¤ŸÒ·ãÎÐÐb´x¨uÈ?<¶c“G²z†ŽÑéƒC½u­ã;~CF|ñÍÈD'™WÀ6I&o^¸hàü”|’x’ ðÌ 6c®«‡»})µ¤–®!k¨ˆgÅÓV5<öyU —tz½[¥µ©TZ $‹ªl”ªT½µ”ª­n»Ö§ÿ±ö8±ã´÷UÙž2H·#^gºuÄñIú|žqœržqà鬮²â•\¹SUè½ÔúìÎB{xwZÍÏ>Ë‹ÙŤÅMJSÒì夔PÇèé|¯È¼a>5¼üÏߨŽÿs÷‡·=Ý#œü|1Jã’±÷Å…âÌ£§ÃÉcà{ǧ³&•¹$,Ò†±ÖdN*Ó©s§ßà¸Á):œKÒ©Ž8ŸsbV”oHß™.Ã…Œt’I’%²­èÄ0Q[€HV‹éùI»’÷$ÓädQr5v—hH¦·ù2l’6Ç“)Y|v© ,VK¯åm‹hY³Àám´~Öâm8ƒj9ÕgªÏ$Wµ0=´ô"IÉ••ÉöÊ—¼ŒßH_‹×ë%vµè™ž“3§,9»´·M[jK+-)'îò9e9žéjaEf\Nî0Ýí¾{º°EØæÜm¸Ã($´8 {áÓͰj¸F¸Á±Ï°ß$. ׄEbÏN[•Ù„ÌJw¥hT®Y†LÉg%ÖÉgæ¦#M"$k˜Ú|Ö—Ø?ÖJ0Ã:ƒÎø8I,){V¤YÓè;i$í™ÂuÏÈvØçmø¤eäT ‚‘3§¬Ÿô7ÈSÖ‘SIöJ’ÄŒqv1ôµpKäeJ…-Yßœ²™9Ù3™]¢èÒPvLx©6{»RmjµgúÌœµGНX·uköŒÑßåÖÔ¾xøÅŸ‰Äýwd]úzù:ÿ ;‡¯¸‚l64ö,n]X”—·Ý9+¼ô²ÃÇî4¶ö®+)ÉI/__¶z`ù·/ºè"ôëó0@fcœÂØHŠ|ú‡„ç…÷„OQǘ¼ hnÙrÝÝë:Á¥+Òݧ{BwB7¦Sc؉€¶ DÈ¥G$6Ö@cµJ­É™½j4=¢ÎJ³VQd:pÂâë"}K™Ø¯E#íëŒ[h£õcoŸí -ôˆèk(¬æÃtÕ9Õ¢oÁ ^;TŸ#·šº±Õ–‹E²GîÊ,–ŸÓŠä§]AÕÙjæL^;ètËv=þãöÝâÝÖ`åŽÙ´«X9nÝ^Œ#UU•ÆZUÅl¼ÏÛG*J5$¥T uÞÃÞÑÚßù­xæµ×¾Hs¾ø5ŠÚЦW¡M›ÑS·ƒ$4ÑÕh¢ÌpgêHëôÞéT­ÊHµe Ͷõ©ë²Ö¹Â©­.uŠÄ¬[lÛÓ·eTÓ\¢&Ùe0X$ð•AŽÛ)ƪéÅSbtzNP6<ÿ0 rsCójécnˆÆ•b­(ç1ŽòWÁÂÜZ!‡93m{òÎOOþéßF?ºó[¯l>²+ò­ÈÖÌÑPÍÖ–ÓÅÚuôBc;ÔnMú^Ò íSI¯j_J2 iv*ªj·³G|ÖÊ^BX¤3=&«ÍŠ +1™¬)ö„a2êKÂ=Pk´›L '`5YuÃäɃÆ&+>|¦j±š–›6šÂ&Ñô½÷&JŽ´7‘arÜ—"GÂ×9ÀnR¬ ¥ÔÒpj]÷†‘S^¶GÛ*«¼ÕUà´žrðx†‚3³MSUè@·$Ýxxƒ–ñðƶÁ“¢ì sûfn>î¿âöôGnJ]VwïJ;ÄœcÝm7öÏ¿|äRzÿ¦¢9‹^üëh2Jo+JïrÕIpÞ'-ÓBé‚yxìU_Z‡‘›ˆ%;}Æ´J¡ÜR™ìË\”ÕL» )íé­­Ó™›²¶ÓíÂnÏxP=,Ø]df$YU‚zZºZ]&ɦ’\ÃŽºÁ(}æ±Ga'‘|pN×W;Ò=×?ÎmGÞ:?9c=ͳ›ê3¦X J®dÌz½È.3v)|Îä¼3æÑÙÕ·fë´À¾?Þ\V?Ý~KgÇ]îé_½Õp=£ªj§¹Ð«b.aÆD’Ü8H© dNå ÕTÉ«*ÈîgŸ¶¿©÷™Þ‚Gž=T¸{ô³øþ¿άr{où–]/¾%Ìüç¾ßŒŽ}·çGÛžÆÜWÑdäU}¾*ìSÑ^Q‰˜ªr)!µ¢€{Œ "K‰†Š· dÍÕîB Õ€S}ÑÕLu§¬§x ·ŽTy­§0fY š´½rœoReÂÆûH —@DcÙOæ„„C$ùÓOG?D¹¼0öžÚ­úÆïWAÆï$ôË%.’•‡ÏTæ¤fd†¤²i,Yˆ€Á–a³M›ŸºØª2=]pAf®äre Ô&Ô••R™|›YÊ7î•DV`2 Ôº”¼dª£VŒz |öééyÅzR¤'ú2Á‹­‚[_¶£—•åaÈÐIÒˆêi8cýŒÕÞ ‰$9á\ŸÒîgSf¼RqfæÎ^Rá0–fæ$Yy¬ä"庬H–xè•—޾¼{ôä½×ü~u÷߯Î<éúñwîýàÁ_Ÿ<ñ›EtÑþ‘G/h}f/¢%~Ú÷ƒo§Þyÿ÷G÷þö?~™Ï¬wî[Čˣ¾~§Ö©»ÃpTsTÿ^ê»N«Ó]m¼Öq‡æý£Â#jíL}…c‹f‹>fìw¨óI‘µ2iY’˜êtàv‘æ´¥áîp9¦ZiN¶]àI[ŒÛ…–°s“Ö™¦ÓÚÕ¹58zUznšS«²Ú›ÒØF`q4U;‰Õ¹Ü¹ÑvŠÎazé¡ Ì®Ù2Í(«ÈëªwT«„"UµŠªœv•]•®Ÿû —7n,an8ƒáE޾c  Xz {†¼5°-ƒûü¤ef.-,lÌÀÁœ"e’·pñÎ/n¿súŽ#7'/[rÁ­!wZfë‘ß>tòÍ›ÚköÒàHóÚ¢ªšó/[W1D^Á¤‚BÊô%ô ¸àác‰é/žª’™õmd'0Am3BÈ8l:jÖ¤™m™³4žÔ%æ Íj›·>?u¾]¯šGJôU©õd‘þüTµÃb1 62\:Ŭ·¡(M¯š›Œ¯Z--aËRûÅžïÿ¯!B|ôŃ$zq÷ž‹¶65ÝO®Jyá™w^zœ¬xâ™ûŒÁÈÐè{W^wݵJ^>Ÿe ÄæX"’ q]&ª#3´ËÈbí…ÂNíO’4šmÚmI$=… ºZ4ˆfj3ØÐíJŽñ×rr®dåì|gʽN‡íM&Ý-xf¶êŠ0¿ÜôS“8‘Ž›0Êú Òux t8š@—ÌOÅìP=ž•Ã:§Ž'õÉ9­ò1©?rÖ¹ -÷ô)=Ö¯|#Álc<{gF¢1ËG6üEð`TŠIËÙÉ;ËÞIÉ‘þà㮾MºêÈÎÌ¥µ›ó6ªŽ¼¶ií ‘¹»Gn¢Wݘ]¶¨ãÐ £sQÎå€2ùÙyÔ·¶UE–«v¨^W ZâR©îS=¡:¡Si¨ (²dÒäW9‚Ð3.”d8?º^Çpæ3`\é¹C¬Û˜ð<GäC1øÉÊ;<;óšyZÖð0 ì0,û[…üÄC0Œ‚‚y«S~õÃNÓìùäBÖéIžz2N¿ä€ÞqÿãÙS%JÊQx£?Qço ŸÂ¼©ó&+îR»}é3i®¦\m£ S$;+¦±"…½¾1X˲˜faƒ:E7--%cš˜K–:.LÁÜHR Lºô<5#6{nfLçOŸ=Í^¶CMÔ+ÝIyÅò›2‰¥Jì˜×'oNÈÅäž³…±6Å n ’ð£f)|6UÞÁ°žz¦ÃSä9RC’Ió… ŸïÛýp|ôí;žÙüFß«÷·|zøôèÚN®#ïŽ~wô_>yý åK&{®xsÛæľó-"ްxózâ f@z¸ÇWŸã ãõšët;Œ’ýú'‰A­RéÓÄ™ú¹ BÇ*ÕªlZ­ 3--%`Ã#²ü2X­G¿k­UK1wIÅÃ1;!LnÁð3f8Nø&Ä^>|Ú2ñ˜)K;É!P}-hM‡µúd{ñ6»…Äk`²âñøE–´²•$pbd˜3òdë¯ún£—cöAà>uò“Žëç¼ë$–ioO£³œKœ)× ; ׯL¹Æ±#ýNÝ¿ÛÞÓ½¯?Å<¿–q³üø¤¯Umµ˜ÍI&Ì6Ì©iv»ÍáLO·³o•j=ûZIÕêt0§ØmÉIIƒ= ×3ÎSÌ›-]H}ÊqÚ6|2}šÝžžÜ”tœm;tÓåarìm"éÃX·°·wäŸÎ‚NæÌ¸éF~.èkø¬ï´·åQçgŽgc]°ö´£ÁúÙ‡(«3(ª3²ÄÎp±ÜžÙFÍÓå¥ù³ïϧ¼IG›êƒ&G&H–Üq²lGÈ™©Öb?^œBŬ¼Â‘çzãy±ýŽ‚NùwI|œfÁh#Ô$ܸ“Oþ9Õˆ¤Z£b.¡ßƒZ Îä8ëmx×ÒJ´ã(lÅç|Þªzž';‰¨®„°¾ï.¼×‹ÿ c86ÊÆàørì ë >Z̃È<òsz³P%<&Öãõ3ñªÕ/Ô™ê§5íšµ{t*ÝV}¾þ˜á<ÃÆçÁ‰q–ÊÿÜãI,D`–z;F]ÖºQÜìËûòRà<ëyM࣌D«Àt±HÌa÷Ç ¬BøÛ ¬†i$®Àx–¼ªÀZLñv)°†èQÖ‹?| l€MZªÀFh×¶)°I}Xû²›aƒå²„v.·üZQÖf¦ ¶^¬À”[ÛX£õ.V!¼_Õ˜rT` lÂÓ‰ k!%iºë .iŽë©?i›`vÊ[‰ÅVj3*°IXo«V`3Ú¿ƒ”à!i3Û_P`ÒíÿÎaoÿHYû‡ÕLþ»£Ì1±`°†·ÏW`Ö¾„ÃZÞ¾QYûfë˜~W)0ê×y…#¾óFý:ïT`›.(0ê7=CQ¿é¥ ŒúM_®À¨ßŒFýfT*0ê7ãÇ Œú•®Q`Ô¯ôž£~Ý Œúeû<Âz&“ÜF™äʼ°Ý–{‹ åʲ52 Ï=¦À"LË}‰Ãfl׿¾«À"Ž=Ãa+›Q`œ–…Ã)¼}–³ö Û˜¬f­T`”Ï,™¶TŽß¯À _–so¿GYû£vòyžS`6ÏÏ8œÁñÿ À ÿoÎdøyI Œøy™vñö9 ÌÚr8›Í“׬À8O^‡óxû ÌÚoáp‹y(°8k¹ü0Ã’ܯ¼Ÿ)0k›ÁFÿ Œí^ ‡¹^¼nF½xgÄ^B;ø!€O Á{ tr¸ÂЃwLÁ’0ú†!‚0+ýØâ¶táøB„jy»ÿÿp¦¢e¬Æž.èOàD±m>åõfC%^ÅP @%¼u!ŽèÂç*Ó4Äø¨U8_ïlÁ² ±"ØïGÌeœæ.¬΢uÞ${½6ed¸‰GF™êMŠfz”™¿JC39WS%%Gä³­âì•Çc‹b~ž«úqÕ.EÚQ%†|ÝÚLúk±e"Ξ¥‹ ’eLιäèíçõrɆ”Lç›è\Rl±gRl_—E’6.éФ]$2)—ÎO`G&ÙíÄÞý¯%ŨëæóÛUxÊ|\ÿ›¹6'ç¡ãñq3Œ¸r†ÚÏ%ÎæïLð#Ó5Ùº»•ˆ*Ë_öª^Å>&"ïTúWMØÇ2ÎûÙšϽ؞T24™9ß p­ö|I‘/É{bæ(ÏVYFÒ¦ìC[xn4“³«ÿZûãóE”ü/¤œ‰¾*‹;[²´&2ÖŸól?טÿK²nÿoQ;!å³W˜ºßO¥(¨d±1Ü{Æg`ç“… Ÿr1‡/ƒ <‡IXÎÆZž$Ëð.ööd-Ô+˜ÅØ;{ʸJñf£ÊažØÍfÿïíuÿóq¼¯èKÒKì‡k{ƒíþ@PzDZÓ”Â=á6I5áHo8â…Â=RoW PªõÇüÿR›LZîêg-QiYŽ›]YY\€EI¡´°«KZêèŒE¥UÁh0²%ض0òw-‹ù»BñYçñ6ÄèèïòG$¹sÞº`$Ê–))œ["å6„‘p4Ü›%#ËH“qx{2ó^{XZñ·»ý‘ÍR¸ý_r"E‚¡h, ¶I¡)†¨kWK+ü1)GZÓ -oo/”ü=mR°+èD´ÂÄL(ƒpGÄßÛ98¹)(ÕFü¡ž66„â.V…7áÔ¡@g¸ËÍg³GB_ZíïïiCVPtsKjÂ=±`7£-2(Eý(U\¨]j FC=ù’̱ü!ììG‚Rg·¿É—þˆ?€l`%ˆ"þ ûÿ!TC/2 £Ñ0.ÇòãüýN)¤LŘïï J¡X'Cw8ÜÆF3ÉŽ!!jt¼-6쉅‚ˆ@ ?2X(qI‡·#~Ô,ôǺ±‹ ô£ DÙbL—Á'¡½¿« AN+.߯EB=mýÑg5ì N–³Þ([%éõpŒHx3NëGúý¸¬À¶¿#Ìú:QæRg°«%–:B[‚»_êBqHÝA”]O(€èþÞÞ Š±'ÄEdq‡˜°¤àVd¦;Ø5(!oQ´.6Gw¨‹‹7¦8VTY/€#6¥þ(š—f°¯ŸÛ`ò—ÚÃÈ2ΈLÅbÌNõHõCÓ@5EQdÜ<±Úíïðo õàÔÁX _o E{»üƒl 6º'8íõ÷"iˆÒ†$ÆBQ61Cï„»Ã|¶ÂÎX¬w^QÑÀÀ@a·b°…pwQg¬»«¨;ÆþF¼¨;ºÑÏ/dßpÀ@° [ƒ|Hãò5Ë/«Y¸fÙòFiùbé‚e5u«ë¤…KVÕÕ5Ô5®1éMú5(Öq©13 ¡ÈAŒKô+\Œ3à ™ñ¼iP ÷³‘fm(gîG²Y¢qpEý¢ûõ º¿# 2K,”šqX§Í ¼‰¹ŽŒM!†Yç3§ *.È$ b¨çv”ã]L…ᎠGá*NŒCÕ õnêáÔHf=jC3£ãD¡!'D‘̬MÚâïê÷oB óGÑB&.”Ööp›çyR"š·_Šö! :gs.¡{¸µ±±þ¶¶³ ´ÊÒù¬9Âe˽ûKDu…ºCŒ!\„ã „#›£²‘r{äá ¨ý›ºBÑN¶Î%‹» éGUõJ²ñ*šº—Dzö æXôêëFù2÷ÁHÂAD¡›#G;Ãý]mèC[BÁ9\Å>ÃCM1´M„¸H¬Ø„Žc~…êö¯ž–“œ ø½2®ãÍckW/ÄM wnYÅ,©böÜ‚â²âbnm=6Ïž]V†eEi…TQ>§rN¥Iÿ5^÷/‘ÕŠò¸âÁ¶_y]Ì “_»LíÙÌkÛàÌYxS{6Ou6–Ü^ÿ58“Ú…=ÂSÂcÂ!á˜p`2ΔösŸ Î}‚8÷ âÜ'ˆsŸ Î}‚8÷ âÜ'ˆsŸ Î}‚8÷ âÜ'ˆsŸ Î}‚8÷ âÿáOßø­Ää7 a®ùþ¯{£èŸ8yÊVýÕ§X¹¯–¬ÄZl Îx[râçžJãäž ŠÙŽóÕ¼°žoðV$rkþ*,¹‡ññ;Eºá³8LôˆébèŠsÅɧsiJ{ý×¾ù™Úó è'Å ùnžŒ3¥}„‰ŸG†ž/Ñ>µ§‡Ç—ü‘C“ñ¦ö|S[ú†2ûoÍ÷MíŒý»ø±Oðž »á+~ “árºžÀûÞá-B1–ËñÞˆ·>ºÿà-¥¾a|läC+Kv°ç %¼î[*?õ&ù©›'?‹KÞ¾Cu[Y}ß¡’yr=o¶\ÏžQrùB+Ýf¥Ë"¼«ñ¾oßw(5S¦³±a{¥g”XNнˆ±Çíå$îõé±;y¹z¹†~´°‚ü‰ýI //çåF^V󲈗¥÷lu^žàå¼,âe5/—ó2ÌKŽOÎàõ^Âëä¾dÈ'à"Ö|bu_>ñ¹È1¢#†ƒe®[‡‰ÁWQæ*”j\%x—JK\ùøtá½=o©«ow^­«‚û{$BA v;j&9Ië&=9ºÓ4²ÓºaR}0ï×B™ÇE¶\9Þwá-Ì‹¸~ˆ£%^è£]_ “u]Ÿ»†µä ë®aJ|)®¿»N¹þæzÊõ©ë|×KyºŽ!Ö]]îa±öä ÓG}× ®UHÜ)×VW—«Gâ]]n|ø ®ZŸ·ÞÕ$ ³U%¾ÊNsÔU‡µyÄuù\×»J øÐ6ô¨k¶+â*tñåòååfÉ´å²ÇQ×L\l:_¥ÎµÖ¤3é*výF³ëaÍ®ýš]—iv-Ô욯ÙU®Ù5G³«X³«H³Ë«Ù5C³+ScÓ&k­Z³Ö¨ÕkµZµVÔR-hmìß¼ì?lj+{¨EVжRVRþ·!@‰–ÂùOêiýêE¤>~2õ›¤øg«=ÃD¿r}\åYDâÉõP¿f‘#>×[?¬[¯ðÖÇ5+.j:@ÈÍÍØ§× XÓ4Lœ¬éš öÿ*<†Zu^sS{Ž]sSs3¤m©vT'/Hª\\ûE«RNúCAÇÔ¿¬_1x µÜtHã:OƒÕÕXÝŪ»XÕ‘ß]¿º)þ½Ìæx Æ2›ëã·¯–64#“Çêj‘ï³GsÓ1!Ÿ<^·Šµ ùµÍÍõ¨އfÿ8Ã{œ=OûK¨fxP­ý%ljŒçáxhv2^šŽçI“¦àe‘ï3¼<ö@<û;Åñ²ìïLÂ;pÜSW{ÀãŸë8Ç9.ϯâ(.¢¸]]ÅÅQ\„r”Å( Ja¥¯$ —Œc’ÆqLl%ï7úy½u!f++šhaQsÍù™fí]Àõnr.x0ã8ü\ø¼Íq½gQÜàYÕÕþÿšPãjlÒàͰç»—e<̱ØlRº ,d]h½¬ËÌþ·šJ—ã²ùîŒãäa¥ËŠÍI¸Æ$:c±~ü£.T›ø/ªüú•g êãy«ëãÕ+×7Ðhêâ¾ÖÚfl+o3ê†ÇNÊ…ØXÅ!˜hÓéD”ÆÑåùd¹‹T ÍÞ(’‚ M–`, ÿqÀör endstream endobj 219 0 obj 11699 endobj 220 0 obj <> endobj 221 0 obj <> stream xœ]’Moƒ0 †ïüŠ»C¡|´Bêh‘8ìCcû41ÒQ þýb»Û¤@í×É+;aÕœ3,á«›T ‹è£ÌÓÍ)¸&±ÐƒZîýÕØÙ ô½í:/06¦ŸŠ"ß|m^Ü*6G=]à!_œ7˜«Ø|T­Û›µ_0‚YD”¥ÐÐûsž:ûÜR׶Ѿ<,ëÖ·ü ÞW "¦X²5i˜m§Àuæ AE¥(êº Àèµ8á–K¯>;ç¥ÒK£(ÍJÏ1q–"ïˆó9aÞ!§¬9 gÌ5rÎ|FÞÇòxGç9OšGΓ¦btï‰59ò™8!®ÙjdÄw%Èì?“Èì?¥<ûÏгdÿÙùî¿Bfÿ ú—ì?Ç9HöŸç4Àû¤p”¸ëŸ usί‡í72¿ÆNÛèû ñ£a endstream endobj 222 0 obj <> endobj 223 0 obj <> stream xœí|{|TÅÙðÌœ³÷ÛÙ\ö–Mö$›Ý„lÈBB$’p1Ü 4ÁD²I²dÃ †Vã´õZ[P©×*K@ ¨/©ZÛª¬­}ŪX±jÛêOík5Ùï™Ù“ Š}û~ß÷Ç÷û}ìÉÌ<3óÌÌs›gž9I6êõ#-êGò¶uùzV]6«!ô*B8¡msD¼ý‘ÓŸAH^°®g}×wîÏ1"¤’E×wn]õm{!Ý0B¦-~_{¹w–¡ÌY0ÇÌÚ0ö]Ô{ žÙÑÙò]åµ üÔWwÛ|ÇfRõ¿B=¯Ë·¥§C}Ëu±Û×å_ö‹7@p<¯õÑ;PN ¡åíï ù{~´õÇ6¨ ¤…6 ýh”Ó:áx™\¡T©5ZÞ “’ÑÿGÙ1d…d“=„¬¼YŠ}é#ZŽbÑ~Z’?ò”z=Žèqt=Ïèƒè(:‚~‰Ì¨Ý‹®A?@»­–Ð xdÐþlAùè>°¥ûÐ ÀýÚŽŽ!¶Ä>F×¢Üë0j'Ò¡ T…–¡ º/Šõ¢&ô.ÿ=TŠ¡nÔƒûc ±[b·Å Ÿ £Ü/c£Hƒl¨ ž±¿Éþ3ö4FÜŽîFïâÛTO"/¬Ò˜?B!t×ÌãØúØ?‚tÔ4ðh1:‡‰f÷£±_ÃUÃ,Ä¢±ËŽšQºÃ3ð|’.kŠ-Ž@&Xc Ìz7DOÁ3„žC§±Vv>v vYQ.ZüA¿ÆÃÜØèŽ±J*hÒ4T=Aôèèv⟑ L++’yeWÅ~‹’P!ZÔ>#ÿ„ÿA¶Ãs-÷?/6éA.·Ri£Ÿ£÷° çã¥x5™F‚äÇ\)aÅBxÚQä}Ìþöৈ–œäàã¿”§Ž‰éA#nôCô#ô3¬NEÆßÅoà÷I5YK~HþÈý€„ÿÂ\_‰ºÐÍè1ôœ€gáåø Ü¯Á»ð­øn|ŸÂ‘*RO6’s\·‰{ŽŸ ÏJ>ÌOv½ìFùGc c/޽6öXQìz´ìaP;ú1pvDoÂó.ú#–a ÖÃ#ât¼ _ Ïv|3¾?ŒÁG`•Søøcü þ IÃíàj¹'Ñ-¤˜·’_“_ƒ=¯EíÜb–JÆ»É6|„dʶÈg“Ùx :Ï»AÖ/‘}äs2›[ŒëðJ´Æg“'ñBQÁ¿€Føg·_ÃÌ[äZ¼œ“kÑ F¤ Öü9WÀ{¸WÐiî]¬àïCoñjlÆ#ä!nXÁsüYJçîEOp›ð6ô$©ý¥ò&°ã%øQð õ¸ÿCYVTʽ¾‡6’ÿD#°w£;q;¿Ý‚Šñ5èCô ìŠi²nyŽ<ÿŠø’ˆ Â?Ü•áLÌÉ’Ðu¸™»G~޼‰zÑI^Þá~ ÔŸ$Op‹ùó²¸vÀ6t=ÚÛ¶ÊøßàõˆÃ«‘‹?Þí®ˆO‡òZð*MàÓž‚Ý} ü@·Z,`9‹À.V‡¸ž»ÀOð`AØãß/öktD^O†Ðz™ƒ×AˆelZ{Ý[ºc·¡éàvÅ®F =èa¼sìjÔƒÒ`缃Éæ‘“²y±éd€¼IV’;.Ô/HÛ…-èÏð<æ¡9²gÐÿ{´UÆnŠý¬;<ìݨ]ŽÎ—ƒpèxl 9›Çõ¿ï¢å±‡b¬F±N´=‹~¢!ŸÂã­ªòVι¬bvyÙ¬Ò%ÅE…ùyÓs=9Ó²³Ü®LgFºèHKµ§Ø¬³)9)1Á(ô:­F­R*ä2ž#åÖ:絈QwK”w;,˜NëN4ø¦4´DEhšw!NTlahâ…˜^À\÷5LoÓ;‰±ULÏkbôDSÂk–7|s³QŒŽ0x1ƒ÷2Xpz: k-5b·ˆµÑy›;j[j`ºCuµ³Ú¯žž‹©5jŠš=‡°yf1×–"H©¢¢6gMmÔꬡD9W­¯=ºlyCmMJzzãôÜ(®ns¶F‘snÔàa(¨š-•WGl1@¹A7Їr‡nPk‹GÛîl÷55D9_#]Ãèuk¢æ«ÎZ&«0yBu)Ü@­% ÒêÀÀ.1ºyÃÔÞtš76Â0–¸æµ ̃¥o!Ö­a5²³±!ŠwÂ’"å„rçÏﬥ--ĨÊ9×Ù1°¡Tcˆ¢[Óm6ïÑØd«êœéÑÊg£¯Æ~( ¬ØzØê­öLÏ=$ã‚=¤7H€V7ðOô1ˆ¡S¨nÅ„d1¥È¹ "*¶‰@IƒxšE3ÿ,4Ð6 ÐàÓˆaT´4ˆªª[„rÚNÇGe.Á)|†Àœ#½°Å'µÈ]Âgˆ‚ÔN&L úÇá¨ÇÍÉ¡&¢¨sX}ÆôÜÍCÄéìD(@|hÈÖ×XžâOO§ ¾qÈ‹Z¡í_Þ¯‹¨5eyó=QÒB{†Ç{’WÑžþñž‰á-N°ä#,øMŽ*Ý?Á”XÛQŦÑí÷×­tÖ-_Ó Ö´H²­«¿ ïŸ5Ñ'AÑÄê.…HIáX/eÓ2­4h£¼ ~ą̈ۇJ°JÖ‚ÅyQ¡eA0µø‚ ¥,Õ7¤‹ÕQ´ v¦ ~†bóhjL‰zAdÕì/Þ$U/@L‘àFøP뜞;ÝÀÀ<§8o eÀ7ëouŠ‚sà(yž¯­X"|Z±x´U,|YaAº1Ýè‚ Ã‘ö•È å•¡/‘ÈÓÛÕ.X†Þ’С£Èöê’Í%.~„Çt<7;ãÍ4[KÌJ£Ö˜ÄÉ02ØeŠ$ZëRy‹g–ÄTxX…UKLÀ¼×\2³$j:o"=¦ý¦¨)fâM$É…íKäóÔ^Et J–$Ï_FinÞ䡤Bñ)¤ ¼r¤ÒXf,à e…Õ[½z¹^áÒ˵)X§4¤`äÁÏäiÆžbc±qfq‘É”ltKÜÎ ¹<Ù¸ëÈöáÍOÔéÝ¸ìæ Ù±ÑOnk>pïèZrß®«WÞ²mô !3ö É‘Ý ÷™þ£H>ìt—¨(‘Uô[áʩթ1‡L‚ÊcPËMvNc2PÖ%¸´8¦PÖªj[=Š~Å^¢b¿"ªVœRÈÇÈdÁ3­‹³öéYa„rwöSÐÈÕ‰±,¡ÌX\,üª°7{<.³Ü™ávÏ0:gKÅÉNc’ÉT\DÛ¢ŠÖÎÜë®;ü䓉žì´ûö sü÷“¶›°¢sìæ›F¿¿8®Éí ðéü”‘ÆIïO´Âtá2¡Nà+ŨHâ4­3µ(¹(unj¸WT–›ËS.7_žÒ¨¼BÛdnJ٠ܨ ]æ)ÃâëIo[Þ¶½žv6élÚ1&šœ¼Gð$ÏàË…yüåÂáÍ_RÇQÏ™ìv¹ƒ`ô¤·fžRcAíU·¨ûÕ¼:‚‹Iq‚ ¡aŒ÷âý8ŠÏcÞ+áÄa«c~©{ÀJ›7…* £ ¡ÑæM vOå•NajÆÐ‹6%‚ÏéTf›Å\P—û†Y–BV"aµ¥IÙ¤jR7iš´Mº Ê ª ê š Ú º#î#Y†,wfVæ´™™kÔšvw{vÄÉìÏü¾ú^ímÙwæÞ^p@ýˆö¬Ù‡Ý?w›R‡bïxÒÊÖ(³\Z5oÝɼ&/Õ6DõÚÖJëRëZëAëI«Ü`uXƒÖw­¼ÃºÇJ¬ÏU"@ìÅD€;AXÀƒN2•ÐÒ›¦7–`œ×”Ú™JRíÉ Þž§qذ-ÓêM´”X‡ÈƒŠÌÀ|Ú^v*çØŠè(wVNIKÑp©,ê/"EÆ8‰™†Œw®„ ’ kaI©%®¾ÅŸŽ#¡%tç~¾É³xäSÏHˆùȦ„²|4ÈT:k‹O(ÃÆs|C{³¦§9eI¹n£ $ œ9„Tê½~Z@Ñ–Þ6­%·?÷tÖGésžË2šMòä!rèH¶=QévDT€Zà*Õ†áìP !²Í[%³Û êÚ »VmJ.v«]Ë)3Ì^s‹¹ßÌ›#ìBŽÌ㆓†w 1ï0T–8ƒÕ“I/£Ç³„ñȬ´B=û9õÑg+GF›ÏÒ²‚ cjÞd¦æöT:3 Ìì)¬É þ:n>‰S\Òºƒš¢êȶÝ=Þ}ë|÷k7?{Õƒþ·öÿÇŸï~pÛ5?~Õ–‡lË]EíkJ£7⊷ïÂø¦»ú¿Úð_'·<Æå¼6|üÕ^zä½Ô‡³mÞæ¥ª½ªýª¨jXõ®ê¼JTUª_µOj:£Š©Ôœ[ žp*9·#¹ lL®pÉ¿ßÏGùaþ /æÏóñ" j<¿D9~‡*hÌ@Ï^f{Ff|t31„sv÷‘#Gø¿œ<ùe2ïþ’¾@FßOz†½|î(²÷PAä@ÄDS‰8ï´„¤O"ÎT&š´8Ѥ‘#µRTlrYÌ,t0ãa36/±±ð€†¶ó6ÒcÛo‹Úb6ÞÆD༩DÕ)à”W-±N#Ìù°â,u=•eÔÏÄÝŒô:ƒŽÈJ¹R¦ää¯MA:¥1Ñ"'gœ3à;Òg°#8 aP©™¹Ž™æ*¯ùÝ•,4G4ÆîåËo™}äÞ# º–ΓÛFß\8ùÊ=»Iƒ ëcñЗ€RÑÞŸb™Ö)›!«•É*Qq82ìÅö¹öÇ^‡¼<±ÂTa[dZdkV6ë ͦ+m”ºC·©Û6ìxS{Ú|ÚúÇÄ¿šÿj}?õŒ#æ°Š²|C~R¬Òà•-2,“­“NýŒÿ§ ’õ¼œ z«“á8¶džÒ`AãÕ´hú5¼&‚Ũ˜srÑÃ8mþ¸3¿ð,¦G1Á¦ÆéÎx´nS@ÎŒ,.ÉìÑ.tlÜåµ q- ¢kÑAÄï‡þý<óŠŸ77SŠ ŠÁ¤¶· loü‘ ðÎWi±Ã^Xm^™¸ÒÜ’Øbþ!ù!wî€pÀ¦Uê¬ê $Àmõj{týºµOªžR?©Õš´×kß'œ>c­!h¸üó5 -cÞf/Úqêy¤Bƒ\f‚]£°ØyÝ€ ™úŒGj< »ã…öäÌ“ ìPT*ˆ¢0¥äŸŽ@’®+G¦÷ƒ‘ЧÒ1 §¤±,_h> ?TÌpvmÂfêR‘¹˜ÉóŠ š«8”zî‰Ócÿ}|Ããp´^»f÷£®Ûp Þi~ú$NÅêŸb²ãà});_xýç¿ VYV™RÒ!+ú™·9A¡¶jçË(WË•ë奲D(O(7Í°Ô u u¦ZK“¬IµBhNh6­°tɺTíBWB—©ÝÒ‡“Ur™î ®^V¯¾BÛÉùe~u§Vm¶ó £]£IÊTЭš˜é*)P`¤ &æ…ï¦àÚnMs–¬ÏD^@qÐsÚh$‚]¼ÉÓ jö0ËMãMÍh\½ª•²•ªVY«ŠÇ͉B)Åm4ÕëÖ¸áçoaÓÕ¹ñݱ‘£ƒ»®<¼s× IÄY·l{oôÄ_¾‹Ó°îÕW^}í篼¿óÈÝ 'zé(RÅþÓ[¥ÑÁç,VõžùQö;Ùç"1+E§Ê’"ª8Ιf—'›4æuÚ¬‚ú” ïuíw—ÙlÓ»ö±q7?iqí¥ ãf¯‘b§ ŸB˜Z¡ /;·fº†ð–ÃéóÇOØu£gaû|Ú<º¤Ö_ó'Øh•àÈ p6ÍÌ_„´I‰î$­1'è’Ç/B¸5Ó‹PäJÏ„×+dy‘[p‹î÷A·Ì]XFÍÑAͱl¸Œì/Ãef—%#?ó¸ü¤œ8ä•r"/œÅvî§ÒÙ2òiÅèPä‘eó¡wS<¦jÁGR“u±xâMèCP¾"kaá§)¶²Ùéæä =‰ïj@â*Ún8øìüð‚O¯Çŵ»¯ÝšµtŸºa÷£Ë•9ãY»¹õÅ`SQW ã~wê÷VÍ{lç’K’ô:[¦KÝ=ý²ÆM–M7Öy}—çm9ÿåÎËfá·³íBöâü-W,½¬ì}'„p/è{ÞÙù‰X౓/á«ù•ü:>ÂËUF¥J©Ò%U:Ä)±†]îZ•½W‰•b"N$Æo½Ç'Ìqâ¾ìÓÅì*wxf¾eHøÕ.ý¶©œB¸yÜXÁ»Qá€iî¼N òŠ+çÌ;ûʤ4Þ}ߦåeͯl þvüÅŸ€~zÕ›(ãä‰äaaHxŸû0ñ<÷y¢œ§áF!lá­¾K8e9c‰YxQ™¤O2%ØeôžªSëôZ}¦†… ?š%ʆ–óÒcÙo‰Z†-¼…#ÅÉ&‰Ù„o0kañiÅxì1·DS–ÇßY˜äF•Z©V¨!êpåúlP'H[6g +á®Â!Æ”-»ëþÞ·[î[&¨äl\~ˆwßy°¶gqѶÑ0¹¾»«ê¶WGŸ’ “¿Cô%ྦྷ Øa-“ÓÀSÖ²5†;ø;”wëï1 ˆåÊW *ƒ×TfãUÉ:›0—kvà[4Êü„ïðŠFMƒþN|—ú.ÍÓdHûKÍËúW…ÓÜïT¯éÞ>P'$ÈåœB©Ra¹\%ã9Nc0@X¥ÃƒNÐ@TFtN+¨åbP /¡—TDp!\Tѽ¤Ã:—–KÒj9µ )‘ :V‹ÔKpÂBÝvm†Úà“«¶{ÕC8åi¯|™¼_ÎɇHµW/rÛIÆR`t¡ñš¸}}:b³Ž6Ú,#ÂpsùS3Þã9»ÁìÚöâ®< »É jxÃ.å‹»ô‹ñ …^¨¨PÒÐΗ#zKj™†JM“Z¦Í0—qh}0½L úW'—áŒô2•×^æ‘>LwØ1ÆÅp3˜YZ “ËÂ|ÝØÝï=gÏuþýØ­øÆ·O—}L²ñØó æ9¦ý5¾¼q¬™Þ¨êÀ«¦M'CÄøŽ·ÝìÉd×,kV­Òø¹² Ê¯Q  ^d%¼)ûgÒç6EaB¹µÐ^•°ØVe_žÐd]a÷%tÙ|ö-ò-ÉŸ“Ï-2aƒÎl^fj1õ˜8“ݰWØ/AàSìjzozԫ·'Bcöê(*¸ïGAG6}wàr—ÐÒ›Jý£;LÅB¦Â›™SBÚ¥p [ÓÆ/ÿ8·–À±¿ù#êY@Ó\1º©Bº½ÒûuŒ¡ñ F@p|“é,ÄÆénæ¹+åþíèÇcçpÒ~‡õø«Ôƒ;Ûn=M–kg­¾ášGðjóG°âU-Î{gì A°}rÞ¦=®y:‘¤v!UHäÿ;±3H ¥ œ‰-M-(åò—í68XlJ» îÔJ›Ó¥ CäÀá¥ìÀ·<©KK’¡´!òŒ×€‰V6¿ôxÓ%ø²|†€gyµÆ'+ÉZ$מ#™È÷ºQ2hás½„³—µìÞIv¦ìÒçyô`ÆñÛ šL3‡\ÉéîRzÈHñ"‹þ42RÀ¯øª”˜]Üsîữþî½øhâ½öúç zþþ¦´Ç¯ªhÞþâë6~ÿÞÄ“oþùñ†GŸ=°ÛWÈ~—@^ûkèøþ»Ö*>S¦(Ùo&ï?+gò÷”cËån° a1ÿÕ%BŠ9cKPõä/3¿ö'+ÉrhâÃh)C™´äªø(ý=3Ôçâ_ ÝP~ÒõÐv ú—\#pÃèrò(Ú)3Hcê¨Þá3E± ?AÞçŒÜBÑö¦,,»Už)*æ+³•»U ªOTŸ¨ïÔTH”™Ð,ØôCྖæÂ|Zõ(Äg´u·Ñ7ïŒY–slœšÕ86J•Ì¡+±I‚y¤Æ –! Þ.ÁrÀ¿C‚èE|@‚•ÈM:$X…È-¬æŸç,¬A­ŠÓ¬E딬“QÞ/ÁzÔdX=!ók ƒŒ‘L(”`1ùL æP¾p™ó€Ó)Á2¤6I°ð·I°µ ×I°% ’`ª¾`5ñçH°&î›ø«­âÄS¬ãÖ$q¬Gyæf óTêZó –Q˜ïd°œµ?Ä`k?Ì`%ƒ_`°ŠêÈüºƒŽ,¯I0èÈò–ƒŽ,K0èÈ:_‚AGÖå :²$tdí“`Бm¶ƒŽl> Ùþ"Á #Çã :  :{%t”5ÁjÊWÖNk(/Y·2XËÚïc°žÁñ9ÊKÖQ'œõ '1œ7œÌæù€Á&Öþƒ­tl6fp ÅÉŽÓ–Jq² v0ØÃàL†_Êà×2x:ÝÙ+)¬dôK0[+{-…µñö f¼d÷¡z´.Ò~´ùP”"zR=ê`ðb¸ìwCŠHX"x Ls´†-0> Öîû?œ)‚2­„žNÔ;†¶…PÆ×+Deð éTÄZ«`D'”+`Ìz !ÂF­€ùÂBh3ä퀂~`Òžõ°F'ÔBß ¶| ¦ø5Ür´šÍžà€R0 rîc‹¡µ zƒÐ)Gд)s}ÛÈIŒÅ ‡ÉÚL¢T^í0²‹­¿ÚèÌÿû²¡•rJ"Œ"*ê'"ͺ ô ¢el¼ˆÜl½Å/…µ×1™ûŸŽóìTÊ}l$-ï"4Åõ„u)M=€»õ[±üÌ®(^£jýĺÉj§3½Q«DõÖÓÁ,ÇÔäNÐb=f¡+!ïeTÇõ·&ªjFI„Iy\n! E,ŸdƒqK 0Ù·3Ë¢¶ÖÍÖšj/mÒ\>FÙÅf¤twÀú]lƸôEFµ­×&i#ÞC©Kúð1ãã¶Nè? Yy¤A?“M˜Y^œ»q ù$ú{Ùj"[a*Uãš§²¡õ>6wÇk ¸A6W|íñö¸´#’DÚ$K /sú™TPÆçn“Zz™¤©EMÚtíØ“h'O)¥úì’F¯ÐÆÆo–V HœÆ÷aR ëØî”Z'夔8 0ü^V›Ôj˜Yi'£îâ61îSüо.6ßäÔ7l”¨õIòocÞN”vé¸ÌÚÙÚëYk|<ÝaI‡lßõH6„œîèÍ’´ã3LzyÓUÜ:D&Ã6‰ÿÓZ'Ãéa{/nÝldœ“©Ö˜°,ºó·HšébÔPÛÜ,í­¸ß霠£‹Õ&­7òµ“(ü5þÚ¤5ZÙ ½LÒíئm‚öqÉö²¿_çp³m‘ÙÀ&Û0³»È„?‰kÒßïÉkÄwSX²²Iïïíbñ¡«Øø8ÕtÞ6Ö;iiñÕÛ™´zØ.Ù:ÁÅøÚÝÌgÒ~“DHZƒî¡¸#lü8Åã³÷0êb~sœ¶y kª‡ÍcÞ© 0:Ø^ê¨  n¦!?«…ÑZfqçM`þß]¡YL×?e•%àéë἟©,ÂK¡•žó _ÄÚk¡e%äÔ6çÃIP ÏbÖZtp3 ©žYSø"¶&N´Ç÷I\¢=’Ì'môß;Å&53î‘ÇõÜÊz·~ïÄšm¾-nÏ“çÑTo÷“~4¾’Ï K{z=›Å?áénm”V£»{³äK['N£øš‘!™qßÙ7áüÒŽóOØtˆùˆ´Ÿ×Iöx1yïB*1ÿ”Y&wñ7×k—N@j­Ì3Æ©n•4Ó-Í|1 e1®.”TÜ#Ó*¾¹ò¸o£^ÌÇbP¬Ú)I;,ùo[›J´LúÙ­ßÐ…_Š2¦Æ\qïícõ0ɤHçßѹ(Ùb÷ß6¾.õ$íLÒ)§HhJŒœ;šb·“g÷¿–¥®‹Í?nWÁ æëcúßÈ´95÷“˜AÀG¨½LâtþŽ ~âtMµî.É£ÆåßU=’}LzÞ mè_q4i ïßÔÜxìEÏ¿¡Å¹‰Ç{mL«Ý_ÓAèkòžœ9Ì¢U‘´KçÐfõ¡©ÑÕ¯ýñùBRüî:‹â¾©Ç¸´&#Ö66ç7÷ñ¸Æ|_“õºÿµ“Rþæ ž÷R䗢؜=ã3ÐûIŠß²!†/A¥p×!/„Út¸!–@*@ô-Á*T'a°ÿñ)'—¢bHtÔL4î4ÑÙÿggÝÿþÉ8Þ—ÿ5éMœ‡õ[{üë|m~ñ±¾Ã/.v#Ð$VC=Á/v‹=myb/âûoòédâÊ`g/m ‹ »a\aYYÁtÈŠòĪÎNqE`}G$,®ð‡ý¡ÍþöªPÀ׹¿¾·ÓŸ¶œ5ŠRkùj(L(Ê›U$f/´…‚áàºÈ4†5µ“5,®gÅÃb}È×îïò…6ŠÁuÿ’j1ä_Gü!»è#€ºj¥¸ÌÝbýbqéºuy¢¯»]ôw†ý}€–71ð\òõtlÚäkB¾¾@÷z:6¢.®¶ÂÔKmÁN_8—Î ´|âJ_ow;ðbšUTìŽø»(m¡­bØ!Ö‰íþp`}w®—K`ùÐÙ ùÅŽÞ._7/¶uøB¾6`*¶0ðáë¡o+å?"ïýmþp8ËQ†|0o[‡¦¢Ì÷vûž@¤ƒ‰¡+l§£) dG€6jx¼-ÒçïŽü€Ý@ohkžÈ$Üìù@בßé‚.: ­ô¦‹QíùCŒ„u½2Zaù® ,ènï G«áÈÖNÿTIPK ÓUü¡®@7Ã7´> ¿­Š+°=à[¤ý} s±ÃßÙ Šë›ý ™¼Oìqˆ]~]w  Ð}==~cw›‰‹;@…%ú·3]þέ"ðÛé¤st:™x#Ò& KëµÁˆV¿Ø“bÒôoê¥Äö¶Qù‹ë‚À2ÌLE"ÔN€õôÓ5…AdÌ<¡Úå[ï»*Ð Sû#m¹q¡Áðö@¸§Ó·•.AGwûûÂ=¾ PÚÄH L'¦è=¡`W͖׉ô”çç÷õõåuI›×ìÊïˆtuæwEèÿêæw…×ú(ãy´ñßÐçï„V?²diýÂy ««ê.]".'.ZX]»de­X5EmíâÚ%õ:µN]ßb—1Õ  D˜D/²Å3Ô)Ï­[Å­Á^:²ZÈ™í£¸Y‚q0ýÂöëtßúßO-1Ol„a>0ƒ`+ÝF02r1Ô:û¨9ùAq~*é¿-z^rœ¤‹ª0¸ÞÏP˜Š'ÆjÀz[{#05„5…¡¬ð8Q`È¢˜L­MÜìëìõµ‚…ùÂ`!SG牫º™Ínçx’<˜·O ÷øÛàt¾É¹RìfÖFÇúÚÛÔ&À*CÌ#çÒæ“-ÛÝ_#ª3Р Á" ¯/ÚŽ)³GÖì‡ÚÛÚwÐu`®¸¸»ÀP~PUÏV1n¼’„.\ˆÉcáºIæ¨÷ÚÔë³eÀïµùCÝ!‰n†îöv¶ÃÚð÷ÅÝÕ7اx I?x€öI7Á#Åk[dRÇ”1ŸDõº‹OËHž í{i"XÇ)§«VVÁ!=«¤tšXZ8kzAIAJµª KJ /-.KgÎ(›Q¦SË®û—›‘Öò%òØ>„«j]òhPN¯h[±þ |̆ñ¾•, ¢—D´µs÷p‡¸ç¸ãŽrǸŸ^z¥é•>ºôJÿÒ+ýK¯ô/½Ò¿ôJÿÒ+ýK¯ô/½Ò¿ôJÿÒ+ýK¯ô/½Ò¿ôJÿÿÁWúÜü'aÿXß{_ã¿à{+ð-sv2 ŸRçÓøB¾ŽŸÏ_yÙ+Püm³,a{†úž8÷8ŠïãÛß>æâðÄßò¢Xº]äSåDÎŒÎAŠAâò|HK!­…´Ò>Hr†G[‚®…tÒyÖãå̃·{‡ ¸‘‡7t±ª/^mjfÕÃßiŒ—‹—ÇËš…q´ò8ZaI¼9on¼ÌÊ— ®¢~ZªuEÃU&΄Nqô/{ ÇäEdÀ9Ð~.E!N.µx¹„Ùî¢}Ç9aŽpdêˆ sxPg,ªR“9‡ƒüŒÄ{ÈÈa½±h_Õåäè ¤ã8òGxÞ#ï¡kÉúŸ'WBÚé8¤“ÎA’“3ð¼ Ï;äÀzåCª„´Ò>HÇ!ƒ¤ oC.?пf9…+!òÈò°õär Óä4öú`iYÑQxò%Àá’sŠ$˜Š†Èo¿˜æ"ï=ŽýUä·( ‰Àb¿…É‹DHË µ@ê$è €Þ@ýöBÚ) IcÞ€1oÀ˜—!½ é TÉ i$%95Ë ‘“ƒî¹Ž*ù5ù2ƒPO_²òUò+_!?g寠LƒòeòÒ`šUi ÁJÊ|è—‘ŸÎLpĪŒä8ˆÇy>¤JHK!­…´’œ'ƒíŽ˜äô²æ ú˜•¢û•È»ÁáuWƒ‰4s—_dûÄ}nâußq7Tiæ¾å6€hæ¾î&€hæ¾j@4swnˆfîö Ñ̽f-@4s/­²!òã§3³¥K7b±Ê@ú@J} ¥>RâI}Ð<¥í‡ƒ99 ±{¼ži9Žþc¸ÿYÜ¿÷ßûý¸;îßû+pÿ•¸ßƒûí¸? ÷{qÿ3xˆ¢{\P-óZpÿ˸ÿqÜÆýnÜïÂý™¸_Ä¥Þ!’>¸°˜µ¬8\E÷”—Í)2é Ñt0ëtØöÇ!? )Æj^@3âÈÖ4ZfΩŒ×óÊ‹‚U È 0ðPà è]H<(è0£`ú×éÈ+!­…4 é¤$9`gá{Xn€<R%¤µ®…t’œ‘sAA‰ÄƒŒ°|‰è¥´F^€‡~»b:I÷¦ vÁ#,àöر! /M‹¥‘Rd¢ÿ`T‡°î©èþë:¤ªR‘[È” ŠØ+•{¿Hu á»ÝÏ8ª’ñ(«ÃeÈ]PÎBaVŸìJZ– ;y Ê¢Aûjftç:Ža=õ”ã ûYÇÇö!àGög¿‡x<èø´<ö”ã·ö¿ÊRB˳î! Å1‘¡µÏr<þ2CÝ÷ :¶Óâ)Ç6û|ÇF;ëðÇ;® CÍkp¬p¯q,€ùjì­oæ|ÊQi¿ÒQÇšAÇ<å(´Ñ鯉¶9kÄC³›.ÒÝD»g;k¡¦Úú†CM^ÍàlïìZ§¯¦ñðüe%¥¬uÃÄZ%Ë.2Ù2:Y ]k~éEºKi÷|ºV)]«”®5ß;Ÿ­…˜/k8¤Ds«›âåa¢Qƒ½¶¤¤7Î5 =s˜ñÎN·lO9ÉÃHãiŒjs£:H´kzÕô*Ú{Švéé—+J]–í³ÓSŽá‡¥.šÎ¹Èé ÷"Km &þ†4Ez©Àã¹'ümè«z}5áBuÑœ•uÑÊåk)ÐÚBYŠ–·i4µC±áxc4–ÓFŽ›@¤m´M¥’¿©ÿ^©¬¦» Ÿ> endobj 226 0 obj <> stream xœ]’Ínƒ0„ï<…é!Âvþ%„”&AâЕöˆ½¤–бŒsàíëõÒVêô­í còS}®­ ù«TuÆjãp÷ ØnÆfB2mT˜§ôV}ë²NMœ›»s_Ѓ ŒgeÉ4tÑç©uÏmyR-k·M˜–Qòwà}rÀdšEQƒ†Ñµ |koœ—¬¨ª2«ÿíÉYríÔgëãQr¾Ý—‘eâÝyEÌ‘×Ä+äMâÕy›XVÈ;òÙ!ï‰ÈÒn´.‘I{A>Ñzò?'Ï ñ¹"‘'Oôs~ôs~üAù%攋Ĝ_¦ræ°&¼ÇŸú™º{«O—:ǶöûC¸Á¡,=ßJÞœ{ endstream endobj 227 0 obj <> endobj 228 0 obj <> stream xœåVûo#W>×Ûi6›8Ùd7ÁK¹ÞIw·Í8Ï&ËŠ´µ’8›ÄyÚÉÊ.ë‰=±'kϸc'ÝUi¡­é¶Z¶BET¶E€PËuúEBhyI­–ü@µŠ´!$Ð_Pº$œ{=yì’ÿÏã~ç›sÎwÏ™ñ)ZËÔÀ³à„`2§æ]’~ @’+E:ü%â?"7½˜Oçîœ]ÿ €£-]]üsñúÇÒ«ès'£©©›Ë¥Sî,ú÷eß¾åFû ´[3¹â•ò‡z´ßE»1k&ÕŸ’Gº?ÀSMN½’÷;)Aû¯hSCÍi;'"_ðT!ך7 ÅFXÚ8ªðëyKË7·ýóM´ÇÑnǃàÆ5ÝÜv8%ø?ÿ½×áxFá&Ä¡º!3 à €~¿‚ßÀ/à ø2| ¾߀oƒïB¾WÉkÐâÜt=áú>|ÖUÏ@ap,Ì™Ž±±•8ù‰fæn‹=Ü3qz‡‘cíÍFú;VÓ`%‰…ä¸?ÀœŠÞLYp:ægÁx€I õËþµØ‡¾¸ýbÿñ}÷É~æj‹±á•¸¸c>—rtþÉs+åSäyT§ÏÏÏû`RnTpªRêéùŽ{@¡Ïp‘_bʜʔI§ÇLÇJZI¥|Úç÷Ç}%aE*¬®ÌÎëóú1ã…¾/Ê©Qhó´ÍÇ(½ «K4FS •Üï(WFiZ¢Jê\¢%YÈÉ<9 ¢'ÖÇ Ô¸1µBé±Íf¿ßG7KØ ÅÙÌÙsó ·:E¦›¶¸Lcá¨ÏÏH˜—߆œw=/€ƒ†û (ñAV—+á¡Ç,¢ôoÛXJ.yŽõûná•Fåm’àÀ ¿ã…$ˆ3wž‹ñs$&/àìåDÀÎ#±u 0˜X'”àÀh’µh'wµš†,öOþÔ:ðÙGÊ5‡+“ÚË:ú×=RÝGÝe·ëƒþu§!”œvqzÝã>s·p¾§Þ_ÿ¿Þ?ä Û­äÕíŒknëCÒðbŒ¼çH8?„ZxŸrlÅî„Õu0i“ÙÀ½ì%mÐÙEN9Ýûh_O÷‰ãM7yÒ˜™¹iäÆ'ÆÃä½É ÓxmjÂÈO‚ƒÜ&kÒ iŽÂ'ðųÖm°¦‘Ø'·l°o¹´ñü'I[¹¡¥¾ámO-4µž8å¦:´¤# -hU”½ç„²×ãn¥çú¼gN˧ŸHáD"¡nÿDM|‰ªþ¶ÿáý$;[dÕÁ¤@¥nÒÁª6pß­»fw»n ¼îs»…“¿oÿiI×—^~QK.U-uýåEm1}í«ÉJÞ»ä¶d:>‡÷©ATîĤRGÙ%r9ý½~I*||ܾ!ֿŖ¯ÿ<óÖ —êúÿŸª Ô­Týv«-|›ÜÀ»P›Ä8׋ÛägoM#÷­q.Ç?`Èñ[sÏ“ÛÎðΖdíÜE^‹ð=¸.ðÙ9h;à8Oä$ö[£ÞÚÍK^ÙÓ P±£<ä›6v"ÿKˆhcÔ‘ÛØü»èI¤0à,y߯¥-; ÖUkc'4ºNÚXBÜic<è²±ù…³É‡iwgçy]6脞´ÌÂj¡¨å tÔH¶WÏŽ„"!:4ŠÒÉ©YŠFgi%¦«‹Ž-guÍ “ê‚V¬žŽ„CCèØx|?":78 íÇLeõ]³èˆšÍš¬è²FÃjZ5 —õê5Í2jšB‹O#*f, ñ¢¹láY_A\ЯàI[Ñ …jz:ST¨¡ó€§–µBQ7‘^6RšUHš²I3¿jUÜ,-­cç,-Å]ôîî®^…ªF:ËÕ2È/Šˆ¬¹¦imwâô‚i¢4­¼i©\b*¯ÑÕÜ‚™héå¬jíûè"Î}iWgw;fÙ¿gq}WÈnèÄí<¢(,ƒãèxÍ °ŠG4ÈáHñnà•v¨†YDð ¸nNáE4‰hÇÄÐ7*ðA.Ü(Œ¡N54¡6 *, .bÖi‘q!;c?àñC5¢0‡žÜ—{¦3%TV„’…ö*eq3÷´F±ÖЕYÁMø`zÜ›½GtIÅ<Ì®ŠÞŒˆ±€ZYì–Šµ¨’û »ë2ö" ã5>C R"ï¿w ú>ß>û]FO¥BZèÑÑ{MÔkâZDñl ÅQž¶9>k Ù ¿ˆì2ÚÌûUá ˆ¯ØH¬!, ù4f( Ë@kWá)Ì£‰çEºœãOTJ̧€5˜B—óç±6ëžlüj™Ê3g‰NìfѱúnÑ)ÎðzÓ¢W»Uühð;½&溷‹ˆ. ‡içÁo›gu¯Š)dxŽ(Î6‡Oª‰Þ1Oþ«è{˜ÇaÜE»•¼TÌ¡ÿM•¹á´ßQih<ìCû²ó%F®A˜UMÇÊ„¼/ó/HæÅãÆ‚gãŸÄ/½ùXœ5¶üD{Ô endstream endobj 229 0 obj 2029 endobj 230 0 obj <> endobj 231 0 obj <> stream xœ]PËnà ¼ó{L6IÛ‹…Ô&äCªÛÀ°v‘b@ü÷]HÚJ=€f´3£Ùå‡öØ:›ø[ôºÃƒu&âì—¨z­cµcuº²òëIÆÉÛ­s©uƒoÆßi6§¸ÂæÁøo£u#l>ñn ጺ“ ”ó¬Â‹š×¶54¶iÝ’åOð±Qx}©¢½Á9(Q¹YSUšÓI2tæßlqôƒþR‘”5)E%„$,2¾}ºËx—ªÇûŒ÷ESïJÞÕ™“óê?A/1RÛrŸR3´á÷†Á‡l+ï:¼t¶ endstream endobj 232 0 obj <> endobj 233 0 obj <> stream xœí¼ |TÕÙ?~Î=wŸ}2“}¹ÙÄ„°+“@1„%(š…!‰YXµl%HŲ&"DDTD´w\è´¥àkU”ò–"õG«…äòι3ÉÐZµËûùü3ÌÌ]Î=çyžó,ßç9gh¨k,Gf´ä)UR3á¶„ÐQ„°³tvƒ6(¸òM8þ¼õŠÚ鳿ÌI+CˆÀ9zzúÌy/}<!~%B·ò•å%eçþ6rB™«á~¿J¸0_¯–àü=8«œÕ07&&b=œ_€þêfÖ”–Tþåèa„†Ãýƒ³JæÖžçæçZuɬòÆ7êÆÂù„†|T[Sß0-¾†ÐbÞ¯­+¯­¸ÄŸ‚sBB%\Ãð¢f8é9GxA”dE5™-V›Ýá p¹ƒ‚CBÃÂ#"£´è˜Ø¸ø ={õNꓜ’zKZzߌ~ý 4xÈ­· õdf ž3bdî¨ÑycÆŽË¿½`|ᄉ“&M¹ãNôág 6t^o ]h3Þgpù^¸ÒÊíEËP#\y Á+¸>pmº„ŽCËåèÙÅ#< ¥ÃU„N ºŒ Ñ‹ÐÇ@ìÂ%‘GüXþE¾€oãÏñÇP¾ž?Æóõ8<.LvÀ{ y›s¢Ã( µáQ=:@ΓtrÎ[чäÙ…>…Q`¾aŒUhZ´¸p ZÈ-à àÊ»Â1´ ^5pÿÞ‚uðRt=Lxn$Ú‚O_GÐßÐRRÈ-½Lç*€þw¡¯cðü&TÏ#á$V‘Îõ†k@=Œ5}F>ÂIöº„ÂÈ…h›Ø&º¤X…Jl~ _סVtœÜIî%§ñ2>–ßÉD« b´ úÞDŸ+ð<à¾ÐÞ¹9|1Þ…ÎóÅÒ4èûmÊŒù"WU ƒðž#Ú§ÁxY”Ò»è˜4ŠOç¡é~à¡’fÀÑ´íE}H Z=1~ÅþÂßàÉÍüGÀó*ü÷7tŒ G‰¨‚¿²F.„ZzIžp%iö=\|nÙÏ퓵÷Š¢û$]wªÙ%mÊßc™§µ]»–?™Šöá{H¼¼‡ýèën~Ô'itþdmOGöpo¯ÙÅÃáÚøÉpHÏà2\ÏÎîÑA÷ñð/·xVZ©ýÄþ“ØA?±—êbCz _!lo$¡P™¿ŠÄ«XrÅãx®I{H=äŠÙ÷ãrpW)4òœ€Ä¤‡Å‡¥¨©h*ŽÄA±$÷ÆŽXG´èv‰Ø‘žÖ/£oXòPæ‚ÛŽzmÔƒsϼßè}iÇ }msóZî`àêé•xaË´ŽÂÉßüî¡Ü¸Ž‹Ë—.]FåzïµOø… ›.†j=q@›Ò$? ¸ŸÂÂ~3~9x¿³Í¼2<ÌÍÉn朶ìpÁå ‡NàÞ~öò…³ö‹ðº|.¤z‡FÔF´Fü2âR„0 ÅC¹¡î¡aB’”"§(Ij ªÁ5\»&L™z/žŠÝÑ‘8èï¶âX 9ì(= IÉ86F”ø…í{ÍÇ^šñî´Ò_Þ£_Ößʼníc©ÛþÀ¦ýVî®)¯¾Û·ïî^IxVq¦phË»·PO+Ä…|1ÑUOqðÏ90'Ð/‰¤†˜Åôš `$û‰Ñ{ÔÂÉûÁ´<ŠFïqŽÞã.¼ƒ^¸öú€¢CAt®/¤ùͱì} .ŠÁžŸŽäf€sZÈ5q‹¸5Ü6N¦)DaóJBù¨N$‰¼&g  <ˆ âS唃sI.Ÿ#Œ=òD4‘">_®@¸ŠTñÓ…J±XnD xY1_\†–ád¿Bh[P ÞÀm"ó Ä“âùuùCùš|èK@º‚Óqì­oá»ð]oéw^á‹Û É3W[÷7@PóD³§Þ«ø*ÿ<:È XæQŽlor! ø=Û~!Õc²+%_)VjC¯ |éîØ7Úà/¾Ú*ºÎS™×\û„¼ z”€Îy†XÌœÕ4>*RV8I™¥š"£@Mxïjr¯Þïà÷Ç·9VöŒTMQa*“­’ìŠÉîië:qá,h³/ªavý¯í½è òJßJ­K²zm %P›®†›ÂÍÉ dI¦$ó`e°:Ø4Øl҆㸞jOS¯€WŠ»W`ÏÈžQ‰Zbt\B“Údj27Yœ4rœ¨Š&b&b%6b'!$”„‘p>BIHIšxwâÂÄE‰«[/%ƒxïÅn¦¨nW`˜&clL„ ¦Ï`‘)8gôí—žH»sÊŠÓÖ=´ýËßMykfÅ;%KV–?íyúá?ü¼âE~èîž= =¹ÑÖ^WlÞûjFFÑí£óãmqÍK¶<‰ÏN§À|ÙÁw ð„„îGV×~A^imÃÀ• ™ápš²#˜q¦ÑÉ»pöò¡ öCS÷G.Šl$`o˜½ °µŽÙZ vzHŒHokôü}G®¡kGî{¾ãÝ'׮ݹsíÚ'É>_ØYV‚‡c^ÃKt÷‘sçŽÀák-z^>Õ„²<&IÍ´Ø,Èâ@Žx³½}ô{§]]8kÌiûðž©ØcIµx,ù–bË*ËV‹H•Ë.öÆ”¦ÃïûdÌЦjáä•uú—wµ¼Éä°ä0ô,<Ö`O8Q±bq¹Õ±RÅ]mf‹"»Lc9帩(z|6 dá  ôbûu7z ¢0˜ï”I¼»í¾ûšŸmkö|ãïá_àÜŽŽ’­[_ÝÆ-¸ÚúLEé%²“êz—íļ„6pãa0*óTÅ.x„|¡X¨. ¢a0`,¢ëï˜oÒ'2ßdÃz†I2§8Mu˜T„lV‡ Ù,³Ñ/«E5©f‡É¤fYLŠ™„åä«é Ýj1«ŠHlãm&»á·Fï‘™¯2ùœ=f~ë#ˆI<í2ˆÜÑ-Hu90ö-ü9(z²K"‚ÙSˆ%P ²Ø-±– K®:Nk™¢LQg¨Ë-‹,ë,N&Ál²šlAØÍÙy»¤ºL.s¨5Ô–€âÀê4^åžJ¼gŠ3'XzY{Ù4Gð~\*Ÿ* Pû™ú™XZÚR™Èƒ=œ‡xxà=’GÎR²Õ–\k®Íã(D·ãÛ¹ $ŸÏ&Ф‰ò$e’:Á4Á\d-²å;*pW©VY«lÅŽò\ë\Û ôe™i™y…e…u…m£Òlj6o²n²m3m3?m}Ú¶Çñ LJŽkŽr0fÁŠ µŠ1u›Üº±ëï[73¯0=Zl8ÐÊ÷æoÙTÈm_Of2MQ? Pb8ÚâI€Ä‡; –8 ÒdÙs¬·´ºÖð€¦‘]å°d'bµ7ÌW`átžè¤6Q'.¼þ:‹©e.ƒ wΓðg¼'ÜÎ|ö¤Mà' ¥ùü|avØò °v  +¼ÍCë× ¦%¡K–„ïD;ÃÀ^|´;:£ê6L]ʸ Ü>Kü7ÚóêñCé%cžlºûøÜù'&ÿ»²ïÑ/ïÚµk^3hÖ†Ü9-YÃŽÞ’öÇ7ïÜ^¡ÿ‰Ù"ä{ü6°}Y ÑŠÀbA„X²1I­&‹lVQ¸(óf«ýÌè=&àÛÂX6S–O 9t!ÍA9>{âO5ùÃÀöaÊl/ê…F¢"T…æ Ÿ )÷†Ú›ôÃcñ8ó8ËD\ñ|² [€IG“tš(:Ê ¢Îa=C?yòpÇ]B|û'äX{úN½¿ÅænË5'~ éH@!3Ù‚–Š„Ç!(XC>q,B_ÿt7‰ ¸t|ÛâýýuìN—ƒÿYsnBA(Ö ¶:Q«yse°n‹$áî°`æ½ëb*¦®Ö™žætع„4 qbcè'÷àæG…>z+ú—W¯ê_bEÈ×éGá} "w:î‹Ó[õz½I_®Ãôàyx>~ˆÒþÈ} È]E;‹´ò\«°XB­Š%†…MÔ+بÀÌë2œS…ªTÈ ÜmÄÆsSûG;„Œøt(ˆŽGéqùûxTû¶]|ýȶ‘WNîb²§ÇWÂx"*õ Žp Te ­h1æ1%{ûÑC†ˆýt×GTÛ'¿@ÃIH‚ÉwôPäqNæ°HB…ÂHa:ÙƒöˆÅ-Ñn‹£w’×;>>ŽõŽtáäÄ+‹…ކ͆çdñ&Ùã›y®-–›ùgU+1"Î…´‡Q†/°)Øe„ÝF;¼ïÃdOG(÷nÇ@î«öÛ„“»ôœ]Ÿ¼€\qÄJõ¸D“„&²ÜÚ¦”TQFrŽ“âSŸ8JAï‹ù[ ¤`0|Dí+0ˆŒŠÊMÚüäþýƒ, H'/:G^íØËï®(ßx|‹gý"}ºÏÁ ôe£ë_yåäãË— [ô7Wu´®»i믹âUø6o-ùôù¨(ïe R¬è© q¿Õ¡5Eß ð5ÈŒ‚H0£("»²{€ÌŽžøe¡³—ÛAxï@~佞êÔˆÔÈÔ¨T-5:5fh‚'Âé‰òhžhOL~D~d~T¾–“ŸP›°,byäò¨åÚòèe1«Z.%Dúõ=ä{ 8²8ªX+Ž®¬ªÕj£E.ŠZ¤-Šžê7#·âþ> Ci´(ä^ýð™Å5÷·µ =øÀ3G:®bîÉ Åû Ë_òÿ.qé ¦ÕŸz11¯cñ®Š’7åuç““w%$´{mR+E šç‰” Õœ"K–)Ös2€ ‰ çûI`œ*ˆa?ªÊMù\þŸé°|”‰bùÔ~Üi$7Bªâ*¤Eœy”9”¹’8 OËq•8O\†"6ãMâV“y ná#ö0¶s-‡ôK3 '¯Fñ]éÍt5 è ¶6°— óä”D²‰~ øe£áÜN?,À‰~@L4â»Ä(ÛA_ÂnÌ*Vy^ åÝjõVþu?Iš¬V¨³ñ|~¶Ô >Ä/Q7ò[ù ÒZuµº?Å?Ço—žP[Õp•ð‚ ¨¦PâÜJ¨)‘ôâ•^&Í2$ý…¾R?e )Õ’Kr„le”Éc)¢Ù'WD&¾*|5Q)2å[j,sñBË#x½ô4Þ&í±üÂò¡åš%…Æ[.VÁðð_¦ßƒwÒèNáôºS8'òÅv¼Ûô‘Ü(.P¿¯¢vUíá”_ülv¢f#~†ØÒIˆÛÌTÄ/~zËð™ÀJÑì“$œÑ;09scýÚ<ÏÕÐßÑßÖ—ãyBžÞ¦ª¦·á‘8‡á‘Ûô;ô-úVý¼ Oƒ×væ_&"$f€>˜ñŸ<¹Âä¥ðT…LèÍMÀ€oÑ @¸ å3´v dÎRŽ Í$›Mª"Å4ˆŸJ8¨68éGý0ŪÍb:ã«1õéÇ×*ˆ÷Û8¤úqMà¹@!FÍPs¹\!Gõ¨wpwÔ|µš«*ÔyÜBnž°PXÎmäÖ«¹ƒÂϹwÉ/„SˆÈ›U6)ðevs!$Âä0Åer›iu*–K Ñ|¼#ÆHñr‚§F›bÍI?¾Ÿ<МjÍáF’ÞPÀ@ìÕáêp“Çê±ÒZÆD.Ÿ¿]( ¤|y¼Rh½•árn)çg3ÄRµRbšn®±6¢F<»ŸÌåïæ‹ ÅùÒBi®mÓOŸú˧øâö2ƒ¾¯¶’–ö #§AQvN$ÈñZÊQˆØ™ë>Œ=}ü¸®{}à`†K’<.¹™{–G‹U‰0@Á>XÒÎópº7Ÿ¡ðY4…ÏØÃïsÿóþû1ï ';6seWzS„‚¼uË=з ¨PjVãf»ÌÙU$„XÒP¸Â;Y´v5“š>ì-`ñ/Ý0šxÃl1^wgà(ý#ýˆž…·â½¸E¯Ôóõ!åê & íÐ7è‹ôé-ÌNR`ü]ïÆ¡‘ž€HRÙl‰”æh»+/žFà4ƒíCàƒB/C±8žrr¡ËQð1ÊyÐdKòYZš>äbšýbZZ* Çb¦Á™ñN3D%¦%zƒ†(aמÒ18EÿÕ~]Ú¿gÏîWvï)Mèÿ¾ûѵ1¿²tU{ ù}¯ûòÓ{ö¬,…o ° 9±; õ„¡&üom²< ÒšSíPÉiA#]Ù¡öö³i>O£_¦%¦TÉf[¶:¬5L J_ÇW¥dî(:-œûhþ ï¼óBþ£cÇlŸÚ¡ÿ÷Áâ„ÇùŒgz÷þ䨱Oz÷Þ‡oÃVìăb¦8˜bÈÑdÔpÈ~³MÙì^ik Û‚œÎÁfQÍa5fî5œwºÕp °Ç(Â4vA-=Aâ“N>}ríÚ'é»ã§ƒž_p]»vtÁóƒöïçR¼%® ¬D?¨¯ƒ%e;Œ6]õà“{¢ZO2r¨MJT“Ðê¶´*ëÄðVm]ìq¥û‰ÄÀðD\!á=4{8qE)b"Mg }™¬b”NPU b•`àìûgY˜•ˆ±G)‹,‰*ÑÊ¢yVÔv»øhÿÊ™·þs]¢J†®yBÿ¥þÇ»ÞQøÞ¬WßÝ¿}÷¾æ-O<<þÕºúÃEŸaóOI|Ô¡Õ|ÿÖ-i-«~ܼcNmý‚¸/jÚ¯öÞ÷´§Ì`yÓçžž²CÉ!Š‚·BL³vœ:`E0/ÊÔnMF:á¸.tó~!›!™Pä²ÖÅažSä@®§ÐSîÏõúÊ#¸a˜<›ÎÍææK©'“×sÈç8·HAÃHˆ$¨D•‚IO¡·ØKï*ô3¤Ts&ñðÙ†o5O#Å…M—æµæɃÂOÅUÒ*ó&ò¨ø¨´üLz›¼-ý–üFú#9ÏÿQø_ñKò•ðw1iê½hê½àfp4$Șy™-˜ï#¡úß:Ò©¯YÁÍéÙþ ÷‹Ž[ºr,*'Å{Ì4Áâq8„xšS­<{!Õ£¤JùÒ"²ˆç 'IÕûÜoÛïNÒ¬‘å5RØ` šâé!:•`#$·yy„FÚ†Ø!³²É²˜ïmùáÁ ö±ÌC¶9ýÁÇ;i®ªOä§°\µ'䪱!æÅÙ¸ßFö÷ˆmK8¨ì·½Ñ#Éæ¢Ó©e'Ò$Ý[?tÖp¢úI*êàI{-êÕÚë:Odçºä~+ö–È4‰ÏH'oo^¿}ûúæímº~¥ä™ÛoßRð³î½ïçíí?¿oïÀ6îÖ÷ΜyïÝ3gþ¤¬Ÿˆ|!©×+¯ÝQ: `)­Ž šVº Á,<úô þ±S‡yâƒÍ¨5AlìÓê\¹2á‰Ô`s\¯pw\¸M w‡E’p[tX*ã`Y¤×§²3ZA÷K·ãé‚Cµ—(1·a4À¯ÆÏ=¸zûöÕ«wl×·/Yƒ®ýχúšÅkŸÐ¿üòKýËm#×,]²nÝ’¥k¸·7-_¾é‘¦å›&j{½ðË_¾°h¯óΪSüã©Uïà’†%KàÝU¿€(€úv¯_l¸yý₯~±·ØÈÏýMÖñª¢«c -_€N,Y.Y*™ì‰•¢Bp iU·ó­hE`T«}MàÊx)<<: ÅÄ„[Â¥PÁùâýgtMÉX³ <òfèëa¯‡¿ñfä¡(i—ó ó¼“@îÜŸéƒ3€ÅýŒ¾È‹¥bz`Ÿ@AúåmýÞqÛ ½3ÿ _ÅöaÊúóú§y›ñmlÝú¼£Úâz` vN¼ÛþôdE=ÈF"¹ ìå—{ü•%­-><% y×иHï"×µˆ†‘û1×úàfߌÖǯéZC‹ ±ö‘B\1=ígA忆Aøâß.Úßqt_C³ûÑl §î‹JLI—H¦^¿´Õ=@K[TÓø‘õGïÞþœó?þ­þ~nÆç‹\¨{öàòM >~ýµê÷¶·û÷[4»´<*¤÷©}§þšòËìœ~T}_TpŸ×Ÿ~çlÊ÷d0ŽÓ‡)èQO¨lÔ!ëÊ’ŸBÉS„VÄcQõ•ÍF†mx×€B_¶ Ôщ~» =Y4OêÁàr%Á$ÛLÁ$Lî-k¦~d œj¢ëÙlÝa˜<‰Éw›Šq1Wñ¶X˜&/4-2=g óV&i%GßKftäq/¶ßϽØQÎïl?½n'‰g|Õ6ðUtî6O˜o®Íº¿BF8œ¦lµÎåA8ð-Õyçý!Âj|góB¼nЯ~ÿþ.„Ç ðá¾»Eu—ÆÃò-Ö1{Ý ùw"øròxeÎaBB³u¥‚;åpu„ˆLgWˆ "ö&ãiÞì"ï‹ X°5€Ð(ѹ‚f¤å{ì~ëÍÝGô!÷þTÿP8ÙÞxéøñKäÁö;õ3€{á8ŸÏØ >CE=‰_â > &£œî@ìì×1»™±»yN–À% ½å‰\7]®ôµ„[!üT^ǵä'8'E_œ WO’ÀSìÕpV%)6¯ ËøÂC€°6‘ Ò.ò¤°Oz[úô%¹D¾ä/ñ¡UQP•®àXðaösñêØÍÝs©ãÝý¢«½ Òq¹ã.¶ã#‹Q s3zÍÓ—©6Ýà-((ª‚ªªd©GdZ03 ŠLw%¨b8› AÛbTÍŒò…D7¯óµVÊüD"Ùd›Â©nÎ%¨=¸’&õP5µ¯”¡Vq÷q ¤yê"n‰´D]ÍòØDp‰ÅI$Aî©ôÅCÈD¹H)—g(³!_Œ"Íøâb Ô’1}2žûñBÜçm}á}á!˜n™|u¥·ÕŽxtå#Dcż¹«1/65«J³2XõÙ(‡IæB¢d B“îä£ q‚å;ëø2l1FI×ð¾€'ü‚^4^‡‡?ñè£OèqïõkÖ¬×MîÊ¢ûš·ë—®vü‘;ÜñÁòW.ã*ôÛjêî­Ýñúó+wiG~ï÷0Wvº_­u¼äIà©npH†v¸3‡QáñsHä ‡Köÿ`{ÈÞ|™ÎË4Dz‘üa ¹Ÿ,%’ˆ$NæimÓÅ…ò¡B/Ô÷àùD!^Ôä(§sCø!Bq$ÊÆÙ\.Ÿ+Œ‹ÐD±‚«â«„ùh6žÍÍãç â"ùa´AL„9Šf+˜˜ÕñÎq| ÿþ×ï '¯ñçÌákW`>Î )«h€{àW ÛOœm?˰äçl7Ì+0mtÍFF²oÍ&)QÈŽí\”D÷…Ô*[e*ñæñ"ÿyÇÅ#•^9IWl0«÷%@L Aý<¡–Ǭ»Õf~ íæ›ƒÖÐT<Ä‚R]öP:åÞÐ|™…ªÔmaQaœ77â®ÿF!˜r!¡âÜ’kH¿„í-9W1ãÏ?ÖŸÕçã&<¾éÏ´“wߥ¿«ÿN?¥¿{×ÝÇGŽÄ[ñt\‰·Ž`¹ø*ˆµ- ‹Qü "K ±@±5”Ëã”ÉSȾÜüjàóÖ :(`Z•º¨³™Lƒ|åZXkØê°EavVü¹±4âtw,?ʨH=ûÂ~Jáß÷ï§;¡|µ¨—ž£„â½ç©žùü ÑîMO&r–ñF9pûDEˆ@éEÅAT™ÞÈBDj¦kè $‘íÔTÕäó5CÎÒ]‡~›ü*Ãþ« à|4³lØÆÙh`¼5Õ¢•H‘°Ì‰Dáq7OæòÍ`!Ü\p*÷‘:~Ž4W^Žà™æ6’>ÈXd§•SMb¹ƒúE.^_ð)7ð×tÜýÀIÁÚBv_éê‹™.¢kYÜ^–öñ¸P(] %ˆdq[A'9„IÊ!OoÀk0'ïêøj—pòï³ ½¾µ³¾Zá-¼ˆT3ˆâÌ¡C·¼¸-T¹©àÁXå†ViRGïÉÊŸìq1X¡8T“ʰvÀã‚d¿ÐùÏã‚[’^B‚‹˜S‰ˆmðWĶϱŽX¼ø®Ç§tC§ô;õ¢ßsnádÇI®wGzûWÜ‚Že$‚ÒX†?ärKi­xÚÌñ0Õö3GÙÖT–â—qaŸrK·Q½XÁqøþ§ÜÓ;.Ry5"€G®¦€ìàÑR."Ô¢¼‰-á¡|¸€ êOa°™V«¶Ñ@É2CðDFåäâßh1ó\ ¢6O™¯Î×ÈÔxPÜ€XÐ䡸û>;mòJVìÆËyûµS¦ L_:sÜ %w½1½íÑS&§$È¢¨ëxͦò%‹2¨:gØÁÞÜš·bâÄ”Œ÷¾lžN¡»„ÓüˆŸc<½¸Í„'x3Â<ýH# h³(d`$â“æP+Q¿d¨‚Ûð~!”â:…sã ,œ¾ú/_Ñ^Ò×èëöá_íÀ¿ê>î8Ooq3é¶ÞÍ0.Ú z'nDŽÃYt»'øøIIäâxDr¡ÛÀÞ7µŸ€ L‡>%pWt^$—öé);ô”}˜*&¾vAà]ú30¶Ÿ¡§ðvZ‡Ç)𮫿ӟYµÊ»‡¯³ŽÁr_ý·Í¶2앃¬ú;9~»ø|¹Á;×åþ÷°ß†¾ ŒtG,NñíÝãê»vô jkë¬wìöÛÎW¶ëïC¾XMëh GCBn&aͲó1Çnw³u¼2’CᎾ|zpˆÉI1éÙöC1[?A•05Þíy_xãƒüã7ÿ–¾s6ꟵêëøA|×Z,ÕÔ¶?¨_ÔÿŒ°óž'ñš ÇOÀñ,\7ŽÌùíÝÅúÏõ_é¿Öoä0DÇ¿eõÉ`‰lA‹½;¢ýŒ±uü f[w0O÷î'ÖßÀC9X <êÀ£‚Rñ1O‹[ÍM§ÃÔ¤šœN‡Ò„w [¢Üèæ —oŠˆŒ@M ŠŒŒÐ¢¸èH‡ ºI°Ë Jà?G@€ ® ¬žÝâ‚ÝpÇE¯f9M WIzº­bϱ9¸wsÂú¸5Á+­j²Éª d§;ÁI’ ÑV‡- š8Ãì·€l8AgÝAmšn5§À¶ß9û7VL‡Z{Ð@ÿL@02ún_ݯQÍöÏû»,¬³ FCÅ^É$Ä(‰á(GqA¦^¨îá„ú:‡›îBExŠ:Á9%tJTQêôÈè´ oä6ÈͦuîæÀæ˜}¢“b–æsÏ`.L 1…˜Cá®pw`DTZJÀ‰J¬³W@/WOwJÚ`¥¯s`ÀдQJžk´;'d\ÚD«—?ˆŽµkãx0]+ÿÕKäW~¡ð9øÈí¸„ÂI¶`Þ®ÿ”ÚÛp„¤4Å <¹B¨±Nª*$”®“‡~«uòçn²NþO/xïE,¿ýBäDSQ©Nµ§™ímÜmB_5UÍãÆYªG-âfp÷ÓÕb•îÉ¿OX(,R[@u"$¤peó‰$b‰‡ÜFR«ªYC‰›wË!f»Uã£MÔ$MŽUâÔx“fÕ¬C¸A$ƒOReºwb(]ÿF9xÇÖh„,1KÊ’=²G®Ž1Ó5ðÉäÑæ|k7”ðÓ„b±X*–Ë”2µÌ4r·Ü\2‡oæ‰ó¤9r­<׼мÐÚÄ-'ð+„eÊOL«¬ø­Öç¬wøöó³-ýI†…iø ý8¦¯ÐanßÔ!Ësòérpû•KÌW¾Mvá†Áú{Tüc^HàŒeg!ÛšH‚c…¯çôX|û—W ­‚È`0®ÙeÖçý nèDèÓ&BÞiµHˆ8E ²}ž¬&§ú­~¨48›flü¡;+±È¹]ΠØ\F_gnAÓ’¥ËZ[š×oŸé·;§þôOø?|ˆ]€ñ¶Áx5l¼(M¢ãI™œ|€Œ`¼!—»ú Htº]œÛϙїÛ]6·´.[ºTt^Ї|ø}П>ÅoŸ;‡½{ÉÉy2‹ÅJð@ ¸E!‹ÍŠ*†Ha6ÛÏ´=qbÛÏ©p(²Ä±éD`Ÿx1 /xý$çŸÅCõ7žeŸ7ö­-"¢}K!"fÑÊÌ¢•ýÌE¿¾YЊ7Bêê[8ÉvŸ>ãÛƒ 3‹ßâcÙo7Â!‹_ ¸g)øGÁ¿Ý UPºAtü8ݦÀÇê”ïk§õ‰lÿº ÙÐpO¸‰“õU³´\x4?o—í‚8΂e3ʱ³ÞÎtv­;°EÉîð8òÅŽZ‡ñ£—oß¾ñã'~–sKUû…ÈÊß¼¾¹d£Øó¼ã¹Qä-ð‹4Ö“d·˜oV$žãe²Qp˜7ªØºÆ)›U¢ˆ‚¬¹l¼IqYD§ýijigà QÏÉö´_¦»†Ñ5Yºž€-X¢S!¡î/8Òñä-}#ž>HßS§ï„§ëáü:œÏøæ[ÓŽP_xdÚ[o–ÁóôåG–k‡|ò«U­÷ô¼þwCà'¨C“éƒØÂ{„pä‘V5q~sù©Ôm 8—Á¥r©àAr8ç<òíÜíÂír9÷cngÄ¡$J¥?ê Ù™KjÕ­*ÝàL˜õ‹ü)¼?rªãÒ0ÊM\Eû¹w |9±Øs›ˆú )žà”œ Þr/{˜[í¥ (Q†D#¦G^rWj|(~¶³9(,*ö©8äö}^íõ¼m”â†DDÓÅØ´4Z¶_HƒÆþ ï>þýúw&ǾÝ~I¼ú@yºqcRxÂØ¥»!eæöÒÚ»«ƒ@þ ɽ±cBx@MŸ}é´/ÝçÎyà)|\8Mn¨ë±c{˜ð›Ã6›#‘-ÒNKöí^gzŠÙ–„ôÕ™ïÒèªpºê…’êµ&A²=r×äg¦Ñ³uª [¹kâSä–½ã†æ9"Ü6füÞqÙCØaž‘ç'›¹y`ö}ÜSè<$z)ïxMóÈ€ö÷¸y«}{g¼5 ð•A9XæU³,Ûy§5/N‚Qž Â·ØLO)ür´Á¡´p´0¡³ª„!Ôë‹#Ü(í×_êªÐ˜ ºUH¨>€ÿçÎ3ÿ/¡,MÀ?æÑb™D䛄ö3:ý‘Ç–ÚùÛ¯Vå5Eꬉ@@àâ¼1Á 7ÆÅ07{ý’R`q3/ ò,™)\ç¯4úb9}“Çw^bû¯1¯GàÝbôá| £çY´²³ßw¶Me¡h÷.1â+°Qú'н>R¢o?!J@éh…§_œ-¾G|[B\BZkŽ\›üPðÚ8q­ù¡Ε=ãÖôMˆ‹WˆÅmU,¶hKok˜Åv‹©/†RÈvê±E&¶ŽO‹Xwø~¶p ˸½JÇ@ïO Ó.ñ.¯]¼®ŽÑm3t ñ1˜»n«¶Ïüî ¿šTZ:iBié„-^~´õÀËí&–N›4©´ŒÜÒÚ>¥5jËÁ—·nÝ€[³þÇKš›—,m^xæå—OŸ~ùài®¤yÉׯÿñâ–…ÿ¢åô˯üþôÁg »¹„Åê‚«!ó¤`-´eÉÍh1iá,‹lTj×"Û¡g¿vaÍCwÃK‰\ÉØ²;RVb’‘)„ÊvSŠ)ƒ ”‡šFQò8ÓR$W*¹Æ4‡Ì•š¶š»-«ÕóÍíùäÝ«·’=íÓ…“›®ÖìÚįaô7¢£b>?è_ü"§PBOœ8šæQÆqã”»¹»~ê-Ui]’}•*}Ô~4Õc–@ž,m†§%4QíC6 C¡m#:,aç[¸;áü8´ZàüAÚ7|/†óå|:šÌž;öò£â9hw?¼ç!;ÿɵ+B ª‡¶«øMè0÷+”z‘Bïq{avŸŸ 2~(Z'¾ˆNÑ7®] ãˆé¨hÜ+ÞŠSš¥óh8—¾4 í÷6>í¦oèç7ðÚižþ'Ÿ\k—¢£TFÇ"»ÑÛôœÛ‹yiÐ¿Ý çT;à/=ƒñNüKnw”; º˜CÊøQüûBOa¸Ð$¼*òb_q¦¸S¼Öõs9F>«ôR‡¨ùêÔWM¦i¦Ýæó>óï,ƒ,›,¯Ztë4ëQ›l«³]´Ú·Ù?sÜå8ãìëÜæ<Ð3`}À«.Õu§ë÷nä.pWºOÚó§î ƒâ‚'¿²9ä=´WèäЦСgÃÒÂÖ‡óá9áw†oÿuøåsDk$Šœ¹„iÐTÔ È@v´‘jïæá›þ¿ ¡ø¶N={¸Sç¶Ãö>Å£'¼Ç®?é=¦6³×{, 3zÅ{,BqØ{LW{i†}Ö{lq>Š}ÿÓ‡õ Øâ=¶#SÀ¯½ÇÄ|#b^‚R>òcèvx9$»¼Ç®§xy8Îö (Ø}‡÷XD.w½÷XF1îåÞcä~Ê{l‰äþÄ{lE•ƒ#¼Çv8x™÷ØäÁ «©WW5½²AëYš¨¥¥¦¦kÓæiYU õ uå%³’´ÜêÒd-sæL­€¶ª× ÊëËëf——%«7<Ú>ZX2{ÖŒšêéZVIå×<8¼|FÉÄF­´²¤zzy½VRW®UUkµÓfV•je5³Jªª}mÆ—T×gÕÔÜãwêw8±¼®¾ª¦ZKKNïo\ökPQS £6• µƒRRÊàúìÆäúšÆºÒòŠšºéåÉÕå 9¬¥rÑɸֳ¾¼\›V>³fNb²ö-(NÖFÌœW[Y¯Uͪ­©k(/Ó*êjfi™uå³½¤øÆ`j4$ä?Œªvœ•hibVû|ãŸzã„|ë¹Ô®¹ª^-ÑêJÊÊg•ÔÝ£ÕT\ß‹ªæ—×ͪªg⯪×*ËëÊa¬éu%ÕÀzðlÁc 1s’ÖP£•TÏÓjaÂàši ±*A‰V D«Ð²¡²Ü'§ÒÒšYµÐœ6h¨„ÞAÊåÕõ ½&’˜Dè¬L+©¯¯)­*ñÔ²šÒÆYåÕ % ”žŠª™0I=iìm|MEÃL"£¤®¼¶®¦¬±´œuSVŒUMkl(§4¨ÝH‚i.ÙXF)™SÕPYÓØÄ̪òDG¨3D Ý6ÖC{ÊN’6«œr­2©¯Lò#‰Ž™RS§Õ—Ã<@ë* ÕËþuCSâ ÛZ*èÕhN%(Ö Ði¨h¬«†ËÙƒe5Z}M’Vß8mFyi½Bù«¨™ ÊF*­©.«¢|ÔRÕBè®dZÍìrÆ¡EŒ€N%¨®i€i¨7®ÒY©íÒãžV_Y2s¦:­Ü+5 ¬¤¤Ÿ5Õ uÚ¬šºò›²­5Ì«-¯(’ ¢ºßU2¬/«ª¨¢ŠV2³T Ó’²2ƹ!:j %u@WãÌ’:•TV^_5½š‘1ݰUxˆjhI)tROŸðÑSýH´K`+™yó¼Ïøèèê È«ž9O«òSs•²SWNÿw)Ö–ÔSAÒyñ™G9è\y{hNM]Y½Ói‡1tlß 5†šm ÌLž×^¦•ƒ%Ñ^a¨Lf×TuV>·,F+©­ó*™6³œÞ0x‡žéÚ5)•% ZeI=ôX^ÝM&T뺴»Lk¬.óÜEªÊˆ38ü¦Y­¯™I­šM¤m&õ`+¾†µ%¥÷”LÆÀ«kTªªÿœRu X>³‚52[Ë7¶P?.§pRfA¶–;^Ë/71wxöp-&s<œÇ$i“r GŽ›P¨A‹‚̱…EÚ¸-sl‘6:wìð$-{r~Aöøñê¸-wL~^n6\Ë;,oÂðܱ#´,xnì¸B-/wLn!tZ8Ž=êí*7{<ílLvÁ°‘p𙕛—[X”¤æäŽ…>¸-SËÏ,(Ì6!/³@ËŸP?n|6ô1º›;6§FÉ“ L@GÃÆåäŽY˜ÂÅ$µ° sxö˜Ì‚ÑIt6X.ÐX“d úв'Ò‡ÇÌÌËÓ²r ÇdgŽ¡m©tFŒ7&[Í7aìðÌÂÜqcµ¬l`%3+/Û  X–—™;&Iž9&seÇ7mf°Ó%•>0"{lvAf^’6>?{X.=9æd+d-Aö ‰.@;ßIꤑÙl` þ c”1öÇ»´ŸÂq…¤LÊŸ¤e䎧3’S0È¥ó9.‡iÀ'¼±^zéÑk7j´¢O{ž™ާdÀµ[[Ð®ì¹¥åµ T·½Æm¸FæF ߙĴÖp Â#ªÁpkìÂX‹:†wë Ø4'®—¹ÐnˆD†ë-›]°žº’š:µ†:“9UõÌÒ!Ϊ1bžV_2ƒ§¨±Và+KfÂcõdv3(Õ këªà‘9uU àL´’F¸ZW5߆ë¼aŠq uq@Gérýuåõµ¥ªf—Ïœ— mëh,c”TUV›åe‰¯´a*4hÓYçe5 * ºdMUâúÞÐéÛbÙ©Ò¾ R»pöqz#ò:ùRÖS½/fÜ võû`%͇•Ôÿ¬¤óð/ÃJªa°ß +©? VR»°’ö±’Ú |¬¤~VÒ¾=VRý°’¿ùvƒKÏÁIüPpIõÂ%í{Á%µ¹,oü¡!“Z]£}oȤþ IõB&í»C&õzȤ}ȤÞ2iÿ dR 3'Ž5Ž’9ò;¡#µ‹óT:Ò¾:RýÑ‘öБzSt¤}tD•µ›¡tõköOõ›ö-€Ê€OwìðMƒ¯½‡5¾’¿±r•2§êžª”*ð s“k+kS¼nìºÊ†jP-š‡êPšŽ*QÒPOTŠá; ¥Â+ަA eA›Tï:TŽJÐ,”WsQ5´O†£L4^*è쫞•Ãw9<3>Ë ¥ú-Fí×9j!Œ4Æ¢ÿÅl5´¦t”À3ÿ܈Ãáh<75B‹Rh[Âz+gO”0Ž4è¥>k¡Í4è· Úið| Œ^Âî]ßÏxÖK=PT¯{¾æîͯNdÖC¿5lÔ4 3õïÖúæ=T°' ^¼3AyoÊ¡x•yÛφöÉЮ¾ë€›rölã;ú(‡grüzóÉÁ77Î8½Ge[Îæ§¤Tƒæ@[:?ŒŒiO#àκt¨±›}7tC×Íx7欎ü¥v£6«¨Ï÷x©ßÊB~x»¼ù|wñ\wTvÔÀ®P-›Åd}\«øG´PÎòY³Xo]Ú_Åhªd÷ʽ|Mg£T{g=É;ïÆl£:fès£«†Í~5{¾ÖkaÆ5ÐkƒWǪ¼ZPÂú0$­zûl`T\¯O¥¬ÕC£w_´µA»¡ËåÌ^ Ý‹ñÓ’6sôÙ2ö]Ïè*…gJ¼ü©Ì JACg±^ØŸ|*àh¦×’zvÒØ5õ+”þÐ_Cûéˆ]2¡Wj™Õ”Á¥ìi5eŒƒ¦kÓàn»kŒ¡~ÃI^k.ÊY/†Læ0¨d^§Á+™Yìš?G>êºi¥Am#“a’ßìÐãYl>¹VýZ´ÇÐ]ß×˧þòä£RõrÐ¥a%l޾=Ýǹ^7£-É;ß3ÙsU_ãÍÕÎÙ©c~¶„ù•®~}Wê;5Òg/×Gr¯Ÿ+g\øFšÃ¸*cÏÇÜ$Ætò}ý*ÜóEÛ?-3l&ïºø2Ù{­^;ðéÉl¸[u‰•£¹LÎÕ^K®…—½J˜G-ï|ÂÞ š}WÔ›ZJ%óðû®÷ÒXÎ4éëôÄçënæ»ËX$¨fóî/¯›IUõ“œÿ~W[­g^Ó«»¬ÍgI9ÌìÄuÞ'º÷XË4úøœî1#R­R;½ê¿ÒS}=WÓ¼6Òà‡’‰²Ù8ãÐX8£ãŒƒ³B4 pd»— ×4Àqpg"œ ‡«ÃÙ¼d²;ô~ ³ÆIpL{‡&°¾Œ> à“ö]Whß;§g£¡ýXè‹>›&³1²¡·ñ@Ù88¦}«yðímGŸW&À9=( 5Æ O2Û¡ÏQZ J ázרݩÊe#ú(gÐÿHïÝLè;—õGéObøˆõÒiH®€õNeD{¦}Šòؽ:¾ó¡Ýx&ÏLƳAíXÆCÜ7xÉf3aP4 ¾óalÚbÐUȤ@G*ô¶LbóHùΞ§£Žf­ ÊÆyg™wõ’ì•¥A•ÿÄΑÇ3þóà¥1þ áJ!››LèßׯOwF°(Ý*“ÆÆ_&“Ã86BkG¥Hå™×©q~³2ŒÉ‹Î¥|8)“IdüM9ñõæ?;7Óµs„Œ¿l&©<Öz<È1Úçv^1ô1—ñ:Ì+k£OCï Èó“î0Æ#ÙÛaÔl¯Ne2Ùuç‚ÎÓ$FÆ dz?‡ùɬköÇzg×GO!¹ð&R™Äl1›µÊds=¾ÓFr˜ýŽñR>¡Sú|À¯~Žë¤¬»|}väk÷m|‡Ñ—oìî38œéSž—ÂñÒ0Z¨ßЯỲ!®•²<§¡ÓowÜþ¨± úãÎ$?_ë /<‚µu]»®«F¶dĬ®\Ç»Ý,ÃöeÇ–÷¡Þ.ôaøn#'òG½e Ÿ°¾•Ô0XÓ‰Læ°»]1½Ö[;©é–çÑ‘KXìOêË‹ºú2pe C t´ú›Hóë#”zCfXËâ½1ÊvÜàE&”¿Fo[z}þuÙ°¯þsãh7/7Cþò¯có]ëÍ¥ª˜„)žLöö[‡|yY—L¨ŒºÚ¬ëf½KûhoƒÐõU*ƒé~”—1Y«È¨ÑÑ1Uæ¯|5®ÿ|Õ釮Ëþ7ÕƒÔnõ ë‘׿®¤Þ´¤ý›ëAê·ªuGò¥~4uÕ:|-¿]õfõ?VWÒn¨+©ÿ]ɯ®ÔUaø¿YWR»EØÿ\]I½I¶ößPWRoZWêâèßSWR¿¡^ðï©+©èŸ­+u­:ýu¥.{ë^WúºèûõÕ%#?7Ä[uIEÝ«K7¯nü{ªKê7HWó“àw•Ie:v#šù÷W™Ôÿâ*“z]•©+×ýwV™ÔXeÒþmU&õŸ¨2iÿ²*“Êd0zŨ5¤ ÷ÿ}µ#õ¦sþŸª©7ÔŽ´ÿXíHýÚÚQW è__;Rÿ‰ÚÑ7õû¯­ù<ë×G”+>êw¨øøWi~ÈŠú½*>7ælß­â£úU|¾©îðCThnè߃º* *‡ž%=W)L.÷À;…ÑVÆPS2ïµp­;ûæ=gì7ËÆo ›üµq‹<×®ê䊋ü=ž|•F¾l!³’¿êä²Nþ_<ùÂJþÒB.œϒ)|®“‹-äÏ-äÂò§+äur~ùc9§“ÏÒȧgÇ Ÿ¶³ÐðìxòÉÇ)Â'WÈÇ)ä#üA'¦‘ÿq‘ZÈœv’ßßON½L~§“ß@óßÜONž!œ¼ŸœAŽÿ:L8®“_‡‘_éä—:ù…N~®“c-äè‘Há¨NŽD’÷ÓÈa¼³Ì!¼NÞ$‡tò–NÞÔÉ:y]'¯éäU¼¢“ƒ:yY'dS¼°_'m/½,´éä¥}S…—^&/-â÷ý,^Ø7Õsìóð?‹'/êä…²W'ÏëdNžÓÉî2ò¬•<ót¼ðLyz—Sx:žìr’§€è§®:yR';t²ÝI¶éä‰Ç­Âiäq+y¬Œ´B“Ö²U'[5 [tò¨™l~$DØ\FÙd !›ìd£JÖɆ‹°A'-Ò 5·õë¬Âúžd•¬½BÖ¬~YX£“Õ«¦ «_&«ñ«~/¬šJVyøŸÆ“‡t²òÁda¥NL&?6’IV<`V¸È&².,/#M ©¦x²ÌA~¬“¥KÂR,qÅ:Y¤“…:ñ\ûÑý÷ ?ÒÉý÷“ûÊÈ‚B·° žÌ×É<̵’9f2[%:i¸B꯺+äÞ+¤V'5:©ÖÉÌhrNf8²„ãI•N*ï'Óá¤B'å:)ÓI©N¦é¤d)¾Bî2“©:¹C'StR4YŠ®É*™"LJ#u2FžE Ýd<¶ ãƒI‹Ü>*@¸]'ù&2N'cÇØ…±:c'y: wFëdT®]@r#,B®Œ´:Éi!Ù-d¸N†q}„aWHÖË$s4ñèd¨Nn»Õ)Üæ"·± ·:ÉÁaˆçš ¶A:¨“ý]€+¤?»ÐßEúe˜„~v’a"}#Iº…¤ÝbÒtr‹‰¤¦˜„T I1‘ä>Šl'}’”Fz÷Šz—‘^‰N¡W> endobj 236 0 obj <> stream xœ]”ÍŽÚ@„ï~ 7‡vÏŒ½H‰ŸEâ…Í{ –‚±Œ9ðöquuB”ƒQyÜÓóU÷гÍ~»ïÚqöm¸Ö‡8¦§¶k†x»Þ‡:¦Çxn»$—´iëÑÞô·¾T}2›ö·1^öÝéºX$³ïÓ·Û8<Ò—Us=ÆOÉìëÐÄ¡íÎéËÍaz?ÜûþW¼ÄnL³d¹L›xšò|®ú/Õ%Ît×ë¾™>·ããuÚò øxô1}ωR_›xë«:UwŽÉ"Ë–éb·[&±kþû6n9žêŸÕ0…æSh–YNZTÚ©. hÏõ9t຃.¸î¡KÕ’A¿©ö+è9ã5çŠñè5×5çFµS†-µæ|gNßqùóŒ:‡&¿+¡ÉïqVnüÈ™ÿ;4ù‹4ùKœ•“¿ÐœÆ¯ñÆÿM~¯{_Ï%¿h<ù½Æ“ßk~òžé]è¡@… ° =8]§¿†¦ZˆyØBÓƒƒg¡š =ÔK衫ЃŸÐC¡Úz {é!(=”è¥ÐC‰œŽüç:ã§³€Í?|9òxw䨋#¿ÇYŽüNc¬ª_õêYG°:zð蛳> ?Î<À›³{¤Lvãí¡¦Þîzèé!hŒÝ#ä÷ÖÔÑÃd9<=ø<=·h<=ˆjz°yò‹æÙ0§òl©ÁìÉïÐo÷:_TÛÿy‚üs׬NÁ|À_ðÌš‡ðŒÅ¹Á¼ gÁú†@/¥Æ˜ô>ÐKPx‘|®{­kB6m0Ž0/ÿŒ¹´¾Ã4ât¨êlÃTk»˜þ¼ýµÇ6}~¿G{ endstream endobj 237 0 obj <> endobj 238 0 obj <> stream xœí½ |Õù7~Μ™¹3s÷$÷fO&! Ã"7…@HbȪ¹$7$˜ä¦É ˆˆ@[wùኀV)Ek1uEDĺaÁ ZEJ­ØÚ6¢?_ÜbrxŸsæÞ,Öª]ÞÿçŸñÎ=3s–ç<ë÷yæò1ÐÚîC´ ä©iò¶Ü¼èg7 „!„Ãj–t5÷ñÏ¡ýG„„ªº–EM=~4!q4ôyhQ㲺¤ÂOÛàžgFÕû¼µ‡?Ý4¡Q_ÀóÜz¸á£Í&„FgÁõàú¦À•ùCWÎë*˜3¡Ñ_ãÝð„}7B9x~{“÷Ê–õdŽC¸Ö›½M¾Ø‹çÁõP„&ØZüm¹hõY„Ú.bÏ[Z}-ó6-ì‚ëÙ™~÷0ìÏM™] D”d“¢jf‹Õfw8ÃÂ#\îÈ¨è˜Ø¸ø„D=)yÐà”!©CÓ† O‘‘™52{ÔèœÜ1å7~ÂÅ=ù“&£ÿgÿp…ëÐ^ôWhO@[QIDup—}?„«P'<_=W‹×â*øn·!ž¯_…)< -D?‚VЏ ïEO¢÷aôj¼Fš"Íe½ùBl®Ï¤çðÇRž‡f‹Mâq—¸ZÜ=ÚÅ:q5ê€sžðšx¯¸\<,.G³e¸”}h#žŠ¡ÂF\€£qð*z–Ó?oÄã¤W¤WÐ1t W@χÐRAÃ/àOp&žwÁ¨ÏÐg8®r„|ÿ(^^#³% mDkq\íE¯Ýï£OP›³¢µÒ1a¸t =‡ÞEoÂ}„cÎñd„t ŽÑ´8ó.¤cr„)I¬¾@ø'Âvá < p„áDàæeäU±Z|A¼žw@åF‘D2 ÎóYéÞT¼+×áeÐËaNá9áqØã>tö« ó…åÂFtïÄOÅ]‹wŠÕ¦…b,Ú(og£ÓŒ7è5áUàGçÇÍèfy$úL”ÑǤW‹;ÇPŠô,˜A’iª†ÖᩦŸÀNƒ–£xúFҳƽ9­SÉ}@» ¬ñ /C¯ yd!º—wàÇÑèq–ÈÇL²$£tÝÑ!¤”Ôvx.™­¿8'iDú9—ºÃ¤w Šë2ýñ³g+f‹±Òœ)®ƒ¤(bÊ w/ôðÝéÓ*fëã¡…Ái « àæŒÙÐdWpîðglÕ)þ+©îÐkêõ›7 {“Ã7vÓtºN¬“¶‡3¡Ä½HÄC€ 2ò(V¤e<Ú99ŽvíÌ w&9S’œIu"ên#±ÝïÓu&ÛŸ´Êiܘ@‹ø.hey"Äýò>a?Z£ì×°¤šˆ‹£»3ûèÁƒ#Qfç8²uX+¬-V‚„ô¡c¯hïiõl¶}u\:FOпÁçAz‚­‘ˆ-V#½îI%ñ¢$ ñ „ì‹2Pä§”d Ä ‰Èä8ºg ŒÌckgçe¯LéC“C ~¤ç$cÏÕÌRpèB–àf uÂ*áVa³Ð<öÃqŽ?òãc8¢%ðV¢‰.ŽãHŒ8 ÆÃIš˜‹Fã<’'f)E¨—±Z¹R¾ß@®—n×öm Ä»¤òò(~‚ ^€€ *NÂI‰`Ø‘ØÑbºT¬îî"òW› ?2ûì{’&2mE“=IÈõ{¬RŽJ›,øÍ¨Ma/[ÖÇźÅeE‚Õ>.X~¦ó 3 6î8u¦ó”ƒž9í8—µ'3~b¼€`WR•;ÆiÃtät $I£‡ J–M’Öý”õÞ[~ôንt%=BÆÓp2VðzëÒêú;„Qu×\3¹€vfÄ9@pKÜQ·¢½ÙЇ‡À²:V'ãq;mªlBd¿ùNÛËên“&[‘âstO믚ýRÎî¿hÎÁÎlÏ©3§º:ó€æ,œÓ ×Å@¦;’tf.ȼé.º×î^6l(Ét»ùyO·Xýx³HÁu¥0X7åx¢¬àдãaG\/;vÛ°`EÅN«ÕîˆbºxT;s<¬×éÌËžTG¯Šfž÷âÿÄçJA?ó SehF¿‹<,o²qê‡_‰Û4èeçz I¢¬ªÕ.ÁŽ’Ý/íØ¼yû„ü¿ôø]í‰7å2+›ä¸ãgIÆ&a¤h‰ˆ´e6ÇÌÜqЋ²Ïœä]vF <£5™£å‹p1ž*ÏÂsä ó"\/W›ŸÄʶh!Æt±0ÊT"” ÓLa®©Nh0™°XÂ÷§½x§ˆ›heÏ»ôéX7Q×p^AL~B^²Ø—æ±É'Ðnñ~AÂà2Š£{<÷F,NyÔ µZmQW©b_¨z×1/@7ŠÕ_m–#è;(Ÿ4ˆOf¼ÌS¤Å›‘YWTľ4p€²o2Éb< Nñ‘Ù—H`D1ŒRT™ QÄ'5oaÉ„ÍÇÑiZ³KçuDp›43›bh,f‘Ô ^òÚˆ—¿ÿ^ß;èµÝ_Òk…  º—öœìy/¤÷1]¨;ûž\¸–ùêlðÕ;ÃÐN˽ÌW°!#\ÃÏñÕ3ŠŽ wDgFOŒ–˜\a£²ÃrF ý6©ë8p ã‘Áõx=âè"¼A|‹vwþvcñïXÄ‘´–ÞE×ÑZ|/^Œ¯À÷r]šy[<è’ÿØ3UŽ7)& ¢˜´Ñf :p´ÑªFˆÀ0º²¤hèà ³b1kªb R³ }PŸÌL•,\•S¥C!=ú'éÏ.M× ¯²´bÍÇåZ£¶Rã`I‚d¶_zM;¢\’>Ò"ÝBø¨0É!;`š05Bs›‡`P )M¦ W›S,™¶”ƒAE¤±òXÓå"ËD[±PBŠÄ)R±2Å2‡Ìg)óÔ*óËå¶:¡Z\(UËÕ¦j¥V«6· -b›Ô"·˜Z”€ÖbÀ%ÿT¹Q½Î|³e­íNåË­¶íÂd»ø€ôsåu»ùA À/ùQå ËoðAò²ø’|Lx‹¼)¾-½¯üUý³ùo–yšÅrµâZ5Ïßû4Ÿùô-ºìé½²—în"öˆB÷W›‰ÐMûùC3ºØ.ìWö‰h&–TÜ ‡¹“f`{Àþk¼—<.v¨Ú3æ'¬OØ^^±¾b{Éþ†ð¾×›ÚØðpœBšˆ£!ÇP¯Ž¦?}Ïá–y3"!nö(Â_å>u×ßÇNKä1lHÎRÀ/gx\h¿ºïw+‚[CÒGr«ÄðÌNCGy¼ÞUÊ1´aNÒÅHw˜+B€Ð›†… 7u~ùŇ=Ÿâu¸ O_ÚPW×p%í€c±¸«ûG;ù‡ð oÀG¿øÅôs_ÀËäŸ t¬¬ŠŠ<á(VµºmiQ+ãdkRaâ ª¡ .@B1þСCÝãDgTœ¾%É!l²¦Þï2%íŽI€L#;›¡f¸Ø,ì”l’ãqRÎè1¹£’BW½†@™?!k~Sš€7ÖÕ½Ãx3›þ–n¤°iÓ±… èc´ŽÇ,Ü*GôÖ1äÎihµ'\0 ðU•%,Ê óÛf£ŒáìC]žYnÉ-;,ãÉ8S)™fšGfK L~²HZ$WËõ¦jËJr¥i¥©År­xü )2UÈÆ)“„iJ•0Gš­\®T uR“Ò"\)-WV*7Ik”_*áÌ:9”Á†çŽŸéI¢iBÏNîýO I=ºO ¥={Ö`$é1³ú‹ˆÝ„k°0+¼7ŒðòÊWeôŒ{°ÆБÔàI‹u…©¢ é²)Ê~\?2ˆ¼œ°;.Ü„"Â,ŠUža ›’kw 1ÒEð]ñÌwug†˜Ç‹ ™ã!¯Š¥ˆpD²4Ñž˜š•Z‘Ú’º*õÖÔ‡SM 0ϪY‚}1%JINC }Y·ødÁS-ϾL×c\TVçèzO墸¬ŸôËE]d{}Óé÷zf S¬q1K¯Ø±©çmaÊ“W<ð3ž‹_^ÝÒËað… ôÇг“£Ø/Ù ¹_Æ£Î,ü¨CòHá‘w/‹¶Ò±®áÁÚB0gHx Ý/`+rÀ<Æ0H¤j©EZ%Óž"È_v¢/“näzŽFzÜ–&óN´F ·š°â!š *Â!ov†ÕÝv!fê" tƒXjôl{…•8¤‡é{”®Ä«µ\uU ¨ÅßþÞÓÓ%7ÕÖ6òýo{“!~E£qžX;d–ãG"×;ðî0Y@áv«³X€½ÄY£!BˆB½•‘ØUÌ„ƒP"éº#PÛ›GÙŒë›Ó]œÑ²Šmú’_7xïj™G?̸~iì !mÒ¾Ú¼•WG …xj—õEÓÿ`ƒ‰ê& ]€À§ÌáÓàT§[ìŸ'e‹â+ËÿVÓOç´oûòwô8}ýèŸÖ®Å櫯¹nÞ wýñ0Ö±m9¥íôà˜‹J+ÆOŽJÊ>´÷óÿÍÍÁ…¥Ó«ÊŠJ’²~·ëäÇ)†Ï§³¤ËÀǰÚÅ8O|_íâeÛzü²;>f’ÙÃ+ý¼¾ãÔ©sË)½Î!èïÃûÉUc.¾ŸËß!  BÁÖž=²¶­ŸÃ'cX àÕ Ìò?i>ÈÙGŒÅ¡"7±:¢Ý;‰c§z/Y>‚äácäAÇóAAíÉŒ½<6¨}¡ÈÉyl¤…¹c¤ù‹ÿ¼‚ÞLKñܾâÏ‹¯8ÒöÛÎÎß¶¹¢rÌEx öÚrÑúJIý⃿Ð/ JPo-ü͹µÌûÏ_ËìüǵLç?¨en¸#TË”#zvÅLƒŽe@‡†nñDð˜¸Ý Šà8ÅS,(VG“h1ZŠ–Ç™JH‰i.Y Ï6]ÎÃâJ²D\"/7Ý@®¯—n6m"w ¼Çô‰q ni¬R KS•YÂe‘P-ø¤¥B‹°DºZ¹^¸AºY¹]¸[ºGq àl!{ÞÜsB(£ets¼Ýà{@Ö[ñ딽ëx”° | «÷Äyl´[Ü[D> ÞÊ·Þg•:ö«é º®0bÉ„”;À[pÓ9yy®‘—ç²¼<—åå¹ÌËŸ=o^®V±´`Þ“œ"š ƒÉ!9´HÔum¬0Q+M”FiYpxøq™p™äÕÑ:àˆ‘MRU•̲Å-D‘H¡K‰PcÌ1–Ta(I‡J)Ê0HÓs…\’-fKYr–)KÉVGÃþ'ÚŒD½PjfyÚ\a.™)Δ*åJS¥2Wi^`ñ#?ö ͤ^¬7ù”zõ ­ÙÜ`ñ[–’¥Ê•êó•–L×*7Zž$ŠK(û,ÓB)A§ øGX€ü¡ >n¦›iý_z†¤yNœÀ>]ÃEÿW·2›¸¨d¯¢=1J<Ȇ0Á¥([Ðn²ERXµ ÉšãèžDÙ. Êvöæ½ü6øZ0G˜ejêLË„%¦Ÿšî0)ˆØ†,Œæ!$MÉ4ç)ÍS•ËÍÿ£Ü§™„Í»ì²yÇþh´ÿI˜rõ ôúFÏjaäT‘u䎊²é—Ѓ=m k¼^ºLˆ|`ÍïJÇönÚÀu_ƒ|&è—ÑOÎ}gм3}vÀ;Óµßîi:âŇAK"q‰#¥DEWŠQ1žB¦ˆ…ÒTùR<›¬Uœ}ï85ü| ¾ÿ¤çMš6»K,c;H¯´è5ÎÛd#‰¹ˆ¸ÑE’*›Ø¸g”8dçè`aÞåQûŠešTMt%u°WÈ_•‰»øÜMô„‡C£=òÚ!–™ÂBÞ_Ìý“Aá¯áúÏÕ⟸¾·‡r«Wøûágïûm ó—Ûš9)üÕ¶¹ÂÜbðj»÷Å6K'Œ×Ú=×µÂj áèOœCÂe‹Œ7¡ûmònM€´Ë¤JVk¡ÝáxgZ‡µw÷¼þ?¾³ïÜ©ìîNÇéì0þRNZeZ¥ X™¡·®Àk FIa¼QFصë« Œ Õ XÍàáPÝqC×{²cc„¸èxw¤;*>2ÒíÖÂÑNUÞiY©¹Ã£ˆ#.ZF¢8éPMn3‰7Ø`$2/èX.“–—×ßUè8æc£b£cbbccâr]¹îBW¡{–k–»"Áçò¹«콆-$-Ô€#Ó€á䲆†e[éJ¡§âðµ·–¯ð¼Fëó£ËÈĹ‹êfÓÕô³ÞoÞ¸s߈°•«élÜÖRÉq)¨4‰çtÑè2O¸­ŠVd5ã•vÕ^èrVÅ„ª;Ýãñ¨à w«B˜m‹pB“6‰èþm·ÃÂê;ÐÏñ¡!óãØý±8­Šm‰­ŽõÄ*`ë¬0Ñ_$}By‹©¿™6V ônz½»£ƒÉ†¾ƒ3ù|Õ¯ªó°‘O†ìÚ-êñ xY2Å˲¤Å+X²ÊÚB¼H0|”x"-^ÕD‘¤h"Ú©ˆkdð‡ ÜFªLÌŽ£»A_ ƒêhgXPTA„aü×ëø%s«¢´Lm–V§­D+ñJe¥ÐnÒ6iÏÀqŽ“š#L‰S-TÝR"±*¾:›ÌgI—Êõ¤A¬cuK-ÇW‰íÒr% Þ(^']§Ü¨n×Iw)ÕG•'ÔWÐóøyáÓåUõ-ô~CxËtLy[Íd8#‰$a~±¨gûåt…†_Ò芞xÃ!ì ³ ^H* ƒÎN:y= ü1Œ€0É<Èó°3‡²ð(Ð(Ûzþ÷„tì˦PýOàµü=…ýßß]è_ß{½àk=Íô¬ˆyËdÆ&iàk=gŸ?;øÎ×ÞèõcùÈ×ç„g+ÄNd©‰Ä¡f’!ª®Ž'£ÔËI…º–¬RŸ!ªSdëª+DˆJ¬6?ÄÁrŠ2paŽ˜£ŒÕ*¬>´Xö[Ÿ~-þZyR‹1^§õþGº™úéý†› e÷ãb\„ïºzdL© t Çi"~—óØ÷ ï 'Ça ¿DÂÌE:‚Û/znN²_ö0}^þ5r°x”„¦xR㊊r´Ý’à¸Í~—eKøš„›uÐkTÁm‡ð”€“GQG™¶öYö¾ÿC°TVwJ뚈û*L,ýa¾ÃŽmØ%ÂóôîI‹=y9Õ³.Ù[·ìÅgÀÆ.ó 3°?þbdåÊ…cGÏÏ(*Ÿ< 6ô…gÞ3'ïâi#ž¥÷²}¾…&HÇÅÀa&zÜœ$òky âŠô`6תN F\8KǻǓƒ]Wéúh>܉z9`.‘$þï1ÉÊãöΞƒÙdoIB%Ï“W»èÈN:² O5ô›Æ‹ˆÞÛö ,"!“ñý(¨¶+)‡½§Ç÷íãu˜Y¼c6rò`6 RÌèݱ°¯çUX™Ö¼_)¶ÿ/VÂûý²€Õ`’„'[—-k…|YïÏ ŒšËz²4ô ‚žá½?,(ž_³ýËÏ ¸ì.MÚ‡bŒL󌌖ðíq‘¦p»ùö—JÐZ§51!>.6&*ÒætØmV 85ãx1r„[ú³ì£ãYúdœ³0I E’\Iü3(œr’ø‡9²¶+Þ^ì¢â8ÚQ}¢š~Q}²šþO)¢ïãÊj\A¿(Š´UÞèÊcôô›t5^É>oâ°cxuσô4“Å_ ¾ˆ¼î7Ôã";Ea§´ÆáS‰’cŠ’0¸Þƒ*b6/ùuHü·vΤq½ÏÃ͸ê«N¬‘ç§`yÊW9ô3.ç­`3'Áf¢ÐÍž4İ]$† à.EŠB¶[íæ‡ÂîÑÃB”KB6Åí±6m ð8„ÿ쪛y½ë;ó¾Þ3œÌ!r˜{X$Š”¢"##£’QrdrTʉ̉š„¦JE‘EQvîŽÂ`sF¼ʄ۾zNH*)ZÓ>÷«~L¯ÂœvÍË8X‹ßtMAêé¥xÊð¯_õú#|¬6ÓÅýÂ4OJtŒ;Tž‰y"®·@—=Ò2 e†‡'0M=ÕÍ4þ ]G°Tê5».O¼‘"‹¡Z8°V!9I꺕¾üs^°Ù‹|v.[ñùÕþòãã¥ý]˜í/*âE›|+Úѳ}H©Ý“Ùe1z ”—áL‚œ¡ƒ˜½ubæú^cÚàrô]Mf y¼f ÁnÈÖ0XêD²ã•ž ¡Ò÷qÕ{Çj>¾G7ãjÃF–Ÿ}OÞü‚²p®gŽ[ÍvUÑ슪°ßm‹Ã³ì£¡8-Õ«¥d¥*XÍ#Ô$&Ü?b‹-iSü}1÷ÚÖ‹jê04ǃý˜³ÇG l±¤F³:-#ùë࣎ߜ6òø°W”¼Vü›SŸý™±ù´“ßwžïýp3ß§²ßøüTFì·ªÚ5›YM5g¹Q"I£!’Æ›ã²RP¦–iN2Q›hö˜¦iÓÌÓ2§eÍÅs…™¦¹Ú\óÌ¡ó3ægÍξ<»5‹LÕ¦­Á\;dUvºjÖR£Í1©ÃÌy朸¬ø¬„œD0Õ\’Z2ôR|©0ßø1ý’>µvë°¡ôõyÏ_qÙŽŠé3GÞ?éÁ¥“Ùä$½¸hgó£ôÔt_SQv¿ýÝÅ9‹ÇÞ0>žþ-+c\nò¥ôõÌ¥Åm[ÓÒøïrñߣØÁó-ôÄXÝ;‘c§é^´ÞgÓ°52ÎÍø„å Sœ†¬/šþ…g}ì­””vnÞÇð’ŽK"àd™È/T¼]RD&h²…áH7YŽ ©ÐAØ*O&òä5AëùìtÏg‚&‰=g:{ΖNýSÔA?!¢ÒOôØÑ6Óý6dvŠv÷ÁlÛX擆9£Ã˜%‚/&"}sÃíw¬Çi«V­¤Ÿ|ŽŸ>~?ûé‡t܉t¬—¶ÑO„/øÜq+Ú&ßo³š4§Œˆ¯ÎÐÄá¹L“S“Œ_l[8mý·o ŸœÆ¿9q?ÿá§tâñãtòçÁü —=½àóâËíã?E‰ ÿÉàëo•}Ð÷¯Gh¼rH #¥ï” dj¢ñýÿ‰ øW,¾Šê¤¥h¯4%JMh6ù=$í‚ÏJh¿Žb…—@uh¶ô$š/ïB{…}ð, %Ê0ÎT‹¦°{âsh1Œ–·¡½òr”*îãý’GÁ¼Ñh¯2 =(tÇž€{»Ðf6Ÿôºƒõ“N lÍJô…ÞW^GİÞJ´×ôÌ sÈ#‘&µ#h¨‰ÑK`9 æ:†³gB' ³á(•T"¿¸ Öôûˆ°INût³tú |¶Ê·¡:˜ç5ø¬–»Ðr¶¸?>÷Á|©lÙ:Ð6Σ!h6ú=ÎÀ‹ñN|C™ð{2„\Cvˆ?+í”>ï4U˜î4}¢ŒWnR>PE5 ®WUÏhãµ­æ\óOÍG,–%–Ö€õˆÍb»Ýö‰}ªýJû:û‡ÅñcÇœW;ï Ë+ ÛöbXg8 ¯ßþLjʈ‡"DüÉuÈínuˆT"³#«#o Jq  Ñ܈¸äaR—>’à›m9_Ü+ëõ½rÇ`GëƒmHÐýÁ6~l‹Ð~,Ø–½lCdD¯Û¬òø§`Û ~ìÿÛÖ°ŸaG°mC£Ãl;9üÝ`Û‰ÄðNX‹¢â¬ðƒmŒÜ.=ØâÊ ¶ Ò]Û"´/ ¶%åº&Ø–Q‚k]°­ dמ`یƺÞ¶­)cÝŽ`Û†êÇM ¶È=nW°íDʸ'û[–µ6,ªèCkÒô쬬QúÂeú¤†@[ ÕçmJ×Kšk2ôüÆF½’õjÓ+}m¾Ö%¾Ú íkCsÙÐ*ï’¦ÅþæEú$oýø{gµë5õÞæE¾6ÝÛêÓšõ–ö… 5z­¿ÉÛÐê3ÃÛÜ6ÉßXÛïR?ßõ,_k[ƒ¿YÏÎ5ÆxÆè×µÎß D`Oõ@ËØÌÌZ¸¿¤=£ÍßÞZã«ó·.òe4ûE¼#‰mª—úÐ6ŸO_èkô/MËпÅ2ôâÆe-õmzCS‹¿5à«ÕëZýMz~«oI”МaíÃú/£i}«Ãö¼ºAZ/׵߸§}]>ßZ´ú9+7´i^=Ðê­õ5y[¯Ðýuç΢i¾Ö¦†6.ƒ†6½Þ×ꃵµz›aëé°wØ ŽŸÓõ€_÷6/Ó[@j0À¿0kxõ Zƒžz_ˆO55þ¦èÎ:êavಯ¹ ¸—ÌY’œ“ÕêÞ¶6MƒÖÓjý5íM¾æ€7Àè©kh! e3òú ]`)°?9SÒêkiõ×¶×øø4µ °±†…í£A0 Ä\ÓØ^Ë(YÚ¨÷·€˜¦†àBl…Vƒ•0m{ôgÛI×›|l×W¶úô~k¤³53ý­z›ä½€ÔàöÏYšÓ¶0F4ƒu|¡¥õ X_ÀÄP×ÞÚ úøÀZ¿ÞæO×ÛÚ.öÕØ¶¿:#(ÛP¿¹¶í£m¬¦UÁtÞ…þ%>¾C‹8½JÐì€ÚŒ»L*-}`<ÓÛê½ÚB_k@X‰wÀ>ýÍ ­z“¿ÕwÞmëe-¾:/,”a5ði“wX ¯m¨k`Šæm €êA&õÖÖò¬cêmºÚ½­[¨Ö×Ö°¨™“±È°UÄ4Ô[“´±!zÚÎ]‰M©ÁœaÞÆóO¢£o6 ¯¹q™ÞÐOÍ5¶Vû‡Å¼/k´1F2¹„ÌÃ:çk僖ú[kÛôä^;Lfk‡hÉÌl“9Ë@2¥A{YèKb³¶ƒ O–øz ó]‹Ñ½--`^Þ…>öÀØ;ÌÌZŸPê½½ÞÛ3úšð„i]Ÿv×êí͵A‚ûHÕ8qÆ¿Iªmà¼Áª¹Ø˜¼z#ó`+¡Ž-Þš+¼‹`c`‡Í~©ê?§T–‡$úëQS õ¢ò²*}FyQÕ¥ù•…zÉ ½¢²|VIAažœ?®“ÓõKKª¦”ϬҡGe~YÕ½¼HÏ/›£O+)+H× gWTΘ¡•Wê%Ó+JK á^IÙäÒ™%eÅú$WV^¥—–L/©‚I«ÊùÐàT%…3ØdÓ +'OËüI%¥%UsÒµ¢’ª2˜ˆ«ÔóõŠüʪ’É3Kó+õŠ™•å3 aŽ˜¶¬¤¬¨V)œ^›€‰&—WÌ©,)žR•ƒªàfºVU™_P8=¿rZº“•Ö+uÞ%¨„9ôÂYlðŒ)ù¥¥ú¤’ªU•…ùÓY_Æâ²òé…ZQù̲‚üª’ò2}R!l%Ri¡Aleri~Éôt½ z~1ÛNhÖÍØN;46 ¸°¬°2¿4]ŸQQ8¹„5€%•…“«xOà=p¢”“;¹¼lFá%3áô -‘®]:¥/ȇÿ&sÊøöË`»lžªòʪ^R.-™Q˜®çW–Ì`)ª,r™<Ë‹¸Ì~2á•ée2b÷¾®Ћn° 0¿&œÁÈ€Ú€¾ ]…WÖøZL·ƒÆm¸FîF ߙεÖp ÂÅÍ`¸Æ=Þ„°–Å£ŽáÝú6 Çé†ëåî´"‘ázk—øÀ¶1WâoÕüÌ™,mhã–!°ÉoÄ<½ÍÛ‹Á(fE¼øJo# kë%s€Ai¡`ØÒÚC–¶6À™èÞv¸ÛÚpU0 ·ÃßÞ·¶JŸs0èoõµµ@”jXâk\–}[Y,ã”44Vk n³¯&06ú">y­? ¢ËÐ5#®ï ¾-´ýapfà ý»à ­éßi_ÇAA'_Ãgj ÅŒóÔ>À¢}¬¤‡°’öß•4Cÿ2¬¤û½°’öb%­+éß+ipÁwÀJÚ…°’þí±’Ö+õ7ßp â98‰ .iA¸¤/¸¤ —ç?4dÒšýú÷†LÚ ™´ dÒ¿;dÒÎ…LúwLÚy!“þÏ@&­*Öô©åŒìü)ß i};ÿ>èH ¡#ýû #­?:Ò¿:Ò΋Žô˜²0”^à£]øèÿðѾøèßøhø ÄÿÐBý=4hð•ñ•«Ì¥ W4d6€¹2£¥¾%3èÆÎ)¤¡ÉÈZÐ2ÔŠÐ"THGCQ Jƒïl”Ç(h-„:š}¨ >­È‡¼¨ ¥ÃÝÔ ý3 •áÐQeï\müÊß>³εÐSû«æö®Z+-µØfèÍèð˜nÅh-†q³P;ô¨¾^>›ðòé0K3œ[ ÏB˜·úé0Þ«{ù³sç™ÁgiŠüпöOõoý|§º ÖòsJ²öQhÌ€q¡Q#.0kkp"”ãLö5eÂQì¿úg@??|·Â^}|l+çJÌáƒ1Eýf q)$©¯ë{Æ8ïãÒóu~´ú2Yý0`3ÓeЧžl€g-œî—6ã@+ÁôƒÍºä®œ»> k aÚÇùönHÏ ­þ\ûº®k »ï~hßÊ~~x«=¿¼ûöÜO4Þ ð;LËš8¯¯€{~À?¢…í¬‚Ï×Äg볃NS=æ îk_¥9(õô Ü i«:fès:§ËÏ¥ßÌÇ·mÍXÁ³‚:ÖÔ/ŸÃà´œ3À©8WŸjx?¦‡Æì¡XoƒvC—}Ür ÝKî§%É\rll-ÿnãtÕÀop·‚ÐÐ&>K€? ñ§ZAKÚKcß Ì×0ú ¿†ö³ûxÂî´p«©…jøè5µ|®k ái€?5Öоa…ô 5×eí|ƒ'K¹Ôs¯r¦‰ßë¿£ÐZh¥Am;çaz?é°v—§!k­ŸiƒÑéØGzï>3¹Ñù̆=s7¹:Púß¼ëç j[z5:ÀéêÓº¾-åühúV+„¬¡Ž{íæà}ýV¬åg¶F:ÿfœX =jø|FŸüêx 1<[HB5|íZNqCÒ±Ü:«‚ÔyaF?÷ }2èï‹ú8ðuOÐ ýAkhÐ7d+}ëïúÓùž½œrûæºfpÈ%Þo§ŸG9=(û&þÝç?¾,<±Èé î(c§¾i,ãɲ`l1Vg<¯ã4Ö5©‘ëikïƒRÆÓÚ~2ï¯u¡êå±ûŒF~¥õSÊäÕÜ‹ÄUc¥õrí1t7´Æ¹üiû‡{ Q©wЧa^.£oOÁÀuÎåÇùhKÊ»‘k¸€7×z¥ÓÊý¬—û•¾yCwÚz52d/çF_ÐÏùø.B+-廪åã“Ï“{÷}î ž…¢mr?-3l¦ôœø²Û»¿­íA;éÉxÚpŽùЕœÏÍAKnÈ^^îQ}½#úËÝ 9tG;¯¥Ôs¯óï¶ >®IÒ“¯;Ÿï®å‘ ™Ë½?¿ÎÇU­çúËð»Új[yëÁ„¬-dI 94öbÖàˆ3¶p¾΋‚3â!Ó*­×«þ+=Õ…wµ0h#`<¬ëåÔTÈ×)GepÅÖ)‡«*t)àÈJþ¬îé€ã*áÉ,¸*€»\.ùü {žÌ­ñRh³ËÑL>—1G%œÙÜsà›[ç×ìjô/ƒ¹ØØB4›¯Q³ÍÊÊ¡ÍæžwKá»0ؘ wfÂ5k#†BõÊ`T·6ŽÑbPZ÷ûVHU _1DÙt¸ª„ù§ŸæÃÜ%|>F:ÇG¬]¤Óà\%ŸñˆÍÌæœ •ò+vw&|W@¿œŸù|ϵe|EðÜØK!§À„AÑdø®€µYb «Šs­Tì™ÎåÈöSÀdzU§ñ^eåA)³vß,A^t0þÏê]yß):ßÜ©â²É‡ùCó†t§˜ÏÀèÖ87fòýås>”ó&ñ~Œ‹ŒŸ¥½WÙO*“9¿˜Üå|¥|ΑçÝIh¶þÒ9Ÿvh½+óýrN•òÞ3€…п¤÷Ž¡%|¯“ƒ¼6æ4ôÞЉÒ~ÜÌ÷È${ ¬ZÔ©|λ»`rº”Óß· CùÁóä~<ë“~YPº!zªøÊUçá洆 y¯|.ë½6RÄíwzò™½Öçfõ³¼—²ü ÙQ¨ß·ñÆ\¡µJ°€ëSi½Ü0zhß0¯á» !®Õð<'Ðë·Fîþ¨±öÇéý|m$`xábÞ·éœ~}wlɈY}¹Nìv¾ ;”X>„zûЇỜ¨?ê­åøÜÀ€m½¨ÄÏq ¿™,åOûbzK°vâ籕½<ö§÷®ŠE}s¸ÒËÑ[­í<ܼp„Ò¾–¶ðxo¬²”·AdÂö×ìËî_uN6ªÿ|]úyeÚËùCþ·ry·s©Îa†'3‚ó¶¢P^ÖÇÆ£®ÖtŽÔû´Í6[U`Z¿ŠÏ7Õ~ˆ Màkó{P_¥Aãë°«Œïñ›«LΗ+à“Éi«å¨)ƒã׸7}ó/ÒPðßI£³× ¹è<ù?Vá!ˆ"‚S΃qÐ,áÁ¨ ®!7œ“ƒ÷’y?Ö&XçÏÑSpN€•ŽçOãP4œcQœcøh~ŽâçH~vó³ G ÌêâW¬Mp8o‡ñ³ÛÐ xnçW¬M°[Ð-pÏÊïYÑ~$b 6ƒÏø‚Ùÿ#TÄf¬¡!p=!pöÀ=v‡`•TøÙ„,üÌFÈ»îÎòñÌ÷%ñ³È{¾#ßÁüŒ£äSJÎPòž"ŸPò¿”|LÉG ä4%vjÒ‡”tj¤Ó#þýošô÷lò7üµ‹|p›[ú€’¿t‘?w‘÷áâ}JNQò%¢ä]JþHÉIJþÐEN¼%¨%ïD‘㛤ãµäí·R¤·»È[)ä÷¯¥H¿ï"o¾!½é&osHoDcrôu³tT'¯›Éï ÇïºÈk0ÿk)äÈéÈ rø·Òá!ä·¯†I¿ ¯†‘CðøP.ZŠO!qöp).šÄ=>ã61ÖJb¢§I1+H4,=DQé$nXÍÝE\pÏ•B"jI¸“„Qâ„k'%ŽZb·9${8±ïmb[%Zት‹X²‰¶fvó*Q³Í#ª”(”˜(‘%M’)‘4"yD±‹Z"À(‚÷²JØI•àÇqíµkððÿoü¡ÿ4ÿ¿xô`‹? endstream endobj 239 0 obj 15477 endobj 240 0 obj <> endobj 241 0 obj <> stream xœ]”ÍnÛ0„ïz ÓC qII `pìð¡?¨Ó%ÚPK‚¬üöåì°MуŒáj¹œoéU¾=ìC¿äßæ±=†Åœû¡›Ãm|ŸÛ`NáÒ™Óõí’VúÛ^›)ËãÞãý¶„ëa8«U–ïnË|7›n<…OYþuîÂÜóðc{Œëãû4ý ×0,¦ÈÖkÓ…s¬ó¹™¾4×ë®ÇC_÷Ëý1nùHx»OÁˆ®-­´cnSÓ†¹.![ÅÚ¬öûu†î¿wuÚr:·?›9¦Ú˜Z¾\G-ªë Ú©®4îè’ñWèŠz]3ÇC?©–ú™9zC­9/ý—è‘п€EèßkNò¯:ùGW|ô½p‰÷ìÈ ¸7G†<Ž OŽ NsÈàp¶#ƒÃÿ‘¡Ô2ÔZŸ ‚~928“Á©¿Ä€92ˆÖƒž=lžþKÔñôïÐOÿ=õÿüàÕ“Ap?ž NO†Øv `š4Œ"¾FÜ´ïóÇ[?(:טè~æïGg'lÓç7=­> endstream endobj 242 0 obj <> endobj 243 0 obj <> stream xœí| x[åyðwÎwŽdÛ²$_ssŽe;±‹b‡\±“)¶b+–-G–âÄÇÒ±­`]"Évœ4H)ƒnM3²2h²–1 -¤!cîhiÖ†u{Ϻº±v?å<ÿØ\ÆÓAŸ. 'ÿû}çèæK’pÙ³ù 黼ß{ßï=/<$bc2ÊCFvHŠÖ/(Bçb,þñ„¸ìÛ'¢0þ|F‡¢Ã¡—ßý9BØ 0_úéçœ?‚ù?"”ë‘¥@þû¯¯G¨  ö×À—•»õ0ßóª‘Pbï÷¸ÇoùA˜oø%]É Ì¿ s1$íÞÃnÂ0ÿ9™‡¥\{Ý}0¿„Ðg7D#ñÄmÌ„‚Pû-d?“£zp;Ì{âò`‡üÁ˜Ñ‘9‹9^§Ï1¹yùFô?ñ©dêÑz >…žB?b„N¢õðxÑ Ìýì Øy݇^ãYt=Â40ELì¾¢+ÒMò÷òOÀþ8Û X^CB‚i ÝÅîg;Ñúÿ2:O„®¿‹þ’9„^E¡—ØVôktûÐaxŽ£8‡øW)ìMè1B „ᳯà_¥Ï»è.´ùÐcº)]ó åúqæ‡Ì4zx~ïÀ{àÄ#è æ^®’{‚kE‡U~ñ:ÌbŽsôÙ;ᘧtEèEÂ+¬t§Cè»ð™@/3˜{ñýÀÙ~Âÿ*zY¿•«W¹ÒÀkAŸ§Ñi´ƒóTÝz„Z¿N^ÆÍ¨°Å*Bè*~NÇs˜eM4b«]Söm½âßôU¬°Í˜Š&½x užÊŸ§._îìåñ}§øÅ§puÎ)®ºòù6ßXakëìO=ëlÖ°:ša­«†d˰îl^â¢!å7Ä?‘­G íyÜ·‘îÛLßÌr¨þ܅雑éÂô…é•…æ su…¹bˆC—âxÑ¥·”czão~ÓÕB,µB\Ýú\€ž¶·çèA@ó°Îò ƒòycQÈe y|±Ð™á×Äó°1wѾ‚;ó™ü#*5åé0Ë› ˜å¥Ÿ1V-4½wú„‘éó™]¥›JÙþisCiƒ¹Áli¸Õo|ó=˜ÃßJMoâ©çi.mоÉ\û”6ôYŸ[¹hÓ¢//ÂLÿéEL?súùÆ•…·2k×,«´êô0^­¿•Y½ª¤¸HÇúÎ!ƒ°{×ÑŸVìŸzmªºý'Ž~ÝÀ>öÁöÑúÖbßΟüàAnà”´ûä‘*/ !í¼ü/Tf$"§ÝRìF‹Ü†}h[E™1ÏbÄÖ "p0}Án8‘wWÞ®¼My\?Ñ1Hbzg%s:jeúí†w­'­wY7Y¹~Þºlíšuë5®X½‘aŠJV¯²h,6çÅ·<›üïÿþ¿wl|O™¼ëîïüç=wŽ|Í^¿zÉþdß=_8øÎÙ{•ßlÿÂA楇¾Â4ýæÈQÉ¿õ’ANä¿ v;n¿Õ@ §0o)µ°|©e|ÊøÒRK£ ™Hi1ºÓp ·hႲҒâBK^®`k1¨ `¡é\Û)ƒ¯í”໽픑|åúnïý*¸|ö–>ÓÙÒj±é÷6ž›^eβ˜^µ‘™étY! È]À–—M–L.àû}62ÅE%}¥ªŽÂÊõ« Wc<¸X92¡ÓµwÿåÒSý‰N7ñÈ’‡oú,7pøƒ“Öº|{ãñƒ÷”®¯`3·*? i•‚بý…}“1Ÿ-ÈãÅ¥ù±>—_*.m,_º 7o©È1Åm%žn jc<œ{Ù>˶ÚòÜy"^¬gÐbcž¯¬5] ·²hBƒ¼•D^˜³gÍ–RpMjÛK`]åýw`WÝH}Ô¨ŠÍØkD$2õÅõ%µ¥½†^¡7·7¯·¼win-ª…<ÛÀlE[™>ÔÇäô#PHÆ/.*-YÊ”ƒf8PËòõåà#ëÖ®©gëÀ¡«À_8TéúZÏ‘?ûA~ÃÔ~å­·úÎWÉçn»ïÉÿS¸é÷ïaòÿßíßâ6=]Sãïö¯åXËê¨túÖªÖ¬Kô làMÕ“;ŸýI9R㟡~ý=?W@:ά7˜ 9UÓ{çÎD ¶ÿü™¨¹ÓÌö[@¤›‘=O—«Gfì6î3Ü©¯ÿ¾pžÚýTcg¯}¡žÏ1äp<‹u¼!'?5æÂ¯ÀÀ çˆcp uŒB;²3vÖn´ØMv³½°³ÐÐúD!D2ÕIF —â#‹[küyÕž©ŸMUº^Š—7.ÁϘ^þƒ¹§¥}Y­‡üOò_Ôþ–Ç3<¬ãõœžç9NßÈúÑîNN3¸UsúªËz¦ÿœÂeÂö¿÷æÙ-1½yi:åàÃn bè‰Ê: ¸ŸY­¯Ô¯Æ•ÌÄÔŠ©åÀ¨®èí—~{’ðµYéá^/Euè9{¯•©¬à´¢Žµ‰$µšM¬¥òòÙ\#I³Ka²x »¨œì6”W2F›Eß–“ëæ*Ý‹öÙÜÜ]èN‹¸å ÊÕQ±µžHQ RL›i^m ì¿9MöÕw@š†Œ`Um’iÖIM@¾• sæäʃ+YÈ®,ªH¹æ&ÆÈÐøµ¨é¬t=N&±bšÓ¸¿¿^ù[忤Ç[­Íõ<óF•©ýüøS?¿£å{Ã{ž¨ww}¾ÞÝ}÷ä3ÿÆ \ºIùå_—”?kûÌ÷ŸõõîxãÅ?fjãnopàiEþ½£kzÞþÜG™Ï"æòÝʯØå£ {Òí0êŒz! F„¦ ç¦- šŸL—ίÄ9Œy »|u‰¥Ø„˜»áÚÜ'wܦü»2­üŠic»˜¢¯2ëþ–òÂ#ÊO?øsåj^CçuÜ-È€î>ÃN0]¸p~•Ýàa=†]ì.׳ò%\ü¼n€ȵ ª=o:¿Òž—c0 }Ž~NëyÓ¥9:ÓF{fÁÛ8  ˤ–O™ÀèYÌæLMÏä è¡é3x€¥pÓ}L1³|}ÅÚŠåëuÊÄÞ·ûYî‡oïeŸ¹Lžz{/ñ¯­Oƒß›Q5zÒÞž+°y¾ª’ÔÁΑ>KE¶¼‚¯¬ª,*d‹-°PÍWUU6VXò°»8Ï]¾­x_Õ«µ²**-UÈXVU]YµŒ8U%½µMegËè­ ždÑîz×™gÝÚi›áRËU—Z~p9¸T–Ë‹‘ɸIÔW2«ñ¯ïëþ£õM‡âÛÞÒ°åƒsÍ/G¿ùÒD¸õ»Ã¡“«*¦˜ú)ö›Gëòtý,ôÀ£Û<ÞbB;‚ÿú×_S~<Þá øIA¨æ=-7lµ—¦3C#ÚÁ²^!ªq§]éošÎªÒe> xˆM¨8x"B”ïäA„Õ ‰wåï!Øÿkšú©¶ÒXo³/6·™:òÝEpïtpî%ûж‰&ÆL|µÔ*Bº¥OúVyªrõ~‰—Ï.¸Hýóú[ú´{"­,}vr[«7ÿQgï‰u=;¿rÜýþÊÎ'û^÷À~ßÿýBÇqnís+WÞÚ°ýß|åh]Ýs¯ÿÝÓLõX§·R«sŽ¿´ =j¯B¡¸­¨Ãì.>§sWì+Û¶\¨Ê5@pãÊ*cå"ër¢¦E´òÉ}·êÇU'ªvUmªâû§hâQK 7‰¼ÿþŸ¬Ãk/=¡ã¾ñÈÞŸî¨ô¿zû·&;þaò…7òØ£&«yß—¾uâð2›é‹­[ó\MÍë/?ìßÚùæÙº µ#¸ËΩþú_ï*Øø>ZšC߬^y­ã—É·,ÈD=ºNð(å¤_½à]"¤,Éx  Â¬—³ÞIx jåÞB;q%:ÄÝ„JñVÔÊ6 V¾mÆK/ßÍ~!Ý4ó­dB;¹i´Î[áÝMaö²ö {Çðcð\â¾Äý€_È?Nù.@õÀ“ZÅšîB°›\r°¶¹U{cFðΆ´1ƒraÆh§ôèëÚ÷OicÆßÓÆ<¼oÿXëý\ç@zGç¢%è²6η<Ê,ÖÆF´¦ð;ÚØ„r ©ÍH_ø Èp`heáemÌ ’âzmÌ"c±Sc´¬¸Ks0žÔÆ<*+>¡u¨ªø/´q²ÿLç¢Æâ´q~ucÉzmlD#öhc*Ùðš66#ã†ÿhŠD'cÁá‘„Xã¯W­\¹Zœ7ñDL–B6Ñö׉ŽÑQÑK â¢WŽË±q9P'Ì:ºŽõIã¡Ý‘ð°¸Y™ç`³¼[êý#RxXŽ‹RLƒa1:68ô‹HH †“0]R8îõ=crÆŠ8ÿR‹#aqUÝêõê6Ù]‘}`(† ßH"m¬¯ÀúøX]<2óËC‘ذ\–[(a˜Ò‰X—eqPLÔÖ‰W!LØ2:‰‹ÁP4KÈq( ‰Ž˜<®±’¤A•7¦*/“Œ ¤©ƒ„’¨²–²€°âŠÂl[]µ™Å”ƒqA1) ‡¤Øbdh&Aè”c¡`œš!Gä˜ ´†cRD·ì žmb""JáI1 †ƒ‘Áh,*D?0-dbDNêÉï„¢N#€´,‡ã =+U‰µD)øƒÐÿXH'¤ág(8 Fª!é±+2”˜õ[k)'19‹Æü2E‚`ÁÁ±„Lx²ØÀÌþѱád"˜‰Œ%€™PP#D(ÄTUÚ±8ÀqlbH&R ÔAâ#¶ 6B³>ã2Ø ƒÀª&þ Ò„9@%ŠNªê(¡‰p¬Yˆ†Æba (ÓƒˆØÄøØànÙŸ +D¾¡È(8È ‚DŽx£ ø4—©ªQRNŽ$À qu•X%šöuOŒH££Â ¬i Ø€(‘²äŒ„Á/bb(“ç[LLFå! Õ©LeIˆ8‰£I£ p=R) ’«ª#*Å€¯±Q)&B9S6†ÕX…CÄC%? ‰“I~â3)”  “FçF Iò‘Æì…G'Å`†› Dœ˜LÇ– âD‘Ä.ÉðÁçä=4‰â¢5‡VB;¹!XIØZ©ÊÀ2n-^eˆ$‚u l@t2 ¦“÷& bD)…ð’Ge²¡Ê˜É@HeDJˆ#R0Êá,¯K{w@ 4†Ó¬ ”9UÂ+Y5%QMÍFŒ$‰£${@¬$£’ÿiƒ8 GâªΩ²HAÂåÑ!ÂT«SÜâéð‰]ž-¾í¯Stu‰^O«ÙÙ,Z]0·ÚÄí._«§Û'„×Ñáë=[DGGŸØæêh¶‰ÎÞN¯³«KðxEW{§Ûå„5WG“»»ÙÕÑ"n†sŸèvµ»|€Ôç¡G5T.gAÖîô6µÂÔ±Ùåvùúl—¯ps^Ñ!v:¼>WS·Ûá;»½ž.'àh´®Ž-^ âlw‚€¨ÉÓÙçuµ´úlpÈ‹6Áçu4;ÛÞ6›È< ²W¤ uÀ%à=äpW«Ãí7»|]>¯ÓÑN`‰vZ:<íNa‹§»£Ùásy:ÄÍNűÙíTyQšÜW»Mlv´;Zˆ8I"L'­hqv8½·Mìêt6¹Èôèò:›|tšpSv›<]ÎmݰpI6a{«“’ðO匊ßâ<>×—be»«Ëi^W±È¯Ø%öôl¡Ð ú$ÆëÐø%6"k³½ ÈiMÀf§Ã »° dÁ‚w9÷úåh‚ø¶Üjj¤iTÍ6êµjn Càªkt×D½uÔì–¾°ÉulSS/MàÝp©©70.CŒ“T‰ ’L&‚qép†"ê'Æ¥Q §HQ(È•Ò(‹§ØÌ (!yFcA82 & ™ˆÒ¬Æ‚û´k8¦]ST1-¡’N*ÿ19…[*8.NÖlŒÜe”“`jµ&:UŸ?ј,â0Eˆ$¨èêDA ×u—NW[æÞ˜:HPë ñZê !]‰×X ³ë -Éû)¦xòΘ£@M,ÂõÔJb²V>µ’ Úá#«•5`¯«Vn`­$¤k%ñk%!«.¸†ZI˜¯V¯¾V2j¥ÌðÍ*—à>‡$q£Ê%A+—Äë*—„,vé{ã.™„pD¼î’I¸¡%“ •Lâµ—LÂÌ’I¼–’I˜³d?LÉ$ø=í[=„mGë5UGBZò멎„du$^Ou$dVGâ5UGœՑx=ÕqÖ¬@I>¼…ø! áÊ…x…@ ŸìÚáw4‰$¼ BüÔ]±sU?¼#X„ ²·.:­×ÒØì¦jBE“(†‚h Q ò£Zø]…V³Fƒ!¢Í“@qøÄŒ$B6Xu¡0À×ÁÈFá‘7…+Ng2üÊpf¾)\Õu)ª> 4´vÙ0@>$8óá(6Ãh7œëAcáX‰b“é ‰J$–0|GfðN„ó .ѽ™xº(–8òhð{`UžF¼&¨*GæÊÛ*f5ZŸu:yvÅ) Q ª†šýˆÆ o#ª‡' Á|ÀEà7:éÙÕVàáÌ– lIí%-8ÛOȱˆL­*4°Ä†7Æ2S ìLÌ=„½(å;A½€h FO¿!XÇghe¦iÏËò¼ù¤à™KvÕ†Œ2µ6;°àµ?ÂUÅÕæ¹í–9;%è ñ²Õõ° ü.^ˆd_ˆbKGCò4B÷dM®aJ%¬YݦÙ]µ–JMõ1ÕŸm”¯µ~˜žj§RˆÖ„æcAÍ $ŠCÕ´ áLP.fú“ŸÂ?T±'1h•wÕ—e¿ªïY3¼ÄJ-GÎèoœòå‡3’&Ÿ@£À¢Xt'©Ÿ!j‘T“â1MäÂüWõ~B1­²¥Q ~z:ÉM€J ¾6» º«Ò®@Á¦E³8£XTLP¡Y'¡i&D×2%JÊËòJ•Û1ªC[†uÈ8Dí©ÚZÈÈ q8m›G[JÎzšADŠYwPÓj¶õ¯,uRs*·Ñ”G'(_i¯KK4Aõº* Éh¢Y;¬I(gP ÐoBÃF‰&v„ŸâSa’ö#~<ªe¶¤…ü”v€rÔ8m¤ÑéÓ¸“c„f†´ 2sQZ³3AàZ4ij`“±’ÖXfÈ<'R™%ʹ@ss¶¯©ÚPïé öŒÐ[NÔl¢¿éüq5¶HЛˆÜœ’&Q]–¦®t–èdR»[TêDçC”Ç€æI£ÔOc©•S¢Ó@†Í3½.yƒJôF Òœ1JgBJ¢å”Ø+œ¡á¬{U¥”Ì¡õÕw“4fê'þ;eJr)h¤=L¢6ºz²éÌÔÇ\¼Ù4{ÒsÁy²¹²NŒæY‰æ•4ÞäJ<å‘Éx™y{ÈZž“©IJTª=oã>´¦äžyB€½ämkÍð25fÜ3î—Aï‘ ^Ç´8HúÉ8ìçИŒöR=‡µHŽÂ£Þ^ͨrêD¦ÝUž“+œ‘2B3¼Hã2õ¤ùü$™ëæÊÝz„©Ý3õ5—V… ÍeÚðZc5N³fò®NG[2’Hå0šª=bÚ‰lŒQêÑwÀ÷°f1õ>$^%¤²êG™©æ—jP‹‘„v¥4ÕŠœ”ŽuÀŒÐñÀ̇¶Cé¥{.X¡ŽóÂNÌšaµ™ÚÅAwȾ•FãvŒÔMq©8¼ðMp÷!‘âéœÌÚ¾p‘³NÔKi8[pæ1ÁÝ«nøujpäD¬tÜŒ[©BUzpÊGc‡œ#¼¨œú`=M5›+¥˜ä¬f^Àߪí:·‹â#üÛh}DÆŸªæ¼;ÑÁLp6Gn:#«ÝðÛ p]TŸ*³Êm•a 쫲8)ª%TŽšà·hˆàËGµ@(ù4Hµ#‘§™ž'TÛ(”Ê™G³2§±ÔiºTù úïIQî¢ò»á©ü>XñQÛ8oÒwZ(·@µÑMåsP=x(…ÍŽh‘èÓò8o†Uš¨¾ˆÝçÍ”’ƒj¤kNI’Ø2­3—w) -T>'Õ”›BwïJ­¨þ袲6iºVqª~¯ú„;C»MTFbÙm@Õ©ù”ƒê.[ b§í”ÿ´ªÚwS†ÎÒÖïЬ›äÇG)ûæÐÊv‹N å ¶îJÅÈ¿íçÝ)Kç€nÍ?=)βõ›Œ£$ÜÕäW’v¶›©?¹5»RÚP!„+àUs—î5?}ÏI¤òvöÍY5¦«Ñ̺Ӗ‘k3+5 ·PØÐ ¸ôªú¶¤ÞYéwÌÚm®7ìäÛ±ZË'«Þtõ¡ænõ(³ê Ðú\­㩪$BëÀHª2™ »é;=ªõN"Yïy„²Dï~[ŠVò.JãRëJ‰V „Z|mÎC ³Þ £ô¾W©LÐqB«Lˆ|c,Yß7ãm8Ùÿ™mqN$e™«rÈÔŒÚ;ª½K©†I=Y§á¡ä{YZ'Dj_-4Ãêiï#ØÑÌ®ÑÁpçªk©=:BS ù*Ùãúä»N7º›ûiê Yý ™•×G׿ì‰s?H¸ª~Pv%ïÏà)ÝëHB^]u®‹ð‰õ•ÄY}%áûJ}¥t‡á¿g_IȺa?¹¾’0ÇÛÚ§¡¯$ÌÙWJKôñô•„+ô >ž¾’€>l_)ýond_)oÙ}¥ùnßù»Kêû¹ZI|ÚºKÊî.ÍÝÝøxºK´+fhðÓÝe¨Í®f>þ.“ð)î2 3ºLéwݳË$üÎ.“ø±u™„Ñe?².“@uÐX·RnUm;`ÿãë sÚü“ê ³zGâ'Ö;æí¥{@}ïHø½£+áýh{GÉÌ:ÿ2»ã#\CÇ'³Ks#;>Âuu|f¿³][ÇGÈèø\©ïp#:4‰Yøí(Ýi(2«»Žÿ檞êåøÔSÞ´jª£õkÖ²«±«ù/ÕFèòûð¹Ý6×ÿukŠ=h¿ümŸªÆÏ¬ÂOÃß2âoÆü7Wáo(ø©jü¤?Qÿì~ü"þÓ‹ø1½MÁ² Ÿ<ÑÅŸ<†O´;ø]ø««ð£Eø‘cø|\Á[ðCðWžÇÇ| ŽÀ*ø´ðxiÁ_>¼ˆÿ²‚/Â_Rð(ø÷üE?p9ÿ€‚ï/Ç¿· ß§àÏ—àC ¾GÁw+ø ‚ïRð >ÐVÍàÏ)x¿ï›|žß§àɽýüäóxò ·w¢šßÛ÷Ú¹‰j<®à±c8Àq#Ží©æc¼'já÷Tã¨G€­ÈE¶_VpHÁ£ ¾£ï6ò»84‚x¤#—)ÃÃCF~x2b9€p,p û<(åñƒ –òðÀ®ü@ïÚiâw-À;M¸_À;nÏçw(øö||œ¸íîë5ò}5¸×ˆ·_Ä=ÝÏó= îöõóÝÏã¯«š÷õcŸëªÆ^oë¬ã·)¸³{€ OîÈÅíÀU»»áÇ­à¶­f¾­o5c—‚[[Ì|«‚[Ìx‹‚ nVpÓæ|“‚7ÀÛ/âMñ­ñÆu›ù Þð7¸F]¸A±Gñ-ðz˜®ãVðë6ãµ ^£àÕxÕE¼2×+x…‚m ¾ ¶oºÆ„k±‰¯­Ä5åxù2#¿<€—q5#ðÕ«pU^_uWò|¥‚­0³>+¾b—æòb§.Ÿµç–æâr.·sKLx1€/>†à Tó xA™…_PË,¸´¤š/uà’j\¬à"^ÄóÞ¢`3`5/À&(ØŒÇp>Ì?€óróø¼2œ›‡çÀVÎ1¬p‚y‚oÄ̸›0 Œ³e˜0cçÐbÌL1{ÿ€¹é£ýC1þû·äÿ » endstream endobj 244 0 obj 7781 endobj 245 0 obj <> endobj 246 0 obj <> stream xœ]ÑÍnƒ0 à{ž"ÇîPñSZ†„:Z$ûÑè $†E! áÀÛ/qºMÚôÛ!q¢º½´JÚèÍ̼K©„e^ ÚÃ(IR*$·÷ß|bšD®·Û S«†¹,Iôîr‹5ÝÅÜÉ^#ÕHwuçânÕú &P–Ƥª¨€Á­óÌô › ®}+\ZÚmïZþ n›šbœ„­ðYÀ¢ÃÔ¤ŒãŠ–MSPâ_.ÉBK?ðOf\iâJãøt­œÓàÆû€Î3ï,øà} N½O¡¾ð΃sïGtŠß‹àØûìœ&ö>…zt\{_‚ñ_×à#ä¾c$?óŸQQ¾ãÆ„ƒóñ“‘ èïåéYû6|¾nCŒ9 endstream endobj 247 0 obj <> endobj 248 0 obj <> endobj 249 0 obj <> /ProcSet[/PDF/Text/ImageC/ImageI/ImageB] >> endobj 1 0 obj <>/Contents 2 0 R>> endobj 7 0 obj <>/Contents 8 0 R>> endobj 10 0 obj <>/Contents 11 0 R>> endobj 13 0 obj <>/Contents 14 0 R>> endobj 16 0 obj <>/Contents 17 0 R>> endobj 19 0 obj <>/Contents 20 0 R>> endobj 22 0 obj <>/Contents 23 0 R>> endobj 25 0 obj <>/Contents 26 0 R>> endobj 28 0 obj <>/Contents 29 0 R>> endobj 31 0 obj <>/Contents 32 0 R>> endobj 34 0 obj <>/Contents 35 0 R>> endobj 37 0 obj <>/Contents 38 0 R>> endobj 40 0 obj <>/Contents 41 0 R>> endobj 43 0 obj <>/Contents 44 0 R>> endobj 46 0 obj <>/Contents 47 0 R>> endobj 49 0 obj <>/Contents 50 0 R>> endobj 52 0 obj <>/Contents 53 0 R>> endobj 55 0 obj <>/Contents 56 0 R>> endobj 58 0 obj <>/Contents 59 0 R>> endobj 61 0 obj <>/Contents 62 0 R>> endobj 64 0 obj <>/Contents 65 0 R>> endobj 67 0 obj <>/Contents 68 0 R>> endobj 70 0 obj <>/Contents 71 0 R>> endobj 73 0 obj <>/Contents 74 0 R>> endobj 76 0 obj <>/Contents 77 0 R>> endobj 79 0 obj <>/Contents 80 0 R>> endobj 82 0 obj <>/Contents 83 0 R>> endobj 85 0 obj <>/Contents 86 0 R>> endobj 88 0 obj <>/Contents 89 0 R>> endobj 91 0 obj <>/Contents 92 0 R>> endobj 94 0 obj <>/Contents 95 0 R>> endobj 97 0 obj <>/Contents 98 0 R>> endobj 100 0 obj <>/Contents 101 0 R>> endobj 103 0 obj <>/Contents 104 0 R>> endobj 106 0 obj <>/Contents 107 0 R>> endobj 109 0 obj <>/Contents 110 0 R>> endobj 112 0 obj <>/Contents 113 0 R>> endobj 115 0 obj <>/Contents 116 0 R>> endobj 118 0 obj <>/Contents 119 0 R>> endobj 121 0 obj <>/Contents 122 0 R>> endobj 124 0 obj <>/Contents 125 0 R>> endobj 127 0 obj <>/Contents 128 0 R>> endobj 130 0 obj <>/Contents 131 0 R>> endobj 133 0 obj <>/Contents 134 0 R>> endobj 136 0 obj <>/Contents 137 0 R>> endobj 139 0 obj <>/Contents 140 0 R>> endobj 142 0 obj <>/Contents 143 0 R>> endobj 145 0 obj <>/Contents 146 0 R>> endobj 148 0 obj <>/Contents 149 0 R>> endobj 151 0 obj <>/Contents 152 0 R>> endobj 154 0 obj <>/Contents 155 0 R>> endobj 157 0 obj <>/Contents 158 0 R>> endobj 160 0 obj <>/Contents 161 0 R>> endobj 163 0 obj <>/Contents 164 0 R>> endobj 166 0 obj <>/Contents 167 0 R>> endobj 169 0 obj <>/Contents 170 0 R>> endobj 172 0 obj <>/Contents 173 0 R>> endobj 175 0 obj <>/Contents 176 0 R>> endobj 178 0 obj <>/Contents 179 0 R>> endobj 181 0 obj <>/Contents 182 0 R>> endobj 184 0 obj <>/Contents 185 0 R>> endobj 187 0 obj <>/Contents 188 0 R>> endobj 190 0 obj <>/Contents 191 0 R>> endobj 193 0 obj <>/Contents 194 0 R>> endobj 196 0 obj <>/Contents 197 0 R>> endobj 199 0 obj <>/Contents 200 0 R>> endobj 202 0 obj <>/Contents 203 0 R>> endobj 250 0 obj <> endobj 251 0 obj < /Dest[19 0 R/XYZ 72 696 0]/Parent 250 0 R/Next 252 0 R>> endobj 252 0 obj < /Dest[22 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 251 0 R/Next 253 0 R>> endobj 253 0 obj < /Dest[25 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 252 0 R/Next 254 0 R>> endobj 254 0 obj < /Dest[31 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 253 0 R/Next 255 0 R>> endobj 255 0 obj < /Dest[37 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 254 0 R/Next 256 0 R>> endobj 256 0 obj < /Dest[40 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 255 0 R/Next 257 0 R>> endobj 257 0 obj < /Dest[43 0 R/XYZ 72 681.3 0]/Parent 250 0 R/Prev 256 0 R/Next 263 0 R>> endobj 258 0 obj < /Dest[43 0 R/XYZ 72 652.6 0]/Parent 257 0 R/Next 259 0 R>> endobj 259 0 obj < /Dest[43 0 R/XYZ 72 527 0]/Parent 257 0 R/Prev 258 0 R/Next 260 0 R>> endobj 260 0 obj < /Dest[43 0 R/XYZ 72 411.4 0]/Parent 257 0 R/Prev 259 0 R/Next 261 0 R>> endobj 261 0 obj < /Dest[46 0 R/XYZ 72 185.7 0]/Parent 257 0 R/Prev 260 0 R/Next 262 0 R>> endobj 262 0 obj < /Dest[49 0 R/XYZ 72 488.9 0]/Parent 257 0 R/Prev 261 0 R>> endobj 263 0 obj < /Dest[52 0 R/XYZ 72 681.3 0]/Parent 250 0 R/Prev 257 0 R/Next 289 0 R>> endobj 264 0 obj < /Dest[52 0 R/XYZ 72 652.6 0]/Parent 263 0 R/Next 276 0 R>> endobj 265 0 obj < /Dest[52 0 R/XYZ 72 625.2 0]/Parent 264 0 R/Next 266 0 R>> endobj 266 0 obj < /Dest[52 0 R/XYZ 72 472.9 0]/Parent 264 0 R/Prev 265 0 R/Next 267 0 R>> endobj 267 0 obj < /Dest[52 0 R/XYZ 72 404.1 0]/Parent 264 0 R/Prev 266 0 R/Next 268 0 R>> endobj 268 0 obj < /Dest[52 0 R/XYZ 72 350 0]/Parent 264 0 R/Prev 267 0 R/Next 269 0 R>> endobj 269 0 obj < /Dest[52 0 R/XYZ 72 281.2 0]/Parent 264 0 R/Prev 268 0 R/Next 270 0 R>> endobj 270 0 obj < /Dest[52 0 R/XYZ 72 183 0]/Parent 264 0 R/Prev 269 0 R/Next 271 0 R>> endobj 271 0 obj < /Dest[55 0 R/XYZ 72 651.2 0]/Parent 264 0 R/Prev 270 0 R/Next 272 0 R>> endobj 272 0 obj < /Dest[55 0 R/XYZ 72 597.1 0]/Parent 264 0 R/Prev 271 0 R/Next 273 0 R>> endobj 273 0 obj < /Dest[55 0 R/XYZ 72 543 0]/Parent 264 0 R/Prev 272 0 R/Next 274 0 R>> endobj 274 0 obj < /Dest[55 0 R/XYZ 72 444.8 0]/Parent 264 0 R/Prev 273 0 R/Next 275 0 R>> endobj 275 0 obj < /Dest[55 0 R/XYZ 72 346.6 0]/Parent 264 0 R/Prev 274 0 R>> endobj 276 0 obj < /Dest[58 0 R/XYZ 72 710 0]/Parent 263 0 R/Prev 264 0 R/Next 280 0 R>> endobj 277 0 obj < /Dest[58 0 R/XYZ 72 682.6 0]/Parent 276 0 R/Next 278 0 R>> endobj 278 0 obj < /Dest[58 0 R/XYZ 72 363.3 0]/Parent 276 0 R/Prev 277 0 R/Next 279 0 R>> endobj 279 0 obj < /Dest[58 0 R/XYZ 72 265.1 0]/Parent 276 0 R/Prev 278 0 R>> endobj 280 0 obj < /Dest[61 0 R/XYZ 72 710 0]/Parent 263 0 R/Prev 276 0 R/Next 282 0 R>> endobj 281 0 obj < /Dest[61 0 R/XYZ 72 584.4 0]/Parent 280 0 R>> endobj 282 0 obj < /Dest[64 0 R/XYZ 72 710 0]/Parent 263 0 R/Prev 280 0 R/Next 283 0 R>> endobj 283 0 obj < /Dest[67 0 R/XYZ 72 710 0]/Parent 263 0 R/Prev 282 0 R/Next 284 0 R>> endobj 284 0 obj < /Dest[70 0 R/XYZ 72 710 0]/Parent 263 0 R/Prev 283 0 R/Next 285 0 R>> endobj 285 0 obj < /Dest[70 0 R/XYZ 72 599.1 0]/Parent 263 0 R/Prev 284 0 R/Next 286 0 R>> endobj 286 0 obj < /Dest[70 0 R/XYZ 72 419.4 0]/Parent 263 0 R/Prev 285 0 R/Next 287 0 R>> endobj 287 0 obj < /Dest[70 0 R/XYZ 72 293.8 0]/Parent 263 0 R/Prev 286 0 R/Next 288 0 R>> endobj 288 0 obj < /Dest[70 0 R/XYZ 72 180.2 0]/Parent 263 0 R/Prev 287 0 R>> endobj 289 0 obj < /Dest[76 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 263 0 R/Next 290 0 R>> endobj 290 0 obj < /Dest[94 0 R/XYZ 72 681.3 0]/Parent 250 0 R/Prev 289 0 R/Next 296 0 R>> endobj 291 0 obj < /Dest[94 0 R/XYZ 72 652.6 0]/Parent 290 0 R/Next 292 0 R>> endobj 292 0 obj < /Dest[94 0 R/XYZ 72 569.1 0]/Parent 290 0 R/Prev 291 0 R/Next 293 0 R>> endobj 293 0 obj < /Dest[94 0 R/XYZ 72 406.8 0]/Parent 290 0 R/Prev 292 0 R/Next 294 0 R>> endobj 294 0 obj < /Dest[94 0 R/XYZ 72 269.2 0]/Parent 290 0 R/Prev 293 0 R/Next 295 0 R>> endobj 295 0 obj < /Dest[94 0 R/XYZ 72 116.9 0]/Parent 290 0 R/Prev 294 0 R>> endobj 296 0 obj < /Dest[100 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 290 0 R/Next 300 0 R>> endobj 297 0 obj < /Dest[100 0 R/XYZ 72 667.3 0]/Parent 296 0 R/Next 298 0 R>> endobj 298 0 obj < /Dest[100 0 R/XYZ 72 340 0]/Parent 296 0 R/Prev 297 0 R/Next 299 0 R>> endobj 299 0 obj < /Dest[103 0 R/XYZ 72 710 0]/Parent 296 0 R/Prev 298 0 R>> endobj 300 0 obj < /Dest[106 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 296 0 R/Next 301 0 R>> endobj 301 0 obj < /Dest[109 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 300 0 R/Next 302 0 R>> endobj 302 0 obj < /Dest[112 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 301 0 R/Next 321 0 R>> endobj 303 0 obj < /Dest[112 0 R/XYZ 72 667.3 0]/Parent 302 0 R/Next 304 0 R>> endobj 304 0 obj < /Dest[112 0 R/XYZ 72 627.9 0]/Parent 302 0 R/Prev 303 0 R/Next 305 0 R>> endobj 305 0 obj < /Dest[112 0 R/XYZ 72 131 0]/Parent 302 0 R/Prev 304 0 R/Next 306 0 R>> endobj 306 0 obj < /Dest[115 0 R/XYZ 72 665.9 0]/Parent 302 0 R/Prev 305 0 R/Next 307 0 R>> endobj 307 0 obj < /Dest[115 0 R/XYZ 72 557.7 0]/Parent 302 0 R/Prev 306 0 R/Next 308 0 R>> endobj 308 0 obj < /Dest[115 0 R/XYZ 72 449.5 0]/Parent 302 0 R/Prev 307 0 R/Next 309 0 R>> endobj 309 0 obj < /Dest[118 0 R/XYZ 72 113.7 0]/Parent 302 0 R/Prev 308 0 R/Next 310 0 R>> endobj 310 0 obj < /Dest[121 0 R/XYZ 72 616.5 0]/Parent 302 0 R/Prev 309 0 R/Next 311 0 R>> endobj 311 0 obj < /Dest[121 0 R/XYZ 72 261.9 0]/Parent 302 0 R/Prev 310 0 R/Next 312 0 R>> endobj 312 0 obj < /Dest[124 0 R/XYZ 72 395.4 0]/Parent 302 0 R/Prev 311 0 R/Next 313 0 R>> endobj 313 0 obj < /Dest[127 0 R/XYZ 72 631.2 0]/Parent 302 0 R/Prev 312 0 R/Next 314 0 R>> endobj 314 0 obj < /Dest[127 0 R/XYZ 72 463.6 0]/Parent 302 0 R/Prev 313 0 R/Next 315 0 R>> endobj 315 0 obj < /Dest[130 0 R/XYZ 72 680.6 0]/Parent 302 0 R/Prev 314 0 R/Next 316 0 R>> endobj 316 0 obj < /Dest[130 0 R/XYZ 72 365.4 0]/Parent 302 0 R/Prev 315 0 R/Next 317 0 R>> endobj 317 0 obj < /Dest[130 0 R/XYZ 72 193.1 0]/Parent 302 0 R/Prev 316 0 R/Next 318 0 R>> endobj 318 0 obj < /Dest[133 0 R/XYZ 72 695.3 0]/Parent 302 0 R/Prev 317 0 R/Next 319 0 R>> endobj 319 0 obj < /Dest[133 0 R/XYZ 72 537.7 0]/Parent 302 0 R/Prev 318 0 R/Next 320 0 R>> endobj 320 0 obj < /Dest[133 0 R/XYZ 72 380.1 0]/Parent 302 0 R/Prev 319 0 R>> endobj 321 0 obj < /Dest[139 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 302 0 R/Next 322 0 R>> endobj 322 0 obj < /Dest[148 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 321 0 R/Next 323 0 R>> endobj 323 0 obj < /Dest[151 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 322 0 R/Next 324 0 R>> endobj 324 0 obj < /Dest[157 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 323 0 R/Next 329 0 R>> endobj 325 0 obj < /Dest[157 0 R/XYZ 72 652.6 0]/Parent 324 0 R/Next 326 0 R>> endobj 326 0 obj < /Dest[157 0 R/XYZ 72 583.8 0]/Parent 324 0 R/Prev 325 0 R/Next 327 0 R>> endobj 327 0 obj < /Dest[157 0 R/XYZ 72 367.4 0]/Parent 324 0 R/Prev 326 0 R/Next 328 0 R>> endobj 328 0 obj < /Dest[157 0 R/XYZ 72 239.8 0]/Parent 324 0 R/Prev 327 0 R>> endobj 329 0 obj < /Dest[160 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 324 0 R/Next 342 0 R>> endobj 330 0 obj < /Dest[160 0 R/XYZ 72 652.6 0]/Parent 329 0 R/Next 331 0 R>> endobj 331 0 obj < /Dest[160 0 R/XYZ 72 569.1 0]/Parent 329 0 R/Prev 330 0 R/Next 332 0 R>> endobj 332 0 obj < /Dest[160 0 R/XYZ 72 500.3 0]/Parent 329 0 R/Prev 331 0 R/Next 333 0 R>> endobj 333 0 obj < /Dest[160 0 R/XYZ 72 387.4 0]/Parent 329 0 R/Prev 332 0 R/Next 334 0 R>> endobj 334 0 obj < /Dest[160 0 R/XYZ 72 318.6 0]/Parent 329 0 R/Prev 333 0 R/Next 335 0 R>> endobj 335 0 obj < /Dest[160 0 R/XYZ 72 205.7 0]/Parent 329 0 R/Prev 334 0 R/Next 336 0 R>> endobj 336 0 obj < /Dest[163 0 R/XYZ 72 720 0]/Parent 329 0 R/Prev 335 0 R/Next 337 0 R>> endobj 337 0 obj < /Dest[163 0 R/XYZ 72 651.2 0]/Parent 329 0 R/Prev 336 0 R/Next 338 0 R>> endobj 338 0 obj < /Dest[163 0 R/XYZ 72 553 0]/Parent 329 0 R/Prev 337 0 R/Next 339 0 R>> endobj 339 0 obj < /Dest[163 0 R/XYZ 72 469.5 0]/Parent 329 0 R/Prev 338 0 R/Next 340 0 R>> endobj 340 0 obj < /Dest[163 0 R/XYZ 72 341.9 0]/Parent 329 0 R/Prev 339 0 R/Next 341 0 R>> endobj 341 0 obj < /Dest[163 0 R/XYZ 72 229 0]/Parent 329 0 R/Prev 340 0 R>> endobj 342 0 obj < /Dest[166 0 R/XYZ 72 696 0]/Parent 250 0 R/Prev 329 0 R>> endobj 343 0 obj < /Dest[169 0 R/XYZ 72 710 0]/Parent 342 0 R/Next 344 0 R>> endobj 344 0 obj < /Dest[172 0 R/XYZ 72 581.8 0]/Parent 342 0 R/Prev 343 0 R/Next 345 0 R>> endobj 345 0 obj < /Dest[175 0 R/XYZ 72 641.2 0]/Parent 342 0 R/Prev 344 0 R/Next 346 0 R>> endobj 346 0 obj < /Dest[178 0 R/XYZ 72 631.2 0]/Parent 342 0 R/Prev 345 0 R/Next 347 0 R>> endobj 347 0 obj < /Dest[178 0 R/XYZ 72 313.9 0]/Parent 342 0 R/Prev 346 0 R/Next 348 0 R>> endobj 348 0 obj < /Dest[178 0 R/XYZ 72 227.7 0]/Parent 342 0 R/Prev 347 0 R/Next 349 0 R>> endobj 349 0 obj < /Dest[181 0 R/XYZ 72 665.9 0]/Parent 342 0 R/Prev 348 0 R/Next 350 0 R>> endobj 350 0 obj < /Dest[181 0 R/XYZ 72 358.6 0]/Parent 342 0 R/Prev 349 0 R/Next 354 0 R>> endobj 351 0 obj < /Dest[184 0 R/XYZ 72 680.6 0]/Parent 350 0 R/Next 352 0 R>> endobj 352 0 obj < /Dest[190 0 R/XYZ 72 567.7 0]/Parent 350 0 R/Prev 351 0 R/Next 353 0 R>> endobj 353 0 obj < /Dest[190 0 R/XYZ 72 321.9 0]/Parent 350 0 R/Prev 352 0 R>> endobj 354 0 obj < /Dest[193 0 R/XYZ 72 710 0]/Parent 342 0 R/Prev 350 0 R/Next 355 0 R>> endobj 355 0 obj < /Dest[199 0 R/XYZ 72 710 0]/Parent 342 0 R/Prev 354 0 R>> endobj 356 0 obj < /Dest[199 0 R/XYZ 72 569.7 0]/Parent 355 0 R/Next 357 0 R>> endobj 357 0 obj < /Dest[199 0 R/XYZ 72 486.2 0]/Parent 355 0 R/Prev 356 0 R>> endobj 212 0 obj <> endobj 205 0 obj <> >> endobj 206 0 obj <> >> endobj 207 0 obj <> >> endobj 208 0 obj <> >> endobj 209 0 obj <> >> endobj 210 0 obj <> >> endobj 211 0 obj <> >> endobj 358 0 obj <> endobj 359 0 obj < /Creator /Producer /CreationDate(D:20170726164158-04'00')>> endobj xref 0 360 0000000000 65535 f 0000232064 00000 n 0000000019 00000 n 0000000371 00000 n 0000000391 00000 n 0000021126 00000 n 0000021419 00000 n 0000232210 00000 n 0000021439 00000 n 0000022958 00000 n 0000232356 00000 n 0000022979 00000 n 0000024599 00000 n 0000232504 00000 n 0000024621 00000 n 0000026365 00000 n 0000232652 00000 n 0000026387 00000 n 0000027976 00000 n 0000232800 00000 n 0000027998 00000 n 0000029595 00000 n 0000232948 00000 n 0000029617 00000 n 0000030907 00000 n 0000233096 00000 n 0000030929 00000 n 0000033642 00000 n 0000233244 00000 n 0000033664 00000 n 0000035447 00000 n 0000233392 00000 n 0000035469 00000 n 0000038145 00000 n 0000233540 00000 n 0000038167 00000 n 0000038757 00000 n 0000233688 00000 n 0000038778 00000 n 0000040248 00000 n 0000233836 00000 n 0000040270 00000 n 0000042101 00000 n 0000233984 00000 n 0000042123 00000 n 0000044552 00000 n 0000234151 00000 n 0000044574 00000 n 0000046777 00000 n 0000234299 00000 n 0000046799 00000 n 0000048438 00000 n 0000234447 00000 n 0000048460 00000 n 0000050853 00000 n 0000234595 00000 n 0000050875 00000 n 0000052919 00000 n 0000234743 00000 n 0000052941 00000 n 0000055387 00000 n 0000234891 00000 n 0000055409 00000 n 0000056597 00000 n 0000235039 00000 n 0000056619 00000 n 0000057937 00000 n 0000235187 00000 n 0000057959 00000 n 0000058626 00000 n 0000235335 00000 n 0000058647 00000 n 0000061094 00000 n 0000235483 00000 n 0000061116 00000 n 0000061958 00000 n 0000235631 00000 n 0000061979 00000 n 0000064280 00000 n 0000235779 00000 n 0000064302 00000 n 0000066458 00000 n 0000235927 00000 n 0000066480 00000 n 0000068889 00000 n 0000236075 00000 n 0000068911 00000 n 0000071318 00000 n 0000236223 00000 n 0000071340 00000 n 0000074104 00000 n 0000236371 00000 n 0000074126 00000 n 0000076445 00000 n 0000236519 00000 n 0000076467 00000 n 0000078987 00000 n 0000236667 00000 n 0000079009 00000 n 0000079454 00000 n 0000236815 00000 n 0000079475 00000 n 0000081426 00000 n 0000236965 00000 n 0000081449 00000 n 0000082376 00000 n 0000237115 00000 n 0000082398 00000 n 0000083036 00000 n 0000237265 00000 n 0000083058 00000 n 0000084265 00000 n 0000237415 00000 n 0000084288 00000 n 0000086487 00000 n 0000237565 00000 n 0000086510 00000 n 0000088365 00000 n 0000237715 00000 n 0000088388 00000 n 0000090261 00000 n 0000237865 00000 n 0000090284 00000 n 0000091903 00000 n 0000238015 00000 n 0000091926 00000 n 0000093879 00000 n 0000238165 00000 n 0000093902 00000 n 0000095722 00000 n 0000238315 00000 n 0000095745 00000 n 0000097274 00000 n 0000238465 00000 n 0000097297 00000 n 0000098854 00000 n 0000238615 00000 n 0000098877 00000 n 0000099545 00000 n 0000238765 00000 n 0000099567 00000 n 0000101972 00000 n 0000238915 00000 n 0000101995 00000 n 0000104236 00000 n 0000239065 00000 n 0000104259 00000 n 0000106153 00000 n 0000239234 00000 n 0000106176 00000 n 0000106777 00000 n 0000239384 00000 n 0000106799 00000 n 0000109160 00000 n 0000239561 00000 n 0000109183 00000 n 0000109614 00000 n 0000239711 00000 n 0000109636 00000 n 0000112153 00000 n 0000239861 00000 n 0000112176 00000 n 0000114803 00000 n 0000240011 00000 n 0000114826 00000 n 0000117432 00000 n 0000240180 00000 n 0000117455 00000 n 0000118993 00000 n 0000240357 00000 n 0000119016 00000 n 0000121177 00000 n 0000240507 00000 n 0000121200 00000 n 0000123495 00000 n 0000240657 00000 n 0000123518 00000 n 0000125729 00000 n 0000240807 00000 n 0000125752 00000 n 0000128364 00000 n 0000240957 00000 n 0000128387 00000 n 0000130830 00000 n 0000241107 00000 n 0000130853 00000 n 0000133533 00000 n 0000241257 00000 n 0000133556 00000 n 0000136276 00000 n 0000241407 00000 n 0000136299 00000 n 0000138692 00000 n 0000241557 00000 n 0000138715 00000 n 0000140696 00000 n 0000241707 00000 n 0000140719 00000 n 0000141266 00000 n 0000241857 00000 n 0000141288 00000 n 0000143645 00000 n 0000242007 00000 n 0000143668 00000 n 0000145774 00000 n 0000264769 00000 n 0000264913 00000 n 0000265070 00000 n 0000265227 00000 n 0000265387 00000 n 0000265557 00000 n 0000265722 00000 n 0000264170 00000 n 0000145797 00000 n 0000157490 00000 n 0000157514 00000 n 0000157712 00000 n 0000158061 00000 n 0000158272 00000 n 0000170060 00000 n 0000170084 00000 n 0000170287 00000 n 0000170692 00000 n 0000170953 00000 n 0000183265 00000 n 0000183289 00000 n 0000183482 00000 n 0000183871 00000 n 0000184113 00000 n 0000186230 00000 n 0000186253 00000 n 0000186447 00000 n 0000186762 00000 n 0000186938 00000 n 0000204872 00000 n 0000204896 00000 n 0000205093 00000 n 0000205791 00000 n 0000206320 00000 n 0000221886 00000 n 0000221910 00000 n 0000222112 00000 n 0000222726 00000 n 0000223178 00000 n 0000231048 00000 n 0000231071 00000 n 0000231279 00000 n 0000231637 00000 n 0000231862 00000 n 0000231963 00000 n 0000242157 00000 n 0000242218 00000 n 0000242432 00000 n 0000242603 00000 n 0000242874 00000 n 0000243053 00000 n 0000243212 00000 n 0000243351 00000 n 0000243592 00000 n 0000243784 00000 n 0000244023 00000 n 0000244236 00000 n 0000244421 00000 n 0000244649 00000 n 0000244843 00000 n 0000244992 00000 n 0000245128 00000 n 0000245293 00000 n 0000245454 00000 n 0000245637 00000 n 0000245814 00000 n 0000245997 00000 n 0000246142 00000 n 0000246287 00000 n 0000246458 00000 n 0000246635 00000 n 0000246775 00000 n 0000246950 00000 n 0000247214 00000 n 0000247351 00000 n 0000247567 00000 n 0000247722 00000 n 0000247857 00000 n 0000248024 00000 n 0000248171 00000 n 0000248338 00000 n 0000248507 00000 n 0000248672 00000 n 0000248857 00000 n 0000248981 00000 n 0000249136 00000 n 0000249309 00000 n 0000249521 00000 n 0000249826 00000 n 0000249971 00000 n 0000250128 00000 n 0000250304 00000 n 0000250464 00000 n 0000250621 00000 n 0000250817 00000 n 0000251004 00000 n 0000251180 00000 n 0000251348 00000 n 0000251569 00000 n 0000251798 00000 n 0000251968 00000 n 0000252096 00000 n 0000252242 00000 n 0000252400 00000 n 0000252574 00000 n 0000252720 00000 n 0000252874 00000 n 0000253016 00000 n 0000253166 00000 n 0000253320 00000 n 0000253470 00000 n 0000253608 00000 n 0000253746 00000 n 0000253884 00000 n 0000254046 00000 n 0000254212 00000 n 0000254349 00000 n 0000254481 00000 n 0000254641 00000 n 0000254801 00000 n 0000254989 00000 n 0000255234 00000 n 0000255452 00000 n 0000255918 00000 n 0000256459 00000 n 0000256704 00000 n 0000256981 00000 n 0000257431 00000 n 0000257905 00000 n 0000258131 00000 n 0000258409 00000 n 0000258615 00000 n 0000259107 00000 n 0000259341 00000 n 0000259565 00000 n 0000260055 00000 n 0000260229 00000 n 0000260420 00000 n 0000260592 00000 n 0000260903 00000 n 0000261201 00000 n 0000261499 00000 n 0000261745 00000 n 0000261939 00000 n 0000262085 00000 n 0000262251 00000 n 0000262421 00000 n 0000262714 00000 n 0000262900 00000 n 0000263085 00000 n 0000263305 00000 n 0000263580 00000 n 0000263877 00000 n 0000265852 00000 n 0000265970 00000 n trailer < ] /DocChecksum /52398A38345E1C5DDFB2D74F7C0D16A0 >> startxref 266192 %%EOF nixnote2-2.0.2/help/about.html000066400000000000000000000004071315604104400162100ustar00rootroot00000000000000

__VERSION__

Copyright Randy Baumgarte 2008-2016.
Licensed under the GNU GPLv2

Evernote is copyrighted by Evernote Corporation 2016.


__TRANSLATION__ nixnote2-2.0.2/html/000077500000000000000000000000001315604104400142235ustar00rootroot00000000000000nixnote2-2.0.2/html/attachmenticonbuilder.cpp000066400000000000000000000060061315604104400213010ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "attachmenticonbuilder.h" #include "global.h" #include #include #include #include #include extern Global global; AttachmentIconBuilder::AttachmentIconBuilder(QObject *parent) : QObject(parent) { } QString AttachmentIconBuilder::buildIcon(qint32 lid, QString fileName) { // First get the icon for this type of file QIcon icon; QFileInfo info(fileName); QFileIconProvider provider; icon = provider.icon(info); // Build a string name for the display QString displayName = info.fileName(); // Setup the painter QPainter p; // Setup the font QFont font; if (global.defaultGuiFontSize > 0) font.setPointSize (global.defaultGuiFontSize); font.setFamily("Arial"); QFontMetrics fm(font); int width = fm.width(displayName); if (width < 40) // steup a minimum width width = 40; width=width+50; // Add 10 px for padding & 40 for the icon // Start drawing a new pixmap for the image in the note QPoint textPoint(40,15); QPoint sizePoint(40,29); QPixmap pixmap(width,37); pixmap.fill(QColor(global.getEditorBackgroundColor())); p.begin(&pixmap); p.setFont(font); p.drawPixmap(QPoint(3,3), icon.pixmap(QSize(30,40))); // Write out the attributes of the file p.drawText(textPoint, displayName); QString unit = QString(tr("Bytes")); qint64 size = QFileInfo(fileName).size(); if (size > 1024) { size = size/1024; unit = QString(tr("KB")); } if (size > 1024) { size = size/1024; unit= QString("MB"); } QPen pen; pen.setColor(global.getEditorFontColor()); p.drawText(sizePoint, QString::number(size).trimmed() +" " +unit); p.drawRect(0,0,width-1,37-1); // Draw a rectangle around the image. p.end(); // Now that it is drawn, we write it out to a temporary file QString tmpFile = global.fileManager.getTmpDirPath(QString::number(lid) + QString("_icon.png")); tmpFile = tmpFile.replace("\\", "/"); pixmap.save(tmpFile, "png"); return tmpFile; } nixnote2-2.0.2/html/attachmenticonbuilder.h000066400000000000000000000024041315604104400207440ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef ATTACHMENTICONBUILDER_H #define ATTACHMENTICONBUILDER_H #include class AttachmentIconBuilder : public QObject { Q_OBJECT public: explicit AttachmentIconBuilder(QObject *parent = 0); QString buildIcon(qint32 lid, QString fileName); signals: public slots: }; #endif // ATTACHMENTICONBUILDER_H nixnote2-2.0.2/html/enmlformatter.cpp000066400000000000000000000740651315604104400176220ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "enmlformatter.h" #include "sql/resourcetable.h" #include "global.h" #include "utilities/encrypt.h" #include #include #include #include #include #ifdef _WIN32 #include #endif #include using namespace std; extern Global global; /* Constructor. */ EnmlFormatter::EnmlFormatter(QObject *parent) : QObject(parent) { //doc = new QDomDocument(); formattingError = false; coreattrs.append("style"); coreattrs.append("title"); i18n.append("lang"); i18n.append("xml:lang"); i18n.append("dir"); focus.append("accesskey"); focus.append("tabindex"); attrs.append(coreattrs); attrs.append(i18n); textAlign.append("align"); cellHalign.append("align"); cellHalign.append("char"); cellHalign.append("charoff"); cellValign.append("valign"); a.append("charset"); a.append("type"); a.append("name"); a.append("href"); a.append("hreflang"); a.append("rel"); a.append("rev"); a.append("shape"); a.append("coords"); a.append("target"); area.append("shape"); area.append("coords"); area.append("href"); area.append("nohref"); area.append("alt"); area.append("target"); bdo.append("lang"); bdo.append("xml:lang"); bdo.append("dir"); blockQuote.append("cite"); br.append("clear"); caption.append("align"); col.append("span"); col.append("width"); colGroup.append("span"); colGroup.append("width"); del.append("cite"); del.append("datetime"); dl.append("compact"); font.append("size"); font.append("color"); font.append("face"); hr.append("align"); hr.append("noshade"); hr.append("size"); hr.append("width"); img.append("src"); img.append("alt"); img.append("name"); img.append("longdesc"); img.append("height"); img.append("width"); img.append("usemap"); img.append("ismap"); img.append("align"); img.append("border"); img.append("hspace"); img.append("vspace"); ins.append("cite"); ins.append("datetime"); li.append("type"); li.append("value"); map.append("title"); map.append("name"); ol.append("type"); ol.append("compact"); ol.append("start"); pre.append("width"); pre.append("xml:space"); table.append("summary"); table.append("width"); table.append("border"); table.append("cellspacing"); table.append("cellpadding"); table.append("align"); table.append("bgcolor"); td.append("abbr"); td.append("rowspan"); td.append("colspan"); td.append("nowrap"); td.append("bgcolor"); td.append("width"); td.append("height"); th.append("abbr"); th.append("rowspan"); th.append("colspan"); th.append("nowrap"); th.append("bgcolor"); th.append("width"); th.append("height"); tr_.append("bgcolor"); ul.append("type"); ul.append("compact"); } /* Return the formatted content */ QString EnmlFormatter::getEnml() { return this->content; } void EnmlFormatter::setHtml(QString h) { content.clear(); content.append(h); } /* Take the ENML note and transform it into HTML that WebKit will not complain about */ QByteArray EnmlFormatter::rebuildNoteEnml() { resources.clear(); QByteArray b; qint32 index; // Remove invalid stuff content.replace("",""); content = this->removeInvalidUnicode(content); // Strip off HTML header & remove the background & default font color // if they match the theme default. index = content.indexOf(""); header = header.mid(0,index); QByteArray c2 = content.mid(content.indexOf(">",index)); QString newHeader = header; QString bgColor = "background-color: "+global.getEditorBackgroundColor()+";"; QString fgColor = "color: "+global.getEditorFontColor()+";"; newHeader = newHeader.replace(bgColor, ""); newHeader = newHeader.replace(fgColor,""); content = c1; content.append(newHeader).append(c2); // Start transforming the header index = content.indexOf("\n"); b.append("\n"); b.append(""); //b.append(""); b.append(content); b.append(""); content.clear(); content = b; // Remove tags in case pasting from MicroSoft products. content = content.replace("", ""); content = content.replace("", ""); content = content.replace("", ""); // Remove auto-complete tags content = content.replace("=2 || tidyRc < 0) { QLOG_ERROR() << "Error using tidySetInCharEncoding: " << tidyRc; useLegacyTidy=true; } else { tidyRc = tidySetOutCharEncoding(tdoc, "utf8"); if (tidyRc>=2 || tidyRc < 0) { QLOG_ERROR() << "Error using tidyOutInCharEncoding: " << tidyRc; useLegacyTidy=true; } else { tidyRc = tidySetErrorBuffer(tdoc, &errout); if (tidyRc>=2 || tidyRc < 0) { QLOG_ERROR() << "Error using tidySetErrorBuffer: " << tidyRc; useLegacyTidy=true; } else { QByteArray tarray = content; char * buffer; buffer = new char[tarray.size()+1]; strcpy(buffer, tarray.data()); buffer[tarray.size()] = '\0'; tidyRc = tidyParseString(tdoc, buffer); delete buffer; if (tidyRc>=2 || tidyRc < 0) { QLOG_ERROR() << "Error using tidyParseString: " << tidyRc; useLegacyTidy=true; } else { tidyRc = tidyCleanAndRepair(tdoc); if (tidyRc>=2 || tidyRc < 0) { QLOG_ERROR() << "Error using tidyCleanAndRepair: " << tidyRc; useLegacyTidy=true; } else { tidyRc = tidySaveBuffer(tdoc, &output); if (tidyRc>=2 || tidyRc < 0) { QLOG_ERROR() << "Error using tidySaveBuffer: " << tidyRc; useLegacyTidy=true; } else { content.clear(); content.append((const char*)output.bp, output.size); } } } } } } } if (output.allocated) tidyBufFree(&output); if (errout.allocated) tidyBufFree(&errout); tidyRelease(tdoc); } #endif // IF the new tidy had an error, or we choose to use the old method if ((useLegacyTidy || !global.useLibTidy) && !global.bypassTidy) { QLOG_DEBUG() << "Calling tidy"; QProcess tidyProcess; tidyProcess.start("tidy -raw -asxhtml -q -m -u -utf8 ", QIODevice::ReadWrite|QIODevice::Unbuffered); QLOG_DEBUG() << "Starting tidy " << tidyProcess.waitForStarted(); tidyProcess.waitForStarted(); tidyProcess.write(content); tidyProcess.closeWriteChannel(); tidyProcess.waitForFinished(); QLOG_DEBUG() << "Stopping tidy " << tidyProcess.waitForFinished() << " Return Code: " << tidyProcess.state(); QString errors(tidyProcess.readAllStandardError()); QStringList errorList = errors.split("\n"); for (int e=0; e proprietary attribute \"type\"") && not errorList[e].contains(" proprietary attribute \"oncontextmenu\"") && not errorList[e].contains(" proprietary attribute \"hash\"") && not errorList[e].contains(" proprietary attribute \"en-tag\"") && not errorList[e].contains(" proprietary attribute \"lid\"") && not errorList[e].contains(" proprietary attribute \"oncontextmenu\"") && not errorList[e].contains(" lacks \"alt\" attribute") ) { QLOG_DEBUG() << errorList[e]; } } QLOG_DEBUG() << "After tidy"; content.clear(); content.append(tidyProcess.readAllStandardOutput()); tidyProcess.close(); } if (content == "") { formattingError = true; return ""; } // Tidy puts this in place, but we don't really need it. content.replace("
", ""); content.replace("
", ""); index = content.indexOf("img { height:auto; width:auto; max-height:auto; max-width:100%; }"); content.prepend(""); content.prepend(""); content.append(""); content = fixEncryptionTags(content); if (global.guiAvailable) { QWebPage page; QEventLoop loop; page.mainFrame()->setContent(content); QObject::connect(&page, SIGNAL(loadFinished(bool)), &loop, SLOT(quit())); loop.exit(); QWebElement element = page.mainFrame()->documentElement(); QStringList tags = findAllTags(element); for (int i=0; ifindAllElements(tag); foreach (QWebElement element, anchors) { //QLOG_DEBUG() << "Processing tag name: " << element.tagName(); if (element.tagName().toLower() == "input") { processTodo(element); } else if (element.tagName().toLower() == "a") { fixLinkNode(element); } else if (element.tagName().toLower() == "object") { fixObjectNode(element); } else if (element.tagName().toLower() == "img") { fixImgNode(element); } else if (element.tagName().toLower() == "span"){ fixSpanNode(element); } else if (element.tagName().toLower() == "div") { fixDivNode(element); } else if (element.tagName().toLower() == "pre") { fixPreNode(element); } else if (!isElementValid(element)) element.removeFromDocument(); } } content.clear(); content.append(element.toOuterXml()); } // Strip off HTML header index = content.indexOf("", index)+1; content.remove(0,index); index = content.indexOf("\n"); b.append(""); //b.append(""); b.append(content); b.append(""); content.clear(); content = b.replace(""," ").replace(">", " "); int i = body.indexOf("0) { resources.append(lid); e.setOuterXml(e.toOuterXml().replace(""+encrypted+""); // e.setOuterXml(e.toOuterXml().replace("", ""); e.setOuterXml(newXml); } QString latex = e.attribute("href", ""); if (latex.toLower().startsWith("latex:///")) { removeInvalidAttributes(e); QString formula = e.attribute("title"); e.setAttribute("href", QString("http://latex.codecogs.com/gif.latex?%1").arg(formula)); //e.setOuterXml(e.toInnerXml()); } removeInvalidAttributes(e); checkAttributes(e, attrs+focus+a); } bool EnmlFormatter::isAttributeValid(QString attribute) { if (attribute.startsWith("on")) return false; if (attribute == "id") return false; if (attribute == "class") return false; if (attribute == "accesskey") return false; if (attribute == "data") return false; if (attribute == "dynsrc") return false; if (attribute == "tabindex") return false; // These are things that are NixNote specific if (attribute == "en-tag") return false; if (attribute == "src") return false; if (attribute == "en-new") return false; if (attribute == "guid") return false; if (attribute == "lid") return false; return true; } bool EnmlFormatter::isElementValid(QWebElement e) { if (global.bypassTidy) return true; QString element = e.tagName().toLower(); //QLOG_DEBUG() << "Checking tag " << element; if (element == "a") { checkAttributes(e, attrs+focus+a); return true; } if (element == "abbr") { checkAttributes(e,attrs); return true; } if (element == "acronym") { checkAttributes(e,attrs); return true; } if (element == "address") { checkAttributes(e,attrs); return true; } if (element == "area") { checkAttributes(e,attrs+focus+area); return true; } if (element == "b") { checkAttributes(e,attrs); return true; } if (element == "bdo") { checkAttributes(e,coreattrs+bdo); return true; } if (element == "big") { checkAttributes(e,attrs); return true; } if (element == "blockquote") { checkAttributes(e,attrs+blockQuote); return true; } if (element == "br") { checkAttributes(e,coreattrs+br); return true; } if (element == "caption") { checkAttributes(e,attrs+caption); return true; } if (element == "center") { checkAttributes(e,attrs); return true; } if (element == "cite") { checkAttributes(e,attrs); return true; } if (element == "code") { checkAttributes(e,attrs); return true; } if (element == "col") { checkAttributes(e,attrs+cellHalign+cellValign+col); return true; } if (element == "colgroup") { checkAttributes(e,attrs+cellHalign+cellValign+colGroup); return true; } if (element == "dd") { checkAttributes(e,attrs); return true; } if (element == "del") { checkAttributes(e,attrs+del); return true; } if (element == "dfn") { checkAttributes(e,attrs); return true; } if (element == "div") { checkAttributes(e,attrs+textAlign); return true; } if (element == "dl") { checkAttributes(e,attrs+dl); return true; } if (element == "dt") { checkAttributes(e,attrs); return true; } if (element == "em") { checkAttributes(e,attrs); return true; } if (element == "en-media") return true; if (element == "en-crypt") return true; if (element == "en-todo") return true; if (element == "en-note") return true; if (element == "font") { checkAttributes(e,coreattrs+i18n+font); return true; } if (element == "h1") { checkAttributes(e,attrs+textAlign); return true; } if (element == "h2") { checkAttributes(e,attrs+textAlign); return true; } if (element == "h3") { checkAttributes(e,attrs+textAlign); return true; } if (element == "h4") { checkAttributes(e,attrs+textAlign); return true; } if (element == "h5") { checkAttributes(e,attrs+textAlign); return true; } if (element == "h6") { checkAttributes(e,attrs+textAlign); return true; } if (element == "hr") { checkAttributes(e,attrs+hr); return true; } if (element == "i") { checkAttributes(e,attrs); return true; } if (element == "img") { checkAttributes(e,attrs+img); return true; } if (element == "ins") { checkAttributes(e,attrs+ins); return true; } if (element == "kbd") { checkAttributes(e,attrs); return true; } if (element == "li") { checkAttributes(e,attrs+li); return true; } if (element == "map") { checkAttributes(e,i18n+map); return true; } if (element == "ol") { checkAttributes(e,attrs+ol); return true; } if (element == "p") { checkAttributes(e,attrs+textAlign); return true; } if (element == "pre") { checkAttributes(e,attrs+pre); return true; } if (element == "q") { checkAttributes(e,attrs+q); return true; } if (element == "s") { checkAttributes(e,attrs); return true; } if (element == "samp") { checkAttributes(e,attrs); return true; } if (element == "small") { checkAttributes(e,attrs); return true; } if (element == "span") { checkAttributes(e,attrs); return true; } if (element == "strike") { checkAttributes(e,attrs); return true; } if (element == "strong") { checkAttributes(e,attrs); return true; } if (element == "sub") { checkAttributes(e,attrs); return true; } if (element == "sup") { checkAttributes(e,attrs); return true; } if (element == "table") { checkAttributes(e,attrs+table); return true; } if (element == "tbody") { checkAttributes(e,attrs+cellHalign+cellValign); return true; } if (element == "td") { checkAttributes(e,attrs+cellValign+cellHalign+td); return true; } if (element == "tfoot") { checkAttributes(e,attrs+cellHalign+cellValign); return true; } if (element == "th") { checkAttributes(e,attrs+cellHalign+cellValign+th); return true; } if (element == "thread") { checkAttributes(e,attrs+cellHalign+cellValign); return true; } if (element == "title") return true; if (element == "tr") { checkAttributes(e,attrs+cellHalign+cellValign+tr_); return true; } if (element == "tt") { checkAttributes(e,attrs); return true; } if (element == "u") { checkAttributes(e,attrs); return true; } if (element == "ul") { checkAttributes(e,attrs+ul); return true; } if (element == "var") { checkAttributes(e,attrs); return true; } if (element == "xmp") return true; QLOG_DEBUG() << "WARNING: " << element << " is invalid"; return false; } void EnmlFormatter::removeInvalidAttributes(QWebElement &node) { // Remove any invalid attributes QStringList attributes = node.attributeNames(); for (int i=0; i", "
"); // Fix the
tags content = content.replace("
", "
"); pos = content.indexOf("", pos); int tagEndPos = content.indexOf("/>", pos); // Check the next /> end tag. If it is beyond the end // of the current tag or if it doesn't exist then we // need to fix the end of the img if (tagEndPos == -1 || tagEndPos > endPos) { content = content.mid(0, endPos) + QByteArray("/>") +content.mid(endPos+1); } pos = content.indexOf(" tags content = content.replace("", ""); pos = content.indexOf("", pos); int tagEndPos = content.indexOf("/>", pos); // Check the next /> end tag. If it is beyond the end // of the current tag or if it doesn't exist then we // need to fix the end of the img if (tagEndPos == -1 || tagEndPos > endPos) { content = content.mid(0, endPos) + QByteArray("/>") +content.mid(endPos+1); } pos = content.indexOf(" tags content = content.replace("", ""); pos = content.indexOf("", pos); int tagEndPos = content.indexOf("/>", pos); // Check the next /> end tag. If it is beyond the end // of the current tag or if it doesn't exist then we // need to fix the end of the img if (tagEndPos == -1 || tagEndPos > endPos) { content = content.mid(0, endPos) + QByteArray("/>") +content.mid(endPos+1); } pos = content.indexOf("", i+1)+4; endData = newContent.indexOf("",startPos); QString text = newContent.mid(startPos,endData-startPos); endPos = newContent.indexOf("",i+1)+8; // Encrypt the text QPair pair = global.passwordSafe.value(slot); QString password = pair.first; QString hint = pair.second; EnCrypt crypt; QString encrypted; crypt.encrypt(encrypted, text, password); // replace the table with an en-crypt tag. QByteArray start = newContent.mid(0,i-1); QByteArray end = newContent.mid(endPos); newContent.clear(); newContent.append(start); newContent.append(QByteArray("")); newContent.append(encrypted.toLocal8Bit()); newContent.append(QByteArray("")); newContent.append(end); } return newContent; } // Remove any invalid unicode characters to allow it to sync properly. QByteArray EnmlFormatter::removeInvalidUnicode(QByteArray content) { QString c(content); c = c.remove(QChar( 0x1b ), Qt::CaseInsensitive); return c.toUtf8(); } // Look through all attributes of the node. If it isn't in the list of // valid attributes, we remove it. void EnmlFormatter::checkAttributes(QWebElement &e, QStringList valid) { if (!global.strictDTD) return; QStringList attrs = e.attributeNames(); for (int i=0; i #include #include #include #include #include #include #include #include #include using namespace std; class EnmlFormatter : public QObject { Q_OBJECT private: QByteArray content; QDomDocument doc; bool isAttributeValid(QString attribute); bool isElementValid(QWebElement e); void scanTags(QWebElement &element); void fixImgNode(QWebElement &element); void fixEnCryptNode(QWebElement &element); void processTodo(QWebElement &element); QStringList findAllTags(QWebElement &element); void removeInvalidAttributes(QWebElement &node); void fixLinkNode(QWebElement e); void fixObjectNode(QWebElement &e); void scanTags(); void fixNode(const QDomNode &node); void postXmlFix(); void fixSpanNode(QWebElement &e); void fixDivNode(QWebElement &e); void fixPreNode(QWebElement &e); QByteArray removeInvalidUnicode(QByteArray content); QByteArray fixEncryptionTags(QByteArray newContent); QStringList coreattrs; QStringList i18n; QStringList focus; QStringList attrs; QStringList textAlign; QStringList cellHalign; QStringList cellValign; QStringList a; QStringList area; QStringList bdo; QStringList blockQuote; QStringList br; QStringList caption; QStringList colHAlign; QStringList colVAlign; QStringList col; QStringList colGroup; QStringList del; QStringList dl; QStringList font; QStringList hr; QStringList img; QStringList ins; QStringList li; QStringList map; QStringList ol; QStringList pre; QStringList q; QStringList table; QStringList td; QStringList th; QStringList tr_; QStringList ul; void checkAttributes(QWebElement &e, QStringList valid); public: bool formattingError; QList resources; explicit EnmlFormatter(QObject *parent = 0); void setHtml(QString html); QString getEnml(); QByteArray rebuildNoteEnml(); signals: public slots: }; #endif // ENMLFORMATTER_H nixnote2-2.0.2/html/noteformatter.cpp000066400000000000000000000661411315604104400176300ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "noteformatter.h" #include "sql/resourcetable.h" #include "sql/notebooktable.h" #include "sql/sharednotebooktable.h" #include "sql/linkednotebooktable.h" #include "global.h" #include "filters/filtercriteria.h" #include "filters/filterengine.h" #include "utilities/mimereference.h" #include #include #if QT_VERSION < 0x050000 #include #else #include #endif #include #include #include using namespace std; extern Global global; /* Constructor. */ NoteFormatter::NoteFormatter(QObject *parent) : QObject(parent) { thumbnail = false; this->setNoteHistory(false); this->noteHistory = false; this->pdfPreview = true; this->readOnly = false; this->formatError = false; this->inkNote = false; this->resourceError = false; this->resourceHighlight = false; } /* Set the note we are currently formatting. The pdfPreview is an indication if we should generate a picture for the attachment rather than doing it as an attachment. */ void NoteFormatter::setNote(Note n, bool pdfPreview) { this->pdfPreview = pdfPreview; this->note = n; content = ""; //this->enableHighlight = true; readOnly = false; inkNote = false; NoteAttributes attributes; if (note.attributes.isSet()) { attributes = note.attributes; QString contentClass; if (attributes.contentClass.isSet()) contentClass = attributes.contentClass; if (contentClass != "") { QLOG_DEBUG() << "Content class not empty. Setting read-only."; readOnly = true; } } } /* Return the formatted content */ QString NoteFormatter::getPage() { return this->content; } /* If we have search criteria, then we highlight the text matching those results in the note. */ //void NoteFormatter::setHighlight() { // FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; // if (criteria->isSearchStringSet()) // enableHighlight = true; // else // enableHighlight = false; //} /* If we are here because we are viewing note history, then we set the flag here. Note history is almost the same as a regular note, but there are some differences. */ void NoteFormatter::setNoteHistory(bool value) { this->noteHistory = value; } /* Take the ENML note and transform it into HTML that WebKit will not complain about */ QByteArray NoteFormatter::rebuildNoteHTML() { QLOG_TRACE() << "Rebuilding HTML"; formatError = false; readOnly = false; ResourceTable resTable(global.db); if (!note.guid.isSet()) { formatError=true; readOnly=true; QLOG_TRACE() << "NOTE GUID IS NOT SET!!!"; } else { QLOG_TRACE() << "getting resource from hash"; resTable.getResourceMap(hashMap, resourceMap, note.guid); } QWebPage page; QEventLoop loop; QLOG_TRACE() << "Before preHTMLFormat"; QString html = ""; if (note.content.isSet()) html = preHtmlFormat(note.content); html.replace("", ""); QByteArray htmlPage; htmlPage.append(html); QLOG_TRACE() << "About to set content"; page.mainFrame()->setContent(htmlPage); QObject::connect(&page, SIGNAL(loadFinished(bool)), &loop, SLOT(quit())); QLOG_TRACE() << "Starting to modify tags"; modifyTags(page); QLOG_TRACE() << "Done modifying tags"; note.content = page.mainFrame()->toHtml(); content.clear(); content.append(note.content); qint32 index = content.indexOf("img { height:auto; width:auto; max-height:auto; max-width:100%; }"); content.prepend(""); content.prepend(""); content.append(""); if (!formatError && !readOnly) { NotebookTable ntable(global.db); if (note.notebookGuid.isSet()) { qint32 notebookLid = ntable.getLid(note.notebookGuid); if (ntable.isReadOnly(notebookLid)) { QLOG_DEBUG() << "Notebook is read-only. Marking note read-only."; readOnly = true; } } } if (note.active.isSet() && !note.active) { QLOG_DEBUG() << "Note is inactive. Setting to read-only."; readOnly = true; } QLOG_TRACE() << "Done rebuiling HTML"; return content; } // This is to turn the tags into tags because // QWebPage tends to miss the /> tag and it can cause some text to be missed QString NoteFormatter::preHtmlFormat(QString note) { QLOG_TRACE_IN(); int pos; // Correct

because Webkit messes it up. QString content = note.replace("

", "
"); pos = content.indexOf("", pos); int tagEndPos = content.indexOf("/>", pos); // Check the next /> end tag. If it is before the end // of the current tag or if it doesn't exist then we // need to fix the end of the img if (tagEndPos == -1 || tagEndPos < endPos) { content = content.mid(0, endPos) + QByteArray(">
") +content.mid(endPos+1); } pos = content.indexOf("findAllElements("en-media"); QLOG_TRACE() << "Search complete: " << anchors.toList().size(); foreach (QWebElement enmedia, anchors) { if (enmedia.hasAttribute("type")) { QString attr = enmedia.attribute("type"); QString hash = enmedia.attribute("hash"); QStringList type = attr.split("/"); if (type.size() >= 2) { QString appl = type[1]; QLOG_TRACE() << "En-Media tag type: " << type[0]; if (type[0] == "image") modifyImageTags(enmedia, hash); else modifyApplicationTags(enmedia, hash, appl); QLOG_TRACE() << "Type modified"; } } } // Modify todo tags anchors = doc.mainFrame()->findAllElements("en-todo"); qint32 enTodoCount = anchors.count(); for (qint32 i=enTodoCount-1; i>=0; i--) { QWebElement enmedia = anchors.at(i); modifyTodoTags(enmedia); } anchors = doc.mainFrame()->findAllElements("en-crypt"); qint32 enCryptLen = anchors.count(); for (qint32 i=enCryptLen-1; i>=0; i--) { QWebElement enmedia = anchors.at(i); QString hint = enmedia.attribute("hint"); QString cipher = enmedia.attribute("cipher", "RC2"); QString length = enmedia.attribute("length","64"); enmedia.setAttribute("contentEditable","false"); enmedia.setAttribute("src", QString("file://")+global.fileManager.getImageDirPath("encrypt.png")); enmedia.setAttribute("en-tag","en-crypt"); enmedia.setAttribute("cipher", cipher); enmedia.setAttribute("length", length); enmedia.setAttribute("hint", hint); enmedia.setAttribute("alt", enmedia.toInnerXml()); global.cryptCounter++; enmedia.setAttribute("id", "crypt"+QString().number(global.cryptCounter)); QString encryptedText = enmedia.toInnerXml(); // If the encryption string contains crlf at the end, remove them because they mess up the javascript. if (encryptedText.endsWith("\n")) encryptedText.truncate(encryptedText.length()-1); if (encryptedText.endsWith("\r")) encryptedText.truncate(encryptedText.length()-1); // Add the commands hint = hint.replace("'","'"); enmedia.setAttribute("onClick", "window.browserWindow.decryptText('crypt"+ QString().number(global.cryptCounter)+ "', '"+encryptedText+"', '"+ hint +"', '" + cipher+ "', " + length + ");"); enmedia.setAttribute("onMouseOver", "style.cursor='hand'"); enmedia.setInnerXml(""); QString k = enmedia.toOuterXml(); k.replace("", "findAllElements("a"); enCryptLen = anchors.count(); for (qint32 i=0; i= global.getMinimumRecognitionWeight()) { // Check to see if this word matches something we're looking for for (int k=0; k0) { QLOG_TRACE() << "Getting resource"; Resource r = resourceMap[resLid]; QLOG_TRACE() << "resource retrieved"; MimeReference ref; QString filename; ResourceAttributes attributes; if (r.attributes.isSet()) attributes = r.attributes; if (attributes.fileName.isSet()) filename = attributes.fileName; QString type = ref.getExtensionFromMime(mimetype, filename); Data data; if (r.data.isSet()) data = r.data; if (data.size.isSet() && data.size > 0) { QString imgfile = "file:///"+global.fileManager.getDbDirPath(QString("dba/") +QString::number(resLid) +type); enMedia.setAttribute("src", imgfile); // Check if this is a LaTeX image ResourceAttributes attributes; if (r.attributes.isSet()) attributes = r.attributes; QString sourceUrl = ""; if (attributes.sourceURL.isSet()) sourceUrl = attributes.sourceURL; if (sourceUrl.toLower().startsWith("http://latex.codecogs.com/gif.latex?")) { enMedia.appendInside(""); QWebElement newText = enMedia.lastChild(); enMedia.setAttribute("en-tag", "en-latex"); newText.setAttribute("onMouseOver", "style.cursor='pointer'"); sourceUrl.replace("http://latex.codecogs.com/gif.latex?",""); newText.setAttribute("title", sourceUrl); newText.setAttribute("href", "latex:///"+QString::number(resLid)); } enMedia.setAttribute("onContextMenu", "window.browserWindow.imageContextMenu('" +QString::number(resLid) +"', '" +QString::number(resLid) +type +"');"); if (!global.disableImageHighlight()) { highlightString = addImageHighlight(resLid, imgfile); if (highlightString != "") enMedia.setAttribute("src", highlightString); //if (highlightString != "") // enMedia.setAttribute("onload", highlightString); } } } else { resourceError = true; QLOG_DEBUG() << "Resource error. Setting note to read-only."; readOnly = true; } // Reset the tags to something that WebKit will understand enMedia.setAttribute("en-tag", "en-media"); enMedia.setPlainText(""); enMedia.setAttribute("lid", QString::number(resLid)); // rename the tag to enMedia.setOuterXml(enMedia.toOuterXml().replace("","")); QLOG_TRACE_OUT(); } // Modify the en-media tag into an attachment void NoteFormatter::modifyApplicationTags(QWebElement &enmedia, QString &hash, QString appl) { QLOG_TRACE_IN(); if (appl.toLower() == "vnd.evernote.ink") { QLOG_DEBUG() << "Note is ink-note. Setting to read-only."; inkNote = true; readOnly = true; buildInkNote(enmedia, hash); return; } ResourceTable resTable(global.db); QString contextFileName; QLOG_DEBUG() << "Fetching for note: " << note.guid << " hash: " << hash; qint32 resLid = resTable.getLidByHashHex(note.guid, hash); Resource r; resTable.get(r, resLid, false); if (!r.data.isSet()) resourceError = true; else { // If we are running the formatter and we are not generating a thumbnail QString mimetype = ""; if (r.mime.isSet()) mimetype = r.mime; // Check that we don't have a locked PDF. If we do, then disable PDF previews. if (mimetype == "application/pdf") { QString file = global.fileManager.getDbaDirPath() + QString::number(resLid) +".pdf"; Poppler::Document *doc = Poppler::Document::load(file); if (doc != NULL && doc->isLocked()) pdfPreview = false; } if (mimetype == "application/pdf" && pdfPreview && !thumbnail) { modifyPdfTags(resLid, enmedia); return; } // If we are running the formatter so we can generate a thumbnail and it is a PDF if (mimetype == "application/pdf" && pdfPreview && thumbnail) { QString printImageFile = global.fileManager.getTmpDirPath() + QString::number(resLid) +QString("-print.jpg"); QString file = global.fileManager.getDbaDirPath() + QString::number(resLid) +".pdf"; Poppler::Document *doc; doc = Poppler::Document::load(file); if (doc == NULL) return; QImage *image = new QImage(doc->page(0)->renderToImage()); image->save(printImageFile,"jpg"); delete image; enmedia.setAttribute("src", printImageFile); enmedia.removeAttribute("hash"); enmedia.removeAttribute("type"); enmedia.setOuterXml(enmedia.toOuterXml().replace("","")); return; } QString fileDetails = ""; MimeReference ref; ResourceAttributes attributes; if (r.attributes.isSet()) attributes = r.attributes; if (attributes.fileName.isSet()) fileDetails = ref.getExtensionFromMime(r.mime, fileDetails); enmedia.setAttribute("href", QString("nnres:") +global.fileManager.getDbaDirPath()+QString::number(resLid) +fileDetails); contextFileName = global.fileManager.getTmpDirPath("")+QString::number(resLid) +global.attachmentNameDelimeter + fileDetails; // Setup the context menu. This is useful if we want to do a "save as" or such contextFileName = contextFileName.replace("\\", "/"); enmedia.setAttribute("onContextMenu", "window.browserWindow.resourceContextMenu('" +contextFileName +"');"); enmedia.setAttribute("en-tag", "en-media"); enmedia.setAttribute("lid", QString::number(resLid)); enmedia.appendInside(""); QWebElement newText = enmedia.lastChild(); // Build an icon of the image QString fileExt; if (attributes.fileName.isSet()) fileExt = attributes.fileName; else fileExt = appl; QString fn; QString mime; if (attributes.fileName.isSet()) fn = attributes.fileName; if (r.mime.isSet()) mime = r.mime; fileExt = ref.getExtensionFromMime(mime, fn); QString icon = findIcon(resLid, r, fileExt); newText.setAttribute("src", "file:///"+icon); if (attributes.fileName.isSet()) newText.setAttribute("title",attributes.fileName); newText.setAttribute("en-tag", "temporary"); //Rename the tag to a
link enmedia.setOuterXml(enmedia.toOuterXml().replace("","")); } QLOG_TRACE_OUT(); } // Build an icon for any attachments QString NoteFormatter::findIcon(qint32 lid, Resource r, QString appl) { QLOG_TRACE_IN(); FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; // First get the icon for this type of file resourceHighlight = false; if (criteria->isSearchStringSet() && criteria->getSearchString() != "") { FilterEngine engine; resourceHighlight = engine.resourceContains(lid, criteria->getSearchString(), NULL); } QString fileName = global.fileManager.getDbaDirPath(QString::number(lid) +appl); QIcon icon; QFileInfo info(fileName); QFileIconProvider provider; icon = provider.icon(info); // Build a string name for the display QString displayName; ResourceAttributes attributes; if (r.attributes.isSet()) attributes = r.attributes; if (attributes.fileName.isSet()) displayName = attributes.fileName; else displayName = appl.toUpper() +" " +QString(tr("File")); // Setup the painter QPainter p; // Setup the font QFont font; // =p.font() ; global.getGuiFont(font); QPen fontPen; fontPen.setColor(QColor(global.getEditorFontColor())); // font.setFamily("Arial"); QFontMetrics fm(font); int width = fm.width(displayName); if (width < 40) // steup a minimum width width = 40; width=width+50; // Add 10 px for padding & 40 for the icon // Start drawing a new pixmap for the image in the note QPoint textPoint(40,15); QPoint sizePoint(40,29); QPixmap pixmap(width,37); if (resourceHighlight) { pixmap.fill(Qt::yellow); } else pixmap.fill(QColor(global.getEditorBackgroundColor())); p.begin(&pixmap); p.setPen(fontPen); p.setFont(font); p.drawPixmap(QPoint(3,3), icon.pixmap(QSize(30,40))); // Write out the attributes of the file p.drawText(textPoint, displayName); QString unit = QString(tr("Bytes")); qint64 size = QFileInfo(fileName).size(); if (size > 1024) { size = size/1024; unit = QString(tr("KB")); } if (size > 1024) { size = size/1024; unit= QString("MB"); } p.drawText(sizePoint, QString::number(size).trimmed() +" " +unit); p.drawRect(0,0,width-1,37-1); // Draw a rectangle around the image. p.end(); // Now that it is drawn, we write it out to a temporary file QString tmpFile = global.fileManager.getTmpDirPath(QString::number(lid) + QString("_icon.png")); pixmap.save(tmpFile, "png"); return tmpFile; QLOG_TRACE_OUT(); } // Modify the en-to tag into an input field void NoteFormatter::modifyTodoTags(QWebElement &todo) { QLOG_TRACE_IN(); todo.setAttribute("type", "checkbox"); // Checks the en-to tag wheter or not the todo-item is checked or not // and sets up the HTML to keep storing the information in value QString checked = todo.attribute("checked"); if (checked.toLower() == "true") todo.setAttribute("checked", "checked"); else todo.removeAttribute("checked"); todo.setAttribute("onClick", "if(!checked) removeAttribute('checked'); else setAttribute('checked', 'checked'); editorWindow.editAlert();"); todo.setAttribute("style", "cursor: hand;"); todo.setOuterXml(todo.toOuterXml().replace("en-todo","input")); QLOG_TRACE_OUT(); } /* If we have an ink note, then we need to pull the image and display it */ bool NoteFormatter::buildInkNote(QWebElement &docElem, QString &hash) { QLOG_TRACE_IN(); ResourceTable resTable(global.db); qint32 resLid = resTable.getLidByHashHex(note.guid, hash); if (resLid <= 0) return false; docElem.setAttribute("en-tag", "en-media"); docElem.setAttribute("lid", QString::number(resLid)); docElem.setAttribute("type", "application/vnd.evernote.ink"); QString filename = QString("file:///") +global.fileManager.getDbaDirPath()+QString::number(resLid)+QString(".png"); docElem.setAttribute("src", filename); QString k = docElem.toOuterXml(); k.replace("", "img>");; docElem.setOuterXml(k); QLOG_TRACE_OUT(); return true; } void NoteFormatter::modifyPdfTags(qint32 resLid, QWebElement &enmedia) { QLOG_TRACE_IN(); enmedia.setAttribute("width", "100%"); enmedia.setAttribute("height", "100%"); enmedia.setAttribute("lid", QString::number(resLid)); QString x = enmedia.toOuterXml(); x.replace("en-media", "object"); enmedia.setOuterXml(x); x = enmedia.toOuterXml(); QLOG_TRACE_OUT(); } void NoteFormatter::setHighlightText(QString text) { QLOG_TRACE_IN(); QStringList temp = text.split(" "); for (int i=0; i #include #include #include #include #include #include #include #include #include #include #include "qevercloud/include/QEverCloud.h" using namespace qevercloud; using namespace std; class NoteFormatter : public QObject { Q_OBJECT private: Note note; QByteArray content; bool pdfPreview; QList< QTemporaryFile* > tempFiles; QStringList highlightWords; bool noteHistory; bool formatError; QString addImageHighlight(qint32 resLid, QString imgfile); void modifyImageTags(QWebElement &enMedia, QString &hash); void modifyApplicationTags(QWebElement &enmedia, QString &hash, QString appl); void modifyPdfTags(qint32 resLid, QWebElement &enmedia); void modifyTodoTags(QWebElement &todo); void modifyTags(QWebPage &doc); QString findIcon(qint32 lid, Resource r, QString appl); QString preHtmlFormat(QString content); QHash hashMap; QHash resourceMap; bool resourceHighlight; const char* findImageFormat(QString file); public: bool resourceError; bool readOnly; bool inkNote; bool thumbnail; //bool enableHighlight; explicit NoteFormatter(QObject *parent = 0); void setNote(Note n, bool pdfPreview); QEventLoop eventLoop; QString getPage(); //void setHighlight(); void setNoteHistory(bool value); QByteArray rebuildNoteHTML(); bool buildInkNote(QWebElement &docElem, QString &hash); void setHighlightText(QString text); signals: void fileIconProviderRequested(QString fileName); public slots: }; #endif // NOTEFORMATTER_H nixnote2-2.0.2/html/tagscanner.cpp000066400000000000000000000054651315604104400170660ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "tagscanner.h" #include "global.h" TagScannerRecord::TagScannerRecord(QObject *parent) { Q_UNUSED(parent); // suppress unused this->startPosition = -1; this->endPosition = -1; } TagScanner::TagScanner(QObject *parent) : QObject(parent) { content = ""; recTable.clear(); } void TagScanner::setData(QString data) { content = data; qint32 position = content.indexOf(QString("<"), Qt::CaseInsensitive); // Scan through & find all of the tags in a note while (position != -1) { TagScannerRecord newRec; newRec.startPosition = position; // Position of the < newRec.endPosition = content.indexOf(QString(">"), position); // Position of the next > qint32 space = content.indexOf(" ", position); // If there is a space, then we remove any trailing values // Check for an invalid end position if (space > newRec.endPosition || space == -1) space = newRec.endPosition; // Get the tag's name QString tagName = content.mid(position+1, space-position-1); // Insert the tag qint32o the table along with its record position recTable.insert(tagName, newRec); // Start looking for the next tag position = content.indexOf(QString("<"),newRec.endPosition, Qt::CaseInsensitive); } } qint32 TagScanner::findAll(QList &recs, QString tagName) { recs.clear(); qint32 position = content.indexOf(QString("<")+tagName, Qt::CaseInsensitive); while (position != -1) { TagScannerRecord newRec; newRec.startPosition = position; newRec.endPosition = content.indexOf(QString(">"), position); recs.append(newRec); position = content.indexOf(QString("<")+tagName, Qt::CaseInsensitive); QLOG_DEBUG() << "Found: " << content.mid(newRec.startPosition, newRec.endPosition); } return recs.size(); } nixnote2-2.0.2/html/tagscanner.h000066400000000000000000000027631315604104400165310ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef TAGSCANNER_H #define TAGSCANNER_H #include #include #include class TagScannerRecord { public: TagScannerRecord(QObject *parent = 0); qint32 startPosition; qint32 endPosition; }; class TagScanner : public QObject { Q_OBJECT private: QString content; QHash recTable; public: explicit TagScanner(QObject *parent = 0); void setData(QString data); qint32 findAll(QList &recs, QString tagName); signals: public slots: }; #endif // TAGSCANNER_H nixnote2-2.0.2/html/thumbnailer.cpp000066400000000000000000000102351315604104400172420ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "thumbnailer.h" #include #include #include #include #include #include "global.h" #include "sql/notetable.h" extern Global global; /* Generic constructor. */ Thumbnailer::Thumbnailer(DatabaseConnection *db) { this->db = db; page = new QWebPage(); connect(page, SIGNAL(loadFinished(bool)), this, SLOT(pageReady(bool))); idle = true; connect(&timer, SIGNAL(timeout()), this, SLOT(generateNextThumbnail())); } Thumbnailer::~Thumbnailer() { delete page; } void Thumbnailer::render(qint32 lid) { idle = false; this->lid = lid; NoteFormatter formatter; formatter.thumbnail = true; NoteTable noteTable(db); Note n; noteTable.get(n,lid,false, false); formatter.setNote(n,false); QByteArray formattedContent = formatter.rebuildNoteHTML(); // Windows check for font bug when viewing Unicode characters #ifdef _WIN32 for(int i = 0; i < formattedContent.size(); ++i) { char c = formattedContent.at(i); QChar cc(c); if(cc.unicode() > 127) { c = ' '; formattedContent.replace(c,' '); } } #endif page->mainFrame()->setContent(formattedContent); } void Thumbnailer::startTimer() { timer.stop(); timer.start(global.minimumThumbnailInterval*1000); } void Thumbnailer::pageReady(bool ok) { if (ok) { capturePage(page); } NoteTable ntable(db); ntable.setThumbnailNeeded(lid, false); idle = true; } void Thumbnailer::capturePage(QWebPage *page) { page->mainFrame()->setZoomFactor(3); page->setViewportSize(QSize(300,300)); page->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); page->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); QImage pix(QSize(300,300), QImage::Format_ARGB32); QPainter painter; painter.begin(&pix); page->mainFrame()->render(&painter); painter.end(); QString filename = global.fileManager.getThumbnailDirPath()+QString::number(lid) +".png"; pix.save(filename); NoteTable ntable(db); ntable.setThumbnail(lid, filename); } void Thumbnailer::generateNextThumbnail() { // If we are connected we are downloading or uploading or // if we have thumbnails disabled, so // we don't want to do this now. if (global.connected || global.disableThumbnails) { timer.start(global.maximumThumbnailInterval*1000); return; } timer.stop(); NoteTable noteTable(db); int i=0; for (; i deadlineTime) { QLOG_DEBUG() << "Thumbnail timer exceeded. Going to seep"; timer.start(global.maximumThumbnailInterval*1000); return; } if (this->idle) { i++; qint32 lid = noteTable.getNextThumbnailNeeded(); if (lid>0) { render(lid); } else { timer.start(global.maximumThumbnailInterval*1000); return; } } } timer.start(global.minimumThumbnailInterval*1000); } nixnote2-2.0.2/html/thumbnailer.h000066400000000000000000000032521315604104400167100ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef THUMBNAILER_H #define THUMBNAILER_H #include #include #include #include "html/noteformatter.h" #include "sql/databaseconnection.h" #include "qevercloud/include/QEverCloud.h" using namespace qevercloud; using namespace std; class Thumbnailer : public QObject { Q_OBJECT private: DatabaseConnection *db; QTimer timer; int minTime; int maxTime; public: QWebPage *page; Thumbnailer(DatabaseConnection *db); ~Thumbnailer(); void render(qint32 lid); qint32 lid; bool idle; void capturePage(QWebPage *page); void startTimer(); signals: private slots: public slots: void pageReady(bool ok); void generateNextThumbnail(); }; #endif // THUMBNAILER_H nixnote2-2.0.2/images/000077500000000000000000000000001315604104400145245ustar00rootroot00000000000000nixnote2-2.0.2/images/alarmclock.png000066400000000000000000001045011315604104400173430ustar00rootroot00000000000000‰PNG  IHDRS€â5âgAMA† 1è–_€IDATxÚíwœ$Eù‡ŸªîÞ¹¹½ Ü#J’ø“,9*A@É@É(‚"T@àT”A%'‰"’= (éî’/ìîìLw×ûû£g6ߦ›3SÏëogggª««¾ýÖ[oU)ÁbéĨ¢“ µøýrÙä¹õ|>˜ÎF‘‹å늴ð‰š7î±ùÒ³‡|šÇ¨¢Î…:íj°d eeÊÒIAç À•%¶ E¥•g¾½¼zæ™›Y ðÀÅEÅ(R P¸¸€à#L|æõØ·'yF«bœßk©!¬7eŠ*'0þ¨WÓáÛ$O€ƒ‚qÇ}ze¥\–FÇzSŒÊÉ?iúí‚«€¢H‹"„W4ýáŸäÄXÊbeÊRÐZ®âó³ý¯aœ´Ë8Æ?ðóO^…–‚m£ ô58¾òäUÖø[¤êEõ&ÀåÉW6›Ž¯<ÛLû¤jh žÀº×²%aÆD \6]w&xb³+S Ö0ùèÒ¡ìõÄ…ÒᓌÊii\ì ¯iÕÍfÉw¼ H¬IÃGP°û”Ûß©$žZ+S ‹AúÙŽ0“¾TDˆ£3[VÊkiDìo\\Ø`[Ù2,Rà ²Å”½ÀÏZìÌ’Ö›jP|åÉë¬ö_V˼›àòœ¬oý©ÆÅÞ÷¥äÀ ›³Ùo.ð¹]?ëO5(Ö›jH Ú!tþb¾”¹l©¾põŸÂýqŒÝâ¥!±2ÕøÊ“{Ù©„W#)A!èíl¢gƒ’ý&j‰’WOÇ£6Z€Â ._7*·¥ñ¨…Fj©:ZÁã;~Ú%$!üwKâÜ÷Ê’a¬L5$y¶J»CãåÍ Ùù+SIjMjÇ;Q Eå¶4V¦"È›„ËR;÷_ƒYöMbÚ%±¤@­4SK1 ^†|Úå"ù—Ëe·4V¦šÒ.ÃiòÒ.%%¬L5(!ÔڎƦ+S‹%ãX™²X,ÇÊ”ÅbÉ8V¦,KƱ2e±X2Ž•)‹Å’q¬LY,–ŒceÊb±d+S‹%ãX™²X,ÇÊ”ÅbÉ8V¦,KÆÉþ©"™Æ€*¨²Ø-9±ºo£Š˜¨]h{ÐÄÒaejØTà6‹š¥ë^¾×.#BÛ,_µ;#”çç¡K»0N«vƒ¼mÃÄÊÔ°hÕÍ*FüP-Xí·µöo•<ß žX©j4|¸yß ~ÁV9Õõ§mŸž²xj8:ãLs­mŸ“ ÄÚ­M…Ž ÜÃçöÐw³°Û/_w~¿ÕŸCÚ0õ².é „{ !«Eìi!Bû=å²gÑBÚAxŽ­6w®âÃn¿üÄùÓò]½ÏiÏèdÙR/@mY©ÜÏë_uyÙt{ÛG“ŽAT)“MÒÊTÕÛ…%<Ϥ£hïVjÓõmcÎ?7/íN)õ×–¥^€Ú±6WîbÔÙå—J]š¢ÁR*ÿ¼`ÃÏ B…ÊÊTu-ò6ܦìY›r«0ÝZEùAÖ|ö]Ñ=pk¥ê³`vbjµÖù Àº{îÚÒràcpðЇH)…!`ì3O¹—=ˆ'¾=d ®1*'siþá31ƒA•[Etß+­ÂAð¡õ¬][Öݳ@>кh{ß ±5 ÊwrsÈgG>÷­4c¼~êNãbðÛÛÿñA<)Z¡ª[ŠJ˽¬|wÛƒî§U(<Có ·Ž|îÏbrÆw ¶m +S`(:yñ‹›ô¬ë^e=ÓŃZ2EÈÛÿÙ''Ù›Þ©ÅÞ‘½2r»þ– 56Qh Âz×½ªg]Üä…y):ÙkYÃÊT? ®V¹ðNFŸtJQÔêÌ!ä˾ÚIûZº^•QP¨½{¯ €QYêÔZÁè„_Ãà ZE5Šä SŠ£Oº“\¨UÁÍÒUe´ƒcÙµv-ZÖÚ¡<½ ãC ‚ìôY¡]§y-!¡jQ-n‹×â‰+@ë0¯) Z‰~p[¼¯ÅmQ¡J7 Ýî ;­×yŸ‡qM‡kí ¢Óm!Ù¶Ô M+©(ñàÈ)êq„^SËC°á•iLª…”ÊâºÝ3“ÝW¡áu¯4Ì ´ï¾ÊÌžWèF‚UJA°B„¼‚àûªBQ9EÚ,Î gÁ”M•èäC¸›=® „p©²õ z¹c>¸Ê8:‘ó0 PÐhT³t¾~ŸLÿãZ…Ϻk29‰’ÄÂ;Ìÿlþ鯼4áÕ3º¾î¶*“7If£Ã‰Gø+ÌR}a «o?z àäÂZÇ•©t^OX阖+–zA‘ ~—;Äø*Î4†¢2*ö+¯}ÀOFÍÝàMnlÀÔ$ê/Qæ»ÏŽ}lû§VzöÄ–‰õà@tï2p_yò{}hYêØ~¹:vî¯&€*¨¼ Uu'mw.KÖ¦B-36c>‚àWiPä#Îe‚Ä}iS-n‹×õÓ/Ïnë±?TñI··|JøK1„MÛ aùº_Á'ꡱ?üÜ֗综¨[¼·-®á œËþ€¯çuEŸ3Æf‚ê,¦±¦g© +V‰F±ŒºA«L2ò­•«Hï-O·ð5V>ʹ‘·{¼±Ô-[¾^Ìt\Y×Wßvn\ù¨o¬qKçK1ÈU»¾µrç½­Ò "U÷±Œ`#U]-õdÁ*Ë`n¡ù„Îg[õÌGx¨êÒ{ÊÓ}ìµÉø³x¢ÇEÕ¶ß4«øXÝ+÷‰ñgíµÉ}/”åªíEhƒ‡¨–/Õµi¾ä–èNÛ%5V¦Z´(A˜rP¹ÑÅ6Iÿ¹£IìáZH›nñÄ©üükaÜê_ÝÞTŸžÓ`­âauyMýkÜká‘Μ¯M/M÷ow…ÏíÛ5DíÏŸrPTü›¨Ðè2U‰Fm¸ÿE¨^4ª·…óex‹‘KªÅm÷*?ÝÃkŽ?ƒ§»}z)Ʋע™^þÕÓãÏØcí{:~l÷ZÜáÝ áQ˜G|9&oþ¿®'ØHUCËTeS–¯Ò·"T7Õ—…È„…Noh0Ö¦yaÇ_œ;aÊaÎ]6 ±ò4õ”«vçÎ)‡;¡£EÞEÀ&œH܉påÖ¨oýÚ¨¨Ø¼ùKêHÇ*Ѩ;h®lÊRí(Co3òÍ‘ƒÝŒ¤M-êà-bÿuóçòZ—_[yjíû݃¯åÏÝÝE•-VmJøæÈÎû«•ÛdóÙwDßݰ‘ªÔ †EË`ZXsOZ’[2 ε2`bBWz€ öÐ×ÓÖñËÞs[Ö†bÝcWmúú öx òã`ÄJ εɶ„–5÷lAvIMêHÚJªä«óo„¥Y3LÛiÍ%Ò{ÔžúîŽ_™†WÛºn`(ˆ¾{ƒ=#Ví®°Óš)”Uþ}àê‚PjÀD…Ô ¤…´9‚pn“šÕ­$g>ÂS}m›ÙC vÑ·uü*°þSŒM¢ÔééÛ6Ø¥?± Úá)’ôüjƒ jÖ¹M‚ЖÙ}öã±Ô Ü}nsE 2ê¤òKI7µÈ ²Î¾B©#,^¢Åí"P_ÔéxoÐõ‰o-Æ{ÒU¬þ²Á;ŪÅí!–a}IkÁv¹½Ž:éCQ©J½ÉX ™¾ýRlÊR >¾¡¤BZt%Íà6ØVÿ±£XJÞºŠ•ÑÜ`ÛŠXµ{-:¤¤„ëácÒÜA¾¼ùËôí£iÀF‰T¥^€ø­² æð©*ÊÓN;Âã#ÎZFD¡ô9p=«£ƒXJ׺ŠU g¸Aù,+Ý2B˜piyáå‹–Ô;-@šþ°Û*º’m*›Öå¾è{v[¥édg¿ÓJNÕÑï#u¿¤¦n÷›*¨œÒ6Úü™™BÇöc™ÃG-õŽV–8 ¼´ Ñ•íßÞpÿÙƒÑEÉ×iw®Ë ¾“m¾¶Œsÿ31ƒÁ͘HUVnyV¤2Ž‹Geµg–P¸ Sžy̹ÿkËh“—¢ã/ýçf:”©‚ÒÚ ÿ̨K~÷‘Ùàô´´¨=j©T·ƒc³ƒŽÔ2Ûÿî£Q—ü…\èQ§BÖÝ ÏמUv{ë64’¡£§,–˜ˆÚy¸ÂþïÞE«³Mгçe,¾òÌí¸³ÞºM€X‘²4BˆóÞ_œ»n'gü:ë×uåMùÚ3gxç¿Á„ÁœAk±ÔÁá•Ó×9/ˆ÷x¤©#™ò•'§é ß`¥*œc±Ô&!:ù‚Rþ¨êF¦|åÉ|¦Ía†GY'ßÙlEêÇ£ª›‘¬}3¬HYæ+ý¼º™ó«™*jä õv¸gix4ßúú˜bôïºô´BÔcln£R àêûüõRžŸêá(jäë+³9Ö—²X\0_üü:P¨‹Q2eÈkøý@vY,–ŒàÄ|]ħê`Ðç+O>a™™P'®Å²ô4ï}¸â²u1ßWÝ:Pð«IL€ ®¹²XÒA+\ý™¨Ô:u SÆ«¶+SK\µ˜:èãup ág!cÛlX,©~–ºcÔ‰L1"íX,C€ÕÓ.Du¨™—v,– RL»Õ¡^djAÚ°X²‡~?íTé:Ò.@pž¡.ÆàKÕP`>H»Õ¡dJǽÍ@·XºâÂ6³©‹©¥:)7„õ^êâ†X,UA€öC^†¦0í¢,=u SŽàì„{P7Äb© !¨GvÇ©ƒ‡wÈ”¦UÁ×ÔÇÕX,UÁ…õ~U¢ÖôE«úþÊÎï3Ѯꋨ¡†% ¯UÑ×{tÇNõvÚ# š7ZVm®‹}u"S`Ž;táµV¦ª‚”ÿÛy€¦S½šŽºê8ÏJ×ÒcГyûº‚›¯‹]CêE¦”–w™üV·B5L¤C–T?ÇØXȰhÙOÌ"ÓB -,¢Í»›•ƒV£eÜfý–{‡Ö.#Ã(F1ŠÑzÌGÃ8Æ1–üË–K¡QV²†…AóßyŸŠQº.:xÈÜ|ðù-þùhÚå¨!:$¡¯dŽ·ygô›#æ•æ~ûkï—>XüþÞ-;TíËïç–Q£'5M¼vÒâ)MSÛ§-^…ÉLéãA‡tZ?kl¼åÓÝ\]øRu$SÞ-Á^öd™~„¾¤é}^óªzaÆœÝß|ïí Úš—ü§uIŸ^¡OIi†%ËÔÊi#W˜rÇ*/¯)ë,šÎªLêñ†H²ëeõKˆãÞêïv1ªIÉTAçÍaË^û! ¶÷"D^1¦W½—FÍžþÌö/œzï¿ÑE§ü8 4‰ý›áNª–JAH) ¦+—\òu>mS˜ñê†-ùk1½Ç…¨²e銠àkËýö£‚ÎÛsú2‰ÆŒ;wáöà†*¾“×åµê¹1¯ýØÿÞþƒ¸Š,…eI’äÂ|TYºœ¾dë~˜üØz/n±hsù\·…æ>Ö¿êJ€;ö¼ßCS7"Ug2å+OnæKŸ2®áéQ º«ïÔ®žûðšïðÌ ‹Çu¾OùNI¡–\¢²4T£p I¼°s8¹€KG߿ᜭn-›tÙÀ'ò¯œ—+ƒfÁMã÷©“D„ u%S€C¸ò~solØa_ä=é.ƒ¡×›Zîý?óí.±&Ýê ˜&q¤rb ª’B£š»xY­œ3åÆÍ?ܾu[Víxsˆi`ïJP+íÿÖŸpêkEFÉ”AÓʨgØ á~¦ÇànNþ¾õïþÚ?Žlïx¥‹8e_šú¹Ì>ëš×þß¿v)|‘5;Þ k÷B‡C€Ë³-6×Ý`¢Îd* ¤o¼ÞìçÒ.G‚Hyš7òÎõn>üÁÃ;^(z„µ-N}Q,Ç%çW^û5¿Þîßû´íÆ´Ž·ùKH·¨S6úÜ?ÿ]OÁ󈺓)@!ÞÖ}bBªTÁ½k¥[¾tÏ÷?]~¡èè0W;ö€¡¨M¹ZÌÇß´óܽƒ];’Hýˆ[…8îuþ!¨úÛ)¤eª óæìæ¶Pω ]=¨7G߸ç Gü{«òE/æêÌw †¢2Ž«*rõwf®wÛ‹÷g•òêÙ³œ5êìÖúó¥ˆb®õf¡+Œ?¥ìmÔ›ù”:þ=û3ÇœºÜ¢ÊN‹×¢ëñ’‡|ÿiÑ-ž8ÑO‹8u¹ÏÃìŽ_—ðS/b-ãO‰Ú~ýYêˆÃJJ¸Þ¥¾„ª«@=7í—®üÐ%•vñ²g%Õâ¶{•Ÿ.=í<×ù˺«áÝ[ˆÚ~ýYêˆÇÚa£]S/Fµ,ì"P/L<~æ¸òÊúOƒ©¼ÝâI¹ûÎ7ñx^èøe©~díµûz´:ŒMA9ËñcëOLÜr„í•Ñ3÷¿öŠ=Õê6Fx¼ZDaöæŸã–¹ñk‹`  {×&.ºMg5§­“qY»¾ºB´=I-Zç ïƒÑg¾lùÕf=¨a[H‹n+{V%_vô|PþUí ‚|uµ¨Í×§¥^€ÍFžÔ`ó3”*âêÞ¶åfåè¯j·U iÑíe±šÍ–›¹·õ®÷2y¾ u:à¤^}D(*¦ÞK-¬éJ€ÂCñö¤ï\Ýäïù'6Ä÷Zµ‘œßl‡yU@Ólr¾‘Ví{ò'ü=¯nšôÞ.×»OmíÒ¤Ëí\е,õTËڴЂ¾ !ës{~T>õâ´]žFB×ó²i-:ZÊû4ÓvQ/"&ãReD_ÖBÔ'êÃêd±Œïxá'L¼+Ü…èT·¬ ÑÀœmŽ|èq€¢g‚|}Ü„:¥ ´m ³í滆5ƒÉð,”s÷»NÀw¼úØl8m\z iw„Ó=^&Û©J,êµm¶‰^h³Q5b%ÕVÞ e›mx !뱪áåÓ=¡½.æýR/ÀÒZˆháôÉ, Ë"–%jÞ ;G/´ÙHTYHEªVØ™yÝîj-@XpúdAê`Uú Z!«löÖãÙ½ Ñ‚÷'óà­k/çÛE/µˆ¡èå}x‰íözÿWL¢óîfVÞüÍ'P¦Æ÷r­éÒûJ+dåƒÞz2-ˆŽ£Ò|:逗ÿß­kQt y+R5Š&ïŠîZüïÖ—ŸtŸ¢Ñt9E0C¸xëñ•B´ò³¯ i»s÷(®³òqYM@ˆ¡Á¤¯G“Dín½¥Ý5ª•hwáE&}½r—S/T_"ÈÊÇ µ½¯gê®EY!ËŸ‚Í„rÚû³¿Fåõ¬DÕ—•ˆ60þ+îϲšª`dùS„ZΤJ½Ã³v%,BŸÓy#2e•Ðêç.'íN-?Éo-ºÅmñÊV79;ýYIEÛúž»t»óY²(“êœEÔ®P¥^€áXY¤~Öy2d¦ìþÏßxsAu[6¡XgÎvsZêò”“žÖ¦B-oÎ|!È`›Dÿ¬v…ªgúŠ*'‹w9‚ìÃW>ÂtÒÑ÷_½¨V§¹¶¶X¾ò.õÌ]×™¾¾Ó¼ÿþÝv@ùxµ×ĆL«Û"/°ÃQï_Á£l¥g.8r4E•«½;’¶NÕÚµ°}Yô£ ‚xWœ•´.ëqG”Pâ«Ó{îï¥oÙi-Aš|~ÕÂò©.çá]ѵ5dÈ ¢oXD-îI•z†fm‘HÝNöD*êÍ>`A(5H4JÊ"ÔtAùÇ%J•y¯?„°AꢤJŽ °BùðÒ¬ÍþDß¾ˆÚ[í—z†Ô ´ÐŽþYK@(o¿7ùk‚ Nc„…h’ûwpoôC·GGe?Ò^¡¶'Çf-:ŠÑMþZ¹²ÖREÿ­¨/ÕŽ¥^€!˜#üõY{J¢î>/'HÇ‚ŠF°Q‚wé=Ì ¹KËïm‹ÚÀy9uwgûÈŒˆzêGHMD“z}ëµp ¼@¶Z|T–âä¡ä4Êð&²’+l¸5Â’‡àA¦î(åtÈF±°<ü›¼3Å.í$"¼p µ4ôK½ƒ³v-¼Ï’¥gSÙ¡w¥ÌÔÎM¯ŽE=Oý‹þ7‹óõTçûÇ¢öðîoËÕ•hj€ðì;ÔN0=õ ÆÚ£-ï'K"õº>¿‘Ð8³z]­E û­4¸7ï»FôþƲÊìßç7*Ÿ­œF úñjE¨j` lQåÌÆÜo6Ãd&%@ƒ{á}Ÿš.ê\XYeš¸ë«€?À}xr/ÐY¹w‰¡É…E~jö}Ý ™ƒJŒÙlÌý È™Z8„4󽫨r²€en1Ûc2RZApùx·µüÓv è“3i) ö5÷ÞwW…L*¬9cLÑÙÿ´ÝÖâc\„lԃƘ헹e¹8-9‰”Ej–Ù‹0#e Q(÷÷-{ÇãT#úQe ° o鬀5Êïo@4¹° ŒsÇœû–uÿ€B‘5¡Ùk™Yµ T™îc&©_™ƒL ÷$vNÞÝ?xŠŽ~óƒ|_sÚM—¼è°èì€ðäÝ“ ŸÊAÌAËüj91™ª Ë”–OXæs4ÙX»¢Ð«÷ÒR䯌sÇë¬èÎD¡Rwbó.žv ¢uÚ…é›LÊ”v0Swš%Y© SöóÜŽ¢£Ã4wO2´êV·ÕkõZ½ÖŒ6(ËÀx¢Ã¢³þ‘Sö# ÙT ùWNÝ “Íì¶ ÊTÑ%üÊŒ·ï!òcÒD0¸|¼ÇÊóÿŒJ;h^ÔÚi6ÍA³ßì7ûÍFSp­TÕ*¹°¨Póÿ¼ÇÊ|Œ›úÌŸÂÀÛ÷|ea1ƒ'4eN¦|'œ6î†ç õtNA¡yà¡eo›ëk#éÍÊŸøÜvc´ì÷&|ðj²M° DNŒøú¶¹-ËèÈ£Iž;m\.ð³çQ¥½Z§»µhá x‹ôWïÒüƒwòʬTM ¿pÔo»½øü´í!­kB-8³‘ÏSñgvô~k=­ÝÞ¡ùÙhóoAöÖ_¦^€®*¡ õŒÜ0Ùt[!‹3µ°æú•J*ï)’?+z)•»eeª*µ¯M·EÈD»Wÿh#k;®fhÐç£åFýN¶Ly‰± 8¼qè„'Bû*í{¾Æ|q¥9Ï%‡‡Háì‘çCVçg,ƒ!g|…~â¡C'ðFê) F¶õ»²–î™¶NV,Ú rÔH{—óÈ5¹þQ„’›þÎ%%¼¯Ó—×bä°Ï¦ãñYoªŠuIÉ…ëË?¦YƒŒú *ýÖ_±Ô ÐaZ˜vPÚ…ˆȘo ™ìmX»í,©éúO´‘F˶2U]‹ÚÛ˜oG•›vq¦$HfîXF}¾ƒ™¶é¼Y¤›s¢aÊ® ír•v­ä <|2KZ=ç›~c-(fäNZ†K´óÓŸOÙЩ.¤˜7kÚ¦˜¬Ìùe¢qûŽž:uþ¤›)âî½Öü»qLFŽ\4ÑÿÖbÉwÊ‡ß y›šPóäÄ(œùwï½VÔS+ˆÂÀü'Nê…Ùª ÈTQ{áÎEÿ†T÷”28¼ûÕenžã;&Ô™)(*ø#,ßÏ[\0_½Ê%ÌúžA–ÑbBß¹yÎW—á]œ—ÑhB¸èßg8^˜?=õ"ø*gpÁ#Œ'Hm~/þ>ñôäß/ôµ—¡î4ð9híç-ŠNÿv#nâ[h¼Ð׿_øôdž@#©AÆ_ðÈ‚h&2õZI•h»–e/‘Í1¤•¤/(xdóiu¼Lr‚ž~’þvvRðéI ÈÙÞÚÌ2X<ÓêlÌ#›íõ™–P¹Ù|ÙK²°ÅKÊ2¥d¥/…'¦Xƒ‚±gÉÁÿ‡¯›³°P7 Œþ¦4 ›mEëOÕ Í¡¯ÿ9xìYâ ÂWú’¶§žªL“Vš÷Ò›ß3h{à‚AQeË“*ÂÑW^?uÂN…|˜Å ° Ï,øÑØ)¯·Ky9i%”)æ‰(áx;Å,‘AöÞB]ÊÔâ€nEÔ‚¾•þò“ ‚39Ù#MmÞTÜVR¢…½·¨4„T,Dxû¢þ𖥿Mùää#¼“É©Íï4ì½ÁÍùÚ˜4÷‘êMAÃ6çC?±;…7œ yª#<1Æ×7?¶÷¤çQiB&xçGäÒ\>“šBj¡ùôŸ‚ì=](eæ)öó*¯ô[W¡4“hqMB¥­ko*õ4ð+iaïéé-L‘æÓ%Ŭô”¼©¢‹Y«ÖóH+:fp(î½Òͯú™Ûóiuµîk®NSô`ù è/‚§ñ.ü*6Œ^ŒÒºÕÍÆâ[ÏøÎͯî½ÅÔ2©4´ž·þV˜Ô¶ÌKCÛ´pâxLj­aáÞË ¥ôw’Bisû­/%\!ý-Ë^ú0Á*­ooª\óX|.DítïåXHZUˆ`NŸlô³ÓÒ¨r%¼/¥VåÂû{ŽÎÊp¯]‹J¬û%^¹ÚYB¨Òr?g@IØv#¡Å£”½­^eª] W{¼²îÞ%ÑÙX‚^Òž£yŸ4{ÍKodX¡ÓÿÂaúÚ4«[ͽÔËF·)©ÈŸ;b%žFüéCfÚ´pê„þü)Ñ7 ¢“ñêU¦Äòç!O1MJNæC-\꩹¤Øsôµ‹Hc”üպŠû§v¯„9O"´eb¸'—*5©Üý#—ëk‹×h7.õ7LK˜9*)Ǽ>eªE G.ßy?Ô5—¦^¦Šµ9“0‡wù\qéóA¯%üu%-¿,B:›ßÏ?Ð’‘ ÞcÌ7»”-@œÛ+¿ënm®°ÖNÔ[€Œ=S¹ºz”©¨Þ»:ùæ{dcî¯Åž†çIG¨ ‚¿lòá’D¿¬„0žN©’„מ&G0 ˆ+¨ëË%ë">ko*}„ÔKJxúï/!Â'Ï’Lü eªÍÖÞ¢Ë &j©êzIÁ‡èËÚ#¡zôúÐÓsHú d¯Ò)o#œF‡oߥ2#R´ia«}”ò•vúÒ¢’'L;"%¢…¦+è.nŽ0âz £ºZÏþz“©’fê>î†ÿ Ý«ìXè ûŒg1iUˆðþ,’\å—à• î,nÔÕ·Áßg²PÊ”H Qs›t½žßùK¥çw‹vZg€,!MWKNy}ÉTy‰÷ÏéåÛN:.k7!jËûLÆ' ¡òwV¹z±¤®Ì¦î“Êý dŸU³’qÞÝJJx$ ˆvÞqƒ G¯ÜÛ#*¯îû§%ÿó¿¾dªM Ç|¦³;*üµGH'¥qÀ¶ãû¬Ú¥a$lS÷‘Ħk'ëÑ’±H¤ÖΦH B»+ló…/úö•H×î Ë…þŸ 2îèè“c­Ú:’©(阇z_Í6_ˆ¿&‡k%GØgíŽ HÒ ‚œ4.©‰…$*áCÔc$ïžÙw“ìŠT‡‡tgïÚYgÇÞ¤¤„g¡V÷½ñ!q°]O2ÕîëìÔãÅáÎÎ{”E+9¾› $ïˆzìC’IMHâŠaäé)T¤AÉ»d1&ÕÕÚµpŠ%FˆzƼ‡é=ÜaÄùô/Ùf˸W÷ÕL•”ðpÏ  ‚œ°bVŽ•]bÙ]aÅ]z´ždÌ #O—DRbÿ‚6-ì½vZÕ8îÛ’Ø·¥0-Œ¸€^ÁÛñßíQÞ¦…“Êã÷}{ÜW^?2:Âøé5‘1âÉT"BŸeG´0îÛ¤äì½v¿˜?¾¤„W¢„¹¤gøBĽL•y‘ªd˜/¦×Ó|æÈžþT´ºû0Œ~ô²}­¬b׉L•”0³¹³Þ*ÕÌâ'Éfð¼Ç}@”à^Fò£SáÕW¨¥¸¯Ä)ïÑ™tT*@¸óq²–ï²$+9ÂįÒý‰è#ú7ÒË'jw…/nÍÀ«û΋wu_}ÈT9áÚ×a‰_ÍrL³«µ)áñ>ã›±[PÞ×3æzŠ·ú´°ÿ@ÛÄa>¢^Jjm[5,Dh‡èÚY ‚l¿fÏèHI /› ´º¯mv¬5P2Õ®…í×ê¬ïJ‰y¡ï%KÙ´hjE½4ˆ»Q]3²ÿ”¸~1~tˆÐ–Æ _€ðÉYn¼Cžj[›+l½a}„§ZèÙ]Jž°Â± ˜–°Æ—ãœL¯™ Zà©ÞW±õ†É¬Œ¬–µhá,—OH¡·©ÇÚˆWÒãl®°Âá$íI…òåiµâ°w)¶œèÞÌ 2cßžƒ·6%Ü +¿_‚ùÏÄÙ|êB¦aÆ~=ê1@œ¤&¢š]­ä_žViL šAV8<ÞLýØ>¸] 'ö L&ReȦ›'µçRµkìÔžI°!ÂÇ¿£WŒÍFÌd@‰øÚÚñùµ/SmJø|L¯©‹SÇe=¡Ï;â›nÞ£ÅoANl޳Æâª0„E¨ÛIaÅјƒ¥’ú2-ŒøÝ;¾Œ?KzLŒ·haçÕø¸¢¯ĉ§.j_¦D ãÏî]ß#~ ™ODèóŽ Zspâ_ êö8·ŽécÛaÍ=Ò¸Oc.–šs×+VŠflºï"aäÈeº)£_«'0-áʦ¸f;k]¦Ú´pä25ÕQ±ï?NíL¾ô¸'ˆÆ\L Ñÿ5÷ˆos—X>´¼iKïØoì÷ˆÇ^¤V’ú²’#ÌØ³Ç‹¢o“âÛæ kï=@ ȸïÄF¯m™Š:´¾^þþŒ=k-®ÙÕÚ¢yàÇH¾ïµÄ·¹Kl Àù-ÉNކ Îv³³Ëâp/BàÉ.uF/¾r÷++)a6,` ´„w?&žÕ}µ-SmZ8|å®5\¾’';ïCmZ›ÎvhÕ7q~+1dâ¨&GXgË„ïA}Ö­åç`¹ö´°}eëaSnhOî¾jïuÊ‘¬þ¢ùìvñøSµ-S‘í¾*OFSømŸ¡í„‡k%GØgÝÊýOÒÖÙ2ž3›ª_E‘Óù.‰?’Æ& ïГi!7¡€ |¼þû~_›Î0ЦÃ÷I,ϸz)AXÿ‹|ŒDõ›)5<ïeŽ0î°„¿4Dx÷EâˆëU¿´®0j ƒªmâͬÔT­[›NiŠ~yòQKØë@ úV £99¡dªÅ%ÌaäÉÑ §Ä6á¬EýÀ›IâýpÔIÃfyUþ¸6-\7!Iw3@x!Þ…! ›#Œ;Cýý"%mKL(hs…6àÃJÈØË$?³dJ˃”‹”úû¸3⨧t¬»|$…Ê Èu#«ÿP¬ò-%8ɼ"øŽªÅt¼A\œÓß³½p™þÜHƒPº’ê{ õ!S‚Цj/x`k×£ðIr εRõ ƒ¦ŠøÙ{íðPÀ©æçöƒ a³mÿÐâëœIè;À€òÝV­Ã¼,ù]š¢+\,ù]Šï'_Ô=©9ò¢ÃVí»¨:jB䌯ÿвٶ€î§}TÂC÷^ñ«ª,UT¼ÂkÝ'Óã·sŠÔjÖy¿6˜+*)áhÓá—ªòXýxSC©ñZ²rVú)U¿õÜmž|ên>\EÍ3ì±› ¸ iwˆæ‘§/ßTW¼ÓGêÖx‚³?#.Â~> ÖÜc($u_j’ÁÕx-¡ñ <} ûiÕÅEØd}"=¨Þ•T _åÂk™s5ý @ª‹àÀ9»L§ ½„¾2{¾sQóX;ï‚ïxI¸3‹'¾·!“.¡¿¨ Æ0î]ªØ´ÔžøÎ.ì³3É¥&8`ØkįδM´á5øÉ%"dìiR7ÃKkmJ8#W©™%˜¨Õ{ Zoª¦ÌÆžFr«C|„U+1¡Þ” »ïÃçH*!DñÄ€ŸÔX;ãäçÜâˆ?Ò_ôÁÙò««A±ÞæÝ-ƒÀበx"ŠS&€‹ð¹Ý÷j¨ÂR7Y_yÁ\^þ)I%"œ»óŒ†NCèI«ÀöçÓ_“Pøpã©·aôÄ£ gpîÎ$—š ðòOçâKŸ˜°ôOVvþ +a’ËŽ›¶ÿ }7o“€:ȸ㞖<ïé‚Ä5¬P5 yã»g,œ¶b_¨1¬´óW¨BÄz)¥¥ìK]’Ø¥‡(uïÜ?ÓÐi=)¯î»ˆþB!œ| äl½!q˜û'uob?àåKªáO-¥Lv>”ò¥Î:ŠÚXº£¸çúué,<õt`¬?Õ€hŠ:ê? ü4†w>4Ò‰¥û ¥ÀWùp./_œÀw0ö¸³àÖÓnÕÁã¬Gþ2ú_Ý'¬¼ïÿAÁúS IÎàžµ`ìqI~çËÏ%¿” g–J¦< ›Ír ùR!Š>u%øvÀ×E~Bÿ«ûBxÔ®îk`üžº’&4ðÓ–ÛôèH+–æc†MA^ÃÿÎOàb¡<à;p߯^hÜ9ƒ:ï#u/¤%˜ÝŽXSµe –š"ZŒ|à¾$¸ùç/íÄÍR4Ö¼ßý6ãò¥ Œ;ûsqì _ßhŠìt®îûówmZBã’78˜;îl ‰ž¤1Œÿî·#½6ÃÍ mSÂÌäŽ ^»†¯?+)áx“V÷µUcuŸÍB¯U+)áxäúnËL–f›ëaûAyN8™f‚D|) ›í÷í¾~ðÄ÷¦3é"ú_Ý’?ôËvu_ãâIÑù?6Û*î7ך€æN^j˜Å,(‚_ÓrÉ,6Á»òñgP9»<¦_‚޼Šþ㯞¾˜\`GÏJ.D=þŒw%Élîâ@Ë9¿†`¸ñ©aÊTÞã¿OŽ ý¥ ‹ï:üØ¿ªÖÉ Î9&ÿkúk~.°Á7Ö±«û¸ë8ã$¡RäŽÿþðý©a5Ô‚"¸†Ö/¥`òÑ;Øß hØþBú_ðéÃNƒ|]¤b ž˜|4Éldé@ë÷®¶?5,™r]øþ±Œ Làÿzð í€oä Üþ_õ$¬î3þ²‰°hçûƒä_(âÏCT„Œøþ±‘v £¬Cÿ_yþ|>øÉè° [}}:×fK MÁ…µ/¢¿{«áûß²g÷52w:[}ªlµ2 >øÞ|<8ùèÃ)ãÀ»3yiæ MM7<ü*o3ωÂu·°ÝOÔAÁ“?"gW÷50ùõðsM7D ]#LÞa÷áÍ0Yh ¹^ýa"—&8pƱ`·<Ñê¾?¡ÿ´aÒæÛƒoý©¦ ¢þ•HFzéÆpf˜‡,Sö[ŸõIÂU÷½³`÷–ES/£ÿÆÂk§A.´UÛ¸ä îY Æ}$6µtõ÷[XÇÚ9¡T ú’Ø÷ LÿîZ‘¦ þOE³Àß¾“ÀE|ÿTëK-=n¿û+ÿCõ¿ºoñ‰O —òˆ"K­S êwx±ûSA¤%̓þžAÊTAþÂ׉?­3€¦+ÏüÈúRK'¾·>Ë_Bÿ«û ãÝÍn:Üèä úÌš®$~WÄÂ×ÿ0„Œ½AÊ”vàœ¯£bßa*ò¥N³¾Tu8úô¿ºÏ”W÷Ù´„§@Ô÷b÷§!ꜯ!co0qöhˆ˜𑦟‰ã«ž9‚¾žW÷°z478x³3}uhZhúÙ îéÒšð¢0Ø…„ƒò¦Šö^•µˆ;û<šãûì*¾*Qøâù ¼ºï{vŸ¥ Qÿ‹}¾ÏÖÚ{ÕÁîÇ?¨7åüõâ?3!€¦ ÏlÃÍÇXI¾jugx“3pÏ ü‹6öø¥]Ý—y ­nœSyÁ=³­éBâOù‘¦ îÑ8™*(ÂY´Iü¾”ß? ±ªˆ'ÍV’'¤)º°âEô—ï¦áÒcìê¾lSÔZ5ñîR0QŒ=>åBûQ³ûhx\Øî Ó¿BüÙç>Òô[‰5.Õ¦„oLZg+AucìcURÂóÐFÙè!Â›ï „ƒ®›Jö.Fõ·ÎVߘ´4ç´ÐôÛAÜ×¥µ™þ•H_²ßPŸ¦9.EÛ´}føÛ´ Ê”àüQþI³ ´;IœN¶…Ž?€;h-ÿOhô+S‰Ý?ÚAøI³ú3âüQeªE ‡}¦Ò&b4avt}½uÀ7´ia¯•’)´z`p…®µia“u*?zg=½êÖ»TµiáûËp+;+zuŸ•©$,¤Í„‡ñΪ¼¸É:C•Ú7 ‚z`wvéÌ È^+ æZþ4Oq1B)þ{²ÝCyš§úÛ*~a4€]4uOA«—º…ˆÔ= ˜–ðµeïÍZ™ŠßZt™º'‹„ òAÚˆóqÞâ Ûm‘Àå• â ôÆ>G ¯ÀâXkEÊŸþJ¼•/ްò—©x¦üUÏí°š „n=GªÚ]a—­éß#ÑçGCÄAÝ2+S±ZI…® ì°ÏEÞÑreå/ 2Èû4t+?Ð_!‰^¿ø>í`€Ïiq…[÷€O‘)û.œ6Ü›.ÜŸt«úò÷fýÄ„¶ºT•”ð¼I /DhüV¦â³¶(åz³:ª•ûôÉ-ƒ¾OñvW˜²?ñã`[ <† ²Äô,⥆=kÅ‹&œÝÇ•”}â<Qm± eºVò„Ž¥ÿùÚY}ßÁ>,¬LÅem®(a£Oì¬Áž5:ál‰qN¼¤„'“8oÆGô,Apú¯.%\Eâö¦dÚÉQWŠÇZ´pÀ”>o¹`Ê]÷£©Û ‚èøÂ“éY›ÎRåëí§ÑðL ƒk›V¦b¹O•hÔv|„ }Ü/AXŠÃ˶’'L;™¸Ó Bñ:J±è÷3Z\aÍí‰[¤ Bx±Ž3$T³äÏèz›{”!ê™{àg¡Ý‰ÛßoÑÂá«Ä~é!hØ×Õ1cgâúˆd.êÒ[»-´°æ®,Dú¼¶J¤jþf› õµ¤¦Å>·÷U cNLÝÊTu¬² f³Í˜_¾½ŸQ›\¸æ®-¢Û¨Ëòc-þõ'2cçþ‡}ýÒôMIråâLEèy]Ñ\Þ-4¯ü’ßÇ›BQ÷]€}“ô;ì[â/ÊC>!Þ!ŸAh¡=AŸ¥D»'çåÕ_úiAÜKo‘léâ´Ðòß§ÿ†gU¿8ðƒÃÊÔÒ[»ná^Z®÷%?0ÿ|^^Ú½ƒt+Ý#ÐNü ýû–ø·-®0cOâVÒ’û…$>ïnmªä†k1a ®¶dâw„zɦjÓÂFw6Ž>ÍGÔƒ‚¨þŸÚV¦ªp?\aâwÕwø!ªÙ9®)%'Ö}ú6WÈý‚¸Ãè2cÏþ†}Kx¹<仃Ž<|züáó¾­]G+Í'@{¥ºzVsï"Ö´Ó¤M έ F?tÀ¬+SKo%%Üsé= Úbûäý"w*‰hTokÑÂáÓcÿšÊ²÷%û–ðr›®Óñº{>¢^’ Ÿ÷e•HÕM4Ÿ_¾Únƒ†v>kÖ­ÍvùüÀ÷eôe2@Z‚•©jXÉ6Ü¥Wi>ï¦ò=K¯‚zawyi,öõ“9¹„¿kq…_&î!_€¬|Xráó%4”r¢Âaãõ=å{–K4øIMDc¹Z„7àå~/Ë —Òÿ$±•©jXy?·‡:ê±Üúô݇’H<èßÚ]aåÃH@ f|yÉþ%U]C>ƒ\LÌ{ÊÚÊ“ÂmÌ\„ŽçÙ)+ǹ³O:Vò„©‡2à꾕éÿbeª:Ö®…=£ü¤Š/ÿÆF Bèf¡gC@ìãªþ†}K,ÚïÀ¹h%Ä»FbÜbhÖ¢E 3êð(å q.uxWy¯ˆþÓvC„—?¦ßÌ+SÕ2-¸——+;œr˜ ˆÊÌhŽà]C¼atƒàÿŽ%¹,}þM‹+ì¶) dŸo³v–fÑ*‘ª»p.C?9u<ï4GÈÿœæÀÏ÷çOY™ª–•”ð'AœŸÝ­eÛ\a›µcÿƒì¶é’†}}ÿ'Œ¸Œxõ3Dx«DœË'‡×d¢HÕN믺—Ô¡/%DÃØ³§TÇÌGÔ_¤ŸM‡­LUÑ´°êÞ;­'¤êuŸ•P‚·ˆ7H[BF\&KØÉ³¯÷+áEx;þbù¡”-³em:Î-ñÓ·Q‚ê ÛöeA~>zɱ9+S1˜Êb$´ÝÆüøÝ–·_¤ïñK§Õ•Ì\…Éôw²ÛÒ"x°ÿï c= lXä‘V·ï©„)¢iu`½‹€%ŸË§áŒï@Î1š·Õ5’ÏàI·AõÕXÏîSÀ䙫DúÓ“>dÊu`Ö—?V™‚7.â<ßxøhšƒ|Ü羦HS×þ•ÿ¡Xr·PÐòÇÐaœçìZ*äƒæ ›gÜæ.ƒ7 V™ò#ÝqûxtöªC.„ö#N_ Bó;¢§3)SõŽ'¾·+\B Ocwèî`ìYÈ –¢ç1æw@œcéN.ìýäì%SE…¹V±1ý ––Lùƒ €£8ý•7Nƒ\Á‘ˆ%Aö9ÀÆ×*L±—ƒÔÛ›rভ£7ÿ½|.dq$Þä笒óGú{B: ›°:³9±$DÞÀåsù/qúS iOoï½WókVðÀ—b-Œ¹Ö£èÙÖŸÏ–´ïBüC¾ßÛ!_ºä Üõÿ–øÌ™ËF:Ô•žÞ”7íñ&#Œù­ò¥áò)ôFWðÖ)óñ›–ÐÈ”‡}¿%Þ¤„ ÒŸžÑ©nJah6ðê^±%òýÁùÒÇœ=È_FOH°òW¾%ëO54AõÛX‡}éO³é>Ðê&S¡"| ³ qF¦BàÕËß³C¾,P8õ'€ÛOÓ á‰Sz7Kc‘7pù{¼JœÃ>Ì6/AvóÝ»ÉTIÁïWdâ]&ÃØí/ä ú¬Ô_ -ÁìúÕå0{˘hØ7öFâöÁ2¿_±ç’™î Ï;¶&ÞÈ”{ÿ›}ž4E »Oÿ«û¸í»6-¡Ñ $ê»x±}…"(kP·öØM¦šÞÜ•8ÕÒŸñb´ªÌ’>:„Ëá­~W÷9°ø„ØÕ} NSG¼È'@|ãÿ²5wÓ .2e´oKÌ‘)ïö-Àñ¬7• <ñ½UXá"èw¶/dÄaûÚÕ}'8[àÝNÌÑ©öm kîT™*çL-Oœ‘) ›Ý­ö©œ‚Žýý¯îxýôOÈ~Úŵ¤H«Šú/ñE)°|ÏÜ©®ÞTe5_|‘)Á}m'2C^pΔ‘¿¦¿g¤ ¬Ü:ѽF,‰ MÔû}¤-QîT•}]]xcâŒL…ÀóÇûÑB KVhØñBúOKðá¦Óm½±É8ÞçyâöI¤Cù./uÈ”AûPÜ‚¸“nÇ&#dŒ¼›ÿ«g*øÊ/šìê¾FFSô¢>oRBq Ð~§/Ó¡E¿‡µ‰3€îÁÞ·Ùd„¬Q^ÝwýÅ!|ï[³aô&¨ǘ”àkÿž®Ñ©NoÊÙñyS˜£fÛd„ì¡C¸÷6 ûßtxñIsÑvu_ÓÂQ³1ÄçO)ˆ´¨3:¥»þòÆ-€ø¦rBPÛ ÇzSÃãÌ`äOèÓaaùw´«ûGp6Cý8£S~Y‹zzS†f¶õ ÆÝ Em#SÙ£(púeô?‡“§@shg@•hݸ;‰wƒ<>Úš¥ÒÎ*Š¡ÀlAÌ‘©=´‘©l’7èï/vna Õ}Û<±«û—@¢~otÊlA—Ô¨rs+(øÁ¨X õ‚Le•‚†]/ ÿM‡¸ýhVÖŸjTšB8êBâN-óƒQ‘.A§7¥áŸçA !¨Ç7m#SÙÄ àçOó °ºï?ƒ°hÃè Š#èÍ }eéP˜²•õ©sÐÇÓ›ÆøÅQdên(:v¼M<ŠÞJL»€V÷éŸJ>—¥®Ñ¨/Ç›þô¦ÐmÐÐlëÕ9°ÇC62•et—ÿ3à¦Ã§}DÞ·c÷F%¨/ÇÇ&Ò£J=rm¢úú1~± aýF:–lâ ÎnäIÿ›Ãßü¼MKh\tõetlþ”SÖ£r]€3]¦_=^>^ g½© Ó*°óÅô¿º/€? ÍiÖ’9ã…—‰3:SÎt#mªxS,þqÐF=E×F¦²LÞ nz[=Ä@g!ïsÉè-™&Z\5ê1âœë3eMr¢oŒ^äŸ#Þ“ŽYö~ìüP¦Ñ´:°þEô¿ép?úNÚeµ¤G ¢þ#aY“:}.nãW ìù1 ¡eéi aÖ½¼×ï¦Ã w. Ö9nLÂrŽó0,ÂM+Ê ¹>]“xS; ¾y™Ê8žøî &´ºÏ0v›=‰sGK†É \øbMñüt-È…†¨™EÏÍuˆ¯ÑPÿÊÅ93`©AÇý‚þW÷xë´(…ÁÒ€:‡úñÞ ‰¶•2(ÐÑ®.gŒd±zS£Ÿ²©µA^pÎ(9d 0ú¦g6å>N»´–4ˆR4ÙÈTMåÅL½þž• ˜ÊÚĹw¾%³4 |u~ܤp“HŸ´!'ðéÄ›þÂf ìÞµ‚áª) pБØÈŠ#¨ÍàbÍDÿt ȉAGQV#¾y>Ñ/Ø ôZœyý7Be=©F%ò¸G¿@|AtM¤KJûÀ¯a2±:ïΓ6€^[Nÿ qÆ,5!ê×±¡€É¿|´QðÊ ±^{¿Æ6÷"gÐßÿH݃]9`é#Q¿Žw å•À(†WV'¾tAè°îTMmÍ¿çØ™±¥†¨ÇIëÐÿ¥0‘X“;—yÓÊTmãpåÓ¼‚½‘–n¢þ ÿ‹&ßt³ »Ïņ_k¢»<+]€½–îH¹Çåg—õI“g9âj~‚‚Ò;اp£CøÕï06Œné†)÷ï¸2§X޼¾a$ãˆ5y¯éìS¸Æ)o:üKlÝÒ)÷ï¸ÐÀ¸Fê7–‰ùBÌÏÈÇü%–¸iØõ"ìê>KòÀσ¸ÇJo,£™ãç §ÖZ#oPzG=„õ§,=‰{¼4A3ˆk¦Ï”/Án‰WóhZØà"ì¦Ã–N¢­ñ> ®ès¤K£uûXb}>ª° ».h á÷òžÝtØÒ§ÜÇã"„ö±ú±Äç° ŒyÇæ ×žwu»ºÏÒ…(}Ì;Ī!ŒÕáøx/Ä|`³ê…bg_†]ÝgéÀõñ8 ÇÇBô'ñ~¾%9ò‚srà\ £[º{Ÿ IÀ›²Ô Ýìê>K7bïãã5ãâý†>±ƒ¾ú!gàÖÔ¿€ í²X²€!êã±2NšcüxÖX€ ¹Ö ѦÃÓÎ'Þ“ˆ,µƒ”ûxŒ³ù…fÝž'¾¥2 Ì‚øŠoIÂU¦`Ãè– fñ=¶4´ç5#b+½ @-ÆŽúêOpvdäeØ0ºÀ”ûxœ)Ü#tìËíÚbþ|KÂ~ðìê>K…¸ûx>’©››[ˆù, “3èS?Rwaý) s <è‹1I¼ØŠ ¡×šV ]ˆ]e)÷ñ¸Ð$1è;Ú‡¦x¿Â’0M!\÷Þ´«û,MD}¼ÕΨ–¼MK¬Aèqì¯Î¸§¼•‡%Q ®N­Ks\­¿H›–8Š…Œ‰©©4mÒ FiûÔ­7ÂQ3[ÇÐpg‚ŒÖvˆXwD}[µ2KŒ[P,м©øž‡14LƒÖ˜åNð·s?!è· Ë®ú÷çZÔ9Û]–šVif·óo<ÏúSÉRÔ9³îw_ß*ÿÑÐZ0Ñ{ðÃKÑÆÄ &ñõ(8ŠBl žÍBWmoÊ ]õ ÛýoG• X øˆeb’)AŠLµ«Äš¼í,U¤¨sf¿©ž8=Z‘DÓ3û®þ§×ì¥êRPÃ«Îæª·þ²L±-B+ÞgbŒ_€(ëMÕ5óÅ÷?ÆxÀ/‡j£<X°Ãç¶ûRÕ+e™ŠæãR‘4íñ^Æ·»ÏpcŒ¾ïåë'è?­ Ðh4èY×/{ß\cEªŽ)õñXi]¦üflÆL]£MQ…ðÀŸ˜p:óïðи³Í‡_ýJXTvÁq]£Ê}… hBmš Æ@tßûtj4†fâ  G´k úâA€±±Þ’94-Ú®2n,ÆßzAº ÇÆ9 g  ¡[,õŠ*÷ñÇKc š8÷³øË8»ƒ‡ÅR¯h¢>ëþ# 5ŸÆ{f¹x?ßb±¤Kì}üS­b–)&Äüù‹%]bîãêS-ŸÄ| Ö›²Xꛘû¸|¢×^@¬Á#YìŠ>‹¥>Ñõñø¾Ö^ W]D|3q /9cÓ¦,–úÃ3QSCV]¤Ã8eJ9„Ʀ$X,uˆÂõñ¸Fd ÂEº|Àf<Ã2&ÆT|‹Å’ &§‚à,ÔÞG1_£ž![ÇõY,–êÏÀ(bo{éo-¢ï¥\5JvÐg±Ô%õïx¿ä[‹ôˆ6> .—M4MÆ&¢[,õˆ.÷ï¸âÛ|0¢Mò>ñ­È  85¶‹°X,i¢Êý;®Óš ð>¡v‰Ñ›ŠVõ­d)‹¥ÑDý;NýའËü/ÞK1«Çûù‹%=âîßËüo4¨ùñ~¬nóÐ-–zDKÔ¿ãDÍ òVœß‹§ØET°h ȉMI°XêCN¢¾ÛO"m*jm^Šñj4ÈÄ<~µX, £Ê};ΡÒK`¢/˜ø±nʤË›’`±ÔEà2‡IĪ_Ðìõ:àÄöU¯Î×7X,–Ä1NÔ¯‘ØdÊ)k“hä5Êr ܳ–ë³Xê ­¢~Û&.‚*k“èœÀ…%Z‰5Áó“ì\ŸÅROh¢~´^X‚œè²ËöâKIP°x};×g±ÔÑ<ßâõ‰/2eˆtI!Zc\ññySd]cçú,–úAd]â&I¤KÆÕh(ùgb½ Xî„‘P°2e±Ô'Œd9bÝÄ%ÿL¤OØô™¿Na`ñ†Øð”ÅR/èrŸŽo‹&UÖ%‰„ÃÀ:s7¶a_·nhçú,–zA«¨OÇv§à–uÉ€Ž6 ñvÜ—ÕúÈÛ­†-–º /QŸŽ—oGú¤¤œŠ®^å³1mgм%«€QvWt‹¥Ö‰ú±z“•++YªN€Ëdz$ÑW¸ çëòcV¾"E;ì³Xjž¢‚+r¬L¬ËŽuŠ"ôѪ`Üì¯Jaà†MÀØ ºÅRóõçxÏ87Z•¦ËÜÛÄg‰sj1„ç¿®õ¦,–šÇUQŽ-€-;~¶òC$S!ìñ,qÎõ)X´=Ëb©}¢ƒ¯mGœC>·¬I!€ÀWž¼ÄÚEšb ˆ4…¶‘yD·Xj£´ÙF>V½(½˜[ _yå¼)A¯Ïëº>ò§¯h3Ñ-–Z§ àôÉïz¾gÖí”eJSt`|9ã3ܾ5h»ë”ÅRÓh'êË1®Ò•HŠN䬕]¶Xþ‘X¯Màí]lЧÅRëäË}9έŸ"=ªleUYV‚è^l_퀿u+ö`Q‹¥v1Š kâÛñWðºÐ;dJ |öõX¯N“¿7ÞF§,–Z¦ à{ã™L¬{#DzT™n+ËTNP_‡ÙÄ— ¡à¶­ltÊb©e´õã#S!0ûë rÝeJStaü£Ä9Þøh×N…´X,µ‡.÷ãx•bü£Pt+1©Ž¬‡@`ÒÄéÈ9ÐòEŸœNY,5ŠQ¹À§å‹Ä™iQÐ!„2¥ ìÿ1g¢3í»mtÊb©U ¾;‘iÄœ¾ÿ‘&EtÈTNàìOø„8s§|¸sg²XjíD}?Μ)>9û“H“ÊßÚå—è'ˆ/¼³7äíÂ>‹¥&É›¨Ç2erècÐG«†eï'ÎИ»Ç ôí°Ïb©9|EøþvÄy®D:Ôª;¿Bwÿõþ¼Ø  Q3ׂ’öY,5GÉ™k1Š8eÊ+ëPw©Ë—é6z!Nʇ[ö´ûNY,µˆ«¢þ‹ÛW =éQÕ©H­1êQ¶ˆmOôh‡ãçe=bÛÂb±ÄCùÔ„³nÌ ñ˜l‰6¦ÏA_yŸ„{ˆÓ›r€u1ŠV¥,–š¢¨á£Y—8s¦$Ò ÊÞÝÄ"ØìÞX ¡á§»Û¤‹¥ÖÐNÔw ãMßìÞ®©ÐC¦t_™ èxáç`·¶Xj‹hká¹ï2iî¶¶XuýÆrtêi6Žqì)(üÇ›6+oj±Xj_yò›8HlÞT€Ë?åóÝ#S=½©(:uqê¥BðNÛÖ&%X,µDÉӶʼnõÐ+‰ô§{dªWöC °ÙíÄ™;!‹¥Fð•'±e /Æ!ŸASz%7½—2ô"Gp¦£"Þ•}‚wúŽvØg±Ô %Nß1V‘ŠVó=4§‡û¢{þتaÙ›‰w;öž<Òû,–Z¡Y¢>ã9ÇÑj¾›»¯æ‹è5°Ó!rqÞß°Ïí¢‹%óáøûob§iî%…ª§E§«wX1Öõ,!ÎÊ{¼yGÑÍKÿa‹%NŠn.Xe÷·n'ŒQ¦ šwe2}œŒÞÛ›<q±»ws€œØ$O‹%Ûråþw(hÄ]€×û´„>ü¥VU®'N÷=~šáaŸo·B¶$JAeõ‘]T„?Eö vMXåúHzÒ‡LéNy˜x—Ì(BøÅ>Y]ÛWО¶ç3[DåEëB&äk'꫱®åt¤;ºQ\Õ’ô×Ðÿ°ïHÈ…Y{†”Ñyóª9[Ç›Éf±tA®P˜¼1:k^¼!F}5î!Ÿ~àk sƒô¦hu`Ùëc.–²Óe9$KÃ>_¼hsÌØ5þýÃÙ ­PYb'jcßxV?{ÔmòRt²´ wQ!—åd'âòI¤9­Žîû·½­M '.ƒ ˜>ßP iÇ ín|_1 isáFý$ziÃ]…’“v¹¬Õ»•aÃÝ£F]| ‚Ðæ†©—+²vW˜vBã—9q™H{z[ŸUsü‹"¼ÖÞñ}éZ‹%S*_sáÛJ*í²Y«g+)á6x¨Í Å) ‚¨vf¹" Úá5âí¦>ÂYâ—ôéaiŠ,{ñû4°êÎë@1®McIAÝl×Sÿ}{.B†:œL†5-õ‚£á¨SXž&„¦·ÿ þ³ñºHÎø©GªŠ.켫ç! Ñï(zzI¿ïËÚ´pÊ*ñû|Äûµ )¬J´;‚pØ(}kùñQtƒ 'Z’#jÍÚÒ[›NÐÙÓÊ-PÝr^³ ´;¥4KèÞ¯‰w\eä”U–ÜÓ–ðw¡þC¼®žA0?EhKe`U‰FÝAóÙå—ºß q¯DeaXj­þ,jWîuôÑò¤ù¬[Ò‹Tµ)á§Dý4æjøPÑÞ¶Ä¿l÷„e¿‡¯”È´ÃÓ £·kÑB kîIK¥,=Ì"[l%e9³f­ºÖâ «m‹¨°ˆÚã¢5÷lAF¤ªÝ¦N¼ás¡„,û½Hsú¶%Ž7M_ÿ=ñ.Ayß) ’ø÷•ïä æ ÕGý{έ4c^Ó­! ó&ێ˖ƦÉ@0DG ÏÝp £çÜ:깃VÃ䌟p¢‚!˜÷âQ ^¤5&ìç=}[y¶ïeâ• ‚1]hIìYÒæ¹®š…Pö™z½É ˆ÷ó‹‚Yk4»ïRÁôÑ×Ê-QÍ:ׄ6'¹á_‹Ž˜û×ø/G—º¤·ôó×íž°ì)Ä=ì+!M— ’Ȱ*¤Í%|Ȩ“ºTRÏ7Eõõ÷ƒ–„ÐЭÅhQû:h"‹~죷–Ûè¨?D•X¤Êš.'Xö”þ†|ýÊT›NY!Þð™A(>NùIQ4*díù¡ïhTôÚÿ6ÛZÄIÎ˳֢֨D Âf[ò‚,1RõÑÛ‡H"‘ª’‡"ñ÷9eÅþçÓûùûò°ïâöÈÔ“ £>E=Q¾¼Þ•_yj}û-Q-6pn-!kqE sXáåz÷¹rpB=~ø”$JÔî S$îð¹ð‚ÐJAÿõ„e¿CÜN_ˆðrñg£ß‚sU×Þ£Q4ê·?ÑB²1kÖ:c¦?QÞoúm¥ÎU·Ä^¡-ŠMÇÛJȲßéÈ7€Lµiᔉå*‹ù.m·Y4=µ8Â^+•XBâÂìíV„ÐM'ËZ£[I•\AØn%þ‰Ð·Ï_n¿{­µëx¬Å¶Û,ö ކ|J¡î÷3Êþ÷°ÏGÔ}ßÇí>„—ú¸’J4jÁ”]A´FYKÓ¢ª0eg>Eè+Rå#¼ô!ñÅs£~¨î#žÏ¿:¿qIÖï:òÚ¾ßÆœ7mê²Ã×?qm æIQ/Ë×ö£g T€ÂÑߟ7nþÝPpi¶{·XR$gŒ)¸0ÿžyãGŸ8(ºŸàÂ×ö[–¢ŽëœË‚†¯Fv ÞÍ[¢µ|¿íg-_çûú³6-œ´,BÜþ’û qz2Zp¯¥sÐWY;õç‹ó‚FYË’uDªFx*¿PižAy WÌ}%÷âŽJG«f—xÕ쀕%JзógäœÑq.ómSÂ9¹ò·Uéæì´¦ „ŽÝ®ÅZÖ¬¤BWv\“9‚)÷”\œë`Û´p΄¸ÑÈ ÖÌøI-®0cØ ¥yž+±¦y†®0þ$„v¡°ü~o Ù×Çšµ¾,Úí –ß—‚ÐŽŒ?)j˱™+4Kܾ”`{ fêlÀO*)áXHÜ“!BáQ„öØž%%Üï"ˆwÞ#YÚ%Ñšµ¾¬²Ç#xç!ïÞAœÉÐíJx $Ñã¾2¨kÌçyˆ ˆ_[dê1B)ÆçD»#¬»/ÏübtôSª;ùX³6H+•“Ÿ1šgÖÝWÊ{¤Åô]®0õâNëJȈ ñ~«xª  ófï©·Î$Æpʧž>2ùÿðU\3]¾L‡ÿ·X,ÕÂWŽÒ±ÏBûÊ“ð…¸O=/kÉ^Ón™_Ðù¯jɸe>OïXѹ€+ž¶1O‚….jm¬HYj O´)j´‰w3NÛ‘XE*Ò’§o™éË@ ¢(š¢ Ó ±úR_ô^àÇø%ZŒLÕX,Y#gŒÑ1>^}¼à1¿ˆ¸3%AEšRt£†ƒRLÂ÷o¤'æÂk`Æ{ó>tö K­sÛuá€=™û íß¿±ß­ð†zÕyÁ9˜üÕÐ#¶úxû§OÄìOY,–ÞøxÁ¼ýSâ?î;€üÕƒ“”ã3HÍ,ìxqo93ü™ýöÅîëk±$ ûíËgbž—·Þñ²HWà fú€r¹Õ¿Y— f1hÞ~|êf‰Ì÷Y,–_yò›ÏgJì2àò¼¬Ç ¿hÅI0Œ®1LÙï«Ä½èÑb±tÅýN@¤†>‡A{SPPyùû¸1gOEûÁ㓬?e±$EÙ—zŸ‰ ùÁ,ï jp‘©!Äóó‚sùkˆ?Œ®1LÜïð¡”Îb±,ö;<‘ŠÂç×4èð9 Á›*g£O¹u>qg£GþÔ'/cý)‹% ʾÔÇLHÄ—b¯©·¼=˜ìó C(RΠny[ßCÜÙè‘?5a¿ã°ñ)‹% Øï¸D BÐ÷Üò6j()ÖC(”¦ÕÝÎ$¡d·/¼/HöœW‹¥ñð•ÜËÛ&òen¤!­ÎPôpHÚÙÀEÏð/ûÄI`âù«à{C¿¢7¥y^Å1EšbOKˆÔ÷ÅWÖ™ŽÏМD‹Å20>¯²Æ ¬ÀèHP”~•;zi†\´¼àMó%ÄFÖÞîPlb‚Ålwh""4_r4¸C©axSQšçoƾ€øÓ<£ohûkóŽ6ÑÓb©2¾òä^vjedB=™_ûú¡¤uV††æ úë õuÄŸæ Š€‘{\žÍŸ²XªŠ§`‹I»HEi×}}!z8;çC¦4`ϳI&ÍÓÒÉ笀±‰ Kõ(jÌ9+”N&™ŠiFaX£Ëa ú*»Ä8÷›ícß} ¢Ä„»Ìn61Áb©åD„;e× ÀÕ„; ~‡©î «ßkZ5ìõ]ó§d×i;#¾ ¤[,UÁwi;Ë®$æKíõ]hÕÃs4†åMuøSw™]ñ§ š…÷ÛÁÒ-–*à+Oîç‹ ›ÐŸ«ïw®/5ìôø²?õ’ñ§4cw½›=e±TØõJÆ$²§›iÅp}©a{SþÔÍfïDü)6ûüãÿ,:¹øç-–:¦èäÂÍ7~â鄾.ÀÕ·„û ß—ZŠÅ† ǧÀÀú¹Ðníb± _åÂðÄŸˆÿ˜«ˆ¥ŒKÁR­‰ÎôMoéH"=ÚÚeå=ÎÏN÷Y,ÃÆÓ°ÇÙ¬œÀ¶-ènz‹a$uv²Õ´{¸ ,D Î:he‚*‹eX4áA+/8‹dNÜH#Z—ê놛0hq®5‡&’{!Ͼ²¡]Šl± ‡òRãgØ ¹«~ mÌÒÈÔR)jÙŸŠòX“ð§„ 69<»µ‹Å2d<69Ž DDJp"}X:_j©¿¼Aßô¡sI…々—ÿx<øY,C£  ~<~áå‰}¡窛>\º¸,å /ºô¼ùýøC?!‰ý Z:óðKṴ̂?‹eøx¼ÌZ“­ð ~7áO‡³'Bw–Ú'Éô!ŸŽúIì—à ²õf'ØÃ,–¡à9°Ù ²uB>aÔ/ùté}©*xS‘?õëæ#ZHÊŸì3ý¦ÿøŽgS=-–Aà;^ø¥ÏÞü*‰öÒ™£o]z_ª*“’yƒ{xkó$±?:€ÂÀͽϦzZ,ƒÀW^x77ÿ0‰ˆ4Ÿqx+îÒ‹TU¼©h!ãˬùË%² Äñ®,‡JH-–ZF!MWøÇ&•ŠÖÅ|8gâŒ*mPQñ¤àÌ`ÆÕú¼Aà€ìæ;ÚÍ],–ðdóýcIîL 3Ž˜AÁ©ÎŽ&Uñ¦"ñ\ÌØÈ–‰-D6hJ?sf±c_‹¥^)è¼ùaîìE4%6Ö pÕ£ ÿotÕ¾°J2UÆþÓÿôJ"Õâ¨̰w´X꟨oèûeûÄ|ì·Æ¯VϨZÿÎô¯:¿&©Ä„(5aû Ç‚¶?‹¥O´Ž•íKC€œ_ßøj5:®¢z¥+üæHB gÊ|zÅ—V!´*‹¥7¾Cø¥U>½"Á¯ä7߈ô ZTQ¦ò‚{H±ù;$•˜PIMxä¯xa±ÎR ºÕ®[L”V·Þ`•þ•›!¹4„(á;‡‡shè’©Zl :Þfr‚á¢GÝaö¨Ë•jUÍvz Zu³Ô[jK9*u»ìž`TÊ ygΔj%"T¨jÏ.'&^íÏí#»?´®—]t`Ûu7Ùi6¾kSXãÅW¾ÛlM¶ØvݨîëƒÖ0þtÙ“`è\Ìë—ˆÐTÕB„Ô~•?zÉfd³­„’Nê+ã´¡/!Þ¯äB»¦^ªú´vG~äx¿Fx©T®ÿÚ·’6Û ¡Ü?1Q´ÄP‡U/i›ö[%áê Ìã„ö:ª’#LúRåljߙ ª¤Ò.WýYI‰f3ñ;•—&})ªÿZ·v-8C’ªkd¿U" ¨®ÅQ^-4_D’þ” ¼4¡Ö»sI OÃÇ>‚ðÁÛ¤]ªúµ ¶á!ÀGøøiê£ Í†—r JÆ|¤ù"Abpbª¤Wà=’õŸÄ»VþÒÌFœÝqaùÿÿýͱB[wŸ,Y›¾9–w«åqvtj×¢Kñ®%Y‘ Þ{…xD>†P·'g:ë|™$éÑ*¿CÇYÛÉžEMpÚ2ígAyY£ñu¦µ¥]¶úcZë>ºÜR´ŸuÚ2Åž4ÖŒ?Ò?”äVðhXçËÓ«<ˆIX•àü–d~A¾¼®ÖèÓ°\o¢ûsÐ kí!„u3É’…ްÖt¡ˆó'AT­úä¡+|y]„$cÂ8¿¯Þb*u»fAAÿ~ïÂâýrBKM†ÒÛ\aëÏ÷n<±(áŠl Áôz˜nýùè^Ôžµha¿‹I¾ßµÌ"ê÷qXl%ow„5wOü>¯>G-†AC%´GÏÎ&fäèéqÌžXkÓÂÑÓ;ë9º /µ—ïGmYI ÏÁ«$•Ysw)'wÄa±•;zV©Û¯²á¾Ç©½€sè“£ûs0@ôLA´õ¥b¨qD z&ÝÛhˆL:¬öÙmJxî#…§n‹×ß±ôíZ8q$B²£d!D¼+$Öj«¾µ)árhíV[AfækÑ7¬ +)af¾³®;þÕz9µõ +Ïï]AÒÍÞ È‰#ãÍYŒ·ê\a…¯“´L w’Ô–¢…¦Kèõ\Bí=×kÉBG½|ئK$–  ˜®Ѹ“H¥¯­ðõ¸§­â®<ÚP’´jdòžµ“QÜ®…¦v–½£úÞzëKÅi%%< oÑ+"xÂÔÚYÕPr„É{v–=1 õhq»p1_E›öŸ’BõE‰ûë a 4´èóWzÍ9­³ƒÐ^“sNµcí®°Î=^ôþÚyo²m¡ö[!•^¶ÿ”ø'xâ¿Gh>äçB„`ïå✨–µ»ÂvÛôxÑGxàcj££Ô²…CËå·Û¦펰÷r$ßT¤ù4Abïa±_I aŒ%yeZu),‹Œn渟uÞàlXÉfìÚãÅqn²Ö1êߢúvn§W ±k¶àQ÷3Ò©už$:N¸rçÀ¿IM¨ÆþPHbútðõñ4¼KïD„åju+šÚ¶-¹\ç}@Ê÷æÝ,Å6£ö;ö‡¤&Rü{NÂõ‘lkáøÉ=šA¢6ödAT6„ªÝF_Œ¨b—Úü¥Æ·¹­as…üéú 5ªˆŒ¾8+‰ž%D cONéë ‚?9éSœ’¾NGXñkiVñØc$#BjaÝÝYˆ ø§€,œEvžÜC±6·Åëjµ[+EÛ9.,ß SŽ.\w÷l,»*‹Ô1©=êWüš$žK–ð5–Sn%Ô„ŠP'dGþÊèËÿ 0ÈZ_©…å=õk펰ÖWLÅ£}â_S/UdQ›{B:"å#úÖ¤·ä¤º‡³†¢ÊɰˆÑ©œ¦.({ê‚‹¨òñÑì 'Â/Üã+ðlˆÍ5x̼QZV¾ð“•šZD(S5aî[§¥S¯ã!^ šVF=ÃjÖe‡}+¨Ü§t‰Úë¸S^H¹§P5‹o³?E•Kú®&/ÉmŽðåõR{"DÕ…läQµ©héˆUù7²ý粚…JÐvQX‹õFõ¿ýçþ}Ī‚Pr²…µÕ±?FH±ß|y½$Ó:-Jw„ŽHíŽw©•¡_»-|È&×jB¨çuD(Q¢¤ ˆózmÊ” „l²ñ‡¢³±Èªœ‚p)Bj1)d…#$¥ŽéT:Bú·¤“šP¹Ñ¿y”lxTB˜Ê3ªŠåW‚3—ΠEˆ8skW¦"ks²ñØhW£ð„´D*@ôoÛH+'• ˆ‡¯ò¼v/âÆ˜_!‡myãSä$ GGjò¡¯Z]“vA,Z]_åà 4 Š:'O±å†FL B^|í°<¾òR©ƒ”îƒ'½ 'þ‡4ú¦B!ì·é]O‘3Y*ð¤9ÈDA,hšƒô'XŠ:gžbÓ»ØA¥"Rsâÿ­BA§U'©õ‹¼)º—,XëË 0ì²éÃO‘3…>ÐÝR¿œœyŠMfL* aý­/YPtó©9û)>¾súÙŒ:5½  ÙjÓÙ‘›b9,–>0n>|ŒMg³aš=uÔ©Ïþ Ò+Aª£ ßÀ›éÛ •€ƒaÃ-ÿ·×²dCÑÑÁ^¶übHËÛAßöæEQ_MTeÊ£¨–冽˜ŸR(=ªI·}´Ï:¹P[¡²dƒvrá>ëÜö“Rô¤Bæß°×²S WH9f›“¢³/'n8¤²tQ·í)-Ÿ©à2â¶—Ædc½Ÿ¥þ)êœ c¸í%F¤8·Qоý”õ÷¥è¤—uÞ“ uÃ\è».Ú}ÊíÔp0°èïºÇÈß.¶ÄŠÁwsæ1¼ë]Cºs{å ýþë_¸ÈwÓŸßë$C2^€sÃ+S¾HÐN ÁÁ[¾òÕÑ^ µo–˜ð•Ö^ðÕÑ[¾œÞž%eS¾xÃ+8^ŠKcz“)™¢çß?íÒÌ¢‚(œ2}֢ͶÀxvðg‰…¢ö³Ù³10Õ°9€‚iÇÌ¿m2äIAædJc jîUî%j„ ¢(O>:öTÈßî¡`©2¾“30öÔ'…”#RÜKæ^…2&c²5™¼²¾ MÚŽg¥º@Ýy/^hc–*a”q¼ð^Ô‹. íˆ@€Ö·½2øÙ… –OŒšÀ[{ñ,nê°Á°ëNïí>E‡›Ÿn©­Z£Ãݧìô»bRŽH„¸<ûÖ^08o©7iWOß…’‚žÊIòŸ”³¨šåïœ?îX¤Ùø6íÓ²T|§Ù ㎽s>Ë¢SŽHEÎÿœ´áÔ eJu'“2yãë‹9eMæ§œEá``áúoç»^¨µMû´ —¢ÒÚ Ïwõß^A{Q柲æÅø:;™R=HûÔŒ~ÎÓp„Só|Hò‡¬öe†!ÜdûJÙ¬uZå,Šøkû¬¸,j7›lµ¥ô޲êzë>85Ÿí6zº©§Žci”ÕÓq¯y!t²qÆ_6,T‚ó~÷÷­Luµ’ áÜk²Ô¢:.Û"•ÂáìC£¨sæ´å/œ‡— [ ¼$ô½]¶ºë¿PÈ®“œ0FiqÿÎàÓò] ï¼ì[{‡³ÇEÔVv]ýBúAsˆbRþ©Ó.ø_Qç²Ý’ÓÖɬÝN_!C¿ÊHšOž‡Pr­Oem +©’+Ì£ùd„¬øQåþtúÊY÷¤„Œú"ks„gtVl,jhO]4JÚÜ´‹“sDw³Ì7þd,jâ)„Œ‰Ô3¤&ÎÛÎø ¯ŒC8mƒùÏ&Îr¤îš¿ñŸ+VÄè¢äk¢"ã¤÷¨!·*M *§´y—Ï×z9¤¼‹TW ¦n8ïÙ ¤ü ‚ÚhI!î¼g§}ÐHO€J6­—OžsÐTmòRhø|*ÝËCÁÉ‹6M<§õrÈD†T¥h¦}a^¨E´%àÌýÇ´]ÈŽPEgá„̸~Þè¿IÞn£géBQi•ßdô¯ŸÇ B$S@P©]æþǤ½mÔÆ 0hYiçyw“¡T–Œ¾¿Ñ.ÿ|ŠŽf§h–t0øN.„7˜}7“Ȳ⮅‹Dêtö–/‰Z)g´w‚ž{O¦†~Pñ©&Í~Æ›ù ¹P«‚=î¡¡)¸ZåÂñfÎ~†I™ò£:†{µ%R5äMAÅ£š¶áüÙdë .P\qwîÆÔ–(d“¿øîí䨴‹¬âÀÔæ=S["UCÞTTXcÐóžÙwMÈØ …‹’{÷^ýÀyËi“—¢c÷ül,|Utò¢ÍyËéÞ½—!’=‘ÚwÍÚ)j!oªgºGÉΘF‰ìäQuÎ ˆûÓû„67k´ײ£îÃý)Beh–,D(1M(9Y+ÚÀ–z†cmŽpú$‘=¡ª¤ïý‚¨6v¬ÅmmZ”ð&Z¹û©©§…‹NŸTÉœ½-õ ÏÚáô±|É&aÊezc» !ÔmvAMÝZ› µ l·!o A&ö=èn§­…e1}[ꮵkáôÌ#‹B%„e?ï®sÇ B»]ûW‡VRí® œ;–»ºÝõlY€0ïôQŸ©MK½Ã·vG8^%‹C?Að£ÿwÏÿkT^ÏJUýXIµ{‚ðWÜó»ßïŒYˆðêéÔ®'%Ô´LE ʏóÆdвT-šthYª\+Uµg%¢XÔ‹L:”EBÑ€C¹/8JÔGjÛR/ÀÒ[»„UŽDÈj”**YT¶'íÿ\TnV¯!«„ËŸcÒþ|ÜíŽfÑBYåH¡Ò?jÛjj±Ì’ð•²Ò¶ó$k‹hºcˆòþߟt̽·®=Øe5Y§ ´›óáßì¸×û¿bw2›„80m»¹¡|²xîÞI['«öðÐÂþ«ÒFVÙEžÁs'íyU¡ÛRóNyýZ‹+^ÔžÌív³jBÛþ« ¢³]ÐÁ[ꨖ…”´pFž×ȺP ~¹¡2é[ÏG¥×-vaMÆ,¤ÅR7ŸgÒ·ø¤üb6Ó:-@x팼Pª‘ª#™¢I×;Ð"˜Ì†Ó+V‘*q/:§9z©Í«Ÿ†UÛÒæEÿ:§Ù½¨ãŬK”Á úÁ;¨õ„ž–zªkíZhG_åpzÅ*3€âýñØ•¢—Ú<»´&]kS‰:v%ïå³;£×i!‚è«Û©å|ó¾-õTÛÚ´ð!#³uÔPRÉMxtÛÍÊ/9v˜Î­hqò²íf^þ!t¹%U‹”´…”Ô¢ŽTƒÇ™º§º«ã—¥ó¡*—$ˆsͧÔ÷`¯b© ‹òHV8¡væoº›¡Ô_soÛb—Ù•l̪냚ͻ¸·uü2¨A*2AV8X¨Ç©¾,õ$c%%J8`u’ý¥£K¶nbåüy‹žíøU»×b7†évÇ[Üv¯òÓ³l±ƒóçŽ_Ö®@UZïÂVD5ÊO½IY‰ÐîªìôYK3=­›Xq×´ƒ.oîø¥ÓÒàÉ !-]ü'áòæiÑ9Ä«eŠÊ/ˆ¾å.„Щ÷ˆT§ÕÅ~Sƒ¥àäC˜ü•w¯B4µ|.± ;öÖzyô{þ鈗·*ÿXô›¤.ö¾*)—œýüwfθm¿Åû3£ü†ƒ[ãwÜàÀоóÇJ[nÒÖÉd­]‰ÎOyÿ”Ô ´´f(uØ)¸·®zÈ)Ë.êx!t[¼]¿ö’jÑ-^´'” ,â”eW=Ľ•BÇ›J5îAU.Už?c¼ ªväŠ5”7àƒëÿcµ³[ÏL†÷`wZ˸®ïu[”½¬TEË€ ‰¼&hºë.õîçîÙlÁÁLíòG‘÷T_òAóÉû¼}KÃÍ»ÑÀ2E•S˜3Gÿøï¬O½ùT]‰Â¯Ý‡AŸªgÇ=;jöþ/Nz夞ÃmœBå/‰„+ŽƒT TD‰¨îóèn>À%úý5n\»e£ÈŒïöç! UÇwÍþõý­ÎYŒ.J®»jCËø =óŸ9¾õR²~¬ÑÒSñ¯zÆmþ§^Yæåà…½_óú®ówèûouÑ :?¢Úh@'BJŠJÝ–}—\/IЏŸ»¦.Zõ–î:Ï5ºÄœ¢o® þ|§îW šOx㲉øÓhAóî4¸LuÎÀcs—lA=ûT]©}ä½Ï|wÞ„×JÿÝë•æÿï½/µì0ôÏ÷sÓ¨åW˜;õÖÏ4­þÉjÁ4¦2©Wi#…¬wqªâ€zìë»Î\XiŸ•)ÀWŽ£˜²ß;7õ’¦08:$kI³c ø÷G¿—û üP}d>Üý“©Ÿ¶/Э´Óæ—Î¥¹ß/hå{xMŒd„i1nþø;&èådYg¹âÄÅ+0‰å×矙Ž2)hqª\·˜¼ÿÛã†acÍ»ceªLAç œ§¾“ìMe¸ñˆDË”‡uƒÍ:*Q$À`ð1h<4.—MƒúÞ°ã;uƒ S×Z4¨[~ü¥3¤Ò&-V¦ºàƒã…ðù­ÿy£h,ŸjIHù¿¦½pµìIDATãß0xùêëóÂnŸCÇ k#ÊRw¢öÖ²ñîO? ¾CØØñ¨®X™êFQçÀÜË®W„ÇÒ¸>Õ`èÚpL?µÔ=yÖÖfß”ý(çÊ»ŽÛtꊕ©|'ÂÆkϾ‡)4JHÝ’&Q{{£ÿù"/´n|wl}ô@“ ‹ çŸ/~ç†ów ݪm^T5±2Ue ݬáÏ|óÎe `ëõIG°œ·'~ï—¿ßÀi;Ы6V¦b¡ sŽöÁ°ÞÖ/^ÌFøK<`ÊR{²—<{í“ÿý°ŒW í^q`»M,äö ªài^xX6>ö³úVÀCÚm`ꀀúÖc?+¿ð°¦à”ö­HŃõ¦bŧä5ûGŽuVû åŸõ«j•NJF\zð¯YÐê5ù6ü'V¦b§3°þ '|éÅSÙ€0Ú;íÒY‰ Ë§ ýsí /½i;°Áò„°2•†‚nR^pÌ¤ßØþMò€õ«jƒNª0â—‡þäWïøNÉËÂÊT‚”q›ä„_ÊŠUÊ!RIÉÕ÷­þ?Î肃õ¡RÁÊTj Úur>À9¹+~ï6-ÿÊŠU:t(ž\aæ±³Î,½ÀúP)be*e|Ur›Mtþßy#yð{G–“A­X%Iwš½Â5ßœuFN«n ìVvébe* Z;ù ÚUý¼1¿<ø½#X¿üK+VñÒ] þµÂÌoÎ:cªàëCe+S™¡‡Xûå!ïÁ:å_Ú,«êÓ5 ^Xaæ7ÆÀ Tæ°2•1ÊbUÞYý¼ ¿<콯²^ù—R^Âlåjiò’áJ-þ{…ë¾ùÛ3>‰~(xV ²‡•©LÒ]¬ÎqõïîÖñäŽ÷¶}i¨Âè(*Bçή?êö3Û£­@e+S¦û0ðn®ÝäίöajÇlÜjpt?ÁüüÍ»ýñkOEÛ¬Ú!^ö±2•y S™ „óÆ_¹Ë{{‡;ÑÜñ¬wÕQuÊS«ó×n9öî3>-ÿì´j¬@ÕV¦j†‚2Ž«rå`+_]ío{-Ø‹-º¼%’«F]E±'ºí™úظ[·¹õº×*Ê^ôÑ¡MÕ¬¬LÕ†¢6NÞè²ou?W¬ó÷>Ý…/té–¦c¡Gã–PYpÔéù<2þî­î?î…*ã´sÖª1¬LÕ(¾*9¨æŽC!nåÏÞµÝüíÃÍY¾ËÛ…®[K Ò%0ð?çñ©ìúàöÿÙ«òŠnu&{âpbeª¦1•é&WpŨk6}s›EÛÈÆÝºn§©«â7õŒÇêŸcþ¶Êߎ|ò¸–Ž×t«ƒè0'Öªe¬LչʋîØÄø].Ÿ|ïú¯m¹hSù\y† ÑÜa-yY¯‰~,TÏyrµGwü×7ÞY±³>Ü‚²òT?X™ª+ PÐ8ÐÕ¿ú€ËÆÞ»þ-Þ(X‡5zÍVD‹ yZ‘ÇDŸÂ†WÜFÏþÌìÿuü‰¯ëVóÆnò__X™ªS ¡*©ž‚·óؤ¿­ùß ƒ [VgUÆõñ§å<- Ë²ŸxIù¿¦ãß½e `¯ú¯ûÌêÏl3g‹÷÷èú›²85‰c}§:ÅÊTÝÓ)XMx *sŽö?s÷ª¯­®Ý²“™Ö‘çÞ©äm•Ñ€tqZÔþª³ zœÝ_jjÈ<Þõšóâj/îòº÷Æ™ÝÿRùn ¬85V¦•Q8à’ë!Y°˜3›ÆOy}òŸqVÖS>\Q&2‘‰Œˆ½`í|ÀêƒåÞ5o‡oíöƪï|úö9¥Ñ=ߥŠnjɉÖ5V¦ªXÖir¦‡§Ã\Úá¼1â·cedLÓ˜÷Æ<6ŽñŒg‚3vÁÈ OžDÿuѸ8h\4ƒ!À`h§@v na\[¸Oø”O·X°Â¢Ò"µ(üø°…ŸioG°RÏ"ê¢6‚Éõš–ÿoÓ­öÜYUIEND®B`‚nixnote2-2.0.2/images/attribute.png000066400000000000000000000007351315604104400172420ustar00rootroot00000000000000‰PNG  IHDRµú7êgAMA† 1è–_”IDAT(ÏM¿Oa†Ÿï~|÷qk¯R¥,ŽA5aq1ÁÁ…©‹ ÿ„þÌL6ÐAIHH( Á¥"¡˜R åWl®÷9 oò¾Ã3½ÜKPÊéœJ÷™àƒJê=ÈÂSȤ>¯`Wô¿¼æÇ¼S–~ Hß_îùŠ¥ah~àWÞ `³É`Qå97ÔY\¯˜`7Ž'-ÎyŒM‹^j±ÆÕLç§È,úo²xüâ°cˆÀÉÓ¤ÆQ¹ñDºd¤?H'üþ~:éo¹ñG´ÙãºmˆŒ~ŠC jçOŠ ²­¼j’"d«Kqç‹¿s‚A#*·!!-8É*¹tZ„„´QYô-1f0Ä%§!¤>ªÄ°z9 &ô~0?;´9ç!¾åYûÜà?±®7w'£]­tÏmÿ¯«3ÚÝÄÜ1À:Äh€ˆ¹@ÌݾvgÕnbä™ÔRË3ÌÄGµëÎÞY™$ÈòŒQ¹ek[Ëm^P ‡BüRмbÜ£ª˜;fÎL¬fkö‡W«Ä !`f¨Ùl·æØÈ‰Q5{>†(¢Šˆ"ª4ó5\‘¢Z‰1`:ÝKwü³S Q5rQrÌQ]´#´@D+"1‹ÎöÒ=µ}[%ó\07ÌœþDôÔ²žxtkTB¸;¹È¼Õ#jÖZ¹;«Êý@ùüôWg— ¢•,MQ³«]Ø6üpx-„p¨)9î¾R‰R–Ñ›|A€\´Ò×W¢³²sÑ¡á‡xx¸Ø‰kÍ„„r_¹¼•‹þfìY€¨ ¦Y‚hËSèïïÛ‘‹ì¡è7Ò$Ä%Èѱž^ÊÄK² ¯TBD¯–™B „€‡ˆ™aîdI:Ü l¾¼€d¾Ñ=C›^Z·vÍ{ëo^‡¹Ól —gf¿ÎCÀBˆ˜;DÈÒ„,ËNÇ'&Z À¼û€¨VÌöæR­ÕÕ÷Ç'&ŸŸ˜Ÿ˜\-¢;Í쌛So4˜©Ö˜­ÍmÕo7ÝqûþØFópeci4Q;ש™¼øëIQ{ÜCP3æêu¦ffDíƒÛnÝpï²TµâæH«ýZ[«êD·î·?¦\U÷ŧÝnNž ÕÚ\YU_]>€Yż½µ*ͬé%β젚mîî(s¿Pd9£w:ì(«€Õî¾ÑÌ 1kŽ»O÷uèoîžt÷çz­ÒÝÇ€›€­sc\ )&ßl֛,Kw»‡Ý‹yÚ5à‹ÀŠáÝ¢´ë÷* ÜŸ$Iªj¨µvÁ„„ùüï|T¼s5ÐW,pA " @½ª\”PTõuü‡<¼| \ªó¥¿ M` ¸cŸ[ÝòG:zÉLeLÍÍ[×:clÉ—ÍD)F"p§«éF Q!÷vŒL°«7Ô>K5ÂéA$Ç—RÙÚ=8¾ˆUÕ®_ÿâœÛÁ¨J¨g"·+éb‘áâ•äÔ·ÏÎ+È ?žˆy“˜®Ì ÅéËúüø–ƒñ6œ|ôqJJ¹Š¤`&Kœê™ñ&((h¡³w_M’Ù¤`Ë4¯UGß`Hø©¿ÿ5^SîbU–B uû?4¶ø·ÚüY<|²$áe'­r[ýQÙõœW²‘×.˜Lù‘)ž X+K#âCüT1HµÓ‰(!ÎèŠëóØñ>æˆñ$¶Š Ç4 ‚„U²®)~f‚T¡ï¨€@G'MÐîm æ™[í$NM „‰{Œ ©©¢Ò´6±ŠF%ë?`„a»ÇEMÇid«ÿ‰ûBxñÓɃ±ÉÄûg¦nlzf¡ŒÓ×?wÑL#µUAÁ “D#½Fa {QKå»l‘!Æ,)'ÏÅ~%¼hxªFcG_ßõZG‘=~÷ÚÖIEND®B`‚nixnote2-2.0.2/images/classic-theme/left_arrow.png000066400000000000000000000041631315604104400221230ustar00rootroot00000000000000‰PNG  IHDR00Wù‡:IDAThÞÕX]l×þÎ;³ëý±½^cU[ÜT®d×UB¡„Ð6‚¨D1Åöz×® Y@Ú—ªUZ‰'¦i^¬*yhHâxc& MkÔ·¦ ôB”ªRjÑ€ÁÆxý³6ÞÝ™¹·3»ž]Ïÿ,”^ùhîܽžù¾ûsî¹CRJü?7ö¿°ÖÆäËb±¦`Þæ.OÄãñéR<ó)Ðkù6ÈûÓ4_ŠØ\ªç>mm-»ÐßvìÜQ¥(ŠÎLV²À»ïÚb­¿PTïèèð<öØã 3KFà¾ÅÀÁƒÕéÙÉ7ýdoç^µ¢¼"÷›AôpˆD"UŠJnܰ¡1ëð)pýÆØ´ék€RºPÉ D£{¾¡¨ê…ºoÖ­ßÝ´[K&“¸5zŠb½JJI­ EÚ÷|—1~nû³ÏzŸÙ¶M¹=>†D" `o𥠵µµt)\=ÙÚÚÂë6×ÑÍ[#HÎ&O”™ 9r„ýó_ŸýÖSæýÑþýûÔššõ¸>r©Ô¼v€@\¥×b?ŒN’´ H)!¥D’ì«5FB’´Æ€¿÷õö÷”Œ@$ pÞ¯ª mùåýšÇãÅ‘/ ëºËl¡¹¹Y™››ûŽRR g_Jd³Æ-ÉÙY\½z% 4b±Ý_æšg¨¶¶vS{{‡G×uܼu¦iºÎÂÄôô$jjjr ¤ \:îEî^ÕT¤Si|úéÕE®·*ÑhóR<myâÉòvíâ33Ó˜HÜÁR•­a¹9!DΤ£/„ÌûÍiáª0***]Ÿ»b‘Xs cÊ;/6½ÈŸØò$»3q³³IQž•´e•Y›m±Ö_sEýÍxmm-ÆÆG‘žO-_HiË"‰D4®²?ƒ:|˜‡*C…žÑ-°X ž1!ìܳ6:+W ½½½š{ØÙðH}WW—‡sŽñ‰Û0Ma­rD Œ)0MQ’•–R‚@+#î©c\»ÐPß°.‹ªét“V°fÁ/`p ‘ƒ™Sb-wÇ¢Z£­;…ŸÙùüNïsß{Ž%ggÌ Vd‘‚ÙÀ Ìf ˆ@ŒÀ¹ Ã0J¢ä2](mÝ«0zsÿ¾}¼¾¡ÓÓ“˜OYÁ Ë=H@X,r÷ ‚`¶"`°Dàœ#“ɬ^€, —xr% ¨ü©ŠŠ ñè£_‡a˜Ðu=·Â û¹L³@†˜Úš+l5TU+²;¯˜É"®'2=mþtjjò£Gꉉ T…Âà /š.e Ûˆ1³2’¦ikN®AìJ ›ï¾Ý÷ãÙÙäϺ»»Ï?ÿ7ªBÕÐT­hÚ$Ærà­€f ÙˆªªóÕ—^î‰`É3q_oÿI#£¿ÐÓÓ3ÿ×?U¡0¼e>˽˜ åæ0‡*eÞ²µnpËS D_ÿŸ„ÇÏž9=6Ð߯—ûƒúJ®¾Ãr®ÄÀ~Ÿu$döo… fdä·.^¼xµ§§'͹ŠÊŠ10²ý< ž‘5–5–OHUUìXn#;ziµl㓉™­Ã׆Ï8ÑN¥Ò‡«Áæ¢B¶œ(PÂ&¥ª*‚à •p/IVô]èüùóéwO½™˜H¼zìØ«ÆØè(ªÃ5P¹šœ#Â*d•ÈÆcP5 ååËì"%­öët$Öܦ0~ª³³“7Ô7Ðäd©tʪáíÈշ®‚¦iBÀ´-¦˜¿{ó©”}³ÿ×:aB ‰`°©T§OŒ¿×¯YµÎïèÓ…ùÌ[§ÞšºpÁ…ªà³”eShÎ…4MÅúš ðz}и •«à\…¦ZJ„«Âðûðùüðùýøðûðû0 ‰ÄäjªÑ¥Zoÿ¥æŽæÆ¡¡?~5i\ᘞ™²ˆ€A‘ƒ&Žw3ÌÙNA’ÈÚÛ`}7‚µÙ“í:Vºˆ}R2r¶¦¦¦ /XvæK7>ÝÕuÐÆDb¦0­£¢P¹Šp¨¿zå—PÈøJoïÙëk~1Jôqwpp0ifÄΑ‘‘7º»e’É$ª×Õ€sÆXÎ¥¤t2\Y{yZJ€U~ô¾Ó÷“dræçÇ»ÿ¹v 5ëÖCÓ´…ÝÙž+IškzÙý m}½ý'uÃÜÕóûž»—>¹$ª«×ÁWæË92ðx°7-""FD ñþ¾þ¿¤æ2O Œ}pî¬QYB0Xž;YÍÏÏK{>­õð¿¬,DÙÂÁÈåš—=G·CÈ÷ÇÆîlîÜÛ™«§¯\¹â=ñK"ÊöW@È{dW6`Ÿ°ïFÈIèòåËéáááÝ4_{ýõßíxé¥}LMMùì¹® fÚä€YÈ'/Q Ó˜K¿”8Èàû»ž?Tª<¤ë:<óA}&“Ñmà¦pǸév/¥9+¾R+$çFpþÃÞ~zÛÖ[Õáê­™LÆ @»È"Æ0"2d"q‚âö$î˜/A†!H.+»”Ë3Ùp:–t\æ6æ4Q°êÒq5¹C¾œqR "Z*7»0]\Çày1àB¶ðYKù¾›"†”rq-äˆîAëæïn)Õ€Ûb¸-ŒÛU·‹¼Ä³Tšuä7¿v ØüJriN"n$œjˆb8W\:¶N·ü_ŒH¡?»Å€ ïµq¶ÿæ_w¦TtIEND®B`‚nixnote2-2.0.2/images/classic-theme/notebook-green.png000066400000000000000000000016601315604104400226740ustar00rootroot00000000000000‰PNG  IHDR D¤ŠÆÚPLTEPPPD›nO6€€€ÇÉËÐÑÒTžxKxb___zŽ̬˜Ð²}¨‘~¨’žÔ¸|¨Ë«‚Ê£{Çžÿÿÿ¨¨¨[\\yÆÉ£Sx‡Ì§„Ê¥lom¢¤¥ôú÷uµ“Rœv†Ë¦€É¢twvXZYóúör´‘Q›uòùõk±ŒPšt~È nÁ•ñùõb­…O™sd½ðùôY©~N˜rtÄ™Y¸…ïøó¦¡O¥wM—qp–O´~í÷òF¡pL•pkÀ’D¯vì÷ñõ;ŽëÓu†„ü*e- A´€µ@#`UÃ0±q±¬1LFŸ˜”œ’ü¿Ô„4!CQ:ddf°&Î"@¶$róróÉH²He…PT\TB®T&E ‰¡Œª\$G ¨¨„*ªê ‚q-ÔQÕ‹k446²™L©lil@ÐÚÖTm­T]ÝÐCÕÛ¥BÐ×?êA2µz¨¿Á°fF©Æ4ôºq˜ šÔiLMÏ€~–L¯Ÿ›žB`˜_€Eª¥yãò ¬R­-˜Ìë`Ù ³X6Í&[Ömءڵn!°í퀃=‚ãc°ŸÙ펣C§Î3pQ;O¸=pAuéq#ð^9ÀuMærÝ\yÜúîàžêÁw‹àñé^¨^ŸøßÞß?èÞüÿ?çó+XŸœß3<"’Ëã‹ÏãFq~y[ꛇ'ŠÕIEND®B`‚nixnote2-2.0.2/images/classic-theme/right_arrow.png000066400000000000000000000040111315604104400222760ustar00rootroot00000000000000‰PNG  IHDR00Wù‡ÐIDAThÞÕš_PÇÇ¿»ÒI`”(ԜԸn:3±3¸Æy鈳Hžxš´î´Ó‡¾ô¥íCgÚ§>õ¥Ng\\ùz±Mc;Ó€ÓiÜ„0ÓÚÉD×Å`d°rÐ$ÝŸýõA:q:°`â~³{{ºß~?÷ûíî#"T²éë}™ˆ>PBêõŠ:v(¬’r0ÀÆXœˆ*!õòFð ûs@Ï¡žG8ç#r0x(žzj7{å•cI’þ,?y˜8¶5oÃñïw×ÔÔüòH_ïoå` Òcm€Ë˜››EuU5Ž︧¡¡áçüœ ly(‚)LÌDf`˜^ýîkÞööíÏqÎÿ%_ú<p l$îÌ![ÄK/¾äùÚîÝ;9çÿ–ƒ®Ï+@6DDB€a~awîÌ¡çÐaéÀþŒ±19ØW‰Ý¥:å`  @wîå µ½ý…¬þìÝB `Œaqqº®cïÞ§]~¿ßwæì™a9xY ©JÅ8çoèbŒ ÆŠs—Ëeëã` `Œ£ºÚ›fŒU `ÄF 0$ ܼ9‰®Ç»Ø@ÿ€4xrpPÚ”úëõ”܉ƒ/ÊS‡{^hmmmu¼ÐëõÂãñ€eïr®¦§o"™\Âr7ˇÊåv£¥¥Éx'Oh‰DâDô%¤šðx%ÌÎÎ"ûÊý¬kÜn µµµp»Ý9q,ŸPŒ±pËç ÍÍ-€“'µù…ù!Äw”º´§IL`èÒé2™42™ 2Zš¦A×u躎Tj wïÞA<‡išÂÌN\"Ȧ¥Í0MLMß„–IcàèQO[[Û~Îùûr0ÐX €U"B,¶ˆD2‘[u …Z y *‹ÌÞÆ½h½½²g×®¯vç–ÙîÕŽ_±e4cii æ ñäËî~z‘È ¾ýüAé™}û¬eö™Xûcv,C:•Ê #‘…1Íe±¦Yxl³{Ñ(nLÞÀž=_ç==‡·p·å` ¸iÈG"‡aè‚ #P"}–Í„ D"މëèìÜÁdùˆ[’¤?ÉÁÀO×°î·"B<ω&Û¼ T¬Ð(>Jabbõuuèïïwù|¾_éëý ¸6%`RV*­ÃtMÃÄõkpq7ú¤ºººÎù›r0àÛH§S0MTœ6ä`Eç ÃÄÿ]G:“F_°ÏS_ßð¬Ëå:U>#¢ç”ú§k6< ë:$·´2uŠJÛcíðûý8sö¬‰ÌDˆèY%¤N•»fS„0… æÎ9:;vÀãñ@}]Í,,,|$„x^ ©ÑûùÞ0Mœ¯\µÝn7º»vÂ0 œRNe’ÉäÛBˆ^%¤¦Wã· @e¿3%"˜fa¼^/žØù$>[ü CCCº®ë ¢*!U¬Ö¯€$Iðù|«õUPÒé4Lså –µÁø|>ìì~‘HÞ¼`!~¦„Ô_­uœ²)ﯯ㮮&;S!a¡²|“1ŽkãˆFJúõûEwW7> ‡éÝw/™DtT ©'×s£œæÞ8÷FÇzJ’¤õ÷xœÎ7Ô7 £££ŽŠ±±±Lng-cÜÀ4ÍCÚ­{‹å^ª¶·kt]%Q:…›·6cÛ¶ŒŒ áññE": „Ô«ëï „Ô€+ku&:koߎº/ÖáüùsÚ­™™"Ú¯„ÔéïPÉÂ9ÇŽÎÇQ]]×OŸÎD£ W„•z¯þ7ÀZã…Pþ¢¤“ÉäE!„¬„ÔLÅÆØáD€×ãÁWžÜ…x<Ž¡¿iš¦ýžˆ~¼–5~CrÇò÷¢ùö7öî©jim@hkkÇÔÔÎ_8oèºþóÓêÙߨb§Xñ@„UÓßDʰ¬Z^Æ ¢Ñ{d€p8LÃ#Ãf,ûÑß.\< ¦„p;€@Œ1a;¶ÌtâZíÊ·ÕÅí ©TÊ££ˆðø¸vûöì«ÿüÇ{ï—/P\ÜfŒ™VÛ%·ƒpW W0€kšî€OÂáØxøÚk]ýø¿÷_J´½¶[¾Ï‚!"bDÆwïÊA–ƒÉŸãœ¹ŸþæÞoMOÝúxzúÖ<ì/Â+E›eÄ–3Ã~l8 ®D?_­˜ûô—êÓ­*-w9+aöGNûgM[ì~ŠS¥”9Í•}n "Á³?×”‚*¿Ó\°/¯(ãP>÷Ë¥–ND(ñ‡m2»‹:N^-§(üíÌ ¢`ùtˆŠD`ïeÿÙ#c‰³ç´]t)ávñ¬Ld–Ò‚Õ§Üæ¶æÿVÉíÄNwÜnV YNXAßZwâÿì6V»EñIEND®B`‚nixnote2-2.0.2/images/classic-theme/stack-green.png000066400000000000000000000016701315604104400221620ustar00rootroot00000000000000‰PNG  IHDR D¤ŠÆÚPLTEPPPD›nO6N5€€€bbbÇÉËÐÑÒTžxKxb___F”lzŽ̬˜Ð²}¨‘~¨’žÔ¸|¨Ë«‚Ê£{Çžÿÿÿ¨¨¨[\\yÆÉ£Sx‡Ì§„Ê¥lom¢¤¥ôú÷uµ“Rœv†Ë¦€É¢twvXZYóúör´‘Q›uòùõk±ŒPšt~È nÁ•ñùõb­…O™sd½ðùôY©~N˜rtÄ™Y¸…ïøó¦¡O¥wM—qp–O´~í÷òF¡pL•pkÀ’D¯vì÷ñ"ÀÙù^r]Ÿàúæï¸îo® ððøôôÌ÷ø@€—W{½¼‰Çw{}|~ýÂé9˼uüëIEND®B`‚nixnote2-2.0.2/images/classic-theme/synchronize.png000066400000000000000000000023271315604104400223320ustar00rootroot00000000000000‰PNG  IHDR((&÷pægAMA† 1è–_ŽIDATHÇíÖ[lUðÿwÎÌ,ÝK/Ûv[–v…Ê [—ˆ…  i Ô(DÞ€ôƒÑxIÔ(Ø7ML„1D!DÊ-1•–‚РABi+[[)èv·Ý™9Ÿ½°ÝîŠñïiæÌ9¿ós¾Ì ð0þkÐ}ôqÁƒÇ-`"€ô–ή0fLÎÌ}=æ¥??‰+’¡ÎÆp?4Å‘  Gn_n=öå'¸41påºÁ9äBš6 €˜”¶èŵëMÛ~4ÜwV±ovãwÃ[ Ó`Ùe¯­ÿ¸rò£p*†­ ¤.‘$(¥,)ØM>WiuÙÜæ£@ɪƒå®o fÏ­{îå'eÛDiiÑØ­öX{Tp6i)ØrÈ;+Tñý…euË–äž8qrd¸–ê•m«®-‡C™ˆáz½Ñô×Õ†Îξùþå̵E ¸Upé[=®Úwǧ‚ÏV¿‚C)€€îc‘·ß=3ò¨!Òp¨ØS½±d{!$,2ìðTe’žä¥€¾uu!à “ˆ,tmßúæø >Û}vǚƪ]E b1T’É!F.˜€ð¦`¨6ƒÝi¹¡Ø×øú¦.<®¾GAbä–×”B(ŽnÉÈ(~ªÃ5Gcj/iÉÓ«ŠŸÈƒM‚bˆ¼s.´¢~ɼBXP@cØ®´`hž’4MÞ³û½3™½ùUÁ¢¼æ;l %fSaßåt ¡—åBÙÍ÷È-;[v¦¶ýAANÙCdû¦€¦9âÖÕ6L0‚£g3š¡‡õApB½mGºîÑIËIL²BOL¹Ýf¥.ùæõ¿yuSh=Ñ_Ûï4QñAÉ‹Ž(ùXÐöS ØÇ{;Ð1¡ujZi®ËåbX°Œñ‡2ñ(Öò40€ÜŒ¥¥›ÊØ`5tÇЄ/KžïèÍèUºÂ:”Âþ¥£; hç/Þã/'ÅÃõ%´èµ®ÅÁ¬¢µ^ Ì‚NëJÂòt1œ¢hÏ|Û–)?×Ê’ç³ÁRpvÓÝv‘Ô‡90•TüÏÎàçW6Ë ^°ü}?I†lÞ{$=8â‚A°-3€Ïìô\x׌G\PÂÄzÄjefP‘Å`vO]~zÁ«ðŽ{îv¾Ty¨|aˆ™±CvŸŽN<¶l€„R$P˜5©ÎûBççÑŽ8œðÍ/^]²Â/\Û,EäÀ¦±óIñû[=kPŠÉƒ™ŽþöD¿2‘cx=ç ¤RP$E<Þº¡·;3(¨8~+ZóÕßkeÞ*§PlYÈ$&tÀb© £?ÒºáÄñÔI>Egétµùë+ÀÅ}“µJÍÐK †9 C23” &¢ ûW\¼¬¦ßÇ€IoïEŽ`}È@8<û•¬•Yn-éË!À`˜én逭r§‡ñ?Å¿i¦²ËýIEND®B`‚nixnote2-2.0.2/images/classic-theme/windowIcon.png000066400000000000000000000103341315604104400220740ustar00rootroot00000000000000‰PNG  IHDRJJ“²U&£IDATxÚí›{t•Õ•À÷>ç{ÜûÝgnȽy†‚¨‘ â£>@Ql«±u¹Ö8VÛÕ®éL—³V§uÙµºfþ¨«­v\£uٱ˩¨)Ž#:øDQB‚`HÂ…„Ü<ïë»ßãœ=ÜBrI¸‘0K—ç¯äËyìßÙçì³÷>'HDðå-ìÿ[€¯ð¾Âû ïËX¾ x’Èd (ÊÔO¯¿¿ÿBž(î'½Ö{ñì[€ˆSƒ'IZNWZšî† LÓ¼`xJ›iM'÷õÝðÜ«ºñTvïI»+m4U5¼Ã\›aï'](18-?‚Æ©ÁË êÊb¯Å³²ýxÛõ‹ë¸È]60ïw¦N´šàá¢N¼8›šš***¢ÕåÿñŸ¿c^åsgÖÛ»¨¶ê¹gŸÄ3Ëk¯½öùIfΜF#‘H0ôûý†aÄš¢[?ëØ•u>êÈÄcŒqÎ'ì '´ù­Œˆó¦Ï­¿~éàüž§VÿS²­¹Ýkïþ1äÜÓSÅXggg4ý×…2‰²  œts2_GJ9{öìÆÎóysyÔt’˜É¹‰"!õïé}c‡›Jìä죨ºkù2ſtTOw’J¥–,Yr~ÙÀÃ!â‘1Ñ ‹žæÄ¶n’oèê6n*»H憎•UyåôŠÚµk×C=t~ñª\«F³KyÑ'mñ«HªI&ã‰fÜ·L޷Μ±ËþóŸïÙ³ç<âý(Ôñ±îïÍìŸz<Æu)`ê÷§÷Ü[Û·¦ï]ôûÎ0 W¯jlk=pÞø<˜vxÖ)^ÔIŒEd#‚”žEéN•‹°Ï]~‰ú·74õ4á@JÜðµ+]'W¨yÑkÌ«QtÃ"¼–SE8Yæ!øÆûŽkQaFED®¼Lw»Ûv˜¶3$Ä¡ÏúÿùûM¿|â£ü¯étúСCGŽÔu½ººº®®®¼¼\Q&–ASq©°‰ºó€']Øü.ª°¯»‚ó̯Ño\f´Ÿp[ZwxšyòãÅ?¸óï=~üøÓO?½yóËmmm®+ÃP(|饋֭[·nݺ’’’ñG´lÆ9hÅ ;8}zNhª/0‡›ók3==¯¼•íCÐ××gYÖYfˆ)ÅGÉ7›ÂAy± –æÃðÓßʾ”ðÛ%A§¡Ž‡x¼ÄŸQ½Œë¢N¦²}¶ÓÓ©©(Üãñttt´··@ÁHßqSH=Ó´œKÂs2x@Ïš)“>Ü¿~ÖÍd]Ã+,)[zbGáî~ì9i·ìmßgõž(MÕ¦r±?Z´h¡eYï¾ûžëºñ²9Bd4`çOÑŸïöõ·îÜùaooo&“Ù¸qcA4•€¨èc}2x®c2H˜fÛ¶ý~Þ½mý×ëêê„p5Ms…ƒ†apÎò ÙeË—ÕÕÍݱã}"øä“œ` bŒ“®°ñ[&Þ{c§t$""V¢(Š¢tuuhËëëë/nd UU”FÊÊÊü~cHDB×uƒÁP]ÝÜü(Däº ²tL‰å[¸¢“ ä£}ˆü¶ ‡ÃÛ·oÏ À¹R^Bär–뺦iæBf³f"ÑÓÑïîNÌ™3' Ï#Ž•Ê´$NA¼76Naª.26ÚŽrëëë.\ȹ …êëë}>cˆÈEÑ4•1Î* WUUUÆØòåËÖ­»%ù}¾¼gFæÈ¤hOE¼7Ö‡@$B ÐÎV³½½û|¾åË—Þ|󚪪JMÓcº®«ªš¿Ñ4-UTTÔÔ̼hæE7ÞxcUUçÌç3cˆgæ3HJ´§"8Oˆc$¤>ê{^ÏRÊæææþþÞ²²i·Þºnîܹù0BDÆFndŒy<žh¬léÒ+®¼r…Ïï3 ¯Ç“ïù 2Nl*r-c§p,ÆÏš®رc‡išõõ šš®¥@Æ@S¦Àç,€A ä ÖÜ»wï®]»¹¢¬Zµ²²²2¯,"p]wÔL!B^“ˆ¨(¼ºº‘år9Æ16Ò.Z 6w cµ§¨é"çâ—¾¾¾Í›7ÇãñÒÒÈâÅ‹5íÔþ$)%Ñxêp8d^RÑHí¹H‚(ÚpNJ{LQH"bIß~ûí—_~¢ÑXEEÅÈ}&‡„Î÷9º!"êºGÓ4D&„®9Ô\Õ¥”lJ,g!`ùÆþiÇŽ'½^oYÙ4ŸÏ…qj¡$̧Ò…]/šF“ g'£=×Éq.%gÉÍÖÄÜ žbXXE#öÛ©þˆ¤t3é¤Bá<ýŒgŒ“2¦¥ƒ ˆLZ£¾«Ö7yþý=~Ë à§;?xßqìa€!¶aÎ3ú“nÖ>ùjîä&i÷ær–eÙœóÒH ¼LžP†Hº:¡h£ËdîS L`C–Sa0@S ¶+øÁZqÉT•Ã[^|$“ÍÞtÓM¡PF¸ˆD€ÃºÍs’­¹£¿4Ò|JVH ¹\nV955ÐmÅÖ89›ÄÃ$ñ¸ê‘n*ïÙ3„¦z¼e‹Y4Ìt·YõcxõåÐvrïãþëÑÖ¶oç®êêj]×ñÔŠÍæŒ~H&™™+H¯RÂ̘¼}…½j û`7k I’ºr 2e´Ç€é¦W‡«”õW)>2Š*CòhxýR|o_ëo}¬³³óþî_°`~A?“1»»þ¬ÒèŽ+±®áâZXÙˆš†³*€30¼Ô?ˆfñï„&u}),TIˆ€3à*êzÞÓ@@@šÅÛ¯f͇ÿøÜ šîùÙÏ~‡Gö3¼D)g:,+#\r1«¯Î!ÁP˜!âm+ùÁ6bŒ Š£7¹;‹qÈç#l¥ë ù C†5†«ø­«™‚VWWWÁ'vˆ`Y¹>éïÐ4œVƪ«Ye% QáÈ96.P¼K•9@”Ÿ‚h½@!`#œ2!‘Äqi0 dÀ7¯Ó£3V,¿á¾²²²QÝH)»ºº^|áÅw^Ùø÷W'çºFšWDÐ5\±H±R@êú…ÁcšY†ø#¥Ìf³ûö5?÷Üó[ÿò—*ã$g|Hýˆ§ì*¸‚r92-*Šâï&ƒ§êš ¹1 æÍ@MÚyCbJà$vÿù™_økÖέ[`ÞL&süøñÝ»÷lßþæÁƒ-rös¯øÆ¬†[ÌtWû'G÷¿ÓöénË'.»bõ’k¾«œQ0Á^[[;½*öayÉÖçEVêdŠ>9Fm Øu41˜=˜½¡äÚe –Sf9ÉtÆ8zzP"ÇqTuÉËü<%Ò4]+[— ë=ZùY{g(’[Jzw÷þhi¨¦ºDW°g ©«Šåœ¦_up.^‹¢(£ÞL,QÓšõýó?Â5 Ã4ÍX,¦( Nª½ÿ׃=تpåPû Ûua8øÈ"?a gŒ=¾ó§—£ö¿Å»ðç2›#Óø@Â=Þ²k×ÛÛþôúûE÷6 –¸k{r€OÞù)Œt^ßs¤1~¬²zú”ã}kÚZ_ØFƒ†‘)cÞ%¥eE¿±Ÿø¡ÿØbíO %˜¡)ó#†°¿¯/gYÑhô\þwáóâ}ÊäܾÂû ïKW¾äxÿšîȧŒ¥qIEND®B`‚nixnote2-2.0.2/images/collapsed.png000066400000000000000000000002051315604104400171750ustar00rootroot00000000000000‰PNG  IHDR:˜ ½gAMA† 1è–_tRNSÿ[‘"µ.IDATÓcøÈˆB°³CÐÐÐ@^^^Tllhf0SÁ¥x¯¾ðõ•D0ÃIEND®B`‚nixnote2-2.0.2/images/copy.png000066400000000000000000000373421315604104400162150ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aË>©IDATxÚí½y$×yøû^fÖ]}ß×Ü÷…ƒ@ IóDJ"M‹¢HQ¶iÅj%Ùr(‡d…#äÝ•-­² Ó!‰Ë¥E‹§ÄC x\ƒÁœÝ=3}VuWõYwUæ{ûÇ—/3«ºª§ç1䋨®®ªÌªÌ÷ûîã=à'ã'ã'ãÇwÐ}oÔxÇg®tÎI€pœQVªåì_þã_>üm6€r÷äø±!€·}úJÊ9¢G‰ð=NDƒD<DÞÃ^[xõ_ýàóü"€€2|B¸ç†ùF_ÀO~jÒ0¬”óN"zP’0öñ=‘:á‚ïÜõm½/¬gÎ_° &‚{nÜSðÄ''{œGzP§ÂLh}.'ßÓ‚Pn…“Û;Ž?¶ž9_«‚‰{P ¼© àñOL$•rN¢§ Äý€zˆÈèòÁ­çr"‚R€R Da4~®Ï!‘èÚqÀ%«rªø ¼±ã±_œˆAÖv0Þà @=*„1"c#ˆüZ)@*À¶L ˆ…âQ¶¬8Â!F)ŽõôèÐ ¶ä=·{üHÀ#·”S&Ã|X€žÔã$¬íDˆB‹sàb€ ¥‚#©âQI‡v…qòp £ý&FBÈ$ÎN”ðågó¸<]E8TéT @Ô}„pÌ?Rpêc—ˆú œãz Þ"ŒÐ!"J@‹sø iH¤¤d.E€¶„ÃîÛÃÑÝaì #u¿•Œ õ&qòp ÿú¿,`:m#dQÐ w~B âÆîæÍ1Þp8ùÑËPÎA"zPop’Èè$‚\î½ @°ÛáÏ»Ú ÷Y8¼;‚c{#8¼;ŒŽ¤C4gZ©ýQGÒÀ‡ßÑŽ?øïYD¾A§ÀãžwüùK H{ ãq@ÔÓDƬ:.@àp‡Åz[œ0Ôeáèž(v…ððá(ú»-„¬æ)”jÀZX+…Ðvvóç{·…Й4Pµ á‚úô{|à.À¹dSpN Ðý€z k;±:· ¾¦À€;ŽBÍQˆEz;MØÆÁaÙÁž±0b‘ÖR¹b3àëe`µä*LHzTm`¤™@,JHƲ«ÎÏá^w„N|øb/”|ˆˆNêa€d´¡ Øšë¥TP’P³B¡-)°w,ŒÃ{¢Ø;Âѽt··¾Üšr.Øë¾j31 L‚ÿWŠ_ë¡ä†h`PÜÓã¶À}?s± Ê9LDp? !2FÑD{îÇlG‚èh3ÑÕfâ‘cQìÝÆÑ½ öZ0æ@8 (TðU—ÓK5ærr7 ø*¨3"…ÖîîÐï }Àɸ)8ö¡ ¥j{™+¨ûõ(‘±‹¡:.î»G»gŽB[ÒDg›#»Ã8º7Šc{£°‹6ë @± ¬”ø‘/³Xwÿ†æpËw꽤NÀà‡´gáœ?cKpä F œ·Ñ @=LÂ:PB´àrÍáŽ["èJšØ¿#‚‡ŽD±Gû¶EŒo®Ç×Ë@¶à‹õšÃß­7Û¨êßð¾û;‰¡#i`9'ëŽýq- àðûÏw+8Gô Nà0«‹—ÐY´ —Kxî™e:Û†ûB¸oÇ÷Eqhw½&‹ß&£æ0—/äÙZ_«°×n›)€±‘£7pyàÍC«wDÃɸ€òîçLJêàà{_{˜H¼„Ýn\}”@VOïRŽÍ K¥Ð‘è ãØ¾(Žïàø(ú»,/ÊÖ8lÉz;SV‹¬ÏK5–pS¸úyŽnõŒMÞo (ÅD­ïOü¸ÀÁ÷}‚Èø"€Î–\‚ã°·³÷›8°3‚#{øq`g¤¥{&P®±_̳›–¯Ža÷Äz3À±uÎ6ÿ\ŽÓ#èþqHÝs‰ŸfÃ#"úe:ãë @¥ 8¶‚ºÚLìÛÁVúÑ}QÜ ŠdÜhù¥¯™<ͳ.·%ƒëž-c œ=Ð}Vjc\W*U'áÌPô ’Þ$€“ z®W’àH…‡ÅpxW»Ç¸oÃý­Ý³ªÃîY¶À¢}¥Ä\ôÇ-Ѹ-ˆô­H 5ñ4~#½Î_«yŸwöDàô7¨;5‚0à¹@”"ØRâ3îÁg>ÜËl¡Ç­.Å^¨ºþ8\×Ìåð¦ÜL.7ºÏ›o7<Õ#×ø™-Ùè´\áÕÓiÔŸË%BÂ#{=DÇ‹ÌðŸú™n|özëNPp0e€…c‘h¢7ì@nˆ·ÿÊ•(g7ˆÔ£Âè†kƒ›FÂyÛ'_ü“ï~î­¿o× Epqêm'ßÕñt@¤êŠ)$Øe¢žS7D×'} À{ €jÜfÀ‹p7H‰†ïSð퀥à×#(8Ò±+€_ tÓàÉOMvB9Û@âÞ¡tc˜!ï7½k#ÁˆÄ{>{äÿñÊ+_û—_—¦îlPA  Äjr#77{½Ç·ø hü pySB×û]AË$X¦n(œÇÛbkÙI¾'°¥ñÄ'' ©j{‰Ä1"< ¨GH˜;ÄtZ›þÿüÃù¢¶ž½!ažWÒ྄Â$=Yäƒz$ì÷ƒ[ÔF±]gÔm¢Ã›‰ü¹‘xD+ÃuAÇ7ë§±·Ã@O‡µ¼„)"‹$»¶µaòûê¥@SÞúK;”r‰ÇuLó€Ú<¯"8¢5ð€¼NŽ…c=»Ëùt@¬ ªw„t\_X]²$ÄV~Ð’×¢» 8º𠟉 6†‚›IP x$¥ °¼¦Pª( ö Ïç×ß[ ôú(4A / %€Çoùʼn^¥œý‚è1Eê~@½•„ÙE€ðî¿Ã•âßt¤tÓÏ|LÈÂ!ÚpN(ÚÞM–óé9 ÖÀM*·M 4Øî›&avÑ®›r‹%6HÕàÀoõM¸[4·™XתGn²^É)Ì/*Ì/J,.+dVJàÔQw2aÛAýa¬xò $€î½Ýš:‡ï}üÿ±¬Ä£Šð N’0v` ±:•H\a;Šë B<&°w{û·‡°k8Œp˜°žwðƒ3Eœ¿Zõª’5Â2„aÅ$Áåé·=<ð 1MCauÝÞp`]4¯W7yÖÆàõ¢{ú:Ðx~€H´X7G!‹%…TVanQaa‰A/–9—#ÁÌyó‹õ„ò›Fí ®;\Î)X!þЈŒvýµãÝ;ÞõöhbxÄ0#û@"YïÚRÄ㣂ípi[o§ý;"8²;‚=ÛB8¼+‚pCñêžhÃ~_ûA±ˆá]§#”´Ma÷ab5tKÀzŸ<‚±~­44ÿA½Þøy+¾#.(Ö PRX_®Î9Hgʼn\u<»P|¼Tä½×ÓA8±_x߯)JÛzÔªkkU,-JKœÈcÇGŽ=þ€að A‚&âŠeÇíG°ž£®6;†-ßǹ“;ÂèëÚœqCáSìÄù+¤–êûP¼íáè&F`Eo®Xü_ÛÑüsláxïwÜÈ¢0Øë(U€õ¼Âü‚ÂTZ"»¢°¼Î˜¦+ ]c¨+|€=£ƒ½„nB[Œ ­}r9‰×f«xùBgÇËxõrù¼ãlaC¯¯S*·BJ8ÐÕ.0Ønáƒ1ÙÆþmáM“eŽ[¢¾R䊧m]œKÆîÛÁì³yPÈ%8ßMñ4ß#€ø~þßÿLÇšr4Z†>®N>"Àå‚+€r…ô’Âô¼DfEaiM¡Re±näé~¿ˆÐ– õ¶ õºÚظ ™þï¬çÒé*^Ÿ(ã•ó%\™©`:UE±ÌXDÀ´(`cpFÀöj €x”0ÐkbÏXŠaÿŽ0¶…ZÖ@(”lΟd \ñT¨º¥r’çu‡ÛŸ0ÒgBAˆ{•ôæéŽ€_O® Ю™ð©Š °G-t|ðµo¸nº J +kÀ|FbnAaqY¢TáÏ4áf( bm Baûa¤O §ƒ!ËÿR˜[¨aj®Šç^Ícrª‚+³ä R²ô[ɘð]_rk%`Û–Eèë21:`á>·Òiß¶0Ú­k Ê5 èV:å+ ¸.Qׄ€M\ή‡e‰:—QÜ…²¤  ÁX€ô*e°«Wz5àÎWkÃ|±î¹g`Às«@*£0“’ȬJä Œ¢á»¡Òå‚dŒÐÓŒôØ6Hèë"Ä ¸éjGY2K6R U<ÿZ—®”qe¦ŠåU5[Â4B!B,"ü<† H Ôª ¶ä¶ñžC½&Žîàø¾(·ËlY&VuX¬¯–Y´¯—9tŽ@‰ºeÔKIíQ5V'“®•rÙ]!%/“0ï'¦©pe¾ŠRE"ˆº“ì©k%Ö5Y†od•+ìže–æ$ÒY…Õ‹U¥ø8-y¤ª¶B€Î6B4 Ë Ñ0¡«0ÔKî'ôv ô´“§¥Ô¾»¾ž(ËVVmüþÏc>]A ÇÄpòh {¶…1Ôkµ¼¹ªÃ-f™‚+ÖË}Ó¿[×jÖ³ØX-EÃý4‹€n–Ù`êtµkËaP8Ú~G×' ©Õœ¯€RYáÚ| ÷ˆ‚À¥S¹²Ð7¢02@Ø&¸7»ýå´E^³("\£j6]«O®Á±B!¯~¤ïykÆB-oÆ‘Üx²Tpݳ s½n¯+Q×À´ðj‚ÆîuCÚ- ¾ë…¾µ¡«Go»DT`iª0­°Õ·í¡¾ù‰Ô&Ãm/Nõ@ÊÊ”I1/¥”BÕ¨4§po5;x\3འS@¡Ìï‰@ƒf¥¦ð;¿2€¿«£é ä\ÀÝ®£\…C¶–¦ÛjÖȹhü†þ„¸¡4žx_WW±¨àº €ƒø[.MÛ”„0"Räæ „”«>„M_  Õµ¾ÕÿúXA@µÆv„¡CÒ(–%Þöp¢üŠÍÍ'éunFÉUܨê;ˆƒA˜:ƒïm¡7ü†ã®sŽ.Mצ€rßÐõl'HB‹¢”ÛJÕââë¡H[ˆì· Ì.Ö¼ ÑPØ„ÚõM_x—á9†`p¦j…§¡ƒ.æ{o÷®!½œže±®A4‚€l 2m ÀÍΩô:4ÿN cÐ àú凃A†¥9ÿΦƒ¥S.AùÉ×§wÅ“%üø|PœÞðäG Á!â¥5…ÙE…‰…Ô’bQ°>ïí4±k4 €Eå™°^ÂV}m–A¾Ào¢ò6“ÁykìR‡cWÜŪtôíéF½þ¿­Dà@­¼œƒrÆIˆD\%;®¡R•ˆ„WMÅ\ð†ÜIÐ]C†j6°–SȬ—§¤² ™.Ù2 ší—S)XG…¯«Š‚úûF€ê÷à5ß,ðMu~“ïnz q8YJV¹‚€öx}FÐ4Cº-íŽô'zðÂßþ³ê{þÕøšç ¡ZcC0võ«ÁV3î×ÿ묟°VVÖƧ%f²«¹’{ÓäK¯êF‹#É i+Þ+Oom”Nåz`µâð-ß( í¥ÆßSªÞÉoìQT²¦PߤzglPʹ,= 0€•šÄ|ÆA[œëÔB¿Àº›ërÓòE`qYa>#qu^aÞÍüIÉ—nº ÂÕñJI^«¯”S Xy!b=¼æj¹ÐÍ›À ßê4û^÷á2Dã¼5ÂÙ•t—ªq¥@[÷ö.+Õª…;ëP™Öb°‹é]gPôoÎ2€TVáôys‹~É–NõêÂLŽ.ñ(0ÜIé#ìèNç§õUþá:ß;0ˆTnP‡ßMàui›á†“sE ÒõŠóÀj@‡³:ÛÌ: Ç# `¸í†`½Õq80·hãÄ>þá¢ÜÎF¯Î¦%a8ÚkëM®f®jc𶹂Íú–¥tªˆâîÄ ”«,öoã± _6Þ2ýš÷\ ˜]T˜Ë(ŒÏrBhÙ¹šÀt™™gêû†[mÔjÀÙK3i‰µœB® ¼Ø‚Xë:òÖž t¶ÛF:’„DÔGÄ Þ ¸^»–A‚Ö|$€Î„HÈ—¦²ú·Ý70}ñ»·}€¦ëŽ]øQ§$wÁÔbEa|¶ê€I@•šß´!€ìªÂµ´Âµ”ÄÕ[Õ•š/nƒ¹½ht2$£ÀDÀ¾‚UƒÁª¤ †-à¹Wmœ~]zÄ畨»…©‰Й$®_do‹û Hh7®©‹ØäÿfÀ7·¶äõê©ÁÊͼç@R bIGG;ûvvcãB·<š€šŸ|æµ='~n„9ÈF˜Ëú† i¢!ª§ßOeþìokXÉù½¦ÁRÖ¾êée+Pªð^•ª‰s,¬åjnD`b¶æ‰iŠn,O(WýI”’{ :“\¥<âF&;’ä-4¡Å¿'Éšy-þÞs3"Ю%mŠì*3Áù«ùðSè䀈«ƒuí7y PµýL:{·÷ÊH§¦ÕÀmq›J€ç¾ô›«»}èE2Í÷qÞTÊj_\û¶úæMƒãÝKë̕ڽ± »0ÒKØ9DØæ’Ï_¸4í.š¤–ÅÓÍÕÁÊ[ÌAfa`é§ŽqÒq€±AÂH? »“èIh¥—›y7×^»–fÀ;ZÉ),­ã3×ÒKk1Ø ‘ ø¥÷šœî$…´ Œ† í µ¢ôì¡®þýñ¶žDn%ð-äÛI¤c—_°"ñ÷Ø`ZÍK¤–llàÄ¥!Äñë½c„Ã;Kë }„íC; ƒÝ„î$y”…¬äôú\ï ê'„ á‹V$âË•ެ'­Óß÷„éVJ÷6qÑ‚ƒ·¼—pß˲niÛ¥i…¥UN‰+7,®¥—N˜iIæ­F¸f/X5Ôe`zÑñ²‚±dw[¼} ™[IEÁjà¶„„[€ªUÖž‹&»% B¡¢piºæ€)ü®Žä>þ_~Ÿ…JM¡=Îù x¹æOªž­”TˆF ´·™È¬TÜ„ÀZÞÁâ²C!¯´¢6¶^s—qh­¨ð­tzøàwc å*0¿Ì«˜\œâfØ•œoç‚sŽãFù$Û8}¼˜ÅcG…—A zAW°»Ýðk °"ÑðؾGFÒ×^9ë@뎘ÛAWÎ|ñÅcOþÚ¤0C{ôÄŒÏÕð´{€· cÃ$:’óÿa‹8ªó¨'–`Ü_O€!ÈíÉ×AÓ nG*ÁO5–§7Æ€­ßJ"¦rŽW,.+Ì,°q›YQ(”ý¨¢àrÛ]ƒx¨›0ØCØ5$°}€ÐÙNžq篯AÕ‚ƒ]"!r7Ú  î8>GóÛb´\¾êåoþaþÈcŸ~Á´B{ˆx°©´µ¼D{Bx“¤÷í«£ž@5|Üþ{‘ˆð8Í4ù’BvÕÁX¿å‰Òr0›ÖlÝÿ[4æô÷X¦/™Vs@fUavQâÊœÄâŠB®Èçh.[œÐ¥m½\û°m€°cH ¯“øqGò²5„ª¯cC]@ˆP®ùŒÒÕ¿£HD•’zKû;G¤]+|'Lí%prc½ q5UÃ}{¸TÛ zÿµQœ6^A@¾¬°^T^¨T m ÃM þÍõ¼Sw^pi•fÁë¯×¹}—ª]KI¤² SósZ9uŠB&»ŠZu%cÀp¯ÀØaÇ€À@7¯yøéàR­¥êÿ ‚ . )»u BwÿΡ®þKé‰8|;à– ÁÍ@­f&Ÿw ®Q›  \S¸4 á6Í€§Æ7Pó:ôZ—0¨n¡Ãò%ŸÊ"!^©c«ÀëI×%[¦áFÞ`qEa>ùý¹Œ»Y ^aºf–Îè…B8v½™.Boªt=ru£ý€ÆëÁÆ÷ô.ªa‹0Üc`9oC÷KF“ñѽ/¥'ÎÐî`·`nJ_ùóŸ™úä¸úœ‰?MàU¬Î]«¡\Uˆ„tk}‘c3à©É—×åþá§y{:,OçCP}‡RÐ@sÎÖßÔãnBIeÙZŸ]d=ž+ºíh.±Y¦»M½ËùC=„Ñ^öfFz ½„°å‹õjC«{cž¤djõžû· 5Ã=&Î\µ=CÈ»½}ï«ßý~ V·ä \oíYÛ®¬-M< bË)ç`r¾†CÛ9*è¹3[¾ÁP YîRq`Q™]UȬ²õ¯”ôR¶ù¢ éD°Áp@Ý+–kY‰¹E^drqEa-¯Ež{¶È«`v$Еäõ v FûY'c>àvƒXß`ÜÞ$ðz ÁþÑ`½#ûG­P4Q«–‚j PVz{ @fæ^ÿz¼½ÿß“0’Ú:7å€A\×Ö€sýkÚ¸ÎZ87%q%¥°^亃j#–%P­ò=™a*]ót£×  l°èMX]W¸<-1–XX–Ö$I^5QÈdÀ¥»K"ôwv lèi:a°ûæ8@±R_ÕØÓ øëC³ù ÖŒô˜HD ùrÀìÛ>Ð?vh`vâÅ+`5`âì€ë€úÞÿ͵ѽÏ>g™ñ§q«Ö…©*JÕ¢¡@#§jÎñZ´—«ÀԂĵ´ÂÄ7Ž,åêcû†H% „"Û}ËÓ× :F»\|Á4€åu…Ï}ÅFvUÂtWÕͦŽÃ-ì– ô¶»–ú@¡#É«˜èÐpÍ·lVOA š¿U)@ÂßU¡^…A" %ôuÈ¥];„H,=tòûg'^< V€2nR \wùñõå»TXúŸáhâ)ÍeÙ5‰‹ÓUßÍÆ`P o\h¾ô/^’X^çV3Ã]Å;dú¯›t$ Åœ@ÙM (W$Öó Ë8I×}¡Ä†]8DžÈz;¹ c÷WñèÌŸÜ‘ðfB½T¹aà^k©e ?Ø“Yåìhw;a¬ê¶®!øv€ `ç ñy»®:jçáÇöH¸0€"x;™ÛOœé ßúrÛ£û]à èµzN_ªâ¾ÝaC$m\òÆ àÜ5‰¿û¾Ã !+ ‚%OL"Ê7íq¦øDŒ`ʲ+e\"µ–WX\q06`yõµ†lšíƒ=„“‡f:ÛXïèjÚã|°¶Öƒþ¸&âFAÞŠH'W.àky µ$1µ pîšÄÒ3Q"Jøì‡Lìu¥áA^ÚÙo uáï¾ÑÛÇö™¾ôüX ¬ßIPÿøùßZÜÿÀÿÞ´Â'âU»&S5¤–l u›Þnˆ €õi{X/¦ú:.}cìB™¼“‡+-H‰˜éƒ8/`K……eÿþB&/Qg€)6*?ô„‰RE!#?+9 îzUM[^£·ÒÓßY(S)…ٌĹ«éeÎyÔ婦°EX+‹+À®¡¿©™i Ó@o!µ¢ W ‹DãÑ#§ÞxúÒ󯈃½*nB lu »°žúB4ÑùQAd€ÅŠÂéñ*Þ €Æý¶ ÷þÅML-(Œö2èšs%…³Wê;Žm Â+ýåLRÁt´W7_Ozuíx”ÜUAëij‰oAÌ7ž£SÜ:ÏQ©3‹ óY6j¯ÎKdV9ÍÍq ¿ûÙ–œþ…Ã;nÞFÁá­Ë`ö[˜]®"PyÛÃ.f¾Ä\ªGá¡j­9î唸îaÎ ôwr„Õ–UJpw ˜xîr‹g\É8¸íàŽý÷¿s×Å—¾1 –¹;Iª”ËVŠëé¿éˆî|HÇé³ëž¿XÁ;Npë– wý\ju‹¿âL$l 7°^dãÇ0Vó¥ ¯E¨—ju¶ôV×ï{bÝôUÛjHe%¦&çÜPqABIòŠPC¡fû žmÀXŸÀÎ!Âö~¡ ñPï°ÁmS€^*v S ·M ½*=c0‰E|û?}èâKßx¾1Xà Ænd"çò+ÿë‹<õÏӲ‹§.Uqò@É(_¾nkoÒÒ³¸(hO˜Hg« XÄJ©¬Ã¾!¨«ynx z0ˆT­WS 3i…ɔĵ”Âjžc:‡2 ¶\±A{`›Àh/°{D ¯ƒÐÓîÿî¼4Ø–Ùfb~¥VW4»mÿC£‰ŽžR~µ@ì ÜÜPuéÔ…gÊ÷½õ{±¶G´ßž+ñ’°;LïÚñoÀ× \&çÕF@¡R•He*B@„BIâ¾½Œôñï8²¡¥,ä†(Õ_ƒ>Æ4xó ½Á²¹« ß{ÍÁ×_pðÌ+^¾ì ½Ì¡sŽ»²eÛú Ç÷¼ãO=hàÉöñJçшëñ`ãJ Ôl^®5hß´Å&ÒÊ5x¡ëH,™ `eüÌw®€=¶n´¼XuôŒ^Üväôâ$BV%ŒZžxÓ©ÍfÀëeB!Ì,JTì†N#â-צæ+^§ã( ÷š8¼“cJqbèM€GàµiÀÛF†ˆ›R/N+<^âëÏ;øÎË/\p0½ÈÕÌ €)È\NùÞ!ð¶Þõ ·Ýoà¾]CÝìÂJÇ]÷G1ðÒ¾hÁñÔšQö–ó\ˆ¢÷I"ˆ';£ßÿÊŸŸv ôn¸¾üÊëß*}Ë?í‰&:NXd+̵ûG®£Q@³åöÔ*!­ R“0 ‚T„XTàÑ£QïüZ°Ø¤ !Ä€ëuªU`zAáôE‰ovðÍ%¾ÖÁĬÂZž%ŠeÔï–ÒöŒ<~Tàšxû ‡ëã}Šˆø<,í¦ÀÍ'Ú„QɨÀÅ”ÃF´+Ý]åÂÚìÔ¥ÓÓ`C°„P7º¡P½üòßýÅCO}êc ÷8ŒúòdFMì6½ W iõmö‚žŒDT ³ÍÄzÁvËÃæ²6rE‰dLø…©*ø3!‹ÝÀT–Aã3ì—¯ØO7]Éb¹z\ç"Q`Ga÷0aç@§Û䨣üG7oÔüV›‰ö<šÀýõ·ö xmÚñ›m èÔ»?ñô3_ú“XK‚-ï.z3&êêëß.{üc=±xç)"žÈš¤Wì5±|UÐx§Á·¤®¦JÕúBÉrM!WVòr…ï&Ø¥º]InU×]·ºOJsÈ.\•øÜ×l<{ÆÁK—%RKýãÒ3w·pÅËÔ õîÛ-ðÔƒÞù Ç8´õx$ÌÁqz9ùFÝÝJÔ_ï8=OýŽŸëѸXµìéxè‹öÇŽ8´[Âtû··ª‰ €JM@rkcü x}¢p( _Î_“xé’Ä×_pðÓÏçðq¾L/cý¼‡Òf„e„Hˆ0¹èW3 "ôìÞ>3ñêë™ù+:&pÝÀЭìFí\|é+K3—Ÿûƒ½ÇŸúïDÂÒT®áüŒÉ´ƒ¶Á2 ¥ªB¾¬e÷*Hv­~²ƒ·²R&âH[fÕÆµT Ü>EÃ]°)xš»|`Jr\+½lcƒ¸nÅe˜Mn¼é{TïÊœ#˜JK\M+\M)Ìf¸1¶fûFhÈÝŠÇv¸7²#I-#8ö L. L,H„ÝÝNc‰ö¶ŸùÕÿøÉúÆÁÆ`Å%€–Dp«mÆêµï~îøã‹·uÕ-Ý\PÉÿ—kì&JÉ·e’¿"¸ 86P«rÂDG‘jÕ|)3w>uíüw&.¾ô¥ Ý#÷š†apa*0ÒkaψåM”öE¶ãêqo…ÎXâÀ·pãêôx`ÕR"ÖãsY…W&$þñU‰¯>çà™3g&x©™rÕÏa8’» Â!`[¿ÀƒþÉ£ön}í‡ÁvÂdF¡êø}˜Éξîþ±Ú™ïÿÝe°KXÝŒnu?z@áþúßýþû?ýG÷Ň‚¡JÀ/âêvÄöbÚV°kÅêúòÌòRêrvòì7¯Í_9]˜ymY:vÅ EííGö@¨kd˜³cÀÙÉ*~êᘂDÓºÄͬéfŸ£èÁóƒ\nK`­ 0•R˜˜“˜˜çÊâ\1°ð„`¯Dï¸fnŒÝ1$°oT`¸‡7Ò²n‰d”pj·o_ð"‚€‡Ÿþ¹ŸŸù·¿ø§Ú#pkœ6…·J @õìþ¿¹‘]ÇëÔ»?õ_C‘ÄP]³5H§f¯¯,®-Î]ÌL]z9uö¹oÌffϯ–‹«E÷‚+`V°«¥B¹y­½› dÒ+6Vôwr…W‹ÐøF1¿ÂÐC4.Gg$&æ&ç%V8¢X³ý~A ¸”€E Ým£}Àþm¶÷󎨱ð-μ;ö dr gçÂnÓx(üô§ïß8vuí™ÿõ:<\D£ðV @Aékÿãw^PÊùõ‡žúÄ$Ú»w¹Pª°¾”ÏÌ/Î]yuáü _ŸJÏ\X]ÍÌæ\°Ë`qU[°ÁG¡°:û%ÚvüÝD\°ZP¸4SC'k0SÕ›,MoºâXRH-+\MñŠ&sY.%/V|À Ìé5›óÿmq`ŸÀÞ(õ´ ´ÅoàÍÆÛ ¤Ö¬• bã8–lïú'Ÿø·ÿ[zf<}é•ïj5°!Jx=[c«ƒÀéÈ®]GÞzøøã?ûþž¡ÝÇ¥S‹” «öäkÏÌOœ}vqqöÒX'•\Лžw?×ÇTï{òŸwŸ|÷oÿ½Šì&ð>BGw…ñÙ¶yPuü Ív\^©Ëkœœ˜S˜^à,`Á­Ì ®=¤¹>Fz¸œüà6néJRKÉr'Æës?¼¢ü®eWúæW³Sõ_~óÿÞW>÷<€e4‰nç% pÓb€a£zÁÅ º‡­ ŽY/w¶{Ž`}ò?\þ³H¼óD€”„hˆð[?׎>W èxüfÀן×^njAafQáü5.^Í•˜ tÈU¹M ÞÚv°‹[Þn'lèJnÔã׋„ßα°®ðµsÒ]©•ê ÙK¯>ûw¿÷+Oü>€—¼n¢Û¡ô.€Ë.ppl:ö6lä|.×ú>¸ÖSAƒÅ.å³_Ž&:?Á+‡ë%‰Ës5tŸb+à í¢‚ëç3\¤yqZ"½¢/0Àp]xZ­ñfÓ=Àh/Wòìã 1£ z\5ÿé»2®d¹Ñ2ùWýîiBGwÿ~cù¶ÝÇm%À×3Žû¼¿‹U‚Ö€×Ü‹pC1›†-UêÊs?ìèÙvÙ …÷ØÍ|e¢ŠGEê‚@Þ—¸œˆóù/]vp~JáZJ¡PV(–}Àuð¦æpp¥-ŒõFûv Œõ‘WúVwaM.önïH`1§0™Q˜È(Ͻæ{æŽ"ÀÒâL@?€0ƒæq‡@YœGýJAwäF*XÕwþú×—v{÷ß[áÞ½nP¹’²1“±1Ö禗­Ñà à«/:øÛï9^Õ®Ð} ±°cß9ÈœÞÕF‚;«zÇÝÞv€•’ÂÂp5+±ìnk eÏå¿~åٯ̂%±î'ô‚ ·›¼y‚ö-¯c£ï=¿šúŸñ¶ÞO“@HWÝž¾Tõ @Ôo¾D/M§w4·,ÎŽörN`×@o'y…ŸÞ4+ãiwx©xëúÔšÄrH¯+¬—x+{ÞC‰3š€»Éàï9HÀÜ• ©oñϯÀ]«¾ÄpçàN õÌ~ûô‡>û…WB‘ØI!lÎ^­â'"h3Qש}¢Þ{Ê@ÍfË}×0>ÔÝD߀L¿SÀWm µ¦°°¦É+¬y=¥à›W¨¸¥h– tp§z.¯7êjµr5==¾83yvqâµçæ/¾òÝÅ™‰³+ð£ª:ȶ= `L u 7›Pììü…¿Š·wœÈˆëö©ï½^Áñ–ç7Ž» |Õ29…ôšÄâšÄÂ:P¬*ØÒÝzÇpläúíA.'»jçÖ³¹™ËgR—_ûþܹ¾•š?³\«V4Ø:”®c,¹Àóê+†ïH(ønûìÿué/m}ÑɦrMá§¢xìoÕ5 ]çÎovBlÉkͯJÌ­H¤W|…¹\·Šé=˜“ë£u$Í”td!·RH]»°påüéù³Ï}cvöʹ•µ¥tõ¹“FÀuTU'ÕtàGÇ\n{6ð @5uåå?Ýsìé÷’0âp³„ß}½Š£;,´¹Ë­7kX½]À+* ©U…Åu‰é¬D®¬\kÝoã’ô؃-ÈåÕJ¡œžÏ\»pzþü‹ßž|ýùÌÒÂt̵ÁdYôœû:˜EÕ€o)æòf”{{ñ_û£Kÿ5ÙÑÿÍ=•šÂÉ}!|葨wàõJÓod*6°°ê`aMavYbaM¡j³µ® 7!¨.³ÁZwA·«åêrfvefüLêÂKß™?óìBzf|ͱkA=®Á ryÁ}Cé6üò¯:?ÿzãÍ(àÞ`yvü¹?;ðÀûÞ+\)^ž´qd»=Cþ„†“· ºí°µ~-#‘Y—˜[–ÈWtá®rÂÖúF‘ÞøÚ±kv~=›››<›š½r6sú[Ÿ¿šž_¯”òHm¸×<˜,Ó¡t='7<Þ¬p¥À¯ÿñåÿ–èèÿ0Ü<¸í §Þ÷V·:¤â½®eØp›_–X-±ñFpwþŠ]ž…Ž>9 U1¿RHM]HÏ]9·øò3_¼6wåõ•Üj¦QSâA.×)ñ`î$É»åÍ"€77ó}¿üŸï?ö–_ø²i…ºµŸ_s€ý>òX´®»Ù(UY‡Ïf%f–ØM+Uy#K½î¿h¬lòRËõ\^­Ë‹³ã™ôôÅ̹¾1}á¥o§×–RºD;ÈåÍj ‚†›æò›ÍÜÐ$¾™‡ÿ—øâïöïý ]‡HTl…]ý&Þ}}»QG‹ësKsËæ–%JUŽÆù›bù;–ËÚôkÍõÒ©ÙK‹SKó“g.Ÿùîì¹ÓߘËÎ_]WJ꬧æâ ÐA±Þh©ß”¿•ñf'`:ùÁ‘|æO¾‰%>hŽä†»Úc5‡Ë²³y‰JMçýÉ[²~ÏB÷È÷Ë•tdneqmîêÙTêêë™s§¿1{õ ÙZ¥2h©×•¶Á'ˆÆ¢—f5wmßìCˆ~ì_áƒûN<ý9áÊeOT+¿sW[é¦ÛM#šXç@}Us©°R˜¿v.•ºvnqüÌwç/½üít1¿¢[¯õ¸6Üýñ›©¸+ã^ €½™ö_ÿÏgþSÏЮø` á«~näòú×v­RËÎO.ÎL¼šºzþ© /}s~yaêzþ¸æðÆÒ6 øÕã·2î á±½'G>þÛóWñ¶ž6ruó׎]s ë™õ©‹/LO¿´pᥘ››<³ ¿zIn­¢nî™¶Ö$o6q÷Ê=õKGßùÑßýÓD{ïáfý €”åÂzizüÅéÙ‰W/¿ò­Ùéñ—–\\W,ìÍܳ­Ö2þÈ{‰®*ØqðÑ}Oÿüï|¶gpçÉDGÏ ]-×–ÒW2©©×/¾ø÷3¯=³PÈ-á‡N5àÍ*–›ùã?RzüV'í^®yë0`€!ð‚Š!0X5Ô[ëÍJÔ›%RÞ4býFÆ›5Üjh€×Ü×U÷ÿNpã à÷&4Óãbý®ùãoÔ¸×$€ÌñQðRª1øÄnÃ[o€ßÓ ǽJúÞ 0ðüVx§áñcøOÆOÆOÆO†?þQ¶nŸ›Ù<IEND®B`‚nixnote2-2.0.2/images/cut.png000066400000000000000000000045061315604104400160320ustar00rootroot00000000000000‰PNG  IHDR00Wù‡ IDAThÞÕšypUÕÇ?çÞ¼,/+„ %4€:Ô€µ´ÖZдuF§uªtqiáuê6ÓNm‹XœŽâ8ÚN]¨(:­'A[¥âÔb ìÄ $bð…@ö÷^ÂÛò¶{Ïé÷>! d}éô7s'û9ßïï÷ý-÷œ@í‰Uo~ d£]K)uÞGKøW7Õ­Öt}0 ÈI×>£öÌùlíÖúJ¥Ô"ûËb ?]ÒMcyÉÄ|4!Àò¾ø¿!ðÆö†JG†¾°¼tþôÉ4-‹ ¸­¸0g¶MK›ãÓG C×n,ÊÏA£ÓÍš­G\X9zQŒcN@×µ¹Î,tMŒ8¯½_ïRR¹B s| &„E`øßØ^ïB)w"˜ŒÕG.hc^F…&˜X`•}» ÙþUÓà2Må–F‚` ¯Èc¼%dy4 †ƒî£.îIEN4$=í­ €i?ãH@³I6ÄÕßÙsÌ…Ä]R䤼t>/öT¿‡Õ“ãJ@ kv ¡½»·Ñ¥”¾bvG›Zèó÷Ô×lzë(wš ^×b,ÞT{Ü¥À]Rèdîì2Ú»¼4{Nqp϶µ6ø0`Œ/‘"ÀE«ÐÖÇ]Håž\ädÞåeœ †Ùsà§Zšß©zëû€^ ¨q%Vò !Èâm?q)…~vga6×ÔÒÝÕQÿü¿[ ø3 "HC•JaJ…¤ü¢óª6¹¤TîÉ…¹TÌ.ÅÛ¢ª¦¿ßçq¯|òQÀô`%°l¿1€”C*¤¸ÿ{û» C¹‹ r˜wE}0UÛjñû|ž—Ÿ~lI[«ç$Ð ¤|¦-¦Óöü¹¨úà¸Ë0-Í_5« oow·Õâóù,ðJ?ŸÇ<ÍÍÍ|ÿ–›ÈÈÐ9ÜЈ0sú|}A¶î8€ßïõ¼²âñ%£ô|ÊÆ´ ý³¦¡RI“ÂÂ|rs8srÈÉΦ÷LˆÍÛ÷ãõõx^ynù˜‡1’PÅ]»¿‚&nB\ý£ë:osÅLž–VJŠril>‰TxÜÏ?¾¤ótˈÀXB‹ßŽº¢Hy4±P$Ð}lçšÃëïóæÜŸ~Pr¹ú¯…=ûÌ(Ÿ…!%Eή¹º‚÷«·ãóù<_[5bð#ŠÀ=[ŒÛ…ÐV˜†œ D‰cÄB1b¡hÐßr≨ùIfNñŸ…®ÏMšàæk³˜s©N†MM'¨=é¤åàÆ‡«_Ü´aÍ8᜗À=[ —Ðt7€i˜Ä1¢Á(±PŒx(N,#Òš®!4¦i€1AÏMóeXæÍ¸®¥[q¦?ƒXÐ{xÏ³ßø pˆŒÄÓ"ð…$¾g‹q{ |o×®Ï.¾sÝy7|Zóꯤ‘ +¥š@ÏÔÑ3t4]CÓT¤ßÛ°þØ¿ÝUçþÎ}î±eGÚEg(™€#gâ¼²¯/¾ÐãÒ= îݪŠPêU€pÏ©ªõwÏxK¯½‡ßXÚT4cáW5ÇÄÅRJÛã „Œœ®}aiç¡5cM‘ÿ‰}±xÐ÷×̼)ËS‡°Îâò™À!¬Ð!m¨6 Ò0~Ž…f"Öiƒ÷aé¶ð -§Ë4L”©@€Ðdäôþ•K;­ùÈþ½6À Ìdü=¥ÔgPµ gà°£0f6€@¼?±(ÑŸ ãȾ XãlÀJ:)•^& ‰i˜dätíÊ¥uk>ª,©ØÔîgn<ˆ´Å¥¢°lþÍXg Î@i˜)ðJ)¹%ߺƵmw¨Û³;ö¯nÝõûmXSç¨ä4 ±`ŒX0†Ðòò€˜½7,;^¤Ðß6f¡‘H„Û?\õÐ àT |êÉ*(™:á²ù?λäÊÍ—}{Å:¬sŸQEd °Uë g,X\^ùी¾à¡†J3iì0æ<#íhÛ¿ê·u«ë€”ÒŠÀ9 r&L#+ê§/xò@>£iH( ïÕôÌëŽYÓ®½Gé×îÅ4LdR’Œ†›ŽÿçþßDºë{€.¬ŠsAðÀg ã¡}­ =ý=õërKÊüÒo>=az^¢¿wð{è¨ „½mOe”U)ÎzLš’X }³§zÙ‹‘ž†¬ŠÔ$D¿J*’±(½ž{Újÿô@BŸ¦(™ ÙûŒhÄ8_ؤ½Q|˜k}Á”)X—Òv„LýL Ï•‰0‰P[³ýýõƒ´^À‰xCfî.™wß{/  âî½.¥ät3 y××ÙÎÒ9иP†lÍ.úy“¯~pâ¬\ dVܽ§X‘ì÷µmàl rnki¹èN™™ŒîÒùwæO­˜’U4mç´ë*% Ìd?É~oØÛ¸î-¬‘eÐCÜ YZ#ì8´QšFÍÃ9 …(0“Qb}Ÿ†ýÍ–Ä'»°zʈó-ݹڬ[^^è,¾j4“S“Ñ>bþ¦jÿ‰«Ã>Á:JL#µa½Rޱeaý¿D VÃ’X%ÕÕ[†Ôÿ—VC̶?*Ζis(à/Fà¿N‚¿Ã)þ,IEND®B`‚nixnote2-2.0.2/images/datetime.png000066400000000000000000000023511315604104400170270ustar00rootroot00000000000000‰PNG  IHDRàw=øsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÚ; M.2iIDATHÇÍ•_hÓWÇ?÷÷ûå—¹ÆÕB¤Æ¥¢¶Ö ©´£lÒ–º·öAAÐÉVe0˜"J©èÃ= ׉U+­Tì•B×iÍÜfŸd ‚}2©­ÚÚµëŸäwï݃š-k¦[Ÿv༜{ÎýÞïá~Ïa±Xìn,»»”s«X0õΦ£hu´ðÃÈÈÓøÛUºXþßÏZJm|Vu{ø°(V|«Zúw}`. aš WÕP}ïÐ-%Ê‘h©QRqoK=¯ÿx å(””Ìôõè7nE8RÂÌ'na¾b㮨ί?£‰Ê:¨ùä\™upo 05ÐÌJ^khÄ‘ˆlQN 4æ2s™ßÍo†ÀZ^‚ÊåPsY­ó –÷~…vÒ0†éS‚ Â21l¥¯*Ìen´6‘³-FÎBY¹§À£iœ¬ƒ0νÒÉß'X’ÍL’S/øEÃ{?fçÎ¥\Òý¦iòÓ… PJå})&„È×R¢µÎ'õöörãÆ æææ¨®®fÏž=¬X±‚Ë—/344D6›eóæÍD£QJJJ0 ùŒ}@ee囆aì=þ<§OŸ¦¬¬Œõë×sÿþ}ššš¨¨¨ §§‡‹/‡éëëËÇ;;;éïï§¹¹¥T!@mm­kvvö ­õ‡†a(++crr’x<ŽÖšÑÑQ¶oßÎÀÀ=¶mÊËË ƒ˜¦‰mÛùÖÌÌÌœB´Ö××sìØ1ÊËËó¬2™ mmm\»v'OžÉdhiiaÍš5„ÃaΜ9€ßï'ç/`TUUÕ !ZëêêèèèÀçó‘Ëåò.¥dÇŽÔÕÕ‹ÅX½z5 ¤R)†††hjj¢µµ•©©)®^½ºˆaÛö>Û¶iooGA<gbbÇqxüø1ǧ¶¶–¶¶6Ün7!Éd­5„B!Ö®]K2™, ðîÆ…×ë%—Ë 9rä™L†ööv:„eø|>6lØÀ;wˆÇã¬Zµ €¾¾>‰###Å-r¹\~¯×‹ã88ŽƒÇãaÿþý|½u+ŸºÝøNÂÕÝã8ø|>$ ‰DH$tww³nÝ:ZZZiÈr¹\cÓÓÓùÕ–––òþõ먕+ùMˆçâ`jj ¿ßÏÁƒÑZ‰DˆD"‹Dªµ.`ð]:f||¼ Ñëõ"ÄŸëbllŒPSSSðÊb>??ÖÚ°,Ë: ì:wîœ8pà¦iUöÙ³g±,‹ÉÉI:;;_6*$pâév¶mÛÖ|TYYÉîÝ»ñù|ùä‡ÒÕÕE*•"›Ív }É(R@˜~ÑhÔ5>>þ9°@ÇÃôô´N§ÓâYÑ—.—ë“+W®ü§[°“›››·˜¦¹WkýžÂŒß !N^ºté.ÿGûuãQY 5]­IEND®B`‚nixnote2-2.0.2/images/delete.png000066400000000000000000000433441315604104400165040ustar00rootroot00000000000000‰PNG  IHDRÕÕÀ@µƒF«IDATxÚí½KÉu6|Ήˆ¼Ô¥/${Hކ"g, Žý²î Ò€¡•¼ÔÞ+ÿ SÄöÞÙàq€Ï»ølË#Ûò¼ÒÈ–8£&‡lö¥*3.缋Š(F'³šMÉ®æäºº*+¯ñÄ9q® 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0à q÷î]:ësx¡Ïú,ð:øÝ»wù¬¯ëë<ëx[q÷î]ºwïìììPÓ4 m[df-"z4¡Öš´ÖBÐ!„åó(Š‚­µ”þ¾èñ•Râ½g€²,Ù{ÏÞ{žÍf‚ˆžˆü{ï½G¿øÅ/x€;wîð@įŽAR½$BM§Óâàà€?~¬¦ÓiÉÌ%3cL…ˆ…sÎ@Ù4MAD†ˆHk­¬µÿ‚RêÔ=„ Î9ñÞ ÌB.„ÐÔuíçóùÜ{ßzï}]×ÖÓˆHøä“O<س¾çƒ¤zÅHjÜýû÷«ñx\•DTŠÈ¦sn䜫1›ˆ8 !T0€ JÑ ’&„€J)AD9ͱEedæÀÌA)D¤UJÍEd¦”šÑçÜaQG0cæÃ²,çιù»ï¾ÛÄë$ÖKbT¯z4›››£ÍÍÍÑÁÁÁ”ˆ.†¶Ed[D¶C›Ì<€©ˆŒ˜¹ A)"‚ˆÈÏ#3cö^dñc/"žˆ¬Rꈈžh­”R_ŠÈcfÞ/Šbß{ÿp2™Ðææfø»¿û;{ïÞ=Ö7ðøÀ@ytt4.Ër“™/9ç.Àkí3ozï'!„)3׸¥ˆDIµ”ˆO• YþÌÞƒ,¾ ˆè±UJÍ´Ö[D´WE©µ.D¤PJAUUm$ÞüÎ;ô“Ÿü„òcx1¨³>· ï¿ÿ¾¾zõªFua‚ˆ“ªª¶à’1æ’Rj‡ˆ.ÀE"Ú‘-¥Ô'D4&¢UJ©J)UQ©”ªˆ¨^õRJÕˆxì3D¬´Ö¥RªÔZ—EQ­5ÕuÆ©ëÚWUUUù²,ÛÉdÒ4—.]r?þñý;wðÞ½{§R;Ç ©^¶··©m[FÚZ[2óHD¦Ì¼á½Ÿ0ó†ˆL`×V%"fVÕ?YJ%ÄÅR)¾_'}”>gf@D!" 3³RÊ3sÁÌJk ÀÐ â"ÚH@B(¦Óé0ɾ ¤zŸ~ý:¥T •snÄÌcçÜ8„0öÞ½÷u¡-"„ˆ˜Ô?"ï½(µï‰\˜þ !óBccæD0ffˆ,¬{kíHk=!”u]—mÛêÑh¤766èÃ?L&üA| ¤zŰÖÒÁÁ)¥h6›ZëZD*™Ñ8„0€Q¡fæ*„P%3,%U"Öq.GÚ6mŸ^À"BD¤D˜ÙÀ({Í´Ö"¥T1ŸÏi6›ÑÎÎÎY߯sT¯EQ0 3«ªª4yïkDÀHDFPG VˆˆBD‚LK¯œT}†Šô9A!ÿž€˜™¢©½!8cÌHD&"2€±µ¶.ŠÂ”ei”RÃ:ê+b Õ+Æ¥K—hŸæó¹!ç\’T#çÜ(„0!TÌ\"b‘|SDDÌŒD„DQ`- Ó‡L*3/ ÈÌɬž¬‚†™‹Bå½ÀgÞûÒSi­ˆÐt:â¿"R½b|ðÁþàà@ÿÏÿüOxòä "¢€*"ªD¤€‚ˆôÂŽ (JÔZ#€Rê2eF‹å±:&u ¢¥±"ª‚ic""RJi"* $¢ jQ fsswvvÂ;w†µÔWÀ@ª×ï½cH)ZëÂZ[@-"5Äè 0J)…ˆIBÀ‚4ZëS“ªK¬$­òõ.@ˆ¨±€Š™Çˆ8O&ø‚aæAJ½œ‹0¥çEp§ÀÕ„3žiõÎÎN¡”º ¿Û¶íïzï¿5ŸÏ¿å½¿j­ÝöÞoDõOÅõ.øµ QN¨$uVIªô7„°üUÀ¤†Hk‰èHkýX)õ¨ªª_k­nŒù/Düø?=:¼wï'‰µNaUçbfZuúdZÿò—¿$¨1£‹/¾gŒù6|è½ÿ¶m?pÎíxï7¬µ5h""D¤$¥RÌ_.¡º’ –ª]Bn¨ÈŒÀÌIbÉb3a `‹¢8TJíEñ¹ÖúEQü'ýÛÞÞÞìîî>º~ý:~ñÅ>»®3GzÞ›››éðíÛ·ùã?^›´•µ!Õ;wªô~ggŸ?–stš5ÉëÆªsèû¼d¯ûÜ:æõ¼jS’ZKÇq¾Ý›ZKå"¹š\ˆÎ9€8¹Æ›Â{?òÞOŒ1Xø¦Lta¼q¬ ©Ú¶-“ÞœT%fF­un6_æõ%ò¼Y2õ8‚ Ö>R=H¯sðžÆ·ÕMßï¤ç¿1äç‘«®Þû…ιdÔ"R `*NÊZë²ð¦°6¤²ÖD”YBX®A’Õ,7t‰t¤ê;~~Ž}«ûÛ„“ /ƒÓX»ŸõI¦³$UWj%É•%eb$Ù‘M‹dPñEQè¢(Š7zÒëD*RJsn™ºY§0­Oº¤êst¾)ô™½ûÈÓ7ˆ_÷ íÛ7ø6—¬ùd°ÂªùFλ{¾]BçI˜É5×WÊ{o˜¹""&oøð&±6¤rΡ1¼÷KbeyD¹%íDÿÎYá´*ÝóÖ'¯sÐö%5>ۜÕ}î{þé˜C:ÆW–!¥RØËÆÚ*Þ˜gbfV=v3»xÕêÓ‹bÕí3IŸõÐwOs-gyŽ }*uT “AË0³ÑZ«¯ýš*éÌ1*:­©òÂ+« õ=€³¸§†Xœ¤&®ÃùtÍúiGfN~6…ˆš™53½Mê]ÿD÷F楷òUŠu˜mûÎkݱ.÷­Ï œ“)i5¹éq¾‰Xgvã׊TùKR+©|Þût×–’+ý¿.XeU;OX7U°;¹zï—šLzŸK«ÓˆJ):«låµ!U×,ßÈü}î°ÌÒë0xÏz¾Mè“T‰@iLäˈþÍÌ*(±ZðÇÚª›ÇL¼9ÖmpÖì/‚u»',º&÷˜6ÄJ)Ž_oCE×LšÐuæ3ÑYú¨N‹u¤ç}klxšÐMç—̈b2¼q¬ ©Š¢XDŒ1ÝÚvÒ-Ýõ¼:ë‚u>·>¬Û$ÐY äÝè½Oµ Ek´Ò^)åbWÈP–å™\ÌÚj{{[Œ1`ŒIAk-©nE·p$d)óë,©¼<úB¥¼÷ÈÌh­…ªªÐ9‡DÄãñØ'㦮ëyY–GÌÜÆÈŠ7޵!Õ7¾ñ ¯”cŒädÒZK$•‘c…ˆ$³®×ô:à•!7—Gë0zï)Ô*k-@¨ªêh2™ì—e¹gŒ9¸xñâ3ŸIí¿µ!Õµk×"qØȘœ¬µæ´ÕZ³RŠ@²^J‹\çLÕð\,h×Ák­ÕÎ9íœÓ"âʲ|RÅZëÏcåÝ37gqÒëDªÿ‰Ö¯” ÀJ©´èd"rJ)¯”ò¸èœÎñ/D’ x;±ÌNŽñ}* ž-™ÙˆH‘ÇZë_+¥vEd¿(ŠGUUÍÏâ„׆T›››?ƒ§5ôœ1Æ‹k­½ÖÚÉ¢<•YD$„ ‹˜H5¨oòôÿÏ§Š¢(b)¸"ÝÙCÄ]øRDÚÂük¯þ)¥þD ©£º,Ê ;­uˆÅHüáá!´mK!°Ö’µ6UúYJªèç:F®îÿÖÌÜ­2Œ™`áËDD4Æ@]רµÆ¢(h<;": !ìyïçÎ9WUÕáÅ‹¿ÞuÿÞyçŸÆ E\…'¢ ±ÎÛl6“Ç÷ïßÏçóºišŠ™•sÎ ¢‰µ R ¾Pç‰\©‚3c¬”ÆÏ̾,K?›ÉdrxíÚµÙ¥K—æãñx¶··ç¬µ®i¸|ù²{üøñ×;¢bggç!ªo“É$ìïïÃþþ¾âgŸ}6þüóÏ«GC—Ú¶0óHD*\4,€åŒÆ’9[”R"ëæ|ð ²4˜ýOY<¨(¥ZfvD4+ËrïÂ… N)õx4=¾páÂÑÎÎŽ‡8†¦Ó©½zõê×›TZë/Òû²,ýo~óõÓŸþ´xüøqõùçŸoxï·Dä=fþFaFˆ8BD€Dõ@`aÄ€Øre Õš#I¦T6bS‚hB‡ÅÇÒ@+"GmÛþv>ŸËîîî—ÿú¯ÿ:ÿîw¿»_|ï{ß p Ö†T›››Ù¿üOÿôOõƒFÖÚqY–WDä["ò;Þûoxï/ŠHˆ.ºh¤Æ£.Ž©‚ƒ©}ý‘ÎXJ, !`  …E õœs›± èØý‡ø‡£ ?™LÜ÷¾÷=Ÿ¯Þ8Ö†TÍ,?üá¡išB)µQ–å|Ç{ÿsî]ïý¦,j•¸hžËfÙβ¤T{¼÷è½ðˆè±AĪ( oŒùRD¾Ç3­õìêÕ«‚ˆgÖð `:)&ܽ{—>ùäýþûï¿3n„Þ‘ßoÛöÿišæzÓ4;mÛŽEÄà¢Û:¦nîZë¤>“z?l}Ñ­™‘e£÷˜b9²0ÛVUõd<ÿj4ýZëÿ·mÛŸ—e¹_×õ“ù|~t–­J×IRÁÝ»wéÞ½{ôï|GmmmMB[ˆ¸B¸‚ˆ—¼÷[ÖÚ‰÷¾ !¨Øª[«àX¾Õ@¦óƒnÊ|Rû¼÷©ÞŸˆˆÒZSX”¥½@DïÑ;Óéô·ZkB8ºwïݽ{¾æîܹCW¯^-Ú¶­½÷ÞûͶm'ÖÚ1UˆhdÑ>‡²ÒeÏtiSkßtµ¡×}¼ÓTXz]×”W¤í+Lš™Û5DTk­§ãñx¢µÕu]„Ì;wCÅ·oߦÏ>ûŒ1…÷^1³™Íf…sNÕu­RŸ¤TX)ZëåëyÝÝO;(+ü‹ãe׉ž²|»ÙàqÂDc ”eI£ÑˆªªÒu]WZk½±±¡ðúõëtãÆ”ºðõ–TwîÜáŸýìgüóŸÿÚ¶ek-8çØ#u]K뺖¼s,ó¯ÒÚªK,€—Ÿa_5¹žw¯ûxoúzNƒ¾J´« •h­¡®k)ŠBʲ„¢(BQÀÌòÍo~Sîß¿ÿJ¯ñE±V¤ÊQ–%{ï-µDÔc\Q¾( Ž=Š0©IBeI¯¬«ÆW)|ù2…`^¦TÀIû|QR½è±¾*©º’jUíù”CÓRL¨ÕZÛ¢(¼ÖÚ½îî™§ÅZ‘ ù'?ù Q˜Ïç,"¶"b±ED§µöÆg5Ì uÒº*ãTçÒ—ÒÒ6+®çTŸ=oŸ/Kª—i„ðUIõ¢$ë#Uþ]^d6ºJØŒ1N)å¢ù¼€@D<›ÍÎÔœ°f¤ê „\Á+¥X¥”SJc ‡boç©r"FRõÕÃèâ¤2ÉÝjNÝýöý‰Ù­Þ7Ðúö’ºtšãtušãœfÂzž¤ìª~y«Ÿü=Äü¹˜gÑã¢Ñ[ëœ Ì쫪b€[·nñîî.œÖ’TmÛ¦FØœˆ8­µ%"§µöaÑ"¢5HºÝÞ{Ô†_Ž“Zß÷]¬*™všõÝIƒúEÖB'«ïüN[­j¡VnÕ¹u÷Ù×0!ßgVJA ¦ÅZˆøÔ¶ôèèèÌsëÖ’T™}̯ò)Ÿ B¬š#J)‰µà¤¯ca·îvz¿ «êžwU”îûîo»ÈËi°êx«ÎóEÔÛ®t}Þ5=oŸ/C¬UÈûbuž¡¤W|ö©C½¯”bc Ç1»»»gJ¬u&‘xïS¹©ÀÌ)X’™™b|®z˜«Õ'VÕ|Þ+ßO—Èù+WoVIž:á+É•¾É};Ýæm}×ÚíõÔ-ýõ¼ãtqÒýï»ÎU÷»o2LQê3‘E$0³gæÀÌ\U•´í™¤O=ƒµ%•sŽCU½åìDD @@’?#zÛWNÏSÿNZ¸w`Þ€¬Sn¹ÏUêgŸ¹8ßwwÑG¬î±2αÚ=Ö* ˜—Úî#o÷8Ýëêž'µ»û_5™Å¿Ý?ÕR9fföÞ³s޵>û!}ögpb {ïë+&"޳)hVRË”¾ü’Ç]© å/}Þ7pósI¿ËK©õI“$Ó*ëÀSµ)/‹Î¡X]‰•G2¬"b~Mùõœ$AOB®¯š,²¿Iõ[Í„E ÖZ3"еv-Ì鋞>k…;wîp]׬µNb>åG-n¦<½¹ð´öŸô­º8­å­opçƒ/í —çüÕ]ÓuÕ«\2tßçÛçÇÉìÝW÷º®ïxéšr¢ö#­Ì¯½£—óeѧŠvÔAè«""!‹G£|üñÇg:®×VRc¤iŽ*Ÿ'¢€„!ÍTðt»,Ü·ŽxßI®ö-4Ðcý|`Q3!n+Ùo1ßGôµ+`Òg\È—>ˤq.}Òá°{θør¹ÿtÞù1òíóA%~öõ’xØ LD˜Ÿs× “>;íý^õ»¸‰×}ÌPADœÖØD„1„í̱v¤BDþë¿þk.Š‚­µëxD "’Ì©ÌÌé&/‰•«#§ïbxCDJ~Œ*)IJi)d*—”©¥ HìG °”tÇ}ŸZ–"¥°£oF¢Onù]¼Ì:PRtCäÇ_î¿;ø{¢–EK;‘ Ëk§ÕÀ{‰¸¹1c•«'™ïã9.¯;:…ˆBc± ï=33[kñúõëC@mÖZ*Š"‘†¯” 1´?@4«‘dƒå˜ð´æî“¬}mRˆ +¥B*ö™ŠËÄÁ–:1³Š™«”-ï»Õ·Œjå²phzE•§{¾äœ£‚òÞ3S<˜ä×%oNÜH$6Æ­uPJq6Q-'¡˜KÌLÎ9Š×»<ï®Êö¼ûß}5äR½Oh\S[ck­¹ª*qΉµgP±~¤º{÷îR)ËRæó¹!xp°¸‘KB…– XX<\ÁÓê=è“R¹97.Œƒ1Æ•ei‰ÈcœÖZé=B‘@Š™uÛ¶†ˆ´sN#¢•z*À3¤‘”hɈ´ÖÎãbÜ£‹¤J¬Ji皈 k­ãœS°X+Sß:'WÓ²Ö3>ÆÐµEQØ8Q¤ë¦8Iè¸oåœ3ÌlˆH§Ìéþå÷ñeÔîüoG…ˆ®Yø£B,¬ê9²:„@©NÅYbíH°½½M‡‡‡<B”>:û¥÷imulêNDÈÍ˧5Pä¿ÏH•Æ¢”òeY¶eYÎ뺞UU57ÆÌcmBafBPÌlœsUÓ4uÛ¶"VÞ{DDêÖ³Kç–»¢äpeY6UUÍG£ÑQUUs\¤’;oï}Ù4ÍäèèhÔ4M«¶bT1'l¾~Ê¢|Qí¨ÍêQ}X×õQŒVhe%f&ï}i­-Cå|>¯`”¤UŸÅ²kl9-z4Œ¥ú'Ó4±y"ò° W°Ök-ŸQCúcX;Rݾ}›ùð𬵩 4;ç<¥ÈŠd €ä¢’g¤ÔIúzß÷] ••$GQóÑhôd<?žL&OÆãñ,¤(Fu¯ !”MÓL”RÛ"²áœƒ¨¨˜Yò™=÷_%é@DAkmëº>œL&{Æãñ#DtM"qq>Úßß¿$"cÚ9yï1ª™Kbe¿IV¾4H½1¦©êêÉæææƒÉdòeY– 3s4(ÐιÑ|>Ÿ6M3&¢Mk-Åñ£RÆ3/7'Ý÷î½_µ}BféMŒñ"âC\U•Ôu ƒúw&“ ;ç<3;DL³’’*=p†¬¥À3*Ã3ïWa…‘BâD`Ýj­ªªÚN§¿¹páÂýK—.}ÎÌ€ˆÌáááÈ{_ïíí]òÞ_³Ö†¶m"bâÌß™Ö ˆèµÖ1fo<ß¿téÒ/···cŒy&d mÛ)|жmhš†Ñ€•K݉¼ñ>:¥ÔaY–¦Óé/vvv>›N§™+CÍf³G]Þßß¿d­}×S(¥ê(¡ŸQc_Tì“ni-›Î¢ú—´\Õ†$±ÎzÌ&¬%©>|ÈãñŒ1ptt ÒºÌò³Tý23sR×^jiÕUÓÇq­D¤EÄ¥Ôo˲üÅæææ_»víWðÔ¼¯f³Y}pp0 !¼wttDT âÆé|»NÚtÌ4ˆ1 ✈)¥þwccãß¿ñoü¢,K uwoooº··g‰¨€I|•Qý[ÉÑÑ">FÿuåÊ•ÿ¸páÂ^l¨Æ°XŸ¡µv*"7¬µ×µÖ·dÈúŒÊœßË—AR»ã“û§jš\…3³´mË/óÜ_5Ö’TmÛ&«—€àœK ‚R*¤˜¯hrMjàò÷'Í–«¶ëû?~&ÌÌ!ß¶m3ŸÏ÷îÏf³ÿÖZÿŸl׸±±Qíïïo´mf³Ù޵ö²÷Þ¦Bè UJV¹‚xïƒsÎZkŽŽv÷÷÷?UJý—Öº«ÛHÓ4Óýýý óùü}ç\ë½I‚w²IEË®)«mšfÿ7ÞûÿÐZ?‰á>O "ãÃÃCiš¦°ÖÔ(Â{ƘéV¡ï¾w-€É‘Ìé©ý("zpÞû¾¶X;Rݹs‡ÿæoþRxR,QåÀ)¥œ÷>I«¥C0ûùÒÜp:ŸI߃¶ÖIÓ4ˆÜl6›?xðàhooïË;wî,è_ýÕ_½÷¬µ>´Ö¶mÛúÅ|RDý3µ¹dLõœs2›Í|¡}øðáüÁƒ¿ÿýïë·tïÞ=úÏÿüO±Ö¶ˆæó9GRB\W=Ï—T¿dqÎIÛ¶|xxè~õ«_Íõ«_íøá‡ïܹ³4«ß»w>þøcùòå#¥ÔÌZëÛ¶å4A¤}wC±žwßW­¥º“aR‹%–(CD/"iY¢ñBêºæÉdÂׯ_ç›7o~ª·nÝâ_ÿú×òå—_J!¿y>J©¤C/}*ùÀéÆÝ½¨nŸþv_Þ{ÒZë¶m 3›'OžèýèGÅŸüÉŸÌÒïðƒÈ·¿ýmµ½½­‰HyïUô#õ†åÇJ’Å{Î9rÎ)fÖMÓèüǤ?û³?c€§n‡O>ùD®]»V^¾|¹$"BX«ï8Ù±0;:ç(šþͯýký£ýH}üñÇ.•÷úó?ÿ󂈊ªªLUUëñQ!•[uœSÝ÷U¿Ooñi“l†ÅÚÖǬ_Ùªà½GcÌY]XCR!"òÉ'`­ef–²,Å{"¹,YYäÐ^˜8YÿÒ>^ÆG’£çáââÔˆH@Q–e½³³3ºvíÚ±©ùöíÛ%ŒB¨•R:7=÷'€iÐâ›VJUÓétóÚµkÏŒ˜?þã?ÖιºªªiÓ4U|žËˆŠ®”Ê¥bcX!¢&"S–åø›ßüæHNÝ%F£‘¾~ýúfY–Ƙ‘ˆ”Ñ’œÝÏ\ËW¹÷ùóKÎß̤¢kÁi­]ôSùd­ÞÝÝå>úèÌ$ÕÚÔܼyÓïïï‡htðÑÊ“f§­?Ü1V¬Œú~tgúBŠ*ÐJ)cŒ©¦Óiõ§ú§eþ;cL±±±QcÆDTF‹Ÿ’§‘ ½R*½OQqÐD,Š¢(766Ê$¡nß¾M·oߦétŠW®\i­K­µ—Všç­åi)¥ ­uùÎ;ï”ßýîwÍíÛ· `!ÿèþ¨¸xñbU–e…ˆ™Dªç™Æ_ùÚ/ÏD‘UÒZŠ™]Q¾®kÞØØ¥ñÅtÖµkIª„…ê8ÎLb!˜D²L%Xú«N±Ïþ>³,¦ø=¢LŒóù\!¢ÍÌ$,˺à¹ÿkÕ€â14˜Â3ZÅ¥K—Òi`<—cáP}>?FÊD"‚DDZëccâÞ½{T…&¢B)•&•òEžçJ5/ÿ¼ãrÈÓ=–ªŸÖºEĤµ¬•I}-I…ˆl­•ñx,±«¢×Z[¥”ÞþäŸàcÅIƒõ¥ÏIž”RŒŒP±Í˱VUED„J©4›“ÀÓ¨ƒîù­8¤Hf¦Õu½”/qîϹ݋À\€˜»¶ÄEµ×¥¤NR ©{¿Â½í}n‰Tð4>•TpDd•RŽ™[föÎ9žN§a:R ¨=3¬%©’šã½g"bç\*öÒFlrü-»Ôw–U_ùAçûÉK…^Ä*O:nFqð¥ßàiÎ)í?-∈Œ1ôóŸÿÒÜâB ï=ÆÈ†^ ²â¸yÔyï5]¿~´Ök€P”j$á©D}•è8‘%'‚P>®«[XX„cŒŸÏçxùòe¾uëÖ™š××’T 16ÄõTQ†§±€!™f‘âðjHuÒïŸG®L=<5™ºûO‡I¤zUçÞ÷ýó¼åéz—×…¯®cLŸ¥5;nrþ†˜ö“4—VD¬ˆXˆªŸsÎ×u}æþªµ$URsÆã1[kSJ‚CÄV)eeQ\3Ä8°¤æ®g¤Vº~©W²,I)•ʧ½Rloo' –Ö’ÿÇ$_f¿™aã4¿%×uÒ¤× áJ¿’J“)¥Z°Æ qbmÛ–1xxxÈg]Mi-I•T›‚gfqαƘV)e‰ÈÇWÀ§Å@ò„Åg|U_¯’tg‰u¼Ž>•=Wýà©*YýR¹çÆÓˆˆMëÀ££#~øðá ©VáòåËܶ-F#_U•EĤú9ˆÁ”»×ç¿ëúgœ_%íu >Ôó•âþR}ýFDZ"òëRC=a-I…ˆ©øË21["š#â¼,Kƒ)=—R¯E¥ðz±Ê2úT+=QoqÎÌ Ì«ª²²ˆ=s •°–¤¸qã†Ur¬RªEDgŒ±1À¶¾‰eɲè0\ë„°—kŠU0©òœBÕ`aNoµÖ󪪭µÇRU•\¾|y-ˆµ¶¤šÍf¼½½&“‰EÄPE s­õxšO“Ìé˵TŽWµ®ðz‘;~;Ö¿¥ó—ˆµÐh­›‚‹Ñü¡ë/Ðç§êE§˜?KD­ˆ´£Ñh¦µöqÅ;;;\×õ™;~Ö˜TˆÈ³ÙŒsBDó¶m[Dœ‹È ,Ä #˜ãbÞ¬_jÀËãy¾ªd€ŠŽ}ÆE?KD1f3ñ~>Ÿ/É”G›œÖ–T‹–(!_×µ‘Ö97‹*àœˆ–µŸ¼šHõo}V@|Zš,ˆˆUJ5Ƙ93ÏSüŸÖšCþƒ>ðqÙp¦XkRüþïÿ>—ei뺶“ɤdzèQw1q1Íb°¨Q1èü"#Ö±RÏJ©@D>6ÿ›cŽ666f“ÉÄÆZKäÑ&gµ&Õ;wøÆÞ{ï677íÖÖÖgeY&Iå˜9ÄJµÏø©º3߀õE÷ùäËdBD 1š¦)Šb¶µµÕL§S7Nýöövxøð!ïîîòY `ÍIÁ‡‡‡\–eûÁÌœs3ï}ƒˆ6Zƒ–eÊNC \g“’4û&BI *,"Îêº>˜N§³?øƒ?˜9çl¾žZ¬5©RàèÇù»ßýn³½½ÝŒF£¹1æPkÝ‘Á*¯”j1 "ζ··?^SzÂZ“*!šI¸­­­¹RÊ2³‹A–©µJ·ÏYŸö€¯Ž~ƈB6„Ð:çfý|°é9ΩnÞ¼É))ñààÀ!â¡RjC–#"k­ŸQ=Ö‰XçŽT»»»+—2.ÚÛ,Ûêä몄Aõ[O¬ŠvÉ#) J©ø|"ú+¥ÖJÝëâÜ‘êã?&­µD)•Š¿äêßÒ <¨ë‰¾gГFk:fÕiÃyìXE¨ü}ŠN'"!\´Ê‰ÍÝ‚ÖÚM§Ó°Nê^çÅOµÄõë×É9Ç ÑX‘nð1àtdöfÐ1@¬ìF’…‹N“±RÅ¢=3‡ØŒn­qî$Õ­[·x4¥°¥exj~€þÙ¯ûù€7‹\½ËÃʺkàÌ?•œ¾œò欵~Ýh»8w¤Zžx´ø¥NzÐéXŸ«ƒÖ +Ô½ågIJ¥¸?"J-W™™åñãÇk=n×úäú°»»ËÎ9!p*ü’~ååÊúÒ úfÆo]µ¯+µ”RÇ*(¥&YBêÚãÜ‘ u)µÿ|"TÌúMÌWþ¾¯.à€W‡Uªwßv黨,;Õ¥€Lëàè6‘¢(øÝwß]v†YG¬ÿª¯ιÔ-õ¨J&×¼[ý±EðŠ*=ÞúÖ´Ýç$UlF éÙf½©Öz-•°¶l? mÛ2¥žU!6ãŽó÷˜´¤Òú¡ûL:Jb{Úe ¬Öš™Yæó9¿l¼7µ=±“ ”ÂX“"õþ•¸¶JŽÂÔ«ê™›Có‚õ@gÍ»TÛÓ×!ú!c@-+¥ÖþáKR«\š«~ËNõÑ2˜¶íþ¶og}IožWqEƒ¾$R4EÒF€ó†ÉkŒsIªÉd²4Jd:7/½ðDË…o×Ú7ø«Îݵm74©ó¬’›$%)ú¬éû÷º$Uæ§ÊÍêK{E܆ÈõuÁ3“žÎL…^$KÇ,"R–åÚ’)á\’ªm[.Š"O³ö)¯*J/‰’ê¹µ‚=¢³7½Ï h2"zï}`怈ž™åèèhm²|ûp.I°ˆ¨H7=-hÓºª[ 0ϯJèó¥ {=8©Î_öw £µN† VJq´îDäÔŠtq.I•º+ÆôkÂåÁµ)ý㘱b ÎÙ¢ïþ§ÊÂÙšjI(XÔO÷J©eä̺µ"íù$UDj¬¼Tÿ"±Ž-¢­ý؃ˆu¶H®ôžN€Ëšqmœr¨RTEøJ~C8—¤šN§ˆ\L­v°0¹:X„.-ƒkÓö}Õ•Éu6è³üëÓÿÚaUÌ_ž” g&I•œú^kíÑUUes¼ný¨º8—’ª( œÏç’Ň%£EÈT‡e*Ái»,x3èªâÉ ”“TJ%3;¥”cfÉUÆuŹ$@]×\–eë½O}‹"º¤{'Ózÿ7˜ÔÏ}é7YE®þ-OÓZ*µ¢õÞ¥¯[“·.Î%©._¾ÌÆ!"6Æ8"r©U)E*äñ1yqe™áÓÖTðâXå«JÉ¢Ñ:»\Ok­}tæ;­µÄrçÁñ pNIP…÷Þ»ÌHáb£e´ °]: ó‡0çuá¤{º"vùu MŠn¯”²J©–ˆ¬,Ú'±1Æ?|øpT¯wîÜá‚ À‚÷ÞË¢ˆ…¨:ÀSëѱP¥—!Ñ@¼W‹U‘™$Õq"âÀAì÷\Åû÷:1™LBôc4QE°ˆØÂ"¸ÖÃÓèŠeÂbŸY=aH±3è&‹&sz MÊÊÎ9DlCˆXDtÞ{ç½_»v¤]œ;R!"?|øŽŽ$éä”RVkLëǪ՞f-Õý~À«Ãªukž>Ÿ’J#±"ºô<˲´éÿ‹/®ýC:w¤J˜Ïç“Ùlçå³n ÏÄýu«) k«³C2R¤,ž™O‘é"b‰È2³#"ï½wÖÚµ^OœSRݺu‹···CÛ¶¶,KkŒi´Ö ÄXÀ˜z-¹´:ës~Ûñ²ëÕLÌkŒx¥”K† ¥Tƒˆ®( ¿¿¿nݺµÖÄ:·u]sÁ9ç,3[fn1s.YCVï EBà Ι¡â˜)bI(°IZ1³+ËÒ‡ü;ï¼³Ö„8§’êæÍ›þƾ®k¯”j¼÷sDœÅd6›aaV€~ëßi‰õ2e¢•Rg}›Î «Ü«ÞÃÓâ™K“zrè@"–ŸL&AknÞ¼¹ÖÆŠsI*€ÙlÆeYZi‰¨5ÆÌ‰¨AD 6Iª$­º…Iõf±*K +Ê“Çüµ° T}‚µvíãþÎ)©‘o޼雦aD´£Ñ¨€94ÐfY£© ËKû©^¶™ÁyÉRí\ë=çT–{™Õ+°”T°ˆ¦pZë¶,Kë½wûûûááÇk]ž ௩š¦qƘFDæÎ¹Y\Ô:D\®© kª °:íEà½Ç²,Ÿ»ˆ ,Öpéuªý/ú.@ŒªOû3Æ<³mÛ¶ÉqÕ5­èXˆYgï${pp@ZkÂA¿oÝëÏCȈH—1­Rª!¢¶ªªÖ{ÏÓé”ß}÷ݵ&ÔÊ›xf«¢(œ÷>©MŠhÎÒ럩mpRý„Î1 û;X tDD$¢ÞQe­]‰™_XJ¤ß{UY–pttD=ÛbÚWŒò¾Fw+îÁ3'9À9GÞ{ôÞ<(V^ÃIk©nöozFIý“EY2ËÌ-3·Î9CÒ†ˆŠ×ïÿû¶,K 3­õ<­¯`QÓàX4ÀjŸÔIƒ#¯ñ¢ª£âD5DkMD”ú-=SÛ½¯7Sþ>u TJ¥}ô†ˆÁ³Ÿ¿˜‰ç¶’”UUQUU µNM€èŇÎ*reÑê)g)©¢&ÒÖumoܸá×ÝHpÎÕ?Dô£ÑÈ:çšù|Þ¤èf¥ŽEª§<œS«`Ýñ•·RJ´Ö z²1æ±666|]×a6›Y ±*Çä»gÈp®«ºÅEz3Osäƒ/I—”æ§$Eáæóù±‡\–¥óÞÏ”RD4~3k‚÷©“Ëc%µ/Õ×Z[­uCDO¶··gðl{Îàœk±‘åqðiƒ†cMªókJm@#S 0çœãO?ýT>ýôSŠÇ [[[ó¢(˜ùH)u¤”jbÄÃ1U°{-«°bBKͲ[­õ!i­ic ­;„x Hµ»»ËÖZ;gÖÓ†¼RÊ癿É`ð<¬Pc–•™ 6v!ø¶mù§?ýé±ݶ-·mkÛ¶m±gàeÒä*R¥µW’!ÇÌMa¾··g¯_¿`ÙDú‡?ü!|ûÛßvÞû¼œ@êz"Ñ€ñÌõ%É‹O;ÀñüÓŸþT=zÄq{×4M3ŸÏ™…Z8ž]ý²jß²FE<ïTyØEÑÖu}T×u£”jÏ‹êpÎ  ~øa¸råŠSJ͵Öm oIõ*:µ«Ðù¬ÿO¤bç\è›9÷÷÷Ã|>÷Þ{›ZÀ¤óÈHó ±:ŸKT_]Á?zôÈ;çl:ÆÝ»wùîÝ»‡Î¹BHêî²hw¿é½RJÒš*YÞRìÀ•+Wä/ÿò/óûÀŸ}ö™„‚µÖCÌqê9ïSI©üûeìØ"î/DCÓLDfƘÙÖÖÖ|:ºÙlv.¤À[ ©nܸáÿùŸÿÙ–eÙÎçó`™ÞM§ï›Á;Ö¨cª“R*E¸S4+{{{õoûÛÑ_üÅ_„Ç3¨/¿ü²DÄ*fÖÎ9Šæîå~BÇcòu$:ç4é¶mëÿøÇõ_üÅ_ÀãÇñ£>Ò»»»4›Íðàà`2+j纴v;ždûÇìxÈÌBPMÓTGGG£ÝÝÝÉøÃæ?øhšFïî¶¶J¥”•Lê9aO"Ô*)ÿO† ˆ-͉h潟EÑlooÛO?ýt Õ߿ߗeÙj­[ï½UJ-ëpCϺ*ßg‘ë±h!"RA[kkïýôèèhëóÏ?¿xpp`ªªçœþÙÏ~¶uñâÅwêºÞÖZO±ôÞëD,xfvïš§E„BÊ{_0óäèèèÒ§Ÿ~úŽ÷~V×5þÛ¿ý›ffF¦ªªËD´ÉÌ53f¦ätî[³uˆ…"B"¢›¦)‰hzpp°ý¿ÿû¿³£££V)Š¢@ç\µ··÷.íE±UA§}¬’V]ëæsüƒµ‹¶(Š"šooo7ûûûçÂ?•ðV ù“O> ÿýßÿÝf©õ>Wi’8IŸUÎÞnò\úJDˆ™µ÷¾€IábáUUyïŸxïÃÅ‹ ­õ¦µö’1æ]Ù&¢13"¢r ÒÙÓš/2˜ÙxïÇ"rADÞÛÚÚz<›ÍŽ´ÖP–¥*ËR!¢fæoXkßAÄi¡‘PÝFâ]Gi£¼÷"NB™ùÚd2)Š¢hˆÈ7Mc®\¹R+¥.[kß‘HâTW…}ú´…lí뉨 !̵ÖMÁ½÷Þ{xww÷Ü,UÎ=©R›7oò'Ÿ|¢Úg£gž3Çâ©B•ÒàÈT&„ÅŒL̬±öÞo!âeD Óé”ʲ܇ED|©µžj­/0óUDÜaæ )©rQî·Êþ"(f.½÷ˆø̧Ó)ŒF£°ÖZ„J­õ%¹ÂÌ["R‰ˆ€%±”RϨñ‘•q,$Ϧˆ\UJ5[Þ{'"a2™"c.ÀŽˆlqà C-"Ôw=}*`ׄުˆ÷ÏG·ÈÜ3ŸÏç¢ÅsgwqîI•sKBEÁ28_#u_]õ/½˜ã"™™ €13_ˆ™ªµˆlÅhAD ua#ò "²IDuR—Òl®”ê5y2³€’™7‰(„”Rj³`9nDd˜yÃZ»ƒˆ`B(’ ØCØü~¥k2Þû"nÀ5f.˜ù(º$KD,™yÂÌSkíX)µÅÌuAѱµÕIª_ú›W¶Ê}€¸¨¢ÔE1SJ¹Ÿiƒ¤zSÈ ü÷ÿ÷þÉ“');ÀS3øÒ¬ðìƒíÙçòo2N‰ˆŠk–:î×0óTDvB.~¦EÄQ #!bÍÌI-#­5fª^WåÄH`%"eTéHDF̼-‹!žÂB"•"2€ "Ö"¢Q)¥–ñyù12•k)}½÷lÅõÕTDZ~e«ˆÈ b霫ˆÈ„FˆXÅãc>AœVJáÓ6G)6“1F§[k]¡ÙØØÙ3$ÕYÀ9ÇÞûBHŠTªliºÍ\»¹;ø’šÇ€‰U@%"ÓH¨T·Q‰ˆ""B0D¤ã}^+ºª_:¯%""’ˆ‹ÈfœÒ@\™ ``AÊp¬] dd#ÑÌ\EB"²!"!M:¸°ï"j"RQÕˆ˜Ö‰½Nì|­Ø]GåŸeäJ¤šcŽŠ¢°³ÙÌÂ9Ä[E*k­3Æ8ðÖÚe˜ä'Š bìJªU&öì}2T ˆ`! ªÂ̹sCD‹@ÑHлöȈž,rKãHt!K ɃˆHÌLJ)J&òhÛ+9"Ó}PUΨæ‹ìO–DX¨®%-ÆkKé ½™Î]•¯{Ï¡b´J€ET‡/ŠÂ‘µÖž»œ4€·ŒT!Œ*'Ô2²àøŒ™&úLë DB,,^u|EÆRdfsLƒ>¸åzªo°'U"f€ ¢Z×·ÀoŸúŸR:È*ŸQ:fÆÅíJêdר“'MH¹ªÚ¢”ÿ>'SWB@ Êe|Zóφ\UUîêÕ«ç&Š"Ç[E*Y„¥ª¦¢Yžö0”RŠBËÁB­õràäÖ¹>ŸVB߀̓XûLÚÝ™öyÒûœ´¹ôʧ!ï*¤ßG‰õÌó$²v÷ßG¦Âò>g†QJ±1&à¢üA‹±hOY–aá9Ÿx«HÍé.¦L´Æ˜6ÖôZkµm9¦¾%‰Õõ¹¬cJÛ¯R“NC Î¹û?WósË¿ï“ùþNCª¾ãt¯iÕz3?V¡¼÷ÝuÕr•Ô¾˜âÒQk9žK •ðV‘j{{›Û¶µ"2CÄyÊý1Æ´ÌìDDc"¡–‹õcÈgÔ>3{ŽçýßõÅcöžŸ£ô4ÇZ5ÈûŽÕç—;íqú¶ï^Wn!,%U®öá¢w/k­}a kŒi”R3ˆÐMÓ„étzn‰õV‘Ê9'Ìì ÑZTUu„ˆ0‘2N4[SN”4’33Çifü.Np¼®Ü¾ûþ$ivšýŸDˆ—9æIטÿÞ{ÿLЍò …˜Õl‹¢hêº>*Šâ¨,ËYY–v>ŸÃl6í­­¯4Î o©Þyçûå—_Ú²,gmÛ"â^tšN™¹""RJ%I¥£j’|IË5EJÍ8I}:-É^”œ/2 _öX«öyšc­R_s f’L¹ÁEDÄÃJ©`ŒñeY¶Æ˜YUU‡UUí—e¹WUÕRª­ª*¥ÒœK¼U¤rÎIUU-3ÏE䉈÷³ç­u^æ8«ÈÕ•ŠÝuWŸ3ùcÚ~(ŠÂEÑ–eyX–å¡1æIY–‹¢ØSJÆ€^?™Lä<Ñæx«HõÙgŸùk×®Y8Ç{J©ÖÚJ0±’ÀÂYŠH¾ !Pf¡zÆ´Ü4/#ÁN;蟧n=oŸ/B®Ó7ßoŸúÙÙfYb;®I9fcL[E[ż®ëý²,÷Œ1_–eù€ˆ2óã¢(k-×uÍ÷îÝKu2ÎÞ*Rݺu‹=zd½÷Ma_DEQ2s©µ®˜™1*„ J)ðÞc¶ N‘Û’B†ºÇ8Í ~^T-û*xÞšê´è3Ö¤I¦k-æù¥•O5:|tqÌ˲<ÐZïc¾ÔZ©µÞ-Ëò!VUÕŠˆ½qã†ÿý÷‡ˆŠu€÷ÞÍf³F)µODUÁ b¡µ.¼÷Élœ²VIÑç_B¸ÖZJ«„ÓHª.^V%ËyZ¼‰cõ­©²¨Tû"…2.йX¤äÌñž(¥ŠÈCcÌD|¨µ~B8(ŠbB7nÜð1|jTg‰ÝÝ]><<ä«W¯ÎŽBÆB(•R­µqÎ"Q!‹pÃÌÊ9ÇÎ9ŒDŒÖ«eÎ|áãUX ×¹Eo•{!/ÞU½TÉ)ÕJôÌìeÑ»wŽˆJ©="zàKD|¬µ><<<ô±ˆÍ¹¨ñׇ·ŠT>äÉd‚=òˆØÀl6›9ç¼÷Sç\㜳ÖZo­å¶mÙZ+mÛŠ÷¬µBX:-skVw€õám%Uº¶>ó}hŒYFLE‘ö!DbÁOç½o­µ3­õŒ™«ªš+¥æÌìf³™·Öž[Bd]%ÞÄÈñrPÀ*˜ÀØ€Kp5þ½_›0ޝ¾%,&‚E2^z¥Tˆ¯#¤ó7õUË–ÁÓÞËíàöà| ¿€ÏãgOàqÜ®€Ðçr=ð–Ôý[q]Ytzöw¦·[õž׀ãÀÎ{‚ã÷5e'«ìs€§Ï ûl 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€Çÿ©>ì?RÈöIEND®B`‚nixnote2-2.0.2/images/down_arrow_small.png000066400000000000000000000002001315604104400205730ustar00rootroot00000000000000‰PNG  IHDRÛn€'gAMA† 1è–_tRNSÿ[‘"µ)IDAT×-ȹ0 „ÀëI õ_–¢â/ÐÍG ŒR…ó|¸m"0 E`8éIEND®B`‚nixnote2-2.0.2/images/emailIcon.png000066400000000000000000000436221315604104400171410ustar00rootroot00000000000000‰PNG  IHDRõ¡“Ë pHYs  šœ9åiTXtXML:com.adobe.xmp Adobe Photoshop CC 2014 (Macintosh) 2014-10-03T15:58:40+01:00 2014-11-17T16:15:38Z 2014-11-17T16:15:38Z image/png 3 xmp.iid:f518dd34-65bf-4f28-9ee6-80d7aaa19f2d adobe:docid:photoshop:5bafde4e-af03-1177-b93a-e16b0da3eafe xmp.did:257b52d1-41bd-4f92-aefc-158444a1e5a0 created xmp.iid:257b52d1-41bd-4f92-aefc-158444a1e5a0 2014-10-03T15:58:40+01:00 Adobe Photoshop CC 2014 (Macintosh) saved xmp.iid:f518dd34-65bf-4f28-9ee6-80d7aaa19f2d 2014-11-17T16:15:38Z Adobe Photoshop CC 2014 (Macintosh) / 1 720000/10000 720000/10000 2 65535 270 245 s¹‡© cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF 'IDATxÚìÝyÌUÅÇñï«àÞ늶Úh"Uã"VQD颶 Š"5Šh0Š(ZS…ˆš4 S5îQSЂâ®(R"Ц ÆX¢¶J—"²#øòöyÞJ©Z–;ç=÷Üï'1&ðr眙g~ï=÷ΙÓÔÒÒ‚$mŒ-ìI‡$ƒC’Á!ÉàdpH’Á!ÉàdpH28$’dpH28$’ I‡$’ I‡$ƒC’Á!Éà$ƒC’Á!ÉàdpH28$ÉàdpH28$’ I28$’ I‡$ƒC’ I‡$ƒC’Á!ÉàdpH’Á!ÉàdpH28$’ôÚÕâENïÓwý?ú!Ð øp0ÐlWK…Ùx X¼|¾î_><ùÏåŽõœlì´8–Raš€…ÀràïÀÀŒÒ½ãXÇuÀP`GÇNjS?ˆÿÜ \S¶àظø]¤¤òØø}\Â\ ¬­Å„¯…“††TêË—1WkòN¡Î$Ïç%’j§]ÌÕÒGwÇDª 5™«µ Ž©.Ôd®ºL’Á!ÉàdpH28$’dpHÊ¢*«=?fK€«Jè àûÀ1¤m' ŽX¼Œµ>Ub#€ÎUŽª\ªìŒ!m^ÒÏúTÉô‹ÚµZ÷ªöÇAÀƒÀ`?ëUml¿¨Å£6+£ªŽöž%m*$µ…¡Qƒý«xrUþVeàfàù¸®”ŠÐ9jîæ¨ÁJjëàȽ‰ñ–À/©¤¶³®•ÉvQcS£æ¶¬ó¹Sêุ‹ô­HN»£ÇÃqýŠj;‡Úµ–Ó²˜3÷5rp|DÚ}0·€sýð20ØÕš×fÚ5jé娭ÜóinÌ•ócî4lp´®#yèJÚ‰yqæ6Û£¢ÍÖ¾6Q¨¡QQS9-޹Ñ5Ú\wî4dpÀ×\‰:³€vLÆ{;´öŽš™5”Û̘ÅYwÎ4tp¬ïéHó?°Þ¨2)ÞÓ9¡ÿ£gÔʰÚú<æ@˜¥RÖ ›«€“HŸRçv0éíû©ðWhÚdûDm<µ’ÛÔ¨ý«(éãSËþí«@_àRÒãìr<œë\Q87jbPm-Zïµ_Zõðµä`>j¾Ôêi=Ã߀ÁÀÙ¤êæÔ8x.®g]÷Ñ8¶ˆ1.j ÷· £¦G×M'Õ“q­Ùø°2s{»‘nÕŸmúˆËêjŠ1žc¾[æöVF w‰š^QoéZ>ˆkÎþä_8Ö8–´Èçj|øTícûrŒuîws£vE-×åÛ²zÕ<tîeno+Ò’â'¢MUC·ÓÑ1Æ9-ŠZíµÛRÏ×sõn!pA$øìÚ;’´(çF £ó®nuŒ1œcšÛì¨Ñ ÈÿÁ±¦’ËŒVÐÞeñ[ãç`Ý9%Æî²ÚZ5ÙƒbÖ$›`)peÆ´Ú;x¸›Šl Wq{ÅX=c—Û´¨Å+£6+£ª_3>œFúÀkMíµ.ìÜ,­3)nqßš¨½Ó¢+§Êë–7Äõë#´w pg¼îä<-N1þ÷ÆåöHÔÜ U{—Ñ(ÁÑjpiƒ">”êoQ/Áum©)Æ`Лbrµ6§êÛ(+"—’vM: ¸§€Ë—“=JZà£bu‰¾c‘û²äž¨­»ªü.£ƒ£Õ;Àø­0/s[íãÝÇtÒƒx:8Ÿ³ë}==ú>÷;ó¢–†Dm5ŒF¼£™ô¬‹£ÈCÑ÷H_Ç=FzüŸò8&úxLôyNK¢vŽŽZjn´Înä›·>Î"}ÚþFíu^®Å…cµÔ1úôÅèãÜÞˆš9‹6Þ÷Óàh[­KÈo&ÿ~§6·o×o¶ã£/GÐÖ⨑Ö%ê ÍàHVn¥>x©€öŽ ­"¼ØÃîßh{DßM¾Ìí¥¨aÔÙ]¬G1f>TYÐuëPÒ~’>({Ãõ‹>+âñžÍQ ½¢6dp|«EÀuñ–ôÉÚ;”ôAÛ`_»ÿ[í}ô@ôYnOF \Gþ;¯ Ž y\ |™¹­ö¤;'_γëÿÇyÑ7ýÉÿë—1æ)ù¾ŸGy-þHZªü°6s{?‰k÷€ŸÚý¿ùo‰¾ÉimŒñ1æKì~ƒcsý“´/ä `~æ¶¶~¿í†;4`ïç>‹ô˜€­3·7?Æöìk5} ;´Vàò?(»é‰a–37Š£âœÇ‘µí²Ëî1¶_ZæG.óâšûòïw ð+Ò'ú#©ö~§;Ç9ΈsÎmnŒáyä¿ýÀàÐ<¿©n#ÿâړVGNN¬`_žçv-ù?ü\cÖ=ÆPGá>#­'8#®Çs;Ž´ÍMÀîè¿Ýã\ž‰sËmVŒÕÐ;mêàdàzà«ÚNZö\Ï ÇúÅ9 / ­¯blNޱ’ÁQ‹€kH›Ò>_@{]H ¼سŽúiÏ8扳WÉó1&×àB.ƒ£Ä^Šß¦ÃÉÿ¤¹&Ò׈¡>”}në ò2Æ ÅÜdp¨&ï>Æ‘–,O* ½ýH‹¤¦û—°?öc»%Ž5·IÑ÷ã|—apÔ£9¤EEC€O2·µ éÎÀ…Àv%8ÿmãXfım“¹½O¢¯Ï¦öý48ªm%i÷ó®q]Ÿû¶ìÝ€[IwvnÃó> ˜Ç’ûÎ+¢o»F_¯´ì Žªx@Ú û½Ìm5ñõƒ²‡;xž;E›3ßðYÆ{ѧ¢epTÒÒ²êÛÈ¿l}[Ò:‰I$¹mÝmç´,úð¨èS•׺pì·]‹÷ˆÏÆ»dxý]âµgD[¹Í‰¾s!—ÁÑž"Ýý9X]@{—“vïSÃ×ì¯yyÇ¿:úê¤è; ëcà ¾¾™-·®q9q;›·ßéñ“â5sk½ùíŠè3"mïß'&FÊBz<â›ðoψ;¤€ã\}Ò'úH‡Ö³0ÞŠVÐ[ñHcžÂ†-[ß3~öÞø·E\Ê}²Ðò08ôÝÞ"í¯yù?üÛž´8ëu`0°Õ7üÌVñw¯ÇÏnŸù˜>‹sï}!ƒCh)pé[ŠIÀªÌíu$-ÖzŒÿ^8Ö9þìVò?nUœk8÷¥–Á¡Mó6З´t{^æ¶Ú“6Õ™\ÿM?+âÎƹ¾í°—[;» nÜ“øjÒÝ¥9ïûèŒ/è¼V‘ž•r=ð¡Ãì;ÕÞ‡¤o2ÎÞ¬Àù¼ç2ÄÐ08”ßCÀ ÀóÕm­­‰c?!ÎE‡ ò 0‚t#Ù¬::îYqÌ#ȿՀ }‹i@o`4å¾|ecï8fjcŸ£€_öá(›§ãØFűÊàP‰¼BÚ—ârʱbiË€86*©Å¤ý0:“–l¯nƒcXmwŽcYì°ªÿz lwA´Ù3ŽA‡êL iév7Ò.Y9—­¯Š6ºE›-v¿Á¡ú6Hz®IŽeÏ׈p68T9I‹®ÆÍ5x½æx­âµep¨¢æ—§¯mÆë¼¯qi¼¦ 5€§€^¤µó ì¯âßôÂ}? 5¤I«9föå{1~v4îûip¨áý8t—êìoøûÙñw§ÇϪÁ¹‡Zý‹ôøÄɤ­?XŽo–Á¡ï°(þ[`WÈKI‡$ƒC’Á!Éà$ƒC’Á!ÉàdpH28$’dpH28$’ I‡$’ I‡$ƒC’Á!I‡$ƒC’Á!ÉàdpH’Á!ÉàdpH28$’ I28$’ I‡$ƒC’ I‡$ƒC’Á!Éà$ƒC’Á!ÉàdpH28$ÉàdpH28$’ I‡$ÕMp¬Zi£´ÄÜi3íÚ¸öމŽh²¤ ¦˜; ý€Ó¬i£µoäàhßÖ iãùá¨$ƒC’Á!ÉàdpH28$©Èàh¶+¥ºP“¹Z«àøÀñêBMæj­‚c²ã!Õ…šÌÕZÇÝÀ»Ž‰TjïÆ\-Mp¼ >ul¤Rú4æèûe €gÞÀ x«¼TÍÀÓ17Ÿ­Õ‹Öú&·YÀ¯#hã[¥7?æäSµ~ᦖßHj»KI‡$’ I‡$ƒC’Á!I‡$ƒC’Á!ÉàdpH28$ÉàdpH28$’ I28$’ I‡$ƒC’ I‡$ƒC’Á!Éà$ƒC’Á!ÉàdpH28$’dpH28$•É¿y“GrH_J“IEND®B`‚nixnote2-2.0.2/images/encrypt.png000066400000000000000000000025461315604104400167250ustar00rootroot00000000000000‰PNG  IHDRToc1;gAMA† 1è–_IDATHÇÅÖ_l–wÆñOßÖ ê`¶/ h¡í6þ´À qcŽ˜u²0bô`r@Bdºà8X†Ãm‹‹É²˜¸d™ÆDˆœ³é&ÂÖöm‹kƒ¶ÐJmé?Û‚¥íóçm=àidKÄìþåÉ•ïý\¹rç÷;¹s¦ÍTe™]6«ë󯬓ªý&Ó6ÓÈ™V¢Cå\¯,Øû ›l”ú¼‡Ä”&Ç1ôºýÈY¥Cå6»·TýÔWËcÊá :®Ð$º•G›Æþz^¹1„V˜çWŽòfær¦U–åžý™u.˜2%ß$ê\3Ç×L)4Šk–Åi[ àˆ§ôáovê½:“Ûê!CR–:ã²%çòð“튴aJ¾1¡úAw aÂrh³E/Ùå"þìY]·QßöŒ‹¨÷m}¸bŽÅ¶;¸§ã™œ×.<õšNL™o /9n‡‡ýìñšH‘n Ûàò\5 û»söOøª|¯âÇ ž/öªQ¿”—0±çm´ý3ä̼âRû ®Î³ó»ÉmÞeS:­³Ç¨—œÓâš2pÅ:,0©|¢ØÄÊÁ%åFD†+@·rŒèWi=‰¯ÍFg,0žpO’“½%gD©AÄ<äO;Swn'4î‹þ-4n–ë0ßGî1­D›Ð Z„®X#-­×ùBçKKëW!-_—JùÒ”KKRécù¬“–6`……†fy|¡.EÒÒú’œ‹Jõ]3ψbªRc˘P`HdB­†üÅ÷lô¤ƒ®Ú$2l“S"ç|Y ШT Öê›bF+g=¦Q¬I±@ ÉÝEÚ>¡X,rÎݳˆµyT,ð/«]¾¢KdÔ— ‰Ä,I1¬PŸÐ„}&¥äÊK¾”IWmÒ(Ôé ¡H“{E"§}GƒPCÂÇ-S'Ô¢,á2¡P“¥"‘•Š„>Jr®s¤Õ“„Ž»_$rÂBg…ú-1 ˜&7_žë²È¤B}")¹r“1såJÙàC‘nÛdÄN(d¬T/ÒlM«Å"µŠuV Äjí Ô¹O Ðê)ñ,×Y!#Òbµ@ A©Xä‚ûôˆŒ»Ó%.¦ 7ˆLJ'ã’sÓ¡Q¤_•Z‘.eb±zb‘÷­‹Õ©‹½ïé„ËÅbÍžV{×)V+Òœp½r±È+^+;­R§È˜´A—8’úϯÛIëW uË )A¨8eqò¨"YïÙ#+’±^$ÒìYÕ²³œQ¢Z y–×Ë ¼§$áë9ïÚ›äTˆD:}K‹À EzMjçw¹ÞX´ü Y¡…úŒ¼áVs­V䫎Ë:وßZo³>»Ôù‘N¬·Y§ƒþ*ëTa³NTêtÈáäÿëUyËóŸåÍ.Û­ö†œo9,«×]²šu¿‘ù}Î* ïOµ¬Qè}øº}av9ˆ4è׌~ßw MöªFµýjpÌ‹‰î—Á1/«¾©]?ð‚z³OÃMþ›}ÏÉàO8‰^gLÝ›iË™Få6»WVÊY¡‘e.#´ÎY Ûî(Zíqu^p 5^¼E_vôSúÿôsÕ¨ñœzÔØŸð;™Üv;ÕÈê2xÈ›™wJäL£Ä¹^¹cï]›FÖ#ÈZd“ÖêÀ€‡µ¢S•v´{ü3êVèð¨Nt¨rþS|¶jGJ-ÆŒ ^·?3Q¢cf%YœQq×Êÿ¥Núàúâ|}¾ÿŒÅÙ\áWn-IEND®B`‚nixnote2-2.0.2/images/eraser.png000066400000000000000000000066071315604104400165240ustar00rootroot00000000000000‰PNG  IHDR--:âš NIDATXÃí™ilç}ÆŸ÷˜™ÝÙ‹K®¸¤E‘eQªlÉ¢,Q’%˵ %R$Ôn«~)Ð(š¦ÐÒEÑ~lû©mÚ š I ÇŽ‘¶vjÓ:-ËÕeK4E4Å›Ë]îrçž÷è‡]Ò”,Dzã¸A?°,°;ïožyþÏûŸ]àõóY¤y¤?ÉIاLÓIüùáôc_;¾{ÏÎö°óÝé Z u¨Þ»˜Ÿh€o+¢ý¯Ÿé>¼ó‰ƒñKíûjK¾ýȶõÙ‰ùøÜD<@ÿ¬@SÆî·ÿ_}òøž=¾Ö·ûøæôº'Y¡wG¦Õ¦Oes™ÍƒmŽPqT½UKxÕZЀ‘àhý›/?ðÐá?Øyð™ÂÃ_È, ù@(‘jYÏ íõfmë©ÎÖd{/«Äç&ÂiâÓ†fø3&ýƒ/üÖ¾'ÿñ¦­‡wä Û8b‰(öøbχøH‘Z×ô&s){ ×’Ù1ÐåZ¨¨ —Â…Oš0d¿º¿íÈg>õg»v>Ö×··=“hƒŒ|aÏ ß‡åû0"4ôÀDˆ¬•'…\aN?žJ±GÖ[>õ`MÏ/ùÁO šHìëNõýö/oú½ƒ}å±Çžì.ö[¦&ˆ"~À«0éÐG"ô ÖüÀGPw‘ 5:ìœÕ’ÊôÙ{ ú›²LÏ–Ã@kê“‚6š;öÈš}Ÿ{bû_8ø¹/n}xÇÚ5™ Cø±× !Ü©(@:ò`ÄñÄ>׃Ssa¸’¾ +p‘§E#™Kds›©¨öex™ö»Ó5× >R>ÞGÝdo>ÝñÙ-ëŽïÛùØoìܵÿáõ­b2‚X…ðCÏàQŒŒHH@@ð¾p\áÅÈ+[IPxTÀ$¬Ò"èÄ Üœ›ÂË•‰˜¼ueÁÿÊÉYg˜ XB3a¹í…þ'û×}ýÀ¡ÃoÜкÆN „Åðü¡Ã12*—„ xˆàÖbxN ê ¬Ñ1*†D€o¥¹ET§Ë(.•ÑÖñcÈ®é ¿UªíqØ`ü£BSN¨ýP.Ó¾³§çØãwÿîáÏéÙRháIåÀóxn,ÕÑRž…=? R›Gœ°$ʵõÅJ ¨Ü„À\$1_žÄ:*ÐI”¦…7NgË= ³ùŒŒLI4`<(4`2Éü†ÖÖž=½Ý_ß¾{ïOïÈ®M„*¾ï :q /!19†î Œ¤ˆ  ×V(ÇåšFT6-€T’3 \LlIä M{6Ω(Ræô»E„'†$´±k>4èêî)~¦ÿ¡£´·ýÑþ£_êÝÒYà)@,޽ƒ™³§à\E‡ŠÐÅ%Ñ`Éæ º¤"`“$ J% Ì:€ëlH3(®õI×ú2&ÇStv"! @ €6;ðÇA!$;88ØýôÁƒ¿¾««p|pëÖö¦ÀgÇ«ç .ŸÂüø8O`“¥Ñb`@˜ PZl@uq # 0860 U@À›bm.-iwÙ¼‹·Ï·¡V³¡Ð˜H4À(mR4`vuu8ðøþýû÷îÝû»ºº é9¢tõ ‘{ö‘|÷ª•ˆ#²‰2M%¤ Ô0çÂúM Õ„ ”,`Æ–ê@Rý­¦Î®í Iïf ³o ­…ïOMhN5(Ñ÷…^ÞÕRƒƒƒŽ9òÅ]»vß¾}ûú\.Ïó0W]âã>Õ¹mŸ-o&,Û6{ƒnÕ¢ +£@6´²)À¦µ= ”ê€ãEN±¾» Í® :û\\<™ÂôDê®Y¯ ”Þß €Y, ‡ÚóôÓOÿæŽ;Žnܸ‘+¥P©T0?7ß÷Ѳ¦h,%öÏuö-õ]ôz¯ ©tyÒ$žÃ4m\{@‚7VÔÍ…³(J #gè¶„¤gS§®ñʳíûAïyÑûØÃ`oݺµïرc_Ú»wï¯lÙ²eK±X„뺘›E¹\†„J‘oi!¡mçÆ[ÖÈrÏ–Zïõ³²pëMÃ,MXZ €P@kæ ÐZƒ(…Öõë$íÞ‘bOˆ·^7qãš ­ïRõ.`xŒƒpFÕdšçóùÂÑ£G÷9rä×¶mÛö…þþþ„išp3ÓÓX\\„Ö†a€Òð‘i¶mæ¤Òùëmë‚Jß@øÐ;'”=þ¶Ê¥ Ç(0 ãÑ}!yhCL*ðÊ÷²¨ÖÞ{ìºXÀ|:‰›i Æn8Ò  Ñ×××300ð§»wïìïïgRJA€R©„¥zŒ1B@ic BVíþœ£Õ0H”²“ÕTÚt;Ö…;W¶‘3’_3e½Føº‡•ùè1µ3’½ý#WÏ' b²©Þ¯nÄ8æZ9ÞnËÅWÃøµ ü¹5Ìð9ÓN¥²–emÓJ‰Òü|”N§­jµJ«Õ*(¥`”6Ô%t•Ò«Eâ†Ë´˜ŸH¦æ3m±Û±Q¬™³TR3ß.ùômB_ù™›¤Pú­ÔÒ LwZ¸ž´Æ®8䥌Dß¿8Q° àˆ’BUwÃq]‘N§h­(¥ée… !`Íãý ¡5¥0 †048ÙO+Ý›<;®"9ôm ¯}ß nh4h@R†ÚZ])õŽ¢'OLˆïý×°w~¼ä”,pH޼ݚRª)!4ŠcsnnŽ2ÆÂ–l¶ÆM3!¥´VàïµÇòšZƒ*¥²ÙD,¤tëŽáô¥“”yuBï‰±Õ ¶‰Å6æslölÍ|þùKK/¾<ìÝÔ€:€ y/é¡™¤çàJ!&„»®Kà ùÖÖ¨¥¥E(¥’Zkºb•Õkk ¥À Ãã( j5ÇÂÔN5bq¦r`§˜@m‹­§¸qá…‘à__|»~ñÚ¤3Ý„upÏ3ãJNBÀ9‡V †a Š"êû>çæ˜ïûqgg§gY–%¥4V+­µnÄ!Ê0 ßs]²´´”–RRh ø„Šèn•›¯ˆ3L®oAÜ!«—âÔ ß9µðݼi%›v—Õ}tSiÍƒâ†”àœƒR ©uÇœœœ4 …BÔÖÖk­“šÀŒ1Í8+Ãó<aŒ€Ê˜0!@Ô{*KÔRnöeãz‚Þþïø» —/]¹ã­V7ÆÔ²§)Ñ´‡ä–iB!(cDJI*•Šêèèˆ-Ë"ZkÎ9¤”´V­šq¡”‚R Ú„¦J®8"¢ #…V]ÊEK·Dú¾ýêÌ?½9OøáŠºÁýÔý±öPR6SÀ@²+±GG›™ž¦ùÖVQ(d†Ôs]C)BiÃb õAµ1”D¨0oZ£š…©³SÉ¿ù™×o/øsZ£öaê¾ZJ©„~†yÎ9 ¥V.„!%c ÆC<ÏãJ©HıE)c¬a3­A)m¤ '`JOQr5™Ç5®çµýæsçKûÖ¬7Ī   À_Õ¢Z ×ZÛ‰D"¥”êÈd2˲礙Àš`Ë€Œsär9©”ºkRl6%!ˆ¢áåÓôÄô¬¼(q犗ø‡o]^øç‘y÷]¡t¹ <(ìjhU¯×ÕÈÈÈH¹\óp³=(ôrI€( Cttt4‚³³³U!D!‚–\.G2™ lÛ–RJöÎÈymh¨üŸ?üásW®\ùæùóç_ãx¹ÑœOB݃FSÑ„SSS ׯ_6Ms¢T*ùaö*¥L˲ԙ3gpúôék/½ôÒ¿œ;wîÙñññ‘&l ï~"ê>ôr-[&ÞºuëŽçy×ÇÃ0ÌÍÌÌäOœ8ñü… þíÔ©S? Ãpfsñ!?Œÿ$õQ~€¤,iÓ4³{öìÙjÛvÇèèèðØØØ¸ÖzõÌð‰«ûq¡—?Ï€ÆÃvó½àáf†ÿ/èÕß[ý_àªîõóSÿ«M½gXõ‰§IEND®B`‚nixnote2-2.0.2/images/expanded.png000066400000000000000000000001741315604104400170240ustar00rootroot00000000000000‰PNG  IHDR:˜ ½gAMA† 1è–_tRNSÿ[‘"µ%IDATÓcøh'ÀÌÆ+¡a…¤,€¢(€f†í†}.ðõ/‘Þ9IEND®B`‚nixnote2-2.0.2/images/favorites.png000066400000000000000000000032621315604104400172370ustar00rootroot00000000000000‰PNG  IHDR szzôyIDATXõ—{Œ\UÇ?çÜ3wÞ³óØ™ÙÝîÃí#»Úv[¨ÐbZ5D¡‚¡Ä?|DýˤÅŘˆÁD# FbHª1ÑhDÿ³bHІ@ZjðÑb©ÐBmmYÜnéîÎtgîÌû8Ç?ö¶.ínÙ{’ß?÷žóû~~sî¹ðFß½{F*Ÿ{vìƒøP×¹NÉ~[º€@p=Žäu˜Ê½¿¼ #?Ög+Û»õz3p=HÈDu<“ëŠçºrBÆ‹ãtwg/eæ˜î{~³ ˾oËúA¶Œ eªzÇ“ŸÌ(®Î‰déáj¥[Ž®¬22\¥§R»¸‹÷•n8@åÎlÅ¿y¤˜’(%¸yt–ÜÒ³ùÁo(@æ¦ÊÄröU]ÙC½µ&Œ®¬2Ü_F«Ü®âæý7@¤†w|1žÊnüèÚ~ÐlCÃ…ÐÀ­ëI¦³#öÀ]_[¸æÿ` Û~¸•þÖên†z Ô4h uú«9F>TÁÈÔÎò'žÜÈ2rÙˆÖ}¯Pì®nÙ0„B³BÌ›ãëÃ-k)‹E+¿æ»Ëõ-²÷ü¼;›Üf¤§ÐóÔa½Æ£ˆ1­R»>yûÚØM£+˜¬\^ÀˆÇ`EAðêñÿ𧃯û2híóš20F\*‡e!¤Ò„3/ úúR½wüì1+YG‡(%ÐzAö„ÄŽÙ¬Èsç¦U8ždÖ1ˆË*l Ó‚´­Ùè$'&êx¾Fÿ/ÝR,EØžýÕÙ¿íþ¦@¶÷þ=‹Tå«ckªléÃhƒ”$âŠd¦åÁtC£—¨®Е¤lh»n' ˆ&[RòÆÉ)¿9EÐ:·wjï—‚VÍŠj%›Ç~ÿ䪻{gù‘b6Κ [a¤…6’¹¶f®¹„¡ÝÑøÁ’’XL‘KÅ(dã¼3Uçàkïà7¦žŸýãÎGB¯V<Ä€ vµ·çÓ?ý‘ÝÕs÷æuýô÷•™ªÌ:)¸"íKn3o¹” · ˜­sðÈšµsûkûý†þ  yæ÷¬ dbùáþâÖ'~Ëôl]5ÔK>ŸçíiŸzK#—   ä‚¡²M£1Ç¿NOâ9ç_™;ðØCí©¿ŸŠÄ;€±®´vë®W{ëp¢÷ÖuMWd’Šr—MËõ ‚‰F\Å0šTÌ0\¶pÛMNž9‹ïÌqýdÜ™xùàÑ9a]ÝœrÂæÌaUÛè´ƒÞr>À\Ëb®bZ‡”3‚T,äÍS“´ÚñÆÑ§Æ›'ž{hE‘_Úr€Ðj¿½ïxçÝþÂíthµÛØ2Äh^ÝLè³BÜŽKÇð§ÿÚ9öô«Qäï‡Å¯d!B•(Ä-e£$´}xïÛˆÚ€ïA2 –¥°…x¹„—Ï_êN¨-ù¥,$!ŽF‡>RD]~ÙÁü.1: …R™Ì÷DõÖ‹ ]íRªD,Ù«¤@ ñ|ú„”%È%™¤…‚f;àB+˜?åt<ƒ@ $ íþHÇ»(¤P–Òv;XhòiE)g“´%^b€|RÑ•ÌÌùÔ·£A+”!ä ó猸6€L&²_IÀ„t%+Šq1‰ãœ>0×Ö€!›°(ç}EEw뢄 0F³a•¾?ç{æÂµ˜ìèŠBˆ.Û) Ŭ¢Ñ˜œÕ4Ú!×:ã×ÿý¬0AàçWoŸk¥We’¥¬¤˜QXBc[!D:S+»<3qM=HT„%Ó–„Ù†ÏLÓÐly„¾sܯŸ~úÂѧž&Œª¬ß›ßð•mAaÕŽF+½.•ŒSJ ,K ¤ÈˆT¡Â”%3 ’ŲÀÊN7 nÇE{Îa¿þÖž¹¿î~Á¿015•¼{´9½o|"–ê{®kó×ï Kkw8­Ì-ñDB •°­xªºd§/õBÄSýB*ZsçtÎÙS{剸Ît$ìÑt °ýÖ¤;ý⣿önä¶°gÓ*UÚŠZЄf9*ôSÁÄŸ¿<óÒwþ4"Á… ÷uÈü¿a‡ùš[;øø€ ûþ&•íó£ç+»}ñâQd2ŠÚ[Dx±!£u}˜îbÉÞ“ñ>Nd$¸á«ù¸q…ÿÉÓ^|QIEND®B`‚nixnote2-2.0.2/images/fileclose.png000066400000000000000000000003721315604104400172010ustar00rootroot00000000000000‰PNG  IHDR ';6gAMA† 1è–_±IDAT×=Î!Ka€áç»;5 ±ÃÁò@¬wÁÿ#,MĬE›qÌ ‹&«pVa³tÌà,³(n»;ÃÄø¦÷ 5òLÛ.Š{B-ï$§k,üXg!ËÜmÄ[>°iâ³”Çéu#M]šXwîÑ4š7­c=‡*7ž­úÚ‰€±Jd´Œ8ò4·íÄ­®¶¦ƒ¿Ñ®¡ZËд”Ç/¯W³òà]P{ó­:.úῇ%þ‘j=Ü^œÄIEND®B`‚nixnote2-2.0.2/images/fontColor.png000066400000000000000000000254151315604104400172060ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aË*ÔIDATxÚí}g”Wvæ÷ª^E¤ÐlF‘’8T HiFI£G–¬¥‘Çc{×kïz}vgí]{ÇžñÎÈ=Á’¨DrHªÅœ›™bNM²sBŒªzo€:lª)t“ýI U…«º÷Ý|_‘®ž>\MpêÞýdÍ’¿ø›ü®©¹í‰d Ý{ûšwþá/žâœƒóbôËõ¸Å×BLÓTÞ[¶æ»‚ x€1BYÂöÝ[½nû-•¥¦a{¸_ h,–,ö¾4HÅÆm{=pøÄµ²,sEÕaipn!Ø×O6î\òÇKžkŒÅ“®|1@÷]·ã…¦æör]•AUSfÒíŒYð–UCw–  !žL‹,_·dÑ76P*9þJõû<ÅÃeƒ@8àX½nÇA$°,•Óáö–Y…ª3YÑP˜†¦£» *26nßûðgwÎóz\L‹ûr. ¨Ûue€®«Xް凎žš%+2€ª©³  CmÎü)h;wF2®ž¾vó®×ÿ…GÿÈ ]y ]ýâg‡ „€".]¶ömÌ‚§,_Y–5¼á˘Uw¢´¢mM‡¡Èë·ì~þµý?ÕUem¦uåÌTUäbá²aKãþ{÷¾U‘$Uu³ R–iŒü%ÎQ˜Š®–S`ÌĹÖÎòu[v¿¸äåÇÿo°çóã7É’p jÊLP*ÁÈsýòg8Ϩ¬"àà6' åôtœ! 'Ï´ÖnÛyðÙ—žzè‡ÑX¼Ø—ý…A=ž‰Ÿ @ðþ²µßN&ÓDS%¸JüðWNi™Ãˆÿóèo^ø‡e™pzJá*)C¸·œs|°bÝ·žÿÆý?q»Þ {Lü¢P*Šèêé»usã‡4Ucª¦Î†$+0G üdüÿ|ýŸý<D@YÕT„ƒÐTûž¸qÕÚm÷Ïž1e¹aNìòq¿²\]Å'«7½Ù‰ŠŠL¡;=¨¨®cVÁì,þmb%xa ˆƒq.o9tg Ñ ÓÄÒëÞþË?~m¹iX˜È•£´¢|bWSJÑÛž¶}×çOÈ’f™¨¬™MwÂ0†êþáÕÿ#}p*Éð•×¢%‚,IhÜsxq(™?szݾTêâLã´Äí*ö.p»t|°býëm½%º¦€Ê:ªêf‚±¡:!þÍŠÿÁ'μñ¬šÈT uµž‚‘N"îWW|¶eÉ_ß0÷í‰\WI]8H)E(ñ/[µñJE0Ë„¿vœîR˜–‘#,Ï{Ïÿ3>KóÁ^Bfgv`Èë £åTYÆêu;ž½ïîKE±y¢VŒQ]Ÿ¸ w>{¢©¥Æ¡« „ zê5÷®"É{Kî߆Àykÿ8cð–× §ó˜e¢¹­³tÖ=/?°è¶¿M$'¦-E[;º‹=†K¼ ªï}²f‰=û-”¦Àã+/¨÷#„ {YÚHøAç5‘ÛY°Ÿ1Õá†Û[†`W DAÀæû_{î_ý¾_tG›xb€¶wô{ £ © v8úðÃ'¿"KP5eˆHÁ2Y?Î9L# ‘Jy"}ë‡B©P(þQp<çDà-¯A¨§á8râÌÌ}O<ùøCwý"KL8‡€V”•{ £!€$IdÝæÝo%Óih²¯þŠZ°ŒßO‘NâÔá]˜>÷f› Ø€ÈEþ0Hï穉ÁÒsn™pºKápyíï…Å>X±þ'YüëR¯Çœh¶u»&^(XUdìÚô®­;ܧ)28·P5e6DI†•qýADoW+Z›Ž ´¢þÊ©·Ä~= ‰ ‰ ü-"¼åµˆö÷ÚcÙwøÎ† w××U­hÅÔ5Á€€€‚~·~I44U†ÃåEY`*X.*G`š:šO‚1 Í'QZQN`ëuùéàÁ†_þ6»Ž Ðx`œÁå-ƒª9‘JÆHXºbÝ[ß}ãÙµ±X¢Ø·hT ]Ýk‰QÐ Ínذ㚪€Y&*jf@Qõ\½Ÿ èíhE¨§TRÐ×ÝŽþ¾¸<>XÌÌ1Ï#la‰X¾j@Þß.!•xJ«ÐÙr¥hÜsèké”qM}màhʘ8uƒôÄéæbá¢Á8þã£ÏÞìëëwȲUw¢²f:x&ðÃpÆÑvö8˜eB¤ #…®ÖÓpy|ndf¾\` d7[,˜?fÁã¯B°óLÓ@gwÐÙ°±ñ[þ‡¯üi$:q²„´²b┊ˆFã•[÷¿ b¦Ñs n/,ÓÈéçþP7z»š!ˆ¶w Š"z:Î"0u6dUG¶:,?08ð“Û6ˆ!ò?˪—·ÁÎf(²„e«7½øÆKÿ}©ÏÓYì{uÑ÷Ô;ABÁÙÙÿ« ;_8}¦µÒáÐ@A`Êì‚J £ùŒt 4ãþ" •ˆ¢»ãjêç‚s3wÖüÙ?Øï2ë 2‡`€Ç@¸·D`8s®½jYægî¿çÖ6'H–pÂ,AA2•Ö–®Xÿ†HEX¦òêip•”Á²Ìœžˆö£»ý,A‡ °,‚ž¶&T¦"8g9 Àù`ÃopdphÈçPu7t—ÑPD*â½OÖ¾qóWæüزXj"tÓP¤Øc¸ 8E’°aÛÞÇ=5G‘ó?‚Ë0aGñºÚšˆE §3ô“üÓÿý£¿4M.ÆúûÐ×ÓÕd—ËyPÞ`@:ªެ­ÁsÒÅSZ…h¸qøXÓ¼SgÚ¾~ß7-Å“ã>UL÷^?mJu“1Ž—¥ã¹œ‰s@|°|ÝÛ}ሢ© TÝ…ò@=˜e …Yèh±Ã¾¦Épíìú“·Ý|ý‡=Á0<.fN«Ã+Ïz~üéúoÅI5Š#ØÕŒªºÙ!ßâ³¼1 .È"—0—·á`f¡µ½Û»iûÞWÿ൧ÿ{dKºm×ÁbaDˆ¢€d2]³rݶgdYgüUS¡:\v£g†A"á^ôuµBE$S&¾á;†aDCá~T•ûá÷zP^ê=²háMË—._û´®*èíh†¿j*†uù º…òþCþ±r®’rDC]%'N5O]µvÇãwÝ6ÿgãU ÐÒqºJ˜ `–åþtýŽ×1ÓèYY‡Ë–!$baôvžD¤)|íÞÛß»ûöùÍé´AÐ áÈɳ ¢·ËñéÜYõ»ö~~l$‰èí<OiÕ—opçPþìÏE ó{ ²¶· è.¨±ˆ@ðÛ>}kÖôº_¦ ÃB`ÜV;4Ÿ¬ÞôÄ‘ãg¦«ª € ²f@¸½Â'·;‚zÚÎ ‚"¼%®ÔÓÝ÷CU‘!Šü¥%¸NAª*æ O<ð£]û,‰„h¸Ñþ œn+d€œÞÏI€Â–³ Õ8Kʈ… KŸ9uk{WÏ·Ü0we"‘w¡q¹J!è{Ÿ|ö6!¶‘WR€ÛWË4Á¹ý‡T2®¶3ñd |uᲩՕƒ¡þ\¶O–%”ú<6ÈßyÓÒ™ÓjÿêôÙ¶ZI$v5ÃáPƒ]ÂyeãzùŒ‚ûY4g dÅt*†x<‰ [Þxàž[Wz\ÎaËÕ‹ *eêéÆAÀ†­{Ø}àØÍ²l¯ðU^= Ds¾?!"‚]MˆGCœ=°øÖ÷†úyÖ³±³ƒv<À‡Cë{pñm¿ú§wÞýsEVÑßÛ‰d šÉ²½ ª®€d¨»ˆŒ[ª{üHuF¡i 6mß÷ðν‡çù¼îã­‡`Ü-‘]áë·~úf2tE‚îòÂëØ?‰lºZ›¤M·Î›½­ÔW²æLs@D"@SÀ4LÄ2K¼‰¢ˆ¹³§ý¼ÂïûÃp$ê°¬$B=m¨¨™Y Ü>Vø9S)4LIYÖžÐ^D‚í°L}áˆòÛ–<õè½ß±+†Æ º6žú8dI¹֎·í{XSìFÏòÀ4PI¨øDƒ-ˆ„º3eß/?õÐçΪ·,ËB*•FO0 Ó² LPî÷¢Äã‚( På袅7þîÝ?{FW„ºÛà+¯… Š®­F >Ã…Á#»•Lszíë€( hÜ{øÙo>óðßTø}mãI Œ«µ‚ ‡CÃO»ì­p$J5E‚âpÁWQk~¸]·Ï˜…®¶&;ðc1\;»þØý÷Üú‘ªÈˆ%’èèìcÌ^+˜Û…$¦i!žH¢Üï…®ªxêë÷þð“U›ž!HÆ#èï놷,ÆÍ¼Æ’âg>ž{![˜5 î.E¬¿’Àq¶¹½lçÞÃ/¿òÜÃÆ1^¤u9Ç% -íõ 럔e Œ1”–×BÑì;DDCA„{Û!ЉdO=²øßDQˆ>Û†h,–]&¶àÜœsD£qD£q¸]Ô×Vn¹å†¹[77î¿C‘)BÝ­pû*ò‚=|D£oðyóß‘§"$Yƒª¹‘ˆöAE|¼zãkß|æ¡úKK"ã%04®T€ ,ûtË«m=%N‡ AíÕ=óêý'èno‚e00kz]ó=wÜø£¶ŽnX–‰ügŽ„TÚ¥búk÷ÝñÏ»ö¹ àB<Ú‡x¤ºË ƬâžíÀШaö}À^´CšË‡d,E–pèÈékÖnÞýÐ-7Ì}/=N GéŽ=‡Š=6ñ㥟¬Úøš½Â—…ÒŠ:hN½ÂW¦ø" #ØÕ "à–…ÊòÒæã§Ï-ŽÇÚàYßãD §SOD¢1gÂ=mМ%9o0ñ FFýù$ΠhNȪŽT2àßß_ùvE™ïýD"ÅG1ÜË*Šãc¡0MS°qëÞ§ÌÎR‰ #A?¿^p¨Ñ—3þ5›€ P(b}ÐT Ÿxëµ'gNŸR}¢Ø‘Aêv÷ÙÁ„ï/[÷f:e@Seè®xraß̵L8Ü>Ìšw'²k¹ W·—ŸÀÉÅðpä‹éüäËN߬„) >Â<ÿCâ…Ç*š‰H/`Yèê :?\¾þ[K^ùÆNH]Bºcwq@JEtvnÛuàU•Á9ƒ¿b*QÊÍþ™$Bé ½›gœå%f0„ÈùéÛÁ–}&lœÓíø:Á‚^‚U‘o2ˆ’Yu!ëƒ$IødõÆ—î¸eÞß+ŠÔSÌ'iQÝPIĊ϶¼‰ÆU– ë.xü•`–™§o3w(héÊG¡ßβéùŸ÷wþç|«}ðo ‰ `x✠9†q@uxЇ!KNŸk«>zòÌsO<¼è_ŠÙPJ+‹øì`JEt÷†fîØ}èqû™~ ¾²j»ÞÏ´kýlP'#&É " ž=Šƒ€ƒ;ŸSàöçÌþÌIl³Kƒr¢ý.d¢p™9ûws^A•pÞ  Ç€%’¢#´<òÉêM¯?÷øWÿÍYæKZE²h‰§8õ€ÛéÀ{Ÿ¬}£³;èÒ5”ª()«É…}³Vw°F:™‹îåàd"¶y%;(”öçóqÙ3òAûƒê,$«özƒÀ )0²šÈ?«Žxö²æ‘ŒAUdìýüø [?¿oþu3W«6“ºŠ´V°$QôöõW¬ølËKÁ™·¯ªæ„e $}±ÎßkÛ“‰œ÷#·\¥ðfØŸÕŽÈ›ý.b&I$k%Å.ac ?ÿ ©O¬(Ö©¨£ˆ«„­^»ýùSgZöC+|åµàܸ‘àvµ€3Ën1­1,¨Ù”$ HDÃH'ãduDAâgó{ƒ$ÕÓHB¢"ö:~_Ú0L¯¯ÙYŒçѳ-_úfªsô¥Ë×.¡”‚1¯ªÓÆX®#•ˆ¡?Ø "`Œ¡¶º¢µÔëigŒ‰—kdcädSóu¦iIÌL#Þß ¿ºøƒ|ý¡b8wq@%Hªéx„˜èíë—7lÝûÚŸ}çÚÉDêÂq1=ÛÜ~É_’D1ZFSìÚäуGOϵ?%eÕvª×b9#«?؉t2‡š~îñûŸí öí“(%—ãF1ÆPVZ‚CÇNÿ¿VlxISeÄ"A8ÌöaÝHpHŠéD?D0´¶wy?Y½éÕß{þ‘ÿi\¤`œC‘%Xƒa˜—l}¡‚@Î866îÇõs¦ƒZñ„m¨šŠ»>¼sïá…J¦ÞÏ[VQ¤¹çúE¨ ÉX?8E–øS_¿÷E oÄ”ÚJ¼ó«eـݘ!™JãŽópË sA)ݶà†9[×oÙs§¦JˆG‚М¾ üüÜûHÄçC‰ŸÙ QR É:ÒÉ$‰âƒë_=³îû"Cì¸Ê®®Ÿ3;÷AwOè’'ÄbJE´´w ÐT%c L"PQ?Z¹á;ÉTª"AÑ]pzýöꞪ2f"ÜÛÎ9 ÓÂó®Ùí5ÓV·vt᫘6%€“M-Ǩ •1]SqÓW®A¹ßJEëÉGýxÖÝw" Œ!•ˆBѹˆÁ"çê‘^Îo9 IsÁHE!S 'šš§?Ùü⢅7þà‚· UÛ T/™¾°¥Tc é´ MÓ ÈEú’%xœN>Þ´pÓöý_ÕTà%þ¨( 4ir‚D4Œh8h7‡pŽE o|§»·/ÝÜÚ‰³-¨®ôc´;LË´©H’„ÖŽn´vtã+×Î\6{æÔ¦TÚç ‰h07󆃒CÙ0‡‘A¤DIËÕ®\»õÛ¢ ªN]‡®©#¾4M¢È–¸_d/ï\«íM(Š Y’†¼E†,KøÍŸþI<‘ ‡¬8à*©€e1;ýš¹ p°Œ™H&¦O­i¿iÞ5K#‘8 ÃD2™‚Ó©ãú93Æädgn©×ƒ“MÍhjnÉÓÍ…#}·ß|Ýox&Œ…a¤“È0®ÞàñÐÄÑ_åv"LVÝv˜X•±ïó×í;xì ¯ÇUQ  z©Š‡ª‚€À4­/düe1&2T¢"šÛ»@)Å ×ÏÂpþ¬ª(Ø{ðØ-ŸmÜù5MUÀ‡Ç_ *+)_H§ˆ…z@ˆÃLcñ7}x×mó; ûæ€(ÜpÝlüðgKÑÙ„$Qˆ‚`s…‹çiÎ9ÒiÏñàO—ºå»ýј–d,‡§ÙNâüLd~ýÀÅßÞÏ@ ‚¤À2RààxoÙÚ?¹÷®ïiªbÑ™…¯ƒí](£4þ˜u…H¢ˆå ›1}j5Òicw¦Òiüèçþ·XH”æBF"¼e1hš‚õµ¨©*GI‰ Œ hxBÊý¾“÷ݵàãß|¸ú%]S‘Œ… :JAPAùéßQ€¦v`È2RP»ö¹içÞÃ/^xã'ñDá3©(q¶¥ÝAŒU5÷˜¶ „ µ­ ×^3=Ó‰“Mã øpÅúG6î|DUd0Îà) €J p b‘^pp¤Rn¿ùú}Õ•e»CýÑ\ì_¢±š[;Q(Ç‚ëçâ\‹½,ß3Þ‹ Ûöb×þ£÷G!Q¢83bŒÁb º¦¢®ºSjª ª2vî;Œ2¿~_IáTEƽwÝüóå ›^0 K0Ò©dÍ5@ä‚l#?¯Zº+’0h?˜•Fʴȯ?Xý' æÏYa˜–•>j‰Ø´c/þ1£ÙØ2€ –HâDS3fM¯ËÍÂX<¡ý⽕ÿ#6ˆªJ'\¾ 06Pðb?¢-•ˆæ˜©&P¾Q×ÕDÖÈ’eŠs-ؽÿ(ÊJKؾ†i‚3E‘ñÀ¢[±à†¹hÜs{C0,SÛÒ×mÂ×ÕTB×T˜¦Ó´`1†æÖtu¡i L˲¥d™®›5­nÏþÃ'o–ÉX’â%ñù°ÄÏ2DHšÉHEÆæÆý÷¬ølëK¿÷ÜÿÈÕ `ÃÖ=8r¼ Sj*Ç'ˆ¢€¾p?>Zµßûó7!Pûô?øÙÒ¿hÜ{h¾¦*8¼µ T*|° #•éþ!Ð4•e¾Ýk6íc n§Ž¾p?Þ_¶7\? #¤±S©4\.¾ ·Þx-ví;‚ÝŽ¡ªÂºš èš Ë²ß¯OìšD¦…d(‚Ú@9J}% „@Óó™ÇîûÉîÇn–% #ƒi¤ R¥0oqIÄÏ|⠒’ŒÂ2’0,†_-]õWO>rÏ2·ËÙ–e!#5Œz7 ½™.‡†s-hmïB0yä§¿YþgŠ,s§§ Nw˜irŽ˜eåR¯ÁÌiuíå~/â‰$.S”$U9ªkjÜåÔM§ãüE-Ù‘ Ë)Ô2iAÅ‘a˜Ô¡k²eYŽ Ûö–ÕUW<8°?ȹ(Â_<ñÁDQ‚¬— ë…¢È8}¶uÊÿþþ/^líú¾¢HhŠÒ©kj¯Ë©›šª|a•@6ïØž- ¨(¢/™ó“_/{±ºª¬¾'šr¢©åÚή^¯Í$'ÒKü5pûƒÂ£ÃœYèn=d,"ˆH¦Òö¹`3›ÇíLyÜŽ^Ët9õ>Ûî †Ã>p×;/=ýàúÁ¥U¥8ÛÚ_¾·Ã-†A@î£ ˆ'’8pèEz3)kÜsøöh<>°šHæ÷„Œ„EŠd±D Pt¯Ý›X°žàð÷é|tžø6q$ÍôÉ~HT€$Ù9—“M-SŽž<;…1Ó´ð§o¿Ô¨òo2Œ‹_s€s@ @¥OU%%*Úû°Ï<ŠýbNÂa1Îçpfž>Ê!"d]ƒîòAw—B ݽA¥˜Ãœ˜A)|UõHÆýv >·—„·L0f‚»»–!³àˆU•„ضÉpµ„KUeXÌÊõ!‚H!R²î†(©yÄYì_œ:Lüí’î(©0SQXf°,HTÌI2ÆAH&%’ù•^ º,‚2Ρ«"> mÁĨòìÙbmÎ9D*ÃS€¬:@%%·&¾Îæ 2 VÑ\Pu7³ÀLöŒ7Á,–™B4Ô fŽ]5-!ŠÃ›W†N@D‚@3M)Ò@_Á%êûÁD.$ΠíœC  dª€Y†mxZÌd?8ý*#ÙTÀ§ASD0Æm71Mð©hïK‚±Ñ[p”Bwù ˆ4Ó_Ÿ`‘ó}í¼û²™:•2Uû l÷‹!éƒ5† € DÊœ¢œØ N ½4Î3݃ì’éJ°·ò ¯LyÈöìñàD ‚(ƒSf:6jà Ê«æˆäÅl& ¨òjh&FipËB"²e4£zóoçù³„3kL«‚88ŒT$Û 2âQ#îqca«ÂfþyOÇβMOw]_åÕ ˆ 1Æ¡É"ª|jÆ0¼¸À !–™F°ǫ́où0gaÿÅlÿ‚`‰pרïr‚à"”?ç¶]WåS¡É…Ɖ2ž‘>[Xl¨QŒ0ÆÃ4R¯_vMs†ö†mŒ(z8ç0- Ô*6 !‚iZ(¸Ž ‚Œ$d½¡án(Tù†Îü,èð'¶m‚J¯Š¾8ƒHi%Øn Ë©'ª*ü}¾lÒÀ©k‚C׆J,hš ¿Ï Y¦C˜”¤*Ê}}®„Žb_ÇhÁ8#.§žpè/='ˆ",Ó„WF$>uk׎ü œCÑtx¼>8]»A#ĤRi÷é³­„\–2ý‹†a˜â¼¹3:j«+ÂÙ@S–¡ZZ[щCÖœ ¹…r¡æÌD"B*…¬:!)æw|O(Ø®}Ý‘þ0BÁ$q;‘öÌE§ƒ @JÆÑÑra‡ºË!绢ÄãQ>Ô‰ŽŽÎ\oáкÌL±,$c!¤3Œ][`¬Ú6*D£ýˆGÂHÄ¢ µ!{~à<`Œ}á¾´±çŒ±‚À‹ø’v'×p©×¿*úhqÉ!ãÍe"„ŒŽøö—&ܬPsèDæþI|qPÃ0þ€Àøz”Å$.71 —à2ÕNbÜä„€±i3™ÄDCl|Yr“øÒ1ÉW9&à*Ç$\å˜d€«“ p•c’®rL2ÀUŽI¸Ê1ÉW9&à*Ç$\å˜d€«“ p•c’®rL2ÀUŽI¸Ê1ÉW9&à*Ç$\å˜d€«“ p•c’®r˜l ¹šA)€ €‹{êã$®4ôÿÉ/©µ£ˆ\IEND®B`‚nixnote2-2.0.2/images/fontHilight.png000066400000000000000000000023551315604104400175160ustar00rootroot00000000000000‰PNG  IHDR D¤ŠÆÖPLTEÿÿÿÙjÙjÙjÑcÅZ¹P­G§B§B­IunÀªkVsl¾qk½oi»§Bmh¹lf¸TT¢c`°TT¢TT¢hc´gb³d`°ÃY˜[IÅZTT¢TT¢TT¢Ã€,Ý¥ ÿ¼ÿ¾ÿÁÿÄÿÆÿÉÿÌÿÎÿÑÿÔÿÖÿÙÿÛÿÞÿáÿãÿæÿéÿëÿîÿ§ÿ©ÿ¬ÿ¯ÿ±ÿ´ÿ¶ÿ¹à‚îµ.àƒýï–ÿþõéµ]ýîÿüêÿüðÿî·àýëmÿûàÿúæÿï¿ÿ¾ÿ¯Þ‚ýèNÿùÕÿøÛÿî¶ÿ¾ÿ¨ÞýèIÿøÉÿ÷Ðÿì­ï”ýçEÿö¾ÿôÄÿê¤ÿ¾ ýç@ÿõ²ÿó¸ÿè›ÿ¾ ýç<ÿó¥ÿð¬ÿë§ýæ7ÿò™ÿî ÿéœÿà ÿ°ztÁwq¾Ï½kÿðÿì“ÿæÿÂxsÀÜÝòÜÞó¶µÛãÕ¦ÿä…ÿ­Hwr¾ÝÝòòõÿñôÿáä÷­¬ÕÆŸRup¼ÞÞòóõÿñóÿìðÿçëÿºÁî\\©¿ˆ=so»ßßñôöÿëïÿæêÿÑÚÿÄÏÿ¨²îZ[¨O=hd´ÖÖìõ÷ÿåêÿÒÚÿÆÐÿ½Éÿ´Âÿ‰Ñ{z¼æèúëîÿäéÿÓÛÿÇÒÿ¾ÊÿµÃÿ–ÜpnµqrµØÝùÔÜÿÉÓÿÀÌÿ·Äÿ—ÜŽÇîñÿˆ‹Ålm³ÃÌùÁÍÿ¸ÅÿŽ—Üaa«ÇËîÒÛÿ~‚Åik³³¿ù˜ÜÜ–¿°=\]¨°¹î{€Å`b®ÿçÿÌ·ƒ=TT¢Ëgæ§éœëÛnã‚å„ç‡êŠëóÿ¶ÿ¹ÿ¼ÿ¾ÿÁÿÄÿÆÿÉÿÎÿÑÿÔÿÖÿÙÿÛÿÞÿáÿãÿæÿéÿëÿîÿ§ÿ©ÿ¬ÿ±ÿ´ùoÙ?tRNSŸï0ï0ï0ï0ïP¯``````¿Ÿï0ϯßÏϯP@@@@@@@@@@@@@@@@@@@@@@@@@@@@'tKЇIDAT8Ëc` `Ę˜YÀ4.Lö¬lx09:9»°sàTÀäèêæîáÉÉ…C“£—·¯ŸP6LŽAÁ!¡þaáØ09FDFEåc¸±ZÁ䟕ÇTÀ䘔œ’š“ÇPÀ䘞‘™…GSÀÃ똓›—_—GUÀWXT\RZVŽ$¢€¿¢²ªº¦¶(_“GV ÐÐØÔÜÒÚ’dÄT ÔÞÑÙÕÝÓÛ×,P c&’ ¦AP¢2àÎÔÝ/òýßŬ~©·ØüñA7ô»iU¶þô@êÈFÂé'À‰zÁcýd[_è}tæk®°h÷+%ó*‘‹'p3%lªÚÔ§Ó—Ïîqú`ùTXYab]^…ðï]¡„C[ýVüiñÛ¸´õ øbpØÞçŽx~Œú÷9>ø”ã.çè.=åM÷}@zÙem݉½[7ZiŽÀv‘“E1MR„µÜÖF×™ñgºyIDATxÚí›éÔDdzÙÍ’"â½j«è¦j#Õ¦V1TEÅâYѪàU°ÞxßZev©UÔz!xEAñª(žx+ÞçlùCÌóL~¿n2Ï|?Ù>š¶¥”®ë©Í GÍ ­e ÃȤ6yŒÌÙlÖHmò™ešæ(z®fôVc¶»Í¶)N^åØvÛÝaÌŽ;ÕðòÈœ™ËåLjnç]vE%€Öo‰nnÇò’bé#4áàŠyäÞämÇuÈ\ãDÐn=äÐÃ&5E×u\—ÊKŽ~Ä‘“j L9ºBž– Ÿ ËsGæŽ96Ð?îøªÓbÇšÚOœê;8éäy©´ìœwwÈ\Ç)¾þ©§ý7-Vlô4ÿzÓO/×ÏøR†™³¢g£æ ?ÿ̳Äè{Wœ1îçÙeú†áÈd͵7:Aÿœs]QúÞ˜Ùêé—ЬxMÊiü ¤¬iFùçuÁß¾H}Ý¹ë£ /¢b¦é€ÁÈÒµñbпD¬¾ë^ {r6U»rf6?¥ØÙP‹õ/»\°¾{Å•Ø@KTw¬œéëêéØÙxì¿«Eë;ú5°¯ ë”må‚Ï]OÇΆëày½^¸¾v¸1ˆ9¶žIeGÓMXÿfñúšv 6pksì<ãL¼ ï—9ôµ9ØÀíAÌaIÎx¿Ì ¯uc゘ÍÒwïÄûõ. úÚ,l`nÅ<:룂}m<…<}êEA‚~`€§ï ˜ú¾O_©JÃl}Ûϧ ÕǼÃÔ·?Ÿ2 Vß3€kœÃcÂÈ€`}m>Ö/q™­¯/&á2ah@¸¾ÓLÂeÂÀ€x}·j— }ôݨq\&íôÝ(f€Å„Õ+Aß™3ÀdB¨—E úú<Ú› ¡^%èk´&„zY” OHbB¨—½2˜02È„P/Ûe0!1Ì„P/ 2˜04ÀaB¨—LPL¨˜P1¡bBńР*&TL¨˜°"“Õ,ìCá÷d’™0Ô¸»ŸÎìŒÍIeB¢î¡RÇ—ÍIdB¢î¥r•ÍIdB¢&QÉ÷ÕÆç$2!Ñhi¢Óëî ·Xìm/d3!ÖÀ£±N1¡bBńР*&TL¨Þª÷„ê=¡bBńР*&TL¨˜P1¡bÂ-• °e0áL¬ÿ— §`2˜ða\ãá2ál`‘ &|׸Å\&œŒ <&ƒ §á·„Ë„ðâ|éãâõŸx׸~.ÖÃ6xJ<“= 5¶Ë„uÐãó̳¢õŸ{ë¿0ÈeBmÔ‹E3ÑKPã—k\&Ô^^÷ë+¯ŠÕm%üo}‡ÆeBM{˜dÕj‘úo¼ Öš¨î2™PÓßzzìV½C×éª{ì*ÆÞõõߊbL&ôzßo…ûµ¶{0ŠUÙcX1öÁ‡ðù£¶ut^>¡ïò£à{¥?"±jz,+Æ>ýìóà{ªî„<²7ýžÐõa“àÚ/ÖÏþò«êzLGÆš¿þæÛïV†}— ÖFµ!è‰ý~ ê•,•~¨¦ÇvdlCÔ³‰Ð@wÂÚ¨6’žà»BýÞ%~ú?ýÄÍþÚþóט°6:¨žè¦ +¢ágv;öK´~îš¡„µd”õ„¯^6=X?ñפ+s[;{~4QG'gATA!sW7wOaQ/o_?QdA1S[·€À `qdQ‰'ÃP›°ðˆHI$Q)³¨è˜Ø¸ø„Di„ Œ{RrLJjZzF¦,BT.+Û&'7/¿ 13S&¨[XTVRZVž™™©Uªð­¬ª®©­*ÍT†‰ªÔ7ä565·´f‚ÔÕ¶öҎήî° ÌµÞ¾þ Ê!‚P#Ô'MNhI˜©¡¨™‰0B:sJOy¤–6P^a„2H—Ä0e¨:@ZWæu ˆz™šúÈ%™©T«‡L ÍúŸP ùÆýƒIEND®B`‚nixnote2-2.0.2/images/grid.png000066400000000000000000000001421315604104400161540ustar00rootroot00000000000000‰PNG  IHDR@@‚LsgAMA† 1è–_IDAT(Ïc`€úÿ`øo€£îîi_ýµ¨DIEND®B`‚nixnote2-2.0.2/images/hline.png000066400000000000000000000001731315604104400163320ustar00rootroot00000000000000‰PNG  IHDR- Ì$¦JgAMA¯È7ŠéPLTEÿÿÿЉ‰ÇEU®tRNS@æØfIDAT×c` þƒÀ"B%ô©œ0IEND®B`‚nixnote2-2.0.2/images/home.png000066400000000000000000000013041315604104400161600ustar00rootroot00000000000000‰PNG  IHDR# 4o¡gAMA† 1è–_{IDATHÇ­•ËOSA‡¿ûho ­à»‘DÔšQÃģƸ jâÆÄèÖµÿ€k%qaL4aÅÒh"qGÀšˆÆ Ò HD! T(-––¶÷5.*\ÚÐö¢þÎjfî|ç̹sÎ(T–„vïR£/²ˆÍ?H¦®÷퇻ñ²ªáǯúPK½U’BýË¡šý&^½å ø?% Gˆ£;ª *Û^S—tod²íD^N`Ö°²#—…x|ûÞÏêuËdIȃQ­%G–,9ØQ@¹h´½Í=ƒqŒµ ƒî_«Ñ(ÅlŒñµwt>Ÿ[ÝòG:zÉLeLÍÍ[×:clÉ—ÍD)F"p§«éF Q!÷vŒL°«7Ô>K5ÂéA$Ç—RÙÚ=8¾ˆUÕ®_ÿâœÛÁ¨J¨g"·+éb‘áâ•äÔ·ÏÎ+È ?žˆy“˜®Ì ÅéËúüø–ƒñ6œ|ôqJJ¹Š¤`&Kœê™ñ&((h¡³w_M’Ù¤`Ë4¯UGß`Hø©¿ÿ5^SîbU–B uû?4¶ø·ÚüY<|²$áe'­r[ýQÙõœW²‘×.˜Lù‘)ž X+K#âCüT1HµÓ‰(!ÎèŠëóØñ>æˆñ$¶Š Ç4 ‚„U²®)~f‚T¡ï¨€@G'MÐîm æ™[í$NM „‰{Œ ©©¢Ò´6±ŠF%ë?`„a»ÇEMÇid«ÿ‰ûBxñÓɃ±ÉÄûg¦nlzf¡ŒÓ×?wÑL#µUAÁ “D#½Fa {QKå»l‘!Æ,)'ÏÅ~%¼hxªFcG_ßõZG‘=~÷ÚÖIEND®B`‚nixnote2-2.0.2/images/htmlentities.png000066400000000000000000000012371315604104400177460ustar00rootroot00000000000000‰PNG  IHDRJ~õsgAMA† 1è–_VIDAT8Ë•ÔÏk\UðÏ›¾™:ÇF˜†@6ÉBÐÑFi]¸Riu¡Bwþ€ Ùt¡ tawnÚ.ܹѥû6U+H#H1õ/¨Š¸Jkˆ™‰3q2™—ï¥é,¼gsî¹|ï¹ßs¾çò?WòÀ«HBŒ'e|¶,„ΩKÄ­Ẇ¬¸3³°t!fSÁsÞ§¢ U*¨ã¹`VRÀ£"®Ú "É žc0‚”=XËÀÑB–Æ0xÔHøF¨RÎz"uÐhAwJWÝ]]Õ¢Öñ]Kë&“eÐÑÚþÙáIûáf>(oiéüø¶ùØÖN¾X(¡17­RL¼r×P ŸëHD@b¬@øÜŠ:ÏÍ>_ÒÍ%ØÃ·À?‚ƒ×ÖËzˆm®ç3(£‹b„¡Þÿrõ?탰IyrèÍ4."@³#hgiCZ.z„/ÌR…ÂÎR¨ïÎûŒû Ã>ÐÆÀ|nQtðIEND®B`‚nixnote2-2.0.2/images/italic.png000066400000000000000000000021041315604104400164740ustar00rootroot00000000000000‰PNG  IHDR D¤ŠÆLPLTEÿÿÿb`_b`_b`__][_][_][_][\XW\XW\XW\XW\XW\XWWTRWTRSOLSOLNIFNIFNIFIDAIDAIDAD>;D>;?95?95:40:40:405/+5/+2,(2,(.($.($*%!*%!'"'"##   _][^\Z]\Z][Z\[Y\ZY][YUUUSSSRRRPPPUSRQQQOOORPPQPNNNNMMMQNLNMLLLLKKKKKJJJJHGFE@>IIIGGGEBAC?=FFFEEE@<9A?>DDDBBBBA@AAA>=<4/+@@@???86440.>>><<<2.,532;;;:::+'#766999543% 888777.,+'$"666333&#!)''222///+**---(('+++(((&&&###    eñ³†ftRNS3!QüÉ!6Òùi$r–„<´ö íÃ-‡iH¥üäÏ!“]T™ØÛœQ`$Ìä ü¨Hl„3É*ö?WuܦGs?<4%(/28>90   ë[ÜAIDAT8Ëc` +`bF,˜ XÙÒÒ3223³²²sÒØ9°™ÁÉÅ›—_ÀÃˇÓþ¢â<î,-+¯£@¸²ªZD·¼˜xMm$뛤ð(nnim“Á£@¶½£SN…®îE<òJ½}ý”ñ(P™8iòU< Ô¦N›>C™³fkâ‘ך3wÞ|m< t,\´X½%K—-×Ç£À`ÅÊU†xäŒW¯Yk‚Géºõ6šáQ`¾ió–­袌`¹mûŽVŒÈEõ®Ý{öÚØbQ`gïàèäìâºoÿƒ‡ÜœÝ=<=½¼}|íà üü#ƒÀ àÐ0?$ÂüÃ#"##C¢¢ƒ¢cB€¬Øð¸x;$7Ø%$Æ'%%9$‡¥8ú8Y©‰ vŽÄ"aÒ¥àIEND®B`‚nixnote2-2.0.2/images/justifyCenter.png000066400000000000000000000002501315604104400200650ustar00rootroot00000000000000‰PNG  IHDR Ùs²gAMA† 1è–__IDATHÇí”1 ñÿ_®‹à"bm†*º7=®Ab¯çTà¡£€àt¹Ø‡Ý‚ ‰ƒ[{@ÍêÈò÷2‚Yò¶‰h‘’õÀ«Àd¦8KîAðÀð€ \A£ôˆìIEND®B`‚nixnote2-2.0.2/images/justifyFull.png000066400000000000000000000002311315604104400175460ustar00rootroot00000000000000‰PNG  IHDR Ùs²bKGDÿ‡Ì¿ pHYs  šœtIMEá ¢â¶*IDATHÇc`þ“¯›i4 FÃ`4 FÃ`4 †S <ŠLIÉO[IEND®B`‚nixnote2-2.0.2/images/justifyLeft.png000066400000000000000000000002001315604104400175320ustar00rootroot00000000000000‰PNG  IHDR Ùs²gAMA† 1è–_7IDATHÇc`þ“¤0 ´èXt¸0MXu¸0MXuƒ0xŠ|Ûì™æIEND®B`‚nixnote2-2.0.2/images/justifyRight.png000066400000000000000000000002011315604104400177160ustar00rootroot00000000000000‰PNG  IHDR Ùs²gAMA† 1è–_8IDATHÇc`Œ ÿÉ×Í4Ð> V bÃd8…Áh:À£é€$ÝÃ& ÐÁÈJ£€oÍÐ…(¹IEND®B`‚nixnote2-2.0.2/images/left_arrow.png000066400000000000000000000041631315604104400174020ustar00rootroot00000000000000‰PNG  IHDR00Wù‡:IDAThÞÕX]l×þÎ;³ëý±½^cU[ÜT®d×UB¡„Ð6‚¨D1Åöz×® Y@Ú—ªUZ‰'¦i^¬*yhHâxc& MkÔ·¦ ôB”ªRjÑ€ÁÆxý³6ÞÝ™¹·3»ž]Ïÿ,”^ùhîܽžù¾ûsî¹CRJü?7ö¿°ÖÆäËb±¦`Þæ.OÄãñéR<ó)Ðkù6ÈûÓ4_ŠØ\ªç>mm-»ÐßvìÜQ¥(ŠÎLV²À»ïÚb­¿PTïèèð<öØã 3KFà¾ÅÀÁƒÕéÙÉ7ýdoç^µ¢¼"÷›AôpˆD"UŠJnܰ¡1ëð)pýÆØ´ék€RºPÉ D£{¾¡¨ê…ºoÖ­ßÝ´[K&“¸5zŠb½JJI­ EÚ÷|—1~nû³ÏzŸÙ¶M¹=>†D" `o𥠵µµt)\=ÙÚÚÂë6×ÑÍ[#HÎ&O”™ 9r„ýó_ŸýÖSæýÑþýûÔššõ¸>r©Ô¼v€@\¥×b?ŒN’´ H)!¥D’ì«5FB’´Æ€¿÷õö÷”Œ@$ pÞ¯ª mùåýšÇãÅ‘/ ëºËl¡¹¹Y™››ûŽRR g_Jd³Æ-ÉÙY\½z% 4b±Ý_æšg¨¶¶vS{{‡G×uܼu¦iºÎÂÄôô$jjjr ¤ \:îEî^ÕT¤Si|úéÕE®·*ÑhóR<myâÉòvíâ33Ó˜HÜÁR•­a¹9!DΤ£/„ÌûÍiáª0***]Ÿ»b‘Xs cÊ;/6½ÈŸØò$»3q³³IQž•´e•Y›m±Ö_sEýÍxmm-ÆÆG‘žO-_HiË"‰D4®²?ƒ:|˜‡*C…žÑ-°X ž1!ìܳ6:+W ½½½š{ØÙðH}WW—‡sŽñ‰Û0Ma­rD Œ)0MQ’•–R‚@+#î©c\»ÐPß°.‹ªét“V°fÁ/`p ‘ƒ™Sb-wÇ¢Z£­;…ŸÙùüNïsß{Ž%ggÌ Vd‘‚ÙÀ Ìf ˆ@ŒÀ¹ Ã0J¢ä2](mÝ«0zsÿ¾}¼¾¡ÓÓ“˜OYÁ Ë=H@X,r÷ ‚`¶"`°Dàœ#“ɬ^€, —xr% ¨ü©ŠŠ ñè£_‡a˜Ðu=·Â û¹L³@†˜Úš+l5TU+²;¯˜É"®'2=mþtjjò£Gꉉ T…Âà /š.e Ûˆ1³2’¦ikN®AìJ ›ï¾Ý÷ãÙÙäϺ»»Ï?ÿ7ªBÕÐT­hÚ$Ærà­€f ÙˆªªóÕ—^î‰`É3q_oÿI#£¿ÐÓÓ3ÿ×?U¡0¼e>˽˜ åæ0‡*eÞ²µnpËS D_ÿŸ„ÇÏž9=6Ð߯—ûƒúJ®¾Ãr®ÄÀ~Ÿu$döo… fdä·.^¼xµ§§'͹ŠÊŠ10²ý< ž‘5–5–OHUUìXn#;ziµl㓉™­Ã׆Ï8ÑN¥Ò‡«Áæ¢B¶œ(PÂ&¥ª*‚à •p/IVô]èüùóéwO½™˜H¼zìØ«ÆØè(ªÃ5P¹šœ#Â*d•ÈÆcP5 ååËì"%­öët$Öܦ0~ª³³“7Ô7Ðäd©tʪáíÈշ®‚¦iBÀ´-¦˜¿{ó©”}³ÿ×:aB ‰`°©T§OŒ¿×¯YµÎïèÓ…ùÌ[§ÞšºpÁ…ªà³”eShÎ…4MÅúš ðz}и •«à\…¦ZJ„«Âðûðùüðùýøðûðû0 ‰ÄäjªÑ¥Zoÿ¥æŽæÆ¡¡?~5i\ᘞ™²ˆ€A‘ƒ&Žw3ÌÙNA’ÈÚÛ`}7‚µÙ“í:Vºˆ}R2r¶¦¦¦ /XvæK7>ÝÕuÐÆDb¦0­£¢P¹Šp¨¿zå—PÈøJoïÙëk~1Jôqwpp0ifÄΑ‘‘7º»e’É$ª×Õ€sÆXÎ¥¤t2\Y{yZJ€U~ô¾Ó÷“dræçÇ»ÿ¹v 5ëÖCÓ´…ÝÙž+IškzÙý m}½ý'uÃÜÕóûž»—>¹$ª«×ÁWæË92ðx°7-""FD ñþ¾þ¿¤æ2O Œ}pî¬QYB0Xž;YÍÏÏK{>­õð¿¬,DÙÂÁÈåš—=G·CÈ÷ÇÆîlîÜÛ™«§¯\¹â=ñK"ÊöW@È{dW6`Ÿ°ïFÈIèòåËéáááÝ4_{ýõßíxé¥}LMMùì¹® fÚä€YÈ'/Q Ó˜K¿”8Èàû»ž?Tª<¤ë:<óA}&“Ñmà¦pǸév/¥9+¾R+$çFpþÃÞ~zÛÖ[Õáê­™LÆ @»È"Æ0"2d"q‚âö$î˜/A†!H.+»”Ë3Ùp:–t\æ6æ4Q°êÒq5¹C¾œqR "Z*7»0]\Çày1àB¶ðYKù¾›"†”rq-äˆîAëæïn)Õ€Ûb¸-ŒÛU·‹¼Ä³Tšuä7¿v ØüJriN"n$œjˆb8W\:¶N·ü_ŒH¡?»Å€ ïµq¶ÿæ_w¦TtIEND®B`‚nixnote2-2.0.2/images/lens.png000066400000000000000000000013701315604104400161740ustar00rootroot00000000000000‰PNG  IHDR(-SPLTE?@A‹ŒŽfhi:;<ùùùÃÃñ±±«««´´´÷÷÷z{|¾¾¾ÏÏÏëëëÜÜܲ²²­­­³³³âââïïïÙÙÙ¹¹º‹ŒŒÚÛÛ¯¯°ÄÄÅÊÊ˼½½¤¤¥ŽŽhijªª«¥¦§¦§¨žŸ““•  ¡--.¼¾¿Ÿ ¡••–”•–Ÿ  ¿ÀÁŠŒŽGHI²³´ÅÓÚU“°7|œ ŽÈ())VWXoprŸ¬±NŒ¨;y• ŽÈ8dv:w“ Ç)h„7t ŽÈ*c}-r’ŽÈ(az ŠÃ&]t;ˆª q$Sh/]q„µ«­¯ÂÃÄôôôÿÿÿ»¼¾¼½¿äååçèè’‡‰‹×רÚÛÜÀÁÂŽ‘Ž‘†‡‰­¯°º»¼®¯±›œikmg©Çw²Ì1tM¦Í˜Òë¾Ò`}}©V¬ÑÕíŽ½Ñ b€|©œÔí…¶Ìa~U«Ñ“ÏêN¨\w5†ªo¤¼7Xg y›¬YtRNS_ÏŸ_üàØÐÑúÏÝäîàÊÈÐæòáË´óÆÖÜÓ­ÏÊÁÅ¿²º_ù­©¹øï/Ÿòèåâ-_Ïïîëë-/íì-äì,íâ,í2îï#)78<`ëõbiì6†¿IDATÓc```dŠŒdbd€æ¨è˜˜è(fŸ%–•ƒ“+Ž*ÀÏÃËÇ/ ˜À HŒ—H„ $%KJIËÈÊ¥$AäS•”UT£ä¡jiêšZÚ:éºzPýŒÌ,ƒìŒC#cˆˆ©Yn®™¹…e^¾•5Ây6¶…EÅvö‡’Ò²ò G„ˆ“seUYu B‰«[mU]}B€ÁÝ£±©Ù“ÁËÛÇ×Ï? 0(8$4¬%<ª‰'Ÿ&”[ØIEND®B`‚nixnote2-2.0.2/images/link.png000066400000000000000000000021341315604104400161670ustar00rootroot00000000000000‰PNG  IHDR D¤ŠÆPLTEÿÿÿƒ„‡‘”‚ƒ†…‡Šƒ…ˆpruZ[]112oqtYZ\224YZ\{|~z|~YY[eficdgŽ“NNPghk678hikghkDDFWXZCDFwy{xy{CDFyz|QRTbcf123wz|OQSRSUGGIXY[deg>?@]^`^_a@@Bghkvxz^`bgikvwzegjŒ’‰‹ŽˆˆŒ¤¤¨éêêááãÑÒÔ¼¾À˜™œ|~£¤§ðñò³¶·’”˜Ž‘——›¬®²‘“”°²µ‡‰Œ‘“¢¤¦pqtˆŠ ¢¤lmp¾½¿˜›žghk°²¶~~‚ÌÌÎ…‡Šééꇊ€„ÊËÍŠŒfgj’áâä’”–z{}qsuËÌÍŠÎÐÓ}}€žŸôóóZ[]‡‰“›œîî팎RSUœžîííŒWXZ¿¿ÁÍÎОŸ ïïîŽ]`bœž¢šœŸ…ˆ‹ïïï‘qrvnorhil‘“^`bstwqrtóó󜞡fgi¿¾À€ƒ…‡‹ŠŒàáã’”—ˆ‰Œ|~‚ÌÍÏ™›žÏNôPtRNS9ç­aa±“f× „.'W… |=ƒaìèta_è ^…!W…ïå†äñíiíëFBC7:ñ~‚9í3yhŽL`Í0m¾0Ä?ŸŸ“H·IDAT8Ëc` ±&f–€À V6 «vŽàаðˆHNì Ø¹¢¢cbãâ¹Ù°)É'%óðò¥¤¦ñcQ–OŽÌÈÁTÀÎ’—ÈÊΑÄPÀ$›.-ÄÏ&“—_ ‹©@N¾0¦H(¯X\RZ¦¤Œ¡@¹¼¢²ªZEU­¸¦¶L]CCdi]}Cc“&H^KHœ SAsKk[{DžŸ3 $µ;»º{zû`òè ttû'Lœ4yÊÔ2=ˆ<šýþiÓ fÌœeh•‡+Æ_yi²qôé&¦fæfây˜PüUÔÍîœ0ÝÄÒJRRRYމY8þ*ë[»&Z[Úè ¸ ¬$Ÿ[TÕÐÖ=g®ª°Á¾á@/Ç\R¶tfæ?,Ý\Má:'Ö+ÊVHÊ*µPEªÁ¾Ý8'ÆZO²n`ã5"؉Ï:(Ö/ÊPD»lf¦K?¨KA À½Þ0ÂVM¬j\Þ,Ñùøü‡Ï”пІ¹£ ¾E=‹¼¸×'»RI¤h[Ù'ÉÅÀåujч{苇º¸µÌööø#´OEŸgZÕ&ö±ÞrfÓXHß;)Õ"¯KC™fYÐ%½®ªØ`TÍ.É‹†º!©H@“eXÌ#¶®©Ñ\R²ŽŠ¹ £D7‚cX¿“:3{80vaW·— ‡5.p`V±‘ ‚1,b^V¢.)V]ãÖ¨ tRNSŸã,<@ï(c=„íIDAT8Ëc`€FnFŒ¸y¸Q0¦^nŒ˜øøøøøQ0BŸ °ˆ¨˜¸KK ò!)’–‘•“EÁò H •”eTTUP°š’"Bº†¦Œ–¶ ÖÑPG(Е’—AzRºú† Œ ô ŒåM0˜Ê#˜™[€-­¬mlíìl's3„gW°7wO/o_?™g„‚À `ˆ¹!¡aá‘QÑ122±Aqñ ‰IÉ)©ié™22YñqÙ9¹`ù¼ü‚¢â’Ò²r™Šœl„‚ʪjˆ|Mm]}CcSs‹ŒLkU%BA[{L¾³«»§·¯_FfB{BÁÄI“òS€òiS§MŸ1sÖl™9“&"Ì7_fÁÂEùÅ2K–.“‘Y>o.BÁŠ•«dV¯Y ’_´lý™+W lÚ¼EFfë¶í; ò`°só&„‚]»÷…öîÛ?ý<.îÞ…PpèðØÑcÇ‘uâð!„‚“§NƒÏ ÅæÙS' Î?ˆÝΟC(¸x醂˗."\q¾Š¡àšó„‚ë7nb(¸uã:BÁí;wïÞCwnÃå™ï?Àî3ƒ$YXÙØ98bœì\ÌLþà¥lñîIEND®B`‚nixnote2-2.0.2/images/local-notebook.png000066400000000000000000000025211315604104400201420ustar00rootroot00000000000000‰PNG  IHDR D¤ŠÆ»PLTEPPP‘’HIJ€€€ÇÉËÐÑÒ”•–rst___¹¹ºÄÅÅÉÉÉ£££ÌÍÍ¢¢¢ÃÃÄÁÁÁ½½½ÿÿÿ¨¨¨[\\¼¼¼ÀÀÀ“”–ÃÃÃÂÂÂooo¢¤¥­­­’“”wwwZZZ¬¬¬‘’“‘’¿¿¿···¤¤¤‘²²²öööºº»£¤¥ª«¬«¬­¦§§ªª«ÖÕÖŸŸŸŽººº×ØØ¥¦¦ÇÇÇÊÊÊÏÏϼ½½¦§¨šššŽ¸¸¸§§§×××±²²··¸««¬©ªª±±±ÅÆÆÌÌÌÈÉÈ–––ŒŒŽµµµ÷öö¡¢£³³³¸··žžéééôôô²²³¯°°ÄÄÄ»»¼‘‘‘‹‹œœœ›œœÔÔÔ¬¬­¡¢¢üüüŒŒŒŠŠŒ°°°———š››ªª©«««¿¿ÀÓÓÔ©©©©©ª›œ˜˜™ÐÐЇ‡‡ˆ‰‹®®®’’’™ššžžžžŸŸÒÒÓ£¤¤¡¡¡   šš›Ö××¥¥¥ªªªÀÁ‚‚‚‡ˆŠ‘‘—˜˜ÐÑÑž˜˜˜•••‘’’ÒÒÒŸžž~~~„„†………††‡ˆˆˆ¦¦§–——Œ‹‹‹ŠŠ‹”••ŽŽŽ¾¾¾xxx€}}}‹ŒŒ‰‰‰„„…ÍÎÎÖÖÖ”””vvvˆˆ‰àààzz{„„„iiirrrtttÐÐÑÔÕÕjjjvvwsssƒƒƒ```••–{{{lllxxyááâgggqrsccc€]]]rrsÉÉÊdddlmnkkkuuusrrqrroopßßßghihhhýýý÷÷÷ïïïêêêááá°°±¢¢£ÆÆÆóóóëëëþþþccd“““^_`WWWYY[\\\SSSVVWYYYPPPRRSUUUMMMIJJAAB'eZ tRNSŸã,<@ï(c=„:IDAT8Ëc`€FnFŒ¸y¸Q0¦^nŒ˜øøøøøQ0BŸ °ˆ¨ˆ‹ Kò!)”’–‘•AÁròH •¤•U”Q°ª¢B𢼴º†: ÖTTC(Ð’”“F2’ZÚ:º ôt´ ôå @b†FÆ&¦fæ`–rúVÖš@!{G'gk+„W7iiwkkO/o_?= ‚W„‚À qéàаpɈȨh¿Xi鸠@„‚øÐi]WÕÄié¤ä W ”Té´Ðx„‚ôŒLé¬ìœ\ié<óü‚¢Õbé’Œt„‚Ò²réŠÊªéêšÚºú†‚Ʀfé–²R„‚VÍ4é¶òöȎήîž^iÕ„¾(é~ÍV„‚ n¥'M.š2uÚôÅÒÒ3guÏ–žã6¡`®È<éù Nmá^´XZzÉÒeËWH+‹ÌE(XY·LÚoÕê5kû×IK¯ŸÔß¿JZzCÝJ„‚›6KK/Ú²uÕ¶íwìܵ{´ôÞM ö9+Ãn÷¼ý{û,;¸öÐa ïˆó>„‚£™Ç@Á_¹áøÚÇOž: âlÍ<ŠPp¦û¬ô¹ó.^º^uåêµë†©7¤vŸA(¸yëFzиu¡àö­ îÞ¹PpoÖ} fÝC(x8ý†‚ÇÓ"<™üôé3t0ù \žù976ðœ$ÉÂÊÆÎÁùàä`çbµ•Þ†kÙ©PIEND®B`‚nixnote2-2.0.2/images/material-light/000077500000000000000000000000001315604104400174275ustar00rootroot00000000000000nixnote2-2.0.2/images/material-light/alarmclock.png000066400000000000000000000075351315604104400222570ustar00rootroot00000000000000‰PNG  IHDRóÿalzTXtRaw profile type exifxÚÅ–mvë( †ÿk³$!>–ƒÁœ3;˜åß›¸Mê¤IÚ{&œ¬ !ÞGàÒúß¿þÁGœzòSÈ!8||öY É퟽gç·ßùà.ƒ+;˜½îaþvû˜ý´/×vŠuÆI3Ð%ò ¨ceÁ`™IÎ@*»ç3å9¯øOۙߥM›íÝí³£⩬šñµ}Eµl}Ás’1ò«~½æsíèÞˆwŒn´seÚõZ ra:„¦í\»M¡j—•¯þÐê±Äízo©÷uß]ñJš›ºleÁŒ¼nÓZÄ×0Ž[Ëh [¬ Ö\ÏÅUâÌÂê:{n\¸óºõ•+Rô²JD/RE7[Ò(YªîиKÔ¬4M7…YŽ\x[7oëUNX¹1<…Œ1ãK£3ã;íÔû(qf—­—ŒšFƒÜø…€pŸšÚ¦ïÖèSݸO`m“9aƒÅ-{ˆÅø£¶tã¬ð3çÉíGƒc› Ö6$à .°vQ$2CÇ>™‹zY@€Í¤1u°Q €ƒÓ€µ1'òæ+&»W @˜žB°¼7ÔOô 5TLÍ“™‹–,[ |°B ãŽ*Q£CŒ1ÅKÒä“¥bJ)§’%+®0Ë!GÊ)ç\ -]0»À£”E]übKXâ’–¼”Šò©¾Z 5ÖTs-Mš6ÿZ¤–Zne奴úÕÖ°Æ5­y-µÖµûn=ôØSϽÔ&Õkj|Cî15žÔ1¿ùÅj0Çx Áã:±Á ÄÄ3ˆÇA-ƒ™Kì½ rƒ™Ë2®*5¶§ñ ‚~e±Î»r¹‘ù—¸É=r4Ðý9è&¹¯ÜN¨µñÞ«±ýMv\lpXS‘TÆ;é¼ï¸ýÇx šë¹ÝŸ}DѺGÁ{å¾3½¾öyOÏ:~—½ŸÃuO¯M8ÍiK…žÍå*ÄÉ.èõmœ‡¤ßÈæD£û|'½/ï·½—½}8nBÓ»ødA¾’Ë“b?ÛÓÏsy»²¿½ØžºÀîæD¿Ãì&Ðs—êyO?¿d¯êè'¹ì==›Ë.¶×(Ò+Š<ÊêoÚ×ÌÿthHN¿ñ–øë€ÿˆ2ýž]×ËW­bzTXtRaw profile type iptcxÚ=‰Á À0 ÿž¢#Ø’Kœuê|úË£ûSch%8tHîý¤‡0>}©WÿزTpÔ ‚Jãh‚ÑOÖs•;ɳ8ëSUy2vêD\ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá#1Å2w;ŽIDAT8Ë…Ó¿kPðOB†Ž:\)IAA¡:EPqêàP·,‚ é`Á¥ÅA‚<êò¶‚‚>ppè(XÁ!ƒB‡.B .—ò,i=xpÜ»ïÝ÷~5œnÐÃ]\Çù0à ¶KN»µ£žÃ:–Ñ2]ÆØÂZÉit Àï°Ž?°ƒ=á"n¢ÿq§ä4j†a½oâJÉéþ›5Ìa#X\ ŒFÔü!7ñ°ä4îöð=ìó%§ÏÁö%V#Ðb3Ö ÚKNã`Òªz1SõáY”ÖÂR+º ;%§ß§4¯ÝífCÿ‰!.¡×ªFµçtyS髸z§Y}b4%X]Žf,‰Õ±”œ~a7ªw /0)g¿Ñí^áAК+9œQŠn0ƒO¸Œ­&¶c$<ñY 0 '›ø÷#О—œ§d^ÁÓaÂíI€6ÞÆ†M&2¬º=‹[Uæ¯X,9êcjÇzÞ;ã˜DæåŽéÕ,¡WÏ~Ðï«mõ£xuÀá)ZIEND®B`‚nixnote2-2.0.2/images/material-light/attribute.png000066400000000000000000000247651315604104400221560ustar00rootroot00000000000000‰PNG  IHDR‰ +zTXtRaw profile type exifxÚ­›W’9–Eÿ±ŠY´X¤Yï`–?çÂ=É¢u· ³Èˆ áv~¯^Ïâ}îïëþϱ3ŸO Þç³_bgûûzø cóûüKŒÞ×]úsìn„~díëÎ?ÞðÛuûýϷسê9û™]™HeóNêc*÷$G1ܯe~ ÏËýiüT¦8ÉØ²“|;kλ`‹n¹îŽÛ÷qºÉ£ß¾ðèýôá¾VCñÍÏð¤€w| -,*Ù˜ä-ð²ÿ‹»÷m÷~ÓUôŽ‹¹›Á_~ÌŸ^üo~>/tŽJÜ9[?cŸ¼ª†a(sú—O‘wÞ˜¦ßûc¾Õý–Ø@Ó se‚ÝŽç#¹¯Ú 7ÏÏ%}ZÕõ^€qïÄ`\ 6»\v¶x_œ#Ž•ütFîCôƒ ¸”üræ›2É¡¸7ß)î~Ö'ÿ¼ ´ˆ2ÍSÉP'Y1&ê§ÄJ õR4)¥œJª©¥žCŽ9åœKFõJ,©äRJ-­ôj¬©æZj­­öæ[ÂRË­˜V[k½sÓÎ¥;ßî|¢÷áGq¤‘Gu´Ñ'å3ãL3Ï2ël³/¿Â¢ýW^ŬºÚêÛmJiÇvÞe×Ýv?ÔÚ 'žtò)§žvúgÖÞ¬þÌšû%sÏš{³¦ŒÅû¹ò•5^.åãNp’”32æ£#ãE  ½rf«‹Ñ+sÊ™mž¦Hž¬¹¤ä,§Œ‘Á¸OÇ}æî+sÍ›Iñ?Ê›ÿ§Ì¥îÿ#sF©{3÷{Þþµ%¸›7cO*¦6€ìÚ}íâ¤îG¯ `±¥÷‘Û)Ä6Ää'ûÜù`ØçIAÁj6 ƒC-äõí’€‡^ãgØÚ6X#&"kd 1žqI3±SÂ@·«R{'êm|¤¸|¦xÕÛФ°éJ,ÝŒ£¾æ&Õ´HKпºÂÎȉxEߌ#ÕJ̽U+Å@z«Ð{_A.+[¡éÄšÉ v ù²@ÌÞ=c?/¥p+_J€q˜>}µ@:3<̬ÆB-ØœI™£_Ϫދî>kZà(Ί‘=AîâG©Û‹;²‰¥S»yÆŒ€(ŽR*“‡ÊÓTmÖ’Ñbñ‘ò”‘‰D ¦Ì̃Œíˆðâ €wº°z…‰„~llh®è†îÐGÞmTèQ]L[xB”_í/tÖ,HþºÁ©‚D̉M‘•èÔkZ]BQÀü ËlîH¢Ð>‹»Èîn&® ð3ì2\ eô°82ÝZmŒÖ3x“…žãû„–¦ 'àî;n;(QñPBEB’' Xo®X˜3x‰ª2[LåŠ3à ®Ö…È¶ÍÃЂɨàâ*.ºú”yŒ¡˜M.2`ÀÞHeUšhÓáTeƒiB»NÍ”2  l_¡%`Œlt*×Qq£ÀOótó®Ô5ЬŠÓ10†Ç€7hgi2p•FðÀ™×*fÅ¥6qàݹnúUðnüñeB‡ Ô{Šƒ¥Ð Ÿë¨¨Y˜Þ4ôdº]HÂ_ã/¢Ô:=éz³Æ6Á’=\<,Á¤jƒ BÃU ‹UÎ’…O[t=cÌiù¨å‰â ÔÅ·Íä0Ëÿ µOAtQ%̼È@Ȱ±Ÿ•Î2$\±HÁ@”¡u/5Æ|.Õ@PêAÕ5ðBÞß~îz iØøîÒ<%ÇkxIÉ‚ñà˜ð’ÀD$7tf–F7"§¸õX’?Ä$E¡2Äë6º$ĉò'n>ÓWÐsíx%ÔBr‡µÑP|‘ú¥»ºÅ©Q½EäU€­î¥’´sa€ ŸP{=ˆ<è'E½™{LwîZÝtõÆÒxüNZÒ`móGaævò¥Ì±&©+\ÚYò½½æn¯=¹CqÊ&Çt‰,)ÓŒ4'¥èxzUt°¢Àøû%Ñ? r¨ß`߉>nÜ/ç¦E*Õð¼±·'To©ù(‰m§!°¤…¹’•p€eg}t‰Âˡɓ?¬AhVÞàÆ[¬!†Ø÷kjškö7ã!ø®Y\,…Lc¡éò ¢ÿCo Ö îR`âØ`(Y,@BŒ,$rSãÂ@T“ê?WÁÐ|‚êX@…J¦p ±aš  S+öWð‰òÊ+ìE†ræ'D)!0ùð×Gb á™ œEiÐG ž*£7âPQ@­—^T346ñ!†È$5FqÏ é rŒñ‚ì¥ÜLKg:D5#`®€hAoƒ©À!÷;ïÔÀ,Ú‘N™½$ÀÊv¡ÇF"J{w<- ­a|P)uѤhÊË/M‚mwSï‹ÜÌÝS£E0ò’·¤ø#U”020\ß®Æ>næ§ðe"kÚèþîžHºJ,u„ ê‡Üƒd{ÅHš‘—P´>[œåCÓ „^Ý´Æ#æÑÓª² à) ¨ºpG¥3yA£šrÊ~ûÐD¡¢–B«€8l•qJ[A¥›ºFÙ©Ã? €U‡eCîî)¾'zûÒv^[Öfõ–IFgÏ›ÏËB›ô#Ts»=ïqýåÉ¿$_¥XKXiºÌ="“³êîÛÊ“©$œC>CŸ†Ñ 5á<»1§§ø¯$¡Ó°w9>lÎ_-‹.]†Š(Z°\x Šv¨q ÓÀQ6 L/~ÂdÒÈ@f;vYpF°!,ND´ÈÝò…-󞳈Á q´²ÖÊô¥Òì ššòÕRC,{OiìnC¨$—:–NÇkÅ]3_¦LÍèÀÖÄeqkÕEµ—êQ‚í.µ túävI®KˆŽÈtðˆWæ üpÓ–ºÂãr,eX\ÏËc1°£Šk~g3‡ùðеˆ1Ѷœ`ûV^•]æí@šë²Ö/ãÃ÷ ÐQqÁ—#'­$63m—Žfx—JéB€O#d º+Ù=E±Œ&e;Ò|€Ûùzžu gZóæ1²d.kq ŸI";©¹eµe1¹íŠr+Ë=ý Øxú.)w`û0©ª%²n‹E¥xw”œF&ií¬GW\Q<#žœoײ•¬‰`üÈ ž''×=sµðüR-ª®öˆÞÞEÞE‰Ëî17êc*}² Þ ÚaæÁs$ 4¡ñt«¿aç@mƒÂ¥j›Á§0Ÿópr"P-bž²Ö™jX§Õ‚š6áYbâ©{* €ýQp “cPß+Ë™^hcæ4Šè͇„ΨÚ¢1D…*‡Ú¡[Š÷ZÛÒbC€ç„F^RJRÂ3hØp•eÙO6üMŸE—ã}3Ï!>´†“cÓb¬j\äF@!Ëg¾Ø™m+¸}h)/ú“i„ÇqÃ…IŠ…Eåî‚ù–Ì$ T”àÙ¤†:¨Ö>ä„s€f-ª­Ž‹Æ!ÇàÃñm)Nƒ¢Ñ¢ár <¶Þ=}5?i#FtOØéí|=ÓÉ‘‹DFeœä: úÈZe€ÞÖ8ok| bQ.cË‹‚Èë¹i'Jdk-¥=ÝÊíT8ÕFÛ_Épã³,[ºlúeËhz _¦•ÌAK“DøâJ}ÆeߥÇmž~Û£Ûîþäšç1 ³€B•©¥‘IéBSA™Jî/mSÑðmÞŽ:„ 7pRj>DB!~|ØïšÐ|Z“A1 ¡‡æO·Puþ\;G ÓN£A£ˆÚuÅ*–€’4 TÃR\o×à› IÙ÷‚²ÞZJ¼ríBW‰ty4,Ò\ä´€qº«®­À{K–å"õC­MXàîðÑ€×ËÓ¦¦¡Ÿ¾£Œ¶–(ˆ©ÖÃ6ë®®N®ÆÍ´‘? í8AKÛâ»^HT$ý””¬Í¬¹å°ÍBCÒæ{Iw5{%¬wYÕä¬Üo‹óMó–öƒdÎ6[[žÄ^÷ÚÉþ†3 ³G4Õí)œ?I¾r7 1ªâÅå¶ „äPÒxœ>ølÒêÖåÐ\õÆå«$%­g-¦® Äbêš‘®K]œDhÝ_ý¼?ÔUj¯™ä='€=9¡†I'EE€¬@Ÿ¯†&˜#÷ó¨‘-Úö®§1£´¥—\á2µôV‡· ªò X­áé wžÜQx òE+uÚ$£ì %¾›cÀ@—×¾F,Á⾇tEçÌ»¸* ¾?ÖŠf9>œggEë)ڕ¢iýÍ~˜Š©-. øãŸ\~ü%,v–+­y½«£3)!‡Óò ú¦]9OxU œ( Rô6Tr RÊÁUm>ß…´ø|äˆïlÑ2^³•d•1CÈOif>´PX©R¤Rf"qKaÀxÔ²MfE\¨UGoáj­öª´aÑ…*ÉštuN—•: _óŽ–A¡+"<[Ë3ÙÇ]‰j絊Gò›šä.wó Ñ"8ôMÝÝói6’\ãqÚcÓz…j5 ADœ#ïWÂía¤áÆw ÷%á"E=ÉIzŠÿ]rÎÚƒ/Þµø2½²æj/ÑôýÖþ†6F®º–·ûÒ¸bò¥E{¯]sŒA+¡ØV§ör|„–Ò‹ÕtØ*m ÈW—ÐM€qGWNðš#jE]j¤Ë‡ÐæIÔ{ÄNl°8Ç£9P¯ sŽbXà,ãØ<¼¬Z³—R,ééô.wM_3g­BüÃ.ÑB)iý¢6€œ ʵÉ-£ÃS'"¼ë‰³Chž¢åõ¬¥Éì„úÜëJλ³DÌŸåŒ6f€ÏÁÛd*Sð¥È%´LÕ?¶½¼.î¼›Âr‚`¤]'¥Ð7ëã]#g1ásš)غ-/¤¥œ-{P¬1¾™uû|•z¥"eˆ³Y¦Xm%2-LÄ0ÑÈxGŽÓò ƒ©$Áû ‚^Þ3[OõÞeØUV6­´HadßÐÄÒ«qÍ›ãK§ºÎáɰðý™ÐQc6Ú/À”r“;XÈ;‘‰u Ú±^àÿr‡»ëLÑ¡ÄÆU#Q6¤^ó΃B×»ÍVÁÌ­½öˆÆ'˜ $Št‹ ÝúzÊ`ç0­òoŸU?âõë¾ x-.>0«±°D¾o)ÑôM‰ÞMF0Ά§`JÇÌt¾S »P¨*ÀE'ºFÀ·½%paL[Ù2Ç?[ ­c(>ÇQ‹Ì£ÜÕžÈAYÈÖÖÅ Iø¨øý(‘-9ªÃ$Æ#0hÆoÄ*LCkB²Ba‘c\Û½;|ÚYøXXz¤ÁÔ€'äK×yœL;¯mÃõ.mNÂ0ëm•K°zÕFwS§Å‚ÛfÍц-ÄS+ª”wÉV«×ž*òGÕ‚ÉU…¨˜…%I‰š)¡|‘äõ¢ãã= a´™ÿožé)Ï>ॄöc0»l —0uv|à‡ö±ÙkIPúñïž}B²#}»a÷TÄ8 !~Q+Ÿaâ]®$î’ZArÚ2A*gZ+`'m˜‡iºæ¨4Ø¢Ã|UÅæ–3]+Î8®¨=8mkkO™y úsâ ÁjÄ j'†ËU´˜p]E±tnï#‰¦e ö¥ZuîhÒqx bþ"¥g{¬Jkh™¹=+pE0àz3:£„¶H´y§Óèj«д‚úຣä¨ë¦+ÊF¥(ƒ^P‹Ñ‡PÍ3£Œ/Å«Â$L±Ó.Z±"j¾6IÒ®Ç/1m:)‚3Ó¦¸§y6frránó D-M‚chA~wÚw˜yBŨªÃF00F.kÄïIV 'VœÖ¹‡Žü¬ØÏç>`ý˾_©]køÅŒÏMo5T´ï¦w{Wñ®œ;zÂXAtîŠo= UÜ­Óè`º èJµ<Çì€y&€°‚ÞHd“ ¸ôãµ,ò[åæž^£™îµ2¬¥£ÍÝ[¦Õã@ ­ão®M+BŽ{j×Ö0O4³5Ÿå$L\~ö…daÁÙx÷Ë=6Òï®2*™;é,„×ò+q#k[ÂÜå|ïyµ¦ž\K:± “´ø(kIí:-Á.r¾íšÏ1±ð¬rƒ‡ó¨m‰<"ºx NAÀ-õÙµ{Æ”g[H<[!0åiFÛü­3ô` âT9’eÝ}hÝ .ÑNà³ùâCzè£Ñv–N ‡A1a0€J~Ë ‹mÚe0'sÃ<¼V´[…§Ö­àµ] >ø»h­³5¾já%ØÅ2™{-³uÖñèä’ÓÑ’&˜ÊÄw)vZpÅúøÍcÚ×S9ð:±efXF¸GI˜5\+9ëãõÐF•)Ò>VÔôˆÈˆ6¢LûÌ‘X$EÛÏñ˜­ã1)Æ­…Р}é¬u‹‘ßlb9›L„A2:P.ix¡?å´gŸx´8¨ek{ü CÑõIge‘ÔpÔsTÑ7Wk2¿ß»'Kƒöh$½ö{ÓÈD«};v ëá™`ÕÊ w¤s!Wª á—Õ?»Döá{‚ ã*NÛ\å9­Â(´Þ…ÝZ¼§]I?(sOi"0ï[¼Lø~-c^ÀQ­4hó£:gTÔiZ*%.ÄH+ Qky%nXW”o‡ ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEáØÓÔ›iIDAT8ËuÕKh\eàç?s&É̤¹LÓZH¡…HW±R©—H¤PKièÖ…bk‚h‘‚ ‚[7]‰â¢4]HAµ µ é¯é]ˆâ¥XÛ˜d2“Ìå=™ÄZ¿³9‹ï¼¼ÿÿ^N°fF.‚€x{pÊÙÊßøŸã,®"­ì˜ì`„ÛÀz°G0Š¢;Ï~ÄQœÄâ hXÖÃx±`0tË‹ü™ÖÀPè‹Ì¤u-)Tq ¯ãfeǤ°†ÙËx Å€§ cööI¤ÞýX=mxj`Bo®ä‹ù¯«³,e¼…W°g,÷gÌŠ<Ú÷ ‘âV¤^̤‰r~@"½¹¢O–.«$sÐgðŽE™G0 ˆ‡ ÄëA9?`¨«, 莺m‹ï’­ˆÐ‹°%Œ\<ô&sBñ`á~{û6”/Ì÷ ‚všh$ ÐååBN*õWã¦ÙÖ¼óÕiï,NiJ›x.άQ,‡nûúÆÝ]ÜÚ‘²Þ^ra~Ú¹Ú%m©±Â¨ñ¾ÖÅ%ºÖÛе^)WðQíWÓZ{âÌgb‘fÚ’J;Ì.ÌO{cîC7Òe0Õ¨h§må]¦­¤-rn‰n{´bÚkiÍñÙSf›s ‘4œ«]ê€ÝòHËTý²åì ª­EïÏžö[R]YÙ­ukš=+Ó^󾺳:‰ÔRÚ\ûMˆ²8 =LÌt+ŒêwzÅÆ £º¢<è‹{=98a8”VVfâ,›Å"¥\±c„\ÈïÛ©¶MÕ/K1^µ»Lâ,fA)W…°BýJœýÀLZï93ÿ¥bTPÈõè‹{­‹K&Ê»ìNÆ:¬ãK¥ª­EõdÉù…i×’´p&Œ\<´§poÀæ¨d4vxãAƒùþ;6ÃB«êíëø¶ù‹«É‚¥[ü û£¬‚Ž¢šâ÷dÑgŸÝhÎv„šoU͵:—_O–|Õ¬¨$s+`u¼‰Jœ w÷áYt·$ÎV¿SÈõh$MïÍž–¦©Ç÷)æzœ_˜öǪU8ãHÖÖW¯fAïÍ 6†‚|Èù5Yá$ Áµ¤¦±Êì^ÃõÊŽÉÿl OdA߆üÿl ¿dÇ<޹ìm ¶dßƒíØ”íÎà ÎàST¬ýü õOÇx9IEND®B`‚nixnote2-2.0.2/images/material-light/black_dot.png000066400000000000000000000002111315604104400220510ustar00rootroot00000000000000‰PNG  IHDR #Î× gAMA† 1è–_@IDATׅα €0Cј)“g§ìa ¸"Pàʲì/·Xµyëi·¡›bê 1" c/ÆggAÛï ¡ *˜ó¶IEND®B`‚nixnote2-2.0.2/images/material-light/bold.png000066400000000000000000000116001315604104400210530ustar00rootroot00000000000000‰PNG  IHDRR;^jzTXtRaw profile type exifxÚÕX[vk©üg=„ˆáð\«gp‡ß%6ŽcÇ>}’>?×NÂ6o¨R©7ÿ÷÷ráÅ>ª‹’5•”<^±Ä*Ô_¯«$÷ßóÁßê…ÓPÅ(ùú˜æé_Q/÷9žúöXïr?óè™è¶ä™me[¬Mž‰8\õt>»rÆÕøé8ç·S'Wñü9f\ÆÌÇÁ…É¿r­ÂØg®»¬ø¬Áž"ž™Ó®I¯ïÎM~}yOOwçë©çÇ«p>ééŽN=Éë»Û7ô€Ú}准|õŸ_Ÿîn­¡kÍët5&ÜTrçP·£ì'tF‘÷°„wƯà9ïwÁ[±LbÃwàÙ|wT(ûE‘UZ4wÙ©c‹1ÌQ†Ðï:åJè|A€7­¹ðp¬@¢7FuøØ íuË^¯“båAè“F|y»W•?yL´–QœÈëuO öŒÓ؆!gÑ €Ð:w*û~÷Û}âÿ,Ý욬¾]S4¡;·xãÌè'>:…åq&ÀamÁfˆ€OÄB‰|!áøTì

ç¡1c jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá$&ϼ IDAT8Ë¥“!OA…¿6—àêp‡ªÆ¾×èõmƒ…­?nõÎê¶“¶¡‹ËmP¦g†pì ·!áSOûÙ彯„w¯³?GÛ:=§ûç`HFSØvÜ%㣧AbRÖ\ðœxJ²HÄ]…çÎ]Å»ä]RwŸ;_ö ¹M…óq/ˆw9ÚzÒǹ[z]D¾ý"Wr7FKcôóíJˆÈTtû¥.%²$,£ k[Ä0|²­‘1^±‚Xó<_eb?(P£Bƒúš+U„¸³af®,K—Ä8s• 6ÉÒœ$°©à&Pó5Z~óòW)Ás#¬d‚1ÂŽÃ=R~e\ 1Kœh%óÌââYÓc’›w¬;§ºò»†{ëBïßÔ•æ„,þ8MJoµ%‹³`úàüÙdm@Šà[ øH¢É³! | "g |€©r#7ÀÕ8èøÆ£µ–•O5Ž€P´ˆM–X!(êÇBB  NU£š&ÍZ¢Ä5ÆhqžQÅÄ‚©E3K–­$I!iŠÉRJ9•ÌYp„iŽÙ\N9çRà´ÀtÁî‚¥|È=âaG:òQ*ʧ†ª5V«©æZ7ihÿ›¹–Zn¥SG)õеÇn=õÜË@­ aèˆÃFy”+µMõ–Ý‘ûœmj“XXëìÔf4Ì@Œ¸M(hžÌ|¢x’›Ì|f4…2¨‘N8&1 X]Ù½‘û”›Óð7~FÎMt?AÎMt›ÜGn¨µù»W±³ gN½ lÝÃ?§ÒR7?ü2]f©c ¥†ž¤ùþt¥»W|u~jè×c9g÷ýXžz5–sv߉å½KDô3Ùvþ¡× } üyiüþyµLg‹|­eÜOäçjèÆçŸÊþ ýb˸WŽÓi‘ÿ*S÷ýX¾Ük[Æ}?–OzMþXÀ¿–î_?U›†LýæbzTXtRaw profile type iptcxÚ=‰± €@ ûLÁIløg’æ; öQ$°%˧“u?![‡.˜tžLeõ¥…:FÝ ‡Â0z³M”¹Š àÀÏUå2&åÑ+·¦ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá$3d}€Ð’IDAT(ÏåÑ!Â@…ᯠÅ P88Àae/€E8B ©oÒ`p¨5$=Bo…Ù´•ðÜLòO&ï/B,/8à5ô©±ŒX™E†w8£Æ#Ï£¼2ÜæÝuÊ?"Äòˆ ÝЧ&Ärƒå”«Üú ÒT [<ÿØÂ'´CŸº9î¹õ5º9>xϱð›vRU[AÁIEND®B`‚nixnote2-2.0.2/images/material-light/collapsed.png000066400000000000000000000002051315604104400221000ustar00rootroot00000000000000‰PNG  IHDR:˜ ½gAMA† 1è–_tRNSÿ[‘"µ.IDATÓcøÈˆB°³CÐÐÐ@^^^Tllhf0SÁ¥x¯¾ðõ•D0ÃIEND®B`‚nixnote2-2.0.2/images/material-light/copy.png000066400000000000000000000124121315604104400211070ustar00rootroot00000000000000‰PNG  IHDR™gÏ ozTXtRaw profile type exifxÚ­Xmv+!®üÏ*f !ËáóœÙÁ[þ”è¶c;í\'çÙ‰» 4*©$ÙÍÿûïrÿÁ‹S .ŠæTRòxÅK¨¸ÉþxWòqž_üíæiÜŸCv~Oó\_1._h<ÇÛó¸Ó~î“Ïn"Ï Ù$Ü´SÉs#Ç8ß]9Ÿ«ñá8ç瘗×ïQaŒ!؃ “ þåÂЀ•ë¾V|ÏÁî"îyG×¶sC¯w¿{±¯ç8?›Âùt.H/6:ÇI®m·-ô„Ú—ä§ Î~øÇ׃íÖy­yœ®ÆK%wêv”}‡…À(ò~,á­øÜë~¼3ŽØØðx6ß ð¥E‘UZ4÷µS‡Š1Ì ¸†Ðï±ÌJè|@€7­ \x8ÎÀ¦76DîºÐ–[¶¼NvÌAX›žøövWƒyß7ZË\œÈçÃNp èÌk †!gŸX@h6•mßýv~ã€e (Û̬¾[4¡/ßâ3cøèü¤ãÜ&‚l2Ä@À'b¡D^CP"Ø1Ÿ ÍÇЀ‰„Anæp g”öÚ áµá„ É@¨¬þ£1Ǫ°D'"IT²©‰SL’RÒdU•5ªhRÕ¬Ekæ³ä”5ç\r-¡0(LJ*êJ.¥Ô ¡[W<]±¢Ö·Ø¤¥¦-·Òj‡ûôØ¥§®=÷ÒëƒÂ¤¡näQF4áJ3N™iê̳̺àk‹W\²ÒÒ•WYõŽaû„½ ÷3jt¢fˆÅ½N¿Pðêm 2:à ˆ…H@\ 8t0Ì|¦ƒ!g˜ù€‰3È‚qREwì¾û7'ñW¸…wÈ9ƒîÿ9gÐÈ}Çíµay¯oÄŽ(4›z^ 6,˜êtì—{«9Îsö\;áH}ÆL¹gZ#e¬ “°¥œ©—µÄøÒÙ¶RÆóiÓ}Iæ5WÅI“Åö×Q¹Kh‰€Í @4!4uÅÚruª ¢±büI)Yö-Ò×/®n߈Žù‘š Tí²§ÚÙKüyŒ1t %Å”©ŽGM`‚8º;n-eŸ×–´3v‚ê›· ¦Ð"ž'l ,³1¬¾ »oÓÎBÉ­ sŽÐãÖ$£-.‡3M¤æÖJi%¤<¼É£½ŸÝ}`¦:[ŒX£ ]áôQ“P.@®K@Á`5µ -5ä­ìáR@ŸŽ¹Â§[‘÷ ßèòL‘n¸î«tøo §D0çxj¬²gͳëX5•x$vIÁ׺jÆŽ™ÓlÎpÙÔ6‘kWð£mÏEÔ€†`d–VzØn#¹´WG£™Õm/Dò¿Ü)6m1nb:Äô! «nëT3÷@2‚©¡Þ’vÛä÷ ²œ–w–­õÁ>‡Ã^1ó"9ÃDÄ~E!}®¼=|ZN˲ ZÅR˜kPiÚºYʦz´”’û¾k$U€Ç¨´Åm!жø°(OýBà|¯7CglSmC1º;mõjªŸ u»«¾mT·M¶ã{”Úp’©ÓßfGâš[zÄ])á8 ŠÑóæ××û@^m± È‚¸T‚ú>»äIA§:³àÀKv¨€1i3&G£IÂá™Úµ¸GnÙ™*b.°¸PíìãU ØXØà•lìi©qö±vÇæqµ”2<±ú¬‚ðáÀÇBgj¼î~ßüQ*‰j‚Ó(xgÆó˜)17xâ`v—Y- rοÚÞýõA´ƒ¤úÞP8daÔ >[4ý@^ý1o0ϱ´íà^zڨþTwèHUW‹« F?Šbb²Â³ól³ ÈB#OÚZl´k‚BJGb”†ƒ£×íòè*â÷äðñÕý¼àgJ~âY¨Ëû¼¨™ýù"þš‡x¼KJ),Á`²ÍÈ•òŸR?¹O>—°âà±4Àîª2h°‹ßGî–Îdí>!ƒ»ÞÌÁ&·‚ÈHF«fep(lƒ®óã«ûtá Hßr¡{— ß8 èézÆÝ|svä™#[æ~îÓ}µŸ˜ºï zTÕlåHæ®GÙ! l¾šq˜BdÎÔ%܇aWšñ¹‰pέg[•p·ú¹‹©ŽHÐ ±Ë ¾ç¨OO¡øÙ &ÉÍÒ*HCGq–'F·ÂjáÙ<eþÉÉ«ízû‰öf¢éy’·9é”辋4E/…ÞeZ•þ$2Ý]è•È_mÓ˜Ò€nˆýÑ—)á‘BKý‡sîíÎÚâpðíÞÇï^ž¾pðsƽï‡nµ™À¬C ;Ó¢#+‡Ïbëºù†õh 'X1šh«¶Ür½õžmìÓì©áî3·6"  ,†É¬¿Åấ•ƒ‰P¥é¡Ç—îÔÕ\ó ìç:<ª@ÄÆ*¼È¹‹Yï4»Éww®ä¼Õ«òÑå’9DJc—~i|¡{@eiõ$€£bŸQ¾‹>µ1£,о#ª´¹Pp æ^9•6üÙøÕ‘ ¯r¡ûK2¼Ê…î/Éðêêþ’ ¯r¡ûK2¼Ê…î+† =˜â Á̈KeTVEÄøËã„Óô¬ªw>u¯„Úî‘g˜3öÊélÓs¹+Lƒš?‚‰† ÎâÙ¡tìöch*|ÁÄ Féémç˜Ám`CyÒÿŸ `ÿˆÁñáç|"d÷3#7$J”ìê±?¤w䀇p)ôå¸yÇýSð)V´Y¥µùVDZÍTr¶_Ћëдgº…Ø<~”Ú!ö|/3?T﮸^˼ýX0 d#}EW_{á3Ö(‹|l1ê )mmÚ»†‘í;û}oUpà5š2NÚ(±flÿІ†ËÔ/Àž³kh` áA){ÂzlL¡{Þ¡¶û07;ºakçöCUÍÙz4ƒ˜ØÃ–81á]þÍ`Ûò!Æ]ÈÉï4{PàQþã¾äð;½¾)p%Æ}f 0h„åb³Ô¿XÑPÏ„v5c}OŒTƒ!,Â^À5#6ÇÙ¥ôxá'îcGùi»_² ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá%* Q9IDAT8Ë“¯SÃ0†¸ÞÕáêêps`z(pq­(ÜÀ0‡«Ü?Àþ$3q‹b®ÔljUàêææê0_!—KS^•¼—÷ɗߢL1p<'øµfµÑûÞˆ$œ¯Àø; q‰lp~”µxY]Úi©ð¸´ý(0À—[{mt—©¢&™*4Ðe$Ĩdm¼3®)D2©€à\æy¦ 7°±Æ·À È#˼ž;ÎãìØ4À2h€Ü5m@ \;Ÿi:ÏÛÛ:øÌcþ¯n¬‚˜É ¹Äï 6µÑÕPZ¾rêl¥IVò¶CJ `áf2>:§¥…ôÎ@zû^ÊÔýW­îF`±{‰ýEN©â3>•^»€RŽ‘{ZÜÕxú£Oê™"ÿÏIEND®B`‚nixnote2-2.0.2/images/material-light/cut.png000066400000000000000000000147141315604104400207370ustar00rootroot00000000000000‰PNG  IHDR„b½w ŸzTXtRaw profile type exifxÚ­™iv#¹„ÿã>Öp¬ïùs|‰*J"EöØ~#¶TÅZ€D.‘h³þú÷6ÿâ'T‰&¦\¤ŠX~bÕ7Nн~®£³ñü½¿ØÇÉÓuãâ}Ãs)p ×WY÷óëéû…|?ïúóu“Ç=N¹zLytfÏI¿¼ þºþ0ÄÔû½,çþíó¾–®Ãë÷˜qÆLŒ¼ñ+T~Ó5KÀ‚C;ÇÆ÷âõ,rBᯠî½ïÌï÷uöâ;ÛîëáÙÆÊý€¼øè¾îÒ{ß=Eí{æ§$IJ?~ønïYö^×êZ<%æ^Ôc)猉Q ç5á“ùMœçó©| KDlÚA<»ÆUç]°ÛE7]sÛ­sn`bôËgŽÞε²¯~„+|Üö9Ô0 ±ða·Àeÿe‹;óÖ3ßp…™§ãIïÌñƯywñÿù| ´·æs¶\~"-°ËkNc†FNÿòqûöi:þ=ó#oìÀ"˜Ž› l¶_Côä¾s+œ8žK6{•†Ëó1w²8:+.$'Îfï³sø±Ÿ†å>D߉€KÉOg6± AÕÀܼ“ÝyÖ']ZD Bñ"ÔVŒ‰üɱC-…MJIRN%ÕÔ$H”$"Y£Z9æ”%ç\rÍ­„K*Rr)¥–V} @XªR³©¥ÖÚ“6†n¼Ýx¢µî{è±§.=÷Òkoƒôq¤!#2êhÓÏ0)ÿ)3›Yfm¹E*­¸Ò’•WYuµM®í°ãN[vÞe×ݾ¢æî²}Šš{‰ÜŸ£æî¨iÄây.GË9?†p 'IcFÄ|tDµal<° æ Æ+£·×Ä£´áXÒX±¸2ŠÛSŠõ=q­e‚X6ìÕ ß¼3i,.ú2S€Ç¾RÀ1åÈ¢À`Š#:ÁÃ)`mÅ”]œ®ŽÙ$vJÄq¶Ke‚è“Óa&ñÞcL IÆÏ[?oP­c®Ð©q¸ßÅ"NIyóÃ1͹ªN°½=éN­,0âÜ5Ÿn§aÇÒÌÂ}¥uåÇ9³ÚB>6ÛËr“!&ÖVI ëýØn@1Qx¯PŽ#~“Ü“mwšÀ>Š¥ÇŠ‘1ù‘í GmX”jkÉ ‡†à>V“<¨§®‘~\㳺&àštûì× (õü,«µ³ŠIx®õX»R‘hzç•{){ l½¯*¤ ßìô d4eX ~Qã#…°†\VµÌµ»Û Î^!‹.”–­ÇýÙ”N$ì}4ö邬](àåHÒVŽÐb-³—¹ãµÝfˆÄCÖhKÜä4?³3R,~°ú<½&æVï[¦¬ÉÖ¬o$ù)NWG´ò³Ã\ƒ/ÔÜ:±ÖpjPR̪ßF™‰v+ùÔÄê:«z-Àûå½TñFpBËñ2OV¥ñ“KŒrß²ö¾yn© Œ G—КÆ›ž@ÂsŠÍ÷‘ÜÛkøÏ*™ß퓬®µ™“¢›è Ó¹5æ®<¬ udÜÚÉò™C_þlÍLLÁ3^'jdˆeÌž…$=Ó5rú‘%¾BCȃBjØÑ;0߀©Ú×Ì CjÚ‘}ºàYîúb(­Ô(…±;±ÂŽmС=0|¡ŽkžíËbf'aíʤB$ì2¦KjA¿d¶~åMŠ /'G°§”g ä¼ë9©CG@þ¯ïd/g kׂЕâÚÐÄY܈sß%N`:Á%ÅkÜ7QÞª Q+ ­Ù¥¡oB šWÜ0Kã­„‹u²»Ÿì{wÝ3\Š‘hBúîƒ|§Æä+c;iß©q²*-ÐáF/çè5ªb‚-ˆQâ~¼o®ßÈøÁGm¼8V‹V}‹g-ìûË€ülÛ¬ìÞjZ¼Ñ3k Gš›6ð8zjSúÑ^ iYËî–»ban°Û¤–"ìA$˜÷Z4‰5¥ÍÕÁUrI‹Vfïy 4à4ÍGP` ÖݰÐ_ÖR¾²øqì%^Kóé±4V°¡ìµVÇú0Bžcô@~B²µ,ü3M¨›Œ´+Í@¥úQçÐ_8Ùc((¦£+ NÅ“rÊâû2ÅÒgÜD˜*uܳó$Hjxª‹À$ä¬\µ`ñãDT‰òŸ[&É¢…+æ|ap_øj¾€öS™ $÷5ˆŠO¹z^1¢È¨Ægš„×U( …°!$¬ñ¤øV"G.…©È{°°–»*¢Œ6xM^¿88´  ”z«äÁéèOŽº,^’ëu.yÔUPµ5CF Ц ÍÍYá`´ã¦ñÍÈ8©„°>`CEÉ;`þ¤¨U6+p4Óe6|hGË´Øcàšë„ì9N²ç}ªªLägw±Ñãáé~IÅ•»ðÀ*EÈr},[ª:b=ÌFzâJ©=Udnz¬ÀŽ×\¦¼RÜnv4¦“X%â²u ÉŽúöœã$Ã÷ŠÁ àF úh5!´ðÎ"²€íèPDKXµ.5Ð(U³G^Z¥Ì%1\?CI¶ <¨Í®‚zjì/[×òÚÓ„hUQŠò )ëJ¦&QÕC–-JßLaëÅ» ƒò.”²ñ ­(IM-ÙÌ VPµV(~èP ŽGŠY´6‰’šƒºZK7®"UÕ¢_Vþ"ê@Ñ© GžÌ¦1ÑT›a¯­ HŠ’ºÎ4Ó.•` ÅO8úyÜŽ‚˜1aÙ#Ê¡Y•a´Áy‘ßG:6¨fD— ¢:MG2“Pš µìHHaúL> ¤.µ…êš.+mç þ—îE´5ª‹6‡˜QÐg‚fP*% ÇLäòå;"ñj¥ùhþã¸Jþb³}øÎžBš$Á)¨¨ö#AÉú9-)G²=ô¼ycÑÕøÓ0Õ¬Ò5×ÞÞ©´>¾àiìK T×_4ïû# %f²‰­¶7]•¿+º‹)ÚºÞ©ã«ú ÉòFy¿S¿†úA¨Ád‡­;ðƒYG‹5@rƒó4¬Gl?.GulœÇÕ¶þ¨Ç~µYÚ°•‹ù ,Ño¤ñìƒ~!Œe °Ü gçcS¯A™3®±¨&uÄÿÑš{ÝÈåe~6ÚJ§Çì'G€W#Pž×níµz’¾w\>!1Ü•9@$„¦B=J—Çñ/ÚÍ ¿¿°Á}éqó,ÈáÛÓ©p¹ wžê@#<ΪCþõœ¹lhÅçîÁߌ´©äæ€MQÜNBCœïã+pÿ7Èöz\àGš`.š iBgvì­á¨ •Höž›퀓ÂýYi`FDõw½Šù{ß\C8nžkÞ^­ˆtŠœ.@ûô›±ºe=tóQ7,2 \1:™JJ €ÜÔ|¢Î¶²21Ÿ.ƒéÚÒ·cÑÅšpß`|ì\sß ·óÉ7Æ€Òð ß3l˜÷¦²Dg‰•&6»•tE‘£ûÎÿV ËžMd ‡•o9Â/,„HÖÛ¼gãòà æÉ½$Z·¨{`tv»kºU2ȱÐÞ‚± Éš»_M§=|6Ðçæ›{ ~è~µVÚ­¦Œ%{ÿЋü×]“ùÔ6½vMûVÕ îpŠÕ]tT™ð/ Õ¯²›fáP‹v>%Jç’Ë•0ï4ÿâ’ÓÜÿ\³Q‡ è‘Ý,=¤6, L\A ¶D«ûŸ g@œé ÿ0}4¾\™„$8h°6{Dl׸no¡!ÈK[ëFÑg<67 8ÖÅ®ã‚äüá^l,½ ^;E£Ì¢0Ò·Rf½åv)ÊÒYT¨}‰í¶Ÿ@¡)ú•h¥?;»â!)-w¶}‰´+ºç@ïÊC¿_Þw¿öXJÒÞ½n«Xr»L=£±C©s_²AÕϺÆþ§-3íl‰Á°(ºª‚ëÀù‘ކKg)šqðëÇϤ{þ,ò ·âG°íô耗Iû€êOæ­#™Ì øˆ4Ätu.2!]?%›>/â˜çÚ¥×úAŒ…û»n%µ\I×:+É)5².oGïu ÕµkCÏë¾ä¦TÇâ7[{/éÚÒønœ´q@ú^:t:+ÐÚBÁÊ^M黿¶ò—îÁ9b‚¸Á/17CS„ _¶ZBœpKSiùµOiÇ;7šÛ•º¡Žöi*È×Ëð$瀮ÅV ºÀáåÞÔsþÚÔ;-ÚfÆ0zÏwY˜A=¢®\û~ª~®–"¹×[Qô±Üz”ˆnøæ@sZÞ ±Íê°‚c‘Ý ì{—$ȽK‚©º{B¬iy‚7ïçq,BÐЭvuv9ŠH T‘=ÿ·p¶.ïKsö`t“š„N˜n–£$†nó¨(Zs^½(Kwí ÐK,ÅQZ­l€Ó­*×üÙÇ5µ®¥•GazTXtRaw profile type iptcxÚ=‰Á ÀPCïNÑÔ¾]§zé­‡¿?¡M É#r?;åÑAçÉR¶YYªcõ 8†5éˆy²Ÿ«™¢ÛÄëCUy2å» § jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá& ~IZÌËIDAT8Ë“!lA†¿Û’œkUQGBr'šœ»ŠÅ©›: IOÕµ§öW„ E]™bAZwYÓª›tU9UWw‚ó/™NÊ$›Ý}ïïýï½@ÇXWë6¹ãëÖuEóŸÉ8Þ¯¸û‡ÆºîŸÀ#  äÆºá?ª?€u`'¸¯wø°ªÙ>)àƒ«;øK+Ó¦ªÎMœà˜EÎÜXg£êC ˆü5pЊ@}À7Ô€s`X§Qõk`\3  ~Lè=µÓ/I|+’เ5°" ž–ÁÇ1ké¤uUuz[ðCS ×›2ø÷)>[µoU9ˆ¨Ï$4þ+6'«Ý]…m%*ëª×— Ú÷0^Kluü  e¬k‹^.'m§ßTâGÀ$Ó” à3°­ ¹†×Ö³)ÛX˜wb•ßSo'eð“F@ƺ¥ªîŠAØÑšLØË´ë:¡÷3ºdÄËy#“c”ÜÀ'‘œ/ôý4¹™#થ•yàø¦~÷µ±b¾¨#I}¤¶Æk‹ºª¥¼ð x(à´ þfQW¿:½­3`Cþ¡X¿(ƒÿúì² »6ÌXIEND®B`‚nixnote2-2.0.2/images/material-light/datetime.png000066400000000000000000000074741315604104400217450ustar00rootroot00000000000000‰PNG  IHDRóÿaXzTXtRaw profile type exifxÚå—Qrì( EÿYÅ,IÁr0˜ª·ƒ·ü¹Ø´ÓÝI:Nœ©S¶°Z¡#pâÖ¿ºû{ò.¨¥˜cô¸B™ :Éï×.ɇí9_ü­ó wÇí@Êþ×i_ ×·¦~yÔ;«ÓOšŽnž§C33:Ë r:Þõ4ß]žãJ¸[μ—6uº‹ç÷`HFSøv¼JÆ­û,‚Ĥl²à=ñèôEžA>É;ºOÉ;zO¹óeêå1ÎÇiŸr4õ¤çnËеÛÌ?T9¦x—»Þ[ê}ÝWWBD¦¢›‹º-eëÁŒ¶t$¸‹Þp+ú¶µŒ–°Ä bÍWð\|u”‰I|§@ uZ7Y©"ÄÀ+$seÙtIŒ3WÙ Qg“,ÍK7šXh›7oóUJ˜¹,™àŒ0â]s)ÒG½'òéÈââQÓcOXõ™SÝò»5wW7þ¬€ niNX`ñËîbQz«-Ù8 ìÔç÷­AÖ¦¤s+‚!I”"yc6"ä1OAä, Unä:؈DÀÁnÀÜc´Ù²ò®ÆÑ*›'P¬õc!¡†ŠŠ§ªQM“f-Qbˆc´8ΨbbÁÔ¢™%ËV’¤4Åd)¥œJæ,8Â4Çl.§œs)˜´ÀuÁè‹R^d ‹.q±%-y)åSCÕ«ÕTs-›4lÿ›¹–Zne¥¥´†U׸ښּ–ŽZëÒC×»õÔs/µIõ‘=‘{M&µA,lvöF j³› ljf Æ@Ü4f>Q<È f>36…2¨‘81 +±v:ؽ‘{ÉÍiø7þŒœè~ƒœè&¹÷Ü> ÖÆw¯nÄö]8rê¥ã`ƒÁš §2¾I»ì8íG‰’ë¡”º+ñYxoéΛ¾¶twq¼ú•tg ?“·ØÜ×Ë8'ÝõXöPÜõXvé®Ç²+ÝõXvé®Ç²‡â®ÇòÍ:úªêÝõXN×ѹè®Çr¢ŽÎŸ߯ÿã:zˆéeéºßaöÿtt>Í—OÈ/}7– 'äiGnÿÈ9¿Ý•ìý"vÔvüyƒ†Ý¿ëºÇ1 ¢-`zTXtRaw profile type iptcxÚ=‰A À@ï¾¢OPXûꥷöÿT„6!Cä~vÊ1¡ ‚Γ¥ìþ±²TÇêp( kèˆy²Ÿ«¢©âõ©ª¼24çò_Lc jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá&(Ü.+¾ƒIDAT8ËÓ!lSaà¯Ë’ººº¢†Ú SÃCñT‡Á 5Ô†ajA¡n3dŠ)ªTÝ\WS ›êSনÜ—<–’ì$/¹7ÿýïÏ=çeUe5hä»EYí4ò¯EYmº…VQV%ÞaŒ‡¸Æ¾§æ®ð çèáít<º€âIŠ'xŒMüBeš|ÃMòOõ«è$ÞÏ¥äiÐÎ÷ÐÍY¯Ù F·QðOQ°f êÇøínèb«NV †‰â(ñ B ¾¤Ö2 ½¨1Áö°À)^E¡³Û“®4ây¦¦è'‰+<Ç:ú8-ʪ]ûà^fI#̰‹4ÞÀýКGÊõxãu“ ïsñ:2.òeçØÁÓìã Ia3¦ÚË‹|À̧ãÑq¦|_œ _OÐÉ‚¶óú<¼qáMꮢÈavÔYE?ãò?º_b½(«ît<šáQý³aÖÊ6û{&Ø¥?F•­ìh¿uëeÕÍ…~èÎp<†#ng•Pä†.IEND®B`‚nixnote2-2.0.2/images/material-light/delete.png000066400000000000000000000176451315604104400214140ustar00rootroot00000000000000‰PNG  IHDR"(›Ü(¤fzTXtRaw profile type exifxÚ­širíº „ÿsYça9«²ƒ,?HùÌös\±ïµl‰F£AJÍÿü{©ñJÖʇ”c‰Qóå‹/¶òKÖçëöûçþ²öúÌ<ŸWöë&Ë)ÇÑ?ã¼®¯œ÷’¿Î·çó*õkœ| t}ð5 “'‹í2òÈÙsÞ\«rÝWýÃt®ÿm\çÂ9¼þíÎñœUvºÂÿpžâ°À%Wü.?\ĹÊÏÂÏàÒgß©Q>;ïöÛ‹ït½Î»gW(¯ â‹®ó&|öÝöУEæþä§|4Q?~=øn­‘ךgvÕG<Õ5©¯©ì߸y·o‹|'þ~Oû»ð™b'bCwâÙtW¦kœ^Æ›aªYfîc7½6q´¶ãq9—]²Åö/ßfÙD†r™xtâæ8mo¶˜ýܲŸ×MæÉÃp¥5 f¸ãí[}:ù—ïÛ@k ÄÑùø X`×Î,ÌÈÉO®" f]> Û¿û[=àF?ÖÁ°Ýœ™`Õí Ñ‚¹cËí8;® Ú+}Räq €‹xvÀãˆ€ŽÆNÖ&cðc&>Ë­ó¶‚F-bã\$8Ùʳ¹'™}­ öœ†ZDp‘äÉ’(Ëû~’Ï`¨¼ !ÄB%Ôè¢!Ƙ¢pTM.ùRL)åTRÍ.ûrÌ)ç\r-¶8(,”X’*¹”R+­ ]¹»rE­Í6×| -¶Ôr+­vàÓ}=öÔs/½;Ü ýGI<ʨÓL 4ý 3Î4ó,³.°¶Üò+¬¸ÒÊ«¬z‹š¹Òö)jæ%r?GÍ\Q“ˆù}]ºGÓ)} a„N‚ÄŒˆYoˆx’h+1ÓÙxo%r3],I,Q3A‚3ŒDŒúilXæ»{ä~Œ› þŠ›ý.rJB÷ÿˆœ’Ð]‘{Û‡¨ ©{}Gìd¡øT»±qÁÌÕæ*5éóqÉœä×f¿»F½ßTÒ7Ãfß?`ÕÔÖ4Á.’K”. R(„#­epí궆EÍZ¤±[ËÆ!h;³v3ÆÆ¬åž|›ò®€g©éG - ÈF×’Hg¹ ´q¶àá}SÛ¶¬7SÄìPbˆ°È»)Ì`£õ›97c¤ÌaÖ(1‡0ƒôͤmçIÛ L<7†PxêºL£­óš]L›Û‚¼a!p¿é}ütãë}ŠMÒŸïâ—; ‹Ü{=ññFõÛ'þÓÕož˜ŠæË¸jÓ#V¹Ü6ÆÕIök•·Ë´b…ǵs¤D˜¶ÕV³µç´cCòŒ…øé3t¢;—Žcr,7y쌪e¾˜6Gpº7ƒZJP á"{,Ðä$\¤ÜPeê7@XS–£TåeK’öêw¤ƒœÞªWüŒ1nÔ+ÔoHg~ßšó4©c‡ú8)Œ‰ÅãƒÈÖ_Õo/üñY«5F±ÚƒŸsV"ÝéOQ0å8TèRŽ æ—““e6æ1–eä ÙKu÷úa>'dˆÛ©¦C‚D  ‹`¬öò5¼rçäŒí&=þ4ØÛ¿FW/ÃËPîýyo£¿­~oü϶«ßÿ³íê÷Æÿl»ú½ñ¯ƒÕNº7ë"²N™YHtÚ…VjB :lÐTÜT¤®ëN2ÅÖÚÊ~# å8#ÁQ$ !t¨ž>AUriR qŽzq…œD ø0 "6œé×À2%~1µT»¶¢¬)k[›qŽl0Õ·ž˜û€‹¶°¾e€ªšW¾íÁîƒÎØTˤn¡ÅÑ(²…¬ i5†„"‹ÅT'L¬GŸÔÅs¡÷ä€cMÏÈ+ÍAáe.4ñ^Õ£óȲ©g¬pu3qq]ÏÁ†Ž×ø@o¢s5æïjéŽaVµvᣠåùujW¸,Ô­Ð/Ë׺’žµµ„j‡ý;1B°Ñ·YDGYRûK°RF¬_YÂݺ±{Óq½©›Js\³)ºel¡ÑÊy޾é¹,ä8èi'^"0ZbˆŠp·Bx;ˆrÙ°¸»ÎÙ¦‘)l{€0(ªQ•n;&jÏz‰4dMK˜'µÖœø•hu¦1<æ qdÊ+%ª[TªÉÙLZBJÕ ¹¦PZ¶¾Œ¼gOâ>à¹ó`z(ø.NDTŒ\+Ãr(•:(^FçvÛ"zX'7ôj#!^{ŒÙ3؈[cž©#k¾x{˜/€™Ž*¦2ûéü*~v)ß‘’íð&Qm1RÔVN¿\“³¬͸ôšÑ6Tkõ9ÇΤ=ꦦØ|¢Û"«BNÍ€W&M™n­;°Úå.ú4™¥ˆ…¹†pŸuæ´h>æB?Sí{Ýð«$ÁŽÖÁÛsDÙ×DœBª ?×Ýœ7ã„1bsIÛ‰ÖkÖŠ5cdšó5$ãsåš­ bbl™óK‰„¢ð¦åj¤ Àù`Eš~?¼èÎÍP«ò¶.yqXVHó*"ÎDmejUmAa±_”âÀgCP*álÃwO·>B*ºHŒá\( uÔgJVœÌ§¹ã¤-ƒ0½»»—Ô.^©UYkGsÐkèöá†ï®W¡’‹¨èÁb¼ui `jY»ÃÔö‚i€GU!蛘¯Ó ª‰°@1Ö°‰84·šEe9­$ó«ÏòWý.èE– œ^ŒWk¥*Fî@¨IN†@×D¿!¢‰ò å¶EÚ´Ú䬱 ó±Ú(QP¾“3?2ô;A«¿1ô;A«¿1ô;A«¿1ô;A«¿1ô;TÕßútÕßú Qþdµ š®£ƒ>˜"²„è¸Í"ŽÈMYj¤‰zU>ËÔOQköÒ‹,.Ð@ò;­ YƸ©‰S€„®° d0[ ¢BÌÝ!D£ ZF@ÛTE®•ÝmœXº¨IÚ®Ð'Da&J[t“3%Isɭ޾B¡–h§›”žlDlãÛÂ%bæ©.´àaÀ—ØycûÇ<€îÕ7|±½PÙ+ß‹²ÛŒÿD÷êßcƒ0þG¾Ñà7²WÿÈöŸ¹þ çê'%rñýÉ¡— ’Aî9$/|æûß ý‰ìÕK }ËõB‡¼¿i'ž¿ˆûÑC‡¸±üæ•ýõÅ_<_v?×ø«¹V¶œ0¢B¼'Æroh¥·šgÒÒM™pä-·›PÞ 6…Ë‘B UcCÈ1!SeÀm>`Áèvv³»d(ü¾dý9îàîg±íÍD«ØÉ2šÒh/ü·½¹C ’í ÀW‰“AGK2DÓžúÊãèlÉ‚ª»%Ólçy”ÿœ w²×yšô„wõ x®ÿŽúùДFði³?Hu!>™ô­Ú¯¦Äk ZGY$x}«Jâ}Ûø8æNÑe®ã^‘©\‹#×ÒˆØMß¿JHúmíåû¥_J26 ¬{××òˆz[<»  $RõþyÙEíu‚a¬í×~³òG{Ÿ®V?/Bµ¹@>Ò—"Fl‰²ï)‹¢Å§_ÓžÔBÕŽºG²M; ¡0 ÿ ‰Ñ0——>ÏòyÛÚÇ\Äq69 fÖ¶´là ôçŸï-ä´7&d;¨Õý*:ˆ'HÐlɤátæìáÜ«Ù5þ‹}9Y1$ÎF—Bz“2äUvîlΪD“[\ö?,R:÷Òc,¡ÑzÝ?]}GîX^¼¯ÒG¼Î{“Ó‡ÖU}P3³FiåÌœ™ßÊ™/:WßÊ™nHÉ"S£¦çÔXײ¡z]7”§ U‰w?¬FµºxTïê¯JÿU¼«/¥ßdQX?×Ú!ûlˆ‘ˆCÒãò¡´«PˆlÉo—±R•Ùc%èÅÃì‡<­l^¢KÌ}Xd”“=#|.oA¬“:$#CR€el¥û~cR2ºEÉò>Rn¦’-k£…=Pn;m…RÈ\ y,“Y^¥sE»&ÛyN§®Da>ïŒòtïWAËRðs˜¨ŠÒ á8%¸ñšL¦{© 9M-@"-B®ªßoÊæ ó@ÕH¬GáêõŽÞ&b³Tfï]„¨dß–’ ÍÀ\5.!£j7Lf,á¯Eá‘ýOª¨¼‘™ÑaòšM@©¤ÌY^ÐYE^ZIG™g$ÆR†Áe'·Ëîd7ÒÆ6)V˜8Œæ³ZîH¸›Øn¦0=É¢’l œÝ_‚N®¥ P/y·…h:YκvqÌZ;ƒ‘÷ÑÕϯÔ}{DêàUO/ ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá˜Ü¨ÜIDATXÃí˜ÏNÔPÆ¿Ûiè18ADTbŒk£qaô% °HL„ áÆ‰£ñ%tëÒè‚c˜MFLè í´éLï=.˜N[˜1zqáYuî9ÓþúÝs¿ö–¡Éxòòõ<€y´o¬ÌNOzGª-œtÀD‹ žX;ªPiñîZ7rͶ¢Èʯ»k%r³Ó“V3…luuõ€.s¨üÆÜÿñPðĨYÐõ5·ùP‘– Ðwª÷þ‰”þí <~ñêS”‹2!HßsÍK‹ ‹Ùý©!+[ 9¶eÚAC# Ù/(Ù%  ¡÷dO ï¸.Ö³€±Ñ¤t=2¯ª*.Œ‡¦i—(U*^)B„bc•Q(âÝû€]³„[7¯òëÙ |Xû¼ÿûê•˱ùTJǹ³C ’PA*W ƒ¥È^øœ‡¤å‚GG‰ˆÿÌW $Ä–ô!±573å@c¶lúk*ÓÀwdƒ!vB Œ)eùŠ(•¯yßå+âo†Ÿ5L±ŽA+RóÊ& Q“ª÷͈k[y™r—/åÃ="à€hWæϯVÂSC€GC¢vÙ-C ýƒÃ*$šZG92;3å‘9yŠ`Û±L+òU‘1V·vQèììâ‘ ‚sCb³ËËˈSDH£ú߯J{œo²PŠý=^‘ZÅ6HpOŽ"¾ RvÝAŽ—!^Ïó D´ý÷W ¯Ö<'¾GTµ­ Ø|[›MMôŽŽÐ Û“í‘ÇQcÉd²^ »ìØF쇚ô™aMpßv{º»qûÆ58ŽƒL&¼®ÿèÍ«‰ú3õš˜ZR÷bAæf¦¼GOŸl>“>+±¦iá½Jy"lÛ–¹{Ô×6oôö¥Å¡ D"/a?“¿wwêÇ~à K黑ôõIEND®B`‚nixnote2-2.0.2/images/material-light/down_arrow_small.png000066400000000000000000000002001315604104400234760ustar00rootroot00000000000000‰PNG  IHDRÛn€'gAMA† 1è–_tRNSÿ[‘"µ)IDAT×-ȹ0 „ÀëI õ_–¢â/ÐÍG ŒR…ó|¸m"0 E`8éIEND®B`‚nixnote2-2.0.2/images/material-light/emailIcon.png000066400000000000000000000166001315604104400220400ustar00rootroot00000000000000‰PNG  IHDR(^Ý\Ý¢zTXtRaw profile type exifxÚ­škv$¹n„ÿs^Ÿ ¹ðuÎÝ—ïÌ’º[Rk4¶»ŽT¥,2“θýßÿ9î¿ø—K—KmÒE<ÿrÏ=*šþ=ïÁçûûþ‹oß…?¯»°__D.%ÞÓó§¼®åzù5¡æ×õñçuWçû“ž½¾x»a²'G>Œ×"_7Jñ¹^»þš§ù·í¼~Æz]+ÏÛÇ¿s%«p¿]Ü©óSž§$VjÒdŸíw°A\Ó”øË~ç¯cçÞ?~ÞkÇŸbçõ5"ý çå5@>Äèu=”¯cw#ôGÖÞ>Æ?¿Ðø6ósìÎYíœýìN³)q¯Mù×-î'’£œî4áUù)|®÷Õy5¶8ÉØ"ƒ×t¡‡’?!‡4œ°ïû “%æ¸cå=ÆIÄíZK5ö8oR²½Â‰5õ´\jde’7ò‘âûZÂ}n¿Ï›¡ñä7 Ìøôr_]üß¼ÞotŽ%< æ|bź¢ašeXæì7£HH8¯˜–ßûrþCr^‰Md°Ü076¨~<·%üÂVºyNŒ+>;ÿ”F¨ëuBij ‹ ‰ x © ¾ÆXC Žü(+)ÇAB)qwÈMJBrZ´g3§†;6–ø\†ZHœCñ42¤$+ç~jn`HK*Ù•R¤ÔÒJ/*I²©b¥5Õ\K•Zk«½jK-·Ò¤ÕÖZoÚcOPXéÒ«ë­÷®ÊC•[+³•ª#Ž4ò(CFmô¡øÌ<Ë”Yg›}êŠ+-ÊɪnµÕ—î°ÒλlÙu·Ý·°vÒɧ9õ´Ó¾gí•Õ?³>dîû¬…WÖ,cùŽ«¿²ÆåZßnŒNŠåŒŒÅÈxµ èh9ó-ä-s–3ß#EQ"Y Å’³‚eŒ æb9á=w¿2÷mÞ\Éÿ*oño™s–ºÿÌ9KÝ+sŸóöEÖ–^N7AV…SŸĶ=ÏMWÛ•šÐÝS«OyñòÉcFŸmi>5Ö‡m ‰nB:«ê¬®9q¶@~æ»%é:BgHÊgU]¹œ\Ï`cãêÚCÙ1ò\ͳÍÍ»VÖ:,ô˜$/*±ifÐ$Û]š±·-øŸÞÝ÷r¬WƒEÁËÞ¾Þ4vhµ@˜Å¯Ef<;VS’cnóLõÄtAÁÚ„}´x4‡]æZã´\Õ~‚m\·.@Tæ ˜‘½]•‰NL k†“uó€Í’2ÁåIƒyØ?ë4¢ÊÅôþíý4pǃÀšÏíÂ:Â’½I̼ÅÑ6:QÂ>¥‡LvJæÂ,>å¹ÏÈ}• l68ÒÜ™sêåt&e›4нÇP¨ˆÙYèIiÈ*ñDv—5 Kîa0¾RP2mCuÙ¹+˘+IPÀ† SV¶Z(è ÙÂݦšzw/|zï–5Š¥“4Ž:%ÎYt°ÑCMRHYzp=–Ïœþ ³õˆÚÑRk„5&¡Íp—XG©qÔ¢ºöš3‡(¤ŒO·“([MÀ@”=ËX0ýÚw…Ú†ž¨B„ß¶Êbæ1Ðó£èŸÈ&!Ø-ÇâŽ@2yY®ýj¯Ì~ŠDßĶoî•>Âüµ­s@G3K$‘ÞÄÒb:3jË…ÝOèØã M‡lJ%8ÊR¤­½å*Õ“³m8ë»*2p¸äyüpvi"ÇÒí’ÉoLµŽÙÇw?ÎsïÈÃr,¿—ÂÇ» IÂÄ´S,¦3Þ¸Î"j Ý!X÷@B."ª°~ÏÆnÔšrÎHÐùîÔLèÕã^0®Ä?ø¯´+6»…Q!Oê‘ÅYÁ-äVÜ$´ÐCÄ¢sJ–>6_*ò-§A2È: ã·22Ì ^Ï)Ô©É9íô±©Ée¼(ðƒOýì$¤_uQŒ •e–ps€Ô³y;©53Këak VÀȳ=’ÎZ“¦bÐÕ`K>l_h0DE(jÏZ¦É ÈúBiYäY¸ÃNÍ@jMé}ëš bFµs•û°´ÆÄGåæÌögI+á&Ò)%©+Á‚êšÖN/7}I-´+ïÈ¡—\ðr˜:)E)<­Dßì@igÝjABÛl¬Þ4¦š$á3jÅFáºP Th`k•Uð! Ú¸a|”6g¹Cmð÷¢o¡hàg¢ŒÉ…-Ð$U'¶q(äêölT2Vœ<³†¨y[ö”ì…&‚ ð“YÏÀôˆÐ\Äóì …^OôX?Ó“Ø@z1(Àœ=U±ƒc£c’  *ÓÌÂFˆXëíÕK2:¨Õøh Ì˜§«2›Æ@ãÒoM[ ÐƒàŽ¸óÀb8¬NC[©)ðgêepdýŠ/VÔ‡ ýV|*ꄱ™¤Nâ ®%`Ų†÷˜ŠYݽ³16p"´jTÅј#VÞŒˆÒ6Ô.¡Ü±†´RÍÕ>LX Ì'=ÍQà ¸5=êóÂÞ|J4š»Ld&Ù^0.Ôšá‚ù6\;>É{÷š÷6K]×/rø97¸ïÉáçÜàrxž ûmM/æ8, A^zß÷àc-¼éû{CîzðqÞ¼™.w}ÎF«hpgHÌœôèõ=\¢Ÿ“xÊɺ.ðÏ*£Ð 5ßIÆ=iE—i®fj°*T2цdœ…?aiÔÖ€èÌa%·­¡ÎdžQýB nB<Ýâ*f)©ÃÕ—u 3;àÁÕÓc“MƒYC;µ£³›ÄÚÞèÈ«£J#=_¢Ëèî]÷±lÖÀ"½ É_æó¹±ÝšößÄËBéÓ’8Z;9U2Àð×zÔ:ÎZéMo›àm¬µÂ±9ÀQ¨é³© -î¹#λ¨Vž”Ù=‘¡„MoÄf %‹¬©Qô@Ãä’–1[áÝRÈ&Á’Ú;ˆÕ·Rµ2îž z_mMã™ðÖ2ý†‘w„’± ¢hâñ v~Ô.üwËlr$“¾Üv„>H Ïçαã¾;˦ü1yæp£×,»³ËëpŠúz+R:—`®pögHÛ ü>å5Á}-Aÿ$&ŸT÷u‡úï;[÷aâg÷ùý9 $™!°®nÂf·Þ´¼Šíè°"Žp¢ôà¦XÙ@Ì_¦8 ^er RìÜ‚¯Ñ%sxô¬-dª—I¸,Ù~ð.Xù—Íw?ôùŸZƒÍ„ûÕM<3 ´Ö!éçˆz;Þ·?]]"ZáL:Ûªó´rq„Cî73á!]¡éG ¾™öy–»Óì8_ðXë.ƒîôãaó?¿» 4yp÷páÅ­ëAVË.|ûÉ×縒PF;ð©wŽ÷¯Ywnð·YöÝö6©„è"nqÝlJ“üžWÔ‡}£pÊÓbؽF‚žXA`\cO¡À±ÇüWSÐÚT]Ö}&ýy¸û9ú¾w_Âôúׯ0ê~„ë Ô™±ü€¶7¬Ò>£ó/£Ý¯áÿ7TºŸÃ÷ •_#Ìýbo¸üËBÙ]X~‹Jra ûí°þ b<þdîQ ‰Ì6Ím¤?<¿BÌÕ<ýÊó·_Œì~ôÏ~ðî¾6†ß™¼o¬RË6bcÝæºNçÙ±Ó},û? ì¬kÈÍ–z,ªaS`ûôS¦!Ùÿæ;T§¦yÖazTXtRaw profile type iptcxÚ=‰A À@ ïyEŸDa·ßiöÒ[û*VAFµûÙeG‹i˜Lž\NùW¬(O áDÂʦ~JÏ¥€6€–ë«îö0EΈ€ð8 jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá(+-tR|IDATXÃí–ÝO›uÇ?ÏÓ>}J‘)Œ›ld®¥Lƒ!®¼u)q›Ìe2bÐ8¦‰1Ñ;o¼ö¿`š˜Ì&°€Ž—ºncÀ uKÜ*Œ -taRhûxãŒÐ–µ¥Û¼è¹=ç9ùäùžó;_Á\S»ø°Š¢˜a³”yòŸÞÌ㈷‡ŽG–yy¸|.˜kj¿ŽÝ/Ò’bŠ ˆ¢øHÀEáæØ8Žþ!ÁàSª|CÑ×À†‹‰ÛÓüµ°€^Ÿ¤V?T¸¥¥%W¸ä¼JHQV§·¨)Ò‡×Æþ`jÆCyé^òrs ܬ×˹Þ~ß·´1ùÏìmÊÎäÍC¯b2Ö}·“â¥LFŸ}Є£·ÅE?ÕåûHKÓ&£5I3{²,c­°$Ý’=ËœL¦S€)ÀDÃ/—ÿÇ€gÔÀ»‚ |£(Š5 Ê€ûq¥ët!`¸|õ774³¼ÊbÇIEND®B`‚nixnote2-2.0.2/images/material-light/encrypt.png000066400000000000000000000121711315604104400216230ustar00rootroot00000000000000‰PNG  IHDRT6*ÉzTXtRaw profile type exifxÚ­—²ä(„ÿç{H‚ãð3bo°Çß?÷ëy===½[Uv¹0ˆÌTJû?ÿ>á_¼’ÄŠzµfy•VZêœÔøñú82ìù~^ZÞÿäëõ ùý#qéž¿¿m¿ã;×õû þN$ãëõàó§¾½|›0ß•'ã ò(§ëòþí½¯—?lçýŒõ^Óÿ‹ÆRæË)¤ýX%AöÜŸcçwM÷Ìž+‰ï’ÿ»ðyúx¹ý»Øßù+!Ú;À~Àè½.ús섾°öí4}ýmxüãëسê9ûcw½HYx7ß)ž3ÂÑG%2cJàÊñ¾ïÊ'Œ­8ásĤIBKGŠ,érd?Ç)“KÚÉ9¦4S~®Õì©¥ùQî[NòÜò ¹ÂÆ„·Ìåô‹<ë¶g½)••—02 “ wüé~vñŸ¼?':çJ\ä‚ õòApJîÅ|¿!r^LõÁ÷y‡OZ¿¿.±õ¹²ÁÇÇCå»¶òÃsfœ’ýñ#5Ä×;±¶Œdˆ&YÅCJ.Ž~:‘§\Ò€QMK›œ rÈÖæ—glÒôqk%QjZîUŠ¢/ uÍZ‚ªšºVmÚ-[153·ëQݳW7w¯Þ¼×\KÕjÕk­­ö–ZÆÂ´YóÐjk­wíLݹ»3¢÷‘Feè°á£Ž6úD>³L6}ÖÙf_iåEú/[V]mõ-)í²uÛö]wÛý µ“O9zìø©§þÉÚËêWÖäæ~Íš¼¬]ÆÊ3ο³Æe÷oSȵ½œÁX*ã~@Ðér«”’.s—³ØI¡ ÖD/9K.c0X¶$=òÉÝwæ~É[Ðò?ñ–þйp©û0.u/sæí'¬­[÷æÃØG^Lc>Û^؈oÉ#`mš6·øžY?•m èqö¹Fí½‹¹âL}íÎ÷­dl&ÄÑǨino–ëçv ˆR8\ˆ›ô;EAöÌT¼{;c¸Zç¼¶emÉ©¡zÙM&\Îâ›cÁ"zmåÆ'óZ«µR2¶I2¶[Ìüš7N…LÀ gTöV”Æà*žy%çø…•µ[JHžTÀÀmoЩ›6§VV²+MGß4‘Ý?$=7ž‚'UY–Þ¤>[«6z©·tÌ©  !¥âÅ‘¾È*ý"¥qnŸP%´ ´R©ß~h5c;Ôµ”áqdž,ÎLBâ ~æ·¼%æèjö!„¥ ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá(.BvNIDATXÃí˜ÏkÓ`‡Ÿ¾mš´Ó®mbÖÛ¬c0‚ÿ/Â@у·éÅ»‚wõâAP"8žü<¯¨0„9¦kÓ6k¶á–¾Íp6º­?¦qääò}Ÿ÷%<¼¿’@¹\¾ÜTö¢% ˜žÇöe¾´ÐË?å*0$€ÙP¦/‰wp1tá[ 1@ B6u\×=RËdÒ$‰Pã¡ÄªV§/^¡§S$µ½s«Ñ\g4grçæ Š¢„&O#´é8LO–¸5sX4 @­ÞàÁãgܲ§Ð–”ØM‡–”hªŠ‘Í ©j ·Õ¢±ÖD¶=Ô¸Â=KBÓü 0|þ\G&p°Ôw»÷qÝ‹Kß‘m¯S³›S—H$´@2[ÛÛ,.-ãy;Œ³ÎÔD‰¡d²¯§¾ûçÆæ& {Í_¬Vª§bYT, )å‰}­†}äådÛÃjØeªuûˆLÏÛ¡Z·ý™¡ Ÿ¿2ÿá#Ÿ¾kòò5îÏR,äµmm»'Žy¸4Æu[]WÛ ÿsƒŽFEßzÐÑ…éV?S¡z&Ý·4&›>‘éV?S¡†ž¥˜3;3 s&†ž ,3bèäM!ö!yÓ`ÄÐý=åÿ&"a4ŸÃÔud»+Áf„`¼XÀ4tÚžG\QŽ]«z~–ËåoÀd7`yå+?W{råò4éTx«ßŸ¡»½€Òø¥ñ±ÐÔ «¨‡|KMo€ß¡ _ò>ÌCÀ½ý_y‘ÐË©ão‡´]»¡uqzIEND®B`‚nixnote2-2.0.2/images/material-light/eraser.png000066400000000000000000000071761315604104400214310ustar00rootroot00000000000000‰PNG  IHDR&/œŠbzTXtRaw profile type exifxÚ­—k’ã* …ÿk³„‚å`Uwwùs°Iº“N2G¨,Ëâ ‘nêÿÿ7è>œ]¢ –bŽÑárȾ`Üñ9zva¿®w\ØÉõõÀÃ$èå¸ËÎvýzÁ²o—v²ºâ¤è4å (sfÁ¶D®@â;¯{Êë½¾-g}·¶lzt×÷ÁŒ¦ˆ'ž|—Œ¯³ˆIÙû‚ûäç(`,’qe‘Û¹£óð*y§Ô]çΕå!—© —C¼ÊѲ³ÞÎÝž¡ïŠø4ô—´§ø‘»1Z£«+!"S‘Ö¢N[dÁŒÂ‘ˆfø*ƶ·Œ–°Ä bÍUðÜ\%ÎìYÜàÀ î{_¹BbðÝzï«—Ý–Ä|öUh<¼C#I`SÁM`ög-¼Ï›÷ù*'ÌÜžžŒñÆF·Œ¯´s 1ægžÉìG® ËÏ= “ܼ @x¬œêžß½ÑW:÷ ¬€ îiNX`qÛbSþÚ[²sø© äŽÒ`k+R„¹bX@ÀEåÈμ7fä1Or/Áo Àª¾1 °‰€ƒjÀÜxÇx÷õê3Ž€P‰(ž4 °BPì {¨¨h Ujš4k‰CÔ£ÅyF ¦Í,Y¶’$…¤)&K)åT²Ï‚#LsÌF9åœKÁ¤¡ Þ.ð(eó›laÓ-n¶¥-o¥bûÔPµÆj5Õ\KóMÊ¿ÅfÔRË­tîØJ=tí±[O=÷2°×†Œ0tÄa#<ʙڢzI¯È=¦Æ‹Ú$v?û¢³Ù)ÏãD'3óAÜ&lh?™¹Ä!øIn2sÙ£(Ôƒë„ÓxÁÐÙëà3»/r¹‘†§¸ù{äh¢û9šè¹ŸÜnPków¯îÄŽ*œ9u2h–(æ÷©´ÔÍÍ~™žïéwŽRÇ>(5ôôãas=ÑûZŽžÞÒò­§ÇQ¦è{š/§ 7Wtîé}-‡‘Þ×r/ÐÓZއô‰ü\zQËoð?ÑÓûZã¶zYËÅ*¤Ò ×+—Wjíù\ß gŽGêÞÙÙžô4ž;ªè3µÿüϨ¢OœŽ§¢•O¨úÔ™ýZŽn…¢ôOïß©¢{5ökUà¿Gú Ë© sÐ azTXtRaw profile type iptcxÚ=‰Á ÀPCïNÑ4¾ꥷº?¡M É#rÝOÊ1rÃáÛK½ýËÊRÁÕ3*kŒy²Ÿ³ÙIîn êCUy2Eé{—{º jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá' Ž1θºIDAT(ÏÍÐ=jQà/2 !mŠìâ,_ùÒ¤˜Bd.Á –VÓi­…î"XX¤h3dfbã­Îý9çÞsBLk^ÐóŸ1MCLÇÓGÝl§¦ÿs«@÷V÷%bz¼ÄY òo!¦GÌCLeÖœá#,*ac »Uù‹O”Tä ò6?èá鲨ÆÂìló7f×.Øã ‡3 –xǸÂÅ !(Ü̘ä IEND®B`‚nixnote2-2.0.2/images/material-light/expanded.png000066400000000000000000000001741315604104400217270ustar00rootroot00000000000000‰PNG  IHDR:˜ ½gAMA† 1è–_tRNSÿ[‘"µ%IDATÓcøh'ÀÌÆ+¡a…¤,€¢(€f†í†}.ðõ/‘Þ9IEND®B`‚nixnote2-2.0.2/images/material-light/favorites.png000066400000000000000000000154141315604104400221440ustar00rootroot00000000000000‰PNG  IHDR‰ zTXtRaw profile type exifxÚ­šiV½†ÿkY‚®f-Gã9ÙA–ŸçJ 8|m¨îên•t‡wPÙ¬ÿü{›ñRM&Ä\8&ËO¨¡ºÆ“bïÏ=Š çï}ž÷äýyóú†ã”çèïË´žÏ7ÎÇ·/äçóÒߟ7y<ã”g ç—½^Ùñ¤?“|òîž™ˆ©Ï÷Zøe9ÏoŸÏ¹x_‡L0fd<ïŒ[¾òïU<3ðÙ·sl¼.NŸ…óÜñ×ûòyìÌëÓÁ{}ö!v¶=çýûP›ž¤1zÎKü»Fª8ñvK)M¶¬s2˜bpËeŽÎ çϹⳫnø›²]öÕOã ÙäÍsÚ½ÎEÎuë¹Þ•§ðI' &'ƒ泓ÿäñ:ÐÞZ⸼Ɗy9­i¦¡™Ó¿|Š„È~bO|ÏÃØ÷¹yI¬'ƒñ„¹°Àfû¢Gy«-òìù\´ÁØÛ’ç3ÀɼLF<°I|”$6;—Eˆc!?™;\'£›b6¹ñ>‘ºkó,ç³.º{h!Ñ'š§¡F²BˆÔO…jÑÇ`bŒ)æXb-ùRL)å¤Õ²Ï!ÇœrÎ%×ÜŠ/¡Ä’J.¥ÔÒª«‹5Õlj©µ¶ÆEC7¾ÝøDkÝußC=õÜK¯½ Êg„Gy”QG›núIûÏ4³™eÖÙ–,Ji…WZy•UWÛÔÚö;ì¸ÓλìºÛkÖž¬¾Ïš|ÈÜ÷Y“'kš±p>—ß²Æéœ_†…“¨9#c.Ïš ÚiÎl‘œfNsf«£)¢#k59S4cd0,qqËkîÞ2÷mÞL ?Ê›û*sFS÷ÿÈœÑÔ=™û=oŸdm*ۅSë7ÀÆVi®4å¤ßŽ«t0šk~9›{ï¡¶éP†Pµ1ì"k6wW¡‰­îm[ß‘\sõéyi×^çHø#kë6¬1ëè~Jò’Fr©˜«^ÝuÞ[Ü×sûö¸M:ÿÙ÷’˜WÏzu¿cãÉ܃¿Ë¹îv\Ïòdu ,¯ëò–ÏÕ 3 3 ÅåÞÊ¢Dâ"w¯ŒZwŽöÌ?»(eLŸÆ¢*tÓ®fÏBà”{4öà =ö´û$i¶–99ÖXÛ‘Â4W˜»WŸ%Ž%Rʱ(‰fÁ›ªGÜd²'hYA—Ôº4ŠÔÓ!)×]ú­2|j0ÈÚ©¯šö¦Aò’l4&£ô˜Onâ.SÍ:êyÆ@=NÈ(ª2õ4ý²›®IÙ;‰S˜€õAú¡$È®÷8$:êÚ¥©TUºÎgÆŽúîﺛ]ù“Hœ£ùê·#¹\É[çæ3ï~çíç7P{&[OÌ}g·¬³8«ï)Q˜¸È,µõ¦ ¬Žô•áb,p2ÿª›ð÷kJ\3rô2­¢݃q…Õë+dVª®dCB¦äÖ"{5ÅfbDV¶#€€:~:Jb%ˆñ+Ær÷©ïJ9—Ñ Ô04OJãŠôYô`H¢Y7 Vwƒ˜u'ó!ò/Öî3U§l e53¼Ô]¡è(½ò¯5À/1¿½»¶/ãÐg ZRU2EßpH*Á½Áƒzif.¯E¯WO#ÑTv©ö™á„Hk`Yê[Æœ„Õ±V½†@®¾¶˜Ïp>e4éÏÅôÇ£ywÂ׎dÓôVM)ªë¤ÕãrU«D@i¸NFwO§š—d˜©ëxl…!¿@|§of2½ ( ÈèX4ØôéÍòR ˜š¦[+T¿…bGSøeF<óŠÈ.u%„ÙéìÛØ£?½n£4i1åHÁ41´Á‚UÚÍÑΪï©åw£zÇžI&oѳL¬Á‰L‚õæÐK¬/A¤†Òw€‚eE^à<8 W0ï锡·”Ý9tׂ'\oï Áüm¶>Ïšƒ¥wšÚ¤â\Ê  ²"ä2‚–\éÄêœA‡õ²mŽpÒg Ý ~/DÇE@bãQàSL'rAå6¨Gy‡ÁÌ‹b:4mTd¿úi®ÝÏ€Hrç… Y™y— ¡Àpa´Ö®]ì^–É5Ï5í` ‡ÎuÏԙΉ“G•}%ósáñå@0ç÷é¥GE”²N»n ·:4µ‰Ù 6äšvÍy£ý´î”N®Ù(H仿Žiœ™Ý ­ïÆÞËHˆ’©àUÆwÚTí ÚDL0cF_Ö(€mÁ­3®3 i9J’aØØ}H¸dAÉ3.jªÈ3.Õß'÷!ÑËAÿÀMæ÷Õ¾[¬œ‚}—m^j¾Ok§~ôÏðË ª×Ûõ­{%çëH¡Žðb5óóšù¬dÌg5#”JɈžOêå«r1?­—OË…˜SùÙªÄùi·¼v’°nDá¬^€¶] ]ÏRa®MþlP3 DR [Åkbˆc„ N¹ FVÙ—ñ” ±Gw\6Ð?è5](J?ž Ãñ*_…:ÔeŠÓiò© ôÛ­iGP^&¡ò^§pÞA³ß¦@3|3Ûäú¢§J-åN÷ãè5Hör &Ú£¯>ðÃØ™¯‚÷ÓØ™¯‚÷ÓØ™¯‚÷ÓØý˜i¿Šùiá};ó.x©«¡“:ÕêŽA@ÇT#B”µhæ8tvyà$ˆj û˜ç1Ïj]¶ÜÝ"ìsÛhç²­‹Ç™ d \6QFíC}XžÈWâ»)’ã†Ü•W6©"Êå ^P^÷`0HøÿdfM‹ˆáðΖ‡:Í‹À¿A|J°äö=vRÀìp@µ× ¡éŽˆGÿ×xvçªBÚ#üÒµfþ¦Q­5ó7úëѼ/¶Ñaü:¬u‹P÷];“­)NŒDHÔ2#¨?ŠÈ‹˜ÏÎD0) òɘÊQ•qÌ€¾«ã¬ÿ1c¯^Œ>nLF¼ãáó)-ÎÎj1ç¤Womá+ðÔå}ÒÙ‚¢³Ù3[û½i'5Ôª.Xèš-Gþ0”=!UV¬üú³¹;g·á ]Nì¤ðZœÃ`ö®ÃÖ pŒÍŽÍ!‹ïálíø·âDÝH@²å”Ê5D‘®«/û–æX¢q4+ßÙtuT‚ˆxð‰@n4±KÙíF¹»các(Zß U…R<^¨'S#& ™iä[˜00õªkÎPg£§0Ò&UT÷µÞª Ö~q”íKüĉìãDÔâ<›,wƒ7ºé±øñtˆÏÅ-€"«çÛ+*Ä‚aXÒÚ ½¿»AÕGoø±¼èÅPŽº !þ&uü)îöìà²)Õ4úÝ& ¤TÁÙ&SqàºM°rhºqBÀñILÖÖ»  yÝüPDCùw â7:ú۫ϯTÓÁ 1/yô›{Û]0×#¾:з텊ÒÅïžGïj-w.JNEqe’·BÐ]}¸_£·ÊHG«&wsLwÙ¯}ŸR&í\T6r ú\Ñh)À£´uŸ,Xõ§*úîh~{à <6ÝqI,/\CN‘ðýQ¾ÊgûÑW.Þ vàÜÓ{I•öÈÅÙ² áAö_ðÂ×<ìQÛl4½­NÍ•$^¡ºè^mBÏ«³/ 8~· 'mK¤M½âa  RU£=r“ ÷KŠŠgZ¾ӗŽñƒ¦&& ¿ÓІÝÓ>Ϧb÷Í:zÅ›á<9˜ tâ¬<ΓaDè‡Q´ã/GÈN‚.ž>ÄÆ¨¬­6Ý7ɈÑÎ>32é>³ „xÑú1K¿Z¥÷¾øúÄë‡yq,/¶’ÿͳ啌T‡cA ¨±þ¢-˜±Y'(BÊԞЗÚ÷m$mÆÙöÝ1i °“+0×#Nw6þ]3Yf½uDø^’°, ÿ×Ãëþ9׿*M(;ÌWü5ð4i®A÷÷‹}‹{šŠÑ@æ‹Y³jÓ‚ÂàüÔï<B ÷]£êd ‚¶¬’fœ  ‘§²†Ñ; IïVΕæµût®Üë ~Ôh)•scA—?7°Ø ®Qw¬mÕ¤K²KŒ½YÿìîÂoÆ#6»1¦põÏzE>ŠIÔmð–Þˆ{Ø#öö ¦é–¾/{œ=HLe~Umf¨Ð¤S‰L¤å5rÉë:ºïV7 ʽI™JÒ›”ºùyp{î{ÏR·? 7$û‹°Ò»-¯ºÊ²º™„vD.U<Òè…Þa£H]HeŒuiŒ_PáåŽé¦æ­ù/5ÄŸÆU6©óazTXtRaw profile type iptcxÚ=‰K À@C÷ž¢GÐD{ꦻ.æþT„öB>r?;åÂpøé¥Þú±²Tpu ‚Jãcžìçêî½€dꫪò1öàãfd jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá&äÐ0J›IDAT8Ë•!PA†¿»q††‰F»HZ6Ó™$Ùp.`¢I£i"‰I†›¡‘4IRŠ&ÙtÍM’¤‘¼àhy8;7{ ã?³ewß?ïýïý»D:©±,Tå(4ð <•®‹±ƒ,®~,žQé´”0ÒIvCŒ€¾QiÈnKÈVÀ±_.$ þ¥Ì¡'“‰dR†n¤“@ xóh¶ êM›¡tÒ×€™Qi&zîÕöžõúÁ pcÝI`MÖ~!ã8ˆtò4e#ŽJ—»´8ÒI 'yBkh‘Ò#4v$»·Èª¡ãî†4ö5€'«2ì±ÉK{,sRŠ7]x÷š’ýE(FwA[%6#ØZ½–Ä̃H'Õ’m‰Ý.¶Øl \_Ž VÀQ(Û+h¹„°cùûT\u.ΰ10*Í«¬¡ý?˜-£ÒÜ›þ–À‰àûgœmž/×ÛÝê[¸VÀmÈœ„BZ—FÄ¢¥ý,€901*ÍŠ±¿àƒ˜ÀA”IEND®B`‚nixnote2-2.0.2/images/material-light/fileclose.png000066400000000000000000000110301315604104400220750ustar00rootroot00000000000000‰PNG  IHDR Ðá.IÑzTXtRaw profile type exifxÚíX[’$)üç{zÀqÄËln0Ç_‡ˆ¬ª¬WwõÌÏšmFeI Ü%¹¨0ÿþk…ÿà•4¥ÀbE«jÄ‹+×ä¸)ñz]-E>Ÿ×«ß-=÷‡¸îº2Ú|}ÕywôËëÆw{îv¯Ê=Ñcå{¼WN¸i·‘÷D9]ýtõ~ÎùÍvîwwŸ\ÍûïlcæË)¤™+Þr­’aA¶ìyßïON»GpO§'‘Ÿ`úà½Ü½Ã.úÝŸŸ¡Qïú£»ŸäsìBo-¢×•Ÿ~Hk|ûzƒÝZ£¬5¯Ý9+Òpo걕s‡àˆóyLqÞ‚{;WÅU°ÅÆüªáê*%ÊqÓ §Eó´:Lä4“¡M©§|úJ¶TS?¤ð¾h%Ë5 ˜èà-£;½ØBgÝzÖëT°ò ŒL„É6®ðYçŸ\/­µý€(– '¸ìJÛ§aÆfnb¡uc*ßs…7~ß›Á ˜ 6è±]S4¡WßʇçŒq9Ä+4ÈÆ= ÂÚc(ƒ¨plRŠ–’Ç~–'¸}$’…nrVSÒ^ϱIÒÕÔ"$+‚§€!YÌÿ1.ð!—,DDŤH׬¬¢ª¦;G¹ecS3+VÍK.\¤h±RJ-^SÍHaRµZ¨¥ÖêŽES;žvŒpo©åÆMš6k¥ÕæîÓ¹K×n½ôÚ}¤‘Âè°0ʨÃ'M¸Òä)S§Í2ëô_[yñ’¥ËVYuù kt‡íkô޹ïY£›µÍŸqöʺÍSÐN'²9c‰ ŒÛf6g±sÚÌmÎbM I`d“3h3yR’E/ܽ2÷-oAøG¼¥¯˜ ›ºƒ¹°©»™ûÈÛ'¬ ?Ú–A; 7¦1/$6 ˜ÅSñ­I܆:Áÿ'úŸ™¨5%W窓k pÀœ[¯4,Ï’‡û´CÀç¡PË6¡«ÐJ‘²Nhc‡W®¥êpBÈ™š—¹O±5‰üVg‹¶Æâ=í5«Ãçy§ýÝÆn|:âÉzðR'‚2a¥X†Ì³Ö’’×\ŽâW ÇDìmYêˆyêÈÁ5 Þyø«Ágõ{§dˆ`Û’pLùt ‰ÕC.;0.|6¾Úæ³Op„絚i_HdiE$0nÈuIÌ u m é&›€£ÃhP² ©…RMŒLÅ£åìÇQ ª˜_y’èpcLVå‚‚}ÌçØ¹ŸúB54¦ƒâž70=‚„ܶÈG]qÀ†‚|¼–OØÕ¡-UäPî]GÔ®S{›p-Άj©Ù„(åÒ—¶¦ “_E˜3–3¶†Ùd×Ý_´Òûôæ"sàÆ2£ØËͳŽVrls«>C,ÈÝ]ë(€q¡ Kyzsf{/ê.}8ƒ„Ë4ÆPÆÕ?ä¸ l,ˆu>X$º‚a6ll"Œ¤Kb­T³bï{`¾Åsƒêön“–ÙÜ*Œ‰GÊ¡¶wJqä6;Ýž>kÞíXíö%-?EˆÔñ;;%  3¼böÞÁÌB5Õ3ä:õF ¦‚ª{:SG•¬›#±èœ/húÚÑY:“¶UæIRÁsTÔ ¢üª/Ø×ÚáV%ÔO; ¼OZiñŠM0pRÊDˆìt`Æ’&jÂÚWîDø¹<àÌ- L2Qéëy0¦ƒ"Mñ‡BAÂaëÂíBí€ÖD ô‡ÃizÏÔ‡6üjÀæ¾®9;#¦>1ôX´¶¥oíü@î¯Í ¿cÎï˜ÊýÏð@¿kÃOýÏð@¿kÃ?æýÆ3üÐï ÿóåž•¶ëlU·Á8¯á,`™ ¥{!dÊšg›KžÜ¥~Ûéu 2ØX)#»6F(¨¨etE‚T”â˥λx ¦«ãøŸkaËž÷ã3ÓS^; í{)u| ¹Ÿä[_IÛ—ýψDÒ22rtpœ@Y,w˽á¼ÓqÒˆ[2p¨9•Wã“Ò²¶P¯z© 5$¸{ÿÊu„>h0|,i2OAÐr¯È…8 YwV¨¾,(*³Ä_ixøNäQÒAǤKϪi®ÔnƒW‰KOÀ‚úÈ´ îÒfÑ9*¹+¨µ_"‰Ô¼fg¨™P1aÔv8“ÍÅðVÎ.½ê¥j%îš`ƒØ}þ‹6Âá¸+c‡/îõ÷=ü!З<Ïp«ssÿÓC·afq<4{«ËöÛ €ÿ Ð6¦ÂÀ!±azTXtRaw profile type iptcxÚ=IÉ €0 ûg FHbW-ë~øñ`a*-[>ì¼î²miLîœNñGÌ(OtÅ„#ÐåoâzJÏ¡µI)6ËùUw{1×û‡ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá 1Tˆ;åIDAT(ÏåСJCaÆñß6a‚Mð€pLžp`°KXs`ðÖÖŒ& l6oÀ6Û ^ÀŠAXxÀ²´fË;ù˜°ð-/<ïó¾‡8]¡Ûë_`€ój<ΫÙó ÛëOpöNÎ÷ójvÓØI~Âg8‰Ó"v«f’2ˆä6&X‡y÷6† °íÜ ø. ÛРÓÜó!먕¥b ÔIçQ$“zðÞÚºó¢üÂ%>Ћr|ãã_`U/—yQtš¼œ…ùÓVÚoU/_ò¢| Ã!>ñŠ1¦ój¶ùÓÊ2V©ø²±IEND®B`‚nixnote2-2.0.2/images/material-light/fontColor.png000066400000000000000000000106471315604104400221120ustar00rootroot00000000000000‰PNG  IHDR™gÏÜzTXtRaw profile type exifxÚÝX[–+)ü×*f ¼„`9<Ïéôò'DâwÚ]®¾ó3•ÇN“E„„(ÿ5é?øóÎ ,)æ þBÙ4’9þŽ»5a}ïsi<ô“õû‡.mïç8öø‚~¾½ a÷×Ç~’¶çI{¢‹É=¡W˺¹'òîè·û™ò~¯„;wö§öÝÇÇíù9ÀèŒù¼#7|Ƈ++ðâ˺<'§­€¶÷ßìß`G]ÎÁ»¶ž°3e÷ûG(ÈÄ= >a´û-Ÿc·z`ífùᇔ.ð¾b7gOsŽÃ»"Š´º¸²ZˆI‚_¯E\‚£-ëʸ\l`¬›ƒÕ4²Ù:hiÚ`»-vÚ±îÍ6,1¸áwçšó«/yqÙ5P€ËN' ¡“Oà¦7nw]‹]vó²×l‚ån1ÒYLfñÆËEg¿¹®Í©·Ö¤'Èërªi,C™ÓoŒ!vnLyá».ºÓ¹#ÖƒA^0'8XL=¦¨loÚò‹gql™#4¬ô= ‚mÆb¬&ZÏ6Z#ΉµÀ1Ÿ‚•;\–ÙuKÜxA¢¶ñŽØ5Ö±;º‘Z@ûˆàI( +†~$$h¨°ç@ÌY8qæ} ‘cŒ5Gñ„%ŠH’,%ù§˜$¥”SÉ.{¤0Î1 å”s.F ¦.x»`D)ÕU_Cå«ÔTs- òi¡q‹MZj¹•îºïÿ»PO=÷2쀔F<â‘FeBkÓÏ0yÆ)3Í<Ë•5»Ãö5ûÄÜgÖìfM kœÜXC·Èe «é„•30æ‚㢠@ÐN93Ɇà”9åÌd‡ `Ö,+9Ý*c`0 ëxÚ+w7æ>òF¾âͽcŽ”º?Á)u›¹WÞNXëºïµÅØ…Š©ñ‰mØw©ô4Äh;Ó÷wúí‹ÿ·y_g }‚‚<‘訉­I}ŽÞ»— ÆD°-âV†©´™{‡ÎW÷fœ§ËÄÆ¬©÷¼5u–Òhõ|Ô½u´Ǥf›÷¹'91~埜:f¥·Æ†}v]m“ï&úl#§C@䈱9L$Ä0J™e½Ø’G ÌQžzEþ~aÍù<$ŽKŒ½ZØrbÖKa웵,×ÚlØö}êsØkÕ>gb%T ›ýHa9™‘4&].ß¡DŠŠ€bþ)G¯Ñï8z¥ˆ~ÇÑ«mºöhf±€ØŽ†Ö½ç÷1³4Ílb/:aæp³t ‚Evœ“{ +Õruº"¶µ0Þw›;•q¨DùF5çõ ;»zQ«ë‚…µ°[ßÝ$œÛìÝÖdHþ9®kñýû;i{„Ê÷U¼¥p°$×+ω¼ž1Œ‰9Û6îð££ÑÆ''z^V'íWä­á6¤æBÍÇ#`J¨ÿ&OÒCÞ«õ W¬ «Ò‚ïèmé`?À†öƒP0«xç&¨9k–-ö(ä{뇯¥vü,‘ŸÞé¹Ãöþ–©¹)R_Oöˆ7.HdUð½~·z©"¥XMÿypÞémžrt„ †lbȦ–>Äá'žC(—NâïWáGo~ØáwÆÐ€H?›VͶ.Ó›< ÁÉûð;vÝ@èn9¢ï—ÁGŸ‹Ž#øÎXºà%ÃÒSнÄàiÞ¹óc ©ZnÆë…_!ý8*w>³u CšçI¶ÆAxæÝ"ñÝ^ò³`¤¯£óŒ;"]ùcFŬՊ-@\KzfœNa'†6ã¨qpXkN‡óÄ1·–¨ÕlµQ®ôÇÓ¡vÕG ìê¨ju$¾@`FXQ=t1®ç ̹fÄÄŒHÂA ¶ÍxÈîô˜Þkõ£à($Þ ²ó¡×âcÃÑ«±¹†]IÙ×, 6zuNi ¨vu,ZÈF6¬ªº-Óºê†ú³t eœûÙè3¢ ¢LéZÜȨ(íôŠMר²võ3MÝÁô  Ú£ªBAEï-ò˜kŸ\p Ó­¨ZoFQ´£ÇƒúW&A}~ÃøÁbíSkµµR¨9NVÕIöâßýHY¼@ß>®ÚñÕêͨÔÑRyFƒ pÒ¨KÓän/õ_{‡Ÿºi«(î‘=7L ß4K÷£½`k.¾sõÖ,ßÓôbû'?úºà¥Vÿã¥!õ“®òoí½"{ö*ú¬×W¹¾ƒ“Þkõ;©Ò{­~'Uú„ã7R¥÷ZýNªôÞòwR¥{­¾ywï‘­H _—5¬>úŸOTz¦ÿñwŠåV–bzTXtRaw profile type iptcxÚ=‰Á À0 ÿž¢#È–Kœuê|úË£ûSch%:Nîý¤7a¸ùô¯þÑ¥ ã¨4‚ÊÑkŒ6Yæ*v’“'!¶>ä2\êzöz jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá'28Wã…hIDAT8Ëc4w÷ßÈÀÀ Ì@&`jÖ&×&  ƒ?¹,(f```ØÉÀÀPŒÕ€“;7ÞÅ&aîîÿ‰ûéäÎWiâ…QF €%e\à*Ãj(û8­£òùø!^Ãßïê@ØMIEND®B`‚nixnote2-2.0.2/images/material-light/fontHilight.png000066400000000000000000000075271315604104400224270ustar00rootroot00000000000000‰PNG  IHDRóÿa÷zTXtRaw profile type exifxÚÕ—[–ã( †ßYÅ,!„`9˜Ë9³ƒY~ÿ`â$î$•T×C9 ² BèrbÚÿvó.GÖ/C ÁâòÉ'—!D»_{OÖÏïuc/ÂÞTŒž÷ÛÐÖø ½\'¨_úí^o´,;qºX^y¬ì lËÉeˆÝ®§uoÒš—ýÍvÖg«K'{w¾÷Š`T=vÆ5NøÈ¾ ÃVγϸnH²‡.CNcgñ¼C:ÅÎæ¥çûPÖ€pŠÑÒ“<ŽÝŒÐ‰Úeå»Ô¬ÚÛë&v½×Ø{Ûw—}@¤‚Y›ºleJFžç´€¦ød-¡El±€Xµ<7[ %rĶ“§J™:µÙ*pÑ»æ½sÅñÔEV—\áu§œ¸Ž`SÀ¡v‡/4×Ms½B+WÂHG0F˜ñ[3”ßi‡¡ÞGŠÙxÄ ~¹‘Ópcß ÔWLeÆw6s“7ö,ƒ Ì0Gl0Ûm7± ]s‹'gÆ8±ÞØýhÖe!ÂÚgˆAÀb¡@VS"Ä1‚O†ç޽Û@€D\%ÓÁ†9NÖÆ¥9Ö‰ÛÕ(-!px"eÀò^?ê#r( ‹7"D%J’8ø ! £Feeõ*T5jÒ9ú(1D1¦˜“KŒ&)$5)¦”rÆ¢¦3fgŒÈyso~“-lºÅ-m¹ }Š/RBÑK*¹ºÊÇ¿†ª¦ÆšjnÔJÍ7i¡i‹-µÜ‘k»ïÒC×{êù ¶¨ÞS£¹×ÔhQÄü§WjP«^LÐ('2˜˜óâ: ¡Ý`f#yï¹ÁÌ&‡C!ÔHœJƒúFN:ì®ä^r3â?âæž‘3ÝO3Ý"÷;·Ôêxï•Il?…#¦–; ÛÖ½ÐxOb>¢:oÆkfïµ´]ÔÍÂ~`Àô)Õ†7ä²á´†8Źs÷TÛ¾¯Æ¨N~M”Då¼;ó4u¿r“ÝÜy@…þB1ÈÇd^~‡ÔZ<¼r»Åk<â…â1Ÿ’íàqãÝÿæùzå¤y™3ø=0ç) \µ¾îZ›:··ò]ïÞÎ쯼3·îý‰wæáO¼3Ï‚÷©wæÝüûÊ;óÚw¼3ß9zóiâ}Y!¿{vŸföw½3r,Þ>´â÷‹Y~¯>x/ï…?3ø® šWå±óªˆ­ŠÜY5ÿñzªñ]CõÿoCç˜ý˜GwÁ7çèϽ&ó 9˜ßNn€azTXtRaw profile type iptcxÚ=‰Ë À0 C#Ø’!Î:u.½õý©khõ@è#×½SŽ–CŸ¾Ô‹_¶,ƒ Ò8ÚÁè'ë9«{ñîS°¾ª*1ëßü¿ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá(ó¦ïþIDAT8Ëí“1nÂ0…?G!¢b ±„­Sz&VŽ=â,åLUöpƒLlxcc«Š"Ô¸tÀÔ„6¢+o±­ÿÏOöûEEK ¦ 5dQ ÄÒŸnE  ÿ ¼H€.°Þlᬩ=ciŒa#ÿòÜ®d~vhß9@©0HSëÛ›Ýæ)ÙW |Ä-ôÀñ®]ÊŸM‡ž¤˜µh­rö#í‹’hIàè ÷ÔxlžÖ¢íÜ|‡â!pù…­IØðl1ñª8ç 3÷DydÄW$Uõ2ä×RT˜NjŽóÜî¿}Ð>ÒÛ˜œ9IEND®B`‚nixnote2-2.0.2/images/material-light/gps.png000066400000000000000000000133371315604104400207350ustar00rootroot00000000000000‰PNG  IHDRäß ýzTXtRaw profile type exifxÚ­˜iv#» …ÿsY'pXÇs²ƒ,?Xe[¶,§Ý/R»KE–H¸¸Yÿù÷6ÿâbH&J.©¦dyÅ«o|(öz]Wgãùÿº‘{Î}7.ßž¡À5\·iÝÏ7Æåã 9Þãýó¸Éã^§Ü Ýo ÝÙó¡ß‡¼ þw÷½©÷÷Z|0çþëó»Íùz3ΘÂzÁ¿BåO®]'9´smܯŸÒ ×È÷¾3«~ï¼÷O_|gÛ=>»ÂØt?¾ø(½£ô­ïއ>¡ö±ó§ IvØÇ׃ïöžeïuY×bÂSÉÜF½™r>ñ Åp¾–xgþ„Ïù¼+Ä&ÛuÞÃ¸ê¼ v»è¦kn»u®Ã Žýò™«÷Ç3VBöÕFÔ·Û>‡¦ $¸†ýûYÜÙ·žý†+ì<OzÇbŽo<½Íwƒó~_hoõ­s¶\~",8—ט抜þÏSâöíS9þ=oó7öØ‚rÜ\0°Ù~-ÑÅ}ÄV88ž½RÃåy/€‹Ø[8Œ `“ â’³Ùûì~,àÓ8¹Ñwp"~:³Á&„8d{óìγ^ü5 µ„(hjh€£?9b¨IhD$I–"UZ )&I)å¤ÕrÈ1KN9ç’kn%”X¤¤’K)µ´êk€Â¤¦šM-µÖÖØ´±tãÛ'Z뾇»ôÔs/½ö6Ÿ‡Œ4ò(£Ž6ý “ôŸif3ˬ³-·¥—¬´ò*«®¶‰µvܲÓλìºÛ;jîNÛO¨¹/ÈýŒš»QSÄây. ÆpÎoK8¥QÌ@ÌGâY  ½bf‹‹Ñ+rŠ™­ž¤jNœé1ŒËyÙî»ä~ÄÍHünþrF¡û gº¹gܾAmjݱ+ Õ§6lˆVi¾4­Iv]%Òœïz¶8)lô2kë¶òÓôÃìL¡»2v¶º˜¯ÕãúRó^ø¶Ùl÷(3û.sÊ–2¤Q»‹m¬ȬÏ}¨äçž©èÚ9¸w]z7wÄ´áÉN—ØVIÜ Ó œèc°ù“Û™0Ú£»6JM»Æl]k ví‘ZC„42J¾½záÎC1N²Oq ¨ˆ ðÊî1æòš³ï æ¦<Ã"BLˆ|ëRðiñrÜG-çÇÂbÃØ×ÉF\åmð›«y5ñúÚñßwš}”5w^cA¦vÇù¬ {ò¤ï󶕨ûbmé'$ô‚5 ;¸­>Ó–>Ĭ(SV/iVÆ ¬l‡¤êâÄ£³åN«É¡…c»}»º•+¢/óbYMã‹Ô!¾þ¾Rpý ½ºÕהة“¶I|3'Jíð¿L’§«éPŠÆ¨óø`(FJP¸Ld¤4U|ˆÎ7[dàÂ,k´³ÌŒÃ^¨}·C¯°›¿œ‰;„ Û5ßÍ™3Yk‚cˆ:wí1ÆŒ¿4Î È$Yñ’DϲTê÷ 9Ì33‘IPOsmCº•ò"œþ÷UÕ„y—ª;n=¡tñ¨4Þ…†‡CY‹‚pŒ@Þ½UTó‹7k0Dí9Ö k?Yú1gîÉcÿÒÖϹ–2z°¸…©éKßòX± ².¤a6)»ÄÔÐefeÝ;OweÈ£›ÚƒàAj%Jý|Ó±¦Wžx%k’o}Ý)bç•"¾*q ‰Eê®/5ÕüƒâÚQ<ÉÒ+䟴xM–¿²¨ÚÆy­üD4"ÓSÿõH5·Þ!dö0»cš‹ÿbRD½«ýÈšB¹^ŧÞ}ƒgÒŠ±Å¼ë¡Ìæ;E ÏP>Â^“!<Ø×N¶þ½ˆx2¼Ì#gäŒYu…Û'ð [Õ 4 àJRÔAu­ÃõÕPÛÊ0‘ƒ8ìnB÷Jy¤A¢¢^u\á/l¨][žQç´\ Í [Ô]è*bw´,ªÑÓÖ¤xØ |NiÎTgd(ÊࣵRÿ™ªýæJ®˜£˜n½ÄÄ­¦0)™Š£?›uÜJ'Y*E ƒê ì†7!>'© ¾=åw£Êmµä¨D†“p,ž.bðt›YäÔê»P“k§V“\ô‚O“osâæ¨ ὤó×üú´Ò¹÷+ËSç…nò™ÒšÑÂé ƒ pGŽìèF!±F¿p¯RÍéiyÀI'z.9ŒI« “’zÔSÚÀ<ìT–#`DÛ@‚YC –óT2L…WŒòÐmðˆ?ÕR‹Z"½þvèº*œ…´³1¸Ïj¿Â“3’·“t"Ö,'vµ¤Ü’I¡îÎ9|×9µ‰K+i£í»­&–©3ZW7¶©8´¤«Æ¶Jª×Ö'ºzkÉÑm(]8˜v5$­"žcé4w¨¶Oršôdzß–&*DºïIIˆ «=B†Àmˆè7L\&t Z*iá±:‘(|8ç­I”Q+ÓZV€ ûDYA¡™ÎÁe^jä£(h]=ÊÙì¼K¶lÔ£@Òîl[mJbê.£?uþJcmœª‘§þnÐÂwÝýÀÐTÔ”’Ǹ©>ùŸ²¿×¶G‚Ô°„6]‚vëµT$ ¡ªs÷yÉãÝO^AGî¢ÔŠD G]ŽGåy>jÆùÞ.~àÜtOî}‰kó¸DqµÒIô€Ô¢;‡È}mÂÀQh(’»l©þ©ã܆ò áGªÒ¼dߞǑ”óóKyÚûqëIªŒ^¡X³hâ&A¹¯™ür>v¸Vù.Ö¶f£L{ã¿J¨Ìkp?¨‘')–“þ²E$¥òàÌàZŒ£ÂP-Y ¤4SããñÝÙÄyP }À×Tî±óÅÖ­^RGº=ªöøÏ%óê Ý_¡](I‹°^´'Z²è™Èþƒ•?gµQ9¢ºC`„]Ð ©D­y }þÅ Û,0ØRáè2•̱¡g)+ÐN/W£|tîÝ,{9Ͳ Ú–n´„}A’Ü•¡>D‚Uó_ |âŒÑ1,azTXtRaw profile type iptcxÚ=‰± €@ ûLÁ‰ñaò Ýì/B$°%Ëöɵå†ÃŸêå_6-Uƒ Ò8:Áh’EÎÚ{½|_Áü¦ª<2á¯éO jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEáíÛ‚€IDAT8Ë­•¿KÃ@F_*U(]Ä"….:vjáÔåÐE:4‚YºØEü3Ü,8ºI!£ƒàmÁâàà T² vr¹B(Is©~Kȯ—wÉ}¹9,"¤j”«µ»rµ~¾¿ Ò®Ïa—.°t…Tù?C…T›À¾ÙÝšÿazDí¼´œË0Š‘Ãß@C¾žÕ´3(g3™ ©*ÀPŠ9=Öuà¿d5m%æv&S!UèÕ)ýê:ð‡¶¦­ À2àZ ßLnײm3ªTÓ¦™ä6Ym ²¥3YÝ\L%÷2B·€Ýi¦ÞD%ms;¥*i›`Gþã¤iwF ÀB´ºŽE%m36tà÷Ǧn ðè™-Sªë8Bª"ð Tb.—@O~(¤Z2ÓKh\Ô!•\ǘ]7qÝR-GÀ©Yf¢¹p„T‘a=ø¡ÅRS0ÿ‰(üÕRÝ+æÝÚÀàÀ9ÿùÅ\†aó5¡IEND®B`‚nixnote2-2.0.2/images/material-light/grid.png000066400000000000000000000067311315604104400210710ustar00rootroot00000000000000‰PNG  IHDRóÿaßzTXtRaw profile type exifxÚí–]²Û …ßYE—€$„Är0?3ÝA—߃Mr“ÜÛδӇ>ÄŒ –áô ’0~|Ÿá.*CRó\rޏRI…+¯ëª)¦ó¹_â­ñd÷ “ –ë5ݿ®,mûñlÖ¶Žo¡›ò”å™Ñ8ö$·ðe§ýÊWÓÃrö}ômÓ«z}O†`t…žpà!·^^3“zÖïΫ•ÐN°­§}»po¾ïÞz‰]¬Û.Ï¡1ïù%FÛNúuìνP»y~ú:9>^±›³ûœãZ]M‘Êa/ê¶”³…Ž`”ä–Q ·¢mg)(Ž%6ë±ç[ BL'%êTiÒ8ëF SL<ØP37–Óæb\¸É……&›éAl¸ Ì|Ÿ ~Ë鯑Ãs'ôd‚aħ¾2þM¹ ͹Rœ(ú=V˜¯œÆ4¹õD/¡¹cªg|Ïò&>€Ô3ÌŽÖx\‡ÒGnÉÉYÐOc ñÚd} Dð­˜ ÄL¢”)³!Ž>3gI|€©r§0ÁF$v|cŒÑÙ—•/3Ž€PÉØ<B°RRä%GUMAU³šº­YrÊšs¶¼Î¨jbÉÔ²™¹«.ž\=»¹{ñZ¸Ž0-¹X(^J©N+¤+FWô¨õàCŽtè‘;ü(GmHŸ–š¶Ü¬y+­vîÒ±ý{îº÷Òë TièÈÆ2êD®M™iêÌÓ¦Ï2ëÚ¦úL^Èýžmj‹X:ûÙ5˜Ín´Ž]Ì@Œ¸-Hh^Ì¢SJ¼È-f±06…2¨‘.81LƒX'ÝÙ}û-· é¸ñ¯È……î_ Ý&÷™ÛÔúúÝk'±k®˜F™8ØF„öÚ}X\ ü2ýyþvà[è-ôz ½…ÞBo¡ÿPH&þ>”ðð‘Ã`Žñí`zTXtRaw profile type iptcxÚ=‰Á ÀPCïNÑ¢´ëÔé­‡¿?¡MHHxr?»ä¹ ÓÍO_ðö/]Z0FϤTÆ´1‡T“«¿·Ñ ±õ]@^2àü49Ð jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá(/ÜÉ““™IDAT8ËÕ‘± ƒ0E_T,‘2d„”é¼sÐe :o@ÇS¸££9 ó%¤H–PøÍIOçï»·çëí;›Z`<{µV»–öø‘°¨…EŽò‚Le”¶[“°€“ÞѪSƒÙvŽ ÀLb¬Njà%gM_1ˆ?÷ÿâ©W€Jya‰ÿ¢êh‚ÏÁúë\aÉ1Xc’Æ1EmæIEND®B`‚nixnote2-2.0.2/images/material-light/hline.png000066400000000000000000000064771315604104400212520ustar00rootroot00000000000000‰PNG  IHDR×y._ÊzTXtRaw profile type exifxÚ­•kŽ+ …ÿ³Š»ü°Ї”dù÷@ÑÝÓ“™H‰ªÆåcÎt?Ìðß*ÅcPóœJJE‹®0r¼ËÝRÔý{^âÃxó‡ç†%hå~Mãô¯ðÛk€ëñ_ïþàíÄÉ'Ð#ð (kf†q$O áÛOç=”3®ê‡åœçêÇgwóù]btC<áÀC »gd .u·ï™—¥°u{H¾Ñ.É»!¦Ó!}ÒèøÉ¾Ön+ô1#z˜üþáÒ-ñ«|ÐnΞç÷êª&(•ÂYÔc5ÛBG0RÙêã1ؾkAÍXb±x^±*ÄPp’R§J“Æn5¤¨<ØÑ27–íËâ\¸É•&»éA2Ø4p¸ù™ íyËž¯QÆÌГ Á#~©á+çßÔg 9×'ZbÈ‹—àHc‘[¿è 4¦¶õÝõuÖ^e´-sÆk¼î—ÑkoÉæ,ègQC¼y? æ6$C1‘%ŠÎìDÐ1ƒOEæ,Êw lDàà4`nŒqÚ}Ùøvãj“„ÓA¨–ªaÿ¸fì¡jbÌ,™[¶b5IÒd)%O뎪.®nžÜ={ñš%k¶œ²çœK®…‹à ³’Ї’K)µbҊУ+zÔzñ%—^v¥Ë¯|•«6lŸ¦ÍZjÞr+­vîÒqü{êzî¥×A[iè°‘†<ʨ{mÊÔi3MŸy–YŸÔÕwjô‰Üï©Ñ¡¶ˆéîç/jp»?BкNl11Vq_°¡y1‹™Ty‘[Ìba cP#[p:-b ¨ƒØ&=Ù½Èý–[0ý#nü¹°Ðý ra¡;ä~åöµ¾þ÷Ú&vŸÂ¥i”‰‹mDÌϹö<<.ÿLÞ†¿x·2‘c ÿ»ÌºoÔ`zTXtRaw profile type iptcxÚ=‰A À@ï¾¢OPXûꥷöÿT„6!aä~vÊ1¡ ‚Γ¥lþXYªcõ 8†5íˆ1ÙæêÏÆ¯ïªÊ 1{Ø…Wr| jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá) ŽÖv•IDAT×c4w÷ßÈÀÀ Ì@&dÕ£Yé üIEND®B`‚nixnote2-2.0.2/images/material-light/home.png000066400000000000000000000162521315604104400210730ustar00rootroot00000000000000‰PNG  IHDR($ûDßAÀ¥ä§3lBÈ€S¼Þ›Ïˆ;s}ò×e¤ RÈ$O¡X1&ø#±À¡–BŠ&¥”“¤’jj9ä˜SÎY²jT“ Q’d)R¥•PbI%)¥ÔÒª¯ K5W1µÔZ[㦥ŸnÌh­ûzì©ç.½ôÚÛ€>#Ž4òQFmú&é?ó3ˬ³-· ÒŠ+­¼d•UWÛpm‡wÚyË.»îöDíFõ#jîr?£ænÔ±xæÉj\y,áTN’bb>:EB{ÅÌ£Wä3[=I‘<¨¹¤àL§ˆ`\Î§ížØ½!÷#n&Å¿Â͇œQèþ äŒBw#÷·¨M­{ã ve¡ÆÔ†°1a•æKÓšô|uo->¹±È’6œþ-S_ZØË¹ÖçÞuu+{îhd_·ï^jueÆ”HûÄÃÌÈe_å,št‘2ÓÒ¿ÆN…õöY4Š7ш™¼L=è„{æ§yß.=ÚgÔþTûê®JÜufOæ8ÀXkW¥ˆãg7pmµˆD4£«+– °×KÅ #+ìÔ<Á¯kû•¼-£‘±l—¸lÖ‹ ·šÌÙp‚]K¶íBÅà>ßk`7¥îâu5*5xÂÁZÑmW­”aÁ°¥\§#–­#Ny-—àÎ2©Å-•Ò䆭}ŽXܵWbÑöÌ=)/< ÷»nƒøUÉ‘2‡ÍÑ-6HèÖŒ‡HŒÜœdJNÜÎ7ÌG߸»Ä³éS´ÞDêÙö1Žè€Ê7qfâOèç6òt"®ÆÄƽ+ú¢¦åÏ^Íó‚[Eΰ?|^˜w©03zeÓD öÚ@»3`®kŸcøÊD@f·ÙWšØžœCŸ½ú(Ä-ä¶ÆL¡ót$ks³›Tç ÞnÔà$:¹S%׉´ï1òÜyΡ)¼ûåM@¸gˆ½ ï£5"²U@uc^«ó™•%¶™ò&‹S(ÙÕÆj®3§ÌÒBwa86#²ˆ?"S ÁAr]ˆK‹u&fý8j W›¹ùÚ“Ø8[3îÄŸiú†˜t÷aúìÞ¯9Ü\C‰?‡âÌ ’j¬û',Í7?bøöÑ^Ô>Õaé:wFë{DËÙór<‡_‹¼‹pJ¸—£ß å#‰÷H¹oWPÐ„ÑªÔøl­Bn¸!ðˆ&ø@BRÚÚæHÅ#ÐÝF¸¡Œ'³tÃ2u¡\yåRES÷‰ü䮊àGN3¬Iù¼ä¥×|ËK±*/¹$£¯6L[Òs)+Èë!éÏ®Â=D&øàÕ?V;uW<‡«fk¾‚²9øEq+UCR Åè’êæ%(Ü$+™U3Éw”•Æè´ øDÈ0a¢µ}xLߟ¬AÊh$‹ÂMa@X¨ÙÈ1$Ã?²"2>ŽÐ_å†DÆ ÐlD!¤p;«Y–<Ã@àwïò2{¹ÂH~èn^™È×½–9 Ì¿Ðk™Ólý ½’4ÅgxF$è¸K\Óbé°Õ†`b-±D%¢d9«N!ˆ;UÈ5ñd?öÎóÔ,K!Ñ}NKEpÞå­!k+ åLéUa-âæxl< {¦ìÚ …,¨g¢D?lÓÀ‚¡†nB$fA³kbBݶ?r w!+<µ”Ški×IÛî1äݾ8€?}57wÙ)å‚þª´s`UZÝä¢a'’<ÉžÍáˆ6e†6¿ôüKZÆqoÒs–Sp0 Êù‰‚Té„zTGK·X±UÕ€òø4¯~=†î«MÍ5–ü,Ô{”¯}”ù<3X­t:ýZ%’8f=Ûì<¼»†¼ù2’RGˆú½OÊÞûùõX6uÝš_ ùjVsóÌêŠÂ7“Xc.Ï~HhCCÊ–Ïÿ©t1µðYï¡ØR·KÏuÚuº¼‡£v3‰)¹óP®{Ù¨ S´¢¸~3ÐzFÓòúÜbš—É}²ÿ‹sóJ/ u0¥óÿаì/ß8éà5ô¨†tÆÕÊ»¬}ò*´¶­ýÁ•¨ËA!°7Þ 1`#ÅAþ Ï÷½‰[r5pÙK|4¿:¢U,Îy»ëç¼NÖÀॷ=ogŒ! á ZÓwõký˜Ÿ¬’”†î&Š©‡)'°î¦‘ŽêX½F`ÏPÓZÓƒ> «ù$ü‡|7ß$ü3«IÍøymîÄþ’ÖJ…¿É_ó.W7@Tó?¬wó«³D^…`zTXtRaw profile type iptcxÚ=‰Á À0 ÿž¢#Ø)É:µ?ýõÑýUËQ N®û 9ZtÁ¤s1•å_–ê5' èîÕ$Šœõ ØÏïªÊ 0/ͨ–M» jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá <íÍ!’IDATXÃí—ÛoUEÆm±µ^h!1AÝõva« õŒ‰š/™•J *ŠñEŸLü|Ðc ¶‚ŠÆx[‡´Q!— Z«kª%V ˆ$DÅ—Õ¤ÑîÚöœCúp¾ä䜽göœ_¾ofÍì*J$烞€G4Êo¥·¦DpË÷€EÀàš$ÍzF ƒ§Š»*çÏnÌyæòÓ¸¾K7€…Àn  ¸ xØ\¬“srî/>Èi{xÙà®Þ h.hÎq>tY]D¬ðºÁ½´k”£¥X Œ}w9.8«€Î‡&ƒ[ ì6i”_ÆÚ5ÊWÀZà[sòYçCm)#žL‹'€f hÓ('œ—[aàQòµóa…MMÀ|‹ûx¹|ÌàöÚ"8á|H äàA`›óažF9 ´Ÿ÷XÜ å¬öë5ʨóáb`pý¸>k€-·z2dq«×¦9@Vk”—ïË&è·èv>4h”C¶`>î²ûsËØo«uØù0xu’z °xÞùP§Q vý° èt>Ô•ðp¯Fr>4ÝÀÍSx®xÚùP«Q¾‚¥°xéÿœœ*àA`F)Øœ{Ë"›ª¶2W£|o¥g°Øî|˜7]Àúq¿Y¬C6¹»Ûf0w7X¬µeÄV÷~stGdÍE¸xÁJÉЪQœ¯w±µ.®HÒ¬W£IÒl—-°[«“4Û5R<™ h“v«Mâaƒëw>œlî.Á᧸4I³åX’f»› òÊ$ÍvŽÿü óáBàE`½ÅÚªQ:êN‹¤Tj’4ëÓ(¿&iÖÜ`4'iÖ;ædÁÕ[€àg«sÌÑN`3¥—-îãæä Ûš“§«,¾.«Q£VJ>1¸.s´œÚ<¤QN;o·}@[M’fO™CÃÀ:²Ïùp¾9º‘òëZ Éâ>jq··‹ª­åc{¨¸³§û¥vTµ’Ô|Tm/Ó({˜%Ò(Gl#xfŽF9üÀ,“Fù}¦ÖëqàÓœ¶åÀ“åxišŽ¾Ô(æ¼Ô;x5³\À `°XœåÊÛêþŽ»>cŸ‰®ÿ˜düSÀaàï)Œur¢þØÐDó•<IEND®B`‚nixnote2-2.0.2/images/material-light/htmlentities.png000066400000000000000000000072371315604104400226570ustar00rootroot00000000000000‰PNG  IHDR ½¾ÞœDzTXtRaw profile type exifxÚ­•k–Û …ÿk]’å`0çt]~/˜$“L2wN–‘÷„ö?¿;ý‡ƒwä-¦Cpøøì³ ’;>GÏÎÏßõà.ƒ;;¹²^LŠ^ǰ¯ùv»9D¿ìÛ½b]qÒ tYrÔ±²`°­$W •ÃÎë™òò+þÃvÖwkËfG÷øì#Äh†x*$»f|íXE‘F-³/xN2Fc?-ªù¹vt>ˆw‘îQ;WÖ ½—‚\XƒFËÎö\»©ÐÇŒø2”û&%>k×{K½ïÇîŠP*ÐÚÔ¥DæÁÈët h_Ã8ΖѶXA¬¹ ž›«Ä™…Õuöܸpç}ö•+Rô²KD/RE§-i”,UhÜ%jÖFšÀ¦‚›Â,×\x®›çz•VnŒ™ÂÆðøÔè™ñ_Ú5Pï£Ä™‡˜åÐ yɨi¤1È_ÌîKS›úÎF·Sèܰ ‚6eNØ`qÛb3¾Õ–NΊyæ<¹ãhpl+$ÂÚ†dXAÀVãÀ.ŠDfè˜À§ sQ/°™4¦6ªpp°6|"Ϲbr˜qµ„iÀáI TË{CýDŸPCÅÔ<™Y°hɲ• Á !Ä0î¨5úh1ÄS̱$M>Y )¦”r*Y²â ³r¤œrÎ¥`Ñ‚ÐÞ3JÙdÓÍo¶…-niË[©(Ÿê«ÕPcM5×Ò¤iÃño¡Ej©åVvÞQJ»ßm{ÜÓž÷ÒQk]»ïÖC=õÜ˕ڢzOÈ}MµAÌÏyñF æ/!x\'6˜˜xñ8  e0s‰½—An0sYp(L@mÀi<ˆ ßY¬ó•ÝÜ—ÜÈü)nòŠ tÿƒ t‹ÜgnO¨µq×Iì8…CS§&ì©H*ã?éyßqûñ4×O/µb@x‹‡÷\—çô2‹·²¹-AOÖxÓõÞ“~žÍÑÓ‹ŸqD Wâ E¯9œ IOÅ;½±×ut:;zÇû ŸçrôôE™Rо:?g¸Ñ÷Åÿ^(úyˆï5:µQú?{}hO½¾<Ïdõæ¡Å•Ÿé/ýñœ½œ `zTXtRaw profile type iptcxÚ=‰A À@ï¾¢OPX÷;ÕKo=ôÿT„v!C亟”c  ‚ÎÍRv~¬,Õ±z ÚvÄ<ÙÏÙÎŽØâõ©ª¼2$ãG  jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá)'Ë *àúIDAT(Ï}’!n1E_²‘Â+5ÈÐÀÒ ¤RT3TeYVÔ^¢¬¹C¡©’AÕUÖâC“ú•Jf#w»É ûÛoæÛ3#z1_®7€ž¼³ÇžŽwv[Þ¯àgà˜¤ÞE}¥´É)†¶cÆðÈÀg‘{dýÒ¹99€o½³_Ý¥CVÚì0'³ÃÛè |` æËu ¼µHÛ±|ØT„o.Ç¿ó*Åà”6X‰½…ÒfŸbȽê×ÀGYx¨äí¥$ç`ïìñÔéo#ÛØîKØ;Ût3òg 'à.Åð ´i+ õÎ6%ó ðju!ëCIEND®B`‚nixnote2-2.0.2/images/material-light/indent.png000066400000000000000000000070271315604104400214240ustar00rootroot00000000000000‰PNG  IHDRÊ|çzTXtRaw profile type exifxÚí–[–ã( †ßYE/I‰å`0çôfùýƒIR•N]ºgÇYBè$áüçç?p‘p IÍsÉ9âJ%®<^×ÕSLë¹_âMx§1ï • —ë5ŸÛ¾B¯–¶þx¯Ö¶ߎnSn‡2gfÇr;¾ô´ßCÙãjz³œ}}ëôêžß“!]áO8ð)·^³"“ºúŠwç)%ÈiiTüuîÂ]|JÞ-uϹ‹u[ÈûT<’Ÿr´õ¤¯s·2ô6"º‰üþ]ñ=®7¹£û絺š22•Ã^Ô­D–C0J²†e4ímµ‚æXb±x±*Ä$qP¢N•«oÔbâ“ =scY:ãÂM.h4ؤHâ`ÓÀM æ{,´æ-k¾FŽ™;Á’ ΰ#~oá•òoÚÝÑíJ±/`tæYÓc’›OXS]ù]-ì𣵡|ZjÚr³æ­´Ú¹KÇöï¹[èÞK¯'(¥3zæÓN?ËYjmÈHCG6|”QïÔ6Õ÷Ôè‰ÜçÔhS›ÄÒ²³5¨Ín.ÖvÕÉ Ä8ˆÛ$€‚æÉ,:¥Ä“Üd cS(ƒé„ÓiÁtë ;»¹O¹MÄ?"&ºÿ‚\˜è6¹ß¹½ Öçï^[Ä®]8seà`ƒÁé•§<>²”Æ[ùÜi—~ ÃGÖŸ¹|å*|oè×}øÓÅÜ¿ŒåêÃßüßÑS­|Gøªb¿[°áëâ¿}Ä>ÿ²ð òk•‘fazTXtRaw profile type iptcxÚ=‰Á €PCïLáÐb>®#\¼ypÿHHô5iúR¹î'eÂpøá¥Þù±²Tpõ ‚Jãšcžìçl÷ŽqgêSUy27䮸‘ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá):¨F9±IDATÓ…Ð1JQ…áo$6)’E¤¶0͸ƒ)_—uK ;R²AHé^ù–ðŠ`Ÿ2KA˜Â › Áè)Ïù¹ðßÊ*\ceN±q’² #Üâ)§x8öEY…)ævŽg OnŒqÀ /9ź(«°Å¸6-8ñw¶¸¿Àå/ã·ÿÓÇ ‡5®:Ãwx<£ð9ÅÏ^ëû޼a•S¬[×î¿ðЇœâîØÿÚ/éñÝ‘‚IEND®B`‚nixnote2-2.0.2/images/material-light/italic.png000066400000000000000000000121311315604104400214000ustar00rootroot00000000000000‰PNG  IHDR„b½wæzTXtRaw profile type exifxÚ­X[r,+üg³ÄCˆå³ƒYþ¤¨jÛÝ~Ÿ·+ÚTCe*%9¬ÿýw‡ÿà“zãPjîÌŸÒKOЉ×çj)–ó÷þ7OýÊ=Ð•Ñæë'¯ûyE}¡ÝÏÓxîmÞóÈ=ÑcÉ{Âì+'ÜŒ{“÷D9]ý„~¿§åÃqîï°»¯^ÍëïÒ` «˜/§VîøÖk•Œä–õ´Šß’ü®à¾à—÷Ô¯mæüÚxow/¶‹z÷çgS„È÷üb£»Ÿê×¶;zBí}å§éQãÇÏÛím²÷ºN§…a)÷¡G9wx•|^c\ ߊûv®ŽK°Ìb'ðqê”(ÇM…Œ”6­ÓNšØbI+5´)Í”OŸä–zšù‚íÔrϲ‰ ܲãò¶:ëö³Þ$ÁÊFx2&#¼ñé _uþ“ëm¢½DQ.;ØWrNcŽœÿÅS„ömÓzì{®ð7ñ°Öcf‰Žß¸¦•Þ¹•ÎÏÕXB¼\ƒšÝÀDX»b3”@dÊ•˜bK©ÁŽ|;O¹¤¨Öd6°É™¼kãFçÙTÓÕ i53œG€¬R*øÓŠ€CZs-¡ÖʵU©½*g.\™¹±k”¶ÜJ«[kÒzSÉR¤ K‘.ÚSϰڹ·Ð¥÷®ŠES+ÞV<¡:ÒÈ£Œ:x´!£ Ï,³NžmÊìS-Y6¸¿±µ`bÝtÑ•VYuñjKV_ºÁµwÙuón[vßú†Ýnû„½ ÷3jt£æˆ•ó\{G Ý­=¦ —“꘱Tˆ7G„NŽY*%9rŽYì NQP£êà9b@°,JuÓvïÈýˆ[¨å¯pKß!º¹àÐÝÈ}Æí ÔÌåîøáí…nÓ˜7„ ,Ñ$ê1éûV—á´=³æÅ­Ã¨º{“¹vÂégØ7kL›S¯0…¶ ßž’±Ó½†àw¢ŠÇ½1¤ ¿ËÆÑÛ± ¹R[‡KCÂÊ,ÄÀ¢fœ«c˵Q1êÓ”Ë(•0Ô»xëQñ¥ ñ›Z­Ÿ—ù½äE8D×V¡ë{M«s¿=T²Ùûš ô9ó §3[õ°])xòp' ÒTï\,ò#<  Ø º2¢8 ç¸gå I‡ë+Ëš&jÅ€!.?l£±o7&7Lg:¦Ü>¼t5¨4g¤ççh‹EÍ_O;Ä4ˆ 滈°ž~áwÞtsyòI=Á¥c1lçG3[‚"ö²[ÔãÃ"× ÒœclÜä<ªùëp°:b÷9wIs, —Ë ½/_&¹¯Å#Zøû3½µc ;“®Bîý~[gÍÑzý4ü<: âVÒ¼ü„\:nn÷˜‰‘eë¤!Ô5Ïq¦A£~-eáU[¸,­üõÉЂ 3wÞp¦°¹ï¬$«À° L âܺ–Ygúþ¸yMb É«&8¹ofÅ'IEUKœWžìb)pGëåKz’#d#ÿŠ…œÙÿÐBsÇsÈ9@Â.z1ëjú:ø6¦²`ÃÍ«#$y6R݈Ê” |èb·±=Ïfy D€Ñ ¹8h?Ô¹¿ÏU‹Y A/¬Ér:/±yVˆ$¥#[GÄv]D6±‘{¤l‹!‘)Í ²‘kgiç/#À»Æ[Ü—‹#̃G+DF®HZLÒv²¿››ËM‡u^.\¤CJ4×!öç¤SÍaôœr¦ñe´*2'2“ÚÅ™îYN™¬å±pTÄ¿rôHÎ~ ªCÈ: ŽP¿! ìꨅ‚#l[’ŠL çL ñrí§'ZÐiºšÿ}tþ¹ ´¤]§šHë>=^ì.Ö`W8Ø@Bd¬Ø]rèZØÖ\O CÿlBug±¿ºðy`£¦>ôeðñÓ[:–;^Šæn://¬ÄB0[8#·ZÃs«ã$(Y¢! Œä†×Ì ?P®ê`ÃìëÐ5odçÜóˆx‡¼ëåÄ`=8Øq Ï5Åxnáqì V"ˆdlPXU¾Ó<ƒ£O \x$hÇ€lÄ—XZži½Ø"©‰G¨²lLcž©Ž„,¡ 5‰2xÍ9´T°x_“îè%ä5Ž$mr¡úÁ;cEJq‘-àÏÆ¿KÕj]Ȇ¡Ñ®#\¼ypÿHH´/iÚ<¹î'e›8„áðÃK½ùce©àê•Æ5 Ƙlsö÷Í.¨ïªÊ 1îà(Á‰ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá*!EdˆIDAT8Ë•“¯NC1‡¿{³dK‚ §PG4 ¨Z0×ÁK x^3Ë !¨ Ò A‚™#3s˜BNšÛs»cîùÓûÓþÚÅŒuÀTY²i”ŸO7`¬îGJñX%À¥È%0À¼aÀŒuð$R71øÇ¿ eØfÂßKYlºŸdã¯bð?Õ€¬;À<_Ð*Ý€.;¼P ΀‰ìƒßí8þ¶oü"ÀX7œH­cðïÕÀG"ö¥1K€.Óþ¥`¬;Ì´1øÏ}&è²´Ô.JàZøßÀs5ÀX7É´_Äà· I’ݦxšøIÆ×>À(Ý÷»Bƒ«ô½Ð¶0xP`]*þä=öu¬ÔíIEND®B`‚nixnote2-2.0.2/images/material-light/justifyCenter.png000066400000000000000000000117741315604104400230050ustar00rootroot00000000000000‰PNG  IHDRR;^j :zTXtRaw profile type exifxÚÅYir„¼ýß§È´µ–ãh­Ê rü¼0cfƒ¿TÅS6Œ$zy½cêÿù÷ áÇEïÉqˆ>y¯ðã’K&ã&ªåg¹jåæßõ‹Únvë¤Íºa°dqµËWß×óëü~ ¸u½ì×)Ô•N\ m,W‚V8 ³² ¹²fY×ëwJësÙýPgý-m]ãåòùÝ€Ñô¬!ÓmÂ//\,$°ÁæyÍøÜ9Ü;kñW[}Œu{ Þëî;•×u»‡‚”_øŒÖuÍÇØM„vV{sÞmôªß²}`7F‹côE»ì<ò´*µ©2ïp6rv>æñ øe܇ùIøD¨Xa±¦*ìYT%´ÑV ítÓYÝçµê é&àjL5v®EL2Õ.&ÀGl²l„m*ìf±l^²èÉ7M~UGpn'1'¾>t´ø—Ï‹Ðââ8.8Á- —Ÿ†b9ù‹S0ˆ+¦<ñR{Ûl†µ° O˜#̪,$ ë·oÙig‹s¬©%4th+@Þ aàÅN+¯-k¯U0&h #ì“!¹±ÎX@3›¦iÀ6ÖzÑÞx&èyÖ°Y–‘Z`¶Áa¡ c9ÇðŸà"|(³eGÌì9päÄÙ[ï<{•ƒ .pð!„RÈÑF9úbŒ)æd’E ãäS SJ9ƒi錧3Nä\L±Å.¾„K*¹Â}ª«\} 5ÖTs3Í6„ó-P‹-µÜu‡+u×¹ûzì©ç_v¸ÁÃ0âH#¿¬¦×°ÝYMXîÚjzµšXÌÍsám5,‡°‘Ð’NXl‹§añ €C±™ŠÚ9#–›©dl`5Íbœ¦Åb° ëÚðÐ/Û½-wi7b÷ÈnæÌr$¦û_XŽÄt«å¾ív`µ&u¯N‹-Q(˜*;غs‹=(¹Aez~¥¿>ø$T!6 R=$dW|5¡³â-¥ ©³ £!õŽ {¥¤öèÀuÛ9<º;?‰ÓOê)!ë žæÛr¼Å I¾{§ÄøbOwR•~E$ gO|K@Ï8‚ž!q=Câz†Ä9ô ‰ó“ô ‰s èç@Ð3$Π‡Áa6~ˆK‰ë‚*=#œ¶Pï)TÛ|ñÃ2²r3(ê.VÔmk:JREÏfÒ¨ïÄDê>ÐúÉÖvôÙ"tÑÐÄ!çšZ E3J¶ËðvT“ Z½Žúá A)£(NPräUÖ^‘ˆ‰õðª =JÃE 8ûLe•M0}r>cL?8ÇîÔã…í‹+ ð“¯dÈCÖçŒÇ8áJGúþE]úèÛêÒ‘¾Q—¾ØÚÒ‹.ΡŸOž G ¿r%Úmø¢ÎÝö‚6%qÕ&;FÚ±Lo_×ÀÜuž+/~Í‹Äe&·Ï]ú±ÍºÕ”:„&Ä8ëOÙ|^éxCó`èf­˜ uÎ(ÐwÈeô4¹®¡‡»œWÝžKµÓäFµóAÞIœg:ÛÌÙ–d­t × Ðƒx‰hV ñPÙNÑüEÝ}Kô_ÛQ^}g‘`zTXtRaw profile type iptcxÚ=‰K À@C÷ž¢GP{ꦻ.æþT„6|xr?;åÑAçÉR¶YYªcõ 8†5éˆ!ÙäêÏ6ºM¼¾«*/1¸ÝNùpw jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá+ Ëç$aIDAT8Ëc4w÷ßÈÀÀ Ì@&`j֦ĆŒÈÂÃÿäÎwa^@Ćr ˜LdxÜ¡^˜»û_¡$™(uÁh:逑‘’òàßß¿L•LÌÌ û­•ß-×IEND®B`‚nixnote2-2.0.2/images/material-light/justifyFull.png000066400000000000000000000003301315604104400224510ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá 8¸~¨ÀeIDAT8Ëc4w÷ßÍÀÀ À@&`jVa²€ÑÜÝߎ›’0˜KI°000,b``ÚXK‰Xâ( ÄdJ¢qpâ/¨Wp‚ÿÿÿÿaddÄ, ŒxmaddÅ%1E ºœ4õÁIEND®B`‚nixnote2-2.0.2/images/material-light/justifyLeft.png000066400000000000000000000067341315604104400224570ustar00rootroot00000000000000‰PNG  IHDRóÿazTXtRaw profile type exifxÚí–m’Û †ÿsŠIÁq03½AßL²›d·ÓìäGw¦fbd$¡Gà¸þëçp?pQVvA-Å£ÇrÈ\ $^gO>¬û~ðáFï®/*A/çcì{|^ß&XØúãVï¬n;iºXÞezfÇr>õ´Ÿ]ÞóJx·œý;ÚÖéÙÝ?C2šÂž°ã.?=½"“²ú‚çÄS ƒÈºÓǹsWñ.yWé.w¾l½Ü¦Âù¸Ä»m=éǹ[º£vñ|ó"•«‹‡ÜÑÒý\] ™Šn/ê²”%a YÓ"šá§mµŒ–°Ä bÍWð<|u”‰Iü @ ꫯTbàΆž¹²,]ãÌUNh4Ø$Ks’À¦‚›@Í×XhùÍË_¥Ï0’ Æ3šûHù•v54Æ,q"Ÿ®¹B\ ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá+)‡ee`IDAT8Ëc4w÷ßÍÀÀ À@&`jVa²€ÑÜÝߎ›’0˜KI°000,b``ÚXK‰Xâ( ÄdJ¢qpâ69íé!G[Oò~îV†¨Ý<ß½0»\¼ÉÝÍÆèçêJLÈTr{Q·¥, Á(òš–Ð?¬«e4Ã+ˆ5_ÁóðÕQ¦@ìEjThP_}¥ŠcèAчP/±†*ŸÐhåÌͱM7†:\±Ðò›—¿JÏ02Œf¼iî=åWÚehŒYâDÞ®\!®0kaLróŽQBcçTV~Ws¯êÆ¿Ë (+͆œ&¡—ÚâÅ™1N|tþܤm@Šà[ 1øD,”ÈkJ„<øD8†H$4rl˜à`7À7æ(­±A©ÆÑ ›Ç@¨VŒ‚úÑh¨¡",щH“,%qŠIRJšæU”5ªhRUӬŨ¢‰%S3ËVrÈŒ#LrÊê²åœKÓÓ³ F”r„ƒxÈ‘=ìÈG©(Ÿ«ÔTµZ͵´Ð¸aû·ÔÔ5k¹•N¥Ôc—žºvë¹—Z<⑆y”‹Ú¦zOÈýœmj“X\ãô…Ôª74™Ì@,DqPÐa2óF1†In2ó9`SH5’ §Ñ$‚±SA»r?åæ$~Š[ø97Ñ=ƒœ›è6¹·ÜÞ¡Öæw¯.bç.œ9õ ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá,tkÎ[IDAT8Ëc4w÷ßÍÀÀ À@&`jVa²€ÑÜÝߎ›’0˜KI°000,b``ÚXK‰Xâ( ÄdJ¢q">Iswÿm r„ÂP%ÀˆÉЕCÃ{IEND®B`‚nixnote2-2.0.2/images/material-light/left_arrow.png000066400000000000000000000204171315604104400223050ustar00rootroot00000000000000‰PNG  IHDR,,y}Žu¦zTXtRaw profile type exifxÚ­™irܼ†ÿã9Ð@c9ÖªÜ ÇÏÓàX–dÙò—ŠÆÇ$zyŒÛÿù÷qÿâ'Å”]ÒRsËÙó“ZjÒySýóóƒO÷ïý‘ùz>žwo„cäŸ y?ÇÐ9¯??PÒëüøxÞ•ùzR} ôºðcÀhOÞŒ×$_Ey·×ÿ]{}®§wËyýŽõ:§ÏáóÿS!K/Š“¿ú<%2ƒXb¿ÇÎÿEì]ä}Œ•¿\ý:vîíí§à½½û;ß_çãÇP8Ÿ_7äO1zúuìn„ÞÏ(ü|ò‡ ;úãßÿ¼‹Ý9«ž³ŸÕõ”‰Tv¯EýXÊ}Çä(Åû±Ì«ð«¼/÷ÕxU–8ÉØò“|?]hAO)¬Ðà ûg˜L1É–ÂQdJ¼çj,ÒdÞd${…#%¶¸¹8É[ä´¼Í%Üç¶û¼*O^;%0X°l~~¹¯Nþ/¯·Î±Á×·X1/±šf–9ûË]$$œWLõÆ÷¾Ü»ºñïÉ Þ0WØýx†~ÖV¼yŽÜ§>9ÿ´F(ë5!âÙÊdB$>‡¨!_DJı’ŸÎÌ%&d ¨Ê î›3É©bÏæ3%Ü{Eå9 ´™æ©d¨“¬””ú)©RC]£&§ªY‹VmÚsÌ)kιdè^bIEK.¥ÔÒJ¯±¦ª5×Rkmµ7iÓ–[q­¶Özç¡¡;ŸîÜÑûG:ò(£Ž6ú¤|fš:ó,³Î6û’í¿ò*nÕÕVßaSJ;mÝy—]wÛýPk'žtôäSN=íô·¬½²ú1káSæþœµðÊše,ÝûÊϬqº”Cƒµœ‘1IŒË-–3_CJb™³œù&4… Y jÉYÁ2FÓ¢'¼åîgæþ˜7§éåM~—9g©ûdÎYê^™û5o_dmïÍ›±§ -¦>€víR»qÒo#æAÈcé«Ö%•’#œxê*)äæv˜•}k!cÕpvLKòL;µ0ç,!µ÷ª-´5VH9´×™q•³Ÿc¸4ž'ÅC½ìÞcåñ¹ö:˜+­{úPI­=c“îÜc¤9b‡©„é|äC$Ÿ8Š'¢ÅO-mŽ ¹ž½gm;g 5ËH$jGk9èmz{Ùú]’s÷gíåÌÓg<§ì©é$˜3&6z½1\ñ£íÝÓÎŒ³vèƒÙ·êº–´#Ñ‚Ž–T†„C­6íø£;±êWk©nõg§<vÍVO¹æ±Ýœ1è¦êg©;ëÆèÚžKŠèýhœ–ÚÝó& 6£íF µå°7íÉcÀMmXžVh>ATfî¡çº,gB¿&þÕ|j:äýÑ}>ñé’Iøó8­N S2DÅ$cׯz@^NrG;Ê)2³Z”[D÷aõ–Íž¢¦QV~Q+t‚¯ufÔx›¬V yÔ°‰‡4w²¡7s’ÈÑH)S:v‹&ðäNÔ{to'(‚N‚Á?{ êÜ€uÈ.G‘GšFÑVXÛa¥R¨4¿J\‚ˆ8(*OCD{‘BHaÛòÒâ-(ºÕâãÖ(4*Å Çïmü¤Ú<ïÚž¢«ÑÍ5’±BžèP¥þi1ÚH3hwöN)Z¢]eŽÁ`ê Úˆ’¨IZ*§Î˜gQ¤¬“‚Òƒh²Ò)R@¢ð\ríêôáÔ»r@t?UA)˱Æý„>«ì¾è\z½Kk…zîäÞàtG—iÐÓs€¾`JÑ1(‰5W EmÚû*³>¸JC Ú9à°ÕðÝÄ®ôåÔ¢ÐÀ>á—~¤fõFuÿ9Ò`p¤(Ècä™Ü<ººÛmdFÁ KÍ Yd)é9Žß@·d\f&Â¥ƒÍMÅb¬DÝÈ®î‰%$øu/þõÑýöâ‘ú$J~Xþ$è„)© Ǻ“us‡cu☚ÊÞúV=yUz.eŒ×‡rωîA3 \fy¤íÕ·®ÂWN`Î’ å °—Ò;*%²|ÒÜ"qË‹ ñL"hHß"à˜Õz¿f5MYÓêÖ£ úï>µþÝ1‰u?žÑÆH’Óòñ{¤À|B‡ÑÀŒSº ã¡´qFb¥ѥ{+ÒÝã@j€Ù…hçJ+T“¢¬@WrSí¢shF ´6¦. fÌ(×Vö‰Všº`(0ÚLlze^f4±Kî MùT<0¢ʈéè«tplcåùÇ’s¿”ÉÒÕÁmÉÌçsâG(7˪ _1 vHšä˜ª-¨Î ÷ëQñ?)¡F{îhÄì^_¹ÃOµQRÂm³PE¯CS.+Ón¨¢Z7ã*³n4À’gRt6Ððô·ŸnYÙÉ‚È:ÁfӈѵI¡W¬Ä¨ÈÛåÿ„=fc­WêªèðˆLÚ)€d?šÀƒ³é­@‘™4h “¶%¦“œ–˜ ²A€ÓAç¹€ßÑ¡­ÌÀ#vMeÎS Å|_ð."¼‹©Uó£){@ ¾ƒÚⲎ_ððoCp­ éMMùÀ`P‹öD„Ãë,ËÎÙtÛй`,Š œö%l•ã'¶-ǾÏôä/P›q¡­ jq³¯ü4Sƒ”Û€7C•õ/¨qÑ.¨ÐH(7å½ Ä³Í¨ÏíÑÝNÔlN]L 8j<‹; ]G©- O6]@T–Ó!þ’D÷]–3nX‹U"¯ÓP8Ã+Ü'5×­4à÷h)Hˆ“Y³ÕÌbP`5]p';‘ù—úlµ~O„jåBá/š6/ÒJ±ot0Nñq­ މO>h¸ 8žÎ”ßJ·@âBv˜êî Æ.QLõB€zÚƒÅFÀw4,v MqFªy½¬ó^*\9€6Õ€w4€^Ç”àTv>gì¹ÖDË]¾ƒ¢c¡€2\Òž®à¾úí~®¼@s˜ nÐÉÙÜèuNØ­eµ¿læž;p«Ü#,ûCõ\å‰1a‹eöæBz­_r»oªØ wÓ†iÌè"¸xM:éîKñ–Zôú»²pßÊ¢ Þ0ÙaÀƒÊÙ&ï Ф'µw¬@gÛzÞ$lˆ‘<iËÉ=­I ¡vøó L(c«äˆг.+Ì,Ýß7÷€ÊÅøukÞE# ­WèVÃaÜw<<ÕpýG­$ÓU÷…ba×Á3=ÖÃp ŒÞY¼ (1œ!–2ÍšŒ-é7êdÏ›´˜oVŽÓÒê­FžGP#ÏCxÆ ÿèy,a[í–hk%ÂÂo‰Ð»ñæl´·Á¨|rcÎòããî V"ÞJ¤-T(’e5¹%2™þ4 QÄ8ùerÞ¬'SĬÝùÔƒy=fXøµJÀD¡ë{E7 Š,¯ˆàêà ,~“UkO4&p“2s¾ ·­ÄeZЦ½Õ‚±ý½ryÕ‡ˆíA¥Häq ‹‹ƒÏ[£'ªÏ®(!@)TÛµAðxÓ…—/ÂD‹ÝÆH‚Ç´#‹”\‡*·¾t¤±åÚÏ0GBîœÎFÆ¡ž!@–ÏÊ’;#óì'Öß³Ãt H '¢ûô¡šî§>gŠ3ªšÙ‘Ð päm¨zÛÄ€5Œ ÜßrüÛ‘ÊÏY.ßÏ ;\´Bupד¦<òêÜnD`›–”+i kÎm»ó´×5Ã_ä#+$ÃYØõHü3¾lßmÊÖDQ߆†Ì n1‘dʵA«´D4£ÂFÍ›vqß,D^éË$–5ÏlÄ?HOÝw·SudÉ¿]/MCãæjys /Fâ}öG°Oê \0ɨͫö\œû}Xœ‰øÔýÊãö›|ä§\Ì¢el+‰J‡@h¤…ü­Ë "Œk|…n€¨©+b8Ùlãä{å>žÐÙJ­´!B«[8‚!yˆÓ\Ú±}_eB°³(.É05àDšdö†‘+(‘þÿ\HÐãq˜ÞÀãdLãæYð)~ |45Þhn‡O*¶£Âð(eÛ/Ä›TÓž€~2•K)0lEòô§¹°²˜ëÀ@>4áþÂ^K»½ÿ´°ú×>ǧ»Ü_¹uÜÆã¾¯%Ã,€‹,NÛE¤›ºÄãtÛ:°ºøapô õˆ†ÇH R‚m+îú¸¤Ù†]«}¼€Œ¦»Úv"0 ú¬"óÉ}Á£{p‚ ¥lA*)ßÍàÁ«ƒ›{ôjÛö•º±âme‰:.mn[woÀÝÿäÐA4±·Ñ<9tmâH Gd'ZDmªe`Kœ –ÜØÁ wµ-ÖUïÆZÐ]}’ì¶³F±xQ3?÷cú\tH´–™“µS ÈÀ‹™°8‚©êwÃnCº£òîŽ Œƒ»¢ÇiF8@éVX6_[Hx'Ûp2eÙ† ¹GŽ™‘kËMp?Àíëñ#Íÿc§ýݯlŸÈ¦k€žÕ4q‡5®¯¿»d6úÝ%d üNÑØ–˜QÈÝÎ.(NrDÙü!<Ê9Q¡ 'w(iÛh\ü¹;u}1íA¼ÛÂÑàJ.!ö»—·.Ü"¦‰+ðYí›æ&Ó$° ¤˜'›(Ï™ì Dë€uѯíÓªˆ„~á$‹èøîbK¥HÜÝ ­à¨Ebøs÷·52†Gð§ñ7÷K‚D c¬Z.Ï`î¿Í|÷I3-hH²©Wƒ;ƒÑjû_¨N,E:¹§Xˆ¶±‚,ú’eZ3¤ÆZYöÇ’­Øö(9S¼ý8Îvš] /й÷»áûÝæè§£-9çe»¥Ðô0e n|”2TYwKׇ ê­^‘a›ê¶§Ž+î02ú#Ç[+ %7vïù˜fO›ô?ìmRÈŸ(kÛ Ó³F\3îhÌȳc°öÏùöv/ ,¼¹PìŸt L·ÿT‰•mú6û^yƒ‡è.?Z‰y$dŠ>M˜ÑìPWÉžÊ2à·(/ÿù’¤ØmÛjx,—ú»µŽ}¿m«Äò"»ØÛÕ}ÄjKÍ–Zîôо{±dßðé q`±8AÉ V Üè©(ÖÀ¶_ɶÑmŠöÕ~a<ß !#öð2y 9 x…w›e`EíÛ(t ö££õO°oqñÈÐ&œh߉ؾ¡íTî½-¹G)(Û±² h‰ävg{ï1cmðe ¿+ ¢¶íð_AÚ¶ÁòôøR`zTXtRaw profile type iptcxÚ=‰Á À0 ÿž¢#Ø’!î:u>ýõ‘ý©chO $Nîg¥C?}ªW~lZ*8jA¥qtƒh“e®ú›ØV0¿«*/1mãÃãgv jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá&ûì§ŸIDATxÚíÝÁaIEAZNaGlå(° Lz¦+«~f„¬¥·?µ,\?ট¿~ÿ{âÇùûùçò³É FhaC°„©1,ÄIÄ,ÄIÄ,BÀ ‘/ ‘/K¤/ÁB¤ÄË׊`‰”ŸñB°„ á,D ñ,¡B¸,¡B¸ ¡B¸K¨.K¨.Á*.Á*„ Á+DK°„ „K°„ áB°Ä Ñ,¡á,±B´ ¡B¸K¬@´K¨®™áùI‹¢%Xb¢%XBÂ5&Xb…h –Xh –Pp –XAÏhµû„Ä úF«Õ'#VÐ;Zm>±‚þÑjñIˆ̈Vü' V0'ZѼXÁ¬hÅ~àbó¢ùA‹ÌŒVÜ,V07ZQ¬XÁìhÅ| b¢ñAŠˆVD°Ä D+"Xb¢,±ÑŠ–XhEK¬@´"‚%V ZÁ+­¯|ø¥RQMë ¬¬ˆ`‰ˆVD°Ä DëßÃbl+¥uVVD°Ä D+"Xb¢õ*ßÃb”ÖѺ++"Xb¢å$œ„ÖpÚÊZþ+-'!à$´®€SWÖ²X¬@´œ„€“кN_Y0waYWÀª•õè&VÀÊh9 y'¡u¬^Y0kaYW@Åʲ°€9 ˺ªV–…ÌXXÖP¹²,, ÿ²®€ê•ea½–uìXYÐwaYWÀ®•ea1 è,ç +f>sÝmŠ…Å’X‰+|ûQYW¼²¬¼ž\åKœ¥Å“‹åÿv-JOB³ž'bäñî[²°(‰•¥…“˜X‰%'¡ÏŠèxW¼ò¶,,¶,$K '!±-–œ„f;qñÎøî[³°+œ„ˆ•XQvzLˆ§½= ±ÂIˆX‰%'¡G%VbʼnoÑÂB¬p"Vb…`!VŒå´+±"æ}ZXƒXá$D¬@°+ ±+Nwypb%V¤¼[ K¬Ä '!b‚Å1±Á"&VÖÕ.O¬ÄŠ”÷la‰•Xá$D¬@°+ Ä Á"~]‰‚…XÁM—G)VbEÊ[·°ÄJ¬p"V Xˆ‚…X‰‚…X`‰•X!Xˆb‚%VbÅ—‡+V X+DßIˆX`‰ Xb‚…X`‰ Xb‚…X`‚E1¿ñK´@°-,D  ,¬,,D ¾âÏÃ:ÐêßTêלØ`yÀ¢)_NBç!Ĭ¡Ñòÿ2"Xˆ–h‰–h‰‚…h`‰–h!Xˆ–h!Xˆ¢Ålöóx’ß«…eiYZ8 -,D ÁB´D‹Ó]Õ™óøF<)ïÒÂÂÒÂIˆh‰‚…h1Öµãñ’÷½ƒ„(Òÿ ZXXZ8 -Ñ¢ì$4ßqrÚ›³°°´p"Z¢EéIh¶³:.ÞwÞ˜…Ŷ¸ˆNB"¢%V,9 =.ž>½'^}S¥Ñ+œ„DDK¬(9 =6ÞòÞï¾! ‹’¥%V8 ‰ˆ–X±å$ôø¸;í½ž<-,–--±bûÂò]ëÊ¢Ð÷$t;ÎA è¿°¬, z]YXÀŒ…ee•ëÊÂæ,,+ ¨ZW0kaYY@ź²°€y ËÊV¯+ ˜¹°¬,`庲°€¹ ËÊV­«%Á-`E¬œ„Àì“ÐÊV¬+ °°¬,°®â‚%Z VNBÀIhe§®«²`‰ˆ•“pZYÀiëªÚ'œïá}Ï~Ý|¾áxÉóèïŸi½Ÿo¼|!¿Ÿ·ýûë&÷8å=ÐûÆÇ½ÎìxÒßE¾òî¾þ±Sßïµðe;ïÿ}¾¯Åûðóß!Œ9žwÆ-_ù?Þ³xVà³oç±ñwqzÎsþM¿ù|úSð>Ÿý»§½¯ûï¡0Oz?~ŠÑûº¿Ý‰Ð·¬ý8ó·7|´éùúó%v{ϲ÷º»k!©dÞM}lå<ãƒä(øóµÄoæÿÈó|~+¿…-26ŸA>û3Œ­ÖYÿlì´Ín»Îã°ƒ%·\æÑ¹áüy­øìªþ¦€_»]öÕOã ™äÍó²û\‹=ç­ç|ÃÎ<-Ÿt–ƒY¾ñ˯ùÝ‹ÿÉïçöV‰[û”ÏX±.§šfÊœþåS$Äî7¦ñÄ÷üš/uó|I¬'ƒñ„¹°Áöô{ˆíÚò'ÏžÏÅ'˜ç¶†Íó=!âÜ‘ÅXOždU öÉÎek‰c!?•;\'6F7­ÙäÆûDrèÎÍw²=ŸuÑÝ—}¢y j$+„HýäP¨¡} &ƘbŽ%ÖØ’O!Å”RN¨–}9æ”s.¹æV| %–Tr)¥–V]õ@¸V³©¥ÖÚ'mºñíÆ'Zë®ûzì©ç^zímP>#Œ8ÒÈ£Œ:ÚtÓOÚ¦™Í,³Î¶ì¢”VXq¥•WYuµM­m¿ÃŽ;í¼Ë®»}fíÍê÷¬ÙŸ2÷ÏY³oÖ”±p>—d—sþ8„œD匌¹`ÉxV(h§œ=ņà”9å쩪èÈšJδÊ ˺¸ígî~dîófbø·òæþ”9£Ôý72g”º7s¿æí7Y›â½q2v»P1}üØøÀ*Í•&Núåq•æ@sÍ/Gxsï=Ô6#ʪ6ƳÈÚ“»«P‰­îý´¾#¹æìÓóç³ö:„?²·þ„5fÝRI^²…‘\*fǪ³»Î{Ë÷çµýãã6uhý³ïec^=ëì~ÇÆ“¹ÿ.çºÛq½Û³«ÛÀöº¶·|®O 0Ã0#¬P\î­,J$.r×ùʨuçøœõgmÓ§±¨ ­`>«=g#pÊ}4Ï·v|öSv¡ÐüŒ`ù¦„¨äWš#Ô¾³ßµ­^‡GE šÈØÑFãø¾ëÝ×lsé%Áf”aX3÷¤œ6ò\¦5P@™Û®¿«]á¤Ã5XÎ}ч'5°”Þ†Ùà+{¦fg­‹¿ÓZ@vMqgžþÊËæûù³7zw9‡h£f ”ó„Ër ¨SOÓ¯gÓt){gãTþ¬0V€Ð ÊÞã09:ÚÂ¥i·§ Z·d£þû¾ö¬üSdóhþô»\É[ Oó]w¿ëöó®;†³îØzІ…÷lÖgë-œ9ní,µõ¦üWGöËpDJç¿êfeëÍxô-77ŸY€¡”‡7 ’:qVжdðfra¾ebÄ·–,øsjÉmjéTR¦–b!wŸºji–Aûúf ÅiÓè D¯oDUAÝ ß‚j6Dþ‹u†ûL«âõ¸[Q®6ÂÓžèüæmë,ªÏ†ˆzݹ¨wx–!yJ&¹¾š‰®ë|»l ‡NHŸêT®qíó´¡µ ÚlLGšž<uíÉt8mØ_Þ9/S›§ÞV‹áYÕ¦Ø['íeÄ„ƒuжV¨49ÿ B í0Ù½­94ÓgJã)™|Ì}¶c!”q;ùògñmÓc™Tû“w#°`L%}mVRÔïË’6ê¤÷ÄgOd¼´æˆòÛ£Ÿ2ÏÁ,ȵ[HÄ­3èÐ:Ç7qÌ™ª+;â¬$F»Ö‚´¬þv»0·ÜwlCʲKkÝZ™=r÷á:L•ÓÍ ÜÉù°ñ%2…ã·u$7[Ô–‹7_Âv±ô.]: 1Ÿõb¬uØè8(½ao*Ÿô£|~z„‡‹ènÑýaãVÅVG|qÐsþõ[õ£:™«=9äÁÆ®°XŸïöÇy4#ÆÜ#§âžBKç•ÜD´2Ú9BQöyIªn•JmÒ,=;Z¾•@ÓFq4gŸ±SÕÖ!*€BS‹¤óº ÃÌ\ ß*iÓt3çéEüˆ‹*AèƒÀ;QO¡7áV8'˜ eÊ™•CÒK²tœvÐÀ9™sÚ“­Ó=ãÄ]¸’,€V{fƒQ9= ½µ„Éæ)‡ æø‹ƒßTÌ‹6Àr ]ZÈ£U3½³ÍæÉTZ¤$Dcuþ@åL#CÙ p¡ù¥U(Ñ&àµýè¼–ß¼;ÖgÆð&?O™f5 ‰3°šÈ)Ûc…p[¡qÔÆ²R¡ Líì#©ª•é¶€SÖª%8Gû˜)fYòH.²6ZBl|xQ£CMŽ$§%ÏàxHˆ¦ ú5!Aãå¹8ª“Ÿ¨ÚÕÙôœgÙA™· Ã<|1 ꑽq ‘@¢‘Òp„å?±e+?Ç´+ºM¹)¼,¹Q+•þOAÅøŒ ©â€õÁOåØAÖ‚ÞK-JÕŒsN;9÷D7±6¶†H»ÈŒè¡:ó<ñ¯ò®€Ü„r`ºZ>ª5è–œjôÁí$ üKF¨õ°\M4"uLˆ•‡VÇžÓ¬JgY2ïïóªµSÈ2 ¦¾_o A¤‰)•ÌÉP–h}ö©‰’åçNà§GzrbžÙ&üÀèCõnжzÉ™þ2üè/ïtÞö™­$\ù-¢onwðmŸiåÇjЖ©ùTŒÔ)†JGJ³?©9´Â¦|¶ë>Æ Þ"pRæn9LÍê|Ô&ŸŠÉ'àh%d#IH:¥J·`ÔéݨÕxÕý ë^%LÄ´ôÎ|¾œ[$Mu‹û*g¶­‘/ª&-€*ãõ|Dj¡¦Á|Ά²'Á‘tˆ¿¦ †xŠRa ü@{J’íÙ«‚çÇJ¼%Mqò2â3lGÖPŸ Ú£—EÓz–¿™«ƒAƒ‚é—©Ãü8”‡‡6ø|¤¡B®ì1çôLúÙJíÀ_T0“’¤ÖLj„%& N§Ó§#‹ r•;^'<;Z\¶•\JñiUh s¶9k·Šž8—ô#I«#z«MD.’–º²_Ÿ˜žjдZð(–ÖPW¥í2ÀÛ ”儹i:Äåp¼žuÝæaͲm†Âìt¯Ìt E\Üœ²œ{)³›.c·'L“w)uÔI0‘]À7|4¾F˜ˆ¸èsØ#^ž¹¡GÉû »0ö‚U’.Ô"+c)Nn ºÔÏqr¿Q•¿õV™âXIØZ2‰¨Rcy[´ÇV@¦ÞØþØ=^$Š ¼½:¤—aA,†®„ö,Ó°Ü~…wAÐ.€Çì·‰6˜r”رfj6Ë2Ž€Á ÌŶ6VšF5Äf?€,>‰¯¯™4È……ke!æQ^yþñÈ9¤¢HpR&t—jŽ}½BŽJaÆWL)[á* ´—áTÊå7"Ǽ¢ùpë­IÑ%u ‹ [£Ï& þÁx@õ`иDŽilºOH¿EOp:d XØêrG¿Ù³³H¹­)ËM‘OìòØì_›{H%<¨Q äÞXe …-ÿp¬è$–œµN"¸#u}«ë|.K¥£L *cáêÂÂÆ=ÑÆ³újwmIÕ#†¹•›ÑMœ­ãø¾ƒÞðÈÈ€'~½c ž¹o­d~»œIŽ‚b¶é»ÕÄ_ø(`¤ a–¡¸$)‰YÁï¹öÔ9¶ÀÌŽ·ež´˜‰ï”ü“ÌàØ±‹¡h³tc ²¶‹+ÅZ€~n4ó.mjE K1•“ƒ4¨½Œ;¾‹–Òszí¯¥jQÐÂ1]§©ˆ¤Ï§ GD#ý¹®$øEcZd&H û[7¼)–ëQ×($v+Ã,ð¹Ü_G[5ôÿƒúù¦%tTp~Ž`ÿ‘h”7"V€h9h‘hCMXMP/©¡5\д²íjèÒŠ@ÄtA`3a ¡UnùÎBZψ æ*±¶VyÊQ/èÞ2ƒxgÛˆ’*ˆìÊÊhAÂýu*¡jCÇ`J Íu)v Ý|æˆß×v}ƒóˆØÁe˜ i‚JÿtMb6 yÇ ˆÂš »ëŠ„X ÷Q@Ý]“´¥™{-Ç!{™äLñÄÈc`Ñê£n^ò!/ÿÔõ”øwêëÛ£9-‰^èYzaîÀº†‰#ø bŽX“/¡j¼5¡a¿\hQ·° žŒ1­D|­¤ÓpQŠvû!>‘Ó„¤Oñù(Ù‡x H,Þ¿å‹úÑ€ñ(¦%›Ë/Vê„ %w#ãtáG%JÑ‹'j@[Ä€ J@!ë½kÚcTÔ¨±æ!!LšÍ>$Íñ[ŠÏQlÂÒz*[õ«¡s¦~500Ç!ý6²{n»À¼šà|Å*aé°¨£aJã4&²öe^;~µ˜ªÑÛšW·”Î#Mÿuý‰¢ÀÕ`¾åö‘ì¼óe¹_5¨,•®§¥Ñ0°ÚN>꾕B-”vÉW¸4QP;;§ëZº„a{K×êgÜË6’ b¤ ébŸ×•5˜’úFV¥#¢=ƒ³G á_ð!š_’ÖsÉp²|øp¯ì|¹C¤q5~oöÌ3±È`©Õ-u¡š& Q“²Hoƒ¸ÑD k°‹f—"HXN×ý”ˆ¾Ø&@˜M•Êq›ãÐÏà¨=+ D(–t±¥~Œ Ê/. É¢ž‡Û÷Êš|GÄe_ïê.²N纱íË®sÝ€Ÿ²R.sÈ,Ÿ]A×ã©%B%¸¦‹(f¢ßW·ðo Ÿ=nœ8~ÊÖœ8Ý3¤©6칃.§ Œsôhñ†_£€axß eMËž+ç©è¦´áùd®ï¦GØ%KDr–¡Bpy`±ÝÑ´<îÿ#ðøñh+¥-­þ^‘jÆÔ Ò¨e@ðšÑ¸5T¨u»¢­Fý$xêNv&~Ì95'hom@m7ø½ZJ¬¬ÚTwa½‚Øïê3’aQ·ÑH'o'mÄb¢"6ai)ôXB! ‹@øÛYÔ0" L“lq¹ULÈ «ý3-µ\Öö°ïÿ3óV]™›P–Æ3}\A®y¶êjan²hš~A‹áž¢kú¼¦k~Q—šÏT d04çÎ5› ÿácÊ û}g9BÅà°Ùkõ¨` þß¾íÃüý”;È|rJÝÅЇn5©²ÒˆÓdtkî$už\4<+`c½w; ‡—„A{$½ÂS®ˆ V@7UN**Yï°¢`@Ñøð' ïíÓýãECÉ4"Ù—æ~0‹@h±T8ÒeŒ5"ÏHxâç裨 ¥ÓË.å©ëŒõz_è)­w¥«Hä È OQÎ(R²QùÉ3‡±ˆ¢‰‰‹R"¸"ÈÕÎöã½§ä\Ò•Æ0÷Γpnh51YqɈþ’ ­îgtýJ¼c¥vvƒÚ4ú£k(­€BÆÊ=ÒJû9ÓÐS·çôƒDº<§ âÐ=EXÃ}T¤H× ŽßúŸ"®‰éÁº\ÿz¼òçYíçp¡(Ïo¸– ré·VlG¼!G $S“Ò4f£±0~ˆ´c;×ð‘2§ÓpË óB‡FñAp]ðxÒ$ŸàÙ™G·Yƒº½eú%šøà¨sG(c~†Óêæ¯ÓD[—È ¡ŒÎñ˜sÙ[„Þ{iÆ/w)=né 0î]â¹>,£‰Œèç ° O0Z=f/CÀIc×OÞHWU½ûeŽýÁÖ]çƒÚ`°4”©eÀC*¸s¯nó½Wë-†ÝϽZ²ê%Špå0›WÁ¬yåqé‚°‚H>luïNºIPvàÇe½då‹ÿ¡ Ì?•G–EúØç»KÖpvÉ#»T_Sý((#MòqëÛ¥o¡Î2ª®ödÁ=Å5–øÞi t¯ÓÞ=µ³Ks¯Ï{»Œ=æ©É•(|FÔE¹šu“–-ô,½à6t‘!ˆ&ËJÅ “nf§ƒƒm£ÁÂç󮪱Ê'›u˜Üüµ[–¹‚åÉ¡_zTXtRaw profile type iptcxÚ=IË €P»3…#%>\G¸xóàþ±!Ñ6mú‘ë~J¶A¸ ÃãˆÖ X[©c1& Ãwä<Åçd. vñþªª¼1Þßgz<Ü jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEáÒ¤}Œ~IDAT8Ë­”]HSaÇçlmóc–+ʺR¨å…T˜¹Ò)J "ƒá…¨PwÝxQQxQ)¢" %û 6"ËÀO‘ÒÂdsÓãØé¢sdÍ3é¹{Ÿ—÷Çó¼Ïÿù XDÉPcPTà4®Tà3ðèU$9šùV°€Õ€RVŽ C‘äû–À’¡F'p8 8X]èÀM ]‘d5xh1ÏÛÅõÔäHls“Ô“ŒkS $†OE¬À@³"ɺÖf·YY w/Ç=‡PS“ê4vÁÆ&§€¿_pwá½ô”"ÉÝ‚1€ ùg&ìe$ÄØ+Âz¯à"àö³¿`=3Ϭ #@…hL³ÔlóháAžÌpiîù ¬'èˆ>åmô ž¼‚+X Ô‹†48–WšÒ¸u ]sýÉÙmu]-:`£½ˆ uzű†õ“ê4[Öù¬®ËÄ4ÑþðŠé§ŸÉ6;}+¿\ø^¾/Zv"ˆÆ:ð(Ä):hÍ÷gÜ~ì‚Þ…AËÝ`<¡?¤ÎSEs^å²Êιk9¼aÃñ±£vcÑ›ÌÌ•Øß)ÖVqÀ]Î- ÀVW1NÑÁp|Œò‚´)ºæßeûlž3»¾ZôšÙö•P칺|1—)ç¿pmö1÷æC8UŠjq%5>.N,U´™«wè±rŸlÑšï§,gM¿:ÍÔiE’o§›Ãu yr¹´(’¬¥Ë¦ÝpµÀÚIÖ–lÉP£œίÂ`GË@· #ÛŸTTeÆÀ l€ú€‡Š$/3Ç?Š ØdÛ:/IEND®B`‚nixnote2-2.0.2/images/material-light/link.png000066400000000000000000000106761315604104400211040ustar00rootroot00000000000000‰PNG  IHDR szzô¼zTXtRaw profile type exifxÚ­Wi’ô& ý¯SäËqX«rƒ?¥Ýî÷2_bW° B¼§ÅC퟿;ý…KkeÉŠ.:§pÙh£Nµ®%YÙùw^z¿Â󃞎*iÖ£k{~‚^î ¼Ýúü¨'_¶° í7ƒfìøèS0Á .øB )êhPÂ$ºè)†cJØ4ÁtÂê„)eM¶Y²Ë>‡s*Ÿb‹W| %–Tu5é_]õTC55n¥f›4×| -¶ÔkÝtÛ¥»î{è±§ƒµÍê#küÄÜ{Öx³6³sž¿³µ÷7<ʉ ÎÀ˜¶ Æý`­g*°µz078SQ#)Dƒ5–ANåÁ´µt>¸»3÷–7û+Þô+æhP÷0GƒºÍÜOÞ.X«£ï•ÉØÊ©2… ZH:¤Ñ“þXÒ£ gÍbSqFG)ë•.le4±-¹ùˆ.¸úØ€*U ]&¯‰¢E=­øRÒÅ‹± Æ.E ÅÉm[™ÓAu!iLéÐtôÁnJ*5eο&‚Ê7¶¤W/†UŒ+âPÒÍhŒzz'£ëŠTÌ™…8Ô2åéUlˆÇØ‚Ÿó%Æk˜ÇÙ5>Mn/ékH? G·ó pl­!aV[Þ#[Êqã SzeL |ö™^;û¥ä…>ý6&¼>Âm*¦…q°áü>kãVè -ÃÆ¤&ĪÎ\]IzVlLYPµÚ§Õww…4² ™õ1NF˜¬¼+¡†ŸYKïÓúˆ°‘ÍHåÖʇ¡s*ÓÔŒh×à8J­:á|ÎúeZÜBÉÂtj2êò6ôÊ'ù4zUó¾/qKÒ%.Ç¢A^£û½Dï—àÑ'\.Ð]eð)¢èëFñ4º ³½†ög™£ÿR:ΕƒÞGïrmÔw°o¼¼ûW¥ã,éué8 ëŒ ’[ï,þ=ýQÊéCüTÊI*×»27aX1f=iN>[³KÎè«áû:¹^Õú؋ߥÍl É‘½;í0mñú¥ äèºßKzh£è›Ú;í„óÑýñUª¿(qô¦1üJÒ½aàC3¢ü –æþåð!pÙazTXtRaw profile type iptcxÚ=‰» €@ CûLÁ‰tar Ýì/B$ð“,äZwÊÖrÃá‡Oõâ—MKGÅ ¨4Žv0úÉzÎê^ìï*˜_U•2`éãšZû jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá-nÀ IDATXý—1hQÇ—ä– "H‰ÂA:\àÜ Š „:$ ™ºtŠ:ÄÅ% uèâbAªƒEÒáuiºÔ¡ðŠK––PL\£`–,./ð|Þ]Î\â·Ýw÷ÿÿ¿÷½ïûžÃ¬T®æ `¸üŽ€çJŠss­3ð °­mu%Å˱#ûÁ\ ìùA»×ítfJ@ƒ·€ –fšçƒ^·sìÌQùhm < ù¿ìÌP¹k¸Àº’bÏX·|°HìdS‚ßv¬°€5 ×íô=?øÜ3ÜùL pxm)5Ü0e}/fR ,åëÀÇR¹êk‚¶-Ù×2 ¶r |΀“R¹º`D¬¼²ö8LCÀµ”÷u’]Õ~¸e€·¬ˆ4s)|g»n_³s ~¾¥¤ØOCà@‡; ¼üŠR®¤x’ºDÜí‘·v„ò¦’âáø#—àªUt¹:ìJŠ“ðºoM@©\½ ¼±6™t払-S^EÄ=ïÿ£òÐí†]m¬Å)WR¼õü \ÔëO÷À†’b7*ÒN®V‹S®¤hN›ÈN’®–àÌ•Ÿ§!³”»aµèN8óOÀT2z€ÜŽéjEàJˆò=í+Àµi £§W[9LœéŠ—í£4V-_ÃìçJŠ!p¸ ,[ÊÇÖNCÀž`ÿÚLIñSI±QÛGÀ»i äô£Á´BDqŠêj›JŠÓ48²|Ï4˜ UÛ7Ó44Go~,þïÀ}Kz’ITÛ§*D¥rõ>ðªq6ð$•p®à4£^·Óñü`܉y²m))Ïò=™µÇžì—¼îˆC]Ž™¯ÚYÙoVÈ:ÝÖþIEND®B`‚nixnote2-2.0.2/images/material-light/linked-notebook.png000066400000000000000000000217421315604104400232270ustar00rootroot00000000000000‰PNG  IHDR‰ 6zTXtRaw profile type exifxÚ­šg’$¹r„ÿã<´8¤oÀãósd¶±³Üåë¶™ªÎÊB!<Ü0ûþû˜ÿâ'‡ML¥æ–³å'¶Ø|çMµÏÏóêl¼ÿ?Ä÷3÷ãuóùçRà5<æýÞß¹ž¾¾PÞûÝøñº)ó§¾½| ôdÏ›ñNò(øçúÇDL{¿×ã·å¼ÿÆz¯¥çåç¿cÁ+1^ðÆïÐø—ž§fJè÷µówõzïûÀÿéÞùۙϷ?ïóÝO¶³ý½~4…±ù½!ÿd£÷ºK¿·ÝµÐ^ûzò çŠýþóÍvç¬zÎ~V×cÆRÙ¼‹úXÊ}Çø(†ûµÌoá_â}¹¿ßÊ'[vâÏa§qÍyìqÑ-×Ýqû¾N7™bôÛ^½Ÿ>Ük5ßü øuÇ—ÐÂ2¡â‰ß—ýç\Ü}n»Ï›®òäå¸Ó;s|ã—_ó»‹ÿæ÷s sâÎÙúi+æåÓLCžÓÿÜ…CÜymš®}ï¯ù7ö›cL×Ì•v;ž!Fr_±®Ÿ÷%}RÕõ€‰xvb2.à›]H.;[¼/ÎaÇŠ:3÷!ú\J~9sðMç <›ïwïõÉ?—‘B&y*ê8+ÆDü”X‰¡NÞD“RÊ©¤šZê9ä˜SιdaT/¡Ä’J.¥ÔÒJ¯¡Æšj®¥ÖÚjo¾ ,µÜŠiµµÖ;í ÝùvçŽÞ‡aÄ‘FeÔÑFŸ„ÏŒ3Í<ˬ³Í¾ü ‹ô_y³êj«o· ¥wÚy—]wÛýk'œxÒɧœzÚéŸ^{½ú£×ÜOžû³×Üë5y,Þûʗ׸\ÊÇNp’ä3<æ£ÃãE  ½|f«‹ÑËsò™mªäñšKrÎròŒÛùtܧï¾<÷G¿™ÿ‘ßü_yÎÈuÿ Ϲîõܯ~û×–êÞ¼{²P6µálܰk÷µ«&ýòºks0w'B0ocÄÖW"C@LÕç´¯Ù2|£”¸ÔÛ9¶Ïx0O_?í>û¾bþ´‚>•6SìÁ•Lý)õðìoêì¹…XúL.&Ç2¬jæý#þƒWó¼q'4FY ]?ìÊã`¨ï\öÑëäÖ¿œ³y&}|8ÉÍXx6&ÆYV+ÅŒ kúû‡ˆøÓÇn%ìºz«—5CÌËÏ4 a9 Æâ‰ã:«ÃÁ¹¤`WÊè܈®ÔíÍ®\"°1\ž=i¡ 3t¿±Fé„AXö²]%Ð&¿î˜·ëŒvæ*iRŒªÝBRJs¢rdfÇꈰZ:_V½qø$ŒÌhĵF sBåä®uBXäÊs({ú{VJÖ9.a9ŠÏç¶nó5p, ×Þ÷:{–~ÌZ£ëƒAM;5ŸVgιø[Ž¢D®4 kî-„¯mØž˜\þÄ:TQ—!HÉ‚¦nîØsµLšÇG¢ÊóP¹æžwK¾b ÑÃÎyú˜x¨d“ç“kîlû}oÿÍ«yÞ` ª>¶ Y{-, ,—GÚ+¥:XóËžÆjždödÿµ÷ºÉL±“PE–žŠËáØTˆšÕRÆ'bj<¾JÊÐó ‰+A9Ú†§=aÑšÂBA ,ãÃj#éqyæ´¢Û‚ÕN½Ü™„R›BÃB£#œàV…&˜ ·÷ØÖHF›»C¡r)@mš6¸©B¥­+mM±É«[:oå›kàEøž?ê>¤)aê}2aÖ8ŽÏÅß7ø—g=Þ5è«oXU +NåÚɵŽ3Öéü]ÓNŠÛY§Åwê2¬DÆQŠWE&ÑKxpÈÅ@²@Nã5Ǹuäyg:Bß‚†CÃjgî1-ïO[0‰¥ä|…håùvÜ”¨§`v†_Œ:óâ+έ=<%ì µŒB'‘{uì˜ü\¢Åú*5áðæ8÷¸¹Ø6Ã×s?uL‡ÁdÈY.íbR;Ñë…w–¤ïÝ "¤w %ðÔ‘;AÄ ‚9'7¬B=ïÂïO-†<,½sÞî JØÒ[•Q÷6øM8çÚ•š[VÏ­}Í\3Ö«`Õê‘ORv …¯':õû×6%°¹Ý’¨˜’s=R#2^®qÂE$81¸êb!¦ìçè"ßD½G³i‹ð,ã˜Ø ¹³–m ½WŽ^˜ ¢»nZà~—$Ú*>˜®r¥Á /ÃV/ Uý.v÷ ñø…W„_à$zµ A'Àén\;=ƒ“è¾HŠ^DfÌòæMÍÊv·Y%IT P¥¬ds™7u¨«Pa  "16^³ ¯`2©³!›kdîÞÔœ Û—ÃçÈ×v¤ÿ!%j&vBª@mî-¥}>õàqO©×HÈhapID û8’;Q=Õ+Ö%Z/1[œ§7[ߥÒã">4oÝE,-[åy¬È’7(òC‚0 å“Ï„ =9|ë8Õ¶wrLFïÊqÏgŠù i°hǬ <‡9‹V¼dÔ‰Œ,ÁÜ0Ó°`bêF;­;7 >ì÷ F¿b ,ü£r˜ìÇYâm„ž à?6kWZX“Ћè~’1±5 Xo‚SFÚÜ2ÊÞæb ¡ÜÜ›Õ=L‹¯ý†M‚NvNR§C¡CŸù&F=@ªMÍ8Uz-3«ôð¦äÉb˜,gQú-ëdÉ¢iOq$Am€âŒ‡§†š ¨ÂNO½€Ö@RÖ"QgiQ ”e'òÁÀnÀ7É%“GVí"r0£ÂZ{‚z¯*ƒdmìÖŸ¤`$x´‹kÎד5²–á*rR¼ ÌÙÃJ(Gˆ»é;\’ut²ŠŒÀã{.7ô­«  _|¬TöS}ÜÏWͽœ³à‹ÆÂþá0õ˜?3™ù›Î< ó+ås ^ÍPId°¡‘; V‘(@è,‡{l°t’I–‚3ÿÁtân@Áqf`œXÛ›3q~êÈúÔxÁPÔ¶~qý$˜w“”Í]F5(Pp~RÿNe Nn) °<4߸÷£2È…é~âÏhÚ˜ ÂUnID“Ð$rIµ„P××Ò ›~c]ì|åØGŠ™ÏƒL•œ ki¢y„u$™ò•„~“!{l€†bL2>Œ×mÒoÊ0œŒ€ƒ+S3«ôƒW$b¼’sÈÐu–02èT8Áz Ù> ΤÚĶ'ÉG¯@˜¾l'^dz8}9a®è™\bõMäê‚pàªÌ/WÌS€Q”¸#þCRH0 nûˆI‰v”C+u¿*6¯¥g¼/ ïÌÇ›÷µt øXJ6j¶W f-[Ú, ›Èå-ÍdóÃ0Q‘ñŒù½’ýás#{G½ˆ›6aÉX õM¥ÕZº@¥Ž“ø%­Rfxh•£†­?—¾€8CFp›ˆk(B——;c–¦mˆ{‡¬`‘Fð€¾ÔµL^¼Œ ½Ž™¤TÔ*¡nQÄpîƒL³ ßF·ÉDG‘Š@(¡£A`ß!um’µÔØ,Ô‡R’ßðUG™ªÐ’s·|û:¯E¬›Î£âFx×Îå"Îv1TõK¼À_ tÆÞò™ŒW Š¼Ášñª%¡Ýv–,ƒà@Ü̱íÖ KЇµ÷ëþàþJл]]ò°sÈÌRó„iœÊ&e’oÉ€é'läJöÿUžùº~ð?Qóƒð+ ~d¢lS˜ˆ¢#†;¥&ÀxIiIk*Dª{º¸a€(jìEÝ+d,:ZR¢Á鈯ž  ø±ñ 2ý$ ¤r }aQR$ÃB¬VPgRCK]†ÕíWýÅëÙdþA:ý1›Ì?H§²égsB×'PLÆ”–@I‚¸oÁ­Á{·"ܱËÓnHZá/vÆS˜r¨ìÃrèþ*®¨‰<¨ä>¡y¾Dú„c*ŒU\ðr )¡œØ^$³æ£:%ЭtgPke:¬V àâˆ=êÚ†±âeää‡'Ä3uãï3ž¼BG|Ü0F>%Љ)hÌFÏ6uü ÌoÉ33à3Q×¶¼K²°œbgvÈ‹A! Ä:âðí`KG?“ÖMÚ§HÍlø¤Ê© Ô¼›á V¸°,øq Ô’2C}(ÎÄi Pì™Qª8N\]…§ ŸjÙ¤iÕ Ð1ÔâxÝÀ¥¡ÅæÔGj EP¬n•Ø„p¿. 7uÆ?©Ø*¾¶ßrïFíQNo@xby†{Ú^äß·²mþØüåÜ|ÕóíL–ª úåvC¾¡ŽÐÒ;TÚNÒ; J ç)‰Ü™H ¨Ï@A¢Ž„œp=> ªZӬʖÎrÐæe 5þn=ù€êÀkUÿ¾mÔðzz‰° §ÈóHR×›¡DÀ‡“mñi§A9CF)ØŒZ3hD«®[+»£aº¼¨®üS„öC´£˜cG1]þèòZð>s†hÅí`–ùd¬;7”ƒ9ÞK,j&Oo«!]€¬IvÀÝÕ0àQdþ¹):D.¡—— ¤HÆþ_¸oþÀ/ 3þ‡1Š1—Yy¬–ÐT4Ðà@Õk¾À-0,•€rÙ§v`ª÷eíL?~=d1´²°•ßpkpŽºBA»]ï ,”´ÙÅOiˆë _µ’É%4C„…˜Ô!¢Õ½¤—É”+@Ò#^0ŒTCK5!3gTO ý 23@$ûkÎo漩­ã™½ÔšðJÌ’x÷HxÅ öURD·ÚR³U ‘[> GöŸòB’HÕ¿¤¢Ýšÿ  Á|/ž§n¾…Öéá Z©2­§C +êWíO*¢Vgx>»´†È|↴vs–Ò™º$7ˆãèÐÅΉ£MâTáa/(x[±F½Xëa`»EÎõ1Q‰WnÊ»SdKµ3Õ!€6 m(ÿiÝŽž9oK ¸ì·o@¤<2?'›¦"\Æ9‘(Bo´R¨•u†RÉ7òÈ­`† xúiðÔH­ Œ{zXáîCfTX(Ë Á>xùpï]Õ§\Ä’qÐö¹@@ð:JÃ?‘´ïÎÖí¸´æ\9äTêjâå¶QβihnØ µ4Q®äÙuçcIe«£kÝ“íÚiœ³Ý5NFÔž E\;¹¸ªö'Âo—‘@tÏR÷V¸¯¤ÄÝ/ùÛè7ÿOêøýæRGƒY©­âš`ý0O¸ƒI‹¸c€^Þ¶ 6B1+ð WÍ‚î  e884ÆGË(¼˜ÎFÀz8$KçÛj‚’¤e¶Øp©CÓJÚ0Éo¬=@ ÉÐ&IƈÌy.·$B)eÔù¡†ø=Ì‘”Oïƒü”‘Ô—êŒ÷îÈeðûDùb J Ø–°%ÃÃ'ým4YÕêÂjÇ©™»MB <$íýŸÑ\|Ž™ ÃÊźz2?(õ3YiBÊô_Á>u1fJ”N¨@s(Š&|SØ&ƒñhňˆqøËÁ:qˆâäÌ fl0lõã'rtª÷OéH%n.«µÛljá†Pð­©³ôܳ¾ßóq‹»¹ Ÿ*)§ u¢Á?!£„vdzh©òoGaó¯FÛòM­`n’0›/ª{“äǯ«jˆB¶µßþQ¶½öe™ìzKÚ¯“¸µ ËH‘¼ ’&=h ן‘z÷½y·¬~hEЦ™ÛT.ÝväÝxú›†¤½€øO/óÙòÔ6ýûu¯¯S% ˜ól匤)´”vr\dRîîäT4!ŠwÛ” %±jƒ¦,‚VKâ°,œïE LÕTçb&m>#¯ÜUÖj»{ ÚårpþR1'éÜÈLmm;Öôm/;  úùœ€ô:ê`W=Ì É#$÷öš`# ›Ã›‘BÝßzÞ·™%ÐÅY×øß NáW &ùɧݾDé,€d d€Ù;בæCj À‘«i{üö«yq'?»&V -.´_T>Wh¨Ÿç÷Oùš HOépâ£"œ‹×aC§Q˜Ã5£5ÏÚ4 ¿>å>äˈ}d÷EM«Í Å@‡Öf†}ö©Ú”kûö¤ï z÷³‡ªvè ® À¤€æT¦h×. Æ^hy·§wXÞ!ßt:渌ó»€ÍÏ­n!umàm¸ãñè9Øô ‰´W~þh’!YµÈq~4ÙrϬ`»ÕMÔ®+ÜjkÜS° "×UòυﵸÁ:è'¨fï.¾ÚG.û2s³µw{ ñžïY÷|ω­ZÍÁ¹ÈCÊóˆgUæUîiDŒé´Æï̳~nkýﺼ|5ß/<üBãÄ©ƒF²â‡Q0avüQöƬ @c*åH{œqEí{6 ¤óFd¨qö˜ÕÂwq¥X‹NßëpQŸ%N¥¶@[û<Æeâ»`îo‡%0ÉSQ§™ÑÕ§’Bx_ 5„ö¥¢ˆi$M–È?á«§©üE‡Pc¿V+¡­_Ú䉲K(6í&ï–¡€"y3j@'Û¢N–…–(#€"½> tFP8Ó÷³/YöÓñbäBíY­níò”hÁ¿K‡3Xq4¨H‚/?G),ø‘ž}%ˆ³¶1uðíÂH‰jC{u¨Õ ^åãDá³?M+Pþ¤“)['©ª6kjwæh/Ö÷T1îØüoèÓ{'b~?Åý»’w:@ùt$ªíž¼‡(?¦jî)ÊPtŠ’Êážã“Zì==I0h‡I§'+˜¢éáRl{@º”«Ô; Rˆž 0¥{®(WƒZŽ6›ŽWø×*Ðóy‚’Õ,"Îü/èÏ©HçT@ bzTXtRaw profile type iptcxÚ=‰Ë À0 C#Ø’CÜuê\zË¡ûSchŸ@è#÷~RŽÆ! ‡Ÿ¾ÔK?¶,œƒ Ò8ÛÁè'빪{-äଯªÊ 2á«ìkÔ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá7—{!ùIIDAT8Ë••OHqÇ?3»‡67ÿ$ØN i•KyÊBˆ—º*AFÁn KE‹ý£@”ŠÜcÞ–ëృ‡RI­-‰•ÕÙqwkÜUt³a:4º3;­ßÛ0¿÷™÷~ï}ß8HŠ>  èÚ€ZóU˜&€1E´ÒXÁÖ §pWˆ£Š,è6 7<À= x¨\#@¿" ¥À âÑ7ñ§æ¸~òÁúj–ry^Mÿ°Qô*?…Àq zYнÛÊ øSsÔ¼‰ÒÑ~‡£Í|ÛZäõø}{^øÝ󒢿à 0 ‰f¬2…?ze…ê î<‘â†$šÝ´5 °¶ÎÛwïY]ÍWz—Ðí5Gæá‘)5Ãýu»è¢9g6¥Ô QäWam7À6ï¶¡µéì™Vú®]EÓ4UEI«|žÿÊäÌl¹Z¯Ûç>|œ!™zÀ‰–&.]¼@ǹvB‰„Ñ´“£ à «i´4á  ­®ÍýtË¡ šÞtTèX3o‡9jåé³aVóy²ÙœpZ4nÓá`€›7úXÉdG25Ÿ ¦z‹©%7à„"@ãç/« ½`êKÀ*ßV²9fßËÁ4 &š+(êtŸæÿÁÖ76¹}Dr9]8¨È‚ÕåQà<Ð[¬ CÅ¢»óêØÚ[c=ŽOJ·xn}7zYÈYc€¹Ïz~@©¤wËÌqc›ÙJ@÷~1EJcÿ7ÄÙIoXIEND®B`‚nixnote2-2.0.2/images/material-light/local-notebook.png000066400000000000000000000221731315604104400230520ustar00rootroot00000000000000‰PNG  IHDR‰ mzTXtRaw profile type exifxÚÍšY’+“…ßYE/!˜a9Œf½ƒ^~²F•¤{뇖Lʬ¬Hp÷38aÖÿü÷6ÿÅŸB1!æ’jJB Õ5Þ”çþ¹¯ö çÿûCxýÎ~ýܼÿÂñ‘çÕßÓz]ßø<~|!¿®·ýëç&×8å5ÐëozÝÙñ¦¿&ùÈ»ûùÛDL}}¯…OËyýëóõY¼/ߙ͘‘ñ¼3nùÊ¿xïâ™Ï¾×ÆÏÅé]8ïïÿõç½3ïo¿mÞû»o{÷´×çþëV˜'½.Hßöèõ¹?ïÝÙ¡/Qû¸ó—_ØfËóùϧ½Û{–½×]] ‰J浨·¥œw\HŒ‚?_KüÍü‹¼Ïçoåoa‰ƒˆÍgÏþ c«uÖ?Û;™Å¶ë¼;˜bpËe^ΟϊϮºáoøk·Ë¾úi|!ƒ¸y>vïs±ç¾õÜo°ÈùLË•Î2˜å¿ü5?}øŸü}ho¥¸µOyß+æå”ÓLC‘Óÿ\E@ì~íi<û{þšOyó| ¬'‚ñlsaíéwˆíGnùgÏuñ æ¹¥aó| ÀqïÈd¬'O²>ÚdŸì\¶–},ħ1sRÝu"`ctÓšMl¼O‡jàÞ|'Ûs­‹î~ ´ˆèÅSˆP#X!Dò'‡Bµèc01Æs,±Æ–| )¦”rFµìsÈ1§œsÉ5·âK(±¤’K)µ´êªÂbM5›Zj­­qÓÆÐo7®h­»î{è±§ž{éµ·AúŒ0âH#2êhÓM?)ÿ™f6³Ì:Û²‹TZaÅ•V^eÕÕ6¹¶ý;î´ó.»îöµWT¿FÍ~‹ÜŸ£f_QSĹ.Ds~ N¢bFÄ\°D<+$´SÌžbCpŠœböTGQDGÔlTp¦UĈ`XÖÅmßc÷¹?ÆÍÄð¯âæ~9£Ðý_DÎ(t¯Èý·¢6Å{ãDìV¡öôñ`ã‚Uš+MœôËëêyPÑÏö1m›V­ìà,qIJ Ù[–Zç4ÃC…6ì=³®'¾õ,Z.Õï•wL¤ïî²~c;7Ø9·s3¸àõj¾ð—WÏÛ>÷ør3óínßßôùë‚;ŸÿÑ@`4[`ÝÊÃ÷6 O%úÛú±Ÿ4ç˜$` kÅÜÐA³v6fj|úýFsçpÆõ¸ýŒÕyÓ¦ßñ™$äܾ­–¶÷yÔ•Í ?F(£ùBTÑÚˆf³NæO° ûLͺ’àZ&‰º‡k“‰’-ÕèoÒˆ!,¼×¸¤Ôž«¾(lÔë¤ffn´_¥¶'Õ quŸ{˜Œ×Íbñ~ê"loëv¹­£[—aùØ"Emˆö/¯Æþ“ óXPgè{…æëÙ”ˆæ(©<íŽÃÌÕêûf¶z+©YÖZg>å®<I.}ÞÇ•Â+¹3€Ñ¥+àûCL‡K« Qd–1J#gXv.uÅâ{ªRk'<ËžÒÕ—IR­Ù¨•Û®”ÍB|”Øu… ˇ†žXbóU1êï%"®÷mÚ^2©7ÿ¥ò¿=k̰†0C}æÑ÷KÝÙ+0é) 5ÒúnÊ ¾pîSò¯’ë• ZŠ¡. ÙuGdÃ(~-âí;¿V"ßd?aã|죵k…gA°–ÒH;€Y%±q›Á}ƒ%‰•z-*GöXÊXÔʶ&Ú“vežò|[‚Þ—ýLl•§Ôöâû{¥Ô}« Ñœì£í\Í„uµ ye»{+·¶Wxä•Þ®3÷ö80“Ì9÷:w↺Wa³ùtòS•37ð? Tüüã°åmTœ¦qçÀFQsΔP_Ž0±ôpË-îžî†`Á–ÀýŸ= t»n¤“ÿ¥ÎgËÏéÖαí'*³3w{nvCCÝù9øn©L{»P,õ§¿íe_ÞìíL#ÀƈSµ4þ€šæ*¶U¸A<|'íîÇÚ¶T‚1u·!³k¡¬ÆÔ“P"í]µ£³;Ãj#°%³ÁMÆC˜§h¥o©l3:¬>"xÙà$”ެF,3•éãlu‡»Ý¶ÓöII(ã/ÛEñKCàxŒ/À?&ȧòæ,­ ÈyY5&öª£!Òš”“}L,kìÀrÍkfí3v7Ö#ªÕqc6Ží<˜CLI’´×"4Á ¾V¢°m·Úü– ²áÖ¬žJy ?Nvíz ¹u` `êĶZ²O}©iÚáb¦+#gÖ dX®CŠè:ËGͨ@álYæL›-&‚BîèìÜ'c#q¸(Q“¡§@†ÛÛ@|ôÎ$ÙF²ª=âM@s7 1ÈäfµäAž ºüH¡òq®è2¨MÖ$§ 8½8:øê) ’Ámêö³æŠgÈ`éG*ƒH·`ýøÜ óBEn£úŒ‘µžTÐZÙlTOˆ"9æQväªg¬íóÇE¦Ej¬tL_ªO^«å„OCý%RÍ"‚¯þ/aøkü×èF5Õ¯„ˆdȤ”+eìÏt¾]üùÚ/Óa6ædκ€ñ6%4£*q’¹ ¤uDà>‚5˜jª°ê!„Yñ˜:àÜßg±ÉëPkcŒ-Éë7éå|e„CeOOZ'Ô*_›Énò‡êG ^F²åÅиZø™›¬‘µì *H,7*ÕEDPYË ÛËŠ¤éNÐgؤS®jWdòFcEµ<¾¾¦Kùò!’ë9ɦíɶ¦æ `k“Š$} &ªd—t6Ïá-êH$äÛ@ܧÈnÄáÐì YOá˜ñqM¡F"!—øÿñÊj+FâNÙ6ˆA¬]ŠC¬; л’q£S,­ŒŒLlà$äxà 9‚Ô5:öÇ=]z¥6«/?ÐÛl‡áË1t•?eD^„q±°*Øl®½Z¨]Þu¯T·ôjcç*1,²”°”§‘0³6ŠðÆoû›­ÏÄÏ7;øÛ;>Û|üLb¶×tEðÿXÅ#ÙLÒÄ C¸ÍÀ.»¶O¤¿Åï²0d3#À›x¦à´njÙ4@€ ¤»cb“E’²T‘ã€AÅhA'ÿaj ænKSk¨ÅΧl6D ßÈ´>• cnгÙhj \bý…bÜø,¥+áÉ(cæ# ègy/ÉÏç(è\Žš"ž V:»)0\|uqÊßb¯T33”ŠÚ|‘sµy9'Á>$ÔÉhÕœѤI™ ñÁZs¶À8èÆ¹&§mR±Cêun5&ŽHµ»¥ø(JP)³*CÁá·ÖÅhÓ†»§ƒÐ^øôAN(<ø<)TÒï2Ëš[å?y#?«±Inéƒv°d(ö£¢d0ÄBQöR6ÀÇ#Yð"Ö(jŒ›x_–ïq5ã@^ŸHHƹ˜Rí&$ìÓðÁQרºäåáÒkâ(0¾‹7§ªÍœk©û€†¼ü vaù’/Eûz¡ÿí6,{¹âFr…Ÿ‹Åø…ꉦEItðºÁÑ3h?ºI)R°¨Î+¥òÆ9840 ¶ê{.Ãø¶(¬G”—P )¡/‘ç#¥r¹¼Qïd$áW6¬~‚!V_Æ_‚mHîIE XŠ˜ðJÔ㈾œUi[òùõ~‘ØØÝ ÐÆc-Û ägVG2 7úÂŽ±Á¼]ÈÐ…¼pñU÷ÜJ½Dé0u2ò¸,Š„-€&ÂÉ1"qÚç’hïpËǡԷœDfÜÒ¬Zä¾ÝÝO¤/ø‘º‚šÏõîîþbXÍcÁµ~l–û,ü,ÛÓE›vîúŽ|µ ´ÄZ-’O‰©>ä(ðI!å¶«¢h844àë&¨TÙy¥úõÊ[÷Âü,5,F—Ĩ`›¥ðkâÚýí5$54ÀrCAoh¥PÀ”ÜÍ ëñbñr|w,âuDD9éèP4!@´”×C¨ÚH æI®6tKçY!1˜lg‰DÖÓ´É#Ô½š‹†‰¯@ÉôÂ6á­ ˆŠdjVLpb@.>ˆ¹ò½³`*s™Öé:•Iå:àYrÝŒñÞ[ö–\¶ë–#áy4ó‰ÍÝÔPcÏr "Ê4Aì *«`q.]dë_×0à„w¾²C=7vr"‚œc$Ì6%hgÁ¡asqp4"3 ´s«vƒsŸEë:Ü]¡n–L¶}Ö>. ;Tè?»¿ý›Ò#õS­Ö±‚.£éíFqD]ýtÈOLré|«ÝÈ~°†ÿ?Ü_#‘Â=Ô iË Æüàþ¼°‹º€^‡GJUô˜®«ñÆÓË÷/¹Ÿ¬È3eKíf=vðK[ùvZ+Ä«R“.Ä|•Z—ñ°E3p3{»|5 OMñZnfÈ0<„.øÁ‡H þºQSŽÊ€l#a’95Ìâ &™ZŠiáL—7ÏLÁMµ–CP–€va[“b¤æ/œ9]× Þá³¹v©˜ÚpŠ ÄÆŸ2>rxÞ…KCàËž8#¹]¦®zy†ª6=”Í@Çu4d+:ó@Œ—‰9‰ “ýµ1ð¡ôDçfYk“Ú¶Šš<ÒÙSµóWP3o¬ü…åvœ›hÆ:tŒ QŒè_f°é÷GEip¿ÄDº8éœAô½Q{âºÈЬgDRHÂ9Ico¼Roìa¨]} ƒ QVÖ“?)ö%÷O®?_‹¡ÖnJ}ó×Üÿ™^éÿdæSä›Ûn½tû¨é~‰¤©€¼[6_…€p<יϾ®Àl+žýg{ÃÍ ûR"1‡Y}TQîpbP»'q¦¸Á#Ð8퓞jŠäÛ+Àþ#nC$O—å©…«·àEÇzÇ ?ýå¾iˆMnQ ~ïð‹™x›|_ýèj»íÇ'Þç°$î‚?ª®ÄMV§%qE NkE•H?Š·-ç×Åú¯{Ùx”2+W#£y“ ‚N§DzD„4Ê>¹=ªèžŽ”³È¾<ì¼w’1/P©8ôÔÔx1}•¨¶;9ðç²È(¥j;ŽÄ¯’§¬ArÃŽ§H®£Ÿ³S¨ã®„|Úk«á˶žžÜµ<Ëì׊HÁRJAM Ômå!µ<Ô‹¢ŒÌ¯é8í…YŽ{,uJ~•l™x l¦ƒI2L+ Þuj´Ž^MOöÞ_59Õÿ>òQbˆp\;Ît hX<Øv>ÑÏkRì‡G*þ‡“Å/v9ÿƒ}î?û5¦+Rµ£»ñÒåÐhuc³´‘Ä´ð¸ Ê>ºâ`;Ö^}âí>Ð¨Š”G=‰bÕ}£ä$|pGëúiËüÔH~!ªF’Ú+jÊ‘4Ð÷eáÛ§X 3Õæ=;âFÏTø„'bK廟Rãi C©’v2y$`·ÜqË[·d ê«ßNÑzuøÑžNQð:,P‹ ÆÔDIZ­s B(¼s!ÄšSÒ“5…{4}}hŸÍ§¾ðv’¹“Іi›=Rd¬m»€²……uÎD([¡O£ÔXHŽäŸrÔÒ™ÄFˆr//÷ÝäÈüËŒ£Gfó…jÜÏTóêbŽBòT¶6úÛ¢§EÝÏLMYï=ê{¯ÖÓ£f‹1Vú˜ùjö¿xüSAæX|âáN¸ÇuNÏȪéÁùú’Û§ÐlÄ)à¼6Š ¾Ž ÔÍ%ˆ¤“†·SCQ†Ä*Û±"Hu‚Þø¹ãHsâ®CÒ@ñd‹8´ìBRw²°:éÉ%ËÐûÃmê>ÝÞÊ-‹¶žÔdnc88ñ±‚Ñ“R” =ÎE+NƒÞCŠö:£È¯ö0 e…y­(Ø'nž|¥Y4r„?­VÕ1ü ñSú+£Žíòq"‡|íM_Ö¿†‡ÑæDhÕ»ÄÒ‘L“ÒQÔª,L›}Ô…èªÁ"'C¾B¡%ï6›ô¢Û•~j¨y,d*Î3!A¶üÔ&k€õÂY&„vËÑõ{d¿LÔ‘_¯îà©€%Á“{Xê†<{Læl5<žZ«ÄÇiÐ=r`êaƒ¶jÚ£¦!6ÉCJÚ?Š›MU${ñ¤LVG¥½¬Ó¾PL’Ÿê¸,ãÞ³ÇfÒjn_º[ A ¾‘S¿ÚôzB.›ø©éeþóCžÏg<¡õ­ õÜkî—Ç«O'?눒hèØqB0Y~ò:ô«É´]ÕÕ ð&=ЃJ)zªâ’—}Fÿøú’:YæV”_§yzŸw@pEOÒ£I#Ãâ!ïºÝ«©Á-ý9†t½¹{,¶¥å^óÀµüagjÍiE}@t庺UKvü:™À; ™@Ky‰±OÓø4=éû—iüº?o†ù÷»ñÃfè±!ÑQ$•Γ–è¶B9ƒÁ%êÉ©¢òZÒº Îþ.½žg^ d#o¯÷ †:%lQ÷ S ˆ3JBIÔ6)ä1¼ÊÒäsžyBÁä]ÎÁD ARP¯Ã>o,ý©H(ön_].=ÊànWñ{ÁëéÅ[¨ª+‡¹)ÔRk €ŽÐqÀ ¤ü³kó³N}{ ÎÏç®ô8£š“îõÜ•ƒC‘…ûÜÕj 4­Ã¯Né'ÙE²DYÏ ƒì3J×_í…@n†H¬ÂÊóíñ.»O—=z*KO—Õ³Ôtú‹ìëyBæï¨™v4ðù™¶Û>Æ…xOµ¨®I+&x,¿ˆÑ*R}„ [zâu*“Ùý¥#çÛArñ­§„• ÏœEó½›³wø©ó}–ícKFŸõÜá¿n—Úœ¯§†>¹óƒ­@Þ`Œ:Ô÷¬…öÞUC=n2¬w|Þxª@ ­âË‚ÅïìlôŽúSñ+…úöTf<¢yœÇ…4ýûTæ· _—©úGóÿl ÜäÚÑæõ«‡ûËÍä×~;Ù¿­êó@Ë=kŠÀ˸Êó¬i“mµdœÄý)(2½4tœ‡-)DÖ~ ’¢F5ÏjþÏhîŠ= >Î`zTXtRaw profile type iptcxÚ=IÉ €0 ûg FHìHM×!ýðãÑýEˆ¶lùëÞ)GÃ! ‡O_êŶ,ƒ Ò8ÚÁè'ë9«{-¯¦`}UU2"äø2y jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEáËXôà­IDAT8Ë••KHTQ€?¯£éø­«ùÊŠ¢ SÃE-:K Ò2(0„$p£‹Ú(º0Å¢VPF‹°4HÍT4“ðÒ6¤0 ÚÒCDÒG3óÞ;-ºŠ:3ißîžÃù8ÿù7(Š ä¹@&ml¹!`hB87ž ð!Ëꀃü›q hBh^BEQ dë4¥BˆÅÂ: ê·ºÌ˜ÝÁ}û‰‰±033ˇáa/KhX)‰; ø«hŠ…šiM˜cvÏ»¹w5YN`~á'M=Þ÷ „ò’ X"£Š€·@ƒd$ n%LMÕ¶¨ºª¯]©RE–Œlz%À=¿@ï«~\®¹­¾¥ šŒÒðâAc3SÓl±„îñ ªêfÒ\“Qg^LLMs,;ƒü¹$È2š¦bûú§íØìßý 3MkŠvÇs²(-¹ˆ®ëŒ~¶a6‡’s$›ä¤$®Ü¨Ç>9åëX´äkU’$Μbqq‘òê:î?zBdD˪ŠÕKÑÙ¿1KF;­ÃE||G>ñki‰ÊËeÄÅYiëèÂnw˜ ûó¹%£7×±¬©èšNxX8•—ÊHOK¥­£‹Öî^‚·£i~KkH2}ιyƲbWZ*=}ý´v¿¤¨ DYfô‹ÍŸp@ÚF_ÅãñÐò¢‹Y§ ]×Ù»g7 ×k9“’1»ƒ–În_2'Ð,#¨vãîàð×êï2øî=af3¯•7ÔܼÍô¬Ë—ðŽÂf2>š€£@q¬ÕBzŠÌò’ÊœÛÍãgm«Ä„‘¼#KLaáæYpkã´ þ?ôç…?VÊcž¥ÀäDN 8½"ó9±ÛÊ@á&¿€f!„Wºÿ<Ëø3±LÐEIEND®B`‚nixnote2-2.0.2/images/material-light/navigation.png000066400000000000000000000127641315604104400223060ustar00rootroot00000000000000‰PNG  IHDRÄ´l; ¬zTXtRaw profile type exifxÚµ™Y–;Dÿ¹Š^G\ÇsÞzù}ÁL©ærÙÏ-¹”)’ɲYÿýg›ÿð ^¼‰)©"–W¬±úÆM±×ëº:ÏçõEî>÷¶Ý<;ïÊ»pÄbÓìvWwÁnÝtÍm·Îu¸Á£_>sõ~øpÚJȾúqÀˆúvÛçPÃ4¡€Ä·@³îÅuëYo¸ÂÊÓ1Ò;&s<ñám>kü“÷s¢½Õųåi+öåÕ§Ù†"§ŸŒ·o›¦cßó6¯üƾ6€`:f.°Ù~MÑ“{ñ­ppŒK6{…†Ëóž±vb3.€€’g³÷Ù9ìXÀ§±s¢ï àRòÓ™ 6!à ¬Í3Ù±>ù«jˆD d ©¡VŒ ÿɱàC-…MJIRN%ÕÔ$H”$"Y”£Z9æ”%ç\rÍ­„K*Rr)¥–V} PXªR³©¥ÖÚ‹6¦n<ÝÑZ÷=ôØS—ž{éµ·ûŒ8Ò‘Gu´ég˜„ÿ”™Í,³Î¶Ü•V\iÉÊ«¬ºÚÆ×vØq§-;ï²ënOÔnTߢæÞ!÷=jîFM‹g\~AæœS8¥“¤˜˜ij"€C{ÅÌ£Wä3[=A‘<¨¹¤àL§ˆ`\Î§ížØ½ ÷-n&ÅßÂÍ…œQèþrF¡»‘ûˆÛ'¨MÍ{ã vE¡ÚÔ† ±1`•æKÓœôÇW³JÞ Ón"ºåÊ%éýÌ-ܧ™mhÍm%‰›ŒÂž}‡ ·f;C窜`ûk²´ ãÏdW‡ž€.:˜ÁUzX®i{µ2*=ÊàF‡¥NÔõ8ºÝk¬.@2æÁ/zzv³X5Të=I—N½[=”¯¥ÜÇ3_ž{‡qÆv2åŒdî›–Sw½çd`‡ŽçVñ¸âÑ'm-ÐÛ Œ•Ù.º¸Wôê5+Žf’„2vÇ6Ç »]äu \’ÛBÎ?Ù±Ëíy®:=p3u˜ksÍÿ1ô· Ì/m@Œ¸> ¨•P ÓiŒÕVû.wÝ[X5˜sÞÝÕg"ñ»:ñXº+=YLVZ’œH²©s ød{JûžEçÀ»v7:Cjf#¦J H´Ú*»s®fžˆ¿„5øÜ\>ŽJ î]W?ÓDBdøžš+Ui¡Yšã ‘0RÀœ3ùH€v÷‰£‹‰*מWó¾áÛk®Ko\*u¾îä¦ä†g¤•jüK}øE1¢R¡8±›ZÑñƒ ¨£äÙ÷Vcê>i8ÏÄ}9ñP ¬# þ3ܹŸNP0¥_ &V#ÒÈTÍt‚´ÙÚÖh¬âZ‚05üHvÍê”c;ÑÙñ(öj#Æ:g9‡fÔ+übÿêj^ÂØ¬‚+”9&Á…s \E`ü<†• v ž°à+ÁìÃ=¸€©8Dä@–Å…qÒÒå±»ì¤e:”#¾„A8߆–;iV@„¿ [§r¿›Ä+Ù#nü·’²`Ä-†Ašlyú•‘[•1Ô}Õ-j"øè¾ù·×¹Fr­Ú¬ä4޼:‚²nO,L Ç6âÓVŒM诟zö7Wó»$ß÷$­ÏÐGß¡’™a÷P5Ö­Z6á¹Ó ÍýÚpâJá¢ð暦ފ“ê¼Á½6‹ù†þåDøÁ.š'ÓäÃßë~_ìí]yvÕÑs@ƒ ¸k®€¦Ê÷dþ޹a~¾ùï÷nÊÿ˳?^)ÐZQî"¶‰ÓÞK çœ/}æ]'Šs¹^Ó¥˜ ©¤w‚}ž Ÿ “7çT.}{Ûî…,²0ÀEª8bi}å€nÃmÉd=f±MA Îƒ¹"ZÙ«2\”}·@yê™JK`íÞZéÜUæ­UþàSeòD"îÞGiqaj¼1¡8×͈ä oOÙÜUiE€]£hdUàk‰W†ðkWl¹™,1,Õ‘únh9>Äש{mÍ}Ñ šùÁëT!(bÔ#ÙXGèÛ ޚ%äü}"~ÞÈÌ“tGþ–Ú£—JQ—¿wiHjÕÑ+“ÎtHVéØ[XBDƨÚõPµêÑ8âä‘6HÎe.æÏùQ(ä…2±ï#.ÿ:#™êõ°˜ßNm^æFÈ8R0‰5Åœ§P@Ä)”þ l$G‰«j1D +Z.ìD½ŠtBÐL-†§àB|Rd‘¼‘Im¡˜8UGp:$ óزl ÕP+¥Q¿È×?Ó­ùq^²¿*Ê-ê5¦›^4 ¢¢M‚Àw«¿: ýý€SQ…LúÁdQcã÷ÎÄN_eP£i)ÆÅnå·óOºëbíÍ& lÐ`3½ª1NïéÒŸë°9šœâ¡µ«Ð òîìæWÆ¡`œhM4-U¦0g}­70&{/Lá‡{fõY¡h™â…¢æ!Êï§#\·H?ëzÙ‘‡®øyGHJ7³,˜Gq˜øÓR¡C+tA#IU­,]‹Z‡ˆš¨E“·,俊 -òÊж@k¤ ã+.ƘñcÝÿ§¿®éçYʬ躜Z9aAˆJÅijûco/®²“q¹ŸˆÜ\g^‘žVäÊ´ñ³PbÄfvu`†X©­üC÷á‚|R¼§+¯ùtRc\˜«Þ?MHÏJ[fúÿ "cêÏQ9(g“½§‡Á5¬ ½ †KýŽ‚"_VÅTg³šÿ lÄ&zgazTXtRaw profile type iptcxÚ=б €@ ûLÁ‰ñaò Ýì/B$8K–-[®u§lC?|ª—~lZ*8*A¥q´ƒÑKÖrVßùRÁüªª<1Ýß=U†ø jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá!¿„æIDAT8ËÔÍKTaÇñÏ87‰ íEjÑ ¢”AEå E´˜‚`VýmÛöï´ië.Á5¨©MB¯&• 6…FæØms&.ÃŒ]ç¬î}xÎ÷üÎy~ÏSÐe”*Õægûp —p ….aЃýD 7q!ŠÌ$]¨+âN£Œ8À"ê˜JrB èÅq\ÆUŒb{B=lá=f“ÿ‹‘8êÊ8z£`6~ã1’êvEkç¢Õ2†1€NbR,`õ¤¸;’/¢‚+8þL»bOð¤T©ö`/ŽÆéÞðáCç¤øŒ)|màzÆ.:Ìo»øƒx‰ÍÚø˜wq'<™ìØŒ:ža©¹`.|9óì‹yæ-Æ\kø•?‹œ øH˜cÏv…~`óHkãcÿÀkx‹wa•¸÷§p&îÿ(µ§XÄt½¢íÞfѾPÕ6þ‰‡¸å¦ZÙÙňF©R]Å+<Ç­pÖšÀjkò¶¦bkqÀ_–½sxŠF«°žœýçÃ8–[ÖsƒÅ­š•ÐÀÌ`£ÍsƒëÑöJü¯‡Ú¥è¨kpó]Ì|O`½Ú\àHLñÂb“ñDnuÊKvð¬„úñß;©…¿‚pŠð“]µIEND®B`‚nixnote2-2.0.2/images/material-light/newNote.png000066400000000000000000000154521315604104400215630ustar00rootroot00000000000000‰PNG  IHDR (Ÿ)ø™ÏzTXtRaw profile type exifxÚÅši–++®…ÿ3Š}3Úµjoøõ ™N§³»~µÊ>é°‰ m!mÁQóÿþ½Ô¿x…d¬ò!åXbÔ¼|ñÅV¾d}^çj´ßŸûe¯[üþЮ쭓¥Équçgœ×ó•öðÞ!ù«½}lW©_ãäk ëÆm@'’Ev)y äìi7×oU®~ÕßMçúkãj çòøÛ'Œ1ã9«ìt…¿p¤84pÉU'ßåÓ[iñ|÷.ìOûÜvª÷çÆ{ûö`;]¯v÷ÑJÇëø`£«Ý„ç¶Ûº×ȼKþpÃUôýëÎvk¼Ö<³«>b©¨®Iݦ²¿ñ y·»EÞ‰¿À÷´ß…wfŠĆîàÙtW¦kœ^Æ›aªYfîk7½6qµ¶[·Û²K¶Øî¼Í²É7”ËàÓÁÍ "oº˜-·lyÝd$ÓÖ0˜¡Ç§·zÖøOÞo­%~`ŒÎÇN¸zYñÔä䓧Ĭ˦aÛw¿Õßè;`†mæÌ«ngˆÌ»o¹³ã¹ ½Ògi˜4®0²Ê:L4:Y›ŒÁŽ|*š[ܾ€ Á£Ø8'[‘MŸdö³6ØÓLhÙ $²x2UÀò>à?Ég|¨¼ !ÄB%Ôè¢!Ƙ¢Ä¨š\ò)¤˜RÊ©¤š]ö9ä˜SιäZlq„°PbIªäRJ­­ ]é]y¢Öf›k¾…[j¹•V;îÓ}=öÔs/½;Ü`ù8’y”Q§™¸Òô3Ì8Ó̳̺ðµå–_aÅ•V^eÕ7Ô̵l? fû5s¡&ˆùý\zGæ”nC 'A01ë ˆ'A‡¶‚™ÎÆ{+È fºXE° f‚€3Œ ‚~–yÃî¹oqSÁÿ 7ûrJ ûÿ@N trŸq{‚Ú¼·×ᵠŦÚ-ÛÔÈ·¹Ž<“®£g2A ¾¥Œ‰Bw’2}n–åkw<ªÝ˜D¢2]±ŽB#ÓÎ9{Z­ÆÖB]n.=ÒBm\¼E>ÉC#U=b죰=ÿr4¡Ï”ë >/5{i°Ö–‘ñZfIP2@IDŽ‹|ov€|™ çMÖ¼‚ÍÝù–1‰Ên%¿jXàP›Ð±Ó¾r0“@¼Šn~ºNkfÌÛ׈9÷ІŸÙ©Õ|nÍÔ¸ïd›×¶ù­Ñ 6·Fº ßtUßÙ#¦’gª{2\$ìÚÊÐTÝŠÒ5 2k7°&¨Áˆ¦¤—Ð[©Å/3pÛº­¶MéÑq§&13Amã,ÔãvU çºbÿ½T´ª­é#®"wT6r™$B¸Fl€/y$%uý „·®…7É÷ꬳ‰âuÃÒ€ŸD¶çfWÜÖöþ¨Zw#Üßvæ˜(  ™úÃȾ„”³ÁìÅÜ ®4ûÌ»]=¹¯Ÿ!R‘Ã*QæìBà$ž.vœšñ$ûÛõñVò¦×¾æh›á)ÃÇ=œòÜÜvúÇv%7죞Ûê+n ¨{ÈŽÇ©é÷l÷\YÛ _ß;–P÷¦x7«Iæ{âiûƒÔ‡én#hýÉ ïí¬Î¥§ðÁ©¼è—xžY.QŸôéÉ׬÷T§»¬Q_ƒÑ•ЧÃ?ÉùTµût¶Ü€‚OX‹›”½7‹¢°ÐT l©C–)yÁëì¼nš²‰zìÅŒ†øîdgKäO÷)WJÓ‘uW>¯B&£¡;‰B6Ïû\§Z ²[â<y“‰Ú$'xBlvlb]Iöe‡ ——VSŠ(YBVû"‡Û{ „wªŽNyWØ ¹Œ-̼‰œT‘Ê•¹dÝ‘¸r’jÖ*–±”£Xss!°8Cz#Ä"{’¼ sWž½Z¿yÆÚ ï@Ze;»2‰”Îöø¾S‡‡Ø§¯Åª¿ÉýZ¬ú›Ü¯Åª¿ÉýZ¬zÝÌG¬zÝÌG¬zÝÌG¬zÝÌG¬zÝÌG¬zÝÌG¬zÝÌG¬zÝÌG¬º“›áÐ)çæk+cGÀgK>ᮽÁjºÕ°â0£©ÙÉöi ÃçœlUùFÂ&ê{©9•bMZ¶™ñßúB¶=œá$¹R7 sÚ³÷•PO)DõÄþ˜‚­ËöÜåL²žkž{¦öѺÖG 9B •n¥Â•¸ã˜²äRnÉNâv토ߌ’³•´k¦'¢= 2Q Û“RHWuÛË6mŸ¬í–šB_aؽsl’f?>2…Œ¾qá/ýß”P¯hq¯„zE‹{%Ô+ZÜ+¡^Ñâ^ õŠ÷J¨W´¸WBQø7óHA3Y5öad_5ø. šÚj¡m ¶¸žsð,²hu-TÉÁâãi–i{ãSÖô¹>nrçã¨ì€®²”=ëèGú\ÌáÎs>»’Î:9GÞÄÛ™£úó©åí°RNjK:‡•õl ìSnm[—zÿl_¶ ,%Iä‚üŒD™vßë± T˜Ç'ÚI¯Ð=u öÜ[¾9¿í܆F±C“ÿ†·´T¶›)1<¥RT³`ͦC( ‹CΈ…õ­ Ñ%†"ÿíÃŒâ).…?ìJ¶3 R c%UêF§U­ÄÑÉÜ¥Û[¡uÓ´µÔe‹çíôûŒ©í7}6C2!^bü¨]¼Ú*àØpmHâç î“Íò$çþÆ^;J õúLm›åÈÃØ·Sü/†ÿ&ð³<½%¾ÉSïeSÇžM+›µ§Ãú§“V¢ËE±'»Añ¨‹•o›A«q&ÍÉ;èyP›k~ ¬~oÎï­©¾0ç§Ù}ömvïV¢Äýì$}ïùÙÝÍMÂÇÝì>̵ö8ò?ÅN=:Ë?ÅN]J¼Œ:ཎúv)ü;õnâ×°SU|䈞zI¶ W±‰Ñ˜Ú¸•¢ ظá;=VpžhL­Õë ÓÓ±$)Žƒœ3C(^Ô¶ÎXxT/´Z?œ ûí˧gVê‡Ó®__ÿ'ÉA_QÿoERˆ>‹Qz`zTXtRaw profile type iptcxÚ=IÉ €0 ûg FHb£–uH?üú`a*-[>ìšwÙ¶À4t&§ø#F”'šbGÂhò7q=¥çÔJq—Òr|ÕÝ1oàN'JË jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá-*Ù–ùúIDATXÃí˜?hQÇ?—¤Rš!¸5öluh2dí¢xK)Š˜ÁÁÁ¡c—.‚8ˆƒ(..:¸©¥ƒJq(˜Á„„þË úg®$C¼;[ëÝaR¸s94¡wZ‡×Íw{ïq÷ý¼÷û½÷ã=it<× \®ÙLZ»t1å"~ÊJä‹eŽ¢êæV!`È–—1Ïüð>"› üiCÓ©nnqD)¿»$#ÞÌ„£k`€ð4!\EÃàïø¤h†À·f“gÓ3LϽÂ4-!± cw—ù7KTÞ r:™äFîêñ|ÞÛãùÌåÕ ŽãÐr—Þ¢é’$‰(¯U0-Çq~ôµ(®¬q¢§G<ÀWÓÂuÝCý®ëÒlµÄ'¡Ÿ¹(u¬À©ÄI²™´PÃZµV÷S)îNÝ 0ûzu~ág²™´ò_Å!ø²¿Oiu]¨a{ü¨µ:ž<íVÃðràÜÙA&'n 5ÌËä %€x_\øATÝØîæ@p|TUnß(Ô°¡iÁ¦eÿÉ­ç wTúã} ˲ð44Ý?òÌã{w„—ãÙörÜ݆í ˶„®w´¥ÑñÜ»ß<$t˱p#D;¬„°M©{+q†ã{¬²"ðè;ú(­kœkÚ IEND®B`‚nixnote2-2.0.2/images/material-light/notebook-conflict.png000066400000000000000000000217271315604104400235650ustar00rootroot00000000000000‰PNG  IHDR‰ úzTXtRaw profile type exifxÚ­šg’9–„ÿã{hqH³½Á?GD«ØÕ=Ó=C™™! žðçÀìÿûßcþ‡?Ù%kb*5·œ-b‹Íw¾Tûüy>÷ÿçG|ï¹ï×Íç Ï¥Àgx~æý>ß¹ž~½PÞçÝø~Ý”ù¶S߆Þ õìù2ÞA¾ ÿ\ÿˆiï{=~™Îûo¬÷Zz>~ÿ ÆX‰ö‚7~‡Æ¿ôôA(¡ßÏÎïêõ-Þïé¹ò³íÌç×ߌ÷ùí7ÛÙþ^ßMal~È¿Ù轎g´ÝµÐ7¯ýêùÛc]¶_ÿ|±Ý9«ž³ŸÙõ˜±T6ï¤>¦r¿ñ >Šá¾–ù[ø—ø^î߯ßÊ'[vâÏa§qÍyìqÑ-×Ýqû~N7bôÛ>½Ÿ>Ük5ßü øëŽ/¡…eBÅ¿.ûϱ¸Ûo»ýMWéy9žôŽÆoüá¯ùéâ?ùûÙÐ9 qçlý´ãòŠi†!ÏéžÂ!î¼6M×¾÷¯ù7ö‹cL×Ì• v;ž&Fr¿b+\?žK6û¤†+ëmÑwb0.à›]H.;[¼/ÎaÇŠ:#÷!ú\J~9sðMç ôÍ;ÅÝg}òÏe G¤IžŠ‡:Ί1?%Vb¨§¢I)åTRM-õrÌ)ç\²0ª—PbI%—Rji¥×PcM5×Rkmµ7ß–ZnÅ´ÚZëN;MwÞî<Ñûð#Œ8ÒÈ£Œ:Úè“ð™q¦™g™u¶Ù—_a‘þ+¯bV]mõí6¡´ãN;ï²ën»bí„O:ù”SO;ýÓk¯W¿{Íý湿öš{½&Åû\ùå5.—òÑ„œ$ù ùèðx‘h/ŸÙêbôòœ|f›')’Çk.É9ËÉcx0nçÓqŸ¾û广ô›IñoùÍÿ™çŒ\÷ßðœ‘ë^ÏýÑo?xm©îÍë±' eSÀÆ»v_»jÒ>×\nL? =¥6øÉó®uxWg%«› ¦9¸xåËÙ.íÝ×a.§C†—…×ù$Ûü..­¸[Ív¹}O®ŽÜÚnXÙÅdŠk'gw¨Üý½ÏRùBdMq¯•ÆÁ2~òqFÙ}ßk*£ósž™Z9 ci„3®’Έõ”°ÃØÝÕfÎŽ¹x†WhK€ÕOIYßÚÁ猽ôëÔÖw))¬Ðóò#Ù–g/D 9s4àßÝÞ¶ô…1âÉ!ôQs_±â“ÐJQÆ÷½ÎŸüÁŒì13„íÚr'QÊNêÌr¥^ZãúÁG;‡:7Žqø¼îjSœD›ï{î6Cv½…£šèúXýô¶Kc~}’Þµne™Z4ó°Vï¿Ú¹ˆ™]fÐtÁÈvm–¶2rmkQ;öëgÒ@¥¾Ù£Fð<1XVà 'äIqîs„å>¸àk™½šÕFá™F›ÖµM$|Þƒ¯›?e,ÌE7Ó§Ñí5Ws£¦}š/ç³´PêÔ¤˜ø׫fd¢¦{‚{å<;p§yÌ’Æœ`ÔŠQ)X˶~Âì$Ó¼!UüÝ}ƒ.Ò‰ö ¨ŸoUœÚ±&_/ei^ש1Yá†B 8;¦ ±3Þî€ÁaǶ=v\ø¹0ZC|Æh ìùŽ’¡ÌÉ<ž¢ŽO) dž/ØÉ$³Ü,°ÏvÒp²ÑÍ+h/½¥Yõ+àš†¦nï/\ÔRNNißð;âe1â"‘É—dìy5âx‹A®ï øú¼b®W¾ - ½}ü¡µom…= OÛòü‰ùiʃxf¶åÛŠCE3áŠþĹúwÁ¢ŸJê˜m-25 >E¸Á0¹XÚ'hˆo§ø¾†…~¥ó@.Ä{VL^Ń@£FöP ÍP± ühy*'u&¯µ—b{»z‰†åÆs6 €sškTn ™ü ÷“K~ç¦Vúõä&MŒ•ÊMÏÐ#é™Il Ÿz0^³&±÷¬ÔK¸ù€W €«7bù㻨}Ž6C‡‰œÝà3ô‡ÜÑ_‘kGE†$÷àˆPñŠl.®ÑzžîSÉ⹕ì¾N-kµ 'äÜ–ÅϽL8Œ  nqªegiªA6,*Ðrd9 Æâ"¸Gr´Ûºs#|‚ls‘Ê¥žVÄuk˜9ÃM…ðf††‘”èxOlí&ñêÀΓ֕R¶õ"̪¡ŽGÉÛ6|CÿìÍìžfÐÇ~`s·‰® Tã–r;Ú u 2.òŽ ËM‹pVC‘Ât€P,”·\Wž'׊Ùäê`•ÍéŠILiÔ5Ô!öžD¢l…ÑÚ*×µ>õ0,”±¶ÈÌzrgj{‚e,_À£0 ýÍ„øÝq ¥è6‚e`¼AB‹ÑAa§”yÐLx –­‚,=o¨±}üÑ”qÞÂklS^Û¤×6›À¦”XYÇ'#‘MlÜ »î 44÷àdøáÚ&9jXX¤CšýÆ×T…\Ýüq4îÇ1Oà»óßÑÓæ?h„²AÃ6wÜ®§Cî“ DíÑl@ê0‹XwX`ñpyóxŒØ‚µL&Nô:r¹Qµ ;-"DH?*Ä“ýƒ-¸MMpèA³êLé fW˜÷l—*~¹iž»Äîç}ÒÆÊ݉È›hØ>—ÈR#Oö¿“[âÖð48@>[„@a^D YGÑrÈ›<¤Í•þUºÅ¡º)èŒÉ ˆ¶ª÷™'¡ÖFx$J|XÀlÞT¶ ßbwM\ÐIF`™73±À_qØØ :ÐêNu¡ÖcCnŠ>:à{PfÇŒ.›FÍ Òqs:äâÁ©èór—"#ƒŸËF ¯Àrð#Ǻþ±nƺ†Cæ¡õfeÄÏ#G!^"ûÀ7´›j‡å·ZçÛæãËùq*ž¸ŠIC@m8ühþFEòâeb~’*xózåßs'Œ€a\-bõÞGuÀO%ÂqeÉë€rbêFPý]ðÅY5¤N1ÕüQµA¹$æ’Š}DNÃå@ÀƒsšmËL|•³÷®Ô«¼&¿_üŸ¹M²5Šg ˜”)UÍ­Q@Rü6âõYÏçf†™ƒZE~1GwÛYOQŒbÅ1T)v‡¢»ü¬üH½O÷ìVЩéȬÐÙE gH«Ñ"Ûj¬Î0v2?ùU¡î¯ç‚ûÈpó»@pb[ØÎœÀçjFÉRü+Þâš_‚Éü™º¾Ÿý›ßI+êU¶Ø¼BvÀ•;X2BëÝ4-&*±Ì@&E¡zm&á]†Wë?šêT`Q«ŒIhK›Õ¾"«á ­2Ø3á-# W /¸„š!Šhe«êÖEÈ1¤N£<‡æj¯¹ŠÞ{KC¨BÂèªòÌ¢Þÿ!Q¼œ´¤Œ=,Ì ‰/¤ ÔÎrBè6Åψh éÓÀºË· ¢·ë™Ø~Óx?~šÇUé›( vŒI* i(!;rÑ›™O-y¡Ô÷2 ¤Š’€Éâ±{j^kP–´¢Ehæõʘ·‰Ê£nîCÂJ1òËŽ^ôq>¼Õ£¡”pöþŠùF¥7áé d„6UžX+otšÙ¶¡žˆ-æ’8à/=^u¶Wyp±ï'Ÿ.TǛӵ“í1/z‚:tð#ißkd"y JCŒâK¶^æ³qÀRƒUà-bÁMKc­—çn6x sji¨ä M#Áµ˜„Æ\±Ë2µ¨d‡r ólh Sî‚‘t®¤¨S6«hÝ:•ß:K³°‚ú)"Ÿ¦{×lÆËs£š z‰ecA&¯U~_PðyP—šÂªOÔ<É/åæðÅÏÒ¢$ÆÂðp24Y6kƒèÁäUûH "ü\B•ª-e ¯a‹KK‡M˜C°û‘mé)dÓ Ü Â‰%ñÀ?DoþK(ÒLG¯ìž»wÛ!Ðé.=ãî7ؑżQµdCê=kÕ½0 )(Ù·(ÃZf;-é¬ÅX(H¹æÝºVÒ²Vž¨ê¤×ZŠ.$¦ó.”]ÂúÂ\5;n4m B®gù˜Š–µ_R2Z Pý ¡"ò±à^i]±CRcÆÙLX“TÏ%ŠoŸu½‹¦Np"‚†Ï;‘×±Áº/0„NÒAþ >1Ä1ˆƒ¾Ôhu¤$câÝ3öCCS°d0e¦Þâä¤TÊ'Œ+8¨f¾ˆC•:fÎ÷•-yB|„â 9ïƒ]ÕÆ"í‘äŠP¢V-"H‰èÀ3²i¥æÎʸAÝ{‹c3j¯3­— ýÊhԮݽ¤ ø…Õò⤈¢·Þ¤ÉZUëG¤Õjvd äÙýBšUzâuo¼«y5:« pñ —‹V±^ΧÐþû£ehø2T¡ÇÌø×Õ_úñÓû%Sɼ\*Wt ÙåÇVÏÊÔפV… ¦`| 1Kniݸ[ÜÙÀ„ *Æ_šÚyHˆƒ­- â, +“gÈ TŸÍúi×Ûw™¥ûŠ’È^ÔY‹ëHËÀqĈ êÅÕÊÈ{Hˆxí/<Èî¶¿n4œ¦$%lI!ÊŽ@J Ö¢yàäJèÞ•‚ýY¬Vë®àjaCýÚ³ 4æ  š‘™?µÓžU@¨|¯Í‰Qm´@M7ÚCɶɧˆúÏJûOáì×§ùà *È’læe—Ù†ºc–Ù£b`|7‰™Œ(D÷”I-=ÚS"k@þìÁõ&3•íH‡ô,¥ØëpÕé¸<¿«žíh š‘äósä2’+ekÙDéé†A|3ˆƒ?ÚˆP [˜Pº›åÃ>] å9Q—˜cFt&Ú 0 ”(å8Gk ð7êàqP§QÄÔh.(víÙ‡P“]ó\ [ô|4b&K®˜f':h¯uk,Àöh£¥dìS+xˆïÔK™½Í>àü %’ÊeM{ÍJp1Œk¤=ýŠš¦6|çÏâÁ ü.Z9¨È*?•!¦a….Dk”H3blìZ`%äð93Ÿ,8ÒV+ÍC’Ž&¼qxuãÌÛÈ]­SnáH›¸ŽKjp¤rÙÅUM™à‡Èi5‡º^¡Ú@”Ô3ÿÖûöi¾i½Ké%¡nË›"ŽUS2@lð Ü ¸%ŸÁôöËüB•ö.˜£àZ ÂUÀ©ÕŒO«¯Ól™µô@¨*¬]½*’ªpÏâ¡ú;ô(jpˆžÚééÐO8P¶þŠ «üÎ[îòuhyàK5¥œ g€ò›W3xá´Kù¦ŠPcÄ(ZœÖ ŠÌ„‰`{ª¼ÃpqÄtÏ>x¢}¼Zf×—'ñh{ó¹D+jŠF‚…²}‘è¼å2 ~!U~LZ¯$|e\ݤ†Âì™tîËÐ_˜!ÏÞaÁøÆ¥ú.F*®@XþÑσ Ç'…°åÐFŠ<-åÒ ÖÉhK4Dü´ Šs‚« ÖÁ+Ž!ÖR Å^4Ë ä´U´"ë¬Vª™èéŠyñ¥6†PÃõxB܉™¸²¸ÔŠv÷êPÀ5Tä™éµ”HÒ¦ÏnŽãÙº§ Ü«swŸv‘kß6"ÿ¬t›Úý¥ˆ¼‹èpøÇGçÆ–œ$°£.ÀPÌçÏý÷®ô÷¯8Ú‹%î÷  NÖ<[M10ÏŠa¾edÓ;!;å7ÁzÒÝ Z:ÅMsHйÓfܤö‚V…J)É@>)ƒz–%Öæãâ­à}—¿Ä))0‘’­µ”Éãæ†U•ÔRH†Œæ*Á\²‡§jEyh#âL²S[¾K©Ah‰¦êCôe`΢‘õ’4Õe8&J’Re—–›§Ö;ÅFŽf6«¢§hËÅλ@ì:tûRëy(…e´A°Íâî~°3°Û ަ°ö"¬² Mîd¢¾ÙµÃ˜p·PÞœ»@•Pn“ ‰UYŽXCüéœÌ„7C’1ÖíâüÇg˜Ø]›À«š¡¢(kwiIÂ8`„‚Ïkã¬Ä/ñ×(•C ”k *a¦^Ͳtp@ˆ¾îq‡î|Ò‹ù€k‘XÅk0§¶'JTËÌ6 É¢à $Xè²L† Á­äéÚ@ ˆNìA5!S¸ûk ¾·|éØÌ,[<Ú7× ¾ÏÃñÙ’¶ÃcïQ€mî–´¶¿òÖa€CB¶ [H_”¿6ŒoÙ®¢uS«†Q‘9 VoÄ"#¢œdè VnɇÿL÷Hó0Å‹!B00˵Ää,µX}AƒÕyk•}¹«"W[í.áß–TMn[ jQå™Ïb°Ú2”Ïp2Ì*Šä'Ïí@§²Kªyçíýn2üÖyzÀQD6;oèšÈ`@ O!9û![ÎÝj Ó ®MMÕÊ ý˜\5±¢öu^ëë¼¾Ûèç1íy4¤ñq¶b:Dû7¿w›ëŸŒp ã7ãühšÇœç‹i~#–1ßM£³ \ƒ n*dÇB½µ|ïÜjV2üÁõ‰Òä`ŠȺH…çUIýðXH…¡ð~I+|’ ì5óçA #5‰EÂyez™CÇ$´ßÄէ2é/)ÑÜŽrôì!WmÆÅÛ”Æu׸Ý#¶éƒ_# ‹8 Õg¬Æ´6¨Wwy yU±»Áœ}Ÿ’»LþûóÕI=h-̨«©Ã!Q£|²ÎˆÁf¥öˆâOË»Pîñ"ªƒƒê@[5~>§~ŒÏ: =Út”–N*C3 ,ß“Dãž>#Âîv<œ)‰‹ví›¶8¡ò Êí³9öžYíëÉÞ-À?¸ -²mFÌB`Clèð–¶žÞñAéèÌšÿô ×÷O££0ñL&žAn$cÜÓ3hƒ;™}O¨6«ÉÔw2ǵ{ @›¡'C´žÉ@£V«âgM¦sGeÚg…zÕ³Ë:@òë@Òaš¦clŸ6¼G¨¸Ñ*ïA®ž©›.‰h¬ìuœã=²@û´òJánÅßÕñ(…®íb0:Â$­NŸ6më;œË #ôA¢}±šj‚™š£åô{ØíYÔ˜)Ýcm0Ë^F:3Mâh™Aô=jòyûËËw/ûð¶’›T×F”¸àsLh?+ÜŒ|‹µ¤g×xIôÖv·Zµ1/5¸Àß>¥õeÿõ܃òÃ|Ç+Ïq<÷ì =§Ö²Ë÷4âCú¡:¾öœ™Òò« ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá¥Dõ7zIDAT8Ë••ßK“QÇ?ïq›Îù‹µ¤(ŠaLó"û!ÔMDÂBè.V^좠¬› #I%A/´ð&ÁÁ{åMàóÂ?@20ÄU*5“rZms móݺè,uïfó{{Îù<ç9Ïó}ŽByN3ÐÔµ@‰\ ÓÀ0b÷¨ÁÔ³JXМ`wù€v`ØîQ5ÐëpæO€ ‡ì54Ù=êz*°hÕ€¹ø&Ç®^¦ô€•À²Ÿ÷£ã:J±"8¢ü‹ë\vª¶¥Ù‚„ukôŸ9I‘ÍÆòü<½/Gu@ðÔ˜O  ˜ž Y€ŽdšQYåb;·¶zÎ !«©+@8ò‹W¯Ç …Ö²}Ë Ài­¡Óó!7KþU¬e¥{¨õBö™NKþUrMFV[­f4È5wÖŠmM»CÖòRº=äNãuEÁd4ÒÜt‹ÇîS`ÎË,1dZ‰mj$â õW(//£° €šê*&ßL¡iñŒWÒN:ý ­ÑÙ7€÷ÃGÎÕý ›zKWÿ Ñh&^XHo¦Ud}µðV¼`0D4Ûí §…4ºN¹&#ÍwoSwú3³^>ù|\ºx{®›EÉœÀˆ4ú²îçx¥™Y/½ýtõ à[\¤¦ºŠâ¢Ât° àV¤õ\À €wñ½ÚoªmGùê_%ŽÈ ÌyyÌù¾ÐcÈÇ¢ˆ$°ÍîQÛ“Uήƒ"‡Ú¸ B‚ØÂg,€%™âÊw*…Ê`ßVêc@Oê´1ƒÒè{ÑpÃîQ$Û9Ï\@ð- Ph®%ai'¶¼màüÏà¶{Ô…Ô³9†ÐxIEND®B`‚nixnote2-2.0.2/images/material-light/notebookSmall.png000066400000000000000000000211361315604104400227510ustar00rootroot00000000000000‰PNG  IHDR‰ äzTXtRaw profile type exifxÚ­šg–»’„ÿc³¸„Yì9o³üù¨f[éJwžxÔ$‹U0i""˜õ¿ÿÙæø—b(&J.©¦dùk¬¾ñ¡Øûï¾;Ïßû%>¿¹Ï×ÍëÏ¥À{¸_Ózîo\—÷òs¿ëŸ¯›<žvÊÓÐóÃ[ƒA{ö|èÏ Ÿ†‚¿×ßbêó\‹¦óüïó¹&÷íë÷˜1ÆÚ Þø*ÿåöAÈ¡÷Æ÷âõS<Ÿ…¿Â϶3¯_Œ÷úôÅv¶=×ÃgS›žÒ=×ül»c¡O^{ïùÓ °Øÿ>ØnïYö^wv-&,•Ì3©·©œO܈âµFâ•ù/|ÎçUy¦8ðØ´v;Œ«Î»`·‹nºæ¶[ç}¸Á£_>óîýðá\+!ûêG¸.àå¶Ï¡†iBÁ¿.û×XÜé·žþ“œv:îôŽÆO|{™Ÿ.þ›×«¡½5ijåe+Æå5¦†zNÿrqû±©ûž—ù7öƒc”cæÂ›í·‰.î=¶Âñsà>±ÑØ›.ϧLDßÂ`\À6¹ .9›½ÏÎaÇ‚#÷!úŽœˆŸÎl|BÂ9d}óLvç^/þ^Zp„„Dò<ÔpVŒBüäXˆ¡&A¢‘$YŠTi)¤˜$¥”“bTË!Ç,9åœK®¹•Pb‘’J.¥ÔÒª¯“šj6µÔZ[£ÓFÓ§w´Ö}=vé©ç^zím>#iäQFmú&é?ÓÌf–Yg[nJ+.YiåUV]mk;ì¸e§wÙu·—ׯ~öšûâ¹ß{Í=^SÅs_~÷—s~kÂ)œˆú ùèðxVÐ^}f‹‹Ñ«çÔg¶z’B<^s¢Î™N=†ãr^¶{ùîÝs¿õ›‘øW~ó¿òœQ×ý7¾K¹Ä }4·Ze¬ÕàåvHËǹ{ÝcfðN±fiH 4yžá’Ò‰¹H¨-§>{ £$;aIáøbÃnJ2úÕITsXYî²Y̲b®çæÒÚÀ@b×û\aúöX©{†…Ukí$mׇ¤1P"wÐèÍÜS#[dU—Bó³¥nKã.„ ²¬óÄEÙǺ̰"¤G û„üKdÂÄšRf ­ºYË1X2ÿ'cÞwó«¾¼çÒr!v˜°ÌöšÇ$¨áÚ0ñD-«d悃A‹šÂJsÄZæØ‹ÛÖA½bä‘€“øFç=»ŒˆðSòupX½%²š‚ø¾í q½@?àÑz)˜gæˆYW3s.žåèѱ:!:#”Mµ‰n, Æì4Ÿ<ìAáíÉ´Î/Xyo4¤<¹“n¶ÇÔ ’;Á£ œxp€pFj+ A ÷·ËH?O•šW«ÞŽÑ%P3"°“ÜTüï;ÕÒ7Fm®UŒ˜'ùå«Ýc 4d ‰¸ L·Íõä´þ% W¯{û.PNfÔ€-qkORö»·sç2̯짨&þòÀÒ5ÙQÔÉç6bjLÙ`•›ü@ ˜Ä…^“Ô(ÛhL»A,k+˜§"aÓÓJ™$·°\Ž@ø•š Bªñth€iK!%Õ:§†çI½1Ë1ód‘â$(ì·аOª¹:ÐtŒíaÏã—ŽáVJ݃E3ÄL6«M‚O$Ùƒq)¹ ¯í®-N}™L&ÐP>¬6-Ï.j ý…Nó‡G5€$a 3ðáK³æs»O³v·Ôxe|·ÊTËðÉÚpóy鉯­ÎµÌ=•yÒ»Bœ'I©p`ü¢Äº²Df.© žÜì!5LÖë4¸LG‘ !²)Œ£p˜ñ}Þ‡hOÍԮ߽fªO‰ÀPtÉѧ¹tX7À܈T:˜žf+Ñïm´ö)Ý·X]å;BÕH¤ ÜnÉ~XgæÚŽÑ¶ÀD9Ï “gB#5R^\™±¦5|o^)¼„Ô!ñ) ØèÝTªL­Ë‘KðZPô¨àP:ÝÊIÂ|R·äÚ5ʨÉv6o2S)>¶a29Pä„%)ãÉ#(V1Î=¿ f$—š tôhWÝÉŒ‰¬@‘“)z‹šë|sO ŠœXOÆ€k-ÒÈ®åxÝ ›#´µ[C9B@ÜLGœdæÐd'ÿá$´YY£á«^Z‚ÜWF=Mä1² 7k+fž`­J>tðk…6ц“ ƒ0—¸IãLL5á¶Cé,þEù,>›`'FB•Rk¶V’‚<îh>7ú%Cè1\|Z¨…^ܚΡŪÁÏk…™WE)tÜ«<1”AáüÔTF¡»ØvÖÇÁ³ Ùª+ÏÓF@À¤ ¨3DT*€{D‹¶7ÍrmD,H@—p›[ @ªg"Öñ–‘‹Q5 l&Ïœ©N{-9í¦Ê‡ª­qÐÁ¡R§¥«Œ´SWý¼à3QU°aä,¾Àïp*Í4IOhbÍ¥°\‰¥Y2¾üp­{ƒVÉø“)xm0PèJë]ur¤“k?]¤ &T¡bÜQÓªL'"½áÕêñ‡k° Ax;5ȶ&qÛZå ¢¨ì™¨&…,bËéý™ÂÛõî5>TðŒDKËŸq˜L.#uË(‹°µËSLd¼ü °†)–¥f)5 ­°çÑÔ?T0€Áð9ãYéá¼åT!äqñ›f’ èŽd<´®þA1Ì3EöAî«[œ·æ—t÷ß$y YÛ*7íƒsn‰ŒctÙÒ+âwqN‘õI Ŧt2ˆÛO‚ðhæF~, "Ü.Tâ¨|ȳ”¿Òùm#gg¤ü®qïßÝBFp·0¶ÁøÙË0mp a%¤i¶ö@¥(é§D©)mgqÙŒqZ@0Ø芮…¢7²²¹€¢WG` Ïü´²;Ú‚VT1£^¨2ÀI™Œ¢™Ü¥÷˜¡þ?• üߺ4’¢óµrzyúë;¬D*•¼´&#i3j'ì¿›‚?;2!?yºgÐ5CÂ}YäB†co„¯DAJ¿!Îó°bô ´bˆ–B²=?àñJì€ *5§ìFkêbº ¨‰nÂÉhT#í‘ù2üA¯î×\Uµ½ò!x á4MÅMÄõš( ˆ£ØJGôПB2hñ§h"‡T7.0@H5.™Åü¨aÐY+LˆŸ øBe°=΄QÉXƒœ.¥^N‡8x Åã~@¦:éZE ·œÉ{(Ûƒ”l(`À3Ì0c¥h-1úSÇŒø&x¾¾g…hÀ™°™ßz‰¬5yÛH–p¥“.Àþ¢¡çݼ.g¤ÃÄ D.?L…´L@2ÀØFž#ùÁ-"ƒ‚ å«>ƒ9j—R£Jƒ‘ùvµÌJ¶ ‡”1]¥ª%6puþXTA!8M÷ 2#žeL)h5Šø9N×Û ðLÕ- MDN’®JþÖPÿèi]môö|‡âjqµ¡Pd;å1âvjUùÔ¶g}ìÑ÷zĶoô>x^ôH4fx¦ÀÈž˜Ô튿+$¢è;лÊ-¤ó¯Þ°sóhIê4m²ÚŸ#P÷ªø&PÝ­;5àH5leîðÚ­È|Ó{¡ÿ›æÌmïšCª… «~)NS1•[Œ5ÔŽNt7³ÕI÷Çø¡™¸; À¾7FQ`§†R& Ýu’V‹àáºNïÇ€Rì­=‹9ƒ¢øj¿üQ®…¡¹3¥'1ÞóÂ|KŒô7‰ñžæ/ƒÊw¨}3ÀÐÈ€¿' µ{JFWѳHâÁu´ Ô7aù#K®ˆTÚ6ø‹_¨‹‚ƒšçNYÀ€e&Q"+¹ý~ñíêØE¼§Õ(Õ: e§xùåš9g8üò'üê~ó·üш¨o&?ªÁVµcR] $ªÑª$j&OŸI£ç÷‚àÍÀ° W‚Ó«êT @µ+õk¿ý­î"I’.o¨'ot¹ø¨PÉCÏæáç)» õ¾Tº»Á¦4è1ô¿’ª. |[Ø4¿XéüYõEU!ÕͯÀS—DfÑúnaŽú,zL?I]!§4R)H‰–íЩը•\¬cAÈ(RVtuÀöè©"_.ùTO v]è9Ý?Ë…˜Ñ+Œ€Æ›yl„ÂdÀ3‰ÛÛ7ƒ×¾6Sz°+%9 (r˜ ‰ÄÎýØ õø¶>Þ;1ß{)Ð÷Ž£{M{‡14§7uî~ò­óC?~ ðÌQ9Q°}ý§Á,ïݘú¡Ô?&zÁä£(ñ)妖œ_º.gjúÙw;ÔêVËüwk%—/Ó(Ó@ñºØ'´£[À«â=,ºd@ýë%F)ôŽHCÊn)Š<ÜA‚D³ö_æ€9Iàþ$ ~Ÿæ“@m'm‚êJ×ûÝP˜ »¦B”/-³¨Éa`¢¢‡•Á·Ño}!PPj‘¿Rv} îÕ™0¹S%§Ëßjì»þÄ—EIÌý,#Ágד«P$à48”eÁþ¢Kè…æ 5ÝzbZá]w!ê}þm eü›¦Œ–šÿ¦Œë¿Ñ”¹3üÿ7eÞŒõïšš-~ÑÍ`à\‚Æ—4”>ZÑý3îÛt™º|ĽmÉN÷…tCcÆtßNÕø ÜÍW‰ÝŽ’ð­$Ì»Äæý-ý¦&Fۈĩ›^èYRaöhºÖïBgÍJ–ª XÜq6˜v¹k>P0kÓ-Üå>q*Ntš­›OËÔ úw%ä[™L,@Ť¨^ Õžõ ê´èÌÛ ;Í×@Ò=‹µ§§?ì(R‹¼:ªW‚ŸŽn7ÚËéƒ~ÿ¡󥛨ßOæó\Ì{7”ÀºñÝSM«Z-oßêR 3ZsT‘›‚…fœ?ºâ ò8ÊYЀ­u—#R=}¨æ?ó§¶ýÇbÞüSUÿ§Å¼¹Õ¼Qsº¨Ú[UÆhÎOÝO wf@·«Ö­º`¡ût•ê'Ü­‡Š&3ÔþšCÑ e*!Ütµ¸gÿÃrÝ×kc(U´ÍÝSüüûñËþéª>‡FŒßŸ2ÿî±ïO™÷Ø÷§þÝÔʤöIêŠÐnñH3ÖûYc¶Ç#]=’vÇÖÍO ¤è"G A×!sooœ?'5¹èáK´š/¸6×Üï—òXgË|øý¶¸¸²9«‹ïK?þµípPèl;¼o:PÐèr B|MUó {ÂxN7¹êÞÛ¶¬‹Ÿ‹-éÈIX¼éÂ[w^‚À˜@HÑ–=˜mËÒyÒ(éa+Ñ·õºnÏUò—ºAWîuù"ë’…l§>9‹Í“gÙØT¬UW˜º$Ûj×ï³"<©ÊT(Cún€ŒÓÎ׃¯•èÁdï~î‚r™¼hëá׌2|ùý¤Æî«hŸWÒ±®kkëWUÙõô†ô›Øƒ¼(câöTÞÄ·ëutã`¾÷go¦¼|³˜20¢u+²5Ýò)È{ùTõøÆY­þõbõj¢E]3~݈(`yà& õs˜ ¼- Ó2 ‹Ú¨£GIe=ø¤G49ô¸ÍA€dûÅ€Í`Yx[ŸJÉäŒn¤Úzöè*=¥5î)ËDíxv?ÞBaßC—8áYÇj®ˆÑe“z2¯‹Ù@é‰H!øâÖ o’žµtn½‡ÚÐæ¾»Úüa°äz¶„î\Jç·óšwG×èqËë$ÂݬûbãVª0–åýdüº78ôb»Éè}P!SÌ3Õ;Ñs¨t]pÕyJ—Lšå3 Sl¯z,QjNk9WÈ]r¤¬Þän[ÓÈ„ÝH×»SϪÏ~¥–ѯh(¯Í^Æ:«ù?Wäñ2 #‚Û`zTXtRaw profile type iptcxÚ=‰Í €PƒïLá@1×.Þ<¸lH´_ÒôG®û)ÙFá‚ #Zƒü²¶RÇbL8†5îÈyŠÏÉ\vñþªª¼2ãpýïà jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá5çöm[IDAT8Ë•ËkQÆwr­%iPƒ6­"“Ý9A\ˆË‚… ÜÄnº¨H¥ºlq§‚"•É¢"¥ BôOPêÂ@u(‚T’551 Ó$nîH2“ ©ßîœ;ç›óúîtA$ŸÎ ŒØ>Y`ÅÔª3Vt!›ÒÀ¼Qæ€%S7Z.ÂH>©³@  ?4ÇÀS7êN»À=aµÄàºÅµØG†ÙøUäEá‹©Шí³Í§À´©MÙVf ƒë…?œKŸ"ŠòùÇ^e^»sóAc6ÈîÀð045€´]¦ØmõWl„Õ1‹T$Ÿ ijš®ü®Ty“}K¹¼Ýg;&¥Z æ2|+nbHHµgˆŸäâ…DϨZm‡ô£gÝŽâR-mFÃÜŽÇ{VªÕ^G#²Ûr/–øËyfØB*9o÷æ kä kü¶¤ÒfG}'Žrkê†gäÃùçä©8Ý«R ýJ»w(à'züà&ÌJ`E }Üöþ,o{öÐþư(”ô./Íÿ©Ž?Së«aåÛA¬Ã>Ûœ1uãTÆp¸i KQbÇ[‚Í# f›ËÀçm³¸¯„.ö0Ùeຩe€¿P÷Ù4pøÚQ ˜.ÛdôÊ$’O†€É.OÀ°ª6cÑÔ gì_æÅ§›ÛVÌIEND®B`‚nixnote2-2.0.2/images/material-light/notebook_old.png000066400000000000000000000213031315604104400226120ustar00rootroot00000000000000‰PNG  IHDR‰ ]zTXtRaw profile type exifxÚíšYr世Dÿ±Š^1ËÁhövÐËïã ¥TRVfÕûì SFƒÄpw¿Ìúßÿló?üK)8b.©¦tñ/ÔP]ãC¹î÷»½ÂùÿþžßìçëæýÇ%Ï»¿¿¦õÜ߸_äç~Û?_7y<í”§¡ç‡·½zv|èÏ Ÿ†¼»¯¿ ÄÔç¹>Lçùëó¹ï·¯ßCÆ3ÒžwÆ-_ù‹w/žøìÛyo|/NŸÂùÏuÿ½íÌûÇ/Æ{ÿôÅvW{®ûϦ0WznH_lô\·ñ{Û }òÚ«çO?ÌaËõñßÛí=ËÞëž] K%óLêm*ç7â£p[#ñÊüE>çóª¼ Sxl^ök[­³þÚ6Øi›Ýv÷aC n¹Ì»sÃùs­øìªþv/»]öÕOã þøÍsٽŞ~ëéO“œ×´Üé,YžøËË|wñŸ¼ÞÚ[!níUÞmŸœbšaÈsúŸ»pˆÝMã±ïy™qs}p¬Çƒñ˜¹0Ávõ»‰í+¶üñ³ç¾xsÝ©aó|ÀDôŒõxàJÖG›ì•ËÖbÇ‚#w>¸ŽlŒnZ³ñ÷ ç ôÍ3Ùž{]t÷e GDŸHž‚‡Î !?9b¨Eƒ‰1¦˜c‰5¶äSH1¥”“0ªeŸCŽ9åœK®¹_B‰%•\J©¥UW=kªÙÔRkmNM7žnÜÑZwÝ÷ÐcO=÷ÒkoƒðaÄ‘FeÔѦ›~’þ3Ílf™u¶e¡´ÂŠ+­¼Êª«mbmûvÜiç]vÝíÝkW?{Í~ñܯ½f¯ÉcáÜ—_^ãrÎoMXÁI”Ïð˜ gy€€vòÙUlNž“Ï®êHŠèðšrδò ˺¸í»ï^žû¥ßL ä7÷“çŒ\÷ßðœ‘ëÏýÕoßxmŠ÷ÆñØ…²éå7ÀÆ «4Wš8é/ï«d0s7"óæÞ{¨mF2”ÁTmŒkáµ+wW¡[ÝûjÃG:¦÷éùz­½Î;æÓ_ÃÅ\G ÍÛœàŸ\6`SFKÕ‡ÜF´!Z¦q‰3Ï—ðïæþ`·¯´2º®_3õ¡z8céØGïƒ[³¹½ßÑŽùà&ÆY—fŠA×ø÷H¸ÝúªÙ¯2[ ³å9|HÓØ3a9Æìˆã2ŠÅÁ)G͘ èT‰®”åÌ*\"°1\-j¢3tßX#7 t,Ž[^¶hƒ—ÝÆ§åÂܽî1sQ¹–jŽ0GbtÌŽ+¹ñ°øÆâw’00¢æìÁa•šæ‰`‘+÷†öô}(ko±$GÿÜÖ®t rÅÂ¥µ5÷¹m3gÆèú¡Ãi»¤½bÅJ}1&ßå((rÆAXso&|¯Ší‰Éév(]Œ: AJ?”p£sdz&hhlˆ*G§„sI-­]Á@½ù•ò"´>ðPN&;æXéjçóõOÞÍýKÀúØ‚dm%3I,0mêqÍKg>ÖÍkGßgu$³#ûg/ÕÛÇMfHø(2õ˜mòûš@s•œûêÛ{bªß¾Š ÉÐÒô‘¿‘õŽ CowXÔª°PPxÂË8?kê.g°K°ÚàË•˜€Ï¥*4®MhÔm„ÜJ¢ÐaD¹p{ uöx[ ×±ÚË •#JÕ8°ÁI˜¶Ì¸Ü1Å"¯6ji?Y”N®­ã{¾”µIS ÔÝú d¬¡o—²¾OðOÇ|œ­ÈWW±ª@WšÊÖJé»ÏÝ,ø‹$ì ‚ Û]V“Ív—i˜=ˆŒ£¯ŠL¢—ðÜà:‘ ŠdžœÆk–vKO㌴û¶‡úÔŽÔBœÎí:QKÉù$ ÑJÿW?)QvÆì4?iu¤É#ÖÎÕ”vZF¡ɽÒWˆnLÉb= 'l:aŒcõ“‹uÑ|ÙçWËpàCÎrieëN}d(ÒîLIÏ óҧЇìéuÊ/aPÀœ*VÏ›Á€ðÛÛÁň玥WJݹި”¶´ZdTÀ½v~A{»Â¹y¶„ÐZÇÌ%a½VÍø%&;1‘õhIÔGlJ`s»Ý$Q69¥²Õ¤Z¤½\㄃HhbpÕ†LL]ï­K|õ¶o¦NÂ3÷mB#äöœX¶Òôš)x~D„î<5/€û\’h9¤xg<¸ÊæŠJȼu“-X=1Tq+_«PŒÇ/ä¸"ü'Ñ« :N{âÚª[ N¢»¬Rô 2mæ'oJR¶ÛŬ $I-@ÝçùM ړÇÇaKÔޙȞ(}ÊÛÞ¿)潆Á¤-£BðlÆ,}XðIPG2°s}¯ KÀ‚‰á9Œ¶k³¶# \êÉ­Go7CõLü9Lr}€,á,ø–2àß„µ fæ$ôbºdL¨kUpJK‹[z^ËL!”«}²ºùqák·P“ Ó5©Ó€!ŒÐÏ<‰Q7ÐÇ÷Û”„SU¯Epfææƒ¢”YŒAåL¨ÿbžL#ZO4­!$¨õH¼ð𸄡fª¨Ó%/5ˆ”9IÔ‘keÚ‘ü#F0°ëñMt}ÊäY§kÉ›^P­-"½gŒ!²vkwRÐ:ZÈÅ5ëÊNŽ,¹Û‚„WF9;T tDq7\CK2FV‘ØžeS¢O.^M‰!‹<(bõ$ÎŽ­ƒ6ŠõJÈRrÀ¡’{Ç÷6»4q°˜*åHfK»åÓ5s_ì„7|«€|„ ömèjt _z¬TöÃ>öëUs.§$øâöý°?l¦lóËf#Ÿ`Ó^í½‘;P~9¿7Ä»é¢D ¹“öHQ‰‰ iq€ –2é‚pPfø1wX(ØÖtŒJ}r&Œ÷:D²Ü/ èŠÚÚ®ïˆòÎ`’²yQ—Á¢†ŠGœ_TÀ¿CÙ#ƒ“ÛD L‡Ì·í}Wä°_ô35mHá̇)‚€Id¹$.!ÔõX<ï¹]€ÏeSͶa–¼T›Ea¹¼¤¢lº&Ud8c¾¯d?½cnÊÞ^âÆEXÒ–B}Á´šKS@"¢)Páq?Ç™ó𷬲p¸×ücä ˆ“0d· €0»"t:¹3$Õ´•âÞb£K0I‘ˆŒ¦à}áµD^<Šz3I1k©"]’ˆ~ŸŽL½@@ž¦nëƒN4Ž"ÝgP¤Ž]CÔÕAÖ±I.(·¤$¿Ñ«–2E¡%çoé¬ët¼°nÜw×ý=¹º!p– ¾h½Ä¢ ÜJk®C!ïÉx T‰7T3ž¢j‰Ôn+©,Cà ìH¡®áç ‹Š‡¹Öã~o*èí*6:Ô9bfjñ„aìN•MÊDJ¾±U 7P#7€@Ù¿[ž¹2?ùŸ¢æðË ~ÊDÙ¥ Ið¶Ù'A‡j•/Ó0H@ge{Ž{U*ÆÞi‡DO;—pÁh0Õ²*xµ_¦ K¢@H9º´brVÌèwñÛNO¾¼xb™%pGJùOBܸ·Vp§© /YU‚=@Š3YäÌ}Ã-òb”ÇK 2íüB*,4<·EK ®å”=Q ™šŒfD vIDúÞ7ƒ¨¢/*d‰a«ÑÔz¿wE’áÖ]UeР¹@ªg ªÜÒv¯ÄÀåwX:@Èjqaߣ›ö^U’—(k­9C´výÛÍ[‹ï ¢£‘ÇN»$ˆ#Á»ú`.þLÊI÷/÷’‡ZpFk<Ⱥ÷†<éJɵ:’„Œ‰Ý‡“ô¢RÈ |GV·M±‘Ÿ'ݺ»«$•UM˜ €U—{adȯdé~°‰Ö@2ò,‘4£Ù/ ûÓ{´ŸY/¹C‹F˜Xh‡Ñ+Œ%–ÒÒêîH‹­´UPY!%]{T8VíZEøb]ÒÎìN›‘ª IxüDZ[ÿ–°uJ·ˆA]ª ¡êI4O2Ðë}Í|¼˜¨âIäO‚5‹5iµÊží»kÓ ÎýæOøé~ó§|w?úxjDZ AÁÔ…cçH8`6 (Sé?“žÈeM8¦8ÆçÍ¢½S=õ dPùÔ+ úè‚í¹‘ªBj¶~ŒLžrtmZ”Ä©ÃÂu£¯9ð‹ëßi EÓd- -˘ï•ÉAòËõZóç_ŠëƒÞâçÐ纫9² $UšÜ)Ò£Ôk‚´ ƒÒ©&2ÅUˆÃ3ÿ•* ¢$r`4ÐËP.ˆ«Q­pøn!7äâi¢ Ô—øj"máËß`yÕ$ù·és“[KÅ@E˜Ø¼ÂÁ„ú¿jȦ ÀµZ´  Dévydõ‘{yÜÅû³òúÞùÚO§,¢æŠSëÓÇŒW·”Ä7ûgø¢µ÷:­ÿБù¦§XK†â¨J]×M¯ñþ!ûêÈ|דZb(ÔÂΔ ˜k¨2%¿c Å&-Ï|êœ8ºK”,‘xº¤Aºì-6ܳ¬B$4¢D¥¬jj²Û$êQ߆æ› Âb¢ŒZ)ý*eíº—z&‡Þ]}F­'PÌ'…’ŽBùGÅ|£P~(È“H "þ|¯ò4Štmsû¾!Om£“Üà‰Ð9Æ7êè5ÏB1Nå”"ýzš\cß´êÐ÷òR±·N´ësäª>˜ñ¯û½‚ZiòZ íþñš ÆþÍÖ€BRP+èˆSV'p§ÿÿ†þ ¡TÍr”x9Ìé}ŒPC÷0ñš ™jû¬½¢WÑ ~ׯL•r¯†x)n„‡ÑG?Éñy‚=þf°›ß“ã¿TãþÃF-S-ØpEâaµ–c˜¢;RV ; „õÔàYlç{¹Ù.¤‡íœé+2úY.‚ßJtø[{[ J«ÕT€W÷Ôº´Ó[À4–â%k^… rÝëAñ.ô®³ò߿ۿéÆ|é‡V?t£„O}|]ùõbîn´|CG3›¯½|œ‹ùy2ç¨d­ðZJäËõ–Ð5RW ÓVBùûA 6eM7 ᨭOaz/ñ¶GßJ™$ê¿ÿXü%{¢ÍUó±õK´™¿7ºåçµ':.ô| ‰Ú9©ÚBí¢šB@®›J'hsßÊv””’hGií$‚­j) ª2$B³[_×xÍ÷—Ç ¼C7ÒîןUæüõÚ0ãxè÷øé~ó§ü—GT&,žT«ýò½™¦]a4á½¥![+u6mÐ4åö”¼õþº£ìN”»Ššª¢bÕéŠj¾_sÊgÍéú~ÍéÃÒÒ®ãÙ·0?l\<+–×ð÷Šå½±¹ý;þt€]•9µ3ˆ e{ªÊ¡¡1^ç">­XþE6w„!TÞt–‰rrö¹iÅJÈŽ¡­…\9_Î"I‘Öú®ó"ç˜,0ºúJT°q´Î¢EúpsBŒRÁ´6OI¶£öªC&Ü÷ØsÏ×[üiÈÃDsH¶×¾Æ :jZ3®õ,†3ºœ®?n…FÌ¿jzHSðÅæ Ÿ ëî8Ò†°Ö¾€0Jô«Ï&vœýÃêd D ‚õMûAæ šlƒj¡0&ˆ—B¿‹¡–ýkMë Â]º<‹×w(ÄWáE-ò[qŒµ› ÑŠ`®÷FoÑ«\S ¶˜³f׳˜wD7 äjƒ€ËS/gnGID„30ˆ gáÚ4ƒ2K‹Ø 2ìŒ]O•Þ<Ó.†åµ?µ~K{T9h”vË„ë`©û)é.-tî9>O©Ï©‡Œ g³™8M:ôp݇¦C Ùýv:Å8JQ9¼eú”÷)•éÏ)•G¤öû´ Jˆ¢ï%#Jçl,ËhÁ`ôp³“Ë$%ÀòѺ˜j‹ïVÏ<ËwÃ?}&ßÐZ¾ûû(bÌ=Ç.!þ³Eó½Ì©¥1DƒZ¢Þ+e§ó-˜ã™ŸÄ3<óm2§o;Ê„¿nÚÖÑŒw[ž¾Ú²Þ›__Mùêʼ÷õ kNn²)4 ©RsαEK¦oãꈈª'NÛ* ´óà#£°Ñ?6MÚÊq¥ç|ÌŠU»Ø'Õ|9þ®#k’!»gÇÅ;1ÖˆÛÚ—}"óZ§üK:d¨3•5Ç+w‘e®F«žoé¬SÜï -‹Ô¶ÜÐ^|ÕͨP{_¢¸•[,¤–Ó&9ß®dª k¶³¿0ÝÙâÓfßÇ-¾7c„£=Q´fJÀ©¬W!uŒ—3d) ^âê`º9;HA’¨ºõ˜"ðH6FÑo¶YÛ2¥{(!âPifj{%ži#ù®(¨GÅÑœµ S¡y)™C6ÕVö­¼Íß¼}@†Bñ9ï©}±ÞÆ}Þ³§R/{Î{ê,¬ÕyÏü¶,æwl÷‚&jk[‡!¤äxΚvøCµÈÚºî|mç`¨Xg-Ù¦|v¿ú9l'ÌÚTñÚÕ:ì*xmëξ¼î½b˜N+9 е´rJâ›nî…CŸÛZ5Ð; Äû›ªò1½Þo·· jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá(LøÂIDAT8Ë•¿kaÇ?orK“öÒ ’ŠEq.Eüêp…NB‹C ‹tq+DC:ˆCE°«…f´[‰ýDYZ¨Q#/1ó£!õˆƒïirw9¿Û}Ÿ÷ùòü>Œl{˜f80¢Lu ì;Ò§¯ð›ÒÀeüñ HÛÒ–KÐȶƒÀ`Ò?¶€eiЦS0 $ƒÖ zq¥K爎áëQç….+¬SŸ¸hKd€„4…¥u¤¹ ÷~•âúÌ=¦&c|8ýÌËܪ;® üX|FKÜÞOªi;MñÓê/Q Ýo“F¶mT7] ¨7xýæ-Õj­ßZÀ‚¦FÃ…õ­ ÅR™ñ³£ô‡YMÍYâÓ˜7oôôj6OX}²áeŠkCû7öñWãñž‚ÇF/ÓˆæÅÊÒ7Þçó¾ö‚¦Ö© ùýòûüêšÚÍéNö|ÔàÎí%_ϵõMÊnº ©E¿ÙÉêáS±˜¯ yÑ»°$I›ý^­ùÖÐ~ã@ÈhÒ#ÛN/lË—R™»Z¿5iŠC»ËÛÀ5 Ñ›ÀŠ^A´Zþ›7á44læ€GÎk3l¨E9`Qšâ ðgö~ß³° È>„*À}`Þó¼Ø*ZXøÇ/ #Mqèôý¹«¦Þq$9IEND®B`‚nixnote2-2.0.2/images/material-light/numberList.png000066400000000000000000000072521315604104400222670ustar00rootroot00000000000000‰PNG  IHDRóÿahzTXtRaw profile type exifxÚí–[–ã( †ßµŠYBÁr0—sz³üù±‰«r©îJRý0!¶@Æ’Ð'H¨ÿûkÐ?øp΂ZŠ9F‡OÈ!û‚NrÇçìÂ~_wé\éé|à¡H9†±¯ùzýxÁÂÒo×z²ºì¤eèby”éÙ£³­ —!ñ‡ž×˜òz¯„OËY×Ö–Nq;†d4…=ñä»d\zxD &e—ãäg/ $âÎ"sGg÷&ygï&w®,½\§‚\\âMŽ–žõqîö ÝP»x¾z°…ÓÅ]îÆhiŒ~¬®„ˆLEZ‹º,eïa"…#Íp)ú¶·Œ–°Ä bÍUðÜ\%ÎìYÜàÀ \bðݤ÷ÕË®Kb>û*4Þ$K#I`SÁM ög,¼ûÍ»¿Ê žc¦gc¼q×è‘ò•vc–8³Kg®—Ÿ50&¹yÇ,á±rª{~÷FŸêÆ}+ ¨{šXÜv˜Ø”?jKv΂yê¹ck°µe)‚oE0, à"‹rdgÞ3ò˜À§ r/Áo Àª¾1 °‰€ƒÝßxÇxŸëÕj-¡Ø"4Y `… ¨ 5TT4ªF5MšµD‰!jŒÑâ<£Š‰S‹f–,[I’BÒ“¥”r*ÙgÁ¦9f£œrÎ¥Àié‚· f”²ùM¶°é7ÛÒ–·RQ>5T­±ZM5×Ò|“†íßb3j©åV:w”R]{ìÖSϽ ÔÚ†Ž8l¤‘G9©-ª×Ôø†Üï©ñ¢6‰…}ž}PƒÚìb‚çq¢“ˆùÀ n“ ÚOf.q~’›Ì\öØêAuÂi<‰`èìuðÉîƒÜo¹‘†§¸ù¯ÈÑD÷äh¢[äî¹= Öæï^݉»pæÔÉÀÁ6ÄŸðu¨ù)KKÝÜEWÇ¡¬¡§‹ò¤¯<%eún0Ò\¿›ñóÕAðùí¨èíhNCöù-pôCýE†.É —Êø¤×c¸.º/­×b¢'c)+–êôPΟÀ€/ òè¼+_7ÄÝòì̃:p§dǨâ4~'&zcQW1Ñ¥ÈýoèQ¦¯yÓמ3MïÐÿ=®ÓçËô/Øk?nh%…^!ôHÒnþÀdúük…]ÂSÒÄ`zTXtRaw profile type iptcxÚ=‰Í €PƒïLá@‰×.Þ<¸lH´Mú“O®û)ÙFá‚ #Zƒþem¥ŽÅ™p( kÒ‘CŠääzgC¼¿«*/2åyÀç jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá. _óuñáIDAT8ËÕ“¡n‚A„¿£PWÑšæ„4´U¿Ø7à'PH0UmyTEAêN^*ª*Nü€C~Õ'æ’5$L2ÙdÅd'³cŠ¢ ~kqŠa…õ<7@@œŸöd²,g×G»V¦ê‚}&)Ï9q•}ßÙöC­Z-wZš8?æÀ8£0Òë70æX`ªJc:À'ð•b¨Äùð¨Ialqþ/ÅðÄEÁˆóƒlæ µ@þƒo J1¼k»`Äù{àx>€™¶ o@hÿÚ.Jœ7H¾"nuIEND®B`‚nixnote2-2.0.2/images/material-light/outdent.png000066400000000000000000000070061315604104400216220ustar00rootroot00000000000000‰PNG  IHDRÊ|çzTXtRaw profile type exifxÚí•Y–Ü EÿYE–€$„`9˜áœì ËÏSU]C§+Ãg̱Á²ð®À®ÿø>Ü7\$]PK1Çèq…24’?¯³&Ös¿øKãÎî|Ü&A-çkìÛ¿À®·¶ý¸·;«;NÚ.Cî€2Gf4Ž=ÉHø´Ó~wy÷+áÃrö}´mÓ³z|1š"ž°ã.·ž£f &eÕï‰g+ –$¾ÖÎ]›â]¤{ÔΗí!÷RÜÄŽm;ékí–BgD—&ßðÝ_T{ÒnŒ–ÆèçêJˆP*º½¨KЬÁ(ÈêQ ·¢m«d”„%Vk¾‚çá«£LLâjThP_u¥Š)îl¨™+˲%1Î\åD€BƒM²4' l*¸ Ì| ­qó¯RÂÈàÉ„`„OŽ2þI¹c¦8Ñ3žZa^© jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá/%î(i£IDATÓ…Ð1jQ…áï‰`¥Aû,@¦±˜r²»"Z¤‹ØØ‰ ±°RÄR²€,"•;°á1Dý› ÿ½·8'ˆHÒ¬…ìÏÇü¤D’f5¼á¿Ø†hñŽOt0Åwéÿ‚1æ‘[†$ÍúX ç1 ÐŒÜ_u4<§ŠPrᡎQ‘ÿ¥˜_ÿD˜`¹U(•Ô.çc¾»Sâ]ü`}X²,NÈ.‚IEND®B`‚nixnote2-2.0.2/images/material-light/password.png000066400000000000000000000165771315604104400220170ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aË ¸zTXtRaw profile type exifxÚ­˜kvã:„ÿs³¾ÀÇrø<çî`–?(ÅqÒq'ÝwâØ’eI$Q…BAfý÷ŸmþÃ_ÈÑš(¹¤š’å/ÖX}c§ØëïÚ:ÏçÓ¡óýÃqóøÁs(° ××´îóÇåý‚ïãýãq“Ç}Ÿrßèþáí†AGöìô{F÷‚¿Ž»û»©÷u->-ç~÷y“kóù{Ìc ÷ Þø*o¹F Ì äÐζñ½xÝKçHäÓ…øuìÌc÷Sð{ŸbgÛ}<| …±é>!}ŠÑ}ÜÉ×±;zž‘{ùÃEì´ÏO±Û{–½×µº‘Jæ^ÔÛRÎ'‚Q ç²Ä+óöóyU^…%›v€g·Ã¸ê¼ v»è¦kn»u¶Ã ¦ýò™­÷Çs¬„쫌¨/·}5L Ø p ö¹¸3n=ã Wy:ÎôŽ›9®øåe¾:ø7¯ÇöVŠ;gË#VÌË+§™†"§Ÿœ nß1•ßó2O¼±OÀ”æÂ›í×-º¸wn…ƒsà<±ÑØ+5\ž÷ c “qlrA\r6{Ÿ#Ž|3÷!úNÄOg6Ø„‡l`l®ÉîœëÅ_‡‘€%M °bø“cCM‚D#"I²©ÒRH1IJ)'Õ¨–Q¬,9åœK®¹•Pb‘’J.¥ÔÒª¯ “šj6µÔZ[cÐÆ­W7Îh­ûzìÒSϽôÚÛ€>#iäQFmú&é?ÓÌf–Yg[nA¥—¬´ò*«®¶áÚ;nÙiç]vÝíÚêGÔÜ'ä~š»QSÄâ9/¿£ÆáœßnáTND11ˆgEB{ÅÌ£Wä3[=I!Ôœ(8Ó)b —ó²Ý»wä~‹›‘øG¸ùWÈ…îÿœQènä~Åí Ô¦Ö½q»²PcjÃFØ8a•æKÓšôçÛ5%¼Y)±b'sú²–«Üwæ¤²ÚÆdÇ\k“ï= ~J)30©»™ 8Eò„ý%B_lbÛG®úˆFkSFIŸ lªÕÔ‡²˜ñUÌ¥åÁ¢-U‰*¾ìí©*Y,.S;#5&u‘ŽÑžH¢ë#æÔWbRtF®n ;ØK¡„‘u°™äÂU:Ø=N±¡A²&³R[/À–CÈO²ö)Rä$ô:q;…¢|h¸Ô?¸Yê‚]­ãmü6»ªÖéB†Ú²Høf"©º›õp_Z-¯‹@ÁŽì%3+•ïˆ4‹Õ¼psn“méH G´[›)ÄŒòáUüù¸]*‡ˆ0¸ÒÔ ¥:áq¨¡ßµJ™ãWXHܩ檳0„“¨¢ÄcdjsÐôçÐ  ˆÊ¼q¦‰êêí(8Yoçó¹]½WoÞŠ¥C¡.<­ý·…2•¥LQ¯U•+Ūø„•¹¢ÿ·Áÿ\²aõŽjÕUbPÜ1`÷Ü-ån$UufŒP1¼¯ÙHCÑ=Sœ¤a²Û*7~ˆû.µq" a#:¢&É/Œ°Чú¹N'rRäº×1tqQ¾0t¨)•bù´†×‘4¿ ©ÃEmÆP¨êgNܵ¯“ÈûAðDtjX¿ô2C~ºÕJa‚ °í§T(E´Tø|J˜,¬/oÇ‘i :âÓñ†A­*ìšvǨŒËÄtÂ1" ñ]eÖLq[3…o5STn$o£‰“¶*Ž{î†7¬[¦b÷7ú³çÀ—h'4Š #|À¨€,–rBíÿ+·ÿqž¤h¢Íêè.5ÅÚ—Uw–7®TSS ”‰ZçûF}ðw³ÞŠë;y‚Üž¾'‘+ýnä‡Õ<‘xŒÄÖËK9 ­lΛw—×á²Zaí¹fÏÐÈ=Î1N o÷´öÜõ¾'õœÇ»¼oÖÙ]u˜ª=&ÖMc^i1|ï®—:„/SÊ<å=‰rÁÚg6³²á‰ =áNµq¢}­±A=*åû™œ6—VH»u¬¤»ºõRO·Ž¹Z8¶…ùýIoæ‚0ÑN‰¢AØç!nãôÛÑ#+Ô²LÖ¨™›Rû‹âmþL¾^«—ù3ùzlEÊ¡Šj<¨Ù£;MŸBÍñ埶³…Åǵ½§ÔËŒ2¤Ôy€’‡j_òínt‹_¡k~ÒÞ=:¢i¯çƒD#úÑ<$«Ã¤qÂn}À?õÙÈéšz¿º¦CØbõ“Uúf¡• eš·†,ÿtZ/¶ææoó.ž¬:Žšú“â[L»&ûøƒú[ê ý>©¯*5GÁ뫵F_èäÃ= ž©5LÑ´ ¨Ð¥pWcjÍÝ%A€†K÷ÚÚXöÅ%TüWñ/]ˆ>8}z‚A¿üªMš‚àBûá-Í¿˜ ‰É’þ¦æ„ÓE$.j_zTXtRaw profile type iptcxÚ=IË €P»3…#m|¸ŽpñæÁý#!Ñ6éW®ûIÙtAÐy°”ÍV–êX…a:bžìçì¾÷ÊvŠ×WUå1ÎÞ;™± jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEáª< gIDATxÚímˆUÆ÷¶´ -]HÑ–7Z¶5H.ZÞü`­L¡r5QÃ¥¾`õ!ˆu¡zÑ,?”îA |j sM1FZÙPÈ]Z¸»åáÊ +?õaÎÂ*®{çõž™óà¾ܙ9gžç<çþçÌœ‚À(Yå"Pæ3€"Ð<ÅaWËÀ0 T\Ç®4ª9¡ÑáÀ2 ˜£o yÚ1à"p N»Ž=&Їô°xèV->NT€~à°ëØÇE#¾x(«–ž4jÀIÀ¹Ž]$C|7ð°¸W“b_}QÇ "€[­~3°)›Ó=lqû¨ Zò×o©h^wÔ€€]®cÿ$G|»jñ¯DÍ'kÀ{ª[¨=É=“ÿpX^ÇØ]GLžfµutý8:2tSP?ùË€½À£¨N˜×ÖÑu~tdèš`jò·Ÿ­ªV°¨­£khtdÈ×(!gùë€ÏSjùõ  ,v{Pp+ñÍÀÀFª[Ö×;TÌÒø— ©kèQóâ%«l_³5,ÞøŒà°úýOàAõs+Þ¤SgÀsŸ^œjb)—qò‹ÀàÍŠVvãåø+w)A õÖâÍBúE^æ°jœJV¹8†7ƒ§zñ™ÓWuY‰—´ò;1Õë:ö6ðð¾FE¶¹Ž½?DZÕ(ÆÔ€U®c;ÆäJVy!ð^¶L|¬qûl˜“ŒŽ ÕÚ:º¾U¼=Q'ÍÀÃm]‡FG†þÍü(@õ›oh4,ÛÕ4®êÏ{€>[¬3e¸/¿¯ ù+\Çîò¤®cÿ£õsÞµÖ!óxY£²ìŠšü "¨©€²Þ™ÀÞê¦ì  d•Wíšç7`OœPâúÚÇ!«U ™=¨¾ÿ ŠôMB«{÷©H¿´â-pͤ,×lÌ1‰‹¨‰ŸŸ}²I-„ÉŽJVyð‚FE~Iðz¿úøn;^f1S°€`©Ò¸0ì:ö•¯÷»Ïï¯RÙÅÌ`>?(Žß³¬àiÍÊSIøz8¦;PnôPô¾ÇÌËŠ,$[ëû’ÂÜ’UnÍ‚hX¦9‡Zš:Îl`nPÔ°L3î‚.x)¦Z*­©«ýw't:§þPÚ Ìš¹¸±T¥§ãÆZ`zÐû—vÌÒ¸ló‰yZZÅaf? i@—æåÛy§9øˆÈoÁ{¼-L¬Q4å¹€F¡ DG7µ5Š8CÌ(eGTÃÂ’Un)Yå­xï3@,ލçÂâSà#"Zð*HÖ Ž JV¹½d•w2ÉâΠh^E;p¬d•û#À©)ž šŽ—ê~o%Oä9@òhÁ[»° ¸Z²ÊƒÀà&p¸‚Xž$æÇÚDÅLÀRŸ†@bÑv\ Ca0íøK8 …jÚ0¨>@=(Yãz‚Àá1ø½Ë‚Î 0 œÉ‚ñžÄøÃëØ©Q©ÔÓ§oœÎB`—„Ï`±SVð‡ðé ýÀùL@ͱ¿+œúÂA×±o¤^Šü½è»2XGT€ïÆɧ˜üEx>…S_Ø=q B>Å-ÿ+iù¾Qå¶w åSJ¾Ø~0½ý½ÁM)$ÿúnë¦{ßß{ûó)lùB~0ìºÓúÃ|JÈ—€/3Éûs)iù¥Ïø-qûÜþ™Oùð…·þs“ý3¯1ùbûáñ±úLŠœÆ-_l?Ž/Mµ­l^SòÅöÃax³ž=…›4$_ÆùáÉ_ï:öp=_ÎiØò¥ÏñûÚ94¯ ùðEÓç?ë‡|-@¾H°x½ž>_+€/ô‚ßPP¶/SºÁqØœPû‘ˆí‡ôú€£Ø’¦©Aä‹íCo/à£Q0×òeœ,ÂßÇtM hùB~}¸©Ë¼]Ækq\$—ùiøöWñ^ÿÚãujxkö/g€³®cÿgÅr µü4|}ÀÆñX²ÊËñVó€E8ZoÛ·ó@¿ßDŽÖÈ@z·O]Õ»Ô¯ œa†ªgs„_Á{ u¨Dµ±´VÈ€íïÁ›Q«‘aäblù™±ý,#ù{SNþÈÜ20Îïs{½IcÍ| -¿æ–oZ²!ùiŸÏߣú|ãÞ8–‹¨åKÀg¢HÀg°Äö îÄö v±}ƒ@Æù;€Œó €|wðìð,±}ƒ»±}sФ±íà-’ô‹A WÈàšów[¶ƒI*uû @žÏ7Xòâeq€!ßlHŸ/A @ D€@ Ì@Üïªá½!n=éÀ€ëØ‹å6K D€@ D€@ D€@ hþÖNK4gÁAIEND®B`‚nixnote2-2.0.2/images/material-light/paste.png000066400000000000000000000121751315604104400212570ustar00rootroot00000000000000‰PNG  IHDRR;^jÖzTXtRaw profile type exifxÚíX[’+)ýg³ˆÇr$½ƒYþAúQ.»âVÏüLDWF›$%¡#‰tóß-÷/üÅHÞ%.5·œ=þRK-¾TþÎH>íÏ뇿}ù2ï(\7¦"Æx~æy­Ìóã’®yý:ïJ¿äÔKÐMå%0šfS¦—‘— Î<]¿]»ž“ô´ë_Ç5Çgxý œ1òbpaƆ>Z",ˆ%Ê¿k°o ß—Ä?øÎÍøÞy÷o/¾órÍǯ®p>_ ò‹®yâ÷¾Ûú‚ÚCó—£ÞÜûÝwkºÖ<»“”á©ì®Mݶ²¿a!„¤¸˸ þß˾®Š-v 6|‡BõÝQ£@Ñ/J4HhÑÜc§S˜¡` ¡‡¸çj,¡…¸h…[.V`Ó[Ät¸ÛB[oÛú:Uh„• Œðķ˽›ü;×]ÐZâD¾?!,`W°˜††œ}b¡uù”·÷åžâÆ? o7WlP¼Êôˆ­¸qŽXÇ>9RƒÊ¸ÀEÐÍ0†"ð™"S&_B(Dðc>ËCLA1‡An›3ÀA6@7ž)´×gÔ 8f$OB°RbÄOI1$Èžä˜9sáÊ%Çœ2çœK6Ž’K*\r)¥–V¤Æš*×\K­µUi¡EP·ÜŠkµµ&¥Ñ‚§+D4hÔ¤¬Y‹Vm*áÓSçž{éµ·.#Œ8þ#âFmȤ‰Pšiò̳Ì:Û”…X[q¥Å+¯²êjKî¨Ñ•¶_P£ä~F.Ô ±´×•j˜.å&‚ŒNØ0b!/†:f¾RJÁ3Ì| H @ØÀdˆÁ4)ð¢;vä~ÄÍqúnárΠû_ ç º ¹ï¸½AmXÝ뱓…æSˆ f•PÅjÒc”KšbSZ ¾jÛè¾ÄUÛÂo/Êc̶¶ à‡òBFè¶zådÊÒÊêKË‚¥Š·žqC:jíðDéqHÇ…R.1·†ÜLLæi[ñ;#ØU*„Ö$&Q5šZ€ÎSy®˜².8{eÆ u!$BS{ k@Þ™²lkã ~û^ÇFv6Ô9ÙÞHÑyÙŽñ¿Ônâ4À=0/Pq6ÅÕeσ÷¤¬ÅSÉ;P´˜Øà$»#¥Û*8@jgŠìΞGMÃÆÕJ7‚ÂzÜó@¥Eó­™‚†ÀѸ“ࣵš¥$D-• ð+¸læ…HEú´¡uuYʱŠ!ƒ¤ÉUuÃÁ­U·¡Bâ~i–†^,íí"–°‘8‹ÿè0gÕm†{ÌÃ?:réÒ‡¶A}!†ßž¸oàÙþtí ‘ˆÛÙûžÝ ê'²Ésq´½*ƒÇX²È¡¤e,]9;8¢ç›ßºYÒ0¢iåËm{õ[€ÞUh/aPû°ê—#¨œDOì4µˆ‚q³† dÆÂãl¿¯ø,È5ŽqT­ybHrÈ@$ÒGÌjÙ A?±þ°ûŒü÷±Ê´°Ež!0ÁBK<⽋C³3‡€9V`E{ƒTÐh­ÑY&ˆx´ÖÉ"a§Ð‘ýelPEà_—z߸¾ÍÒ*¨œÜ'x#m¦Ô¹6ÔHÈêài¸-È;½ *Î iôÚ;˜ñJpÕ¡ÌTýSVø5¯“sAߨýL«¨Vu]Hp8vÍNE…µYˆXxÔœƒ¨ÅÂaೈj—Gžp¡SèYÒDÇ6q¸èH 8&5ËPã˜L€g k¸©ñ¡R)éDâí[\¸?ÀP0†èP#=éPýzgÔ—Ž>‘PÞhª›ƒ¢LëNÊ6ùÚXº²'52 Ö£k­kšuˆœÞ$gø Ì-²(¶å-mJ€IââQÝC+89.„Ĭêþ®˜ Ã¨× "Þ+ÝÛ¥õT‰'ø½u`Æ~"ȵ\Æœ•îÍÒ‡1GþO†ÜW¹û2¸°/™ŸèKæL½… mtZ¹ ¥È1LôPµ¡ÑêUp4‰¥ÏT¡=!V­°IW0Î8„¬™ÍÊc0&>%`°qÀâ Û×Þâ¨02< j©Ï~ºÁ©èM{ònœ\vt Šœ1R¿‡ˆæò>v44â"ÐÉUñ™è^Ssá ¼bߣ"¯F:÷Ëý'ûÜï6ðÙ~÷» ¼ŽÈï¼6Hn)ªç„ã-‚°!}–1w]£Ÿˆ_þtF·'ÄûQX·v–ö<új®xÚ/JO£ ‹ºÆ®!XÜ£ZgÞ@OÁ¸e’œ"…ÖíOO»dGÜF³Ý°›.åâ^N©þq}¡äþtá?‚þôÿ'ˆªŠ‚” ICp3€•…½q²ÇQs×R”Ò¤ çá[J‡Í¶vp âSòÓ9>Š~·8ç¡Ú¤£ýÁÑ,mÍ0h ´gÖL7>0Ñî»ì0Ï9Zr/— $ø–âý–s¤x3Ñízð*…À«8ÖÐ>á½ÛHÜUæY¸{’ží ‰‚î/C~ÜÊ«p÷Ö­üdÄ‹h³À=›ð'¾øä ·Íi6«´h㨀÷“à”+5ÙI]ã,aŸÕFüŽfw¼Ó,N(ˆt—'Ê:JuúEp·*p+ö¥(e;U_›\åjyúqz@œÍýÞü²£¼Ë²OS=ô{:ê­Í1õåí[é¢âo:a°U¾WxÔ=´å ï¢bAðPt¼ðnG³‚cV"{“šò>2`i>ù„ú{{ÍÑÛ:=,N…¾Ï|ošþC†"nHØá`Ѩz*†'k…Ê»£ šb$7£·XÙï.m¥ö>ÚKœÝQ†b4û»½²½½àBeÇ9`¿jù|úzrlí€eöZýjNŸú­rkÜŒ·:ÝW¥æ;µ@ð(~Öûe“î±Ëÿn“î±Ë»2ŒÊZ´¢ËFj 0‹ìýî—;⦹ÿÐñ˜¨G­Ûõ`zTXtRaw profile type iptcxÚ=‰Á €PCïLá…b>®#\¼ypÿHHô5iúR¹î'eÜ„áæ‡¼ó£¥ ãê4‚Ê5mŒy²Ÿ³Ý¹wHˆÕ§€¼2ä·ô³, jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá7@M7FIDAT8ËÔ1HAÅñß…U8‚6b …BRXo",6nA.ED°Ð&ˆ•±±Hs`geaµX-Z$…m,°0”T ‰Mš–ÅÝ;ò‡iæÍ¼yó}ôTˆ“t] c¾È³3 ´*›?`Î1Ã"Ï–k â$í` GÅTeÍ>cÝ"Ï6Ëb„E¼Æ_ì„ e~cãè`³šàgᰇ܅ù±pØ=.qQäÙ<©œöƒaaŒ¡0npÌ_`7NÒù‡+T9Á¶‹<ûòXáâ$ŧ8I/3¸×›ox…­ÈPäÙ\HòµÑ NÒ}¼¬‘gpÛ+AÏj´_uE,³Qjq•7ýtð´FûÞÁZC Þõc°ÚàôÁà¶Áàc.ˆ°Ž÷¥4?ÐFTäÙÛmn·žêJøêhãø'Lž¨ý·IEND®B`‚nixnote2-2.0.2/images/material-light/printer.png000066400000000000000000000133771315604104400216330ustar00rootroot00000000000000‰PNG  IHDR("-e› ûzTXtRaw profile type exifxÚÕYY–++ü×*z ˆYËa<§wÐËï¤çt•}ïûyöqeH„DH"iüï¿“þƒìɇ”£ÄhðñâÅÜd³?ûÊÆ¯¿ëc/}üØNÖMW·ÿã_Ðn$´×ÇvJí*iOtt\&t*Y…ÕCÉc"gw;ÿ“Ï·œãWûÑöåùŸF˜ÏY²Ã ~aKqÐÀ%WœÞë_ÖAh+έëÞ`G×Û'ðºœcgÊ1Â=BA&âFG;‡sìB÷ñåÖ>vävyò»9{žsìÕT¤cQæ˜bÝa läÝz,â›ð ¸Oë+øf,±ÁbÝ4سšF,lٙɞ;ž<ÖµqƒŠÞ›pµ¶qmË.Y±mÅë—§MN\'—a‰»94Û«.¼äÊ’×8CrgŒ´ŒÉO¼|é¬ñO¾×‰æTgV0azÞ^j¨åô/FÁ <LÃÂw}É<ç0¬ƒÂ9cÅÔ=E |ó-·ìì0.Ofo Ný˜Av€2ì`ÙŽl’µ‰8fا@së¼­°‡`;Ó„mœ‹0N¶*Ï$^cm°»ÔC±y2,T`,ïü'ù *ÁO!„RÈAB‰.úbŒ)*G•ä’O!Å”RN’JvÙçcN9gÉE¬8PX(‰$‹H)Z0uÁÓ#J©¶ºêk¨±¦š«ÔÒà>Í·ÐbK-7i¥Ûî:¶=QÏ]z<àJÃ0âH#eÂצ›~†gšyÊ,W«V}´?Yîg«ña5µ˜_ãÒÍjhNé2+µ,f=ÃâI-‡¶j3“Ù{«–S›±ØÁÂjÔ8Õb° lÃä«ín–ûÑnüWv³ï,GjºÂr¤¦;,÷j·«u{mYlïBÅÔ¸ bÀ‘‹ÍEcÒq-Zx q3R{3½3Ü¢txzuƒ13ÈÆËÔ‰Bósb[õXšïϽø  üä6ÖiÀÅ´ì<¢¤n«Wá5„¹Ââ…–ºI5€›ï¯0Oí°&¹T!zV×ô&ŽÞ'ÖŸÛp= þ>˜p0¶aʈݦêÑÑ@n]2,&QžÍáÓc›YÒÞðW‡ÎÖ +DØD¤ÂeýR¾š_¤‹†˜&Ö5M:Ã4A§9íÔâlÏ£”eŸî©yûl²?ºÂj#¤æ±)Õ-lÖë¨9ÏcåRãîÜ]÷V∓{>&Bè)ëÖ¼^»LÓÓláTÀgÓĶh± °»(tì9ð+£‘Τ©ÌYs •a(¹c±†hÓÊÒx ÏáGágès~>Gágè'Àøç|c™©s,œ"ò7_F!äv‚hŒ“&nö­ )©>Ž[·]6è( Ö¦‚#õÚ§wu×FÍL‹Q©´©ÿ#ÍÁÛM u „a™­Å9‚ñ÷@äÙŽ‘5Æ\’Iˆ¦|Sf;å59;ÉÐã¢Æ[¯ZÐãìïTxÑõzÂã^7hœƒAߣq>9}Æ9ô=ç`Ð÷hœƒAߣq}Æ9ô=ç`Ð÷hœëKߣqý†ÆÁ$9ÿ’Ðßä9Ž1‚m£Ë $H'½oÑÛ‹:$ˆàÆè©u·)< Ð À[Ôý-Òl¤Z5 ¤ÿHQlŒ ªý&%¤?ͯ,„üõJæ‚E äËÈh‘¾h†i¢ÏÝ”(×kadg Q™ñŒfhúŒ‡Öi‚¡"‰+~:,ýÈœc[Q%èËš‘¶Œ<éŠO‘A£nhIŠüYP-X²¡ÖzäV‘%_“Ñ¿†ê_4QhjͬýX)Œ 2êt4³:V3È=UÏ¡j€Ó—‘í4uŸºÆJQò¸£c5£ÖÒm¤°–œCÁg«te+{_ÛE(3”ƒ¥.]hÓ.uŽ’G3l èN…gIo5[*Üi ‚èTÒ[íîTx>GágèsÞƒ ±OTG ŽÊÉÌ–A©189.Ø~.O¨ƒÜ+.FÃN>u&ú€"FÜ„‚-=r´R ‰Î ÑûÁÝ3“`_7‰E‹Pìd +Ø<'¼g 5£ñÁ›C  >+HLÙ(#õuÕ€jÅ׊Ý®8‚"wÇ»jÂÊY‹_Fé€:M(×!œ¾–î“5'²i ?}&8±£Ê¤%ô‘¿,—žÅ"Ã_e§U„²U$F´ÈÑsŽJ¸U+D BwÁ±qÙL“ð;ÙŽÈHªwõ Ö†sù^Z«µwîø-'|ê'´b PkYѽA[”(^t‘±TÖrΜ‡Sõ.P›¤6ZO¬UH¤³|™wÍŠÂaÏZ„VÉU3<ê‹ð0ŠnÃ\¯±=—²œ‡‘”jfú½øÄ*c¸pœ x5‹"H‚›zèVÊ K€¥i%Õ]7ÈLuK°)u€íl1<À]UDà¾U2stDȘSëÓN“kr½ CÓó†1c÷HT<Ó·óÂ: X-OÀîêZÓŽ¤$Î;•2EY_iúØNcí¢÷0á­eí]ºÂ@Ø'ð*³*`£¯,‡ªÚlÞòÐEYƒÊôGüI{tÚ…äM¶–­Çêd¸­Ž°¼ëê49R•ÖêΑß-›rmÙv"ÏñΫvü0‹nR?-~õdhUËGpãhÖ³$${ú†!1dœ®ÀÍJg…h2v igÂÞ¾;×ÐÚ¦ÿ õwAiÍ“Ñp3šÛXÝo7?]E|B† Ðëy®Xo&>ÔÓ^ƒT‹i°)Qæ±%”.ÄR©¼ó]=ò¢Ž×j“ž‚q¢f¼ã8Ìk¦ÀÏ ¨) LX'œ‡H7‘#·„k/ż5œl/²4AÖM=\Ëà/ÑÒÂÆ<@¿¢gÇ:Yn.ȘôìùáñÛÓôÛãN:”°;]-¾¾;¤ÇCÁ‡¾KG¬Xކpa[Ј\Ρu+‰'è¶Î¡õEjÈ}fÅ Â%Q^xdí¾y2HyÇå§ž¯VhŒ™âÜ'³®5mªÏ fZªé9foͶ ‹«ð·±âÓ+"âá†íE5í$xBâ4»2•oÊR| \¾“¨o”/2ug&ĵ‹XÞÕ xˆ}ŠàN.‚·Ø–¹ä­ø à£MÞ@뀑ž|E쥀ŸÂzX~»¼–ŽSá‹ãÂÞùt+¡Jm'fz¥‡2õ´CV}Íö‰-}壋-X.6$òï=­Àêä‹#!w¤?Þ½eÉ{Z½cÕ†ªRp™t(ñ&~<†œ{Ý,2€{ùt*ç­^W^@ QxUáI}ŠÁoЯ¼sOxÄ}D¡[HÑŠâ‘Õ뫘ÔÁà ŒÁ•GN_¢n7çä쥠èÑz¯Bûbåò^…¾}±òŽCé™DóÚôR µòîõØÃ{3 à·®` ©Á@žº§A>¾¶žrÊ7ú?Ò‘x|ËÂÖazTXtRaw profile type iptcxÚ=‰Á À0 ÿž¢#Ø–!É:µ?ýõ‘ý‰0´ˆ“$Ï»S®V¸`†ÇŠÒ YYªc' Ã`6õ“|nv˜ÜÅ뫪r0&Í]Û>Å jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá «‰r„¢IDATXÃí×=hÔ`ÇñÏ)*|éP‡:‚›ÙnQ uÉâ £[)¶CÁAÁÙ."ØÅÅAÜ„¸H¨Cë–I\\,¶]:9ˆ½¥KD®ïLšœôYžüÂóÍóòi)PÅw°ˆ ÊÕO¼ÊÒäÙ0S«î6pJ5ê!ÎÒäýa†vÑVS¸1ÌÐV¿¦šh¢ƒ‚÷Ÿ±V1æIV+Œâ3xŒË cÛÂj€'Xhèδ‹âPͺUç-þˆ»ùñêâ9Ô÷÷²4ù–§Ô³XiRìá×…ÃXq°*ÃË0Š_`KM„ùü™ìTw x Øôr«¯›Ø.yî‹X/ p;K“­2éÂ(þ/¶¸àæFøón9áF–&oG©¶<È;«+ §q~ÀÙ™poÀXߌïàaQ㾄ç¸TÁœÃW¬ei²\Z.£ø*:#|ò.K“ݪÃÌïêä«:Joq¤€¯óVñÄ_x÷ómtd€Yšt‡”èµ¥ºé¦¦ºþÍ}Fñ—’çžíoÊ¿~À#ÜÇõ’»XÅ›a¦èõV‹lë¬IEND®B`‚nixnote2-2.0.2/images/material-light/public-notebook.png000066400000000000000000000222541315604104400232360ustar00rootroot00000000000000‰PNG  IHDR‰ úzTXtRaw profile type exifxÚ­šiv¹r„ÿc^Ba–ƒñïÀË÷@Q)©»_ÛÒ‘îe± ä‘€YÿóßÛüRrÉ„˜Kª)=ü 5T×øRžûç~Ú'œÿïáýýzÝüø…ã’çÓßÓzïo\Ÿä÷~Û¿^7y¼ã”w ÷z½Ùñ¥¿“|òî^ÿ˜ˆ©ïs-ü´œ÷_Ÿïµx?¾ÿ2Ƙ‘ñ¼3nùÊ¿xßâ™Ï¾ÏÆÏÅé[¸ßÏÿö÷¶3?¾~3Þoßl÷´÷ºÿj ó¤÷†ôÍFïuo»c¡/^û|ó—_ŒnËóóŸŸl·÷,{¯»º–Jæ]ÔÇRÎ7nÄGÁŸÇ3ÿ"ßóù[ù[XâÀcóø³?ÃØjõ϶ÁNÛì¶ë|;˜bpËe>XY׊Ϯºá¯ øk·Ë¾úið…ó¿y.»s±ç½õ¼o°ÈùLËÎ2˜å‰_þšß]ü7 ´·BÜÚ§ü°órŠi¦!ÏéîÂ!v¿6Ǿç¯ù)nžŸëñ`Á<75lžï˜ˆwG&c=x’õÑ&ûdç²µØ±àŸÆÌ®ã£›Öl|ã}Â9dïæ™lϽ.º{hÁÑ'’§à¡†³BˆÄO…jÑÇ`bŒ)æXb-ùRL)å$ŒjÙçcN9ç’knÅ—PbI%—RjiÕU„Åšj6µÔZ[㥡O7îh­»î{è±§ž{éµ·AøŒ0âH#2êhÓM?Iÿ™f6³Ì:Û²‹PZaÅ•V^eÕÕ6±¶ý;î´ó.»îöÃk¯W¿zÍ~óÜ_{;^“ǹ/zË9 a'Q>Ãc.X<žåÚÉgO±!8yN>{ª#)¢Ãk6Ê9ÓÊcx0,ëâ¶?|÷鹿ô›‰á?ò›û“çŒ\÷ÿá9#×½žûÕo¿ñÚTÝÇc7 eÓÇo€Vi®4Õ¤_>WßÃõý,V¸m^5»ÕlËsÌ2¢ Ù[ÖÚ‹É9¦9È—Þ]]þá©ì÷âŽ]jß+ïêÞ}w—÷ValÜ+pwf`ÞÕf´kÏÀØœH ö|Wåû>Í“GbœÜ¢Þ–îMeÛC?¥ê7ÖI¤—ûöù5ÏÞί)âçlÄ=qôA™yN.Wƒ5- xb¥ëÂl—Kz“N–¹öõ¼<­^²ÙÄoÉÙ/Û'vô¡jL+wçÙ{mw«s4[ÉòììlÕ¢¢’1#·X&¶ìÂ$ŽÎRo¿sësäeÏûÏrž¾z]Ožž±&ñ=Ìöm­´}ÎL4•I‚jkÈOâ0®5o³Ëdµ‰ÀŽ´•jsöà‡'zw3ØxÙv!XVQ–cÒ _ÛkßV÷C Å\s©a(b·õY½Xj®ÁÝÆ¾VÜ+‘ãÑ0›’Ùé5œ;?7L'“·1æ³Y. S¯±1iÜÝÏnú(diØÞÖí9$I¡rb°Tɰ!&¿R·9­ÖBNi\6_ï7óûÄøgŸ}¥²K›š·¡Vôx‚¿'¢ÚÑI¨¶Rެ€x¡ReŒV?üsÝCh¬@ú„Ö+¥µQûczp:@HlT×ËÝ÷ÌAhizòÑObÒ­hãZžèó7JÜÁïÇ›³¥\‰L»»¯"½V€>'â‹: Q‰%`{’`ì6ð¹l¡LUh ±ì{j7÷BŸY•Ñեމ¡*'I˜2 åÉÐyüú4Ü´U™%«ÖEf¦Àô˜³  8QÓ];aÞ˜·ññmZò¬±và }ªÏz!ðÏh~^ä™Â¥H=Èþ™d.uóÕÖ‘//âš§ÀÎÎŒ¶ü³…â€U/É ¦\€Wh{¦(CZ‚že †gy|¸ì±Z® µ)Ýív#Að'5QÏÅнƒÖê¹qŒ-f€„Z¶ †JTVNÏÖÃ]=‹u >Ãýkâ#_†õ#žå²òïËeVMK +ò»VÓ˜[ ‚©¶úÀÈDÛ¹©®ãƒŒÞCÒH¹é* ¨œîàYËÙ8lÂç³ä¾ž¾Ï>ßžþùY"Hi­J•ÊlFè ”ŒnœÚß/¦5ûNP€&~—Æ€ „ó$Ñ4MOx€×e½Žwv«GǃÎ]¨`ëÄÜ”}|­»Û" s°Ò(×$^¨t,ìóe,Z¼IíQÎ ]œHŠ“ýäÍÉv‚v »I¹ÁA•lz‡´]û‚)VEG1ÐpOï“H™±M“9ÖnAëèLjy@0 P•H|¬5ò¢mAÆÅ•~À¿Cr14Âuj‹3ÿSϨ®ƒ-H—jZ˜>%“¢›ÀÈ“ž–\Á­ŒVÙ=[㜌k¼ Ǫô§ÓSÚ–.˜€ TœŸ¹Z®-X _(Ï$ ¡5UœoÀ &î òpY¦  gd•dÍNÍhvbXŸ(‰Γ63JL-Øä{-PBIåÕFîB~«"êª8¤Ž’J²Ú±abåZ9¤8À2Dv šÃaÈP-! ÙILH3rbI@ð)³cƒMaŠÀÀNt361U|$깂ü¹iÒñìYTõÐMs9¹'ªà7’È0>ÍYÑr3`¿iFcUžH¦ÇY¯™¨ÙE€ej<ૉè'Ó Þ-x‹ÎÊ´™º+Ä·™–‚ñVÞ`+AÄaJªÀRìµ…x&÷ÒÆû!çÔ©|ªÞôB9=CúÁsUÊ<¹y^?žÎ¡Ar<ó`¸+-6Hmmm‘Ã2`¦e%åNXtF&Ž `ŒQâÙ+©kD\¼™g&@ÍÀÑ#®&½­E.¨.ˆß\ lñD9Šàê7‰Í“‘”'Feüo‡:_ùòÄÉü‡´6—„"اha9   ; ÓŒ«Iø¿\¶9\êÏKXÙTýœb­~¤Mx—®~ž×›óþª™V•( v|þöL­ØIžÔ8âŽþ޶pD ܨ¤¦ó¦"Îx 4´ ¸»#ý‚V¡ÀæÉ*n|ð"”ÅÁ~`CUÏ…ü õÄöw ûÁ "`­íXE ý“a“¨ìíP¾k´›ðÕ œÖzädØdÜ·ô}ZI5³ eÿ‘jøóK²©íB {‡ðÁv„ùü§²ïu­º~ÿÌ»_œ‹BS€£åu-˜¤ » ðªæŠ‹Ðj˜¥Ñ.J(•iöx|Û©Q_»H—ÙÊV(WÌW=D÷M]˜oE*‰ydâ8äq^¼˜>+%#TÉíê(Ux9 ¼qOüÄT"åiöŒcî=œ¢Ê:˜4DëážñÂ4îï^ήûBUµÑ꾨‚ÌwdÅÙ"‰‡KùNDõeuTCœ ¢ZHÚ8‘l)PhKÀ…Å2˜è†`IØ8”Ä\ëºÉÛ[b‘cß> ¥‡L¨iÍ ñåÇÔ`#£'É™ 'á·qö;½6ÒïB£rŒ#?z#nÍÆg,ÁáãŒGA6HC…HPÖÅê#ò† ":ºZ²7Q±öñj£äÇ€F~ ÍŒ Še ãa¹•AA÷ÐôºÚ3…ç‹fâ!_Â΃Mêòrá/¦UÅÖÀWp¤€…4VH¤K#–Êê©P6“9ä²…¾7Í[½1–hzu”®N‘l#éfJ¶Nsg† ë*˜g†%«íç Z²Ö¥á¼Ö6Ce w¤sªÒ†¢-ÞàД†WÍŽœ–Š+÷Ê’˜X-Ø™¬AêØuùÑw!ª+ÃÖÃoI§“2ë…½vé sa–3¤)pb¬ÍÏà­#/µK¡ŽåH阩´0<|Ûɵj‘âÆ `Aã: gY·+Ø襌}…‹çY1†èr÷çÔc´V¥8ú½Þrä‰üWcüݧ·ðÔkŠ‹™,ô껆8 û âb¸‰?bpÛ:èUh:bÈŽ¢y9‚Ãëp?»å µ²"ËRi‘·KýœñÒ ¢܇R3@"Ê¿»l6V»E5x %%B :vÍ‚¸Ö×GG‘»ÑSˆO-/‘.@!²7ë1µbä*O˜=W5ƒ³’g;¯ÀÜÞ§¥X¤jC²q®Ï‚’[*á…`4Ðúö„Ý£¬ˆ,M*´Lil­áôŸg(0ôêpµ˜i¼ ²Qáüo ±[#®Õ ѽšM„TÌóÚe:‡n±Ê¦[Ý?,G´ÔTêµ,#©®EÔŒ8¬ÀŒ(š©§ûé *6÷p99s¨MgQýjJ‹Òi Êщ†¤Naë^È( v(› î׌ô‰áwo½‘<}$b€dÓÔ“1³è1rw× =ê×fñIâUÀ¯5îÆ«Ö ­Õä 9Òk£HÜ„Õ>…à*“P1è_ÄÌQBû¶ m‘¾fÌI‘ŸrÆì7eêM™—1åö!?Þû‘-™+¬Ãø:ЀÕ㼤…0Îi¸0É$•‡­ÒYû¦„û%ªO4.E·ŠÕAoë0¬mbÙOšãô<€ó(*À~>“zCø†%:üÆÐņh¶ ¡‰k¤^n*s°d6,4 uB¬WsLÁÞÑ´[u€”&¡„&ð–OÀŸ5!›ÍªÝ‚ ³é«€µp k#¿(ÕíIž³ü+LSÅ-ÜÙGýC&`RϬóQÌ¡"ˆ)Œ :¸lEϤÂ|j÷à®Ô“³^«—"{ÕÖÕªØÝ_ˆÂ](à=Õ^åŸm´åp XÕsÿ„S„ßp ó÷½Ý¿çDy1¿ÐŠÃ*Ô@¿.[ :ĹºžÔxƒ QUs³02|Þ,Ü’–óÚÀåH­àg¹ÁhaØÚ«4ÇÐÏ»‹}Y%8*#-³ýÊWƨÓš8€-†¼Õ‚¡ hOºÞŸ-˜OÍ•7…R€õLx¶*.¥±QLp„¿UmÔ†â°ü®)2w…jÀ4 éUq¬-l"ÝYа£§e&üøÒŸõÒTwÚ—áP²­jQ¯–4§c[4ê©©ÓQ)0@ÕÐÌÖrY PB0vÔ¾ŠaŸ§Í**Ö|*nrc˜^UôúµíK‘+ó:{GgiX, <©hxÛ•¦Ï‚G'†Ã…D¥ÅeL)õ!Ú†Ú¸‘±ò¥9^ů©F xU‹i"FvÃ^ò¦vNf'ZÍ©Ž…í3œ-(a?Ô“Œàm²òs‡uf‚HŸºåÅÝYó¹`d6è>…j\½†`û'ÿþiËüŒn£ðþˆî¼OYÐCuÊOÄE}¦Ôä3—OL‰ŽvK€?5±Ü¦2è6´•zw«ÍÉz›;þn¨nz,°“ŒÃD(º˜ÄF­=èx‹ž%ÖXA#Ñ+6›neÿç…þèèú}û3™4™Jhí!H×—Jã3=åizêmS4*n^ãÝ6ô*0ÿ‹Û=*ëñW$polÅz?zÙZŠO8ýäu[1v "¡¿q0H®•+KÏzp…«¼ÏæÈ¯¸ù‡ßßAŠãtóôú—›×ç_ký/þþO ^Žü¸96f>V¢†ÌWRA‰} ãó®´÷w¡eS6¥}Q."dTbIã|6]ºÎk¤¿!ÒX¿ºÈ\m|¨ ~Òôó÷÷—Âo9µK¾<åýv 5SäúêùÜ¡¥{î,ýü~ZpÖ»9¾6FÄñ¾´F2lX÷—mwŸ¦™fyšfã4ÍôS¡^ªifº2F4\2c§GÕ`Új‘ƒ´”ê;¢HýSÈ÷»Ë¦^Ã<0)§>»b[è5:Uñ µtÂAÛéÕ+„½Ú/$YÕ^6”kª|·,=”6âvI¯5d˜¼S·µJÞú³¹C ÀQ¯.f&«âXÖé@„´E_þZ<Ð!· ¡¢ÂzÍü3ˆ³©UÞ¹šG»p1qEf¤^Á¥‘|ª8$'bÔ^<”&js¿ÉXªîńٵªSηë®äŠáÝ À„êâö·‹›ß..%š2Ô~w@‰·½Oðí>sŸøh\'á ºÐÚ{ÜÏ™EÕÃs,QÕYi¿÷t¬û׎uù‰N˜hVŸé¶¬KÑ‚¤À­DNóiM¿OÜûïݺ÷ô²ÿh„X‹É×j‰ÐQ#,k×èl 8ÆÂéœ6‰ŠAh@žNδNüÂÕ·¶ø7ôÕ20f%#õôsÙãÙà“yPz aض o/¹Ú¡?¥g‡±mò°àP‡=;£óô[%‡Ãyሻ¾Ûš=h&3,ÅÕð_¨¥÷ðì¤BA ¦ê‚é‹r†!&›Ò÷LÎE;(Ï%g3—ÚQO@6ï¦>Ü}µï½óo­óÑýéêæÌЂ°µ:™¿Þ’;¶Ü¨5ÅŸM9`Š2VUôPpº£]xŒ²G™<‡}31(Iø‘LK¢’²e«ÝúÕAásâìèòZÄòn¨^0M]q¸_' rv=½N%”Õ(¸Ðbb¬êÄ,Ú1á­ÍKâè€J‡éë°—Ž¨n»A±‹ÅÕA²ðTªù]ð­øÒKàJyªs‡b…ûªËV!oÕdõZ#y6+– ÈsxªŠ¼ƒdà‚ôîÆÄ7ØÕIu7ÊÎ7ÊÑ §¤øÛn¹Zb…_›*Ök]I§Içx»z¯êÃåÅÌIoëç9r„ÐÜÎ]Á5íh²¦ùydÿJ¹r™2pû¹©·i‘Yg’.'1¨á—‰g¡þãˆwéиCÆønÄ×:U[zß_#»Û´ÛÖFKÜ—ÿ"<]ŠŒ„úÕáÊ€¨B”Ý®èFÉþë¾@ÝôSç~¬Þ_´bû)Þ,Ùžœ#?ÜŒÆÆ ž$²:c}á9ˆ(̪‘SDÒ—–Ýœîݦ²è¶s,êQ©zŽ#¼y‘#Û¯-€©Óq­Am®Q‡îX+$Dé€åÖ* ôƒCèP”q§ðUßµ) ÃÀþ³Ï¼V‡ç ¼†7ÜEÆ‚7ÈбêÏè0¨©öuÔê ™:”:0þ’cï‘’ÉK³ÓTJNÊ% áµË Tn‚û˜SmXÅú§mµ?|šŸ.¼G׊ÕѵgëèZ æµ³æÒÂ:?›®Œ:Å+²„ßkûØv<Ǩ¸uVŸvëTÊx‡µt˜6\dôHIÔçܼ¦ZŽð»‡Nɾ«W»{:^µÜèÈAtâÿ*%ÔHAS'†šô;Õáí÷Ø©½ÇNg¸ÇN³{«î²æÜóõ~ßÏùÕ<6ñ‹8Ÿµ— ºî.EÁ¢”ÇW›ÿø¤vûßYü< ó9‹òw˸ÓDvåªó³«ãÎü¼€l¦]§Èw—ž÷¢—ØkTR“D&Jtî–L¬ŒE1žTcÊt¶YGé%[gÎ:*¦ŒÇu|œ@FÅ¡â$ò• á=Ò6þËêùÏŠŒü_LâJn ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá¡ï¹ÖRIDAT8Ë••ÝKSaÇ?ÏÙ¡Ä\¾59©Ó‚ ±B /º ‘ ¡.FB» ÿIP’u]õe¹»ƒÐMPæ…t“Q!¥E2ZÙÒÔÙÙ| Wk]ôLÜÎŽÍïÕyxÎï{~/ßïï ‰–@;àœòj˜Æ€a]hF~¬(@Ö„€ýlÏÀ0¤ -m" d¢6àÐØ(ƒ@·.´Ÿù„! ÷Ïú:k“Nzê©u8™K<ú4mbQ¥”6׃a ¨ -­n*³`m2ÂâÅ;ø/÷ámt1ý%Æý¾»æ¼là~нª  n(r¡2§‹+4 ™Üw{™¨K‘Ó4 `ye•ÇOGI$’ÅöÒtªR&Ü óõû5å»¶1ÚU©3¾-,r¡ë {›¼Œ¿zÃÃ'£ñ :#2³"ô«›D›ƒ£-9ÑÞ†¢(ÔÕyØ×ìÅïó‘H&¸r©H´P˜S±úÔÊê©Ô/Rë)<žÝeÞú=–5+ÒN&É$?ŒΚ›Ÿçý‡Ä—–xþòµß²"½iÂù³\µ5456Ðz¸€ÊŠ No³"œP¤ÑM¨®®Ê9«ªºñìvÕZŽ)À°4zÞÖ–}¢à„U]hF îåäþö‹ñxAÂ)ÙÏ<\×…ÉÖ1´A»»û¡n½x¶¥‚wóa+Û™=ŽWó·M p[};ÎéB‹ge€ÜgA ˜-‚ÈúSY²‚ë:ÿó ëB‹äÇþ? º}”4ìIEND®B`‚nixnote2-2.0.2/images/material-light/redo.png000066400000000000000000000073461315604104400211000ustar00rootroot00000000000000‰PNG  IHDR&/œŠYzTXtRaw profile type exifxÚ­•m’ã( †ÿë{„‚ã`>ªæsü}±IÒI{z×É˜Š…d=¦þû× pq²HA-Å£ÃrȾ`’Üq’]ØïëÁÝ&Ozr}ýá¡H9ãÒs^,,ýö¬'«ËNZ†n.—A™ž=&Û rèy=S^ûJøò:ë·µ¥ÓC¼>C2šÂžxò]2~zxD &e—ÏÉÏYÀ\×=žçŽîÓ—äÝR÷š;WÖ yN¹¸Ä—-=ëyîö }ˆoSÿü‡ô»‹o¹£¥1úñv%Dd*Òz©[‰ì3,£ û¶ˆaø)æ¶Œ‘ðŠÄš«à¹¹JœÙ³¸ÁÜwY¹"Äà»7Hï«—]—Ä|öU<¼I–F’À¦‚›@íï±ðî7ïþ*'xnŒ•žaŒ±ãÛ 3å;ãnhŒYâÌ3™ýÈâò³¦Æ$7ïX èÑ…Î}+ ¨{š^°¸í0±)?jKv΂uê¹£5ØÚ2€Á·"p‘E9²3ïyLàS¹—à7`Uߘ؈DÀA7À7öïk½úC£ ÐhžB°BPÔ…„**HU£š&ÍZ¢Ä5ÆhqžQÅÄ‚©E3K–­$I!iŠÉRJ9•ì³àÓ³QN9çRà´ÀtÁî‚¥l~“-lºÅͶ´å­T”O Uk¬VS͵4ߤ¡ý[lF-µÜJçŽRê¡kÝzê¹—Z2ÂЇ4ò(wj‹ê35~!÷35^Ô&±°¯³5¨Ín&x':™˜ â6   ýdæ‡à'¹ÉÌe¦Pj¬NãI Cg¯ƒïìä~äF.qó"GÝß GÝ"÷Û µ6¿{u'vtáÌ©“ƒ z*>•ùMz[Ò >s¾EÉõ®”z(ñyì ÿðujêLÒ•78åtÝ÷¹¤kNcÚC ÷cx–ôV,'i ÷Rû}1}–âü—|ÿ2}Ü+ ôy,ŸP»Ü´owÿ…n•ôN§™¦Ï!Ð{¥ø=&ú<–#ú<–Oð_ëþk%IŸÇráðÿ?%I#??þ×O¨YG_ôLÿ˜²…RNéazTXtRaw profile type iptcxÚ=‰± €@ ûLÁIløg’æ; öQ$°eË'˺Ÿ­EL:O¦²üËÒB£æ„CaÝŽÙOÔs{çÏUå2yêhÉr½ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá68‹[)‹+IDAT(ÏÑ¿K[QðÏÓ E¤B—jIðG‚{ Ùœ„ˆtéTÈÒ©ЏÚ)ÀC¤<ºõ::„6v°ÅEè$¸¼Bx܈úÝî¹çœ{¾çòĉëÍŸÞ\þ.³XÁ[¼Àœá7ØÁ/|ƒ¨Oø »XÃHàñ¿ø’ßßb.K“ßC¹¸†#´p€UTQAŒ÷8ÍÅòdï Šë͉\\Át²4 íþ [}Pó%lbí,M:Š{ƒvžF£„}\aïò_â3ÊyÒ2¦°yæä¥¿Žý5>b'ØÎÒägˆÄUc¼>ÇR–&ÿŠü¡€i« †¡!ƒ‘k>Öàwì_CÃE ×ýq99Síac¸Àz–&ßC÷†B{ãjILIEND®B`‚nixnote2-2.0.2/images/material-light/right_arrow.png000066400000000000000000000166131315604104400224730ustar00rootroot00000000000000‰PNG  IHDRÿþõTÓo @zTXtRaw profile type exifxÚí˜Yrì:Dÿ¹Š^A–Ã1âí —ß*Ù¾¶ËwŽþzUaKEQ •‰!!·ÿûÏqÿá“x—´ÔÜrö|RK-tNª|Gñéú}ι¯Éûqwö}!09ÆÇÏ|Kg\ßn(éïÇ]™·zº/¼Œ¶ràdÜ›¼ Åð—û·k÷}=}ó8÷ßX÷˜>§K±ƒ ;6þô±Jd±Ä~;¿k°³Ä¹ÆÌ‰ù9vîõôx_açû=#¾‡Âù|OÈ0ºÇEŸcw!ôíŽäå4¼¿§¿iøŒÝ9«žk˺žµ]ÑT'¢çŒ†³l=ºÛš{\sn{– O& ¶äƒÖM" ¸Z¦žxÂ$ÆÆNsZ¥Ë"ÚúÜu†•¦`_9xvAÓI›BÕË.)±D-Òô¤œ ѤTu­NíŒ{þôø#C²Ú&X{"ü¦±ÚV*s·Ãa”úò@ª.çFÒ'þ-”Go³†0†_áÞQ©ƒÄ5b'ÔV<2@*ÊAK ˆ‡Õ© 7k=x¹R”§OkªE}J%Ì=ò6¹™@>~’¹@c°%!Ô`Š<˜“8Ñ93+ÆFë;¯UÐr‰L# v›>õZŶ³„Üc¯ ¹ÊÑý¤¿67ÛK5(5‹dÛwGÝÔž¿Æß=!à·ðwOxÁ°”TÜš”ŸçCøïÈ©³§uFI>$#›·­¬qt.–<û\ˆ)Ö;—[c;3R”»I¹I+æÒúpé\/4U{Ÿüéñ™¡ç(µfWK‹Ý)=ˆ-Í±ŽŠŒ¤Ø¹e…AÎ.µ#B¿Äºï†jí§{|°©ÌÄhA(¸EÝmƒb‚ûÛ+RBÇîûÆol–û<í½U"ü²KúYþ±ø“µíÂ=íeqBÓì~oñϳ°êž>Ò÷…“‚`ÛˆÓyqf ؽsT³NR å¶vÙ2÷%­Ð·ZnÎÁç í…Zé»ÜÆ9jdf$ÞAÊe1Û¼twÒÛ&çªÆ®53pO*ÎqW: k9)­ó¡é*S;©0ɪžÎ*müÉ.“. Î(9Ê>åõJkÔ}bs¶5Á3áäÏÿòÏ}°>­°Å†ÔÄ¥²I*<ÕÏ[JAP|žãÞMâ¡h4©A>ÕLÈSÃL\ïà ¨d¯] µF²êšþniH=×µ\ÁØÒfˆ¢¥W°úè7å6:ßJu=‹š~€ÌÆTiô„âG³÷U³…â¤MÊ¢N]Æ2)šê!Ÿ{3ˆ≉dT5× ‹LkE‰ÛŽaD∢<Ô‘T0ó ü¿‰þ5ä—èã´ø ¸§|š¸é;€Ÿ¼‰ aË8¼½×éo£îÛa´ò¹Z•õ!}éÓ›_ˆiz˜=`/ŽBj39ôûàD\ìài-Föç²éÁã^ôãj/ÀTÕHMez©D­ëD/ô¸÷ü fè­JU™ýÍûOds÷SéþSúO1±¥’Ø^#LïL'!Dj¼*BÓ’ÅO{ç(TE”¬¦Ç^cX46‡Vá2†½Š S¹›ðq—¿¸w}÷·4›ëo@Ñ ÎÈžzMÛ¤_2ô ÷®B¡=k²í A r ÖȘk˜Ò9(Ñ ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá8 m¬ÿ èIDATxÚíÝÙeðï´¸-1#9íœñÂÄ«¹ôι1Ep 1ʕŖ&ÞТ‰Þú7 .(*‰”m¤S@¬R¡Y´@[¼8ï›K‰¥õ}ÎsÎûù$M¸˜ôÌ|Ï÷÷œefÅœ‡ _––Wæ’œ›ä+I–’ü(ÉýÜwÏN¿¬÷ô.øLrM’ë’|<É ÉžùÁð/{ÖVz”„ŸÙ=ñ¯Mruó÷õIÎK²9É3óƒá3€ð3»'þ5MðÛ•o]óÿ6'ù« üÌfð¯>*ø9j ’üÍ~f+ø_{›àG~f/øçýÿXàÜ$[4ág6‚¿)Çÿ´n;Úài@ø™®ªmSõßIð^¶4+€g„Ÿ)9ñ¯;ß üLyð¯MòÕ“ þ±V/~z| @ø©Ýü`xZ’«’|#Çw«¢`s’¿»œ ë<3áÍ$/&yµù{NIò‰$ßNò©¥å•w{ØüLØžµÕCóƒáSI^I²˜äÌtóŽÍ£W @ø© ú¿–dWsú;›š`~*8ý³gmõÀü`øD¡°)£gž5„Ÿ:†@;^.¸hÂOE+@ɰy¬¼á; üÔ±¼\è OiÂO+À®Â+€ üT´ìjV€®À9MØk~ê\Îê¸X„ŸŠ†ÀkÍ ðRÊ\¶+€ üTvÐu8Ç~êk¥V€¶ì Ÿ´?u­+´ìmî4á§’ðÏæ ë`!G. á§¢Ðõh_ô@øé_ØÔ4+€ðSá(ñ,@;< üT2Ö ÞliV€' á§žðBÁÀ% ðSa&ÙÐqº~¬€ðSÉØ5¶”hVá§²ðbàìæk¸~z:¬ÂO…`\ ?½» ¯ÏY„ŸúV€Å`Á~ê»ÆV€€ðÓŸðúØ °Ph<ß €×}„Ÿ:@‰×´ÏhÂOE `-ɾB+Àb3vÂO}+À†&¬] €Íרg~êj/j €ðSߨ_ Œ_ÂOE+Àø+»\†Í °Û üôkؘѳûæÃ5 @ø©§ì+ÐÚ`¿ üÔy°Ñ üôo´ àìtÿB @ø©lx~ì ‹07Öö7w€ðSÑ@‰À „Ÿ ÀþŽÀø ^ЄŸºÀs½N¿Ô à@ø©d<ÙÜt½lˆg„Ÿ*@×—€ëâPø©¶<—îŸØÐ¬Vá§Â°ÑE]—+Àb\ ?Õ €7Æ@× }Ð~*[ö^z=„ŸšÀSIžMrfÓN/°ìÞ³¶úZó¹Yû--¯œ›ä]â4µ?§'¹0ÉUI.JrjG_ëp’Õ$ßKòãî»çå¾=اÌà¿é‡I.£©ÖþÚ®õ…$Û“¼¹´¼rgßÀ,žü7•nN†ü|gøóXx©Ov`ü™?¥2°%ɶ$—.-¯|@ø¡_kÆ–$7÷i?ÉÂæf\Ö‡ üðÖ°µ @øáØ+ÀöYoÂÇÎÅ £KÀË—–WÎ~èç p‰ðCÿÀ…I.~è—ÃIÖ’Ü!üЯà?‘äûIîœÅà)¾ÇpÌàïÊè%¿wÌêK~…Þü^¼Ö_í‡cWý™““þ;ø·§'ïî~èéÛzg1üo6˜~ÞÏ/üïÈÎ$¯ÈÍTk?ÉçÃéöÓ|Úª¿#Iï>ÉgÃC|†ß´ÿü$_Oò¡Ã?þ~wöñ3ü|ÔÕXZ^Y—ä#I®OòÅŒ>e·Ëª{ü—úøx»ð£¦àŸŸä›MðÏêèKêsÕ~j þ\üë“|9£Ïíö¾ê ?5Vý’|¡ÃàÊ‘[ýÞ_ø©¥ê_ßÿ¬Žƒ¿#É]‚/üL¾ê·—{_*PõÛË=O ?Tý“|¾ãª¿Úœø?|ág²Á?½ þuvüñà«úÂσÿ¾$ŸNrE’O&9£ÃªÿxF—{w9ñ…ŸÉÿâŒ~)Æbº{åÞ¡&ø;’Ü-øÂÏäƒQFŸ…?,üÛíøÂO='þöæÄïêd'yLð…Ÿz‚ÿ™¦ê; ¾ÿxc]ÿýc'þB¡_ðüôèÄtìÄÕ£/üLöÄoƒ¿ÐqðÛÿnÁWû©+øë;þw_ø©#ø—:ñm‚à«ýL>ø—fô+­·þŽ$?|á§Žª¿­ÐŽïÄWû©¨êo/pâ?Ò߉ïägÂÁÿ@Sõ·¬ú?|á§Žª¿5e.÷¾ãÄWû©çÄ¿9ÉfUzù-½œHð· ¾ÚO¿‚IÊ<÷H’Û’ü\ðÕ~&üË ø7;¾à«ýô(ømÕ|µŸžíø·&ù…à ?“ þc'þ ãàïlN|Á~*©ú[ ¿Ýñ_ø©àÄ¿´Ð‰ÿðXÕÿ—G_ø™lð/o‚aÇÁh¬ê ¾ð3áªySõ»þΦêß+ø“ãy~JŸø;3z_ø© øŸ-tâ?¨ê×c½‡@ð ÿ ªoç§¾àoKòÑBU_ð…Ÿ ‚E’oþƒ9ò<þ¿=úÂÏdƒe’› Tý‡šÿ—‚/üL6øg6U¿ëÿèà«úÂOUÿ¦‚Uÿ^'¾ð3¹ÐÏ%¯ú]ŸømðU}ágÂJžø9ñ§‡ùÌþŽ_êÄÿ“ßÉO=UÿsMð/(ü_ ¾ð3ùªe¡à?˜Ñ­¾à«ýTPõKøtâ;ù©£ê·Á¿QÕGøûWõKÿÖ$÷ ¾ð3ÙSÿÔ$¬ú·&ùµàO7ŸÛ?ÚÊÿÞtwÓÿ6ÁŸ ÞÏ?æÃÃIžn¾ŸÃ†€_ø©ÑžµÕ̆¯$y¼isÿÏp0ÉšàÿFð…ŸúÀb’÷œä¯ú‚/üLÁx¬ ýÉ4€6ø·¾ð3=àÕ$«'1&ùýXÕ?à‘~¦«¬6ÿiñ €vÇ¿Mð…Ÿé¿8ÞÐÿÁ~fc8žp0Éÿ[Á~fk¼Ý 0¾ã ¾ðÓ“Ðÿ–$÷ ¾ð3û `˜ä´±ª/øÂOOÀÁ$’ü@ð` ýÐPCÙfP3IEND®B`‚nixnote2-2.0.2/images/material-light/screenCapture.png000066400000000000000000000100111315604104400227310ustar00rootroot00000000000000‰PNG  IHDR szzôfzTXtRaw profile type exifxÚµXY’ì( ü×)æ–@ŽÃñn0ÇŸ»kí®®å.@"¥ÂQÔÿý3è\âDÈ«ÅBØpùä“dtâ¶_{Ë›_¿ë’ãÆWr:½ˆZ·C?ô3äzž`þ—k9Y=ìÄÃÐñâË ›+ÏÕÊò0äd—ó1¦tÌËþÂã)íéÞÜŽ½!MaÏ Iw î«8 pæòj3ÆQf/,‰Ç¯ºð}ìèÔ½ Þ©w»-rw Ú¡nbtÈY¿ÝŠÐ%">¯|õbÔͶËë"vc´8Fß½Ë> R§¾\Y=(‚#ïÖ´€Ûð(ú¶î„;ÂÅ ÆÚVÁgÙ*qba· öÜ8óà¾Úʽt1´"UÜ’Eg’¤.2ü¼yˆ¹ä¹n*xsË ¯uÓZ¯rÄÊ¡) cŒw7}'|ç>c¦8óO±.™9 “¹ù -Â㈩®ø®›.òf» ÖA]aŽp0oe7Q”ϹåÏzºyÚö­ÁÖÖV€a¶ÀN9ðf"ÆŒ8Fð“\œ—XUÓ7΃݀µ1ÇxéŠÊ.FiØØ< eå½"ÌGäPV§žT5¨iÔ¤9¸àƒ†,͙̕7µ`fÑ’åè¢C´cŠ9Ir(ašB2J1¥”3Í01;C#ç"Å_´„b%–TrEúT_µ†j5ÖTs“æ¶ ͨŖZîÜ‘JÝwí¡[=õçj7ìFìÛ’êDóH~aƒ¹)á Ü) •:$N½Ái„­i?4­â¼í—æø‘„žQú[†4 þ>yÍ(-e¬¤Þ1dÔ¤xvŸjÆ5j’IQÌ~è£Þ³‰+´æ‰RÁjÌ}  á{`êç>ý®TpÞD_¯ºœ˜­Ž5Âyb£­]Ï£5…‘3b:P€W'{_{°2Ô¬iÝÚlP^—!¨l?˜{~DïNü}ùKŽû÷S#x¥sîîÞ­Ùç[zNñwœô=Ð×q’~àÐ%Nz% pÒ'þÁлÄï8ésâHÈw”>'þ¥„ü'}Nü_HÈ;CŸ¿ãü?ò³ÊDŸÿdB>™LkCÌ0œ ¾§Öü³`bkc6cý²¦<ÓÒ/ †/ëDÿõ›Z ç†abzTXtRaw profile type iptcxÚ=‰» €@ CûLÁIlîŽuH: öQ$x–,亟­¡ SYú±´PǬ¸àPf»cõõœÕG­ÄŽ!ž_U•20ä<8k& jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá8e¯©”@IDATXÃí—1K1†ß”…ƒº¤-tVWO¤VD;ý ‚ƒ»C¡ÝìqqÒE\¥Q=PA¯ƒ]n¹¡]^—v¨½T 9]ò@¦¼!I¾„HHúm ‘cú¦ä‚ À§ßF6›AZ)˜6)ø-ðöþ½òŸ<ÄAÿŒ$ ý÷“%Í—d×dÈM0æ(–2|~yE†#n¯·À îîÎLLê8æçf‡NNëh\^E彿yý¶:Ù*¥´‘Ça¥<,°]ÜÄêÊrT^U\­²ŸIJiD`&•Ý‚Ew!2.žîïž[5\_Óº÷7îËû ùÞïúó}“Ç}N¹zˆ¼ *ÙsÑo%¿î?1õ~¯ÅæÜ¿}Þ÷äZ>gLá¼à_¡ò+—”€!‡vÖÆ÷âõ*;Âßü÷¾3c|ï¼·«O¾³í¾ž]alº7¤O>ºï;ùÞwÇCO¨½K~z0ªmöãÏßí=ËÞ벮ń§’¹z˜r®ØF1œ×ŸÌ¯pϧò)ˆ 6íÏn‡qÕyìvÑM×Üvë¬Ã TŒ~ùÌêýðáÜ+!ûêÇ#êÇmŸC Ó„6Ü‚"ò¦‹;rë‘7\AòtìôŽÃo|ù˜ïnþ›ÏÛA{k8gËå'½¼F j(rú—]âöíS9þ=ó!nì`5¡å¸¹Xů_Gtqï±Î}b£±Wj¸<ïp²e\›\—œÍÞgçðcŸ†æ>DßAÀ‰øéÌ›à ÈæìÎ^/þº µ„(hjh€£?9b¨IhD$I–"UZ )&I)å¤ÕrÈ1KN9ç’kn%”X¤¤’K)µ´êk€Â¤¦šM-µÖÖÚ8ºñvcGkÝ÷Ðc—žzî¥×Þá3â‘FeÔѦŸa’þ3Ílf™u¶å¡´â’•V^eÕÕ6±¶ÃŽ[vÚy—]w{CÍÝiû„šû„ÜϨ¹5E,ž}ù5nçü8Â)ˆbb>:ÏŠí3[\Œ^‘SÌlõ$…xPs¢àL§ˆ`\ÎËvoؽ#÷#nFâoáæ_!gºÿ9£ÐÝÈ}ÅíÔ¦ÒÝÉÃ; Õ§6lˆ «4_šÖ¤/«JÜQz±ÙT›Ë¥âŒžª]qæ,¹O#HÑj%i÷½r›]¿Ïç^.®1/Åm“!nú.Akߦ-kÂ?V[XÛ)>ÔIŸÚJ}HÝÛ¯¬Ç¢¹^Soa.þuŸ¥ÏÒŒ{”í]5¡¨=Dml¼}ó[BYÍ÷¤Ç,¢O½ªëº³ó ¸NRÓ] `tˆ£Á-âåj3Q˜Hé\=º{WäXA•ý~5\HÞ1l›ÒèH ˜i× ¶.aûÚVk¸$ªGXÈÙsw‡Çd/£ 1aÛãîQübg[·mަG‰õ[f¬c9­O™—jÈã%UÇe6l!†Á9yÛìöëšñcK HŸlC+'ǵº÷…!áæLØÜN¶ã¾:×ô–4Y±W|¬å¤õ*.ãÙÍñkt~,9¦Nº4"ÛÅìz¶£S¾bÃ÷2[Im¤Vç¸b“J÷BÝ@”Q‚ª±ã Á¡”„2«p0ŒòÊÞª÷,^<1’DÔã’æO"˜™ñ¼6¥è-å.0‘,a“f¨ìüÒ€‘X²‚N íðP§Ý(t«ÄcêX¤[!]&µØ?Ùh>kµà«µÇV-rßX{lÕžëÝZs™{l¸­ý%cïu¬™ó^´7†¨Ò´</ûÃÆÛBm’ŽË߬ÌßXi~‚ôw5Ÿ ýmO Œ©Íh^/°ÙrQÍ1I8ìá§è¬-)#š€îʆä÷òŠ# ¬×XÝB¥BgúÆÞ =ùBv¶”© Ëßäµ{=€+tu$=ŒóeR'ætRe¾6Áí>R¹LÌÕíqe–ʰm&85”úPµüè+µÓb§VZ§‰0,ÆÅ ¸nŠk"Á?‚åÄŠ{äB—:vTËq|„M5½UƒkY®iH¤qŒíÙqzç É#saržžgZõôik³€L¿ÓAàíiXÃäägʧ­JÛN[ÔçHNë¹×®Ž‚œ‰‘gÄèGÊ¥Â)õµ†îİ'@"n2¢›S´'§ÌaQ+ôB¼° þ`Ä™ÄÞRN1/½’è9(ÿÙ5†Lèšò0bÎM‹v*·õªÔt#4+×xâ%«¯œ²¬'\ŠÒô‚–¡´Ôzž®fóZDßÔª‘ªR^÷ÛÐBŒ~ÿ~BS gÐЈ㗪·¦ný¸³q©½Q»ù{‰!Íæž¢zøå´=£¡§?ceS»ÔÈyGùÕpP©IÀ;açS-‡Û†ƒi3’§Šì¯Tðw&£tؤ-Š©=®Í U‰«>†¦Ò¢O¨eGÚÉáÊðN—–ÏBÕ¥Ö`艚F¦íÓ Ærz¿uÞ¤´j×%çŸÕ>%m8+%TŠ.µ¿¬ÐJǤóm0bÒ(‰åŸêâYçÄùÈwšÆ)yt¼@í§Ã¤34¶yÒå‘—‚X‰&GhŸ·íÔv¥Þ¼4‰OÍY}žÕ ﯲƒIÉsÝè@Ñ™¾ÑQÏô††C BБª'd)ŸÒ^nr+˜+MyÂýEû2Xh²q¸µK;ç¡s\>s ÷ƒs["PŽàK)ú¿UÛ<æl•r”FÎG1wÓº÷õà]¯#ߨí£OrÞÅÕëY¾y)ç¥fox’o~ÍÿìsË©çäô“ SO–cÉBïú×yL³…s&¡4<48Ž£¬„]3¸1³¤M©§ÆõRX”ç*7m»g„~ÿcyH­û eE³î!v0T ÎcÌ«1„•–ÎGm-Î9>‚ú§Ž=ÙE ײ¡ÑC2í&;혋ÄÕÊÑ[[‘ë”È¡vÃì¾2‹¬P2z É?R><ÝéÒbW*PŸVåì~½Áˆ¹´OÆL¦é©Ê9â–Úò·É4Å —št”³bÏE&mGJŒÍµA0äìe›þ¼¦»<™“²E*“©6å‡~£ !E4òÛcÔx4 *›™ìð_²«Ý“ˆr“ƬÄ`ŸíÙr4*%'ÆŸÑ ”ç¬=-…&SËi>j ¦ÈD‹Wï>,~í%Ìï5Ÿw“ZÔ«§'ŸjçÄNoR ¡ïVóã?sq?m5îß+ñÿAÿÕA0ÖžpùÈÛ\¨¼ÿbzTXtRaw profile type iptcxÚ=‰» €@ CûLÁ‰¸c’æ: öQ$x–,dÝOÈÖ8„Óá§§zéÇÒBÁQqTG;8û‰z®êG­;äWUå1ú᪳ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá* é8IDAT8ËÅ’?KÃPÅÏÍkDWA,Ž¢œÄ%(Å@WQÁ¥›_ÁIg¿„©©–¡ŠCDpt7ÿ”w\ª”оJ*xÆóîùÝ÷î}‚.r=ÑÙÓäBÛºsìüÑåÙI”®•´±¼¾±ÚŠãc­õHêè#—S›×ç§•ž×óGEä–äºëyxÈ™‹ÂàñÛ°REC&Þ?[~§‘L£¿ &À[¿´ˆ¼š ‰ @òª' Y o†îuuÓ   ìŽHn7kalüíuªœR+ç“D €{éðŸH:ºN*¥ŠZëI1ÌáÁ±óÕFµòôp=¿ `ÀدºŠ¼8$y Kk¥R’$•á[–Öz'c"²k˜Í:@’3I{€%Œ[ƒ®ñÿ_`g?Üz‰IEND®B`‚nixnote2-2.0.2/images/material-light/spellCheck.png000066400000000000000000000073461315604104400222240ustar00rootroot00000000000000‰PNG  IHDRísO/szTXtRaw profile type exifxÚ­–k’ë( …ÿk³$!ËÁØTÍfùsÀ$i§“Ü$¾q¥ÁŠŽõ Ü´ý÷o£ðáœy‹)ä>>û,“äöÏ>²óãï¼q—ÉÁN®Í&ŨûmئÝn ¢Ÿöåh§Xgœ4]R΀Ú3 &Ë9©ìvž÷”çºâ<Îü.ë´Ù>Üßûˆb¬†x*$›f|mÏ¢P QË î“ô™ÇÜ»×ð¸vtÞïRºûÚ¹2=ôX ra:„»M;ÛãÚ ýTÄ—©(ášâWíZ[SkÛþtÅT*Ð|¨K‹ŒÁÈëXÖF| ó8®Œ+á+ˆ­®‚çâ*qfau=¯\¸ñ6ÆÊ½l1ŠTÑaK%KÕ.n5ëJšÀ¦‚›Â,W-<ò摯rBæ•á)Œ`Œ¿.zdüæºj­·8ó(æ^+è’ÞÓÑÉõ¿ðn³¦6ê;.ºíBç~€U´Qæ„,nÙC,Æ·ÞÒÁYágΓ۷Çu@‰Û †\`5ì¢HdFø(õ²€›ÉÊÔÀF5vrcMäá+&»G @˜l’B°¼7ôOô =TLÍ“™‹–,[ |°B ýŒ*Q£CŒ1ÅKÒä“¥bJ)§’%+Ž0Ë!GÊ)ç\ ’„.X]àQÊ"‹.~±%,qIK^JEûT_­†kª¹–UV]±ý×°FZӚײñ†VÚüf[Øâ–¶¼•†^kÚ|³Zl©åV®Ô&Õ#5¾#÷šOj˜~ñF æ/!¸'Ö™˜xñØ  ¡¥3s‰½—N®3sY°)L@­ÃY¹A¿±Xã+»¹—ÜÈüGÜä9êèþ9êè&¹ßÜP[û{¯bû.ì5uÚp°ÁaKERéï¤ãØpê÷ù4Wy椂Þî™×Û#ײK¡óZö‘>ÓðHËn¤óZn>ÒòLýút)t^Ëküoh8J ?æzYÁÛ :ÑÕ‡ôu”¨r–¾®ÑUô>—סéUo|š>Gþx¤?u컪èWˆ´}Ý/y©ëa’ã™}ú(¡óÛõ9þÏ«ôõÁö }¿Mß{¯;Ø>Óðì½vR}¯á¶ÿ£dú˜ë¿}µˆBÃ`zTXtRaw profile type iptcxÚ=‰Á €PCïLá@Áuä_¼ypÿHH´M›6O®û)ÙFtAÒyp)Û¿lY©#z& CL;rH59û³]|}WU^2’íP‰ŸÛ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá/.ä5ÂIDAT(Ï•’­rÂ@…¿0Ìàp¸¸J`+q[ž@puq}¢Z¦ƒº¸ëê:kª¨ŒÃU‡«¹™Ùn“GmvîùÙsSÀù0^/à!ªœ¹€Qö]s`,¹£Ä}b ´væ–K ¶Àð·»[*àìM`¬®0'l£Ê)ª|o@eO»˜àÑ+çÃÁùp°2;á?è„ çÃø´û÷lÎû¨²ê! ÐŽm¨ê¨ÒdƒkKUF•cFö@3²òNV\Ž0íVš“£J]t«Š*möGÞG•;g`“’Š‚6æZG•Æù0KÈ¿ž:ØÎ0ÖVò¢<˜ÀR¤®ô‘ÿHDží#üð¦dî®ÞIEND®B`‚nixnote2-2.0.2/images/material-light/splash_logo.png000066400000000000000000000456561315604104400224670ustar00rootroot00000000000000‰PNG  IHDRôƒ{†éGLzTXtRaw profile type exifxÚÍ™[r$9ŽEÿ}³‚$r9|€f½ƒYþxDeUfgõØ´õÇH™R(áN÷A=þßÿ¸ÏñQsêOUëm´–ø¨£Ž¿~~þ±ý½Nÿ^èû‹?.XâΙë»Èï…Jþn|-E~_»çÇÃ_ŠWÿ¦vi~_Q~.Å“Ú÷í—}Ÿý}íÞ ýuEòÇÃüó/t¦›þúñ—ÚÝ{ú½þÙݬJµç»©ô½Äûˆ®ïæ:+kÉø¯<¶÷sðÙÙâ¦c'mú¹Ò~dH¦ Wª™rÅßï[6K¬Ù³ñ=çËû\/–GÞoSj|ÊÍVF9OéôdÓ·ÂÓùÇZä½ïxï·¥sç#¼2 “·¿|>¿{òßùüq¡{â"QÌwEoƒseDçâ+¯¢!r¿5Õ·¾ïçó£­~Dc Ô·Ì Î´>—X*b«¼}.¼NS}Òg4ÄÎ÷,ˆ{+‹‘BR“¢Ò$YÎ&B;ý™¬<—šÕ|ä¹ô¦”FszŽ{ó“÷µYóçi¨…F(#b´f”I³jUðcµƒ¡©E룪MM»­´Ú´µf-8jZ±jjÍ̺ ›½ôÚµ·n½÷ÑçÈ£@a:Ú°gô1ÆœÜtréÉ»'¯˜såUV]ºÚ²Õ×XsŸ]·î¶m÷=ö<ù”ÃøŸvì9ýŒ3](yuõææÝ‡Ï Ön¹õêm×n¿ãÎ]ûvõç®É/û×]“o×¢cõ}ýÙ5ž6ûãt¢Ñ3:–«Ðq‹è=K]jÍѹèY™¡ÐL×D£9G¢ct°ºd½ò£wvî_öíÑúê[þ»Î=ѺÿDçžhÝ·sÿÜ·ßtí„îíô™Æ˜Â¨i*bãÞg^KojÖsõ%Ë4€šUP`Ô¹Êè÷ØÊw]ó£…²õ¹VÉóè”ú´ä¢Õî¶ê¸É}® ) å²\ûX«Qïž}]meSÎÛxál7µã:½>CãÙ뽜nYÛ:™ß̲¬ ¢Þ 7É}·C£¤«Š÷¤ÅWw¥¶åöz©ÕsÇ9ÊçäXöÞ(ÌÎvæ,¾ïäêmßâM§CYæÉÛvtm±y¨fZ{µg¹ÁέòØëš]ünàá9¯E;‹Ì£R¥¢kH¥ÌŽù•&Ѻs±!ÓïÓW–¶æªôÆfÛm¤6†W1ÀÒÓÒñ{(ó<6Tä2´Á¤y€í ÚÏ$u ãýN´Âóž›lOW¢1€ëó(œÆß~þ·üöûiG1Íá¶ŒòÊ´ÿR›Ò¸'W…Rmøñ1®F›¥g@/O+ÿ¢o!k)€åòTJ}N›ÃdSîî¥_÷[:|ÕÏeØîåʺ¹ÊP×½¨ÛhÛ}-j¥4‰éßg´[ý”IKó•væ9–·Qnc'Fæ©u»0.µï4\ÇTsGf¹y‚„ÒÆoí±ä–ÑT÷]^ïa}›îSJ3F&ëÙÁ(íZûë>Žug"O¯-MÍj€¬ØŠp=Ÿ¬iìîΈN º+°Û¹$H`‹pÉÚ…÷§÷lýô}ÚÞ&kIÏìCÒÙã@÷džw³ëIMËHà°1 L¸ 炽™x ³PKÜ*ãÌ­\ÉJ:=ò=÷f–$š@üR0§¼µ'°:©BcûUÌb ©ïë†ð2Ãì©öƒ¸Àf8íÄV×»b@i"‚g;L—ô0È\Svj®6er•6AW•WÁИŸj í¨Ù•òC¼ûȾNÉ”hcè¦Ì]Y„IÝL°ôpl° t“ö®P6Œ`ôÜ@*ìÐý20£*h·&viïtCûÞ¬®IàÄ*>nâ ÂDK’Æmvb-ÉNõ)—Woò ‰Ö®ëxMœÿXð˜åììÒA~ØŽRmi þmÜ–©·>ÀÓƒÔ6·£ŸÊZk,€r UŒA¤iî}S`/¨ûª°Ô )—ìî­.p¤9Ýðô˜Öj–¡ˆîð–ÕÐBŠj¡ « X×.7€²a›™<Ñ¡Ýà–)¨²¡%Pv{¿V6ÙØpBò•+Ü5:4‹K%N d ¡¸§> ¥ SŽQOvu¥ø‰ò}Zß@ïN—×F$K:O4€½ëú\i›Oô¬Î|M<‡$˜êëÙ¹#ô‰™W‡ª^JÉ€³½ãYÈÑБÁyv6Š0¯ ¾¹ÝÀ ód{Ó¿F‘V;'äEñî'=o»³ÝZ‚x€RèÃ(måÿ³²,‡ü5÷¬¤€ÐnŠÁ–r%›™œ™ÙN~B ù_è‚Èlk7ÞY0V6Ì€_`BK”m8¤ÁíaU:‚‚V|FPл^iè*×z*4ónÜÂB1á,ï›l…ümt~eõwX†d]¦?”mZ[y>Bs^i€©¦w¨†ß…öÞt†i²@óÁµ ö=7¥+»<zI¨=N;ädÇ6æËƒ]-&7 ºÏð¼íGPbî1ó«ªôä >¶ ½ Æ Æ‚›¬¹Hê7H³O9ŠB®2LÆE©—Y#ïÃYíCRLW±\悸‰!qí ˆ„Aµ½ŸíÜÀ‡ãº„ cT…‘L!ý™ òó7C¥twÔcƒ­8Ë(N>™C£C4—º€*“ˆ˜Âmë¡É=’ÊÆ!/Æê¬Ä#ºJË ñôƒÑh@<à\…åšé1“Ü)åƒÔ)Ú=°`;Ü?íu1t˜£~jˆ%Fí<4)Êœ¦—]€RñBqNó{MÁ΄u#í2i;yô¿%–|•aÖ@µGqáv¢Q Ö«¹<ᦧ{–Ȭ B>‚@WÔ3µClÁ"_|cÌïG €hð_ïR¬óóÖy¤õ:ƒÍ­±¾âq vŠ3r!.›ÌËH*úÛê¹dÊnÛûL¯xlõ¬e鉄—W€ÙàrϽ_¬ìÆÐTüeø˜EâÉÚäŠ ùëg׃0‡‘爞B àwˆã"-07δå˜äˆ¼BE›BK!¬ჩ…R‰´¡´œQH9íÛÐçí‚­Ú}¢åa 1&9LžÂ $¨JÐz€™„·¤•ø³0⦎j]Kl¥`ü$4€0WaÐÄ 1˜‚+f´@´7¸o{àÄt2*h:a ª×¹‡X›ïÁ““ ±Ò•æXûLŸtÜHdCÁ I„Š™ÚÅ£µÛqY-(Œ­5BÎk1og…ïJ°úQ`±,݇„D·¢E<˜¬ŽLIˆ›mæ ÊÃZl\v™6ÎA£|w:™z<Œ@çúé:ÜbGù!‡‚íahS™‰D²²ºPüåÙ¼Fï`°ÏO!ø`r[<“IÐÇö€E;ɇ\~T ¦ˆ 81r÷e¥n~‰±áÆã>q†D…X(m µŠô‚ * u$3úé•ÀHÝ1_E€^JÞ‡~ ÙÆN¿&‚QX¡Ô ‘‡iÃi! u!0‡µ=$.AyÁ Ú•Ž<Ž¿Â@‚Y'( 5À«Ã4¤â1xJjÈaÌÉXß\ÿR¬°æpE˜š¾ôSÿ=î&E¯H<5DÔK–¸w6¹_¤‘|œÍEÍW¢¿x y”mBægÌB U‰¨ËôÖy&É­6Ü;®ó®N” oLZ…—r<8ŠzâÑÎ òƒr5X‚Ânœ›(;°†e<¡ôÐå$Ädƒe`\­\%¥Rãçž8DOdåõQx†¹Ùk[Òz¿Ó=ÄÛ¶¾d|?Þçu³}¾3wg‚_ K‹ï‰hºÓ3äpʧK°!CµsÑF‰¥a!Ç“þ¾××>1‡!^è LZ<‘¼à‡âÇî‰<­¦d‰ÊÑm’•À…)àåRîÎ9X~ˆsHJKœΰVP@K´ƒß‘â%ãz„7)NJ®¤¼W}°5; £ŠFëãìjRKTlÁ”ä@ò1MŠ!óeWаÉis„‡Îï#‰¤‰1(5rÆ8¡«‡Ðª1˜ò–D=âè¨\¶Ú¼†N“ŒÉš“éºOp”ÅÉKDÙ­1õç×°lOØ(¼0©\áºMèõu5t¡lcJvŒÚÿzg‰S–ÂÌ3*ØÅPú3Âux±%A @¡ Vù^ÜÃV˜i Üë‰ÇƒŽ¯Ê%ø‹™G‚{ c|bŽQÄØú¿þß<óZ ° ±¶±<ír•ˆUÁÝ`j#/¿;e…R9‰vŒëq$¾£ ú‘l:@ûY¾žÑ{ ¤3"Æ¢¸ ŸqA'ÚÇßÈ>‘°ûb]õf]$œHT™þ;q@|cØ)å¼|ȹÅo›ÿ~ ˆaÄ´^X!6a£1 µðÀZwG‚bY›Ù'•ôTÂå:}˜nü*î”ò? µ¥°qòƒ£©Â<€ª$áP¦o^)Ö)¶åØmBO…>  ô”°ÃI…~îËÄÕq‰øñB€eßt´#’è™õãcOb<Ëy­E»â¸8ã^ãœîL \,†/F¦èk­ã¼ÒxhâK!³u‚¾<ŸXùF¸öµ/q°°ÃÃ8­†6‰/nÄv—âlm‘ԈѰI’í²ñJ[­× @Ë{0)Þá6‡ƒ"°åoïÕ((±ƒ„¢.¢(ölwÀˆÂNfíaê¨QâÐ.T°î2ŽeàIhq— ~ ?aËlyÂÙ=/:~˜Eƒ'ìƒ9ìñ÷ªç‡'qêƒQæqPâXWHÍÓ°ŠWדãô +¤÷B‡fTóà„„vhu@E ÅX;z½á‚ ¯Ž?Ù0$r„ص°§<1«:u ›“¾GG)äBön*N÷–ÉÇäÀc{NȤ3çÀªZ$vD±ÇiapÕRÒ8 0p—8 §¹öŠâaI°vQðñÙF—QS¾âÉ1,`›þƽLA"ÙF®iq¨H¶Fá‚åô=Ão—ƒ°Çã0^ˆ3~Øç< Ü@šÐÃÊ£U.¸£M³ñ¹7S—,}ð.°Úƒõcã·,àD¢fË8d-ÉáÇл®";¬)Quod;Ρˆj”7çœóɈثû P‡ rKz _,(Eª°Û,OK$)Úlñ7ƒŠ½- ¨Òž~IqA$h… 7¶RŦÔ‡ˆ(T[x« ·…_hr1œ'jè(Ÿ” ©œÁˆH¸…„-òÈ¥Gœ®Þ˜7q°ï$šR"† "°Äe˜nš_Vpv‚7Œ‘òf=¬‰K„#aðBUïqþ!þà˜¼~â F9þˆ³… c˜A7‘œŠiÌÐLãI ,²GD‚ÆSœãÍÊúé¼üùwØ÷ýÿÇ…pÖãùû2Ô Ê/u2bzTXtRaw profile type iptcxÚ=‰Á À0 ÿž"#Ø`5É:µ?ýõÑýU'R :@®û i[ápøôT/ÿ²´P°‚Jc¯\„ýD=gõµ$M_U•0•ÔŸÂÐ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÃÃÇo¨dtIMEá¢ë4z IDATxÚíip[וçÿ÷=lÜ@‚;î+¸‰’¨Õ–-Û‘'q6gäîÎVÉL·]=[ÍLwýeæã”ý¡{z–ê”5=Õê‰3-»{âÄYl)²ek—Hq¸‚@p’ ‰å½;(*²-‰ïXÅóK¹’râ½»ýï9÷œs‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ø=l/¼äŒw®ìîÛ²Þšß÷ß(3•LÐ0!‚ HЈgiöÔjhí<8¸ô-ࣹÛXåÈZh@ËŒ}þí9™B2æÐJÔeVà+•'-f eZÔ•V3>A zŒžç 니heÜò ââr/Öµ!@/" D°Ê#·Ín5o{ßWtÇtÀ°ÉQ#ã[æ§‘‹,d° ®ÞOâNA «Å±àäý v,³UôlŽã“õlèdD4€tÏgßFÓr!ÈQÏ ð¬±¥² uYÕè¬ÙGâNA ? ç’ûö{“;Ç…YÜ;0Ç6M ¼‚Ìaˆèdf4®ãDÙa<Ý|œ„ ‚ AßfjÁåñOš~³p^Ãz¥Y¬ ‘­3ðTƒ,"ÃÊM°¬æà`v NVF£¥žÄ ‚Ø›‚>:3Á]ütæ}Œh°  Ab<}VŒ’ˆr_¾j:ŽÎ¢6$w÷«©‹g®À†n>‹Àßç@²Ñ1ã;¥Ïãpå²Ö ‚ ˆôôߎ|ıü n NøÅÈžixAš¤<<§ëÀWJŸBci ;A‘ž‚þŽý=þ?}¿Â¬>˜Vo±Ä ø²Ü„U~Í¥$êADúúå‰[¼osÿ¸fsÏw‚ /h¬8ªmÅ“%¯X èl ‚HqA¿8ú ?»øKôê8õÀ6(ˆèð"à;u_£¼Àü5 A¡M"ìÉËü¯æÞMï'çòç¶VKÚ~¹ y’¿êZš®­(°¼D CA¤”…~qò2ÿ¯óï`XCb¾’€ïkâÊ¿ÒUYP~ˆZ„ ‚Ø !?raòcþßÿ‰Ä\!¢ŒŸ„¯ãÿ:Þët-¸ÏQ‹AIô SŸð¿ö¾‹!ÁGb®‚ Èñ÷‘ø©û—gÜ^ÏëÔ"AÄ£ˆëúÅ©Ëü¿-þ†µ´Z8ǺÁ[ËW!Ëò«.ïtmE>©A ô‹ŽËü/çßÁˆÆO­¬™CÞŒ€#XãÀÏü× N gœ^÷íÊ|:S'‚ $èÆ>æµ°%攘¦Þ2ßóíÆ ð~²|¤ÐI¢NA<ˆ˜Ÿ¡_ù˜ÿõâÏa£¸èÄ|ãÓb¾Í&—ð·Ëã­É_vÒ™:AWAïröñ¿õþý:_ ß´ž~b~¿¨ÿƒïÞÿÝ«Ô`ADÜݾ9퉹ZäÅ|›„p+8ÛÜfA±ô·‡Þã?^þíã}õi¼,óMebl}äZp 3ù‰:A[Aÿ`ôþ¿V~‹9mZT­˜o(ómÂñ‹µ~ü“óœ‹Ó·©! ‚ ˆ] úŒo¶öâÊM¸tëÔšjÅ|]½˜o#ãýµ;p¬:;©1 ‚ ˆ] úoÿN¶#ÂÈû«˜í3óPtb¾G^Åÿžþ9FæÇ©ñ ‚ ö8»ÊCðØùçßÁ²Iú‹0"2¡E•”‡*}LÚl˜´ÙÈÕdà èÀ¢Ö ˬDÖዬa9¼†™ ãò"–ÅMDÀ!«UdYÝ™ù#ÿ[hÝKƒi3à\.×9IŠœ‘$’$óè1Q·ÿy»¢¢"¦UôFGG¹,Ë;ïˆ ŸYcc£\’dÕ¿«ÓiQSS›Ð°R‡ÃÁC¡zkà!ïkœNçmI’:%I‚,ËQA`„­1£Ñˆo——W¤LåEÇs* Ÿ“$É$I2dYB”¯ A¶ç…O£ÏZ,å1½Šydd8Ú.ˆ¿…£1éñL¿ †ÞÜí˜c `L€ ÐhDètúº²²²‰xê`t óâô¹Ÿ:ß;ówòuHb2] ƈ©‡ó­èÈm@ËC¶>…ú¼nÓŒÕoÍ…¼„Öá¬bd݉[>úCSX4„V⡈òÌ|'ZÄBüyùwñLýñ”Ë/ðx<§–—}çý~?–——±¾¾H$Œp8ŒH$YæPÛŒ10Æ Õj¡Ñh Õj‘••…ÜÜ\äææ!//oדæg?{‹ollì8}ôzžzêé®ÊÊÊ{Å~fffjûûûÇgf<Øu®ø½222ÐÒÒ‚}û:Ò—}}}|hhëëUßEeef´··Ç|r»]ç–—ýgüþe,/û±¹¹qo¼l9Š…•Ý]T·ÆËö˜ÉËËCnnššš>w&''ùö¼XYñ# ~ê=£‘í÷ÜšZèt:9ÈÍÍCnn.êëëwõž6›_¿~œËH= =Nœ8᫬¬ÊWû퉉 îóyá÷û±¶¶†õõu„Ãá{†Çnúãþu*;;Fc. >µn$UЯMÝæÿqæo0«&©ë€<èÑ&”á‹™‡q(¿–Ìâ„>ƒ/´rmØï8þ+Ï'¸Í˜ÕmBzØâ½}fŠ­˜o¹Y|?ç8þÓ‘“2‚>==ý²Ëåzsnnkk«ƒˆ÷¶ž1ƒ999(--ÅáÃG¢nŸþôÿðÍÍÍ?§×ëñôÓ'?71].×¹ÞÞž3 ªÈh4¢½½Vks\ûÓn·óþþ>¬¬¬¨^¤Š‹‹±o_GL$§ÓyÛétv...`mm ¡P(îcF 0sPVfÆÁƒã>‡ÆÇǹÓé„×»„@ €p8÷ù(Šdff 77åhiiê=m¶!~íÚ5¤ª‰n0èñÔSO«t»ÝÆÝn7|>$IŠûsj4Zääd#?¿娫«É¸‹ê¸—<¯ÿÅÈO^ý~R$D€M ž5ÀéÒc°è‹“>Þ÷\Áùõ[¸Ǻø™C7ûè‚Vz/´žNº¨wuuq§s +++ˆD’s£Õj‘››‹êêtt¨·vw+èÀ–+»§§>ŸWÕȃɔ‡}ûö£®®..ý911Î{zz°¼¼ų™ÐÑÑÚÚØ=Û7¸ËåÂÚÚjBÔ¡Óé`2™PSS‹ÖÖÖ˜·»Ëå:799yÆã™ÆúúzTž†Ýoz ŠŠŠPSS«ÚbœÝápð±±1,,Ìcss3)ï$233a±˜Q]]ûFyùîŽG¢ Š›\q¿Ú+º’"æZ™áÙH þ¥é[øaÕ×SBÌàKæ'ñ¯ÊÎàÐ c@Ë spbCð,ÍžJV¸\®sçÏÀáóù’&懱´´„þþ>|øá‡Üãñ$¼]jjjXkk ŒF£ªïqÎáó-cppSSSÞ˜§óöÀÀ`Tbž“cDKKKÌÄÜápð_ÿúWÜn·Áï_Nš˜@(ÂüüÊÌÌ„ÕjES“5&bn³ ñžž;˜Mêæï³í¾¹¹±±1\¸p»\Î]×yèé¹Ã{{{áõz“ºaù¬¬®®bppW¯^ÙS¢~ùòe>44ˆ•••¤m¬>‹$I÷ ›7oDݪýÂèe>¬O¸užÁE|…µáOª_Dc^uÊ“Îxü‡m/⇅_BÉ’¾F¢®œó ›¸¾Ô÷ÒLB/o±Ûí¼¯¯óóó)3A>;Y<úúú066–ðÅ«­­566Â`0¨^tggg1<<üf -Å7gggU÷“^¯Gcc#ÚÛÛc2óûûûy?|>_Jºo#‘\.'úúú;wã%¹uë&ÂêêjJ¾g0Äèè(>üðâžõ?¾Ä'&Æ ¦f´@ €ááá¨7Yª½wÕKìçx*\ƒï—¿sFqZ œï4¿€MO"wM¤ÄÌ =X ¯$ìò‡ÃÁm¶!øýþ”=Wû½Å»›m.—ë\¢ÿàÁNVWW N§z3âr9qùòî]ÀŸ|ò w¹Üª­D­V‡úúz<Ø1áv»-eEîþ Õüül6›iff¦Ví÷ûúzùèè(677ÊD"8±c©Ìµk×øÔÔTB‚wC(ÂÄÄ®]»¦º?T úÔ¢Ë;¯õ#’À45àdÁ÷Í_Eu¶9­з­Ï/-ï0t«x‚DÝÏ7àÙ˜OÈoy<žS6Ûê³ØdŠúââ"ìvÛ™düþ±cO°ÊÊ*h4êÊ?D"8¸uëfÔ|ãÆ >9é@$¢n1Óh4¨®®Â±c±I‰œššò mY¬éÀ¶—dddd\ݦe˜Ûívìœú˜:¢>9é@WW×c)êCCC|rÒhê-$Ës29é@__ŸªþP%è7çzL¿ÙJè‹•ò,|³øit6¥Ý *6äç}«éKèÐT€¯„"ê^ÄO¦‰ißÌËñþ­ÑÑ‘ó©êfÔíñx¢ÚýÆ‚“'O²òòrˆ¢º]q(ÂèèzzzT?÷;Ý|llTõb&Š", ž~údÌ؆‡‡Mj£þ“$EàtN¡»[YÙôôôË6› kkkiµ^m¹ßG02òx]úäñxN§Íæj›õõuLLŒ« ŒU,è“ .n‹8±¡IÜâ-‚á½Ç :®¥ë`²šjñêg ¯ãî~ç<?l‹ãoÆówìv;÷x<)ä£Öq¹œ˜˜HNÉ\«µù•’’‚º¯M Û¡&v``€CI Þ§A@QQ1¬Öæ7bõÞ½½½|~~.­6€÷o¨&'p»w>®™ššz3]¼V‡ãQu‚ؽÂNjÿQKt¿Á´Á:Ÿn›Èm|>&''MJ?¯Ø÷7³6‡ß€ŒÄEÃUËFÏÞ“ÆxÓ‹¯k›«"ÑB‚½.å¹f)mÇÑRõérÕÙfÁÊá…†çÐlRôZ[T k–Wý£×·6ñu[Ѓî…ÁóØEy߇1;;«jE%%%¨¯¯GCCcÌžçþEÕn·ñ±±Q,,,*¶ÖƒÁ fgg’湩¯¯gCCC|` _UØ}Á}p»Ý¯vcär¹ÎõõõF•–““ƒææ–]×üþܼœS—k®Ñh`6›QWWÚÚØ]VsE¿~>66¯W¹;vcc³³³gìµr¿ÞÕu[•·H¯×£²² µµ»¯v?÷oônݺÉÇÇǯ••ØívnµZcÖöJãF¶­ãXàõzUYç999hhhÀ±+|ÿÆØårs:§ÎLNN>òlk3›ÂÂB—(®\¨¨Õ6¥MÓ­ÍQÈÙ‰;ƒ(s°¿H] ÜôÆ<Î þÿèü ‘õ¨EüÓ,@â2<„‰à"!ùà NÇ¥oÔ%Ef³--­1]°>‹ÕÚ̶"¨MJó¬·…1™´´´°ÞÞž»¤(wsÎ1;; ­Vû*€×~o!zN ôŸ‰&X133hii‰é€t¹\ç®\¹¬xÌh4TVVáÙgŸ«ç¤­­ñÁÁA(=úØ*òà1³¶¶öêÊŠò™^¯GCCŽ=×÷<|øëëëåCC6Êõ‚Á |>/Ò•åé´ƒMMMèèØ·þØ6Bºººøðð§³ ¶oÌËËCYY ‹TofEå„X‘ÌÄu‚†ŠH>j Uß{oø"Þv^Ä|$1àæ†Gð»Å>üýà»öOªëLS9rEý‚¼†ìO ‘c°622• ÏöYlssËÛñóûwÂÍÍ-0™”ÅpÎïF’N$5Z¦£c?«««‡^¯Wõ½íóµ?¾tïù‡‡‡Ï{<3QŽ©­­Ãþýb¾˜-//ŸQ”·}ñ‹Õj­KDÛ×ÕÕ³ææf9ŠÇÌÚÚÚk,/û+ó\‰¢ˆòòò¸‹ù6ûöu°úúzètÊÆ˜$IðûýHg¦§§_^[Sæ•%%¥qóûéììdÕÕ5Å­¸ŒŒ ˜Íf<؉#GŽœ>rä(‹Æ3¥HÐßw]…%._õª¾suº ïº>Æbd=îÏâ>ñâwã—U ºEšœO©®¼†äÆ%¥­Û;‚®±¾˜þaŸOyùJFƒÚÚ:Äú®òGQ]]Íjjj Õj}>Ãçó%}ñ9rä«®VþÜÛD"LMMá£>â—.]â.—’¤. K«Õ¢ªª GËb¦&ÂX¯×£®®ñ¼3ú³444²ŠŠ*Å.á`0¿ßæó‚®ÜÌÎÎF]]ýÛ‰c‡bÅÅEм&''Ó6…M–åSj6XfsbëœTVV¾a±”£¦¦GŽÅóÏ™µ··³²²èÏë z` ›H\z’† (6˜”w—]—§ïÀ±™8÷éªÄÕù>ô,Ú§À‹lQÿ9SZÞC^‰½¨÷¬MaÞÛ"3j.2ÈÏÏGaaA]¢'raaÑ+yyyŠ­\µ)]ñâĉ¬¢¢"ªu‡Ã‡cBu4ï–¥X§žz:n–Éæ¦²1ÃCaa!vŠÞÅÅÅÈÎVf¥K’„`póï©lmYƒ% ÝènSRRª¸Za8VìqHE8çµJÆ233ú|ååå¯>}š=óÌ3,V1+Š=bàHä6MC¾>WñçÝksݾH<±ù­#볘õÏ)þ|žÞˆLá.¯m÷{ŒE= • écÛ&Á ò‹WL¦|”–&ÎÒÚÆb±œÍÍÍS:é ¥N]g«µ¹Îb±¨ÎQ—eIuJŒ 0›Í°Z­§ãùNjRÕ “Òî555,''[a[ËŸÛ8y<UÖ`aaQRÞ3??¿KéÑÎVJhé clBéæ˜s®8¾ •ÙqÕp/{^çz‡XéGXèP S~åd$ÆÜÆRÂÏÙ@`# øóå™ÅȲ;¾ïL=f¢®ÑÅVЕŠßÖŽ7#i;#àȵÈ9O©ÚÎeeeMMÖ®ââ’]å¾*韭³êæ®Ý¤äÄrÈS}+],Ñë•™ :çò)¥™Œ1dgg¿Œw¬¬¬<¤4‚|+w:ý GÝ·a½ ôk»ž}45ûÓJЯM÷¼ê–WúP"r´Êݲ,#$%~QæàX—ÔWÑ Ú‡ï¶Ýï1u—ç{16눙ٯ¦PE¬RO¢C¢F‘•Ë9O9+¤²²òÕjE~~A\D1“É«µùSi\ñBÍ™¾V›¼1£ÑˆŠ7Ÿ:YVçÞ½¿øI„N± Ërú ºÅb9›‘¡Ì¨àœcnn===ãÃÃö´ØqöØ|cX0¬ ¼l+÷[°&í‚zµnþŒ»¢‹â3ÀåÕ!|gs%IË%m`3†´¦®®ŽÙív>0ÐUq˜G±kž¨‚:ÊŸ%yÌ0•³+Ú÷DBƒþv3/yšWu7™LXXXPœ’8;;¯w ?ÿùÿã¹¹¹ÈÊÊ‚V«ƒ(ŠE‚ @–9øÝu_ʧyÆUÐC,„xR'Úžã®ûؽ¨‡ô\KMšŽX­VÖßßÏÙ‰¬¬,X­VIJ`A¤*yy&h4ÅÇjÛA²[yø¾7z:}}}|ß¾})1Ÿv4ƒ¹Ž‘–'QÔãýN¤ííí¬±± ƒa×Ë`0 ¡¡ííûhF{“ÉôŠÒºŸöLlݱ]‡ýaÿ¤ÚEC;ûµµ$èIu?‰ú^æàÁƒ¬®®^uŽú§¦±V‹ÚÚZtv¢ÙLì,ËÙ²2ó®æÎŽ"ª2#%¹‚®Izlåˆô¤¢¢"*Kc£ÑˆªªêÓÔ’Ä^ãСC¬¨¨(nY#,…vvt,ô”ur¿ïYæß\]>¸1`nnö<µ$±ihhDNNNÌÿn´w½'OÐIÌSGÔéL}O244ÄGFF°±}E»ÍÍMŒŽŽbpp±ç¨¯¯g)%¾Ét"õDÜï{†ÑÑQn³Ù°¶¶û*V«««°Ûm¥ÁCì)z{{y¬Ó?í´¾Ô™N$èé(êt¦¾'˜œœäCCCðû—c¶ùý~ bjjÊK-Lì•y4>>§;8d9]¦‘²¢Nî÷Ç·ÛýºÍ6¯w)¦Vç^¯&·Ûý:µ4±æRL7ÅšSé#è9ýË=®¢Ngê-v»ýÕ¹¹¹¸ä¹Ê²Œ……yØlC¯ÎΦwíj‚ØÉ:Ÿ[¾8ç©%è;NódWd$vup@ÈÝ]E9"uøøãKÜáp¨¾=M ’$Áãñ@§ÓÓì&W–——Mvˆ l•yÝŽb¿ÿÎù½³sNQL“ë=(ƒëiƧ´¨oÜ-K¢žö\»v•©¾0f»¸…K$‰`jʉk×®ñãÇÓÀ!;|>¯ª9¡Ñh`4QXXˆÜܭ͆ŽQºzÚYêþ qè‚ ,LÍ’ªLLLð¡¡!¬¬¨ ÜaŒ!??---(//mûßWVVjmmE^^žêªX«««°Ù†0>>N¢®³Ù|A§Ó) IyN¯×k •y4MZ :ç¼V©7‚1­V—öãpG¥n-kD‰I36MEýDf3Œ#µI âv»Î ÂçóªJ}aŒ!77---¨©©ùœj×ÔÔ²––VÕµ«9çðù|„Óé¼M=¤ƒ!C©åˆ¹¹¹¤´ñìì¬â»ÁµZt:/}½&lBEÅc}}=áÞ’÷Þ{ÿö·¿á±9îÚQÐXZ^) e¦Ru;B¡¨c#‚UÖÄóIDATÆ}¨/­¡3“cfÆsj``ðÌââ‚ê<Ö¬¬,X­V444>´_›ššXss3²²²T‹úââ"††;=Ï)ê)å¨ñŠŒ'Ôí~ëÖ-®f¼eee¡ªª*?]ûCÅ^“í4ÎÄ ú¤iaaÝÝÝx÷ÝŸóÛ·oq§3ú*Ž; º%ß|–-G¨¸L:îP54z 5D b³ÙÏÏÍ©/x‘‘‘¦¦&´¶¶í¨mmí¬¡¡ƒAÕoȲŒÙÙYØí6ºM¥ «éi7®]»–…µ··—)ΠEyy¹iÝf³ålvv¶ ¯É,zzî$¤?®_¿ÎN'dYÞ’Äââ"úûûqóæMÓåËŸðááaÕÏ¢èp<#¢§À¸4D«Õ€i)þ!Õ¸rå2w»]ªsÍu:êëë±ÿÅ“±³³“ÕÕÕ)šûÇívãòåË´“WHvvö+F£òã­`0ˆññ1\ºôw¹\q‹z¿qã·Ù†T]êõ˜Lùiß'¹¹Ê½&›››°Ûí¸~ý:Ÿ™‰OÅÉÉIþÑGòÑÑ<(_–eøý~ŒŒŒàÎn|ðÁû¼··GñT´Úwµ""ÍØ4£C,G&Ÿ"…¸u럘p(>ÇÜF£Ñ¢¦¦GŽU½³>vì8«¬¬Rà‡áp8póæMuX,–³……EPzn»-ê[m|ãÌ•+—ùÈÈ0ÅQÇÄÄ8¿yó&ÿÅ/ÞåÃÃvUb¾£aDSSSÚ[q&“IÕf6`ddׯ_¿rå ·Ùl|7±333µ‡ƒ÷÷÷óK—>â·nÝÂää䎞Î9Ün7pûö-EsPÑ ª¼?¿„ÅV¥'òÛp¬æ ¹VR„ÞÞ^>88€P(¨ê{¢(¢¢¢'Nœˆº/Ož<É.\8ÏÝn·ª’²¡P£££èééáû÷ï§±´f³³³3ðù”Ç’I’t·Dé*A8ÿ³Ÿ½ÕÝÝ[µÅe\½z’$A’$Õ1z½UUÕEäååÕå噯çæfUmd½Þ%øýËwsñ…ηÞúiT›Ú?¼Î9$I†$ET±qÎ!Š"òó ”mü•|HË50@‚ž6¢­AG ‘" ñþþ>lll¨ëGA@ii)šš¬¯ìöš›[^‰D"oÎĮ̀ZX6770¯ê Œ©Ð‚  ¼¼µµµŠúC‘Ë=KŸõÆS¦}9Íåt¡^[ˆÊ¼ jˆ`ttDõæöâZPPˆææŸÅb9»Ûç°X,g­Öf¨¶þl6FFFÈý¾UUU§óóó£²°“Mvv6jkk«þ8x°“¥käç ²²ªKñ@ɇʋͯÍkƒ&¡Ùš&´d•ã@Që+ÔÉerr’ Ùà÷û£È5ÏCkkkLS‡ª««YKK«ª`!`Ëõç÷ûa³ ÁᘠQ¤Uh¾ÐÜܬº@²1 hllD}}Ãcg¹Õ××#33½ê©dee¡®®•••‡b*è+äÀɦٚèù¦|X JÏRk$·ÛýúÐмÞ%Õç˜ÙÙÙhmmE]]]Ì×úúzÖÒÒ ¥)=÷‹º×ë…Ýn‡Ûí:G=ü¨6n`VksÚˆˆV»t©&ƒ"hj²²ÚÚZèõú´Ù\ÕÖÖ¢­­MU(tK~ÙÏeï"2ÍÖ§R“‡§ SC$»Ýöêüüœê@˜ÌÌL45YaµZ㶸67·°¦&«jÁù}ŽúðêáGÓÞÞΛR^ÔµZ-ªªªñÄO<ÖgªGŽe555ªS8^¯G}}}T-н¼ÈüZ7#+HyÍ© c –ÜB4ב»=‰\ºt‰OOO«ª1 ¨¯o@GGGÜ׎ŽV__¯Új‘en· —.]"×ûtvv²¶¶6Æ”<ÃÝr³7áäÉ“{"@êÉ'O°úúzÕÅ–µvggg£¹¹G‹ª?T©ó‘ª]_242ÍãT¥PÌÀë¾K~¹Û“Äõë׸Ó9¥:ÊY«Õ¢ºº‡NØâzøðVSS¥7…m#I¦¦&qõêUZ v´Ô÷±ýû °°0e.;F£ííí8vìØžŠv>~ü ÖÚÚŠÜÜ\Õ·Æ FƒÂÂBttt ³óPÔý¡êm*K*à E»§,¦l#ÌÆRjˆ$ÑÝÝÍÇÇÇU§ÈlåšWàÉ'O$|r=ùä V^^QŒ¦ðÌ„â¢{™††vèСW››«ªøL¬­À»5ÚqèÐ!ìÛ×±'óýû°Ã‡øª««™™™4aF£ 8tèði«µyWý¡z»Ø‘ÛŒšåAŒÂ¿· J€Ä--ªD §0êŒoPk$^ ý¼¿›››*'µ³ÙŒæææºd½ÁsÏ=Ç>øà>=íV™£¾‰ÑÑ1ôõõñ}ûöÑNÿ˜Í–³Î:îv»±´´ˆÕÕU„ÃaÕA“ÑX€YYY0™òQ^nAS“uÏ÷ÕvöˆÝnç33,--am-IŠo6c Fc. `±XPSS“þP-è§N°õ¿ð Ñ)NC‚K²ªEEæ2’uœ¬r"ò8>g‘&ÇÊ:P^PöZü£ Ðº`I=3dŒ)Þu3&üŠ¥ ì, M‚ "å}›wný’ÿxþ]¸ D?|ª‰:¡Ñâë–ÃøçÖ3T› ‚HOA€ß ~Â=} ÉÃðiÃ{FÔEÆÐ¦/Å,ÇñÕ†gèNs‚ "½ÜóÓ¯ÿÚ~ñÕ«ò n„¦ãk­'UÔC½>û êð݆¯áHÕAr‚ âñômvþîØx?Ø ·¸.Æïñ’!êz&âPn-þ ñy)éxÅ’OgåAÄc(è[ÖºçõÁ™áW/ÎßÀÅà– HqzÊD‰zQ¡ËÇ÷ªžGsI#ŽÕ’UNA<æ‚¾ÍØ´ƒ»üÓxÇñúá¼!ˆPêÇÆKÔcÈa:TêLøºåi±ìGgM 9A±·}çœûö„×Ùù÷*¦ù"±Æc<KQgŒ¡ÍP‚м´d7àKU'`µ4A{[ÐïgjÉå}Ï}Ñ4±áÁµõ1Ìñ@Ì’Ýv+êô•h7Õâéª#8Yû‰8AA‚þ( NÞçµÃYÁÿ(.mÚ° .ï*Ÿ]©¨ `Ð1‚(ÀšmÆs¦ƒ(1¡2«OÔv’A$èj±ÏŽó…à"$.áÖü.z°`‡°"‡ «xËO‰úÝï A˜V„©E­PŠÍÏ /ÓˆŒŒL®ØO"NA Ç wöÔjxí<ÇÖúæ‡qÞs ë!UoÊC2ˆ™°M†j¼Pû ² ™€È eZÔW“ˆA$è‰dfy®Võ—d à@™©d‚† AAAAAAAAAAAAAAAAAéÂÿô½½WNUÓ½IEND®B`‚nixnote2-2.0.2/images/material-light/stack.png000066400000000000000000000203421315604104400212430ustar00rootroot00000000000000‰PNG  IHDR‰ ‘zTXtRaw profile type exifxÚ­škrä,Ò…ÿ³ŠY÷Ër€„ˆoßòçIPUÛn»ßé‰iG[e•I^NžƒdÖÿÿß6ÿâ_¶Ñ›˜JÍ-gË¿ØbóÕÞ÷èl<¿ïñùÎ}>oÞ_xNŽáþ™×s}ç|úuCy®wãóySæ3N}z¾x tfχñù ü=ÿ2Ä´ç¾?,çù?ä9—îáëß±à IŒ¼ñ+4þ§;KÀ‚PB?ÇÎßÕë§x?ó;†ú½ïÌûãç½?}ñíÏùðÙÆæç‚üÅGÏy—¾÷ÝñЧ¨ýšùÓ5ºl?þû໽¥î½îêzÌx*›gQ¯¥œO\HŒb8·e~ ÿŸËùiüT–8‰˜ØI<‡Æ5ç]°ÛE'®»íÖ9N711úå Gï§ç\ Å7?à ?nûZC,|˜Ä-pÚ¿mqgÞvæ›®2³8®ôŽÁwüöc¾;ùßü¼Ú[SÜ9[ß¾Â.¯99ýÍUÄíǧéø÷ü˜yc?6ÁtÜ\Y`·ã1’û•[áÄ9p]²ÑØ[®È3.bî„1.›]H.;[¼/ÎáÇJ|:–ûý .%/ÎlbB&8TssOqçZŸü= ´ˆ2ÅS‰P'X1&ò§ÄJõR4)¥œJª©¥žCŽ9åœKVŒê%”XRÉ¥”ZZé5ÔXS͵ÔZ[íÍ·„¥–[1­¶ÖzgÒÎл;Wô>ü#Ž4ò(£Ž6ú$}fœiæYfmvñ„ò—,ÅH•&}¹E*­¸ÒÊ«¬ºÚê›\ÛaÇvÞe×ÝvGí‰ê稹/‘ûsÔÜ5X<ו_Qãt)¯!œÂIÒ˜1/ÚkÌlu1zœÆÌ6OQ$OÔ\ÒàˆÓˆÁ¸œOÛ½c÷+rŒ›Iñ¯â抜ÑÐý/"g4tOä~Û7Qí{óDìV¡úÔ† °qÁªÝ×®=é·ãªÌ¡Íõ°<î-cŒØº$*”ÁU}N»ˆš-Ã7Z‰K½ímû؉X3»þ´k¯sÄý‰µ ×”6G˜„’¸GGò¹ššÎîß-ý϶ýñ¸M›j¿Œ½\*k=ìÔù {ò{yÒ×”°‘¬Ü’Û±°ùz¬µãG1#…µ q2×åÊnâf—„Q§ïÜy–È,që§ßõ8á^úX­„UÍè=J/2GÌâg…Lœä_ñ¤nÕSRO»Îšd‰^D{¿0Ûœ\LΤ ¿8©•Gr©ÔXhÝ­Þ°•¤šü¸òòQöh{JI“¾S­YšMAîgE„¤r.Ð@Rh½ä!#†9H’ñ„dÌpbIcÃo•–dôO—¢ºÃ¦åŽ#»Å-+–v.®½O”ìšsŸ3,ß/ YxµµAѽ)u %s'C€Þ¬=wª%­ærè^F PÚ¶ îBh ËÚ9³NBT|lËL›å¨¾Dýe*Aðfª’qhoNZ=®K–ÊÿΙ÷h~úâ˱Ô^*¹Ã‚“İ—'P@I×§‰'ƒl]µ° Z´V–[•¹—­ƒzÄ Ð£N]€DŒâ $ÂK*74‰„Ãë•,I«+ˆï;~"¯Hàç<ú¨÷HÙœu­°æê±¨DŸÉŽ5HQ‰´( LmQçIÑÍeÁ˜å©ÃÞžJ|ƒ—÷†C¦§vò­ö˜ƒ:$•!DtPÎÌ}å™`ÃCâv%IàçÉ£ÚÊŠsµ;)ºÒ_ÀùO/œ:;À>ŸruF dT’&‹‰21¯–äKó‘xZ!n'o5Õ= z¥ˆ ýDÜ“³…œµ‰fÒ«qÎN«Ív)µ”2^¨€I!Ö±Ä啲P'5©ÙX])}äµ±5kâ†iR¯% <’L£cA'¾z„õ-ì§&€ z\ÏsƒÓ>Ñ¿rŽš©†h§eE,™1aø,žEùLºc´™¾ ms³æäðàð“è¼·J™W«Ô.Z¦>a{t#F ‰v~“¼‘¬<>R,®Ü¤H\‹"q<ç½½¡­Œbòœj,$RMeí¡e/d¥]‹ Ò¬/Tå‡n²ÝHTØAfÓ™#íëÆ™Î>_Çç9S6™Åè UËš\¤uVüžÆJêi-›M­J´(íf¸Vsßí@«#h Ï¥·ŠgiÄP€‚s‹½ «œ 4ÎÚ nŽ÷sA1OBH¡Ì¹}Q‚ö’7ܳä=|-9ˆìŽ;}ÍA_¸¦ÒíOº`ŽšÚ:"ù¨=-RÙç»F¸NÝñ§%ÁxDzÖ4@šµ>¡h€7ãæ6 Ìè×\ŒÅDçÜSÂרk*†š¼q^9vÚÇÊ—‘ö1S³üƒ™ð\”Û4Áìcë±T‰ÂÛÒŸ }ÌüäWL5­ß»õGcßÁz/ÝèÚãqè‡0½W^¢ƒ"þ6ØÄXR+ ˜ûL.àì&Z­“’€MH'ÿ¥¡åÈWp'2'ÌLµçh–^Iº”x²[Të)åè¦8¨blpÏrÛWk+}í_nÅÂ5Z^×[){9Y½òñdD î_=9âõ“MgÑ,Jô·igꕨ9˜¿Î™ìoG¨¬”z `èÌθw /Ù±ÆÂ´#PBFeìùþ|‹“WÀ¹8¿leT½‰Î›³ò2þŒöE4û—£ùt¬*—cüYܵ"Ðì Ó|Y5¢s+aÕÇJC{ìpdY!—)Ë I áî9^/T·þ‰˜/ š€(°xJÀvͬô`bE€7Ò3‰Ïßׂ¶$ÒEésðK²Q@´G ÐŒ#ðà{ E ´ÝB,Á®P…k4âMûÈÁâ;»he‘е"V¡È³ˆúì$N_§‡(=Öz‹àyF_@ýš+‡Ñzwt½k }¸Q±Ã[úÛV†¬YÞO©r‚i·d»„n Ÿ\IæzPÙ¢o-|€C™™MVnÊ7ºˆ–ÿí±£Ð‘ëAÇ{ç¹LxÝù›õæš¿°Ò6‹nå,Z×<äç5ÛÏ«6ëÔÕY8¥ŠÄ0²#²%Ò7cO+”ZzÛIP§ë~ÅåÛ·Žô'2ÇÀ'*H²¦t§…X€*µÞúo¨/s’ˆGµ¢Q iU7i–Ø m5@J农¿'¹“;ÿ…”ÏZJÖ4Í6: šYSYÜêO€ð§£ÑärXŒ˜a $+æhF„ª|±Éõ p¾N¢h§¥"ëtðÒŠ^„¹lC«DÊÅ<äšRŒ×fèJMð(HÜ ÁXŠÞun¢ÓcJ-HS.1º&@Mp[ ÷ÈLøuu´ë@CdÒöÆvìP)ôº|¨»hŠfô dÌ=¹þ¹á„ÐÐõYfMÈwcP’•4v̾¾ýÁ¤¢2çš}H—šm:YÃÇ.*ZÕÙ¤{ìïç>L䃩ºwrŒM ô‘) iñÒïg¾î:_sc š”Æ(-Òôí¦3óh_f¾nQ.ó·,õÕGBõ¸ª"«,bÂ&’ef˜•çoo EK‡ÚÔdÜ‚ ‡ï¹†ÁT§©ñs ¾ØumÄ+㓯O%·‹!€Q­où[üù¨¨æÉÔ¢^`]§=¾ÌZz…4Å©y`"µKǽäÜZg/ ì$.Mén´ƒ{éÓÅã­Äfç î‹b»Æ] MÁh’µRÛʯ«Ì¹Ì=£éXÏHÁÛŸîùtËËó—÷ý8•ùç¹þ³©Ìç*¡-ß´¶™®üŠº‰á4ªö–gÔˆ8u Tmž(uKÜRHUžàíÐÁÜ hsr„ÓöÔ[kïô‰Ÿ²ÂüEú¤ æÓ5u‹ó–Íh§=Q\Ó(+Ø”öP¸Š êY€à»êKFèÃ-ÁhÝCdØé–\Äp¥0ølÖºÒ)èöY½e¢p!é¬5{13Ô³åI.J÷èR+Ôç‹eÌn€Išú ó{eAÇ䩼Xal1#ÀÃ8Uîæ%A‚B¡½o‚!ôþk›>=Æ…»³wŒûjÚc¦Pª$ÀP(;À fCϼÒ3ùiþ—¹J÷0ømng¸'+š)?:ô1)}ßϾó~¤y÷r–y{듳¾ÎþÉØkª=Ί/g™—·4¯£·WÂ\sJ†ŽFf˜ÀÔ¦LÝýsÒ-8RYÊQeÅ †Ð-Œ¡m]2jÅ#gã×ÍâØfþçœ5ßÛŽ“FX,´FÔ‘.¯l‘yA UøRy]ÌrKY‡z%ìWÎw:NòÍ£¥ i»îà ‰SžVµ_Ä=)âW–v‘³/“îw?-‡º®ÔX ÜÙ\$õЇ´4¯qÂTus†i¡~‡ËÉï5 åÙ…Øë<–°A‰3]éŽ<}Ùi Í¢ÅvH,ÆÊÏ· q×Ю.a º„Õü¶'¿ƒØµÌMðM›È?ÝöuåwݬzemÒõä’q´ÛrsÉÍðÃ-§ßï_^8>`°êà=%ò­ï¾¹é2‘ãpÌ/Ç1ÚŽO<¾Œ¨ד>ôJçæv… š“>…ô±°˜_¹6:9û”†>—IÚ °ºÛ¸ôÝ u†JÛa»¦| +¾¶öêkwØü=£…nK!³”š³`°Ä®Ï GÙ´tV*y¶)äö³¤èÊ#¦òȈvˆUe©›åÐõ´‡b¡ýPæ@‡TšÃÚ¤ ÛèÆ=·îüpóaÖ°ªL`#¡-O@Ș†pÛ‡ï9ë`\¯!CK¶ÀN†Kû×W„H§>4«Ïd0Ëwj‹¼÷cÿú®~° ©{–îÿ0nËÒëÓ*GÕ'~·4\Rókö™KE˜‰=zº=®tÂØt¼2GÒÆLÒ=-Ý|ÓÓWF§­¢ß‹K@ÌñîwÕ¶Ü·»)ú’Ž#aÒkƒZ!änQŸí¯ülù³5.CŸä*œãî‘ê´‡ÕI7JÆ®y‚ýSW/¹è“•ùl}eÍÚ ’æë–L†ÆG):lÞVËë’äºÖ8$Ù‡•`Ù¸òÈ$Ýc6ruRŸ8»Ž ¶"væÝÌXVjój¥Y/jžÿR+w‰F€¢SÁtºð ÀA¸Q$S‰|z´R³W„£•š{Á¤WÑ`.sK<”öëdRõN‰>`£fT+y÷yögò×þ>,b µ[ù¢ÚíT7bW-@…œjž«•Þs˜úl]SMx$Ëcí ‘PÐ]«o堊祕îÌ_'~löµ÷mmV÷ÞnÒM×3³Ko'}˜XMÕm"-‘k­Š¥o]ÅÌ.Þ$<ºçªžGóh‰ 8¼E‘‰ÁL¦ÇˆÁÓ*±+º H-yIÕ&ÄVÊmB> ùËžhêâ¤Eœ'ê.˜ùÛ¦)æó>ðå¯=`!û“ÕÞײ>KS[D4 04uh…ƒú€Ì€“lRØn¦øSuâbäR€Íd¨òHæÑ[¸Q&ÚA'CTÁ™Á lk©ÈïýJI o=´Ÿw ©¹tg’¢¯3Ÿ’‚™Î_îvï>{ÚŽn76Ó%02«Oaýn£8Ÿ·G#úUêö<ŠÕ§ã¨Ï’X}Ëc¢E¶>Ô‡Úx¼*%”ÈÈxùyBY½9þõØÙzÑÖ¦m{hG:Pž6¼(>d¨»ÝÒrm¤ =$Ÿ±É„Zb× È"ó>ÑùJT†ÝÝZAãâäl¼1H€õ”‰M§Áž¥)]UÊzx8¬]7Æ¥îõðí&@“>›JíVÎK¡·<óAØ/ɺ1›TÌ=Ħij“áçAt ó¿ä,íoqd>œy­_QJ_o0÷A¥=O=næ¾\‹$íJÕ)=}‚xrˆ eø½DTèl!в™Ðq˜@´bÐÝ1—;ïYôLÐãI–æê‡‡7ÚÜ4Bd§'8û¼!`P°M÷ÃÙFµ„üêvëËlº›»ï“½?e½æSð¦õÑõ=ŠLŸ”ž7‚nàŒôÐ;ùãc£ûÐèõÈ9ÕsßE zÍ ¡ µajï9ŸgJ$”Kß´C:€]ç´¾pÕãóZßaÑGÐÅ‹Xs[úyåõîJ"°«•û½²h•ࢾ»f/yæ$µ.}ãKlÕåSkÝëvA÷Ÿ=ª¯@Â_@R‘~¶A\Ú¾/_PÉ”¾Ü—/št$UЗ/ŒÕ&}û·ÁD|[Ve2æîEŽûªCW Žc<ÞM¶iOð£µL©©jÆ Á%ßúóôyFú×_’Ô?°Ú¡‘~9¬ Ÿš¬DÒœd Å——Ðd,œáGmÓKE¾}U弨"âž r­­J h«$ºÑÒ©ËÞC7PúRê /ˆ’¤¼9Bî:óPÍöÁ›˜¦Á†*¯Öñšfõa›Nr_ŠÀ]g]6Åbâo;-Ê*ѹ Dr9‰^Z†˜|^ˆ•0`½sd´ê«Þ‡ër‘³?£ å}¾ÚÈÐÚJ¦iä ˜ŒŠõ™V˜ÎÛî›^‚¾ÒTÞ©°§Ôh©áûÎ[’`.%¸oé+&ç…1à˜ì¡~!èkú+Sˆó¼ò6õáÏç0›¿xçM_Fy­õY©ÂuYíf©JrrÍúÞ xxŸõSXå>’?Uîä( ÒÝå±úšîÿèµÐ£àÏsö³NErÖ‰B˜ðÀF*¸Bžö9üA´ZÔ%xÑÞg{@Ó®ÎÝž€ÆMIr~gÃ; ô ¾fþ <öúKöNb`zTXtRaw profile type iptcxÚ=‰Á €PCïLá@›|\G¸xóàþI´Mš¶OÎëNÙFtAй³”í_V–êX]…aM:bH69zó}:C¼¾©*2‘í‰þÈ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá0êëm‘ðIDAT8Ë¥•1kQ…¿7ûL e1K@D¦P ÁIaa-ù ×h!ÐBŒ…Yd…(©´±QÆ"MHµU~€E’b’ˆˆÅ ’0ÄuU\H!™¼gsffg‡Äœnîå9sï9opƒÆp˜&€: €À°´CÏßËŸUd×€p…r|急Ðóm¡4`hCx<=ÿ/€“jÎÏ@–œ,ˆ tê3›‰âK•­±»¨þ‰`±<ùþ†ݤtX|- h¥•ªƇÇJ¥ª‘ü.šnÐh;²ÍÌö1Xì@2‹e“/Ÿ¦´X#ƒµ8bf{ž™g_¸GE­I->Ë Šæ\å4ULx` Ÿâ{ÄùÖ„ÓfpY×y4~»t†;Û/øïäËu§ÈÜÇ€Ò§3éjdz¬öÔ€Z ‘鵺Z²™™ãWÓcæç»ÿQ¸©%è·ÒÕóÎIžÖnâ¨âikyÖ}Ïó;ßZÑ@[‚~1©Öœ*ªn©”Ú¯jž°,:rÍIЃùÐó#-KÀU :ñ./£·¥>܈wÓ¥eàuþú$èG±Ò2p'ôü?™ëKî³ûÀ4ðíDà!p#!c7hœ¦ ~]`Sœ±z~_ ÿŒ›ÇT¡ÃIEND®B`‚nixnote2-2.0.2/images/material-light/strikethrough.png000066400000000000000000000107771315604104400230530ustar00rootroot00000000000000‰PNG  IHDRÔ¯,Ä zTXtRaw profile type exifxÚåXY’ë6 üÇ)r’¸‡kUnã§Ii<^$ÏØ~©ŠU3”) @£4õþô>ì½'Ñ}òÞà#I’˸‰fûl£5²þï_Ì×ÍÍ<Ù¯'SŒ‘·¯¾ïë3æõû… û|¹§Pw9qô%xÈS³ÃMÙÜ±ÛæíþÒþ^–+8û_iûœnÃýw pFSÈcG®sŸnZpà¼ÆŒïÑÍ;Á½p\órì;'λÜÝùÎä}žo]AÆï üöy«Ç¾[ºaí[óÍ®¦™ëÏ•ïÆhqŒ¾¡Ëâá)O;¨/(ë Á‘ðzÍã øS܇u%\+k¦‚Ïb*Ùde3¬Øf³¶¯±Ú Åu0:W¯¹ÈÁ%Wy£—.pâFàÂqoŒiw±Å.½ié«6Bs³Xé,„Y¼ñpÑÑä;×EÐ3Ä‘0q÷Ó"ØÍ˜†“¹ù«@ˆ»Ouùw]t7æŠXƒºÜ0›²‰(j¿c‹ÏŒuj„Ì–6´]\Ý c,ƒã-«õÖ炵ðc?–;WÀ€UuÍ"²0{ƒl€n¼ìZëÔmÓ(- BÙ#y"Ê KD?A"b(+«ªz 5iöìÅ+ªTð³FåÀA‚Bˆ!…9JÔècˆ1¦˜“KŒ¦É§@)¦”r†Ò Ñog¬È¹¸ÂEŠ_B‰%•\>UªV_C5ÕÜ\ã†ôo¾j±¥–»í¥.]»ï¡ÇžzˆµÁC†?ˆ#|aÍîi{Ú½cî9kvgm2&k]øf Ó!|‰°³œèä Œ9±`j7¬ihÅ4]|@xk`dâÜ×Ö7NsIÅÎWÖ»—é5‰g˜®bÓE;BjWD÷šN,»7àA íêíº7àH‰E.+ ß ÇÞÑÖ†,€÷RõX5š‹Ò°¡F$[ò‹”ìÝo¹´\C¦åÚ¥ ßÊðž;t3z&@JÕs&ûdšhAnÅL1÷jP\^ q:Á4?__Ö4;Ìé”̸ƒLŸP~íYú„òkEô å׌Óåu¨ØÐP¯;l§cðJúk´¹Í^néÉÖfDC)®aêèÊüâɬüj&6ž@±ØÊ§0Ôw¡%Tgã½(û0œñeñͲ7¢aˆ(ǵ(T&ÃZaBdˆƒë|#¸Õ濨Ãvò’£‘N _!žU˜wÄ0ÊæÜz+°ÑT42Ø:°Û¶Ke+ØE°Ó$m¶•É4<ã{ÏËoŒídľ¼‹Ñi”¢QÇŠöŽ4"Ä®†ÚcœLûÉ´-7ëæ*,ógbñ6'´Ç-½®Iæ¼Åç¾"{º¢#« oä›Ýc¹¢VDAmì{lÍ<ÜV[³t¤¸j2ÓÙðoÌ¿(òQj—eYVD‡Ž˜&{Sö§!­†É¥£§ìàA~|ùú]Z/3",ÕY2rïûÍW=!äÚ(vù¤EWáÐÜ Rdd)X2ÐK‡ŠïÔ"+¯6Gš ªŸ)¾Uû.á}.á}.¨~.ý–ÞŸàÒoéý .ý–ÞŸàÒoéý .}Í®nEm¹Å1ë¦b¿?þçáÐ1 %ú’±Ê$*dçÍѳLúµaï¸Í*›èàB¬]Åúx¡\ä^ ð’‹Â.³XWlʶaOGË.ê¿«ôE=Ju1·º×*º,“PÊ¡ÓìÊÏÓsä¿NÏ‘ÿ8=Gþ{àô å׫èʯÓ'”_§O(¿NŸP~­›D¶„•äLqÍÁ§lÑ*v-N†­ Ç tW8³ƒþù[.ìžv²ª-± ^pB•d ÓkÍÏŠÝ#}5Sc.Þúú¡«$¯“ˆ6E1ÕšchÉjÞ:ÿM à/9(Á}v#qïß7Ir$8ôfÁWÎÖÍÎÿÁÈÍÆ :IÈhaHh­Çmf\“:Ø&“qîH‡Ð¹Ö'øìsSÊ¢­]:ñ£N›^oÍ;qúnÅo)›¿ÎŸnOŽ'ÚŽóg³uø˜G»ƒ6ô+Ä8¥m˜ïÎôöáãn¤Èo·èô‹Ç-Ç_FL¯‘|Î1½Fò9ÇôÉçˆéã°Þ9¦÷ÎÔ˜é½3õ#bú#a‘^#ùœczäsŽéͰFqn‰þc¤y’‚®i`zTXtRaw profile type iptcxÚ=‰A À@ï¾¢OPXûꥷöÿT„6!aä~vÊ1¡ ‚Γ¥lþXYªcõ 8†5íˆ1ÙæêÏ&ÚP¼¾«*/2GéòQ6> jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá0ònòŠ’IDAT8Ëc4w÷ßÈÀÀ Ì@&`jÖ&×&  C1¹P(f```8ÎÀÀÐÍF\&›»û7000ÔC¹«Oî܆˸À+†«PöZFswÿ,1J1‹’hda``ØÅÀÀpa ¾hÌ‚za×É‹HF1¤°¹F³¤< ŠvÃÝ%,&IEND®B`‚nixnote2-2.0.2/images/material-light/subscript.png000066400000000000000000000104041315604104400221520ustar00rootroot00000000000000‰PNG  IHDRR;^jzTXtRaw profile type exifxÚ­Xkšã( ü¯Sì Çáù}{ƒ=þ˜t;ÏNz&ž4’U¥Bêÿý;è|¬²!/C Áàã“O6£Íñ9Z6~ýÝ7æÒ¹'¶{ÂbÈ¡uÇmè{}Ƹ|ÿ@ý/×ã¤uï÷F“{C7-Oce;¹7röç}Oiÿ.ûÓãìoi{LŽæöÞ+‚Ñû9K¶»„¯V•„óqt`ÆÙõ6´ åÔg£"$N)©åÖcsm¥ƒŒ`h×¥2¦!Ž¢­ëÑê˜ã øÇˆmbZ#œ=Fp—iPvŸE×6?&—§}c¶žÎϸ1ÌXf¶gH”Ô¡ȩ́€$TqŦ$óñ#h‰ !/Ý¢XØdu8ί`¡Õé|ñù*bþ¡‡YS-Ý»RÀ˜è·¿ôÐáWQJÕ%Ó{¿1O?ÙŸ’pgþ„ÖÖôˆ‡Ñ:dy˜LhMGS†°]†zÜ[ó¹Hó½æYh¡XA­=“&âç¡"ËwõÈV +›9§¦QëÌðáÕ, êÚóÎO!ܪ‚¦~LÆÔÞ—zWsb,Ý[ @ ÄrGÀCÈÖ =˜ò8КßqŠõNY†«‡ì ¦_FÞÖ£Âyåuª¹—bu8dE›"þt.$ã\ŽÇ“ §H[sÌ—öhZ“8©½¹™|ÕÒ; 98¿h€‚YÖ±„÷£‡©í3SüʵÇÓÍš ²C€·¢[ º:޹ê;^,ýò`½ki3|RxÌÃ|QøžÞçNä&°û¯›>8P¹¡M›Ã9±˜†?›~Ÿätbùµt8Hþœâ/ N›áLpz3¾ ¾Äw1øŠÞÄÏ'?"7=$ë,t ØÝ×,áX¿jŸÑÅt€UšÁ™„cµÌf,ŽÂoÁZü—™èüs©¿×rúÔß'½ÎAi$@pµzÖ²tƒ4½ õKÄ&`ô73‹ÙWÁœØLHf[ÎyV:LèIþ|œ.ôà@ø,]&w€­ŽÔ¶áWB7+¶\æÿ‰±"¡ÅûRÄëâx\ÑæÒ¯k ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá0!¹j&͈IDAT8ËíÐ1 Â@„áo%un`e™O°åVD¼€^'V)s„ôZÚYYz›DDp%8ð`Þƒùa^hcê±ð™NãÐ'¨r¸Q¨™/Uaƒú龯2û}žG]ï&¼¢¶1uXåu7ýv² ÀOª’PSX ÀݤÎ8fy…?hp€{TEt–ØñIEND®B`‚nixnote2-2.0.2/images/material-light/superscript.png000066400000000000000000000102471315604104400225240ustar00rootroot00000000000000‰PNG  IHDRÔ¯,ÄÏzTXtRaw profile type exifxÚ­Wmvë( ý¯UÌ@–Ãç9³ƒYþ\°Û¦M“×Ô/NŒ ‰{%¡ÐøïßIÿàãE j)æ>!‡,ÉŸ£eöý|qoŸú‰ßF]­?^ã8å úõc‚…³¿~î'kç:é\èmásA¿4 êiä¹—£ŸÏwÊç¼n¶sþj?ûôh¾¾]±ž’á3~zhñ°À›/»-xO²žžƒO¸«·ï±£ù¼÷§/عröûÏP‹§@ü‚ÑÙÏú=v¡O¬}hþ40†+îösƒÝœ=Í9ŽÝ•T¤sSo[ÙOGÁïi—á§x¶}e\ jë®Ïêqfaï&î\xòØmム1´"MüîKÞ$Kó¸xŠùì; ñ ¼ytË»-¼õæ­¯q‚æÎÆbŒw}×ù›ë}¡9—‹#`Ò‰Ó&X–OÃŒÅܺC „ð<1Õï¾èÆoÜ ± ê†9aƒÅÕc‰ªüá[~óì!§.;Bƒ­Ÿ "èVà ¸È^9²3cŽ üX.>H¬*áÙ¼ Ñݘc¼eEåèFjê#‚'¡²BPø…*ê5ªF5MšµDCԣŕ£Šy ¦Í,Y¶’| ISL–RÊ©dÉ)LsÌF9åœKÒ‚¥ fH”R¥úªÖX­¦škipŸ𶨬¥–[éÒ}Gø÷Øzê¹—Á®4ÂЇ4ò(¾6ý Sgœ6Ó̳¼³ÆgØ~b¿0÷œ5>Y[Œ…-g¬¡Ûìm ^éDg`Lƒq[ À¡eqæ‡ ‹¹Å™Ë‚ Pk¬‹œÎ‹10‹N~ç§¼‘†—x“GÌÑ¢îo0G‹º“¹{Þ¾a­¯t×6cG.LŸHl©H*ëLúuK?­äOðºVK¯é}¬–^ÓûX-]‡ù˜J×a>ÔÒu˜©ôg½%"îCmàœj##¥Þ\ <üt³(’SŠdQ)ßJA5Ps@ó:]·Ý¥ñ-5¢.®I9àK-ìVWYy¥¥Ç&uˆ1ŸÍÔ†;òsêZý:P6zË¡"±¦Ñ~·YZ»MØ-¿ïöw›¥W&<Û,ÝïöµÍ¤@Ó1©²fHÎcŸÕûé-gøOÈùjôŠXMÛu¼mq¯‚1ol¨ï¥Õ %)Èç¶” àÔ’Vû1„¾5´¬.yzaû֨ùZ•븖Q¢BÌZ^a±-Ñ 5y¨³ÙQ¾"²áïÌÑG+@ÛÜeé4-çç3ãæP€ ä{”Üu„mYçÖp\sm&·rt#ˆKÄçµïŒ¸—#j©Å¯s>?læV¹ÌlÕÖŸ;îæG±Ž# ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá09ª¾›vIDAT8Ëí+À D I{JÀ8.Y…äx,ª7ÀÕÕCúIZSÁ¸Ùټ݌ॴ±˜Þk”ÔÆ&@],mÀØÌ\ ~©F>\o²\¹ ¦ã=€¬M^bð@œ”£€tØ%ïî^üRbtÀ;«™Kk¥IEND®B`‚nixnote2-2.0.2/images/material-light/synchronize.png000066400000000000000000000164311315604104400225150ustar00rootroot00000000000000‰PNG  IHDR(!«ñ饪zTXtRaw profile type exifxÚ­™irã:„ÿãsl…å8X#æïøóHÙ²¼´{âµÚ¦,’ P••• ™õÏ·ùÿb ÉDÉ%Õ”,ÿbÕ7Þ{ý»ŽÎÆóûüósîãçÆßo¬ç£À1\¦u_ßø\ÞoÈñþ¼üÜäñö¤k ÇÀ÷€AŸìyÓïIÞ}îî¿M½ïkñi9÷OŸ÷gr^ÿŽ™`La¼à_¡ò#×S39´ ïõ·Ó‹ø¬…"¿9ûuìÌÛÛ—àÍðuìl»¯Calº/H/1º?wòuìN„žgäoýÇa=îü»½gÙ{]«k1©dîEÙ{ˆóŽ ÉQ ç¶Ä+ó#¼ÏçUy–8ÈØ´ƒ|v;Œ«Î»`·‹nºæ¶[ç8Ü`ŠÑ/Ÿ9z?ˆ¸~VBöÕ“”¨/·}5L YäM³âßæâÎsëyÞp…'OÇ•Þ1˜ãŽO/óÕ‡ÿÏëm ½âÎi0g8±â·WL3 Íœþæ*âöS9ñ=/c_’s'6A9a.,°Ù~ ÑŽc+œ<®½JÃåy@ˆx¶0È€M.ˆKÎfï³sıŸÆÌ}ˆ¾“'â§3›Ü„HNñúlîÉî\ëÅ_C-$BB¢x j$+F?90Ô$H4"’$K‘*-…“¤”rRŽj9ä˜%§œsÉ5·J,RRÉ¥”ZZõ5@aRSͦ–Zkk<´1tãîÆ­ußC]zê¹—^{ÀgÄ!#<ʨ£M?äügšÙÌ2ëlË- ´â’•V^eÕÕ6XÛaÇ-;í¼Ë®»½eíÎêǬ¹—Ìýœ5wgM3Ïuù=k|œóc§t"š32æ£#ãY3 ½æÌ£×ÌiÎlõ…x²æD“3fŒ Æå¼l÷–»÷Ìý˜7#ñ¯òæ¿ËœÑÔý™3šº;sŸóöEÖ¦ö½a¯jÔ*Ô˜Ú°!6.X¥ùÒ´'}sl‰Yź6AtÃÖ>‡ƒÙ€I›ÉTòêƒdòf‚û‚F¡FÑ(¹YFÝ9m?@Vð•Ûžl.o·Ü©´Ò½˜Q¥ó$^‡¨¬d<ó©7™4ñêg£$WkN£ôÞ‚ÝÙë8“àÎhÒHiÅYÄEþÀwÖc_žvÔM/E˜Ú÷íÏFlè%˜¹zm{ ?cß+O–èïÖ®¿Ù‹Ki:ÖŠ'qj,ˆf¬  ±JÑ- önGÌH’N@šË zÛùF£ï›Nl HԀ̔¿‰©) Szˆâ%×Nš*PþS_¦çç´k‚šá}]H¤d×®£ÈiA>€¸V¦å:Ð9ºÏÕç¢% …ø”í.è3C©¬› }?qLAÆbõ$~m¡ì* –é(CMŠÑIލ®9G£oh¦D¼Êà«ÅlcïÎŽäJÈ)¬Æ¬z»çü‰"0;@⛌jXMt””o¾—¹×œWúV>™šÀÆâìfÊÊf.‹úÍÍ–jëQ3A§µ¤•U©êÓžgæ1Þ¸BS]G7˜«4V/u–ØÃ Cf  S*Ù|Òj%çh.s€);€  •z*jÊØŠ¸4#U«,W©ºmèè«å ‰²€Ù¢Íî¤2Åïpþz ÙìÀ*cŠ \2ËJÑØI’IwLg’TV“ƒmcÚžV™XÐ$g'j°¬é»%æœÀl¢‘RÖ9¸)ƒV\Uaõƒ€ê@@˜â怤ΉÒã..A®Ff=ͺEèŸ)©p&Õ ÷ Àô÷D#Ú;¤ÊÌ8 {ròɱ¹’œ4É Œd}ŠØNq&“£Ó—é5ÌŽxKÝb“ºhãcDÔ‹ù˜å·lÏšwZT¸>(À¸›B€o%n§S]±$V sQ } 2W¢¶zI eæýn0úZs±v]zsr/½Ú³ôFÀ:¬B/IùÄË™k)Å5)ÔT ñBs/½iJÕÒxK³¥g`®4ñ±x?A´ÍDfê`åä(@=uOdƒ]%B‹;züµ{ÛÔÊ$pÊ­Ð’ÄP8"‡™Éê‚è]Í×uÕŠMå¥ÊŸ9 Š›FHùêyÓÏ(×@ÖÛJµÓb3 BÛwôAX^Pà>lt†Ö²KÄ!Ä1®%ÓVƒ;µÙ÷¹7h!,áLÿh¾Øvv‡o]$¾Pošœ¶J½X£¶•z™úZƒvÔnZá×…E)â ©eí˜×j€µòªSXƒWÊ·7…+ï Ò³!4UÔ lÜÛ`4jnq¨B }û¤!8¥:03"+F¬yÍJykðÌ™UÇÀ}àÿ6Tú)w”¸X,ÝÜ£a¨J²Ù3áQi„0?üXÆ8D„–žíBJNYß8Š…h§ŠóÁ¯YJ Í­EA´$Ÿ“°‚÷i:šŒŽ¬‰•‡¡(§ïÑðSZwªºÐì" {鎨+XOm;h~•¡MéQ'4k\™©3æEà>j¸(O¸ ¡!ê” ÂqAD¥.ÿ`pv!î q`ŽY í¥òXÃÓmG˜BK Á …l Ù¨ößtaó‹vL¶SÒöITÛt$( ±¤)ÌÝ Mð/½Ëëé#°hyÔsB1æKœåÑW-hQ°{aB³Óëíù=UDdשgºV;W¤5=©Â‚›Ø¦V! ë¥ß¬GtDi#Ù[³G_. ;átS´ãTÏ]øÒ1Û(PL)QåÉhv eš zE¹ÂЧ™ŽQ¥ëfÑgRH`¹Þ–~²yuA·Ë)ÿÒqBTóÍ™úN×:ð‚<'­a Žâpsƒ D*[ñ9©¼Õ‹+ŽøÔ€’òuBuøšñ´ï$Kýákú"3yLļÎDr ,Š6ËV¿”`›ÿZ_=ëÞf3k¬³ºdDF/Ì¢ü¨ç²ÌÚ¶§îž×ÍßçiÐô†[ ÿ ·LT¨Å ©]×e¢bm·HNFïJ×r5.ªòaž<™ö† {tZjÚ¡ uÒÉ1Úêt(Î}2{Bvð—WÔˆÉ>)_b´ù"fÆÝ{»ö^L)ðD\ãj±T[à r8XDÝiÙìf´¡°Ïi\“£áýžºñC4㜂Q‘þì±”©DC¾±‚*í[®Î©ty«Ú`pó ­¢±ðxÀŸ)žüO'ö§”zÔ¼W‘H?Vå y"k}vÄud%̧Ö>Ÿ¢Œ°¡ß‘›ïÕÏ×G»4›ƒ"I.U¢Õm„ Ø," ûJèðµÂqh)¯X‚¥hø Us…rFRR¼ÊªÉ8Ø=&ùTsZ%X¡óðŽì£=.ÐVpºp«ÆtJ_t[›)LúYëýÐ ™>Ó‰,ÌÔ¯N€–+ªôšú3”ëÔÖc¡›ÃD‡ÔMÇ õÓ§Ò©'ë¯>¥í5è8¿zl*è ¸š^}ðÚh8U¹ ÆO‘A׌P!vœ"¥ààÖ€°Å…ÿ…O´òÖ+]û ¤ñôpóWVú>båèl˜ÀÔ²EvSxÅLÕB„c˜¡òxD¯nµtÌí½2É5šJ‰!ÐtÓdGjqN5ÞMctm›X{m›ÐB[Á;OñHèp5—÷Ü…¾ÅØ‘™Öœöjô¢"' ëš©'ˆLŸþù¨jr‰º™’•°£î£xµ*˜ãÓñuãˆ" éÍY¿ëˆy—éðh©b!!V¥Ô~ [æzÛ£¤îuzEŒÈKB©,ÝL†¬R•ˆI^¨¾@¿%L©©,qâ4½Þ|›Ï¿<šã0ú£kÑ®y7M¯jVT‚Ú+ºw/êë^³Íá-ý¾oMóZV}½.#¤3ÛÊÂ4þ'Îü j)¡jþö…$¡ÐøiôazTXtRaw profile type iptcxÚ=‰Á À0 ÿž¢#Ø– é:±?ýõÑý©kh$'N®û 9:tÁ¤ód*«;–ê……aÔ6µ‰2«¾àgÅó¿ªò0¬מ™ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá"éÕä‰ IDATXÃå˜=lÓ@ÇN+¥S¤0 )¢vëbe+Ò1ÅS¤ÂRXš©(lÚ© ](ÓeâXH§ÊK‘*µR$,14B"[&²1ð,¹Ç9MâxâM>û>þ¾÷Þÿ}xÌ( «€šÀ2Pµ¦ €kàèDFf9Ç›Ø ° ¬• —ìEFw ¨°¼¶€2³K؉ŒŽç0Pa8ufÉø%ÏK@}ÌÜx1ÉmzªT;LÔf€³Èè+‡®-1‡²c}mò\N-'è¯mPØíæ´ ½)øøb?3z~ 8´~v<ÊúYoJZñ#£Ïs8HúgWR¯»À“ÈèQnš™‡ȯÖM>‹Œ>±ç–²ì.Pa¹(€¢Î]ëõ–knÉNŸÌ[NDµ‰4åìl€)¾+¯Ä¨‹ºÅ`;[+ ¨ô8eeàPì¥(éˆ'¢$b9opß)ªÀñà¢n1­æºåÝ*\wh"«ÀÛoñÚߊX%Qáþ›l*Ü,àwk\K%—;H¡ß°ô,Qw Â²‹LgàÁ-ྠ—­Ï*Pá’<ÿö¡H§^íEFï@ÔJι‹kÛ%G”yÝst#¹å89ŠŒ>(9ìah9HQ<øø”ñùhÿCÔb_i*˜ÛÀ•#ñ}™Øº+ŸYãõoq°ìì ¸‘œò‹DŒ©åsŠpFÇIEND®B`‚nixnote2-2.0.2/images/material-light/tag.png000066400000000000000000000177431315604104400207240ustar00rootroot00000000000000‰PNG  IHDR‰ bzTXtRaw profile type exifxÚ­šivܸ’Fÿc½Ì,᜷ƒ^~ß)ÉvÉ®ªwZ²•“I1| ·ÿ÷?Çý_%”êr‘V{­ž¯ÜsƒƒæŸ¯ç5ø|>¿ä÷½ðóy÷ùFäTâ5=¿Öý^?8_¾> ïõA>ïd¾÷iïÞ7>n˜ìÉ‘}ùÞ(ÅçüÇ@\?7òÓyÿëzÏ•çå×ß³ŒU¸_Š.îÔù_ž§$F$û:ø½E;Ê÷¸ó“¯ïcç> ÞçÑ/±óã=Ÿ~…óõ½ þ£÷|(ßÇîF觬}=ù§7ü ÉÿøõCìÎYíœýÌnäJ¤ª{'õ1•{Ä…ä(?Ѩ| ÿ Çr¿;ß)N2¶ü$Ÿê§ =Dž}B+Œp¾¯3L†˜ãŽÂkŒ3¦{®%‰=Îô¤€ïp¢†åR#“¼%NÇϱ„ûÜ~Ÿ7CãÉ+pe Ü,ð‰¿|»ïNþ7ߟ7:ÇJ<ß>cŸ¢Õ4ðÌÙO®"!á¼1-7¾÷ÛýP7þ‡Ä&2Xn˜^Ÿ[h _µ•nž×ŸZ#Èzo@ˆxva0!‘_C*¡/1Jı‘ŸÁÈcÊQÉ@(%®à¹I©’ºgó ÷ÚXâsh!%Uš§Y£¬œ õ#¹QC£¤’])¥)­ô2jª¹–Z«Tè!I²©"Ò¤Ëh©åVZmÒZëmôØVzíâzë½ÁC·|zpÅ5iÖ¢UE›v“ò™y–Y§Ì6û+®´hÿU—¸ÕV_c‡M)í¼Ë®[vÛ}C­tò)§9íô3>³öfõ笅_2÷笅7k–±|¯“¯¬qZäãÁà¤XÎÈXÌŒ‹e€‚Ž–3ßBÎÑ2g9ó=Ò%’5(€ä¬`#ƒy‡XNøÌÝWæþ˜7Wò¿Ê[ü]朥îÿ#sÎR÷fî¯yû&kËxoÞŒ=]h1õél\°Ûˆm'ýåu7s ¹‘v$¼¢ª¹UèP†P9ý&k^4v¨$”ÑÏñCO!×<}%~õûìûJø sSŸ÷\}j𤒼H€‘bmî”nOÊ{;äøû±ýñõ¸>müKÏE¶Š==28XgòsǨñ”ýN/l ™é©Mo'é>S˜yº™wnQt´M‰”Mî”ÌÞÇ/±„6WªsS6‚å÷ðw"pÊóêüO'NñÇ·Ó(´´ X~(!꣦]×Ì]¤ÓÇÖ>*bÒD ÆD׸Èç£jê¤i«¡zÊ0ï%Z­W(Û„i â ö{;ßtÄ˹«/t&RKÙ³Á0ç|í¬:Âê}ó{ÝÈîµàé/ÙAžëµHrvXN»·>Ò«dÊyÁe’)êªu¥íMW%ÅP–å¿Â sg ªT-ÓI‰´E¬+œD dcÃIÓ¾á·üÙo^ÝïÞ€bwlrlàu½ãÖgÜi=ã.ùŽ» ­Å1ðýI`½„èmà„œÈ1ðVëC‡å¿G²ßf$rP:ÿz\Yì7àÑOÉxRñ$â3 0”åáÍ‚I²:EÛ¼Y„œD¸Ÿ21Ë[Kü¹µµt+I¨¥RfMU­–V›”qšÀaÁQÌ…6- ªôúAAt+¨'ÈOA ÿJ_ù9²QñÎöñ©¨¨Ž‰p¨•Î) ePºB Øù‹½ÃQ50È5Q25êö4Ü÷ý´NqƒR#¦OíQ×ÄñùØþêþÑ…@÷NËR•­7èL¡~LÁM!W6ÔÚ©óN#׸¤"ÖÛ ³X¥ærö}OHgvo Ì !ˆ¹òÒk”5{йvö¨Â¼'mç%IËR!—O˜;¶N·nµÂScn*tø5 ƒ²ä'%3¨y`8ç†s:€ðmnÆ“wwa” î.~wæ¶uôÐ^£Rñp©ò ,,B€5z€F仇¶†õ'Í™ÜTNÊ[9Ìý_dÌ^Ýß^ˆ+'+0 nƒ”]F.äb©¶Y3 æt‹Ã°wÔ^é®RÎ`âó"ÚÉÐiƾ¶eÕVz¢ÅA¤6¡ýgéÁíÄEåÊLË*Îï1Ïtz“I8ñ˜@‡ B™Û`‰OÀQ Z-]ŽèÝf@‘o4hƒž°š›êy;:a­[1ߤÞ2ïžÔ§/Z{I[_Z3p:Œµ%W88Õ Ž¯IîÀ^c5Tx0WM싦(úíab 5)s’3ÊÃn+¬ù”õ–~â›p÷CC•eÅ¡gI°‘P5Vígus.¨Ñ3!:)ÊZ§$øT¿#âÒFCx±ˆw*Žég¤'ÐŽYg‚êKç9STPNãôX´k‰<îÇg†SÑ_Gg?¯2ÇL_ך”( x/½ªb㿟³,Àhî€iB0èÍ"Â*ÐWázt–$KA¿ˆj£T3J åPJ¨AZ ̇ìTº—Èà‘ yæK0_îaô'eÚV½0#x~›ã÷pÖ>ã–¡&•`­Šø BçBO³¢ñRA²u\F-êÉP Ü‚;ÜDÓç9FîÑ4)JQª C’ÿöÕýù‚°hÏUˆ­eyŠ+°ǦÊk£E¨k‰¨ØFTKžõ(P5vȺ ‘lub¥w•q¦ÚPµ ã'•AÝôW–!’°Èb\;-E4ª C«’¿ž-(¨Š%ŒWÖÔÒÌË dvYç¢Û©´‘RDqǬ 0ðð&ÉÁˆ®¨y£Æ¦ö^– ôôFën°—Ë”|bíÑw7=>ÚÄŠe»AÁU5v3ž¨AúÛãÙ@%K,ˆ¨ØH¬Jr£½À5ê•ûá5ïcÑð Í_w 4ÛÜnÖ,ª}´ ˜‚Ùñ>‡Ò\ bÎÚq=•BÍâ5P©%µ’àŒmÁŽ·Æòfæ›–é:ÁÂ!E‘„@Æ& lSƒð/í;Õîþ•¼ÏÅ *€Š€"8bªÜÈHQþ?–Ù6BEƒ!_•þÄÀ_}„R¾¢Ù¨óQµ©t?¢`·Šô"¸!jË„ŘĤ*EšqpÐ € n`JA€žçínªÎYç4d¯&ˆf‡ÛÄÝ  t(ˆ«’pN¤vÛņ Cs`u7”-9\·Õž†Ñö|œêY‹*†Ä¸T;ÞøÂI¾¡¦Àp‘"8™ ®ØAx÷01õƒ®œUW0C' jÒ‚x$£÷Ð^cÎY|®HÊÂNÕŠë^ie.ˆj§*O±c†õvx±*ÇØ<“…c­ª™ÅÙ¸˜–9Ð<-ãZ‘Hh:%™ -ñCú‡¿•þî7o¤êc²Ðã[t²²qÔ !»uÃÀ:å? ›µ ¾|¢ôTWmá¡m_oÇ£ ÐÁ€ÖÔrå‘ÑåÊf¤™<{%v‹±d»ü=Ï™mä°­蜣©:Û™&E–à9M¨#ðÊœÐô²ÕÚL¬£Ñ(P%jóí·š>bጲb&¼¶ê±{ ²zDHTK¼ ƒ¨RÆ?„šJcÔÁˆ@V‘ä`>ƒ-pè GsL<:P$·ª÷óJ%£ƒ£Š…tÕöèL1)ï^Š_y&2N99 i¢› V€²æãAnkSšs'zo³-w)ý.ÿîwo$E-ë¸ô=áx9J ˆâ†[!,ªf®CE ˜ZoJdOXRŸ-‘ „øí L´/²e´ÑsÐŽ) ˜ Þaüfj©¤#zÀÂÃúЋ´´( iæW²œõú×ýp¢‚–Ÿ0Wl=úÖD„´LV BÂ5Þ%$*{^¹â "*jVAœpÉjùª pÂ(*Æ0ÙÂÕÛ¢ m€ :['µ˜æêÝ?ø¥SÉs¼Ê)ßàOKPdÍ€…h@~N^A‹#!¡…Á‘0F3†G9Nt¸à³á'RHÈÚ—5(ÖÞQs(eJNQ7.ý¿‹º¼¬¸èXѸ!ß“$$7— !—M<¸¼‰ØH3VTK¤Jº¨‹.0ÁÔE/(NÈûh):À ëe¾MçÒ «™ñãÁ\ŒHÁÎñ$îâ¤_/Nªw¤½,é¢÷1ïj‹ÓŠzŒ`nSJ§Œ1Í]#e:žñ¡õ‰aèFp­àᄵ ì€Ë}–Á ÁLóÑÞ¸HYñÅ5‚5wúIý`¡1|”Düç–zCØk!új]d˜PA–ã  W4)d,’iÕ©tÓÁ ëiª³&>….A<:ÃETZ芧‹«¡~èÐŽBFÅÔ¶˜*¯çUEÅ f Ê·=@ƒ„ºdàº×iåc{+>› ÂV£¸oE¯ø¬mJmck%H÷ŠùžMb2ìàµRÐpã;³4dc¥³€#m¿¶¾Ï``¢ºÀ‰f0…kÙ Ä&Ba… åówái2iÁh~`Œ´êS=•¯Vù`C¾ýàà—K5„PÌAQ µÌÍ6|Bô4 ž@e©y«j2ªN­M îtÑŠí[…Ž„Ì¶6¸ÑV$aŽÌÇwÕ.ÿaÕÎýír÷cjÓÓ)¦ÿèP£5ÃÆz´pÄË9Ì·m5Œ7N‡Xt>´T{ËÖÕ ”‹sÞ [@zÌ¿a8¨éÜÑ„îÐÀ´éÜcŒ^ëyœ9üFT7EQ!k€F`ž5QÐ2_]÷,±Â´ø.1iGc 1½€™9­Ð´b¬‰Ç-3k”ÖnõdÂŽ´Ó‚…È€Ë^öìËj™•©’‘F#ßÄòàe‹‡N§Ü0½½BbmA1> ŠäÅPé…‚ømî†UŒPJ„8Ó:”*}MýÂËÔ˜Ù‹Sƒ½˜ö*†G+v¸“Ò24Ç/\Ämèšc‹×¶­AŸ ö»b æ°5T0ãïZQG)Âk߯ÎáI>–ALnü´ bk €¸b|ÅT‚¿ò¼Ø~Ã0¶µïn:R…¸Ûæƒ 3 ß± Õ9Ðw–¿+/ x7ìª=PGW±Ùö)QÚß–é·Yø-uÃXÌž¤ hœíÙ?@+Ùf ^®Hw0زƒ…Ô"ËÊ&oÚ‚bý˜#1±UO#ÿÆF»O?M›RÇ´dAšò†î¬.š²vó_àQž¢Ÿº(^ÐòVùéΤæEzµ¤µ•¹hG1 M7ßÀ/o!ø0T £­œm‡Æ7£m\áü\iO±c98'Ë»:’GœjzŠÛYÓ©•b £WßðÖdÖÜCÜ‚yayÚ}‘m•ôá7¥ÙVÿWnÈ)n1mY&]Ý Ã6H0_>™gÝ`ö$OfsÍÊe<%´£±1MÖÏgÕÍß. £¦³l? o¶DÅ=.Id5GÀÚ¸S\¶FEð/ °  0E̽TíTÓ°5|<@¯ŒN XÍ­s¾ûcÛÌnÓVçHÉ›\iýÙ®Ò|›v…FzV£1úQ3,Á²r&´ŸÕ¹IïŒï+É}³Bƒ,PºÚ¶ ±k”T€i˜T,×ðcÏ"ñœü£4Sqa›{]û–,0·Ï޾§çƒíSûg ßÿQÔè¤é°5 \„×µiá>õkßbÓ„Ûö—+$`ÞŰMk]uKÝÙ½ó¶äMð÷ÄòkG£[ÃÝuiO5ú± R»Ìï2í>SÈ7y³È…¢D…RÕ„©Åä—šô0Í 3á/h/¤£în{¶€^ÂÓòøŒˆ_+³úX#‡¸lelÓ T„àKZÙ¨[ÛAPÜ}Ãcl[Mè<ÆuÁúÐj6ÛÝÍv³mC´ ?E„’ýÙCWÁÊ3ïe%i!òóYwÎÏêqôÑ´%LJ5öyv¥by:¾[„wÄZ ãä7¢çú:ûC–{#[/E£Ìt/±$Nm㦉a¢ó,NEµ ]¼…¨‘Âd†1â]Œ'l :BåÏ e'‰ï@1j‚ƇõMf[##®+ö¦CŸûÃÓ‚}¯Ðvÿ~“øóU ´“‚ š¶háõ€‘(ê°QdÔsƒ@±Ø¶ $$Êø¯Ü–õ˜ø1,7ÚJÅöµh˶³FjóRÞ?í‘Æ¼;wû |÷íl=ñÙNuˆãÙ¶ Œf˜½Ø6ðݹ»ûKˆŠN5*dF–º=#T['©¶{·Þ½û~[ ŸŠö Çî^–ÙË{¶ ¸é[.*Vop¨îY³já÷ì㋞=>Ù+¡«)!Êg-û;&ŠœÆÞ^l‹*ÑTj\öyvú˜5‰üÛÕæß-2#y(A|þê |üÕÁ³YFˆM Ÿ?½£¿{–ç]c‡ÕZe8Ùô*îc߉i¢àâöü)AÅ$¼Kgúü)Þ?% ? Ì[Ž-ãa/³‹¶sPPj¶7eâª.þòóÆ¿v[°“ù€Œf'}ù®>ë|Ëýæ¾–=mŽürê¼:|`zTXtRaw profile type iptcxÚ=‰K À@C÷ž¢GPç:ÕMw]ôþT„öB>rÝOÊ1ÐAçf)[?V–êX…a;bžìçìÎ^6ñúªª¼2L鎠ø£ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá!™@|" IDAT8Ë•”ÏKaÇ?ó¶ãb’[šl±-eºÔ%:H`—è˜ D§TpëP¡¤èPÙ¥R,¢¡ K¥u©ÿa³bMh ж©¹[ëfwf:8»Œ³ïT>Ç÷û<>¼óÌ« ©DZoŽÝ@'ó¢0¼¦LÍXÎ*ØAà¦ú[}R¦f<•i]€ó@ÿ_÷€>S3V"¾`bãuXú«†‰´Þ <ß Y°N›š1Z¾º*I_ôjr]wÁ.r%ÿ„E× Î»#‰´~ØèR÷²¯±Ë)P/ÖÄÛ7ïdèÇ]>:p;pB=²ÔÁåRvœáìxõ,©Æ¹ÜrŠ­J}˜eö‡¥[D”fѸ~­Ô8·[ûÙ#šd#„§ZS…3m:ƒm½5YRÝfºMÈ`¿ìb*jw¿j:Ö:À¥! 5¿ÏµüÿÜ“X]3-"ê?ú)€é`ãww™Ôü̕ϡ°eg•‘ÜÞÚsþãiLÊ]‹ÁܨԴPþÍõì}^Z‚Ñ„ð^ŽO2hVbºfö)+l_ S3ÊÀYÀ3MåÆxWœ%°fd­Ã¦fÌû_› vgQ%B\4‘±dñ3ษ%ÿÚœnŽlbÉ-‡Á&^S3Ja¬\ [xÿ‡.7*0)ЃƀcÀ h6߀ ðxljÆ×àìN¹jˆïúIEND®B`‚nixnote2-2.0.2/images/material-light/themeInfo.html000066400000000000000000000001451315604104400222330ustar00rootroot00000000000000 Material Light Theme

Graphics Design by Daniel Maurer nixnote2-2.0.2/images/material-light/todo.png000066400000000000000000000077661315604104400211220ustar00rootroot00000000000000‰PNG  IHDR  »î$4zTXtRaw profile type exifxÚµWk’s)ýï*f ‚¢¸ŸU³ƒYþ7éNwÒo&V"¸@cú?ó>¤Þ/QC Áâã“OœA¨ÝŸ=“õë÷<Ø‹xÇ7¶Ëavû1ô#ŸÁ—û†è¿¼ç›X=Š.“G¡›–D9NEŽ7ŸÎ³Ig_öo^ç|Ëå­ìéñÙG£ ô96Ü]ÂW¶\tyÍÏÊ“ò ½K‹ó$væF>ï2þ;›„{ cÃ1:|’Ïc·"ôÖ#ºH~¿@ífâCìÆh:Fßo—}@¤‚9/u¥È¢ Œ¼[ÛFÄW@Ç5†â+k¶Ïb«¡DLÎòÔ(Ó ¾æJ.zî13Wv‹§.râê648†fœ‰ ÜØ|ó…–Ý´ìURXnI&(#ìø0ÌgÌߌ›¢1fŠÍ`¶+øÅ3§áÆDnþB €Ð81•ß5̽ ­}¬‚²Â¬xÁlËVQ„î¹åÎrb½±»4(¶£!‚m3䀀 ä„ÙȉG>ž³ó\€‰p#3€sà `{"-YÞl´!. xt Àò^?Ñ+r(‹oD$H•$9¸àƒ„b˜=*G}”bŒSÌêÔ«hШªIsâäÐÂ$…MÒ”RÎ0š¡:cw†DÎ…‹+¾H %-©äŠô©¾J 5V­©æÆÍ5” -š¦-µÜ©#•ºïÒC]{êy ׆~È#iäjÕ÷¨Ñr¯Q£ƒÚDÌ/¹xG ì/4Û‰LÌ€{âq"€„扙Uòž'r3›E! ÔH&8&b@ÐwbtÃîŽÜKÜŒøáÆÏ3ºÿ93¡;È}ÄíÔÚ<÷êBlWጩu ]3kžgÒ¯gó-Á1ƒ3ÉÂ×Rœ~…LåÿË£WÆöʧ[óÉýj>.ç«÷tÙ8›À8(·?ZŸ·¤/ý2o¥¿ã×5—3Œ™”¤Þ—múq2wiÇøófþ#fÀ×Nµ©bzTXtRaw profile type iptcxÚ=ŠÁ À0 ÿž¢#Ø’!Î:u>ýõ‘ý©khu $$¹îr´Âpøô¥^ü²e©à¨•ÆÑF/YËYÝ‹ù>뫪ò2DéÉéEû jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá1öÂÓ¯_IDAT(ÏÒ¿KBQÀñ¯O-¡¡ÂвáRH$ ý nFá9 M.-mmA mÑ ‹d-9¹4„- )(jÏ$‰[2)úAöžÑr‘Òê.÷÷s¸÷œcà#ޏ€U`ÅôOÐkø#@\âGÀgšuÏ à¸vŒ‹; Øï[Œ™3`—‡åo¬yltDÌLOÙå¾L.§£Ëjíç¾\ÙÝÙÚ´êµõM×€Õzn±thÍÀ GÂÀpxý¾ÅD»?7cå½Z=Ôuy)*³\Ïvº®“S/ÏZ1€±òax¯iZ`xhEQú·g~áØD­ö©%Sic2—¿*/÷Z(™B‘ìE>-Ÿ)€œµ‡Je5S(þX¥¾HdÕSÀ'ƒÔ³íÄÚ•·¹=¡ýû´câÍé˜ì˪ù·”ZXz~@"¥¸¾-ñôòjlì ˆw„ˆEâ¡IEND®B`‚nixnote2-2.0.2/images/material-light/trash.png000066400000000000000000000177301315604104400212660ustar00rootroot00000000000000‰PNG  IHDR‰ RzTXtRaw profile type exifxÚ­šY–与Dÿ¹Š^'pXÇsÞzù}A*¡*«^gd¦{H.‰ fÒÍúßÿló?ü‰ÞDÉ%Õ”,bÕ7Þ{ÿÜWgãùÿþŸsîõ¸y?á9x ÷×´žÏ7ŽËÇùù¼ë¯ÇMÏ}Ês£çÄÛ ƒ>Ùó¦?ƒ|nü=þ6SŸëZü4ç_ŸÏ1¹/_™`Lá~Á¿BåŸÜ§Frhçµñ{ñú.ò>p¬éÙŸcgÞß~ Þû»/±³í9^Calz>¾Äè9îäçØ½díãÉ/'Ê~Ïç·Øí=ËÞëήÅD¤’y&õ6•óŽ’£Îe‰ŸÌ?á}>?•ŸÂšvÏn‡qÕy,ÏwÓ5·Ý:¯Ã †ýò™Wï‡çX ÙW?ÂM?nûj˜&r3È[à°‹;Ï­çyÞ<ŸôŽ›9®øöc~:øo~Þo´·BÜ9[ÞcŸ¼bšahæô>E Ü~b*'¾çÇ|Âý”Ø@儹0Áfû½E÷­pòøœØhìM²Ëó¹!âÙÂ`\ 6¹ .9›½ÏÎÇB~#÷!úNœˆŸÎlrB"9TÏæšìÎg½ø{j!ÅSÈP#Y1 øÉ±€¡&A¢‘$YŠTi)¤˜$¥”“rTË!Ç,9åœK®¹•Pb‘’J.¥ÔÒª¯ “šj6µÔZ[ã¡[7®n|¢µî{è±KO=÷ÒkoøŒ8d¤‘Gu´ég˜”ÿL3›Yfm¹”V\²ÒÊ«¬ºÚk;ì¸e§wÙu·÷¬=Y}Íšû’¹¿Îš{²¦‹çsù#kÎùíNéD4gdÌGGƳf@{Í™-.F¯™ÓœÙê) ñd͉&g:ÍŒËyÙî=w™û˼‰ÿ(oþ·ÌMÝÿG挦îÉÜ÷¼ýµ©º7NÆnjLmØX¥ùÒT“¾½®Òád®…å oî½ÇÚ¦P!° ¡jcØEÖlî¾"%NZÝÛ¶¾…\óôøÕ®½Î+áæÖm\cÖÑà •ä%;ɧb¶T}ºïœ[.úßÇö—¯ÛÔ¡ãŸ}/'yõ¬O[oæü¿¼ï~Ëz¦çVw‘éuÞ ¹Ú0ã0#®X|î­, "‹Üu.µî,öŒ?{qeÌÆ:‚iW³g"hÊ}5öåÀ»Q¢Ð¸|!ð‘ÂJsÄÚw»¶Õ븈ASœÏõ¾÷P³Ë¥—ä’†qÍÜ“bp:á½N˜ÒÀeRìºþ^ÝŠ'¾¡ræø‹>©A¥ôÄ((ÌÞ_Ù357k]üžÖ‚²k’!xê+/—ïç»ä`ô­ìrnѬ§¦Dà<Ѳuêi†e7E—rðN¦æ?¡ cE ©ì]†Éâ) Ÿ¦Û2hÝ‘ ‡nøš]ùKdx5¿@b—/yëÀÓ|ÆÝï¸Ã¼ã–xÆ-­'1 C­²ÖQÙÊúaw} †T¡%ÆÍÕt ê‡9=˜V{Wr‹uQSú1J£Ê ê‰õ;LzsIa6-ƒÑ²²Wë .ÃÈ£Sÿ¢Ù£o¬Óèç1Rlä]=$^£ø¸C}9·ÔU²]á¹$Cysöîà\ÊÖð”DÐ ÒécÐ pÇt„®ùóí°Ýøi€©ìpÄ1ïî‘òµcݵí·„ŒÃØã[IYcó_GØ'25FÞ…TÁ%⾡;-ú %«.B#”,ôØÇá¨rW˜­×<6BÇ«C¥tuµª**sÓãDÚ`ô$3®g'ëºLt¼™ƒ0êkAšS×¼UeÏCìeK*NîãZ­HØE6£B&Dà¿(â9mêúáký7¿ªÌ¯0xìêM9Úk‚<î´¸ H1úÀf“p¥Ÿîƒ> “¹ :"«vºi—„¨É†¾X¦SG‰O 6skÔ5w(8d”>IÀQw;骃dlÐç”æoÎÿñió//¯p<¥I½WN޽ÙÖÕ,4cû¨ Å«V«­Üsjš%Ac.ÓŸIó8±„á/Vû§ ¸Q\ CχÀÓ"`UöèÒÒ€÷ûWAúéÕ¥ÊÔ3¸„-ÿ˜ ÔNì&Z(˜¥Î etDÀ¶Ç‚h cb€JdÍ¥M•D""Aû:®£Š0ÏdxŒ ç6¡¦¿bòBOxX D8ø-7Ñ`ïÈ“熘>7KÀÒxâê3C„œùTm4ƒÜ2¢`(S°Ë€~§A˶ÿ\´Qëïjì°r$ƒøÃÏÈ :8–«öf[mGi%.úšª Qo‚ýûFáõ÷¬¹©y7äˆÚuPM{/×¥jœaîÞË¢ín ÛFu>¤ °)‰š °¡^‹¡áØðT𪋣ѵ.´É•&ž»‚C§ÌK÷nõl'ÐÔødKÐbÍô§¤–C²ÂAæ¤2™xáfG=´Ïf¸àm蘰ùµ 뾎 ŸÝ8ë!OV𠤀v8à\(•vL4E6uIüÍ6ŠÎÉ…öÕ.^ñS£™§è„@埔ÂO¯n•lVî*[üLÇÎvÐ.i o©”à)îðUf2ºÓÀ.í; æAI§] ~9‚ ¯>šÖ`‚šo;¥Î«qRƒÂ÷_f+´0jÃ05 œ¾ØYb–5µÆý9!pgÜqkÚO¿*T´è¡ZFµ÷3¤—¹kDÏ€]3s£•ÓÅ ªv·æ^ÕRKô1bÒÅ1’â £žÚZä¤~•ƒq¤8ÕcÈ#<'&Œ·æß¬¨,ÀÆìÞâ¨ÊŽV:ʨ¡Ì¼cQ¾¡Ï„–.©lEGô¾ˆS7ÒIÕ§ ˜_¢‚-âÊÊMŠDÿ ¨º >µ9Ž-‰Þ—ŽZ¢+ƒÙ^jmüV2c@Rº\–µÝ™ú” ÝÙ{)×bë—ªmåkÚ ÄGQphÙ€ m€läêPõJë Øqà•NiÒC d·˜’Ûö‡¦×|=ðókN´¤\•ïöu„<¨?NÄØ››ÂvzA2q¾2FÓµ:ãñ8†›¤ßËÉ|ÔÓ¸þ\Pê¢Nò~­'óSA²µ/v ê/Fe^«üŠŠš‚kÕÒ¡#Ü™ér¬û½{œÀÞ3˜âQƒ¬¨ë©ø`ù&,æO•§AbÄmíŒfó KÙyÐ£àÆ [£ëÂMû®F8ñ÷ÎѶ¬^Ý©Cª…Àò‹@Ø•I%Ï¿‘ŸýÂ7ÀçìÖ(‚î’žÚ2Wþ”ËbKC#È”®²NÚH÷)­?±ùa<ºgôGhÂåÕ@Ó:|ñ†Îƃmý6­‡Ê$™¦®™'XEÏcÂ;=å-¼Móë¬#Ý ºO›þµœM«Ë$ Û`ÔC×¼âßm”¦sÜÅjlãÙc\F=.DC!TÈ ŒÛÑ'^ñÖUwÌ]u½‚M5/ùØ`ìPðqš~FÛ¨nm3 .&±T3¤ZRFøJ¡ ©×LS¿u*YÑ?ÇÓÓÏàµÐµ<‡;ia@‡shl®£Ô•v_£Ö;}_qÙ«±”QœÐîn;¤„®söÆ:[š` •sAÕñ>wC×Ôõg]›UÖ¼´-¯©{WØ÷éÌW1JÛšdûz(;×µ_™©aŸÒ¬g7¹Â¿™!ówÙn¨ÞÀ"ýYc«…»ËÏ,™¬@ ÍèeMY2<“$|ÿ|’ašõ"]+cŠñ4Îg¥×W¿ªç`BÏ?8 K/NwDÆgÑRZËdnœjTGÿØÓ£yyßÒÓouQZè9“ô8m<•Ióñ¬ùã(¦îÖ|ì÷UU}´nJÐáéžÆÒ…üSïüÔo[fáPû„0È;º×éŠ\Ã2;; du© "§«Q¡ZU¿Ë KY8«_­ˆ©- žãû&£.ê5§;](VÉtýEȧ7/[WSŒðn_yLÍɇjS7^—VDõK•ûÊ5ÒÜX±µCÄ“̩߫ÉCèÓkŒßÜÏ~ͳÑE¥³HÊC„•Å©«ˆ—n²<_i¸|Óµ-Æ{ÛÆS#\… ƒ )&êÎt‡![N-åý*Èê÷« ý|DÍ6‹‰ [žU¬uá™Äé÷] ô#wèÓýfË öì÷›-9ækñŽ/0êòžñΫ:=âYmY+w÷Ë£úEÿÓGÚ×>Òü³LúcžÏ,u µß昩–Ë~ºu¹šÆñŒ¥8¯°U®+l{ªÛùN1é×® ãàÍ÷©>ó$gžªrÌÓCê˜nµ1CºÈ‚¿ MÈÙ¢Ÿp6ͱӽß0‹ —¾ý™›ÙTC™”xPf}GB|Gcjÿ¶L×§gË™_zTXtRaw profile type iptcxÚ=‰Á €PCïLá@›|\G¸xóàþ‘`´Mš¾<9¯;e›ÐAçÎRvÿXYªcõ 8†5ëˆ1Ùæh&ðZñúPU1²ÛgYÀY jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá”´M&IDAT8Ë•”?hqÇ?÷»k/©ýG[ìbÉ*’77Eì”Ñ%]»‰B@"‚³ §[ ]$–"ê èÐ,¶rŠijkÀ\îr¹œC~9.絿p¿wï}ï½ß{ß§€|µ¤W€k@˜–ŸÚ@x T,ôã±JÙuàpž“± ¬Z†¹‘H˜¯–TàPÆ °ܶ Ó>îG½ êiÊ 7†*Í÷¬;ÛqâçÀŠe˜¾)³ pYÉq–Eƃ1~·šhŠF.vgYV.Рɫà+ÀM`x¦È|ÜÙ=q•‹Ê¹‘êýÔ¸Û{18ÖC“Ý ð!ØåÒ´Á\föD2¯ëñæ×˨é Pr4B¼ ~ÐÒ\²Ù <ÏC×3((ôüÙìN]Ïàƒr£XrΆ!ú/»eãû>¯ƒã:ýA´Ûø¾úÄP‘¡ ±ï¤Þßs”dÎ%þ§+üTBÿ!åËð0•ðÐm&™ ©Íá µô »j¢ÏŽBB­½ŸJØH®bK)ô¶ê¦ºÂ‹›êÀº+hU ½¯§N˵™›ŸGÓ4&'§˜™éúÀÖpÿéòcË0÷4Ë07òÕÒp à‹rÄÛ?™RO›áçÞ÷èqxß6:ðD ý° ,[†Ùˆhä>[‘Om¢:p(È7¶Ìv(KRš¹Áœ;À°næ^<ö/4À“²hÂIEND®B`‚nixnote2-2.0.2/images/material-light/trayicon.png000066400000000000000000000234251315604104400217730ustar00rootroot00000000000000‰PNG  IHDRÄ´l;ÅzTXtRaw profile type exifxÚ­šir$¹’¤ÿãsìËq°ŠÌ úøó)d2³–×=ÒÉ*2ÂÃÃ0SSSÜìÿú¿Çüþe_«‰©ÔÜr¶ü‹-6ßyQíû÷þ:ïï÷&>s¿7ßxþ†÷6ïÏùãé×Jü¿7e~®S?ú|ðuÁ ;{^ŒÏ ? þwŸ÷¦}¾×ãé|þoëÞºÏI¾…`¬Äõ‚7~‡ÆÿéÝ%0‚PB¿;ï«×«t_~‡ð±3ß/ÿÞ÷«?bgûçxø=Æ~;ÿ£Ïq—þ>v7B¿eí×û tWìÏ?bwΪçì7»3‘Êæ3©¯©ÜWœHŽb¸_ËüþO¼.÷§ñS™â$cËNò9ì4®9ï‚=.ºåº;nß¿ÓM†ýö…¿ÞOo~ÞdDý¸ãKha™PÉÇ$oÃþ{,îÞ·ÝûMW¹órœés|ã/?æïþÿü|_èAÜ9[¿cŸ¼0Í0”9ýæ,âÎ'¦éÆ÷þ˜¸±?È`ºa®L°Ûñ.1’û…­pó8/Ùhè­+ësBĽƒq Ø °]v¶x_œ#Ž•ütFîCôƒ ¸”üræ›2É¡¸7ß)îžë“‡¡‘B¦x*ê$+Æ~J¬`¨§¢I)åTRM-õrÌ)ç\²8ª—PbI%—Rji¥×PcM5×Rkmµ7ß–ZnÅ´ÚZë›v.ÝùvçŒÞ‡aÄ‘FeÔÑFŸÀgÆ™fžeÖÙf_~…Eù¯¼ŠYuµÕ·Û@iÇvÞe×Ýv?`í„O:ù”SO;ý;kŸ¬þž5÷Gæþ=kî“5e,Þóʯ¬q¸”¯K8ÑIRÎÈ˜ŽŒe@{åÌV£Wæ”3ÛDTÉ“5—”œå”12·óé¸ïÜýÊÜ¿æÍ¤ø?Ê›ÿ§Ì¥î#sF©ûdî¯yû›¬-õ½y3öªP1µá@lœ°k÷µ«'õ´ó8y¯Ø¹I({ž°s¬£@5£¾ê>+A*kJëœäª9Tòl 望ªHØZm.â]b®!öF:+¶²)~ k–Ãèzf€6ef{œÔ{ÒY´~g—È…Æ5˜[™=ǵ˜óš9ZWù}:ß÷«gR»?ÞŒš{$ð!„2É`MLÊ·˜v©·Î ýaÂ÷\8öæR¢9‹ã{¶¤^ ÜTÚq¯±O¬uT`úr£¬Ý¢_Neµ§©žêbú~ÝáßHkõ%wC<‡‹yÂMh °1ž™îåÛ(•?Äe7@±âë@}:ûhNù¹˜±ªíÌ ÜWÎcZ+„½àÖ¥Nˉäø2Ú$€‘Ú º–[”Mßi¹Ûؽð¬T”徜æH”÷™b/™–5ÚnmÚºëýŒr,ÀÞÙGêî¨Dr¡@ÑH\,g~õ½+s£pá3çÎ'F"Âñ Ø‘½‘Œ®ro}­i.eÎF«¹tå C¸×´4]‚ ;10f”=—¡¢È]yçZ».½O&†M5[„hKM¶¸á2\pM]zÓ·¬JW¢¡õyñýBó!Á ús“ª( Ø&ŠD·‚ª,Çò²aTÕa·-9à ŠÝfGáZ§¾(AåÑDU¦6þZòR´½—N­.˜@æË$Â9a§î)˜ô!Td½(ñh-’Êõ¾\&–º„ Ñ€ÍùÙÂø}*ÝUÝ®‰•ÆÆLÐX±'HTR×Ò„ýkSK}m!`ørjIhQ¦‘Iô³Õ¼V„jxZ'*Á¤![hõ¢ˆ/\ö½˜¡Žˆý‰–Äcyg`˜ÇýªC `±¼O¥6Úd¹Ë‡µöÞ½‘}fÈP;*“]ø@1,tšü‹k@ƒ¡*R;þº‘ŒzƒÒ9€•,y"ñ½¤êÔê´³ˆã¿EVÆ šÄñLP*ÅÀEaw5±¾ AGº Ý0ð5|ÓmZ „“ˆñx2tõø5å·&–nä‚Kê$ó”…¿qérÏËc‘QoªÕÉhé2˜le _JÒQ\”—SuÀÙè2|¯Álb¯2œ!"\éðüÆDÞž±´‹è“‚ÙtGx#n¥H1ÖQ±˜’KWÚº]ºhj föŽ5ªkâCù ŽJ†€è–&áú£fdèsP•‘½V3^!©5F´2 £-uMÞ'{—#´ÎBׯ7õ«@éxÖ¨¼Cîc³¨(ª éúñoüEEÞVKU¥‚/ÌZZÑ’Õ¹ŒJ…qíMêY®º2¡V3j`3%p‡rš’b^³Ä¿“T^¹îüY"¢ÕˆÛ¡X\ÉÁÄŸWÕú«ÇÌá`—éö\n¤[Q¹[£é¹s d$”Ìh‡L±îhÄ‹Òb|cÈ')¦p»‰§íkèÜ÷~údTEºHœ@ ª0ˆôÆŠŒž{ŠôeŽ ø.$GtõÌZµT¡¨È-ú ò1+* ÊÞjè”âÎQWð@Ænl÷‘É Îaʆ9+  Hv¨ºçèn$b¢Ê˜Í©ZÕŠ0„S~û„¹ÂÄB¨t„ÌÕ9{Õib'àÆ€þ<ˆ £î ªtöÆf”kôì åÒ†…‘‘“a6n‰Ô„dc$¬Î‘ðÊ>Îz ýƒ^⨎‚ÕµºVHˆ“Sÿl™ÂXZ̳Èi/\9ê°G»Àˆ©È$-k µâH oùb4õÆ—,}ÉgÛ ¢°>a‰›§§lŠÔ ´ŒMâÈ˘ü#âÃ/Ägz ”±Í;B”üÀûo˜~6_˜f”߯µ¡ëúí °ôÒ +nmHƹ¡üè'ƒÚ£Dó4Aw97ø AGÉ·ÜQ-!ˆ‘'¾wB[ž“÷”#Të9Daß^L÷·:Qs½ÆLöAdz*£;‚/øg„”LG@k` .gÿp5½ ]/ÿóÙæÓ¤ý/˜íoØ&Kí ­ŠÒß‚]óI’xÉš€ãòþqùýø'—;±†IK4CמZäÇlÓÛr(Ð _ç@‡m¨Œ(­`‘ž}Me­Í…|mᮽyDA ×ÝÆV´/Ö…¼%JZë\ËŠ Ÿ·©" U«Wªãîªâ} ‰ÉÃrXG•ê~¨Ö]üK&¹ï$;¦_2?ütÀüÍîu6”Àw,ºÎtcþÆ¡`’²y`êÌ_Pî8S÷— u—-ë-›Lb©ÇJΊ+ZgrGÒ©/ÿƒÔÿ–ÓÇãôt³kï‚I²zL¿³úùTã‘ÉÞj“X[|@Š#‰ƒ·ë †Ð_›zò¦"å°¦Häèóî·sÍ¿ž¼[Å¡ŒÜ™VÒJ‹ÒjÙg?K íB:øÑG¿Ž§F±3ùlùp¶û+gkm$Üï)'˜£Ï¿?¥ÖqiH7u~ÕåyW:´¸v§›—Vº®&Y{»³ekŠVç‘!.è¡Nx¸v hAìc‰Ath‘zAb#sIŠÖ{µùô¾óhSÞ¦¡$Ë_hzÈ'¯¹ÏS™@Ôµ„ß–hw{íQjzÁäð¬¥V4.úAã|…‚uX˜ !<>Ç÷N—ð´0äIxv¿Dœ€ø®Zý„1ôä9m‚•ðô E?nŠzÆGØ/3þ³‡ö ¬“Ÿ¶ü'N7äæ_Iý¿ÇéÚ_ëÏ”Ø÷o@þ¸ÎOÜ {¿ ©t3-r>Y F÷¢ÇöÛ—{¥rnIÃâŽK@‡“ÌCªpËxæ­Â3!\BsaLëGZ|É*P×Ä5œœ.…­  ø£Í_¢B#7ßîÕj‡O5:”b¼¨6[8|¬ôð=Bv*§ûo/M)bŽ—61bÕÃ_y¶µš6²| Äô ‚`,wGªœ\µµ5è¢kA0„¨¢Å«Ú«6j‚Bç-ÛH‹Ú•&©"+E@FÓz Ž&†žZtæ®Æ öY°£f·«NÛ „¼@¨ÛëlD/OÏ uVËQd‚ˆÛ†ºD`•Œ ÷0¹BC±ºÔUŸ¬f œh)…À½²QLNœ÷u=;ÎwÐørB#=ê …sÛü.èïÃ,‰Nµðœð2Ž1BÁéäîLDe6¬µ¯ØÁíö:ˆ§.uè¬-em¸qøð{&-¾Æ»VYgôÕü¶'nóxÊ¥Ü'P†?rµí|\Ü}øE`U£Ü·¿76ùDÃ[ø‚AŒ¹´c‡·s)¡‡0 uB½wO‹§a-¦Jéøå•=ÈSI×k4T´,¸N„2ºK+‹]λQ ôª´-ã‹€º«vÏ&Ñ6}¤6—ˆx,ãùÌjƒù_3!Ó><,̤ñHðƒ5 ØlÑOŠ~Òcep¨,©d ü.Y9Ú¾V†½Ó“^KñEê3U¢Üà>3ÿZ¦Êù-O£UBæóÛ£#é.l]w5IÒU¯8m·i~·ÿ;»Ðê™H u‘LÔS0¥”+h´û¦pn£Ê´ÙLWÊÀý…OCÔSPÇÈЫœ7¸v˜^éÑ!IªŸe¶Q×DÑTJÖàÒ–:(w}7¨ykh'z\¦ê2¸9ÛîƒZ&"î4‚LËAܧ`ÞS5㕯~#$òzßïA8öÅ °‰ŒöÛ7j 6Öó/tð‹1Àw"¢Œðk­ý+®ægtª†ã×fäJù*GÄÄ’¥¡eUé|[‹Ú8ÒćF¯ÀµUçT'Â]»Ä9º0ž²Ïõ;HLÚ}ÖcR„ÀÃ2zŽ UÓhðÝZJWÕFˆ{NìÉP¢×ÃDe¾5?i-tRÖ³l©¦ Ån¼:Ë jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsttÞfxtIMEáÔ Ó¢îIDAT8˔݋•UÆÏÚï9sÎèèŒÇÐ&uÔ¦2‚ÂÄ„2"Š(»Ôƒè¦¦Ë  ›4B‚Bì&ÂôÂè"RÌÆÐÔ§œÉfÎÏÇ~÷^]œQÇ2×Õf¯µŸý¬µžµÄ;´›0\# Uë¶V¦' š@Z#QCîÙ3MR¾æ1Ÿõ2ŸGÌ"ò¥—ÝÅÒÃøñý€›*aHA;0í•i;Ò:D}1V€‰ìóžýÙ¿r8JÎ×ó|ì\~ýó>ðøñýØ@Ð è™ íD,l)%æ8ü’gÿšä‡)óéÜ)Ûi¾K;´›°¢j*¬A°×dzû_Ð~¶" 6“ò2ùež¥Ìe†k¨†úLyÓv`P@C÷Ã;$œ'»OyµÇü–§ ð¡ gŠ0T­+h‡Lî€ ÔÐÛ*ëÙZßÀªÊJ*á8½ù½;Ëéö%~jO1ßé™—yçM ‰ø¨ °µ˜ö"í¼Ãt…*¼<0Á#;Ù2´‘Á¢NÝ-lòL³·Àã·ÎS½ýß–Hî¬AÚƒq¡éÉ~÷YÈO„Qv­|ާ‡'°,fæfèÄ.îŽ$– ÒX¾ŠgG¶2õ× NÌ_$™â`[±¨Óu‹Â€MÕ5Œ/c@UÎLÿ±ËßóG{Ç1‰ CòêæYßc]u”e]£SMP6Hk–èC …Aê¡FL‘ßþ¼Æ±›?r®{_ô¿Ðžå©Õ[XßcÐê,ï3¹Dµ‚¨QHÔþ)© C9;½‰¹Ä}§›#½û`„RäŽÕ*FP½X2QeZ”ŸÇŒ·bÿ®V¨ðLR¸KèáÍNnE”HÙ›˜ÒÃs¾p<æLŽ-#嫸Ï-.—G>ØÁ:œÒ“O›'Ÿôì¿öJ?¶“z,t[4;-Úe‡D¾ïmé‰vl³ÐY Û$ÏK¿j!&êwži+X!c3ÒîV‹™Ølseæ*§nNr±=MÇÓ=ÕàT̵æøùæyN-\æ¶—à$è ÆOì3 ô>Ò>RU'YÑu¼]Òku)cÂÝïSB!£‚Q’‰žqˆˆ³ €/ Sæëžt÷!RÞKMææ5áÐrˆénMˆž‰÷JsHÇ$5íOΰbÏæ$Ù¬Ç<í)×kƒ2Á ’Cöµ¯ƒ˜Äô©Œ/4…“ÀðÛäf¯T`ç õ7Õ€L"˜dÒð¼È² œDú㨂¦€tuß‘{ê}ì³=`ÂjEÓ&Ul— =44Œ·™cáX^_´ó:¦Åyù~C¯ïóúãùÐ÷û1ã=ÐǓ߲ÏAß“|Tòë|zó}ߪŸ–óþU{Ÿ“×áçϵ Æ+9äS&¿òzJa¥—õŸ%¿Î®RË௔ùûØ…oo ÞþÚb×ûŠòc(Blï ÚO1zŸOòûØ=ú<£ô=k?|a)žøùçSìîµqïy­nÕF¤Zx/*¾‡xÞq!9ªå¹­ñêü ïûóš¼KÜd̈òÚ!Í”S‰7Õdi¥›ÎsÜi3ÅšOîsÞ¹<çFéyæý$£ú+ÝÜË,ÈE.›¼NçosIÏsçó¼O¶Ä•91XâŽ_^áw'ÿäõm {=á)y0÷+VÌ+;¦™†gÎÿr I÷Syâû¼Â§bŒŸ[È ¥3êZM&6^CàÖ”åîSQ¹ÍêpÏñT¿dÂA7ê,°Ž$šÂ>Ò5[]¶®´á¤ÝÁì‰ci—Ó×Ú &º¸ „Ö—´#ŽÇU«i2ruÙ›wÀÔ\É5zŠÆðÛñ¼ÆTt^»)n=óîÜùIïäbàhóNÏŠÎ¥)׊ v‚ÜSë¹íyJ^$ˆ‹”´Ê ˆ§}Ó‡"ëµ›£qû…'"73-Í6yë“{ûE¦ŽÛ ¡Ñs:XÇ’ ¢H¥‡H†s@ X4fÓžˆ;§?:†//èÒI@H¶,ìK ¯À±E9ëP;h%B©]Yž¶Ùv‹ÆI:ÇÝû\ùœ˜¯#gé!ð½Â$Ó³F¡äkM3¤Ñ¬aQ±zÛÌ}Îû$ÕCæï²î1`¬Ñúβ¡Ë=¯j0/Nh46‹…€õåŒ;ÐÉ=ŠB!ÁàÀSª oRÚª»™ ¶.g÷À×¢¾M@YÕÕŽÞÑ—5á•¡µjï§Êåis±wAkoZ§µ§ú+µ¨b¨Lqó ØW/Ó.ä9ž0å &Z çE ø¦õ“¶˜©˜çM,:’M ã|: yú3!ØÑÖn@óMR9¿Xøê ’K6£¢ à‡4¹ï^Õ  TÚ8Ý]o§…ˆØ!p6ž‰&,‡^¥bq`‚%™íBP¨ j€¤Ÿ‘©åsf„lÁÙè{ZB šu/³x¡!H•W4xpѨôĈÚ7kÆ$þÁE!IöH*®AÝîðÙ6Sp®C"ÚØ°¼â–[²ØÆ7J&ùOé$Õ÷õN7¶—ËÕZOM‚—Oa‹tÔVàŰ * ìå@b ÝÆy*>ˆ¢½çBÌ·AÒp/é2WI¸£·²BÞ’„ÒpHîþ¸5E5]Q;Á£ÖËh1ÀPh†–&$ Y!†ÒáRÐ’ $ñ‘ L„Êq{÷¹rUSpØ“ëì‹2<ŠöåzáC‚¾Üä>ˆTÃ|èP&5PÀò˜5ÚÛOpÈWf‚'ë±~ñŸma"Üqh§oÕe–¡k<§‰a`$U+§“áÝ¥PKÉ-zꑺU7Ç:(^Ý3ÐotÒšTY+N⤈áÎNQp* Ï`Ö¼ô°!O>ßñ`…Ù„„wŵlr½)‹Ç×GxNÂAp_HÄÉÉ!j@Häž´sã*‰f~¬à ¢ƒ>È% ?²»]9y¢N ï9—>&údÛm 6umÇPÁ»‘Q ¯ò¦Ûx[ll4í; ‰[ƒu!ŽkN®wU¤’а·WuÊÀÚçð4³î[YcÅlŲ!>Ç™©ò>5Ë„,£óšÅé_À„ _"ën`] jHîpSjQlo±öhnˆhV)´ÓƒéÅïßňZ¤RN ‹‚Š?ü;—ø ™A˯` '$žâ =>žÊs‡NÛLÁ¼OõxB¯w‚!èX:&œ@okà(‡ ÌUÊ«w™ß#‹Ñú±›áx-37ÜÑ¢Ž\‰\ €¿ZŒ–Áp¥x8ùâÖ@žânäA.eÖjòÚ~”"znà3ÿ„ŽCëv«ß¼{GÖ w|ž?0£Ë›ø¹ý5ʧ1~ælî{[ñ9|LÁïÛ7I„’üÖçb˜Ü© Òa=á׃Ã`ò{íB”¼vÀ$”ZÐêÈ$P®y‡\[âÅEãtN{3ÔéýëE&8ê ždOJ¯Ñ}gáô¥-p÷¡—¨´3Ò‡4·äŽ,RW02EwÏdM½isÝãolüB£1öîÆz¯øÐœNq|‚\éc²ï‘áúÓ+޽[lÌ24§:o¹Ëi4[TÚÈùs£HåàôÐÊì¥f”<µÈ8"Áò‘‹O üÏ”ÜO¹þâºð%Z|„ä­ʬ­ˆo‡ŸG¦_€FmmÔ‹¢¯,`ÍI¸G!p?í3…·õºú¼àË”h—ž¡^Û÷3ÀhAä€poL‚k® ×ǵÌp†‡Ä›Nô-¾ô2†Hi³cÊ&Ž&-¤ñ:k›Ø“Öœõ„ã[ž!Múˆn»GC-ø§eº$ÙAiùà:Gú.˜ î®Þ)[€WEЇ(»8ï Üúì7ásä‚Õ‡ Á!ýÑ pIàôë•]S|oh†aÌÑBÃÐ^H„qáy‘„f83ŽCž|÷áÚš{Ó\ÿ+Š ¹Ü¼! ɶõ¦ BeiÛ·gk¡·¢ùGÿ1-åq¿yãt0ÏtQ긑ééSPŠ÷NAVãÿµñõ"îH\ô¬ •ªˆS~•Ž=V å"Nm[}c|ps\wd"lOS vàvÖThp“79tçXfÚ?dsL|NŽ&µƒ¿IÉÈt|îÑZÏB ñz+M* #in öõípBJAÚ­ _)¹š£®Xë0Ð$üéò3Õk㻾2àó&$Óm›¾I1wWêx)¡UD ZÀ:&G) IÞ)c ° )_xf6)Èòî¤>½-æ7ÿ´™–ÃøEþö_1¾éÎ(-H%è­NªåV`ê®ô×^ù¤»¥ÝûŠ&Ý,•Ž"ú^}& ¡béæÛ[¤YS ‹Á|&ƒaŸ¿‘>£qpg¢0jÀ÷âûÂ[Bbš|tÇ7f'£ºÁÑÉcïàèyqÇ=HÐóMâèìcÅä„q|—yÞHG´>ü,^ãl²é›«€"JL2® â»Á³(2ðq»MÇÏ—Ž¼“Æ™+ÉnpÀ†åÁ4$XN$Óç¯~ÄÅ'#;ÿAµ|?†_¿X–I{c–çÎì[qèH.õú¦çh°Åc€û¦ÔÓplÕ;œO;ÃÒ6œ':°=w‘X\luôq xÄ ¶;x—¶É o~ÖyiüàòãjÉÖꛬ “‰'·pžöÃB‘x/I÷í½Éœ¾/ëý’Öµvx6tý¶è>ëùÏ)oæ)ZoÍqÿ L­î5ø±â-”ïwûžCõùcT$`˜³É®ÞÌPê˜k4Q\ô^;u üÃîðçyzŽ ä.j økú4¼Ï¼þßöýâļw¼Þ áîªb? V˜vR1î1OºBj„–Þ¿èPÉÚqJJiÂD¬=tßó9[¨Qì…ˆ  áØÈCjÀ„Bh”[£Ú IÑ€è^›ÐÀ¡"LP‰?­iazTXtRaw profile type iptcxÚ=‰Á À0 ÿž¢#Ø–Bœuê|úë£ûSchO $N®ûI9º è\ÜÊÊmKuÌš‡Â0»£M–9Û%¾¿«*/2êÌbï¾ jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá0;w[S7 IDATxÚíÝÏmÜÖ×à;BÒ‡'@j˜MÛ«YN RA*ˆÓG©.¹Š‚¬ØC`©Î"²!;²,Jüs/ßçÙ~_쟇çžóò#í £ާcþÿ‡¾ÛùÔ¨‰Á4ãà‚¿€<ü€àáÏÅÐwW>i€œáo€€Ðá/ „A tø Á@`g>Áƒ¶Ak€|—- A 8Œå%@Ãs+l°hÀ m`Ú ß1 @à#ï;ØŠilÃ?˜ Å#„ ÃÛ"l <l°0àlA€jy€Ð À¸p8žÞû$òìmÚã9n±Îžš÷lZþ—Ê@ °0¬° €íñ ‚€ €Á„m€ ³»ax#t`2Œ¾¼NŒ¶66Ãðî§ ÚØänÒ·6@|€9y` f6MÍÃÝ6€ÐA˜ú¢ «`»0mlðµAl7éÛÛï dÄ ŒãÀF¸;ÎA6|6=À l`0Ú€ À'ò¢ ÀÊCIÈùÌjâÀÊ¡†AìÛ€<„@>^Ø>ïðà0Lˆw/ ^ºú€€ ð_¸ú'Ÿ{IHaíY<¨ý3ª ؽ l4ùÔÁj ÁƒEh—G„‚ Àøü»Þ¨ UV™ÜÕmi€ާ÷¥”}Zr‚@0@ŠŸ&P;0 ' =Þlܱ˜ÁÛ@0¤ AÀ9ªã¡àØØކ¢ë B€Á ¸Ö€` ‚€k† ¸î€`‚€ë´Â·¨r¦þ !W°°À6@\A`:ÐÌ ôXÀÀÀuòµA`[ƒE£Ô Ø ¨`rÞÀ |ji¬îî EõƒDCÔ 0'Øì ôµA€&©»9ƒñ®†¾»påâ7¥”ß‚þÉç‡ãéƒ`Ðà]£ €m€zl * Bõؤ4Lwm†¢º€Ðá Y j ˜šGš#ÅcÀ[2ã~è»[WlÀF ”› òmØPáÝ  €m€z€Ð )«5¶jlÔðt^|º+éƒÐ‹‚`à®Ïð!x(ªA4zÍA4xA4w W€ ±k¶êEM]£U3B°_Ãp¶Ðãkƒ`àŽÎp!x NAÐÄ5W‚ƒ€:@óÖX@ãÖTÕRâ¿[Í‚ qk¨À‚| ÀÁ T·`€-êJý‚@³ZU_‚ð A˜úƒ„\}°ЬÜE‘;¯†¾»påAИµæ± hÊš¦š@CÖ0Õœ𱆩ö@4Kõ'Å×  Bµ 6ä4#wKjqÃöCßݺò h¼B€ZôX4^ R= €ƒ¡ájjR!u)€@T£ÕÕ§ ÁMVcTŸB¨S!„Ô© ›o¬š¢z@@@½  ÖTß}wíÊ©YAªfˆÇ ÜL5DukBjW€´&ª!"€@pÕ@@@   –ˆhœ!B7NÍA‚›¦fˆ BêZ€´f©n†¾ûÁ•G@@m{,™R#D!õ-€@X“ô|A’¤Fˆ BjÝ×A ­1j„ýÐw·®<ÑMQ u þ° Ð ê€Çšây)åR#DPÿ hŒš êÝ@SÔQó΢&ˆšWÿhˆš j_ý# j„¨{õ€f¨ ¢î4DMuï  !j€¨{ç€všáe)å<àŸê× „¢›¡&ˆm€3 €åp<½+¥ü* h‚¨}gP$¨ö_•Rn µ/  j€¨}çÍPóCÝ;h†šjßY@@#ÔQÿΡˆúwÐ5@Ô¿s€€&¨ù¡þ4BÍõï,  j|¨}g€vá凜Ÿþ©ÿ }÷½+Ž `ÉA`?ôÝ­«/€wp|[MPóÃòvè»kW^?IgÀûh‚΀€€&¨ù¡þ4Bõï<   jz8Π¦ÇfÏÀ«RÊ€€  ñá8 h€š΀󀀨éá 8h‚΀ó€Ààu)嵯‡  ÙS~ݰ¦‡ à<Ú5=„gB€à¨éñÈ9xSJùC@@Ðøpœ4?çÀy@Ôôpœ 4@MçÀ™@Ôðpœ 4@ çÀ¹ íæw]B~’ †‡ àLÜü4=œgBA„€à3¡ €‚@à¹Ð@ÐpÏ…ƒŸ €³x&xøvóóë†A5B€`Ø †=‚€`è †>B€`è ?‚€`ð äƒA (üAÀà@ †?‚@P0øÂ€á€ ~X/¬ò—þ°nXü/4ü`ý°è_fø@!`±¿Èð€z‚À"Àð€ºBÀ¬øáx:/¥\ºŒPW˜í>O×¥”×.ÔfùC ¨;œÍ0üßþ0élü]ºÝÄÿ_•Rn\*¨{0õÀð€6g5þæ5É*Áð€åLñ(àÅ€áí…€ýdž?´žýþÐn8óÑ@žg¥wÿÐö`ô`ø@û!`Ô#öÁ;°coÒwsýÁÀòžú(À=)%¸û€mmlÀÀÝ?$lÎ Èãlзnâ´{nrê÷µwlÀÀÝ?$llÀÀÝ?$ll éÀú¶ép<]Ú@žsÂ} Öÿ€m»³/€ `WŠçÿdè»  Ðw>‚çyèW+~É£€y{­>û|Þ˜xè+R€uú¬^;îsÞù°æ/H °lŸÕkŸ°ð-[÷ ó§RÊ_>e@Ÿ'TW”ŠÐgõÙ5ùÀŠEyïïúŧ$õØú,6u‰ëè³z­ @`QJ¨€>‹àp Ï I¡8}VŸ€>«÷  z­°é‹/ú,(@ÐEÿÓñôY€¼Ã󯧀 •€ ¬ Ï ª€   0«ÃñôÁ§è]€ ™ð™ð^€<{€ÚR©M ‡!(LÌ@Q€`Èè³f€àÀèi­¦ƒèµz­V ÐkõZ ¬ $€^»¤ãsCßí$€^k *H½Ö@BU-môZ šâô™ÌôÚoÒrês˜?èµOû¬€ñþúîG…PO ¸û•¾{Ÿš<|  èÓó`û>¾[a€Ÿ}ÇÒ{°]÷¶‚  Ðÿ~̢ǰ=_þhe$@ ӒǰýfE$@ Ý×þ@ûZÿÛ€ €-$ÜýÛ€ €-$ÜýÛ€ €-$ÜýÛ€ €-$Üý Blcø—2òÀ˜?¨—w ìî¿”‘>ò(Úþ6êÙÏôm Í»ÿ!Úþ/B´7üKñDšä{ý¶ÐÎÝÿd@€v†ÿ¤@€6†ÿä@€ú‡ÿ,@€º‡ÿl@€z‡ÿ¬@€:‡ÿì@€ú†ÿ"@€º†ÿb@€z†ÿ¢@€:†ÿâ@€uÿª@€õ†ÿª@ÀðïV›Ã»>!ƒ?0þ¡@ÀàB†h0øƒ€0€Á þà `ð‡aC?<úá@Àо ;ìò/kbvRIEND®B`‚nixnote2-2.0.2/images/material-light/underline.png000066400000000000000000000105101315604104400221170ustar00rootroot00000000000000‰PNG  IHDR™gÏxzTXtRaw profile type exifxÚÝX[’' ü×)rÁqxVå9~{mïØñzSùˆ§l†‘Z-„©ÿõç ?ðqF yÑRŸ|²hŽÏѲñëwߘKçnœØíC³¿ïCßó3Æåëõ{¼Ü“Ö-'nA•[ ›š-:e/r röç}Oi¿—ý9û[Ú“£y¼÷ g4•åßuÑMܘ`”åæ³)‡ˆ"ü[náì0OŒ'sPƒµmpt ØÀN8°Qk•~ŒÀ'cåÖy[€‹ØÆ4€sà€ Ðw”×\+öFjâÈ'Q–÷‚øQCYœx‘ *Q’äà‚BÐ0sTV§^EƒªFMš£‹>J QcŒ)æd“C “’RŠ)¥œ¡4CtÆÛ3r.¶¸â‹”P´Ä’J®Ÿê«ÔPµÆšjn¶¹ú·Ð”Zl©åΡÔ}—ºöØSϱ6ÜðCF:âH#_QãMÛ;Ôø¹×¨ñFm"æ×<ýB ê<Ó‰LÌ€˜õ Äu"€€¶3Ù{;‘›˜™dA ±@e‚Óx"}g+ƒ¯Ø}!÷7ÿ#Üì3ähB÷o GºÜwÜNPk3ÝÕ…ØÁÂéSã[7Ðocn±«™ìL?oéÓÿ·‚œ+£¨ú6AHtT•Ë@R½µæt1¸4¹»s©%`h]±Oæ9º6f‰ÞrKlPÜAc¯å|Ö­v‚ØC¨Ùê]jQO”_g¹£©ôTùݴצOÝ4•7\â ±¢Ã«áä¢ï9¼^¬Ñ£—ˆ{;‰^¿¿¡f]ê{CH9„Vº¬õ…œûfÉË´:*¶}ÛèìC)sÌšPÕ@Äfߣ_F&ä„ÉI›òϼDˆ²by£ïÑg}‡ˆ>Ãè»nº™v¯f¡€Xά{ÏÛÞ‘³f>É„–§À¦ìG÷îmxFvCª8LË…¥Ø¹"a/³0Þ-§F¹Q2ñF5çævöiE)¶)å±õÛLx@Rê½ë†äŸÂêÉ,¾?oiv°GÌðý¼¹t`°B®y=ašsâÚoüGG§öWF´´Bxpœã3‚gÝ{ÄpíZR¦ŠR~&ûò›<Ê«>JpÊ®ŽÊ¬ŽÔeB#¬¨œOº(Ÿç È\!XÀ$´ Ûô»ìN÷é½×3ŽBê *;ç[É.T½ªpÈ5bsL®$´þˆWk' ôÒ«…G0e—\~EÄ¥]9õʺâÝõ䊌ÐYPí°dµœÔ¥jqü²cV?Í"\ʺJ'û,#Øi¯‹"È (¶`|„ý ÕÇ"Ž%ì\ÕOåH&7š½Z½ô¨öÜ«>c|)~¢uþ}ø¶?š¾ðÍpzmùû†ÓkËß7œ^[þ¾áôÚò÷ §ß@~«—~ù­áôÈ·öÜ{Gá6ÓNzÙšJ´ôé‹ÿ 1÷7Ñ#?ã@ém azTXtRaw profile type iptcxÚ=‰Á À0 ÿž¢#Ø`5Î:u>ýåÑýUËR Nîý¤-‡0>}©—Ù²TpÔ ‚Jãè£I¹ê{yVNÁú®ª¼2ÀñþSá jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá1.0Î nIDAT8Ëc4w÷ßÈÀÀ Ì@&`jÖ&×&  ƒ?¹,(f```ØÉÀÀPŒÕ€“;7ÞÅ&aîîÿ‰ûéäÎWiâ…QF €%e\à,õ=f `4w÷WÆ‘™ˆöÂÆ-S«g×ô–IEND®B`‚nixnote2-2.0.2/images/material-light/undo.png000066400000000000000000000073511315604104400211100ustar00rootroot00000000000000‰PNG  IHDR&/œŠ[zTXtRaw profile type exifxÚ½—a²ò* †ÿgw $!–Ci™¹;ø–_ZÔ£ÇãUó•ÑÐ }Ÿ@GÚþüÛé\œ](šçTR ¸b‰E*:9×a9Äý{Þ„SçÊOa›?\ «Çmš~®ðÛe€Çé_®ýämΓçD§%ç„:Vt–™äœHåðó¼§2ÇÕøåqægY§Ïs{b¬†ùTH6-øØ±Š"u­»­¸Ï2z}ƒ¯¢Ï÷µ£s÷F¼“t·Ú…:#ôZ i¤¦Ÿí¾v»B_3âSW®Ðr^â›v½¯¹÷íxº”J4êT"{`u–ÐCß÷VÐ2±Øx.¡ÖÐ9òÊ•;o»mÜb”MV¤‰î¾¬.Ešи‹kÑ•4ƒM7…[ιð¾nÙ×kœ±òʈÆdŒßÝs¾ÓÎõ>Jœyˆ¹Z!/54¹ñ(á>5µ]ß½Ñe†ð¬‚ í2g<` Ë1Åb|©-Ý9+â,D ÇÖ`_çk’AG‰Õ8qpg†Ž|*2²€›ÉÊÔÁF5vÖÆç=VL7Ž€0MØ<„*`Åh¨5TM-’™%sËV¬&M1YJÉÓ8£ª«G7Oîž½xÍšc¶œ²çœK®EŠâ³’ŠSÉ¥”Z±hÅÔ£+"j]dÑ%.¶¤Å—¼”¥6”O‹ÍZjÞr+­®²êŠí¿¦ÕiÍkYëÆJi‹›mió-oe«µÖµÇn=uï¹—^ÏÔ&Õkj|Cî15žÔ±¸Çù…Üî§)x'6˜˜DqPÐ2˜…Ì1Ê 7˜…"Ø& Æ6à¬<ˆ`ÜX¬ó™Ý…ÜCndñ%nò9è>AŽºIî;·;ÔÖñÞk;±cMƒvlØr•\Ç;é°§ýè/IK;;µN¼ΑgK·Žw-=“Ë3–<~˜kKïçpmé¹À‡¹í©Ðïs9,=x7§/²Ðÿçòœäÿ+9Ñ}¯çDŸÐgXº7ú™œn— ÏlÙOô’À÷uûÔyÔéØ÷r¢÷s¸N^ýc]ÑïsùÄ1òv=(úÌÞ½Ž~Ìé÷¯£Ž×8þôÑø‚_ÑÂ`zTXtRaw profile type iptcxÚ=‰Í €PƒïLáÐb®#\¼ypÿHHôkÒôG®ûIÙ‡0~x©·~¬,\ƒ Ò¸ÆÁ˜'û9»;÷ÙMP_U•1ŽÙxY jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá2 Pç™-IDAT(ÏÒ±K›Qð_Ò4àÖ±PìPÜDJqxƒÐ.6o1<ââfèâ*´¸8ù7øˆè\êGCéWèÐ%ð-q(:Ä­âäj)Úå iH$õ,ï½sî=÷¾Ë%#Ä4bêøO4Fî›è†˜¾äwDÀc\á Ÿ«²ŒÔrõ&~`°Œ§ Þ ‡wUYü„zÖs2tpŽ·x‰gYkã-ôCL­ÑÊ,Üâ¨*‹î¤?‡˜ÖpŒk¬ÔBLK8Ń‘¸?xU•EŠIïñµ79ùWÔ0ŸÍi“¯ÊâcˆiC!¦ÅÓ÷Dmšbz„]¬âûUY|«ßa~ˆ¼È;qbz=“Aˆé9Òý[³v07…oÎj0À÷ |o&ƒª,~cßòú^b/oâ?ø é>HA¶Rˆ IEND®B`‚nixnote2-2.0.2/images/material-light/up_arrow_small.png000066400000000000000000000001751315604104400231660ustar00rootroot00000000000000‰PNG  IHDRÛn€'gAMA† 1è–_tRNSÿ[‘"µ&IDAT×cø @laaX[€–Ö@1 °²`Ьî Eù…‰IEND®B`‚nixnote2-2.0.2/images/material-light/usage.png000066400000000000000000000206131315604104400212430ustar00rootroot00000000000000‰PNG  IHDR((Œþ¸mÅzTXtRaw profile type exifxÚ­šir丒„ÿãsìËq°šÍ æøó9H©TêªWÝ=#™2SIî ÌþŸÿ>æ¿øJ®ZS©¹ålùŠ-6ßùPíóõ¼;ïëýòs?7Ÿð ¼‡ç×¼ßó;ÇÓ J|Ÿ›2?Gznôþáã†A#{>Œw’»÷wÓÞëzü²œ÷g¬÷XzÞ¾ÿ ÁX‰ûoüŸôŒ˜A(¡}Ö«ÓIë!„Ì« í×±3Ÿ¿ïóÓ·ØÙþ?‡ÂØüž¿Åè=îÒ¯cw#ôuFîÇÈ?ýÁgìׯ/±;gÕsö³º3‘Êæ]ÔÇRî'N$G1ÜË2ß…ŸÄçr¿ß•%N2¶ì$ŸÃNãšóŒ}\tËuwܾïÓM¦ýö…wï'×±Šo~Þ¤D}»ãKha™PÉÊ$oÃþs.îŽÛîx“ Xv9ÎôŽ›9®øË·ùÕÁóýy£sqçlýŒóòÂ4ÓPæôÊY$Ä7¦éÆ÷~›/¸±_È`ºa®,°ÛñÜb$÷[áæ9p^²Ñا4\Yï c'&ã°À ¹ìlñ¾8G+ùéÌ܇èp)ùåÌ!7 ŸäT¯±¹¦¸{®Oþ9 µˆD‰RÓB'Y1&ðSbC=…MJ)§’jj©çcN9ç’ÅQ½„K*¹”RK+½†kª¹–Zk«½ù °Ôr+¦ÕÖZï Ú¹uçêν?ˆ#<ʨ£>ÏŒ3Í<ˬ³Í¾ü ‹ò_y³êj«o·ÒŽ;í¼Ë®»í~ÀÚ 'žtò)§žvúgÖÞ¬þœ5÷-sÿ9kîÍš2ïyåGÖ8\ÊÇ-œè$)gdÌGGÆ‹2 ½rf«‹Ñ+sÊ™mž¢Hž¬¹¤ä,§Œ‘Á¸OÇ}æîGæþcÞLŠÿ(oþw™3JÝÿGæŒR÷fî¯yûEÖ–úÞ¼{ªP1µá@lœ°k÷µ«'ýö}Åc÷®Ä`{ÆÎkÄ:«[3(&ÏÌÊl ¹·LC±.,Oî{æN¸ª}½Æª×q–×ûqƒQN°}7sb;Äqû¾J‰³*öbèµÓl'Wò•}§¿.ŠeõѹkMŽ)2KcÀåÃÙwġי÷XuL{ºK‹kËt+»Óžf+.Ÿ3÷G+TƯs  ©Ó ÷ŠÖm›¸Soeæsol#n£Þ…ÕÑÐ%êºË­ö.»…bͳ֒”º‚cÅ\ê;˜¼³ƒ¦‚Þ}Þî^ì÷è¬>LËšÒ+l:L%"9öÖÖ›‰×<±&áý”Ù'—¥›Ø³S\aØÖGÛ6D†N¹ÓZc2ü¨Èz<¥ÑîÜ´m¬««uV73Á:+L\ŒM•eÝ:»ÌÜ•˜»´*¤Õ•<Ã4¿z¦>rZÃêÔž!8œ=,Õ¹€Sª;5éjøÔi³¡½Ñ>Xéê´Å2¢¬ ºÁ`ã^6÷j»°ä)âà]l“¾è@ÿa-Púp&œÀÙÝEK<ýá¤m)›@@ì˜Îcmד[”ciÄ'à p«ƒ&%7Y»êZݤëz¿à†ÑÈ^'“8À]Kgž†èê“®¦lCîLÁ“ é³DRïÀ¿j˜•Šƒb€¨Ù¤zæT‡Û©""ëN“±KÙ.P§Ûµ[¥Œí‰BN)kÏÜćködâõmGàÖZ߃Ræ¼€´Ò“ò¨ÎøZ/Ü ” ¼oôÊ9н¥á.È{ñ©ƒ RB…PIdôÖ5ªŸª%[øû fp·ßÝL÷ g¦4"ä{ž·sCv´‘8˜•E‚ûÖ;Ç=k}°°âŒ¿£¹š7ÀòÇ/)-ûÐV‡ó åh€~ñË›(½©Ðµàz^ÔFî'—Û),327bmM(sGÔólZaH¾­!Aš ùr £ÖŽ deÂèšI^½Mt¤fä ÈQó…RZ{P?£C-ÛÓM_l¿=‰öèÿ± ›B^LúÝ”Öå×2V"ÉõìHŽÁb¥kÔzf€ŠèQc­tÀÑ!³FÃêG”t¸rc^˜ðÓ `¡RÝ<ÇžÇÕU‰T=Ïé#î¥qÆâ7ä›'¤+—°À&¨þK¶è#ƒˆ@oo¶“zc”…Íš“cñðÂMˆ#Qì;‡bê b°3 š@lºCè·Ÿ¹ªÓÑE ëÝ ¿qÿR4[šrOÝnÖ> Ú¢½íî8õZš÷ ýŸª!»4Í~F\ð3ô'Q˜2Žh¡A»]©¸€»Ëd•y7ï‡Ý¸÷z^<+|øÄµ€}UrÈŒèרƒ„𙞥"›‰šŽzõµÉDˆò¶Ð ¹%iAM°EäÈ©½4´‚0=u€|V+èöò= ›¬)^P)±Ä$2íG ¡3åL^@ÃòàcÃì#Ãuð|C”pÇ>¢Î|‡jqÀ¬ÁaLœI!°…ýIAŸD×Yj6 $ÂÈeLz\¶uöj ´£ÄMŠTl-Ô}(žJ.›rK…eÑ<(÷£äÍ…Ö¢y@Ï„ˆ–ƒïG½ÍO¦xÅÃÑùþ&6ô˜àº$KáŽzB(ÄðÀ•’ŠØ°dÀ\9–ÓµÜb»y¯O„ãÐ"hnª·Èãü@•y€q*¨¶>!À…Ó ¤/•º*,ßs =ƒ[€hìXãÚÀô_:@@†ø½nX!€R÷©æùg-~¢ü­Å”¿¥ø ¼ª T¸èÞT{ÙF×ÇÕêÖ!ÁÈ9,2›O9²ho8´< ¬ ÏIøHÊŠ8¨™M// î’íz …!öòý·¥ñ½D~þ–nª#`<‡"J<޼O›„)p¢º÷yû›Zúæ÷±£ä t‘"Kàì~ÀE»VG¢hÑÓ€«@d_÷ŒÇdä&£"J&ÄeÓÍÅÄËÔ…´£ÏQƒ—‹Ò¢¥Ðd T»æêÑ‘[ú4MÍFÂùX a:fz²5w ¤…Ûñ–Ê]±n Hj¦Êµ‰±‹/«PLè#.˳ªX„I@„†D[Sóx¤ ê·Ó€àÝ,»l©”P±*ˆÓ…ðt&ˆ*Wd»î2ú(ÙàPþyF°ó\ÀOé’¤ž1Õ¿fï bü GtO®}gú8¨º¯;¡•Cö¢’ötCŸŠ¸°_‡˜€yÁžZÓÆ‰pY>±šëùªƒ×^¨Bs踪vwóp1 DÅ¡ñ^¯ú(û ·7\Þ‚âónþŒÙ÷}µ£N”-hër2ÈÉÚáNŒì*… BÕ¸S—@ŽÕž•B6µ§áp†È+®;\½Å§z¼ˆ‚òðÕ΀š1%ˆ˜ _&€—KKp„ ™wEò^X—†•¢ÕdÄ 0d~¶\ˆŠûÃã«ú‘ðÅ&¿¾*ÐwmóñUÕnºfFYb«|è½n$D´¦H8ØEd- }ÐHH‰Ü´“àXº±!«`*TíØÃ—ˆî‹>ŸèýñžÁ}ÚC¦xÎõ©û¬6#x—ŽõYmRS°ªrJ-#»ˆœ[Ùj²<¥+!ÜßÍæ?LÿÊ<5ºd#}hM¸­(=€Y!‡C¥ Lí™®ûHw«mBKÏœÉ4Ä$¤…n½c„Zðøˆ ­? œ-b¢šz–NÕâ«à.pí j¿FþW¾E5FùD:²"¼ÔçzÁóÐót’)o‘qÖG‘qV|ÎÚ]6ÒÇ@éÙ>Èá¤È¡«þq­ýí¬ý©EFDñð+Y{ØYn(®}ºÁ€F~Ç]èï"j^,ãÄíØ¿„L¼ô— }„ìì6Èo1û×ïæ€Æ®?¶‹þõqÐ×2oÇÃÉ!ÎB j·f‰‰¯[œwëÏEÍi;ê £¢¨E"¹ñi°€O£Õ6‘x±±Žå%ÃÙÅzÅñÐ[€&+î¡ 'cŽ„?¥ 6äo»¾œ±n¹áË)?+ßQ{6—Âíwt’„WËèw8•SúkÌG…àZ“‰–/ÁÒÈ` KWÄ%ÑL½ûy;97}Ùcæi|›V;D –z] ¯ÅJ!ÆÛÌ*.¦Ø—‘€‚Šœ£_Ní©hÛk×,ë(ïÖŽw5}½ß¼›?ð›wÜIy¶¦”™‹æÍÈHì°°Á)ú~A½77e³pi8Çz|/(Ú§éöwñµw,<îg ¯‡„Š…žµ×á«6yð õzZ’;d™nÐQV­Ã‡î€ñ-ÚÑB÷/Ò=fT)úH;«$Ë#f‰R¾Š-ØY¤T!§´ô8iÈ÷g¥”¸ù»[Fz×Ð~¹¥ž€ã$4äSVì- Šà+>àà9gF¹šuKåçÆì üŒ†œ?«wÖ-~¦7d{ùùà-Å϶©ƒ¥wËÃÆ\ù—R¨‘zàl+roýÊ>ý]÷d¾Ù'²b¥J®wbèŠGþ;\bþÙìIå]»nƒ 3í]TD,OÈÿRŒûp™ˆ‚^a飽hI(q,¼†¨•»*Ù‰5EPR(F€ Ó ˆŠ#^ÁhkÁ¯ íõß÷ÖJé 6iß•ŽŒ w%bG{Ü\Fs¦WU"§½Ý×èÁÑ—öWÉ ‹Œ½¼ÚGsjž4yFž ýåË^áúζ”º³~’.É&Àɉ&-mSËÜ:3Àd`ĬC5{õAÄD#}Všo3Bl†+6ÑÓMbÍ¿óÁ¿?‚Ðþ}Ö®pY2Ýêq¨(ï L=*eRU»ˆ]†y³ô ½œ…÷?x¥OEkW}–E`?6ÕFùØS³ÚSƒü×ÍíwGW[þã#Ôz@p±ï½BýŠ]!ê‡ÜÕCBãÖ3ŸwÆyc[¡#ËÔiT,–.8mZZˆÞoЍ'¤î`°BQS¦£zƒ•ÛXXËbGTR›Dô/å Óë×^ëG³v²~CØ«’çïJŒ§˜Kb™'o™æžá©µÌkºµ{ 1F‘.…†ŒKºám¨H¿MõÏ“ªžŠ ¥¬j -ìAIN35ìlÚêÅd¾UA‰â=º|vOm[Öó…³mÎH½…BzJ3Ù9,ªM—ðkÚrtÖT,=Ó0W ó%u:´‰ÅMV…õÓ¡ ‡kAéôýÓ]bð?ªT óÏÆüža^‚Ùz&‘ÌÔŒ-ÌÄŠ­B ÓTm‚Ý1KŽ:?RÂF¯F¡ÅÔ®]'7ÐèT8ž5æ»HÎÁSÆ*ž¸-ƒ™{5®afù¶óë.¿ —"hz¶¢ÒC>mÕ ¸ þ.D#YAΜ¤AÕ~È "ϱ0m_ÒaMm_ÖgCÔ#ÜôœÐj ür>í¨!ðo ‚ž/Ú•a ¬=1Àà"—x[Û²4Ï“ƒ‹ŠXe!˜Y‚Od•†ÏžôÓÆ>xéÚ¶c*zªf;ºCÿ²Ô•ÁŒ$‚fK+’½*‡iUµË`"QÂî¨ã‚²Œª°ÑåÙ#IÛÄ•)m–ÂHTæíUhÀoüGj)ÌòQ«sݧȈL®nÆ”2KAôo/¸PÄlqd^AœtõÔæ™€ îsœ/ˆÐs•~&L˜+Vz÷°3 ­P ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá$!ëÖ¬dIDATXÃÅ™]h\E€¿d“šØ6-XL‰WBãb/G¡˜5$Ô¿Ð-²P ´êƒµ5ø^kA¡à/Z)ÔŸ‹ÄЦäÖ¼QÛZÌ­FÂHh7e Ñ\µi¬µÅV}èÙx;Þ$»éfïyæÌÜ™oÏÌœ3s¶Œ"J"™Z ê80 ýÀ!Ïu.:fÙ\a´ÖõÀÝ€Vu¿üzféÎÝoÛÓ|r8tz®óͼj­v« ¶Ÿÿg_Û3Û0Y xÞs¢j­+­ÀÓ@ƒ¨'€#À1YÆÓûººoþºà@ž¿÷ð&ð¢ç:—æ (Kù.Ð*ªQ ø@)uÚØƒ‹; X 4Í@õ S¸À&Ïu~/Pk½ø¨.»W•R— 885Àƒ@°fšnC@›ç:£yj­“ÀÇÀ`ج”¼†RÀË@ØA:¬÷\g|V@­u3ð¹ÀížTJ+’+ª^žbFóW9µB±¸ X| <¦”ºX,_égÒù™t·Ï÷æés8Pkàv1y»RêOæAüLú;\”šš¬¸}ØÏ¤ÂhxhÎO(¥þ`Ås½À[†zð’ìÙÿµÖµÀ R}])5Diä9Y­ Ü#–½Ê‚›Åü ´$"Nz0i4m™:Ų÷¾—¸ºU)ÕI‰%‘Luª ÀÎYð» tì3êU@2x¯”½J©óºÀ˜¡kÊÞ&呈àð\ç𥡞Zâ[¤$ZùÖ¨¯ÈÖIy*b@ÓµÕæ¯“ïhÄ€ÿ›?è³J©lÄ€Ùé'Z­u]Ä€–©ˆ%’©m7Ô,l_ÒÝã.Ž-½ñ¼ŸIÿ ]Ü~XPW›Þï:˜³\‡ë£Y°Ñ¨”' ek"™ªŽ ÔUÞ=99Y.js´F`½Ö=Ø_ô†Ü$ŽÐœsè-÷\gè3;K£TË»:°Ïs᜛1¯W×»ÉTe à*]2gP:ƒ~p?`¦!î¶—À€Ûe®  Ó•G“ŸIÿmÅíQÉ»£K³·Oø™ô‰y²Þà ãe—:<×I_õªó3éSVÜ^.©‹œTmVÜ.6¤À½,2šÞñ\gOè³ÓŠÛ}@2p»ÉÝlSVÜþÇŠÛžŸIg¯l·wˆå…,í#~&=9mf!‘LÕ‹ë¹5dü£À3…ä÷Œ±›ä@´„4k=×™5õ‘H¦V_„oy·|ìŽy®“Í#'Ó,a´]BiØ5«Ís¡¼“GbÉ.`&ø³Xû¸„L_ô7I‚¨XklB–õ!Óry¥ßÉÔ2I¹=–Ç)ÂÝïC`›™ÑÊ0ºN²ÅŠ.ÀNÏuzfëXVÀ¯äJ"r‹8Öª¡&€C!>ó\g2ŸÊæxë%wr° ¨–ÝÌ¿!z¦Ûg3É¿‚-`HÝxáyIEND®B`‚nixnote2-2.0.2/images/material-light/webcam.png000066400000000000000000000205171315604104400214000ustar00rootroot00000000000000‰PNG  IHDRn€ê\ ãzTXtRaw profile type exifxÚ­™ir#;„ÿós’àz‚KÄÜ`Ž?(¹ÛnËîî7c…\r©Š ÈL”ÝþÏ¿û?É·äR®­ôRÞçóÏjzž×ç]ÏqÚs çoŠÍù ÏE>’ø8ž»þ¼o¤wÛy¾u=ÏåÇá׿S%+3žD·tÞù1‹°©2îqðw‹ö)ñ9ßß"áuìÜš¯ƒ÷ãÓ/±óãy^>†Âùò¼ ü£çù_ÇîFèýŠÂÏ™?|±¶ßþýϻسÚ9û±»‘ ‘*·­ÜO\FIîm…Wåù\ï«ójlq‚Øò<ÕOzˆAü )¬0 ûg˜,1Å+Çg”{®I=Ny@À+œX¥ËrÒÀf‚›p:þXK¸óö;ß ™WàÊ,pǧ—{uòŸ¼~ tŽåA¾=âDZ°®h9Í2 9ûÍUÎ3¦ùÆ÷¾Ü»¼ñï€Ì7Ì ¯!4‡Ÿ¹%gáºì“óÒu= DÌYLð%H%øc 86ð¬åÔÓN?ãjáY¶P ¿ ÷=jቚ!–îuõ'jœ®õmˆ`t’ 3‹)€x5Hèh˜ùRІœaæ{¤(rµ œ 1L;Ä|Âì~"÷-n.§¿Â-~…œ3èþÈ9ƒî‰ÜgÜ^ ¶L÷n>«Ðbêå@l\°Ûˆm˜&}:j(j¡©ªgOèê¬ÞÖ:ŒÔæYu÷¼BÇ5â<â:‡ 0¿´¥3䥇@—NÈ´ÇTE7œËC=¢ ïFà룞&l¾L3ÏÆî„Œ JœW=pkbêΖ!”Y™vº¢©°‘1fÊ{‡ÄõÙôóqÌUÙËY‹ÛZ;uϹ×é­ÍÂ:Nsë8~» ,*›ow*L§-.ÖOŽ©$ê¿ [\xw‰6d½aè ú»aèÃÍ2Úv…`´·#-t ±L ùI0„w- íΞµ …*dk*MG|¤Ð˜óëÒúaè ç:vëGíJdc(_ù>( FÜ`0~¸“bY17Œù6“ùÎØa7%ˆ$Pw[©Ë‘Õ²ÒsÂô)ƒr˜'[…â‰7šÐ:쿎ÂÙÝ®ªÁêI™[PÄ@9 øµ–Þµ1g"ÅOßLJ€ÁJ^ rÀÎ8XKI)¤ƒªMZ(d«Ú2›ZÕ6±ªU,4l‚.Ô(Ø¥á=¥p7\H-ãæ§>ñ¶r¡Z5ç¦fâ6!t©»Nh€ÇÖ‰š‡d»ž©L܈•΀§nq!–ÿôè>}¬iµ ­Çcg°šÞ™˜£#¥#Ùê ²© ]‰œw#*Ø4 ì…‚Ú³KÇ•Ï\}b§çуê”$íûÑ^âDÇöÒÚIKâèºiB²mbΠ¦*4q@l¨Âßïª`Ë‘î Uˆ4FKƒ®7co²ø·ÈUíFN d¾W€e@¾6É'dGFa¨Ðe=L (Ll:Øk'Rõ?eoÖLWåœci ¿‘!ÿWøêˆ>6H©Î¥(L[hx$ Pj5xGåå«#Û—’Ôšâ+f¸—.Œ×¦¹‰Å8Ë4ˆÂLñR /Š¡$}.ä—l=9æLˇKF£!¯ln:F,ØÆü7`·”kééc¨4;yiVò”øÝžÝõ®‘Ä©ˆ'®fì]MÞU#SE€Ôrz¼k^ˆrÝŽJؘV¹É…˜h!&R¬~ctŸ*_âÏüüxŒ_{&÷Î4YiLz,%÷®*)_®ÂRZ‚~a‘œe(¤ 'Xïmæ—$F»1ÿå¸3™Ÿ’ë~0„­éšÌýçøÎý»UŽCh•±Á‘FÍÓº Û;CaHb{½Î†Ý±ržôgÈ!K3=Z9À%ww Ts–°qÛ4|£)æ)õÐÖÓë›)ž&›×LÇ Ó¦q›æ’è~j&Fï½ñcXBrjÍ ‚°])¦xS°ú^ñ×a˜™*&_ô|a :‰BýÏLÓ|*™8/Ë}äÈÜþ#ùçã/í‘ü -É{o,+kÑ«ý }å™´Cžayä96²åÄâüÖìÿöø'ÕOâCaö‹¢oL­ö¸ KÓ°ð{Δœ"`…|g»EæíÎÚÐB Àt‰ÝÑÙèZê”^3¹°Éb}EÞå~TêÊÍh˜8 TL€ìSâà¥#:“ZëRéOÎfnR‡²É†§YîrÝ«^ä/îs3£ëd{`;‚c@ˆí²sF‘D$ñi´ =+]ëPîÃE‡ûÆØÉu[€‹áÀØÅ‚m³ÖZ%>:ú‹î¯4ÒQ¨O¤-®×?Sv„Ý´Ì€Á>×j K>]5¾í©ñmÈdóùtG&Çô?ˆÃjݾ6w™ÍžœK0$ÀaØÓÛ‹™=òãÿ®"WôŒ3á‚b¹´»s ß ·Ëº³·$I2¥s]¸̉XÙxЉY+H (%…ÊóG´hfBHO9mŸjWLæi×û ¥ök1ØbO,7ÞylG2n›’wˆÓBÑ” Ì4!6Ã*ôMÍh~Ô¢HC·ünÖñA À›ê§Ù@'YèÆôŸàHŒ¤¨ XÊ|çc¡3ýMÑÞ‡*[aåûPå± {¨’Ì)Ql"£EÙžoA°A`_gÝnŸ«ÐŸ‘¸Vl5Òødl$ÎuŸp› Ò‘zb¿FErÞ9ʦùèû&+ØÝ “ñXT ¿o’¾ ¼{yì¶õ’‰Îf98 ´iËh¼Nr_¾`åA=jÞ·G ©GãìÊöìèdëi<¸dŒfxÃ'Aˆ|‰% Ú$c·G^ÆV°é˜ˆ}Ÿ™ñ&‘õ•nv'kº{ˆÛÏ=†Ö!¶·Êš-U¬!ƒÁœ=p¤Žãh£2Z¨nJ³3º^a@aµXY {QjýVKgréöy?îQ³É!”D½S¯fH šHVx/æÞX5L bZþfZ챦ÛÑèšeÓÚ1ð)†¨ÞjþP9MBK“&ŸohôàÖúÇM[)ã Æ¹J­}&®JØU܉®ŸOQþ†Ý÷ÐÂn«u;BnX OÄ‘Àƒ>Þèøëõ–¡FzîöòËûª†¯yËÙÔ¿(9÷ÊýZ3D¶ ¥5CöèC¬*ž^Äš¡û€!ɇTõaØÑÄÏž±hH¸Ok± '\Y){~z¹zì›òÉ`]…K ï·Ð3‘`ŽÖùp¿¹Fxw¿5ÏÅšç·û‰åNVenZ³üò²v^¯j2,^ é{7·ûóÅÿ˜üýÜ¿xÈöÅ–^Oþò*ƒRÆNÙ³ õxú ÑÔ´4fÏçß gÏÓoµü(*ýR¶Ä`Mú¿ÑÍMÞ:û|!õYB¬]¾í†ý ­GÛ5[sõ‹=ÿí–Ý?û3ÖîŸýk÷`ÿÐV­äQ©¦:¼—·<ÙÌ5‚D!QÕÿ[…s/2J‚`zTXtRaw profile type iptcxÚ=‰Á €PCïLáÐb>®#\¼ypÿHH´M›¾T®ûIÙFa8üðRoÿ²²Tpõ ‚JãšcžìçlvîÒõ¡ª¼2 ãYß»9 jiTXtXML:com.adobe.xmp ÿ€@bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEá6.Qœà IDATxÚí]lWÇ»nXÔŠ KåÃ`Ñ.°[A‹paˆÀmUZÆ•†XA€°¥ŠP^ˆM"õ³U(ˆ˜„ê9BªN‡„V#¤6íŠÒ©²|y»+Ø U+b"ÄV-Ÿs&;ëõ~Ï™Ýû—,ËqvæÎýùœ{îsîM‘0Y¶s-p=Æå;ò=ÓÂ%J@¨›òsÙ÷Ü¿%©R 5 LÉ×ÀM®—ú+°!‹@Ñ÷Ü’×>¬)À>|D,kªà©ÌºZÑÿÄ•žÖãp£©€Ý—˜4`TV|Ï]Jp.óÀ›.Õuà{¾ç>7à,ÛÉŸ#s®aÕ%à!`Õ÷ÜÍÄ‚³l',‹[%%ßs½Ä³lgøN"Å~ºÏeÿêêÁ‰k\’ñ,ƒÑ:p¿ï¹éåEÇú€ü8싱³JÀiqYo±-yàÖ‰l®T«”/¨'é‡;cþ _æ}Ï=U«”ÏNds'Åmíñé-ÀÙÜŸj•ò‹j\¥e;Ó²š÷xVf)–í¬¬ÐÄ=î-úž»Úí…ÒC  Ð$ð´/·lçH¬à”A¸ØäwU%mì ¼ôAƒà]'¿K¼±¡M?S8GËNdsÅZ¥\ií.Ç]îÔ>àc°ü±ïÁ‰tÂÁ;3ª+¨„áø‚2‹‹ê%à³¾ç>Ý7p2¹^cô–°1ï¼Û÷Ü–ÇávǸ%­o“ô–í\Ýsp²ö¸`ú¸oº øzOƒ×~¤lpFM5 ®:gÙÎ>àûÀí¦_i¾"›{¼V)_êÖUÎ$ò FïmeHJíam×O1üo®µ©N°æZèÔâ ´X”–dúÕ8Ëv>|Áôal²Oubq‹ >õÛh»î³lç-ƒ“d3ÑŽ_îmÇâaòE´èˆÔU4gÙNø„é/5Ê3­XÜœÛÔi®)81I3ÙÖ§i‰;vµ¸3oS;¯ût3pÆÚôêžh’ޏÉIàVÓ?jµÏU;fêI Jší"AêB¸£Bèf¦äá“úœ6AJû6pÓ |p 8ã{n±Éÿ+ìð,ت5OZ’ñ=·žŠD“çINeM !èx§uh²€{˜`i/IE3¾çz¡ÅM%¨ñeàh·µg’ñü]Ëvž¾ Ü矼08y_BÖô,Ü÷Üß ŠE’îrTysB Í÷ºÎ,b}‹ —·l'‚Ó>é®÷µ“wؼ³ÚÁù´,*kW¾â{îF¿o$𾆞‘]çtiàè~…óè ÷‘-ŸV”ƒË¥•G“›Àƒ1Üw5:÷ÓjqšWÖãØôL\æ#ŠûåZígé/ØZ6Ó¦ëÓŠ¡Ug⺹D°¿ÖÚ9š-®Øïm•ZÐóJûæmšÇ8 nê¢Ò¾y³fWY2mhî*5O¼ãÖ+œÑÈ€7mhîU­«¦ »#iÅpÞ´a÷ ) üGiãn¶lç]qÝ\RÔæ¤¤ ¶bרk€;b¼ÿ4z7µyU³«˜kV•ÙgÍhžã¦¿+nàG‰¡NO^.Ï)î—h·8€£êÃú¬t¿î*¥ÙÊüÕª[€ûhm³Ê­  š–ø²ò†~Ù²Ï ÚÁ–ûšS96•“ åà2À7,Û¹³Ð&ãèO .ùž[ ÁѯIàÑ^ìgÜÚ4ðK’QK°[E¿^^§¼Ñ×l‰;Iu;&ÙóÛ9¾d¨ž º? Ï,Ûy8Õî(–í¤Ê­Ž”.%EÿD²ÏR‘‡Y–IšŠ5cϳÇY¦²[Ò p›¸Å×'ìY=ßsg¢AbNÁ…'”,Û)qeÚCXÜØê‘ÓZu9y* ® .3ÉÅûy†wó:‘tÅË/RÅÅxiU!Zu»ó ø::r=Œ®Ô¹èÛÀÉÆ–ÓG*WKNï Näš~R§“¾ç–÷÷úߌ’Âi NV#VM©Ñz£½™wKÏ; ¼húL…µ54¢†àŒÕé¶¶fð’ñÖ`˜#É]Kšw'V·bú/6­5Ûæj¯ôu3=ˆE{n М,ƒ^6}9P­øž{¡cp¯D<;Œl@"Q=]ýxÂôißõgàV^ ·N.ô%ÌŠJ¿çl_ݹ´Õ­Å…»,bÞôKËíì ÔVa£l7x ø¯éçžê‡íN½:©H]ŬªôR`©Ý„§¶p¯UÊÿžÈæž"8Y0gú½khó¾çÖÚýàX'w«UÊÿšÈæ~C²¶Ö¦*p¯ï¹/tòá±NïZ«”/MdsOxC›÷=×ïôcÝÜ=ïFàã%m‡šÚwpx±u ƒQó1í ï¹¿ëöBc½hM­R~M,ï ÀMçYm×àp¯ö•NõºuRM³Œ9ƒ.Tø»í àÞ4pxψC»(ÀNôúÂcýhm­R¾0‘Íe+g]çyàó¾ç>Ö‹§úÝzËvß¡)C×çþ¨'ðòÀQ‚"Âa>íø ð­nC}5à"o#(åúøÎÍ$ÈÊÈÛ“Ô ŸPÊwg#$ó̺¨J1žôþÑ©¸ž8pN&É… Ò NƵáwJC/ÈôaN@jÿÕ§ŸÒ%ª8IPLo£ã,ÓðìÕgê¯Õ$§”þucÙÎ p?Áè J„_žw¨ V"À5?H°Öy¿xw——®$È¿þÐÉ‹M®u˜W ¸Lįîj­–€Ÿ/E¬ªTœ&2Zàš=<¼ãŸW}Ïýâ0=§9wÀ€32àŒ 8ÎÈ€32à 8#ÎÈ€32à 8# Úu‘Ù²5’¹Mî8W¦n¢ûšfš—/¶éª&È3c\¥㌠8£Žôa·) ç2ŒIEND®B`‚nixnote2-2.0.2/images/material-light/windowIcon.png000066400000000000000000000070461315604104400222640ustar00rootroot00000000000000‰PNG  IHDR‹‹QjÿbKGDÿÿÿ ½§“ pHYsttÞfxtIMEá)ª ì ³IDATxÚí{pTõÇ¿{÷y³›„ÍnÞD^ò¥´ŒˆJµŠ€L±S…Ö EfÐ Óé8"5ÐÁ ʦQ;tÔªq œD”ò~#–ìn²ïûè’HBnöu»{¾ù+Ù{³¿{Îçžs~û»¤‰ëK×j-†ÙœYïàÌz^cÒqœI èµÐh5§éþdI†,Ê@X„!Iò†ý’7Ü ¶…>jXZ³"l¨II06Árƒ ^2Ø4Ò~Rß7“é&…/]“GšJŸßu&ía)®,s‡ÙrXaU²(!xÜå®_PeKKXå¥+Mwæ®ÖYMDƒÒÔä pèꪆe5kÒ–âwf¹ÃmÖxÁ§l”‘e¹<õO~’“ò° ¨ž#éóÍDI´µÌ¯|~Æ6.%a)|sú'ü¸ü2Ψ#OÇHRP€ÿÛ+U—»cVÊÀR\Yæ4ްçRÚ‰SZ:Útµ~AU^ÒÃÒÿƒG‚†} äÖø*t®9ôý£“–ŸÍõfê'ªŽiôJçÚ¦M:XÖÌ•i$V…îµËs¥ÿˆ‹_ãr×Ú5Ÿ@QI:¢Í‰IYíž/k³Œä5•%ºý8{l#LL#Ë ] + À ÏçÊLÂ2°f®¬Í&PX¥ãŽ!01eÀgsDªQØ%ÖÀD Kÿ R÷˜]Pb LTN.®,sÒ€û Ä ˜ˆa)|sú'Æö\rUr€r£ß ?.¿Œæz’ 0•ä”%–Õs$š=N>P¢MG½†¥øYnZ’¼ DL¯`q”—®4·YÉ]É ÊþŒ,¦;sWS’ ?ʾ:.°W–¹hquê€I:RKÁ«S‡ÙrÈe©ÊþUrœ¢.i¤ýd²=דÁ1®ÉÉ£‘ŸaƒÝÔy¼¹¼YsL¾ãZÈ gÀƒ«þf4ù=¸âwcoã!Ôf^„OJ P ãî‚ÓP°¡Ç 7N×<±ï¼¤äD÷ŸŒÒ¢ ˜ì£VÁå°$à? ñùÅýøôû£­ÄÀ,(í œèùQÙaI†o‚ t÷â7#‹ž­¶ú„6ý›Ž|a¸…IPÚÕÓú—Û~ØwÓŒ}÷8&° ‰^£ÅlÿX,û$ì¦>Lí¶¢üà{xßX‡,0 Ï6¸ôLõøˆ`ôå<™Õm/,'CxkêKŸ;<©j©ƒM§ðô®5h¢c %Ñ¥ÛªµoŃ{XeðE ªf¾‘t ÀûPT=üJ.e#ð_'S ´û½×°['²hì©ÍCðÁŒ×Ph¶'mW8?#ïÏx³Ü×  €qH÷~ïòdž*LÃlãY3ò´–¡¨˜ò"ô\òObê8-fö¿çZ/ãð‰#`ií²éGaÛgg«EãÀì§ÙK=™øËäåH5½6i)ÆÚK¾x™6ñ#l‹§!ÃÂÔ\æ©06O] ^—z ÂZÞžú2 2lL£–âÊ2KÛ‡4:lšòRR×(=)ÏÁæ©+aÔ˜¦«9£N°èûe15ôHà.ŒÏ†T×¶!XxÇL`6ÂÜ‹£¼t%K;WgünÌ\¤‹–Œ~¢cÞŠ`n]ïr,úBó ,ï—ºû`c|d6–Ê6Xðì¨Ç:~W˜[×»ÜÔÕ;,ÌL¬˜O±è‘Gcò¿¾¸T‹ö¢öê18ý´Û #ºÇh4Ð Ë`F.oÅøÜa˜^üc”O€&ÊÇÇ=|6¶¯B£ÏÕŒ¾(“ ŸtŒ³8ÖM[h,±ýœ™ZÅ23úE7.Xë<Šgvý ›Ž|€Cî3pZC1kcP ÁlÅ÷Y||þ+l¿°ƒ³‹PlÉjüÅé÷ î걎¿I­!ÕÆaLcóηm?wð¦4¤ËËXÇRH¾¿èž¨Î¯<ùæìx‡\§ÖæcžóxrçËØ|ì£(¯½óÜ­Z)‰“·¥SÍ¢Ë73³;CcÄä‚1Ÿ¿åx^úz#IHxÛEYÂ+ûßÂ_m‹øÜ“7Ù 3Àt‚Ek513¸2Þ]ƒVѹ{aõþ·¢®I¢ÕÚïþŽê {#« 4~ZxW—Ÿ© ü0ÄÒ²ÉI£#:O†Œ?쯀 ‹ª_ƒ$Ëøãþ #¬‘&9º¬‰ƶìî°èrL³T¯dD¶Eýö _ã¸ç<3×qÙÛ„m§k"³û±ÑD£Í6þªmŸÍ,‘®zÛ^¿¬)Ò6åò=—‰Fkãþ–,S‡J Õ•êœÇ˜ƒ¥6Â6Ùye7L"€áGÙùX4<[ëCr#Œ,Wýæ`ñ ´…ýÙ@é_¢" çX_º–µGR3#x®G’eø„ XTK¨­×çè82z±$#ÞÀ8Ö—®å´Ãl¤€äë?¬¶.Š'0ºlãsgÖ;@JÅ }Q&8ά§m& e5‹Æ¤£& e°p&-Y–€Q ô £4 ii''FidáF),$†`!Å‚…€é,’LÖ#`”Á" YŽ€QKP$«0 a d1F,’`!)†“¼!ªpIŠ€á¤¶0-$EÀp’7 ‘”ÃIÞ›ÌCR 'ù„dROÀ„/^'ùÂÿ"³zFh ¾Î¹Ö×m”¼a² é¶À4,­YÁ@¨¾•ºÏ¤Å€àôQˆÔ­Ú·)ã@tùÏ‘IHŠ"‹Øü™‚ÔüG]›:`q•×® 7zÉ*¤.Õ°dçâX t®™ºD¤žÓ m'ɤîŠÛ›`]þß“iHꕃΧ:ÁâÚøíÎÀ‘«4ÞBº¹^YþÅÖN°üP·´\"óºJA`œ¾ÈD¤Žt¸iU·°¸6ÔUú:i¹?釴¬fM·°@èŒç™‰ÔÕ›H:Áâ\³g”ØLSEé®®^Þåã«’7L©ˆ¢ Á<×ò6™, ÛësAŠ`iX²s±àRç æíoP'©XØ^Ÿ RËõBW•ðM£óÈ[*J Ýúý¶Û> úrž¬íc¢“Fª_øi·LÜv–à)Ï7j4Xtû™y‰dZE•xàvŸ÷¸¡ÜÀš¹²ÎÆ'”Åê ±Ó-ªôY xÒýžZ Ü®Gбí½áý¬h«ÊU‰ú¾™\¢A¡“é‹2»„ëud€À‘¦Y”T…"L|å«m¢ä8Å›àW–¹L#ssÔ…"ŒúQ¥W°ÀÀ/æÉ:«I5P˜Äµ½NCéèÐÕU²,« ¥¤ØIh®êÍñ½Þ‹½øYnÓ»U-P(Â$>ýD ¨ž#éóͽ?WDOl眘ĀÒë4Ô®ó3¶qRPPJI‘)P"†üß^©R\¿Ä &‚À®ŠôܨÞS\Yæ4ÌÍUJIñO?QG¨_P•w­úl  P„‰/(QG–v9ÊK}–Ÿój‚B&¾ DYÚÕ°¬&÷ï²À(abWÐÆ%²´«hóC"?®€SŠ0·” ½¡M(,P¼u¦ÌÒÎÀÄ”˜¥¡[®¿ÆÌöéš’b J\`€ú§>å‚§<“: Ä% ÝÚKâGÙyVŒ˜ê))V½ž„F–›zIß44Q„I~Pâ 4¾°;·m×…ï˜ä´‰¸ïWõZ;Ÿm,əȂqµYFH­¡”Eô…«.ÌùèŽD|—&ÑW¸¾4`i7R “Ñ$¡ièV]^ZcjÛ]”RRr’°4Ô)-í®ßÈeÏh ÚÙ:«IÕ·Ö'[Jšƒ«êç}(|ñZá‹× ´_oXZ³"lø?½gfbô©€IEND®B`‚nixnote2-2.0.2/images/navigation.png000066400000000000000000000006551315604104400173770ustar00rootroot00000000000000‰PNG  IHDRÉ=!«PLTEÿÿÿ.X.X.X.X/Y®¶Å.X.X/Yvƒœÿÿÿ.X/YØÜã.X.Xš®ÿÿÿ.X.Xïðó.X.X¨°Àÿÿÿ.X.X/Yÿÿÿ.X/Y¾ÅÑÿÿÿÿÿÿÿÿÿ$9aÒÖÞ}Š¡ÿÿÿãæë™£¶ÿÿÿDVxòôö¼ÂÏÿÿÿÿÿÿ.X"8`0DjEXyÿÿÿ%:bap3\'=d•|èî0tRNS*o–úŠ {ôý0Zâ¡9Éù$®}î iîZQÜØQÛ<þ¹ü$•õüoÙ?–´àIDAT(Ïc`t€‘ »83 +6qvN.n,<¼†|˜âü@ („..,70EgKHH¢ˆKIË@Ä ŒeQ$ää `@Õ(E%0500SÆêIsU2jê8d,4p¥Š¦m\Á¯«‡KFŸXjýn¤‹dIEND®B`‚nixnote2-2.0.2/images/newNote.png000066400000000000000000000032011315604104400166450ustar00rootroot00000000000000‰PNG  IHDR--*gAMA† 1è–_8IDATHÇÕ—[lgÇßìÎ^¼ÙØ»ñì6ÇM\;µÛ±à áRÔ„¤©¨¸U@QQ#•ŠàÔZ„ ©ˆR£RUE½¨¹Zª@“ ê´‰Jì{;ÎzíxíY¯÷¾;;ã|]{wÛ<äó0#Ížùíÿ;ç|ß9#,n—I·ŒàÈ­¾%°V®nöãã#&±Î”¢?ñ %$ÜìÄO˜0¨(‚.õÂâÏJ= ,Ì hµ,­o»~Ü<œ˜ÍiÏðq&"×ÓÉ&±ÙöO«×€MjL9Â5B+K³–RŠVΟÞë&óÙÆI“`– ’eâÕßS_R=êEÛ’\åè™Ó¢ÕRÝ÷>{îà´˜¥@"6¼ìàN°Gü†QÇá??öÀÅ¿h‹à¹².kMµ ¸×qæÂVÁfi¡“êq/Ô$L˜pãUNP{ @ù-C«‚Å×ðÚù­žavœ<ÚY`šâCCUçÿÐöR¿­\弪)TA+öϽøVwÐNO…ƒÑäÀÅ~B\Âp=U>#Ë÷ƒ™Ÿ[Ò¢Zpñ)¾ËžuÎQ¢hÀDb'í¼ ø.¹Ê¡—‹Ïi*ÖÔ[õb>z©¥‰;–&˜"Jš£8x‚]ô^Ž!óoà+/œ\¨†6ì!Ax”Vêˆ3@˜IÒD‰¤ˆŽ›qžÃNŸáyàá“TCë ÈFFÚ&ùy›abL’"K 7^ifMÜÛ@-Oç,^À¢*2r6ãÀäu¦ˆcÇC€vÓAœH@œ_bg»ø3t±ûJo\‹ÇZ%tRžÊµÒÊAtðãÇyÝ —gâ|¥R®¢çœ}ɶ(^Ž#•Dˆ ÓIŸá`;-¼xèÐùKyÍkѺ|f¬´¸H&Å8ĉ1M™/òþ Ôr 7ç½ã°Ø@*£M3n7gÅ<o"MŠ4 èØØÄVZ€@nN“àÕSŠSÕ>NµiŽÉ¹dMJ\&Fu4²‡ìÀƒ'a®ò+®bð{ž.¾r‚Aú¡\PV;º¥„7r÷Dø2_C'H#$lk6û0PK’÷€Ü]J|Ú×L¿"ªYY5d£©½88´æ¡Iš,.ê0y øò,ðUÔÛæ,y;¨–ÂF[‹.ÚCæ  ‘%MŒf‰0Ë]磓ûÐØD7Ô­¤q±Ü¾Î—VZD¥m–Ú(k%ÝŒ»Â醛ãñ2®ót!sßšÞãÁ'æåd[ùI·´Ì;ûM¢ÚíŽò%ÏèRjßRg­¦]Ÿ´3aÅDC×÷&:q¢d$ŒÄeiÒ®Š^0'eC•f7 uŠdÉ'L˜Q&IP@ÂAC¡é&lÄ— U#8âŒç”åÑ&‹F)¦É2Å1’ä;2n£>㌊)OŸô:UާÅDFÑT`ˆÝd#Ì7™!E;2.½6ë‰zF̑¸6¼N!‘~¾X65f¾¸ëœÙñÿaŽ$:v–»L¸oŠéš!1˜ŸŸHL©k†]…O„VÓ-'k_kžÅeyŠÁÔ–4¼0á±]œ&§&¹[A/ÿ÷scg/\¾KÊí~¿ö"CΞ^Δ[!/~ËÜ»Ÿ¤ÿŸèÿ(5k:]éæ IEND®B`‚nixnote2-2.0.2/images/notebook-conflict.png000066400000000000000000000025661315604104400206620ustar00rootroot00000000000000‰PNG  IHDR szzô=IDATXí—MlTUÇo:_´|L™Q”¶Å&L5PƒV*P­•H$,\ ¢páÎĵ{cDcŒ‰n\HLƒ&‚1A­‰Ö–ª|¨¤ÒÎÓμy÷ã¸x´0Õ7ÀIfqîÉ=÷ÿ~÷ß»SG€Ø°aÛ7oÞH$ í©5ÿ¯Þ¡ Òéô–uÝ“N§·\O~ÃfÄc7”ONµÁC›¶«Y Í—òÃÇ8Z_GºhX>;Ys~)"…‰3»Þoù_jVCs[[Kî_ÎÒÕ¤ÛÓ|¹oéövîZ»†t{{°<½Œ¥«;Y²b9mmmL~¨ÿÝ‚Xé?åùEMôlÝÂÂÕòªÒ7­5šI€E=ëX ì~s'xjû ,ê]¹ÞÚ»žžÃ®7Þ„§wl£µ·ÛßR4‚LÀšŠ ¯\¡<Ï#ñÀ f;m¿‡ÑÑQ‡ÃxžGýò4ë^ñoP3;îÃu]b± ß„e€§4ê*Ñh”h4JcOwµ)D"˜÷ĵuO, ©z «ÿ/¨(W¹D^Ox•c¨‚PÖ Äâ‰ðNj1ù*k %6˜€P(”ÊEN,‰µ«HÜ 9±ä" ¥¬µ£“„C¡PªòK8Ž{&÷ÙÏGnƺS"aÈE"‘»ED[kG­µ£ÿE†¬²K IEND®B`‚nixnote2-2.0.2/images/notebookSmall.png000066400000000000000000000016701315604104400200470ustar00rootroot00000000000000‰PNG  IHDR szzôsRGB®ÎébKGD‰ÐÁ$_®Š pHYs  šœtIMEÞ)3Ø’ñ8IDATXí–=U†ŸláVÆJLÈFA"R6Rü("m‘D|Èk7K•-i ¤à# ˆ"$?€í²Í®‚‚Ò#6JEˆ¥IÃj%„CÖŸsgæÞs(fl²’—\{|¤)^K~ï3ç=gf^ãšÍæ÷kµÚ;ûûû?ͪÿÏ;ôh4›×n¼O£ÑØœGXª¼^HŸTÁ´ß»òüÏ7íé c=88ä|ó ïÇò…ó3ëqý]úç`ïÉ™·_Iµ¾ªz÷3Õ_ïª>ÛRýzû=·²¢·¶ïh÷ê­í;^ú«íïõÙ–ê/·3¿õUUïάÀÓ\¼ «¼ÅÚÚ—8Kõ¸ÄY/}™s\¼ OzP[™aTayê•Lï=~ĵë7Ø{üˆajfÖæ7xc9óõÉu¥²ÄÇ?S©,¡èÌ:¶™Ÿˆç~ø®êǛЧß@?Q¤¾ýè«po ü;³4µ # å‘P¬Ž’ÌO¦MP`Ëh¬‹!ôâÌošK餦ð¼Ôê¨*»»»3Üjµ2€$ó›6'D ˜(¤XϵÒ\_Ÿ@ò±¤•?Tˆ\Hw´˜éˆÈUÁ@L “eT•™n·ÛDvˆ‰«ÓÎ?@•ÈÀ0é§Q •›ÍRã¾ì€Èd¾^‡qeFI7(Á(íc\æë=„IµC”ö&)A"=’jÑSžÎÔ1ñÓ Àx¥fŠ oyœö‰êˆëù¤.!1Ç/²±í˜Ìׯv€Äu$N¦©Hê g¾^V, éB"@SÜ×çuì\ 0ås•ZHr_¿°ÿ…"@R°¹¯ßF9@:ùDjÏÁäHlîëÕºÙ ¨=žåÜä3@×óQìJ`eÒ (Z°’ùz=ŠÅ€“IPh·ÚsÜùKp’ùúÍ€§ÇÖ°ð8Í|½ˆÁ¥€%Xú$*¾Š.Í|_†a]¥O§\¯~ÎÂ*NQé†a]D:/”Â0¬çW-‚’‘ÞÑï¥Oj,¸Lpå¨\._VU+"éü ^òbMçÆIEND®B`‚nixnote2-2.0.2/images/notebook_old.png000066400000000000000000000015341315604104400177130ustar00rootroot00000000000000‰PNG  IHDR szzô#IDATXÃÅ—±n$EEϫ꙱a6Ø•L­0$+bÐ ƒˆù~‚€ñ |Á ‚h¯dFžé®z— º‡±g¼ÓS mG=#u½S÷Þ÷ªÛ$ñ"¯æöŸ~öùWïIZ„ÔÒ¾þ6Wï‚¥®ºqñ÷b‘Úôå÷_|ðõîþðÞ|þÖ|þ <»àèÁœw?~„·@¥bqb<ùîIþõçßNž«€DžLŽ_:Œ«é„åøèYÅö!<‚e =À \¢K Ü,—ર1Øòh³õ I«\¢uP[WÙ)€qèŒBòŒËh3(ß±Ê.Ê{)r­~H¢MB© ƒŒ.‘%®“Óä¼WñP&©ãŽãaÇÃ6 ÈŠ7b `¥FÇ”7áV'u¯NyôÆ êÖN”µÅv™bÇ!ºµ‰íƒÈ!F¦3@K./Ï!Û(p[ZÛ€º®¯ÿdvkl´mËéé)Èl:ãà`Æäà0›1›Nhš†bŒ„0 `ÖC,€™cäÛoÎ8ûé øèn€B¼ºú‹óóhbÃ$4¿O{ò&MlKá fåm×fE浊¢Æ8ÏGñâåWoÔÜhšæÇ‹‹g÷ž>ýe! O‰éý޾ƒú.¸ùq4º-ãd2YÅxqCýyþýž,Q‹åOfIEND®B`‚nixnote2-2.0.2/images/numberList.png000066400000000000000000000002401315604104400173520ustar00rootroot00000000000000‰PNG  IHDRíÝâRPLTEÔÐ̤¤Ð€;; …ZZRSTÏtRNS@æØf6IDAT×c`€F(ƒYÁ"p0¤˜`Š¡"Lj芙”aŠÍ¡Š„`Rêhj©I°A²}[IEND®B`‚nixnote2-2.0.2/images/outdent.png000066400000000000000000000005721315604104400167200ustar00rootroot00000000000000‰PNG  IHDRJ~õsgAMA† 1è–_1IDAT8ËÍ“=KÃP†Ÿ“Šƒ’ö/AtÐÙÑAqQpvÑ?ÑÅßáæ&¸) ‚âê$ uR±M¯‚BîqH“æã¶®=Ùnî{Þs.L\Iõ@ÏyÓŠ:*´h¢ŽÆ}bQ*?<šòè"ÐE IÐç!¨(¾ô Øx OøÄæJʽ’/CŒÐÂçMlÖÆ×ˆžëÓHm\,O]éœúIÀíˆØ§wÖŽ÷íw–\ °=«øóí§-^ø)njƒ¡¹<ßýF Œ†r^#Ø G÷äè~u3z ³(† ×N ‰v–>Ö÷f3À0ÖíÜfë)ñ@yƒ:i¬R\‹07ms*C·°K¢$éD˜‘C—8Ý%µK—Œ©*ÀÒ×wçÍ~a—JÔÿ<  ¬?ðhoÞÌAIEND®B`‚nixnote2-2.0.2/images/password.png000066400000000000000000000235441315604104400171040ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aËgAMA¯È7Šé'IDATxÚíy˜ÔÕ™ï?ç·ÔÖ{7»€ìÊ¢,*Šn ('cÌ̹Ifr“̽&“;woÔÜYž™ÄhŒ[bLbLtŒ£Æ8¸ È.Ð€ì ½ÐMoÕ]{Õo;÷SEU7 tC6ô÷y꡺»–¿ï÷}Ï{Þ÷=ç)%ƒ8w¡é ęŠÎq àÇ Îq àÇ Îq àÇ Îq àÇ Îq à‡ÑÛ !Îôµ~êñ› 3<ä­xr:çIÈ´:îoÿ¡1þ"œÓ}MÇ«õˆÞƒpt<;©b”.¹Û€/ —"ÏÔH4C:+ãö¶%š9Í"À)Ä‹TùlW~ÍÜ©yr¬›øŠ<&.Ë0t¦Cõ#Aâ54¿tÞ‰Y?N=ÌiÁñøíõ0ˆ®xvJå-®ä~Sp©›€dôB‹©ÿ=Eå LVz¬ùNˆä!ÝXTäû? y<œ~˜3à Ž†AÐG<{Á™ ï7à³ÒiAÕ‡i•bôÕ–2© "èØ¤³öÞ"RMá—ÎÛ ë¡Ç;ÒpšD08ô~9µj´wR|Y¸2䤥#].¼-Å„%iŒr xÝÞ‚èõß Ý£#‚‡Eð# …S,‚Aœ$ž›>ÔoKùUîÔ$cݤÀWä2qq† ?—¢è|OY|!jDÈ#‰}kÿ)Dt¯Ïy+a?ðDgú1”'pOÕõ à$ðôŒ!K4OÜgæ¹HF_j1ý/’ å(k· oŠx5Þ²Ä÷h¬û§± üÒþ¯¤ý½w¦Ÿ@y‚S"‚Aœž¾hØ,¤ü¿¦àsž%ð,:ÅbÆ_&{•&ùqòÄ;(Ax€õºžDpwxŽôKûí¤õƒÇ"™GVNÁp0(€>à§®Kî4ÿK¸„œ” u™zkŠ –¦0Êå‘ã¼@Ñ–FÙ°ž}”Ð8R»²"د£=oEÒyâ{éï‡èg  xzöÓõ¼¯èˆ»4ó ø’‰×¥˜q[‚âó½<Á‡oHöç4Êê5òäkÝÝ‘Áú»‚Äk4ô”$?’þ ‰~Á Žƒ§f ¿A î5ó=K€£/M3óó †]d}œOg’<ñÝÉÏý”Xº†±›î Ý­c¤|'e?þƒHæûô£p<9gÄtüŽ)Å_xÂÍÀ 63?—`ÂÂtÏã<Ùß%QôèäÝüÑÈÏ Ý…‚T`ã]A"Û4ô ôÞN9=Í<@? ƒè†GçŒb ¾m ¾Ž'‹Ý” d¨Ëô›L]šÄì>ÎçþÛŠøžÜ}OäºþÜgõt«ƒnÐØx§ŸÎm:FHzo§œGÍü€~Á  ðÔe£üž”oé°ÀM L¿Çä…Ifýy‚â±®"·û|Þ(òGºûžÈÏ …Þ£0t‚YOpg€èv=$½å)ûGŬ‡8I Ö à ï6 ÜŒ`äT‹Ëþ:ʈ‹-ED²à…9ã(òÝìêNzî_Qð3tõÈ D[ÁNƒàóCq_ö³S+™óý4›¾ ºSÓoJ‰ûøõ0§0m|Îx€Ç/9ßÔÄ»^³j¬Í²iÃ_)!Å‘ã| ˆ¡<ÂÑ,¾üÂ`/÷Yx.Ôí‚†Š®@ŸŠŠaØyèATò(©‚MßÙ-иËÓöŠÛs‚"€'/U,=Ö iº.YzO;#fZj¬E¢@xÔï»s}$ßqülþÀæPuÑd":u  '1‡9øÎsfв!0qÊQ‚óCªFðñÝ~b»5DHºo¦œNØ'T@WÊ3„˜f[B¹ýÙVÞåçÆùÊåKÔ  {@w,ò5º$‡¤6”͚Կѹ/„±GÆ2Ûf…ŸâÙ’”i³ÿ}— Wƒ¿H¨áàÒd¨þ®ðǺ~SÐø–ùC%‚~- õ=͵Tâïí´`Ü%ifÞW–žƒ‹ ³:³?÷D~÷G÷`òÖï/¥ñÐuÔ¿Ö ›LÜX†&áÆßL[{_Nf6­²í]šw:¢ïú±w…°“‚¦õª´Œà.™ùÝ •3]H¢/ñßúfÈü0¬à[Ogµxxî¨!:â1Ï‘¢¨Òeþßt¢ùÈÏÇF ¤+á==ÏEøÝ“>9{” ƒ7S»²o›ƒ®ûX“¶>Ö–ú(îÉ]@=cjÿQøÂt]\Ô¹üå&iÍ"^%c9<óðUÂÅ÷YTßZ3n êwJpMÚýV@:«=€©ñ €qR ®úb„Òqnž| è%8qò §|†IÚ[HçêÝÇO­ãF~Кü îÉÀkÀÀ›õ¶÷½íÉ;ꤷٳ<âÕ¥h˜Ä[QC‰Çᙉ¿Jrñ}•yÂøŒ_¿û›AóúÉœµxäòóþRâ‹vZ0íú“®Iu ú,”Û?á½!?7äæüþ‘$£C±£  V%íŽdðP 4 ,·Þ’l\•rîwM‘IÖÛ¸a'že×¹‚B$ó"(Ÿê!’˜·úõ{¾0¾ÆIŠà¬€&Ä#Òc˜ðXð¥N|e2?Nk@”ü¸ßS×ò{ªöyòáh¦‰¤L5ÐdŽr©I„¬‘ž†—Ñ‹þì_‚Ūü@6YäÝmQ9ÓEKa~Ƨßó­€qRÃÁY'€G®<ïkšàV7#¸ì³QFvŸï'Q(´ü£M÷ŽE~î÷…at¦ÐÐ ŠF— mÉt¿qª5ähäÈ Úha€¯XCó^Œ"=TÓ*!Ø(o•\t—MÕ‘Âw‹O¿ç;ãN`'ÔŸUøÑ¼ó.ЄxÀJ Æ_šbÖ²¦|tÍÍŸ(ù¹ç¹1€Ý†fÖrÞ’%¸N‚YcüÕÅæ\ ¼§{ýêÈ’™&ÌÒý‚¢¡þ‘ ùQ„›A( s–BYU!˜þ6CæxÈ$ÚbCûß÷øOLg›?F×4í iSZ6ÔeÁ;U®½0/¡k×ÎÉ_Øõ@Õž„Öçÿù¿cÈœb´´kþMEðÜZê¿ ¨(¼ß¿UúÁöŽÔ†!9˜ òÑK¥Ø8œA=ŒÜ¨xÂät2äïý!EãúŸA2•¿v-;-k „Ø^Ã[öa׿Ÿ£7žgƒâ¿ØÙþd}ÜzÍ0$;[K©þmoê^ÂAÝÌÞ´‚A~€<©'CþñÞ_»ÿµ›Õ÷gÉOu@ý{:n\£]ÈÔ£ig°ØN]g‹$^Ýœø ¡ÃÇuìzÞ[K×l‡G~õo÷öî\î˜äŸJËÏFý±Zøø¹. §Ò…º5±½€ç2îŽ6)·£¬¿‰l?[à\9¼È¡ I<©sÐB+çÈQñh}€°ÒäEÐ#ùÇ›úüc½?°þ)ˆEòc¿­û‡V)%¯u¼C¿·Ü (ò÷q®¿ðVœx|þ˜ÐÈ"óûBâ³’^™àª¿ Êèº>ßJQ÷»°­«j·Àóÿ û6rdz· yæQþVèÞ ­½7ïÏFý5ïÀ¾•ù\?ŽBí:vD'¦ÉÌã){=ªÍ|+ùb÷ aÀ¦‚ ñØ‚1A×ã? Ä V ¦\ž`Ñר!™Ÿ’_Ø l!Ø·Ö?‹`寡1aŽ!º[õñž+Ò?Ö{Š!Õª¬¿°—¨ß Ùi¢™’ߤÝ]õžÜвþFNrà€À£ Æ=)Ÿ×·f’‚)—'Xüõ0f°—äa÷Øü\?†ƒaû`ÓïFO3ñæÞû“ü P?¤º} »þ¶Zh\e"<Ø&½¶Ò‡çü{éEµïxÐx`þè!®äY]p£•И|Y’Åwt(òseãXþÖ÷ ú÷°dTU)˜r>œ7»_ À‘™¼îY½îäwøñþ¬åã‡í¿†O^ïâú­$øÐÀj×ÉÒ~,êlª}¤µªñ¤~°øþüÑCLMû½&™o%ù7~½3äõŽü "׫°äb¨ª@Í óJ)S±“5G#¿7µÜûË!ÕkÝïäWÙi_ýŽOL4CòrÚÙ³ÇõªQ•¾úi‰ø€À÷Œ©2…xYƒùVJ0é’$7ô…ülø#xnœ%Ũ8: `~ /æø¤šÝÚ÷<¨.ìÐXù´Ö©ë’výP¿ÒW°Wºϧíœë?n›W_0àð ÆT˜šö’†\˜IjLœdÉíø‹¼ãù&yò߆fCI Š|_Èï+á…ï)QSý lü%XvWòd ö­4È´¸ºç>³7eäaןk@ï (üû±>M¼,$×fR“f'¹ùŽ6ü%½$߀5¿ƒæ5°t.ƒäÉ¿êT“Ÿuùñ&XóԬɗ§smb´µAýfŽm>4]òJÆÙW­Z¼r•¾ã6yôF?¼n\™'å‹Br­•Ö˜qUŒë¿Üޝ7Ñ~¶/cŋкnš ÁÙ=yÔ˜jÉ%а >z:š°z;Mupp£Al‡á@­ô"¿J:ëQä÷ºÉ£/xèúq¥®'_Ћ¬´`ú¼87|µÝ×-ÚÏ®ŸèB~¶cåKÛKç߇²ü"M‘_ULÏcz÷zþñ„ÑÓ£T-ÙòsØü¼jéêF~<u»Íë}X ªÐ³ÓuÃ?Œ[«“Rn¢M}Á§^._êyÞ‹š7fR‚ób,9ù¥t-òøÔ=~ûçàÔÀ sÁÈéR¬Á•ePQıçñÝçïÝkÇŠò+ R kž€º-ùë*Èï·‚ú-:á-~ܨ@3‘o$šŸÄ3«3’Q›K M}Á§Zÿ~ݸ‘ž”/hB,È$5¦_ãÆ¯ôüwŸy_^@~QÖí÷™ü¸nvc?_þ‹zjâ$¤¦ëž‚HG¾ª—µáL ÖÀÁ}ÄöøÐ\èнÔ3QkÛò”³Ø¬G‘ÜîÞŧvmà¿_7n¤®ñš.Å%VJ0mnœ›¿ÚŠáïù~°2ðö3l…k/%¿P¤Hƒ+J¡"çö{K~1´ÕÁÖaø˜²ŒÊì…¾§T è›~ Ÿ¼‘o/¨Gt¶CÝ'‚–2-š.Ùf¹­G3kkUk×T™·‰“´ü¹8ôß®?ÜòU1×J ¦]çæ¯´bz1æùËÁ6¸þòìë- Tƒ¹ePÖËÏ.È8¸ª?PÓ6¨ ýTÍD©ËÊ c/¬~ wåT=õׂæ¨Ûbб-€›ÔðtÏ}-aïûY4³ Eúz`7j-óIï6àð¯‹Æ 3…øƒWX)©sâÜòµ–^“ŸŒÃ»¿‚Š\5'ûú Šü+Ê¡8DïÉϺúÝ`÷ú¼{(h:L¹¦~ôrØûlx’É®V¤ãP·nô“¨õ!¤ ÅsOG3[V¤œ (â7 ¦z…Øž”þeq–|)®°Ò‚isâÜò•–#sû=‘TKèßø1Œ’på¥ä÷è/ÕàòòÈ?Zy6Û‹ïx°}ÔíÎw.z/<#hÔ4Õç¿çî"ɾ'ܶi4ob‡ 4ÝccÚ9ôDgfu‹ëmAí °µ¦¿_çùFÿ¼hüSçMŠ«ì´ÆœÜð×=|=ÍóƒŒÀò§`”€¹3ɯš-Ñàò²,ù…$@šê³}äÛ²ã}*ÕïAscÞšsû äNs»=ïö:'µP·ÉGÇÎÒXšçü>jíþÏhf5j~¿UÙËí_Ò¯{wñø!¦&^p••Ѹda„%_hS 9…äç2©…_"MðæOaJ9̾e™6P©ÃœÒÈ‚gÀž½ŽÀ„é0|röo!èl†-ïA$šßˆ@@g-h”#¿5×V“„€Djw n hô£II£tc?mK¼)íä"üÉo!×ïsüÞàŒ{€ïÞ0¡ÊÔø.ÅB;-˜=?ÂÍ_hU 9[°öí‡ Ò ËŸ„Éå0+G¾Tè0·—ts䇔8vï–°ú|= &̃ð!쥭üJœlkVËNØý‘‘Ëè©.CÏÃGÞd?«íÔl1hÙÄîÔÑuɪ¤Ýðd8µ:âÉÍ(ò·s®Ÿúÿ–Lc^Ô$WØiÙWF¸ù -h½"¿µÞ{f ƒiS³DäÈ¿´,›ìïF~Æ…» #–ÏÃ;ÙGQ ¤’`¹yëªÿ`5ì\¢µ>„Ïç2ôü$#'e9Q-òEª!ÖÀýtÖ‘– %\ûÅÎÌ'ˆfÖ¢,~=PƒêâíSÿ‰àS+€¾iâXMðGMŠvZ0{^„¥½%¿Zjà­§`Îù0u*ùr亓_‰´"?–ʓs.<÷\S‹r÷¯ì^[D¤-ˆ&$"ûšÒ!i†MJrÞ$P1ÔíÔhØ$ÙìCC²ßv;֞ܰ#ãæˆß¤ë®¡§ŸJÜӤѦˆ‹í´Æ¬Ë#,ûbs¯-¿i/|ø+¸lL˜Hþ¬ŸJf•X~îQ‘ìÜ)«k°ŠìÜzœ(tHµÁÞÕ{6•ìôa’}I',ÞD¿1G`†ŒOb˜­»BØ1å·jÚ–ú(-åfT”¿µAíi=6þS'€ûož4J¼®KfÛi‹/‹ò™/B79’ü€OŠ ~;¼ÿK˜?ÆO"ps•sÊÀ,lãÊVâÚ:`÷>åÚsä ðÞ ecÁ,"¿Ÿ€HìZi°{)vÚÀÁu~ךÜñZ{j=PÿÙªà7—n.E+Õ4‰ÀC:1ée^ §¶ÿ)šÉ¥sסVí䎣8­øT ྥ“F‚×5)fÛiÁÌË¢|æ‹Íè¦ìùuÛà£çàªé0fy˯2`vwò³Y¼¦Ø[«*r¹>{nö¼§Ñ°ÓÇè‰iΛ%#ÔçµîOVúiØ[‚çhÄ<7ý‹ÆØÆ1kykö&Œ9ÿ­*øAsŽ.¥¶#í´>Ý–ÜX£\þT¯‘“èÛ?Y|jpïÒÉ# M¾¦Iq‰Ì»ºƒÅ·µ¡½ ?{ÖÁú—áÚK`ähòc~•³ÊÀWH~öy]#8˜Ÿ¿gÛ­¬0ì~WcûÆrbq?•å)ÆŒ‹rþÅv¶¯ ÑÜP 3vô§c«kRÎzTen3ª4 PL¼¼Øw£íÉ ›’v‡TÖ¾µMK˜Óìò»ãS!€{o™yË`ÇÖrR¦ðp]AÐo3ò¼‰¨I{sš€mñô¡Ÿ4ÄVFo#Šüí¨}á´~ÔnÝ#²WÝ‚Êè%9CsûBœq|ç–Ià M¼*¤˜kgó†¹éöVDnšG'?Ÿ¬€­oÀ¢yP5”ü¦É`¤ ºn6Bô4¤mè,¨ f-?^ ÛÞ2Ù¹³Ç1qqÜ–”«ôi¡"4Ÿ<ЄäÃpúÀ/F?ô$9Ëß‹Ú ´§–Û58w–ø)ŸÞõgT÷-›|:vÀÍ7€/wž® Œ2á‚R~ˆ»ª³6fIGEõuÝ×xž†’ÖHˆpgšîñQKòÀ³"¸R®V¡ÖÕwÔsUþsý&€û–M>_üA ¦Y–ÆÂEí,úLZOc~1]É7áÃùKƒ/Däg§y©„@ÖõÛiÁ–]C‰G Mâ¹(H‰†DÓ¤\Þßó»ºèÀò]¶§-ÿiF¿ Kþkq‘ei\½¨Å֚ʠgË÷©ÝûÏ‚ÝK—f;ws›(2•Û<©H¶ •²m5H&u¤¸2Žk¹Ò“Ž']Ëõœ‡»ß9_ƒ" ªþ>`ƒºþÆI àÞ[&ÎZþE–¥±ðºvßÚšÈà˜ä¿õ ¸-pãjJxž?ÖãJº’I+_­3 £ÙÀ¶44!åò†è®­É]RN»^¬Órãž$Œë·¢Ò²ýÚr5ÐqR¸ÙäiBð‚@̰2ó¯ sÃg[óS2è™|¿j¯÷Y0"pý ç,ßFû`Báòìl†OÈt™â…[LGpÈÊt¼z ²XK>¸³P=õaTçœß{ƒÀýË&Oׄx—#Ém-Ç'?V Þü9”¸pÍ¢ì,.ç1Æø`| ]Wâøù‘$dœüÔ/ áš « Ø­AµUçU9+¢ùS…ÀýË&OÕ„x•,ùW^æÆ?ïùvþëP&aáõäK”å+SotuÈxˆB4ñ $Ràæ¶Ì7#·šèº¤-í„Q.¾…šµ;è³²ä¿LÈ‘ÓçZÔüûXäÕ¡WËŸ†‘EpÅ|ºÆ #L€æ4Äãjý” ³ëÙTo¢S#3 ëâv êXÈAòû€> @%yÄ„`‚mkª°s[Kö(´ì‹ŽF~DuîŽ*ƒ+Ðõ0g?ªYcwôÈà1‡ÂcÚ³ q:ÚLìŒÀò\§)a7£*ug¬ö>Ñ'HÉ—„Æd+£qÉåÜüùVD÷©^®ž_@~´Þþ%L³æÒ•äܦŒ)¯+Á¹áDÒea¥LƒLöo3p=ÖL&–pÜToýà¯è“<)ÇI)@HÆMJ"|2¿[MÂ$O:šàOO´ 0ë òÓ¢é)ÇGÚ5±ýðk $i×±:3n²º5Y¿¢)¾¨ål¡r¶£×øç[§è¶+K|¦Gi™ÓU9Ë/‚æ=ðÞ¯aά,ùyòÇ`h ´¦Õ¸_PÊݶ.Äú}•8ÂÄõ R¢KIÒv2i'^Í´5Ĭæºh¦±1a7 úóvf§l#…³}ñ†”x—:f§Í-/‚ú­°ê%˜wŒ»€¼åK`L†ƒÔ¡µà  MP½£‚¸ħ»Ä-'Õš°£uéæC «ugæ`GÚiBm“Ö†"¾ •å £ÀÁL_Ñk$-×0µJ×”–ePµ—¨ó V<ó¯. ?‡±Zø¡3 §KËÖ®MA±ºéÈå{;?YQÙ’q½:Ô1(9²ÛQsýj¼O“!qèµ\Oú"àyPRæ¨wæì-6ÃÚWáºÅ0j<ùɘ@|¹º&´†»ôÕÚaغ½tÁ¾pºù횎5¨šýVñ T‚'M× Â N½€¡‰a€)¥ ´´@~صÖ¯„E7Áˆóéjùc É@܆HºKðW³ÝGS[ºá±á`l/ªo5*·?X½;…èõ¶'K%hº‘ |°ëcؼ/…ã8Òò+‹èRÑkŽ‚>dª·”àC1«³úP|;* ,ÝžôÚhB `†¤¤Ü 6¯€][á†Ï@ÅpºžÞ=Ü¥AUÔÁP´áìLÍLhÜ«sàP †.ù¸1¾ß“ào6ˆ¹ƒsÿ~F¯ÎmÜ–ëý9YX¨&Ž8ƒ¥ÜS‚~À ÎNœ5§‡âÄ0(€sƒ8Ç1(€sƒ8Ç1(€sƒ8Ç1(€sƒ8Çñÿ=üÐñöÿxIEND®B`‚nixnote2-2.0.2/images/paste.png000066400000000000000000000230441315604104400163510ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aË%ëIDATxÚí|TÕ™ÿßwrC.dB22 fb&d"¢$¶±¤Š_QQ°E¥•n±‹+mýVmëÖï¶¶ÚÕ­»k+öEWìÚB‹TTÔ¨A¢&H„˜@&0 3d&dfî÷™¹d~å'ùð:äÞsÎ=s~<÷9Ïyžçœ+pƒE.P)ç,@ Ð0Ô¼‚óàûÀ>@î%ì äMêJ_ÁùA6°‹Þ><ì!w¨+ƒC.ÐBÿ?ZT*Õ"ˆS¤M |ðƒ¡)PÖ%q¨+GxȈ–pÃÌ™LÊŸD’ä—;ÝnjëjùìÓO£eÏ”õ½¡nÐôÙ@aosNNŽüáGrÛIGÔðáGrNNN4.Ð(ó â¿$lG-7ì7ËvG‡lwtÈ'í§ämvÙÖîÁø†ýfyôèÑшà—CÝ(¸²4é+þÐwøÅ/žâk_û:‚ Ë2~Våà~ví¬æ˜­ƒä#HMQ“’’°aÃ(///s4ðÒP7ì zG2Q„¹Æ#M²ÓuZvºN˟ﬕM“®WÒÔ)#å'Ÿù/%½ñHS,0y¨w½c*a——w­|úŒ[ øãÿD îôf…äÉË»6LêÆ]Yôux„V«%A¥RîKЧ‘€×ëUân˜^’G«Õö©ì+8?H¿>'ü^ä»ï¹Gîêò„„7ß|Sž0a‚œšš*?ôÐCò™3îô{ïýÖyùí@8hÓ6.äÊtÀl`p†ó×Ùáþûï—=^o¿Âý÷ßÁêgmŸÝŸSõ'ó%Œ©ÀÇ@°€sV¹ ‚‚‚T‚ЯPXXx¡û@ ´½"ÐC._\ $¿!Š’æB…´´4ùرcrqìØ19--í¢Ô‘sʦßp/õ“ñÏ­S¯Ÿ:UÞ¹s§ìóÉ ;wŸ:õb裘ò0Ô£8@èð³:S¬ cGÃ-ÓUÌœ(“!0:E@7ªçæÊ²?xeèò%¡ÒLGÔL&iôõ Ó!¥žímg‡…ÎãŸÑÙ¾“®“{ðÙw ˆ  @èeTZOÊ´wÈh–ùôK™wvøhiïñ‘zæÈО lJ¢%ÇÁ÷ŠÜ2]…Øæ'ËàñÂÕ8F^û)×ÜKBâŬ½].ìæ58÷>ËŽ!&ôNÝáñÂ{U>~³ÖKC“+Û6 puŒGxX™ ‚Þ•ÀîJ@Lè_³d Ëg¤"t7½Ž˜¤’†y:í´~|ÃÝÛIì'x¼2ÿ¹ÁËsë¼x}Q³¬¾Ó="Þà.`}xäˆ$Xý™=¹ÿ‹ðzÁîÍ@7w+ªÄ¡ÕÍøºœ´¼;‹Qb3¢8°Ú²ÇÇ’ïâtgÔäÀÁ›x"€$üŽ–!F™I°æ§‰™&ìúdpž‘ñ^ûGÔ㈺87#×þ£G ô“™)Ø^ïåÞ_G%+`$0Ä“*øQÂàéïŠL7%  @¯ìÞñH#grÒÑ1ÔmôC3»×@ЧAìÿT0Ý”ÀÓß•ùáKžð$=°x⇀åá‘s§ªX8[DàèË2œí’q$äã°µ¬ ï°<< ‰eÀÂÙ"TûxgG„@°¿W’7^`ao‚ ž\œˆ,¼ƒd|>ptœÁq¬uÀå\ŒtANÕ>€ŸÞ›È{UáB¡ŸnŒXqk‘ ƒN5à·ÎiJ:­4Ù?ÁçxYç*䈭È)þú x~ :·©øÇç[@ÀœˆÚÏ8ëBTY#ê~r]žÁ•w¾(‚~¤@‚JtÎùÇçgãK!>d€4¼q‡‰Pœ—€oìüSÉÀèy0/Úy…ˆ  ª€vråM›À0Ά¸ÐÅD¨{³Ç $%žŸ¬ €˜@¿•G‘þ£!)Q 7CE­%b0ÆDøâghUƒŽâçƒý‘q•@­%2: ¶?r„€ïRá×q‚IQ_) ƒ•Œ¿ŠˆÕ]qIÈœð+…ÐWHï8(ƯG¾˜„¡þ•9¿óãWåS€Ÿóû÷¢¡Ã)sð°¡›óDðZüË(%M"âÂðaR$Š_=®kP“€ç€e\BDG‡Œù°AP©üƒ¨ü4A¼ö¼J%ŸË£òÇ«”ëà32 ‚€”$3r¤€:Y ¾ ¥}@?¦° ¸àn¬nK@‡/2È‚ ¿³/0lÈȨìA–ý}îF8ç4'ƒJT2g::m2§Nɤ¥©vžt —ú:¤Ò‹¯Ý¥Yö›qU ÁИ©@üõª¿á*áÜsr NCïƒÄàS|ZZ}hÓTŒ~¹Aôv„ÀZb ~zz:‹/¦¨¨F3¤MI‘ô#¥M‚ò_7™ ðŸÒlA $øÑð} Â%&))‰gžy†åË—#Š—œ8p^ 7}Séã­ý;µL×éãÈÈ~"h“Ñ‘IŒ÷é  øUxbrr2ï¾û.³fÍêê_¤Oº“4à Tþñ›¸l”é¡í¤ŒîªøçÑ$€%@ÄöÕ 6D ¾O–9{¶ Ÿ|‰ÏaÃCvñJ)znøÎ›|ôŸ7à9ëNŸ‘9ã–‘’â— ô6, Oxà¸ù曕{Ÿ,Ón?…£Ã‰|ia yÄp´£5ˆ ~ÇÒ£3É-}‚Ú·÷ ”À)§¤aq¼Ëª‡) ™(›,{ì±ûV[;gÜî€ò$~ß„h8ívÓrÜÆ8ÝU 7¸¦x)uïþŸÇ²€Ó ÚÑñÛn¹‡U@~xdnn.yyyʽëô:;Ï¢.ÏyÀëõáèp2:u$ ‰c&”r´v#²JFF ³Sfذø%‚hñëöC`2…®O»;Q©.ßÁÂí>ëׄ0R7‘#»7*{=HLêZ=Lk»Èu¾ŒJuyQ~4„ ¶I)cðyQ4I]] IñÙƒ2 ‚*‚ýïØ¾éEÅ´·µàñzHJ’p¹œˆ¢Hgg'ž.ctcp¹\$''ÓÙÙ‰Ûí&55QùìÓO™˜ŸÏáÇÉÊÊ")IBp¹\;vŒÓ.S ètwâît#%Ix¼,‡sýT¿¦ú”áü6@g§;PŽˆËåÄrø0†¬,šŽ4‘3!Gùý`þž %¼>€W¾ü¬}"• Dp‹ÅBñŒ¼øâ±cû6&ҽ½‡ÃAQq17̜ɻï¼C§Ûåðaæßy'ë×­cÊ”)L-œÆñã­ÔïÛÇæwß¡½½ñãÇãr¹xü§?ã»KîgÆ 3Ñѱ÷Ë:¶oߎË墨¨˜Ï>­$AYýçרôÖFšŽ4ÑÖÞ†Çãa̘1”ð>CMMM,¸ûnÖ®YƒnÌróò(/ßÿOü¬O-hs ¨2öÅ1 Æ šä_<£˜×ÿ¶–ââbn¹õV’““q8ˆ¢È˜1cHNV³³ªŠ¢â?q))‰Y±‚¬¬,’“Õ¸\N®ÉΦ½­ S^æ˜RP€V«åÁ¥ßÔ—G§»QÉ™K²:™1cÆwm#SSÙúÉfϹ‰ººZN9L)( !A$;;›Ñ£ÓH’’p¹\üøÑGqwv2fÌšŽÁ”—GJJß6€ @¿­) "ŽG r ËZÙ×d“}MÏ&¬øázHÕ…¿å18øû|—ó7Bàþý |8ÿvKE7ΙC{[©©©ŒKOçÀþýŒLMEœÌ±cÇxü‰Ÿò«_þ’$QY¹•Wÿü¿Øí~ùÿžÂãñp˼y´·µáñz3FÇýûÈ™0ur2ûöícÙC?à¹ç~ 2|Ï_ÿúW_Éûïm¦°p9&œœŒÛí¦~ß>F$'ÓtäW_}5‡bÜØq\™IÍ®]<þÄO{m·LÀì0!úäÁïÕ:ôÍýQAˆÌPUõ&L YŒåð!Ž?ÎñãÇÿr²©©‰#Gé<ÛI]]-yyy¤§§SUUE^^w.X€.ÀÆ×½þ7ÆKçÀþ?ÞJaá4šŽÁápP[»‡ï>ø õûö‘“3S§œrœ¢©éÉÉjŽ;†N¯£½½#¤¥¥‘˜(RWW‹×ëA¬æ°å0---ìÚµ×iêä^d ˆŒ,ñ-Æ@߀È]*ón»y·Ý¦Ü:tˆk®¹&âY—ÓEyù —$^_q¸çö}ü}Û½Ö¥{Oÿú×½æ_¼ø¾w޲ Àï^æ‹ãeà §€ÞôÿÙÙÑBuŠšùwÜ1Ô킞G²ìW„ù|\vRúæá…öìÙƒ§«‹ÌÌL’$ ¯ÇCÃþý´ÙlL/*")IÂá°“žžNkk+’$áéêÂãõ’ššŠÃáÀãñ %%áñzý–8AY&Y­Æíîd×Îj®¿þzÄD\.'‡$--QD§ÓãpØÙ»w/Ó§OW<’$±vÍ233™4y2.— )) wg§2Õô2ÐM¯ ú1„ÀñÖVvìØÁý L›>ðEzz:¿ûÝðíÅ‹ycÝ:žýí¿óüóÏq¤ñóï˜O›­ÉS¦ðòË+™<¾7ô”?¼LǃÓåD“ª‰úœÝnq\íO=¢vš|Žd!¨ ŠÏ)à¼ÛÞܰääd4’žžÎÎêLŸ>/÷îE§ÓqË-·ðÎ;ï ¶¶623¯¦ÍÖ†Z­f\z:ü+Vü•/½DZZiÚ4Ôêt:}ôO<ñ|ðOmmm|ík_§ººš þÎÍ7ƒ#\;q"{¿ü^Çõ×OeÇŽí8.Ž462aÂÔj5ýàï³n ¨ä¸^ÆBý¼ÿNŠnP§¨ùèÃikkCóo€ã3X·~‡š™Y2“ö6¯«ÕŠÁÉž=»I’$ö7°¿¡Ç)mm6vïÙÍô¢"¼]R5©|þÙ§Tï¬F ­­ I’hhh`ïÞ/IOOgøp »ÃN[›½{¿Äãõ IÃ1 lÙ²§Ë‰˜(òÉÖOxèŸAt#â} ˆxÿ² xàV¯>å÷|Ë_ýoÜrË­}bÍv»}H6 HIÔë]寱á?—)'xçd'¡ÓÆçވ߮?Åû»ÜáÑKú(œŸ­’ .ìsÞQ£4«obB–ýë_€¾Âª`!‚…8NÞï=¦át:Ñjµx<v;é¸ÝnÜn7z½žF‹^ÏîÝ»Ñëtd q±ËH&° $8į1h«€H°áïo`ildûŽíxº<46ZÈÎ6¢V«Q«Õ|øá‡LÌŸÈ”)Sh´4¢Õ¦ñú믓žžÎwÞÅíóoê>é½Óº ‚_%|™1€~a˜9³„™3ýÛ êÉÎ6®HMM¥¨¨ˆÄD‘‰óùíoŸ%7×ÄO~ò€€?^<¼I²BŠ&0N)`Æ È8cŽ1êµ)/Ráòo¿¼$¾“Üoø52}ÅU@<nßqéOÄC Ù2>!Î]ÂbÔ»o.aøÁîÿª««i³µñ÷7ÞˆH‹öowÍî¿»ƒFK£rßý:<-˜|>˜¾»f7G›²{÷írºhµ¶ö©ž!}°ƒÏ!ÆØöDá|Oþë“dggóÐÂãñp´¹™l£I’HOO§ººšwÝ…ÅbáÓO?E§×ãvû×¢¢(òÈ#ð§?ý‰ÜÜ\þüç?SXQ<øàƒèõzžþõÓ8N ¹¹¹TWW3qâD~ðÏ?àõ×_çé_?V«¥¨¨ˆ¿þå/èôzœN'½^OuUS ñx<Øl6n¿ývÞxÃÿµ”5kÖôþÒ(B ß!Äï[÷˜‚Ž„ÝÞìi……´Z­ddd0)?«ÕŠÃá`öìÙ8Nª««™3{6z½QÑh4¸\.²³³ihh ¨¨ˆN·›Q Ã%‰ù·ßNvv6K# 9F#…S ‘¤$‰¢ÈŒâbÒÒÒXxÏBRÔjJfÎD’†s]A^Ç‹^ï·ùK’D–Á ‘ü–}ÿûQÛÓ½í!ý œJ)œ—ƒ›/5DÕÞÿý!š@ßrƒq:H’tIéºoÙöîküõ™eU°Àµ¦áŒÓ DéC‡6žä£=g£û® ¼P÷qƒÆ!D ûµ‚— ð«÷—×^#Y­FEŽ67“¦ÕÒØØÈìoD­V³e˾¿l555˜Íf\N'àßR–‘‘A¶ÑˆÕj¥ÍfãÛßþ67n$M«Åívs´¹™…‹ñêêÕhµZ$I¢¾¾ƒÁ@šVKaa!f³™íÛ¶!I³gÏæG?úÿòÈ#˜L&Ìf³R/^O›ÍF¦Á€ÓéÄh4Fì~Ž…pz9ÚÜ'œGP´E‘7Ö¯G£Ñ V«IJJ¢ºª kK †·ß~›9sæ°»¦†ªª*òóóY»v­ÒùåååÌ;›ÍÆîÝ»øçŸgöìÙx<êëq»ÝTUUþ3 ªªª°Z­LÊÏGÀ?ÏWUUá ×Û›6ÑjµúëR]Åb¡  ³ÙŒ7àVRRB^ ”Ä·*˜õî“ ëHÇÿ Šà^UUEAA¢(âñxhjjÆá°“ŸŸ¯Äóv¿/³{|žq»ÝH’Q¿ºº:L&¢(ö*ot÷{øìíÿåÕ_=¤@¾iãôIoÐÎ#^Üt’kO‡G÷QˆeHCOK(,œ’–••3ø³±âûóŒ$ _PpÝÀzMÿ9M`ÜNƒQ)æ°aýëCîkv×`>hÆÒh‰Èk±îµ¼þ»ý¤ò;–F UU_€fó¨ù.'N—3v™Ý;pE€/NC,Ää½éÖ®]«ÌÏUUUlß¶ÂÂB-ZÄóÏ=‡,ËŒ?žÚÚZŒF# dff¢V«III¡¹¹€²²2¶nÝJcc#EEE”––²víZ¼^/õõõLœ8§ÓÉØ±cÉÌÌäÕW_å•W^áÙgŸåĉh4î»ï>ež|òI42}i4¶oßNvv6³fÍ¢¦¦†–––/_ÎŒ3zmw¸ ž]Âú/öB………ˆ¢ˆÓé$??I’èèèPÒ v»]É7þ|{ö™3gŽâñ“ššÊÑ£G0 Lš4 €’’233yøá‡ÉÏÏG«Õ²hÑ"4 ·ß~;)))X­V>Lqq1ÅÅÅF, z½žææf–/_Nff&‚  Óép»Ý$ötÐO(Çì¿'ô ôLF££ÑõÉ+V ªRK–, ¹///p#ûæ7¿ñÜòåË<ε[ÙàßÐ+;½¤1È/† )ëÞ=P§€€"ø²t 0˜Ífjjjp:8Nôz=ƒÂÂB–.]Š^¯';;­VKFF Ô×דŸŸÁ``åÊ•Üu×]466âñxÐét8t:mmmlÛ¶eË–±mÛ6<K—.ÅjµR^^Njj*H’„^¯§££ƒƒ2wî\6nÜHvv6­­­tuu!‚r@Õ’%KB–‰}éµ KÄ»?@?]Âä^ݶmåååLœ8‘úúz¹¹¹˜L&’““«­­ Q¹õÖ[iii¡¾¾žßüæ7$$$PQQÁ` ©© ƒÁÀË/¿Lnn.………ÔÔÔ°zõjRSS­[·’˜˜HSSlÙ²…ùóçSYY©Ôãë_ÿ:•••lÞ¼™ììl†Nvv6f³™·ß~›¹sçF,M{j·LÐ pÏ F½c*‚þç^9—)`J>l!+ËpÁ§»á듼Æáw G€)y)¤í¹„ðò{mlÝë ^Ò7!°û×™†Y×d ¾>¡Ûa‘²Þ2x>%¬_Aá õE'S³kWÈßhiP¿o_Ì´ðxkKKD|sSàr:q9X[Zp9Jz]m­r½é­·°Ÿ<‰ùÀ>ë–"X’•ÕÀô4È Ñ9@Ö¼ëÖ­cýúõŠ=_­V³lÙ2Š‹‹Y¼x1ùùùÌ›7ûî»§žzŠææfÊÊʰX,,^¼˜U«V¡×ë),,äÅ_Äb±`2™xúé§™={6 ,Àl6“‘‘(Š”——“‘‘Á¢E‹xíµ×°ÙlŠú«_ýŠ/¾ø‚ŠŠ Å@°yófVw³(VUU!I&“‰ßÿþ÷½¾)‘!ñë 1¦€Þ)Àh42þ|¬V+F£»Ý®èL&¯ÍfcÉ’%X­V´Z-&“ ›ÍÆüùó‘$ £Ñˆ>àÊÜÝ»téRŒF#ùùùTUU¡ÑhX¶lFCYYv»«Õ ø5‘ÅÅÅTWW3eÊ ,^¼Xq) ª€^¶œ…ÚeÙoHS>2§S@¿—áÒpx³¯»î:®»®oF–;úyFÐÃ?< g}ôQå:'''$-–ê··v+ !¾õýWõF—+Â@"õC]Á¢z€ ðZÀ+¯¼‚Z­üXIFFZ­µZÍfcýúõ,^¼·Û×ë%!!AQÕÕÕa4Ñh4ÔÕÕQ^^NAAÍÍÍèõz4 wÜqÇø vo·PÊé0žBo ƒ$IÔÔÔàñx0™LlÞ¼½^Ïüù󭦦†ŠŠ ´Z-¥¥¥ØívŽ=ʆ 0™LÌ›7ššêêêðx<ʼ>oÞ<>ÁƇ¢§‚o¼:ã—ôk Ã9@$î½÷Þûï|ç;=ÞwÇÒ¥K•ë›nº‰'Ÿ|r¨»§[ÓCAÁE@¼ïŽ…˜«€¸¥ôA"Ü ´›CP\ï €1(^›:XtãÈ!B 8û3D¸CGÉóî»ïÒÜÜŒÉdB’$ÊËË)--E£Ñ`·Û1›ÍFe›VðȧӉF£¡ªªJјÍfL&åå唕•!I’ÿÄïúzJJJ§Óÿ9šúúz4 ùùùН€^¯Çl6£ÕjÑjµnàn·[q0éS?…s€€èãw è÷r/`µZE‘Õ«W+ûñÖ¯_Éd¢´´”U«V)^¸AÉP;??Ÿúúz6mÚ„F£Áh4b³Ù0›ÍX,,X€(ŠlÞ¼·ÛMyy9ƒ’’Ìf3•••¬\¹’õë×3gÎ^|ñEæÌ™ÃªU«˜3gjµšŠŠ Ôjµ²°OI¹ ¾]º<Ñ¿ôÚƒØ3ÊÊÊ;v,eee ¸Ýn´Z-¢(RXèÿ¨Sð˜˜ÊÊJ ƒ¢Í bΜ9h›B‚›G322BÎ\°`6› ƒÁ€ÙlfÉ’%Œ;–Ÿÿüç ÅÅlñâÅ”——SRR¢E‹”òúЍРÀañ¬hëðD‹¶ÄVËá]бcdžü•Døª!V¾ž0~üx¦M;ç~Ôðu/gPËG9T¼”n‰¿)Àç“9vòl´$Klk ,+¡¿8qâDŸâƒst_ž?yòdÌßëž¶k×.e§Ð@нÝÊ'bäs.âC¾Ïá`«›³žˆq´±§€^„À?þ˜òòrêêê”?uuu”””PSSCYYV«UñÌ]±b&“‰E‹)nÛv»‚‚$IbÛ¶m¼ð Š;ÙÒ¥KY¹r%lÛ¶ââb*++•C¨òóó±ÙlX,4 ¢(RRRBUU«W¯V¬”n·›ææf´Z-+V¬è•;D[ž3ǧX}(ê Q=®z¦I’Ðh4 222$ «Õª˜[­V+v»ÝÿM€€ï^ðë ØívÜn76› I’Ðjý_¯Z Š‹‹Ñh4H’¤ü^°Œªª*E¸ ®.Ün7lÚ´I!ˆ ¶2¸Šè ÝÛ-Ä¿€-È/ õhö§;½l?p*ZÒ&ˆávï·¾Å^zY¹WŽ(Æñ§Óûû©sDR±q xÒo™˜bMÆØK|K{Ö~œ­õŽðh' \Ñ9€ù&|UÒnYVÌ`A_€xš޹ø´Á-ià‚UÁ=ú‰'#ÎŒ3X³f ¥¥¥X­VeÞ5 Êz_­V+óµZ­V@ƒÇìY³E‘Ç{Œ²²2DQT¦•à£Ñh¨©©¡  @ñ(²wI’°X,ƒ© 477s÷ÝwóÖ[oõ˧ œ”%±rFÐPkßÐê8ËkŸX£háž Þô ö,lÚ´‰ŠŠ 4 Z­VÙ'`»~ýzòóó)++£¢¢BÑüI’„Ùl¦°°P™ÇÝn7‡›nº §ÓÉsÏ=‡ÑhTô •••Ê€óÔSO)®e¸Ýn^}õU6oÞ¬(£‚žJ/¼ð………ʲ7„r¾nMï&U_êhuœåï5ÑáöFK~ h ÞD•.º—ÿþý”ûÔ5ÃCiåäÉ“Øl6²²²°Ûí´´´••ÅÖ­[™6m'Nœ ++‹––š››Ù¼y3K—.UT½Á% Çãaüøñh4víÚ¥<#Š"cÇŽeÆ ÜvÛm455‘““ãÿpD@IÔÔÔÄUW]…V«U|;::5j†ÚÚZ&MšÔgß‚ívåzË?ÖòÒ¿®P:j²IK†þÒ–j›:Xû©wWTÍ_9P(”•îY´ˆÿ~ñhFªÖÓ†ÊËÇÛÎé¶l\ËK¿X¡19÷Ò%€{'ïì:Á¾£®XYšBº½ýÐÃàóùBîÃqàÀàœÖ­¥¥…””Ôj5 ''‡'NpÕUW«dKKš?«Õõ{@½=w>ѽÝÁo$ÕÁ}p–¾¨h9Ù‰åÄö4v`n=ÝSV+PJØàC,=@˜0Z£+++innÆb±(ó<ø·†«ÕjV­Z¢¤Q«ÕÊš>hÍ+,,¤¹¹Y±­ŠÁõ»ÉdÂétbµZùÓŸþtQ:µ{»ŸöòyË9jÕ +bBßÎÔ¸Ð8éêêkÖz`>Ð-1æÄz6`$ M¹õõõ”––b4cF£aÞ¼yÔ××ûD1˜Ífl6………в'hÊ­««£¸¸X 6›M1.¹Ê…F÷v{|2Ýå(·×K·é3ð&°pÄÊ“ød_·ûÈ<³fÍbÆŒ”––Æ´·Ïš5«Çûh¸-ð=â¼¼¼‹Þ[áínkk»èu8OhþÒ[F¿Q Çyº<žoé(‹b¿œ-.uœíê iw{{ûPW©¿¨VBg_Kxä®;éêê"!Á¯þ=ÕáB=bx¯Žwœêp…;««‡ºJ½ÁÔ•øÙýîþ uøµCÊú¦£ãå¼ÏÍsËpŸ=‹í¤í¨ÔË–ì§œœr“¤››š¨úbG´¬sˆòÒ š9Ip4׋º'˜òòØðÖ; ÿ'ÕRSÔHIÃ.B8ÛÕ…£Ã…ëtèAÊþðþñæ†ðìf`6+\8Gq.°9<ñ;~Ç~ú³¡®ãEÇÛo½ÅW<-éqàÙ¡®ßùDðõ>ÌÆuO¬Ùå—¦N|=[¾ìÃ?6là‰Ÿü8š1ÌÜO…«xAw>^„_˜ˆXNš2…‡ù3n˜9Ôõ½`8°?\ù{6¿óv¬,K€W‡ºžçáùct3†cì¸qLžRÀÕ™†Ù žq¤±‘†ú}4è)ÛkÀ}},2îñ;†þ4“K)lâóˆðAàg@× ;îrÿË99é+‡" –¡„¡-@ß¿t}#¸ ø€¯Gøøg¾B,¿?Úœdü†@¸\`ůUÛÄ­õg øÿæÔP(=ÄI¦IEND®B`‚nixnote2-2.0.2/images/printer.png000066400000000000000000000510701315604104400167200ustar00rootroot00000000000000‰PNG  IHDRXõ€HúgAMA† 1è–_QïIDATxÚí½g”$×y`y_¤-ï«Ú¢}7\hxïÂI@)Š2CŒvgvF»š=»sFgfwggµgÏîj~̬f'J¤$P$%¤@$: @£»ÑíªMuWuùÊxû#]DdDä‹4•UßíTdÄËȈȈ›ßûâÅ{J#˜¡gs«·AXá<©ßiõ&´7ÉVo@œèØ9rm«·AX¹ýr«· ýaE 30²ëÊVo„°"¹À޶z#b€+ü«Vo‚°"y–'Z½ ±Àjõ‚ ˜"Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbƒK„Ø Â!6ˆ°Aˆ ",AbC²Õ ­Ærü?AÛñ¡}a «ˆ$À*ýK½+‡]ú—ŸZ…KXáX¤°H’4ÔS%‰Šwæ°Yb‰K­Þ½U†KX‘X¤H’4Ž¢¢‘ Aª0½ˆÍ‹y- ",a‘,DS©úWeL ȰÈRA]B³a +€$™eÖ”©Â,²Ä¼T›‚Kˆ1’…ø¦}H‘¢XdEWCa ±$C’tSòS#qI¼ÕHDXB¬ÈÇTµßñ[~òñÖ" ÌKv«nDXBLheL•«{ Y²Ø¢­:a mO†téD­_­D´U/",¡I’!Ýêh8ym-Hf«DXB[²2Uå$Mš%˜oõ†Ä –ÐfäÛT­ŽnD’$ ±–`†+ªÕ°Â±È^%ªrîu–,Ûiõ†Ä‚ÕvvÔÅÖþ=rÀš‚E}ô‘]µÇ·Ÿ»[½ ±@"¬Xl£fåOqÞ\½È£ÓfÈ™M1Y:+wxêf5e«ª£[½±@„]:©’ôˆ´ê`õe«ªÅOa™!Š„ó¤iÕ‚EªP”KÔDX&ˆ°¢ ½'•H+ ù§AúJjE„íXt¶‚Èg«„`$Þ4C΢íå‡-ä´s“$µÂ[¬7Šx?%¹\ˆ°"®£üýCyB,%÷#!9,DXÐ'U’$6K«:ÖÊ'ÖEUQ*¡"¬hmvRY«6Ö*ŽU#DG",äÜŠ€I„U&k-¬šQT$±^«ã©9Ã"õ´Ê'ãWöàOù¨Ê’*`H„e‚+µžRùNDVž¶Z[\IGr%îOsaE¢ž_Á$IÒ…„|ÜI’*:r¡5[š5!Š‚®ÿ^N>!oÇ4Ú*Vÿ„Æ#UBDXˆ–t#¯- ÚŠƒ¸’$DUMÄa!Š€n¸Z’…Ç€—ȵe KD%´"¬H4çWÐ*<¼²„M®-"®$ ,¹ó·¬´þ["¬˜6­•rÛÆnAÌe‘Mµ©š!Š@ãrXᔕQTWó¢.‹²¨„V"Â2A„‰åÛ±¡¤¯z¶$Ÿ—*®[4Õ.H•ÐV$Zù+X©—²¸òÿÏ‘¨òNÑ““vRD;d.ã€+Z·WØÞøI.¡½aE@Ëï Ð$ßdfe"uAh Ú+zoWDXX®»„ÂjDÎ-DX°]h’l0C„…6Kº + 9·LaEBN*¡Yȹe‚+rJ ÍBÍ1Cš5DBò B¢œ/rn™ Š€Ü%¬¹,ý‘Ë Vš”t—‹X„ƒ"¬HKw¡yˆ°L¤{¤J(4 ©š!Š„œTB³ØÝVšÝ㨰š‘CDX‚ÐH•Ð V$䤚…œ[&ˆ°" Iw¡YH„e†4kˆ€ôÖЬÔï@„e‚+ mÚ[ÃJ½„Wíynµ"¬HHŒ%49³ÌV$‡%49·LaEB~…f!Â2A„væKX9È]B3DX‘“Jhrn™ Š€œRB³Ë V$䤚…œ[&H³†HÈIµȵz|‘sËVVno íy ¯&¤Jh†+-—¶Ð$DX&H+rR ÍA%›!„¶@„e‚+ÒpThrn™ Š„œTBs¤»"¬HžAZ‹+",¡Yȹe‚4kˆÄJm‡%D£ñç Ñk†+’tF.·z‘sËV$¢œTr æHÒÝ V´td+4 – ’t€œR‚ÐZDXQ–Ð$¤ÉŒ"¬HÈI%4 9·LaE@~…f!ÍÌaEB„%­DîFB„%4†ÊxJÎ-DX†£ÍduW‰V÷Þ›# @¥é K–léï5¹‘喜ī ù14A„€²f”1Æ¢ƒ YŸìÞö\ŸHDhî £2ÎiN3®/µz‹Ú‘U,,e1ÈcŒ2ƉÒK¥UVeTÆÊX•¶2VÆÊZ™éÁTü ÍA£¡ƒ¶°%?GM3Ω¼¾ôL«·¯]X…ÂR=ì`k)ï½êJޤ†Séáô°•õß<–„íBÓÐdné¾9uqáÌâÙų‹gsçè*Éë§9ÊŽèU> Ê*–J³…íì`¬ðº39’N§†Ó#eI%H“"Eºð/C¦Âúó",¡‰X¤Tª?ÙÏôâ…Å3 gÏ.Í%èf÷² q€ýút«·µU¬a)Åzv°MùjŸ5˜ÙÒ±9³>ÑY,aÑC?ƒŒ²–áÀõü˜œKh"#|˜+8Á8g8ϤR©ÎèÅs³Gæ-Õ»ØjŠì瀞jõ6/7+ZXªì`ª#½¹cKvs²À¢›~†f-£­ÞPA(f3› Ósœâg™`R©áÔpïõÚž?1whîðÒ ö°Ôiös€ƒz©ÕÛ½\¬Pa© »¹ŽÍ( ™ÚÝܱ%= èg=ÛØêȲ B;’uÈk’÷8Ì)KmÈnàN{~îÈìáùC6ŒqsêM^ч[½½ËÁŠ–²ØÁ®$VoöòŽ-Ù* ÐÉ:6³“Îz?B–^nàà$û9ÊÙŒµ³s',]œ=<{`á}näFužWyUŸkõ–6—%,µ–븖nPéÌåÝWe7¤ã2v†d§!.¬e-ã8Î…¾ä5=רsÓïL¿µæÃê¯ð†žkõv6‹",Õ˵ìa  R[º¯îÜ©’ÐÁV®à2yÂ[Xa$ØÎv`†÷x—Ùž=={–&.íyˆMü’z‡WxO¯ÀVα–R\Á-lGAb¬ëê®+]ä2vî ÂJ¥“k¹–^cçúïè¿cþø¥·æÞÑ»ÙÍ´zŸèó­ÞÆÆka©${¸“°z:®ê¾:5 c\ÉÕ¤Z½q‚°Ltr·qŽW9ë3ëõý3¦÷.ävnU{ù¡þ Õ[Ø8b+,•ån£R›{oêØ‚‚v±‡®†VŽ ÎqŽUsïXˆ!CÜÏýæuŽ$Ô®®]öÜÔk—^Ò»Ù­Þç‡z_«·¯1ÄRXªŸÛ¹‰4*syß-é1èd{ÚžÊæ'8Å— -ÜÏ“­{­‚Ì%NqéºÖ±™Íäx›½œÈöÝÒ{ãôÞÉŸÛ°U懼ÿ{TÜÚn«µÜÉ5X*Õñ¡Þ›’}0Àõ\Û µÛçÆ9ËdE¿ çÉr_hõV$Ïòûè¡“n†a=›ël)8ÉyE`æÀäÏ–Ž“¼ÀÏõ|«÷µb%,µ»Ø ª³ë†Þ묬b 7³½!ë>ÉAŽ1Ría Í£(¬ŽÒœ#ldWñÑך˜ãg¼Å,0ââÏÞC3ÇÏù±žlõþÖJl„¥vð ëÁè¹¹ûj•´ØÄm¬­{½ìçãTo¸r.¶‹°„¦P)¬"YÖ±™]57x¶y…W¹,M\üùì›,‘ãe¾Ïçc!,µ†‡Ù Éu=7wíD%ÙÉmô×¹Ö ¼Æ.Vûlºd„õ|ŸYÖ‰°„¦,¬<Šavð¡šo)½ËÏr3S/O¿¬çXàüH/¶z¿£ÒöÂR=<Àõ(k¨ÿÞÎíå*n­3ý=ÇìãLhß zb”õd sžfN„%4‰gy‚%ë+ÆØÉîÏÿc¼È14öüÅŸNÿ‚%&ù6¯Äk ‚¶–Js'w‘V½wö\‹êâz®¯+™ãmÞæDhGÇ}¬g-£(Ïü¯1Çz–Оå Îp ;¹ÀQŽ…FþkÙŇjºÎñöc³4yás{“|ChõÞ›Ó¶ÂRŠëy€’]7õߢÒ)öp{]²:È[e!¤D'ëÙF_ÀÒgDXBÓÈ ë¦ÒÓØÏqÂnè¥ÙÎ5=!{–çøÍ©óÏ/öñ =Þê#`F› KíäaÖ ²W÷ß•ì±ØÉ½u4=Éë¼ÏlH‰4kØR¥×7˜cƒKh ÏòãÜäºçmsœCœ ©(F¹–+kxZößã<0³ÿÂ÷ìóØü‚ïÆaØ‹6l8ªÖðQv@jóÀ½é1ØÀ}57 äUö‡†× FØÄzÕFÄiOµ + í9׳žyqŒÉ€ò§y–²‹éôI[ØÂ«¼;:¶M½6õ#}3תðB»§áÛ,ÂR)ä6”5Üoç6à¶Õ¸®cüŒ£!šQ ²‘ ÆÎ~–‰°„&‘°® <Û/pˆ“! ‹-ܹ‚˜ãG¼Î"öüŧ_b‰‹<¥ßmõ±£­„¥¶òË ªÎÞ»z®Aup37Ô¸¦½¼Ì™å}¬eSéþŸßfQ„%4‰gy‚Óì ýy¶9É1ÎÖ—q{䶉Ó<ŸOÃ_œøÁüÛÀ«|]ÏF\ɲÑ6UB•æanFe®| Ñ‘d7wÕÔãÂ"/ñÁ•qÅ;dPT¡ÝÐUÎɵ¬eŽ}÷-§9ÂQÖq;#|f¿Ä8Ïq¼oäã³WO|ÓÞÃvõ”~»ÕÇŸ6‰°Ô£_uõ?еK±•ûé©a- üˆ·CÂfÅÛknpúKa MâYžà×"¬Â û8’îãŽRoð¦ìç»LcÏŸ~îuàu¾ÖŽÃ·¶°T†q#d¯üˆ•íäÃìªa-‹ü„7ªÊÊ­ÁY¢<ð2ŠÍ",¡)<Ëc{H….I‡«ü%ö‡6~ÞÈ}sZ‹<Ë>4³‡&¾iOr‰§õ[­>.^Z.,µ‹GéSÝvîPìࡺװù¯„´Î˪ü,–æ"¸@´ÇÖOf§Kh ÏòªR³èg³+ó:Å~‚»µØÅ=ŸA<ij\B/œ~ö5àMžÖÓ­>6NZ*,ÕÁ#\Ù݃¶²]|¤¦ž^æ¥ÐœÕ[=Oh…}ÉÁœ #šij<ÁþªÂÅZ6¸žÂ¸ÀA.–OsMÄ׋|‡wÐÌ9ÿMûÓ|]¿Þê£ãØÿÖ K]É'é±zêØ¦ØÅƒ5$Ùßå…VV£l©¸xœÚzŒ=E†]",¡)ä…5hÔ<º‡+=s&x?$½ÑÍ-\ikó,SèÅóߟ}ØËÓíÒ·C‹„¥<Ìí½fð>+ÓÍGjhm5Á·CÔ“`”M>Õ˳¼_cÐÓd¸\„%4…gy‚÷0|žc'óÎr„àÚÛZöyO09¾Ã^4sÇÎ?c_à_Ò[}Œ EÂR½ü:›T×à#[Wð‘ȱUŽñAý½*†Ùæ»Î%^©¹Åú¸Khyaõ «‹«}çŸæpà§7r{¤m:Æ7™D/žÿÞì+Ø|‡´¾g‡´ÃRÛø5º“F>™èîáÁÈ·_áχÀl¥|u6SÇ@-ÿ®„ƬÓõIÎû>¤?̇ðŽ9ÇOy‡"4,ÝÈßç9ÞJ =0½ñÂ7ôƒ\¦¾Üê!Z—YXJqAuÞ8p¯²¶ñHäØj’ïp8pi‚ ¬%¸IèL]EEYBs±ÏÏ3éyÅV†8pÏü<_b7÷'á<Àå|®Hœù[û þ{õúD+вV UŸâr•îÿh×åwpSä5¼ÎC^Å ›ª°Ö„;äûtßÅ¿^Æã%¬^àÏC{õ²ž !Ks|ÀéÀØa]„m›æo8^8ûùwYâiýRëŽÓ2 K­ç³ XÃ#¦†:ùxè÷cgx?piš-­ã…>aά_®ƒ%¬BöÑmÜ—èÖªBg8Ø¥’Å-ÜiÛ¾Ëëh&_š|ž/ó´nÑ Ë&,u3Ì\1üQ•ZË£‘»Ô?Ä·~R`€MF}§öÎ/b·Ï£— dnãò¯0øyÖãlàÒ üR¤«ð]¾Ãsœ}JOq‚¿Ôµ4f¬›e–JñI®Ã꽯÷Åî‹øþßeo`€›`C„¶oŒãϬ<,-4™ŒñOâÃ’8˜ÈïäáH·¼&ø.›9óÔâæør+:¢Ya©~‹5ªgø“™õˆü¤àYžiÉÛÍÆHóœ ©V B<Øá^߇«†Šë¹;Âçæx†ý '~pé'h~Èw–»¡CÓ…¥Öò9zR›†?‘èä±È}%à›!iöQF"oÑ[5ÇX‚Ð Gl ¤9R5\Ïc‘~ò_ârÌì?ÿu=Ç|U›µÄhM–ÚÊo‘é¸vèAÔ.>y‰Ÿò“Ъ`w Û´Ä1Î5u¯¡ytsy ïš èC  Ÿ_ÔÁòI¾Æ4‹çO?i_à ©£õ"PM–ºšO“ì¾½ÿN‹{ÙñÝ6ß$¸’œŽXt3ÍQÚê!tA¨J‚nú®aÈ €9Ž6›Îòh¤†sü-'YºtúK¹Óœà Ë7|E…¥náãX}ôìIñHägçøkN.íd}_[™Ifëh÷.ËK7½ceFc‰»TJòWDX—Íßq{þôWpž?]®{†M–ú÷‘øx×®,E²7À_ yø¦¯æQta5£9X³PÜÂm‘Öö¯£sãOÍ¿Ã4_XžðM–²ø$7ªÌÐ/g/ëáWŠøþ þ*¤Â6\s'Ç‚ œ ¹ç~EZ׋¼úì³3/1Ï“ËÑŸC„¥R|†+T÷ȧңüZäP/ð¥] ŽÌ,‚ B:°¼’‡#­ëMž'ÇĦ¾OŽ¿Ño6{Û.,ÕÁo³Éýt²o ŸŠœŸäÉþCDW‚P7™\5Ê:È7XdêÕ‰g°ù–~±¹[Þ`a©>>ÇXrÝȯ&:¶ðhäÄx¸®úEW‚Ð.6°bx‚§˜cæ½³Í?Òßiæv7TXª—È@jëè£V*êNLñdhª=Ú`Ü‚ 3Õ@eMðU.1wlüI=Çõ·›·Õ –êâ¿e$sÅÈÇ•u#wE~¿ÍŸ‡ô¥Ð-Ñ• 4”K!ã!\̓‘Ö5ÍW˜`áÌ©/èiž×?hÖ67LX*Ëï°.½cô1˺›ëkXÃ7x'pY†Á:Û ‚àe*¤FsKÄ•ø*ãÌŸ:õgzŽoêŸ5g‹$,•âslJmû”•ŒÞ¦à5ž \–`¨îf¢‚ Tr!ðÉZÅG#>´È—9ÃܱÓ_Ô |M¿ÚŒímˆ°T’ßd{rýØg¬ôm;Ësš'C†”~¨¡IL°°$ŧ‹´®žd‚™÷Çÿ’E¾ªßnüÖ6@XÊâ3\™]óVözî©a |>äÞ`·q·±‚ DÅf"ð±èn~3bW›3|‰I¦ß9ó–xR×Þ_fu K)~™k­Áµ¿•èº*b¢®ÈS7‘Íô¬(Bí,q1°O”>±•)¾Ä4S¯Ÿ{ŠEþ\iì¶Ö/¬_âf«wÍo'{wðK5­á_ <\Š>É^ B“Y©áìàã×6Á—™åâÏ&¾Á<_lì3†u K}„»TךßN næ±×ñg!‹e;å¡vf»É„‡¸*âÚÆùkæ™øáÅç˜åOuí#¿TPWø¢îâ.•ûljpŸ¬q¯…èJwÉ/B=t„¨àû!ÿø3Ê'H1pWÏítð›Ê|È…ªÔa©kø•ýlfý(Ÿ‰Ü—hžEþs`Ó­£‹>A¢°¢¥MüJäõæ–ÿÚôKœç¿6jÄèš…¥Öðßýõì–A~½f±|W—Y‘‡¡vBª…÷sMäõà›Øúä_ͽÍ~¾Ô˜Ÿ5V UŸ!ÕwvK_ =2”y'd™´½„å$ò4ÉCÚıû±ÔšÇ#l48O5YA)~…ì•ý7§y¬¦ ò¼R„„Œ(ËJ:° å¾Å§#¯ï*ÎórzݯðÇúNuBï¯ k cîe{bdôãŠ"÷&êä­ešeòLV9 +0L8Æ6E^ãŒslhô—Oÿ%ŸTÿµþžßkÈa©]|Fu¬ûä`ô1œØüû“5¦ñA¨’ÇZÃoÖ°Æyþ‚)Î>wñ{œáOõB «p9‡¥†xF>™ÜȇQuü;À|ÈRi.*ÍFWü S©šFMÏðI†ïËîb„GêÝâˆUB•æÓd{ïîÜÙÃ'êüèw«,— ¡ ,?VÈ•÷£ÈÃõŒq/ßUkõèÈ]®nÑ?­gë¢æ°>ÁhfÇà=I>Qwô !Ë”$Ü¡E¨@ea»jXãUœâÍìºÏ~ðÇú^uJ®}Û" KÝÆ•ÖÀØcŠ{#v;áGøÈË_ BkP!Wßk|˜3œ}ìô—ø¤ú¼¾XÓJˆ$,µ™ûUjí§Ù«¹¶‡%¬IƒèJÚ‘sŒ³¦¦w~’?ÇÚ={lòS_Ô5ºn,,•áQúxfl”°ãªTúDY‚ÐŽ¼VÃð2|Œ¿fô¡¹ pwHá˜ßŒ{€žÎ=½»;y¬!wðÎ5`‚ ,7µ>;QÖúO«,7¨µµ­ÃÐ=j {¬î‘EÉÙŸ¨Ï ‚Ð\¢ö>ùö°•dÏÈÇP|TÕ÷½I¥øzøcÉŽ+؆ÕÑž ËÍu\÷¥ïúÌvF¸­–Ï6³Ü= d¯ì¹²³!Ù«<Òñ± Ä“Cu¼·“»P¬{T¥¸E G¿°Ô:nR™5ÀGH5l§EX‚Of9VÇ»¯f#©Á¡Ið°Š<ØhUa)‹_B =œèÞÆŽît§<|#1¥¾‘%$Íàmé¬>ârukÜÎHf[ßu|´®'+ÿ5.Za99QוßË-(µîWHp§ê‹öÉU„¥F¸]¥Ö|BqOǃþÚ!žÔ;ªÄ Œ‘¼TÔF]¡ÂRŠ‘¸?5°‰«¾Ó",Aˆ'SU¬«ÎC$¹79Æejw”÷…GX7²>µaðÖtm[Ѽ!žhŽÖ¹†A®C%Öÿ*÷ªmœBÍQÜ…µö1¥î$bEÓˆ"ß"¡-˜¬û¦ÙíäüÆþ;.ü;ù–é»Â>õÒ}·eF×EOåQC# AÚ‚Ku¯Áâ!,Æ´º¹Ê|äÂ@a©.®S©á;­6u³µIë¡ÙÔ/,XÃ.¬ÔÐ=(óVïÁÖ-¤únµº¶2Ò¤]¾Lò„˜Ò˜gï ÉЭV7»Ô Ù;„¥º¹Ne†îJpoƒž¬ü—d´ÕG]„šÐ q@—c¥Fî3±‚"¬[Iôß–ìØŽ¡øj¢¶¾ Ah5j”t;IoµzØiöd¡¯°TתìÐV£†k àz© B,i”°º¹•ù0p«Iyÿë6ýw$²;0NÞ×D››º~AšCGÃÖt;)o±úØ¡ Òå>!Žêe·Êß‘àž¦·”º³Žþ Ahëæ†.®âäØý'¿Ê­|­Zi¿ë6ƒw%2;›Ò\ÔÍF.oúg‚ÐX¬†^··“dðæÄÛTÕÁ¸*„¥ú¹ZuÝžà®eÙõ‘^–Ï¡QŒ6´¯•,Wc%F?Œæ–je+#¬Û°†îN¤¯` i œÿºyDÑ„Xqmƒ×w+)†nN ²EUCÌ#,ÕÁ•ªkè¶åНvsϲ}– õ2ÌÍ [:ÙJŒÝì ÿlo„uªïZ+µcY»0¾«z$(B[ øXÖz+I¯W)¶ªÐ‘WXWÁÀõU5×pä—%—%1àÁ¦4FÊp*Ýs ÉðžØ]ÂRCŒ%G;Ö÷³iYòWÎâJ«,Ahs>ÂÍMZóUÀÐMÀa¥Üí°®„ZõÈÌŸc?ßf¼%Ÿ.B8<Âö¦­}Ï£¶'úsZõêÉ Ra)Å•¨ë×µìì`gyƒœÂnÙV‚ও=Üßä‘®¶ó†¼ñÌ·¹œŸ•qFXéîØžê]» FÃæ~îg–·x—cÌ·t[aµ“f×ó¡eø¤kx“áÏéga ‚°²è@‘êB{ïZt@²+IªÕ[(‚P Hù4lH’A§º³R­¡mèB‘îF{ïZdUÊJgj[« BèÒÝP)¬ŒÕE›O/Âê¢HvùEX(+Ž-aAX¹(V‚ŠfúÅ¡ê%‡%BÛ`Î×h˧AX¹(hï“ÛX ‚DX‚ Ć$mIK„6ÂÂÂÒ•]y‰§Aˆ ’t¡ Q IwAâL²8!æ¡]Pøwíl¡¥Ù¨ íF¡–1• ±A„%BlH¢•VR)¡HbÉ£9‚ Äi‡%B{¢+#¬$äóñ¢,AX)ÄopzS’õ¯B„ö"þá‡Dª„‚ í„´Ã!æ$óV"fæ’ÁéaeãßãhLsXñÒ« Ѻ (W¾ ±A’î‚ ´%~I÷R;, µAhª4kK„vB¡´Ý¥¥» qE„%BlH¢Á’îeAh#,XÒ㨠qÆÊ¤*‚Ð^ȳ„‚ ĚشÖií&´7…vX¢+$àÚi‡%Bìa ‚’ŇŸãj®7ùSÞ%×êÍ„¶Çâ2~»Z½F($‚~Ž'xŒ‹H`Ê)~Ž"ËØÖêM©‘Â0_ñ‹¯þˆsAt%ÑÌò)þY«7£ VX£ñã÷øQ«7Ab‹æ;ä«­ÞŒHBürXoóB«7AbÎû|…O·z#±ç/-ͪ˜U­Ùö B;òÿ°ÔêMd‹Ü,Ú{?Íbaé’Öó­Þ¾ü9s­ÞAXØün«7!KÀüE`Á=ßb;7'aý]«7@VûZ½Ì£˜ŸD{…•d–&{ãÓ†ôƒVo€ ¬¦ÚöªŸG17 ,ºç[,À”£jÖL«7@VíÛàz˜ ¨ê…I‹ÉVo¡1’p„ÆÐ¾×Ò 3Ñ•Ö,\<Ç[½…‚ ÎãGÑÞª_’ ôÉw.çdÛÖfAhíyÕ/0ÅÂÙ™ÓLjOm°¿ ã­ÞFAN¢9¿¸è]bi›ÉÅ‹3'/Æ&™-=Ð ÂÊæ$pòmà‚wI8Oß…wzÖgW«·Ó…t×+«“Ó(޼…®–LÀÉwáX«·²bÓüÿ ‚Ð(¬6üçÐóã™×s•Û ç±ßû)ú`« ‡X`ü§z‰ó•Ë’ Ô¹9uî5öbK«·µM<™ÐN4«½T{žçïo~8]¹,ßÖq†÷=wûž·cÑ¡Z†ÃÜž_¤°:ÑM<Û/Å2Çq'¼Äç*—æ…ušÅw_¸íéXŠA~Ë¡+–Ð>¨Uuê]àèsz‰SÚ'°Lèœ:eoøà…My‡Ý­ÞÞªÔªó°:Ñê]æÂŠÿOí{ÀËßNù--T'Øðæw7}ä˪ã‘M“¯S‰°„6Ã6ú¹^ul?½à“Ç2­§ü–…užéã¯O½gí<Ôöy,«ŽÃlRc·DXB›aÄX6Ѝ j?a½„⵿BsÂyAXuÝ/~ñ¡?øI „UK¢ÐÆ´2™ŒAOX]˜DX6Q“èí6–à N0}ôÕçX¬",à$[ýüâ;ÖûڬŻ—²°¢Ýì5j#-–Ðf˜DXù±âaý‹—þ ›#: ïS–Öê »òÅý_?ksa%kè:_c£ +“™¶ûa±j UˆÃ¢ÄLí_}ÀI¦¿ú=‚{»rÖ~N±õðËoså;\Õêm!QC”C %È´zÁC‚YƒRªPÖœöª¾„â§†æˆ (ÂÊÇX/|þãøc¶‘mõÖ’¬AXù –In*-ÂÚ“mrDV;éêƹtàõï3ÇÉàRîkø4[޾~ì»ïÿ·zûIy»y6`e˜¬ïa mHÊ 1OeT(Ò>É^DÛÏüëðøÊ#,­ÕÛÜðÍ'¿á½þ]lmõ>®AX³(ÃȬ»cË•Jûö,Þ>d¨>ŸÅ" "ÜånŸë,°ÿ+¼ËŰøªbßôEulAýøßß÷/¾Ïe¤[½¾¤#o× EÊHX½Ò¨!¬>Åen5å”2^k¢M”u€˜?ñÌŸc_øw[yudäÍï_qßÚ[_à¾Vï‡/™ÈÖÚ¨ª— ³Õ»'4…¸+®Ó(íž$’í¡«~|ëssÑUv³BX:§ÞaÏßýÛǯy«ss[V M‚c76¦©úοN«¸_ôqÞÛ£ó7…møÓœ§=rXßcž#Ïì™KÕGIö©ÿèóêÄ ?ú7÷þóïðiú[½7tDްl£ª^w“…Õ^ÐXšùív¿™BúÃTYía½ÄQ.}ð×ÿÍ~]õú…ý ¼þÜÆËw>ö Ÿn»œN‡A#:'³( Ãh?z$Âj1«Kéæ{köÀX‚KXØÆ7ŽZÿLÇQ^%7÷å±8Í1}Éä8ø —Ô›\ÿÌí`÷s<Øê}òб¥ûFáo¿QBu]T«©/¦v&cÔKI °é2\g«#¬I¾â{ÿ÷é÷™àˆÉ;´­§Ô»úÊ¿úWÿ?îeO‹wËMWDaRF"RMK¹ÇYq­ÿnw–çÛídΠT†E–è6\gk…µÄwXàÝ¿úÅsÌU»;X$0ÎÔ§TïœþÚ¿üÕó³ä›[ºcnz"ž ˜&ÓͪËCœ'û[Z¢ÖN£«“ h²†©Ö ëy&8ÿêßþr¼£ £°+t?ÝÇÞþñ¿½ãú°¡¥»æ¤/Ré)À6L¦wÇ:šXmU·8+.º(´a„ÕÍä6Zk+Ï÷ïq”¹ö¿éô´é»B„¥µz‹ëöw]Ý×ýƒoñqF[¸sNú"æq–á{ÌîÄB+èÄ 'Mš$°À€Ñ:[aý„ƒ,œýüïÍNpBŸ1_èªÔëìyþK™î«>ûw|’Á–íž“žH‡y Û¸m|o´íouThWzý‘ñ!‹Í =Fe[ÕëeÞ%wñ‹¿7q‚³ŠòÎ*!…žQ¯sí7ÿK¦sû£_çQz[´ƒNÌèE.°@‡QIEW›4¤‹F·YˆŽiS…¦™4¼FZóóø&¯“»ôäÿxú0ìVµ¯ZÒ—Ô|è©ÿïÓ›ú´ACÒt„vX˜7Ó«¦B(Š‹#‰B'ÈÕèàKL]©­Ö›¼„=÷ÕztÙW½©¨ƒkTOª½\ýåÿ÷3© þ[fM vÒ‰Ùc yƱ± oòvÆ:åÞ\Dqí@Êè¡´NlrœcÌ ìòŸñ?g/zîë¿¿ÿu.ñ®Ž|§È(¨Ðêm}å_þÁ£;åÜÏe˾›Nú"DXãÌ‘2Œœº$ÔÆÈwY#a%I1Ï£Çs–7Åcó#Þgéâ—ÿçƒ{™æ]Ãx}†µ }Ní势ý£ûÏ^÷žUwµ´×÷~¦ŒËžaÞ¸îß#ÖŠbå).ËEÃr L +Z¡úXâyN²pêOïôQ&ÙW‹®"ôõ¥Ï«7¸ú»ONž»çŸý09ÓÂÖïÝÆI÷‹L3Çaé^Ö*§Ýgvó²LrѨKðå‹°fxžs\:øŸþÉÔYÎs ze0O„<³žR¯±ûçÏNÿØÿùRÇîkQ’:Ë3F%O3~L!#]# ‘Y^Å™>8ÖÉY4g«>Ÿ’Z6aâ‡ÌrþµÿøO.1Îûµ7úä=«^ãêw~qáêެÿ*µèžá(ãF÷KŽ3CÒ0ë’øJXêQœYÛª|$6ljª‰›5Ë$ܽ¼ŠÍѯýÙÚ‹×Uû¼ #b¤Ô\qrÿ¿óÙ¡îxšÛÙ¾,»ìÝèA£V¿§˜1Î`õ†~yr—Lh=¦4+2Ìq¦Ê¹¿<£,ñ#Ž¡^øÃ美æ°¯o}‘kuzI½Å¦… ŸÿçÿƵ¿ó}kœ[ZP÷Ï’d®J”u‰ fcÀFg°DqBã1€%Ã,ã¡BÊ.‹®.ð}&™?ñäïÞÇLz¼ §†4”ÖVSìøæ¿ý±ÿýíþ“Ümø¨e#IÒÍR¨²Þ"Ç‚qÏ@C-¯¶{ÊWh=¦½ívr–if~®-ÒËr¶íå rœýñù—sSLrÀ´G†0jÌ›ësjšËßyéƒÇ?û¿pÝ×ÙÍu-¸àÂ7þS$ GÒÆb[Ɉ2ÛNÆ ,’ãhE#ïåû†/ð"ç°^ûÏO}Í >hLï5ßèÓsê ¶MñÇ¿wß'oüG¯uæ®¶éÏ!ϦŒÃÞxw,Ó:DqË‹i+M‚IsKK¶Òf/oa3¹÷KÿLJXâ}mæYêh™ mö«ól}þo^ùɯý¾uã3\Á mó<Þ§™6þ‚ûÛf»W:’Û«óf¦9Ö’m<Ï‹\@/¼úŸú ms‘Ã:úÈÇÔyêsê"[.ðÇÿäÞOÜò»owfOK[Á—ÙÇóFÏS J„Õ¶HWÆ\XL‡¡Üfx#Ø\xý/þàÔQ–8¦Ï6öê,ôûÕ9¶~ïé—_üåß]ÿáó7±nÙ•—}\ŒÐGû˜K¤}”iÞ#]'ÌstŸû]b/ûȱ8ñÒzæo´ÍGu´® hHMHŸW“lšÔŸÿ_·}éáßU×<ËznjqG4‡#d°’mÒ5¡°RhVÅ·‹¤a_%hfxoÙ„õ{™Ãž÷ɯüéÂ4KÑÍøœ¥nôÕ8›îýwÿÝwßýŽo|š|¨Íò,q‚KÆñ•¡EŠ)/ÖÛà=¦PúƒoüÕ8Í8'k{´¹: Ì5ë)ÞTC\ö‹ï¿ôƒîùícCÇewK†¯ØÏsƺ¬1èoŸª‚°Z0mØY.q¼É[³À>2œûéÓtppžãL²{iðÍ1}Ng^ÿ­¯|û©{ºî³ã›ž£+Ù¾Ì÷>¦À¸mÕð2FX"9¡úŒSé\àsMkÑ~‰w9ÌØÇ¿ó­/Ü\âóñoj£áw󵿤:Ã:{ôù¯=ÿõo¿í7Ôµ?å6²mû*}ŸI2Æ™„µmݨA'”é7.ÙÉ8‹ìgw÷a‰Ãå,›=ôôÓyæ0Í)}¡ùûß”+U/qTg”5¿xá/ì¸úžO­»û`æ ]lfÇ2tiaóA„ –Åš–ÃÅ­\ÌÆ'È¢˜ä`C…es‚#œ"Ìß÷µ§¿:; Lr:B¯šuÑ´ÐBç8©N1ÌÚýoí+Õ}ç½»fÏ^µ—~Ö°Ž5MŒjÞgžYã;½Ò–(.6ŒD(›æGô¹3œ`œq€ÅÉ£Ïý䙽¯pžÓÌæË(Q•ˆJSëBZsFa€áEûù¯?ÿõ5w?¸ë!kË$ï‘`ˆµŒ1Ø„MØÇ%´q„5ÜÖÂÕ‚(ÓŒa”ñ˜×Ìp¢ÎÏ›á<§'Ÿš²Nýä•o¼ð‚½,pžs¥§± ›/­æ_«Š \ ÉC§Ÿú_XsýMÛn½a¼?ß5N=ôÓK?i² yŽü “Ö3&Š%«ó!Ÿ˜æµ;8Í4㑞ñ]`‰f˜â"“LQh '|ðó7úÚk¹y Ç\‚‚;UéoÓ¥¥šÁ©ò9•ŸÊ0B_!ô±6ï¼ö¦µWõoí\ïvK‚©º>÷INÐÁZÃҿƶ&Ah,b|Ÿp‰ý¬án.7*m³XÑ(uizêðÄÁý¯üìg—ÎcŠ .¢ažöÿÛe5-¸¨ÀÇ9N’^úè=¼ïð>Xé ›¶lY³m`}¦'ÕêNv/uÍÕÓžFa}c€ 4™.ã‘ÏA‘&µÅÓÚ´1ñN$‰5NY –25”4A3–Þž2®éfékèÇ Bó1ÿ9†,éÍ HªÑwÜB®ÿF)«ù Œ)$0íd,½ÝüùtI¹ ñ#ÊlÉÍô8ž>«¦®æI¬!4PXUZ{5ϼt–ž(¬(Of B{EX$†Uwé—Ùä'ßtyDc5'Âj¬št„é1«?1l2KÊ]ˆQ6dHÚTøe®~%-OÕ±Úë™Ó(jòŸKmKFHJа„øå>!dHo©¸OX=ÒjSu-§°µ³a>R+%­°„MX¤¼i÷h‘V[©«9Âjl5¯rAKRô§#d°d¬!ŽDƒ ƒä&ҥė®CW˰÷¡ùVýÕ<¿ƒá^R|5¢ºkM{r—”»O,ãÑ :±:c…´»ÿuã&Âô2Ç_ V] ðÍR5­ImO(ó*áòõ1/$J7ã RùÆ£A‚ª7x¨enÍ4+Âj\5O/ÑÑ2X’râJ´q2ù,VÓë+ÊtU¡5æ‰Â† K7²š¼$èU‚ÁôvóÇž-–S¢4l€NR›é/<þgÕE)QÍÌaÕWÍÓ‘_¨ŽäFóÚ}ÿ +GX=DVÉu*Ë¡¬L3]‘2`걡ÁÂÒ¦Õ¼àRµ¿Knµ,ó{„òXŽW¢6l°¬äeŽÞôºjX¦«qÌ4<Â2V–™À*_¯e,)ƒ%)w!®Dm?èè³!Jà¿$²ÆÚº?¬*ʪ¿´Ôb$!ƒ%)w!¾d"Ž¥™%½ÙS%lLœµÌºjRKkÝŒ `øÒA²©ÍæB|Bˆ3Ñîv’ÜBWi¨N]!¤°W¾ò_â˜ö˜ 4-é®kSЫp‰%7©”yÊ]Æ{âLO¤ÒX}Ö@¡-V£¯L½<±Už&Þ%¬ˆ³š[•_¯ÉlÏDè&"ZÚRÚ‹h÷ S$+ÛbÇUµËª‰±Už&z¬µ«³ë™j¯¢,UŒ¤wD©Ž5wÇ¡©ôG,Ÿ!½u¾²“™Ê× yÕ¼Áê—a”v­]]w™KËDbÅ×dS[£Òª–P7;œk¢AXt¢:£öHrÒVùèɦKƒB“S …fTç§æT^M «ðWÑzu5IXŸSÞJ_IN¥êŸCT%…9…Uœ‡JþΪ|k5¿ÅFs¡C÷§" ž*«•ü€_ó#öûiV¨|³ ²è*DT‹ª(§²¦¬’®–< Kð¥9ËQal¨°Ê)ôêñ”[OEuåW–{*yué+Ÿ¿Òj~ÔêMŒHKª“%½e~$‰"WÐt:E¥U1®òZ*LYÚ*jM' S ý›ªù1WC„U•V¹&ˆª8v1‡…ÂF‘C¯ÉlO’^žï[bMÉÍ L&»s»=-¡JòqOYU§,m©\AW¹eWÂúœÒØØ>÷ûlì -UýìBfªRY…ˆª$*­J1©¼¸ÚKV+$דê;]ЋV òU:*teƒ#’ ›Êë*¯°ü”…Ò¿YH×7²ªX£°šSÙàœWhºPœƒGZ3)RÛDX‚`BÊJ^¶4’wFT ´]Œ³´*Lå´…Rviž2e祧­Â{¥µØ…&Š·" «]T•Ÿ77¦ºk£Î)¿8ЬBk&/SIi4*Q°H“Ú¬‡Íß¡•÷ªv¦hœaг„.i°¨Øåh­lGdV]Y9¬ÇK÷íʹ²pì’aµÏTy—P•jòGù,uÌÓ¥¬Ÿ.ÆXJço2–Þ¦8Zç×'«%Ò[æ†UE¥Å¨NІršçø}åñeJSªØï²]@Æ$P©VÙ“¶c^ÅfUßrUÖŽr¼Çona^þfBáv„*ªp7Ãý_þìÈÒø¥o^Raaô}O:¼¼ ]êžm+T•åáË|–heE{n5Úº•ÏBœ_¥6(㿤ú¯nµÕ·¹–}¨¶¾*_[î‚îNw/Ö“¿«¸v¥}Õftjhך‚VYm«ðä{M?;£"—€ 9”çN)9æ£$ ­Ö r*)ª°ð´Î“Ê#4å;­ÜâÒŽ“¢t*ªâÉ^8ɧc9v*«¨Ð&ª _]Y])gü¥KŠÒi?µ¹ã2§ÚÜ¥)}¾ ÂR”U帖UåÕ ý–f+tVþhÙCeù”ªvAYùåùU9EUž[ž.Ù°¬:G‰Òw”ÿòT©„Ë´ºø²ð;§Ë§†v×gËvz¼ªR 6øÿųÆixï+Bþš Ê_Uù)Û§LМà¹Ñ1¬ê„D&á 3ÕUEQ–¡¨LUå‘•SD%A…˪üê˜.ÉÊYtKLùèÊ*•Q®©RxÇ4…÷9çæ±|4§\¿ ÕZcù¤ Ê-ÜÝF‹¹}»¢EesÑ ÖÎVYÞû ŇsÊs)•¦ôÎR$U.£\磡©s®;Ö2ˆ¶‚ã­°ˆ«‘QT”U]Z•¯ªeåÉ­amù+¬â2ÕT­¢òª|TU!.wUÖ“¯¬œU¾ ª`I5å¹n‰UÓ•Âò[ê'«0×1À….÷_ƒ°ÊOú·Ä²Ó.ùx›yÚc8UålJj$­ò|¯´ÊA¿ ¢K[óüÈ… I^ú:HÕeZí ¥£*Q™”1ÉgU‹®*çD—Uô,ŠÆJk ÑT¥ÆTª «ü«á²rÇV•ŠrÍ/•VT¸®‰Hº Ve”UnÙ^Ñ|Ô§U«WT¾ K¥¥=1•WIþ±Vm¹_(×Ùç:£ü#.?éè`5Ô¦¨ZT&®h¹«FÄ[Q²Y­·ÂÅåø4ï á9`U¤æÀûÇTAQ•‘ª\Y¨r)·Äü²V¡²ŠgY®ÅÁ¢EWî#åáqOCúŠö©žèªò“HË1åì¶ÏGÆZÚªo¹+“þâòQW$yèËuFV)á¿Ì\UæÕ¿æU M³YáâjŒ¶LV*YqH·Ò*+…~©v¯¨ˆ¢üåaá¨âhºP\åÔ ÖVYI9‡v¢W ý#®r,åJºûªËÁrW½qWPäå¥Ê1~EîÖ¦wœ¡á óœ¯ÞùÕ®I“o/’„tMïªÏÅ}3CvZW[ƒŠ°$ Ý°ç+ T¢Ê r穼’ª¬ô9â,ü4å­êùUýÜ•;·SQ%ª*¿§qªòû&"‘וDwïY¶YŒåûªMy¢,Ç´ouѯÂèW¬ˆ¼*ôåÎzÄ_~XÅ5ã>+j7AÙÞð:é•^Ç·ìÜêP׆¨(kÀ—zUœüõ ¨Ð(Ê[¬Œ¤¼’ò¯ôUFS®W!Ú*ÇWåØ«Ú«âœ„k-–c™³ظáêë=•ݹ­’ž¸5æU•3+UYy+ŒP)/*"/¼Ë+TTQUôÌ © J,Lc¾ùåjiÓzÑr奚‰iDVÅæ¡íN|>C,©TV¥žÜ‚ª¦(wåI¹%接¼•>¼Õ>wbÝ+­ÀªòU¥¨Š¯1  >컫ÿ¤|¸¼UE_¹£'§ÊœFO žJc±ëAolåÌ[¹T…¯À"°ò«òÚœóœÉ]U”wM+ßòÎ’*j¤¶¢ž1 1e„ð?¥]ïóŸ÷‹¬M9ËGÑ“WPîR•Šª”X˜¤|*„Þè©ð •*·XAA˜¨hpLeòíÖ7â*kÅ£*‡È¨"+w †OÜåZꊼÜÕÆâYg{Äã,a"0…ÅaŽé@‘Ud»\˼kó/á³Äŵ ÕOÐàWA%uH‰Še¡+¼rЦ'ߊž÷ΠKA•qV9VòJÊùÚi9£)?Myc-gŽ G:WDEEU:êÍZ{Q\îGŸ×Y¹RïòòF^¸–ûéË1¯RNžD{¥ÂB%ª±5ùGj!ßSh²Å‡°zAé&`Vµ«^>(Uþ%}•V%W•ŸòW“¿œ ôäŒÇüå/1oU™Óò«–5,-wäe¹«„ñÅ©¦kÊñm4ÿsÊ1êrG].AÈ ß×TÎñêË“çò˜±ÂÇϫԘûJ¨Œ±t€p*ƒ€Je©Tð7¸D—l8Aw Ë–ç‡ÊÍ{ðc/ŸæžN*ÿe5ùË)LOÕåÌ?+ OuÏ-¡jÒ*‰Èi¹[R¹4Õø Uu–AXeó*b,oLæ/¥RÉŠwV”õIÙøêʱaeM–ÔV>ºÛ”ÙÏn(Ë·ÒèX`tå–R¥–‚ÄTþRÞwùhˆŠL–SOÁÊ ®ìSQ–kŽÚ¡+Z‘•ŠFÛ ËŸ¾Ü"ò‘•¯À*"©y^‘UFX~,¯–|#/¨H¯WD[*@Tî²>   má(ß(]™–Ž*­ªÊÒa¥}f[Uf·*•ä{9µä#&G«ò¾K<åýòT~+ Ê{YÚSÆ!»¢¼Ú/Ž ¦Í…åæqUŒ²¨*0ç\GOñåe¾jòºtåYâ¯2ÿ cåÒÒ2G ×ÇÿýÖã-ï?'¨¢þ®f¢ æ7GEz—WC~9¦Ò’Š£<å‚â+§–‚Ĥ¦ 1U™ëžoio¹ü\¯ ÊwÛ·¢gN¬„åÅ-°bÊöˆÈöTÜŠQX°š*ä ¬@]•ެߒòµáU‘óGÞ-(_]ÿz®U:å)[5îò}W ßU”HËׄ–\¿·Õ”óUÅÿ+tVa¬˜ÒTÌu/­.¬à OõŽ=•”䈠â/(/±V%A ójÈV•ÊÏ7–é?¥9¼Gd¾•>¿Ëó½$ù}Ë̯½ý»ßúk]YàÃÇë÷•—Adå<¼+ÿßGIARªÔR4aY>Â*ËÉ5gš~%ê©’&¬J/)ÈObÎÿlðÑX1 ±¢(誃 PU…Ö‚tåùë“ת–óÅ8îªV¢º¶ª”ª:íÍXUJÉÿ¯ª8pþÊRºr«ÇWZÚWcÅä_´*KûÈ)nù§F°â…åÏã%5UÓØ¥3Ûï?[Uˆª<¥|敦̤孴ÅYî"º®ŒrX5Ç`a«õ[© |¢,]¹¤Š°\º ü¿®‚â«P-•z RSñuqjµÉÉU*,W.M¹’è^••ea'6 RµH«²™„ó¯ïEż ,XÐë yBÍ ’WeÒÜ97(Ë¥<ïðËWEÑU±¢PUmá§2 ¯êVoÔ–+—¤Ü Rvi™WMÅø+¬rèì9"<_åÛWè|î7ú¿Z~]å©_…Æ[ºrn5eùËÊO]ne·,Ï\‡Ìð“’h©DXuó¸òÄ\x…V–œßÿËUNÿåî¿vEä^=tMÊ«~]¹ËF©;Ö ,í·¤JpVÂÊC^UÈÈ#4ÜM½J’J\ãa-« EQ¡&Uœ_-Án{R6Õî úMÛ#Ô®«ðRfâ2Q–¥ý–„'á+æ’„Ïø¨È)#ÑQ«aµ^µy%æù«üJ˜&Ú ï ‰ºÂæ6ƒ,–†¢*ü–W»oXxgPÇ0ø)LDÔ¾ˆ°bÏãÞ[dŽiÛwnå+ÇClš‹å᪴• ÎcY¾óóS¢ž•†K0âñF4ip *jáÿ+Úíܰ¦zIEND®B`‚nixnote2-2.0.2/images/public-notebook.png000066400000000000000000000025071315604104400203320ustar00rootroot00000000000000‰PNG  IHDR D¤ŠÆâPLTEPPP]QÆ,&g€€€ÇÉËÐÑÒi_ÂXR___„栘ꨠ뉃½Š„½­§í‰‚½Ÿ–ꗌ쑆ëÿÿÿ¨¨¨[\\„ë–‹ìh^›‘혎ímlp¢¤¥‡~Ôg]Àší•ŠìutyYX[…{Ôf\¿uÓe[¾“‰ì†zéxmÑdZ½~qèpeÐcY¼‹êtgæh[ÏbX»ˆ|êl]åûûü¹ÃÑ”³ »¿ÉÖâäçýýý`SÍaVºƒwécSã–¤¶]t’Tj†Tj…]t‘´¾ËÛÞâ^m†CVsEVs€‹XJÌ`U¹sèZIáfxUi†Ti…xˆžeq…4C]5D^4D^7Hb°·ÀPBÊ_T¸{nçP?à{‰œRgƒz‰^iz3D\3D[3C\˜¤H8É]S·wiçH6Þx‡›OdOd€w†›q{‹1BZž¤¯@/Ç\R¶tfæ?,ÝŠ›Ma|M`|~‹›ep€0@W’™¤8'ÆZO²n`ã5"ØóóôFZtI^yG[uåçé²¶¼-U,9OÝßâ0ÂVM¬j\Þ,Ñgu‰G[wZk€+:M,Nd*:P*:O[gz#´OEŸgZÕ&Ãøùú}ޤOf‚AUpBUqAToMc€Yn‰;Md'6L)8N*:QIYo«³½"¯KC™fYÐ%½ÒÖÛ=Rl>Rm>SmQi'5K*9PÌÏÔ!©H@“eXÌ#¶=Qk=Ql=Pk@To&5JÎÑÕ £D7‚cX¿“:3{80vaW·— ‡5.p`V±‘ ‚1,b^V¢.)Vº‹- tRNSŸã,<@ï(c=„ IDAT8Ëc`€FnFŒ¸y¸Q0¦^nŒ˜øøøøøQ0BŸ °ˆ¨˜¸KK ò!)’–‘•“EÁò H •”eTTUP°š’"Bº†¦Œ–¶ ÖÑPG(Е’—AzRºú† Œ ô ŒåM0˜Ê#˜™[`(°47C(°²¶ ÙÚÙ;8i'gk+„W7w ‡§—·¯Ÿ@`ìæŠP ˆˆˆŒŠŽ‰‹O‘I A(HJN*HM‚ôŒÌ¬¬ì™Üä$„‚¼ü ‚¢â⢒Ò2 (—‘©ÈÏC(¨¬ª*¨©­««­oh‚&™æªJ„‚–Ö6 ‚öŽÎήîžÞ¾¾þ 22[[ &MžòÙÔiÓ¦ËÈ̘9k63gò$„‚¹óæ…,\´hñ’¥Ë–¯X ä­š7¡`õšµ2ëÖoظiÓæ-[·mß±s×n™=kV#ìÝ·_æÀÁC‡àБ£ÇŽŸ8qòÔé}{ Μ='sàü(¸xiÇåËW®ž=ƒPpíú ™›·nÃÀ»÷î?xxýBÁ£Ç§1bóÉãGOŸ]ÅPðüÙS„‚V/1¼²zPðúÍ[ ïÞ¼F(xÿáãÇOèàÃ{¸<óç/ØÀgf$ +;çWl€“ƒ‹ìDÕÄÛ’ŸIEND®B`‚nixnote2-2.0.2/images/purple-theme/000077500000000000000000000000001315604104400171335ustar00rootroot00000000000000nixnote2-2.0.2/images/purple-theme/home.png000066400000000000000000000022161315604104400205720ustar00rootroot00000000000000‰PNG  IHDR#¦=§*sRGB®ÎébKGD‰ÐÁ$_®Š pHYs  šœtIMEÞ*‘’°@IDATXÃÅ—Yh]EÆçœ»äƬ&±Ñ¦5Kc,FRSlK-*E¢¸@û¤¶(}ò""úfRA Õ'AÔbhµj“Ô‚] ±Rh’ÖJ“¶Ù÷í®9ËÌøÐs«†ì÷¶þáãÀÌ9g¾ùÏÌ÷Í ðÿt¨å¥ÏÞ>¾ ðð?†dþqìÆo×ÏŽÏko¼¯ óa?ùéÅ)K‘Õ bYíõ­~Ÿ¿H˜oŠf•îÊÛŒÞ Ó“ÿþ`ýYkqÀZhf« ÓY?Ô­ OQdÒd6b 9¾®3c7Kr*7ë‚#&Sƒ±ÛŠÔÅÒ¼Òð>”·¥ðÚé±A'FftÆÄ±Ž%0Ã6ÁKoªû¥£8kóãVÌÁ Û˜a;*r[ª•’ñ¿X±¿ê䑆k3#¦ š[þfÄfj(Jý×_8–¸Ýn›N|iõÅÒ½ÜH©yî`õ›û_;>ÞB:jÁKb›‘EßI„Lê§oýP³cÇ–Ú©Þ0Î ÐÄÉh@ÚÑš?/,Z÷êä@%Ôªv¼’ZBdt ½á`ûÏiÛ'z# ‹RyîÓ%ã¿6»“TóiÅBD²O}|¹Íg¤<!…L»Ÿß½KNg^¾Ôwþ/ÀYOnêúüS‡ÛºÍu_p2†*)ˆ…l¶o«zy¿¬§ùjßs Í%ã­,x¶äËvOôÇ|¡É(‘Iƒc ¢A‹òò/fn=wåD; æ#ã«.£â@Mí¥áëA-:3‹*é¶$4£¬´´ºøÞÊÈù+'.Æ3¤¹„¼Ï”íÝùÎëï7öÍ`Í:wÜa ]'wmÝí½÷Í+€ˆæºjÖ±wÛº¦‡£©ŽwÍò ]'å î=´µ0?3ÑoJï´JJÅÝ‚’Ã'k?ŽtuÓàò€ª4OÞÖÙO>bhÞÀžmûžòy}š” ]¿%XRþ# º®±š>GØê»–¯Î8ÊŠvLœn7eèw ñ60 t„±pëØ÷@þöí´lçÖóäXÌy.·ä…ѺF`nS€ô¸J8 ô¹¤Òa»9âhº _¶âv Ü éRJ%‘t2Rê u3c/åM Pq¡Jv¸ÿTóyÓ‚FéH‰ÉÏŒ#•»¶G&Ï(áY1e !W{wY,l±°ª \¨²¬Y-» £´B*E2q¶ëÇ#}¡ÎsîÉUK]È%i¬kœéíC)’…©žþæÁoˆ;Î²Š¸4  Ø <Ü“`Á§\=¹ \®º²,2<ä»dŒDN´›a`Ð;±’ò6î[~·~N436`ºÂ:ïÉø‡{oËëž[IEND®B`‚nixnote2-2.0.2/images/purple-theme/left_arrow.png000066400000000000000000000045021315604104400220060ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎébKGD‰ÐÁ$_®Š pHYsÈÈý×;tIMEÞ)§óçÂIDAThÞíXkl×þνsgöa{ñ›G ¦M0$ $ áÕŠ„ÖÆ@‹1U … Ó† ¦)ü‰ZÑV%(U¨ÔäG+%”„ƒÚBJh j b(ÁŽ1~`¯Y/öîÎÜÛ3kË®ëdžºRG:š™;Ww¾ïžïœ{îþýw/º—?[4wÉHó®—ÛªÞÛÕžŽ1Ù½ÿ9˦DÛ|E‚ØlAŽO׸÷„@飋͛üäü¯=‘ÃŘdê†@ÉÌŠMVH¼¹bå cÆü/3`ÌJíó¾²lhm¾*ÌŒe«6¬ÙyYÝßLÐÐöÀÂÙËsZÚßËóŽ,ú'•†/Óƒ«—êz~šF ¥Ýes–Ž‹Ý⇋¿øPaÅê2½ýf>»z\ãv¥hÈJ¨tÎÒ¯F[õ}sfÍõÌÿÖcüúµf´Üh³ó5 mÜ&ÑÐ#P:³âûf«öò²ŠrmÒŒbª½Ü€ö`ÇÝÀ¬!$¡Mk·° g?~‘ºŒ¬{úI1¢(ÿºTÎpç]}¥½t¢l{Ɍﴑ²/b$¡”‚RR)RJ‚‘²ÛHJRŠ)H¥©œØý»´­Ä g/ÏPö§ ‘;·ò™'=¿ÚšëˆFc–„” ÒR–„¦k(ž8çOÕ ãVJJH(){ž•„’ RJ(çnó…:pþâ™ÛÏ¿áO‹Íýæh3Äñ…¢U¾mD»LÔÖ\‡eZIûKK¢µ)ˆá£ó T”Tx %•Óf¿K%!-ûY÷DÂT_úH¥EBe³Ë§Eƒú_§N™žµtÍ-ØBSÃM(•ZÚfÌDí•ëŽW¤=»ÎÝrˆX–ÝfI»]J iIäåç";7ž(U¾4Ú&^+[\¦Í.™ÆnÔµ ÔÖ"²˜"[ïi[­R)È$3Ô/%3+ž·ÚÅ kŸZ£›<õךЊ€ˆÀA)©"ñ´ùy^}"°pÎrþÝò/Yÿ³J-oDõךíŒuƒíî¼sÅ H¦ÅÔS7ôß‹ç­È‹…Õ_ ²F=²~ójCÓ9êZ`Å$ˆ`IJââ0Í´Ì´’ ,I ¥õ¬K'DÛqøKã&ç¯ÞT.:;¢hjh…RªGëÎ3){x"ۓЃŠҬ ¨ÿ*™Uñx4È÷.X°ÀSöÝy,ØB{«+Xɘq‚²âÀ œ Rˆ4!`F­Á{@P}”ÐÂG+VÆÚø«ß[»J›6ÿa´Þ"ŠØ³nŠ10%!’œ‡ ‚YgšÎí’ƒŽy7þäå4‘˜>lX®ÿ•±ˆE$¢Ä`K…Œ1pf“ Î@ŒÙú'#c º®Ûñ2øhV}" ¸¹>¬n¾òÓ [cMµ­È™!4œ<Ï<.BÌ‘Uü™3rg0{òÜöç~º†ÜÂ1pb î’'»-þÎl)1'vt] +Ð?äD/(¨:¾«ù6‚3ëZ/ïÛòãí‘Û¡( Æä€ æÄƒ;ÙðàÝ}ƒÐ²v½Ô öTâÈéý‘ª÷_[’-¿Ú²q«Y_Ó„á÷åCaå=D¸;>ˆÙ2â=’Ò=:ÙYÐDëÉËH0ÕÔ?úà~râÐéEÙ#Xñä"ŠuÅ`™ÎRC΄)@9“̃?Ó Ã†ëÃçó +; ^¯Bèðú¼ðùËðÁï÷ÁŸáGVv&̨…‹«Ã—ÏýzР¦¶ú¸ñžùà\¹yKӦ̚À,S"‰õè›Ð¹ À¨±…ˆE$ã Œ1pÎàñðx= "hº¡ †]CÀ2%šn´àÓÏ®†¯4žÛ–ÖÓé¯Ï+¿ŸÝ2=" E ([ÎR)rp‘ #A„œz£4íÇëO_’)”ooaÖ}­ß¼Æ‚¡¹¾ ¦eÙ›z%!t‚9x¶òyx󻯼sôíº!s´xðï{CÌc=Ñ®{åç·Eƒ7Ã(,ʃÐ5[*N`+ço1§g“γѪc»¬ýï¿þT—|æÏm5/Ÿ©Ãȱù0¼ºSQ·»”5äÜQ~b%;~»óö±ªåð1yðgøìú)^ÃGµ!çrÆâ´Çw‘Þ®éoïÝÓ¸{Ç>3odÜÌîUgW§³°>y?rg$Óó0íJýÇ!Ýov´…çÕü³>{ê쉜áݪ#¸Pwú7¡Îvæ#>&w¬Ïäx/€5`Ãõ3ÃuO´;È4·7X׃µoù=™üãXuQñCÅüÄÑ“¨i<»3fF˜ ¼›„æ27¡¤õ%‘O0–äÙ}w¹ätÇøs'–Vú(§Ò4MväâžGL+sYN¡à6ËÕn¥x—nPs-Á‰¦'Ì^o^1Ÿ6~r6ȺfFärÃùã.Éh)&ˆõ2Aq“ä’w ÈæI~Ö—oñŸÊ$³™ÊÌ>¶YL-‰¶”ëî¶dmn“ %€r½»ûÄMõÃëênÓ\ŪùŠq•D§‰îæ©b ÙızÓ~2˜©j¡xÊ)‚–÷¢O–¤KåY·'R‘qßchÙŸbŽ’d&7ØTÁÕn"*Erg¨Þ~pP–˜6©"‰z–½é×™ü¿…ŒÞ‘ƒW”IEND®B`‚nixnote2-2.0.2/images/purple-theme/notebook.png000066400000000000000000000016701315604104400214650ustar00rootroot00000000000000‰PNG  IHDR szzôsRGB®ÎébKGD‰ÐÁ$_®Š pHYs  šœtIMEÞ)3Ø’ñ8IDATXí–=U†ŸláVÆJLÈFA"R6Rü("m‘D|Èk7K•-i ¤à# ˆ"$?€í²Í®‚‚Ò#6JEˆ¥IÃj%„CÖŸsgæÞs(fl²’—\{|¤)^K~ï3ç=gf^ãšÍæ÷kµÚ;ûûû?ͪÿÏ;ôh4›×n¼O£ÑØœGXª¼^HŸTÁ´ß»òüÏ7íé c=88ä|ó ïÇò…ó3ëqý]úç`ïÉ™·_Iµ¾ªz÷3Õ_ïª>ÛRýzû=·²¢·¶ïh÷ê­í;^ú«íïõÙ–ê/·3¿õUUïάÀÓ\¼ «¼ÅÚÚ—8Kõ¸ÄY/}™s\¼ OzP[™aTayê•Lï=~ĵë7Ø{üˆajfÖæ7xc9óõÉu¥²ÄÇ?S©,¡èÌ:¶™Ÿˆç~ø®êǛЧß@?Q¤¾ýè«po ü;³4µ # å‘P¬Ž’ÌO¦MP`Ëh¬‹!ôâÌošK餦ð¼Ôê¨*»»»3Üjµ2€$ó›6'D ˜(¤XϵÒ\_Ÿ@ò±¤•?Tˆ\Hw´˜éˆÈUÁ@L “eT•™n·ÛDvˆ‰«ÓÎ?@•ÈÀ0é§Q •›ÍRã¾ì€Èd¾^‡qeFI7(Á(íc\æë=„IµC”ö&)A"=’jÑSžÎÔ1ñÓ Àx¥fŠ oyœö‰êˆëù¤.!1Ç/²±í˜Ìׯv€Äu$N¦©Hê g¾^V, éB"@SÜ×çuì\ 0ås•ZHr_¿°ÿ…"@R°¹¯ßF9@:ùDjÏÁäHlîëÕºÙ ¨=žåÜä3@×óQìJ`eÒ (Z°’ùz=ŠÅ€“IPh·ÚsÜùKp’ùúÍ€§ÇÖ°ð8Í|½ˆÁ¥€%Xú$*¾Š.Í|_†a]¥O§\¯~ÎÂ*NQé†a]D:/”Â0¬çW-‚’‘ÞÑï¥Oj,¸Lpå¨\._VU+"éü ^òbMçÆIEND®B`‚nixnote2-2.0.2/images/purple-theme/purpleThemeInfo.html000066400000000000000000000002371315604104400231310ustar00rootroot00000000000000 Purple Ubuntu Theme.

A theme designed to match the Ubuntu Unity environment.

Graphics Design by Lexi Shriner nixnote2-2.0.2/images/purple-theme/right_arrow.png000066400000000000000000000041451315604104400221740ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎébKGD‰ÐÁ$_®Š pHYsÈÈý×;tIMEÞ(!òzÒøåIDAThÞÕY[lTÇþæÜÖö¯maL‚…¹ÛÜJKÓ4¢¦ØE ©/Š5k§M 5)Ú&•ZEêKÚ‡JíSŸ*Uª¤!Þ6„ÔkˆBÁØ ‡H¸ æVŒÁàËîâÝ=—™¿»^Ëžµ  FúuæÌœý¾™¾™ùG†Ë©¾ªñåe WÆzûN`s³±†?Ó‡‰"Z.Øè~Ø$—Û“ nS}¾5ªtÔW5~ï±$ðtÍÖ¼m«&"žuëõ8@‚Š'ñú/_S<–ï÷µÏ4ý¹¡Æ/=ú(1`àâ äåçâ7_Ó µÒf1.jüy… ‹sôõÀ´,üìÍW=e³—lä!åÓ† þ9 $‚ÿ»±á0šñ’ö¥ŠµË­òEýÅ#íB!‚ˆ†® ãÚ¥!¼ðÃZuÃ76–ÃòÑúoú«ÜøK%£žWûçg•¶µ‚¥­,Sà("A0€Ãè­0 ÝDuý3ra±Ï»ëÃûëª_n?Ôp+{… HL0ÆÀ˜†DžA’$È’œz“CÉ$ä–z⌱"!  ‘Ð8Οêê§–1_ѵåíÛëÖ5.hïný£«+ñw¾üý¾ÚMÏÏ_XQæøÃœ<<¹Z ½!I.žéÇíp Éj€±Ô7²ª`áò2D†Çñö[-Fœ…ß–óÄOÛ:ÜUžWAD q’ªð@Q•dC,Õ"c°‘cɪ;SN–æ/xç/ï¡øP‡”Ï_hëDݘĦa"‹AÇ¡Çuè†Ã0`š&LÓD,ÅÁˆŒEÀ-!8„‰9T!Á ‚‹¤ñ”™ÜÂų}У:¶¾±Y›7{Q )‡ªý¥3ªBD„P(„ÈíÛ\€xÂ÷'Œ„€°";1BÿåA ŽâÛ^Ô–/^Si)_ÔoðWθŒFBDÇ£àB¤zœx¼P&»>p}çðüK›Ôu_[ŸÙõþõH€¦M" #%HH<-~Ç…,~÷»ÍFnŒâܩ˨zöi©®¶!ÏUö×U56ÍôJŒp8Ë4ÁE¢ç9QŠPÊîA‘P§?¿€Ê5K˜¿©I¡ˆçݺu¿ž>vÝo›‘p$H(éJ\P’T&—¢T}l<†3Ÿ÷bÎ“ÅØ²õYÕgý®öëMm¨ñË32`™¢ã Wâɉ<3u=ÇÏC–üè'›Õµd³¸-ïi¨ñ{g„Äc1Ë‘'Γ&l¢>ù½iqôž¹€X4ŽW^mÒ|9¥Õ"ª´Ni+–Z«H^c±8rssîZ3É©ÛĽ⑗Ÿ‡ÂâY8º#£C’ìãû¦FÀ¥dTMM왲Å„]û  °Ø‡e«âØ¡S8pp¿¥‰æöC­-3Jt]‡¦yØî4j‰gÉÜb,®,GçžnqôÄC+ Áƒ­ÿžòn`äæ„–e9±£e“¹PV>e æ øO¬ÞË=a­˜o vŽOk;ív2 ª¢‚&‘ŒEK h¶¿d^¹2 ñê`g oÚç·SbAã`<óH²„e+–À“£áý–ê¡èÍSŠoj;˜4º7#€[’tï(ª‚•k*ašv´´ê:"{åþb[G ~ß'²;ræ^䑈À9Oœà’É“ãÁêµ+0:®»LÊÕÿ&犟·uÄ)'ÄXÓ4xó½÷¹ÅÁ9ÏH¼ù^¬^»ý¯aÏÇAK.à¿ÙÝÝúWÎÄé‰ò9x¢|NÆÝ)9i Æ$œ9Þ‹á›ÃÛõbÕW*pòXuìàj‘ØÒ~¨õ=×õL¦ëÁö¶Åh¿UÅØÒ¼Ysª/)-AÅêEèÞD;qDOjü>W£²×ª•r±ÐÖÙtWÇ3Û;ÙʳŒaü‡xf.›?åKʰ÷_Ö¹Ë=!­˜+Ø8ézX¥í@ àÄ´ïªý…Nu‹—-BÉÜb|×n]¹ªñš`g ÿ¡¶\5J*V.E^~.Z·ïÔñ›'®í@`ô¡EæÜJϹÀûïâ:"ŸÈÜßÖÐÕànJ<š†5O­Bôv­;F\ ¿%yùwÝÿ # Ù⢩üÕÁþœeÂâå¸tö vïn³àÕûñáþ 'M&L¤=]#0ÐÉî"0Í/)NüðÔѳÔѹëêØëŸíùÀ¬ ÀíDZÞn|:Xò¢BN‚“m€ålDâzÔ Ÿv~&Î^ì1FøÀžî:œ¼hž!ÏmyÊDÀ\Î@BÎBL –逳—zÂ}c§·»zòÂ$à…P;`ž¥Œ˜Í§eS&!“ªc`ÊW—V}{`¸ï¿ƒ#ý·Òvƒ”°°lfÙßSoÀn”KS3Iy¦2SqPÉaÈYãi½L¶^eÚçü<ÝœæÊ=eŠ-.@i6™¿:Í»¼"K{4‰ïgs-s"–Á²¨’P΢D, ¿röü+äóù•vzff†|>¿²_wãѶ€\v¤/Ý-à=÷ôÝÛGìätõ?´Áñg¾ãï_ß`Խܳ®ÖݲOnü—¶ÌfûŽ9b'§_Z€ücpòa¸’ý“¯Þ»ÊÛ_<ËûÁçå[|Ù…~ëãçy3·ÿ…›wàçŸFyêÃ[˜Éé À£'à÷-8} žà œá(ã¯ÂŽv¥Ÿ|d”Ó—à·=˜8‘ž°&£ cc0•M\»q³çÎsíÆuÊIسÿ€Ãc JWLF\a%—l6ÇÆÆd³9íYG6õ¡+Æ{íqÕ‹+°U†w>…bìÓO}öú(ùàۯᛛ~Gƈ‚oáŸ{éJu/NýD[{Õ3F?‚ Ú@-ìE©Ÿ¶ñªgŒ”Ø.VPe}}½ç/--¥æqê'kkk#*„A†½ÊD•Å zn@4=m)±„AT|š1—a×L¥Ä'pã ÒÒ«ž1*FP `Um]7U(l™0GVWW;2FU B(ÇE`–*`/U=«oKaz—öû4cŒÃºaüx·Ò@øI‘ÐõôªgŒ¨;’½ÚôA,{ÄD¥eõŒg ÊFÛµªëÒS•%E‚2ˆ³ >Í“¸˜8„(ÚÈDv‹8„ÄÅ(^Gƈ-!Ñ—k7¥ŸÔ…HbK¬­^íÈ+d   XiA=“q.†Ë@J-Äà\Üc¬„`ï7àáõ’€+!ëkë#THªs¢p€¨WÀ‚hÐèÓ„1Nâô¨}0§Gæë$níUÇѬÔ&ày}F ¬ š4|Ö›1ÆINj@¡°TàÀMÀ NÂFŸ&Œ ÁékØ÷8E4lÁ}Ƹ°x¹@‚þWÑ%']îÈ•"™(áÜø ¬¢•"/޽ËÈ¡ÃmojøòÎ!ÉL0àJ¼!Dþ†ñŽ7eâŒÝý'NFn‚ ”,IEND®B`‚nixnote2-2.0.2/images/purple-theme/synchronize.png000066400000000000000000000042671315604104400222250ustar00rootroot00000000000000‰PNG  IHDR((Œþ¸msRGB®ÎébKGD‰ÐÁ$_®Š pHYs  šœtIMEÞ&Ó)ž`"tEXtCommentCreated with GIMP on a Mac‡¨wC IDATXÃí˜mp”ÕÇÿçÞçyöåÙÝlv7Ùl^6‘B^À$0%V@©Õ L}×::ŽÚvpÚé«ÎØúA?`éuêtÆq èØvZÐé TбøRA@+´U1 „$È’4,ÉfßžçÞÓ„3“ŒØé ÿ/ûìÝ»÷þæœóœsÏ.è‚þ·¢/h@pl=ûÌHŸÀÌDDûýK,O”Ö.¯¯ni7ÈjŒË^¯O03£¹‘AŃéÌàÛ;ßÝþ2€Ã_–+ç$ZîjªY¸:®j®ªªö”F°< CŽORZ#7šÃ@j#¹twOêPçÖÝÏüÀÁó ¸jEÛm××λ¸ö¢$J£%¦p”£1Þ™5‰ˆ… MRHåh14˜F__ïÀ¾w®ýû;Û~=aÝÆX(QÞ8«yç®®y&€¡º²ÆŸ,™»òþ–ÖV+žˆ´ri­]¤¥4<$¬$¬”«´VZiSJ i‚•Æñ¾“8|ìý-ëŸÿÕc1Z}UËÍÛK£%¯nzåÉLÜXN®©jáºo´]ÿ³Eí‹d¤, í*V®""AI×ÑÆÈðH6}:Ý“ËöŒ¤3B+„IÃòZ¤µ†r˜áh …ƒÑƆšÖö½ÿ|ù@GýÕë–.ºjY$ÚñÚ¾_ž¸¹ñytue?ZÖ¼jMëÂx½¦v Eˆ„Íd1”9¹Ñ0w÷žè=ÒùÚ_ާ†úG4vT~ýò«“<‚9:e¬©ˆW$=^JióE„JlÝ0{Þò^·vKÀLÖ}¥ÇR‡Õ§íÿy€+–Ì]ù‹–¶fx½¦ÖZ8“+NèLê}ð‘§Ü;ñO/½µµÿ¥·¶þæÏ^üÔòŽwU„j×–'bRÂq\òx ÕÖ6¿Vkå S©Oå›°|EÛmëZš[¬`؆S(‘ ×Qé_ûóÇîy`*ÁÛuhoªëÐÞ‡W^vËÎËä•ëãeñ!$1kèñäøY˜™ ±záÝõµóšã•1(Çe€ˆ™1˜9>e¸sõü®?î|xýwÜ›ˆÀÌ{ó§HD ÜX=u²®$Ik­!„À@:õÂý®y`†‰½¢¹vñRà\Þ²‹«£³®( %Z#±0”£HI£™,RC½Í®ùò¦om¼´mù¢òD\Ç…V|–È`VP®²§ Øœ¿¨2Q啦pœ‚"ažÊlxôé‡ö΄®uÖ¥WÌ©›U—ìÉ¥ÙuÝsÍ¥ˆEY&;Ò=U@Ë «¾4+M$H¹E_ÀÚ3Ó¢}à£Ýøh÷ãØ>ù¼wÞþîæŠ²D”Ù!…i™† »ZkÁ`Ò€eyÈcy`&¤̬€$ˆHÇuçámû7¯ìî{÷¬\z}Øó¯éÝ,´Ï]êyó½× g¿ïæŸÒ“z„ ©vÁüúÊ–ûLí_åµüCÿí/ι$ÆÇÇ+r{‡‹ƒ_xãÙõ_ÊåQÇÅW~-,[æ3‚—º9îðšvÄ0Œñ´T(äÓ= <ü ¤~}óŽ =ï—G—4-7\{ î[{>Óð{ÓÒªdåE%¶ f†Öš‡ ô¥ºº÷Œ—¯ïÜøc¹~óc tAÿGú`£}k,ÑIEND®B`‚nixnote2-2.0.2/images/purple-theme/windowIcon1.png000066400000000000000000003346061315604104400220560ustar00rootroot00000000000000‰PNG  IHDR€€¤Çµ¿€IDATxÚìýy¸eÙQˆþbŸsï͹æ’J% ¥²–dr7˜Ámƒì6Œ,°…™Ú6nCÓýüLÛô÷l ÝŸû íÇÐ`ݶ0ÝÈðÚQ“@ó€¦ÒPªR ™YY•™•Ã=çìx쿈½Ï¹çf•0Cn©òž³ÏÞkÅŠ+â±b­%õøw+žÌ%í¯nøýZ~Ã5¼³MyöÌAtO•¹®ükiÇSɇòY ©‰|ß/T h{Yò™ª4ÿÑöED Rê vÛÏ¢öƒŽ*©Ý3ÈÏ) 2I–½9Õµ“Ýneû}i¿iz'˜¡Öµ–ö"Û+íY«Ê m_¬mþ—ZB§žÙ²³&yª‡ãu¥%+4sg5%ÏÒ7(Ê0ÀmðЬi ëÿMš27.ÚÉÏ4³¤ô°ÚmªÍ~v¥Ï 2è)9'GÅ> ·ÂâÄ÷V+WfêÀLW±®Fipª¾´{^½+^%r;#¨=k†t¢Ы¦D;ˆhðêŠf™©jæßx!R”QhFï"{†—ëÍ—f`²á4ã“ú•Y*J` ÛÅÉk›±8uMé£Mc¹|W™ i„lÊýRžÐÏO ,Ööæšx~>Y¸ÉåAhwÂp_a×Ê„ß/F„ü¢…~— l|wMù¦ô%)RY‚"}@(±ÐR¡xÃJk¤¯[fµd¢ÞfdŒ&¡Š+/$˜˜=‰’PÉÈ^HñTÏ$sø<Ãg äo%9Rj4ðI¸ŠSSŒ¡HC w“l² y5£=Ð* ¨ÆÁÚ’YÕ< s,Ì`@ÐA¡†äÉËpú™¶fM´TiïÆÅD»hhö(ÕdÓÛB<ò®ãN(îË–c|-²Æöe¬»dS™uü¯3µeCë@ãd¹‡ô"ºÑK‡µ9÷$ŸÙô›nù“l(ë å ê¶õ&¦\Ê)zdó»>V ÓÀ‘á{(iÐwSžþíóPâWQt¤PMŠ@›ðw‡¿ÉèÐw«U¸-©áÊE“4…Û.PAmÏJ¾½/]Ô?ªƒÄš †[CÓBýQÚ I¡ 4¸o£SCˆ9b_+,ÍhS?IëIjóH˜ˆç,G\“`‚Ú0 Þ‹·Ï\‘.ʆ•¯ùU‘Ü7NÖ\2ñõZÆò6:ê ç¶Ñ•ÛêM—úÛaÊ=à÷ù¤…x*еU¾e€lÅ´‰¢Gíx2±´ƒ<¡m»Þ'´\lUŽc  ¡âP›êÏYyxed€””¡y’~gr‹ºbëDÅ[,x‹3èó D%ƒÎ[‘¢DL‹¡Þ‘á%t«Å[huGhL ”¶ïµ9¶kï%ƒôUH(üv#6°}bdâ§0ÓÈF»²1eêòeF3úÊixHÏ£BůÓ$YÖlþa0~^d/ÂzJ^ ‹n I éHAmÉׯ0jõ<±¾œÉëÉè€môiÕ‡SúñZurá/_ó.Óa Áa\°ƒB*õ™5eoìô'cÄ k]°)ú×ývÈ˽d‹×³²n>¯¤² [›k±êÁ ¸‚W˜…ïAÏ‚ ­œ¢°LSБáNÌ8ä« «= Ó¨)öD)BMð´+ Ñ¾91g ¹ÜVW5|ž–ÌŠ['»b嘞kÏòœjV£áI¤N ‘(²r¤5Ø›¸Ká«*xÔe›D„óÌ# Sg¶Ý•ô½ ="ëG›„f/I„BkÔó<×1(eÓx߬o[ßAžÌ:ÅÿTñ©:å€Ià­­ÖÑÛ üuL8²>´^Ý–©ë<—MåF· ǃ†â\阴[<% €N¦d½á1uÿk£Ùæ|; 9H®Äƒ¿ibW† ‡ÆŒ6åàʆâî"!P®b8®4ÁRWÌlÄkØ€.#å¤(Qx0<ÛÁbç‚ØÄ&‡³ø}š³Œ²YÉÊ›Ëf¯ˆÉ¢mÚtÐ3:þ;_Ûèm®)…}-!—m­Ýa¬"!¦'åò­óJÖy*ññúÓX&wÝ«¡0Š»¬ * OŽ÷&;[çôĤ„º¦ 5¶:@Y%VG±<4”ý~~.+ž6O(ÊfOh3dKÛDßÐÆGø3HA³¤‡ÍËMû=㼜uîJU€{5nŠÒ|h(e×C*¦0Ÿq w(…º˜äÔ?QvȺ·å¡˜FŸjãO B–×i7OVi&E¬’ŠŽ½I q®+Ê8ßFo«œ™Æ)ƒQ”÷¡Ê_ó¬Ôû‡›‡¸ÆY@›Â×b ¯‘ k?d¹yIÆëB²ÔMˆMN R¨˜\žÐÜu#a“»6xIé'į¹±…~-·÷=¬áJPß$§CÁsj¦ˆ‡ŠF.Ÿ¡S•î)‘@Äå»bš"åg†i‚â4Á™¿%f‚‘­½&•1³›³d ÕFd¸ç!,²ØY¼¬þÁãò ¹7)¬éÈÈ"ÊšÑyïÀÚ­ZÎ,ó8™F¯È JõÖ¢¯Í¸Y8³ýJ2e†¢S Z’f¯óU!’AÞµè£uè¹^Snç–uÀi+ƒç²®‰öCðaž~dªÖ5^Ö~š6¾Ë¾mÃ7YÈ Ury*wÝ÷âýjñ q™Æö8ð¤s®H ?Ø È DË€¢ÔOΘ‰ŸKÚ`£‹Ja›zd¿ ’÷c ÄŒÇ/CÉŒq0œ¶ ‹ŸCȼN@º¯áN3E×! WzÃÕIÐ8DÑ4¿ççBt7E]ú·4†Þ5~ •…⦎K<¯‹µ²¼°aàs#…ftðP%Ñ¥*¹ÏÁÞ ã¦å|qËó:D–<´9-㾞ltƒûAÐ_O8Õuò@Ûè  `ƒµ+FxÒjm2i°Ä•mêºúë*mëuôý tp·ä²âÌÂF…H Ç"%äÂŽ˨ÜP)“C+?SÒŽ+Æ G$ÏhÇj=”iq9F铯4Îù7™1]Ã9¦¼Î ió>Ü °ƒyÎŬ¥’µ°O²§/RìI©«uñ‚µ!5A :G„¸L¸o¹#Üð‘gÆê”ÑVçm”K‹ËœŸQ q1”}4ÆŸá 뇼C @× ‡mÁ—á™à©0? ô¬lO&lBxaíµÙð̤qÑòã– rã}ÒKݨU• 0õLF**ÛZšxg#ãlóÛí¿¦ò7ÑË:¬Þ¦ÉM!Þ ÿ`˜† De¨Úr¨=Ù3)ì@ß“yÞÂï˜*µ6È(Œ2Ô/”/LYÑÛ¿Ò¥6y«Ûz[»À<ógf7fšßõ†8–OéNÉ@†¯‘pRÊâ06 ÂŒïâ¿?Ny¥úˆ¹ Í—9 tÜy!Þ»’j£\”¿ÑÚe¯Ë=¼J'2ÈÍoòTxî‹pë@`°Ã“ß’xVÚÏýdaÊÔ_FH6ŽSEÝX˜¾¶ï2}/éJ™~M7•µÞ“‰÷¦ži•<p@HHÖ½7Ѫ‘(y*¤¾Ž¶ÖrSÖy)›¼‰'ãA¬%§h‰1ßXA·‰Gßê Ï1Oh–2P!n`P„ŒHÇyí A5è£<ïRü¨Rª£¤6Jz˜Ö+¸\$M–ÑöD7³€³!ÔÆˆÈ¬Gó¢1‘>8J«#&MˆIÛè1Ê Ò:l(VÏûIôz®ÓTF´ƒ:åA ´“2Tâ—~Ñêñ~a eò¹µKºD yMÀ=î^ÿ]šá<‰ZÄIJ„†TˆªY~(ˆÊa­)­:ÒYѾCw~§¢uþ«õ®)nc‡Zl¢W8 ¨ÌÔ<®SUVSÏlk`GÏNuÜ£µöùmyDwAÁöiZT¸² ›J>C.û=•Žë‘Ú)M9˜‹®õ¹@Ÿ9‚­‡•\,3ËQ^1@H£œ\xñæ8BNL %ÄÏÛºU½Dw¦*j§TÎáU6zV©äöLZGÀéžôŽõMÏ<¶ß›“±™Så,/]«Ü|þÆ”§ÿ®LPÐ"ˆ‰^ e1üh1|e†z8ÑBCcÙ1‹Æ|óÂÅ[DåQ`KÙèr×8°hŸ 0{3¡ý úG€ÍãzÝû…^6„Ãum£ã¶l+žž8¨qÛTtز®• Ûо ª*è[Gv(JÊÖÈ©ˆšU è~Êô m#0.)»´¹Ai.€sì‰Ï+± WSê g£•¼„Ô«³LÌRÈÁs…6åAd›‘ùZ~Œ-M§Žg{GÊ"öÞ)}æ Ûm¬ŽØ}Î\ÆbÈÖÛeSº¸geÇ™Õu^"49uYÀðhmôslŒÇ Çá{ Y äH!äïܧž{)<’fp¹“ò Š$d ¹±´ q*OI1=Cœ„é`ô_Ÿ¹5[” Ïl«¸YM½s]¶]èA Ú’‰“as¿¶­ïÉ ð)_ô k'± B(×?”´£¡+dÍ8Âö¹24U÷“²Ñ.Çð=LÑ™{Ÿ½¡½g†¢ŠöÍÀÜ€„Ö òµØ¾BÝ×ðÇfPKÑ4½Iq_6,ì¤E_™<ÓrõUòˆªìæÑšôOʯåUf4Éñ¢4ŒŸ` Id…C©½ƒâ•èW~˜û\J‰6UËØ ,bóU楟MlH†|ÍIØÄ²"㎼¢[ƒ& y6ïð˜<éÆOË|xÈbÐÆU×׃{‰ª€1~¾ ëQ]“ºp[4¯¼sÐE"<ÝHeŽ·‚ØÔÖuhýZì"²Jšc¸k¼mQ[µmt?°híp•±ÃAµ|MÉÙ$›?ñÖŠü¦j·Áa‹.‡]F““Œ˜Û -‡ÞîHŽ ÀÂ4 3*ôÁœÂ1Vœ”{êïjáÑØœ »úµ£Ô̇Êê„JÁsc·ÊÚé³á¨XgòF'wËæNå7çjGá?ë^E;qufƒ,".wÿçp¤y ±ãæð{L¼‚&‰'ö…òþ_£­æšãª‚N(¬æb!ðucÈÚ”6Å3ä·#›‹=årvZõHxŒo šÒ ažµåêtYI|'꼦€ó¼ô…®-gÛØÚ¦k ‹w ªïÆiÔF-?¬‰ÓªI:•8ÒäjžV…#´Añ´¡aFÄQ_ O¥j‹ m8G²Uò$in¼ÇÉuâxÉNéñÌ17~tRX¤†«Œ­]H;’Vy q,KZ$†ú.Òþy¾Õ]èpœAÀSl:µÚhXÁ”‰È(W™?¤ù…x¤Eq‚Ãhí7bM‰wn`B ³"%ãèÏqøG=Œee{d†äÀ¼µñ¨'¸½oóY­q¢‹Á¼ ’1ÿ'Q["1Yì`óÚ(£‹BTBÔ *B×Ü;VžEùýø>Œ˜ºdÝvЇ­`›Š×)ìmžz¦vÂ6ïljϺߦ<•êm¤œûÏOÆ!#cW†%.:¾BRÊ®-ÅÏG­qi’K•x= «˜r¥Í×Ê⯤L%¿+~, ¤ø³½ØYî7ÿ"n”lâ”UëÕ9¸T~Âùl£Õ1¹ÝP ÎHì„>›xHàû~0¥cÆÆK‹,.Þ¢!Œíd´Sª¥Vñýœ›ÎÚdÎJ_g”¥doOɯ±ö)õQš˜×Ĉ˜5C;ÂEO™X;"O¦ÈÛéy?ÜY.€Zh"žã•Ùîmq]S:jÝu^¬Š}x­×6zwʪV¿iÝZKùÛ»m#RÎܦÃ0©ÒžÜÊõÏ'O[×Ô5åʺ³2þñƒ1Z¹–åaïH”‰Áƒ9šŒ Þ‚Œ¶@ù(…f»x"(ÂOÔ2nµÐP¤”˜…¤«ýª“Ù| ƒXµ¹2•ÜÏ¡ë”tÞŸ(²EˆBk©ßQdL³xZã8;&<˜VPÇ›DÌxnñß?ˆŒå¨½e-éÄ`: ¥‰ræðŸWàeh.4-Ê®1¹Œ§c@úÚ­Le>IgU¤qcõç©ó;qc•RŸ¸¼ù‚È8çxíµ èœz~J¬+ëZÊ<è½5úmí€ÔJBÈÛTxP»Ö)ÜM b£•Ýæçã÷'먴Ðw?iªEX¬ª2ö¦QFH þØxx˜¶/¦û%@WekȺ+ñì˜HjÏ@nG::eÄKajBÁ”˜=ÃGE«¦´Óú/|`²²Rba(WÜTN yµßª—P¬»Tšy.Š8´%2W¬0 nÀC…zÅ<13Œhi#[’#ŒdK‚UfÆœÌY0áTÄ·Ïœ¦Z§2’a²Œ!æ­Â“‹lÙ“P·BmJX>~¢-­£¯c'Y² X©æµ)l4µÈrƒ‹Ü¯µ‡ÊSvÛ2t¢,lùn)gmèä„õz›Pö$ê˜ÜaÍ÷µ4ÔûlÛ÷1ÊÍζ»é¥FÖy¢6*¨ªÒ£0#øleŽ­Œ—di‰’Üè8T+ VòH _Ø ™Ò˜u@J$MÊ-UøC^@Eœ#|³•£¸Ø¸»ŸrÁƒ×ÙX6:xfÐïP¶m2g ŽWÍšâ¡ó]ò‚§„¬×ôgñ."í³•uŒ”&+ÁF£_ÚÙ4Öæ@Û?ð”u¢b6!<ÁJí²¤]fc,á¢p Åç=ýÓ<ošF[Læ˜å…F+0)}ëeZqò«©‹¤Ðƒë¯Ã€ãuhÿZukéNŒöûÚ•À©ŒM®É¶J»jãuƽڲºô}WkÓ}—ÖᯔÛáÆ3•ެ`I™Špj~AaSˆÑãç‹Q*IÔEô_`ƒ?À_UÞñ!Û&I÷G O“Ú’ûÚ©1ŒH\©Þ‹úíŒh*[†¤lúP¹s¿0ž¦«åÄ-*'u@÷ùL ŽP­"š”M€+Ɖ0Jíœ5¤~bãâ£)äF‚òôY6£Ì@J»w/‚M2äD¯ –-Ĉ=]{v0‚ùt3Cû,Û^7mnäüŸðl8’pУ¯uºlÏa[:¥IeL>Oúoã‘Sòu൨µ Â!›"R§‹©›=SÊO®cú© Ú”á!×ß°´NÎÿ+É4 ‘Nü*£MxP¦wÕ—óÁ¨º ‚Úyè䨃‘Á­·gâ7ÉžKA«†ðÿ©–.ëz„Pé(DFé7zÛ& iRêD:m´"tœ F5ÏN¸òïÔ••—ÆÞLvrÊÉq{>(ÝhâÍæRè"³:| Ž1‘'©I GYdž1§Á•/ItÚrB¼ÝæYº)k =ÄVIy°Q¨¨À‰b ŒŒ¹ì¥¥Ð•÷//Ž3Z³BOÚÄ›|ÜçSp­+†udÕcº¾(Ášguâ™ut´º§çž¤õÙØèÃԱ͵ÁšN2¡Ð} ‘KˆÁÞã4:®KXZ‘Vwºõ-º5­0)/JFî}¨} »Œ7m7ebŠ+Çqrf&#y IøP÷II×#n§ñêM$e2¹]nôÜ#’ô\Ç(Vȶ =žRÌ|ÏHWÒà“ÊïÔù¤0’B£r4‹`{…,hâ1à4áký§TŸ§¬(É;Ãamu mÞJÑ&Ùk 3³0¶fl’×BtÛ^=VHÚ‰ã÷¬üd–•Û‚Ûb¢·áäFÙ²¨ê!¨€Žäª^a#6VZ“ wýv áÙ¢ÜÐØð|7ùÖ°8 ­›2nMÙ6ulë‚ä¦]‹+#å?`¼Ë¾ûåtõg~ÊEº‚9½`*0·¯†lÊF"xÕþGNö½•3®ñ/1Àp£`Ì( ’ët’ÄiÁÐæ}8Ïí+¨íCÒµÖu¹ÏÊq%n¡2hÞ/cÙ¨J"Ѽ…v¦õ‘Ùâ5R]Q˜´ö†–gH©ˆ&°iĺÚC'\†¾e9’vÒVWQÏ2AeÄå¡aoJŽ*2QCîg 9²Éd~OðÃ*^±Ä=K«,«³„”‡*É£`œ‰6Á?¾¶À XSŒâýMÊ¿1y}h‹D2¹•’½–:¶iÐT¬?o°´ëì¬ëjF kÌVO^9žeDJ¡Ô^PÓfD]ñGªd³ã]CK.¬¦Dó¾3^~‰¿ˆ{™ ,#Åû_xWLk¡±¬ b@Å<©AdÓ-Á·mŒÞŠ1Ný&€åÚó¹»¹‚(t<š‘Mì” IŠÊµR+Z%ÌÙÆeDš¦÷ü¥ ÁR«—jöÞ^&2•”8Ü5#ïÔÎÖwÞe ±ÌFx¨µ krEgG•â|ÌN¸—«ˆ¹öº<•ºñO›°ù*ôN†š:˜(‰y‡¹ü€ÏoXÒg‰ñmšìŸM‰ßÖˆêF}]d‹:µÄZ +A›,ÏAåðuXƒq Æh½EçáM‹T$Ôº?_FsR5|\ó˜ÍŠß/2’IÞï½ yŠqjf{_¨NÐã„ G,溅êÎ0m¸ø€/—[¥Y‡Ê?tïÆ3ævPÔÖ\2„B³:%x“xŒÄ«Ñ‘"N¤Ø¬¹REÒ”-Ò" ÁråJˬðp Ób†E-çð’7Ü‘·½"Y¶zö …¥Æ½NÝ ™ÌrÊupŸ+02ü<™œXC•›ní<ŸÎœ0“á†"æ²¢ Š;RŒhH|o2CÙRÎCA´ÅH-8bëkJGÊšûÛ”qØß«ÁÒÃìºFAÿøë¿ëÀvÍ—ü£ƒëØÖ`lc\c|jGEi„€%M§…]© 8(åK£”z3â;*i`ž¥²Kè܈+ñß”mQu"˜ì$•ãÆ¥Àcõª¸ÝÏžâ-ÀÞ\C„À2ªÓ”<„ðJ<|b†ÝsÌ[øHòþB1ŸR7¾î›QŽtÅév°·3N»lFU8ɶ³¨: )°Ôu2©9~NÝ e^$//¼H7 0”X¨ß¦œ±Õ¼ÊŒªF*|®%æwè—äyš§@ûý)Æ—mË“áYG@žôç>f[³­Žª‹u!õ' °íÕònN*xŠ0l§øë³nžL#ôïÒX¤ØþÍó dE^#\*b r 6#d/­Ì h©Ýæ±ÄmöBøÅZ®‡­ÖÏáªÔ€1RgÛq½5><¼‡¦ÃEÿf@IÖ«õ- Óø“0¿Ù-±ðF0@½Ï3âKJ™ËLÚ¶ÒÒžf}OÛ x¿ì²{)‚D{4Ÿ‘`Àö¢ïeD€!¡ØhxÈJ¡31‘ú Èá›PÄ } Öx§Ð…Ì鼩›Ìð&ð¢dá½Ìƒ©wü“åškTÔ‰R-×ÂtF¨$3ÐRRøøX\V0¯çÀk“Á8 (^÷ü$Àk½ÀŠŸ~[§ø¿æKþѨŒú¬‚/ýGcËwˆk«ó;+C6=Ÿ”#|°±BçíÀl¤˜Yy™É£þ)C3 ë|š) ™ê˜çJzt¤lrN»$¡â•Æq µÃÚ@¨³s¥è4”ïð.ŸAœ\²kì9Dgò†h‘¾šJ6Òì9‹G¨bØ]´ÙB¹@f[5¸!¬æY8|ò|ž…{˜ÄCá)O(ÏHÕä,*—S˜l›²6MìÀg…$”€iêªXå⃥ù–áúøÈÈ‘]S³’-xh§È O/Ìø=”zñ4™:V¾‡÷c%ý8ñÛA£võ„N^ Ú+MõÏS¡ëÝ üª×‰ßøñ×CðºïŠ÷ ;Mݾ@7ýL ŸÐ‹háAQÈ¢'ر°æöX=áƒóòø¼ù òýÇÂ^˜æÆÅoÅb/+B‰07 d",°¿[7<‹qQ™ÎÙ(™d¯»"Š'±:Žw _Ùx”~¡Wjއx¸ß( ÞÂ9Ù !žp ¹}ÏœÄóªÝP>ÔSQLlòÖÔܩ쥊|‡Ç;ŽÝS¨‡ZŠiЏ<Êxè%y$=FÞQêÑœêìñ£±¹/ÚS7n~ªYñà#<ÓÒ%Ò–×ÙtƇ{Il´Çz5Úi2¯–vÜj,/D‡ Óšø»I—éŸ7½sÀ5w>Oýºù'Å¿é]g¹ŒýweOà0×¶Þ)ôn ŠQRé_V(Ió!)áû;‘f%ï“•FSruÅ÷l‘Ré?7„ÔÛÉ¿÷Ä6.éu˜âG|ÈYNƒÂˆœá ñ£9cV¥Km@§}yryÑÅh¢náÌ¥ú,GYé „€Cw0R$„:9rØp†g¦YT²‘"C˜CfJ/óñ”’Já *S°CÓÙ#±g¨ô©=§(ü M,{¯ñÜ«z·7N#ñ,…Af«ä…Äb®ºv¡fAÌSØœd<£~†ušd,@Ï ÍÐÙZù`6-g %«tPbr¿–kâý¬ÆÏÐÂù ÂÖs òÇ–ïäþ&Ä3ÕéyÜÀÚë0ð"—X&[¹"2Ö(Š×‡2ÍvÅ„‰ÐñHñ†°gQþ2`ö¬ì»+ÿV)ýà§\„£1È3kª!Á0¸Òóv?jÉÊ•[*\V¨žæöYºóRº;½¤6o#"Ï^¸\’€€Cz@šGpÚXqŠ•Ÿû8‹ù_VŽ˜·Þ#•h×жêaɰ>!KwÅ3I@R&“M'ºqA1¿Dµ$o‡8'ôw*J²Åà)ê䱓5Wîn)šNzÈÇ#¨\Éåû8¦¹«²ç¹yC¤XœäÉòµ),dŸ¬òŸøîݱF§wü°N&¹o…ü[aSíá÷üõßµY‰×Ï›Œ…5@Ê÷54 Kž&ÙÝ÷k"jËçDóàËz9¥…Ò-mJ)õýI¡ßùoRB]Ôìµt¦4×0tQÊ™íI{MJÒßøâÞ N¡ûÎÞj”¨]d49ÄjÊ«°Ò ºS׳òiƒÁQdîWÊ®4D‰6A: ­{Žrs» g…r°`s%‚Ì^ÉìHýWRtI†}±?'IÌωíCæÉ•­î$¿Â:GâP±Ö—1E¦hµE.8‹)-¸;c£:¡gòè²ß:xkclµÎcÄGovÄä@dKWUÌS¯ms¯†’tú~U‰i@’ÇuoL=ƒéç·dÁÁÌYGǦwdú½äÛ_˜þà»ÍÊqThU6þ§¬-tË̱~ÅHI6·6oÜUÿ†¹—‚æ"å}Êòö}õY¡9öí%êÌÁ ¶5qr+ £¡jº ©†ÌÒ¾2Î÷|"ÔhiWœ'$@çëç’D¤F<À<2¥K=<,ŽŠ>Í!½JFU1i(hØÃ¶ÈÏÃ#WRn¥ç פÍðx{…8ÉK“RSÀ'ac^›Væ>±¨L`› †“GÛY÷°ê$ùr>yÿF|¸‹N¦MèLjo‚çDhÑÞD(tì¤Ï¢¼‹&,$‡§êändË‹“èÊ¢BÛ¼€M ØDý¦kjr…¸–"¥b’kä’¢‚d#tzB¨ŒÎJ¸ô!S ?: £^7„ë¬C˜ÉfÖù¦›r»,”!d€¸yÖ^ÛK ‘ŒCAí¿Ž D÷0ÃJW´—Ýã­øõ÷ØsÃÑ1cÑæ‹(iÃùmsF›&ª“ ˆ[°Ü·€ª0‰ ~;þð×& Í:N&ÞÙ¢¾yzø0Ö‹ÏZBc k57Éêr@Ê$Ô¶4…ÒR¥tŸª I·š¨ãôŽÚ^¦"íOHÞ–¡§á³ NÔªôƱTaa/ø”$‰ NA¦ÑyšôÔ\¶+jñÌHZ ‘>)™ç‰¿®xƒâè÷øž ]ÔàÑ]íà»Ç~KäÊcálI“Å´Ôùa‚¢ÎFŽE€¯‘e1„Žv‰ùI&H8©^Gâdòâ=*™·Îs·¿Nɘñc¹eøÄRMEF}¢¾ï_–Ï<Œ(ÑÎÆ»$žû¸­´¸låÌ)žLŒçdÄA³×ÛWuå“™ì-]àµfò×®X°éåZù' Õ–1[Ìa1rry’—ÐoÇDsBS:ä€!¡\͘dŽr’ГÁ¡/0A­ÀN¦ØrŽ3óc 0xl"{‰h74UÑ1 =µ7¬L­»*:"lʱ‹Érï×Äœ<Ç1°žªÊì$'e«P‡² •óÚºú—dÉúž &óUÐrÓC©"RÈ5…ÈB¹ÒœJ3þXɈ"çßÛÝ’Ðëè76WÁÆ„£{:Ì'šKlϦ÷Î)nú¦Øþ&ô~ØHɆwÆ! ƒ®ƒbô×Jè&â¯õõ¤%hÀ}1R € œwpS´sÔx¨ÉbÖjSH?Aç…?rÛ²{b¥+¡QQ?pÛä<…kjål¯€´/=Ù€±²£›Cì‚ôýÚ‹äÚ®i)4‘••kÌ— £„z¶ÏgêÔöÚŒ˜¸)¥P ÉFçØœ—sÃÃò‹8mJ)Ôý³ £Î´©óØe·Cä¹wð=‰r€š:•‡ÆLvPd¦ÝðœwEHÃòñ;ç½B×èoEi{ÔÄæo ²Ì¡/x\?ºL]x‡©³:ë3ïÇx×ÈFW}lZ}Ã:ç)YbÊB2úz´ôW¹ªÒ?Hçnzæßm|pÓ5¥$¶‰kmzßîÔ¨ C™XKˆ)T½7ßøËtGÂ¥1Q™&DUœ2fˆi 8<|rÊHhsXÆ„ÛÒ÷¸&ǧð•K2É}OÏ×g.ƒ@?õG+Ï”yÙU¶³²¶Ð_"ÖéL#AqxÝMÏwÛ¾s¨l-*®ÛCx£hÐhBeTgÚ€´¹¹¾4@ÑÐPR†ñpÚ° ´½®šÆnÇõêæLIR•ã›D+ɬ¦2øBa µÉ'Yp9Ž`÷ i%c/¨3ðFÈóΪ‡ª7‹Êå1¸Ùç.¨Ô¡¸ c;êh‰>kdgÊ•w¼Ÿ'Ǹ_Òc˜ ÏþQ¢²õõÈw­o\¶X´yláY1ÈÖÿÃO9ô²~&di1YæcL¤íy˜B†AÛpí"Œ–ÄÖ ¼ð6¹×¦1¿¦¤ø}ZÍÇé ûæÁq1ŽlKi M±µ!,°š×ð™ÌarŠð­m¢)…‘6Ýoïw\ÞH«Ê9ûS…nqÖ0ÊÙ®ˆ‰çÌÒÚ‹ÁÝ%Y¬€¬Ü‡—U3 A„t•™”¥kz/»ã2+pr©°\hB>¨XC‘~ ¡[›Š"ÎpßÃDgMãX‰#DS5‹$ªü5dÅ'øÆÆ€‘žæº²f?%N^L UY5¨ôzG$9Žqå SUæ2f‰~*8E‰9”õI⇥¨‘qR¦Tù%ùI¡Šh§/r7Þz»ÜB4w¹¾˜ë"a"ƱÈ1¿2Ñ *$æ(Þ¤ä¥{I¼}¤”µç}~[Ä^„$ù€p²@Ö£s3@m•m"åó6€[Ö¼Kß磗¶™Ä]G€ðÜ:í~ÀDÅFZP•ו´eQÌ™˜ðÖ‘j‡/²â°b{ãäÛ„¬—I^x#Š‘H(ʦ-[?Q.<ƒ¬|ÖôáBÃQ¯Ôã"ÅŒjáA5æsb…?N*ߌ/?åõ:²Í½Ò`4ÜTû­•D!§ÊŸ Vó jiÒÏ,ÕʃÔÐǃ:¢°N’Ï”•)(÷ݤÀ´±ŸöeEFà\ÀHìg?!rޤSühÇ+FwÄR,+J÷Õ½‚˜› ¾ššÆ ó³>™:: FâI;r’†³O¦Ú+iÒ×äÈ9îü²Ì‹sùm'H;ˆÚxöåäU<‹ò“dI«™£ ¶ž@žÇ›ôß&=+ôÌ:z«9€Éý{d‹uücÿýo|wS5ŽÇŒqÐJejA? ØàdaFé90AœoûĈ‹Ê4’}1VÓ¶8u Cü•pËŸw[e:Blå1∖"ò‰ ñI`/ù?þ“zAS Oõ"í×ÔX¸ÆêÙ…×¥©.kF(<‰Ù‹Áâ Ԣŋ¯Hžjw¿)01mIl ägÿ³Éh…­ºí(~l ¼ÈåPœGRéÞM D$c²¦ö Óh²2ÐAÚüC´…‘uîyñ}Ÿ¼œ©W(÷X9Ç–ÔÒ·Ö!Ý8¾Ÿ“Æ:ÀÛ€\oÈu—Ïá Ú )ÔùÁ kSÀVj QÕHAÙ_Šwx={/×z°¡âµ›¸Éæ²F!¤)˵Mƒ¹Rï#¡¾"óïí'žñd+mŽ•@E¡’‰žH»fJC#\8ТâHD míŠÕɨ…6¦âA<¢ƒç$ê$^¡•ݣʌZÀtÍ( ¦+–ÌW¯BˆR¦«ý¥A}`Ö1ú@›ÒIÓúŸ§b›rÏá,sya‰m»‰Š ¹r%/™¿¼Á¿“}(¢p÷#¬– lØ`¢™'BàEq¾t’ë˜ ´KÇ: µ¿r¼<Sš_ð6äø … §äNO38aÃÍ:‘eŒä%y|j¤0=UožyòÌ€Dª}v#Êæ•îdˆ¼óy|õ)FcÉþ›Í‡¾¶ŒœS! ©e@ëu?[ì2•ñ³öxÈmÂNö¹ â4x9"ËRH±aP6…Ò•ïpè÷¼jwcIv©'Ý¥$¤”ç¨y#\(Ø]ÖV6OôŘ¡PWg.(#—Fr9 Ýu=)|3N±]Cö‚Xišè4ŽгÉ@{¿Háe"³ô BÉÊTv Iò¢²¢ ]åi#H œåA᜘ûpH©2qh<ñ·„|X¤\{ŽÝiÐÀó Ê…É3 Ùç†=¤‰o&&¤î&žmMŠ•—ÊÚ|÷Áˆ£ÊQ­ÒïQîÐê^ÑèØJcé>ç9&Ò)ôÄmõÉn£—[@ÁG„ÆüAò$l‹…9”D¼¢]k˜o[Åb¾9”¾æ¹ùÚ&®j€bJ%亶il±jUÐFH·Å„UºøQÁ#• #ìÀ-Ÿ"Æã§ÀÊÆgL_SM;8ëš¿­¬Í“À÷¦N÷šú>uMîÿsÈK˜‹.ÁŒpQæóEéý‚ä|à c®[ÙðzÓ M±‡v)¿S/HP4<Ú9kŠYhc@læ0…+í‰ØjÉ· £xö[âfìDš¥êz\B†¨àtL[]ÌF—÷spòl•i4ÇhÐïV##TäðØp#H'-ÕB»eë»XX‡= rÆ «’Ÿ„ìÒæb᥀ Ù@;—UR;!¶˜‰&h[;”NcÈîÐ1²Îµ§ö"®ð¸Ї²õ2u§6jx~"ØÄP ÃFý¥ÙCQjJѬ†ØmÄÊl<64fˆ¨ßcÜ):ß¾‚Çݪxb™é©^\ÊÓöíà{SÏ`Sè€k!˜|öKy‚ØbrK‘bz4ñ(øÉÚ_b+«Íúz9„@Ã#`A¢2èŠb­JŸTÕBœâ0"ñŒÔ_ÉÒˆŽäGÖmü\ö˜Ž„Íc'øH‘%¡l$/çÉWž„ äð&è „ÏDH¡s’.+_c_DH%vŸl©€eëHt«²Éhßzƒå Â44x­ÿ’ñGæM „‡^I¼oq~å÷šB ñRˆ@Ž+,|“•Lö¸jŠMb8”ãPÆÎðæÒoîrv~È{lç!©ö´QÊí7 Ðh³ q/̳¸\±†(xüØ«´‚™•ql“aƸdýžØ„÷JŠÞeD5 ßš±:© YGn¡è×yóµ/niAÕZÓ»Ö¼?)I¤ÕIÈünhŒ„¤AÝÏÈq„âJJ'ÅÎù€ O^#ÅéƒôŽª¥ñ..öC²òH†‡Ï;Äs¶kçˆQE©kÊ%²{Ø-—R€¹âcš£})žLlpãîZ$Qò¬¬Ñ& NËbêE È~ˆu-T˜" .ƒYMòö2 `$WQ{JepƒÑ ñTÖB2—qÌÞP᱘G\ÎÃø!á°J“eóx”[Ðå´r6”±ÆÑ9)wSܼ¸«)q—‰âü<‰4 ÔÇËöŒš‘†ytpCà=j€ ì£à} 2ÞÜ”:GÈSK£@ÂÓË›åeÞ'/#å±"è:H¡×ßuÃ;¿3xÐ÷u…[£¶!`Aï$\÷äÁL¾¥,(( ’Z WÚ†˜H323! ÃQšÁ‡”Œè úü†Òl´ùÉGÞpBwQNÜ.ŠÝåŽ5%18é¬Ö‘t0€&ÞØ Jj8ÊûNBAh)Pllf„ǪđeOuZ‹uËÄ'o®–ÂQþ^Äé9Œ¥þ¡SzÏiJF$Â!\·OO‘PÈ|ÀJЖ‘²·º³gMÕìÉ ÄÅuà{òÔÌ@ÔñS÷l2~6züUgF9_ÁǦÂKŠàó 9œ3 Åbf+SN3y×SA×ø è“üH~›-lš°V–“Öeyã9i:Ê€Æ ±ˆ¼5…φÝD©+ÒÓëîÕßÑ[ït`ázÀ3²ážNü®›_·ô·¤‰ùߺ ÷ G‹{žËgäOz5ÞTøÂA¤ìY3HȆò$*k àƒ?r¶KkMW ® ”4î¡*/B¼Nó8{ÉêfAï¬åôAʤi²m0ˆVGLBKÐoäs˜ií•‚Mc\óˆwlÚ#¨³~ÿ&ñÍYÆß;âÝ0„Q–¡út¬,=k2”R6é}q=Ï$Flà4Ü`¿C¾¥¼,dйŠÔ’“Ñ|˜7P¢&Ñ’4wCÅž )õä-§÷rÔß8Y½lÖèŠSfBûrÚDZœäÊCr²ü_ ¹,O|Õô®Ô²œÿTò±›ôèô°™VÙÆŸ‹¿xüÉl®_ׯë×õëúõ‡ð:¼pýº~]¿®_ׯ?—üÕãßýûç¤`Û6 ~ìõß øÚ¿òÉE*î-}·, )÷yb62|„\IEŽDH…C­ö~ž„ŽEBó+‡]F3Ž2úØ­õ¬"‘]ùìf7™Ûô‰ÅZù wQKt”ÃK9ô‹g\ oæ)F€úGúKq3gÔD9eN4ño`¥ZX¶†¥þ‰Pè8zqq6Ÿé÷§Â“ùiÿÄ21„ho(ƒ«»ö:â@:×v×ß3O#s%•«S¥Ç|Dm‡Ý\WŸOG¤Ó²8žmŒøË56{ò¤2‚ôø Ú»ŒrÆLðŠæ% ô[P•’ç”ùÀÜ)mÓñ}ßçÇ?‡{ïc‹´¤FdÞëD¹‰ßñ`:¿ø)ºöήþ°ï–+Í®kÉRÃ䬼rµ4)ÎØñó5õ´*ïõƒˆ}z8” RQ°°xªG…³QáH0±&P¾¿Y—.&“Ü å©DÙ …){¢)†”/O¨AŽW[PQF|ƒÇ.ÇiÎÁXÉYTJÏq_eÍëGTÚO#™ØDcÌSp| /w»Å³¸rƒiŸH÷uI’òˆób»µm.l(; -ÏýX5aI‚ˆ~6œâñ^7i^~œúìó;^2MlR¿§õ"¶ÕhJá"`@ýî2èSÓO… 7•W×4Xtµ±ÕªQ® v¶&Œ‰6«OÖt)!«4We|a9mKNeD2Ap“)Hã‡ÛÇýÉÓ%$\¼ƒkÛ_åÙùƇlnä0צl¡Ceå‰Aµ}8”„¼ÀÁ ‚ë±…)s…òžsª6 é"–d%˜]¨N{ÆÑ £jBÀ }ÐÒñô»¤<ªbå™°*ËæU ð¨oÚó­Cþ»Xý° ‰|x)B=&))zãi(H e‘ÜS,:*T2ÉÔ_6x)óˆ劧պÖ&fåÒ›A‹ùÂè_[ÆïŠQ4!D îüY@ ®´€jB°C‘yz§ÿ,J‡ftÈëˆIx‚š’lx_*ÞåÓÙêòyý1 ZFoå@ôä†s*­ÀŸÅq’ðŒ¯´$Ri½_:ùñÀ«<;'I8¸@™þmÒK¹¨eËšï2.OšeôÔô›õt¹ «òRÖAF.Nƒ•Ëñ–ŸÆÊN‡.R-eOœ|`7#7^„C­a[úÅë üÓ¤“¶/6ZŠ¡Ú¹é•Ò¶§NÎÑ·O¤l+=Ö$2 E£óÔ‹Pw'¬™ðÀÅTy:­gɆg ˜¡ \î!(:BlÜ)¾¸Í»ÆûúŠ>$ÔÒèjJÕõ'© Óa¬ú“Bµ–I„lxY>ðH¹ÃZùn*R‡ñš›…Q«:-²œC‹n'Vç®¶‡Mš’µnf+ÛÆ:d$¶ìá°$7öõ¹±vZ‘&žŠ[höUä.÷EQ&05x¶x«¼L(ã5:zò9ìJ`.ˆãžkßÑ-ÊÓ<è&GgÒqƒeÍý¡oMPuÆs“góŒCþøØ:MFš¹î¬:«•£48G ¥lè°%nò ‚/¼=«è6¼&! r9å<ƒŠ¼s¨&ýó¨(FËcî†äJ;9ßÝLÕÆ*-‡ŠÚ¯jõåÎé„Ð#BWl šè^ju(¥WK+Á‡¸®Fƒ)¿gý¤äùÕÓ¶Û¶Õ€\e}Œ‰Y^åå< …£~T): n\¤aJÔ¾1"Ì}í´)“¤ms5S¦õ|„(?Úmàý…ªÅà™W~ GŽ+«ç ­30˜†&Ÿ›òŒØÈN4ÉŒ’Ww+§€µè‹á(×6ÞéäùVc‹‚ˆ?ã‹ë˜‚¯Zg«ÂÕ Šï1HŽošüó®/¶Ìܬ!É­Tª±jQ>yìÊ!žÏÆv—ãÀº“å‹ñ¥ÄN}Ïb˜xIm Áæº)oPûŸµ¹¦÷ܵ6”&ÔC’÷ô±‘ Ua“‰I-³<”&²l™”|2VÑÍÎV¿¬X´ŠƒF~’^5¥ê]?B€ÖôؕҕµÉ$HêuCÚÎÀ+T´g±ûd’—0.®|M9ƒl€_1ð~âÃUà†?ŸmÏ[ ŸŠH ÑÅŠ`Ú: ۨN"RYJ1ä>JÍSÄöS9ìÏívÃË^qlTô“Û (R4C9<¨£2¶¾è®YùO—wø‹iEÝ92C÷HCee$iôóDÙÔŽ’bÏeæ%W„LßmJšõxö¢§Ó~åD¢¡ˆ ÏžëHHÅß›æ6+ÛàOU`ü=xKèÛ÷?ø“=”Ü+­ÜjÈxr·HÉŠ»Ä19'^»ËiÓè‰2m°ßó¢´˜4*o$­düRÈÉë‚åma:ºÜê*• >a™ä&d3Â,yœ˜Œ l°>îÈȋדšË“¶V¾ñÎù§±8ÐøkŸ“§Å¬2~<îŠ K}®Q/»NyÐqï„\†CvœDvœ×g´Ò>µNèø{U)LO ©Ù}E—d^ƒAL{–4uxÛs¼—T …Žd«^²æ¾]J 1é¥ég§+ØæÞ:##1ÓTY?R%æ|ò¤•À³-FÆ…„˜ÇfÝBšy9þãEž¸,ÊÒx{N#>,#$X”7LÀYvÂò$寓ƒM9$$Š•ëHŠ(ò '¥¥E©o ÿh°”t"Ý5:¤òÏ뱃=iU¤†¥ª ‘Åà!Qî†N$¾PöM—^&àÃçWmdÙ“úQvåt·Äç<ÀCæ/Q_å«dð€X ,1vÔe‰hšÐÿ“Wy¨[÷Ã5]Å8ŽÊO×ôÙý’䨯Ë~«*¿†@)&®½¸ò¿V¿Ø½“B¼r¬?!Âè?U튰?×¾·Á$$8.ÿÏL™òñêÄ0:ŒÆ£ÚĘàg»çø“âj“¿Ã±ÙÌå7u¥^«tìÍyR§Š€âY¦†çs¨ˆʱӪ€Èàðwê†dlÝIÙ&—J2yöÇHiÁhŠÈ€ÍI"¥ÔÇM 9tü¨Ë ÝQ;i{ìΫoc¦CbIð6˜¡Ô¾ ‰äÐû?óËûÁ‡TŠÂó¡æ«I#ôme¥.ÓÄkãa<'i8¸„ y#ÉýbÙTŸ’ÆxôkZ°•uX\ûx3/1ÎxŒ{øŠúŠ:›ø‚LÚkýJàk1Û¼cò1MÉ>¬£YX¾HI¥Ì …ÇàçZûëÁñÈ0S:""œDzٌÄ–9U¦Èw¦>Ja òŽ„ïÏHØ#©•˜e_«†Ðè ôÁh3ODIå<É}õY˜ƒŸã÷‡ôD?åjj/zDG8…ÜuCI¶^"ˆuÁÚg8ÚQHÌ/%žªå˜*«*ŽùªvÑf ñ!á•¿\Oï)ö®‡Ï[çÙ÷$>qSK‰Àg@‹’x¨ :QôäЈó±5”Å Q~£—ÏBñqÍë rDˆ<mmmë  P lVÒMÝvÔ?EÿóÁ24A+ž[¹'”SU{ç$ÉjJ{n4h$©'F…¾ülãXSà^. $èïÄ5m¦^H›¥›/Öêô¬ã.6–®“)ÎCå$t‘|(ÉP¤9Œ¿‰Ç…:ƒ]¸8Æ$‚Ï(æÉBÀ±h´”v°A"ëÍ-f·9µ¤ˆ4 /gï¤lp -É”Ñw¼•á?Óñ|Ô¡VVÎj$š™#iùÇôðiH­çöÛÿe…–l<ªßd<(üQî“Æ÷¦PÓV­­¾ù!š‡ ƒóÄ6R$®ÂÇwã«vȉFBjÊÚE!™ ‘¡M{?´¶µºŽ$Ý’ÚWYça‰v3…ª' ŽŽÔJš5ñ\'-yµ}3î¶­Ï;…AˆÐŸ“œ¸or;˜&+ï©õ PâüÂp¨KZ\àŒ¢±ä!93z¡ècx˜ŒÊ˜þ*C¸½˜y”Z•rŸý”e‘ò—Ÿå1Pê*›ú5f›Û6m‰™Èo`a )o6YÊ4e÷3ýàcÓÝò$™œ‘@)…ŽV[©le·é;Œv$>.ãÑžä¹HÐ6\1Ãg0æwÜ7µ|ký€õàA ýžᥠc®½¬}?w^Væv%]”ÛGfR…% DR‰*ßF¶¥.ŽÕ¶îÏóȦ˜6 ©Ì‡ô¹ø¾N"²ax›\‡~’…¬ŒGØ@L1V®ßbª‰6CzÄ32Ö#dz!W%VÏ¿$:ÌJ“¥)6 }‚4ââ©ÏX µbr3ÓP°³„Æû”ÊK†Ù¥QHŸçUF=nô0¶ö2#Ç>ÅÙ+}ÆwïƒA´%‰ó''—Sm±$#Vèêÿ߇59Té Ñž´ÀH¹$ß64 OÂUH=’ÔYÕA)<Ês2ÖßF»yîmkþÍ¿!ñN†>m† ö ʱÉ wT¥½¼b¥ðR4|yNk‚—ºî@˜5:xã%ßeü€1ºŽ<_ÊAöl$Y„¥ Ì”V£N¨ý¤G %Av4"Hð‚ãŸÄy:'#ŠdbÅD‰‚DdÛkÑPÖC‰…ô&cb/g B|µö bð Å»™7Á’òmš–žk´‘âžÞ!ÒØ,•ÓÑ·)¾Ä32œ©~Z ”Êçæ×è­¤ì&¾”*ÈmDŠ©ì1y’h;}âµw]—ÛQ'l¤ñ£n¹­¾ŸSj(˜ãÿã¹€$$Þ¼@"<ýç„•±á£ôE6ã+Åg: ¯‚C“üN<ñšcò>%Y*´€Çö\C†P’ >FgÕ¾Š¿y¬ñø>º\&ö×yh×è.­ZN²ÊòǺ‘¢%Æ#6KI%Þ±«S€@þ‡1:ñ}"¤dŒÓòpX~!¤D/ò–³u^«õ½6ååɨ¦44‹`$*Ið½ã½§ƒFÇ#Š»J£14PîÜàŒGÖŽõ@!""'”z)¼¯Â£“`å‚{[:+ŸcõF°ÒFŸkïæñÊ£.£ôdåÕç¶Å>1’臄QòÜûVNä΋+¢j<úXÉ,k>»bòr²øÅýH`Œ°ÛDXˆ8&PK_‹@ºÈ©!<ËJÊDàÓâ¹ä)»>"Ì4Z9ÒÁ¡Ú«夾i#3åXm>r„Ôq±0N(lFÜ)>8ÑAÜÐ…`D¶²d(Ç¥”Q-æð|qU“R%> OR”çÜPÙóevŽÚ!,0 UEíÙÎ×'¡,Fì#`üY½‚¼u³éy"ptþ‡ 9f)…—\†}"c’ÇŽŸRçF»]¾ÈÅJ“ÈöN×xÌCÏZ<*Ÿ˜ëýWÆJ¸ð97[ÙÒ—A¤A| 8MÔ€Á3Р+yËÄ¢ )ºPuØ&yH1| ÏÇXáv€æº VZ:÷ož¼uù(ú †·ëØ Z\º‘c,¯2b»ÑÑj™Bõµ=XóÌ·â2#†x$¡'…Y§IˆiÚGR¶¼²Vãpž3‰3jXQ“Š(î Àñè ÏPUþɯ'¬&B“CA¾0F‚KŒ)…Ú› ¦¹˜k\ËØ )Úœ&î$Ë…+nëP)¼ ¸¼09.¢8 wG1Úü·(ˆ¬+Ý~ÛB6ÑôhWSF¬À«ËŸú’cÛÊtØó]‹›[myÒ3xŸ•Òãoð—m@°wÐJ\K-;ú“ß ù ŽÓÊæ$£L7ÉGbuîÇÃs~° Ë“—ÓЪ}W×V–‚åß[*ñ»Ï‚ÚE ®y5 ͤñ—¼3AÈq¶ŠÌÓö»ò`1%£e-a]Bϸ8ñN¢2¾ ®+Š·àŠžÌXû&Ýø-.Yw» \䉡x\Ô#.¬©Dss;â7ý­'2qÝ0£`ÂJ%[ì—]xW¬”*S)3õö†Éˆ•ÚDšÜ‰Ç#,à}Nè³=6 u^UÉ3TóϾ…˜°ÐŽŒÉLˆçGÆÆè RBî<õu){Ýï’:¯µš;Œ ¿ÉÇ&%)ÏB=·9y¡†¸¬´2ÕjzŽ:²¯2ua?vÄO´PýjlFž–·O’ÒÍ]Ñ„û‚bÑ^.Ï”ÞÔܹEph¢é.Dü:£Ò쥖ºr©íyâU~¨Ì:B¼Ýʆ‘žSâKz?Œ3JSSøÎßɆ:"™R^²ÏÍ)ÝTòŒIñ{+ƒeAêÖ_UÏöý_7PÃ?ëbýSÏ“\†vtäÆ8â]!DA´ÿ©y¡†“ÂLB²æÊËg”ê+ó!*»Û3¸ðÍÄê1‰¾ïï#ÃæYJߣ’&sŒGÜ®äÊSlÝbÔYùÖŽom!žG·ŽQ »š à%²RŒ?®Å­Á’q â²"µr<çÜsĵÑÔò§Y6“°gþ²Æx7ʶO-st9J’cÁ’Gå¿ðÞR$„Às9ûånçøo‰º ‰fó‚ åµ¾Œ±›ñ>>|`¶ï díò¾ÈÒ¦.4|¦Aö¬Ôñôd„ç|TšIalIÿ¦ø¸HÈì¬éö¬Úx6>x=Ê®BU÷Jra9üšæT¸…šŠiýíg S¿I}W|½S¤éÝ ÏOfºÓ4ñ‡iœ:Ñ'>S~¥jŠ_‘ZAÖ)½$±Ì¥ÖÁØ,v†‘Qü- 'Õ'4&8eüÝJå¬ü˜Gó(¬~} ÉQßÿ£=«‰¬¨ãŠ_&îeTÍŠ¶ö•—Ÿ·R 8À]Œ|FMÆ3¸1 ™»lIÑœE¥!µ-z(—ƒÁ`&øoá°Òu—àOÑÍŽòèY‘?º˜,±KÏÊ?mίԙÄ7îŽIyw ôq˜#ÎT•~WjÑ.AObr¼ëh„C¨(…V˜žqt™Ã*!ÆoêsÉ}4ÒÄUÇ{Àc’ÃTi’ÙköB¡ìõå0b–ׄëboç·k¿\dè+ÿ¤•Yæy’>L<£ŸÛÇ툲b °—î¼#}5^ ¼í'3T©çû™(… Æï;šNL©4Ä IÅÅ0¯v%Á¬Ù+F7Û·î…qÜ÷Òöùó q™ÈJa±]#ñ —,û”øžÖ"Œ¦9†Oyo%ELÌ©bÂD"ínwì=3t÷L ™1$L–&À„mÜ'9¢1’”™•Þˆ¤öÓí¸/´éÔÄ!3ù]I(>0{ÊÏz7EÌڇᾂ"›ð‰ZYÛgó¸3)´8S€‘«ºasεzBQR¬œbLD*˜1ˆ•²#L?y‡Ñ ½W>ꤴGn—1µÆ>Ë»þ§ ©Ï mŸu©' "D23!V6|b yŽêçYRµaÙkè)·ƒC •4ÁÈ€¸"lþÅâÌ›kY³9%°•çÔò¨—HÙ«. '…»HÉFèhªy†Ü¦“ÉqVâZÓÙxk´!9à ô *Åö*R~"]là1ËHüfm ¤ÒnzÆ6ºPSZ]Éód­Fó\öµ)URÆY®Ô»‘'µƒ§”z÷¸" ëC9Ðo ‰£ÑäÖÇeÃw4Ö“ÚAÍÕTU/š'Y ‚œà¡)4ƒ”†K2E§´©µ/zÔ?)Ë™ψOŽœmÛêÖ€dN»¤Ô[Ða ’ùpt1µh3öâ:%ŸÞ¿Ñsjë$áX'fAò’xø×ÿîãúuýz2—êAþ䯵{Y]¿®_¯¼4•<ËòA‚éȵk…™â_\Óóׯë×úk¡xèQÅÃ*ËáÞM§ûûŠ#{‚KW]Pìí·ß$8uLpy_qd§ÃÑ#ƒÌíÎk¶Š…̨FæºA¸~ýA¾6Ï0Iý*äúåHüNî‹•±fÀ|㫾‹ê©ñRI½{6ÇPè^¦ÓÓë@A rÁkbˆ—Ó;É](š)¹yRÜÑB‡•ÄÞPeŒÂI’¦$jYÌje^"Ât£h‡Eês ß—;'¥—aáЇä:Ùµ¥ðÆþê2Þyæø­ç®< Eƒ.A‡Ùv»£ØÅñS¸éÈÓpÓÞÓpû±gáäîM8¹{ ŽÌcwvdô6S§Pt~rBóh'â§uêÃ×n(?‘Kö÷(òÀ•„«&ƦíO©¨ÜÊHõS«( Ÿ_”I}ŸâÔCÙYyXÈ—¦…–Û'¼>Ù‹Š‰í<á»pFÁÎT¯O©fâ™…ïSí¥ù‹ ‚ëç¶Ø]ê-ýÙ¾gzuT·‘¶×ÛêZ'ôq~á}Te‡ÝÙ<íØ³ð©§^„»7âî_¸ñÈíeAÞL ÃVýyb£àfÑÚƒÙ0³ˆÖIùߦ8·Š‡–oîÆ`1†`-¿y‚)¿ÑSÞ# 𳕽*Ói´-ÎC^brÓkßÝ €bíô¹=cš<ª>«×Ú¸õÉp5~IlY!ÏG/Hƒ) Ý@Slâ¦iŽÂæ2ˆK¢Ï&“}Bâû6nâs´g`£x¦cBý÷¬+Yó¦m¾[…€é’F—2òóM¤|Š%+Bæ&B\°š 'â^€+Ÿ†¢½]è9GÊ\çsTÄ'yNZ2 ÒÓÂäå4,÷Ú$ZJJ¡H\IƒÓïÕ”ZñƤvŒèHtÕ^M=ŒÅú1ô ]X¢šxwAê„T’<¹Å]ºcš³ àÇÞõqÿÅ÷ã“q)z\]]Â}Þ‹û.¼·Ýýa™ÇmÇîÂ=7½ æÎ/-<7¼!ïœ 4Î{æô‘EdfÒ¼ %c›`%åñÞ+«¨¬0¡~ÿÞ·ö¯gëÈhVÊ2ðÊ9è>yX3§"CV8_?ÉrÈ( Æùÿ)G³ÚŒ‚yÿ¾ŸÖ>8ÇgH2 š½ƒ¼ˆ"úÍ2Õ@´önOŒÒ”zÆ…r‡’¡øÛ—wøõWCÔ€îz³^­GMéÆ,zS’JLyò!¡‘ÁGÓÔ†WˆÜmf¼[Ï,>™L§ÍfÒC1YçT$?¼ÖÐÙ(£?SÞ: ¦‘b‚Öó¾z"4襦½eª&ð%ä˜xøukò*ú ÜpR0ð„ÇYLÉ+ˆüõþ/¼éÿ WW—ðû}]Y=_ø=|üÂïá—ïû?ði·þ—xų¿;³£œÜ·>ú!u¬ôÖW¢$ê|ó±±ÖÃaŸÅJ9GéÂèt‚N1n|”¶‚ÉoÚ<¤)oÏxSVYÎB"!ßÔ0Jf…Õ¡Üžºñœ¥|Nx/!@ÍPúô›¢sºÂ“ ʆ,e¢Éb„THpIÖÃFåP®eëÄoðçݸ£`¨•ÍE];”à®ÉéÓqÄø‘Ãpë Àˆ£ß¸]MHü))ïA[ÌÖ’¹h"f+)ôº–ûñcâ|CJ!uWÑØô‹¼ò|²WAF‹[@{¶8–!D` VÈÚ3Oe‚ߨobŽ ó¬ ÷eÈk®L‹„Âè²ÛîFÀ0>ÊÌC 1ÍŠ¿ð‘Æï>üÿÅ„KÑã]gÞˆž{ žsãgàÏ=ëoâäÎM°<‚Äulå[—ö”#Î %)tØÜ‚ñ†RAi,3&O®ðÔy"ÃÞ·NM½âˆœ¾7¥N…ŽÿNòǹþi^ÆÑj(þÞ Ì ÈeÏ+ÈzÅ “íf}™Än²˜Ò"4ËÕ„¢ Åĵ·!®ôhô±pJcŒÚó¹,38¤,<Ü\û¥D‰´xË Œñ+y¥…—,Z€à%öû9´n <ꬓX)ð‚Øä'½=µ--f3£±‚¶;µët.qø!-ëg™øNŸëôQLh¶ý¯¨GÓ"W&ÉÁ‰Ö[Gúó&ˆEhÈD[ÒlKišo2ÜgME¼Ì1kjm3‘Ѻ-l ¬³Ú£@ÌëH™•ñëâö.¼Âp;)}]9—hpÅsÜ9ñh¦?šÉqãhÝïgÄdÁ…ýGñ;þ<ÞôÀÏàúµì÷ñ«ÿ·xüêiüwþœÜ½ Ú<£Atè´GœùÜ¥‰mð5,®Iƹ@…eþ©(Ç„V` …ÎÊ&=;<Ñ(B¤•û“=yŒÚ=\Bãƒã]3|'#ˆŒVx&?],àò:K£´ÜyÖÊ3~^o{ŽÏ±.çÒGë+k×[ŒqôÍ$PŸ(Ìêq‡a£¦p_‘Ñ {4)<´·.Ø3d$—”, +7¶ÜäÆò0þ•PI0Uênõ˜>ã03Kà2èÅX†<„c«HyPÙÖ©v2jT3yÉAó*ª6A(HÆÁÆ:'ËÄ,¡ú Qø`oíáÉ÷4]=#׿4ØÄø$ó˜ø#í‡@[â™Ñe2zônÄb{ü¯¿ûõ‡ÇÿÜ—¢Ç[ùÿá£çß…¿ð¬¯Ã]§^äíîº}C7¢Ý0' Š–¢åeagûaì°ñC²‡í.Z£éŸ­š| Æ{꣹ÀÏkýˆ4ßÔV+ËKÒ• Ü|ðIrAŠÒs>È%ºá\j—W¼ ƒ’€œîɰ.±ÝÛª#fu†¢½`|nT†Üë¨õÍ`Fb@_Æ0ËÇh‡ 7¼¶º™R®˜¹a9èHHš‘ä“»ÆÚ^­éIH²%~0~z&fêPsýìáœ>™Ÿ1:M•*'E”þ²/E1¶ÚühƒÁìö³ ŠBŸa‘pYþ@ðÁ fCÑ>‰Vú,,+ö88$&—œ{W‚oé_nGû§ƒ›£xvÎ’’V6)ü½3¿ò›_~ (þA½½ò^ûþÿo~ð?`¥+ôºÄª_a¥=ú¾GKôª@¿j1l3®6˜ÌS’d൒Õû::!ÙeÉ}k9ƒž¯ cTŽ9¡ Rq°a·’›Nc:仕*¨äqå?KÐëoØx 6”íà“¤Ü&ÞÂÄß•)&¦FÅg|ÚÛ‹h7ïWš{—½šár+™”ñ›¡©÷åT]Î;¢‡Çë 5‚ðº6{U ÞäŸ"’}tbÚÇ:¥ÐÑó”’cÆÄ£j'h—‰‡Ü.ûø14ÁfBÝí7 c?–žO™±€w-·¿ò)ç¿Pƒz&2—ÄcïnÔ¤Ô™ES†ÅJ9}7ÊLèÈGÇ!¸‘oEzAí-mýjÅÏ×J—xãý¯Å­GŸ‰O=õ¡?TÛN¥³!;G+é è!}›ï! `¢÷A >†ÃejÌÀŒF™üó‘¯YÂ2h㬬&)ÄÑ”ÅT¼:/Ž@20†PM^{ЏÂÌøðóÈ“Æó,qZÊ÷ß*9TNŸfc (j°ôh¼r2›gàøC!—Ö_ÃsTpWò¡~b£Ê-´¹Û(RNɳ/{Yj^#ȯpú³Á‘VÇ´:{âgsm½°j•;Öz¦Ä«½Ã‡‰Œ\U&ÉÓ5éÊ@¼‰DÜr×­nÞYË{® %ÈÇ¿El2#çPþßvZ¬ƒµP;ÂÁÃŒ\Bº`.+ïÑÁØ(B– ¤Í@âGö΋ÀT>[:ëZ6ªºb\Â8éåo×J—øÕÿŸXö ,u¾_bÙ¯°êèûz]Aû@EÕÞ> ÿúZ‚6–:2æÎ<$ç¾Û%¡Z—Yΰó~ AJH= ‹•AY\<ÑÏ "dOÀÄÆÎ¥V¤re ½pàÏuìSè\®ÐJôyB9¾gáE:ÂÊ ,ô\ž¶gk‘·¹¡$ &—¨Ž°¸é 3 Rˆ,|ñî/íB<žº7uŠNœëýÆ1«„BÀÂŲ•3vRcJxAR™¶)4GD„*¼Óc`ðûqv ïký%£7>+½ÌÜ®N4Óúeød¹óÌáž8ºâerÎéÉF’ÿgï„âö粞OJ!Otø+±>»®Ö0*âVUñO~óËðGñ:}ùãø­Oü–ýË~U¿há e  ßåßCu5Ä}‡ô¡È =º”ý7þâÏJæ7]yL”uy å?² ùiþ©hÏ J2¦ŒŠ…¼à2œÕ`"`ãÒžHLŒëløBÙ†[xX®PéYM”™9òSÚPfÞG=ãmÖ½9=A–óÓX¬iÙÎ*b¨…:iÏ„h¨Ó.ך(Åè7 •Óê_/™ç†¦fþŒÐ²\\ ²šD‡„;´ðjÔ)Á…,z®ùBq9‰¤PÛ‹Ê_¨õ†yK†Ñ‹xÉ1Wji>ÀÒ™)8O|£Ì¤$Cü8µÏé¥ûyÀ² £¼öjPlpuò~ûÁŸÃåëm§ËÕà¬úýÁ#èWX­šè—XõK¨®Ðkß”¿}ø hÆß<)»çýU”Ý«çU‡R&¸¥µ/Y~3’v9â"GÚ++Ü!tÙ>kü¯h¦KÖ’V™XȨNx£Åe)=’ä‘ NGž ÏÊÊè ÕŠ×\6íb BOûd Ö[H¯m7>WÏ›G Eˆ;ú‰ÊÒ(l*ä–°ýuåÀ“Â>!JÌ å»’d5 ÊgwÉ”ehÔŠœê§ÜŽQOdfºÐ9ï¿C)ò„šý–‰ÂäÊrþă#ÜX$m)„>܈ÆÙøꊽxL™”‹šÎt&­dʃ>°6·?òø»ðÿ|ôÇåëêê¸ðA,VûXö+,ûýÁè«~‰¥.Ñë + 5C°’½á  á#acÄzŸPf¬ôSÿKî›è\C¾´.6ã@I©™ IAhТÙÝ+Ö€*‡êó ï\ÑgE%eqòAúaâ¶ïÓÅyhªµÒ‡v6˜¼d\‘ßÙn<æòÅ›>ºÇÌÒ<6þkóEžÔ†±:f^ÝapLâ 2zA¨S›$¥Ãïo2ƒX€œc †Y³Ö®pH,IiùlmÓ=ÆFE oÄ«™ïp )%qHmJR™+’!™ò§Ml¸‡e €²|+C[(²˜fàJÀà“ ïl>ý_a²-Ž PUü›÷üñ8×á]gߎårËÕU¬V ,ú–ý‹~«æDhh Õ>æTÑkÏZ¨ý«Ãœ‹õ/úap³±u™ RÕµp™ð÷E&y®sŒ†ÀJÚÞñ4!Yó ô&Å0àXsËWÆø+R©«/SÁmS1n(k÷˜ó  mŸƒi÷ƒ=4.Œ»N«æ9‚Ô¦<üƒÄH1˜ÂtFƒÔ¤òtÚ¯ixJá'žJè¶4ñ8:¥žPA™ãuKDª£ O®rÁLï¢]O&9‹l UÊüIëP—Tº¨|Sü4×%”%cEܪóE1˜8®nñI+!ÖAV ã} c#£”e罃§pP}irÐ Ž•Ÿa4AxÝÐÕ½ŸŒë#ç߈ÿý÷¾ û«},úV«VËV«–Í øäpßc¥CÚ¨M æ†;´û( -Ôd¨çx,²ü$@‘e/) NxpyŸæ1«  %85§(9Fåx{2Til°&´é×l\¸ÙAƒ%VP{•OiŽ%FV¸4:)îŸÕ‘xfOÈ;©„ãì^ OÁæ;5ˆ5Þ1ÂÝûs_cu9Ot'ÝJå6PÕþ¬IéfÜæ)Cx¦°XBAEÝãÉÂèš¶Ö19,l˜º7ÁÄšrŒ%ô¹µì¦x*êó¤‘Tú${ÇË„Æ"H)õÄÄ{RêJt»=’ÄÏx¹LF  ÁË+~)Ï"_ õÔyü]xÇé_ůKñoÞ÷?b±¼ŠE¿À¢_sý½€e¿D¯K,WK(Vm‚x…¾oqöêç³h‡}ƒ¢•-Y{ö8¹«9še,eê¸þUÆ4i¿'œÄ@‡•ÖPu¨%VøNµoøÝc]8 ËaƉǾ•”ð"áí&$¬ûs’1¢2vï$/ɶ~¦9Ö³ðh>¶ÍÑ1Ö™.Ÿ{3µ/•£ÕpóÁ! : \?#&ŸRgrš‘Á·Òd ýv°8'†µr•ž0„ÿ²Ž$òÙª“I,œ@ w©1 ñ‡Èe‘«þ<-ëûàXç›êHÆÙƒsû³'‘° do†PPTŸÀ”’–Âgî•$üÍ2Å‚œœŠ&Tϲ.ùùÿþx^Š×|à;°Xîc¹ÚÇR÷±\-ÛÄð`«z] _-Ð£Í ´¿Ëõ³a]=R¨Á‡eQíô[»…€ –ˆq“‡½¸Ç1è/2›qd… F4¤X³úRž "Bö±ØvàJ’UâA0É …'­Ì‘Ur– *¿íÊšÃS4&˜†Vwւ֎Я– #½õ~3TeM^â±¼ÈZ¤‡ ísþN´ŒfO½ ÈíÉÓÞÁ.îËC¤¨VÚ7ax· _êV…­¼–•$Æ<ê0_­UA-¡ÈË—Ÿ²û›Ûã;|R 1ÍI ¾Ç;¥ŸŠ!#‚›Hx £ßï´wLÜ’(¨E°»]û‹Ÿ÷8¤Æœ mà—îûIœ¾ôqüñ½«~èÑc&:¬–¨ö˜uó¶±0‡ YU`†&¯3tvóÍ3;A§ÃB§ÎÑ¥Õ' (dt×ì"sb˜G%ßÜ·XHqäMßb *)c¢Û”F;|*Q%ˆ4LÄðq ¹QÐ#Ñ8ä=ïö™½ü¡y±È*vUͬ ï Ü/ñ‚XAZeÃg>K xŠ/¹\°Å¸QÛTͼrvÒ: {†¹aÝ0qëåN A>4«ñÞú:…ʨOé„1æ˜$ëO’˜]£cµÜ¤Ø„[@Bþ5mKH±%Låæé!; !ø‘•¬S[ ¹R^~.õÝ&V)Ì’ÆÛwëºõ½iù´©”i‘:ÍÜ K™iމfFÿat\A2q7–,ƒä²]¤ÒR»óE´!ú"# Ÿ°²n&±à{ÖG"‚G/?ˆß|àgqý®Ÿùè÷“¾ýjˆÿ/—>°´ÔPÑa@?¤„¶Ã=†TQ Uf¤ «Ÿ<ìÆ4ù‹i]Fé~Ï 'GDá!‚¡»3˜"ÍЦù]¯ØeœBPL[mÕ»«ç9J}0KH_D{ü™Ñ¸’Ä'„I{wd´Z9dΙ;±oRšé•àsÔÍà-nŸ9He¯Î“´L„ %>À¶9^ÓR†äE42]nHHùe1"kËeXñ„h³þ3Zm‹Û"”@‚Þ¾Ø,¹ÅY° ýxèC‰ÅÜ&Ѩ“g¤ŒƒÔWXÿ9µ7³9Êæ ´Ú=#ƒÁÑG#kjà-ì´† úÄÞ}úMXéׯ¸ÎíÇf7àØîI,tý €`¦ ™)øšÂêæ~ÍT ÒµC(ÏØ<Žà‹Ç~9+„\€EjÈWÞ´&0¼©qYsåÞrxQ¯‡ˆ]Ƶ¼¯IãÈFuÔ>‚Í4F†ÎJ¥ÛR:KÙ~ùñ*x*ÅA[O5$EF-qG¾9Awã±1-Í=´xî#æ‚V¦gH¡y=äM)µÇ)!ÂUO›p%Sq:2…æÌG #iíbŒœËϯ’–ªúÓX#¤¬(VÍ«Û$QK´ÛÀbt-60(ó€H é°– ÍÔsÊ]½o{îkb‘ÝËÖºðRˆzRüÖ‡RŸ÷rFP@¸ô©Àcþüy QBñ„ bê!ï.ª^ýþê2ÞüàÏãú•¯_yð5xÿù߯ªïÊ_¢ï-t…UßV kx+] oÛDô¦]uÄ^A´ ¤4eÛ K¢&ËØ¹Œò ðògstÝË«silØ{èþЀ„Ê¥é´u 73œ@ '_ÅÇwNÆhÕSYâ;Û0®-ÓÙ¹ò¦—ÜÎÆ™Wdc,æF½Õ¼=®ýsζHR»(+©] î6ž•è¯óÞ¾ö¦{,déxáUêc2U( .ÑÀB–ú,Ó.Üá%ˆÁÒÅ=æÙ:\(¹»í±N¸Mšë$¶ˆ¡)%o”‰&%Ê œ3|"Ç·8ßô'Â[ÜsB¡¹, h Á%˜„úyL’äÓ¼y—–çñÄâq\¿Æ×Ç.¾ û«ËèuÕ¶ŠXµ]C‡ðOï+…ÛÆq} õm›;O@›Ap$.P±¼ÊZ)Š0²×dRö&¤.ÿ£ÍäÂ;%I{Zñ¥Ä oðlÐ.»”Ågï'¥Ìm¨Ueà±ýaðÜëƒU"ý¡$ëöƒÄf%åÌsŸâ@,­·ÉÛ9FäÂF†õ(bÁ:S© ªéIòKÊ^@£šÇ.V63a·YarÎLòЯÌ+{VÛ“JŸKd¼€$,0Šò¹¥e†¢£N±ò“*é÷˜Q±½òó3vø ïgÄ‘ÏËÍm¤V“F· ½3XŒ }±0Ô¬{?ZÎ,ÐÏøÙ”±Ä[Œ3ÅœEðø•ÓCûõkt-ú+¸°ÆcüÃ^@m“¸UÛ+¨_ÊèÊW ÛvÒ½óÊ„.oàF ;ÎýŠøœî±r…†v]@h)‘ËŸ%ÑÞR–ëPAb Ðô…U!(Ê^Ô±ò7šJ^ Âh¬ “'‘%\+'ûã`’+òp6ˆ~3¬2J]åšÛ¡àL!ÓGl²¤èÝøPã[¦>#Æé_tÄàè_bsj`ùKóõ§$¤dJódi9:š #$â]TgÞ}“•{´)ÚÃÆ î·ÂÖØ˜N9õD›d²ËW¶|MçŒsOÉëQÄd7®J厨oÓDFNj}ÜÂqÊFŒGiŠ¿0ü~iqׯõׯ=ü o«~WÚ·}†´Ïa2x…¾ÒC‡í"VX¡m!Ý&$h!¡|ÙùÂT’ú®Êhd؇ÏÃÏ ¤%egeÛwuëx`Õ1F $BBÆN’åLUíw'ÓJzi4š‚ãÊþM™s’¹;ã)ºÑxA†)òj, O{þ¨zÍ{ Ýd†|â’:,¸Âd©¬Ú Æ´ë=bÖÂ38 Ïf!Ç…F– Í v4ï EX©!ÌEC§¤ð÷XÃ@ÖÙâKRÀB·jŒãwÉxÕäSÎ䌣lÄ&»—¦ÐDØøpˆèì\<£Œ !<F$VGk|Šs’!ñÐéÚÐs>xBç®>‚ë׿Ë6}ëµ÷cV}ûoµÂªP¿ý§í8IÛBzP.MY´Ôɰ6 …§¾Ãfâ&@ ­— ¯@’옭ëqSd ÚüR«4-?*5ä:…¥Ê¸É¸+”¯¤gK;.$Í!¦±\êà&´_ò ±(­ÌpÛÒ„ )œB9ºïæœP¾g¹:3]d×c>‹®÷„b:ÅJײoB(CúPÊq0ó|$·ÖY˜‰'¦TA Y؈I¡MèÁÑ”t¨ u\(v¦GÉå•Ü\¾_ÛÀÍ,¨Ç4Ï"± »æF‡n·Á˜á^gÃÖ‘REšéåpAâküΩ®‹þ*–måëõkýõs÷ÿKô¾è°hßB<Ãäð07Ð[(È|5/ o9êÃy ×ÈÖIaFB†q|hœCœÇ'SEŒ}l¸ÒËJƲƒ h@p"š{"0+ÖÒ:iK4GýAoßÌá᪸-CU‰frU©¦dÇt´ pÈÄ^JEm‘²19˜>Ø:Ò&,xËY?è3·Á;ÉBÒµÙú3n-Í1ƨ8ÒNs'ßO|+®_8®‹—‹·À/}ô?7%ð¯§?óÝØ™ fó;ó»»=Žì­pdo‰£G—8vt…ãÇ8zd‰ãÇ8~t‰cG—8²·ÄÞÞ ;»Ã{³™b6St2œ=ܑ០©^¿®_À¦CáeâS(ÿz ‚?+dé…ðŸZ4á(Aó¬9®ËíÊëÄQÁË_<pÝ 8èÒ¾Ãj@tX-û ë:Ìf3ÌgŠù óYýE‡óe‡Ù|†ÙJÑ­†ƒç»n)*œˆ>I ¯_”¯93}à5”N™] 4«kY#d ÜôPˆz&bŠšœ*7.ñ¨_ßü7¿ͱpJeD KñNþŒdĹÔÊɬÜ0E4Çé"¦çw»˜Ïæèd†né:f˜u3ï¸!Ä×’ÉœÄÄ0gÃÙD¥/âd)”‡aÙÚš>[öYˆ…LíÙab.¶@@ߎv¤mèè»¶-(T#\¢­ÂØõA+iQ?Õ«é}~A¡ýT•Úá¤çì÷ÙQmìÙjí´û©>÷•cwö ý>¾×BÑÞ/™nGð†x®´cÎ(Väq3FœAJqvv•ÜÆúö9îB¥‰€rù¹¶dD8'jWŒ ߺöÔÞÔl_¬¡+©§«*ÿ0\ÑZªÈÃc쎗¬!гs}ÃB2…j‡ñbzn°åg‹L¶`Œµ=Š 7ª5›äÄm O âúuðuañ(†Q»½*¥‡ê0/`s}?lÝqÿž2¾TW®ìÄ<ëîŸñg\{§–iɃ¥ÊS{Pü¿|╢ĭ©¾A%䈃ëFŒÄé,ÚЬ’|F=L{d]rZ4§ Qª3Lî)U³pƒ×>øø²°ÓRÞ…7º_ç¯kZ£ó±öH´…O†‹åÕ«t|(¼«j·4ŒÅ_te1JÁDšèUËù÷žbÛÈHýI¡ä€IDAT•à8}-:%ݯD#p¦)4W=ÌãMõ|-ŸüÕ(#@‚8Ô<¶øÌû”§ôLŒz®ñ׿PH¢­¼Ò;­ÇiH\IÁ±÷À€kx\SÔµm£Y!Ö$‰¤ìGÀEÓâ„þ‹1ç[¬Ó}“´bš?ÕWo‘ÖJÆsm1·Ì“¨Ñ¾Ø-Šæ7W!‰ïÕXyVeÒ¬Ì(>Xwl|$éhÏö0u"ˆÓ¾¤¦ÈuÒSaéù{šmGØqPÞ”RrE­ã‹Á]K#6°Pi껢êÇÑ*ÿÕÎ:æ+H#DÆ‹OLÇñdDOEú®—ÊÏÒ”òÓÂz%£ £êëúŠ0žHJÏ,Öô\9'ÙmŽ•Q¥øðŠ´ë:|Û·}þÙ?ûg‡~÷°×W~åWâ¾ápÇwàØ±c€Ë—/c>ŸãÑGÅ}÷݇ßüÍßÄ›ßüf¼éMoú¤Ó3†Æõ‚ŽÒýZØg¦íÐø¹´UÀªm[6N€ÒvJàÊUiœºßK¢íF„°Ø SCˆ"úKãPHŽTÑ“aàsw}ÌÁÂÍt’–’ zÚ¢¥JÖ—«¹~[ÿ`Ywªdyˆ\f]Pù3}ÇÇg}Ögá‡~è‡ðå_þåOãKÆßxo·‚¢ÇªícsíŒÓE ̉tÄ(Öl€(oŒÆý$=.„‚q¼z"û$^*MŒJ‡c%…Ì€0êÏ’ž×Èð¸×ŒƒÊ<ž]Z¾›:ÎÀǘI±†äIä¹J±ÓC)¤Íà×tΖ ^$­‘êJwê—.4Ãm‘Hœà€µEb6çFÑ;ö^>9¶‘Vý /Lí“­ÓÁúæ#ä âš÷z0Ɣ˵—3Éh3;ÎC†ó$¾©C²'শ½Ð\'‰X5B€#µÃ`ÃÈ;ÃVÔl,Ò¤~¸ ñBÊ*q%`uÐÈÙp‰–Ë%ºnýyD]×áî»ïÆýØá{¿÷{ñd¯n¸ßñßqÍïÿ÷?ž÷¼ç=i:&Û*±…°iõ§Æ]ô ¿×¾Yh!ÌÞ†ù ÉRÂN¦¼ó!IcSÄÆ>né9Ú߸GãˆÒH9Z >n„N1oSº!ô.‡Av‘é)eš¶MÚ“fZù¹ÄƒÐyù\B£¬š´2@ˆUZŸ)êz™wñ95—OËu„·È“’ Æ5×%éXŽã°2õt.¡NÊ 2y$¨Ž8ýP ”+—”'^’&dG,é—b!³dôoÂ’:G&•ã=r}'….J6# ¤–ú×ÛÖ¨ÕFÛÈ2nŠL%ÉõñJ<‘ByHZ?)æúf °IñO]ÿàüüÝ¿ûwõN½¾â+¾wß}÷5¿ÇwàŸþÓú¤hXw]í/d1FG[ú¶è˲~ZاGßÞ÷ ½?Ûæpõ°=Xº8IŨqCy~$0ã ¶J޾©¦m‘e\gBÂt2@£Ÿ1S!¹Ì([œšÞóšÀ¹<Û…7^S×W¾Æ@ˆuݽuœl­ŠygTn!×ëò0!{v~œá7Ó!@n¦3Ûè˜bš|g…A*Xèì]‹h0ÆËRîhn ‚Në+î@î£&|CèÊL­øƒZË–ÜÍ1¡Í()Ÿ><Ê4‚1 \R+Z+‚à dÈ]JiMÆNR‹ wÜ™BmNõ§.¥^~VS;E…t¸÷”&Š×\"’âþÛ^ßò-ßr¨çùºýöÛñ­ßúäw“}Å+^¾ð…Oºœz½ç±_‹Ü€6X¶NÀ× 7Ðûñö¢¤ØoR—’Ç“¸ !Š˜Â´HåúÛBu¥DX æ Ït´‹ ÓÍ…×Ù|€+Aòî‰àªò)ƒšë¥ÊÍ@zµ–äû.û˜»"—ï‰>j†Â­­Þ?iî4Š ñVÀÖ®Î|!5a9`/ ¡Òmqd ?®$0æ1¸NËY(•ƒ)C(˜ëãNèX9IŒ eD¯ü‡ŒAÙ»\m¸Œá ±eÊ+ yr¬u-+]µ!–[ïƒ9Û|“ÀYµ¿Qþ´:rü‰)|âkUösJy˜¾®5ÕòyÏ{Þ5#ðoüÆoÄÝwß UÅb±Àjµò•¶9íRió±ñuüøq|ÕW}Õ5ѰÍUm¸¥yúEF¢—U¤d«Òˆ1cŽ&KBãM}ªÍ~Êj|iX•{V¢’”/í¦•ÕkOÓrëdŠá")1ÿ¬¤Žð‚½2ºOàÍg«Oã91äMzÀÀjm’Çÿ­j‹OïÊ›i»EÉŠ:ø”}?…ýj1×8¦Ö§†e}!LW£³›²ƒLzô? ‹w{ SÏ$‘&åÏsª•Å>µeÆEÁ“9¦L=¿XÑŒOz¸þåðSHÓä6)ógx+b“dyud2R‘êÚ3‹“Ó…€Ñ˜…å5{9I؉ï$äÕBKHu Á• >`¨ž÷n¥ô‡D){âšBÿ¡ŒVÄ×2!,">ñ«ªè:d}K£T,û8}úa<ðÀý¸pá‚Ó3uý…¿ð®ÙˆmA-x¶qjì|ÙG6Pó4{íÚ¦|Ö yB»>ŽùÊÐîñøDÁi’)о•ér1ˆ¬ 9έl¸L]¦ðF…_ûø™²³d<3¡›jÖ’µQ …Ó¤@UFù2Ò#ù`£VÉ ÏF*6©¢L5ë Ž>Œ¡/Ðól©l{dDqœ=K™ ÌkY]*†÷ÃÁÌDfžk@‚ý"м… µ$Æç÷ZÇ9ϰgbÀú£jÌ#¹¸ŠÈûC`sdõ]PL lLƒ@YBϛ䬀̓qTÕæ j—[“Ù¹§ø¾Œ1Å0¨#nìèA²´øÃ¡rßL\¬(ú¾w7þêÕýáÄÕ GE×öÄg´òŒg<¯}íkñÊW¾Û^·ÝvöööF¼ã󡽿ô‹¿Œ·¿ýmxüüyÜu×§âå/9>ÿó?7ß|“§  ÇŽéS§ðøãoMÃá.æ¡¥ñ‰pìØq¼ô¥/ÅñãÙÏ~æóyÚFû‹¿ø‹UÇÝwßíq{S"Àr¹Â›Þôøþïÿ>üʯ¼/œÇÞÞ.NÝp~åW~o{Û[ñµ_û5xîsŸK»â ^øÂâ%/y ~õWõPtúRd*¡)¢˜°í""ÎÞæ°6À*œ®iÉÌØd§ ¦ÞôõX)„E1©ßdŠÖEÄmÇ+£O¬štÞš¡q¥AF†(S`ToŸB‰úÉ…6â5 ôo[k‡¡!¬™EÄZ×+ƒ!°Q”Éñ2rAN¯µj*:ÁýÄ€ahH°š7¬ÉnÄ<§}"„£„|"D15ðÍjY®?B!J¦Ø˜«B Û¸Ûš£èëÚêËÍ;îèþœfP‰”¨'ñ:#Â.ц¼ïvÇ8 &KqBˉ±$t#eï&x+©héÂ@F+it•ç«…¯ªpÜ ¿'D¾äþeж0v0ΛÞôëøöoÿñ®w½ óù ·ß~;Þüæ7ãmo{+¾å[þ{|ú§¿8†M1ú©ë%/y ½ûïxþù?ÿçøÅ_ü%, œ8~ŸýòϳŸýlÜwßýøÙŸý9œ>}ßò-ÿþÄŸ¸gà²tP¾è‹¾è“`dâ+)6Ö¶2dmêÛÞVÃTè:GÑ;zÄZœPÍ XÕ Ÿ#ó.\†~hã*­atTya`‚—Œi}\{ H»ÊlÈj‘X˜À?y NAZâœÛ:¢)N_ &ÎgwhX1±§;ˆ[cwV{Üʯؼ´ÑBíÐЛÖDjRlntbœ…ø,É/’;Ví?¤%jÙŠÛkU®“­.½7è)«è=›´!a¯©¦ãB0Ü•”D©£X|‘ _FHX¬;É8²§ÃƒfdY0½€n%´ïèœÑ’ò0¹sÔå_JFúß©8>™œÄ£((xmBËtºaà4½5:šÓ0E§OŸÆüÈà-oy+t¹Ä=÷܃W¼âxñ‹_Œw¼ãø‘ùœ>}OæšÍf¸xñbâËÃ?‚×¼æ5ø¥_úe,Kˆ:éÑuîºë.|þç.^ò’—à×ý×ñš×ü$NŸ>ÛútXgÿªW½êЩ¬Û^„{yaªÿêažÇ²9›R­0•eÜŸ!!|¼Í7=„L¯Ýg±ä é Þ ùG¬[èE£¢ dYE"¤ÉÅ•.ÀÊ&°QÍjŸIIEâ…”FVà·’v šãpþN°”ÒH<”tÛËO^|R5ñ™^´ýR]Ð4µD‰¤¢`ŸeDì[H˜% U(ã$„ΙÒiÖAÊtM«uŸ¡êKD‡çë"Âçè¤{.ꬌ½´PŒZ5­ eͪ@ð—øž\7AF]^„7ʹ ú›Hæ@ýÒòZý5: Z^ž˜$=qâ^ùÊW&Aà|¯†pЩS'ñ¼ç݃g>ó™xÃ~?ÿó?ÕjéÈÿÌ™38Ìõ_ð8qâDº÷¶·¾ ¯ýÏaß&¤/]ÅÛßþ¼ùÍoÆÕ«û¸çž{pë­·àõ¯{ÞùÎwczìììà¶Ûn;Û^̹.ÉDÞ+ÇP££áNíìR¤ƒ;ɵ°üAÆ ˆ~¢‹ÐNËx 5¨ìÅß¹”’bB™VÏŠ3q9›…<$ZSCBñ‡†ódÏ´ñ‰ðîw¿ª=n½õV,+¼îu¯ÇÙ³g‡>PÅÞÞžþô§c›KDpòäÉtïüùóø¥_þe|üã÷BK<ò~çw~þð‡qéÒ%Üró-xðÁOàï|®^½âÏ:u wÝu×V4\ëeGCZ÷)L`{øDlØ×˜7¨¡h«§AH`4ÿ4TUÔ° JÚSŠ™yœ8 uRÒ¼ ŒÃ´š«³’ÒN1V¿G[_Xø˜:>ƒX—g¡R¢Ù6ºl%cÀÇËPþ¡-D×D»U­%=Ù,ø<´†IhRîì™s¹¬?T;ÿÅr¨òÖÖ« ^-4uxµ‘N0·µ>äégI`¸³|W˜,ØJŠL B-V‘ë…ä×ÝÚšW ƒH3>‚Âtò.< ÆÒyh±I›Ù¦—7v¨·5C ^]ɱS3Ri»ðÊgs¾1N ¬¿X¨aýuë­·âYÏzVÈ€oyË[°X,ýÞùóqï½÷âþûïÇÎηÝv î½÷^|ìc¥”ÍŽ?Žm®Ûn» Ïþó“ä9so~ó›Ñ÷ãçwww±¿ïyÏ{ð| `gwïyÏïáܹÇ_^ð‚lEÃö«,R®£-cýÑ£cPÄá9*×æÝ¸ÿ¸þ¼+‘Døž`þkÚßFJ,P†Ô9¢)‡¢·‹;uL Wâ|<2íÖ>^Û”wÁÍ%Å<¢ð° ÝÂãŸÞ"z°<ñ{6fοÚIH¶“É0fàæ¼(Fµ9 pÈØ@lçù’à"î^UʉM K<ƒ—š+ ¢uÊ] +Yõz¶ÚÃ=ëàèB/ª R mÜŒC|Ìv&M(–L©IâøiòŽ‹v÷‘¶ãÈÊ:{<ÞVÂûªCBæê›p²p'.ºñÍÂTiuS ŠÇˆEð‰ ÄÔUÑøã?žU*zè!Ü{ï½Øß_àäÉ“xä‘Óxï{ÏùtÇwObýuúôiÜqÇ©S.^|=ôPÒ]'8~ü(ööv±\.ñ|¿ñ¿ûî»{{{x䑇ñÄ—¼Œ'Nà3>ã3¶¢aû++cÿãZ-Î 6¥o[A–™b¨X¨¤ [‰>Kp(VYÔYNhž*z)ó?ö |¤4e“ß.Cò•3Ö w|•Gâð)EÒ-9†N‰â\¯qH›ª¤qKÍ>3Ú/à,†GÞJ2lÛzIæù·l¼¸¶0Ò±^ «4n§FDfNݸB³N·½µ¦à5{ecb¸LéÚQ¦ªC–K–~’BM«o[ù.—Í ö j‘!Rr£w”‹dP]©dÅíßXjɲ†32An¯—í[?Ãû¢fØæ^ˋǦ.N¥ä‰\» IàìiWFH {ŽíÜ€m®#GŽàèÑ]\½²e?ðüꥋ8{ö n¼ñ&œ>}O<ñ~øawwvvð3?ó3[•ÏC"‚¾Wt]‡Õj•žë{ÅåËWbÒU—.]ÆÕ«WpéÒ\ºtûûû‰‡ÏyÎs¶¢áÚ/qqŠ#™ÓÃüRo=G²:¹j€0$i®¸ýf¿2ž¥Ð’½W($V§†Ânéœ ˆŸk<'®jý9‰<=Óçp…ËŽöÄžý5åI‰BH§ÆÏvúšƒÈ k‘(ÕºÀŒVt¸ ú{f/QQÉÏÛ³fxD= "&Ñi‚¶úˆ]„†CCÕ(@€ÙCâ¡]É´N ^TØÌd4*Ò¡+Ùt§ÓƪÂw·!›ù¸ÅY·Üb„GÂÀ¹¨~˜Ëø~BP„âé`$D7¦#åO}Aí§feímÞB3î£Ü;,¯ÞÙ’)>ø2ïvp|÷FÔëÂ… éûw>³Ù *‘Q³Xõ8wî=÷(‹}À¥K—±\.±\.±éª«Qg³Yyb!M¥’çìÆ äժǹsçqåÊÌf3ìì줾9þ<>™«”„`uXùkzÜû{Ôç¦ %æmìó4íñnÜÿþ@GT~’0 C[aÕý1é“ VðJI ø><íö§ác~/;ýüîG÷:¼ø³ÿ*n¸åY8qê6¨‹Å<ñÄEœºáé.——/_†ˆàøñã8rä¶¿·Þz+Ž?Öø'ØßßÇ{ÞóžC”qˆkäQ@RU`çúæ ‚áʱÕ”!d¡[FàÞך@$Lh,TêÃðÛ(mè4p®:”Á‹ÕÙÞÕ1@K§{%H‡<žÖ:BK ÉòÍÁt}Ì*™yAþP{Þ"±ÈBÕâp›ö6×ceP?uB›ÒÀùïö²Mj󚃺sùúb»—”²éäq‚cSfVƒß¡@c¥®D}ˆ¥ÕVÓTnV –ršÓÉy$»¡$Zê$¦’"(ög„\@é¹L)}âc Í< 2ÓFqµð~|Û \ éS§RS½l¶a¥NoÅ– úœÉ·½g/}ÂïÝzë­¸|ùr´XÏ{Þópìøq\¹úXâFß÷xì±Ç¡öŽÅ•KðöÿôïðžßøÜväÜóiÏÂÑîø¬g3ÙÅüáwáòù»0?q´V«}ì_8wŸ½‚G.܈ Wžã·~>ç ^'NâùÏÞ÷¾Œ&»'EM:ÜsÏópâĉ8xIu»x ®‘>†¤®¿¤MŠ[XC\!²<å4k¥ÏÞ£®Cy×-’¬ `Þýȧ2Ôɡ޴—=ú‚ o–Öó+ÒTpŸÃ{ªQ¶4 4Òóq~cÞCBYR'·¯á¥{¸Ö«MiÅsŸ~ Õôiã‰G{H‘{=!ŒvØî0Ò#K›“ ®˜{ •bØ—&²E!²òÎÈÑÏTT¥Æ±lM5F©õçt-¦Ðõ\¼)ÜH.»X‰Â*âX?SKV‚‚µË‘L²$¥œÒF4‚NмäZȨ µ¿6÷ r6—Újæ‚wRRìZÞã6Z3jl3Jœw3œØ»1Ý?sæ xàtï…/|>ç¿ø3xÃøyô*)4Ó«`ÖwÞ¸ÝӯŕtxÙ§žÃ3néqê–ao6Ã~\é—ØYÝ‹ýKÂþåaàÌ;ÁÑ^ñÌÀ3ŽÎ±x¢ÃÇý¼÷?½ÏyÉ7àóÿìŸÁü…ŸÃ¥«Ó[÷Ú¥ºÂóŸÿ|Á|>Ž?ác±Xà¾ûîÃSy…8® èHFÜâ¹9Öñ»&RêQ©cƒ´2dzI1§Àµ…DI©‘Îl ÒÕ5·ë2-cÊhÑø›d•‘pÖ«Q¡ÿnc×âÞ±ãqÈ·çB±Š zÛ_ÉŸ7fÆ%kï â_'‹·ùØÇPæ©<ão¨Êõ±mL|i†Ø¼^=† ?ž7‹X8‡nìfC—$ŒÝO8ó¼DCån ŸqvÞ¶Ì®ñ£ÿ/\¿þp\/+Þþ/÷ñÖOн‹ñƒ?øƒxõ«_ù|»®ëð­ÿðÛñÁÝ‹~è^\½ºr„zã1àO>»Ã+>»Ã‹î< \,¥Ã ‚°œÊgOE7¬„íW‚‡Ï(z¨ÇåË‚K ๟²Â§~j—Þþ.íÿοó×ðì?Ÿù'ïÀ¯¿å~,–¼ _\ª=n¼ñ&¼ê¯½/yÉK0›‘ŠÁûÞ÷¾§”g7ßþ¶ºxP]H§˜uÀ|Öcgg…ÝÝŽì­püØÇŽ-qüØ'/pâÄ'Ž-püøG,°·×coo…y٬ǬºNpáñÿƒ½Ÿë×ý«ã ‰˜”Lð6B&ǹ‰I3âñL ä±ÍûìiÕÃõëåuâèøÞ;ßùN|Ó7}ÅKŸþ韎W}å«ZŒ}ÈJxÞÓ_ù9¾þ¿êðéw—W3œ;/8vTqì$ ÝJúXí²ÛAfƒç²{T±s X¨âì¹÷=´Âù‹€Î:œ8ºÄ7| /ºñßãïýåGðµqŽ?KplvæJ›îqóÍ7ãë¾ökðu_ÿu8uê$hÊ«W¯âøÀSʯ׼í?Ò~E|¥8âpG§ËXçÔ’®_×/»æ9$RÃ:÷SL¾¹ž˜›ñR9'4¼X¾1ißè­ €ÿáëþ—Fâ´Ä”9C•¤¯ú>vïOøÉ$lûûûøéŸþiüàþà ª8zô(¾á¾çÎ=†×üÄOàŽcçðåŸÝáÏêpÃIÁ±½ŽÞ¤8¶'xúmÀñÝnHX³°€ ƒ¢› zÜppéW?¥Ã¹s+ìî)NžæGóþ8«+8uªÇçþ©þä çx×ûWøw¬ð[ï>ü`óû'p׳Ÿ‡Wýµ¯À_ÿª¯ÄϸÃ7®³ë{¾ç{FMOÅuö‘çyž¼@'èС“ºnø»3›c6ÛÁî|»³]ìÌ÷°»³‡ùl;³ìÌv0ëfèºf2 qæ0…M °ùa#fxå;ÅÑ5}‰UÇ¢(”±‹f–ñÞ¨6qjc,êö:<ÌÈ3•Oeò&J¾³–vÐò ÎÊyÌ^GÌcôÐD«µÑ?{[ÍP·à—-óÝÊ÷y‡ò=‡þˆ‡ÈmU­¿QL•²€pà(øèÇü›‚ö“!ebŒI‰îêÇ¢$¬!#G/Õ—(L4{V Oz¦u¬D;­š%ÅžZ/”5Ô¶å¾’Fq«Í¸ÔB[ÜÓYƒØb‡N‹™1osž½5míàüv¯­ÔE´ŒÉ«ÑÒ¼¿’Å„m7V_äÓÞŸw;¸ùèôv gÏžu…*"X­–xÚÓžŽoù¦¿…ÛwÀìáŸÅÝO[áø àÄIÅM';;ìì4¶˜ј vÄ·P@ŽáÄ©nzÚ ˜w;˜ïÌÑí^À|y X-Ñ÷ `_qãÅç|V‡?ý"Á+>¡øðÇ;Üû àÆO¹_øE7ß|³ó¦_õ˜ÏEú³?û³ø¤_%.n‰`ƒbê] ™1¶íQHð‘«°¬2Ú?žÏ µšsÎ[VPš  b#|¯t9k%…£­< y ÅK²(™Ž¨Ò %ãBI+¤·üÿLˆÓSb÷ÿkdüô­6¾(¿Á V”b®TÓÞŠs q:íìx…g Æ|IÓ &æmÎC4Höˆ˜$/®!jãBH¦¢Ä Ò–jÊœW¶ö¬BG •«N2§hÛ$š6£“ ;y,¼ÿOV°F¸r]ô%œ–1Ï)rµ6Ñ:¤Æmbž´ ï1x$æO²!#‰eôFžLþ]F^LùØ s΋’—¥ž•;OÆóO?ù,¬»vvv°\»pž?»»;xüþßÅ N½ ÝNÝÝ!Üsòpì„àè‘3¬f¼ëásåËØÛºÝa¸ªpóÙ óy‘cèºÑÏ.£ÓÛ0ƒÇ.£×Ç0[öØ÷ø´cžs—âeç¯â‰ ¿„ o=·Þû™Ø¹ùe¸ùŽçá†nÆM·Ü†w¼ãxÿûßOÎÅ^v?xnÅñv¥æà%R“M¾•|¾‚ í$É™mœH¥F7ÓŒ®4Ãà· ¹›aQF¬!Ky_}‚YˆœÚ8+ ÈXÙa'®øŠÒdO4måleQ;XöPØ$,Ì ÑiŸþfáÜ“ž‚¡ÝÏoeã=j`‘R7­žvëÆ©Ml|*ÏD†Ém6vÉ‹‚! ÕœNèÈÑ•Ÿ)u3ïâáP['Ïê“Ë6ÑMBN ¢‹Ac‰ŽCdHxÈZÙfp¬Ř'ȃK¬‚ºó5Êã§VinDN›Ÿ8x&AHj+…k¸pòŠÍùÔ,´`¸kŠ2 Rt˜ªäÿ•M„œdµ¢‡‹Õ>Ö]¶àêþûïÇb¹Â…üîûÿÝþƒØÛöŽ ŽvŽ82ðnÕ):h§À Ð9°ÐÍYÈÎПÒÍ0Ûé ˜Cv†ýû1Û‡àtý´ŸCð8Ð]ÁL̆H»'v{{K\=r¯þ:ÿÎ?| zÇXî=³›>·à?ÏÅy$1€}ÞÀ22\–¥õ3eíù|_ïòîJ^8ùê–GŸð¥T¥Ÿq¦+ “9‹GÃù‰ZiôQQ9lã­”GJ:ŽŒ˜s‘µ¿‡ah ™¢gY'ñ(.>µKRªª®´[1RœÃ8Af°X¿ªWg©û|ºÚ@rβ3<78ÀÉŸIô‡P¨7>Â)JÏ+÷xÇÎ éS˜#]Œ_Y!…ð”`ÆDÄzrk*ò E?>D# *;^­Hþh;yNcƒoĘf!x¾$ˆ¥bÙ?Ï-äó…#]•9#Œ˜ƒHp|s9ÛôèìÍ'f]‡<úÿù»ÿ1^xçUìäu8²x;{‚ã{Š£G{{‚#°Û2ƒÇ{ØA ½3gÝ.´ï!ó :tz"ÇìAº+P½ ÑÇ–Αsìì<ŽtÀjÙãæKáÎKâ‰óïÁ#ÿzð$^üÜãx×½Oà“seÙ…ÞBz…¦Õôöc;Lò¹±²ÀÀŸ¿š)5ƒÚ-ÊŠßÒòƒ¿H²7V”f:á °· D($å#Pˆr —89t\d"š¸k;Š&ÏÄÒ@CGAŒ¸sú8€ï•ëôÙ{´]ƒ³!ûèFJa¥‡b i>#ا„ÒÓJ`;®(cPÃÍ[ %o5¸n “f±=Sy5o÷I¡â2Ê`)1ÏPËù½©Á24oO&"h!+r~˜EÛf°y<Ã÷†ý€ÚILf"Í0’RWhš´ wtÔ/šá&޵wš'¨¦S*‹ÒOÚÞwúwpÐuÿo}?îxî%Ütb†½#övzìì*fsÁÞî ¹PE§i9åÒ ^zß dgh×NÛOD0ÛÙä(d¶ @0Óã°½†DAç— :V‹Áàí `oÑ9 ‚ÝÕ ²Ó¡¿¼Äêê 8yË1Üðøi<ã–ËØé—øÑÿ°‹_{Ïþm<Ì¥è!àf,ŒÊš'€öÉÄ6X K@ˆÈ‹ÿèªË¼GW|^…)ˆŠ¸Qv¹b/<“8qäÖ Ó‘nC=6GÁ²—”¤›‚!û_`ª{,ÖˆlVƒ"õv˜:æãÓ,¯\kS‚'ì99ÿx ÓFc¯ÚJq­R Oˆ-pªÈŸ²ˆóÑTý<`†X 1ïßß,FNèH±´È؉xúhB”0OѲZýÎ(Ûù¢hH‡žu§" #+,ë\›;`ºxߜص@v@-%H´ÜãºjHˆÚªj4P¾PÝÉCh³“FW‚åê’)ŒÐ |’ÞQžw+t&>‰Ò} Áù«g±éúúÏïðYϺŒ›u˜uÀîLqdG0Ÿ)vv€ÙÀŽ`>oF±t† iô=0ßQ`&€tP0 séCd˜tÕÀ–\ ™íäA&‚®_  ;ºƒnWÑ÷7ãøÞŽ»„ÏzÑ£øÄ™%>~vŽ?´y¢Ã\WVOàØüTºglïJ}àµémî¾ønq.Ý«}u›§ØÄ+µR(ˆ½ŒB_òÜ«ð^MŸ(«–ÃG ÝâH3=.ŽrÉÉÑöo|ÈŠ9¹ ðpP4*<À-BÚÅ 'À¶j(­LírJz7Ù£²zámy3D˜è⃓+Mõ©Ãºh cR³úš¨Wˆ»,T.–¦ÃŠP8™ÔhAmåi¶îŒ>¬+Ãì ¹¤dTˆ ¶‡6uis•$ ‘­g4Í蹸ÛA]•çÔ!ÉcJ¼_…=ö€\ÿ“Ú5–%F÷"¼V½…ì½Ye*鉯‚JÍÑ€äF’üßb«é1”i´Œ|œ‰JüÈÉdä3WF¦:Èò×”‡{&›¶v®˜pÚ`7ÀÚ˜›òî@jOzÐÉ4øÁaŠŒXkst‚RC €HC3&TÖ¢jp4uš{NnñUkÛ\ªYVÎ7qâo%Äí‚@ú5£÷h»çÚWÁpúÇ÷SÚ'{d„r8ˆ ÏiÐ'2Û½ünÐKZŠAiÈ n>ötÜtôi˜º^pg‡?ýÜn:1l{1ßìÎ{Ìw@>ß“Á ìP¹¶¥€‘º#X)0Ÿx"èW{˜Í;tØV/†ÌÎX ÿyÌw¬–$ÌÝ üg³öÕ ªÀåKÀé‡W¸r¹ÃÎü~Ü~Û%ÛQÌ—ÀL†©è§îZé;²›Æ‘Qný‘bÿ2ì 4ÈýpÏ¤Çæô:wÿt*.Ï xQ?g ÇQ¤¤¼lšôìYo Ä<öó¨Lg”ý™Ý±ˆÛ  ÕÏ‘h_ÛÍÀ’`ò(œ£ÐxžU7{+­­¼ŽÀhbvù8Bþ&ClϤ”ùCÌMÔ“^U­½ªÅƒ+`Y€yìE¯€˜È”MÑ‚P¦H£ dÉ<¿˜”ŽŠkfV^²Á©ÖŒCHÞ(¡2KŠ 0[2@¡°’á'%®ÂŠßc&Þ_©àDXu,Ï9Ìb¨ìÛ†²o ˜Cj°àjaIÕ³Òh¼e;+Ä[6bž:ëÏWc/Eˆ€™JÊ … öæÓ;nþ—/>åvÁ¬„wg¦ƒ0ë°7>Ïæ€Ì«®­TìÒËàbï ¤ts^,`v³Yén„t7Aº¡ýè¯ò0 gÂïë¢: ó숰~…~ ±~8w±Ã™³K¼õƒ <ÕWJ¦(½«íßa…§6.EÙ¹ÀBQ±7@ªÒ+F¬ y1#ô›‡vŠà =“ÈJ5 2¹5d‰ºG aW†¼‡aNå¤6±"q>†@i,@s ÞPŸK+‘ÑÆÕQ'ºïyö³¡}”ð1mÕ>Ùµ`·y=­Éê!Æjíÿ./*h\QxGà0«eŽW€®V¸\Ù¸U'‘M£`56Á5ïQny6¬1\²óˆf$ì7î•© ¨ã§<€ùãGæ&ROMLñ*¼8Ü¡.&Kmó^ ”PÀ8x:.âÅ#ÿƒû¿y¯>†ÓOÜ?bÙþ²(ïf^… }õÁlH'ØuCè¢fôÍ,—ƒŒïm± Ïw³]tÝM¿ôîƒôLvwîñbµ´Gß÷xô ð–7+Þýž–gwì î¾}…»nSÝUôKÅb ,úç¯â“rýÚC?…©k‚ÉðLëÈA9ôþŒÍ¸Âp¥ÝÖÈTÑM¡µ¤†@bêòɆ!€ 0aÓÃåd04üÉëtòª®€!tYY ÕUhùàŸÒs¾~Eüð\g8Å‚Wj·ÑØxÌúÓ¸¤×øMí„¢m]„TPÄ¥Ä`…ÚNV;ä¤x”ð­ ²á2-•Š–h-Þ•H¸ZƒØYåÜù’‰å•WYdòáÌöX¿„±2c[ªÊJìD‘õLÍtñü‡ŒTÆý â³1èI.uF%Œb «Iêð<±)ŸÀtÉè^M5ø¢¡¹Ò)x\%±»âèÎ ,û1:VžØRE€Y'ØÝövÚ’¥®ý×~Ã\1ë%’IŽf:ð¡_é¾ r Àqˆô˜íƒ®®ýG!òèÀË5Ȳ|($wåj‡î[â=ï^byYðŒ:ܰ7¤£îì ¤ÂÒ/†‰ÖëãOæe¼w§2Œ˜ˆ…š' ±í±Û9`0l"C­ Ï£HßÁϦ…DŠØæÀÊs)3`Zbx‡,Zœ]“F;ÂÍEò[h{訟 „½¤.[žÍÖraºÉ{ŒÅ(*€i€vCõ”V:‘ å^Ñ(šM¡&¦ð»h[d&µ>qj£¹i%ofNæ“ë)rÍ”yŒ¥i/Ä"^\aU75Ð,SXQC®Ajv1ìíÚÑTŽâ 0–\—aŸ\aJHÖÏÿŠp(Bh&u< y¤àiº›R°¸ÂøœöÔ7OŠÐÁpCPylפ¸k$˜C6Cgr5ß瘃´r·8Þò¡Â3áÍù°ʣ̌vïÔÞ͘ºzLpe%èv³=`¾«èvÝ\1c”Ó ùÿýL±ÚU`H¯Ʂ|w;‚Õj‘“G¿:à^Hwnp-T‡¿«%°Z@eÖб _*ΞU¼óÍK¼å·+‚{nn9®ØÙìÍ»!Íú] æ+E×=uéŸõzlÿ¡‘H±ˆºRjce8KÑË 61ì ¥Ü7콃­$Uì7ùLX† ÀL™ôXi«Ó -.?šçcÀ¦ù¢Ã7Søð(¿ã ƨ0ÔþäÑOLpœ$BÚáR¸±Žý]¤£}Œ*Ñ)Oç…œ©¼ž }郅ѩ´¶– VÔf©Jƒ*‚LÈî*E%B õ2[,æfRQ½¥QëÊ5…¶ è›®Õ&9Ùfe(ÅÛ!B:!„ë,Ým´GK¿=2&_4ï#›jÚ¬näAXÉ,ŒiÔFþ7û=f8¥°À¥3À7u¸ñpdر fô”€?¼‡^pñÊ Ÿ8ýÉóºüܸw‡ó¼WŬɅvx{µÍÛzô-^¬$ßCõ!êAÙØ–u’ºorÈ=OªFN{[ÒÛ6%—Ÿ”–{–+Ÿ¯.¬•IÚ5À,(¦ïG ÊÏ!Þ¦÷}…q }ß(Îé±g‰eÖ&cL߀>ÒJßXìàÙøØ‡!hà­|ÒX³þj<àŒBÿ­“›N7>£MG$%:Jü›Ý§F›¼kO¨MðƦ˜ µ<6|ãÅgü(O Fø¦øFÎ:™÷áÏ ñ'¯ºJŠn¹Æ-êò”"_ï\s3¡þ/ºd”Bœšü ò¬Ü0J9CJSä¢ ½!ëâŽM%µ·swÞðtþwñÜS »Ýøt¬‡1´Wèl;Ç ×Þ=[»Zš÷Kcµ»+ S^¤<9È×ß „B”d‡~°Öã†àŽ›·ŽÑaŸýN)õ~<‹«À¥K=¤[àÜEÅ|Û o¿÷2>™×#—?‚g¾÷˜±WE]ÙkCä¶ÑפÀ̶ Ít˜{ÉkcIÿ9j oÏûZÁ%‘*ÊJ¡W© Òs9®­Žº¥<ò¤mÎ'öê)(žè ï$Sk ¤åŠ_Wõ¾m¨ ¥ËÜ[;2.e°ŽøzQ‰‡±øY[˜q!ÏÉŸÖZ¼óŒyéÞMò†RæŽpI»•!E’,­ÿúßþã…øïýõæ ù‘[©€9{Õ=ŒtÌ}ŽÍ’$´ÏDy¾iÿRø#–Ï”@•çTq|‹­û8™ æc(Ë!Õ¬óN7ŸÏT¨O·d—Ð'ŸÃ}2Á…Ž˜'u²z<Çõá© ˜èDí–cOO¢Æ×ÇN÷øøÓæxúÉX)ü¸â7÷{|Ú§íâž»'»¶òµ:,vg'ÑíÞí;@Žb6ŸC°¾¿ân0Z»V‹‹}Åå Š3ýp÷¿¿‡ªàÎSŠgÜÚá¦;s`g6Ãl¾‚Mus+C±\ö8ÿ„àâåfó=ÜûøÝøèù >| ü?™ëmgÿ<íè³±ÛÉØG×÷Í#è›1€¢oi¡½öèÚʬ!|¤€Î\‘ ©ÑGº®ôÒöö¼‡.Â<8«Y”“4ëF˜’ŒES¡0c«è¼îÀÕŸè°|ÓLƈۛ¥Ì:‰.+ÁÓ #¼ùÈ¥Ô\°ÛƒªèA!¥²‰šÇÓÒ†åá½d°nÞA¦ ÏËÈFn¼æÖP…"6d;•ŠÿŸ×~ÇÖBü¯~êÛßô7¾gLwBh6ŒtwùšÕrÆ÷vˆÕ`X²¡°ÊN9Æ÷@ý •êŠØ(=Ê0#Œ©m%ØÕ$ÁmK‰÷ »”ÏÙ:ò»iÞÅ],BpS“Da³‡Òm x†T}”æ‹\YmFÈ¿òî}<ãŽÛñ¼Û³ý‹8wvß|ó SÜýlÁí'GzL°;W`O°‚bµRìÌO ïÅl¶t5°[«%påŠâ£+\¼¨xàÁ%N?Ðáã¸Ú㎛;nVÜt8r´ÇlÌe†Ù¼Go)¶]SüWg¸²˜ã‰}Á•þ9Лž+{Ï­ϼŸ·ó œ=ÿïq⦅\#púÊÇpç±{šÐXv¿Å©›Â ûô-†=,n e==éz÷=ÃÞf+hŒ“ˆ•;‚ô¾'EïY3$I!E†rë\Bòhä°”¤®(o ä´AèŒÃM!óœö¨F ìˆÆOž‡¥¿f£ë^Ž•eï“퇎ÌÁ²µ- ËJ?ØÝ¢ ÷¸òºë“¡ÌyvgšÂH+`‡ë‡Ö(þoüÊï‚+æx~ )~»¾ÿ'¿ ðM¯þ€NÔÀ€ºÒ\{‘ÖÕf™òâ(ÓsšêcÝm…Q1‹Ïû—0ìu'Ù‡Ém)C3l&„$† @uaC’¹òv4}8,D>‰šK÷¾Òe)§T^öGÃÒÝ,Ãþâò$úçëêÉ—ã®ÏøT\ºÿWñ؃ïÇÕ«+¼åíÀ‡?ÖáΧ)žq+pÓÓ;;Ì(:¹ˆÝ`~W÷Çr±Âb)è—‚+O(=«xøLåÅ•KŠ««Çg=^p;pìh‡ãGc{Ãjc±uº‚®}“¥åÅj¿ÇþòpüiÐ[?»'?ö/}Óýå>ö±}Ò À[Îüžö)ÏÆ¼ÛÁ ë<õÓ~ß÷ЮýíWn †ÔЪ¾—ö Ö÷hk®ÒºÈ Sáó^±‡‹B.|‚Ø%–F…J|¾ÐÃJó¶‚8æ´„˜Ô8­‡ÑdtbLØzÀ¹+Šw@ñ‘7߬8zªÇ‘½Òõ˜Ë9H§¸pY±\uè—+H?Ã|5ÕKí7Üx£`wGptØÝUìîô˜‹@fƒ¬Š VÚ°X(– ÁþRqyq²säæÏÅì¶OÃçþ¥oœ¤ýó>ïóð¾÷ýÞñŽwØÎ's]ZœÇ©½[H˜šPUôÚ£WE¯+ôö¿¾ÇJztÞ-“X›oJÛWœÊ1zR<#Qö°‡I-I0¡Õ@¿p$>Í8ú'F»þ±úÆ‘‹Q ö£‡²PÃS(h|x7µ“”xf¬ÆèTGâ3 Jtÿ(òcÊ+¼”0*ä8•…Å­ì°ïųÈôG€öü ¶‚~èµÿSzáï¼ê;ÝêÅ;Q3Ï%ü½¿ñÝ€E†àû~â[ñÍó{ƒß¤¤¢¿Ö(ÕTï8Žíïôr(òêÛ(,ËÏ ‹5Gˆ¡½[$‹I‚Þš{;RÆDçà`„±ˆ³v¦ûá8wÂ͉̎°pþ$…Ù,Ã*Þ³UŸ$„ìzæEÿ8‚£•ÉÏÀ•Õ%Üwî}Øt=÷¹ÏÁK_úÀ+^ùÍxÃâ2îëÿ†Ëàä‰t˜‰b)‚¾ÃÑ]…îôX\h?zD€…`wwŽìÍ€ÙmÀ‘ù°³¨(€^Ñ Ðµ£ç³V«lâtÕ öWŠý•`¹,»›€?;OÿB|Þ—~ãFúÿ›ÿæëñú׿þ“n~õ¡ŸÄ}ב®ÅúgèUÑqÖO¯Ð¾oÞ@ ‡6C Ò£A/3̰t ˜’’îH %‹+ÇùRè(òC±’4YZÏÆÊåLÏX%E’cðNCU…ôªý÷¼èX$æ5šé~)ë‘"M“ËÑ\)…ÃÜ»7C4¡Áƒ5ú°ùÒ²tm'§ýkÞ_3®ÃÄ:,Dh”ÐcÎ箿ý×¾3ú8…O‚ªqDZð÷^ý=øW¯ù¶L<)ŸÐu) ³Æ ¨§8 ´[£Kˆ‚…šA.i]—? îTs£ê¼ƒá¢gç» G,µÎë&µ+*Šßˆ8ÊL²Îšà ¥Ÿù`“ü"8­öå4¹Í´údS{&Hx}R\Þgžx›®›o¾_õU¯òïé¯+~úƒxô½ÿ»‹óù°-ÄŽô8udŽ[nëpóÓæƒâëèW÷~)è/(f+`eƒ¯‡jíÛdÙJ°\ö@§è—‚eßc±œáò¢Çb±œ|.æwþ%ü¹WýOØöºõÖ[·~öÉ\Ëþ*væGRXbï4/=VÚc®=Vý «~…®[¡CÕ+í†IatPôƒ1éÐðn ÷Ñl|Lx¬ŒÉg´+0!éæ,oœˆ¸ÓòèÁá ˆg$O"d–rš°D‹)Ì&AO¦wà‡¡kBHIó³Q+ób ÙÓš‡‰p•s”@('kF`£¶§,RÒÇií…C.3&x§CÜFkáíú¡ŸŽÁð·^ùAp]`A~IØðh‚ø¦W¯¿ÿ}?ñ­)Ü‘ÃfF¦Å"Ä7yB+»ÎðnïÛ¢ ³Ž ѳAðX§d!š*DW‰£Òs®„yÕ.L ç¡!T±6 ÏIT^ž„uA§­òÊÀˆ7&¶B’7⦽Îé«8É „·)èu…e¿ù´¬ãÇî}ÅßùãÆ»ÿkìÏNaÿÊ—¯ô¸|¸p¥Ç¥ =´e¯t˜Ï»ö=ŽÎé{Ý»2ÇN7ÇŽÌ€Uí1„wVÀ•}ť˂+ àüàüâ&\YÝÜþ¹Ø}î×JùÀsžóœC=­×/Üÿ¯Ûa#ŠaR·§y€í«®Ð[FÍ è”Þ³‘ÙâêIš™Raåçé ÂAok–U$uåÓç òàå†Ï!´ÌX€”—uõ‘ÜG¤ Äa¤¾E)¡´}ƒ§¢ ¾•F”‘t𣉗PËÚð%íÐ^öp¸¥·7\‡Q±§hcSò9d4ˆ´“Ñ£x÷¸&.î6n‰¢j)W¦ OPt\ÞH^¨aÅq¥gò`¥´žäxRJÈ)ÞsÞº²Ž´*ïšf4l©f6 •µ—Lu9œGã ¢T[†ðklQPðÛÚ˜kü2A/K[åž%"d%G%á°HîÎŽ`Öͱéêû~òþ]Ÿþ¥¸ùî/F·wúUý¥`ÿâ çÏ=\=½ÂòÜ ûýÀj_°Z °,–+,–=ö÷—¸|u…ý¥âê¸xEqá’ââeÅÅË‚KWg¸Ú…ž¸³g}vžõUø‚B>?~~tï/þÅWà³>óOã÷ãº÷Â[‡rç}Sîª=VºD¯=Vý+]aÙ·96Üëªí|ÝB’†’ <µ~´ ܳ”¬#y<ÙȱÁ˜¸æN[dQƒÕÈ«„êœçÏ1¤&‚FêÏ­$6•œI?TlÛ‚˜öc “þR©Qºx$ Ö¢D­MIMuÈÛW„Á %v¢tqוœ/žÒks¹)ãTÎS†˜*üpBÿÿ$ç£SË1ƒM¡¸x€öüùæ¯þõûþÍ·6þ"úmS*¦?ñK[½’ù)ÖÁ¦» ¡äŒž‰†û•…'#›¨Qgª{𕬻…*ÙÂWYÇÒánðăѾÖѼ–"Ê®H‹ÒKùǶÀˆã»á=CM{ %ÚIðz]âèš­ ìZ­VØß{ /ÿ¼WàÅ_ðßâ¦{^¹û \Úïpñ|³(ΜVœ;Ûã‰3Š'Î+._®\]aÑc_qy¿Ç•…ââÁcÇ/ô¸txâpuß¶SØÁìÆ—b÷S^/úê/|Å+×Òyñâ°éÿ 7œýö²—½ÿÕŸÿóøý¸Þsî?¡o+9¾wÄoJ5ü·Z ÷zÛ&Âæ>Ìðö­{6ñ°…)°kOáÓx«ãŒ”Û`'lœ•ÐFÉô>šÑ‚¿›Æ$€¢çüÒ©›™Îd\f=šøôÚøÓŒ=½Hq„ÞíÁ6UÝÔeGõ»ª äó¥õÏÅ5:O}\Ûø¸žV±Š:ˆ°CS€ µOÙäÒ{úȇA´£v¯œWôQ\ifkî®XbFnAj¹Ç&¹Ól±3^‘Ïû â#\赓˜ý5_•&±y€q$UÝKw`vIKدõ©hé¡pTÆF!ž±>;±w#>qþ^lºŠÝÝÝÉßžÿâ—á¯|Óá¦}%æÇoÄKÁù‹Š3çV8}Fñè9àìyàÑÇ><úx‡s.+ÎWœ}LñÈÙ}¼Çcç_ì±Z)ºÙ Ýî][ÿ,ö>åËð…_ößã ëĉk»xñ"¾ýÛÿ!^ò’—XÎSqýÜǾ}Û>háž^ûá·Õ` Vm‹ëÁ (VжLÌ2ˆ%Û Ív^uy1O9yýB¡TJbÃÞ%Bñ±ÂJzG“Lg¥FGšÄ§¾irI!(Ö Ö¤gຜÛà??›2÷a¬®˜).KcL ‘m©ÑŽ5ŸýVÆÉØD…×VÒ^”iPÛJ3²¤çÿÖ+ÿ‰ó–Éè:öšP¦+ÂD›eE[dÄðÚ›àÏ£ð³u¯šwiâ%öÛ~ÙËÏ»k¶×¹?½2Þÿ(ÜG¡pÖ°ü©“xƒ5 Á'KñÊf¶Õ'+†­ÍrÑèp÷eH°yP'Ö*Ü‹pú€"_¨,íÌAµáêûÿÃþºúU·¼å­Ÿùò¿ý¿â/ûf¿õŸ*Gqá2pú\Ïô8ýèÊÿ{äì ŸYá¡Ó=Î>Öãô£=;ßãÂ…ç/ûû;˜Í÷ §ž|ê_Áþ­Ïû’¿} ]'NœÀîî.>÷s?çI—µíÕ|,_ôe™@«¾oá æ´Éà¾_¡_E¦ÐJ õ›ø7¥:5{¿®Ô³Ð0ÂtÏѱ@žÃ { IW»1á±d÷ø]V( qn ›’* s¥+#ÊÆ«ß«ß 0†?½ã9õÚT. ¨4b i\Oà5çµN‡¤„ø1Ú- ‘X·ævÏ=a:‰M3Çtò6w©’ò·ÐŠ­› áyyxf~|.NFa <6˜0r-—Ã$®ˆlý¨5d ²0¤ Ó1l¾PŽöPU,ª T þ*y©9­ü¤s¹,(ét¢ÖŽ0ãÙðD–hÒX )à·Ó koîtl¿^Ëå/{Ù€œ-Ì2uýå¿ñðg^õý¸ó3^Ý›_€Ër®_á±ó}ûÏ>+.>1ÃbyÐã˜ÿÿÙûó°Û®ªNþ¹ÖÞosNrÒ’†¤E6„& R* èWZj•·ê^>ŸjnQõݯÊz>µ¬[–ZÞ²­²*iTž1 i }sš÷}÷Þk­9¾?朣™k¿§OÎ!œ™çäÝ{íµf·æÍoŒ9Æt;O;;Ÿð-˜>ùõXyÊ㥯ÿ÷ûí×2Xê@åÅ/~1žûœ«ù¹Ã)rûÉ™¿Òúˆ¬X À!Kþ'M€óç˜O ''ªl &Bd•Ô“ QI×öýÊzÝVs.DRe.sеHÚ °B£@,%rÂL)æ0Wiœ¶¥/æ¯B~Œ•ÔYâ-WŒz”¶-QMתŽÕÚ³û«0w²§yÜ%$¸Ÿ!¡ìi÷h¾³uB3£¦*Évð ÃÁä¥*Á­ãëØ ó?Ô‡¬~æW¬®Ÿ(ǶÄÈ8ù[7êÞÉD³¾ïf€Ë¯x6.¿âÙxïüö|õÓØóЗ1ì¾ q¾0m`LVwamÇ.4«çcõ¤“Ñžþ$¬œò$¼øeÿ*»wïYŠõ¨¼â×âoÿöÃøØß}üQ™çõS?‰]k+hÚˆI1F¬® X]í±¶ÚcÇzõõ;×{ìXï°¾ÖcmmÀêJÕ•Ó逶hFÓ01B0Þ]º=QÓ¥µÇGU-´·X5‰–Pkç?‹K%f §NG1ñM Iê7eœX€_k%òÁß{Ýu×rýßöÿP>ÿéïý æ€ú(m4ÓXÙyšµ³ðÒkLôm9âoÇóÁ~þð‡xTþ×§?€¼ú%‘0 é_ߺ.`Ò4è:F× Xt“®Ád1é}K膀f`„„CGð¸À|‚ |=”Vqj êNþåßý·øGßõïô ùÄY¶×ìýÊ\~î7ÿ¹ë†!0÷¨àÇð?‹v¢×Ô E5L†T Q˜2ШmÅíó©­@E¯ «$ÀB"‚Û“âédë2¾¼ª9ÚïÊ [¡sQ×ýIlµÏ¨ZjëÖÓÉäú§ó¤õ: Œ:™Û¶ðo™Æ›ßyÍA-º×¿þõøñó,[àå¯û¡#zþh—ç>÷9øæoþæG…À¯~ä}¸î‚ÿMÓ¦SÓM‹†ZLš Úf‚¶`Ò®`¦˜´Ót­iÑ6„Т¥P‹&(GÀ%„lfÙOöà’‹ðmxƒf[‚$*G!-/¯®˜Q…O–kj´4ñ}XûÖ̾?ðznÛÚ=ʳÒÉ‚T8}6qwÀ¦néVgû ø¾r=î*=lïÍÌxÜžôvÔžô»z'b³à%F`´TÔÂЈub¸187™ÎC®ê-‹ 7ãʰ­pY&£>£Â(¶X†H¦WìËF·ÌGâÉ"µkцwhäñd½ÜEÞ¨n‰BÀ¤hm lî*óÉfd–™f_©‘ÀŽg ÷&[CY˜å6ÂßÞöÇ8˜òä'?o|ãêÞ¯µò¯y5^øÂoxTÛäìíÃbî“ñw0 =îä|€½7fc°x’»(ߎfQ§-`1Û%†Zßs(pp^Ÿn)±Ò˜=Š•»°%%žlƒ¥Nk׬áÕûû¨]£î†öM÷ªµ—Ö1Ú×Ò!›ÆH[a#Kn^êòÍî_mÃÈ#3ÔäÚ¾°¹&‰H(R(?[·!€ñC¯ûÿJ…¿ü»ÿ¶’.k˜¦LŽY2±:å?ÿ›ÿBêügoúéÒ²…¤ Kr†ú~eò*i·âeú•i[iÊxü\Úó† ïMceéCáòâù¥ …¡­ K—{¥cLecù…>¶›˜>ØÅWs_#å/±ª¹?VM1ç:Êœ}èÖ?Âï}îgq0åU¯z9^úÒƒÓ©r8†Þƒ)W>óJ¼üÚ—?jãø»ûÞi$Ëâ jÎäs÷ˆ±G?ôÉ=4‡È¢È.¢ù0X <탿nM«,ï×µÜZ4euÍöÿ'Ç,ÛÛcÚíIay†¥6”+1ˮ쎊#wòŸ]Ë\5cæ" ;æ2¹ÅdkªÃÇêvL^ÎÿŠzdݽÌ_9«QY–îß•J.¬ókîÂ-´ßre~Ñ•£çVÛ+}!Ütÿ'ðöëS®ùæá{¿÷{êÞG²lwþàh”k¯}®½öeÊ8¾ºyîÛºŒèÂA á†$ýÉ%t`Ǥ!ðÀâ:jSHІè6‰ bf:PöCµõ©úJ¾*¿D½­G‚‹÷eÅM 7™¥Ye û‘û¥IƒbTby}`2µâl•ú R5 ¨û *‘•2m £½[µÉÍa¾F,vÒÔ¦"/nFѤªšC® øL…tÿ9-à߯â'ÎÖ_ÇÊ\‡BA—òOßôS(AÊ|ë7cˆ+Û¿Žò´ŒÍ³Â£d}‘ÿÍMp¾.Ìž•±ñ’¥,'b«Ù ¤*™}Ìhì‰i¨†mĺbÕ"®Ú…ÙpTNví‘[¢)ô`$ñ–Åk+x$uËïâ?òã8Øò†7}?®¸âé}ÿÑ,”Ô_—Ë.¿ ×]÷j\pÁJ{sÏÛ±ÙíÉR|”CaCìÑ'×И™w â1»”"°ø¶!hlàFZ^¤uò{±Ük¯ÔkŸ„¦YDHÊè¬K¢æmÚ Gˆ åÖ¯Ö‚Gl}þ•Š<^…S©ôK®¹yX&ÿ—ªÀkÙ =sá6 ; r+-ò’èvÞ óÓ›Byë.MÕÌû—~çߪ¯!Jg¸‹#9â?š³*ØÕJurP9Nöi¨Ú㘋N d2ªN¼ælñ=MúUá‚ù~›É¿q ÿÌ ‡ -›‹ªJ¡Íư3ŠQ2ÖÄ=¬§  #݈$Qúi„$Ûi€¿¾åíøã/ü¶|ß÷~/®½öÚƒ¾ÿh—GRê¯Ë?ü‡?€ç>÷¹Z{ï½óWpïÖm)\É :ÄÃÐ'»@’½ CE :Áÿ3äâÉ”aÂ¥Ãe†êÖ±Ycæ M÷X¦JXb䢺ʪÖ%íÌ}lª÷N9»ý<Õ©Ck Š©L±4"©U½U 'b±?X-¦üîT N† u­&¾šÐR«Ò ²5¸™a6‚ôºç*ü¥ÿõü·ÿõ3Š1Y˜‡Àø…ßú—> 4€úÆŸòÁÓì|š)­ GgÉpjRzjRžÖ@YÊ#¶èOÌ Ù6¡¬Ä¬Ëe¤GšzH¹­¼®Úâê7í0›qwIY`#‹ÆXwZ¶& “Ó!0*ŒªâG–1>pk"þŒƒ;ôuÅWàozN?ýÔƒºÿ±P¾õ[¿åQmï÷½'‘n Ñ'm Ÿ8¢}úÇ=÷ùÀXTž  ÙšŒ\å´¹FX¤'x×<ÊGÍ•A(ÕœÁEºÔ¸ÿòˆû½öò±¿Ø†ŒïÚS¡Çí&mL®ÙÓ·¾ðÒ¿ö›ÿÅP ê` ؤ}yY±¶wXm ½+v-)óIº€ aߣ6øáà™ü?ÿó-øþç¿Î·›ÜÿúÖ…_øíÿsôÌ?}ÃO¥A•¶ C¬cb×tÏ’Ø¿8ÃÓr}$0T ×ZãDŠ$é¢ÔÈ€VýôK©¼ =Zn§J9k}>[u›´¢b"b¥‡Þ繣à ÉÔ,¸¢!ð:4#m€ëþ×¶ÌCâýõ-¿‡wÜðß’ÔxåU¯z®¹æ›úþR-Øæ‘(Ï}îsñÍbˆˆ­a/>sÿ_J„ÐY‰L¶€8DÄ!„Óßl(æR"-rfPÂÆq%q±ì;»œ(Ã^ðËkÊ»ƒB¨ŸèFÒvëÙÚÿàP ˜­&uZàb•{ëÝ´DŠ.†ÓQ$ƒ*4³ÁOÜu™7{Êž‹½…G÷[ŠM;Np);Œ: ¥Ã‰ ÄWæ·•ñ²Z»½j”U’ÁüÒïü7þ_|Û¿>àâüßÞð“Þù¤$(.D³$_(D3{Ø8ײP2a*ÊDvXáêÅûÀ%@)#c1VÊ(ðÏRA@ÆÈµ.,k1x‹òøùҋ¸²/¶õË/ ¯Ä+*Ž=jo¥«béY?w^sØ.T/ðׇ(ùÀK®y1^÷º×ôý¶l³oß¾ž,~4Êe—]мðñþ|ðQk󖽟ŽÉ.<å”çœÜ:@1 ÄDˆÂ’ÅDÀDˆœ` #P‹Àç³jt4FYãAŸåšÍ¼DYNõ‘ÚÙ,­)ÂŒT—Û³rº‡KØÕ`S°Ê^#€¢Y¹¥bÒÂþfÈ•iYx «Þ°×IŠN­A—ÕÌqŽfÈüq]äµB¨4«Ùw"] dN÷S]ß•ñ#ßýø‘ïþ‰ƒZ?ö}?‰û¾Ÿ\þþýZp­B[6±Ø¦.«M”:GtÖPr†Úœ0@L?¢”ßǘŠjÕ´qµ ‹na…}òŒ{S;ƒÈÌ:ª§‡+X¨Òb˜ÆX혙y¤Œâ¦?ƒ?ùâ¡xõk^‹K/}Ú!=³]Y“¿þíx þ¥¼ìÛ¿O¿ü²GµÍÏ?øAÜ¿ugÖŠ„Ÿ5€˜ì}ì1Äd îs€¸¤ k .^å!$I ,ôjÐ…RldÙJù–«ÊGœ 2¾D%µy²­tï4qxڿ¼D>/•~ãg}Èÿ‘—çKÍ©ðj‰öÝJì:gåN3YâÝèpGcd+‚ P“¥/pA[Å`–Iͬ“E~P?òÝ?‘†„´ÉózÂÖH®6£ûJªÕK»¢ì cÜòqûßÄß–^Éô’m³¹&“OÒ{¦eéœtìIWcD¶ÉU­BˆYU~É-™kšG“›Ø¶)sá°Å¢UÀ˜)5Yˆ’¢øƒ~¾í‡Lü_ÿúïÅ«^õªCzfe¡Ž$ŒÃ#Užÿ‚«qÅ•ÏÄç®ÿü£ÖfÄ€¿ßý œ±ö„éŸ9¥ˆ$€D}Ê((€B@ŒHï;;†ƒ‚Ó|S)Ú¨J1ìè‡y H›†Ž”'za#÷`·PM›Í¦W˜SÅ÷ÚK†]?h ±¯ôŠe.Jò×W3áÜÓƒÚš‘.yYç• zæhžün„ÃÓùþÜ€1Ù,y/ùn‘:ÀƬ§Q§Œ6`¤X{ÒÏÝZ²sX|ýíÉAó;]t»iÓ*¨‘„Ì5é†Ñ•A…Uù°ªb£,µí9ê.º"âVf¿¸mè —÷¢~QÆSBš[¢Ù ÊÎÕónkãŽQi\«x'¸éOñ?÷Üóðš×¼OxÂY‡ôÜc­<šÞ@¥|eóFl,c0˰1Ÿè‡ì‡dìaŒA4]v xÂU ®DÅŒbkr‘^Ù¶dk¬ò ûÌV²fÁ”uOnï9}¤î‚Ad*!QmÈ×eˆŽmg¤É˜ÿ‘ôÞs§$Zlo!˜gìÆ¯ÿns&ƒ¬Ôo1dã‰ÝÍÊàõUpžX˜ÃnJÖ§T>®æÞq?£¨ðà_;Û¯*¸QeBX«BŽÀKUýSBëãj8Ñü”—¯’P;k§Ö©—…yyV­uÍì2‚}TÖŠ;·¶YUÅe맸Ңš{3{æàw?÷3‡LüàÅ/þ&¼æ5×òsµrùå—á /|ÔÛ}Ï¿"D|àˆžãÚ'⟠ÂCLBà ÂÙÙ˜,B×{ÂKÍJLG܅зTUhWa–Uüe/Wpw8̬e5ű‹M”~·g•Æ0:ïͧt¨öÐô$ÔáDnΊ£I!ýªéØ/§ÿøÅ’§›ÊÆöej0g H†DB!|.““n­ªã9—?3sçô*p UD† q3³(VÍÔT¥ü„Â.P©œÚˆ“Rr…Ê‹=Q"hTL{¼ŽªªªQCußè~Ÿ§˜eñ•ÀX ›3xt¸"ößÉ-Ø¢Ê*þ?î´ÌD‘TØ={¿ó¹ŸÁƒ[wãPË\€×½î»ù¹Çbù¦oúFœuֱтþàÖŸQ/Ÿ!k1yÿôC¯ ³–ÀšB²dRî€dT¶4%˜)ëXå²e?¯<;ÌÆ±wVFÂ'ö› X^J¨ÇHç–®;ÉžÝ.'¯ciÊnaÁÝ>‚â…jX¢ojóƒC¢™#¹Sò@Ú9R” žÛ„§¤—ΰJ§ÊfM 1¶×t9Qáh>±ç5Æq-ÃÍ–.O¬„˜D΃·po¶Aê1ߩܮñH|Ò…º v½ßp[é6³j–e”|Âuß<Ó­’¤Žz£ÓøeÊ‚€™³a‰+ißi¢ä.1€÷Üôßqãý‡Ã)/yÉ5¸öÚo?¬g‹åÏ86§Ÿ ¤Ž,§‹ŒÀ†Ø!.BbI¼ !´|PÌ870é÷Rj¿ëÿO|ÑÆƒE*\Ê †yÆîMïJ5Xr¹¸!ÛGÜ´!]TÉÞTåñS½gyN8S²_:¦Øï2­«Ì§ÂJuè #x—Fd 4UT;К½êhŠå6k6‡—JžÆgå®2@!ü¶ƒK$âªÚ% ÔpP‹iñ¸ž:Bha\TÞ¢é†Ý@E¦e֜ݣ’šT$q+(_*‘Æòp‡[òË®S´IŸÜ«*»©ÒQ°Bjü¦MÅ#)!O‡‹ZµWÉjn`ÂÝð ø»¯¼‡SžøÄ ñêW¿ú°ž}¬–g>ó™Ç¬í?üòJ„š7x0¿ò?î3ƒès¶°r¨,1‘XÖ:Tʉ×Á@¨ ¿ÐEOޤÃ!•‹Q%nQKhPE0ÙÚ ¨Úú{úÊ#r–ºâµªì—þvŸj?ôÁ“<ËÌF·zÕ¯z»Ò¡åD¹¼6NIáëpÅ ã±<"&2?ûè€ËÊ褙1ˆW$„zb¶™3Ó]8%ùzPÄLŽkÛÏ¢„}`£¸‰Ã’ãÖ˾[!¾t²zÁ£ßí´ÈZf!êfÅ%·ÿò}ªÁŒ§pû+6ª÷ÞÅøÈïÂá–g>óÊG-Ú×J¹øâ§ÓöÿðË?“O§¸@Cÿ0 ÙÀ]v ÍPì5²(RRù”퇳‹¨ÖmCÈA ËÊ?ÞÆñ1Oz ^áK ù$:c`J(“ÙÑ ¶I¿HÿoM³ÇgêKôÿÒú‚,‚pM·‰awPhæ:GvC³‡˜K£ÎxÏÆx[Ö6(Ÿæªr²biÕX ‘,KH`h:F²AáÂÒ[3sžžº¢N¹Ïc/!h?ô£’TÌ“ƒYD†È:é@^¶Å +ØŒÜ-Nª~ëߊcR–ÐEj"ÿ@žG–a²¾J· ½B« ¸–¿ð3øÅ½w8œrÁùçá×~íWëÙÇryÑ‹¾W]õœcÚ‡?¸õ?""† ÿ[@6'H¨GÏC2cGÎp‹ (#Ù$H9—Qµq£Q€YoTZþ8R@Ž.JÞbC6”è[L('bɶW¡ìz6v­”¿d~qÛÓF@VÁΣyôˆF >·7Bˆ¶TX ©ÕvtR¥ŸfJŠ¥FßOºª‡mÉQÌüÇ›Z0‰L†‰(I§/½µ|¶–ä—:ˆ+z@%OªÐs…?$À­£¡ªÂñ¨3ÉGÙ16ŠŽÅc—…[ð’žÒ+-õ’}¶Œ¨’ŒŒþªóY~ ú ÿ«† Çá„‘ßÙŸÝôx`ó«8ÜòÄ Ÿ„“O>þüñ‡òìg?ëXw¿ëO'&À)aLϽÆÊŒ : C‡NÂHt9¿@4 è‹6xa‚ŒëhÙ‹ñÈ{ĉ#VäwkŸ=Œa…G Á`6~†‹„ôeA¬MÀf‹d<4m¹M ×búg³æ½´å(‚#±%N’ŒJ}÷‰ILyTŽÃYA8r[î{ù„ö©iºët=7[Ž_ØnÕ’¿;"h`;ðúç ô0óeê¶ÓJJüËZp1sô0·S¿ä}ó¢«S3–¡È!/V•u$e×Óf5—¸>ã¹³¢S‰±2òŸ6ýÏw¹‹=Wæ¥â£ÌÀûnùŸ¸õáëq$åœsÎ9¢çËåiO}ê±îàí·ü†!…ˆ†A´€Ñ4rh¯„?ª‹h4Qi ÝöTª[ÿ²ð`íeJŸ–ÐÈ•6ªÜÙ¨ú½q{6ˆ ,£—íž 1M(ÞN¶ÅÑB‡|ºá E>%C«Y—MÇLUÐ.õHŒ"•U*GMV•þÈq9Îé 5¢gEÏr'œÚà™q5%žO¥ã1W7«ˆªP…%êËcò”‰¯{ÒVÈ©…aJý^ݬëËò‹ÐÏü²kiž¥y#ý³y¦¼t‚Uó¼\³4ËHýÂ*ÚTYÔVðÁEn/—(ì«×ð-~yËÿÄ‘–;Ö¸ŽÇj9ÿ‚óu¤¼ý–ŸÌøöü‰ú¡ËㆬtèẽDMë‘Åy€c’d£óÎË¥ÞpEº6BgÙ£ñÀÀ½™V”ô¬õÞ3g—xÞé=凒ԪNÿ:¢|Ó7| °‚™ É€z²k†“?£šMé‚jêµh›µ¾(*ú³L¥Åœ°±HаjË€QŒA§ò¶ ó¨¤XÃdj¶ÃƒÊS¢‚™¬:'y6ÍK”±l3ÑÀõ ¶P œyXÞ•>š©qŒ[)½H¯éI÷~úÄXd»M´Ã¹n<ÿ®Ä{oþMtqŽ#-§Ÿ~Æ×ñX-§v:.¼ðIǺR‰”Og .v+(Á?I#è³9rÊ5Pr 0 ŽiÝ—ÌÈ1Kß,‹ÎŸQÉ{«HÊVH10«n›¬Ë×г »€±2nšJÒõ’DNÊX Ó:ª¥¨tÍ!¥ŸTõ†lê‹ù“îY×'ÒBâ;ÎŽ®²ö·2)X ¥>ôL—”@’•úÙ×1š_ƒÓ‰xl|ÿE»0ÜŽ•èjœmÅÃ6ñÅ/ªŸ0?K …Ø•UdM«^$q8~·ÜI¥RM)‘ÿjnÊâ²Ì¯Ì#×À•Ì"öïl77óì¾i=¬‹ÇA«&.‹µGüíïÄmy¬šË.» §žzê×óµ^öíÛ0e½k×.\xáñ£üÁ­?ƒõŠôωèâßÇÝÐ'Q6Idâ a§E•g€¢IppÌDÍ@!VG(ïQé)ÉÖ’]SAÆ6V!¥Ëè°„Å„¡w&ìMÞœ²ä@›ÿTyLZôCDoŸÄ&ß²c•>BëªÑwùͽÙloÜŸƪ„ºMó~ 7³TJ΄NŽj°ïˆ­O;Z8TÁí:çÞ<ê‘UñÄ Ž•ˆë8;˜{+&8ƒeð1•hÖ³¬:²ªofÉ¢+¸Ÿ‡dÊ‹|+³8Ä>Ï­ë:WÄ\6OŽa¤–9ßf™oé[¾ãKµ¢C-§žz ~üÇß|Äõ|-” ìÞ½ûöm`ß¾}ŽØïܹÀ8”õ3žq9®¾úǺë®üþ­?¾þÊà>‰! ‰1DÉ)ÜIŽ)$g÷PF²pD^‹*ùFŽ>T LqЪYƒnO’îœrþ†FÁÖæ´úy-ÀKæQÍI«!+¨A1ö ŒÈ›^«@.œ‹½PI¥^(í/4º*á.ÝÍ!©eçŽÜ ­ÖP4AoJò°ÆÊ`çsÝŽ‹ a‹cÅþ Æ(ƒyáËðCÛyå­^]+¸¹µ,B|ß=fªÉrc0Ä×ÎQ¥ˆkœ„‹&]2î`—<¢ÚŠ!,td8·¨ÕFªíÄp)–]‘:Ãf‘½ûK¿†{7îÀÑ(§œrÊQ©çx)û =½cÇìÚu2vîÜ;wtÞ‚×¼úÕøÎ×¾öX͕߿å§ä“OC‡~èÑ÷}‚„†NRJC 1dÛAÊ@–4TX¤O-*øÈ=rÙ’Z¥ N®BÅY(5޶_Êg*{Ó‚çõ YZ8†´oÚQ=ÃFKé„|6BšÒå>CXFGªSlÎûÏÕaà.¬sˆm/¸é®Îä/Ú¯\!˜¨p!À±`FIPì'U˜béx£‘í [2ÑÛýfn*‘ýLu%Açªß+ÅÃã¥u÷_áh•;ŽŸ8üG£tÝÑÏFöÌg]‰7¿ù͸öeÇ.7ò²òö[~ }_ÎØs‰ð÷C—µ€rV 'žÊ ã*":+¯u¡+Õbç¢çÂËà#iog`´ï\%Nú¶G‹ælÂɰnÌýIÔ#h‰ü¯,óPÝ`a,±gxíÁvÞò*«Y-¤¦],ÑÌœXeÂá0¸DÏ6kƒ¡ÕïÀB” އޖL™p<ôɪþÞ‘:´tú½ê¥ISªÙªPŒ}¶$(ˆc‚ƒté(…å ±ßSlIYyŒ+-›]†,)Ìãí`Â3Hqà€Â% 'çRiÞöÓR¦#ÈéWx¸·B¢G¢k•&ÓµMËn—¹ó`ÁXãr+Ž8 ¡PΈ‘BR»7—Î%Rtm!/ó@l²é)¶Ñt­ LÞ2±Üª{†À‹Ä+$˜”c¾Õ¢fÉüĺAÔjmù¹š1“àž#©¡4‡ªÊê ž[F´„ò›åBðîpVž(j)øÜ½ÂÑÀþQÞëh—<6Jhf±Xv®âòÜóŸ5þé?ûg¸øâ‹õð¤|ú?ÇÝ·æ¼½hC¶”ƒbé°XaˆÉ~PÇQÌÒgúëÎ ¸}`ÝÎÅz¦þ&Æ”¥±{Œ›·níªãHÁÚ²‡UÊo¶o…dxC­nErmÚÂYaCüíuÙÏ<ò-Ô¹±aq(V"™Í§øß6DÙ …ÆÅ»ktúpå‘‹BÒ0´Â#¡^?B"Øhÿ¥F%Ѧz!ïҫJc‘^’gìö(™î7"œ¬öCòdœ¹‚ªØã*u¾/¦š‚N˜Åæ ,Ö1µ%ê ÁÏ”k¦ê  2ç_aÁËj¨Ÿ${†üuáRGj¢¾(ÛgYŒö1Öɵ|äZaJË|ô=c#ÅEenlÚu¹ËwfÛñègQ§—)´äRîÄ ÷ý-úxxñ~–•³Î: ÿá?ü»£Vß×J±Ì|ð¡Czþ_ü‹ŽïÓñÜ߅Û÷^Ÿ$ú¡ä  ”‡Ål+ˆÙu”Áés,F`[+ 1ãŠFÁŒ±Taq% šâ°º‡«ï囓¼8›È|þ ý-Ýè¶*àfÁ¯¦‰Ò}cÜcCË\r¨R;šWcù¬æˆ"äJµ¤ ÈèlC:ÍÜPŲhñMµ »yÜ,¨‰«“«¹þ’9]ù“SåŠ|l§$I¯Çè¤È´šþæï׋Qš2ì$v‘eH‘Y î%¸±ZAgÎJE" §Qõɶm9=ÉÚ±*™·,#gÏ?˜õ3|æž¿ÆÑ(çž{.žøÄ ð‚<ÿ¨Ô÷µ^N;íT8$­àèqõóŽm ¸R·ìýtN 3ü‡Cß‹k¨ÀA1bˆœO Câ1RzIëbYŽ ±DàÒ8XJø$ u9¥¿¶‹ÑÕ¥ÀGåKµÅjD ä7€½le´4T!¦ÝBœü&_H?[bìH¯QXiŠ´g„`†§¨>‘ûfÎGäK¡A¼ð)³e±r %ÈsÓ¦5VŽá´•-Sꘞˆ­cn8yÙz¿˜IiÖ%Çu [‘ÊÉV§w*ˆ†ýTŒ@;ûr–Ö©t‹…­”b^+±0 (Ì:h æÍI,¼jÎ7»Ýxxv/ŽF¹óÎ;qÉ%—â-où×G¥¾ÇJ9X·P¸úêçáõßû}ǺËRšßf_ÉÐNÌYĆlÔ>ÿ²ä €‘CCdq®"<¥¸0 e[Ç‘ c,9<̾URI¾v2Â$à TVXóšƒù.Ä,q—š]Ø÷°Aí|ø‡dãÐ64¦]Ùëz>ÈF!Ðî–èW–«åÈU¥™  eûMr|ª¤é(gµ2’'Â^¥2 Í6X>Á{£#ˆªSÊúÕ¯CFtyçßôà¿=ô¿ËÊ%O{^üâcçÎÇ– èÑ.»wï“÷íÛ'óöÿñâ=ïyÞõ®wë®"bÀÞöÃxúùOÂt1™2¦“k«ÖV{¬­õX_ë±¾^þvù·«+=V¦“É€¦a4MD Œ`âe¥¿t$Ý`Þ5˜/ҿżÁ|Þ`±hÐu}Ð÷}OBŒ@Œ¤îŸ)C1ZG1Òˆ±™ÔGcm4@’õ(>ÃEò+²ºL¢’wX»F¾M*ý·}Ìz1Æk:«„¢•ÐŽÙôÍŒMF•ßñÞøsþìˆγžõL¼øÅ/>z+ñë¼|÷wÞþößÇýÑë®`÷lŸ¸qçí¼D!4h( m&hC‹&L0i&hš ¦ÍM3Á$Lòo-P „ì„”DNáŠë°æ†Aôe8ÅFÔu6Ä,:<ÞÂÒ‚æ(fˤ‚§ÄÅac[`ûÌIçZð…é«i›lß|Ÿëq°»‘Œ=Ú{¯ÙµNJ6 ªSÇgÇhǤT KÌ’. ’8K¢&ò.]ù“5rŒðêÜ<åjqpAáŠe¾®‰¼ÿ®ÓnªÚÙ7ï®ûšð®Å U*7VŽ˜[FÆã¦Ý ±'ö–Ø­ŒBf&Ó0AŸÄ‰˜õøòQüW]u¾ç{¾ë¨Ôõõ\Jð8xÓ›Þx¬»#åú‡ÿÌ1?N‡½ Ö9æÈ %\t4é$ å`Çl†ÓPµQR®³9‘kŠ$fÊB¥…éíé|gŒ­Piw Rˆ¿ i ŒNÕh]ì¾X·ÖB[äéþ.¶ÀÔ¦w™IB"iU¥—îZ¢]ÁY©mÌi®‰Ð’qð$Õ¾­µ/Ç%g/F”Âý ìÚ±ÿd=U-Õ¾@r÷[7[øÚ Uf×ñ*ïÂ¥Îô•C+ªðÔî¨#ӑ–uÊp9cÔuáOÄsblŽì[ìÆý[_Á‘–‹/z^þò—q='Š€W¾ò¸öÚã#LÄ"náÎÁ`Í&Éa4©ü€â:$†tR˜™a$dNÄ@,!"DxS€¹vËÔëd oo´Wm$àBoô6 i—=ìCÉøºœçšÂ~ç:uç².·K{iÏ* B6œƒ!-ÖéCþ2U“?G‹‹÷‘™§ü|ìDê$'Îâùµ£õeblÜì±à ûDy‘’t–EØÓ¤c €-1æê)Ñ.ì¼`ào6/E:åß7Ò+Q†SKïBÿ$‚²|È?åTQ}çf…Ø%žÇ~L=N>)œ¦l6}oV‹‰p4Êó¿á…xùËBõX+¯ûÎã'XÜ »?ˆn˜'ÁŒM2ùü/ï ’t¾œ(!"ÀÉ)”CžRÈPe-!µå¤tèræ ˆ×B"åùj6ÙR¤ÁkäöE%| Ûõ²bF#¿Eߦ®ÕlÍ É#iÛöÛ¥¶]‚Ħ1þ’»—c©ôíüu‚­LPMê˜òW¿û‖%8F”  .o.¹®Âò²šxÊk°ƒŸ +fcÈÅà€0^6ÁKÆLã‡úX/3UÇŒ¡šçKártÓó^ËÒúkã¡Ù=8Òò”§<¯yÍ«¸žÅ—½áoÀË-`6ìÃW7¿¤’?'·P6Ÿã`~ã‘û|Ž i IJ·#˜½.}Êë[„©âöœ„E=l%ç\X¥söò#råFèªôâZ(cà Üy˜¶Íãb\ôœFúX~"…m\ŸQb÷k@fÔ¹ÄYªu&Ph8!©iW±†B[Cš åGŠ-r¡Pý®åè¶%N¹ðx˜÷•÷™uê7Y°ÿ"˜>J»¦X±‹d—´«JÄë‰W.\´³"*NvNëT¹D ã"+×k„B&[¿I-WÛdX¬“ˆñ›Ÿý¿p¤åºW½¯|å+ޏžEËb±p²Ô7~ã u—¤Ü±qî‘£LüK@8!üéL€þAÂB)ltÚ;A °Ù.À¬ùQõ夰'h²_.v²¾ýá‘~½Ë bz÷Ú?,é7Ú{‚ôp“i³tžU˜+4´àùBœy$'æTiþ•qU v$ÇŸ‚&¨3d(UÌxíJÕ%Ó ‚ïׇJ}…pjkÛs£¥,†ª¢‘]^c±Ü‘êßeqeB.¿{DѶ)ä˜ô^ǧÒQæÌ‡Ô®á¡!>£ofi@¶2NÛo«Üh¸nEùÈ»1öäa-†Ž´\vÙeøÎ×ýƒ#®çDñe::[Àó_ð\rɥǺ[€ÝÝ}X [‚‘—ðÏÅà›RJªÀÙPÌ%DtÑì3Œ”xÁî•íM0å,XÅG&ä4Š4k‡L’—ÐR‡·ï aá°²Ÿl¨b—p=PFÀ£ÿ[†hîåÑ¢"pÕ˜³Z £´Þ@*üfºmè“C£ŽA3÷!¨jä 5ãt6V;3€WÑj;@ÍôÑ:©žà²H~1œ8 Ôp£/–0–Ȥö:ÛoÒ¨Ô/}¨bz ¿ ™¿m¢„MÅFàçÚ[éÓgmK®›7ë{¢H=½7?ôiyõ«_g?û™G\ω²ÿò ßð<ýé—ënîpïì¶lÄ-0ƒ%ðª$(ƒàÄ(8? ö¯ëÔy Y7r-ŒÙ'lØ…²-Øz¬'’¥Ï‹kac9i¿Tú„<_Æà¬é¢’EÏ ¥›œ ¾”úJ–Y圂Bó,–À{–&¹N˜:MиPCá–‡YŸ}¯tÔAÞ–¼$£ñÈ0 ®œÂ¾$%£•ב ºEéÌÿò/ËÉëÎðʦcz\Û©œ'³ÌRðIÇáVƒœh¶<ÖͤicäzEêmÄc¼–`‘q'+³ò•½7bìo€IDATáHÊe—]†W¼â„çÏ£U®¼òÊcÝ)wlÜ Rh’þ9A@%tÉÌÖ%4ýV´‰ÅEÒÖ @à¡eZ½…Žc/ûÇÛÜ(ÃÁäöp%´Ù-Í9àIY­_ÀËBGfMŸåŒ4 y„\=… wí4ëà$²´ƒÇ‚·´GÎKÈfOhî$žB–xѾÐa›ÎlÉà õ¹Êb0V.Ì ¥Š4kÃâï)¨šRÈÀØÜ/ß-€,9pÕ³†ª5U¿`÷âYÛ±aµÉÄ·¹„©^‚PÛGm˜2ËÈK.^¥œ÷›øü}ƒ#)¯|å+ñœç\uDuœ(_®ºêÙ¸è¢'ën6ú‡±ÙïNDI$ÿó?FDä³C”è œe~a)ZŠ/½¥ikíß#?î/ô'Õv—øs” EvOØŸÌ2º$jƒkÍŸVRxHôñš>ùNÜ™úÉOû¤¹ê›gA2JÇh,-M`>¢'”•`çBbe—WVµä0»eR.›(ÎÔ둺…Ð^“”‚ÿ1,å©%rƒ½<£}ø¨›ú«ÃÚDQP¨HsñšáiÅÚ¤·(pLÔJ:0ýó“৆ &;FòÅ>vDþÿ/xÁ ðŠWœ0ü>šåšk^ŒóÏ?÷Xw0›˜* È„?f†õ D+ÈFcÊ‘BE²Õ]áhkHiq/J´¡ÄEÜ+ظe¦fÝÝ#ƒœî^ZB©½…ÂP0V ÀB~P:O#rVu¥ú™ÝbÛb$¶ sµ¦ŸBj÷QžÊ ?Y«³RM¶/GŒµ±Ã„PÈ\ÎKµ~´ò¾É¼4%Vû‹ÿCÒuöÒ¹yi~ìä…†)rÁUý<^Dc/,ÖÜN'6ÍIû‚³ I‰¾œêù€¥û6^¸jKEåd™s§&åõ#_y'ޤ¼ä%/ÁÕW?÷ˆê8Q½<ùÉÇOư»¶þ^¤ÔB¤…XÇdü1'‰AŸƒE \AM¸h&€£ õ`9 X5`ÉQR˜ÞœÈË_}PMùæàÛ %ìªêÇÃM ÓGJV톀–ýªm;ŸX’îðm¹Ädתçv.¨ˆ¥r¾ÿåj îH–—\¥K2²ŠÕ‡0¨xCàLo „c §–øÖmÃýfOóY©™ î·<Ú¾ìÑù„ôöµ-Yl÷Ÿí¢pÃg©tyln6ÏÛ×]3-Í› ÌKÆZÆ[l&“›µ­wì¹wìù"·<çªg㛿ùE‡ýü‰røåòË/;Ö]rçæ0f χq åRhˆ.¢¸ƒ1fr+]¹DüMÅ+åTpÙÇA(Û,Xf+ð-SýÍþ4B—W¼CHªF‰7ÛöMõ™¨4 —¼E˜’‡ÔuV`7¹ºè³­×ÌÆ©P µÒ°¾=/6€‘™£Â·ýZØR§åœ•sqCt/R\”*#¬75«b§Z@Å%a¶Ü¤Êý[iT†¦Ê‹ö-V½X %”©t‰ŸƒßÈÎQf6Ãb:}þ4丟ˬðiÜw×{p$åŠ+¯Ä‹^t|%0ÿz)W\qÎ?ÿücÝ À"ΰ»»ŒdÃ-²|9%¬ž@ùJn€ä4‘Çüœµ{åÂqÄÌ7TÇç¾)Ä–«ýh?åxb¢@[bPíZÉó+< ÐË1R1†š}Y£Ë ‡eïD¤@òUH [C¹â½«F 忞Á…$6“'XÂ-k-@)'MA¤ÐZ¤5ºXÔ² y5÷¶t¾îW t"²!„Òæ3°ÌƼ<£¾Õ‹¦’÷Q0®ÔP;Áöó¨*– ·SVD‰¥#ÄhÑ”yq÷å6ïßú*>uÏ_àpË…^ˆ½è›ûùåÈÊ _ø 8ãŒ3Žu7¤Üº÷Sà•¸Zâ_$}Nö²q8FÑ’ÁàÁ 0"‚Ð…¼'Øn¥IÊÌ:¯%kÖÓ­0ô‚U VÚdÅ\!¬¤í)=ªJ} }‘¾)gCp<„S °J©…[)v„$Ó³ôÖÒ3e!…cFæ¦þ›©!ŸÖY'×¶©Ú™”|±æŸÌjh&”`O5w7j“üÕ‰RÞ<æ$f~«~’ášVñ/¦,Jõlª¥{û¦< À0£’ >~Å—œW€ª€öåéJ¨Ú"ÿö©{Þ‡#)W\qʼnˆŸÇ¸\zéñq 6†Ýèã$«áB•*fÈ!Eª%Õ‚ë#:UÖ}õJq}xD¬ky\icê 9&ÄR——ÔÍ )ZOIgi(ûî4"ëFZ½^×Je/a³ä‘bÐ"èþêŠAÕ  ”¦Æ3y{¹kón¸ã÷p¸å¢‹ž„k®yña?¢òô§?ýXwAÊÖ° žf핃_œÃC†P"ƒFÃ(Ø‚#€(Œ3Ð/DzÞÙ8¦°`ëj›ó‚žÐ‘"к oñvT´TG*îS)q¤9ò¬Cv¼È…Ö¦hË2IÓ¢.>udy¢$àb3N+M’Ú½ÌϤ¤ðd;kºo$S E“ˆ¹£mù®Î—‘ÑÝ‹RÕQ†]í„,¡©fîóXìÒºÈ,ÅÚ=GÑy60 W/nÉKµë‚–„Õ~ö oÁL¤U-JÖú9« Î5Uâ-©zfûuãC‡#)OzÒEøÆoüÆ#ªãD9òòä'_t¬» %r¯=ïcµ¨=`(q‚b]Œâ Ž),4#ÇÍ"‘ìu2fÔJÊëE¾çpjéW©Ðýh¥/V–åi†Õ`ФNŸ7B«ÄÞ7ÄØ ðÎJ²á=#(ÌFGcKm(êGÂg•L—Â0I(WÍsZ¡%¸¥!Ã= F¡º#éÜh#˜"«`ãüÏK£Ôb>UcBö=k}ròÏÖWIóåò´ò#î-ÓKæÙz@Õm¬VKþ]Ø•DñNoËRÙïßøŸp$åÊ+¯.Ü>Uo FÄ€!')ÿ4—@²˜GD€Ô¨l×¹7ŽBG®i’õÒaíÐÚ%½Hûº š¡˜µ¯£Üêœ2ŒvÂdê3JåÞ¬•Ø3$¥†¬Ö/s`“ÔhúÙग़ØWõÂÂÌ ±d&G_Pù8Fºíü‰úÁFÒ5ܳ>(a?{ëÕ-gá·¨ tg¥û¢\Â@VK ÙNÂGÕza„2ZÆ´dP¬/ÅÖ&Þ ö;.ê ]¥ï–ÙØ¦Ùþ^Õ*šŽpoÂÇïzޤ\zé¥xÉK®9¢:N”£Sžóœ«pþùënH‰ÜA‚YáˆSÜŸÿHÈþÊð0ŸYI­¥¯Ñÿì„*{¨²œW2Dö¯y¸´®{Ôxÿ8ÏƽQýÃKã• ç¼=”ˆ“ë—öMÿ7v.)¨Ué¿;eœç€§5jð@Ù`¸­àCT½ñ—,Ve‡…IªÎ¹¹²+*Ë)pKfܘÍDϨ–׉_ìlØ«UPþ}¹AÊzµk,Õr£ T4‘ô# ‰*J1B´g#U îø„þWˆ •bmšU+ù’¥#ŸEæ½`é8N†v‰]ú&cÒ3í ÔŒ¨ÖìñTAÁœíU/–u¹74¤FŠô!£¸–k"[Ê(ì[×Iqt·4h&Ç2e¾B´-@g˜pÞí¤oó>¥9ÃÄìtÍÁV&Æ'u›¢ž¯8>£c1Z ;ù!O›¼&óˆ£òcí¡šû*D DK³QBe ŒOÝó>ÌÍ3{8åyÏ{Î=¢ÝrÁÇÇYhh 9R#pvòa0K¤P5{@6‹Ô…ħu\ëÏ®¯oB!%T?itg ŽHÀtÁÒy›¾ÉtÍ^6.•pû¿ô©@Ó†¸»6|óöBÑIê šyØNÒW:<"#Bm£©o14~U,É2r™Ê Ô¬ô`L­.ð…qUÚvv¢ìï®í´ñ7Ï G‘p*­s5.ÖŽ:…¿É‰g÷­h Âù Ë']àV:*ª­€.Âß~õq$åŠ+®ÀÓŸ~ÅÕq¢Ýrê©§ë.HÙö˜Ý¬F`À@=拆PRDh({‰¦l…²1‰açË å€q±ôÃÀ8–ÐÊþsT˜¥ž¢ËXjÙÏVKÐãOUN`é¡U@|}…¾èy* g9*F(ö)†¶»û±Zɵ¸È–+AÕ*{„˜3“du¡¬ÙPõÍZÜ•°¼…%9ŽÅ8Sp¬"ÅbÜ”™4"¡Éëﺘä~¦ªF ‹„Æ ß0.Û¢QhHÜÉŠª™_ŠqЕy/Þdúá^°Ÿ/"³MÀ{¿„{7oÑ”‹/~2®¹æ›¨Žåè–]»vë.HÙöêÒs‚IMì£xÅb$æ Rš’ó‚‰Àc‹e¦!ÉP¨ò˜÷sؽ#¾<ê·µ3.Sð%x8º‹ÞèYvÏÂÝC¢(ý²Éo Ä%Ž©Uo¬g’Rœ7!K;…q’©—æƒHûß°Aûf%ņs5¿#x…óŒ±J×\¿< çóꉪž„JîÊ)u‘H¦ ª‡½·‚~¶~­¾–11jIÁé…®†ò²tŒ¢œ1Xéëã÷YØxêSŸvÄuœ(G·ìܱv¬» e>l¢ JGœ;(’- „ƒà˜Îˆœ4€X2Õì†TéÙä ÏBR”5øÝf6tÅ8\@ΠL7'­+u…ë iÝî6Uš$Ò!K…Þè=E ³uE#±;4ØÆ)+ý„¡[lA D²âŸ€ÎÙÊЋ?k9å2Œ!—Ö–“ æöšK:Ê+Cö AÁœÆ¸‰.²¼I…w9Zk{À⯫õçñšPYSƤËéä*Tû4!!D £(ý“uBæ9飭τ¥5 ɺÊsøï?ò¨_õá”'>ñ‰G\ljrtË®“O>Ö]’¼yÌG¨Yz& FFlX ÀÜ4*ÈPÐ(„˜½Uß•¼Ei& §–½$l@(HŸµP1Ð:Á8…y ‚bõÿá)dXÜrtÓÛH¾i¬ÞðrH‡†Éót—K"ƒ˜J¥–t»Êdlÿk 'P!¦ú†k­E˜¡µÂë<ÙFÊdXÉßMm´š—Z¬—½ÿ’üá•üKI8®£ÐÛÀGìÞ©¥º’µ¶R¤rv]-ö%䋪h¼£ñV†õª9µÌTØ~´±C)—_~9.¼ð‰G\ωrtËI'ï:Ö]"b.®(ëP1þâöÉÈL ¬UkÈ¢ÛV2ÿ7{8Ýdâ|‰ç5ëg»=¨œ¾»{ŒºàœLÌÀU«Ï— 3Ð6}T_OâÍõV®NºQ$éV}VȪHâ %?YIÝÛgÈÞjLÒ/ûyl¦X6?¢‰–éši`óâË‹dXw0_§ºy¥ñªÇ€eXÞÿw¤ÿŒìÓKBè@ñB6e×–BNP&ufØ7c^”é—ùl!ª$³,„…Ä@)÷Güû¾G£<ùÉO>úù8,ë;Öu¤|yã³ê äµÒk ÿW¦P=qŠÄ6dô2É›ÙѽÑ÷Aî°ýÊw“#eÖŒ€=Áª¼öL§¼íp$шÕ$!)ÐË~L*rª„,ÑK£òa\Y¨:¸<%¦ýœ3‚Y®ÇæõNÕ¦ó£CËž;Gþ÷±*e}í}§J}ý¯eõʱPÄ2G—ÑÒWÒ% k°eÓÖ( ›åú”l)#F¦?¤J™¯¢E°}qeEÝ3ó[÷ ;NêÀðÏñYVVVŽuªb`‰§\Ögâ8‚"§L`±Ü“0ŒB”“Ï|‰T!'.WôØðeȹޥK²Õ*"®¶½”ž;×öÂè¬AµŒÁΡ°!i,¼ëìe^ª¶”_±P!a¤ÎøÃq ¢ŠÚf»i(®— o”U¦d¼e\'ÊÛ)]ŒÉfËÃîD3Ó^e©zšAã÷.ÖIü*j“¥”¬]ñŒÅêRF~wì›üÈ1AØÄ$q [`¥ŽÒ5ž»€{fžÅ{Èf,³vheýÉÍ¿ˆ¯ì;²„ï¥<þñ?*õœ(G·L§Çð»Y}들Ÿ¼˜~c1 sN <€‰5±Œàäˆ%ù@˜ÕÃùçÉžØàìªâs~Ø%g!ªÆSFÅîY»ŸõX=¾ÎBp ­dW 2§í­ cO°u›7àý` CRC°ÊŒ¬S#ó ¶ÌP¸nâNµægGó¶jþàýc­»•±åŸ@Õ2 âR…‚0”ÛS[Óg2Û½63uûO$Í\ÕmÕQ.Ë#ÅqAéL?’Á×ðr››ÚʰžŠeVÂÉË%öÏí?ˆOßwd!ŸK¹ð qòqdl_„F½¹•¡ágx,œ;ƹÜ)Aõ`ôX;\>¶2à<¸2H©P™ ÌO:U™ðº£Ó0.W@#Þ@RŸ f„b$©æàgÿÇ??ŒeúØ-ÿùw¸óãÝQ«oÇŽuœzê©ÇzX'Ê’²ººŠsÏ=wÞyDZî àñçÜ’cÈ!M`´ c20D¬®öX_°cG‡ë=vìXà¤]ú¾Öc}­ÇÊÊ€••m1i#š&ÙÐBÑ ²[ú‰òȉd1ïâîIò¹âÁŒm$h£.±¯T^äµ8˜òÜ(¾<°›ño~åè˜N§X_?~¼MN-!4hšãK p†HVšÀ9ÄKŒ„È„aH^>1 óõX$ð ó—çN”G·´2!µ†Š»!Yi½(eäqt ¹)nŠû’{ò3ÞAªh† ,aúÿû›~:ãn…_‘á/d?Vý+ŸÉý^dµ–|O0ã´u”G%5%¹¾Z$=s–-!-r9/ç*LÏR}X-×)Ž·ùôØ} À<ª a}}vîØqTëÉìôÿ`j(  -š0A4Í“0EÛ´hÃm˜äß[4Ô€ÐäœRp°®ê)Èj¿ç¦;UxMâIQ˜•k¨?[€|­ ÜáZû{Îü-ˆF]/«‡Ž³ ^M¾.é'«™ gáèzçmb“`Ónÿäßbx—WKÙ*°¯Âö§zFwd¬:ÈmÔ:í°¯²ŒÏŸ¼…æ8–T³že< >Æ•vS /vÈÞõ“`Á´Ú0+ÕçÛ$À[K¥pÒÜ †³YG1Ä7?üIí2L0]™õzO”#/D„¶mu7|©ö{}À2{ÿÃÙÁÄ> —³×P¹Dr¯xíH[6»AŒÈ jÿW÷ÙÉ¥î°ÿÌ•u•-âúo¿³¬pLÛŽNXkuelæº1ëd\=a«p™È_#}Þ7I!yo&2/®bµŒ¨·K¢b㹆$lðVœ‘…{d qù-³»W]WíV/®+'ï‘dó‚–aøÔ:®×êÚ©•Sî›ÞT9( #«kÅÄäõŒ1Xmwâh—SN=õD°ã´„޼¢£Ú©ôgl”ôRw”}g!b‘Vz¤(Ï˧¢=§ wø=Kƒd}—ô$O %­òI¶£x«,íÀÐ [ÁÚ¼nóÊhk„À¯ÛÈÂ…¾U“êõí{Z+tH‹%v¤‚¨qy/5øUe:è;à§OÜ5‰ÒP˸ú±?.¥· 9teü]-ñqòà¦Ô©lF*VéÝ0®ê „e’Ö·øçJ'TÏ‘˜EN(žù ö²Ig4^¡ú¹ËÂ@ÔÇÈÝÖ*L–!öøÈÝïÀÑ.çwÞQ¯óD9:%ÑqÆx»Kf=—Ìwl4ß| PNfõèÑø?Eø2š°JMF²GÊ]ª“ÍÇNN%K)ÌÞ†üžJ”Ï^ fCO”žYgOòG9ȳh}ó©C˜Å¿ÔçOi×ÐQq¡å*Í¥³>%ë$Ây;¨Ý¥êiÊSj?2HÃi¤–ü‚kñÞ0+]düçkù_NA¬Šä„›#´#Áî(©à47‚žðXš2ÆôÒJls3v.š„‰sb©¿Šâýä4@»Òõ*N”¯¯Ò÷=bŽu7¤ì묮”ýUIŸ €¢À)e²8æØÄï‚¢õ‰‘YˆN!´fßW´jäKâTˆú’’rù\Â/h/`c§Ùdà{¢˜Œû©œø/!âI›f‹ß›iuSl.ú¡(A‡cˆec*†$…7oÂ~4Ñ)Ṳ̀zî.ÑÍdgyÜÊ¿.”Û³ö!ª‘‹y[eßD%$Ëàå^KÿÝ­*äZ0~ÿÑ·a—Va–X“ù`°·¯%=stÞ÷Ë.jV„Ý‹ûq¢|}•Ùlv\1¢ÑΔ„Ô_>`¼‡eDÝCP2Ã51—ýU®W¬6ØÜA›öZƒ¥õÿ5¶OùK´MÒ®Ü^¤9̩۹ÚêqYÚYì†ehô³é‰edŠb•üÓõXIéŽr‚yë«~v†P£–©eÞL³{ç–JÚ>{l¾Ž4Z½630‡³Xбt¶¼]$t«.Y¶ÞlÖ·ÌÊ£VÙ!&³Ç½2–:mW­#Ó¢ªEb{yÆê¹x$ÊêêñnàDѲgÏnÜrË-ǺR^Ü“?v©ÖF69@ñ|%¸V"f¢%¼BäŒàV çJj]ÖµçYÃ(› Db¶ÑŠÉ:ƒX˜Ç`*V†6©7 ¯ü¤š…ΈE8´þ¢Ù0ÒÞ\œÅìšÃ!Ç33á.l´†"”Ž€Á­õ!«RxîAàuÚ×bxEÕ#;¡•d¯+aiñûÊdjܲ¼fRWfVŽ_g:ÚšyÿJì©;Á0ÝB0ý¨Žå‘¹.'£uÊÌfØfRްœ8psü–‡~øXwÁ•3V¶Bœzï)t­¹‹€Tyù‰*±‘è¥ënèUÖGëqTºdúèV¼Ý÷0Ú·—м<¢…a¸¹0ÞO¥OKíÕFû·õ;¢oˆ.;€^·3œ.’ |F¥ç!D†Œœo‹eº ƺ$ZFfÜAZg»Ь]&•G]P »uE-ÏZª/ÉçÕ5²=/gs¡¸žsŽSZ²±G¸»†¥®9‚‹Ib¸²…x\øêzŒ¶K²¸UxdH*Ãpü@ 'Š/»wï9Ö]p%²is…–] †6y(¢8‚(aÎßÉhõVÀ³a&dÏÇ }¾Ü'u5­d1öÝãZÚ“º•€ß‰»):☚o´víY‡²4É ‹ a5^Wµ¢Äm pélq–ü²Š×¤¹;n© šöÈ Â8¼IWßP2†ÊËWJ+y„%Ls(D àlHV Ã/ “jÎ, €¬ærû¨úÝÌS­‚Öc•gÿ¸¼\ûâ$šà#Ëf³ù#Wù‰rDåž{î9òJŽR9ur6&aIŠJY˱ºl‰•1Κ}RkôÞÑÂÓ{MhK„ñ¼lº=rÐ BÿÇê8â·ð‡.Ú½AÜà+"P‰·T §îoEN¬‚$Rn5oK}öó…e®«NOŸÃ2®mx–yyùšiÔ·Á2ávæÔEÔ«m޳æç™L›d-èö“½âú:¨{䨅gˆXœ9íPU«¢ª>ËYGê„|, R×6ù9¤eÏùåÎNT¨ÞÇQ,OúÓ±gÏñ%ež(Zî¸ãøˆ»&gb&û¹CýJÒ_L4Â¥JÜ®ð‹Ýo £”oׯ%l­Ôj¹yT¬ ×­¨Ä¬ÏB²(GFK¬ì\Û–ÑT¥ær>©E⪨@5Áuò0ó»?”™ÊT3£uó Œ+©5,+ºj¾š1_£lpµgwÈü» ÔVͰ‡¦\×òoTˆ§|7n”%¢Y!€…ù0å°sd®•ê$ç(ƒFg4ê§g7Æð[ÌTô™ÔUöÚ£0Ò3Ƌɻ™”÷ÂÔ–³‚^2Á¥çvíŠ@ Üó ð¹/7øÔM3lW.¼ðBÌçs|úÓŸÅ•W>'ÊñUn»íöcÝ)§­œ[É·T)Ø øp)†~$¡(8+mÉ'^hVÙš<ÑT]FÒ}.B©…ñÙ€ÔF+÷Æaþow˜g@u±Â%Û¼ð¶U§œÈý9ø¦zz KïE¸¶hEŸj)ÂrøÌä^4sAha³ÐDÈ·%'˜|\€#@A®?\6/Lzê –·¥ bI–ìq£1u<Û™)læ> 4ÇšˆÞ.Y{›”ˆ‘ðâÕcÌÜ5á_dµÛkº4´c…”­!T™g`(ã$»ìJŒ¦€þ¬·â§?ùz· ßô¢ ¾íù-žz!áÔÇN[O)·7àÞ{õ±Uüæ_0>ñ÷c¨gÏž=¸ì²Ë±wï^œ(ÇWùЇþwÝuױ–ÉH+´ö!±;4¢ÖÊŽˆhœ„ï㼯bѨì†dÓsYÑa4…}Õhk0ðJê–n;Ê>¶?j»é‚µEêãT%}¯Úÿì »ïˆ“Åaš–i¦âM‹¢¾ÆÆ¦OÉ^©Prº]ûÙº:«ù°*‘:(Y⮨`ˆ¨pL²AäÌ{3/GÔR‚X»rÉŒ(ÐoBPÛþ©i¬,ÉýrÖ  zTVfy±Ò´Ö/tÚ´kðÈì`W ¨XY4¤3ã‚ç±.Ih,Ý÷ —®ã{_qõSœqÚãZ`šŸ€µصƒpæ„'_0à—þ¤ÁØ|ßÿþ÷c}}—_~N”ã«|ò“ŸÄ-·Ü|¬»!å¤ö VèÏd†¢ˆ$v@7‚M¯Ê d‘AšÊÂi²ÉºSþ«æþÙ3\„S'GZ‡vF¹¦°NÑP/1ya.¹Ï–Ä"¬ôTÓ`jöEÑ© ™ÁéÞ·BdñèIݵ¿XõÅ  rŸN§!Êtx¿¦„p’¯C(eBd8+ÐIÍ“¨˜a-æðE‘êG4S¢e›Y †æ q…ª‹ná(öE¨âh@‘J_‹4nǪð‘JT %'P(£±Ó¡/Nµ2%V“" øÏ|VNþ®|þ/àÒ‹6qÞÙ„õSVµ ìlq €“ÖϽŒ°ëÔ NÞAøí?ïÝ»~×»Þ"Ât:Åk^sN”ã£|ìïŽ~à¿#)%!<`‰-„ £\É 1#!>dàÝ"Á%9ßb¶j7óš´çqá|Ýïí›j гV+?ŠÆ!-+Ò\š"ó[Ñ1d/(ÇµØ rã¾³Ð7³¬Ô¨Rv,¡p(ƒ‰Ä¤Â¤¹V¼RdÂØ÷'“}1\¼WH$h"•CrºÈ|¦®Ùctù/igUj¶$ÒÌ—@H\u×È#L¨Ã¦ÔïÅB5ö÷Âðt=êÉe‚aJv_´ÇÿÍ8 ö_«vºBÛbXü³0·|•Ò"^YÛ«Ÿ÷n\öÔ{Ük§D %`;oά¬<í|ƽ¶ð[îs üéŸþ)ÖÖVã€×¾ö;p¢<òeãÖ?@¿õ%á¡x´Ø½g»ºë.î·8èß 9Eò¶ªì‘b˜@”˜l`g­[%¹Üß^â6D±|«ˆ§„iBœZ`ÅQ”\¦Qµ]ï4Ó¡P#ö„œä§¶;ÛO&]¿ŒdÈNÚ—É”Á3E ‚8ÉLŽÕj %?&W*a]eca^R%‘¤•P ×,\ y·Þ@¤s¨× /³±û+bkdjÇš>Äx BèGô¢ôÒ¬Ìo]Lm&3'uX-HxK‘A5*Y¢…šUZ™4J×d ØuòÃxÁ³oÀ®Spry¡ƒ…^G%`uBxê?òj „€ßx¯· ¼ýí¿Ý»÷`Ïž½øxN”G¦l}å¯ñð~¼ï£h›9ÚióD1»Ã­Ç?xͽ¸âœU|àó'á½ï¾cÝí%ÅH7•¨•Œ»i¯@5&È8‰0!–»Ò%·-¶î8ЇŠô)ÛÄF&5tÉ2ŠÔÑô9––Ç O†‹Ô/B°èò†âÛ+¿E(ZfSk+PæUúPÎ0Ð’qˆrájsýH6½ê½€–GŸÅ0ZzG†0:MNï)QGMå¤jŸž„uéÁX|^Ž2å„Wõ¥uYIÆ‘gÚ,F½ÄÆPÁfÑÛa‘7€ë!U[ÆH† ÈÊi^éÁSN½ ¯zÕïâä“&ÀZÚZ kî°ßwJÀdB¸ô€~5#Ð*þû{¼‡ÐŸÿùŸcϞݘͶð£?ú#8QŽ~ÙøÒ/€wÿvž´@»ƒÒ{õàŽæ—ì <áì{úþ×ûŽu¯Çe¼K,`šŠpBÙ­ÃjL’ôR³“ UXZ&å²ë_®ÏA-¤1©ùzä‘Ùb-VÂgÔ7²^7T[¨ ÜвP®W´?âQ©„¿›ó܃BO¬§åþ³L>¨ÝÊO˜Ç7Š÷ L¤~–…‚:ÂÑÊÒsG„íRƒÜ¬ÌÆ@#ùçà—Ð’1U‚6ÁIùiÞfáÔ õ·@Jb·^Q‚Õy¸Kk$½%SN_Ÿ炲çšÿ6žøø/‚¦S ,òƒ-°y½p——É”pÙ“?z]DÀ¿öž…ûý£ýˆ[[3¼ùÍÿû+#oÙJ^+â³e(Yh«6G… ’eŒÅ×eÌ©HÚ®újÌ ¸ ÍW£±JõnB•95£è=Æ@¬7³¦âvÄÀF³c<\¬´o‘î"å §šÖ•¬’€ËØÍ’žÒw§6 ûÚå|‚‘iJ®[ §¨†j|2BÊ’³¾eß¼¡F:¤õç·ðyIDî9wN"k_O8ï38ëq÷¢i€ç@˜Ô‹U ’à ˜@3.x"áû¾-`Ͼ)~ïCž |ä#Åb±ÀææÞò–}à O”ƒ*‹Ý_Â|ß>4; k€ƒ»XiAmv¹žÔ0âÐbOßâ®{xÔûù¬‹\uqÀyçžzÉßáKŸÚÀýwŸ‰/}þsWZh‘)xKÒùËŒ%º®Ëÿ=Š1’¶GëY”çÁ†ÖžP=φúfÏ5Y aÜÞîK%óp¢ªÝêa2PNiÏ “ãÇl',S]„E|Y$KfˆÉïgÎ$ߺ «ŽZéKÏ}°°ˆÕXE^»*žk'/Âà`…[¬QŸ¶ß‰‹æ`DóbÏH~c—G#ê¸Ùue‰—HÚT ¡ Àp'öÌT% ˜ñŒË>Šs÷ ¨! .€¦°ôÌz]³SvL O=Ÿð†k'x`ƒð—Ÿò6O~òS˜ÏçØ³{¾û{¾ÏzÖ•_ù‰²´ôC@?k°˜ ˜o0V" À«hÍ¿¼>vxh÷îß³àÑ=§qÅS.8—pÆYN=›ð-/¾ÞŠŸÿ™çásŸ9'ï낌‰Àc¯è®ŽÈôH2šx‰Æ[ª[”ˆ9C¨‘œké~Añ•² ›RÉÞ‘w'œÖanjºU}`‡„Ì7!Tî$÷ÆiJÏ  ­Ð3Cüëðj¨èв—i%m‘u '4HLUòéÝùdN-;ô½ \Bƈ+ZW†Öjq&"AÝ®Bu¤îÒnŠj š¦o…™$~Bo›Ž2^Ѥˆq饋˞öyLZšu€¶R»}Ÿ|=‰Ó_†Mo´}‰·Œ»®|*ã¾ñàà >}«w%úüçoÀbÑᡇÂw}÷wã¥/½'Êá—¤µ0ðqèÐf„³X֤ݲ؊¸ÿ>ÂÞ½‹#lõÐÊeOÚç^2àÌ'Î> 8ýñ'Â8í”-œÿäñùÏ…³·¥壱r¤$¨ Ð7Ï@Õ¿Á$G/™óTôÌ@†Šî`Û¶Ü ESä>K@ÝðÐ?E²õ¢œ…‰Œ`Ã5ò¾V¬M]US…î9¢¬?*O«Ú€ÒÀ(ŸÉÔI:‡VO©À“ ¢;Â%LÀÙ©‹*–;›Ö·v¨xÉ}"MÛç+¯%0ʈ  ‡­`9Qì±·"•‰naOªè“…JþKÒug—1‹¶bN(UÏŠÆBæÅ[!»È2 $Få’q(²3¨Á@fçŸÿ%œqÆWðÚW¼+k  ] Ðl%©*gb×O©w»÷XF4µ°6eœvFƒo¹špçÝüzuF ”w½ëÝxàpËÍ·àG~ä‡qú§ãD9´ÒÇ5pœèò ˆ¡@ó- ›1ºîѳ¿îES\ó¼O8—pÒ` ưÑcÞ› ÆúÆ9çÝûî>qh«Í?ɆM’H"ÄQ„/+ÅGÈЮ%ÔF›‡ùk¨ji*–/ D²Ä‘Œðì!Tµ¨§_Õ«ˆjô÷< Fö>{ö£dÝ´_Á2œ'‰LŸ­'MKf†ì×Aè X”É«§‹„ÚPi‰Fà%X‹‹ÃØØHÕžªÛ‰±ežî`¨[äxE& ¬¤Ð`õ¯§êV6¸½   |dÏ ŠƒüD PÕîÑ®‰–‘ ~÷¹ç}çžw/ˆgˆCtcê0Á;<PÀ7¿ðØqRé”É@°éð“9&o>m„X¬þû) „HعƒqÎÙŒë^Ôâ–{ÞÿÙåçG?ú1Üu×ݸïþûðÆ7~?žõ¬+p¢|™¬ŒÃu„0€";¡bÃtsF·;‚"pêjw-|yæ“Vñ²«.:—qò*cµúžÀ3ƾ90g`…€Ë¯¸7|öÌ7O2O“!:žL–<œˆ3ŒhìaF®B>ÛÐ'™º• úCU(ˆB¿(,íããQÕ Ÿò«Ì @>z··%jÝ2KƒÐÁRm[ön²ò{AU"<³¢*ƒ+&Yž-ó›îñ'aï‘Ú¢_lF¥‹dŒ°J`íWT‰ªÈæ'F::^ˆ²»C_21Jü)˨)K¸½† ÅÖ‹Û(ÛIbíDžpa¬H“WŸÐÿ©¬¸á‘a¬‰p®×¾¯§ž~7¾õeŒÓO°ŠŒßç`Äò(ãBš6b²¶…°vÄô,˜¬¤ƒ_´ ´k@Û%]¼0öÿŠô„ô_ /cmWÀ“/¾ó›Z\zÞ‹|éK_Âoþæoâ¿ÿ÷_Ç'>q|E°<ÞJ? ˆ‘1t„¦’ ‡)ÅG€a†>½Ç@À™§žsqƒ§ŸŽ´ùQùŽ«|Ï‹œ&Ю$¸ºER: æÒ÷ŒYÇØ·Éسµ%îʺŸbö;/y‚€"bÂþ™3#ˆå·˜ Ðro!þº3sqD6,¡%KüùK†ÚèMªË±´Iž)ØãùZ³_Ùi*}Q–Ú¥-ùǰš L]£˜6r)÷Óð*JÓí*p Ź긊æQº¢À²ÂÛ_÷È¢ò™NÒ·B÷L”¸US⻘ZƒqR9ý=®!9x¥"‚óá·\f,µ¡;Å«y9 Š «ò ¦á—ÿ-vPMB6µo¤GK:= @Ò[ 1÷{Pf\4›v’ÈŒ€.gŽÉ÷Éj—õ'ÐÏÁHÿ<”øÓ@@´S`ÇãÏxãåÏ%ÜpY o½õVüßÿ÷Æ÷ß×ï÷á%/9aXV8¦õšqX€›”~‰)ÙÊrŒ‘Ñõ Ž@Óžz.aï¬Á¾9áÖ{Ž zÚÙ/ºŒð­Ï8ÿlÆêzƒ°àdœf á´Œ!2bOè·›³æl† ÁIò~ö“áò)3Ž` ˆhcCÌX8!RÈrÑ’ ŒJ^p‘|+d+è 8{¡5ó5'dBo®û0esy"ªíY‰›´mÀĪê7Ýw0U®HÕÙüjCÈ:ƒ0›€Ý8}:\Tç–Úæ7*Äž\”#ñ¨òF9Ë•a¨Á{ÚˆE´ŸŽ°Áïµoâjjˆœ5ò¨=ÖšL`辇ŒÈL°ªc,†µ²hg\seuW>ãÃhV¦‰p÷3`’ Möܲƒ~Ö&-'Àb.’µÍbaôÆ2ßâíw•þ 8`¡ü83Z"4Cš“É a×™ßp%áÃ_`üÍ çŠø¿ù[¸÷¾ûpÇwàû¿ÿõÌ×S ÈÄHè:Fh"Ãø‡AÏ«LZÂd ¬tÀ©;®~ê€Ið矾x×á1KŸÐàª'—^ØàiçÎ8XYIñÛ,½5 t:™MOèc‚¨úLóWZì]c^•„0‰èGâœ$&"ƈÐD€0…åÔÌÂ*ÄàœKŠ”^ÃÿPÂélAJ8åÁ\·x ¬ÌCqÇUƒ2ˆ°ß9ݘúG(„Ñ\lÿ곃x@)Á"8—G+fPl.¦å÷Ö´±¼ŒØ”¹^…\éž±öj† ‰@(4ßpFÊÚûŠ~ñm_±hb$Üuû“°Ò(„têg‚ä;׬a¡óXˆ8!1‹IŠS€IKàA}ü›ê™ ö'è ¸~ƃþ‘ß÷IÊdè ±cLW“vO:—qÝs sÃÁÏûßýÜqǸýöÛñoÿí[Žõk9®J ZBB“òçö}ÐØ€´TšL`e’4¢ÏÊ€óN'|ìï[|êËŒ›ï>0#xòã.:›pù¹„óÏnñ¸“'¯vì$¬¯EL&@Ó¤5bÒ¬¹BCèÀ"¡ë“M ˆØyã¬s¾‚¡K1ŠÒRg4Ѷm1D¬®X]í±¾ÚcÇŽ;Ö;ìÜÑaÇz;:¬¯öéž•m;`2a4MD Fɨ\èÀ²p'Ê‘•íƒÁYÛ€SMLaóRX‰y ¢hE¤ ´ä ȧ@쑆ôD%a”gœõe<ð•ë}›)2%?ýf¡Çríœr–ò‹ØD` ó¤ “mÈÿC°ù&é!óšØ$HnºæB3vœA¸êò×=xÇGÞýúë¯Çõ×_›oþ{üðÿ^ð‚«õë9>JH¸?kÐLz«+„®gIfÔ´@3MÌ 0V‡,B.ZÎ:5âêKvï ¸°g‹1_Ô08¦8W§œ½“ñøSNÞ0& £m««Œµ)cmÚ`u-¢i!_iš–ÐFô©C‰¼ÙÓÀÊÚ6»XMž‘„  C$ôa}$ô}þœÿ=å{!&­£ØâJyqí¦CYÐ'ÊÁ–íóÔÄ˾[×JUÃ\%&ç<&`ð;"gÇøÑïùê©£ADLyÓrnƒ`ÂAˆÇBC¥-ólf2iOÔß]øjIÉxÒÅ_ÂK¿í—1ììÐuÉ~‹@†_ú?aÅú{$FQàRJ‚—eB^&ôC6ÔuAú—)+a] Àd•°Êgžñò«|[Bâ´å­o}î¿ÿü£ú!\÷êWҳŇÙ1&CvŒE´mŽ” …l*j€¶&1e°j¡@Û4عà3®g ½yß!¦ ²qC˜°:¦SÆêZÀÚc²6`ºBh[JZHPO‘È v9øl—–ë™'žú´Ûñ®?¸Œ ‘!€( P@C-ÚÐ"P‹&´˜„ MІ M¨IÿBƒ€¬9È)W-Ú¯Âf\ÝÀ',W”tÅ…,¹ÏM³0Šƒcô9 M!1€,>eO³³r¹ †ÍGPàÈsÅ®j.wLÝ\ÁcÞÐ~ó®¢  Èw便fe"ÝsoÊ!xÅŸbH-ŸmG¸ÒDCહ2`R›D¢É$“T®Úh<åžeÁÈ´(IY¤=½©@Ÿ”™aÏ{þ_b×)SL×fè"4‡ÀuiNg¢Í£]„ë&IãlŽI¨I¦-ª'ç Šmu]¬c*±dX\j³Ö9Ípˆ±€ê3U9-ÀDÅ,[l•péb™P !4{”^¹Uu¢„ž0OÉ[`< Ò\f&dO‘1²/sñ0Ò_¾‹½B8³ª’â’Fì„a@;Iy^10B9øÓeh‡ Ò=sR¢åŸ‰yìÕKgéëÒÑ€"•n!šÐƒÑEÍ"VÖЮ€Ó7à/øØ›¥ãT>òÑb6Ÿcß¾ ü“ò£‡ÝϯõÒ Ú8hÌNö—¡OÌ dE±m᥌Á…Ì•ß#€é$ÖÚÈÌ`„#“6‹:1p‚y&„É„0]a¬Lµi@h‹Mà0»S&€”×é¤%F±suÀµ×~Í”ðùÏ\ ïîÇBè’Á7"åß ˆˆ b4ÐDç”%ŒB$ÊcɰLòÓånrt;/D1Û¿JöQž0ç„$DŒ²âo5¯IHMæ~kÈVÉ\Ï?ÙøBæ³1z ƒ(…Ó†òS–C˜ÙòíêÜ€—y-c±û³ HñŒUŠŒ®ë,¼••¸Ži;äx/Jºâ *ÓP¼{Óš—XÜÈ žhë.ý)²¸VYÊ_\aZfcˆê˜5€ íYÃŽ]w!6'cÀŽÉ󩛀háç9&G¼v6½õÞa°‡…–•£‘f|7 ipCH*"EF»BØqzÀSŸñmÏ:<Ÿþô§ñ«¿ú+˜N§ø¡ú‡G¡Ó_{…t‹-„¶Al0Gô=£i}ŸÖtÓúE2̆´MGM"Ð}ôhˆ»^òÏîÕ¡I?4M¶+„DÄWV€•U`2 h³­ÇnAâ$X”*‰ôY‡ Ú6⢠áµ/ÿ ú­uÜø¥s¡Zv(ÅŸ†¸GFŽ`ÄOºRb€t(¬ÉZ½!¿Ö'X‚RX" Ùß*¨û=µÇÌÜG¾ @doóîCî9é‚KûÞ óÁdg,…ÅÝ ²sR3ý«óP´L…±äƒ`®·Ë&uÿ«Ùt0Ù¾¸îTSñ´jâ £ 3ú¯LU‹×p,Q·tòíK-<É…± º`oFý˜Åj æ€þÕ÷â·OÂŸdš±è躑a– Ÿb¸Ü¿â;ÍFÍÛÿ;8j…²GæzBØŠh‡ˆ“OkpúyßpEÀK®X9ì&>÷¹ëñ¶·½ ò'ï<ŠÿÚ)]ôÌèûMô=£ïƒ'"49n~ D´C“Òw6SÆt…±:i±2i1YIá¡&ÂÊ cu ¬­2&`e•1í„“ éJ"ÜÍ$`uGHO›êm›|4Å®¡%ë© „IK˜¶ Ãß±>`mqÒÎgœµ…'œš¦7{ÞœN,{ù —ß‘µÎÂOz†³K3cÈš›È˜0DžÅ÷ÑrÚÂ5M”ß}xé²ßÊï5þ`¬lÈ‘äkB)t1ê— ËïE(µ×Kû0cVÛ†!´Fh¯†V̓ÕGØÈÖ¼M(ˆºìÏSÈ|.S8¶ -L޳‘Hëÿ~ÀºÛ{˜)KàD¾C:RøÉòfRí¡L€K"#jŸ.7&7TUÄ‹IÚ"Ñ4únw`m²ÓNÁ®†(b1„ä.— R‡k¸}ÄJyWÙ@{€z…ˆëÀÅçßúlà}Ÿ9ü&>øÁâÌ3‡óÏ?W\ñŒc=âGµp¶â6ÑÇý" mt“IZG!$é=r>:‚ËG &¬Pƒ˜âFnÐÇ!áóM‚ƒB›óð†¤M4(i“Lð‰€¶ñÎËJñf´Í€!¦”ØÙ|Ó ?½û>þ±+i‚(2qö–´€$.f rÑB› T¦"èkŽ9™/R³!¿£Jt rkö› wžQXIœ š¡„ÛÈš¹9%²¿Éž!ñÿ]~/ ÌHZ·™Ö>Õc,£±ˆ†ŠQ'6ñ/íUÌo¤Pðòç„;ŠáÂhÌãÆQÍ€‹P*ÛCvͱOmÉb¿„žñ¯æs<^gd2 Vn}…±ÚL' ˜“{Þ<ÇU Ô"Ppö…ã†ø#Á@Djwhófì#Ðì$LOið Ïø}ëäˆÚ¹þúëñ¡ýͱî£^†¾õ{S¤Í˜0ü¾×uP´€¦Mž9m›´É4Îk&M´+Œf1ió±‰þ›N “)aešˆu3!¬¬%Ãqh ++MÔ‰Ò9„i›µˆlmK †0ïS>€ÓN™àÛ^v=®~Þ§³WCB¨älO§Ïú7Ç ŠÙdLœ4g”g¢@Ŧ`¡duÚÈ…Ù·†ÀŠ4^/y!Ð@ÅŽaÔhG¾!‘h󌃤¬gPA`þo¤hiB52OÕÚŒ §Œb£pÀüéYzÀhΘC›H3J uLæ["üFú./—ê\¹¦#BÌ÷rJ‘=‰·„‚׆¹.š*Kßl=lú¬ëk̰ ?"bœ4M?C$ÌfŒÙV–šMèÑ6ÑÍÝñBüë2ä4#´]D«'gœ¼ìê€g_ÔvÝ7Þø%|àÀg?û¹c=ÌG½ÌûX Ùÿ=˜mÈ9‚œH½É¸mStÉ„Ðf"?YeL×shWÓ•$å¯Nó}“ä¹Ó¶@3IžEMCh û•þ“†µÑ€• {Fz aL§§®xÒã[|û5_À%ϼ¢'H™øGù< Ê¿˜ˆra@b}ì0G|“Ë, MÈБËG¶„#Ö´²Æž ’µ2KKÆ4W*QgC =ãòå¤s¡€R _ç÷P±7õ[)7(ƒ¨•…© vRKý$IÖ˲{j&[.ÊăiùD†ö’bÄT ±¥qSÖøj_ WíW/¢ÜBÌæ ­Þkë~µ-M¨Û áOö$‚Îô€Ðn Ìæ=fót9@hCZtñÑKòtØ%ä}Lñà›ž±ºLO.:Ÿð]ßtdZÀM7Ý„ûïðXóÑ-Dèh–lA9Þlš@h‰òz¦“€É”2œ“@Ó$¢Ü´é_hÕfжÀdLWÓo“iºF™àÒUÍ’.&;D&þ…ÁŽB¾‰&!1›“V"Îy|‡W|ËÇñœ«¾ˆÐô²· –d;€ÑÀ1kÈÌ¡àñ1»b*d±•"8éWaÐôU<%ʪMxcªÑWd.¼Ÿ¾ÖÄÍUž5ˆDEχܲÝÇÒ*@õ@·^/ã¶¶M¹‹”vÙG…f’ê#@aÛhJîû4S4< w¯G¸¢qÅ•I^Ž3ŠhŠÂ”„òÞusÛ»SÊv¶µE_ÎyT7ß4Oõ]Ä¢o0Ÿ·†¼y ˜Nr|.ÉÁqÜf¤9œŒGC:º¾«Á)»W]Nøž>Ø»w/~øë‹<´g ÷y+l‡B€Bñº!•ý¦mÀÚjƒIKé`Ø$ùÉ4ýKÒ~’ôCHŸCH„_"’L&“„úƆÁ@€BP¦ÑÈç$Ä 4-cmµG»’´ pÒÉO=®{åÇñüçmÓCH?âÁ1Iþ‘#†üyÀ€DüŽÉ+œa¡t†Àƾ·L ØC„uH‰³®éíìhµ]¢Ô*÷kÞKÅH?út)æXæH#¿}CÈÉt©ÌW—éŠqBP±Ð6Yh r5¹ïu¡m®Õo%å§AÝ©&U$P×9£1İì_(ÃZÑ]ì@ÃEÓWen¢¾0xŒÖà†-v©Ô¾kqë­—`s¶ÀÖ|@hÚ¬BCƒ×±}Âöã¡;@9™@cº¬œJxÜéŒovÀÓÎ;<(èÖ[oÅÆÆÆ±ê£VÞòoþ?¸ñsâRœ›P`•‡sˆd  ”NÇ‚Ñ2ìo¤wÊ^CM“ˆ!>M›ážI@>o…I L) %ÛE[ ¤ÿšŒÒ%èbÉÏ²Ç @íhvžÜàÜs"^{ݧð‚~À`ôõIV€ ¡„ˆŽzf€cš‡ä‹¬­š%z” #‹w”?¬¸,ÝAÒÕ8àìz0+Kô¯w À;ÒEÛ%§íù@»±eËÄî0Čؑ%ÃgT+áª^`›|¶íʨ5½Fv€<®L\½ÃΖ`âr_,†uV ~éF"3‰âÃkT:;)‘aCä{ LA.ÙÅ,ºu\ÿ©—b¶LÛ!«l„„¯ìÇjÒœ·ì±¦ëë§\òDàeÏ9úqêkå·ë­ø«¿z?îº÷ð<9Ùó”Ô¸¡I‚GÓ&¢Ú <Ã0mHØÿ43‚mÿcp7Ý¥~ù¤9’g‰@c?Â_`ËŠQ80! Ã”Mœ´pÖé ^ýÊÏãÕ¯úžù̯ˆçsŠ:ÄGDÐsŸs x@Œ’h¶€AQÁ™ò‰MYH)_Œ/<Q{¸–™I» “V1j›Í^ºÍOU\q-c©„XMˆccÛGÓÓ¡’³_ Ÿ™Ò•ú ôŒl, ŠˆrY‚Öhuz4Úº¾0(K ˆQìq®ÊÝ‹ƒÑ•‘+kdƒe•­XëG^få³ HÔT¿=q¨ì@ë-a½í0!´ÉçšAx ð"AAc9 é; ‹´°Ã*aÇ.B|á%W|ñöïþø¡»ä’KpÖYgëÑ=âessïüÓ?Åݷ߀öÌ!e ÄÂHgBš&kËùˆ&#kaœüõ’[n`2sØ.ä7!ÁHh€€$örº¸Ñv´<”)ó\Ó š•S2›é„pÁÙŒs®»w=p'ÚéøôÇŸ’:æÆ)RÖL’hT⢄@bLÁïˆþ$~Ž‘¥‚ ÉFEB7áåkÉ·Ì®#61¼b/2—ª%TžA…Ž@ï/tÆ»ì¨;«Ëîâl‹æÜB¦ubg´àCu¸LÆRIùþ„°¹=h—þâ鱯à`˜DQi3¦‚‹AQ!Iqf }á„yUZÌK1ÃVl¬!ÒÇ­VcÏØÉqàFÏîL5͇­Q&— ñ÷nQë+ VÚpÒ!¯„@Œ¡Or8a J+´pCr¤Ç,nýqOZßóbàŽû€ëo;x&ð¼ç=ßò-/9Ö£}DË»ÿø÷ð»øn|àý‰3×6qÒJ@K“ÀmNy 8¥@ƒM›á·b+âôyhSŒ~ ¹ènë@F@l“˜pŒ@“¢ð2öoÞîz–¹¤,á"¨Mö.f`e±¾Øuò^ü“ø(>wõ-xÇ?wß}ºÅšœkH0Q¡wÄFˆ)¬Ee"ÛbcΛ ÈÆ… XM#Åß|Vâ­»N Q¯à”eZf [©d¦UÚac×ÖøýÖ\+šB©ÌX,/¡Išš·TÌçåÁàxɵe“v0Å¿Kß¡”àÊ‹^Ò–Ïõ ™$TÊm©AVÒqÊÐÖIQlMbéä½u(F•Ò+nW\²B‹VÁ´@¤UÞHØfdôhÐNNI·q¢'EJ¨•”(DÔí €XÛIXœÆxú…ÀËŸÛ4¸öÚkñÃ?üŽõPñò{øn¼ëOÿ<øwÁ:âУç€.&ƒfÉÃà"Ô"Ç…j‘ ¢FŸPÊÛkKì“'P ß ZÃ@ ¼Ë›Ùž€ýÆ–ZV\$ÞÒæ2ZÛ-L©ANdDxÜ™^tÚxú%ïŧ>û¼ë=ÏÁý÷?óåÔèÀ”²üQJMª|‘¬Ö9p\LÁ&Øxâ(Ô@Ž{æ“Ç%‚°Òjo¨XhûûÍs~z›â‘EéqE/H±Î*†º¾Ø w .IéŠR1¾¿î' ¯”°=wp’[ ±Z*Áq© (Ð*êÅö3À2 Kg€¹ÓúX'ܨxòÈ’nZ÷0ýɶ­'½çÚHPOÜ'߀ š¦çнáÀévM)>ï9É;Œ¤¤qŽdn맬œðüK^vå©ËÞðü«õ/ñœç\u¬Gúˆ•w¿ë=ø®ïúüÙŸý9xð!@KƒJ…¡F/;&iš“´Ïœˆ¨…`–´UÖ5J܉ÆëëpÇe†õÐ U¥”â]4zc³¾Àãž0Ç·\sþåÿû¯pų¾š½€úŒÿ÷ò/òæ1&ûÀ€1&ñ&K†áBŠyYΰÚ0Ê`Ô­“ýž‡îu%)Æ`,Ô^Ô~'ºâCÚ8舵 ß^/_‹MM_lÀ88«W^Œ:@ãßëÒ.±ì¡²À.~ÿH«¥ßòû²$£ž ˜´¤%$n©/ß]|o ¬CªPu‘$†E…‰9ÍÈhæšäBÆ Úp z=OЇ’Ü…9Ky_v€Zb$Ôs:ŒÓ¬ívpîÞ/¿*àÝŸk—_þt\uÕ³ñ²—};^ûÚï8ÖCzDËûÞ÷—øùŸÿ/ø³?Ÿÿ!0&!AhD ´4Î_ˆ”0&ÑŽe)ö4 ‡û¹„ø7AÒ¤k6òmVÿ©b×ÉãÏþ+üý×à¾{΂#.œæŠ9 P&d8ˆA@’8ƒ„ž¸¸>fϦP éŠh ª½âEQŒÆ@þ¢Þ¨ Ãu‹Êf2´Ë9·˜zXEzÇ™=¥'ŽÙµŒý>°ü¹ :еÑg!±ŠùçDÁÖ×Uãëlc–˜i#Äî@1fQ,dì ŽuŽ_þƒ°ÄF°†hN±œ ÔEh€RûFÄhÛà˜CGã¸%þÛaÃÌȉd?w=Ð7ÀÊ:a×9Wl0þë&øË/œ† žö<\pÁ¸èIO³žý쯋¬`ò'ŠŸýÙŸÅ_ÿõ_~;eцä#0ôŒÉ ©ïɆœÕ«m–Kàf©í– X¨¸êÞ\ìNÌ&fŒÙ¢Áé»N½÷Ü}¦Ö_þqH…hÖ#'è‡(E È!ås˜ùÊ6V˜…³ÆB5WiÚ†iÓ7 Sèôi#åLß?^î´¹SÿÍ*L‡å'…¹òsöpZÝŽô®Àá5]6ãkݨn´ ,»û¹ÏüÎyé<——ã »dtNÚ7ztQÝŠž½ŒìÓÎH<*úCážÖ@læÔ®Ùw'÷/õ¼CäY¾’2¿0#ù}s2þ Ù”‹°mߎŸ"Ê\Lá¢x1„j'JÎ$|˳gž}*.ûÖ×ãÚW=¶¥}[~ë·~ÿù?ÿ|ö³ŸYúût @¬@*Ü䔞!a÷‚é·Íc¬زL jk6Æn!T=¯ù°9°¹ÕcÑ ® æ6“Š!r&’M¦V¶ ( fÍ>é pPÈÚT ½Ø±•kF@W¿ÿ‚”÷V,l§UÈíÒŸÿ¿P=Õ4,„õ* †u¢qã)ƒ"Kc±-ý^žx™ÄQÓb:À}<þ¡¼0圅P×t¯dæ"ߤcÒcj)‰hêT“²4ÊòjÊ)²‡¥¶9O$W%6©'K61Ïš’‘‡¹AÒ&8¢ ŒfBà! YiÀÃòð.0RÖM^ ]êñ’»[&,Àɾ±Õ€Ð+§ÿø€'nÜ‚Û>ÿ§À׸ÿþð_ÿë/âmo{n¾ùæ¥÷<îä€Õ–0m"Ð4Iz$3 ;O›¡-ÆßiaGÄ¿”š èõ4–˜½œCpŸÆÐ÷À|ÁØØ6·zìÛŠ˜uùd0y‡ â^ÚaJn³ Ž!eØCvEJb_¸B*q„”RDöÑ‚Ë>€u¹´á¢‚:ƒpB|C&ÙKëÑI¶´Å„-ì\ ©å²!î…±ÁZÑvš£¹Þ:êu(ªæþ˜À28H˜gE¸E2:V!Ñ•îë‡Ì6ă€a$+æGH\×J#Nƒa…t¨< šì‹¨ÓúŠ81…¶ãâ‹oÀŽ•?%h¡e0Eq™CP €ÚÜŽI)k+_ã|hè˜i §RN‰°`F7XpŠE³#`mWÄîøÒŸá¿óK¸î»~øuø‘/ŸüÄ'ñó?ÿ ø­ßþíýÞW"jÊû$J©ž«Ó¦`’4Ÿ$+ØñRœßDÖdb&RÅòSú>ôi|}Ÿ ÂyìÛ Ø³ÁØÚZà‡E—‡ÁC“ìZ„‰P>ŒÌ`˜’m ©×wlŽH×Ô¤x)±·ãcŸÜŸ¯Û<ÀRz%^I5TÁÔ»|¢î´¦bp¶®õú¼d:,ý$Œ5œŠf3‚lÙÃ`Cc¹~ÄnmRowÍ/ÈTj ¿ÂGÅ]ŠÇ/†!q¿2í"m'ÄÑRQ³<Pn^°Êša ýoee ßð‚÷cm%Ù½f1fw«œð#NI^D9:Ĭ„%×% bñ‡øÞŽv€i>¼TÎ7O&ÀtGÀ®S".yüC¸þo7\z5.}úǸ³G¿¼ë]ïÆÏýÜÏã/þâ/xïê„°s ´)¦3šAL µ §D€J¢–CÝ›P)Ĥ䯰Œ BÊjˆCŠÔ-€®cÌ»‹>`c‹ððž-lÍ»÷6èú ÝpL>!¤'z‹ôÌÐPñîi$Vcȧ|›4iLYKO¹†5sºfÑ€1K€¡]`CÐLœ%®.6Z…‚„HW× Ñ³šÆÈ Ò5èûj‰™…¯—.›êâþÀKŒÛU´ìÑúB É`À’1p(ø–’ù<³ ƒisT9GàMö€;0RMuÖ D2Ù –ç‚0 µ˜ÃaĈ‘0Û"t'+ °Ú4 /o²VB îXB,Ä>wý $û" –¶õBŠiÊ~(o³'DJ†¿µ“€¡kpö|‚ûwߊ÷ýÑ/âÒ§ÿÒ1èð#W~ög¿þ뿎n¸á î_ɽ‹ÎÙà¢Y?m ”ÞsHÓzÌ@!êVÀ-߇èÿFN í#§“Í}Ÿ~[Ì“ô?ï#67zÌæŒ=û¾ø… ñàýçØr( ò11nÐ`‰ÿzÈG+ŠYS(»$pLä¿’Æ橽M2íP˜ÈF åjÓYé;£Û­Ÿ…¤ðèý²£]þ×B\4‰|SDœ·–<–‘§åÁP=´¿x Å  \3L…µ k Ÿ˜Adþr“åœL†!™6X¿ª`zê8·$G­ÅįØþÛ„×>`ZQhh玽h&@?ýÀرJIz! )Ë Žù(cÆU!dû+Ç Ãaåä'¥ô‘h³ŽRøáhWµ <áqŒÛ¾ø'xû[¯Àw~ï?>6>ŠåÃþ~é—~ o}ë[é¹Õ)cÒD û16ÂH›t¸BÖ°;¬Þ3{iß2Gð£'ü1¦µº>`¾˜`Ñ÷ØÚì0›366³€›o97|ö¹úÕ¼“Z›½ìr™·!Á?ˆÅàÜB}ã ‘)Å $v.PRuÈþͰ³$dƒj¡è:ý±Ú¬‹géC‰Øih¼ÀB" Z†‹€”ÉÍ4¦r­ÎI)ª¡©ÜßÂ|çFÂ|Y_G~ é@Ò os­P¼Šò)‚SÇí0#4ÜÝ@!&ŸXFÄ\ Y,fÓÙ5C55Æë2³¦â†¼êU¿‹Sv.ÐcJÙ i&Msñðèðê|”þx.…ñ0g*CTÌJ«ÀÚ °X%¬ŸB8ïq{ð‰¿øUœ}ÞSñ ßôµúá'ò§ñ¿ñ[¸é¦ùYæ”ü%%?IÙᘂ1LƘ¦6üCez¤Ëv„ß~¶×†¡ä±N„Ÿ9aÿ}O˜-ZÌ[³f3`¶ÅØØ$<¸§ÅW¾r6†nIà‹†H¦üÀ!KrÂÀùÔ*RÐ8 ”ŒÃ̈â"AâÌFN§t%Ūt¯X¸E™‡‡£c •¯í碒{Ùôu~TŒ‘w„ZX£29»É¡:çØp(äþ £%‹,u<ùõŠå_ÞM•«T(¤1øÖ„ W7Õ`cG0Ò~‰ÝíÁ)oqpš"é_›SÌbГ6ÇjmÄÊ:¡YÉ<¸“æåŒTyœÿ"¨Èéà|à§!`Âéäê0h‹)GL 8kWÀÝ÷|ïùÿˆÓN<.¹ìòc=’C*ÿí¿ý2ÞþößÇûßÿW‡]Çú4­HÁÔÊÄ.•-§ §h²%¨ï` ‘ø93²÷ĨO?ý››[sÌfÀ|‹0ŸîÛ=ÅõŸ¿wßö”ETlx ³fx†c‚™2“HŒ‚)å ’°g’k¢ UVžùlRðWB‹ÐQ;ïQqQl|› ÍVØެ{¿|#ÉÛZZZrŸe8B÷`\þ9—“›ý<¼í½º¯Ì™ èiÌÅ}“*ŽŒÌŠ˜ž9…•Ú ³us åÔ6ÇøÌGÆäÌn£¼GõC³ÀDšÐƒˆqÅ‹³Nß PŠ»2]hšà4 P¯ŠI! ‡@ó¸)b€ÎÄ `HÙÃVV€.CL(~:û´¾ñ#øµ_ú/ø™Ÿû•cÝýƒ*¿ñ¿‰ßûÝßÅ{ÞûgG\פš,ô 9ÂÙÀ)æ}˜m3¦èŸ†Øw…¸W„ßB>“Äoïú¬ 0ÐÍ ³>`kÞcs_‡ùŒ°¹°wxho¿x9î½ã2Ô0j"ÔåÀeÐãljø3!“}„ òrVbÞL”µ'e†fµùå¯z°KQ‰2~GsT7¸bE\l9FbO°}È MÙ2ú ½Sˆ¨bR\k·vÚCZ`û»w»ßêëµ4CÅ0 Ï«›«Ór39£¤å”(ZŒle²É×jP¥¢Ax Cí ú¾=ÆFD Џô’Ï⤓g˜4ƒèê@k+i˜#…èÍ›)Gžû-¹¿%ž<‚Î eÏ––‹žÑÐ!iWM ¬®0VÖR÷ÿõâñc?ö¿áÊ+¯8Ö£ZZÞùÎwá­o}+>ô¡¿Á]w}õˆë;ó䀦 IÂŒ)ÐÀh(ù°ÃÀhò k ×üÛNÒߟq7ƱÄNpçÖ¢ÁlÖas6`k1Ÿ[³ vï%|éæ‹q÷gckßãQ‚âàQ|÷`,8N¡ÞEsÏ”Óþir-@ÞWå«÷TÝD”¨ÖŽ=×µ,_oùÌBÙ_wƒ4¿KÒ{™µjG§ŒÀ9rK-× ²±íË®²çöWÆ8¹ñ?Ð}"Æ£°Œá* HÝT×a|ýiIƒ^âWì, Æ‚,!)tÆŠF µÛ.统õìâ‹nǤÖ¦É#¦YÍѧ,4Þ ÒgJ®r€¯ @ŠÿK|—"¼Eãµ8‹ˆ@}Ê;m-"NÛ\pÊ&þúÏ߉Ûoÿ ÞøÆ7àû¾ïõÇzdR~ÿ÷ÿðˆ¿ù›ãÎ;ï8jõNVV1 GPÚ$ œÂAÀqˆ}lÑRüˆúkÂx `ˆcã.›ëÅçïCdôCƒÙ|ÀÖ|ùŒ±¹ÅØÜj±gcÀ}6¸ûî³ðÕ[®ÇíÒ‡Ú¨¼#Ý@¿pŠŸ”¶p#%[*Áˆ¦‚`B!(b @o™Œ‘Ðm5@˜ƒ“üÙô5›Ÿ`ûú­!ص’$¾Ð˜ç–Q²qG—N­UT\ËCA,ypÛÊ÷»ÊP_¹\1‹áÕõ‘°wãE$.;ªJŽÁ¯|»½M~!sç’3ÆÅ3¨Ü!ðñœ/|áFÜ|óÍøØG?Š}èCøü 7à8êí¬„9 Ê(e_vµ‰4špn„N‹?6¡‘w‰GÏ2ãn·Î€¾‹è#0[æóóÅ€®æ[À|FØ; ¸ûÞ¸çþuÜyó 0ôk`n–È„ Q%Åó%kÔðû!!´z!HÞݱäícgê3‘ŒJˆLºÐ”B¯ÙÐÛ¤H”ôLðÅa=(QÑ—*Ò„=Pâ™ »>Wý'Q&–Ëèû¡Ûí~oàWpH°/¿ßTNòŽ©°Ú £`c7€?ù[^ Aìt¶JmÏ+1ÿÙvQ9•bÖ,•¬šœ|ò½xÂ9·`,ºÜNò©Î€~´] ófŠyã!«ûŒã#DôþNŸÊÁD‚ä (a£€ICœK Òæ Àt%àô?x`ß_üÊ=xûÛߎ}èCxÛÛÞ†¾ð…¸ä’KpÕUÏÆgœ~ÔÇõñ_ýêWñ÷n¾ù|ö3ŸÆ—nºØÜbìÙdÜwÿÙ¸õÆçb¶qjjX&ZAàÕBüE ʆYÎÐiH@Ëï)1LÈ¢b^|™qXZáÌeÝjxxOÀ QÍÄ¿†ySQ{`å9ŠBx˜›©ÖlïZò’ƤUÑR瘅2•™<ôu¹ß_­¶ì·%ÈvƒÉûÌDüm%KUe~kd2Ûû‰U-ÀéªMþ)Ál‹\ ·1&g”ŒbW8ç _ÆÓžr#VZ•/]ÖXBì"Ú)‹ÄÊᯮK-´ƒpì4Š¢#ÂŒcçû_ ªLÄ8*,äïh#¥C™Ìù˜RDR®ÚÕ °k xÜI ¾˜e©»ï¾ïxÇ;ðŽw¼_|1.ºèɸà‚óqöÙgá‰O¼§vN?ý4œuÖY¸à‚óGý»þúÏcÌfóœdž±¹¹…»îº wÞy'î¹çnÜ}÷ݸÿ¾pÏÝ_Å­·Ýþ¨ÎßÚ4Kü aÚ0&y]ÅÓÐçø?f¾ÃGͰÔ?ÄÌ"Ð/n4IÑÐ¥5š¤~ÂÖ<`6‹Øšõ˜Í"f[ æa1ï±{xx/áË7?›[ëØÚ8ÃìTiŸÌÿõJ‘ø•à«À•;Q‰ùIú9¹QÉ5=_ÓfO¿Â(ò>¹Š—h„`‚j]==e1òºÐOÐ-Á+ãiW˜úû³6ËQ ÚälŸráÚ+š¾°ÉþüÑO°­ï¿î-úÈÁh UœmË~íþÝ!ŒòÑ/{ŒèV5ºgFLÛô¢Ct}†&X,€¾èã€>Çö‰s­+ä Y¡Ð%ÏQ@‰nx|Â)À‡›(˜¿Ü`LéنѓÊ[“)¡‘’×ê$0Ú¬6ŒÓwÎ9}‚¯>й¶oºé&ÜtÓMòý¼óÎÃúú:vîÜ;vàä“waeeMÓ`6›assûöa6Ÿ`t]¾ïÑ÷öíÛ‡»ï¾ëÑ\ £rú΀õJ¡A¥ M"t!¦î œ©=´$^ÏGZ–Á;Ì@ß%¯˜áE߀‡’ëea‹¾ÅÖV‡ÍyÄl6`sa¶˜bc«ÇÞ͈‡÷zàÌ·Î@NÁ®„];7l8X¢ŸR>ÊßÀ ÀhFmÑN“vÀt±2°º2`m­ÇêjõÕëk=ÖÖ:¬­¦ë+ù¾É$¢m#š&¢ I %K-^÷õ\F6€mq¤\þÇ;Løë{¿ÿº·”–0†jÕèpì #ußšCOë° )@“”˜"4=º£+á²TŸ‹‘Üsz9 ÄEÒ$ƒT9€õH®g"ÈÉ®ºQ»4îb8r:ðԧɈYŠi‰1™š °c…qÚ:ã«€Üï¸ãècEY™«“€60V'é=§AÙ+ˆCž£aà”}€Ky¸Å'õçëý‚²ß~ƒ~Hù}›ýð€­9£ëɨ»lmM°{“ñðžî}èìÛÛ ÎžðDQ’Í‘¦%„Äsò–“6ÿ¶‰X™FL§Cb«éïÊ4beeÈ×#¦“ˆ¶I÷‡þ•v’©ÄÿD—‘èvëm;Â/ÄZO}¯0‚W¿å ì Ld­”xÍ¿%Q²n•¿E•´!ÓGÄÕŒC•xBrúœkQ¾L 9é!»e!'§~ÚåŸÄË^ñ;Ø»DÄHhfÉ—»ÛPË)Rbè%XÖ¤ R8€¶Â;0µhÀ!똡Âb@“‰qh•)”8쌜…‰ÍŽs8È:Šo¸$æ&Iâ ĆÌbfÚ†pêúcc!â” .‡|æIâÎó1„šæÈ^ßv¾ýEªï;`³~Šaˆ"0 ‘ÐõŒn1G×1fs`6g,æÀæáÞÝs|åî“q÷½'c÷]φu蘲ìU‰Ñc~‘=²á7A?æ@@hÐPQƒ€4ܤ÷BÀMÌhò«'X˜‚Úî`È‘ >gçO­l<| ´*ßÌ”'[œz؃A×Ù 8_³D”]Œ ¥äøûæ@òsþý ÂA/#þÞ©Ì×òÛˆüÑOøç¶õ2›´%ÖŽõ «lÎÐdžWO5üJЏœ™«k\]Ù#†csªlÒ ÒÑþÍ9!FÂÆ"K9FƒœÊŽj)‡ˆæóÐ “6…Êm€¹G"ºl NÌ! ¡MqwЃ"#f#rÈa¤cv£Üy×é¸ïŽç‚çg/å".*‰@‹'ÄúÒÏÄ… dâO„€6ûS4™!d`ìb7(¹’Yà jàìÿ_ìŒúCb.DMÂc'gTö÷©, IâRîeõ|*á`‘Š&o÷ý€¡ j"îø.Úµüw&ÀÛ×QCQBÜ%D*¡zP8?YÁR3÷t©Œ7ռ娴+èÎtÁþ¶•#ŒõÚBµ…ð^3Ä#ùO*ðO’öIà½'ÕZ8#IÒ'óKz›þZøGVÜÔA?fß›K°'‹k¹¾\uYÇê÷å\(áh’’·"¹š”ÛÔw0A ´ÌÎ8„!æ–h[âïb°Õ5ZɹÒJ}¢ ãËÇj¶›p ìÛf!Ï”£¯ÀÔ6†ñM–,гØÊ³“ñ™¾ mFœ~ÎDZ2I‰ßú!u )ñwÈñ`& 'M€LZ¤ZŠ I:Ž2 MS|øEÊ%PºÑw1áý€••BHuƒ"B³‚IÓ€B‡@ ¦4 XÛó¸ ÙZºèâNB˜ï?ˆFö[–Ù ¶½Ï€ÿöá¬&‡@1ܾ‰äjމ[ôˆÎÖþ1šU‚Ú¼ý ,FHÀ8#,Î߆t±Cÿð…Ø =@ÍéÄúÎû0iÓᨀõUÆ´¥tŒM(ø?'âN‰Ù CêÛtJh»ä[ßFÛM›Â ´X™2(CG“&`:!ЄA<ÃdJMƒ• c:‚ˆÐĈ6$œ¡™êa´¡Ëy  ç³ „ˆ!6`î0ŸG Yêœ/³˜/’§ÓÖ,…ÇèúbH1d6@Ç”N ?† #-Á®f°1ÖWL¶#Ÿî‡d(gÐ& ½‰ p9 „ µ@  Ñ =†!-ÔyO`nÐuæ]D?Dô‹ôg[Œ¾',CllElÍ#6æ„­9a¾ˆxppÛàÁ¯<<¬UÛÜf¿.e,õégBžþA0}e s¹~­v` ¢úŠÐ%É_²øF*ýÛðÎEK`®ñV mœJÈEì„Þã´„:U£ýÉpd±#ù GñFRB¯z›D#·éÓþîm •[úàHJ÷¢òÁu¬ªo©A˜\OÑ–¼¼.ØI&S4•¥bˆ¸µ $n  ¼DúOȨjƲ ž4¾52 &û®SDdF·yæÍŽà_ÄêéÇúX_™cuš­L€' "4cÚ†!ÔqR³óB†™&-™°’µŽ&0BËXY!ô=£iÌÀ˜L;„ùFÓNÑÆ€iX š”¡j@ 4mryíû‘9Ÿ¸X,´°¹ÉØÚóïÌÀfÖ6çŒ9°Õ%©!n‡Ûš…,†ˆÅ@XôÙhñ2içÀ1«+é9Ê b’×I‡f¤Ή*Šgé‘U¹7Ìhº³ûÄâü,l<ülìÓ³Þ‰µµM¬¯ÌÐNfX™D´mÂ÷‡œykuLZÆÖ|H¹w³tcĤM1w˜v0ŸÌæé„dÀŽ5`:!Lš$Iu‹AÚ ´“E:{ÐR‚ŒB‡¦&<¸ˆÃœÕnžq½$¨¤nÅvl¼þß'=¯ŒQ~)Hïê p&I½ðCô,¼´?º©¯`L—Í5ÚOmÕ³¬äªòýÝ·ìžeLâ¾ê·ÚðkhuªV"¸•ëY…Íü"Rƒàw%n­÷2ÃsÕXyN¸ŽO*¡ÝÐs%qtºLIõÅ<œ ÇüÎïÆ î[½ ““>‡•f‘œÂ&Vv܇“VµI:Ö6 ÷/ý ”ŒÉ%ê^Ûf˜h‘¤««Àl‘Žß¯®$Í`Ò¦hZFÓF4sHŒ–µõyÖ*fˆœ°é8d»ïÍ¢K¾ëŒÍy2ònÌû6“xß ˜‰øo,f‹d¨Ü7¸í¾¯Ñ”hY¶É+¤ƒr1¯âD°·æŒiìÑNVކ‘Ü´†´ÐO l N6ftÄÀÛÍ]0_0}ÙI›f‹ôžön÷îî¾÷4<¼û\4ûž€ér)×ñ’“EÊ/DY¤|Xž$ñïždämÒ¯âÚÉH!$rÝ”%û$»—Óö$˜ÚvÖ©ÃHÜ¥»Á_¬{°<¯"¢¯ôºqE·Ã_šä°X,ÄšA/í;"?­ ÉÛD[°¼€—²a_¶!üÛþn®-ϰŸ´§Ø?á>¢Î¾ºý– †3GÃq ¶va®p51å7Hé}y¿Ú.i¢nè[±YÆHê/'”Ký 6CÉO  ˆÙ«€Ð€1c@;{âÖ± sDß<ìøöM íI_Äte ëm1眼-ac–_l“ ¤f+%Ï °Ò$# @˜L(yäLÔLšjbÒ$;D3I fÑ LÛIÃbDC’(0_cs ˜-ìÝÇØš{62ƒX[CÂþ·Œyì›nlÏí Ï<ùZœ:9Û-ç!X´ý­`¿ã•å~jår™ÇÞÿÀ¯Ë÷öEœqR“Ï>1Ú†ÑÇdë¡Hd`Jéôj$ÆÐsÆd‚ä1ÖqÖ2“¦VNõrÿÑe†:[0æ‹‹.iWóŽ0_ºEÄæVľ9pï^ÂWï9³{_ˆv8Õnż´©"dæ¶8@˜hœEЧbì-D?yï„Ðä·ÙdÏžŒý—ÐòJ^d1*£zÍ~’»=FÎÙ=»t^m´&¤²Hç“Í>Ná¹Ës^k¨!£ÔÛúpU†Ýý­ÑÕmWçÁÚêïÕ3ËSBšVGáL_¶Sv›-Ãÿ©Þ“ÛÌÍèR&¸²,J™å¦œ«±2¹EPšÔü¹AÑ$"7%!"Ý‘Ã?þä`^øLA\Ê’ñ¶x:(tADhãÀÞaÁŒ}{εh‰1¬Ü†fíf¬M’0&ûÀt’C`‚ˆÉ„0k {7“-`u%`1e´-¡ Vr¸âЄì~ L&!&-¡!`ÚFät«ès(Š!sBo`†Ù"1‚Ícs‘ˆÿ,C>åû¾°{+âöû–»´xòŽçà´é9Õu£‘iú?ÊΊ”ïªB|—Ó›î}Êb9ºÔZØo?óÇä{¤9¾Ò¼mèAĆ€ÅÀXtŒ>2&¡Y¨cŠ˜Ï‹ ¸i1oñæ¢Ú§Jà½)¹ØÆäb»9KFå!&#üæØ\û6ícÜýÀغ÷…™øû½hìdN@³Æ^Åû%lCÈnžä»DM²°‰í#5… «–z5çâÞmɉÍ$Ý–÷1!ÙØˆ4S˜tš b]5ɸ:¹•k"l¾àA’F÷½ÑŠ Wž·¡ÈV[­;›E̽”%Kô@ô—ð|.ËSBnÕ¨cÛ4rÐ*ÌÁBLîÙ±ºbq:5 §¤ÑT€¿Š ¨ À3PHý ë9$/”˜JÄß½ôX˜U"DÅÍ4Ý‘pÏPúJ„“Š‘Aâ¬x31V»‹À]‚“hóBt{ž‰Œ>ìÁ|ýX_a¬N¶™cu…°>IžF£iõ¬clµŒ¶åd3h8Ùš€i“ûi>‘L”N-·öä0‡L|’d¹èÖ?›[‹txÑ'ƒïV1€Î»í›ölŽ_òEëÏÁ4¬áŒéùX ëîÝ’!Ü„2÷JÔÉž@ #3f0Ò! 0Í«êƒG¨ˆRšJ¤íñx!†ð~0lvŒõ9°7$Dr÷òZ.óÜ-}›°ñП–¨áœsryŽIúOÆßd‡`c1[$¬÷&ðÐfÀýœ†þoBˆ»tÏ QÊû€,±¢ŠøÛƒ\ õjʧÌÕ¸Ék?À~W¯KÕW´¥ãN¯§•þjH#Œ•·\žÉ¿ td `3# o¦Žâ$"Œ‡ö/tÀ“$eä~¨!)Õ&¶_S£b§`;(½~~ ]m]…æGç³ÿG?1Žú¹Š‘?»ùçíN×ëðP2 (ŽFúÈjº Ñ–—)‡ÇˆsD<´ö~¬¬íNFâ°…i;ÇÚ”±>MØÿêX™Ló0–Ï9)IDATyiËXYaÌ! ‡ØmÒ¡³IˆYÊ Éxñé¾gl-Ò‰ßò}cž$þÍ|èk1$ ´²FÐ̶VñÕ‡ö¸÷ø’ÓwhÃÔ-,2ó¨Yý#*¯";*™ãHs*!lJ²Ð‘Ó –ACËvÑ|´Òf“ìÐ`…ÏÄfh±Õ÷Øœ‡ä tòZrýÜš'ÈŽ#c:IÒ~ŒŒaˆå©IÑT9ÇTŠÐ“Ã}Ĭ˾þa‘a¶‡7÷íf<øðyÀîç!ÄË÷­ì‰Ò3¡Ëi8·™én{fŒûö÷?p:š½W¡åÛìEµ¥”õÊn¾žÔ˜<摈ùwÁýA瓽\ÂCÊhåPe…å+Á×塼"MWQÁæüS4­WBté)ñö6k°Fèä\ÉzèÝNK…IðíaÜÜËAÞ·­!™úÎÿ¿ý2 m¥öƒå>ªç Ÿ[úŒ}/ÊYºì$G¸ÛtŠ5À øå‡BÄíä![}¹^iå(  h&L%-#)žúäS4dÆüÎéPD %þ9p³­ ˆÜaoû ´mžÞ‰éÚ½8y رJØ1á| I JîŠé$CÙœ¹'9ÌðV6HÎr²nHqo¶ºnÞ%CðC[-ââLœÒ=Sœæ$úe§Låd©œÑÀÿ¿½oé¹-I®Z‘çÔ½u»ºÝî‡c‰@À K0f‚À¿á×€˜1F 0bäØÂÝ`ܯꪺ“Á ã±"wîÇùn•ÕH½í®{¾½s玌Ì\ñÈÈÈpCÀôÌQä–›$¼É)¨ÏÇ/_ÍÑS<¿RïäHYŸÀê¢@'ú}]I¼k?ÆÏÞü{I ^¤ñ{݇a½06lÐâ­»ZØäî÷ÓÆâ®d¸§ñ]ƶeÌCVK @¿YÌwîþ匇1ˆÜŠðƒ/Pµа=ö;´·x£¿}ü5¼ýù ò?¿ÿO¼ó_ñú“÷xóªãÕ'RÂLo x{¯ú¯GžxŽÿ:Ò@ø.ß/ßËðI¿ý.~ðáá~ËÞטÀœÙ㬚¶è:‡ôaPŒ¹øa!–b饎§l=5á=à¼UjÔÚÌ]žÛ`c¹Öû€Ã?Ãïã¯?þ9~òþ_ã—ýgøâÝ{¼ùDl—´à3Ëô©…áÞx}á ãð˜Áó÷ú8:vé»vûùÛq(ÑÛww|ñåïâ³/þwý­‰ähÞ¼ ˆ£¥ÙˆóÏØþ!ž÷qB—ûûÛØáy}"Ë×gra—óë7÷¡¼ÙÏÑG5Y›–:ଥRáÂóÒôóªÊOØÌs8ôù½‘O|¾²V É ¤G×NÙù½[Xþ ÿâ³uI~ 9}àRÙ3b§ï>ï~#Ü/än&—é<Rnu`#­ºtjý 4x%\™Ÿ±iÅ…ÿ7ÂHáC| up@ÃX’ê¦ÅȘ ªè¦µûÆ3!wçJ‰¯*Ðñ|ŸÝÿ#ðúÇøäþ¸ÿ¯ì ÷o}:„Žï<ö³e}'êÃÜ?c=ÀÎx÷xü?|üa€ÿ¬@³«­yd÷…ò±Ê/énðdc-@«EÈ(»‡ÜêÊoº —c0ûwzæªâÜzV¶ÿ”‰à9 xÏñ•þ9þ¬ýÜ?ù¯ï‚Oïì_¿VØ«ÛÈûú®xÝÆÆw¡õ¿3a  ¼í‚¯Þ ¾xßð«/>¼û>¾ýÕ?ÄM¿‹›¾Þ°N!wí þíG1¶øWBH‰ú³Ú†ÛGb2ønÝq¶˜ÕŠ   CT"JkÖ°7üôS]f!mÀ¶ZLö¾Ñ©^ª{üœ@ǵ}Þ@EJ“ùÆ.rP”1ºp7­ÀžU /sç<ãó/ª,Žš«ß¾šóé﹇]-2ò ±dpmÒª Þò4ûOøÍž6s¸Û›CHOm?ÈÐÐä3¼¬è»7FÔÒ ¤Uàï«vTñó€¢ãþ_üôþŸp¿)ú«?ëOÞŽ=7[ÜVsM<_™ðÎNºø<ºà³ÇßÁ›þ#x^øFìûLÓ7Ö¤Ÿß„ªÜF®˜Vωu rÐ<±iÿ"¹!Ì× 8^;>~oOàN,¾¾ÌES|VÞPF§YÙUñ³þ'øiû/hMñþ÷ûÈûÊ7äYرo¸…>tàÝ£pÏ>NŸ{ûþ}û7ñêÃð™þ­â^ z(ù™ÿ›ä´"lKjfihzƒ4‹õ‘{€}‹ù·PÏfù{` ~‚ ¯‹I2ÈþIÁšçlØ=ãóFCç¶°Ÿ„Æìsg›!ÊS½œ'.»Žn*ÌšëQ`ô±ö:fò¦,‚=Å÷£®°_]׳Z%ÿòŸÚy¿ÿö\”ÐÑ3‚ýÜ WÊŸÌÕ×\<ù§F™$u! ìC$³ÞsÿŒW¬Û)UôpûX)î7=;…#ÿ9Lƒw2FÄŽ‘[]»»/|{zGäCñoz°`D¹[ªi. {›}&DôHÇ ?›ÿ úPüìýãý%Þ ð¹ü_¶?–€<ºâÕ‡?À½ÿ>éŸâ»ú÷“¿z™8ÏmNH £zÜo\„5xÐáÐ8M3?F0²Í¸YD蘘­Ü:â ‘ | !´3¾tçÞ\>æòöèfç·€FøAû»øümôGÇÿzüèãK|ùîOñ‹ößqo1èlÁF®*äýñúñø À­ŠïêßC rT0“?d¸aHà†ÿŸóô³æï|'÷åò¨8?š14MŒ6w;Ü?>HS•IH9x:¹Iw*Ai$ÌÖ1+´â<©LKùŠS: :g`›Ä'ëãqA ÀJ‚ls= þ'.ûM¹“ú÷SAXÀZý…Y;÷åbgŒÝ„`Õ ìê.D×0,﹆ºOu•Í`$$:‚¯°b{dÈõêHGIçØ…«a¤æìxn¹»YÒwš{""]Özq!¢ðÓFToضèl¿¿} Uì+ùKü Ž&ÝŽõ[ú{øD¾ÂÅ׿X—´p#]R@ÅóÉÇS±4å˜À´ †0û^CkfX‚0ï§fS¼ÏJèa“bLÏ6㶨·ÙƱ6ÓÂÊ‹øscêÖnøíCµã‹þø¼ÿ½+ºvûßÔ*ª¯ôûx-?@ׇõs‡¶6«:3]~þ¿pýxþV€?@_îÑ#þ^Ã-”ÈÛŠíÚ¸A@ícµZŽóñGÝÖál Û̵1vÑøœž,ãûÜ}ˆÇî2cj< GT(i‘Ô>gÂ7@󘙕»òO•;ój#ækO0¬>+¯‹²ów/4dãU!«»T]n vEH ÕÉŸ:‡„¦â£'ýȬ©§PˆPv÷ƒu­ö™“‚Àg‹ë¤®,‹/ŠúzªÊpS5f G$I8‘04}„u‘;-{¹.–o¶°,öÍ èÒñ©þŸâЮFed{<÷º [þ$M÷mwXoIgEñ?»û2¿qH¢§z—ê ÈÅHž“àϸÛÊ3^F¿¹°Ï> «&ΖގÍI£P[¬†ÒYG-¶Jö³=órvž±Öß!­<¬.º/LÛÍM]:n6Vº[˜ò°}.9gƾîãü¶°Qv`h„T²Û‡6Ñ… …/êæÿÜn~¢Wð×Ó›‘'k㣱)4|èÏŒÛ$ 3*žG½±ÚeïøÍ}¼9´l‹Cœ*äó‚ñ˜ažTйɗ0VŸ|v¿§g|¦ûýQ'uïžé½à5¡Å/~fe\5“d[Oš~4Á‹–48Ãg GÈç$©ÂC¤eúÁÝnÚ†5Ú¡iGôÌI*áp>9#dn¨ïÚÛòSkM‚Ã\, âÓÂIyË{îœõ d´&ýa? aàü¢MkÜtìUæboìdöß1AùTyw 5ÒÅãwrÈ(i¾»´ †QžrÈ+à'ÙÇîVM uÐâÚûÍ£-ôdÎ ýFö“Ї~š•†!(…Y±¤„Yg$˜ÅH§:öG¨ÞТ_ÆÕÓœiClö\Й[æ@ƒ_½`§®^±Xl·¢>ž`W|g ¤4Iáf¨Ä`‹Ý…¡ NÍ0 ‚ó“P,tÙ‡€ô¦2• Š0Ò´ò©ƒe¹TÂL~73âf=B([ÒÆ1_¿å­¿4tÛ`6À¿ÙäqKaß ްtv«+ãÎ3%všÒBo AÑÌ]1Ú ÌÂÌ•à¨Ì“JŘZ=¼‡#Æ9k ù/9 sPuwçiôgô­.A%»G;üèCÎMÓÛMï(Lmñ–¶ú`öõGì?h§=âЖXNÚ̽¡Hd#|,yiºz¨‚ºž«Ó@e a6Ö‡{þBÀÐZ\à}ÓÝd*=u/íYÈë´b–ضw­psÈ/à_¹Npt+ö´ó+Ä^Ñà_HðÒ<ši¢?/3Œ#„Ü

†ÆÍ»ÎýL?׆ӂÐp ˨AõÂÂÏ;ðSí†6ÚÍÕ4¨-twWcƒpK¼;€Û´Ð­ùn^sÊiµ®Æô°4=Û@ÚOˆ½²&âZC_$•И££¦a+ä›·;šô‚`=ÞR tŽ%HÍ@PbË•ž{úá­d¶ˆm¡£Ònè}„·võ.œèn-¸6Út–.½dÆM¥ÅÆR [ªgãmYÐ\äÕÈçc£†èïa9¥)ªF»Ø1©÷ 9ü¢psò¬; ò3µ|ŽðIY±taMó°v@ð1>6\Ïàõòò³˜÷’wpPþ¨>’TÛ\@«—¶8yª…_"ò™ëÀ½´KdzƒgÙC@Ιio€ûÙhÿdëVmĦ>ææ¦ÄÆ¯¬*ªÇ¤Ìú‡bª5‚!)oÓÚ„iã"5Œ6!âÝ šœï°_ˆÚ= ÍSlßÄ…]Ûs+ M¼ E±èm|#ôS‹2‘vƒâ‹èMHDMÖ« ^)2÷ÒYQ33R%{I¢=•AÚ1ÞƒÙß]©ÿƒ3¡y¼Û;mZL,µ³"<²§™·eãa©µöð-#ä7rMÙåFQÉÚÜý•‹éœH¶¹«E¤Ý ÄM»”ƒ%¤™2qøÕÝ’€&rÏb ‰½öT:—¿w°ëP¹ ^Á¾ËÞ ài"fÀû¦.šK³éÌÚ¡Ÿ'¢ð¨ó‰>|€Ï» iJ»…4~–þv¸…Š.âî-$ -Jç"ª3"¢á‚Q©Èå¹4-6ÉNÝ]b;3Ç=›ÚeÑÄ"fÔ,q^ ­ó¦­4ÁÕ}½l.ó7œ&Ïê “6 5÷svÕˆzš³¿@†¶é4¼Q掤|€¯!pjˆ­b0ʶ©ßĸ«öŸd…Ñ2 ¹¸e…8((@_n@ï¶øÚ ÒÑM¨ß¬ãGû¦¾‰ßÞòt‡ÝŽõ›t÷8Ýþ4-¹–ãÈ­Uw‚8W—§ZdJ ¥ƒ÷Å4 ù@ %lñ.çjèüM{O|žÖÍZÞ.¨;{c½.ŠÐøØX(4iù÷6ÝÃ…rGŠïÎužz°W]<‹û,'ž¹®¤žøÍµ¾VÇÍéRû²}B»EcÏÆÿ†/½Ç0m$„{ØýÇ8Ûøñh£ŒÿÝÚ%r)Á-ÄRV4ÅíÖѸÝ:n7Å­uÜn@»õ‘禸5 µñ÷Ü!UŠ]K¿ÎWÉti}ÒM˜õ>xï¼}<ÁçGoøðaðúÑÞ›•i¦ãèQ»â/çB·6øZø}óÃhœÿ㞈ý ãw³È4¯Û]i¿æüþÍU¯û.xÏ×Â3yNöïOÕ”ú~s}ãWž™º°ã>Püñ®Eº¡Š^n4jÍAÆÂ › €û¬û}¤%øÐÚ› ZuCÉŠˆ¢5ÀÞ4@©µüÖ€Ö@1I|Ý´û×ùâ¾ñEâf|s+ì¦éSïƒOý&hÅíÖðè}×ÞÑ» O¯ÀV›»öÒœç /í–ü½Ù¿Áïaûÿ¿sÕkßج`MÿbÌW¯n†Æ“àÿTFÑg¯…몸]ì†Ì~_öc›£,³[Áýç~/\ «î剘XEqó¤k?CL+£e~…Ú•tG‚¸0‰i×r¸1òÉ ´`œ_‘?bÞá0ˇ éäÞXYÌM|#WP,”šÏºQ+Üã,F+›ÿ¹F’¼ô]ÔW-îgÖó®é2[ŸwÙøG® vqĹ^ZÓ·n‰âr‚?;Ø3F3QÅ‚¥ÆºB„ »kŸ­b±Â]$Q[n‚+Z ·qräWƒT§ñ@ó»žjcùw­o“ohZÌè·\3(›¿)TÓ,®í;êô«’³ëëV’õÝ÷,}æÏø«¸È×Å~÷Ù:Žh?XH¿?ƒúï¹pwÿ¶ÂüÌ:©J×ãé8BbÁ4éÔ¹1Í)’:?¸I< Õ…“‚‡Ýþœ&×%\qÑn^o‰ÌïXFH+ùãcÍ@ba2Üò]"Ób£OH‘TÜžk!дDûDwOϼ˻³w¥É8 Pú^þäÔPÌçK;°—(T™zâaãMX \3„´o>‹ÈRfDp0V‹S*»ÿ?„uw¿?¿õ©fÈpîäÕÊ#vµoÜ]å¼®Êâþ˜é¦5u¤‘v:'¡˜uJV@.ÐHã\ú‹ƒë×™{üªÏÿÊ5×{RϽ8Õg‰d€¤ð’àùžìÔuôîUæœÑNeRq0ÌÅË(æ Fips‘ ðÍ<|ð©´è'ß(Æ (‚rÚpZ)c?ç5e;M“!WlrÍ[=Ÿo‚pÒ:#_ ñÍìððÐä‰Äó´=Òò Ëjè¢ì;MH`~'ø¦e\ÖáVTPr~s. \5^©U$„£ûLXy»‹Ö™}ìx¤Sèö] ;Á…ÇŽE”1¶Ð ÓZÍäj)¬<””ÇÀV 'X'aX.?Ï"$M ¹4 sÏyÐY[CÌ×A/[°ü¼v„R_æÐ™SuÙÊÓk¥/\º®~îHqÇÁ3jÿý¬À%m{Äy<£}/¿yÔÐ+4­Úöd¿à¹Æãf³Õ7ƨƄ¦uùž0ø‚kvt¤+ÙÈÍ{wS¦À)lcíTüLa„+©I\{‡-7;77LùsADȈïzjí®¨XÔy41ÃmÙËD^Ê–Èî¤ÕM&B¶žÂê e>LÊ㵓Æk˜% .˜^JÛf[’`$ Œ7 Öè³tíT—§‰köZ!+ñÝfüVÍè·8è(,,·l%Ú—·¤Â‘ú‰’r’ Ê|Ö¦Ëñ12iÌU«—,Šò‰á¨^b€ˆ.VŽ$Ên®3¥•çþE%óðï«ï‡Â‡Þ»/ñYa·â³%¸Ç%±{-Øcê“j¦u¯ÌR²Vv™¼.@Ÿ™Ç=áÉîšF$£É㺋̱*RèzÕ@GÖhM‘¢§†¯d©Ðd€ói×Mû9-/oïÏT€o ‚BIH§OÆí׉;ܺáiS0İXÄFº€ªðv Lº52c²Öú£¬Æ–O6H6K²ïr¬è<#ü'C³ÜMºèg²Ô„½Sy‡wîüÖ±¿"»9-E?¨%Ü<ØÒi€J¹¦ |àMëËûÃ&¨;—Óß^§ß4ÖfMŽ/¶}Æ> ¶Âü{•¦90»i§é·§_QZqñu]½X)Ü×ýà¯ÃíB¯í1스Z½·[öŠ 8bÌÞû>`É©^vY›ÆäÈ“VÕ€rΠ eÖÒiQ³€0òÍ&”k z ²,$laW»­„‚ïn™v„«bÒê@}ý ³ßyÚ™ÌÚ!HûרÑRg°+ÀyÖŽÒMç ÙVÄgÿ×Àî4ĽªÙRå9lBèÅ«=…7’ú˜R¸¶üE¦vÈý4ʬ¿Œæv’ôÖY¶¸ âñú¤ˆ 3Ѐ¤0±Í®Ü2v‰áÞô÷}\i¶?2àîêb…ï©HpœþD"ÒʉýsÑ «I|®$¿°W×KÁÿ£ôh˜+âçÏhͽˆé+ãBæ?¨“7ÖËJÊ khVLbš’— 3^Ë]¶^wqA”æd‚²ØöôZ½dª'ž0ÇF„¶9…Ò˜«`ãÅD¥ziž•êmEz^˜Ë|0Ýgë±:ÖF‘L{tçKœ»ö ©!ÙFFN×à©ü¼M‚]^( äÓeÉΤŽ+ÜÆžrßs=çNàÔ|ÙÝ’š„æ»ÞÞ)*Fg~ëÌÿìçàËìê@k”5 )H$…aÍ“Pû|Þ,ŒVã\ë[!(æúØÒˆq ¬JAHŠ…¦Š•‚b¾3 Ñþí5ò™k¡d.ñ©ÍõÀº¼w]ù œ£ÆÌÏ–óÉ;Ï2`rµ<½¶RCxmhjBÀZ$B¯Á&k…†#˜}}Á…‘k¿i¡¦ƒ¢5´ÖgøEÞzðä0ì†VsyU AZ¸”6±eà´w—~qlj˜ßYiú¹–²¿¸`<*€Sjy%é/ìwš4( …²3•bò}‘87Eîp†Ë*“ܬ¢u8?QtPÝ)¥Ç4Žíêfáéj2¥q!¬D#õ˰K¡œ:Q‘<Ì1Æý†MûµZ&>» Ù  ´ ÖæÕ†ÉC¬y‡Î”ì£:õä9³õLHLzß<8!<Ø¿S¾Œ§0NIûu\EÓp€ðy­áâE,Šš²ºVi$¦>iÀü2ÁÃåJ½}_*y’`Ê–HšÍüDHâOlQ¨ý¤îJÁ=”ú,…B)½ž£×}ùÛõ"΃š]fF•Y*¿GAšc"Z9 „ÝQuŸ+@±è§N³·à¥ê'½MEd‘`#|„°&…¤´µÊÅ’–c/ßTÇP¬µEQJÀ÷'ë @f¢Ý3se™“F[öͤÊ0j…@µ!›À= g¢¡J¦Ú#G¸°Òò/bå¦ÝW1H¦÷®\ºx÷ìÊ`&ð à¯vÖh}²üì‹{ö»WÞÃÁ»Úîs%}þ’n Ù”ÓɼP‚@/ï÷‹ ÂG¿”ÜAZÊ"‚s›Ô î˜Úæ9ß©XÉD{%Æg• "‚7»Ô¬-–Z7ù5xä-ùï利ƒ8í‰ÔªÙ>*›èøV&s€×Bê<<úbÈX¿›V‡¸0gw—+“`+‰Ëþ‡”l±øÙ1Yw)(ŬÑ8§š%SOš'u"4g¶Ü\X2‡‹´ïT”ÜT&-œ@›“èEíezaú¨W«aÂU9rw\*SËkOˆ­°ò"†.¯Ýñöd]gí˜ên»/ëI…«\%èHJ}ï€.=ªçj{ÇL<1­JÒ)ÍH˜¢½ØÄ/n$+ç¾mNLcg M,W°µh÷ÃXf­‡Þ1aá%Jí(ŠûvÍÿÊI®Q–tè:Ž †¥ ž¨Ã›q„hôä¹ùI¢{ äÁâDÙ?5A˜ÕÙ½Z žñÇϾD‡ Ø¥Áê¹Rý^·’ã…ÇÓ´ðêïO}[”@Ç6ÿ¿¢ËÂ0…m’šÖ"ÃIuÁW>¶‘·W šµ€kU”Qút‰t‘’SÿÏ]l‡ÔhýF¼ã‰ñ”Û\+‰ŸW5éòÒô®ž”;zV¥ïu¾B?Õ}ß¼tEó]•Û“V+f<Û˜Uº.rúþU âŒ'óµªsêÄI²>2UÄ(GF±°ÍP5A™¯T§L<  víÌþš\MU í(}×Ykʤ‰º¿—Â9ÅÚÀ;‰KÄŽúi]“«ª”äEEZõù.A^ºwB9›Ü9.lB:H8EX¹ßxZ¬«Vâ´g¿ñð(v`òÛý0~Ð9ZTGž#“]AV|³( «UæÀrù6‡>«nµöø¾Ip~&¨hÍ‹ÊF·óÃÌ—rÚ×(ç°rÄãÅ]v9˜uüíMê˸¯î_ñBáÚÙ»xÁó©î} `¾_ÇÝ1מ{¹xïJW, =©ã軿ẤÒäTCËÐòé,Ïäñ]×¾Xk¬¾R=%‡µ-¾÷ ^Aœƒ*·…6'ÄŽ(«$4&0·$Jç]úÌg_®:H°Êln ÐðØ’‘;}^™$2§Ê75[]FÙÀ½ì‡¡ þ#À}J]·Õ­œb鲩à|c„ö÷ ”è2®OeÔ×jø}^tU‡g-tægÓ%Ç27•sëgòá+H3ÐÏ.ά$ÛáíR>0UŠRÊ(  waà%JêÕ:ôÂo¢±ü>£ë ß&üºïZUp¥A«÷$ÙÑw®ˆã…F¯_½Ôæo\“´>°%AÙµn>qŒGh°îd šØC#ÊmùÕßG…%õì%ž@Ûᡨߎ’¤åGø¤+q©9sÚ†$;;'ÿ¶ú QWìëäÁ×l¥k›þ’Ð`¦r´ÐCˆLƒÆKË‚ê¹äŒÔda(©Á•2 „>d0€3]U•píÝÞ‰óè Xr 8,x±Ù ÔÃWÓ²`Q¼ ^yk`B*ÕZˆõž@'H€Pú’*d¦±TÖ¶“²:L—¾'ö®=ÏÂ3ë«kÆÑg=GõaOœá“ù+)Ce/uê!e·7æó³Ìçã95!›U’¾Ôâ Qœ›gRe•Ÿ±¦ú4P®ùஞÂý$,‡4ñ…›R´?D{=iXÔËÒ@Ni2æúÊË´T M*À éJàe±–WWÝÜ+<-ƒ!wœv®ÏËö #å‚6 º<&ÓK«Ç^øRÚa†`‡¹H'ú‹°ç±èVÓƒã^jo‰Ç=Çoä*¿Î‰ÌƒÄ<®ã~~µ†;çø«ßBù±ÂÐoÄÌ8ÓÄ_z­¾ó MeÛÅ×Îמ¹¾6±ûßâÁ"ûïÈλ‡ßí½\¨4³'ü4gª¦vèåÙ[ºXVAV¾”9CX¼1Ÿ£nnK|wšH¬RN€•¦;™ò^&ã7iÕÃÙ¡I§»dx¡¾ðzrEÕEÇ$*a|GƒÎ¼,ü^N‡'‰?ÎÀh4{º„ ¦&ÜAñ|R²7!žÄû£U –öøn÷ó- ëê®9z[éð^*Yó¦P!uÌWPúi©Ã`¬«sÁYc;(MDQÛi+›Öµ‰ÉƒB_¢è¥ÙÕ‡ ¨EÉ`S­½8ilUIfÚ»Ó¦=ø¡p  û)cÍD<yU(¦aR¦ ÿ½bËÇúã³ùQOÉR˜¶' ˜ŽÁ³5‡£÷éþÇ €—0o¥Ÿù¢o\©ë‚„?­û#Ê¥ff¯Ñ¦¤\$&0'gg_O)c Í…IØœÖ<Üž'­Jøä7zøÏ'ÞPÄHÙGÊ$ᚎ2ÕtWo¯dB9+eEš\yŽu]7ïù½"ùø{›Ia*I3p’´S£6Œ"ö=9_â™™’$ûƒ% XÁ² ´§a†vokáÍ+öG}yJ!1kù<"¦ªjSDbº©›\±p6yNžj©Ô ý»„°ÜÌuqoY~oë…wg¾Èô|ÎgÔ^]GŠõ‚ækûß ÷.3ïêó+´êeù97‚ÿ=@GRûÚFNpżõ>€Tªâ•¿Š2 ªs(±¾3™Â9f‚AÊ-‹šê3A“wNL‚`”÷º&vj †êÃO>¬4¾rgD 08%œ«¤íM›à ÊM<WÄéSñ!S,‘õ¦+•ƒ]¨S§Š1ymGËs>YŽy+ÔðºÑªî(ð6¥¶f!1+.¥OÄÙ¶8|­ˆÆ17/¢€ü²NVaŒ§Åx¸|­„æKç:—— u%«¶7¯|?x€á £æš>Vˆ¤†]½·¼¾3læàèû³fJî#Z,g´ø;5B¿'Ma0ÚlC+3™ßIÁHý“åüÖYÉ=³ñG3ÝtÞ®TÚKr95¾á(•Ú%DQ6êE$‹}Oâ»V&Î( A!•\VØ=dsœ1ãµ\8x-ìâ0‹¨B&Áf!µt>k³pA¤ËqT „΃ÏÍÀ<Ƴ[n²÷,\ê: qkC“äÒÙLñ}³¶ÐŸêã¸`ž#R{×Kž­°áªWá l“U]+Etõ=ïë¶Íõœ´ñÎZä%"¹‚# ü€Kéw…yëÞÙaæ¥rGƒa4WÚäsnâ%k4e—¯¤Þ_$ØO††N•|êóIaá_&‘sè7>gx::0´l%o 1ÿˆûzÉõT÷³yž—” „œìs{`*êÓ•}èzêÂÅLÃÞ¼ÌÎg±;{12[ÆÄ{©Ú/l³î7§XûìàJ!…¶FH'EaI©œ‡¯õŒÐb.5® ó*JÓ0à`–`$('†F`B|PÈjš­²ók‰7W_\t×®˜Ÿ=sí)¥{–ÇÙ7.Òp—£—_òñ3é£SgìÕù Øï•¿ò|¡%.ˇöú¤évðý3!X© ƈIänŽR™ÌgmÒ=&%*¥Ã蓪 ¹ËYѪ9)k‡Ò}ʽé Os1ÙŸ‹¸Ñ1O)-ÄÕdDô“|žÿg¥…§¬1-,å âBþVz·ì- ¿YÛ¯^Ù“º[„«7ab5+ ð|ÚZ®±€Úð™x[ê´ñ5‚ê ÔiÄq eßIVXiE„yìWå†ÇÑü,°RùÝ9½*A=T|¹>º*„ôÂoþûYúvžŸ§ƒþº?~dÚð³=ޱÿkÐXtøEzw-ì”9»^Â/nŸ=Í™±•ÊûÆ®ÌvH‘-EãF¸”’Y¹£–}«áö`¬/|&¡tà\0º61°Ê·ÐþFýó>Ftöóûìl%õ¶×Í–…Äçd7žoC %¶0’‡`gšu¢#X[¨WÖxÊ`µlxó˜Ðü†ærsvg.þo·˜ñøÓ‰Öé— írŽæ82&ºû/å‚z|o€höå¸OÝl}Th¼¢/¶soïºZV·®úðE+å>¦á}Ï0ì Èïݛͥ£ë €/±(?IŒ\ûŒS<š)F¿HÛDî@Ìõ{Q©åý[N«PýÓ"2S-µÒø—×2ҷÉjÌ/#?§Ñh{Fà]„\‰vÙ4˜”ûú‡Ývq8 Y=Ãpðˆ.:&Ý~Eoa›nÈÚü7¹ÿ4iÞŽé1èäî¹ê¾¢%½¿W×]¡ïL½ZöY\:ø^{Χ± xA€¼” —0ÁÝ„_CÎÞ?[ßà2/ýÆüL¦ß²}ÆŠ5ï¶Ô>SÕ`i%ð”4½PѼþ˜ºã5µBw7pØçªšŸ#ë€l£ÎÜ! z%À)þÃG1ºï÷«æ­ºiz}j0iÙê;i·*[ g²>²ŸŒW^Gäá_ ͺ鷷1tKCÜN¤} ÈsrÏU[À_©ɳ’½3î žuòAmv5 &î  ˜ìÆsî xlïÍ+¥w¯€ÿ•ç3m{‚‹ÿÕç/¹ôÚûíRƒw:á’4}æþ\çbõÔ·¯˜MW®#ásVß…ï-MrúMsŒ@´“Úf@ŒA 0SœÀ`Îùî“›ùJžÒ£0¿îÀÑ)ÚÄ!¥’ øÂµÈõ[¼9!d¬ §2È´ ¬Øpc*ÂAñ6TˆUŒåJh¥/x“_^K8Mé*@É}R¥JXÙ7“ö®~ršwÎø-ÄgþÍÿ¨"' a†|YuÝ(éà~,›Ã&÷ݲ-SuOMU]þ<,75íÂËôüÊßÃ&nïÇ€ýŠ)G®oú~=r~‘¤çо ûª;fþÖÉ¥Ë-ë\5~¥ìuúKÌ;¹PfUßA=§ã‚$@I€§„‹ÿA“8–2V_48~m2íÒý‹¿ö_©+yIª¹‚rs‚80gÇ$ÐÙhµ)Ô%`*Ç‹ÌCÏЬٕ3én.:þYZ°ö#+ã Ê’³ºZB‹ÍP¡ IGÞÈ6hYÖ …L¨mÖü»¯†õ©‚úÚŸzÛ”£Iô,ÆQÅôê½™À^›üæ±{xíÍ¡-|³ûR÷Ñw_b%\¸Ç}rXß-³PÑE9YE]¥Âà³k¯ãægWëI'^ê+t•9¥/Vm?ûÖáÅjNPPtJ9|ä¯wÀ!§õìQ÷(¡Õ u¦u–ô]s]¼¨K?s”³‹b<$wýÆ¡f20æs`­r€ñJlæŸæZCá¬"xUÖ¬ <£N)”§e¥‚®…žÐýæÈ£¼¬ÁÞ òëKU“)¼­<)ah@ëè(‚ØCy¥D‘ñÙÑ`·tx±¤pROÇñæÚäÕ|;[?xÆÍsDÏ¡ôÂæ²ApÔæ#+ÅÊÞ ÑGÄ5æÙ†^•ŠWÞ=éÄ$½âv¹Vì2ýòì 8âýJìñ"4ÉzŒ'1+ Æl:S˜e†óç!ö®ö¹B;k|y¼cnjbÎ2ФÖNh¯ä ÷ÿ… K JºD+òoŽÖ) Þ,üÚe@LpÏf;ˆ9"'kwA ÈD —« y[Ž‘ŒÐL-½˜ÝìBq{\"[þÏXf!&å•3a5­“»å0ŒÕ_ÖÆµÉ’:Õù·šÇ{õé…:öÊ\Q„Ì7uµifW‚m¿Ÿ2íc̦obQÓ 9©£°^±8ŸmóYù«þÕÆ¿à™mŒ6Q »jˆ€tÙ„ÊÌi&Âfk©ìkü®PN;‚§‘Z"ì ¹Ý%Óë_à†òâ$eÊãˆ>]Øzp0£Ó¯»mr‘yÅ2`e;±"Xj»ÈÊ2 ãýÆ Ê>ªú9gNÝ©=ñ»0rQ‡ð¯X7!‹PÈÂ9º¦±ïºÃi Éž"ø ¹y–‚iEÃê>Ê]¥÷ÙöMÂ`O¨žg­¸ñÜ5Oº½Ÿ©»Î§uƒWŒ[•9Ó".Òs&Øxíò骟óÙu†Ò¸ÐÌè„)¤[Èf€?!bøêG¹j€LÿÚv)`’¶zB¥-R€±0kžƒÓ¥˜åE°LSu a+£®+ M¸jæ™*;‰¯ßÊ'Þ2’òÁîˆzá:ã/vçl4|%Wg*ª;vgM޿Ö ²@[Æ å”2ªo%/Î{™Ë¬ê˜¯£9þ±¸…“ù»ú·u¦ëŠrµ}ó·W¿”äÿ÷®H\àêIEND®B`‚nixnote2-2.0.2/images/purple-theme/windowIcon2.png000066400000000000000000003343511315604104400220540ustar00rootroot00000000000000‰PNG  IHDR€€¤Çµ¿€IDATxÚìýy´mÉQÿbßûª^MRiKBˆ±m#Û îÆÝ½>Û´ñjäÆŸÛ6HLÂŒ’3 0nø·{ #„@H #КL3¬–ÝÜcÂ`ÐPhªR©Æ÷ÞÎÙñý‘¿ˆ½÷9ûÞ÷J”¡RªwÏÙ'wfdddL)_~Ë«ôz¹ £nqÍÊ`ÜñýZõ3¶;:rAY‡5¿Û³8ÓÆ²çƒóŒáޑߑÐú>Œ P`†íÿ ¤ÍýOì×À_{&C|Æ(ÐÁj 0ª÷_Z¸öt~^Üóó]øŸûýjÇpÖ¹} xÃÕ”óâôjûDiŸ¿ŸÖ¥ßgêâ:\‡°‘SŒØTÑ…FãØã¿öU‘¹lù^>w9kCsõ'«ø* ãf-|2ó®¬|WÚ©ãYÛÞJœ¥GûÚ{_1˜†–Ƴ„H¬¨#hz¾Ú÷æÆ^q°¶ì£Ï%üØIÙe žÅdÓ™wv•qáó‚4W«·ËE²ëó¬KýWÆgS TÈJéÝêÏÐö:D I‘¶O`Öƒv+¦À¨€â´5(Ûn=ŒÍÕ%§ôØžµÆ â à]Là<4Ås¾k¾—ÞCXPK¿[9½ïëû¼0§ÂV0ëYÇ•_8RÎÐÖx†ºTƒéý¸4Þ‰c½Ü€×»ËHWñ½Å²dº­yç,&Ð>Ójí fÞ™%Pö¥­ûÒ³99ãHýŸÅo¼¦ÿcHZÜᑆa;Ò²E£¶mpXi̾½êÛµ±ÐÛ˜foUÂåHf*B“G…Ú1øDšµÐ]<*ah*<%¶ÑøïÎ|kÇ}CñÓÜ|¨½öF‡¡¥sïþK_ŸÛÞÞHÞv‹`Hû °4‘g)s{X+K¢™"”ea.6ÊЬõq^wÊZоõ·Ö ¼ÔÇügtÝm±Á±^½§z Y4Á7ÂÈq§¯u3¼«çÑXÏãËÜÑ¿Vé¼cBöj4»|šsuê¹þÈ9Á³<üI¿SšŒÍOcðÓ>Gb‚57‹ w`A8£¯h鯴Ûþ➣pmE1(°³;ÈÝ36 ˜p÷´_xRYêµç#ƒ£* #áXùu7‚U™ªå]ûm Ö± D³Vºeà!a°r Ì2˵.ÂÛéùY×ãU¬_¥y8“ »š}Ã}ëinËŽßêó}í®ðºÅ ®àHïÃFüùál»]»hpJ£Ê]¾ùDÓÏ€HLÛXdük¤ç.atFáàcY»“4Ñ=°žÅE³KúïÃõœF·3¨mlJÜ }£–}ÕuCÕ4ý,6GP ÒX:# F­žÄë…@¶ U…šïÆ­ç³ý³ Ý$ètÕTÙ·Y’Ø;ÚÇkÃ3·”jrÙû¶¿UbÛiÂbDRκÝ-–ÐOðŒn%84®ûhBªÙyßGsÏ׺zÏÒþy¼•ÖÙÙeÕÏå,ã?‹ç¢Âºôú‹v¦¯=ýØàÇ8ÑËØâ4ýv¸ôR×7š—SeÝ tOµ]ÌgÎw¾ )kËy\KüÊy ð<ï0ŒãžöÖ,Öµ&gÕ<ª?Ch®JÉ{mƒ¯¬1ÙüâáÕÄÂØ¥èØ\?.uÑ™­iÇ,P›Á´šU|{Áú[ÏâÏÆ‚öÿ™[È´r!`Ö…Á‰ÃŠ‘Þ'B¡“IÝ ëau%# šŸ †QÃ2òÐW%ÁÑ]EhcBêKkŒZZ'ºÐ†.ü=k™ëw%ÏÙùÛ.«z î9æ?·¶7»à]ÂóŽö'ühß{h ŽpªGØb3©s¸«F”}¡ì›ŒóJ½³¼¿Æ/vÞþÏ[Î ÃJø“©¾$@«æ²G©¾1TÖ%»³E½£]Ó[{GƒÉ6&:úb ¦çÈÝãõnî%1MC÷Õ÷Ï€q µØ}Û¸…†ÿÅ£ºj{ªÄ8íƒÆ÷a¦-¾ß7fA‡ ÍÉ‚Òuý^Qì÷4/&¨¼bà¾[¢Ùm6ü[¯/6g¶é#Ú­Õ®Ud®…v¿Ö]2ׯyýùkßÛgñkY“k•¿}.nãj­±þYuÄ'ØèqfþK€ÅÍ@ؤµC6+gܦ«´¦Ì1¹5e‰Ð¯Å^Åš~öeî·¹¯•?× g‹{uXcî$·‚˜¾ ¥»^Â4Un9…=\1qЋ~î®`$­Þö¤:#ÍÓ4fïS×ÊóØúW•N›FËFÞÝn¨V€áÅ6ÝíÒ (—­ëöì:‘µßSŸ WRå&dëkõö wjÖRÿkëÓEFoG1OgÒüÔr^F´‚îfÛb@×X"ûÖÚœe»F‘]Q-¶ÕJ–Ì5²?;„/«ô\›ãg«'ØÖý9⟇k¤±3˜ô;¿/s“µ„˜ZgíÍÕ?1îÓ6®¦\kKc‡àcÅvéóf¡”N5¡ "võÈÕa÷Hç*f5°Ï¢h¤ÆÄŘkî×á‚uŠ®».€†`Ü VÛ†soÀ÷†n­H ÒóKHElòù#Þï09Ù9:t¢ùPŒ±Ãö)´ÃèÐabÁÚa4ß|ý,HËJ[ †uªŸí áÑð.·ªº“þÎSÎÊ çxÈ­|¯kæ,JãYë­µ¤®Oa~;3î#FÙ`O1bwŠŸÃ9³ ’>Ê»Kg%ˆ5ÖÀ¾öXyâ÷iÛkúX#Ñw•]&vý~V“vG8é+˜}øÂC æ'¥ @ˆÑ©æ¨(é¿Ä¸JghK^œ‚<} îw'ÜD¿ô¾1E)ÑEVK7iÝ_]t$ÆMÛÖn…0IÛÚî»ïÎeBÀA9ô³£Nx,clhkÿ—‚`VLJ˜.¯Í£ÐSÈ謚ŽhÛð¾êõº¯¬õœU1<ë»W[vY(WÛÿ>÷YÕüeĨ[lÇ F§}—÷w»€øy"îªåÑߥ¶Îcbî‚E¨¿¹6Ïc\kBÙ§µìÃÇÕÂí<ŽÈh®j^ò䱫‚àø|/þ¡zÌ< ãË"Øöˆ¾Éëi@î ¶b¸Á¸•Ît ÙRJ цãÀ\/ëÙásÀb FTz†·Ø»Ðµ°;(©ééPƒ·"äæ"aa­z”Yðw7¢M8$4hv‰™T&[^ñÉž¡—4îOé Ø,!ÿ¿ÔvüŸ¦¶òL¸sþ~ÓÂ] F›{²&æ¬þ5–ó> |ŸV}Ö²¶½9íy®]®¦¥±írG­…k×Ëuöï¬hd±¬øB•EṄôÚæœ€4÷±†H—ÆvÖwçÚ2øt© iž‰ñsN–˜¢q!{Ç59®…ñsÊeÏk3£} 1;‡“˜­ŒÌȇ¥ p4øþAâŽ)RÈàâø})½R%AmpÚ~áÞºÁàlT»¶T_Øßïõ¬p 9ìv‚™æ!1j?Ö_Qæ}„übåûØXÐt÷^MkÑÚ3 S.3Q‹Âîé0Bر„ˆ¼L.”×0"¬¨³‹‘î[w»Öèš÷ªXRwÁuV˜¯uÙ3îÃkà5èN³n-ãùŸì©»³œ•À¹Ã%"š³.æÀáÿ)¨Ö<ÙÛÕÜ‘¬2™^3•Ä*(?£î¨— ¶)ÔK°´`ÙÖ•YK®#‚ƒzá¹÷Ný T0BkÈÂêXc6ÁJX.’ð{ÒóB/zgBiŒ>.»aTô•Ç‚€é‚ÏRTúñ ð0ýJ¢C‰wå¾…; ÏQ Ó÷RØó7{.eM9ëzÖ=ïœuVÅrŸàúKõ΢Õ?e—kKù Ø2êç…ßÒ=¯sójÓga¼¶>Öš™W[Š a¶í%|¹o¿TžøkYÛVZ˜’n¶ò ÒÂðãd/Cò"i˜Ô™» ¼/5 ’¶š´SwÜ™…;šÊ>BΊÆiÖ‚p>ñëR-‰Aò?0Ž&‰³e†è'ˆ‰h^ÍmÙÉk©í8ŒÞìd™‰Rz ‹JÜéÒŸek¦áш ¬HÝÑ?äÓ·ù'ÆîâÖ¿‡’ ¹ÖŠ3ŽÜQ†å,ëníZ=ÏZ>«¥¢3ä·¤t®míø×€º WýûÔ´q/˜²vbæÚ¹–æÒŽÁ.cje½}ý,µ»æwrs¸AÀü-qiL6[³ÆK)3±É—[ñ´°ÍJ:àÄ‚¡häJŸ­i’k*»Sஊà—ÔX0ÆìóØŠ4ƒAÑÄ‚Db7w…`1&ÊÚtcêÝ:1•êÃ^¤«°;Œe¬íß¡·Ëc„3ÿ81LŒÓa²ùË[S24‰Lš•õ<_ òd,šëÎ~êÑäºRÛÖb—$ŽŽÿ¹±¨a™/ìjƒ4ïYc¶ð¨)FWöCò‡éXfSPgã7µÝüÇ«èrÕå=€%¦¸ÏÜÒ¤®•®‰S]C]­v_'í¬m/þެЂRuÁ䣻GìKɱc¿«ýášR‹pãþºÄ×i¤‰ÉçQwÁÄo’…;Q°y,ž†9D Î ÑÜ4Ió\?!G’x‘€*ù½i_ÁyIÚ%qÌ kÂÙZ ÎÃ9”ñ¢pëAóÄô:ù43lÜ Åu›Ž5'ÌN󤈉F4à£3?LQ +#€Ó4G^a¦ÎN~BÌ<}Fù+å½4p|ÏÝw^D ·\PvÝ€«ï/(Ï `'d_9£µ²Ôôº“Àgdž²¦3cuÏ ßÕ “¥Éß1–3ߘP”¨K`* 2±Jö} =çn3_AŠž² ¤2µÐ2£aM}…ÅP\ÄL3ã% ƒ˜[QOSª»[,g[13O‰îàq÷ìæ°Ö)Õƒkç»æÏ³ŒR]20\BÑð,¬â—xì|7¡¨ †°ú"Z(æ-èM‰6¬ñœè.oÐÇÂÐ Œ³KÉ-"uRv0ßÅz EæÞ­üg-/ʲo¹>®S¿Zv¡½Ã¥Òç5€-™lK&òBÃÅjÓl‰8晃wî÷³"{—€˜í„¿™¿>3øØ€œn–zó¤ ãµÅ/ð{h‘yƒ@¦<ÜëfGoª0´zL:ÝtH¼´_JŒ3þ$,ͦմÓÈÜ ½$xdÍØ“”:CäÔÈÉ(ê'íwÜ>§.k2mÐs–{‘c î‚ &B9’¸ ñ^6œ‰í‚É7©Á!|~oJûaM®#Q¦ßÍ·"i™ùií2®´Öö­MàüLpAÀÌjûk˜í9„P*kÆ:×þ\ý³‡‚óÝ{k:Ò=ï-µ±K‚®‘®s\CHKu× z OØÿN¼€ù¼3Ÿò,˜ ûÙéor§kõZ€¤[ÕHØ,PL›–ÄHBSTÿìùõÁí»=“„Š ïVHvñ™³æ$z´#™µß^KH/uú _-i-V­x:õ ÷†'ûáñnتbgj‰qtOÖT³D¢ ÜnÕ„ìË›»!;%Ízxd4ã;&Û½BYˆýh´+ì2Ji;2ÞBpÍHók]2²—Ë­øUõK½°ÈV´µC‰^/½_£³†IÅ]í]‹‰ÙçÛ÷­ïU¦ãRûêêBý]fÉ‚ð 8ŸÌõÅB 3óïmJ?šë'/%šðˬÞ®4Nu˜j³¦î}XŸh÷ñRÓ„Ãp3£±Š<¤4unˆ· Ц™N÷Ö ªÀd#¶Ùl¸²óƨrl¿ˆ:£NBQÈšð¹’~Ç— Jm¯Ióä'wæ*]e@¿Iysã …‚CU™¥ „Ư¿ú fÿšñb™ xá{-s–=ó“™ê{ÛÝÃkÂ¥Zº]â[²ð|+ƽÔÄa¤N>N;ºóã¼…þÂæ$éÞj¸uE›µ>£RB4‹:T5mÙ…ÂäI£Ž56·?À¥Ã_/:§D8gè·ìŸþÕÔX ÁTG°Éè,AiÚd÷OÁ­±ì ÷)i!«(,& ³Ö\qÀœ!%Ã+ Y‰dÎMêJ$/ ë >1ìÄCŠúCÄoÅí³ÉŒ/ùçÁ]Iª@33d-¬}¼ÕÊÈû$¸;âùµLušÝ?>Ôt/MC‰¶a»â[‡—’€s™!t! ï TwZƾ¨ÑkbÌþøa¢4x€ûöMúŽK Dñ-a±XmŽ”šÌJ‚ã| ILôq„%Á'–Ù›”rªŽLMW9›Ð>¥ $莼L4ïºn-.hî²ï½]Ï :vþ&;ž¯ñv8HÞŸ?­ÃÌ»û³îCÒˆõ€U€œW➥ÉÛÑÅR½0ÿ‘&’“¶Õx㛚~·E.îɺ©ÇúTÊìÿ%ÍÏû1X\ìïõ~Y#o—È„Î=dQ¨öÙ”nMF[¸¼`ó‰XEË‘+ö<"Z|øÂïÏÀD[û7m£“θæªþŽïÍÃs+ %ƒ± Ó2o2ˆ;iSø¦ŸKPú…*hióuzê+ˆÖ6ôó ž¼ç‚.`£q·H°°û|³Ùª’`sŠ$_H’ɈÕ173þ‹5ksM9 Ï«Œ´*§+˜íš¾…ß]‚á¬ümGýý7‚íÂËY$ÜÕ–³0èóÀ³4ygŒâ.Oº´©ý’¢=$çËémÄZ[t¢5zI+ñÛÂÌŒFc]Úgšˆ‘²KÂ7»+‡HÄíÇÀQ'Xiá›hÌÜS'M›gžpê‰dŒ´(J1ogn|CnœäZÒÈ8¢Ê|àÙ,›ŽÉH¾Ç¸ýÎ<ÀàÍøg6ìn0X«dY(¦ˆØÉ}u¹5GÑDž©!Д„X5 5úÍfž¸œåu2]ßB®Æ5Lo©ÎÒó«á[ºçûœ?g,iûöÛš¾Î +•à €s/Õ}^Ä­•\sõvI׳šFõ]jóM—ÿá9z¨÷ü/Wf¼‹qs½}V®øm-|g~½ «Y³4ˆ}vÖÜïk´ËåtÆ®‚éCaÁñ@z?dáûÒß%8VðÆaç¯K^«¯vÖÍô¹ Ž%®^•‡ÊCåONa¾°´©û¡*»¼ÕâØÛ ؇…]¸õÊUÔÛWGÎðî®ß–vìkyH0 Y[ô$6ZiJìCºË›ÁU]XnêiTëBµÑ30Asµ/ ô¡#?Jé+<I¨½ØœNÅýïì~Þµ 9‡ß}rìjVê×9÷ý«b]2¸›„E­À®=†5}ž·”6÷ Õj9Ä©ZÉ Ë«ñÂGì ¢Ò “Wpˆ É ˆ‡wZ¤U$ÓVdZŸ/kzŸSL>åQ(¨è›û ÐÍ,?äò®„ÁBý ;Ü”2nð íá•)8ª qÊêùíÓµŠ$$¥\3‰@IL9 KšR¥^.4èQJ‰Aª‡áÁý¶¨)Î#EbSàç»Á¬‡myÆW¶!èX šXâPXaLkÿ?Eõ Ôð¢™ì=íGVN"g“õ@é¨ Ÿ~N¢¿$J‚ájB®¦«}÷mβÈ}›Ï½Z ãY÷µôB´Ñä÷}áRg鿬dfà“2£%·õ!í®l§_)0Š/,ã5Ì2˜˜µk5(o»-%n›ŒÃRëT?uCõ(¬Ð9VärQE ™ôsÎ8¸?f:×FÝ3iŠ!c1²þÊyó³¸ x­¿óøÒeåt±±¤¹­Y3´eÕs–U˺Íáyw2ÓWÀà爅Âðá=o®úÏhuæ=Ý‚r»’p¡ ¯„>0¯q²åiJÜÐölXg±V»ÈÄê’ N€8íc`÷*˜ãLípæöufpÊŠ•²Òø8ýHð.˜ìõ4öº²Ê¬;^^Sæø”.Wísg à\Í> ÎÚðßå×Ò=ÏÏ ³kxÌ(,/CgëÎS#š/\‰ õoáá$@z[|)НN%ÐB7pÌ™¸OZÄ…ê^<Öö€r71oÇIn7dV’Z>¶¨E¸•X¼þWÄ™NeZ< •…ƒÚÕˆŒòºÒ9Mƒçk™ißÃòß8ƒ&¾%pMÉÜŠkŠï[ˆÜübã.5f¬ä dªÈ®Í¿ä­ã!hÍ´tfüî‚ AcîÀÇ计¬éù¾¸ÑMÙƒ°üHRq@ã·}ðMŽ©O žciÕIÕµŠ!—•~õUï­}Iá]‡Ì¼»£Ì[kã®A^MÙ§ÁŸ¶¹öW·CœÇ™hø~ÌleO÷Ôïê9Á`.‚ö iŸVihcŸ,\ ܃ùÍâ.‚Ä'I÷':‰še“Zà—˰pJxéð w *òàÂA¨o«è‚­ŽÉ›œEHgŒæ'‰}‚‰™ÎÜÔRþŠ2Xi¼3aãͶOJõÀnW ÂOŸÒgòWbâ’Ühd1ùžA0õÄÍ:JLÑ)ëÍ›¤}“””£jÖ€1åfɈªïQ™µ’ìj–Ä>“dìOøž"m!˜ÓFH±”&å¼…]eeÝPTV¶]ë­Q„W–ÃÉ»ÈHZÒ> z©Óó2ê:! ¼Ö)>ûÆïàà ò•ÌÌ–5cÅoZOÊ é ¤=I ~aS®I§ß qÛæ§YIÝæ…D†˜n iµó6k˜Ø“¬ÞÉQJ†G&|¾Ë7ÁÊ7I%Sôæ8,sÜm~{n˜0­% …·®‰É&¼uŠp¦ _8*¬¿™æ×µnrë$.j´2¥ H0™3•¡Ù9Åᇛ°6;Éÿ3&W‘ <¦`ž¦iNÛ"A2Óc †¶³ÅpR¨À8›[7ZxLgî4ŸJ–“c„ñ#ÑJ(½ÙÂ,/,Àámñ¡0°kË•˜u{>Ùµ?ø¶ß¿j²€'‰“b}à< m,Ä9½i¼jerºŠáÎ ‡= òbkúÙïÊ~g_\bêû:Ñ3>ïåZhü‹©^g%µàMK.ŸåÇïù&]¤Ö–^þ—ôÛ³PjÙÜUg U|¤ïƇTHN„E‘¶§“¶žšÌŒlméj·_nnµHÓæDq :ÍRê ¶n’5a›{á3IÌ¥ ‘üá]{tÆù€8òÇŸù¡/ž ¶^‚YÅWÒ”iž¼9Š¿0M>ðjøáËXaOÕÛGçï$¼ÐŃfl|îB¤ˆ²8œÆnÄ>µmHèžô[ï91â.ÌIÊ )h[ù†vVÙ|±K“µzïƒë$á5c± À²‹™-ñ¼µLv—àXÓΚ~æ,ƒs´w¸·£}ƒY[fñy}ûkòzûº¬–L×h>û¦ç¢-Ì Ô7Ü÷ö¶ËÅÁçÝú]ÁH’‰jÌÍÐú1wŒÐª¨t;w¸Éž³˜ÝD…i]Õˆ `Å=-ÒÔÞ|+ÈÁåÃË1ÙuêÃJ*®+Æp483ð3Öš¹Èl‰X‹µ¤ÈwœÓø­Yß÷gáJå lŠðšaè$(½Y¸“D”ÜE†ï0fÊó«¦T´šÙë$±AË‹'™Åätú¡ßC²!ÿ"ôoÈp RdáÈ%˜ÕÑU}jUá˜)-6N©ÞŠÏÑí:f}!Rê¦arÁþ²§¿kºëÝœ…ùÖMÏÝÀ™gÜHhDº)©¶à©·ü¼þŒB^w÷7âóñüö¥»&X[ Ä ÚB$9„Î`É|HXQµ¡‘–>JS¬?büáN`8³õ:µB‹u69¼Å ¡Z.35=Ô)˜€ÌÔtÔÓ‰ÁL)œÝǨý3·Œ³bœE˜ˆióïräXkËí&¸Ø*±ÂâóÉ÷E;÷(³Ì씹Zê¢\K©t“·c¸'¦OPdzÂÜó|Á­†‰?ßoÃÓLd×Ïb?åB$m¹Ð5uX,EswQQˆÎTöiÞ\g®ŸÚ'¯úÍš¾kÝ=uøŒÿºA­Eˆ”g3À¾òY7>·iûgñÕÍ—’3{™6ùæDêç<üy«`kÖ5Lq¡ãý»ò ÓýòEs¶mrN¤~¢aj¦„¡úCB‚R=Woý{¸%~ˆÙ (]Sçãüb0„kƒ4~Ÿêô߇IL“D5¥‘sº k0p²Doví}û½æäwÀLòˆ]i†‰^w ùuMÜ`5¹ê„ñïö@ƒË“Ð:Œit0aI#H¡;V³VSûL÷Œ#Û˜µ×&sì&,ã·¿§1£ð«EF Ù|JÍt”©Û¿3xöÝ3Å<ïÚÅϪ0èÏfA;+L3<øÐ¾K­¨»_\5øiì×þÏtuÛ^ó‹õHrùôqE ü<€Ï½õy€ ~ìžo\ìæµw=ŸÿÈïv™¢°Ã›’“µU Ë5)Zíθ‚HÎøh W È’¦ž?®xU×X8ojð:uc.ʉÀ|þ@>XT…n£ÙÃlé=ážh!÷†2%wÅDy NHÞ¤`ŠÊ•åljЛ¾áš‚ $DÀŒºû0övLóKÔ½M-ïÍ>Sž¢Ëd@“3ÊÌ *ÿf‘“(ÛFßì ÚLÃz>±PP AÖæAmbRs'‚\ãcßW–”Ô}Ê+»iwÁ´Ιú‡k; ¬õ7aO;{¼ÄøWu?×¶d= 4I$4)'³í¶¦š¯Íå³ †itì‰%¦K<}áÞ™hi9(Uq ?´Ì­QÚ35d0?kÑ®,%ñÞhLÏ~b ÿhï©ù—9*ª€å°° ‹™Nù‚Šv˜¢ü¤ˆ‘ä‘UÒ_®¡•žRÚØuÂo<Òp§HŸæ€Ýðš²9 2Ï Í9|ñ¦ùkŒ Ô/b#ÔéÏ肟ç_'G ü`¢Ðï°“·›¬¼.üAO bù Ý¿?Rž& FÆLÝܲÄéø0`Æ\(† U‡äÒ‰rTaî}ª=Qô'þZxEÊ#™kSJ¥Šô¹a£ú{“€*XâÂû¸ó>S…ùËüëk5Á ™ I±†1,Ó2çzêšL›”ð÷ך´ Düt¡PúÍDNá~¥ÂEŒº[®nSX¥™Þ‘ѓޭl0¿!æÔpeŸ‡âº ‘¤Ée“DŽDž1’úužìcÈV‰’‹!$ó³ýùÐfM¤ù  ‘±¿7fïÚm9öÔœˆ¨%×\Ac®’®Á`cd_VNÄ G8»„8º+P.¶‰cn-M-'.ê™Um?Ãþ׫b^,r_ñ¼Œ‚L#>¦tˆÏ¹ `fî®  ætבLFîB/,eÐäÍÈ¢qÂ2Áú”yö(û4PYù¬þ,3õˆŒÓ³¥6ç<5gPÖ÷feÍæÜ%IݳÕ?WIZ5*d xrcÑ€ÞÐP¢þRÇ¡“è0¦5ä:‰­×/ ¾kQi€¤+k‰&LKŒ†ÛRW—-<Ü7@Dßâï„ò^’ÊN"ØÛ³§¦åí"óÕǰ‡®1OÔ¦šëÄò)R4+R¡…Š /ö<¡(è¥ý–v!JS\†â#aAIü–³Ám®™‰%—Äx¤P¢Î’Oßà¤öÒÆç 1& õ—y ôùN¡¾–©iõjsˆØœ¶9‘PD‘Ð`4‘Ì#²Œì]Í¡¢ö.¸´*fèàó§Kšë ’v¹]Öhêkù\¥“:QºðwE7‡©±¥Ì ?¿fÉš÷ë€ß%M·€òpº´‰*»‡´‰¼nvbá[w!ã!„…£›ïXDÜ6k[þFi«.hD!ó›e¨]¹Õ™æÈra×–¸«€ÇëÛÝnS¤y=wY°)"·œ¾‹lƒ£Ž¡]êè+i/¡³Ïñ%°sÎ$ÚIy~Ü•@. OwB ïžv"Mn͵„„·¦!GÖY³¶òl«„…±ó\Ú˜ ά=Ia¦¼!žR= õ§DJ cЄ—ÉKÖä‹"`ð7²Òf]ò•“áþŸ¡4—üùÌ |FMî2?ZËûf˜òjzɵ’Ç.l‰à( m`¶£Ù´°=£Mûڭp2£3…Ï[§^âkvcÒ,ÝU3 7mV©àµ|Î<¢Ì8›˜ŸýL6hD¢ˆÝËáˆÆ— :cþ6ŒÞVû­†ZÝ›{º„fœLw²F˜#_™ €aE£/v} Æp­˜û0Ó£´Ý„QG¨Že„ªBu„Bûgã¡#[ •V_¥}†X?ñ¬ýÕÖ‡ýG6¸ýoDÔ ¡¤n}p<½ùÒ[{Áèìæ*Ÿ…>fdzÿmøªŸðM?Gô ÝöÓ4äÊGóà=1ïÓê!áÃÊ„im@´“à €ç¨j¬Ó{Ù”Ù¦1p¡Î&Ñj“ ZËpåÅÉ5aYöI3Ér›ífþYU¨VKœQj”÷Êáb…}ZüÕºifŠ Éfðj©Ä#EàÚ'RãÅ6¿#Ã-^ûÁoØ3‚`ÒfŠø<sWÄfô î©_˜É¾@iM7pûS²¤Mèe™m—ýÔìÞ sÛFçܻȻkÖBòFdwMû`hl8Á‘­Ûa©ª`4wiÞ#ÃïóSÞ´žâ:åûgS›´`¾‚§(®ø¤“¹¤9g÷‘¹5È ¤ Š”2M,G‘FcUûoÖš $¾Ì]x8ìÁJ41MôÇŒ•,MÓê5,át¯±ÓK‡Í]`4·¾³Î·›ëÑÆÉ—Æ,£µä£&˜È´;ZÔèIÚ¡}JñYÜ@²²þ>^½£D(7rßÔÚúTç³n|îÎPЉ X¤tàŠÿuE;˜[˜èöW“åPËkïš×ø¹<íÑ/˜hߌ¢zaxãŽ-×”ip°( )ÅÚáŒ:2÷‘Vn| íTSÅX±“'˜†4tm8ÆØà³(t†e¬ÞîÓÔ-vÜï§Ê~cÓÌ%ǹ(Û¨W`Tr£ ÓžWlÊÍÁ‘.ì‡Ç„€‘\a.s­#‡»h£EÓ ggÀÆa쪞»p½LØ)šÅè+Áb¿–4ÊÆ 9…9ùõMȇ‡qb©!•ã(w7b¤­»ÐîÙ¥ãîÐ$÷ò1µye)–ާßPƒ€²b—ל ]¼‰Ñ\—èyæ5©7S'¨Z ¨¯£k,‘¸ÌZµmÅó«Œ}®á*©ð-3ÿ×­`þ­ ;^4Õ"|ê˜ù±0L(Ä=®1/äk•_N”ö„^Š—üŒä1rɘsVm Oh¼áU'<×yJ{0 ŒVFÛØìéµ]#Æl—Ž /@ºÀâÿ±+Œ™zÓ3k£N"Å·ƒq ÛñŽðI'Û$\5Eóní6ª0ìOÜ®Ñíž?!í‘•McÖ¼bL)’yƒÜ”q˜‰„“š9#ÑÂÜR숴fõ4¬µùòf§ ˆŽ0± PRgRÑJ=„ó,¨ÜZ°ñ&á4¦‘_<6óéÙ„j„ f¾Ý•¥q& ýlÈÎn tÞ‚ˆÈ“Ö©ÄxÝè²>ÌR mK;Ô¢i‘Îèó>TÇUÚŒ‚Ëg áíc¼s.œ9«@ÞÝÕþ¾÷çê•r¾\@ºçûJ+ÂùY“ÂÍÕÊÍÿ„:j»œ…@Ú û±žÈíjJsû T_Ìü„±iëƒ}ç‹8æÑeÌ„ÑiMškÅ÷’ÙcÎùCY¬!!ê7»;ÌÚ`¹ÊÖ„³T‰Å|‹ò¼¸Yo cìl~ nk‹Ô}Þ´ÉÚ]3£ŒÀhÌCºû)ûžm³—Ÿ™bFGš2/~O¹ ›”ÁÇÂ7¡(3²¤TÆþnˆIuí:„«MaÌqÖ|ëZR4EÅô¾¼-%Ë"<ƒ­’dôgL•ñÅH°…ð*áȇ“›‰ÃºM¸PÒHgrPõy +E]Q™+l½:jÙrv4)­;¨R¦bŸ¢»Ä˜6ËžôpW»öqÏÞçê aÎT–¬ -ÙÛÕÜüÅ·<Ðåiþž ³õ6Ц ³Ú–¬ÕGhÑN+þÜ ñ]cèøÛ2ÐÙqê4Hxß2/À`X O{nãš)R“× .ªªG!› ǵ.n˜.51“j„[*zôNg\2:ñg–YDM{S·ÂOÁÌM3 ÄHlîHÈ“Ef-FÂ8«:c¸aÆ4¯u"Ýrô©¹Ü¥¢§ o9£goIŠvFG¢•¨Ë“ã–ß$l˜´gW·u2'Hfoó Ž^Fಡ^³›áÞŒé°Ò€:$… pÈVV¤öŽu—Ô'2ç¦ç?/Á޶PÚªFÈœ ™³4Jû;‚¹r¹4È}–BmkÏ€Îk|¨Š1~[¤ø&Íü{¶A’×–¥àº0~Ó䌱‹7åš\²ƒ2aSô ÞYWi¿qÆÈä‡á‰—À¨›®+×ü›’Þ7ºÜœ‹„}¼äðÉ“âW>òÕ4íºá)‰àšèÊHj”ObD?!Hh®í> 57AÈVŒ¯-Mü×—ŸS0,ÄY“·7–2ó†[ËáRBÞ¼OëD\ˆ¸oððõ ¶^}©› tÛ!ØxÝé”—héûβÄ_ÏâöÁºº‡‹ùìa~PKþ9ý`{‘à¡”e—Ÿ1¿ ȪY‘Jlé¯N¥WDÚ o‚ A\î¢!mÍ„‘iU’Ç@¾Ýê ¢õÍ‹sjF$åh*p\ãE•Nôó‡ÐÅݦiæqzJehS’’v$Öm°©éÎÕnm ¹;†ÚÝ6M#Æq„tßû¨[¨1÷î®àkûU-u‹Óñ#6P(å:\?Ü„ahÌe‹ÓÎì1è¶1÷.$TGl°í;º{É”!&áDÓǾJÓ<-˜/« w¼Öí³ÓúÈZrŽCO\ˆ4g#èÌùBç×ÊM}°”Ìäâ™™™A&]š-w—Ì&)íW8/ª'­-%Â3ÓMw>‘·HÓïiŠf›å-‚.ÁÔ¥ÌAÎíÓ ‹äh}ŽÌl·Î ç°=AK ¡¢ØŽ§;UlZr6Ýb«§8O0êÆaa澦ü̾xñ·¿ù_… ÃõØŽ§8/ãd{ Á®;¸ˆA ï rÐS:ÂÓ*˜e2ãnñô)î–{¶ßùÆÖÂ9UƒíÏ $‹£giÂF[pÖ†¹AŒ©'ýÜ©4¬³½–®;MÚ{éj8¯:qñY^+É21Thg±&)†ºˆ˜uð: ÚefΰŒ…ѳÖïgGædžëó ûÞÉúÖª~¦'÷•}. v×{3¿ù£ÎtÄÂF8j!5?£Vƒ‰ž˜YLÎ ü?.rï ÍÞrb =Êj>qkòbÄFJ׼ɟ˜ü¬<<Æ=¬òè]Jÿ)Á‡ëq7"áí1Í-1–baÒb€ºì9W0ö³göÃØÏêYœ>¹jzÜÿØØ|Déˆ-6M÷·Øè ¶ã?õ‡/ÄU~zF8|æ¾ÃMlÆ r€¹‚4í¿Y…EvD3ΧwGÒϽ[Ì")m8ÇKö9òZtŸ-½q‰:ö½½Ç'J$AÌÂ7“É‹gH¤-ÞBhÞnÌü´ìÃê “êÆªæ×ÄÅOg;ddL)Ô¬ bvl0úT¯Ã¬åZhùsu]ð"ãyG{gÞ>³4Ë6ÔêÁåӫƼC3ÍÌ/4 –ðqK´ ƒ(K+2Y”/¥ýÍV‡0ÁÏhzž$­×k9€óýfTK‚;Gñ¤‡Ô§ÁS-JÀGy¤%@V€óAË&ŸM~O•£ðâêîû%–jÚô[lÝm4b‹í¸Á©c«üÔmãßU~æ¶ùç¿õ„¯Å ‡·`Ô-àÒ“ºkÊ…v $MÖÓwZÄ6íÂÜŠfÈ,2-ï÷©uýÖhAûa<ÏÒip(+I €LrÅR‰¨‚n F.DCÑ'Hãfzeò%k4ª\ýLÿÆÅç3‚ú à>‹ ”ŒXD¸-Ïbð‘d5!±ˆùR–—ƒ¯˜Â>Ç7—ximwµ°¯,5Vývöl®þ`3mÏ% fNHÚ;ÎÅÌ4Á‘Oá¶6s~/¬õ3°"®áN<þu˜I€iŒ…]0¡ôÑÄB‡0¤,¦:‰˜0“8Á‚+„'µ@þýÀ†Åãwj7“ɤnnÓ i}ÃT;£ïÑ<]ûßöMÝQóÿ‰w}7,å'oû^ÀS>êââÁM¸îà=As,ášHxËt+ ôÆYdø&<­©Ìpò&xµp97!RÿDz´V"Æß¤ºÂb¼(%fJ2Tbn*;ž ˆ« xi¥9!˧·Ë†O.ѧ”ï þÜè¹Ö ÙD4¹Ý*^ˆGZäY™C»]ï¯hw©Lï%v ÈÜóÚyªË@²‚š´&wsQH̺"O k§oæ³ ÎÌ0?6MÂ;L„ ²jØ&Œ‚“Õ‹ìŽÊ ?üèBBd KÚ7TÐâ(@3ªz…p TØ¿áF£¨¦Òkb¥¿¸ +R{nZ¦MUwçx­8 :bÔSŒzÒ\=:Bu‹-Nq²½Œ£íåóçò†w<Š=ÁÉx¥E)yJkmÍþ#AÈw ›(EúÏ&p^›ŠéW˜e eƒ4ƒÖL?{ Ú²£K4/2Yퟡ[eЬ4A41º©ÈÌ™0K(¦A¿)IEÍíWbÇì²H¸dÿþHÓPú@B²µäË1N³ó¾Êª2ÇO瞯ipe§S `Nâ¬aêÖé>³d¡Í&è‰PŒà\#í•‹+Ã÷°Ø¬£pÌKЧߋ¬¤“Ü’ }2Q¼_0åÔ’`7­>ºœ;œ´t)í‘6"˜¾ë}ìÙp`&Þµ}1̇)…ææÐò²™“Ö4¡ÐÔÔ°µ$n 5­ÕnîÚBGŨêaž[lp:>¸´þ¥òêßÿ6ÀS?úâ:¹†ëIÁξñöy¥;ˆ'YÙmè/…q2—€ŒmÞ#? }Ûè -ݼä[ÚËá´ Ö?3ºaèótfË¢¿ŠM©ú8ïAt88¿Wcy—ÞMâ¨$Mn.­2ÆÖ§ t«ŠsTM- ²6,´zBvyR–xí\[;ÊnÐ>†~.žú.Gå¦BSà˜ÌþBÀ’ºêÑž­ÏòÛC÷ÈúwÍö VI¦üd£›¸´išW{‘»¿ò8ØJI/ìæÔ¾.ok³ Óoß‚’€Ïýr5Ó*G>ȤÀ8ZhgÓ¤7=ºçÿz×÷⿦òú··SëOûØÿ‡¸€Ø¬ÜrS{ʉéû¼¶S0ûá©Ø=GÍ5GÏ€FC#3,Zt–”§Hn›^–(Á'ì§‚……‚„+Ð×¶ƒe =¬Zw9£…GêŬ.Æ””BÕ\28w¿öÛv"\Bñ†7†üH[mW;ØDáÖ¿ŒOyôgà‡E…“½Ÿ²+33[•EØïê$—!¸K ¶>W•÷ó¾:`%ýùð£O¡µÛ*3åËaˆó; RÓ¥s¨³ †×Y‡ÎïH _ÿmf1‡-ΔM|ØZðCjZðCx6AĦITøä ³JÖÎj¦]yî\YjoeCzë{ê¬)sq¥Ò¾7FÞ7-Æ4!žÄ^5ÇOxäN«ö>RY.üypAã0Ó+“Ïp \ó“šÓòÜrª›˰y÷&ðì£ÕuwMºáÐ>{¬ùm{{b𠦂„A‚ÁìÛœ°óCoÓ–VKã >Ÿ&´âµùû¥?ÛŒ§ÿÕ3ô±¿íî‡_|ÿ?ëyƒÐCZ#g‘¯mw½LíÓd­‘rˆùãò›Çk‰vʺ°yd2·Ž‚8’Ž,É^Õ— ‡¬xå÷Sx1YÏuÕ$­;„ñ›,"óÊÃ)ßß°54á¼ÖKfLo?YÄÈmñ$ßky'Kì¥gKŒ~eÃÞk%ÕÚ:AÒÊ»÷‰ç” S Q‚æ“(å=Û`rÿ¢/€y׬f&J„±1‰¡¦å”û4ÐØ$ã,ˆýÓ»B–kÚK@2’ Ò? „ hÔ±wé|€ ·¸4íoHL)eÕ±<@i“67Úÿôo~çw­ ¦ÿ:ʈ-~ÿ¾_ÿzï«qßæNlpÚÆ«&Í=6¯û»Óc=”(_´Ý_{16S½Š19¡ÏöªUªê'Ût™ ·–%ORZXhd%­+.7GÛT;.¯¢Fšsœ³/o¾â2ß‹êšÕ4tëÀ÷nR`½¨>3„®X`˜MPj~ÿÝ÷»ìþ¾|Œ%Ë’”™{Wö´Å‘8“/ᙌ®”r€ýÖTO¤MZÒdȤìsÕr{³c”̼ì‹ùø“Á‰³ºYfîY !HþÔäöjL”# &Œ€o€; !\“VãñÌÌ(È}U#OȺÿ'|£=ó“<š^×~:¬¥a'gG±ÕSluƒnðÇ­(FÜvé·qÏ»oÇnú³øäGþÏ8¤ ↤j‰*Š–žhÁ?²>]˜âî-Ÿ{ôï¸n. %zãàts_loªÃä¾zœEÔÝ'F¢}cÕaít6$èB#©+T´§1›ô.ftúÙ}óÄR¬¯ðÌêtׯÂ>²døpžÍhÍŽ]ÛK<2ùë&Dµ®û[r%íN]Õº%`Þµæk´D÷¡Mô×=|­ÿjóL/%Ý9ôÄÜ$3/–äI`ÌM4}-‚'áÃòöóäãôÍà¬]¡y)ÞúíLÜ/ „ûè4Œ,PóÀRû®ÍÁ)ÔŽµg^»Åƒ¶<ª nóņâ0@°¥¤p=IôÐ…€çÿi ÚÞüŽ?>Ú?—[ÜsrNÇc\nÀ'=êÓù¨t/8ÉÈ3#†–}4«,ð Œ_ˆ–ß>­+ùjÛ5Y·O{ÂF›EŒèbu)ñiðæÏ§ß±0#…-Ûœ[ÈÓKãäì»cáÜœŠ¢”°Ò»ò’N;gݨ$%"ûšxV~œ¨‰vù~bþ>VÞPÌÍΩÒ€ò@{Ì„[Ypˆ‡¶:;wØ('Ò¬ òÊÂÖ áLJ?Ì:^âÞ¾á%Þ ƒ]!¯á“faîGŒØ`£§Øâtýñ+÷œÞ÷þ7âÞÓ`£'ÝdŒ|ÀÁpˆƒáÀñÝ,8ÈAõ»„(üSmð9¤6˜Œ¡¶¿Ý^K±’š„Kb€L¿½MöjJþ‡t{RXúw ‹–]h}ë@m'½GR“é¶Ô™’ü,äø RtbçñÝõ²¾‡E㊶•»HÙ:(Û:†…²Ï 8ƒd®æåÉæögä[vYדö›¹7Ù`.]ótñb=­ØþåÝS ©”4ljÏlid3ÙÜÙ+ WõÅœ5$ÌæÞ§\ ¯ðâ°UK{ Õ½ãV“&Pæ]¸V.ñŽ´B$ÑE‘Ñv ž;ãoÔд\sÕ&¶GxÓüÉÒþ£(î8º ÇãŽ7톲ah‰¤ä ¸Úš+èp8Ä0 )#M1 áÏŒ‘Hך":¯O›\rE:±Ó¦p¨¿¤ÈPfœ²ètÚ¿°»×…àë^_}Ýwtq‹>f§?þ\z¿u!˜.9V«;µŽ™”$Vši#!+zÜF<ÖÜÛ”wMÉæêJAˬ û^œcîôRøñË+’ ©Ø7²¨é”[2Ñ.ؼdé- KvÒZ„§Å8˜øFÜáBDCÐ+ 0¥ ȳÙc„²’Jn ĬE%›¯bW4ºy,á»EÆ+ã½RAà!Í’.Ý÷šiÖóð>¡´ÏÚ-iñï*=/¨ŽxãŸ0×Ï´(~ú߇K›;ƒé©÷ÿÚ>À!†ÃÎ쇤pØ|µûЧsk%/ÚX!4²+Nš"ð~þ®)OÂk‘Ûjߕւ5ŸM-Æ:°bİò®)ˆ¾c-·¡Ìt¤<ÖŒÄ{3X¢eZ×  ºÀuþìz¡+…òƒÙ>¦™€¹–äR9œ4ÂáV<¨]fGeö2SÇFÝž˜·„$ô‰µàÓB ‹Šˆ ~í¿á £?G)Ò?B¿Zf³,„,ñVVJ8: ¡Ä{hþxÄÍ,J6aí´JÈ*™ùg·nß/ù ¤N¬ ÝÕ³…ÝœïqõxŠÆ¸úéßv øjU™?e£§8<¸÷mîÂÍ·âF¹¹3þ¡+FI;öÌ‚ÖB-sX&<|ÚNb{Ì;Ï5mÕ'ë¸WËVt0‡ä6±ß¬U-Ïì>¯9u¥ϫBécVˆ’H²DâÞÌîm³AÜá ?{ZfôçÔœác³÷-%Gyt\ "ñzwuÃZýUn¦*Ù³Ÿ©ÎÚÕ—¯Ü]ÞY i%jÊ›#…;#³_ÄÜ"1>óÝ¿î®çœ°ó—z÷³ñeI§umG¹Ò é$/‡Â™›ŠX¾Â’‘Eš¤˜ðUbó–pWNEç~k§!lqñYÿ½šYªD»qež­ûCKaÉÈ|1¨_ìþPiåð<<íãÿ0#F\pÌ?Ì3XöU .@ãNkbR-v|LY6}¬—jU»Š©C;ƒ mÛ7|N½%6F|‹ÍYqM#»PBÕ‚ ®FTâqÿδM¸Ýðå‹Ûg‹š ÈÌŸÊd9”ÌK !`JB#Ý_@‚Ñ«¤$‘ÆoüïV¨[‹¥êfK¯”÷6{íZëÉ<{ÖIŽàIí¸EcŸ³…2ç¶3At£3ŠP¤Ú}ÛÕˆ7üþwüQO냨(.ÞˆãíeÜxp3Ú|=H‚Sè´¡€b‹ ~ÌÎæQÑÌè‰)_ƒ‰…›e€©M`¢(»uâÖ®4ÓqÆZÍ^Éq*dckǶ@ìp¢3[)ü©Þ#XK"QIý@I©S³Â5½–œNétsôl{_º•;¸€à±¥q‚oK‹ é'{¬º0¬½ÔµôeÏA°É‹‹fÕÂwa—D´˜ÂÀŒšÈßýc÷|^wσƒùÏ•WÜö•xÅm_¤ÖÃöÜraR© ûÉ÷Ȉ3ó7Ùx1r‚©ö¨iGÌú̓átâ öÌà[j7õ÷Ä«pôQ•EDÉ}Àö ÚïaÕy+æ¡‚|Ûspñàf— Øºö?ÈÐikÀÐ÷œ©X BGè`ៅæB±ÈáŒHt §¶ÄÙj´Ú¤´A3-F£üVö¤‹U|_¼¿×ÏÃSSÏàm*V¸r$Ñ•è‘,÷b•µõ¯Y{©^éüäë"Ü#ÖU½Av-ʇW(æ2ùeç}çZ¨>úp†øÜ™¶\A ?vÏ7§ÇT¾ðþÂ’UI“]8~ø½_}î¾^þ®gžñÄ—ºÆÞö&ʦ›#Öú ¡aíðò]†r_hBZKÿ0õ×RŸfšš0N]™°‘D ’É5\^áš44~ÖbGÝ$kà¡åoûZ<ó^ؘ¾´ÈõK~u5f9ºöîr˜úбŽý©ÚŽIæ]¶îÂAl¬fuìo%­¤ÜQOöŽEÕušÈn©ì[7¦^) ×#]Wi¼¨Fjê¹â–©«÷šÖ¤¦êa%…éî®!Ä]Y’iRŽòÆþ[^qNÓûŽ˜ù² ”Ïn±Íì%äMàH[`Þ2aÆ!ñˆ5‰þèõ÷žñ?íÑ/ˆ–˜!J<“3“!À—<îEIþ¡wÕ™áxù;¿ðÌz™·ã®åCšÌÄ|EFª¶L€Ù×JìCÖÄ’)Ùo±È{»v’··íQ!8òF]sáÄBR¿ŒD=îл†I í‰ß6bNþž§Ü|Ý#1È!ä:gȃ n=µDzAS*ÄH€Dóù‚÷©»î/g: íT©=¾+εø¤ë.ì‚Úæœ6*EaÀ¼ccÒ®ˆ$­Ÿ{i »bçNú\’&¬Á¼QGæn¦®iû£ßAà–-Ö!Ÿ/b‡ok™W˜Œ/®öºçç éy³¯/º€æÌŠ]¿‘-4eþ¡ÄòÅ=ÎÆü¿à‘ßÝþ{Ô ð´G½ÀZ,ÚéÌy1ß©rçk`. ¾ü ß¿¾—½ã™nݘæœ8•‡ýa¢¹ /&cÀ§ý'MÈ ‹\ít¨`£™áÐ;×t8$NØ%Åf+ü¿ja´cõ6.‚«3«×ÿ—‡üÿKåe¿õÕÍ  èû6Ÿƒô¿"- ´å·2×E ½4ïCU„$.øHlÕe qp:f D[”šàè¥ ‚ÜNV[ì‹÷SûN­KÔZœ_ÉQ3ÉK™üš\RmˆŠ4ï9ò0I_€½ñ™&aŠãEuË5ÏÃ^ò™wÕËr[‡“‡K¾þŒ£Ý>'ö%ti6dew‘°«|þ#¿;V"¦zò3sØ$ç¤F8Xú\Ìk _þ‘?Qà·=k/¬Æ¸'—hÛøIµÊ‡Òì}Å‚à°GHÜÖÄis…êPöë•„•ïy|—òœp7m@¶«ï 2é.> Mluë¦öºÄS²ËÑæ2(6@msÕÝ>¶`Ú±Ím£¹AŒ=Zp‡áÄ}c7ÍejlФ8·¤|OÙ’i» ;>ŒØx¥RÕÊ„ƒí#Q{^W"euÒÐKa«Õ¿7 %ˆ×°äPiG®E•rvˆ#ˆZ5 7aF.p5>á³d.8`ôk* þ]|¹Dé¹ÍdÛîH¬19dÿÏ‘v•&š9JŸ¸ߣýþ#¿›˜{QE&ãq^˜¹\‡ ÌÊüû°S¹ðÉØg<ñ¥xÆG¾t'Ì/}û3úÁ,êÑ?^lÑü}|  [\·håè®m¢±ûf¢ÐYóCèiÖ ®”¤¹ÐEA7g%õe( hËÿï·ƒ=TËFOð’ßü*lÇ ä ßÐV¬Ï?Ï“Ð<õ"Dà«»X E,è¦(Ö®F£/wÒ†¬[õ§DóÑ¤Ó +†…Ƥqc++* q™"Ç›½T±™œB,NMYêïr”OÚ;v—i¬ËØH¦5™”(^K4BáAm#üÞL‘ò—?“u>©S–ßálÃçÙ  :¢åŠ:¹k“Àç=âùÙ„dØ',H¥nôæôÉË3HÔo®B–E_¶éûòw|Åì;94´˜tQ0œ½ö`Ÿ³•/t¡qúrÒH4y¬¬ Š·í ùÆù¼CÍèÉ÷ÃÆ^„ Bþºö#L:¶+ßÏçØü“U.ÞƒÃá†C×ü›UÐæztm0f‘uH¸k®Tõ[±&^‹i‡müÓ º¶'´`¿2s÷jùÐSP³f!`V¨Õ ø#€Dç»ÿé¼$ ¥4ÃûX„ÄZsÛÖñé¦U“ã(¿ì;%æ õÍ™Šü´AyØaÇt­ñÚÌ”õ¹€Ö0o“’ ¥ªX¤âÌß5`bf´9 vºA1€’Z%í•0i«t%Þâ¨èw{Ó7}ký"s‚ù a4KÌœ¦ ~ö0 zºDÄ­$åWë†Ó€XH ™ÿ9t0ÏkÌ©ƒ1—Í¢ˆ1rºˆQF¨þÉIý|5e«\<|X ùtvpÔ¶=€ƒ¾? ®ñ¶=ƒ%ðãpÞþ˜””þ‡µ³4˜ŽJ–â#‡|™%?ÍŠÑG üg]šF^¸zz×ÂQaÎ-fŔƚ#…qÞ8ø•¨~F‡õ¿_þI²ð)Š«[kÔ@²˜çøïÎMƒÏ{VUÜÇüY“FËéÄ¥vÍ¡Ueq¶0IIÂw€Õz6ÿÜ” Ì©hjB¨nEze“;Ë„)/Ô/šuxi4Ó·Sü`J`KÒâòÙR†»,H3K] áex£·²ËÌ-„ÌÔÇàú]hd\&ùD:^kaĈÿ½ç⡲»lõ´ùòuì0Ù`¬%FR…¯ŸLé%üÉLáB¢öãÛ$aò»Ó÷_•”¼ÒüF.ï£Ò€'”Ä I1x¢û‰;Õi~–YN¨ÕñÖξï*®ó>õ&GA]âÝÙý&U爪ø£>k×Äî,»øó¥}ØÛÀŠFAËüÈÅ|ƒt© ûA Jß\ˆÒo&)9FÀŒ–º3RVˆyN’DÀéÓR>_ ´P p©•Þ¥Udâš¹ù>‹#°›d>W—6‰ÁQư2!íÉ_/ ìW$­h^±°wñPÙWÚüY´Ï€þC0möÆœ«raÏÈB@Õ¿lÏH&}gí”^Já>•Fœ¥RköküaaÐmðSu¬3Æ`þl½fFÌ{f³‹9YÆ’–$?‹¾ ûóàH9±c4ê“ìË)I–®ð¹û,Ã[ ¯eêÙ«ËÚ+ä…—w±’!1yŽèz!ÀLyí]Ï™ L'°Ð&ûü¸É×&ŠÍQ›¼*m8ªÆ‘öRÇÆ>H’f"ÀKßñÌE|äw­Ò¢ÒºÑÜ<ë,œ„~5ÙAíÚ“$¼ÿöy°fÒX³¶˜³‚NfºlüÒ;…%¡#‹±•™Ò.„ v!Œ1WæÁv@rõ`*¬“ÂÓÂEƒºÀ´o1ÆXbä'ÌYÒæmƒ6iðÄu›~ï4 >¡[§$„½^@¦,?"sŽÿ'W°ÎŒûì&¼˜ýwÚd`ä܉ùœf&ë5þógÎ'@—ÑlÉË?ÿ]ÂEÿ;X—_˜¯n»ý=KZ#®Ø§ÜÙ¢eøü‚G½Àá‘!‡‘Å>iº¼ÑZ$a„¦f™O³‚Y»Ñˆ‹ö£_úög`wÉŒ×÷­:!džn©—LVÁ¤ ¬¦ôñ Zóó€“~A£šð½1é3^ÀÊ 3Þcþ½Í8þ¿Gy¨Ì•ÒîJgÔ‘³Gãv¡4܉¶;ì ^ÐCÊÓ´ž’v*ü¼ß}Ë;lÊI5½óíÎü}󹿓d„çÒ0¬S$é×V_0ѦC-ŸYˉ)2Ͷ÷ä –žz[ÓyëMŒìNTtpM%a·Ã§éoèËÁ\üòüŽ´$wéÒû~§²ûRxÆûÂ*NGÞÅj. ²ÿóñ];»~Í_WßùõÁLl<®!´¬¡f†Jò™»ÅÀÖ„Àœ±h/{Ç3µ~+_ù±?Xßì„E– ii¡G£Kh\¤1 1þ„Œlt"Vnò §}’†‹´[×y»$Á$‚vXÍ%!áÒ7!ûÏ~k“¯¤Y-ñ¡²¿Œ=bjÄ¿ÉÝ8¡ùf wzZÃáœh.g7x~Øw^ö Ú«Yݬ÷š­3[ÑM0öÞZ(Þœ2¯È_´à5§ugm³;Œ]ÄÉú%÷Y^g½/MO¤j•÷}©QsŰø³–$ÐrÑž?óÎ~PMŠYs‚Ø'3ý:`1ô²–Wàëðê;¾.¡z³Ct›Ÿô›Ov@±â‹@g}úŠÆø_¶‡ñ3ŽÃçéœjMù ZÄìßµèä·Í*ƒ{ ÅÒñâ̾·‰çBæ,mŽ÷ÎxGô»áÊÚI&«ÝZ‰-¦Ùù¨,–oþ·Ÿ†“ñ €-(\#à ˆÉÄt“¥Ù™¦ÑÐaE/© äeÚâû0bÍù>BÝ/³ï´l¦½#rU}²ªf)[„tË$ÖQÁOý´UC¹‚¢*[Ê4r%dt|¥+)D~@U4 «›B\Å­ŠìrÝûìXËØJ9ÄYK wŒ&É%~χÖY4H û\›çÿGïøÚôý‹>ü…„(Fd¨´y~$ö Âc˜íÓòü¬)ÏþØ &òéФ DøG’i é—+fM£¡R¦A†róã:ƒWGY&ÓÅê‹¿ÌuÖÂÊÊñ¾×q!ެö•(ƒàp¸Ðêç{³Û¡¥â†?§iÝ¡§î?Q²·ü¦Â½êd™,?ûÑg^@î)À|3ÍS5Ðó&q¸6¨SA¸œ¦8›Òå®UKK^ˆ7^õ…²áFΑ‚‚סg2üûáôèa“Ç$w•n Ø)-&‹ÐÞÖü¿°Þ·ÊÂìjhGg9ä^Ê05ÝMgÎ÷ù|>àµ<Û…/¯zÿ×Lž}ñc¿`ã~¬;›¨¦Ÿ®Iï°¯|åǾ"1V£ñM‰²ï0Ç UºÌŽŠÇ«äW…¤~ìwU¥T¶ÕÙ± ŽØˆã–Xs£éõ ’é™ÿ5€†§¹Ï÷C»g+o ØBŒtè’¨kž–¾CÙŸìZ¢1þFSm*ƒÆØåàŠ*§J0Úá F›ýMº“…ZkïFÐöyôDꬡ1Gq†ê‚úl<9[¸Š°¢½Vociѳœ"¶ *›óõF7¯Ñæ€s;ÑŽùü£qW„ +îÊ»}”µkŠoúE]ÐÅ8&¥Ê%`º5¾O/„)Òs‚(Iä¢é²¦Xj§NòþôM_Åkî<ÿ5?üÞ¿îwÏZžõ1¯˜˜h‰Í%³V’•d_l£‡Ý2.4YÛŸ•h½¾ÐE.¬Ñ‰¤tÁÖo5á¸(œ›éì‚DÈuײúæD¾T#Ô‡;Yi•uedÛtC 2‚¬ZÊUbLé}b1Œ#ÜZÌ×T'õ”æ]}}7FnÙ,ÙEŒ7ÆBÿª¦íFtLk:± Iœ±!p¾ ÞÂÖ§¹yEçãÍMǶ…"IÂPX§ÆVy,Gu‚×5Ñ&:a÷Ù"è°k¬ùVEÃvKÊ7ÍææÜgaPJÆÌÔ}ψp°ðÃäû¤£¦ý¥Dâ_&4ãn Ot.•™i>íQ/Dðê|ŒåYûŠ]–˜´1´[™$¹CøÒRÍ¿oxs9IÄ6'tiÃÎO:2£·O¬‚Øl°P’a´8¸[­“?kn½¦¤eŸê}åC%—a¶»;°¨`ôµ„`bÎY‡oÌgàw1 18×@ÛÌÙ4~˜ ›‚§s“"á"‚ˆ‹0ÓsžÇw3²œ?½ÿÜÒŽ`c³.4¢—’Û ÑEb…W¤:µ»âfBqÊ‹Sz7· ·ô ,] 0‰:ªÌ߯1uÓìÕ± r–Müz&¶kŒeâœ.…]E§¥ß¿ð1ßÓç¾ÞÞþµû†÷€”¯øè—ÇXÂ: ÌBÚ¡¾JÓLºfÑ8áH¡%™6UƒŸ b½Bî'Ì@Jt•DBµFú›99Ñ€¤»‚fàLa••EÇ-04We»AY—©èÄ @Fœs÷h—pDŽ)Í Œ˜5yVâ'{(¦É'5!Øž[„ÌäÌúï“]î¦ÄŒ—C2òjd§s–wÞqQ´{k¯ß[¨)8£áˆ÷XCŸäøá5¸¤† ½¢ô ÞØ‹¨øéøåÙs–µ¡¹†5>$wx$á‚ã;ìÓ Œ‚ d»…æÁø{þ½áêè¼ê}¬Ë§1ÿ,©'!œä:ñ1™¦–˜ÿ”†k‡ý—l–Ž»9¬ÅçºU@Ù¿”IàEÀpõ–æ2…- ¼­*«‹b;nš%àóÚ°8²6hì—o²bíáÆºž//´?â¡?`îOj_ºØÎ]Æn>$ $»ÂõsÞ·Ál„HŸÑAIWìv!=5†ê{ µTñ`ïGp…cÝØ¥Gó®wÇeQêüŽl›»Ä+éNd¾9yÅâœÉ&…Ó4ìüÜËáÒ3£ÌZnq!a¤(Ó MrIOóÇìx ±Çí‹û}n%øtpû³Ÿ;—“¬“ŠÈ$Ü“-•b<û˜=\’£ha¢ôaÓŸÝ3,>ŒÛÅäñ‘¢–„¨ ©Ýi/Œ—ÐÜu˜Ö“rÇ| ÿôÃ=mš­›w·âäàÍŸ{;®®Çf<Ũ[lu‹§¼þqdð<ç_þ÷ÿñŸáæëÞ]o¶ºEõ§ S±¬žù€Wû­ ›v#·9 ÿ{Žê!áÊ&ærψûÓmc5+ùU!ÆÙé*t [[ê~tÞ¨V ׊YÙ³'|,2á‰>>ÿ=Æo²&þ˜’§=Ë‚>ÌÑî¸à!õúHngÆ-†¬áÛ¼òp\ð­áá3Bâpòà ¼ŽQ oüø©@ø‚§q1¤¤]JB|Ø ¦¥™ˆÒÝ•,º°¹&‡‚ìõØBYvOt³o&4ü ÑFaèÞ”Õ‹ø©!UÒ‰ó®'•Ž¥ö–ð4½B2+møm*ÜC 1;äeó¤u2ýHmrGyóçÞŽC9ÄßzÝ#W¾quåÍŸ{;®?¸ØoÝluƒqq²½‚—ÿ ƒàËò?$°pQŒ9t€ 5)YqÍ Ÿ ¶åÒÚõm%ᘠ™Ò…ͱѿiÇs~|wkdÍ<T„ lA|Ñi£ÓðyûÏÚC^“9Lé£ë<­µq††BÇÂÄ~‡Ãm RÞìˆ*Np¥Ýí 0’Ã<Ý‹97ë% Ë„¨£GV›â‰U¢ Ÿgê,Ÿ˜•(ïÝ™±š\^[Zd£Bb¢èúª©{D*ÿÉÞä*Èì¹=ˆÜèÌðLHî/Ÿ8ÜLŸñyŒ‰Ÿœ(yJîÉœ–ë²% [Y{^8@ZpÔ­w×ǪÈBÐñDÙy„n$#ámÖü\Œ‹@1@tKÂK¦x,åMŸó>\<¼ƒ`;nðOÿöoa;n0æËý 'ã1¶ã§Û#o¯àÊæR:â¥óWq0âé?ùI,Kåæ ·â`h§F÷4¯4dìL]?…ù»†.Aûd!€×•Åß³«S`LX‰|»º0†pGe·S!Z=o8;f¥ÐºV²sœ²/Ua±õa›ºÉªµuÆ—Ð#¹E}٦Ǟ|N@Û5m¾ù\•"uv½ú:5¡”gÜëã;­Rĭ䣚Y°NÞ0º4yF$ £Ñ ¡–bÀ5YDCäÎ0tÖã(à˜kÁGÎ5¸EƒCì¼Q9ï5Ì#ÎF@œ•Mïxø'Õ“ 2®—ì—dÜ4ÄY²,‰§(«& ”XȾ8ýœ ‹0† ¥sMÑ€÷?Ü)ÍŒ Œ½‰)8-oþÜÛqÓ…‡á@q:žàhs£n±Oñ’Ïü%\ëRû»²¹„£Óûq¼¹„ÓñÇ›+ØlOú•€#FÝâxsåšÃ±¯ýRøÐ:ÜR†i®v:˜]“’êM¬> š˜ÚÐ(V,? Ö‰šßM4"™žmÝJ¼Ëÿ D´CÉݬM_¿>-±¾âüÍ—é‘î9ž‰Ø” ƒÇ°àÖ2aÇÏU˜ó'p•q[>»G£*Á2Qt•a ?'mt±3˜o*=ËÙ@w¸‚8H=¸)/üÒ\«O]«:ñQgM–?ò~‚ÇÛúü2N‰‘ç–'oÜ/±§/<ÃöUÐüäÎpã/>áç÷¥² ªŒr@ñíÑ€Ð)Ñ„½>$T´hÀ…S9‚ê³ø³…‹9®# øcf³€†ÃÅŒf—“íO}/.Þˆ#.oîÇÑéý8 ªØŒ§8Þ\ÆwüõŸÁµ*oþÜÛqÃáM©?cü§ã 6ã)`Ô-F±·u‹+›ûðÿû«?~ÍàXUäÀgJ4,)¶¶Üñ)KÑV–zZoHëÕI&Ã`äÑSJ°)L(«ÊY1ÐôF¦¥%ÎÓ“ ‰ê“Û¿žbËxQgäÉ%Dk¡2xZ>(w+ Q¸˜Ì„\à"ÀÊì|¶Ê„ßÚÚSžÆja/¹’&Ps-¬Ð8šøOBªJÕÛ‰Ììò„©?˜aäν3©éŠÃ=Â)^ÉoBÚ‰Ë:œÅcÌøç¾³F°A¦‘IÒÀEì\D¸v ¬1˜…äñòD°:ÂUœ ‘hHœ±óû¹oþ—¥PmVZ.:YýX /lÆS\9½'Û+8q´¹Œãío/c«Èá5ÆüŠ£ÓKÞŸ1þÆôÛ ê£np´¹„£Í厎®çL^*¥ÖT+-©Ð”³®ÉjÍ97ÉóUÖ‰P6´Ð¨‰žŒ|XÏ“¢&KÖpe†Œ¼Ûl¶¨Aµ1.«si}ù5¦tqU±Ì+ü±váVºe••ØÚv+Ù×HžÒ¹lÆu‰Åþ|îg&Ý”¥±€¥Kág¥§†ÆìR·k“ g4”Ûb€F˜L¹>ЉV1ñ6ú‡ÕGfåÚ¥ºäîfÛfí(? fHL1&GÑsyQ‹¬m1Ìsb›ÌÜD aá¸PJèeʰJŤ%AêóÃf5êÂ.›êb @'Ô>ÅñBÞÁ×?å6 r€Óí1N¶Wpº=ÆÑé%Ür7®œÞ‡Q·¾x®V˜¥áÌ<Âf<ÅvÜ`;n0ê¿uû/⟽íÅøí;~ÉÁÉö'Û#@ƒ ø–¿ü#ç†á¬…u •XoNchŸ—®æ =0 ÑýsŽç 3Ȇ)­óâá@²Z“Â(SU"”3^¡°) EÒ˜¢z0IËA4ÔñjµGç>³k4/'{Ðw)H@ÛŽ å#sáJ'ï{Çs`£øsû”~œ¨ë6{™¿~ÌÂßyGìYRœ»VÉþ¬Ø|•,É©%C=‡¢x°q€Š`F!ÉPD,cê|oñm ™JK›Ð8 /m³;"3&ʲÃ^…åœ?Á( ÞˆÊz&ܱ߸à‹?¹æÂÝÕ%§ÑïÖt¥Àß?nÑYœ p ØŒ'¸rz?î:º÷ß…+›û0êˆë.âæënŅẶPÆókàfiœnq:;óu Õ?ñ;/ÁOþç—h‰Ø>òáOþ¸/ÅG>üÏ â2\<¼ ÿç_û¿ð­?÷¿ž–µe@Ûj8VèØ™´¥Rèo—Æo1º`+6»t]65ÁãÖ-eÝÎ ð&|,¸JqÒÂ6ôùЙíÆ<-2lÅú 1ŸíRxçÆE±÷è•©*Ò›'xnóÂ¥}G®k®âßóx(ù0+Õ07ˆ¦ïìW_òœr±I•€Ï4Uf_UÓÏóJ‘i“ª«ù)ßzÒ†È/lÿù°³Õ6ñ¬4A ±QJñO‚" À.&º†6Ì i¿®ý'¸ïø.Ü~é6¼óî߯;î~+Þ{ßàÎËïŽÇwâþ“»q´¹Üöé¹4ðjil¶'Îüþí?†gÿÌÿàÌhþÿwÜýÛøç¿ÿ*´¨ÆT‡ 9ô!)¦)Ne2ˆ yåyL íu¥šGV0hC_i3ÔÚòõÃ{fAäþMQä”å2³l}±J{Q<Þ9EÒ4Ò¸êòf„ÁFY?5\°ÂnŸÔTƒ;ï0/°õ.±A.qop­mw×b†=Ët³ø,e˜{!ñc©m’–gæ”›4ä`ê˜ ÜóTBkîÙ5!ÜL÷‡9P¼íå0C¶OJÄ%lBggèìÉD`…K„Ù#_€B¾w©mMÛ³E÷†µÝà¬ÿóŒÄFà4ÚÁ´óì¢4µ Itú|YÛÙ7ZP÷ 6£§Ž1ÓŽŸb§Û#Ü{ü¼÷þ·ãûþýWã‡ÿã·ãG~ãc3CU›[hs©¹aDp pÖ"=ÔÓx™¿ÿ®+ïÇ›ßö"\ÙÜŸÇÝËÛïúMüË?xmwA຃‹ ØŒ'"WÑ<3fý…â÷í¸Î'Æoÿ&&N­:CªZ‡PS$Ì@ Ä"”?óKSXÁ¤·ƒ¿f4ÌÒ€P[¤3qý «´2œäH£X>}M°Ežôbh± !AfêT["xš5<8é—s¤DcZšñÅzˆ©„&1Â}€‰­2(qæãDe@Ãi´E¶6ì´_l¸”]uPûÖ’ºéz<ÆÆëŸì óE41W¹ÿ*T$4‰É~†ÌÔ¯Tå}ìuc7 ªÚ£¦¢®…tšGÌ—½Àmà {Ñ£ñ°á1K»×Ö›²Á¹qùô^Üut;n¿ô‡xá/=;ýþ#¿ññâ_þœŽÇØŽ§žÿ`8<3ó½rz.ŸÞ‹ãí•®ù·ÐΟø—àþ“»S݇]ÿ(|Ü#?Ù¿ÿÜÛ_‡Ÿýƒ×áp¸p²=¨ã¹ÑY‹ ±‡¤F ~û]¬…5{FBG»•iP2A¦ý"Ÿï¾ž­íòòܧ¥Pö¯#p„,{åîióÀfõ5Ö +]ç鲯ž¸†µ™6Kç´ï:ƼnSÊuRñ ëH„%®Ð¤xÅeŸAH8OüFÓG»o;f(…;9î‰pH‰CI6Üx“ÔYy¡‡š!ÜŸ±O°HâÈhi\wº) b†jÊuéˆ2#bG@ªe†ÖØÜCÕ³ÏQ¾§Ôã Œ(‚øXk>cb¨-À`!ôµP ×™Q|üƒ 888À ’ˆíUçm¸îðF—OïÅsÿÍÓÉð{~ñY8³=C\®;3óuÛ"}¶'=ÂGñc¿ù]ø×ï|“×¹õâcWNïÇ_|Ü_ǧôçûo?÷ö×ù‚„üDµŒ«øžY1ª$⺠Ný­`7Ãè¤<ŸWÈŽég©mñH¦uA;E4ÌÖ‹L:Ìx­.%{“kOƒvœéé~tw}‚÷ñrŸÙUEîµ9 …d»6^'ð ™| ²ó'å}Pöc¡ ¼æ%²'0ñæY8-;Ã@ý*XáâÎȘB3M”@Ê=j¬ª×L“éye&’™-‘y“eöˆ{bÝ™¨<†¶j+¥(ÛˆNŸaæ¦QHi(ætÒ:»‚ЊÿÕû/ºG̱àRâT—ˆÆúó;òaA¤cŸŸ8ÈÃóDа’Ð è@q0â`¸Ïþ‹/\p†~×ÒÉöx‚÷gÜò|å-oðï×Üà.± ×y˜æÚ¢h‰Õ¶ºÁf<ÅÉö81ÿÇÜôÜ}tàd<‚ꈿþ±_ÚøÝüؽ\ªŠ£Í¥3Áp–"¼oÑö*ÂõØÇ”R;Û'Û +ìܹÏÙ4„nñÙ¢¯BÝi€Ö, ƒY*.~iðì"Ožf¤Ä‹¸HJ˜7åû;NõgÀÝ¥9·/‘oæŠ÷“U¤š,(SBÇ»+fÌ/í®SdÉ-Í‘YpH'ÕÚãñ›’ËÞšÉø©Ì‡öÊ#$RºÚû¼¡—Õ[—„Y;Ôv ù÷Y/ŒÊ퇄+Â!Ô^"Ž˜ˆ¼q&€ ®™·ö²‡mÕÄ8Œh'*SUÏ̼jðu&ԇТ‚™òæ˜[„{×VœÈx:ªßi3‹o;öh¯†7Œí?÷çJB`\®Ç-×ÝŠGÝøX‡çt<Á=GwâÞã;'Xù}_€c ¿ü·ýüßÁF7ÐOïN…Æš2êˆãÍmîÇñö²?ÿàå÷úç[/~>æÁ£o|¼?Û~¹·ÑBCO·ÇøªO}á¹àX]D0ŽÛæ2Æ.Ú®b£Û±ÿÇ›š1çp-œèÀ?„e\–oüæ®^r#Å/LÄ•4Wº¯bf*’[Ì/ežÂÒ•YmÎè³Àìïx©«úFB¯Í@üÎ÷wôýÎÂ瑩2fÊò‰þ›á‘Œ®k¼ÎÍjPg ƒÇ—®e{hRæì&,|/¤Îm…äg"ß µLÛ,htq²/¤»ûȶf“\¤&ƒ­ôO$ªîcMšÉ*‘Üç0*¤ÁëÜsJÆ—ùLﳈÍiUIÉ©›ˆiª´Ì t s=öp†.ÄäoÂM‡·Ž·G8Þ^ƽÇwâ;þÍß›%ÃWÞÿ%éû-×ÝŠ.ÜŒë»ëè,E»Ïÿt{ŒãíeœŽ'é÷m.pùô^üÖ¿ˆAp…´ü[®{„ŸNÞŒ'¸þðFÜrý#ÎǾ2Ñt¶ï!×5Ýít²]@%Õˆ6jC k6I0%-)E‹91Ç"f7”n)¤%E$/˜toŒFç¤LÄ{|ŸEû­ ¥Èˆ+>¦%xFÊ›×Ö ½¬Œ̼(YŽëz‚žf™t'Þ¯W]J,ÓIÿä|¡ vÅ™|,ß UB 놪íŒ'B´zC br9ò|ÉdòŠ<Ùk„Ÿd›Äúo„Q¯nÖ.cl¢”',èf3€-@Ôzýc"óßkÐó¾ÈÏŽn›-iŠMsŽîHb,XU;x½ ‚„ˆï0ààà†aÀ…ƒvôähs ÷ß5Ù€ÝUqÇã†Ã›{Ógó¿o»Ö~´¹Õ»ÈÉöÿ¦»‡Æ1ÃîT;G0㺃‹¸áÂ-=ÛhW_´‡œŽØêêß#‰˜ÏÁ„™-(`>^ܤ¹;ýIðÁeã¤(‚Áã¤Ã?2=ÅËA‰y §ôÈ]H希l­NF/šøg& ÷Š”ñMw!4Q`M×@{…Š* ’õKOliú˜˜‘KÌ5 ìi'Œ„¥&»–Ho–zEÆÐtí_%- TÎn’†YˆÐÕn/¦Ð³B•Çéø…è“Fb‰&-Ñß':ã aU‰ ^KDãCžŠŽx¨?²k&„U+G  _9A-Ï wÕg¡ON’’µµØ»Tbøù²›Pá˜ùKêßéI®cŸ `±Ùž`ÓêÝG·ãî£ÛSøå¾Òδ“¹gLÌöôŸü$Ü{|'N¶Gä£].wÝWü‡oI®¦ëoÀV7¸0\ë.Pþýã›2ì­n°Å)NõÔ™0€1±KE?¯@sÕ4„[R‚1…nWàôH:¼ ‹¤¨L”±iÀ‚CÂ$n4ˆ¢xYüÂpo‰XPî«®Ã9ÅÙýËmP±^ý?vó*3xœë?¾Î¦´ <™n 8· ÍpçÁ.P¤¾žŸ¼/-¦œM~þX AEäû`IªóŠÁÙdU‰Îú‰–~ ÁBÈ%æïÄë"¡Ã.E¬pð€UEĺO‰fÁwêÝÑ^|XÝA¸‚DK`È ‘Hªœ‰*eÊ‚0RoBìW7ÄR’é[Yo?ñÝQ„@ ËSlõ¹W†{€IDAT=Áý›{w]y?.ŸÞ‡¤ í-ênœþû¯:Ã{†Ã¬Ï}Ô­Ÿ°³þï}ð×<1Ü£nx,}ãã¡Ú˜°Bq²¹’\D×®-~ý¿ü+- ©Ž8ÀÍ*Ùê´0[ßÚäOù¹²¡Î,dÒ„¼ïæ¹ç$fÌ KœCbδ>EÈÚ¤™ ÍíÉ $½’וëÍ’ ˆ>g±ÊLÛµ×xÞPçO‰Á‘À£ñê¤Ã ‹¥×f~e|ŽÇî.ìÎGÓ^‡í3ÖH/¡¥4çêË?Y0y‡~úÐÃà,•òÖ´æw™·:O£€Dd70QaáˆY 1‰sÑCJzL{¡a&•åóƒY8X6QáF„»`Ø7ÇB¬¿Ï»:%Š "”q™ÂÙœIó1ú`ÎŽúê»™¢†˜…y¿’rà U ¶¸ÿøƒÐÂ)uÄ¡\ÀßÿK/š²ÕmÏÓ>­û›ÿŸ¿Q£2Ðö’f9kÒ47(cE”QbÞBÄäø Œ8¥!;R'1$7õCR_B·ÊÄÔ¹(ÚA’æiLñKÝ"ÎcÓ>MµSisdn€ºŸÐ{3V(ë‰Ä»Ûä8n]@uÄѶiÌÏÿ…§c3žàÆ í?lÕ\<ý'? ¼ò>ü£õÔu“7Snºîaý0Ù|ÄÃ>~¶ŽBqÃá͉¹Ô­Oj¿èÝว¦¸ÙAÛÁ­×?7\x†fu¨Œ0 Cw…Žä\ ˜ßÈ"‚…AòÞößÚÜv…Ƨ6"Öxª½LQd¼µ5]„mRóc) µhäÖ./¨%wlE«¯¦À»·§J°}NLqZÈÂÉÇwV¾´´Ã Z ÷Høw¢.oì'…~‰Öíf cKàdr\¦ì»…¡ WÓóh<±›Ðô™oØÞ±ašpâ!×J +± L¢fë9´aóùûF”´ømK¦Åç§3œ’Kªc®ú’I‹ðpÅôifÇ^ä Í ßq“ §x0ÑÊ1Z—l1tûŠ\]I3âÖY]ñIDh%¶©LZšÍ³ê¶¹.Æmj÷† 7ã`{„µåÛ~îoûçïøë?ƒ{ä'áÂpýÎs|·ï×üß?ð7£ŽxÂÃÿ4. q:Nûç­¹GÞð§ðqüDl‰áû¹Ú$>OÙµ ¿øh 2`Ó™½@úõ[è8bTm¤ß÷ ºÍÊ&®tÑïšdÚa³>oÎ;l©ôB¹CYG}£¤´˜;Ù’Hö¿¼@;:†ý´¼gÁtuì‡s¸ÈÂC!Tï5œ¹Ž$÷–5œ(ÿHç/b7’‚-$7wy)á(»Œìw÷eô?údÐÈ”“àÍQ,óÍ8+%2w©ãrlCL‚a†iDÅhÌš€=°Öè4°›pA|Ù4 Ê,’ØÁ¼ØcWTbLÌx%ÁW‹Îü1M=ÌfÔ)G8i IÏvÁMæ!k0¦q˜Íò“F88è9«í’´üjUÑËD›Ÿ‰Ö,i4Œcª)ývš±_\Xµ- ¯ýï¿g-Ox؃‹‡79¬:ó¿QGœnðCÿë[ñê¿û{xÃS߃[/>oÄ#o|,žò _‡Çßòñ8œ÷òæ>¿þ1ø÷¥¸éÂÃ0bÄV7móU[ÝâížîéøgpÜÇtã…‡ád¼Bi±ﻹ²†–bîL¤YpZ1±O%ìsºÌ´“6ÙÁoRvß<ç.4: ‡+ˆ6x™¶|•íÏIc†1o@ ­e%m¾pD@÷¨è2ÖQX@qÎ(Ç&|ц»G(Úoâ¶æèSliŸ€y!¤¬3ûÄ~¤ ž–¸L2BÓdw 1å 蟈InÚEÎDÙ·ÆÄ. מ™CÓ¸˜Ü„†PÈ«^ÏÍç4¹~KØ,Õ$°ÒxS´ ÞJ¤¬¡«„õ䨙õ{Î ³þÄ×D\lÎwÊeEqÅL5{Ô‚Ìžª<­8,éVƒuÔ²ãÍ ‡xÄ Žü×~kË«ÿîïáæëѳ{ád<Âé6ÿw²½‚K§÷àr¿Wh›¦×Þ„/Ü‚9À_ýèÏÆ·þÕ×àÙŸúB<æ¦'¤>ŠGÝøX|äÃÿ4¶ýn€í¸í÷o¡¸zÿÿ¾2ê¶ °ð†ßÁ®EŒ¿€] £iv¼¦èàžéóù)‘HA Ÿ»1S¶¼c¹fmt.N#é(¾Ä³jë4E)ñ$­­ýpI~cV„(… ¯<ƒfÞ+3R]ö\Ï>jGc¾˜_Öó`\ç…é¸î‚Ô§[3îæJ ÕþPíÚiœf¬²ÙlH¼¼ŠàÐBóPQ¥í¢Qæ’úžhŸaš¥(O~L–L;˜™ÄIoÓ&B—(žU¯«[+¤(´#yÐ ¬®M ,©‘3GO°_‹/¾²9=……vµx¼, ú8%gU€ïø·_„“í. ×áá×?j¢…/•7îíxÄ ‘&i§rOÇœlq²=ÆñöWNïÇQ¿Øý`8DÚ `›ËPU`‰Ñþ›G} ¾æ/½O}Ò7à£ñçqÃáÍxÌOyì§»¯Ý®†lgN®ÚýCØgªJåt<é|W~71ÐödΔ‰ÏÓúó½6¿œÛÖÍà.R_]ªBŸ£ÏxOЄ‰ üúÓØ™¼FnX™¥ÜÓ¶b“!â›;Ü8Ùú’eŽuDÈrVZÊÉ]¿¼ ’ð4žnè‚ãP5 ƒäŽcÅL«€  Úsƒ+í1Ú¹r4)0'ó`~¯!ÓÃr®‰ŠÊ’$$­3ô>Mµ #Ì“ë.Ä+nûJ\ËòUÿÊYþ_5“¼¹h¿l£ÈÆ9•@²p³æb](øÐ³ê (WÁ¨Ù,,&RÖ·ægy¯-ˆ(LæÂ¨&7´ ù)ÃßéFcÿ߈­‡UZ¹åúGø¦ìöän|Ë_þ‘Å“Áoúœ÷¥\üÛñ 67׌;‡±Ñ ¶½¯Ãá: 2´, °«[Ý9Àˆn¹þøïÿø þWp:·ˆ±O<{h;܃½ò×þ·«¦»¹b—.‰î?¹"ÀfÜöDv#ôÐOµM`ºÖPÐ/têÏÌHáå¥Nbý§n™Ùe1 µÎî„ÂÁ×ÒŒO|àš˜+‘õŒ”•öîÆRß­õþÎþú6¶ÅÅÜת¨@784¿ft?†$ݘvÐÑxBìÄ<÷9£‹ÉÅ…÷ÙaÒØµpc=oÐþïn$$¥ù9ô—\buªáŠÂÌ&ˆÁ]C^’NñÞ).6¥¼ܲ† ¾òÝgù>kyñï}ÙŽ_Ù5Âã — g'å+ݘѫj3Ù©‚c,ÉÃX±k„{¼C®ì¬.»C5 ²°„̯9©ß³ÿ2o4ái‹=QÕv³•‡_ÿhœlzTͲVýƧ¾7^¸ÁI¿Íëd÷S–èw^~wóÇb£[ †¾ Ün(k® OzØÇÀxš÷d0&؉a„"ÙZ$&f”¢ŠÈj 7+é Æ×He¦äi¯‰cx”‰‹…‰ÉQEÌÝrš¤šïµX:#hŒd8¼#a†$¤ÒÚt؉9;´EÏMÖb-†Ð&^ ³C(6WÌ[™ˆ´„ž>¢lªè. ±7:&†„t—Ü“«i·6^5)„-Ý0DTö‡ß÷Õ«ÏEyáÛ¾ðµŸðª¬ñÀ˜ùÚˆùs»¶ª°ä• þž#“[â½ié·ûIw”"üù´á-r! ÁîýIjÖ¯Êk³Z\E°k×â†Cdö*ÅA ª‹Ì¿^çh¥k0ľ8†Œ* ÇÝÌß|û›ñ¤ý§§PUŒºq«%ê*>´Eq:á¶{ä2óo1Ußç¤m,~k®Z«‰ûûDwÆ¥ÁÀÊ}¶öEIs™cйù‘ô€dê 7¿vaƒ¤à¸ã'Ý-lÚ/ùÓí΄Y@‹«›¨âð¬ì`Ò¼Þ X±Útæ_~G¿®$¶ LBx±Ð û9à $eË Ç|k†;êÄk‡Þ›êԸ߮C€ñÛåTš Ê6Bóž¸x[,|QñÃïûšó­*ÏxâKa¡o,…–Œ ïÿ/_~î¾¾÷·› øº'ý‚ÀŽ¥Ÿêvê1¹hà4N‹´›¸Cà”-0߆’¬C* ¶%÷ÉÑRœc‰…VÞŠ¿V¬R sÌs{yPÊT·€žý©ß‹—üò×zÿà_þ/;ñÍÇouÛâñUÝMÓu³54·Î\”N ¡Ü¸Ëg;nü¢˜žöÊÍ¢°ÓÊ g‚þþ_zÞ~×[ñoßõ¸ëèý禡@íäxœ‰tŽ}û¥Ûš¦?67׈=t ÒC`ˆ1JÜ_à-'OEWsýÂ!­Ö•ãÒhC´º ”I!,Ȫ¯×Áèц%w1} Ký÷FÍm2› ÙúÊ-ûg¶g,‹C`À c§õ8-¬,s.ÒN "ÅhH}2سaÓ?ü¾¿ÆåÒÊ—?áû)¼“µìðwMU€l|=ûã~pÇþ¢ßýÒ3Áñ=¿Õ6+¿þÏýhéŠ# XOˆEæšÇǹ÷Å4þØâp12a±Ñ(í°›/®^gz$;}™Sš’_8a’ߨ{Žá£n0Ž#®;°Djë _ßÜ?í0™m~šÿ0_«ús{6ê¦ïŒÎðíBøm£nñ[]‹·o¿©ßü{wþ:î9¾ãL´²¾L&ðíÿïgãþå×@€Îüáš²²°gÖÕ˜˜Kð w˜Ë§zâ?vÖ@̲cÚÎɃ~X£í!Å„öxCsIöñ°51v÷ƒÃr%Lå©§æAò¯G³ñ=HðC·‚Ç™ƒUd^ß aÊJ>Tè€[è÷¾²…¬Î¬£‡Î Ìåý•ñòë!'Ó‡Íl$ƒÆvšÒŠŸ.˜Î•l \I߬¼êýë™ÿ—}ÄKœ8 ’Û³žØLõ_LbûX¨¥[þê?ýOñ"òù¯-/xëâëÿÜ«F a ³ˆØB¢É˜†±f<Ö¨¨<ò8Éëfy©ëabÉúg=ãÍ#ŠØ=”íw×ÌüQaFaŒ@O¢váàâT¢ì(¬ý;³×ÎØ›{',%¡ ØŒ'8íÆOo ™|›²m;èe ·ÑFkãíw¿¿òîŽÛ/½ëÌ4r¶RTf(.ÜÕÑÃY¡jÁ>3Ú0ˆ‹Ñé÷QÃ3¸ÜMŸ[„†oÌÑ‚”?»òÑ ŸZå}6%‚xêÇ~cV˜ ¦!G´LL–CßÝ,óX8¡lãX§8Ï shø~íyÕK_o´yí²N»F_,”ˆu1ðîq@dʱ;Nü.YéK¡\@ ? í 8°ÉÔA¸*Ð Ç40@„‡ÒþmÌd]õ/{ü‹¢¥§R¬ z°Ÿ«œ(>v{Ey×Ê×ü™Wá…¿óE{a%÷: +f° Ðô»¯I[@lðøX¥0MÏ%¨Å”È›¾ö†ï i[Œûì>ÈÚšò˜ÌîeƇ .o×eÐ|ÃS߃ÃáBÒþG 7ˆ1ñZZ¸æI.ºâ9{òÆ®íd­Ô1 ‰í¸Áéö?ôëß:égƒ3_M9W²öLäQTº ×á‡m“Á„Lku3¯F!†ês×ÊMqW›ðU°«Ñ“Ü#Ö&ÑJëß¼ÌN«3í+¬cuM1õ´)Lìœ4ëi™b FtMû ,Àj  ï¶O™CˆiíŒo×pæÍ„^òJ!ôwœ}Nòi?ÄöÐ7yð#"#]œ F¹®K«ND˜¦ó0döÿ¥I&ëT ”Ó#_íô1Iƃ§[ FS4Ïœàkÿì« ßÿ\ùîß|¾áÏ¿š4g„T`*sx}Pô˜Ýf¬ñgkÊ…¢—Èë›,ÉÇ!.š©õ­'éÒ6¹ вÁ)W[údb€`ÀéxWN÷ €7>õ½¸ñº[ Úî fí¿uº #6ã)¶zŠãÍ•æÛïû6ß,–´þjÖà ^õÿQ‚m\p#®lîÛ;Ž¥¦Á3Þî€ ÃElõ$îNt1&¨­ùÎÔi‚Ìß.}¡8Óô#¶(Œ‰G¼'·#'1øP¦Å-H×X“UAš=ÒOñ1Á$¾Í}£âë6…êÏ™6.HIGâ}êÓgd\UŽ0Ê9[’jmÚâ£çıc#:\T¾ÚnvËLïùØ|ŒÄç¨òaÒôØï5ôƒMJÈ7íРDhr+ÂÓg™Ÿ˜^¾äq/&’"­Ÿ5«1á­är1åÁë™1kú)Æ'tZ¬¯û„$|ÿ3ôå“è§ \3á¨Ô.…zx柤‡‹ gìYXLŒŽIóÙ( ôþÙíš²f¢ÈòŒ·ûJš5ê:æWNïÃ¥“{p´¹4M»L*LKÑî¸|r/Ž·Wp¼=êÌ_Á7æÞ¹mýDïIìt­ÿhs W6÷-2ÿºÌ%´³_Ž7—1Ž#ü.;"dµ±ïSÐ……)Bj„–koøB¨¿ëºMpˆè’t%š™ýÎnRs†eÚÿÇÞ[³6–96CZù¢¦i¿›¥“6¤íCÞcàëwØSs£Õu¥ñž+¥Ž“À/éå¥?R´ÖÖ²r'ÁÔÊûÂå0÷Pé¨1)Àêî>.ñ‚!ÅiÖ=ŘYùÓaÒ‹.1Ó2칸„军$§ ˆŒêª©%¹BØ,ð YÖÎ󴲼Ãø•ÔV(Â#nTJ#ŒC_ԞРQ¶Ó4ï ´œ3Œ¢.7›kß IÂˈænÙKÞÓØ/n稞ÈðiŒ}3žàÊéý8Þ^ñ4|ò˜5þ­na—Ã+´YfìÑúÿ( »Š~àW¾_ý©ßvµi§iƒÏé8cÔ~=Þ}Ø0LÌϵuA"eDñÐ2LEe…E.«çú3yÓ“ÿ'úÖŒ×ßµFMúéØ8øæí¦ Uê¿kßáfp›¢[M|r˜ß›ùœ\V,´yœhc=Ö­V6wäÊJÓ%íôxø‡ !4&Ù7µîÐU;[ZÑ:kÞ)Vœfá÷f†è3kÎì¨ódŒôÉɲAÔ>ñŽõÐvdÉÿãÓ›uð¥1LÂ^‹KÆ'¦ìP›Y q} øfLZàžâäu­í§™CJÓD/‡É°î¾M>"hÛ‡áþ1ÍÛ4žqäÈY sx·_ôV[ºˆØä=[êÓäÝÇìgü=³çi?V}ý×¢<ò†?…^yß5kïÝ÷ý..o/áâpÑ/_¿ûcÌ2R”WãÌÆÙs G¦Q ž²Áç¾çÿj(iJ¯»>”0ÔÖdÄÚÈ…1wå¢iÄv^# š+¡DвJ˜»«&j»´¿QÏãr—¡ýóþHŸGÍ£¤ð©+ºU¸!¸²;+üÚâºÚÛ: (‚mš<¯gqé‰XŒqr‹†Üóáן+?ôž¯Æ—>îÅÈÜAKÛˆA ‚€ÉlpÍU¦ÖDjÉ÷1lâ‹ów <¼à­_8;v¥ûó$7ÅúvÆGXÁ(ÙFF8µ•Çæˆi%©¾-þ˜© r:7ÀV‚‘hî¸ÓÕ˜V†êètÓR”Øæ=å O}7† 8Þ\•ñþƤ·Ç8Þ^!?ý)Ž6—ӥ히òøØ¦î‡’ñ?ò†?5ûìjA„ÿ)~ì7¿_ô‰ß!‘Òn¶}C³Ž±iî –«!‘m³~ íØ}ê|Ø(X¸¯OV5%ÞÍ ;©b4.$–R_èUbÁ¤§ðR÷¹Ï+tLÛšÚÕIEóÑó Þt> °ê`ËÉúƒò¡.Ø£BQÐÍ™äêóéá¨7:¬1gæ€ vØŒk Á$ŸZLpšñúû ™`ªí.•ê9€¾ìñ/!"³™ëìʬ º9 æÌìÚÉ2„™"k º\K›¿€Øä4ÞôÅêûvž~廟  ø Mz³g!Íú0røiâÈDð³Ê’|Ïoïaüžó‰¯ ÍÞ6~‘™®‹0_]]6Û}bÑofc!0¦'j…­hÏ™ž0%]e8ÉêŒ/h]’ÿ±EŠ”œiâêŒ{_±«_ð?×Ó9(1ÿæZj.Ÿ“Øà“Ó"~àë´ß¢Õö ¶ãÿøG} ~ïÎ_‹9ƈûNî—ߋÍx¸pð(`ÅØÏR^ûŸž‹§ýùoňÝ@™'9JǘŒE³Ëãü>êwèÔ*±:q ‹€Ï dFS”k‚/yŠÉ_ÍŠ§1ÃdðRTRØ­Ù8ðyXD·)cšûDnCS}MÂ*™Qd¿ŒjàvùY"  IôQjî%?ð|JÜn‰4ªÒÿú7!¢ - o€’Añ‹sé-\Ê6+ºÖ”ì9ÿŸþ‘?0[_&:¿gFéy“WÉÝãã*ÍÍ÷®`þ<Á©yƨ’kp‹† Ò‚Œyx±ÑMnû™±E"^’føcbÊô«PZd¥øéLÙµÖØ¿ãUcO«°ÕÍ<¢KyßýïÀ néÑ9íÎÞQG¿üE¤eÆäT @X-:¨e5“úG~ãÿX7—g(OÿoŸ‹oúçÃǤP¼ã®ßÆ…ƒÈzzº=Æ…ƒ–ûj¬Þ þ­Û£l;¹´µÑÂp]I(‡¥$´\›lW!(}DúR7¯axÛ;Ï„ÆL¼Ä7„G0…Ïx5€òˆéT‹rÁš‡ÝPî‰Ý–˜ÑK£w>%ZÜc¹…6†ßÎ!Þ{oBíÓÄ Ý%Æ0§RÖZ¸™¤0sŸ‚÷–&:è<³¿~˜1о‰:†¤Ñ.ù]µ„PaþÍ)"¬ŠÂɱòÅ}~ø½ë²¾â]ÏJߟùėΦTf¼%&J “QøàÛ÷þί‚§–çü…ׄFVRÈN2FŸ¾NÁ/£fÙ$±|¼‹ ¨ÒWxœy/„- Ó>ÜR¨VBŸëq2$‰êš hßµûã·àœýírø}åyÿ®åeúê¿ô}=ë¥âhsÇÛË8 í2ùá§›m.÷q]u!p­þóžü–dTºå6zâõNÇ£´O¼õI‰m\½+Hñÿ¾óø´'>%tAOá³¥ÆÃp˳Yµg²êÃMÑÍZ+7Þ€àD¡©kîÓ™Ú ›—–÷ÇÚ2ËØ¥Á‘NµöÀׄV3Ê&œ½‰Ö{øˆ^qôSõ_ ÏD¬e_ÌåPãš««Ù§l¢.dí\–lÕðKÂàô¯‡2 ïáÕ#ÛBù~\[diî¦&:®ÄÞ›˜5_òØADÜ÷¿¶¼ì_1yöóò`è–Ú  KÔ­"xñ9rþÔòœ¿ðšh1é™—š}bšÍ?[a^”Þ¹ie'šÓá5_øñ;Œ<’úa!Ö¶’™A˜MÓDh"ŽÓ° FJ¥,Ö~3žàe¿ò&¸|ýSnÃSßð„Éóýû©«ðï}â·¸ÙsÿÿÓ_ÿ¶«žË]åyŸñ·4MøYù¦·<ÿÃþ&~ñ¶ŸNïdpðŽ»ëª?+0¿ô®ŸÆ§=ñ)0 ÞfÖ–@s+dVÆqïæZÈθÅÔºÈfkÒD-oM(`!˜â{0sÓbY£õ˜&¢-Ò6နMi¤µ·`aŠS«·‘|f]kjy‚ÿ]Å7§ù³ÆØs$EŸã[3n ·ư= [ºš™Põô0 Òo‡¦¨¸p3-€Þ)̘wJŠEXé7\³f3üÒÇ¿PÁ½çÙ8oyé<ãÜïžµ|ßuFª©zSŒÁ«Ææ¯™­¼HÄÎx,5Â*猋In#…Žò|tÙ/È„-$‰…É/‡õÌž³±ø>€4]¬;ÚÁ+=Á¦ßÔ5W®Çÿ߯ÿ³OØ‹ÿùü!›ëï|ò[ÒOòváP—£Íý¸ïä.<ñÖ']“M`[þ÷?÷ö×áÓ>êsmî¯P0´ëÝJ,©Ûù'ú‚¯ñptˆÏ}€´Àí{2(‰$1›šb9øMæíÉOž¸W˜IÃEô“¤XäÓ¤ÃÖ ØçÔÄÀceëd Ê­ý‘„£×Ó ˆBQ‰vîBcÁÆðX\×#eÌ×Z>i܃'h+¥Ú›´1Ep˜ùŸÒ5x úÞc0Gûì§ûŠf.M|ÙG¼äÌ âCU¾þÏý¨3ÿY3Ó|^†€yPÃÐ-Uñ\—VÉÆël`PÒHÕô+Äló+î ¢l Òœ°o£7 b ÁˆÝg½©öEK&ó¨@?„¥ªÇ§Û+xů|ËmßùoÁ€·_yWc¨‚ò¼Ïx ž÷ä·$Û±:-øËßûäoŸ´ñÈ‹îŸÿðÞßï¿÷g¯)Œ ů¼û-øÕ÷ü‹¤™Î¬ó3ÐYXÿ[ìPáR„{¬ùDÉ¢¤ÏîBŽ6Ã@ήP׋ o@‚–-å|_¶Ì¬PÞS3†š4êÐer} .$¬¬Ê—U4ëÃεŒ##K…ªì%©žñ™|3Ö¸’ðDîyª軄œóGYkJylK¸ûÅOö3*‚ˆÅ·„ÛÁLOøò'¼„ˆA&{ÊòõOúQZ%ÁŠý_C®« ”áÚV]^…” Úg-Iötx+&3]8cV…/P«'Ôl·>`¹Qˆ á×ìïŽFn’÷ÿlÍ"M0BeÄ8ZΞv‰ËËg˜?Üxxsë±ñ;?ã-øæþä?²9ÿÎ'g!ıùà_ÿÁ›ðÓ¿û \8¸§Û8—pÏñÑîiqåôêr-•»îÀ;îz+þ»ÇýÏE2uØAVÚü·9áñ‘vÚßg¥Cû(Ôüí6¬AÚàeîè÷ýö=0eo¸S‚œAX(RO²jŒ)»NòüxÛäÆö\Bdñ:0œyt ÆÏÖ 1­°X¼Ý°`ÜóáëN $/™î¿ó!8Ç1oÖ›2é§ôŒgÌY@Ò4zª‡¼â¬&I`0@dì÷g–푌 b.9$4@ŽÞÑC\:qÛ‰ìéù)l¼ìÏ<ûjÙQ¾æÏ¾ à{ûµÓ‡¦˜/wmigß‘Ìç"L0'ú4¦Kí P¯ÅKñÿÔ‚¤¦Í¿ÚÛb…™ƒÅîÓ¼+Å÷sqe¢äb§fÛ4…ÂnêÚô“»KåÊæ~üîÝ¿êí šþMb!`îœÄ²,O8±ºŸú„'ã§÷xâ­Ÿ€ÿrç¯{½­žâ17>w\¾í…ûmø÷øùwü8>í£ž [C~w0ÈÂÓ¾?ãéºcÍšèöñ)#I)éWœX;å˜þã‚ÁÚ˜‹Äk“`KI9RÍ<ÉöÀ\m7ÞÔ\‹̲F{ž}[jI,v¹ÃùyìÔn)r"-×4”€¹šÉâÆgëÃa.s­P߯Jz Zª)Á^1òJͯäO€J³6 nLɵF; PÛ`Ú&éOœ$E-ªÛ»…Vï+>úeÑŸ›íåÈ{Ã&c¤>`KŒµŸ¹bûÉŒ[ö¿ÏxíÓ&pwÿ‡‰)KÁÔƒèZ,9…$柢аNFîj DõÐÚBMTT¹¿DÑ]ô6ì“…}Zú…îþÁˆq´Bà;Ÿü–Phcz§šT1ÊT€ë/Üøkó¹IíR÷ºm.á×Þó³øøG~ 9ÀãnùX¿~ 5ÀÌŸµHö/gç22(†spH‡“":-Ÿ€Zÿ)ò‘ 2kaâz¨ŠÃT—S¶ òô1™“ó‹gˆ;vâsbŠùL´[+¾ºŒÉGO{;ÂG»8$ôLLà[ø1"DVr[ê׸kP»3Om;ú½9gïRä’¶Õ֬иÌüx1í¦™8&5?‡A$^¥˜0ÈtÛ²!VÝ–Øö÷'äç»ÔBxø' #|v¼õÍŒšÜ ļëá°9ØXx)·É0!o'¤#Þ;´,,ì“2ЮvÜ U'RÓûßþl7ð4Ëã)6:¿ñ[%dšZ©î˜k]ž÷oÁó>ã-AoÙ¤ ¾×‡<£¨ÚÚyù¯|ó¤ýWaÌšrç•÷àß¼óM8Ú\ ý·0EwX4™Xtš&“[þk 1ê¼gȪÖl{ ‰?tJ#ó·ëi¯à–Jö›+a¡/0³`ìÆ¢ÊÐøÒØèc8‚×# ΣŠs%0êp¶¼ºZGÞ“Ó§ÆJdÿÅS_÷¹±1:0Iâ›ûtŸ„' Â B \^f¶B•3Œ=ë$}m¡4ŽÆ1’5=}Â/Ë’€-ûBbAàSnæw{N‚Ñ¡bfÍëA(AJ02!OÑ—¸»$TߨU±ÙÒÔ߈¦-ªæFÙclLE£^ûŸåëßbD Ó|Ù/OÃ>SÑ…¯½ßç=@BàyO~ i–EÃct¹ ›³¹?Dåw>ð+øþàGñûüOð$pbi,g €žNÚ\D ú £aî6 Å"'5-‘tb¦i©öú¡8%33»á(÷ã#E©ôU+e‰Ñ4~+nù›ä8âšiÈDB›ÞΣËûd&P{3xJ~àÍ;12C3N–µÜ–Ù` *"z$IŸÉ2 ñ$fR7IÁ¹vlòIÓ0×”¡ÃUW§„¤žNÜ\a·KÂn+ûKÚ¼y cdAÀc ¤ñºö‘%|Hù@BÞØe˜FØ’€è±âv»gûáú¤Œ ÿ>Ù¯¦U6zÐÐúÇœnO±÷hÿwH4î k(ž÷äá“Üz4‘Ré’k˜é3söG\NÇcÜqéq÷Ñûqéäî>×- ž©@ƒHZ7LTmγ[1´jC–¹R•^vÊrlh⤸Øs |OêÂT|}…REìDés]xçlÈŽç‚!„ÉÄT‘lÖ–ž8¨Õur®øÔ‚"^©äE2%³<2~¢3Õg£ ¸® èUbÑeñÓ¤Úé;ß]'àR2»N8>8fÀ¾a "¢J eÊ$43ÄØfµ6si6õt¡ú”PXμeãš ?í7Äx¬S&~›z_HU¸9ÄLÚã øþD‚ÌÐØlp ¾Á%b³ÌÞ­¨r¯álÛóíØòêotÓÒ5Wökÿ<‹s¡e•¨FhæYËßü3팈3~^#á]H}/Z«•®m.üíMg†íZ—+§÷ãQ7>ï¹ï÷Û\Ø EañÄìss"QwÕjzËȲv X5rÄVÒDžɺ7Ë«¦ý7ôÖi˜Y…Ô”bÚI~™ƒk˜»÷‚×Mo«y³kF­x“DV‘áÐ`ëœÏ‚SêÛ—X§†[£ï&½¬ÊG‘ÊIk~Õ‡¯ ·ŒšÔp`ÉíÉÂ=ýg¶ù-ø+Oü»xÞg¼Åû™«VÜ÷¯. !!„žÇë/Ü„ïü#>Ç ñÊ_û\ÞÜ‹_ï¿j¹—Dú!1cnÏ÷‘’`ë /¾Š»„¬ZÅ ;d4,DfP ¼Ö™‘æCRiΞ9w.õ•5ç쩟Zu±~S<¿–Ú•u vÇ=)Ü4&Ÿ2'~ {™ÜKÖü‰V8 µŸ,‘¶!1h;‚,4ñ4Iɬv ˜ÎCbETkºô€%,­¼âƒ#žFqðRg8["2=fŸéD‹¯†fÑþ…é#uËoHùbš†·ã#…¼a€oeݧŽÂ~hõq±·vÚìz½? ŽgQ^a¸ àïFü²øm_[=Ũœ®ñû÷ò¼'¿»ðhÜsòdpFÙñ®“H™Þ̨0ñðÞ o‘$ šÛÒ S=%ÍïÿQ—QG¼ñ·¾OyÒs€~1ÈAÛœ·Äyʧ-²8ö¸/ÄFŠÕqD¥4iü¼21Q$)ïhdýLJM>åÉñÐV°úãÕœ ¦ÔÕNQYÈ(}¯ ‰Þ¹êÜ˦ qêë3¸~‚prX¦3%½©»’m>´Œ›{" 'åÇOcŒz-ûÿqe:mì8 錂Œ ‘¬IóŠ ž,Œt‡Gi‚ɪ†_|,­ç&ÍA×0›˜K§t ³b’þ£|¤ü% »[f4"@øµD(4†Úo:€ìã$TÃWŸ3üX#=Yì`I÷…èµê£XЇ ¶ˆ‹Ô·ã›3øýàÃ.~${óGO´þúÕÒ©¤XgÓÌ¿4)¬é³0(9fY)›wÃ7{Èx0œfuÄ¿õy¸ÿä¾äèw,¸Bä U§º\Æ”ÑMdödÄ›K˜×¸!¦OÛ˜ŒÖ„\ûÌ|Bóïé`žñ$Íkš +vΆùC¬ÑÖMS¿ƒù"ŒBí‹ÔÜŽœÄ¿šrF!ÕŠÈgÛ.0íM&-rAKÒ:ëZ|J†ðGi¸kè(²ûè‘÷¼OZQ±6‰ÃíHžx–ÌìiRü€MÙTMüݘ,t¬î„ïÌô ûü“ùí°©G+ñ¯6"^4SÓ0ŸaðºJ-¹æ;¡tñ5¡6G…þeœK½O‰QJ‘+íD¯](2ZŠJǼÕí™üþ¯ÊmxøÅÇà®+ï÷C7•¿'¥[A×÷&1¸ûFÓ:,óõ„û ÃØ•ÓÒ^™¢]yØÅGôMùÓ’j0šd:ÕA锋ñ‚ö9ÎÅLäÉñ´ÃUEãóœ6Ú²%o4É9fò­Ù­JÓ4[¸]Å@¶ :>x<Ül(œ^ÃM$"‰ ô _rPq²6•„ÛbnO ´PÜ 5ÙOÉ) 9¾KÔ˜0ÖºÙªÌ+O6Ë£LO6‡¨Lý¿8»eµTmÒêuh$/]6è,¡X^}Kx7C4]mä 7Š"6ùÚ|i¼KôÏgxÓ8}’bÅX(¨Ó\ì%׃hl‘%*ñìV+Ÿüìf?(ÿ?,Ëg"ÚsΣÏÙè¾ÿ–îá/[é÷€ƒáä<~Ž !œÜ1ôÌݤNi2#Ù•¦ ó[kÎú˜ÓaxþYº~àBWÏZ¾ígÿ6¶Øâ¤ß¦6ÈàtŠ… Ò`ý9kÎÄ óêf$d:·g“è|Æ©y~Œ1²’Xå¤ÈÂs1˜~Ä£‚Z¯Ù4L)èõ•à;‘ê½fAU¢òHµù¨—ò"UeŸøÙhüS…rí ÈèõÑ6)?e®Z"í˜M'ƒ&ßǘ9±+©Žm¡ÁR]Æ'M^âZšËÿøT/ÓNž¤Ê°3 ^÷_t™ÅvÍ–ý–…„Ìp5ߗ蚇¿ÏcNDfàrìp˜û1öFÿŸŽ€iúÕˆQ7ØbÓsû·4§ãÉþ_TÞðÔ÷àp¸€;Þ‡'ÌnŸÉÞz »‘ª[ul¡òâE´ç4@„YIè“6X5NÊ„ý )ßþsŸ…˧÷cC=n]O™] ŒPx³äcl1¤¤å-ÌÓ*ÎÅ#eejn.-qŽŸ)™fßæù¯ìH¼ !a EÏ•åbŇëÅðTÅ•QŸ ¸ê€ñž¤·m0yàŒde†i8¦†ÐD¶¹$Åc¦r¤ mÞ˜–žN&ñ„™†Á++ò€K¦'†™|Z9ô’ûc«¥ –|ª/e%ª+™ê 5ÅÚ|*<.2£Ñ$g†ÍõäYúÄÔíðY›ê’œÝnÉ”Ž}÷mJDA‚Á³yšuc9Í=ôsÛÞP;äÕ\?[ÝàTOp:žâd{eµöÿƧ¾7]÷0×áþ“¦ ®<"±å<±pmFZ8ÛÐ|š2ôÅîîŽþÙâ ;‡æK|jž¶ &çÈK HñŠSüh¶b±Ò! æ¦Í›åGj¥‹×>Ø´_î(dm*``‘ûÓt¯‘•8?(%9´GÛ†m”khÊPŒcäÑ~Ò÷t{Œ£ÓûqåôÒ™\?"‚ÍxŠ;.݆ËÛû)Ê&ˆÝ§ÜÈD‚¡d2&ß…€Úå9"^0 .&âƒè` ÍЗ¡Ä¼UšãÇh(à0!‘3ޱÁV7Ý÷ߢJ^öËߌWþêÿ†µÅ]?WÞ‹Û¯¼kÆW|Ó´÷ÆðI ±©9H0 v°Æê¶úÃÂ#NÅÚïÒ……õ^+ù:d wU2­‹©ý@ç2:KùöŸÿ,Üwr6Û£žzì âV4ùºÓ&,zÊBŸ…ÏÅot²)˜6N¬rjŒß„"è¸Í>…¬–°œ;Œ èÀ„œVX $ñEfÄ6ÄÙߌ-ºüí_Rfý Dó‡’bÂü·5>RŽ$ KC™¶53 j ùáجeC*¤ñŒÿOÒ:¡i!bÒ™É&Å>i“E´4µ)É†Æø5Mw³[ÆÇȶ‰&ÓL|nÄŒ™ aÂ/£$”EÂ_"†‰¹Q+_Êc¾Î¼Öž°#âv¸áØüþn4 a1öÓ¥£žöaëËÄõƒ d§KÓÖÉÚ²Ï2tFÓú‡`ð6î¡1ÿa°w³0@·|ÎL8xmQÈ`ýÁÏ!Òôß-bÊà7ëïÁT^ð ÏÀåí%œnO0ª¦l¡a›õhÊ]T˜ì«0"È@MzqRjªžãÑE“„‹”gŸQ˜lÞÿ!k¼Ê_Hí%6OíæC§1¤€²A@T“^Uõ~×ò+d~){fjÉ…E$pʲº ~SVÃ(Éw,¹*Rb}qļ}œØ¸†/ÜWh%âBXÒèQ¨Ä|^’Lkú•§E²M›”o½MíW×*–×2:ïàC®ù„s̬?) ?xî¢Í3'j™å/ë–/Í™ñˆ>4nc+RãwŸè#§Œárh¨#ý WíJ·Ž »¬C 6Œ©"Èbî¥ü–i¤˜$ZxQYS\/$¦ÒeRw>[F°> HYA¼_¥¿ ¥ø ?"ä­Ÿ'ùc%Í®dM3¸>¹0c‰Œß.<í¶#® òPKÑç¶¹~¶ØbƒíxŠS=^}Ћ‹Åüßuü~ ¦Ø`(õ„ 1ß ­›-Ð8éY5¢Ðt|’µ°‘¾P›‹gÏLŒÖ^fÐ~!Š×¥{©˜9m>ØÊ·þìß·Ú›7.~Ű Žz i_ñ¬mš 6”ƒð&F_éÇÖ¿õÁœGIÓÅ+ɇã}ÆùåÔÚ Þú€eœpFZçšz …cæÐRx\xóVHpfÖu@~7ÂhîKòojÔW²okî}§ÂÅÂÌ/µ„_HPعiP‘ä@mO mô¶è :¸·Ç ÎZLûÿàÑû°Õ“6¬îÊáhž¡ûÝíŠ ößÝœ2—LlÃÝCF›2À“Ÿ…ð¿ƒo9’þNrýH|6\“÷H ãåÑ ¬ô ÈZË·ÿ«ÏƥͽØbĽÇw´è ·¾È5ÜA½’“õOóa@’Ø>oœ€/d‰¹•mõÌRÎëœ_ f°Oê’†/µ6)jR–c[43°'ÓR˜(G u CX(„@$E™•cô%D‚¢©QY¹¡ÀWX.ök#lå{~á™8ÚÞwß÷û¸¼¹·S•ÑBŽ8 < Ãö‡­]$:µ•Ãú‰G9íÒgú›|êÄú…Öw²èèàÒ7Ys¾JÄ»éÍØå*|a»é”ø#DæÓ)€’Ì&´(ƒP‹o8€’ÒÐl–,}¼•ðyš Êh­²`í/#T¥Ü>-ÑÛÛmKðv:¶xÿãÍeœµ¸öü>lq:ÝPe Þ¯¸EÚï@ßÅ5p ˆ\Cµã>Eùˆ…‹šæ>DŸÂ–ÍÐg ˜ùÉ àPÒØtžêsJàƒ©|Ï/>Á}GwáòÉ==HÀî «jðDM™ÚÃýb íM•Æ:-œ&í3 4îΣ¶N<{±é¹ÙåfÝè[@Ç$/3M%mŸnCÐA7ˆáJ4FÃcX"×U¬è¬EäÛÅ’ šŒ±Œ¶†+Uú¥ðiS3$8 -÷—gý$,)!ÞãÍXcøì¿Õ *C×¼€2S¶ÍÝ©ÿ-›>YèL/š©“ÛÏI`×âv}°ÜÉ…!ê "7mƒµ•v#6™ˆæÈ&hþÓ.Š °ÂZ§ éã*¼6¦¾á;6í_1b3žâx{¯Øw©ûB1íÿîãÛC£ïŒ¸¡•6ÍycŸæß…¬iÛ¾fA)ÑG,Òðí«û±[¦Ë‘Öš.»Y®©ã3pΉÃÂc>Z€_µNÚ]:郡¼þ·¾ ŸþQŸ'}Øÿ7\¸"‡€o§çùp7ÏgdÍŽé¾Vßì¼!ðŠÏ©Æ½?d…ëÖ~Ñ)óum–"ÞÖT]6ïDÙߣ Øô¾ÆoäaéŸCáu‘hnâê«.>_·ýà™§ufBÉuᥨnxWÈioADqt {´ºó¡ f~´:ÄÖ|!°&¯ [fÄtôÄC}‘;bˆÄHÌobI?ðûO?;•ï(_ÿç~t7ŰúsyÁ[¿pþ¶H cN¡ªÄˆ +CãGâJi’ 2û—\eþU©°¬ ÁÚ™éVMëÍ ‚wñá÷ÄˆíØ™ÿxŠžœ§¦ýß³¹#LcÄ&¯ãÔI¯1C3§ÆvìVÍÎñÞ5*2Û¹NØ~Ìa†¾h%~óEÓgwë›ÔÚ½4ÉåA2„e0\``n¾þVÜrñÖsãò. ÅéxňûŽ?ˆ‡]ÿ(G^²ÊèZD¿|§0K·˜q¦ˆ¬°Êì¥Ì;LdøAÊE(ÒÂ>­Ö‚ç”{O£m¿ü¦[x ïÖ°²"2ü±Cm00Ì' =cBAgôn !ùôçšÇ"Œœ.GAñ)üÄÑ™ù’#B‡aK `vmóË“½RTóÆŒ€¥@,=‹x±¿ü_qUÄ|-Ëóã üó7~âk“& $oWblá°[´ˆ@ü)¨<‡«Æ„ñKÌ¡µX? JÙ Ò¬;â®c»ì͉Ÿý¶ÚnöÚ^ÁËÏ©ý?ÿ3ÿ9À]ÇïÃVšJx…Ÿ¾5&àƒŒEçzGÉ*Ë ÄÚ¼·d]CP_¢;5†•´YïÀñ£ý|‰A á6nr–´NqhšÀ.®ô )[ÝàmwüvÝcpëÅÃMN'…/äÛ²•ЭXňH”ú#Æþ>1%§Ï.@)lÔRC§{Lè’0,3L®åKð@*@›Kw-‘åO&¢énIsŽd¼GÔâúQãƒþjŒÏÝb>ÚÜ•õà &·Õ;Ì »¢»€"^´û©<TÄÁ¯)bБ6Hœ XIé]&¹1^qÛ³®!9_ûò]¿ñù€oúä×…c Çø$¯ˆci™õÃÔ$ nÀ)ÖÂqžãü»›Â4&…k±®%÷ÛÁšRÓþ–„À¨lÆÍ¹™?\n†@pÏé¾±ª‚`(b8ë‚Ó´|þÛÜ`.7tȘ• å6ÂAøzMÐbj9¿ ;*˜¼CŒv†N M¸ÁmI6‡3E â,ÍŽË‘ eÔ-î:ºï¾ï?ãQ7>7_wk§›!4QÂbD¸Ã&±€àÍýh[xh`Ø”¥¨ñ,ïÏÐ…(¦HO‡y!jq‡Œiö³Ï–ž–gîÔ‘,>Té-³•$fQ±Æ™¯2®¼U¸ÖíÃÓŒ+²T]™ë7´Ù¦{ì=߯Dm«èl„>dŸĦFð²`B6”Á…eœnãNÃFðƒ·}åUï³?î•ÉÍʦ$Ò4Mû{ßöEçîëy¿þy€oþäóQÅÔXPuÕܧ›ç\øXxXIµ¸¿¹ 1¬ ¸ ±´ížS^„ñㄪp{tÔm0(m7{m¶çwýÀ‰\ÂÛ/ÿG§•aÈ9ÔÍÒ?68Í]&¤Bð<ºÀ`;H ~$YJì…S2_ýº¹¥ý’À¦Ùõþ²È²cÿÀúrÈ\qÔîR_zPÅéxŒK'÷àxs?N¶G¸áðfha`"Òœ/#º¦{£Ó˜1Ó>'hPx^f…(Á¤F¦ÌÀaТÕr<àRbÇÙâ–„¢ñ7QA”\Rd±$5?ÆP£,Óøzi³Øå£YB¡p8/£ æ3#÷fVƈÄ¡ÀaòßhgPDñP;j¦8i9Â:¹.§Tüà>û\„ú¬yEj³}T²6:Ú”†œh/|íŸý‘ÐB{ýÅ}€…ò¿þ¹€oþ”ï=$…hI²6Ïø6ÍÊ'¥Ž*°œ  .!܋Ɯ‘‰™îèHdÀ(cOó¬ØªeUlÇ ^ñ«ç×þá3è1HÓO8AW"æ„€ýË´hgú"ŒA›µ}ù ®1u†Ýq? Õ! Çég±€ižÏˆŒ@ ýKT.^¼ O¼þÏ\%^Ørº=Âí—oÃoà—pËõÄõ7øFO ’¶ÚC‹ÝÚu%ÃoùéV§5•Y}ì î­§ëp+4Y6ÓdIPÑú͘Cq8À@†Å§Z¨ÀšiÈZzW×Ô7@~(7L‰ˆ3cúäjJE]ÓÚ:̤à ¸BedÛßgJ©8ï2 —ãÕÕMß4°Ÿy¼ò Ìÿ™ýò£3ÌÀÌ{"N+HÎvÊEd1»Žˆ.4¾þÏýè™…|ç¯}¾å/þ81%^™ÀV™ »‰›°Á "^œ:+ú{ãH>énŽ‘^wõ ì¶_ú¾ÕvðK3ÕŸ«øa)‰ï.ì™…træMsJЗ>Í=¡34v ¡ËÐßµ\-‡ ŠÚ^™µµï"ÝÒŽsae„ï{p7ƒt¥¤¹O" ùÁ]6ã)®œÞ‡[/>§Û·˜-Ü¡¹$Æ´!À8Ú¾@ìÛDvT —hï¶6ûé ͹Y´2‚-U¹vïÄI`‹fF1SgæFof¹xåpožD(¹A;æn kÄ­IöІH‰®©…›'¹ÙV" %ÁÁÊKƒƒÚ ÓÕ#ù‚C×xãÅ–” R‚¡x'ævð‰™ú\•˜¶1A²Î÷–g~ÔËbÚ)a\ºÃ&‰$3óODGšû›C,Lê?ç/¼ÏÿO_€uEnê¤9·²i§ÇƸNœ!`dj‘Ú Wƒûf^@#SÓBm¤§:b«-Ãçö W;ΕïýÛÿ7⑸"w…öèIÞàBÀ¢h„ÆŒ£–þÇç„y"ã7&®õ³ŽG[oŠMPø†¯-x._íÕ11Æ!Ò"†ƱÙ@*”ŒåAXŠãíüÖ¿€ënÄÁpˆÇÝü1®u«ož† utÜÉ ]ëÉŽmÈœîD _;¹*É óüNý_K1¡vø’B¨gcüy„¦ »ñ0YUƒUbÆ §åþp;BÉíÈü …ô…À;?Ð]ÞœóæáŸr¡Æ«ø"Qê6‚Ý›0FKÌ` 1¦}ºtÚŒ'¸ÏÜ^íÿO|)1¤^ GÓ³¹ËXR2­zvÈ\Óþì?ñµøÆOzíN˜¿ã?|iödò'sÃ&ƒ´„£NðMêLuWª5Ø[È–_È=£‘&Üñ#Ší¸ÅÉæ/ÿ•³§{àrAoÄc.>!òðÛiÛN„É}'=]­ˆ[ žºªJ7€Õ<>”ö!RE·ÿ,ïÏÐßEj[¢m{fŠŠ$fYP›´~jþ [caßÅ'Jðµÿý÷_~èrùô>Ü{t'.ŸÞ‹xØÇã`8ì ºQË q³Z$ìϘúþ[p© ñF½¾ÏXvÜÛÚS¡uŠ#ÄׂÞ1¿”[ãè&ײMQÊez¸>˜…@@z7 …ƒ K])ÑID¦Ùï§ð&ÃÌ{¹1FZï2á–Í]Ùûa,Jú›|K<‘¦mâ+ ORÓñÓòôü<ý‰/õA8s¬¤¥f°æ w–hƒÅ%LNú˜s}hý¦Oz¾é“^·¿#J„ÔýÎJ“ÝxA¨¬"cDè3‚ojýùI‹iìÉÞ" C¯í÷v+”-bÅx |ÿÀéÁ¼ëä7cº ±Š§^€óì`ꀤô)MDæ9yˆù[j¯Ï½ô<@ƒ÷Í‚eð;0 Ih´tÁÓ¹ÏAèζõ7¼v1ÁÁG<úãñ]Ÿù/®ÏTQŒ¸÷äøí;~¿úžÑ#öáv;ïƒîÞŠ±…ÛÕ“F[î¯k'±­'ï“éÜ÷#ƒáfÖL˜ß\lz-ë’GÇ-á` ÁS?® ÇøÛsVhJ”žµŸžH(=šØKÛ„ÅTísnXÆùþÙ›Ùy¸ñФÛkͶFxÐ|‰@Eóßzb0c»œ/OÿÈèµ8 IÁ*X¨{÷í2îRëBVɘšàhå›?y‡œøÕj}K¤6©“H‡»ØÌ\º$ƒÕ#…`@G³Þº×¶«¶‚¿´ @¼'zçZó§}çÔq­­ƒÎŒC €òó 3maævq ý 1wÒà!vILŸß®ÌäL¤ÑCZ>"Zì¡”…&ëŠ?‘ï:ðL¥h}=ÿA,Fñ¾KïÀÞû»ØŒlu Á€9@Û1¾À²…†·:Æ<êèš®mÛ>€ÂèûÆ´‚9©(ñKc^¡E³¥5G™±¢ŒˆCláða o0Ø„xQË“£ù’2Î ¸ÁÛ€ð3VøÊßG]©$žÀ<Þ!žl2¨Ãj®2wƈ`¨JoøÜLš·DòfDÍÙ/´yÇmE4ÊÓÌ;fDpýÊÝícešöDvx6 ŒI ŸÀÅÌx×x8¥•-~êÛ5]¶^ØŠªb¼bPís8"tŸ\ƒ× ïŸLØ… Ö˜Æèï®Ãv>oV]¨ ŽbLÝÚUZ.BZV*>Àœ'´¼øS¼) f·Z4 ²ŽÜ**Ž)–ÔnCvQ) I öI™O=æG܈à Ñ[Π7_^ñ®gÍhû„'NÝX9«PE6Ëofµ¸ è¿Q^oÌvŸöS,þiº’N VX(åÍ®š ˆjL¾ôÉVÍf«ö%é“§17Lù‘ú¡Ýúuµ›¿ð¢Ïþy\ÌdFÜûvÿzré˜讫”ß_’ei¼ûç=çÑæAÁõ?D­ßA‚©o"› ÂÝ‘\=6åÖW×”‡¾PÒ¦2ùÆÛxþÿòàuÀåÍ}ø'ÿîïáxs[Ý@ 8”Cˆ }Ÿ‰¬% »x’=}ù5ÄÑùþ„MÌrƉæ¾Ï“©ÝeÓZ¬Ü0"fì¯{¢ûyî¢W‚ÙeW¶ÜûQ<Bû•v÷[I¥.JpˆHó$ZÅdÝÔ|±©)>mí¾¤t’ÕÍ£Ny²Ûð}ù»ž…—¿ë+à àÚB¤ê ÙdÒŽâ[½t%O$\âVfè<Á4æçýÇÏ÷SÀ³¥Hw¿Õ¨sÃÈç-Éo×ç1Ï7™µN=¿—`“§´3^Ëdwü¶S¿Ûq Õkãþ¹a¼¹î >†¶kD}üCg°™‘öMÔ¡2é²¹ê.¥ØÀÍŒ]“`a·o B0taѰ’ ++|©mÓÀº&]ˆD9Ì&@nÜåžã;ðÂ_þ œn1 Cgþ-e¸[eõû^>bÅ`rßó’~Høáà ÖÙ¤,ÞÙµ,ÀÌv2b•—ú ™2#”b¹ËThIÚºˆöÍýâ´uéc¤+M»6¼-ù¤uî E#9‚Î$3g:XŽ^AaH^ƒp ðMÂâ—=þ%ØU^þίÀËÞùÌþÊÜKŒ-Á&yÂâ0oOÐ]k×…u(ø®ßøÏ´T¾å¿ýñiËÓë.˜R…ƒ£ ò¶}¢ ¢²1ÓlÆÒ޶ âþlž‹¬…­žb{ÀÑÁ=øC}khô5€Ý$Iƒzdˆ3aûMR}c¶3xªŒ™AqÑ}ì Ã/p‚NÞ³˜\lãR"®ŸŒ QÛf”¾Ÿ@V‹(¾ûA¼!l宣÷ã†Ã›p ‡=p0ôájÜ(ÜæÒ«‡>Œš—œö0®¬êH!³ŒQ}RòUUÊÇ‹‚_ñ÷&Õ´´I®/£Çé\T€•‡¯ù3‹9w7±Ë !Dfy„ûÚ{5«Œ*ÓËC…]¢£Ö¯9¼t¬Ø™–7µ@ƾ”=å¥ïx¦§‚æXwšM'%“L™ w‹ð73ïïcü3ˆŠn²:8á3÷Ã1„™±Oï ¼~qIìÔ 4ßʤ™á[Ò7è@û|-Ü?oxê»ñ¸ƒOp«±nÈ2CˆÁ&¡€rË–  bƺ)t·pzb·¹lø¦0füY3¯†ôMk\B07>½š²O÷~?Ð/=Ö° |jÛ÷sh¨ÑÎ- ZÀ€ ä Y´ºí4EQAFħM(Ä}ÔâÚgx(5¯S¾õDHq–›¹2¥åŒ¹ gú°<ü]ˆ›–<ñÙ0äf‰PÓ¨jꨅ“2h“3LË&sÆ8§Û1ŽP<ØÉV«+%u’vï…wRÓ篩§]`( :u¡¹Õ±G]ýéÔ7>õ½¸ñº[ZtÈñ!0lcÉÅcsa4ì^!AÁ¸è_*ãŒi$þÿgï¿mÛªúpü3ÖÞçÜòú{ô^ÄKÔØŠQìbˆ vÔ¨ù&ùš0Š¢ ØÅhl ‰ú‚¨HG¤¼Þî½çœ½×¿?æc|Æ\kïsν÷á3?&Üwö^{­¹fsŒÏ(sLVÓ˜6ä|RHtnãÄ)‚}áˆBJ›aKïLÓÍý=ûjBxi B·mi$îìåëû#ðÝÿ«X ;Ø‘Së²j»{?AÕæv¦o›ïˆI ‚ Zªí0MØÉs޳¹ý½»KǹrÌYTêòIƒgÖêÂ/$>¤^óŒ`¡»¸[®}h¾Óú—ÓX›l\â;®í¿•†ýXX.‘š ÎÔ’ÊP¤´üÍRÓtÓÄ -<±¼ÛÝ©U,¹Ÿ…ˆ; ôÜi`_÷'†`‡ËÔ÷Ï©ƒ?ð×;Ö;çÊ·È/dõÌ‘ÜÞ_CäˆÉµÉœ ðD¿é'CÍÞlr°° (>'¾X )¿ñ¿QWË…¥~jŸÖe…›Þ쌚ßwõÁÜ“ˆ|2£D¤™å J‚4x¾ãs0Ïk‚9×ÛÌ´ì46y3š©¦%mƒªÖ™d¢´|AÌÉ’m%í_ˆá53Â3?ãwðÔßüÔ ž;²ì.NaGv±³<½õY”êÀ–M6LAÁ\¢Ïã£=“¤Hûž2óÙ¸–Ìhü•|= Ð;-å„Ó ›‰“á5ÞªZ¢nÔB>;3 —à†•Y—ôÓ‹ £î•®‘iÔ¼]í!@¨íªX†€5Û™í %q™N rÌ’BoÙ¶•îT€ífÁcÐß&Þ~þçüȾ꼟=nùöGþ\C©†²mJ©¯#å£ÞV€[B³¡K²3*<ò ýe#äpŒÛa0¿€ûŒjJBQE/|÷¯ýxóÁ{pûò=pU]šöMYd~Ižî¦°þµý †]í0fCq5‡2ˆ‰¬ò®ŠÓïk±çÃ4ǫ˘…Äxƒ5W»·ÞÁèoPÔÃwAR¶,'€8Eïί\~⌺Æj½uY¡†Ü.O(Ø|ñLFsñŒ¢1Öˆô|b)OÒ¦²‰#3ÑiaÙ`S^¯Ijc>R7IŸ$œ™Óêw€ZA¢ SÄ©/YØÅ=¹°šÊ&2«'LV<ž¦‰öæ%[ËÉàXï‡ÃÙÖ¨«KïÄ&£I‚6#;¢Ð]4ê‰÷{ Àóßvç<æÛ>øç¢µdJbÞìh?f¸›ÀËl2’™ûÈtå?ÄñFI-ìNK˜é´©áƒ@‹¡¨âGBÖWN¼*çUìèÇÛq½›qó6aé&Úð% ¦ÞÌ4¦L´?€3’ GÜ´aj [€šÀ ¡-DæÆ¾ç3÷5$q Ñ6žýš ùÔ[š9Èù+I…Š×ùÌÏxžú›º3sÇňõúûã¹ÆüªI±4í³šŒ&Ó þV|^k¥šÐx?3ÙD„)£Üðl_QÒøÒÌ!Í%SÉ`7“Ér%€}ðæÄ8'\¬ñžÄ?4M?K<˃z4i.í%nraIýX¦FÀ„FË“¸Ý$sw¨_’먃±±GÜ·R ´£¦zÇW?๎zÀóÞ go*O}ÄÏú!÷œ$ØC w‡zaOHp1ÊdßɉȜÊãëhÈf¼iL=̱k‚Øæ& 0Õøm) /Ìþïèu-°3ºCtIAÂRè`³Ù{Ä Î¸ùÐøäF¶õÛañ,ŒòIÀЄau Ù”„œ ÆlAL« üx=&æ!`s&ÂMua×s"ì9GËßË×ýöGà?¯C Ø]œ‚@±וù·è§ÚÅ‘oØ½ÝØÒÛN©öÒ#oK§MÜÏóM̡̕àÏJÏvì'gyõ¿¦iÄ1pÉ|kŒ&Ic1rkôC3f6àaã¦Ä'æ1Ú‘L:Kî§™}ë3 ¨¶¿I¨š 3±S‹íg\›©k&ªa²jnLÁ_DÀ``FnÏ'=àyŽ,­Îñ\HyòÃ^„9G0£>—6zh2Aè÷©¶“ÒÈÜ0qD:N–ç$XHÛ’æ,S¢@ËùVi+HYã·¿frôÜO¨Þ¶ƒz¢Al°¾¶.#$×Yä8Êš‰H¡7¦êp.°87R÷ùê2ÆÄ´ö">Þ ¶ùçÑå½ÞøBiWBËøþÏø<åNì XÈ‹a€ýqUûHó€ÃŠ«ÆWl ŒO4ÆÖ™ø}.Yòs«}(°šÜSñ¬MŒ;&?»™Á¤v˜I dšJâ¢SD”_Õw/Ú¥ÁÐ3§fM?ª+~›:3þ§]Ÿ™WumYÖk-'‡v^¬ƒ$jDJ‚*‚¹ÍëÕ%˜©ÞuýÙ#¹Ë‡˜€U\¡Õ)øÚ¿ Ð4›2LPXý)¢$>³i!£Ç\l! u.m@ÂM´1”Æ•ÉI¢Âã|Ø– 3föÖíâg­Ö8lSB‹Â“>«¢4­jÁXÖËù§ø¥/|'–Ãn^_ Ùa󗏿-¨™sÒot?Í¥JË4ø Æ|Îì “øèAh, UòÔF‚âÚ/Óªs.¢(*X1d €™ß"ʇ¸Éháí!ê-b.Nyºs—Ëv®ÂAÙÃþx›Y¢RÛèãd¾e4߉ÂÒàãìô “L‹Bd! 8%léÊZñ–Âfâbf¡èŸ¯´\mÈíM†ôÄ<6¹÷M«èÞËšJhŸpºeg·÷¢]óùXôh½³š&Ʊüb`Ó„úP93Ó˜¦¨‡w€;“ÚY$FBãð“Y%Ú–wóö·°È$5>!‡†ÊÓÄteö|é$nëƒð1„ÝxNŽ­Cä[j튆ÜgèŽô#„L•üˆÇú^ ³”¾§­Ëê¼À¿ü…ïÂ%»—c9ìâ\¹%1îä¤%Alyt’WÇ~gÄß~„2t¶ë´3–Êً笾´«˜RNC ß$§M;‘­mNËiß@d$®‚JºîÉÑRÜ©SD|Ãï|$nÛ¿«q¿…€SW5ýW< -êO>V”cqRÂÇ™²î#m‰2Ô[# ™¿s‹Z£•?dÀÉÀ”>¢ä°µí“<3–ƒ2©‡i§ 13MúÌŒ7 dÞaŒ\g€ðàážN‚ªò#!M‚ú©E)h¶Ýåð™¥&ÿFé!$”ò$¬ÚEÇæìß!í8EuTmLò­`ÆìæD?³·³ýÚ¤ÌÛÅ«à‰Œ>˜ÖÒoRgµÅŸ ±i‹£¦¯õº Š›êüùÚ}ª(~kík‘ºá«Ú[+ú__@ø'‡}Ž»ûÔ[bäÖÎí¿é‡¶ÐèÑ2¢®¤ÉILˆÀè¡óÀ¸“˜ÉÕ N¡N^š#ÖDe9ʤ¢Pšÿ”AV‚ÈTj4 dÎ ß1iÅwâ2,–58ÑrÕŽ‡`Êd‚¬Ó!Ýõ„ÑCZEü …:³öTçmÆ4d”KâGôG9Z;m^B;Ó%…}î¼'˜º'}lcâÌ]=lÞ"C!í@Bæ‘FÙ˜> Kg àèP>%là§u –Ï–íS"íƒ%x³÷˜PI;ŽÓ9–mz ÅQ;‡øÝ:Ä–q+›ºÔÛì1',ðdÃnÖ;QùðY(-…øb±$`<¸Ð®×ŠKþêV‰t%¡õø¯ë½R¶m‚Ý7£æY˜ÆdI à˜CCH1óÎÚ'¹cÔO/.èu ©r%Åy£i>¸ÞË.ˆVú¾kÕŒÁ–™Ád…i,‘=”–4æZJ a÷ØòˆH’¡í˜mΚ¡ÔñŽ,Œ¹¨ø(… gD‘Õœ¤nñü;õm^jªÜ*š/ˆA\šˆÈ³_Êë|L‘í÷„ œå4sNCX¥åí1Ó"¶Ösô§»P”¦ŒXk¬Ëη¸ãW¯ï» ©]ô›$äD7­NÕ)]ªf÷KhN~þÜgü<ÍtüæÕY=@>¬½Ó‹ N¢ž”z¿…÷5Ih¨í“ߋЄÌwò¯œ÷<½7Êîòv'êöQ]›ó誰œHð.¶H! š5+3üÅP®]0Ü´®YsàÂæSÄó@»úÜTż.q¿™#뫺>uæpµD05H-›©â]d*Gj’·«DþÑÇ9g>"NÕ˜EIÕ‡Z’Í:Ï{ùšÇ.1ýÞF–·FÇD–‘ï„[ºXÍœ³knEtAf YfŸó!„5LA vú’$Äø7;Ì¢C1£¤w.ºæÔlƒ2Ýfî¤Ý"}ìçÒÍÓRÑÿºàñ]8Ÿ’Â>wGgV6Á™˜ðÕM =ÙÐ%RCLÇ|/åìÌ&xëëå#(#ä”òü¸ ³ßÚ5Îö‰:‘ÿ'÷ÏÇ‚ÛïÄ@Vlû¯ý*‰º—œ¸ô¼æé½U.ß½‹aÍœ8´°\#æ°Q fHZ—B ÓÖÍ['$­;¿¹;@ÅŠoŒ6¥,Ï .@Ñ?Œy;¯ŠuÏ$ž6¥ &nƒþŽo½Û2»Úû„Že´¿ÀbÞ‡v€¡V39ñ`mÕC»Aæz¼õÌ<…O½‘Ôȯ‡=$3Ò0íª ò4Ž:ª³ˆä•ØZ¨v€Â87.4ÙV'¡ðØ‘ë_óqŽWk¬6‚–ÒY ´%sãêc“Wš°Ü?bû7ô›^StƒÙ…05ä|ή›{08fÊŽéaRr$/aºñó}¨…‡e´T³NmQÛQéÜßF–¯†óG;ó7ú”´ÓÙ5€¤âXT”ºbh"âôÉϨÌ%üºs•oøÄí7¡”5–Ã.øNà‘¿›Àh (/éN`´£ ë5W«ýz0èm6W£á®hWìÝÜÅ 0€¹²,Ürþ ­ÍËÄKÙÿ˜6Åfã‘Ü)ï¥ôÔ„¡üÎök L Äöeî|’nj÷ñø’_€~Ðt-£x{Î~Ù’¥i|I?›l‚ò¤69&ÈìÖMþ‹ Í„N¥{UÑd ?”`L%„”té‚KÊJ‹å¯ V#–v)ÅOiräߨ¼h5ýh†þü•ç‡þèó~ÏÑ¿ìŒM òìVºd? _kLÜûÌŒS³ àh™BÏÑ?>ê±×*ŒQSfP€ù; ³ÌÀ©§­Í’8WFü=Òsá€à o¢õkãÎ\v†“ØYœ„(0¶SåjŠh;gȲJomf™HJ+š> ¡}âÖÕ×—p ¹VeÞ 3":Žßñu‡¯3Ë»7AQ³ýjb_ùξ爪9€Æ@f‚°d¦`»IÖâ³ÂÝWîRœVê7‡èð,^£†³BiáÚf˜ÞôÓ FþÈ7vŽa6¦¤Ò¥Ç©4û4O?a”)ѤiI:ij{âõ0É‹YS­ø5_#‡–¢@‹z䎵5$yøT#ÖßþJ¼¥(eÕ ÿS¸ ƒ ý£14¶Eï;ìHZ¢óÔÁ‡Cv‡¨Tæ;Ô,œB©¤-<ÓÎð:Ú¿1åAÚîaI‡Î&XL3õeâŒöSɲ²ê¿3ÁE=ô< ¸–d£'Í´vvï6|ý¿xÖyÏÙ{£\¶{Ãå€b! ˜6nÉò|‡7‹cŽ;œ¤¸ä>lt6Ô`ãx˜à$ÃxzMo²¶ËdbÎ$GÍ—–BÄ7}"ø³ûKÉ„”@¸ Ú‘˜™Âö©ÄfЙñJ`Å-8¼7ShÃLçú, l714‘ý@³š£w •OÖŽ†LO&¤$‰…&zNºK š˜$aª‹åNjwB'ÍrF ¾L©ö“z¸ÕŠÆ„s`qü5|ÓÅŽ*…+"]/j‡@–¤Xº‡¢À¨#^xžèö7ããkåH|ÐPIvóvný•fÞèlà8rÖzný`öhÌ8ÅøÃŽo” @eV¡42"Ä&˜¸9l˜ADŽZú‰˜> A1ˆRØ'R”9ˆmµÝBU¹&ˆzú޵À)„³p޳$×ÑÑà6 {'*»‹S8±8Ýʼnà%²€È¢öŠí/ø=±WÄè‚|‡aÆÂŸ„xC]¶î—Rýdî5«KíÐØ›îՙדds`Ì ;>ÏrßxBzqÏ~OQ×þ4˜e+Ð5Ÿ©mìDi¹´’NÀ!¡ŒbTf_+\71A5mƒ m•—·JiÜ2ŠŸ íßœQüd>;p63ky'¡h÷F"dÞ/ïI¼Œ„·ø_Ž÷·doìëÛ&°BZM𱂣®ë)NçY®Ð{àŠ»&`3S'HIÝõ{ͩٮ3bÐónÊ1†Ý|""¿IÏ $ßЊ2Ê>!Œr¨ŽÑ«¦Á¡=Â*ÌZ"#!ªÛeדÒ?!pÅî]pjy)Õü3È»€•Û(ÚÊ¡€‘ÉѪ5ÕØL¿9Ÿu}8™/´ ˆ"LI±ÿÕÚF”Þùkؾß3Å0ñ*oÂéÞ笳‡ÙÐ^ô!€N}÷†I{QSÖ18I›õƒ"¨†öMi¢Jh€3ËTPÊ c±ÃÞ«“xUðã¯<ÿ_—íÜ7¯®‹ ½Ò,7TÕGv˜™…ý·\<…ƪo棘x¶bö®= !"ªgðÍfùhJföJL_‚z&LkœE~ÞýN\ sçsº¦ÄeÇ;½ šÚMÐ.ªÈŒŠ­•AÒÉI{2ÞK7¯q:Þø$3ÈY³z>#xhv ÇÒ¹¸å"–»›br›ÄïÑülíjÈ>¥ˆÜR4þŽä èÉŠx§®¶7Õ}9%n™äÚ^`¶ë=êSžž-ÓÑ0œªôœv‹$©Yں쫰‹ªaf퓞[<ú½ím:%¹3Úé5øíÝCÞÒ÷ãÚ|&K›XŠXÒÞË d¾iiP0–ƒfZc,+Œz±B?‰òUSÿã,VÞ°Ò Š$îc \ñ´²ö¨À³û) mnŽJ»‹­9&0f˜¿¡|ߌE¬>;qYsÑ®?ñd}„Ó¡ u„ëL£7Œ, <à®pÞó÷Þ(ìÀ°€#lµÄ‰6ÁÍäÑ9FÓ°4 âèL›«ºµ€z-ÒDlÒ¨¿`>þŠÄÜÀÚ¼ Îç·ömï¢;#é²Ò«šfi~Іx”ø¶(Ñ›ñ4¸]:â–¡·5IšI ®Pñ‚éJ~~r•|HxgL(½—õ+ø{ûù1ûW>ê¡k±7;«s$£|ŸLß™Ö~fcBì.6;8³ä[›y§ÏKd!¨±ë·ÔM^°äÝÅãý-Ýóº`­k¬u¾òßã|ʳ>÷an:xd±Î(n†¹ó×ɦ¬†¼i§¹÷q‰yî7„ù{Ä÷¿]¿G y¨´½±³xà¶aªT_€i-¤Ê‘‰Ë_åÝê& I„£Ð0i[¤H§ w#y^óöQ¸¥–†|iEÚæ˜Úè'Ì¥;Ö—}îÇj{  Ê\¾è”®Ó3’Þ§ü»b–?R–wW<ÜáËÌÖ÷üÄXÍ5íÄU‘*\PÆó&‰ŒVÒR¢»Ô$)S“žùLÏE”h×qõÆäñ4$KjZ²³çVf÷ñ”ñJjËï@Ôtê|œyYÁÓHÃ"äòH8·½ b½M ¥Ív“FÑó.˜,†Ÿ{jJ›I KR5v8žË ûãYì¯Ïá|Ëéúy{¹ÁUaiýÌZt?€–œ‹”öN“t-¡INlò Îü5<˜é ƒˆÊ;vy¥xK¹mìYÉÄcB¡Ã#ÔD‘@ºQ’°D%,LÀïQ§¹;}Ѻ lÝö¤~OÐq‚¥ÓÎ…õ*dÚÃfŸ¿^Eï‹`¸a­D™«K|UJ28áOf6Ú™èæO&ŠMlíÚÈD”W-xZЛ›³F‡çx[]K\!ÝÓ—–QrˆNÙÛ&À¦›ä8ÉÏYv»Ðû‘K“G7v‹#îíž±Wô—›æxœN‡ÊÂ(—¼9-f7×^¨Á̈ñ Ñ¥-æH–%èÏŽä  ”N#¢h#ÔÏqnZ‚íúÕõyoú²rn¸o_ÝÙaÝ™G9›«3ÓõûxIÝ™…ÍH\…¦]áÌ=Ñ¥vºëD—RBÛ« $zc EB–Ï=Š+­ñ¼èØ(Ñ!ÿä¸óùGìÑè9„“|†·\÷º šÇ;º”¶Ùp¥û8÷±3ì8_I‡À”y¾>& / ŒþsÞç•sœqàJ&^G¾[_óÛì¥ë §v@Î@¬8Hk?”¨ÑþJû¡¾C`‡Fûx0‚Ò`«Ý€SÀnÕt;®´Ok%šÆN€ê8ë„5f¾á¼0©Œ>ÛÁcÐR^ŠÑçaòÐ&Š„¾ºÎZ“&¨‰Röv¼B7Q ?Í ™Òä¦ÎæKïï;ÀÙRy±ÄÞ‡ØìåŸR=X®Ÿu › i¼ »?<ëóþ®À=}|ÓŽÉ^Eî¡•9Ùƒ5 žË)dR©fÓ>²#¤ Ìî¦ÊÂäÏ+©Î½¿iÛ„F'¶õPéùè±k; Dê_ˆLÉvÚüÇ.Eר÷°¿:‹šžÜhµæ;+®§Bˆ ÖXq¤%žÝÀd!H>‚éx f!¾i÷ÒÛ‘B¾žµsã_­V[+<¥ª}í²òï Ätò Gdr³`f¿U\(,{ƒz¶Llg>Æ}b&vjb¶Sü’~ ¸>µ{»< ¼!ˆ§N»ï³ªHS¢Ñ±kÁPsGE%½!E­´Æ‰œ³Ù,וP˜H9ägÅàGtf%™¢ƒªÏ`Ô¥Œm°â…¯úp!å´^UC?]Š“fçãÀ[—šÃc+ùÞ¢`ý<§A#4, ²eÚ¨Ÿ8]…|ZÞ»ž4E_,öÕíµ5®³!¯A“9V›U–Ö–Ìœ–XÕˆZýŸïE¸—oüÝ™ÕMuÅ â ¤ì°ô l§© ™çô+‹ç_ùiÚ0çÑKJg6žÞ…Ó.K°Ü8õ-×—ÍÆÑŠ´¤Cài98ß’ž]8Ø úpnÿaí):£Ù+ M§?Ö¸k`rf¸Niµû‰ÍÜÒßÐF³ƒòŽÑ™ñ`–O”!IIB)1ÛMcê¼’äÖ¹Žô„3=þ™'ÆOò8cšô)œJ¶Ë7tËúo°–jC¨<á„Èm7ðZ×X+”2â+ù_p!å¬Ü„·¯^C4Ñ÷ªŸÙî8¾^K7‹Äø,ÜÏÍFü¬1EÐ%2#ÈЄ@>9,mvÂÓ»ìuTq0„™Ù;ýþž~"ŠDÞ¢%ÚŒJf´¡6×—ž¸òN ºNàÄâN,NÆ\NÆ-sE_ñÁqˆØ«Bó— X œ¹mš¾uW‘–Æ™¾3è"=":iM„yºêÐ… É›>½Ð† EÌ»§íôgtZi¨_,ËÙ\”DGTY}fëùê9¿?ù—ÿZVroßM\ »H m#'5õ-¢’tG@ôlâØÄP}aÑêÏù¦H7;‹›Ò:¦ŸªŸN²:ýefÂóÝ"žCEŸ@Õ¬E8ÐNX6+_0|'T{gÙÄØî%¥Ç`‡Å[ôOÆëÓŒÌþ"iáÒ¸‘ÐÞºlª’M1e2 ÊôqKãÕª½6Ç °ðI`¯[62w¼nÌY>BÊJZ ½tY\jÌ»MdÇU„F¨TÜÂ3ÍÏI„ÊÄ#ÙÆœà!;¤EŸ†|Ï}Ëq1Ë7àOmQsÓL•µ<\ºMB[–Ë RS;Ý×Ã&Öš‘»>"çKËÿCÓk‡¾GMÐë Œüéû)ŠKØDBé;X¸&u§Í¹pž)ëvë·°KÙæ]}¼|v­:pµÔ{m©‡¾)1äkuT7»µW“PæFmª»¦;Û»ØWÆ»XÍoCW(0Âq‚`#Ûò ñ‚7ßðWonï€b,ÍL¾‚-<9nêê`628æpYwñqNÔ¹Y4:)´6û»}n€Ôü#â%±ÆmÏ‘P[ 9ÆÄ@ŠqO¦{ƒè•dK4 t¾Ýw­C`ð[×Ô².à–þõê^Ýhv.Iú©Ý ß­ÆHß×´ø$Ô–¶˜Hý§mûÏ{Û“.”&-?øº/;Ò})v_5bÎy`¶ ;uÄQ­´Ä(©ßD]Â>²Eû0V¹´†|Z¨XÑ‚ŸºèÚù:÷i„ðr[¬±rZ®£…ð™Keê­Â@Ï¡Èi“”1"†»´÷º"Pé´ØÄõÀ“ÿÙ«£.˜A÷v»F º:¹${¯!Ãóêï˜ÙfÕ”—x¦~'.mž¥ Ëd×§«zÕÌ7:¹J®ASÌSÜÇb “ÇÏ23Unñ)]cì1”Á4õF/Ø,”7¯z]Œ í.v¹è¡øþôœ¿,À‚G¨9­ÇÓ>–Fy"‚Ò‘ÐÒÑ{QßúÎJ¨µM‚Ï1ð êƒl9ŒÖ™!©Ë|^è½ãkïhò$ΜÜGS©×±t0Õ~6´ÚȺÙW1ã‘ÖÞÌü6á%+xá?|ýy×W?ðyÉl0‡Ñõ©¦dó‘1†o£ÆŒTÐM¥NþöÄ`¿ñS¯¹HöÿdÇXÁ Õy4‡ÚjhAaªa-! ½¶Åèa£¦-®pÇæ0ã½O‘,­MØ„ë¦Á°€IDAT9¥µIµ[[¤>» !„Fk?v‰ŽÐßðq f üh3 eÞ‹Ÿ#–8„69ÿIã6oÒL•\dÆÄó‰qj?Z]ènÇk=ß/DysÎfŸ3eúÐ4C®ÐùE×4-j/ÚgK6Ð$¬ð™ƒºÝï^DV“YÚù׊fâ²ÜEîCáCµˆx« ¨”›‡Ë;Á~D¦$mŠOÓ(à…ï::óâýžÛ‘¤±¾w¡ŽR¢l'$! Ķk›ÿæ‡þ´3åxÝÑ…ÁÓ_ýEø¶þ¹.°É˜Q´Ñ„ñ¦`_ÚØ™„]{„&Ù™\ uL›l.^és÷ú0™{Æl×w[¸½ˆçO#²£9L;Ê4OB j›Qé¨XY ;®ï7àë>ðÖª›¢YØ:Ó±04JÌŒ^*%Þ†ÛÔ+{·ÉC¥qü§PÌæ_‡,è˜Ç#í¤‰-¤§ò t(;0]—žém(â;uÕ­!I8 ™j:S¬kÊýñnú‡ˆŽ¤¾úœkð"fäÉñùÚ;mƒ}Áj%…-»ï…sS·²ôµVš”p ê¬XX"]† Ìáéoç‘vf›—ðöò„û=Ç»,\OG©/®eÌ0“¸í>gP),HΣ°*6±\§n’䧉c2‘P-°h¯tÞo_ŠÁ¶ˆØÐ( C$hãéŒÄ_F+p󖙊¬¡fô*ŒiÇ@zhÜ›#MÖ¢f&Rú®™Hèåv¨º6š¶¡(1öE‘¿ZÆVzO‡ƒ©Rø¬ƒ€¯ì—H2ñ‹+àï¨R=Cc&žÙüqH­3É6X>ŽÌ@iRµ£ ~™TSišëцƒþ:A{%ÌžÓî;Óª;ÞOdòËeÊ¡ŸÜ„Ø™íÕ0±Ì4J¥t7ÓöhÝ\Ò›PYT0ï<™ÝxÖ*Ú½!øƒY(?ñ®oØJ<¿Ïâ ÷ýQBˆêõeÁ5ݪÏjÍtß„Æ3:ˤþuå)ñÖ6?ýÕÿ6-~×Jˆ8™ „>‰yVQSëzÔ x!Ü/Ü…1£ÏPjÝ%´ÆóÅUú×wš6c¼ŒÐë7Žå·L¨n")gn÷Î\+Õy«hÎ_z‰ÕWÔç"úW£v˜G3Y±ÖÆ£ SÁ'T²ÒøgÒ‘;l²/^©Ã×bÒÈoÅŒÊÖu˜<ƒù&ÑIZoŸ»‰Ç#vÀÒN†ý–ýPÖuë©yº·¦S âU¤õ§WóZ•v_ ö0ߨ¸èäÑHùoÑmªÔ°à>ÄbP§ƒ¥‹rö8ýº˜éÕûò±ö{\2½¤ô®ÊWÝçGêöÁüÝ.(ÆžÃPh·ª¡KÛWàÛ1‡ÜV{.eñëÊSþbÏ|ícC³B qëŸLž‰ŽÙDòRáÖ²½Ñ™®È´\œbshC'õÄÈ¿ |MO' O–Ö‚I¼yÄäÞ×<9báv¶œl®•i´PìþŠÂ>Ÿ}.„SòÂd–˜¹}gz2 8ª«aÓd$_¯#ÆåŽ™ã‹[´“Àœ™I¦UBÚ)Bv‚àÙwúáz|ðx¢mæŒMkœ4NDRÛAcÎàUSûƒ*)ìDviº‰Ý³–Ø5“÷H¢N•¶«¢é=¢ä€ÏAví~åhnáZè5Iq€§{#´‘6Éž½i·íWÝûG¢]ðlò¶€)ñÑô½^øD íãD°„V`‹|¦JïåS?h³60A‡ü¸r†Bn›ÂâùUصqPw6&ôÜå5ºØœáûý;¸d¸nc·^€ª 4ÆKÌTØ™Slö”ưª›Ýðb[{ ÙlêlMxÔÆ ŽøaÚ@!]Bp¦¬JiÍFÓªž;(Úd$—ç-ÚÔ1f†öfaöAÌ L–¬šƒ¬;wY,v²ðuŒzäÌ6|+‘7ƒÆ„œõLý¬9Åg’23Ŧ2§s¦µËZXš M<ÏmøÞî.i]kKçBàT=½!8ýUçu}_jKÓ}ükpù®Óý!:õ®¡¢¸B´MªG$r#Àœø¢FE[餤ÍSÒ^$“íËí»Ä¨'F‚ŒŸC‘YÆ9Zœ®3ŸÁ‚Hn¯u‰m ÎÌ86®õZíAÍåc‡¹TTs/.8«`X Y LÝÞ¶c”r îvê~1†°JG„.4‰YÒ4X»Â¾™¬Ý_ø‹ÒÇö½pßÜ´L¸Ö¡f¹€6 -¾Í·þ©/¯¿G›J÷lb,HlØÁ¬LmJ}ž L¬ÃÙq‰qƒQ.® ¿Øåÿú¯qrq'䄘žì”4JãJg7'†ÕseíM1TæwçqNù¨ò‹¶<«\Aˆ"×Ä%­Ö˜~ÍÓ¨L F—4 $dˆé;§í7aY ¦Ðx&k•vŸÄF°TŸx5íïκ!Ô£4&ì0Ì3Ñbó·PO{Þ­Päìmb,¥û»Â]ÑÌ“ 3QDoŽZa¿Ó¶&n(ÅÍHµªO÷ØÅ®™—žKpœöÿ~§oçc 2àb”ýro>ójwŽÁŽÍl“ë;$'ÒRÉêg÷2œ’Lc&XÛ© l주pÛ ?bÚŒ÷@%œI†H ±§v·¶¸9g0ìmøÚîµ¶æÜœNµ'›ïí—bk)F´ð1HÍ"»¹i%,íØBë/Ð%¢%!!#ÁB–xâ#Ÿç¿ê[q!ÅMjÓ¬,h‡&Š´Í[†þóÒV©v‡¼ ;¥ÍçÈëÐÒLЂóó¿žô ý2ÁºØô¡/‰ÛÐ’ùÈs¼Y €O>óo·÷S¿ƒÉÓïôOÐí-h.Vš;ª ²ƒõxÐm«Š¢ŒëzT©ŽíÜ crhY]y\ ±;×iëÀ’Ω(ÀM!'†Þ³ŸÑãï%Ï—ÄÄZ(¾À‰ß¸.úºóWð*pÿ¬oAh+ÎÃ2ˆ¤ªr¡ðy„D¢ã>½þT"k–k]‘'«þú÷ø¡­Dô‚w|^ðޝMNCNéoö뻺ÍÈÚ¯a± N×kLTšà”¾·+ÿí¯¶3ÿ§|ЋZØ›õØ–„V ÅKA‘RB;ÄÅü)¼Ñ\¥2ŽÒBD}‘ðÀÉ奸t÷*\x±Á7$'(•`=ê5¦i¡™ŽâR6®¦EêøØ«L£ä¾¢·ÔœfëON]ÖÅkÕº€ÈõS¢]ì$.%Ú¨Þ†"…ŒùSŸ&Súi7È‹Ÿl¬}ÿ™)„ÂäÖs7⽑ Tºÿµ,DPD±.XëÕ5Æq…u9À¨cBÝîÝh€¡æs`ÎüCü×aS?ŽÄÈÓÏs´íH«ó]µ9$Ag/Æ{j£]%bðÔæÄ?Jg³Ÿµ›Æ¹µ!;x[Ÿ:åÚF$û&™–r>2§Áh`pÕ[1™îø„çˆÈª1jž/én3ÆQ÷²¼à_‹ûû¯ih2:ÆÈÌëdTÅ’Ÿ•©f‰aeh˜ÇïÅ%ä^{5óQ·é«6“‚!¡b¹TÆ^ 140û°¡'`,Å XD°;œBÑ5þ×[^Œ…,ß *ßú[ dF :H£_8Ái‘•"yÁ˜pdFW¹v˜KÚÜX´x±¸þxÏÒÆ38§9Ù5µU”„ƒ†ÒRh‚žÐ÷›×Õç©;ÚR:JCA‚> ™z­ŒkܾÖå"žõ°‘ž³ÁVfþ7WÖe y-eĹñ,Ê CÓˆC`‹Ÿ½Ã€ål'ìKŒvòò‚ï¡óLÉš~}â²ÇCL¶½FCldÚO̽?‚èGß+åoá÷umu¦8ŸÓb#¼8÷(øš÷ JÚJ.Kµ$oR3iq˜a{U!ãO'‹ç¹GRÅÑÙ¡_qÏ>tC˜•{ûפï_}ÿç"$³¢—Ò RÐÇ0ÿØÀ›£štþ¡¿ý²#µ§/Oþ Ÿ†Eýp¢§d/!‚3] :>%Ùðø{‘Mi´ùê»oÙ¿¿ÿ÷?7ÞôÊóêǶb±¥³è5ÁÚÐÏ€†ÜÍ\­£±Œ×xT¼&˜³Ö²Åæå|af¥éñLêf“8´ÈÚÞjIéˆ9Ùxûˆ ¤.°ÂlžUG‹:ñØL–®º´‘æï ¡×ûÍ ^ðÊï¼èó»uÞ70û¹ë«ñÁ¨Šýñ JiÑkJ®ƒ´àð刺³ÝÑôåg´²ÍϤœh®_¹nò䥪D_üû Ô%ƒxø*íkìZµ—²SÃDÔ}^äÉ+Ä“k* QŸ .Ù_@ñ4uì—‘cd¤C5òJàݵIûú“p˜ÚöÒ„€# +sÄ|ÍŸïÓ`ffi)nŒW±ÍiÀÿÝWëså[þSu0†!ìÆM¨’HU=¡¤S%œGâ~o-F‹ê*¨!”¢‚ÛnƼíçð–[^sì~l*×ìÞªŠ[WסHÍ0¾Ú~S…R´Úoy@æ8%Ú0{k«@ö1Æ ÊšÛ"/{½Ïl±´EZ‚-ËߟšSg¡_ôÀ܉ìL^é™@ÿ®MZ…êQziàg©¾ŠŠI°jӿľh3{¼rø›C¯Ë>D8XŸÅXÖ¹6Û)ž‹Ë´xQÊEŽNà7µ½°Ð—®­=ûâø^û¯kt‘þæq˜7×L:²ðâª'Ý"¯Ó‡íÚØ±€™É9ÛÍVžÛ¥¿]ÆX Ö!?˜$»Ú*/â%az‘Ã.æHZv¾Àquâ¿âž? Á ßy~ÙAà9ùˆÈmå){QEf¢5jE¢ÿaúhj¤_ï6ø5é›CGø XŽ ;Í :8J0íÉÂÑü·ïß„ÿïïa+óÿ•Ç^‹ÝáöÇsøü_¸Ç¡}üù/x+Ã.öÖ·c\¯à^’"(CËäE]éâO—R¬'Cd‚àûÜ& ÛY WÑcé "/g;ÝÎQLгý×PGípæì ÜzIh?™il~];à¿þæd²D"Déù;7Ÿ½Î«ÿ¸¥g*1òEZpPö0ÈcQt…26æ¯ µ¬¨ÍŒ@¾/ž‡~\H«ãk>¦¡QINSKÏyý iIªÁÂuc-ñGIs°Ÿƒ®ê°‘IÐ RzŸ!lN2×ÕŸõ€ýqí^ϬËÑóY­ÜxÉÝ1i­˜I³ð§#Gwë\1íFíH*cüêL¾ž®¨Fˆyj`;îÓ3„¨¡æ-˜ccüišªSùooøS¼ù濬óÒ᎟ÿ‚·â²Wc‚³«[ñüÏ|%YàñÿãûúØ_~žõéÿzÎüEš ¡çT¹¥q/šúl¯˜k„>4ä>Ä}6*®e LLpèE õ݉͘~+æ› ®Pg]csÄ ›ýM),w¢lbæ0©ŸßÙ10{c³ÿ_¬³.¬0;ŒQ=½¼ò®ÿ¸çgbÀ¢njÔ±Íû€ƒ°é0…Ʀê§È5æZãª/! ¤?MÍTó¯ "JÂ¥ó$ëLß“ˆòy뤭ä7ù2[?3&׈\ÒÄgoIÁ”„’æz"ͬ#€bdå7xØ™9¦S3-î¬ ·ø“&Ég€èøWÝûGÜÄ^p'8"ò[>ð§3âdˆwɲxú”©N *cŸê°tc‡11DÿÕÙ)Tˆ¬Ÿï¸íõøówÿ6ÍKÌÌO}îß⊓w…@pPö1–5έÏ`Ô5ŠüÈgü ¾î7?rcŸ¿é·>Ïø×/ós€Ð´Á{¶•XDîÃP§ƒHÏNQ/ž%4P‘ØÑb6¼â G!¤=ÀöT“¾ÙÙM}ñ PRN!lóø ·M· m—@p–7.)¥þª] søgøoïä6!nyoÛÿV¢½g×·â×Þøl\}â^¸Ï¥ïRjè§`À G÷ñÀ„¦e«´ò¶f¢þŽýøx2cs©†“˼÷B‰3:vm6¯‘ézòvçqFJÙâî¦a#MÐçäüoôϯIÚ¦&ÎTô"+3æÁóù˜—Ôër—f ò*¼#,Fb±Ù€DàüᦽØÕ”Ë-bôkyü}`÷Žá -ßøÏ~”xÖß~ùì}ÙÝÓNô1B£ñI¨Ñ4Ò‘¦aIÛÜUh–c¼lœ†aá3ba ¯½îc]&íüoú=œÞ¹ãƲƺ4óAE`£®p0žÃ÷|òoâ;þçgl—oýíGáŸþ²8‹O,ƒõA¡åí÷…Ë/Æ®~ç+¶ñOÚº#VšPŸUZ¯ùb´Àg4J''yƒÎ:€+j‹OTLŽ °ISc¤ÜZ”§¥3¹9!lÉÁxëMO¼ßsª¼™$Ü9Úœ‡>íÝE#REÏÄÏÉG8úeSïdÁàÌ>m^¨Ÿj(hq[®ï§zÍ- Ýæ«*/¤îmš€¢à·¿iÒÔïþÄ_Á]/¹²Àj<Àºìc­k¨¬ÆŒºÆÁ¸‡¢#²<\üÖ£ðÌOÿFx†¾cS^¿‘«Žq3ï$RÜodhÜ…€¢™„Ú˜í›Ó j©ì6£o_‡‹x1ûª· GÌøDVPšegÔ¤Õ’Oö~ÉqÌÌŒ¤'MLêÿ?!!pëÁõøów½~OÇbX†s—Ðeðvœ¦u_‰þ­6[ nlmËO3VRÞOp{N`e˲Òv)Fy¸-æŸmça£ÒÖ¦H×@Ä…™e/THaFmï Éà¥Cº%dõöf­Êú¤hç¸ÔßZò2‰Æ{{mÙñv±©Ží”þ¹ú¢ér zÎË“ç¾;–±_^ì y–ã~—š>,ݪòð´9šQ2 X¹¹^Vc‹#È:¶k]cÔŠÊWºµ´’#F]cUöqPÎá ìa¥{Xû8(û8÷°¿>‹ƒõ9¬Ë>nÙ»ûã™I[/?q –ÃNÝŒSö±.«¦¬jÝãT«ý\D\l+Oý­O Úm1ì¾cÖô¡Äô ÍdiNBÛ£ÄÍ<¨7eôl â»×ï÷£mŸ-ÖÞÓD´y dr¾€øŽ¿Ï2–ÌÀý:]ã¾:ÍY¦ÑöŒCÄÿs½FgÑx¬·Ñúå'®ÁW>ò¿às>àÂÏо£ËŸ¼û×òÜúiŽ#}ËKæRUºG&¼ÇÆÉF, [»Ö«[sE‚fØà ®Æ?óܲ›™ií*ïAVG¹b£U?ÕÏZ"ôŠŠú´k\/åø(Lz—?/>¾öäѪíøJ„Úǯoˆ=BÈÅ¿ª£™¸‰!ø´ ¤-dCŸ4Ú>K ‰ËêHÇ· ¾ýý »sÖ «\ ÁÙoíS)ÎäÑòU$^™ýþxÎôþxçÖ·ãìêVܾºgÖ7ãÌêfÜžþÝŠ÷œ}ëTˆ8±<±¬qPö±*~P¼oç¤Ç¿ù©IÐN6sv”Φ/§_ñ@g atS™!máxò6 íC©_êæ°”¨]kL9ÒG·6´ÝÃZ“…°hB ,4h§q¿±,ºh _'+l2 aÅšƒÆXk†®¾ô¸eïzüoûeÜÙËþx®ÚýŒæŒãBÊf›Lîêx§Yt^Űº’!4!ü,¤<<6žîñ:5ž8`ò•Dã…^™ùÝü˜,Ù~¤d‹V–Úü¸*g†hoâM#Ú6PDŒïà½m#hήµáKÑ8p„$¯Òó3æ,š¶xÞTO € n{>»1×Iþ WÃ^ý:Z5îÙ ½øÈjiHĪ`­ûΘ‡fGÉŸ‰ )'—§}·¨!P{÷\z\ÓÆ8ÜôÔßüT<óÑ¿w¢ÕL3X]óã²þR|$Ú¼¨9¸[>òa›úTƒ´êÍF>9ÛTìØ@¨,Ó gašöy$mÅF/#ÒhÈD¶-Ô÷Ø<€˜h<ðWô(“|c4 ÆHòT~é ÿ§–—6Àr€Çüâ½&÷ìgqÛÁ¸dç*§2O‚hü…ÄòÌ>o‡Ùv.²)»‰,%q´‰ [»ÌÚÎ’Á6O‚½Æ¢ÈÙdQ}ù<¢‹Öv椪ñ\ØÆ[Ÿ¢/v^4hŒõPº÷ZÆ8p¦Ã_|¹ˆÓáÛå¥bÊ-œUoÔ`y¦‹3a a ŒµßÝê7ЋêZ6§`LR¤"&EÂXDcvâWŠL÷C4µ)>ôÜw¶nÀ WïøŒVq­ƒÐ p©öÅ‚’˜ÿ¨+¬u¿ôÆïÃÅ.CËYQ I#A2ÝØCüƧžôaÏÄûßëN:tc¬ÌÎyž‰óú)í4:ßîK¨N|±Ý¼m!™0o&‹iM3ØŒ´à2\tö­±Vû“¿ü‘Ò"²H@„dôˆ61ÿÄû ^óö—ãÞö‹xÛÍ=ïGÞã“ðoñmP®>ywܲwÝE§™ã”ÝÅÉPVX{xÞgþ¾ú×?tr߻ϼ¾òʪÍň‘P°™E5æ- .1Õ6W™y·HhIyﯠ‰ì"æW¤íçQätÙFâu-muz`m{Þï§Wvæöýätðžr´ÅÌÏg`½RTÿVÍ÷rZ}äèråÏ b~ ˆÙd(¿$ö¼`o4©/<8~~§µŠ¶"³–ÖïÓóc #çÁÒ¾ ˜y÷´ÛnRš\G­š¨iÆüÛÑ.:b5Þ1Ìÿóv\²s%v'ÀSH[ëX`1ìÌvñ8æ xî+žŠýƒýЛJÏ&”²™låó›oØ~2½ÐnX¾Î¼¸‰†ÞÓh8rþĉbƈU5§ŒvßAk}gæ>b ]O6ãÎ7 ^çKßô“³Ì^õîßÃÏ¿æ€ËÅîE§™ã”_úÂwöÖgÝDyËÞõ³÷¾çì[›é³ÔDpm¾j¾«Hh¨‚H½Ý­?¥{Úp!˜­ItûAƒMμ6ïH=ùBCõzáû`&çEF’ùL8n­nÌxóÛs^U÷>¯¢‚h1ðâìG½^…MïÅ Rù!Qšã²ºx¸Õ•{ÄDÌ5ìXö é7g–½±ÊP- TËE4!n®˜ÎA¶Ez»rÒÔÍÐŒ¿BͬÃ}Ž^s.·uV¶_?눿»éñ‹oú^Üe9ìbg±‹AX KÄ7)26'åLÿa'Òöò/}t0pïºfv¦Ù9SMcº6Ä!0"Ã*3köÔƒb²“5ržØùJõ¢côÚŽ—3po3&{6òûn}Jí¥Ü?vo:W þ{Ñ+ž†÷ÜþÖ­ãüÊwý^üªÿ‚Ûöo¼Cèæ(å—¿ð]8½s)‚±Ô@†ýõYì­Ïàò×Lîó-¯ò$‡föññáHUgÄh#^„'˜€Ò.o{‰¶êÌî(=þ› !£ã\i¸|4cÅ• öˆŸib¹Ý›ÉGÁvW„ºgX3j‚ÊݵÉä)Ù°a 7ÝGÿÑŒ‹m±ìƨ‡ÖÀÉ@ ¼rÔ!b²ÍÓÀ¦îH•­4xšŸvg±äÉRh2×°zÊÒÎ7Fʨ§›iÆßá‚Nˆ@]i²>Ú(Š?{Ïoà×½wDù¥/|g‹þYµ£Í+ÔCL·Ù]TjMçûûÓGzï“ÿǧԱà¨ôH8ˆÑsr¾)3ò`Ì)t R›hˆçÍëÚ„JÎòÉQYÞ<-›hÊÈêŸI`ºÐ6}6 õ>&Fƒõã«ßý>–—ì\Ç=â?à?|ü/ýþOl&=Åk¯ý?øÙ×Þ1Àá°òß{.Ù½"C£¯¨ª›÷×g'ϼûì[#ÒfF{JGŒ›Ác>+aÊ›p›@L²­Ç½nr†å•Šç-ê­{y«nʺ#'Õô=™'™]éºÂÒÆä†HŒ£ý"Á'Re·4ñ´¥`p,^ÁGÝóÎ[™+ò©„jëÝFn¬Ú’𙆔ûÝÉ;W¢ÝŒ’‘ns'¡L%išïh´Í'jƒÆhí[{‘Ôî;`)0Š¿½ùñ·7ÿ1îˆòË_ø.œÞ½ ªŠ½õ¹8g¸qË¢¶gv¨Ûòe˜•ù¯P´`!;G~¿ '}Ø3ñÏîóÁ–Tù0’Ò¦Ù™Ñæ‡ ³£L›C®s÷`S,žF6Eç -`‚Dü›#¬ø9«k ¡áDhÎã³ „PˆqÅß½ëUi¿à¡ßŒ]ýAPU|÷'þ ‚ß}Ó‹±?Nì{£¼äß¼'—§}'ïÞê ÊÖ-ŒP 2`<7yvÔöªVKÀ°q¡¡ÑKšcŸ‹!¨¤‘ÆÎ(ÚÉž ïÙ!(›4»fë^\b'@)’môFQššOmŒzÙ¢wm€šž@J’K»þäCg¢t|œ^i¥žëÄQ"&eÌÔ»GU»´-MšæE‡˜´>_¨c*±°²£ŽÝ »€!tž†ˆgœì`J/߀ò&g?Åž_¾£ÂÂ3·àU×ÿ.î¨""X—έn‡ê¢uû}5£D¬uMC½¡ ‹–Ëaqd-ÀÊs_ñTìïíŒôYt›º:rÖBáš6¦d²áƒ`LS`»BèŽömg@r¸g8!CÛ°ßýÏhH£/õÔÏl®rm€–¥ˆ°‹ºëÃÓø=ઇ¡žì¶¨‚zXàÃîõ©wÝl+¿òØkqÉÎåXÈ«r€sëÆü›†i¼¬÷pÕÉ»MžßϺù'o2Jƒ›òŒsòô»ƒUAÎ~¬ÁX•æ4±ûÝA#¦[¦Ýžw¤h¿‰‰#ü,sÎ’ «Ëëm4Ÿ74Áý¤Ôt> ’ÃlºlæH€Ô7í~²Èœ?–9c&Œ‚½«&‚lò¡˜p×bÊ LÒ¹À$ùÄjpIÅlH>÷Ä%‰éa©Ôp2%ÂÌV»a¦¨ì4âÏŠ·ßþ7Ø/w Š3ÓÏjÜÇÙÕ-½/0#—9ßì âRF Ñ…zŸˆ`*<,pry þË'ýÚ±Úóï^úhßUË2ÀßäÌ6&>ìúñøtàËÔ®öõôåƒ`‚OÓhŽå8x&1or=E¡E:Q_¡&Hl œñs Ygrª„9È€…,ñ™ÿì‰xÔƒ¿ì¡Må¿?ö:œZ^‚‚‚³ëÛ±·ºÝS<—bG;ŽË{ãì.NÍÖãQhM;—öÏT¦À`ü”@‘MšùgìŠ]ëô-@Š"ÍÁÀdÛíCsדšïmõêÔfvùs´Ìl‘>4c‹×3½MùOŽáuHã6Åíþ9‚Gs6 @>TÅÂÞÙ ä±È;¯m"É®îbÚ.Ö %°ÝÝï ”°«¥ nm`È.¦àÜÚ›¿«ób~"ìØ1œF¤Þý®³oÀQ~õ±×ãÒÝ+°vÛ^‚¬ÖûË* ·Ðâ}`³y€øØ.†%N.OcwqòHQA\žükŸvyÖ|^Ñêj¯£?:ý+iíŸÕÓÂn4p $Û}Fõ¦yØ÷b>„ó±Y/Ù#v[ù´2ÞÔeÁœ·Lîéé,Ìrƒ,0ÈE >ô^Ÿ‚¿×£îâò’ónüæߊ“ËÓšÉg<ç› ×eÛ°gZÀ^ så–ƒkQZXÅ6óµ{L‹ »?Ò÷ÐÛÉyí4=›«‚ÐÚ<‘3vÅÞmáÛ <Ý<ì÷¢c²ð"» gðµvOŠÍ0ínª‰ºÿ¨ô—^îH¿ñ´T·J„,›½±eõ3aĤŸx6F¿­»‘ç~zø9rØV;ÀÝU8Cø-ö~@0ksÄä˜| ›Ÿy­£j$›Fψ-¾Ÿ&ÄNà¬ÏK8q¦^ªÖsÛ°nÕ$µvƒk‘ Ö僲‡må¨ùúí¾º'–yí¯Ï6Ç\;¸jNº>[©e:4‹zQ&ÌfeoÄ·XÈ"ä1Ë“í“T¿ÀÜç‘fœoÆ^[4&ÐkÄYБ‘ ”Yโ|€ÑÅ€÷Ž´¼ÂħÑÞ¡Ö.ûëxĘU¹Tœ¹k H& xsšæÿyûÇÇÞÿóü¼EÁªìcUöðá÷~þü/;ö<µüÊc¯Åé奀ƒ–B„M>ýT͉¥1õ³«Û° 9]ß‚K–WÀS˜C}ýù<úU ¿+h7£èÒæ;è·Ž}±'õ®ùÅ¡$¥ƒ¹’°žô‰7ihùΛÌç>/å¶{-<§@;}“Öò¡šÚxq¯ ¸B<0úÕ] ¹TÀ‘2žiŽœiÁücML!}Ä›¿LX4Q€ôú˜ƒ¦Á‹µINÄ6}ª~L[¤Šÿr &rå$º •#y´£>RH#Ñɽ4n X oS‹ÂN6Ï×ÿY¯Âîp—¸:9³EœXžÂ€ÁS:ï7‡ouÌ­Ú~ƒu»ŸÛ§m·¡«ËÖ»öy¢Z÷-XTÐ÷üáãpÜòÜW<ß{×ßÀ‰ÍLPYÊ·yB ÃR†Û\Ù¸£1õÅB•a5š!Úwfï£-6ÿNR=ñªÜÏ9NÚ‹v} !2{Ÿ'——`o]s:ýÑÛ }¿Ïñ°È:ö+ŒeÄbXâëÿųðì?û¦cÏÁaå¿?ö:œ\žFAÁÞú,Öã¾oZ4“ K'R´æ—:÷qùî5¸þì?Lê}ý†kNáòkh×}¤è5TÖD+:ð¨çD\àYÄ7”Ø«tà†¦œæj[‰Þà"$ñgÌ6çÒÑR{8¥`«;«Dw&¤z÷t=…÷a(Ñ4–™˜kT †ÄøúEG ÆêÑüÂpJhÞ‚m^ô>Šã´¾SiMPÐ=NÞF’2¦òu|$ëbÛ µ–ÆBZý“øú–½sv‡©ôçó6\º{Er²[ŸAuÄn? [~ÁÁzg׷פpã9ìgÜ6k±ÙcY#X{ñÛ;§Bôá6I>j9¯¨ ¾ü»ß~t²}»Rɦ1Vã«6œŠfCG—à-ü…·ôÙt2%uŽc¨Ûè͹l&„ä nßKc0ðþØ;îµ>ÅzéÄ­Üý’ûûçÅ ÿ<êmç–—âªSwÇþ¤_=ïyèËqL>¶¡«´4&ûã¹–nü—ì^>[ÿny%ŠܼJ£KO Av=&ôƒE²…iGMk¥1ä} P6¥i©>L5¬ë "YÚqàÙèñê|Ü7µËvÖkÐÙ1ëk”5„ΠO¬Þ5æÐßãyfÅÁ¥¢Þ :é8؀ś»(Í£#DÜFfj9÷±÷«_G8±8Kw¯Ä¥»WàÄâžþ)/ÃsýŠóž  ú¶Fù´‚ci›aÈ¿`]°¿>‡Õx€åbËa~‡ò¹õ­xϹ·@µàöõ;#¾èèÑi¥1ÿ”y¶³2ê¼Ä.ó¢í¹îÙÌ»¦YÎ.å)–D<÷Ïû©œÑG-Yˤß;KŠ٠Á/5Ó>I%ñZòA>âšÛÓñ¨M"qéjˆò$­ 7@å“ûÈ)ë"ÅxK¯¡UuÊÏ n‡|¤¸üfêaC‹Ñá->!dfòý6êéL{6ÛÁÂr7§<ê´^ëe’À°ÚMƒ|ù#ñïþfou«±¢¬U³·"ªg©®ýÔ¯M%Ð}§Êü›TcY…]ÜœqÞ°«SÜDâ°S8랭Ƭ Ðà[~ö Üû‘<Ù1UuP냠ðvŸä¾ô®:lG ;«‚’Úr$8ÃF|(ikÎdÉIÁê ‡3S“µöôÎåt]ý€Ÿåpƒ,pr¹ƒUYbwq‹æ¶TÏ}ô+°v¶ïÉÅ|H£®±»8 …âÜúÌ‘L>Ö'm`Ô5¥ §W;ïÜx^ÓŸá÷û`¬Ê9œ]߆SËKj¢?b܃6›¹ ºùYHs7Ó‰6b x7“C¬Ãu<ö}üNŒ4ÙsfìžPÐÁqüf4‘Ü¿¤Vø.b,l™ŒÀô©“úüÙÞG×™C§íÈe™ï¦–ðveI}@˜ êÆ›Ááº!w{†2r ˆÅæ…I>r(“^ƾF"Æøkåi‡°OÒàö{ÛüåÎnßzG£>7B,’ÁÑnÒ[ C5]¶{ì§pPꆙ·ßò·¸Ë%÷ÁX°Ö­3f1*AߤÚ‹µ.ÍcdçèŽ:VäoãÑqdYÌg±Öe&§C=ñL P×ÎÇÀ幯x*¾÷.¿»' ñX’Þ]ÌÏS!¡·]ÌgA¦Íî£Iܶ- Û/GåðA«DG\`÷Øq†q0ˆ/¾ÒlÑÂÄ|Sm² Pнõìçpbq '—§Ý?´(5­‡ÈP“±ÉÂû¿.+<ï3ÿ'§&~#.ìC*ãXÍ7:â ¥"7tFƒE FŒÐF›ë&Ìî?–ÁÉåi\qâÜóÒá]·¿yòÞ·ÝöZüõˆ‡^õ1e±`!'c ·Y´ ‘^WCìP¨ ΢”ØÔæ5ÆYe~×:{?榕Gp8_¤…i~A5i³/qÞ¶Xÿ™_¹° 1Îë¼³sòŠùB„Hóý#¥Tt®^•tet}IîЉºÔÛ>IЧÁ$ãC?ˆÌtÛ˜{ÕÉŒ“:)ÛÏ\› “Í£ ÂI-‰6’G V:á&ž×]÷ÇuU3ƒ6Û½ÅV[|õaÿê¢lË£Åg—‚q\óWE)í²t Âîo„ZV{Õ¤u>{æÊ¿{é£ÉŒcˆ¹ *2çxÀéÑ“ºÑs"ÈÄpýk‰ÞÌüSL ”¨':™f6|ùf3öC4Æ•™ #ù³§v.Kã2ȧv.éKkæÖ¦…‰ Øi¦O.è¶óJousVç;²ÿ‘io}çÖ9¶¿7ùŒºÆ8®±.ëv¢\«»e!"X ;¸d÷ \sêžø€»~8®9uÏÉ<¯õ¯¿ùOñ×7ý²cÑ­ RZ®[-R ÛÀ[Žª‚"Å}}¶»µ7ȰË9ÝwæœÉÊ6&ísXiÂ3ÄÚš'æí6$ ÀКN "Rܸl›´ÃÙG'°àv+ëjðGc ¾¦Ô×MñŒÒ;{´HШœ˜¬kôzÂV3%B?[ª ¥-ØC@ÀZ«§¦v*·=î 5‹‘Ù¼ (BT3ëÏ]35ÔM/šh‘Ù_]ûGŽºTöê)Œ¸7¡ncØ¥ÓùÁÖ¹6hŒŸÜPÈló%‚¥ì`g±‹±Œ‡¶ë(åÉ¿þÉøþÏüݘÈvoŸŠÄçǿԾ$±[«å ±˜s‚»?´¦™®·qè\T”óÐØgÍÓ®ñ\r\SU9".º0êˆËO\ÆäÔò²°ðh¯º)lA]ôßfJuÄÞúv7ÍjÈdžæ=ÐÀ?·ìö'uÙAçµ µ=‹å%¸÷åƺ¬°¸çƲÂï¿õÒkßyö X•}œ]ß‚¹Ë£0`YƒT þmfä:^cg3×`‚@£1C_‰!3åéŠq^Çš^Ì'¡q&Á6v…-ßœ8qJjZCnʱӾ$膺­eïmƒòΉ¤«5ƒ’“(kLùûÀ_ܹPØF×Fƒ·ÿÚ ’ÙņnÎÓ ²GÅëåNû$H716˜îìÍ™C”;j ¢æá| G_Ö’$ñ†Æ'¢ÊNè¸Ï2jЉàþ—>Ìo»öÌÛ É? &røÇb<ì_ÃÆ!L»P+ª»®Wrã+Y¡-±6°h¶gÁp¬dq‡•§üú§Rˆ‰Ö…aç('TïÚÂaÛ'‰›qN9Í&J"Ǻ“ª\Û@0&^­=|Ÿ)žl¶!BA=ÁK •jcODi¡¹Fõå6ë²ÂþúέÎàÜê öÇ þµ Óu¢9;Õu5)z‘1ªÝ! ,eËa ÙÁ©Ëñk‰÷»ú8½s9þÕ¿h2Ï×í½¯¿ùÏðgïùu¬Ë~Õâ.ŒŒÎ*Ÿ«¾ß@3aòVÆ…8[gƒ;˜ŸqërÓrrѱ …aëL¢˜õ$SŒ†YÓïw.9Á n€ÙŒ_Ù&ÖÉ}Ù´›¬3_ƒÔÕ=ÿ€†.IÆÐèÙ=s2ØlÜ<š:½ÛЈ^eJ–”(Ÿ”@qδÝÞH; zGÎLÛ½­Ì’×Í( ÕÂæÞïò84CÊòCb\ý^'Æc&!Öæÿæ°+žö¡1ÿ>¼pá”LA1}aöBV2 `lÊ—‹f €§üƧ´0ÏŽysšf£mCá´ Ás¾ $˜y«Ÿ/MF©ÇÈÍÌ”QTѨÃ"é8/+Î\ê-Óý!Ï|ùãqnu;VãAll’âÙþÕc˜?ø´¹µŸý¼ÖU0úþ_1-`l×Zª5ÀÐú‡RO"+£·ˆT-“R‡œ\^‚û_ùxÈ5ÄeVcåæƒwã•7ü~û•î·@umÐ&|Ö¾¦ í$44ðGÌßDzå¾òs‡‰¯LWq0a2¯çS²4x‹-ÖGà5 u4UG]¦ã]`à1i½ šðK™4¹²y}÷씾g*$u7·%V[t¼°Ÿ™âó†£ü"³Þpœ¯£zÞ¦­$ç;QœLj!M‚1¥^íý˜ŽQ?.àÉ 6Ç…0™ÙFžºØV¸å NrdÑm·hе´Z#?NIþMÿ’š0 H3½ÍŸ“@÷ü-ð=Ëa'e‰¼å)¿ñ)ÁX ÷_#¯|)d§G0`-¡€ûR>žÈÑÀÉßê÷DÅÈ…àè5 ö3øéNoÁì÷|=ŸÑle‡~†E –egÖ©Žð±¬°.«JK%þº`5îÕk‡øª Úûë’0æ?Vÿ1DÛÛbYeíï ì 'q÷Kî^ù0|ÑÿcÃ2*xû™¿ÆÿÍSñ–Û^àkׂG?m­&S*_ð\U¤¹ jÒ¼¬o·wÍZs›éƪ:ÆÛÖuXÅèÚÁôaû÷ÍèÔ?¢Cɼsb.°yT›O¥w´{„fÝa>Wâ®Âoà ɯîš2!ÎCK¢™Tš²ÍØÉ E…ªKUcIç{:Å#Žúʰb¥DSø‰$`„`^zÏ }ÃhùàÒP7g\ñ0ËÖˆ³ë[ýþS;—¹pÄ%þ\ì´<˜8ˆçþióĵæW þ„)H¦}Ó dëuijöa òqäX~ Fn&¡@õ%&“ö$t®˜KÄfñþ¡˜y1Æ,òO{ à1ÿiS¹µeus½l‡oÿÝQ׆º`9ìøó„†h~l»sM¬Jcª´ö˜)ƾד»²Á{Q¿Û^4!-"¸âä]ðÀ«ŽïúØŸÁ¦2b—þýóð׿ eësXûXëÊ£¼FŒ`'ð€%jêz P0ääL½šÓ€õk™´cجá'ÿ¨“aûHœH¤4çVEJRçê‚?þίÇÅ,_ûàC¶úus@Yƒt¦8Ú„KœVÛ~ÿËŽWßXSB_{æíx÷ío¦“”Â…×ÒåÒr³ÌöÙ´E¨–ç»y>»¤TþVg5US{Šq³vmǺ7€ËSëQxÆ¿~YÒ¼ÏÄÃFzD!¼‡„Neh·s8WÑúF“læDZ¨FãÌ0X¡íI7²=O¾8¾^tÄ™ƒ\N./ÅÉåiì »t´gÌoÜLm³«ª©‡5×óš·Ñ³·ºL:‚2›Š¶Ãéƒ~dplìêωÅ)œÚ¹‚áÐ3¦ÿüº_Çëo~9>óþß„ávq²iÏm#X@°ÀÒM;&[úwÓ-Ê€ÁŸFƒR2rdÑñÈ«Œ‚cà`‹B¡ƒÐtp¸}à'ßõ¸£Ë¾é [~í´“n<ñš¡m˜°h W€»Ÿ|v†“XµÄpwý«ñ~×<ßmyàÃÒÕìÁÂÙüíÁˆç‹1„š ÅϦ¹rÊ7Êqj †Ë»#ü 0ÔCî³àº7À{@hÀt1M¯µ¹âæäâÏ)Ó«ýª% «Åöd­µØ“γÀaY"1la#î@ÓœàQqë¹ñ†_9;Wž¼‹ÛàÁë×m¿ýñ)Ú}3“g娇™ëø€ ÕâéŒ[(G0€902`ÚÑ¢P,°‡¿»á/f‡A04ÄÍ>‚`Bd˜srãêÇÍÇ€æaøØ 5}ó9x«l­K¤o4ðq!/zãwóÀïÂŽìbGv±Xì€9ÆB–í¼ëaf=„• ïqïG02 ÷tëšÍ,¡ùeß!1à3 ßôš[R²%e­­ù§x²FÇâŒÂ@Ý" ¤³¶¶a Ìš€j÷7L?™‡%·…NóòÅIÄ#¦ ôÐvßO_ûÍG"Ö¬òì7<ðuïÿc•É’oÄ<ö‰£X*†‰Ãxçmoòé´8ïªìÔ¹¤j}’¹£ Úe) +Á"$|šÉLP›™ÎiÀúØÒ7—Úîå°sÄV¡$ôC&l7¸e¯ƒg¡ÅL³Ïv)®¼.G`È‹Žã»]CõEž×unµ¬Ý»^àÚ3ïÀþê,Ve7ž{÷ü0ˆ6ăÀç_M±£Ÿѵ«­ ›[¯%Ñ\"°@‚’Ö5<ßT}´î ?¾€_zË<æ߉±¥D9!§°v°?íŽt5b~pæ½14¡ìÌvšXÊéßÁ}ßµ[ù.G³'Ù”óìÙ—€ÓÁØÓ¤Uv—“ÙÇ ‘hÅÔóJµ±~œ5ÙgÛNÌÞòP[¼7mpöx96¬Í°/ºŒÿñ÷þ‚]ƒÄ^t—¼ÀóÞúÕçý®ù»j.úš‡<ÏQ¿ÍVeR„ů7DuÅîÝpÃþ;çV·»XÈC ó«Ì'!ÿiÉNhÌÞÁ> V@{†›¼ä8sF×FÓœ…uHkŠˆaˆÝ‡ëñüSFO 3XF´íCqŽ>Ú:°íïžáCÙ§ )wŠŸëÛ‡áuchþ¤È±€i÷Dø(õ¥Ý»*™ùÿø+¿ëƒÁkNEgÞãÙUEÁЄ¿ly‹¥ÈW#˜!ha2Pü>ª–ˆ’„ÀÓ?åe¸üÄ5xÒo|Ø¡=ÿ¥·> ðÅú/ØÙ9‰ÙÁ Kvçt&a>®JÙ8&}%æîCÙiˆ|0/5k þ!Ñh½GHƒè™xj!…^›qACM`S BjÝ«3܃‹™ & úqà±J9sà+ÂÈž‚W¨´Y Þd(ð¢¾åP"˜+_qÏgsŠ žW­ÜÜIJ$‘¿úÏKÂA<ç-O‚$T¶•†k1ªº?!mL™S€SŽÛìýˆ'h ¡j‡}È¡í9Jñ°à ''Öl³Í¨(iIÍøZ 3ðˆäá"¢‰†86œ×¶ò°FჄxξX}°χùošÕ¬Æ ÁÛÕºKtÐØ&:sŠR}Ùø„o€ózÅ@Y¸&OKMk½ôDv?ò‚¯ûÍÌ/Õœ“…H2¯’ðf®Íâ@ (ùìÝ BaMW˜[ Ê ™ô>†©˜ ‚ºb7KÜ ™ì‹ço«§.nÅ‹¯Ê‘&¾ì?䦧jL ÙI˜¤}‹™²ß3!Ô› |̓ž@ðœ7?áÐ6qyî¾OzÈŠ,Ea4P 89\êÏÓ-†%v†šV·šSæÁù• N3!˜!ÝÅ›[ئÝ3”ÚFJŽšlì[?úxÆ=þÂÛ­ºÓôä?êÍ, [<£;¶ÁK,š‰³Ö#‚²÷Èä幌Ó3¸æßiiD«°5™ü¬´þYn~SÖd¹.{0«Daú…ù"•ßK‰ìjB¹sxƧþ®>u\¶{¾ð—î»±mל¸v‡“mnÖP,P0B—ÄkÍ>]?f:Gþ$¦ìè´Ï&{z«‚4khAWm2z5³gþîs Àìlå!ó¦ÆoÔÆ¢[É ØBiª OÒÛÔÞß!ä´Í4GµÍ/…ÇÝýYø²»?ËkÕÄ•lTúiØy™CÐÛ =ìÏé{/(ÞœQº*άo¦A¯Žß尃Šì,N´¼ê‚mªúùm¡„#Ï { zÊmmâC½cHÛ›)kg8yÞ;„Ÿþi/õw¦éã@J]Xÿœ4ÒÆ+{\©~:\9àÅ$HBã¡ç¹ÝV×…!ÿ:%p ô™¾ m%@1þsÿ‹w„ÆšßAš' xá´÷Ú}CóoÕ]kìg—ìÔ‘Æ=|ñÿsã(œ\ž†È"ÌÌàðݘxÓÌ2J´ÐÍ©ƒE§# IG82ôÌv÷~Öì?•îĨîx”5—nôÓ¾#ÒJU¸a­¼ïÜÒœ ]¶Žp® ¥{=Û¾ÙŠJ¼¤~ÿ™·£ÿÇÝíñ¸»ý`¦y&H ¤w&V3éêPçv2Xuš¹¯}¿àëÞïǶ¶ùùoø:'Àš ºLÑRóš@qÃ~›wn}v'pbq '§°3œ8Rò· )ÅËîf§k0a÷¦…’I/þkᬧw.ËIËŽXžþi/ÍŒŸÛ)ô'Öw½FÌÜûÖ°>#-ª[¸¾ÎÿзÇ(¥iœD€ÕúÂÍ>iÂ'“Eƒx±™K‰ÛÀØÁ¹‘®i¬2h 1“¥u`,l”ÓWs èã‚ËÓØ]œDÑgW·á£îûh\²sņQhFpëb#Hدœ;ÊÚ0~â¿éDa¶ÁSxœãzbÒtVAÖ2ÚÅÆL|œ…¸ßÁ®ø¹Ùmû†1ñz?Ÿ§°Æ2ÞkeÞDê®oR&B« „|ºb\íI†—ÍåKïú°¼Þ’‚ä_ðEÌÂÑÛ#Þæ@p“›;@¼jÖìÒDî×¾ßó¡¢nûŸ‘…vNÕ2ú+õ„§ÓX ;vS²åÝe²)dÖ¦¢ÄDÒxÀ&bAÄæWSRÁw~ì‹ð´?üÒCÛóôG½4Éhk·Í/J×ɪ…ôùú]ºÉlÓ rƒHW/ºz¨Û_Ñž]_æï¡”Œ¨ …§ÿi0£^¤C ˜ßå}ƒ¶ãHƒpcýöÃfÄ™¤#µ}ÀÐÎðߪC¸š‚–ÃNË“UO?Û[ŸÅ™Õ-ó +¨AFÅ2.KÄÂnRíå)æ~C_ŒYM`" BÈLxªä`ÍvE%½_ÛYõJœcÑÅãùcöw:¿‹ àq¶Â¶¾ók—[olíÌ'n!½=ÐvÜ+Z=såKîò¡.<úD´ÚÕü†Éï¢Õ› ½ÖövÆ(£ šl™ÓѼµªžôàçá¹oš ˜Î‡œžP«.§–—¹Í¿èíb\˜{!S2âôëâ£ß®„ li¨¥©ç6w›Ž €ï{ÔK“÷çyè;”ÂÚàœ¬ì±}j^€Tgš+Cï£aéP±0amÅòÄ× ãEsøvùZƒÉ'm þq€€k”¸Ñ1Ef`õOÁbz'rHét2tTƒ†a€¥6mè0ì@UÛ¹ÃûØ÷pÛþMøœø:üêßþÈämËEM3ö*8ø‹ ‰¥½ß3mgí1îšAë|·¾µ@—Èz N{)ÎÄF¢‹œ²MaŽò5ƒÑÈN¬ÔÒøÓìœÅ#Æ¥GBI+ÆÛÊ\äÝî_ȃkãê"’~ßUé2³â…ÇGöLÓ)@’¯ -ìúƵcN›J)- ¡VX•©âÝçÞ”n·¤ZhYï8Üßõ§ £×éb©ÔhІ“ê©ÓRúÐ2‹ æO{ú£^šOrêL;é·îu΀;¢ž{Æ5‡á§ ŒþÂz?‚‡—Ú­$`gì¯Îâ†sïÁz¬IÍ.„ùß¼w®8q òÑ¥AK‰éÛ\ptI@„¡ðvGh‡ðµ5¥Ú2uÆØ·Jl_‚Ø¡C‘ªÜ¦¤š‚F]c½ºÍÓ]¯ËöÖg±?žÅ¯zúòŒýS@ûØÃ¸[΢ æ‚…|„Úõm®Ô³#‚PzÚˆÜ<•||ÒȱÀ »…cãU±{ƒÅDæ¡9z yþø]Ú ù š%¦D†r4ƒ­R}=Ô‘äŠ"Wη:[} w`ÕYŠcõHêÙf  ‘ÇdNÌV4UÑú¶aÀD²ÇStŽgcU@%òóç¦m¦.j¡èuòA6²)à1æm$ïÚrzƒäÏéM53ʤ?O Ý‘Lš†¾éŒúÓïÔc° öM¢„äPV¬Ö¸áÜ{°¿:ÛNܺí"C³ëFÚfò¬$æß› “ÿñú Ób<»l7§rŽBK˜Ûz³“îÖcMLgÇŽe³«ÛpËþ ¸eïzܺn?¸gV·à`}¿ÿ–_Lcðƒú*ìÊI ²ƒAÛ^g²B‚8ìàh{>6Á©H£ÌÄ書oͳ Vd^ TÒ Ø¾èß@1°ôU£“Ÿ¢£é”–ç(L¿c7Cúá(¼ÈPtò†©µ9 l%ЍxSû^|ý““DeyƒÓPiH„1ÉÚ½;¦îpà ¤ùk¡ù8L}Þ›ž4?, ÏÎ42bT íî—;"âç8%#Iw›ˆÂqäÄDÄ iÎîF…"N.Oc1„‚ùm/û4>Û=Ùà“Ÿç„BšK¾†¶òú„„ áœï½5„hQjS-©!üݘåj\¹Éç`Üÿò»ðS¯þ/hfn8ûNON?q„m:s¿ ²ä9TƧƒ·ý/5iˆ>ž:é@¢–®ûòÊwýÏ–v[À¹mx|<4—þºF` KIkІ¯œ ¨ "Ò è‡ù¿ à$‡ÕÔSφÀ7‰ñçïx)~öµß›’â Xâ³ïûœÏbo<‹Õz¯C\³›š}%Ì«íXŽü¹å HëÄ9ŒaXÆ„ù~Ö‚HŸ§ÝW“n™HÙŸ^^ôÛfÞÉõ¦õßûÓæJ»¾Ý`7*f*ía›ÏÝnšAاþíUÏÄÏÝôÔ¯{ÑußøÒ»þ`B}S _ÌDãL‰O³²Õ/&UÛ÷]†H—3«BecØül(F ¬Q‘ñƒ´ ~á­ÿ9ÝÿÜG¿¢.p”ñè`;£igã~!0£åtÔ¾”fªÎè ùÙéT†=Å¡3+q‚Æ‘Q}?ÕÁÐva` ·{.ù¢4?ËuMœä?õ¯GTŽeÄÍä³*ûX—ƒ Fý\Þzó_×Dâ„Ã(AðÎÛ™꿇þìŒ_¿w:ûAO`‘HÚìmuKÇ“L€4Ts[]vFE­iÀ›nz5~ï-?‡kϼ벚ôýËütüó+>ºr?b5Š®ÛÑ –Yxè:D‡e3Ïc:ç<>–*6„åφ²ã;yÇ´Gü‡MÐulê³ú‰äŒþÉš¢Ý5kƒv E{Ô2ÑRf€ €#Ü•šÓÕGÆg¡IÂBÀÛªîÈ=JyÑuß øÒ»ý`r¶ÁæÅM›¤ƒä+í^s ýÀinϧ(IkŽ&)vúTWv»X.v¡ZÏX-2†dË;@ß+îÈÚü|uÖ" Ïì3šO¢;-ÂÑX¥ªç¥f#júÖÖoÿ˜ŸÀ÷ýŸ¯PMA ”„®";yÉäÒ;g½=3ݵ{’ó>ÑKô%P#=Oï³Ë¥1¹³·áÖýÝÑ{0î]4ÔÏå–½ë°*n«6-|Ï:kŸ-¶Iæ!®8°#r.z¦XRqEìï(šs'3ɘ¶R“2¸09sp3þúú?Åë®ý#¼ý–×c]&}þ×|6>únÁÝO>¥¬°Öu -õt=?”I@-”–Rƒ7`ÛZ2@À!@Îs¦ÝÊ0”Pè":Í&ExŒãjÔd‚AÖi¢yŸN¦`‹ÄÛИøm¹õÆþé:*‚iLNÄ6hþ;’ŸS¡ø¢«ž‰ŸÝ¢pé“ÅÙî`‹æÉÛxÔ<Þ%*ÍŽ CˆW{üùo}ÒZ3-OxгÉJ \Ѫ Ìl}6»¨O§ €Žß‘Î&UžƒüÖï<%>/Z Lc‡Ý„ ™4*ËYJ+ú—vÎn=¿u§íüTTFЇ…~ûË> ß×vþö`e²å‰^óYp<’žöÑ%¾·Y¸Ëô­|Èîçâ3ïóõXÈN;^1bUýgm)JKµ>v2eȺ1t/œ¥Çøe~üiÜ{&~ Íü¢ùsÒ\èF“3“, ˜,”£ºÿp?`–IK|Ð ´Î³a•ü‹®z& ‚Ÿ½ñèyà§ÞóM“k_~òÐ5&ʹæ‹(~ìí_{Ì›–'<èÙTw#zÄQŒ†‘ñmSóÏNKûPÏÙå3–æ†^éÈLj.ê5†@Ó±\L› *|$†]Í0~CŽMà˜#PÑœŽM#03ÀR–5#g µ¿´óf¹|ûK›&@ëk.D”í³3‰"Í«?! ŒÞI`Âúsfÿ6Üú^düV~÷ñ£]Ó ;[ƒúxž‘ ÙÁ¨#V嫲Õ‚së3³cùísæ Ém¥®„YG‰éK¾Ïm¹ˆ5:±öcF¶V-¥…+¾÷¿•û\þþ(Zj(¥Žhy.!ŒºIYN9*ÈN…«Ý-yl LèÌ@Ìøí>UÀ¦šq ˆà•ïü=üÏ7¿ãÞ¦îáKô=¸ÛÉûã’åUõt/¨®1…btÓéˆh©Ú¥9¦%Zª¯Û%g̓á,åÌê–ë+`lÌòYx- Ç9ó‹·gj ò°ÕtxŒÛ(¼UI*p5}–Ó9×&F?ÇÏÛß© hŽÙw+trèuИ÷4oÎ2»­æpÎ ¾øêï.PÜ‘åI|®ŸìeŒ0ÛëÚoô½tTøÜG¿ÂÍ!…¢m<ß¾y£Û"6'ÚZW~NªEY -Xø2`‡JM×íóØ£+-£bã’J59ŠLöãö‹Ssä‘0x*ëu ñ;÷p°ÞÃþxn㸺è˜ÿ”æÈD¦š4¬œ"בR8XŸÊˆ½²‡CMSüÍø­\~âj·…ÖVšcŽ$˜™íÚíÃuË”Ír;Óçë! ]/³ãûÛoü üÕµ41õ°/àñùì 'qzyN—6M³…“íoçrm Í{=Ï!´"7±uÞßC%zš-)EÊŒy…±V¬‘N‹2YÈ!·¨@ò#¬Hb¾ K>}®þ·¨N›Ø3üÀ»Lï=ž (]ËX…@Õ&ÐŒªÞ!•m€´™¾øšÿæ­©á¡ÿ˜å«ð<¤ƒÊMeì¨"¶Ct\‹ÊÎb·ÆÆ[8]Òc1Ôß6Ïè«ñ m…ϨÁ¶¥Ç Ú …(¶µ7ºÞS^|¯²áˆ™=#%æÒuÑ­lYÔ°ÏU9Àj<ðE_Pð‚WnÎöT!ðôG½tB¿L°lÖa—Âù9²Óî­Î@€zèΰÀÙÕm¸éì{¼ÚÆþ‹ñ[qæo BþŸT‡¡ù¹|“Ô XKˆù:'у´{?k-BéåoÿõIÿ]Oß×}Š<áý€bGNàÔâ2ì§±ÀPÑrB­* 5aãB¡DBÃÒ å5ÇPœ\|XæmUžZ¨(±˜@ºõŒª®}Ø5ï¡1óz¹9šèxî7;¾—ÊŽyûdF L:j¿ñ÷NÞ,¶Ø²–£ð$n$¥„WŒÁ“cÖÈR‡°²%}½Þû%wýöŠã1.O¸ïºÿâùoÿšÉïÕ¤Âf ‚Q‰ÐLBðsƒÇÎߢaÎŒ¥`Ô•;þƲƺ¬°.u¤cŠQ)g•Ÿ™ ®øüµ‰‘RÌiž·ÓçÐØJ;³ ‘¡¢iÛjÌã8ݾíeuÀ“>외âä]pÍ¥÷HÄš4€®É&ÒÂ"m@¸ýÜ͸éÜ{š]=Ú6êã>Ʋò´?ý—ß}Qéë¸ÅvÐ.d©¼‘AC²t§Ï1 u¼œbç3Óï í´¸¦iÚ¨=wÛþÍø³ømüÍõŠýõÙI®;û<ùûãíu¥ìb)'°3œÀBÐÁ6’µ7iC½Ò4šÒ§GxŸª¶]¨} óJeðSÚÓãɾ?sFF÷`ú«NdýNé@융•¨^[z¤™‹ ´¥¼Chýñ¬p3ê1—YÿÂüµÍ`›:‘Þ-¤¾Ëìc­B–·¸ƒì•©2 Wj¡¡Ý ÁLÏ£‚|dˆD°ö€£á~U‡žBÁXË‹t©ècDå† cZ¥Ïþô—cÙ2Vƾr§îºøéa¶ÐVãAcþk"¨°»ªA^žBÌ6èg¢ÿnªõ™õJ--äfËYä aÄ˺`ˈ•±ryØ£^žûŠö¤{&îzÉ}púÄe8»n<û.\}É=qÙ‰+ÝO±jÂt1,°Ö±ÆÎË€±¼ûÖ·a5îÃ%DföªÅCÿ±~_ήoÇe»WVû?!MÚ²ãÎLˆ+3y#À„ñǼd¦osêßMƒ#ºä袗ÿý¯â¯®}ù¤íŸußoÁC¯øh¨T:P;Ý‘ØN6›?PÊÚßn‘rꩉÎK6ûøµÚjsöztÊ­Ø‘‘†êP»('‚Š&JŠ(bh¨Åýfv#èHñ̳š9¿(Àè–(×Í]ð{ÎßÔ ï¦ìT8;4îéÕî«&È,áÂ.m ŠºVaª\rFÔ ±ß­ó:³û4¨`!VëªUÖwÖݯU]`¯„óóëë_âùŸõ*@µ2!Bû…6L­Ë «rжÌ×ß+ µeB^÷¡¹ÉQo¾a†æÆêð¹¢9³ib"v¤âÏŒ™ÈÛ=cËã¨ú<ÎØTL|Õ‡þWüÚß<~ÿ' œ)¸áÌ;1êºEEzÕê(u*åÝY™ý\¹þÌ?à²Ý+›Ów]™saço6I”Ƽ|n$˜*k2cú…LLv¬©€Û÷oÂ__ÿgxýõ†νkÒîo}ØÏc1ì`À€±Œ¤f…Š_·wª–ŽæÚ~ Œ<¡mÏAÍ­”ÉA\¨÷it¨$æ¡Úe(RÝIjèUÁ$¤dÒÄ ãšæ4ɱ¿þf›¢e7®³Cì¥oøI|Üý?×Q>P™æÐNVÍ‘fš“«ßÎÍÑÎC­&˜ ;¨mp»‰Ð0™Ç“X è2²ôùSrZÃL¬ö*¶Ã“ã•ÿ‹ï‚@ðÓù݉‘צ"-ó þŸh¹dçr-†Öki‡ 5Ç("¨ÙÀε1®‚Чšk =ÓgÚàÈÔô÷¿Ž¿¹þO&í}ÂCž…»œº/Xú¦9`Њümƒ ÈöQPslZ‡Âmÿï2$©‡=Ó•HðV®¼sž3»g›~hW¬Ad“QbUÁw¼!ì¾9dp˜y ¼`‹ûBpyÎÿžÑo°ÐV¶ ¿±L¬2œßº ¯›'‚8S~s6§Ü½ªµ îlsKB™g!ÞÄdk¬m(‚ÞU`¹p剻c)'°Ö}À¯üͳðúëÿÿ€/Àƒ¯þ 5MîB–Í?°ná”mG%cY5T¦ ;„¾ NÝ`c[`QC±§œD=îêj&£P«=“yÏiª_C‰âf°‹ÏŒ+Ãó„ü_\îsÅC`é’µí˺Ñ\›úY‘¯…K†¹$³¼’|õïØ6&¦ßü9&XoÛ¿ þΗâo¯ÿóI[Ÿò?‹“‹K±3ì6ÂÚ¢ ¦m°u“Í5ÆKP,u¡Wx?ÕטÑ7;Gí8KGï}Ñ äb™ÆYûÆ\U¡!dCvØ6b̃‡Ô`ýËž ¦Âë ô¶î¿Ìô{ŒwÌõ‘Àq*°—wè±V#¡êhâï™@h³û-m$£=K¾Ù,…’³Ñ円mì0E¬à‡0m^ Ñm*]EÜr2·¡ÅÁÎŒ¯Ú½>òšÏÃßðKn&yÝu/Çë®{9.Ù¹z¯OƧ>øq¸âä]_ˆ5±`Žàƒ ^Çr! ‚±-Ë×b¶wiû/´µipÙ|5fˆdHF¼¾¡MÄ4€ å|i ß#S€¦‰,ìÅQøÿ·¢hIÔš¿¨B‚Á‘:£ÞHò6Fø¤çªÔXïkŒÝŸˆ³žé[ZÑ5þÏÛo¹ùµ“6þ»‡ÿN..kŒÔ"t"B…÷­Ô­]º“I´Œ™MûäT*]šù§ñ‡”*»¾qfLçܙ̂õÖ Ð}î‹1ÃÞC¼I‘ßJ…Í‘ð4¯G ”ùÏVáéË•áaîŸ{Ô­CÒpq×øF­:ðho °‰Î2ö¨ m»‚k=®54{¹)p_‹£™.’ ‹£¯ã¸>aKØ‘]~Õ£qÅÎ]ñŠ×î¿ÍØ™Õ-øßo{ þ÷Û^õlàÅ |Ô}»ÿçcÔëràÎb[EG,‡Ec¶C[ÄëªÍH°kG¨¨‚ÁPàÈâÌ|¡â'›vP…í¼"ú:^ÅÛSo<\Õ2Jö¶ø÷•£•¢¥•x;ö×{©£0Ưtoõt¶/ÍQ3ñø³Ð©UÓwÔ͆k]9Ó/Z6úK¾õa¿€Ëv®ÂBvý­0¦É`6h„Œ‹šØ#Œéq¬{ô³ð-`(mÆ!èÌ ;>Èœ|Šß‡lç°îˆ«*“ƒí9uгƒòþ7`ÚGàØ,“”´ˆã–Cxú…û|°"7M幎áá&"›Ea;39mÉ—r¼8£ŽO/™M$>Æ$Ƥp›ìK¦¶)\ØóÔj‡3Ѐi=€`¨xm¨vö÷¿ì#ñÐ+>ï<÷wø½÷¼ïÚ{ãäûã9ìçð»o~1þà­UcX;¸Û%÷îx(®9}/\súž¸l÷*ˆ–0êÊQÛ ,d‰±-´Aõ%3™Ö¨}ØÙʦq Mkqõ¦eó/4fÄL4œ×"«mZŒ™´Æ™4ï+ÛËþÇã¿þ«ÿƒq Yb)'=ô îiæÆ†ø‹™lØûÊ|ù®ÿõYø¶~!.?qûƒ"pÀâQ¸áî-¡1ºù…5곩!±{(eQÇC££>ÿþߎ¹ûc°ÒuEýelBH‘Ô’.tÒ,­BTm ¶X­ý„Ü,bÏ ò!Ø€œïÇ"nÌ7ˤØSìøÏ!¸[¸éÚ®o’D«] Á¸–Ì:& )™ñŬCÖ ß{Gqg×Ýîž«dÓ½1ޱ«›ax£åk÷ŽtOÊ5aRÙ„²Ò6)’„Ìl&KWAÅC± )ÒLâsDÓõpje¬í¹¡â~w,5æé(bF]áÄâR|Ê=¾ ºÇb*¸uu=þä†_ÁënùCì—ù¼9}YûXa¯¹öñškÿ‚Ÿø€/ÄC®y$.=q•›vv‡P(öÇ}, Y6¡4²Æz¬ŒeÑBöêÙ«¦ ,ÝÆlÎ^U‹Lгø„(³[Ïå{_9z¹âä]šVW5)qÿjìŒÕvF#ñ¶IÊ„4ÛùÕ@YùØÊ |îý¿Ï/ÆÁx£`,cëö>²W ]i&“ê/,ÎÅú@X ` ÀÍæœ¼Ã•7 ”Ðx@øæÙ•vPºò Ÿ„Nxž9‹í~w>;_¶VQº#ìúNÛ¨–3Ûf¡™RU÷q¢›Ð=°Yl¸¶Üöcº&Ýßþ^2“º¦{º”§Ö{Mu»Äð³ÜÈÍi™ù4ö@ã÷HÈéª4a5“B–eŒ©©5Þeˆîˆ6f*a¯K3¥t êÔ“j;—aËv®Á'Ýý+ðÑw} n>¸7¯Þë÷ÿïÙ{ άo­«ëqn¼ ÛŠ¢à÷Þúóø½·þ<à>â‡pbq «rPÍKëªi,‡¨(²ÀnZØv1 :q×cµå/eªŠQ÷1¶V±¾Àöe°ŸÂ’×Ùñˆï+ç_¾ë}þßO| J;7âÄâ´”Éá_):bÔE×L¼fçuÝöšì© •ù?ŸxÏÇa}¦€ãQI-D¡ –ßoö{÷ãi³ÏKè*@½^Úf½X“„ˆÁ·¢P²‡SØsÓ,âÙi_Ì—Gwµâ«1ÞþÜàË´xþ@„Á¢] ç`ÿ¯E.Z©9JŒÊŸ9óφ1èËÑM@sLËmþ]"ÒÇ÷u¹¦ >¨fV §®}hD¯.xj†æ €dF({±Ùð…~'‰NajÓ>™ €GÞ8±ˆbÐE“AZP$T=EèØ"¡ãʳ²ÄU'vïŽû~Š®0,vjŠe†a‰¥ìàìúV¼üº—à¯oùCì·Ï¶ù‡ÿtš!õ‰ú}øÑ?2žôaÏÀ(†RM ËaËaÇO·Z Kì ' ¬Ç¬ÊAÕIf‡º‡ L ffXëêaþÏý„¿ÂîâT=%ÊÃ"mt§e@å C›êÒÆÐ¦¹£| tX¤ÞS&uÙ¾Q!¶×VêÃEG|Ý|бûüÿó'¦ Ñ“–=Ó6ŽÍ¯`Âø›ãh);øìû=ŸtÏÇao}+­Ì¿è*ë6÷Uëðó°aYàœÉqªä¼!8I OQ|I[VÓæé¶ò8x)ÌGóÚ<3Ô ú•Ú”C2ö0žžõúŸñqñCfØœƒsŠìëí„”]: åwV«­s<{õds¤w¸"ýÈiÍ8d2Ki *qÔuß+"&8â"Ùê²*Ÿ¤µy g»èÚF­¿¶~á*B ¸Î÷!–‡?JÝú¦¥:[4Í0 XjÈ¥ÍLZÑö€]ìÈ \½{>ã>߀GÝë xó퉗¼í{°ÖVžÿßxî+¾Õ¯=þCž†A8Xïa­k,då°StlQ=ƒ,`'=ŒŽøÑÄé-réð¶·<ç^‹SËKˆ;BK¿JmÐk„`SÉ`d`Æ^`çXGî•J¥ž94S Å?›€Zìzo2@c\E±Ò=<í#ÿ'–Ã..ݹc)ø†?üà#õMAë²rÚ;°?žõy²PÎÕEHn·”|ùû=¿ú㱿>‹µî7šX»Ð©<9M¹6ÀÓF^–DÎø€j¡µI»v™ê„Çùó΋3å–Âï4»É7áŸ~ !ÜÞüC {t×ÄzãÈžM2S÷,F©ê⃺Òq¤Mÿ(âMõ`“˜«là[¦tŸ¡ß‘«€~0IŠþò°ÆÔݸãÜÚÐ7‰âÐÉ¡›ýÉ!•ÉA@¢sb“wß2ò2 0ß‚iÖ¿Øô C[íø¼ÚÆ¡tí6Íz 6DZ"°z&¬Eù_‘¶/ .¬^úAxÔ½Ÿˆ?|Ï/`<ƒý2M̵­°“öAW}>îþŸËq5Æ=ŒeËÓ8µs  ÀZW-ïQ=Ì&3šr‡‘ðÄA©ÚHѺaEÑ[íëY~V2!mlÜ]týP…˜€ËËLØRž—†¦3¯ƒŸÙR°ñ;O›kæÌEn•PMÏNžC`MÓt‚ΙLÌ’ ^7@ȧÐé/2SÍÜõMæù-e³°¡âgîö Ë´"ßÌ¡“°’c\Ó‹ØÿôݳÚ`‹gFàûM)íÀz×’U®¿ Ú+‘͵ «@u@z„´Òö)ª}ÞÌ^1¤5¬Ô³‰–êÞƒG\ù©xÄ•ÿ àÜxgV7ãúƒwàM·þ9nØÿ¼ãì߉Þ|Ókðæ›^ãß÷ˆÿ»ËSI;8±<@°*û‰Ñ¸ÃÒ'?çþÊQt=+·4Gµ ]Id¦Z-PÔ“6Û»Ü/óäêU´0ª9ØìSh øb &£>ˆb5®°Ö=@Ëá$ÁÙõ͸mÿf|Ãß‹~íÑŽ"ý¿ÿùxÊ¿|>–ÃÆ=œ9¸{ëjþ['°–5ìVW4;ÃI|Þý¿ ÿâšÏÄÁ¸µ®`þT†ÜB~-=Ei©š²4…Κ0‡´"rõ™Mƒ·È³@h3gW+¯Äð)Ä}›t掶ŠÉéŒlJ´Ñ®f¡3gÖQfq`Å"Œ`+²ý@V#75"ûÛs÷Ž©lÖælNÇU7€¾Ù&J;œÜYµú#vl¤äçÌEÄQ>‡ƒqçV·ß¡‰Õžóq¯ÅryÒ÷8¨ŽX+Oöf¨³2à¡1 ’6¼MPÒrT ôœÑZ‰ß*ÃW²…V`óèEÕ‚PƃÊü;€*Ögqf}+ηµ>½|ÿËŸ8{ýqø°v.Xûd‰Ï¿ß·áïù ¬u¯úZP7Šs³Ok6XÕ–u¤øzãäPækaï7QPíømÃ"­Þ¦‘B~„ÄLmº(sCà<ûgÌÎ?15ù½ÙD QÃFK2ÜÛ¯öߎ[“¹Ê÷<¤{¤kUWŽÃƒ{1óìÑÒA÷×fÑþæÆU&×:g¯ÌC ‚)EéõÇÕ72ñ´¥o_µù¾wþ’ɈŽ  Û 0Óx·ä¶Ð¤š7ÀG"þnµ½ê㟠R†d„Ééeë5AŸ±™Žê†´±¬|\Ø…B°^ŸÃ‰Åexä5Ÿ†¸ëç´³fWaÀÉÅ)ܶº ¯¾áwð²ø±­´ô“¯þOG¤º +ÏþØ¿ÄÉå) ØÁ{Xµüø–AuÔuC 6Õå‡ä¸:ÝØB7hóiŒ(Ñòïì¶qÍ…^«¼ËÆrÐP¯` ŠžÃXpPö±·>ƒ¢#¾ú¡?„çýõ…iÊ‚ú|Ë%Ë+ñØþ<ôŠnZ˺™ÚÆf†) Wÿ‹… ­¦8‹l©¾÷¾8jŽo˜FÅ ” nªS7œ í'¦ ú¦‚P8— ŠOÜ_ótR5Ùjлi&Ê}"èÙA{þÄ©å7ÛÖ¹m3íëÝ£›žïxô2UpLt¿µPƒl/ÅbÐbe¦HÑÇÓš¯ZƒÐÙ¯šÌ,ɘ$11~vñŒF1{›`»×SO+ÜŸá>€Öqn‡½!…@Ej‹~ÛƒÊÔ,¥£ ¨1øÕ|TïdÑb=@¼fŒ±ì¢ûv†%Æsž·ÿ„žÆ»¸zçîøØ{<ÿ⮟…ƒñ,ÞtÛ«ðËoýÞ‹HG/ÏþØ×âÔâ@+´cÇ}8¢´L’~žòXÍž©óŽex7¡Kÿ^è»–ZoZ¤ß¬Ó U}„§<¥FÉŒ:bvq²¬Ïá›þBüàk¿òeÌàW}2¾ð߉Ã%XéAEþºÂØP¾…yÂó<5VÂ!±úu\6¤eöÍ\ÎieöÙW-›[È®¢m˰]3y¼ù3YÁÏ ¸wŠKü´×—´‹dò¶©ÿ01'u@!Ï46hÞN‰ùþi¾§?Bx2í·ål‡=Âuî·¡k7ÿ´íÍÍÆÔ©¼Üà·6:i—”Ë(ŸÞ CÚmäÎÓ¾ãð)þÙ £hd3µÞÁ7¯YVÓh{8‘â ´&$=j ÍÄÓ®0‰-ZE¡Rš&`NÙukW Í\CµÕžo (M(\º¼rõ§á¡W~ άoÁ÷ÿÕƒ(.¬TæŠ{ã9¬õ bÙ5ìÌv%ZšŠuÓ‚´PΞ ÄY¬ýáámÎ4¯“¬ Ë¬éƘں¬ªÝÜ4‘¯Ä¾ô“ËË0`Ó'.Çí«Ûðÿìø‰×+ÞÛå_Þí1øŒ{-N,.ÅzÜà khY·}-—TKFXJ=”¨F`V)Z*”íW\ÆšxˆƒÝÅÉáw ·ç+¶æ)§ÿœAb2GÌÐ…*·wj~ÚÅK¯±ÐÍáb%BºkÙ;×@ïžáCÛ}{v”l/³ÀYŒOb:î(r'slr­³Ì`³Ý,‰ <‚a'S«=ÀÀ{lC†E5…)ª4“x¨«§iv»hŸr"aJ„TÃ|UÈœwÃ5Î2ºÉAf$@„¬õ±þYí!!@¢,eõK,öžÐл½†5 ;Ô¥æñ·hŒºi ¨ÌÑ0³ÈÚYª5UÄ0\‚³ë[±Â®Ø¹;v'pí¹¿Çzq ‚o|èãmg^‡_}ë3qÓÁ»]À\Œò#óì,NAQ°pk´3"5±^b$á!>õBG H8ámç—ç³³ghâD¡¥xƒ©>d®-„WŠ vF5m·mY‡¢‰fئ­Æ7ª–¶¨Z™’.Û¹¸ú_a!K¼ä­ßwÑÆw®|ö}ŸÌ¿ìcÕ’Ö‚‘éµFïØŽâ~ÌMø™p¨cVŠEA\¥¿ûl-ºöÖ?§ÕYzÜßæÒŒÌ­å˜{adBàXÏ™$«NbÒ]à Ï s»9ªDµëÞfö)„‰…£¬n­é|ýÉX§ Ïï6ÓŽÍ5G+…_`ˆŹÎ°ê;‰©¨íà5Ëð¯o"’³Õ‹¶9BgsÐ5çÏŽ8µ¸" œ]ßEÁ]OÞ" ܾººP<àÒÄ7}àOàÌú&ÜxðN–¸÷é÷ÃzÕ§‹\~è£^…åâ$JYAE±³8(°¿>[SN”#ÆH4ÖÀbÌUG#­f?H\!憺¦«ñÌi€°€Ÿ*õä„úup­c‚E$ê±RŠmŒ!m¶ùõØA?Âa*b¤êó‡]ùñ¸äÁWàµ7ýÞvæ¯pãþ;5¾ÛÊÝO>ל¼7>ꮟ‹G\õ©ØÏà 7a_-¥ÙþMèóŽ \½·`êjRhÅp‰=1SQM 3Ð}>Ð`änWÅï4„­ä¡×^X¤2ýeš‡ÌBýcae6H±ð&8d4s‘#¡ÐïüàÈÃøòqÌ>ÊVÀž˜_~ŒWNÌŽ³V©gupFJêŽO¿‰Ž"‚£ûnT;3“߃LXÓ~ú¬ÂQ·åýn;ƒ… ùüG#šÐíÏþFI‹Jìuž›ˆ BÈ¿=A'‡C,Õ·®¢ù"FÛ˜¿3ÎS€ŒgpPÚÙÔ¥FÔþç±ýÍéæœØíja¸E_t*$”˜ ¨Àž× h»ã 8¢mºàI%„GuåÒ¡y› ;elúOöy’2CÆäó®ûI&ÍSF#ýûçºqÌ>\¶úeþÇüMHÒ2Z´Î×lnßÝ›K²?A£—ôãû°oÄÄgwÅ„O„g 9uF•dÛ›™ ¡q€-@Fä¦tm@¤ž³ÿÙ^>^϶“¿„™$ÅC†Ÿ!ú£ZSY­þƒR¶:M`vH8ƒ X¯÷ñŸùÛXÊ.Ù½ÒÍX–utw8 È€ƒñ*g)ZûFŒªÐw>ª6‡b˜|ÁSò#r›éA"&bF‚æ|«¾és6^#žcËÞhf@e¤Œœp-6Ÿ…Ö–0Õù4! @ƒâëŽ^`Ä '—ã^§.Ç}O?ŸxÏ/Æ{ïÀßÝúxÛí¯ÅMïÆ {ïh }kNÜËa YâŸ]þ‘øÈ»~®Ø½{õ§Àrþïat&]Óz”R&Ìß…€ŸGI7´´ãÍ)¯nÔðþÓ¡í°ù2-AãÚÄWçï UšEt=(0„-,YÓ˜¬eš’X±½™& ¥,B¸«¤Zaàµ÷#$JèÞ3#=¬ªÍüUù~̲Yl³CéÌ}Û4£-8‹NÏò0zð!þNH{Ò=t›¬¦`³–ö®^mLgá|0æÞP„LYPùë0‰4ÙõÜSagÝ'„JÜifÌÅÎGV û~3—ÙÑ|lö©‹6ü9$Õõ­&| R"{)otS`­£ŸŸ: †ækjàÚ±ºiKeQû8*†AqPö=š¹dlÑF È´c•ÑŽÍ_j¶ž‰Bå9âÓ£,‹$kS&tÅ™®£4§w ú™ËçÒ¾cj>–%Úc ¢=0øî‘Ÿia¬Íù ZÍY\ÓA¸lyw|ø]y·ÏÀe±âèž*È÷Ö·cÄ c©Ú:žêÉÓE òÄX,t³DÔÕLH£¡|;/Ú7=5š0G!ilØCÔ•Îö ÖÁ¢Û»»ZúñXþîHõª¨Ì³¡¶¦4ê4Þ’›ÓƒL+Ns:’|_еy$ÚºP¦~­àxÁÎ÷¾Á'ˆ9CeÕ+Í_`’ÝŸàço¹¸!s_v·g¥Ëh»‚å†;”)Û)"@<Ã)"=Eä·_LÚFÔ“ ·6Hªc5#(ë eˆsYÅŸ-B¨w’WP·é›J‚„èìR5O´0Õ c̪Àb»kî"`5²hçÃ(€Ð¶ÙQE[ ßmÕlú–æÁµG·q—8㸆U†Z_D«uÈÏèX^ôÎ8vðobÖ,&¤8MCŒ–Ôªë£Äü‘Í>a¢ íQ‘6ÆáEhgM”T÷`Gvš&hÙ¢”÷Dhä‡Å{[kØ“ V,çe>eD­¡=ˆ%{+®iÆP—ˆïwÍŒØjç™Ðºvé4â¶„¦ógæšB{~)ÏÐ?]›± Yß"d…Z-döÓùz|8èî‘#|Þô[÷NWF°¥EؤÐ=¾6Ž"y:õÊÃA͸W¾•_¸õÛqG—Ÿºö›67W˜99^áB£Ã ö«¶”Ä$üóª¨5ÆiÆgxÕm‘FB¦‰nÂ(žt¯™ÔëXCGM«¨s<&…¼ˆbh¹àÛ¬*Õ¦Œu5e$ŸvwÂÄÀ‡Ç7R|kõx´¥Ã0E~‹z‚iIhá¡äÝQ—-ÉT˜µÍªð¢·:-N”Äq"ëVhX>£E] ®á4¿TwË¿cm*“–À:Ì€lò²µ±pëi/…‰tºn<‹Æfooãßž‹õ³¥vhš€!e i¦Ä¢l6_ã1ÊGÃdfÝgJë«ã¶œ6¦Ÿï2ÁÆ™—j\¡:Œ‘òGά¢p|g^°•™§¶Î|ž±¤lâ·"ûçº÷m׿^8#Ý&æ°î^Åü|ô/3†ø‹gþî,å§ÞÛô¿ü?”Ɔw.÷¨9œ³.À¸ÁÍEæ÷çHWüJDCE¿ÄÄ=ó¨!i³[#òùðªÉ\CaŒ`L«‰:ªéÌŒílW/õüáÆ°DŠw¯ mP…âe„`L´Øy²@o~Sï—`ûNyæ¹”’é¬7]Ø{(Ù›cãÅ]½ XhNýXL± ^¦-™†ÁüÇÏ[X¨û4÷ËT fxŒqW@´PF]ñžTr<4¥;LÅ…nì¬vR »}Ú^Û:fî9 wÜ&ÕÑ5Ò0ëæÁNöò„¶;.Å÷ÁÌfÙlËÌ®©Mdézÿ4 1ñåê©Îœ™úÔ_'…u¾žGn2÷l“‡i}s°ùþ£™€65~îþ¾C²¥¾CÊ\ò=°!æ|üñ"BõÆì3%Ô þ‘ºÁcÃ[ýsÍ{ÜÝž…ŸÞ!4×â© ù6ŠwHö÷vÉÍñ±ÕÜÉÒÁ´!²08‰?û¬Ò¯•d^±Åf6fS_%.X«ä€´¼BaªL½˜MÈ4J!"±(´ÓÊjèS’ –ÎÌ‘¨¬™vBN12'ÚéB$´_U¬è„ïJ²pHf3Kuº ï‰+•¦)¦µI¡ÃÆ\yYIºšD."‰w)„Žíè96ÿJì%á‡=oµ² îš^p?‡BRï'¼Ãé…S©(µµÑ‡ýÆëÊ× ì#@b%fMæN¥ßã#Œ‰v¯Ý«bá²& ] [kjRAÉ7ûûÃ<ýíð0Ðã–#tð0ôÿ§Ÿ–Ò&çêÚ¶z mKƒ.è|'.ÀfèúÍ µ4õGñ¸»ý Ù*~´G§­ Ľ€£§{°ÔæKÉXZ¡iÑ—¥ë‚/úDèÚUn$ÐHhªp;°£ÕÛò]ÌD=jƒP¯ 4Vvv»ˆÔÜDH©ÐârÖéèÒÚÒСp®ºy-õË–.Ñ—‡ ¶èÍ,ù€¢ (zýÛ׿õ—‡NóÌÇçÐ vò k„)ÈꙬ‡Áá¤W¾ÒìYšî/AÎôsËLð†È³¼=v—9×›³·åÆhÕù8y*søò -A7¬ $ÁìNzEb¢ö‘ü5¶) P7áͱÏ;y)šˆÚÄ‹/ùYx¸HŠ$m‘oÚÖž ƒ™¶Æ:²à8ÂûøÙå‘ÔŒm×{á1üù§Ÿí$xåŒf …˜²tÙ¡/Äøš˜OlØ %Nà9¡ÃÈíqw{D€ŸzÏ&A8Ñòþx$‰«ÖJŒ™%S]/Ãbç–XVùè«…r¨[|p$©Êõ;àÞÆE¦„ɨF$;%ÌœÄk¬öáÆ0Õ œ €± xhCm·¬èˆÝ5¡1†™°““Û¤ž›²Z7Ûø+Msàï a8A~N“ÚÆ³ÕæógÀ˜´1”ÏýÀ4½B8†P Ð’‘/E ‘iÌZ˜ö>7Ác¿0ý™­Ÿ˜ºf °È & d-¶S¤P‰[§'ï·ó$ýû½i¦àt@œæ˜u'8ÎóWä— ÍmÎH¬s4bßø¬.3šÐ,ðäY=®ÖpÈûøÚù§ƒÎ@húyN…ÙòcþÜÎ~IÏ6rF6lMÌ•uf¶µN›¤–òh´ççw÷gá§g„€3BYNE9õl§•ªÝ„BŒ-ò‡0èsRgì%p‡™/ŒäxðÙËÑG;)=˜l¥ïˆ=‘ö3˘0qŸª÷»ÀReøõQµˆ!ÉZaéu=u*1NHÛ15cC¡1(I¨É„âýûŸ籥ۧÖ>\טNoNÒš–[§L©0jõ11óK²s¤ö¹K!¡“”w“~%¾f6{æYÐÌp'Œ-VMSc¦©¤e9±pR4^Ì(ã#õ-Š•£âWãÅÛxëQëJ@waã»û—f7­ oàQ:?ÓÐd¿·  Å8±gÛÇ‹wæG¤o†Ü9ÔÐ:ji›·Ik£OOqA9Y`‚ͲDÂÊÄÀ@¦gÿÌig¥7 µÿ˜ÜF!e(¥ú¢Çœ¨Ïô0A$i!D’³x¿Í çÔá9l½›'»l§KÙœ5mÀs:¡*gg&&–vž'ßv4Ãha q$!ÂÿÎ<Ú{LèCa§Îp”—Ó %dz§cWÓÞ˜Þ¦ÉE˺>9 k»W ˆýr¤mY˜m2uQ"8¦¢” ?è@-t—è ¢i”†?ƒ2Q9дè–ó6Ó3pz/¦×fÏ÷éôV{Vb)ðµÌù¨€|†·ò¸v$œÞmM\bÚÖÒ³ÿ‘ÕÉÃ$ÍyC¢ ˆ—¶oÈ#{œár"¹zE Å £¶X<)KØ {H£¸wæ°¡Ôiö/挤MMgÒIqÏ‘”VH?¤ù46žšsóÉ6mÑ]ÛmËlÙQ5i›™x„„E„Ç¥ˆ*wÔ±øy^<§÷‡M‚È d9ˆ·÷ÕL¦4wNƒ܆€Í6ÃÜO1™pžIy¢ocÇ OM(5¯MÕ£ÇÚÁ=ðôÕÁ÷z¼>Q$é%mXP<­·„vè½QzÜ+lÚ Ó²m²Ã]ÜTÄgWpû0EÕ^“hç« 9 Å“+õuÌãÑgÍíAgnºæÄ¨ùôE0w$¾_±EðLýäy;R9ì¾-¿IˆáN¾¹ã5L6\ßÔŠCʬcXøƒ¢õØ?Ä¢¹S+ÓI^¬“M ÀÌå†P^tí7o³mSœNqvcæM/LáŽØÓÎTª%ï bcà“"tÒÂþ4BK;·¶nœ*ˆÃ·K ³yÝüâ;}fö“¥ü@‘…]«'OiËNiéžëÿì`•5êÁ/Z™§µ¯ÔôË®+Ѧְ+ý¦—IGÓ°yB¾djP2#ÚÚXhÐ"£æD'®-F…ulÛ!=(‰Ÿ µhœ§S–6ZZb¾ø¯Ÿ›ÐƱÍCi‡Ñ­X‹Z.Övz2hÿ_î©÷–Ràîhtƒ«m^ؼĈ¨>ŽmÜù^GfáÅàʇG2i~fÃúô:í˜ uÁ™v³ï&苊ôëP§ü/+À¯ê<8¼,­éÒ?<7†Gq2\@1!ü/ÛÆïŽÍ†¶ÈJNÈ´% Õcm×-¨Þá;^t¤ÝÃ6fµU’ý¿Þ•³Ã$[iÒŒ™19vFÑ߆¡,àì·p ƒš–£5tC-)˜;}•¾ö’¦‰Ûkà)æÅ4ÝîöYÜÌ`á£Ýå÷¤!÷‘dsžÛ¡m˜8 (£*Z†tˆ,1I[#íÁÉÃöwHjÏߌݴšXJ2 †™§,2½$M5hú½µIóïhCÃÛ¬kês+nºp`äLýÐ6g½óTù¿á“È1E‘ñ ÌÕ´æ&[JëÊØ ´L± ¿èÚ/Ñ` ÿô—Çç 2s=Óãä{š8œw¡#E¢ôþùm†W/í÷Iƒg*IQ!ÚýÝ6]C>ÿ’§á%g6‡‚Î ‚F})¼Ýs¹¨3#õÞÅÍ@6Ûl&’Ô¸ùòâëŸ|è¤<în?ˆˆW×VcDÒx>ï"mªI¨AÑæKí4 ‹!Á!Ü‘ú²Ûƒ·±‡X¸~…™ÍÓ§Mˆæ;ŒMÃn’X†)ý71Ë\-fÉQzãÑ^iu ½‹fu²ÃþO<Õ& ÖT\‚'*LˤÙ|Köí*™¯&L“¨ŸÜ.tx?im¨]#È£9ÓožOÆó4Ç9clß3›ßèÑsüððÌ1åMŒ»+Éì8¾í¨+G?@7°È£j|ßG«y‘ÕY!m LŸá”²ÜûÌt(\/lé€Ìôð(Ì? “ñW±2ñGR¶ÄÂ)º0e™î2_„©1ÌøÊ„ž ­d?g…#¡"ª7Ñc‘LTŸGZ5}»Yí¨žë YhŒ•„P\ íIêˆm ~³û@$^ eTÀÑ\¡ÄdNéí'!¥Õ¦±Lµcó.Gùj6cåñëѸ"NºF` ÅçÒhTéÍíñˆ«Ý'ÍB²Y^úöûìžs°5=ÛûɼÍV Ä ÂÚ‡ÀƸû=‰7õñëblã·9AvÄ2Ç 71îÔ‰¸.8Âý›J«çxÙ@ûFÓ±Á¤ýù§Ÿvätý}_púiaº`Ž žÀ©½ßMZ2d3 øÙ›žz^Ãñ¥wûAbJ¦4i "Tå`þîüdGeö¬Õ‰GìxÒ¢tå!²[ÄoÂàLE‘âÑ(IÉÇç§ý 2àXÈD*‰åéB T²ýcçSÌbr‰‘EÜ8ûÃRª‰;w­€ ™Ç•¹Œ?IóÕ!ÖL•€˜jf¡ )²UA0Dçfg—9—Szrû­c6•‘)’LÌ™i…úÌ ›2 ÃXƒÌZ£Mq0 K•™{  ÕÀO¯Îtl†1x"M‰lp‰v,ü×ùÔ”§üðr>Ù »þ=ºåþþÚ¶÷¶ëË󪀥×1¤N/± Ù7)Ü/ÏÜÿ˜K¿‡ÌÒ‘à-Mgýþs7_ø‰b_z—hã „¢y‘Ä&,Þ…RsådÞ0¡ƒ•™N¦+GhZLDÞ´ošc˜&LmŠÂ;‡×Kø &óJŒÍºnõºÀ¢E ò€tt%1ä`ÌY °éÈ7 AêùÁÿìÒ¼D‚ÎHƒÒW³ÈœD^ ‚™10ŽÕ©¹H>™LB±Y0ÁûÝ ®sÑ”#Å«ó˜õË”A -Ð{éî\/ú—CDønüîiWHB©K:IãqHšú䯵$„‚kr–Ò™¡´Äû5Æ‹Ç"4"„Éa“ö¤œ‡Åc:ðǼ¿¿¶íy׎RÁq$Øy”Ï»äi½°´Ð¿tûwÜq ìÊ—Üå¿5º!»¶2J§:2Ͱ}7‰t6½lßð7såä_%,÷Öga¥¾Ð¨n_ŸJöhä!²—B—h)¨ÝÞ6&2ø ¶Ö=Nœ1iO½¬É:^Þaz1a7·LêiM*Ù=Ôïé¡×tÌÅ4ÀÜ;A H‘vžú\Ä`&ƒY1íFÓHº)+½²ƒŽ=¸N¤EŒÖrF} H#pÀož^ ¿W׆ÓZrú)kI£%ßF¨ŽÜ»’מ”ª9tÃÈO$ áî–Êù2ýÃÊ&þ{_>’ÐJÙVA€ŽÒÁ£Þ‡ ýÏ?ý4@°ÕAüY¾øšï÷>űm“ªÞÇñ3³âd´Ûå¦gÌ·Å;#£Á‹» %M89ü¢¼H…²óטÙò7tÊ@V¨­†È„úæ,fxˆ¤p±iÂ}%6,lBê3WÚEíÑk¤½Ð÷>Ÿó ÅÜ{—Ét•f›'=>%™Ò„ÑÌØ¤ ª\qÄ>§ˆ0m0¥õ&!XÄPl¨×›‰¶-AVSˆÌ 9b-Å+t²/1ø º¶§À…öMpIuæñá͌ѾlêééAéݳå(2!D(xâ?Ê5Ý|Ï„Un⟇™åéûFyC7ç:Líèÿò¢×· Ö ºw_l-á±W<àçoþ¶tý|Ãï+ï+ï+w®ÂQFqxMh昞 ̰X™Å¸3 ö¼ÌCGaô‡•m`}. £4ò°Îœ¿`Ó€óÂBç6‹± ]nBi0Yø9·çxx_y_y_ù¿¡Lì…¦eõÁ¶ŸD§ÏºfŒÌ?ÛoTžxþy¸«jÚïî™!Uv!’‰tXƒRß̵ğeæ^µmóþ®ª«ÙõÈyÚ —ã ®÷•÷•÷•re²ùË>èô°¤C™Â— .GÁ—ºá~™¹vˆYicûèÚ~Øf³?ÚÈN;0Ǩ7ý~HãeN3˜˜^C™„XrÝ©ä}à}å}åÿÖÂ9’M¿ù ؘ¥ÁÚyèšW·‰ ¤»Ô;©¬áfÇlDÉHšKkâ„ü8h3§H÷kÉß]ÐôLŽHñ4(sÍI‘]Ľ<ü×(“ÝœùÚ]ËiBRdÑœfÎFqjïÔñÝNŽ\o9÷ ÙJ0ç.Ð=¢šÚÕ“;ºM†–è;Œ5ßx<&~˜?ô(&𣖣“#Ôw´}G|IJ°¶Mn¸.Û=ó›“p/¸hÒS:_»ÇžV õ¯Ÿ—ˬÞÃô´{}Nà •˜­…6B%.«…A;}}‹ºdU4vÄÖ6¹oƒ;Öq½³¾Š~Y_R"‚É7¡Óp½”SÍ—"éye°1( áPã´öÃÜ®\ë“ Mcà%Ò~çó{©òƒl È/TîUöF$ 1Qµ1‚Ç&&Þ˜šèØ6QÜl÷Qò‰¨Ãë”Y¦šv@3ëk0ÆEÓÇH@Hê¨úº¯€RŽx{g`˜€c9ALÝr§}9öŸnôgYSÔœ 2@ÂhÛî®9 ÆÜoG5Çl+Çä…³£¿Ö |¤¾©Ì™hŽ[ŽM´aðd®ží/LÄŒFäD0Æ/Û¶Žjœµc æç9Dá·ûÛ Ñ;1™le€¶š¸Ñ“Évtµ 1Ièôž@¶œ)&Ícê}`óBÏIâ¬~b?’Oð^@ÛÖOýçE¾ŽHÓ : ¿ŒÞ°dp¬d8[`_G!;3 I–DNÑÑÞOyp(”BEÁ“`©•û é@H騽JFÐid•Å´Ô; À¡HéG%þkÍ r±ÜMŠ$m:=Ä@?³<¥ÔrM·öIÛ²àµU†îžÔó¹ý$#’bº |K™»OŽqý0á8ïeò“®Ï[êšjÇiäQ~?¬ÌI¬ ©g¶m”&Á%?B=hŒÝ6øÆ˜°ÃÀN¾J/Kç=6f pæê‡‘t¨ƒcÕëu ”’x 2¾ÏwéNPw =69zE·^,vßœírŽüAü€t;äÔÔ¡jZ f=û9¤fã:Y‡SVQ3O¹¹I½}IµïNVKÌ:1ñ`”FÁ¢ZšlÓ#ædÏM<»r 8aÌú‘Mñ>ÚÁ:/QÚï4¦ÔŸ~7goæ¹ps$ÚߣEGøˆ™-Lwsƒ¥ÉЉk6ó~4z¤þÚçaœMÁˆŠÃ¸:é1GÙCI¸ ÆÕu¯n¼Âjb×=quîX'üˆg¦½†&8_UÇ—Ðx~+ͧ™–i=,IxŒè©ß´Rhh¯Ýt|€Ï¸N•Kºíüx!=˲erí¸ÀûB Õ»Üú’^bl²y]h™ëìÅî¼òâ Ô¿“kîâYc°¤1h¨­‚ ÒÃp„Ch#q¦Ah ¹ÍÎÔ;jnƒ×ͽsõ%ñß4¿æ\3M£ò uÇ(É0o\´Kì–ìùôW«“÷dCqS~R´ânónïïˆ9"ó£ÛΡK½$»÷”Ÿê'e >+Ĭcx…šÔi9Q¥Ó@š{†ÒÄicǯÝïƒícçcÓ%D?„Òœ[…ILÑÿ×±nã¡ÕéØñàřǬN[Ÿ,Øèa„uÇ«X@h0×>÷D*2 †f¿‡õ„½B¶\Ûö¾¤wŸ7µíˆ¦¨å¡Ìtä¼Ë¦Ž·^¿$GxÔ¶ÿ'“]>Qdû%Htê(‘XË6h ‘ðZ³F*aJÎà,Õ×s¬·ý«Ÿ8C=bÊ6Bà‰$M¥>‹ó˜EZ®Í“!Ê °ðñÿÚº#³OαÉש͸ÐÛ弋q ÁÑšÇdÂHx˜çšB¨7fà ¡SYòËlìi¦B„SP–·Çs˜Rú gfDÀóeŒ0Í]÷×™ºAL´TyaÀroéë¹WZSJsÍ‚úmmë@I™X%µZ^'˰€õú­©n>z²o7æËa¨|ާÆçŽËJÛLN3ÏlN±©â ÷Nð&‰zXϳȦ‹Ý{8;¡Gi25’¸cÔP±£a0ŠÌïÈyD˜ý‡ÓNøåýè)<úwH˜«ª9)#QFrÎàÈöï‹"ž’Sºó‰Ø‹ÝVœ’ËIG=3k 9¸¼›”zaÉÚZMd_ˆúùíÆ/k @çR;Kj[Z[ËÓ0Sm_›í¾6U2´ŠÉÎî6æ$ˆ@óÄ%A§¨¦ü@n£Òjޱœ}ÎÄó4eÚ g97!'Yƒ És>›.ºt4e¿¦(òe%¤Î ë¢ð”G¦ÖïiõÇá/ÀDHˆÉÖïfÀº©Ì1óžbC=‡ð¹ß/‚åÄSALÁÍ Ì–FN°n¨k['fHçê>Ê m Z|Žä»áÄí´Kª9¿ÜߟóçbºSÆLlÎy;[»”22“jº€-ŒÈÒG#"µ©þ框¤"ÇÁ1Ä€íp G¦1¶À²c¯ê–·9X„™Bð^B»ð{ý¨K:`§ÓuÄžëC8Y&yjg"¸Ðêœtè’é—›o8äÃY:3QZgMb°›[»Ĺc¬Du€BJ õy$³‘¿/§=˜ v劣Ov‚Ö •ª›¶è%!ze}8<³‘4ÞõÕ/eŽ ôža ÕýЗÃÌFý5®|ƒ™h¶È†kGaö‡˜‚«|è_Ô3elù¾©‡ ÞÜoÝ€Ê\}‡uø°ß&àÝTTRœƒÂœIëÌbBʌّØÏ¡hV#£]mØa*±¿‡¾pK(dÒ•åÜW jý:¥7o‡ÆFã ÈQ ßc¦ók%!É4z4N![ í[§Ôö¿G†ÎW 9MÂB ‘ó<ªú½5ŒsžÖ&;yËÚ¿§g„@½=1êÏÖê)aLÇ%~wÛ¸jÇ¥óX‘ïÃKó‰)Òíù¸/NöîK)Ô&"Z·/Ék¡[dÑ$ÿµ#4‘2¨/s>¥µZƒÚºÛ¶óL9:›I•oúC3½gScdC‡ ~–êЭÞäÞô‚£^ãëç[×qT®£´Ç~›‘Ú|`¼-ð¹XúdòuÕ²Ïn?[}ô­YBpŒöfé<訿 ¯EgÖ:x·òƱèUØ¿½Kñ¦tbñ7åäcÍPh›mʪ/£™t€™ï°žµ¯½‰ª1wQñÃÜ“¥Åß×£Yï¿vßk¥þ'!L3¥§³Ë÷sMv¨@ÑP brÓÑYpC<¶ý»;¢ m„°yH³-ßçpr@Ž"ù€!W´%yØLGóàú€·ÕÅ}ž·bíŠNæMÕ}¾ÿéÜ'ú;ŒÏœGI|ŽnÒŽÒ®|ymèÞL_—“ŠùÚ}¾ìX*Q7ëØtߤÏDÐÝa#î0îë#ÑgÑ43ÆI,<|qp˜)Ÿ°fîÌ,L 1Tfniš„£e¸ýÝ‚²ÅjOšI‡„¢Ùºãp$Ÿƒ‹±´û˜˜šw5$jl‚3†™áXbtÉ®n¦„h;[ƽýÝYȽ‰pKÍQTÎ<„öϪÿJcVÛ×;ºÙw”˜®Û©N"œ5N, &û 23IÕ˜Ë sph¼´O)–Ÿæ*ÚžŒ=yn¬ž¾]íû0JBRÓg™a§ÿªÃºGŒ$h-còì‘€è6T­3×·€géïÛäkØöîm%3œã×Ñîݼ¸üà6[×1}‡5~ïÑÞ¦›·ú&æ~hH“,êÁ§µê›Ü)‹ÆTxÃ3©öv]óD°=6ûŒs½þ8i!õ;†Ø£aÚ¯ÀƒØER(bôFˆÙ–.Œ•‡X60gGÖ®…äúi¾‚£”âûƒaúêΈ%ÙÂÂ0„ÑŒþœ˜»Æ¼3Ó鵤îý(|j1ân‡²‡öv´šsôWºß¼Ù³GCO5GÏô»O„ öˆ)§Ãî}á n¥‰:f:ÊAüSXè’ÌS#­Ù§û¶m(G1KÏ]›1¯Mî;*sžã£ÛøíQûµáÞí;71﹆m‘†Ƽ¡3sÌ>©QÛÚ²­m[ÅßÙ›-‰ái\ ÊÈ•ÔZ°ÎˆLín‹Áй7˜¢Oh8^ßÚnï !6\[Ei ˆÜÏáÔmóæ¶ÚuAÈíó°TzS0_ÿâ(Vú~ÇM„¹å’1†8›‘SJœìB ž_ „œÀ‡ÙÎký~"[´&Â-ýuÌðH HmÍ™Q,ÀxÑ™¥AŒ^¨–>Ïä=Æ9'‰ØºÊ•ú-Ù\ÂÁ ¼ÙË™?iqêãH‚#½0› a‚Xëʈè/$-Ø|“¸Ó à4OBíˆ[3 Ú´Î»!¤†ãè ¶/›ÉÜ}=_›ã§]=&¨\ú~ѵÃÃ@·1ÔÃ$£ro÷ÛVSÍ\sm; ãïß9ÑZÚb•ù6ic:þ¹³]¦ã “  r¼¹ÿÆÈ6 ißKȹ†D9‚Åã>ZCÌ<“´T 8iS‚/†Fb‚ÍÕÈ߯³ß;ÜîEÜßd?§iT%$ßàíà$}„Ò»}2!L4ÉTïp'ƒEèêmm+4ÏècN4_š¸l¢°˜Æ@ÁIظ$VGЗvöok/m€ãËÈsFò"F…™¢Ä ¦cEV\çÄx‘YˆŽËôšÒrƒ æ°¦Eö÷ƒ›zÔ² qÏ•ž÷è–z»éȃs´vÌ29b=Ý=˹‹[;y‘Ëê?´l³§qGçÃaB«»Nü,PNÊ‘CDܘ{`VV¯Ã¼Ü‘ÍH¼é+~FA¼mTå4ŽIÚ‡ÏóùðjH©Ýξ Õì»uÅC}SYÞˆIÌ-!³žÁò\™Ð$¦Ès !{Y­Þvšö%кêÏ™q"D7ÁW¯¿PjæâÚMÌ ozJì‰Ýé±Ä39æ·›C…Q—ÍIÖbCÇsyœ’Ѫ,3ãÂ]¦ñ1P>5;]1åg2 ”í÷F‡šæ.„«æçI@äh,Ém;.gæ|T±0o+G¹ÿ(šÊ–ß–8n9 a³žó’ÌGxÿ‘Ô¤#õEiñd»QN@–žhõ ’½žÕÜT’ZߣÄô';zÁ‘'Føsùÿƒ°)(½Ó…Z‡Øø“¢{Wü@×X<=àÝ¢À¦Ê;ÂÖ%`#TÇcÊ N¥×WE;»L|¤ÉnN€×C+tÝnK`¹†8ý„™ñ¢:wŒs[¦ªL^þµ˜NQ ”ÎýaÓú 6F´!Ñ{ÖK|ŸÕNêÛU!,)Z)ÒUs¿fÖ‰&2¢ÚC“ö}1,N;˜kGL¶Ç± èü¥ÙT Çeº2ó½¿ï(þ<…ʶ[æÀ¶žOÉ|ss«{ï1T¥‰iç8õÍÔk š­iW+û$•“Q"ä@ÕmpÖ4Ò‡º úDjfÎñæ²ã8°6wˆ£;„UŽÄ©¦jo·àã23‡Æ4)?M'—¸©Hæ4C–YºaĘ7j1:6æ—ÃQ}-JÔìØihSäé¥:³J!H Í|˜ê‰[r–Æ\ϬC×él_\±wÄÏ\°1Qž5 :% q¦›êäåw1 rÝ“ÜG&˜:M¿¦3lhÀJ6rEß&´¸Döãzà|-™mùïܵ¾›4ƒþû&a2Ç»ŽË‹‰Ü&ZQûJn[B¤aX+…Ïܲ•š÷†Ãy³i„–½“„V:ã@›ë²tû4<5ƒ×èÞ㺟¨¾ùĬ5 E°fÄæ6YŸÚ¤Ã>õ;µ£C×érljy³¨7Q…ù§Ò ¶}dZh\qÕ¢¶.ó9¾s†û{!Ð_“#Ö0Ýv}æ¶Y¾8¦gÚ<жJ¯wê·åMÜ)%5#ï]2mÀ@¿› ‹}·¤IÓ@Žíæw–ZÛ–m!AТù„ÚÒ þ„ú€Í.dÊÑQvNäÊZ_ñåê}€#1ydÁ”Dâ&tª¬ 2ZÐnÝеéíCÝ5­9å¸×áXÞýGùžL›©õ>t9˜vj^ Ü¿.¤|®x³ 6žFí¾dokW6Û’ÙÒÖ¢í(}[}›ž=N‡•#‚mÙôÌ\›føórîâÖFl«ôb2áî•Ç2Gm¼ )¼ Ñ“@;˜I!˜‡fætÈ•ëVfÈÍŽè4ž„ßãý4[µÙ}‹·%cg(äÑŒDq ¥ÍÊG˜™²B(ßÛ5Í‚Ù)) †ÅBo 7¿—4>N6"ÓoèLâ0fãs”«ÍÕ™p¼HV§1Án‡Œ;³Oj¢Â)ƒ˜&Û;ãèPLëf»·²Œ(­OJ·ú{Æ?éw„‰öºŠ¦!ï6Âq]ݦ½ ,ÇN¾ÑÜÞ.®ùt•Ì!Þÿ_s×Ú#9n©Ùùÿ¿3@€ ÉænggºÍ|°HVQKÝ=Éù€ÛÛ¢ž.)‰jäu~?‚ «Øò 6^‘í•4 Jnnô a#b仚]Ïñ£à¿“vU6²ÿ¸íOÜE;6‰™WEÊ›´e`&{{sÐèóuDU<جHœm ì”ÈbaÜ*ŸÜtÞr±‡” ÙŽP±ÔÒÕL 5P@ž3PܬЪ Ð$•A3üÞa‘eÝ0žÒq‹ëSi71xÈliÅNZ‰ä }’%=Iý[Ÿóqf1I]­?$ÇúÛ VIÌE°o‰˜»&!y1õoj¡Ö¢Ò¨°Ý¶¥ÚUœYQrñ|¦ ²ìžœÎ=çxÏ×…´ïÓ dÆ¿ªÑVý]»µXiÀÍý¼êì®u€iÛRB\ šÁ€ Rá 3ÌÓ,…|OœÒ!FÄŽUˆ2CÑ*üÂ$v<.ômÒe×𣦇Ë`»cEØ!yPGGÛ8¨³"Ù¥¶§¯÷#öA#K‡<Œ5;KNƒ ã3oÎyHs'ù»p—ZÚHT÷àa:(*¨ššêJc÷¨HX´ã×ÚCyè€kÛ/ʤƲöôèf¤F¶r7Rñ¹§á§ü,©¼²€suÇ!öUV*3…БeŸ6ÝKŸïª"Y¹ö-€«kÇ·6í„M+£N¹‘FÏGOú;–ÒG µhŠxœ!Lî_3F¸ä¹:9>€—"í…L¿Þ)ø>¬ÊA¥$à.˜Y,Ï TŽ XzêRØx†û Ìr±ƒ`šH’UBÌ[+—tÏ£Iâ)!èéñ;`©Pú"lÚØ.ûȳeÖîî €f…gíÊå *šbîŸÌ¤IɤvŠáã*x9îhÎù£~Él`S’w­dV¼aïÒÊ­úTaëºË«tƒ4ݨà=Ouæ!íóÒy÷rû ?'W?\Ox™<Ï_½ TØÿfúme1³jVó˜\6xcTôb^ÌÃì‹P ßaºjÍ`UÆ ØfÀS„fAp+É ¹”ðÛŠˆÈZæ¢l=”¸ÇßHÄï?•O­#äëkÊ{_ýÌûDÎ㱃aƒ•)‡t%®5•6B_!ÆòÎóð¢@¡°mS^—)£åÈÆEX¦ÉÒ@Ÿ½&åc‚—ëò\H0{a@Báÿn”Ù‚8­gÔLò¤kÔwó œ½·à%iXþ¬,WÏrW1¼þ^¡íƒsëõÑf´zi÷çzì2ül½þ­X¼ËO!žÏ ÔþÐAD`ΕÔ.»•µ`˜2q¥hOæpfTÆœîÖ‡"0ç8¯7bõûNƒ«r—›rk̸mœÔÉ틎åõÌy+¾¿Ìôü‘òj .†sJ3B’ÊT^Q9¤ Ðí*· õ%˜xL Hê^ac´äoÇmŽÃÓ,œ)¬LPé”K¤ª9ó)ÔÅ`‘d|¯DÀcšäÕ‹¬àøDÆp{=¡shÜœeð8?ØÏfkçÁ¡YD$9ÝÀîQ9ÇàV—£Ü³}øVR*XnDÃ?)%¹GX;½]á6röŸ‚üa¿L¯¨½šùCYhåM$b£Ì°èWÑ*%%îÏrý~½ÞW^9ä.w½É!_ øÓÏ€|öl`¡…¸ÔùYÎUžO\Ën*PóÉÃz«øWŸÁ÷«f:[÷qó•»xœjÓE–*ÑÖ(ûÙ ¾ãà:¬ª*‡–¨ïµûA/­2UR ôæò€æ°×>¼y+Üh¶øÞ › )¤€•èjpc/ôã°¦´e|$MÀÀ!J}+bs@1| Va /´í]ð¿t0:,Ñ„Öðb’åd–Jݨm0u-Ú«r"Ò¬£ë—H׃×`k—g¨{XvUï¼’þ³hïÒ¦ï¼ÿÞ}‰Ç‘¨r×›ÜåKýþÔbÆØ,üŠY´…Ó©nÃù„«zÄç–˜Û´|UÍÝŸ¶úg³SÀ:ð63¶€F}¬„¡Ø\+ÆÎÍ(Çv/ Ü"†.%@R KD$6 ¹ù¬àaQ/»âÁ2ÝýQ „Ft“’óÿð>ãpbê"¾ºÔàjVÓJs%IÔ%Žy±KìCå4uR–pzøº¢ æ=`sX¢Ç¯è¬L½W pÓW(:Ü.ÉG ¨pðQUÄDTl´âÊ,(þäk;éÄ@ú¬çÒég4#·ø|Ãr!¼XUCa×êñ}Z1=™ÿM?åV>åÐûXÒ+̱št I™eqÕA5þbro‡XðÓ»Ig¦Yܼ٠Ýbáî/dàÏYP.ÚùNÉÕòU¬[ÁÀâÔŽß¶oÂŽöò##W¿Ã)’Ê‹J%íöß&×n˜gƒ ã]D¹àúùÎ&(A ˆ¢pÕŽç›å)'ð&K€¥‘”|F1w‘‹ ”AmXW2x›;éàš9Á V"§…ƒg%Q£ëâ»[ù,“® Èíü­üjò SÐh¯éF0•»|é‡ÜäSŽã¶›ûXMo2lSäz²yµÝfåû?]àû²mµÈù¦9da8ˆ;ˆ:´…|HÀ\àÆ™ATáÅù ˆFÆ/œŠ¥ ïA—n^¢äµ"K#ÐúˆŠëhpeÛyf“óô²ÜĶ“„ ½Õ;<ÖäK#¹ÓÉ14Báâִ㺻§ UËÜM`™ñs¬FÚ– ¯Ý+¾¯ž+wѽ««ßøÊ{«n«Éõ¿‚³¥KÓð'+xpÈM>õ—|ɯ9óe®2^®Ôé´®fÌßÞ£c©7`¬Ü®‘ýBŒäîë¨LÅ=µbotX ! ðâ…5al/ÎŽå¤bž§š­]€ÖËY@ªÖà#ö£+ø…ëz: ôtVfnx3ÈvE¤prz›ÕÛ]y†=žà@B‡™È™I›â_¼EB¢uãç×Ì´Ó‡!5‚â¶ZÉ-•v£ï:…¦½ŠŒt]¯h;—v~÷À–Ç£Ïðù#àE6!£ïž]ýÖ}ÆÁüïò)¿äSÿ”{ùêf¸dÊ\0ud‡=Uñ&Ÿgß{”ìZ@¢b÷ºwJ/ðwãyÅþZ¸4v;³ð½ªÑ‘áùÎN|GQ& +24$<ý]¢8v3ÅY¢2£;«ä|C8ŲÏ×Pàü+V Z·\­ Þxð[¦6Y ó„^éárÓ# PΊa-Ùž|ß,G·ÝÄ:‚…¼^Ü–84bá;lŒÉ`D\êÏ ¡êAY|>{gD:{u¹Êc§<ä2Ò6Áîú%¿å?òqü”›|=œáÓ×£´#ó»Ë|õÞ¨N9æ²ßø^ö¾à@³ðÂ#ö$°,Bƒw=¯©ŒRõ57(®`Þ°S@C..ë7`*µ y™~8ßAÕ®?HYú§¾ÛÀf’TÕ2剳 §¦ò0VGé¼F@>T”M€5ŸKFcå Á•Mœ\ŠÆJÒk|†´½Šð-|gÛe¾Êk7ÏgË3¹Š”Æ ÐM?åC~ʯãßrÓÉSwKÆ+®ž¬\¶Wæ7Ëÿ•–Œ%´Ù¼Æï~>+‰Uƒ(,‚ú,º@C#d î&ÁvÌm*ßøÇ¡±ôU€”Ûá"•}6§¢ÈØf:óSã¹ج@¤{ Ö¸½S·4>}o9²¼Q²;¤ã")œ—ÉÀ̤Ùò@I·1v–×#ƒ:LôŒÓ àf™ðDw£.o^ÕÔ4ÓÈš‡\§y8Ý+ÜG»²®®oÄÂ"?¤”P®¾ô·ü©ÿ”?ŽÈ—|l õÇn·wÂèûšÊ×…{«e{Öå´ZÆU¤7Џû€Îöm&K )æî§”MSÆd]dç ÑhúÒ“û—;šòöj:#g¤é1éÒ a û>òiUó!Œ=¯ïã¬"MžG»g÷6!ÓÂú *A£q…–…¿?™û£¡NòuEéÉl6öÀÿòùŽŒQºGÞYQTƒºOÓJ^Ì ŒÆS)úCÞª%ð."r—Où©—“ßúÇ÷7æîµèßuýUò™}L´2éFvÝ0âEk §=™ÿ–î¨6–N.—ž }§î(;ÿF,NâÊ@8áþÉÌ„Á±çzÂì·xBïEŸE(†”ž€1÷R¯†e@G>(p4¼øXÒÆ÷óøõî—W–ã¯pméišzÿM~Èy—ÿö¢a'‹ƒ®IEND®B`‚nixnote2-2.0.2/images/purple-theme/windowIcon3.png000066400000000000000000003345641315604104400220630ustar00rootroot00000000000000‰PNG  IHDR€€¤Çµ¿€IDATxÚìýy¼m[UŠ~m¬µ÷>%*5*V1’X%W“Ük®×ä÷$W_n| ò” ‰Š±.¢¹&&¨ˆTJ]¨‚TñZ¼Ü¨)-Àk¬£RHÍ9N¹÷^޽?zo­}­1æk­}à¨gÀÙkÎ1ÇèEë­­è­·.¹þ§ô‚\‹¢#®Ø5([¾_©:pÂr@ W¸)«é°æw»·‚f:P_vÑá´cpš>\Á>ò;Rí߀" @a”Ñö¯@êØqÇ~ úÕ{2Ägö´E½þ®„+Ïç§¥=ßßFÿ¹ßÏÚ‡“Ží] g¹NKÓ³Ö‰®|þ~Ò¶.ý>óüþ>Îã<®ÆFŽQ°¨¢ …âØã¿öU‘Q¶ûÞÿ|êë¤Í=?™Åg¸˜6kÛ'3ïÊÊwu¡œ¾?kË[I³tkW¹sï+ Ö¦!÷™›/bE `â·¡¢Œ¢4ÀF•ˆ“‹$ý\«$¤†yú \`•éP  Úʰ>UJ‰Ô~ÎÉ6žãßzÚÑ8Îγžæ²½ŒÙß×òÉŸÛù­y`M}3˜³í:ÛÏÍ%.èJX_¶Ý“îûÚÎõØÃ¿[™]»G=ÆþÞ !Ø‹º·XW|^Ëàk~ï Òí4u,õg‰XñŒ bÄ\û—Ê›,ly~M¿¶Õ³D˳Ðoîù•c\…€@U[ÿ¢€6íCÔ4u@ =|ËÌèyW„¾vRjˆjmO¡ÛöÈ í;šPãATm‚®µ¼õÏûºD¤mt´â NÆ ÛæMlk¯]ü|Ö÷æúÞÓ`íµ‹?—èsWÍme¯™ŸÛÞ[YæFq>ˆ}8Æ|.¸dr¬íܶ߬ì¥ï?o3É4ßw_cº­!zÏ€\®Î|_CÃ5uëô뉑5Ì=C¿íß5þCÓà[Ui®´Ó“iKÓ<wæ4íZ&Ï;Ô \Pô U¥[~å ØÒµ@ì™ÇjéD;¬‚ŒŠ0­]JûÚY`(ÑÆR­šYp[·ÑÒxbGYsåбȓ'u›œCvµy‰†öÞI°ÎÞ?IN‚kú¿¶Œ…çGã¢ÞŠÛÊûª€¨šv5LQQ}°“k›)x“MgÞÙv•…Ï Ò\í¹m.’mŸçÚºTO'.giÐNéŠÒ5嬽×_eæÙm횦TW‰-¸è`ÑM~ÅHEWÔ”¨¬=×_«ö<Ñÿuö£¯÷Øgÿ½ÄgS TÈJ.ônïÏP×Z‹¼5$Eê:YÚ¬˜® (Žk26ë¡TW—G£K½W ëo Þ§á)ómã½ô‚ZúÝž‘Sðû®ºOÛæt±•ÌÓð,ó¸Ç 'Ê Ê*'x–žßàz'.–›q¨—šðgJsé*Ü[¼–L·5ïœÄÚeZ­íÄÌ;³ ʾ´5}_º7' g¼©þ“ø×Ô¿¥I‹Û"s¾ómDY{Ƶįœ–Oó·±ì(oÍd]kröšGïÏÇš+…RòZÛà3«$›_ü/\¢šX( (EKuý¸ÔE[ÓŽY  ƒi6«øò0úkÍâÏÆ‚¶ÿ™[È´r!0ëB‡@â°b¤Õ‰d@èdPcõÂj(¢®d$BcàC!ÀP4,#}UÍU„*0&¬¾4ǸQKóDÊÐ…¿'½æê]‰9[ÛfU/µ{üçÖÃvÑf[{—è¼¥ü ízÕ£³ÁŽõ#6“gö·P™²M”]ƒqZ©w’÷×øÅN[ÿi¯Ó¶aeû“©¾$@{Íe-Òó¨¬K6g‹„{G›¦/F{Gd+ˆŸl"z¾€Ü=þ‚Áͽ$¦ébh¾úöyPF¨ÅîÛÂ-4ü/õÐP]S%à´w4¾§3­ñý¾0 ÚThN¦”®ë·Å~Oãb‚Ê Ú7‹C4»ÍÊÀ¿µç¥' ™­cz¶kµk™+¡Ý¯u—Ì•qZþÚ÷vYüÚÍɵÊß.——qVk¬}V-Øà=ÌàOm °X Y›´¯ÍÊ·é*­¹æ@n͵ÄèWb­bM=»ú2÷ÛÜןûNÚ÷ê°ÆÜ*In1}9¥¹^Â4U.9m{¸bb£ýÜ4\A!­ÞÖ¤ó4•ì}jZyî[ûªÒxÓxÙØ»Ù ½`t±Åcw»4h;ÊetÝž]§Ñ³ú{ªäJêÑ„l}m!£^>ÑNÍZjm~ºÈhåh#ÆIcoBŸþ:-­à»Ù²¸¡k,‘]smβ]£È®xŽ-¶ÕJ–̲‚>[„O«t_«ãgÔ#Œýúáçþiìàà’~ç÷en°–Ó?³v€æž? 3îÒ6Îr]iKc‹àcÅv± ÒÆÍB)k  "vý–«a÷HC³ØgÑi¤âbàšëõvÁ¿:G÷«.€†nP©uÁ¹àÛ[Á ·V$: iù%¤'lòù#Þomr¶srèD?ò®°ÃÖ)´µСµ‰kk£a|õõ³ -+-5=Ôi¨¾·'„G¥S¸ÜúPÕ­üwšë¤9‡!;´ò®™“('}n­%u¥0…ñv¦ßE6(åÛSüìÏ™é"飼ºtR†Xc ì*%!~—¶½¦Ž5}ÛµÍÄԤÝòL œÔ`¾ðЂüE:jŽŠ’ö{§‚€«s†¶ÄáÅ)ÈÓ;â~w¢MÔKï(J]dO ò"­ûë㯋ŽÜ´líVP“´¬í¾ûælQnA8(‡~6Ò ÷¥Ä‚¶¶ï ~)¨ÍêôáÓå¹YP„VG”œBÆfÕ4BÛ‚÷™çë®k­‡à¤ŠáIß=ëµÍB9ký»Üg½æ/EGŒeƒ"eZw÷þvßOÌÝkyôw©¬Ó˜˜ÛÚ"Tß\™§±®4£ìÒZvÑã¬ívLq/2ªkŠ—7/þ¡ç<:àË"`» -òzšû‚-‡èn·Ò¦![J‰!Êp˜ëb5{ûÜ0 XBÈ‚ªBÏèkš¢vv%5…65x)Bn.VŠ‘ÇSe¸p Ëýý"BBÁ—¼}üjv•/Š¥àH‚z™·NpÛÞÛ5g×ÖÕ»~pÊrìYœàylyþ,^ŠŠ®BQʈ‚ŠqžÎÝûû8Å.!ÌÿÝÒ‡DŒ¥kÑ»¨¾ieK>±l[}¼×´s m»Â]£ôp(‡ìˆŸ ²Í…VÚ¥o–d¿Ÿ•“4÷ì6‚Gýpü™…K-¿D3šp »ë'P"„P?½H MötëçCaÅǘŽìn5²_=ͽÞ/jôvzZ…¾Ô¦$ˆ.‹z¯K-”6öQ×WÚ÷V|áqâW¯[yÝ~žWO h»ÀiM]Ksd—•?§¼.•yV¥ðemÅ™í(j›»‡·`Ñn°åe]å<Ì}è<Óºúo û}©í»žëÛÔ›V뻹NZìKÌ>wŸ>TÑ$)ٟٿlš1<5C«ˆqËZ8µ “ÖŽyæÛwÿ4“A‚?,¾û-QFøÎoÊ9ÙÍ"®ñšûD©Éû}ŸÎà’™H÷³˜”‰Ø©¿‡æF‚ÀáÔlô‡JØbä»$/ èˆ$`´4w·Q[dOmœJPC;â»rlßéçâÙB³¨°h$"ŒõÝ®¢É·­ÔF–fU(iÊM(p§6ahëjdCmrb+›Æo6L}bÈ÷víCZ‹'»\P§|‹û]‹—0‹•Èv/‚Gviäs߯Ô%Ý_kÏ®èMÊÓ¶{¦®‰Ù»¦ ߯<é¶0)ŠÄÃ;Eè¾ß#µ·}¶çÌÃ!îS®?ØŽpñú °…[mI¶fߎ—œ^ð6ðX4ËŒ¶›úÔ^¶R½Û}IÍ0ËE¸RËä»Ü0ëΠÝól¸ð°ímL, ±¡Íè'ÑG@ã¨Ü6»-þÊ{ĉª‡0Z›ó°ý½¼Áã2k5[8»ÿ©Ÿmn½Î:·Öjê\¸vß·µ©w1íêÇ Ü’mïnü¾ß’ïowõšñZóª®ñ\ö‚´\”ìKmØe „³˜ jþóý[ûÛI®%ó¦4x¹À·]©1™Õ€ÂýÖ¹\=ô ’ßRr44 ‚ÚÌùî à¸\«ÏiïƒÑ•:ê‘*t?ª â÷'cš­pÛûÕ|/„€N•%ÁFVüä…h‰ š]b&•„Ù–g|²gè%óS›å äÿ—¾ßÀg»©m…<3ßt…p—…‚QÇž¬‰9«å¼ËߥUŸôZ[ÞœöÑ5f¬d…á"‰n±&-1.ô¢‡p&’Fïã°&E+Q¹!˜/x/EÏ?¾¦_—èPbá]¹náŠÂsäôµöüÍîKYst>ëŽwN:G{År—àç—ž;‰VW\Û\[ÊÁ–ˆÑ^ø-ó:Wñ¶:­6}àµù±ÖÌ<ëÕ¹fË^¢—ûö»‡'þZÖ¶•&¦¤“­|´üØÙKÍ!y‘4LªÌÝ^—Z#’¶š´SwÜÂLÝ:BΊ ŒÝ¬ÁyǯKµÜwfÉÿÀM²e@ôŒ¢ªWGsY¶óZúr¼^ìdš‰Rz ‹JÜéÒîek¦Òш ¬HÝÑ?äÓ·ñ'`wqk‚ßCI…\k3ŽÜQF­×IæÝÚ¹zš¹|RKEgØoIé\[þÚþ¯iê6ZµïSÐ.à^0)díÀÌ•s%Í¥-]¦ÔÊçvÕ³TîšßÉÍáã[BiL[³ÆS)3±É—Ûâi`‹•´Á‰C§‘+}¶¢H®©ìN»*/ƒ¨1a ìsß:ikE ‰ÝÜu‚Å@”µé êÍ:±6*=¼HWÍnmìúZÿZ¹ÜG8øÇŽaNo“_ŽØš²¡I¤iVXüõûùú O¦¢¹î ðS&וʶ›$ r4úÏMˆE%˸°­ Ò¼gÙ£¦]YÝʦ}™MA œ oúrWà?¢Ë.¯,â.sKˆºVº&¤º‚:«vßÚIË^ü½NX¡ ?¤Ç“î±/]Žû]í·×”n²î¯K|M‘Fš@>÷¢sLü&YPXs' 6÷ÅÓ0‡Ô™.š›&icžë'äH/­J~oZWp,I ²$ŽybM‘­µ@Îù£L…[š¦=“w3ÃúH,ñÌ`ýæ„Ùiœ‘"#ñˆFûhÏsÈʈÆi#`æ™­xB`ž>£û+Ý{iàôž;ï¼)ÜrAÙu®AyžXkW›qÔŠPô”] =¨…–kª+,†Î5A`š—, ·N=M!¨în±œ=l]P‹<%ªƒÇݳ›ÃJ§T®o?Ï2JÏ’áŠÆ€74˜`a›¼ÄŸ ÁÎg#p:uÁV_D Ÿ¿)ñ†žÝåúèC:Aqv)¹…@,ÃM\[Àwñ¹…KæÞíñg-eÙ·|=®¨ŸU](oé‡ôyMÖL¶%y¢ÎÑbµi¶Äs…̵wî÷“{›€˜­„¿™¿>|,@NK½xR…xmò üZdlÈÃýÒìèMnÍ€“N'¶“öK)¢8ãOjƒ¥Ù´'m72WB/‹Y3ö$¥ˆœÚy#Eý¤õjwP·Ã© Ç>™6è>˽ȱwAȇPŽ$nBØk†ó!qc›`òE`*0µ>¾A7¥õ‡°¦‚Ö‘¨NÓïæ[‘4Í|·vׯ4×vÍMàô ¸ `fµý5`{ !”®5}+îù“‡ŽæÛ×ÖT¤;Þ[*c›]#]縆‘–ž]Cè%:a÷;ÁðÆyŸî^€ *ˆƒýìô·½À¹ éêsM@Ò‚­Œ‰j$ÞØ,PL›–$¡)ªöüúàòÝžIBÅW+$»xσY s½uÚ‰ÌÚo{JH/uþ -i%öZñtèíÖOöÃ;ðmتbgj‰qtOÖT³D¢ÜfÕ„ìË‹»!;%zxd4Ó;Û½BYˆÿh”+ì2Ji;2ÝBpÍHó+}eb/_'´âW=ß=ÙŠ²¶(Ñ«ÚKï÷ÑYÃäÁmå]‰ÙåÛõÍïU¦ãR»žÕ…ç·™% ƒtà¼3×' ÌàßÊ”¶5×w^Já!–Y½'Ziìê¤fªUÌšº×au¢žÇKE[·›Æä.¥¡óæ†8p ¢Ó4ÓîÞþÀƒ^`²À[l6ZÙ~ ªÛ/¢ÔI( Y>VÒÎøôRÛŸ¤qò»ÞæN+:‹ùqÚ‹‰`s’t‡ou»uE™ýóÔ•.D³S‡zM@v¡pyÒ¨cŽÍ­ðAéð×;S"œ3ô[öOÿjj,…`*õ#`2*K­4m²ùƒ§ÍícÙîSÒŽ¬YÂbÂ0kÍ= yBPr{…[ÖE¥Ôý¾t;ÂÑ]ozæúÝ¥ã»R8ä³iàÉuCvTZˆJ¨nn@ÈâÌ ¾Ö¾è}gW_æá¼9©o¶C8}÷[A«ùí{;®ÖÌÍ*ŒÂ¿÷ï.5–Ÿsº¯èÔ|9ƒ[,[[qíÓøŸ­qk®“ ‹¾Þ91¶M’î"æÜ ®$ò’°ÎÍ'ÀNÒ©?Äü6P\~€M¾äŸW%éùh4ƒ!kaõÃà¥ö@ÞÁÝ ϯÝ`P¥Ùýã]MñÒ0tÑ6¬`÷ôÄæ¥$à\fÃ+(½;­Æ¾¨Qkæ®ýñ7ÂD©ó×í‹ô–„âSÂb²Ú)™•§ù’˜hýK‚w,³7)ßäT™š®G6¡u J .Hêñy™hÜuÝ\\ÐÜe×{ÛîuäØú›l¹¿ÆÛѵƒäýÉðiMfÞÝ t‘ Ö7ì¤ä´ï4íY¼-U,=æ?Ò@rÒ¶>^ÅpSÓï6ÉÅ] Y7õX?J™ý¿¤ùy=Ö×Û{­^ÖÈëá#2ásY*„}öÔJ·&H£í¸l]N"áÎz OÓž¥Á;‘`wyÒ¡Mõ—í!9_>Ho#P¨eÑŽÖ¨%!VÂÛÌ@£1/mÃ¦Æ RvIøbbså0€DÜ~tÜ€:µ•&¾é€枊8iÚ,8óЀSO$c¤@Qм ÜÞø†\8ɵ¤‘qD•ùÀ³Y6a“‘|Žqýx4ƒO4ãŸ]ذ» À`¥’e¡à6EÄN®«ÑÈ­9Š&òL¥¦$Äš0èÃP£Þlæ‰ ‰ YÞP'Óù-äj\zKÏ,Ý? néŽïsZüœU°¤íÛokê:i[éÚŸ4pî¥~BŸ–pk%×ÜsÛ¤ëIM£þ]*óµ—¾ç”ÝsÝsÝsݯ/»æÉ§¹ãmÀÍÏí² tÅokÛwá×®aÒÀÞ¬YêÄ.;kî÷µÚær:aWµéÃaÁÜsÝsÝsÝ=/Yñ[w¥÷C¾/ý]jÇ l¶þºTè•êøjgÝLÛÚ±DÀµÂëžëžëžë/Ο°´¨ûẶy?z‹cWÛV´}XX…[_¨œá¹]ÏÈ ÞÝöÛÒŠ}Ý#î¹î¹þ|_kæø•Tr»K—0ÎXѦ5ËÊ>îŸÙ”Yë_£½/I¸+5ÛÊ[h7û =¬Nßò?”º3QJT™o1‰®ñâRY\ EPü4?œöwRª€¼B .|Ú†´GR¸O³ÜEM˜´ËÔGáä9½"vf~,)êÅVvSd EÅ.åéúU,Rç*ݱ–¶—òGEZ}w2‘Ú¹ó%G'ôv§;¶ Ž­-z ­4$ö!åÍÍU]˜nêiTû‰j½çÆÏõu]mä[)}…G •‹Ói¡¸ý]Ï»’Á#§ð»O6€5`¥ÿ:ç¾ßbU¬K·¢c“°¨5ضư¦ÎÓ^]™»„jo9Ä®ZÉË%æ‡ØÄ¥Wpˆ ÉÜï´HéhÔ ™–"Óçù°¡÷9µÁð)ŒjDAEÝ\…öh†üÔ$—w] Ôß°ÍM)ãf4^¡-¼2GU!NC=¿}:V‘„¤tÇL"HCÎÂ’†ÔûD©—;ô(¥êaÀBxp½5jŠóH‘Øø¾†ÁN0ka[žñÕ£m¨u,PM,q(¬0¥µýŸ¢ú…{jtÑÌöŠ–ö#+'‘³Éj tÔDOß'Ñ^%ÁpÖ€³”qÖwOQæ,DîZ|n×¾•PNÜW²Ó ÑF“ßw…K¤þn&3€O®-¹Î©ge;ÿJ×Fñ‰ehЇYˆY¹öåm·©Äe“€ñ¶ôŠuz>UCÏQX¡#VärQE ™ô}\ƒNÐÀµQ'÷LZ„αÙå¼ùY\E{­¾MÓØvÇè¥Íw¤pÍN«ó©i{5h>³âVR/$)×RÄó:'Y_\ ‘Õ³xey× éM®»BAí® êI®®½ƒÕ0¬}yÛ÷mïÌ=»ÆW¿ë¹{;Ú妪«çÛÛÈàh ȱáI†5 ”Á€ÀrôIÇidZgÊ’àÈFš5A¢(ÓZ%ˆeþL¤îp>¡ÚÎ6<áÌ@oò³Ño¼Õï§GåzûÈ2‰Mi–“·<ŸÑ#úŸ$QJ£··=` âdýÜT ñòò>{ۉ߼dkkÊ¡3t¹vËÐP2Â"ÑTVìõ`øm›½ÐJ´“ h}ãßBŸÏ<8}Ç.ßwÒD>£2qèæ@äÉbúñ@Fþ&8-bÃ#xzéîGv½Ûɹí…íªhá÷5E/–·ôR‡•'sÆÕKË5ïÍ»ó½þwYxoFBÏÒfA’OwïZc†0S%Lbûëf:oê]Ü™ÞU$°™sZ{f^·ÚÚÀœÒ;Ì)+ø˜?ó'§”,ýîR1Û¥]^gî_:¬œ6–4¶½DÖÜÚnÖs–U˺Åãyu2SW´ÁÿÎ1 m„áÍ{^\ï?£~ô#ïé”Ë•D åöJøáƒòg [ž¦„†¶fÚ8‹å° ØE&ö,¹àˆ]ÑÞ÷v®‚9ÎÔ6—an]g†¦¬X)+ A_€Ó´þ¯‚)µ½ß½îZå Ö-/¯¹æpJ—­s[;NÒ,€SY4»uÒ‚ç@|›_KwÜ?m›]Ãc °¼ ÖS#šO\‰ú¼†“ieñ¡(>;•šš¸5'1ñÀÈÄuÒ$î¸~àÉceèÎ& ðvšärCf%©å}‹§ˆ¶“×ÿŠ8èô ÅØHÙ!¨È$ïg:§iðï| "ó ­{Xþ¸!Ú㢭)™[çšâó"7¿ØÀ¸K•¼ÌÙ•£ù—¼t<¯™–ÎÀï.˜4æ>±xÝ5”5=_7¾éÖ ,?’ô4 þÛº€ ø*ÇÔû'ϱ´j§êZů•~õUï­}Iá]ê‡Ì¼»åš·Öã¶NžåÚ¥ÁŸ¦mså¯.‡ÇA4|?f¶²§{êwõœÚ`.‚z#iŸöÐPÿÆ:Y¸¸ó›Å] 'I÷;:i'4Ë&µÀ—aá”èÒÚCîTbäÁ…ƒPÝö  ¶¾O^Äà! ÍOë,Ô&¹¡¥ü;=É\`¥ð†Í¶OJõÀnW ÂOŸÒgòWqIn4²˜|Í @=¢YG M²ÞÜÐ| 훤¤tm´†š5` Ü†ÙA2¢êkTf­${€Š%±Ï,뾦„H[Aæ´ÒYJ“ë´…m×ÊgCQYYvÿÜExåµ?yW)¤%íÒ —*=-P÷²¦ƒÛr©ünpC«íŠ& Ãd3™Á–5cÉoZOÊ éÄk&ÅršÀ,"kz ËúþÖéê,O$0º}H«uœ—YÃĦè˜d•ðºHŽR2:2ãóY¾©­|’T’1þψÂ1ÇÝæ·çº Ó:ѤðÒ5l¢[ãUøÄ±Pa¥øÍ4¾®u“['¡¨ñÊ”?€`ÁdÎôóÀÆQÃ=”ÍꇲëHi r8iˆ9î­Ü¡0tàÿ ©@É©,iŽ„BfuŽ‚žšâY÷«í¸–€”é¸Ãý²Óm4s%ƒpÆ~FA´íµýÉ{\Ù.Í[±½Ñ˜ÌÃÓI¼µ ¾¥·§Íñóê;¾këï_q¯§øH6L ë;À}˜ ÉZbL°îÝTNý)3DI®ÓgTyÖ K&°ÞÅ“96·3ƒ.GÆp¹É¿L—A…ÊqóøüJFëJN6× *rÄÕ»ƒ&wFðIÓrîêR¯Ë4s…ÊE’%0»¸8¸;î Yj“‘›Ž¯ ¦CÚÌÀõéDà†Ìü‘𑲴:·È´,Wr™Mx'¡™âþÛsÞä`j¼êÜNýŽ%7·8 ž_¯©ÿjþ:ölÿm ²b:åÖ´i©=[ɶ.Ì»€fžN{9N q§Ž­•¦g0k>ÜÉÜ~ööÿÈû<¦yßl yòšýæ4kÏ Äí߆W­\f¶›‘ÍËKb|b+ìé zûèøN MubfN}õÙçÿˆ{ý0inŠŸ½í;ÏTïÏ|¨ ƒ¯ºÿÓg”×¹ÍMvßÀbv¦uõ6@ +îi’¦‚„þ$ß r‹àòŠÛË1ÙýÐÇÂ^çºòƘP |‚•fnod¶D¬ÄþJ‘9îèhNý·b}ÝŸ…#L(u{`S„×  “  òfáNr}Ä ä.2z‡€™€)¯šRQŸÌ^'‰Z–8É,èLNçú=$ò/Bÿ†€ — Eö\‚y£¹zŸZ¯pÌ\-6N鹟£Úu`}!Ò=;q:°ûÚQß• Ýöîi¤(?Ûþžü=™›¯<åšQ‡¼õí0½Wð÷~J ¯ —Ïšëåüfü£<=…Ðy‰ H;à­NÓH‘«+Šõg¢¼ÿáN`!“²©õZ¬#ØdóBo¹Ì<é¡N2ó¤È`é..ÂÎî}Ô¶ˆÁ-SÀ,èg'LÄ´Îùw9rLÿ˜eäA†[1Î ÂPþ iÒ“©Ï„j©ŠîXJ¥“ĸ£=>µ:îuàžÇ n5Lüù~žf&C¸~Ãø) iÉ…Ž©ÃâÅtô’š-¹“âÞ.Í›Ÿ™«§¯“¿÷úÍšºûgw<³¿ú¥“¤ïˆ‹ýõŽðïOþ‰66ÖÈnrNhÕ-L²FKê¾ò>Ou3-×õÓ7U!ôÊàï*òtwi´!¿íî¤ÐE›ž:¢õ†ºž×&œÄ.QH™&t¶¤„ßÛ«—l@ÜIàÊSiHý ¾`0ñá\:@¤ И“žHpiXaЦ‡cf¦ãáÖ -34qº§ ×KÕe}i€´k¸®áçIDê( m‹Ÿ½üba5ƒ‚@€þ½Ì>µ¥Ö'úÁ’Ö’X¦ì¥Jg@“íÀŠÏ´…¾ÏÚÎÝ ª¶HžY²ì¾–, ]ñ ×¹dœ´M3¼ouÊ܃ü}®±»:?#Í5sÛ®5à¿xÜ[§­§MEB°™ý ¹d~ö!oñj˜Û_uß…D𲛿ek»Mô»„“륻¨·g ÒÈÖIöªf·“ÏÅžêR¡8Ìõ9œPØø›ö(ÏTèæf´>[27~/ « ‘ ºº¡’¥URY9‰#”"’³©Aoú‚kÚ‚Ô àA‡ŒÆuu[ÈZv”3×á³ì♫¯ßTEX”¿G“‹äß m\à@ ÛˆúU÷ÀË>¸,db‘p‹Aéw„–Yµ§¬u»ÈÌÏÊ¿ÛäÔÇ©Mšûîž4#÷œPR„õѵ=ýu¡Ê@b“=, ¶Tz<ýÜÀhxŠ*q+‹Ç,¬À9Ó4jÍó&h&I3Λm£ížò€Ô5Wßdeï…¾xñ± Aõ"Bÿ @Pûyüu²•@ɪñß“vÞEÖ¤ùÖ¬ Ë¥hþýByš4€ŒA]9°UÙrþ¬üþ¥ÒB•Ä!ù„t¢õmnuª?QôþJxEº[³géÚ¥HŸÑ2Ù™TùÃ’Ø%h~ÏZg»¾/\IëŸ!ki)$‘™ß|ÏYîÊ¡k¾xÙ&e·ÁÅßh@kÿ{”¹z¶)Þ z©í^:Ë !Ü!ÍW.í^¿3­Ÿ´dká S¥•}º…êI ®6‰‰:dž€=®] °¬¼×ÿ,3ϧ{KeÎyjN ¬ïrŠB·5RºïXó}æZtù´JDz­Ö&ï0¡;3ÚLQí¯0t“Ï¢UBÿŠ…LõÉñ>jY¤}Öö½~mšT±ÐHÿ1Ç:3ÅLÑnž0ׂ‡u£b‚0ÓrÅ4<§‰Q+¡ƒOrþntWjnè ðíÃÐ:n_…¢¸OÝB?U"U+µÿê³ì*óÍèfÏ( ~«ƒm•Ðg‰ x¡ŠX‹@†éšçû§q7KB ±,ћ٠+b|¢Ù™Ñ{A’^&€§†Ð6`B•á”Κûf4I–)?Ìï¤h "Ä6xŽè83—“<´ÿtHu†â”1¯y/ý¶ëy~fö.ô|®ÝsÛªRas› ½$ÚÖ°³\+Þ_\hZ†3©c6FAU?™›#ù¿ÔL›ìd¡Í„)*üôß¼\•Úd )ò)ˆy½U’˜ÜIºÌþ>i³ï7Úašh'_œÍDð|úCr͈Oö0%:4ÝÃ`ýÔpIÜ6`öߌë˪ŠEÑõ“¢hAQ­¿i{¦}·ÿÐ_UÛ;ímûÛ>‡YTë´¶˜ðð¿ì¾jý·1H.G³ZW\²5 †!53Z900Ž ôEµâààÍ|ÁÒ Æ,+IÂaÆ­„ºÃkÄlµÒë½X“IòÄ]ÏJó˜9R\˜ýS2WÔRÛqtùëökÉX)@¶a[àÁœ)±ÔZygWïvú.‰:s½öÒ÷¤÷lRä ¦i •T‰¬`¤øž®]´X¥¡‰Å#B¦|oõß—Þø¤å®›p±s9Ü¡4i|>% ¤Õõ!¤ölôÍ=]i–1M¦«½F˜4­ôSo€kƒQûg%\+f¥®QrÕ‚"¥wq`ö„—(Œ¨`\Ÿ¯]±zâžYÉR ÜþWϘsØ…’ªC>¾t n‘ÿ>¬QÊb4gÝ%,ïE&Ñ›~+‹NûbeÀÇÊ<ç,ThZÛ3öeHM˜ÌgTÞí%’k]{ð•Ú†ü^VÔ²/Æ:„*ËÊÐd¦y)mPšœAÊÏš3hâ«7"-ó6Á0•}ë¯+µK×þâ²ýÅ3-ŠÌ•Êò, Ä—]ód¤°E't¨'Ò¸-…¼9£-5€5k¸¹*TIÚñÙµÒŸÞüLŠé. Sæž~œ>SŸÛ]ŸÔ±&ܹ1è½®\öS³¡`}äÉÉQ6}çÂh(°³f›×…<¯±îd¨0›àÈÖmm.ª*(¶JÉÎ ·¡Î^´žÒ:åûgSÛŸ¥|ùÌKFï‡Ñ¯µFé3bÑÕ kG€A‘Rc@¦‰å(Òˆc¬úúë"« $>Ì=»‡T2Íü§^S¦ Zä4 ·š- #¤h´ËÇÂÅí½´²Î§·Þ©õ“YØFsÉ{M)(‘y·Y½-ùš¤Ú¥ŸÄÝ-+Ÿß…Õ[®åBÖ&'x~©#+Êø²kž¼3”øµ?èÇbO€[ök‹Ç¢©4c18ÕÉ­dÂç§oúæÕð5ó,DXS¦:`néеÃudî#ÍÜøÚiò»Ò„ˆ¹˜<ÁþA04mØo´öEŒw,ƒz;O·¸pÖb~sr£4¿B@LÛÈåžó»ÛB½EiMÁ€ÂÀyÆr ^[°:¥ æu™ky»;m´Ót'LgÂÙØÆŽêá±S ¬nQ4‹ñWj‹ýÚ¥Q60äæ­ïiÃhʼK ¡Þ'¹Ë¨¸é" ­Õ…vϧ¼ا(&•ÄýóÊRLO¿¡ÖæÊ!^C8tS}"d n%2÷Sô4˜yÖçf®ý ©V6ÔçÑY%ÒÊçÖ»^}ñ»ýóïÿ!p*ã ^¶/¿0X±Xª@œ£ üô׃¾]_ÝÀ?´8ÇÕÊ(M®„ør¦¤vÑR£ë³|úV–AZœõ1Y60Ñ{›xú1ýc’w§"2¹œ4&͌‡ÀÇB­•E9äµþcCš¬®›ÛÆÖŽÀ4Óh_ž÷g@$?Óé³XöCÖ.Õv½úá5n"Ò8·Vµß$I¬(“ÙTû÷[;¤/ÇK šºrîÂ!ufÚ/PY:S‚ÈUس’E±÷6.T˜Y6Ö}Ýœ¼-…sŸœî3!«éâzIÂK´ê-FD{ÅŒÐ5'Žõ×.L»=¥© æ´ÿe¯ˆÿlågu-\'v-åó佟ŽŸžXêëàÚÜËwlìZ{}ÍÇæ¬]xw[ù»ÞŸ{®»N— h—_ê4æÎÊú-üó¬Iá^yÛw¬znmZ‡µ×W̳H[çƒ8æ»n`Âä4\ðíóݺ뉽O>¬C7¶ç9(,»;ÌÚ ¹¬ ‡T‰É¸Ey^ܬ7À( æK ­MR÷yÓ"ksÍ)@1ðæ~ʾç¥SÒ=1äÞ‘¦Ì“ßSnÃeð¾ðI(ÊàO–”JiT×®C¸ÚÆgÍ·ŸKJ µ® Œ¬“ßÃAZbìØ¢låqŽ'så†d­ÜÚÌNÞg56;ºM´PÒ¬nÊ ä–‰òDdnØzuÒ²åìdRšw$P¥еîŸþóh³ìI7·•k·áì–v®>æD×’5°ÖüÙQ¿ˆx6Oðš;¿wçë«?æ™ÞM 4võ¤å=¿oC¸k€Þ˜¿žÑ Ê•/Î1)·Nš€XÜ£ñâPH7™üÉ@QUí’…SZÛLëâ‚éPs1Y¨¦ãX¡èšâÌŸ!%²ˆšö¦n„Ÿ‚ÁMsCH n âÔQŠ-—HgO…În˜’ƵƒH·uj~(\*Jít¤Ò-gôl%‰B1Tz Dâ•x–Ç-?×ÌÓîîžÉ9ý3ï!?Ã.¤@ôN`-+é5»iîÍÞyk~ÊÔšéL4d++=b^Å!õ‰Í¹èùÏ —`KYèÊê9A3gitåïcËåÊåR'O Ý'oÃŽ-R†´ÅTÁïû¡ú˜¯Úq„ã‡ëzôG?3…;Ân×–¥£uü©¿±3•Í÷d$€2aÓ餵tñ#õ7Ιü0a•Y[é\rW±:>­á”ŠóDó_ƒ«'Ñö·Ü[‚©{¸/ì&ìxtËɵU›'¬=´ßqýÁ2"D¼ò¶oßÕ‚S]~À3HñÍ!£îÎp‚-:-߀žÕpÿ4Hò-ûöäÐoÈó(jjRÎî6;@qn1™ú3ý±! pŽ…H‹“Oö„ ñ¦‘‹A³ƒuMÏgó–Ö×’Ü$æâ A÷A›v[*PŒ:z+×~­¼¡­‹T`tZDŒ÷B!mñßö"Hs˜e’"Ì*£& ¡½=qÓô=ÓhƒmcåÄ"¾åøIZFpk‡)Gž¹+¦þ¨„|žIÔÇDcнLª¿s;YgLå©‚•\0I~pvTP ßfý/a¥mÛüäá¯DÒJš!ø¨‘ƒÝK©ó3æ`‡O¸îSß9PMÓî<%1\XMI…òNŒ¨' usËÙ>Žˆb"­×T(ó‰ CÄêÓîgxêkMÞ^X6^Èà ·–Ã¥„(¼xŸæ‰¸q ÞÚÃǃÚ|õ©n‚<Òm‡`ãy§S,‹¦¥ï[¯%|=‰ÛëžÝ_¬ÌGóZÒðOéÛIÓšûU~žD~I»ï‡=aé¯N¥WDÚ 3oj‚¹ÜECÚšIÓª(*$÷|»½+ˆæ7OΩ‘”£©ÀqmŒ'UÚ9Ð:Nࡃ»MÓÌýô”ÊÑ<¦$%íHâ|YëªéνÝZ¹9†ê«&‚R ¤ùÞkþŸîÍ]ÁÇJËOQtÄq9DÁ žœÇ…áZ C—Ç ì÷1èXÁ½ Õ‚ 6€¢~Ç^s/™F)Î4­ÏÅŸaèå´rLÇpkUZ×!kî) €Œµ]¤¸TžÏ/–xÒœ¨£1P¨c<[Ë#éoO‚Š˜;Åßs<}ôŽj% G Í”m¥¨Ëy{ å›×õ¹»¸?!H›¡ñnžVÖÏAe"HüJ(C§Ú'À<ëµM€Hþ»ÛX#u¶ù¡–Ö5d¹± dƒÃ ¸sµS¯þ榘UšÍÌs=úöª7ÿ%Pœ>šûу¿O©üYxE™Be’”NŒH““®\žF=ƒê¤ñ\sg~HnUiV•O6Jç>ÿ¦ckñÒÍàKR…– Æ¥­ŒM›/0Ÿõ¨ë1TÝUÄ|24!ð ï~–7ÿ‹?þ‰¸J®ÅF78/ã°\l¿‡ýáÎ p~ï*¨Œz„±Œ°/MØ5¬î£} ¹‡*Ù‡&ÒË„&ÖÑÜå{âÄ„yAì•h¿ Íf#WeÃíAµV-³É{âYæòû|ôƒ‡ïÞ„ƒ&V] 6a«“¬š$xÜU˜¯rKfwaxvÐ’ëq0§&9õD[Ä2E[Ù¯‚yðߦd÷×¶çÖ–³ Wéï~§óeõůuûlµ>²–œãÐ ‘æl ‘/tî0÷ÜÈÔ››’A.6™ ™2éÒl ¸»dF0IW~ßÁ‹Ç“Ö–á™Ài¦{äÅ 9ÁÂÄ46ˆ)š­o§8ÅQ‡㑨Ĺ}jë"9Z#3›ËáœpÔ€­jjÅXŽQˆ*6žñsÔc—#Ýx[Ü×\¿ôî_üíK>þ‰87\ÀXŽqT.áh<„`ç÷®Â ÐÖÙ«Ž)-ð´ f™Ì¸[<=EŠ»åšíwÎÝÚ¡#§j°õ„‚dqô,M˜CÃÈ` ÎÊ07ˆzÒÏKÓÆ:[kiÚ±ó¤½—Ž†ãþª3ïá¹’,#…&qs’bø§“ˆ¡ƒçað.ƒ9·Ýøx€ t@ÏZ¿ï™Sy¬Oc$ìz'ë[«ê™îÞuí*t©³ÛÞ›ùÍo5Ð ᨅTüŒZ fz!³,˜ðßm¢Ù[ά¡GÙDÍ;n­<Ù±Ò4oò'&?+÷Gq«"‚´`ĦêþeÄF0– ~áÝÏÄ]uýâŒpøâ~#ö†k!"Ø”# ²‡=9Áªö_-"ƒ:¢™æSŽƒ»#iõÔXÈÇÞ-†H>œ&I€SPžþìhi…K±4Ë6ÔêÎåݫޡ™fð Í‚%¼ÝÏ0Ê»E¹i²ÔN°„¦B“³¸…»gþñ|l¾’–(Zb¾ßLjIíÎQ<é&ÕiíéMJÀGy¤)@V€ø%Mš˜°Í¥C­(“«¹wì”XªjÓŒÝmT0b,ë!FÝàÞu×ÿ¶ë—Þõcþù<ðI¸zÿz1ˆ`û–tÐ]S.´S i²˜¿Ó$¶áähF+!³È´{¿ ­ë·Æ Ú6ãy–Nk‡²’TB€I®X*U„JÈ…x(êiÜ̯̾d-ІF;‚Á-ó¿¡ø|FPŸ\Q15%nË£8’¬&$ˆ˜¿ºéåÍWLÛ>‡›KXÚ—»ÚØu-ÖûíìÞÜóK ›)#07¦Ll€šÙ!iï¤pÍ~ÉÍê“l‰ |2L.Öú¹±"®áN<þý ¦f&¦ÑvÁ„ÒÓ‰&z<9„É Ýdê0ñ¨o' O*üûA ‹Ço4Ôf&“I]ݦ!Òú‚©6 oÑùŠ:¥ûj÷Ÿû'H@ÖMn·â‘ñ/+sa·íýå.]Ó#!C‰6dî~_yªËd5i+Ìîæ¢uE@×484@Ö÷Ì0›&áÉTHP'{ Û„Ñ@ídõ"»£òÄ?º™¶%5Ún¤ ÉÑ5šI•È+DKXh¤Âþ 7E5u¹&ÖÕg©(x"Õû¦eÚP5wŽ?;T Š£èQuõhêˆÇ8/á`¼t·¾^ýŽ'CQ°Ñ#•Ë5JÉSZkhö B>cØD)Ò6€óÚT ¸Â,)¤ÔbÚÞÑvX/2™õŸ¡YeЬ4A£ib|ÓBí@g`–P̃qb]V9Rù=³cvZ$Z² ‡ÒÇ4¤Ö‘P l.ùtŒÝì¼®²êšÃÓ¹ûk \YéÔ˜“8k@Ý*Ýe–,”Y=1Š1œk¤íáΕákXlÖQ8fj1KЧßI¬¤“P»%3úd x½`ŠÔ’ÚnZ}T9·38iéÒ•GÚˆ`ú®×ImφƒxÓöÅ(¦|8ª›c@ÍËfNZÓ„BSSßÀV“¸UªZ«Ü5B‹Ç86§ÏÇåî¥õ/]/{ë÷ñïÁy¹ç† ¤`gßxý¼Òă¬ì6ô—Â8K@J÷ÈdBßzBK÷oùÖ…Ör8mƒÕOÄŒo˜ÚøŸÙƲ¨¯6Åö¦ôú8¯A´vp,~ë¯Æ ò6½›ÄQIšÜ\ÚË›Ÿ*Ð!¬*ÎQ5µH4$ÈÚ°Ð޲͓²„µsem¹¶»€vú\<ý»Q`L”‹ M#`r 0û MKªV¨F»¼>#4ºßæÝ#{DèOhÜ}^°­m•dÊOº ¥MÃÐ<ÛkÜý•ûÁVJxa7§ò­wyYÛÀ‚$L;} Ú±„¼ï—¨™VYx#“¥XhgÕ¤7-ºçÿzç3ðgézÕÛk¶ÚG}Ò¿Â>Î!kí°ô–¡T‡~˜½zAïÎn2¾ìœ£êšˆ­g@å¡Â€E“Î6I2pú‡ä¶ áe‰Ò¦IjQ¶öBAÂèsÛ›e€V­»ˆhá‘z±!«‰1%å„H5— Îݯí´H ‚P¼ ¦?ÒVÛÑ6P…GÎÜY¼Ew ¥F࿽@8ŸÛµ=tâÆ®QÛ*>‰d"ün˜Ž •6Xù‹’A“4àdζ{}?Ó³sM–ì šøí­\Û\âšùÒç„ E‹h×?Þ•8e‚2-rAЛÉ4Õ®ß`X¨"&žË»œ ÒãïÛ›¨"u‚Ø´%ÖY0ê!ŽË~îOŸŠ?Ë×Ëßú}øô>Ÿsÿ/Â>öŠ '{Û9 dW fF¶W:`a¿«³G\†àîR°µ±ê±Ÿ×}ÔÖ¥!~Ô)4w냦|8 !¿74òÕF4ÀóKó9ì’µ³´{Ì»–Ê[YÇ^àBç*ÂŽgÖ\sq¥Ò¾W o‹‹ãNšb{4ÇwxäJ{í)|¤²Ø¸ðçÁ·™^™|†7*šk~RXqÚÝ·œê&ÅrÛ¼zxöÑžuwM×u£¡}öXóÛ¶òÄ4L 7 Öf_æ„í‡Z™6µjõñ4á mWÑêï—voSŽÿ̃?Zßßrëïàß´¼Ah!­‘³Èç¶»^¦öi²ÖH¹a AÄüñùÍãµÄ;ݼ°qd6·Š‚8’Ž,Éö¨O7YñÊï§ðb²žûYkt4ï@-Œß„Ú"2¯Ìq;Eàë6‡&HÀs½ËŒéå'‹¹ !Lbñ½;Yb/Ý[ú•u ;ŸX+©Ö>3$ ¼zŸ0§;0%1±'h~1ˆÒ½g Lî_ô 0ïïšÕÌD‰ñ"6&jšNI±OE2΂Ø> Q±Û!d¹¦µtBF2Cú§hgì]Ú Èe-Mû(…Â"°¬:–(-Ò#ÂæŠýOñº?ý‘Ìôgã*ñÖ;~ÿñ}/Û›±Áqí¯š 4÷ؼîïBBL7ŽùÐEù¢®þÚ‹±˜êÈ }¶W5@TéP=Ù¦Ë0,\Z–-¿}šWãU—k²nŸÖ„7;e0¢gêRâ7ÒààÏ»ßXHaÓ6çòôœœ}·tÈÍ©(º+¬ô¦¼¤Ýι ž ±µÇ1õ!mfsK.Cÿì{ìܦ\S•‹¹ÒàÍ¿?[_û»Ý¤ëïKÿ³`2 Ú½ø­ù.›‚ôÜĵO{{!Ò,¬v£OïQ Z¦µFŸ…ýE÷9º;K'~NIŸgÄôwÐ¥×Ö?ÃcÙ7*iÙ’ž³s9KàȾÏIè% ¹[ËÒÕØÌâ`.3sCˆÏÒ+½cÞùŽ(1Ð/)%³}fQË´üè›úç€ÞдyN2µX`?ïÅí܆~Ï„™Ÿ²|¦7ï VÄDâmfÁŠQGˆQJ.…âŽã›ñÞû\>¾ãÅFgvÌ„f<ˆ`oØÃÞ§•Iœ®È_{Diy0/þ‡âdÚ¸@<Å…ÿ[¥?)e–W?TªŒÝ¬¤DàFž£¤hÝ1¡i¤¡µ µÏ š®«zœòõ¨a² ÕëKs׊”Á.3+CŸ¤GYÑ¥½Jsšú‚×dç3öÓJ7ÑþÜ“ÊÖ¶ôŒ•CRÍ5úN‚»T‚öŸ›µ×-nõŸ£Øp ½ìƒß¼Ž"Ýõ“ïûÆ­¿íÇ?⌒û“XP¨ý©½ô”—Qï'W˜v3Á7E’Ø"VÖÚLnWeR3ë[:]O©-ÁÚ"@¡ƒÁYkbÐŽ¿´­ŒÅŽiÜàµoÿó­ý÷×ÅÍmøÕ÷½ ÿÛÇ> ×î_ßÜAƒ»€D¤T³×¡ í×Gƒ4þ´2Ô\ZºÌ¦‘R,{h=ÌÙµáñüòf®Z«­7L3h²   f¿ÙZ‚o½\5"Ö’x‘Yµ{†šnl˜ŒÞU¦5móŸÂRWâÿÔowÝ„K:éÂ2«®¹u9ÅUYYþt Ïóí—¬xŽ~§M‡1¨ÉZë$0™dŒÊÏ’§Râ—ð[NJÚS_/~÷7Lî=îAÏÏ·ˆÏ{™G‰E<ŸF$ Ü{w–LÅø®3ôÎtzçq )î©áª‹=´Ü/c“å&Í,ã'hªl°ÑcŒ8þ°ÕÝéºíø&ü·¼_ø±ÿמ»û¸P•ê¡j£{²AöüyÌ=K,7–4oms•—c6ÈeáNjÀ|³¿šWB³Î¶]’â†{ÒBñ0Hõ²Û ±³^¾/Vk&úGëá)Us·Ÿlöâ%Z¯ø~Ÿµ_"vÓ†½†˜-Vv¬EÌ¥ìoHÛ5t ^wü¾ãÚ?ËË[3¾'SföQ3æƒN¾1õç^þ¡|ŽïGúzÁ;¿>}üƒŸŸÉ@ kÕ3&w9¹Y$ßktô³¶ú¨¥T.â}'[Ð3ÙÃt °cÖ£ïÔ¬çPÝ€£. 6ØŒá´ÿ¸7¼ ‡åû›C û{ØÎa€`Oö&®¶aèHJïúåUFqh‹Iµ*ÿÝ!°~\ nÉ|×óßñxÿüuy>âĬˆ´p« Ñ€5Î:êO4³#'Ù%6Cwfg_§æØ/H¥ì¨–ʹ¾[Jñ>ÛÜ¥-/ ¥Ô4uݳà5aÁß.Å/þé³ð%z"®9w-€°êQ—¶LAH;f†€k@=²ÐÍÿ®>ï4„@€Ç“UÃÚ!`B>ÊôT€+g|/´ûèkø>‚ù²öL~"{…Ûcmå³4Bíq7’¨’B—D…aü¤uˆy5œ]oùLax»¼CÐÆ(öyå§“e n§‹ú²ÕZ˜²\ºBô^_ø6³£ûÙeËU³Zc %¢"¯¸BÀÿÕó,¯Ÿ…ÓOt>ÿòqÏöσ^ôî'œ©Þç½½ ƒ¯{È ¼îàA³HœÌB´ÊÚ»í€öÂU=N!ãÈ«XH‹ÂÍÍ¡} ü'{†æêaççs\c’Wˆª»ë.೪2>®cï<îØÜ‚ëönÀ5rÄ"| üÃçÁ~åÓÕ™°Lxø´“ûëy¬É#^VÉzpà섬R¬Ñæ3·Gb"”ÿìrËÄü6”ôGi2„È{‘Ï%Îð%kˆ|Xy›CˆÑ7{?,мö2 K%×V¸Š’ö6¯l÷˜:÷™žY;»âPø]~¥5׌ù’Úmü•üö‰cn‘€Ï²žüýQÏ„›”+ÊyAŠò¤P(óÀç¸öd|øÂÎ峿zÞÛ‡¯ÿÄzÕA¬`ŸðõFc'šu”’Y‘{ˆú q3õ2žÉ{ü÷L0ØiL¶0æ~Ø6ΆšÂ’‘ùdP?Øýž«^¯yÛSð¨OùÀ\ØÛ ð·Hm‰ì«’øUãLk©ªe–”eÓOyk—ãg¼êY.4ý¤ûDb=>ÊÜâIgó&šMkç’BóG'9ˆÇý‡ « ·zL2%‹Ûâ@7žÁ?iûdo[%1†€MíPéüŒ¶Y­’D¿áŸ­à¯ïÂä^7[zeâÚUð¼àÛúlϽk!¬ò±¥Xajg»ðÿGxF°ŒfÈ›¹¢²¹ÒÞf^yh‘x샞ëfxÁ;¾nU;Ÿû¶Çâ ŸôB$p¦¿ã‹Ç"mƒwnúöòñ$--w<, Øväuϸí,_QlЊP¤ê×xŸB·u'ð©&ªƒ¿L@$€ÖÒ%Ü ùL€ÎZ¸uÿ§ãQ÷:8ƒf0M­Ü¯Ã)ûÏS"¶> 0„inØFc8ÝC^€¯{È ¶w‚h‘D«ØŒ#˜òõØzAûÝ]FÞØ<–­"º/ÑßC&ñn/|óÑ@J~Z¹žè×EÑM²î¹âzá[žAõÿ"ØÛÛs¾®ãÒöÐ&Á¡……ÆF­`éÅþútì˜gcç.…ÛŽ1Ó´}º±{ÙN2oð;6D¨fÚ÷â£V'+5™?m”Û2—y~z—áÍÚ¢Ç#í¹²ÓŒ ÞQØ¡M¯J¶XÕÛ"óX´V ´*uéÙ®èùtгD[n€.ýàj3\nÓk²ED=êþOfÈ¥T„œé@,a$1ÁL×]c“ÕdõSÈ+3͸M’¯ÿÄn§¯hfŽ0•Ñ«vBÆ~ SÜ5„Á“Ï>¶¼ÑVgmIàˆúNÐ~ñšÍ£ˆÏ® ¨‰ß6avþžæºîü}1È>öä¼sÃ`QAÃ"ã6TO9Húé6 È·¼`Ô#k,‹{¨±pœÁí!¥ÂçKK.Q(‚Ñ¢Y©íˆœ+¹Ón%L@7zôÈÂ2õÌ•/`b^£FýWçh˜4)¾oV†¦Çd²vŠkFáM×¢ ÓB¶þFÈ7­Lh[uÒI‚!Ä  °SX|ºßÓb;`r1Dåa†É e³\ÃZ‰Ì”™ñͺ1fáiò„%!Й¬â½Ô¢©8:$øü©è‚ â‹zsz—ƒ‰ùpŒh&|ðµ„P™qÝÕmõÖ¯,ŠWýÉ=þÿ¥ëùoúÆj u˜Åÿ×áz ",=ÄÐÆV H|cÞÍ;û5O_*ê§ I³ï4kÔè“C‡;jÂŨ+pÚ<+‚”îuÊ]w±+ªkÖ­SŠxI›Ûy˜¤MÀ޼ñ™aJãXsé—\ó8ìdŸyw,—5Ì>¸b¡w›ßÉ3V¶çܯEбÉ@Ïùa‡ZÊ $Hf*©ÅË”u”ÍR†V:Ý*xWjB$³æè$½ÿÛÌḭ̂g$ й¾ÔôÙ­Œé$ 4qÀæœkOB¦v§1¹¿Ÿ"E²ë&T­.ƒ‰„P‰/ÀPµÖ‚v°Ø™X÷\Û®ƒÍ% "Pli‘@Cäú—µÿvU(ÔÈ¡!Æ”\, ‹B<5X &©I ¸U$鑸‚-¿V§¯5FK³ûÅÀÏ~e^Jí; *µ£}Onl‰€Ix`cî•’Ë:MZËJ{y>$lž"ŽÅl/ô'€X9iQÜ®m¸Üë‰,çøv/ €ë »æ° tOi=æ{‰ŽDZ†_§ãQn¹}:^éEzZÜem™ŸÒT@Gó4'„yÆÒ=BÇØ·žûÖÇ.“T|:E݈º'Fn Ìú É5ÃGÎèM áSuLOþÕho'“L˜;4s] Òé`÷\‹×Fðìß"ƲÁžìµS*Èøøó8%J½²p°e€ÊB›ƒ@|Õ¾’0þr÷!¹P]À¯hdÚä9¦Ì±nªŸ/Ü€šP¿ì~| Ì *Ýú¢ºf£48Ê'+s‚°h>سœ®Úÿt•õ0Jô›-õÙKº¿ü™¬óÉ3;·¼`· æ`‰?íl uc‰œ„So«Í\Uä„q\EvMÌtÌ›¸\Ã-44}ƒ"$úzEðœ·>f Í}›Ô´ ¬#!ñ5/ªå¾fËÈÂø\ÀYûi­#¹ƒ LìÎÈbjK'|ÄO›R­G¾¯Ó2þb_oÃþp{þƒÑ u¾¤“ó Ý “° ZöÁjbØç!/ìÚüâ{*f)¬Y¹‚ #x®+¾N÷…Q\š‚î¬%ÌÒ¬µ§?_9]¹ÒÚ_k0ÕS+&|únýqo†vuÄs±€­˜Ç¡~Ø÷óøËZþBDÐ:°íÁ]àïT‰N9a:‰œ—´+'«ºßÓð²›·gø|éOòÏ_ý1ÏL‚ƒá‹×¦&Öva“¤€dfR¡K®ž¹ë‰Ÿú×\@‹Ç^ ž|ÀSâ,§­-h“œ )%ÉØáÉqº‹Ò½6>v¸MsšÂ4Ô|¤µÜ‚‚Ÿýã'¯¦Í_ÔkÔc 2`SŠkÄ™çAÕÝ;FRÇè¾Î<7ƒçVÜ|*ˆ™J¶ioîßg×\)”ƒ{B° ÒH¸=2Ô—-ÏÏK›ïÿ´×‹ßóÄUϽàëòú¬½žø©/޾Ñl݉€&¦)} k¾‘¼èÍú“;;ÇÒ9Ä“:ãEñf’>àÆ€ôXˆ[}ϵîR)Îö‚q®‚§#Äâ®=‚ðm?ôQyÖÍÚ©ð}q7Œ¦ú tá`šxGã…u´wh„†›\<ì!;Äž—®½È`;%*}îÜR®}ƒÚ‚¡);¼ŸÅj èB„,#· R¸Q(¼ü7e.Hây| MI]èךßéÚš (¶@S7ãxøK.'âÍmLû¬^û­÷’)*À£ðLXÈ×O}à›pw¾žø)/†¥o`ÀçáN>E!rsŒ³¡·õS ZCzud¤PÛØ^6‡Àà ñ¶Q6"AÄö¸ l3#Ü÷“]¥Qµ $å @ÕÚÝ Â‡/Z¶ú-ΔÐä¿6€ ˆÍÂìxÍŠÓÉÄNWœ¨UŸI)9Õƒm³Êê"É„ é†0]e  5…e[:h1ƒ¹[Œÿ½fEñlí°z¼S )ܶI¼t‹Ê<§•¦l”ÛF!-’SÛ\<ºðÓÌ;»@oRÌš’;åĿߑܵLBºþ=ÿÙi³ÙW̳‚Á øÉ÷o?Ç÷®¾¾á“_4éï¼4M£ÐºØKÝŽ‰MÅ%·ÌœU`‹eâ妽 MÇHg1ƒ›&Š·Ûó\©ÕÖ&2P˜Žÿ=×âõÿõ ð/ÿÖ/bo8‘=׿m7w ß„_Òx˦™è{êdiV›iêÊåe /íÌMšv„O Ò4í!Ü8 ªÞ vy‚9ÒÎɘvÍ(²‹yé@°(ó(©Tnþ0yý œð±µ!°cS›UMû@î&!z¹U-=ÐñŸ[®Yù0óÎn°¥‹Np¥´ý.sf±G TFúË —<©N®½ÝI.tm‹¾Q·ð’•.Ÿ“^_ßÒ9K(•¹•’¶qÛiq ²æ¢å]óä2Ó˜<¤½³û'-_E3ã3@Dì­²0y½RfC„_–…ŠÀöSºï¹f®Aê1‘Õa§ôn‡Xe1[äqˆ9¹”ÝÙŒ¤Aø!ðí+íY% —ŸiÒ°ú+³%Åç“›È_µ”Bw9Q›|]ÃSS¨`iÉçÕãäÝòr¬.µfÂκ°^Ú<ôŽŒ~ f9=zˆ@·oÉ]ÅV‚PÛSbJ™ï‡lÃÿzl¿í/>´íe&dçÀA ÄXÒ#Êî š°Ë&Ñ).ÿÍtœ·$¸ž¯µ“½ÄG¿&UK‹TÓÃ]ÿàçO|ëhLч¬†Ö¬ÑÎtþ['øøRi‡ª7°6 abJÓD=ö»6M˵ŽrÁ¡±ù‹J ‹¡cÎÎf2««Ô½ 5¬{„ÀI®«ö¯ ¡ Ú$aå©öë¾ôÅV1cÑ}ñ¦´}Œ|íHÑ€½JÚx›ŠY4Ôw]ð´ÏÅÝMamšÖk€ç„kæ¥I¤P·IŒP$ÍÜ$c7L:¢‘ŸaÍœ,£ÐÒÍz¯ôr4Ü9®Õ²Üî™ýg{i†Þô‹º ë´b¾z¹L'£Æ÷aòù˜îËô1¨1ÍôYÚ<[I s³QgóO;°3pJ#iÅ\îd”žiÅYªÒ¨eiûx#‡´†¹,¾KQú6$ÍœÖ1ÉÐÑJÒd΂±'´e e•Þ„PkŸ1N‹Â޾ܹ0¤ÑJœvá]êú‰¦y§ÙJ»çZwUÿÞ Uå` Íç—L¸Ž.²Ç3zðÏÖ=,°ÍZö‡(“B7Òä@Leî²R+°aŽŸY1 …’gý+ñLm‚Ï\Ë‘†š$Œ÷Éæe§¬Qª¦¶/SÝm¶Ç²Y аi¢yšê´îWˆÈÓ>f««ûÛ‰¹dp:ÿ K åÝèø­8gvõ1»BBƒMUöè!¹c´ž—+³gyc˦å¼D57†v’ƒ¤o”«»ÏÔ¯ £NØ•wP7TMn$[û0yÉó( ÝÁénur­½K¦Îå¼Ì—yqàçáC€Št4¢¶í2(ï¹ò5 ìÁÓ3>îÚ}SF²= ™ï|>úC¶o£ãc‰wX[•ÎÕ’šwÑb ö¢lC´Ÿ¥¶¶+¬Kš.s5q+¶¹G*ü ³{aNÁõ÷X8™5.k3w9ü¡MQÕ¼ÞÂó†'!uÖ­ºSÇêp<Ÿ°d6t¥O4sV؇wQA¼àãúo¯|ÐïO;Ÿ:WéND þMšA­1WZv‚K§Áä.‡åÚ¸rC¸aÔ !é!‘Mø9pÑ”¤ñîúØ=׫ÖJýŒ$x1Y<ÊLJ8½||Ì KK:`ñ’tr2°MÜNö¼ç¢Kˇ 9ï2o÷ “õÍ Îî?ÛîL 'Ü$P8´Ë\Qœ‡HLq¡F· µƒ” îD'Ûø·>L5óºo=A­}(\ž¹yßâ4G :öZÑ?²$‰ô)ð2xëOÌÔ,x›Î1/È&Ï®RÍŸ0÷=Ýã0ξ$½ñ} —e‡@zoýØÏ![8=ûª}\Hôæ“q; Ó·°gbÉà†Nh1èòÉ^5# :ûø#Kì‰ð™:ªE©æ½€²6 &ek¨Õ¡3d蔸0•£o1g¦!Oý{®õ—b,Çà£4-Ó¥Û´÷øb·]ð¤¤wò2,ýŽPPbwâøÀ¨…fˆÆó I2…1‹BÍþ”äï§yÕ€ ºJÊ ¹Iõ³wg`´M+ ù&/Õ'Ž»±Iñµ±‹eïô›é•Ûg88”s+M:++>·k]*~Æ ÑiîësPô›Þxö! Ì¢ÕŸãó@ûMæù]ò9vC»Ï èèÝ%/ª ®ÒScÛ»óæÊcÿcJÕеVsãdKOR³ó!0¶ð&“>Mkaºðë0}Nº3æ}©¡5 2r]„ö…0#›Dw÷@ ×=òFœ.`SŽQtĨ#þªýˆµçÛþóàÿüÛÿ׿7¨ u„Û–  Ó‚©¯Må ^õ·>ÊgCó‚¤çuêwÞDX A›ÑãcÞæ…GzDM·¥;v1m#l|åüí{]b¿ôÚùÀ>7Žxõ¾äÔóiÝÔþPÏíÎh ² ó²XtcHÃ.åqÇŠ‰[ š<Ó}N ÆÀ¥½oéšñð̧‚èògÜô#jø®@ø„§~qKãUQ‚C¾HŒÖ™î'dàÎ"δáÉä!äý¹Z¦Õ¼„N­…I]‰þÅZ+èÀ_R{í¹ˆŸê#¤ºtâ޽ɗh,}m‰NNs*Û•¶FÒ.p+W¤\‡vfúXñø¸ÿ_÷ȱ/ûø¯¸ïÊ7Îv½î‘7âÂÞUíÔ-Á¨”Rp4^Æ þß¿Aöð˜ŸÿÌK[øRˆì:´L«š”,λ‚mz†´¶1ó]l5C] ;è‰AR¸±ÅÜÏùñºÍ‰! "\ØÚÌ•V>åO{½…¼&k‡ŽT1,Öy^«ý šʻ×(bB v‚µ2YõÔ(Ë… ák p’:`w»(,¢NžpÿØO–/uáóÌ3Ëûf% Å{70öNOÌxd£wBb xŸô/J?Ù›<·NÍ ËɧðLHQ;(Rf"p¸‚‹ýwYËFPbò”ò‡‘–ŸU¦£M‚¬= Oœ M8ªÖ«k}Ud!èô ¦1í2„h¬ ò¤ÍšŸ‹q(ˆŽ$¼dJÇîzíW¼Wí_ƒAö0– ~â¾ cÙÜeàËõ GåcÙàx<Àáx—7«0Ђç}ÉoaoØÇcþ³î’¶,]×»{CÝPÜ÷Y*ý¥4Ð#­°×Ð%xŸ,ð\PYü}^œ4Vbߦ….ôÁó%¡Ñé¼Z½0Ⱥa¥Ðªæu6oq=×›¶3Yµ±©«KáV/¢ètjW áÉûTµ—©H»Žš¯f3µÚç© %?ÉIúøV+€q»òVÍ,X'ïN€. ž1 b½µÔÒÛ¦&i; #w†‘³ß>®yÆæZ0äžç°6*ÑÚ!öÎÜÚþͨ-INåÀÍx¦Ó0`Ñ1Èýê|•Ù¸©„É™Q™Yx˜ÐÖ.¨ŸYX„‚É¿Çh1Øþp¥42B aêMLÁéõºGÞˆkÏÝ {²ãr„ƒÍ%±)Çxöÿ®ôÕ×wysÇwâpsÇå‡›ËØŒG-ß~Aч›ËW¼»®ýa¯%… ­Ã-e˜æë;áf‘ôÜÄêã5ª/û£;`›%íIëR=Hæg›·\@ÿ D”ãy†¢Ìf h4=\1ý•nIÐŽ‰cî*W‚¬=F·–‰:¾¯Âœ?A«LÛî³{4z%X&Š®“2LÂsÒF+ƒù¦Ò½!½¸ÅÄé@ú ™óÂ/ÍOµ¡«N|ÔY“弞 ”›i¶ÊomîqìÊÄÂ^r%M`éPøžp1 p˜¨*½ÞÎDd°Ë¦~cȽ3ˆð¢3F+-$¶"ùMH;q™B‰§¸™þ\wÖ¨¢mÄ©g>ÙÚ5xÛlB±Æ@át©¿<¬Ž0ƒ…Fim ‰;¿ŸëæY Ûf¥…Ú¥ñLV?øK›rŒËÇwâh¼Œ£rˆƒÍ%Ž—q8^¨ìÉþþ ÅÁñE¯Ï€¿‚~ý¯¶º è›‹8Ø\Úâè¸ë®Î9“§J÷ÔT+M©Ð”³®Éj9ÉãÕÍ“¼7E|^¤#*{¥tŠ`ò±d WfØÈ«±Åf‹,Rëã²:—æí ˆÌ¹]»öÇÜ…[éÖ( Œè¡Äæ¶[É´€ÿ¦ŒÝ»ÛY£L®G´+¬ÿlô›¸€:š—ž³KݦM*hb—Û”Y³ó+@*4J€‚;&"¾kýÃꋳGíîqÉÕÍ–ÍÚQ¾`H ƒ£í¬_.‘µ-nóœØ&371hX8.”y™3ì¡Î¤%AêãÃf5ú‰Ý-ªKÛ§1åö)gŽŸ€W=ü]dÇã!ŽÆË8qp|wÝŠËÇw èè“ç¬BÀ, ÿr€M9ÆX6ËEG¼éÆ_Ç¿yËãÍ7ý† ‚£ñGã ŠA|÷ç¿ôÔm8éÅ:JÌ7ç1ÔÏSWó‹?0è9ìÓ\I)V|>u¼Î“‡ÈjM £LU‰PÎxn„¦ÔI}ŠÇ$-ÑTPÇ«½=:÷™]£y:Ù ÛªÚV)Ñ…K(¼îkÌA>ÄïÛ§ôãDX·Ü®é"°€Ï˜¨ecyGÒy£IZå¼ô±ø*Y’;Q»€ME¡l¡yz3ˆHþƒ"bSå;/_¦©´ô¾ õ“èR»#2c¢,{Û{a9gÄO(J7¦²š‰vì7îèÅŸ\sq›:—kx-Ã2?ûûñ'·[t–æ{Ã9ìÉ6å—ïÄ-7âŽÃ[pysŠœß» ׿ç†óu¢”Ókàfi‡8.‡þEG¨üÜ>?ÿ?ž &b{нÿ2öÉÿº÷§!â2\µ-þÕþ_øÞ_ù?NÝ–µ×ñ”%" - ¤Õ’íU‚"PŒ(®ØŒÍ.Љ–<‡Ý:%98ÿP ú¸ºBHA¤¤$Å ™ß¬m2QbmUMŸ¬ù_£æy-Y’ñ%ê´PT£­ú¼æhã¡öø‚5GKYu°ÈD«on•3P¥sÒÂô)ÔÊWc¬=52lÅü >OÕ²-ëÆbïÑ+SU:¤7'Nê4â¹Å —ö¸®¹ŠÏý‘XÑf¥æÑôýêKžS® ©Rã3Oõ€Ù&A¯é€¿çñGÏ‘i‘ª©ù±)ŒÛÌá®!ML4Õj‹xaVš P×$M\VÐD j š†6Ìtiž¾®ý—#Üqx n¼ø.üé­oÆ;ný¼ïŽ·áæKïÃí‡7ãΣ[q°¹ÔûøTxoilÆ#ÿ_}û+ñ ¿ô·üêÿÇ­oÆ¿{ëO¡F…TPÙÎyäЇå2Mq*“A0äÏSšOèJ!(4ެ`Ђ¾Òb¨•åó‡× Ì‚Èõû&(^tž™ 6¿X¥µ(îïœ"i iÜ‹õJy1ÂÚFY?í=T2cÇDèV  l~F€K,7án%Å)æ¶»k1Ï2],>É5̽ðXú2IË3sÊMr05Êm<•Æš{vMã»ñ’›¢k'»ÞدÄ\Â&tv†n¡žLV¸D•ð˜|ïÒ—5-Ï&1ˆ/,ØjpÖÿyDb!pí`Úyö QšÚD‹$:}¼¬ìl‚/¨û«ÑÓ÷1óŽ3ŸìcÇãn?ü ÞwçÛñ¬ßüFüäï|?^ú»?€M9„ªV·ÐæbuÈ`OÎᤗ´POÛàeþþ[.¯{ËáòæÎÜïv½ý–ßÇxÛÏ4ÔÎï]Á€M9ú0¹‚Œç8ú;ŽßµY'Àoÿ&'‹Ö“¨I¯Åq5E øˆ6L8Bù_wæ°L&SÌ_Wt:ù–y@¨,Ò™øù {ie4É‘F1}Úœ`‹<éÅ$а Afžém‰À4+>08é—s¬D}æ²vïæL5š îëÌl=@‰ƒ3•5@¤Ñv°•a»ýbÁ¥[U•o%‰ Ñq“Y'j,Aÿdm˜¢±³þ¾›}>_úõ ™y¾çªÈa‚"Uœ = ;–ÑIo‚kà¦öàoÀå¥É€?×ÞZXˆpŸ¥žkëEÙàÜ”C\:¾·܈/¾ÏüoH¿¿ôw?þ†oÂq9ÄXŽ=?þÞ°bð½||.ߎÃñrÓükhçÏýá³qçÑ­éÙ{]¸>ù¾Ÿíßåí¯À/¿íØÎŽÆ-§D'½dˆ5$5^Pí@zÝ€ñŸÐÖne”Ìi½ÈÇ»Íg{ŠVyyìÓTèÖ¯#p„,{åêiŽsÇfõµœ0.óu¾ ”C‰’îÙ˜¾¹Øè Lq-õ1ÏÛ”s‰Tü:RÇa‰ÛYÇå³_gοQO€é­ù•¹®®¸)=1i ±)ɺo’ +/t3§S5‚û=ö v’8râ÷+Ý1Ã5C'Vb¡Ì˜Ø ž2aÂ?klHî¡Þ³ÏQ>§ÜãŒ(‚ùXk:c`蚀!ôµã~fFAòþ2`ooƒHb¶ŸúÒ·àüþ5.ߎ'ÿ—G-²áÓýë±7T°Ý“}œΟ|‹Ž5ÒgŠWþþà?ÿéký™®zàòñøëû÷ðwò•þÛ¯¼ý¾†à!? A5uÉ>gVŒ+‰¹†æ‚S+àf¢cŸt÷'ì²cúYú²y$óº n„"fëE&fºö.%{“Ÿž!lÙÓÓüèîú¯ãå:³«ŠÜks. Év!lX'ð ™¼¡²á“ò:¨Në±PPžóÙc|¡yVN¯­a C¦Z}Ä‘1„f8™”ž‡&-:ù»Áô¼2É̖ȼÉ2»Å=AwfªÈÕݶ»”mDçÏ0sS/¤+(ÆtR:»‚Ñ:ÿ«×ßéI0Ç„Kuˆs]bwêϯȃ“„E˜( ]Z—˜N WªUPÝ“}ì ûØÎãþz=­íÂÞÕÚYKGãá„î»þåxÂõ¯öïö®v—ع½ó¦¹öRhöÑ 6åGãaÿ\û@Üzpà¨@µàï}ÒW¥2þèƒÿì\.UÅÁæâ‰Úp’KtQ×*ÂõØú¤¥ñ–­†upî(Çc6¡Y|6é{¡î<@s–…Á¬Õ3ªÑv‘'Ï)!p'.’æEùºÄ–]ý¹áîÒœ[—È'sÅûÉ*RÍ”)¡ÑÝ3ÆKËlŠ,¹¥92 ÞÒ IoíqÿMÉeoͤÿt͇¶‡ ÄNó÷yA/«·. ³v ©ìòï£Þ•2Ê × ‡P{‰9b ò™2¸f^Ë˶-\ý0¦¨L±U=ƒy¯Á÷#¡Þ…m`Ê‹cn}í][q&ãáèýþH‹Y,xxÙ±&@k5¼`lÿ¹/8¯PšãÜpן¿÷»æ/y{ŽËn;¸·Þ<¡ú îø*jøå¿ïW¿Ý@Û½;k®¢‡›Ë8ØÜ‰Ãñ’ßÿÐ¥÷ùç®ú(|â}>Áý¯ù8¿ÿ–¾¡•QCCÇC<ñsŸyªv¬¾DPÊØ ²Ý†ZbãÛÒþãEÍs¸N|àÂ2î¦oüæ®^r#uŠ_j21WÒ\E"Óç\;T$—˜_ʘÂiŠÊ¬6güÙµÙßñg¤ÿØ«o$ôêÄï‘(¯ Õ> ✫Œ…™²|¢ÿf0’ÉÀÏš0ïÇff¬æs9¨XVè$vÔÂÉóÕE‚¼ÂÄìO¼I÷$ë4á÷êG‘Õ îg Ða./øÓ¯Ãi®gÿñ×nýý›>í'£ýÌ8NG— UzSÆÐÞoÏ9ŒrG³4OÔHs£ŽO,ÊKÇ_&œÔ}s}[ê8äIš¿°V­®e•fÅ/t€ ¨- ^k÷oŽØÓ n?¼?ø_=KÛßùÓ÷ëÏ߀ û×ÅÖ_ªE ŽÇCŽ—&ÄØ„ \:¾oºé×ñùúR\&-ÿúó÷ñÝÉ›r„ û×`o8ù±ÚÛ®©»ØÎUˆŽ¡¥îN¶ÃÝ åå d¥JÜýP("¢Sð&\Qig‹ÉœØ1lJ…¢V«ˆÞ/ÁV9¬êˆ TB uk«ßGþ:«7¸¢³`çTk§+Šäð7­:Èóƒ]Ä}õðyî!œjn9´Yˆ¦ ôÖpKײ¼ ng†§$AØ­‡×kž{u¤MRÙ•Ì3'ZÒ¸±¤å o&„´&ãcb%°8BÖ‚Cu"¾ð]ù\ß»òzæ~ÍäÞ“>ý¥É’±?Ú©Jm§Ô;ѯ@Zê'ZÌ·MÙ)æÅ£îI×ZËRYvfjГ¶O[?Ú{~ !Lkú0 ÙÃ0 8·WYî`sEËdvÛuŸ«?ªŠË›;qÒ¹£ŽM¤Z°M€ø/úZ|þƒ¾¥„`¸×…ûÕ}åç÷®ÂÞpÇãé,‘õ—b==¨#´}W-MÐ6@ðè³>c'Á‰*åR`k¿êPQV·ÊÐnnuøº^¯ì)Õ©$l„ uá¢@ší>D—ÙnZ?oºÞûF±úÝéY´Sª¿v*©§++¡Þ5›‘¢u:&R…Æ×Dge §M·ª$Pip,ž‘`q–´÷f€Hñl¾É‚OcñÑmYó|“W'ÞÝ. ‰”|sŽ%D´ô¤¾\ÚÐX"£½;G|¤¯g¼9k´ßòWz*¬ÌtÓ1¢™G¼oÅ,¬(CˆY‰mÙçë&2ÒX¤]iÕŠ\}‰úQ¾iDõæ–0×S lÆ#l Þzp#Š–~¹ëԅΣñG'LÌöØŸÿ,üÐßûÿö†ýˆNZ¸n=¸ /ü¾;¹š.ì_Q787\Àþp£npp‚öïîßÔúuEÁ±øC”¤½Ûý¾¤R‘ÎÇ h@ܧ¼´ …NÍpS€A;îK{¦_ÔV©×dZx«Tí7Dó¢‡-„{FO¯«×xç#À²Öú†\+#7¸3ÎS†µ;”ÙÚÞÐð†žuUœºÇ\Ðv-VfŒQÌCšK±ó2s GNô7¬Ó¸÷'?ª ¥N^Äõ¢S»ì÷_°÷"A¼ÝI;ö:«A’ ƒtåæVzÉ{î^ ¿ízÚü#ÿü­Ÿñ²Då~9’fD´LFšRÊ€IDAT 6Å72ºÖ¯A3×öL|±“ð«tªÓ¼»É×Xü•š*Ø¢üœWÕ–VYpçæ6À-—?€s{Wa§šånœgþæO<â@S[üà>ï¸õÍ‹Ïÿñ‡~Û?ßïê¿„û_óqPUì ûP(Ž6—“‹èÊ]AèoùOþ‚ Áö (m1{¾®Í:V&ê”H)¡ý á8)dÒð)ö‹$…?Ô“ÇÇÀ™%§d‡ŸO Î£t–‘¢‡žš [r[“eÓ£žÅ ÍÖR4Ü+Ù Èî±6B_Í î‡‘ÚÂàÏU[ &(9ÍfÏ6ÅNËÔ>š1Ó&TènìcòNÖô<Þ-áÉ—¬ên›éšdg0`Y/'^#.Î:)‚_!àÿúO|a·8\ëzöŸ<&=÷ÄO}IÒžŸõ?þñ™êýÑß«áŽßö/wzÇà‚FÝ&)åYW§×f†¦u%úݽ =q‰ÄH6¤±éÌco/ÂÄ•’õû#î<ü`Sޱ?œÇ¾œÃ?ý¼ó~ówÒnl‹¯'±øúÎÿûïãÉ÷¡PìË9|æGÁ¬°V×Ku…~ôuÆ5çîÕÒB"8/Cµœ´³õÍàú ÷Ã0ìaOökn¢RZÛêAñ¥oC(YM#mƒîÖr–~¿—§>,dÒÇ?<6‘_Ÿ™•ê°ö»®&Tä„& ÂeáÒ¹BºbZÙS  #/ ëCøî+ H° ´ö¤'rfÁ23<Ÿ¢ÆQrŸÙðåfd©­ 9±¼!ÑŸ¾Ýµßÿ¨0CÇð'Ðq€'ª1pk,J¸C¢uŽO ÜPG­<6âýmú$^òž“k}ðø?žB†N\¾ØQ¾éÓ~!0j!ÏxËWŸ¸MOý½¯Â·æÏäzÜÊáåiÝAE`}L5=c“4:Óí|Á¤­Ym!IÒ¦cáfÒ”²êDö eã‘7OýµÇâ»þ—ŸÄµçîÝ,Ý×cþ³ð_øsøÿñ§â¸ö|ñ½á>þ^Ÿ2ûŒBqõþuI»ð ­¿èˆn0ŽÇ¾'à¬×üâ—.<WŸ»ÆrˆqÜ@¥À\a¥­Ä®SñCGÌ ˜;>)iìmœø4,{Èx#-jÒÌ4ÔVNã‡ä–k¾á6‰‚ê{…°Èæ7(iäV.¢¯„¸[¯V[Æÿ^«7€&u_=ûUøúÉ„ãk(KáDå£7“—Äw×wr†Ýk®kg}h¦ã–ü@ûsZKMà0‘¼€¨ñ¾…Â;<ѨgÝâ *ú¦KG²"ê[õ½—¼w=ø?îž—Ên*U[ìtŸÊ.Ý9Óײžôé?åõ€§½éÑXsýÈï~%¾ý³~&ÊL\”Ÿ}¢¦½÷¦«½Šî3ãqƒ ÿ×Á"@òxgò´FL|Ètd¡Õé“aD)ŒeLå^}î:ì«Çöû~åúçü{¿„O¾ïgáÜpaë¾>Û÷›þíßÁs¿ä (ZðÀ{ÿeœ®Âq™ÖÏñe÷½úcðÉ÷ýÌ8 ½½e=˵+šéÞW݃ Ø@a{êñ#´ÕšqAÚy¿æRñÖW>g¼h˜ÖÞ$ að‹+ÈfHó(kÏ®,¨=F>sŽÆ±ç˜/]h„lÙ§MçQ»Ke"ôz‚›Ç!--·½‹ÚÍâPþ‘ö_ä¥â9›•+M%§ÅgË-„oñÁ ž©Rs›M‹É:]éPx‘¶à2’()ÑŠ R34 ¢­Y©¤®ú‚- » áÔPüÄ{w»÷ ç6LÛEÜ|ôŸüç!Íÿc²K«ÔßòПöìÿŸ»~äw¾ßñY¯ ‰Ýmá/›€yÔ;Lh­¡¥7l!*/ƒè#>ÓæE"œÖ6ãx>Дj`¥Ò´UL€Ú&ГþæsðŒßxÂÎqæë÷úT\µ­o’šÓÆk.¡¼äÿøœß»€ û×¶wàÜÞ<üÓ¿ÿéO_ƒ÷ßùö º¹Á½.Üÿ“ÿ ®=w/”v2X]€UŒ:âE¿ý='j󔻿µ[ ¿æÜ½pT.{ZlÈP©i>ÿ½ºA eI-™÷}³e±T¸ln-˜­„ª;1€µ?¼Û»7\3%pf KDÝ âZ=)9õódçŽBÈ¢%ø œð^åÅâ˜GÉ Qð ?~ÓÖîˆìÒJý3ª˜~eB°³jy:í‰RŸ’rÖIÒvÅ¡ð¾Á+ŸÓéC*êj«˜%iVŽm„СƒGW¥4Ó² üe§,<öÏAÚoÀõùDŠ­ß¡ÍtéœwlÁäg!“XUïè÷·þµ—A<õ÷—Sþ1$6 ÕZl"§Ø1¶ÄÚ1/[¿Aí¨5"Âö¨êd1f­'Å‚ÛpZ[!†ÙQ n.ãÜÞÜçêÆ|áÏ% Ûõ²ÿÏãºó÷ÁñxˆQëß^ͱ]ƪ9È€ û×.ßÿõ!_ŽÏð—â-7½¯øƒÂMߕ޿ß5 º÷_n€[O³#"g÷ÿﺪ߬ŠÍ°mIì*}‡”Šp°(ÎT´éÒ!#³´ú:_(Öa%¢&¡ß†ëGx Ùªè±Å¿*&®!_»ðW¢ŽìÖþ5¼›Å ¼i^ˆö »1•ø]¨]êdf=ÞSÚ=1é,iãâcî"W¤lIƀ邯©åˆyÛ^e·P¸jW §í¦Ú±Ó¦ËO©JQ(¼Ô~ ß ƒ¿øã=¼Ù3žiPޝÇ>ð¹¤ÝFk©Ân(HÅvlí4 ;86í€qÕLŽnñEßÙ’‰Ùê„ !8•<)†Æ-SÓ µY˜ÞädÛÅ„oJgí·…¶tBŠû ²Ž¤•³*ÀþׯÆÑx€sÃyÜûÂý°'ë6U½î‘7â>W4Dj˜¤íÊ=.G8q4âp<Àåã;qÐvßö‘zØæTûÃ9Xb´O½ßçà›>ïÇñˆ‡~+rŸ¿†«÷¯Ã®ùx|Î_ú»M[‹£!ë^€£3»ˆúÌUé:.GMV ¿‚©ôÄ5|3ô*»QVZ¼ sÜ, !(Ä@š^Øæ¤±¶x³XÍ’Èý¡I¿9ß2¹k<³È æÓÄSöyšÈœM7`ì‹t3ÁéÕ ‰÷_$Oˆ6‡È5ãúp¯” Y š›:<&ÔX%EµgnoN3ÝãpwíU ”ÎÉ<˜ß‹ÖLcxš[PÖËScSºI28zš(² “óÀç†X†Í4úâZŠ3†ÌK—™º‰AèÂ=m›6:ÙHõ|Ûgþ žú»_‰¹Ë&—{#Ý5ÆbŠ\XÖ¿¤\daÁ À™_¾Ž¿$v°²ý™Ný µ†ýæÑ²‰V0úy»v]á>-Ãç9ŒG·â»?ÿ¥‹;ƒ_ûïO¹øÇr›Ä£nH+ÔºPÛêÚÎc¡f…õXŸÝ“=ŒØ@Dpý…ûàú¸/Âg|ôßÁq9¬n+-Ø”#ÏZw×Í`/þ톻âòèÜyt+D€M["»‚5=¨X¯|¬¡«ƒí^ ! ÅÒt¡úÓrÔç¹®ô2¹ùXBÞÒûÀÓŽÿ>N¿C{ßs Z7/LVW¿tvêš¿iòµ˜4ì¾ÑáF¡“Únµ©Û‰Ü1h1L追(^¤ ·S®³µIÉÍÞy¬¸ -8Ñú§Ò5ÎÈ`¡ùÁI¬~ÀøtóWâ7úlþ²NtÑMtù “7 ÒXÓBvngxCv-ÃQ¿º]0ÆâI˜éÜ4ð-­DbÓ L×wZ$ó¿\PÒlú6»ù ×Ô#…EL}éJœi*/Èôi5úJ]wPÕz²]÷¾p ²‡ÃÍ%ó¹ë5x®9w}Ët„Ë›z¤£ùµtµq´9h)ö*È—cÙ8€´ m›ÂJÛ-|4TWæi]3ŠâpsñŠ€ÿ”óÌUõÞ~x3^û–gb,5‹é0 -­¶†æ?4`¥téÃóæ’˜ðýâþt*'ñƒ;óaºâ4¤êfœ¸ô°»t”ÞéBέ¶ô GlŒ (h.ϸSzsñ‚YìJÌO c‡I|\f=7QÂøÀð^QÖ®RûcŠÓ˪¤XïÞ2ð U7òHJiü<€Ày€É°7Ћú“8ÈëÇ;´cì`0õA­|€s׋Þõ„¤‰ÆS¶Ð@ D2›Àý중È>K¾nGÁ&×FÎ~ñ³Z;žú{_…¥+­¥x½,s³æ >ÂA%߯O–Doª*1’ý6P;YpLq/Õ%kb’€&­–‚ý½sØßËiœ÷ ŸƒÛoÆG·àΣ[ñ”ÿöOæé#‚ãr„‹Ç·ãàøNm.U¾¹eª.\ä¥ÅÊ›`˜û¯´´à‹[q8|¡¾Ïÿ­ïÀOüÎÿ‰+qÍ{eó½›/½nǦ¿ «ê3. üƒÞ¶ÑÍè.‚Dº±EN9þÝx‘s 1K4WŒ'>SâŸ^wt@'7w*Ï[˜]1JH µ-ù»=—wÀw\Ú5 ®xF£¼½J”¡2m] y:éé z†çˆ¿ÖˆÌ ê²óºWÇr®±Hí!³e@³¶Ü,âbš'•M„‰S$¾’܆íò3&1âåsÔw®öuÏ]/|çX|$¢:S@6àd«6ÖÌùLÙŽài€Á. ö;üÈï.ƒ?9oó`S{iÙ_cAE0ö.‰¡Cà™¯â~¦†‰D¶®tªAj’[r•Þ{Ã>ö‡s³G)ÖÜ6ŠýµÇÍ’grp|9ª¹ýÐ[TŽudoØÃ { (Mó_úoãëØ”#lôªŠ¢Œzìî` °ïÊKq\ð®ÛÿçZJíÊ¥…aü(…–ŸÄÛG§GFB˜§ãì±QŸT Æ=ñáyIá¿ä¶ô—NÒÊ,ÓˆÌ}f­ŠbÞ©Ó½·iý©I1G|ð<Š*-’yJ÷xöžäE|×øß·Ò‡Žu¬ñøªÌ¥¥C¶‰7ˆ…2äK=-EÕðDzñƒb6Ú6w5‹¢~¶5.Á€ÿôó~ o¿åð_ßùs¸åà;Çv×5uOÆü²°À/¾ "C‹û¯}Ýk9 ¥±:9õ=¢DÚÆ1Ú1KUÄ\)ˆg„°Ã"J"Ñ_ÞE!ŸŠp=¸Â¡’ÌSØèüè;—)=á‘G®Tj®¿jA³©­®\²fgU:$Ä´ÑÁý^êÍM˜è‘R‚›iÃe³*6tæ2…”hÛ D“&”-—r‡h\|<;ø€}`À %r}´Døh•(}*×$8™b¹Ú3dÂgº,v%dÉ„’üo6©Ë½ …–ÖŽaE7(¥àüÞœ_¹óÈLJî»wÍ¿ùÿó«ß·{¥¹z,ŽEðØùÀöÙ€?vØÖX‹ý·ó€ÿøæÿŽÛoZ݇“]óöÿ÷ÿ§/Ç÷|þË!@ãë·ñAW00JxOƒU&›žøO…:Ö9¢ŸYNOÀ9£,ÜQ¼ Dš²ï[huÚaìüÇØé²õra­M¤Õ,iÚê^Tà¡«ÐefcUhn„{!LA¸ÚàÆ{êÕÛâý{]Ë`,«××õ—_9™~ܯf#œ­4¤5t~º…=Ûff °d9ðnBc$^dà1ÿ¼èÝë6 =ïOߟð‰/ôž{Œ#¦Î´zÁ+)Πö­¾³k³×Òõ]ŸýJ'Õ4Œ5Ó±_ìÎ:cìäÕö,ºg=LŒ$E²¾²™à“Ñ4 /(1PÝQК[çÜÞUS‰²åbí¿ÀòÞhöºˆË.š ŠM9Âq9ôàKÐä+_Œ¾†P|aY›À¨e¼ýÖ?ÀßóïpãÅwžj¼×_½ƒQqñè6¨g…ªûÌhà £Ýï¥mlÊZZv@’Ó]¸®Ï8ÚšògW>š á]«€—Õ8óô=µŒµÕ4䈖ANĦËþî¬Ì5.·3tJó¬0‡†é­cßKèKÐò¹¬Ó¦Ñw– JļF ºç}lUÔ2xsØŒô€ï1h?í'Å-$”›LøÄn†6\#7¨1€pWê¿L Fè€+…HÝôõÂwl·(<çmÜ{â§¼8ˆn€µ`6‚çoúê×?wUÍ?¸Æç$YE~ß> 10©HáÆQ&¬í“yËÿX÷-Q“-Þuå§1÷j²¶üA&p‹C4PØÎA¸4®Ë ùêG¼ûù¤ý 7HñœøùªášG8p¸¹ì9{òæ!K©œµ~ÛekBb,GxÉÿÞI=œ,î,WÖžãê#hÎíÇö[Šè!S’b76ÍF!@õ±kåh‘dî r¾ìj4Æ$÷ˆ•I¼RëÏ»a“…ã<6­+DuM1õ‚sÒ¬§×œãfDÕ¤²ëS@h¼Û>ݸÒHÖ„µÃË5€±™ÂS^)„žd¨ïß0>ȃ”.ïö7ör@¤ÐÐåg]ê„\u†$Æ$ÅÙ»)Ä|žŠÌ× £øO‚Ç<è9^øÎ³úòã;Nú²ë™xeß®ïøìW E>%µ›ÝfyLå~­Äk:o2› ô=)üÒ?oå8Kwe“»Ð8¡S68”OUÛ6ŽËe\>Þ-^óˆ÷ášó×Cµîæeí¿Vº ¥†xê17—c¡˜ö° XÒúk8¨YGø©ßù©mƒìáÂÞ5¸¼¹ãÔ|¦GgºzÛôÜpF=Šó_””³Îùê“tÉÚ¬nò§2ÐŽTZÍa7kéÞölÁ‡2-nA¦„m¤·:m›„`ßæ¾¡SÉòÛY¢ûIgìÃ7ET’`î5kLd\UŽ0Ê9[R9m\|óÌ* ‹€f›·›Ý2ÓÍ{Þ7ï#)›ôð~ÒôØï5¨çÞ@ÔÓÀ;üÒ)¶»|Ë4S»Ïln,•Ýé>€Ç~Âóüöi{üp]ßñY¯¨=ì8Óò°‰–ý%¹ÿÁ,ô¹V’Êšä”|'kð™YdúB´€e{ô=óUÕìI¼ cÙà¨Eî캊ãñ°ÅìµpÏ©öo`>¶Ý¹‡›ËËqÛ¶¡ÒÌ=é“·iýGãÁ¬Ö_ßÏþÖ"þ›Gcþúî_þûøþÿí5”Hqšq2{ê(#¹ì³­ 1~¶1l*rtÂØç ª*áÂ! â“K*;øn¢ñZÝ[±…g¡î¾é³¥Öoq –IuK«‚uÎTªÄa…»¢A.1ßíÏ‚Òï…Æˆ6“‘­àÙ–UÀCÏv/’÷Ç€Z@Yƒw[vÖ¨:°Ä™ŸÙ¤I¢)†Snì.‰Ny(”ÓÁ¦KÓ@‹šnÒ„yüƒŸ€ç½íñøH^ßþ/-Ýdži^]Ø\VÇghÕKKïuìLáž$$ÜÊh´™-Ëeržbu|‰Ïљ龈֖}ÉL'EÍ;igÙ®¸||ŽÇØ"oJjШw÷mVÿ¨£o[«õ¸®9KÀ`ñps ¥ì{_"Bš(E…R >¯mQUÍâd¯ -Úºû  u?X¨1‚R{SPˆ¹AÈ BH#‚…Œ?¬È±ÈTZ!ÅS˜qcgÉ >iÔŽùüJ.)k)qæFs@þÜÖ<…*…&ó¦ÑÜ;Nà¿ïÕ3{ï,‚ Âÿ¯üýÄWæ÷‡»MÔÓ>³ûOK,𻂥q}Hd]¬/¡»O7„‡Oô7ÞÍ€í³|ªÌ¤t/ô*A0iç)¼Ô}î€è”ј·5•«“ͥ㠾6/g}Osn£(ÊÀo]{TˆÝº9ÓaÑÚ¤›V¼­1fæ€ ¶ßôk Î(UäíìF¼ÿ} ˜j» àSüMQ/æf0kÃâÛˆü)%º}è5òŠÜ¯%l Á•8©ãK1ÆJÖ‡;®¢MÃt™¯·r|g# hb-“ÇÇ„ãûC>÷B’œ†8ë;öo[:…•kÔ,ÄjŶòÛŽ]„-&À«ñ^\½­çéuÄÁæ".Ýîgð*›–þ™wþð¬5\»÷aÔøìáÁ7<wÝ‚·ßò€ëÏßÀ•³þÇßX•ewh€±ÝÁm,’°F™àW¿YÌRˆV@‚ŸÅLómà˜¢„ÒÄTg!d®%{& £h¡â&K‚á§Kamä&×¼'A³y“[ÐÏFV.¬¡t×»×Kh/AÚÿ,"$ÜÝL·& yC s5ER¹×4ÙÁGBZJX3ãC ›¬§E%Æ:€ØàSkrê“DK>¡Àùƒµssµ0ø3¡õ‘©¼Y eI°õ‘F*‹^÷ìÈ kû"ÌWlgÃú¾ëÀt`Á–ž6Kˆµ -^ré&š†®aÑ:^Øÿ‰H¼Š”f29ÇÏ,ä.\vtãÓ¾èWZ:%ð¯®%ËÛãk¼sZÄ7|·S´êºÁx—ÿ§ÜïsðÇ7ÿvŒ1 î8º7_z6åpnï~ÀоŸäú™ß{2õ×¾ƒ?9¤Ý´2ÍBG O¢æ´ñÌ~ð陾₽w7N”kj_ò“¿šÏX$›¶äŽ1»5>‹ä6eLsÈehz^“°JfY—ñ¸\Þ@Ö„ˆ@ µÒzx/5×’öˆf¹Ëdi@ÚŸ}ÿ&Ĥäm d@Pü"+‘µ¶€Ø“+Nà’D¬JRì h](É f,güø›¬ é[„Ù9ÚíCD[tЬiåüSTɵÓ8Ô~“0i•%ÁJÂ, ^‡àIÜ^ò ¨¤ÙQ?˜e“ý*î‡1Ó gWh!­±}7àU¥¥U¨Ç.îÃ÷ßù\}îúSÏì-Zü𑚓S5a XZè±»IýÒßý—;ë=éõØ¿ñd|Ç¿ûûÞ'…â·¼ç(ëéñxˆs{5 öY¬VŸÞtã¯¡ÈØØ¥®¬ Ãuæì6KIh¹6Ø®BPúŒ*dÌ¢.LÛw‹º„%¾ \À>ãÕº[̧Ú) vB¹Åà/n0£—zï8%Ú¹Çr µ :¾íC¼öÞ„Ú7,ŠP^²È½\éæZ¸™¤s‚÷–&>h˜Ù^ßÏE[D-!i´IþˆÑ tóÏxŽÂi1–Ígfú- ”’&=y½ÏjÇÙˆ}ŽJx…kg©¤¸í®—4Yë÷ñïKrPN’„„¿D@=éoP{Þ,í îg^ a Ãhì–Bo%´±.“þ ñ@!®«‚ ~׿‘sö—'iYZèoü¼gah±ì›K8/aOÎÕÃä‡}oŽp°¹ÔÄYêæ*®4à?åa¯OF¥‘k_Îa£GþÜq9Hëð 7<4ÁÆÙ]AŠÿô§¯Á|ÂÃC4M×n ÃpË£ÙkϤ„…›¢všµV.&¼D¡©k®“BT'0/5DÕÊ2ËØÒÚ‘vµ¶ÀÖ® ¯f’M½ŠÖ{x‹^çè!Põ _ €g"HÖ²OænSÓš«« ìy-.dm\–l½á%–6„›Ó¾îÛQ¿ÉüàÁÊ÷ãÚ"‹Hsï07Ñv%öÞĨaâ§î$»&ËÃozË{Èv€´A¸¸\çÍIåÌrNk«ƒ+ ÂÜ1èKÍ>1MƒÆŸ-‚¹v×™w®EZÙb9'€ Ï‹éÞìÁ¥k·5(è©d&G¦ÀR“h'”Â2(”ס”zB×Oü÷ïÃ]y=å‹^ï–¦ ?»¾ãõÃßzà—à×ßõ‹é,Ž Þqë›Î ü¬ÀüÆ;_ð ‡ið6²6ª[!CY(háZÈθÅT«)Îd³Š5i¢–·&YðN0û`îg“Fë1MÄ[¤mÂÒ-J#ͽ Óç½£nö˜u­©ä ý·]¾8Í;˜5úž#)Ú@n͸Üj(a{p+lêj¡ÞÓÃ$H¿í›¢âÂÍÁ ÐÁ»,t°W“iÒ«ªðÉ"Ö‘Æ–9kF^Äì#=#æìéd§Y9ú¼Hœ €ÖE”ËŸ7µuËšB¿ö䯋¿­­½›‹wV'‘ÀQO,Ê: ÖoâŠÅx„M„-$Û8Ô å°ìÉÁëRu±æ¨#6z„M;¬eîÚß»€ŸüÒ7ãkþͧc×õÒßýÏ\©ë‡öú´á“YáÐ ¾6w⎣[ð 7<ôŠ,Ûô¿ýðƒø•·¿_ðà¯í{H›îЬÄì_ ðOüŸãáèû*i‚Û÷d(PIšR}ŠåÀ›ŒíÉOž¦c˜IÃEÔƒ¤KS9é°}P¬sjð˜FÙ:™´‰:å˜RH8ús:i¢PT¢í»ÐFß›^rÏ ·‰A(¬¯DOê÷à ÚšÙÌüÓ‚ ()‚ÃqÚ?W¢k`‹»î]Cm"iæÒË5C.™0bo::M¨ïÞ®É4† ö²ê…2eòŸ|™ÏË0華ª£žBCÅÿGÏúwžMÑïAI#UÓ¯h´ù•$ð@ÖhLHPZ"FGcv¦ns(e%DÕ>Ñ6a©*J)8/ã…oüî Ù~ø‹^n¼üÎ ¨wƒë)_ôz<åa¯ïø)S†¿<ú³¿RÆ}¯úhÿüîÛÿÿý}¿|EÛ¨P¼ñ=¯Ço½÷ß'ÍtfžÏ˜aíog‡ ?!p9Ÿø!Y”ôÙ]ÈQfÈÙêzQ‡ H­åiƒÏË–™Êkj‘áÀ( w]}­.$¬¬—•ætë^X©™Xš,Tewƒ§ç g²"æxÆNËþlpA= 4Úáé— =×õž±&tcƒUü:Ãͼâ8â @ Ý·¦?ôI²"es?v,‘ø§0EsÝ3LãÚhOé_#.hSŒ33•émüNæ q:„ãõwªu&ñ3mòr­¿ ¦hodÔ¦E´„Ë¡%6ÒwÐ>+bRQ R•aÁß L¦´R7~§ö?µU!dfU,ÏEî2­¸pDRSÙºN–¶ )#xx/’ˆ·Äq¡ÍN±Ðž%…=2pjVˆ• -„YêøK4+'cWa§w#ëŠð;<˜&LЗÁ/á†ì¾õ÷¿æãîòv¿åƒ¿‰_}ÇÏú7‘?ÎóõD3!kÍ@ŽÖ}l …ÜžM{” õɤ»«– À£kzáb—„“Iº9á^&RV|á8•[n| d†NÉë`sŒæ~Î7cìíõuaÙÌÉžd—‰ÕG &V—Æ¢&S.£¤õKÓœì­~·r2’£î£5}'<*n²¹5Ú‹@»®ûJ5iI$Ü´›ë!~cŒ¯÷Z›yÃIñ´þâE’jBŠöÜÅêÍÖˆLéÅ‹Àiâ×ˆíºŒ+{¦ØÎ]!¸€ÃNƒqÓ¼:Ó¾Ô7úè3ˆó MtøPŒÍEœôwê³m6SoQ+ $Öø% 5ö”°ÓÚÖÆÆú<èI_áâ:4s(Ð9™_Ê’Õ†€‰׆—Á–´rdŒ5&]Y H¦ü÷¬tGtÍ/S–%AüÒÉyÍšA¥MÞ6VJ6P#¿Oâ7˜ö”ë&¡JtMr)Y9Ô{·$&”°¹Ÿ½Â‚–ÜM•Âm,Bã/ö»ÆF"sûQPÃ4Ÿÿ†iØgºták«÷)w‘x ùú÷ÍÝëÛJ<ú‘¼þðƒoÄÿý¶ŸÆ[?ô{ð$pbix_ÍÛ€dnÝÚט!6š‘Ž•I%®È¸ÙÏ?dÝ’žÅ)Ù‰æJ^‡Š#R鳊í‰e!¡¦lµBUbGyû‰4d&¡Eï9Ë>=à ÈåÍÐÉN©/†‰x´LîVi¬ÚpºŠPÆc3j¥+0Øi5B•%ˆÁTêTøÖ$IŸÉ1:æIæ¾F™ŒA.ÇŸ]êÚuø·gf§„¤žÜÜÅn—v‡7ÛØ_ÒæÍ[ î{ïɉBÛ€’€`‘Õe®¸>7‰-wH´h±âæÿoÙ~øÄ£6(äßwz×*ͯéZ9ÂñxŒ±ìÐþ{Ú!ñ¸O®+)žò°êëï­ñ0¥;¾¤ÉêónÌ>Â×q9ÄMß[>€‹G·¶±®IðLlÁ“4ï·f%Ïû d>vÍÃþsÎrjhÂR\ì¾= “š0å†hNìÇé•>×…·Ž†l¹/B˜LLÉÖa_µ'6j5ÝŸœ+~â•à†ˆ?Ô»èÔÝäYÉô‰«3S}4zWÚ׶ɈsX³ìPËáN4àPúó×C& ø² ˜%sXIâÉŽüŒzy£ÿôãôOpšk×ïvÚW’ GðL˜±Ngfúö- ëók@2…ûó˜1ÈhÈô%í×óé´ßçi3X·»ÕF©”*ÆRóêoì–rˆìÒþ™v¬é°²ÕxÚbî¿ãõ;Ñ~ɧ=¿ø‡/p!¢“8cý}úN;»¶þË/|-þù¯|Ù‰Úv¥¯ËÇwâ~×|Þ{Ç[qÝùZ6Öì61WP­Ái|¸ú| e;x‘Ó2SÈé`»‘µ• «›K4ùѲ6Ë͘4+ KX*æhåPÕåÍ`p7-³€RM}ô¶ç/ÒØ5XØ×£^‡1‰zŽÃÀhžPÝž~³ÂšÆî$SÛGìóâgJ;M¿ ùÚ^ÜÞÕºØ+cÓæ"*Äå–Р͢EË ülxs$ßwBðæ'i/ÕEKÙ"‚gÿÉc𑼾ós^I \CšˆCgç9ÛQ!ú÷â^¢% D+·¦‘¬cgQEë½nVpdPdø)žm±@=OiÙ;7zŒÍx€ƒÍ¥Ý®ŸvõaŸ<ÁZSRßìÇ5‚à‡-ªŽ502°AjÀ•„³v 4÷›Oö˜¸ßùïN& ®ô5È€/è7C‹à¯~ô߯þp{²À‚Ksñ¥Á07š4\c!wÔÉåIù„Š#³¿$TÚM¼vÌí º#3EãL’Ú‘/0ëéòö¤Oÿ)Z¿B®ÏÛ9-3òë)ý†DOßlýÓ U DÑDî§ò³]Û–êç~Ö÷Úz“*Š4e­eâUK‡®UA+zŒC½„ýÄñþQªÔ´nA’ЬMvŒg§á¤Ut2ÓØ¸10ÊÖ‹Æì÷"HEs[©‰¤ÖäçÜE§}öúáßÎÑ ßý7^5Ñp²9hä¢-ifé_(J‚¶wWµ2šYMù{óMé[ZÒSBc<3àTü´¯QQtƒã5~ÿv=åa¯Ç½ÎÝ·}0[š Æ[Þm ó‹•-D¯¯ðI² ¹,ÍmêwIóûé«hÁkÞôt<ü¡ßÀ,€½º8o‰óHñbÃÎÎ6àrý]CÓ"%Δ(ï´1l5ÍÙ× =Ux'YýaN%Í-È‘à’SW;sÄà @Š4AˆÄïüèÜËõS¶†€úü ó>µp²Ø,¤h{ýœU÷ÈØxh×o®‰,œ”µ2õ1žÛWƒ…Ä#brEZb&‹0’;‡V˜€ÊI”ÁÚ1ÎÜ?]4P^ Í‹ Þ`ªíyoÜŠ©p÷¸~ð·៿çz5õ“ÀºýË›H‚Dêƒé"f4c8ÿOè -ðAØ}bó¦5T6J,`iIui‚ÂB>íHű¥zXë÷€ºêA¸ÏÕÛ?ôA& µ1kßN+íž™ñ!p¸a¢ cM¼T=éÉ =¯ô]Où¢×ã;>ÂV@Ñ‚Ÿýƒ§àÛÿçŸÀ}®¾@Á¨›æÎÈj aO‡2‚s¹[ĵӂ¶«èƒT®r¦sùˆ¥ŠHê]ðÏ>÷53AG4ñx@›ÉEä»yóá,í Ï 5¥ë)&Ú¯Ô´ÁÐþ‘ŽyÔGåòjíÿUÎí]…[.`’Ó}‚¹¬u[÷Y« XJÏ0vø••L«y¬ÃLÊ3¶X*Éë^WݧfJ•‚‚"{ºLîŸåž¤Ds¥9>…qó]ç q%Pª&UÖÜýM@ZÞà©©Å[݃ß6#ŒÇJý ‹pµ¦|B©¬¦½SÒL`ßć¼ (€¢œ4iðªQ¿oLc!ÕúYH›À ¦:ÈS‰ÝgVüöSGÙñü/–˜pœr;e¯p!1ô³Vò_OX¬ÂoÇã¾£µþóü·ÝZ¾O×7þå—À\!‡;oÜè˜ÆÀ¶ýömŸñr7Ÿ­¤§üÎÿ÷Ämú×oør|ïç½&ÈAjle&Ão Yk‰iƒKÃ"Ë~-Jaœô¯Ï¼,ÖÚQØÑ«îúѱùGŒåÏÿÍuà{Ã9ìÉ>tøh*3/ƒ×÷ÿÊ—áÛÿç—à^î@âÜdEÝÐÅ–€Ï™ÎK4w¨ktdÍÎ6¡iòäK¡ä°. tMásws?6Ls×è£ì,v:~&xÏ“ë*ªK jš?ççO›L[‡ÃÆB¡,tn ÌV9œÎ¦¤ÙilÉ1äç$„JÈs) e"‹†Ð(âGk9ƒò½Yh$©BAmßת>³Â¯ÆDõZþOøä%C­ü$Xxm}- x­m‰2„½ßý×_ Kâÿƒ¿õ[Ûý¯~óËð}óuS¶LþFžú š³I>"Kþ¥‰“M³³ˆ·ˆ`ŒfLG9ª¶m^-¿ÿ¨ëÆrŒãr°ZûÍ#Þ‡kÎ_UÅG¢ÙLGóš6%äRäÐã¡* *>¡c—öÌ‘™ž/‡˜>4?ûÀ‡$èo2ŒïFVÜûªûcOö0–ÑÓDxÿ÷°€éLWø¹Ã ²„|¦.ƒb†fæØxhþ]bªË«­,ãiÖ º+¹’æ<µýyµñ–¤ò‡‚¢¹ÍÖ>õ}ðwv¦è*ˆ­z6ŽZÑ#¿k®{B¾ÎÐÆ¯W¬ÕRB€ÁVã³TêÁ8C_VŸB [£ÈÄî)ÒÄ%¿/±S×Í'T>¹žðI/Ä>éE)Açòâa!÷$$(p;Æñ´¤qÓ£iQ–5o¾ûo¼ ßó7^µµfö¹bÄê$€´‚$šÜzÒ­ûT b¢Þ-iÒÚ‚®¹lñ7v¸+J‰„`Ú´ÿãñÇwâòñŹ~D›rŒ›.¾ —Æ;)ÊF¬»®ýG:`h™ªeiYãóP守?‡ã«!ÞÙ‹ †ÎødÏ\0-{u&Gú»•ð½¿üp8ย舘³êDvXîÝ;BóÕ¨³ŠP$šÅŽdþ­·ÞìCX¶d·Ö…åE&Ø´èô[º„„¢‹hĨ1}‘*d’ÕΘՙ–œºEÒï9KAfxÝžÔ½a!ðFšž¾f‰¤~*%ƒ+¡-õ£¤®!æ×£ÛUKZ±…l*iâ‰\¡Õ:E!Oˆ,Ï¢'|Ò ºmÀ5eb<>šêæç'|Ã.ïIúBoÊTp‰Ô蟥Kº¿Nô…§ûKLËg7L¢~&« AëZ–%ƒ.$ Ô¼ž-’¤åùÑ žÿ†ïÄ‹ëŸaí実Ëï×ߙml¢—í÷|牄À`»Æ7ðÇЀÞ߯ÏCØk¿K”¢ƒÆ^x®i¸’i­ùû]Ëè$×÷ÿê—Ꭳ[°Ú"~iû@Þ ׯ‚“Õ«†"°€sñ[lq%°BUhH)d…’TÉü¾ g·lähãöZtlå^ŒÖFt`aBNû¶X“Ä'™[Jž“%)½„Â=œyAðøÃÑ}¡˜0þÖbÂãÁAbívæ 8LSþSÉ¿OæH'áÛ]~4À4‹qtXÚž$fÒùÁ믯ÿÄ&"§´­Í¼‰ ¦Ô5¦¯iº“˜Ý®Llh»cƒaZR§5r_þÙçÎ ×¼Œ~‰&æFGÀ,XùPžXؾVïØñj$Øä.îîñ ?ZPJAi¡žE¡z²Dg¯yÄûpíù{a8_]?Fv¾4m¬-û,Cz˜Ö?À[¿‡ þÃ`ïfa€f)ø˜™pð2ê¤Áê'†!Ìqêǽë>Ø¢¿|D®§ýÚãpi¼ˆãñE56#ZàPïZ?»Mx2?ñ¢¢wÛx'Ã@™¾Hî{îîrÊ™]OûµÇáxr}vš‰&ûïð¯ßððÅ~–ÄÂRðŽø_>»7MšÎ-hž|s:…Ë·ÄÉVžƒDç]?cøÙ”#ë!žÿ†ï‹ë{w]óËá +6·q2PN‹»Õ¯?¸ÆŸAYzP6 §÷°] €¬ .Ëßòªûhð6šEâZ0-²nÌ€»¡øÞ_þ8°)ÇØŒ‡)E:Ѧ ŠÁEë,©>a1æ[ç ϲ©ÞËPÆeÛ.îèÕﺈk%f5ÏuwÁ&©I<Ï;L’®`ÖÀÉ nv‰EëîJ·à =€äKê°×$u¦äI›½9ùcéz³M‚5öuƒhâÆÍ»0ëK™tAÑ,µÐÕĵåzÎ[‹çüÉc`,“XŒÖVÜÅdæm¯„0a3¹ƒ˜3#Ÿ>Ù‘®øä7>ÿúËàô¹÷ÜYº:s0‘½@{4ærAÎÀ°¦ùÛmÃ×XF”²ÁI/Óþ?tð~ŒzÔ@·+þÐüîvDûïÓþÍ]#ÐÁ›2Ô„hÙ¿?øßÁŽÑ ”ÃDÀ˜I®x/ÈŸ¦G%'þžöÄt»«¯ïÿ_Ž‹›Û1¢àöÛjtd¨®4j´ƒFÌ|y2™F.2x SZ8IªRå÷ªe“¦æZ›95#U“R´Kâ¶õk&Ä:‹ð9KönèGÖ‚L«Ÿx:sÇÖ‚ÞbÂg¶†ºw^ Ï!FSö›ß¤à nDܳ’üÄÑPS)‡ð‡RDïðTÐ$IÎSä¿ÖѦm?þÁÏÇóßñø­Cúì?ùZÿüÄO}IÇ$dÈ‘´|@ý¼¤Ž¡ÿo¸±Ú}ó= vÆþóõÏÿæki“Q´™™Ã?×¥Õ›5³ëŸâ,SØ´°ašƒÕµËþÙ\Cø7ØŒÇ(2b£G'rûØåÚÿÑ: _ẽ ¿f3ÊÖØ`'®Ó¯‚¤­¥)ê£ ø,i¦”it¾™G»;8˜Véd«âªvläÝízú¯=ßü·ž÷Ýñ6<èÞçpÝùû‚Ä}4l$劈³ ­#ˆuÐ.çBJè—¢ôUyˆÍŠxn«û ÍûònAol‡²ñõá*§ž²GÃrý°3Þ…e¶x\åm¿EÄŽó˜;\rœ1Áv çvL»x¥´aÏ~SìÛAѼ+”­ØÀäÎF,Xç[a1é.#}D.M$óÙ–‰ïÝCžç½}»°«ÏýÿO?í'ºŽ‡4ò\'s6£µ„ÁÃúêÀ$ø¡ß^ø|Ù°$s)b%$7 ¤83”´îÒNtæÍM‘JˆDpñwÔcٴ잇8.'^ôHû?|?F»ön×}î­¶­G˜¡Êa€ƒó 8Çi#^&AÖŠœ+‰ïx‡~}JݧŒAhszîŠP Öb…±WèîÖ×Óýñxä_ý.Üqp ìášs÷n–X£lŠ!Mó;zZ«AÖ½6deAŽÒ`Ì«Î`Joê,%»_dÀ4™bHëØÞʰ¹p<"'¥N<üBÖºÿ›³Ì!1¦Ï ?î’Í$!Ü b4ty“:“Ã(ìûÀsÞð­§ê«eû¼íð&Ü|üb‰®/<þÞiq¡Æ¿Ç%sHXçÉÉ)Íleͱ=¡Âä6ƒ´ã39šºB¨@=X§`I —⎃[qË¥àÇßðMw-ƒò®=woüOx8ú€¿{_uÿ:ïÈÂÖN¯…÷ëIYÚwÓò5¡«‰ÝEXRæ*¢, FwÆÂþÀ…âGïQ©ßüЗ:Àײ5ḿ[Ò·ªÛ7¥ß¸|¦=Ðåß‚ÆêV¦ª&¾t….•iåÖPíÒ6q»‡RyVdž¥ºtuƒQq¬—°_Dš_m`¦œ›f,µY€?šoPz£"^6Ââ95í/I[ÒA“‚'|Ò ÛGi‹Àwß«n£rñEæþjzÏÍ””†¶ýÛ¬RÝ#£'µb·R„¤IXüc©à¿)ÇØèÑ©ûmÚÿm››ÈG‹¼€c}㓪qºþì{Å EÎ!šÐ3 Âé¾ZR<‰ß(Íc¬‹‰=^ï5€H[#kûX†ÌAH ຠ7àú«n¸+ØëŠ\ Åq9‚¢àŽÃµÄqF[²ÊØíäʪ¹[ ¬e3Z»Õ/¹paH!ÃÏÝ2V‚TUÆj`-xN¹÷÷4Êö|B.d(û)¬,RD µßC¾© n ã$‘§$H(Ð à}s*BÛ×ÖÿH´ˆsÜÞJx­ìHÒpd j±d `Î&×$/;¹xB~Ød )SrŒs‚3žìÖÑ6ù|’01÷|Ã'¿(,(~ü¿Éë{þÆ«²õÓk« üƒËs¸*QL˜¾†N¸ûCÍa%óB”3=-õ°7Ò°%¶$ ôYY§f)ÍÉú]²K‡úÇ ç2§?¹²¸àί0+ì ­Q@œRT±Ó,gJX´Ðž³5¶ÅJ»Æj¡aY§µ%b@o 4Ì4w¬#óÄO} B-ïYø5§›;®ïüœW¢wceB9&‘÷ƒ¸IXàÆ"yàítbÅÊ"zü4!ED[ØXkq“ª4ÀIÝ`S6§¸j¸ÁmÇ7ytJ>9ÂÜ"GúÛÆ}°¨tÈ”•ª=Úq¦É:" Õy™¶Qæ÷ÐyñÚŒOɺ®à hd¹+fQénsqËÁxÏÿ÷»æcqÝùß É…‘#è BîL€ú!&Š®ò—= píÚç¹çàqGÛy!úË]M³§Ec¶ô´›qæN-dp¤——ÌVRÊåoe3®2­¼T¸ÖíÝÓL+²T]™³(&ÛÝO©¸cY¦ß"V¿í÷¢³2rø}`‹eBÖ•Á…e!OI¯Î;Yh²šk€Û4 Ò§ ·1#mr; V&™´Ír0@xZw´ãm•,\x6¦1TÊÁO„’.­«ÌïE6Í~"w!ÙЂE®Ø9§< Ãïꌪp{´è¥5h3žÞõGro¿ô;>ŽÃ4®7bcH‹8R!Ühà¸h¶ƒ´£O^Ciž›ú™ÌWßn ¶¶þàä1÷$¹0€æn–Eñee¯Ë[抣6×âðð"žø¹Ï¼Û®q\qñè6nîÄÑx€«÷¯ƒv&"ÕùRÐ4ýÈÀ[œÇ LÛ˜X A‡y -‚‹HL™·¡O£œcŠN`m¹%a Ñø›8‹Z”\Rd±$5?úíCäþ%òÒb±ËG³„Báp,£uƙµ™•ÁG»´‡÷“ÿF|xƒ"ЇÊɤP3ÅIËÖ‰2!%¯ &XR CÚH¥ÝˆÔ¼¶ àã(f¶“?“ÓOô™LÓ% ¸üx d”¥£/IÖæ™ÞÖ?ý+Jo}˹Oâð¢}‹éfÒ0”Œ QP¤´4ÏŠQ- ¨b,¼ð·N¯ý'Æ#0è6HÓO4AS"æ„€[„Ä‹Q8Mñ÷MD!<ëô\cç'¨`ªCŽ)b. â©° P…Bûâó‚«®ºŸpáÓÎH×»ö:pã¥wáÍü \Ᾰ°wµa:'Ø7’¶Úx}V‹º’a®ñójQêcm€ho2ž¡ÁŠ@ѹé¬ý7ÃÎ5â r[|2qÐ@ßX3 YKçÜJ|æ& ‚¦VŽÍeñg­j¶(º¦kú@K‡Ù´Ÿ®Pi‘!mòLhéØe.çºP7}ÓÂ~bg¦-4ƒž@Lqë#»SÄÌ»#Î+¤r䀷;&¦1&f/öF¹àMlˆw”xb˜ É€Ï"4·ÝÄ€ Øà /Ní½RÈ'ÝÌÁbí1Ök®Ä„)¨´ƒÃÏzY|ZÇ5`÷,¤“3oÒ†ºâécØ­» è2´wÕ¬ D€-ª±UÇ綦‘i¼Yà…-M[WP5‹À•ªÅ:ÅÙézW_›rŒËÇwà†«€ãñÈùÞ6„Ù^È [ˆu-¶÷뻵̶;ECs®ÍŒ€%ã*×î}8 rÑÌH!0u0÷MVYKaCQI%7xÇÜMa¸5É>Zî¥NÄi‚ Ðçf[‰8”+/µTV˜®É/ì»†Ä /6¥¬“€’5aÞ6õ¹ú3Í"`mo aÙ¾`íÆ¥9&ÏÆb– àD.!tøò ! §ŠØ‘ÃÚxš(ñ^¾m€ÄϰkÊ!:Úq;š«Á}€ß3›±©i!ƒÖÒc-õhÇrŒñG;Î]Ïø‡ÿ×ྸ,·„öh¹~¬¯ðžäÍú3 »u†ú,LH(Íé7f~ê{ œŽ6ßÚhš ð_›ð/>ê«%í1à©Cƒ¥TH…6Ý /…âp¼Œ7Ýôk¸°w ö†}|ìuŸèZ·úâiò¢Åi'ƒ4­¿Û'ß›;Œ!%Ó¬g׈ÌM>†¾@å_û“¹a…’–ÐÚ¨z“ú#SÆ•j6öÙ˜zF!U ¸ãGcq´9À Þxòt|Ókð€«yø-™[cBv Š´tµ"H¹}D¢6û+Hy| )1ºÄq–÷ghï"•-Q¶Ý3EÅ ³,¨Lj=}þ ›caßÅJð¤¿ùœ3Ñ÷®¾.ßÛnÆ¥ãÛññ÷úì û  +· '«ÅFÂvqÔÖ×¥‚Å+÷ú:cضQU"-„Ýt¸üŽù©œ`M{ײMQÊ—P»Y³w»ZãÝþ’h)$‚ua¢D%™f¿7LáE†™÷q£4ße‚–Õ]Ùêa*Jú›|K<¦mÂnORÓr£"Æ?€M&Ç~´«ƒÖ|á‰&!@½—Œ‰¨©ypdJg /•µY(î‚It°¯~ÒöžôÉ/*(h1ë­ym›j+ˆðKßl5Ñ;Wê2?pZË i@F×®{΀6AmaðG ;8†~PÁ4xˆÓÆw€+39izH¤€æ¹@ލ¼žå™JQëzêÝX-xÿÅwàÝ·ÿ6eƒQGìÉêrˆùó–-”süXŸ‹×tmíÎÖt@ßn¸°0Ð pRQÂK¯ìAHHØqfÌ(ñ[8|X Ö6!,ªrr4_RÆY·ö6¾Ç _÷7äQS* ã½Åìyæ~8PšG bìÐ+½ás3i^kQ‚IÊcá„×*+´ä#8w¸“ÊÌ1@˜:ô¯‰$êðhtmLZx)ƒq÷.}N‹ÖÊ kmòSÝ®é²õÂV”L*X…»†Jìôrɘ*û/¨˜_σ-¨®Ÿ¢ÇËÉŽx\ºü­¯žés€' AÑ,ˆ§}v÷2hƒ@|âÆáºXp08ûé_ô.æ­¯{¨üÎ 0aÀ¤‰Ÿ@&ÑNvS%Mñî{mÊÞðÞ‹_ø£ç¶¡kÙãÕ¢Í U<¦L†CÞàÙ+u+âúm.¸Ç»×Kè”Bö#Ïí!˜»&©Šll` Lžëçsæbx¼¤~ê#W«3 ³¿ìT¢X¦Xè4Ü©G$€½‘{Ò"·TZá’Ö%±gmUýà‹F¤Žƒ5EP„ª-®ØZéy=ý|v#É\±rXµ{©Ì,IÙD 3’c½³4XÜ£“Äl¶Õ&3ðF‘üt.Ð]û´¤ú®ø‘w7=iH$X°úöMòÅNÚ.nns­5KÀzµÑšùóJ\ãÂo’­nW”³Ëĵd À%Äþ†ÛÅêKÖèÔ0:C î‘O¿Y¡µÃÛC$ìÎJŸáV ø9ð{OýâwEh~W]›r„ßûÀÄÞ°ˆ¹ µ :ÓüÛ= >Pmc8!|Ÿ\ƒÉJ󸃋úÝ€ŸÜ®ôwÛf;7{\¨ D1P·r•æ#EHËŠFD€Šw¼ô({:oJj³[-š ²ŽÜ**Žùä¶¾Å]@ÊÇBÒ‚}RæSñ·b³BÔ–3èujtÞK–~`uЬB²)Øý¦©R9 $¤f«Ïë)&m'u þTª°PÊ‹]©i& RSc𥠶j6[-”žÆØ0çGꇂRÆ3/þÀ}ù¯âªrŸS!€¸ÕíþõäÒ1!Ð\W¾ þèÞà· Ü>ì“ç£&%„FúÏQ­wÚÔ‘ý´²pw$W ¹ÕÕ4å¡M”|”¤K†6Æžú¿ß}]Apis~è¿=‡›Ëu`_ö!2´u&²–€ìâIö@öå÷!ŽŽû œEƉæ¾Ë“©ÍeSKìÑ0"fì¯{¢ëyÞÜE¯ÃeS¶ÜûÑ)x„Ö+í8¬›š/64O[›/)íduó(5§»3÷©¸ûíBÂ×vÒj¿ G€M& 9_ P¢$¶NšD'6Û@çù ®1óÈe×`¸8èG?Õ¨¡¡kâ"Éoׯ1ןµN=¿–`“§´¯å j‹zjyÿG¨^÷ÏÕå<àü½¶kD­ÿƒˆ÷@ÚQ‡¤»ÅUw)ÅnvM‚…Ý6¾X,ÁЄ DÓyÃÖÞ´VÆ÷¬¦ jÝ&©2o³ D›»÷uÛáMxæ¾Çã!†ahà_S†»5ÐÍ~_ £ÍG¬ä#N±èºaúpðëlÒMÞÙ¹,ÀÌr2b–wσdÊŒPŠé.S¡E "çr÷‹W È«·lå4==–”ÖÿPë-»ék#ls&™9ÓÎrô :@ò'ˆ–Ø€/ª0µTßu§Î N`[b‰¾¥¶I°Ø ÆËS]Ó]k×…yÛâ3‰C¨dŠéuLkRߎ‚èdK|¢ ¦²…1ÓlJWŽÖâvoñ´±öþ¨Ç¯8Ø» ïÖ?Þ©—Ý$IƒZdˆƒ°ý&éyÛž`fAйh:}¬ àwí œ¼fÁG¡ò}‰tP4 ´Œ,ÜjÅÞ„íºåà¸zÿZìÉ~Ëßì {max€‡WN#÷…¹ôúMÆÍKN{jèµü¬…%™šB2¡9!PñŠÇ¸ig¢Os}!0Žn§}QѬÜ}ÍŸY̹»‰]V!2‹fì híÕ°•¦—‡¾hýó¿ïãQvÚ½©]Ël’hš/¾4IÔ+Û0Ú÷ÒÎf>U3ð¬5%MKv.n€uF™Ò‰HÔˆ‰•h FNGÓ`ÌLýÜ{¾6%v#‰í”*HS> Í€oIß #€úùJ¸^ýˆ÷àc÷>Ý­Æ~A–} €MBáÿÏÞÚ¶Uõáøg¬½Ï-¯z/¢A$öšÄ¨˜ˆ]hÄF/DlILŒ±€‘ö(°DAÀ^@š¨D©Š”G‡×xíÞ{ÎÙ{ÍñûcÎ1Æg̵ö)÷Þïïž½×^kÖ1ÇøŒ2Ç„Äoþßv Gè¦ÐÙÂ-ê‰ÍJd²1s·ŸµU–5 iNk\Bm®<Î ¥r½°ûÉ€v豆VàS[¿ß’CCvÎ?v dXÔ€0È¢j´:6𢍠£?ZË&âüqôJÍë”O=1ö‘†ü+mt¾yÌÛ½^9ÓoëSÛœ;JžØl©1Ä#h{PÇ*,gÇgg½›¬8´¼õsêîˆ~ð`#[ÿ¸Z…,!zMÀð‹Œk ÌÐÜ1Àñ­À™A™Ž>Y2’xž‘{­~é ±p§”Tœ+65Ê¡ãfMœ`{È-³ÃEÙS²kâ‡û`tdZŽróT?ÂD*¡Õ(ÜÑ;%d÷”j ]Ó£–tæ»S_öàâÜ#âèâ8dŒƒ.¤=Çêo:‡Ð;fˆ×ü?fÖ›Ï(»9—]“è4÷ lþÍÌÝ~2¾§áÎëÏ è™ffÐýE\Ç5Äc#V3:æä”5'ä<Æâ³=H,°=?¸/Á/‘!×Çoªæ¹¡Aó.º÷YS!½yÊTèÔ°¹$m£´½ŸŠÆ¤n0Û°iÅœCóûÀhâÓŽè&à”l’6I*4â&.£›°•&8bÝïyÃô%Ò ‚¶5_µJ"h‹4LRö¿QWOã¬ßþ¬Ë ×ì¼Ø}ƒ‰ -æÞ¦™íúäÀíM/ìˆM ùž3|Ó*z_€Øsm ©ü¤i`î½¾]¬I Ì™E¦!õ%hœg5è2ž»%ï °ëÈâ8Ž çàèò˜›}†aÀbXVLAÕ)îìÀ€Æœ¹9­ºNøÛœx„ñÌé:Ï€#|=L@¤£_‡éž)ªf"ß„}®³W´Lú#z¡!ô¯v÷溦ýÒÌìÌLÐå©béàÉŽlg¨DgÓ T>Ì)ô–TzÒ;ß3B‚º~Y~5s‰ÿå{4º4©~‚Q®ÂSa41;k2ÿMŒ89ƒ)=‹5«$²”rÑBU’Qá‘Wèo›zŽq;lÃ÷W¸Àƪ$Ý´è™ïþµƒß¯Ûý0nZ~Øžö{ˆ’"h¢ó á-Ñàš0… å^oa—)"u ØoœÎ2±jü–çL@8š#àGÐ O,kcƒ¢¾3H:SÜsR‘ð,$⻹¯ Ž^ŠQ×X­w°.«†ü—€'l¾x&£¹Ž‡xFÑëŒS-=§ ¾nf"žÆÀpæ22±LpÄY»fFA— Ç gæ´òýŒ¶Km0ðd3:4);ù"Zë÷ìeG?Þ„«'HÞQ4@¶ïˆç¯y8’&Ð8ø}Ç›/æ0³Š Î=Ä>÷ ¢'´ß›¢ò~VÝÀˆ„Y#‚t²Í$íeð¦{?­¾PÅoé{#Öë]쌧 ,¤šüŠÖ#Eí63 Û8¸è$ß—ä±±r}´*“&F¹áݾ Md Ÿ@a_,mûÊæ#FˆÜPjüÔv/ÑÍü$~f-$·'"æ?™À‰‡œ[S?&öË€˜Û”˜± ¿š›M0mò†3O²£#H%ÅÆz¹TWŠ«¢M`ÛNÅaÕN»¦:‡ÙÀþ‰×Š'SN¸ÏrÛ+uá Œ0Pkvô06ÏqY¡"›Àtå·Jôæ%ÀÂ^‹k‹Év1šhYCÇ3´ÿ;ú_] lÎÐ<‹,%Zó飃l³P؃Íi©#$Ùå¶~{~RJ +oŒ~4²!»ów`!Ãdš$­&êAë_ÞõËÑB$Ð¥b0>Gb¢Ý¯ÇþÑçâ¦õõuŰ…a+óÁ0Ô¨ H)ð&+_‘b+¯Ã쌼´±°ÈŒ5Þá53wÅú瘟£ïYKk¨ò;bkÞfÆ -¸º)Ø2(iö¹ñÞð}†&¡ÝÏ]Ïfß"Ú;sptâwÚµ—w” 9LmR©´ÖÈ8Š,‹Šd£qô¹ïÝ<âv.ÊÉ®—×OÃíÕH´]h‚iÂDD]˜YwBÕ»³ÊÙü‚dT|,lÓŠrcùuÚÑ—¶uy7:!lBÒÆÊ#.Œ¹×÷,!P~0~Ûù{f&‡@ÿ×ÀÝZœÑ#¶i2Æië{ˆøäÄHÝ;LÇôyð½Cûå²÷–ý9R ®Y¸ðrG®øª nZ@!XÁeøÊÈ×ÌZ6ãmìnéa¡ Ybkq €Ýq…‚f ˆû¬¿îLàé½!ö¥‡es’ÀtÓ1º\Âäf0îŽZždIyœGq³$.’5$ ©i÷@äà1qj™TÁZ  ÉHàEö½, º¶,ë½–“ÃÌ ¶8½3Ž;£8ñÓôR¹|Öª1ò:¶ ˆí~í‰Þè8ã—fÇ:Ùñá‹Ó¤¸$'àigpðSÞð-ûáv°uVT v¸ ]Zÿý`óö<8Î×´ž,¨Ì äg˜¶yªë©øY«5ÛÎPÓÚ÷–ôYµ"µ¶x,kŒåôÓ?¼ôÁÀrØÂuë+![c0lgþ„˜ i×H vdúž·ym‹v"Ô‘ý%L±¨øl^KUÒ~ƒVk2¢E£ÁvÎBmh¬öSa´pŽvscZƒðO û¼n÷ÃìdoŒÜúÁ¹ý70ýÐêKætµº|Hü÷ —ʼÅDh£âh«ÐB"T¥47¾ˆ³ˆvL]…Žâ £Fù ª4ç­NÛõ鲜´â[ð5,–58ÑrM7ShY§CºûâL-„IIìÒÜž'ð$Å6mõHœæ ’ž ¹QŸ—ÐÎ4Ï]Òº:´·œÐ:õ*HPð,S”›Â#jM`én 5!¸ÿ¶¶½"˜9ÅĆui ôcÊ\ b¥ËÂÄ/) Í®­gNà$ÍÈ‘é¼'Dd“ʶјxÖ;~–Iùæ»þÇß}“þOŸ÷rd®Õ9žIZ_‰s©–¦âµÝ½"yüŒm±À¢*ò×RP0b,+<ÿïô´ú”Â>·>¶p÷(ú3æ®I;°­ö‡Öüs ϯÃV¯¢±ÓëhyZCNgîgKÓÏa¹ÎL-lSc2³ (¯-ÎÓ׆Ѹ-ࢉÆ-‡Ž2ÊB؈do)×ù‹¯ÁÑË1 ,˦aVÉçÙÚ¹@£Gt%9‰d0I¸ö€ ¹wÁmÌp"žébµ<êJ Á´';ÊŒs$“áú!µ£ò<ª^¸ª‚’5¦ðSÀC`ͼeŒØXónñú*óïCUÅ8,MVpl¸Û#ÓÝš:?¯Ê%g+ÜŽ|ÈxÊ[»B½ô«ûÙïzÄY!Üï»÷/Q$ï+xê?üÇôì?ý×±>åõßr:Õùõ“ó€ÿüy¿é„E3Mj­ý#â  - Ê$lÞ4ˆ!Qvb& Êü×ãë²{Úýpǯ^Ý!wcú†è&=ÔGLºå„‰ÇÉ)ÊÉ»Šƒ1‹—›ì3gw¦7ÒÐÎþ­R„Í15L³¨„ÙŽÈæŽ÷ø}ß³¶i“prI¤nfý‰/ûMü—?ý†3¢»›ó:²<Ž¥,1XëX£²´i¬j|(ï̱™†”4Ù¬|IÇ<ÈV Å܆àhÍE·QÔ›cÌà‘ö|´JÀç&™\Z¥fgó+LæÒÛp=³¯º¹Yå¾F#æ‘ôqΙ—‘®1?´ºu¤é*¦æFï£)½ë’—m´¡ûþ«ö¶,¬¤‰—&óÿžOy!<šÀM¯†Jbµé2 FxÒgüz{<ôóŸñìwý÷¿ùüçÏÿÍ”F†@ %B©›k2BR›x-©¥¡ÿš§¥úÖeÏÿû;­ñLaŸGšãžæ,…SVfn žšë¦K Lé™rC‚qxø Ý€Ø,ÇŽŒ FO¥ÒÒ@€¡u†ÙІÞÕ4€f:ðò”ý9uŠÁýÃÍ늕 tÑf (Î=zÞiÍÓGëºàÈ%ØOagÜFîjBÖvùМ=Êù•“ã„ÖBKÓàf3満ʶª‹ëP±+L(,9²‡k ~÷ðr—V¿&zÓÆ<5ªŽîë´NûM-ƒÁŒ`±q‚×}“É £®œºA±ôLv¶cÖ$•>uîöú¾˜¯¾ Ô×c >ÛkÓ–ncÅé|Ãüw¯Ë5¦µ"Fsò„¬J4¾FÙ„èÓÿËÃ}¢øé×|óÚùßÿß7à¿|þo:#—:ÐB’ m)-ÊGf6uP‹6fVï—†þ-÷Ï™Øþ ýßØÐ¿4:pä_·EPVß”ü?&”´1 ­$ï/G Ë÷g…·sö„¡Õ¬mæU¨ •)XôVk—ª™n®bÈ¥6Û­j —æ«c¦Å ¤íçÓs,¾33öYƒãËœÁ Ù‘åñjbl;í<cÌì(Z…„›xøÝŒºÝ\‚3Ž:•23n„Æ'¿jW´Eh\©yÆäCз X!á–éBBе0qßP–´…;¿Kæžp4;y‘´8£vê0@á'è(Ê•\OiUÆWšFg‹Ñd‚‡†ú T IŽ•£T_là£Tâ,T¬E¢ÝZ¬Ã A %“Ýò®­áÃDëÉr°EÓ<Ñlþ1¹Š‘„IRÚPÛ™œ‚Îß%TÛ4w·µ3'6Ùï,k(¶wß¾ù”s™¯ô&¨”ñ€÷ø³éɾ爢):©•ñ,†­¾7ˆÌAVbÖ¸lßo“¬Çñpª ˜:oŠ2&B˜òË~°Ü>Ðpgc’Mì~×c>éùxì'=ŸRct»èºŽÛÆgPíW–Ñ¢IÓBâ¿0Sà:?öÙ/£( ù‹p ÄÎ芒,r'Lâcig¨F¬¿ýWP" ŠRÖXú?Ž‹1È€õjØ$ µ?úŸÙ–wRòÙU`ÎdÞ´a ƒ§Kð$nžå³möò2Ú Úc0ˆ§'àCç-Iœ C2a%• !ÊDšÈµ–v?Ê¡÷Í„Åï²@dý¸iË'·oÄã>çi§=gëü#c1,±[v(²hòS¡¸CRl™ "ïPZØ Æ­4Žû N ¦ª™Ó*@’#6ŽFˆÁQóEMhÁ <'Ä“dB nå˜e†ÛmÌ?6ƒÎŒ…ÇŠçœ1ìݦ™»h`§ð9,y YÍQ¹¶Áb²vÔõo2Çðõ˜{>?×JDÅ:†2†I±°Yjo:ÂårˤïùH%nÿÞB !æÀ¢'jø¦‹µˆ¬¢MëˆÆÐéIeœsì|ÜýÖÿâ´çì£q}ÏŸ|>nÚ½ª#¶†cd!6W°©>î±òCòºáhqæ«3ëÍL ¨ŒN1Ë>„?)³ï næ’¬ªgÊ ÖÇóÝãœÛßF†ToŒöRÛÍÞÑO Î‹,íËÿç~)ìHH¡öjB›"Ri'*JSÔQ+ §×Ù¥aPÒ($LgÉ•3§ÃµëÑ÷|^yî©óA<¶q‡˜¤:1ÞÉ5£N°*É’5ÌD&a ÿés_>Ûá !Gñ¾IˆâW (J Û 툾jú±¿Õô£eŒš§q=ý›þêíݪs7ô0>[h˜ŸYW•q ì¶‡óF²Ê£CèÐOÄôI ŠA4å’ë8TÑvK5| Mõôk+€Sfáwñ0)££Áh·„ëÈâ8Ž.ÎÁ‘ÅÑà%²€È¢öŠÂ7+î4jOì1ºcœ_rî&A0¯süƒ¹iÑY)•OæPÓ¹¸ÔݹéY©¾³$8NŒ¥U¿ •öu÷ì÷uíàOCX¶$nùï¶±#¥GøqAìUa£2[­pÙ®&R—à‚›® ª¶CÚלQüd>;p63ka¢šé…k$B6!àýÚÜÖ9!™wjzîŠìëÛ&°BZMð±™ÊVaMÓ^jĺÍ?ûwuÚ§Ó6­¥Ò^Om´3«ß<`<É]ÚˆÏíaSíÅü?ù·ß„ù+ÂÇ|ìÄ€¦$SZ ¨àÌR5 £¬0;ì½Fe¬Ê..íéoü:ëV¸nu<‡CB¯4Ë UI7‡ff ë0[©™ D2ñZærÏçFÌÞµNßì‡Í žU´OøŸ•˜¾-ôL˜Ö8‹ü¼û¸€ µ&:Ò9ÝÇNSâkÇ[¼ šÚMÐ.ªÈŒж/$‚¤““ö¤‰aHš¡òœÍ gÍêùŒàÑ,Ð EX(À%–»›br›ÄŸÑ\ÉÔªÐDBý”û‹FÂëH¾€ž¬€wêj« ƒ&ƒX&¹¶…²\1«m´9OOÈ–éhNUzOçÉÌõ¬w<²ûaÈbQÜ s篜¢"ò‰y§¹7Ó0µél_¡zšà\FvqU¹&Ü`1o–*ÂÉ‘÷‰4: '<ïÖÏKÉ-õ¹Ÿ&f] l5 /6òñ x{šCoA·´4ú5‡°§.AÌ¥t;uû4ió#“±Ú#2L'.kØÆ 8N8`4²¹<ÿ>éhˆkTwÈvƒx iÓÖl„Çþ½ó¦5+ºñîB, ÁävO0rH/—6yWŒHn•TcR>õI-By¶EðÈ»]†ç\ñ¨= ï™oÿnÿü¸{]îÌ?1V Ä‹¦žÎÈ žÆ:èÔ/F!Œ~ú5aúõª)!4ÞwyjQ9œËBa¨PˆÇXgücYa¥;X§þÏi¡Ÿ7•k*\Њ¸}“_7yÔŒ8`Ç÷…öŒMôÁ™ v—%¤¦J’ò† bÇ®-Š`œO¥^¥•!´`x+¨üp¶eìyò‹¥à†Ö~ÏDë*è‹êA[ä·ð¼@Ö¹¢Å÷l êð¨<õ×\¦²ÉÂOóc ÔÌùUÒ£_¾2s¬åÍw,€mSMdÈßü‚/! wX.ŸN0äÅÛOù×RQ¡Z,j®¹M¡‘·4ÿÉa XrŽ™lïªDÑØ™E+×ÓB¸à¡e'ù=‡,-“4ì¡¿àQwÎ6„À3þù»Ó÷ïù”á55,vÇEõ¨£ëÔ$œúég_wøT@ä² ~¦bùF:#AÛ<Ñ´ êÏ!ªlh»~u}Ú›¾ì:5\‡÷¬®‡l55S¬ÕƦ¥M+köGÜ¡ÆO’áõJÄ‚9¹°N™FÈ4t÷§K)Ë=ÿ=Ìh‰R:ðb~”6o˜#£D§ æÍN9맯ûÄ•ìñ`üïºêÍg47÷UÚfÕî`wÜÁÖ°E¹«RN`Ê<ìÊ7ó9Ѥ!õTÝÙbÑ_‘¬OCf$#†’¦Ø;J÷ÕûNM‘ãÉ6ÔZ{J”h¥ýPë0õ4#¦Q3;¹ ¿RÙèIJ³!HÕÓA·G¤›:pet’ôìÈ‘bh^ȤdÒœôc¯Ïò tå¹)@ð¨»?÷´òýâ?}çäÞ÷ý‹_"&Åu {–õä7œY28»þÓç¾——Lƒ©aŸŸ"ðl&rÔ Ùß~ã= á¨ñ2kOõ Œ+ÇN9§a Aƒ¤ tÔ-úw@ ŽT÷bqÖÅêÖPyÿßô=žçï<ë·¬aúëG?û¥³ ˜zPõ…NŸª—çEj¨_g'\|7ð¨k”R7}×ý/xÝé9à¤|ïY]qømD9Õ–\7è|?l Zh}u `‰ÕÜl4л ®5â ‚o$s{?-lÓ°]ÃʶŸ0 & †Ì°x†ÐžSÙ"µ:mž})ZÝãÄê?sUœwô"<îsž†güÝ÷ž¼®Åp[ÃŽ,ŽaUvÃÔšÆ-sEËæéܱŸ÷̶Mó«™3RÍ–É“ëæC_’ìæM`ÅS»’­Æ8’²Íódã©1qå†PCm]E §Å áÚ‹ŠŸ¦É0ùݨ²Ö´´ä³þ´·™í¤,;BŒ²Guü“_û©ÐF$Bø°=c¡°÷Œ9X~Ì=Ÿ¨TÏì|íë‡?ó%Äð;½ÇÔ3¤2C »xœ}Ú-7ñ—R¡m·o)5òg­+¬Ë6^øúÓמöõÿá¸$š@ÜÖ;ê,baðýå>‰1aFˆi*;,¦W"ŒùÛÛîÔwfߊ”È" Ïónt« ¹ËP3Û¬åk; >ào'Ú~3ÆâBa+çR&ÉôœËÖ÷­.¸n¥w8ÛäzV¯ ]ZsW騏@=á&|!á߉Ík/`éYƒ ¦M<ê¿¡Ÿ.й«éœ8™pجñ9¯2€¤™f!¡‘…Ïcý]#¥Œ²‰ò’2éÿÚQ›ºÙ+X€¥¶°¬YqÙNÔžl¡m‘*qZškçÄ£“jÒä_œ²Â‘‡›E8÷z²Ñ¼ké ™6nõô?ÀÙ¸žtÿ_––L; Ó`æÈ¢½ÏA©~¸Dë»OMøfy€ªºè«ñ^ô†ÿrF}[–spÁñ[áú• õþUó}L:‡`rvU¥ß8H€é#ÈÍ$@ 6Ó …êXZá!J¬¿éà&4´—Τõ5ÊÑ4E"JÇê2AŽ,ë&‘8G¯ pćŸ‘Ûœûq4 #*Úðgë‰è–y‰†Y пí`7ÈÍlŒQ~žsŒ'ªQ¶kŦ™ãœjj4Q‰ÃG[ØØk+ycgFàfbtŸ-ðdˆqºD¤µgJ­I Ä_ ìçm‚&-†[ÕBí—ŽÄ}­éj;› ã|×ÂúוNj‘C¦AtÎyß,r¸)#FÕØrnÏX{[®Çê S º››,»W'øù7[êÇïû«ÁØÉãÈfÊÅÎÀý·þ‘ sü¯èFŠÆ#ЬeÄ¡/íÁ–ÿ§žó{¦ÌVrïÙy#EÖÄ Wæ›ÍzÑAë¤ ¤mô>–ö¶LËÑ¡2ÎÐ4о‘€šæ8¸´aÕ;љߞҺ%çŠÏk"ÂøLíOš»WÖ/d:¼Çy¾Õd¸¥0$4Ld[¬P´üù·ÜËŽ¸t¥v<¤m~v4Åú3“•~1Ó]!>üû!ऒMPv¬H ×Èœ"l-:®¿™¸‹ ´öC'|R™Ÿ(ÑÑ\»é¶›Ò`¾ *ÝOª`(P_ÌÓ¡Ïdè’µ1ÎX®<9F?øœÑo Å‚Ab›Y[Pxd£Ð Ç LÚD CKD”—ÿæ¦Ez[{!Ô=£￟<ÛØCÛ BJ³éi†B/Ûµxxúçfþ9kWÂêóâQ6¤Z =Oƒ;t‰¼¯è‹fVkÌ9ñÄ¢²xm-Æ(ÛÐklÎr& ZÄØë}I÷¹ë—oë¦.ϹfÂ’ [žÿ=¼ïðÎkþáìÍíÍpٌӒ–SÕæzvéO9°Yü”íú6¤Ba•3{ G'Í?íž„ý¤­nV´êÕ™µ£ûž@x®5hMúµÒoe‚O}T§Å¾©kSkˆ˜Û}´ñ¤GJf›AAsçÜÞÒ®FBL†ç´®Û©}4ö"/Šq’4pbLWR¥þ7xPß6ö·i×á"ë Ì¿ÁŸ¤ûDñdõë„WøÆZѺ -u?)?R÷); í7·NÓ®Ášy(Y–&ÔÊD©††º Ó€Äài‚ââ?°ã×­{,d¢2!¢q2aÞ\n{ËfÆèLò€bžf3ñE§’ÞDð¤†dö‰%˜¡¡hÿ -•ü ¯Õšº”âi¢g;p×ÿüÚ?Å9¸x”¼†dó³} ݸóà§µÖ‹NÏ‹J:7?7o)±(&JAKšµ°¶—á$ß›âR½IÓÌ ’c·}ßñ1’uêÏRa2|Á8~0¯ê0ç¼8Zu`Fk<„·=KcÖøF¢}›“Œû`l·n”œC÷!²Ï ûÜX‹Óò°dIA*Î]q› gÇ©eLÿ “µÛ[âϹ•5ÃÊ\ƒ…¶’=J@±|JW‰&†G6ªœg»³û:m ‰È~ü¤{Ø©áZ;Îõð¾4IÌ_&ƒí išW¸vÂkze³„J'ˆF™‰Xˆ[°ž¤vÌF;‚éúBGÐöJHc1êé§{æëÎÁ­Ý9ñî°§Ç&©Âœ‘)BÍ1ÜÊÉNµI/ƒÞbÇ×ÅÛQ€öþŒ1꿾ߞkÂ#¹è}ŸÞZ…G0ItàH6G_ts¾c롇C?™§‡[èeሑšb¿Žzí€KŸaPhcÖ!¡¼îJ†Uåúµ3Ålx«çMÎ%èM;d`Ý­cã|”èÜW5!„xÍÎ2i_ KÞSÂÔÎ[©õŸüÑbÊ 3yrræOÐ@Ò䃄M\ÄM7Õ…Ä7 Äes'aSÄ–Š2Ô&„%¨‚©G“Œ84½À³L%^–O#É—ôšk­ýNÑØ£ ª›²ô1UÆâÿDzÆÙ¸vqïÞ~C u' x#ßÜes™ÌP™€IDAT ñÅòda–à·Ó~Ú$Tù8¡š;âm!ˆõ¯­A±²‚Ù;ã÷ÅC¬„9tQ¸ÕÅæÀ‡w)Dk–é.Ó}VÝi2ɧ$0Ó æÇÑå(Ó{:ļöãÛ1æÄb”²ø4ÇÉBÆÆuÞš[³Sa–9ÐNº&³±'#!(Ðn¶…t óEhT˵qL±CÄ9w@6×[ ˜é%m pé?óÂÚè‘óŒtŽ2²œ·[:!ÿæ/Ž“92H‘j£f1¶Üwe ýt2•ñf€¯NzmŒÓÒzác5щ0#fÜb–åyìí—¢#~égÉþO J™–½R³µ“à2a–²ýfï Í3‡ð…Y@Éxé»4[9UD=YSè^!b·¶¨†Ÿ€Á„¡rk'ËFù~'}B¨’†‰Vx0ª´rxmÐX»¶’k¸…_ùüi %¯ðÅÄûi1H°1ãŸûW"¶~jëöQtkb’„j¡6é\³nÂö~N5Ø’d£„’DH¢!@s0?ÊHB¢ÖE“¹JøæÎUÃOÁŒ ˆ>uÒpCÏäÓl”‹7•·s¦ð9gSþçZ’KEþ­ÛÐÓç­1kq±»: ŸúÔ>$ ¡™ Ò¤5èeؤÍ0j-3Î@›Øé\=ãÏóV;âkˆiZ(JsDïf“K昢Æäû8úK Ÿ õz¯d!P\ÃhåWšToŸxû<€ ÄC¦Ô1cîı©ôiÀJuzó!80}~l¯H#Ÿé8›&hÑÈq´ <ô'®é}I&âÍë¡ZÂTS§Wíþ¯žº­SÎ6pÞ–™ õO]#pó7lb¶ô4nåfVùÔøª’– I…Ô]3<ÃaRß¼ÎÎùàT’<Î3ÂQ=Ô«Þ„duáÂh2†)X$Q|üèL¹­jÿîÁ@YC°Ã´û%ëd’Jë–$—Î&-BƒÖBB´ÀXMÄ÷Û_¾ã‚§]»ñMÓÉæ°ÐìHÓ$ÆßAÒèøgUÖFí`ÙL¤¨ç##§ÿX; AÂÁ|V¯Fu$À© þÑðI0”§/hÕL“àç¬<81„¶ˆëç³+ào®KÜfœ;’˜¤E{5!ôDkh :1Ë¿in7‚9Õæ«1G‘>áî³FBkaÓ£Ôö Vž$È{U˜K*ÒÔ«ÅFèø÷¹æÉŒS˜zÞšU}ÉÎÙ±±Î¹Ë=&Âß2{“ó0JÊEÕ÷úY³@YÑ>õò É=*Äê:wt:X¯~ÿ{7xÙO‹ßbÒÍÂߎ ÕŽÈ(J¥hq¤ŽLáÊÍq1:¦¼çF Ñ]Zˆ<_ÜXæ¦ýx§iSgªì¯±PNl.R tïïÓÏ÷j„P;O¹x‡¼áðº†EFݧnièÆÐL²x¥ÑZ^Ú{ÈO„޶&&| ‡=)UÙ‡ií >İA§ƒ]…T¾ñ¤mK|4HZE{~'9…L/ñn¯¬ä^šéÚ—/GD,LøG&1k+⾯޴:ÛOÙŸ0­;úÊŒã:=Iðnĺþ)½jÌ.¼½íéFmÜ\¬!ׯZœ æ€IøŽÜ˜Ñ†¥-ÀðÀËÌÎ~=*'áâϔƨK0óü^Eü¥”&X@@ôÙ5†2m k'ý÷BãÁtáBS11ã(Ó>G¸1zóLòY½k¨33[‹-õæWØóy\lfì×]|î¶åNUTº¤«ß™¬Ÿê-s܃'À` Ûñ“Bª™L¼1LéRb0à4õMÎÎVòI_k•{4~£RÅþ"w(§C²H!ö\o¤M Få ‡i¸Lå§ïü„ çΟTh«“¢6~ÁÂ67_d¼(ma O«¤jdîueBâ¶UÓE1™Ý¢X,¯88üÐ^™˜¹Î.gxêÿç—´ž‹"U5™/•&†ÌDü~"#›gBøÎà‹ÛëaQ>ÎØ7.š˜ºùr^ Ô f÷Gcà…æß}1 Z5FB0 ?K¼ 30œå†ð:ò$Š@Ò Åb °óšÙçøøÏ9–\£b‘#fg=S?kNñ™¤ÌÌeS™ÒûƒÖ.kai‚4Gë˜?ÑÛ=“‡¨cÎ^oßfª–µ•þn´4=Ç¿z'úqîÑ©OÕD%îm“êá6¢p*̉/jT´uŠÖùíT†åóæRz¶‹¿ŸXmu.¶)O,xl`( ð”`ˆäz8 ú«¦¢ƒ33NH[; C[†Ä‚;Û·”Ò˜{qÁYÈðd" ”©›¦âÐ×Q9·9~—˜CX¥#BšÄ,'@…4HÍÖž/üEécû^¸oŽêƒ ×2š0@üÞ›„Š #òh"˜°(Ѧҽ› ›'üÓJÏØÂ*KŒkì=»‚þl_ÏÿwoÁ±Å98*Gã`BÏ~Ñ :Þ-Ö“Xdû8 ² ãÎC×ìšÝ8#¥ÀÑ %õ·• Qä‘G’VkL¿æiT¦#@v†sûbzò7ûMX_ÐQïd­Òž£óRyâÅ´¿C¤0B=JcbšFoIÑ–ž×€Pcn’“\ôÕQ¦ÿKý$zêŸ wEµAò!â¦e·­!3ñú7]4ôˆÄhv·´ Ö>DÁvߤ~8"‡`ìF,ÁqÚÿû¾¨‡¤Ÿ…k§œÀ;O¼¾êym,9g?œHK9{–áT¿ ¶ Ö¶pT€Á™œh,ey}&Vm_à®Å²ªû.|„ù0%Ái´´—žkŒ~Øñùh±)K*> 7êw¿hOt6Ņ߸…«-’P†%–ÃVݹl̾Ð`* ?dwSÇ1_)çž‹HŒ´‡³—Àç.Ég¬AËÌ×ìå¥gmuf³ÕGE¾Ð÷°›é·ösݶ¦úÑbr7^aç“1 Ë|š"œãÂ-õœKÀÎ×íiÖ™9BBƲî$D+§e$‚m„™Ì8¸ y‚Gµ›Ìàí%cHž-´r©Ö^º?OrÑ©6U¦Ê‹XôMH/;Zx¢\q BÉŽÔ˜âТ IéÄìfÏå€gvc¥yóñ¢qh °DxžÂ¹'R\ˆIJlCcèCÑzü¨›ª).$ íIƒÛ‘Š|EBNZóùÇ-8…x ïú›Ý&áZ§vîaæyQf’í6ïu²MƒaŽMLgKÈß×N9…¥na,u=  ´3Ý踴ƒqµÙóXkã“Oø¬€¬!…M;R]s" igée~=ÿ&N'v™K"9ÇÓù’™zýÀøfÝp­Dz‹ «®Ÿ¾¡–žÎÔm8ˆÃxõһǭ³ähªxþu~LSÕæ8ޱ .Mæg! œ˜ÌIÀ1X³!Rc4©Ý6,fÎ {×>ãmßuZ„ýóÿð÷üýî÷+¾iÍWºf‘ÝÜ´Æ~Jë/@'Ä93¶Ï´`|Ø Yâ÷ žûº<­~¦¦"„>°,±Z*,w’±D}1#MxåC^m§^ƒ7‚-˜° "à´»YB|÷Ÿµ£g›>ô¶ß -™\8ÌDY->ù̿éM´ò¬=¬ìÙH^’vãl¥ù¸¹®A¶°wà¯mUQ”±RTtlçVضB£jV×”àŒ»s¶øülήª³­4ôžýŒön:qÏÉ& {/ŸNL×&nÑv¬ZçÊÎ_;ÐØÞÕÌýC{ ¶ç¡ôhœàæ¶Úà’dÕà-¶é·æòÞ_w„à «1#nñúƒ‘Ô§ÞA×`q¬2EøóÀ3ßñÑ;&ò©oø¶É½¸ß/‡™¨qM“朦:è]¢Ï@#µ»Å1°3h0Èdžó°X,qæ—Iœ°ú)~>¥„I¶µû‘ŠŠº}–ÒLÕS€´Ï#o€ÀL6ˆÍ=I€vІ“‘%lÂ¥XÛH8P©»@"îÌ¢Uú=/,vp'_”9Æ¡fÉ!Fyó;hç J5 “N]‹F6ÐéÑ¥z ÷"X‹bW¡€®1Ž+¬Ë.4æô@da.…s­Ä+_e Ⱦ1u“ЦVj0˜˜vbŒÍ~@ÂÆ1„ Ò†“þPw óé\¯ATg[[Ö+*_'rHãÙÉBÐ\­>¦`)E㦤îÐ" ›¶#"huø×I Ý‘7Ÿæ[ßܸóò :7N 3‚AhV¦—½ëá‡"ò›ûzêš¾?á3~)lÓ<ØÅhqs”G'¸ÞGDK-tš`KŽcg<¿x׋±%F=ýœ@?ø‡ÀÏýûWú,¥’d¾+j2YÃwcç„Ù a¨JþÐV3p€yf8nñw Ï<*æ7ª“^üp àSÔ£Ä\£‚žj” Ó>È‘?¨E-J7ôÏ[ïÕûÎdiu€ ANIAÂÃVw2õo׸iç#X—³xÖÆ+‚$ý{†¯uYÁòì”2bg<‰±Œ©^ßÏaæ ò÷¸¯&íKƒ†àÛöÍÖÛ¹'ÐyæâƒSŒžT¢Ë®§Ê ±‘1šÉÜÙs_uepí4ô†Ì´S[›‰¸‚ªÆs4DP³bT 9ŠÃ”Ô_KõdoõÜ;3ìwF-¦²…$®÷ ©b1°+/|#ôîy&~ýúïs®x>^®Ÿý·ûçï¿ÿ šã3'Tãï†ZñúPUº4cÁõ;WáÏßûb¼ý#¯=ëm·ˆ‚X’Ü8ÆXíó•ÉÅ| ŒÆºS#ûøwsÖVmIÒv4¤E¿Ç@ºÙĶÖûâ¶RÜ >·? OM Foêv²í#>³éÇzì{Ïø®ÛŠ„Np¢6Ñ<<ÿµ?zÖçwÏyßàYš»¿ë!ð£*vÆ(Í œ¬Ïƒ;‚oøz÷ßm¾ùoFÑÁDÍš`æÊ0›t¥ p»t#°*‰¾j'Ñä Œ âN©ùf篵õƒ5L¤i‹n~õV f´7SK—“ O@PÇ~Ùt*Ô3øF:R2¯Þ]›„‰¯?>Xf†ˆÌ¬ aЖ³4¤?HªÞ;ôÜ+yZÝ_ÿ”†iÊyüÂ[¾==÷„ûüJŒO}Ó·¸Ž¹ë¾®ú"¾÷þÏÝÏÒÐv£·£E>`£9Ó´Rpãîuø‹wÿ:ÞuýÏʸÀ¥GîUÅ ««P¤já‹á¤fv~®@Š6³ öðç(цÙ[[Áj´1Q63² ÀÎ$¶çLˤ…(ÕÜd[³2#®Ÿ&‹>à˜Gã“Wz'п#E+ P9„]Sðߨ|ûªšöP¸â®-,õ¬Íìá®ýkA¾.;Y`w}cY7æÚlÿ¥x†KCÅ¢X¸fl¢S™¥ö¨>è……¾tmíÙÿÀÏÚ¿FÉ:OHó8ôñøÆr»Ö°ðâ¢'Ý"³ÓOØØ±€¡Z&µ°Ø¶§–^»Œ±¬Cf‚ ÄçrŽ6‹y> Lð¦þ{ÕÙÔÁRPEI˜ƒ´.ôç½çQ8ë±÷º¼µ''ªõ¿¦eÌ̳Y¦ u>á>¿ Ô W~áß¾#ºëi¯{¾ç~Ï%†ÚN %˜À´ðF´CàoÚùþÏ{_²'óÿ͇\‰#ÃQ쌧ð/¹Ý¾ízñ7]ÅpÛë›0®WNHReP àH%ÊOK)ÖEyLÎ0…-§xo@35IÐ`h1yL‰¢%ê!âòg|åNGxÌÀ‰Â4C¾£×ø¯WÃ< ªp!Wø¬Áu'¯rÇêÇöê™JŒ|Mý‹Ý²Aˈ¢+”±1•†JØÛEœiš‡~\H«ã{>¦¡QIN³‹™Ç× ¨ù¤Bëù¦Râ™ ½Œ «:lêæÆtÃ}M›1-?ë;ˆ`xÖ}uʃE±O©àÊ—Üݓ֊™TЮqk8袭Ò-Tø@¸³ÃBÌ}=4ÓǶ:‡aþ¾çó£ø!´:g]"YšœÕxCÕrBT 8Ô‚ïÿôRÅÓÞøÝjç/¾áxüýžíÌÏ$€#j0]U«í<Óº¡©†Óýã5‹w^÷†Ú¥w¼ø›®ÀùG/Á 'W7à¹_ýZ ²ÀÃ~÷~Ûô—Ý Oû÷ÿ»zªjajHŸ(¥ šÇû£Ñ‚= ‹ði¯Ð¾̯ZÏ›¶çl¬]ËhZ!/¬ð4•PßØÈžø>E\¡Îz¤#öXØ)ˆíõí`33‡Iù\gÇÀt®Æfÿ?[g=œÙÅì0Fõœåø›þ.>÷ö_‹º©QÇ6ïC µ¨z?¥OÅO‘k̵Æ]iš—…NNÂHç[ß3Ø^‡PVÑø^×÷$¢|Þ:ikÁ“_@·r ¯e׈\ÒÄgoIÁ”„’ær8uÆÒ¿cdåxØ]xøf¦fzù!ÄÌÅß4)H>DÇ%N=ï½Æ~×£îñÜdn‚XÈi c2II'˜€yµÑža4ˆwÉ•pÿéÏu.ñô7í-¸žþ†G㱟þŒFÙ×á¬NÄ#@,ëçûnü'¼úCÄ$èŸéëÿ»5‚ݲƒ±¬qj}£®Q´à™_õ7xì|ÞÆ6}ï~ žòï^YÂM3óµgc&±ˆÜ‡¡Náï¦ 7 „Š*aË€8‡ÂQi°=Õ¤ovvSÜE%/Y7ëÐݶæSºSV ¥æ°ÍzÔuû[ê¯Ú¥ðPhw¨MòãÙô¹uæ£mÿ?Øí=¹¾¿óögà’£wÀÎûd”RC?5BÍÆÑ}<0¡iNrÛ!ošY”ß±Ofl2Õpr™÷^(±`FÇ® Òæ5æ%}íÎ㌔²Å]uÐ1_G`„Fÿ\MÒ~45!΀ʉä‚óÜø¹P™ŽåÒ°:tü—á‹n˜f©×Õ ü! „NMÒT+|\÷¹y÷çâQwNšÓ,x'(‡-ñ¾àý.MmÓ¦Xn{ F…â±÷ysŸgîYöZ×X—Öã.Öe«q«²ƒÕ¸Õ¸uÙÅXVõ¿±žüõ¦«þ/ÖewRÖÏ?àÏpÎÖØ·qru#¶W7ag}Âçi]VØYŸÄOÙìÙ¦ü£8Y€\°hÍ©cÓKRFÉ>ÜméV9 µƒ¶8}»×Ê.TNJéLf˜Æ¬‹ûX"õƒ¶ì -%‡× {§MkK=QÍ5gJ¤p èï#:Þü>ñ‡îÑ3€·¯×:>®uÙÅKþég°[¶±nÌ!‹Îæn«G}ì=·ŸÒÖÑ ‹môÖ°òè⤷î"ÛKfká?2–7£/´oìo½#·—[º¨îÕ®©‘Ôæ·:óSJûÀïÆ(×z1SoîÓ] $½]’Q›š„—d"·ÆF±ÈÜuÁ£ÅSÐÍ_¼ÛsÒy¾㟅•s£`û<>sjÚb'{Qö“` FÂc¨ùiOߨ±¬°ÖÖº[AYa=®°*«&¶ë=]cÔ5Öº‹ÜôŽI9?ño~·>÷NXÈ«q»ã)ì–¬šPu]Ãót…,÷ø€ƒäl²qb€ è5¤_óÔʪ‘‘Ý!-0ÆgꎰùØG$tôc’&Ÿ\ €Ê5ÁÓº S¨†âM81q»Pa¡GŸƒ ðƒ»£Î$,Œ9JŠ`ù89pÃîÕxõ_`1,ª¯<Ï2£ÚöêF^$|"TÀÎuvŸ혯Öê,^|ÀçP)V¾1ÑS|’B´+gÛ¥ j†ôµñE:gØ=ž=æ”Çé2ájf!Ák@ñ¤r´µÇ±Ò $T#ØÆrЛCÏ^iLÞ7Ø´‚*\&ÓX†ú¢é¶4"=þ¦¹ïN‰œ½y·Ë&N<Ë­ã>Þsý}¦±I˜9 9gºÍ \.«±¥¢©cûÝ÷~êl_ŠŽuUÙÁn9…ݲ•nc5î`·ì`wÜÆÎú$v×§°.;¸~ûjìŒ'&å\pôR,‡-¬Ë.Öeë²ÂXªv±jå¨Vû¹ˆH<ñ¿"h·1OGû¶ÄÓC04GÈÅ™¶#Õ¤†£†"gô4fŽøîå¢Oؘ¼'{3¡ÂZFÉö|oŽ Äñ’®m¨›~Rû±ši3$ôüDÝõ-qaæ)¿%æõ»îÿ“øºO},né×ß|èw°|…Ó¡'a[o@ûËB0ž‘ ï±q²ëÁr–*{4R‚fØà .Æ?óÜFÝÎC$|Q±ù5Ú7‰²V6¦ÂÙ‹…5GEy=Wì¥mzäºü}ññµ7.ÔÎ…ŒBÒî5¿){î5‡Ð¶È¯’&¬ÇøžßÂ^ÑͳX…s·[‚pâ¶¡ØA;7@ͧäc,4ÑœšÁQ}*¥mƒ ;9Apj}N®nÀM«ëqb}N¬®ÃMé¿ðá“WÌjFG—ç`,kGývP¼oçú%þà+’ óT¹ó¬ã•ô¼F¿21es¡sGÿÆì9ž¼MCûPÔ< ;þ‘¤†›ÜüP‚a›ÐrM ÝÏmégõ(ÑÝ·uä$ ¸@ŸÌš†aKλ®ß¾ÿçÝ/Ã-ýÚOU»‚}n›ÂŠZ6\6¿!}Ží¯lÖè×™!pIËwÌ!Æ”Í6½˜ÜÕQ§»çU ++™‰ÂÏBÊÃcãí¯SãCkˆ1!ƒàqjOîã¿T@•Æ,i59­ùü`…G¨ø ˜†Ðœƒ÷¶ 9CºÖrЇ*Me¾ÕžûîGáw{ÎäwA~ßOœ|Ô…·=%/êÊ$PìVTÒ},åÀ 7ôâ#«—¿u>Oωõõ€—¿ýçp&×±å9¾[Ôm©­î¹ô¸¦-P…ÀüéWm,û‰ðø¹þ1RC‰ÐªØ Óì¨d2³¼>/jîæ„8Í[E1ƒ´âiû½SÂ+à tÊè"%Ùcšöy$mÅF/#ƒd›Ô¡ý¸ß¢J›ó^E25EÔ`—±÷±»^úà÷ãøò¼Xvñ ß¸Ãä™ñ$nܽçn]ìT†>œ¿ð€€Xž™v#‘p6§† %³jEuõy-ç•g?êå²(ì˜hª?ƒdYj@3´õQUô¡“Ò†`h-,9~‡"ìÈNH²†¥ c”&xØž…ç¿ï1{( Gßã¹H¦ ˆN ±Öe a2MÞ~;Ai|d8—Ë3ß¼ÿ¾…³}-‡#õ ]a1,1Ž£ç/Ãì6#|–Ú‚<Èõ#¯x ~þkþ¤Ñ1Ù9)Ð5yNÚ1 K{H¿f”© ¦šKÛ”´ÕÊ'`õ°óÌòÅ"¥…×¾:ƒöŸ ÅdzîìwSû¨J _…¡9{îW^óSøðMWì9ίýàŸa5îྷý¢%M¯—=øƒ8¾u.ÆR}J£®±³>‰íõ \pôRܰsMzþ׿Ÿ{Û¯nÇÛi£1\2¡Öy®÷íL WQÇ-iæ µ»éˆ“Ç‘6¦TF¾2‚´Í2:ø–ÂÎü^¤¦õ+Á+"`Ýi˜}›è`"xÉ]Ê 2‡íðñáO°—6¤É˜<2“P]*  ¾ub°I) ÌР߯gÒñ º.g¦jBçÁL*ÉÜCpg íîÃïü,<ï½{ »žýΜ(î1÷|ž÷Ú ƒ®˜™2j+š°& ÀÙ˜*žöæ^úé¹ë¥þ@‹þYµ£âYAµ!¦½ìÇ~V‘*Öe?òÅ¿ŒŸþˇî[ï~÷Ëñó_ó'mÓV›)7I’Îë»r…„¬vDÈö]7 RþsV¸:²ÉkY £g„òÐ"/žŒX”¦µÐ³ÌX"ä5zÏ*jï´}b ÞÙY·ÿxý‡þÂÇòÜ­ ñ÷þ^Üí¢OÃOüŸoÆ?ùøÃ~>мéʿ›®ü« mýÖC®Â±å9Ph£¯]¨ª›wÖ''ï|èäqNÎc6©H鉙±“ôuI»öSš}‰änJŒur¥ÄlìœN„ÂL-ø£·ýÿ˜¿ {ŒæƒV't ¡¤š_ ïÊ‘í¼gí&$RAfꔨӞµË‹°KáÛž§3•h‚xŠªûNõPCTf#7I©…„Rëw¶I¥Kvc¶õÆÃîü,<ÿ€B€¯g½cš.úq÷ºœf‡¤âÌÅ‚¨O÷±¾^öàâœ#çCU±½>ç 7‡[ñ8ê¡nË—aVØ&±¢ Ù:pýOøÝ/PýŸr§ÏˆII4îÜÚ üv³ÛºÅÊ„ /0^‚´²ºÅSº„çÊÏÛ ×Vâ7Ç ñ3 Füp¦‘´.×´2E¹i5¿íƒ¯KãøM÷þ>Üã’O‡ªâ'þÍoB ø“wü*vÆ)ƒýh\/ÿæáØòßÉ»½:Ñ6y­ÛDÅ vÆS“wG]Ÿ5»›31{ˆ4¾A fÒû\DA%ì0f$ì#ܧ¡B;Ìa éΈ@†8„¨CÒvÌ-…™¦æS£\g¶!ý{ÊPNk ÑïDÜôçP}ÈmÓ®mËJøÍ®æ¦,[ ±Êв–´Áb5Í^ñÐ,3›4)›rÊ@Z®øVœeµI ÏIµ xøŸ ð¼÷œ™™åÿ|°|=O{ë-‹á÷—ˆ`]VØ]oCu Ѻý~]VMðBÙ ä*:«I»–Êr`-À®Ë^óDüÌ­~ÇŽc¹ZËo*”øyÒN"R¬žmcƒ‘ ‘Š‚Î±æTÈ+°jÑõ÷œO=¥unRW&˜û4¼=DŠ ,E„p[ß7ßÝ.¾RùRÿ~Ö¾ýÞßþ(STM xÎò<ÀnÛO²[¶]Ãu„B±»ÞÆÅÇnƒl_™ÞßO6àQr^2˜¬´é¬Œ½Øá<–6Þ%X£'²C˜4ô9}>?§_ ¼S¬$SÕ4 ŸÈ¤•â Bj1»lý䈑&Àº PÌÔ9Ìfzð "ê-n–J3fãš £ QIëÙaζÒé€s°¤OÂôªEÖ I>±\R+~—gãw¹ ¸ëe‡£îÿ]fúY;8¹º¾¢÷Å"˜~s¾©ŽPQÊè"Á.{NÓd [ž‹ŸüÒß9T{~ø´Ã³ÂiJD^øÄ[ˆªï!°Ý¾îl G²Åñ—®|Cå…nø²‰sͱ\rD е¹œ¢Ð"q° í @Á4§´ BÛ¥Ü;Á Yó¥Mº 2`!K|õ§<¸çG€üÖC®Âñå¹((8¹¾ Û«›<Ås)£ïiËÛã YŸ-ǣКïOÚÆ¢s¯)X@hNÈt Ì„Œ†;†Ì¿¯H1@¤93ˆŸ¢}øÁõ 7èÙV®Gõê3;>4ÅÛ€¤ }0“§•3}Œµ"$–Ö!Û(5{çÄ%)ä@ É ‡ Oˆ4FÝÛz©O¤ÑpŸ8âáRPƒñ¸IªKÔTŸ<â®—¹¿[ÁeïúØóè{?³ƒºÆÿ~ÿ‹ð®Ï^®~»~û!Wãèò8ŠìŽ;†-Œë5Ʋê”ÙOÍå]í/Ùd¨»nãßZ`Ø74´¿žð;_†ŸÿÚ?õ ;ŽFÃ{™B° ¸¡˜æh‹-Úö£ˆÌ²¡QGR:O³mƒÌ£8‚k÷#Üׄ$ –¼Œ˜B8ÿCÈpGð–þ™H;y«08¹º±wæùur}=Î]^Oaî 1ãÖ 8)ÒËi7 îÒæ;è·Ž}±'õ©Y‹Db~‚X`JÖ“>å£'cÕÿâÀ…¶–úÍ—¦™óF¯¾¡ÎëJ ý>ë(}LBÊ|²Éæˆên»Ú r‚¶ÒƒùÇê£zÌŠ”6™09k ž@™å”—Ñyw(ð¯!@cV᱉kZˆ zØÔ£ïñ¼”kCâAàéoû®4!ßó©/ íucRƒ*Baªn×$mS‹‹—çëÿš×áÈp罄ÝeptyOé¼Ó¾Õ1W·¥œ˜?翱†™}NcËs±½®9þú=¿ƒ/¼Ë×yXdûÆ2b1,ñ¸Ïyžñwß{è9Øï²(Ÿ‚‚íõI¬Ç–›jt“G’i£³uYawÜÁG.ÅÕ'ß?)÷Ÿ®ý;l]zl]J»î#…@¯}Åw>çÍÃ-êË9Äéåóg“ª.líDoôÍ|dzÍyÒj&¬”B‚­î¬Ý™ èÝÓõT·˜¦±ÌÄ\¯Aµ`HÞÁ~ÑÑ‚±r:}‚³Ô¥-ØæEï¾÷Î1#Æi}§Ò$º£8žqÂð6²ê¯16Bý ïyQki,¤•?‰¯Wi7 ¦6Ò?èÝ8ïÈ…XÈ«²‹Së8µ>ѱƒÛOÖ_°»ÞÆÉõM5)Üx Ûã ·ÍZlöXÖÖ^|Á’ÜóÞ˜èóy5m’|ÔrZQAýõÃôÀdûv¤ [c¬ÆWm8͆Ž.Á[ø ŠemvyßÔåÛf¯7›>çöF&QÏòf. N¸m¿øœ“– HÏZŸb½„ýŸÉä¶çÞÕ?o-ŽúçQ×0h³8¾<¿-þû—þöiÏC½ü›?„?øÖply€fò¡ì±UÓ,­ß¥™4G¬Ê.vÆSØ·1–]œ{ä‚Ùòÿùú×¢hÁu;W¡4ºô”är`Bß1X$›:˜SÓZi •æÊ@!ʦ4½ª3‚lA¤HŶ@x6:ATbòÉþè–MšNÓ ³iô³Â‡§ú¿Ï¬8¸TÂTç"°¨¹A0Þ!aŒÜFGˆ¸yÔ”+Yš¢=/ýHv’×ÑŸw oòÉÉ¢¢ÞJ†nç$¬IÆ.Ψæõ­RÜ\yÜåÜ{§²^øuoÆ…Go…QGw²í4¸5ÁbXbMg¬ÆíÄðWeëq»ëm쎑ñs,ëX,Z0Žk@ë‰L¶SÑ¢œ´Ø©ÖThû^Z¤Ç Ã?òÅ¿ŒÓ½ªI¨1Ú1Ëé¢UAÔù©;F³ƒpš%´1Œ¢ä„E$†ówÐ+9‚]˜hðö±ÖÔÚ©Pû©,/“˜”iF¦ìhp׋þ…‘™ZvǬÆ-d£‹spÞ‘‹pÞ‘ qtqOþòWâ²¾æ´ç¨þ£s·.H$Eù´‚cÑ’™¸`]v±³>…Õ¸‹åâ–ÃüåSëðáSï‚jÁMë뚆Ú#Â4ŠJ!(ó´M|Á«´Ž5ÙØÛ¾Ó,g—rŽ…W1ó^Ì—›R:t+%k™ô{bgIX1{!ø¥æ[&‰¢äå4^+ѶÀçBüQs{:µI$.] ±SžÜ`—ÆH@öýn!!X¼÷¾žOQU§üœàîOðÞ™³îNf™žl£dfŠÃåáÇ3{7ÛÁÂr7§<ê´\ëe’À°ÚCƒîyÁýñú_þÎöêVcËÑßì­†ˆêYªk?õkÓè¾ÎSeþÍ*‚±¬Â.î Î8oØÕÙ‘T7PQ>”¶g@«1ë ´øþß¡ýw¼?OvLUÔú $¨Å¼='¹/$¸b¶šä¬ JjOÈaà ñ¡¤¬9 $'+Sý3S“µöœ­ è¾ú?Ëá(YàØr «²Ä‘Å1,šcØR}\öÀ×`9líy¼'_æCu#‹cP(N­OÈäc}Ò&F]CQªp:zñl}§ÆñOù;Üý.ŸU9…“ëq|y. CMôGŒ{Ðf3·A7? iîf:ÑF,ïfrˆu¸ŽÇžH Æ]û” `¿¬‘¨·UòoFÉ MjE„z†`aËD`¦O”çïö>ºÎ:mG¾–ùij §“Ô„¹ n¼®sÚcÚ±ƒ3Xl^˜äó!‡2éeìhÄ!bŒ¿ÎÎã÷ƒ‘,æÜݞוF}n„X:%-‚¢5ܤ·@†j:ÿÈ­pd8ŽÝR7̼çúĭνƲ‹µFh1‹Ó¤&Õ6X¬ui#‹g5Ò@º¯]g ŠžPI½TÛ^Ú™®êZÀéøø²ýGk4ÄcIzw1?O…„Þv1Ÿ™6ó =!È5ʲ¹v[<-ò>h…‚èH™÷·gì8ÃØÍ鋯4[´†01—“Ûd–7¿^ÛëØOáèâ8Ž-ÏqÿТ,+=ÉP“±ÉÂû¿.+<ç«ÿGÇ'~#¾Ø‡TƱšotÄîxj6ʧhÁˆÚhsÝ„‚ÙýÇ2B 8¶<½·?ïøàMïœÔûîß„·\û—¸÷Å_„QÖË.r,Öp›E ép#…Bep•Ò„¨ÍkŒ³Êü8¯eö~ÌM+àp¾I Óü‚j Òf!*qÞ§!Lì6ñ+ÝŽa¡â朼b¾!ÒÇ|ÿÈC)°“› ÈÞæ‹‰ÑUô…QúT]êmŸ$ÅÓ`’ñ¡DfºmÌ)õŒ—ÉŒ“:)¡Ü\› “Í£ ÂI-‰6’G V:á&ž7_õÿ0ê c‹¥®NÝ_½ßuQ¶¿eÑâ³KÁ8®‚ù«¢”ªM¥èNƒ°û¡‡–ÕÞA5iÎÞ€¹ë‡_ñ@2ãbn‚ŠÌ9ž£pzô¤nô^Ñœ¼­Ïµ_×\”_üô/õPB÷1°Y‘ÍFÉ4oŸ[ EÝIœ™ #ù»Ç·ÎOã2ÈÇ·ÎÇñ­ójæÖ¦…‰ Øj¦3¥„í¼Ò[ÝœÕùŽìäCÚ^ŸÀ©uŽíïM>£®1Žk¬Ëk]C­ìvp‘ˆ`1láÜ#âÒã·Ç§Þú³qéñÛOæy­»ø§ëþoùÈ_c€`!Gb,ºTJ;ÊV‹(Æ6ð–:¢ H¡ã:6¬½A†XÎé¾3çLV¶1iŸÃJž!ÖÖ<1o·!I†Öt‘®ÁeÛ¤Î>:·[YWƒ?’ãœøšR_7 Ç2*"¤8vöh‘¡Q#„81YרzÂV3%B?{î Ú‚=¬¥zê`j§rÛãÙP³™Í›€"D5³þÜ5PCÝô‚¡™ ™ýÕí¨K5l«žÂÁˆ{Šá81†]zÞ–bkãP‰Æ˜ñÉííìb¾D°”-l-Ž`,ã¾í:Èõ„ßû2<õ«ÿ$&²åmëS‘øüø—Ú—D"öhµ\!s@p÷‡R4—rè\ľ·²’9ǵ„Òm$Ëé¨#.8zI“ãËó[pÀ£½ê¦°itÑ›)ÕÛë›ÜL4« 4"š÷@ÿܲwzØgœÔe×.Ôö ,–çâŽÜë²Ââö[Ë ~ÅKRµ8ùÏX•œ\_y«`À²© žH!¢®ÅbìlæLh2@ žŠ í^bÊÓ㼎5½˜OBãL‚mì [¾%h$Ñ(!î0UEΟ ²¬‰ßûZöÞ6(ùÓ¢ŽjÍ ä$ÊÓAþ>ðw.¶ÑµÑH'·A$³‹ Ýœ§9d¯Š—ËöInbl0ÝÙ›3‡(w”Ξmˆ!G_ÖîÀD•Ðñœ¥U3À]Ï»?vå‰÷’¯Ñ«²K9üc1î÷_ÃÆ!L»P+ª»®Wrã+Y¡-±6°h¶gÁàa¡gãúßûò@ê1Ѻ0ŠZÿÕ»v€pØö)¤gÅ…SN³ÉÆ#€”•ïNªrmÁ˜x´öðs¦x²Ù„õ7¾jH¨´$~L\škôQ+·ù[—vÖ§pju§V'°3Öô_ ðˆ1]'šó°S]W“¢_Ò Fµû/d¥la9ÁB¶p|ëÜëÒûã“.¹ÎÙºÿöîß2™ç«¶ßƒºîïðwþ=¬ËNÕâ.ŒŒÎ*Ÿ«¾ó‹™Ê[ã°y[g–BÃýŒ{.ç0-'  R¶Î”a ŠYO2Åh˜5ýyç’¬Ðá˜íÀø•%w›<˜ I»éÁ 0ó9H]½Ñó/øéöiGž=3'ƒÍÆÍã¡©SÑ» èU¦$aI‰òI çLÛí´Ã wäÌ´ÝÛÊŒ!yÝŒ¢±P-lî“.ˆC3´¡,‹ˆõ{™„XS˜ÿ0‡]ñ´ù÷á½€ §d Šé ³²’Õv\´œ5SüÀïy ó옷¥ÛB@Ñ3Úo‘ö¡!x7õB€™·úùÙdÔ™zŒÜÌ ÀгPÑ(Ã"éL†’RµfŸ™îù¹W= §V7a5îÆÆ&Y`1,ší_1†ùCƒ–ì\é±î qFßÿWL Û½–*D 0´þÕ½åÍOÕ´‘ªeRêcËsq׋>÷ºôþ8¿Ójìºn÷Cxí5Œ?zïeXéN TP×–mÂgík ÚNBCÄü},[î+?w˜øÊt&óz>%Kƒ·Øò0`-p®QbðRGYuDÐÙe:Þ“Ö›  ¿”ùA“+›×wÏNé{¦BRws YbµEÇ ñ™)>o8Ê™õ†ã|Õ ’ó(ÎG& µ&ÁÇ8EJR™Õ©FŒx§Œ…ÉÌ6òÔŶÂõ»q’SÝâ¿KÑji¥F~œ’ü›þcHjÂ$D ýÌô6NÝó·À÷,‡­”2àl\?ðû_Œµpÿ›}_KE´g ÂKh Áþ€”§ø"+ÄÌë÷DÅÏ ÁÑkìgðÓÿœÞ‚Øïù~>£Ù®-:øe54X–Y§:ÂDzº¬*-•`øë²‹Õ¸]ïíãCª~€jï¯K˜ÿXýÄmo‹e•µ¿ƒ,°5ÃmϽ+î~Ñ}ð-÷ý‘ ˨à='Þ‚ËßúD¼ëÆ7øÁÚµàÑO[k‡É”Ê“FbQA _Iœ}Ñ+R™Æ£’fÞé³Q>T?«¥ÓGH03K”­ùw&ËйB¼á¦ó’q"9Bí¢)cí½ö¢3H~¦î9¹áŸ»îØ,i'=û‘ŠaçO¶hb„Cy˜ç ·=v7l Çü™·]ýz\·}5®ß¾7ì\‹w>‚»×{,øÚ¶Î{j™{ù¼]Äl«|VCÕ¸ÿ” õÛ¦@222@q†p6v÷WBÛ ‘U[}ñß*o"é­pd^ÈLJX!3ކÓ8!Ú†¥œfa»•™þc Èð½ s$çbíçˆN]‹¾öµ³ãpѱ[áèâ¸f€FuÞ< f·÷Í]kìíCêLn¥4ó…:Ý9rvn#³‚iÀËa«š¬xÆô «kð¿Þþ_0–5vË6vÆ“ž‚DPϧàBõtë%,ÂñI;®§ÛDi>1‹+£Ð„ºÕAÝs0«Ìœ:äõ9›ʤr+Gs­e" j›™› L&vTgpÂÏÄ@Ľ©'J>|Õ%û”^È÷BMMMj-(Vk”ìõé XÄb‹Œ{ÁØs˜^˜jRÎŒ~SW{oÓ&{¦KqDbå««Ñ5Šal‰½ª:ËÒåÝ׿9™x¢]pSËB–5üü){GÕòÍ.^wTã¾µoÞ—¤}†¸0ìÏD? Ù€ÏâÞjFà‰˜4¯ áИb¡ˆŸ¢ÄЉN,’†…‚3ÖBþ-õÌ9™|eÒsŸÀ°ÓϪìâƒ7¾7ì\ƒ·]ó÷³Ã`^™–Œ€U4œ kM 8€)„‡Åû7¢Ów^ F,˜¤‡82V,àWÞþcxÑ?ÿN¬¯ÇîØ2Üvs!K,‡­J{tháUm¯ËL ¡i>we“Gù¬Ñ‡ŒHD·zäc¼‚Ûé¤r/_¸ùÔX“ñWñçÓõìÄ0-)ñæ, Í1ÁCŽb~%U`»z“ªÁùÒ»y4‰QæÇü!& ›2>dYh…iiBkĬ}÷žöåÎ u€…'F»êB Ôj’Zœd™üßáÓiqÞ Y`1ÔX{Ë „ ØÿÑ#uæ_ûYh)Q§Ø1,±¬Uc[vQsXÉPÅÀB8ÒÒœ•+qVBàú süògá0‰Ü¡ sž,ÎCH›ÀÕgÌÎO¼Mü=m5ᙚá(¦é®Ç]\yÓû°³ª¦¾kO}h~h|Gʼn10vûKtu?R˜ÖR2=¯ƒèKÐ’G:4hù¦¥›–xX!/}×ÿÀ¯½óÇqr¼§Æ°SNA[^¤Å°…Al]dZwöìk{ K<øÙàëÒetMڱݔ,_ú,8®1NIÁ…G&—ÎŽcÍê4ÎÄ‹œaJj§ ¥=mÿ$|–]KÒgÛNÌÞr¡Å‘ïóþ(Z)Žê‰™ÖI"Ò9BM+P=_PÀ.ê]3sø\ ðÜ+‰Ã^Ï<ÀÑ‘úäg¹ ‘¶ò‰S¹ ®ÙyàÔê&ï÷B–Õž) ,‡%²ÕR2O9Ý(ÚcÌÜúì3NàFÍì8ãa¶|îj LjŠˆaˆÝ‡ëñôSFO.BÎÙ¹ª©}¬ƒÚFÄ6¤5#³}o‹Ñs§ø¹¾}^7†üª¢œìì]¥¾´gWeWž¨ÌUvpùk샑Ñ_BĬéúSü|mHÁNô7W‹¥ÈwÐxwº…lw»¢kúºÉË´Ç–xò—¿½úýÏÚ·ç/½â§ßzŸÄÖÖ1lIeþð8‰8ÍÚ!BùùÜ+*bÂ+ö•<ѬñüM&û½åûÏÏê\;’ ËkÒ„­P¦~F¶«dò”¥Î!x°²è0ðX¥œ9ðÆgÚêªM­@¡: óó`ä¼5Þ¡h¶àedÕ°ãªÜèv® g|fða®ËÞ6=¨þáŸü´´±ëîçßÏÀ »×¨¯T-Àl§[X KÌ…Æ0¹bËtQµ™kàŽ®x¢›—”ãÖF5™%h ¥Áû}ÛsËç6ÈÉi¤GØÑ"h áKa¾¾$¼|0à猄K¢?ä÷{m¡U·O‡ùošÕ9MUƒ)°öºKtЩ½>{¶‹+•šÿ`>ê€ .pMž–šÖzé‰ìžùUƒÇþÁç¨ÇLJópÎâ<Ywóæ(èèùª¬-Õ=¤“yžÅʨó¼÷ÃÚßã€[PÁèý(˜ÚÉB„”aáÍ\›ÅA=ùlÎ< À 5’µV÷¯Î `NL!ô‘p³túÓ€=£À`ñümõ¸mNƒÁØ Dˆ(É%{Z},×\þ¾Çˆ >Z×óÞö½éûÝæ›ýsñÈœvüâPÓê.‡-Âsg¡:q¶< m0{¤Ç›[X½íJm#%GM6öƒ_ø|<å¯væíÖ°1ó`ŸjoÏb†›Ð]ë•å>$z_æ˜8Õ#“Ês;“2Ûáé3ÿNK› Z…­ÉXü šuïÿØ˜åæšÔ£xЕeõ³J;Ͱݼ‘‡ÊŸ¥Dv5¡Ü)<å+þ—¿Î?r1üÒ;olÛ¥Gï„#ñ67k¨ (!q@Jâµâ‚o®Ÿ@ czÅ9ibÊÞNûlB°§·*H³†tÕ&£W3{æï&I Ìo^ ­2Rp ò4îMVÀT‘¦Úð$Õ¦V‡Ü.(©¯¾nJ<íl“`Ä–ÐŒýÎ\©>÷‚÷?—¿ÿq¸üý·,æ?wýÕ•‘#eÀÂZ[‹£ØZmyÕ9,ól]ÚÂBÉFN { zÊmmâC½íMÿ·™²¶†c§í~òW¾ÂëL žÿËnŠ ™ÎúÇ ˜~fæ ³!R@QZLÝZå1Q*‡×t2É™"ÿäIs–ùø=±m‹‚²ß(ÆÞodÿ…Æšë Í“…‚U×JU¸a­¼ïܤ…}L@.a9*8º!jªù&$qìžü|ø» ‚WÍüQ'Q -¬}ðñ8W=;ûDÏ~çÃÓ3ù¤ç‡ÎÓÆàÙo?¼/¯Sëñ“ÿ÷[ðä/%Ž.Žc9IHîæ¸J;m,¥ÏO Ú†™6¼ðøk±ÁÉ´´ö– 8gëüœ´ì€×“¿ò󌟾÷LÛ”Éh[Fêþ‘ú>Co^êMPã6P"Àj}æfŸ×›x‚ÙùÓ.É‚›yÖÂ*÷¯g“ö™µDt?­9HÚ¾„šFúèòYCÑ'WÛøü;?¿ýÏĉÕõ3õþz?sÓú”ÒsGY;ÆOþ~OSù!`ím±¦ÅÆÒ¬e˜ tµÓø%Át÷;X‡ÍsÕ&L:½ –:šSFÏ^3Ößy©»¾I™­.¸Îcg¯Ó©\ÈÅö´[})î™Whí•ðÂÓdþ¿Ë³]ØLˆ×åÑÕ÷±ßýI—µ×F?ƒô9o?¼ò¤?yžýÀW·zJ²åÝW"Õ¼ME‰‰¬é¸hrREžþJ¶?úÅ¿‚ŸúËoÛ·=O~À+’ ÝZÁmKLî3wdϯ“îwé&³M'0Ø "]¹èʢ잦×gùûIŒ¨5#wÿŸbÌ(½eW5æ±—ÚŽ# îë·'6#¶È$©í†v†ýVÂÕ´¶Zž¬zúÙöúäæš%v¤Øþ; ƒXØMª½\yk膾:3§d" BpÝ EãRqŒã*©~mguÔ;qŽÙq‚˜4¼TQÒ\àÍ#AæçGî^}çj—{>ØÚ™OÜBg‡o/ô‡wãêRZ*uSw:’ˆ47Õ Å‹>ø½8èõ°;=3½·Ý$/¡ šl™Í$eŒBͼU¼µE¿×3êA 2B pù;¾ï@í|ôïv›ýbî…LQÈHÐïwÂ/ò®´1hÀF4vo:&~ö¯HLÞß硟Ðí²6ЧæHuF–y,(|íÛ;ÝP±0aÛ¿å‰/mÈÙrøvùZƒÉw&R¤û¦©÷Ž j°×Щ7Z°¤î'hL^fÚÅeù¹l¼ ÃK!]k©0i9la1lAUÛ¹Ã;Ø·qãÎGðuŸúXüö?>sRÛrQÓLÇQ¦šÐ»µfÐH,íýži»ó@fêÊ”Ï9Èm*–zÚL>lk’ÕT·4¶(±ïÈx)ûx”•g5Úlž‹qé‘ÐFÒŠñÅ^×\äÝî+äÁµqc:bÃó¡†&3û¨¡Xx¿ôáý™ÿwÝñµ”¤ÓK^¼*´°Cêo ÖŽ9µ›,i+(°Mª€â;ïùTT–°Æ/¿c>9–]þýÏÆ³¾êo÷íßÙ¸ÜOC‚|ºX¼“þ¹œ*¨ëBZfqÁüéaO~À+òINÌH­cZ3àŽ¨çÞqÍ¡Cø)(£¯€@XïGððR{”ŒÐ÷ÕI\sêÃX5©Ù™0ÿ붯…G/E>º4˜|bú6Ca8»»Ž#´Ã øš½Z ´eꌱo… qîn>Ã"†cJª)hÔ5Ö«=Ýõºìb{};ãIÜýâû ¿žò™ ¨bÛ×cËYcÁ\°éX»¾Í]õìˆ ”ž6"7O­6>iäX`ÝÂÆÑ÷%žæ@gxiÏüÓ\iƒslÐ,1ýf°U*/ …’qä¦7¶·u‡ë˜OdÒ6K³ñ¬Ýõwx:¾ëÏðÖ6HÉl•j³æÐ· •ˆd¿B)_õY¼z¨Ð\¾å?q°Ùø¨]4d‡¨¬Šú„dk€‘¼kÓÃPXÿÔT3£LúûÄÐɤiè›Î¨?ýN= jß$JHAeÅj½‹kN};«“íÄ­ÏùW 24sNÍ‘Í>ç¾1ÿÞlü×o4-Fy×zc^>_k[µi€¡–©ÂOº[51w:–5N®nÄõ;×àúí«qÃÎ5¸i÷zœX]Ýõ)üù»~#Á/|æëpDŽa- ÚöÊ8“Äa‡²ÿq†êM#IÄæ›xnͳ Vd4 TÒ Ø¾èß@1°ôEÁ6ÖŠ·{J›jôïˈ«³ËÉûB(ZDÇäHFw·/iQQž ¯?T¡8¡VölÎwÞáé>}BR: «†ǵ0”cU; ᓇ -Y´’R Ššò°A=Bo>íïÇþÊ}-IÕéÇa {ÄDژ飦 ®¹ê.ŽRê àI¯üÊpöÚ´ÛØcŸ Ö^; ï“ZlÃ'ÿ@ ù´½_Áç:/$7ÕJ0}£š’9L>»ã6^ðºÿtÆ3sÍÉàߥEy˜Ÿ­"ûÚ¥†1K†5=|ÃíÍÁÕïèï¹væX ƒcf1…”¶B µH`»’Dz®Ò´Ô£ÖTÖ×o_ÿsÅË&y‘Tª†0¢ž€2¸†aÚiQšOGñS4Ÿ:Æ„›©¨3IµCˆšùy„uסG ¥D–ýXwþƒDô®Ü„#Ø´ì _£=¦ˆËtc““ÁíÅü5£³e³»]r%®ÆÄ#'‚‡S¹[t onØwÜþé)" = êdÄ¥©Ð&Ämµ@JáT‹ŠØ.éÖJ Ö(8;Ç(Fk6…ómjû´/Ô«GnÂ*ðG[p6¨ÎÚ¶^™Ea YV üø¿d÷¤W|e-›˜,ÏSƒ-[‡¾>Y±4m cò}—ùP»^°I§OÕœRGQÁÛë“øàïÆnx§ÛûÏó€×~ðO[ÚíÚ1>œ5Vˆ<]#0†¥F¤5´ßÓÙ”šÒò y¢8Z\~Ø%’3á€;ÄÞ´z;[ß$VtÄ«ß÷ üÚ›~&1ÿK|í§Æ“ØObµÞnç@·¯„?¤£NI3GŒôm˜æç ÖtïèunÁ<‡UY*àÕÖ Cî¼”I,Ú¦¥Íå¦õßûÓæ®vo€=¨˜)´‡m>ô¸1̰O™_ ÎÙ #k0n;)¨ëéìØÆbJ|šUTê¡ Úñ¡~í¬=9¨¦W}H‚[ª0@°FEþždK ^rÅßw˜rYªçiœûA„ÀŒ–ÓIPû^Zþ ü°:£7TbÉË {Š/8ÎF5õyò<¦,zò ™„AÒâ23·²cïqŠvë¤Ó,Œ.íˆÊ±Œ¸¶™|,u÷/½þ¿•9€+®{‹§ÿâÂ/l‡ÜXÃRC·T,]g€ØÖ=ÊfžÇtN§Ò¶t!$üÙy|'ï˜öuÄ?l‚®cSßµˆ®DrFÿ2µ»gmÐn¡hZ&ZÊì`0p€£P!äÏ’P<4IXx[–›'¬ ͶN^V²|ÁHØ4¡/úà÷à;nÿ‹˜.}€EPÈ+PSúAY:mV72rŽþZ,vúÔ®Pó6MƒA’©EÜ‘¥û”OýöòçÈ`Z’:ÚˆUªz^Úa6‚¡¦hmý¡/z!~ö¯¾@5Y$PoÚIN^½sÖÛ3Ó]{fbÑêü I°Ð´+Õg·Kcr'woÄ ;׺£÷l™|úëúí«°*»×Ý:e _[‚9™þl`’yÈ…klþ™‹ž)-~¥‚«f,(Q”™dL[©9ý\˜œØ½o¹úoñæ+ÿï¹þŸ°.»“>Î¥_‹/¼ÍƒpÛcwC)+¬u]ÃG‹6³Q0Íä³)9K°ò— —iòœi·2Œz†ˆNó‡É5IC{‚AÖi¢yŸN¦`‰·¡1ñÛrÏû¤ë¨àáö`4bìE“C;Ñšfn@v|˜–°áªBàéÔPŸÁV†„C¥Ùdñr`^ÒTF¢Ý2†*·ŠVMà`–¹=¯tF°!: õ›‹$àóŽÓ˜(hüÛ(OŽÚ ­G»û¢E¢4û¯H;œ¥žßºÕv~**#èÃBè•_‰Ÿm;{°2Ùr€D¯“ Z3)ª²êè©{¶Y¸ØÜ+ô¼Eœܹ×ï^‹õz§¶µ{ÖQ?__pç¯ÅzÜõTრ(¥jcÿîö+ëo ÈK¡¤ ¬L…º{Ó`ªá&j{ub¤­ï¢7î^‹W¼ýEx󕯚eúvýË#_¯¾Óã°­v(¼bĪúÏÚ RÔs ´„ŸÑI¢ÓÙнèmN¤æ c«`äOãÞ3iôkhæÍŸ“æB†£›§NLÊA/z~¿`–IK|Ð ´Î³É*y{>¤€ƒpûÍ8‚ìÓ<Ûü·z"ʹæ{ܲ#Bíн4ë…›ò×xß8ŠÑ0òo¼û æŸùº›U6÷hBtv!#ÜçÖQÓ¦‚JK†˜ÍÆo}m§Y¡¨NGw†73ÀR–Õ\VBí/í¼Y¾~èM õ5"ÊöYŽÀ™D ‘æÕ È€F ï$ ÁúsbçFÜðQdüvÝ÷¶_äG7º¦% ÁÛq)š'ÖQ Z’Ð>Ógm!v˜©>ç¦tODðîëÞŠ?zû ð¡›®ØØÇ»œ{Ü÷¢O¿øKql¸" ¢q3i­«ùÈü P™FÔ}cCó ØÍM¶LáÇ„ƒ€`À±~™—$vNf—¼UŽq~·F'&¦T0ÏLÜnÿD†Q¾¶ßµ‡…gjêÞh “pµ[¨ ŽàÓ Ûö-šˆ5ƒ`Êßvë_À¯\õ}{ö“w ×°P<Â2ÆSnœÎòà°×I7,âDTÒýZêÿºbs~“þzîW¿怭Ã0 î¬lκ2b,æS`šÎ*«Çýô1ã³»™ž%×ïE#Ëßð bþMô‰ XÈF±*»X•¨œZŸ˜í÷Í™ƒ$·•ºf%¦/ù9·å"ÖhÚ¤>³Øþª¥´pÅ>ã·ëN|2Š–J©#ZžK–¿_ÁYN]3„ c£ð2ÕnÙéOL¾g-98@á'ô8ÄÐlšÁk?ðgøÓwþ*vÇíýû¶{ü4nsì®8wy1X6:Zc, Åè¦ÓõІÒ4`ÕRC¬}¢ ¾¤ÁÌV“yvàÆ™;5.ÃŽaËwdáµ$ƒ-иœêêwL›r“¸Â[•¤Óg93qmbôsü¼ýš€æ˜}W°ö2‰Y‡Ÿ FG 9Ój4MF!ÎÜV¯ ôCoó øå+¿¹^ðÇ¥ïß}Çg:'ÐVnž»ùøasT[‹6em»üß{ võ×s¿æuõ1˜sÕìùÅhk­g1f¬Qÿe‡JM×íó¶Ãjþhmœ©$G‘É~Ü~qj޳e žÊºîð¬a‘»ëm쌧6öß…@Çü§4ø€M5iX9E.#¥p°>•ÛeGÛqkÆo×G/ñºV4`ë˜3³]»ý`øùo)›åÞLŸï‡(t¿ÌŽï½ý…ø‡+ÿzbêa_ÀÃîõ?±5Ã9Ë ql8¯-q; íoñ{\§¶yW?™ÑŒÕ› œ^ÑÓlÁH)RfÌ+ŒµbtZ”ÉBÍѬjö!¤î€örH+÷×ë¿EuÚÄžáïÜeúìáL@é^À*ª0CôÖ¡–"ªq¸‹•r$Ùez›§á—¯<<³Ëú°;?‹­öÝÑ]‹÷oxîÁÙ¸.ÿÚ76„Wk‹¡þ¶yF×X»m+|F ¼/!Ã[!Šmcízn}¦.¼ø^_eÃ3{FJÌ¥ë¢-Z|É¢†}®Ê.Vã®/ú‚‚ç¿vomè‡^ù•u§0Ýë<›u„2ðÁô’Þ#;íöê¨‡î œ\݈œü°÷AÛØ¬¿]Îü @Èÿ“£‚ê04?—Ïac’®EÅöL¿ßK£iV?k-BéUïù=¼þCžÊ¸õ9wÂU'߇¢ÿä§PlÉQ_œ#Ã9X`«ÁÜ4[¡V•Ú‹Ò„ …RœdK3”×CÅ5á9wÅz†GZ™i&)ѯä(ù¬No97^fyÞæs°cÂMÛÎzNfʤ£öï´áÍ`»QÖr´!Køáŵì!Ñ@ÑQ;eÛW|vÒ€[ôJø½ÍÓèµM×óß»?#Îiœ"¶ßõK_ÿVŒet'Ÿˆ`,usŒÝËë²jgë (F¥œIrêÃÍ®mµmP*+Äúå7|lwnÛÚ…,#•·3cÌñ¼¦g4¡PÇË)v>3ýœ"tû±wàÇ"3{mé±|Ì~\ß„ó\TµCBšµeÇ™Wfò…¤&Œ?æ%3}›SÿnÑ%G½ê½¿¸òU“¶Í¿÷¾ð ¡¬Ë êq§[r[ñfóJY{í)g¡žšè¼d³ß«­6g¯÷G§üÐ.;2ÒP}jw…ààDPQBÀÄ•"Š8±œ¡÷›ÙSŒ ÕÍû<¡™sE¶Î{Õ]{ýÖÙ‘NßÔ ï¦ìT8;4žéÕž«&È,áÂ.m ŠºV¡‚ï¸íÓ|¤†‡~,¯ÿxןÁë«ð;ï*àqøxî×¼Pm[âíÚ0µ.+¬J3 n'e¯ûÐŽÜä¨7ß0Csceø\ÑœÙ41;RñwÆLäí™±åqT}glºL|÷gþüÎ[Ÿ~òÃQN\sâuÝ"‹ÄM$ªÕQ>ê:!ÕÚ ¹Å2û¹ëêïÇùG.jNßueÎ…¿Ù$Qóò¹‘`ª}ÊF¦sL¿‰©†· L-¸iç#xËÕ‡ºúïpÍ©NÚýƒ÷yq=¸Æ2bš*~ßêT-͵ý#eKÛsPske²@°¼¼±y'{w%æ)ÔÅg& V{{ÓÃ]—ÿýA øå7üDbäµ)†HËü‚ÿ8½ÎݺE †aõZZ@sŒ ‚š œ}T‘'(›€zÍL½LfúL›ù:â¯ßû{xëÕ3iïÃïõ4Üêø±ÀÒ7Í ƒVäoÄ`@†´‚âg«†ÍŸ2C’zØ3݉oõçÊ;çi0³{¶é‡vÅD6%V|ÇÛBÁž Ù‘£H‡™Ç€-¶x.—çüïý Í~מ'‚m¼&VÎo݆×ÍAœ)¿9›Sî^ßxeéÌS.qâXäG·ÛÚßvR–¬õ7 ­œ×:Äêo̯÷ <â®—ÁE$D0P „Tc1ñÀr1ࢣ·ÅRŽb­;€ß|ëÓðOW¿ÿênß„{^òéjšÜ…,k‚¬²ná”mG%cY5T¦ ;„¾ NÝ`c[`QC±'Nt²rÜÕÕLF¡V{&ó6žÓT¿†¥<_nf\Öxhâþx½îtá½`é’µí˺Ñ\›úY‘¯…K†¹$³¼’|õïØ6&¦ßü9&XoÜù^ýW௞ž[ñŸök8¶8[ÑRX[Ô´ Ú˜6×s,Aq°Ô…B\áýÔØ1ßè;ŸœÕú§2O&Ét£´ŽÌ ã¬}c®ªÐ²!;l1æÁ¿Cj°þeïFˆ¯+PmÝ¿Ìô{ŒwÈõ‘Àa °Ê;ôX‹‘Pu4ñwŠL ´Ùý–6’Ñž%ßl–BHÉÙèrC›c:JóÖ™À ~SÑæ}–4ºM¥«ˆ{p„^¯¡ÅÁÎŒ/>r;|ޥ߀ÿwÍKÝLòæ«^…7_õ*œ»u!>ó_†¯¸çCqá±[¾kb5ÀÁ»-R¨ŽåBc[(–¯ÅlïÒö_hkÓà*²ùjÌÉŒxàI¾h8‚ÞZΗÆð=2hšÈÉ^|5ÿ»-‰ZóUH08RgÔIÞÆŸôÜ@•ës±ûûqÖ3}‹@+ºÆ_½ç·ñ®ëÞ4iãß÷¥8¶8¿1R‹Ð‰Þ·Rw¶véN&Ñ2fZ4í“S©tHhæŸÆRªìZã̘ι3™#ê­ çÜc†!½ÿ†¨I‘k%ÂæHøGš×Êüg»öáéË…àeîŸ{Ô­C)Ôžs$Ð'|nHvà!FlãX]æV·:¹Ð°ýÍDäZC³—›¶÷5°8šé" ²8ú:ŽëX`¡±äA€-9à³/~ .ܺ5^síïáÊw;;±ºÿ÷Ý/Çÿ}÷ËGDZµ8ŠÏ¿Óñ%wýFŒ:b]vÝYl  èˆå°hÌvh‹x]µ aí¨U0Ø Yœ™2Tü¤cÓª²—BD_Ç«x{ꃇ«ZFÉÞÿ‰ë`WÑÒŽJ¼ ;ëm ƒ@(0Ưôlõ®}qü¾™xü]hŠÔªé;êfõ®œé-ý%?xŸ—àü­‹±#þV5z Ód04BÆEMìÆô8Ö=úYø0”¶@ãtæ„)ì’/#öI*pÿÕøDIdžzôµ¡!Sƒž”÷¸Ó>(Ê-É$%-â°×><ýÌ}>X‘›¦ò\Çðp‘Í¢°™cø„¡=6ÜQñô–ÙDâcLbL ·Éð\éRA„}±1Ïv³™€,Hëj~ôÃPíìŸ|þçáÞ~ >pêmø³¿Ü~û¤ŽñvÆSø“wþ*þ⊪1,‡-ܻܿànÞ—žs\zÎíqþ‘‹!"XbÀ¨+Gmƒ,°%ƶÐYÔ”ÌdZ£öag+›Æ14­ÅÕw˜–a̿И3Ñp^‹D¬¶i1fÒgÒ@|âÚûzøï~þÇ¿ý]ìŽ;XÈK9æ!u¯H376Ä_Ìü㡒ƈK2û ÝS¬Æ]˜oà {‚¯¾ó÷àVÇîK}²×®eØÁäþ¿PV€ÚÚÐB å7@è&ðö¬3uã{f‹QsùfC‹%ÈãÖöWNÌ7z&ް6äúk¹¡õÖûä•ñ¶·B¸ŠvOh€Hå¶×†·¥ê$êsÃäägæÞ™¹wz`CcL$\Ý3dšLßøêÑãð&:ÃÍ Ü$°º@1 ,$¢m(ù ÎöÍy*`ÿõå@®¦ È_ÁÐ| v`…ˆ@´àNÇ?ßt§Å«®y9ÞzÃ_a­»Ø-Ó]²«R}»ãˆ÷Ýð6¼ï†·MžÙZÅR¶p¯Kîϼ×ãÂc·ª¡™Cб2mf!Õ–\K¡º ¨¶»C u­Ç9ÖÅ·nNb´ÜþJ ?òÿT¤UÍa#í^¶ÌûmûÄ5ýØÿþ<é _€ Ž^êþ Þ7Òô·ÈŸãl±„ÆèæÖ´ÈR³™–²Æ¨ã¾ÑQ‚ßx×ÂÝöAX麢þ26!¤HjI:i–V¡Fª6[¬Ö~Bn–éùl@Î÷c7惛eRì)vüçÜ-Ü8ó`Ú7I¢Õî„` \Kf“Š” ßøbÖŠ¡?ë†ï½£¸³ëîíž+dÓ³1ޱ«›ax£XNýœßOϤ\&•M(+½`“"IÈÌf²tT<K "Í$>G4]ÿw VÆÚÞ*îwÇRcžŽ"`ÔŽ.Î×ßî»ñ€Û=¢!¦‚VWão®ùM¼ùú¿ÄN™Ï›Ó_«q+ìàWþ%Þxå_B0àßÜíÁ¸×¥÷ÇyG/vÓΑá(ŠqÇËB–M( €¬±+cY´½zöªiK·1›³WÕ"“Ô° 1™ÑíÖsùÞ?qüºðØ­šVW5)qÿj쌵“ɉ·MR&¤Ùί&ÊúÀÇVXàëïúƒøW·ÿVìŽ'1ênÛȸªæ$Õ~ÜÓ]i&“ê/,ÎÅú@X@N›Ü;y‡+o,(¡ñ€ð ̳+í tå> ðRs”•¿s:æŸ cÐ_7Í1ý=óï‘>¾¯Ë5õA5³J8uíCÓ zuÁó›7ñäÐ 3BYÅfÃú$:…©Mûd‚yãÄ"ŠAMiA‘ð3Ba¡’l#¡ãʳ²ÄÅGo‹Üw9ç>(ºÂ°Øª)–!†%–²…“ëðª«^Ž·\ÿ—ØošmóÓÿvºîŸù³xÖ«Ÿ€G}ÖS0Ê€¡TÓÂrØÂrØòÓ­Ã[ÃQëq«²[5†A’Ù¡î!“‚™ÖººY˜ÿeÿúpdq¼žåa‘6ºÓk@å C›êÒÆÐ¦¹£| tX¤>S&eÙ¾ÑE6l/­Ô—‹Žxì_|ú¡ûüãþSÐèIáËžiÇæ×0aü‡Íq´”-|í]ž€/½ýC±½>•Væ_t •u›ûªuØæ®`X¸gré$Ü´!8I OQ|I[VÓæé¶ò8x)ÌGóÚ<3Ô ú•Ú”C2ö0žÞõòŸ1-¦E,¦÷¨mlL2Þ‘}½²[û¡üÎjµçÏÞ=„Ù)Ä®H?rZs™„Ì’CZ‚Š8=í• q“luÙN•OÒÚ<†³]tm£–_[¿p¡€\çûËï<¸­oZªÓ¸EÓ Ã€¥ˆœ×̤m8‚-9ŠKŽœ¯ºÓãñ€;<ï¼é xù»kÝÅ~×sÿþ‡—½æýÞÃþåOav×ÛXë Y`9lÕ#[TÏ ØIO£#~c4†6-}Å^‡œîõìý&_ž@ÜZúÕPhƒ^#›J# 3ö;"r¯Tú+…ôÌ¡ ˜`(þÙ Ðb×{“ã*Š•nã§>ïO±Žà¼­‹0–‚Çÿåg¨ïl Z—•ÓÞñ¤Ï“…r®ÎBr»¥lá;>é)¸ï%ÿ ;ë“XëN£‰µ šÁ“Ó”k-7zMVÏ„µÈ#ÿ+ÒöÔ…u÷ó>¸ã#ð—~ vÆØ)ÓÄ\{]줽ÇÅŸŽ/¹ë7â\‚ÝqcYãèòß:P`­+ í°ï±¬;FSn¶#`–Ø-U)Z7Ì¡(z«- i¡îtnsWRwu3N^"âæ ®ÄwªšÒW F!íVk»ÇSÍÔQÓ$fžØd•í¬Ob{]Sn›†*Öº:ãäv‚_s—šÓgg}ªnCAãYC-쳞Uàg%ÓÒÆÆÝE×Uˆ h±¼LÁ„-åyihz0ó*1ø™-¿ó±¹fÎ\äV Õôîä=Ö4M'XàœÉÄ, êe“„| þ"3ÅÌÝßdžßãÚ¬l(x£À™û=è2-È÷³Ãcè$,„äÆ×ô"ö?}·Å¬6Øâ™øySJ;°Þõd•ë/ˆöJ$@3Fm‚Æ P^!mÀ¤´} ‚jŸ7³W i +›cµ”êÞƒû]ô¸ßEÿàÔx'V×áêÝ÷á7¼×ì¼ï;ù"†w~äxçGÞèßz¿ÿŒ#ËãI;8º<@°*;‰Ñ¸ÙÒ'?û_ÿƒ£èzVniŽjº’ÈLµZ  €ŽAv.÷Ë<¹zQ#-L j6û(¾XÄɨ¢X+¬uPÁr8@pr}nܹ¿ïexú›u 1øñ?ÿFüÀ<Ëa »ã6NìÞ€íu5ÿ-‡£X Ëv««3š‡­á¾á®OÂç\úÕØw°ÖìÀŸÊ[ȯ¥§(-UsC¶‘Æ¡ÐYæVD®2³Éàqðymæìjå•>…xn“ÀÜÑV19‘MB‰6ÚÝ,tæÌ:Ê,¬X„Ì`E¶ÿÈjä¦Fd{îÞ!5‚ÍÀœÍé°êà™;+#D¤w6–*¤þˆ)ù=sq”O˜-þÉïˆ×(×$6¿´éDÈ,Tà¬DÛ‘Ûl?fÂj“<ÄÖ,ÒùHÓ‰ç]°ÝÓö@ÅóŸK‹âA³Ç*ÔðÏã‹ pl8—½îsáÃ×mo¿ñ5øÇëÿ<õÏû:”íúå7Äq–ßñÿç¹;ëSØ·qjuÓÍšXíÙ_ò&,—Ç|ƒêˆÕ¸òdo†:+£ )`Á Ð!-GJï­•ø­2|%ûQh6~) Z°Â.ʸ[™ÿb PÅîú$N¬oÀ©ñÆÖ‡ƒ_O}Õ#fï?ô~ÿËa댵¯A–øÆ»< Ÿ}éWa­ÛÕׂºi¬P$˜›}ÊX³Áª¶¬#Å×'w€2_ {¿‰‚jÇoiõ6ò#$fjÓE!˜çÙ?cvþ‰©ÉŸÍ&6z-Épo¿Ú¿·&s•ïyHÏHתî: îÆÌ»KÝß›Eû›W™\ëœm¼29€¦¥CÖWßÈÄÓ–¾}qÔæûø(Hu¾„†}ñ³ˆg±Ö-¹-4©æ p瑈׭¶W½cüTŠÀŒ09½l½'á36ÓQÝ6–•ËG ¬×§ptq>îéWâsoýuí¬Ùdplq7®>‚×_óÇxåûŸ·'-½èõÿõ€Twf×3¾ø 8¶<Ž[Ð"Xc«–ß2¨ŽºnÔæ±š¢üW§[è¦m>%úBþÝ6®¹³ð`Âk…cÙÅXvêŒcAÑSË.v˶×'PtÄ#ïý‹xÎ[Î,s- êÓ½Î]^„‡Üý¿àÞ~aÓZÖÍÔ663LiL¸ú_,µh5ÅYdKõE¸÷ÅQs|Ã4*Æ¡TpSºá Lh?1MÐï4„Âùš øÄý5O'“­±›f¢Ü'‚ž´çOʼb£mÛ6ÓÞ¹ÎÑ3ºéýŽG/S‡D÷{^Ô Û ÄF±´X™)R4ÁqÆôæ«Ö tö«&3K2&ILŒŸ]<£QLÆÞ&ØžµS„ÈÞïÎe–0’[C "µE¿íAej–ÒÆÑÔüj>ªÏ ²h ± ^3ÆXvÑ[»ã)ÏÛTÏÁGpÉÖmñÅ·{>çÖ_ƒÝñ$Þqãëð²+~æ,ÂÁ¯g|ñ›p|q. ŠÚ±ŒãQZ&I-Q#k%œð*è`9ƒ—þ{¡wì^Bj½i‘~³bLƒTõ=žòD”%3êˆ8‚c…`w} ßwßàÞô]“1€û]üexðÝ~G‡s±ÒÝŠüu…±¡| ó„çyj ­„C„cõë¸lHË웹"œÓ"Ê쳯Z6·]EÛ–a»gòx/æÏd?'àÞ½*.ñÓ^_Ò.’9ÈÛ¦þÃĜԅ<>ÓØ y;%æû§ù™þáÉ´ß–³ìwéîs¿ ]»ù§moîl6¦Nåå߸µÑIë¼< \FùT' i#´‘}:OûŽÃ§øgƒŽv¢‘EÌÔrß¼fYM£íáDŠƒÐšô¨)4OC¸Â$:´h…Jiš€9e×­]M €6s ÕV{j¼ € 4¡pÞòRüËK¾÷¾è‹pb}=žúßz¢8³«2ÿs ±=žÂZw#–]ÃÎlGQ¢¥©X7-@ åŒÑé‰Ñ€AœÅÚÞæLó:É ºÌšnŒ©­ËªÚÍM@cÉñJìK?¶<8çè¸iu#¾óSž‚þÓâ£}}Ám„¯ºãcptqÖã6VXC˺í3h¹¤Z2ÂRê¡ì@(@5³JÑR9x l¸â2ÖÄCì.N¿½=_±5O9ýç “9b†.T¸Õ©ùm/½ÆB‡oˆ•éîeï\[Õ=ÇöbôýãÙQ²÷5«Üœ—ñILÇ}EîdŽM®µ`–yìf¶›%1a‚À¯|øûÝô¼ÿ3q—ËšÉG<ÔÕÓ4»]´O9‘0%€@Bªa¾ªd ž2ÃÆn†fòs%r¿ 2´¾°¨Æ¥Á¢™‹ €²¢kYƒŠâÚÝ÷a!Gqtq~ìÓ G—Çñ´7? ×ì¼ïf#g|Ñëqd8Ž‚ÛëSX—š¢@,½oÅ–ca‡%ÌlŒ6¶59m˜€úJ'¥ÍÔqõùAT3Êêõkc@ZªéÄæÃÌ…B‡US©>›€,/Æ |Ý]¿ýî§ÞlãÌ×B¶ð »þ¾ðÖÂN9Y™¿î¶ðÎucçt L³÷Â5¦â} ǯi­0j4Ä®½>AU:1°iÃa«—tW6!å¨ e†Ã3¥ñ!üyâà,Q‰3©k ÿE0÷žÛ~_Èß YŠöÎØeö»d†žF1€ €³mþ™»˜qÓÁ#Ñ~N M‚ÀßBõ3ªFûÍì¯^ýý7s‡âzî{¦‘ºës)Wˆ²”Õ/E°˜â;#z·Qa Ãu©yü-£nÚ*s4Ì,2@†v–ª@M1 çâäú¬°‹ ·n‹­ÅQ\yê½X/ÎDð=÷¾ï>ñfüö?‡ì~ÈÌÙ¸žùEoÄÖâ8;»'±Æn;!Rûá%FâSopŠ„Þv~y>;{‡°½(´´o0Õg€‚̵…ðJ1ÁΨ¦í¶-ëðC4Ñ Û´ÕøFÕÒU+³3leó·.Áý.ù·XÈ/¿âgoVz øÚ;?!˜ÙÁª%¬ #ÓkÞ±Åý˜›ð33áPǬ‹‚¸K5ö¨ƒŸ†ašÉ‡®Òãþ6—&`d†¡ÑÜ $ã9M€æ¿Cìµ$ÚݬH{ŒêÔ&µfoÌþ‹Ø,–°á^ ]gØàiòðeªùt„À¡Þ3HVĤ»ÀžævsT‰j÷½ÍÝÿÚµ?p¿ù®ËÞ#6}·çƒwú1XõˆÄTÔöð€eø×Î7ÉÙêMÛ‡¡Ž³9è‹ówG_œ‘N®¯‡¢àÖÇî ‘nZ] ](îvÞ§á{?í…8±þ®ÝýKÜñœOÂ}Ý¿?Ô¸üâç¿ËÅ1”²‚ŠbkqP`g}²¦œ(#FŒ‘h¬ €Å˜«Ž4FZÍ*~¸B$Ì uMWãY#¿É>ÁpËÔ“ê×ÁµŽ ‘(Ç®RlcÔia üí?èg@8LE,ƒTÝc~Ÿ‹þνç…xÓGþï>ñ¸vçg&o{ì¸ôØñù·þzÜïâ¯ÀÎx»í¼ søj)ÍöoBטwlàjì½mSW“â@«gýdöps(oÊÔøµóö%§mr´:hTÒ$èd¼ÙkÆ|Çf‰4ÙS­‘¬Ìé"öÞó<ÂÌEþ„B¿óWúºöãˇ1ûl*â;Î{®Æ„ŽžئßòÆ”´4”}ï WLå L[yQýnZ6'S ÿ1ÝáׯûèÛLÏÆõ˜»_Þºߘ³0sçÔlÌ#Þ¨÷>"uÃŒ1·bÊ€AL¥n#(BõKÜC”iß#·f]ÈV}F벃A¶ptë<üàß~îÆ>ÿâç¿[ñVö»å¤û-#vÖ»(ØõÔŠ‚"v xœ2VX!Aö “ž,+ò´{“Ír‰l@aAÃu[—êèÎÐ Õ™U]èCÛQçâ ê9 –QÖïÊK9‚ëkqíî‡ð®߈ÿwåËqãêšCÑÙ9‹ pÉÑ;â¢#·ÅçÞúkñi~‰§/:b·´³©K;Œ¨ýÏcû›ÓÝ|/µ×µofòQc€0 Œ_sÚ;È! Âw§Aó9®x/Æ/rçtæ?5sM™þ\ðo¿íÓü·@ûÍDœâïC¨?|Œ~ÚÑŒ3bÿ$øâ5Ö*XÓaBÍMI÷g¿ i/9Úouçt íu]œÚ[Ãï€Ù1#*±|—0â4. + 1¤øl/>KŒÿ¡·ylI›°ù¥e¢ùŽÛ?½1fZÁ ÏÒÙ¹ûåÞg ÞÙj@ÆØ³ß@†˜s³-‹ï¤£±‹çàŒ> ÚigCÛœSåÄà„½`ÿÅ ‚¥`rKÙ¹G. vÖ²ŽYd¨yèeE äjI5¼³@Q7nkóB8cI}7ÛjÛ5ZĘ ×µ@˜œ@?Ô²-[´™g¹EP‘´Ø|BTªZψ0¢|^†äëšyÈ„/P3².†®Ý~ÞvÃßãÝ7½ Ùý®Ù~_cè \zôNXG°%>å‚ÏÃçÝúëpá‘ÛVJËÕSMk6>5­GÍê¹NÌß…€¯ó8”Zêq¥Ä¸#lÝ*H‡¶ÛÎ]?©Ì#dº¬Ip°. 1¶àðK¤pñ Z?÷à¡·}šsl—íôÝK ½£!~Rå0Í#h~²ï–^çʦë4¬1§+6;÷²Cíe{Ò=ÊÒþ–æ( Ú¨eD’­ Š_÷¤ÃL»¾íÖÿ3Ô3Š `ÇÁÆdpÄPD€ïºÃÓÝùl&„ËßÿØC·éYïún<úîÏŸK?ûä43æbç#«†}¿uÌP0›}ê¢%6“BRý”YÔXúƒ”È^ÊÝXëèç§CEó#jjàÊë¦-•Ee’£b»eÇó¡™KÆF”ƨ‹Œ@K0V™ÏØü¡f;÷%sħGwœ‡ 0+[ÕÒÞQ'£$DÙ£½b&7KBÃ7§²x&üØG²Ð¡Iz(ðâ~èÀcð­—<Õµ E7ge*ÕåÇÌ:Ž´Æ¼3Ç_ëøî;>3¡ùç¿ï18Èõìw= ºûó¡¦õdÖ mƒ¤:Vs«|üë;ÅŸµwKc4Ò7‡º ê6}³9!#:˜ÛªÔt×–የ ¡Ö[s«qE;Fd€Ö°Íƈ\ƒ´ÝVͦoi ùW{´úy¤x † PÑšÆÁÏèX^ôÎ8ÈW—ƒ»5Û‡š@©¬ÍPcO课JÌ‘'6`qÑŒJ°0ã¹ÛÛYeÕmØ‘¦ÅY¶(å=‡ùañÞÖö¤B§†Ëùc™OÙ„¡¡=ˆ%{kÂÙ@ëÅ÷·2’s´‹óL†3íÒiÄcÄàû϶¥¬ÅM–ò ýÓ½›ºõ-8‰Z0>âs®A'˜¹$pÐ=#ø¼é·®NSb7–ß®ý5€MZ=ãkã ’'Í·Fb8¨£÷ÊÓÄýÆû3ÿo¹øç’É7oΪeFŒ‡©–BÌ]&eÚ@sÔejht+àawz–÷ü÷î- .{×Ãð¨»?¢*j‰qFšõcp†WµI 7•†˜™PÛåY-í¶‚É:8"Ö±†ŽšVQçxäQCÅÐrÁ·YTªMëšœ, '°db(S((¾ˆ«I'z -†±(б¨'š÷JnCuÙ˜Ñ"„Ò¢¶Y^ôV¦Å‰’8NcÝ Ëg´¨ äÁ5œ ÓÆmêUû*“–À:̤…psKª¦cáÖÓ^ étÝx%ÌÞÞÆ¿½?ºŸ£¥vhš€!e i¦Ä¢:ÌdÁ@ô>ý9ÌwN(¼!«ã¶œ6¦¯Ï÷™`c BЕ‚ß5kÿ­3óð#$„‘沑™§¶Î|ž±¤lâ·7Ø^¾·0WáŒtäïý³Šùùè+K§ä ÷Æ$=íú=…ç¸;5LˆÿEJjgœž§M7LDk[:-a9²¯’àp·ÝùYž÷ÞGo3íªG"´¡¢_bâžyÔ´Û­#O‘¯šÌ½7T¼ öž¸H¨H/´“¦SÕó‡ÅÈÅ»×…6¨B ñ2B0&Zì3ÍPl§-jܵl®ô!=y"Ø|“Dˆ["]Û˜øl1í5€6•9v7ëZ’Úì» ÅÃïü,è_›Æ…¶‡"ÖPÕPF:éMŒù[–¹<ç‚Í„µ¡§ÄK4ÏѦ^(08c Þc+Ð^©Ô×…z, †]ºµ¹ˆ9 Õ_ ðX„&Ä1f0š_'!ÕŽè•ILQÇ“ìiæ,O‚#Ñy-Ärb±°î¢a4꟰ýÎ|#sXb–mtºþ)JÝ= j j¾ÿÐN*óW¸+ ÿÍwh÷Ì4{Z3ãÿ÷µ›Æ2ý®þW-©ÖF«˜YcIx› ÌÙ´jbòa.œFò$:Sšƒé!囯éë>ÏœÁµ2¸ ÷;óîŒô©m<7WjBÀP›zÔÍaŸæ?3ƒíŸsCàÏÕ‘Í—–gæ© À~{”éÇÛm ÁÉÒÁ´!²08‰¿kNk2øâd^±Åf6fS³œ Ö*9 -¯P˜…*S/f2yÎA)D$Å"vþŠ…²ú”$È‚¥3sDlZj¦SŒÌ‰H» íW+Býü¹†,’ÙÌR‡®BGˆ$Æœ ÓÚ$Ðac®¼¬$M"‘ÄŒ»BÇvôÆ›%ö’ðËž·ÇZÙwM/¸„C!©÷Þáôë1Ÿ°ÕèÃ~ãuåë„ö ±³&s§Òïñ‘@ÆD»×®*â ÔíÊ=º_S“ zHå¡>LÁÓßö=ìuÐnø´´ýMJízÉõusØC.|²wÔ—Ã6ÌÐõ;›' óõ9÷b̈mê~/¨R€ËQÔT\sôù8´/ð´BÓ4¢/J× „$¦4—Mæ {Þàhªp;°£•‡`¸˜‰rÔ¡Þ¨¯vv»ˆÔÜD¦I©¥ð¢ J©-  çÚ©›×R¿Laé}y˜`ˆÞÌ’(Ê€¢×¿}ý[yèR èsh;ùŠ„5ÂdåLL‡ƒÃI¯|§Ù³4=_‚ œéç–™à ‘gy{ì)s®7goÛÝÚŠóqòTæðåZ‚nXH‚ÙôŠÄD‘ÅÚ¦4@Ý„7¿ÈbìÃÒf ˆ¶Ì×M(2ýÑp‘IÚ"?´W{‚ fÚKèP|uŸúøÝåÔŒ½îíWá^ Öͯ Á+Qà›Îýi¼ìÄìYÝ‹¯]¹ð)5 0-žØ°AKœ ÀsöùŒÜBXØXÆa4!]À‹>ðøÓÃîô,dª ácXìÜË*f äP·$øàHR•ëvÀ½‹L “QX{"!—ºÓêâ5VHûð(qÕ œ €±EAúk»eý@‡@ì® Á0Ì„œÜ&õܔպÙ±Ò4^ à ò³gõñ½ÓOÐôóœ 3#É69c™éãAçý ^zÓ¨y/¾>ç úÿ\P¾Ùý}’6ZÊ£ÑiÃXY•Q‚}èà Ÿ¯ï¾Ó3‘"kˆQ£Eþð&}NêLûGI›€1&‰ß!à³—£7vRz0Ù:?”E¨ýcf&îSuôS3n ר1 Y+,½®§N%Æ i;f#£fl(4% 5™Pœ ÿ3ã<¶±”˜ãh`®kôЛ“´¦åÖ)S*ŒZ}LÌü’ì©}.ÂRHhÆòa¬¢÷¸¿f³gžÍ wÂØ"`Õ45fšJZ–KÛ 9·%»rß‚ X9 !ÎÃfí¢ß6i$Ôl>Òs­~n×rØö¹3vÆy?aæs×~¼x/Þzв’ÐÝØXw_ixÓfÔIáò764Ùï¡xÐy?—Þ´·&0wýúGž8¹÷-—ÔÃ7<Åjhµ´Íà—¯ü¾C×?w}ןeÖKÂd !z€š woò1V·£šÖbçO£“›5 i1Ý&}#Õ/ñ[wÜg‘ öšAhÑâ`$b§K™ÀjÚ€1æ:5tBU"ÎÎ.LL,펊R.ü µÐ]¢ƒpý)  e¢r #háØ&ÏÜÌÕ3pªÓ{3¯ççtú¨Î½+±øÞFæ|P@>Ã[y\;Nu[—˜¶u£ôìdur?IsàŽL~S·Èø¦s"8°6°é:È¿zÕ÷ŸQs×wÞá|;L²•& @)^Ú†„QHL9-XžTSÑÉ–-´ =´Ïíë$Øé«ìôµJÚ‹b»s <åsåÐíNp`f í6(G¸'è=C6ç¹Ú†‰ìmJ‡Ö£!ƒÓ!Cêò´sXò´N¸‹×Ðnó®&–’’ñìMkƒmô AS ™ï§Í¿£ o ³®©Ï­¸éBa:A˜b3ïïP³ÿQjwâò¤±t7Ñ«ËÃÝÏïHQc ª:3ˆ9…‹ <¢Áþé•oDýýL“ïiâpÚ×l„dgI8¨ZÚï“Ï’¶›Ðÿ¦{{5lÓsÚ•I¶à„Áâ<ø‚'ÃÂ*ÍÆþ’ëožÄâ`™°ç‹·1‹ÃDhCOûP£:ûm¾ÔïíÑ#$8$!s– »=ˆq{ˆ…ëwÒÙˉ?Öâ"¤ì»'%›9‛`–¹,Zx¨¦ʇÚn‚´ônæ>âfö2œ™z˜]òªìŒG{¥Õ-TÍêd’fáÖÚêk*nÁvƒÏÉLKöí.k#=Ó$êg'· ÞÏa/í’™3æL¿y>ÏÓ猱}Ïl~£ÎñÃÃ3ǔȓÙq:|{  î:øy:?¤Fós&£ƒh,hÓ"kª¸6¦ÏpJIC>ä§´Ž l(§!CLüÿñÒŸ§Ž*²Å'¶Ul˜œÎÁ‰N¢ju†ï,œ¢ …µìÌè]m¶ß ¤Ü¡ü@è“F¯J¨1Ôã(/ŸÚ@¢@*Ï#­š-¢§~ã—²&Ð+ Æl0ýWK]ía²T³û@$*°øvÒÒœ™³¿ÂêJ‚K©ùÁbì,­6e®›w9ÊwsÌy¿+2á„ k„ÖP|.F•ÑܸêÑ=ш›íŽôí'öÙ½ç`%8jz·÷“y›­ˆ„µq÷{æV®.Æ6~›d¼æxà&Æ:÷x~ÓÕÊñJ~y¶{wX7•³©{H@f\M–rݕчRxg®9Nü™PcC2¡S}lÆqÂBYÝâPivW¨×S¨1þ8u°j0gdý-Â5“ƒÍf‚žhÌ\ð*´ï×ÜÛ´6Ñ¢U®¶a_Àö’D{R,{†o ñùÕö–""Q”v8h´Ñía,]zFBsG¤òkJ‘‰ óó˜³è}Ž£7¦Ü- '¡¡GŒª;æo¿ñóN"5e΂Kó¯­ÍiÚ7߯@ãc~œ¼FiÜ•æÎËÐÖÉ4øq.c àÑXX»ì°òÑž ¡Ýè: Ÿ”îó9í_öAøs+g~#Ø6£ÔÅÁg(±ø5GÓua´ø*˜‹ó† ê§Å! ` d;ßY'p =ܼdÏŠæÈ‹Ø„Å»Pj®dUs7< B«ÚAÑt4–M@žJ÷LÌÄÂ%Ã4a* SëC^ÀžAu&až¤…g71Ò8AŽ®´MhÍDǰéÈçvœÇï6‘RƒMmáx{9â„*£¿VeÚ²Ùûdb0I˜0lµñd†›Œ‚©94¡“æä1ë)»Ñ¦d†×ƒ:Kžù©P¶v*(|7~wÇ:ù ªÀ’X/ÎÏI QŸÜ¸f÷Ò8ˆÏûÜU›[¢~<¡‘“6:ðÃCshA1øC>ßßÛëýÖ¾å 8¨™ç4/Î=ÛŽ¾~G¦ fnL1¬¨•6ÄQ·¿clZImߨ8‚ »¶:¯¥eÍ “Ãêx‘HgÓË6ü pT^@Bãà9tšÕÂJ}¡QÙ¾>•ìÿP7£(u<, ô2º¶MlvÓx|1L±‹&T=ÏR'k¦H˜‡‰lí>6ï‰7 RG×JvõgdÇܘŠ^£NPÒ.JFcü+u¼¨‡²òHº)+UÉíEžŸ„˜³  ‹`F} #pÀ5Oï…ß«kCŽéL_ÎSÅÅÑ‘o#T‹àùÊkˆ@OJÕ&ãI¤R×¶ O<]¦¿ßµ‰ÿîÇ—÷ú½Ýw@Ù«€¤ƒ}óŸkôepz^³;FŽ(BON|Adœ ´Ö3­È'œOëò´Íâ44ã×T#:¯¢³Ýú;Îi¶xgd4x±c—¡¤ '‡_”)£Pvþ3«Ufäo蔬P[ ‘ õÃ{œÖ 3 ›54^¿•TfÞÌí aASzPª{ö:OÔͯJÿ¬ý°Ÿ-[öh=ëÀNƒÝXÁa%Û¤G;‡îeÃß™w#ÒCˆvʼn›ƒRJß8£Œ=úAÞ]¥ÜàÒíX®ŸÃtÖƒdb Õ`Ç@ö‡´WÁÕüÞÿ­dá㌒P~fÐV,¥8ðôœ-Ê3>N¦[ kÊcä£m!§ý&íeMãßê‘(ÍYW/ikJóêBÁzØLx®x–X>!øk1áÜ7CR›fŸî÷§'‰Uíh²dí-óÎð%ds“L²SO×ku™ }Ÿщõª_ã†\”´2ÓºrŸ¸I q»œ3lÚ‹$‚}ì‰#’žÛoŒËIþ—þ>›L cè{ÝÓÍÏLXÏ&þ¹IˆÌàŽò†nnδŸÚ1Çœ÷kÔÜý½J?S}¼X<"¨Þñ¥€2!Ï™9·‘ƒ®_›I!ñ‰ë×'®¿‹£ŒâðšÐ쬩Àì•YŒ»¨öæyÓª÷¿·×µ؆EMô;ìͼ÷êÌžõ=9WÇÜý=êì%zÜ£»û)´MO§ñŸ¸>q}âú¸ºœß?h­¥ñg,Ï”NykÆTnç¾›­s¿ë0,¨ç‘û½;ÃW‡ôò™H¦ƒ4`Óï”tº©³>)šã•YUW³ë‘ó´—Ò‡•®Ÿ¸>q}âú¸»&›¿ìƒNKÚ—)èü÷‰p˜û¾_ysü®ç{{ ûí£{Cúa/›ýÁFvÚ½´Š9”¿Gã»=2›¦×P&!–\¶ÂS È'$À'®O\ÿ_½b?KgÓo>%y`ް_ðÊA¶ìñþœ9|Ó³‡¨c9ëm>lÄÏAdÓIü¶— ÚØÑYA­îü%¿~û‰ãã§Î·o¾àÉ$T„›çÎOÏÑÏß“JhÑ)äÌMã/Éñç{ØmN¿¨îñE® Ñ\“‰—4"¹Y©}Ó6›s8š—‚UÃÁ­T²èä9ؘ¥ÁÚyèž·‰ ¤»Õ;©¬áfÇlDÉHšKkâ„ü8Ž,§H¯÷kÉë.hz'G¤x”¹æ¤È.â^þk”€ÎÉnÎ|íîå4!l'ŸÕÌÙ(Ní:~£ÛÉ‘ëm ç>4[ æÜå zFTS[¢xrG·ÉÐýa‡±æÇÄ÷ó‡î÷þaøìA„ÉÊ;Ø>€VBfí- 7Ü—½=ó›“p/¸hÒS:_{ÆÞV õ¯Ÿ—ˬÞÃôúì†95‚/TbþµÚ•¸¬F†Šçæ×ˆOMª¨eã´6YJƒ´y­ã4yƒ41¾®_Ö—‚ˆ`òMhÀ4\/åB œô¾ûV<ª†C8™ÁÀÃrS$ÒÜ®\ë“ Mcà%6êe§>µ±C~°‘íB¹BåþøXeoaD²U#xlb⩉>€mó•ÁÍÖ¨o²‹%AV™eª<Â)‡M€1.š>FBÚPGÅ×}êk Ú;ëÄË bÚè–;í›È±ÿô ¿ËB˜¢æ4è ‘F{íîš³`ÌývPsÌ^×!yá,À蟟yoºø |§eA9H4цÁ“¹rö~%xa"f4"'‚1~Ù°Ã}Žõ`~žCÄ~{¾UàˆÞ‰Îd+´ÕÄ ˆž$DØúì-òÝ•Yp|æÈ6GHõûb`óBÏIâ¬|b?’Oð^PbÀg\§Â%=vz¼ÞeÙ2¹wXà}&•»Ü³’^bl²yé5×Ù³ÝyåÅA©'÷ÝÅ»Æ`IcÐP[<¤— à-†ÐFâLƒÐr›©wÔ"Ü/›{çêKâ'¾i~͹fšFåAêŽQ’aÞ¸h—†Y-Ù;òé¯VfœÝ %üñâŽ:ÜæÝêuÄ‘y€ÑmçЋ¥^’Ý{ÊÏõ“2ŸbÖ1¼BMê´œ(Òi Í=Ciâ´¼Û=¡f;›.q úñ äæÜÚ(LbŠþ_sĺuއV§c—âì5r 8 °2m}²`O ‡~”U±€Ð`®}î‰tÉ,šý~~ÔkV…ìqo¯ú’vÜ}ÞÔ¶š¢–û¾0Ó‘Ó¾6uä°åêü-9À«¶ý?™tˆèò‰ê Û/á@¢SG‰ÌÀZ¶Acˆ„ךí4RïRrg©F¸qÔb½ý«Ÿ8C=bÊ6Bà‰$M¥¾‹ó˜EZþ É~ˆò(,|ü_[wdöÉ9Ö"ù#õ¢z»œw# ä#!ZSâ˜L Óâ\3@õÆl$t*K®ÌÆža*DH0ey{<‡)¥¯pfÆA<_ÆÓ¬Ñ}¯ÎÔ b¢½ Ê Î{K_ϽҚRškFÔok[JòÈÄ*©Åò:ÉX†¬—oíLeSΰI»1í‡ÊçxÚ~|î°ôõL{|ßÔÀýoî·n@e®¼ý:¼ßoðn**)ÎAaΤuf1!eÆìHlçP4+‘Ñ®¶ì0•ØßC_¸%2iˆ*tVÒ#ù/µÕÛÑêh@ŽÂýÁ3_+ I¦Ñ£qj ÙOë[§Ôö¿G†ÎW 9MÂB ‘ó<ªú³–†‘½6)Þ>ø3=#$ê퉑P·oL1c:.ñ»ÛÆP;.ÇŠ|þZšOL‘nÏÇý{q²w_J¡6ÑzݾX$¯…n‘E“xüsÔŽhÐD È ¾LÌù<”Öj jëÛ›gÊÁÙL*|Ó÷šé3›#ÊØOÐð»T†îÙáMNàMôß?ݲ£r¤=öÛŒÔVö|n°WkêW,¾5x´ýÀDk–€£½YD::êoÂkÑ™µÞ­É©gŒû]§VS:1‹x€›rò±f(´‰ÍOObà:“@4:žó¥K Š©‰ª1wQñÃÜ“¥ÅëëѬ÷_»ïµPÿ“¦™R„À€ÓƒÙåû¹&;T ‹h¨1 ¹é‚è,¸! Û¾îŽhB!lÒlË÷9œ£èÔ‰4±1éhÍè2=jë."Ë\HD—е+:™7U÷ùþ§sŸèo?>sWâûs¼p“öp¶pá³ÈkC÷fúºœÌh÷ùf°C©DÝl,cÓs“>Aw‡¸Ã¸/DŸEÐÌ'±ððÅÁa¦|ÂJ˜¹3³0A$ÄP™¹¥iŽ–áöw Ê«½i&ŠfëŽCÂy |.ÆÒîcbjÞÕ¨± Îf†c‰Ñ%»º™¢íl÷öwsd!÷&Â},5GQ9óÚ?«þ+Ym_ïèfßQbºn§6:‰pÖ8±,˜Xì7ÈÌ4&Uc.'4ÎÁ¡9ðÒ>¥X~š«|h{2öä¹±rúvµìÃ( IMße†þU‡)ôŒIÐZÆäÝѽPµÎÜßaÌvçFéÝQulŠ/·œí±ÙgœËõ×I ©ß1Ä Ó~Ä.ÒB£7B̶ta¬Ì8Ä:°9;²v-$ïȰÐOó¤¥ß +ÐWwF,Ɇ!ŒfôçÄÜ5æ™N¯%uõ£ð©qĈ»ÊÚÛÑjFÌÑ_é~ófÏl] Y<Õ=Óï<2Ø#¦œ»úÂ=@ÜJuÌt”ƒ0ø§±Ð%™§FZ³O÷mÛpÄ,=woƼ6yî ÌyŽîÅoÚ¯ Ïî½xóžkØÒp˜7tfŽÙ'5j¯¶ìÕ¶=ÅëìÍ–Äð4nÐeäJj-XgD¦v·Å`èÜLш‡'4Õ·¶[]¡1Ć+bk¢(‘û9œº­`ÞÜV» .¹}–J5óåñ/Žb¥ïwpüÐDh‘[.c(³Ù1¥ÄÉ^!”àù•@ÈÙùLp˜í¼–ï'²Ek"ÜÒ«c†GZ@jk&ÈŒbvÀ‹Î, bôB¥ôùx&õçœ$bë Wê·ds ƒðf/gþ¤Å©# ŽTa6±֕Ñ_HZ°ù&q§AÀiž„Úf@µiwCH ÇÁlm$sÏõ|mŽŸv嘠>ðÕ÷‹îíºCÝO2ê>Ïv¿íiª™+c®maü}­¥-V™o“6¦ãŸ;Ûe:¾0 ªãÍý7F¶a¨H›€üYBîÌ5$ÚÈ,÷Ñb晤…° Ÿ­ÑõæøŒª¾±PP2kØxðàvq“ýœ¦Q•|k€·ƒ“ôihJu#úd:C˜h’¨>áN‹Ð'ÔÛÚVhž ÐÆœh¾4qÙDa1/>Œ‚“°qI¬Ž /íìßÖ^ÚÇ·‘çŒäEŒ 3E‰LÇŠ¬¸Ï-ˆñ"³—é%¥ä<ÌaM‹ìŸ7õ ×^ˆ{îêyîQn7ypÖŽYæ/,§{f9wsÏNžåkõï{íeOãŽÎ †ý„VwŸøY œ”#‡ˆ¸1÷À¬¬^‡y#¸#›‘xÓWü,Œ‚xÛ ©Êi“´žçóáÕR{œ}< ªÙw늇ú¦²¼“˜[Bf=ƒå¹2¡IL‘ç@C ö²Z½í4íK ÿt×_ž3ãDˆn‚¯^~¡ÔÌŵ›˜Þô”Ø»Óc‰wrÌo7‡ £.›“¬Å† Ž÷ò8%3¢YfÆ…»Lãc |jv ºbÊÏd(!Ûï5Í]WÍï“€ÈÑX’ÛvX&ÎÌù tPÀ¼×u碩ìñÛ‡½öC؇,ç´$óê?št ¾(-žl7Ê ÈÒ­|A²×³ €›JR«s=JL²£yb„?—ÿ?˜›‚R.Ô:ÄÆŸ]]ñ{]cñô‚w‹B›*ï[ –€P)38 ”^«Šv&v™øH'’Ýœ/#†Vèùº!;Ý–Àr qú 3ãEqîç¶*(LU™¼ü;k1¢@(ûçõAlŒhC¢÷¬—ø>«Ô·»BXR´R¤«æ~ͬMdD¥‡&íûbXœv60׎˜lcÐù[³©Ëteæ{ÿÜAüi •½™{Ux:Wæ››[µ_½‡P•&¦Ã”7S®-hv´¦]­ì pTNBD‰U·ÁXÓHê‚è©™9ǛˎãÀÚÜ!ŽîV9§ 4š¨½Ý‚ÛÌÓ¤ü4\â¦"™Ó` Yfé†cÞ¨ÅèØ˜_Gõa´(Q³c¤¡M‘§o”êÌ6*… 54óa*'ÉAZs=³ ]§³ |qÅÞ?sÁÆDyÖ4è”(Ä™n*“—c<Å4ÈeOr™`ê4þšÎ°¡+ÙÈ}›Ð⠲РàkÉlËçîõؤôß7 “9ÞuX^Lä6ÑŠÚçy°©Â9Iv Öh_ÛÕãɧ!÷¸ 0ò¾ÒB¿•P1oNò0@LÇ -0)Œ_ÊžàÄo:nϪk)fs/$ÀtBÆt{TíLØÌHÜvb‘_I3cKÙ𣟨ðí£ä¶%ÔH†µRø÷Ì-ÛUóÞp8o6ò:Ih¥3´¹.K·OÃS3q®ÖýDõÍ'f­Y(‚5#6‡´qèÌúÔæ Æð©ß©ºN·;HÌ›}D½‰Š(Ì?•^à°í#ÓB㊻…´ç2Ÿã;ûñ!lx¾ý=9`ùûÓ½îÏ<6ËçÀôLûgÚk ÷ÓN³£±ÐÙ¶3¹öÔ44¯¼dšH´ªcíR2Ä!$05ƒÍ¿>JÕ»u‚ÀÛò&î”’šÈ÷.™6` ßM€Å¾ÛNÒ¤i Çvs‚;K­m˶‰ hÑü BméÂ@}Àf— 2åè(»O'rå ­E|¹z ÄÈ@LY0%‘¸ *낌´[7$tmz;äPwMkN9îe8–wÿQ>€'Ófj½]¦š×BÃ#÷¯ )Ÿ+ÞlA‚§Q»/Yà›ÆÀÚ…Ív€döêk ÑÞ(}¯ò6½{˜2ö»¶eÓ;smšáÏ˹›{6b¯BÏ&îª<”9j¯Á;“‹$ah3©ÿ_s×Ú#9n©Ùùÿ¿3@€ ÉænggºÍ|°HVQKÝ=Éù€ÛÛ¢ž.)‰’!\šÉáOÔ=Á#>š5Øi xP"øŽ×Ó|Õæ÷=¼,ÌA¡ÀŒfŠø´Ñø7[ Àò½\mÌd¤,>ô ¸œ/X9~;‘á™$—xR6ÞG,–Å™r¸H&Ó@0íPb{2U|dà$¦)Åšg*­lô{+ꈣÖ)±t“Ÿ¿©w,ͶŠR“§p(+mÚ‹!¢Íç˜ô<€%À5÷â–OÒc¼¼ÎïG°a[žÁÆ+²½’fAÉÍ-€^!lDŒ|W³ë ~üwÒ®ÊFVã·ý‰»hc`Ç&1óñªHy“v¢ Ìdoo}¾Ž¨Šç›‰³ ”ýƒÒY,lø‚Så“{ƒÎ[.vã’!Û*–ZºšI¡ ÈsŠ;ƒÚÀAš 2h†ß;,²¬;ÆóA:îbq} íá&Æ™-­ØI+‘$¡O²¢ä±'©ës>Î,&©«Uã‡äX{AÃ*‰¹ö-s—Â$@"ï"¦þM-ÔZTu¶Û¶±´@»Š3+JC.žÏ”A–ݓӹçïYâºö}ZÌøW5Úª¿k·£+ ¸¹ß€Wݵ.0-c[Jˆ äA3PáA*hd釱fgÉit|æÍ9iî$îRK‰ê< AEUSsC}@éaì KƒvüZ{(}pmûE™ÔX֞݌Ô(ÐVîF*>÷4ü”Ÿ%•WÖp®î8ľÊJe¦:²ìÓ¦{éó]U$+×¾puíøÖæ°ieôÂé/7ÒèùÈâIÇRú¤vM3„ÉýkÆ—¼3—C'ÇGðR¤½é×;߇U9¨”$Ü¥3‹åyª¸wKO] Ïp_Y.vLI²Jˆy‹`å’îy4I<%==þo§Ó,J_D€MÛey¶ÌÚýÀЬð¬]¹TE³BÌý“™4)™ÔN1|`\/ÇÍ9Ô/ ™­lJò®µ“ÌŠ7ì]Z¹U_‚*l]W`y•n¦¼ò©nÃ<¤}^:ï^Nb_áçäêƒë /“ç¹â«W ›âßL¿­,fVÍj“ËoìŠ^Ì‹y˜=c‘já;LW­¬ ÃÛ xŠÐ "n%¹! —~[yCKÀ\”­‡÷ø‰øý§ò©u„|}Myï+ Ÿ9`ŸÈy¼#v0l°2厢ĵæ±ÒFè+ÄXCÞyž'*ŒhÜW´É@^(¶mÊë2e´Ù¸ëÃ!Yè³×¤|LCðr]ž f# H(üß €![§õŒšÉB^`‚tí‚ú.c¾"³÷¼$ ËŸ•åêY®ã*†×ßë¡ ´}pn½>ÚŒV/íþ\o€]†¿`‚­×¿‹—G@_±Ýñ[8iXÒÒÂc°?4±òÃ@©pSóçX5C{j»º„¬™h¸*ÐM„Šû˜(¹9Oî¨ i€lÀ ÁB!\Ô6Ú&ÇÊc S¢* iݾV(/V_·jÅ<äk’ouŠ –•B÷ŠU4Îj°±eÀôˆa J [DZ £â86¡Ã0¨îw0végaýôs¬^å® )!^! XÅ̽·ŠcÚ‘UÉz(’wþwÈýºÑVŸêÑlÚIÐFÑç 8 K|²Ù*š‚ôYm––º¥DJOHx0ˆ œYÆîܘ\¨‡â€s ‹+wÀÒ«Ûe³:<ôBR"4öyi®w>¶úÂWñ¨J.š ÚÁ JX>¾`CíÉ]Ò¹r%l@(x*ψ¯ÈCÂ÷d1éûnc«ªz—ót¢# µ«µ;ùö˜t/©»‹®wt¦Éw-„«ú&,¢5F‰Á5÷Ǹä k 7ÖÚ´›d¨Ò…¿)†7¯ÍŽöÈ~cŒjÀ{Z< NÄÄáFÀ[UªÍJ\Ýsz !®Í7÷…+˜G3q>1Œ›«:¬âV‰ºQj;ŽœJÛÞ ãÈÈ£Ûè¦Õ†«¿Î@m84c³Ú9&È"Ã**ày~XÞR V–4e‚Òåo@ßÊgù)Äâ9Ú£"ˆÌ9 ’Úe÷¯² S&®íÉÜÁ¢ÎŒÊ8ÓÝúPæçõF¬~ßipÕCîr“Cn·“:¹}ѱ¼žy"oÅ÷—™þƒ€?R^MÁÅpN ‚`æCHR™êÁ+*’Tº]å’¡¾‰IÝ+lŒ–œàí¸Íqxš…3… *r‰T5g …º˜,r‚Œï•ØÂcìB“¼z‘ŸÃnï±'#t›³ çûÙlí<84ˈ¤Ñ"§ûØ=*çØÜêr”{¶ÏßJJËhø'Å¡$÷k§7£+ÜFÎþS?ì—é5µW3( ­¼é‘Dl”=â*ZÅ¢¤DÂýY®ß¯×ûÊK""‡Üå®79ä«ÿaúÏž Ì"´—:?˹Êó‰kÙM%j>ycXoÿê3ø>cÕLgë>n¾rS­`ºÈRÅ Úå`?»Áwü\‡UUåÐõÝ¢v?¨Qà¥U¦J*Þ\žÐöÚÀ‡7o…ûÍßût3c!…°ò] n,ð¥#€rÖT€Ö¢Œ¤ Ø8D©oEl(‚OÁ*,á…Ö¢½ þ÷‘F‡%šÐ^L²œÌRI£µ ¦®åO{ANäAšut]áézðlmàò¬uˮ꽂WÒí]Úô÷ß»/ñ8•Cîz“»|‰¢ßŸZ¬Ó›…_1‹¶p:Õm8ŸpÕAøÜs›6ƒ¯ª¹{â“ãÃVÿlv XÞfÆö°Ã¨•0ô›kÅØÙa åãØî%[ÄÐÁ%°H*a‰ˆÄ$7Ÿ<,êeWªŠ˜ˆŠV\™Å€|m'xHŸõ\:"ýŒfäŸoX.„«Š`(ìZ=¾O+¦'ó¿é§ÜʧzKz…9öB“®!)³,®:è¡Æ_Làí ~z7éÌô!‹›7[¡[,Üý¥3 ÜâÙa ÊE;ß)¹ºS¾Šõqk xCœÁñÛöMØÑ^~d¤âê¡c8ERyQ©¤ÝÂþÛäÚ ólPa¼‹(\?ÁÙ¥3HBQ®Úñ|³<åÞd °4’’Ï(æŽ"#rq2¨ ëJos'\3'ÄJä´pð¬±$jt]|w+ŸeÒõC¹Ÿ‚¢U€_Mþ`aJí5ݦr—/ý›|ÊqÜvs«éM†íbŠ\O6¯¶Û¬|ÿ§ <b_¶­9?Â4', qQ‡¶ € Ü8ó/ˆ*¼8ŸAÑ¨Óø…S±ô=HøÒÍK”¼VdiZQq ®Ì`;ÏlržÞC–›Øv’Á£·z‡Çƒ|i$w:9†F(0ü@Üú‘v\w÷¤j™» ,3~ŽÕH›Â’Aàµ{Å÷Õså.ºwuõ_yoÕm5¹þWpc¶tÉcþd¹É§þ’/ù5gþ£ÌUÆË•:ÖÕŒùÛ{t,õÌ‚•Û•#²_ˆ‘ÜÁ}•© §Ö@ìí‚+!„ááã^\ °&ŒíÅYñœTÌóT³µ³ Ðz9 HÕ|Ä~bÿ£p]OG„žÎÊLÀ cÙ®ˆNNïc³z»+ÏP ÇHèàà093ióQü €·H(C´nüÜãš™vú0¤F0B<ÁV+¹¥Òn”à]ǠдW‘‘®ëmçÒÎïøÏòxô>ü¯Èæ#dtãݳ«ßºÏx#˜ƒÿ]>å—|êŸr/_Ý —L™«¦Žì£§*Þäóì{²ƒ] ¨QTì¾@÷Néåþn<¯Ø_«—æÒng¾W5º3ò"<ßÙ©âï(ÊD@aE††„§£¿KÇn¦8KTftg•œo§Xö¹ã œßbÅ*0Aë–«•Á~‹€ÂÔ& tžÐ+=\nzÊY@Ñ#¬%ÛÓƒï›åèá¶›XG°×‹Û‡f@,|‡1¹ŒˆK=â9!T]"(‹ÏgïŒHg¯.Wyì”g˜BÆ@Úf#Ø]¿ä·üG>ŽŸr“¯‡3|úz´‘vd~w™¯ÞÕ©#Ç\@ößËÞh^xÒž6EHbð®ç5•Qª¾æÅÌv hÈÅeýL¥$/Ó/ðç;¨Úõ)«QÿÔwØÌ@’ªZ¢­j>„‚±çõ}œU¤Éóh÷ òÞ&dZXŸAå/h4®Ð²pâã·ñ#“b?`4ÔI¾®(`85™ÍÆþø_>ß‘1J÷È;+ŠjP÷©bZÉ둹Ñx*"EÈ[µÞEDîò)?õïò¯ãoò[ÿøþÆÜ½Vý»®¿J>³©‚V&ÝÈ®F¼h­á´'óßÒÕÆÒÉåÒs¡ïÔeç߈ÅI\H'Ü?9€™08ö\O˜ýOè½è³ÈÅÒó"æ^êµÃ° èÈކKÚø~¿¾ÓýòÊrü®M"=MSï¿Éù!ïò_?V×Uý ÉIEND®B`‚nixnote2-2.0.2/images/purple-theme/windowIcon4.png000066400000000000000000003333571315604104400220630ustar00rootroot00000000000000‰PNG  IHDR€€¤Çµ¿€IDATxÚìýy´mÉQÿbßû^½š¤Ò–„“Ú6Ø€±º{}¶iãeä†Ïm$cæI & Æ _c»—0BHI a&1h2Ͱ,h¦öÀÜ ! MhªR©Æ÷Þ½÷œñý‘¿È½÷9ûÜ÷JP)Õ»çì“;‡ÈȘ3R>ÿÖïÑäfqÝÊ ìø~½úÀí€@®óPVÃaÍïölÌt ¹ìƒÃy×à_ë{ssïa°¶ìÃÏ%øûï%>›P BZr¡w{{ö€êh#òÑ©~Ó´i1ÝPljƒ26í¡TS—lbÐ¥>«u€·ï"çÁ)^ó]ë½ôBƒZúÝêÈ9ð}_ßçs*¬eó0¼–}ÜÓ Êm•êRý-Îp¢÷ãr¹§z¥1¯SšÉHWѽŲ¤º­yçhŸjµv3ïÌ"(ÛÒÖÌ}éÙƒœ±N¤þ±¯éÇ’·ƒy¤i˜GZFTlƒÂJ%öõUw׆# M¶ÍÖª„ÉLT„>&‹ µcã©ÚB3ñ¨„^ ©ð’@ª£7àߌù֎ۆ⧹õP{-ô6†6—F½Û/mŽ­½B›F0$¿Â„!,-ä!e·µ²$œé˜²,ìÓÅæ¯AšÕ>ÎkNYkÚ·ÿÖš—úXÿ¦»[œêe\Õ{±ÑSÈ  2¾CǶÖ]Äðz8VÏ#±žÇ–¹£í¹óŽÙ+Ñì²iÎÕé7Èõ°GÎ1žåéOúâd8?ÀOû,D50j *nAëÀ‚pŠïhi¯Ôc{q¯Q˜ƒFQ Œbz™{&Ófæžú /*s½ú¼@0PT1S(cå×]YRe¢–wík4ÒXKcˆ¦­4ÍÀ'BÌ`å˜%–kM„+Üéù¡ûñö¯Ò:ÄÈ®Åo¸o?ÍíqÙñ[ÿ|_»+ìÀEGœá*Nô>lõÄŸ϶ۤ‹:N©X¹Ë6ßQ%Á‰i‹„ ÷ÜÅŒd>—µœ$‰îë!&š]ܬç$º}p˜q Ö¹)Q'4G-Ûª{‡ªIú™m8Œ ¤’24B„Z>‰× †lU…šíƵ§³í³]%h#i¢©²m³ÛHbïh›¯MÏÌRªÉ|dï›!‹Äæ©Ì¢ 2)'ÝnKà§ñÇ]Kphºîà QÍ®û>¼˜{¾ÖÔ{Hûç±ô¸ÎÚÈ.­~n.‡ÌÿËE?Ö¥ïÔGh´3}íé¯`‹ Nq¦W0b“~;^z©ÉÕÊ©²nRº§Ú.â3g;ß”µå<¦%~å¼xžwxŒeO{k6ëZ•³—†\)”’}mƒï¬’t~ñ¿pŽjl¡4B)Zªéǹ.±5é˜ ÂL»YÅÝÃÒ_{¶V´ýÏÌB&• QÓ.tJZŒ´>L€,jx/¬‡"êBFb ´¾ EC3òÐW%ÆÑLE¨ c‚êK{Œµ´Ot¡ ]ø{h™ëw%ÍÙùÛ.­ziÜsÄζ6»Æ»çíOèѾ÷P-:[œ`£'±Ô9ÞÕ@EʶQö-Æy¹Þ!ﯱ‹·ÿó–óŽaåø“ª¾Ä@{Ée-ŒR}#¨,K6c‹„yG›¤/F{GƒÈV"Z|³‰Ñódîñz7󒘤‹¡ÙêÛç@¡»oŽ[hØ_<ê¡1 êS%Âiï 1h|OfZãûÝ1 :ThF¦`”.ë·Šb¿§u1FåöMãÍf³2ðo­¾ô´53?¦Ïh·T»V¹ÒýZsÉ\çµç¯}oŸÆ¯Ýž\+üí3ùpתµÏª[œa«§™øÓX‚,6hšB'í;dµrÆlº @kÊ‘[S–ýzø*Öô³o.s¿Í}íés_áй¸U‡%æÖI2+ˆÉËAPšé%TSåfa¡‘Ó±‡)&zÑÏMÂ’êÍ'Õi1KSÉÖ§&•ç¹µ¯* 7 — ½›ÞÐks»Ù¥1@;Q.£Ëöl:™ÕßSŸ SROMH××2êíìÔ´¥ö×ö§³ŒÖŽ8b4Î&¤õéËy Ñ ¼›m‹ºFÙ·×æ4Û5‚ìŠz¬±­²d®‘ðÙÁüx[¥çZ ?£žaìýsD?×pc'1!éw~_æk 0}µ 4Wÿ<ȸOÚ¸–r½5ŒÛÅ1H[7 ¥t¬iM±ëè\›GåP1­mDjD\Œ¸æ~}\ð¯ŽÑ½ÁЄÔju8·ü¸qkXáÚŠÄD!-¿„ô€M6ÄûmLŽvÈG>#ì0?…¶ñ:´11cmc4_mýÌHÊJ®ƒ‡: ÕÏöó¨p “[ªºÿÎS%s4dT¾×4sˆÐxh½µšÔõ¢)Logæ]PPd‹R6(ØâçxN-H…¸²wéP„X£ ìk9!~Ÿ´½¦5}WÙ¥b÷ßUiwÔIᓾ‚؇-<¤à ~‚"„jŽŠ’ö{'‚W ä i‰Ã‹S§OÄíî›è—Þ7¢(]t‘Õd'­Ûë㯳ŽD¸ÉmíZP0“äÖvÛ}3¶( ”C?è„çR¡­í;h^ ³:|8Ätyo!QÈð´šhsx_ó~ÝWÖZ }÷ZË. åZûßg>ë%)(:b,[)Ó¾»÷w›€øyBî^Ê£¿KmGÅÜ5¡þæÚ‰©v\7Ê,½t̳áÈ%ûž TA[“F—fîBi|&ö3Yû‘Ìz¦a*_OÓçÚ27Ĺ>v ­2óÞ>F1G³võ¿ëù.ìYÕE™ên{„Èa ;;4„ßåXÞâ$çc_â1{¶k±ùó!ï÷sº“Ì„»_‹J™*ñ{HnD@ôD8µ+ý!¶ù.É t'ˆÄ`´4sQ[dOœJ@C;à»plßéçâÙB³¨°h$ŒÍÝJÑdÛV£3KÓ*”$åÆ8ŒS34ÿƒØPO´4àZÄÕ˜*[5Ó”¢µ7K›@-Nð;jG‚)êR"=̘zÔ˜o(‰{ ®òw~¯L«¬eÓú͆©¯ ùÙ¾sHkéÉ>Ô9ߢÅÃ~¢ÅK4‹…Èö,‚GöIäs߯W‘î¯g Vô*åyÇ=Ó×Dí]3‡…ï×tsLŠÛç­#ñðNzîÏHìmŸ­žY8ÄmÊõ;.ÞŸláÅXÒÄc¬Ù¶ã-§| ¼Í2#í¦9µ—­UŸö@ßDÒ0LsÔ6ù)̦3hWŸ^ƒ½­‰E#!´üd øh½à •ÇfÅÿB@y8Qõ*@s^‚¿·7øoÜfíff÷?uÄgWÕåZ÷ÖZI×îû®1õ&¦}óXA·d×»»~?oÉÏw›€zÉx­zÕ¿?7xn{[.rö¥1ìÓBˆYLPµÿùù­ýí²¤~„F"^ÎðíTjlf5BávëÜ®=ôD$UßRr44 ‚ÆÌùîÀq»ÖŸÃÞ£Tš¨GªÐóDP¿?Y«l…ÇÞ/¨ægÁt*|(16Òàï ;¢9$0h6‰WF[ÞñIŸ¡—4îOiØ4!û¿ôíø>;MmòŒ¸sö~“Â\F]{Ò&æ´þ5šó> |ŸT}hYÛÞœô<×Î.SÓÒÜv™£ÖŽkÕËuöûV4²XÖN|¡Ê"ó\zßæƒ!4÷±I—ævè»smÙøt© Iž‰ðqJ–ˆ¢Q!{Ç%9b®áç”Ëž×fFú"v>N"¶JcdBž(,-€ƒÁý‰:¦H!ÇïK׋UÒ¨mœæï Ø[W"œŒj“¶‘ê Ûû½žµ¦!;¤ž`¦uH„Ú¤µW”i¿Óò}nÌhšy¯OkQÛ3 RÎ3R‹Âné0‚Ù1‡ˆ¼LΔ×"¬¨³‹îÛw»öèš÷z&±$4îסc¾Þeϼ¯Û¯óDwªuk ïÌoLødOÝåPç—h‚8Lº˜‡9Dü§ÀZ?ðdo÷êŽd锉ÈôšÁ¨$VAùu@%¨\M¡^‚¤ɶ®LИX2Ñ8¨^[Ùwê¡‚ZCVŸàÀ³1VÒÀBq‘·ðIK¬ ½è!œ ¤1û¸ì†AÑZTžc0Æ >KÑã;ÀCõëJ8Þ•ûî(,GN÷¥°åoö\Êšrè~Ö=ïºG{ÁràúKõ‘ꈲ˴¥|l ýç…ßÒ=¯sïZ¨óJÓ‡^ÛkÕÌk- a¶í%x¹m¿«<±×²´­´1%ÝlåÒŽàÇÉ^ñ‹$aRgn&ð¾Ô‘¤Õ$º‰dÞÈ$ÜÁÔùrVÌ`œfíÎ'~«å¹32HþFÑ$Q¶L=ãQÕª£¹-;y-};>Fov²ÍD)½ÈD%ntiϲ6Sáh ÄV¤îˆè²éÛúawvkŒßCI…Lk1ŽÌQå}·v¯žg/ª©è ú- kÛ_;ÿ5CÝ«ö}jÚG¸T Y»0sí\OuiÇd—!µ²Þ¾~–Ú]ó;™9\!`ú–¨4&ÎÖ,ñ–FÊL¬@²åöxÚ˜³’81cè$r¥ÏÖ´É4•Í)pSEÐËjl#öyn7ƒ¢²‰Änn: ÆbD”¥éJÔ›vbcTª#x‘®:†ÝÆØÍµþ;´vyŽpâ'†‰pú˜lýrÄÖ #‘f!€Ù_ž¯òd(šéÎ~êÑøºRÛÖbã$Žÿ¹ ±(a™.ìjƒ$ïYe¶£QSˆ®ì‡åӹ̦ £7}»+èWÑåªË>€%¢¸OÝÒ ®å®‰R]G]«tß/Ú¡m/þ^7¬Ð†RuÁ䣛GìK—cÇ~Wû-Â5¥Û,Âûë_S¤‘&"ŸgÑ™ &v“Ì(l¸›çâi˜ƒêÌÍL“¤1Ïõ|$±‰Q%»7ùœ–$‡,±cÞXŠÈÚZPÎù£ …kš¦Õɧ™aóN –¨3ØrĬ9avZ'E¤ÈH8¢1>:óÃÒ2bpšÖÈ+ÌÔÙIOˆ˜§ÏèþJ÷^Z8¼çî;ïD ·\v]ëß_ž'ÀKȾr ¶²Ôôº“ÀOYÓŽ©±ºˆçßµ2“¥Åß1—ƒÇŸˆP{”¨všÀ”dd•lûzÎÝfº EzÊ&ž¨…” kê+4†Î4AÄ4^Ò0ˆ¸uâi Aus‹åìaí‚FÌÄS¢;xÜ=›9¬uJõàÒù®õó,£T— çP´| Á˜3«8ä%^';ßÀsèÔCh}-ëø¦„ÖxNt—ô1‡PtâlRr P†‡:);ˆïb½…"sïöôg--ʼo¹<®Q¿Vv¡½ã¥Òç5[RÙ–T<ä:‹ÕªÙrÌ527Þ¹ßö.1Û 3{}&ðလ:K½y…ƒðÚæø=´È´A SîuH²£7Ux´ZL:ÝtH´¤_J„3þ¤1XšM«i§‘¹z)P,àÈ’±')u‚È©-’QÔOòwи |N9öÉ´AÏ™ïEŽ%¸ *ˆ|0åHâ&D{Ùp>$lcLî¦ÓáëpSò?„6°ŽDuš~7ÛŠ¤mæ§µ»y¥½¶ooç'‚ fVÚ_ClÏÁ„RY3×¹öçêÂ:˜ïö¬éH÷¼·ÔÆ.º†»Îp "-Õ]è%8aÿ;ð¦óN|ºgAQ‰8ØÎNÛ |Ë(]­7Ð$)ØÚ˜ˆFâƒÍ ŤiI„$$EõÏž_ܾë3‰©8£ñn…xŸy0-aŽ£·I;Yúmµ„äRÇ/Á0ðÕ’Öb/O—>ÁÞ@`ód;¼¾€ kU¬àL51ŽîÉ’jæHäÀmZMð¾ìÜ Þ)iÕÃ"£Þ±ØnÊL”ðG£]a“QJÛ‘áŒk†›_ï’½\ÔâWÕïê…F¶¢­BôªñÒû}tÖ0©¸«½ë±0ûì`û~£ý½Ju\jc_]]¨¿K-Y`$瓹¾Y¨a&þ­MiGsýä¥Db™Å{‚•Æ©N¦ZÇ,©{Ö'ê}¼Ô´áð¸™ÐXEžRZ:n°× :I3îí/<è&31g³ÁÊÎK¡Ê±ý"ê„:1E!mÂ×JÚ_‚žk{MZ'?¹ëcÎk°³“ı¡!Hž°ørM–;Ã£Ç Ò è7éÅÚÆ|B àPUÆEé@Bó׿úiÌþ53âÅ2™ðÂ÷¾ÌiöLOfªïmw­ “j×íÝ’…ç»Æ±bÞKM§Iêäã´£kQ?Î[˜à/lŽ“î±á­·®h³¯OƒQéB4;q¨—´d '‰:öØœ€/J‡¿ÞÉœá|œ¡ß²úWc)SiA&£³4J“&›=x:Ü>–]á6%íPÀ†Õ ,Æ ³ÔÜÀ)‚ J¯ðȺȣ”º_–nW8ºémÏÜ¿›t\bWš‡|6 <™nHJŽØ8i¡DÕͬiœÙákã‹ùØw6õe·ãæf'„Ów°š?¾·§ô4aÍÞ«¨ùo"rÅžGD‹O_øý™q'ÖVÿM.apÒy—\Õßqß <×Ò\â03:íÖMq#m ßôs J¿A­#9_§§¾iÍ¡ŸoðdŸ ƒÆ]#©ƒ…ÝàÎf«JŒÍ1’l!‰$m NTÇÚÌØ/ÖìÍ5åš×Ò^8]Al×ô-üîÒ¥o;êï¿l\áp×Z!ÐçÏÒâÄÅMžtiSý%E{HΗ’Ûˆ(Ô¶èDkô’(V¢·E0ûm}iœhj< BÊ& w&6SˆÛ‰¡Nc¥o2 sOEœ$mfœyiÀ©'’2R (Å ¼¸|ð ¹qâkI"ãˆ*³gµl‚:Æ#ùãú;3ðßhÆ?;³as€ÁZ%ÍBÁcŠˆÜWƒ‘ksMä™J M‰‰5fЇ¡F¿YÍg³| N¦û[ÈÔ¸†è-ÕYz~-tK÷|Ÿ“âç´‚%iß~[Óסc¥r<àÜKý†>/àÖr®¹z»¸ë¡ªQÿ.µùš+ÿ✠=T*•sù¤›žuþ—{b¼‹ps½}Z®ømíøa~­ “öjÍÒ$öéYs¿¯Ð.“Ó\5¦÷†óPy¨:´¶èH8ZiIìCºË›‡«º°ÝÔÓ8¨öÕfσ œëûº>4ÆÈRú @j/œÓÉQÜþÎúó®gðÈ9ìî“`×°Ò3ßïÐ*Ö%ƒ[1±IXÔš ìò1¬éó¼¥ksSí5‡8U+ycyUB~Xðˆ½AX:!ò $>âáé#Œz$ÓVdZŸ/kzŸSL>åQ(¨è›û ÐÍ$? Éù]Cõ7ìpSʸƒWh ¯LÁQ•‰SÆPÏoŸ®U$&)Ý5“Ä’3³¤%õ9Qêå=J)Hõ0àÁ<¸ß5Åy¤ˆm ü\Ã`7˜µ°-ÏøêÑ64:f¨Æ–8VÒÚþOQýÂ35¸hF{EKû‘…“ÈÙd=P:j‚§Ÿ“h/‰c¸Ö€kiãZß=G›³$rŸó¹•ck¡B¸¯ç¤¢&¿ï —:¤ÿn'3Ÿ”)¹î©we;þJ7FñeÔ ³ "fíZ ÊÛn[‰Û&ãcéëT?uCõ(¬Ð)VärQE ™ôsN8¸?&:—FÜ3i:EÆbd#ü•óægvãµþòÂÉä:LÄs{¨¹Ýú8¥tpËçÀyóƒlÁ‹ÐV›|fÂJki7v¥ÃmtbÚCë)G·Ë¸Ð˜ˆã|ñ éI3ŠÏÓ´¶Ý5zéð)\³“ê|kÚY ÚÏ,ø„–Ô3Iʵñ¼ŽI6gH¤õ,–Ì¢¬¡!½Êõ@¨]Ù+ RºñÖðöå]ßw½3Ww­~ß;sÏöŒËUUÏw‘‰£! dž'Ö¡ F,7LÛtœA¦}¦, NÙHò¯*H4eR+GÉÄ2¦IÒt8ŸPgÛNžpf 7¹nŒÇoýûíQy‚>>ÒLâPšåÄÁä-ÏgDðˆù'N”—Ò`Àãm,Aœ ƒ€Ÿ« ´^C^C>`oûà#ñ›·lcM9t†.×rBFh$šÚгL~Ûa¯Dh%ÆÉ´¹ño!ÏgŠ~b—Ÿ;h"ŸQ,™Æ:t{ òd1üx!#q¾a‡<-º¿Ê¾w;>·»±}-ü¾¦éÅö–^êhåa& óدzn¹æ½yc~Öÿ. ïÍpèYØ,pòéé]Ìjª„Jl]MçƒC½‰‚Ç#Ó¢ŠDlæLFD m¼ S¯[oí`NéÀæ”|ÍŸÙ“SÊ#,ýéR1Ý¥ï3Ï/]VNKZÛž#km·ë9˪eÝŒfñ¼;™é+Æàç…Âðá=o®·ŸÑ<ú•÷t ÊíJ‚…òx%ìðy;-OS¢†æ³aIœÙrhl"«K&8âT´Ï}€Ý«`†3µÃe˜óëÌÀ”+e¡!à pú‘6a/˜ÒØûÓØëÊ*S°îxyM™£Sº\u¶Ï]ã8d,X`çÒhö êÐ†çˆø.»–îy~Þ1»„Ç„Âò24²î45¨ùÆ•¨ÐŸàíh81Ö_Šâ»Sih!‰ÛpL™¸OÚÄÖ¼y¬íÝÝD¼&¹ÝàY‰kùÜ¢ÁVbóú_':=ÑâeL ì(¨]È ïw:§iðï| "ã ù=,ÿ¸!ÆÄ—¢¬)™[gšâû"7¿ØÂ¸I +Y+²)Gó/Ùu<®™”΄ßM0ÁhÌ|bð9ºi(Kzî7¼é|–IzÐüÍ/` ¾ò1õù Äs,­:©ºV0ä²Ò®¾ê½µï/ ¼Kó™ww”y ` aÜ5Ék)û$øóŒm®ý•í\¼páš§ÔÛjcc…˜™¤O«4Ô¿á' “OÈìÆfFqA¢“$‚ûŒ‰še•Zà—Ë0sò¦™ø w *!òàÌA¨o«èŒ­Ÿ“718‰FÍN~„`’pš’F„@N›%tŸ”êÍ2.„>¥Ïä¯DÄ%™ÑHcrŸAõDM;JDÑ)ËÍš$}—”nŒ6PÓŒ(÷av‘Œ¨ºÊ´•¤P³Äö%Ã?á>%DÚ 0§NSš”óZv••uCPYÙv_o ¼²OÞ@ IIû$è¥NÏK¨ûY˜àõNÙðÉ7}#ïÀë[’†F b¢IÀïÈ”KÒé·¹ÍùiÚF·y#![%üv¦\¿~I,¤ñ:xa"ÁÑ7ô,åDZ9 ŸïòMc囤éä¦8ÌsÜm~{nš0©]@ »®‰È&¸5u¢ ß8*¬¿™Ö×¥n2ë$*j¸2ÅxŸ šñ,†næHÝ3ÐëÜÙt¤´9œ4Øœ1÷ÖîP²€ ´r*AA|*ó@Ú#¡„ÚA“£ §ÆÄ†¨ëvµ=e‰2÷˜_öšfJR×Hì×Ȉv½v´ºcó83ÑåÈn7çK„)È  )¡ï¯4ÂhSÉÉæ©Šqõé ÉœAjüöªfêRïË$s…ÊM’&0ë\œ¸;ÝÒÔ&+7]_g: ‡t˜ûÓ Ã &™ñ#ÑGÊÒêØ"Ó¶\£$ÊlÌ;1Í÷ßêù©=ðª3;õg8–Ìp<â$Œyvv5.SûÕ|9Àâ°“øïÓ-·fLKãÙÁHvMaÞ4S;娥:íÐJnúšË6²EÀEÞ¼•DIÞÓ,=3!nÿ6zÕ6:3SÛMÉæ‹å%!ž·Ø‰ÇÒýœ÷ªLÄ7Ôœ¾§&1K&jf‚IŒ©•!~Ðä&9'øhf4'6>v"­í4•D„ñß=@ %Dycô0Õ™.n}ñq2ÌäÌ3B-ç ç5‡¨Ó!}'‚ÒÚ†}Ž˜Î= uÔÀ7cÑ»o’ýÐælÌÒh3Ç÷·Ö•‡ ¸#ØüQjýÓ˜Ñæm.ê-Î?—%‹Ä.⎿-²GßÏ’6p¨ñ¢µ±Úh>3Ñ5Ür%p_ûg>'£š‹dJ©fd}slÎÐ ToWÅÙLL^ê߷Ѳ#S´— ‰¨ ¨7Û˜]Û&Ä96‚/ ¤ôÉ)߈âŒÃs†4Îc2ÉÀs âéZÕ¤-b$3=hÈ-^uò¸v£iÄÖSIsrˆ0|$Z ¡7k˜£Á…8¼->6m¹°«nÏ'pPûƒ/aým ù«& x‘8)Ö&nƒ'¦… Ç7W­ìNWÜ9æ°G@^lcM?»Æ»²ŸãÙ—ˆú¾NôÀç­\‰1Õë,§¼æ4ù,–$iųjYÝU' ½-:§g€ïêØ‹¡Q¤„ IZOMÒ{„µ®^‡ÃÚ˜›øQ\‚NA³”:ƒµ›¤M˜s/l&‰¸Ô)mÒ£¾èÌ'Ä‘?þÌ}ñb°öÄ*¾’¤Lë´`Í¡¡Øù “䮾±ŒötQ½}túNÌ =h€ÍÏMˆQ‡ÓØŒ‚ðPÛ„àI¿µž!nÌÜ”E'0€êÊ7°±ÊÖ‹Mš,Õ{\'1¯ÝXv³%š·–ÈîbkÚYÓÏœfpŽöŽ÷v´o2kË !>¯mM^oß—½&Ó$šO¾ùY¨30õU÷ýók˜àJˆ¸9FhWôx;w¸Éž±˜u¢Â¤®^ˆ`Á=mÒÔПd[Aœ_ñx9&»_úpìu¦+ŒÁhpbàg¬53#ø ³&b-NÖ i%’ЃOÿöÎdµ³ #LÌÃç™"¼f:1ÊofîÄÑGŒJæ"ƒw0˜ 1åõU*jÍlu’pÐòæIjA§r:þÐïÁÙú7d˜)²Ç`äÌÕÀÕÛÔzc¦P´Ø„9¥z+>G·ëˆõ!L¤«;1:°¿ìéïú…îzw‡ÿOºùY»8ól ‰(¼ôÚ‚§ÞúoðÊ D”E„Hr%Ó!aAÕj„Djí¶Ò5Åò3Á!ææf2Y{j!Å:›Þb‚Ðk.35=Ô)ˆ€ÌÔÙ‚ƒXº‰‹ð …³ûµ bâ–!`š@̳c&bRçü»‰ŽUÖ®XÓðuòõäƒN ûN:7?2±S¦j©‹îZJ¥›Ä¸ƒ=}u<ëˆ{^/¸Ö0±çûmxš‘ aúY ã§\H€$— ]S‡ÅÂpôƒ’š5¹CéÞ>É›ëÌõÓ÷Éß{ùfMß}Ý=uŽW¿t(@ú‰8Û_ß”Kú‡Øêæækœo(Ö­óæ|@‹ O¡:÷a™Éßæ¶q&Ä™ÀòÍ„ßNwRè¢mOÑäsšzöM(8‰]‚Ñ|á»%%ìÞÆX½e#ÔÉœî<µ†4Ÿ!óps. Òh"˜“™HOàX*·q“]”_éúEE˜5HÊ Iœž)ÈôÒGuÙÜ@ î™kØy’Ä‘: H;â§/ÆKúí7 /£O©Í‰~°¤uA‰-SöR%; Iw`ÁgB´…¾ÏìegÚŽÝ ®vpžY°ì/Kš…®¨Ã}.i‡Ži†[Ÿ2W‘¿Ï vßäg¸°_ú?èê¶½êWBÍ|¨Hˆlf;ÈS$(™#¢KRDå\ `"ªIÒ¯Íõ(Ay›/Ï1츒öJ:|–šH]Ÿ“ȉ%ÓùeÂ3eºymÎ*áÉæ%†‘1º¦¡s6WL„GfB¢ ŠÊ•ä¬jЛîp¥dj4º`Âm ƒë ê 6|;&ùÆ%êÞ¦vïÍ>S^ÂËd@‹3ÊÄ *ÿfLÆQ”Ùn0<>¥l¸™5žO¬›Ž/M7³G ÙÂ,¤æN9G´-K„z'*sïèŽgKíuõÌÔg9¯p| ´¾DøWu?×vwj–Ó „ÔÃ9Dà GÛc¶‰z„GÌ”Û ÙßÅ>ÎêÉ@ÑzÒpB‘áÛ3 b.¼Ï{+hÝ SR„öÑ=ýui” ‰möÐ(XSéé©iI’OQ%®e)Í+%GÎ4‰Zó¾ ˜I’ŒóaÛ{œ  dšR|ØâÅ×6õ‹p„Æ8@ãçõ×ÉQ%­ÆOÒyY“ö[Ó.,”¢Ù÷ åiÒ dLÔÍ,K”ŽfÈ‘âÐ`¡JìlB:Žú1·>U Ÿ(z È =¬"Ý£Ùs§ÒUÚ!HŸ{l½°ªîDÝ:`*3WñŸ,Ôa“Êc]È.øK‡]\‘®ß‰êœfÛПµ{NÒd"çV9#º,ú¯½~3Í»dJ›8IÅœl®ë6ɉÜgÒV–æLÆ’Þ!%í§Ô.¥ö´ª7oŠ!'b^/8˜Ñ ¬ÏÌàX“J‡—¬[ž©QxE´a0êÌDæM¡›•ƯX‹„s޳¬¡5V2Ìÿ3˜F‚¯è*K’WÀm¤IÍ€zß3LŸ$S/i+iì‚Kßô± Ìv´OÍØgÛš)É1¼«Ý~œLè(†@ä!ºV‰p’EIZŸdC—ùTf¥ÿN”÷D¦&"õ^:&±{9ª¥Âé2Έ¿M£µUëCH­nÌÍMƒf˜L½Y"d‰¼‹<2b6Ð *}±}VPlvÇ\X‘êM(Z ZP¤T­L Ú> -Œ*µ¾Jý ±~âYý«µûÏ‘LýQ'˜’ºöÁñôfK¯í¡³›«|ÚœÎþ[H´"Œ*=Ã'xÓϾæÎH"AF\ø¨|Ã'¦}BÙ0ä½ÖoTÜ•„N1E7ñzt-D‡»ñ°—êØ<£³|öen‡’)Îù³xŸ\×nã“%"¯©ÙEؤg½@µš à@®Ñ½·PŽ+ì“â¯ÕL3SŒ LœÁ«¹*‡Ú«!.Š„4æHàˆ¶là³ùïùÊ=3èl«=£±éym¤bÉýÂTöL›HêìÀmOI“4e —e¶]v-‡¹$æÈ›“£lºÉûf)°»fÍLVÍ5õƒM ’á8Gºns1¢ª‚bæ’¼ ß×?4¦ì´žÂ:åûgU›¤`¾‚—(®ø¤“¹$9gó‘™54ÙÍ1(Rj È4±\ò ±¦“û¯Úš1$¾Ì]x:lÁJ81MôÇ„•4M“ê54át¯±ãKù |mݳXåë¤6O¾4fáí%öU ˜É³$¨xC¦­¾LÒíŠ1ÉÊúûhõŽa ÜÈ!¶©µõ©Î'Ýô¬¡ F°HéWþ×í n¡¢Û_MšC_~à®y‰ŸË§?ú¹é›AÔ_^鄆„c›Ä%ešè¤gw*DR=îqá#íÜøÒ©¦Š±!b/&K0Mip ‹sã] –‘z»O·„*_,qßO•íÆ&™Óá8gåb7¡)P”ÌDF(HµO±ìÌ9Ò…íð˜PÈÆgM,á™­N°ì¾wHgÌÙ °Q»ª‡×.L/Ó0fŠf1üJc±_»4ÊF ÝÔc‚ ¥°=×A,η„)ÇAî<*n*DHí¼H6GÅ{½_2BNigØ@:J'!”Ã`¼½æxÀÞ òÌ£—L9Ke-¾aüxª•õ}t9—Y o[cóǺÇ.c›+G?äñ-ÿ\Aükr%e‚k«NÍaL!îqu![«ûr¤´'´ñR”¸ägÄïˆKFø€œ“jÛxBó «:Á¹_§äƒÑØ`´3ªcS·]™9ÈÚ¢(­ÿØ’&mûæ±±¶ãá³ó7Pqñ¼?"ù™NëÁ²²t©vêÕ/¯1bô/ssÅ&yj³) »8ÍÛ´„ÔŽ·0uáÜ™CšÌt^ ¶t¦#€Šð1Ÿ„+¾–Y‹á¾9y[ æ99ÜgBVSá~‰ÃKŒê#†ç¨¢¡ºÜúbÙGSçžBGÏIsà <'ý/[E|ýg;_1}Z—¾ž1–Xc¿±ºØ?‘‘ éhƒüÐÝÿÛáðyƒÆÛ©=Ì#{b>®Á7s’®‰y¹Ûöœ/„øl c¢.´ûݾ+ý"R|;—°ža›tÒMÂTÓIÞõ£ÝFÅA–dDœ­¡ž9Ä‘¤G6X#,òŠ’R$³ƒÜ”a˜‘„“š9!ÙÂÌRlˆ´¦õT¨Õõ²³ÓDLGYèRgRÑ{æ™Q¹¶`óMÌ/pL#¿x8óéÙk &¾v";ÎÔŸ ØÙ ”Î[ù l•˜¯+]Ö‡i ´º´C,ši„>û¡¬’3>.ŸUèoá3áÌiºðî®ö÷½?W¯+çˤ{¾¯Ô"Œšn®þSnù7ÔQõBrJÉAöC÷|õA}Εjö1¨¾ ˜ø ob“ÖûÎq̃ˈ ƒÓšôãóßÝœsþP#V1Öàõ›Í¦m0_emÂIªÄf ºEy^\­7‚Q™/Amm“ÒÙ‚ÀóJ,Š ñf~ʶgEuöò3 ÒìHRæÍï)·a‹2ø\ø&eâOš”ÚY 6©.]sµ%Œ5Î’o¿—”š¢bZ_ù,œ½d°OáW$9Qex1ÅÒØ‚yuáÈ6G5V;…uš`¡$3ÌäCÔ×-´uAe®°öê eÍÙÁ¤´ïˆ¡J·ûÝ%:¸@´™÷¤‡»Úµ»höŽq®¾æ ²¤ , Ò’½]ËÍ_¯ºÿÍäÉåÓý¼ ±uGEÓ„Zm[Ö‰ê#¤hÇn†è®ô†üõŽ^ÐÙqì´‘¤Ü:iÁâñÔç6¯™"ÝfòšAEUµƒQ#ÈfÂq©‹¦KMÌĤá–Š½Ó—GþLR"‹¨IoêZ@Ø)˜¸i[;bò¤‘Y‹‘0Îj…Ìf˜’Öµ_ƒH·}j®7©(Ó ·œÑ³µ$ E=£ˆ¢ áJÔåÅqÍo6Lҳͫi‡:Y¤³·yEïFÀ²‚^³™aÞŒåÒ™5IAÀµ¬HíM‡E3èéÛVÁŽ¶ÐµÕ+!sŒfNÓèÚßyÌ…Ë¥IîÓú¶öLè¼Á{«á· A‚o’üÀ¿g$IpiY:Xw„ß$9#ìâM¹$—´€D ŒÙtòÞIW©¿qÆÈd‡á…—ýQÏ%Ääj42Þ‚7_"¨¼¿;)ß=‹áþid[ö?lÉ¡ßúñðx}H9»Ûì¥Ôš»Èj@ÏÃiqòIŸhíÅIÑFšXÀ„ Ð"… %™IÌÄŒnƒ6é¶þT (uôQ .ýZ{Có‹TÂè&*ØÁ«È#í°†E¨ö"î?E˜'¶³Ù$²…`­é{¾¦ÑÛÖ.Ú '¾åøIRF&à6[SŽ‹ÊÒÐ"#ˆ—͉îdÐäs¦™è7 ì#QÛ´_ƽt‡‚™j0×Y‚i8óÕ¿G„^‡?ö(Ç:³¶'y× ž¹_ÞQz:©{žÏ‰9ìÍ4;†5\ŽËyÕj´WCŸrË¿!Tf^:—Ø(TG’„Ì 5È£SüÉÎoÒ w|lF ëæÓ,ÄèL€Yªì„÷$m²1§¹„nÒ}âNQsF“UàÀ"OBæcŒ U›T4+ìä, 9b-{$ÕLöÃÖ¤ÕD6EÁ¶Œ$i* J•ôyÕֹ§hAÁˆ¢£× äG¸  4&Tç}„¢Û&+—ü+ +’Ö7“\‹„m¾dðÉ‹â ×} à;ªIÚ½ÃSÂ…6Ñ„‘Ô(ŸÄˆ~‚‘ÐZ7³œãˆ(&’zmÿØšO"VŸN?ÃS_k²6°cÙp!o¸¶&%Caç}Ú'âLÄ%x_jûÕ·º1òœ4.4øúOº¡¥ï;Ë}=Äìƒuu;óÕÃü¤–$üsÚÁöÁC);/?o""~½dE"±-¤¿:å^iƒŒ¼iLär IkÆŒLª¢¨<²íö¦ Úß¼9§jDަ Ç¥1ÞTéä@›8]Üm’fž§§TÖˆæ1!)IGb=‘ƒMMvîõÖJ›a¨>ѱJò((¥@ší½è5âÞÌ|m ´È°¢#6å[(Çr7 7c*q±iÄþƒŽ•¸7&¡Z°ÅPÔï8jæ%"„ˆ„#M›sñ:LzÃàq*ÌZÖuÉšy  c—iŽóAÜSëLfG’™£…f× Ÿdhñ½V].$\øðº9w…猴1îæmeóDP&L€Ø¯„0t®s<Èk-»ˆä¿û5€5\g—ji`Ý@–+A„lqX€bîXmÄ©óPL+Éf¦^O}{Ñ›ÿQœVÍó艿o©Dø3óŠ6…Ú$.‘$'Ý8¸=9 '[Nû1±^+¨§c¸'Nd±Þ•øÕùkª{#ôÄ-Œª(´Tb\š `lÒ|Ù¬GÝb£¨nÜTÄx24&ðcüm>üOx¿/Æ%¹[Ýâl¼ŠÓr¹ø#7àÂp.]‚jÁ¨gË‘ÇÒ˜]#€Õ|t 4óPûÐXz™àÂD ˜;O˜83Äwþ«Ð`4rQ6ÌdQký1¡%Âlüžp–™9‡|Æ9_½„àa»7æ  UƒMXë$­&17•f«Ü‘ÙÅM~5FÉý81§!9ôD[Ä2E[Ù¯‚yâ¿KÈîË®zkÛÙGWéïqZ§õeuáŽ×š}vjYJÎqè‰ ‘äl)_ÈÜAÀÜr#SlJ&rq€ÌTÈL “,Íš€›Kf“tí÷c༨ž¤¶”ÏNSÝùLDv5¤o9Þ[Žt±Ú7É¡—× çö©£‹ähmLm.c„s©Ì ¨©!TcÙ 4"ªØÖäl:bÔ 6å E·>&îkÊOüñ ûÄ÷ûb\nÀX68+Wp6žBp„‹G—0è4ÿÀ GÕ0¥žVÁ4“s‹§§Hq·Ü³ý>ÐOuäT æŸAHGÏÜ„14” Öଠ3ƒQOò¹ci:XG¹ü½/âBÂŽ‡4_uäâ³"¼W’fb ÐÄÎbOR ÿt1éà}È·;VOc7< (¡g©ßÏŽÌ È¼ÖçQö½“å­UýLOï+û]šì®÷f~óG舅pÔBj~F¬#=!Ó,è?_S÷#žëPêó‰[ ovA8RšäMöÄdgåùà1î¡•GïÒõŸòðwðàp=îF$¬=&ù±&¦ÑRlLÚ P—€=ç J;{f?”vVÏâôÉTÓâþK%ó¤#¶Uö/#¶z†±lñcü|Å8¸9’¼§†B¾ö®0‰¤´á/ÙÖÈkià}6´´Æ%êØ÷úŸ(‘4bfîL& ,ž!¡¶x !y»2kã'g°O«%Lê«všw^?í##e¢Ó‘òLMËQÁ ¦Ç¡O@®-¼ë!åÏÕuÆ‹ çíì>˜›ejõäòéU#Þ!™fâ’sx¿•ˆÚ f‡(K;2!i”/¥þÍZ‡0ÂÏHzq‰y›„jëc'ÅT”¾K†=¤>m<=£¢M 8£à(´H ">¨Ùä³ÊïI¢²! o®fÞ±ÿQb©*Mo1bt³QÁˆ±l±ÑSŒºÅ½õ#ü»ÊO¼õþù<áËqãñ­(:bÁŽ!-é ›¦œi§@Ò¤ 0~§MlËÉÑ.L­h…L#Óîý¶´.ß.h;ŒçY:mÊBR@ &¾b©DêÍZAÜÄ8}‚$nÆWF_Òè@£ «½“ñߨø|FPßÜA1 %nË«t$iMH$b¾tÛˇ¯˜Ž}Žn.ÑÒ¾ÝÕÀ¾²ÔXo·³gsõ—6ÓFÐÜØ2qj愤½Ãá\LLÓ8ò)ÜÚfÎâ…¥~¬ˆK¸‹¿ƒi˜‰iÌ…M0!ôt¬‰™oa0H·™úEÄ„˜Ä Ö`\Á<©²ï4,¿ÁP›šL*u5›SHkèSm„¾Eó4élNÝ¢•øÿÈ[¾–ò£oýVÀS>à_àÒÑ͸xt#‚­ž¡–‡0M$¸e< óC–PzãÌ2Ü O{*œìo¯vTÎUˆÔ?¡핈ñ7©.°3ï„S%yTbf*b;ž ˆ«3xi§9 !ͧµËŠO.ѧtß@í¹ás_ƒd Ñdvë)ðB<Ò"ýË‚ÙízE»Ke˜< !v:¹ç}癩.’Ô$­0º›‰BbÕy]Ò 8}SŸqf†é±IÞ‘`Â$h’½„mÌh q²x‘ÍQyã‡]ˆ‰LÇ’í7PÐæèÍ Jà‚%,4Raÿ†¢šº†\ëú‹›°b#Õç&eÚR5sŽ×Š“ªE7(zVM=Z :bÄg㜌WTÄŸË«Þô,( ¶z†³rµF)yJk­ Íþ#Fèá8ƒ &邆­ÙTšŠå˜e aƒ$ƒÚL;{ Z³£K4/2ÙõŸv‡ò$øCÛ¾2qfÌŠqÐ/BJ\Qsû=²cv[$X²}‰$iHm"!@Ù^òí§ÙÙ¯²ªÌÑÓ¹çk\ÙéT˜ã8kˆºuºO-Yh³2zBC8—H[åΔá>,Vë(3 ƒ%ÅÓïV’IhÜ’}²Pì/˜RjIc7©>ºœ;œ¤téÚ#iD0}×û¤±gʼnx“öÅ ª|ª™c@ÍËfFZ“„BRS?ÀV“¸U"T¥V»¹k„EQõ0Ï[lʃKê_*ßÿ‡_xêþ \”›pa¸ìl¯ŸWšƒx‘•͆þR˜'k H©ëùŒé›£'¤tOðm]È—Ãi¬: fxÃ8ÐÖ?ðÌ–Eu(v6¥—ÇÙÑÆÁ±øm¾ä]r7ˆ£’4™¹´ç1¶?U ChUœ£jª‘hpµa¡½%d—%e‰Öεµ£ì6í#è×`âéßåˆC¢ÜTH “Ù^h XR·B=Ú“Àõ¦Ñý–º!œøúwŸ†¶u¬’Tù‰£›¨´Išw{‘›¿d2‡Dðf÷L5ÌNÙ­mÄ‚8L»} Ú¡„|î—¨™TYø “¥Xhg•¤·-ºçÿzË·âOSyåë©õOÿàÿǸ€pÖ®¹©”–rbú>ïí Àvx*vÏQ5MÄÑ3 âPa‚E›Î2‚2áôÉlÌË%ᄽâxCca¦ a ô½íÃ2‚Z­›ˆœÐÂ#õâ@VccJ j.œ›_Ûm;‘@.¡xC ~¤­¶«l¡ ¯œ™³øŠîcJ3ˆÀ{†p€WÙ:ac7¨]™ˆ!¾[&#‘J¬üEÉD“$à¤Î¶gý-0z3©¦ÚÍ;fªˆGŒ/1g[@Ž¿ol£Š´ ÜqhK,¬³`ÔSlÊ~äÍÏÁŸæòŠ?üz|èmõèÇ1ŽŠ #{;9 dS fV¶Ó"#ìwuáˆË`Ü] ¶¶V=íg¿úÀºô#,ôxŸB{·V4bÊ—Ãå÷JŸ.Cm2¬ê·Ñù]Iàk¿ÍlæP°Å‰²±Û ~HM;øœ±j ¾9ì’¶³šh÷4w®,µ·²!½ÀÎu„=uÖ”¹…¸Piß+!oÎE‹q'Iˆ±U Äñ¹Ó^z ©,.ìyõKަáÍ ÿ'_6œ ½_›Óî¹åT7f’Ç&þHÉb“‹÷•–F¢oÿì!°f·mí‰I.˜2lÌîæ„‡Z›¶µjõõ4æ íWÑjï—öl[6ê‰?ÚÜßp÷Æ/¾ëßµ¼Ah!­‘³È÷¶›^’Xp¯O k"fÈn¯%Üéö…­#£¹uÀ‘t¤I¶ª¾Ýˆ9dÁ+¿ŸÂ‹I{îw­ÁA·y§ ý&4‘yaŽÇ)÷oØšP¡ùw™1½ý¤#·!D“˜.¬¥Ì±—ž-ú•} {k¬åTkëLI({ïÍé.LIH,„ š_D,¢tÉ틾æí]ö MV¡MÕçèwg0M©OÏÛÍÆÅYÛ§!út=„4×äK@Çd$#¤ШcïÒùAn#`iÒ߈R,˪cy€’“6WìºÁkßüÍ+éOG)ñ‡÷ý:~þßû¶wb‹M¯#4óؼìïLÂ𠱤GJa“R8S½Š9¡ÏöªUªê'ët™ ·–9OZÒþQ™´§46nŽÜT;6.šs”³mo¾â2ß‹êšÖ44íÀ}7)0‚^Ô<>S„|\±Á0ÏšúRóûèï¾ße÷÷åƒ`ÌY–¸ÌÜ»²§-~l„ĉ|žÙKÓD´:¨°Jê´ËJÍpgŸ{)·µ1;G™¯,H¢û·^¢êÍ,3÷¬${j2{U"ÊPÂÀà>È`®Iªñxf&d¾ê#OH»ÿ'lÂÅžùIM¯k;VÒØÉÙ¢£n0ê[ÝâÏZQ¼õòïâž·ÝŽ'Üü—ñ×ù÷pLâ ¤µD”žpÁ?²<Ý;:ÅÝZèlîÑo¼ãR¸™0”ðƒÓÍ|Õ™€`¾©6&·Õà,¢n>1mŽUkãÐ!AùKM "ŸÆlÒ»\œ™Ñég·ÍI±¾Â2«S?®Í…mþ¤Éðá<[Ñ>;vß^¢‘É^7Aªu…Èß’)iw:è^¬[,w­:Â-2QeÓ w’²:R&’ýG²­Û¯‰=»ÈA c~®E-CdH÷aVá>» átgp–®¼”Ç.<šFÄý’‘¸Ï~AÂÈ 5O,µïÒCíX{Và+L¨à¢Î¸Í‚ÃÁHIáZ’è¡1ÏÿS´½öMv¤.#î9»›rŠ ÃøÈG}"?Еf§3yeÀP³f‘žBÁƒÑáÑòÛ§}¥±^Õ]“eûä6Üì„Áˆž!R—¿‘ þ|úÝ Rض͹…<½„Nξ[:ÊÍ©(ºâ£c'¯½(y ž ±Ç1Í!fsM.“þ ±ïiç.ᚺ\Ìm”oþýÙþÚßÝ& ]ÿ\úŸ“UÐî ßšŸ²*Hõ&¦}:3à¹Ëé'‡&«Ô° #à´Ý꘧›eL`ɽ3—HHhIöäíÛµ€f·¤Í:Q‘|Ú8|&á?Hã0Iž!Ñ >V™¬Wh /^ÛjÿÄÑÄØê5ÙŸ«v Ø¶¬›õ{ÁˆQ·x훞?ËEQpe{þàÞ_Á'oÃåí=µ¸9¨FÉd»»ý;È€# C]ëAG2`hÏ,-uîopó ›hê÷Î©ê¯ í ÖÙ.®Ôvtí ?]©$!"Ûšhð,ü8RîòýDü}®ìPÌÍνG­°L¾Æ >îD”Ñ}ŽéÎÂÉëÏ éóˆ˜þºTqMc}^Ë~PIÊ–TÏÌù,G¶}f,yQˆ˜»¶,]M-ä257˜ø,¼ |“öpŒ¶:É;QÔÎy<ãÔ2)?æ¦þ9HoHÚ¼'Z.‘«Ã½xœÇÐ;øŒ™ù-K0‚Ï3äÔŠØH|Ì, @1ê‘‚"#J© àÏCQ(îÛ܉Ÿ~ûwáêæ^œŒ—œÙ0’ñ ‚£áGCÜV&átAFˆðµ**HîÀx ìüÁɤqxŠ ÿ·rÊ,¯~ˆT™v³y’ !ôʤ†|bŸ54õ«z:åþ¨arÕûK{×*‰Ü?¶†õÜ«² Kg•æ$õ«ÉÞ:öÓZ'ðδ©+:šõ\;! Ò‰ÂB>XýM=Bï$‚ðšE„È¿I“²+2N¥(б`;ŽKÍ?_Jµ[k1‚ÈGÕtB5kEì뵦|b&*˜Ÿç¾éS™Oaí+kzasxǽéf¤BVWÒhI ÅÉ,}·Òʲ»«ídhã8¶ð½hÓ6 [iX#qDuȇÁD¸"Aû•.ÕN?™E¸¨#&mžÀ›ZÎ$#qê‡IÇÀ[ÜÛ¯áªì˜ ƒ]!¯a“ffî ¶Øê#6+èÏ^¹gsþó»^{7ïÆVÏš)Èù€£áGÑûYp$G8’£ k7 Qø§šð5¤6\h„šb%51—D[›lÕ”üÉö$°´ï-»ÑöÚ@m'¹GR“é¶Ô™’ìÌäø tÂóŽøîrYóaѼ¢må.Ò_Ö:·N7†…²O 8€³ ×òòĹ€ýßø–]Ö¥Ä$ýfBnÈ­Iª·fãÅþ´bý—½§\)IØQJ©Ò¾–˜l’€î="¦I# ÆÑ~WWxsX;äKèÍ;®5’FƒyÓ…éiçíH!$Ab]Ùm×à¹ÒµOUÊõ0W­ `<ÁkþèÏ—ôEqÇÉ[qZNpº­7” CM$}$G©­š‚އc ûk ®ß@kÉø nòB’ùTâ©‹+B¦Hk̃}$„þ\Õ’62OÛ6÷:ó|Àë«ïû.nÑçìøÇŸ{‚žæo]¦[ŽÁÞœÚÏ™„$šÉ‘=n#kîmJ»¦hsm¥ˬ û^œ#îôRØñ»Wf¥-ÚÐÙÄSn#m„ “rz'(=÷wŒ‚ÉÄÆŸÆNÌ¡w0%¿„a‘­Û|ùt3‰äÎTÔ ³Ì÷âóP¥¾äX’°Ý"ÕáÞcAà!É’ÖMší7$Ó8¬çá}BiŸµi RãßUZ^P-xõŸ3ÓÏ´(~üÍ߆ËÛ;¿†FÔÛÕpŒ£á¸û¡Á“$Φ`fÍb¯d|ŒýL#K°â¨)?àçïšð$„7©­ú]y/Ró ÙÔbìS F<Ö×=Ç^®S™èHy ­ÖÔ§P¢mÚï%¤1ø°ˆÑ¬óg](´Ìö1Èd˜kQ.•ãI#nœڥvôÄ^fêØ¬Àñ–à„¾°\bR(AQ±Á?ðž¯<`öç+~Ó1S»“D±£ýCx i¿YHš@âfj#«°vÚ¥_È`*™øKæS‰yFh_bvýÂÊÐL=#ìžà|«ÇSTÂÕNÿÖSÀ×*ÊüÙ([Ýàøè"îÛÞ…[ŽnÃMrK#üCŒŽ’tì)˜5­…Zæ°Lxø´Äö˜w^krÕ'í¸UËZt™Pµ¨–Atm,ÚŠœ:aÒç]¡ô1 D‰ $^"qoŒÈ|Ødľð³!eFŽÍ>7{ßXrtGÇ¥Àï¡u×;¬Õ_åfz!{ö3ÕY»»âRø•ÞåÅ€ÖEMys$pg`V䋘[$Âg¶û¼ë«Î9°k+a7­Ñ½“i?ñäU.é«OààÐVH§Â÷rÎ[‚]w*:÷Ûwê#„m.>«à¿÷j–*án\™gû~ÀP“@X22ß ê»?Tjyõ=Ÿþ¤ @AÁ GGAüC=ƒe_• "4î´&"UcÇKʲé>°Vz­ÚE„HÚ\HÛ¸ákê-¡#cD·X5ÐT´ aÁz zßÞÄãþhs+Mñå‹Ûg‹ÈÄŸÊd9”ÌJ Á`Ó8”˜Fº¿€£V+$$‘ÄoôïV˜š+½l¶ôJ÷ÃñÞ†çßκ="84æZ{FÙ»^ÛøÁ»ÿ7<J:+=ñÜQÄ<å9§ç¹bVIÛï™Çˆo<'è|rÓ-{ÖIŽàIíXfzê4”9³å+Š:€â„"©ºÆ¥¹}ž¯úÃoü“]ÔUQ\:¾ §ãÜtt êz-H‚R踡€bD`H;fg먨jôD•¯AÄÂÌ2!ÀÔ&0”];Q—Ê›oNËŒ¶’½’6âXÈ4ÆöŽlØáD'¶ÒѧþÁ¾#•ÔšÆTåÓÂ5½–ŒNétsôl¾/MËœAðÜÒ<Á·¥Å…ô«.Lk/v-}Ùslòâ¢Zµð]z阊íƒ;ÈÞýC÷|5~ðžñ¯Ãä›jç‘;¤ÿDôí;èþ_áßY2ËI™ÑmFN0UUéˆI¿™ƒÂ1F§ÄÃÒøkj7eçu«ÂÑG=/"Ln~ó ØŠk»‡U絘‡ ¾ó _…KG·à¤\†bté¡%’04ÿ€•¶ –z°ðÏ.ê' Ö^ ºøœLYk´Ú$´A3.F£üV ö¤‹UܯöïµóðÔ”gð6•+L 9’háJHÞ¯1QCðÐʇnjû)^³öR½6;’ù!ÉÖE°Gì«þ„…ž¯Ìeò!ÊÎûεQ}öõù7i!™A螯>O©|Æû|«Óº0½Ð|Äœ.õéw¿ãKv¶çñÖC0€ùèì`Dˆµÿ‹ƒ0„| <ƒ|—°Ü7šÔâ}Óf¾þ»†Ý4ueÌ&k=’ÑÕ‰<çc…β[t›´‡J”—½áËñŒ}~%úR#Ô/ù©Òd%–Å¥ï0ùÃćƈµ´§~h;™½4¬Ý…<4ØØÍtù¼½•¤vpG=Ù;vÑ}Él–ʶu#úa•’0=Òu•&Á‹j¤¦ž+®™Ú¼Z¯iOjªZR¨înBÜuY!©&ÝQÞð/°æé4½ï€™/ Bù¬‹mÆ—À;¶<€yÍ„ ‡Ä£‰< ¼òÞóþOôs£%&ˆÏ$øÌdJð9{A’†¿ëm_œë5‡ï@q×öœë,¯Nßq“¯$6ØT}í^‚–10{âR‰}È’XR%Û-Ù·k'y[ÛŒ#;êª '6’úe$êq‡¶Ù5TjhKü¶ýssò÷<å–‹Ä Ç8’‹N\{ª‰ô"ªG… p>_ð>5—ÀíåŒ'!*µÇwŹŸd]#¹ ¶9§J'0ÄÀ¼c#Ò.ˆ$©Ÿ{© »`çFú\’$¬A¼ÑÏÌÍL1¸ºÇ‹ßAàš-ö!Ÿ/b‹‡;ˆµ[˜Œ.¬öšçç Éy³¯wç³öoï²E)ƒ/*±NOÝ4`O!þŸöÈo±Õéµkvñ`ªªÑˆj2.]P%´€a˜š}v;€; ÓÃþ€þ K¿†‘U]j¯OÏ–[>{ö[æ°b|7º„øG §Xàu“ˆh*J„_0et¢Qh‡(¯üoÙÿ—ÊK^ÿ%øÒ†áªcÅ9µãu5„ÖÏV4sk«–͉%¢ÖG¾©ËtËÊi—Š¥=?T‡r{'p’¨ÞP¥ï‰ýž7JHе}þLd‚IÁIãu›HÖQ–JÚN6M¿’Ãð9®¸lo™ÜøM­N& j›M]¢Úø&@1È1CÀ×0…%3½Î?;ž­¸«íþÎõǶ„ÆÍPôl­5øSù-N|Üò[ˆø×Ud2§…™Êµ1°‚Ùÿ6íÔ@.GÃQHþ+–êéP–Ħñ·ùñÍ™'\7‚ýS ÿmçðu˜´Úƒ‰è6®”¡uÑ_úãï”}ŠZóÿûí`•ŲÕ3¼è·¿cÙâHŽÚ-¦ÑµõçuZ§V8L9B˜i8N!ié7aíjÔ1üró!iâîÜô¨?%œ&ïŒYñXhN*! "ÈÇe › · ¨ ™œB, OÝBÑú%ù,ùŽÝdû2É´'“Å{‰f(<‰˜wìÛš#Ý_þ¬È„¿gTŽg>/€êxˆ–?êÄÉ]NÿôÏqù…©u¬iØÂYÂå!&i7¿<DMãårᆠQ}˜ÖÑw€%_T#<Î6—Á>g *_è’Û –ÎŽdúIseYP¼mRÛ@æ¬}tïX=o‚œêòפH©cÒR¯|?ŸaóÏW¹¼¹Çà Ç.ùW­ ®uqi0b‘eH¸Õ¥«ê·bM,"Adýž†ú=ð6Úžà‚ýÊÄÝ«åCOÍš™€i¡VƒÆ$:‡ØíO»à%i(ýDóøÃEðAì5×mžNajå’ Gùe÷”˜Â3=ðA ¡ì0æ±cºÖXmfÊú\@kˆ¿³·’’¥^°Hʼn¿KÀDÌÈ9L¥×jx™'µJÒ+`’VéJ¼ÙY5ûÿ"|Uý¿Å:#ïp–ˆ9-ApDò„JЪÐ%"®%)¿êP7蘔ü¤þçÐÁ¼®±6&ÆZVsätE Tÿü¤~¾–2ê—ŽVC>]¢´ƒ†¦™™V£Õ –ÀÃyûðGá=Ôþ°ôošãQ׆¥øÈ!ŸpbÉO³àCø‘Ðýg]ºO,ï¯ô®…£ÁœÛÌŠ)•4G: £¼qð+aýŒ ëzøÒøòO’™O'¸º¶F $y޼ÌIùS -–kâßg/jè%t3"/©6¬ÇÔ¿õ K«Sí"ì ›•ºEkŒ)kOs:T䎡Á‹ßøôIõ/ü —‘šH½½ž’$Å6%6—už.x"89‚©Ÿü$9…0° ͳÍHê…IPiÒša´]nÓÖœw]`“»öª›«à‡ÿàYx¨ì.£n0È€m)M¡›'l_ta‰í ¤Æ…!­×ƒï-pûdkOW-B§¿[댧´Á",“üDtE¥÷¡D7Ì.îzÛÓ¦¡f…”OîMÊäF2 ™0†à>*Ìc$·c{‘wA´Ùö ‡¹¦ó)P'ãÍl—ÓuÇÏ{„öao+‰qjæG"¾!„#I‡KmhÜÀÍÒ cõg”‘d´Ð®î ——æÌ*“öiIâwÑÁj[}䎳HJF{qÉÜlŸ#°›d6W{_’ô5¦å#ó<ôÑvjKìûÌo@H™ 6†yßÅCe_©ëgþ§í3†°ûKÒײBFJ¡ù ø–*×= ë;K§ô’Ž¥NIøÈ—ŸØk,ñwgcfè‚ÏÃö6áuГö¬Kz²flÚH7?ä{<÷çÄ®ò™tÏD׈bžGÕØ#ï`:7¶A7^ü¦g,Â#¿kÝ„¶’÷ææi¹súÕxµkOðþëçÁšIs‚嬠“•î¿ôNGÓ‘ÅØŒ‡ÊL© »ƈ+Ó`:.=~‚ˆXx¤å³² Í´i¶aìbä'ÄYÒæÍ'–$ xâ:[“x% =_lèMI[½™2ÿpa–þ'S°ÎÌûì&¼à˜íwr20 rêÄtN3ˆýÿù3§“ˆAu&£Ù’·þ»‹öwþ$°.¿0_ݼý4zæ´†\á§ÜÙ¢eøü´G=×Ç#C,9¡ü4 9‰³ê—ú·qËÂÄí§ÖöœÙ§‰ ¯[‚"³i&ÕK*‹`R'Ö§ôq­ÙŠyÂI¾ †Ñ‡È² ©ï3^cÀÊ!5V•ú«¶ãÿ{„‘‡ÊLQ)vtW¡Žœ=—° ¥áN”°ÞÁ`õú¨â›wvýŠ;¿ßçW1±ù¸„@ܲ53P’ÍÜ5Ö. 4Ì €æñ’7=cQê·òEüý›akIN¬Ž§…1ɨ—ø‹àæ; ÅΕþœ¾º1Ezæ6~ÉãÚfØCš²ýì·6ùNš•*ûKiS}.*3ñÅ-ŽM„à–›öpgZËY¯á'Úá dO'©f꥘®œF„=…·voN‰Wä/šÏÄÚ‘µÍæ06'í—ÌgyŸµ¾4=!x¨Õ½ï[š (†ÆŸµ°Ä–‹.Ðü™wö3€^¥˜U'ˆ|2²1Ñï',¸ê§åûßýÏðýwü³þéÍÑ±ËøB¿ùb7d+¾ tÖ¦¯¨„ÿ%{?Ã8l~‘Î9Eö)_A›˜í»îðc-TÂd©'0¥CH ‡H<‡`‚´f)ú uÆÐï+k'©¬>4m%\L³ëÿPY,_óŸ>gå*€‚¦‘a†Ddb¹IÓlDÓðFèd¸¿—IJŒ2nщpÚsîGèýeö6€íÃä;"SQ/Oö¢YÊ–Ã!M3‰}ÔÁ§ÿ´UCŽç¨Êš2ͼOm ¤•7mÀhWb6V—‚Fìt%¨¯vJõy®ÝܺrŒC G‘ F'0Ž$U¨›¤t ¤†}®Íóÿ}w|yúþYïû|2DÚ¼>þŠ|iíó¥oþ‚Õ yægé”O‡¥“@„$žVã8¬ "æDqS¦Abr³ã:Wi&ÓÍ꛿[ë,…”• â}¬=îÙLX•ƒÊ G8.4c„úùÞlv¨©¸áÏéCÚwd"ˆ;›»°ámu´LšŸýè+/ ó`¶™¼âDÕ†žÄaÚ Nar¢1ÅÙ”6)7­ZZòyãUïP˜ ô @?p?œ=tò8€d®‰sBc§´p˜lB{[wÐÿŽôîtÜ*_³«¡åC"x)ÃÔԛΔïSùÀ¼ç° _¾ç]_6yöÙý6÷cÝÙBUùôeoýƒúœ+_ôÁ/K„Õ° B^;¿Ã-Tè0éìŒ~½“Uþf«ôT® ØLz''sdz¤Ï ™žù_ P”4Ì N ÈCe_¹t|3ÅP0èÐ.$Q—<í ¢²=Ù¥D#ü§êRޱÉÁUN•`¸Ã) 7Û›t' µVß  õsñ|QꤡGq‚ê ‚ú¬49k¸ŠÐ¢½–…'Ïn|Ó.˜ÐOÉœï7ºyœNíŒQD;fóÆ]2¨P˜<{û&é)%ÁÀ]ÌcRz¾L7£Æ÷é…0]…ôœF”8r'鲤ØÕNdÿ4§¯âwžÿšÇï~Ç—žûÝC‹Åûgå!Ûë gµM™Ì;ÑSQI›™#{2vŒ…?gB”.ØúíUxG.Ï=Dj:› |=’¿µþÍtdÒ>ßY@U*‡”±Ê†:@¥toL~z6ËÕ@"1”×™~x?°uWßß•[ü:›H‚ð¦ÃXh_Õ¤ÝˆŽ©M‡ –G'Gl œ/ˆ]ØÚÓ̼¢óñf‚*cÛF‘Äa(¬SÃUÛQÝ¢àuµ‰NÈ}ÖÚØ5ö|­¢‰`»&åNs€é÷™ô%efj¾g@8Xøaò}ÒQ•þR"Ñ/cšq·…':•ŠÊL4?ýQÏDðýïþgx0–/üà—-ȲD¤Å¡È‘dá7º–úüû7ç“„lsL—v~Ò‘ ½}bÄVƒ™4ÃÅÁÍj ýYrk5%møRïS(*¹ Ã(0¢4ûv0`QiYV;"æô˜eøJ|†~³s 4¬)AœMâW€É° (|h0±!’Øy|@Dq&zNóøc"F–ó§õŸ[ÚllÚ…FôR2;!ºH¤Pà‚TÃvÜŒ)NiqJïæDض`ir»®˜DõÄßæ15Ó앱:à,Ÿž¶Môz&¶!KŒÝÂ9^ ›0:™–~ÿŒÇ<¯­}E¼ï»ýË÷Mï)_ð/¹„v˜™´MB%l•&™4É<¢qÂB[29UƒŸ2 "½Bæ'И”è*±„^ioæä\„þ‘î$˜g x¨¬,ZF`¨¦Êzƒ² .Sщ€”8§nÑ0".a:‰Sš k²¬ÄOöPL’ObB=יșö/Þ'›<ÜL‰+‡¤°5NÖç³É LÀio'Ý[{íÞŠ`FUÀ)#ö=°„>ÉñÃ{qšFzEéf¼á‹èáÓàË!³ç,ó÷Ì}OÏèÚ¶‰­Š8\P|ûÔÑFØ®F¡Z0>ó}¿5LmßóÎÖäS‰æÔ“N2øœLRKÄJôÃöKVˇÝÔâspÝžAÙ¿”IàMÀã í-­;+7¤ '\@lx´NFøPY]cÙVMÀ×µB±°4hä—o²béaƱ\ôlégê.ÎÚ¦þ$ö¥‹íÜdìêCÒ@²y14X?Gà}Û˜ é3ÚPÒ» DO-ó‚i¦}éÙƒ½ÁBpŒ}c—͛ޖPçwdÛÚ%ZIw"óýÈÉ*”Æ™ÌaÒ`Z†Ÿ[9^úaf–YÊíL@h)ÊÆ¤Bã\ÈÅ Çô1d‚DlqûìÇ~›k ¾ÜþìçFå$ˤ"2 ÷dM¥Sž}Î.ÉÑ ´1ÑõaËŸÍ3Ì>ŒÚ*Èó#A-1Q›R»Ó^.!¹ë0­'Ýó)üÓ÷¨_£„#|ªøÁôÚO¹‡°-1ꈧ¼òqbãùªÿð±ø?þ§‡[.>¼™ÞŒ:¢·'‡©DR/•qøå*$ÈÖ5 û{Žê!áÂ&â2ψÛÓͱš…ü^!ÂÙð*d Û[êvtvT«†iÅ´ì¥ËLY™¬™°˜#1¨øcBž¶ , ú0CO˜ã‚†ô×Gr;3f1d ¿Ï ”ß>Ã$Ž'?ÌÌëưãÇOÂ7<Í‹GJÒ¥$À‡Þ`R ©‰èúï½’,l¦†Éä! {=ÖP–Ím„Ù6~ áFGн)«ñS}„T—N<ˆwR9ÁXúÞœ¦WHf¡ ¿M™{0tCfyŸ]ޤNÆé›ÜQ^û)·ãXŽñ~ð‘+߸¶òÚO¹7]j± FÝ¢”‚³ñ*^úÿýu r„ÏÿÑx¯Œ…‹¢@äÐz©MBV\3ȧ‚m{·vy[I@@f#ÈE¦xakløoÒñœßÍY2áÂ6¶@¾è´âiؼýgm!¯I¦ôÑF‹u×ê cY*·\¸ GC=PÜ>Ðîm”Òˆ›~:âïºî“†Þ @"TϦNa%ômRè•ÍN‰…HHõìpv"ÌB¡u­¤çøp:¿T?ÛæÔMZ­í3¾„É,êÛÖ h8]‚yò9õë2᡺,Ѭ³éÕ÷©1¥l<ã†Xß© n%ÕÌŒuòî„Ð¥Å3$®µv¨É""w†³?>nx†fZ0䙳D nÑÆ!öNvTÎ[ óŒ³geÓ;þIõ$Œë%ý%)7p–,Kâ)º]#”ØÈ¾9ýœ3‹P ¥sIÑï¸SZ¡0ô&ªà´¼öSnÇ͆#9Ʀœád{EGlË/ú„_Âõ.}W·—q²¹§ÛËØ”3œn¯b;žµ+ ŠŽ8Ý^½îãØWއ£v)|H®)Ã$W;̦IIõ&ZŸNLuhtZ,? Ö‘šßM8"ŸmßJ¼Ëÿ D´CÉݬMß¿>-±¿âüÍ–é‘ì8ž‰Ø„ AÁµe‚ÝwÍæìœÀÓÏnÑè…`™ºÊPˆž“4ºØÌ6•žål ;LAœ¤?¸1/ìÒ\«-]­:±QgI–?²?Áãm}}§ÈÈkË„“‘j’[|vú̲§d_ÕNî7þrá~~3¢žPèl{4!4FJ8a¯ 5Z `áXŽÀúÌþl#ÅfŽëcü±²™AÃÇÅ„f—‘íÕO}.ß„‚‚+Ûûq²¹›rUŶlpº½‚oü»?ëU^û)·ãÆã›SFø7å Û²Q´`,#ŠŽ¸º½ÿ¿¿ýÃ×m«ŠùJ‰†&ÅÚ–>e)ÚJBSOû i¿Ú&Éh„\!ZJ f!Ê¢r 4½Ñži×çéɆDõÉí_>ždËpQ'äÉ$D{¡'ð´!|RnVÂp13˜1¹€Eþ+“óɰU&ôÖöžò2öö’(I}. …§QýI@Uéåv"»¼`êf¹SïLDútÅaᯊd7!éÄy Îâ9føsßY¢Š±B¦™I’ÀEì\D˜v ,1˜†äùòB°8ÂUœ ‘pHœ°óû¹oþ—¹P mZh\u²ø±€_"Ø– ®nîÇÙxgå'Û+8¯ât¼‚Q·8’ãëÂŒø+'›ËÞŸþJôëuÔE·8Ù^ÆÉöÊCÇW:ãLÞ*]­©TÚR!)gY“Å$Zsn’׫Û'BÙÐB¢&|2ôa9O:A0ÙX²„+3häݘ³Ù¢Õæ¸,Î¥ýåטš_´'ˆšÇQs}Ù|µ˜õfiä%ËfÜo±ðÏç~frÐMIkXº~–{jHÌÎu›4©pB£ ¹-–h†I•k³˜HSßþañÅÙSí®ºäîfÛfé(? bHD1GÑryQ‹,mñ˜çØ6©¹ ACÃq¦”À˘a•:•–©¯«Õè7vçTK:Áö)Œò¾ò)oÅ GØŒ§8¯b3žâds÷ŸÝ«›ûPtôÍs­LÀ4 'þåÛ²ÁX¶ËEG¼þö_Ä¿{à ñ»wü’3‚³ñgã  ŠA|íßüÞsáÐÂ2P=yÛÛÞëÂç­«ùŇâJ© 1Ȇ)®óæá@ÒZ“À(SQ"„3Þ!°)MEÒœ¢zIËA4eÔñj¯Î}fÓhÞNö y)ˆA›Gò‘9s ¡“ýÞáchôA þÜ>¥'"À:'p+ó——ü(ì]‘wÄž%Á¹I•lÏ ç«dNî@í2Ôs(Š÷ ИD@ò˘:ß[ÜM!Snésš'Á¥:»#2c",ûØ{f9§ÄO J“7¤²ž vl7îàÅŸ\ráÀîÞ$§Ñ{kšPàïÇŸ-¸xt ·\¼ †‹u£”óKà¦ilÆSlÊ©ÿ¢#T ~ä÷^„ý¯/P±½ÿÃÿ"žü!Ÿ‹÷ø_BÄe ¸t|3þÏ¿óáë~ö=÷XÖ–ÕTa¬ÐÒˆ´¥Rh¯—Æ(.ØŽÍ&Љ–¼‡];%98ÿP0 Z]] ¤ RbhÆ7›ÌÓ(±±Ò%ñ0<Òh!ýkpÂ<®%-B2}‰>#½ƒÍOãGçM† Bãq‡5GKYw ³ì„O ªÒia}>tfÞO [±?h·] ïÔ¸ì=ze*J÷æÄID<ç¼pn߀뒫ø÷<J>ÌB5Ì ¢é;ÛÕ—,§ÜA8©Òà3Nõ³m‚^ÒÏë#““ª‰ù)ßz’†È.lÿù´³Õœx¡V#ÐpÔRü£…B °‹É‡&¡ 3Sš‡¯Kÿå ÷Þ…Û/¿o¾ûwñ¦»ï¸ïpç•wàÞÓ;qÿÙÝ8Ù^i{s. ¼×4¶ã™ÿŸ{ãá™?ñ?:ñªýÿMwÿ.~ò¿5*¤•ãá‚G½WŠIŠSž "C^yÒB¾®‚BëÈ9ô•œ¡Ö–ïöA˜‘û7A‘S–ËÌV°ýÅ|(ù¢x¾s‚¤I($q/Ô;eg„²~j˜`…Í>©©:îì5`Z`û3\ÂAÞ˜»UK‚Sìm7×b†<ËÔY|Hæ^HôXú6IÊ3uÊU205Èlƒx*Œ%÷lšn¦ÙÎCè¼ùr˜ Û'%äV¡³1tôd°Â$Âä‘/@!Û»ômMÛ³M÷†5op–ÿyEÂ8v0é<[…(Mm‚Eb¾^ÖvVÁ ÔmƒUééç˜qÇ‘OŽ1È€Íx‚{OßwÜÿF|Û/ ¾û7¿ßû[ÿÛr U­f¡íåj†Á‘\À¡EZ¨§ð2{ÿ]W߅׾Ḻ½?Ï»•7ÞõÛøé?úf‚:ÂÅ£K Ø–³÷’)Èpž “þã÷ù\æ“ á·'V õR‡PS$Ì@1† F( â—¦°€Io}Í`˜Å¡¶Hfâú0öÜÊ`’#bû´=Áy’‹‰¡5Â.™©ÓëAÓ¬ù ÁI¾œC%š#PÓŒ/ÖC,%<0‰î~F¶ž@‰G*4Œ‘DÛIÀÖ†ö ‡KçUµo-‰ )Ññ®Çch,‘þ‰o˜/¢‰µÊý÷LEB’˜ø3d¦~UÞ§½wìf†BU[ÔTÔµN³ˆù¶—nàæ°½“£ñ°á9K½×Ö›²Â¹-§¸²¹wÜŽÛ/ÿ1žÿKÏL¿ïoýk¼ðW¾ ›rбlA¯àÓÏÒ·mÈ#×õ á0k/2é0õ7)Ù›\{„°ãLO³£»éìÇË}fS™×æL$’íLØhÀƒfòÊFŸ”ý :íÇBAyÏKdO`ãŽæY8-;Ã@ý*XbáâÆÈXBSL”@Ê-j,ª×L‹éye&œ™5‘y•eöˆ{"Ý©<†¶—Vº¢¬#:~†š›f!]C±¦“ÖÙ„ˆÖÙ_½ÿNöHŒ96\êCëÒ¸QÞ#fDclëyxh4,$4:’c Ç8.â™ý€ŽnÄÐîZ:O'pú­¯ÀÝú*ÿ~ÃÑn»ptÑÃ4×EM¬6êÛ²ÁÙxšˆÿcn~î>¹pVN Zðw?øÓR¿ÿîÿv/—ªâd{ù 1R÷ÕW¦Ç6§”ÚÙ>™7¬#çNåx͆À!4Ï6}ÏÔhÏ23˜•¡ââ—:ޛȓe€ )QàŽ]$!Ì›r¿ÄŽSýyànÒœóK䛹âý¤©æ Ê”Ðàî‚ÓK»kÁY2Ksd|¤“^Ûãù›ËÖšÉü©Ì‡¶Ê)]í}vèeñÖ9a–$µBþ}Õ;B倌öƒÃuÌ!Ä^BŽXˆì8@—Ìk{Ù¶kb†´‘)ŽªgbÞKðýJ¨O¡F1eç˜k{—VÉx9z»?’3‹o;|ä«a‡±ýç¶àì¡4&1 Æ…áÜzñ6<ê¦Çúx6å ÷œÜ‰{Oïœ@ý¥÷}N5ìò_ÿsÿ[Ý@;½;ekJÑ‚ÓíUœlïÇéxÅŸ¿çÊ;üóm—Þôˆ‡@ðè›ïÏßðî_imÔÐÐÍxŠ/þèçŸk«‹J«È»h½ŠU oKûš±æp)œðÀ?„fÜmßøÍM½dFê¿4dB®$¹ŠÐ}3ã`¢"¹ÅüR¦)L!MP™•æ ?»1û;^Gú½øFL¯®@üÎ÷w4gG簾2ffÊü‰þ›¡‘ ®k̼_›Õ& FŸŽ…/4\ÊöФLÙY¸/¤_Û4 ÉÏD¾j·™1Ðìâd_pw·‘ 9]è»b‹Ì3¾–o…êB {‡ªyÆ"Z½!1¹y½d²x<ék_d[Äþ7v„Q¯®Ö.Cl"tO˜ÑÍfÚ€è뵌 QÌ~¯y@Ëû"S8;¸9l¶K lXl’‹ptGbcÁz±ƒ÷»0#H€¨ã]À0 ¸pTžœl/ã¾Ó»&Ø]å7¾/n<¾¥5}˜ý}lRûÉö2T v1³ñÿ±™‡J Æð°UÏ”S\<º„/Ü ÙãF»ö¢-ä´`Ôêß#‰˜¯Á„˜-`:Þ™?Hrwü“ ƒ}”ÿU b 4Gþ‘ñ)^LÌ{8¥GnL*Çedmu2{ÑDÇ83i˜W¤›ßÔ ¡ ût ä+„PDP' Y¿ôĶ¦Ï‰ ¹ÄZÊ–v‚Hhj²k‹´÷f±W¤„¤kÿ*I!r65$Ì ]húb =뢧1„:~!Ú¢[¢ÅEK´÷ ÏØ!¬*áà5†±„4>å)àˆ‡þG6ͳjså(´+#' â9AâN¢Þñ,ôÉQR²´¾K%‚Ÿ/» މ¿¤>ü ©‘ä:ü1æ‚íx†m#¨wŸÜŽ»OnOá—ûJ=spTO昘íi?ú‘¸÷ôNœ'd£].wŸÜ—ý¿_›LM7߈Q·¸0Ü€‹G—(NÿþùM ö¨[ŒØ`£'þAJ"—Šv^ÖªJþ³¤a Ù®c €ã#ÉðÎ,’ 2Ʀ >FqÃAt‚‡Æ/,·–ˆå¾ú}8'!›¹TìWÿ żËl¼OÎåßg1¦äž,·Ä8¶ ­p£ÁÎP¤=>Y_z°˜p6ùAÚc5u,ß'K\ˆWLΫçè,Ÿh×/X¸Düy@Ät8Â¥c+üã`U±îS¤Y°zwä‹­;Wp ,9"ÒI•3RŦÌ‚Fêí€A°ýÞÌ0Á”¤úvŒ¬µŸè€f¨NL †å)FÝ`«g¸{஫ï•Í}HÒÐÞ¢nÆyþ/ñï ³<÷·}èÎúðž_÷Äpºñ±xôM‡j% ÅÙöj2]¿¸ø?ý·jR-8ÂU+u5ÌVÄ}BNþ”Ÿk ÚðÌB&]@È~7Ï=ïCbÉİ‹sHÄ™ö§i›´äÜžì@’+y_¹Ü,iÑç,T™h»ôšžêü)8bx4_t˜Çbéµ™^ã¹» »ÑÑäë0?cé%´•æL}ù'+&ïðÆOš`T€¹RvMk~—i«Ó4 HHÖÁÆ*,‘" $q.zH©ótDù€IDATCiïp˜Qeùü`f–MT¸¡FÁ&¶Í1ëPŽßg¯NEДa™ÂÙœHó1ú ÎúÞv+2E!€„«¾)X(#æmøF•²ÜL"y‚×5×Ü0‘i# 숵Ç$À˜U=øI¿?¨óL Ûði`Y°Ð9¬ÙQ;×–v}Ï”Ì?Ý©ÎDŸºcZÙ›yø‚‚€rL™€!èÚ›)““ÀZŸÖ‹\x‘RcË>2{I3Ÿ5îÆš› ± ÊÊ(o!dò|PF‰RŽ@é187õC\_x„®t Ó¯E'$nžæ¿ô.â<çPíÓrQ[±”¶Ffèý ­7ƒa/e¹#"‘Ø»M†ãÚÅT NÆ*1?瞆m9ÃM†Û.½ÏªµxÚ~$Þsõø—?ÿÔu‹7Sn¾ø°v˜ìÞïaOš­£PÜx| ÷¸íÃê/:b«[œ¶Ô×#;èb"¸í†ÇàÆ ÃÑPµ•‘Ã04Sh!“ÀàBÀ¼ ³fÉzÛ~«kÛ_ÚˆXã¥öv0%D‘ñÖöt¿!ÌIÍ¥#¨Dníò†Z2Çö`õÝ0`óöT¶Ï‰(Në™9ùü@óΗví°€Ö…{$øÇ;Q—ûI ß¢Ç½»Yh© œŒË”|×04#áj’cž'vZ>³ Û;6McŽÐY¿3h:i‡ÍÚº9í°­ÒZáÝ>¢è%¡ÅÌÉ–D²ýe?]ìèö вÏ4ÁtuøÃ9\dà!ª÷Æ\’[Ë*L”¤óá¤` ÉÅ]^J0Ê&#ûÝmmÃ_ š™r¼9Œez¢f]‰Ì]ê°†Ûa˜`R1³$`¬5: ì*\ _VMs'›…8v/¶Øu" &&¼’Æ7ÅÆWkÛZ´ýWPJA)Š2v¹Q\Ê–¾kß(~çpâî¤eþI3|è9‹í’¤ü^«"ËDšŸg‰Ö,I4 cFÊv;Miö„Ú6ЗÿߎCËößáÒñÍ>Vù_Ñ‚Íx‚ïú_ßÿÿ¯zêÛqÛ¥ÇàÒñMxäMÅS>ôŸáñ·> G’ã^ÙÞàá7<ÿC>7_x FÝVç«*Fñ¿þ/÷tþ30nsºéÂÃpV®RZìÁû®¦¬¡¦Ø°+iWÌ^ì G û/3î$ç/øíOÊî›×Ü™FÃá0‘ƒ—qË7iÙþœ$fñ¤Ãµ,¤Í€ˆQg*ºŒ}Pœ3Êñ@ ß´aîŠö›˜­9zÅ[ò0-„tûÌ>±iB€§%n“ дØMBLùÇçAÄ"Wé¢gNDÙ¶ÆÄ& —ž™BӼ݄¦Ð¡W=c4ŸÓäú-a‹Ø³È#¢(èt¦}o¿õ|FõšÁlG´s ö#x&Åí‰ïq±:ß$*×\)Š#0f*Ù£dòÔóÓ†#=†UÇ: zOÙéö*ކc<âÆ÷Å¿þ;?‚µåûÿñà–‹hÙ=OpVN°ógãU\Þ܃+í^ :Mo8¾7]¸Gr„¿ýŸŒ¯ûÛ¯À3?úùxÌÍOè–Sñ¨›‹÷ø_ÄØîËØî ¡¸vûÿ¾Rt¬ÁD ÃÌ^á;xµˆñ°i¡˜dÇ{Šî™<ŸO‘€²¹1eÍ;¶k–Fçâ4’Œâ[C5KPžüX,™v0³ˆºówî…d“1ûù‘ “¾yÒ’[‡ IÖìÓ˜—Õ9z‚í‚ÌX|óuÎééX˜a÷ZIˆ‰Hk;gU€oüOŸ…³ñ†‹xø šHáK嵟r;qãûB¤†IÚ©ÜM9ÃÙxгñ§ã ®nîÇI»Øýh8Dê `Û+PU`‰Ñþ»G}¾ìc^ˆ§~ØWâñWqãñ-xÌMï‡zìǹ­Ý®†¬gήÙüCÐ÷o}Ù”³FwhwÕ ƒ„ÐÁtžöŸûÚürnÛ7ƒ›H}?4A¨gú}Æ>Ac&‚°ëOcgòu¼aa–rO³L®ô–!ßÜáÆ‰ëK„9–u!ËYhéNîòü%¨€ä ‘˜§~3t‚ÃP53ƒdŽcÁL{ACæaÏ .´ÇlçÊ1P¹@éŒÌƒÙ½†\,ó¹Ê*&Q„ȃõÈ“öÀ/i‡I$ë¶E”™ö xÙ[¿׳|ñ“^¾LÿevÐ75ˆ@ŽÚÌ'"BØðc_(øÐ“ê@(Á*™YLRí5³Ë÷õøKBÂû$hÖ(|eáNdwÀ F«´rë p§ìxv7¾öo~ïâÉà×ü“w¦\üc¹Šm#ÄÕ4ãÆalu‹±õu<\Ä CÍ »ê±Ö=’#ŒØBDpë ÀÿøÇ‡¿ïߦœÖˆ-Ø–3ÏZO×Ã`/ÿõÿý¬X]ìÒ%ÁýgwCØ–±%²+ÐB?ÕœÀt­¡ ]èÔž™’ÂÛË̗γ›ff—Å€ö:›_KH+>±k",DJÔ3TVòÝ•®¾kêý%˜!ìõun3;VhĈ$>›ý¯dÉøó§À$“g@-î‘ÿ#Ö¹­]L.θÏ6& ¯…+ëÙýAþ ön$ ¥õ9ö—œc5¬áŠÂÄ&ÁMC^’LáÞ0.œÒ½Œ A|ùÛù>´¼ð>oǯóŠÝ¾"¨khšKsÍ‘D¸Ók aÚ¿ùÕhˆeor±;TC! MÈìšÓØ‘þ{¶_fGS ž¶¹ØU­7{Qyø ÆÙxÒ¢j–¥êW?õ¸é­ÎÚm^gåÄmá5ÕC ‘KMø&"-ÂQr>÷eÁ¯4“RéÂ;Ò2Šžâl{ÿö7ÿƒñaŠ=˜É.ÖìÞÓ;ñš7<Ÿð¤§¡èˆa¨÷˜Š–f[ý=¾)Œ.ë@¦¶ä‘h€ÒP|„9cã ;œ]Ž÷îv!#vZ:áÇQ7œ¼)©dë@íf3w³µQÈÌÍq¦›È¥¶A»~óü9÷>oöôœŒš“0 Ï%T»N:"‰žŸu[¿`2¯ÈønªE9ÇâÓâñ¤~pt@ú—iܬìˆô¨@à»ßþÀüµe߉ÑÅ÷Є/_ð؈*Z]·½PÍ V(ÄTè}á½cj¸k‚jê*鈪”ž;`?P¿®K\ÿ™&Å H³‡&!YŨêÿJÁñÑ—œÆùé?öQxÖÇý6å ÷ŸÝoù…§/®Ã¦œa3Ö»ìb—ÒÌ2U.(elá™5_¿ÈPMí\«¦¡h™Ñ&2¼ä×¾ú°)—ùÜO™£ßyåíxÜ-Œ­Ž8 Í \o(«¦ OzØæÀpZ÷¤0&Áˆ‰A„"Ùj$&b”¢ŠHk 3+É F×Hd¦äÉ×Ä1<ÊÈÅÌD€d¨"∦9éì¶µkCÓ) 9’fàã-âJ{ÓÇNÄÙGÛɹْ{1˜6ÑB§sźu«‘šÐÓg”UÍTZ£%”è$¸»ä]UÝ!åâ8Wh“>ÃÔ °ßýÎ/Y½yþ4F¦ï%ÙHÛ»dšÑØ’]†¸lMLДP‡]}6› 9¼B&„hÖ-¯3>UfÛÉ cìÚ¤¸£á™½Jq#¨ê"ñï¯s4sL•Ò5bÛœGÊ JÙMüͶ¿-gõ?Ý@UQtëZKÔU¼w‹bSNðÖ{ä2ñ¯1Ußç¤u.~k¦Ú«‰úûB7Â¥AÀºûlí‹FTÇ,QÌÍGˆ¤$¨ coH¸Aøµ1¤M㆟t·°I¿dO·;fm®¦¢ŠßÆÊ&Íû­Vì6ù—ß‘€¯ W¨ ˜ób¦ús7„-/ó­yÜQ'^;ö†\U§Æýv¿ÝJ³IÙ!‡ìo«â‚…/*¾û_v¾ýAåéO|1,ô¹pŒ%èÛÿÛç_sŸ» sù#‘TâÖ¢æÈbÆö?@‡€)k`,C*3 Ö“²‘ÏkpŽ%#ü´\6LÏ3ð²2à˜çúò •#¨Ž€žùÑߊýÊ—{ÿü§ÿ—°ä‹ãGk<¾ª›išìoºFƒ¹…2të¢êQ<5ªgëÅluÓN(WÂN+W˜  øÒyÞx×ïà?½åGp×É»®žLŽ÷9ÞXÄÉí—ßZ%ýRÍ\G-´„é!0D%î/ð–“¥¢‰¹~áŒTk„Jƒpi´!Ú› ”Q!4È^^!«ƒá£ -Jæ #ú–úošÙd6²õ•[öϬyÓ$&Ö´ ?¿`¾†nÍlï‘Í{Èû—:¢¥wf(¡Ø\KžfíŒu¢ôb=g4‹c`À ¥áŽúˆV–5ÓI|<¨zäâäGyà»ßù¥n—Z>ÿ ßNáD\ö®©•¯g~ÈwNâØ_ðûŸ{®ñÌV€*Œøçи„#4~·ž<%³Ôȵžã¡ý°›o.ë“ÄÁ<ÒîS^çþ )°1¯WݽÕìÓÆ1¡è¥\<²Djë __Í?õ0™9?Íþ˜­5‡Ùš4_ýÅ ¾]?6&PttÂou-Þ¾þ¦~ðÜù¸çôŽë†+¹Lð ÿÏ'ã_üÍW@€Füá’²2³gÒÕ˜Jð w˜É§;ôÄ쬘fÇ2pNÖøÃmc)&´ÅšI²Í‡µ‰ÒÌ?<æ+A`Ú,N=U“’}=šïÁ@‚º\fV‘zt/˜) ùÐ8gŒ"¶Ò:;b=4Z`æ(ﯛ/¿|2ýx\ÕFRhÌÓ<ÔÐÙé‚è”h|èÑÖ†+雕ïy×zâÿyï÷"GŽDX;É©ŽUúÐaš Š*å—üÅ‹ü×ÏY=®½…%jHÖˆ@G½¹h£°½0#Í3“¼®–wu=L,iÿ¬¢g¸yD›‡²þî’™?êˆQ(hIÔ.]šr”…¥ÿ‚Òˆ½6Â^Í;¡ (1ŶœaÓÆOo‰|Å‹±ô2fÐÚ¨ £¶ñÆ»¿ú¶ŸÄí—ßrýpd¶t"3—ÏîjñpV¨Z°ÏŒ4 ¢btú½hX’7Y!é³`‹ð8Z‚òg>#áS«ì`U"§ÿØnÌ •Á$䈖iŒÉrè»™eª#”9Žu ó,0‡„ïg}ÈçÕ_úp#çµó:m}§90£Dìk”€»Ç‘*Çæ8ñ»f¹,…v2ü€êðÁ&Uaª@C“Àj <•úo%&ër¨Þã_tRz*váAösÏ':;‡½¢{÷šË’Š´ì›·mÈ3wjÁ쀱`v“Ì+ ÅDÓs lq%ôf‚¯­áÁ;HÒÃ>›²´øA*p‹(3¢p<\€(pe\—AóUO};އ Iú/f#â}©ášg-ºèªçìÉŽ]ód©¿hILb,[lÆ3|×o|Ýt‰åèà«)çJ–ž£ô‡w.]ÄŽ«“A„Lju3ïF!‚êk—Ê-ØÀMA®Â÷L€M†˜d±6 Wjÿf=`rÚK1Ӿ´¬Ž£)¦žœÂDÎI²ž–9&ÆÃˆ®ÉÏÀ ¬O¡Aà]÷éÖÀbR;ÃßÛ5€i3„·¼RýÄgŸÿGò€Èš˜'_ )tqVåºÎu‚¯:BbšêÄÓüÞ=Òÿç>þEQ¬S±± Û0-òÕNW`8xºj4áëÉls™f”$o=‹Ýl6c‰?kSνD^ߤ¤Žã{ø¥¯oí8Jwm“¹Ð0¡68åjMŸ,¨qO6å*®nö3€W?õ¸éâ­P­w³ô_;]ЂmÙ`Ô N·W«m¿ù lQ˜,Iý5Ô´‡3|ÏoþË4¶AŽpÃÑM¸º½ïÜèªç„BYo¾0\¨gq?p‹’ ºçQ§2{»´âD»hF¬QxOnGbœDàC˜× ]bMZIöH?Å;Dû6óŠïÛª?·•m^Æ’ŒÄ1úÔ§3ÎȸªÌa ”rÖ"$ÕÚ´ÍGωb‡#:LT¾Û|Ül–™Þó¹ù‰ÎQåã$é±ÝkÐ:P%à›thᄎ"´¸=ÀÓg™_˜V>çq/$”"©Ÿ%«Am£ ¸öR³g¥M’ba|A÷—Ps‘¤Êt¸ªÅf»o¦'€r¨g7žI‘<ÿ@ú øÄ8ÈL3’Ÿd >#‹L_ˆñˆ´j;Fh뽃a,[œµͽ0†b3VÓËXÎZ¸çTú7øítîéö*ƲiÁ¶Ôš™‡Œ‘`§Ô6žÌJýõ½ñšˆ¿ˆÿæÕ˜/_û3ßð?¿š)Šlt´«®]]eJg&ûl>‚!ÖφM™@žA"$0Æ…ç!ï&"$†D-Ø!Ÿ¤—ÔvàÝDâµùºµbÎÂBœ{ÒißJÚ2s–kZ•PLÎø|B sÁ#=4Çå'b•5 g´fŽ·]/=ë}ì$/ä÷³ùòIìãšÚ• ¦Ö7Â×§e•&±¦XL±±+ øý9}Aj#dc“"ZÛDÜcÃФ†J.F:³„mæóîϪà ÐÏ{ýgLê~凿Â!PË.Ýp[)ƒ"‰ãSXåÓ½Ì*âÄ`ðC–CR˜m˵¼Åê©Jó«Ð/Ü—;ÑšÛבÌdR¸Ó[ˈ¢ëˆ?\Ý܇M»½KÛ¯D|uëæž³íÉ*Â?ê»#x­ÔÿÞ*sš€áøéö J)8öã;ÄD„$QŠ ¡@}_›SUMãd« 9mÝ|Иº_2ÔAi¼)(ÄÌ yz¢LH#‚…”ˆ¸€…­ ¼9Á\Œ=”%€ædšŽꎎùþJ&) q¦é;AþA¸iÿ¥¾´Š“}¬Ìes˜f§MGR¿Ý”FæßŽS>*@‹’Ú¯¡.Z-Zq—²CŸ‚­hœfÝSŒ˜ußc9Œ{Ñ%f† ö»ˆsXnXœÒó/|’V–˜ÌFø¥)@QšÊ(‚zlŸ²P;üŽ”ëáË,ÞûiP¡¸Q)Í0}Q{B»µ‡4­»‚™ mÖFLìT±’f"Ym ÕܲRÉ‚¢´‹Û9ª§eå!É}[Îpus?NÇ«žf‚Oï"ü¥Œ®Mì“úÿ$ ›Š¾ãW¿_òÑß6µI§ÉA‰J´ &äÙÊhó„3ñKç>z; zReMp0ŠÅæLõqYÝ8ÐÖØè=Èšžì?Ñ·vƒI4{¦„NÇÆÁ7o79T©ÿ&}‡$ê:EÓšøä0¿7ó9™¬XuÓjq"Çzš­3bV¶vdÊJË%õô8I ;M¡ÉæÔ¸Cmk%ߣl²h+‚°{ +Cø™+š!bG§€—¶8tÞ‰db…w¨ÛàIê˜-½T½Œ\*-Aó0o’ñ…é<Ô¦Ö†':‰e>~3&-pO!UõµÍ§ÑHD4a É î¶M>"hîÃ0ÿÔ_Ú‰T”‘ ²È@çànŽ_´VkºˆpònJMÝ`‘>ncöþ–ÙsÓ=Rÿ#oü xÏÕw^·öÞvßïãÊx—†K¡ÉÚúkøÇ˜d¤(/GY³¶ÍÝ…‰úîÑHï`ØÖå ò<>,7aƒC­þ$ofDÚÈ„1wå¢k#Zh¼KòH'‘â!–±›j‚¡o—üýy\î2´oöö¤Œ’À§.èöÜ•¦Î%Äìó×qŒR Óây=‹KOÈb„“[4à #?_Øüßõö/Áç>î…ÈÔA»¶“2õ2Iï$¹ÊT›H-¹Ã¾c`þn7žû;Sóßu˜!ðA_á ¡dAàÔVž›ÍÝêçõ“kgFúÝ<ÈZ‚hî¸áUI;Cµ8ÞÔÔ]lóžòª§¾ GÜn/ãj¹¿éñ§ãU²Óop²½’.m÷|@”ÇÇÌ;ïMÂÿÈÿÂì³kaþ§ø¡ßþF|ÖG|C˜Û¤ÞÌ‘e‚*ù'²Ýè@øU³XZõ%¤c·©óa£ áa“ýw3ÁN¢Í ‰¤t/ô*‘`’ÎSx©ÛÜç:ÆmMíꤢ™tøo:Põ d³Q0eÂoS[Tݺ9Õ¡Ñ•|z8êk¬™`ƒ¡7Æóh2Jù8»ï$L¥Ý¥ò]-Ðç=þE„d¶r\™¶A7G؈9ó›v2a¢ÈóZ]0®ç½~>K%OÖ龄¦Â¦× ßlXÿ+4.G&ƒ‰m´ Ä&kjb!$yÀi‰³¼cÿ6×)ŒX»ÍB¨V,ZËNì2AØ¡¼ê©oÇÇ7·ÓºÕ9{²½ŒËg÷ú¼ Ŷ¥æ“¿Ršö^”øánû0ÜwvÞx×ïn½ø×Oø¯ïþÕ¹«l â_ìtp[‹Ä¬Q&ô«?,f)D+AŸº¼PæÔôI¤›¨:3!3-YÄŒA 7iL~ºÖžJ¢/â= šÍ‡¼Xƒ–¨Y¸=Ò†ÒSŸ\.¡³éü˜Y0‹0w3Ü3ä3 )ÌÕIåYÓf_ i)aM68lÒ f•~±Å§ÑXxÓgÿ…oÛy øåo{&€zâ74ÉÍž…4ËÃÈᧉ"ÂÏj(K@ð¼ßÝCø|ÕG¼"${‘X8ªcç"ÌVh—Õv_X´›Ù˜ L˜°Iç [a;Ús¦'HIãEyœ¤uÆ—´/Éþ‰H¼‚”Æ8’Äg¹ Å®n|îÇÿlKç Dü«i©š|ÎÂ7À'§EüÀצݢUýãBøŸô¨ÂÜùë±Æ(¸ïì.Üy娖3À…£G+æ~Hùÿò,|ú_ý: ø™'9JLjŒE³Éãü>jF@[Ïl·w#­±8cïÍášÆ—,Åd¯fÁ3œÄ`Õ–Ì1¦·fåÀ×aÜ&Œiî¹ Mõ51«¤F‘ô2ªÛås¤MˆH½U0€â“òYjî%?ð|JÜniÔ/Hûsìß„‚¤€ì%‚âYˆ ‚P'aÄ\kÊw¶œÿO{ÿïˆ1[_ƽgBéÙÉ«dîñyu#šAšo]AüySó Q%Óà )2$ñŽá…£›Ì8ö3oâö’E%É.àÇÈ”9(èW¡´ÈJñÓ³+i!©±}7«JK«0êvÐ]yçýoÂnmÑ9õÎÞ¢Å/©™19Uš@½(¦f5•ú{ë_­[ËÊÓþƳðÕ?ù÷}N Å›îú]\8Ь§›ñŽjìkÑØüúÛEƆ.Õ³V, ×…„î°”„”k‹í"¥Ï¨¡B†,êLÀ¤}ר{ââL€h‰;„ Ãg¬@÷ˆñT;á‚%»¡Ü»-0¥—fïtJ´3åêd|;‡xl½ ±oY¡¼¤‘{»Òíµ03IGÌ} fÌ[šð ÑÌöúq†(šµ§ÑÆù#F+L-®þÎQ˜#9cY±òÙ}¾ûë²¾ì-_˜¾?ã‰/ž9á–ˆ(LÞDaƒ¯ßŸÿ{Ÿ½j<}ùªEH`¤%åÙIÆèÓ÷)ø%"ÔÌ›$¶÷a=÷žgö…°†aÒ‡k ½–ÐÖºL惄…°®2‚ú]›=~ç쯗Ãï+ÏþÏ5/Ó—|Ì·µ¬—Š“íœŽWp$êeòÃ16Û3œl¯´q 5&p½ þ³Ÿüº¤T¸Žå¶zæõ6å$ù!à‰·}X"×n Rü?o~5>ö‰O YÐS8Çj©äPÜòjöÒ3iõa¦¨“f©•› k@P¢Ô5÷I!ª2/5DÕÚ2ÍØ ¥#½im\\Í ›PöÊ>Xîá#z¡‡ˆªøxf ‚¤-ûfî…1¬™±º8ш}Ê&êLÖÁeÎÖ+^biCx8íë± È>¼þȶP¾—™Ešy‡±‰Ž+±õ&V Åç<ö·ý¯-/yóLž}Á½4º¥6ˆÑ%ìV¼ð:äüùªE4‹XôLKM?1IƒÖŸ5aÞ”Ö¹ie'šÓá5ßøñ;hy $õÃL2´m%59‚0«¤‰D¦¡J¥ ,ûæ¶œá%¿úÏ'°|åSÞŠ§¾ê “ç/øå©©ð3?âëÜâ¹ÿÿío|ý5¯å®òìkšÆü¬|õ람ÿñ Ÿˆ_|ë§w2C8ƒxÓݯ¿fÂÏÌ/½åÇñ±O| L‚·•µ-PÍ ™”…€¦…l kLµ›âH6+X“$jykB Æ߃˜›Ë­Ç4n‘´ Hç”FÚ{ ¦8¶zÉ`Úµ¦–'ðßUÜ9Í'˜5æž#)ÚBÝš1¹ÖPB÷àQØÖÕL„zKƒ ývl‚Š37“òè`á]‘‚Ál€ÙSÒ™Q„…~#Á}ÖŒ †Ÿûø*ø®·?ç-/þ£§ŸûÝCËWþÕïÏ@µ9õÖ#ðª b¡²òÉêÄ8ê‰YY§þ„™q‘™Î×£ñ~Af ¬!IlL~9´‡ öd`?€TY¬0ꈭžaÛnêš+ÇG7à»ÿÑïâ³ÿ݇î…ÿ÷þÖ¿~¯­õ7=ùuéÀ'Y;sè—“íý¸ïì.<ñ¶».N`Ûþ÷ž¾?ûÆÄÇ~À?´š¿BÀÐ&;4-1Å®ñOøßãaè_ûÊiƒÛ÷¤(PI"6}Šå 7™¶';y¢^¡v& Ñg,’b‘N“ Û…ŸSm”µ“ɘhR®íbŽ^O'CŠJ´s˾0†çâ² k¤Î¸Ô’àIóµÈp`™ÈºþÚœ9HhY=]VÑ,;MÔnXš,De(IõŒÎ䘱Ç}’§œ…Àê»—sþhk¢Miu 7¿øÉ>"F† bñ-av0Õ>ÿ /"d‰à½Y¾âþvIbÿ׀뢂f¸´Õo¯”Úg‰-qötx+3Õ7­Â7¨Õj¶i°Ü(„аk¶w‹!‡«äí?s Y¤ T J±œ=õ——Î¸éø–Úc›â7}üëð5?ùä?±5ÿ¦'g&ıþà?üÑkðã¿ÿ2\8º›1Î%ÜsúÔ{Ú ®n®-wÐR¹ûä¼é®ßÁÿ¸¿×q¦6v–‡ºþuMx~$¶÷YèÐ6 5{;B¢ m¼Lý¾ßæS¶&€;¥‘3# Eú“¬sʦ“¼>Þ6™±=—i¼>Îç0fg½ “~JÏhÆœ$U¢§*pÌ'5‰+€"¥ÝŸÙ¹G24ˆ¸äÐrðŽáÒ‰Û†dO{ÿïHa“€à%o~Æá»eGù²¿ü=ßú†ÏZ¨Á‡¦˜.7iig߀Ìç"Œ1'ü4¢Kí Ð_‹—âÿ©IM›}µµÅ" ‹Ý§uWŠïçâÂDw‹%ž>Û¦ vS×¶Ü]*W·÷ã÷ïþ5o_P%ð¯~/33ç$‚”yy‚‰Õýè'<?þû/ÃoûPü·;ÃëºÁcnzî¸òÖtÜox÷/ãçÞôÃøØx*lùÝÁ O›ÆÎÔ9ÇX·ÏOéIJ™€H¿âÈÚ0Çäg ÖÆ\l|$^›»Ø°”„#ÕL“Ìæb»ÑžÀæ¾øÁ,k´åÙ·­–Øbã;œŸÇNí“"ó'ÒvMS‰1·O3YÜøl}Ìe®êÛHB—^ƒ¶jJ°×)y¥ƒæWò'@%ŽY7¢äR£‡ÅPëdr÷'J’¢½Ù»c µÞ|àK¢?WëË‘÷†UÆH}ÀšK?sÅüÉ [¶¿ÏX퓸™ÿCÅ” ¥ êtµ æœB$⟢Šx` ÜÔ0ˆê!µ…˜¨>PåþF7IÐÛ°Oöiéšù¥œ-Jÿ!Tï]&ðMO~]´±¼SIªSÊT€.Ü ø;ô)‰õR÷ºœl/ã×ßþ3xÒ#? ƒáq·~°_?Ð`âÏR$Û—³ñÃ9¸¤ÃI–OÀ íÿùH#2mabzèS¿²N—Ñœˆœ_²xÚ{4б#xôs z&¦?à-ü"+¹-õkÜ5°Ý‰§V~kÎÉ»t|ÉNÛjmVh \ fzÜ-XÌÒT‘š_Ã@¯Ò©0Èx[ïÞíe["ÛKÔŸ€ŸïR àáŸ4°Ù±ë› 5™ˆx÷‡ÃæÆÆÌK¹M¢ñzB:â½CÚÈÌÂ>i‡ÆêÕŽ€«¡êHjcûÛž•²…§Y.luÞñÛOJH5µÒ›c®wyöÇ¿Ïþø×¾e•*è^›òŒ  hm祿ú5“ö ®ý˜5åΫoÇ|ókp²½òoGüÍ`ÑdB)ËóNšù{ êì3dQk¶=a‚Ħ‘úÛä´ˆWpM%ûÍ•ÐЇi 0rcQeèÌøÒÜèc‚÷G@¥QEoÝÀŒ`Ì$ÔÇEÐòêjyOŽŸ64"Û/–¯ÈÖÆæ<èƒIßÌ Cؤ 4 8Å \á  À¥áeb+T9ÀðiÔ±&!€íZ eMNŸÐË4„eNÀš}w§¨[ø’›ú]ŸcôQ1±æý i(JcdDž‚/p7Il¨æØU±ÕÒÔ_A•Us£NìQ*QѨWÿgùúGÔ0Í—üÊ4ì3]øÚú}öÄžýäבdÙIx<]nÃÖlí]dù½wÿ*þï?ú>üá{þ < œXZ…Hç\cƒÄMD ü £an6 Á"'5m¡t"¦i«¶ú!8%53›á(÷¥#Pé»*vÊ¡©ôV\ó7 ÈaÄ5'Ü‘„œÞN£»9 ü¤&P{3pJ~ÀÕ:Q˜ %ËRn –É`L*"z$qŸÉ0:äI4̸nâ‚síØâ“¤a¦)ŸC×Ìý’@¾o÷²Ù¥=a³•ý%iÞ¬…±2#à¹ÇÒ|]úÈ>¸|!;vyL4FØ’ ÐbÅí„wËöÃ7µE) û>é¯&UV|ÐúË6ãcÙ#ý÷°CÂñ0]G&ðì'ןdÖ£…”/i³†š>³fÂeSNqÇå?ÆÝ'ïÂå³»ÛZ×$x& "iß0RÕ5ÏfŪ XfJUzÙ1Ë¡¡‰àbÏ5àI4©1SñýBI°¡Ïeá«!;ž †`&UE²vØ·D㉃ZMö'ãŠßøG-¸"╺¼H&dvO Ÿ(šê«Ñ3¸& èUbÓe ÑÓ$Úé;÷®ÓàR2»†8>9&Àî°! a%…2ešY "l³R›™4«zºP}Š(Ìgm¼ãš?ùb>Ö)#¿-½o¤ž¹9 ÄLòqP|B A&h¬6¸Dwp‰Øª±w-ª»ƒ×`VJ}>–šWk—´”«û¥^E‰µÐn—¨Fhæ¡åÿR=#℟÷HXRß‹Új×¶–þÕßyÍÁc»Þåêæ~<ê¦Çãí÷ýa] »#¡X<1ÛÜIÔMµšÞ2´lŸö9‡•äqa´nÍò®©ÿÅ 1,tß»]HM)¦ä—9¸† ±[/xß´¶ª5»Ï¨oÒ„H+2Ú¬óY° êBýqûûÔ`c{TâÝ$—õüQ¤§$µ¸ïJ*¦Úk<Õå¥ÈI Ê™ú&v1ÚL.mZ{àeà2©uIlê›Äá{lZ‘¤>PgðÅyrZdÿDbc÷»£‹™®º¡ÏõE!IA±Æù¨z2¸Ó'4 äœäh„ÁÈBgªr&_[¯wóŽ@“ü çüiwìjKßüÒ_^GüÑe8húã?¾éɯÃßzâ?Ƴ?þuÞÏ]µ‡=Ü}åãÒ`B áu¼áÂÍø¦?ás Š‚—ÿú×âÊö^üÆ;~¾æ^i‡ÄŒP¸>ö#%ÆÖ^|7 Yµþ‚A6ÈhhˆL &ö tãà½Î„4’JkÆã™3çR_YrΖú©Vû7ÅókW»§EMƒ]ŠÃžnš“¯©Ç»Í=˜Lî%Kþ„+‡ØO€HuH Z -<-Ò„3«B¦ë‡Øcu„5]zÀ–v^gƒ#šFqðÒ¯pÖDdnô˜}¦)¾W4;é_?ÒQ·ü†t_LÒðv|&°7 pGQ–}úYÁ©>.öÖ†›M®÷gAñ,Ê+4×ü݈_¿íkÔ Šn±Yc÷oåÙO~váѸçìÝI àŒ$²ã]G‘ny3¡ÂÄjÀ¾v‘$ šÛÒ<¦þ”4¿ÿ']мúõÏÃS>ì«€v1ÈQuÎ[â< aˆÓY{Ü—aL#Åê8 R‰4Þ™˜’”w4²~&¡ƒŸòäxh+XüñjNSêjGލ¬¤Hóu!á;W{ÙD!.@}ÕO#œœV§é @—ÞÔMɶÚÍ›{" 'åÇOsŒz5ûÿâÊtÚÈqŒ¤ R.D²$Í;‚h²0Ð}Rþ ›[f$Žðk Qh}¿é²ÏCTP [}Îðc´dm°ƒ%-ÜSv¢×ª±[Œˆ‹ÔDzÅö»?¼Ï¥÷ÇcoùÀ‰Ôßµt*)ÖÙ$s‡/- KúÌ :Žw^D³,”Í®»Á›­ ¤<N3-øáßy6î?»¯ ²ø .PÙ¡êØA—˘ ¼‰Ìž x3 ó!À´Å`“Áš€kŸ™Nhþ=Ì3š¤yOsa¡ÀÎÙ0}ˆ=Ú‡ugÕÔoÀ`ºÇû"5·'ѯ*œQHµ"òd¶ H{“IŠ\’´Ÿ‰u-¾$CØ£4Ì5tÙmôȾï“vTìM¢p;Â#’%žy{Z? ÅHÓ9U}7¢ ë}a;³ ½0PÛü“úmcSVâ_mF¼i¦ªa>Ãàu•ZrÉ-<!tñ56G…üe”K½O‰QJ‘+õD¯](R,Å¥cu<Èîÿʧ¼¿ôÜuõ]~覧ïIbg.‡DVІë¾I# n¾Ñ´»õ‹zÂ}bìÂi×^·Dºò°KhNùM Iµ I2ê ôJ„ÅhAýgb%òâxÚá^Dãóœ6Ú²-o8É9fò­Ù¬JË4[¸]Å@º Ülœ^à Mc$" lè¿d âdm* ¶ÁÄÔž,Î0h£¸jâOÓ‰% 9¾sÔX0–ºY ê‰W>žlšG·¼Ø„¢2µÿàì–½Ö j‹Ö_‡FüÒyƒÎ"ŠåÕ±„w3HÓÄF¾p£DÀ*_]/w ÿù oš§/Rl°˜3uœ _r5²„%žÒj哟Míåÿ‡eùlOD[Îy´5+nû¯éÎð’•v8.àHŽðžÓwå¨bÈÉCÏÜüGRà'3](`ÛÊå§ÄUû‘tÌªŠ£Á@‹ïsÌ”X;+‰m¡ÉR]†'-^¢Ú5—ÿñ¥^ƼH=ÁÎ0èà¸ý¢ñ,Ö{hµì·Ì$d†ª¹_¢Iþ>Ï9!™ —c‡CÝu°7Úÿ´&éû¨ Šn1bÛrû×4›r¶ÿÀ•W=õí8.àΓwb«§‰³Ùgâ[ïÝPÕµ‡~l£òæE´ç8@„i‰é“4ØKœ” ûAS¾ág? W6÷cc-Ž.§Ì® (¼Ï™ó14„R’ò;)ÌÓ*ÎÅ#ÝÎÔÜ\Úâ;?S2>Ę9|›×¿'Gâ]1™z.,wZ|˜^ N¢¸0ê«gCm`ì“ô¶mL8#Y˜aNˆ©¡ÔM ‘m.qñX©)CΓÒÓÉ$^0“0xcgEpÉøÄc&›V½äþXkéK>Õ—²õ;™ê 5ÅÒ|*ÿ0·kóÒ…w‰S_¢3ûiξ‡i›u½:‹îU‰¸_CÒ0ª€¢IkôñÙƒ^¢@àKðˆÓ:M$¡ÚŸ™xÎ+e0Ðh—Ó`3%9ò9óƇDÀƒÅ¤;š“[6¥ ÷Ý…íxÒRB—– ¡õ@“­;9aÑR~tøÙѹøN6±RÂÆ‰VNñû‚ý·ÙÖ!õ%4ç6Ft`fBNû±ØÄ7™Qsˆ³½?k:5ùÛ¿$Ìúfˆf%Á„éom&l¤Iš†2¬{f@_¨d‡‹Áf©(+RÁgì’ö - !“Î,žX1éô“ºX@KS›¢‘lj _“t'1»ÝüØ¶Ð¤š‰¯˜2Ó0Á—AÂ"Á/!ÃDÝè€+_Êc¾Î¼VŸØq; \alv× ª†P J;]ZtÓ„­/Ó‘/MZ'mË>ËÐ=Lê‚ÀÛ¼‡Jü‡ÁÞÍÌMSð53æàmÔM!ƒõOC4‡PÓ·ˆ)¿i¦òÜ_x:®Œ—±ÏPTS¶ÐÐÎM{4á.*Lü* RD“\œ„š^Îñè¢IÂEʳϓèˆlöÿ6ÞÊ_Hí%2OíæC§±Ž$€²B@T“Þ ªÆ<úû\Êïé ÓKØ2Ó—¬QXDb NyÀ¬¦ˆ†ÝÔ«¡”ä;„L=Pb|qÄì>Nd\HÂî+¤q¡,iöè°Äl^’Lkú•—g›6)yžÖ>3V>s1ƒF ¡%=‰‹súâ}GØfš9h‹&HÓ2mJíº·ß"¡yù!/û¦ÍwEÁX¯w,g8ϯw\*lú¹:ÞOs1ɼÞ$t“ð‡!IèMÔó3ƒÁ~JšÂ€N`Æ@†Á™@˜èݶÞI1P†/’ùÄê=Îpyî/<›ñ¤1|SmÕ꜄°‰9_ƒ}°‡~•+ º”»c"H{¢Vâ½ÂŘ¨í¯¬¿ÒN³!ú¹¤)±tƬaú»s@úwX ɾ×öˆ_4âNZGü4Àfïà>+a§.FfžX§ºÆ`WcŒÇ…%ÖÐ Bjài¡ë!…Òö¬Æ…þ*oàÎb†·f ˆbÅoyÚvg˜Ë#ÍàJ‡1lvÂÑídˆ"“ög•Ãè¾Å©-„Æ_kÕú’$ÈÚá¸ØàÂAv¼ó. äw§}¿¥ˆ5³EÖ·@ -%@œÀæÄpM# ìžª›ñ§ãelË/ÿµ¯ÃÚòʧ¼ƒUÓÏÉ[‚yšnƒ4SAݥعk­ì\ï~'«C³þ0Ä”ëÉJq†ËäCì“ âµÖÐ_RË'‰í„åa7> ‚›ñ(bà‰hÕÉÙ)ÿØpÙôÁí_ÚÖ“»hù€©KNÚ‰‡÷ä˜iLÅ϶n­MmW×*–÷2íàC®ù„s¬¬?é~:ñÜD›1gNÔ2K_4ö-_š3c%xhÜÆÖiH•Þ|¢œ2†Ë±- >ú®Ú•n vY‡ $lSA:(ÅÜK÷[Æ‘N Ö›ºã5酘Ô»LêÎgËRÀ§)+ˆ÷«ô·¡4?áG(‚ìúiã${¬¤Õ•,iÕ'fl‘ÒàíÌÑnýXètm ‡Z*ˆ¶¶Õô3bÄcÙ`£§«zq±˜ÿ»Nß…Á› ¥ž!Ö$u³'={‰($_díÈHÛ¨ÕÄ3gFFk/ h»ÅëÒ½TL7låë~æà>öÕU‹+À…£K_1(£–BÚw,žL>æÚ M®YYf˜8[ki`a<ìÄ1YuÛ‚Ó/ŽƒïéžÍu.-cÇÂ|DÈ¥\C€ }œˆ÷¾’%¤ÍàMÑRµ#³…«…D*´Ô“±Zž%Û\’¡P3âJœwŸÝÃIÓáH7fFXª.2Ö¤~£ÝÚEž+ZUó XÌÿˆ¢-¿n±Õ³k“þÏÞEÄÔ¥ H›£×µ†G;€ˆº¸0Âö}¤0QŽj†0S†HŠ*2-Fè-JˆE£²pC5Ž —Úµ‘¶ò¼_xNÆûñ¶ûþW¶÷6¬2\Èç¡gfXÿ°¶‹„§FªX>ñ¨3Ç]úL“MH¿ÐòN \á&mÎw‰x7­»\…/Lbs"ƒ„È|:ëûn>÷ùI˜Èø»Q;NÙÌ_Jp™›ºƒ)^±ßÃÐ:™WËöѹð„#snñp¬f+ÆÂ3‘Sî•>÷ÏÓÊ[ïÌ…;mÂÂ/¥o&GÜ ü±šËjδ|³¼ïÇéÆkcâùuH›*.à˜2Öbík7x¢*åö©‰ÞFŒcMð¶)5Þÿt{‡—þO߉›©C•%x'¼âi%¼}—À1 ¹"jÇ%|Šò 5É}ˆ>…5[¡!Î0ñ“AÁ¡¤átžÊsBàƒ©<ྒྷ»påìž$`÷†õbðDLÉD ŸJ»ÚžZ»ûÔ›{:\÷X[®­Ë^8=w»»Y7úÐñÉÛ „SIÚ§[ÁxÐT "¸%åŠè•ÛØÑYŠÈ·‹%F5™c7Û>\Éà¨Ò.…ONÍàà€4Vc„t ÁHï±3Ö>Ûoµ*C×¼2Q6çîÔþ–UŸÌt¦Íô‹[ ωa/b”ŠvhnЪê²Ý±Ù%h˜´ÁÒ‚J=„NfC¢9²9C~OC`Q[ÂÐÂ*X§ é 4e'}K•þÛ²Áéx/Ûw©ûB1éÿîÓÛC¢o„¸î5‚;öiý=†Ù¤mß³F ”ð#6iØöÕíØu]DfXkºóf¹¦Ï€9' ‹y± ¿j7Œ´ûPëOº¼òõߌû€OŇ½Ïÿ7^¸"Ç€»Óóz¸È×32ÈfÃt]‹œ&ºÑ†xÀ;>§÷þ .[ûES$Ì“Å`®ˆ·5—Í:ÑÙß#lz_ã·ò°ôÏ!ð:K´Ã ½­š°0™ãÛÁ3OëÍ„ëÌKÑ›á] 'ß‚ˆâhƒlÑ>h\̧6˜úQëïVß,É+è–1l£"à€!DŸ ¿‰&|Ç>íp,ßQ¾â¯|ßAõƒP¦ù°ÙhÆÜ=Ï!9Ã]7f•8§«¢;Ï—"©oAËõb ‰°£8¡SqI¨\ãÿ›Í_7ØŽgç&þÉö/B€&Å“T48sƒ‹QœK0tÌ_Òç¤MD¸epþiLÒˆM°…mÑH—«A†fêSg4"ê¹ôURàý*êœìÛý'wã‹?úùxá¯|Ù¹`ù@Õ‚_üãÃ…£Kø°ÇüOxø¥GW$FgÚm&$xÙtáP0ΨiyHäÍÑ5Í(:K¯9åCðÊâͳ# Þ‚F)OÿØ™šÇiU5ÒÍk;Òß^àŸ¨·ß«:‘¯3ƒ`¤±¥¥W†¯+-è¸HõTçÌ[&q‘jÆ\{ÎÖæ› AÄh‘‚.z¬À›Îý4‚¶a_ü¦gŠÏ—çþÎg¬ªÇ†LzMfS½~·0âBiâ2û—LeþU©Ð¬ ÀÚˆé¨&õæ Á‡»øp‹‡{¢`,ø— ¶zvn˜šôÏöŽPN^‡£^%F856 ½dç  IT¤¶sÐý˜Â mÓJü曦:ÎîÖœÔÚ½TÎåA2„f0œa ·Üpn½tÛ¹aù@…bSΠ(¸ïô=xØ rà%­Œ®EôËw:béšÎ‘Z™½” c)~î"©aŸÖKÁs½¿§Ñ¶_~Ó4<ÐwkXY)4~Ø¡6x0L' <% zׄlúFsÍŒcFŽ—£Àød~vpfÿ‹BÇAKiÀA˜³Ê5ñ% š3æ,GÈXtÀ›ý¥oþ‚kBæªäÃDdW&³ÆÄ—UŸžx¨¡Nó¹ÊÍð%bHÍ›Tª ”Í )Àú°#îZêeoŽül·Õz³×x/=§ôÿœOø) r„»N߉Q*ºð g¦F|’±é\îè²Êò±6B³ :nɺ†À¾„wj+I³ÞÃGE<D›1Ðq“±¤v ”¡jÑ»¨Òƒ¤ŒºÅîø%<ìâcpÛ¥÷ÁÍN'….dÛ²–дXEA$J ‡~As”1Qrül ”ÂF-5tºGÀ˜NÇ@„gM@lzQ¾$ÔµtÓRÁ¬"šLàš4çø'FÆ>ê$~t¦5:è¯ÆüÜ,æ³À]Xº`|[½Ã,°+š (âE›ÊC@@üšV-ä q4 ÁJJï*°Ð0É)ð²·~áuDçë[<ÿmnh6E3C2de`E¹Îp0ߌwÚLõ/çdCE¯°Y-a`ÌÀ[Th3ø8Q42 ÎÒì¸éÁPŠŽ¸ëäv¼í¾ÿŠGÝô8Ürñ¶†7CH¢ňp‚MlÁÀ«ùÑ×ðЀpå¿la€Kßh¦l ±æÅ LÞÌ Ñ7ȘdO1û¬éi·ãÌœZHáC•Þ2kIb{œé*ÃÊ[…KÝ>=Ͱ"MÕ…¹vC›9ÝÃ÷t¿Ï j«xܳΊÈaCö…A85‚–²© Î,ãtw@‚ï|ë]3ò>óC^žÌ !lJBM“´¿õ Ÿµºm#ô5Õ0e”L  /´Pö×\øXxhI“¾ÕæÁXd>±¹vÏ)oˆøqDU¸>Zt ¥õf¯íx~ÓœÉe¼ñÊo:® CΡϵãùHâjR!‚×ÑëAÚÁ‡µ ·ÜÔϤ¾ú t3Kû%%Ä€M²kýW`‘fQÂ`}ùÈ\pÔfRœž^~PûŠŽØ”S\>»§Ûûq6žàÆã[ ‘j|)h’~ø‹ã˜Ó¶&hÐѼL -P‚H L˜A;©–ã—;Î×$l fш’IŠ4–$æÇú(Ë4¿^r;4M(§eDÃt¦po¦e$:Ž“ýFùðEµ“A¡¦Š“”#,‘é‚#Šïüãgž Q¿ðƒ^–Ú¬•´6%‚á'ê _þ—¿7¤ÐVÖàu˜ diu¶¤È¨,Í3¼m€¦e‰£R1XNP—¿ìEcÍHÅLw4  2 Hñ3 £ZPÅX¶xÙ¯_úOˆGÄ| Ç.8lìÙ  ‹/hí_ÆEó»´M2>‚œµmû .1µµi°…ê˜ãÔÇÙiÀä„÷Óâ¨o0BWb™Á¥K7ã‰7ü¥k„ë[6ã n¿òVüî» ·ÞðHÜpt£¯adðâ !I«-´Øµ]Q2ü–/‘¦uZS™Ô‡o€`o8]‡3X¡Å²•&M‚Šöߌ8t¦0Ç⛉S-ôƒ5Õ¥ô®®©o€ìP®˜0gFôÉÔ”4Šnèš>ë0ŽóÀ* c{_œ(¥â´Ë$\ŽWWW}ÓÂ~ªèñòˆÿ3>ð¥5Fgˆ©öDWŒí”‹Èbvi|Å_ù¾ `g5›ºvÿ˜¶kB‰àgÓÝØ€-Øà/Ní½RÈ&ÝÔÁbp0Ôk¦ĆÛ¥ï£Öƒ_š±þ\%˜f|w†`Ï,¤“3oš©P¿löií œ!±©]†ö®åj±qc ¨ uH!á´Š4M;Îu„–¶ïÁÍ Ò„’j>‰0äwÙ– ®nîÃm—ƒÍxæ³e`ª&‰’ö (Åü᷉쨖٫¾[Ûl§S4$çªAÐβdXåÒ½;ˆà Í "¦NÌ ßLsñÊaÞ ¿D¹;fn mĵI¶Cº‘:]R ëA„s³®DJŒƒ…—:j+TWäŽ]BbÇ‹m)›¤AñN„ÁÌæñ:JD›ãâç¸ó\yƼ$–Æ¥ 9 `’P2ÿ„p ¹½9ØÂü@ ¤ ì*¹‡ÄÇ^ë4‚Äu,™EFn/L n ü™Y MM ´:H7Z0jÍð9pµã\ùÖøÓ¸ ÄU¹+¤GOògE#4g´ýÐð…8¾†ÄÈ¿1‚p}¨Ÿ%p8Ú~kXlŒÂ¾¶á=ºT|;ÔWK:;c„C¤F ”Ru JÆò , Åéx¯¿ãpÃÑM8Žñ¸[>È¥nuçi0ò¢Åa'ƒ4©¿[9õD [;™*I óüNí_K1¡–ê—B¨gcüy†& »ò0ÙU4«Ä„ŽËÁüáw„“Ù‘é;) é wz*¡»¼mpN˜>„}Ê™V(¯!¼*u×´MhGÀý€¤æãi”:¥•š´PÝ+ý?ý‰/&â´Á{ÄÑôlî2—L»žM#2×ô"Í#Wèþ×$üùb”ÐÆ¨x“ø#S™Æ…j òÖ3dË/džÑH‡~D1–gÛ¼ôWO÷Àå‚Þ„Ç\zBäá·Ó¶ “ùNZºZŽª²´Ð"‘ÒN§<>”ö!RE7“¥„6Ó]j[¢m{f‚Š1{Ó,¨Mj?}þ ÛcISD̹åãýòÿáÛ¯ ¾t¹²¹÷žÜ‰+›{ñ~{ކã†×[ ?X$lÏ˜Žºÿ-¨T xhÖsÉÒânÜÚž íSÐ> P¾ca+3Yãè&—²MPÊez¸>˜†°@„(‚'1TG…xFã3­Ë©º 3â‚zš¤¢ûNçih¿Ë„ZVse뇡(éo²-ñBJ¨¶‰®ðx’˜Æ€Ÿ–§½ÿwàiO|±O‰cï íú`k¶p'‰Æ<˜]Âøt‡«LRóÿ¸m„ÔW4·ÛìÎJ‹]iAˆ¬"#„è3ŒoªýúI›©´do…¡×ú{ÝüU7A¹¶`sto9ûíXnChvž·Ô pšD”Þ!¥‰hÏ<'KÍãõù¢—–hð¾™± ~ç†!1šn"h:÷9ÝYàƒ­ý 6^»˜†Î‰¼ß£Ÿ„oþ„Ÿºf8?PEQpïÙ»ñ»wü"~íí?Õ"ÃÆ0;4œu)Sbnaãvñ¤â–ÛëêIlëÉûd¶e‹QGɪ;ÄìùËÖê˜sÑâ’®ùÓÌ #ôí3 #ZAœT”襯¢YÓšÃÌØQF ÄGláð¡ m°± Ñ¢š!'Gó%a¼Åì.I£4Véþ?jÚ Ñ¦ñ>≓A}¬f*scŒŽ»H'²¹ TŠ/€ q|£:pÜf  ¿­‹ Ê­ìDÅðÒMÕl#~Ü~s; ½Åƒ t­ÛeßÄ… ǤJÂ=ç7?sR÷kÿÆ+½y>гDŒÀßdâé40†G.³k‰ƒnûkàT™¥Ùh‹Vù,#Šn0–îx\*LüYªo:§ĠBØ4»<Þ_œ¨~j„w‡´¸ŠÝ§õä`Í/àM‘íV´…ÛÙº´wZl^õ ˆçjÇ ¼}?do÷n‹ŽwÙ–3üÊÛÿ=Š|ⓞŽÁ²Ç‹6À„>›A[Díi‰³€ÁIP¤˜}ǵŠ$11ó½­ñ£ÙðÙºX¥f½ØZ˜3ñ×艿E‡Ã¸›|N¡£½”ò}nÅÝü öDPû‚O]Œ&¤¦lÕqøgb.¶WZã’|ÈœØ0™Ú¦*䈑 ƒe@q®‹ì°ÖVÇwK®áG£%ä ëGR›Òmv¥zö—c½3^<£“ØlolëW3«{óµÅ‰²/µQB2ÃÕŸ#Þ×í¨ ên~*ÎÙA173'~SD¤°mÚÌõ(•ø‡Ý$kí™_AŠl2q)Ù>‡ÝÝíìt /¤ï|?pÕ€„®Œl’¿?#›~ÓBj‡Ñ˜u¾G4/ê3i;±P6²úù{Ïù„Ÿ¼.0 Ê¶œá¿¼ëçq4Ê3%~ç‚™ƒ¯TÛHÞ'Ó Â4Ãþ“ ¹`"¨áýÝuØÎ×ͪ?·=ÆDØÚUÚ*Ð BÞ ¡'åßÉT;ŠÒh#bÿõéÚ‘ ×îéxßbÈ& åc!nÁ6)gêÞ˜ÅD#νå zóåeoùÂiŸà”8qL¡ŠI2Ì¿Yö=WC$&5Û}ò§|Óo|ÊÂ,„¿kmÖ¦™Ýõj±3ˆ4ÔX|ÓpT³ÚªmKúâi¬ c~¤~¨·~]«ó^ðÉ?‡KåAL@† Ä&í»é%;ͤr~1N_Ü‚0û°M¾ËÏ䧸ù?gDµßASs"#ÂÜ‘L=¶äÖW“”‡¶Q’S™lãu<çyðš‚àÊö>ü›ÿü™8Ý^Ũ[Çr ‘¡ù™à0®xÆÁlɶü>ÄÑéþ„LÌRFˆïЖM 6u±ó,® M$H­í5îÄ*ƒ\6a˳ t–Àï>Pw¶vb,p†Ð‡ˆôC#Á<1†Zq ^7!X¾4BÇBžú“¬~Â2 §{²cu¼ô-_ˆ—¾å ÒÀ=À¥…Hռɸ!Åwµ)é5NCù€•é:g0‰ùÙ¿ù©xöoüÓå tÜÝo5jÔ0òyK²ÛµuÌkãMféÓEÏûìo²”6Âky‚ìŽßzêw,#T¯ùçÆrsñ >‡¶KDmþC#°™6'êÐéιjÜen&ìš ûÜY,ÆÐ˜ DCK Vò•ñ3›Ÿ A‚Ú·±pêÌÇl $ÁæÁ]î9½Ïÿ•/Àf<Å0 ø×”á® t»ßÖ<¥&'Á`rßó’|Hðáà –Ù¤Û¼³{Yб ¬>ô¯Ðî[6ÙÊÌË|ÎË›0ó‹wP÷e˜µYÊi0zx, ­ù¦J¯×AØáLRs¦“åètÉk,ƒ`îT!(~Þã_„]å¥oþ¼äÍÏh¯Ì¹Xbnil’,ƒ±{ªºKíº°ßü[Ÿ†oþ­OÝ9æ¯ý?BȤóΜÑKù7ï ˜<÷H'Š–‘¥ášk-¢ø–±CØÊ]'ïÂÇ7ãHŽ[þ&àh8jŽáj\1ÌfÒë}6/íaT;iÕ‘2Bf 3¢ú¤ä«ª”ÝlA¯x[“jRZïk²w§sQ1¬<}ÍŸ™Í¹¹‰MV&2K#LÙc€ÁMRÖ zyèÇÆÑÑ×§lw0NeÄN»7µÛRö”¿éž šcÝi5A–,LŽ0ݹY„/¸™yáŸTt“Å!À7ˆ¹ŽÑ@Ì }z_àõ+ÈÓHb§¥ÚþS> Íß’¾AGõóõ0ÿ¼ê©oÃãŽ>ÔµFŽÍ»9q ÓA˜~»[¶91öÐM¡»…[Ô›•ÈdƒJ„?K潆QE$ SuÆšù`ω a÷“íÒc ­À—¶~0‡†îÜzé‘ᨠȀAŽªF«cÃ)Š 2ü#:mL!>ÃB©yŸò­'B‚s°»™k!PÚNA˜{äD–‡¿1q“’'6[ ™Y’Ó™ø€Ãz:;#Ñ»ÉÊsÆ<§îŽ˜Gldë«+Ž%uâvë…w\Ó,Wb DŽV¤0@n\€Ï{¿­Nñâ7>=}ÿÂ~Y ®Ô‰éÉb~gT,¼E„@ÏýíO_5ž¾üó¿þí×ÞÙØ;µG%ÑãT–JL¢0j6}Î_ÓŸt†¡Ìèԙ樥E]ûéÔW?õ¸éâ­5:äôƘ@2ñØZ´ãkɶΠÔM,áŒe$Îê`‚i“¼“O Ï Nœ"Ø7Ž(¤´¶ôδÜ|Ðß³¯& /D@Z‚Ðm[‰{ùâÿ1øWûGp4\À¹€b[6í4pï Qµ9†è[”IAAKµ¦ «Ø™<ç(›Û߻DZuœ*ÇšE£~ Ÿ4x&­Ž Ü!Ñ!õ–g Õâi¹ö¡¹¦Í/§±–l\’Î(eôka\"5œ©%•  Hiø%Z¥¦é¦…Úxby·»[«˜sþû};Däà4Ðs·=óI/'‚`—ËÔþçÔÁçýîgâZË×|ÔgõÌ%¸½_ šj߇ˆÚçŽ÷÷«›CÍÞl|°0#(¾&~X )¿ñ¿Q7˵¥~Ꜷeƒ»ÏÞ\14;¿Ÿê‚¸'3ødF‰H3Ë”iÐ|—ÌÁ<¯ jä\o+Ó²ÓØâÍh¦š¶´Um2ÈDiù‚ÔÇÅÉ’mƒ%í_ˆà53Âs>á§ðU?ñ÷®y=ÈrñèF\‹ÿöþ<ж¥¨Ç?µö>çNo~<æ5A$jÔ8£8‹á«Qcœ'Dš˜|M‚Q@Œ3F㚨ßqBPezˆ ožî½çœ½W×ïîªúT¯µ÷9çÞûà™ ÷½×^«WÕUŸº;ËØ[ŸCA©~,`ÙdÃÌ%ú¬1>Ú3É™Ë?jãZ2£uòWòýõ4@ï´ÐL§6'Ãk¼%T´&DݨJԷͪeuªr½˜0ê®Xé™FÍÛÕÞ„Ú®ŠeX³ÙÎP—é*Ç,‘a±˜ó Y³¦©Ú±'=¨ ‚·\øy?ø·_rÁÏ·|óc¦¡TCÙ6¥ÔW‰‘òQo+ÀÇ-¡ÙP‡%Ùy…þ²r8Æí° ˜_ÀýF5%¡¨¢¿û׎~¼íà¸kùN¸ª.Mû¦,2¿$OwSXÿÚþîv³¡Ç8ˆšCÄÄ VyWÅiÎÆ¸’¦LcÿÓœ\çhŽX–¤BÐÄ2ú´nA”-ËI NÑ»çkWœ¸£®±Zïc]V¨!·KÀ ¶CžIÀh®ã!žQ4ƺ‘žO,åàIÚT6qd&:-,lÊë5ImLdÐ¥ÂqA™9­~¡$Ú0Eœú’…]Ü“ «©l"³zÂdÅãišè¦=ËÉàXï‡ÃÙÖ¨«KïÄ&£I‚6#;¢Ð]4ê)~. À_Ï<æ›>àg¢µdJbÞìh?f¸›ÀËl2’™ûÈtå?µ3frS¶ÉKK˜é´©áCÛ$& ´Cßc1M¼*TìèÇ»p“›qó6aé&;ÒîÉ‘4fëŸjvr€™)C(p‡s£nÒBh ‘¹±ïyÇÌýD IœB´§F¿&ˆD>õÖ†f²dþJRá†âu>óS^Чýúã.ÁÌÜ=E1b½>Àþx¾1ÿ€jR,Mû¬&ã€ÉÆ4ƒ¿Ÿ×Z©&4ÞÏL6aÊ(7<ÛW”4¾4sHsÉT2ØÍÄd²\ G¼91Î k¼'ñ DÓÏÏò €MšK{g‰›\XR?–©0¡ÑrÇ$n7ÉÜê—ä:êÇ`lì÷­ÔBí¨©Þñ¥}ž£^ðüwÁ™À›ÊÓóÓ~È=￳ÄÂÝ¡^Ø\ŒòÙw²A"2§òø:€š²oS3‚Ùk¾9ÌM@a ªñÿÚR@_œýßÑÿê`gt‡è$’‚„¥ÐÁf³3gÜ|h|r£Ûúí°xÆ ù¤`hÂŒ°:†ì JBÎc¶ &áÕ~¼¿ó pìbö’ˆ±Óé=¸|åo~þÓÇü*‚ÝÅ)ëq]™‹~ª] ñ†ÝÛ-m°í”j/=ò¶tÚÄýø<ßÄ ZÁ\ þ¬ô `Ç~r–WÿkšF—ÌW±Éh’4#·F?0cfC6nJ|b0l£CHgÉý!³o}&Õö7iõAótf vj±ýŒk3uÍDµ#LVÍ)ã‹ ÌÃíùe}¾#K«ó‡füSžú¨aĮ̂ƒÏ¥Íƒš o%÷ûTÛIidn˜8"'Ës,$ŠmIs–)Q å|«´¤¬‰ñÛÎß‹39ú¿nƒ'To ÛA½GÑ 6X_Û?—’묈?råÍD$„ÐSu8ØNœ©ûü ucbáÚ{oP[ˆüóèòÞ o|ièN¡‰ ¾÷S~ ßpö,d‰Å°ƒÀþ¸ªý€@¤ùÀaÅUã+6Æ'cëLü>—¬aÙ¹Õ>”FXMî©xV„&Æ“€ÝÌNÈŠ`R;̤2M%qÑ)"ʯê»íÒ`è™S³¦Õ¿MŽÿÓ®ÏÌ«º¶,ë5iL°ób$Q#RT ÌmÖX¯.ÁLõ®ëÏ–ÙÈ]>Ĩ⠭NÁW<â¦Ù”a‚ÂêO%ñ™M =æb Y¨sfÆê…›hc$()*’“D…Çù†1-!@g$Ìì­ÛÅÏZ­qئ*„…'}VEi6ZÕ‚±¬1– Oÿð Ÿû6,‡ܶ¾²3:Ãæ/qÍZ$P3ç¤ßè~šK•vÉà3ó9³ƒNâ£;=O¯3[j#Aqí—iÕ9Ñ ¬2ÀÌoåCÜd´pŽvÊ=#½^œX¾ûËå;Wã ìa<ƒÍƒ,Q©môq2ß‹2šo‡ÄaiðñGvú†IÆrê›Sœ¶te­xKa3 q1³PôÏWZ.687Og2¤'æ±y̽ÿhZE÷^ÖTBû„Ó-;»½íš÷ÈÇ¢G뵘Õ4É0Žåk›&ԇʙ™Æ4E=ĸÜ™ÔÎ"1:‡?˜Ì*Ѷ¼›·¿…E&©ñ 94Tž&¦+³çH'q[„!ìÆsrl"ßRkWD0ä>8Cw¤!dªŒàG<Ö÷RH˜¥ôÕ8ýk]VìþÅÏ};Îì^å°‹óåöĸ““–±å]ÐI^ûûqÊÐÙ®ÓÎ`X*g,ž³úÒ®bH9 5|“œ4íD¶¶9-§}Y‘¸ *éº$GK pNñÕ¿õ¡¸sÿ¬ÆýL]Õô_ñ,´¨?ùX¹Â:Swø8SÖ}¤-Qƃzkd#óWbnQk´¢ò‡ 8Ù˜ÒGô‘¶¶}ƒgÆrP&õ0í4a"f¦IŸ™ñ¦Ì;Œ‘ë <ÜÓIPU~$¤IP?µ(Ͷ»>³Ôäß(=„„R‚„U»èØœý;¤¢§¨Žª I¾̘ÝAƒhçô¶_›”yÛ¡x<‘ÑÓZúMꬶøS!6MbqôÏôµ^WAq³CŸ _;¢/BCE¦¨Eꆯjo­è}áŸö9îîSo‰‘[?8·ÿ¦ÚB£GcȈº’&'1!£‡ÎãNb&W'L8…:yuhŽhX•å(Ñnþ‰»Yþ)„4çFK2”è°[÷Ä2,–58ÑrÕŽ‡`Êd‚¬ÓÑg¶ @=¤5qzËêÌÚSg´=ÓQ.‰ Ðåhí´y íLóÜ%í¡{‡ö–Z§þ ¡:;d ×Fƒu Ý7¤M0Þͧ“Õ¶WÕuN1q«»5ÐC£\ …Xõ ¥©;Yýš§ÅÑǪ1ƒf©ð™YÏ€úN虿Çý“¢áôiRS¦šH$±ë‰f¦s¢§£#Ÿò†zâÖ¬ÙL˜¾1Á¤pp\i*ÙŒ»&)МÄuµ”úOëߢ#Ʋ þì[q!%…}î¼3˜º'}lcâÌ]=lÞ"C!í@Bæä($8,Qœ%€£CYø”°a€ŸÖ5X>X¶O‰´–àÍÞcB%í8NçX¶é1GíâwëxŸÛÆ 4õ6{Ì <Ù°›õT¾ý÷> ¥¥_,–ŒÚõZqÉ_Ý*‘®$´ ÿu½×@ʶ M°ûfÔ< Ó˜,i sÈc)fÞY;à$wŒú)àÅeµ.!•àA®¤8o4íÃ×{ÁÑJßWb­šQ Ø23˜¬0%²‡Â’FÀ@K©!ì[éB24 ³ÍY3”:Þ‘…1¥áŒ(²š“Ô-ž§¾ÍKM•[EóE1ˆKyö Cy½‘)²ýž„³œfÎi«´¼=fúQÄÖzŽ>àtŠÒ4€ëqu9À…wüêMr·!5b¢‹~“„œè¦Õ©b :¥KÕŒàÞb ÍÉÀŸûŒŸƒ§™Žß¼:«ȧ‘µwš`‘AÀIÔ“2Cï÷±ð¾† µ}ò›bšùŽÿ¥ ž§wEÙ]žÂîâDÝ>ª£ks¾]ó¹¶ö-¤×w³óÙøLø‹¡\»`¸i]³æÀ…ͧˆç€võ¹©Šy]â4~3G2ÖWu}êÌ5àj‰`jZ6SÅ»ÈTŽÔ$oW/ˆü£sÎ|çC.k˜‚ìô%IˆñofŽ4¹ÏB’Þ¹èšS³ Êt›¹“v‹ô±ŸKCþ5OKEÿër€üÙ·áBJ ûÜYÙ\4fN`ÂW71ôdC—H 1qó½”³2›à­¯— ŒSÊóã‚Ì~k×8Û'èDþŸÜ? n¿Y±í?¾ö«$bè"Pœ9qÙÍÓ»ª\±{ Ú9qha¹FÌÿ`£Ì´.….¦­›3¶NHZw~³ûsâѦ”åÄ(ú‡q¢#oçU±î™ÄÓ¦4ÁÄmпÓñ­Ñ¢w[fW{€Ð±Œö·XÌûÐÎ0Ôj&'¬­zh7È\·ž™§„SG¨S,»œ(ÆÖ%uÖÛúéjƒ<£Ž*Â,"y%v†ªÝ 0Î M¶ÕI(%ítv ©8¥.d„šˆ8}ò3*s ¿îYå«ëCq×Á­(eå° ¾x`äïfÀ0ZBÊKº¢>C­ö[èÁ ·Ù\9Œ†»¢]°wsSƒÀBPäʲpËù$@´6//eÿcÚ›ŒGr§¼—ÒSs†ò;Û¯)01kØ—¹óIº©ÝÇãK~úAÓµŒâí9ûeCJ–¦ñ%ýl² jÈ“fØä˜ °[c4ù/&4:”îMTE“-üP‚1•R>Ò¥ .u*_(-–¿6XXÚý¥?¥É‘£òzx}³ýëèèÿG_qaèÿÙŸõ;Žþegl•g/°Ò%ûYøZcâÞgfœšGË„€zŽþ¹ ˜Ñ*ŒQSfP€ù; ³ÌÀ©§­Í’8WFü=Òsá€à o¢õkãž\v†“ØYœ„(0¶SåjŠh;gȲJomf™HJ+š> ¡}âÖÕ×—p ¹VeÞ 3":Žßñu‡¯3Ë»7AQ³ýjb_ùξ爪9€Æ@f‚°d¦`»IÖâ³ÂÝWîRœVê7‡èð,^£†³BiáÚf˜ÞôÓ FþÈ7vŽa6¦¤Ò¥Ç©4û4O?a”)ѤiI:ij{âõ0É‹YS­ø5_#‡–¢@‹z䎵5$yøT#ÖßþJ¼¥(eÕE ÿS¸ƒ ý£14¶Eï;ìHZ¢óÔÁ‡Cv‡¨Tæ;Ô,œB©¤-<ÓÎð:Ú¿1åAÚîaI‡Î&XL3õeâŒöSɲ²ê¿3ÁE=ô< ¸–d£'Í´vnïN|Õ?}ÖÏÙ»¢\¾{5Ãå€b! ˜6nÉò|‡7‹cŽ;œ¤¸ä>lt6Ô`ãx˜à$ÃxzMo²¶ËdbÎ$GÍ—–BÄ7}"ø³ûKÉ„”@¸ Ú‘˜™Âö©ÄfЙñJ`Å-8¼7ShÃLçú, l714‘ý@³š£w •OÖŽ†LO&¤$‰…&zNºK š˜$aª‹åNjwB'ÍrF ¾L©ö“z¸ÕŠÆ„s`qü5|ÓÅŽ*…+"]/j‡@–¤Xº‡¢À¨#^xèö·á­ã«åH|ÐPIvóvný•fÞèlà8rÖzný`öhÌ8ÅøÃŽo” @efvÄÑE[°S•ÅqÓ6Xó´1ã”u"™q8ò†Z©°æ‰ÎR`m.„ Åû.l"Š_¢(Eƒ¸€vD_5ýØŽß‚júÑ2ÆÍ (?ð9¿‹+õ~ŽnÝ´™.ˆ±úW«PbLÜ6LH‹ "G-ýDLŸ„À D)ì)ÊÇĶÀÚn¡ªÜND=}ÇÚ àBÙG8ÇÙ’ëèhp½•ÝÅ)œXœÆîâDðY@dQ{Åö üžØ+btA¾Ã0ãNáOB ¼Î¡.[wËH©~2w€šÎÕ¥vhìÎM÷êÌëI²90fŸç¹oš’™½Ó— …ž Óg‘Ÿw¿èäùœ‡îc§)qÇñ都¶E´‹j2#„¢Eke€ÄCtrÒžŒ÷ÄÒÍkœ‡Ž7>É rÖ¬žÏšñt.n¹ˆåÜ&ñ{4¿›C»²Oé"·„¿#ùz²bÞ©«íMu@N‰[&¹¶…˜íºEú”§'dËt4 §*=§Ý"Ij–¶.û*ì¢j˜Yû¤çO~o{›NIî ‚vz ~F{÷·4Áý¸6‡…ÉÒÁ&–"–…´÷Ár™o@Zڌ堙ÖË £^ªÐO¢|ÕÔÿ8‹•7¬ô‚"‰ûW.1Ïý†0Oƒøþ·‹ã÷(!•¶w vÜ6L5€ê 0­…T92q™à«¼[Ý4‰p&#m‹é´án$/hÞÞ…[jiÈYV¤mþ‡©~Â\º3lyYÑç~¬¶'Ð`J Ìå‹Né:=#é}Ê¿+fù#eywÅþÌl}ÏOŒeÐ\ÓN\i ÂeëáJÜÏÇ7í˜ìUäzP™“­!0XâI±œòH&•j–1í#;‚AšÀìŽ`ª,L>ñ¼’êÜÛø›¶@htb[•ž»¶Ó©@¤þõˆˆÀ”l§Íww)ºÆþ¸‡ýÕ9ÔôäF«í¤0ßY‘p=BTh´ÆŠ#-ñì& AòLÇ+ØX0ËñmL»—ÞŽòõ¬ÿjµÚZá)Uí«h—•¿xoX ¦“W8"“›E3û­âzDaÙÔ³`b;ó1î3±S³â—ôÅõ©ÝÛåià AQ†$m$ ¥Äl[4©óJ’[ç:ÒÎTôøgž#<ÉàŒiÒ§p*Ù.ßÐ-ë¿ÁZª ¡ò„"·ÝÀk]c=®PʈóØÿŒ‹)çäV¼eõ*¢‰¾WýÌvÇñõBXºY$Ægá~n6âg ˆ)‚.‘@>€&òÉa±h³žÞe¯£Šƒ!tÈÌÞé÷÷ôQ$êôu(ÑfT2£ µ¹¾ìÄU÷øPÐÅp'§pbq2ær2n™+úŠŽ›@Ä&Xš¿ä¹2Ýlf9ûòjÌ'eíÃàA H¼&…~·7&ÒÖÞgcŒ‡žeçok‡"¨2ÐÊ0:$^/³¼ì¨Âo(Ý„D›g"lø&p(öÞÂÝ8Y±õÏŸŸpv ÆÙÑHÞôࣟÚKÂ{ÒÚÐʈ5·#mae :»Î vCÙ›³‚H" ¦O8ÐÎÚPL‰íVçRªÚvû–R7{­t…UÙà _ya‘?@þ¹ ÷ŸŒd¬àµ‹°o;Ëì6žÔÿõ´ë;pÓø‚b¡ÃÉnÊ# 7 䯴÷åºñŽ 5•Lx~¯Zž+ñ]ëóšKä[Ÿ{û­nv ÁìŠõ½®¸?z¯{vJˆ+O^‹SËˉñ[Î¥õ@\¾tŠÛYôÚxƾ ò%5†¤ ;OG“_Ú·t©­IóË^¥cSACkó؇×*Wϯ—iv àšP 0‘vÎ ¿Ô…X-‡– |J¾ÑxµqE½tfAJfS)ô:_¤,qÛgí;MZ'ý²¤¿ýébñ´t‹sZbÞ$UÀDÕëÆLé_'¬¦Xº>Ÿäd·³ÌÆÇL=5PAAµÅ®Æóø±?¿8óϲœÆ»÷Ê0mUHè)”TÐÄ@¦ùåñ"¡`þ RBÓ65 ÎIf™†Uíldä s4³fL31uÒ'œølšè&‘wŸ;ˆ7NÒîX‹ö¶× ”ëëôœ{r XÀ2)Õ^™? rŒÅè±a"χÓ8oûOð|›[MŒss(hfÂLs;XæÖ·º©¨ýÖÐI)¡6ÓÿX«uD®ý«:¬`à&zŠ-+ä¡ _Ȩúç½9l$®öÍçÃЀÂ™ÛØ¦iá[w%iiœé‹1ƒ.Ò#¢cÖDØè¨K¡]’¼éÓ mZļ+qÚNF§•†úŲœÍEI4ÑxD•õñØ'`6¼šÿ§žóûãñí¸Ø²’sxËþ«âÙEjh9©©o¤;¢gÇ&†ê ‹VÎ7Eê¸ÙYÜ”Ö1ýTýt’Õé/3žïñ*úªf-€„vÂÚ°Yùz€á‹8™ Ú;Ë&ÆvÏ()=¶(;,Þ¢ïx2¦XŸfdöI —Æ„öÖ-`S•lŠ)“iP¦#X¯Víµ9…=hì„O{ݲ‘¹‹àuƒdÎòêPVÒbè¥ËâRcÞm"C8®"ü0Â@í âžÑh~N"T&É6æÙÉ -ú4ä³xÞ›ž‚KY¾îý~b‹Ê,w–‡Wâ6 mY.ƒHMít_› X#hFîúˆ œ/-ÿM¯úR]4m@G¬/2ògÒ/ÿKQ\Â&JßÁÂ5©;mÎ…óLY·[¿E0€]Ê6ïmg°ºÅƒ »V¸Zê½¶ÔCß”˜Frµ:ª›ÝÚ«I(s£6Õ]Óí]ì+ã]¬æ¿·¡+á8A°‘myxÁoþËK7·wC1–f¦ _Áž7õu0s¸,»ø8'êÜ,Z›ýÝ>· @jþñ’Xã¶çH¨­… „cb Ÿ§Ó½AôJ²%:È ßî»ÆÖ!0ø­kjYpKÿÀzu¯n4;—$ýÔuc_®¾[‘¾¯iñI¨;,m1‘úOÛöŸý—],MZ¾ÿ5_t k#Ø&ìÔGµÒ£¤~ÇH7MÇ<­oc•Kkȧ…Š-ø‰K€þ'EëÜ[¤ ÂËm±ÄÊah¹Ž Âgb,•©· =‡"§MvPƈîÒÞëŠ@¥Óºf:5»ÿg¯jŒº`ÝÛí=*èêLd@ïtdXb^ýó1Û¬šòÃÔïÁ¥Í³˜›íútbU¯šùF'WÉ5hŠyŠûX tòøCf¦Êm#~#¥ ¡sŒ½#†2˜&¢Þè›…òæU¯‹1¡Ý¥Ñ.=ߟž#Sw;Ûg¤$Ô†¾6#‚Ò‘ÐÒÑ{QßúÎJ¨µM‚Ï1ð êƒl9ŒÖ™!©Ë|^è¼õ+înò¼ 3ú:¹CÒ„B “6æš~ÇZäáU–æZ“C—RjÌHÝTêäoO öKÑ?ñªKdÿï@vŒœPGs¨­†}?L5¬%´×¶=lÔ´ÅÁîØf¼Wà©3’¥µ ›0§´6©vk‹Ôg4„ÐhíÇÂN8ÑZâ>nÁ ”m&¡Ì[bñsćÐ&çà?ˆb\ÃæMš©’K€Ì˜ƒx>1NíG« Ýíx­çûï…(bÎÙìs¦LšfÈ:¿èšf£EíEû `cÉ:ƒ„>sP·ûÝ‹Èj2K;ÿBÑL\–»È}(|¨o5€Rxópy'xÃO$ÒÊcÙ i” ð·ù?åÁÏkŒHÒØF߉»PG)Q¶’bÛµMŠÝ#Ò™ò÷½æøÂ`’ÕT$µÑ„ñ¦`_ÚØ™„]{„&Ù™\ uL›l.]és÷ú0™{…taÌv}·…Û‹xþ4";š“Á´£Ló$Ò ¶•ŽŠ•Õð°ãú~¾îo} º)š…­3 C£ÄÌèU Râ½a¸M½²w›]t?qL&"#Š£íUà¢Îûëó`[DlhÐ!´ñtFâ/†æÄ•¼0ÌèUÓŽ¡óи6Gš¬E!$ÌL¤ô]3‘ÐËíP 4tm4mCQb".$ì‹"µŒ­ôž=S¤ðY_Ù/‘dâ—VÀß]¥z†ÆL =³ùãZg’m°|™Ò¤jGü2©¦Ò41Ö£ 'ýu‚ö(J˜=§Ýw¦Uv¼ŸÈä— Ê”C!>¹ °3Û«a&8b™i”Jé,n4¦íÑêp3OÓIРa鉔'3¡•ÖqKMêi}¾?þö¯ÞJÛÁl"•¶f«Û÷ù’À´I– Àµ ºê­Ƙ´6‡â‡åÅCœZ÷XNs¡«F¸Û’ôײÄfAAŒA76A€-§ÙVÆ´14B@r¾VB×¢ù^ÓÏÜĬÝÞóg6óîlf8‰Ð’`¡>Ø­sf ç=_¨î‘“F~+ “á‘YÔÒT…`w;¿À÷_Ä Zo¢˜ŒV(É!¶1NwLˆÏQaZÉó6¥W3Ét ÀôÉñHñh8Ò;³'@k& 7±N‰ v½¶´9x•x›Åék],´èk¬~u„`Û@é%¥wÝP¾ä?Xï°÷æï¶WqŒ=‡¡”0tiû |;æÛjÏ¥,~]duí‚ !1±ôbp$ 3ÍdJì:¦6¾]1aoôi™€–KSlmˆã¢*¬(Ñ—¯?I²Éy–ÖÓzjBÒäÞ×<9báv&zl®•i/ª æÜ„€#îìsñ ‹ÄH"êš|gzjB€Ñ®ºPå&’´¯#Æåî™ãK[´“Àœ™I¦UBÚy„Ýt?Ï~Â<ŒD“þ}ɷ¦5N'"©íŠ 1gðª©ýY8ä°îI;™Ý³–8Q8B‹íE^î4RýÝÌô…b÷{(Gs ×B¯IŠ<Ý¡ë´IR|ÓnÛ/yÀF ºàY²îøˆsâ£é{5¼ð‰@Úlj` ;¼-òIE½ Yâ`<ƒqër€±¬=ôR Uä7Ô¶±qÛÔãùUصqPw6rÃú¼F—š3|ïã g†k0ÑôH@™Öã~3v曽0+ªºÙ/ ¶µ§Í¦ÎÖ„Gm¬ó-—ÆÀíùv#óZGiMCl깃¢MFryÞ¢Mcfh?a椭@'·ÒmĬPZÀÿ,@‹ÅR¾ŽQO¢€œÙÚŽ¼4&ä¬gê÷!a>Ùs¦Å¦2§s&fÎ6ù4Ašx^X;xS›[[:§êé Áé¯:¯ëûR[šîã_{mØ;Ý¢SïZ*šÕGb‘G„‡½.B\Ž™Hždà´#vÓ”0ô'ti¶/i]6ÁÔêg c„ÖgRvX. Ù‡¬}Í\#ôu«µ¡þZ¾ÿÕOšÜóMð3­ù&"y$ìØ0®9‰Xã<Ò¦‘8ª¬ùT4%+- ˜&.I9!gpïSÆ›ÏÝÒuëC‘¼ ×ÃX3½±öæHß7´Iö×¶éØ.Jtaûg£…¢¤M…"íæª„°ÉdÔ˜ùÀ;„µ¡~¿äv~bÔ¤-0º7†æhϘb$ÛvÏØ€$H¹ 6ÿác¸g«/ø…–t£ÀG©gÆë¼†} ÷Á&¼HÌLýèÌïÎãtÉ?nggS-‚f-™¼²0‹ú:Ý“~gM’@:G[þ›d U#ŠŠ?£ÆsR—$6‚%­I¼šöwgÝêQÒHÂ|ÛI=m±ù[¨Ç4ç!2’à`5†º–Œ M0…ß ì/œŸûg§Sm[c¬›LKq3R­ª€Å '{¿]3/=6–à8íÿýNß@”>sÒëÊ~9‹7žýóºüLÈGžêØ!9±—)Yýì^†S’ḭ\#\1Îb”n;§Œpü!%öT‰Ü*Âi™-"Ð;k3€&†?ç£v|cþÄD\`ÐâuãϪÔ5§êgèV'-pF½÷ØÒö ɰÄrØÁ8–@ÉçÒ»9 94¡0‰ŠÊ%m†õ]·Ä&­ºmmøÜ%ùì€5h™ùš=œ¢ô¬­ÎÃl¶úøñµÞtv³ýî<ò»mMõ£• š¯L)ssoßÀï•ÏÚ÷Ṃ,+¦ê”©;ÓI´îs_~ôï¿ÊÕ¡÷¥'©ÇëÒÛMÍfo£Äæ^ø® Gj<óÕÿj¶–’¹ Ð^@©ÿJ–ª#jÏz\£¶ã-1•: “…µØ}tdAvQ¸8¹$%Ö0‘ôã“RŽ—úºøyŒÙ27U%I“´¨‹1l ‚ÇÉM>uŒŒÙ–úl¡ù(íš6¦¤*nBJ>b=/¢˜„·C"²£_„™çÁñL²Î10{9Õç¤Ú>\*!w”ýÒL£ã>Á€¡ ¹W§e_#fü43¡@Φ“5¤Lc)ú'ÑítEtzsB|“OÆÈ{õŒKâ•õ÷%ǨSO–ï¡!:ðý3ö‹d_…U'í·®s=‰4RU[—>T$ízG¡,k$±×ôP 16>‡²U$ÛŽà'=ðM›ñX„I ¾@ì©Ý­-fV‘Á°·ˆ@•þgÁ5×HÅ÷¾ú °µ#Zø¤f‘ÝÜ´nbjýºdcB´$$$`Ä XÈOyì3ðïüF\Lq“…Ú4+ Ú¡‰„"mó–¡ÿ| ‡´UªÝ!/€ÂNió92Æ:´4´àBÕ68Ö“>!#¢_&X›>ô¥1qÚÐØk†oÖà“ÏüÛíýÔï`òô;ýkÂX¼íÂ¥Jóqw•Av°ào~1Q”±úÉŠŽíÜ crhY]y\ ±;×iëÀ#„D n28zÏ~F¿—<_lôîa¹[:Hji ø'~ã>¸XèëÎ_Á« Ìàd²«š·šA$U•…Ï $÷éõ§úðË,×"º"OVýõ‹ïûì­Dô‚·~%^ðÖ¯èlY4¾MS°¾‡ÝÜÚ¯a± N×kLTšà”¾·+ÿõ/·3ÿoxÿµ°7#ê±9, ­Š—‚"¥.„vˆK=À]ý¾4od„®Œ£>ë´dÀ0,pry.Û½_lð ‰Ã J%dzijsÆ:ŠoHÙ¸š©ãc¯ò ìP3е„’œº¬0Š×ªu‘ë§D»ØI\J´1P½ ;E ó§>M¦(ô%Ònïë þ3S-(„ÉçoÁ»"¨tÿ;jYˆ ˆb]°ÖªkŒãªKè˜P·{7`¨Î7æÌ?Ä6M|FÁÈÓÏs´íH‹ý.€›>M`ÐÙ‹ñžæ€4”ˆÁ}˜Ä?Jg³Ÿµ›Æ¹µ!;x[Ÿ:åÚF„ÝYMÈùÈØçÆý\õVL¦;¾á9"2†j ‚šçKº‹«?ê^–¼õ+ð#÷å MFÇrT’-.Écáóvøä¤ë¥»âØÅ%ä^{5óQ·é«6“‚!¡b¹TÆ^ 140û°¡'`,Å XD°;œBÑ5þ×›~ 9Âù[Ê7þÆã™ˆŽÒ(ÂN0dgšDd%¤H^0&™ÑU®æ’67íã^´1ïxÏÒÆ38§jIïqFߢВpÐBZ ÍCÐú~óz ú<rG[êBGi(HÐ'!S¯•q»öoź\³6Òs6ØÊÌÿæÊº¬`!¯¥Œ8?žÃA9dð==6Nbãgï0`9Û ûc§¼¼à{è%Ùðø{‘Mi´ùê»oß¿¿ûw?‹×ßúŠ êǶb±¥³è5ÁÚÐÏ€†ÜÍ\­£±Œ×xT¼&˜³Ö²Åæå|af¥éñLêf“8´ÈÚÞjIéˆ9Ùxûˆ ¤.°ÂlžUG‹:ñ ÉW]ÚHó÷†Ðëýf/xÅ·^òùÝ:ï˜ýÜõÕx`TÅþx¥Œ•V”4\iÁ7àË…ug»£éË Îhe›ŸI9Ñ\¿r?ÜäÉKU‰¾ø7ö¨KñðUÚרµj¯íM¢9nüÊ|^äÉ+ÄC3•†¨O—ì/ x€:öËH„12Ò¡y%(1Í$}ýI8LˆaM{iBÀ‘•¹b¾üa?ìÓ`ffi)nŒW±ÍiÀüÍësåëýu0†!ìÆM¨’HU=¡¤S%œG±ëY‹Ñ¢º j¥h¤à΃Ûð{×ÿ Þtû«ŽÝMåÚÝBUqÇêF©FÃCÛïaª°@ŠVû-§Dfom¨Ñ>Ælçqb>–íY1›½ Ž ­ ¦Ü±üý©9uúEOÌÈÎ䕞 ôïÚ¤UP¨¥÷v~–ꫨ˜‹¡6mNìK6³Ç+‡¿9ùºìCdƒõ9Œeݘk³ý—⹸L‹¥üQäá~SûxÐ }éÚÚ³/þïµÿº6A×éo‡ysÍ$¡# /®zÒ-ò:0½ÑxÑ® ˜™œ³Ýlå¹]úÛeŒÅ`òƒI²«­ò"^¢´µ›±¹ñ·×8®Nüßï "xáÛ.,;(<÷¹­|ã^T‘™hZ‘è˜>š)Å×» ¾¥Mç¡CôÁjvÂÁQ‚iOÞˆæ?¸kÿVü÷s[™ÿ/=ñì'°?žÇgÿÜ}íãÏ~Λ±v±·¾ ãz÷’AZŽ /êJx‚¼”b=ºp ßç6QØÎR¸ŠK_ˆy9ÛévŽb‚ží¿¾€Úø;j‡3ggàÖKBûÉLcóëÚÿõ×0 “%B!ÚèLÏß!¸íÜîX}÷–ž©ÄÈUh9ÀAÙà ŒeDÑÊØ˜¿6@Ö²¢63ù¾xúq!­Ž¯ù˜†F% 8MY,=çõ7¤%©b ×µÄ%ÍÁ~ºªÃF&AƒHé}†°9É\WÖwöǵ{=³.HDÏg ´rã%w7Ƥµb&tÎò‰7¥?°GLµvõˆNk#ñoðˆ?z‚àî,_ÿ~?9º[çŠi7jGRãWgò*Aܵ»Á<µ °åBñìšj¨yD ¦ÃØÍKTc ^{óã·ýE—wüìç¼—Ÿ¸ƒ, œ[ÝþÔW`žô?³±¯OüŇâYŸü¿q ç=Á_làZ@qŽA•[÷¢©Ï†ðŠ ±FèCCîCÜg£âZ†ÊćhYªBè6Á™¼æ› ®Pg]csÄ ›ýM),w¢lbæ0©ŸßÙ10{c³ÿ_ª³.®0;ŒQ=½¼ôöÿ¹ß§bÀ¥´PçRCW @À¦Ã›ªŸ"טk«¾x„€’6þ45SÍ¿&ˆ( —Γ¬3}O"Êç­¶V|ßä¸lý̘t\#rIŸ½%]SJšë‰4³– NÅÈÊoð°;2sL§fZÜYAnñ'M ’ÏÑñ/yÀº‰ ¼àpDä׿ßOfÄÉ>ï’eñô(S@TÆ6> ÕaéÆcbˆþGB>ñËúùÖ;_‡?}ÇoÒ¼ÄÌüÄg¾Wž¼ÁAÙÇXÖ8¿>‹Q×(ZðƒŸòGøÊ_ÿÐ}þÚßø(<ã_¼ÔÏBÓ#ìÙfTb¹C"=;E½x–Ð@EbG‹Ùðˆ…ŽBH{@s.³¾ÙÙM}ñ PRN!lóø ·M· m—@p…• û[ê¯Ú¥ð0‡†ÿöNnòçÖ™wµýÿh%Ú{n}~åõÏÁ5'î^ö>(-EŠ`ðù¥q—£fkŸ6»ËÛï —1^Œ]ýÎWl㟴uG"¬4!  >«´^ :òÅh Î4h”NNò x¤ú³ ·(¦Á!S©B9¡{Šb›Çj‡R¾Å„ 2¯uüC(ër€Ÿ{Ýwá«ûCUÀcÀ¢1ÿ€G̘Â9\ÇÄV–f¦ÏiQ4xM5Å:9%XÏ'‡¥BœÖÌŽ *û¾kkgþ0µ³7ßZUâýi¯Õ©:i¸Ñt?ñ7šžåQCN~/_°ó€†ÆÇYpEmác»QÝðoÃÕå„”[‹ò´tæ 7'„-9o½é)~nµ“7“„;G›óÐ' ½›£hÄBªè™ã9ùG¿ljàÝ,œÙ§Í õS -nËõýR¯¹´Û|Uå…Ô] MP¼í®7LšúûK¸î̱VãÖek]Cµ`5`Ô5Æ=±åáBà7‡g~òo5Â3ô›òú\uŒ›y'‘âà~#Cã.Í$ÔÆÄh¯ØœHPK`· xû:\Ä‹ÙèØW½m8bFÀ'²‚Ò,;£&­Ž|²÷“ÐHŽcff$}8ibRÿÿ ;nŸ¾ý%øàû~2Ã2œ»„þ+ƒ·ã4­ûJôoµÙZpck[~š±’òîx‚Ûs*+[–•¶K1ÊÃm1ÿl;½¸¶6EƯ".Ìœ({¡BÚ3j{I–/¢@Ð-!s¨·7kUÖ'E;Ç¥þV`M&¸-2¨t›êØN韫/š.¢ïR)Óàç£óZ#lØÕ9Aò,Çý.5}XºUåáis4£d°r#r½¬ÆGul׺ƨ•¯tk=h;$GŒºÆªìã œÇAÙÃJ÷°÷qPöq0îa}ëóX—}ܾwödz“¶^qâZ,‡º§ìc]VM XÕºÇ=Ô³ªYÉ„À¶ò´ßøÄ ÝÃî;fMJLÁМA–æ$´0JLÑÌ#zSFÏö· ¾{ý~Ÿ1ÚöÙbí=MD›Ñר@|Çßg™FKfà~®q_æ,Óh{ÆÆ!âÿ¹^£³Æh <ÖÛhýŠ×âß<ö?ã3Þ÷âÏо»Ë½ãWò·|W‘÷*lëÍüÓþÚ…O ­ÇŽ÷Ø8Ùˆ%ak×zuk®HÐ \ÁÕøgž[Ö`33­]å=ÈJà(Wl´ê§úYK„ÞAAQŸvë¥i“ü.^||íÉ!£UÛñ•´_ß{„‹%TG'2qCðiH[6Ȇ>i ´!|–<„—Õ‘o?@}ûûAvç¬1V¹‚³ßÚ§RœÉ£åªH¼2ûýñ¼3èýñ<ίï¹Õ¸ku;ήoÃÙÕm¸+ý»ï<÷æ©pbycYã ìcUü x߆O;I%~ý“ l#æì(M_N¿âÎÂè¦2CÛÂñämÚ‡R¿ÔÍa)7P»Ö˜r¤nmh»‡µ& aÑ„XhÐNã~cYtѾN"VØdŠ5± Ö4 \sÙ}qûÞMøÿ®ÿEÜÓËþx¾ÚýŒæŒãB€‡^˜$wu¼Ó¬ :¯bX]Éš~RO÷xO0ùJ¢ñB¯Ìün~L–l?R²E+Km~\•3C´7ñ¦m("ÆwðÞ¶4gH×Úð¥h¤„&É«ôüŒ9‹¦-ž7Õ“àB‚ÛžÏnÌu’?ÈÕ0„W¿ŽV{¶€pC/>²ZÒ±*Xë¾3æ¡ÙÑ_üúgâbÊÉåiß-jÔÞ=—×´±7=í×?Ï|üoÁh@JtšYÈ'Èr£jÌ‹FÊÜA ØÔ§ª¤Uo6òɡئbǺ@e™.X8 Ó´Ï#i+6zFCæ ²ýÛ)cÚ¥ŽÍˆù‡ÆE2É7ÖH³`Œ4 ï¦ò Ÿû÷8µ¼¬–<áçï?¹g<‡;nÁ™«Ê< ¢ñË3û¼ŸœiOBK7›Í}áoC£¿y ‰8²¶PÉׄ‰MH„nçó|ˆ.ZÛ™“ªÆsa l}оDºæØc=”î½V§1Μéð_d.òCb¨ë‰` j\{¶Og*ZSAו‹3a a ŒµßÝê7ЋêZ6§`LR¤"&EÂXDcvâWŠL÷C4µ)>ôÜw¶nÀ WïøŒVq­ƒÐ p©öÅ‚’˜ÿ¨+¬u¿ðúïÆ¥.CËYQ I#A2ÝØCüÚ'¾ìƒž‰÷¹ÿcœtèÆX™ó<#ç5ôSÚit¾!Ý—Pøb»yÛB2`ÞLÓšf°iÁe¸èì[c­ö'ù#¥Ed‘€-Èè#mbþ‰÷¼ê-/Ãï]ÿó¸þ¶¿šŒ÷cïûqøóMP®9yܾwã%§™ã”ÝÅÉPVX{xþ§þ¾ôW?prß;ξ¸êªªÍň‘P°™E5æ- .1Õ6W™y·HhIyﯠ‰ì"æW¤íçQätÙFâu-muz`m{Þï§Wvæöýätðžr´ÅÌÏg`½RTÿVÍ÷rZ}äèråÏ b~ ˆÙd(¿$ö¼`o4©/<8ðÝ­U´™µ´~Ÿž[è9–öMÀÌ»§Ýv“Òôà:jÕDM3æ_™ñ¨#VãÝÃüî oÁ™«°»8 žBÚZ·À‹ag¶‹Ç1Àó^þ4ì쇆ØTz6i¤”Íd+Ÿ˜Ü|Ãö{é…vÃòu-MÙR÷/¤÷4Žœ?q¢˜1bUÍ)£ÝwÐÚcß™¹Ï€ØBד͸ó C€×ù’7üø,ó€W¾ãwð³¯z Àr±{Éiæ8å>÷m€½õ97QÞ¾wÓì½ï<÷æfú,5\›¯šï*ª RowëOéž6\fkÝ~`Ð`“3¯Í;RO~€ÐP½Gøþ˜‰&Îú&4ž¬õ‰XD×ð©Vyc!ÓIÑbàÅÙz½, ;&šÞŠA¤òB¢4Çeuñp«+÷ˆ‰˜9jرìÒoÎ,{c•¡4Z@6¨–‹hB0Ü\1ƒl‹ô v天›¡…šY‡û½æ\.në¬l¿~Ösëâçßð]¸;ÊrØÅÎbƒ,°–ˆoSsîÏønbl¿é}ßò’Ç÷®k&`gš3ÕA1¦kC#2¬2³f_A=(&;Y#牠T/:F¯íxI0÷ö0c²g#!_±ïÖ§Ô^Êýc÷¦s꿽üéxç]oÞ:ίxûïà§^ùŸqçþ-w Ý¥üâç¾§w.ƒ@Ú1¨kì¯Ïao}Wœ¸vrÿo¥'94³G²¨:#FÓèñ"|<Á”vyÛ³H´UgŽ pGéñßlçJÀå£+®d°GüLËíÞL> ¶Ã¸"Ô=ÚQTî®M&OɆ ½é>úf\¡ŽGí GÂA쌞“óM™‘cNé [ÚD;@è™øGüK*‹|IiÓìÌèóCÙÑ ¦vÖoŒt€Ï%bÇ1ê®ßé¤Lˆs„?Çbu 44œ’Íy|v¡‚ #®ø›·¿2ãç<òëððkÞªŠïøØ_‚@ðÛoø)ìSû®(/þ—ïÀÉåißÉ»·:‹ƒ²‡u cƒ ØÏOžuE ½ªUÆÄ0l\hhô’æØç"B*id‡±3J§6E2†§Â{vÊ&ÍĮٺ—Ø PŠd½Q”¦æS£^g¶„è] ¦§’äÒ®?ùЙ(§WZ©ç:q”ˆI3õîQÕnmK“æŸyÑ!&­Æê˜J,¬ì¨#‡F7è.`§!â';˜ÒË7à…<ÉÅO±ç—侮ðìÁíxåM¿»«ˆÖe…ó«» º†hÝ~_Í(k]ÓPoè_CÅ"‚å°ÄbXY °ò¼—? û{{#=GÖÄݦ®ŽœµP¸¦)™lø ټ£}@ÛîNÈÐ6ì7Gÿ3ZÒßèK=õ3›«\ ¤e)"ìâï{t¿‡^ý(Ô“ÝUP |Ðý?ñn£›må—žxÎì\…,±*8¿nÌ¿i˜vÀËÁzWŸ¼÷äùýñœ›âð&£4¸)Ï8G!?@¿;Xäì×ÉŒUiNÓû°ß4`ºeÚíyGŠö›˜8 Á2ç,Ù°º¼ÞFóyCÜOJMç£ 9̦ËfŽˆ@}Óî'«Ìù`™3fÂ(ˆÑ»j"È&ˆÙw½!¦,Âô( L’O¬—ÔY̆äsO\’˜–J 'S"\Àlµæq`ŠÊN#þ¬xË]ýr÷ 83ý¬Æ}œ[Ý^Ñûb3r™óÍÎ .et‘]¨÷‰©ÂcÀ'—gðŸ?îWŽÕžû’Çû®Z–þ&g¶1ña×׈ǧ_¦võ°¯§w(ÌxêœFs,ÇÁ3‰áxë) -Ò™ˆ‚øB5AbƒPàŒŸÛ`È:“S%ÌA,d‰OýGOÁãñEw íl*ÿý‰7âÔò έïÂÞê.Oñ\Ší8b,kìg±»85[G¡5í\Ú?gP™ƒñSE6hZ|䟱+Jt­Ó·)ˆ4“lS´Íq\Ofh¾·Õ<ªS˜ÙåCÌ Ð2³EúÐŒ-^Ïô6å?9þ…×!Û·ûçÍuØ$ùP{g'DÇ"ï¼¶‰$»º‹is¸X+”Àvw¿7P®–6¸µ!»˜‚sko>ü®ÎGˆù‰°cÇp‘z÷ÛÏý-îŽòËO¼ —í^‰å°Ûöì  `µÞÇXVAPp>„ï œÍûÄÇv1,qry»‹“GŠ âòÔ_ùø°Ë³àóŽTW{ýÑé_Ishÿ¬žv£ñ€ûXp Ùî3ª7ÍþóA œÍzȱ{ØÚȧ•ñ¦.Ûæ¼erOOga–dA(Zð÷ÿ|ðýw·Ð—ÿËwà×?ÿœ\žÐL>ãyßT¸.+؆=Óöš`˜+·Ü€ÒÒÀ*¶™¯ÝcZ\Øý‘¾‡ÆØNÎk§éÙ\„ÖæÑˆœ˜±+ön ßfàéæa¿“ €Ùm8ƒ¯µƒxRl†iwSM„ÐýG¥¿ôrGú§¥z¼}T"dþØì-¨Ÿ #&ýij1þmÝ<÷ÓÃϑöÚî®ÂÂo±÷‚Y›#&ÇäKØüÌkU#Ù4zFlñý4!vg}^‰3ÕðRµžÛ†u«&©µ\‹L°.”=l+GÍ×o÷Õ…¨8±¬Èk}®9æjöÅUsÒõÙJ-Ó¡YÔ‹2a6+{#¾Å°ÀB± Yžú+ úÞ÷5ã|3öÚ¢1^#Î‚Ž”èˆl <ÈÏäûŒ.(¼w¤å&>öµvÙ_Ç#Æ„¬ÒÈ¥âÌ]ûk@2YÀ›Ó4ÿÏ[þ;>ò!Ÿåç-( Ve«²‡~Àãð§o{é±çá¨å—žxN//´"lò‰è§jN,©Ÿ[݉MÈéÜúvœY^ OaõõçóèW}€ü® ÝŒ¢K›ï ß:öÅRœÔ»æs„’8”æJÂzÒ'Þ¦¡å;o2Ÿgø¼”ÛîµðœíôMZȇjfhãŽ&àñÀèWwäRuGÊDx¦9r¦ó41…Xôoþ2!`ÑDÒëcj š/Ö&9Ûô©ú1m‘*>òicùü˚ȕ“èj(TfŒäÑŽúH!D'÷Ò¸A0`¼M- ;Ù<_ÿ§½»Ã \~âšäÌpby Oé¼ß¾Õ1·jû Öí~Z@lŸ¶Ý†®.[ïBÚ[ä‰jÝ·`QAßùû_ˆã–ç½üiø®ë~ 'N43AQd)ßæ=KnseãŽÆüÕU†]Ôh†hß™=¼¶Øü;IõÄc¨r?ç8i/Úõ1„Èì} œ\žÁÞºætúƒ·ü >üÁŸáa‘uìWˈŰÄWýÓgá9òµÇžƒÃÊâ8¹<‚‚½õ9¬Ç}ß´h&–N¤hÍ/u0îãŠÝkqÓ¹¿ŸÔûº[þ;מÂ;×Ò®ûH!Ðk¨¬‰:Wt. àQ9Ή(¸À³ˆo(±W)èÀ L9 ÌÕ¶½ÁEHâ;ΘmÎ¥£¥öpJ!ÁVwV ˆîLHôîéz ïÃP¢i,31×2¨ ‰ñõ‹ŽŒÕ£ù…á”мÛ¼èÝwM}'Æi}§Ò$š  {œ0¼$eLåëøHÖŶj-…´ú'ñõ-{ç ìSéÏ>áz\¶{er²_ŸEuÄn? [~ÁÁzçÖwÕ¤pãyìgÝ6k±ÙcY#X{ñÛ;§Bôá6I>j¹ ¨ ¾üÛß||²}»Rɦ1Vã«6œŠfCG—à-ü…·ôÙt2%uŽc¨Ûè͹l&„ä nßKc0ðþØ;îµ>ÅzéÄ­ÜçÌCüóÎâ„u ƒ6‹aSËËpõ©ûà?}Ü/_ð<ôå8&ÛÐUZ“ýñ|K7~€3»WÌÖÿ··¿E nÛ¿¥Ñ¥§„ »žúŽÁ"Ù´£¦µÒò>…(›Ò´T¦Öõ‘¬m8ðlt‚xu>î›Úe;ë5èì˜õ5ÊBgÐ'Vïsèïñ<³âàRQ oP‹tlÀâÍ]Žƒf‰Ñ"n5eçJ–¦h÷K?’äuôçȱ»9YT¼7À„R`þ©„5ÉØÁÅÕ¼>BŠ›«3÷À ÕÎ.ðà3LuýØg¼Wž¸FÝɶßPàΰ‹Å°Äºìc5îù?fø«r€õx€ƒõÆÈø9–u,-Ç5 êi¤]=¤ã²Cî+,K¨}·ýƒ Ä¥š„3¡³ÁdMë,a[·˜|Ð}“,¡¶~²÷ƒKì=(äfa ÁÛ—¢zj[B Ñæ/®Ëë$&婤¿“úý«þ±‘™ZÆ}¬ÆýêבN,Nã²Ý«pÙî•8±8…ïù„—âyùÏPýG[£|ZÁ±´MŒ0ä_°.Ø_ŸÇj<Àr±‹å0¿Cùüú¼óü› Zp×ú6ß_tôè´Ò˜ÊÆ<ÛYu^b—yÑö\ ÷læ]Ó,g—rƒK"žáÛç‹ýTÎ裖¬eÒï‰%aÅì…à—šiŸ$Š’¿Àx-ù Ÿ ñGÍíéxÔ&‘¸t5ÄNyŽV† òÉ}ä”u ‘b¼¥Š×Јª:åç·C>R\~3õ°¡ÅƒÆèðŸ23ùþõt&€=›í`a¹›SuZ¯õ2IàFXí¦‚A¸â±ø½wü7fou«±¢¬U³·"ªg©®ýÔ¯M%Ð}§Êü›TcY…]ÜœqÞ°«SÜDâ°S8랭Ƭ‹Ðàë…ö <à±<Ù1UuP냠ðvŸä¾ô®:lG ;«‚’Úr$8ÃF|(ikÎdÉIÁê ‡3S“µöôÎt]ý€Ÿåpƒ,pr¹ƒUYbwq‹æ¶TÏ{ü˱v¶ïÉÅ|H£®±»8 …âüúì‘L>Ö'm`Ô5¥ §WϾïüx'^wëŸàaþ¬Êyœ[߉SË3€5Ñ1îA›ÍÜÝü,¤¹›éD±¼›É!Öá:û>~§ Æ šìÀ93vO(èà8~3šHî_R+|1 ¶LF`úÔI}þlï£ëÌ¡Óvä²ÌwSKx»²¤> ÌuãÍàpÝ»=C9ÄbóÂ$Ÿ9”I/cß@#cüµò´CØ'ipû½mþrg·o½£QŸ!–NI‹`h 7é-¡š€.ß½v‡S8(uÃÌ[n-îuæËÖ¡uÆ,æO%è›TÛ`±Ö¥yŒìÝQÇŠüm<Ú"Ž,‹ùL#ÖºÌä4`¨'žÉ€êZÀ…ø¸<ïåOÃwÝë×pb÷d£!KÒ»‹ùy*$ô¶‹ù,È´Ù`4‰Û¶E"aûå²>h•‚舃 ì;Î0ñÅWš-ZC˜˜oŠ£M º·>‹ýñôƒÈL·¹‡aQÌ8Ù©“²ý̵™0Ùaây͈QW53h³Ý[lµÅWö¯.Êö·¬1Z|v)ÇU0U”ÒN K§¡Ñ` ìþFè¡eµgPMZ²7`®üÛ—<žÌ8†˜› "sާqœ=©=ç!‚|@ ×@°–èÍÌ?ÅB‰úx¢“Ùhf×o6c?Dc\™)Á0’?{jçò4.ƒ,pjçrœÚ¹¬fnmZ˜È€fjñä‚n;¯ôV7gu¾#ûùöÖgq~cû{“ϨkŒãë²n'ʵºÛY"‚Űƒ3»WâÚS÷Ãû^÷Á¸öÔý&ó¼Ö¼î¶?Æ_Ýú XÈnŒE·‚Ji¹>lµHblo9ª Š÷õÙîvÖÞ ÃF,çtß™s&+Û˜´Ïa¥ Ïkkž˜·Û$Ck:ŠHqã²mÒgÀ‚Û­¬«Á9Œ5øšR_7 Ç2^DHpììÑ"=B£F#pb²®Ðë [ÍüR”ýl©&”¶`k­ž:˜Ú©Üö¸7Ô,Ffó& Qͬ?wÍÔP7½`hf EBfyÃ8êR Ûª§p0âÞ„b¸NŒa—Nç[çÚ8T@¢1f|r;@!³]Ì—–²ƒÅ.Æ2Ú®£”§þêÇã{?õ·c"Û9¼}*ŸÿRû’HÄn­–+ÄbÎîþКfºÞÆ¡sQQÎCcŸ5O»ÆsÉqMU券è¨#®8qM“SËË[pÀ£½ê¦°itÑ›)Õ{ë»ÜL4« 4"š÷@ÿܲwzØgœÔe×.Ôö ,–gð€+uYaq¿Œe…ß}óÏ¥×¾íÜßbUöqn};þɽ‡Ë ¤`ð÷h3#×ñ;›¹… ˆúÚH ™)OWŒó:Öôb> 3 ¶±+lùæÄ‰Pj¼PÓrSŽö%A7ŒÐm-{o”wH$]­$œDYã`:ÈßþâÎ…Â6º6¼ýבÌ.6tsžæh=*^/wÚ'Aº‰±Átgo΢ÜQK5ç9ú²–$‰74>UvBÇ}–QSDH̹ìQ~Û gßBH¾ø1‘Ã?ãaÿ6a‚Ø…ZQÕØu…¸’çXÉ m‰µE³= †c%‹;¬|ï~B u€˜h]vŽrBõ® ¶}’¸Gqá”Ól²¡$r±q¬;©Êµ câuÐÚÃ÷™âÉf "ÔܸÔP©6öD”škôQ_nó·.+ì¯Ïãüê,ίÎb¬é_ ðˆ1]'šó°S]W“¢i£Úý²ÀRv°v±œÚ¹ï}ícñ^×<§w®À?ØçMæùƽ·àu·ý þ俊uÙ¯ZœÀ…‘ÑYåsÕáÈ`&LÞʸpgël°`ó3n]ÎaZN.2¤0l©Ã@³ždŠÑ0kúýÎ%'X¡Ã 0Ûñ+ÛÄ:¹/0’vÓƒ`æ rºz£çðÃÐ%É=»gN››ÇCS§¢wÑ«LIÂ’å“(Ι¶Ûi‡AïÈ™i»·•BòºEc¡ZØÜ{]‡fhCY~HŒ«ßëÄxÌ$ÄšÂü?ÀvÅÓ>4æß‡÷.œ’)(¦/Ì>BÈJŒí@ùrÉLAð ¿ö -̳cÞœ¦ÙÁhÛÇP8íCCðœ/( fÞêç d“Qgê1r33eÕ_4ê°H:ÎÆËŠ3—zËtÈ3_ö$œ_Ý…Õx›dŰh¶uÆæ>mníg?¯uŒ¾ÿWL Ûµ–*D 0´þ¡Ô“ÈÊèã-"UˤÔ!'—gð«Þï}ícqy§ÕX¹íàxÅÍ¿…ßü»ça¥û-PA][´ Ÿµ¯)h; üó÷±l¹¯üÜaâ+ÓUL˜Ìëù”, ÞbËÃ@€µÀ¸FÁH dÕAg—éxxLZo‚&üRæM®l^ß=;¥ï™ IÝÍ-d‰Õ/,Äg¦ø¼á(¿È¬7ç먞·i+ÉùNç#“…ZH“àcL©W{¿¦cÔ x2¨Íq!Lf¶‘§.¶n?ˆ“œY´CÛ-š"B-­ÖÈS’`Ó?†¤&LBÒ_ÁLoóç$Ð= |ÁrØIY"/Eù†_û„`¬…û¯‘W¾²Ó#°–Ð@ƒý)Oähàäoõ{¢â äBpôûüô?§·àö{¾žÏh¶²C¿ â†˲3ëTGøXVX—U¥¥ ]°÷êµC|HÕPíýuI󫃢ím±¬²öwv†“¸Ï™‡àaW= Ÿ÷èoÙ°Œ Þrö¯ð£ý4¼éÎWøÁÚµàÑO[k‡É”Ê1&¬X)ÑÔ~" !˜‡Þ3Cß0Z>¸4ÔÍW<̲õ„âÜú¿ÿÔÎå.q‰?;-&â¹Úüq­ù¨?a ’iŸÄ´Ùz]šš}w˜‚|9–_ƒ‘›I(P}I‡É¤ý +æ±Y¼hf^ 1‹üÓ^xÌÚTnm'd™FÝ\/Æá›û_`Ô5†¡îX;¾‡Á|¡!‚Ûî\«Ò˜ê-€ýfбïõä®lpà^Ôï¶×MH‹®ò¿aS±ÆKþîùø³›^Šƒ²‡ƒõy¬Æ}¬uåQ^#F°xÀ5u½(òr¦^ÍiÀúµLZ‚1lÖð“ÿGÔIˆ‹03? :ž‚FWa* ÕÞÙp½DáñomV2~3S4mUSo·¦¹Z. Ô¶ÇO°CH– æ„© î- CCŸ}$N$Ršó«"%©suA}ÛWáR–¯xÄ [ýˆXuœå›ýw“89¬^yÈåÆŸßRSBßpö-xÇ]o¤“”Â…Õ¶t¹†´Ü,³}6m*¤åùnžÏ.)•¿ÕããYMÕÔžbܬ]cÛñÅî àò´ßxžñ/^ZÇ÷™xØH¨"¤“÷Щ ív§Ëóæø›">r²Âöb¬Ðö¤›FÙž'__/:âìA.'——áäò4v†]:Ú3æ7n¦¶ÙUUˆÔÚëyÍÛèFƒÙ[]&A™MEÛáôA?286võçÄâNíœ`8ôŒé?½ñWñºÛ^†O}È×bg8]œlÚsÛĈ,°tOÕ–U#ÐæÂ”Bé<:”œzJ“DÂy÷•˜R¤[€öÍÌë`—ë÷Ò¤iüþxgK ÞYŒB8Å +ÕÇÄëäÜÓ—ÏŽÉ–þÝt‹²`f¦Ñ ”L…YFt¼ò*£à8Ø¢Pè t'nßøñ· îîòCoxò±Ÿqæ€lûs[°m¢à>'Šá$V-1ÜßÜôçx¯k‹ï¶<ð‹aéjö`ál>ÒÁˆ7·YHŸMså”o”ãÔ —wGø0`¨‡Ü7fÁ;„/vo€÷€Ð€!èbš^ksÅÌÉÅŸS¦WûUKV‹íÈZk±'fòDbØÂFܦ9Á£:âŽó·àooyÅì8\uò^nƒ¯_·ýöǧh÷ÍLž•cf®ã‚T‹§3n¡4ÁæÀÈ€dhG‹B±ÀòP!pÇêfü·×;¾à½þ dÏF,e‰å°„*Õ'blËìn´ãšŽVŸ¼ËÒ¸¤|AË3Њa$ÎB$€†£ƶôÒÙ‡þß:G¡Sˆ¡÷‰€¢ûÜñLû…ŒÖݨÌ1ÿ6åK`æÇD@Ð_E“´D–‘’ÃD`°ôkWâ_‹{R1m¦“mÛŸÝ«( AG…÷¸þö×à¡WÿcϽ¿eGD>øA†¨Wó"ßTŠ1‡¦A„KÆ2&Ú…JeΛdžˆü~"ú* €¢±7àßýΧ_ŠÁ&ÄÒ9è¹].¤Ò*Y-³ãlºj7 ½¯×v5ZxwSëg I2ÇAŒ‘´«U¿*¸á®·â`}sóŸÍƒ`hˆ›}Aed˜srãêÇÍÇ€æaøØ 5øéÆ;ÒØZ—Hßhàã(B^ôúo<áa߆ÙÅŽìb±ØsŒ…,Ûy×ÃÌz+AÞãÞ`dîé$„›YBó˾CbÀ)f¾é5¶¤dKÊZ[óOñdŽÅ…ºE&AHgmmÃ@˜5!Ô ïo˜~*2Kœ æå‹“ˆGLè  í¾Ÿ¼áëŽD¬ïŽ’ã}[ ™wØ ‘µ¥¸ûmw¾Á§Ó⼫°SOä’ª ôIæŽ"¢- K] ®!ùàÓ|Hf‚ÚÌtNF°-}s©í^;GlÕJB?dr€ÁvƒÛXö:xZÌÔ9ûl—â*t8²Ÿò¢ãøn×P}‘çu@-k÷®×¸áì[±¿:‡UÙÇ-çß1? "¤ ñ ðùWASìègGtíÅj«ÈæÖkI4—ƒ,`€¤u Ï7U­;È/àÞô_Oxè·bl)QNÈ),†,dÇO»#]˜œyo M(;$³&–rúwpßwíV¾ËÑì G6å<{ö%àt0öt#i•ÝådöqB$Zq'õ¼Dm¬gM@öÙ¶³·<ÔïM‚=ÞÅ@Ž k³,Å‹.ãÒ~`—Ä ±Ý%/ðü7é±ßa‹’7±:ãÇщÔañë Q]¹{oܼÿVÀùÕ].$²ÄÐÂü*óßIÈZ²³wPÓ’ƒ}Ι!nßePG.‹; ëÖû×ã…§Œž4r¢©}dðˆæ&*¦(cIÀ¹Sü\ß> ¯C3ð'EŽL»'ÂG©/íÞUÉÌÿG_ñmG ^ktp:x,:óÏ®* †&üeË[, D¾Á A “"à÷ÉPµD”$¾ç^Š+N\‹/ûµ:´ç¿ðæ§>ÿáÿ;;'±#;d‰ÀîœÎ$ÌÇUi"Ǥ¯ÄÜ}(; ‘楱f Ô?$­÷i=Oí ¤Ðk3.h¨ l äQH­³{u†{b1 ³ÁT?ôùI8€ç¾é)³ïc[go÷4{{û1iË©b»vùc\Üqp €zðJÕ*’^ÈÃr6<0Þ™Uÿ÷¡.ŒQÕý icÊœœrÜ2Bn‹0û£H³Ë¡í9Jñ°à ''Öl³Í¨(iImJ qá©À»6Šh¢!Ž çµ­<,¤Qø !ž³/V¬Æ aþ›f5k…ñBFðvµît¶ €Îœ¢T_6>áà¼^1P®ÉÓRÓZ/=‘Ý~Êá+ýCÔãSÃe8½¸ »‹Sö;Š:z¾*kKò‘±[F±2ê<ïý°ö×"bHœ§£ó‹A"ɼJ›¹6‹¢ä³w'…5]e`®:¯$í§^š €É Ø" Õ;É:ăUjU`°xþ¶zêâVüÔMßp¤É€/ºï³ÝôT©!; “´o1Sö{f"„ZbT€/ø<÷Ù!ì§kõä1’´œâQFŠ“ÃeþlÑÑ9ÝbXbg¨iu«9e\X â4S‚Ò]¼¹…mÚ=Cé¡m¤ä¨ÉƾñÃ_€güÁ“.¾Ýê ;m@'…kjfÙâݱ ^bÑLœµöMµ½G&/Ïíd˜žÁÅ0ÿNK› Z…­Éä` õlÌró›”|/¹.{0«Daú…ù"•ßK‰ìjB¹óxÆ'þ®9u_\¾{5>÷´±mמx v‡“mnÖP,P0B—ÄkmMN׃™ÎÀ‘?‰){:í³ ÁžÞª ÍZÐU›Œ^Í왿û(´$[yÈú ñµ…ÍG[É ØBiª OÒÛÔÞß!ä´Í4GµÍ/…/¼Ï³ðE÷y–ת‰+Ù¨ôÒ°ó2‡ ¶AzØ?ÎÚmó÷¬#âÍù9Uœ]ßFƒ^¿Ëa;‹ØYœhyÕÛTõ +ÚB #Fžöô”ÛÚćzǶÿ6SÖÎpò‚wÏ'½Äß™¦ÿIh)uaýsÒH¯ìq¥ú5êp倓l {„žçv[]‡ügè”ÀÒ7fú.´•ÅøÏý/Þk~iž,à…ÐÞk÷ Í¿U7v­±?žœÙ©"Œ{øüGëÆQ8¹< ‘E˜™Áá»1 ñ¦™e”h¡›S‹NG4’Žpdè™íîý¬Ù*݉ PÝñ(k.Ýè§}G¤•ª4pÃZyß¹-¤…CL@.a9jv‚‘ M<_~µ¹º“˜ü¢‚ÿvËvôÿ…÷þ~zg´…V€–µR@GEæñÉÌIå—¶h+ ÑÕG³Ço©ül5•T;´mÊRQܼÇæ_߉ŠœXœÂ‰Å),‡Ý,0î†RÚic)}~ZÐÖ_ÚðÂã¯UÇ'±Q¬OÉ€Ó;—ç¤eG,ßóI/™güô½gÚM™¤¶e¤î© áÓ8ôæ¥Þµñ7nÕ!¬ÖoöáH>™,ÄH“Í\Á‚ÍóÞ!Ã_ïgnZŸRzî(kÇøÉ_ÃÏiª?¬ýQ¢-Ö´ØXšµ ”¼)Æ/À”rj÷j&^ÛëÂ)£gËŒõwÞDê®oR&Bƒ„}Ý"C:ÎjO2¼l._pÝ÷#æ† ùˆ÷Äû½=âmgÑ8]8'™€B(ofÀaßë±@î—1òäT-£ï°ROx:Űc7%[ÞÝQ&›Bfm*JLÔ%)òB`'UÄæ×1*øÖ|žþû_ph{¾çq/IÚYKcüÌÔéš1sGöü1é~—n2ÛtƒÝ ÒÕ‹®^ êöW´g×—€ù{(%#jeÜžCA'Ñ:­C ˜ßå}ƒ¶ãHƒpcýöÃfÄ™¤#µ}ÀÐÎðߪC¸š‚–ÃNË“UO?Û[ŸÛÀüQ÷1¨{½’vƒXØMª½<ÅÜoè«“1sJ&’ çÑPtó2¡)•ô~mguÔ+qŽE{<ŽçÙ_Üéü.€Bèê‘Lûί]n½±µ3Ÿ¸…Lôö@Øq7®,¥ûò¯îõ}!á@}"Z íj~ÈI&h ¦†^k»I^B4Ù¢ÛˆuM0êª v¤¥ûJrxB­^¸œZ^î6ÿ¢G´‹]taî…LQÈHЯ›Vçx&4KC-M=·¹ÛtL |÷ã^’˜¼?ÏCߣK½s² @ÒúÔ¼©ÎÈ2…¯}{¦*&lû·<ñ5…Âxɾ]¾Ö`òIˆ Ú/ RÇ™Õ?‹AêqœÈ!¥ÓÉhTÐEP "†–Bº¾¥zæ—ÃÃTµ;¼ýqwîߊÏx߯Ä/¿ö'o[.jšé´WлµfÐH,íýži»¯cfêÊ”÷9Èm.‘õ@öRœ‰Dg"¶P3?{"Jã¥ìàQVžuÖh³y.Æ¥GBI+ÆÛÊ\äÝî_ȃkãê"xÅôUºÌ죆xáñ‡=Ë& NÉ‹W…vHýaÃãТEBãùá7LSQ<ùÏ®“2Ô £2U¼ãüÒý–T M5¿ûpן6&Œ^§‹%Ì;ÙáŸë©ÓRúÐ2‹ æOûžÇ½$ŸäÄŒ”Ñ:¦¯sÜõÜ3®9t?eô/ æcBÂ!ÅÖ“€aœ±¿:‡›Ï¿ë±&5»æÛÞ¸òĵÈG—-%¦osÁÑ9$Y†ÂÛu¡VÀ×Ö”hËÔcß*±}>`‡Eªr›’j uõêNOw½.Ø[ŸÃþx»úQèË3>ðUìcãzl9‹b,˜ òj×·¹RÏŽBéi#róT"ðñI#ǃì6ŽWÅî ™‡æè-äùãwiƒä_4h–˜þÊÑ ¶Jõ%¤¡ P2ŽòÑôgg«Äà¬:Kq¬I=Û 4!ò˜Ì‰ÙЦ*ºBß6 ˜Höøo2y6VT"?p.lzÁÑfê’Š!;d3| ˜ ͱòï gêkËéa (¬jª™Q&ýyb莈dÒ4ôMgÔŸ~§ƒ…µo%dx@«À[­póùwbu®¸uçE ÿ*D†æ`Ž´ ÌäY HÌ¿7A'ÿãõ›÷¶(e—­âæT®ÓQh ³b[ovÒÝz¬‰éì¸Ó±¬qnu'nß¿·ïÝ„;öoÆ]·ãìêv¬Ïãwßôói ¾ÿ_‰]9‰Av0hÛ+ãLVH‡ÊþǪ7$_˜oâ¾4Ï‚X‘yY(PI+`ûb Å<ÂÒWŽvÌ~ŠLÓ)-ÏQ˜~Çn†ôÃQx‘¡hÐ 4&’äBÖòS7=5IT–§18 •†Hƒ‘¬ý×»cêžž@šß¹šÃÐç¿áËæ‡EáÙ9ƒFFŒja¡Ýý þ»§d$é'D›ˆÂqäÄDÄ )í:"N.Oc1„‚ùM/ý$>Û=Ùà{çí±²VhÚZ^ñhIVñ±Ï“ÿ©nFóÖ§ZRCø»1ËÕ¸r“ÏÁ¸‡}Å·á'þüÿ½¨™¹ùÜÛ< `„µ‹#lÓ™ûøý`%Ï¡2>h0ù¨ICôñ|ÔIµtåI+¡:-­s ý»Q1SiÛ|èvÓ Â>õÿ\ýLüÌ­OÛøºÝøõ€/¸îûê›Jèøb&gJ|š•­~1©Ú¾­u‘.gV…ê7†Í•'?â9PŒ X£"ÿâiüÜ›ÿSºÿyy]à"(ãÑÀvFÓ4ÎÆý(B`FËé$¨}/(3ÌTÑò³Ó© {Š/8BgVâ#£ú~ª'‚¡=ìÂÀn÷\òEi~–ëš8;Éê_5ލˈ[šÉgUö±.ú¹¼ù¶¿ª‰‡E=‡P‚à·3)ÔýÙ¿ ~ïtöƒž8 Á"‘´ÙÛÄb¿O2Ò PÍ luÙµ¦o¸õÏñ;oúÜpö-X—Õ¤ïÿú߃|凷CîG¬±FÑu;zÁ2 /]g€hà°læyLçœÇÇò@ņ°üÙPv|'ï˜öïˆÿ° ºŽM}6P?‘œÑ?YS´»fmÐn¡hZ&ZÊì`0p„£RsºúÈxã,4IXx[Õ¹G)/ºñë_pïïOÎ6ؼ¸é`“t|¥ÝkÎb¡8Íí…%iÍÑ$ÅNŸêÊÎbËÅ.Të«EÆðlyHK›ÑÜ‘µùùê¬EžÙg4ŸDwZ„£;±JUÏK;ÌF0Ôô­­ßü?†ïþ?_  š‚,( ]Evò’É¥wÎz{fºk÷0½ ÑKô%P#=Oï³Ë¥1¹swâŽý[ÜÑ{0î]2ÔÏåö½±*×Ý:e ¿2tuG#ÓŸ L2¹pÍÀ‘sÑ3Å’Š+bGÑœ;©˜IÆ´•šÄpÁ…ÉÙƒÛðW7ý1^sÃà-·¿ër0éó?½öÓñá÷~îsò¡(e…µ®køh©§ëù Lh¡´”¼ÛÖ’irž3íV†¡„B÷Ñiþ0)ÂcW£& ‚´NÍût2-[$Þ†ÆÄoË­7öH×Q´Hcr"¶Aóß‘üœ Åç]ýLüô-€KŸ,Îv[4OÞ~À£æñ.áPivB¼Úã?üæ/;Bk¦åÉÙ@I+Z5™­Ïfõé”Ðqã;ÒÁ¤Ê³sÿÂú§Äç…Ckiì°›$“FE`9KiEÿÒÎÙ­ç·î´ŸŠÊú°Ðo~é'á»ÛÎ߬L¶ ÑëdƒÖLŠª¬:´‹ÌüÞfáòQ `L@µàÜþ¸ýà¬×ûí´­ƒKŽú¹ü³}:ÖãŸ7È€Rª6æñïn¿²þò° 74ÓˆÍaŸ/¨OºÖ߇šV.;PØ«#-¸óà¼äõ?Ž×Üð²Y¦oåŸì~&>õ_……ì´Cá#VÕÖV¢n¨Ô2v2eÈš¤?—p–ftã—mø=ò§qï™4ú54ó‹æÏIs¡MÎL²,t‚`²PŽZèþÃM@ü€5Z&-ñA'<Ð:̆UòÏ»ú™€~ú–£ç€Ÿxç×N®ýëû>ÛCט(çš/¢ø‘·|Å1GlZžüðçPÝèG1Fþùë§æŸ–ö¡ž³Ëg,Í ½Ò‘]Ôk .¦'b¹˜6TøH %ºšaü†›À1G ¢9=Kj]¦KYÖŒœ%ÔþÒΛåòÍ/i𭝹Q¶ÏrÎ$Rˆ4¯þH@„,0Rx' ëÏÙý;qÇ»ñ[yô}>ÂntMK€ìl êãyòhUša$¡}¦ÏÚBì0Òûœ›Ò5Áõ·ý5~óõ/Ä;îzóÆ>>øÌ£ðè«>ïõÇáäpDDãfÒªc1?FT¦ußÁØÐ<ƒ€‚)W4Sv1h¬>ë—yIbçdvÉ[åçwktbbJóÌÄe·,p«ºÇ+[,ì 'qzy%N—5M³…“íoñküNmó^Ïs­ÈÃÍAl÷÷P‰žf FJ‘2c^a¬k¤Ó¢LrÈm *ü+’˜oÈÒ„OŸ«ÿ-ªÓ&ö ÿ0à.Ó{gJ×òV!Põ€É4£ªwH%„C mæ£Ï¿ö¿zkEjx軳|éCŸtP¹©ŒUÄvˆŽkQÙYìÖØx §Kºƒb,†úÛæ]c5´­ð5ضôD{¡Ŷ±öF×{ê‹ïõQ61³g¤Ä\º.Ú¢Õ-‹ö¹*X¾è ^ðŠÍÙ*¾çq/™Ð/,›uØåcàƒpG~Žì´{«³ º3,pnu'n=÷N±w1~+Îü @Èÿ“£‚ê04?—Ïac’šk 1¿Sç¤3z`ïgM£E(½ì-¿:‰ã¿îôqã¹·¢hÁ“ßç(väN-.Çîp ì-'ÔªÒ€Q6.Jq’-ÍP^s ÅÙÉŇeÞæQå©…ŠÒ‹ ä [ɨêÚ‡]ãðN3¯—›£‰Žç~s°ã{©ì˜×¸Ofʤ£öï´áÍ`‹Ý(k9 OâFR*gâ4OŽY#KÂÊ–ôõzîûÚ+B`\ŠSĸ<ùA?äþ‹~Ë—O~¯&6“hŒJ„f‚Ÿ‡ÆVÕrO90T4m»@yg£Û7½´îø²z&®ç“_†eËüYûʺërেÙB[ù¯‰ Âîªyyz1Û oœ‰þ»© ÔgÖ+µx´›,g‘3„ ,ë‚-#FTÆÊqäa>zyÞËktØ—}Ð3qÝ™âô‰ËqnÿNÜrîí¸æÌýpù‰«ÜO±jÂt1,°Ö±ÆÎË€±¼ãŽë±÷áÇ"3{mé±¼Û~_έïÂå»WUû?!MÚ²ãÎLˆ+3y#À„ñǼd¦osêßMƒ#ºä袗ýÝ/ã/oxÙ¤íŸö ¯Ç#¯üp¨T:P;Ý‘ØN6›?PÊÚßn‘rꩉÎK6ûøµÚjsöztÊ­Ø‘‘†êP»('‚Š&JŠ(bh¨Åýfv#huó>ÏFhæü¢£[¢\7@tÁï¹pP7¼›²gPáìи§oT»¯n˜ ³„ ¸´5(êZ…©rÉQ'PÄ~·Îwè t8ÌîÐh ‚…X­«VYßYw¿V!Pt½Îϯú†þ´Wª• Ú/´aj]VX•ƒ¶e¾þ^i¨-òºíÈMŽzó 347V‡ÏÍ™M±#fÌDÞî[ÞGÕpÀ¦b‚àK>ð¿àWþú¹xüû<ålÁÍg߆Q×-²(Ò#¨VGù¨ë„TÑ(ïžÊìçÊMgÿ—ï^Õœ¾ëÊœ ;³I¢4æås#ÁTY;éÓ/db²cM ܵ+þê¦?ÁënúÜ|þí“vã£~‹aŒeÄ 5(Tüº½Sµt4×ö[`ôà m{jn­ LâB@½¿H£C%1ç9“'Ûö%Ö€ö5šŸŽÛ¯ÈÈœÎEñ(Z~1¸Uv6¡!¹ZŒ×€ÿbæ»y›õ¦»~40÷2o™ȓׇôMÞÝœÀ$1üØFUBíæød„j—M HuC&uª5¢W“’I7ŒkR˜Ó$ÇVüú›mŠZ”ܲα—üíã£ò™ŽòÊ4‡vâѺ¬°÷±jŽ4Óœ\ývnŽvj…4ÁÙAmƒÛM„†¹ÈÌ8žÄJØ@—‘¥ÏŸ’Óf’`µW±ž¯üèŸ}‚Ÿü‹ïHŒ¼6Åi™_ðÿ@Ë™+P´`X¯¥2sŒ ‚š Üè\ã*qª‰±¶Ð3}¦M 5uÄüݯâ¯oú£I{ŸüÞϽN= ,}Óœ@0hEþ¶A dHû((96­Cá¶ÿÆw’ÔÞéJ$x«?WÞ9Oƒ™Ý³M?´+Ö ²É(±ªà;ÞÎ v_ÈŽ@28Ì<^ °Å}!¸<çÏè7Xh+[OÛX&VÎo݆×ÍAœ)¿9›Sî^U‹Zw¶Ú‰_‘F¼^³ÛÚßvR–¬4ÀVÚf°8¹l{ä€ïäsG£` x[TåbÀU'œÀZ÷¿ô×ÏÂënúS|ôC?¸æýÔ4¹ Y6ÿÀº…S¶•PŒeÕPm˜2ì\ø*8uƒmE Åž8ÑÉêqWW3…Zí™ÌÛxNSýJ7ƒ]zf\Ö˜'äÿâòÀ+ß–.YÛ~€±¬͵ÙH¡ŸùZ¸d˜K2Ë+ɇPÿŽmƒabúÍŸc‚õÎý[ñ§o{ ^{ÓŸNÚú ï÷Ó8¹¸ ;Ãn)¬- jÚ[7Ù\c̱ÅÁP q…÷S}}瓳ZÿTæÉD3‹udfgísU…† ÙaÛˆ1þRƒõ/{6˜ ¯+ÐÛºÿ2Óï1Þ1×GÇ©À^Þ¡ÇZ„ª£‰¿Sd¡Íî·´‘Œö,ùf³BJÎF—¶}°Ã!°‚ÂT´yU€F·©tqÈÉ܆?83¾z÷¾øÐk? xó/¸™ä57¾ ¯¹ñe8³s%>ðþO|ÄâÊ“÷|!ÖÄj€9‚Z,xË…,ƶP,_‹ÙÞ¥í¿ÐÖ¦ÁUdóÕ˜9 ’!ñú^„6Ó‚–ó¥1|Lš&²@²_BMàÿߊ¢%Qkþ¢ GêŒz#ÉÛᓞ¨Rc½¯1v>"Îz¦ohE×ø?oùe¼é¶WOÚøoý 8¹¸¼1R‹Ð‰Þ·Rw¶véN&Ñ2fZ4í“S©tHhæŸÆRªìúÆ™1sg2#FÔ[+@÷¹/Æ8 Czÿ ñ&E~+i6GÂ?Ò¼Pæ?[9„§/7Vv„‡¹îQ·IÃÅ]¿#L*âWµêÀCl ½€À&:wÈØ£&L´í ®õ¸ÖÐìå¦ À} ,ŽfºH‚,޾Žãú@†X`h,y`Gv!|ðÕÇ•;×áå·ü*nØ¿ÞØÙÕíøß׿ÿûúN,NagqöÀÇã£òÙuĺ¸³Ø@ÑËaјíÐñºj3,ÂÚQ#*ª`°8²83d¨øIǦT!d;/…ˆ¾ŽWñöÔWµŒ’½-þ=åh¥hiG%Þ…ýõ†A ãWº·ú‡ÆHéMñûfâñg¡)R«¦ï¨› ׺r¦_´lô—|ã£~—ï\…ì6ú[aמ¾?®=}?\¾{5DK uå¨m²ÄØÚ ‹z‚’™LkÔ>ìleÓ8†¦µ¸úÓ2Œù3b&Îk‘ˆÕ6-ÆLZãLˆ÷”íåÉÿãð_þùÿÀÁ¸…,±”“zP÷Š4scCüÅÌ?*iŒ¸$³Ú5EÁj<€ùŽº÷A øÔ} îuò°Ô'ëqíZ†Lîÿ e¨­ -ÔP~„no÷:S7¾g¶5—o6´X‚=o¢£1ÜÌÀM« “ÀB"Ú†2ïÒ¾9O%ù¯·t6Œ"bÚ€ ùA mÛsiݯ¡§<õ¾øœ~+^vó‹ñ×wü¬õeºKvUªÏà`ñÖ;þo½ão&÷ì,N`);xïk‹¼ÿ'àÊ“÷ª¡™Cб2mf!Õ–\K¡z¨¶»C u­Ç9ÖÅ·nNb‹nRbø‘ÿ§"­ji÷²í`>lØ{Ê|ù¶ÿõiø¦!®8q­ûƒ"pÀâQ¸áî-¡1ºù…5곩!±{(eQÇC££>û!ߌ¸Ï°ÒuEýelBH‘Ô’.tÒ,­BTm ¶X­ý„Ü,bÏ ò!Ø€œïÇ"nÌ7ˤØSìøÏ!¸[¸éÚ®o’D«] Á¸–Ì:& )™ñŬCÖ ß{Gqg×Ýîž«dÓ½1ޱ«›ax£åk÷ŽtOÊ5aRÙ„²Ò6)’„Ìl&KWAÅC± )ÒLâsDÓõpje¬í¹Áއ·S†ÔÓ- ™¶F]áÄâ2|Â}¿»ïSb*¸cuþèæ_Âknÿ}ì—ù¼9}YûXa¯ºá÷ñª~‚ûÐÏÅ{_ûX\vâj7íì' Pìû.X²lBidõXË¢…ìÕ³WMXºÙœ½ª™gñ Qf·žË÷þžrôråÉ{5­®jR"âþ!ÕØ«íŒGâm“” i¶ó« €²>ò±•øÌ‡|#>ú~ŸƒñF=ÀXÆ&Öí}d¯@0ºÒL&Õ_XœŠõ°.@Á€›Ì9y‡+o,(¡ñ€ð ̳+í tå> ð ÿïǾ¥qbq ZÊäð¯1ꊢk¦^³óºn{MöÔ†ÊüŸ†½ßb}¶€ãQI-D¡ –ßoö{÷ãi³ÏKè*@½^Úf½X“„ˆÁ·¢P²‡SØsÓ,âÙi_Ì—Gwµâ«1ÞþÜàË´xþ@„Á¢] ç`ÿ¯E.Z©9JŒÊŸ¹óφ1èËÑM@sLËmþ]"ÒÇ÷u¹¦ >¨fV §®}hD¯.xj†æ €dF({±Ùð…~'‰NajÓ>™ €GÞ8±ˆbÐE“AZP$T=EèØ"¡ãʳ²ÄÕ'w~Š®0,vjŠe†a‰¥ìàÜú¼ìÆã¯nÿ}ìwͶùþxš!õ)øÝø¡?}*¾ìƒžQ ¥š–ÖΟnµ–ØN@ XX•ƒª1 ’ÌuA˜Ḭ̀ÖÕÝÂüŸ÷1‰ÝÅ©zJ”‡EÚèNˀʆ6Õ¥-Œ¡Ms!Gù@è°H½§Lê²…|£B6l¯­Ô‡‹ŽøÊß{ÿc÷ù?üîgOLA£'…,{¦m›_À„ñ7ÇÑRvðé~*>î~_ˆ½õY¬´2ÿ¢k¨¬ÛÜW­ÃÏÃv†e p&Ç©’ó†4:à$1ûësXë~£‰µ šÁ“Ó”k¨+GÚ„ðâ ÞT6 €¹ ɾµaJ÷ú÷¹ èà“¤è okLÝ;έ }“8 ºÙŸR™$0'6y÷-# Ãó-˜6`ý‹M/À0´EÑŽÏ«mêA×nÓ¬bC¤%«gÂZä‘ÿiûêÂzØeïÇ=à)øýwþödzØ/ÓÄ\Û ;i~õûã£òÙ¸×à`ÜÃXÖ8±_7‹¡ Æñ¬¡ŠöYÏ*ð³’é icãî¢ë‡*Ä´X^¦`–ò¼44=˜y•üÌ–‚ßyŠØ\3g.r«„jzvòkš¦,pÎdb–õºÉB>…N‘™jæ®o2Ïo)›5€ o8s?°]¦ùÞ`vx „E˜Üãš^Äþ§ï¶˜Õ[<3ßoJiÖ»>¬rýÑ^‰hƨMÐXªÒ#¤ ˜€”¶OAPíóföŠ!­a¥žM´ÈP÷<æªOÄc®úç€çdz8»º 7¼o¸ãOqóþßã­ç^{$bxã­¯Âo}•ÿÂÇü{ì.O%íàÄòÁªì'FànKŸüÜùKGÑõ¬ÜÒÕ&t%‘™jµ@QOÚlìr¿Ì“«W5Òªæ`³O¡â‹5L˜Œú ŠÕ¸ÂZ÷,‡“çÖ·áÎýÛðÕ~~àÕG;Šô?üîgãþÙc9ìà`ÜÃÙƒ;°·®æ¿åp‹aYÃnuuQó°3œÄg=ä›ðO¯ýTŒûXë vàOeÈ-ä×ÒS”–ª¹!ÛHãPè¬ sH+"W™Ùdð8x‹< „6svµòJ ŸBÜ·I`îh«˜œÎÈ&¡Díj:sfeV,Âf°"Ûÿd5rS#²¿=wï˜Áf `Îæt\uhá›m¢°ÃÉU ©?bÇFJ~Î\DåÃf‹ò{'â5ê5‰Ím:> ¸0«Ñvä6ÛO™°Ú$±5‹t>Òtâ~,d÷´}AñüçâYM«=V1 †žZ\“Ãi\sâ¾xÔ• ܶ÷6¼þΗ㵷ÿÞ~þou([ùÉ¿ˆã,ÿõüGœÙ½ ûëó8÷p~u×ÝšXí¹õj,—'}ƒêˆÕ¸òdo†:+£ )`Á Ð!-GJÏ­•ø­2|%ûQh6^P-Xáe<¨Ì±¨â`}g×wàüxgëÃÑË÷¾ì)³×¿ð1ÿËa碵¯A–øì>øÚOÁZ÷ª¯uÓX¡H07û”±fƒUmYGН7Nîe¾ö~ÕŽß6,Òê-l)äGHÌÔ¦‹B07γÆìüS“ß›M8lô·$ýýjÿí¸5™«|ÏCºGºVuå8<¸3Ï-tmíon\er­s¶ñÊ<äR ˜R”Y\}#O[úöÅQ›ïpç/™ŒH᪰½3÷wKn MªyÜy$âïVÛ«Þ1þ *E`HF˜œ^¶^„ð›é¨nHËÊÇe](ëõyœX\ŽÇ^ûIøë>£5»‚ N.NáÎÕ­øó› /ýûÙJK?þçÿñˆTwqå9ù8¹<…;Ð"Xc«–ß2¨ŽºnÔæ±š¢üW§[è¦m>%úBþÝ6®¹³ð`Âk•c9ÀXêŒcAÑóËÊ>öÖgQtÄ—>òÙxþ_]Ü‘¦,¨/´œY^…'>ìÛñÈ+?¼i-ëfj›¦4&\ý/‚Z´šâ,²¥ú"Üûâ¨9¾ac€P*¸©NÝp&´Ÿ˜&èwš Bá\&(>qÍÓIÕd«Ac즙(÷‰ gíù§–ßl[ç¶Í´w®stnz¾ãÑËTÁ1ÑýÖB ²½@l‹A‹•™"EgLh¾j Bg¿j2³$c’ÄÄøÙÅ3Ådìm‚í^O=­p†ûZǹö†©-úm*S³”6Ž6 ÆàWóQ½gE[ˆõñš1Ʋ‹îC Ø– 8Ï{ÞþzKìâšûà#ïûDüÓë> ã9¼áÎWâßü]—Ž^žó‘¯Æ©Å@+´cÇ}8¢´L’~žòXÍž©óŽex7¡Kÿ^è»–ZoZ¤ß¬Ó U}„§<¥FÉŒ:bvq²¬ÏãëýB|ÿ«ÿÍ»eÌà1W<>÷¡ßŠÃ¬ô "]al(ßÂ<áyžH+ááXý:.Ò2ûf®ç´ˆ2ûì«–Í-dWѶeØ®™<ÞÆü™,€àçÜ»GÅ%~ÚëKÚE2yÛÔ˜˜“: Çg4o§Ä|ÿ4ßÓ!<ƒöÛr¶‚Êá:÷Ûе›ÚöæÎfcêT^nð[´ÎËÊe”Oï„!m„6rHçißqøÿlÐÑN4²ˆ™Zïà›×,«i´=œHqZ’5…fâiW˜D‡­¢P)M0§ìºµ« Ðf®¡ÚjÏw”&.[^‹rÍ'á‘W}ήoÇ÷þåçƒ(.®TæŠ{ãy¬õ bÙ5ìÌv%ZšŠuÓ‚´PΞ ÄY¬ýáámÎ4¯“¬ Ë¬éƘں¬ªÝÜ4‘¯Ä¾ô“ËË1`Ó'®À]«;ñÅÿèø±×}#ÞÕåŸÝû ø”|N,.ÃzÜà khY·}-—TKFXJ=”¨F`V)Z*”íW\ÆšxˆƒÝÅÉáw ·ç+¶æ)§ÿœAb2GÌÐ…*·wj~ÚÅK¯±ÐÍáb%BºkÙ;×@ïžáCÛ}{v”l/³ÀÝYŒOb:î(r'slr­³Ì`³Ý,‰ <‚a'S«=ÀÀ{lC†E5…)ª4“x¨«§iv»hŸr"aJ„TÃ|UÈâϱ;œBÁˆ½õy¬Ë~MQ –Þ·ŽqDÁXØa 3›£mMND& ¾Îvi…C3õD\g½¿EÕÁŒºzýÚ–j:±ù0sF¡Ð!EÕTªÏf`ÀË«±ÀŸñoÀ/_ÿ½wÛ8sYÈžðoÁ‡_÷ì—s•ùëA ï\7vNÂ4{¿!\cú ÞÇpüšÖ £FCìÚÙëT¥›6¶zI'q%†ìæš‘‡^XqxýŠƒ³D%Τ"¬5üÁÜ{Røy!ƒdm(Ú;c—9¬å ÈXq–Ñš‹¦©í…7<íçÔÐ$ü9!T?£j´ßzEÁM>œwÃ5Î2ºÉAf$@„¬õ±þYí!!@¢,eõK,öžÐл½†5 ;Ô¥æñ·hŒºi ¨ÌÑ0³ÈÚYª5UÄ0œÁ¹õXáWîÜ;‹¸áüßa½8ˆàkù£¸þìkðËo~&n=x‡ ˜KQ~ð#^…Å)( öÎaƒvB¤&öÃKŒ$<ħ^(à '¼íüò|vö Mœ(´´o0Õg€‚̵…ðJ1ÁΨ¦í¶-ëðC4Ñ Û´ÕøFÕÒU+s@²Àå;×à1×üs,d‰¿ù»/ÙøÎÁ€OÐSƒù—}¬Z2Àš@02½ÖèÛQܹ ?£1uÌJ±±(ˆ«ôWc_€­EׂÃúç´:KûÛ\š€‘¹µs/,ŒçL4šÿ±×šhw³"í1òÓ É·`öÆì¿ˆÍb ncè:Ã/‡/Ó›/Dë9s€dÕILº œáùqan7G•¨vÝÛÌ>…0±p´€õÑ­5‚Ï£?ë4áùÝfÚ±¹æh¥ð Ñ¢8×V}"1µ=¼`þµóMDr¶zÑö!‡@¨ãlºÆâüÙ§—AdsëÛ¡(¸îäƒ ²À]«›  ÅC/{?|íûýήoÅ-oƒ`‰œ~/üÇW~ò±ÈåÙöJ,'QÊ *ŠÅ)@ýõ¹šr¢Œ1F¢±6c®:Òi5«øAâ ‘07Ô5]gN„|üP©''Ô¯ƒk,"Q•RlcÔi³È?¨ÇúSË U÷˜?êªÆ™G\‰Wßú{¸þì_â–ý·k|·•ûœ|8®=ù|ØuŸ‰Ç\ý‰ØÏâ 7a_-¥ÙþMèóŽ \½·`êjRhÅp‰=1SQM 3Ð}>Ð`änWÅï4„­ä¡×^X¤2ýeš‡ÌBýcae6H±ð&8d4s‘#¡ÐïüàÈÃøòqÌ>ÊVÀž˜_~ŒWNÌŽ³V©gupFJêŽO¿‰Ž"‚£ûnT;3“߃LXÓ~ú¬ÂQ·åýn;ƒ… ùüG#šÐíÏþFI‹Jìuž›ˆ BÈ¿=A'‡C,Õ·®¢ù"FÛ˜¿3€C™ÿ1’´ŒÀ…m„ó5››Çw÷æ’ìOÄè%½Ãøþì1ñÄ})1ÚtjÞ´‹vd¥ X,†4Áff*„ƶ‘›«®È߯M]ôùñx&¾èl`;ùK˜IRÕŸËù¿‡Ñ™tMëQJ™0~z%ÝÐÒŽk4§¼ºQÃûO‡¶ÃæË´k_¿ƒT!hÑõ À¶°dM£/̬îõfš,”²`á®’j…×Þ(¡{ÏŒô°ª6óW=äû1Ëf°Í¥3÷mkÐŒ¶à,:=ËÀ@èÁ‡8ø;!í H÷4Òm²š‚­ ’K{W/.êCs,¡zý€õ˜Dšìzî©°³ŠîB%î43æbÂF5ìûÍ\fGó±Ù§.ÚðCäT×·Zë R"{)otS`­£ŸŸ: †ækjàÚ±ºiKeQû8*†AqPö=š¹dlÑF È´c•ÑŽÍ_j¶ž‰Bj'§ƒTCñ†:I#«¨‹³ÿÐùF“Fýbn_‹15Ëí1ÑH|÷ÈÏ´0Öæü­æ,®é G\¾¼>ø^Ç?»÷gaÀ²€X qtOä{ë»0b…±TmOõäi€¢yb,ºY"êj&¤ÑP¾훞M˜‰£‰46ì!êJgûë`Ñm‚݇]-ýx,w¤zUTúâ„poîJÍéA&‰•§9I¾/h‡Ú¼‰?m],S?ŽVp¼`zߌÀàÄœ¡Ž²ê•æ/0ÉîŒOð³·_Ú¹/º÷³RˆåÍ›DÜÎg ‘ž"òÛ/&m#êÉ…[$Õ±š”u†²ŬâÏ!Ô;I‡+¨ÛôM%ABtv©š'ZŒj †1fU`±Ý5w°Y´óˆa@h ÛlŒ¨¢-…ï¶j6}Kó`ȿڣMHœq\Ã*C­/¢Õ:äçGô ,/zg;ø71ëRœ&!&ƒ?JÌÙì&ª0ÑÙic^„vÖDY@uvd§i‚–-JyO„Æ!@~X¼·Õ€ V,çe>eD­¡=ˆ%{+®iÆP—ˆïwÍŒØjç™Ðºvé4â¶„¦ógæšB{f)9ýÓµ ’õ-BVÑ©ÕBf?¯Çg1ƒî9ÂçM¿uïte[êÁQ4€MZÝãkã(’§S¯<1ÔÑŒ{å[ù¹;¾wwù‰¾öÒTä6SB—ÚR“@ðOÌ_<ª¢Tœ‘fÜip†WmÑi$dšè&!Œâ A÷šIý`±Ž5tÔ´Š:ÇcRÈ‹(†– ¾Í RmÊXWSFÒñiw‡ L |x|c űV?€÷@[: cQä°¨'æXŒA‘É…*Õ̦´¨aæ^ôV§Å‰’8¶J¨ïq?ÍhQȃk8Í/ÕÆÝòïXD†Ê¤e°3 ›¼,Bm,ÜzÚKa"€®Ï¢±„ÙÛÛø·çÇbýl©šf FH™0hZ€iq„(›Mb­ðå£a2³Ö ‡ãYÌÜ–ÓÆôïóý@&ØXƒ ó²S+A‡1Rþ¨Ó™UŽoä…¶™§¶Î|ž±¤lâ·"ûçº÷m׿^8#Ý&æ°î^Åü|ô/3†øógÿ-îi…5–#Ý0eÕPÃÍ\æ÷‰"]Abð+ ý÷Ì£†¤ÍnÈSäÀ«&sA…1‚Ñð´:ªéÌŒílW/õüáÆ°DŠw¯ mP…âe„`L´Øy²@o~SïWŒ§ÂL3VÞR2õ¦ {%Ûbs,M\?‘³sêÇbŠmð2m©1!à~Žãç-,Ô}€ûeª@h€Ç]ÑBuÅ{RÉiðÐ`”î0º±³ÚIìöqh{mëX˜¹ç4Üqo˜PTG×Hì›;ÙËÚî¸ß3›e³-3» ¤6ñTíøWÖFì]Ic±ÿ(1ÿN’yHpÒãƒ=—6ƒ™Ïþ.[~Ûö\7¼ÇÛv Û¿X¶<ÏRêÅwÝómãq:DÐfßåÏþ«KåŒ-ÁsÊ óÌv_"û\¼‹"P ÑÇÉj¼¯ w q“k¶nTíÄù‰´ã í­Zr†ð=hig9Øæ ìh7tn»zÑZt‘ŸÛ˜Kc¶ ™ÙùAj¦šª'µ“©`§9¥C¹--‰†|êSzÏ ÙxCk‘„nivi|Úë`¡•âm'Ü  ÚîUÍôéGµÜv1€~4bQ7 Ö2:Ø0¡î]r$çlÚ4.´=Á«†2ÒIobÌ¿mntW‚GP)ØLXšqJ¼Dómê…‚ù±haˆ°±µËÛR© 1÷Ä«m^'ŠƒÒ»|UÄÜò²é´ûÄ&ÜCÒ¼qCi<ºëǛʑ4¾qFZŽê^^|îââUÏ„Ëmó3 lÁÕ…õS7}ýÑÆjÆ~y¸&ÐáCÔÊWÔÍrB-À"B(rßKÓò*© A}ƒLŸ­00ªÿFMàäy¶('‘§§¦Œ­¨ÑBj!ŒiYle=&ÓÞ¨-g;*Õ„Ð*P;ø\cê±€véÖæ"æ€T|ÂcšKLƽÙs“jGôJ„o6o¶§™³< /â•XN,Ö½QC4ŒFý¶ßÀ™ObbdK̲N×?E©»¢T­¡ÑCÍ÷ÚIeþ wô¿ùíž™†€cOkfüÑ¢´pk¾‹Òÿª%ÕÚÀh5]ŸÁæÂØ´jbòa.ÌC™Ä¢Uó MŸú<[z¤¯‡Üsåðdp®wæÝéyx£/”ñÿË+¾agÕ¹‰p$fVÿêÚÿÏ·Ÿ_tãT(Xúeîõaæ 'i¶z³ý+‘Ò`$D}‰÷ÃU°ð¨BÌALœÇ%À¾-Æø‘“™%3Qc@fV°M6&lK33ùihÅ2šJ;Š‘_nÍ­Çs¹‚ìEe2–DÕZ¨~ìÏ)™Ä4kn“U ¿¥ñàº5Мá~“µ¬šóÒì÷ ÂØy ‹ôêLAù(«Öo‹9·> ˜˜Æí¨©&˜Ô£Õ1—L“9A›‡fÚï%6t™o#b¥‚±mFâ·ÆìÜ Ê¢,x £dªã8|¢?Î Ì;n§‰âlq¦i$I£ÈŸ² fÆMž->D—Se†©ée›‰H6|ÞTÇ–kÛ“ÁµÝ å¨ý<óÂeßEæ:*ÆAE²¶Óâ5Ôm<©¢a´äø×}ßDTevA˜êp½§®ŒÆBu´EÂá—Qoÿþ^eW!®$!?¤žÒÄ¢*öPÌLKãÉ¥´¶Ò¦¸¬Á„5óKšl íÍU0-J(Ìž­Õ³VPwõši'‡tjBZarbfL_;Ò3ó…z†*“d U^Ñd ĬcŽx’4²ÃÆ¥ÚŸw³_ç>˜ð‘!˜R }zq%šy§`¿öüW»Kók¿×±¶°V_#缡{³i´`e6’IDATH:bÚiÒ›Y…x¬~Ð'‡ƒ†yŒÃ2ƒ«zM(³Ihx ˆ>dézÿ4 1ñåê©Îœ™úÔ_'…u¾žGn2÷l“‡i}s°ùþ£™€65~îþ¾C²¥¾CÊçœùNØs>þx¡zcö‰™ê† ÿHÝà±á­þ¹æ XvËýB€n “ ÿLñÉþÞ.¹9>¶š;Y:˜6D&^£ø³– …L¾8$™Wlq†Y†ÙÆ”ÅW‰ Ö*9 -¯P˜…*S/f2M…ƒRˆH,ŠE mÇ´…²ú”$È‚¥3sD$*k¦SŒÌirº‰É³"¢¾+ÉÂ!™Í,Õyè*¼¡1®Tš¦l˜Ö& „såe%èj¹ˆ$fÜ¥:¶£7æØü+±—„ö¼=ÖÊ&¸kzÀý  I½Ÿð§N¥¢ÔÖFö[ ­ØG€ÄJÌšÌJ¿ÇGnzEÖ¬:sað¥iž,þ(GAï <ô÷‡)xúÛáa Ç-GèàaèÿsN?=¥MÎÕµmõ@Ú4–]ÑùN\€ÍÐõ;›'@jéä½&P´Ý@¨R‚˜£pbôt–ZÂòÜ€d ,-„ÐüÑ—¥ë‚/úDèÚUn$ÐHhªp;°£ÕÛò]ÌD=ÚþÓ¤ì@£cg·‹HÍM$” -.gŽ.­-  çÚ©›×R¿Laé}y˜`ˆÞÌ’(Ê€¢×¿}ý[yè4Ï||b'_‘°F˜‚¬žÉzpNzå+Íž¥éþTàL?·Ìoˆ<ËÛcw™s½9{[nŒV“§2‡/¯@ÐtÃÚ@Ìî¤W$&jÉ_c›ÒuÞlÑû¼“—¢‰¨M¼ø’Ÿ…‡‹¤HÒù¦mí 2˜ik,¡# Ž#¼Ÿ]IÍØví°£ÁŸ}úéÑN‚WÎhZˆ)K—úBŒ¨i€iñĆ ZâdÖCœ»’ØØ!ãLÑ&&8’Tåz‡poã"SÂdT#.ŽÛÆœ˜9‰×X!íÃaª81bðІþÚnY?Ð!»kBc0 3a''·I=7eµn¶ñ'VšæÀßAÂp‚üœ&µg«ÍçÏ€1ib(Ÿûiz„p ¡ %#_Š"Ó˜µ0í}n‚Ç~/`ú3[? 0uÍ@a‘ALÈZl'ß½O·NOÞ ng3”džn³©!YB¾Ïø8¿Søœzæ¯È/šÛœ‘XçhľñY'\f4¡m\Gú:Ž¢5ò>¾váé 3š~žSa¶¼Ç˜?·3†_Ò³„œ‘† [se™m­Ó&i£¥|KiÏŒÀ’¨e9IäÔ³Vªv 1j´È>À ÏI±—Àf¾0’ãYÀg/LjÚIéÁd+}G쉴ÿ˜YÆ„‰ûTý”ÆŒ%Æ€x¨“‚E HÖ K¯ë©S‰qBÚŽÙȨ AIBM&'è?f‘Ö;é46gM$`$Ô7Ç¥0À…@ÐWaÔêcbæ—dçHís–BB')ï&ýJ|Ílö̳ ™áN[¬š¦ÆLSIËrbá¤h Ž™QÒrоA±rBœ‡ÍÚE¿mÒH¨Ù|¤û:[ýÜ®å°ís#f8ìŒó~ÂÌçÊa¼xo=j]Iè.l|wÿÒ,ð¦̨Ç2Šl¿·  Å8±gÛÇ‹wæG¤o†ÜÔ°.}F |½þ“7|ÝäÞ/ºï³ë½,N:¦iCi!tâŽ\ÇzIøL&Î8þ™ÓÎJojÿ1¸BÊPJõÙS9QŸèa‚HÒBˆ$gñ~›ΩÃsÙg7OvÙN—²9kÚ€1æJƒtBU"ÎÎ.LL,í* Ÿá­<® §w[—˜¶u£ôìduò0IsÁÅ((â¥íòÈ[@„÷= ÃP¬0j‹Å“²„͈ш4Š{gJfÿbÎHÚÔtæ!÷Ó´Bú Í‚~RŠ ›lÓ&ݵݶ̖…AP“¶™‰GHXDx\ЍrGý‹ŸçÅs:qØ$ ˆ¼@–ƒˆp{_ÍdJsç4ØÙÁmØlC0Ìý“ 'á™”'Zñ6v¼ðÔ„RñÚQ=z¬ÜO_|¯ÇëÉš’N2ï0°ÈÓzKh‡Þ¥Ç½Â¦m°0M!«Ñ&;ÜÅME|v·STí5‰v¾ šR<¹R_Ç<}ÖÜtæV¡kNŒš¯A_$sGâ ù[ÏÜÁRÇaê8Â}[~?’"Ã}D£öÜ‹eÃõM­8¤Ì:†…?(úQýC,š;µ2Mä…À:ÙÌ\nåE3èßGŽÎÈŠv‹„* S¸#ö´3•jÉ{ˆØ8Çd‡´°?ÀÒέ­§ âðíÆèl^7¿øN_…Ù†ýd)?P¤@a×êÉSÚ²SZºçú?;Xezð‹Væií+5ý²ëJ´©5ìÁJÿ£éeÒÑ4lž/™”̈6†6´È¨9щۘ£Â:¶íž”ÄÏ„Z´‹GÎÓ)K--1_ü×ÏMhãØæ¡´Ãè‹Ö ¬E-k»G=´ÿ¯F÷Ô{K)ð w 4ºÁÕ6/l^bÄTÇ6î|/‡#³ðbpå‚Ã#™4?³a}zŠvÌ„ºàÆL»ÙwôEEúu¨Sþ—àKWu^–Ötéžã8.¢˜Hþ‡—€mãwÇfC[d¥N'dZÈÐê±¶ëTïð/:Òîá ³Ú*Éþ_ïÊÙa’­4iÆL„˜;£èoCÈPpö[8AMËŽÑ:È!‡–̾ÊN_{IÓÄŠíÎ5ðób‡nwŠ@û,nf°ðÑnƒ² Å^˜º)ÄM5Ö'&ʨJ‡Ö£!"KÌcÒÖH{pò°ý’Úãó7c7­&–’L„aæ)‹L/ AS š~omÒü;ÚÐð¶0ëšúÜŠ›.9S?´ÍYïót¼øìæPÐYAШ/…·{.uÆa¢~س¸Èf›ÍD’7_~ꦧ:)_xïïGÄ«k«1"i<Ÿw‘¶Õ$ÔÇ hó¥v…EàîH }ÙíAŒÛØC,\¿’Î^ŽƒJú´ Ñ|‡Ñ¡iØMË0¥ÿ&f™ë¢…‡j*¡|¨í"HKïÆ³i-æ–î}$µIêÏ›<Žèyõ¿ú¾9ÆœŒf½4;Ø!4ˆö¦ûÌ'Ã,9JÏ`<Ú+­n¡wѬNÖcØÿ‰§ÚÄšŠKðD…I`™4›o©Ó¾]%óÕ„iõ³“Û…ïç ¢ µky4gúÍóÉxžæ8gŒí{fó}8rŽž9¦¼‰qw%™§Ã·]uåèçèyT €ï;âhõ‚ /²:ë"¤ „é3œR–{Ÿ™…ë…-™…ù§a2þŠ V&þHÊ–X8Eæ£,Ó]æ‹ðQ 5†BùГ¡•ìç¬p$TDõñ&º`,’)êóH«¦o÷#«Õs]!k±’Š‹¡=I± tÂovˆÄ ”£L‚ <ÚÄQ¿uŠ—Róƒ ÄØYZmË$\;6ïr”¯f3V¿+2á„ k„ÖP|.F•nÑܸêÑ}Ò,$›å¥o?±Ïî9+ÁQÓ³½ŸÌÛlµ°@Ü ¬}lŒ»ß“èpS¿.Æ6~›dG,s¼pãNˆë‚#Ü¿©´zŽ— ´oÄ1LÚŸ}úéGNÑß÷9§Ÿ¦ æ¸à œÚûÝ õ(C6#ŠŸ¾õi4_pïï'¦dH#Æ BUæïÎOv4QfÏZxÄŽ÷'-ê@Wn"»Eü& þÁTä)’”,p|~Ú¿ “Ž…L¤’Qž.B%Û¯1v>Å,&—Yij_0,5A š¸C q× ˜y\™Ëø“4_ògÍ$P ˆ©f¦Ú"[4CtÞivvé‘syrÔl2ÅPħ¼?bʼ©Ḭ̈™!“0Œ5Ȭ5Ú£°T™¹ ™P ,ðôêLÇfS€'ҔȗhÇÂÐAMyÊ/Çᓽ°ëߣ[îï¯m{o»¾¼  XzCêôËýq“ÂýâÌýO¸ì;É, Þ ÙtÖï?sÛÅŸ(ö÷ú¾6J(šIlÂâ](5WNæ Ó¸á:X™ ñádºr„&¡ÅDäMû¦™1†iÂÔ¦X ¼sØy½„Ÿ`2¯ÄجëV¯ ,Z”‘ HGWCÆœ ›Ž|äžLñ¯Á.ÍK¤!èŒ4(}5‹Ì @äµ ˜ãXš[€ä“‰Á$›¼ßàš1M9R¼:Y¿L¤°Ð½—îÞÈõ¢q9I„ïÆïžv…$”º¤“4þ‡¤©On\KB(¸&g)@K¼_c¼x,B#"A˜6Y`OÊX<¦ÌûûkÛžw à(G‚]@ù¬3O‡èÅ¥…þ…»¾åîk`WþÕ½þk£²k+£t ¡#Ó Ûwc‘HgÓË6ü p3W^@þUÂroa}Vê êöõ©dÿ‡F"{©!t‰–‚Úímcb!Óˆß`kÝãÄ “öÔËš¬ãeà¦öpsKB¦Íx?Åý2Î^,l[³C1 0÷NPR¤§>1˜É`VL»Ñ4’nÊJ¯ì c®i£uœQ_ÒÄÈð›§×ÂïÕµ!Çt†–œ~ÊÚ@ÒhÉ·*„…#÷®ä5D '¥jÝ0ò h¸»¥r¡Lÿ°²‰ÿÆ—¤´R¶UÐ# £tð¨÷!hÿ³O?lu¿;Ëç_û½Þ'K‡lªzÇÏÌŠ’Ñn—šž1ÿÜ/vì2”4áäð‹ò"eÊÎ_cfsÈßÐ)Y¡¶"êG˜³x<˜á!’ÂŦ ÷•ذ° M¨Ï<^iµ™Ð4^"íw>¿—ÚØ!?ØÈv¡€üBåþøXeoaD²U#xlb⩉>€móÕÁÍÖx%Ÿˆ:¼N™eªi4³¾&c\4}Œ„´¡Žª¯û (刷wÖ‰ 8–Ä´Ñ-wÚ7‘cÿéF–…0EÍiÐA"$Œ¶íîš³`ÌývTs̶rL^8 0úûgÀGAê›Êœ‰æ¸å(ÑDOæêÙþHðÂDÌhDNcü²`ë¨ÆY‹1¦`~žCÄ~»¿½À½#œÉVh«‰=™lG÷W›“„þAï d˹‘bÒ<¦Þ6/ôœ$Îê'ö#yñ!á´mýÔ^„àëˆ4½¡úËèMKÇJ†³vðu²3³dIäí]ñ4‡ÂA)T$< –Z¹ßDᔎݫdF†QYlAK½Ó ”~Tâ¿Öœ ËݤHBЦÓCŒô3ËSJ-×tkŸ´- ^[eèîI ¡1ŸÛÿ@2"Y ¦ÛÀ·”¹ûä×ÓŽó^&?éú¼¥®©pœFå÷Ãʜĺ˜zfÛFi\ò#ÔƒÆØm‰oŒ ; ìä«ô²tÞccg®~I‡:8V½^×@) ‰"ãû|—îuÒcS‘#1¡WtëÅb÷ÁÙ.çÈÄH÷±CNMª¦•`Ö“±ŸCj6®“u8e5ó”››ÔÛ—TûîdµÄ¬Fiô,ª¥É6ÍÄ~¨¼zçö„ÌPo»ÀÛ…»Öæ¶QïÅnNQévs­¶bÊ>á¤ÆSdï¤5éhZ{ Ýh“æ§F@‰éêäI£êŽÏ7‹{ûN$ò\¸0Óк3iÐdâð²ÉobÚÛž=n!z›­n¦?ËLpШ‹mô¦r\è(mKT Hyö%±öW¹bÚb2ñ°”L†˜{ÄçyÌ;ôbžOÖ´?õ S‰îò‰Q + ¼ì3bNöÜij+ŠƬٔó¥ýNcJýéwsövaž 7ÇA¢ý=Zt„ߘÙÂ!q77Xš ¸ a3ïG3¡Gê¯ýwŽÆÙü‰¨8Œ«“s4œ‘9”„ b\]÷êÆ+¬&vÝWçŽuÂxfÚkh‚€óUu|9ç·BÐ|ši™ÖÃ’„‡ÁˆžúM+Õ†öÚMÇøŒëT¹¤Û.ŒÒ³,[&׎ ¼/¦P½Ë­/é%Æ&›×Å–¹Î^êÎ+/Jý;¹è.ž5Kƒ†Ú Øà!=LGh1„6g„–ÛìL½£á6xÝÜ;W_?qðMókÎ5Ó4*RwŒ’ óÆE»4ÌjÉÞ‘Oµ:yO†17å'E+Þá6ïö)ñŽ˜#20ºíz±ÔK²{Oùy ~RÆà³BÌ:†W¨I–U: ¤¹g(Mœ6vüÚý>Ø>v>6]â@ôãAÈ!͹µQ˜ÄýÍëÖ9ZŽ^œyL€Àê´õÉ‚=FøQw¼Š„sísO¤"³`höûqøQ¯AØ+d˵mïKÚq÷ySÛŽhŠZúÀLG.¸lêÈqëÕùKr„Gmû2éÑåÕA¶_ÂD§Ž™µlƒÆ ¯5Ûi¤¦ä ÎRp=Çz[‘Ñ¿ú‰8Ô#¦la#žHÒTêƒq°8Y¤èÚ<¢| ÿ¯­;2ûäk‘|‘zÑŒ ½]λˆòŒ­)qL&Œ„‡iq® „zc6 :•%¿ÌÆža*DH0ey{<‡)¥¯pfÆA<_ÆÓ¬Ñu©ÄD{A•œ!÷–¾ž{¥5¥4׌ ¨ßÖ¶”䑉UR«åu’± X¯ßÚ™êæ£'ûvc¾†ÊçxÚa|î¸<ð0¡´Íä4óÌæT›*Þpï„o’¨‡5ð‹lºØ½‡³z”&#P#i;F ;£ÈüŽœG„Ù8í„_ޞ ¡‡„¹ªš“2e$ç Žlÿ°(â)9¥;Ÿˆ½ØmÅ)¹œtäÐ3³ÆƒË»I©‘¬­ÕDö…¨ŸÐnü²ÖÀt.µ³¤¶õ¨µµœ¥3¥uÖ$»¹µ{Aœ;ÆÚIT(¤ÒQŸG2ùûrÚƒ©`W®8úÔiÇ h]‘P©°i‹^¢WÖ‡Á3Icá]ÏQýRæØ@/àùRÝ}9ÌlÔ_ãÊ7˜‰f‹l¸vfˆ)h°Ê‡þE=SÆ–ï›xØàÍýÖ ¨ÌÕwX‡ûmÞME%Å9(Ì™´Î,† ¤Ì˜é1à­ñŠf52ÚÕV¦û{è ·„B& QYÎ}ªÖ¯Szóvh|a4Þ€…ú1f:¿V’L£GãÔ²¥ðоuJm/ñ{dèŒpÕÓ$,”9Ï£ªß[sÀ8çim²“·¬}ð{zFHÔÛ#¡þl­Þ˜bÆt\âw·+ v\:ù>ü±4Ÿ˜"Ýžû÷âdï¾”Bm"¢õwûb‘¼ºEMâñÏQ;¢A) ƒú21çóPZ«5¨­»m;Ï”£³™Tù¦ï14Ó{65F6Ôq˜ ág©ÝÚáMNàM/8ê5¾~¡uGå:J{ì·©ÍÆÛŸ‹¥O&_W-ûøìö³ÕG?0Ñšå Çho‘΃Žú›ðZtf­ƒw+o‹^…ýÛ»oJ'fpSN>Ö …6±Ù¦¬ú2˜I˜YðþëYûÚ›¨s?Ì=YŠPü}=šõþk÷½VêÂ4SŠpz0»|?×d‡ d Õ  ¦!7]7$°ÁcÛ¿»#šÐ†@›‡4Ûò}'ä(’ßòxE[’gÍt4®x[]Üçy+Ö®èdÞTÝçûŸÎ}¢¿ÃøÌ”Ä÷çxá&íá(máÊg‘׆îÍôu9©˜_ Ýç»qÀŽ¥uc°±ŽM÷MúLÝ6âã¾>b}}@3cœÄÂÇ™ò +aæÎÌ‘Ceæ–¦I8Z†Ûß-([¬ö¤™tH(š­; ç@ò9¸K»‰©yWC¢Æ&8c˜Ž%F—ìêfJˆ¶³eÜÛßÍ‘…Ü›÷±ÔEåÌChÿ¬ú¯4fµ}½£›}G‰éºÚè$ÂYãIJ`b±ß 3Ó˜T¹œÐ8‡æÀKû”bùi®ò¡íÉØ“çÆêéÛÕ>°£$$5}–vú¯:L¡{ÄH‚Ö2&Ï ˆnCÕ:s} x–þ¾M¾†mïÞV2Ã9~íÞÍ;{!Àn³uÓwpXã71ðímºy«ob4É¢ܘap:Q«¾É²hL…7L1“jïqaa×5OÛc³Ï8×ë“R¿cˆ=¦ý <ˆ]¤!…"Fo„˜méÂX™qˆu`svdíZHÞ‘a¡Ÿæ+H1J)¾?V ¯îŒX’-, CÍèω¹kÌ;3^KêÞ§Æ#îv({hoG«1G¥ûÍ›={°qt1dñTpôL¿{ðDÈ`˜r:ìÞîâVš¨c¦£„Á?…ˆ….Éü85Òš}ºoÛ†r³ôܵóÚä¾£2ç9>ºßµ_îݾxóžkØi8aÌ:3Ç쓵­-ÛÚ¶ePü½Ù’žÆZ Œ\I­%ëŒÈÔî¶ {ƒÉ!ñð„†ãõ­íö®Ðbñ5Q”Æ€ÈýNÝV1on«]P„Ü>K¥7óåñ/Žb¥ïwpüÐDh‘[.c(³Ù1¥ÄÉ^!”àù•@ÈÙùLp˜í¼Öï'²Ek"ÜÒ_Ç ´€ÔÖLÅì€YÄè…jéóñLÞcœs’ˆ­«\©ß’Í% ›½œù“§>Ž$8Ò ³Ù&ˆµ®ŒˆþBÒ‚Í0‰; Nó$ÔŽ¸5ªMë¼Bj8ŽÎ`û²IÌÝ×óµ9~ÚÕc‚úÈ¥ï];< tC=L2ê!÷v¿m5ÕÌÕ1×¶£0þþ­¥-V™o“6¦ãŸ;Ûe:¾0 z!Ç›ûoŒlÃP‘6ù½„Ü™kH´‘#X<î£5ÄÌ3I aAŠ“6%ˆðbh$&,Ø\-üm<û½àÁí^ÄýMösšFUBò­ÞNÒ§¡A(½Ñ'ÓÂD“Œ@õw2X„>¡ÞÖ¶Bó`€n0æDó¥‰Ë& ‹yña œ„KbuÝxigÿ¶öÒ8¾Œ.3shL“òÓtr‰›ŠdNƒ1d™¥FŒy££cc~9ՇѢDÍŽ †6Ež¾Qª3Û¨b€ÔÐ̇©ž¸%iiÌõÌ:0tÎ&ðÅ{GüÌåYÓ S¢gº©N^ŽqÓ ×=É}d‚©Óøk:Ƭd#WômB‹[@d?þ ŽÀ×’Ù–ÿÎ]ë±I3è¿o&s¼ë¸¼˜Èm¢µÏó`Ó ç$ÙQ$X CmW[::7Æ“/@:n¸ 0ò¾ÒB¿”P1oNò0@LÇ -0©ŒÊžàÄo:n÷ªk)fs/$ÀtBÆt{TíLØÌHÜvb‘_I3cKÙ𣟨ðí£ä¶%ÔH†µRø÷Ì-[©yo8œ7›FˆaÙ;Ih¥3´¹.K·OÃS3qî=.¬û‰ê›OÌZ³PkFliãЙõ©ÍA:ŒáS¿S;:t.w˜7ûˆzQ˜*½À!aÛG¦…ÆW- ië2Ÿã;‡ñ!l¸¿ý59bý‡Óm×gn›å‹s`z¦ýÇ3mÈÃ4† ìh,ôc¶íbÊVMCóŠ0ÀK¦‰D«Ú1Ö.%CBS3Øüë# ôzw Nx[ÞÄRR3ùÞ%Ó ô»©°ØwÛIš4 äØnNpg©µmÙ2-š_A¨-ÝàO¨Øì2A¦e×éD®<¡õE_®Þ(12“GLI$nB§Êº £íÖ ]›Þ9Ô]ÓšSŽ{ŽåÝ”àÉ´™ZïC—ƒi§æµÐðÈýëBÊçŠ7[`ãiÔîKø¦1°vEa³ ™-=`!ÚŽÒ·Õ·éÙãÔqX9"Ø–MÏ̵i†?/ç.nmĶJ/%î^y,sÔ¶Á»˜Â 0 ´ƒ™‚ qhfN‡\¹ne†œñÑì¨NƒàIˆð=ÞO³U›Ý·x[2v&BÍHZÚ¬|„™)k „ò½]Ó,˜’jX,ôÆpó{IÓèóçd#2ý†Î$Þ c6>G¹Ú\ ×È‹duìv(À±3û¤&*œ2؉iB±½3ŽÅ´n¶{+ˈÒúÔ¡t«¿gü“~G˜h¯«hòn#×ÕmÚ ÑÉrìäý@!ÀííâšOWÉâÔ7óùBxÃQyËÅðÆÃÀöQž9‚Û®Ì5Â(b“íj[¹F|¡Ìÿ8ϵnF5¾¸í+ï¢ ÂŽMbfãU@Le¤&ûxç¤Ñõvæª|>0¡Y Î6 ¦ì JƒÉrcÃÜu¾3o¤ó–Å.HϲCE¨¥‹™.Õ€P}Ž@yg°Ò8S%†`¨™i†Ý;4²^vïÒq‹ËSbÒžnb3á1²M;]$’3Iš“^PfÚC7¿í÷|œY8©›Vã‡äØ|{CC+ _D¶-%äÉ „˜D¿‹8Ío7BSJ£O„v§cŒ)£=*Ÿ9ŠÐÀ!¿o}ÝsõÌ\sŒw±ÀõÏ.·v GüG•hGµww¢ŽØiâ›ÇÀÃ&{V» †i/¶PB'É`ŒŠRÉ3~§i ý58¤c;V)ËLJˆÖØ/9±ãgIÒ&6±qu µ8\†Ç+³Tõѹí”q¤Évt. dKO÷¿ñ’lƒf”Nï0Ôì(¹#‚›ù䜇ÎwÒ¯ 7©uÔ-™ IEU»á¦þÐãÜ= „¦‘vüÚxh&ýÄÀu:/šA½ÚŸg3c+7#‰ûž6.å‹•‡i„¹féçª*ÛÂL]¶´ÓµnùU¥_8¬ǶF%„-=þwfÒˆY*µ^BÓ†v³¼×̦ûg¸€öÏÆ5·#uÑ´3ÿôH: ™nœ‚|ˆ®—óŽæþý,_¨æ¬ðP&ëÚÔɬ|ÁîM‘[í&ê±ÊaÌò°ç6<3›|ŽÉw}ÛøL—™{ubÆ?·”ùdps•Ë–ßû޵uØÿ1Ÿ?¶°Ø¦Õõ[ŠoìŠYìƒy2zæ&«%„ïlºIÍ@UœÆ Ðf°§HÍ0s“Î Ao‘°ÛÖ4ˆ™C³ö q-¯‘Èß_…Oë#½×cÊçVAúØ'ìêñŽ<Á´ÁÊ„Cw%ÇšG¤ Ò*ä\C>yþN1ý\¥$'€ÿ_s×¶$9ŠCÝõÿß9±±;½3]]•‰öÁH:`CfÖθ#ª6qñÑxÎ lÝ”7Ô”ÙrŒÆ…[*ƒ¥Á>{IÂG%D\®çB\³çÆ$„þšP| d â°žY2iÈ Î®]PßÕ˜¯”À³t ^’NË?ãåê]®ã*†·ûõPÒ¿8¶^×¾ ÕK†·ë °«á/˜`ëõïÉòe‘ØW¬OìO–´´ðB_AƒèMZyUPfUŒtSõçZ5ö(4Xw5 …´æ Æ‘«‚ÝD,X¸ €ƒJŽ‚ã䎒 È œ1P(…+ ÚzÛ8â(?º0Å«!mØ×Bürõp«ÕŠàN_}­“O(DZ)Ôñˆ­"~VƒŽ-þ:Ê C¨kë*\¡9R»Úý«¬Å”WŠŒhî`Ñ gfМãy½«ßv\¤âŽ*n·“ròø¢cãzæz+¾¿¬é?ø3áÕ1Å9 à f>„$ñÔ^TVRAêv£[ ±%˜x $m¯°j´Á ÞÛ‡§[8S¢ PBeÀÐÄœz€„ꢰàÛ+á°ÅÆ¢ yõbpñD˜ˆáš.z2\æ„qsð`q~¸ŸÕÖ΃C2ŠHê-r¸ÿH»gáì{€{YÎtö©ô­¤\´Ü( ÿ$8$ЭníŒftÛÈ´ÿäûåôšÚ«5â%¬¼)‰Ü(gXôˆ«h‹’q÷g¹Nß®·•DPqÇ]n¨øìÀšÿ ÈÏÞMÌ"¶—:?Ó¹*ó‰kÙM€ªO^5¬o ÿÚ;ú>}ÕÌ`ë>o¾2©Z®é²– …hm”ýì ßþ‡\‡MTåÐ-m}ã¥V¦Q*ŽÞ‘ÐöZÁ'nÞr÷›-¶÷ÔÍŒ…!¤€òKêªëÆ /´¢Vm*BkHÄÇ ¢P!¡oò`S°BKx©µÂÞû]ÓÁè´D“ZÃØ –“Z*it³´áÜÿ´W‘èxA²Î® \Rº¼&["?+@=²«z¯àÆï¼½KŸþm˜(Ž#*îrßöû‡4Æ&ó+fÑN§ºMç®:èŸ[ÒÜN›ÁVÕÜ-ó¡ãÓVÿlv‚¬k3Õö°Ý¨÷•0áV׊jgUAÓù‹±ÝK7¡ÃK` Ü|’™ÏB1Þ…–i€lîBª¢›„œÅø§ô‡“¦ØnèÒ‚«YXI+]Ô•¯‹ó¢–´Áaê¤þ,à´ð!mEÏ{Ðæ°¤[¼¢£2íY¡>âM_.èxœ»tN>aïš ŠŠŽV^™Eì? |mg=ñy6réã‚Δ[~¿a¹¼XSb×âñí´brhþ7ùÀ­| Ê}N鿨 MºNI9+⪃jüÅìÞ±ä§7“NMŸ`qÇÍVìsw $7WdI¸Èà; ®îT®p}Ìp ¼Sœ:Â~¯û&ôh/;2Rxõ Â1œ@â—…JÚ-l÷JW¨g#0c]Jáõóœ L=‚$1ȤxÕŽ•›éIÌ`M–KË$ë§r;?E«¿šýAfJýuºLpǧ¼ã†ÔzÛ-}.¦75l#Sp=Ù¼ÚngüýMy _¶®9>Â4', qQƒ6§O"zp”_Uââü ŒFƒÆ/1W¤Â¾¸/]½DÉk, Gëê—ÙàÊìàN·t¬å&m;QÈà1Z½ÇZùÒQt² `ü˜õƒ~\÷¤j©»‰,³øž«‘6…%ƒÀj÷ŠïkäÊ]tïÊê7¾’nÕmurý¿àFmé’Ç4ýŒ€^TÜð!?ñ‰Ÿçšÿ¬pÁ|¹Ò Ó†’1{Ž¥Ñ€Y°r‡t€}&ft'ÏeÆSQ@O­E€8ÚíV‚ãÃǼ"CnM¨¶çg ûrR¨ç©«g°õr0ª5ùˆí(ÄþµÄºŽ =…È Ïc†µ]%fé¹Y­Ý%ÎP°Ç“Hìàˆa&raèËþEÀ[à­;÷¸&ƒ>tªŒÏ@ÐÕJf©ô%â®ch2ªÈLÖXÛ¹dp?ÿ³2}Çïÿ+eóet#íÑÕ߆ïâF0ÿ;>ðòîåsXà’)sÅ`êÈrôTÅ»ržM÷¨v°ku‚*º/ؽSFe¿›Ï+¶dmâR]@2ìÌŸ5‰nyAœïT±raš (Q±!aùÂïâìèÃg)ðÌËuâ!–}î¸NΩ¢`MКåª\àÓ×£´Có«y¾J7«Ó€Žº€ôžÓeï 4 /<iËBÈ<$1y×óšJçj,¹Ip¹æM;Äéò²~¦ÒÉËô Ýð|G¨v» ÂjÖ?-m›HRUË„”eÎ.œ–ËÂdh1H€üdP…b¬Cð¹dAq4ÖX ¹£²‰“¹è¬$¹Æ÷g”¶W)| ßÙ6ÏWeí–ù,?'WAé,àºÉÞñ?ë¸ÉûåSw‹Æ+®­ÌÛ+Ë;+ÿ•–ŒfÔÙ¼Îï~¼+I«&[íw†x9¬5˜›„Û1·)÷ü£Š/})åz¸HÓ>»SÑdt3ú©ùÜnVR¤G Ö¹½S·t>}µ\°¬Q²;dà")±,¥Á;™ƒdË%=æØYV ê4Ñ37N3€«e'º;)p¡ñæUM]3Í\ yøà:ÏÃù^á>Ú¥uu}!|G).L|Ê/ü%ÿÆŸõ_øÄûQëpþèv+1q'̾¯Sú²ðl•·g]N«<®ú ­Q`îƒp¶o7Y¢HÁjn‰ý”ŠéxLÖEvž5:ܧüÁýB¯‹Ie[5M#H3Ò¤H„‘û€àÓjæƒ }ßÒó¬b˜<÷vÏ omL í3ªü…Í+´4œø<5ßDdîކzR® N]agcü/ßïИå{$ÍŠ šÔýT0­”õÈÜÀl< Èw|k–ÀÜñò;þSÃ/ùóës÷Zô¯ºþ)åœ}L ´²ÒÍÚu§/Zk<íõß2Õª¥—ËÈ…¾Sw¦ï‹¹2¡@Ž»r3Dp¹ž¸ø-=a”Ðf‘'‚!åG@ê^µÃ”vä“gÃ+KÚù~¿¾ÒýòJ>þ צ"}š§=ÿ†ïøŽ7üÙ,¨*ŒaØïIEND®B`‚nixnote2-2.0.2/images/purple-theme/windowIcon5.png000066400000000000000000003334741315604104400220640ustar00rootroot00000000000000‰PNG  IHDR€€¤Çµ¿€IDATxÚìýy¸eÙQˆþbŸsï͹ª²&•JJeI Ë’l ¹ŒÛ ÜÆfj-0m7ncÓ~þÌм÷u6¦ÝŸ‘ûc´™º›ÁÉÐîf”Å$Ð< ©4”jÎÌʪœnæ½çìx쿈½Ï¹çf•l ¹¥Ê{Î>{¯+V¬ˆ_ÄŠµ–|éñoWe ~EG 5!Ѥ$¼ wø›Œ}·Z…Û’®\4IƒP¸íÔö¬äÛûÒEý£:øñ@¬É`¸04-Ô¥½ â@SpûÆ1:5$Œ˜#ö•ÂÒŒ6õ“´žT¡6„‰xÎrÄ5 &¨ Rá½xûÌé¢lXùš_É}ãàdÅ%_¯g,o¢£zn]¹©Þ”ñw©¿¦Ü~ŸOZˆg][å«PöÈöPL›(zÔŽ§K;ÈÚô·ëAé}BËUÁVåá9ª*µ©þœ•€WFHIš×!éw&·¨+¶NT¼Å‚‡°1ƒ>JT21è¼)JÄ´ê^B·Z¼…Vw„Æ”@iû>P›c»ö^2A_…„Âo7bÛ'F&~ 3|i´+S¦._f4£¯œ6‡ô<*Tü:M‘eÍæãgáEö)¬§äŰ趑´ðŽÔ–|­ £Vϫ˙¼žŽØDŸV}8¥¯W'þò5_ë2ÖÆ;(¤RŸYQöÚN:F¬Ð±Ò›¢Õo‡¼ÜK¶x=+ëæóJ*Û°µ¹ö«¼p+xÕ‰iQøô,ÈÐÊIq! Ë4îÄŒóG¾º°Ú£0šbOÔ‘"ÔO»í»‘s’ËmuUÃáiÉ| ¸u²+VŽé¹ö,Ï©f5žD 餉"+GjPƒ½‰»¾ª‚@]&¼IäA8ÏÜà0:ufÛ-QI߫г!²~´Ihö’D(´F=ÏsS€RÖ÷MÁÚañ¦õäɬRüÏ$ŸªS˜ÞØjM½ Â_Å„C ëCëÕM™ºÊsYWÎap¡p`À·£ƒäJ<`ð›&vÕi¨phÌhS®l(î.å*†ãJ,uÅÌF¼† á2RNŠ…ó,v^ ˆMlr8‹ß§9‹Á(›¥‘¬¼¹löŠÈóšsë"Äm,4¥«ÐN\~BI[sÅíMT5XM!ÚÛŒBðÂŒ)YC#ÀñÿÂO6a¢™7—¤á««Ö)õuãrê™gõ3?ˆï“,Ú¤M=£ã¿ó•ÞäšRØ×rÙÔÚÆ*bzZ.ß*¯d•§r ?er×½ £¹Ë R¡’ðäpO`ò¸c±uNOLJ¨kŠÀPc«”UbuËCCÙïçç²²á‰`ó„¢lö„ÖC¶4±Mô mŒp„?ƒ4KzؼœÑ±ß3þÁˈPGà®Tˆ°Wã¦(͇†RöpM1¤b Óøé—p‡R¨‹INýe‡ü¨{[Šiô™¡6þÔ¡ dyvód•fXÉ*©èØ›ä红ŒóMñ¦Ê™iœ2EyªüÏJ½X°yˆkœ´.|q=–ð:™°ò÷C–{‡dì°.$KÝ”XWá” …ŠÉåùÍ­Q76¹kƒ—”~Büš[è÷Ør{ßîÔõMr:<·¡fŠx¨aäBñ:•Qéž D\¾+†¡)òP~f˜&(NsÜ‘ù[b&ÙÚ»aY3»9KÆPm„@†{Â"‹ÅËê<.™{“²ÁšŽŒ,¢¬÷¬ÝªåÌ"0“iôŠÌ To-úÚŒ›…3Û¯$Sf(:Õ %iö:_"¹ä]>Z…žë5åvnXל¶2x.ëºh?æéG¦jUãeᇠií»Üé›6|…<ÀP%—÷ rW}?,Ú¯Ÿ—il@:çŠÔðƒ ¹€Œ¡@´ (Jý䌙ø¹¤ 6ºø¡V±©Gö *yq? Q@ÌxLñ2”ÌÃiË ±ø9„Ìë¤ûîô8PtÒ p¥7\CMó{>q.DwSÔ¥Kcè]ãÇPY(nê¸ÄóºX+Ë V>7R¨aFU]ª’ûì½1nZΧ±<¯BdÉsA›ÓÒ1>áëéF7¸ôýõL€S]%ÿÔ±‰šÐ‰aÖX»b„'­Ö:ƒ‘ËA\ÙD¡®ªï°®Ò¦^ÇAßByKþ'+Î,lTˆÄ`qÜ)RB.<àˆ±ŒÊ •29´ò3%í¸b zDòq¬ÖC™—c”>iL㜓Ó5œcÊë šf0ïý 9˜çá\ÌZ*ÙY {ð${ 9‘ñ"Åž”ºZP‡/XR´ sDˆËdû–; )pf¬NmuÞF™Ñ¸´¸ÌùCÙGcüÙÞ°~Èk1 tÍpøØæq|ž ž ó“@ÏÊÁötÂ&„V^›˜5ÏL-?n*×Þ'½ÔZU)PSÏd¤²¦²u¡¥‰wÖòñ0žÁ&¿Ðþë*½¬ÃêmšÜâ½ð†iÈ@T†ª-‡Ú“=“Âô=™ç-üŽ©RkƒŒÂ(CýBùðÈ”½ý+]j“·º­W°µ Ì3Öhvc¦ù]oˆcù”Þè” dø '¥,c£ Ìø.îñûã”Wªø˜ûÐ|™£@Çòà½+©6ÈEù{¡]öºÜët"Ó‰Üü&O…‡à¾DZ;<ù-‰g¥ýÜO¦Lýe„dã8uQÔ…ùàkÓñ.Ó÷’®”é×t]Y›è=™xoê™VÙÁs„„dÕ{­Ù‰‚§Bê«h[k-W1e•—²Î›x:ÄJrŠ€–óðt›xô­ðó„f)éEȈtœ×„QC€>Êó.Åú'¥:Jj£¤‡i½‚ËEÒdmOt3 8BmŒˆÌJq4/éƒã ´ú8bâÑ„˜´£Ì ­Ã†bõ¼ÿD¯×è:MeD;¨¡SÔ@;)C%~Iàw­ïö P&Ÿ[»¤Kôš×ÜØƒáîõߥyΓ¨EL,KhH…¸¡šå‡‚¨ÖšÒª#%í;ôxçw*Zç¿:QïŠâÖÖyبÅ:z…³€*ÁLÍ3à:Ue5õ̦vôìTÇ­1Z+Ÿß„‘ ÉAtÔl‘¦õG…+›°¡ä3ä²ß³Q鸩Ҕƒ¹èZŸ ô™#ØJqXÉÅ2³å„4ÊÉ…oŽ#äÄÄPBü¼­ PåÐKtgª¢vjAåþQe£gå‘JnϤuœîIïXßùÌcû½©1›9UÎòÒ•ÊÍçoLyúïÊ-‚˜è¥0QÃÃWf¨‡-44–³hÌ7/\¼ET¶”þ w‹öÙ³7Ú_£X?®W½PèeM8üP×&:nöòçé9€ƒ·IE‡-ëz™° í› úg‚¾Ud·¢¤lœŠ¨Yµ€î§LÚ6ã’²K›”æ8Çžèñ¼›p5¥žÐy6ZÉKHm°:ËÄ,…Œ0WhSD¶™¯åÇØò Ðtêx¶w¤,bïÒg®°MÑÆêáˆÝ‡áÌeL ö‘l½]6¥‹{V&qœY]ç%B“S— ÖF?ÇÆx¼ppܾǕ@ÞшBþÎ} é¹—Âó(i—Û©1)¡ HBšK §ò”Ó3ÄI˜Fÿõ™‘[³AXóÌ¦Š›õØÔ;‡Ðe›¥Ô  ™8¶1÷kÓúžŸòEºVy›Ð!„rýsA@I;ºBÖ€#lŸ+³ASu?)ír ßù÷ÙKÚ{f(ªhß lÁ Hh­ _‹í+Ô}ílµMÓ›÷eÃÂÞHZô•Éó7-W_%¨Ên­Iÿ¤üZ^PeF“</JÃø¹¦0‘DöQ8t‘Ú;(^‰~凹ϥ„‘hSµŒ Ê"6_e^úÙĆdÈל„M,,+2ÞèÈ+º5hÒgCñ(ŒÉ“îaü´Ì‡‡,Ma\uÕx=H±W‘¨ ãç˰Õ5© 7EózÀ;]$ÂóÑÍÃRrÀ+S u#å=4N½ût>×»BÏ ¹çÑèjy¤&ËyìLL(dåmuʃIÁT#ÃlˆŠµ@Ž:òÊGÙ"’«£Ð,$ˆƒXôWˆ‡I¡MxEÉ·’i¹c«å9iÈÕ'"IÈ`±ò7^‡Îç|l‡\C3Π´µ5½/9¬Ó’,A‰þòî´¶ B\#Ûn56{FXƒOÅÓ‘¦Ý|û 1ý–ËQ;¹€B)¢[mwZÂô"‰LG5””ŒQ;Jw»£µB‘O^ë€oཱུeÉÄ;‡½&È! ˆäMXŤÃP2ż©Ï›¼»æ=­¿?]¯aŠ6™ºE£¸ƒ+¨ŒˆèYAJ§´ýX\_‹åôäÊ8óER ü|2þbúE€\ƒdÏ«äcõJ®ÓßrE)HN ~S&Ë3µó2‹“º(A⊎™ÒÚÁåX=-$%Ά+%ûÂi_bÕ0Ó.уIn¢M%1(z]#+' - B:$µ_¤Ñ%Ôf#ekE;+£Ï}3=þ· ¨`7èÜfægMqf”µ©(ø·¶ºª¢>„~A}¯ïú.ÿ>‚×>d¥‡êƒTæx+ˆum]…Ö¯GÁN!ò§«¤9†»¢Á›µQÛF÷‹Ö7P;TË×”œM²ùo­Èoªv\¶èrØe49Ɉ¹Ý)ÚrèíŽä¸,L 0£BÌ)cÅI¹§þ®ÍÙ°¨OP;JÍ|¨¬N¨[ÙˆPÇHi²lô8ú¥McQa=a´ýOY‡!*f¬Ô.KÚe6Æ. ×P|ÞÓ?Íñ¦i´ÅdŽY^h´“Ò·^¦Ç!¿šºH í1X°ú: 8^…ö¯W·VžQà´Áh¿¯\ œÊXçšlª´«6^EàaÜ« «Kß7qµÖÝwiþJ¹nתbXGV=¦«‹¬xV'žYEG«{zàiZŸµ>L›\k¬é$ ݹ„ì=N£ãº„¥iu'¡[ßÒ¡ëPÓ “âñ¢däÞ‡Ú§°ËyƒÐvS&¦¸r'gf2’§„uŸ”t-1âv¯ÞDR&(ÛåFÏ="IÏuŒb…L`›Ðá)ÅÌ÷Œt% >©üNO #)4*G³ˆ¶wPÈ‚v þN¾ÖJuð)pÊŠ’¼ƒ0ÑÖVÇÐæ­m’½Æð0ó8 ckÆ&y-D·íÕc…¤X1~ÏÊOfY¹ý!(±-F zNn”-‹ªR€ èH>¡ªá6bc¥5©p7Ño×þ‘ Ê5Ïw“o‹£Ðº)ãÆ”mRǦ.ÈAnÚõ¸2RþÆ ¹ì»ÿX^!AWÆá¨\´¡«!˜Ó ¦sûjÈ& l$Ò‰Wí?qädß[9ãjÿì7 ÆŒ¢ ¹N'Iœ† mÞ‡óŒÑ¾‚Ú> ]k]—ëñ¬Wâê!ƒæý2–š¡$Í+\hg P™ý!^#Õ…Ikohy攊h›&A¬«=tÂåaè[–#i÷ muuõ,TI\fð¦äX¡"5ä~Vb‘#›Læ÷?ü¡âKÜs±¤±Ê²š1KHy¨’< Æ™hüãk¼¶€Åè!Þ_§ü“W‡€6±H$“)Ùë©c“MÅÚøóK»Êɪ®f°Ælåñä•ãYÖA¤Jí1aFÔ¤J6;Þ5´äÂjJ4ï;ãå—ø‹¸‡ òÁ2Rܹÿ…wÅ´ËÊ æTÌ“D6Ý’¼¿P̧ԯ‡ûf”#]qºìíŒÓ.[†QN²í,ª@ ,uLêCŽŸSwB™ÉË /ÒG åêw£)gl5¯2£ª‘ $Ÿk‰ùú%yžæ)Ð~?FÊ„ñe[ÀrÀdxÖ'ý¹ÙÖlª£jÄbUHýél{µ¼›Ó@§ ž" ›)þú¬‚§Ó=Ä»‡4)¶?Bó<Y‘WÅ—ŠƒƒÍÙK+sZj·y,qD›½~1‡–ëa+õs¸*5`ŒÔYÁv\oïÇ¡)ÅpÑ¿P’5äj}K„Â4þ$ÌovK,¼ PïóŒø’Ræ2“¶­´´§YßÓ6Þ¯»ì^Ї ÑÍgdذ½è{`H(6²RèLL¤¾rø&1HŸ‡‚5Þ)´E!s:oê&3¼ ¼(AøD/ó`êÿ¤D¹fÆ5A"€TKŵ0jÉ ´…”>þ—ÌÅë9ðZg0ŠW=? pãZí°â§ßV)þ/=þí£2ê³nN|ûØòâÚèüÎÊuÏ'ål¬Ðy;ð)fV^¦DF²À¨ÊÐL è:ŸfŠB&„:æ¹Å…)›œÓ.I¨x¥qHí°6êì\): å;¼Ëg'W§,Ä{Ñ™¼!Z¤¯¦R§4{ÂâªØvm¶ÐD.ÙV n«y„<„gá&ñExÊÊÆ3R59‹ÊåÁ&Û¦¬M“;ðYa' %`šº*V¹ƒøÇàFi¾eø£>¾2rdEc×Ԭńd Ú)²ÂãÓ 3>d¥^ …E!OˆžbÇšÛcõ„ÎËãcðæ7È÷ {aš¿‹½¬%ÂÜ,5аÀþnÝð,ÆEe:g£d’½îŠP(žÄê8Þ)|eãQúu„^©9âá~£$x çd/„xÂ1äö=pÏ«vCùtPO5F1±È[Ss§²—*òï8vO¡jh)¦)âò(à¡—ä‘8ôyG©7FG@rª³ÇgŒzÄær¼hOݸù©fŃðLK—H[^gÓcî%±ÑëÕh§É¼ZÚq«±¼‚Lkâï:]¦|^÷Î×Üù<õëäŸÿºw5žå2~òò7gOà0צÞ)ôn ŠQRé_V(Ió!)áû;‘f%ï“•FSruÅ÷l‘Ré?7„ÔÛÉ¿÷Ä6.éu˜âG|ÈYNƒÂˆœá ñ£9cV¥Km@§}yryÑÅh¢náÌ¥ú,GYé „€Cw0R$„:9rØp†g¦YT²‘"C˜CfJ/óñ”’Já *S°CÓÙ#±g¨ô©=§(ü M,{¯ñÜ«z·7N#ñ,…Af«ä…Äb®ºv¡fAÌSØœd<£~†ušd,@Ï ÍÐÙZù`6-g %«tPbr¿žkâý¬ÆÏÐÂù ÂVs òdžïäþ&Ä3ÕéyÜÀÚë0ð"—X&[¹"2Ö(Š×‡2ÍvÅ„‰ÐñHñ†°gQþ2`ö¬ì»+ÿV)ýà§\„£1È3kª!Á0¸Òóv?jÉÊ•[*\V¨žæöYºóRº;½¤6o#"Ï^¸\’€€Cz@šGpÚXqŠ•Ÿû8‹ù_VŽ˜·Þ#•h×жêaɰ>!KwÅ3I@R&“M'ºqA1¿Dµ$o‡8'ôw*J²Åà)ê䱓5Wîn)šNzÈÇ#¨\Éåû8¦¹«²ç¹yC¤XœäÉòµ.,dŸ®òŸøîݱB§wü°N&¹o„ü[aSíá÷òò7¯Wâõó:ca ò}Â’§IvF÷}ÀšˆÚò9Ñ<ø²žC`Niá„4¤CK›RÊA}Rèwþ›”P5{-)ÍÌã]”rf{ÒÞA“’ô7¾¸÷†Sè¾³·%jM±šòÁ*¬t‚îÔõ¬|Ú`p™;Ä•²+ Q¢MNC«ÆÀž£ÇÜîÂY!‚,Ø\‰ ³W2;Rÿ•]’a_ìäÏIós@bûùCr%ÄC«;ɯ°Î‘xÔ_¬õeL‘)ÚDm‘ ÎbŠD îÎØ¨Nè™<ºì·ŽÞÚ[­óñ‘GÆ›19ÙÒUóÔk›Ü«¡$¾_UbZäqÕSÏ`úù Yp0sVѱî™~/ùö—&‡?ønÄG³rZ•ÿ)k Ý2s¬_1R’Í­ÍwÕ¿a¹ÈãFyŸ2¼½D_}VhŽ€}{‰z#s0¨mMœÜÊÂh¨Z£.hª!³´¯Œó=Ÿ5Ú@Ú•ç Ðùú9Ä„$©Ñ0LéR‹£¢OsH/„Ò‡QULÊÅö°-òó0DÄȤ”[é9DÃ5i3<Þ^!NòÒ¤ÔðIØX ×¦•¹O,*Ø&h áäÑvÖ=¬:I¾œOÞ¿Q îb†“iú1¢EÁ›à9ÑZ´7J;©Ä³èïâÃ_‡ Éáß©:¹™Äòâ$úŸ²(‡Ðö#/`ÖQ¿îšš\a®¥H)‡˜ä¹¤h€ Ù„ž*£³.3js½_К–œ8z:ä&Ì"ã ¤*ÀBÁ(×Ùâ’ ™x…* OA3 Vå !õ0aÂÈ:Ù¨tp·=ú ÚÄßjJI˜¾¨bh:} ’¹É†ýFÈTÂNÃ¨× á:«ÃÀÃf²™u>‡é&ÀÜ. e nžµ—ÃöÒB$ãPPû¯cBÑ=̰Òíe÷¸@+~ý=öÂptÌX´ù"JÚp~ÛѦ‰ê$â,÷- *LâBƒßãŽ?üµh³Ž“‰w6¨ož>Œõ"ä³’ÐÃXÂÃZÍ5ÏO;`ѲÒ5¥I˜ÓköSX3å}¢µÐN}(Þ *ê1eƒ0G1i$Ã& Ë\t¶H:®Ç³(X ú$˜U;t²2_¤–—œl/Òó!\ꡬ˜žvïÊ‘—d>¥¥£¥s¼˜³æF)yR…¦,ò#¨² BÞq´H÷aZ”Ö>+í?Zá5zˆ…j«Ðnˆ½¡F»FGIM­ë2CÜXöQh÷ÖÓjuZuÒac‚<¸D­ €µûH´¦Á'cMÑgÖ{Ø&º“㠦ؑú$mðFŸ»Æ?ÞY5<Ã8ánâP¶£¦]I“ؤë6ÐÇIÏéšÖ”Ó¡P m×ÔîfM(ìЕ¶ú¼L~L(ôò€O²º2 µ-M¡t#„E)ݧ*hÒ­&ê8½£¶—©H{ãÄ’·e(Àiø,¨µ*½q,UXØ >eäIb‚SitÞƒ&=5—íŠZ|3’H¤OJæyâ¯+Þ 8ú=¾'h5ø€EtW{'øî±ß¹òX8[Òd1­u~˜ ¨ó…‘c`£ÀëcdY ¡£]b~’ Nª×‘8™¼xJæ­ó\àí¯S2füXn>±TS‘QŸ¨ïû—å3#ÊE´³ñ.‰ç>n+-.[9sŠ'“Ã#ã9qPÅìõöU]ùt&{K×x­˜üµ+Ö¬{¹VþÉBõ‡eÌsÂDXŒœ\Þ„ä%ô[Æ1ќД9`E(W3&™£œ$ôd0Fè LP+°“@£i¶œãÌü…AÀ( [ È^"Ú MUtŒBO­Ç «S뮊Ž›rìb²Üû51'Ïq ¬§‡ª2D; ÂI™Å*Ô¡lCå¼6¤®þ%Y²¾gƒÉ|´ÜôPª†‡rM!²P®4§ÒŒ V2¢Èù÷v·$ô:ú ϘGá…µ/ñ±Ñ3,Þ«óIÌUkð9æ±Ø¬ñŸiPÐ6ÓÒøiŸ‘ÊKðþHŽ|žu1󯇬 6´k¦šÏU°1áèžó‰æ³é½sŠ›¾.¶¿½6R²æqè ë ýõºŽøë}=i °E_ŒàçÜ­Å5j²˜µÚÒOÄÃ9E!ƃܶìžXéJhTÔÜ69OášZ9Û+ íKO6`¬ìèæP»à„}¿ö"¹¶kZ Mdegåóe¨¡žmÀó™:µ½6#&nJ)”B²Ñ96ç%äÜð0„¼Æ"N›RÊõ_Gã,è¨3mjÆËAﯻ/´œ{Xףد÷½z‘+¹ªæ‹Ôß—xšëÖi¡pÜÂ0¥Ä@ô¢Å‹Ä?ô²Pÿ†Ð*èЖV†’¥GYù‘+lã‰ÓVŸ‡:JëhPÁ ‡Å[Y™ÂÕ8Q¬§é±+-ÁÇ@V6S:ÎÞq͹ï1Lc¢™g=(˜î¤C²¾ke6%â‡fµ’=Ï}?<Dz˜¼wÎ0ñfMû‰ oÍ PìÙdA'Š2.å§Æ·ÝÃ(К†8›ÁbòÂ.æhn¦&â‹aÐ6ÜD;…£%±uï#$¼Eî5€éE̯))~ŸVóq:Ⱦy°F\Œ#ÛRšBSFlm ¬æu|&s˜œ"|k“hÊAa¤u÷Ûû—7Òªr@ÎþT¡\£µŒr6+bâ9³´öbpwIV#+ +·pÁáeÕ ƒ@P!]e&eéšÞËî¸Ì œ\c*,š*ÖP¤CèÖ&‡¢ˆ3Ü÷°ÑYÓøVâÀÑTÍ"I€* Y1Ç ¾±1`¤§¹®ìÙOE‰““BU`cV *½ÞIDއc\9ÈT•¹L£Y¢ß… ä_QbeD}’xÅa)jdœ”)U~I~R¨"Úé‹Ü·Þ.·ÐÄû$âÍ]®/æºH˜ˆq,r̯L4ƒ ‰9 ……7)¹Aé^oŸ©åEíyŸŸÁ±!I> œ,µÇèÜ P[e“ÈFù¼ à–ïÒ÷ùè¥M&qW <·J»0Q±–TåÃu%mYs&&¼u¤Úዬ8ìŸØÞ8¹À6!ëeÒÞˆb$вiËÖO” Oã +ŸýC8…ÐpÔ+Äõ¸H1£ZxPùœXá“Ê7ãËOy½„Žls¯4 7Õ~k%QÈ©ò'ƒÕ|G‚Zšô³Kµò 54Çñ`g…Ž(¬“¤Æ3ee Ê}7)0mì§}Y‘8°ûÙOˆœ#éÚñŠÑ±‡ËŠÒ}u¯ æ&ˆïƒ¦„¦qGÅü¬O¦Žƒ‘8FÒŽœ¤áì“©öJšô59rŽ;¿¬óâ\þAÛ Ò¢6ž}ùy•Ï¢ü$YÒjæh‡m„''Æñ:ý·NÏ =³ŽÞh`rÿÙàEçØEÿkß]W#Å1c´R™ZÐOB68Y˜QzŒÆcgÄÛ>1â¢2d_Œ•ô-NˆÂ%ÜòçÝÅ–@™Ž[yŒ8¢%„ˆ|¢B|ØËEþ¿Å¤^ÐèS½Hû55Ö.…±º@váuiªËš OâDöb°xµhqEÀâ+’§ÚÇÝo LL[ÛùÙÿl2Za«n;Š_/r9ç‘TºwS 䘬©=È4š¬ t6ÿmad{^|ß'/gjàÊ=VNãq„%µô­uH7Žïçä…±ð6 ×rÝåóc¸‚öB` u~ðÂÚ”°†•šBT5RPö—"Æ^ÏÂ˵ڬ©xå&n²¾¬QiÊrmÒ`.‚…ÔûH¨¯ˆÁü{û‰g|ÙJÛ€c%PQ¨db†'Ò®™ÒÐÀ´¨8H[»bu2j¡©xèà9‰:‰Whe7À¨2£pÇ]3Š‚éŠ%óÕ«¢”éjiPF˜uŒ>ЦtRç´þç)…Ø&Üs8Ë\^XFbÛn¢bB®\ÉKæ/opÆïdDŠ(Üý«%6˜hæ‰Ð0hBœ/ä:&$íRDZNCí¯/OÆ”æ¼ 9~BaÃ)¹“ÄÓ NØp³Nd#yI‡)LOÕ›‡gž<3 ‘ªAŸÝˆ²y¥;"ï|_D} ‡ÑX²ÿ&@ó¡¯ #'ÀThêEÐzÝÏÀF»Leü|éñ§‚mv²Ï§ÁËY–BŠ ƒ²)¼®|‡«@¿çU»K²K=é.%!¥´8GÍáz¨DÁî²¶²y¢/Æ …º:sA¹4’Ëé®ëIá›qŠí²ÄJ#ÐÐD§qüƒžMÚûE /™¥OJV¦²ƒ\H’•ÝVè*OA)à,ŠçÄ܇CJ•‰C㉿%äà $åÚsìNƒžg`P(LžYÈ>‡0ì!M|31!u‡4ñlkR¬¼TFÐæ‹à¸FUŽj•~r‡þP÷ŠFÇV3H7ð9Ï1‘N¡'n«Ov½Üú >"4æ’'aëX,¤È¡$âíZÃ|›*þóõ¡ôÏÍW¾0qU#CP*Y{|$×µIc‹U«‚6Bº-&¬ÒåëŠ;¯ÞôNæÉÃ4øëæ\y•¤<ÎÊzœKÝK&iNSâ¹=>ˆèä¦ážÆ’Ôy2<…6×]yø3]~+ÒRTIáû3ls§&°dýêx•¹ûà_†9„Œ¿¬&VNBYX®¦I¿’I´-1ñªU®ŸW¼œPš¼åt ¹–ÌÊBÇ/’åÝ-]~h/ŸŒ’i ¤›An{Bñ Á¸òJóV¹ÅüdÆfþ­ÜÕüvê ~Ç*oAì[5Oø´tä%ãZÌ'Ñc,ðÁ ©|hanù1?V6>cúšjÚAÀYWüme­Ÿž¸7uº×Ô÷©krÿŸC^Â\t f„ˆ2Ÿ/Jï$ç_øsÝʆכiú@ˆ=´KùzA‚¢áÑÎYSÌBB`3‡)\iOÄVK¾ À³ß7cÿ#Ò,U×ûà20DpРcÚêŠ`6º¼Ÿƒ“g«L£96@ƒ®x·¡"‡Ç†±@:i©Ú-[GpØÅÂ:ìyhÐC0f0Xµ¼ø$d—6 /¥ÍÚ¹¬’Ú ±ÅL4AÛÚ¡tzCv߀ޑu®=µ'q…Ç€>”­—¨;µQÃËðÁ&†R6ê/ÍŠRûSŠf5Än#&Pfã©°¡1CDýãNÑùö<îPÅËLOõâPž¶oß›zëB@\« Áä³'68ÿ÷ KMI;#ÅôhâQð“µ¿Ä -VV›õõr†GÀ‚DeÑÅZ•>©ª…c OpÅ3R%K#:fYG´ñsÙcf8R65žà#EF”„²‘¼œ'_y6ÃW˜ ƒ>!…ÎIº¬|}e!•Ø}²¥v–­#Ñ­Ê&K |ë –ƒÓÐàµþKÆa\˜7)TJx%ñ¾Åù•ßk %ÄKH!9® °ðMV2Ùã¨)J4‰áPŽC;GÀ›K¿¹ÊÙù!ﱇ¤ÚÓþE)·ßx`€@£Ín0Ľ0ÏârÅ>¢àMðc`¯Ò fVƱM†ã’õgxbÞ+)z—Õ0|+Æê¤.d¹¢_å9ÌW¾¸¡aThí€ÊºV(ú$?’ßf ›&¬•处uYÞxNšŽ2 qBlâïCMá³a7QêŠMÀõAº—äoã½€,\xFÖÜÓ‰ßuýë–þ–41ÿ[7áôhqÏsùŒüI¯†Â›j_X"ˆ”=k ÙPžDe­|ðGÎvi­é Ä„’¦Â=TåEˆ×iÞg/YÝ,è• œ>H™4íýP¶Q¶ áÑêˆIh ú|3­¼R°iLƒkñŽM{uÖïáß$¾9KÂø;bG¼†0Ê2TŸŽ•¥gM†RÊ&½/®Çã™ÄÈ‚ œ¬àwÈ·”—… :W‘Ú@r2šóJÔÁ$Z‚æïn¨Ø“!¥ž¼åô^îƒú'K¸—Í]cÊŒ£3Ph€@®C›H‹“\yHŽ@–ÿ«!—…à‰¯šÞ•Z–ó€J>¶q6Ó*ÛøƒƒíÅëÆuãºqݸþ^‡÷n\7®×ëÆõ‡âšR3?™×!ý à'.àËNþr‘Š{Kß-‹BÊ}ž˜ !WR‘cRáP«½Ÿ'¡#DD‘Ð<ÇÊa—ÑŒ#‡ ‚>vk=k†HdW>»ÙMæö0mb±V~Ã]ÔåðRN'ýâÛyŠ‘ þ‘þRÜÌãÙ5QN™MüXD©–­a©":Ž…^\œÍgúý©ðd~Ú?±L !ÚÊÃàꮽŽ8ƒÎµÝõ÷ÌÓÈ\IåêTé1QÛa7WÕçÓé´,Žg$#þrÍÇž<©Œ =þ€ö.£œ1¼¢y (ýT¥ä9e>0wJÛt|ß÷ùñÏÁáÞûØ"-©™÷:Qnâw<˜Î/~†®ƒ=€ƒƒ³«Ÿ?ì»åJ³ëG²Ô09+¯\-FŠ3vü<AM}'­Ê{ý bŸeƒT,,žêQálT8ÌF¬ ”ïÁoÖ¥‹É$7Hy*Q6haÊßžhŠ!åË“*FãÕT”ßà±ËÆqšs0Vr•ÒsÜWYóú•öÓH¦6Ñó_gÃËÝnqà,®ÜÇ`Ú'Ò}]’¤<â¼Çnm› ÛÊNCËs?VMB’ ¢Ÿ §x¼×MFš—§>ûüŽ—L›Ôïi½ˆm5šR¸P¿» zÇÔôS!ÃMåÕ5 Ö]Gmlµj”+ˆm‡ c¢Íê“]JÈ*ÍU_XAÛ’S‘LÜd Òøáöq¿Còt ïàZ†ÀæWyv¾ö!›9̵.[èP™AybPm%!/p°‚àzlaÊ\¡¼çœªÍB`ºH„%Y fcªÓžqtèš0CF´†´E<ý.)ª‡Xy&¬Ê²y$<ê›ö|‡@«Àÿ.V?,D"^ŠPIJŠÞx RCY$wÀ‹Ž •L2õ— ^Ê<âÁD¹âiµ®µ‰™A¹ôfÐb¾0ú×–ñ»bM¨;B†+- šìG¤Å_žÞé?‹ƒÒ¡Ùò:bž`…¦$Þ—Šwùt¶º|F^Œ‚V§Ñã[9}#¹!ÏÏ!8ù2žR$c¤1¦Óx¯ž4¶"ªyÄ J <Ž''õ`j°3}æTZ->‹ã$á_iI¤Òz¿tòãWyvN’pp2ýÛ¤—•+œ \¤ZÊž8ùÀnFn&,¼‡ZÁ¶ô‹×Aø§I'#þl_l´C´rÓ+¥mOœ£oŸHÙVz¬Id@ŠFç©¡îNX3ኩòtZÏ’ 1Î0C¸ÜCPþt„ظS|q› v÷#ô}H¨¥ÑÕ”ªêOR¦ÃXõ'…j-“Ùð"²|à‘r‡µòÝT¤ã57 £VuZd9‡ÝN¬þÎ]m!=›4%kÝÌV ¶uÈHlÙÃaI20nì5êscí´"M<·Ðì«È]î‹¢L`jðlðVy™PÆ+tôä3rØ•À:]Ç=W¾£”§yÐMŽÎ¤ãËŠûCßš êŒç&Ïæ‡üñ±ušŒ4ÿ0rÝYuV+GipŽ@JÙÐaKÜäA_x)zVÑmxMBärÊyyçPMúæQ%0PŒ–ÇÜ É•vr¾-º™ªUZµ_ÕêËÓ ¡-F„®Ø@4ѽÔêP J¯–V‚ÿp]S~ÏúIÉó«§'.l·m«;¹Êú:³¼ÊËy Gý¨7!䱑h’!%¯îVNkÐÃQ®M¼ÒÉó,ÆÆ×1_µ>ÎV…«:%Þc72Þ4ùç]; :^l™¹YC’[9¨UcÕ¢|òØ•C<Ÿ'Œí.Çu'ËãK‰úž%Ä0ñ’&Ú@ƒÍuS8Þ ö?ksMï¹km(M¨‡$ïéc:";ªÂ&“Zfy(MdÙ 2)ùd¬¢›?¬~Y±h ü$½jJÕ»~„­é±+¥+ j“IÔë$†´W¨h+Îb÷É$/a\\ùšrÙ)¾bà!ýć«À >+Úž·>)‘¢‹Á´u„¶Q#"œ&D¤²”2bÈ}”š§ˆí?¦rØŸÛí †‡½âبè?&)¶AQ¤h†rxPGel| Ð]·òŸ.ïð!ÓŠºsd†î‘†ÊÊHÒè牲©%Åž/ÊÌK®™¾Û”4ëñì DO§ýʉDCAŸ=×‘Š¿7ÍmV¶ÁŸªÀø{ð,0–Ð3¶ïð'{(¹WZ¹Õñä „o‘’w‰crN¼w—Ó¦ÑeÚ`3¾çEi1i*TÞHZÉø¥“?Ö?ÊÛÂtt¹ÕU.*|Â2ÉMÈf„'Xó81Ø`}Ü‘‘¯'5—'m­|ãóOcq ñ×>'O‹Y)düxÜ–ú\£^vò ãÞ ¹ ‡ì88‰ì8¯Ïh¥2|jÐñ÷ªR˜žR³ûŠ.ɼƒ˜ö$,1hêð¶çx/© ÉV½dÅ}»”bÒKÓÏNW°É½UFF&b†'©²~¤,JÌùäI+g[ŒŒ 1ͺ…4ór üÇ‹Ó(ÄWÐ뛄Ø'ë&_Z¡7ª`ꞬøCá‹WÖ‚Ã7%ŠMF¡ó.JŠ2KñGea¨(¤!–H8ƒã….D’>±´x¤+϶2©%e E(Uø@OŠCÈ»¥{T:iÆžl*kw´ß5êéè·„*]!ˆ»í¾T¿(ŸÀlù_§Íö÷—úœ=Öe~õ{ põâ‹åÿnÉ`Gex_q¬:Ïäµ³CBÛE•êçþ0Ãå,Íglìê»®$§\I—·Qr$:0ß¶*á2›M×\Gˆ¹8M¢ºƒß¡ÙƒbUéŸÒº’Gih›çñÅò&¹]lFI½¸RçôÚHª¨âUå ¹Ä_>Kz˜w©í¸IßºŽ¤s-åIlA6½ÖÅüÍuw]&ž˜qUMðÑ‹ÄÁœå@F¦—ê¾xîeö†XŒ5ÂQ¥gÓ6¾!,>Õ#Ó ¨F¡¶§¦£.—B· & kÀÎ^ŽI¿Å;ù`MåG9žÊ­Õͪk˜gŒùQ[S›™¹YÉ8‹hå[”‰£©‚$ŽÒäQ¹½­sB‘µ9¤2§%Ö®Ú3l…jßѤ ˇݟž´Gx.ËdÎd)<® O“O—òäplzGü¤½ðëœ@^F½Î'xqÛãU ÅöÝB}m4¦tÿÌÖÔ~çÑõàŸÂFó`ÞÿJ/QøÇú¿g¦ò.ªEм,¦šÏ0âyÞ‹k9"Mï¡6hJz-ó©›OûªeñwžKs– Å0Aë•‘cî´7˜”tlº–'&Ëxuh†4’ê¨7ˆ»<ñ$Y(=)tjÓˆ4FŠ8Þ'ee¿SxÒÒd|zÒ0ªH KU"‹Á7BxÒ&3©/; Ë1¢ñL>+õ¯›(nhˆbñÕbàF³j4Î,s#ÚD³µfÌM —E7«Qk2}ÍûÒg[ÜGäI¬IcÒ”Ú^y î֛E⻦Úù4é2হ¹­_Qò•&*S:fë{6XlP]©' E}¢Ü% >%ñè×´`+ê$°¸öñ,f^bœñ÷ðõu6ñ™†×ê•À×c6yÇäc<š’}XE³°|‘’J˜ ÁÏ1´ö׃ã‘=`¦t*DD8=(Že³‰#,sª:M‘ïL}”Âä ßž ‘°GR+1˾V„ ¡ÑèƒÑfžˆ4’Êx’û2ê³0 >3Æïé‰~ÊÕÔ^ôˆ>Žp ¹ë†’l½Dë‚5´Ïp´£˜_J<TË1UVUóUí¢Í"âCÂ+¹ž †_Sì]5Ÿ·Î³ïI|⦖€Ï €%!ñPt¢èÉ¡çck(‹;@¢üF/Ÿ…âãš×Aäˆy>ÚÚÚÖAx˜$|  @Ù¬¤›ºí¨Šþçƒeh‚V<·sO(§ªöÎI’Õ”öÜhÐHRO!Œ6 }ùÙÆ±¦À½\HÐ߉kÚL½,6K;Ö_¬ÕéYÇ]l,]'Sœ‡ÊIè"!ùP’¡Hs! u»pqŒIŸ PÌ“)„€cÑh)í`ƒDÖ›[ÌnsjI1i@!^ÎÞIÙà@Z’)£9îx+æãù¨C­¬œÕ H.43G*Òóéá Ò8&ZÏí·?þË -+Ø0xT¿7ÈxPø£Ü'ïM¡¦­0Z[}1óC4ç‰m¤H\…ïÆWí2„8Ô”µ‹B272"C›ö~hmku;Iº%µ¯²ÎÃíf UO©•4kâ¸N ZòjûfÜm[žw ƒ¡;?'9qßäv 0-LV:ÞSë!A¡Ä‡y…áP—´¸ÀEcÉCrfôBÑÇð0•1ý0T‡p{11ò( ´þ*å>+ú)Ë"å/?Ëc ÔU6õkÌ6·mÚ12 ;Þ:ÁÂ@RÞ6:l²”iÊîgúÁǦ»åI29#R ­¶RyBrü'³Ò«g(Àí¥ï’ÿÀ¦8g£Ó ÑÙ]¸Ç€ïÁT¨ÿ&ˆbµ‹ÜO‹¬ôZŒ™ÀJÙ ŒMIoO_˜h®QçˆÀü7§wÒÃ,»-\¸ŠAË—aÞ!+l8†gºŠúß@Zmô¾ÿ.ñ×ôäØ.Ï¥J4Õ»æ~Š‘’ryHî™! ’ ‰tEÒóÃ÷æqUÀWÚF¥Œ÷¢C“áqÔ`ët„Œs˜/¸ëTˆŸv)ËQ»b2¦Ä5*š§ø‚ÿhmâ±–ûÑ<ÞÊéÉ,÷knø¸ #aÒÍŸ`ÕæÜËÀ ]W;²(«šÃ54yÈY ,Ì)¢(aí¹â+˜GZrÞiläVdv˜2æ=‚‚š;ÕÕqÂFbNÚ÷%+l{ZÛ`ªª8ÊìÜõ”$ü‰ MLHs¿X¼»f¼€Âfu‚ÊðjÂQ¯Ê8A€L¨»Þ±¿Ï$×L,+U½Ä¸‹]JµTÑu7 ¹· oÇ–N»‚]L+gqH R…M˜îáCÝV˜fÎ\©»ÂzéŽâKÚ³&q彇]Ôé)¢“åŒøîH›Èöð‘Ë‹"­7&p‰¼`6*a®Â›‘Fa´¨N’K媜ґš¾%²Zé<ãönòlHò‘¢+2n©94ãQ?ÕCë¯ BBœ[uОìNOÑÆFB¨ßÒ;å›"#¯äÍ&4L^NÏôF)Ê)”Í€bœÉñð@9.Ž”´²Â2q¼Ru>¨d˜ã˨‡òÍä]%A{ÃþÍŒ8)¾Ü?ŒÒ¨¬t3Êöù‘d ºDOFÏNDTEqU_ÛÑ«QÑxŸ¼=Cl¬u…h-ýïÛTM\ò]’ñº²½*…mìCø%¶žÎ@†ú5Ã@¯#Q–)ImÕfÊP 9Ê€g¼r_»`‘Ô{‰æìMGû#,?eÆšz·È/ H£Ï«ŒzÜèalíeFŽ}гWúŒïÞ?ƒhKçON. ¦ÚbIFþ¬ÐÕÿ¾k>r¨Ò>¢=i€rI¾mhž„«z$©³ªƒRx”çd¬%¾vó ÜÛÖü›!Câ }Ú Aì”c3"’:ï¨J{yÅ>Já=¤6hø6óœÖ/uÕ0+tðÚK&¾Ëøcty¾”;‚ìÙH²K˜)­FPûI*J‚ìhDàÇ?‰ótNF ÉÄŠ‰‰È¶×¢¡¬‡ %èMÆÄ^Î@„øjíÄàAŠw3o*‚%åÛ4-=×h#Å=½B¤±Y*§£oS|‰gd8Sý´@)•ÏͯÑ[IÙM|)UÛˆSØcò$Ñvú,Äkïº.·£NØHãGÝr[}?¦ÔP0ÇÿÇsIH¼y1€DxúÏ +cÃ-Fé‹*lÆWŠÏt^‡&ùx"âÿ4Çä}J²&Tií¹† '  $|ŒÎª}óXãñ|t¹Lì¯óÑ®Ñ]Zµœd•åu#EKŒGl–’(J¼cW7¦üctâûDHɧåá°üBH‰^ä-gë¼Vë{mÊ5Ê“QMihÁHT’à{Ç{OŽ%F w•Fch Ü¹Á/ެë9€BDDN(õ, Rx_…9"F'Á Ê÷¶tV>Çê'Œ`¥>×ÞÍã•G]FéÉÊ9ªÏm‹}b$Ñ £ä¹÷­œÈWDÕx ô±’3XV|vÅäådñ‹û‘Àa·‰° pL –¾t‘!SCx–%””‰À¦*ÄsÉSv1|xæ²ün¸“{?Uå켑é¦ö˜Açú’«Èó"ƒ\K"<þr4€yÞ’Û¢ÙX“Qd¹„dÕè}* E˜i´r¤ƒCµW!ÊI}ÓFfʱZ$ä©âbaœPØŒ¸S|p¢ƒ¸¡! ÁˆleÉP4ŽK)£ZÌáùâª&¥J|ž¤(Ϲ¡²çËìµCX`«Š&Ú4²¯OBYŒØGx„ž!±óºC+IQØIÈ$P«Í(£yb¤RÞ¸½lIèéŽß´3k®ð“j‰gS¥Îv»|‘‹•&‘í®ñ˜‡žµxT>1×û¯Œ”p às n¶²¥/ƒHƒø@pš¨ƒg AWò–‰EAS t¡2ê°Mòbøž±ÂíÍuA¬´0tîß+¥ Æßà/Û€`ï •¸–Zvô'¿ò§•ÍIF™n’ÄêÜ<†çü`–'/§¡Uû®6®­,Ë¿·TâwŸµ‹\ó:jšIã/yg‚ãl™§íwåÀbJFËZº„žqqâ,De|!\WoÁ = ˜°öMºñ\²êv¸ÈBñ¸¨G\X!S‰æævÄoú[OdâºaFÁ„•J¶Ø/»ð®X 2(U¦Rfêí “+µ)ˆ4¹GXÀûœÐg{l<꼪’g¨:çŸ+|; 1a¡“™ÏŽŒÑ¤,„ÜyêëRöªß%u^k5w~“MJRž…znsò4B qYieª)Ôôud6^eê:Ã~숟(VË‚Ô)¬¿ªžíû¿j †VÅú§ž'¹0 íèÈqÄ»Bˆ‚h7þSóB '…™„dÅ•—Ï(ÕWæBTv·gpᛉÕc}ßÞÿF†Í³”¾G3$Mæ¸]É•§ØºÅ¨³ò­ßÚBþn”mÿžZæès.”$Ç‚$Êá½¥Hþ€çr,öËÝÎñßu ÍæÊk}c-6ã}|øÀlßÈÚå}‘¥M]høLƒìY©ãéÉÏù¨4=’ÂØ’þMñq‘ØYÓíYµñl|ð {”]…ªî/”äÂrø5Í©p 5ÓúÛϦ~“ú®øz¦HÓ»AŸŸÌt§iã Ò8 t¢O|¦üJÕ¿"µ‚¬SzIb™K­ƒ±Yì ##¢ø[NªOh MpÊø»•ÊYù10æQXý&ú’£¾ÿG{VYQ!Ç)¾LÜ˨šmí+/?+n¥p€»ùŒšŒgpc@3wÙ’¢9‹JCj[ôP.ƒÁLðßÂa¥/ê>.ÁŸ¢›åѳ"~t1!Yb—ž•Úœ_©3‰oÜ“òîèã„'0Gœ©8*ý®Ô¢]‚žÄä:x×ч0PQ ­0=ãè2‡UB6ŒßÔç’ûh¤‰«Ž!÷€Ç$‡©Ò$³×ì!…&BÙëËaÄ,¯ ×ÅÞÎo× ~¹ÈÐ=VþI+³Ìó$}˜xF?·ÛeÅ`/ÝyGúj¼xÚOf¨RÏ÷3!þP Œßw4˜Riˆ@’Š‹a^íJ‚Y³WŒn¶nÝ ã¸ï¥íóç>â2‘•8Âb»FâA/Yö)ñ=­EMs ŸòÞ>JŠ&˜˜SÅ„‰DÚ;ÝîØ{fèï™2cH˜,M€ Ú¸OrDc$)3+;¼Ií§Ûq_ hÓ©‰Cfò»’P| `ö”ŸõnŠ˜µÿÃ}E69൲¶Ï2æqgRhq¦#WuÃæœkõ„¢¤X9!Å8˜ˆT0yB¼%´+–¾è@—o>"œ ï qÌ›br—D› ëRN@Eˆdf C¬løÅòÕγ¤jò×ÐSn‡*i‚‘qEØü+ŠÅ™7ײfsJ`+Ï©åQ/‘²W \N w‘’ÐÑTó ¹M&“/6â¬Äµ¦ ²ñÖhCrÀèAUŠíU¤üDºØÁb–‘øÍÚ2H¥ÝôŒmt ¦´º’çÉZæ¹ìkSª¤Œ³\©w#O:jO)õîqDÖ‡r Þ,$@G£É­Ë†ïh ­'µƒš5ª©ª^4O²9ÁCSh& ( —dŠNiSk_ô¨R–3!žŸ8;Ú¶Õ­Éœ&vI©· Ã$óáèbj ÐfìÅUJ> ¼~£-æÔ:ÖI °NÌ&‚þä%ñð#çþ>n\7®×ëÆõÌ]y;h +yÖÏF¤#×®fŠpMÏ߸n\p¯)Ì~0‚ºqݸþ`]ëç#ÏR¿ ¹~9¿“ûbe¬Ðþo¸íŸQ=5^*é¯×aÏæ ÝËtzz((A.x C ñrz'¹ëáE3%7OŠ;Z谒تì‘Q8IÒ”D-‹Y­ÌKD˜nâ°H}ŽÃaáûr礣ô’#,¬F%×É®-…7ö–»x×Ù7á·ùYœ¿ú=º¶f;ØîŽ`{vÇ·Ná–#wâ–;qDZçâäö-8¹}+ŽÌc{vdô6S§Pt~rBóh'â§uêÃ×n(?‘Kö÷(òÀ•„«&ƦíO©¨ÜÊHõS«( Ÿ_”I}ŸâÔCÙYyXÈ—¦…–Û'¼>Ù‹Š‰í<á»pFÁÎT¯O©fâ™…ïSí¥ù‹ ‚ëç¶Ø]ê-ýÙ¾gzuT·‘¶×ÛêZ'ôq«`ñS>öä{ðSþN\ÞòP²©è±·ÜÅÞrØ?'®>ŒO\|?UÙa{vw{.>õÔ§áÄö͸÷æWn>rGÙÆAУwè°U¿FžØ(¸Y´ö`6ŒÁ,¢uR¾Å·)έâ¡å›»1@Œƒ!X˯Ež`Êoô”÷‡üle/‡Êtm‹ó—˜Ü´ÇÚw7( X»}nϘ&ªƒÏêõ„‡6n}2\_[VHÄóÇÑ Ò` h7Л¸i𣰹Œ0â’è³ÉdŸP§ø¾›øíØ(ÞŸé˜Pÿ=ëJÖ¼i›ïVáÁ`º¤Ñ¥Œü|)ŸbÉŠÐ…¹ …¬‡&BC#ȉ¸àʧ¡hozΑ2—ÅùñIž“–Ì‚ô´0y9 Ë=†6‰–’RhWÒàô{5¥V¼1©#:DµWSc±~Œ}B–¨&Þ]:!U…$Onq—†î˜æ¬øÁw3¼ô|2.EkË+xàâûðÀÅ÷µ»ß‹#³ã¸ýØ=¸ï–WâOßý— Á oÈ;g …óž9}d™™4/HÉØÁ&X‰Cy¼‡7ÁÊ*ªDG +ŒG¨_ã¿÷­ýëÙ:2š•r‡ ¼rz OÖ Â©ÈÎ×O²2ʨqþ?KšÐ¬6£`އ淋ÎÇñ™’ ˆ&EoÀ /¢ˆ~³ Guí…½Û£4¥¤q¡Ü¡dèþöå~=ÆÕµà†»Þ¬WëQSº1‹ÞT…¤Sž|Hhd0ÀÑ45‡á"w›ïÖ3‹O&Ói³™ôPLÖ9ɯ5´@6ÊèÄ”·¨i¤„˜ Õ¼¯ž z©io™*€ |GA 9fž~Ý‚¼Š¾7\ <á1dFò "ã¡‹7?ôoqmyÿ±¯«ËËøÄÅßÇ'.þ>~åçßö_âuÏûZlÍŽ"prßúD è‡Ô±^Ð[_‰R¨óÌÇþÅZ‡}n(ål¤ £Ó J8ŸñQÚ6 &¿ió¦¼=ãMYAf9 Eˆ„|PÃ(™Vk„r{êÆs–ò9ὄ5CéoÐoŠÎé O‚D|D(²X”U<ˆ&‹R!Á%Y•C¹–­¿ÁŸwã^Œv€¡VZ4atíP‚»&S¤OÇãGí6S Ž~ãt5!ñw¤T¤¼oMl1[Kæ  ‰˜­¤4ÒëZîLjó )…Ô]EcÓ/òRÈóÉ^-níÙâXF„-X!kÏ<• ~£¼‰:‚̳&tÜ—5"¯¹B2- £Ën»gÀøD(31<Æ4+züâG¿¿÷Øÿ…?—¢Ç»Ï¾ :ÿV<ÿæ—áóžû×qrëØÁâ:¶ò­K{Êg’:lnÁxC©‚ 4H–“'Wxê<‘aï[§¦^qDNß›R'±c“_O´â×85T“ü òXÈ;óî/Åkîþ‹M(‡Vio<’ÓP2R(Oa ã¿“üq®š—q´ÊŸ¿÷3rÙó ²^qÃd»Y@_&±Û,¦´Ír5¡(C1qííGˆ+=}lœÒ£ö|.Ë ) 7×~)Q"-ÞrcüÆJ^iá%‹ xD‰ý~N­:ë$V ¼ 6ùIFoOmK‹ÙŒðh¬ íNí:K~È@ËßúY&¾Óç:}šmÿ+êÑ´HÇ•‡Irp"õÖ‘þ¼ b2Ñ–4ÛRš&ÂÛŸ ÷YS/sÌšAÛLd´®D (ë¬6äèó:R&Deüª¸½ ¯0ÜNJŸCWÎ%\ñwN<$šéf²CÜ8Z÷û1Ypqï üî#¿€7?ôSøƒ~-ú=üÚ'þã=õÑÜàç5„~Dšoj+•å%éJn>ø €$¹ Eiˆ9ä’HÝp.µË+Þ„AÉF@ˆN÷dX—ØîmÕ‘N³:Cч^0>7*CîuÔúf0#1 /c˜åc´Ã„^[ÝL)× Ìܰt$¤ ÍHòÉ]ãGm¯ŒÖô$$ ˆFÙ??=3u¨¹~öpNŸÌϦJ •“"JÙ—¢[m~´AH€`vûYÅ ¡¿Ï°H¸, øÀà‹³¡hŸD+}– –€{“KN‹½+Á·ô/·£ýÓA‡ƒÍQ<;ç?II«G›þþÙßÄÿø[_r (þA½ž¸ú(~üÿ3ÞòÈ¿ÃR—èue¿ÄR{ô}K(èU~ÙbØf\m0™§$ÉÀk $«÷utB²Ë’ûÖ r<_ƨsB&¤â`Ãn%7ÆtÈw+UPÈãÊ– ×ß°ñl(5Ú À'I¹M¼…‰¿+SLLŠÏ.ø´·ÑnÞ¯4÷.-z5ÃåV2)ã7CSïË©ºœwD3Ö'j áu­÷ª.¼É?E($+úèÄ´uJ¡£ç) $#ÆŒ‰GÕNÐ.¹]öñch‚;Ì„, ºÛoÆ,=Ÿ2cïZnåS"Ρ 7ôLd.‰ÇÞݨI©…3‹¦ ‹ ”rún”™Ð‘)ŽŽCp#ߊô‚4Ú[Úúÿ¬?_K]àMþ8n;ú|ê©— ý¡Úv* Ù9¢XJAéÛ|›í¼õ)0.Scf4ÊäŸ|Í–Age5yL!ަ,¦âÕyq’1„jòÚS„À6`ÆÇ€ŸGž4žg‰ÓR¾ÿVÉ¡rú4K@QƒE w@ã•“Ù<ÇÒ¹´þž£‚¸òõUn¡Í•Øž@‘rJž}Ù›È TóA~…ÓŸ Ž´:¦=€ÔÙ?›kë…U«ŒØ±Ô3%^=èF8Ldäª2I.˜¦¨IWâÍH$âà–»nuó¶ÈZÞ³pU(A>þ-b“9‡òø¶ÓbĨ…ÚÖfàÒsYyÆF²d 5h?²w^¦òÙÚÐYײ¹TÕãÆIÿÐ(»–ºÀ¯}âÇ¢ßÇB÷Ñ÷ ,ú%–ý>ú~‰^—оÐCÑCµ·Oÿ¾– ¥ŽŒ¹3ɹïvI¨Öe–3ì¼hROÂbePOô3¨Ù0±±s©©\YBïøsûº—+ô„½FgžPŽïYGx‘ް2 =—§íÙZämn(‰ÂŸIÅ%ª#,nzÃL‚" _¼ûK»§îM¢çä:F¿qÌ*¡°p±låŒÔ˜^T&‡m Mã¡ ïôü~EÜ…]ÃûZɨÅOÇJ/3·«Í´‡~>Yîü4ãož”Ýóþ*ÊÇîÕóªC)ÜÒÚ—,¿I»q‘#í•îºlŸ5~W4Ó%+I«L,dT'¼ŠÑâ²”IòH §#O†geeô†áJÅëF.›Æv±¡'Š}2ë-¤×ǶŒŸ«‰ç͈£…" ĉýDei6rKØþºràIaŸ%fr]I²šåƒN‚3ƒ»dÊ24j ENõSnǨ'23]èœw‰ß¡yBÍ~ËDHare9âÁn,’¶Bnć@ãlüuÅ^<¦L‚ʇEMg:“V2åÁX›‚Û}êÝø÷ûüa¾®-¯à¡‹Âþr‹~‰E¿7ÝDz_`¡ ôºÄÒÂBÍ,¥G¯C8høHGرÞ'”+ýÔÿ’û&:—À‡/­‹Í8PRFêc¦‡ÀBRP´hv÷ €`†Ê¡ú|Ã;WôYQIGœ|~˜¸íûtñcšj­ô¡ &oWä÷D¶¹|ñ¦î1ó£4ÏÆ†ÿÚ|‘g#5a£ÄA¬Ž™Ww“8†Œ^êÔ¦Iéð»Ä›Ì  gĘ‚!FÖ¬µ+KRZþ[Ût1QQÂñj&Ç;\ƒBJIR›’T¦ÄŠdH¦üi[.äa™ lߊƒ†ÅЊ,¦x„0øäƒ‚Å;›OÿW˜l‹cTÿæ½ßŠ? ׻Ͻ‹ÅËkX.÷±ßïcÑïc¿ßòyZ@µùUôÚ³jÿê0çbý‹~Üll]&HTu-\&ü=€B‘Ižë£!°’¶w<ÍAHÖü}„Iñ# 8ÖßÜò•±~ÀŠTªÃêËTpÛTŒÊÚ=æ–‹},—K,šAðÉá¾ÇR‡´Q›†M wh÷Q@[8¨ÉPÏñXdùI€"Ë^Rœðàò">!ÍcVA2@JpjN5PrŒÊñö,d¨ÒØ`MhÓ¯Ù¸p³ƒK¬ ö*žÒK Œ¬pitRÜ?«#ñÌžw2R ÇÙ½0ž‚Íwjk¼c„»÷ç¿ÆêržèNº•Ê!l! ªýY“Ò͸Í9R†ðLa±4„‚ŠºÇ“…Ñ4m­crXØ0uo‚‰5å>:*KèskÙLñTÔçI)"©ôIöŽ—E2.Rꉉ÷¤Ô•èv{$‰Ÿ1ðr™Œ@ƒ—WüRžE0¾ê©ÿ>úÔ»ñÎ3¿†?Z—âß¼ÿÀþâöû}ì÷‹an ßw/`Ñ/Ðë‹åŠe› ^¢ï[œG‡½úù,Úaß èCecKÖž=NîjNfK™:®•1MÚïÉÀg1Ða¥5Tj‰¾Fí~÷XhÅr˜qâ±oåe¼Hx»  ë~ÄœdŒ¨Œ]ÅÃ;ÉK²­ŸéGN…õ,<Ú€msôCŒu¦ËçÞLíKåh5\Ä|p¨N×ψɧԙœfdðÁ­4YC¿,Ήa­\¥‡' ¡Ç¿¬#‰|v‡êd 'PÂ]j FBüárY$Æj ?OËú>8Ö9ä¦:’qv…ÁàÜþìIä,$(Ù›!Õ'0¥¤°¥ð™{% ³L± '§¢ UÀs†¬K~á#߃?š—â‡?ømØ_ìa±ÜÃB÷°X.ÚÄð`ö—ûèuýr=Ú¼@ûk±\?ÖÕ#…|X1ÜJ¿µ[˜`a‰7yØ‹{ƒþ2!³GVÈ`DCŠ5Ë¡ å™ "´Áa‹m®$Y%T“ ZQxÒÊY%×aÙp°¡òÛ®¬9çïDËhöÔ»€Üž<íìâ¾L1Dê€j¥}‰w«ò÷¥nUØÊkYIbÌ£óEÑZtÐмŒ p9ñ)»¿¹=¾Ã'ÅÓœâ{¼Sú©2"¸ „Ç0úÝøN{ǤÁ-‰‚Z»Ûµ¿øyCjÌÉðØ~ùÁ™+ŸÀÝK±ì÷=zÌD‡ÕÁ²Õ³nÞ6Væ!«JÌÐäu†Ã.`¾yf'ètXèÔ9º´ú$…ŒîÚƒ]dN ó¨ä›û ) ޼é[ T%eÌAt›ƒRâÃh‡O%ª‘†‰>Žà$7 šb¤1 ‡¼çÝ>³—?4/YÅ®ªyƒµá=û%^+H«løÌg O‘'ïÓifÑ/lÚE"—ê2@ºÏá€O·¶rUšz[ÆŠŸå…ëLûøht +àd%5}ÎJ­(˦ÌÙWåßန sš¬nÖÛ14Eˆ™:ÚW>–Äá/ëÔ¬ðÌ…5ÑðÏÂh+x’ãŸiû¯Ž6´1&ZÀ葈ðdQ£‘Q)óA!äIcÖÆP½A>@   ê®Y>`i§¸~Ý ¹*+6ÉwkËÈã¶ÉSð®ÞRÖ91$M1—xë¥+c²Zé‰ÑaM“Ÿí]ö1?䪳 ÊéÝ@“™€£L·†¤¸bÃ*[¬ÔÖ« +Xqëõ$嘙c–>/S–©Yå…—¢Ü77»c“9.ì2YÒ*‚ùÝÌcm`Ë7зr5žÏîN )ß5ô»v•ãi} Ýd‹H–Û"ÔÉhwñúÔvÎÂ*ã¿óÈÏãÆ5\Ë~ˆéϺ&0=:Ì 3@{ ±~Ëã›5áè"=ún†NÒk„ò´õb»’r24Kˆ$§@Vä÷ ß³Óöÿ-F÷IÕäpbì›ÎªEŒ>Sbx²wâÜ3±Ãi~ψڽ•¦›”œÏ @.×l1nÔ6U3o‡œ´ÈžanB7LÜúA¹hÍj¼·¾N¡2êS:aŒy&ÉúÓŸ$¦CWèX-7)6áPMÛREl S¹yzÈC~d%ëÔHn€”—ŸK}·‰U ³¤qãöÝźn}oZ>m*e@Z¤E37ÈÇRfšc¢™ÑWІLÜ%Ë ¹ì@©´Ôîb¾!x`ez†š×CÞ”R{œò \õ´ §!P2§#ƒÀQhÎüq”0Ò™FpÑÞ)ÆÈ¹üü*i©ª?5BÊŠbÕ¼ºMµD» ,F×bƒ2ˆ”ûh¹ÐL=§ÜÕû¶ç¾&Ù½l­ /…¨'Åo}(õy/gT„KŸ <æÏŸ%O˜ ¦òî¢êÕï-wñ–G~7®|ýê#?Œ\ø,û¾¡üú~¿¥‚.±ìÛ*a /`©ûèÛ6½iW]B ±Wí)MÙvÂ’¨IÆ2v.ã¼Â¼üÙ]÷òê\@öž$º?4 ¡r)D:mhÇÍL'FÃÉWññ“1ZõT–øÎ6ŒkËtv®¼é%÷„ƒ³1GæÙ‹¹Qo5oÏAŸk¿Çœ³­’ÔîÊJjƒ»µçd%:Çë<·¯½é Y:^x•ú˜LŠ‚K4°¥>Ë´ wx b°tqy¶Jîn{¬n“æ:‰-bècJÉe¢I‰²ç ŸÈñ-Î7ý‰ð÷œPh. Cp &¡>@“$ùôo•Å\Þ 7®ñõñKïÆÞr½.ÛV˶kèþé}¥pÛ8®o! ¾maç h3ŽÄ*–×AY+EFöšLÊÞ„”Âå´™\xÇ¡$iO+þ¯”ä ž Úe—²øìý¤”¹ µŠ¢ <¶?Œžûb}¢J¤?”dÝa8¬¤œyîSˆ õ6y;Lj\Ø(аE,Xg*5A5=I~IÙ hTóØÅÊf&ì6+ì@ΙIò•yeÏj{Rés錄ƒFQ>·´ÌPtÔ)V~òQ%ý3*¶W~~Æ¿aÁàýŒØ òy¹¹ÔjÒè6¡7b‹1¡/†šµ`ï@Ë™Eú?›2–øo‹q¦˜³žºzfÈc¿q®ýþ*.îõÿ°PÛ$nÙö êÃ2ºôU¶t¯Ã<€2¡Ë¸‘ÂŽs¿">§{¬\FF¡¡]ZJäòÄgI´·”å:T(4}aUвu¬ü¦’蟆0kCFÇäI¤D ×ÊÉþ8˜äŠ<œ ¢ß «ŒRWy€æv(8SÈôÛ@£,)z7¾ÔÆø–©Ïˆq:ä18ú—ØœXþÒ¼Eý) )™Ò<YZ¤Ž¦Ȉ‰xÕ™wßdåmŠö°1¨û­°56¦SN=Ñ&™°ìò•-_ÓùãÜSòz”1Ù«R¹#ªÆÛ4‘‘“Zwpœ²£ÃQšâ/ ¿_Ù¿€×êë×û1ômÕïRû¶/Ðö9L/Ñ÷Czè°]ÄK´-¤Û„¤-$”/;_Ø€JRßU ûðyø¹´¤ì¬lû®.c¬:Æ„DHÃØI²œé¡ªýîÄaZI/&CSðbb\Ù¿)sN wgÔaübKèàg'±ÍmŠZ™Õ‚QdŽwZfÇGs*nô1ùiccPAßöëñÝàzÎM/ÄVw":tÒaÖÍÐusÌí¿ù6¶f[˜wÛÃçnóṴ̀ÕÍ!]Á ³næ7„øÚ@2™“˜æl8›¨ôÅC@œ,…ò0,[[Óg aØ6 ±©=;LÌÅèÛÑŽ´ }×¶…ú$·-6SÚÔL+iQ?Õ«é}~A¡ýT•Úá¤çì÷0°¶…GT{¶Z;í~ªOã}娽B¿ï!ùy•nGð†x®´cÎ(Väq3ÄœAJqvv•ÜÆúö9îB¥‰€rù¹¶dD8'jWŒ ߺöÔÞÔl_¬¡+©§«*ÿ0\ÑZªÈÃc@žPf/Š0\šùW «¢;Œ³Ðs£€-?[Œ`аc¬íùPl¸Q­±Ø$'n}Z7®ƒ¯‹ûO`µ1±Û«Rz¨ó67Ð÷ÃÖÑý÷ï#X<0¯!3‘Ìûgü™×Þ©%EZò`©òÔÿ/Ÿx5„¹(nMõ *!G\÷0Êp`$NgÖ„f•ä3êaÚ#ë’Ó¢9eˆRarO©š…¼öÁÇ—…=˜–ò.|¼Ñý:]ÓµG¢-|2\(¯^% ãCá]U»¥aì(þ¢+‹Q &ÒD¯Zο÷ÛFFª¬ÇékéÐyS/â¢U¨œ6CŽL’³’Ï×òÉ_2$‰CÍc‹Ï¼OyJÏĨçm…$Êcgã|9>pýøÖºáË)¯eMcÖìÙèj®m´nCæÊÓë‘+„!µš!y @¶&Àþkªß‹éÃÁJÛSAY¾‹§Kú™²c2¸I؇“7@zXitPF<c"€IDATR‡œ^Ìã‰é±EZ)KͪgšµBˆ˜ VÄOU…Ê^9¤£'òœœ†÷í@zÉÿÐ- Ê„un²eN‹„ÄsÒ$ú—ÔŽ<±m:)oÕGè Í; 9Û§Œ‘¢?§6:K;AÎc”òx¶½hqV:1ÓîDC•€B& |ŒeÞ³›±ÑÞ8–rsrVB,êpÁg‡Eå-3ɨbä@â5Ê/*»‰: ‹†çü~–”EÊ?e­  (!o\›_]ýö—{¾޶ðBßÛ¤p?xÇmÍ€úa1v€<‡UBøCN LhQ¼E&ÒX3 ‰…íF(5±lF˜pÉc8‚!{êÈáÒ#‡lyŽ|Ëh }Á!£à*êùpKe …n?™ŒÇÆJo7Èì€PcœÄNt1:iOWÛnõ„›˜ž×UµƒlÐ0¥‹[蓲ãrJPJ.“¶Æíø>:|ÛWæ sÑvÁål¥ãžwl´VŸ²Õ£¾ÔÊè¦HxU5C-"EbÀÄ€ËË'öÀeáHsݺ³aÚ_›â$Î)¼!f³[â¢I¡šÑäª÷½ß$†;žíTžÔ5¹TnǤØhš(5!ÊdH0( Ë¿ÚøB= *Êÿ³IC…{¾(̈ñ9ƒA®Uz¯ï †}¬ÐúQX{u¡èüi:åJlCœ ¨ÛÏ,K VXì±› ÆöeyÖ/ Ó0†ó¸Êó†’oûk&ôy ”Ñ!c…Í )`[˜B¶N—1˜ e-e(²žkÆMŠÁ›xÝÆe]-œ¶ .pß ‡B÷%”ãÁÁž–²b¨­çtÏPî P’ eæ^Rx… âSê½@-å˜Cîð/é)xÏ4r#Q˜Ot2 ÏšÏø`ÇëU9"ÞI®Ä15šb(«Ž“gô¸‘FkB¤r”p*Þ+¥LD¤>  s ]òŸÅµ½½#GŽ`>Ÿÿ'ó\º ×oÁ½çø÷èû…O{æ¿"Ó2tÇ’ŸV^éÖã4$®¤àØ{`À5<®)jaڶѬk’DRö#à¢iqBÿŘó-Öé¾IÚ1ÍŸjÈ«·Hk%ã¹¶˜[æIÔh_ì–@E ó›«Ä÷j¬<«2iVf¬;6>’t4‡çF{˜Æ:Äi_RSä:é©°ôü=Mˆ¶#ì8(oJ)¹¢ÖñÅ`Œ.Ž¥X¨4õ]Qõãh•ÿjg ó$Hƒ"ãѧ¦ãx2¢§"}×Ë ågiÊGùia½’QÐQõu}EO$¥Çgkz®œ“ì6ÇʨR|xEÚu¾é›¾ ÿøÿãC¿{Øë+¿ò+ñµ_ûµ¸ë®»pìØ1Àîî.æó9žxâ <ðÀø­ßú-¼å-oÁ›ßüæO:=3±ah\ï!è(ݯ…}fÚŸ»!@[¬Ú¶eãd =`§ô®\•Æ©û½$ÚnD‹ :5„(¢¿4…äH=>w×Ç,ÜL'i)É §-Zª4hy¹šëGÛ[ß²îTÉò¹<̺x¬jÑQšyжa¶Ý¹ýs60Ú_2°4Ù0j;éyb=ê ¦£éÌ ;QZ«4ZSê/N¤•Àj¨”%rì þ^a¸M„ ”4¶ðBÕ¬%Þ å^ 7ýmȆè@Pþqò”¡ì®‚š}EÒÐJíLõ³á¡öq¸ßÂ<±…n]¶ì“vÖ™'~@ +èÄ¢+h-Ƶ¢4 L8_£º„ÐÑ ÝàêºûûûgÁ?øÿïÿûñ/ÿå¿ÄþènVÐ!®ŸþéŸÆ}Ñ­}æU¯z¾ø‹¿»»»xÏ{ÞƒïÿþïÇ÷~ï÷>ã´ØuyñnÞ¾“Ôb‡ÚƒõPíàÄ=€nØ6B»a"¸3O@ìï$`0%+ú”vãMó’|#út8´E}¬ ]S•ÈäZàA #ÛštàƒP´Òaâ¦ðIoåÁÖê¥ZàËɰyõl „ ‰o·ús™U¬ÑcÞ` …Ë!gC†gaª‰ï1»¢Úž­Hm!C^ײµ Џ;5;†6–ÉGÓýy^ºNj !ßJÂ:ùÕfÌE Å$5X|Fž_õ ÊÊ{~”Û wÆÞ ocÿ¬(S´ST*½#35åÞfƒØ ƒ}·ccÉà¹ʾÉÄŒó”åðÂ=Eš÷}]J±ÖÇÕeæ9Ñ)hk.Sþ]×yÖÜrË-xÍk^ƒú¡‡>ô!|ÕW}ÕFåmr½á o8Pù3}ÇÇ«_ýj|Ï÷|¾äK¾ä£c|Éø/ò à–PôX¶}¬bŽ `º¨9‘.€Åš åÑx¢Ÿ¤Ç…P0ŽWOdŸÄK¥‰1Pép¬¤FýYÒó÷cƒqP™Ç³KËwSÇùø3)Ö<‰¨ë:Ü{ï½øÁüA|Çw|žîuÓM7áÛ¾íÛ®ûý7¾ñxá _ø´é˜l«Ä ¤ÕŸwÑK(üaKˆ¾Yh!ÌÞ†ù ÉRÂN¦¼ó!IcSÄÆ>né9Ú߸GãˆÒH9Z >n„N1oSº!ô.‡Av‘é)eš¶MÚ“fZù¹ÄƒÐyù\B£¬š´2@ˆUZŸ)êz™wñ95—OËu„·È“’ Æ5×%éXŽã°2õt.¡NÊ 2y$¨Ž8ýP ”+—”'^’&dG,é—b!³dôoÂ’:G&•ã=r}'….J6# ¤–ú×ÛÖ¨ÕFÛÈ2nŠL%ÉõñJ<‘ByHZ?)æúz °NñO]ÿðþCüí¿ý·õN½¾ì˾ ÷Þ{ïu¿×]wáý£ô´hXu]믌d1FG[ú¶è˲~ZاGßÞ÷ ½?¥¥8S˜-­AÞÉÕÖ2g”æ„*Ëóƒ$AÈg°UrôH5m‹,ã:¦“ÉýŒˆ™ ÉeFÙâŒÐôž×þÈåÙ.¼ñšº¾ò5Bl¬³èî}¨ãd›huPÌ;£r ¹^—‡ Ù³óãœÿ¸™r3ÙFÇÓä;+ RÁBgïZô@ƒ1^–rGstZ_qr5áBWfjÅÔZ¶änŽ mFIùôáQ¦Œá’ZÑZ%CîRJk6t’ZL¸#èàÆÐÈjsª?p)õò³šÚ)*¤ Ľ§4Q¼â‘÷ßôú†oø†C=Ï×wÜoüÆo¼î÷ízÝë^‡—¼ä%O»œz½÷É_w´ d…­ð5ÃÍô~<¤½()ö›Ô¥ä1ÄÀ$nhˆ"¦0-R¹þ¶P])Ñ€AƒyÆ3íâÂt3Bá5E6àJ¼{"¸j€|Ê æz©r3^­eù¾Kã>æ®HÆ@Æå{â…χš!¤pkk÷Oš;¢ÅB¼°µ«3_HEXØ‹B¨t[ÙÃÀÂG‡+ Œy ®ÓrJå` Å æú¸:VN#CÑ+ÿ!cCcö.W.c8hl™òŠBžk]ËJWmˆåÖû`Îö#ß$pVío”?톎FGb ŸøZ•‡ýœR¦¯ëMµ|á _xÝüë¾îëpï½÷BU±¿¿åré+msÚ¥Òæcãëøñãxýë_]4lrUniž~‘‘èe)Ùª€´b̘£É’ÐxSŸj³_£²ßGV`åž•¨$åK»ieõšÆÓ´Ü:™b¸HJÌ?+i£#¼`¯ŒîxsÀÙêÓxN y“0°šÇG[§äñ«ÚâÓÄ»òfÚnQ²¢>eßO`a¿ÚGŒÇ5Ž©µÁ©áDY_ÓÕèì¦ì “ýOÂâÁÞÂÔsÉG¤Iùóœje±Om™1EQðdŽ)SÏ/Gô##Ç“®9üÒ4¹‡MÊüÞŠØ$Y`^™ŒT¤º…öÌâäÄt!`4fayÍ^Nvâ; yµÐRH0d%ƒj ç½[i=Ç!QÊž¸¦Ð(ãƒñõL‹ˆOüª*ºÎYßÒ(ûû{8sæ1<ôЃ¸xñ¢Ó3uýù?ÿç¯Ûˆm@-x¶qjì|ÙG6Pó4{íÚ¦|Ö yB»>ŽùÊÐîñøDÁi’)о•ér1ˆ¬ 9έl¸L]¦ðF…_ûø™²³d<3¡›jÖ’µQ …Ó¤@UFù2Ò#ù`£VÉ ÏF*6©¢L5ë Ž>Œ¡/Ðól©l{dDqœ=K™ ÌkY]*†÷ÃÁÌDfžk@‚ý"м… µ$Æç÷ZÇ9ϰgbÀú£jÌ#¹¸ŠÈûC`sdõ]PL lLƒ@YBϛ䬀̓qTÕæ j—[“Ù¹§ø¾Œ1Å0¨#nìèA²´øÃ¡rßL\¬(ú¾w7þÚµ½áÄåGE×I›+0ðìg??þã?Ž/ÿò/Ǧ×í·ßŽoÁø|øÃÀ/ÿÒ¯àïx;žºp÷Üó©xÍk^ƒ×¾öµ8}úO4Ž;†S§Ná©§žÚ˜†Ã]ÌCKyÞl3(…, Tè èÚª¼‡¤¶]^¸R̹A÷Ýó‰mò¹Ñ–Ñ®mÂbn°F“<å2溆Ä&M-çtÍĈÍ{PyA×ðpäÿ‡³g­cWí"/iˆêíö¼ÚšûËm4ž´¶yf±î!ãј#!`Ja@›+ñ:¹D·_àÛ€ûz †³#¸•ûs¤ÎvfMhŠ2KÎ[X¶ÜÆ×Ù7†HŠ'`B £ùÎPVñŠ[NK$EÇõpš¿³ÆòjGî'I˜® …—;ëä åH9ÄürØ&º¯ÔâýŽl¨4¾yžÌ®à"ªŸ2 T—ëq@ü§\]'¸vmozÓÀÏÿüÏãᇱcÇñŠW¼_ð_€ç=﹘Ïçií/ø‚/8T÷Þ{¯ÇíM!ˆ‹Åo~óoâoü.ü꯾ —.^ÀÎÎ6NÝt~õWoûÛðÕ_ýUxÁ ^@»â ^ò’—àå/9~í×~íPtúRd*¡)¢˜°í""ÎÞæ°6À*œ®iÉÌØd§ ¦ÞôõX)„E1©ßdŠÖEÄmÇ+£O¬štÞš¡q¥AF†(S`ToŸB‰úÉ…6â5 ôo[k‡¡!¬™EÄZ×+ƒ!°Q”Éñ2rAN¯µj*:ÁýÄ€ahH°š7¬ÉnÄ<§}"„£„|"D15ðÍjY®?B!J¦Ø˜«B Û¸Ûš£è«ÚêËÍ;îèþœfP‰”¨'ñ:#Â.ц¼ïvÇ8 &KqBˉ±$t#eï&x+©héÂ@F+it•ç«…¯ªpÜ ¿'D¾äþeŠ60v0Λßüø–oùðîw¿óù wÜqÞò–·àío¾áþ{üñ?þÒÖÅè§®—¿üåô^ ìw¾óÝø§ÿôŸâ—~é—±¿¿ÇOà3^ój<ïyÏÃ<ˆŸýٟÙ3gñ ßð÷ðÇþØ}—¥ƒ*ðùŸÿùŸ _I±±¶•!ûshSßö¶Ò¦*@×9Š6ØÑ#Öâ„hÁ¨¾h8ø™wá0ôCWn ££Ê ¼dLëãÚãd@2ØUfCV‹ÄÂþÉKp ÒçܾÐMqú1q>»Cʉ= ÐØAìØ»³ÚãV~Åæ¥zðh‡†Þ´þ R“bs£ãÜ(ìÄ`I~‘ܱÚhÿ!-QËVÜ^«rlué½AÇHY@ïÙ¤ {M5‚ᮤ$JÅâ‹ùÂ0BÂbÝIÆ‘=4#Ë‚éõt+¡}G猖$‡É£.ÿR2‚ÔÿNÅñÉä$EAÁkZ¦Ó §é­ÐÑœ†)"8sæ ¾ïû¾o}ëÛ ‹î»ï>¼îu¯ÃK_úR¼óïÂ÷}ß÷áÌ™3x:×l6Ã¥K—_{ìqüðÿ0~ù—ûû ˆ:éÑuî¹ç¼öµŸ…—¿üåøßø üðÿΜ9×útXgÿ_ñ‡NeÝô"ÜË SýW«ð<–Í Ø¼€„”j…©,àþ Ùáãm¾é!ĸ`zí>‹%OHgðnÈ?bÝB/úåe Ë’(!Mþ+®tV6jvPûLrŸLL(/¤4ªð°¿•´[Їów€¥”F⡤Û^~ò⓪)ˆÏô ¤í—ꂦ©Ð¨%J$ û$(ó bßBÂ,I¨B'!tΔN³R¦«hZ­û U_"z<<_‰>×xD'ÝsQge쥅bÔªi](kV‚¿Ä÷äº ²Ð0Šèò"¼QÎÕçØD2ꇔ–×ê¯ÑÑòòÄ$é‰'ðå_þåIÐzè!ßkg‰!têÔI¼ð…÷á9Ïy~þç¿ð ¿€åráÈÿìÙ³8Ìõ9Ÿó98qâDº÷ö·½?ó3?‡½=›\ºr ïxÇ;ñ–·¼×®íá¾ûîÃm·ÝŠŸùéŸÆ»Þõ.bL­­-Ü~û퇢cÓ‹9×%™È{åjt4Ü©]Š`0p'¹–?ÈÑOtÚi/¡5ƒ½˜à;—RRLH8ÓêùBq&.§`³‡DkjH(þÐpžì™¶ƒ§ª&Œ‡k‹>K½NÞ 6æ=‘`} ^LN›'>ˆq5-TÒT&û#•QQ¯u¤Oúº¶v<Ÿèf/ÒÓÓØêa³çG±±RhìÞJsW,쪹ÞT²~cÝT·|54âpƒKBn¡øsŒØIš\ÀÕÃC>†MÈÜ‹gmEe(”~Ë‚[·¹xSs'àƒØM´Mt†²BMyØ\L ·È4š¾,c}ñŽw¼gÏžóPÁÃ?„÷¼ç½PíqÛm·a‰ŸþéŸÁ¹sç†>PÅÎΞõ¬ga“KDpòäÉtïÂ… øå_ù|âŒBK?þ8~÷wùÈGpåÊÜzúV<òÈÃx×»Þ‰k×®ús§NÂ=÷ܳ ×{ÙÑÖÇ} Ø>öõæ j(Úêi'AÍ? U5,ƒ’ö”bFf'H”4/ã0­æê¬¤´SŒÕoÅÑÖ>¦ŽÏ ÖåY¨”h¶.Û…@ÉðÀñ2”ÿF¨G Ñ5ÑÅÆnUkIO¶ þ­aš”;{æ\.ëÕαꃼ‡µõDĪBW MžEm¤Ìm­yúY®D`Á,ߟÃ& ¶’"“‚P‹Uäz!ùu·ö†¦‡Á• Ҍ 0¼ è…±tZlÒf¶éåµêm͈WWrìÔŒTÚ.¼²ÄÙœoŒSë/jX}ÝvÛmxîsŸ2 À[ßúVìï/üÞ… —pÿý÷ãÁÄÖÖ·ß~+î¿ÿ~|ü㣔Í}?~›\·ß~;^ô¢%É;{öÞò–· ïÇÏooocoïÞûÞ÷âƒü ÀÖöÞûÞßÇùóO&¾¼øÅ/Þˆ†Í/VY¤\G!Z>8Æú£GÇ ˆÃsT®Í»qÿqýyV<"‰ñ=ÁüÖ>´¿”X  ©sDSEnw2꘮Ä5øxdÚ­}¼¶)ï‚›KŠyDáaº…Ç?½)Dô` x. â÷lÌœµ;’l'“aÌÀÍyQŒjsà±ØÎ-ò%ÁDܽª”›–x/5WD!ê”»0V²ê!ôlµ‡{ÖÁÑ…^TA¥Ú¸‡ø"˜íLšP,™S/’ÄñÓäíî#mÇ‘•u(ö0x¼­„÷U‡„8ÌÕ7ádáN\tã›…©Òê¦@‹àá‹ÂÔUÑøSO=•U*}ôQÜÿýØÛÛÇÉ“'ñøãgð¾÷ý¾óé®»î*žÄêëÌ™3¸ë®»R§\ºt>úhÒ]'8~ü(vv¶±X,ðÁ~¿ù›¿‰x;;;xüñÇpùò/ãĉxÙË^¶ ›_Yû×jqn°)}Û °ÌCÅBý#eØJô!X‚Cù°Ê¢ÎrBóTiÔK™ÿ±gà ¥)›üv‰’¯œ±V¸ã“¨<‡H)’nÉ1tJçzCÚT%[jÆð™Ñ~g1<òVraÛîÐKê€0Ï¿eãÅux´€ŽõbX¥q;5"2sêÎ(Àšuºí­m 0¯‰ Ø+ÀeJ×&ˆˆ2U²\²ô“jêôX}ÛÊw¹ln°Q‹ ‘’¸£„\$#€êJ%+nÿÆRK–5¤˜© Òp{½lßúÞ5Ã6÷Z^<6uq*%¯HärØMgO»2BRÜCplë&lr9rGnãÚÕ=,úç×®\¹sgqóÍ·àÌ™³¸|ù2{ì1w·¶¶ðS?õS•ÏC"‚¾Wt]‡år™žë{ÅîîÕ˜tUÅ•+»¸ví*®\¹Š+Wv±··—xøüç?#®ÿ§8â‘9=Ì/õÖs$«ã«c AræŠÛoö+C áY -Ù{Bbuj(ì–ÎÉ€ñ¹æÁsâz¡ÖŸ“øÁÓ3}W¸¬àhOìÙ_CPQž”(„4pjül§¯9ˆœ°ù€P­ ÌhE‡Ë ¿gaö5•ü¼=k†GÔ“"b&h«ØIh8ä0T2˜=$>Ú)ðØ•Lë´àE…ÍLF£"º’Mw:m¬*|w²™[œuË-Fx$ œ‹ê‡ °Œï'Ex F²Atc:RþÔÔ~jVÖÞæ-1ã>ʽÃòê-ù‘bàƒ/ón Ç·oF½.^¼˜¾ß}÷³1›Í 5ûËçÏŸÇçŸÀþþàÊ•], , ¬»êjÔÙlVžBHS©¤Ã9»±y¹ìqþü\½z³Ù [[[©o.\¸€OæÅ*%!XVþš÷þõ¹)C‰y{Äø¡÷ãÎ;îÄÇ?ò>ó¿øÓøù÷ èURh¦WÁ¬î¾yÛg~W?ÚᕟzϾµÇ©[?ŒÙ {=pµ_`ky?ö®|{»ÃÀ™w‚£½â9'€gcÿr‡?ñSxßxžÿò¯ÅkÿÌŸÆÿý‹?‡+צ·îµKu‰½èÅøœÏy-Ž?ác<ðžÉ+Ä©p]è@G2âÏõȱŽß5RJ¤•9žMŠ9®-$JJtf[®®¹]—iSF‹Æß$«Œ„³^ ýw»÷ˆ“@¾=ŠUTÐÛþJþ¼03.Y{gïø:ÙðX¼ÍÇ>†2Oåû@U®½àhcâK3Äæ=ð*è‘0Ñ€ø¡ð¼ÑXÄÂ9tc¿0º$aì~™ç%*÷pK(øŒ³ó¶ev}ÏÇÿ[ܸþó½.]º„ïþîïÆÞðÌçƒØu]‡oüæoÁ‡>|?>ôáûqíÚÒêÍÇ€?ñ¼¯ûŒŸv÷9àš`!–l-Å|P>; ìwÃJØ~)xì¬âÑG{ìî ®ì/ø”%>õS{¼âŽ'qeïGqá]¿ŽçÝü*¼êOÜ…ßxëƒØ_ð&|q©ö¸ùæ[ðÿõ—ãå/9f3RÑ"xÿûßÿŒòç'ßïÙ`\é8H,Ñc‰¥.ÚûXè–º‡…îa¡ûíÞ>zžŽŒÿI.ýÆuãÂìÓ¶ÿìÿ‡gãìPq%‘½EybRÆâç$dô^F9”Œ³öÂÛ.ü»ÿÔ<ºq=C×Ù³gñè£â ¿ð }ròÖ[oÅÅKñÖ·¾»»»èDðÂg þâ«:|Ñ«;<ÿYÀ•Å —®wÞÜz»`g«C?–ô3³®y÷Š=U\Ù.]ΜS,UqËÍŽŸÙêqbç)Ü<û}Üsú"Nì]žÝ÷iˆ¥>}_ýU_÷·¿·ß~ŒÅ¥K—ð­ßú­ØÛÛ{ÆxóøþGpÇÖósXª+( SÀÃ=–þ·÷ûŠ˜&®Êþ†ò¿qåkžC"5¬x?Åä›ÛÈ1ቹ/•sBËåûa€|£7›¢o×ß¼ç_¥0R2"5Ô’B'L½¸±rÒÀe±Á‹ðHJ ±uõn®‡¥8óB(V®n$Á¿sOF´£Ó¨Ÿx–x …õE‘½=>O¢ñ…x2L\iÛ3tϪf¾Ÿ—ý>~éþÅÿóáI¶··‡Ÿø‰ŸÀw÷w" Š£Gâk¿ökqþü“øáú!Üuì<¾ä3:¼ø¹n:)8¶³ÄÑ[ÇvϺ8¾Ý ÉK`6ö!è èæ‚^7ÝÜtªÇµOépþüÛ;Š“§€ùQÁ¼?ŽýåUœ:Õã³þä â%s¼ûKüî;—øí÷y¤Ç…½¸çy/ÄWü×_†¿òú¯Ä]ϾË7®³ëŸü“2Êhz&®{nùcž'/Ð :tèd†®þnÍæ˜Í¶°=ßÁöl[óloí`>ÛÁÖl [³-̺ºn†™ÌHœ9LaCo~؈^ùNqtM_bÕ±ð„®½©J†—­¢ðg-ܤ6qjc,êö:<Ìa¨T>•É›(ùvÎZÚAȃ:³“Õ,¨ç©¡šhµ6úgokÓ£Èç²c¾[ùÞ 1ïP¾çÐñ¹­ªõ7 €©RPr9 >ú1ÿ¦ˆÔ-V&Ƙ”èžÑM,J 2rôÒ&±˜ÂD³gÕï£üu¥§Nˆ+ÖÔz¡¬¡¶},Ÿð•t00BoÂ÷ÊdÉÀŽq+¸éy^„y›+öí­ikç·Å]k]D˘¼-Íû+YLØvcõE>íýy·…ÓG§·k8wîœ+TÁr¹Àw> ßðõwl=„Ùc?‹{ï\âø àÄIÅ-';;ll5¶?/¢1l‰n¡€ÉSKÜrçM˜w[˜oÍÑm_Ä|q X.Ð÷ûÀžâæ#ŠÏ|u‡?õi‚×=¬øÈ':ÜÿˆàæO¹ŸûùŸ‡Ó§O;oúeù|P¤?û³?‹OúU2àâ–¸¶Ñ9(¦Þ•cÛ…¹ Ë*£ýãù\ö=RÎyË J”Al„ï•n g­¤p´•'!O¡xI%ÓUZ¡d\(é"bå€ô–ÿŸ ¡àEŠÝwþ[¬‘ñÓ·Úø¢üF3XAPйRYL{+Ît4Äé´³âžó%M7˜4fØ:ƒyˆÉ“äÅ5Dm\iÂôB”xAÚRM™óâÊÖžU(Æî0r¦¢Èa›dCÓftt'…÷ÿÉ ÖW®‹¾„Ó2æ™#E®Ö&š@‡Ô¸MÌ“¶áÝ ÄüI6d$±ŒÞȓɿËÈËà)dÎyBò²Ô³’bçÉxþY'Ÿ‹U×ÖÖ‹aÎ .b{{ O=ø{xñ©w£Ûê±½-8vTqòpì„àè‘3,g¼ëáså‹ØÙºíC—#Žb>›a>ï r ]w3úÙ.:½3pl½>‰Ù¢Çö¼Ç§ëðü{¯¼p —/þ2.¾í Þvÿ«°uú•8}× qÓM§qË­·ãï|>ðà“s±—Ýž[q¼]©9x‰Ôd“o%Ÿ/† B;Irf'R©ÑÍ4£+Í0ømCîfX”kÈRÞWŸ EÖ²!§6ÎÊ2V`v؉+¾¢4ÙM[9[YÔ–}6 3Hô@Ú§¿Y8÷¤Àƒ§`h÷3À[ÙxX¤ÔMk§ÝºñCjŸÊ3‘ar›]ò¢ CH5§:rtågJÝÌ»xxÔV#ÀɳºÃ$ä²Mt“Ó‚èbÐX¢ã²V¶+B1æ òàR'« î|òø©Uš‘Óæ'žI†@’ÚJá.Ü…¼bsD>5K ­ ƒÝ¦*ùe!çY­èaÅþru|Ü\=øàƒØ_,qñ£¿ˆ~óA·÷vv€£‚#Ç€­£Ž ¼[vŠNÚ)°t,ts`Ö²5ô§t3̶:æ­670ÛƒàVtý´ŸCðÐ]ÅL̆H»­'¶;; \;r—®ýöŸúm\xì>üλ±Øyf·¼ —öoÅš‹óHbûŠQËÈpY–ÖÏ”µç z—wWòÂá˜ÈW·<ú„/¥*ýŒ3]iИÌY<ÈOÔJ£ŠÊa“o¥<âPÒqdÄœ‹¬ý= CÍ=ÈŠ8‰Gqñ©]’RU}t¥ÝŠi”æ~:Af°X¿ªWg©û|ºÚ@rβ3<78ÀÉŸIô‡P¨7>Â)JÏ+÷xÇÎ éS˜#]Œ_Y!…ð”`ÆDÄzrk*ò E?>D# *;^­Hþh;yNcƒoĘf!x¾$ˆ¥bÙ?Ï-äó…#]•9#Œ˜ƒHp|s9ÛôèìÌbÕeyôÿó·+^r÷5ì}ô§qdÿ!líŽï(ŽQììŽtÀvÈ î` €ô ÌœuÛо‡Ì—€vèDÐéqˆ°é®Bu¢O†-"[æØÚºŒ­­ŽtÀrÑãô•'q÷•'pùÂ{ñøc¿ˆG9‰—¾à8Þ}ÿe|r®,»£Ð[Ho Ð´šÞ~l'‚I>· ¶BøóW2¥±fP EYñ[Z~ãIöÆÀŠÒL'¼ö”h…¤| Qná'‡Ž‹LDwmGÑä™Xhèà(ˆwNâý r>{¶kp6`ÝH)¬ôPlã¢A#Ígû”PzZ lGÃe j¸y ¤ä­× dÒ,¶gŠ#¯æÍâ>)ôc@\†@,%æj9¿7u"X†æíÉD-dcEΠhÛì6gøž ¡©.Œ†FRêªíO“¶áŽŽúÅB3ÜıöNóÕtJåcQúiBÀûÏü.ºüí7â®\Á-'fØ9Òag«ÇÖ¶b6ìl]ì«¢S´œré/½ï²5´k«m€'"˜mír2Û ˜éqØ^â'¡ó+ËýÁàm ûÀÎ>D瀶—KÈV‡~wåµ›pòÖc¸é©3xö­»Øêøþ·_ï3—4tW/0caTÖ<¡(´OF ¶ÁRXBD^üGW]æ=ºâóê(LÁ@TIJË{á œÄш#·^˜Žt ê±9 –½¤$Ý ÙÿBSÝc±Fd³©·ÃÔ1ÿ˜`yåZ›oF±t† iô=0ßR`&€tP0 séCd˜tÙÀe v‡Bf[y‰ ë—èŽn¡ÛVôýißÙÁÑcWðêO{Ÿ]àçæøÈ£ë÷':ÌuuyÇæ§Ò=c{Pê¯MÇhs÷Åw{ ˆséÎXí˨Û<Å&^¨•BAìeú’¿à^…€×ðšhú<@Yµ>ýëG˜é‰pq”Kþ€„L޶ÓàCVÌɇƒ¢Qá!nÒ.=ù¶UCiej—SÒ»qÈ•Õ okÌ£˜!ÂD¿œ\iz¨OÖEc“šÕ×D½BÜ`¡r±4V„ÂɤFû j+O³ugôa]f_È%%£Bt±=t¬l°øö éÈ ˆÖ3šfô\Üí ®Êsêä1%^‡¯BŒ{@®ÿIíË£ƒ{^«ÞBöÞ¬2•ôDcA%‚æh@r#žØ}»û—°êúkŸ=ß{Å6NßÔakloó9ÐÍÛ;Mé+°Õ ™=:Êíšâ‡ ÞÁ¬ú_fCgó=G!Ýña‚X·1 ÿr?0;Ûд¡´!Žår°(Ýl(\,{h¿Ä¢¿Š~±‹îè­Ø:¹ƒ·-ñÇž'¸ç6Å3yýÊ#ÿvìdHÚðßâÕ®¶õ³ÚáBŠžWôšsJÈŸÝ@VÛ¸0¡¢ñG“Í.jþ\–1à!õü uaG§4ÇÙ]v $EšI‰ä-¤ö›×>’üßb«é1”i´Œ|œ‰JüÈÉdä3WF¦:Èò×”‡{&›¶v®˜pÚ`7ÀÚ˜›òî@jOzÐÉ4øÁaŠŒXkst‚RC €HC3&TÖ¢jp4uš{NnñUkÛ\ªYVÎ7qâo%Äí‚@ú5£÷h»çÚWÁpúÇ÷SÚ'{d„r8ˆ ÏiÐ'2Û½ünÐKZŠAiÈ N{n9z'¦®ßÝáO½`†[N Û^Ì·Ûóó­Ïwd0[T®m)`¤n – Ìg žúåfó¶åK!³³ö‡ÿ<æ»,$ÌÝ üg³öåªÀîàÌcK\Ýí°5wÜ~Ƕó0S`kk†a*ú™»–ºÀ–l§qd”[¤Ø¿ { r?Ü3é±9½ÎÝÇÁŠËs^ÔÏÙÈÆÁq))/›&={Ö1=Á<êÓefw,âvCÆBõsäDÚ×v3°$˜< §Ä(4žgÕÍÞJk+¯#0š˜]>Ž ÉÛ3)eþsõ¤WUk¯jñà X`{Ñ+ &2e“†F´ )ÒhY2Ï/&e§£âš€™•—lpª5ã’7J¨Ì’âFLÀ– P(¬døI‰«°â÷˜‰÷W*8VËs³*û¶¡ì›æ,¸ZXRõ¬4oÙÎ ñ–˜§ÎúóÕÅK"`¦’2haƒùôŽ›ÿå‹O¹C0ëáÝšéàÌ:ì̇ϳ9 3Á²k+;…ô2¸Ø[)ݜ˘ÁlÖAº›!Ý-îh¿ôWy s áwƒuQпyvDX¿D¿._P|ø£K|ø~@Š»o]àž@wr+—ÇŸRœ[íä\÷ueq7mßÚcn–¥F*‚|SøÀ°xÓÈtÒ²¯ÕÇ^£tU§ŠtXš§æ\ý!iR(19Û %)AŸ3`Ù@ú*ñ‰_ ºl¯¯ æø@š`ö$ަøEé¶ +™2¿0™Ãl‚‡ŽÀ †­}JïÕO¼µthx Zµ=•R²=u\^°ÇJý¬ ôMÏ4 Áx;UÆèyukâHÅÆæúh¼™·^ÔX'iÙ%+™†S^ZB¥qv'¹z¦¬¯;êü¢´­ól‚4ôkÐugƒ–‰S¢ë‘ô~Tµ²·R¨dï¬ÓRMl,¸Ï(w´2íÆ—¬ðÙ››njZÓG’R ÇR÷ñÔÕñÀÎV‡O½}†Û1—3Ÿ)æsÁζ€ì¡Ø‘tÖÔ^‡!ü3è÷³mÌݬdÕc@¿t;Ðå> =z<Šnùh›TÀ€þ­qËE¿ì±\ÿè?ÚãɧÛýn=Ùã–£ÀµË{è÷€ó—:œ=·ÀÛ>´gúJÉ¥wµý;¬ðÔÆ¥è ;˜wbo€T¥W&ŒXAòb Fè7í05Àz,&;‘•j@erkÈ5t® yÜÊImbE+â|, €ÒX€æ¼¡>7–V"£=ª‡·¿ÑÌ€2‘KÆÉxE¾Eê,Û†_ûd×‚Ýæô´F 'ªG„«µÿ»¼¨ qEá=€Ã¬–9V\r¸ZáreãVDn4‚U֨׼F¹åÙ°Æp!ÈÎ_ n˜‘°ß¸W¦* ŽŸòFäAš›H=51Å«lðâp‡º˜,µÍ{PBLààeè¸4Šüîÿæ\ºö$Î\~pIJ½E?PÞͼ Aû:ë![‚Ù N°=ë†ÐEÌ è›!X,ß>ÚbÿžïfÛèº[ 8: é<韘ìîÜãÅr h¾ïñÄYà­oQ¼ç½K,Î)îÚÜ{Ç÷Ü®8º­èŠý°ß÷¸p Ÿ”ë×ýQLXL†gŠXGÊ¡÷gl~À†+í¶.@¦Šn ­%5S—O6 4P€ ›.'ƒ¡áO^§“Wu¼¡ËÊR¨ž¨BËïÿ”žóõ+âà‡ç8Ã)¼R»ÆÆcÖŸÆ¥ ½Æoj'}hë"¤ò€".%+Ôv²Ú!'Å£„o!ˆ —i©T̰DkAð®DÂÕÄÎ*çΗL,‡„¨¼Ê"“g¶Çú%Œ•ÛRUVúc$Ьgh~€¤‹çöax+Ÿ4Ö¬¿8£PGÁëä¦ÓÏh“ÀI‰N`…ÿf÷i Ñ&ïÚj|±)fC- ßxñ?Ê“‚¾)~A£‘s†N潄@ø³BüÉ«®’¢@n„±F‹º<¥ˆÅWÄ;×ÜŒE¨ÿ‹.¥§fÿ‚<+7ŒRÎÒÔ¹(C/AȪ¸cD“ƒƒAIílÅÝ7½S×Géñ¦w-qß]=ªÃÕ…àÓŸ/¸å0ëÛÛ‚yj2´z‹{´ÜÿîHìÓ8›í¢ÃŠæÝÕíws _Òa±ôû}KüYâñG¹‰ÇR î½]püØP7»K2êÔ…ËöÛè—Wñ¾O(Þö‘Ït ¨]¾ð{xÁ©?‰ín| :ÖÎÃÆÚ+t¶lá Á˜‡`‹£bWKó~i¬vbwdÊ‹”'gùú”Pˆ’ìЖGo $ÿÄz›^¼ ‚퟾‡—ïizÞØš€¢bÉ ºÆ»ôá¹Ð´o´ØuAk‡Ø&|yK¤b5µ DÒ}lva(2 Þ‹¡E >wg<áP”‹4­n¥ÍÉ®ÚH&ò‰VºÌEŸ²ˆÜ˜p“5{§OdL».ÕMò´0›äHº¼–”Ã(š…¹†ñi½siî§gmKöƒ2«KB_’ïZ Ó¨£5Ú¥³rK*wmuTIax¥ê§°ÁmÇŸU×#Oö¸ïY3ì^êñž÷çÎ+þä§u¸ãv`»U·˜Ûb[Ç<.·Ø: í¶ Ý.–Ëèô æÝU(®aÖ)°ŒtÎåR°ØïÑ« ßS†²RÍ:ïtóùL@… ñtKv }ò9Ü'PèˆyR'«Çs QžÚ€‰þA„Ðn=ö¬$j|}üLOÜ9dzNöÀRñÈ'¿µ×ãÓ?}÷Ý£8Ùµ•¯Љ`«ñwvÝöMоä(fó9{èû«î£µk¹ßcO±{Qqö àcéñôPÜ}JñìÛ:Ür“bklÍf˜Í—°É¡nne(‹. .íÎ0›ïàþ§îÅÇ.\ð‘åÿé\o?÷ïqçÑça»;’± ®ï›GÐ7cm§‚½öèÚʬ!|¤€Î\‘ ©ÑGº®ôÒöö¼‡.Â<8«Y”“4ëF˜’ŒES¡0c«è¼îÀÕŸè°|ÓLƈۛ¥Ì:‰.+ÁÓ #¼ùÈ¥Ô\°ÛƒªèA!¥²‰šÇÓÒ†åá½d°nÞA¦ ÏËÈFn¼æÖP…"6d;•Š?úÄÿkc!þ×ý=ÀW?ëcâ¸B³a¤»Ë׬–3¾´ƒ@¬®Ã’Ø…UvÊ1¾êg¨TWÄFéQ†„aLmƒ,Á®® n[J¼OØ¥|ÎÖ‘ßMó.îb‚›š$ ›=”ncÀ3¤ê£4_àêr=BþÕ÷ìáÙwÝÞ¡˜í]Âùsûø­·,ñäyŽÏÜqRpô( ÇÛsvK(–KÅÖüúþ ÌfK@—»U±\W¯*.>±Ä¥KЇYàÌC>ñ€k=î: ÜuZqËIàÈѳ0—f󽥨vMñ_›áêþ—÷WûçCoy6®î<·=ç^|öÖÃ8wá'qÿýŸ\#pæêÇq÷±ûšÐXv¿Å©›Â ûô-†=,n e==éz÷=ÃÞf+hŒ“ˆ•;‚ô¾'EïY3$I!E†rë\Bòhä°”¤®(o ä´AèŒÃM!óœö¨F ìˆÆOž‡¥¿f£ë^Ž•eï“퇎ÌÁ²µ- ËJ?ØÝ¢ ÷¸òºë“¡ÌyvgšÂH+`‡ëÇV(þ7ÜþÏàʰ)žÓ¿]?øè×¾ú®7¤p¢öÔ•æÊ‹´®6Ë”G™žÓTën{(ŒŠY|Þ¿„a¯;‰È>LnÃÈHša3!$1l\ª;’Ì-·£é3Àa!òIÔ\B¸÷•(K9¥ò²78ê–îfööw'Ñ?_×N¾÷¼ìSqåÁ_Ó|×®-ñÖwùx‡»ïT<û6à–gu8v ˜Qtr Û[ÀÞü®í=…Åþû A¿\½¬xâœâ±³=W¯(®-;ŸõxñÀ±£ŽŽí «ÅÖèºôM–W˽{‹#Àñ;¡·}¶O¾ æ/|Óý%>þñÒ À[Ïþ"îü”çaÞma†užúi ¿ï{h×þöK7CjhUßK{ë{´5Wi]d…©ðy¯ØˆŒÃE!>AìK#‹B%>_èa¥áY[AœsZBLjœÖÃh2:1&l$£êVuÚ´,°È@{¯®vx"·)5…·4TÖ¿÷AތüçDD*ìÛŸæñ󔌇ÜJØ0´pPíÔ0Ëso8²òáœRþõ¶ïK´ýUýÎïø7þÝôÎ>òõøšgÿ‹UxöŒ…*(~Œ Ó5ZœdÙpúí5±>®jÚsïA®bâ˜.V˜y¡©‹¾P÷&ð;Þ>§TFÏ Ó®¡Ô]€ˆGÖùnºÜàG{q™Ý{7p…QÍ8Sû¾3¿ƒƒ®çÜó|üµ¯ÿüÂð»ÿ מxàüUÅ{>¨øèÇÓ§GOõ8²ÓAºs9éw‹e‡~±„ô3Ì—3\½2Ð~ÓqÁÍ7 ¶·G·ímÅöV¹d6Ȫ¨`©=ÐûûŠÅ¾`o¡ØÝ?Ùº rú³0»ýÓñYáë&iÿìÏþl¼ÿý¿w¾ó]¶óé\Wö/àÔÎm$LM¨*zíÑ«¢×áPø¶¥ôè:¼Z(&±6ß”¶¯8•bô¤xF¢ìa“Z’`B«~áH4|šqôOŒv=ücõ#£ìGe¡†§PÐøðnj')ÿðÌXÑ=¨Ž>Ä/f@•è&þQäÇ”Wx)aTÈq* ‹[Ùaß‹g‘é-Ž3ìù*lýØÿ ½ðWoûNr©WJÀ|Õ³¾ ð¯ÉüÀÃ_s÷¿~“’ŠþZ¡TùyŒãØþþH/‡"¯¾Â²ṵ̈Xs„ZÑ»õ@²˜$ˆá- ¹·#eLtF‹8k×aú°Žs'ÜœÈì çOš§ x†U¼g«>IÙõÌ ŠþqG+“5ž€«Ë+xàüû±îzÁ žW¼âå€×}ùßÅÏïïâÁ·ý+lí>Ž“':tÒa&Š…¶úG·ºÕcÿÊ@ûÑ#ì ¶·çØÁÎ ˜Ý™;‹Šè]; q>›a¹\Â&N—½`o©Ø[  Á¢»¸ùUØzÖçâ³ÿÒ×­¥ÿ¿ùoþ~æg~æ“n~íÑÁuÏ߃H×bý3ôªè8ë§Whß7o ÐC›!éщ —fX: LÉ Iw$Ð’Å•ã|) tù¡XIš, ­gã?år¦g¬Œ’" É1x§!‡ªBzÕ~Ž{^t,’ óÍt¿‡”õH‘&‹Éåh®”ÂaîÝ›!šÐàÁš }ØÆ| iYº¶“Óþu}­îØ3sïÓV¿+‘‘^û+·~gÚbcî ð³ÿ«îz#þõ#_Ÿ‰'åº.dV˜õ§vkt Q°P3È%­ëòGBÁjnTw°b8T”âì¼b—ሥÖyݤv%BEñG™IÖ¹B¼¡ô3lr˜W§Õ¾ü&·™VŸljÏÄ Ï!¢OŠÝ½Ë8{ù!¬»NŸ¾¯ýWø÷¿ðW¾?qñ<ñ¾ÿÛû óa[ˆ-éqêÈ·ÞÞáôóAñõ ôŠk{@¿ô³%°´Á×õöm²l)X,z Sô Á¢ï±¿˜aw¿Çþþpò˜ßýðy_ñÿƦ×m·Ý¶ñ³OçZô×°5?’ÂCx§yè±Ôsí±ì—XöKtÝ:¨vXj7L £ƒ¢ŒI߀†w[¸fã{`Â`eL>£í\é€ I7gyã„DÄ–GNAì¢Ád–T_ “6Ô½u´_žñÈ¡kBHIó³Q+ób ÙÓš‡‰p•s”@('kF`£¶§,RÒÇií…C.3&x§CÜFkáíú±óþ_ú;ƒàºÀ‚ü’°áÑðÕwý ÿþ;)Ü‘ÃfF¦Å"Ä7yB+»ÎðnïÛ¢ ³Ž ѳAðX§d!š*DW‰£Òs®„yÕ.L ç¡!T±6 ÏIT^ž„uA§­òÊÀˆ7&¶B’7⦽Îé«8É „·)èu‰E¿þ´¬ãÇî}ÙûÿÅÍ÷þWØ›ÂÞÕv¯öؽ \¼ÚãÊÅûµe¯t˜ÏÛvö{Ò)vº9¶eŽ­nŽ-™ËÚcï,«{Š+»‚«ûÀ…«À…ý[puy+pÇgaû_s(åÏþóõüõ^¿øàÿÖQ “º=Í h_u‰Þ2‚ln@‡, ôžÌWO Ð$È” +?ÿK÷hz[³¬"©Ë(Ÿ>W—/‡0|¡ý`Ƥìl¼¬ªä>"%#õ-J ¥í<Uñ­4¢Œ¤ÓtM¼ô€ZÖ†/i‡ö²‡Ã-½½Ñà:ŒÊЈ=E›’Ï!Û A¤ŒÅ»Ç5qq·qKUK¹2y‚¢ãòFòB +ˆ+=“+¥õ$¯À“úPBNñžóÖ•u¤Uy×4£aãH5³QȨ¬¼dªËá<gè¥ÚÊ0„_c{Œ‚‚ßÖîÀ\ãà— ŠxYÚ*÷,!£(9*ɇEr{v³nŽuWß÷“÷ïùã §ïýt;7¡_öØ[ö.-qáðäãÀµ3K,Î/±÷Ð_–{‚åB€¥`±Äþ¢ÇÞÞ»×–Ø[(®-€KW¯(.í*.í ®\›áZzâ4fÏýbl=÷õøœB>O=uatï ¿ðuxõ«þþc\÷_|ÛCnã¼oÊ]µÇRèµÇ²_`©K,ú6'Ð&‚{]¶¯[HÒP²§ÖV{–’u$'Û96×Üi«‚,j°y•P³óü9†ÔDÐHý¹¢•¤ÀÆ£’3释m[Ó~ dÒ_*5J¤ÁZ”¨µ)©É¢yûŠ08¡ÒÎB”.óÅSzm.7eœ*ÐyÊS%‚ÿ=¡ÿÿ5ç£SË1ƒM¡¸x€öüùšg¿Ñ_ý‡þNãŸ!ò¨ß6¥bú¿´Õ+™Ÿblº›JÎè™h¹_Yx2ⱉu¦º‡ Yɺ[¨’-|•p,îO<íkÍk)¢ŒàŠ”±(M°‘l Œ8¾ÞS1Ô´R¢¯×Ž®Ø Â®år‰½½±—ðšÏ~^ú9ÿn¹ïuÀ‘›±§À•½—.ô8÷¸âìÅùs=.ŸU\¾ Ø½\½¶ÄÞ~½=Åî^«ûŠKWO^žºØãÊ.pù pm϶SØÂìæW`ûSÞ€Ïÿk߉Ï}Ý—¯¤óÒ¥aÓÿ›n:5ú핯|þìŸûsøq½÷ü@ßVsþ|ïˆß”þrøo¹îõ¶M„Í}˜áí[ö>68lâa R`-Öž6§ñVÇ)·ÁNØ8+¡’é3|4£7IEÏù¥S7 24ȸÌ4z4ñ!èµñ§{z‘â-¼Úƒmªº©Ë ŽêwUÈ?6æK럋ktžú¸²ñq+<­b)ta‡¦jŸ²É¥÷<ô‘-ƒhGí^9¯è£6¸ÒÌÖÜ]±ÄŒÜ‚ÔrMr§Ùbf¼"Ÿ÷ÄG¸<Ð?j'1ûk¾*MbóãHªº—4îÀì’–°_ëSÑÒC5਌B …ƒÌ°†åOĬ >YŠW6³­>ÑX1lmn”‹F‡»/C‚̓:±Vá^„³ÐùBeigª Wß÷øû?ÿy8èê—=ÞúÖ·­}æKþÖ?ó_ùwqü¶—âšÅÅ]àÌùœíq扥ÿ÷ø¹%;»Ä£gzœ{²Ç™'zë³>ói—µéÕ|,_ôe™@˾oá æ´Éà¾_¢_F¦ÐR õ›ø7¥:5{¿®Ô³Ð0ÂtÏѱ@žÃ { IW»1á±d÷ø]V( qn ›’* s¥+#ÊÆ«ß«ß 0†?½ã9õÚT. ¨4b i\Oà5çµN‡¤„ø1Ú- ‘X·ævÏ=a:‰M3Çtò6w©’ò·ÐŠ­› áyyxf~|.NFa <6˜0r-—Ã$®ˆlý¨5d ²0¤ Ó1l¾PŽöPU,ª T þ*y©9­ü¤s¹,(ét¢ÖŽ0ãÙðD–hÒX )à·Ó koîtl¿^‹Å¯|倜-Ì2uýÅ¿úñ§¿â¸ûeoÀöécWŽãâ5àÉ Kýe¯Ä§¿ì•ø÷ÿöûqááwàÂùaùÔÇÑ_{ ÚwlAe€bëÈM8úÿgïÏ£-;ª;Aø·ãœ{ß{™©L¥æyh $@`l@à1(0`WÙe×Ð]U®Z]í¯ýu÷úzõªÉÕvÙ®Ze»ÊÕ6ÆÝeƒmlÌ`ŒÍlÀÌ’ЄR™JI9¼÷îpNìïˆØCœûr–^"2´RïÞsωéDìá·wì½ušåK°|Úv´g> K§? /yùßÁáʾ}ûbý‡+¯|åÍø›¿ù>û·Ÿ{\æî{þ£°”½zò0îÐs‡Žçé3fèâ=ÏÑcŽ>ÿžuIs@Ö"‚GïN•ï¦ÒÚ㣪Ú[¬šD ¨µó‚Å¥3ÐS§ƒ˜ø¦…$õƒò‚ûN•'NyÍk^sÔÏüðþ=ùüçø[˜®îuPìZhÆÛ°´í 4+çáe7žèÛr,Äߎçãÿ>õ©O=æs÷͵Oâê­/NbR>AŸþ hÀA¨ADqBo/âlúãNJóßëò;‰!³l¯Øû•¹üöwþ‘ë†!0÷ àç.ûMÑNôàšºA¡¨±†Éª! S´­8£}>µ¨è•Ác•$ @šì¡Ê+Þø3Çõü‰.Ï}îsðâ¿øqaðµÕà5—þ34M›NM7-j1jFh›Úv„Q»„qcÔŽÓµ¦EÛŒB‹–@-šG¢!Û€Yö“=¸ä"|FÞÁhÙ– ‰ÊQH‹ÁË«kfTá“åš-M|Öþ€5³ï<†žÛ¶vrà¬t²0Aç¯Ï&îØÔ-=Ðêl¿ßW®Ç]Ų'‚í½ãiÛ“ÞÚ“~WïDl¼À,–uLahÄ:1Üœ›Lç‡!× õ–Å›qeØP6)“QŸQa[,C$Ó+öe£‡[æ#qƒd‘Z5Šè Ã Š‡;4ðx2„^î"oT7ƒD!à R´¶6w•ùd32ËL³¯ÔÀ`dz€{“­¡,ÌráoîþSIyÊSž†·½ímGtïw[ùÑ×½/|á÷=®mrööa1wÉøÛ÷èû.A@ù|€½7fc°x’»(ߎfQ§-`1Û†Zßs(pp^Ÿn)±Ò˜=Š•»°%%žlƒ¥Nk׬áÕûû¨]£î†öM÷ªµ—Ö1Ø×Ò!›ÆH[a# n^èòÍî_mÃÈ#3ÔäÚ¾°¹&‰H(R(?[·!€ñ¦¿$þþÃÿ¼’.k˜¦LŽY2±:åÿí;ÿXêü{þÇÒ²…¤ r†ú~eò*i·âeú•i[iÊxü\ Úó† ïMceéCáòâù¥ …¡­ K—{¥cLecù…>´›˜>ØÅWs_#å/°ª¹?VM1ç:Êœ}â®?Á~õWp$åÕ¯~^ö²#Ó«r,†Þ#)×=ë:¼âæW0™ÆZq¶J}©†FÔ}•ÈJ™6Œ…ÑÞ­Úäæ0_#;ijS‘ 7£hRU Í!×FP|H¦Bºÿf§ü|a,~âlýuL Ìu)t)÷Â_G Ræ;X¿C\Ùþµp”§elž%ë‹üon‚óuaö¬Œ,e9[͉ UÉìCFcOLÛ8@5l#Ö«qÕ.̆£ p²klÜM¡#‰ˆ¯°,^ÓXÁ# øë;ÿÿéÓ>Zì¡Ê[ßþ“¸öÚgñý'²®í}~Ïé–°]Òòiàž#ºØ¥Ñq—ŒEõèÉpP°­ÉÈUN›û`„Ez‚Wq Á£|Ô\‰dRÍ\¤Kû/¸ßk/û‹mÈHñ®=zÜnÒÆäš=}ë /ük¿ù_ å0°¡‚MÚ——k{‡ÕÒ»b×’2ï¤ ˜Pö=šaƒ€·œá™¼cÏ?Ã;öüÓ| ¹ÉýÿGüß»þÉà™¿{þ¯§A•¶ C¬cb×tÏ’Ø¿8ÃÓr}$0T ×ZãDŠ$é¢ÔÈ€VýôK©¼ =Zn§J9k}>[u›´¢b"b¥‡Þ繣à ÉÔ,¸¢!ð:4#m€ëþ ×¶ÌCâ}ôÎ?Ä{nýÏIj<ÂòêW¿7Ýôâ#¾¿”Ç ¶y,ÊsŸû\¼øq ±ÞÀ—ú+‰#+ñÉûˆØ'ƒpú› Å\BJ¤å‘CΠJØ8®„#.–}g—3cØ ~yMywPõýÃHÚn=[ûª³Õ¤îB \L¢ro½›HÑÅp:ˆdP…f6ø‰».ófOÙs±·ðà~«Q±iÇ Že‡Q¤t8‘øÊü¶2^Vk·WÒ ÞrfÊðνÞûwwÿÓíMüÔù¿VE dU'Eú4Ööì9`ãT¸Ç-Tc§L˜Š2‘„V¸zñ>p PÊH‡XŒ•2 ü³Pƒk]XÖbðåáó¥…qe_lë—¼ J¼¢騣öVº* –ž5ðsç5‡Bõ=JÉ^zÓKðÆ7¾ñˆï·åX`›ƒödñãQ®¾ú*¼à…ß|ìã[›wø"¶Žvà©§?àäÖÙsŠ!ö š§b}J©!r‚1Œ@-œÏ¨ÑÑec}–k6ðe9ÕGjg³´¦3R]nÏÊé.aWƒMÁ*{Šfå–Š]H û›^µñB…·°ê p€áp¤è$ФqYÍ,çh†Ì¿×E^+„J³Š‘}'ÒJFàt?Õõ-P?qÖ/ã'Îúå#Z?yÞ¯á'ÏûµÅï߯ÇÑJ ´E‹ ê²ÚD©s@g %g¨ Á Äô#Aù}ˆ©¨6PMW ºè–QØ÷(Ïh°7µ3X€Ì¬£zz¸‚…*-†iˆÕ™™—AÊ(nøËø³oñ€×¾îõ¸êª§Õ3•E1ùëßNâ_ÊËäGðŒk®~\ÛüÚÃÇCë÷e- HøYˆÉ.ÐÅ}Lâ.ˆKZ²&Àà¢áUB’”ÀB¯](ÅF–­”o¹*¡|„À™ ã TR›'ÛJ÷N‡7¡ý+ÌKäóQ‰à7|Öw€üxy¾Ôì‘ ¯–hß­Ä®sVî4“%Þçp4Fæ°" 5YúÔ±U f‘ÔÌ:YäõgýrrÒ&Ï“˜”†ÜW20P­^ÚeoŠà–»Øÿ&þ¶ô²Hþƒ—l›Í5™|’Þ3-Kç¤cO¸j²M®jB̪òKnÁÜȸXÓ<šÜĶM™ ‡-­Æü@H©ÌB”•ÀÝú«øÔÝï=jâÿæ7¿¯~õ«ê™C•C…j8ž0Uyþ nĵ×= _½åk[›=¾µïó8kåÂéŸ9¥ˆ$BD]Ê(öè)€B@ŒHï;;†ƒ‚Ó|S)Ú¨J1ìè‡y H›†”'za#÷`·PM›Í¦W˜SÅ÷ÚK†]?h±¯ôŠE.Jò×W3áÜÓƒÚš‘.yQç• zæhžün„ÃÓùþÜ€1Ù,x/ùn‘:ÀƬ§A§Œ6`¤X{ÒÏÝZ²sX|ýíÉAó;]t»iÓ*¨‘„Ì5é†Ñ•A…Uù°ªba\–ƒÚöu]q+H³_Ü6ô†Ë{Q¿(ã)!Í-ÐlÈeçêy·µaǨ4.ƒU¼ ܾ÷KÇDü/ºèb¼îu¯Å…žwTÏ=ÑÊãé TÊýk·auö¨ƒY„Íó9€®Ïî ±OöÉÁèEÐ…aטñ‚'\…êJôPÌ ¶&é•mK¶Æ*¯°Ïl%k,0@Y÷äöžÓGê.D¦òÕ†|]†èØvšŒùIï=7qJB¡Åö‚yÆnüúïg2ÈJýÓH6#±›A¼¾ Î sÁM©#Âú”ÊÇÕÜ;îgÔükgûâUå7ªLkUÈx鱪Jh}\ ç 3˜ŸòòU*cgí”Â:õ²0/Ϫµ®9‚]F°ÊZ±sçÖ6«ª¸hýWZTso&pÿt/þà«¿tÔÄ^ò’Àë^÷š£~î‰V®¹æj\~ùå{»¸ï·„ˆ÷ÑqoÜB»Dü³A¸ÉC¨ï³A8»“"“E(âzOx©Y €éˆÛ£â–ª íÊ" Á²Š¿ì%ã µ¬¦8v±‰ÒïVà¬ÂFç½ù”Õšž„:œÈÍYq4)¤_5û¥ñô¾XòtSyÃÐ>¢L ælÉ@(„ÏEcrÒ­Uu<ç’àgfîœ>@n¡ŠÈ°!nfÅÀª™º€ª”ŸPتQ8•SqRJ®Py±'êBŠi×QUU5 a¨NãÜïó³,¾‹asWÄò;¹[TYÅÿ‡–™(’ û&{ñß¿úKxx}޶\zé¥xã쨟{"–øïÇyçmŽôGwý’zùôY ˆÉû§ë;eœµÖ’%Ûr$£²¥ )ÁLYÇ*—-¢øy器a6޽ ´2>i°ßTÀòR¢@=F:·tÝIöìžp9yíKSv “~ì~ô9Ç(TÃ}S›ÍÈ’ÒΑ¢õØ&<%…иt€U:U6k±½n¤ë̉ G³ð‰ý˜8¯!0Žkn¶pÑxb%lÄ$‚p¼…{³2PùNåvGâ“.Ô]°Óèý†ËØJ·™U“°,£ä®ûæ™n}”$uÔ†/S̘ K\IûN%w‰|àöÿ†Ûú[KyéKoÂÍ7ÿÈ1=ûD,Ï|ææœ~€’:²œ.@2ÏÑÇ9b¯á"$†Ä ê3AËÅŒs“~/¥ö[±þÿdÁgm‘Ë‹^ôý¸á†çljþ讇Ø÷ˆè3üclÙœ ¡÷É8Œ9ÃA,. Œd å\þEÕÆAŽFf½QMh øãH9º(y‹ ÙP¢o1! œˆ%Û^…B°ëÙеRþ’ùÅmOY;kŒæÁ#V%xøÜÞa ÚRai$¤VÛÑI•~š))–}?骶%G1óCljmÀ@$2&¢$œ¾ôÖòÙZ’_Tè®è•<©BÏþ·Ž†ª ǃÎ$eÇØd(:]nÁ zJ¬´ÔKöÙ2¢J22ú«ÎgùA6 ë"4ü¯‚‡wF~gqûï`ïÚwp¬å²ËŸ„íÛO>ü“¡\ý³7» x÷]ÿ61N c:î4>Pfó~޾Ÿc.a$æ9¿@4 è‹6xa‚ŒëhÙ‹ñÈ{ĉ#VäwkŸ=Œa…G Á`6~†‹„ôeA¬MÀf‹d<4m¹M ×búg³æ½´å(‚#±%N’ŒJ}÷‰ILyTŽÃYA8r[î{ù„ö©iºët=7[Ž_ØnÕ’¿;"h`;ðúç ô0óeê¶ÓJJüËZp1sô0·S¿ä}ó¢«S3–¡È!/V•u e×Óf5—¸>ù³¢S‰±2ðŸ6ýÎw¹‹=Wæ¥â£ÌÀ‡ïüp×£·àxÊ\p\Ï?‘ËÓŸö´Íîà]wþô} Ñ÷½h1ö¢häÐN TÑh¢Òºí©T·þeáÁÚË”>- 1+!mP¹³Põ{!âölXF/Û=ACšP¼!-œl‹#¢…ùt-.Š|J†V)² .›Ž™ª ]ê‘E&*«TŽš¬*ý‘ãr ¸s¼z–;áÔÏŒ«‰(ñ|*¹ºYET…*,Q_“§L¤xÝ“.°BN- Sê÷êf]_–_„~æ—]Kó,ÍéŸÍ3奬šçÕàš¥YFêVѦʢ¶‚ÿ.r‹x±Da×X½†ï|øËø«;ÿoÙºuËq×ñD-—\zÉfwAÊ»îü×ÿÏž?±G×ÏsÀ¸>kst½2 æ^"¦õÈâ<À1I²ÑyçåRo¸"]¡³ìQx`àÞL+JzÖz¿ <ïôžòCIjU§P>‡éH ¾ ‹XÁÌ‹dH@=ÙµNÃÉŸ QͦtA5õZ´ÍZ_ýY¦ÀÒbNØX$hX5ÈE@ƒ(† SyÛ†yTR¬áF25áAå)QÁLV ‹“<›æ%Ê‹X4‡™h`‡ú@[(Î<,ïŠJÍÔ8Æ­€”^$ƒW‚t ¤{?}b,2„Ý&Úá\7žW âƒwü.æqŠã-gžyÖq×ñD-gœq&.¿üI›Ý )½Ä Ê'ƒ³GÐ<Î%VP‚’FÐe#rä”k ä`ôÓº/.™‘c–¾Y?£’÷V‘”­b`VÝ6Y—¯¡gvCeÜ4•¤ë‰œ”±¦18tTKQéšCJ?©ê ÙÔ3ó'ݳ®O>¤…Äwœ]eíoeR°J}è7˜.)$+õ³¯c0¿§ñØøþ‹va¸+ÑÕ8ÛŠ‡)lâ‹=.^T?a~– ±+«ÈšV½Hâpüo¹’J ¤šR"ÿÕÜ”Åe™_™G®+þ˜EìÞÙnnæÙ}ÓzXƒVM\kø›ûÞ‹»=þX5W_}5vîÜyÜõ|·—ƒW CYïØ±—_~òht׿͇Á:ôEúçDô ñïb‡yß%Q6Idb¯a§E•g€¢IppÌDÍ@!VG(ïQé)ÉÖ’]SAÆ6V!¥‹è°„Å„¡w&ìMÞœ²à@›ÿTyLZôCDoŸÄ&ß²c•>BëªÑwùͽÙlo<”ƪ„ºMó~ 7³TJ΄NŽj°ïˆ­O;Z8TÁí:çÞ<ê‘UñÄ Ž•ˆë0;˜{+&8ƒdð1•hÖ³¬:²ªofÉ¢+¸Ÿ‡dÊ‹|+³8Ä>Ï­ë:WÄ\6OŽa¤–9ßf™oé[Ÿº÷= µ¢£-;wžŽñ/~þ¸ëùn(«««Ø·o?\ÅÁƒ±ß¶m+€a(ëg>óÜxã 6»ë®¼û®‹®þÊà.ö‰!ô‰1DÉ)<—$2S:IÎdàˆ¼Uò}¨(˜â U³Ýž$Ý9åü ‚­)ÌiõóZ€—:Í£š“ WCVPƒbì…A‘ 2 6½V\8{¡’J½PÚ!_hpUÂ]º!šC"R‹Î¹A[­¡h‚Þ:•äa•ÁÎçºÂ0ÇŠýAŒAóÂᇶóÊ[½ºVps7jY„0ø¾zÌCXFGªSlÎûÏÕaà.¬sˆm/¸é®Îä/Ú¯\!˜¨p!À±`FIPì'U˜béx£‘í [0Ñýfn*‘ýLu%Açªß+ÅÃÃ¥Y5Ðß;P‡N¿W½4iJ5[•ÅíæÞ UU`0Þ€aax¼QF«mYìÒ…ƒµŒ£Ê…êëaßH¥Ü8$ƒ6¨/oˆOÝû'80Ý‹Q.½ô’'œÿÿYg%ƒö¡4c)Ï}Þsð ÿŸÿ/úØì!ºò­ýŸGÏÅ(ûÞËðPLñbì² AA¤Kß@),‰ýžbKÊÊc\iÙì2dIanžAŠ.Q89ïJó¶Ÿ2AN¿Âý=]«4™®mZt»Ì †—sXqÄI€r@ŒjtêØ½¹,p.¢k y™b“mLO± ¦£heò‰åVÝ3^$^™ Á¤Óð­5Kà'Ö ¢VkËÏÕ<ˆ™„÷H ¥9TUVñÜ2¢”ß,ª†u‡³òDQKÀWw'ûGy¯ƒ]òÄ(u¢™Ùlv̹ŠËsÏþøÿÉ?ÁW\±ÙÓò¥½®ջrÞ€N´€>ÛÊA±tX¬CßÇd?(ã(fé3ýugÜ>°nçb=ScÊÒØ=ÆÍ[·vU‡q¤`mÙÃ*å7Û·B2¼¡V·"¹6mኬ°!þöºìgøêÜØ°8ž7Yz Ë\ô „›0™G›ÏÆ2µÂ„S08[Ü©4?ú5ZD§|14Êʾ\ß_©/uÍ5U“'=¨¤»FÈ?kNÏɺÐP³ÒmÉÝ®ôÑ‚êb©O຦d]øÙ‘,>¸ÖHÌ :T©ÈNÇZ˜@1˜Ù5Ú»wßm¸oÿm8Q¥mGعóŒVßÉ\Æã±`þGË ¬­à5¯y~ò'ß¾ÙÃqåÖG>. bºÂú9æÅSÜ ž;ôèü“£Œ"Ûb>(V"™Í§øß6DÙ …ÆÅ»ktúpå‘‹BÒ0´Â#¡^?B"Øhÿ¥F%Ѧz!ïҫJc‘^’gìö(™î7 œ¬öCòdœ¹‚ªØã*u¾/¦š‚N˜Åæ ,Ö1µê ÁÏ”k¦ê  2ç_aÁËj¨Ÿ${†üuáRj¢¾(ÛgYŒö1Öɵ|àZaJ‹|ô=c#ÅEenlÚu¹ËwfÃñègQ§)´àRîÄ­{þ]<¶x?‹Êyç‡ÿóÿüÿ°ú¾[ŠeððÃÕóÿò_þOøÉ·ŸÇb¶µ²3®hDÜÈKWª)«{¸ú^¾9É‹³‰ÌçßÐÿÑÂnû¡nüjš(Ý7Æ=6´Ì%‡*µ³¡y5–ÏjŽ(B®TKª0 ˆÎ¤ÓÌ UL!»ßT j±›ÇÀ‚š¸:¹šë/™óØ…_09U®ÈÇvJ2‘ôzŒNŠL«éo~ñ~½¥)ÃNbY„™â^‚«t欄P$rªUŸlÛ–Ó“¬«Ò˜¹q›Á2röüƒ€I7Á—ü(ND¹è¢‹pÙe—â/xþ ©ï»½œqÆN8*­à§æ§qãó67P\)Œˆ;|)'…éþ‰}‡¾ëÄ5Tà ÑGÎ'…!q‚)½¤u±,Ç…ŒX pi,%|†ºœÒ‡_ÛÅèêÆRà£ò¥Úb5"PòÀ^¶2ÚªÓn¡FN~“/¤Ÿ-1v¤×¨¬4EÚ3B0ÃÓ TŸÈ}3ç#ò¥P ^ø”Ù²X¹N†d‹¹iÓ+ÇpÚŠÊ„)uLOÄÖ17œ¼l½_Ì$´ë’ÆÃ:…­Håd«Ó»DÃ~* }9 ëTºÅÂVJ1¯•X˜†fH4Póæ$^5çkó}xt²'¢Üwß}¸òÊ«ð‹¿ø¿œúž(åHÝBàÆŸ‡7¿å'6»ËR™îÂÞÉýÚ‰9‹XŸí½Úò_–<= a"0rhˆ,ÎU„§¦¡¬`+à8raìƒ%‡‡Ù·J*É×NF˜d8Ê k^s0ß…ø%îR³ëû^6¨ÿlچƴ+{]ÏÙ(ÂÝýÊR`µ¹ª4“´l¿IŽO•4å¬V¦BòDØ«T¦1¡ÙË'8botQuJùoÿì‘®áSåq*W>ýéxÉK^‚mÛžX. 'ºìÛ·`L>xð ÌÛ?ü‡ÿøÀð¾÷½³»Šˆ_ÛûIœ=º L9Ô9AA=Š-`ž¿÷’W y¥¤òlþSBÄÇÙÃSåD– <” u)¯p1VoÌ<Œ‘X "I{V“>/”ŸO•“¤<ÿ/ÀÏÿü?Ýìnœô¥&þLóÍo~ófwSÊþnO‚p(  Q¢!´h¨I×Ð" Aÿ¤$ƒªÇÛrj7Ÿ|¥UÆ\¨üÀ“!…G}¯à0ˆ,ÈdŸpž 3 $_Xo-÷¹Bàï_öŸSŽÏ@ÊPŒÖQŒ4b¬F&õј‡F d=ŠÏpQ…¼ÁŠì.“h äÖ®‘o“Jÿm³ÞcŒñšÎÀÀ*¡¨E%´c6}3c“QåwüÇ·ý*>÷À_÷Âyö³Ÿ…—¼ä%'p)~o—ÿñûÞõnüÉŸüÉfw3^Ö學xÛU ¡ACm3BZ4a„Q3BÓŒ0nÆhšFa”˜C¡¥ !1ÊΆyFNáŠë°æ†Aôe8ÅFÔu6Ä,:<ÞÂÒ‚æ(fˤ‚§ÄÅac[`ûÌIçZð…é«i›lß|Ÿëq°»‘Œ=Ú{¯ÙµNÊ U:>;F;ö }¤bxX`–t‘ìÄY­0‘wéÊŸ¬‘cЀ¿Pçæ)W‹;€ W,óuMäýwvSÕξywÝЄw-©zP¹±rÄÜ226í^ˆ=±·Àne23™† úø$~LÄÀ¤[Å·O@à7¸á†ð¦7ýØ ©ë{¹”àqðö·¿m³»#å–G?š`ާÃ^ësdÐ.:št’=úr0Œc6Ãi¨ˆÚ()×ÙœÈ5E3e¡ÒÂôöt¾3ÆV¨´;P)Ä߈4§j´.ö_¬[k¡-rž!š»Õµã®Ðg1WCŸŒ‰t[`jÓ»Ì$!‘´ªÒKw-Ñ®à¬Ô6æ4×DhÁ‰8x’êNßÖ¿Ú—ã’³#Já~víØÿ ²žªŠj_ ¹û­›-|m†*³ë‡x •wáRgúŠÊ¡UxjwÔéÈ@a‹:e¸œ1êºð'â91 6ÇÎöá¡õûq¼åŠ'? ¯xÅ+Ž»žSEƒÇÀ«^õJÜ|óÉ&b×qßêm`°f“ä0šT¾Gq-¸:)Ì̈02§ b –"¼)À\»a ŒÇEêu2·7Ú«6p¡7z›…´Ëö¡d|]Nƒ³i°ß¹Îcݹ¬ËíÒ^Ú³Š‚ ç`H‹uú?…LÕäÏÑââ}dqýô|ìDê$'Îâùµ£õeblÜì¡à ûDy‘’t–EØÓ¤C €-1æê)Ñ.ì¼`ào6/E:åß7 8¦‘üM§„þIeùÊ©¢úÎÍ ±KŠ}#Žý˜zœ|R8MÙlúÞ¬ÑãD”çß ñŠWœ„ê‰VÞø†“'XÜ­û>Žy?M‚›dòù_4ÞA%é|9 PBD€“S(‡"<¥¡ ÊZBjËIéÐåÌ<,¯…DÊòÕl²…Hƒ×È-ì‹Jø,¶ëeÅŒ~‹¾M]«Ùš’Ò¶í·Km»‰)Lcø%w/Ç&RéÛùë[™ šÔ!å¯~÷Å- pŒ:)AA>\Þ\r]…åe5ñ”×`!?VÌÆ=ˆÁa¼h‚Œy‘‰Ëªõ2SEqÈê y¾.gA7=Oáµ,­¿Ö8™<ˆã-O}êSñº×½ö¸ë9U|Y]MPÐ[ßöV¼â$Ñ&ýA|gí›*ùsr eó9öæ7NÞ@1–ÜÁ9_@,{;‚ÙÛéÒ§¼¾E˜*nÏIXÔSÁVrÎ…U:g/?"Wn„®J/®…26ÌÀW€iÛ<.ÆEÏi¤å'RØÆõ%v¿tñ`FKœ¥Ú¡‰=uЈÓ(’švk(´5¤ Z|¤Ø2! ÕÿàúPŽn[âd‘ ‡y_yŸY§~“û/¢é£´kºa»HqI»J D¼žxåÂE›1+¢âàdç´^A•K”0.²r½F(d²õ›Ôrµ-A†Å:Ùù‡È¿û•ÿÇ[^óêWáU¯zåq×sªh™ÍfN–úþïáfwIʽ«·¢çI0ÊÄ¿„ŸÎ(áï%,ÂF§½Ô›íÌŠ‘UPN {‚&ûÕˆàb'«á Ùé×»¼ f w¯ýÃ’~£½(H7™6KçY…¹BC ž/Ä™qbN•æ_WÐ`Grü)hˆ:C@ÖˆRż׮T]2Ý øŽp}Ø¡ÔW§Æ±¶=7ZÊba˜¡*Ù…á5Ë©þ]W&äò»Gm›BŽIïu|*eÎ|Hí‚á3úfd+ã´ý¶±Ê†ëV$¼cOÖ¬ŸàxËÕW_7¼ñïw=§Š/ãñØÙžÿ‚àÊ+¯ÚìnöÍ÷`Ö¯ F^Â?ƒoJ)©ZgC1—ÑE³Ï0RâC¸W¶4Á”³`˜Ó(Ò¬E2I^@KFܾ+4x€…ÃÊ~²¡Š]Âyô@þol¢¹—G‹ŠÀUcÎj)ŒÒz©ð›é¶¡On :ZÍ܇ ª‘7pÔŒÓÙXíÌ^E«í5wÒ @ê¤z‚Ë ùMWY †Ê…yƒT‘fmXü]"US ›û…à»%®:â`ÃPµ¦êì^ĶÅHlæjM?…Ôï£<•A$~²Vg¥šl_Žjc‡ ¡¹œ;—jýhå}“yiJ¬ÿ‡¤ëì¥sóÒüØÉ- Sä‚«úy*¼ˆ†^6Y¬¹Nlš+’ö=g’}9Õ'òK÷m¼pÕ–ŠÊÉ2çNM6Êë§ï/ާ¼ô¥/Å7>÷¸ê8U޾<å)'OưÖ¿%Rj!ÒB¬c2þƘ“ĠˇÁ¢„ˆN® &\4ÀÑ„z0„¬0Žä()LHoNd„å¯>¨‚¦|spˆmÐvUõ‹c‡á&†i #%«vC@Ë~Õ¶O ,Iwø¶\b²‚kÕs;TÄR9ßÿr5aW$ËK®Ò%YÅÎêCT¼!p¦·±†SK|ë¶á~³§ù¬ÔL÷ã#ð“=8ŸÞ¾¶%‹MÃZ±]nø,•.ŽÍ­óÃæyûºk¦¥y”yÉXËx‹mÀdr³¶áÞý·áÞýßÀ±–çÜp=^üâóó§Ê±—k®¹z³» å¾µ¯cÚOžãÊ=z¤Ð%\DqícÌä>Vºr‰ø›Š5VʩಂP·!Y °ÌVà[¤ú›ýi„.¯>x‡To¶í›ê2Qi.y‹0%©ë¬ÀnruÑg[¯˜S¡@j¥a |9z^l3G…oû9´2°¥N‹9+;æâ†è^¤¸(UFXojVÅNµ€ŠK:Âl¹I•û·Ò¨ M•í[¬z±€AK0(Sé?7¾£Ìl†ÅtúüiÈa?YáÓ¸ÿöàxʵ×]‡½èäJ`þ½R®½öZ\rÉ%›Ý À,N°o¾ŒdÕ`ÏìÏÈÙ”ÜÈi"#Žù9k÷Ê…ã€%˜5n¨Ž%Î5|Sˆ-WûÑ~ÊñÄD¶Ä Úµ’çWx@¡—C¤b5û²(F—ËÞ5ˆHä«¶†rÅ{W Ê=ƒ Il&O°„[ÖZ€RN2š‚H¡µHkt!±¨;eAójú$lé|ݯ@éDd)B¥Íg`™yyF}«M%ï£`6\©¡v‚í æAU, n§¬ˆJ3FˆÁ¢)óâîËm>´þ|ñÁ¿Ä±–Ë/¿/zÑ‹ùùSåøÊ _ø}8묳6»Rî:ðEpŒJ\-ñ/’>'{÷Ù8£hÉ` pŒàPAèBÞl·‰Ò$e f×’µ ëéVzÁ*† +m²b®VÒöŠT¥>оHß”À³!8Â)PX¥‰Ô­;B’éYxk錙²Â1#sSH͌ԉO묓kÛTmÈLJ¾XóOf54J°§š»µIþêD)or3¿U?ÉpM«ÎøS¥z6ÕÒ½}S†`˜QIŸ ¿âKÎ+@U@ûòt%Ô‚ m‘ûâƒÆñ”k¯½öTÄÏM.W]ur€Õ~º8̓&|)™Ã8»€r‰Ô›ð±7X…•T Ñì7+âéþ„»*ø¶ã‚ü-b•s‹4™ÉœÆÐ èÒá–ÞÔ¢Ÿj°Ò`ü¶;‹"!”ÕPkX@æ;ê~$†¹òÊ3TѬrMèN™ …ƒ¶sãC².T©b†ÂQ¤ZR-¸Þ0¢SeÝW¡ׇĺ–Ç•6¦¾cB,uyIݼ¢õ””q–†²áN#²n¤Õëu­Tö6K@)-‚î©®ˆT º@ij<“·—»6¯ác÷þ!޵<ùÉOÂM7½ä˜Ÿ?UNLyÆ3ž±Ù]²ÞÄŒ'€Y{åàçðÐ…!”È Ñe3à Êã ô˱¬w6Ž),ØºÚæ¼ 't¤´nÃ[¼Ý#-UF烊{ÂTJ\#iŽ<ë/r¡µ)Ú²HÒ´¨‹OYž( ¸ØŒÓJ“d 6G/ó3))<ÙΚîÉTCÑ$bîh[>†«óedt÷¢Tu”a×d;! hª™û<»€´.2‹D±vÏQtž LÃÕ‹[ðRíº !Aµ†=È[0iU‹’µ~Ϊ‚sM•xKªžÙ~ÝöÈßâxÊ“žôd|ÿ÷ÿqÕqªyÊSž¼Ù]’ÒBwN€…øÛ%W@ÌÉⳇÇ|. ]Çš‘ãf‘Hö‚‰:3 j%ŽNåõ"_Œ ‹s8µô«Ôè~´Ò+Ëò4Ãj0ER'ƒÏ¡UbïblPŠxg%Ùðžf££±¥¶ õ#áÆ³J¦Ka˜¤”«æ9­ÐÜÒᆠ£PÝtn4‡L‘U°aþç„Qj1ŸªFÈ1!ûžµ>9ùg뫤ywYÕrqZù÷–é%ól= jŒ¶V«%ÿ.ìÀJ¢x§·e©ìÝ·ý{O¹îºëNšpßËå‚ .Øì.¸Òřۧê ĈèÑçä1åŸæH6ó(€•í:÷ÆQˆàÈ5M²^:LƒZ»¤i_÷£A3³öu”[S†ÑN˜L}ÆC©Ü›µ{æ„¢ÔµÑúel’­C?›¼Tûª^CX˜93h‡…Tõùí«w(unn§Œå%lðtÅc½ºå,ü5Aî¬t_”KÈj!ÛIø¨Z/ŒÐ@F‹˜– Šõ¥ØÚÄ;Á¾`ÇE¡«ôÝ2Û4Ûß«ZEÓîMøÜïÃñ”«®º /}éMÇUÇ©rbÊsžs.¹äÒÍÈsÈA0+qŠû“àŸ ™Ã_¦à3+©±µCà• úŸPeU–óJ†Ãþ5—Öuïç/âð7ªxi¼ôœ·‡qrýÒ¾éÿ†Î%µ*ýw§Œóœð´F ¾(Û ·|ˆªb8–ã’Ūì°0©@Õ97Wö`E¥b9nÁŒ»³™èÂòš"ñ‹Âc˜• ›`µ Ê¿/6HYB¯v…Cîo”§Ì2bé‘<â!5;}Z¥ÃùKÏÌ–ßýNO¹æškð²—½ô¸ê8UN\9ï¼ó6» Rœ°&pJýQÂ<ä“ÀИ@EI?"±¨Ò¨´#D{6RµàáŽOè…Z)Ö¦Yµ’/ÙX:"ðYdÞ –Žãdh—Ø¥o2&=ÓžÀà@͈j­ÁOÌÙ^õñbIP—{CCj¤H’1Šh¹&²¥ŒÂ¾uGwKƒfr,ƒPfàû!DÛtv çÝHú6ïSš3LÌN—ÑlebqR·‰ êùŠã3:£Å°“ò´Ék28*?Ôª¹¯B”@´4%TÆÀøâƒƤ×<³ÇRž÷¼ç×ó§Ê‰-—^zrœ€†F ‘#5gÐ>c°D Ucq±dƒ°HíQH|Zǵ>ñìúºñ&RBõ“Fw–àˆ,@,·é›L×áeãR ·ÿKŸ 4mˆ»kÃ7o/¤ª™‡í$}¥Ãb1Ð(Ô6šJð÷CcáWÅ’\!!—©Ü@-ÁJ†ÙJá_W¥ Ça'ÊþîØHA~ó Âp ¡Ò:Wãrpaí¨Sø›œxÖypߊ¶ œ¯°|Òn¥£¢Úšè üÍwþÇS®½öZ<ã×W§Ê‰-;wž±Ù]²Öï7»YÀ€zÌ0 ¡¤ˆ ÐPö "MÙ eCÃ.ΗÊãbé‡q,¡•ýç¨0K=E—±Ô²Ÿ­– ÇŸªœÀÒC«€øú }ÑóTÎrPŒPìR m-vöcµ’kq‘-W‚ªUö1g&ÉêBY³¡ê›µ¸+#`y r‹q¦àXEŠÅ°)3i6DB-’×ßu1ÉýLU ÿŒ¾a\¶E£Ð¸“U3¿ã +ó^¼Èôý`?_Dfšþ0€û|»×îÆñ”+®x nºéÅÇUÇ©rbËŽ;6» RÖûºôœ`Rû(ž@±‰¹G†”¦ä¼`"ðØb™iH2ª<æ=ävïˆ/úm팋| ^'Ž.Æ¢7x–ݳp÷h'J¿lò›q‰cjÕë™d€çMÈÒŽCaœdê¥ù Ò¾Ã7,ÆcÐpÁ®Y'dA±á\Àï^áüc¬ÒµÃ×/èù¼z¢ª'¡’»rJpc$’)¨êaï­ Ÿ­„_«¯eLŒZRpz¡«¡¼,£('d ÖFúú܃Çöžö´§w§Ê‰-Û¶®lv¤Lû5tq@éˆsE²”pÓy1ƒ“‹@¦š€Ý*=›œáYHвæ¿Û̆®‡ ÈY„ òæ¤u¥®0b$Í£ÛݦJ“„@º d©Ð½§t¶®h$v‡Û8e¥Ÿ0t‹­#”HVüðÁ9[zñg-‡¢\!¤âÒÚrrÁÜXs)PG9peÈ~!¨"˜Ó°7ÑÅ@B–7©ð.GkmXüuµþ<^ C"kʘ´q9\‚ªcx—&$„ˆa¥²NÈ<'}´õ™°´†!¹@WyÿO¿õ«>–rÙe—w§Ê‰-;¶oßì.HIÞ½ „/d3Pvm)äeQg†}3æE™~™Ïæ¢J2‹BXH ”rÄÿñ™7âD”§<å)§B?Ÿ„eËÖ-›Ý)ß^ýŠz9ÂÅC-€ôZÂÿ•)”EOœb± ½HòfvôGoô};l¿òÝäˆCÙƒ5#`O°*¯=Ó)o;È_4`5IdA ô²“Šœ*!KôÒ¨%[Ê€‡‘é©„Ræ«hl_\™GQ÷ÌüVã½pÛ‰Ix þ99ËÒÒÒfw¡*xÊe}f!Ž#(rÊË= Ã(D9ùÌ—ø@ErârE _„ë]º$[­ò âªhÛ é¹sm/ŒÎTËì\À ’ÆÂ»ÎnPæ¥jKù FêàáŒ?0§ ª¨m¶›†âzÉðFYeJÆ[Æu¢¼2ÑŘlf°|1ìNÔ830íU–ª¡4|ïÂaį¢6YJÉÚÏX¬.eäwǾÉ/€„ML—°Vê(ÝQã¹ ¸gæY¼‡lÆ2k×ÖQ6ÑŸÝñŸpÿÁãKø^ʹçž{Bê9UNlO.àw³úÖ'I?-x1ýÆb朸kbÁ5ÈKò0/ª‡óÏ“= °ÁÙUÅçü°KÎBT§ŒŠÝ³v?ë!°z6|…àZÉ®2dNÛZAÆž`ë6oÀûÁ†¤†`•Y§FæAm™¡pÝÄj5ÌÏŽæm!ÔüÁûÇZw+ÿbË?ªeÄ¥ a(·§¶¦Ïd¶{mfêHš¹ªÛª£\–GŠâ‚Ò™~$ƒ¯!àå67µ•a=3ˬ„“—KìŸ;0}_Ús|!ŸK¹üò˱ý$26ž*Zˆèø+y Š…l‹‹uñÒÃo> –Q±¤{eÍ«g €jƒš•ÿy@@1õ2¿Éslè‚A´¢üÇ8…äëõ+`ë³î}áAJóα ëx±:¹Öf«)ÄBáX…o™ÁCÈÒ—Ã߆Õ T&§fÁ¸arÕãFe`å‰gSÕ)“Œa?ÿ7‹&sw§%R$•Z=«Ú5)ÊTüŽ•MGs©òÏ«;C%«ÈœeE_—¸ŒröVò·Îâ:Þý­_‰*£Ñ§vÚ «ïT9q¥m›Íî  !’BìY„Á´óçÂ"#޲Ñ$ðD@öžnSµ¸Ï²¡= ’[ Q¶=犘ý弑ÊSE8$sþÀÄ¢AíóEhÔ›+Q~†‡Â©±c,ËTF5±£Áåc+΃+ƒ” •™Àü¤S• ¯;: Càr4à $õÙ`F(F’jþË}ÿè–é©r¤eëÖ-عsçfwãTYP–——qÑEã¾ûîÝ쮾sà[ËL`H¿zÌs¾àº8GÇ3ù×s‡žËïJîõ¡+T‰­ƒ§Ê‰d1ïâîIò¹âÁŒ $h£.±¯T^äµ8˜òÜ*}ÇØ²åäñ69U´„РiN.- ¶¯©ÐFæ÷l$%’Árnˆ{§ÊãWZ ™‹ZCÅݬ´^¸2y]CnŠ›¢Å¾äžüŒw*šƒa VÄO_ø3îYJZ ÙUÿÊgr¿—Y­%ßÌ8måQ2‹ÜôÕz 陳ll º’ór®Âô,Õ‡Õr²±òé±Ûù,Þý­wB–-[±mëÖZç©òÄ,œö³ÒÿC>€¨A €&´hÂmhÐ4cŒÂmÓ¢ c´a”oÑPB“sJÀÁ²ÕXíwâ<”5×$5ʳr õgk¯”[ \k¿sÏ™¿ѨëeõÐq¶@Á«É×%ýd5ä 2]ï¼íAllÚ­àŸü[Ì}r6ïòj)[àöUØþTÏè჌U9 Z¡‚}•e|þä-4DZ¼ šõ,BàYð1®´›bx±Cö®Ÿ ¦Õ†Y©>ß& hÞZp(… ”æV0ĘÍ:Š>ÎqÇ£_À‰.ãÑã¥ñ ¯÷T9þBDhÛv³»áKµßë–ÙûÎ&ö¹œ½†Ê%’{ÅkGÚ²Ù½bDUû¿ºÈN.u‡ýg®¬«l‰×xûe…CÚÆptÂZ«+c3×Yï ãê […;ÈDþéûð¾I É{#°¤¬ Æ]ÊóUo—DÅ!†s IØà­8 ÷Àâò[fw¯º®Ú=¬^ \WNÞ#Éæ-Ãð©u\¯ÕµS+§Ü7½É¸9ãLÅX+&&¯`Œ9Àr» 'ºœ¾sç© `'i! !E'´SéÏÐ(é¥î(ûÎ:CÄ "­ôHQž—OE{6Nîð{–Éú8.èIž@KZå“lGñV7$XÚ¡¶.‚´yÝæ•ÑÖ^·‘… }!ª&ÕëÚö´VèKìHQãò^jð«ÊtÐwÀOŸ¸k ¤¡–q;õC\JorèÊø»Z&âãäÁM©SÙ ŒT¬Ò»a\ÕAË($­oñÏ•N¨ž#1‹œ8P<óìe“Îh¼Cõs7…¨‘»­U˜,}ìðé]ïÁ‰._|ñ ¯óT91%ÑIÆx£Kf=—Ìwl4ß| PNfõèÑø?Eø2š°JMF²GÊ]ª“ÍÇNN%K)ÌÞ†üžJ”Ï^ fCO”žYgOò9ȳ¨íçdl:ÅES!­Ï1žÒ®¡£âBËUšK3.f!}JÖI„ó w Q»KÕÓ”§T:m.ŽSëò ®Å{ìt=ñŸ¯å8¹+^±*’ nŽÐs¸£¤‚ÓÜznÀciÊÓK+±ÍÍØ¹h&Ή¥þ*ˆ÷“ÓíJ׫8U¾·J×uˆ±ßìnH98¸ºRöW%}2Ч”ÉBâT˜c¿KŠÖÇBkX¾ØPÈ^põû|p’¾›vy€†_Ð^ÀÆN³:ÉÀ/öD1÷S9ñ_BÄ“6Í¿7Óê¦Ø\ôCQ‚Ç Êþxpž„!IáÍ›°MtJ63©ž» ô@3ÙY·ò¯ eÀ¶Å¬}ˆjäbäVÙ7Q É2x¹×Ò7D« ¹Dh'D߆]Z…QXbMæƒ]Àr4Þ¾–ô`ÌÑyß/»¨Y9öÍ©ò½U&“ÉIň8SRù€á–=uAÉ ×Ä\öW¹^°Ú`kpmÚk –Ôÿר>å/UÐ6I»rwvzIä0§nçJh«Çeig±–Y ÁϦ'–‘(ŠUòO×c%¥;Ê=<æ­¯úÙBZ¦–y3Íî[*iûì±ù:ÒhõÚÌÀ<ÎbAÇÂÙòBv‘ЭR¸`Øz³Yß0+Ze‡˜|Ì÷ÊXê´]µŽ@N‹ª‰íåYËá±(ËË'W¸SEËþýûpçwnv7¤<:{0ìR)"¬ lr€âùJp­DÌ DKx…ÈÁ­:9ïÙŠéþ4Òö€ü«.u±0ÁT$¬< mRo@7^ùI5 ‹phýE+²a¤½¹8‹Ù5‡CŽgfÂ]Øh E(2ƒ[ëCV¥ð†]ƒÀ;ë´¯ÅðŠªGvB+É^WÂÂâ-ö•ÉÔ¸eyͤ®Ì¬¿Ît´5ó(<þ•ØSw‚aº…`úQË#s]NF딙ͰÁ¤g9Yà œ*À£>ºÙ]p嬥 „§Þ{ ]kî" UFÞD~¢ @l$ziƺ€:B•õÑz•.™>ºo÷=ŒömÆ¥"/èDan.Œ÷SéÓB{µÑþmýŽè¢KÆ ×í §‹dŸQ©Äy‘açÛb™.ƒ±.‰–‘wP£ÖÙEÀ®"k—IåAÔÂn]Q˳–€êKòyulÏ çÙ\(®gƜ㔖lìî®a©kŽàb’®l!¾º£í’,n•ÒŸJߟ<éâ˾}û7» ®DÖ m®Ð¢KÁÐ&EG%Ìù;­Þ x6Ì„ì¹â¸¡ÏWÀû¤®¦•,ƾ{\K{R·Pã{ƒ"q×"¥CGS³SâÖ®=ë0B–&™a‘¡#¬ã±ÆëªV”¸M®"}€-Î’_Vñút"wÇÁ-5AÓ9¡@‡7éêJÆPyùJi%°„i.…hœ É*aøeaRÍ™EÕÜ Sn_U¿›yªUÐzâa¬òì——k_œD|l9Àd2}ì*?UŽ«<øàƒÇ_É *;Gçc¤¨”µ«Ë–Xã¬Ù'µFï-<=±Є¶DÏÀ¦Û#ÝÀ ù¬Ž#~ /pøà¢Ý¤Á ¾"•xKµpêþVäÄ*H"åVó¶Ðg?_XäºêDñô9,âÚ†g™——¯™F},ngN]D½Úæ8k~žÉ´IÖ‚n_0Ù+®¯ƒˆºGŽ€Zx†ˆÅ™ÓUµ*ªê³œu NÈÇ um“ŸCZôœ_îìD…ê}œÀòŒg<û÷Ÿ\Ræ©¢åÞ{OŽ@°ctFatˆ;Ô¯$ýåaÀD#\ªÄ Yà ¿Øý¦0JùfqýZÂÖJ­6‘›GuÁzÑpÝŠJÌú,´!‹rd´ÄÊε aMUza.ç“Z$®¡Š T\'3¿›ñC™©L53Z7ʸ’ŠPÃB°¢«æ«ò5ÊW ápv‡Ì¿Ë@mÕ {hÊu-ÿF…xÊwãFY"ê‘X˜S;GæZ©NrŽ2hpf@£~zvc ¿ÅÌAE¯Ñ™I]e¯=  =c`¼˜¼û˜Iy/Lm1+xá•#\u1aÇŽƒ_ývƒ/Þ>ÁFåòË/Çt:Å—¾ô\wÝ3qªœ\åî»ïÙì.H9cé¢J¾¥JÁfÁ‡K1ô# EÁYiK\ B³ÊþÓ䉦ê"0’îsJ- lŒÏ¤6rX¹Ç0ó»Ã<ª‹.Ùæ…·­:åDîÏÁ7ÕƒÐKè\z/µE+*ÀUK™–Ãg&÷¢™ B ó˜…&B¾-9Áäã r½øá²yaÒSí°¼-] ¶d©ãÙöÀLaë4÷¥9ÖDôvÉÚãØ¤Dœˆ”€¯cæ® ·ø"«Ý^ëÔ¥¡+Œ l á Ê<C'ÙeWb4üOÏ~'þíÞì–áÛ_4Â?¿ÅÓ.'ì<›pÆ–”r{µv?ÈøëÏ.ãwÿ’ñùo ¡žýû÷ãꫯÁpªœ\åŸø$xàÍ–ÉH+´ö!±;4¢ÖÊŽˆhœ„ï㼯bѨì†dÓsYÑa4…}Õhk0ðJê–n;Ê>´?j»é‚µEêãT%}¯Úÿì »ïˆ“Åaš–i¦âM‹¢¾ÆÆ¦OÉ^©Prº]ûÙº:«ù°*‘:(Y⮨`ˆ¨pL²AäÌ{3/GÔR‚X»rÉŒ(ÐoBPÛþ©i¬,ÉýrÖ  zTVfy±Ò´Ö/tÚ´kðÀì`W ¨XY4¤3ã‚ç±.Ih,Ý÷}WmÁ[^qãS —^qÆÙ-0ÎÏöÀJìØJ8ç,ÂS.íñÖàO?å ¾ùÈG°eË\sÍÕ8UN®ò…/|wÞyÇfwCÊiíY¬ÐŸÉ DIì€.n"›^• 4È"ƒ4;•… Ò d“uÿ¦üVÍý³g¸§NŽ´í*ŒrMaœ¢¡^b&òÂ\rŸ-‰/DX驦ÁÔì‹¢S2ƒÓ½o…ÈâÑ“ºk±ê‹AAä>N;C”éð!#L á$_‡PÊ„Èp V “š'Q1ÃZÌá‹"Õh¦DË (6² Íâ UÝÂ5P ì‹PÅÑ€8"”¾iÜŽUá#•4¨@KN PFc§C_œj!eJ¬&Eð/ŸõûXÚþu\÷ü_ÇUO^ÃÅç¶œ¾ ¬D gg‹kœ¶BxîÕ„;Gؾ•ð{êÜ»~ßûÞ"Âx<Æë^÷œ*'GùìßžøÀÇSJBxÀ[AG¹’%bFB|ÈÀ»E‚Kr¾ÅlÕnæ4iÏãÂùºß;Ú7Õ9f!¬V~CZV¤¹4Eæ·¢cÈ^.PŽ-k±ä†}g¡nfY©Q¥ìXBáP‰I…Is­xÿ¤:È$„±ïO&úb¸x¯HÐ(D*‡ät‘ùL]% ²Çèò_ÒΪÔlI¤™/¸ê®‘G˜P‡M©ß‹…jìï…áézÔ“ËÔ*ì¾hÿ›qì¿Ví4t…¶Å°øganù*¥E¼´²7>ïý¸úi=Î>{„•Ó#а‘7g––ž~ 㿾ðŽÍÝ-þ玕•eÄØãõ¯ÿQœ*}Y½ëЭï²$Üûö¯bÇü3›ÝÅCý[!§HÞV@•=R ³(“ ì¬u ¡$—ûÛK܆(–oñ”0ÍBˆS ¬8Š’ËÂ4ª¶¢ëf:jÄž³‘üÔvgû©Â¤ë—‘ ÙIû2¹‚2x¦hA0'™É±Z ´äÇäJ%¬«l,LÀKª$’´Jáš…«“!ïÖˆtÕàZáe6vElL¢ãXÓ‡À@(ýˆ^”^š•ù­‹©Íd椫 o© 2¨F%‹C´P³J+“FéšÌ#;¶?Š\+vì ÀöòB{ ½JÀòˆð´K~îµ@¿óAox×»Þ}ûöcÿþø©Ÿz;N•Ǧ¬ßÿQ<úõßü ÚfŠvÀ<QDÌîp[bƒŸ¾i7®½`ûÚiø?¼g³»½ é¦µ’q7íµÈ¡Æ'& ÄrWºäö¡ÅÖGñ0P‘>e›ØÈ¤†.YF‘:š>ÇÒòâ$5– ©_„`Ñ9ä1 Å·W~‹P´Ì¦ÖV Ì«ô¡œa ãåÂÕæú‘lzÕ{-(Ž>‹a´ôŽ atšœÞS ¢Ž0šÊIÕ>=?êÒƒ¡ø¼eÊ?®êKë²’Œ "Ï´YŒz‰¡‚Í¢·Ã"o0×Cª¶Œ‘ 0•Ó¼Òƒ§ï|¯~õ`ûi#`%í-0ožãшpÕå?ûZF eü·x¡}èCØ¿&“uüƒðs8UN|Yý毃÷ý5¶6C»•Ò{õà9#L®ÜJ¸ðüû» þßov¯‡e¸K,`šŠpBÙ­ÃjL’ôR³“ UXZ$å²ë_®ÏA-¤1©ùzäÙb-VÂgÔ7²^7T[¨ ÜвP®W´?âQ©„¿›ó܃BO¬§å¡³L>¨ÝÊO˜Ç7Š÷ L¤~–…‚:ÂÑÊÒsG„íRƒÜ¬ÌÆ@#ùçà—Ђ1U‚6ÁIùiÞfáÔ ô·@Jb·^Q‚Õy¸Kk$½%SN_Ÿ炲禗ü.;÷ ñ³ü` ,E`Z/ÜÅe4&\ý$Â?xMDÀÿõ3÷ûg>óYÖ×'øùŸÿ§‡¯ðT9âràëÿÝOcemk@;4nŽÁÀËÌã.`ÖW“Ç\ÞúÃc<ùÂî¸åùxðnÍ·•­ã!PðK0‡B„¼†Í^Ê•1qÊ*Æj•{ 4Ÿ‘·GŽáL%/ˆñÙ2”,´U›£BÉ"Æâˆë"æT$m׎}5æ܈„æ«ÑX¥z7¡Ê‚œšQôc Ö„ÙFSq;``ƒÙ1.VÚ·Hw‘r…ƒSMëJVIÀeìÎfIOé»S›†}ír>ÁŒ‰È4%×-†STC5>!eÁYß²oÞÀPÒúó[øÇ¼$"÷œ;'‘µ¯ /þ2Î;{7š6¡x „1@s`¶ 4}²hFÀ¥—~â‡öã?á™À§?ýÌf3¬­­âñ9|…§Ê•Ù¾obzð š­=0o€ ƒç°Ô‚Úìr=¨aľÅþ®Å»÷>îý|ö“ÜpEÀÅžvåßâ›_\ÅC»ÎÁ7¿v¹+-´È”¼% éƒüeFŽ ]×åÿÅHÛƒõ,ÊsŠ`CkO¨žgC }³ç𬆰no÷¥’y 8QÕnõ0(§´ç„Éác¶–) .¢?¾,’%³Ää÷#Î3ç ’Æo]…UG­ô¥ç>XXÄj ¬"¯]ϵ“—ap°Â-V‹¨Ï ÛïÄEs0 ¢y1Èç$¿±‰Ë£‘?uÜ캲ÀˆK$mª†P`¸{fª’ÌxæÕŸÁg? jˆ3 ),=3N×ì‘”­cÂÓ.!¼õæö®þê‹Þ&ð…/|Óéû÷íÇ¿éMxö³¯;òÊO•…¥ëºIƒÙ¨Çt•± h^žƒVüËëâì[ÇCû·x|Ïi\û´€K/"œu^ç~ð%·bõá»ðk¿ô<|õËä}]á¢ÓTðöŠîꈌA„!£‰—h¼¥ ¹E‰˜3„ɹ–îÔ_)ÛP°)•ìywÂi榦[ÕöwHÈ|‚@åNrÿ7aœ¦¡ô ÊÐ =3Ä¿¡6€Š-z™VÒY·pBƒÁT%¿±‘ÞO¦qáPвCß ÀÀ%dŒ¸¢upeh­§a"ÔMà*T÷Aê.í¦¡¨¶àÞ¨K©iúV˜IaAbá‡!ô¶é(ãMŠW]õ7¸úé_è% ÙÐzj·ë’¯'qú˰é6.à–±mGÀuOcüÔ3~´Á—îò®D_ûÚ­˜Íæxä‘Gðc?þãxÙËn©rì%$i-ô{!GJ‚ }#ñ Tý›Lrô’9OEÏ d¨è¶mËP4Eî³ÔÝ ?ýS$[/ÊY˜Èf0\#ïkÅÚÙÔU5Uèž#Êú£ò´ª ( Œò™L¤shõ” Æ£3V§c$ÏãS^ù¼Ï|F‹ ÎÎ<°e çÀúxî ¿‚Ïú,ìºÿ<ó„nš²ÇQ¾9T€aBëŠ@V${+WY[¤WoпNv$€àÝ(+x¤À'r­:Åë@žBD- S„86퉨ÃïzR `&c^`<&b †Ž‡kÕÚüûq&Ð^—x:ù]: VÁ”VÒŸ1¬ñ¹ÂòuRØ®ò5 q´Oe¢[Ø“êúda ’ÿ’tÝÙ%@LàÀ¢­X£“JÕ³¢±yñÖCÈ.² ‰Q¹dŠì j0Ù%—|gu?^ÿÊwaie´K@Xšõ$UåLLâúi#õnôˈú¢¶VÆŒ3Îjðƒ7îÛ5ÂoWgJyßûÞ½{÷âÎ;îÄÏýÜÏâ̳ÎÄ©rt¥‹+à80Ïk,@pD Î ]ºÈ˜®ó c>ü¬Ào|Ñ7=¯Á…NÛ ŒÁèW;LçÀÚŒ±e+ã‚‹ž]g!ömµò'Ù°II„8Šðe¥øáÚµ„Úhó0 U-MÅò…H–8’ž=d‚ªõô«Ú`Qþáž'£ÁÈÞgÏ~”¬›ö+X†ó$‘é3 õ¤iÉÌÃý:‹2yõt‘PÛê1-мkqqÛ©ÚSu{ #1¶ÌÓLu‹®(Ô•¬þõTÝÊ·7äAìD±qŸˆ‚ª±ºÀ=Ú5Ñ22Á/ã¾èâoࢋwƒx‚ØG7¦9Fc€½¼ø…ÃÖÓ:ŒÇ ŒÆÖåÌ‘1™`òæÓFˆÅêˆÂ@ˆ„m[œÏxÍ‹ZÜù`ÀG¾²XâüÌg>‹Ø…=íÁÛÞö“xö³¯Å©räe´²!‡ë¡EvBEß3ú˜Oó}ËóãhñÈ˳ž´Œ—ßðä‹Û—Ë Ðuž0N)K\sí-¸õ+—bºvšyš Ññd²äÁˆàDœÁ`Dc3vòÙ†>ˆÈÔ­dЪBA*øEai§Ðˆ’¨~ù”ÿ[eòÑ»½-Që–ùX„–jëØ²w“•ß ªáɘU\1Éòl™ßt? #xÔýb3ò(]$c„Uk¿¢jLTE6?1ÒÑñê@”}Üú’‰QâO¡¨XFMYÀíåi£^(ÜÆå  ¬Ër£ö[UWaõ€Ñ„ßÿÂ?Ág¬"Æ—Ü…sÎ9ˆæ]DdF߉®_C‡)BÜ „9ˆ€­ËSl[Y–—ZÚN_HÛ¼„„õp ¡ÍÊBá‡b ´‘°sGÀS/g¼õe„{÷ŒqÇ‹±ç{þëÿûöíÃ[ßúVÜtÓKpªYáì­ÑϽÖËæ™p4}‹~Þƒ9byD8cÛãÓ·×>¯Ç3Ÿì8£ÁxLè{ÖõŽæ„À@Ëw3”ƒ&C½ÍK’ŠÉc’ÃÇN†‰*¹Ô“UY!²¬žCP"/Ò¾“pa>+FcÉ`‘þm 2XâÜæáá$‘!GX,ÑÃޓ둤ó\?RA5Ú¥~\òy¸"n²ÐJ™ë“ÀÂu®7òÕKÙf® DU:˜ãöd˜ÂpœKaÔ"CÝãó¤’¶«á|¬~¢ÄXBRˆ=€Ä²ë5Õ €cù±Š$Ó`ÂYäÇ)t¸þYÆ Ïþ2.ºä N[yh#° i0"Âòú À3 ?€ÙlŽØw˜t0 Œ­ËËÀh=Iú±OÔ¼Eâ’Íhæª+=8ÿ‹9tä#ÓУØqNÀ³žñ£/hðïÞ}èÇÞñŽßÃîÝ»q÷Ý÷œ:9|„e}}‚¦b¯kª¬á† Ýœ1›u uNqœ¶.8«Åågwíyì2·ýÌŽðýÏ 8og¡Ÿ0º9'ŒY&Tc&ÄŽg;cˆ-/IÎA´p¨ñ“!Ì"1V<Æì$ò¦©Ï÷#-^ñ2VèÐ"‰Zï³òœ×OôK…°F•œk1ÛYòõËÿ³6¡+‘’þ•…mÇ IL¶ònr O°ê,‚émK¹iöª%þCiÑ1ض1ú¾_B1mA㕊 ïú›™EÝ™¼”€ ‡¶PB/°`.˜z”áiêŠR²™ÄÂ<Ì4é¬ë „¦¸îÙÃËø}8ëLN:—¢zéŒbz$¬óÌãè¹E3[B2üÒ®Kšß?¹}fâ¹NRôÐç}„lÀ#-˧μð¢ë_¹³Å¿xhüùƒü Üu×·qß}÷á ox®¼òiGÜÖ÷bY[[CÓ§Ù‘"'~“'L/¨#–Gд£•u„到5¦g Àh)ü¢e ]ÚyÒÅ ógÿ¯HÿÀHÿÕð1Vv<åRà ?Ð⪋\ä›ßü&~÷wÿí¿ý6>ÿù“+‚åÉVº¾GŒŒ~NhÚ1À!™p˜R|´è{ ïÒ{ œ³“ðœ+<ã’p¼ÍÊÞØàM/ipÉ9@»”<⠘ϒÒY0—®cL挃kŒýëë⮬û)f¿ó"‘'("&ìŸ13‚X~‹ -÷â¯;3Gd3ÁZ²ÀŸ¿Ôa¨mÞ¤ºÜK›ä™‚=ž¯5;ñ•¡Òe©]Ú’ «™ÀÔ5ˆi#—r? ¯¢4Ý®ÇPœû¡Ž«h¥+ª,*¼ñuq,*Ÿ9°á$}+t/ÀôA‰ Yµ1%ž1°‹ 5'•Óßã’ƒW*"8~Ë%`ÆRºóX¼š—Z¡¸°*jÚ žyÍß`+EÐ(dSûjz´¤Ó£4!½Ås¿{eÆE³iG‰ð‡ÜÉØ˜çÌ1ù>Yí²þú9éŸ{€rwê ˜íØz6á™Og¼â¹„[ +á]wÝ…ÿëÿúeì}è!¼ù-?—¾ô”]`Qá˜ÖwhzÄ~nRú%¦d(Ë1FƼcpš†ð´‹& N w=xüPÐÓÏxÑÕ„º>à’óË[ô „'ã4  eô‘;B·ÎX›0¯f3$PN’÷³Ÿ —O™!p£GDƒ#ŒbÆÂ ‘B–‹aTò"€Ó€ä[![AÁÙ ­¡˜¯9!Ózs݇(›ËQmÏJܤm&ÞPU¿é¾ƒ©rEj¬†tÈæ7PBÖ„ Ø|ìÆéÓá¢:°¨Ð¿Q!öä* ‰G•7ÊY® C ÞÓFÔ(¢Ct„ ~¯}WSC䬑Gí±ÖdC÷=dDf‚ÍPcÑ0¬•E;ãšKËk¸î™ŸB³4N„»›£Ü`h²çNŸô³F0j8fS‘¬¨-¸h ;¤7–ù†ÿh¿«ô_˜Àa åǙѡéÓœŒ–;Î ø¾ëŸú:ã“·™+âïüî;°{ÏÜ{ï½øÉŸ|Û=ó½TB¿ â1æsFh"Ãøû^Ï«ŒZÂh ,ÍÛn|ZQð¡/ßxàØ˜ÀU6¸áIÀU—7xúE„³N––R<Á6Ko (NfFÓº˜ ª.Óü¥–{טW%!L"ú‘8'‰‰ˆ1"4àL!@95$³° ±8ç’"¥×ð?”pú#[PNy0×-+3ÂPÜ¡AÕ  "lÁwÎC7¦þ a´Û¿úlÇ PJð£ÎåÑŠ›‹éGù½5m,.6e®W!—…@ºg¬½šaC" Í7œ‘²vÁ¾¢ßÝýOi±?Þ%áû±+Ñ,(„têg„ä;×l8ýLç±qBb£ÇÍ’–À½úø7Õ3ìNÐAqýŒG ý#¿î’”ÉÐâœ1^NÛ<é"ÆkžKøä­G>ïÿpï½÷áž{îÁÿú¿þâf¿–“ªt¡! 4)n×u ‰ HK¥ À¨–FI jðü§ö¸øLÂg¿Õâ‹ßfܱëðŒà)ç<ù|Â5.9¿ÅÙ§1¶o!lÝFز1M“ÖTˆI³æ aF ó.Ù”€ˆ­Û{'÷bum9·Àò8>‘#":ôÜ¡ç9:ÌÑÅzžçï3DN¿GîÑsd¸(Ùx±´ªœ°²q08kpª‰)Eb–ÏPH*©ˆ”–¼ùˆ=Òž¨$ìï’™ñ[ú&^ù¼1¶ŸÖfŠLÉO¿™é±\;§œ¥ü"6è)Á<éèhƒòÄÿ(l¾Izȼ&6 ’Ï€éˆÐŒ€­gn¸¦Ákž¼ç3Gî~Ë-·à–[nÁw| ?û³?‡¼àÆÍ~='G ÷ï& šQay‰0ïX’5-ÐŒ3hGŒå> FЄ€'/ç팸ñÊ€}Úì_gLg5 Ž)ÎÕ§çocœ{zÀömãaÔ0Ú†°¼ÌX3VÆ –W"š6É+Km@ÓºÀ=€.õ£/‘7`´ رc‚Õµ%0#û¿|OþÇš7; P@ÌׂÜ[îWYÐú 8Uާlœ`Ѽ¾[×JUÃ\%&ç<&`ð;"gÇxëÙ¿¢ž:DÄ$7-ç6&„x,4TÚ2Áf&“ö¤AýÝ…¯–Ô™Œ']ñM´ô›èçsÌçÉ~‹@†_ú?bÅú;$FQàRJ‚—EB^&ô}6ÔuBú—)+a] fÀh™°ÌçœñŠ|õîˆ;@â´åïü}<ôÐ^üýŸù¼æµ¯>ªgŸˆ%ö²cL†ì³hÛ ( ÙTÔm ŒbÊ`ÕB¶i°m+ÀçóŽÑwæ}‡pD4È^Ä aDÀòË+++ŒÑJñ¡m)i!A=E"€8ÏÁgçi¹ž·ƒpóËîÅûþèY` x˜ 9!€(ü†Z´¡E Mh1 #¡ -!P“þ…Ysî‘S®Zù_…Í 1¸ºOX®(éŠ YpŸ šfaÇèsšBbY|Êž fg?är › À7çŠ]ÕèB¹‚Ǽ¡!ýæ]E6%îÞ3JKÍ ÊDº æÞ*”C(ðŠ?/ÄZ>ÛŽp¥ˆ†ÀUseÀ¤6‰D“I&©\µÑxÊ=‹‚‘iQ’²H{zS>)3Ã"ž÷ü¿ÂŽÓǯL0GŠÐ4OsÒ˜s&úÐ<ÚE¸n’4ÎÆ“g£Â¬ž"b8Jâïç83eÂ<ã€fDØr:áª'/{Vƒß|ÿÑcÏüà±ïÑGñè¾Gñö·oÛºžÑuc´aó)£i5f Qr·Œ}ò©oG„Ø}L&Ö–€91z&Œ[ ËZßòèbÈ0QN‹Ê šÊiÒa뵌ñ2aË20Ë+„vÐ6„†nè ¼ؔŒ³Úxœ¾ xÊe<íé·ãßxšá#WÓ'‹q8ACi,iéG0©- i"»WsÍì=p|“+÷¢¸v’D¬ÄÒ’:cªÍ• Ñ’.ʉßl­Šá“ú¢A‡$ÔÆ$Ó Õ“sPÅ6‚º.Ö1‚X2,.´YÈ@ëœf8ÊX@õŒ™ªœ`¢b‚­¶J8ˆt±L¨„…š=H ¯ÜŒª:QBO˜'Èä-0ži.3²§ÈÙ—¹xé‚/ßÅ^!œYÕIqI Ž"Î{„¾G;Jy^Ñ3B9ø3ÏÐA¤{æ¤DË?óØ©—ÎÂ×Õ§£E*9ÖB4=¡£ ŠšD,­4 gœÝãû¯ øì7š…ãW>ý™Ï`2âàÁUü£ô޹ŸßíeÞ÷hã %Œ08Ù_ú.1ƒŶI„—B22W~Æ£tZ7h##0ƒRŒ@bŒÚ,êÆxÄ æF#Âx‰±4VÆ¡-6 €{B_ìN™R^§£6Ù¹¶-÷¸ùæÏ£¾öå+àÝýX]2øF¤ü»DŒ†#"šÈàœ²„QˆDy,¹I~ºÜMŽnç‚â…(fûWÉ>Ê朄ˆQ¶€Bü­æà5 ©ÉÜo Ù*™ëù'_È|6FoaE£pÚP~Êr3[¾]0Ð\5~ÙÿîVg4êk‡(ŠÈ]{]à%˜CèÅÂ-å6ÂWÖ?xæÖVèEî/ÑòÊÝvÑ*4dþÈ}dÂUhÐPe÷dûfœÅŽl\P…¶^öŒWö`Nh"š@°âìêi‚·ì^z8Û¬gQþ³kïx åáÅ4ž>pŽ\I ìÅ´Ùøä×Íe×®]¸ÿþûÐ4-®¿þÙ'¢×ßuåþ¯üè—@h›ˆvœ6{„ Á%Ä>¿‡ € !0ÚFaÈq“ERØQ›4ƒñˆ1n íˆÑ4IjoGéÞ¥ae™°¼ Œ—’] çc&ÅTGÞ™ ôk4–F@FXYfìØpÉ…{°ëÁØ»w»É$¢ B“¡¡FìA #€ŽD>ìÌÀEŒ¯c'äBl‰(Ä™DY‡ñ†)ˆ€a" pùJ5ý*_ ÿœ\©è§!Á"xZx«œp’çÙ¶7¨ÁùÐTÎ=à úØ\µT1€£-Fý¡BË `‹¥“SD7“ɧßb¾º–Àµ[~Ä3 kxrõ—zuRS©m¦}ŸÔ¤­NÜ;8Q%Ïc pòJAÏ 0ÞÚ€B:›¶ûáæ˜}ÑwïÞýû÷ãÌ3ÏÄÓžöÔØùïŽòí¯~8øU^CÓÍ(e›6$üõ؇Ý?!0ZjÑ„FÛ"ÙZF£QÒ¾Gci¾%©½ @,o!, m ,-چЎ½½ P(QÈš@5-4X^î1Œñ8",Ïñ][pÏÝç ÆÆÙê ñD *„¾A JL€R IÊqbBæ>d%q¨”l÷£øÕCP'Õ ^\ ÆòY£çûÜï5þ Ð‡å=>ǰ¢öë—Þl¤…˜ˆÊöD»òˆ*·/@ßý˜=û³‡‚¨ËF¿“ÿ\¤ÑrdÙ…Š.šP†ˆŒÀ¬þýptÛÃLY—±’¶Zž ? Ý;ut—DFÔ¾‚1’“ªªNâÅ$m‘ÀDÝ|·betãidFß3EÌú€&0Úl:VÃícVÊ»ÊêØÔ1(DlÝ\q ðC×þò±7ññçœs6.¹ä\{í37{Äká¬Ç¬¡‹=ºY@Û˜GŒF™Bh8…VhVÛу˜°D bNˆ¹Aû„Ï7  mÎÀ¦%4ˆÑ4„Ñ¢íµÍø×¥x3Ú¦G“¶¾qmMÀ¼ðk8p0àsŸ½.á‘&ˆ"ç`o)P —ÜD"Gõ ´B‰ÈúdÈ$Ê[I®qy¡†¾Ž®ß0dV/N%™ÄšCaöV{¨UàVâ[âÿ»ü^ž[xB ˜…¦S¨Ô3šrðµVJôŒ:ᘉi¯b~õZZHÏÊx‹zf;_ˆà‚˜<RÒxÝö­34#—QËXëäª> T% ‚Üσq;Öê¡*ôôiËc¹ 0'÷¼iŽ«¨MR±/œ4ÄÉÞ@¤v‡6oÆ.Í6Âøôß÷Ì€¿ûC£ãjç–[nÁ'>ñÉÍîã^ú®uR¤Í˜0ü®ÓuÐäìYM›ëß+(f“1q‚EQž‰q›‚Óx‰±FÍ@£!°®¡^òB Q1èˆIÑF .Ï8HÊz €í GcX aãÁÜÈZwŒí0zV† Ž9¿YšQj¨c2§Øá7Òwy¹TçÊ5bnq1‰ÇžÄ[@ÁkCŠ\/õÊ‹ôõ°é³®¯!Ã*üˆˆqÚ8yüô‘0™0&ëYhz4¡CÛD7w' ñ¯KŸÿÑ„ÐÎ#ÚÀXÞœuðò®rsÌußvÛ7ñ±} _ùÊW7{˜{™vÛ0ë>&¿~«²G¶çAo2nÛ ëŒt3FËŒñJbía¼”¤üåq¾o”m-ÐŒ’gQÓZÂ!¥ÿ¤!d-B4€dCàŽûh ´sK'ÛâGnú:®|Ö==AÊÄ?ÊçQþÅD” #3àèc‡9â›\f%Žsv«eGàÔmÒJÆÅÓÚD²V¦`iÉæJ%êìbèQ¡5.¯0L¡€RC÷D¨öìMýVÊ Ê jå¥Tå]MFŸï‘$Y‡-‹î©™l¹(Ÿ9•Odh/é Lµ[6E–ð/Â÷TÝ⪋žÒƒ´z¯­CúmÔ¶4¡äÆ[2[™é¡]żï1™v˜LÓå@ɘ׆´èâã—äé˜KÈÿº˜âÁ7cy 0>xò%„ûãÓn¿ýv<ôÐÛ=ÌÇ·aN“lìOñ~¬`ÓBK”× 0ŒÆ”áœÄš&å¦MÿBÖB930ÆËé·Ñ8]£LðéÎRƒë ‹)øl&þ…Á.Ùx à€QHÌæ´¥ˆ Îã•?ø9<ç†o 4ì­$ŧÝóçÂÒÉᤠ3‡œ1fWL…‚,¶R'Ýá* š¾Š€§DYµ oL5úŠÌ…÷Ó÷š¸¹Ê³‘¨(°Âá9sBvÙµ´ ÐG=Э×˸EÆv|Qi—}Th&YyahJîûá4S4< w¯G¸¢qÅ•I^Žâ!u* SÊד :ìN)ÛÙÖ>=|1OäAÝLP|Ó<ÕÍ#f]ƒé´EßçÍKÉ;ƒ(¥Æ ‡ž×M.ÌHr8útuËŽ§ï Üp áM/:v&pàÀ<úè÷xdÿ*îòV Ù……L¨RÙoܬ,7µ”†‘Ó¿$í'I?„ô9„Dø%"É(`4J¨ol|(e|NB\Ï@Ó2V–;´KIË`§mxÚ%ñšW}ÏþWÐ6„ôs!þ“ä9¢Ïÿ˜{ôHÄ¿ç¦tR.ÁBé }o™@±‡- ëg]ÓÛ ØÑ:k»D©Uî×6¼e#ýèÓ¥˜`™# üö !'Ó¥2w\A^¦+þ0X=ÆBÛd¡)È5Ô Tä¾×…6¸V7^ ¼•”Ÿept§šT‘@]çŒ:Äò¡,lžZVô|E™‡›†h]/‹dâ5黨¥R?ºy‹»îºk“Ö§=BÐfºï”¸Œ¶Ÿ ¥ØÊ! È Ìêã`i'áì3?r}ÀÓ/>6(è®»îÂêêêfõq+¿øÿýßpÛW?‹Ù¼Ož>r®¥H„}Ï9D2ÐJ§cÁhö ƒ7Ò;QÖ šDü ñiÚ ÷Œòy+ŒaLI(Ù(ÚJ ýׄd”.AK~–@YˆÐSµ#  ض½ÁED¼þ5_Ä ^øU½Ñ× $Y2 „":ꙎiœÇÈ3Ys DddñŽò‡õ—¥;"¨Ã@:°œ½Qfe‰Þàõ¤xGºh»ä´=ß!b7¶l™À†˜;²døŒj%\Õ lÀ¶±Q´¦×ȇ•©Qƒ«`ØÙL\î‹ÆýÊʰ/=ÃHd&QN •ÎÆAJdØùSKvq³ùÜòÅ—a2#ŒÛKÔ“„ïìÇjÒœ·œâo ØrFÀ•—/ΉSÿD+¿÷Žwâ¯ÿú#x`÷½àir¡ÍñÏAm’àÑ´‰è‡6GÆ0 J.ŸcÂ83‚ ÿcp7ÝPrå¤|ÒœÉÀ³@ ±Ÿ á/°Œe Å(˜0ǘӹƒÓ¶œwfƒ×¾êkxí«?‹g=ë~ñüaNÑAûØ£çˆÈ=:îrn€.ÆŒ>3ˆ¤ PTp¦|bÓ_†q¡¶ôÙkOè“Íà=}H» “V1h›Í^ºÍOU\q-c©„XMˆccÛGÓÓ¡’³_d˜»Ñ,­' ¨"âG] 5Z¶®/LÞ»W€ ˆAìq®ÊÝ‹ƒÑ•‘+köœBVÙŠµ~àeV>Ë€@MõÛ‡jÀ±¥%liçƒZJ';Aèy ð,AAGb9 é; ³´°Ã2aëB<›ðÒë¾qOƒ÷îèÎ\yå•8ï¼ó7{tyY[[Ã{ÿüϱëž[ÑžÓ§L``Xé@`Ódm9ŸÑgd-ŒS*‰€ä–˜€Ì6 ùMH0 $‰½œ.n´ÝíAfU¦ÌsMÓkzTN‡×Æ#Â¥ç3.xÍmx`ï}hÇ×âKŸ{*817N‘²f’D£%Bc ~Ç@Dð'ñsŒ,I6j,º /_K¾evù³‰á{‘¹T-¡ò *tz¡3ÞeGÝY]vg[´ç XŒÔ‚ÞÈK¨ŽjíXý as{þÐ.üÅÓc_Á‘0‰¢Òf Lƒ¢B’âÌú 󪴘—b4†­ØXC¤[­Æž°“ã•ÕÏîL5͇­Q&— ñ÷nQ[–,µàܧӽ "3€}—6d2Â@•Vhᆀä½Òõ)XÜ–³ž4ÞôàÞ=À-w9xÞóž‡üÁ—nöhÓòþ?ýCüÁ¿ûÈ_᜕5œ¶ÐRÄ(0B›SÞ‚N)Ð`Ófø­ØŠ8}îÛ£H.º:[Æ(¦#0ŒQHQx‡6otªKÈ.‚Údïb–Æ[¶;¶À?ú©Ïà«7Þ‰÷üés°k×Y˜ÏVä\C‚‰ ½# ö 0BLa-Òpò1Îm±1 g‰Ídã¬&€âo>+ñVŒÝ@'…¨WpÊ¢ -3­T2 Ó*í°±kkü~k®M¡ÀTf,–—ÀÐ$MÍ[*æóâ`p¼àÚ¢I;’âߥïÐ?JpåE/hËçú…L’N*å¶Ô +é8å hë$„(¶&±€ŒôòÞº‰?£Jiƒ·+.Y¡E Ë`š!Ò2¯&l32:4hÇ=§¤Û8 Ñ“"% ÔJJ"ê€v @¬l#ÌÎ`<ãràÏmŽ˜Ü|óÍøÙŸýû›=ÔǼüá¿ïûó?ÇÞ‡ÁÙ—nAì;t0É Yò0¸µÈq¡Z$ˆ¨ÑßG”òöÚ»ä ÄyêEkè ”wyÓ ÛpÈØR‹Š‹Ä[Ú\D r»%‚)5ȉŒgŸ3Ç‹ÎØ‹g\ùA|ñ+â}xzèlLW;”S£=“DĆï1’Õ:Ž‹)õO…ÈqOކXZ]WcîY ô`ˆÎm“ ½MñÈ¢ô¸¢¤ØgC]_l; —ƤtÅF©Þ_÷†NÇWJ؈ž;8É­„#X-•Æà¸T” h•aUƒbûŒ`™„…3ÀŠÜi}¬nT€û±7á/þâCØûð#€–z•þ C^vLÒ4'iŸ9Q Á,h«¬#j”¸ ××± Ž‹4 롪J)‡E»hôÆfË g_8ÅÞt;þçþ׸öÙßÉ^@%)L'ÿ"÷`îc²ôèc2ëa²d.t¡˜—åü« £ FÝ:Ùïyè^W’b ÆBíEíwpp‰á#¤ßj¥­×Ðo¯—¯Å¦À¦/6`œÕ+/F áïuiØ ½PŽZ`¿ ‡ÕÒoù}QáAÏLZп·Ô—ï.¾·Ö!U¨Šº(âjLÌiFFƒ0×$2–ІÓÑÐ#èx„¶xDJ˜?“h›YŠ=MÃ!ä~. þMtéš|›ÕjÇØ±ýQ¼àú¿Æ·n» {<ޏpš+æ8Ž bçØA%V‰H¹`Ñ=›BM(¤[(¢%¨öŠCE1ù‹FTx£2 ×-*?R˜ÉÐ.çÜbêaégöp”ž8f×2ôûðòç"èpן…Ä*æŸ[_W¯³X`¤ÜT ƒ›IÂäR D$\ײÁñËßb¶ñ‚ØÖÍ)–³º=MRj߈Øm;8æÐÑ8i‰ÿFØ032A"ÙÏóè`i aÇ×®2þÙkFø«¯ŸKŸþ<\zé¥xò“ž„g_ý÷DV°?û³?ǯüʯà£ýèà·ÓWRà¶Iòï;Æh‰Ô÷?‹d}ÎêÕ6‹%ðdz Å)°0PqÔ½¹Ø5œ˜M L“Yƒ3Ï};vîÆƒ»ÎÑúË?É Ízäý1R,ÑR>‡™ lSa…Y8k,Tq•¦m˜æ!}Ó1…>@Ÿ6R¾ÁôýãeàNkë1õ_ЬÂtX~R˜+?g§ÕíHï ^Óe3¾Öý€êFÛÀ¢{pˆûÌïœW‘Îsy9þ™P!° Fç¤}£GÕ­HàÙËÈ>íŒÄƒ¢?îi ÄfNáš}wrÿRÏçˆ<ÉWRæf$¿oNÆ¿>{ƒrÑ6ìÛÉSD™‹9\4xчj§í$ôç~ðÙ„sÎ߉«è͸ùÕOliß–w¼ã÷ðË¿üð•¯|yáïãƒB±z©p“#Æ„Ý ¦_Ü67Y °e‘&@ÕÖlŒÝB¨z^ó«`mÒcm½ÃlNèÑ{¸‚"˜ÛL*„È™H69˜ZÙ*)ÊhÌš}Ò à  µ7:©z±c+׌€®~ÿ)(ï­ YjÀ}ŸòðÎ0RÖM^ ]êá¢6>^¥[&ÌÀɾ±å€ÐK§Î=7à²Õ;q÷×þø`=´ÿñ?þ'üþïÿ>î¸ãŽ…÷œ½=`¹%Œ›4M’ž‰ÇLÂÎÓfh‹ñ·EZX'ñ/¥fz=¥ä À]C×ÓcuX[ïpp=b2Ï'ƒÉ;TwÒSr› `p )ò{(RûÂ"P‰#¤”"²\~ð)¬Ë%[*‚‚:ƒpB|C&ÙKëÑI¶´Å„-ì\ ©å²!î…±ÁZÑFš£¹Þ:êu4ªæ¡˜À"8H˜gE¸E2:V!Ñ•îë‡Ì6ă€a$+æGH\×J#Nƒa…t¨< šì‹¨ÓúŠ81…¶âŠ+nÅÖ¥?%h¡e0Eq™CP €ÚÜŽI)k+_ã|hhÓ4†S)ÇD˜1cÞ˜¥¼íÖ€•—ž ÜûÍ¿À{þûoà5?ö³›ÔáǾ|áó_À¯ýÚ¯ã¿÷{‡¼¯DÔ”÷I”R=W§MÁ$i>HV°“¥8¿‰¬ÉÄL¤Šå§ô½ïÒøº.A…Ó9pp-`ÿ*c}}†½³y>Hx#ôM² h $Bù422ƒaJ¶¤^Cܱ98"]S“âA¤ÄÞŽe|r¾nóKmdè•x%ÕdPSïò‰ºgИ>ˆÁÙºÖëó’é°ô“0Ôp*šÝšV®Ša°¡±\?â ·’X¹¾Ÿò 2•Z¯ðQq—bÁñ‹aHܯLû…HÛ q´TÔ,Ï”›¬òfHÿ[ZZÇ÷½à#XYJv¯IŒÙÝ*ËG£9xåh³\H€ŠÅå{;Ñ¥ÆùðR9ß<ã­;N¸òÜGpËßü&n½êF\õŒk7¹³'¾¼ï}ïǯþê¯á/ÿò/{ïòˆ°mœ²w¡O›¸‰DÁZËpJ(Çí?ê½ù•BL4Sþ !eµ Ä>Å šÏ€ùœ17˜u«ë„G÷¯c}ÂØw Á¼ËÐ ÇäBz¢W²á¡GCÅ»§‘XIŒ>ŸòmÒ¤1e-=åÖpÌéšE†,†vt‚ A3q"”¸Z¸Øh "]]3DÏj7H× ï«%f¾^¸lª‹‡6/0lTÑ¢Gë %$ƒK†À¡à[JæóÌ, b¤uÎQå7ÙîÀH5ÕYƒ5Ê@r:ÙÜué·Ù4IÿÓ.bmµÃdÊØ0à_¿?t.8ǦCqPHˆ‰q“2ëÄ=䣕 Ŭ)Œ]SI&}/ ÌS{›dÚ¡0‘ÊÕ¦³ÒwF"6$þZ? IáÁûeG»ü!¯„¸hù¦ˆ8o!,x,#O‹‚¡zèP ðpŠ@¹f0˜ kÖ@>1ƒÈüå&Ë9™ C2m°~UÁôÔqnIŽZ‹‰_±ý¶ ¯}À´¢Ðж­ÐŒ€®ºž±u™’ôB@R–ç`08æ£üW…ªl, ‡ÃÊÉOB:mÚ0&sJᇠ]V¶ÎpáÙŒ»¿ñgx×;¯ÅÞò7§Ó'°|êSŸÆoüÆoàï|çQ=·Epê¸f„†»±³(Ää+Ѐ˜ ”#‹Ål:»f¨f¢Æx]fÖTÜPW¿úpú¶bLé ›4MÀ¨Ic.ó¼:¥?™Ka<̂ʳÒ*°²Ì– [N'\|ö~|þ/ÿ οøiø¾øî ýð¯ÿõ¿ÅïüÎ;pûí·õ³Ì)ùKJ~’²Ã1¥|¹e5ئ6üCez¬ËF„ß~¶×ú>å5`N„Ÿ9aÿ]G˜ÌZLgë“&`²ÎX]#<¼¿Åý÷Ÿ~¾„$ðEC$ˆ ›–8AœO­R!£@É8ÌŒ€(N $ÎlätJPR\ š!A÷€…[”y¨q8:ÆP ðÚ~þ!*¹—M_çHÅy¨…5*“³›­sÎámGƒA 2Z°ÈRÇ“_¯XþåÝT¹J…BƒoH¨puCQݹ6v#í—ØÝœò§)’þµ9…ÁŒ>6Í0jSp¬¦ÐF,m!4K9ƒÏ%¤y9$#UžäÄ¿*r:8øiq:¹Ú÷šðbÌcÎÛ°ëÁ¯ãÿýßáŒ3ÏÅ•W_³Ù#9ªòŸÿóoâ]ïz7>ò‘¿>æ:¶ŒÓzà€L­¡LìR ÙrÚp €&ëñq‚úŽ”ð‰Ÿ3#+pOŒ ùt=aÖ°º±¶>ÅdL× Ó)aϾ1nùÚØu÷SQQ±á)̚ᎠVdÊL"1 ¦”€¸OžI®!ˆ‚TYyæW°IÁ_ i,BGí¼DÅE°ñm*4[ao8²îýò$o;hihhÁ}–á݃mpñç\Onñð†÷î¾2g* §1÷Mª822C(bzæVj/ÌÖÍ)”SÛxÃ3“3»òÔ_ ÍiB"Ƶ×þ Î;s@)îÊx @ã a€:UL =ºš'Mt&`}ʶ´Ì#Ð7ÀˆÒá§óÏhñ©Û>ÿúÿ¿ô«¿µÙÝ?¢ò;¿ó»øÃ?ø|àƒqÜuZ ÉBOŸ#œõœbÞÇž€‘Ñ6cŠþùx­qWˆ{Eø-äÃ1Iüö޾˚ó)aÒ¬O;¬œc:!¬­X9Ðá¶o\ƒÝ÷^FM„: ¸ zü8&d²A^Î*CÌ›)€²ö¤LÀÃЬ6¿üUv)*QÆïhŽŠãFW¬ˆ‹-ÇÂHì ¶ù`¡)ûB¤w ULŠkÍàÈÖN{T ìP÷nô[}½–f¨Fá9cusuz@nf"g”´œ…@‹‘­L6ùZ ªT4¯a¨}Aß·ÇØˆDW]ùœ¶}‚Q1ˆ.¯´’±’†)RˆÞ¼™âIäéqÈ’û[âÉ#èœPöli™1ësæHÚUÓËKŒ¥-çžÖá#ýcüôO3þñ?þpÝu×nö¨–÷¾÷}xç;߉O|â“xàïw}çlhÚ$̘Œ†’;Ð÷Œ&Ÿ°–pÍñ°$ýCwcJüàw®ÏL&s¬Mz¬O"¦`}2¾„oÞqvÝw>Öž‹š⻟˜ƒdÁq õ.š{& œöO“kò¾*_½§Â€è&r DµÆpì¹®EùzËgjÌþº¤ù]’¦ØË¬U;:eÎ[j¹f _v¥¨=p¨r$ÆÉˆÿáî1¾…í` ïTa@ꦺãëO ô¿bgIˆ0d I¡3V4©Ýv9ßýìë?ŽËŸ|F-°2N1ÍrŽÆ8&`†¤ñŽ>Sr•£|W0Rü_â»á-¯•ÄIDOêRþØqÃhqÆàÒÓ×ðѽ÷Üs?Þö¶·â'~âÍ›=2)ï~÷áþèñÉO~ ÷Ýwï «w´´Œq˜#p5¡MAÏ)DûÐÅ-uàÀ™¡¿&ü€×ú84î²¹^<|º9¡Œ®o0™öXŸÎ00ÖÖkë-ö¯öØópƒ]»ÎÃwî¼7Jj£òtýÂ)~RÚÂŒ”l©#š ‚ … ˆ½e2B·ÕaNògÓ×LHl~‚ë·†`OÔJ’øBS`ž[DɆ]8µVQqu.±àÁ +?ä*;L}årÅ,†W×GÂÞ‘¸ì¨*9¿òíö6ù…Ì ÎÏ r‡ÀCÆóˆÓ¶Mpúö–F@DŽ奴}Qf ´ ô$bŠÖØuB!x»ÇÉXj!ÇœEà@H cú@ YVªÛ[ÆŒ­MÄy§.ض_úü'ñ[oÁ{ßû^¼ñoÄë_ÿºÇ}8_ÿúm¸ãŽ;ðÙÏ|ŸøÄ'ðµ[oÅÞ½{Ox;KaІ‚2Ê@Ù—Amb €&$œ!¤ÓâMh`Ä]àѳȸÅ­3 ›Gt˜ÌÓi‡é¬Ç|L×é„p`°k÷6<øÐÜwÇ Ðw+`nÈ„ Q%Åó%kÔðû!!´z!HÞÝ¡äícgê3‘ŒJˆLºÐ”B¯ÙÐÛ¤H”ôLðÅa=(QÑ—*Ò„=Pâ™ »>Wý'Q&Ë臠Ûí!oàÃWpT°/¾ßTNò©°Ú £`c7€?ù[^ Aìt¶JmÏ+1ÿÙvQ9•bÖ,•¬šlß¾^p7ÆlžÛ B>Õ9Ѐvž0ȼ™bÞxÈê>ãä}¨Ó§r0‘ 9JØè`Ôú'ÂÒ˜÷is`¼pæÖˆ+Îöœá÷?ˆw½ë]øÄ'>ßÿýßÇ _øB\y啸á†ëqÖYgžðq}îs_Àw¾ó|ë[·ãŽ;îÄW¾ü%|óö;°wïCé|¶MŽý’KcC¡Iî‹ýÁÈ@f!ž@`‘ 's"ì‘3qï‹|År_×e ³YƒY¬OzL&=fs`>Ög ¦ÓˆµuÆþ5Æž‡ÎÇ]·=“Õ©m`‘hW ñ)(f9C§!E-¿§Ä0!‹ŠyñeÆai…s0—u«áá=/D5ÿæqLEí•ç( áa6n¦Z³½kÁK^VE HcÊTfòè×å!µzØ¢ßh  F$ïÃ0ñ·•D,U•ù­‘Élï'Vµs¤«6 ø§7²-rÞ†˜œQ2Š]á‚ ¿§?õ6,µ*_ÌæYciqÑŽ˜%ÆPÍçi£…bŽs¢èˆ0có|ÿ T•‰G…å€ü=m¤t(“!ŸƒcŠhBÊU»<v¬gŸÖàY–ÚµkÞóž÷à=ïy®¸â <ùÉOÁ¥—^‚óÏ?—]v9Î8ã œyæ8ï¼óp饗 úwË-_Cß÷˜L¦9É<øà.ìÚµ íÙ‹w}wÝ}Ïã:+ã,ñ7„qÃåuCZL}—ãÿ˜ùcœ0ÀFR3ˆ@7¸Ñ$Eý<­Ñ$õÖ§“IÄú¤Ãd1Yo0fÓûÖ€G¾}Ç3±¶¾ë«g¡Ÿì”öÉü_¯‰_ ¾ \‰°•˜Ÿ¤Ÿ“•\Óó5möô+Œ"ïÓ«xéF&!¨ÖÕÓS#¯ ñݼ"0.v…Ù©¿?k#°Å MÎö)7­ý°¢é‡f‡ìßuðÛÖ¶þ+}äH´„*ζeÿ}ÿ¿<ŠQ>þåæó~¬ëAf´¡Ç¸M/:4À¼ëÐгÐu]ìÑåØ>qªu…4+4æÉsP¢Ÿp ðá& æ/7Sz¶at¤òÖhLèÀ@¤¤äµ: Œ6Ë ãÌ­„ Îá;{ç®íÛo¿·ß~»|¿øâ‹±eËlÛ¶[·nÅöí;°´´„¦i0™L°¶¶†Õƒ1™N0æó]סëzýC”ç5õË¡¤Ôïí2°lˆ#åò®ÕÃþúÞ7lýWG¤% ¡šïžÆHGÝ×§ÐÓzÐh Ð(%¦M‡ùŒ1/á²TŸ‹‘Üqz9 ÄYÒ$ƒÔrë±´ANvÕí Ú% Ép3À‘Ó§.MFÌRLKŒÑ˜ÐŒ€­KŒ3¶0¾sÈýÞ{Oœ1v3ÊÒX´±ÙJÐg¦Q°D#™[ý»‡–<žeàºÑzÛˆð q‡ÖSß+Œ`Û¿:"{“Y+å§ýQ%ëVù[TIk²1}D\Í8T‰'$÷§?Á¹åˤð‘ }›Ý²“S?ýÌ/`ÒýwX"b$4“äË=?PË)Rbè$XÖ¨ R8€¶íÂç`jц}^¿¡¬G“‰qh•)”8쌜…‰ÍNs8Â:Šo¸$æ&÷ɦˆÑ÷™ÄÌ´ aç–'þÆ$B"þÄ)\ùÌ=’Äçb65Íñ½¾|û‹Tß;'Lº1ú>¢@ßÏÐG¼cÌgSÌçŒÉ˜L³)°¶NؽoŠûwmÇ®ÝÛ±ïçýì °tˆñ ÌRbô˜_d‡løMÐO „ù4@Ô  A  7é½ðG3šüê ¦ ¶;rd‚ÏÙùSë(­Ê73åɧvÆ`gÐu6ƒÌ]¨bv1‚ãÃì›ÃÉÏù÷# ½ˆø[x§2_ËoFpðüsz MÚkÇú„U¶gh2Ï«‡§~%E\ÎÌUŒ5®®lÈñ9U ¶Fi÷éhÿÚ”#auÆ1ÂˆÑ §²#€ZÊ!¢é44Á¨M¡r›`îЄˆy¶'æ‚„…Ц¸;è@‘³9ä0Ò1»1î™ÅPûX @ ]–4cÎyÌgã"刌nžø¨%lßB¸ä¬€{ŠÇÙƒ“·RîÕÿ&·Ê”@Žp¤ÀHE“7ú~ØP5wü0 íÀÚ Þµj˜o\G E q—P©„êAáüd <KÍÜÓ¥z0Þ@V#ð–cÓ®ð]$}Ö¦=æk„Žs||I7"2¡q:<&Pˆà@FÌi©™ç¤ =¥„1åÝÏ8 iúd/è$œx„†zÄ)!P@Œ€9g»#k3=¥ÎY¬´³{E×%Cw ]1Ÿ³)'‘ Ôˆ"–ZÂ[ ÷<¶N8›^†áôo6gŒG ¦óˆq—ˆÀ¬ÿ‰Ñæ˜@±‡ ;’"Ï<~ÊÆÜ&Ký‘0LçsÌç³£ëùè2³žÍÖ'«kŒ댽ûìc×}×cýà9Ý"ï¬J’,²5ð’%×!kÝ™ès@F’'¡5@@ÃÊøòi`5"söJ[\Dqã9cuµHÿÙŒÀSâM` aSG u$ž½#ª5.C´ Ã(Èf1¾iGòJFXÞèlФŒò\EN‡¾æ3B7gÌ»ˆ¶#tS`3ˆ"ºvŒ"š&½ób÷YäVNeǹJþ]—¡¤÷2Ÿ·èú€®˜Nç˜L#æóüžæÈ°OÀú”1™F¬M€GFÜ¿;àÞo߀µçós\°¿ åc½¶Pm!üA × ñÀHþÅÓ‡ ü“¤}øGïIµÎH’ôÉÅü’Þ¦¿þÑŸ7uÐÙ÷æìÉâZ®/W]Ö±ú}9J8š¤ä­H®Ù¶aÝㇶÔBËì CAbn‰¶%þ.[]£•œ+m Ô'ZÀa:¾x¬6a» ×À¾maòLy1ú LmCøßd™Á¢0‹m  y6ÙŽ/æÕxd-âÌ >‡¥Q2Fu}2êRâïãÁŒNš÷µ„Q ´A£teš6¦øð³”K t£›Ç„÷£OP––&!Õ ŠÍFM sj0¦éàIÊMLÙó$âÃ_µÓwf]J»Øw fšÍó)a6cLgÀÚ¤Ãú X›2V'ÀžGwÞyî~.˜ƒ#þµ¬'Ÿ²­z‹Ï'‰¿{*‡º ‘/æÞ$‰È·| Œ¸Éè(ýcl6þ*}vac DSDa=æÃ1 ±ßËÀseÌJ„AX¿Ž]Ýö𦆴Á̬r¤¿+µ${ˆþl-”þ“¨/ÔŽp„NB/q7ŠQÆfóV Äc´¬T í Ö³ ³Î /…ÌudÎ ÏÅËzˆKxð¶¿!Žïoÿ<Æ-Ú)ÂéŸÁʈ±Kþ“ 0ëëÀêZÄÁ5Æú$I¾³Ž%˜Xß§¨¡OäRü—ϬKîÂË#Æ|—ó.Á3mOèæéw3FhSL ¶iz€PphÖ,„ô9`Þ3æóˆµžÁ]òà‰˜N“ûñ|=`2Ö§IêŸÌ«ÆÃû÷ßöe¬®3]eÜ÷Kp`×@Ü‚¡VlÿŸ>) “¿`}ñÕ?Ÿ„Ð'‚Þ€˜‚qå¤$í{X b•úqË;ïWж¯}OõilÿJœSéÞ06ã ¼ŽéÛˆõÐQ‹¢u7%ÖëVE¦E6,˜"†>¶X £^”¨Ý@‡–wó†¦þ}QgiØ ÞÃj6É»(eÕl$£Zb}üám µ¿?5üêcFŠàœ¨¢x&‘. P•{ÃŒf~b׃¸Gœž‡ÕG¯ÇAÌ0:ï½XYYÖ¥ ÚÑK£ˆ¶Mø~Ÿ3o-€QËXŸö)÷n–ÎC pŒµ)æ3ÐŽ¦£€É4‚²›èÖ`<"Œš$IÍg½´AhG³tö ¥…9švœðà."öSpVCæÓäI²6I¹^»˜N ëàÀAÆê4A?ë“}¬MI¬Í.>ëó'¸ÛwÉÎ`Œ›trºäÎí"am¦n´±æP£¥Ï1vÙU˜0ëgéWdL'RËÌ8öÉÍt:˜Lµ 01=ÈX]OÂÅžý-Ø}>º‡~ÄcÙE‹·¥µ\€3%þ^j/pNÆí³OBcŒ¼Ùÿ¿h•ÜäZƒHúÉùÍä/ð¤ˆCš¾äÖ¥ŸD¼…â«¥O\ï *©„[±¯¿Ä÷IÏ+cTß@ Ò»:œIR/<Æ= /Šnê+ÒesQG[õì0+¹ªüP÷-ºgSà#¸¯ú­6üZª•nåzVa3¿ˆTà ¸Ã]‰[ë}ƒÌð\5Vž®ã“Jh7ôÜAI.SR}1÷§è0½ïÇ1A=ËwctÚW±ÔÌ’³CXÃÒÖ=8mX¥ƒam“pÿÒ¿@ɘ\¢îµm†‰fI °¼ Lf@Œå¥¤Œ: BËhÚˆfš5‰ÀXÙ2ÍZÅ‘6ûl÷í¡™ÍŸÏ ««Œµi2ò®N×’øà˜ö‰ø¯Î&³d¨<8¸{ÏwiJ´#,ë³äƒ¿ÒA¹˜×q"ØëSÆ8vhÇ +GCˆHnZ}Z èÆ6ˆ'› 3æsˆw>eÌçÓcÖu˜Ì4±)a2KïéÀ°{?°k÷xtßEh>ãÅR®ã$&‹”_ˆ²Hù°=Iâ/Þ=ÉÈÛ¤^ŵ“ÊqM’´Ÿ$û$»—Óö$˜ÚvÖ©ÃHÜ¥»Á_¬{°<¯"¢¯ôºqE·Ã_šä°X,ÄšA/í;"?­ ÉÛD[°¼€²a_6 üþn®-Îpˆ´§84á>¢Î¾ºC– †2GÃq ¶va®p51å7Hé}y¿Ú.i¢nè[±YÆHê/'”Ký 6CÉO  ˆÙ«€Ð€1£G;yâúeXƒ9¢k¶~Ç„ö´o`¼´Ž-m1眼-au’_l“ ¤f=%Ï °Ô$# @(yäŒÔŒšjbÔ$;D3J f6ï· ’†Óǘ‚xõI¢œÍéŒ0›3ÖÖɬǃŒõ)°53ˆ°Þ'ì}Ƙ΃àáÕ¹=!àYÛoÆÎÑùn 8 Á¢íoû®,ïô{D+ï¨Ë4N𑽿-ß÷Œ8ë´&Ÿ}b´ £‹ÉÖC!ÈÀ˜ÒéÕHŒ¾#̦ŒÑÉclÎYËLšZ9ÕË9üÇ<3ÔÉŒ1õ˜Í“v5¦3Â|±¶qp ì>@øÎƒga²û…hûv+æ¥M 3·ÅÂDã,R<co!úÉ{'„&¿Í&{ödì߸„–÷Pò"‹QÅÐkö“Üí1rÎîÙ¥ój£5!•…@ú8Ÿlöq Ï]žóZC ¥>Ø~ԇè2ìjåð€®n¸:ÔP¯žYœÒ´:ß`úz¤²ÛlþOõžÜ`n—2Á•eQêÈ,·À0åÄXý“€È-‚Ò¤æÈ Š&!ðy¸) 龈þð'óÂg âRŒ·ÅÓA¡£"Bϼ3fÜ1¨]EKŒ~én4+w`e”4€ñ8ÙÆ£‚8#DŒF„IK8°–lËK³1£m M豔Ç&d÷S`4Š0j ã6"§[E—CQôX:3Lf‰¬Mk³Dü'ò)ß΀}ë÷ìYìÐâ)[Ÿƒ3ÆT×FF¤éÿ(;+R¾« ñ]Noº÷)‹åÄBP+a+~äœ,ß#MqóN´¡£ïf=c6gt‘1ê Í @sF ˆé„0 ‚wÓ¦o®>ª}ªÞ‹‘’‹mL.¶k“dTîc2¯̀µpp•ðÈAÆ®½ga}÷ 2ñ÷{ÑØÉœ€f½Š÷K؆Ý<Éw‰šd `ÛGj V-õ kÎŽے?›Iº-ïcB²±i¦0é4;ĺj’qtr+×DØ|Áƒ$Œî{£®ctmÂÆCS|Z¢†sÎÉå9&é?“¦ïÕIÄd–°þ}kÀ#kí=ÝÞ@ˆ;tÏ QÊû€,±¢ŠøÛƒ\ õjʧÌÕ¸Ék?À~W¯KÕW´¥ãN¯§•þjH#Œ•·\žÉ¿ td `3§0Õdê(N"ÂxØhÿBûaõs##v2òÏ,®×áÑ dPôÕt¢-/Syž$ °üfS1B—ÅF…q(0ņÛÖ@ˆ ”#¸ "%E¡@„È ²í€ýß@Û1êOC£éíü1¦ˆxdå#XZÙ—ŒÄaãvŠ•1cË8aÿË#`i0ÎçÆ-ci‰1 „FÛD„&:…˜¥¬Œ×Ÿî:Æú,ø-ßW§Iâ_ˇ¾f}’@ç}Öæ“õe|ç‘ýî=¾ôÌŸAÏs´aì™yÔˆ¬þÀ•W‘ƒ•Ìq$Œ9•H6%YèÈi‹ ¡E»h>Zi³Ivh°Äç`-´Xï:¬MGCòÚ¾’\?×§ ²ãÈ’´#£ïcA¹ÀD`jR4UÎ1•"ôäp1™g_ÿž0Ë0Û£«„=û?z1°ïyqÛâ}+{"ÏJ`2 ßPˆ<…``Ÿ ÍEñlÌéÝý¼?ô û˜´ª(š/ò!Û7ùc’¶TŽuj(•ª-Ù©ÞK¨<ÈF’—˜…yù¿Ðvk÷ãL ÈÕYå«ÿcÑ@ã>̽‡`‡ 7hôH*g¿}Ž$´ÿñ"±r8¬ «6é ϰ`ýÅ—tTý˜~ Žàl ˆ`´™5Äì F”~ ¤äô爑ŭ°eEŸ¶ö `-ȆocßÒíXn§Àò½Ø¶lÛ–k—k/6ßIDAT¢$±_Ó.ië‘bØ´MDÓ„œÀ„ÑÍ»‚L ±6eôœyÅ|°km–}ÅdtžÎ«3$ßÿé¹8§{>nÃâ¦3ÿžb½Dhii¸X¨°Bã £#2Ñ $\€Á|J0óðšÛ¢5è#>Õלžè‘% òBÒ*é4„ù…˜Ó·±b¿qNô“BB·m:K§ÐóÔZ;ú®Ç<Œš(¡gùLHÇ„yNù>ËLwØ?aìÙ<´÷L4n@ËÛ6Ø‹jK)ë•Ý|+<©1y<Ì#;óï‚ûƒÎ'{¹„‡(•Ñ6Ê¡Ê ËW‚¯ËCyEš® ¢‚Í;ø§hZ¯:„èÒSâímÖ&`Ðɹ’õл– -’àÛð¹Ã—#¼oCC2ô†mÿê hC©ýH¹Ïáê9Âç>cßÁ‹r–.;Éî6]€b °~ù¡q;yÆCÈV_®—E@Z9Ê(šII†‘Z‹¨3¥ÿ¢!3æwN¿€"JÐ(ñ‡Èã$QFþä9´ŸGÛÎÁãû0^Ùí+ÀÖeÂÖçóIúK°PrWL'ÊæÌ=Éa†×³Ar’Íû÷f}ž‚ÀMçÉüÈz‹8;§ÏŸ‹1Îpý¢S¦r²TÎh@`d93ÝÒè!$4Y™€yçéS±æ ë‘-®­ø+ºRœ¿IµýV²v%0 »ðèÊ_ oÄÖã´eÆÎ-Œ­KÀ¶%`e‰0nå%€BêA›ò5”¸ôš÷!'Ðä.ë³äï?ï£=°Æxd•ñȾsÐ|!Ú¸³šbCPK 8";{ vʾú"ñg¸H„¿A‚{(4ô( ‘¿$L@í}¥þÜ¢‰Y¢o¤ÜB“ƒ?”ælw¬äº_kßgå£a\tžJƒ°}ñ1‚0¸‡ ä£õÛªM¿†ð×åhŸ5÷·‡|°bG¾¡úýh²ˆª óšw™ådÌ"YQƒ¸nœ7(©œ#ØÁð,Fà¸7éj•u¤T¥„BƒÖU¿±"¬*Hý¹žˆât—I½J0ˆ)¢'gAJèÓÂÌZC~¦0š@§÷Ï:Æt¶ÝÚn<¸í3زt+c`œ½N–L‰&‹5DÀJ›Ü9[*©/5ÛTIŸ¼Oú˜´‰Õi‚VgÝô|ìœ?cìHÀ¹Ym„'%J¤Z@ ç¿7FâÇ@µ€Â@,³ÉŸ!:Nº±R§ ñ»X_pO9E’±Œ qúäfì †ñ¡ÄsîˆÕpÚœ±²LXî’7V  ¥Êš@r€Œ³_|Dú^Âj¬ÍÖkù°ÝÁ aÿþ³Ðx!ZÞ¹`~uŲP=©ë‚³!  MßJÿY€„rP¯ Õd´níÊ€—EHÈs舿V‡úXÙ‹F‚í½Tmê!ûöìŸí˜5áÑ(TOªfPHûun«–Îâ-PÝV¯Î£fæþC{ñðäî!%òªã‡M$s¨BÃïtˆ~ÖÌ ÍNˆ^q k¤)×bNcåB9°aŒ·j±pRw N+Æ]RwϲN¨œ2ÎGƊ˪sˆMöùÖÓ¿6â¡,¢¢E”Ä0çÐÈgóg‘Fж@À ŸîÏÅtßù ša_{æ+_ÀÒhŽ•qÄxDÎÍ´ À´õòoñ<)1þ;Na Ê)ßõ9%Lzºgv7bŒíùy– l#{/«ÀA^]!éI#0>æT’…äP”ZNžZíÁhå ”¹e3¨!i?„ºk÷öÿ¿½¯ÙÕeI®Š¨oß?_CK}ÛˆZbÀö !f~ ¿OO@bÌÈ$d  ì–}}Î9»‚AÆŠX•U•ß>ç62êjûžoWeeEFf®øÉÈȰ±\‹>à0À¯åË?zýwò¿Þÿù›ý×òÝ»÷òÕg껤U¾öA_zîCE¾xá ãð˜Áó÷öqt¨øQ¤ïFØí·?ŽC‰~|÷"ß}ÿäëïþ­¼Øßo$§@Có2 Ž–f#Î?cû·ñ|'tÁß¿¾‘×'"±°>“ »œ_£qÊ›ÿ}T“µYIÑh »–NH]„ ÏK×Ï«*ß°™çpèóg#"Ÿ`¾²V)šH¯®“zòû´°]ü-"úÇ_ÿû%ùqy$dûÀRÙ;bÛwŸw? ‰îr7ˆ4—ë<Rnuà#­ºtjý Thðj¸ 2?‘Ħü7ÂHC0vဆ±$µ»£c‚˜ÉîZ;6ž)¹‹8WJ|ÕDvù ¯òüúå?‹|ñòÙË{‘—¿‘Ïý ÷ßùrì<ÆÙ²Ø‰úêàg¼ûJäõò‹×àßhvµmˆìA_àY¾xMw’mZ[„Œ²{VW~&\ŽÁìßö ªbo=+ÛÊė่Ê{ùV~°?—?Ûþ£¼|ö­|ñ¢òåËû/>VØç‘ö‹“/¶±ñÝëÐúß¹00ùqWùáG•ïÞoò·ßoòáÝÏåwø×ò°ŸÉþ8° Æ;vÿˆö‰£·øWCh‰úQ·Ú†ÛGc2`·î8[Ýj•   CT"J«kØ~âG«Ë-¤ØaB‹ÉèkõRÝãghû¼€Š”:›ùÉ.rP”1:q7ÍÀ™U`osç<ãó/j Ç ÍÕo_Íùôw ¹‡]=2ò ±d€6éÕoyšÿ'üæϪŠmî""p÷7‡Ð=µý ÃB“Ïð²è@¿£1ê‡p[Zxßl—*~ÆÛïìÿÈ_½üyy˜ìŸÿ™|þÙcÀ÷Í]¯&?¸ðÎOzùð+yÝU¾~ýòÕþKA^øFìûLkÒÏïBU#WÌVωAlH,FÚ¿jnÚÇk§ÀÇïiÔ‰Å×—¹hª“ÏË;ÊX›•»™üzÿù«í¿Ê¶™|'"//#;ìçØçY`Ǽáú°‹¼{ÝF¸ç>NŸûñý‹ØÿT>ÿðKùÚþYq/=”ü ÿ&9[¶%5³n²ÙCtóX} °ßÔcþ=Ôsóü=â 8Á†×Å4äÿ¤`Ís6üžóù ¡s[ØOB£ûÜÙfˆòT/ç‰Ë®£›&nÍíQ`ô±îuÌä7\9˜(gŠïG]'`?»Ö³z%ü»~Þï·÷‚`9ÝóÌ•c‹åoæj‰k.ž|‰ÓFK™$u!J؇Hf=rÿŒW¼Û)Uôpûx)¯2v Gþsq dŒ,ˆ»ŒÜê¶Ã}íé»D>ôÿ®«ŒH#¸¥6Ë…a´q3§Ï…ˆ=Dt—‡üR¾úðGb¯&¿~ÿßäuûKy¯"ßê_È÷ÛŸKÀD^Måu7ùüïäeÿ=ùlÿR~f¿Ÿü%ÐËÄy´9!E2ª~ãš lÓ5SÅ1‚‘mFD:&æ¶Ü:Š…H!| !t2¾ìä^//sy{t3ø­Â@£*òÍö/åý粿îò?_ÿ“Øë÷òý»?•¿Þþ»¼l1è|ÁF®™èû_ȯ¿’&òØ¿”ŸÙ¿’ @ä¨`0&ÈpÃÀ ÿ?çégÍ|'÷åBTŽf MSF”»]ङiRO›t§”FB·ˆY¡çIeVÊWÅÌšÀ¡sŽI|²>´l$È׳àã²?”»©ÿ<Ä… ò„VF@aÖÉ}]¬óޱ‡¬:”Ý"u"4 Ï{n¡îS]e3 Ië,€ØòÁPé(éñ»p-¬‘Ôœ±ç‘»›5}§¹'"Òe  Wœ6böpÀöEgÿýsù±×¡Šý )+.›î~ìà˜¨¿cÿP>Ó¿Âk=V‚KV¸‘. - ‚|ò±ÃT=Í@9&0-ƒ! Ô¿·É¶¹à ÂÐO› LEŸ•ÐÃ&Å(hÏ㶨·ÙƱ6³…•ñç:ÆÔc{È?ÙþPÌvùnÿßòíþ?Dd—}7Ùm÷ÿ‚Út³]>·ŸËúìöêý¼ [ëªN§K…„þ?\?ÈÁ¿àÐ×—è¼·É#”ÈÛ#ÛupƒH5Æj´çƒG»¯Ãùö)˜kcì¢Áœnƒó½wñØ]æLäˆ %-’ÚçLø!¨™þûªÜ È?!T^˜W!Я3Á0#ø®¼MÊöï.4äàU!«»T]nvUI µ“?u M£'ýȬ©§PˆPv÷ -êzí#2'f tR(ËŠEQ¬˜9  7ÕÆ DD’†I†¦/a]äNË=„Ü®žo]|aYý¹l`"»îò¥ýB¾”oÄvs0ò(#ß“€Üë*»çO²t_Ñv÷ˆõÖtVÿ3Ü?¢ð7#IDša¥w©ž€<5Ésü÷c[@`ÎËè7ûìðjâléãØ‘4&æ‹Õ¢"º³Ž>xô*"_ëïÉWúì¶‹m¯²Ë«ìû>þµ×q_^e÷ÔâúODdËÓ®Š+hvvK+¢¦Ò߯F¹üáû—â™çø"”ŠÃÎÿîÂ* xjD©K$-UW,ãzÒυܾ°[Ý7ÂÜ>Å‹LœÞEŽ_N!Eýu#Zÿ—{%Î<gŠs¿.”ùŒZ•ÏH² —xuOô侞0‹ÍϼOĸ†:þ/µŠ<(&ì̬"èT2CU2Ÿ—s³cÛún"ÛP×v(í>¦“NßóÐkß@†­canCƒVÓ‡Dd’ˆŒ#ù<7‘yôÑ6a¢ð§·ø“‡Œæm€¾¿ƒ@ÓÝ#®v÷SﮊÅn/¡ "#ÊÓ!SŒ¸?º¿rFÉGú!4CcÁØãÚU„ð-Ý*c½„4×ê÷CŸ[%ûÙŸ¡\€2ÖâÒÊÃê• Ó¾FóP•]wyøXÙaaê«ïsÉ93þÀºøí`¢ `h„T²Û‡6Ñ… ,êæÿ„Ün8Ñ+ø‹ô&D`äÉ:øh| 5ý™q›tFåÑó¨7V»üLÐÜÀ›Cˆ°8Ä©I>//æ©AEíM^ÂX{òÙ ~·g|¦ûËQ7uŸžé}à9¡Å/~ge¬šIz¬'M?šàEKœá3…#ä³IªðY™~wLÛ°FB;t툞¤‡É!sC}·]b[~j­ @˜ ƒeEÆ´pR>òœ³¨@GkÒßöÃàmZÛåU6ö*è±7v2ãwLP>U.¡´GEüN.0ŠdŠnØ]ZÃ(O9äM'ÙÇîVK uÐíýေMt3g•~Kö“)B?ÝJ“!(•Y/êI ³ÎH0+#œÙØaö-úe\{š#mˆÇÝF[6ãý £»`¼°U»……š»/¦Çɽ´æKàÿ¾Ñ»Û8&46’¡±éNC$ŽÉ8é.5þœ©Œñ|%; r¢ <+jl©‹Ò˜¯:zU8¼ãÊ×@ñô „„šË¸u¬Œ ººâ|UÝ×{ø4=__>ï;‚¸q èa×u\2dfÍ„€—Öæ’ý™©Ù~f“/÷Ýâ3€=Ê‹H±}<&hK=þò·¾! ßçFà ÆnžÝQÜRÙUK1Àá–Úð>NmÛ"«©Iî8F[‡ “ßy;wÝCæä}¢”TsÁ yd—$÷ƒüF¾iµ!ˆ<1D¬H¸“2~=EP /%>úâðè·Ü9#¤€8⋬ÂìßëêU÷<˜‡ízO˜Šm*¯úuGKà¡­pë`8av·Æ2´×Ϧù¢4æ0f6ÙçR`mÅCjCËOÿ¿DºæO r(|’†—d;=•/š¿±6@Ó,vWcš¦ÖŸ_›¸€Äd~úDæñ‰¹MoåYáNhlð¬Bfzu%uò8AJæšýÀ¯–÷=tç–¹Ðàg@¯rR×W,–Û£¨ç"ÂÞw¯`g ¦Hh’ ÌPÁ» ClÍp%ç'¡Xè²AÒwšÊT6(ÀHÓʧ-ÊriÂL~×w^ŽIñðˆŒ=B(·]$m÷õ{ÞúÇHC'êÌøo>y`) áÍQ"GX‚aueÜyÆ ÄNSZèÝBPlî®íŽfaæjpTû¤²Bu¦GïáˆqÎÚBþKŽÂT;Üyý}‹Ã%È¢d·ãhÇ&8úsÓìÛ«lö"*¯>h|íE=S¨÷”´¶ ¥[„~†è¾þˆýÚi/qhK,'æÞP$²Kè#KWUP×s­ T¶š°¡( °>àù CkqGôM¸É"Tºu/íYÈë´b¦ØvvÍpó Èð¯\78zgÚù ±+ü žšG&ús™a!ó™H5[b¾ú®`М¼þœù?3×zh,´°ÅüF8$ZÜå…¬ºi @¯”™jÔ‹ó„@-ÁÀ¼íêæó.»l›„;\d#Lt€öîΠñü®hjpK^ü²nrÓâ-Òäf#øúÓ%îøýE\È *~hàË ëFÂ6ˆþ€6.Iõü°Ÿ×RÈ4ó14nÞuŽ3 ~Іӂ°p Ëh³×8ï§Ú mtwWÓHüa¾Ð½C Â1–xw-þnm`WÙ6ìæu§œUëjLOó°gHû ±WÖD Åe̾νQeŸ¦å§11îï"ezC[?ê™´†ØfRwr§*– àBP$µõºÁ¢C€Ü´ÐÉý;¥ü棘içW`¿BÔ‚_êî*ÊÄ sÎ,–Ò–ÞDdŽ ¡¢WËl¤I!âÁ?yB>ΚzªA5r¨ÔmüÞÝìyH+e…FNV'¹!A>Á®˜Ì“C^îËw@A޲¹ÏÛl¸«Æ"°Coœ†Ô¾.šÑ.øí¾ü{xÓ6´0ù ±Hª¡1GGµa«ä›÷;–ô Á|¼¥Ž%Hu (±åFÏ‘>Dy+™/b{è¨nÙ÷Þºº`pb‡µmt³qXºî%3n*->–6Ù=Õ³ó¶¬X.òZäóñQCôïa9¥)jN»ú1©÷ 9ü¢p³yæPù™Z>Gø¤,ˆ‰Xº°¦y˜; ø˜FŒ è¼¾Q^~óÞòŽ\”¿ª$Õ1Ðì¥#NÞjáKD>s]¸—NéxVX`p0x–=äœi{à;уöO¶nÕFüaêc0756~eU¹P=&eÖ?Só¨IÒò6­M¸6¾S¤†Ó¦D<Ü¡Éa„/øŠšß³Ð<Õ÷ ˆú¢0´=X[ãMÈ(ŠE߯7B?õ(Ý‚ÃB°ˆ¾)‰¨f½Bðjù»GDR:›ÔÌŒTÉY’h¤2H;=˜ý½õ_¸rp&4w÷6-&–úYˆìÙÜÛ2„ñ°Ô¶ö‚-#ä7rMù£¨dHÝàþÊÅtN¤'¾¹k‹H!¿ˆ›v)KèæÊTÄáWwKrãl‹Ï,,Ãl‰Ÿ=VŸ6a…}MV ÌèbÀǤ’ܳCâ¬=•ÎéïìºTn{Áì[ö~\XOÑ狀hbLͦ;sè„~žˆÊ£=|øBÞwÒ”†…4~–x;ÜBE{Ç ÉJ‹Ò¹ˆ FdC,\BTšäò\š‡d§p—øÎÌqϧvY4ñˆÃ%àÅÐ:&¡•&¸Â×Ëæ24!(&}ZîæìªõÔ³¿:@†¶ Þ(wǨ¤|¬!pjˆ£b0Ên­ßÔ¸«öŸNÈ £1är €e%qPP€¾>DöÝ_7QÝew¡þðŽ}ŒM}ßhyº ÂnÇúMº{@7ž¦%·å8‚µŠq§çêòT‹L ¤t𾘂¦!H¡„B¼Ë¹Z :ÓÞÌÓºY ýAà"ugo¬×E …&-ÿ¾Ã¦«{²PîJñ=¹îÓAÏvÕÅ3¹Ïrâ™k%õÄo¯g.î›>ëÚmýÀÎô€l!À@DJTÇZ~[ä GÊ.u´ ’Ø%l”MTwþïÄUQ£n°‰|=’Ñ;™*ƒ@Z”À©õ3)/2ã·ˆo4óüP– ùï¿9­ï·×Ou½,Ï—‰ ¦yNÎï·jJ}¿½þ]sÐgU¥Êøº5?]a¯ìæ)C{t÷R2§<ùž˜óA6tÖ ì¯ø&ÿ.]Õ~''‡snì0%XÌ#°šˆ´ä´Ž…ÜèéÆúùÿÂö·—È•0SÓø_9ó¹†wRßâõTFÑg¯‰SÜ.~C»ß—ýØîÆ(SŽÝ ðŸã^¸4ÆÒmäÄĨ7Oºö3Ä´2Zû+Ô®¤;Ä…IL»–ÑOvЂq~iDþ¨{‡Ã,îˆÜ3‹ySI¾‘+(J]“ݨy§^‚&ÿ Z°‹zÕâ~f=o >ï²ñ\ìâˆs#PÎEdDl»'ŠË Z™±gŒf¢©Ku…A†k?vöŠˆŽ±Ø IÔ–›àŠˆ66G~uó[ô7¿‹TÓ¿k}‡|CÜA–¼Êê­nþ¦XPKŸOmßU§¯zHî®O-_'õ½œ=˜ ùgüU\äS1„ß}¶Ž+Ú/ÖÒïÏàŸþ{.¼Ã¿mî ÐÏýè ¸Ž‘Ë¦;@M%7¦"­óƒ›Ä“Ð D˜Ô<$TH#a\m´ -Bd®íïHj¡ªä5…ÉpËÛu±R5·'ÆZ4+Ñ>ÑÝð±OøRˆÙ;Ód(”¾ƒ×ߣ?9µ˜ôó¥ÓöáoQe†ÄÃÎì;±M¸fQÐØ|‘¤Ì¨ÊCDÆjqJeøÿCXïðû3ð{ŸZ† çN^;õ.–ƒ]Ê"¬”ÿ†`/m‘Þé°6­ ¬#4èlB1ëÔ¬ aÍ‹P $õ‘FËÍuç_õù¯\½Þ›z^J;P}–HØ&…§÷{zR×Õ»«Ì¹£Ê¤60tÀäñP£4¸¹H&‚Í<|’†õ¡Ÿ°QŒPå´á´ ZÆ~ÎkÊvš»%Iðr…·š;-¶"Ÿo‚pÒÚ‘/…@|‹f v <4yÂŽ"P˜–YV  ‹²š$Iùà›•qY‡[}PA üæ:! %"¸j8¼Q«HG÷¹°B»‹Ö™} <Ò)ìþ] ;ÂcÇ¢ Ê›hPÈi­frµV%å1pT ÖI– çY„¤I!—dî9¯:«ƒ5Ä|ô²ËÏkGõeæ\´i+o¯™¾°t­~îJq—‹gÔþ—»KÚö ˆó$xFûž~óª¡+4ÍÚöd¿àAãÙìõ1j1aD$Lëò=eð ¬ÙÑ=!]É'xhD0ï­ï¦LSØÆÚ©âLa WR!“&¸í»hÑr³ssÞ«D„Œb׫H ¢ÝµñÏS:&f¸-[b™Èk£²%²;i…ÉDèÁÖSX=¡Ì‡é@yœDŠÚIcŠ5Ì’ŽF$\0{(l‡mI*#Y` ¼6X£ÏÒ}´S]XºÝüµ=†¬Æw7ç·YF¿ÅAGaaÁ²Õh_Ü’ Gê'FÊI‚*ó=Z£Òz,wÆÇȤ1W­^²(Ê'N„{ z‰"ºX9Ò({¸î”Vžû‹Jæå߫Þ{™â³ÂîÄ»%xÆ)±g-8cêŠIÕi=+3•¬Õ‡]æ#¯ À#Äs<‚;¢øb´ÎmÙðô¸t“¨†Î…®Wíátɽ)ZáÔð,šL*Ây‹l·Cû9-/oïÏT"Ø<…’NŸŒÛ¯w¸?ìÀÓÍ`Àð=ìÖd^±ÓEˆn‹Ì˜¬u§þ¨³±…ÉæÉfIö]î€Uë3‚Á¿¹¶!ô´¹ŸÉRcF§òïÜùmcEvsZŠ8¨%Üã\O;hˆ{U³¥Ês ؄ЋW-% cÊ\àlù+&™Ú!÷Ð(óþrF¸ÛI Ð{gùâ‚*âõI‘Ì@[2ÜhÍÇžX*!Ø,b…ƒ“©¡ý‘÷T+|OE‚ãô‰’VNì/èDs4Ì&ñ½’üÀž]oÿ: FÙÕ"0WÄÏŸÑš]aDûÆÌ¸ÐþuòÁz™IYe Í‹iLSÒâtÆk¹ËuDiN&(‹mïA¯×K¦zâ9sl„‘ж#§iÌU°ñb¢Q½iž•жJz^˜Ë|0á³õXë Îh¦=Hºó%N‡]ûŒ„Ôl#¤<•ï›TÙå%D‚|º<Ù™ÖqÁíì)÷‘ë9w§æËî–Ô$,ßE{[TŒu~[çöóàËìÚE¶²FI MaXó$Ô>?€7 £Ù8·úVŠ^[1ì€U)I±°T±RPô;mˆÎð﬑Ï\%sªˆ·6Ôwë"ðÙµòA8WéϦóÍ;Ï2  ]-O¯ÍÔ^‡š0-’Š„*^ƒMæ G+0c}ÂÚ/AZè‡éÀ h «õÇ™~‘·^xòˆHØ­îòª‚´p-mbË´ï~qDôwfš~A®©ì/.DBpj-O€`$ý•ýà É‚2a¡Pv¦Z07‰CpSäg¸¬2 f­ËÀáDÑAõN)=Ú8ökw Ïf“A)Ý„°Ô/SÀ.…rX£"y˜cŒûMí·j™Døì9,d74hÀ¼Í= Em<÷lJÈBwe®ðÏWpן¿Üì?)_ÆÓ˜w ΟRÒ~Š«hÌk Ç(âQÔ”ýZy¤YИú¤ówÈ—O(õþ}­äi‚)["i6ó•@<ñD¡öMÝÕ‚{RêóÂÈèõ½ðå׋8jvi˜Ud}Rù8*¤9&¢•Ã@Ø-UðY±Œ‹~Z›½/MÄpÒ[ÐTD 6¢#„¥0)$¥­U.–´CxáÔ4†b«õ˜¥Dø~³ÞD$3Ñž‚6ŸiDar/¥(UF­¨>d¸»p&ªdª=r… 3-+í^Å mï­\6y÷îÆ xð«„Ý5Úž,ß}qÏ~wå=¹xw¡í˜+éóáAÒ ¤‡rÖÌû%DyÜ/.ŒþÜ ê;N¶½¡¨x‚£­mÈùNÅJž Ú+1>k\Pb!ø°KÍÛâ©u“_ƒGˆhÉ×êIQ™#¦â´'R«fû¨Š@À73™¼&rÐúðØ'CÆûݵê8|œÝ]P*š`+‰Ëþ‡”l±ø¹K³îRPª[£qN5K¦=inêDhÎl¹AX2‡‹´ïT”`*“N ÍIô¢ö2QØZíÕjhB¸*GpÇ¥25½Î„Ø +1tzŽ·'ëºkG«{;}Ùn*œ5`• +)u÷½ ºìªžÕö˜\3ñÆ´2š(ð©òä ½ÆUw£ÁƒH ^ì+cg M,(ØVˆ±‡±t­‡Þqa€R£vÅý¸À†¿r’[”%ºŽãÉ‚a©GOÌOÈáÍ8J4 zòÜü$ÑÝ„‰äÁâ¢ìŸÂ'´wGµ…·(©«uØÂo¢±ü¾£ëß~½œšU°Ò ÙûW’ìê;+âx¢ÑÛâ«Km>ùÆš¤ÅÀÖehÝ|â ŽÐ`áUÉ<@4±‡F”Ûò«¿;Ž !JêÙK<"¶=ÂC¥~;J’–á“PâRsæ´ IvvNþíõ‰E]I0Ö;ȃoÙJh›xIIh0S9 Zhˆ!DÚ AÉbYP=J"—œñ‘ú, #5¸RfÁƒÐ§â À7ÓUUù ÐÞý8®€%·€Ã‚'›DD á«iY°(^¯ÐƘŠCµbý€'PÁ  ”¾¤ ™6–ÊúÂqRÖ@‡vÙpâì:ó,<³0»:Ž>ëÁ¸ªOÎÀ>ù‘ßH*»Ô©+BÊoÌçg™Ï1Æ=5!›Uš¾Ôâ 1œ›§©²ÆÏXÓú´H]x]ýஞÂý4,‡4ñ•›R´?‰ö"iXÔËÒ„li2z}e¥-H“€ 0“t %ð²XËk7;Ü+<-ƒ!wœî\ÊîFÊtyL ¦—V;{áK9h‡y‚]ÜýCÚ8Ñ_„=EX’˜Ž{©½%ï9.x#WøuNd$æq÷ýÕîœã¯~Kʆþ$.`þÀ&þÖkögð¨•Ý_»_xæúdb÷#¾ÅƒEÏßÑ“w/¿¡Ç{¹PéfO,øYÎTKíåÙ[ºXVAV¾–9CX|0Ÿ£nnK|·M$V)`¥éN¦<ê±$`ü&­z8{ƒ £¼ÁÖ¹dùòxÍiò§“ö)–tÂ%à õ…×ÍU“¨„ñ :Cpð°ðs œ OœÑiFº„ P¦&ÜAñ¼)Ù‡Oâ}ŽÑ*PKû|‹ûù ë×½mtx/ •¬‰yS¨Ð:ž›‹)F)1øR~õîšaÞv­øèßz¹Úíäùìj´­ €3ð·ö÷JCÏÀWÞ}öºèŒÓÁð¬Ôž½2pxnß¿Õiš ‚¹ðÈ@˜S®œÁ‚………äd¢£nú@Nþ"ad÷ 3èÞk}Lw|ÏÌ´'m‡²Ç78÷‚ øiÕàÇÄ£wš†\À„»©ò*€9ZD™wܷ̾øp-aç·ݯ¾Wz ¿Ú˜PöË·> “\|›%jmGõ‹Û]¶Õš½HðʾõÛt6Æ¥_-Ö>ð[*´æÒËÅsK%Ï <÷ž¾ìþžuü¢¡=ýþ3t]­­ÎÊ­â)¨/‹¯¬1È.ž5fQ åÝO)(ûV_Û‹‰]!šf{²D2,Ïæ¬ –üÔ´cñO°–Ý<ˆ’p6î©et’Ë{Wj.# ´ |BÝLžû‡M$¦O›ùô åŸGÍÝ!颢%ØñnY𳜭Πï$þT¨óÿPæ«Púi­Ã`¬«s…³ÆîBi"ŠÚN[Ù¬®M4 }‰¢—º«O* %ƒ̬öbÓØª’ÌôwÛ¦=ø¡pHöSÆš‰"yU(Ú0)S†ÿž±åcýñÙü¨§d)aL;LÇÇàÎÝšÃÕûtÿãÀ[˜7ÓŽoˆ|Ó7VêZð·uD¹ÔÌü5Ú””‹ÄæäìÌCãë)e ´¹0)>§ép{ž´¦á“gÜØÃÞxC#e•P&Ñ×ÊTÓÝÐ^Í„r^Ê‹$4A!Ç@èæ{~¯H>þÞaR8„jÒ`æN’vª`4ðàçˆ}OàK<‘)I²?Xò°€e !KÑ@gfh÷¾Þ¼bÔ—[ ‰®åóˆhUÕ[DbºÖMP,À&ää©–J­ßå „éf®Åu¾iù³9l ïv¾h{~Fç3ꬮ+ÅzBóÚ>€É7táÞ2óVŸ¯ÐjO”åçÜþ÷j]Ií7h9à&}ë}©VÅ+4*¼'!ä@¥TçPb±3™Â9f‚A –EMõ™ B“·§F&A0Ê£®ÆNKÁP}øÉ‡™ÆW⌨!P¹ꄴ}¢©b3> \ãÙ¸"NŸŠ™â‰¬]iìBÚ*Ääµ+Ïùd9æ­RÃëF«º£mJm!t!Ñ—Ò' `†ÀÖŠhsó" È„_¶fÆxšŒ‡åk&4ß:×¹¼.Ô•¬:Þ\ù~ð@Þ„3üš ¨}¬I [½7½>…Ö9xúxvÃÌKÉ}Eë•¥ñŒ¶§Fˆ›qÒ”´c{‚mhe¡1ó;)8")>YÎ/`•Ü34ÓMçíj¥½$—ëñ  Tj—¢&e£^D²ø÷4¾ëeâŒZÉe…!›ãŒlÔ‚ptð"ZØÅ¡Â<,¢J 4©RKç³6+D6GÅ@(àõ~RXø—•Iä:ÄŸ3ÜŽ -ÛÈ›@B ¯—\Ou?1›çyI©@ÈÉî1Ø“PQtÌnìC§ÐS0Š™&gó2;ŸÅn÷bd¶ŒÆ{­Ú/l3î7[¬}vp¥B[#¤“¢°´TÎÃ×{Fi1—·+ó*JÓ0à`–`$(C#0!>¨d5u«ìþšâÍê‹“î:ýÙ3×™RzfyÜ}c‘†½zù-¿“>Ö:ã¬ÎgÀþ¬üÊó‰–8-Ú듦ÛÅ÷ï„``¥1KL"¸]8J¥fmÒ=&%*¥Ã蓪 ¹ËYѪ9)k‡Ò}ʽé Os1‹ÏEÜX‰˜§” 5Y"úIEø<üg¦…§¬1-,ã âBþ6z·ì- ¿YÛ¯^ÙMÝ-ÂÎÁMh¬f%!žO[Ë5"P>oK>¾FB”Ö&@Zöd…•V ÐÇ~Unxü8ÍÏ+•?Ó³ò ì¥âËõÑý[!d ¿ùïgé;y~ŸúSüÊ´ággcÿ×  eÒá‹ôžZ()u…MÊ—¤lè[MsNe\4ð°0O:ïà1è°h¿´3W–˜ŒæHØì±$Ûxxsf:Ì~Ÿ]gØd7eVꑆ?«t_]³r‹Šòm=öÆ( K‚Îhšu””YјÏÊtЋ`;sKÝñæÌš˜½¿bŽžÒÏËÄU}l›­à[uÕ“KÏɈ1øœ‹šèïpxbU CÓ$ÿ3"sxý ,€£ýä‚ £È@OÓ÷yÑXòsögÞEÈ•h—!@ƒÉ¸¨Øm‡³Õ3 DtYë˜tû½…lvR¸!k_ðßäþ³¤ù8¦Ç S!wϪxEK¾zÿ¬®;Z¡ïL]-û,.]|o{Χ1!xB€¾• ·0nÂOÁ»÷ïÖ7¸Ì[¿ÑŸiû­Çg¬XónK+àÓªÞ –fÏHÓ  õ'ÀÔ¯©ÂÝÀaŸ³Z~ެ²qHŒ:s‡¨Ð+Nñ>ŠZ<îWÍÛìÐôú<Ô`Ò² ;i·*[BN³>²ŸœW¨#òðÏÆ„eÝômŒÝÒ؉´¯Aò\…ÜsAÕð7jEò¬dïŒûN’£6ÔaW³JãŽT“Ýx¯Ã]aí³yeôî ø¯<ï´ .þ×Nž¿å²µ÷·¥ŸtÂ’4}æ~¯s…¤X=õí³iåº>wõ-|oj’Óošc¢;©m.Ä´DÜ'0è9ß1¹™ß©äM0 óÛ;E›2¤Tr_™ ž`k‘7'„Œ—áT™v5bnLE@è1ÞÆ‚ƒ)±ŠQâ\ ­Ä‚7ùå­„Ó”®1rŸT©VAöMÓÞ '§¡sÆo%>[û7ÿcøD N ùBdÕu£¤ƒû±lkî»i[ZuOMU›þ¼,ך¶ð2=_™ãgØÄíý°Ÿ1åÊõM߯GBöIzÎè ºWÝ1ý[7—-–›Ö9küL 8ëô·˜wºPfVßE=·ã‚$@I€§„+þ Iœˈd¬¾Z.pü(:[3íÒý‹¿þ_­+yIª»‚rs‚¸HÏŽI sÐj3Rh×€©/ڇЬٕӉ„› BŸ¥kYU–ì˜ÕÕZl† ýS:òF¶Áʲ)dJmó>àßûlèQŸšP_ã)ÚF M¢g1Ž*¦WïM{“Øä×Çîåu6‡n´ðÃbì[]ÜWß}‹•°pûä²¾3ZºP±I9E-€RaðÝuÖqýÙjýoéÄ ^¡ûªÌ…À(}1kûÝ·V„ÿi9A…¢SÊáëBþz9­»GQB³êLë¬é»æºxQ—~æ(gÅxHîúƒ5BÍd`ÌçÀZã#aÄ+i°™–k …³&Á«²Æàm°àuJA <-+t+¼@B?ö›wŽòb°ö^__ó¨šLáíåI9CC¬ŽŽ"ˆÊ«%ŠŒÏ&ˆÃÒáÅ’ÂI»Ç‡ë “fóínýà7Ï=+Bé#„ͲApÕæ++Å˾¢¯ˆ¿j̳ ]•Š+ïÞtâA’®¸]ÖŠ-ӯϊ+ÞÏ„Á/B“¬ÇÁ ‰YY0fÓ™Â,3œ?±‡Ú…¶k|y¼cnjbÎ2ФÖNhoä GŒÿD%P%]&D«äß­S|XøõÆ€˜àžÌHì æˆœ¬‚TH -\:¬‚äm9F2B3­ôbv3„âñ¸D¶ðÏXf!¦å•3a5Í“»å0ŒÕ_ÖεfIÝáÊåÜ›Íã³úl¡Ž³2+ ã•ù©®»6Ñ %hÒö—[¦}ŒÙôS,ªH$7õÖ‹óÙ6ß•_ÕðWÿ†gV´1ÚD4L\8쪉¤Ë&TfN36ƒ°f‘ʾÅï å´#¸ÔaO€Èí.9x@/¾À åÅIÊ”Ç7|þº²õ0£Ó¯.»­¹ÈPg± XÙNc¬–Ú.²²\ ßxCAÙGU?æÔÚß…‘“:”ź Y„JÎÕÕÆ>t‡Û@’3Eð'róLÓŒ†Ù}¹(·Jï³íkÂàL¨Þg­¸ñÜÕ'ÝÙ¿ÏÔ]çÓ¼Á3ÆÍÊÜi‹ôÜ 6žC§|Zõs>»ÎPÚCš0%éÀ ð'D _ý(W­!Ó¿¶] XHI[}¡Ò-ÀX˜5ÏÆàt`™ty,³ÔÅc]BÙʨë C®šy¦ÊNâë·ò㉷Œ¤|°»D½a‰Pñ»s¾‘+3Õ»]“ÇwØ2€) ´eìˆX9¥Œê› ÇÅy¯½Ì¬Ž~]ÍñÅ-¹™¿³ïp[;]+VÈjûú·g¿/”äÿ l&ìæ#wX‚IEND®B`‚nixnote2-2.0.2/images/redo.png000066400000000000000000000051321315604104400161640ustar00rootroot00000000000000‰PNG  IHDR00Wù‡ !IDAThÞÍš{ŒUÇ?çÌ̽wî{ïîv³ÝÝ>°´„¾(F A0ÕÄTÛ’ ‰`• ƆMð‘£Äýƒˆ‚hQJy)A Š¢EŠúÚ¾¶Ýîv_÷5sgîÌÿ˜Ù»÷¶ÛÒÒö—ÜÌܹçžûýþÎïûûýÎÙÌ€-Y·y!š\ |O ±ûñë·> fbþ3™8×/\tÍÃyT°^Áj!ä'r^&h™Ò®Õñƒ¥¼WTàï |祽Þð(àÁ‡B`ñÚ?-”R»C×õ …¶4íím¤’&ñx%t‚ (žçŠR¥ŠeYTªU¬ª] ç©Úxÿ>÷Ý=œÇ -ýâ_ó»þxuPïJ`Éú-yP¿HÄcæ÷uÒÙÑŽÐM&Ê.eËíTl¿É%C—èš ׉:†.qc”J%êNé!{lÿ=ûîs%²ôú§ó ¶ïzàêË}p•ò±½óûúzP2ÎÑa›Ñ¢Û´v¢é"ZM^¥”$㉸Aàû”Š£”KcxNéžâ¡—0øÚ¯ŽGDÎ þ†gòl±rצÏÌƵÓz~Ýæ˜ñÔŠ‹ç绺{óè¨b;þ4àEx]h¼!€ëùØN… afI˜Y%?jdû®Ku­Ø1q`Û gÐDz/ý-j{&^)…dðõû7ey:ðéTâÞUË/ÀÌt²ûp•¡Qg Í€§óz|ò™Šž !pëÕš/$ÙBé\wOzî¥Ï/úüonL@ž |Oo_87ÄqÊàÅë\­ú½Ë—.DOäyç`ËŽ¼®šž2-^oš0.š ð‚:õÀ!•í ÐÑKªpÁ]K®Ù´H5“X¶áÙ<‚íé¼Ôu„œúñKÖoÉ !»dÙBÐ3¼s°Œï«&ïN…Œ¡kdÓ…\œö\‚®¶$ùt‚L2†¡kѰVàBˆÐeÑ<ò©Õ-ŒD’Î9}˜¹žo\ô…-÷Y@[¶a[ØžN¥WöôöR´=¤4'O½Õÿêw z;r©Lo¨´‚nò™m™8†v­†ãÔ°ªV H˜IbzŒd<ާ$–ãâÔ£$Ó’.TH(š×rj$ãqººû>.Ö_¸ö·ï”^½Á_Ò©TÞò°NÉdµX¼~óêD<¶váÂy Œ88nÐ>eêÌíLx'FŸ(aY•áÀ« Õ«C;20’h±ô"#žêJ&Ó¤²fÛu壷IàÍš²\—Œ§»§—ãRÜÏönȤR=s{{(Ù–[ RŠé HÄKÍ¥R“S‚Uárç31æv˜œ81Äá£ÃÔŠÛÆ<ûÈèÛìœèåF߈.\³ céµ7W¬ÊÕÉd3Ó”:žï¶j¦…T‡BÆdΜ9”Ë¥žî¹ÝmËõh)œL`ɺͫâñØU…B{ŽØM Áw·Çè?x€¡¡ÁþÑ]Ý5ºû±À8Pl ÎT—c{·ŒíÝúŸŽ‹¯]Ú¹ìº;ÇZ•më&3q}‡@©) Y…LŠ–Ãœ|–L6CѪc;¢)þB ÑJ@ñ­žî–+([^Ã;™”Aw{Œýý:ÖÿêÀ+wþ¤6¾ï0p¢ ¼Ç©•T¥‘·¶”FÞÚò¹Ekîþf üÛòm]¤Ò9l·†¯‚FÖj+¥ XuѤÀvý±IÌ'‡Œž®íêšÃè„Ó©IÁÜ“cƒÇ912Ôï€! y~º6@EÄ*Àð¾­7o¬ ½qËÄØñŠk—H› ¤”ÈÉÌÅ”ˆÞ»ž]÷2ô¸hJ¿âd/YÿЪ¤Ïézœ‰J¥áÀ®v“š]eàØPõð ß»­6¾ÿ0LDÀÏÆT4¶xàé[ßwå퇟~°Òº‘f¬b7Ø7@N]дIR I²ypC»¬ÎfRخ­@ØŒe“: P9ö¯_ׯ÷ŽŸ#øf ëÈËŸ·ÇöÞ:>>‚!ëäӉбR4^²éª u_áÔž¯N" Ä%©¤‰Uótä”Ë%*¥ÒðÀ+ŸFÎ|3‰Ú¾'¾¶É.ùñÄØ0S’4)Ð9 ¡ÉûPS“J$ â‰N=˜ŒR¦Áð‰*Çw<”"ðÎy€o)§:¸ãnÇuJ5«Dg.q а‘h›W¦9+é9ßL˜LL„ÒfŒ p)WmFß~x;a¶©2C;©7½”õd:•̦³9Æ,7É4:’7ÕškœT„œ'5ßwAqr¹Šc½ií!Ì6î σÚޖϯ̷¯úXŽlôJLµzujm! ¨¦YÌŒ—ªÔ«C; ¨Í„÷'Á·ÚVæ íŒUëX®…ÈV¢Åû“Nj%R¨¨wˆ:¶mcìÞÁT•ðím+sm“àý°-nŸnZÓêi¨¢¨ÜäH?PøÂžè?:VÜôRAèù¶vÆ­üdú'¯@«Z¶‘˜[Z ¥üÿ•+Õ+ ÃÄ 4|ߣæ¸õ¥Ng\\ùz±Mc;Ó€ÓiÜ„0ÓÚÉD×Å`d°rÐ$ÝŸýõA:q:°`â~³{{ºß~?÷ûíî#"T²éë}™ˆ>PBêõŠ:v(¬’r0ÀÆXœˆ*!õòFð ûs@Ï¡žG8ç#r0x(žzj7{å•cI’þ,?y˜8¶5oÃñïw×ÔÔüòH_ïoå` Òcm€Ë˜››EuU5Ž︧¡¡áçüœ ly(‚)LÌDf`˜^ýîkÞööíÏqÎÿ%_ú<p l$îÌ![ÄK/¾äùÚîÝ;9çÿ–ƒ®Ï+@6DDB€a~awîÌ¡çÐaéÀþŒ±19ØW‰Ý¥:å`  @wîå µ½ý…¬þìÝB `Œaqqº®cïÞ§]~¿ßwæì™a9xY ©JÅ8çoèbŒ ÆŠs—Ëeëã` `Œ£ºÚ›fŒU `ÄF 0$ ܼ9‰®Ç»Ø@ÿ€4xrpPÚ”úëõ”܉ƒ/ÊS‡{^hmmmu¼ÐëõÂãñ€eïr®¦§o"™\Âr7ˇÊåv£¥¥Éx'Oh‰DâDô%¤šðx%ÌÎÎ"ûÊý¬kÜn µµµp»Ý9q,ŸPŒ±pËç ÍÍ-€“'µù…ù!Äw”º´§IL`èÒé2™42™ 2Zš¦A×u躎Tj wïÞA<‡išÂÌN\"Ȧ¥Í0MLMß„–IcàèQO[[Û~Îùûr0ÐX €U"B,¶ˆD2‘[u …Z y *‹ÌÞÆ½h½½²g×®¯vç–ÙîÕŽ_±e4cii æ ñäËî~z‘È ¾ýüAé™}û¬eö™Xûcv,C:•Ê #‘…1Íe±¦Yxl³{Ñ(nLÞÀž=_ç==‡·p·å` ¸iÈG"‡aè‚ #P"}–Í„ D"މëèìÜÁdùˆ[’¤?ÉÁÀO×°î·"B<ω&Û¼ T¬Ð(>Jabbõuuèïïwù|¾_éëý ¸6%`RV*­ÃtMÃÄõkpq7ú¤ºººÎù›r0àÛH§S0MTœ6ä`Eç ÃÄÿ]G:“F_°ÏS_ßð¬Ëå:U>#¢ç”ú§k6< ë:$·´2uŠJÛcíðûý8sö¬‰ÌDˆèY%¤N•»fS„0… æÎ9:;vÀãñ@}]Í,,,|$„x^ ©ÑûùÞ0Mœ¯\µÝn7º»vÂ0 œRNe’ÉäÛBˆ^%¤¦Wã· @e¿3%"˜fa¼^/žØù$>[ü CCCº®ë ¢*!U¬Ö¯€$Iðù|«õUPÒé4Lså –µÁø|>ìì~‘HÞ¼`!~¦„Ô_­uœ²)ﯯ㮮&;S!a¡²|“1ŽkãˆFJúõûEwW7> ‡éÝw/™DtT ©'×s£œæÞ8÷FÇzJ’¤õ÷xœÎ7Ô7 £££ŽŠ±±±Lng-cÜÀ4ÍCÚ­{‹å^ª¶·kt]%Q:…›·6cÛ¶ŒŒ áññE": „Ô«ëï „Ô€+ku&:koߎº/ÖáüùsÚ­™™"Ú¯„ÔéïPÉÂ9ÇŽÎÇQ]]×OŸÎD£ W„•z¯þ7ÀZã…Pþ¢¤“ÉäE!„¬„ÔLÅÆØáD€×ãÁWžÜ…x<Ž¡¿iš¦ýžˆ~¼–5~CrÇò÷¢ùö7öî©jim@hkkÇÔÔÎ_8oèºþóÓêÙߨb§Xñ@„UÓßDʰ¬Z^Æ ¢Ñ{d€p8LÃ#Ãf,ûÑß.\< ¦„p;€@Œ1a;¶ÌtâZíÊ·ÕÅí ©TÊ££ˆðø¸vûöì«ÿüÇ{ï—/P\ÜfŒ™VÛ%·ƒpW W0€kšî€OÂáØxøÚk]ýø¿÷_J´½¶[¾Ï‚!"bDÆwïÊA–ƒÉŸãœ¹ŸþæÞoMOÝúxzúÖ<ì/Â+E›eÄ–3Ã~l8 ®D?_­˜ûô—êÓ­*-w9+aöGNûgM[ì~ŠS¥”9Í•}n "Á³?×”‚*¿Ó\°/¯(ãP>÷Ë¥–ND(ñ‡m2»‹:N^-§(üíÌ ¢`ùtˆŠD`ïeÿÙ#c‰³ç´]t)ávñ¬Ld–Ò‚Õ§Üæ¶æÿVÉíÄNwÜnV YNXAßZwâÿì6V»EñIEND®B`‚nixnote2-2.0.2/images/screenCapture.png000066400000000000000000000002361315604104400200360ustar00rootroot00000000000000‰PNG  IHDR Ùs²gAMA† 1è–_UIDATHÇíÔ± ! Ðäðÿ97¸U…”»Á! >…)”ÌaæYGöÙÐK€ªanQ.0êÞ{=Æþ2ûàZeBߪÜK€\ ø*¼Íò q jjêRJ1µš*$o—zYH!ú[]ÿxÎ'UåM.¹8¯*>ò” x‰ªœïI)NœH/:¯*N8 È^s&0`# -¾mÜj>˜›Ì¶ŒØVD`¦CFÌÝ…{Eñï²z÷>}ãp›ý f¦@‡À«ZüIEND®B`‚nixnote2-2.0.2/images/spellCheck.png000066400000000000000000000277361315604104400173260ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aËgAMAÙܲÚ/•IDATxÚí½y×}çùù½Ì¬£o4ÐG7^ I"!ˆ¤QE™ÖØá‘dz(Ûãýc¼kó³ãõz¼1»³{(Ù³mRK–l]¶E‰’HP¤‘&Å)P¤j’‰Ð@ßG]™ùÞþñ2«²ª«p Gį#£²ò|ù¾ßßù^VÃe¹,—å²\–ËrY.Ëe¹,—å%r±ËwÜqƒã8ÿ­Î®?Ü»wï~ÀDËe9‡â^ìD¢D¤SDvÖîÐZwïܹ3ûöíÓ€¾Ø½”D]ììܹSÑ€Œ"Ò†a¶X,zÑq—åÊbèP9qâDCcZÇiniiIEÇ-·u)Èb ]]]J)åÕÛ'"-®ë6 …TWW×¢hï¥$‹¡CennNi­µ%cŒÉ8ŽãÌÍÍ]¶çXEØÙÙ)4 £1Æ\Çqœè¸Ëre1X€“Š1F\×½ üy’EO€Ër~å2Þár™ïp¹L€w¸\&À;\N; ܵk×mƘ÷ŠÈf ÃÓ¡”ÚlŒù`Œ1‡Dd_†>öØcÑiçeðæŽ;î¸A)õ+‰±ƒcÌ”ˆLïvÜyçkDä½ÀfàúÚûGßü ø§½{÷Nž¯~8rÒôj×®]·¿%"¿u&5ÆüM.—ûÃ'Ÿ|r;xs²PwÞygø€Rêµ;Ã0üc¥Ô#ÅbqÔó¼MJ©_oШN¦1Ïç?uší8©ìÚµëþ¨/Nyïšv|øƒ½{÷¾ñ˶á|H]D,ÿ™>l̓Ok­ïšœœ|î¹çž i<ŠwZ~OD~û,Úñ¢1æw'&&~zŠvÔ•Ûo¿}‹ëºùËô…ÖzãìììkétÚß·o_È""A½@J¥Ò[TÌÛY‰ˆ´+¥îìì¼yýúõàpe\¥”v6àGíØ("œE;d×®]Ÿt]÷±_R^*•JS®ëf°.wQÅ]õb\cÌwEäc‰9ü 0fŒ9 "»Ø "7-¸H;ðç+V¬ø €ð ;ð¥ÔÍu¶¿ˆ:´¸VDºê]#jÇ÷V­ZµiÅŠ£ûöíóOÑÙµk×ý"²çm{ÃsBDÞŒ6õM"rm☧R©cŒÎårÁÖ­[ÃÈ- Y@€xl^D>fŒyøš1fXDœ¸ƒŒ1ñ¾ª”zÔ3üGiªéüí©Tê“{R©TþÀ†30õàc¾ |ß㎈(cŒ¥µÞ "ÿZDV×^GDÚ<Ïûl±Xüõë×›áááFí]»výj#ð1óÀ#Ƙ'Ed\DÐZ1‰cšEd p ð¬ˆ4•J¥9Ïóœb±xa>…8µT>ŸOe2™à%àƘYcŒkŒADBñ1%À7ÆJ)mŒ™‘Ÿï‘Ú¡]ÏóP&“ ÂC‡%;^Ö­[çWˆÈ¯7j¨1fÞóDä­5J)ˆh3ÆüÈÓ-"« +²^Dö+¥ööö†G­õÅrÛm·­uç»"’©Ó†CƘ?‘ç<cÀ€PDŠÆ˜ƒÀã"2 äÃ0œ÷PNåƒkå!à-cLÌA0çºn.‚¼RÊð}_‰HhRJµŸ2Æü×:.é¦T*u•ˆ¼022’$£¼ï}ï[+"¿Yü1­õ_*¥fœ1fVDæ€yß÷ ‘Bèèúõ‡(¥ü0 sžçåµÖñ¼ÆE#õ,€ÎçóÁüü|¾¹¹™R©Tð¼ 3Œ7Æ<Å “Àx“ÀP(•JÁ‰'t6›5ù|žééiµlÙ2åû¾xžgÆÆÆtD´EWjT ÖQ´nݺÕoii1ûöí‹çåk(—c€ë#³7àºîZOîtÇIcÜÄÔ®Ó錗Œ19`Fk=Y,§ƒ ˜kPTQ6l3™Œ6Æ(àec̨ˆôÔ\óJ­uÖ÷ýT[[›³sçNíyÞ–zÙƒ1æéÈ×Ï“¾ïO„a8ã8N>J'ë*ÃÃè7DYÇ¢ ÜØØTßzë­K²Ùì¿‘"ò‘3½‘ˆ¨0 =Çqœ–––3™Û7­”ʳZë¹l6›{ôÑGKÔïx}àÀ T*úûûçÂ0L;Žó*PEéq]7£”Jù¾ïF)uCƒv0Æä"L{ž7ûÖ[o冇‡cðõ_òsÑÊ)ƒ¢²ðŸžéxÀ‚±Ñ»ò}_åóùÓ®†ccLÞ“w§pøðáFZ‹º»»K---yl*»cÁAZ§Â0ô”Rn*•ÒØ‚V=y(ð Ãpnnn®´U0w¶r2 d×®]Ÿ‘Ÿþ²àƒŽµÖJk-;wî<] cJA”¦¦¦‚®®®Óñ£Úó¯á(dÔI¬×“K¤€ .©%€k?©sì<ðÀ+Ñw«]ñ¢£óÝóÔIgªu†““Fê,õ¤)ñ|3’—GWð§À{}wŽðgœƒ`³– øŸö:Ç~x-ZOšÅ H%Öƒl«³m¬æûÉ,ÓZl y1Eöö1¨¤l•w>ÜÇÚ»Žð;Tð¬Hô{±)¼§Îq/¿À=ŒÇ€#‰å(6.cq`Cm‡¨¶øqƒó·sqÇðeoƒŽâ¾æ«®¥i`=N&‹§øÄwúøVá\Îò•¹Z¸ÔÞ~†ÕôY,ÀÇ£åDô}˜¦£cÎåx÷Ú³í8le¯­Î¾—©6éøyƒël§,^èwËà·\½‘Ž›n¥ã–ÛIu/Çij¦Iñ¯ÿ®—?Òœ% TÍúm Ž;„ 즰`cŸÁZ„ùh(7qîäÜÚO7z¶Û`ßÕ±‹Žžm_c»ßŒ:8&Á…2øn[& ÑŦPÀíèDe²8M-t»üŸ_îᓜ¥%¨%€Óà¸,È3T@ÏaÁ.Q¦ýÆ9îˆnà㜙*l°tK}¯`ÝU‰ê 6þ©Áõ~;E¶¡ÈÃ+ø3GqŸÛ¾'ÛŒ t±HX* J@•Éà4·°ÜãS_îá·±$8£öÕº€FÁΕX°c ;ÏÔœ¿øÏç¡C~; ;Ö“= K¯5ØÿdÔþdð/ßÄÆ1µÒ|ØŠ%Áùtò½å|ÒþÄ[²·¹”ææ­(p2Mˆ(D•þåH g±]­ÜtQ­éµQg'°—úÄ/+-À—±.êTZxðƒíxø!6{IZ¯8×/b³zÒ‡%ÈG£N>tDËéŠ<ÜÇýi‡Ïy]8-­ ¢(E03MX,‚`­@´O¥³8Í­,÷øÔßž! êù³ŸÔÙÖ üàÚ:.À'ç€Mgð°µ²ªÎ¶|b½5àsÀuðà‹'iGø*ä8^Iº/KŠG°Å®zÒÝãQà·uuúc p/0¼õÍé¸/y¸û=ÅžÔ²nÜÖ6U^Dº˜G—ŠmÊÛA”µ*¡ÇãÓgB‚d ކÿ_ ÞhßÀw€§°ÁRˆÍvbgÃ&e”š8`€“K=<Œµ>+Û~ƒJœñ£ès§Ö´¯ÃØXfK€¸®—›cr<ۨͷP_¼€µ8ýu޽ øœÜzÊÃ}ÜŸRìIu÷â´´bŒA `£5„¹yÀhx)Œ_BPörJã¶´=>ý·=ð±QöPß]—%ôÅuüR´~3õevtí=X¿\Ûñ{oaƒ°¤La§vÍa5-î|Á²õ6lÊ•”D$¸†ú&½?Z2œ\¾ˆ%Ë6{™Äº»•‰)ɲ°ÁZÂuXÓ*é¡1›€/Dëõª‰ò¨5û{Ò½}¸­íHâÏQI‚ܶvšÖ\‰×ÑAib "rH´_¥R­i6ÁîÊ2ú÷ó¼ÀI*˜IHô=…­øµ×ÆÃ'åo°¾z)p{;Àw© ÓWÑ=oÞUsÎÓÀal‘æ:ÎÌŸ¼üÑ.ø l½bžŠv$%&Æ’À`‰àÞ-Hvžä «vòX÷{{2½+qÛ;¬I)Úu˧¥•ew|ˆew|ˆÖ[QŽKîà/ ŒI`›&$¨MûT´xØ€é ¶sªÀî)à¿ÏDçÎ`ƒ¥¤tc5qŽjóà¶:øQD€9¬ßÚåæS´g ›|[³˜§RØÂj±Œdç$-ÂëÀ?GmîÅjôéÈ|Ôþ¿Æ¦žqæQ7yl%÷§ö¤ûVáµw–oi§ ¼ˆà¶¶³ì}¦ûC¿†ÛÞÛÖAË51…‚%Öi’àZÇ~çX=ÔsŦsK±‘;p5Ö wb]À(•jàPô°Pí㜨³RѶ¹èø£ PüÄqK°¦´ð©¤ø8…­xe°yMtÞ5ѽ_ÆZ–W#Ò˜è¼\DÈdµ2Gcíw£{´`-NgôÙõMOÔÑqqìòRtÏ7#¢R=ˆž}2ºwðÕÜï*ö¤º—ã-ëÁ`ÀŒ6­GŸNs wÜMׇþâ¸èÀ·™ ýG¿>ȉGÄø%(Ÿ«Ak‚¹Y‚Baæùù£qž¡byM- âšj¾5zØ8hÔ5K]8ŸÐ,«©Ùèœ|üq¬æÈbM岈t͉sbmu¢6´FÇ{T*_ÉÅD÷/E÷˜‹î—©ãû6 ŒâX(µ£-R‚¶è{†…ví¸B¬ …NDm(üp%ŸH)ö¸K–‘^Ù_Û¾m­k ¤jn¡ó¶²ìÇÁÁÌ$" §ÍfS*qô›_bìÑÑ¥Æ$8 -÷üþṡ$ êUþ’“?Cª %ɱq?ºP!¡eÓT*…Åšcæ©”ãà+ã*dÜ©±æÎF׌ÝFò‚ä·-Žâç¢óâ€/?ÏÉÁ¯}þxRIüÉ%¹=¨ù^H´?®žÎÅZÉ'²Ÿó–v‘Y½¶ìïã¥ü'‚ÓÚFçíbÙ]÷"Ž‹ñK3“ 5& 0¥ÊK#Ž¢ùÊëÐ¥"ùC¯a´5lq©R)\7›^’iíû›3’FÝ:kO­&e© :Äõƒ¸ã T*…1»Üˆtj˜è˜ä´*“¸ÆL´Ï‹¶ÇéGǺ‰ŽÍ$Ú9&C‘êÊe²èsZSÊDHÖæ÷õ¨¥Tãc2äãv<¾‚79|Ö]ÚMzõZ{xt–˜Hq£^qZZéxï]tÞùÄqÐ…ÁÜ ”]„Æ„!þÄ œÖÄuè½÷ã` c?x]²ï ŠR8n©Ö6Ôääv¬+§¤jÿI dužJ=›`ø,•¡ä¸ºV¯Œ iFcÂ%ω¯|¿ÜßÎ=wd(~kžáD{æ퉗ØÚäëÜót%nS²Š Pã{ÇKÜÉ6ä€âã«ùX«Ëg½e=dÖ\Aürµ "ÿTÏ Úß};w~QºP ˜›¶ Ñf‰×…ÊKãÐ|ÅD ÷ú«­qSMdš–€(Ò)õÂã3ùƒ±2¸§xð$(õ†D“T[äè&µÓÆtÍqÉ)_:º—Ôì㉕üVÊaÀÕYøJ÷||”'Ç‘¸víHßÙÎäIúõ˜Iw•œV–<>nƒÌ“«¹/£ø¬ÛÕCzÍUeãE´ÁˆA0x=½´Ü´ƒö÷¼??G83câ´®&1øã'p;:×¥ûî_Çijaü»ÿˆ')ON*E*u+¶W|ç4: Ù©É8 Öˆò[±5–ìˆz9Õ½Êûä*þSÊá/𮏖%ïÿ¼eÝ4þà»={0Çaúåà4îw6dH½É~¨â8Cÿx%÷e>çu-'³þêDzW­õ¤zúh½ù=´ßzg~žpvºœ ”}D"S "€Ñ!:?¤R€Ð´ö*²Ë–S<ø¦TŠž@ãú¥ö/Í~“(ž:êiC2ú?ßsääéÕ zŠ×´îjÚv¼Ìº«É\AáÅç2KƒÜGoôØ÷PŽ#Tüû…šµ[¯?ªúd¨ŸûS.{R=ËÉ\±¡\­#±Fô™êî£õ¦[i»å}ˆ«ù³ÓÀÖÔÇÚ»ò÷òvM˜ŸÇIgqÔò8­m½Ž)QxÅ|çOfrß8èi t&¸Ð"O÷3è*îË®¿šTÏr2k®ÀIgÁh™IôÔxziXºY„oÿ´HŽóOÈÓnûP?÷§{¼ž>²Wm¬DûªåÇÚïõ,§åÆ[i}÷m ª |Sã.’¾_ªêÚŽ HÑG¥RBª·Ï’ààë˜ÀÇ‹¤Å¼òøLáe ¸X O÷3èI~÷rDn[è“›'%Õ݇Lwm’â|û¹ÅAy.?Õ»’ìÕ)ieaÐçu/§eë-´nÛ iþÌT•ŸO…ÊÚžØ&ѱbÀQ®µ¹y$•FR½Ë#Kð:Ÿ#åûÁW'æ ‹‘òL?ƒ®p_vý5¤ºûPJÙ!ÏT S,ÎLbò9”ëâuvcFGº®uõ5{¦ùwú¶ßa×·’ì5›µü¸ROùÓëî¥yËvZn~€õù3S€µ®¸€òRX+!€£¼Ê>­Ñ¹y›ˆµnäÔÜLëçOÌþ‹ À±“D)›+çç0…ý] þlþ$0s¡ PÑük·àÄàKBó=¦7‘Y (pSÈñTiƒžD\¯w%„>*Û¥¦+[åzx«×¢ŽtݬòwjÃ?)œ5 äÕ5¶¶ïõ_AöÆ5Ñ~b€G îÒn27½wŦT@OžˆÌ¾.kkÙ|'ý~æÇ¾ÜQBÕ×9V‡VóµÕüéo|‘àÄ(¥0ÌÿñáÙ$øñÄØ).° —®jýÏáRë¯Áëè¬ Þ¬æ§Ènº‰ôºè^ÿW1yû~ˆDs5ËéÐô”u}«! QÙ,ø%[%tì‹âD–âðë]½pÅg&ù>g^(’×"ðSW’¹yg•™¯Åëtv“¹qÞòU˜ü'™v®E©ÿ¥;ý¿§;–¬r»ûpÝ]ßë[m;³T 4üsÈçÊܑ̋•mqÁÄ g&ÇÁ]¾ÊVÉ2‘;(棘@¡ZÛPÍmd¾±ý£­Œ~~ê¤ÕBy#Ò|oíÕd¶¿Ïúyâ9ûRíwv‘¾a;ÎÒLn–ptÄj~b´®ªJWûiª}ºƒ²ö.áë¥6hŒSÌ1÷_&ŒÀÿ÷‡çN |X8)ô|IôÖ‘qÝrŽœmj…«7âö,GD0ùyŠÃl´¯”õùqÇ)i³)o‘¨òf;0xãëV®¿„׿ž@9èɱò Þú ˆR¬yê<=€Ù~°nµP^ZÇ–”â/½õ×Úþ¾hsESã`1HÇ2RoF-YŠ™›&=’0û&¡üío7UæÝFû±Ï•Á:šo  Ì}ë+è±ã”Bÿ_Ï|hüƒçZ ýïºR¿™íî]é´/Ay)R×m!Õ³#‚Îçð_y“›·šf㽪áS«ýQç… `µazÒ¦†ËWc 9TK>¦˜·oÚ*…ÓÙó³4OŸ¸åæ O|s¶ê­ùÅ:nhuxò Ike’® ¾ùwDEšŸ,éÖ„¢}…¹oÿzì8ÅPçwÎ1øpÿ8òˆ8Í­¤®Û‚ZÖ aˆ)_}/ŸÇ˜£%ê@FÙOe×Q±&i»] ":Úo"×¢Áׄ¯¿Œ…Û×>>‚¬ZK¨fj"j~Ï]˜Ém·Êñ¯>ÞAÏ—ï§®¼®=µã®J`Fd…¥bªöNÜ [¦fôÌúè[˜RÊËI‘g*5eK_ŽeʦKLM1Œf÷˜DvaÁ¢)æÉ}çkèq«ùx8VàÇšy!Äý½vºßÛžúýìG>ŽÓ½Â35AøÒ󶂸¢Ð‰”GLµ Xü#NL9g6ó3ˆ›Bõ®°šÙÜA J…(ýÜu×`FÞHo—ù]]ÿSúªëÚS;?Xõ¶N2Ç@u,Žz3’J£çgÑGA1_gDÎD濼IÂìÇVÀ¾‘+UûLRã“æ¿'ÿÐ×0ãÇ™ñõÄî‘Üg¾=œøpá,€|dYv“ÎÒn(1Ó/ýÌ>œ#VÛÅ!%B) Ë_2U*§€eב•0Pñ~[c 7Gøú@£–÷cÆŽ"+ÐJa¦'AÒY2w ù‡/\ã,_·óC‰VÇ*L9(‘%ËpÖm@”ƒ™Â;lÓÕA!ï™c›xV:¨!wídƒ))|ï똱÷õÈ=ÃsŸz3(ÿÖÁƒA àttâï ÕÜJxì°_)0Ž[D)Ò¢(i;­ßšzUv eRˆÆ…ˆÆèJýŸ˜‘;0¹9Â×X³Ý×-“@OOÚÆe²d>ü ¤µ½¦ÙÕ9»ô®Âé°ãý3“„#˳r(¿Q?p%^1µ. .‰Ba¢wù€' ñyÅÅï3~‚¾¹gxþülY÷ŒÁ‡ ãð~w™sã² ø+LŽY“ªuŬÇAöEÀAë°Üüª, ÊTtžoOv\bÝ/Áì8.jY­ ´¶Cà#~ÑšöL¶aÀ'"8ËW£úúm¹ufýÖH”ͺÈåkKµ± ¨ÊåA‰”#}‰Æª]Dlö ”þ&zÜjþÝùÞ Ê`O&ÀO¾ý|ZSâ.˜h§_0èñQƒ3pE%ÐSÖ`âÊ—Á×ay›U«‚¿h¿èèG•,Áˆ"~D`~3üsŒÑ¨ÞÕ˜©1œåýhQ˜™IÊÚ›|É+ê?Õ»µ|Æ÷1³SèïCVJÒå _1eÆ—«`¡”&Ô‰ `%(luƒ?ÿÔ0cœðÑ x3`¼üØ $xã´Æ9.„P€ûÙqÿÀ}έ®ºŠüó¨ö%HTŠ/k±1‰Ok B]9¦b¨tZ²8SšJÞ`+ƒ3“ˆ—Bº–C©ˆ´¶!A¥b4µ2¡CDP½«,ø¥"ÌL`ÞF‚À¶¡ürFMŠVóO\ Àh”18Bù»TU#}Åá‹Ï<ñ&Ÿã¸¯G>P ~ìó“àŸñÿ3¸P.ÀÒŸ†>Úæ¬_êÉZòóH±€j[’0ë¦:Ú€tD¢·^*æ?ö™Õ%â„&™ÊõH\¿ T÷r(•–6$ô¡T¬Žü{V¢zWB~¦'Ї†!ˆú8´”HScpFûåȾ\Ö ËQ¾~í%‚'A~ŽûfäÃ…-?6ûÉÝ:#¹`i ö]úÌç&‚çïi•nO ŸG<•i".ÄÅf0ö©±¶;a²Ã‰ÓDý„%C ÊÁV¹ Š 3àz¨îåˆ_Bš[‘ÐZAõ¬@õ¬€ùY˜ÇzÕj~ ní,£ËÄ]Ñþ$1¡Ê·WŠ<Ññ£‡ ~ð úõ—Á·¥äQߌÜ5\|à`cð“šÆr¡,@òW@¼ÏO†ÏßݦVõzÒof&׳AT\@BÓãuÐqð˜(’$S'I-T‚*D',ã"Ý}6 ln…0@–,Eºú0³S05†9øª}'¡jdN'È Ë.!YÂM’Å…DM bDÌá×ÑÏî#ü—gËÀ ¨¯GÞ?\:oà_(ÔAõ…‰ðù·©•=ý±I–t¦ œ^'bÛÉ ƒNhx9‹(‡„v&×ñ@\ö÷K˜™ K‚¥Ý6ªoiCÚ:`z&N`ÞxÅ’#f5èѵtµ;¨Ìå×8åx$¬Œêi _!üçG0¯½d- •ŸuõõÈ®aÿ¼‚ƒr¡Àx©…ʯu>µÞÛ½)+;ÔŠdɲèwph¾ªDóÑgˆ½i›˜ˆÄÇI%¨zA#Þ†]û=Û‚\¹YµÖ†ã£0>Šyó‰•Á)k¹þäÃÑ·0ÇÞ‚£oÖ\×ý>ê3òÞ þÅ À)H voΪ•Ô-:!“EZÚ ½o¡!¬»\ªçj’¤ BŽhIù³ü!ÕO’œ•0> ÇãLŒÂÌdU2~2àŽùŒì/(ø5OsA¥! ~²^voΪÉ®­è^ô=Û -mÐÔ‚4µ ›ZmLÇ ñä ¥_e j PE†¨µàÏNÁìff f'1ãÇp3™Î^¨O„£¾Ù9¬/8ø5OtÁå¤$¸>+;_>Õ$L·:Ì4±¼ë!Í-èæ6û½Fëë“ÊöÀ‡¹{ÓÙi[š›²sg§ÌñDÄf2°`‡I”‹k‰pÔ7#;†ÍE¿ºO/Ž4$ÁO×ËîMYv$+ƒUÀGÙAÒì¥&ð«¬ö“LÖN­Ú.v<¿˜¯nZb2G•ÄùåCÉ4ÛvÔ¾Ÿ_;—?A„£¾¹u˜‹~U¿\D9 Ø}}Vv”/§‡ª’êÕ@çså ™’¸Cª´]5öÿe1ÕDHÖš[m»€_3B˜( õy÷E¿ö)/¦4$ÁóëÙ½¹Ií°ïT/[YH‚¹(æ‚^<&P’ ¿²$H¿©¥<*YýææÕ­Êç±b0²ýÕ‹gök;~±Hc\íìÞÜ’ÚQ|’" ×g&!?WC–ZÒÔ!€$œNÙÀd›+àWMð¬£ùÑú±B0²ýåâKüø“4&ÁuÙÝ›[S;Z€“`zÜúõZËÑ´ Ç«òï 5?éB þ‹³‹üFOz±¥1 ®oß½¹-UqIó_ãÊ&fÊ’ÀqNB–Ó!åÑERp܃C ý¿ÖËG¶ïŸ~à`I/ðOò¤]“àÆ¥»7·gwT[€:a’³Ó•÷ ¥žåh@€øÍ£XŒ±•BÇ©ëÎ÷¯€?4•úÇ¿þFAÇÓ¸bà/*ø‰']”Ò˜ïêݽyIÓŽº`ÖšöøsfÂÖöOI€‰#å@ÀKEѾY¨ùuÓ?ÍÐDnhÛÓG¾Hõ¿®i4“ç¢tòb–Æ$رºšu]€ªunÚS>6™ $HP¯kŠÊÿM¼èàÇøv‘Æ$øà¦Æ$¨.kx!‘ DBMM@Yí¯«ù5þ?ÿøôжï¿0Hõÿ*Œ5?ÿlþ}ÍyëÔ·“4&Á=[wo^Ö¶£a:¸ ä‹Í –ÄÇF·‰ã ¨d Mþèäжïüt…àORùoi‹ü¸CßnÒ˜¿ú®Ý›»Úw4La¡%ˆÿŠ$Ÿß¨ö_'ý:61´íŸ¤>øñ¿Ñ *]òv$@Üîú$øõ[woî^²£Zû븨|Ñÿ¶Šç&5¿tjÁ7 Úö'y›wäÛU“àc·íÞܳdÇÉã€dÄñÿÞ­kö¯ž×Vÿ†FƆ¶}õ‡ƒ¼ Á;ñí,Ipß»7÷.­OêXäzå5Þ:ÑüÃ'†¶}ùÑAÞ¦àÃ…|¾¤îlãÿñ³×÷ß{õꕽm-ý¨(W(eS;åØu•X—Ä÷r‘É©~ÅБ±¡m_zd·1øpi‘`ÿ/öß»aÍÊÞö–~ׂ/ªÎgÕR |¥Ð4täÄжÏw·9øpé‘๗÷ß»aíÊÞŽÖ~ ~DÕÀ ”‡Žë@)†FŽmûÿ¾5È%>\Z€F$øÉý÷^·~eoG[•Ö; ä˜B’ ÍëøÐ¶Ï|cK|¸ôHðÌ¿ì¿wÓ•+{ÛÛû«Àwê¸g¡ö½ylhÛ_ýí —øpi‘àéŸí¿÷ú«Z‚¤;(• pèÍ£CÛþÛ—¹ÄÀ‡K—Јÿ¼ÿ½7lXÙÛÑY‚„¦WeösèБ¡mþùA.AðáÒ&4"ÁÏí¿wëµ+{—tôŸ, :42´í¿|vK|¸ô H°ï'ûïÝrÝÊÞÎ%ýõ²€¡7mûÏÿ}K|xg‘à‡Ïì¿÷ÆM D>ÿõ7‡¶ýÙ§¹ÄÁ‡w  jÿ½7_¿²wig?Êá'¯¿õ̶?ù‹/òÞþcgó¼uÇ€¶h;Xk'p^ràÃ…ýµðÅ  `í6ý™µL´­€Ê•œÆuÉï<ÀBì," -À Ö\’àÃ;“PM‚x=ý-C°Ö µ%.QðáÔ{~‡ÊYF³AÊ.!àüýçñE!ïtU?d÷GT~Áí²\–KQþ Ì•;3;wIEND®B`‚nixnote2-2.0.2/images/splash_logo.png000066400000000000000000002027771315604104400175630ustar00rootroot00000000000000‰PNG  IHDRò¿ ^Ö€IDATxÚìwœ$Gy÷¿UÝ=yóå,éN9 !$!!c@€É6`ãü:q"Û&ØQ @ˆ( EVÎáòÝæÝ‰Ý]UïÕÝÓ“vgït:ÁísŸ¾™íéPõtø=ùÆÃ2-Ó2-Ó2-Ó2ýR’<ÜX¦eZ¦eZ¦eZ¦'÷pàPС42!÷ô–i™–i™–i™ú•òGÃKŸã± 臊Õù.Ó2-Ó2é$~™|äÜP:ÎÁÖ¡½ÇÚ%[ùeZ¦eZ¦ÃG¿@~pC|$¦w`@õHÜÁ_¦~ö?¸ñ.ú2-Ó2-Ó£Oy ?°áÊ)-¬àü ¿ð²LË´LË´L‹ÓcÈûR?Ûìôú¦¥×b`·ôKòh^ÂGv®Ë´LË´LËtpô˜òGÀ9F¿çX€ô·Gš›Ë¡bú›ë2˜/Ó2-Ó2:zÌä‘/â&µôZoâƒõ^ºîÓåØ=÷¥÷>-¿.-}ðâ€øÔÏ5é¼¶!yq™–é°Ó7¾ñÍÃ=„eú¢Ã®‘÷wz³ø:ÓÇ6‹þ¶M»«–Ùﺡ>çg–:ç>ÆÙ÷\Ÿï²v¾LG ­]»žýû÷/iŸR©D¡P`Ïž]‡{øËôKD‡U#ï_ ï±nIš¶tj9ßSË‚šúbsè›Cý³/>,6§~_T[oÛÁ\óeZ¦_^úìg?G&“Ãq¼%ƒ8@¹\fÿþý8އãxlÞ|ÔážÒ2ýÐaÓÈÍ’4Ç…´ï>¾÷מ—%‡›EËtèyw©u1_¬ IÑ’ä7ݼSÀtšŸÓãh3)Çš¸QÌhsI€=©¥#@Ȩ æ-à2¹·h­=xÓ`cÚ ¸ôäCšŸísOS«¯{qFvt™:Eû<—æË´L5:Ôyâ1ʼnã8xž‹ç¹H)q‡l6K>Ÿ§P(†!¡ +50 µ&“ÉáûõÃͪez”éùƒxz};h§ÁKw¬ïï®Ç õ<])m.޵M™|7 pkD f‰Ÿ8tÓîm Õrú…xÕËò Û¾“¬ë·nóNØ­s7½I‹¢E`‰y¤ÑÎûóe­|™ŽT¤”xž‡ã¸hm˜››evvŽùùy” Éd2x^†\6K£Þ í{ÀšÚ—éH£GÈ ÄÔÂÛ>Ón¢²ªñö@×.(t—hù Eónûn$‰A² G`Þa‚ŽÏÛ ¤úµJ´¸fa!f yWÆÎÅÎ5-°¤Ý ñ¾²u:Ë`¾L¿äô§úgΉ ¸Rà:Zk“ø¾Ïüü³³³ÌÏÏ£µJG€JÅÐ.ûËxÿáfÛ2=JôˆùÒ´ñ~A¼UÃ6F-à=4ó´é½ÅÜ) hmþðànµ^€Þfvîf=ùÕK I¸éŃxþÐÛ½Ðr4?»·ï¹¶ñ¨o0]Æ’¾$Ë`¾L‡—M w‡äryÂ0 \®ÐhÔ©ÕAhŸ )ÑZ÷<βV~äÐ!òñ^`¬RàW©í› o:Ž“ÒÒ“q´s#­¦AÛ~Ѝœæúä»ûÙp=Ôg7«E§½ÕÑ.Ô¨Îù.(Ä´Ï=`:4ì4/œÔ:g0>ó®Ö Ñ6´e _¦ÃG&ˆ8RÉxx™ B@àûÔk>J„ìÿYczzï£Í®e: ôˆù›ÔÛýÙí ®S–ïî ÞÔTþò6¡¡“tN ¨¥Ëéïä{W£кU?káO·€¾ö¹©.®Ú¿—‰Ý´¿m¾Ñ,÷2~Z»vý£~Nc AøHèW‚k®ù"W\ñÌG}ËôèÒ#¢‘÷¯/ÀÕVixÜMÀ„€j‚|W°×]€°O ïðwj ׂœpH\ÈVµC;ïbVO"ÞÛøÖá ïf‘H 2)þtõ›·ûÊSóîèK›Ëdé>W§Ë6±0àÐavïËľ¬•/Óá§µk׳ÿþÃ=Œƒ¢e_ù¯>"¼—6Þ¾¡›=ÑÐ[@+lq£0ɺ0Ú7L[лugó²¡iJ)°"ÖÆ…c5táF†°H‘šhç2JáJz;ÒZx[°_»9½« ¶iîvÓ‘Ÿž{§&.Lœbƒpt<á`„ B#ÒZ¹hee«fç“Ç)y&½Q+–µòezŒQ¥R9ÜCXNÅ\¦é—hmvëå«îŒÐ6-&ô°¬LZ) OÿFZsOûÊÓAoíãƒV oÓL…ƒ1‘™9ÒÄ-¹ÉñtFG`ÕnznÎÓ&]%®É£–‚.lm‚ t˜dš¼0iào˜ÒÈ­€aRs¶î+¨4ç`&˜Óæ)>Æfödƒn&öøïøš,¿°–é±A y ¬IUccúë‡Ôɨ(Œtœ(NÅàûZë%úÉ'ŸÊm·Ýr8Ø·LýPú¦9@aí |áHõ¶A&·z[´ÍNƒWÄÃ. ž^¯:Ò`­iXFû ª 3€@8…LêN¤•ª ëÈÄ®AŒ°óts‘bâ*q¢oÚµñT@_!&ù­§ Ó#r½kL€BEñNdmp#`¶ÂŠ‘ñ<ãã¤.©0‘#u[azd­H0»?_ù²V²L’RâHaã>… —Ë’Ífñýr¥LÚF&K¥¤¦RTXÊqr¹¥R‘¡¡a*•*{öì¡Ñð—ô¸Y¶L½(Ô0@-Ä8yWWCS7]|a&:Žç¿>DæoÀ˜!2ÑeÊuÐ\ŒÐˆXh‰®£Q˜ Ó:èdˆ8˜/Š0q~{‡Ýß~Kñj°—é±GŽ#ñ\û „J¶n´¡‘ò¹S“SŒOLÐh,ì—4½NÆXðÖ‘€íHëÒ«×Ôj Â0dll'´ááAî¼ã.~Ð7˜×ëËT“T 1{ª˜]t=°ºTÉÃÙ0€X]@x²ïCZÓúBÚx‡I¦iÒ`Þ®…ÆK âAÓ¼œt“´¶œk£ã}­†×ªé)Œ?…p‹4SËbßphµph¢JœáYÍ;ÖX¿p â²¹´4$I˜Ô¦7-]­:è›” ƒ²ó f,oRÁd Òµ¼Œ[LâDæðK“\âëªí0%‘› Mш\IöökO+fwhåË´L‚ $â›×Ÿž% CV¬XÁèØ^&ÞÝ{¨7Ö„MôŸÑ/ã100Àèè0###äó9ªÕ{vïa÷ž½Ü~ûí¾Ï†M›˜™žaûŽ]}§¤íÙ³çp³m™Òd f6ÀlŸÇì¯a|…R­Ì5PSuœ£qFd¾yP@¾¨Y=Y×MïL?kÉ“îâ‰6Dõ&¨µùÐ 4‘?¹uðÙ¬z¤™ËLSCÍšÕC„ð@¨¸Lƒ\¤µjë RæõÈOÞ©y¶çÓw‰ ÐaŠ)kDÂH;…–`†Øò µFÊP5: •&ã…NÎù 7r1(;m0Ø¿¦îÙñk02íóש%6ÙÇ–ÑÊDŒ×«â‰|„Íëµl^_¦ÃE¡²ï‘ááa6oÚÈÈè(ÓÓ3<ðÀƒ<øàƒ¬]»ŽÍ›7¡•b×î=‘™½•G¢”ÆhûNæØc·²iÓ&6lXÏèèÅbc ÓÓÓÜzë­ÜxãMÜ~ÇÔ ÆV¬`zf–ÙÙù¾dÞåF*2Jþz{=SÅÆÖ Ðöe ¢ï@ÜcGÞâ`þèD­·¬oË'ïhú‘òÓj:nšØS ®ý&°·]¬™·¿ic+— !PÊàH59Býî­ø§›R1…ÁèF¤Ja¢#ÜH WV —:2±EÀ-[Ý q[«ß\ÓlÈÒΟ袱÷ñ m¾A§ÖT°‘ë& ×ÚŽI ”/J]³ûK!³m&õhìÒ¤´ðˆâÆ)=RË :ÒÊcðn_º½šë7x?ÂíúUfãñce¾Ž#Ù²e3{ÜyœrÊ)¬]»–¹¹yn¾ùGÜtÓwصk'ÙlÇq:€<= )%k×®æôÓOçøãgllŒŠ…Ù\ŽB!ÏàÀiœþù¬]»ŽÏ~î³ìÚ¹“F­F6ëá8 —h]¦Ç5@ì(ì˜Ã”}´2h¥@Œ6­­»R¨‡„·NÍ:dYôЇδÞ^ϼëßiÐJ™’ãB'ùÑ)í»Äý0Ę$š;í+v±i` B…ÙwÕ}%‚½E‚Ù ?œ)pÉ“jr^44ßFq'ææ̽ĤŽÔ›ÕíßFG«l¬f¤w zXµTimõ‘w÷‰§AN#$¬5ð?ä +ÞÌ_ÿÛ_sÊ «ùÚM÷ñÅoÜE¹Ò;PÇßù«u‰!´d’>åqµ·¶Ò¸1SzšÖûÏ)c}‰=ÖµîC1§_%kÆ£:WcäØcgåÊU¬^½šõë7088€16Ç{ÓæÍ{ܱLÏLò¹Ï}žz½ÑßMcÔúuk¹àñOଳÏâ¸ãŽcllŒl6K&“Åu›¯åF£ÎŠ£òæçç9é¤S¸ÿÞû™ž™Eë_½û÷WŠ‚‡ùôÝ_æ/ò-¶ÏLbüwU¾‚*ù¼ºt †C à&6«c㑌ÕÖ1†úÓx[Gp‡s=Ouˆ5òˆzF¯CKpW¼˜¨YG{«8³áÕ}~Ð[ÁÖ¡3ØW{˜Œã²{ï¥z!À•?m<À=ó»¹vâÇüdú^vïœfûÎÙE›9êOðø';aHÊ‘Çø,ÓPÔ `&ñ‘·ùÉ;„™özEÚœ¾ˆ\û­{˜{]FXgº>‡ñÕz••£”âßÿ뻬YYbïx¹ëZÀÖ¤hjá ¶•£ç©›Ÿ&ejO´óöNpñï½n«3·?r@óh½H9@:Ô֌ǒpôˆÎUÀºuk8ýôS9÷Üsذa#¥R‘ôµ CŸO<‘j¥Ê÷¿÷CxðÁ®ÁhB¶m;‘‹Ÿx1'Ÿ|ÃÃÃHiŸÉÉq¾}ã·Ù³w/'t2\p>cc+)•JŒŽ’Ëå¸ýÖ[ùÉO¶¤áoÚ´…íÛ:l×âH¢@…왿…á™fÓÜ 'V±ÛF0©fyßÄ7(ú/)]@ÁxI°›Ñ‘"ûÌM´~5]; @ÞÑ %úÞ¥ŒéÐÐcÓrJ%Ž\×´DkGôÖÇ}¹ï¡}j矢xpüa.Øz?ôïã#s7òÝ™Û(«½œ±Þç×þ`·|SðŒÜûºã[¹á†nà‹ß¸•g^vrkXd^ïó&Ñô•·jäÄyªZ[g˜Ôº>øðóó?ÅŸïýÏÓ¨”™¯Í“« š߯ñÖÇ}™oLü¿}ÌKzã¯~ðôèòÆZ¸ÓuR%]cƒMÌe#áó:Mo €KE¹·øÑc:0P?ppy¬€R¿ãè´éxƒíÌup´´¹ì<¥”lØ´™sÎ9—ã?žíÛwðöw¼ƒ{ï¹›SO=ç?ÿylÙr^x§žz*oߎÖV˜Â:Ô”1¸®ËÑÇÍš5kDJëκå–_ðw÷÷|óßÂ˸¬Y³†ç?ÿ¹¼îu¯cåÊÕlذ§<åÉüà?à¶Ûï Ñè??Ü Ët¨iº1Ïþ>Ÿ½÷3\$¿Ço®šà¯7W¡¾™oí $ãÁ ð¿ÎpåŠÂÙ¸FZ“z æÚÖ0Z[#näþ]ˆÅ‚0]¾§+»™VœŽT´ÞÖ/”yÓ‹žN~E ƒ+ø’þ1ÿ2õMîçÄÓ\¶¢NNÃ]û=ö­ö¡‡R~iýà‰pà 7ðgÿtO½x+žGÞÌE0OkäNóÇnyb^ï•;ž2¯÷A?l|Q‘#—¯“u|Ærà×r—érƒ‡öÞÂÍåÏsÙŠ—,~0`Œhjá&Ài˹ „-2uMµ"*…ÕÔÄEÚµûÉÓ÷ȾòžÃ{D´Âƒ9Æbû*¸ßØã µÖ¥óú‘¶†ôè3O×u9áø8ᄘ˜˜àoÿöoùøÇ?ÎqÇÏöí;yðÁùýßÿ=Ž9f+ƒƒœqæÜpãTÊeB¥ñ<¨ ƒƒƒ‘?Ü;vnçŸÿù_ùô§?M.›ãIç_Ê1[·rà ß&BÞô¦7±bÅ FFF¹øâ ùøÇÿgI@¾L‡žîÝÉïúŸ¼ï¶ÏŽs3ðëðšu{ù“Í»¨Tßß_Ä ª}| økG‡8?·µ™~›Õ5QZ.x#…µqh†a$õópvI=KƒVK>yº‹Wô¦;m)#4†ü@À¿‘KÏ=•ÑM®òÂxî^^´uœ+§l$ÿóð _Ü]d_q€·M-l²v‡»˜ä¯þ‰ 6Ó>ûÙL‘ó“´v×r²]æÚRܦ‹fÞ™çyk'yʪ*35Ç dY_”¬pØR8•?Ûòé>™Ùv~µ £Ï¶z÷-~òÔõÖ‘&¶Ä¤—öû¤ãÞy¤©Û¹ú}¡e©ç:Ð¥Ÿã÷1šŒ"ï¿¥g‰#éûØKsLV×q]7‘ÉdøéOÊUW]…Rš7rÁçó£ý˜ÿþï07g¥ÿM›6QÈçÉf3xžG©T$—Ë¡uˆ#!ŸÏGš¸Ä÷}®»ö«|ò“ŸÀBî»ÿ\×åŒ3Îà Ÿÿ×_C’ÊvÜqdzfÍÊCÀËe:ÒFóõÝ?æO~ôAþãökØ9³'Pì-gxσkù¿+8u Â›¶ìe[¡F‚­óò‰‰ÙSŸ¶L¥mj°²Ú8Ü.Ü‚»º¸àa¼ËCÒ3íŒÌê½µrÃÒ,}î•[æ1Ô}‰# § Õ¹pl?ãóÕ]C\·}é(DÞ%Ü’¥6=OÞè8Ú¥õ?b䊮¾újþúßoàO?‘|A´øÈ›>sÑ¢™“¤¡Åæõ´Ÿ<3ÐÄ[rÅuùϣܹoóó¿lËÙ5ûç-‰•6ÐMX-<ÑÌm}vûÝα¿¥ú›'sOÄ~rÝ,‹ß7- WÚsîáàµ[³ÄõÀáô‹n<èØhmºóë‘õm/v¬Gê\Ý,6 ϳÛ\ÖÔ-xJ)Èf³ÌÍÍñÝï|7j¦"¸ë®;Ù¼y###Üp÷¹âŠgqÎ9çR,(ó„*`$—eýºd³ÆÇ÷3¾?`’K¹oß^®ùâ5„¡”.Zkî¹çFGG9÷Üs(—çùþ÷¿ÇSžrCC#¬]»–uëÖqç÷5ÝmÍŸ±¥bãns1ÈGàÞRœ§ÇK¹¥K[àŽ¶7æ`€¨Ë~K2ë/<ÅÒkŒÝæÒ>ïÅxòHm³Ðx›ÛbÛõ{ì>Æ·­\¹"9M½^' Cr¹¬ É‚ Ñ`ïîìÚµ›}ûö311IÜß½LNN27Wajfž=»÷qß}pÿý÷3>>Á7¿u=wÞy¾ï!¾ï'çñýjµÎää wÝu7=ôÓÓ3ø¾í• µnIQ[¦G—BÕàë»næwnþ>t÷W˜¨ÌXà4M'0He¡ágy>tÏ(A(yö†2'Ô1¡ÆQ‚Ûçæ{³w*SÊ2øø =åh¼5¥¾ÇtK´öñõÒÄm¬]:ošÚã@€þF£X½u­3£míac(y¬šBæÑu'ÁšŒ1úÑò®þ”×½øt6¬##ðŽÁ\4]À 94ó§S€–ð¡=j½KÀ_Ÿ|8/?Åyk|…çkd`¨UjUÁÃÏM·}Œ W¼¬ÏKZàN–h,Â!Ѻuä ‘ +ÉÄ=šEªš D_x³;›Ý&ò£‹tz °:0Át_OÀ5‹?(P:ê\f!À1]üæ½ÀOt«+°/‘ºò·ÞöÜ—ÞÛ÷ÜÚæmÚþî9Ï…câD‹ ؽ{Ò‘lÛvRH´Vé0?_avvž|¡ÈÞwsëäWyþ·r $žT”¦àJÂP2W1üâ ;v_;s*G{[=–={vw=¿1p '00`cuêõ:ssówÍ–iÉtÇÌý<´ÿ£œÓx¯*VÜÂÕûWR DˆÛï¤ÌìŽÒÌÖ$Ÿ{ È±ÅãW|w$à‡»]V†8úŒã}Æq䶬: ±=ºö™^¦¾Úx"u¦5Ó`ï‚üà æPJ µ@+C ²… Çmdóöû™ßèsNižßZ±›ùšäwŽð‹ýyfÊ·0sÜ}°¿ûñ¾ÿ¹¬_ÿ víÚÅ?þÇ÷yïß^ž€wXQýq›¶•š{K.yÈ[cÚMí&ízè‡õ öª»Êsó‚zÕ « ªšúä<Ϻ| ²½XM¼ !cPOå˜kRÚ¹ l÷¸xìI;×8øHâ‰ï‡ö¼òöψÇ=ï³ö{nï-¦õEöy4|”]µñvAE´ýfÚ¯W¥¼^À¾(p›>Á½73RÇHÍ©ë\Ûî®Úz·swŸ¿R!÷Þ{FƒóÎ;§=õÉ\{ÝW“ó—r§nnP?Gg8ö\É蘇øaÐHB µšdP.:JÎì#•Ük¹üâøÎ·o´¡#Iûƒ1ŠM›6ó¬g]ÁÐÐ`عs7;wî\R:Ýr)×§ºòùêÞóλ®f÷ôOyíPžWNñ§k"¬Ág+c¨¤2 €‹PGþrƒŒÀe¸k"Ã×·çxÑÑu.ZëS1yá_Äo<ñ™¬[sÀc< Žýßn^'¥§=®Õ­3Öǽ|p¤ŠëL!dŒ7ëLàâ‘gÊ*Çÿp/«Ž®óêÍSÜ1[àûW³·â „aÃ@ƒór Î?Añó¯þ[Ëoí8¾].»ì2>úÑòáÏÜÎ_vÛŽ]ÝU+oéfLx1˜§xÔÒ‡<ÖžÞÕ¾S[Áw§Ö¢ÊQõÉ6DE#ëŠ ð–¦“™£ Ø8\Db.OE­kikµ‹H7AS³6Šf+×v­\§Þ¯mÍVZ€ª­¼í¢fØ…€;ý»é±ÍMï}Óã6½¶i×6S¼¸·û"ãXRJY¯¿ûáÛD¢]`‰÷ï6׳Ðq[ÄZ±áž{îáž{îâqç_ÀïÿáðÐöíÜqÇlóxê’ËÎä³ö\‰‚(™C…‚ 0<¼O³wÔ|Ãçyœ¸e‚jõ¹ô˜ì}~¯ÿÐgç~¨6ÀÁ† ›ø³?ûœþ㣎!?ùÉOؽ{i=Æçææ–´ý2YÚUà¶‹ÿºï+Ü;³ |‡w—7 C®ÛÏ›×ìdº"ùæø&ˆÜ‚¸hÓÊEh¨…†ïìÈpưâ¢ãN扗½šsO¹œB.Pã<´@¾˜ÞX”¤£µ2¥#X@#_¹õzgG—)ÊH£ *!cðJ‡änÎóíÕc|h|u#(d\>2Ë“óeNQŠ\Þ9ïA~ñå›Ù˜;·ãGßó|Ž?þÜ}÷ݼå]ßåªw]Y¬…‹æ Gc­$Ízy{Aœ”6ž._ÛV˜å”1qÆ ^ˆžwk’í™:#{W/Ầ|ÞFÛÀ7›ÙƒÈÏmMê¶ \ªT«£âÿñË3â1;„“j¦"Iug!y)w(âý˜ˆ»G—Ï…~kÙ·í˜ ®K³_êZß³ó÷ ƒ®– “ú»§–¿Ta¤ð>¡¨×éºÌ½ë\bu—jÝ Ñ)8íÛ·—Ýü#Î<ó,.¼ð"þèþˆ½ãϹèèý\|†ÇРÆÍIVŒI† mŒ•Ý…ÀÉ€ç N8ŽÙ"˜Ÿ‡Á!rGrbqš¿~àùOÊðõï†|çMÙÌ+_ûüúo¼”\.‡Òš}û&¸öÚk™]¼„tšfff–xm—iwù6þî®kùÔÃ73U›CøÖ÷ýP˜ãÝ;60 5Ïžâ7îbª,ùQµ€—¸nF°«(øM« Sõ"õáË8ã‚3´ê¤ôz¬‡1ô±ÛÞ®·§û´¥$õ;ÉÒH‘±mHޤQ>õºà¡ÛžÌ·7ì ›Š^Pšà9k'Xç†Lç¨ú.'›á®‚‰N Fræ™gr÷Ýwsõ×àû?ÝÁùgn¢Ù\D"tÐÒÁ¦µ­i÷€·–7Rî…WÃâôºÕ»yÞªýÌ™<Ò1dòŠùlžùJ†ŸÍùì]Ò¥‹}õ`‹´À!£ ·0z:‰@“ÌÓ¤ªÙ%JSì?ÿ6v_¡S¿ÓfFMwŽ[Dë\Lóî­-£=ýûRh`ïð÷·6í|töÅ@½‹F¹öÞKöEøÔk®íš¸I=SÉî‹Í3Þ×$§ŠR«Õ¸é;7qùӞƖ-[¸ðô1†^¸š\}?ƒƒ†Ñ1ÁȰÀqm)VÎp3qAÈBæY±¡`_à"D„!JUÈ™çŸrö‰ï Ø?oX¹e;“|éÂB“á«ß¸‘oüvÔšxiIGŸùÌgyþóŸ·¤}ŽHÒ5(•üþÿdåܤ¿|' `³}w-Ï{Ã5¬0çVyíÚqöήagÍ%£tSWüc“ûšQ®¼ô¹\ñ¤ç3¼jý#æòx|€"Óí…Ùmßn/Ó´fkª1¨÷GŽã`L¤å Ó4— ‰Å›]–{wýìï9fëoÝà 3ƒ¡Â)h¼b'_4Å·®ú&[2Oê8϶_Ê9çÜÇ~ô#þâß¾Ç7?±.¶H3G ZJªºÑŒãÖŸÍ—j³Z{ÚV:ï:þ}qÊaÈJ9ᔑ”A]ƒZ²¯7ãF`îF`žrDæõ¨|kKàZú2k¦©l‹¼ãè›f”`øiÓzúå»Xdr;H·Ýo}zÛ±û ¦ëóíî^û¶x´þt´n NjKˆÒs\H(Zdý‚°?orÉú5þ­¶‘iåâ„BÛ©ìÇSE>`V³bËž0\áy«fxÿì(An¢‰[@w´à„õGó†§_ÉsÏ*…þSËú¡GÈæfê%©÷ñ´f¾”ô !’Ý…‘ÑûÞ€Ð-Öº_Û~9çVÞÆ3ޝ3«óÌÎfpòš|1¤Q ©–=Ö¯‚‘mŸÃÜwiWijͰðŸìáºoßÏS/:6 z‹‚Ý:"×-x™/ ÞbVrµû4­ç  H)ÑB Æ˗Ūu^¶Øïí´Œ-n”bâÜñÈa-!ÐòR5€tí¥@¤5°8}?Ä?Ä­PÓÁqíiê<-Ça€év¯Ñeš. Žã¶¯'-âïbÖm~kë Oñ"®v°kûx¿€-)’|¡(Y¿˜P´€¿<TÚùÖc®‚M»“žcÛóÖÅW.Hi0ÆšÊËs“ÜõݱzºN®v/#Ã¥<sö)6F Œ±:‡ Hã)„! ‰ ƒ$"TAÌ‚ñÁ³Â&›aå˜f,˜G•ï¢2+/5ßåßÒLÏkú»ß,-kã ñõ[ÐãïFÍ|­ªFP$äÕƒ»ߟãþjêÊà„vÑá«{8Ê©óê Ód®eZœÂ)ÌÜçÐSïG•Œ6­­’S©zÌî.ò̹2åœäÿÊ#T§4®2øà3;†Øêù\¥RJn»gŠO~é.~ãY'EÁnVƒlÑÊ\ýѺ-å,ðÖyQQšøÝ­#05€ë,µÀŸNÆ#’6³±°a Ä¿X%Iõ¹–`%Úº:ì´S£1QÁ‘ˆ‰M‰‘.â{£M#š`û}ÕÆØ¼Óîè N-´Ø½Ù‡6ý½EKo'!šà™hû;ÙoQ­¼ýõ¢nfñEøÓ‹·]¯Q7¶D­ô¸›k7M½g Aû5°gÚþðƒ £W žq–ä¨UYÄ¿øEþæ]?â¹OÝJ.Ûª•7Á<žO—Þä© o­‘êѺ%häÒ!nÆš CË?\ªFÞà&RVƒ(ZÝ–eM£Aòn즱µß ñ§Y ddv=’B1´j\îrµþmZ»ý{<‰ndZOÑùG‰>W·z,µºihéàÉصkó¢ ¨õÒÎôw³P˜Ô=Úöìvµ†,Ä7‘fZçmÚæ&Z\/íóì!Àt˜í[ÿ–òYÉãO€cv×LÆÍ@Æx)m\ ìœ##’Œk!¼Èß>Š.ˆ2èÝ §­›æ±Ç3¨†fß~Í=wj3°eÝ^¼uó3†Éy¹Dï¢Àq<”ê¯ÉÒ¯:]…ù¯¡'߇žÿÚ„hc3Œ|_25žgrOÇÕ¬ÚR&W È*ÉKVLððŒË-3¹$_ÜSpëT†/ï,ò‚U7¦ÈŸÅo<ñ¥\~ÆÈer?àEèQòÅÖø·ÔMmÚ}’íšT”(œÆj¥Ž4„F€0t+Yìî}%7ÿü<ù 5J>“´/Éf¥ŸÙÉÃE‡­ç~‹Ùï=•·³¥àC=D6›åáÝeþëª[yÃËΰ/™T°[R‰´'ZÛÒnfi¹Œ­Ï&Š”7éÚÃæ2à#O•S}âB86½LÐŒÎO¿$;´Sš8QÌ€µTh¬£1‘âUÜ=­ÀÛçÒ€ðÖtjÝéï©ß“Üö…è@윢m×n@ÚE›lq+$j_j‰»ÎE`'älê-àÝŲ‘üÙ.P÷ÒºÓîµlX}޳´R«J‘Êû iÙf‰Ûw’Hÿ/ F Œ²dàwn_pFøæçŸË'}‚¡¡€ù9E£ìP ÈCê…:œ¾Mð™Ÿ~šð·;Žñ‚â?qÛ³>ʧ>õ)þá}?ãÊçÏà€HåT7çbp"?\'Û°Kµ´¿¼*bktl^×Ñ{TP÷—ú§ŠÕÄ`!%~éFÒ“Ñ×°#7‡ˆÆ AÄ/{™úŒ¯±6ÑËØš0L‹yÝISó7µôV€èm2O¹1Òë[@¼õ{kÀ[7á²O{iã=´A“ö Óĺ-²í3²`tÕ`{ùœ¢V“zo­[/òæöi~u­Â–žwê¶ƒºn碌h»tGBÆ3 æÁ•×5d#22©KaÃC hǺï„i@x1ˆ”y;ý ˆñH Žúhm÷×°s‡ážÛaÙ0–”† W  AÃnî«xì­÷™­Ñ¾DÁüH!£¡þcÌÄ¢æ®A‡Shm‹v)e˜ŸË°oǺÃȚŃ!PJY¿9uÉaÈY¢Áõ*Ul‹ ÀxkØúLN8û9dKÕ©=Ê@¾Ø‹®ý·vèSóu½Ô#è%0 W_Àw¾ÿ5žñÔqFVÔÙ»£HP·Zya œ’ åg?ñfî»öŒf6u㤉20ð&gæyïÇoáO뜶æ)ñx,˜GöößÚŠÂD/AÓô¶8)mA-B7_ƒ=¬ _ÆTqž¸ÿ¸ˆÒ͈üáZØÀBˆ¬+$¾pƒŽ4k´Á×jäÚµAnZGlˆÁ5r8¶¸!Dòip‚f$7Ís§øÜ έí¾i!)æu7s{/+ÑMë=ýûñÛ͜ҰWCJ­ÞÚ¾‹iº#>%@$³ê&¸ô2—·ó,ÅÛ.¼ìô–fÒ.„¶ytÌ/]³à GBÝ×<0áP,ÀªQA¡dp½f©Ö|mœ¨Œk-~H‰.˜¬mQ)w Ìþæ5WʦÁJIe^sçŠñ‡ %×°zò«Ù'J„ÒÔêÑý›¶ÖQLB¸]ãTóºÑuÄÜÕèÉw£Ê7cŒA…#a(˜Ø[dÿÎnV³js…L!$Tº¨(ø­6ç1·?KI .[YáÞº`GÝA„†37oã—_É3Ϻ„l®ð¨Ïï0iäý€òšøAÝöjÌ·Ñ«”°ÕÕzÄy9Âå;_~)_ðï CŠƒµ²G!/Ô*.¾ïrÂQ†»×~&;û–‹jž§?ýé\uÕUüë‡nå7Ÿº¦2~¡G@oÜH;—¸£Z|®.æõ®æàncóyН&ÍßmÎã-ÕåÓb†nÞÓœòùÑ `"ªâumÀÞ¯´Æž:vúvð2=Çn@Þ. µ­KÇvtº2 “ösG‚K‹é\¤-Z1€w³L,U€±Â~#„¯þT01©8n“ÀÉIŽY'?¹@DÞ1ÙÈ N6J7 )g€)óv\Z£µ„P£µæáV ×Ú!(l ®t­€€2èÐCÅÏï7윌…äv¬_¿–ãŽ;Ž|‡zcdҽ툦à!ÄôGQ“Äø»PZ¢µ½NŠËÞEf'óGŒ®®!]Û‹C)‡P Â@R™ÎPžÌ"Á|>ÇYgɉ'žÈô#î¼ûnæfg‘Âi¹žçž{7ßüC~ÕɘQù6zò=˜¹¯¢T ¥m@›R‚¹é {w †+ÖU"SºÀ öFШ:Ìgh”=œ’ÂT(!È*Áe›Vrî™Ïç™ç=£V?º¦ôvzŒy7:xp÷} o’”«8¾DkA°€•IÁö¿Š»/ùlÝÜ <ï17“ehuL>$Si4<ŽßâqÛ¦OžN A†'=éIüïÿþ/üô=¼á¥Ûغy¬ÙÐ —δ4Ç`“®­ž™>Më‰ë”¸Æ #‰ÞYâ]`¹lšÖMú%hRBŠnºÖ (›èSÒ£é#×V ‰4r#­i]$‚N¬…§´ó¿iû§Å¬›Öï”õ#ºf1 êÍ´V÷ðÙ&èÐkÑê)Á¯]7)`À]ˆ4˜§A.=†n–n‰ïÍô÷¦•ôƒv/Á¨Ã²ÑƬ®BL*2=š[Z€é ê&õà·)ºº9<7*œ$`¼šeZ вÎÝ÷…Têgœ«GÀÉdÆ`\%Râ9‘°+싦2o˜Ö<ø`È}÷IêsŠ5CpÂZˆLé®I¦¨|I¥â3[[Ÿ=ŠÚêóXyÌx÷~ ¥ê-rO¥RaÏž=wÜñ<ñ’K9þ„mÜÿ½Üu÷ÝLOÏ&lýÉO~ʯ<…“0û)Ôä{е»ÐÚ¾ÿµ¾dr‰Ý¼œfÍ–9ܬFi‰R6è- Õ9ùý9”ÜX€ÌB-ÑÊ£4v&—ŸðrVl¸ /S<ܳ} y?¦Èƒô;ŽJ”DÖõäp‚E*å ™SøÒ—ŸÅo½ú Œ¬¬Q­¸Ôæ\òC…€FÕE(xÂE;¹þÈ缎cÿЋ8úèðÀðÖ÷üŒýóSÀ¢%G:eÛîolkgºy©®§-N:vîÖÕmp—\Ù-öÇÑëÒúº¥=n‹™96—ÇQèX‹Èdn"?¹õ§MðÑ¢FDMYDüb”VøIûJ¡ÍdÝ©=švs¹iŠÒŸª з›‹3­·Ç=¤¨«o¼›VÞ2{ôP‘Òº»}¦ÌÎIZZ‹¶Þf²îÅÝ2R<€–¶Ã-½ÚyÖÆÛÔ}mZ\Díüku)$¥Œ»ÎÙ®·÷J“G¢Ãz“öø½-nª˜’6zøŽ>}ˆ‰{¿ÁÃWسßaÓjÁ† ‚Á•àdêd3(~½AB£&Ø·G3=®iT ÆHÖ (Ç$¥‚Áó@C¨ B T~C¨áðÅ8Ç<\~ EGrEq‚»ï}€Ûo¿+éWnŒ¡\®pÏ=÷²aÊŎ=öX6mÚD¡PâÆ¿ïûG†©½q;fò¿Ð3ŸD{ÐZ$šxµâ±g‘òl†â°ÏЊÂ5„Q@›2‚ áPžÊP™ñž!?¤0.„Z"ä0+7?•õ'\ÉÀØi™ÀÂÇ@ùR¶í&½/NNüLƒ‘QT©0}5›¹íilßýE¶nÖ ŽøÌLfQ$WPäB*³VŽÀè‰Wcî:§£™Ðgu<ðŸúÊüùåû9ó¤U·±¾úÌÓ¥ZÓóÖ­ ž~YöAJGE`"ÍCˆ€¥y<Æ8ÛδE1iPŽÌã8MÖQ \èf„içfƒƒ¢ß¥x´˜Ô4­)°ë¸-Úî›ßxÍ;ï¶X„êäÕ$½¾ÍÞ¦•“3!mcÅŸh¤i{»¶&JÀ¯é?nïBíiÝ"ÿ;ÜM¡³»‰žëV_v3•Nv™k àªÉŸ´U"‰!HùË[âRŸ)¿¹ˆ†lFrÌÖcÙpÒ™ä<ÁÔ½_ÂhÍä”`~Þßeðr­g µARrÂ+ ‚ü°À“Ö·î:)lî¹V‚º6¢äЃàm|ÞØIh§@ø(£Ù²q;ÿ<î¼óž¨yŠe_¹\åÞ{ïåè£â”SNE)M&ãqÌ1G³k×Nî¿ï~‚À63ú• z3”¿Ž™|/zþzTXG‰2 µd~:ÃÞí%ÂÐadm Bkâ’FM2?ž£QuñnIEb$^n뎫y6ÙÂ÷?tø5òGDÜ:ŒÔÔ»£e¿$6òùÿ»‚ßÿãÏ34R§<ãÔrƒ¶`LP“¾Ãégîã›w‹µ\ÖqŒ“w¼œ{O¿—ŸÿüçüÕ;Æ—ÞY„‡±52!'~¼˜Úü‹4MëF+DŸ@žqA ›"c_âÖäm´ ÚX¢Å#I€WÍ÷®  ä&2GÚ¨M/s#àN/Qw3¡@xÄ•á öwa¢DwáDûK üñË;­avÕ$»­¹,ºƒw{½&ø›v ï«d«èý·è6þ&È45Ñ6 o×J…ŒÀκjzkëm¾öŽù^¼¤‡ÓMHŠ£K‡éòw/E!&­}§æ$b Mîñß4A==ß¶RµBŒHžƒ}~ÆFÙ¼q ž—epãã ë4v}‡á¨(Ì`ÉaõfI&kZÓh€ª dÍÚŸâÇUkë~ÒJ ¤A)h†Z|g=î¦çᬾ7;H6—! ]I­VG8’Í6á:2j‚Yàû÷Ýw/›6m¢T@)ÍÊ•+Ù¶m{÷îcjjùÑ"QRã0óè‰ÿ@ÕïÁÛ[‡É=ÆwÈä+7•Éä5J‹À•Tæ<Êã9´dGdÆ ŒD)—ÒʳÙp«Ûø$'{ðã}„é1 äýj6ýQÆõÅiZ#ÐÉdú<ÆŽßà'¿ø&ç9Ïèj›Ž–É+²9E&V$«Öœv5ÁÏ.ì(Ý*¬[·ŽŸÿüç|ãû{ùæ÷wò¤ó7¤æiÝ-…=ZkÍ'MÓýÕhDJrRcÝ>üÚh–þXG@®UdUHci~OŠ»ÈHÃŽ}äŽÍ³ ÀzÓ¡@{Öž¹©Ö—tGÀWû­”œV é Þm]æL²MJËlqy,D ]‘öïÝ€¤=Ê:uÙt3¤Ý ©uiy‡Û5`Nô1üö9›þ˜”Ô4·÷èGÝ5rÑÈÓŸNÓ2‘` =•U{k‡‰yß"Ä2Q‡ç: 1&@Ÿ\aÇ=i]§¾÷§ˆÀP©(j3à\GÅØ§ÔW»hÆh”2øÊ({»‡FPS%ÌàId×ÿÎÈÉhAPÇq™L×uÈd< ä¸ãŽeÍêìÚ½•’åõ:=ð ;ÛɶmÛPJ±cÇNî¹ûjÕj‹)øWF+¯ß“ï@Í\msÕõ…+#©Uön`n:ÇЊÃ«ë ’(%-ïÉüd–òT™5dGp­?J¬:ú 6œø*ŠÃÇ?fLéíôòG–rÑÂÆFi mn¦1 ÂþŽá‰7\ó"N=郊!¥Á€ú¼Ka4 8R/{èPpÎ5¾p뵬×Ïé8Æã¦ÞÀü…óÜtÓMüå;Á¥ç­^ Lk7 OOä/ïW#÷£r¬ZEï*å  ÔjäV«3Bp퟼Of©…eô"Â…Ò!/xïûÇæÖF¦÷f„z¬±Ûô3ùÆ-¹45ϘZ¡:›€Žéª ¶kÞiðVtšÞ»ƒPÈûîÈiÿêò½—I½=È-­‘FÀÞäNØEERR€(:"àÛÆÑÎË–{r!¾¦þnð´$6uò0ÍÓ΃Æ! è'uË‘¶ÜtÜ/mB`Ç=$ÈF@î8Ï1 Ð!™\‰•Ç]δPÌí½•ZU3µLM‘õDÒüÇP*D+h„ß7¡!Tà:‘Â]÷ܵOAzC]CGdq‡|!O¡PDÁìÌù|g=ë þã??˜Ö…°BA¹ÖàÖ[o¥Z­P(y衇y𡇨7üÇ,é*”¿Š™|º|J)”–¯³SYöí(„’U›Ë‡|«…6­L)A£îRÏQ«¸dJ!™AkJC‡Lé(Ön}1k}!^nìpÏvA:"€Ü4¢ AXéØq¡Q“8Ž&XJÓýÏà?ü2—\¼›â€O½–'l2ž¢4æ3;žc $9þüë˜øö“È9ƒ‡ˆ+/ýôŽi¾ðÍí<û²M4Ó±º9´˜+S/Fû’èÈó™¨î³iì Æñ ¢êÍö)Í$ûÈEòÚõuÏÉá9Y|U\]ö4šºª€ö£¯JÀ»%’=^â|ua[H¦/X¤L¥¦øt‰«è 0q•ºv ½[ƒUÛë}m/pêÜÝH´þÒ«W0qÔu:?º]+M™ØEw #>fú\í|l¹ƒçkA)ám{à[{¿þµü¥ÝéyD•“96=ISK 0¤ýººšŸÏÁ¯“ñDä2Z©ÐZàW0rü/ËÜž[™škÐð5…œ@ˆ¨ù‰°ÏM£ÕšAiBR,dpŽB®¾¹êbŒ¨° NÏõ( 222F©T"—Ë“ÉfY»n {÷ìãI—=™k¾øeÞ¾3³”‚À¸ãŽ»¸÷Þ,Q©T©VëÈ.±0¿´Zy°3ýQ˜þaãþ( ÍVió}‡É½y¦öåmTúÆ2™¼" ›¾ðP ª³Ö”®Œ ?ê#ó‘¿Üä\uëOx£ë/Áq}­ôƒ¥Ç÷lÊpðä8©:NÆj癌F)IØg?o)\¾ý…ßäÌ3þžÒ Oy6ƒ_u)Žä !õ|€ßp9ù„€Ïÿä ¬©w6TyJø§ä/{_ÿú×ùówÞ¯]´†LÆt%ÁnÝÞb­¦5z}qªù§‹kc+ºimÀQTëKåu4–T¯è™Æ~ªFÖÉ£BÕqM5š†ª²§r?èI[ì#´p#lY˨EªˆÚ¢&omf䎈ëô8{™Ö»ùÆS)~I˜t*UZ³lôê×¼.þÞ9žXÓÀEÚÜܦ™šD[í¦­w‚ÛâQë©{Úæß à¦¬»Im©|ÍΆ­üŠý¿íÖˆ4`w`ÚÜ ÉþBFçêìÖ:ÿ 1OÖ‹/¤Éz4ÃPa´O&_`å WÜÂìîŸ17·‹j½†4¡-ÛjDõnŒ‡ô2ä6Y» gõEˆâVŒÐJ!Ý,Ùl–ÁaV®\ÉÀà™L!$Jk\ÇeÅŠœtÒ‰\þ”Ëøð‡ÿ• Ó°º ÑðŸ@ÙÄ_º(vcDýÌÄ{0³W£Õl”ó ZIj—ý»ŠÌÍä­3´²Žp /"·ÄoH*Sª³dV“ 0Bå ÜQVm¸œõ'¼Œ±S÷tû¦ÇBªÖ ”R‘ªÂ$¦¨¥R¡þx¾þÕÓyÞsÎèÊ:;°¥[ó!ù’C0å’ÏJκäFîþâS)ui¨²¶~žw÷o¯ðßWßÏk^¸5ÒÓb­| O›}—G®Œõ6Æ–º³µW,¹‹©Ñ´·athÝ@· ÆØßfûÙY¾c|âÒ«"~±ÇÑí2jÆ"Â$jÝvŒ@Ó´Þú‚îÈ»L«ömÚ€=h´ùÈãcwIŸŠ,/®ë"Ú^–ý1€ J§Ó×ZÍâ1gs…ÄBÑ ä3| Ôí(È»øÈ»VÃK¹‚ÒæõĪÑ3'¿ÉÓÅ­`Aµ}ޱã¤@½K:^‡¢{äú­·ÞF.C븂bÑeÅèÃÃ%ªÕµš"4Z+¤tÝ|6«Že~üªSVÆ£.¾¶`©0Š[ØHvh5ÞèqÈÜ*{©2ãäÈæs 22:ÆÀ@‰Œ=Ø€;£5Ùl–µk×òÂ_!ßøÆ7¸ÿÁ‡‘Òm‘-x/Ü´ÃM!Ÿ§Z«õõèVÒsˆ¹/c&ÿUþÚh-Ñ@Jf'sŒï*¢´`l}…Â``£ÒCÇšÔµ¤^v(OdiÔ¼RˆSÔh!P¡$7x<«~>«y.ÙÂêÃ=Û%ÑäVB‘+^¢ šPüo»á•<é²ßep0dp¤ÎÜLŽÁŒ!_ ©Ï+üÀå˜M†»Ö~Æ_ß±ÿÖàžñŒû¹úê«ù‡ÜÍ‹Ÿ±b>‹­ú”~IÇÔ|yÚ4Æ>'`T¢×‘¤ñ`µ ÁR%šèÍ&b!Âî¯Mˆ¯êh£’%&eBjá¡õgâ×ç! À„háàd‘Ù„[D‡£ª¤“Cº2Ù¥ÒCƒƒ”Šy âI¤tŠˆ&›õxÜãÎçŠ+žÍ;ÞùÎä‰ß|12|©®µGŸŒÿ L=õ1Œÿ0Ú â|ßa|W‰Éýy²…•kªx9eÍèJZ*s.óã9{-G"«ÐÚA)‡ÁUç³ñ¤×1¼æ|7¸§»dú岫 ÙŽCq³û]JVýØí›?ÖòwÑçÿïR2ža`0Àq ~UâºÚ–ù 5®0œú„2§ìzÌÓæ_D¡P`ïDƒwâ>kB6!¦ë¢¢%Œ¶‹¿ÇÀ·8E/ašïa­ ?­>¡vgÊ*`ŒF™_×i¨*µpžZ8O5œ£ÎQWU ðÆ·~òdi`tc|ŒnXÓ»®wY]Ǩ:¨z´]zû¶ïÉ6uP5еèÓϨº=^²O´Žo÷u„Às²Q*Øâ¤#+ľá•mãì5·æ¢ÃÚ¢çŒã TPérŒšå§JÏ­s›xŽÍù6ZùœZ:yÜHñ²íXº–ðÕô:§êŸ¯Il…J5u“ñ6Rׯíz«Öû§9·ZÇ÷7þÖ«Éz6P6Ÿä2†£ŽZÏe—<Á¢‡çh²ð\$@àà# £ûªŒ#5ù⹡•ä†7PÞˆ—µ¥¡Ã2BWŽ‹—ÉPÈg`tdˆá¡VïVØØB:Ùl–—½ìJ¶m;­UÏÞ >ÎÀàààÒw|4ÈLå&Øû‡è‰·£ü‡›icFPžËðð=ÃLì-08Ö`å† nF2ÒÄ%AÃaf_–Ù=yp ¹±‘3(mMék{9ÇžûÖÈþËâp„häA¨Á±>a!5„(cZR7zÑç?ÿyN:ãe-ëÆo{·ßóN8¶AiÎgv:K¦’Í)ò¥Z5Öµpû¦ÏÀÎΆ*²\âéO:Ÿþô§ù·ÿ¾ŸW>g«Æòtö%©—/²? ŸœRÖÖVZ"„õq#  L¬‘·ùÊÓ[Mh”ƒ2!¡šApq°[RîÕ‰L뱟Üjâ"î|ûÇ;Ò­ºhVíÿ\¶¼éÿJ·Vg3G !õª ¡à¼‹îàÆOÜÆ¨ì¬Ã~ò¾sÃÊç_?r?ÿüÛhšÑÒ/÷.‘ÂFÙ»Ïô3ϳæt­2£m•7c«Û5–Ü<%TtIûеr¥” ÑF£ãÈåd›0zQÅAlnÊO’D©ëf€›1¨Û±IšAtóíšÎ±ö„:Š—¤A]V‹Æ´Ï?Ô U¥ÎR Ëüî•çóî;¢H ±ÝÄý­Ãžçl7°Öz ¬V°ëQÎÔt€Û¥Ÿu¶›Ð#z—<ò¥ÆV ë) ŽÀÚ´ wíq­tZ‚纀ù?þã?2Pò¨×5A¨Bpú©'pê)ÇaTH!ñA1ï BÔăDbPÌ# >E“BH›^,ÈJäóäò¼L!hŒÍì¦ÐLÔ‘ð¤xö³ŸÅu×]Ç·oú¢ÍWÞ…¡¦V«/m§CIþ0ýÌôÇP½„Êði†ÃäÞ{‹äK£k«8žIÌè¡–¨@PË0·?‹‘‚ª"¡“ghõãØ°íÕŒ¬}<ò1Xàe©tD9ÂjâqÞ´Ñ"ñ™»N‡øÊW¾ÂÄ9<]üU²nþþçñÀý×±í„i†GëLî/Ö%¹BH¾RžÍ26d;ùSèÛOêÈá~†K.¹„O}êS¼ïSÛù­nਠEZ}a¤þ¦M5Ë%ðÁÑQ1c]‰p°Ø¶A’îãf±/ÞzX!Ð eJ„&h¶RÕ~ªXIœv ¿´jâ¦M#O4ÊÄžØËŠÑ8é ¬ÎÀ¶æ÷h[m¥½…bÒ¤"0>ªã+D”u ¨°†ã¸=ÂZƒÝâëÚíœíñÂX×D¢&>ä¦F.Z´Òtôwo@ë}íiåkGE7¢à¬nù÷éF4ôœcL±ƆÐ-:?í+opO 0=óôáŸþñm¸ž‹1†Œgþ±ÑaÎ9ëò¬™^8aÁÜu…¬ÄÏJªÊG¥E:xÇ‚¹cë8ƒëfÉæsä % …ùBÇsq½85NÙ‹Ü‚qzœˆË8§ïgÿ³qãžÿüçñÃïŸ@Åç\‚V.¬åòp§£ j߇‰w£f¿ŒRuÛ†ÚB-¨•=öï*RžÍ2¼¢ÁÀŠ:F›Z¦%Jƒß”'³Tg389Mf(À8¶ŠpW°jÓ3XÂË(×ÕšøËHG»RØçɉ¥J Rù‹“ÖÚ¦j¤ Wäùâÿ½ŒßúNJƒó3 ¿.Éy!Å¡€FÝ%¨KN9s7Üu3£º³¡ÊI»^Ê–-7óÐCñ¼Ÿ¾å$š5Ì»¼µTÉŠZšöA*[VJ …¨ ÓwQœæPL44ÓÂm4¾ª1LÑ«v¥„ÚÇWÖç¨F°™“jQ uaóÆ›…_Ú˜:^ÌÐ=ê8×Êj¼jÓSæàXƒ4Z¥¦n­ n tÐÌutŽ@û R8x2Ë›órÞýß×¶mÝà±FÞýœ¡ö tƒZ8ŸÄù«ÛK°v5­Ûõ¢g  XøåÖ‘'ß4¯›ih){-ëækh‚–¹¢êmÚwʼžT²k |Lo³úÛßñNŸãÒK/ᘭ[¹ã®»‘R.Y+?ìN!濈šx7¦ö“¤Ý¨66¿{~:ÇþE‚@2¶¾JqØ·9á¡D%õªËüd–FÕ!“®•zäŽfÍÖß`ÍÖâe‡÷lQ:"€\RØr Ú Œˆ*?µ¼/¥ïÿû ^þ..˜ýd˜¸Œo]ÿ%.½ô~†VÔÙ·«H¶ Èd…RÀü¬ÇhÑaÕ©ŸÆÿÙÙ¶7pŠ„r8ãŒ3x衇øŸk÷òÆ­ç´XÐçÛžÂÓÚJµ‰uΘäÝ,Y7àÄþqC¨}êªÊlcœJ0‹+=2N>âH]Um°[X¦V¢ ½”ÖÔâ+—ÖGnd3íÌt¹éqf»öÒ4Ԟ˜䖷G´ë®ÇV&D™0ºí²û$Žpp¥iåõ–Ü]Ñafÿî}ÎP­ñ„6È«¼ÚÁ® ä¦+ uO…kåg2ØN¾¶y[zYº0Lz»EøªLë\in#ÚMêé{ª‹“d«´ 1øàɺÛU8ŠCp4ëÖ¯ãäm[q"ù:Í7{lGX­\¥^!Te &ÊŽ‹—ÉR(P,•ð²¶äªAÔÑØ×ןIÆ[«Ú\mñu†M7ñìg?‹;ÿ韣9,ÝWàºÂÐ&{aúƒèéÿÃø»PQËQƒ Qw˜ØSdzÜF¥¯^_ÆË+B%’¶£A ©ÍzÌOæÐB Yc‹Äˆ<ƒ«ÏgöW0ºîB„ì³.÷/@.‰ž×j¢QíõŒ·´c=ðÀ\ªÖ'„äG_y5{ÜŸR,†Kµ9—1Ÿü€OmÞ¦7œ}Ö_¼ízV† UNßû*î=ù^n»í6Þò¾øÜÛO¦»Ï×.Ƙ¨<ë€<$ŠZ'yïÉtjí’(‹H¬¯ÿ÷¿"΀¶F{“ü%¢—Љ÷iñ«·jåˆ0úÛjä&n“ÚRÝré<ݳèÐ »ƒwÚúÑ ¦+ˆÇ/XA\ÙK"…kµòW?—w}èSɵM·Ôm™Ã‚õZÏiMënnéÞÜ-}È[Äzº¥ï¹Å®?ÝùÚÐÖ³tkÔÉ&_ÓÖ"Ò~ꦕ-þrÑ ™v#4ïC§èÊ7Û#Í\,áœÂM€ëÈ›N—(µ¼ëšGý=þƒóøÅ×~ZÕAdç8æœo²í™ßn»Gºå“Ç|í¢‰w¤N5ù<˜YA=,£LØ ×›óºdLë|Zî” —hëi0ïRÅíª«>E.#Zn­5›6­bãú•‘µ#Þ§U4)×.ÏAJ‰ã Ž›Ãu³8ží`&]œfçÝ)‘nÍÚ÷iìkoin“REâîÚ¼ygŸ}_þòµ i½Ä”Ô¡p1û?èÉ£kw Fië¾T¡drý» 8žaÕ¦2¹Rˆ2‚0ˆüáJR›w™ÛŸ# ™Á¨À‹„¾Cnø$6l{cŸBæ1^+ý`éˆr!#cš°Ò­ãü†D+ÉR*¾òY>ü¥ßýîw9ó˜×´üvË·^Åyþ„±‘|^Ѩº >¹BhË·Ö]N8¶Âý?¾–áòs;Ž}Áìï0ÿøy¾÷½ïñ—ï}˜?TŠ z´§ÿ¤_†Ð¯F^oDqéË&q1g\Au) M|äv<øÜŸœŒ“Küä UÅ×uja™9’j8‡ÒBHáò–ÿüZËÑj’kÿúó}Q:äyÿü»Dzot¡Eë“ÑÙåº?ÿRHêaeñcÿÝ‹I4Ê>«çu£nZùï½îJÞõv޹З <˜ŒÛj­ ת™*̰ïÎ3¸ïú+¨Œo!Ô>IÆÉE×ȧQ+ðÓo^Ìw¾z&Žp)yà ®ÞÍ)O¿†5ÇÝ‹ttê¾LWgK D$`~í_}¦åÚæœ£9—yŠ9bÑif<¯~ÉX_<–cGΦä /| ßöÒ-[[Ëç«?ÿ…¤è ñâáV.#ûð3øÑ­[©LÐ(ç C‰t¼B™ÒÊý¬=åÖžøÅ±*Bʨh‘‹#2®­cïzQÊ+=«–Ip©‰û¿Ç‚ cb«S$ÔÆ&vt3•®C+o¾rÙ §v*_þòµe^‡C\‡½~;L½=ût0Ž6¶Ñ‰Aà7öî(1=‘c`ÄgpEéiÚüñ0Œ:–Mf‘CnE€pAR†×]ÌÆ“^ËЪ³%¢Ò£#È“ÛÜX\™•¹ê“þò7ó|øK ÆÇÇùù…âôݯJ~˨ \ûÙ§ñ²×~‰‘UUv>0„_qÈ”4ùbhó¥àô'~»®¹”œîgTÖóÇwTøâ“\ñÄ‘V-%¥Õ ‘.o¹8e3ñ{U ÑMaþ€Lë¤Lö{Ð ãüîBs‹Ha5SWflnyTñ‹Õ¶¡ì§ùJ\hå½o|3ox×?G',¤‘_÷—WEã3¸Ò#Цç±ëªbKȶ˜ƒ`Å"×@ÐE+W>N:x²=Xo o]A¥é‰¦)=­µÒ èw}ãyìøîKˆÂH¡‘ÂAE¨D X+ÔÂ2‘üÌÞÕ|í¿AhœýôkÙvþ/Èæk)æwsûÙ~m}U#CžŒÌ‘‘¹$­¹"ÃHv ÃÙU¬.l!ï”znÛlÌÓh™w·hõ\ Äõäeˆý/Å™~Á4&‰¢7F#Ñèª3ÌOçÙ~×B}!BÎxæw9öü»É5¢÷‹ÂTÔ#M³¢6ø4ý x§®qªYœ; ¿]´r£5™l†“N:‘b!Oµæ'ÊúÒ#æÆ‡Êõèñ·cÊ7btml´¹Ò‚ê|†=Û‹Ô*FW×(Žø J9„¡5¥û¾Ãܸ5¥{%…7 0ÂFµKo%ëŽ}ë¹-¿ZÝÞ #¢²›ÕV—Ò>Îñ»F p— ʬ‘üù+l×µ×vš®vÿâÅìÞU$Ÿ×Œ®¬S™É È—|¼Œ‚@°eS€\ÿ¥®Çšù .½ôRþò?véHê(¬=ǹOm1©Ö)tòÓʦ»ä³K½ÙÛ¬fýqfãTÃyªå«$j;ãäÉ:¤p¨34 °D n0“µÝì.ßÇT} U%Ôj$KCÕ¨¶ÈJ%˜å¯_ó¢¶ q©ÅØåËñqé¢QøºŽG··ìO³·ò÷LÿȦœ™0ú ä…1&I k_tTF×–ÂMiå¿õHUêC‡ÍsšÅÎÙvmMëXö1&ˆªäE|Ð ¦w®åÛïù[v}÷7‘XSF%‘ð¾ªS 稳Ôà UC£p¥mØaóâçlî·6üð‹Oå³ïx.»ï_eÇU賋½&^ŒÏLcr]• hh›áPWÛØ£G]p)ŠÞ+òX™ßHÎ-Ù¿Ôõk¹ŽÁt”_¤î…€f5ÁÓ“{¹á[בõÀ-ŸsûÈÜói¼™gYtTû@i\èF£ºªPW•ÁãG_8—ÿÉ‹øÎUgà—ã#m)b_ƒÀˆ1A´>þ;º~IÚY:E/„™®óß’þg?u¤¬[»ŽÑѱ(6åàÉq–HÔ‹Ô4L³ûÍèù¯¢TƒPÙNd~ ˜žÈóð=C4.«6—)50‚Ð!mŽxµâ1½+O}Î#7â *?tÈŽcËiÄ–SßL~ð¨#ÄáÑÈãîgÐFà¸UwÒ,M’‚ß{Q¿ÿïõzŒ¾—ÇM½!ùÙcˆ«?ñë¼ñO>L±äSžËÐ(»äCJ#>S»¤†SŸp=?ûÔ“É‹ÎÂüx/çF÷FîÝÞà׎óŠg¦};Ý|“}9íñ¨d­xôœ¦|s`_îF“Ñ Íèjmmª©†sŒ×v45ò¸9z$]¼òŸ^Ë[ßø¸Ò£à ‘s x2kÁ‘Z©©2`ì±ãêŽñÙÏø¥oÐ4T@Õ ŒŸh nPWæýIöTà=ºªE7 KÖMa5·ØGœþUàH·§V.Û«½Ñú° E‚M­5«Gš¨ì¾ó\îüÂ[j Êí·¹Û¡ö£ |Í<ÿ8ØLE„2!* l:‰M¼¥&ö¬ç3ï~!—_ù)V®adÕ­föØW΂Å_âó¶,ÆæþŒÌQô†Â%P BÑUÝY<ÆOî«öà¾;ï¸ÏÔîþsÄŽ?ŒŠ¸èè¾õ u€2VÕ:Ê4*º_â±Iá$€ š[¿µŸóXžþ†o±åÔqpMRˆ-¾.F ÛHÇX ŠÁ‰„±ÈßnB’ ÐnZybZoÞ(Ji”ÒHÇedtŒÍ[¶°cçÎh|è§™kLã.ÄÔÐSC‡ÓQÛQFà×&ö˜ØS W Y±¡Š“Ѽ£¨tHªs.ó9 šҳ†PI yFÖ<Ž '¾ŽÑõô\éˆÐÈ…­±í;±¾! F Â%Å1 òYÉ{ÿКõ®»îºŽ-ªÛ¯àç¿XK¡Rðñë£ ›UTÕaÍJÈlù\×3¸3c<õ©Oào?¸—j-Hi¯é.]iÍ|q’2ŽÞýÉö»0_>нu?mB|mµ¢†ªèºÍ Æj7,§(3´j­ó j0Ëxm'ãµÌ4ö3LS g#Ó·FMh|ÞôЧ7µžd±šéµýyá¢L@-,'ù쾪S f˜ªïfwù^ž»çneõáH[JiÇ‹6I1ItCU©‡ejá¼µ(˜H˜²S+Ûš|h ¾Ó}œ3}zÕk¤é55ô]·ŸÁŸý„*%ÅWja™ºªPSe›¨*Ôà •`–yŠù`*ÑÌ«Á,Õ`Ž@Õ£Š}Q¾wTQ…×|ø…ìÛ•G…‘5¡Åº Íâ/õ°{Žj0G-,èºRB™¹l<™Åƒ¯j¶v´_z)3‰Ö?ïOGV‰hÑAbøñÍßÇ%Gí§Ÿ€hç`|UKÆe¯¡½Ž5U¦ÎS f©†sѽm _Û{=N—3ѽ~õ»ÏMW‰6ÞüŒx”¾n-Ö©¸MqZ+×M­<8¨”¢Þh†AÒ¨×áŒÓO‹î ÈF« Æš¹Íšéïat澌Ùõû¨ñ÷¢ÂBeÍà*ŠJø¾!&÷ZUgõ–2ÂÕ~”®$šÇ̾³û ˆ;8™5¬;þl=÷-G,ˆÃä:Bp“rÇi»Kkái÷ÙÓòÑq5_sÿ±e ‰ÇõŸ{9• ¯¨“Í*jó®k»£¹ŽBø‚3.üeìz–³ëW’ÏçÙ3ò¾ÏL˜Ô[€¯³¨ÆB¤ ( ÒIIò ”JK{Â;R‚R§ {Ø^ÓŒÝPÕTÓݶ4…“·¾çߨ‡efý Bí& ŽÍ gIÉæÏ^û›ÑË:H̹_}ëudœ|â»W:HÆT‚ð¦û˜ñ÷3ÛgÞŸäSÿsCÛË5zÁ.Â¥C|U£Ìò7ÿúgÌù“ÔÂyü襯LˆÄ±Zy*¯Ü¶Fm냾„>óö®LƒfÊ4oB¦wnäŽkþ„ 4uU¥®Ê4 U¥V)ÓLÕ÷0^ÛÁxmûkÛ¯nOþ¯í`¢¾‹Y C)ÍDYÁ>úLöî(5Ý-fä&í=PSeÊÁ4sþ$sþ$å`&¹¾1éHÛ­« å`&Ù¶s™HŽ‘Üc-ã°ÂÝ-¿ø)®Ì0ÿ£«`êéM+OØj*á,³q&k»Ø_}˜ñÚöhÙÁd}7Sõ=LÕ÷0Û·kLH˜ä¼Ûçáû_<–ë>z4*´®ŽôxLÂ{™½¼1­‚¨öƒF)E4>ÕJòü<•rßo®ãpÌÖc€ã¸K3î,B6¥ÍôæÁNÄôû1{ÿ=ÿUB*›Z{ 츈ÀwX¹©Âðªš8$¡¶&÷ʼÇÌîÕYo0$; ¥Á=òç±ùÔßcÓ)o¢0tÌ#8Ë_>:"LëÙŒe+™Å‘¡qà[©°”#Y³œtàê·ðœ?™æ;ßù'ýÚwY?uA²•š¸_üøοàFÆìß[°=Ë !ùRÀüL–±AÁȉŸ&¸ã;Î"Ë%žúÔ§rõÕWó/ŸàÏdt0%qtIïZŒòVh |I>Ú½ŒÕÈkµ‰Ê^¤,^ÊoÜ­°G§K .2cùÿñ.Þøš+É:@$àm5Z™˜±]™!ë,à§üÊ3·<+1{ÆþÍØo]-(”ƒijáùño÷¬4æáŸa´O-œGJ¨†s6@* ð3F#e&ÒØRZùw¾÷í©[¬­2]_—BEBj* :2%ßòÅ?D‡y $ÐõD±þÞÕpžy2é0ªF×N®ðÈ»% ÞwO6»•%Ö•áÓ}oþ‹ÏÒˆÕÆÃØÅQ f¨…ó(Fq922ßR4I£€Žb.z‘Hî“HhˆSÕ"žÞu×Ýx.ìýáûÐ3ATÈ(áIÔ­ÆÆ•`6ѸÛI"É8y2£”¼a²N×K0!$?½~3ùá >sŽg]R8 %F: kf×QuH ZEƒâ =ø›2+$ _¡”¦ÞP ¤ã’Íæñ<•+W184@­ZOØ†Ò íºªÕ2B<Ïk)po+ê?¶^f¾€÷j•ÆT«.㻋ÌÍd)  ­¬ãxÚv+S¶˜þ0L}ݸ¥m*›#î0¹7Ǿ%¼œfåÆ ÙBh»•)¥ŸIêósû²„Z’q²š+ðä‡NfɯfÅÆËq3ƒ}?G@nÛO „Ððmõ0w©>òT¾ï)Çd¸òiE>þ• ¿øÅ/¸`KëÖ÷}ï•L\öÆÆ|Š¥€êl†• rÅjÙ%Î>w_¾í çwœíôñWpóú›ÙµkÿøßS¼÷WÄ3jN¬Ï~6 ÒÑ„ä„ üÒâÀ5rÓò±ä}¡{…¸¦åãÞó/üök^NÁ¤è G`"’ýâ·Œ“#ï0˜Ã UC‘øëãŽl±97ŽT¯3|òc×¶Œ©u,¦ïùÅÑëñÞ÷Ÿïá÷o"ponå# ÒH„±9Úïü·ßàwÿà;yÛ׉SuË#û}?|.’(ì@Å W¬0c‘س˜Ÿþø×S§m V×]õS~ó•GèF’B(¢jBi‹ŒHjä¸þ'ðœçßÜ2Ì×ýý‹;4ôç\ùd6”†¬Æï»š°ãó„ÚçþûóãkJOêêEQá°s×n Õ½b"MÜ·ÕoD~ñù`*J½«òšßº†sNó1ZFY$H[|A‡ë>s¿ù²£ñUWxQ×3ƒŒ>c ´q.¿øÁ0ç_Ö°µÕ…ŽRA›MZ\i0\W’Í[ÈJLCÑPÖz¥TT¨°íQm¤{œý`TÈÌÌ,Ž›áמþkLOÏð/ÿú¯LLNÚ¾Ø yÃÃH)(—k4ùûý³}ö9|âgnnŽÓNäæß‹šù,FU“¼pcÀo¸ìÝ^bj_¡•u†×Ô@š$¥L æ§<Êã9dÖóÁ(å µËȆËÙpÒkZyfrï-S“ŽŽxŽH5Ê2Hdä/¯/¥ó—H¥ƒDË_¿f€½{÷òñÿhÙÜQ+øÊç®Àq ã 0Ø®<ÙÒPà 8ñâÏ7ýzéÓ….gžy&»¶Ì6ZÄ­vqò¢Ò‘VJ¶Í씆Ãm`Ò>þØÌžöŸ7üþヱÀŒÕ²cvüÒw„GÁ¤è‘u  •`†r0“øVª–¼¨+ÁAÔ‘íª~)h–Ž oçó’&‘6–wK‰©7öñJá £žáIÖÉ3¾ëÔ/ÌâêRûùZƪØuÛ¶}l,ȘfJ•bªÔÃJ”§_çª^‹‰¢¥íÚ›×üá_Õ“kƒ¥#ÜHC#ò­¶úÓ›OIÍ%ÍËT±4« ›Y™ßHÑj±\t#']r7=ÿ8ßÚ6g±c×8¤<ô½·$<‰ÍéA”Co…›rR•°ÎsÎi5¤cµy)42ú"®áò‘}•jh]4NâçÏሦŽd¢{ýSï_‡VqDz¥nÇ-"žÙŒK©T`hh€‘‘aV¬cÅŠQFF†¦X(‘ËåÈdr¸Ž- «µÆh«Õ«0dvfc /{ù•\ùÒ—’Édí6Æ ¥dýúuœqÆéüVJ‘~b’ñös¼ê•/aï½ïC=üÔô'Ð)×Z0?›åÁ»F˜žÈ±bS™ÑõÕ¤íh¨%¡øu—é=9æöåq ŠÜX€‘¶zÞ Öo{Ç>î­ ­uR“[5A055E©Tâu¯ Oyò“AÀ}÷=Àž={) uÔQ¬Y½Š|¶Ÿ®`ÍgaÍ Íï¼Îßò²Üå² ÛZ4p˜Ø[äá{†QZ°në<c à¡m$*Im.Ã䎵¹ ¹Ñ€ì¨B!Q:C~øTŽ>ë/ÙrÆï‘ͯ>¢ ¼,•Ž Oúrè¦oÈq *”„K©qn ™jlðû/ R©ð½áw·ìâPàKW½axE  ‡LF“+†8Âà8õ’kM­ó”F²qãF¾xSÜVo›þ€ÜW7£ìÂ`´íG¾”zóm£;TW¬cùûwýõ°ÌLcœ†®¡¢`¨$ŠEÏS ç’¥ÎFAKóIÕ¹j8Oٟ擽†–â%Æt=÷ÁÔ¸ÂèÙêoM­ˆŽ4ˆ%q ÕG?œÉ;ÿ`%¿ûoã|ík_ãñ義e¯êÎ˹í_âÔÓ·³bu½»Šx9EaÀ§Vvhø.ë×W¸gÝu°ç9g½¨ü{LŸ5ÍO~òþò}³|ýÝ+è|¡-L¹ ¡ÑZâ ëoÒÖCWêÑ×ÈMü¿‰ÿêÀ×üþïþ;^ÿÚWSò†q<)ÜD›U:@Ñ)•ÅAHÖœò‹ô Ám=Ï} üiÓßüëð7øo-¢t:{LkaP¶_µpðœ,¿÷;ÆÛßýddÎZP‹ ¡uœ“{¶&C\ÀÅVo “ҹɞ-õúÛ2º'³äÜ’:06‡¦_:ù’ÛS@Þ! à=×Rž°ÇïÑ“S‰:µóq6Úݘ¤àPÌ“Ð)ß¼à·~ëUx"úÒV6 œÈ€7Š#»¿(á‘uòl™kLP g!º›ÞŒéØõpL¥Y©-”D\ðÅ R6³Æ¿aâÜí( NJ\ÇÅq\ ÂÁK *Õ:•rJµF½ÞÀ÷}¦¦¦)xâÅsÅ3ŸÉ;|†¿*•:÷ß?+W®ä¨£Ž¢X*qß}÷3==º‡›×j°¨¹ü ðúÀãO·–Š0”Qä¹dn&Ãøî"~ÝahuÑð}'©æÖ¨ºÌOf©W\ÜB\+‚À%SØÈŠ-ÏfÍ1/ 8tôÝ#G ¹1I%7!l¾²Ö=Z_.D‘OSàDŠ¢–›Âá•WX­\kÍ×½jÝ ‡o}æUhe( jó.RÀÀh!H-8å¢ëð™ézê“G/à{·|åûQ“ŠXƒêƒrûÚµ/ˆ¨Qƒ0˜Ð9ÐWjz‚àŽ DäÃûÞÿ_4T ™¥ùh£âØtÜbBrÃç€IDATŽêµ+ùƒ?ru[ÐÕbXê[sÄýÀÛµòæ«> ^Ô ÄfYäœ"'¿äóÏL®±šw\Z4Ê­¶ß»ÄUtð¢‹fÑhn%o·Ã.Z´j‰dbb4õsûtãôe^í÷Ô¾­-Elž ZRݲNžÕùÍ;r6G žÊ`f¬'ˆƒ­×PU’¼;¤Ï™öûØØ ¸]š–´853ÅŽê]´YÚŽets;Ïs)•JŒŽŽ²jÕJFGGÄó<êõ:ûöíE:.¿þë¿Îi§’WÛ™/ {öìá®»îÂÃæÍ›Èç³IVBLVkÞôø»7Á…gÛ®’JK4¨÷ï.°ë!´–¬ØXe`E ¡E§KÊ3¦vç©×2C¶VºF*âØÙl9ýÙxâë–A|‰tD¹ëÊHPº%—Ñ( %˜Ö›àÝðø»ãº|úmÖ~ÓM7uì«fÎâ;7œI6§( úèP¢CA&Rö Ë’£ÙÍ×t=÷1ó—qÑEÌÿúóh•ö .Nû¦°mQ°Žt#5å꣯‘/þ:N©Ý›Yçdq…Íß#†»%N‘BÛ·(E¨ã Zžþæßþ€Ðø©óÛ@,7ÒÈeT_~üãÿL8”•ùÈ¿»šã­”¬ß×ø©.Q¯^®˜–¸„vwBX²ÎâãQ÷»¹¹G³PGçõJ‹SÕJ.2¡‰ =®£ß#®ðÌŒ±ª°™±Ü:22gËÑviÎ’^l¡i|m£×c+QË].¬@7?ßÔrã.Å"©£žÎI¼1©@µ¨N{êw­5R@Æs) ”atd„ÁAÇ¡\.³g÷nN>åžóœç200˜šw<‡©©)îºó.«V­Æ‘"¹ .8]ó¶ßƒßy lYOR]Õy÷1±»DqÈo¦–)Ûð$Ô’Àwl™Õ=9Œ„ÜHˆSÐ(#Q¦ÀŠ-ÏeëÙÅÊÍWÉ ?Š÷ͯ@Þðm¤zR9ÌØÎ_Žlvì‹ZÜ¢%úûé'›^5÷G»ß|ík™/K†Fd²Šú¼‹# _Td² |É©|›ºØÛõô—~)%·?¨¸êu–äATë¤E‡aŽs *uÚ”z¾òÅvíb’ý»wþMRÌ“ÙE£ãq£ù߆þ@û`æ¿¡›‚ŸHùÃc­ÜžE&¥[=™%ç”(zÀ ¡kIe¸…}å¢ESºÒ:£n£#m´Kqž^÷ÐcD* cðƒ4”¦ù’ZœÉKÛ:3‹Ÿªð§MŠ'QjYÎ-1àRp­Ÿ¸¡kÔT¹¯%ŽÉtÃFî'.†øcT¯PŽê¥Å)X0nIÙ7Dty£àTÅ5£Ëe¸B¤ y†GFepp!$“““ÔªUžñô§³í„ã;.¿ë\Ç£\­°}ûv<Ïc`p€|Vóâ§kÞñÿàÙ—ÂÐ QʘM›žÈóà#TË+7T^SC8¶™I:(-iT]¦v(Ofð¹Ñ<›~æd7²éÔ7sÌ™ÆÀŠ3T§µ#ŒŽ Ïe¢]6s‚…´º‰^Jf‘ˆº![´q»Î‚ú÷ÿû8î¸ãŽÎݹñÚ§àHÃÈX ‚º$—)”LcÆÑmWw=½7µŠ'Gѧoýp…†ß?g\÷‚ãØ¹Ka}\z‰>òþ“>JË ž¶—~Ëo­û}䯾ÀXn™Q<™¡ß—º@ð’W¾°í<é±ôX– 8HÝ+Ñò7ÿþ'=µr‰쌓#ëäùÈß|_Õ¢Zó$åPæeÔ•LÌÚ´*ÕˆJ6’Îf} -´q„¶2¾n€¬¦Æ•æEûµ^*o{-MšššJ¾kíP,Í¢#7‹ŠþlŸñf¤½#lÑ_Õ©ëÞ{™÷§¨Fu â,mTÒ`eÝ–ùäÊwÄ`¤Lí骈DíI¥ì|òb€7-&zÈå2 166ÊÀ@ ¥»vífË–Í\ú¤K( IÀ£ãJr¹ÅRR±ˆßðgóz¿ú-Éßÿœzœí"©Â¨8/Ø¿£Èö{†ð²šµGÏ‘"-Ü6< • <ã1ñpžFÃ!·ÒÇP(ã†.Å‘39æì¿böW’)¬ZŽJ?:"‚Ý”0Q·Lë›4´Ôè“Ú¢ÖEçKä´ã’ïïÛþ^¿éƒ-G¸íÛWréÓn$_lP(4ênVS ¨×\‡“λ™›î¹œ\Øé'zœy9×g®gÇ>Ÿ^SãÏë/¢Si0ZØVŒ¡ÄqUlœ ÔŒ¼xpTï]ÂXÝÃ’I³Ëihn6œ]•©†ó€O?”qò fÆZ›Ç}ä´rC$äu=ZS+"3¬Œ*¾ÙÜò“ú𑯻7Å'»‡Ð_´)]°Nù‚/Ðþ£Éãb+q Ølq¦•Æ,ñ˜½æÚÏhš_¦v<ŽÁ‘ æ'NÀ[GÚx¼¥-[¦ÕÈ?XŠM÷q7·¸çÀÆÍBxÛ­5±Ç"ŽùH`>²¤Ùq§©lS¨8Jžøo4Ùl†ááaâwTµZ¡^¯ó¤K/媫>ÉC= @&ãQ(ð2´²¾÷mG•ù× žüxM.cMéÆXŸ¸_—ìÝ1ÀÌDŽá•5†V70 ”“Tj Iy*Ëüd™Ó†}pm)V# Œmz ›O}Å‘š×Ët„hä~%ü8&åî³íE—ìæÐaZ²c¹çšSؽ{77 ¼£åŽæ?üñ‰\sÍ5¼û3ýyØZëŽc«/¹^0ôSW¹ƒÒšø)䉢v¡™Š“¢ß¾ò?&ã¸ÄíBCã[`CGÅ£ÎåoPÈ™¨Nº@#¨ÌyLì)0?“¥80¼ªŽô4A £"0¿áP™ÊRó@Bn,@z†P B=€7ø8Fy #/DºË^i:"LëÖ‡\žE¾K®ìf_š"µX ,z€£‡zd0Ç¿þ¾õq_ýõ‡ªìº˜ŸüpÙœb`¸_u0J+†d£Ò­GmÝŽþAסœ5óJÖ¬YCµ?§XaDô’ ê_MTÛùøÙüãƒßbÓsZ(jšE[0¡6Š@ÙÚuUI¸â‚/5U¦¡ª‹¯êÿ¿½÷—ä¨îþ?U&Ý|ïæ]í®r–@B!!â‹@L6`À6Øœ3/ïûÚØ¯Ókclcø& LŒIAˆ ¡€òJ»{s˜Ø¡ª~TwOÏÜ™V„4çyæÞ™žžîªêîúÖ9ç{ÎÁ[2Ô“ N WøxÒÏ °¬kfg³UeœÎI½ë%¤ÇÈè\. *ÎÈJæéÜ«ÿB…Îq’ýgÝŽ_žKbÇUV»½—øN‘Wüì‹ÖîrÏôM70Z˜² y’ØêÔŠ'iOÓÜå…Ò—\€tí«Û-•n'õO·U3Ër'2³~÷­çô~!³—6vñ® $Q¤’Úô‰Å#K“˜Õ»Àüg_õ222kÇ=šÜ Éýš7w› Üí¢ß$÷µÉýN¢ç¿O9;6I“5¹ƒHLä"i;ˆ$ «M 'Šã8‰–nû¡”ÊÂÒ”RDaD½^gyy™ÙÙ9:„ã:ŒŒŒ2:lø‰güÏWUyî•-ÊElÙT#PJ0¸Ä»FiÔ=&v6ßÑ@¸š0’ÄÚ†–5ª‹ËÔ–}œ’¦0eþð˜]·¾˜mg¼Žñíw°írôäQä"É¢»j6Y‹;íUàŸ¨r×Ï_³€8ŽW'‰‚/~èU¡a4)¨Òªº¸I™SGjD,9ç)סÍêÕ†ÛU6"µFš}S`DÂŒ5¶˜Œ>¢çª?cxÃcÙ19vóiâOÿÉ7q„‹2QVØ"Ô­¬Æv3É£^ V1ˆ[ªŽ2q–ë:ÕÌÓæ¿úÚ_D·ó…Ó~e ´‹Õ½N—^Çë7ÿèZëW,¶»*fú¾#ûª±ìnÿi|%Ë'®¢U7k=›ž*îÎâêþ§ßI¤­ï²¸4{\›¥¨½ä޾ ™üKé˜@5hÄU”‰³üí}ÌÂéýJž¹û8˜íc$Z ¢ØŽ¯21¡nÒŠë(õ\Üx²@ÙæS×o]u_v.ÜŽEŽÁVñJyvŽpùÿ~ëÏøàï¼™÷ÿÖ›øë_xEæß·šw~ “št!›&’™†nÁ^Ú8òìžH‚Ÿ·Öš0 i6›Ôëu–––˜ãàÁƒÜÿ½><Íi'I~û§¿û3!;[YW£²±áaàrð¾Þ;‚ëk¶ìiP‹PF&aeq,©Îù,ÿ³<áÉ_§\QŒŽ4«•‰€ÊxHó€‹tç>åcÜôÞËq(u¶G;ìß¿Ÿ»ï¾{ݶ›™¥íâE¤ìX a¼Ùp›.?’‡R$+ ѾjÜðÉ?úÏ¿xŽeâ$›ÖRR–t™P5iÄ+¼ó]Ÿà/¹”¢[IªsÉ,|ˆY&·+}Šnc oüåÿÅÿîÏ:û˜]÷ÍuÍ€xcååÙ/¸‡¯~ÖÐŒkœrR¬½Ø4ÆôýmçX&À˜kÁèdÀcžôi¾ñŧÙXõ$/½1‚=§€ÔŽõuKòÆù_¿ôÛüñß¿y•ëä³oº‚ãÚг…GVw •M ò”§ÝĶmnöûu›/E·BÑ©ô%¼YëÁrðËe[y/ŜҪã)sÁËÏáÐjµÐžúê§ñž¿}R8ø²º4Ò¢;GºøØ¤®ôxÃ/þ£…-¼þÍÿ'w¿çÜiT‚ëÿïçB tŒ#]<)s‹Æ˜F\e)˜FH ÜÖÌÞŽ °äµœ6Ÿ‚]òYip\׆–É$C¥V¸n‘(¶¦vc¬õ/Š"Z­µZ“••*ó LOO3;;Ïü샜2õ-žváwØ6±bŸeϯ z°ÈÇ>ãsýU"óÂgJžó¥â8É•ÞtY>\$lº'"›¡MƒŠ]¦ïÿT?ÿ‡ß`dlÅb×u;|âG_@Žé˜Ôe¢J’–òܰdøjß®ý>Ïrn“¶þëçÊŸ¾ï}ï{¼èñ]‡ ·óù<—ç¿üC”‡"š ÚêhC“!ËÓE&Æk÷~Šè¾¬jÒ“ê¿ÎÂc¸é¦›Ölz’Ž‘©l@’4˜H¢7~–'ý©'Ÿô.9FBZOýâmµðœ_<Ðͤ²ÙJfšmÄÕL{v…×QÚÔ•^²þ£­‰XÊdò´1é`GdiL¬ùÅÀêccøÍ?þ'þôõ¯Ä—Åv(Tbm¾Ötƒ›k{[‹½úšïsû-{˜ŸÞGÑ­d}B qÒÀ%·ÏbJÕiÆUZªN š´Tƒ±­÷ðêWE@»ÿkMÜÆ&Š;m†>áÐÒAFxK-?R8Ý!›‹Þ¢ì2ä'É€:EMKÕÒ%Š Ah®R-攉ˆU„#]ÜÄÏí¤À1¶]Ñ­Pr‡ù‡ßýG N‰Q ž³:í¬+|Š®…-L£…ÌJ¢*S ˜iÞ8Hé¢×…6™X>Rº½îLbI’™†¢I™ùΆXÅá$þpCÅ4+Õ‹‹KÌÏ/23;Ëôôa‚ú½ÿß-þêË|ùÛA–-Ó÷ý&~œäQäš$Ä)%‡HM¬i(—6s¤“º ¼» SÝ`~ëÇž Àý÷ß¿ê¨Ò ñÉ÷¼! cS-t qàP,*JÃ(ÍØHÈØëÙªòô>.»ì²5[îyà¤ÕÞ-m‹”üÍÞùЛ#ÔÌ?±^n¼,}æ?·¿ø n&Úø ïßwWÈß¿ãcIæ7k¶ÌgKèé/ÿ…×t§Ðe&'ûmwu¨ì;á,ôxù¹W{ûüã{2?sþøù³eE2zžÏG! ÉÛn!}N>=äÇ_v=Ø&–IkqGI n «¼Vt*Y¯$Õ -e¾å@7iD+,3¬„s4â• ¸^ñªïsî¹ Ò}ûí¯‡6áÍæ*O‰})³Ü¾,â9E<ég ßë¼Î3Ó¸j·£ŒC³E‚0¶µ\¯Äï¿å_hÄËY8eâl£Â.¾Sì¨bæËRÏ…C{Ñ£@5r¹×«–ˆ-²ÎÒŠëé¡SŸ;"±¦Ø ~Z 4Žõ›$²DHŠ–€·Hbȵ6IHYL†4-ªÕ*óó žžáþ8ðÀ̾ƒ•¯qõÅ_ä’3ïG «A-ˆ"ÉÒ\‘îáû·Kþó{žê}5ÿð.Eu¾ˆ;¤)M…hZ¡àžïùx~ÿ wèÔŠ~üäQaZw¥5£g¹F4Ég±áð- ÄI™¬¹ X¹ +"«ólµ¬}»G²ÃüÕm/ã7Î|wÇ¡gîx6÷ßõIvŸ|À–9­{¸¾¢<4\ZMó/ÿ/¾tç3pãídö癟:þs0¿FÓ…u/h-AÆYT¤AmšAšó‘÷!»å®gè“°Ä©ÎPtÃ'~ïƒ}ýâjP—©F‹‰_¼E üêoÛ‚Gñ'“ºßÖœ*„Èâ‰%²§¿ü÷áøƒ¾¶Ý×î˜ç,ùI”åÒÎW3©Æ™|÷ØuG¡èá$±íù$1@[SÏ-Ò°µöù’xåÜèçß_ú¤&±ù ïçqâüÄå …ƒ6´Ñ8n»¶{¨ZD"Èõ·~µ×XgY f¨EK´TÐ,ð3¯¹gÏç?y&IãJߺ8tD$¬™¾à”ñMD(6¶ÚM”Y;Zʺ{ÕÈÕ ×HÇ.òŒ‘HÇC$nmÂ$÷`RpÇq\T¦¥’<ü±" fÈÒJ•ÅÅ%¦gæ™›[`nö0#þxüÙ7qÎÞC 1Z%ÌtµeŸ™+4êÃ#“æ.ÍJµߪ ;Ýä%;F˜[Ð|ñM>ù¥&wˆ0=i?¾ò¨ò$z#«b*$I'Ãænµ6Sµ# ­g(–IöµÁëÁÄh™7ýú¹¼áÍ7óÑÏ¿Ÿ .ziÇÑãùKùâç.䊧}‡ÚrDuÙgt{‹BQQ,Ç4[<þÛ\óÝxáÆÂÎòc`‹+`B¶Íµ“c’ƒ›:šÈy§i½Ð¥ZNøt›« |ä ÿ’’Ú¦ôf\£W3n+®'ñ׉_üÃk×½þÓw|‚ŸÉEÖ÷ë¹I"ˆt‹PÛPª‚S•Næ/ÿåW<•·ü_ËŽá ŸØ„qÃæÐgâFRxd’jÓ 1¢€ÅMÑÝ‹å"v!£30³Àd“ßh:µ¥üù4)§÷]ú6µxØm'Ÿnøã¿zw];Ç?}EgȘ´|Z´dÜ ‡@'ÙÚRËHœü·Évê\öä;øõ_›Æ{<bãý7†?zÇõüî˟IJnë'‰ûBdܤp(¹CœrbMPÙ'½¿t² ¨7c[K ¹]+n‘re dc ÏùÉ*ÏýÉÿäeלFɦèTðœBÆpŒ]¸ˆHd©{Å>·ÁJ tDK5ˆtË.€tœ%*R:NH|ãÖý&=´IL±™Žú ‰/=‰’ÑÚFšh­ #CÆÔ-—ª,,.13;ÏáÃ3¬,â´-ßâñgÞÊž­ËrOŒ`þp™™*8žajWbEQk®ÿšf=ªÌn¸àŒˆO¹É—o ˜_Nó^÷ÇñPj3·r¤òðò.ÍçHýÄóÀĉOØ €+Ao6!Ì*Ïe}ZämóºÍ¼"ø¥—ÁÞ|3QñYïOyFôúŽS|ýÓ¯â¢Ë~•É­MêUÆ’Gy<¢44]Œ†3¯|?w}6ÿ»õÔŠ>¸®! %Eƒhg&·åP73¹ W™Vžfèjö:è!|òÙ¨¶R—+}«QEm‚Pê{L}È{žüǰ^ºG{üyßͼî%QñÆÐFÓŒkT£‚¸¶¨JÁ)ã%štÁ)[ÿxbµh©:­¸Ætó>Õï¢.¢é$e¥àâ†-°öª²¶FïmŸåÿüÌ,ë&ͨJ5Z¤׺ÎÓû|Bv±Ö»@<ÿÝ+_e¸úywòáÂ׿:…jãJ)\\á%î"ËMˆ“,hiE3é/páã§ù©—²sçŽ\ÿº@¼Èûõ?_¾þìÝ7†kžS¡ìãHÏš¨ã:Ž´Ék<§€I|ýÝ œüýÕhéìôR¯B¡‹ÛþÇ3fð"&ÐÉ¢ª¾æý„í|í®ëP(ŽØV:nY€LmõyχgxÑsGÖ¾G+¶‹7éÆŠšÊ°¡TÔ ÙÔk’°å â\ Y‘ ùØg'AT@¸I8¢›ä\·€m’ÿ s»%Ïš4›2KÕ+MkÂØPo„¬T,.®03·ø°{3O~ì·8kÏ4žkÐZdùÒ5ï¦Y÷˜ÜÝ`h<cë†+#84§™[\1?9µ»X ŠW[~båGÈ7~ã8NšÍÍ&€&Iƒ`SIÍ:ÈnùÔ¢m@K'.³ ÈÛÜ5ÏÚÏ+^Æ>üož_ø£ŽÓ|ï‹/ç‰Oû#ã+‹>­šGy"¤<6T 9óŠrëÇÏé‘ ¬·|» Ñ „kÓº‡•úf5ò¶\$™©^û÷ÿhrù‰& µô_¹ßÖØ…ƒ6val(¥ BC³³Rm°´\gn~‰Ù¹E¦gfÑÁ½FÁyOý0ß~ßãx¬À.qò¥Óü“®Á–KÜ”¤@cð#X¾–œ ¾S3ÍOfè¥}=ºÔ«GY#èà«z=Ÿp»Oë),m,é¡Q÷ÐÄ{ƒózZøf½ËŠÐݯŽržkú:ýïÝï.0ï9†¿üÕq\ëÉ#AÉøÈÑÆÇõ‡ÚÌþ/“;¿‘ŠüçU‹R‘Ô—c„H@ºˆp ¤Å”Ò\íí´½.Âñ­¿œ$Ûð°™Ý쳤ÄJÑ 4VDµÖda±ÊìÜ"³s‹ÌÍO3äÞÎ%ç|Çœö ž£mh™h%¨U}f,S[)0<ÕblK $D‘@i¥QÓ¡ºàÓXñ©µYO¢(brr’ééiÀd<Šõ¤ørläùf&à#Ÿ¬•1–±®cdBBsàðfš+–˜ÖEžeÚÓOÞ6­‹œ†ïìyœ÷œpÏ=÷À¶®S™Ÿ»î§xÕo¾™ÊpH³á5¼¢bxªÅÂá“‹”Oú­ûŸ¹nÓ—Äç&šÌl¨5DÑÝú,j,°wjçmíÅ~Vª&ùÜi¦¦Õ¥Çõ_7N¹—¬ZÝÛzµ'5+·ß÷ÕÔ;Ú¸žy™ ójp^s°ê˜½þç÷Yk\{µXO_Â&Võ­{“K„“ëç›Þô'–Å-:[è8‚ + 䉟\ð‹Ãà”’22 UÊ GG ôd1Ù1©E!ÑÄÁæN#ŒÀ¹S@8EŒ‘Ö\Žt™šÙq€T÷X¿8Ø4¥l²ªFˆÐ-­ÔY\Xav~‰™Ùj+°{üžxæ­œ¼sÑ–lU¶-Q(Yœ/1¨„6’-{ê”FB´Ä‘cÉoJÒ¬¹Ôæ „CÍ„,Ö7–ÞÒqlîú<üäGC#ˆ>¥MâÏ0heÍÛ*–DÑfTòNÓzGÍì{È…IÌy«Áü´ýÙ‘ÿ懯àWO{WÇÙfï|*·Ýü1N=ó.ªËа%ñŠŠR9¦<ÑjzœsÅÇùæ{®@šòš-pNÙ™NX6”\Ž4ò­z»Rò_êj°&w'U™²1hO’Ý&XA€î…Õ·ÅZ÷ÉZ‹•>‹†ž¦õnÀbõ¶¾þáÞ>òÎ÷khÛ=¶‰¶YÈ{ŽM?«D?sz¯B}Ü ýÚÙ è¹Ïy³z£©l¦Æôȉ‹¬Xt‰”C¨$­Ð‚² 2^a!‹íðÇL+6<4[T’ì#r÷W—•HkŒ[?4/ ;, ¤›ðGÒgÃC'±ã„4G¾pÐZk#M£³¼Òdy¥ÁüÂ3s‹LÏ, 㻹dÿM<æ´û™ie¦t4ë.ÓTXY*RŽÝÒÄ+(ëOꋇ¡¤¶P ¾äƒc(NDÜuoH½±±…¼‚ññq–—W6´ÿ@ŽŸœx _v¶j‡‡|Š,t9Ñ ]×Ðl\o“9Æ»˜Ú©Zó@ž¶;ˆ$A+÷ |é'Ùó¤÷2??§u÷\ò©5¿ô¯gl²ÉáCD-‰WR”*AËet¨ÁèiŸ¦zÇ Ölz¹RÐmk¢”!%Å¢ ÎÆEiý~å“qè"Ší½mfé$غ'Íü}גަI½ëX½ÀhMÏ&ëãÆÚÙÍâÞ€|SÀ}$~ò^æõµ\ «Çdýþw‘öV‘ÞV›ÕßøÆ7Ò sDµäç¹6F\ЈµK†8R`D!3­ 4˜6cÝšÏí9´6H)ì>‰ÕÈY,QNv$‚äY \«# iµ'1±;Hœ6™hâ6ßy)”‚Z3dy¥Åüb5 -[dnnž‰Ò-\vÞ÷9㤠¾ÊLéÆÀÊb‘C÷ Ç‚ñ­MÊc!BbYéZ¢ h8¬ÌiÖ]¼²ÂRàä[gC"¥LÊ‘ºÄq:.y8ȉòÙà±ÉÈq¤…Ç€¶y†]âPn²`ˆÈ4rA’Ft›Ö»ýÁ©y=™àŒU…S¸Ú29”íùÇ7½€ÿõ˜uœ1\8o~éñ\zåר®øx…€ÒpL³Ójy\øäëù¯»žŠTã}[.…-˜¢–¹ž­&­Öf}ä²­m>Ij7wh!Ý>óÎlpfÙžä¸^׺Ÿæ~4d 3{¬DO@ƒž Ö‹ì•J›Hþ§Ÿ7Øf]-œÕŸ×b{öt ô²¬¬Á^ïÕÿ.‚Y»Ï½ýáypBa+ùå'„À+X?¸ã áG‰µG+ )mkwMJ’1דò‘iv¹¥_ÉØEï$zçrþÒG^Í¥W~‹¡ÑÚŠGÔrðJŠÊHHØrB±ýü0sÓ+ûŽ6 ŒÀqÚ“—MŽ#7‡éb&kÙs„‹ ÿ9ÍGŸúÎs ÷lLûy/í;oZ?–@Þ @½Ìë]íí«ÅoP6LPëý½Xóû#a­çÇa=m¼Ïâf#ýï©…÷6³žYʈmíËcÐÄø(%ÉV¤O+¨áx®WYJÌÝ:ëlÜ„u‘Ü‚&¥ª›î.ä¬-i¢6hc!_ k°Õç’{_¦<»ÀÒjà–¡.BM£R«,.×™›_fzf™Ù‚Æ\~Æ7yü™÷R.F|µ½ÊaàpèÀ0ó‡JŒmk1¾­ â$yLZ?¼:ï³2SÂ)*JS¡­­ %±r¥ =ér”~ÆoÑR©Ä®]»XXX<úëè±g _Ë_ؽßZ~Óõ~ß)J'f(’©!IQ*ĤhMý¿™vÞ X« o"ÑÈ;Ζób±ì÷¿þcüÁ¥ïìi¸ƒ¿çÙ¼ðå¥2Q].à—…¢5±7ëg_úßò?áΞ-0Â$,Ü褟{¡F“f¨Ê3ÛÛæöÔz‘+ÛN¤í|/?5]ßmöž0øÍ~òU>üuü³l·#ñs³‰…ÀÇè9.}Ü }Ùì½¼3ÇBw¿ûyg?ZQûîÍk´‚‚\¯‚pJ4ƒWháY&¹ôIÕ³´56m±Ép[aMí©É]ØŒjR:I‘…°"$Â1HL$©y…c]LÚ€Lªû)m¬Y$=pdµðF3dy¥ÉâR•Ùùeff™››cØý!O¿è;\xêa¤0ÄIr¥¡^õ9tßšÇÖ= †&ƒ„±.‰µ@)AHªóê‹ü¡˜ÂhŒF+—Ø Q˜x [Oy­µõïÍœ¬¬¬P.—ñ<8VóúÃD&¦õµ4m±‰}{‹ïÚU»}8­Ñ,}pÃͤ½,âýo6Ð ê µÉwÒÐøþÏQ>ï_ú&‰¹ó†—qèiÿÉÔöµªG}É£2R,Ç´.RN»ìÃÜõÅ_ìÙôJBØNÒwkßfÑ<ÐùWŽ/™Ù;|ç"û]¾"Ò¹=B™zjä¹°—ž·ÁZ÷†Ùøþ}m=A«ÏïÖ‹ÁÚˆ‹^ßç€qÃføî±Xo\ú[ D×çžfõ®¾·»Ú«O½™ìiÁŸ Ì¡kMD1Ñ¡y >ž?D+2c‰tŠ8n9É¥³s ,OÍèÔßkÞ›»Ý¦–8IžiÚ–cÀV.#4B‚ã–³¬B:8HŒ±¤8m@âEÆ‚q3¢Ñ°ZøâR™ÙffYY:Èîñðô Àží+6T,ñ‡Ç‘ÃòBÃ÷[wÜŽ“W(ǨXf•Í”’4kÕ¹"aÓ¥4á)”²Z¸vvQÞö<¶í.#c;ùö÷?Û3‡|/‰c›ÇÞó¼ ÏÀJmšI;#ãä½ümkì×µ’7ݾ‰•`[°Ò1Øã4ÖåÙ­’HçH^¢§æÙ ä‰6JÜ>§t2¡8†Ï\{5Ïü™OôL#ôŸûÐOòÒ×þ “[[Ì*·$塘V=¦Q÷Ø{η¸çÆ;ÑÕSWµ¼…€)-p\51Úì³–ï»ÌÝÒ\ÑN3Ût ð¢=FÙ‚(5³wktý4òöû£« tk­¬ìûõ¶¯qüU›{݉ý@<ÿ>±ó‘Fßï¼½úݧÏkßÖë{ß½1íEnÚǤA´úˆ"×ïfÐĈ9vìØŽ1>A‘rAí½š$„Ѻm‰»If ´v;,¿-I&•,™¤t²P5ËW6¼Unáx6ÌS:$_ ˆD±¢Ñ ©ÖZ,.Õ˜K³´ÍÎcÂ{¹xÿ÷y¹w3Z Q*1¥kh5=æWXœ-RŠ˜ÜÙÀñ Qä  CIcÙ§6_ÀÅ­Ò‡8–Ī¥³™ÜûLíy*¥R‰B¡Äý÷èyi\×#ŽWk9:YôDqÄFJGÖëÕu÷ÈC—‡‰FžJnÂ0¬žV‘‹6&ް áZÃ$«É-Ð7Ô¼vXU«C#Íy²Êé‰ì¶všÕÆÑ!\®¼ô¤ìTïœý^¹åo;Nð–ãÁû>ÁŽÝ‡©.ù5«•WÆ"‚¦ƒ §]þnÿÔÿìÙ|ƒí»t5Z ËÁC؅Φ.SŒSN[¦fõ$f6—™áò>s¹úO¿s×=’\£+ýÀ¼OÖÕ@7ºxµW§çû54ñÕ@ßýýzûlÖGÞ«ÏÐߤ¾ž+­ÏB£ Äóc` üˆ®£¦Ï™]ÜÍÍ׈Õ»öœLµVc¥¢k+ŒikZ—ng{Œ1ígÒØhŒA¦±å‚콚ìýê8éh[ª[RÖmˆ•Áq<ÂÈ µMîÒh†TkMæV˜›[bv~‘¹¹iÆ‹wpÉy·pîþi|ϲұfò•EŸÙƒÃ-—ñmM†Ç[)#™¥Y .Õ9ŸVÃÅ-ü‘“0×c1EaòJÆ÷<ñ­gS.—qÏó¸å–[V]Çq¨TÊ,//wl¢ˆBÁVó}Ÿ‰‰IÂ0¤„A@¬b“só@ŽŽC OMUëí³‘É®½ŸÅøÍ¹6í_Hilí_@HÃ|sÏ&ú$é ·Êiã ue6:˜ëSÐKƒÐ†ï|ôÅ\øÜ÷s×]wÁ–îQpùø»†×þï?f|‹MÝ’BAQŽ©-{ìØûCîšø.ñ¿­')ªEâ^ŽA8ÛXÔÍI¹ŒLÀ7ÉT•cî Ï<ùîùlx9ózfíèŠÅ´ž^‹ìßËúÓÏ\ž¿®½ÌÉGà»Ï™Ü ëhÒ S[o1°Þ¬r-ôúœƒMV~KÁº³¯«- ž?D½^ÃqvONß•a˜_üà€Ëb5£iÍ,`Œä¤}û©7"‚HàŠ ÙM'þkûcŸ…LOj3 5*s›=yn%C`³"j<±­–' 〴U#e#MƬT›¬ÔÌϯ07¿Äô̵•ƒìßr O8óvNÚºb‹$*[Å- æ—X˜)!]ÖÝ5Š•… ­>V’ÆŠOu¾€Š%…ѧdYéQ$À?¡m?Æäî§3:±ß÷q] âBî»ï¾UWDkÍÊÊêXq×u³ïã8¦R)sÒI{p\‡(¹çž{Y\ZÚx GEyæžJ&“ÓZE÷D‘~Þ„6–®¤“ÌfZ d2IÌW§6qœ¼¼« Zw}ò©Z3æzGšÉLìÍ™§mÍN÷·w¾’_9õM¨¼Œ›¾~.ç_|3#ã-j+F¶ D4W\”’œýäòÝG>y›è—lÐvâbóUÙÛqó9¦z‡fžúÇÓÒŒîªßˆlœÒzîÝšù‰ÐÈWŸClÐû×FÁ¼‡Óž;|ʽ~#Öx‘n=¬õî…J/@§kûZ}_݇ž nDûýõŸû¯xÁãyöÅðس¦¶J†}ƒ’ðÀû®—ü×÷4õÜÿàŠ§Ÿy. K5†F&0*Ž+QJ#mÜq¬žõ±f¬Ž(mp­4RÚûVpbŠ´Š2£ Ú@«ÓlY-|i¹ÆôÌ‚Ÿ]@Ä÷ð¸“oâ¢Ó0>¢5heG Qó8|ÿ0õªOe,dd2Àñ5‘²~p Ô’êl‘ú’‡(Š“abu”„±‹3üFwý8S».¥\Ã÷} àR ¥C³ÕdzzfõU1V°~ñF£ÁÖ­[ ‚¥÷ÜsÓÓÓìÛ·Ÿ s!çœw_ýÊWyðÀZa4¨E~å(ùF4ïîŸ$zŽAÝy¼ô/ðî7Á¯!Æ$ëƒÆÖ06ÃÞÑ›XÚpOsD7òaUfu‘™;ýä&—¦;͆Åipÿ—†“®¸–¹¹9XíîæËýλè7ŽiÖ}‚¦ G™Š˜?XdËöƒ”w~ƒæÁ¶£] ²E„ Fc6 åõÈÓÅKÄí+6¯ƒÉÞ6±Ó‡Ÿx.­'Ù­Tº¯ç=µ@‹~ûˆ>Ç[˼œß´ÀîúÎôØžÏ~Ö7v|ƒy¿,wÙ¦ŽA¯!èáÓÏ[²&Ú7¯~¦Ë©'Æ'¬ïY% ã}' ~íÅš“vJþíÓš¥šá¾ûäúÏþ'ãÛ˜˜ØÊðð0ÚØR¤N2û92I+ÚgÑFãH»Á•Öç-kÒr\»î¶ûºB4FØò¤ÆX_x)ªµÕZƒù…eæælXÙôÌ“¥ÛxÒc¿Ã»gñ]JLéÚÀÊbw µdjWÒHœ¥Wã$ÁKËaùP‰VÝ¥0á )´HJ“Ê1ü©ÿÁÔ¾22±Ÿb±L±èYK„ Fà:>?¼ýfffú]”ž[ǡѰEP”2T«5î¼óNŠÅ^xç.aÐäÁ­ÝrÔä(jäý=E‹tŸîߤÿEŸÏ½ˆ461‰;BP”0äJBJm$–Ô7cWÎâÆ{øÉ;@¼7áÍZRf™èsa@jІm[F³S¾é;/ä ^×ÑŒ`ñLnøÂS¹ìéÿI±dSµúE¡S i4|ξòƒ|ëß/B`)·aÂè¤\:cÙð‘8VlªZÞ”žÏæ–÷‰ ßI÷É›Ù÷Cù­ À{fËß]·ÏQ±ö¶¾¸ì·Q1?Yt×ùµê‚5Ž¹Ö˜lÀ_¾j‘½þ‹^‹Œ> ìÜ …’ĤE‰”Ë’^ hÁ¿|\³R7Üy×ý¼ÿסä™Ï|&ããc(¥:³´fé_ Ò‘¥0ÂÁ…Nc®•B:IŠ©„ìæ¢µƒ1v^‰"E«So¶XZ²Úææ9|xŽ¥¥iNÛúžzáØ2^C`ÍãKJ›=\æð}C+1ÛvUq|RXÖzR~4M𢴤´%D4ÊXæºrö1´óÅLôL†G&ñ=šÒ|ð+èÖRNã:„?¼‹íÃUææØ9\)…R*{™Œ1Ôj5n»ívŒ1Š%„³é’ŠyrüMëý@=Íz–ŸÀ{†#%¦×M˜U¿¶à3¡<ܦ J4"—yé±(N,1µ¹y+½;޼ÛO.»&öNÂ[;¤2–nªyC©\Ê~ùÆo<‡7^ò±Î¦DS|âÏç¯|/#ã ó%¼B‹RŽÖj9œÅgùòÝOA˜|:'ïøM‚0¶¾69Œ KÜ}ß79sS×5í¯j‘VsêHÙš|—àÚ Ÿ‚zª‘§ ‚trìf­çïn09@k›Ø{µ£s›Øˆ§bzl1=~¾–æÝë8kiø½ÏÛ·Ýb#‹˜._úšý7]Ÿzóº, ýBôŽ›4@©(xáSÀ‡·~$f~Eq÷ÝøÿÞó>š­ˆk®¹†]»wÙ³&vra±9Ó3ÒŒìÒq3Ó»6+œÖô-áÌÆz7ƒ˜VÔ ^·ÅNf3úüü4Ãî\þ˜ïpþɇ‘ŽIâ¾!VµŸéšMí{k 6±‹nƒxØpY™ói®xøÃÞXŒ1‚X9(3†;þd¶öS í§T*ây>EýÐç1‹×32åáM•1ž´¼ ÄpÒI ljz”sÎ[­ … K,•JDQDµjI|%§Á/ýøÃƒ~õh‘?Ú9ÐÎ idàÞ6¹Š,g±-Z`6¡‘ï)Ƹ¥§¬%(–F† »F#W–6ÑÖ|…¯Îj_¬ä‚$­m>:%»y=µòÆ-¿Jùœ¿A÷1ÿßùͱxõg«òÀÒ6Jõ˜ÂPLe4 hâ8[(ï¾æ øá§sÉEç"¼˜(hF!Z4ZUn»ož3Ç6sͺÈn2ÕÂsÚ79-=r™–ņ¸M­Ýlÿ~¦õ®{§w×hüFYëù=6¢nìX›‘ÕGÛˆ&½zÛêÁ‘Њ{-TÖ^Ðùz»nú§SÕ)­IÛY­çU* ®~¢`~ÉåíŸVÔ[Šƒ§yïû>H½ð⿘SO9é:he ˆÌÈ.2 Ï'‹IoG!í¢\Å!a ÍfD££”bqi…Ù™9ffçXYºŸ}“?à‰gý€};–1†,î; fJÌ.#]ÃŽ}U •˜H%ÅND±C³êQ³¬ôâd„[Ö‰ÀE{û©l{.{žÉèØ6\×£P(à¸&ªÕ›!qèá¬(jLA"ð »v;¸Âîk‘%¾±ã¿¼¼Œçyxž×1Ê¥b,..Ðj¬¬´¸òRÍsŸ$XùÖ#/ñý0Ëñò ¤éÒH“íkiâySl–MlcrùTÀ–­1¥²¡TVhOù’†ã0½ POí[v%=éòüÊ6é‹Iú)IÀœ¶¿\¦!çÇkOb¿wÃÕüáã?ÑÑiJ|ø]/çç~ëoÙ1q_ bcp½!üòéÄÍÇrÊ…!ß¿ßpß+¬Ôj  ı@*ƒëÂÁÙyÎ.ÂØfÆ!o2ï ÇKüäÈœ–žšÚ»«£­*ÿšD—+¥Û\ë›Øwéb7cZ_ç»Uáú￱Á‘ŽÏf5«µ¼5Û•cÝßøÖ3(údzÀêµþÕ201.yþÓ 3KŠ÷QÐl)ÿ`‘bàã–"_=Â’K«èÔx↻ÑKOÿw YKÖ´žj×I_;Àe«LÈm¤¾ñ”ðÖ£:Z?¢c:fXqŒLë½ÝÀ¶õüêG(kV&Û ®µ}# §Í¸*¡»=¹>:"À/Çæ=w¥Íq¾š§šõŽmðÜ'9Üù€à¿oÕ 4³³‹|üŸâàái~ê¥/ã©O£#£–pjìŠ:¥¿¥YÜÒè—8Ž #MFÔëMªµKËu—–©Õ,-Í3^ø?ç;œµwš’¯P±µ6j-Xœ-2sp¥ãÛ›TFCŒÀ&xIÂc›uêl‘°éàUî°ÍÇ’ˆ-&žÁÔÞç2:u:¥R×uq]7©âÖV"læE;´&µ–V$ÛÇ=¦Û@ž¦O]a¾år…f³Ù±_F¡ ó|])¸üñnÁ BqŽÇ3:cäùU\Û,ÕþÜýð'´I«„¥¾ÓîWw’Éᆃ¬ºèØÁ”Œvm؈ã`âMÜhÂ]Er}Ìíí8éüñ5&«uœ[çÁ<—Æ$Àþ­ü4?ïÜvû ;u+’¯ìùœú”Ïsú¾‹1γQqÇ1hÓ¤Xð©ì8HiqŠÞ{³öîÂqìøI)¹áæ;¹lÓ—·½xÉ~©<ÕÈó,õt»¹Ä1)hç"Vewc -ïúÈWõw£>ï#ñw‹Yç§ëï:|Ϧm4)L¯ñXoQ³ n@ö|ýÏÇS³”*¿ ñ™ïÜöU®zâcp¤]µ?pxžûÏsÙV6'I^¼Ìt.2Î'‰É™Ñ;üç¹XôŽ0¾®û¡ã¾éžTúÜ[ÇDúà ¤²­ÙlÀ4¿üæû¿ÎBï±øþû^„‰§ –dëøX;Dq„ÒRDx2 àC©ÅRŒç;øžÄóL;àFDÁH ®¸HrïAxë' ÞÔH *ÔÜþÃ;yë[߯¡C3¼üå¯àì³ÏD¢mÊÑDaHC¯Â0¤Ñh±R­²´´Äüü"ÓÓ3LOÏBtO>ç[œòƇ’ŠdÚÆ†7êÞ3B³î2¾-`h¼…†8vöºÍÖ¶|ö­nÚdý§¸í®Î9mõõ¡ím Ûw”~ƒo¾“¥j­#`a¥ÁOný§#¸¬Ö.:\ 9ÿ·ÌY)èä t€{6V9-|UèYzåÿsÍêGóûµÄlü"°ͼ™Íñµ7o§R ( 8œør•±EE”AÅ®£ñ|p=ç <ÏÅ÷žgp]³é¡&·Ã3/“Ü|—æ“ߥ’DIH8È;Þþ.î¸ãn~ñ—^ËW\Ž#=”Vh¥ˆ¢˜ ©×¬T«,..1==ÃÌì,s³³Œx7óÔ‹¾Éé»fqmK'k[ôdy¡ÀÁ{‡ÑF²í¤ºM³*q’+]#hÕ]–•.Ťb™66‹[,&)l{S'=ŸÑÉ“)¬©R®kçC¥Íf‹å•*ÍÚ2zi7©:¨5•häM ‘Á•pÖnÉ–QMc6M†³±15X«^þÉåYèdœÌrÈÍÖrȦå(y-¼gZ7á-»®¨ÙçNS¶.ˆ—ìzòŽCS^Ià–4ÃC¡¤ðK†› §IOr&c‘¯ôÕäY—sã $"©‘žÝHÞ¯ÖÌ»v¶SÉþÙ÷_Ìïž÷þަí=~ïŸòš—>“³NÞÝŽ‰*åþÔƒ´îr¹ïà,{¶O¡•â†ïßÁž}—9ÕȽ.y²œ\ЍçÍè݉`d'ˆ¯ò³Æûc)ÒͶe=Ò×ÏÛ¡‰¯ÇÔ?ÄÀ ŒÃ7ÿf‚Ña(®'žLJ‰Úlh%£mFW&¾_‰+ž¯m6¶Ít%g”.ì;Mð¼' ~xPpûƒvÑlýà’åZë¯ÿsóóüÂk~žç<÷¹ø~0 i4jµËËËÌ/,2;;ÇÌÌ,Ë‹÷±oò»\yÎ÷Ù½u%©n³´E‘Ãüá3V(”c¦vÕp|[[\Åv¿X94WûU¢Ø’tþû»·³g©æóã :Ìê¹þ'ádBäcË»5õF)´QH)ñ}‰ã€Ö . œ®‡è¤ŸR ü2\ü‡'ß÷ÎÄ4Ä‹i@—Xi¾ùY^ú î½ï~®¹æ†††YYYaaq‘¹¹y¦gf˜›%nÞÅc÷~›ËϾƒ‘J”iàJ ZM—Ù+,Í—™l1¶­‰–¬–jëaèP_ô©-¾¦<ƒ“T,3edå1Lî{“;.Á÷ ‹…„Ð&QJáº.Rʤœª¡Õ ™cqqÉæ‘7 aBЊ8¶ñîÂXO/½”‚rž|žMN󑯖ëéÖ¸ä4Á“Ï“<öt˜8ÜÄÊ!0Ö*È"•rìä8²Ö{MÒ½üäIÌxf^wƱ¾ñ¬@‡JHcåjRà–|ªEÃpi˜Jeˆ}îV– n¢Ý©FÝœ&Þevï¨]žÜÈ&r YÞõ„@B—v.…ÕØ“÷hÁðp{Qð‡ßz¿wñGV5ñÜÅßåÚëþ?Í3Ù»s+`˜™[dÛ¶!Ʀ ùÂ×ùêM·²·x/ÞùGv5…ŸÓÊ»ëyKEG¨Y~Á–OêÓµË/~ÖŠ!?nùfÏ·™v="ܦ޷ûý¡ŒãF~ÛÞGJð ‚bYP,y¸ŽNâR CÁÓÄZ`Œ‹' Ò5Èü-r¤­TÖ=e"»˜Ü Ïy¢à»?”|õV[ -o5ÔÆpÛíwòÿÜ|Ë­¼èE/bjj ³³3>|˜…ùà 9·så¹7rá©â9¥ÛiTW Ì?[Vº‘ı‹)œÉÈÎç1±ëi LQ(øIíp7Ó A$ÿ­µ-ݾ8?ÏwßK†Hé LDiáÃTfÞ†_Ô‡®+ˆcƒQ†f UM­µ–$Ž Œ`¹ÐPo²°q)(C>”‹‚JÊ%ÃÐ0Œ@¥bi®#1®Á—"»Ž¨<½zî»ô“ã ‘çÃÏòÄ·îp´¼V&&a¨•i½ØÀÍ7>ý¸äªÿÛó¬#’ 4üñë¶²}TŶûh_P(®‹ïøHóeþõ÷vòÏ-Æšÿgµ'˜‡þ)W’³­™÷ÔÆÓÄ(¢[0‰Þ-‹Bú].†3ÓÌÛ¦v‘3½{Iý‡Iå´ß<ö—®‡Xo×ã‘#’#¿å™ëù\y«LÏràXkä ýqj§9J¾ò#l‹ #ì3àŠǵ¦^mhÉM=‚n˜¤ÿN,ДFW\,ùâw3KÖç›ïVš~µVorÛ­wpß½øÉç_È5O_æâÓïbl8@kICmÙgú ÍšÇð–#“Â1D±“™Òƒ¦Km¾@}ÅÅ-J£¸†X9ĺ‚;úDÆOz!ã[ϧ\N¼È¤ô²FJ2ª”&Ž5Ž#3ƺR*ók·Ã *¶ GµÐJ€kݱÇßb;ð¡ß” 6Î\V"±€#íü뺂rÊeA¥ å ø‰çZ_¼tD¦·áØ)»öÙQ†ž±üÐï½ô”#òþ!hkÞú™×ó¦V'Yr'ÉS„c'4:Kiú˜óN!<ðωkµ×jµÎôì+³ßÇïc¹®ßE-\‚ WzÄBã:í n¹çœ±GðŠ«ÇùÉç^À¿¾åŠ\X™—i–™&ž¼¼ žšÚ»L볎IÈ›‰ÝÏflêdŠÅ"®ëd5Ï-`·ã¶-¸Û–Ù‚."øü³aŒ!RŠ vð´ÄIMHëB žeº¢Œ—0Û vÎŹ+ ÒÏ3x¾M[.C¥$q=Ñ™ÿªË¡6“¯c ›–c\Æ4ÏÎM¾ï†fµÐîIÝI€ÛÅzò?I’’f}²ùÉI‹1<$©8MZ…"ö‰µáÀôß³ï17bgcZÏÃ-×p&>È­þ;gî+–eê'³°ß b™êeÚèjszÄs¬õû`:>©#<_<¥ó%7&aók;6BJ01Æ8`\RÇ(D âÆ.‚Ò‡ ÿòç/âþö?Ù¹cd©}ž$ü¦³kg||¦u§ÌdžìÖ¥wWFë`ðç®û*°&×ÿã-?*“̱nçFYðG&Êø(¡µ&Š n11¸õËíÔ¯ GPXKH;u#СFCã’+Ÿàðµ›¹AÆ6æÚš«W/šn¼Þð7†?ÿ-A¥Qè0{°Âìá2åáˆñM\O£Ò\éÚ×êK+3E„Å©é[%–àŸÍÈ®k˜Ü}%CÃø¾çy™ö ´“¼C+\×–µþr­ ZëÄw.Û`n Vš0 ‰¼ <ëZÇ‘€#ð}{Õ¥p0ž ð”%Ü V64NHkp“B‡nAP* E(%Ž/ú_C Ž\\O±ôÉaÆž=0± 9v¦õUag½Ìë©C,k•×ÊqÍÜM€Û¥»v7„Ô‚ªcÂyLÜÀ+L`D€£›l›t‘Åo—ndfñ8¦p8c¯Òá !K;þ¸ÓqÄ»BÏd'ˆµ™Û¹ØèU`•g®'àœüo§£íüÎeš9 €‹D7&¶c”ׯM\ä4rWÂ3_ç­Ë"² ÈóeY;]í1éL Ó^ÜtjÛb•?¼‹ìÖv¶Žü‘¼'Št´ÆUôݪ•Iè3¥$®“>ǧwÚŒèÐÃè(<ëRÁwî6üð Y¤G?y×Çàª+àió8tï0ÕŸ‰mMF&›¼%(c}âQ(Y™+ÒXôñ*–Ðf¤ Œ%Ê”q†ÏØž—0¹ýÊ•JÀ“4«ÙBÛÎÆ<¯sʶYçl˜—ëºxžO³Ù²àÄZÒR’b¨‰BÇ58®°d4×à(ðQ‚¢´©iµvˆ…/­f.„•î \×jä® ®¤Ã’ÑK¤[?¾pYúÄcW²¼m9~ES:êwMÚY^uë?î0õ¦iMÓRŸËZ׫F ZUÇèÜa„­‚î`š÷2"—QZ㹂=Û¼Œé+p “wQØ‚ðF1F „ß©qg€ÓÄe'ƒ½Ä»r‡w:ß’¾äƒÇSíX$xþ•3«›8ó´ô“BdZ¹Æ•QÞ¬¾º¾³h_“n0²Óª×ÎÉ3ôûô? tÛãÐAbë“~³À‰ë‡Ã"áx¶a£ úÐÛ¤´½§ãÈàzº]4éxô2Б‚ªvî‚'œ%xp^Sk¤°æÿ^Eµ†7¿Cprem`Çþ*Å!›f5ŽDfJË3%‚ºCa<ÆRYܸ㦞ÃÔ¾02¾›R©”„’9™¶mµðtÜÛ&u¥Ú ;_èÄÔnð<ß÷‘ÒÃ`PʦKU¾m{V‡FXf¹ïcCÅAƒR–ÙnŒÁÕ²Ãxæpßz>åè@ž×Ì¥+OMíIÍu#à¶ÿ­¹;%·©Nsz¦…Û¥·È4þ.0ïË@žiÍy~¯2­Ý Þ?.ºã¬bªwY+òˆ’îEד~k…[þq­c”¶š`¢t¬$KŠd,;Œ Ñ2Ôê°P7Ì5 3UCCÕÄÌÔà#_lÿ>»¦1 Œáãß\á©O)ØŠeÊjáaË¥:_ ±ìã–•Ñã@9(3Œ3ò&Nº†Éí¥\.&ÅNdF|M-…颣í7c©4nÜuLÁ³1悘™¹Y¦ï¼“½NŽ—ñfÀI:æ;ÖÅÆ)Ûõ²vX†»”$fkfßTJÒÑhÆHJeÃÜÇ+LýX}ƒÈZr ¼›ü–×Öé«• cÚ`žiæ`MêF%V€ Ú‚—AYðMbÖ…öÁ)7–|Ž1i®o§Œp öœ²ˆpG,@¥š¸t¿GƶîD0Ý¥K{%ƒéžªrZ¹Éï“K#„ Áë ¦>r"ÑÀ“¼ê)Á­³O.–­Œ_ÝÀšjÿi_ò¡c’<©OdšyÄEε>åýR¯v3Õ;Úuâ呪ýaꈾ²™qе5­ûÅÔò¤ŽIÙ¼)=VöDÐl–ë°°b˜[2̬fš± ÍUOÒ(à¿n„¥jþX«ÿñÿR¼ìjÃ9§;ÄJÒ¬¹Tg D‹?á)4Âfic'¥­W±eÿóØK±XÄqœŽ4«i|¸Ö&ð6˜™-­ÊfcÇÓ±Ï[ü$ŽãÐl4øÊ—¾ÈÒm_cßã}žsái‚dŠK*Äa¾'ЮAÅ«yBXÿ¸Ñ‰¿< ¨ÙLIÛO;}9޵,~z˜ñ«šùC•cä]žùÆSMš>ZyâûÍ´î4%w,§hku§¹{M4ªaµkÝ´¸ˆkAÜL€, td+'X„𲀑>ˆÄœ.s@DlARÒ6¥§ &s¥;;â£Wk㢟֙øÉMé-5¯÷ÐÎ…l›ÔQí±JÈ€ÂØËvüLì©/Þ¬Çì:¥ÿÛ¥ {šØsÚy73_¬êªÅçÁ¼+†œšùÀ¬~ÜäDŽ£Ž4¢d³~)-q¥Aˆ£[«Û”ÆÐ ¡Þ4,× +†™EÃÜ¢a¥¥9u¿æ²ÇjönÁ›~~û/ õfÿsÔ›ðɯ(NÛgS¬Ö|p 8" iÅ2Jç2¶ãLìz"#£[“ØpÇq³¤.@ÆF·¾q;/ä¿7ÉœiMë¶œj»êYB†³;R¯×øÒ—¿Ä§?ñ<é”&6Y“2$&îTŸJ ®c‹È8Zàú$“œ$>õŒÇÛký½AqëNð]h|n„•:lÞ€w¤ò|Í’¦ÒÊen³É™ØÓßt[ìnIÚÒ¬(‡ˆkøðN%ß(!x¸YÀ2ÐðÊ1°EÔ*_|â0êÐÂ󕾺|ÂÛ{-mœ °Dööò—'€žŒ‘@wºÈkáq㢃ìÖc ;®G·vœcÚwøËS{¾rY¯þ÷ñnv:<ܵñ1Ø$#¶2ŸF8fó™ÚÖ:~/Sz`¨5`©j˜[6Ì.Ù—šK.P\r¡ab̦.ÕZðÊ·¤µ?üÅÌRÿEF³%X:\¢±âá–5þ°Çæ4õÎÈLí»†‘©s©T*xžßƒun’°1')?jÅZ½M¶O:I¦eJÇé(ŒdãP­Öøô§>ÉÛß~-¦9ÃÈyž p•d&z)ÒqíÇ’dŠÓ fK~ÚH³hg]‘è GxÝ:¦Fc6,}z”ÒÅŸ¤0õÄ£s3<Šä™Ö7¢•“{Ÿ3±§ó¼Á†™‘+wdâ¶é@8Ö¤NÑÒ)eœ!PU„ ì1¥×ö#§$6éÑQ«ÃDîµï2‰½³¥´Z~w¼tPÝáT=ÙÙ9Ÿµpr€ž¶4/m»eª l¦;L’'ÓÆÓ$:&§§c=meíêón{70¯±ˆ=ö¥pw·‡®v ä‘$iä…ͤæ`´¶ëâ£rlÓ&´)«…§¦ôÅjbJ_²Úøø¸âI—hÎ=ÝØLg±½ÿc%X˜.qñ®aþö×BÞ|Ý_ÿþêJ‹Ž„Ó¦*4V< c1nÙ–.#‰–;(íx“{žÍèÄžŒ•nµìvœw–͘ìöO}äé\)D§²”÷‹§Û­/9<=õïxo¿öÌÌÌrÒÖ›¡D]°ç¥3‡}nºËÊtõ7ÿYöÚ¸YéZ»k_4%[!j›’£òm\+]›óöÜ®`. N³˜aÍàÆ>“_˜!p§À´ ª‚ªbYÝmàì$²å_¹8hmµa6ç»LMà™£)yµýÈ¢¡«—\$ÿSíY8ˆ¤»ÉkÛÙ8Ít'3ÐÎLê›Õ­ƒ¥ÞÅXÏÎ×}zû¬3S{p§Ÿ»}y-¼—y¾çâf-“zï{l ?ú"„c㔕Æè˜¤ðY_ãÕF%âQΔ¾T3̯f­¾XÓì?Ióô'jvo·O„R´š‡ïfa¦ÄÈdÀåg4Ýîò²ßU,,wžo÷½;|J["„Ÿ”UJç3¶û'Ù²ûJ*C#Il·‹ã¸ I-íh[›NYêimñô»”d—þ4·z¾ÏR:ÜsÏÝüÝßýÿôÖ·Ro4‘Ò£èÙtªZ[«Ÿ!÷¨%¥MÅQ´†^žŸ_‹w~3w‡f½µñ< ›Ø&é Ür°=Lf–u‘({¯ :»õ39sm h)©­@­aX¬¶ÍèÓ #4Ox¬â²‹ #C$9Э9½¶âqø¾ ‡-»ë O„hàìS=ÞþGoywÈ—oŒ #{Îç=©Â®ýá%ËôÎ蓘ÚûbÆ·C©TÊüáif6Çió~òÚx'[Ýt|ßÝO3nR:h­ùÖ·¾É_ÿõ_óþ÷_GHé"…¡âk ž“=ÿ™G]ˆ¶ëRÑuiO…6‹œRÇ0ñ(G È7¤•wÔ"ooN3·wÞ]/M¢€½ûra[Zª“™šÐ6¦\‘&Ž!Õð…k5ó™Íú€±Ç—´Mþ©©8mVGIû—3g¯¬@žÜl|4Q.]ÄtºéüŸ‚zzþÌ,×ÖúÛtƒœ5¡ã"Ðn£ ³ÍÝZ6íñÝÚvÏ}E×û®±hã*I³H!ÒTÛGž>´o‹ƒRÇ›ôûNsz#€jJh[2ž7Ì,iFG5WÖmÙÿXéy6âmü‘#ZÅGd€"ÐmÚëåTº/yæ×m¿Ï³ÓSŸx51§Ï,Î¥xÌ9ŠÇo˜·¦t(#©-ù¾˜ pÛÚbd"À¬™<ÑÖƒ–Cu¶H³æáVþpŒ‚(’(3‚;~%'½€±-çS.—ñ}›+=5¡§1ÞRÚ2£–i.²xðv3ÛÉÎù3!À&ææ´@ À·¿}#o~óßðñŒ¥¥¥$§Cç ¹.” `ŒFÇ)åÇ$ÙDÿ±>Ž’N_Z»D± a+"lIN{ÑWN\Ã~åøåZVƒyº­ý•ÍTë–9s3é™–Úèys^[…œÆšžÒëÜ/eÛt˜Ð“Få’¡¬ö‹vW—éܶ °ºøô„.ºüô¦C+‡Î¾Óƒ›?o¾MiŸÛíkûúšwï{o ä‘,&)uæ¸à¸¶ŒfÏä‡ý¤ˆ‘%¶-Vsú‚¦XQ<áÍ9g´Mé›emñp™ÙƒepakRv45³k-l‚—jZvÔÁ‹qË cìwÊ9‰âԳزÿÇÝž™Ò=ÏëÒ¬ERfMìi†µ6ó<ëš ÷}žRÚiúÎ;Èu×}ˆ÷¿ÿ|ç;ßEë8ûnÕP ð˜$ÔÏAÈ„›`º¦¨r3€¸C:4›q hÖg½f f³rÔ|m­<÷¾;$mÕn XeIbDp3?rÎìLŽˆ–75wø£×Ô¬-Ò}eÖ$û&ŸÐd#šg—¦¿z¤r–‰ä·Y<Ÿ—½ïçôL]Ú89’Û:«èÙ5CÓ6ؽÌõk¿ÿ½4G†|ù/w#…À-€W‚bA ež¿Á†Ê“擽¤ÙÚêMÃBBl›_ÖìÜ¡¸èÅŽm€ˆ7ê.‡ïbe¡ÈðxÈØ¶&ާ‰cÇߌ µùµ9áŠSÂ5(íÐ  nÎdï¹?ÏäÎK© &EJdR;¼=ÿµYd¹ÒÓP²T;o÷Çt”,M·¥é[gf¦yÏ»ßÍu×}˜›o¹•¥¥„}AœÄ IV ËZW‰¾#N°I= >ÒJÒŠÍzHØ44êpþ/ ˜êG"ÇD#?j`&äŽXÓ±c^Kí­¡Ò}àÎ÷Þ$ÉWòmÍüái]í#õÿ®¨vß;@=%ª úú¾»³¶eeòc’—u¸ ÝÛW™ÛóÛ»œu¶u³Çø¯šˆ?’D ‹P*B¥"ð\:¼4›Ñ S#h$šøÜ’¡jÎ8-æ¼35CC–4–ôÊbÃ÷Æ[v7¨Œ‰†.³}ZM‡•éÍš‹?¤ðGc´0ÄÊ¥Y×üàö_»c‘ÙÖ$¾_È’¬ä_éÜ—šÏóqßÐÖÎì7)¸[ð¶û-//ñ™ë¯ç×¾“nøo—“߯ÀR@É—8NÜÙ[F8ZÚ)m“ãþP$Ó«h#ˆ” hiZ­˜VCP¯¸ø×çOcrbLëù÷ýÀ¼ˆ™Ür²ÙÙþ²‡‰™œ†šµ —¦˜¿³S¶ËW¾ À¡7ˆÁ†Ÿ”¼0?Nfvrã‘k_G˜ÜöUï×;yv¯ èýúÞï8ýΗÛ2ñGœø®¡\”øçHŒkS-ço£õ2¼åÉm©&¾T7,T5ÆÑ<æÜ˜}{ ¾/PÊj£q$™Ÿ.1s°‚çk¶ï­â—5±èØAiêÔXI*–iAq*Â-j”¨HÒlÄ,n²|°ÉÌ=?à÷ÿÏøÆ×ŒW¼âœyæYçç«eç™ç¶Zk[t$ñ§ùRžZ«ÕâÖ[oåóŸÿ_øüçùÎw¾ÇôÌ\’’u}DPð.VéNÊ­IŠÆfÎ4FÕªs½,õ&Ég”±…eBCk¢¢&œúªAÑ”£!Ç Èû‡£­ækìÚñ9o^Ãì «ÌéëÃÃZæf´Ðî³õ;s[•–ž¶«KûÎ~Ïj`‡þ~ñþ¬O{{¹ úuŸ1èkö£A¾òÿ¶â ç „##𥃔풦=¥OIÓ|¬x¤]]®ÃrÝPVœ²O±uʆkZVº Õr˜9Paq®ÄðDÀø¶&Ò56dLI«FµyÚ|Y0”&#–•Å6bâZÓŠ+ ÎÜsøÖÛù‡¿»—ÿøÈÇxÎ]ÍUW]ÅgœÁ–-“ ¥,WT/éÔ¦Õj•ƒóÃ;ïàÛ7ÞÈW¿òUn¾åV–WÂ8VÉï6ޏR|W#…­Ræ8¤Éò›‹ŒP|E·¯]ÊO¶õ¬$aäÒlDaL âȡՌ¹à—›õ¬Iä˜jä›ó^À–üé^eVƒ\ä3YÏ´¼0mVïÐùæt÷µ{ÕÒÝ÷n_zW¿ºÙé='’~®…>c²^ß6ü}¯óõ>ÿ@ä‰PUbmðÄ‘Æum#£ Òiƒ &ñ¡æ-­íý+[¥ªu¨‡.S[›ìÝ3T±‰]Ò$/Õ¥‡ ´&w6š°EÅ£Ø%V µ$l:¬ÌhV=¼¡„•.*vˆ"MÜ pÃE©h–$[† ;Ç$wÍÅÜ~ÛíÜ}×¼óïbß¾}œ|ò~öîÝËîݻزeб±q\×#–—–h¶Z4 Â0`aa‰»îº“ƒ`zz–¹Ùªµ:JéUÙÜ65ÖØB$•‚-„â;6¬A´+w(ArÓ®J#zp)*‰&h5‚„M‡@rÑ/=x‚ïÈGžsÓúQót—< w›Õ6€mBCk€ù†ü½køZáºÀÞ5.ùþô )ëò¯ú~MëlÛ¸çÞ€ÛŸ @ü‘&¾õ6«IkP±AE }[íËÖQfãÊ-€[\šâÁ$Ït[ o°R‡jk‚‰­pòÞoã9‡PZZ{$Y8\búயپ·†_‰Q: +k›Ò«3Eb%)ND¸%Ò ¢ ÆÊN€(t,CÑÓ ‚‰!ÍTEp0”ıfnnžùùynºé¦¤²™-Q꺎#QJ†ZÇÓŽ㸋¹n瘇úx Eß‚ºÄ€èdªÔ&á=T¥\Øk¦• Ö¤Q%RÑhj‚@ѪC³árÞë–Oè}øH—ãâ#ß4˜Ã&½Ëìœý–Îmë>ý@h“Zèªc¬wr³ú7ëa¯è·îP¾ŽƒlfVXÇŠÐ×] 6°ÿÚm€ø#UQl¯|B”Ì8*6ľ­.èºà"eŒ.¬Ùƒ6/{¬ÍаR3TCT&žÅÔÖó‰õBBhÖ=¦ ±²è342¾µ…ãj"•˜Òµ Œ$Õùõ…Ò3”¶„/É•ƒC*2 \ˆq„ Ž N– ,‘¬RL -ƒ­ÖhEkƒÖ1QÁÆFçÜ÷RBÑ¢h§~Õ±±ñäZd\„‡R½Ìhб RžÏ7¡%Æš8Š CØ„fÃáâ߀ø±–ãFvÛ8˜C' ÷;`ò§Ûì k¿Öla÷ki˜ëøFŸ^亀ºè½ÿøZmZk|zõ»×ïþh•=¿ŠÛ>ùËH4ÍÈ7À …Äó÷‹~Û6dy€ø£]žñ{ >ýûe×à) ^ ®Áñ5®”8Ž­“-„ÁÈÔInŸïVͪ-ŸòÄ•lÝq%‡8RÄf?˳§±xè nA³}OÃ2Îs¹Ò•’Ô—<ªsE”–”&#œ’ÕòU(P‘¢(&ÊeÏj¬qlˆcˆ"CÐJ)…ƆΠ ì –ëæè=rGA¬5£í¯ŽcCf×Ä.„Báy®+Iæ7™FÖ&’ò²zT)ëÞ8ÄÆ!Ž" ¶.Ø CiÇ*4,× Oýß?žrœÃÏÖsè©QöR8Wý¶[;=RPÛ wCà½Ùó¯¡M‹>ŒYk§Í£ïl¶ë{â.¹ê|ùŸ®bþ¾ÿF k‚ö<ƒ'@ºϱ!jB\)‘(‘2¶šYè1¼å2vì~Rú‰¨ƒ)šõs¨Œftjé ¢X¢µ5¥G¡de¾@}Ñ·¬ô‰\A "-qĨ0ZVï@ЄÐjªuA³©ˆb |B™X n"ÚŒñ0!F‘!Š ­ \a¨‘ÒÅ÷ Â[©ÙokÜl†ëäxF[-<ˆ *jEš¨å–'†ŠPIžð;=J9î@íI|c€Þµmþd±Þkœ»Ï燨nîüfïr߯ˆf½ãlàîÛÀÒ_®xͧ;>à {‰êÓ8ŽÆqÀsL’«\!¤MÁF‚z$š¸=ûžI¹4FE(¥ˆ¢m C§P.ß ²š„–%¦ô¦ËÊL‘VÍšÒ½a«QG‘eðLÀx!`¨¾'B¢”!Š hÚ8çF M£iˆBhEƒØâ÷±’PC3²¬ñ06„¡¡H Áq Ò¾ç&qì‰ö-¤]È(mŸU¥ ¡ÒèX‡†8D-I³ah…Q g]ó &Oyê‰îö£VN§²~éSè èöí¯ÖÓÔ×oM¿Fnpߣ P}€{Cçëaš?âó½ý >¼\ó¦û:>ÿÛ¯Ž#M!V Œ Ãðä™ì?óÙ n#Šc”RÄqŒÖ ­JORo\D¡°b8–4W|›+] Š“Nšà%´bXŒxÊ&Nq“¼FÑjiÂÀ„–!´ µ¦! mìz#´fþX býðEr¥í‚#Œ Õ‚‚op]M³%ì‚ A(Ëâ×>®«‘¸HG!”Í)P ¢X£"»‰Z­$Í–f¥®i´Í–áòˆŸP9¡@ë9ôã5|ÉpææUZ£-›Ù~TGŠÍ-JŽd’€ø@NŒcxÙ›ç‰ã˜ xû¯ŸBµ^etòÎ8ï9l™: ÇÄqŒŠUÌ•&V…§«9ùMê šúb YP”'C„ƒ-KƒŒ#Æœˆ¡‚ÆwRjŒ‚–ÒÄ‘¦Õ‚fMA³ µ¦¡Ñ€ZÃP   š‘ù02‰éYP(²éÆÊå2 sÇl¼FG·E-,­Í†±…¡•WBeˆµ R† ² ß4šI‚H‘d²ŽÐ±AºÛz²FâX¡"cCòBCe³êÕ 5Ÿ_ø§•}û<êå„9¬gj‡þ&ç^à`Ž@ ]ë|Gò}ïþõ³aݵð#hãÑêëfú=@»pHÇ„aH³ÙäY¿ó–fd(˜e̳Z¸Ê¸R ­4J)ŒÖıK_ˆj‚êmFêøC%lÑ”(ÐÈV ß„àB#Ю°¬n£‰#˸n4 Í&Ô›P¯k«†zÓ°@3ÔCA=€¹š!¢€Ñ'¦ÈÇòòLÏígŸ}E"ÍAZqL3"!íA\GPw¶ò˜!%^ÁþV:ʆÓ91JŠ,€‡¡å ´CdÕ{ùßn,Än Ç^@žÊúÚ9¬Ï|;–àqt¼{¿z¿¶mSßÄrl%ñTÃnµZT«UVf(·fóck>c«!¦€®TÇËšØ (õÜ!§ò=bêÄ‘ U‰[8q„ò¡£ñ]‰çb³’ŠMRPo@£¥X®ª hP¡@-0Ì×àÐ’¡^øUêúÁnÉÞ?÷¢‚µDPÁu­y]IL}hð=ƒçÒàHƒV#h,¡-²¼»€ 0¬44?ÿOщîê@rò°rè€Íz^* =TðZë÷£åP®IDATùã ž°ÈC‘ĵÖDQÔñ¥yŠÍ&cÕqeA\k¸NÁ\kŒ(u6ª^As3õ¥Tg¨¦Æõ%ž£ñ=p“ä«™*Íд ÍÔZ†FÓx#´&õz –‚¯Ýþ£¡‰†JPµ–¡à‡*yoµZÔëu–Ð ÷3l–‘*"V1q£”Fë¼i=ÑÈã¥SíÜàø>•ñíLî?‹‰§PŸâ×~lÇ4)BÑ7™Ö)dÊT·`® D±õV al¼!\xÅ‹yÃ_üÛ‰¶#’]Z`ë°a²ãCP.‚çÙ<ìHðÒàƒ‚XYKE¨-g Ø vÿ÷Cá‰îÊ@úÈ÷“cÝ…p d GOò&õ”ܶ¼´H8w¥`ÇD¨He¡fZ[Í<¯‘k­­YÝ¿Dej'ã»Oe|ç~Ê£“¹:áV~þ©>¾cp]'­6ê$EZ´±áV PÆjãa+-[ãý_ž>ÑÃvÄrè{xíŸÅXÙ0Z6ŒU #%AÁµV ÏYV¥ÁHAša±&XiJþþ³?:–ˆG£<"€| ÈŽäµñ ¨×ë4gïÅY~©Tµ»‡9]ÅÊf+Ù²‡ñ=§3¶}/…Ê0°À»åÕÏÚIseŽ¢ žk ¡hm+´é´æ¹‚V$xéëþ˜ŸøÙß:ÑCvT䙨ø0\2  èAÁ…’gR`´¡©±‚V,¨6]ÞþŸõÝìl@@> ä¸Jț͋ރ³t2®[Ÿx’¹­̵Ö(­ñË#T¶îalç)ŒnÛ_:âúÝ¿üâó¹ïîÛ­¯ ä;÷žÎÛþãû'z˜Ž™\÷®7síß¼>ó{²ÍÁ‰5ì=å\þòÝ7žèfd2ò d ÇUò@þµ¯~•[nøO»`•’O¦&ô¥4±²I_´1¸¥a†wìg|ç)T&¶áËG àÈ#IÖ¬õ d \¹õ–[øù—¾çvN™zgíßÝ¡‰e«vøCc ï8™Ñ§P›Âõ‹È@r2ò d Ç]Ü?o~ó›ùÌg>CÉ÷¸þ+7²}rŒrÁÃh[aÌ™dhû~FwJah ×ó>ôd 9®²¸¸À_½ù¯ø÷÷½8Ž©Æ1ïûôW.óì+.a|ëN*Ûö2²ãdJ}èÈ@Ú2ò d ÇM–——ø»·¼…kß~mVäCJI àö™€gm=ƒ]]Jah ø@²ù@2ã"µZw\{-÷wOµVÃ÷}&''¹ä’K¸úê«yÚÓžÆþýû³ý>lL@> ä˜KÐjñþ÷¾—¿üË¿baq‘SO=•Ë.»Œ«¯¾šK/½”½{÷žè&d ?²2?È@rL%®»îüÙŸüV‹g<ã\}õÕ\rÉ%lÙ²åD7o ù‘—F> ä˜ÊÒÒ·Ýz;W=ëY\uÕU\pá…LLLœèf d häÈ@Ž©DQÄÜÜ•J…‘‘‘Ýœ ä' È@2 äGXþó.›q¥Ñò6IEND®B`‚nixnote2-2.0.2/images/stack.png000066400000000000000000000020331315604104400163350ustar00rootroot00000000000000‰PNG  IHDR szzôsRGB®ÎébKGD‰ÐÁ$_®Š pHYs  šœtIMEÞ';ˆ€7M›IDATXí•Kh\eÇwò¥™‰11}Ñ´1TÅ·‚,Úú"Í€¤«w‚"¸PA¡+q¯‹ºA’  Y-]Š! »±]øH“&3sŸßwŽ‹;3fÞ™9»ÿßüïùÎÿ;Ü!öÕâââ•åååï'&&NmnnþÐJÏÍÍ}2;;{j~~~±^·ûOU׿/³¿|>¿röü+äóù•vzff†|>¿²_wãѶ€\v¤/Ý-à=÷ôÝÛGìätõ?´Áñg¾ãï_ß`Խܳ®ÖݲOnü—¶ÌfûŽ9b'§_Z€ücpòa¸’ý“¯Þ»ÊÛ_<ËûÁçå[|Ù…~ëãçy3·ÿ…›wàçŸFyêÃ[˜Éé À£'à÷-8} žà œá(ã¯ÂŽv¥Ÿ|d”Ó—à·=˜8‘ž°&£ cc0•M\»q³çÎsíÆuÊIسÿ€Ãc JWLF\a%—l6ÇÆÆd³9íYG6õ¡+Æ{íqÕ‹+°U†w>…bìÓO}öú(ùàۯᛛ~Gƈ‚oáŸ{éJu/NýD[{Õ3F?‚ Ú@-ìE©Ÿ¶ñªgŒ”Ø.VPe}}½ç/--¥æqê'kkk#*„A†½ÊD•Å zn@4=m)±„AT|š1—a×L¥Ä'pã ÒÒ«ž1*FP `Um]7U(l™0GVWW;2FU B(ÇE`–*`/U=«oKaz—öû4cŒÃºaüx·Ò@øI‘ÐõôªgŒ¨;’½ÚôA,{ÄD¥eõŒg ÊFÛµªëÒS•%E‚2ˆ³ >Í“¸˜8„(ÚÈDv‹8„ÄÅ(^Gƈ-!Ñ—k7¥ŸÔ…HbK¬­^íÈ+d   XiA=“q.†Ë@J-Äà\Üc¬„`ï7àáõ’€+!ëkë#THªs¢p€¨WÀ‚hÐèÓ„1Nâô¨}0§Gæë$níUÇѬÔ&ày}F ¬ š4|Ö›1ÆINj@¡°TàÀMÀ NÂFŸ&Œ ÁékØ÷8E4lÁ}Ƹ°x¹@‚þWÑ%']îÈ•"™(áÜø ¬¢•"/޽ËÈ¡ÃmojøòÎ!ÉL0àJ¼!Dþ†ñŽ7eâŒÝý'NFn‚ ”,IEND®B`‚nixnote2-2.0.2/images/strikethrough.png000066400000000000000000000007611315604104400201400ustar00rootroot00000000000000‰PNG  IHDRJ~õsgAMA† 1è–_¨IDAT8ËÕ’ÍKqÇ?ÏÌ´³®Öªè RK, –¢^ øvTÎ:÷NBs¥*ƒ2p¢‹˜ƒ‰¥¶Éô3S"óöH"]'[~"X˜ `ÌpË0ã‡9§Xûbyª9Ñ Òèß¡ƒŸïáâûížÏ±µz÷fæ_­ ñËòjÇ×Â}š(á²O–ÇÌ’¹šDÿuæWÙþrQšÕû‚AIEND®B`‚nixnote2-2.0.2/images/subscript.png000066400000000000000000000037621315604104400172600ustar00rootroot00000000000000‰PNG  IHDR€€ôà‘ùCPLTEDD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@ ((& @@<    @@<å]d½tRNS    ÍÐÐÓÓü$&üüë¡gUG@@;97.æý,8@HOSdz›åü‹ àxûþ`Dõú_¿™ñÝeLÊ­=!ù¹‘?Ìcà3ö âÔÑ–âr\M(Ó"Æ<€‡Ò¼³2lä®­äñ$o}â©@øÉ+¨$÷¢\-Mf}™¸áܦuK*œ’“XŒV®óìHÏ[-TçøØOÌÏÏÈø©õ}¡IDATxÚí›OHTAÇßoßl’%ØaÓìàÁ :tÀ:襃—Š ¤HÁ²B¥C‡è†„ý%,ÈFö‡B‚¨(è!ØÁ›° RP™ënï¿óÞÎ{;ï½ùCööàwÆùþvÞüùìog"ù…¼€¢ â4oª^–¨¹H›±- Ô\”™e¿EjxåfÙ‚"Rè0˾ãõùk+Tšeßðú4'€*³l¯/BCNl)}~fñ²Œ>W9kvú³Qfñ¢³>WM´26%ø§óäÌM þey00×&ñþåy0Ç€96³¢ý+t½Ôâ¹!¿Òð× ¬"ü« ÿeí¯—"ü39‹ ô1àÙ/Dø×˜þKFžýRˆ¿®™¾Hc“eIþ æRìæ5þßIL(Ììy‡$ùÃ<‰ ‹êoíOc¼j]XM§¡E_ÿ,‰ ‹ã]3l·«¼JjÇ(ú÷W,ª=yyeÖý‚·?Æ„¤ñâj·ì—Þx¿]©”e´Xfé1!éye0ÿ‹_amìsj}ÁÚÝ z±>¡`2Œ }Ö Ó^Ó̵—JóàÇ¿þyl&t>ÿì”_ª[›l¾Òm‰Tl&Ì:ý?å?O<Úä☌ƄvW×ùûg~x´§j?Zûä ô0hðöz³“ÆŸ† 묑:Æ¿ð¾Æ?ލAþÙâg÷Nm/é† Õ±Àuš0vR£m ™ðn°?‰§îaÉ„)ú}Ê©—ºÓÆŒ ÇÔðþÊh;;&TGHmÔ•XkTfLøÛ@%ÖšÜD &lžPÒˆm kÝí“Z7ÅfÂë}8ׇ‚÷NJ&ŒîO­¡ˆmäù—`Bÿ6rŒüK0¡¿6Ãê{J0úkõ¬òt¥˜ðȪ’ó„ró„&š'„}Ç"OÇŸEžÐ Eå ý™PLž0€ …ä i¿ñÊ2ð•'¬‹ï/OˆbúÇ΢¸LDÇ„ü˜,a„ &L˜0a„ ÿ&ì”É„g¡é¨D&ì™›kSZû¥0aÀ£–Fc¥“Äúë7-Ä{Þæ Zër˜ð‚!Ô6(ðY.lyà 78þÃ×ÇY§#2a¬|þÝãì™pú(æD®§ûOscÂm˜”"ÕÓçéŽûœ˜ð`Ú®g/ûŒÓ4&ìg½ø³Þùé@G”y’ oYg6+[Ýcm»æ5ª—ü<Ê?,®­8;a^ùBøÝ™!¦èÎnXÿËä·ãâqMí?[Ëž ![È»Æõ’Ñ'˜–æË„§“ó„¡´ÃÚ»Z‘wž°q‡¾JO´È9OØúçÐJMYÿã Àqáç ŸA×°Òeï1¿n·‹>OˆÆ÷Ž™ÚAmާy1¡¿Öäh/82!+ Iöœ'd¦EÍ2Ó¢æ ™åéVAž0¹c’Ü1I>&Ìä÷äxh>LX•#Ü䣙ЛßhD&¬Èî‰rÕÜ”ç ÷dùjȳ6ßæ¬!×ÞdÏ €µ6¹^Ü5,=§QtOž»öÁÅÝîÉ7¼IEND®B`‚nixnote2-2.0.2/images/superscript.png000066400000000000000000000040531315604104400176170ustar00rootroot00000000000000‰PNG  IHDR€€ôà‘ù=PLTEDD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@DD@$$"441552 773  0Ë‚»tRNS    ›ÓHÒÈ07S‡×¿€¶\¸¹¼ôª×£ ÇÐÐÓÖô ÔÔí¢hU>5/,ß4;ERdzŸæ Ø|úþeÚClÚ@ø’Z"Å“,ô! Ø-m<¡õ¡¥õö§ÁŒéÕG#÷“Ÿ™²ÏõûÒ«„k:ðùÏ$&ËšoÚ*txåöÉŠú÷ž+B[‘³Þ¬~W8¥¤IŒ’“®ÈP<âIDATxÚí›MˆE†ß¯»:³¸d d]ÜauQrˆB =(^*ˆ?ÉHp÷I„„=² bP—¨`ÂJo""JðæAÅKÈB„• D"‘,3ÓŸ‡šé®ž®é™î®ªQé>¾U]ïW=õóÌG•ÀˆÑ+Ìî´Þ|8t¨%dlm‡Z"€1YvÃ¥¦0.ˮå¦P—e×Ôúöµ8€m²ìªZß0!Ë®¨õ]h"ŠÍˆ6Ô²³u­@>ѺZ4%ë[Õ@"›#ðBÑÜÿXH,¢µÉ½ÿxHr ȱ¹áÚ¿À¢³7$ç† ÿm!Ìšõ°×4Q3Uo"$€ÛH¯—†ýo§Óû›½õ­¤ö Ãþ3ô.ù©zÒ¿ ˆÔ~iΖˆˆ–CBíoM=é+ÀaÛRÿk§pH€§õ¿.—â$¯™üþÞ@D¯ƒ·èü¯é˜Ðèïÿ#0Å|+ØóÒõºóNÀúüg(] £6ö‚Ð@ƒy:ÕÙšAioÌ#Ç†Ž ã>l9ÞÕ8$€“m ÔN¨íù”ùDö7,äŸl/Û_  aÇýÎìq3a_ÿ“DDkwȾÐBä5?°Oò™ïç?H‹™°Ÿÿ{ÛW`MjOÆ}½ç\Üî}Ð …üU&Ôú¯Ðg‰6júoý=xâ¸a&”ýg’møý~ëžÿä£L(ýϞѭ+ÚvW^Œ´ÙKå™Pú¯~=´?ð¾ÿTç]¿<Jÿóâro팱.Î?.ß J3á9ÖƒåT›cýÃQì=^{Ws2áìÛ›öšÌê×)ñ¨ÖŸçdB°G7¿w^ù_>ÐìO¹™=úê‹lÿ™ )í£²_Š6=Ç!¹™=B0`Ÿ 4ß$ø~ì]Txëý!a_@¯åb–GXº4`ŸÔõÓ•yz×sD´+$€ç~x“hqx&¼AÀc ÷i͘¸IY'¦÷Äûä.à§LøËøYñÇ[GvÄ â’sl^ÉÁ„Ç–ðôþAþM휨-»¿•ë¦N*ïÎç`ÂÀ79©©“/#ûÝá˜p(N[3Â΢°?ñÀ„öý³™Ð&êêÿaØ?‹ µmÔ ûçÎúFý å úÊô/”'l›ó/–'Ü4æ_0O8iÊßažP«™Èj˜pø˜ ä µL˜+wT.O8ìÿŸ ÿRy¾L6¼©\ìýOp ŽàOy|À*þv/°XÔžØJo:a¼g7L3¡iÿLx÷&"b0·C¸«}n— ù—2a)ÍÉyB»LhÀßúyB›LX^sxžÐÐJ1¡QMŒØ¿@žÐ°–;OhZË›'4~Ç#ož°ºcRÝ1©î˜ÓþyB[LØhiîÉÙÐú0áDKsOÐŽ¦eÂÎØ¼ê@Ó2a=Ôܵª%5÷díj¢gmNß¶¬‰ÄÞÔ55€ÎÚ”x¬kJÄœ¾'o]û¸2ÒAZë»NIEND®B`‚nixnote2-2.0.2/images/synchronize.png000066400000000000000000000023271315604104400176110ustar00rootroot00000000000000‰PNG  IHDR((&÷pægAMA† 1è–_ŽIDATHÇíÖ[lUðÿwÎÌ,ÝK/Ûv[–v…Ê [—ˆ…  i Ô(DÞ€ôƒÑxIÔ(Ø7ML„1D!DÊ-1•–‚РABi+[[)èv·Ý™9Ÿ½°ÝîŠñïiæÌ9¿ós¾Ì ð0þkÐ}ôqÁƒÇ-`"€ô–ή0fLÎÌ}=æ¥??‰+’¡ÎÆp?4Å‘  Gn_n=öå'¸41påºÁ9äBš6 €˜”¶èŵëMÛ~4ÜwV±ovãwÃ[ Ó`Ùe¯­ÿ¸rò£p*†­ ¤.‘$(¥,)ØM>WiuÙÜæ£@ɪƒå®o fÏ­{îå'eÛDiiÑØ­öX{Tp6i)ØrÈ;+Tñý…euË–äž8qrd¸–ê•m«®-‡C™ˆáz½Ñô×Õ†Îξùþå̵E ¸Upé[=®Úwǧ‚ÏV¿‚C)€€îc‘·ß=3ò¨!Òp¨ØS½±d{!$,2ìðTe’žä¥€¾uu!à “ˆ,tmßúæø >Û}vǚƪ]E b1T’É!F.˜€ð¦`¨6ƒÝi¹¡Ø×øú¦.<®¾GAbä–×”B(ŽnÉÈ(~ªÃ5Gcj/iÉÓ«ŠŸÈƒM‚bˆ¼s.´¢~ɼBXP@cØ®´`hž’4MÞ³û½3™½ùUÁ¢¼æ;l %fSaßåt ¡—åBÙÍ÷È-;[v¦¶ýAANÙCdû¦€¦9âÖÕ6L0‚£g3š¡‡õApB½mGºîÑIËIL²BOL¹Ýf¥.ùæõ¿yuSh=Ñ_Ûï4QñAÉ‹Ž(ùXÐöS ØÇ{;Ð1¡ujZi®ËåbX°Œñ‡2ñ(Öò40€ÜŒ¥¥›ÊØ`5tÇЄ/KžïèÍèUºÂ:”Âþ¥£; hç/Þã/'ÅÃõ%´èµ®ÅÁ¬¢µ^ Ì‚NëJÂòt1œ¢hÏ|Û–)?×Ê’ç³ÁRpvÓÝv‘Ô‡90•TüÏÎàçW6Ë ^°ü}?I†lÞ{$=8â‚A°-3€Ïìô\x׌G\PÂÄzÄjefP‘Å`vO]~zÁ«ðŽ{îv¾Ty¨|aˆ™±CvŸŽN<¶l€„R$P˜5©ÎûBççÑŽ8œðÍ/^]²Â/\Û,EäÀ¦±óIñû[=kPŠÉƒ™ŽþöD¿2‘cx=ç ¤RP$E<Þº¡·;3(¨8~+ZóÕßkeÞ*§PlYÈ$&tÀb© £?ÒºáÄñÔI>Egétµùë+ÀÅ}“µJÍÐK †9 C23” &¢ ûW\¼¬¦ßÇ€IoïEŽ`}È@8<û•¬•Yn-éË!À`˜én逭r§‡ñ?Å¿i¦²ËýIEND®B`‚nixnote2-2.0.2/images/tag.png000066400000000000000000000014631315604104400160110ustar00rootroot00000000000000‰PNG  IHDR(-S¿PLTEîå8ÒÍcîä8ÎÉeÎÉeîä8óé0ÒÌ\ÌÇcîä7ÑËZÎÉ^ÅÁ_ëá6çÞ=¸³WèÞ4ËÅ[ÊÅ[ª¦OæÜ2åÝ<åÜ;œ˜IãÙ1ËÅUÇÁWŒAá×0òè/ÉÃSІ9ÈÂQ…5¼O|y6ÝÔ.íâ1­¨L{w5ÝÔ-æÜ1¡œEzv4äÚ0“?yu3ÞÕ.„9so1ÛÒ-¯¨*mj0if.®§)ÎÉkÝÚŽôð¬óï áÜÜÙŽûøËüùÃüø¸ü÷®û÷¨áÝ„Ú׋ú÷Áìè¦ÌÇkÌÆhîèŠûõ—ÞÙwÇÂdôð«ËÅiÉÅeùòõî€ÑÍlÅÀbóð¬íæjíæfêãoÅ¿cþ`ñî¢ü÷­ÇÁcÁ»]ùöÅÿÿÿÞÖMÚÓ\·²YÖÓ…ùõ©éã„ÄÀ`¿º\ëéÂðí·ÓË9ËÃ4ÊÃL©¤RÓÏ{øó˜ìåjìé²¹±(¾·Iœ™MÒÍ{óí†ã૲ª'·±G–‘IÆÁqçàr•‘I¸µdÙÒ_•Hª¦YÉÂN”H™Q¼¶K“ŽG‹‰K‹‡EaþøDtRNSCí&î÷Cã÷Cãí÷Ck÷EííøFkkøGÙíùHãòãòãùJèùJ(éù)ñùJùúL(7;uõõv9,j.ßIDATÓc```drqqabd€fW77wV6(ŸÃÓËÛÇ×ÏŸ“ "ÀÌÎˈˆôŽâgàŽ‰ Ä'ø)áĤäQ +5-=CŒA<3+;'7OB’A*¿ °Hº¸$»´¬¼¢RF–AN¾ª:¦& ȯͮ«oP``SllJó›[ZÛ”€¦È)·wä@ø*ª ‹ÔÔ»ºËAü Mˆã´´{ûêZZûu4aþÑÕ›0±u’>œÏÀ``8yŠ‘1˜ibjfnaiemckgïàèä Þë:zN‘öuIEND®B`‚nixnote2-2.0.2/images/themeInfo.html000066400000000000000000000001461315604104400173310ustar00rootroot00000000000000 NixNote2 Default Theme

Graphics Design by Lexi Shriner nixnote2-2.0.2/images/todo.png000066400000000000000000000023601315604104400162000ustar00rootroot00000000000000‰PNG  IHDR00`Ü µ•PLTE„{ƒ!¥› ‹8´fÆMtÊcDº(‘/¯{Íj”Ö†dÄQ)¬sÌ\YÀC3²„'¦.°kkkccc[[[RRRKKKG{GbÆC‹‹‹„„„{{{sss\ƒ\U¿@”””mŠm{”Iº2t‡t‹Ó|ƒÏt Š”„ ‹;¶ÕÕÕÞÞÞåååïïïæìæ2”2ßæßB›BŽÔB·+V§VN¼9¤¤¤kµkmÈ[wš¤šP‘P))P­P¬Í¬½s£s Š Â–Ç–2y28ƒ8  {Ð]YÄ5¢Î¢wÌh›Ód¢Ý{ÏbI¾$·Õ·ƒÎp)z)@@@@¹?¹[¬[Ç×Ç{|‚|I¡IÏÜÏ"Œ"uu‹Ös9š9×Þ× † ‘¡‘mÉR+’+~ÍäÍNÀ+HžH#ªþþþ999÷÷÷oto))q´qX¢XAˆARŒR22¿Ú¿¡ ®Ó®ÙåÙ†Á†444¹¹¹®®®+++¢R6tRNS@æØf IDATHÇÕ•k_ÒP€9»@ØÓA˜cKˆÑTq*˜h7-/¥¦¥¥]¬´€UVv¡úÜs6𠱟½«ç-ÏsÛÿlóxþWþƧ–¦¼'õ)|§ü]ìI‹Óp>ô±'üW^ tó=lj!êD>ò=g8ë’,Ë‚h$Ú¤W>K1}|ûÍ@–%k¢Úh˜sÛÏûì ´HñF±!ÃóI=Å8›s›d%A¤!©w"ÖÅAʹ(jŒÀÙk(=œ1Œ þ;\¶uS# Z|’ÌژæØ8íÀ¾ púáP Ž´hUy8°Â¤€|s$–HÄ:àç§lŸ!‡ ƒbâh0M…gЀä_"E$vùÊÕk³mþÅ AÇw¢Èõ^Vœw ÛS˜±}Zt–%ï;[·0wèçJ!vªpG°¡£¤×+,¯ð«÷Â`ºå¯­ë)ã¾½¼z –ÉÃèe–WV++ŸO¯7ry Œ)Ûgw÷âíû¦¯éÂÞ~K ~£¿Š}&¹V‹kš\w=±lË!ƒ€™1‚X¯2Tɪ¡ê®Ûº©Wš>ÇeDÑ_¢õ«ÐŸ·pàÚÁãy÷~оü ¤þ”íW“¬ŽAthi¸å;ÃB>½o¢ x4P•€ó‘>Ô«¡<òQ µZLù ‹¤ÏT³ŸÇ¬c‚^MU¥#ºü Ë:vUUÌÙu–ðõôžeýiÅ=H㢊|6yÐô Lsk;‹—g˜/ɯ-ÿ¸À‚Å·ñ,œ.ØÂ¡_+Ê-†s4O³UF§¾>œ$7ŽÚ[)åwÓû{5‚éh ¡75~ÁÆ‹?!ñx¼/ÚÀõ;‰Og‘¶ ªu€ Êî Üu~Ñ·È ú"•¿<î-Ê.êzÒæÿcü­ãü¶‡Œ; IEND®B`‚nixnote2-2.0.2/images/trash.png000066400000000000000000000012401315604104400163500ustar00rootroot00000000000000‰PNG  IHDR(-StPLTEJKK@@@KKLEEF@@A??@;;<77889:889788444334./////Z[\ccdhijWXYTUUQRRWWXSTUOPQiijŒŒŒ“““™™™•––ŠŠŠ‡‡‡„„„[\\>>?qqrPPPBBBIIIFFFAAA===888333222EEEnooIJKQQRYZZ__`[\]XXZTTUNNNIIJCCDDEErrrmmm°°°ÒÒÒ›››VVV}}}¡¡¡BCCyyyddd³³³ÙÙÙsss’’’¼¼¼MMMaaa²²³AABABCµµµTTT²²²?@A@@A???>?@±±²<=>=>>±±±<<<<<=::;:;<99:vvvÔÔÔƒƒƒŸŸŸ´´´\\\¢¢¢bbc©©©«««   •••ˆˆˆ{{{lllVVW999>>>556233000´òÝûtRNS ÎÉ ÑÀúîêìë'„îð“5gB­qÇIDATÓc`FF(`b—”’–aa °ÉÊÉ+(Ê+)«¨ª©³44µ´utõô ŒM8€œ¦fæ–VÖf6¶ºv\ Cìœ]\ÜÜ=<Á¦Úyyûøúù‡€B½¼Ã|ý”Ã#"ÁQh°@ \ 6,HH $!´$ƒRà¶$¤‚RÓ"Ò32³²sr ÀÜyrù…EÅ%¥e<@./¿@yEEryeUµ 0/LX1ú;¹ø{IEND®B`‚nixnote2-2.0.2/images/trayicon.png000066400000000000000000000010011315604104400170520ustar00rootroot00000000000000‰PNG  IHDRàw=øsRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<IDATHKÅÕËjÂ@`颫.JŸ¡/ ú>}”¾BßÁEp寕ãïH"¨„èÂ,Ô…ºü;' qrri¡žMΟ™™Bá?V©T‚¢( ì¬uª÷¥¦ƒÁà¥æž©q€šæ­é9ô {‡XFÃoLyêàÑü%ðA­VË×l6s»íàM ë:â´Ûm$QUÕ?Ñ\Ðï÷Az½^fNår™0 YЬ½T¥Rñ±;ÇàŒF#DÑ̪Õê0›ÍÖd2A­V{pû“Êg°X,d>ŸCÓ4Ôëu)6`¹\"̶mhgÁgÌý²«Õ Q4î«êv»cÇY¯×þ0‡ÃáÓ4Áa\×qXš¡O§Sg>÷¸Ú²,Äa6› ¢è¸²`v»¶Ûm.t¼„ ð<ií÷{Ȱ§Ó 2ÇãI‡p½^A.—K¢óù 6€.ß®¸€¢¸$¾„ï?ð)z¼ÒöpÂ0îŸóYIEND®B`‚nixnote2-2.0.2/images/tree-down.png000066400000000000000000000006071315604104400171410ustar00rootroot00000000000000‰PNG  IHDRŽÒ[“PLTE * "4Þo0tRNSHuU@øüW¥»%îö6‚™ßìbyÉÛ Aûýª¾)ò÷9ˆÊ dÒBÆsIDATÓc` 0³ V°»pp‚Ÿ¸‘Äxx!šùøáB‚P…„áb"\0[DÅ Bâ«%¡bRHΑ– ÉÊ!»Q^(¤Èʈ,¦¤ SQEõŒšº†&ºµ ´1|­£«‡úLÄß8‚IRIEND®B`‚nixnote2-2.0.2/images/trunk.png000066400000000000000000001324161315604104400164040ustar00rootroot00000000000000‰PNG  IHDR+YhDuâ€IDATxÚìÝwxUúÀñï› ¡„Þ› ‚HADDtíecA±w×¾«Ø{ÇÞu×u­+*öÆõ'6\Ezo" E:!$!½œßsƒáæö;wæÞäýÂù@ ð©ˆÜ#"âö»P*\¬(¥”³ººxî>‘¦n¿ ¥Â¡Ó@J)åéÌR#9¯iÓ¦têÔ‰²²2vîÜIAA6ýÝ=8Ú“ëö»Q* V”RÊ!"2 8.Ìæ o¼ñÆ?†~B÷îÝ)..¦  c ;vì`Á‚Ìš5‹yóæQ\\m·Gc¶ºý~” Dƒ¥”r€ˆ |fóªÑ£GŸ{ë­·>’ššº@ee%[·ú'ªªªX¸p!Ÿþ9sçFU¸v9VÀ²Ñí÷¤”?¬(¥Tœy7(œô§ý¨Q£f=ýôÓƒ´ÚŸoÙ²…ªªª ç®\¹’7ß|3wÁ‚­°òSµ8³Þí÷¥”/ V”R*ÎDä2¬p!uèСò£>JkÔ¨Qcùùù…uÏÕ«W¯»ýöÛ7–””  «k°–ßÝ~gJÕ¦«”R*ŽD$ ¸7Üö÷Üsß@ 333ìûöìÙ³Ûûï¿ß{ðàÁyažÖøADz¸õ¾”òGƒ¥”НS€Îá4ÌÉÉaذagffay”Ö÷ßÿØ'žxâNàÃ0Ïé |å­£TBÐi ¥”Š#ùøK¨v­Zµâ£>¢yóæAÛíØ±ƒÒÒÒhºríI'” ¼ 4£ýt¬)¡çßšR{Ò‘¥”ŠéG ÀE]2PȦ‚|<7qâÄ,`VnJ(Ã÷¼ÉÁJ¹Jƒ¥”ŠŸ«Ãi”Í©§žÖ峄A€ÿLœ8q?`(09ŒsN^ŒÿkR*8 V”R*¼¥ì/§í™gžIãÆáÌÌ@jj*iiiaµõ#xsâĉ‡ÇÏ…qÎå"rOÜ_˜RAh°¢”Rñq>ÖÆA5nܘ³Î:+¢ Ç0ºV©ÿw'Nœxœ1f,Ö^E¡Ü/"ÇïU)œ+J)W†ÓèÔSO +W¥¶ƒ€tàcÇs”1æNàÁ0Îù·ˆ £R¶Ó`E)¥l&"½¡Ú¥¥¥qÞyçE|ýŒŒ RRbþë;øÜãñŒ4ÆÜƒµs¨ö‹H»ø¼5¥Ó`E)¥ìwJ8N8áÚµ‹îßþVÕ–|æñxö2ÆÜ„ÊMé|è-t§”c4XQJ)ûN£³Ï>;êØ0T£5ÖKc̃À!Úž´ëæJ…Cƒ¥”²‘ˆ´ÇªQT÷îÝéÝ»wÔ÷±id¥Æ`¼ÇãcÌÃÀí!Ú_'"çÚÙ¥‚Ñ`E)¥ì•C·yä‘1Ý$%%…ŒŒ ;û=¸Àó(pKˆö¯ˆÈþvv@©@4XQJ){N££Ž:*æÙ8Tã>Çs €1æ àÆ m‰H»;¡”/ V”RÊ&ÞBp!£nݺ±Ï>ûÄ|?›§‚Àªrû–Çãé`Œy¸#Hû^À£vwB)_¬(¥”}ŽÃZâT¬S@5ÒÓÓIMµ}랦X ·­Œ1ïiˆnw'”ªMƒ¥”²Ïá4²c ¨FFWzïz<ñ~)0/@[^÷Ž*)¬(¥”}F„jÐ¥KúôécÛ ã·Rãà:cL p*°-@Û½€ÇãÕ¥4XQJ)ˆH3¬%ÀAýå/±õ¾™™™ˆHìòïÑZù+k1@e€¶WŠˆ=ó[JùÐ`E)¥ì1œ0þN=à€l½©ˆØ½„¹¶L`‚ÇãÉ0Æü\¨+ÀkÞ M)[i°¢”Rö9$" rË ˆÅq*¬Ñ¢Ý;3cþ ¼ mw´º­Š V”RÊ!ƒ•=zmûã¬\ïñxjOñ\ LÐör9:ÞR ‹+J)#I!Œûƒ ŠËýSSSIK‹ëÞ‚¼Yk9sVÅÛMÚ¿&"ÍãÙ!Õ°h°¢”R±ë„üÇ9^Á 82ºÒøOÍ7ƘMXK™Ÿ¶]§ãÝ!Õph°¢”R±;$œFñ VâToÅ×éçšoŒ1Ó±¦„ü¹TDŽs¢SªþÓ`E)¥br‰O«V­èÖ­[Ü:™™IJŠ#¥?ãñxÚ×|cŒyx+@ÛWDÄþ$Õàh°¢”R±ëªAŸšºODâ^½NÕ?¬(¥Tl*XàSA¾#<_}õ›7ouÉPõ©½²ÿ«ƒ:wôe¨zAƒ¥”Š’ˆ4Á*-”ÓÁJ°© ß`¥ªªÊŽÑ•–À#µ?0Æ|Žÿé ÛµPœŠ”+J)½½°6ù Ê‘•@+…ÓÓÓë|öÃ?°fÍšXo{¡ÇãÙßç3ÓA­€›}!*éi°¢”RÑëN£®]C¾ØJD&ôúûÜÃøñãc½m ð¤ÏuM‘öa]U)4XQJ©X„¬tèÐÁñŽš jÝÚýºÙ³g³téÒXo{¤Çãùkí¼ÓAù´kBÝ-J¤ÁŠRJE/d°Ò¸qcÇ–-×(ɶwïÞϱatà Çã[Oå Üç³ËE¤§ã/F%% V”R*z!ƒ•æÍ›»Ò±´´4ÒÒêÖ`ëÖ­[ÀQ—¥K—ÚQ(®/pyíŒ1¿/ø´Kpå娤£ÁŠRJE/d°’íÞ£+"ÂÞ{ïðœñãÇcŒ‰õÖ÷y<ß(m°Ãç³³E$þÛQ«¤§ÁŠRJE/d°Ò¢E ×:heŸ}ö xΚ5køá‡b½u[àÎÚcvRw$%]QaÐ`E)¥¢—Ð#+~—0Ë[k³C\çñxzø|ö"°Òç³Ù˵—¤’‚+J)IÇAÊÍ`EDüN… VÖ®]kÇí3©[(®¸Õ§] p•k/I% V”R*:£ œ›Á øŸ j×®]Ð~åååźÁa3=Ï Úc>~òiw‰î¤‚Ñ`E)¥¢Ó)œF‰¬@ð¼€uëÖÙq{Á'wÅëF vokàlW^J ¬(¥TtÂZ“ìv°’’’â·Ä¾CÁ ÀigÍ13÷|Ú]ãÞ[R‰Nƒ¥”ŠNãp5mÚÔí~ú] •·bc°’ÜáçóÛ²Zß‘áî¼!•è4XQJ©è„¬¤¦¦ºÝϨ’lm VÎöx<½j`ŒY <çÓîwÞJt¬(¥Tt²Âi”ÁJFF)){þu߬Y³ {Ù¬¤b¤øzØ^ëûSEÄý¦Ž+J)¤YÿSAÁòVòóóÉÏÏ·³ x<žnµ?0ÆäcU¶­Ñø‹«/J%$ V”R*:I¬ø› r0ɬ½€nñóù+@n­ïÇ8ÿvT¢Ó`E)¥¢“4Ó@`+¾Õl*WÛ¥§cíŒ1ÅÀ¿j}¤SAª V”R*:I5²’’’BFFÆŸõêÕ+hÿlYhÜäçó%Þ_·síE©„¤ÁŠRJE'©‚¨;”‘‘A÷îݶÃÈ À§MíŒ1Û€7k}ôW÷Þ’JD¬(¥Tt’.X‰´ÞJFVš7øùü) Úûk­·¢ö ÁŠRJE'©rVÒÒÒêô'X’mQQ¹¹¹¡.k<O‹ÚcVŸz¿ìÝ(R)@ƒ¥”ŠVÒ¬@Ýч‹ÃÕh\ëçó'jº tþí¨D¥ÁŠRJE'¬`¥ºº:œfŽñ Vºuëp³Cˆ[°pÇãiVûcÌ `ª÷ÛƒÜ{K*Ñh°¢”RÑ k¨¬¬,œfŽÉÈÈØc sJJ ½zõ Ø>NI¶­€«ý|^3º2Ô¥W¤+J)°FVJKKÝîçD¤Îª >}úlÇ‘€<oÐ÷° híÒ+R Hƒ¥”ŠNR+Pw*¨ÿþÛ®[·cL¼ºÒ¸¼öƺٓ„9r¥ V”R*:I9 uë­ôïß?`"pii)Û¶m‹gwnöx<¾{¼ ¸ùŽTbÑ`E)¥¢ÖÈJ"+©©©¤§ÿ¹2¸Q£FnÔ[©Ñ ¸¸öƘràUwß’J$¬(¥Tt’vêN x¥pœƒ€Û<o]•¯\y1*!i°¢”RÑIÚi ¨;är°Ò8¯ö&މ2*ùh°¢”Rkíof8m5XÉÈÈ %åÏúöí»ÇÔPmkÖ¬q¢K7Ä~ U_i°¢”R‘ k wö]ÉÈÈ oß¾~Û­]»–òòòxw§¿Çãéö;Q‰Iƒ¥”Š\½VÂÍ[©ªªâ·ß~s¢KWÇ~ Ui°¢”R‘ »†~QQ‘Û} (’¼•_ýÕ‰.æñxÚ¹ûVT"Ò`E)¥"WnÃ8×(‰IJJ »¿ßgŸ}îäP°’\êö{Q‰Gƒ¥”Š1¦ ¨ §íöíÛÝînPµGWRSSéׯŸßvË—/wªKWx<ý·IíAC(¥TtšßIä‘?o%//­[·:Ñ¥îÀ Jí]Uƒ¡ÁŠRJE'¬`%77—êê°S\—žž¾ÇæÈ[à‰¶W:Õ •84XQJ©è„¬TWW“››ëv_ƒª=ºÒ«W/š4iâ·ƒSAÇz<ž½|?‘Tànéáü[RnÒ`E)¥¢ö2ŸDŸ ª·"" 0Ào;ƒ•ü tsö )·i°¢”RÑ {EP2%ÙBà© Õ«W;Q®Æ%~vc¾Äû_ V V”R*:õfdÅw s ‘•ªª*V­ZåT·Úcj¾‘6@Ž÷ÛÃÝxOÊ=¬(¥TtêM°{Ž®tïÞììl¿íL²¸ªÖ¯Ïj6/ÚKDº:üŠ”‹4XQJ©èÔ«`%Ü%Ìæ­Œðx<ƒ¼¿¾Äç˜N5 ¬(¥TtêU°îf‡ƒ€«Ed(à;7¥ÁJ¢ÁŠRJE§^+°çèÊ!Cü¶Ù±c‡Ó Ãçfff^áçs V V”R*:õ.X©·Ò¦Mzöìé·“£+åååMª««Ïõs¨·ˆtrú)wh°¢”RÑ {ér~~>n÷7$ß%ÌtßvN+Ó§O§¢¢¢q€Ã£ëˆr•+J)°GVŒ1 _kê.a>ðÀý¶srEзß~ìðáŽuD¹Jƒ¥”ŠNØÁ $çTP¯^½hݺu6«V­rd¤hÛ¶m,\¸0XÍ[i 4XQJ©èD¬$ÃÈ ì™d+"~GW*++Y½zuÜû2yòdŒ1Ášô‘v.¼&å0 V”R*:õrdÅw ó°aÃü¶‹wÞŠ1†É“'‡ÓTGW V”R*:+[·nu»¿a«=º2pàÀ:‰·ÿ`eñâÅlÙ²%œ¦¬4¬(¥TtÂ^ É3²{æ­ddd°ÿþû×iï$Û‰µµi°Òh°¢”RÑ©—9+ÞæíÛ·“››·>,Y²$ܦûy79Tõ˜+J)z™³u—0:©Ó.žSA:t·© õVê= V”R*:õ6gö]iÑ¢½{÷®Ó&žSA]»F´©²NÕs¬(¥Tt" VŠŠŠâ:mb7ß]˜ýMÅsdEƒU›+J)]@y$'¬\¹Òí>‡-œ%Ì¿ýö¥¥¥q¹—.]"i>@DZ:üŠ”ƒ4XQJ©(«ZÙ†HÎYµj•ÛÝŽHíÑ•îݻӮݞõתªª"I„H„ÁJ p¨óoH9Eƒ¥”ŠÞúH'ÓÈ Ô]äot%D9ü¨µnÝšÆGrŠNÕc¬(¥Tô4X‰S°®h°Ri°¢”RÑû#’Æ«W¯¦ººÚí>‡Íw ó€hÚ´igÚµkW\îa’íþ"’íÂkRÐ`E)¥¢ÑÈJii)üQ|ãºÚ£+©©©Œ1bãÆ-Z—{G8²’ Œtþ )'h°¢”RÑ‹8òH¶© ß%Ì£FÕ­¿¯© nݺEzŠNÕS¬(¥Tô"Yä[仄yÀ€´l¹ç*áx+þ Ñ… ÁJ=¥ÁŠRJE/â`%ÙFV`ÏÑaäÈ=g[Ö¯_ÏÎ;m¿oË–-iÓ&¢m‘¦‘œ ’ƒ+J)½í@Y$'$c°â»*ÈÉ© }öÙ'’æiè>Aõ’+J)%oa¸ˆòVÖ¯_OyyD…o]ç¬ôéÓ‡öíÛïñY‚+Ç:øj”C4XQJ©ØD¬TWW³zõj·ûß%̇ºgÁØx+}úô‰ô Vê! V”R*6 "o%ÔTÐæÍ›Ù¶m›í÷íÕ«× ¾aè#"Ý]xE*Ž4XQJ©ØD¼|9ÙVAÝ%Ì=zô¨S´-£+5Šf ³Ž®Ô3¬(¥TlÄÈŠïf¨;º’@SAÇ9øj”4XQJ©Ø4ˆ`BˆK z+GˆHšƒ¯FÅ™+J)›ˆ§¶mÛFAAÛýŽ˜oÞJÇŽÙ{ï½wŸ››Ë† l¿o#+ÙÀpçߊ V”R*6¬@rŽ®ø+àÌèJ·nÝêl Í[©G4XQJ©c¶¥‘ž—ŒÁJ %Ì"²ûûx+" Aƒ"=MóVê V”R*võ~Cþ£+­[·fàÀ»¿_¼x1V­<{ <8ÒS‘ˆjõ«Ä¥ÁŠRJÅ®Á+¾I¶ÇsÌî_ççç³víZÛïE°’íìÛQñ¢ÁŠRJÅ®Þï¾\ÃßæáÇӬY³Ýß/Z´Èöû¶mÛ–.]ºDzšæ­Ô¬(¥Tì"VŠŠŠØ´i“ÛýŽŠïèJzz:‡~øîï,X—ûF1º¢ÁJ=¡ÁŠRJÅ.âi €+V¸Ýï¨ø[tôÑθ,^¼˜êêjÛï{ÀDzJ‰83W% V”R*vQ-_Ž×D¼ù Vzôè±»x[qqq\¦¹ú÷ïOzzz¤§éèJ= ÁŠRJÅ.ª‘•yóæ¹Ýï¨ø[ {&ÚÆc sff&ýúõ‹ô4]Â\h°¢”R±[ÍIË–-£´4â- ÁßèÊ¡‡ºûóx•Þ"oåiâðëQ6Ó`E)¥bdŒÙI£+•••,^¼ØíîGÅß欬,FŽ ÀÒ¥K©¬¬´ý¾Q+À_œCÊN¬(¥”=¢J˜;w®ÛýŽŠ¿%Ìðg¢mYYK—.µý¾{íµ-[¶Œô4Í[Ir¬(¥”=¢ VæÏŸïv¿£æot¥_¿~»ë¡Ì™3'.÷btEóV’œ+J)e¨‚•E‹QUUåvߣâ/oþ]‰W°²ÿþûGzÊÞ"ÒÓ¹7£ì¦ÁŠRJÙ#ª`¥¤¤„åË—»Ý÷¨ VŽ8âRSSY·nÛ¶m³ý¾ƒÞcóÄ0éTPÓ`E)¥ìñ+P͉õm svv6Æ â3º’MÏž”h°’Ä4XQJ)c*eÑœ›¬Á ¸7EÞÊ"qE9•4XQJ)ûDdkŒq»ïQñ—d 0dÈÚ´i e s3`„ã/HÙBƒ¥”²OTÁJ~~>¿ÿþ»Û}J %Ì"‘GIii)K–,±ý¾ýúõ (¡SAIJƒ¥”²OÔe[ëÛf€£Ž: ‰ËTPjj*Œô4 V’”+J)eŸEÑžXóVÚ·oÏÀ)oe°ˆ´söí(;h°¢”R61Æl¶Gsn} VÀÚÜpýúõlݺÕöûF¬pL¤')÷i°¢”RöŠj*hóæÍlÞ¼Ùí¾G%Ðf€áÇӬY³¸Œ®têÔ‰öíÛGzšN%! V”RÊ^Qç­ÔÇÑ•ôôt?üð¸MÕÔs‰À1EE9å. V”RÊ^ 2o%ØÊœcŽ9†… Æe ó!‡é)퀈画4XQJ){5ÈA–0tïÞnݺÅe ó¾ûî«»07¬(¥”½–ÕÑœøûï¿“ŸŸïvÿ£ltå裎ËTˆ0bDĵÞ4XI2¬(¥”Œ1%ÀoQž›Ô£+ÁV5*.#+@4ÁÊiæÜ›Q±Ò`E)¥ìõTÐܹsÝî{Ô‚+7¦{÷îqYÂÜ¿²³³#9%8Úñ¤¢¦ÁŠRJÙ¯A&Ù[ V¢mMàìÛQ±Ð`E)¥ìõÈʯ¿þJII‰ÛýZ°Ñ•¾}û²mÛ¶¸Ü7š`E—0' V”RÊ~Q+UUU,\õé® µ¹`ûöí©¨¨°ý¾  yóæ‘œÒØßÉw£¢§ÁŠRJÙo PíÉ?ÿü³ÛýZ°%Ì|0+V¬°ý¾))) ><ÒÓNtöí¨hi°¢”R63ÆbÈ[™:uªÛ“`£+Í›7'^³/š·Ri°¢”Rñu°²~ýzÖ®]ëvÿ£,o%œãÑ4hM›6䔃D¤soFEKƒ¥”Š˜O’yt%T0Ò±cGvìØaû}SSS9è ƒ"9%-—4XQJ©øˆin2+¡–0geeÅeŸ ˆj¯ Í[I¬(¥T|ÌvE{òüùóÙµ+êÓ]jUP¼¦‚öß²²²"9åXIuîͨhh°¢”Rq`Œ©~Šöüªª*¦M›æöcD-T0Ò¸qcª«£ÚB)¨´´´H§‚Z/#RÎÒ`E)¥âgJ,'ÿôSÔ±ŽëÒÓÓIM <`‘‘‘µhÊ~QL骠§ÁŠRJÅÏ”XNþùçŸã2úà”P£+Á‚™X <˜ÆGrŠæ­$8 V”R*~æCq¸üü|-Šz´ëBå­ÄKzz:x`$§ ‘ήtV…Eƒ¥”ŠoÞJLåh“yUPfffÜ À…¢SAõ‹+J)_ÿ‹åädVD$èæx2dH¤#;¬$0 V”R*¾¦ÄròªU«Ø´i“Ûϵx-Q%##ƒ¡C‡FrÊQ"âNd¥BÒ`E)¥âk.1ä­@r®¸•·O5F¹ÖY”+J)G±Ö[ä^œ––·U?¡ 2$Òi(]” 4XQJ©ø›ËɳgϦ¤¤Äígˆš[SA5Št*HóV”+J)Sb9¹¼¼œ™3gºý Qss*hÔ¨ˆfvö‘½]ë¬ Hƒ¥”Š¿˜ê­@rç­¸¹„yèС‘î¤£+ Hƒ¥”Š3cLS´ñÓO?Å­<}¼¹¹„9##ƒáÃ#ÚúGóV+J)åŒ)±œ¼}ûv–/_îö3DÍ­¼ˆx*è0iâZg•_¬(¥”3¦Äzdž r3oeРAdgg‡Û<8ÒµÎ*¿4XQJ)gÌ b¹€.aŽNjj*#GŽŒäÍ[I0¬(¥”¼y+1EË–-#77×íG‰Z­ Ò`%Áh°¢”RΙËÉÆ˜¤]q3o¥oß¾´mÛ6Üæ]Ed€kUuh°¢”RΉiSCHî¼7—0‹H¤£+º*(h°¢”RΙGŒy+Ó¦M£¨¨Èí爊›K˜A§‚’™+J)å;ê­”——óý÷ß»ý(Qs3oe¯½ö¢k×®á6!"-]ë¬Úƒ+J)å¬)±^૯¾rû¢æfÞ D4º’ ãjgÕn¬(¥”³¦ÄzY³f±cÇ·Ÿ#*iii¤¥¥¹vÍ[IN¬(¥”³bÎ[©®®æ›o¾qû9¢ææèJÇŽéÝ»w¸Íýw2èÿ¥”ry+ÜSAnæ­vØaá6m èjg ÁŠRJ¹áëX/°xñb6lØàösD%##õ%Ì#GŽŒäþº*(h°¢”RΛhÇE’utED\ jÕªýû÷·¹æ­$ V”RÊaƘµÀ‚X¯“¬Á $Õª D¤ƒ«U¬(¥”Kb]ùý÷ßY±b…ÛÏ·óV9äpW% p¼«U¬(¥”K>·ã"É:º’ššêêæ¦M›rÀ„Û\óV\&Æ·û ”r‘ˆ4ú×új ¤ùÊðþ7 Ø üáýZ_ë×›¼+_”bex®:ÇröíÛóÅ_¸š°­‚‚víÚåÚýüñGž|òɰº ´1ÆT¸ÖÙν°V)å IÆ`Uèì5Ôm·*ÙÄžÁÌr`&°ØSéö»p“1ƈˆ¸2–ëlÙ²…yóæE2J0233] V† F£F(-- Õ´9p6ôSÑÑ`E©BDºw£6Ü2èâýòU,"s±—ÀLcÌ·ß‘ >'Æ`¬© d Vj–0»5ÂߨQ#† Æ?þNóÑ`Å5š³¢T='"é"r°¸g•P²€‘À ÀûÀï"²ED<"r·ˆÛ@6‘ûóÐÂäÉ“©¬L¾*·—0CD«‚4oÅE¬(U‰HW¬%²`¶HMM¥uëÖdggÓ¸qcRRlù«¤ðWàà+`‡ˆ,‘E$ù† Â`Œ)ó>kLòóóùå—_Ü~œ¨¸¬ 2„fÍš…Ó´Ÿˆôpµ³ ˜N)UOyg¿öôÜ””z÷îMÇŽiݺ5mÚ´Ùã¿-Z´¨“ÐYUUEYYÙî¯òòrÊÊÊØ¾};›6mbãÆ»¿"Ø„o€÷ë.Y || üT’w'§Çz‘¯¾úŠC=Ôíg‰X£FÈÏÏwíþ©©©Œ1‚¯¿«¨ð À‹®u¶ÓÕ@JÕCÞÍ×&AõÍŒŒ FŒÁÈàÁƒiÚ´iÜúWZZº;€©ùïêÕ«Y³f ÕÕÕá<_®1f"Vàò­1&d†d¢‘VÀV¬Ÿ¨5nܘo¾ù†Æ»ýHÛºu««ÓX‹-âÎ;ï §é—Æ­hë V”ª‡D¤ Öꛚ4i 'œÀI'Dvv¶«ý.--eÅŠ,_¾|÷W«Eа¦RÞ>5Æ„ŽvŒˆLÂÞ]/qãÆqÜqǹý8s{ ³1†‹.ºˆ¼¼¼PMK€ÖƘ×:Û@i°¢T=äÍñ˜ªÝàÁƒ¹é¦›Â³wœ1†?þøƒ_ý•eË–±|ùrþøã`«GVOÿM¦PDäZà¹X¯3räHž}öY·'beeeäææºÚ‡W^yÇNÓ1_ºÚÙHƒ¥ê!9–‰›çœsgu–Û]XAA³gÏfæÌ™Ì;×o ï4ÑsÀ¿Œ1a'ȸŻ÷ÌÄ8”––Æ×_íúY¤Œ1lÞ¼Ùµ%Ì+V¬à¦›n §é¿Œ1w­£ ”+JÕC"r>0>Ðñ#<’Ç{ŒÊÊJ Â)Š•***X¸p!3fÌ`æÌ™uwE¤Äó ð´wóÀ„%"ßGÅzÛo¿ÓN;Íílj؎;\ÿ}xÙe—±eË–PÍÖcörµ£ +JÕC"rðŽ¿cmÛ¶-zýõ×›tìØq÷g¥¥¥$e­ŽÆV­ZÅŒ3˜1ckÖ¬©ý>ªŒ1ïc~u»¯þˆÈÅÀë±^gðàÁ¼òÊ+n?NÄŠ‹‹Ù¹s§«}?~<}ôQ8Mûc–¹ÚÙFƒ¥ê!9ŒÕ6Eäë©S§¶hÔ¨ÑAµ?7ÆPTTDaa¡«ÃñvÙºu+?üðß~û-›7o %%¥¸»ººúÉD[ú,"ÙÀ ¦Â#"Â_|AûöíÝ~¤ˆTUU…3ªWkÖ¬áÚk¯ §éÍÆ˜°6RöТpJÕO0ÆШQ£:5–D„¦M›Ò®]»¤\þê«]»vŒ3†ÿüç?<üðÃüå/!---½ººúÑ–-[þ–½ŸÛ}¬Í“Äœ¸iŒáË/“/ÿ355•ôôtWûУGºvíNS­fë0 V”ªŸ69ÖvË–-ƒLMM¥eË–´nÝš´´ä¯)"ôïߟ믿žñãÇsõÕWÓ¦M›½*++œþùaýí  v\äÓO? «^M¢q»š-„]~¤ˆ4w»¯ ‰+JÕCÞe»ÇÔ—-[òÏ~ff&íÚµ#;;Û®rú®ËÊÊâ¸ãŽã©§žâ±ÇK­¬¬|îÙgŸâñxú¸Ý7¯/€ÂX/²qãF¦OŸîö³D¬Q£Fnw!Ü`%8Úí¾6$õão ¥”?SX¶,üÜÀ&MšÐ®];²²lÛZ(!tïÞsÎ9‡^½z,òx<Ïx<žnöÉ[‰÷S;®f¢hBÉÈÈp=0îØ±#{ï½w8Mµ’­ƒ4XQªþú_ ³fÍŠèB)))´hÑ‚6mÚ¸žW'éÀXà7Çs•Ç㉩ÞIŒl™ úé§Ÿv''“$š :^|7ÈRq£ÁŠRõWÀ`eÑ¢ElÚ´)â fddжm[Z´háúOÀqÒk£ºùçH—ú0ØëEª««ùôS[i•ÁÊÈ‘# #éÔËÝÀQ½üÛF)Þ:›ãÛo¿úÚYYY´k׎&MšìþlË–-Ì™3‡… †»§O"ë|çñx>óxû쳤«“y+mÚ´¡_¿~á4ÕUAÑ:+JÕc"òp‰¿c}úôáwÞ‰ðŠuUTTŸŸÏ—_~ÉóÏ?_ûÞôêÕ‹2hÐ úõë—?5G¡kßžq999NÜPDF?Ûq­G}”£ŽŠ¹0®£¶mÛFEE…«}˜4iÿþ÷¿C5›aŒîjG V”ªÇDä``Z ãŸ|ò ݺu³å^ÅÅÅÜ}÷ÝüðÃ~§¥¥Ñ§OÈàÁƒéÛ·¯Û¯'R[»€×rrrâº.Ø› ±ˆyTgèС¼ôÒKμ!›RX󢨘pá…RU´v`5ÐÁó´ N§”ªÇŒ1¿Kÿâ‹/l»WVV?þ8'žè‘Dee%K–,áÝwßå–[naܸqäåå¹ýŠ"Ñx˜ï©!cýùªך={6k×&ô¶Hu$Â\óæÍ4hP¨f)Àqn÷µ!Ð`E©ú/àF1}ôÅÅŶÝ(55•û￟sÎ9'dÛ™3grÍ5×0eÊ·ßO¤F`%à^çûü°e.äã?Ž÷;±U",a†°WiÞŠtH©zNDZaU´õ›¹xíµ×rÁØ~ß>ø€þóŸaCÆ ãšk®¡eË–n¿®H}\š““³1‘ѱ^§yóæLš4)!F,•——GII‰«}(..æ‚ . ¼¼„Ž®D.##ƒáÃC–R("]Üîk}¦ÁŠR „1fp_ ã¯¼ò [·n{?zöìÉË/¿Ì½÷ÞK‹-‚¶>}:×\s ?þø£Ão+fWa­й`˜1f0ÉŽN}ýõ×IUY8‚ÐUA‰@ƒ¥–W¿s%%%<õÔSŽu$''‡O>ù„“O>9è>,………<ùä“<òÈ#äçç;þÂbÐøÉãñ<äñxbÝýñe;:TRR—_~éö{ [¢,aÆè ¬i¡Ó£9Ù[Ãã ;:²zõjæÍ›çöû[",a†°¦‚š‡¹ÝÏúJƒ¥¦›¿!×­[Ç /¼àx‡RSS¹à‚ øè£8þøãƒN -^¼˜ë®»Ž7ÞxƒÒÒRÇû¥làCÇóoÇÍ¿À¯aíE³d]I„‘€þýû“ª™æ­Ä‰+J5@ƘÙÀ{ŽO˜0É“'»Ò·:ðàƒòæ›o]5TUUŧŸ~ÊÕW_ÍÏ?Û²A±S®fz<ž}#9ɳøÜŽ|ÿý÷ISË&Q–0‹H8«‚tŸ 8Ñ`E©†ë ,ÐÁûï¿ßÕ ðúõëÇË/¿Ì“O>tgèíÛ·óØcqï½÷²aƒ-iNÌöx<GxÞÓ¶÷«¢¢‚Ï?·%îqD¢Œ®|pÈBµ}DÄžmÌÕto ¥0¹ x0Ðñž={2~üx×ó*++ùøãyùå—ƒ®JKKcôèÑœqÆ ñÓx˜Þ®ÊÉÉ) §±ˆÌŒõ¦:uâ³Ï>KˆÕ6¡TTT°mÛ6·»AUUçwEEEÁš]nŒ±e›õ§Äÿ]ª”Ч‡)®^½š‡zÈí>’––Æ™gžÉçŸÎùçŸOzºÿ•À•••|ðÁ\}õÕÌœ9Óín‡ë\`ŽÇã9 Ìö¶Œ®lܸ1iVV¥§§'DP•ššÊ°aÃB5;Æí~ÖGîÿßWJ¹Æ[Îý\`{ 6“&MâÃ?t»«4mڔ뮻Ž?þ˜£>:`îÖ­[7nãÆcË–-ÞŽ_<ϵa´ý°e)ÔoزÀÈnîÕs sªÛý¬otH)…ˆœÜÍ0==W_}•ýöÛÏí®îaÉ’%<ùä“,Z´(`›ŒŒ ÆŒÃèÑ£ŽÈ$˜/KrrrFY"rð„7û׿þÅAäö3‡TRR’IÁåååœwÞy¡V¡lŒq®`Q #+J)Œ1ÿ<èxEE·ÞzkÂUÝo¿ýxã7xì±ÇØk¯½ü¶)//çwÞáÿøG²Ô9Xäñxþ¤Í+@X9.¡$ËèJ¢$Ùfdd0dÈPÍt*Èf:²¢”@D2€_€€¹|0Ï=÷\Bäø2ÆðÕW_ñꫯ]ÅtÈ!‡pñÅÓ®];·»Ž—€srrŠ}ˆÈ3ÀX;nòÆo0`À·Ÿ5¤íÛ·S^^îv7˜:u*O<t`kš1æ·ûYŸh°¢”ÚMDzs¦Ú\~ùå\~ùånw5 êêj¾øâ Þxã Ö¯_ï·Mzz:999œqÆdeÙµ9rÜ,ÎÍÉÉ™[ûCé¬Ä*é“Q£FñôÓ¶äíÆÕ®]»(((p»”””pÞyç«ô\´6Æ$ÖPdÓ`E)µ9x+Ðñ””ž}öÙp ]UVVÆ_|ÁÛo¿0hÉÎÎæì³ÏæØc%55¡s"+€»'rrrvW±‘¨Jø×&"¼ÿþûôìÙÓíç ª²²Ò‘ÁÃñàƒ2kÖ¬`MFc>u»ŸõEâå*¥\eŒyèxuu5·Ýv .t»«AeffrÚi§1~üxn¾ùfºtéR§M~~>/½ô×^{-³gÏv»ËÁ¤ß{<ž®µ>·e8ÄÃÿû_·Ÿ1¤´´´„ *ÃÖu»õ‰Ž¬(¥ê‘¦À`Ÿ@mš6mÊ‹/¾H¿~ýÜînHUUUäççóõ×_óÞ{ï¬t;hÐ .¹ä’€Éº bbNNÎÉ5߈È/@È:𡤦¦òé§ŸÒ©S'·Ÿ/¨üüüPEÙQXXÈ\@UUU &¿c{¨*‰èÈŠRªcÌ.à,‚”ãßµkÿûßùõ×_ÝînH©©©´jÕŠÑ£GóÒK/qóÍ7³÷Þ{×i·`ÁÆŽËóÏ?ŸËdØèóýƒQ]ÅGUUo½õVìгD©·Ò¬Y3ú÷ï¬É^Þ0e V”R~cæ7kSPPÀÕW_ÍÊ•+ÝînX233éСÇ<Ï<ó =ôC† Ù£¸œ1†ï¾ûŽ+®¸‚÷Þ{²²²î{„3Æ| ̰ãŸþ9;vìpûù‚ÊÈȺ#·“˜ Ò%Ì6Ñ`E)1æà_ÁÚäççsÕUW±zõj·»¡yóæ´mÛ–!C†pï½÷ò /pä‘G’––¶»]ii)&LàÊ+¯äûï¿'¦Ìýe ßcÇ…ËËË™0a‚ÛÏ”ˆ$LÍ•áLJ œ4X±‰æ¬(¥‚‘àC`t°v­[·æ•W^ ºCr"*..¦  €êêjvìØÇãaÒ¤IïYÚ¤gÏž\z饉PdlNNÎs¾ŠÈO@̵=š4iÂÿýßÿÑ´iÓX/7ÅÅÅìܹÓínpë­·²lÙ²@‡ ±–0WDpI凎¬(¥‚ªµÐOÁÚåæærå•WòǸÝåˆdeeÑ®];7nL«V­¸ð yã7¸ôÒKiÛ¶íîv«W¯æÎ;ïdܸqt24Àç¶Œ®%Ì^P$JÞ X…ƒhæ¥T:²¢” ‹ˆ´Ä X‚.ÿiß¾=¯¼òJ¯*ñ§¬¬Œüü|*++k™öìÙ³™4isçÎÝ=”ššÊñÇÏYgEóæÍîæòœœœ}ý‘)Àa±Þ U«Vx<ž„™nñ'QªÙnݺ•¿ýíoÁšû„wáT]]MAAAB5ÊÊʘ:u*“&Mâ·ß~£k×®œþù saÙ@æ­ˆÈWØPî½gÏž¼ÿþû S×ÄW¢T³¸æškîA¼aŒ¹Äí>&3 V”RQ‘ë cš¬¬,ÆǨQ£ÜîrLÊËËÙ¹sçî\V®\ÉW_}Å?þH·nݸð ãµÜyxNNŽßbp"2 › Å=ùä“~øáñèÌÊÊÊÈÍÍu»¼óÎ;¼ÿþûo0Æt‰äzjO¬(¥b""O7†j—’’Âõ×_ÏÙgŸív—cbŒ¡¨¨ˆÂ …⊋‹ùßÿþÇ—_~I›6m8ÿüóý–øÁ¿srr®tPD>NŠõ&ýû÷OØM1lÞ¼9! ö­^½š±cÇkÒß³Äí~&+ V”R1kŽà ¬(d̘1Ü|óÍ{ä$£ªª*vîÜV9þE‹1iÒ$RSS9묳èܹsw)蘓“ã·"²°kÇæ˜üûßÿæÀsAËŽ;(--u»\vÙelÙ²%ÐáŒ1ϸÝÇd•Ü[(¥\g¬Ÿx.¾ §ý‡~ÈØ±cæ$‹ÔÔTZ·nMË–-C&z0€[n¹…K.¹„iÓ¦ñî»ïÚ1}Ñ’ #'ƘÀóv<ë‹/¾hóÛ³O"ˆ ±WPÌ9D ™+J©˜cÊ`R8í§M›Æ%—\ÂæÍ›ÝîzÌ7nL»víhÒ¤Iȶ-[¶d̘1œqÆüþûïÌ;—]»vÅrû Cˆy}ï¢E‹˜}úЪU«@‡‡ºÝÇd¥ÁŠRÊ6Þ–3€°¶îÍÍÍå²Ë.ãûï¿w»ë¶HOO§mÛ¶dgg‡½Ü·eË–±T¿Mn ÑæU`A¬Ï¶~ýz>ùä;_—me[aèСÁšè.ÌQÒ`E)e+cL%p>ðZ8íËÊʸõÖ[?~¼Û]·M“&Mh×®SSóx<ônD9ÖŽ½òÊ+ Sפ¶Dš :à€‚Ö`%J¬(¥lçýò2à…0ÛóüóÏ3nÜ8ªªªÜî¾-RSSiÕª­ZµŠw¥ÕF„X:nŒ™|ëòòòxóÍ7ãù,QI¤j¶ƒ ¶Òm ˆtt»É(i‚i!"GˆÈÍ"òžˆ,‘é"òšˆû”Rv2–kÇÃ=ç³Ï>㪫®J˜=_ìШQ#ÚµkGÓ¦Mãy›«<OëmnB¯³a„ ¹…B¢Œ®4iÒ$Tµæ£Ýîc2JÈ`EDZŠÈ‘"r‹ˆ¼/"+Àd¬¿øÎú—¿xƒ˜Ä¬ ­TfŒ¹¸7ÜösçÎåœsÎaÚ´inwÝ6"BóæÍiÛ¶m¼’A›×k`Œù0ª ‡RZZÊK/½ŸƒD V† ì°.aŽ‚ëEáD¤%0Äç«g”—û8Ë;­”J "rðDí9ï¼ó¸æškHKKs»û¶ª©€kó†‡ù@÷œœœü@ D¤)°ˆi*"%%…wß}—^½z9ò¾Â‘HÕlW¬XÁM7ÝèðVcL{·û˜l\Y‘öÞ“ÕX#&ßcˆ>PÁ{þsn<“R*8cÌ“À5@Xÿšcxë­·¸ôÒKÙ¸q£ÛÝ·UMn «€üÉþ¬1fpk¬7ª®®æùçm©7gI˜UA½{÷¦Q£FÊê¶‘¾n÷1Ù8¬ˆH3¬ÂQg{Åá‘PKù”R.0Ƽ\ „=¤°dÉÎ9ç¾û.¬¹I#%%…–-[Òºuk;GŽÆz<žfÁcÞ¾ŠõF?ÿü3³gÏvàM…/Q¦‚D„ýöÛ/Xµ¿‘n÷1Ù8¬ˆHð 08ηzTDŽpòÙ”Rá1Ƽœ „]al×®]ÜvÛm<üðÔ——»ý¶ÊÌ̤mÛ¶4kÖ,ìÚ,A´î£Ýå@a¬7{î¹çbÚ¥F¢+#FŒVÒXƒ•9¬x“_ÿ åÄí€×½£8J©cŒy8ˆ¨të'Ÿ|Â\Àï¿ÿîö#ØJDhÖ¬mÛ¶µc*ã:ÇÓ;XcÌz¬ÕA1Y¶lß|óƒo*¸”””°*;aèСÁæø4X‰“#+O殬6éî½§R*c>6ErÞÊ•+9ÿüó™8q¢Û`»´´4Z·nM‹-bÙ•:gwß—ÿÅÚçýë_TTT8ø–‚K”Ñ•–-[Ò¤I“@Qu/­·G‚ï*€ëc¾Pä.]&¦T‚2ÆÌæFr^ii)<ðwÝuWÒïÞìOVVVØ›#p¢Çã9.XïnÙbz7näÃ?tçEù‘(Á @ß¾}×9¬£+ˆûÒe955Tjj*íÚµ£cÇŽtîÜ™Ž;Ò©S'Ú·o϶mÛX¶l'Ò]Jö3ÆÔ²˜JÕC"’…õ÷Äi‘žÛµkWyäúö­Ÿ ,***ÈÏÏ&WçW`@NNNÐa¹x6–>6oÞœÏ?ÿœfÍcæ}Ë–- Q ù‡~øî©§ž ”úð¼1æ:·û˜,⬈È1ÀÀîIÄ-Zн{wºvíJ§NvuìØ‘öíÛ‡úܺu+=ö?üðC$]¹Ìój|_¥R*Þ¼¶ˆb—àôôt®¾újÎ=÷ÜX¦OZII ‘þ#|cNNNÐBp"’LFÄÒ¿ .¸€k¯½Öí×@~~~BìaTQQ±à´ÓNÛ«hŸ¯¹Æ˜!‘^³¡Š[°""C€)ÀîÓmÛ¶åÅ_¤G1g½?ñļÿþûá6ÿèíÝÂ^)•ÀDälàu¬=o"Ò¯_?î¹çöÞ{o·#.Œ1RTTî*œ wNNNÐúø"Ò˜Oï¼FFFŸ|ò :tˆö¶)--eÇŽnw ìä“OþÎs¢ŸcU@ oíB\~‘½/©¨dddpß}÷Ù¨ÜxãŒö]°ŠQ)¥œ1æ]àp`s¤ç.]º”óÎ;—^z)¡’>íR»l˜«†š‡jdŒù¸/–¾•——óâ‹/ºýŠk9x‚ì¾’Ù½{÷@ùX©ÀÁnw0YجˆH[¬‚Cíj>vìX† fÛo ””yäzö »àíí"ÒÜîçUJÙÏ3+ñv^¤çVVVòꫯrî¹ç²hÑ"·%.jV …¹£óÅ'œé†'˜ª¼Mš4‰åË—»ýzªší™gžlTK“lÃdk°""iÀÀFŒ=š1cÆØé6iÒ„gŸ}––-[†Ó¼5pS8 •Rî3Æü |Íù«W¯æÒK/å©§ž¢¤$¢r.I£fGçåR€W=OÐ$ÞEç`MEÅøqã"¹5QVrÈ!mUk°&»GVžÄ¾ÝmРAÜ|óÍq’ëÔ©O=õT¸;™^/"íÂi¨”rŸ1¦k…PÈ© ª««y÷Ýw9óÌ3™1c†Û5åÚµkìèý;B]ËóÖræ¨-_¾œ·ß~Ûí×’0#+@àëdž{ÈW!جx—(ï± «}ûö<úè£q¯(8pàÀ`;\ÖÖ¸3®QJÙÊXîÎÊ¢¹ÆÆ¹æšk¸ÿþû)(ˆzà ¡¥¦¦ÒªU«`{ Ýéñx…ºŽ1æCàŸ±ôå?ÿùëÖ­‹å¶¼©f;€ÀÁJp€ÛL¶+"2«ân™™™<üðômÛÖ‘9å”SØwß}Ãiz¥ˆtw¤SJ)ÛcÞÁ¹Ýí5<cÆŒáûï¿wûqâ¦f¯¡æÍ›ûŽh§ÿ 5äu#1䯔——óàƒº¾oP‚Lõ:ú裧2¾u*( 1+"ÒkNy}n¾ùf ÄÛ÷ ))Üxãá4Íîw¬cJ)Ûc¦c%Þþí5rss¹å–[¸å–[ÈÍÍuû‘âBDhÚ´)íÛ·'++«ö¡ýÛCoŒ)ÎvFÛ‡yóæñÑG¹ú$XIùÇ?þÑø9Àq VÂS°""©À{Xûðì6fÌN>ùdÇfÿý÷ç˜cŽ §éy"ÒÕñ*¥bæÝ„oðPíu¾ÿþ{N?ýôz¹ÇP””Z´hA›6mjO‰Üåñx†:×ó;pQ,÷á…ؼ9âè¶IOOgµ”zc­’õç·;— bYy 8²ö àÚk¯umûµ×^NbU*ZwE©¤eŒ©4ÆÜ…µ‹ûÆh¯SXXÈ<Àå—_Ί+Ü~¬¸ÉÈÈ mÛ¶dgg“’’R32±Ó»ÙdÔÂóðÃQåFÛ&Am{8o¥ˆìãv]ÔÁŠˆœ…5¯¹[Ó¦M¹ýöÛiܸq”W]‡¸à‚ Âiz™ˆ¸×Q¥TÌŒ1ÿamëµ¹sçrÞyç1nܸD©|Mš4©Ù q°ˆ„»Øàvb˜v›6m_~ù¥kÏœ SA½.t¨SA!D¬ˆH/ Î^;ÿøÇ?¢Ìõ…^H»v!W(·ÂZ] ”JbÆ˜íÆ˜¬ÕˆQ­k™ógŸ}Æ©§žÊ[o½U/+à‚55”M›6mî:uê…¡Úc*€3¨|ž|òIׂÀ©fÛÛ»Ëõ7Žk°BÄÁŠwÓ«ÿâ³1ÓQGÅqÇ—›ˆ5jÔ(Ü µc×-¥TÌŒ1ÏñvŽZQQÏ=÷gžy&?þø£Û7ééé’••õß9sæ¼3gΜŽÁÚzó„ÎÅÚÏ&b<þøã®³Ï>›'žx¢Þ”š çÌ™pI¥1æ?DYMàÑG¥°°Ðñ‡K€‘€½1Û@êTPa+ÞeÊoâ³…øÙgŸ-ƒN”J{8üðÃéÑ£G¨f‘zý#“R ‘1æ=¬º"1×Ù¯ªªâý÷ßç”SNáƒ> º:êÓ‰®/ðõœ9s>™3gNm§¿}ûvžyæÇ*AªÙööþ7Ðf V‚ˆddå6¬bL»uïÞ=÷¬³Î¢yóÄÜÌXDÂY”üÝí¾*¥ìç­2xˆ¹œjMîÅYgUo÷ò:X6gΜûæÌ™³ÇªIo¢è¥@TÓç'NdæÌ™Ž?P¬ ª V½7 V‚+gED³°Ê5×|VþÒK/¥÷ë×OÜ\ªJEE'Ÿ|2[·Û¥›| ‹1f—ÛýUJŇˆ¼Ø6g=jÔ(®¿þú„Ë׳Ùà†!C†ì±ûµˆd?amÔ‘N:ñþûï;Z梢¢‚mÛ¶9v??ÞÌÉɹHD²°*ûõT-¼›w*Ꭼ¼„Ï‹=üð×wéÒ%¡°*žsÎ9¡še!—ð)¥’—1æ;` `[ øü‘3Î8ƒÇ{Ìíã©ðÉœ9s¾ž3gNßš1ùÀ À†H/¸qãF^|ñEG"ªÙö0ÆsüOÃZͦü¬ˆÈiø¼ÀÔÔÔW]uÕ¾Mš4 uzB=z4Íš5 Õì’‹ñ•RñcŒÙfŒœ ¬·ãš|øá‡œ|òÉ<ýôÓõ¹¨Ü1X ¸OÔL y—4Ÿ@‰Ìï¿ÿ> .tô\N´í]ë×S´áfYÐ`EDÒ€G|??çœsæ7nÜ8=Y‚•¬¬,ÆŒªYà0·ûª”Š?cÌD`?¬%ζdË–——3aÂN:é$^xáòóóÝ~ÌxHnî¨ùÀ³8À» ûU]]Í]wÝåèê —óVÚz<žlï¯+!÷lj¨B¬\ÎžÑ "ò¿1cÆœ•••UÃvÖYg‘‘‘ªÙùn÷S)å cL¡1æZà`À¶ñKKKyóÍ7ÉÉÉᥗ^b×®z™ w}íBrƘo °ò.¶qãFî¿ÿ~Ç:ÕlkŠÃýŒÿ„ïˆóŠ€ÁŠˆ4îñù¸òŠ+®xhÙ´iS·û‘V­ZqÒI'…jvºî¤TÃbŒ™ ÁÚ§Ä®ëóꫯ’““Ã믿Nqq±Ûj§&À½µ?ð.?(äBS¦La„ Žt:ªÙÖä­ìüU,í-" Q&ÑY¹hïóÙK'œpÂÐF¹¨•0m›cÍe+¥ï.΀ïì¼vaa!/¾ø"'tãǧ´´Ôíǵ˥sæÌéSûçÀ)@DùüóϳdÉG:ÁŠ—¿© T¬Z7ʇß`ED2€k|>®lÞ¼ùÓÀ)É6ªR£[·n <8T3 Rª2Ƭ2Ƶ:p»×Þ¹s'Ï?ÿ<'Ÿ|2ï½÷åå @$"¿9ƘIÀ‰@ØKp+++¹í¶Û©ìrÞJ¯Z¿”·¢SA~Y9hëóÙ»o¿ývÏŒŒŒ6aä~$¬“O9prŒˆ„ܲY)UcÆûbÕe±Unn.O>ù$§œr ü1••¥y$šSçÌ™s°ï‡ÞýÖŽ%‚UB›6mr$Ååj¶µ òh°@ÁÊ>ßà àôdYÈQGEˆgHÃÚSD)Õ€c¶c.ÀZ²»Úîëoݺ•Gy„Ñ£GóÁPRb[ºŒÓîô÷¡1ægàH ìµÜ?üðƒ#ù+.Ž®t©ù…wÙ÷Z?m4Xñ£N°""½Ã}>ž4qâÄ%)))£ dqL5jıǪ™N)¥€Ý+]úáj—plܸ‘ÇœO<‘_|‘ÜÜ\·9RÇÕ^T›1f6ð`k¸{þùç™3gN¸Í£ââ¿c}¾÷7º¢ÁŠþFV.|×v=ŒÌÌÌl—LË• c*hˆˆôs»ŸJ©Ä`Œ)1ÆÜ %ðð}L xýõ×ùë_ÿÊ<ÀêÕ¶æÄK*A~ÀóÖa9 ØÎÅ*++¹ùæ›Y·n]Ü:œžžNJJ$[ãÙ¦±Çãi]ë{¿—º{WãªZüýß:Ñçû?€€Ó½´~¸öÛo?zõêª™Ž®(¥ö`ŒY`Œä‹âqŠŠ &NœÈ™gžÉµ×^ëʦQ¸(ØAcÌr¬ê¬óùXAA×]w]\ ë%È芿`EýaÙÇÁŠˆt¢n½O&Nœˆˆœæò’/[…1ºr®–ßWJùcŒùØ«ÚÚØ®ðL›6«¯¾šsÎ9‡I“&QUUåö£²ïœ9s‚îkcŒY‹°¼Îׯ_ÏM7ÝDEED…qÖy+Àrü¯:Û×­Î%*ß‘ÉûfffvJÔ»«««©¬¬¤¬¬Œ’’ŠŠŠ(--¥¼¼œÊÊJüí,}â‰'†ÊïJÝÜ¥”ÀSmŒy «*éXl^ê\ÛŠ+¸ûî»ÉÉÉá­·Þ¢¨(!7æ=3TïtÚyÀ „‘ÿ3oÞ<|ðÁ¸tÖÅj¶µ“l 0ÍOÛv¯/|ƒ•£}¾ßеø‰0TUUEqq1yyylß¾­[·²iÓ&6oÞÌÖ­[ÉÍÍ%//üü|vìØ±G›M›6±uëV¶oßÎÎ;iҤɯ‡vX¨=At*H)”1¦ÜóÐxˆ[}ý­[·òÜsÏq 'ðÌ3ϰeË·¿¶Aá64Æ<ƒµÊ*äVÕ_~ù%¯¾úªí‘p¶`‰‡.>ßû›çkÎ…ß`åŸï'cªEd¸CfÆÊÊÊ(((`ëÖ­lÙ²…;wRRRtÔ$е*++)//§¸¸˜­[·þºhÑ¢Ñ!NÓòûJ©°x÷º«ð×?‰pc¿HñÎ;ïpÒI'qçw2wî\·¬!ÃfŒùVÂrÈ¥?ÿùÏøúë¯mï°KSA¾ÁÊl?m4Xñ±;X‘Î@7Ÿã35jt„SÃeÆŠŠŠÈÍÍeóæÍäææ²k×®xN:hË–- XÊy3´ü¾R*Ƙ­Æ˜`•MŸ€ÿ ëlQUUÅ×_Íå—_ÎèÑ£?~<;v„]ÖÄníæÌ™Ó&Âwµ ŒÑŽ{)S¦ØÚáV´0©Ú#+#üŸéñx2233C.‰UUUùùùlÞ¼™üü|ÊÊÊÂ5‰Rû‰'vÞÑN§‚”R3Ƭ6Æœ &Åû~ëÖ­ãùçŸçøã禛nâ§Ÿ~¢º:ÔL·íúDz‚1¦Ôs!p-AòXªªª¸ýöÛùé§Ÿlë¬KÕl÷VŒ1¹ÀŸ6:²â£v°â;T ÌdffÆm×Âòòròòòزe EEEñP|„¬û}Œˆèo¥TT¼ËOÀJØŸïûUUU1eÊÆŽË_ÿúWþýï³qcX%Nìõ°Ž1æ`A¦…***¸å–[øå—_lë° £+]ü|6Ëç{YñldåwcLiffæ±ñØa¹¤¤„íÛ·³}ûv7ËL÷.§›¤–ßWJÅÌóƒ1æ`¬½×f8qÏ­[·òÚk¯qòÉ'sõÕWóÍ7ßÄsÅJ`eŒïhÖ‘7ÅþÚ”——sã7ÚVÆ…’Í<OsŸÏ|§‚Úˆˆ+UëU €7‰tŸc¿¤§§á5ƒ*))aË–-äåå%®£yÿûZˆv:¤”²…1æ3cÌpà`à}âPÂßÏ=™9s&wÜqÇ\]iéóýê&bÇm5Y2ª Vü%Eýæñx𤧧·ŠåÕÕÕìܹ“mÛ¶%ÂHНL`cLðvˆ¶:º¢”²1f½1æV¬\†«_º÷¢E‹xôÑG9þøãùÛßþÆ„ Ø´iS4—ú ˆKõ6cÌ;X]ë¬*..fìØ±|øá‡Q]»ªªŠ¼¼<7Ršù{N¡•c ^“E°`eEZZÚˆôôô¨Ö,cصk[¶l¡¸¸8šK8%Ü© suQ)/ƘbcÌ¿±þa>øÆ©{WWW3þ|ž~úirrr8ÿüóyýõ×Y»6¬Š¿ 2¤4Žï&×»bèh¼£þµûþØcñä“OF²ú©¢´´tÆÖ­[ÝÊ™lîç³ÚI¶QEŒõYБ•FÉÅj”––²mÛ6 œ^Ýá°{gÐYAÚiù}¥TÜË$c̱XSô¯Žþ‹ºlÙ2^|ñEN;í4Î8ã ^zé%V¬Xá¯éd`À!C~tèÝ|‡µÉßyÀÒÚÇÞ{ï=.¾øâ »víZøÆÏ~þ Ú±cÇ….þûÔÌÏgµóV4Xñ!ÆDd>{–J®2¦Nú}ãÆ ÷b5S>¥¥q °ãaUNNÎÞ"rðR¶ÿ5Æ\ìv‡•R ‹ˆ´®®:¹ÕÎ;3jÔ¨’<ð—‘#G¾zà¾ëâ;`4p{.YضmÛS'MšÔ苆 ²Þ÷çgü׋·±999Ïù<Ï¡@MÐ÷‰1æ4ú•°Äûµ ȪõùFcLçéÓ§ÿ‘žžÞ9œ •––²sçN7ŠÙ¡mNNÎvilmQ´7Ƹ¶ÖZ)Õp‰H:0¸«&‰›6b­ÖùøÑcûò¢ÞË_±‚–šiý|àcÌëÁÎóx<—/»Ðå»srrÆùŸ¿2{öìY3ÆPXXÈ®]qÛ Ýißåää "ÙÀVOmu*H)•ˆ¼›ÒŽÆ \eÏJånÚ‰•à:X޵Üyµ1&nIŽ"’‰µ²êb¬Î5Æüè=–ŒjÚ´é9ÅÅÅÇUWW‡•ò«¬¬,úöí»jîܹ~¨@‰H¶w³ò!ÀsXHÕöÀ¬Y³ö‘s|O¨¨¨ ///» »)h™““cDÄü5HûSŒ1Ÿ»Ýi¥” Æ»¯Ù)X#‡cýƒH °«ÆÈJ¬¦æ¿«£ù¡PDšc­Úh‚µÔù;ﳟ€•ë³VbmLuÄl°x kñÆ*—û’ÐÒ€l?Ÿo.ôý°¨¨(Y–#G*kž°f)ÜVN4XQJ%4cÌà?À¼+ŠNÆ \Ž$ð豓èæý:·ûÞ<˜U@™·mJ­ÿ¦øù¬3Vq½ïÇ1߈H*V ò«Ew¬Äà;DäCàao å# hìûaÏž=K¼s €5í³sçN77tÂAü¬|Žõ‡#P æI3ÆÔ«á%¥TýeŒÉ^^÷NwŸˆõ÷!X?¬¹‘çŒ`]Âl¿xx×3@DZb-ù¾k1I¢JÎÎðŽì3ÆÌŠñšõJ ~‚•SN9e÷oŽÊÊJ¶mÛVßð‡0Æ`-¯V@Øõg”R*‘cò1Œ1—cöÚ'aíQ4 ÿEÕÁJH½ègŒécŒ¹Õ3_Dz‰È XSLØJm‚õÿa¦ˆ| "®ÕÔI4iøY²Õ¯_¿`í¼sçÎú8íãÏpŸï?ÀúMÈh¬êJ)•Ô¼£.ï"Òk9ô`¬üŽš¯–ÑÞÃX£ßs™€Ç³¡v9¸kª>Q‹£58NDîþeŒIúe·±¬ìì=*øM˜0aUçηçççÝe“R““S "Ͱvú 4´èbH$§”RÞŸôk/{í½_­±'@¨¶ë€yXÁÉ\`‘wÓYß>¥`'7b-Û®æ—cæ¸Ý·øY™1cÆ=GyäynwÎa©ÀÀcL¡ˆ|…•æO'¬<—énw\)¥œ`ŒÙˆõƒÚ·¾Ç¼I¬mù3xi4åÏdXß/ÁZ‰¹ «\Ä6ïW^8?z+¾^ \ôtûÝÄÙÀÏ"r¥1æ¿nwÆ ~lŸ{î¹ùGyäßÜîœ Â¬x}@à`¬h^ƒ¥Tƒç¦ØìýŠ鈵ªçJÜ–rZ&ð†ˆìÜØÐ¦…ü&ØbE¼™^«>ðÍ[ñÁ êv‡•Rª!‘"ò°¸†¨Ôv𕈸]#ÆQ)ø™¢á+{äèc IAÚ÷‘þnwZ)¥ê+9ZD¾‘õaÜvÖŠ¡ýÜîˆS¬@Ãü ÑÑãñtóùìƒçèèŠRJÙHD2DäBY|ãvŸP/à99æ+%ªËw*è X‘™ÑnwX)¥êi)"·¿ÿºÝ§× øTDî‘D+êg«üÿæÈ Ôš òn‚µ?Öº@ö‘nwZ)¥’•ˆô‘çù³ˆ›C ŸïzWdÕKiX»7òóð®¬S\\LZZiii¤§§“––Fjª½ÿ?Œ1°sçNÖ®]{üI'TŒÂZÊÜ(ŒKœ <ãöûRJ©d""Ãù³ˆ›+ÿÐŽÀÚn 0X »ýb¢s&P\îvGâ¡&XiíçsWFV&OžÌ‡~Hnn.eee~ÛˆÈîÀ¥&ˆIMM%%%e÷—ˆ’’Bjjêî_×þ  °°üü|ßÍ÷Å*߉Ñh°¢”R!y‹¸‚¤ŒˆíjÑé\€•­ÛÇçX5Ö&Có}¾¶¸ÑÑÈ]&"ëŒ1ãÜîˆÝj‚_­pad¥´´”çž{.d;c ååå”—'Ìö#D¤½w‡S¥”R>D$‹?‹¸õrúþ™Xû§\Œ•­h'èëý:«Öç[°‚–yXKD§bmN”€ô,ãÝîˆRð¬´Á…`%3Óõ™§h•`í¡¡”Rªé "aå£ü‡•!Þ›nÄZÚy<ÑÍ7µŽn~ð>ÌSX¹ èU9ÊíNØ) Øåû¡ˆ´ÒîLÍôNEE…Ûï%”J¬Ý>¿ó~ýbŒIøN+¥”S¼5¨nÎÅá´‚¶ÀyX£(âtÎÞ‡»X¼¼,ròAK>‘QƘnwÆ~§ÒÒÒÚ¹Õ¡ŒŒŒD V6`Ma®~–?c Üî˜RJ%ïOô7Ç9yß4à¬åDœýi»p‡÷k VÐò°ÒÉPWsàKnŒYïnWbç7X7ƒ•ꢢ¢xmím°²¥wx¿òjýÚ÷k°ÂSÝ­”Rªa‘tàl¬†ANÞ»?V€ràÚ?\µì‡µŽøAà{àn`š{ÝéL‘‘Ƙv_Ü»TºVŠOO¬Ý²W«1Ûì¼—ß`¥ªªª…í¯,L)))e®ª VÀ± ØæWí€$¯¡mþ¤”Rñ""-€+€kq°6JK¬Èèb`¨Û/!ˆ#¼_“€»€¹îtc?¬ÂqÇcb^•""Ck°Òuö&@~«ˆb .}¼kð(Xi TàBÞŠ1fuƒ•éÀ‡Xÿ¯çcòî—RJ)‹ˆìŒ.š:qϬU<a­{N¦åÇ{¿>ÁzZë|ÀÊŽX­åæ×#Ã<­Ö“ÁÀý"ò!ð¢1&ª¦`«vEx-[TVVîôù¨8Ôó´1fŠ*J)å9HD>~ÃM‰{ ²ð0Ö¼ü$¬ÊgɨÔ6+÷oîÜþ&9 Ò“Dät¬’ ?Pñ••hý³ˆÌóŽÎD$X°R·WDii韊1•nôE)¥:I‘SDä'¬Qî1ĹÚl3àRà'¬U ·c­¾©š¯_âøž©Àë"’Ncïÿ÷G°f5ö²±ûÓDäÆHö3Jrý|ÞwFV6•——ûæ”h ¢”R‘,¹+^ø8$®÷þ¼ l^÷ ]v<ÖÊ¡Sœ½í àÖP¼¹H_å´QÒ'/D¤m8'¤`ÕÊñ•UZZêÆ*˜YÔ͓фX¥”rˆˆ´‘±f^þ…•D7]€{±j•|U?Ëí—àXs+×9{Û»Edß@½ÇfbÅSñv°@DÕ0 «ŽH7n¬èÙ³§}ÝÃ,àtŸÏtdE)¥âLDöãÏ"nqO 9kIÉI¸´ƒa‚HžÅZÿ{#ÖÞDq–‰UáöPcÌ·‘ŽX1c‡çVa2˰f´š{¿úb-ÒŠFG¬åÕGK¾ 4²ÂÚµkÞK²ÑLtdE)¥#"GŠÈ—X¹Ÿ—Ç@%++w9Véo×¶ZN@c±’C9s»ÀßkàÍeyÿJpÐÖ3Âs©1æ cÌqƘ@wïñhÀ4>‘€£x)XÓƒu‚¹uëÖ¹ñ{h6uË2ëÈŠRJÙHDÒEä|™‡7•6ƒ€ÿ` ã?GÝŽ•e4ðŽp‹HZß?ŒòÓn °1æAcLž¿ c 1b%â>Ft{<¶Áaiãï`Š·HZÝ‚7nÜèôê°U999;¨;²¢ÁŠRJÙ@DZˆÈ-ÀïÀx¬•q‘œƒµ¢g>p9ÐÄíN^tæVM€—DäTà&?mª€KŒ1ù 1&ÏspU”}Úk„¥ÎSMYû:y+[·nu:Çi–÷¿¾#+: ¤”R1‘"ò,ÖfÁÇ•À]š-–ß¡~¯è‰—˱örÀÑÞdêÿ8þŒ1ff¤5Æü‡èó†Gã}—5×+u¢¦;v4 çªÛ·og×.[V9×+:²¢”R6‘a"ò>VQ¯ëˆS7Ž>ò¹ƒÄا'™=„µß‘îÂJ’õµ+%*Ƙç;£<} Ö¬ØnGV ÃÊìMKKcæÌˆ/tdE)¥bä-æu²ˆLfg§4ˆX‰¡Ëo€“ãu£ê5` {·¿ÊSã5Gyî8ïF‰@‘•ÊÊÊÌüüЉ½™™™L›óž’Uü¹Ç“o®ŒŽ¬(¥T"ÒXD®ÂŠ>#úÒè!íU…uð VI|e¿ ¬"yŽoÒgU°ÿ>Ö‹x—FG;£Õ8¿æ›€#+›7oyµÌÌLæÍ›GIILØÒœœœš"tI»HD‰È¸hö_PJ©hx‹¸=€•&ò"Ð;÷©ÙÜe0k›†R¼ÍMûcÍÓ8lºo –hc<ÀÏQž~_ÍèJÀ‘/XII±.1kÖ¬mƒ˜Ör:ê.ŸKŠi 9 k¸ëNàMɈñ’J)ˆô‘W±6ñ½k›ÛuÇÚHðàmà`·¼ºpø'àhƒ‹@îò¼îÀ`ÃÈ Ø2Téø[.ð#+"r6ðÐËûQà>·û¥”ªDäù?¬Ž.%EÜ8øXµ‘`X¸¨¸HÚrð'à˜s;|üDôgßÁÊz-6mÚÖ0Pff&sæÌ¡¬¬,Ú™Ws)?ÇzdEDÎÞ¢n^Ù-"2Ìíþ)¥’Ÿ·ˆÛ¹"2˜Œµ§ŠíEÜZbÕÛ_õÓ×Iüù„rWà çngëFÆÞDÝ¥Qž>ZD2S¼ÊÇOa¸uëÖU„s¥¦M›RVVÆÜ¹sÃiî««Ì3øVÂêƒDd8V) ð©Àý·QJ©pˆH¶ˆÜŒ5Àñ608÷9kåÉà)â¼s¡ŠÚí@cgngGy^6pXí y…o‹µkצWW‡\iÑ¢?ÿÕ4×o999ÅÞ_û VÊí{Wöñæ×¼‚5BȾİN])Õ0‰HwykÔûq¬Í‰m•‰µÔb:0kS ‡þ!TQê\éÌ­zÅ~‰:æÇpîàÚÁʯ¾G+**R6lØò*-[Z%YfÍšEEEÄ! jýÚ_°õÜRœÝŠ52Êõ"bû_4J©úGDö‘ À*àz¬mmÕ«øÅXõörû¡UDnÑUXñVbÙmaPÐ``åÊ•!¯’ @II óçÏ´µOHŠ‘éCø«É¡£+J© Dä/"òVþÞÙØ\[M°v*ô`EA·bí§’O;|¶KŽÃ¼³vÚ+†sXµjUÈ«ÔLѬ š_ë×þ’*XñîWð2‘eà_,"Z7I)µ›·Òìi"2«×±vߣÖît¿_Ef냛ˆûÊ îX¥tìK°Ò.äÈJ¤ÁÊìÙ³1&¢Ý¡CM%T°‚õ?pT„ç¤ãÜî¸RÊ}"’)"—Ë€€í¾ÇPàu¬„Ù'ˆÏ˜¾rO[¬À3Îî²yH,¿ Ók+«ñSÓdõêÕ!ƒÚÁJ~~>Ë—/·999µ Ò%t°""m±’Ý¢qºV¶Uªá‘æ"r Ö^/cs•út¬ïf`®ºkZÕOÄÿ€kí¸ˆäÛÈJÚî`ÅSõ‡h%%%lܸ1èUj+3fÌ·¾NôÛk°ö¸ýJ)g‰HyX<†µ¨Ã6m°Êf¯Å*ø¤Å†p$ïèa‰i:HDÏÇØ*ßéK¿SA«W¯zß`%‚Òû›|¾OØ‘ï ¿:ÆË#"ƒÜ~¥Tü‰HoyXƒ•ÓšmçõûcÕNX5Çlk¤^:pVüo“ ¼""·Åp;±¡ÅbeXÁJ¨¼•-Z–ög¹‘õë׳iÓ&Â4Á Ö¨[Њө©©´i2Öu ‘[)å*"bí~|6–쟨¿Åª¤ù7tª§!»Ð¹[=""/‰HçpOðN{^ ÜlÃýõ Vü® µ|955•½öÚs:*Ì© p¦\V¼+€®ÕîøãçüóÏÕìiéö3)¥ì%"LjÈd¬”‘Ó±qáM¬aÝåÀÿG¹ý°*! ú8w»+€5"ò±ˆ鯈4ò®pû«*þëØ³pi¹-Ó@ûì³g®X˜SA¾#+‰ºt9‡¿'²²²8묳8üðÃéÒ%h ¸,¬b‘J©$'"©"r–wÏž¯ñîk—®XýëasF®ªNpöviÀhà;Ù,"+Dd‰ˆÌó.Áß‚µÂí4ìô›V°²k×.¶lÙôJ¾ÁÊÒ¥KÙµ+ä^H¾ÁŠ¿–!ÁöÆP ÆŒCóæÍÎ>ûìPͯ-w T’òþyÖhô»Ø¼gÏÁÀûXK4oÆÚ`P)\ekôúûc-Áo‡û¬1ÆÌÞãLcÌf`§¿Ö¡¦‚|ƒ•ªª*fϹoQ¡Ï÷%~Ú8PY809uUÚ¶mKNNÎîïGŽI÷î݃ÒÇb¥T¬D¤¥ˆÔ,¾y7|KÃJ˜œLÎ øÆcJõ“Ý¥fÌGàNu¾¿Ö¡’l;uêDÓ¦M÷ølæÌ™¡:á»ï…¿`¥½{ïcTå¼óÎ##ãÏ,áœsÎ uš&Ú*•$D¤³ˆ<…µüxVÕs[´ÂÚïåw¬!]z¬"Ñîv'â§ ï²ç°ƒ•Py+"BïÞ½÷ølîܹTUU;ÍwÈÈ_°ÒÁ­·$"ݱåêÕ«‡~xχN×®]ƒzL$™ÕJ)ç‰È¾"ò:V,qÖ¿ ¶Øx +åâ°­²j0êqÂõ+Ƙõà?X™çïŒpÊîûN3oÞ¼`§$úÈÊXBl(vñÅc-Ú“ˆp Agzãâ³)¥‘ƒEä3` V1X[FÚk IÞ _Ëóܪ^¨§ÁJ!ðpÍ7a+ùùùlß¾=è•}ƒ€ï¿ÿ>Ø)¾#+¥~Ú¸2²""ÙÀ¥ÁÚ :”<þ—¿ü…F‚&DŸéƳ)¥êˉ"ò#VÚÈÉXñEÌc&K€¯€ã캰RXS‡¶ ù%Ž+Œ1»áø V–`N¨ÑÁÊÌ™3)..tJ8#+]ÅßÐ…/ÊOÿvKIIᢋ. z¬¬,¿SDµ ‘.<›RÊKDÒDä<`!ðp¨]×îŒõ£áz¬)Ÿ}Ý~XU/¥Ü^1Ƽ[ûƒ:ÁŠ1¦XìïìPÁJvv6íÛï9kS^^ÎÔ©SÒÂçûâmöwò-‰H:!6p:úè£éÖ­[Èk…˜ +é_)å0É‘kUXÛêô·ëÚ°]nZ»ý°ªÞëçvìó)~þý TëÃïTP¨åËàteÊ”)šûn¾¨öÓî§Þ’×™X?ùÕ¨Q£pVûУGúöí¬‰Û;(¥jˆHk¹keÏs@èŸ:Š•„ö308›z¿¤T%z¬<œfŒ©“Q°M’-Xâ•ÛÏãñìŠñvp½ŸvG;ü‚.W>õÔSiÙ2ü2MÇw\°ÃƒE¤w¸×RJEGDº‹ÈóXAʽØ4àÑ«pÛjà`„Ûª¤ýÜî@l*€K1·cŒ¿‚•ùþ>ÌËË#///èý+Æþ÷¿ÿ:Å·<µ¿*º#½»LjŒ!È´SË–-9õÔS#ºæ°aÃHM º¨H§‚”Š "o+`Óœ}€`ý8hËðŒRQJâ‘•<àcÌëÁ Và:&äèJ¯^½üþÃ$XñÝÉßfŠ™@dBD$#33óÙ`mÎ=÷ÜP+|êhÚ´)ûî4µÎéi.¥ê=%"ÿ‡•8{6„=+ w9p Ö&ƒJ¹­+AV„$®‰À0cÌ”P ý+Ƙ"à7ÇB+ì½÷Þu>ß´iË—/÷wŠo°âw"¬-ªãºz·nÝî/++ëèxß¾}9ê¨èV´´.åAñ~6¥ïòãSDäàlÚÖ¢VƒEÀwÀ‰èÒc•x’dtÅ_b)'cB'Ã| óùþ> 'oå ƒòûy€Ñ•§öþ+ð¯a”¾Öõ×_?077÷–@Ç7nÌ 7Ü@JJtûxàÁgR¯+&+_"’!"K±VØòç©#ð V’˫ظ\H©8p`iü»XIé‹#<¯˜\t5ÆœhŒ™É‚ýËõŠ @ÁÊÔ©S©¨¨ðwè¢Z¿4²p»ˆtŒð%…äñxÚýúë¯SŠŠŠ¾Ë/¿œ¢¯O×¹sg:wZ]ÿ0»ŸK©úNDš‰ÈXù­¯}c¼$ã5À]@[·T©08°Ë&cÌXc̬êò'a͆>‚µüÿ#ï_žÁªW6hnŒ9Øó¬1fC476‡ë7XÙ¾};Û·o§M›6OìÚµ+;wfÆ=û´k×.f͚ňuòå¯÷x~.ÝxADÎ0ÆTcÇÓü?þ˜üÝwß\Þ3bÄŽ<òÈH.ë×XçÔ¢ÁŠRa‘ÖXµþ„¿4/ˆT¬’µc±±*œRr Ü{÷š_c¶§ž-ØÈÊ,¬¹¥:.\òÂFW&Mšäïã¦XÖäÒ§¼…ÛbâñxÇß?Àˆ­Zµâšk®‰õV@ȼ•ƒE$#Ük)Õ‰HGyX ܃ Js¬±é߀Ñ@E%/6Òëû%¢0X1ÆäameQG8ÁÊðáþ§Œ,X(ïåjÇS³ñèÛ”¼Î>‘ÌhÜãñ¤ïòÉ'‡MŸ>Ýoáú믧Y3{r¬ûõëGÓ¦wphÁå”j0Dd/ù7VQرaN/¬É÷?€§½Ü~H¥bääÈŠÓBe‹ú­“¿hÑ¢îÓ§OÀÂiŸ|ò‰¿wcÖaeò“üŸˆDü—–Çã൹sçžôæ›olwê©§2hРH/PJJ C† ÖD§‚”ªEDö‘ñX‰÷Wb%£Çä@àCï¯%)—{*å—#+mEĕ£ V¶mÛÆæÍ›ƒž("§=~þùç@ç_âñxzyýVý?˜%"‘®'~zöìÙ<öØc(–Ça‡Æ…^áeC 1¤ÁŠR€ˆ ‘±FwÏ'Æ)‚µ†y V)üÓ ý—ŸRÉÆ`\ªêÏëOÄ2T]]ͧŸ~êïPð¬wäã#`Wϰ/ð­ˆ|*"AGr=O¦ÇãyóóÏ?ûàƒRRRâ·ÝСC;v,ñØìyÈ!ÁªÙް#G©d%"‡ŠÈWÀl`41–3IsV}”ÿCPõ[6ÖEœ¹24X1ƬÇJd«#œ`eРA4nì¿JþäÉ“ÉÏÏ÷wè¯ÀÝÆ˜"««r °LD^‘Ñ"²Çèî¸qãº}þùçK®¿þú ^{íµ€#*ûí··Ýv[¨òøQËÊÊ¢_¿€¥{²¨»¹£Rõžˆ'"Scc½^3¨¾XòI¿oŠRasb*Èç ghu*~"©pòVÒÒÒ2d?ýTw€¦¼¼œÏ?ÿœ .¸Àß©÷y<žùƘ—Eäd¯B™ \ìý*‘ù@zzzzÛ”””ÎeeeAJëÙ³'wß}7ñ]”sÐA{‡ÓâÚ¥€ˆ¤`m£qVi“˜µ‡ª!õ Hiîö*å‚va°OBæ¬@€© ¼¼<Ö¯_òä@SA'N$77×ß!Þöx<ûbíé1'Šgˆƒ+**º„ T:wîÌý÷ßOVVüÿ? <8Øa©Võšˆ¤‰ÈXù(aC ²”¿¬ƒÔ›±–#+Õ9°ãoÂ+SgteèС§TÊËËyçwÚ ø|âĉ8 +/..=ôPžxâ ²³³ãu‹=téÒ%Øfˆ‡ˆˆ-®)•HD$SD®Â*iò&6T›%ÞM3.Âú E©†Ì? ¬,ü„“·’••ÅÀŸsÌ1Œ1‚ôt÷K™„VØé[){‰Hwààl(÷Ð¶Þ •×B§,-4«TXêëÈJ¸ÁÊ\ Ø_'-ZÄÉ'ŸòǬ¬\¹’]»v…Ú‡§fϱÝFŨQÖ@Dnn.«W¯¦¼¼œÊÊJRRRèÖ­]ºt‰[Ý”huïÞÔÔTªªªüî&"iÆÛòs”ŠéÜœKŒ•fZÁªÇ!õ"è‘Xj•J|Œ¬¸òÇ2¬¿XŒ1"2ø‹ï±Å‹S]]MJJð¥ƒ:ˆñão¦œ‘‘ó†­[·¦uëÖN¼·˜¥§§Óµk×@ÓhiX%W»ÝO¥‘ÁX5RFcCõúN0ç%h–û¸ýlJ%+FVJb¿Dä"ù ÆïTPqqq ]”÷еkW:wîðx²vêÕ+èì{Ïp¯£”“DäùkÄ5Ömv*ö‚o§Ã‚ 0D¥bãÀÈJ±Ïs°á-akt%6mÚ¸ñü® ‘·¢y„*¡ˆÈ1"2«Päñ1^®px÷W˜¹Ž>ìÛÞ\©Ì"] ?²2ð›`n°l ³+u»Ý?¥ÄrªˆÌ¾&öeõ›úÁs[à§_áì}à·ŸQ©ú¤,þ·ped%ì ̳KDæC}-[¶ŒªªªI¬}úô¡eË–äååÕ9Öƒ•½öÚ  T«FGV”kD$8+q¶_Œ—X6Þþ6†kÑ:nJÅE} V"kö;TZZʯ¿þòd 8ºb”¡^ÊÊÊ¢C‡7¼¢\ç-‰°x‹Ø•Ÿ„Kªàçùpc8 T”Š›Òøß"á§ À¦†Þ>A999uj©4mÚ”aÃf=Ê AšŽ¬(LjH¹kÚKÄ,WŸŽ„ Ì™ ÿN¿áÈtºR ›Ž¬X+áæ­téÒ…ÃÛsÚû¯ýkBjsCAÍE¤á-‘RŽ‘"r7VIü§€N1\®xùhf`ÙTø¸G(¨©Ih׺uƒ}ö¬_g¹R·,!8¬ºñ\ý¤cŒÙ*"¿}|-_¾œòòr22B¯ò¾úê«Ùºu+K—.eèСœyæ™n<{BèÒ¥K°Ã½°‰¤R±‘vÀ ÀUXÅc±ø÷)ðê§pðÐÂígTõPFtê]ºX_̓üÖ-,„Y³`åJ·{í(¦6¸ñ\Ñ Ëþ„Ÿ`¥¢¢‚åË—Ýa¹F£FxôÑGÉËË£eË–n;wîdÅŠôéÓ'ò«6P!VEé’)U‡ˆ Ç RŽ‹ñRk€Ç×1eˆôA䬄\ý‰CÙ+5ÕÊM4Üü¶M8öXøúëäXD¬œo€R32´xÛ6F¿û.¿•Å}ÁrðcÌn½‚¨‚cLµˆ| œëïøŒ34X‰@ˆåËõh¼RÅJDF`)ÇÄx©_G€wŒ1•ˆtGä^¬z)©±]Z)?j–"'JÉŠ.];`iÔ:v„®]¡{wh¼gµ÷fÎäo Ä{Ú¬„ú³Œ1¡7Œ£X²™& X™9s&\p›Ï•TB+Ùn÷O¹ODÁ RŽŽñR €‡€1Õˆt@äNàr a¢PÎJ”Ѻt“O†„íÛÝíKV–œÔ|ê¶äærý×_óî®]NôêàfcŒµæ‚‹%Xùkò:IºëÖ­cóæÍÁvVµèÈŠ DDÅ RŽŒñR¿cþÏ{áVˆÜ‚U ®án¤¢â«];+7¥E ·{X›6V’ïÂ…0w.TV:sߦM­‚u:Xÿ ‘ô[]]ÍËßÏí«W³3þ½Ë.1ÆLtæe„u°bŒÙ."³€ƒüŸ5k99±,Jh8Bä¬h°Ò‰ÈaXAÊ_b¼Ô÷XAÊ÷Þ 7Æ7¢£v*^RSaèP80ñFSüIIý÷‡}÷…5k`Õ*ظўr©©ml-ZX#&íÛ[ÁJ˜¬XÁ?ýÄ g©€s1®ìH¬‹Ú' X™1c†+a ¬è?( ˆˆÜÓ…à ¬ eº÷€«±ªÙ¶‰áºJ— £)dfBŸ>ÖWi)üñX_……ÖWQcÕ„ñýJO·ö$ª JZ´°FL¢ ØŠŠŠ¸wÒ$žÛ±”*à`œ1&áÊüƬ|‰õkK–,¡¨¨ˆ&Mš¸ýŒ /##ƒÌÌ̲²²25Utd¥‘#°FRFÅp™jà#àacÌï…ÓK€»În?§ªÇ’m4%”F¬Òÿ¾Œqäù&N›Æ?–,a]ühÁªŸrŽ1様¯'±+s€m@[ßUUUÌ™3‡Q£bù»·áÈÊÊ*Õ`¥á‘£°‚”‘1\¦xxijÂ{á¬øûÐJÈ*Þ’y4%RqTÖoØÀµ“'ó™3»DWÿî4Æä;qÃhŬÔZÂ|ž¿ã3fÌÐ`%L©©©†ÝŸØTICDŽÁ RFÄp™RàuàqcÌÚZ <ôsû9U=—š híéSFS\TUQÁsß|ý6àÈ:k÷ô+Œ1³Ü~öpر×VæÌ™CUU©©Z¶!”””GÆú”»DäX¬ åà.³ x xʳ¹ÖÅÆCÝ~NÕ´ooÕMi£)qöó¼yü}Îæ;³#t!¨=ä4ÉIDATÖ´ð?ÝÚA9v+ß` sqq1‹/fРAn?gÂÓ`¥~‘㱂”ƒb¸LV݃çŒ1;j]|$VíÆTñ§£)¶ùmýzn›2…OJJœºåÇÀu‰¶Ò'1+Ƙ\™ ÷w|æÌ™¬„!H°¢AL‘±6ŒeÀ­ÀÓÀ‹Æ˜ÂZ?+H‰µä¾RáÑÑ[l/(àþo¿å?¹¹T8sË5Àßw×YJBÑîºìkR 3gÎtû“BJJJ ñ? V’ˆüÕ[‡è ¢TÖ×=Œ1íTDöEä#¬–5PQñ—–ÇÃI'i ƒ’Š ùö[z½÷ÿt&P©öKæ@ì™+oå~¶lÙÂÚµkéÞ½»ÛÏšÐRSSud¥‘“°¦{ˆá2+G·Œ1åµ.¾Öêžó°ï ¥‚ëØF² ›©¨TÃÛsæp×üù¬w&/àgàJcÌb·Ÿßv+s°†ªÛù;8sæL VB V’”ˆp2ÖtÏà.µksÁ÷÷H|éÜü HwûyUѸ1tì³Û=Ijß­ZÅÍ?ýÄüøïŒ\cp ÖNêõæß[‚cŒñ.a>ßßñ3f0fÌ·Ÿ5¡éÈJòñ)§b)±$fÍ>ßã/‘ÖÀmÀ5@ãè.­T„D¬²óhUtUQYœ›ËÍß}ÇWùŽ–/y¸Éãò®Œö³kd¬© ¿ÁÊo¿ýF^^^¨²ò š&Ø&o2+HÃ¥~Ä*‰ÿÏ š7x¿š¹ý¼ªiÓF޴м©¨l,.æž)Sxã?p°fý2àjcÌ·Ÿ?^ì V¾ÁÚ[ NQc ³fÍâ˜cŽqûyV[×·æVor:VÒ?†K}…¤ìYÚZ¤1ðwàV µÛÏ«Œ «Tþ~ûérä(íª¨àñ™3yjéRŠ›}Ù•ÇöocŒCÛE»Ã¶`ųû„Ùo±«™3gj°Di \·ûÖЉUº~ V!¥ý¢¼Œ>Å RæúÜ +å. £ÛÏ«˜^½ààƒ!+Ëíž$¥*cxeñbî›5‹-ÎìŠ Ö/÷còÜ~N°sd¬%Ì~ƒ•ùóçS^^NFF†ÛÏœ‚LíˆèBÊ6Þ å ¬ %ÚÒõUÀ»Xûö,õ¹A*ÖÊžû€n?¯j`²³­)ŸÎº¿e´Ã†ÅR«þÒ`%qxƒ”³°‚”¾Q^¦ø/ð˜1fµï °¦“ˆáúJE'5†Aƒ¬_«ˆÍÞ¶›¦Nå‡íŽæ±.n0Æ|íöó»Áî`e.°hïïàÌ™35X HΊ+k¤ãl¬é˜>Q^¦xxÒoIk‘°öï‰e‰³RÑéÚ9šëfîÑXSXÈÓ¦ñÞÚµN®|ÈŪÝôŸúž—Œ­ÁJ­%Ìø;>kÖ,Œ1Þ,UmåååŠj°gÞ å\àN Ú¢À?g1ÛüÜä0¬Òø‡¸ý¼ªjÒÄÊKéÙÓíž$¥åå<4{6/,YB™sɳÀ¿€J^J0v¬€5ä7XÉËËã·ß~c-2TGAAA ñXM°ù3gä.`ï(/³xkÓºDÄIÑìrå¼”è߆ t­'©òêjþµx1ãfÏf‡sɳ`mÓq£1f…Ûï QÄ#X ¸„¬q¬ÔUTT(óXGVl&öäŒlžÂš-òs“ý°‚”SÜ~^Õ@µo‡ ­Z¹Ý“¤ôþªUÜ1m«Û¬*Ö7c¾uûùíÁŠ1&ODf#üŸ6mçŸ~„W­ÿJKKùù¸Y±•ˆ5mÎȬÁÞ0ÆÔ­#Ò kŸ¬³Ñý{”5‚aà¯ænGcêæÍÜ\—"GaÖ¶mÜõóÏ|³u«“·-žÕäÙØÅ-X1Æ”‰ˆ«2h;wîdÑ¢E 4Èíwຼ¼¼ê+%À:·û–¨D¤p=p#âvÏc•ů»FÑJ¨:«‹RîiÕÊ Rºtq»'IgáŽÜóË/|îì ŸjàMàcÌn¿ƒú"Þ“ Xk*Hƒرc‡¿¡Á¥:¯Y—ˆ4®nÚDq‰b¬ÖcüïB&’ƒ•œ«¿9•{²²¬éž>}4y6BËvîä¾™3ùpÍ'÷ðø?à6cÌb·ßA}ï`å+¬Ÿ`ý®–øå—_¸êª«Hkà byyyþê8ÿèv¿‰ˆ¤cÕ0¹ˆfOûRà?À#Ƙ-nrÖÜòp·ŸW5`ii֎ȃiòl„VpÿìÙ¼³r%Õ±_.3[Œ1?¸ý꫸þI0Æ”ŠÈÀYþŽïÚµ‹¹sç6ø˜óòòüÿSÜîW"‘à¬>Ñç)^ö» ²u“ƒ°‚”#Ý~^Õ€iòlÔÖíÚŃsçòß_uºVÊJàċn¿ƒúΉ°ýC+`Õ\ièÁÊ–-[|ÿfªFGV‘S°¦cúGqzð_`œ1ÆîÈ@ïõOrûYU§É³QÙT\ÌCóæñʲe”W;:–²+Ÿíe¿­•íœV&E@g̘Ayy9‘]µž0ư}ûö¶>/hÈÙã"r4ÖHÇQœ^¼…U¾zu€ôÆÚ¿ç,@“”{4y6*ÛJKylþ|^\²„g ºa•8xÂo‰7qVŒ1%"òX++ê(--eÖ¬YrÈ!n¿ Wlܸ‘ÊÊJßHmŠÛýrƒˆ < ÅéÕÀ»ÀýËW‹tÅZ‚|!ºr“&ÏF%¯¬Œ'.äùE‹ØUYûÃW‰5|_Àœ7WNý…ý!‚°V5Ô`eÕªUþ>žâv¿œ$"ƒ°ö’úk§¬ß_÷c–¸A{ଢn™n?¯jÀ23­ª³hòl +*xfÑ"ž^¸ürÇ÷vý¸Ý£u¯\äÔŸ–/±–ŒúÍ›={6ÅÅÅd5À¤²Õ«ëÌTTÐ@òUDd¬yß3ˆn:æS¬ ea€´nÆ*ß$‚ë*e¯F¬ e¿ý =šË Sqe%/,^Ì ëli|€©X+|¦»ý”CÁŠ1¦XD¾N÷w¼¢¢‚éÓ§sÄG¸ý>çgdåËúž¯""Ý€{°¶cHâÿ‡Upin€4®ÃÚh°…ÛÏ«0 R¢RZUÅ–-ã‘yóØRRâôí—bÕJñ¸ýÔŸœ‡üˆÁ XSA 1Xñ3²ò_·û/"Òkoh§c¾Á Rf¸A&pp;ÐÎíçU XãÆ):ݶŠêj^[¾œq󿱡¨ÈéÛ¯ÆJ¼ÇãhÖ® ÍÉ?E_`•÷»Ë‚ ((( yóh*§'§mÛ¶Q¸ç†ZÛ°F êi5sÑMÇü¸Ûós€¤cÖè² åžÆ­bnýúi*ïNÈÌËg7XUÂà cŒ£Y»*|Žýi2ƉÈWÀ©þŽWUU1mÚ4Ž;î8·ß‰cüŒª¼SŸÖì‹H¬|‘[ˆn:æ'¬ eJ gcý4´·ÛÏ«°¬,+HÙw_ R"Pm ï­ZÅýsæ°"??ö Ff3Öê×u7äÄçôŸª ¬€5Ô‚?ù*o¸Ý';ˆ5sÖ œöQ\bÖtÏ7An’ƒµ‚h ÛÏ«°¬,Ø+HI&ýªa2À§¿ÿÎ=³g³$//æëEh;ðð/cŒã 1*:N+_`íÑÒÈßÁ%K–°cÇZ5*Ž>#+ó®jI"’ŠUÃä^ [—˜ÜkŒ <&rðp°ÛÏ«°&M¬ ¥o_ R"ôëÖq÷ìÙÌÛ¾=ö‹Ef'VA·gµ [òq4X1ÆŠÈ×ÀÉŽóÓO?qÒI £ú¹ÏÈÊcn÷'ZbMÇœµ yŸ(.±+Hù,ÈM†` Ùãöóª¬I<Ø*æ¦AJD¾Û°»gÍbúÖ­Nߺxxª¾¯´¬Ïܘ\ýÁ XSA !XY·n¹¹¹5ßN3ƼïvŸ¢!"'bMÇìÅéK±6(üȘ»‰ôÅJ~; -¯ÜÒ¬™•“Ò·/¤¤¸Ý›¤2uófîž5‹6mrúÖÅÀ¿€Ç1Žã({¹¬x€2,]]±b[¶l¡}ûhR’Çôé»ë `¬Ûý‰”ˆ޵ψ(N_•ûž1ÆÿîcV-–û€ ˆ®‹R±kßÞª6»×^Z?B3·nåîÙ³ùæ?œ¾uð2ÖNë›Ý~ÊŽ+ƘùÈ ÔfêÔ©œ~úé\5ù̘±»TÈ[ƘYn÷'\"2k:æè(N_5UôvÀ:±×bQ*6))г'ôïí´\O¤æçærÏìÙxÖ®uúÖX‹ÆcÖ»ý”½ÜZc÷A‚•É“'×ë`%77—•+W’žž^YQQq»Ûý ‡ˆì…¤œIäÓ1ë°¦Š×1ÉÆª8{=Z_¹!3ÓZÕ³ß~VnŠŠÈÒ¼<î3‡W¯ÆÄ~¹HToÜi]%=·‚•Ïr ÃßÁ 6°téRúõëçÚ‹‰§3f`ŒáÐC:yòän÷'oA·»€¿ùHÇF¬©¢W1þwi ü¸hËÀTbÉζ¦zöÙGk¤DaeA÷ϙÄ•+©6ކ)ø+9ÿW·ßƒŠ/WþdcòEä;à„@m¾ýöÛz¬|õÕWzè¡\{íµãÝîK "’\ ÜMäAD>Öê¦gÖ1Iþæ½~G·ŸW5@:Y%ñ»E³Ê^­Ýµ‹çÎåÍ+¨¬®Žý‚‘ù «Ó"·ßƒr†›?F|H`åçŸæòË/§qãÆ\2ñ-X°€Æ3vìXRRRò§ƒUˤW„§–ceß?dŒÉõÛB$«êì@O·ŸU50©©Ð«—¤4zNvÛX\ÌCsçòêòå”;¤Lªj=Çí÷ œåf°ò9VB”ß­HKKKùñÇ9öØc]ì¢ýfΜÉwÞIºµë ·ûS›ˆŒÀ*š4<ÂS ðÖ_"k‚Üà$¬Ü•n?«j`7¶öëé×ÏúµŠØÖ’?Ÿ/]Ji•ãûüý¸Ë3Íí÷ Ü!ÆÙ9Æ=o.2 X_Ÿ}öáÉ'Ÿt­vËÏϧ¨¨ˆN:ìÈÉÉiívŸDdoàQ¬Z&‘ú¸Õ3?È þ‚•œi¤TlÚµ³’f÷Þ[‹¸EiGYO.XÀó‹STéø>Ó°‚”ÿ¹ý”»ÜÎ&{Ÿ ÁÊŠ+X»v-Ý»ww¹›öÈÎÎ&;;{÷ã¹ÝiµSñUá bV29È bYæ¬Tt5‚Þ½­*³:Õµ‚òržY´ˆ§-¢ ¼<ö FfÖHí$·ßƒJ n+ÿ$ÈRÕo¿ý–¿ýío.w3.–¸ucïFƒ×bm4Ø"ÂÓWcÕAy?HÕÙ}±¦{F»õŒªέ ³=zh•ÙUVòÂâÅ<±`;ÊߌxVâìgn¿•X\ VŒ1»Däc¬*¥~ýïÿ㢋."­þ-)œêô ½{øœ5ÚépÕ6¬²÷/c*Ü ;VÕÙóѪ³Ê M›Z#(}úX¿VQÛUQÁ‹K—òÔÂ…l-q|3â_±6@ýÀ¸™› V"Dÿ%H°RXXÈôéÓ9r¤Ûý´ÛNÞL¬ÝŠŸ†Fxjð Öþ….Þž?«Îf„i¥¢’bžôík¦hü˜”—óÂ’%<³h¹¥¥Nß>tUk¥HŒ`e °– ?éûí·õ-Xù#''çw'n$"}€ÇHw‡¬^î ¸¿†U0îfà:´ê¬Š·V­¬”Þ½­¼“¼²2ž[¼˜ç-b§ó9)ëù³ªuE¬SõŸëÁŠ1ƈÈx¬â`~ÍŸ?Ÿm۶Ѷm[·»k—¸ªˆH[¬)™Ë‰üÿó'À«BŠdñgÕÙ–ñ~Õ€edXuQúôÑ}zl²½´”g-âŸK–¸‘8»kúecŒã 1*y¹¬x½I`ÅÃÿ·wçáUWç¢Ç¿ „"cdžGÔzÚãµõ\íí¶­×kµÚ§§½mϽ=·ÕÚc­OÛk=8BEœ *N¨u­ŠŠ´ˆ% ’@€0„0È;û½¼f‡ìì_²öoï÷ó<<Ôdgí÷· áÍZïz×üùó¹îºë|Ç”Ûk`ç\6p3ð; W‚_¾ø­ˆ,nö³Úuöghû}ë:kÚG×®0x°^&˜—gG޲­¶–ûW¬àÑÕ«}AÞ®ð>,"5¾ç„OJ$+"²Î9·øZ¼×|ðÁ\{íµ¸ôØŸn—•çÜÕh]J¢Å³Àm"òfœ;×wC;nšLÆÈÊÒeøpKP¶¥¦†ÉË—óDQµŸ¤ìAMN‹[ófL+¤D²Òh-$+•••,_¾œ³Ï>ÛwœÉªŒD"EAèœL.IðK+ÐÂØYq‹Ûœûzá>S&½JP† ƒSOµ%`eû÷3iùrfSßñg÷SDdï¹0á—JÉÊËÀƒ@N¼¼ÿþû鬶ªÒØÔíNtk&‘ïôõè7’»Z8ás)º·|¯‰2iÈ”v·aß>îY¶Œ§×¬á`ÇßÝS‹Þ6IDvøž “>R&Y‘}ι׀â½fñâÅìÛ·^½-ÅH)I'+ι.èÈ"ñ×9ÀoDd}œÁÏG“”oúœ$“F²²ôfãáÃ-AiGk«ª¸{Ù2ž+)ñq r=ðpwÜÓƒÆ$!e’•FOÓB²FY°`‘HÄwœÉH*YqÎ]†®Šœžà—~Ü$"Æøtt•æ{¾'Ȥ.]Ž^AI¿¦Ž)£pÏîÌÏç¥uëhèø~jQàIàN)÷=&}¥Úw€2`P¼¼÷Þ{aNVv£ICœsÃÑBµï$ø¥;Ñ“VO4[—âÜ´pöÀz”›¶ëÒåèKPÚÕÊ]»¸3?ŸW7l ÖñIJzÓúqWi PJ}7‘˜sîY´è³Y7ndÍš5Œ5Êw¸m±(‰$´>ëœëÙ8¿º%ð¥QtïøÙÝÌÀÇý9ÖuÖ´Õ¡eØ0ýÝ”v—¿cóó™[ZЇ¾ô‚ÖþID=(`LKRñ;Ë,ZHV@ mCš¬¼ßÚ6ÞãóCà^ïiò.ðk)lfàߢ]gsÖ,Añä³ÊJ&æç3¯¬ÌWs€ÛEd¥ï¹0™Ç¥âQιEÀÅñ>Ÿ““ìY³èÖ-‘…ï¢@n$Ùފ矀žŒJô$Îàf™×Ì 9h‚ò[¿iÙdº.]tkgØ0­E±¥Ã,ª¨à?óóyÓ&o/ÀÀDYê{.LæJÕï8³h!Y©©©aáÂ…|ó›¡:°òîñçÜÉÀ=èÅŽ‰t¿«B/›þ¥{6œëJS×Ù¾'Á„HV–&(C‡Z‚âÁ‡[¶01?Ÿ[¶øxûð*Z8k+)Æ»TýîóÚä¬{¼¼ñÆaKVž÷ ç\7à&4¡Häžû0øƒˆl?fÐNhÑìÀßoB¢[7ML†µN²ž¼»ióóù¤ÂË à`6z¹0ÙÁŒ JJ&+"²×9÷:ðƒx¯)--eÅŠŒ?Þw¸­QÌmîι+©ÀðÇü=м¼™A¿‡CNôx³ÉDÝ»Ã!š äæB';æÃ[eeLÌÏgIe¥·?<Ü#"ë|Ï…1ÇJÉd¥ÑÓ´¬Ì;7,ÉÊ}‘H¤îÈ8=2ü0ð­Ç*n‘W¾ôç¾6t›àûMŠëÙS”aÃओ =îÜ æ”–21?Ÿe;¼4|­Gû¤Ü+"Þ*w9žTNV>6yñ^°téR6mÚD^^^ëGíx›Ñ•àp÷Ù›ÛIì4NZÏ2YDŽJ|pî4I¹Ô÷ÚÖ»·®ž  ýûûŽ&£ÅDxeÃîÌÏç‹]»|„Pƒvœ½OD¼Å“ˆ”MVŽè¹r[ ¯á7Þà¿ø…ïpã©~‰Djœscg>ð Y{ÔG;Ýîù®ï5)ªo_]=2Dÿ·ñªA„Ù%%ܵlE{öøa?º¢;UD¼ì7Ó)ytùppÎZl<ÔµkWžzê©T»/¨ý©eR$Ùâ´·É=À¿‘Ø)ŸJô(òóÇLÌP´pöz¬ë¬9Ö€M+('œà;Dc1ž]»–»—-£dï^!즈ˆ—¥c’‘ÒÉ €sîS࢖^sýõ×óýïßw¨ 7Ž>LŽD"ñ_ü8)qø 𻣺Ïj×Ù?¢G‘³|?¬IÎÁÀM J¾#2Äb<]\Ì=Ë—Sºo_ò&n'úýgºˆxÉ’Œ B’•£`qõéÓ‡™3gÒÅ_ˆàQ´v[cÜÃG€Ip¬UÀ¿‰È§GLB´™Û¯°®³ôÄÎ)§hr2ddgûŽÈ¡®¡™EELZ¾œòêj!lî/¤0$+Ùèå†-VÞtÓM\zi‡×—îG’û5|sÎe· + ‰ü Rƒ6v›""ÑÆ‡ïv½ë:kºtÑÞ'‡š´uµ+RMM4Êã……Ü·b[kj|„° ¸ø‹ˆÔúžc‚’²¶‡ˆHsîq´aZ\sçÎíÈd¥mÆöÇ#»Ò:羆n%ÚßämàßE¤´q ®h}ËïIlûȤ›Î51±›ŒSÚþƒydõj¦¬XAe]]ò&®½Gì)9à{>Œ Zʯ¬8çrÑ¿Œ-ÖiLœ8±#ú®ÌnŽD"___`2ð+ Ý‚6vûkã@Ñ®³ºÎf.ç´9ÛˆºŠb+()kïL/(àÏ+W²³¾ÞGkѶÏ^‘5& …âÇ4Ùâœ{¸®¥×µs“¸5è1ä·Žü sî‡À޳MuŒº}ôûÃEoÎ]…C>­½À¤¸~ý4A1r¬4)•í®¯gÚªULûâ öð²Qܼ," ¾çØöŠd¥Ñ4Ž“¬,]º”Í›7sÊ)§ù¾»ÑcÂD"‘×:çF¡Eµ‰î=-C h?oè2ô›Îùí=&õê¥ÉÉÈ‘p≾£1DZ£®Ž©+WòЪUì‹zYÈXŽþPóš„aYܘ€„bèp°Î-.hé5—_~yPMâ¢hýÉí‘Häp_§[5¿C h»%0Þ~àÿŠHÎ]ˆ.ßþ—Dã_v¶6j9R[Ý›”·­¶–ûW¬àÑ‚ª¼,d|†Þ€üVÒ#BaKV®^hé55‰›üG$9ª!]ãjÊ3'ajƇÀ¿ŠH9Ή®¤\ÙÑóg<êÒE eGŽÔ=vY`(l©©aòòå~aQ¶?“–/gfQõ±˜æ£+)ûž cRA¨’çÜïÑ=Û¸ÚÐ$®ÝÖy2‰õÉ9—‡6¥»,ÁP €ëE[æÿø)Öu63tï£FÁ˜1zy  ‚Ý»™´l³×­#êç{ãÛèJÊbßsaL* Sí!‡z®´Øp­¾¾¾5ÉJ-z#ò½‘Hdÿ±ŸtÎ]©¨àÞe˘W^އE€9èJJ¾ï¹0&….Y‘ιО&ͺñÆéÑòý(‚־܉DÊý¤sî+hqíÕ †W‘ ÿk3œ öcuºËÉÑmž1côd æ••qïÒ¥|²}{ÒãµA x¸KDVùžcRYè’•FÓˆ“¬\qÅ çœsNç8_×¼„Þ†¼²¹8çþÚv`"u†7VÂâÓõ¶å¾'È´#ç´›ìi§Á Aúß&4¢±/””09?Ÿ?7 GÑ–î‘bßóaL„®fåpàÎ}\ṙ‹^|ñÅüœœœóñZà)ôŸ qÆë‰ÞNúÓC©þüõi=‚<Ø÷¼˜vÔ³§® Œm7‡Pu4ÊŒ¢"¦æçSæ§%þ`pˆlHv0c2IXWV@WW.9â¿7ääätFOÜìA;ÅN‹D"•ñj¼Ógzb§ÕúCÉGÐé øWß“aÚI§NºzrÚiZ“b«(¡³³®Žé_|ÁC«V±óàÁäL\ºZ;YDÊ“̘Læ••N@ M ÆDä.€7ß|s°x<‰ìkaŒnÀDà7$pœØAìW°í~89ÌÙžiA¯^š Œe­ïCªlÿ~¦äç3cÍjü?®Fkßî‘ ßóaL˜…6YpÎÝŒÞËó)ðõDîÈpÎE÷ÏLä=@ýëÐí«¾Þ´“N‚±cõA[E ¥U»v1ùóÏ™]Væëøñ^àa`ªˆìð=Ƥƒ°'+½ÑS7ÿ$"ëøºþè¹­ýšCnôýà&XÎir2n °Úè°ZTQÁ¤Å‹™WYéãø1è=bÓÐ+5vûžcÒI¨“çÜ`Ù˜Àëðð_~/`#pªï‡6ÁèÚU‹eÏ<ÓŽ‡”omØÀ¤%Kø¤ªÊWÛÑ~M‹È¾d3Æ|YèK.ITÝJÐk‘-QI={j‚2fŒ&,&t¢±/êñãÚZ_alî‘ßsbL: }²’çÜÅhAm›üwß`’3`€nõX=JhUG£ÌX¶Œ©«VQæçd@9zOØLñrÚ˜Lúm V?¨sÙè}=ÃÚ:F 0Ü÷ƒ˜Ä8§íïÇÓâYJ;ë꘾x1•”°ÓÏÉ€õÀ=À,ñ–)“‰2ieå’HTÆc‰J¨dei=ÊØ±Vbe{÷2eÑ"flÞL¿¬Š»D$ê{NŒÉD‘¬8ç·%3†m…„Õ£¤…UÛ¶1ù“O˜½c³ƒ“WEÄÛrŽ1&C’´~R7_éû LËúõƒñãµÅn<­EëÖ1iÉæíÛçëø1ÀßÐn³ùžcŒJûšçÜ%@RßtzU$ÐâÖtœþýáœs`°]ËV¼µ|9“V®ä?wö€^.ø"pŸˆ¬Lv0cL°2aeåÖd8KTR΀pî¹zû± ¥ƒ Ì^¼˜ÉÅÅD½möìGïíù³ˆ”ùžcLóÒ:Yil©y²ã\àûAL“u%%/Ïw$¦ªkk™±p!S7n¤ÌßÊî6àAàQë6kLêKëdø ™àû) œ|²®¤ä&|C‚I;wîdú¢E<´m;ý…±mäöŒõH1&<Ò¶fÅ9— ”YÉŽU†u®õ&7W“”“Oö‰i£72uñbfTUá±ÍëgèÉž9v²Ç˜ðIç••k Qˆ%*^äåévÏÀ¾#1m!ª‚&/[ÆìÚZ_ǘ‡žìYè{JŒ1m—ÎÉÊ5A b[@lÐ MRìöãpŠFYôùçL*,d^4êëøñAàyôdÏjßSbŒI^Z&+ιA”gX×Ú2x°&)ýûûŽÄ´TWóÖßÿν¥¥|ê¯þ^à àÙì{NŒ1ÁIËd¸ä¦:«”hgC†h’Ò¯ŸïHLܼ™ÙK–0yûv ü…±xx\Dª|ω1&x隬üKPYÅD;6L“”¾}}GbR]XÈŒ+˜RSC¹¿H Ñ“=ωÈßÓbŒi?隬œÔ@¶²°¡Cá¼ó Oß‘˜DUU±cåJZ³†é ìòÉ'èÉž7%]3cŽ’vÉŠsn(ð• Æ³d% Â…Zál؈@y9W¬`ÊÖ­Ì_ǘ‹Í~ê{ZŒ1+í’\UKV’Ö§L˜`w÷„M}=±jÕ*&UWó"ø:~\< Ü/"ž§ÅãG:&+cƒ¨`m”“£Û=£Gƒ ¤ÖÙt„;  €E%%ÜÛÐÀÛàëøñà1`šˆTøžcŒ_阬¶ÒÕ÷“„Q×®0~<Œ ]ÒñWŠÅ`ýz xuÛ6¦¢í^=Ù„žìyBDöùžcLjHÇM+Š8èûI¤S'8ýt=á“í;ÓÕÕPXÈÞÂBfÔÖò °Ñ_4«€û€Ù"bõŒ1GIÇd夠²ï˜­4|8œ>œp‚ïHLklÝ ”––ò`,Æ ÀãÆÇèÉžwìd1&žtLV+3i@÷ë­â"ŽÜ\¸àë:Ñ(¬] ,Þµ‹©ÀkèŸqbÀëè=K|O1&õ¥c²è‰±Ú•/éÛW“”SíŠÇ”WU«WÓP\Ìë0ø»¿hꀧ)"Râ{jŒ1ᑎÉÊÎ ‹bÉÊa={ê Ÿ‘#í„O*kìBAûÊË™<”ú‹hð0]D*}O1&|,Y9Ž: Ç÷ùÖµ+œ}6œy&tîì;O}=ÃêÕlÜ»—èí~žlþ Ì‘jßÓcŒ /KVŽ£” îµÒ¹3œq†&*ݺùޯijs'@I ŸE£L^Å[= À ´höeñÔKΓN,Y9Ž5À9¾ŸÈ‡‘#õ„OÏž¾#1͉Å`Ã(( ¡¢‚9ÀTÀsúТÙ÷|O1&½¤c²²#ÈÁÖú~šŽ–—§Å³_ ìz%¤šX½ŠŠØ_SÃL`°Á_D À+h’’ï{zŒ1é)“•ÀWV2B¯^pÑE0dˆïHLs**`Õ*(-¥<ãAà/@•¿ˆj€'©"â1W2ÆdKVŽ#í“•.]ଳ´E¾Ϧ–hJJ4IÙµ‹ÏÑ­žWðv© èÊåCÀÃ"è*¦1ÆÄãÒ­i¤snPA@½ÜNvû~¨ö2l\x¡Õ¥¤š½{µ`¶¸˜ØÌE“”E~£Z߯“"Rë{ŠŒ1™%í’çÜàü Æ+Fû~¨ õé_¬hMê(+Ó$¥¼œýÀSh=Ê:¿Q-EïìyED<02Æd²tÜx‡“•÷I“d¥kW8÷\=ŽÜ©“ïh Õ…½{)A÷XžÂkÞC‹f?ô=EÆ“®++`Wñ+¹¾*Y£GÄ н»ïH hÁlQ¬_D£¼‡v™}Í<©ž¦‰H¡ï)2ƘCÒ5YéTœ¿í…ö å2Tÿþºå3`€ïH̰f ÂîÝìfÓñ^Ƚ xxBDvùž&cŒ9V(ÿý=‰9çÞ~Äxû€ÅÀ?ù~°DdgëJʘ1¾#1Û¶i‚²~=D£¬A·zž&à[7÷ðZbf1)+-“•FoP²Z·ŠdÅ9­I9ï<­Q1~³Š"ÀßЭžwñºÕE»ñ? "‹}O“1Æ´FZn8çúÛ€@*IGÅtº½äæÂW¿ }3ö6#ÿŽYEÙ‹® <„÷nÈ»€'Ðþ(›|O“1Æ$"m“çÜ«ÀUA÷>ðMßÕœ=´_Êðá¾#ÉL‡VQŠŠ`—–|£ Ê,¼oõ¢' Ÿ‘¿¡cLÛ¤{²rÚ'"W¡ëç)£sg7NoEî’Î;z)ê˜UA÷§£ç~=þÍt·éà=Iç¿äƘŒÖÉ €snð­ Æê”§ø~(€AƒtËç„|G’YšYE©Bû¢< ”ø®†¦£ÇE~C1ƘàdB²hÏ•Û?ù| Þ½õÂÁAƒ|F‘yŽYEíl<Íöû®œ¦£Çi{;„1&s¥}²àœ›|#ˆ±rÑKRºuôCdeévϸqÖ}¶£8k×j’Ò¸ŠC·zæãu«4 xÍŽcÒY¦$+—5Þ½À­ù#FÀh!­iͬ¢TO¢E³ëýFþŠ=^â7cŒé‘¬8çP«”^hmB‡ô„0Î:«#Þ)³5³Š° x x¨öáNšŽoöŠ1Æt¬LJV.CiâçÀãíô˜1ðõ¯·÷»d¶fVQj€Ñ$åsßñÁjšŽ×úÆc|ȘdÀ9÷ ðà ÆêŒþÔ=¶½‚Í˃Ë/·ú”ögeš <‡nûxæÓEä}¿¡cŒ™–¬œˆþ›Èéão E–ëÝ®ºJ‹jMp*+aõê£VQêÐÇ€O}Ç;€™Àc"Rê;cŒI•¬8ç.Þ j¼éÀÿ :È+®€SOíÈiI_qVQŠÐYhzÏ– G_‘zßÁcLªÉ¸dÀ9÷ð³ Æê†^];>¨à Ò퓜ÊJMPÖ­;¼Šrx ]EùØw|º¨ó"Z0ûßÁcL*ËÔd¥°Äx£ÑžþI,îÔ ®¾N<Ñçô„WœU”uè*ÊSÀvß1êÉçÇ€™"’‹:Æ“ú2òBÙçœû1ð!\¤\ üíÑ”!C,Qi‹fVQ¢À\ôÄV 4o‹C·zþ&"1¿ácL¸dd² " œsÓ_1ÞSÀ??Jf“Nò=-áge#ð´JµÂwŒZó$ð¨ˆxî%gŒ1ᕱÉJ£ßg43ù)ðàÛm`@‡´™ /زŠ‹¡´ôð*JzÎ÷qtù"–-–¢«(/ZocŒI^F'+"Rïœû.ð pZ²ãEÿþƒùω~q§NЯŸï)IM{÷êMÇkÖÀþ¦+73mò#Ô/£³ŸùÆcÒIF'+"²Û9wz)ÜÉÉŽWDÐb˜óÆ÷t¤ŽƒaÃ]EÙºõð‡k9è‘ãù誊gÑ‚Ù"²Ãw0Æ“Ž2ò4PsœsgÿèÄxýÐã±§'òE‘œœt¾n[·j‚²aƒ&,hqìBà´Û^ß1jHï¡[=ó¬`ÖcÚ—%+Ghl÷&­8õ^.ií\pŒ¬cKxìßߴͳ·)Y‡&(Ï|Ǩö µÔŠÈZßÁcL¦°dåιŸ ‡I‘…~þ¸5/>õTí^› ¢Q-’-.Ö¢ÙÆ?‡UháÇ,´(Eüý¿ñ©ñŒ1ÆdKVšáœ»øScÞ ÜC+šº\z)Œá{ ÚOe¥&(ëÖéñc´îä]te.Z÷“vÏ£µ(+|cŒ1™Ì’•8œs·“ iÜ!WO½ZzQ—.z‰a:5‡«©Ñž(ÅŰgÏá¯@”çm¾cT,@WÖ^‘É›Œ1&³Y²ÒçÜГ±š‚=\ÒÒ‹úôï}O—°ŠÅt›gÍ(/?¼Í³ MNžA“•±Í#Ÿ‘ßÁcŒ9š%+Çáœû6ZFÑ=°1Ñm¡ìx/Ê˃K.œßS˜;4AY»êõá:à ´å=´M hÞF“Ñ·E$EÂ2Æs,KVZÁ9w1zJ¨OãŽAWÎ÷‚nÝàâ‹S¿†¥®®i›§±õýAà#àô¸ñß16Ynó<-"[|cŒ1æø,Yi%çÜhè)AŽÛøŸh5oÜ+C‡Â×¾ÙÙ­¶ýÅbº½S\ ee‹±íÞû:Úþ¾ÊwŒMê×ÐU”ÄþÐcL¨X²’çÜ`ôßã1Aü½¬è„æ^ ]Çkk~_víjÚæ©­e;ºäô:ÚQ6Å*R¿@”çDdW²ƒcŒñÃ’•9çz¡=7®kñûþ7е¹tï£GØ1p ÝfõõzÔ¸¸¶o§myÿ:Ú %ZÞi0˜)"K|cŒ1&y–¬´‘sîgÀ4,¼=Òô矃ã½(/N; ~µE6mÒeãFV64NP–·Ç'ïStåe©öŒ1ƘàX²’çÜ™èI¡¤olާð-t¥åòÆÿþ’œ]m>úöMî «ª ¸˜ØÚµ|Z]}8AYß^˜œ àteµï`Œ1Æ´KV’äœë^h÷£ö~¯!À5À•ÀEÄI\²³!7N9EïÝûø8ë׳iõjìØÁGÀ[@e‡ÍbBªÐ+—f£Å²)¶ eŒ1&h–¬¤±ÜÃ@Žx¿þÀ·ï—¡ºÍêÑ£)qÉÍ…žM—J—¯[Ç‚‚TVòq,Æ:¯3Ø¢Z4šöD©÷1ƘŽcÉJ€œs£€G€otäûfãsøuMmw£ÀZ`5PЭYYü£¦†õ±˜ï)kI=`ô0GDöùÈcŒ–¬´çܵÀ ×W ÙÀX MTøž”Öô€Ñlà¯"²Ýw@Æcü³d¥4q¾ø%Þ-”¦V  Êl)óŒ1ƘÔbÉJ;sÎC·†.öKŠYGS‚b'yŒ1ÆÄeÉJpÎ9ô´ÐÝ´ÐU?T//XÃ6cŒ1­eÉJrÎu~ÜJ ½ÞÒL zEÁô¨qJWõcŒI=–¬xàœËnnFúŽ'`µÀàà)ñ1Ƙp³dÅ#ç\'´ÏÛï3}Ç“„54&'ÀÇ"’b÷cŒ 3KVR@cMKÝ"úå;¦ã¨>¢iõdƒï€Œ1Ƥ/KVRŒs®/ð}t›è«¾ã9B!M«' ­‹¬1ƘŽbÉJ sÎ ®G—QøÖµhï“|`)ðˆlô=Æc2“%+!áœÞ_xè×X sCV£wnoü}MÉI‘]hŒ1&UX²RιžÀ4qô>â׉¿wF‹_‹ÐmœÂÆÿ]."µ¾ŸÁcŒiÿ2ÊsÜIÁØIEND®B`‚nixnote2-2.0.2/images/underline.png000066400000000000000000000010071315604104400172150ustar00rootroot00000000000000‰PNG  IHDRJ~õsgAMA† 1è–_¾IDAT8ËÕSMHTQþμ׼išé©6QF‚‚‹tò'i¡D‹\n„šp£{-JpçJpé¢Õ@¸lÙƒ.\(ŠAŒ’Õ4x)óf¦÷|oN©wÇùYwv÷œï;ßwï9øÿƒ*%ù,K\—ÀBA(pP„³É_‹Dæ} Ú‡ŽCiûÆ«ÝK"Æ#ê­¶}“n'ïlÞs.ýxtwñk .„{6ï<ŒiòOäNÞ|Ö½½µ¦½ «º©_c™%–Xfõó6½o9äÖËyxâý¯Ó-y•)(y ¶~dª˜²×;fÓp`£$Ù:• (PÜQábÏótGûÆÔaWñNþŠ… 2d]-ÈîþhÐÃ8~¿Õž€_p¦G¬a”]X|VÅ&éwæŽ(‹Sø–†P„Y‹Pè:qìØ´òe´<OuÂ*WpY"æÜLê©ÿ{·WS…&S}¹¾Ð\ðÖR8}òîÃ~ïŽå>íÍÊÜ'Ó„a›ÄIWE6th00 ËÈü[AàMheùo=ë&ˆsh¤x…u™¬:i Ô ‘ããs‘«×¤füîUº²®ã®IEND®B`‚nixnote2-2.0.2/images/undo.png000066400000000000000000000054771315604104400162140ustar00rootroot00000000000000‰PNG  IHDR00Wù‡ IDAThÞÕš}ŒeÇ?Ï33»;»{{{wÛÞK_à¨åN+µâ[Ñ%Š%ñ% j"šh0Æ01¦ø’hT£& bT4ÁJѦ"H° (H Å"-…×+×{Ý{Ù×ÙÙ™gæñ™½Û+PŠmôü%³;³{7ûýþžïïíÙüløŠ]ëÀ— EúGì¾ò( ãã´Lœq°Ûw]úb¯Â|³”˲!Öà+t8®Cõ€üûâÁ?Œÿí›E |É6¿û–ü‘;>Z>o ]¾sPHcB¼·#›îL§;H¤Ò¤RB-…E¨! !4*P(¯I \<·‚ç5üÆ­îâ3ßû˵OÁ©â›ßý«Ö¦÷½sêÑÎþKþÛA!͉DâÊžž<ù|a¦¨» 7 á)‚0$ 5„˜†‰”Ë4H$L´rq •Ê^£tSåÙ®ŸÚ÷ãé˜È‹xϯ5Z*ºõ}¥£w ‰á+nÏ£õÃ4?·®o ùž5xÊ`¾âQ©y„:,¢D \ÄçR„HR ’ ‹L*=J ³”ç'œÙƒÛû•ïd«al¾ð#;zºskTêœKÂÀ½Ó]©r-½ÿw!ï[SÈ_:8x6–gzÞgr®ë©ÿ¨ED€ÈøZFï‡:Äó†eÒÓÝ…Lä<™»*wÖE‹ Oï9p2Ië_õ¯Ý+©ÕÜ‚²Ï¹DÍ$1¼ý¶›VâOƒgõç×ömd®2QlÐ𺅖AÓZk„K¯ )âk„äó9:2IšuizàåÅ#<¨ç#a¬ßòÁƒg­§¯·‹zÝ-ö¦˜Ä‘$†·ïºÞ¶S7 m$awstªN¹æjbð Û€#b22zbÅJDàÛÏçäóY:;lª®ñ»0üDéèÞјĉ>´ã¬ýŒL4ÞÔKÝq AzÓ%Z¹K$†·ßþ‹´úÜð¹/C ›ÑÉMµr´hs}+ÀÒÀ²,,Ó$•°H$L,ËÄ4%Bh4 ÙB@ÓèêÌË$({™KýÚô.wq´r"  Ô‚Ù’‡F°åü!4bHˆìAˆËÖžå{Óvòªá¡MT\“ãÅZk-âÕ‘×5ˆ¼œ°,,3!BÐh…j40¤$‘²I¥’$6ZšžÂõÈ–!0_i2PÈÓßWËÛ®þQiôžÄTAœ4˜/{¼ò¼sÑÆ•÷e2Ùás7QmšLÌ9-ß‚ˆ¥aFëèƒ-Ó"•HBàá9Ó4|‡Àwf}gîñЫMƒÐVGÿ«¤™êKÚÙÞ\G–®î.ºrÊN_Ë1¡5Õ†bÓ9ý,”œ‹6\ôµwÿõë·ÕV<˜KbÍ.T"]mFÊÑB¡€"Éä\mIÖ­H:’ŽˆeNÙ˜Üz¯Y¡Y¿göÀ-¿,Ý{ hnì=$z·~âüúàÛ?\*¼«¿¯‡ÞÞ¥ºO£©–b£ÚPä26›×âÖ·^ìïãë¶|xdžõýLιK™Ái†xlXƒ´lF§j„ºåyñœg)%é4"ôp*“¸Õ‰M¦ç›´'†â)¨Ô}\¿-`E†aˤ ¼µòÕÉ}7ŽüñÓßm–ÆŽ“Àl ÚšD…ÒÏ] QxøYÕ˜¿StŸ×ô9{Ã@žP!RhèÌ&•OMe²ó‡n»;^ÑPh-–ŠM+“ R÷¨»ª­’¶JiŒ_Jré4¾[¥Zš¨Ïüíuc÷\÷+`x6_{¡¿æÕÅ‘?)¸åꅅŧ&&‹ôv%0åQk(6®ï&‘Yûf $ ‚B¨—=¿¢ôK±² Q cÙäÒi¼F…Zy¢>óØÍ_žÞÿ³¿ÇcÏ—cp§Ò”iÀ›;´klzÿÍïŸ\¬:õk»’‘Œ¤Ài†d2I2™T¶oÛ'·)@ȨÅÕK™ee¹Îe[õ2:·SIBåQ«Î°øÌ=7̺mìùÙX./¹5ü¹'vókS_{ê™Y¤Ð¸¾¦ìT!®tåm2}¯¾0&`Ä+ – ÏŠJÙ:dËëqŽ7M !©–¦¨Nî¿qâ¡ïß Ìs±®OgPñïüÐOku÷xµâ±M*NH±¬˜ZðH§“Xéžs0¥ÂP/uŠ"ö¶lkÛ=/ A2‘­—PªQŸyìæ;â SŒó´§, ©Ü…ïÌËtçÌHF†ÀÀ¶“ÉlÌ¥XÊ.´—)A¶ÀÇrò;›'™Êe/ýÞ÷óƒoKÆzÿOdó|6æžþÝbÅà  +g!¥Àõ5I¤•î,@F+ OhwÛäÒj²" ”O)*®Oºs€ŽüÀËÖ½é‹;{^þþñMψýóµE¥¼«U—ά‰4$!H˜H+Õ–!!õÚW`)[ÆÞoé?ÐP®+*N@Ãóq|Eºs-ùîþ¡¾mŸÜÓsÞö³Ï ‰0¸¿Rk’µX ‘cœ±8ˆ'¾¸¸.÷é­Jˆ€ª0Wöñ•^ŠO)jML¾@O¡¨ÛÕ{ ¯¸âŒ‘Tã¾Z½IgÖ@QDʵ~˜Â¼2!® ™/+ü@· Ëòjª€ªëÓÝ]À0äÛ®Þ\6wð¶1^âŒýr!— ãHkUg©™ÓÑ ¬íÊhAF1j¨»!N# Lb">@CÆ×2¾6…†)†¸ðÓ{rÞð™Ñ»¾ð§^ÌžcñÎý|æÐÙ´AÖ6(W\‚fm”xÌ4›¾Ïá'íÛ´&+ÑvÉÈ—mÞ–sO ~!†ie7\øû³/ùöcw_w?ÿyz [ Å2%–%¾FH¡‰Ú“À]{íµ#y!XTòÞý?xÍWcð“D›eÏéjWÝ èP}B 1>ò‡Ï^O”2‹´åýUO@ÀU ‡ïüTåØCE`žΪ´m_<ôñW|l÷›€@/ÑîÛ‹^UfíyDË‹ÎÒ«€ŒÁkNñ÷"ÚZÿÿµ÷#Ü&Í€ÈIEND®B`‚nixnote2-2.0.2/images/up_arrow_small.png000066400000000000000000000001751315604104400202630ustar00rootroot00000000000000‰PNG  IHDRÛn€'gAMA† 1è–_tRNSÿ[‘"µ&IDAT×cø @laaX[€–Ö@1 °²`Ьî Eù…‰IEND®B`‚nixnote2-2.0.2/images/usage.png000066400000000000000000000010571315604104400163410ustar00rootroot00000000000000‰PNG  IHDR-- Ĩ6PLTEÿÿÿ_jt_jt_jt_jt_jt_jt_jt_jt_jt_jt_jt_jt_jt_jt_jt_jtÒ’ÿtRNS@P€p `Ÿß¿0ïϯö}$%—IDATHÇí” ’„ DäÿËnÔ5jíz€IÕŒ(L:ŸÏ7îana­oír›¸Òâ:ŽHÿ mœTI%Õ9\=>Ó61Øï—ø=®ó{ àÆÆ¯uÞ¥y‰®âÝ•¶ô4YcÚ¬-̧´f"*ÚÓ^V)%dÑBV<Ñ\.Ÿ#Î&4ÁÑÕ œaEïÊ(ËF‚¯é¾Ó¹Ñ¯p2LgªïÞP³ÂùΎјÆu«A‡Šf<Ñ0FxØ:jz¡ÞÑTÁ^’¼©¿]kg!Žz¢Y»i‚$ÚSG?ýÔR‰»âAém:™mv‡ûL­«Ã±ÇRÞfU/eµ›µ”N[†b’˜ÖKï’ö‰”ü×e¢F“ÀXª(Vé¦ Jºe¦ºkˆ6(Çã(÷|âV g¿Ò-låU'-Œ]„•…¹eœë'ÚK“ú(¯2A23»£¿¢Åa¿VúWo Ö<Ò߸Æìáú7÷;àIEND®B`‚nixnote2-2.0.2/images/webcam.png000066400000000000000000000334271315604104400165010ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aË6ÞIDATxÚí}y¸eWUçoçœ;½±ÆTjLB%$MÈ Ðˆ´v£m·EC”VAløP´1heˆ ±qB¤‘6 B˜ )RdªªJ*5½á¾÷î=gï½ú=œ}ν÷UUÈ«J™œï;ïïÞsÏÞë·Ö^ófD„§Ž'ïÁO÷ |ËÃ3o¼ýêtßó©8ØDWðk^óšì‚K¾óœV;;Ÿ ~±äÉùB²mŒñµœó1ÆX‡1ž‚HØY`d CX CsZë#Fë]†Ì}Z«{úýâÞûw|õ¡7¿ùÍ §{l÷ñ?û³¿²ö;¾ëâïj¶ZÏo5š×!¶I)W¥i 0€3»Úf‡ï¾Má91²Ÿ#@©EžÏ…Ú«´úlw~þ“;¾²ãsoûMûN÷˜ãŒÀ¶mÛ¿øº_»fbrê‡[íÖ÷ÊDnk4šŽ”–¨Œ1pÎÀc–ÀÌ>Aø˜ @0d`Œ{— @ÞÏÑï÷÷å*¿½;?ÿ·ÿô¡[þícûØÜéž‹Çzœ‘øåo\½}ó¶ÿ1>9õòF–}g£Ù”ž’œspÆ!8ã œq0ÆÀ8³4g üA¹kÈ8ÈÀ˜ò$²×é--!Ïó¯Íw»¼ïëßü››nzã'Î(üâ/Þ8}Ñ3·ÿDg¼ó3­Vû|)$Á9„–øÑɘ·\„¼EBte*ÿ:ÑODá4d Œ!hc`ÈVŠÈt¿57;ó¾ûwÝÿž›ÞøÆ§{®Nô8#À“ïú‹¼xblüõccc—pÁÁ#Î9\B.bâ{ÎwÜÏJ¢3» 9ü\øõ(¥@ c 4iMÐZACFFºÝù]³³³o¹õ£ÿtó‡>ô¡¥Ó=wÇÛ':Þô–·_´uëæßi·Û?¦)cŒ‘œ !N.,ѹ%:÷?äŽKøš0Æ.¦”Fk+ ´ÒZkÒÆ0¥nß·wïoüÊÿzõgN÷.w@t^'|Xª‡cz« ¸Ç˜ªNà †v È‹‚10tºóóð¹Oßö–w¿ûÝ‹§{N‡Îóoúã?^wöÚ³ß699ù#2R’‚I)!¹—žë9„pk½@ûŽà,Vþü¨KòÇï‘eûð?½65 ”€0ÐŒÖ(”†Rʾ&ƒùÙùïùÖC?ÿú×¾öÓ=·õã €?ú£w\¾aÛ–÷ŒuÆž ¤IBRH&¥[ë¹€U¥Ïsyó,RúâGVµþ‡a6<Á ÿœÈ€ Ê¥ ‚ÖÐFA) ¥4yÁ„…Å…]{wíþŸ¿ô ¯ºõtÏq|<¡ðöwÿÅ÷¯_¿æ}Ng‘”’%I !¤ !F¯÷ÀÇ3ÔÖþº@¥%ÀûžJ0PUAô0åR¥4 U@)«t»Ý¹…î«®ÿ±ë>xºç:LÃï¿åC×µ:?o·Zã‚sK|™8â—k>çñº?Èõ"“%¡‰*€êÿs§è½°,`P ‚€`Œ®A)…B)ûXÐÚ`©×+Ž;úË?õ²—¾ýtÏ9ðÀûoùжÛ÷¶Z­–àI’@&‰”…Ï½Ôø9·î]6„ÛÃK÷žÿÜqÇë¿}Ž€ á=0b X Áû ,”Ó”VP…A¡z½¾9räÐë^ùò—ýáéžûÓ€÷ýÕßüÐøØÄ_6[ŽI’ ‘ ’D@Y!¾ð~¤éóX³g¬ÂÍ`lÙßöcgÇù\ оWÕ ÜY~PÚJwR^¬·Ô3ÇŽyõO½üÇßy:çÿ´àÞþöçmÝ|îßµÛ­i)ñ“RJ$B@DÚ~¬ðy‘Ï£çžcƒxÿv'†1Ïìµ÷h@Šp–‘óVÃ…RP…¢Blq©×›?6û²ëâGþîtÑà´%„üÞ[ߺ}óÆm7·;íi)Y®OHi>)!¸ã\paŸ³HëJe-ŽíÄ>}T¸t™õ<º^´Ìx¥1H&'©ü)wþ‹òR2!šÍF£=Þy×›ßöŽ«ON n¸á†±·¼«Óio጑Ö̳š¾D"KE/ˆ}Àr¸™¹±r9I]^/ð÷ˉ`üòå–-€H@pÀƒD%0Æ`l||íÆëodŒý™ÿP¸ñMo~Ö^øÓŒ¡æà©Æñ™ËØá•Ä.{šˆàeÖN³56Œ[roÈö Wà€¤ŽË*ªJ$'qN Õ\B‘—RþàŒÁ¸G«Ã 0DÆ@HÝן˜øá?|Ç»>àc§‚.§d `Œñ[6½¾ÙnMÆK±/JÏ^lFÁOT¤e{vˆE® 6·â^ikkª@QäÈ‹ÜåñåÈóý~ý¼¼ß³Ïû}ôû=ôsû<ïçÈû}ä¹ý|^ä(ŠÜ.ZA+·$¸¥†bÝÂß«1`‘_Â͘;yäßB qR°ÙhÊÕ«Výêõ×_ß8´9%à÷ßöŽk:­Î‹@‘$\ïC¹~Âb%«â…°ëKmÝ­”{^[¿k–‚ÿ?™ÒÈ(5 HŒHBHi Œä$8ŒQC—¼´ª¸¦É™­ÌIÎ!¸€áZhH)ç­vëê˯ºö|èŒcŒ½÷ƒ·¼ºÙj4„pŒ~ÎxéH©b0`~Á¥u3Í){Æ)y>£ÂçÆù¹9ìß¿{÷ìÁû133ƒÞRÆ$i‚±±Ö®; [¶lÁ–-[±jõ* h¥ …†ÐÖb1BB€ ‚à©÷œS}ÜA1$ÆÀœÉHÞª€vs@àœApçúæ Y–±ÎØØk®¿þúÜ|óͽ3¿ñ[¿wi3˾ A$6wÏK€R,òÒ—q%$[󻣡•íݺ[íR@DPE½{÷à w}_ûÚWñðð´´­õ`dЭçI’`rr\x!ž}Õո袋Ðlµƒ$‘Ò€HZPŠªTŠƒScð¿G1ë/àäˆ/´1šAHÕ7h5[W\üÌËÿVXXqœµa÷ÛíŽàœ8ç¬*ö­ž?«¯±Ò‚-Ú'dB»p«RÊr=öíû>ù‰[ñù»î±cÇBdYf×Ü$ ´‘»Ò_ìØ1üûwà®;ïÄÓ¶oÇýÄ¥—>38žŒ!$Îãè‰îú8X$É‚4@i-x'gå’ …¡F£!ÇÇ'’1ö/´‚›À+^ñš5ÏùÞkˆÁfðŠ([·TŒB0ÇGó*Ñ7 XXÊ„ ­]˜µ(`´F¯ßÇŸùw|ôŸ?‚ƒ<Æ9šÍ&šÍf…ðNu×WJaqqKKKPJaçÎxàp͵ß_÷LMO;š”RÈŠEè½—Þ$¤H¬ÛueCÕóÉ8c¤Ívóù¯ûõßÞà›g$.¹üÏi6›[ ."‘ïóõ‡1}dBùÉ3D@D|ïб‘µÜ%[hÌÏÍáŸ>üøÔí·C)…4ËÐîtÐi·!„„`¼Ô;‚gÐÇÒišbbb‹‹‹˜ŸŸ‡R ·ßöIìÙµ 7¼ò•ØvιÈóÜ‚Ö9o+Å&Œ9W`ðÖ–>Ý;‰8`¬@«Õž^Öêï_I¬¨˜eL“” !È;x¼¨++ñjÇPA“OÃvÞ<¥ ŠyžC)…™cGñ×üK|òÖ[ADhµZX·n¦&&‚Ï!IUDÕ“è‹s\ÓŒ1t:¬[¿NF{öîÁÿÑ[ñÍ÷ÂA?·&¢_:´»?/!bŸCˆ’T¼é „¹)—ëˆ1¶bŒºb¸îºëÖ´ZÍkìXãQP§ô·Gt¯ ÛgÞ†+?ùºÝyüýßý-îºë.)166†µk×BH î2Œ@­ªßqpð78“Ñ;«€U«Vajj Y–affï~çŸaÏîÝ68Ï+úƒqé`嵫‰$q¾Â@SEt`I³ôÒ_úÕß<ïŒÀåW_}i"“³T2vãjQGœ]SÉÁ×Ú¥YŽûó<Ç'oýW|îÎ;!¥Äøø8¦§§ADÈÒ µ.ýò@™Wà£>½,Š7ø¯4MAÆ`ll SSSH’ÇŽÅ_Þ|3fff"0ÖIdJßC1GÁ(7ÀÁAûxc /%ÍÖÔæ³Ïºb¥è´b¢%MšW5[Í$¬¹è ï-€z¦ÇQeÞ½ª¬û ;¿ñ |ê¶ÛÀ9G«ÕÂÔÔŒ1Ȳ EQXâF6x·;Ù¹9,..¢P@Ö5Ýl61>>ññq cÀ…€R IšBk±±1Àìì,vízû¿Å‹_ò# yë­Xêõ¦)¦¦¦@DHÓyžCp­5„˜ÃG ;ß  4ÑÖÛš/å8|ä0M¡Ùiaú³0½jFk$RÚÇ$R ããã(н^Ÿù̸ô™ÏÂöóχ*ŠJ‹1QêZøŽìñˆ«ÞO8¥Ak Ñl^¾mÛ¶Æ®]»w§ÐŠàª«®šþéŸ{Í.÷:hÈÃÄ>ÁÆ÷‡I€àÖ5¥Ù§œŸ_i{î¾íz(8o¼(WJA ¥5¸Øà>zI_àüõOÃ3Ÿý,œsÁ¹èŒwݹ.vï|_½ó+Øýð^ìîíÆüÂ<¶lÞbƒ5RZI % ¥099‰C‡¡(rÜ~Û'°eëVQP6µv>f¬I8DäWÞ‰ÓÙCô°\&9ÇÆ¾øÅ›ÜFàêç½p#ãluúÁ!b|X@ˆ½¨uíßúø‹ÓÛôj¥ºósøÒ—¾" v>ù ·† !°oß>>|ÓÅ.»â2\óߟ‹Îx;¤p@c¼µ›×âéW^„Ïüý§ñ•/|GŽƒsÎ9J)(²N§ƒn·‹o~󛨻{7Î9ï<EáܹښrDàÆX0Ä¢ñ×P eëQ);\ˆ©­k7œ9X59µA1X º} :q© ƒ˜×˜íìxó© éV+mŒÖØ·o8€$IÂÚ,‡z.:|ø0Ž;Šé|Û·lÇ%/|&ºK]Ì-Ì¢Ò"ÀÝçÿçK1xl÷C82;ƒöcƳaœûØr¸F§ÓA¯g#Šwßý5lÙ¶Œ1;—“snõ‰ç¨<„즘1JØ·¦‰x€ÛΈDlËÒÊñO¨T™½k¹5DÿÉš?•’«€"¤V?ôà(Šiš¢ÑhîçŽû•R8|ä0š*ÛÄÔ¹Ó8:sZç’­Ý´›|!¦ÎÆÄÞGÑ7}9†ÉÉ)4 +ÎqÝG8²,ƒ1>ðºó]ŒAiYÌ«â01¨"2£wœW4$© |óJÐjE%rF¬{Õ²*¼ÀÄŒX™Ïgª)Xqxwqqû÷íwDð.T帟3†cÇŽÁ4„™™c0‡)„€1Œ3ÌÎÌ@ 6ZÈÕŽ;ŠM7Ùl#'@³ÙDQ䘙9†Ã‡£Ýng6Ü0cÀ¹—‡yT¦ý´›ˆj"!´Ç:ÎÈ49›ª*=|w®ê[ǹNR“O>€îühÆóB7ä@iïuúŒ› ãˆFá½$ˆªz[S Þ5ïfíÎÏ!Ïóàå«tþpa`£ 88´Ô–•r‚Þ©¡Ö¨†®è%Èž€8È s-54ið‚ ¡Ÿçh·Z•pµÏõ7ÆàСC!!è.ÚÀpÃíXyÄùDT.üŸ–L{*9ccg8šŽ’¥,*¨°8ÜiL%ržŒ®z]âG¿Ÿ³+I|4¦´»µqâ–”Pv½ç€ØÏa€Ê”år\sÈžëièDC E ~Þ©W ;ÐZcaaJkã3“].¢÷hÖ"ƒäõ¨M¥5!¸iä\¬HŠØŠ€ ¤¢¯®R¡Ã(hÀqÁeÐ €àŠõm ”.”v·_Sy†‚£Jjû›†qÅ‘¨4p³»SèÄr½¦r70¼jÊú±T‹Jü=»J#›<x—³¿œŠb D ŠùDHÛAEïø—1 *ºo˜Ÿrí'TÁã&Þ­—<‚gr -´xp‚áœqhÆCçPÿë–š\e¯±@P¤‘¹–z“©ÐšÆÕLä(E^Òù”rOÛHBDóR‚ÁæØ’•I_hCýÐ8¡2 ¸J‡Á0ryò\v^juy±N`ŒÍ*–‰ ò8¢Ç™7RJ¤I -ÈJN .À3ç¥oGÈëJ#Ë2¤.°TiAq÷/í\ÉÍF†µ6|õo¼lqÎ11>éêÊÚD Êe„×çjelQ! Åiæ¡S©‹(j½"ªW*ÏŽEZÜ=Ã0 $ˆŒOù‚·“½È¬*vNíš™e™³Ám&Pƒs«e»x:¡Ùhb¼5ƒú°„ÙB AVêˆZ¿` ìèµwm ŒÂt¶ ÍFI’Zo`:öŠ!c ““%QLüÒ­]É|KJ¯# HMCÐZ;c°¸¸°‚8”?ç5Æ@xñ¥€±Øã3A‘¤)&§¦ÐívC´O…]÷]’h³ÕÄ”šÂì±ä²!%HXño\Å®¿^È66£­® ¹†X˜_f«¸ _¤”XZZc Íf cãc(TQDçR* ü «S@½?„ªål¶ªÙ>ï-嬭V$!„ßÕëõËäIã•:?8 åZâÞ×õ#Zâ,—.µfÍÚ k¤‘Î$äœ#M4š lßê:Q0‰N5Lª¡2 &µæŸI4t¦ síÍhµšh4šÎ³ñy¯üùôòÕ«W£Ñh¸¨'‹¬ ø=à}n9_Ñoʹss¶Ôí®H#êÀìÂܾ~Þ_¨t<ñ.' Ö”#ÍßGéüQ6ˆ°Űjõ4›MpÎÑï÷‘¤)à@!% :í6Æ:c8§y°ÀQˆ&Õ0©IÜcj,0“¨D€­òLŽM¢Ý¶‘CïpbÎùÔëõ6lÜ)¤K|qgiíG„/•Zïîö\^q{×W,--î;cð{ïݯ uÌ8“Š*æQTÎE:B¹+ߊ¥àS ÀsE%V|·Úm¬]k›j(ç}cœ#s aš¦àB`bb“c“¸°ùtŒÏNA-ä¼€N÷7,Ç+¡ z ícc8?¹«&V¡Õn9qY–…ˆ`¿ßg ccãX»vËrÌ✗ÒÎpâ¾\çMìßðfn½5½1È‹|ö‘ýì=cðÿþá*Ю©%¢upޏrí !¢¸@X ¼žäâã®í»/¡’BàìM-¡9ÇÂÂR—ºÕh4ÀCš¦0DhwÚhwÚØ>±OǺCg¡y¨ 1“@Kjaõ£k±}éB\0v!Æ;ch·ZàΧÀCær‚çrËÖmh4Ö |Jw(l/ÕÚÈú emºôxâG}l«Y‚*ŠƒŸøÄÇV+ã"27þΛ¾¸jÕêçXÿ½pîQ4a« s00Øi`÷ÈŒ ‰Ì_„v2“““XÖØo—ÇÅÅE´Ûmäý>Z­òY“ÈD`ÂLØÉ-¬Zp>f&]6°vé`¬»Ùʧ¡sÎ16> 7‚q)lc!xHìôùD¥tÆ‚ôÓžQ\÷qßÂÇ>–––¾zÿý÷¯È®$+–ØïÿÞ[êýb³Õd^IãÌ@sÄ#Ä­wŒÅVy¡²A³äë±# ‰-[·bnvKKK(Šý~ÍfÓZCf/ŸA=M+î<ÂdNzdYfu€4µQÆÅÅà~Þ~þùÈœO¶»±-nÊj'†r¥ÁkÇù±)´ ×Fƒ ‘RŠ-,Ì­XËùK `ïC_^\Z|Ô't_Sïʲƒ²CÑP?}ÊóÚ,È$A³Õ¶sÏ q¾«ío¶Z(” ân-—BXîcU°îåÄÕØZýFH93Æ Ûí†èß9ç> SÓÓ¡ë—LpiÅ?÷ð¶KZ­ó˜öZ¾6Öì$Oüü¶Ð]X˜›[ú쀽ÿý{>'u8Wk© úþºåd¡n;3€…æ©L&)’$Áôô*l=ç\GDŽ¥¥%ÌÍÍÙBPWd‘5›¡0T¸vm¾k—H,˜„H\†‘ïNÚjµÐë÷±°°–†›·`ÃÆ³‘$ Ò,E’¤R‚sJÞBJW0û#P$*û ûÇú<ôû½wés;VŠN+Z87;÷Ï«¦W½ˆ¡ÍtèÿÓ^Mâ`TíàÓ"½¹d+g87`‚ƒK‘H¤&Ö´ÒX»vÈöîÙέ—nvvÍffÓ–nI‚µî8EËiù> |nnÎ:®\ÀÆM›±iëV¤iŠ,m I3ÛÔRHÎB¼]ÿ#›àãtþýÚ~:"¼Ò0Æ1†u»ó»ýöÛW¬GÀŠ`ßÃûn]»fí£I’¬ÕÚwÊbÐŒº´“9w~|2•þ: ¬ìâ—+Ïl µÒ$H]²ˆ!ƒµëÖA&ßÚ³E‘C7}@Ç—ƒû^!ã‘¿(Š@ø²ü›aë¹çaýºõÈÒ YÖ@’¦H¥´í]"q2ÇÀ2VôN™|:îhâ›K+Íæçæ<ü‘•¤ÑЇÞróÍ»ç»ó×nOJº=Ú«;m˜J&°› 8?¿aÇ¡RØÎ¢I’ M3dY†¬‘azzÎÛ¾“®ŒÛ—YåyŽùùyÌÏχ&Þ×`ŒA¿ßÇ|·‹¹¹¹àâeŒA)±ñ l¿àB¬_·i–¡‘5¥Ò4±Ü/í.&¶ò¹Ä¼û[›rû9?fã4ý˜óµ²•ÏÆ&ƒn·û¹w¿ã¾º’4Zñ3sÇ>011ñ£ív')÷ðó4Ž:úžüÇœ9ãûðßôe×ÿôgµ×ª¢¬Ü©—Û„FT6¨5\,F,l !–P¡ã–€‰JBï ­­ï¿c:•T¡WoÝæô ¿‡Lû: íÞí^"^²Ê̦²½Mµð#ÄûµK=s©ø)h£ÙÌÌìί}eçNmN víÚÕ{õ/üÒï·;í+Ú­VZñ“º©"'0ðäÉ"ï`¤[Gဃƒ8 ¼åí—Á!¥pJ§.»‹„L¥ÒL =‰CãFëÓ/÷)”ÑÆUå~…å=–c1q6PÞÖvÞÞˆ¯”ÂR¯‡™™coùÄ'þáÈÀŸ¾ý­Ýþ÷?fYöïÝ H ¹ó¡Nùóq-GœGoké\ &]ã%έƒ…üfN 6¥õ.*[ÄÚíh}7SgæEÛ×x—îcÒ8y%p>…<2ÚúþM¹LáöÒFcæèÑ;¸÷ž[N]NˆÈ¼ì†ÞØh6¾gjrjU^Tþ \Àå†ÏT&Y8‚UJÌkå4ž‹C£cû#`Èvú,7ƒ,­ 0ØÆÔ<’¾Y4g•ôoÆYÉðd× äü¹¸7C­ÕMD|­µmkëZÜu»Ý…#G}ÃG>ò‘S¶Ëè)ß3èÕ¿ðÚW½ió;ͦõ£û¶ñ’—Ãkíâã¿ë‡O´,ó«7±5ùvÎ&M3G¬Ð·Ï'Úv¾ìoC_߇8Jþ7V ÑO‘ÙçÊݵ¦~ž³ûÜôÖ›~÷õ§’§|ÈO}òÖ?ÿ¾ý·¬[¿îãj!Cdl;9NÜÔ@à'»RJ†0ùvÒ«õtŒY}ÂVfÙ–ï<ÊÈ _‡¯À+r«{ÛöžŽ³‚žRie[i~àM> ¾M5û´ßS ¥Ø±£G>ûõ]÷ÿÞ©¦ÇiÙ5ìG_ñŠMÛ6oýÄôÔôv) !˜íîö à>ƒ¿¢63µ‡è  6âôl8ÇL­\¡ì\VíÖáŸ×#¢¼Ò@sugѸÄÍ—¹k­13;säÀþo½à½ï|çWN5-NÛ¶q/}éË®Ûú´íœœœHâýdm«8\U…cèª`ˆ?¥g  #V¹t]Ì/ÓØ¬ü…XôW¶š§àÖaCI¥Å¥¹}û÷½ò]ò¶ÿÃ"§Þ–1ÆV¢eì)€˜ÀåÏ~ö³ò~þ®uëÖ_~åUWa¬ÓaÞ¿_ß:ôv"=î5T) +g®B¬¡ýyhØ=†+ú{ò~¼nD®‚R*} 2º²¬³ý•ëspÏ׿~÷Ç?zÛóçæöf¬:"¢ú{ñ<>.´y¼#u¢Ÿ}Ís®3†þ8/Šõý~¶mÝÊ.ÿÎËÑjµ+ÛÄÆ›ITAÙÞqmG­àâ1Þ{íuåÕà›vÎQå”P÷×±Ë7òû÷ú}|åË_¦û￟eiöpñS_¼óÓ_f¥V^TUeÚã@¼ÇCÐê9ß0ÆØÕÏ{þë¦ß,ò<ÕFbJضm.½ôR4›Í°[h±9VAl0”­ØQZ±iè=WP4äæãuß‘‚Õ®2˜³F¢ÂÛߨJü~žãž¯ß{ïÝ .8%2a‰L2†×~öŽOÝÂ|ÂäàA£^?V0kü-Jéë•V cæ@E-[·à’‹/A«Ý à!É2A¬¡#Aíyü€ç­ÑKË¥ r\FõŒQ {djV¿2ôÝ[êaÇŽ¸ï¾ûÜs⌱$I•âwnû×ßý PµÒ¨öèŸ ìdÀð˜àEýÂÇÄWW_ýüsÓNãf£ÕµJéàÔ‰‹!´Ñ(ò6¬ÇÅ_‚±±1ë“Õíä˜kžXm=[ÓÐGqtt›¾/ác=ÊVvöµq%l¦®øyÑïbÿ ‹‹ØqÏ=ؽ{·Ý'QȰz Aˆ‰Û=òš/|á ¤#@ÀIK„o £ï®[<ïß%8»Ùs1š³¢”Âz$­‘9¦§¦pÑEÏÀôôªŠ`cùz ëkTßD„/+¢——°gÏìÚ½ÛnNå8ß÷¨f@ypÁE ˆI!»…êÿÚ·}â}°ÛSx‚›Ï+ xÜ0„óyôþ÷œ¼ð œñ7hccvŸ Ø—î®7eÚt謥Ãþ|…R˜ÃÖmÛ°fõj$ib“Ax¼¹£÷ÍGˆ-„8;Á¡c9b‘¿ çûEuíkù}a«¯P GÅ®]áÈÑcÖ¿‘ȥ䶅`|@‰«¤M!bœ3­•~ó§oû×?Œˆ¬Ýsÿ8L2'%"5æ~À¬Y³&»è™—ý!öJrÜ*¢íY⽂Êk²JYé1Ó•%A© k×¬ÆÆM1>>n¹(JâðDås r~MÌ.¯ó×4«˜ðQ€'´ƒ K™Fw¾‹ýû÷ãáGÖ:d !ªQÅ`ÍÄ¿S2„7)«äŒÁýWŸÿÒçßЛ™ñÝBTA‰ðø`„ÂÇÝi6oÞÜ9gû…ïã/1®Ï~éÆÁ—öÝ-¢Ø‰S tÙNùD·1Tš¦X·v Ö­_±vBH—Òžû)’iã8Pä;*G9®qí ¶¾ãz¡MÜ£ÄÃDo©ç²‡ì5>—Àw4 Í&áCÉ>DÍ‚Ea¥C$QkM‚sfHÿë}÷í|í#{÷Ž@ "Ô°¬>p\Œ ¾€¹ä’K¦W­Ûð>û/FkâR°à¹2`Àûö«y3ÕÞ8Qu¬10n{8UØŽáišbõªi¬Y³±±PúUoK–†“:XM P°JÅϾ* ……n‡ơÇÐëõCʺÍlTpË9°BS(÷[aIq–…6¤ qÎÁ|~ßCü܃>¸×Ñ!wÄ%B]'x\à×{À\tÅ«×NL@z6†Lˆh;– ¦]–ê ò¬!^W],-Jœ¨tÝ4ÕA…Ãôô4&&ÆË’.3p÷?ŒÄÃêDA”*èY(–RÆ ×ëannGŽÁÜÜr¥lšº”6!•WÅ=ˆ_†·K”‘ûÑÒ<®6ˆ¢(ÌhmA@æëû÷ïý™wî¼ßÝjŽª$¨ëß6bÎ×W\qÅšæØÔ_èùZâB0ôJ˜Û¯Çfݸ'î–X˜ärJQk"°E¥q\½¬¤!i’ Óic||Üîò•eNóÊJÎ*GpºMŸK‘o´A¡úýº ˜››Cwa½~ÑËf¼Q™Dbù&HBæïÂ5ËöÙNTæÚ奔q3 _ðC;yôÀOß·cǽ îø(ãrB|À\vÙeÓcS«o1„ïÑZ“V쳺‰;kÜ]reà/ø«  Œ¨UšLÕϨ—°Ñ@p,KÐh4Ñl45R¤IfKÊã†Ï±â¸.ìKPäèõûè-õ°´´„~žCi€9÷Nªê¦ÛjÊ^ù›UE³ IobCÜ..v4ií¯ußу‡^±cÇWw8æŒA0  œ"ŠwÞy³·œóAMô"ã8¿Žø°þ¡V>ðcCdp¤—U´íØÑBµuÑwÕ(¥EÕ¤´“i¯Íy™.^nZ‹a;ùÊï6n¨ö]”ZŸ£Àx옪zõÊ:ÁÒOÝ®6Þ$2.„YÐù*¾”KA,Ýœî|ôÑ?qߎ;Ý b,» œŒÀsŸû\®Yò^Côrc4q^¿ÜïŽNçŒÛÝ3É ÔiþÖ¨Çñ0òËpµ™JN¨ž¾¤Ü ¼_}ŽïF,Xê 5S’¹¥ §Sä|ò™Ä™kŸ÷‚ß6d~ÝhãD sCœ<‰0¨dj¦Yàà m¼N@¥’;`¼éT‹ÌEŸ¯pF¾aŒ8×÷ý‰‰ÌÛÐÊ¿‡ðÙh°•kƦe… "«ÃÍ{Â0«/tÒçÎG¾uð%>xÏa ÷ €` ù`X„ˆÌ5ßý¼Ÿ"Îß©µ–^³·bP”!Ú°/p¤ ? fƒÚ胶]ºµƒ†{ãâ%¥ùR¾#Є õIAª ЀвÇX)®«nçxœC¼‘1ø£÷J53îŒÁû"À–“#>Ã8<†%çŒ}øþ÷üÄáÇ‹ ¨Ò:&C-“'pþ•×<ïJ!ð/J›ÉxcõdØã'­š¶Sƒ{ýu|sáJ†ˆ2p‚ÒX~&ºæº-‰NÕëG¯ë@üŽî ¯Zå4bøõÖ˜¡R_{ ½LB0núÜ¿ê °ù ]F%s í—mŸžnnø¸6ú2Ä8cÜ™WeÒ¦‹ep£\óØ2d®|Ø'ˆ[ ñ竎šøs¥X]îjÃgåW%"®Ž8 úX-‚­ÿ†õTÆÓ=q–ñ(A“0Bä&×?y×]wÜÂK±Ì2K€G"RW\óݯ„nA Ö”Ÿ¸`"vtTj$ ¡ôžÈX¢÷¬\Ã+Ža”ñ$Ö&v9â—ôŒ\Á°çác,wÀ¹õ Š–¥ºÔóqˆ(õ,6‘t L0¾»èu_ðå/y7œ×vdtþ¼·¯øŽË®¼2Í’Ÿ5nß»²¬ÆnŒíï ·ïÙÝ¿ü$ºñ˜h\‘w5I“5®¢.Õ‰̆°êW<ã׿DtYŒÐ¯ Êر´«Òt ªä ”øPJ³aû/˜¨³:FÆ@sl•Yë7ÜÑwЈª{·âí{Ö•Ïþ ˆ]Š 6ýïœÌöù«–KÕY'lý Å.¡áÚzM{Y–†£€ðíµóÐŒàp`@’ {¯z}6ü û˜¸­|é<ŠE&x_/õ¿ïk_ûÒ¿aPPM:ô„çÌ3žqé3HÓ ‰L°ë+óI`Üvÿ"n³q+fž—5áOõKÅþS—ñU†-ѵc¨…ýI#¿Ï†sí@jùP«‡ :ü­èƒ gÜB/,‘ ½LU#‚¡Œ¥É î¨],èù¿ç×0”*ŠnŽÄXè꥙.½Z#¬¼ GûkÅŠE-[ü@¼²Táè‚ ñ_ýÐX¦bV• ‰w4 #^Í7TºkYøI·2ØŽ_S΃¾ví0ŽzNBÌ0ÇY>ü•—6¥bXQ½˜1`øî 眳áÀC=ј|\@"\$Š¢·!IeE«®QÏ œ ¡_Œ7A£$¨ bÎgÃÀ"MÆ2Æh£i­´&ÒÊ£!e´M-%C†Èh2Æ"CD†´ÑOdœiMv¬,ÇÏʸ5ÀAŒsÁ9cLθ Æ„àœ3Á…àB2Ƥ°!8—Œó„s.¸KùåŒ Æwg˜/CÑ’W#D˜Hd÷:^|%bxN%°½Ó«&²Î†À~À5PÀ ¨Â3gfÄËϸc>O®Â*Ušƒy¤¥B£´Ñd´V…Ö*×ZçJ©\*×Zª(ò¢(r2¦ÐFÚhe”VÆh­5i"í×±z”‘5âuÌgufðž1êGý3 ãÖG.çB)¥” ã<B&"‘Y*e&¤L…LRÊLˆ$’7¸RØ:É…à.âÝhÉõU–î7pJc1»8Û¯ß]ÔÆ¡ƒ‡¾˜dÙÁ4M×—·e}„eCæa9Ö!­•ÖZ…Rª—y¯È‹~Qä½¢ßï)­s­Š¾VªÐZDT ´æºô÷7,ñq±‡}âëŒ"¼^É}D}•ˆ>kŒŒa6^—‰;…;&D*„Ȥ”Y"e3IÒf’¦­$I²$Ëš‰LB& áƘ`>»Êa×ø„·,pÎÑë.~öÀž=aJUt/ATÁdO>;{ä¨ÚÕ¿eÍÚu?Ò쌭‘B.Uº( Ë©yÞÏ‹¼Ÿ÷úKJK…R}­ŠžV*‡ Kzǧ'r¨¨ç³Â0×A0,EúxR`”#¬€úg0â½Qß娂‰{ÖBi-UžËž}Oº3qŸI…©”2•2Íd"³,k4Ó,k¤iÚ”IÒ”R&\È”*–ææï9øÈþ¿q¿È7ã~t€‹\™5gYv–Öº‘÷ûT…O?*`3QâGöÿרæ­ÅIŒ1–éuÂ× i†¼7JÜ’õIªq˜Ól9ļvom1GdÜ=‰žÇÿ­bº±$Ëx#m&ØâÒ®¢(¾ àn{,D4cgCnÊÿH `À›Üã:SZîÿ^”Ä€(†<רfªÔ¥Á0œG/'Öã×ñzØóQDŒ0 Ë}×aØœÇ? þ¹gÐXyæZrDžpÀAw°ˆª4j7ßT[šÔq€ðg¶Z%E‰bÏI1gèuq_çôŠãâ =Œàqº©_Wã÷Ù2Ÿ¥KŒF €x¾ë`ðs{ó^R‹Ú9LÚÖ—Ù*0|ãËÜа›uƃ8Þ$úÿ(Ñ0ä;ÃŽQÜ\ÿmñ]Œøn4þ>NœÃîøn]:Ž* ‹?£kõÏØ¬…ƒG­Uu[˜-sb™Ï.7È“9F‹ØQZýÉHQï˜æ8ÿ?‘ßöÿxiÿ7LŠó… (ÉÞ¨—p¯XY4çh˜tÐ#ÞLjÇUšê®»ó1äu|œ¨vþX‰1LJ0Ø'zo£îçD,ŸêäÔ}âC¤Á(ñy¼÷—#Êñz<±>Œ«OD+_î7—ûÝå–‰åÞ¼¹·eõ¡‘I¡#:~T>{œ÷Næ{u°£4ôã‰÷Çó–{ÿd¯Y—tõºÃˆ^‹­•´­$…ŽˆŠ±ú—Nà8Q å§‚ƒ‹$:ÙÏè¨ï [êNêÞ†udø‚£ãc* vÔ/v Y~dCw²Ý¯¯{Y©ch¹Ö Žá ×&î±LÆÉ\ãD&fØgG}ÿxn(ǧcç· àS}œ¶V±OOŒcE·{êxâOàI~<€'ùñžäÇÿænB{D÷IEND®B`‚nixnote2-2.0.2/images/windowIcon.png000066400000000000000000000160511315604104400173550ustar00rootroot00000000000000‰PNG  IHDRJJÐÂqðIDATxÚ¥œy´ÕuæûÔp§7kzOhI$ˆY C;±Á̸í°bp–'¶Iãć¬vc·×JÛ+Cwìvìv¼: OȦ ²pÌܘÙaIhÖ{OÒîXUçô5ܺuë^‰ÎY«ÖêTÕ®ï|{Ÿ½wÕ>¢µ6$ÍD`Lêwö?RŸÙïyM¢-ú.’ú/þMªOæ¼]×5Ñy×Ï“Eòw\7-K§<"‚Ýyr“Jw‚eôÛ¶—P¨ÎOQ`b!Ó§Ë\«CÓcÐŽgÀ2Àt€”–¥Ý׃¤SŸ:óÙ °ìMõɤ…Qá'©-Ý'O¦´ÿŽ PF¦xÐŒ´åž+þmÒ¢v&ˆRßÃÍÔę̀§@ËÒ:%ˆeV–Õ9’ÌRƒ$×6¹,Ëæ[õ%'´”B ,LT,TNÆ…1~ûÿ4p hi ò•¢rŒ”+üOìè|ª}Ci™ˆ€2¦CƼìõMF:åÀÂ$g!bƒèH¾ôaŠ˜Zvxh/Ê‹óºÀ2Yµì¥~E ˆÆÆˆ†N¨JÕfv8`éMw œé Tl”SjF{Œ ${œH¤Ž¤TøÆýH°èV’Ú‹€‹ÁJ«iú9Œ’¥\DP>£;RÉøÆbõŠ.Ú´—-Íð¼ÁêœHBIˆ†@›P "ÃÛV=“½$ÝÓÄÄ€é6» Qߺ «6Ïî}…³6.ïJ$CqŒ‡1…PHãƒrB•ŒéobSà' ¼,1¼Sý[Ol@W[[QÞúf"GÌj#N8hB"k¥@0VļŸhÖkÊöhE ð»n†ŒÒ^rÞ›£ÀTé)‚]kaÃÁ|cÛ¦ˆ9‘BÄТ á9•Ýi§¢Áiat3©±ª•QÁìä" ztžÒ–jÂlÄF”‚Žz‡ ££B›•ØM²³^tQQ\7A7A70¦ýß Azõx“5ôÜ4Ö‰±Ý¡Y7¸Ž—CûptD; Ð.Fy!£âÁQbÜèfbÕ‹ö%5"™¼°Ø¨›.WAøÜÔ=˜ÉÎÁ-ÁªH;d¯ñ¥PCU mg|+Ü/Ñ~Ý´õ¿…Ñ ê]ƒ  Ôxðá§yð‘çÃY>´†θœå•ÅLn˜c ð$¿Ý¹‹Ý{pøH•é£5¦¦kš®²hA…¯é÷#Ê;ˆrA@Cê«bø[œH5T·êéf([Ä,cZÜü™o±gßaÆFÊŒ—)GßË”K. ïãÀÞý˜#ãGÙ»ÿ(#ƇPÊæoºŒ5«W‚UUB¬J(“U e7‘Énû?ñ¨ø‰ñíB(ØGný'¨ ™«¶ÀÀ@qp®Íí3q‘³Šrs„/Ýö»í¦hW(XeŠÖB–¬áÁ·ñßy€?ùƒó@ÜDmÄx`Š kBáì„î±›’°(*¶¡Ï>»úä8¤@ÓoÐ á ¼ … |« ‡çXþÓ5¸¥1ì…EjŽæþçïç]—žÁêUKC¦G¶œÄoDÚnG*„1í‰Ò¯ï8Èç~YÔöœïº£ÉCïÛÎuå[9²³Æ»VßDsK¶-)¯â³ýl=wkW#ƉpC•S-PL¢z1P±)hµÙžšh?àÜ…×pâàòÚWÔç1 Ayï<áÛ;|xÔ<Âi…³¯ dVOáBâ~¶YúH±¯H·‘ÈWélÝù1êGãûðŽ[fh˜ZWŸE¥\°àƒÜôç÷à7ç0A ãÏC0AÌc‚9ðgÁŸ‹þŸ>ú]ÅÕÐ5LPÇèP ¨Ýí¬ÅuN«³zÔÏïÍâ&í#vÄ·íû ¯’Ýit£ŒñCß«GL57ù–z’ÅÎS¼tòíh£»úœ7~%ý«ø«¯>Ù¾& ü9L²Í†[0ŸlóÑ1uÐᦵFDèÕŠŒ5Kò÷Òlä“‘ç훘Q1XéŽ:eLƒP ±”Ñ¿¤àÜGQîAþ&Ï >”ÛïêÕ·ðÍï½ÆÃO¾ A=bÈ|°`6Übf¥f‚&¨% ¡›èc0j™ßd•ÛbÕ#4íP­e3iFeS&ˆF'ëÇ(ÇÕ ë(k’—U™µ—ß^ôë®~egˆ+—ÿ%7~â~&§`t=,T3T1þ|¢Š&± A5(tŒn ŽÂ’üö‰á·ø‹%‡¸ùÄ#Ý;…L,Û’™Œú©“õ§b4úzS\Y´ý“?[1Ň׿Ýï¿S~½«ïÊ¡ÓXí¼›}æ—!Kt £#wį¶íSжam7¥©^t è0 Ы…yÏ¢æõØŸ °M6”ñò3WiƒeÒ¨ñ{scZˆ€ÖE6ÍïDZF*>¿sù× ÔÑ®þ—.ÿÏ?csû_ ý¢ØHëZ¢b!(ñõ}º¦Ùžõ´FõaT©"zå«Ré¢l®+mfŒÉ¨^6 HPB^w ¼Ê2˜~yχi l¥Y¹bš/úo4:úÛÊáú5ŸæÓó¯¿9Ýx¼Xÿ ;§Æhµšs‰Ê%ñgä©kcú2ݵeileåwH«\dÀM$Óá´QkwìT?Œé;»hßG”Z0y9÷ÿìb* ÊeŸ3ÎØËð©ßÄd&‚%å•\¸èFnüÔoð¼F70A“‰úçÂk¿ÁŠ­w3qѽ¬¿â×IHÆ|-Œñ0Ú#t˜qèÑš-…ekwï“Ø™Llq*ÇF®1ÏÒ2ã|F3B?c.RÀh°¬ÐQ;ôÌÇøõÃ+(·hrñ¥ÏÂøºŽ;oü*ªWñ©ÿº ŒÇøÖaÙÖ{8rä(sssÌÌÌ255Éi×?Écω²±죵é«zÕºA›L.>}§é¡^ÉǨ4Ų ýØÕ$jN³ %t (ª¦%.Ïý쓼øšKÉõlñÎë~Dsàñ ÀÂ5«?η¼ƒïÙÁÜÜ|×¹+•2Ë–-ã>÷§\û\;ÅB@ ûset-_÷èÂtn9÷©r¦ÓA)éRŸä†•`Œ uûtE–òÀoaò¨‡#š±!³/»†µ«ãØw”kVœ}‡våž{vvŽ_|‘ýû°gÏÞ·Eëþ&¡R£Ïë–;ô #"²Ëy7ë¥ Yjè§z?e´)uüoϟÃۯ«‰­4«—7Y¹åË´ÌLG¿“GÎb¸°¥$ºq“:wÀÜÜ<^ËCkÍÊËŸM¦u}ŒY¯à=ëÕ'­I݉¿L¬—þ3þšñ­ˆg—@ybŒîÞ?óòMüæñ 6)}6oš¡´á˦íÜÌ4'igX¿n££#ˆ–¥Xµj%[·^Ìé›6Q.—†¥óäýTÏ×e\»ëÒê–Á'ó‡êÜ“£Ÿ=CFõ¸œ‰ŸÆ4»ö‰(žÿÅ'ù×—Gh20Øâw/}‹Öø?µû(áÚk¯æc7”K.yJ)N:éd>þñ[øÈGÿ”oúË–‡ifÏó¦éë™· ì~@‘õ›LdŽûª^ú²ä7Ë)cŒ`ÙAî~W¹ï{Ÿàà´OÑõlòd¦ü³P¥a÷î=l<íT&ÆsÚië)—ËÜ}×=(eqöÙ›±m­ÛŽa`LßX¯î…2û¹r÷šÀÈe„ÊçIv0}=sËrÐ ª·a-ëùñ÷>DµæQ°5 †=¶\ù¿Ù/?„ÉÉI~þÓ{©N>Å%gúœ0z€—_x€Ÿÿâg¼òÊ+ bYVGpnŽaÌ]ÇŠ–§ù·¶W,ÿ}‚>ò!“Œqûu¼‚G|•÷®Çp-aõRÅêóïàÞ}WT®ä=çh¶žô0[›4yƒÃó“8õ"kVÜ÷Ð.|ßOͼ‘êÑÛᬚ ðý>Ü3¡J/­±9®:v=C¿*h´ïóL;ÿoœü§ž2…AØ|ŠÍ’Á9Š3òž fX±¢3æâT9ÙªsÊš*SSÛy°v‰äÀaa|Ì„!LŸ4Fe°U¿Y/þÌ'HÜTîq9-œóò;èÀCÉôkŽ”¹ÿ»ŸåðœÇà@‹Ñ!3×Y [{¨â”VÁE¤ÅüìµÃ-¼©ý¸Ô±m‹b±È•·N‡Ð×=ð<…² NŽ1ï¯!Ý­1O7ýOlÂGL" ާ•XÆwþþ3Tk>åR@Sk^žZŽɦ¶ØõÒ4»žo2½oól¡nod`p˜M›N£Ù g×0(î T­D¬Ê—»ß[0Ç5ëu·~ÆÜv‹h† ÇÛJó¸{ÛÌW=æj²à|æŠW²sçû_ò˜|CQmžBsá8õ“œyñûqÏó ‚M_÷@àÇ/W¯Ö¶Q]èfíÂXèàmrh¼y?ÙþoìÛÍu[Ïd|ÃÙs3s»°Fœ8%«ÎdbÙ ¬à~Í}÷ÝGh–¼sж#œßŠÍܼÐjõrúµÎó§1uºW쉲 Ú”s÷ïž{™Àx¬Ú˜9§Eí¥[Y¶ê®¸â=   ì2­V¡¡/ell”R©H¥Ráúë®á‰'þ/ÓÓÓT«U>|ÚßõµQ®cõk;~Õ£·1÷½z˜¸Óù§óÇw_ù;f_èÚW¶G¸öº÷²nÝ:–Œ/aõš5œ´öNZ»Žññ%”JED¥ç_p>ëÖ­ ÇÀâÒ }e6F¡,CÁîq›oâ¿-Õ‹QÚ ‰©çî·Ä¦R±¹kÇag¬¦Ì±yóÙ(%8ŽÃØ‚1-ZÄÀ@%Q÷ ð}Ÿ¡¡aÖ­[‹Š¦û‡ößÕWfí (rg½·Ûލ~6ʲ ˜À V¾Ÿe‰ÍÄÂ!¶ýõ‰üpÇØ9ûÛd_£2I4M|ß§^¯'߃@S«Õ™œœâ­·öpèÐ$'Ÿ|2ÃÃC(¥xtÿ=L7ö÷”¹Þ Ò’#W_6u¿E¬ŽÝ9~[­·ê)§%îz)6AàsÉ9#üàoWóý×Ú`®,P©T¢‹Â¶m\×A) ¥Û¶pDZQJqÁçsõÕW122L©\à}wô¾¥ÑÐòzn鬀*¿C7¢ýâ8ƒ0ä‡0–²iy> Øzö(®¹‚½ó¯pÕ8‡eË–âº.J) …Žã„ª,‚뺌Œ 311ÁªU'²òÄ•\vÙe,[¶ ËRìj=Ã3Ïä^·R6h-´z=®ÊÞo–·êAŸÄ]Ð@)C  ù@‰çùˆ(æšÃl¬ü›–\Œ5è³ný:lÛN®nÉÈób±Èâ%‹8ï¼sÙ²åB*Êå¿:ø“(ËÐ{Œ»_¾?> úœ°ß#õÀk¢,zÛ0±ñƒQ÷>Væ[;>Å+wñ¾¯­O s¸Æ÷{‡AaBÏbáÂ…œyæï µavvžÙàOúEWÿЀ›3ë…OaŽ¿ƒQíן•ê홇o‰ù!Œ%6ž¯ÙëmáëÛ^Dzm¶n½˜¥K—&A­1àû~”oÊÞT[+DB»µ|ùrDF¥„öm£æÍv×l†ï`öþ•> £¯ýŒ¹íѾ`Yù¯×XÊÆóá«wγgÏ,cóæÍ¸nÚ¦´Öcú‡`QŽÒÆ@kêþ/y¢£=‡ޙޒ¾?# ¤Ç©Ré¯zʶ1ZzÒY‰M£%Üû£°xñ&&&ºR$1P t= …"®ë"¢‚c :“½p ­UÿYéó»¨~·ÁR}eŒ©äî݃ýûR*•X´h!•J9ˆ´*ö+~bcÛV®º¸nxpnâN Ú#2_ª˜ì÷6Êý²¾×À²4Úä'î,±¹tŬZâ3T˜‹Þcè1D"›”pÂÐÚ§:?KØV˜á, ©Ù3> œõìÜ&[õÕßV©~Kʘ÷Í$ú>ˆ t3w¿ˆpÑÒ÷òÿ±È§o¨3(¯òÄãáy­mº5uçÚ¯Ñ:øsïA·¦i4š4›-,Ë¢Xèôã|O!bÂç{ù’ql’„ÍîúSrŽn ×ô¯”ƒ¡ªâîô5§Ÿ,8öküøÎ¿£Z«qùå—3<<œš@bÚ¥(i±¼Ù7iìø[Êó/R±k‘Ú5 ö¿Æz.NÎáyªçd&U&D„èÈBtÛª|Fåèn¿ ØŠg½¡Š#ÏqöU×ñÇŸ¼Ç‚#\z–°~Ñs|í+_ä¾ú5vïÞ  Û¶;Ô2]•æû>G¡1;‹ª7Ô”\(ذf\sý…-®¹åúäXm4&|ÝoÚK’g«¢fç†ÕH"ª¯RVôtTuzæüó÷R©JYØN€R!ØEWx×yÂ#Ͽɗ¿ò?Ø¿?ýØGٰᔾ*^­Ö9th’šÇ°kxÿaÝD(êÆ5pñÙ‚ë¶/— Gf„zO¢ ±/e·‡-½)èpT_‡3šˆcL±ãË …ÈîH\·$† ×_ªxáµîØöÜB‘ÛnûOŒŒŒtßN¢‚†FÝCÕ4cEᜊS×€eÁؘ0<¢:€VÊ„.KŸ‰£]ú–cÔ¥ÃFeK#i¤#=>VS¡+ì{Ñ]f‚tAp\r¦Å³—¾½½É¨×ë¹@Å`5› ^|ñ_Y£2¾R(•…Ñ Üçº`[á…n¾í}<þ[ÝPˆh\«S$±SÝ[£bI¤[íÂçP±êõhTNc‚d:ë.º†Ëð¾ß-°ø„ ¹àÝÊ¢E‹rO¯µæÀÜùƒ;yhûù“KgQ–E¡Ø9Ä“NÁ.ÜdÓò 6šB¡—EOßc\B›¯ŽvúGÇЋj£-V¤z=Œ¢r ‚J:ÝˉòÕ&/í#XVOØåà Zëä%ûÐ_ÒÔj5žþ¶mû>?ýÉOXV>ˆ¥¬è^$q)Òª C½ #æXù¨”¹ÉK7µËùã?Sª†„/»Dµv"’ûZ€SpÑB¬N?Ƶ#oÞDÏJÒÚ=œu x“OóÏßú+V]ÁÚu(—KT«UöîÝËÓO?ï~õ/½ô2‚æ¤õ‚Ê„Jñ«\64¡?4ë±dÂE‹M£Õ ¨voÛ=è¥zQ}LlÀãƒ-…Qv8cõ ”1AdÎ:_$Ûµ'`dÐP(W°ÝðeŠÔ1ð@7[¼þÜlÿîoPî®ëÐjµ¨VkÔëu<Ï ×°„²Ú3x­ð¼ƒïC½f¨ÕÚ¢Á¦h102Íì,x9‰»Híe„<[E°NF‰Ð±„Õ’aý­êý6‹n2à2/iüâŽ{ؾóüáûfÝxÁÍðP.‡Aôá#šÝû †bdt„beCCCy*c µZùù,w‡¦kLOk´m`æ¨æ•·|ÊÃëÖŸˆÒ›)¯a«I”ò±r#ÚФH̦ôÖ•ÄŒêŠsÒÅ¥öª¯Ãù÷¯°p¢D¡5–› >P}“Õg_Æçâð£ÛoGy€‡g {Ž ó¿¾ÿÅÔ¨†º™¼ÊÝQ=ïsëÍŸå›÷µøìï;Ôš†þÏ?'×ú pÃm;)8Mt°”ë”rånW«§«HÛ­l“f’Ð(f“r"Få·ÃZ1ײ°=͆}7*\t¸úþ,,™M*ÅíDÕÓ@IRÌ-- 6èŸÿ›Ï³|óm<¶ý®Ü Û¾°’}qަ·ˆ¦7Ë|µ•#!)¯Ý¡MiòH&{ÕÿJT\(ÑBˆ‹²z¿ö3”8ÜPx}ÞU ËcÃ’Ô°µ„Xe°*©­Ü¹ÙÑÿªöÊX‡Y0:ÀÑæÁž×û§¿Üˆæ}6»ä1JÂûT™Êĸ)Fuð¸@Ó^ ´ùœÚS-sX[,åô^’«Xåü¨V7ú”¤–¸“QqŽŒ Ú Wß@±aíR틱âDO°ÏNQ°…ê£ÿ¾ÇèÙ´—h$oLÙ¨p½“¶Mb#ª€Á ”Í·_úϸª„k—(Z\«LA(]ä1æøL¸£<²ïn&뻩zG1–ÇȨ…3Xcdd Q¥bUl«y>PXJ+<›K¶lä[ß¼—‡ö@‡%ù˜Ð¯*ª@Øö©iF+ÜQD‰EÁ ™¥Äâ@motíÔõIöŒí4L»Ø:^_ A#ªhŠÊùuƒZµÊÔÔaNN35u”©Ã³ÌÎÕy¬ù20±b)=‡/}e;‹±háK—Œ1VXÁÕï=%e—Ü «ìhTSKŽÄ¯H'Uê­ä3.¾~õµ·˜›Ÿ'»¢ÆÑ™ÆêÞ(/<½‹MGiÔ óµ~SqdZ˜Û=ƾqVT!_ ٮʑY(Fr¹Évªž‰ÝPÝ$Zh+ZJÉÆH{}éZ®)<¾ZkqÞË£3Tfàb›B4ˆv›Q)¿Jtà™Äp—´ÇË"EåüQ5S»0]ô˜W”bc¿$í·¤ê˜ñ2ŒŠ—Iìhz™¦4›2¥ø©¥G’ÏÜ%šbSã¤Ô¯ÛØIí†d—+SÑÂ.‡ÎjÉ4Pô*XG:C…ï†w”7ÓÄŒR„%&aÿ0›x IÊV˜ç•´4³Ò+u¬e•Ø(dñ$C[mDÑHŽþ›,“òÝé˜Ir@ëúLGíq.K… ÄiiXv´¨Cj±­\rXž€ÛäÌ ¥Ý„”)hg8Ó`%#›)Ñm»åŽÿ…Ñ4HiC©èŒ«²I«ø¦…d‰"±ÂÙPì.3`z2¼-‹äÊ’Nµ¤B™”lÒ^‡³] ”-ê.®I3¨ßãê4òù茪u%øÓ×iOݪOËÒ(² OƒÕ\§Ì=žë¥jBÄôà8_›éÊæ%ïû<I2~ɇR©M²ƒw<òd'œ^¿ÃöÿUU u äIEND®B`‚nixnote2-2.0.2/install.sh000077500000000000000000000006251315604104400152670ustar00rootroot00000000000000#!/bin/sh package_dir=$(cd `dirname $0` && pwd) if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi cp $package_dir/usr/share/applications/nixnote2.desktop /usr/share/applications/nixnote2.desktop mkdir -p /usr/share/nixnote2 cp -r $package_dir/usr/share/nixnote2/* /usr/share/nixnote2/ cp $package_dir/usr/bin/nixnote2 /usr/bin/nixnote2 echo "Install complete" nixnote2-2.0.2/install.txt000066400000000000000000000022351315604104400154700ustar00rootroot00000000000000Welcome to NixNote. This is a very basic clone of Evernote designed to run on Linux. See release.txt for details of what works and what doesn't work. =========================== =========================== == INSTALL INSTRUCTIONS == =========================== =========================== ********************************************************* *** Debian or Debian based systems (including Ubuntu) *** ********************************************************* 1.) Download the appropriate version (i386 or amd64). 2.) Issue dpkg -i ************************* *** RPM based systems *** ************************* --NOTE: I used Alien to create these, so I'm not too sure how usable they are. 1.) Download the appropriate version (i386 or amd64). 2.) Issue rpm -ivf ******************************************* *** Portage based systems (Gentoo, etc) *** ******************************************* Coming soon to a Portage tree near you... ************************ *** Manual install *** ************************ 1.) Download the appropriate version (i386 or amd64). 2.) Unzip the files to a local directory. 3.) As root, issue ./install.sh nixnote2-2.0.2/install_plugins.sh000077500000000000000000000004301315604104400170220ustar00rootroot00000000000000#!/bin/sh package_dir=$(cd `dirname $0` && pwd) if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi mkdir -p /usr/share/nixnote2/plugins cp -r $package_dir/usr/share/nixnote2/plugins/* /usr/share/nixnote2/plugins echo "Install complete" nixnote2-2.0.2/java/000077500000000000000000000000001315604104400142005ustar00rootroot00000000000000nixnote2-2.0.2/java/.classpath000066400000000000000000000003501315604104400161610ustar00rootroot00000000000000 nixnote2-2.0.2/java/.project000066400000000000000000000005771315604104400156600ustar00rootroot00000000000000 EnCrypt org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature nixnote2-2.0.2/java/crypto.jar000066400000000000000000000460231315604104400162230ustar00rootroot00000000000000PKYRNDMETA-INF/MANIFEST.MFþÊóMÌËLK-.Ñ K-*ÎÌϳR0Ô3àårÎI,.Ö H,ɰRÐãåòMÌÌÓ‹Y)$Wè¥%å饿%U”è9ƒÈ|^.^.PKS”U×GKPK pmMDcx/PK pmMDcx/fbn/PK pmMDcx/fbn/encrypt/PKˆPNDcx/fbn/encrypt/EnCrypt.class•X `\U™þNæqg¦·4MŸC›6-Ò$tJhkI°Ú¤¯¡IZš’ÒÙÞÌÜ$C&3Ã̤mJ·ò­Ä|TX5*¨×I´Ú]Ýõ… ‚¼u݇®»«»«î*¨@üþsonBçžÿž{îÿøþïÿϹyôÕ/ŸШ–¨P˜Ÿ8ëéÎÄìL"?”+Æ6gZe4àW¨¼Ö:hÅÒV¦7¶£ûZ;QT^–ʤŠ|µ+»ü­Ù¤afµ¥2vÇà@·ßmu§m…ª¶lÂJwYù”Ü»“þb_ª °°­¼õf…€UØf¦µû[V¶M8ÒY̧2½ÍfóÙôé–Áž;A%æˆ?si¨6¾²+„ù jµÌ/4ŹŒÃÊåìLR¡¡öLågÚs7G°K T+œ3±¢-›é5±5 ¡bÖY/~_/ã·ø°\VŸ§0·¶Ì"Û=Ø£P±¿…^Šy}·ðl1®q…™E+Ñßnå\ˆ#½v±µÏÊl¦mñ¸©L*K8³1÷is«ˆ÷•»·\´>‚Õh4p1-žm¹‰K°FÁèÉæ;¬ZuvËYëL¼ D1i÷Xƒé ?Á‚}e±g=CÚÇ;y·SæÏ=»>“ì! Ç‘_PÆŸøÊý-(¼ÅD="؈V-Sî¬4± ›™H‚×2T´ÉÑ%µg·­µnEÜÀ¶q]ƒÅT:¶1Ÿ·† &.Çv&1‘Í í` RyÜ‘v˜¥NäÛl+içÃØ‰]®˜êÔP¡h˜èÄnÃÎçæ9îЛt¸H·mk€9d5^غ«µF»]ÃÉtz¨¦Ð—L'kºíš55©LMÚÎôû–EpöØ«0§Œ.ûq5½ÍÉT:C‹åÜ¡¿×˜ø `–,q*ÔM^í´æx™©¸îEûpQzD™::Þ’šÝN&V:ÕKfæ¬d’k:l;i³„gȽtóå#¢L ¯îD ˜-Zi+¸2i SôI\ÆD9Î;)ÚEû$tHòä$*vÂÂ8NByש=ƒ8Èå-ªˆNô©©Ë4á›ÂÆä80Ñv¦­¤A8æi8 v뿜ìÇÄcaó &ÞŽ©ß¾nÐJ¦åÌ…|å>Qô7ãÂ’N ¤Šº‘Çeþ6™¿]ºR|r¼ÓÄx_蕊”ÆÚÂq²9,itá6ˆ¼8ç1uZ0Ò%¹ÚYÒmŸ´å{BY-ùØõØ¿Ü=aWk£Â¥e(X®ÊËm÷*,—éÃ1­/+äìDŒjwZy6°¢ïäD÷`N¦ùöMk#ø(>fà„Â"­±`'ó©âP¬Ý.¬^{Sª×.°ÞÈÏŠV&ÁÌ^|övX^K³û¸‰Oà“Là`.i©& |ê2ð)…¥gzßi'òvq»=ä¸þQ|ÆÄƒxH¦uJ~Hà>ÇxjÃ8)[âÃÒ÷·”+è¾ 0›‹c›[[bÙN•EðEŒ(¹äóühMåú¤îǨÂʳ=m}³¨û²‰Sø }”³„BKm|> ¬yÚ”{cº7Ë»¾)©ÓÍHá´‰ËðfÑÿw&¾†¯“RÉì–TÆJAS úðMß 7§œ°sÅT–-åõA(çtTîÉ»óV‚‡¤ÇEÏ÷Λ‹£ÆÅÚSÁ“²úû ˦Zg² & ФµOËÚgV—]{&h“^}N^ýœçT<¶{­tK:›èïL±'½ð‚¼ðC…š)/´XÉé!°‚sV¡ëËZf ßbCgÒsV~@áü¶×¯IöŠŠ6øê×,v‘B¿S „«ŒÚ)Å"KBSq¼AMg(õeìCn7S4¯è~mÛË>ß^ÑöÌuçµ½nj¹ª±üª×Hjó¸·¯ŸN.]Þöz‰ä¢·-·‡ðëÉ]bÇΛ6Å;¶JeýŸlrÿ/Gß2ÍÀ9öüÎD³"xIXôûIçøŽIÄ1’ãg93‘¶­ünîö¡ÉgŸIë›'öŠ›;CcËA)nf´£;··v®õ|ý¢ò±)¿4Ãr½GŽ&ã1kUƪ Büޤr1îa—4FTa¹|œ5ÓTç¨Yα²ËJÚzÛ½<¢f«9†ª" €Å3E»—UÍUóØŠŠY~Ã1¯¶ü7ÅFµÀT U”;qa°»à}‚ÄϲËåŦª–ïÚ¸’_CùV]¨.ÆSѪé³ëí9Ò™Ì'ì-)ùÊ0Ý/¶Uò–1Å>È’l~òjð.Æ‘êFz˜B@?ê0ƒWÓYÀq&Ç0ÎÁ,÷åá×J7BåÞºÓ¾ž}oF}ÝâKfcìXeåˆÔWÍ+aÁžñ¹[*+G±Hfn®P‹ëNß?öL} ËNROÛ^¢u¯¢½‹1¨ægÍùX‹u¼ ÖkŸj»œ_¡=\ p!½:‡«j±’QÔq~|¯`¶JU5—Sü¾p¿ÁEcžÿ²E÷¬ºh±öa£XÛÞ0áÉ|F ´òÕ-Dd+ãŽc¶kê;¸¨Tp~=.¥Z“ï6¡YÏT¸Rö±âeî`/ÃgðÔY!¢ãŒÚG+¢ñ:¦`CGýE%¼µÉõŸ6,έ ,žH® Feb^ðÀ(¶4uQcmM¡hH¯ Gç˜ùvT]YÂu2jœæÜ¯„š"Ѱ/ññno‹”)ò±ÜE&m"p@ÙùȘ‡«±o#”èl7CKú$!° ÁµØ~>I#ÃÿÅõœ€ †HßRZJèt¸ZÀðqMM+ŸX±ù4@[]衤Å8zùT@Úˆ>j i`Sœ Ón5­¯ Ï)9=ÆåÊ`ÑðýŠc?oyÕyI³U]í{Hpn¯÷1ÛõF=Áhò7וp¨)Ðõ»b0(ázÜï5J8v/Ö £2ŒK¸ÉŸ,áÖ=“nî¸3ôÍ}c?‘ñzIÐɪwOG{ˆq_O4އcXJNÖá&RüŒö’î6’îv~^ÞÆˆßIïDÇ5Î=NÚ‡4žRÕy—p&ƒÄ|ÔÝ÷h´—òÓò½xWա理µ-¸‹+ ÚÜ€h´¯ã[wS kŒ/„Œ‹Âã~býï¨þG˜7’ÛóÃ4ÿAü•ƒtÅ šï:…{öVà¾&Õ‡Fñ‘¦@4Ð è“¶%üõ) ï„?]õÙ|¾)XõÈ(þ¦Éˆ~Âé/áKuõ•¡|•ÀÑP +HŽâïOŠž¾=ŒFGzlµŽôÄ0–8ÒSØëHÏ#âHÏK‚t­ {xx”ÑâáOÆ~ëdä‘MÆxþ’ñ«œ¬íc;CŒàClKa›ú›ÔýlL°6>mø$®àa~>…½ø45†ÜšÂ>KÍŸc¦>OÍ'q#¦æG˜Ó/0'%ÕP)yY½Ë«¡»ð#JZú1«Dü¹ÿ„ŸæÙLÎ?ã_˜ÕU|ò¯ø7Æ·ËñSüŒ©ØFòÿ;³¢gAü\×Ð^®ýü'¯ -ý¯Zú¯‡´ôK^oÔÒóz§–þG3G³1Æ NÕ9…wÈ߉xœ¿'ù{š¿çø{A6’ÿõˆÑJ%Ö&1~å#à£~¿™ÄŠºhx¿e³‹œlÒ…Hj\æH I´ô„DKO I´ô¬DKÏ I´ô¢Ä€ü%f¯&ÉUêq=h’\EžÖãš$W ôx7OOYzåõ«”¿Æ}dùû&Só-’åQlÆwÑA­]ø­<Á–û$­|Ÿíð)ZyYgÿýy …%ކÞb=¹Y0“Â,Ú{'™•ÒâP‚[úg=YÖÍRòMaKuÆ0 g–Á‹¯1(YkCøà‚Wƒ*CWÞ0ÅRm§ ìU½P ¡¼UÔËkºmÈs˨8ŸŒ*C$ß¶y†vtÃd苽ϟ ±â؆YÊÄ×8ºÉw.wÞldû„ׇôqôžÁ°²WuÄŽ†ú©¨„G‰åâk\a€Wü­j“v1åÆ9®-Ò˜AÃuŒ]ìÖôr5W2-[dõ*!ëµø7q‹c”¡ûÄ›3Q¶†1Ä<Ý® ²]R#'%4Œc‚Á×óm6Å0Ý&ü¢%¿hó`Š oˆSƒ¸­áN£GËN=ä&îj¸‡ûÄ€&æsS6ùAH½´ù‡aš8bÕ$šf˜a%—©©C­…¾“ñ!ƒÇ3 á6n ³xÂà®HÓ% ‘ôÓíMnCÞÚCÿyšµ¨BAžÍšYt Ë”DmS„ÞJµúŲ7ø¶Ø+ S’WÔåU°EµV&%°âèÅíE½Ò 7ÇínŪÙE±`H²û›¬ž’å‰7´È_itgHr:%éI$„;qÏ÷†ÛGRmá'©µt zzщ®f2ËCiÙû…àú!!Ió¯ðƒG'\©Å„’ZJ¸Si%¡¦ÒîP4­N„0¸žñ¨{2ªáÆâiõF&B“†Œ}híÖ¤%¤íµë9÷ÅâB~Î@”!»Ï¸å(k«¶/ì`]¶ÚA5ðo2$¸›w¯ X*:Òå²a­¸Ü÷+ÚQfè_r¤,3X…Êo¶.žòÀ©RX=´E+p”ô $FNñ[§†èŠª‹8.™ˆ¡?†Lf˜è-rV)6ÛÍšð¶yÍ 銲¹»Ã='<Ÿ\Fƒ=ǧ>T.è˜Ìs©äQSµýY†±žŠ ¦'|å]#ÃÌŸÌ:­íjoyêlOÊ&rgn7U°¦Ú²ÞÕ‹xÕiH´=J}î¿$–ŠËå®ã†Ü¹¹w!MÜÄ-£!‚MÞ$™ÑB7E:²AL·q×ÀêóL~WyüÓÂyøë‹–â\cÂiO›˜@–áÿI“aò/Õ30›aøCªpûÍoÌ?QUmÏkNxHv¦>¨²Ui»Ê§|7D°§êÐø{‡xD Z6íê¶êdİܣöõ¨½ƒ·j]Jáé0á#G BO› ¥Ã—@V} М¬(ù0ÉZ¡›02Y,}@ª8ý ƒïtxš~Æ‹=ÃYãúœÄ(Æm#C~¶hBê~ŠIà2®h–«Zä-ùB‘ìôG\‹ß#õùÒ7ÄCÁâq阜-™¦Ü[C*öñ—ÈÄ^ié\‡àT:‹î‘pŠf`‘Ô,Ý€ý@Æ ‹`N'0ûºÞ,â±.)LW~PKšÇ_ŠÿPK1mMD'cx/fbn/encrypt/Base64$InputStream.class…UklU=wföÎv:´Ûm·RØ-ÛÐݵ(V°¥`kÕ-[Š¥(¶Óv¥Ý]w·†þÁÄ£ ¨1bmÔj¢R@AðmB|DM4&MÄD£ÆÄD©ßÙ–Æ4ñÇÌý^÷{œ{îÌ…«oœ°† ‰¡¤wouO¬ÚŒõ&Géê&#eÖ­*Ç#é¶tÒ4†U( Ew÷ÕÑxõ†èPÚLÎq3pÚï3ØNg"žŠ¦£ñ©aòõŒô÷›I©«‰A·µˆH2dÇF†Û¢M£i3Å  EcæŒKë¡Ü{"d!OˆŒ$eõ™TÊè1Ó”º!‹¦VDfº›ÓW} ƒAi¦Æ40xt䡿˜?6,‚sE¹Í#Ã=f²Ýè¢Ü‘x¯1Ôa$£BÏ•ô`”Z)‹ü/rõ4v”€ðÌ[SƒŒbÑ–;‹ôëÈ…SH¥:rÀ…T®ÃaKËtdÛÞ YЄÔ¡Ú¶ëu,€SCjTTS½y;Ó±+逌Þ^3•*¯apT„]M"9]д¥Þ=­FšUÅ ùóôN ÐÒÇ Wèµ–½½¦}D*ænÙ2ëUu,†WCÖëX5¢ã&͸åZ[+ˆ%]Má°x2ÝmСÛómÒÆ­×¢iMD[Áa'" KÂÉd…¥B_zÖ9…åAi Å„‚ÞÓ¨œB­èM¶z ŠAøCpð‡¡ñXÄ"ÀÁþ(šù!lâ¡•?Žíü «w¿ÝÕlï™Þ…$À‘pÉÛÀ§iYSQÇÄ›M‹š3‰Ö:¯uó¼V*A—€Òß”Á½^À$ sq\µ4là(Þ¶1ØÊÏ:#òZ¹q‚ ;µ'±®Nñ(c(ù<Ê¡öýÛ/3Ÿ¾è=HöRÔr™^KNãæª@PBËâÒ¤j'[;*¹1“®Ñ7†<’k}®ûöÕºþ>>ý³ï(ø\!¯Ï*àUǧ¿ðªOQ!yNú”Ö*0|ï8¤É3¨ïtßv ­çÅcè =-ãÂkO´˜–’Ã( %䊌#Û:N—6ì$‹Ò-Ζj-°S¨Ú†Lš¥ãpZ Xœ‡é}vµ­¢Ú,^Fˆ80•?þ Üü8 ø³(âÏ¡”?åüTòQC¶ÕüU4ð×á'°hÖÉO£‹ŸÃn~ ýü òw‘àïá~þàâA~É÷$ÿcü¼Ä?Åÿ ¯óÏq†‰÷ù·øˆ‡¯ø÷øšÿ€ßùEüÉÄ_ü'&ñ_X>ÿ•óßXÿƒø%‹‡»èÊÒ±gxè¦/Ýí_ŒlD›ÅÃB”¢$™Öl'IÁnôOEœ>Ë+aË,¯Ìòi˜Åá•È¿Š";+”.Cñ_ûš0\!BñËt÷Š—•_|Av™ˆ(HzÇIŠ7©ñù¨‘ëè²–O¢³ÎáqŒ!7äõ(ÝÇ¡ö hår¤Éý ó(¾ñéo<Êäì •ŠÏŽš ®º «nä©ù𩔪…('{¥êµPi´ëÌÞÎì´¦R—5­vY¨È¨´P þ4bn‡5w.WÀiÆBF#JÚt§õ)»‹àƒ•ŽÑߥYÿPKõÚ PK1mMD(cx/fbn/encrypt/Base64$OutputStream.class…V]lUþfwÚ³]¦í¶¥-´ .¥àvZÛÚÖŠ”?·Xm‹ØZ)Uèìîlw`;»îB¢˜1ŠÆÄ5Õ‚!!>ûƒBôMÑøÀ»‰F}‘7ôϽ³Ý®XõaçÞsî9ßùÎϽí·w?ÿ@f .-Ñ“]ñˆÝeÚÑÌ©t®+ddÍþ¾Öù\:ŸËeLƒíTMÇŒF—•êÚk%sf¦ô\A9{§b¦å°O:•µrVÊf1Ìg‘|8¼Ì³”á@Û„u)z¡ AC-9¥1 ëjÁc4?13ãF$ɹÕ§¢FrÂÈXB.(Õ\Âb2­Ãÿ_ÆîTžÙ6¬Ö 7Ôê*˜ä& •(»ÍÊœÝ kà»5TÀ+vmÈѵkМÝCª. UŽÝÃ|ðxÑ‹G\ÚúU kèÇ£ÜB#5³ÙÖneÁpÛTH <¦¡^•c9#z|ÄHËv(X»ZBìûRÆÊ‰"eI½C'£¦Ó>Âã ꖽŠ'"Р?6x1€! ;±KÞ§a?Â+Ìz.8š …=aû”°„§BmÂgTÃ<½âÓãø„¥SXø<#|Æxª‚R7áÁ³\ù°}ÂHZ±@4adŒ({À²N}1#gtz±ωNâ:†(iØ3]œ8O©œ6Ê%ÌÐ)‘½;iÚb솘IA™£ó±¬‰'óÙ„ƒÏú  a…ˆ–Í Ø©\ I¥ÍLòT mÄbf¬“s&SY9Ó¦†£˜#4£!ŠiU3›Ÿ5W®Žw,•ÏDM¾¿LjƒÞ)¸ó­ Û¶™L٬ক¶›ÞÍ/†—æAäKŒœ\yy­c)eM®µbtåZ%Ï]b¥ì+œ×H½‡‘yÜù»–¥ÝÅÅ+éíêê¯HÇu20«i/ÊiÖ³Üà˜¡ Í€Üñ¸0ˆktÀ”Í &HGôö%lÔý>Ïé9zª{ݯ–ˆ-º>–ËY¦´ ¹õºg[u>Š.>: m§î_@·î¿Šžl<Ý’g§:‚2:ŠzšF+è£vQƒÃ~21BqŒÓ &)ƒ,™OÀaZÌ'RÈGìDÁ\ØÎûƒ(¿Çus¿%üUî‰ØË o”‘Uµ£«j9ß.†ßÍG*K{déÎq—¡[\…Ž9h¼„šñħJÇxÙªOÎ#xXæê4¿;Κ (ÙE, cþuJ#Vñ¯û*ö.âIá¢Ó´(å<shâE÷ _Dðñy9B±ÐÁ˘eí¶fß«§{}w.aß·ºET·ndç2 · ˆÍ%ˆPy {&kÇ—0ñåJ'PÏ|D¯ šNÃG¯¡‘ΠÎr'_Ç(½Cô&t/Ò[8Aïà4½‡·é}œ§ð Íá}ˆônÒyü@ð+}\Òå[Å.ߤ¼×xj»\ òÝ©ºî`ÔÕ(;4v‡p‰÷e¼v8ªÙ¶û7pªWÜý<Ô>½Ý_¯N÷.bꬪԫ.Þ»½’äF¾0 O9ÉyÔð¸×ÒU¬£ÏÐÂk;]—dûü"Ù<¯É¼ ÉŠ íæ’5àïT™kjÿ@™¢±5¿Hÿà~†‘΀èßyô;Cµå¾¹ –ÌÓ=§_ÆßûÕ$žúŠSùUtAúÝô¶ÓM™†æ„*¤±]qu‹¿1ÑU¨°FØ×鋈éKˆëŠxøZyŒDeè{~(~„‡~B%ýÌü¥$\]!ÿ±J… ^DåGe»JŒÝfìßPA¿—`z‹˜ ÆtÞ˾R¹|šî.ÿägèn ByÁK~Ḵ¯@/’¨ø PKV›}É PK1mMDcx/fbn/encrypt/Base64.classí{y|UÕÕöZ÷L777ä$p!Æ D “T¸I.$Ü’&±¢(*U«¢HQ,ŠS-ˆ’(œZ‡ªZ«¶v°µZëûv¸¾¢æ{ö>çN¬}¿?¾ß÷ûõ¥®=œ}ö°Ö³žµö¹y_úò‰D4‰?2ÈÁäiÚT¸ºÑ_èó7unîÎòvùJŠ R™ÌµÞ ÞÂ6¯Má¢Æµ¾¦ “«fÑÊE‹ë«ÕÔ1qSÒ쀿+èõ—zÛº} &&&½²fö¢ŠJÑb´**E‹I»¼j±èIJ‰‹jêWÎ]Rcwa¹‹VΪ­,_°²ºª¦²Nô:™œKj«WÖ•Ï‘³™LÆ¢ÚŠÊÚÊ ÑÌbJ^X~¿²º²fný<Ñ]é+Ï_R^]·²®jn 6:KtŸ‹Éj*—ÉÑ¢íbJ]\[9§²Ó­”[®ª™‹Îêè¹ë‚­þ5eN±”sI]AyÝì*œ:yÙ¼ªúÊ•u‹ËgWŠ7•¾¾¾SèŽY5Ü݇ WÖÕ—×T”×V¬,¯^<¯|Ve=“cÅ,¦Ñ'RIÖ£Ô•á3nj팚²ÒVGÌÈÔH_ÌÀ£½]]¾Î`+ÌUÑÚåmló5C1Ëq¬éMm­þÖà &%güR˜iv Ùç¢IáPQmÌnÃ$nšL%Li;®ÖN_syxÚº 7ØÝ%'YžLuS>ˆZ©›ÆÐXQ›î¦qVm†›r¬ÚL7·j³Ü”kÕ*Ü”Gc±vu«ßWÓÝÞèë¬[Æ 4yÛ–z;[EÛîLÂÚMëz;ìvâ_°¼­£ÅÛèfµœªñBÙF CŸÉ羦@³5@Ÿ.Ïï"…jÜTM…ÐA°¥W÷ëepô@MEÁ@19+f­˜U%–qa÷õn:Ÿ–`™Ñi?€ÅÅÐ`K§Ï7ksЇéýÝíu­kdK¼¸ÜMóðÒ»ÝM8HBWgÓ¢Õ«»Ä.¡ð`«ß+΀yD+üÈ5¾ÞêŸÕ½zµ!´§[{d*ȱ ío ŠÅÄ_gY¿ã—ºÈGk Z Ðô3ÀM-ÔŠuúÚ½P›´x•‹ÖQ»Ampã(^zƒ-nòScÚ[ýÒUb¬Ö»©“ZÖˆdHMïwCB1ÝB£µâ½nÚD›ñ^G7ÞKÇ{g{ËG—¸i«€ª»ÅÛU³ÝNïFð^¿¯%–Òà*Æÿ*:ŠÅ[¾ö¯¡ÉÙ-ÞÎM^I; º*V“Ñâ$W3 É™=¾ß÷ãö×Ï0€ÛÚg˜˜síahÎÑÖºEøBÙø3É à©ÜÔ䳜Á o†w‡W«Ežµßè¦ké&¦¼³L^Õïì©]1cÂûKëƒne¤¦»­mq ÕôuFvâ¤Û˜FÌöúý`Vxn_–7ËÁY¹ÀÝB{…ó޵圹­ñK ú6Ó°ð.„ñÊ;;½›u%ŒòyÛ]´j º‹id¿~?:~ðt·Xñ;LC£ ŠaÙ{Â'ì¶¶nií(q0~ªƒtHLuŸ€tÿS‰™ÀJ‘‡òÜñ³ÜO‡„ø®›¦ï16v¶#ˆÓŠÕ)!z?qÓ#‚ô´¦¶@—Ol戋£#cÔßn„¢ðøñ¸ÁÒ´xtÜMOÒ÷±` ¢g8RŽäÇ^:)ŽúØÞÛŸ¥Ä˜gĘgcÀÃqô„Q*‡F°aÐóL£Ã[\âïêîèt}Í•Â;0]d$ÖoôÀ8#ª¿°ÖXR,F¦õo Ì´f‹xžUýÕfÅH% fVŸÝjÂ}W÷A1Aw7žŽ­þ:G„7½c°XG3èÍ8Ö·t6ÚÁÒ";$¥E5Ö(‚ ~å¦_ÐÛéVUõçû½ >‹vGrƒÊÎÎ@§‹vÓoÜôý Ú_èëêò®Áåô»â;ô{‚8‡o“™þYgHl‰¤V#˜)m>Ij¹é/ô1h*æÜõûø öÙD¼Ö…*VÌ2è¿°îéÓÎênmköu:éoLe1&ëÊ øÛ6g5Ú}Y«;íYs—·vtà…ü¬-­M-Y­]YÁîN¿¯9 »*ÍrÑ'´Wˆº)DŸbUoG‡Ïß 5q¾qF—½21Ågn:%”ë ¬‡NúÜs6æô èO0êÈè´Umm¾5Þ¶òÎ5Ýí>0ÊÂŒT~˜=W‹wƒ/ËqÁVT2 ‘gaÇ`$ó™9ýØ"ºÙ/i¯“ þØ a 5Á–ÈtNN`*`=A‘5¦9Ëëo޾!:6¶¢*%:ìGcš]œÈI»‘,Çœf B0àdÄü âò²hµ€ܶíaØp/§¸9•Â@«í^ê´~ ´¢ŽíÛÙãæ4 ²‘$=Xø]*ÂÊåLƒ3âùusWÐ×îæa<@•m tlŽÆþØU«úéªÙýèþSÚѧq’«•u"ýî²ÉjŸ_¤ÐÝA‘…€³D‚OÂP\|ÕRÝÀÞj¤¨m‹Dr†U8Xq0Pd¥ÈV*\åä\(ºN¦¸¶½6z»$&'89 ¨ˆfºg˜ÀTÿ²°{ÄÜYM_Ì äwtš@>Y«1MV£ð|Ì{ÓÒ~þ·'ï :}Y2Í·çëð$7-©}BÌL·$—¸¹X’au5;yâ‹}«ÏrÚ®˜“cÓ°Ôüÿµ2Âj@3¬Ü‘ë,@Øy0Î#0›ÕÞÝeÏã b/ZR}MHL½MÈ׺ò³»ƒáµ»:|M­«[ñ¾08âynÇ9N.g*žåmβ–ÉjõvÑY²Æi‡Nû8®Vi ádz¹ÒàŠ¸† máÄsÝrâ—xR&BÎ^ø6U„>цïâ@À¬7[£«±uvg CÜ·[åÅÐ'¢†qZ,,¯y¼6ãóEL:sˆA¸ËɰsZ•<£­È”©,uó2Fps"Ú×À^n@'}_!êÔ®aðE Ô3²9«ñ…ôŒÁ«Â n\J7n%7"¨r“˜Ñ”Ûg"ƒc¹ÚÍk¸E\„|Þf;Ãåm7¯uó:‘0&wàDAyù®‡ù|xIp×…tD$QVDUº}>Ápn·{Â|-r>äcâŽ=üÌ|,v?2Ûjæmg;Z™0¨¼ ¡Òf³ÑËuêá$x쿪6U| Üï´5àœ@·¿9öŠÄ—ºyocšÑªO›¡:àᯟ™’l³: ¾‰V|ÖgÇíÜhð€¯6Ÿèâ+ø*aéL…ý[úl»[*f¿ÆÍ»øZNØ>¬½øDÍÞ:F {ëmòuñͤÿyrÜÕìT|{—eŽ]Ž·Ë\»Ì¥9D|·G;g@…˜é¢äzRy$ySùMÜK†zˆTå(M1g>élPÌòúÕœUß ™³ët³¢¾Á0+ëœæœúS7çBæUÂ}š„{¹„û, ÷Ùîî•îs$ÜçJ¸Ï“p¯’pŸ/á¾@½ZÂ}¡„{„û" ÷ÅîçK¸×J¸×I¸×K¸/‘p_*á¾LÂý ÷ ÷åî+%ܽîîMîÍî> ÷Õîk$Ü[$Ü[%Ü×J¸¯“po“po—p÷K¸$Ü;$Ü×K¸wJ¸wI¸%Ü»%Ü7H¸ Þ:WòÖ É[ç·ŽRùø&–oâ˜FÀDA“„Ó Ÿ/vJ­ëRë†ÔºSj=AjÝUÿoL¹d‹Y’-fK¶¨lQ)ÙbŽd‹¹’-æI¶¨’l1_²ÅÉÕ’-J¶¨‘l±H²ÅbÉçK&¨•LP'™ ^2ÁÉK%,“Lpd‚ÉË%œoC„ùFðD£ä‰&ÉÍ’'|’'VKžX#y¢EòD«ä‰µ’'ÖIžh“<Ñ.yÂ/y" ¾C:üzéðÒỤÃ¥ÃwKvß Ù}£d÷M’Ý7ËX±E2âÙøföܲª$âW© õëp| WÄשŒÞ ½Iߤ_Ðwé—¨½ÅL¿ânpçå®:^áòó"×zöº6r£ë>nr=ÊÍ®§Øçú!¯NÄk'qKâTnM òÚÄ-¼.q;·'^ÅþÄë8ø,w$¾ÎëßâÎĸË]ÊA÷ÕÜí¾‹7¸ïåî‡x“û3Þœ4·$]Ä^š#/äDsñŸF÷LÆ{UY7ljÄCF9|¨ ,˜w‘ñ{x¨™µÍÌ’òÃдÃax@ò-Jà›)‰o¡4¾•†òmr·5Í'Ý^P%G’ë-øÊõ΋]o6Ö+;}½{°Þ½XïÖ»ë=ð•ë‘øs:{=QŠQZn-<"u!¦Ÿ>ˆÄL£Ñ"Z,þ@SüÑ—ýò'>@¸ó”Ì\eX/Õ-Ë=™Ã%ôÊ/’‹_’óäZci©ü°!jËPcY39dMlV‘«,±Vqˆ#:1“áÑz©¡TÏÜOɹEæM¦s«øÞ‘©¤”Ü u•ì3eßöLMvjV竳ÄÈ|@®ý”ü“X’›nÄ ø/£À£¦ëÃLÝZTººJ¶Ü[Íó¶ÉÍêÐ#ºÕ![‡ÿoƒ¾Î{bXtxÔöÓ`œâ2øŸ4„C”²€?¥r”ü­â/¨¿¤K¹vC»ûLû*=àÐè¸C§—½æpÒŽDú­ÃMs$Ñ)ÇVɬ9R¥Ñj-ÕÓ Ëh¨]hƒÃ µ‹ðT‘µ‹-H & ©aoD+ñT§ z–V¡4$ËÉõ9 6È;“k±="uæ° sÝYú?§á|î” ”gi²‘ø8ßÑ'ëO:O:kÑ=÷5÷ÒÚ57_ñ¨Ç¨cYA¾GUz)¸,¯àmX†[öö½!wì3€Mªc 9ã(Ñ‘CÇxîÈ¥qŽ<*@_±£@j¦ØZ.¥mR“é2Ô™HÛ1“ø*Y@—KÍxh}Cjf®¹ã JÄið¿lyŒ+ìcü#„¯VG1ý«Ž¡”h‡hP^G+J¡¾m7£Ëvh`~ã@ßGÖéžžn%âtÓqºsqºópº™8]9N7 §›ÓUPÊ <[à˜+O9ÃÚOä”Õ8å5ò”ó"§¬ˆœ²Ð>e.8m—´¿8ï R#çý‚²™ÍÿÁ“ºaÔA×K^bÚ-5pŽÍz.xC”L$æ«bI§oÑÍ(Å<7>ã¹ÑsŸ§¤ãtKCꞺý$/ä.U¹T;NûzhÿÂãtgC¾š±½‡ÔdhÛn§Œãt°¡ ‡î-UÓý éj=X 5'‰Vl¤kÐíC‡¨¨TO×O–éÚ1:|ˆ´Rg:ìsTÖ°Ge%ÿõXÏŒ“_oàqêm@ã‰Ô=tâp©n÷ÐÓ‡aÂ!´·e#þ5S+µÑsäGf²å&Ú #=£\IW£¼ê¹åÚGw¢<@÷Ð}( ‡éÊ£`çé‡6H:)ê» ¹Š8v‘鸖R×(×ÓÇM”åøå#S™ä¸•¦;öÐ|d,õŽ}t‘c?­t FÇw¨ÙqüŽ{h“ã^ºÜqˆv9î£ëÑ·}Ð÷úŽ"ËyÚñ0=ë8%ú±mTQ›/nÒIz^„SéûôýHí z™^¹‡P½Š±HF¡ŸÐOñγÈÏèç¨ ðm§Áú¥éà:0È>ƒ3è A÷9ó Ú]aÐ}€ŠóŒçx xì9ž+ÄœˆèÃ^ú™mn?CÐk2Ã_Ú~?ö,bÎd®ÎUrOãoU#h/|„¦ì¥äãôŽ0ô¯{èw'­ž¼ç)QôöÐNæÆ$`Œok¨ðNÇsäpüÆzž’/P¶ã%*rüH*5ËZÌfoâWŠd(ó}(Ëaû§Ò‡IÒC{Å™w§¦Èmÿñ ÿ°öŒÚŸe(s`ŒP ” ²;M((‰T; Y*d©èí3TôMâÙ8r¢ôâ,¶;kVK:³PÈ À9ì|©"v*“)A™F¥Œ+ÓcX8;²õìÈÖ³í­‹š•:%À).Ã8ÙK:‚ÅÂr=¤ÉCÈXÊ:ÿBµ-rC-t>EÞ0@?@ÇX.´œ>iHýïú»@ê1úÇ1úa"‰N 0J‰Dæ¦ÊbÒ”ZJQê(U©§"ei?ÈÔ°üe2LÅ9¢ÈHŽ>Lh!Snxw¶Üñǧk]­ƒ¿"µåg"„ÿ¹ üŒ}”yœ¾”»È`‹¿gc‡Ø3k'3ãêx˜}˜‘¹*÷ÄAʲSÿ>) JF/»êÔLYh¹'DÙ˦?L]VpaAÚ2¾ãß s«ÃD„ÝÒu]DÉÀzƒDP@(ÈC1N"2hvdHH×ñ«¦Ú±!!Ýyò_ @í‰ÃÃLç¶ýöÏ%j¦Þf´dêè1DϪÍ£ÞNIÍ£™Õm¢©=é,Õ•C)qfjÍ% J‰ë•äzŒŒUˆq§Lîw¸Tñ^ºÇeV TÑo¬2]õ;œŒñ; e‡Sõž„}/zŒÌ»iˆ|?Óc4G§Àgº~Bm¾›{œX51]WÒ³—ÓÓ§ë‡ vÒ1ät»Qž ’+~€(ðøÿÇ€ôs¸{ÿž÷½°|€òCú„þ†òô}Òà»4ôãÄ t€]”§l Be#ÍS¶ÐbåªW¶Rå&å´M¹‚.WvÐåJÚ©\C7(»h¿r-ݯ\OG”Ýô¸rW¾E'”[è)åVzIÙC¯)·Ñ»ÊíôÚ¢ý´û”;XSîâÊý©¼*énDH >’ ?¦Ôlj@Í¢†Ëi‡Œ¥*ÊËeÕ ámôÀóãv5x }³¼ª<–öq¶H丌vòH‘Èó ÚÁ£D"Ïå˜å'¨9ymåѨ%pmæ1¨¹p{€÷Ç"` W>JÃdföÑL;¥·Â'bçÒ¯Ãq8áô‡ñaxn8Ÿ1IL–âSÒ\31Ô S.ºòFiÊ»D úÒdv*ú8üŒòµìa8Ä8α¯¡Wb'”y!f€ ˜<^0L~¤™' çJÌÐAh´Eš¤‹,ÔŒXÎÀàaÚªüèàBkp¾=xXÌ`ÚËK5ëN{î]T ¤H&þfê&ÑÀ Øjº7m/Ñó‡yt܆o¬WÊÅŽä;ó¾òtkr«­ÇÍ‘?L]…ªUí¡kÑÖívdÆ-ÑeUCõÆzý¡È]e?Cõ ¸î—”Œ 8Pe®*”«ª4AÕ¨åäeª“V¨ ´å&5‰.SMºFD·ªºå}ê`:¢¡£j&}_ͦ—Ô‘ôK”o©£è”©cèêX\hƱCÈÉê$Žr„ZÄPªÅ\†r†:…çªS¹VÆËÕ2ézŠ_q½ #wã åØ!kK×µùònt½ÃExª! O„Kéø÷¥Y58×p»O8M 9“$f%f}N¥@æ)ª‡e¼æÉÿwñZ=Ÿ4ÓµžRÕ%T¤.ë?^󔯯Å_QŸqAÛ–µŒŽºÓÔˆÿÄ…ÞRýLÿiÐ2c<#s/Ê“ÎÙÆÝ±}z|@&ܱ°Åh‹ x¸e—:ð”’D¥Ä!"_w®ÇUd^¶íÆ’ÄtÕ“XTâö¸ÍS¨ÄãÆ§>ÝéIØ‘ÀžÄzO‚~*(¡²Û²kÄ-FG"ÒèHDmG¤=&AÅÍõaž'?l¥û¬HW¹ñD|2ÚAwÉï†"3ø6‹whí•\@Ö^ ÿ$캙«Åƒq¢ÏB¼‘$9ž\ɉãŒa}”OI‘ 8òŸdüS4 ¸rÍW~—àE§]zãÅ|—àZ\!HÎsþéó(+QO‚†Ea_'`Ÿ›:â/Yxˆjrñ ó€ôÉ 3 ¤•V"7#ÿ‡ô~þ ãýfØ^z;_‘œš¯™ÎMy9ØUÈ+<ê]ô”•ƒr©‘â$àá„Ô8Î6ä#áÀM„W6¤k=ì-ÕQRº±'á#[Kwc_CI¾¾Ò $”ØXM©+ÝuŒ[E[¦šn‘~¶Y5í·¢ªR÷!ª@Fwö!¢–xò«ä†*“AG鸟¬§ïÑ#PÞãÈŸFf÷,2˜¡|yàë(×ãÉ[PñÛÈöûÈ?Fù rÁOQ~ÁÖˆÿg£d”)œÆé‘ ñ& ë¼zþôsJW_§¡êð©_QŽúk*VC³ÔßÒRõwt±ú{òª fõ}Z£þ‘üêŸv>¤-êGð§¿Ð7Õ¿ÒMê'´åýêßé5ú”W?§gÕ/èõK„Sô6Úï£ý ÚŸ©}ô…ú9Ꜣ~Éš*¡´Ã‰ %Ôìû3n¢ì—¡e}i׆"; àš§àöúw oSà+?àõ2Üxé îä.øU3õp»Ñ»†•y A~ú.o~µžàÒ¯ÅX‘º¤çËKgIðκF|ž×'>F†‡J·ÛÄ›m·\³›·Hž­ˆçF®Â½¼õ4ÖÇx°Á—Ù¼‰·9ÿ ju¡ï’\x袚蕎U KEN˜rœ·‹k>C|ÎW ·»R\üŽñÕÂåÆZW>ûÞ§ÚøOϯ‹ÜöúëÆÉ€‡Ì rx†(ç`kÉ´ÿˆR--—!Y‰òôïƒòkiŽ}éÚ$JЊȭS²6…ÒµR¦•QžVNS´ÅT®ÕÒl­ŽæhKhž¶”hÐB­–iËÉ«­ fÔý¨oÒ.Š&Et‰­BÔl䊾ëy·øvFÝüMùÁ8:%6U(>À7ð@^2µñMü-Œš¾ÐWÿ…ùàõo¢A5'û⮥«'#õ#˜8>“§ÀÅßûR•ÀhetÍŠ¯T„X ŠÓ‚0ÚFJÑ6“GÛBÃQŽÔ.¡\íRphÛ©P»œ¦jß 2”ÚŽ˜Ÿâ*ùNû{R%ß%¿ ¦P1ÀeÐý:¤ò©ò¹ÈCû@4Šõ‰0|g³<Û)™ÁîŽhV(5f8ͱµx7ç -fØZ,‹W›b©MFƯ£; Cž* 6 ÿˆÆ ìçCg‘·Nèn’øL¤í!‡v;À¿ú»jwP–ömÊÖöÓ(í.£  ÚÝ4e©v0Fge|Ðv™­3M³u–§³9dô‰´Y* ?•õžEe½§«ìž3óÇ ¼&í¨Lý¡7¾·!·‡ï«íRU)Ñ”½àß?ˆºy?I¨•?Œ¬X<8ƇòQûB€Tô]\A=ÎÁ=øïqAgÇ{ø„ÒÃ'‘¸<šG_U¢å#'ÖRL:ÆÏ4”èûú>Ùtuºªä) «m)ÖùAø§H›¿™öà(r¸½8Æ>äw߉ïæòSLõiÚq2´“djOQšö48êÊÔ~@ã´ç©J{‘jµ—i©ö -×^¥F”>”«Ñ·Vû)µk?£ Ê+µ7h—ö&íÑÞ¢Û´_Ñ^íÚ§½K÷h¿¦ûPÑÞ‹ùâ¨4®¸è<Ì?”ƒâçù¤ü"¿„=¦Ñå2zªÈT¶Éè©Q&xîGòw[šÈÕGU’g$Çš4} ú8JÔsh ÊÁúx­çÁXù4^Ÿ@y:ÞÖÏ¡b}"MA}ê3õI1?Ï”ó»6¿–ó¯¥!4š.”AŒ¦R\éÄ€cíÔÀúyf‘`ÚÑ2 ÿﱘoŠNñk]Ì“8¥Æ¿ÑëoúÑk™­×éÐë{ýêõëª4Ù»PéhqûÀarꟃZKhÚi*…-u€HŸ •V@¥³¡ÒJ¡Ï¥l}T;ª]@z5ê ¡Úðƒj*ÓkbT:=¢Òé•N‘Ÿo„J'Û*Í>S¥#¢ÚñžU¥Þ³«ÔU©éäßEþÆiLøoކöòÄÓq>þ‹,¼òûðß!Œë2CpçfdxTñ—@u§¿ù‡˜7ÿþl ÝjR ®ÜŒüaâꌇâßS>yïýÈß6åH–"rææ‰_ñ‚§¯öBä/ÇüG)ÿÄøRá+¤¶I¸6ÿÔ‹ÐÏRÂÿPK{à~[ 'åOPKYRNDS”U×GKMETA-INF/MANIFEST.MFþÊPK pmMDcx/PK pmMD®cx/fbn/PK pmMDÓcx/fbn/encrypt/PKˆPNDjgÚû<¯cx/fbn/encrypt/EnCrypt.classPKVRND'¸qOý*†cx/fbn/encrypt/Crypto.classPK1mMDšÇ_ŠÿÌcx/fbn/encrypt/Base64$1.classPK1mMDõÚ '¡cx/fbn/encrypt/Base64$InputStream.classPK1mMDV›}É (Ðcx/fbn/encrypt/Base64$OutputStream.classPK1mMD{à~[ 'åOï!cx/fbn/encrypt/Base64.classPK »BInixnote2-2.0.2/java/src/000077500000000000000000000000001315604104400147675ustar00rootroot00000000000000nixnote2-2.0.2/java/src/cx/000077500000000000000000000000001315604104400154015ustar00rootroot00000000000000nixnote2-2.0.2/java/src/cx/fbn/000077500000000000000000000000001315604104400161465ustar00rootroot00000000000000nixnote2-2.0.2/java/src/cx/fbn/encrypt/000077500000000000000000000000001315604104400176325ustar00rootroot00000000000000nixnote2-2.0.2/java/src/cx/fbn/encrypt/Base64.java000066400000000000000000002536471315604104400215420ustar00rootroot00000000000000package cx.fbn.encrypt; /** *

Encodes and decodes to and from Base64 notation.

*

Homepage: http://iharder.net/base64.

* *

Example:

* * String encoded = Base64.encode( myByteArray ); *
* byte[] myByteArray = Base64.decode( encoded ); * *

The options parameter, which appears in a few places, is used to pass * several pieces of information to the encoder. In the "higher level" methods such as * encodeBytes( bytes, options ) the options parameter can be used to indicate such * things as first gzipping the bytes before encoding them, not inserting linefeeds, * and encoding using the URL-safe and Ordered dialects.

* *

Note, according to RFC3548, * Section 2.1, implementations should not add line feeds unless explicitly told * to do so. I've got Base64 set to this behavior now, although earlier versions * broke lines by default.

* *

The constants defined in Base64 can be OR-ed together to combine options, so you * might make a call like this:

* * String encoded = Base64.encodeBytes( mybytes, Base64.GZIP | Base64.DO_BREAK_LINES ); *

to compress the data before encoding it and then making the output have newline characters.

*

Also...

* String encoded = Base64.encodeBytes( crazyString.getBytes() ); * * * *

* Change Log: *

*
    *
  • v2.3.4 - Fixed bug when working with gzipped streams whereby flushing * the Base64.OutputStream closed the Base64 encoding (by padding with equals * signs) too soon. Also added an option to suppress the automatic decoding * of gzipped streams. Also added experimental support for specifying a * class loader when using the * {@link #decodeToObject(java.lang.String, int, java.lang.ClassLoader)} * method.
  • *
  • v2.3.3 - Changed default char encoding to US-ASCII which reduces the internal Java * footprint with its CharEncoders and so forth. Fixed some javadocs that were * inconsistent. Removed imports and specified things like java.io.IOException * explicitly inline.
  • *
  • v2.3.2 - Reduced memory footprint! Finally refined the "guessing" of how big the * final encoded data will be so that the code doesn't have to create two output * arrays: an oversized initial one and then a final, exact-sized one. Big win * when using the {@link #encodeBytesToBytes(byte[])} family of methods (and not * using the gzip options which uses a different mechanism with streams and stuff).
  • *
  • v2.3.1 - Added {@link #encodeBytesToBytes(byte[], int, int, int)} and some * similar helper methods to be more efficient with memory by not returning a * String but just a byte array.
  • *
  • v2.3 - This is not a drop-in replacement! This is two years of comments * and bug fixes queued up and finally executed. Thanks to everyone who sent * me stuff, and I'm sorry I wasn't able to distribute your fixes to everyone else. * Much bad coding was cleaned up including throwing exceptions where necessary * instead of returning null values or something similar. Here are some changes * that may affect you: *
      *
    • Does not break lines, by default. This is to keep in compliance with * RFC3548.
    • *
    • Throws exceptions instead of returning null values. Because some operations * (especially those that may permit the GZIP option) use IO streams, there * is a possibility of an java.io.IOException being thrown. After some discussion and * thought, I've changed the behavior of the methods to throw java.io.IOExceptions * rather than return null if ever there's an error. I think this is more * appropriate, though it will require some changes to your code. Sorry, * it should have been done this way to begin with.
    • *
    • Removed all references to System.out, System.err, and the like. * Shame on me. All I can say is sorry they were ever there.
    • *
    • Throws NullPointerExceptions and IllegalArgumentExceptions as needed * such as when passed arrays are null or offsets are invalid.
    • *
    • Cleaned up as much javadoc as I could to avoid any javadoc warnings. * This was especially annoying before for people who were thorough in their * own projects and then had gobs of javadoc warnings on this file.
    • *
    *
  • v2.2.1 - Fixed bug using URL_SAFE and ORDERED encodings. Fixed bug * when using very small files (~< 40 bytes).
  • *
  • v2.2 - Added some helper methods for encoding/decoding directly from * one file to the next. Also added a main() method to support command line * encoding/decoding from one file to the next. Also added these Base64 dialects: *
      *
    1. The default is RFC3548 format.
    2. *
    3. Calling Base64.setFormat(Base64.BASE64_FORMAT.URLSAFE_FORMAT) generates * URL and file name friendly format as described in Section 4 of RFC3548. * http://www.faqs.org/rfcs/rfc3548.html
    4. *
    5. Calling Base64.setFormat(Base64.BASE64_FORMAT.ORDERED_FORMAT) generates * URL and file name friendly format that preserves lexical ordering as described * in http://www.faqs.org/qa/rfcc-1940.html
    6. *
    * Special thanks to Jim Kellerman at http://www.powerset.com/ * for contributing the new Base64 dialects. *
  • * *
  • v2.1 - Cleaned up javadoc comments and unused variables and methods. Added * some convenience methods for reading and writing to and from files.
  • *
  • v2.0.2 - Now specifies UTF-8 encoding in places where the code fails on systems * with other encodings (like EBCDIC).
  • *
  • v2.0.1 - Fixed an error when decoding a single byte, that is, when the * encoded data was a single byte.
  • *
  • v2.0 - I got rid of methods that used booleans to set options. * Now everything is more consolidated and cleaner. The code now detects * when data that's being decoded is gzip-compressed and will decompress it * automatically. Generally things are cleaner. You'll probably have to * change some method calls that you were making to support the new * options format (ints that you "OR" together).
  • *
  • v1.5.1 - Fixed bug when decompressing and decoding to a * byte[] using decode( String s, boolean gzipCompressed ). * Added the ability to "suspend" encoding in the Output Stream so * you can turn on and off the encoding if you need to embed base64 * data in an otherwise "normal" stream (like an XML file).
  • *
  • v1.5 - Output stream pases on flush() command but doesn't do anything itself. * This helps when using GZIP streams. * Added the ability to GZip-compress objects before encoding them.
  • *
  • v1.4 - Added helper methods to read/write files.
  • *
  • v1.3.6 - Fixed OutputStream.flush() so that 'position' is reset.
  • *
  • v1.3.5 - Added flag to turn on and off line breaks. Fixed bug in input stream * where last buffer being read, if not completely full, was not returned.
  • *
  • v1.3.4 - Fixed when "improperly padded stream" error was thrown at the wrong time.
  • *
  • v1.3.3 - Fixed I/O streams which were totally messed up.
  • *
* *

* I am placing this code in the Public Domain. Do with it as you will. * This software comes with no guarantees or warranties but with * plenty of well-wishing instead! * Please visit http://iharder.net/base64 * periodically to check for updates or to contribute improvements. *

* * @author Robert Harder * @author rob@iharder.net * @version 2.3.3 */ public class Base64 { /* ******** P U B L I C F I E L D S ******** */ /** No options specified. Value is zero. */ public final static int NO_OPTIONS = 0; /** Specify encoding in first bit. Value is one. */ public final static int ENCODE = 1; /** Specify decoding in first bit. Value is zero. */ public final static int DECODE = 0; /** Specify that data should be gzip-compressed in second bit. Value is two. */ public final static int GZIP = 2; /** Specify that gzipped data should not be automatically gunzipped. */ public final static int DONT_GUNZIP = 4; /** Do break lines when encoding. Value is 8. */ public final static int DO_BREAK_LINES = 8; /** * Encode using Base64-like encoding that is URL- and Filename-safe as described * in Section 4 of RFC3548: * http://www.faqs.org/rfcs/rfc3548.html. * It is important to note that data encoded this way is not officially valid Base64, * or at the very least should not be called Base64 without also specifying that is * was encoded using the URL- and Filename-safe dialect. */ public final static int URL_SAFE = 16; /** * Encode using the special "ordered" dialect of Base64 described here: * http://www.faqs.org/qa/rfcc-1940.html. */ public final static int ORDERED = 32; /* ******** P R I V A T E F I E L D S ******** */ /** Maximum line length (76) of Base64 output. */ private final static int MAX_LINE_LENGTH = 76; /** The equals sign (=) as a byte. */ private final static byte EQUALS_SIGN = (byte)'='; /** The new line character (\n) as a byte. */ private final static byte NEW_LINE = (byte)'\n'; /** Preferred encoding. */ private final static String PREFERRED_ENCODING = "US-ASCII"; private final static byte WHITE_SPACE_ENC = -5; // Indicates white space in encoding private final static byte EQUALS_SIGN_ENC = -1; // Indicates equals sign in encoding /* ******** S T A N D A R D B A S E 6 4 A L P H A B E T ******** */ /** The 64 valid Base64 values. */ /* Host platform me be something funny like EBCDIC, so we hardcode these values. */ private final static byte[] _STANDARD_ALPHABET = { (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G', (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N', (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U', (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z', (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u', (byte)'v', (byte)'w', (byte)'x', (byte)'y', (byte)'z', (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7', (byte)'8', (byte)'9', (byte)'+', (byte)'/' }; /** * Translates a Base64 value to either its 6-bit reconstruction value * or a negative number indicating some other meaning. **/ private final static byte[] _STANDARD_DECODABET = { -9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 0 - 8 -5,-5, // Whitespace: Tab and Linefeed -9,-9, // Decimal 11 - 12 -5, // Whitespace: Carriage Return -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 14 - 26 -9,-9,-9,-9,-9, // Decimal 27 - 31 -5, // Whitespace: Space -9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 33 - 42 62, // Plus sign at decimal 43 -9,-9,-9, // Decimal 44 - 46 63, // Slash at decimal 47 52,53,54,55,56,57,58,59,60,61, // Numbers zero through nine -9,-9,-9, // Decimal 58 - 60 -1, // Equals sign at decimal 61 -9,-9,-9, // Decimal 62 - 64 0,1,2,3,4,5,6,7,8,9,10,11,12,13, // Letters 'A' through 'N' 14,15,16,17,18,19,20,21,22,23,24,25, // Letters 'O' through 'Z' -9,-9,-9,-9,-9,-9, // Decimal 91 - 96 26,27,28,29,30,31,32,33,34,35,36,37,38, // Letters 'a' through 'm' 39,40,41,42,43,44,45,46,47,48,49,50,51, // Letters 'n' through 'z' -9,-9,-9,-9 // Decimal 123 - 126 /*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 127 - 139 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 166 - 178 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 179 - 191 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 192 - 204 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 205 - 217 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255 */ }; /* ******** U R L S A F E B A S E 6 4 A L P H A B E T ******** */ /** * Used in the URL- and Filename-safe dialect described in Section 4 of RFC3548: * http://www.faqs.org/rfcs/rfc3548.html. * Notice that the last two bytes become "hyphen" and "underscore" instead of "plus" and "slash." */ private final static byte[] _URL_SAFE_ALPHABET = { (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G', (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N', (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U', (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z', (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u', (byte)'v', (byte)'w', (byte)'x', (byte)'y', (byte)'z', (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7', (byte)'8', (byte)'9', (byte)'-', (byte)'_' }; /** * Used in decoding URL- and Filename-safe dialects of Base64. */ private final static byte[] _URL_SAFE_DECODABET = { -9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 0 - 8 -5,-5, // Whitespace: Tab and Linefeed -9,-9, // Decimal 11 - 12 -5, // Whitespace: Carriage Return -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 14 - 26 -9,-9,-9,-9,-9, // Decimal 27 - 31 -5, // Whitespace: Space -9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 33 - 42 -9, // Plus sign at decimal 43 -9, // Decimal 44 62, // Minus sign at decimal 45 -9, // Decimal 46 -9, // Slash at decimal 47 52,53,54,55,56,57,58,59,60,61, // Numbers zero through nine -9,-9,-9, // Decimal 58 - 60 -1, // Equals sign at decimal 61 -9,-9,-9, // Decimal 62 - 64 0,1,2,3,4,5,6,7,8,9,10,11,12,13, // Letters 'A' through 'N' 14,15,16,17,18,19,20,21,22,23,24,25, // Letters 'O' through 'Z' -9,-9,-9,-9, // Decimal 91 - 94 63, // Underscore at decimal 95 -9, // Decimal 96 26,27,28,29,30,31,32,33,34,35,36,37,38, // Letters 'a' through 'm' 39,40,41,42,43,44,45,46,47,48,49,50,51, // Letters 'n' through 'z' -9,-9,-9,-9 // Decimal 123 - 126 /*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 127 - 139 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 166 - 178 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 179 - 191 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 192 - 204 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 205 - 217 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255 */ }; /* ******** O R D E R E D B A S E 6 4 A L P H A B E T ******** */ /** * I don't get the point of this technique, but someone requested it, * and it is described here: * http://www.faqs.org/qa/rfcc-1940.html. */ private final static byte[] _ORDERED_ALPHABET = { (byte)'-', (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7', (byte)'8', (byte)'9', (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G', (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N', (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U', (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z', (byte)'_', (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u', (byte)'v', (byte)'w', (byte)'x', (byte)'y', (byte)'z' }; /** * Used in decoding the "ordered" dialect of Base64. */ private final static byte[] _ORDERED_DECODABET = { -9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 0 - 8 -5,-5, // Whitespace: Tab and Linefeed -9,-9, // Decimal 11 - 12 -5, // Whitespace: Carriage Return -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 14 - 26 -9,-9,-9,-9,-9, // Decimal 27 - 31 -5, // Whitespace: Space -9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 33 - 42 -9, // Plus sign at decimal 43 -9, // Decimal 44 0, // Minus sign at decimal 45 -9, // Decimal 46 -9, // Slash at decimal 47 1,2,3,4,5,6,7,8,9,10, // Numbers zero through nine -9,-9,-9, // Decimal 58 - 60 -1, // Equals sign at decimal 61 -9,-9,-9, // Decimal 62 - 64 11,12,13,14,15,16,17,18,19,20,21,22,23, // Letters 'A' through 'M' 24,25,26,27,28,29,30,31,32,33,34,35,36, // Letters 'N' through 'Z' -9,-9,-9,-9, // Decimal 91 - 94 37, // Underscore at decimal 95 -9, // Decimal 96 38,39,40,41,42,43,44,45,46,47,48,49,50, // Letters 'a' through 'm' 51,52,53,54,55,56,57,58,59,60,61,62,63, // Letters 'n' through 'z' -9,-9,-9,-9 // Decimal 123 - 126 /*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 127 - 139 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 166 - 178 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 179 - 191 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 192 - 204 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 205 - 217 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255 */ }; /* ******** D E T E R M I N E W H I C H A L H A B E T ******** */ /** * Returns one of the _SOMETHING_ALPHABET byte arrays depending on * the options specified. * It's possible, though silly, to specify ORDERED and URLSAFE * in which case one of them will be picked, though there is * no guarantee as to which one will be picked. */ private final static byte[] getAlphabet( int options ) { if ((options & URL_SAFE) == URL_SAFE) { return _URL_SAFE_ALPHABET; } else if ((options & ORDERED) == ORDERED) { return _ORDERED_ALPHABET; } else { return _STANDARD_ALPHABET; } } // end getAlphabet /** * Returns one of the _SOMETHING_DECODABET byte arrays depending on * the options specified. * It's possible, though silly, to specify ORDERED and URL_SAFE * in which case one of them will be picked, though there is * no guarantee as to which one will be picked. */ private final static byte[] getDecodabet( int options ) { if( (options & URL_SAFE) == URL_SAFE) { return _URL_SAFE_DECODABET; } else if ((options & ORDERED) == ORDERED) { return _ORDERED_DECODABET; } else { return _STANDARD_DECODABET; } } // end getAlphabet /** Defeats instantiation. */ Base64(){} /* ******** E N C O D I N G M E T H O D S ******** */ /** * Encodes up to the first three bytes of array threeBytes * and returns a four-byte array in Base64 notation. * The actual number of significant bytes in your array is * given by numSigBytes. * The array threeBytes needs only be as big as * numSigBytes. * Code can reuse a byte array by passing a four-byte array as b4. * * @param b4 A reusable byte array to reduce array instantiation * @param threeBytes the array to convert * @param numSigBytes the number of significant bytes in your array * @return four byte array in Base64 notation. * @since 1.5.1 */ private static byte[] encode3to4( byte[] b4, byte[] threeBytes, int numSigBytes, int options ) { encode3to4( threeBytes, 0, numSigBytes, b4, 0, options ); return b4; } // end encode3to4 /** *

Encodes up to three bytes of the array source * and writes the resulting four Base64 bytes to destination. * The source and destination arrays can be manipulated * anywhere along their length by specifying * srcOffset and destOffset. * This method does not check to make sure your arrays * are large enough to accommodate srcOffset + 3 for * the source array or destOffset + 4 for * the destination array. * The actual number of significant bytes in your array is * given by numSigBytes.

*

This is the lowest level of the encoding methods with * all possible parameters.

* * @param source the array to convert * @param srcOffset the index where conversion begins * @param numSigBytes the number of significant bytes in your array * @param destination the array to hold the conversion * @param destOffset the index where output will be put * @return the destination array * @since 1.3 */ private static byte[] encode3to4( byte[] source, int srcOffset, int numSigBytes, byte[] destination, int destOffset, int options ) { byte[] ALPHABET = getAlphabet( options ); // 1 2 3 // 01234567890123456789012345678901 Bit position // --------000000001111111122222222 Array position from threeBytes // --------| || || || | Six bit groups to index ALPHABET // >>18 >>12 >> 6 >> 0 Right shift necessary // 0x3f 0x3f 0x3f Additional AND // Create buffer with zero-padding if there are only one or two // significant bytes passed in the array. // We have to shift left 24 in order to flush out the 1's that appear // when Java treats a value as negative that is cast from a byte to an int. int inBuff = ( numSigBytes > 0 ? ((source[ srcOffset ] << 24) >>> 8) : 0 ) | ( numSigBytes > 1 ? ((source[ srcOffset + 1 ] << 24) >>> 16) : 0 ) | ( numSigBytes > 2 ? ((source[ srcOffset + 2 ] << 24) >>> 24) : 0 ); switch( numSigBytes ) { case 3: destination[ destOffset ] = ALPHABET[ (inBuff >>> 18) ]; destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ]; destination[ destOffset + 2 ] = ALPHABET[ (inBuff >>> 6) & 0x3f ]; destination[ destOffset + 3 ] = ALPHABET[ (inBuff ) & 0x3f ]; return destination; case 2: destination[ destOffset ] = ALPHABET[ (inBuff >>> 18) ]; destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ]; destination[ destOffset + 2 ] = ALPHABET[ (inBuff >>> 6) & 0x3f ]; destination[ destOffset + 3 ] = EQUALS_SIGN; return destination; case 1: destination[ destOffset ] = ALPHABET[ (inBuff >>> 18) ]; destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ]; destination[ destOffset + 2 ] = EQUALS_SIGN; destination[ destOffset + 3 ] = EQUALS_SIGN; return destination; default: return destination; } // end switch } // end encode3to4 /** * Performs Base64 encoding on the raw ByteBuffer, * writing it to the encoded ByteBuffer. * This is an experimental feature. Currently it does not * pass along any options (such as {@link #DO_BREAK_LINES} * or {@link #GZIP}. * * @param raw input buffer * @param encoded output buffer * @since 2.3 */ public static void encode( java.nio.ByteBuffer raw, java.nio.ByteBuffer encoded ){ byte[] raw3 = new byte[3]; byte[] enc4 = new byte[4]; while( raw.hasRemaining() ){ int rem = Math.min(3,raw.remaining()); raw.get(raw3,0,rem); Base64.encode3to4(enc4, raw3, rem, Base64.NO_OPTIONS ); encoded.put(enc4); } // end input remaining } /** * Performs Base64 encoding on the raw ByteBuffer, * writing it to the encoded CharBuffer. * This is an experimental feature. Currently it does not * pass along any options (such as {@link #DO_BREAK_LINES} * or {@link #GZIP}. * * @param raw input buffer * @param encoded output buffer * @since 2.3 */ public static void encode( java.nio.ByteBuffer raw, java.nio.CharBuffer encoded ){ byte[] raw3 = new byte[3]; byte[] enc4 = new byte[4]; while( raw.hasRemaining() ){ int rem = Math.min(3,raw.remaining()); raw.get(raw3,0,rem); Base64.encode3to4(enc4, raw3, rem, Base64.NO_OPTIONS ); for( int i = 0; i < 4; i++ ){ encoded.put( (char)(enc4[i] & 0xFF) ); } } // end input remaining } /** * Serializes an object and returns the Base64-encoded * version of that serialized object. * *

As of v 2.3, if the object * cannot be serialized or there is another error, * the method will throw an java.io.IOException. This is new to v2.3! * In earlier versions, it just returned a null value, but * in retrospect that's a pretty poor way to handle it.

* * The object is not GZip-compressed before being encoded. * * @param serializableObject The object to encode * @return The Base64-encoded object * @throws java.io.IOException if there is an error * @throws NullPointerException if serializedObject is null * @since 1.4 */ public static String encodeObject( java.io.Serializable serializableObject ) throws java.io.IOException { return encodeObject( serializableObject, NO_OPTIONS ); } // end encodeObject /** * Serializes an object and returns the Base64-encoded * version of that serialized object. * *

As of v 2.3, if the object * cannot be serialized or there is another error, * the method will throw an java.io.IOException. This is new to v2.3! * In earlier versions, it just returned a null value, but * in retrospect that's a pretty poor way to handle it.

* * The object is not GZip-compressed before being encoded. *

* Example options:

     *   GZIP: gzip-compresses object before encoding it.
     *   DO_BREAK_LINES: break lines at 76 characters
     * 
*

* Example: encodeObject( myObj, Base64.GZIP ) or *

* Example: encodeObject( myObj, Base64.GZIP | Base64.DO_BREAK_LINES ) * * @param serializableObject The object to encode * @param options Specified options * @return The Base64-encoded object * @see Base64#GZIP * @see Base64#DO_BREAK_LINES * @throws java.io.IOException if there is an error * @since 2.0 */ public static String encodeObject( java.io.Serializable serializableObject, int options ) throws java.io.IOException { if( serializableObject == null ){ throw new NullPointerException( "Cannot serialize a null object." ); } // end if: null // Streams java.io.ByteArrayOutputStream baos = null; java.io.OutputStream b64os = null; java.util.zip.GZIPOutputStream gzos = null; java.io.ObjectOutputStream oos = null; try { // ObjectOutputStream -> (GZIP) -> Base64 -> ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); b64os = new Base64.OutputStream( baos, ENCODE | options ); if( (options & GZIP) != 0 ){ // Gzip gzos = new java.util.zip.GZIPOutputStream(b64os); oos = new java.io.ObjectOutputStream( gzos ); } else { // Not gzipped oos = new java.io.ObjectOutputStream( b64os ); } oos.writeObject( serializableObject ); } // end try catch( java.io.IOException e ) { // Catch it and then throw it immediately so that // the finally{} block is called for cleanup. throw e; } // end catch finally { try{ oos.close(); } catch( Exception e ){} try{ gzos.close(); } catch( Exception e ){} try{ b64os.close(); } catch( Exception e ){} try{ baos.close(); } catch( Exception e ){} } // end finally // Return value according to relevant encoding. try { return new String( baos.toByteArray(), PREFERRED_ENCODING ); } // end try catch (java.io.UnsupportedEncodingException uue){ // Fall back to some Java default return new String( baos.toByteArray() ); } // end catch } // end encode /** * Encodes a byte array into Base64 notation. * Does not GZip-compress data. * * @param source The data to convert * @return The data in Base64-encoded form * @throws NullPointerException if source array is null * @since 1.4 */ public static String encodeBytes( byte[] source ) { // Since we're not going to have the GZIP encoding turned on, // we're not going to have an java.io.IOException thrown, so // we should not force the user to have to catch it. String encoded = null; try { encoded = encodeBytes(source, 0, source.length, NO_OPTIONS); } catch (java.io.IOException ex) { assert false : ex.getMessage(); } // end catch assert encoded != null; return encoded; } // end encodeBytes /** * Encodes a byte array into Base64 notation. *

* Example options:

     *   GZIP: gzip-compresses object before encoding it.
     *   DO_BREAK_LINES: break lines at 76 characters
     *     Note: Technically, this makes your encoding non-compliant.
     * 
*

* Example: encodeBytes( myData, Base64.GZIP ) or *

* Example: encodeBytes( myData, Base64.GZIP | Base64.DO_BREAK_LINES ) * * *

As of v 2.3, if there is an error with the GZIP stream, * the method will throw an java.io.IOException. This is new to v2.3! * In earlier versions, it just returned a null value, but * in retrospect that's a pretty poor way to handle it.

* * * @param source The data to convert * @param options Specified options * @return The Base64-encoded data as a String * @see Base64#GZIP * @see Base64#DO_BREAK_LINES * @throws java.io.IOException if there is an error * @throws NullPointerException if source array is null * @since 2.0 */ public static String encodeBytes( byte[] source, int options ) throws java.io.IOException { return encodeBytes( source, 0, source.length, options ); } // end encodeBytes /** * Encodes a byte array into Base64 notation. * Does not GZip-compress data. * *

As of v 2.3, if there is an error, * the method will throw an java.io.IOException. This is new to v2.3! * In earlier versions, it just returned a null value, but * in retrospect that's a pretty poor way to handle it.

* * * @param source The data to convert * @param off Offset in array where conversion should begin * @param len Length of data to convert * @return The Base64-encoded data as a String * @throws NullPointerException if source array is null * @throws IllegalArgumentException if source array, offset, or length are invalid * @since 1.4 */ public static String encodeBytes( byte[] source, int off, int len ) { // Since we're not going to have the GZIP encoding turned on, // we're not going to have an java.io.IOException thrown, so // we should not force the user to have to catch it. String encoded = null; try { encoded = encodeBytes( source, off, len, NO_OPTIONS ); } catch (java.io.IOException ex) { assert false : ex.getMessage(); } // end catch assert encoded != null; return encoded; } // end encodeBytes /** * Encodes a byte array into Base64 notation. *

* Example options:

     *   GZIP: gzip-compresses object before encoding it.
     *   DO_BREAK_LINES: break lines at 76 characters
     *     Note: Technically, this makes your encoding non-compliant.
     * 
*

* Example: encodeBytes( myData, Base64.GZIP ) or *

* Example: encodeBytes( myData, Base64.GZIP | Base64.DO_BREAK_LINES ) * * *

As of v 2.3, if there is an error with the GZIP stream, * the method will throw an java.io.IOException. This is new to v2.3! * In earlier versions, it just returned a null value, but * in retrospect that's a pretty poor way to handle it.

* * * @param source The data to convert * @param off Offset in array where conversion should begin * @param len Length of data to convert * @param options Specified options * @return The Base64-encoded data as a String * @see Base64#GZIP * @see Base64#DO_BREAK_LINES * @throws java.io.IOException if there is an error * @throws NullPointerException if source array is null * @throws IllegalArgumentException if source array, offset, or length are invalid * @since 2.0 */ public static String encodeBytes( byte[] source, int off, int len, int options ) throws java.io.IOException { byte[] encoded = encodeBytesToBytes( source, off, len, options ); // Return value according to relevant encoding. try { return new String( encoded, PREFERRED_ENCODING ); } // end try catch (java.io.UnsupportedEncodingException uue) { return new String( encoded ); } // end catch } // end encodeBytes /** * Similar to {@link #encodeBytes(byte[])} but returns * a byte array instead of instantiating a String. This is more efficient * if you're working with I/O streams and have large data sets to encode. * * * @param source The data to convert * @return The Base64-encoded data as a byte[] (of ASCII characters) * @throws NullPointerException if source array is null * @since 2.3.1 */ public static byte[] encodeBytesToBytes( byte[] source ) { byte[] encoded = null; try { encoded = encodeBytesToBytes( source, 0, source.length, Base64.NO_OPTIONS ); } catch( java.io.IOException ex ) { assert false : "IOExceptions only come from GZipping, which is turned off: " + ex.getMessage(); } return encoded; } /** * Similar to {@link #encodeBytes(byte[], int, int, int)} but returns * a byte array instead of instantiating a String. This is more efficient * if you're working with I/O streams and have large data sets to encode. * * * @param source The data to convert * @param off Offset in array where conversion should begin * @param len Length of data to convert * @param options Specified options * @return The Base64-encoded data as a String * @see Base64#GZIP * @see Base64#DO_BREAK_LINES * @throws java.io.IOException if there is an error * @throws NullPointerException if source array is null * @throws IllegalArgumentException if source array, offset, or length are invalid * @since 2.3.1 */ public static byte[] encodeBytesToBytes( byte[] source, int off, int len, int options ) throws java.io.IOException { if( source == null ){ throw new NullPointerException( "Cannot serialize a null array." ); } // end if: null if( off < 0 ){ throw new IllegalArgumentException( "Cannot have negative offset: " + off ); } // end if: off < 0 if( len < 0 ){ throw new IllegalArgumentException( "Cannot have length offset: " + len ); } // end if: len < 0 if( off + len > source.length ){ throw new IllegalArgumentException( String.format( "Cannot have offset of %d and length of %d with array of length %d", off,len,source.length)); } // end if: off < 0 // Compress? if( (options & GZIP) != 0 ) { java.io.ByteArrayOutputStream baos = null; java.util.zip.GZIPOutputStream gzos = null; Base64.OutputStream b64os = null; try { // GZip -> Base64 -> ByteArray baos = new java.io.ByteArrayOutputStream(); b64os = new Base64.OutputStream( baos, ENCODE | options ); gzos = new java.util.zip.GZIPOutputStream( b64os ); gzos.write( source, off, len ); gzos.close(); } // end try catch( java.io.IOException e ) { // Catch it and then throw it immediately so that // the finally{} block is called for cleanup. throw e; } // end catch finally { try{ gzos.close(); } catch( Exception e ){} try{ b64os.close(); } catch( Exception e ){} try{ baos.close(); } catch( Exception e ){} } // end finally return baos.toByteArray(); } // end if: compress // Else, don't compress. Better not to use streams at all then. else { boolean breakLines = (options & DO_BREAK_LINES) > 0; //int len43 = len * 4 / 3; //byte[] outBuff = new byte[ ( len43 ) // Main 4:3 // + ( (len % 3) > 0 ? 4 : 0 ) // Account for padding // + (breakLines ? ( len43 / MAX_LINE_LENGTH ) : 0) ]; // New lines // Try to determine more precisely how big the array needs to be. // If we get it right, we don't have to do an array copy, and // we save a bunch of memory. int encLen = ( len / 3 ) * 4 + ( len % 3 > 0 ? 4 : 0 ); // Bytes needed for actual encoding if( breakLines ){ encLen += encLen / MAX_LINE_LENGTH; // Plus extra newline characters } byte[] outBuff = new byte[ encLen ]; int d = 0; int e = 0; int len2 = len - 2; int lineLength = 0; for( ; d < len2; d+=3, e+=4 ) { encode3to4( source, d+off, 3, outBuff, e, options ); lineLength += 4; if( breakLines && lineLength >= MAX_LINE_LENGTH ) { outBuff[e+4] = NEW_LINE; e++; lineLength = 0; } // end if: end of line } // en dfor: each piece of array if( d < len ) { encode3to4( source, d+off, len - d, outBuff, e, options ); e += 4; } // end if: some padding needed // Only resize array if we didn't guess it right. if( e < outBuff.length - 1 ){ byte[] finalOut = new byte[e]; System.arraycopy(outBuff,0, finalOut,0,e); //System.err.println("Having to resize array from " + outBuff.length + " to " + e ); return finalOut; } else { //System.err.println("No need to resize array."); return outBuff; } } // end else: don't compress } // end encodeBytesToBytes /* ******** D E C O D I N G M E T H O D S ******** */ /** * Decodes four bytes from array source * and writes the resulting bytes (up to three of them) * to destination. * The source and destination arrays can be manipulated * anywhere along their length by specifying * srcOffset and destOffset. * This method does not check to make sure your arrays * are large enough to accommodate srcOffset + 4 for * the source array or destOffset + 3 for * the destination array. * This method returns the actual number of bytes that * were converted from the Base64 encoding. *

This is the lowest level of the decoding methods with * all possible parameters.

* * * @param source the array to convert * @param srcOffset the index where conversion begins * @param destination the array to hold the conversion * @param destOffset the index where output will be put * @param options alphabet type is pulled from this (standard, url-safe, ordered) * @return the number of decoded bytes converted * @throws NullPointerException if source or destination arrays are null * @throws IllegalArgumentException if srcOffset or destOffset are invalid * or there is not enough room in the array. * @since 1.3 */ private static int decode4to3( byte[] source, int srcOffset, byte[] destination, int destOffset, int options ) { // Lots of error checking and exception throwing if( source == null ){ throw new NullPointerException( "Source array was null." ); } // end if if( destination == null ){ throw new NullPointerException( "Destination array was null." ); } // end if if( srcOffset < 0 || srcOffset + 3 >= source.length ){ throw new IllegalArgumentException( String.format( "Source array with length %d cannot have offset of %d and still process four bytes.", source.length, srcOffset ) ); } // end if if( destOffset < 0 || destOffset +2 >= destination.length ){ throw new IllegalArgumentException( String.format( "Destination array with length %d cannot have offset of %d and still store three bytes.", destination.length, destOffset ) ); } // end if byte[] DECODABET = getDecodabet( options ); // Example: Dk== if( source[ srcOffset + 2] == EQUALS_SIGN ) { // Two ways to do the same thing. Don't know which way I like best. //int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) // | ( ( DECODABET[ source[ srcOffset + 1] ] << 24 ) >>> 12 ); int outBuff = ( ( DECODABET[ source[ srcOffset ] ] & 0xFF ) << 18 ) | ( ( DECODABET[ source[ srcOffset + 1] ] & 0xFF ) << 12 ); destination[ destOffset ] = (byte)( outBuff >>> 16 ); return 1; } // Example: DkL= else if( source[ srcOffset + 3 ] == EQUALS_SIGN ) { // Two ways to do the same thing. Don't know which way I like best. //int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 ) // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 ); int outBuff = ( ( DECODABET[ source[ srcOffset ] ] & 0xFF ) << 18 ) | ( ( DECODABET[ source[ srcOffset + 1 ] ] & 0xFF ) << 12 ) | ( ( DECODABET[ source[ srcOffset + 2 ] ] & 0xFF ) << 6 ); destination[ destOffset ] = (byte)( outBuff >>> 16 ); destination[ destOffset + 1 ] = (byte)( outBuff >>> 8 ); return 2; } // Example: DkLE else { // Two ways to do the same thing. Don't know which way I like best. //int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 ) // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 ) // | ( ( DECODABET[ source[ srcOffset + 3 ] ] << 24 ) >>> 24 ); int outBuff = ( ( DECODABET[ source[ srcOffset ] ] & 0xFF ) << 18 ) | ( ( DECODABET[ source[ srcOffset + 1 ] ] & 0xFF ) << 12 ) | ( ( DECODABET[ source[ srcOffset + 2 ] ] & 0xFF ) << 6) | ( ( DECODABET[ source[ srcOffset + 3 ] ] & 0xFF ) ); destination[ destOffset ] = (byte)( outBuff >> 16 ); destination[ destOffset + 1 ] = (byte)( outBuff >> 8 ); destination[ destOffset + 2 ] = (byte)( outBuff ); return 3; } } // end decodeToBytes /** * Low-level access to decoding ASCII characters in * the form of a byte array. Ignores GUNZIP option, if * it's set. This is not generally a recommended method, * although it is used internally as part of the decoding process. * Special case: if len = 0, an empty array is returned. Still, * if you need more speed and reduced memory footprint (and aren't * gzipping), consider this method. * * @param source The Base64 encoded data * @return decoded data * @since 2.3.1 */ public static byte[] decode( byte[] source ){ byte[] decoded = null; try { decoded = decode( source, 0, source.length, Base64.NO_OPTIONS ); } catch( java.io.IOException ex ) { assert false : "IOExceptions only come from GZipping, which is turned off: " + ex.getMessage(); } return decoded; } /** * Low-level access to decoding ASCII characters in * the form of a byte array. Ignores GUNZIP option, if * it's set. This is not generally a recommended method, * although it is used internally as part of the decoding process. * Special case: if len = 0, an empty array is returned. Still, * if you need more speed and reduced memory footprint (and aren't * gzipping), consider this method. * * @param source The Base64 encoded data * @param off The offset of where to begin decoding * @param len The length of characters to decode * @param options Can specify options such as alphabet type to use * @return decoded data * @throws java.io.IOException If bogus characters exist in source data * @since 1.3 */ public static byte[] decode( byte[] source, int off, int len, int options ) throws java.io.IOException { // Lots of error checking and exception throwing if( source == null ){ throw new NullPointerException( "Cannot decode null source array." ); } // end if if( off < 0 || off + len > source.length ){ throw new IllegalArgumentException( String.format( "Source array with length %d cannot have offset of %d and process %d bytes.", source.length, off, len ) ); } // end if if( len == 0 ){ return new byte[0]; }else if( len < 4 ){ throw new IllegalArgumentException( "Base64-encoded string must have at least four characters, but length specified was " + len ); } // end if byte[] DECODABET = getDecodabet( options ); int len34 = len * 3 / 4; // Estimate on array size byte[] outBuff = new byte[ len34 ]; // Upper limit on size of output int outBuffPosn = 0; // Keep track of where we're writing byte[] b4 = new byte[4]; // Four byte buffer from source, eliminating white space int b4Posn = 0; // Keep track of four byte input buffer int i = 0; // Source array counter byte sbiCrop = 0; // Low seven bits (ASCII) of input byte sbiDecode = 0; // Special value from DECODABET for( i = off; i < off+len; i++ ) { // Loop through source sbiCrop = (byte)(source[i] & 0x7f); // Only the low seven bits sbiDecode = DECODABET[ sbiCrop ]; // Special value // White space, Equals sign, or legit Base64 character // Note the values such as -5 and -9 in the // DECODABETs at the top of the file. if( sbiDecode >= WHITE_SPACE_ENC ) { if( sbiDecode >= EQUALS_SIGN_ENC ) { b4[ b4Posn++ ] = sbiCrop; // Save non-whitespace if( b4Posn > 3 ) { // Time to decode? outBuffPosn += decode4to3( b4, 0, outBuff, outBuffPosn, options ); b4Posn = 0; // If that was the equals sign, break out of 'for' loop if( sbiCrop == EQUALS_SIGN ) { break; } // end if: equals sign } // end if: quartet built } // end if: equals sign or better } // end if: white space, equals sign or better else { // There's a bad input character in the Base64 stream. throw new java.io.IOException( String.format( "Bad Base64 input character '%c' in array position %d", source[i], i ) ); } // end else: } // each input character byte[] out = new byte[ outBuffPosn ]; System.arraycopy( outBuff, 0, out, 0, outBuffPosn ); return out; } // end decode /** * Decodes data from Base64 notation, automatically * detecting gzip-compressed data and decompressing it. * * @param s the string to decode * @return the decoded data * @throws java.io.IOException If there is a problem * @since 1.4 */ public static byte[] decode( String s ) throws java.io.IOException { return decode( s, NO_OPTIONS ); } /** * Decodes data from Base64 notation, automatically * detecting gzip-compressed data and decompressing it. * * @param s the string to decode * @param options encode options such as URL_SAFE * @return the decoded data * @throws java.io.IOException if there is an error * @throws NullPointerException if s is null * @since 1.4 */ public static byte[] decode( String s, int options ) throws java.io.IOException { if( s == null ){ throw new NullPointerException( "Input string was null." ); } // end if byte[] bytes; try { bytes = s.getBytes( PREFERRED_ENCODING ); } // end try catch( java.io.UnsupportedEncodingException uee ) { bytes = s.getBytes(); } // end catch // // Decode bytes = decode( bytes, 0, bytes.length, options ); // Check to see if it's gzip-compressed // GZIP Magic Two-Byte Number: 0x8b1f (35615) boolean dontGunzip = (options & DONT_GUNZIP) != 0; if( (bytes != null) && (bytes.length >= 4) && (!dontGunzip) ) { int head = (bytes[0] & 0xff) | ((bytes[1] << 8) & 0xff00); if( java.util.zip.GZIPInputStream.GZIP_MAGIC == head ) { java.io.ByteArrayInputStream bais = null; java.util.zip.GZIPInputStream gzis = null; java.io.ByteArrayOutputStream baos = null; byte[] buffer = new byte[2048]; int length = 0; try { baos = new java.io.ByteArrayOutputStream(); bais = new java.io.ByteArrayInputStream( bytes ); gzis = new java.util.zip.GZIPInputStream( bais ); while( ( length = gzis.read( buffer ) ) >= 0 ) { baos.write(buffer,0,length); } // end while: reading input // No error? Get new bytes. bytes = baos.toByteArray(); } // end try catch( java.io.IOException e ) { e.printStackTrace(); // Just return originally-decoded bytes } // end catch finally { try{ baos.close(); } catch( Exception e ){} try{ gzis.close(); } catch( Exception e ){} try{ bais.close(); } catch( Exception e ){} } // end finally } // end if: gzipped } // end if: bytes.length >= 2 return bytes; } // end decode /** * Attempts to decode Base64 data and deserialize a Java * Object within. Returns null if there was an error. * * @param encodedObject The Base64 data to decode * @return The decoded and deserialized object * @throws NullPointerException if encodedObject is null * @throws java.io.IOException if there is a general error * @throws ClassNotFoundException if the decoded object is of a * class that cannot be found by the JVM * @since 1.5 */ public static Object decodeToObject( String encodedObject ) throws java.io.IOException, java.lang.ClassNotFoundException { return decodeToObject(encodedObject,NO_OPTIONS,null); } /** * Attempts to decode Base64 data and deserialize a Java * Object within. Returns null if there was an error. * If loader is not null, it will be the class loader * used when deserializing. * * @param encodedObject The Base64 data to decode * @param options Various parameters related to decoding * @param loader Optional class loader to use in deserializing classes. * @return The decoded and deserialized object * @throws NullPointerException if encodedObject is null * @throws java.io.IOException if there is a general error * @throws ClassNotFoundException if the decoded object is of a * class that cannot be found by the JVM * @since 2.3.4 */ public static Object decodeToObject( String encodedObject, int options, final ClassLoader loader ) throws java.io.IOException, java.lang.ClassNotFoundException { // Decode and gunzip if necessary byte[] objBytes = decode( encodedObject, options ); java.io.ByteArrayInputStream bais = null; java.io.ObjectInputStream ois = null; Object obj = null; try { bais = new java.io.ByteArrayInputStream( objBytes ); // If no custom class loader is provided, use Java's builtin OIS. if( loader == null ){ ois = new java.io.ObjectInputStream( bais ); } // end if: no loader provided // Else make a customized object input stream that uses // the provided class loader. else { ois = new java.io.ObjectInputStream(bais){ @Override public Class resolveClass(java.io.ObjectStreamClass streamClass) throws java.io.IOException, ClassNotFoundException { @SuppressWarnings("rawtypes") Class c = Class.forName(streamClass.getName(), false, loader); if( c == null ){ return super.resolveClass(streamClass); } else { return c; // Class loader knows of this class. } // end else: not null } // end resolveClass }; // end ois } // end else: no custom class loader obj = ois.readObject(); } // end try catch( java.io.IOException e ) { throw e; // Catch and throw in order to execute finally{} } // end catch catch( java.lang.ClassNotFoundException e ) { throw e; // Catch and throw in order to execute finally{} } // end catch finally { try{ bais.close(); } catch( Exception e ){} try{ ois.close(); } catch( Exception e ){} } // end finally return obj; } // end decodeObject /** * Convenience method for encoding data to a file. * *

As of v 2.3, if there is a error, * the method will throw an java.io.IOException. This is new to v2.3! * In earlier versions, it just returned false, but * in retrospect that's a pretty poor way to handle it.

* * @param dataToEncode byte array of data to encode in base64 form * @param filename Filename for saving encoded data * @throws java.io.IOException if there is an error * @throws NullPointerException if dataToEncode is null * @since 2.1 */ public static void encodeToFile( byte[] dataToEncode, String filename ) throws java.io.IOException { if( dataToEncode == null ){ throw new NullPointerException( "Data to encode was null." ); } // end iff Base64.OutputStream bos = null; try { bos = new Base64.OutputStream( new java.io.FileOutputStream( filename ), Base64.ENCODE ); bos.write( dataToEncode ); } // end try catch( java.io.IOException e ) { throw e; // Catch and throw to execute finally{} block } // end catch: java.io.IOException finally { try{ bos.close(); } catch( Exception e ){} } // end finally } // end encodeToFile /** * Convenience method for decoding data to a file. * *

As of v 2.3, if there is a error, * the method will throw an java.io.IOException. This is new to v2.3! * In earlier versions, it just returned false, but * in retrospect that's a pretty poor way to handle it.

* * @param dataToDecode Base64-encoded data as a string * @param filename Filename for saving decoded data * @throws java.io.IOException if there is an error * @since 2.1 */ public static void decodeToFile( String dataToDecode, String filename ) throws java.io.IOException { Base64.OutputStream bos = null; try{ bos = new Base64.OutputStream( new java.io.FileOutputStream( filename ), Base64.DECODE ); bos.write( dataToDecode.getBytes( PREFERRED_ENCODING ) ); } // end try catch( java.io.IOException e ) { throw e; // Catch and throw to execute finally{} block } // end catch: java.io.IOException finally { try{ bos.close(); } catch( Exception e ){} } // end finally } // end decodeToFile /** * Convenience method for reading a base64-encoded * file and decoding it. * *

As of v 2.3, if there is a error, * the method will throw an java.io.IOException. This is new to v2.3! * In earlier versions, it just returned false, but * in retrospect that's a pretty poor way to handle it.

* * @param filename Filename for reading encoded data * @return decoded byte array * @throws java.io.IOException if there is an error * @since 2.1 */ public static byte[] decodeFromFile( String filename ) throws java.io.IOException { byte[] decodedData = null; Base64.InputStream bis = null; try { // Set up some useful variables java.io.File file = new java.io.File( filename ); byte[] buffer = null; int length = 0; int numBytes = 0; // Check for size of file if( file.length() > Integer.MAX_VALUE ) { throw new java.io.IOException( "File is too big for this convenience method (" + file.length() + " bytes)." ); } // end if: file too big for int index buffer = new byte[ (int)file.length() ]; // Open a stream bis = new Base64.InputStream( new java.io.BufferedInputStream( new java.io.FileInputStream( file ) ), Base64.DECODE ); // Read until done while( ( numBytes = bis.read( buffer, length, 4096 ) ) >= 0 ) { length += numBytes; } // end while // Save in a variable to return decodedData = new byte[ length ]; System.arraycopy( buffer, 0, decodedData, 0, length ); } // end try catch( java.io.IOException e ) { throw e; // Catch and release to execute finally{} } // end catch: java.io.IOException finally { try{ bis.close(); } catch( Exception e) {} } // end finally return decodedData; } // end decodeFromFile /** * Convenience method for reading a binary file * and base64-encoding it. * *

As of v 2.3, if there is a error, * the method will throw an java.io.IOException. This is new to v2.3! * In earlier versions, it just returned false, but * in retrospect that's a pretty poor way to handle it.

* * @param filename Filename for reading binary data * @return base64-encoded string * @throws java.io.IOException if there is an error * @since 2.1 */ public static String encodeFromFile( String filename ) throws java.io.IOException { String encodedData = null; Base64.InputStream bis = null; try { // Set up some useful variables java.io.File file = new java.io.File( filename ); byte[] buffer = new byte[ Math.max((int)(file.length() * 1.4),40) ]; // Need max() for math on small files (v2.2.1) int length = 0; int numBytes = 0; // Open a stream bis = new Base64.InputStream( new java.io.BufferedInputStream( new java.io.FileInputStream( file ) ), Base64.ENCODE ); // Read until done while( ( numBytes = bis.read( buffer, length, 4096 ) ) >= 0 ) { length += numBytes; } // end while // Save in a variable to return encodedData = new String( buffer, 0, length, Base64.PREFERRED_ENCODING ); } // end try catch( java.io.IOException e ) { throw e; // Catch and release to execute finally{} } // end catch: java.io.IOException finally { try{ bis.close(); } catch( Exception e) {} } // end finally return encodedData; } // end encodeFromFile /** * Reads infile and encodes it to outfile. * * @param infile Input file * @param outfile Output file * @throws java.io.IOException if there is an error * @since 2.2 */ public static void encodeFileToFile( String infile, String outfile ) throws java.io.IOException { String encoded = Base64.encodeFromFile( infile ); java.io.OutputStream out = null; try{ out = new java.io.BufferedOutputStream( new java.io.FileOutputStream( outfile ) ); out.write( encoded.getBytes("US-ASCII") ); // Strict, 7-bit output. } // end try catch( java.io.IOException e ) { throw e; // Catch and release to execute finally{} } // end catch finally { try { out.close(); } catch( Exception ex ){} } // end finally } // end encodeFileToFile /** * Reads infile and decodes it to outfile. * * @param infile Input file * @param outfile Output file * @throws java.io.IOException if there is an error * @since 2.2 */ public static void decodeFileToFile( String infile, String outfile ) throws java.io.IOException { byte[] decoded = Base64.decodeFromFile( infile ); java.io.OutputStream out = null; try{ out = new java.io.BufferedOutputStream( new java.io.FileOutputStream( outfile ) ); out.write( decoded ); } // end try catch( java.io.IOException e ) { throw e; // Catch and release to execute finally{} } // end catch finally { try { out.close(); } catch( Exception ex ){} } // end finally } // end decodeFileToFile /* ******** I N N E R C L A S S I N P U T S T R E A M ******** */ /** * A {@link Base64.InputStream} will read data from another * java.io.InputStream, given in the constructor, * and encode/decode to/from Base64 notation on the fly. * * @see Base64 * @since 1.3 */ public static class InputStream extends java.io.FilterInputStream { private final boolean encode; // Encoding or decoding private int position; // Current position in the buffer private final byte[] buffer; // Small buffer holding converted data private final int bufferLength; // Length of buffer (3 or 4) private int numSigBytes; // Number of meaningful bytes in the buffer private int lineLength; private final boolean breakLines; // Break lines at less than 80 characters private final int options; // Record options used to create the stream. private final byte[] decodabet; // Local copies to avoid extra method calls /** * Constructs a {@link Base64.InputStream} in DECODE mode. * * @param in the java.io.InputStream from which to read data. * @since 1.3 */ public InputStream( java.io.InputStream in ) { this( in, DECODE ); } // end constructor /** * Constructs a {@link Base64.InputStream} in * either ENCODE or DECODE mode. *

* Valid options:

         *   ENCODE or DECODE: Encode or Decode as data is read.
         *   DO_BREAK_LINES: break lines at 76 characters
         *     (only meaningful when encoding)
         * 
*

* Example: new Base64.InputStream( in, Base64.DECODE ) * * * @param in the java.io.InputStream from which to read data. * @param options Specified options * @see Base64#ENCODE * @see Base64#DECODE * @see Base64#DO_BREAK_LINES * @since 2.0 */ public InputStream( java.io.InputStream in, int options ) { super( in ); this.options = options; // Record for later this.breakLines = (options & DO_BREAK_LINES) > 0; this.encode = (options & ENCODE) > 0; this.bufferLength = encode ? 4 : 3; this.buffer = new byte[ bufferLength ]; this.position = -1; this.lineLength = 0; this.decodabet = getDecodabet(options); } // end constructor /** * Reads enough of the input stream to convert * to/from Base64 and returns the next byte. * * @return next byte * @since 1.3 */ @Override public int read() throws java.io.IOException { // Do we need to get data? if( position < 0 ) { if( encode ) { byte[] b3 = new byte[3]; int numBinaryBytes = 0; for( int i = 0; i < 3; i++ ) { int b = in.read(); // If end of stream, b is -1. if( b >= 0 ) { b3[i] = (byte)b; numBinaryBytes++; } else { break; // out of for loop } // end else: end of stream } // end for: each needed input byte if( numBinaryBytes > 0 ) { encode3to4( b3, 0, numBinaryBytes, buffer, 0, options ); position = 0; numSigBytes = 4; } // end if: got data else { return -1; // Must be end of stream } // end else } // end if: encoding // Else decoding else { byte[] b4 = new byte[4]; int i = 0; for( i = 0; i < 4; i++ ) { // Read four "meaningful" bytes: int b = 0; do{ b = in.read(); } while( b >= 0 && decodabet[ b & 0x7f ] <= WHITE_SPACE_ENC ); if( b < 0 ) { break; // Reads a -1 if end of stream } // end if: end of stream b4[i] = (byte)b; } // end for: each needed input byte if( i == 4 ) { numSigBytes = decode4to3( b4, 0, buffer, 0, options ); position = 0; } // end if: got four characters else if( i == 0 ){ return -1; } // end else if: also padded correctly else { // Must have broken out from above. throw new java.io.IOException( "Improperly padded Base64 input." ); } // end } // end else: decode } // end else: get data // Got data? if( position >= 0 ) { // End of relevant data? if( /*!encode &&*/ position >= numSigBytes ){ return -1; } // end if: got data if( encode && breakLines && lineLength >= MAX_LINE_LENGTH ) { lineLength = 0; return '\n'; } // end if else { lineLength++; // This isn't important when decoding // but throwing an extra "if" seems // just as wasteful. int b = buffer[ position++ ]; if( position >= bufferLength ) { position = -1; } // end if: end return b & 0xFF; // This is how you "cast" a byte that's // intended to be unsigned. } // end else } // end if: position >= 0 // Else error else { throw new java.io.IOException( "Error in Base64 code reading stream." ); } // end else } // end read /** * Calls {@link #read()} repeatedly until the end of stream * is reached or len bytes are read. * Returns number of bytes read into array or -1 if * end of stream is encountered. * * @param dest array to hold values * @param off offset for array * @param len max number of bytes to read into array * @return bytes read into array or -1 if end of stream is encountered. * @since 1.3 */ @Override public int read( byte[] dest, int off, int len ) throws java.io.IOException { int i; int b; for( i = 0; i < len; i++ ) { b = read(); if( b >= 0 ) { dest[off + i] = (byte) b; } else if( i == 0 ) { return -1; } else { break; // Out of 'for' loop } // Out of 'for' loop } // end for: each byte read return i; } // end read } // end inner class InputStream /* ******** I N N E R C L A S S O U T P U T S T R E A M ******** */ /** * A {@link Base64.OutputStream} will write data to another * java.io.OutputStream, given in the constructor, * and encode/decode to/from Base64 notation on the fly. * * @see Base64 * @since 1.3 */ public static class OutputStream extends java.io.FilterOutputStream { private final boolean encode; private int position; private byte[] buffer; private final int bufferLength; private int lineLength; private final boolean breakLines; private final byte[] b4; // Scratch used in a few places private boolean suspendEncoding; private final int options; // Record for later private final byte[] decodabet; // Local copies to avoid extra method calls /** * Constructs a {@link Base64.OutputStream} in ENCODE mode. * * @param out the java.io.OutputStream to which data will be written. * @since 1.3 */ public OutputStream( java.io.OutputStream out ) { this( out, ENCODE ); } // end constructor /** * Constructs a {@link Base64.OutputStream} in * either ENCODE or DECODE mode. *

* Valid options:

         *   ENCODE or DECODE: Encode or Decode as data is read.
         *   DO_BREAK_LINES: don't break lines at 76 characters
         *     (only meaningful when encoding)
         * 
*

* Example: new Base64.OutputStream( out, Base64.ENCODE ) * * @param out the java.io.OutputStream to which data will be written. * @param options Specified options. * @see Base64#ENCODE * @see Base64#DECODE * @see Base64#DO_BREAK_LINES * @since 1.3 */ public OutputStream( java.io.OutputStream out, int options ) { super( out ); this.breakLines = (options & DO_BREAK_LINES) != 0; this.encode = (options & ENCODE) != 0; this.bufferLength = encode ? 3 : 4; this.buffer = new byte[ bufferLength ]; this.position = 0; this.lineLength = 0; this.suspendEncoding = false; this.b4 = new byte[4]; this.options = options; this.decodabet = getDecodabet(options); } // end constructor /** * Writes the byte to the output stream after * converting to/from Base64 notation. * When encoding, bytes are buffered three * at a time before the output stream actually * gets a write() call. * When decoding, bytes are buffered four * at a time. * * @param theByte the byte to write * @since 1.3 */ @Override public void write(int theByte) throws java.io.IOException { // Encoding suspended? if( suspendEncoding ) { this.out.write( theByte ); return; } // end if: supsended // Encode? if( encode ) { buffer[ position++ ] = (byte)theByte; if( position >= bufferLength ) { // Enough to encode. this.out.write( encode3to4( b4, buffer, bufferLength, options ) ); lineLength += 4; if( breakLines && lineLength >= MAX_LINE_LENGTH ) { this.out.write( NEW_LINE ); lineLength = 0; } // end if: end of line position = 0; } // end if: enough to output } // end if: encoding // Else, Decoding else { // Meaningful Base64 character? if( decodabet[ theByte & 0x7f ] > WHITE_SPACE_ENC ) { buffer[ position++ ] = (byte)theByte; if( position >= bufferLength ) { // Enough to output. int len = Base64.decode4to3( buffer, 0, b4, 0, options ); out.write( b4, 0, len ); position = 0; } // end if: enough to output } // end if: meaningful base64 character else if( decodabet[ theByte & 0x7f ] != WHITE_SPACE_ENC ) { throw new java.io.IOException( "Invalid character in Base64 data." ); } // end else: not white space either } // end else: decoding } // end write /** * Calls {@link #write(int)} repeatedly until len * bytes are written. * * @param theBytes array from which to read bytes * @param off offset for array * @param len max number of bytes to read into array * @since 1.3 */ @Override public void write( byte[] theBytes, int off, int len ) throws java.io.IOException { // Encoding suspended? if( suspendEncoding ) { this.out.write( theBytes, off, len ); return; } // end if: supsended for( int i = 0; i < len; i++ ) { write( theBytes[ off + i ] ); } // end for: each byte written } // end write /** * Method added by PHIL. [Thanks, PHIL. -Rob] * This pads the buffer without closing the stream. * @throws java.io.IOException if there's an error. */ public void flushBase64() throws java.io.IOException { if( position > 0 ) { if( encode ) { out.write( encode3to4( b4, buffer, position, options ) ); position = 0; } // end if: encoding else { throw new java.io.IOException( "Base64 input not properly padded." ); } // end else: decoding } // end if: buffer partially full } // end flush /** * Flushes and closes (I think, in the superclass) the stream. * * @since 1.3 */ @Override public void close() throws java.io.IOException { // 1. Ensure that pending characters are written flushBase64(); // 2. Actually close the stream // Base class both flushes and closes. super.close(); buffer = null; out = null; } // end close /** * Suspends encoding of the stream. * May be helpful if you need to embed a piece of * base64-encoded data in a stream. * * @throws java.io.IOException if there's an error flushing * @since 1.5.1 */ public void suspendEncoding() throws java.io.IOException { flushBase64(); this.suspendEncoding = true; } // end suspendEncoding /** * Resumes encoding of the stream. * May be helpful if you need to embed a piece of * base64-encoded data in a stream. * * @since 1.5.1 */ public void resumeEncoding() { this.suspendEncoding = false; } // end resumeEncoding } // end inner class OutputStream } // end class Base64 nixnote2-2.0.2/java/src/cx/fbn/encrypt/Crypto.java000066400000000000000000000013431315604104400217560ustar00rootroot00000000000000package cx.fbn.encrypt; public class Crypto { /** * @param args */ public static void main(String[] args) { EnCrypt encrypt = new EnCrypt(); if (args.length != 4) System.exit(16); String function = args[0]; String password = args[1]; String keylen = args[2]; String text = args[3]; String result = ""; if (function.equalsIgnoreCase("encrypt-rc2")) result = encrypt.encryptRC2(text, password, Integer.parseInt(keylen)); else if (function.equalsIgnoreCase("decrypt-rc2")) result = encrypt.decryptRC2(text, password, Integer.parseInt(keylen)); else System.exit(14); if (result.equals("")) System.exit(4); System.out.print(result); } } nixnote2-2.0.2/java/src/cx/fbn/encrypt/EnCrypt.java000066400000000000000000000240511315604104400220630ustar00rootroot00000000000000/* * This file is part of NixNote * Copyright 2014 Randy Baumgarte * * This file may be licensed under the terms of the * GNU General Public License Version 2 (the ``GPL''). * * Software distributed under the License is distributed * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either * express or implied. See the GPL for the specific language * governing rights and limitations. * * You should have received a copy of the GPL along with this * program. If not, go to http://www.gnu.org/licenses/gpl.html * or write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ package cx.fbn.encrypt; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.zip.CRC32; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.RC2ParameterSpec; import javax.crypto.spec.SecretKeySpec; import cx.fbn.encrypt.Base64; public class EnCrypt { // Convert a string of text to a hex string public static String asHex (byte buf[]) { StringBuffer strbuf = new StringBuffer(buf.length * 2); int i; for (i = 0; i < buf.length; i++) { if ((buf[i] & 0xff) < 0x10) strbuf.append("0"); strbuf.append(Long.toString(buf[i] & 0xff, 16)); } return strbuf.toString(); } /** * Choose the character set to use for encoding */ private Charset getCharset() { // Just hard-coding choice here boolean useUtf8 = true; final Charset charSet; if(useUtf8) { charSet = Charset.forName("UTF-8"); } else { charSet = Charset.defaultCharset(); } return charSet; } /* Main changes are * * 1. Do padding based on encoded bytes, not string length (some chars -> 2 bytes) * 2. Use specific named charset */ private byte[] encodeString(String text, int length) { final Charset charSet = getCharset(); // Convert to bytes using given encoding, and align *bytes* to multiple of // 8, with 4 bytes reserved for the crc final byte[] bytes = text.getBytes(charSet); int align = (bytes.length + 4) % length; int paddingNeeded = length - align; final byte[] paddedBytes = Arrays.copyOf(bytes, bytes.length + paddingNeeded); // Now calculate the crc, using the bytes String crc = crcHeader(paddedBytes); byte[] crcBytes = crc.getBytes(charSet); if(crcBytes.length != 4) { System.err.println("CRC Bytes really should be 4 in length!"); return null; } // Now combine crc bytes and string bytes into byte array // for encryption byte[] total = new byte[paddedBytes.length + crcBytes.length]; System.arraycopy(crcBytes, 0, total, 0, crcBytes.length); System.arraycopy(paddedBytes, 0, total, crcBytes.length, paddedBytes.length); return total; } /** * Same as for encryption: use named charset, and * @param bytes * @return */ private String decodeBytes(byte[] bytes) { Charset charSet = getCharset(); byte[] crcBytes = Arrays.copyOfRange(bytes, 0, 4); byte[] textBytes = Arrays.copyOfRange(bytes, 4, bytes.length); CharBuffer crcChar = charSet.decode(ByteBuffer.wrap(crcBytes)); CharBuffer textChar = charSet.decode(ByteBuffer.wrap(textBytes)); // Get crc of text to see if same String cryptCRC = crcChar.toString(); String realCRC = crcHeader(textBytes); if(realCRC.equals(cryptCRC)) { // Trim nulls at end while(textChar.get(textChar.limit() - 1) == 0 && textChar.limit() != 0) { textChar.limit(textChar.limit() - 1); } String str = textChar.toString(); return str; } return ""; } // Encrypt the text and return the base64 string public String encryptRC2(String text, String passphrase, int keylen) { RC2ParameterSpec parm = new RC2ParameterSpec(keylen); try { // Get a MD5 for the passphrase MessageDigest md = MessageDigest.getInstance("MD5"); // NB Use specific Charset md.update(passphrase.getBytes(getCharset())); // Setup parms for the cipher SecretKeySpec skeySpec = new SecretKeySpec(md.digest(), "RC2"); Cipher cipher = Cipher.getInstance("RC2/ECB/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec, parm); //byte[] oldBytes = encodeStringOld(text); byte[] newBytes = encodeString(text, 8); byte[] d = cipher.doFinal(newBytes); return Base64.encodeBytes(d); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return ""; } // Decrypt the base64 text and return the unsecure text public String decryptRC2(String text, String passphrase, int keylen) { RC2ParameterSpec parm = new RC2ParameterSpec(keylen); MessageDigest md; try { // Get a MD5 for the passphrase md = MessageDigest.getInstance("MD5"); md.update(passphrase.getBytes(getCharset())); // Setup parms for the cipher SecretKeySpec skeySpec = new SecretKeySpec(md.digest(), "RC2"); Cipher cipher = Cipher.getInstance("RC2/ECB/NOPADDING"); cipher.init(Cipher.DECRYPT_MODE, skeySpec, parm); // Decode the encrypted text and decrypt byte[] dString = Base64.decode(text); byte[] d = cipher.doFinal(dString); //String clearTextOld = decodeBytesOld(d); String clearTextNew = decodeBytes(d); return clearTextNew; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return ""; } // Encrypt the text and return the base64 string public String encryptAES(String text, String passphrase, int keylen) { try { // Get a MD5 for the passphrase MessageDigest md = MessageDigest.getInstance("MD5"); // NB Use specific Charset md.update(passphrase.getBytes(getCharset())); // Setup parms for the cipher SecretKeySpec skeySpec = new SecretKeySpec(md.digest(), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); //byte[] oldBytes = encodeStringOld(text); byte[] newBytes = encodeString(text, 16); byte[] d = cipher.doFinal(newBytes); return Base64.encodeBytes(d); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return ""; } // Decrypt the base64 text and return the unsecure text public String decryptAES(String text, String passphrase, int keylen) { MessageDigest md; try { // Get a MD5 for the passphrase md = MessageDigest.getInstance("MD5"); md.update(passphrase.getBytes(getCharset())); // Setup parms for the cipher byte[] digest = md.digest(); SecretKeySpec skeySpec = new SecretKeySpec(digest, "AES"); //Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); //byte[] iv = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // Needed for CBC mode //IvParameterSpec ivspec = new IvParameterSpec(iv); //cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivspec); // ECB mode cipher.init(Cipher.DECRYPT_MODE, skeySpec); // Decode the encrypted text and decrypt byte[] dString = Base64.decode(text); byte[] d = cipher.doFinal(dString); //String clearTextOld = decodeBytesOld(d); String clearTextNew = decodeBytes(d); return clearTextNew; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); // } catch (InvalidAlgorithmParameterException e) { // e.printStackTrace(); } return ""; } // Utility function to return the CRC header of an encoded string. This is // used to verify good decryption and put in front of a new encrypted string private String crcHeader(byte[] bytes) { CRC32 crc = new CRC32(); crc.update(bytes); int realCRC = (int)crc.getValue(); // The first 4 chars of the hex string will equal the first // 4 chars of the decyphered text. If they match we have a // good password. This is what we return realCRC = realCRC ^ (-1); realCRC = realCRC >>> 0; String hexCRC = Integer.toHexString(realCRC).substring(0,4); return hexCRC.toString().toUpperCase(); } } nixnote2-2.0.2/license.html000066400000000000000000000016401315604104400155700ustar00rootroot00000000000000 NixNote 2.0

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version
.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Evernote is Copyright Å  2000-2014 Evernote Corporation.All rights reserved.

All other trademarks are property of their respective owners. nixnote2-2.0.2/logger/000077500000000000000000000000001315604104400145365ustar00rootroot00000000000000nixnote2-2.0.2/logger/qsdebugoutput.cpp000066400000000000000000000042431315604104400201600ustar00rootroot00000000000000// Copyright (c) 2010, Razvan Petru // All rights reserved. // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, this // list of conditions and the following disclaimer in the documentation and/or other // materials provided with the distribution. // * The name of the contributors may not be used to endorse or promote products // derived from this software without specific prior written permission. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. // IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED // OF THE POSSIBILITY OF SUCH DAMAGE. #include "logger/qsdebugoutput.h" #include #include #if defined(Q_OS_WIN) #define WIN32_LEAN_AND_MEAN #include void QsDebugOutput::output( const QString& message ) { OutputDebugStringW(reinterpret_cast(message.utf16())); OutputDebugStringW(L"\n"); } #elif defined(Q_OS_SYMBIAN) #include void QsDebugOutput::output( const QString& message ) { TPtrC8 symbianMessage(reinterpret_cast(qPrintable(message))); RDebug::RawPrint(symbianMessage); } #elif defined(Q_OS_UNIX) #include void QsDebugOutput::output( const QString& message ) { fprintf(stderr, "%s\n", qPrintable(message)); fflush(stderr); } #endif nixnote2-2.0.2/logger/qsdebugoutput.h000066400000000000000000000032221315604104400176210ustar00rootroot00000000000000// Copyright (c) 2010, Razvan Petru // All rights reserved. // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, this // list of conditions and the following disclaimer in the documentation and/or other // materials provided with the distribution. // * The name of the contributors may not be used to endorse or promote products // derived from this software without specific prior written permission. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. // IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED // OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef QSDEBUGOUTPUT_H #define QSDEBUGOUTPUT_H class QString; class QsDebugOutput { public: static void output(const QString& a_message); }; #endif // QSDEBUGOUTPUT_H nixnote2-2.0.2/logger/qslog.cpp000066400000000000000000000100431315604104400163650ustar00rootroot00000000000000// Copyright (c) 2010, Razvan Petru // All rights reserved. // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, this // list of conditions and the following disclaimer in the documentation and/or other // materials provided with the distribution. // * The name of the contributors may not be used to endorse or promote products // derived from this software without specific prior written permission. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. // IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED // OF THE POSSIBILITY OF SUCH DAMAGE. #include "logger/qslog.h" #include "logger/qslogdest.h" #include #include #include #include #include #include #include namespace QsLogging { typedef QList DestinationList; static const char TraceString[] = "TRACE"; static const char DebugString[] = "DEBUG"; static const char InfoString[] = "INFO"; static const char WarnString[] = "WARN"; static const char ErrorString[] = "ERROR"; static const char FatalString[] = "FATAL"; // not using Qt::ISODate because we need the milliseconds too static const QString fmtDateTime("yyyy-MM-dd hh:mm:ss.zzz"); static const char* LevelToText(Level theLevel) { switch( theLevel ) { case TraceLevel: return TraceString; case DebugLevel: return DebugString; case InfoLevel: return InfoString; case WarnLevel: return WarnString; case ErrorLevel: return ErrorString; case FatalLevel: return FatalString; default: { assert(!"bad log level"); return InfoString; } } } class LoggerImpl { public: LoggerImpl() : level(InfoLevel) { } QMutex logMutex; Level level; DestinationList destList; }; Logger::Logger() : d(new LoggerImpl) { } Logger::~Logger() { delete d; } void Logger::addDestination(Destination* destination) { assert(destination); d->destList.push_back(destination); } void Logger::setLoggingLevel(Level newLevel) { d->level = newLevel; } Level Logger::loggingLevel() const { return d->level; } //! creates the complete log message and passes it to the logger void Logger::Helper::writeToLog() { const char* const levelName = LevelToText(level); const QString completeMessage(QString("%1 %2 %3") .arg(levelName, 5) .arg(QDateTime::currentDateTime().toString(fmtDateTime)) .arg(buffer) ); Logger& logger = Logger::instance(); QMutexLocker lock(&logger.d->logMutex); logger.write(completeMessage); } Logger::Helper::~Helper() { try { writeToLog(); } catch(std::exception& e) { // you shouldn't throw exceptions from a sink Q_UNUSED(e); assert(!"exception in logger helper destructor"); //throw; } } //! sends the message to all the destinations void Logger::write(const QString& message) { for(DestinationList::iterator it = d->destList.begin(), endIt = d->destList.end();it != endIt;++it) { if( !(*it) ) { assert(!"null log destination"); continue; } (*it)->write(message); } } } // end namespace nixnote2-2.0.2/logger/qslog.h000066400000000000000000000135411315604104400160400ustar00rootroot00000000000000// Copyright (c) 2010, Razvan Petru // All rights reserved. // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, this // list of conditions and the following disclaimer in the documentation and/or other // materials provided with the distribution. // * The name of the contributors may not be used to endorse or promote products // derived from this software without specific prior written permission. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. // IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED // OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef QSLOG_H #define QSLOG_H #include #include #include namespace QsLogging { class Destination; enum Level { TraceLevel = 0, DebugLevel, InfoLevel, WarnLevel, ErrorLevel, FatalLevel }; class LoggerImpl; // d pointer class Logger { public: static Logger& instance() { static Logger staticLog; return staticLog; } //! Adds a log message destination. Don't add null destinations. void addDestination(Destination* destination); //! Logging at a level < 'newLevel' will be ignored void setLoggingLevel(Level newLevel); //! The default level is INFO Level loggingLevel() const; //! The helper forwards the streaming to QDebug and builds the final //! log message. class Helper { public: explicit Helper(Level logLevel) : level(logLevel), qtDebug(&buffer) {} ~Helper(); QDebug& stream(){ return qtDebug; } private: void writeToLog(); Level level; QString buffer; QDebug qtDebug; }; private: Logger(); Logger(const Logger&); Logger& operator=(const Logger&); ~Logger(); void write(const QString& message); LoggerImpl* d; }; } // end namespace //! Logging macros: define QS_LOG_LINE_NUMBERS to get the file and line number //! in the log output. #define QS_LOG_LINE_NUMBERS 1 #ifndef QS_LOG_LINE_NUMBERS #define QLOG_TRACE() \ if( QsLogging::Logger::instance().loggingLevel() > QsLogging::TraceLevel ){} \ else QsLogging::Logger::Helper(QsLogging::TraceLevel).stream() #define QLOG_DEBUG() \ if( QsLogging::Logger::instance().loggingLevel() > QsLogging::DebugLevel ){} \ else QsLogging::Logger::Helper(QsLogging::DebugLevel).stream() #define QLOG_INFO() \ if( QsLogging::Logger::instance().loggingLevel() > QsLogging::InfoLevel ){} \ else QsLogging::Logger::Helper(QsLogging::InfoLevel).stream() #define QLOG_WARN() \ if( QsLogging::Logger::instance().loggingLevel() > QsLogging::WarnLevel ){} \ else QsLogging::Logger::Helper(QsLogging::WarnLevel).stream() #define QLOG_ERROR() \ if( QsLogging::Logger::instance().loggingLevel() > QsLogging::ErrorLevel ){} \ else QsLogging::Logger::Helper(QsLogging::ErrorLevel).stream() #define QLOG_FATAL() \ QsLogging::Logger::Helper(QsLogging::FatalLevel).stream() #else #define QLOG_TRACE_IN() \ if( QsLogging::Logger::instance().loggingLevel() > QsLogging::TraceLevel ){} \ else (QsLogging::Logger::Helper(QsLogging::TraceLevel).stream() << '('<< __FILE__ << '@' << __LINE__ << ')' << "Entering" << __func__ << ":") #define QLOG_TRACE_OUT() \ if( QsLogging::Logger::instance().loggingLevel() > QsLogging::TraceLevel ){} \ else (QsLogging::Logger::Helper(QsLogging::TraceLevel).stream() << '('<< __FILE__ << '@' << __LINE__ << ')' << "Exiting" << __func__ << ":") #define QLOG_TRACE() \ if( QsLogging::Logger::instance().loggingLevel() > QsLogging::TraceLevel ){} \ else (QsLogging::Logger::Helper(QsLogging::TraceLevel).stream() << '('<< __FILE__ << '@' << __LINE__ << ')') #define QLOG_DEBUG() \ if( QsLogging::Logger::instance().loggingLevel() > QsLogging::DebugLevel ){} \ else (QsLogging::Logger::Helper(QsLogging::DebugLevel).stream() << '('<< __FILE__ << '@' << __LINE__ << ')') #define QLOG_INFO() \ if( QsLogging::Logger::instance().loggingLevel() > QsLogging::InfoLevel ){} \ else (QsLogging::Logger::Helper(QsLogging::InfoLevel).stream() << '('<< __FILE__ << '@' << __LINE__ << ')') #define QLOG_WARN() \ if( QsLogging::Logger::instance().loggingLevel() > QsLogging::WarnLevel ){} \ else (QsLogging::Logger::Helper(QsLogging::WarnLevel).stream() << '('<< __FILE__ << '@' << __LINE__ << ')') #define QLOG_ERROR() \ if( QsLogging::Logger::instance().loggingLevel() > QsLogging::ErrorLevel ){} \ else (QsLogging::Logger::Helper(QsLogging::ErrorLevel).stream() << '('<< __FILE__ << '@' << __LINE__ << ')') #define QLOG_FATAL() \ (QsLogging::Logger::Helper(QsLogging::FatalLevel).stream() << '('<< __FILE__ << '@' << __LINE__ << ')') #endif namespace qevercloud { template class Optional; } template QDebug operator<<(QDebug dbg, const qevercloud::Optional &opt) { if (opt.isSet()) { return dbg << opt.ref(); } else { return dbg << "(unset)"; } } #endif // QSLOG_H nixnote2-2.0.2/logger/qslogdest.cpp000066400000000000000000000052301315604104400172470ustar00rootroot00000000000000// Copyright (c) 2010, Razvan Petru // All rights reserved. // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, this // list of conditions and the following disclaimer in the documentation and/or other // materials provided with the distribution. // * The name of the contributors may not be used to endorse or promote products // derived from this software without specific prior written permission. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. // IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED // OF THE POSSIBILITY OF SUCH DAMAGE. #include "qslogdest.h" #include "qsdebugoutput.h" #include #include #include namespace QsLogging { //! file message sink class FileDestination : public Destination { public: FileDestination(const QString& filePath); virtual void write(const QString& message); private: QFile mFile; QTextStream mOutputStream; }; FileDestination::FileDestination(const QString& filePath) { mFile.setFileName(filePath); mFile.open(QFile::WriteOnly | QFile::Text); //fixme: should throw on failure mOutputStream.setDevice(&mFile); } void FileDestination::write(const QString& message) { mOutputStream << message << endl; mOutputStream.flush(); } //! debugger sink class DebugOutputDestination : public Destination { public: virtual void write(const QString& message); }; void DebugOutputDestination::write(const QString& message) { QsDebugOutput::output(message); } DestinationPtr DestinationFactory::MakeFileDestination(const QString& filePath) { return DestinationPtr(new FileDestination(filePath)); } DestinationPtr DestinationFactory::MakeDebugOutputDestination() { return DestinationPtr(new DebugOutputDestination); } } // end namespace nixnote2-2.0.2/logger/qslogdest.h000066400000000000000000000042021315604104400167120ustar00rootroot00000000000000// Copyright (c) 2010, Razvan Petru // All rights reserved. // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, this // list of conditions and the following disclaimer in the documentation and/or other // materials provided with the distribution. // * The name of the contributors may not be used to endorse or promote products // derived from this software without specific prior written permission. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. // IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED // OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef QSLOGDEST_H #define QSLOGDEST_H #include class QString; namespace QsLogging { class Destination { public: virtual ~Destination(){} virtual void write(const QString& message) = 0; }; #if __cplusplus < 201103L typedef std::auto_ptr DestinationPtr; #else typedef std::unique_ptr DestinationPtr; #endif //! Creates logging destinations/sinks. The caller will have ownership of //! the newly created destinations. class DestinationFactory { public: static DestinationPtr MakeFileDestination(const QString& filePath); static DestinationPtr MakeDebugOutputDestination(); }; } // end namespace #endif // QSLOGDEST_H nixnote2-2.0.2/main.cpp000066400000000000000000000231021315604104400147050ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include #include "nixnote.h" #include "global.h" #include "settings/startupconfig.h" #include "cmdtools/cmdlinetool.h" //#include "cmdtools/cmdlineapp.h" #include "logger/qslog.h" #include #include #include #include // Windows Check #ifndef _WIN32 #include #endif #include #include #include #include #include "application.h" NixNote *w; using namespace std; //********************************************* //* This is the main entry point for NixNote. //********************************************* extern Global global; //********************************************************************* //* Segmentation fault. This is triggered to print a stack trace. //********************************************************************* // Windows Check #ifndef _WIN32 void fault_handler(int sig) { void *array[30]; size_t size; // get void*'s for all entries on the stack size = backtrace(array, 30); // print out all the frames to stderr fprintf(stderr, "Error: signal %d:\n", sig); backtrace_symbols_fd(array, size, 2); if (w!=NULL) { fprintf(stderr, "Forcing save\n"); w->saveState(); } exit(1); } void sighup_handler(int sig) { // print out all the frames to stderr fprintf(stderr, "Error: signal %d:\n", sig); if (w!=NULL) { fprintf(stderr, "Forcing save\n"); w->saveState(); } } #endif // End Windows check //using namespace cv; //********************************************************************* //* Main entry point to the program. //********************************************************************* int main(int argc, char *argv[]) { w = NULL; bool guiAvailable = true; // Windows Check #ifndef _WIN32 signal(SIGSEGV, fault_handler); // install our handler #endif // Begin setting up the environment StartupConfig startupConfig; global.argc = argc; global.argv = argv; int retval = startupConfig.init(argc,argv, guiAvailable); if (retval != 0) return retval; // Setup the application. If we have a GUI, then we use Application. // If we don't, then we just use a derivative of QCoreApplication QCoreApplication *a = NULL; if (guiAvailable) { Application *app = new Application(argc, argv); a = app; } else { a = new QCoreApplication(argc, argv); } global.application = a; // Setup the QLOG functions for debugging & messages QsLogging::Logger& logger = QsLogging::Logger::instance(); logger.setLoggingLevel(QsLogging::TraceLevel); QsLogging::DestinationPtr debugDestination( QsLogging::DestinationFactory::MakeDebugOutputDestination() ); logger.addDestination(debugDestination.get()); startupConfig.programDirPath = global.getProgramDirPath() + QDir().separator(); startupConfig.name = "NixNote"; global.setup(startupConfig, guiAvailable); // global.syncAndExit=startupConfig.syncAndExit; // We were passed a SQL command if (startupConfig.sqlExec) { DatabaseConnection *db = new DatabaseConnection("nixnote"); // Startup the database QLOG_DEBUG() << "Starting DB"; QSqlQuery query(db->conn); QLOG_DEBUG() << "After DB Start"; if (!query.exec(startupConfig.sqlString)) { QLOG_FATAL() << query.lastError(); delete db; exit(16); } while (query.next()) { QString result = ""; for (int i=0; iisAttached()) global.sharedMemory->detach(); QLOG_DEBUG() << "Exiting: RC=" << retval; if (a!=NULL) delete a; exit(retval); } QString logPath = global.fileManager.getLogsDirPath("")+"messages.log"; QsLogging::DestinationPtr fileDestination( QsLogging::DestinationFactory::MakeFileDestination(logPath) ) ; logger.addDestination(fileDestination.get()); // Show Qt version. This is useful for debugging QLOG_DEBUG() << "Program Home: " << global.fileManager.getProgramDirPath(""); QLOG_DEBUG() << "Built on " << __DATE__ << " at " << __TIME__; QLOG_DEBUG() << "Built with Qt" << QT_VERSION_STR << "running on" << qVersion(); // Create a shared memory region. We use this to communicate // with any other instance that may be running. If another instance // is found we need to either show that one or kill this one. bool memInitNeeded = true; if( !global.sharedMemory->allocate(512*1024) ) { // Attach to it and detach. This is done in case it crashed. global.sharedMemory->attach(); global.sharedMemory->detach(); if( !global.sharedMemory->allocate(512*1024) ) { QLOG_DEBUG() << "segment created"; if (startupConfig.startupNewNote) { global.sharedMemory->attach(); global.sharedMemory->write(QString("NEW_NOTE")); global.sharedMemory->detach(); if (a!=NULL) delete a; exit(0); // Exit this one } if (startupConfig.startupNoteLid > 0) { global.sharedMemory->attach(); global.sharedMemory->write("OPEN_NOTE"+QString::number(startupConfig.startupNoteLid) + " "); global.sharedMemory->detach(); if (a!=NULL) delete a; exit(0); // Exit this one } // If we've gotten this far, we need to either stop this instance or stop the other QLOG_DEBUG() << "Multiple instance found"; global.settings->beginGroup("Debugging"); QString startup = global.settings->value("onMultipleInstances", "SHOW_OTHER").toString(); global.settings->endGroup(); global.sharedMemory->attach(); if (startup == "SHOW_OTHER") { global.sharedMemory->write(QString("SHOW_WINDOW")); global.sharedMemory->detach(); if (a!=NULL) delete a; return 0; // Exit this one } if (startup == "STOP_OTHER") { global.sharedMemory->write(QString("IMMEDIATE_SHUTDOWN")); memInitNeeded = false; } } } if (memInitNeeded) { global.sharedMemory->clearMemory(); } #ifndef _WIN32 if (global.getInterceptSigHup()) signal(SIGHUP, sighup_handler); // install our handler #endif QLOG_DEBUG() << "Setting up NN"; w = new NixNote(); w->setAttribute(Qt::WA_QuitOnClose); bool show = true; if (global.minimizeToTray() && global.startMinimized) show = false; if (show) w->show(); else w->hide(); if (global.startMinimized) w->showMinimized(); // Setup the proxy QNetworkProxy proxy; if (global.isProxyEnabled()) { if (global.isSocks5Enabled()) proxy.setType(QNetworkProxy::Socks5Proxy); QString host = global.getProxyHost(); int port = global.getProxyPort(); QString user = global.getProxyUserid(); QString password = global.getProxyPassword(); if (host.trimmed() != "") proxy.setHostName(host.trimmed()); if (port > 0) proxy.setPort(port); if (user.trimmed() != "") proxy.setUser(user.trimmed()); if (password.trimmed() != "") proxy.setPassword(password.trimmed()); QNetworkProxy::setApplicationProxy(proxy); } else { proxy.setType(QNetworkProxy::HttpProxy); } QLOG_DEBUG() << "Setting up exit signal"; QObject::connect(a, SIGNAL(aboutToQuit()), w, SLOT(saveOnExit())); QLOG_DEBUG() << "Launching"; int rc = a->exec(); if (global.sharedMemory->isAttached()) global.sharedMemory->detach(); QLOG_DEBUG() << "Deleting NixNote instance"; delete w; QLOG_DEBUG() << "Quitting application instance"; a->exit(rc); QLOG_DEBUG() << "Deleting application instance"; delete a; QLOG_DEBUG() << "Exiting: RC=" << rc; exit(rc); return rc; } nixnote2-2.0.2/man/000077500000000000000000000000001315604104400140325ustar00rootroot00000000000000nixnote2-2.0.2/man/nixnote2.1000066400000000000000000000327721315604104400156750ustar00rootroot00000000000000.TH NIXNOTE2 "1" "November 2015" "nixnote2" .SH NAME NixNote2 \- An open source Evernote client. .SH SYNOPSIS .IP "nixnote2 [command] [options] .SH DESCRIPTION NixNote is an open source clone of Evernote. Evernote is a collection of software and services that allows users to collect, sort, tag and annotate notes and other miscellaneous information. Data may be stored locally and/or synchronized with Evernote servers so they can be accessed by other clients. .SH COMMANDS .IP "start Start NixNote normally. If not specified, this is the default option." .RS 7 .IP "start options: .RS 7 .HP 2 2 .IP "--accountId=" The ID of the account to use upon startup. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .LP .HP 2 2 .IP "--enableIndexing" Enable background indexing thread. This can be useful in doing a total database reindex, but can also cause performance issues. .LP .HP 2 2 .IP "--disableEditing" Place notes in a read-only mode by default. .LP .HP 2 2 .IP "--dontStartMinimized" Ignore user settings and do not start minimized. .LP .HP 2 2 .IP "--forceSystemTrayAvailable" NixNote will only show a system tray if it can ensure the window manager can handle it. This option forces NixNote to try and show a tray icon. .LP .HP 2 2 .IP "--help or -? or --? or help" Display command line options. .LP .HP 2 2 .IP "--openNote=" Start NixNote and show this specific note on startup. .LP .HP 2 2 .IP "--startMinimized" Start NixNote in a minimized state by default. .LP .HP 2 2 .IP --syncAndExit Do a sync with Evernote and exit NixNote. Synchronize with Evernote. If not running, NixNote will do a sync and exit without showing the GUI. .RE .RE .LP .HP .IP "sync " Synchronize NixNote with Evernote. .RS 7 .IP "sync options: .RS 7 .LP .HP 2 2 .IP "--accountId=" The ID of the account to use upon startup. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .LP .RE .RE .IP "shutdown" If running, ask NixNote to stop. .RS 7 .IP "shutdown options: .RS 7 .LP .HP 2 2 .IP "--accountId=" The ID of the account to use. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .LP .RE .RE .IP "show_window" If NixNote is running nad minimized, raise the window. .RS 7 .IP "show_window options: .RS 7 .LP .HP 2 2 .IP "--accountId=" The ID of the account to use upon startup. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .LP .RE .RE .IP "query Query the NixNote database. .RS 7 .HP 2 2 .IP "query options:" .RS 7 .HP 2 2 .IP "--accountId=" The ID of the account to use upon startup. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .IP "--search= Search string. The search syntax is the same as the graphical interface uses to search. .IP "--delimiter= Report column separation string. If not specified | is used as the separator. .IP "--noHeaders" Do not display column headers with the results. .IP "--display=" "Output format for the results. This can be customized by using <:>" .RS 7 .HP 2 2 .IP "Display String Fields:" .br %i : Display note identifier. .br %t : Display note title. .br %n : Display notebook name. .br %g : Display the note's tags. .br %c : Display the creation date. .br %u : Display the date the note was last updated. .br %e : Show if the note is synchronized with Evernote. .br %s : Show the source URL. .br %a : Show the author. .br %x : Show if the note has a todo item. .br %r : Show the note's reminder time. .br %v : Show the time the reminder was completed. .IP Any numeric number specifying the minimum number of characters for a result. .IP : Any numeric number specifying the minimum number of characters for a result. Anything longer than this value is truncated. .RE .RE .RE .IP "readNote " Read the text contents of a note." .RS 7 .HP 2 2 readNote options: .RS 7 .HP 2 2 .IP "--accountId= The ID of the account to use upon startup. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .LP .HP 2 2 .IP "--id= : The ID of the note to be read. .LP .RE .LP .RE .IP "deleteNote " Delete a specic note. .RS 7 deleteNote options .RS 7 .HP 2 2 .IP --id= Note ID to delete. .IP --noVerify Do not perform a verification prior to deleting the note. .IP "--accountId=" The ID of the account to use upon startup. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .LP .RE .RE .IP "emailNote " Email a note. Any attachments will also be sent. In order to use this feature, the SMTP settings must be specified under Edit/Preferences. .RS 7 .HP 2 2 emailNote Options: .RS 7 .HP 2 2 .IP --to: The recipient of the email. For multiple recipients, use this parameter multiple times." .LP .HP 2 2 .IP --cc: The carbon copy recipient of the email. For multiple recipients, use this parameter multiple times." .LP .HP 2 2 .IP --bcc: The blind carbon copy recipient of the email. For multiple recipients, use this parameter multiple times. .LP .HP 2 2 .IP --subject= Subject of the email. If not specified the note title is used. .LP .HP 2 2 .IP --note= Additional comments to be added to the beginning of the note .LP .HP 2 2 .IP --ccSelf Send a copy to yourself. .IP "--accountId= The ID of the account to use upon startup. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .RE .RE .IP "addNote " Add a note via the command line. .RS 7 .HP 2 2 addNote options: .RS 7 .IP --title= The title of the note to be created. .IP --notebook= The notebook to place the note into. If no notebook is given, the default notebook is used. .IP --tag= Assign this particular tag to this note. For multiple tags, use multiple --tag statements. If a tag does not exist it will be created. .IP --created= The date the note was created. It should be in the format of YYYMMDDTHHMMSSZ where YYYY is the year, MM is the month, DD is the day, HH is the hour, MM is the minute, and SS is the second. For example, 20151201T1302Z would be December 1, 2015 at 1:02pm. All times are GMT time. If omitted, the current date is used. .IP --updated= The date the note was last updated. It should be in the format of YYYMMDDTHHMMSSZ where YYYY is the year, MM is the month, DD is the day, HH is the hour, MM is the minute, and SS is the second. For example, 20151201T1302Z would be December 1, 2015 at 1:02pm. All times are GMT time. If omitted, the current date is used. .IP --updated= The date the note was last updated. It should be in the format of YYYMMDDTHHMMSSZ where YYYY is the year, MM is the month, DD is the day, HH is the hour, MM is the minute, and SS is the second. For example, 20151201T1302Z would be December 1, 2015 at 1:02pm. All times are GMT time. If omitted, the current date is used. .IP "--accountId= The ID of the account to use upon startup. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .IP "--delimiter=" This is a special string to use within a note. When specified, and a --attachment parameter is specified, this string is where the attachment will appear in the note. If not specified, the default is %%. .IP "--attachment=" The location of a file to attach in the note. For multiple attachments use the --attachment parameter multiple times. If the character string specified by the --delimiter parameter appears in the note, the delimiter string will be replaced with the attachment. If there is no delimiter, the attachment will be appended to the end of the note. .IP --noteText= The actual text of the note. If not specified the note will be read from stdin. Some limited HTML is supported but not all HTML tags are supported by Evernote. .RE .RE .IP "appendNote " Append to an existing note. .RS 7 .HP 2 2 appendNote Options: .RS 7 .IP --id= The ID of the existing note to append. .IP --noteText="" The text to add to the existing note. If not specified, input is read from stdin. .IP --accountId The ID of the account to use. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .RE .RE .IP "export " .RS 7 .IP "export options: .RS 7 .LP .HP 2 2 .IP --accountId= The ID of the account to use upon startup. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .IP "--output= The output file for the exported notes. .IP --search="search_string" Export notes matching the search criteria. .IP --id=""""" A list of notes ids to export. The list should be separated by spaces if more than one is desired. .IP --deleteOnExport If set, the exported notes will be deleted when the export is complete. .IP --noVerifyDelete If "--deleteOnExport" is set, this will disable the verification of the deletes .LP .RE .RE .IP "backup " .RS 7 .IP "backup options" .RS 7 .LP .HP 2 2 .IP --accountId= The account to backup. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .IP --output= Output file for the backup. .LP .RE .RE .IP "import .RS 7 .IP "import options" .RS 7 .LP .HP 2 2 .IP --accountId= Account to import into. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .IP --input= The file containing the NixNote export (nnex) file. .LP .RE .RE .IP "openNotebook " If a notebook is closed, open it. This will allow a notebook to be searched or viewed. .RS 7 .IP "openNotebook options" .RS 7 .LP .HP 2.2 .IP --accountId= Account owning the notebook you wish to open. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .IP --notebook= The notebook to open. .LP .RE .RE .IP "closeNotebook " If a notebook is open, close it. This will prevent it from being searched or viewed, but not from being synchronized. .RS 7 .IP "closeNotebook options" .RS 7 .LP .HP 2.2 .IP --accountId= Account owning the notebook you wish to close. Each account has an ID number assigned to it. Look under File/Accounts for a list of accounts. If not specified, it defaults to the last used account. .IP --notebook= The notebook to close. .LP .RE .RE .IP "signalGui " Signal a running NixNote instance to perform a particular function. .RS 7 .LP .HP 2.2 .IP --show Show a hidden or running NixNote. .IP --synchronize Start a sync with Evernote. .IP --shutdown Stop NixNote. .IP --screenshot Take a screenshot. .IP --openNote Open an existing note. The --id= option must be specified. .IP --openExternalNote Open an existing note in an external window. The --id= option must be specified. .IP --id= Id of note to open. .IP --newNote Create a new note. .IP --newExternalNote Create a new note in an external window. .IP --accountId= Account ID containing the note or the account for the new note. .LP .RE .RE .SH EXAMPLES .IP "nixnote2 start --dontStartMinimized" Start NixNote but do not start minimized. .IP "nixnote2 sync" Start NixNote and do a sync with Evernote. When complete the program will end. .IP "nixnote2 query --search=""Classwork"" --noHeaders --delimiter=""<>"" --display=""%i%n5%t20:%a"" Query the NixNote database. The results of the search will be displayed without column headings. The individual fields will be separated by a ""<>"". The fields returned are the note ID, the notebook (padded to a minimum of 5 characters), the note title (padded to 20 characters but truncated if longer) and the note's author. .IP "nixnote2 deleteNote id=22" Delete note 22 from NixNote. .IP "nixnote2 emailNote id=13 --to=foo@bar.com --subject=""My email"" Email note 13 to foo@bar.com. The subject will be ""My email"". .IP "nixnote2 addNote --title=""My New Note"" --notebook=""My Notebook"" --tag=""Important Stuff"" --delimiter=""##"" --attachment=/home/foo/file1.pdf --attachment=/home/foo/file2.pdf --noteText=""This is my note. The first attachment will appear ##



The second attachment will appear at the end, because there is no delimiter tag for it."" Create a new note. There will be two files attached (one in the middle and one at the end). It will be put in ""My Notebook" and will be tagged as "Important Stuff". .SH AUTHORS NixNote2 is developed by Randy Baumgarte . .PP This manual page was written by Vincent Cheng and Randy Baumgarte for the Debian project (and may be used by others). nixnote2-2.0.2/models/000077500000000000000000000000001315604104400145425ustar00rootroot00000000000000nixnote2-2.0.2/models/notecache.cpp000066400000000000000000000021571315604104400172040ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "notecache.h" NoteCache::NoteCache(QObject *parent) : QObject(parent) { noteContent = ""; isReadOnly = false; isContentReadOnly = false; isInkNote = false; } nixnote2-2.0.2/models/notecache.h000066400000000000000000000024651315604104400166530ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NOTECACHE_H #define NOTECACHE_H #include "qevercloud/include/QEverCloud.h" #include using namespace qevercloud ; class NoteCache : public QObject { Q_OBJECT public: explicit NoteCache(QObject *parent = 0); QByteArray noteContent; bool isReadOnly; bool isContentReadOnly; bool isInkNote; signals: public slots: }; #endif // NOTECACHE_H nixnote2-2.0.2/models/notemodel.cpp000066400000000000000000000172061315604104400172420ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "notemodel.h" #include "logger/qslog.h" #include "global.h" #include "sql/nsqlquery.h" #include #include #include //**************************************************** //* This class is used to read & write information //* to the NoteModel class. This class holds what //* a user sees in the table listing in the GUI. //**************************************************** extern Global global; // Generic constructor NoteModel::NoteModel(QObject *parent) :QSqlTableModel(parent, global.db->conn) { // Check if the table exists. If not, create it. NSqlQuery sql(global.db); sql.exec("Select * from sqlite_master where type='table' and name='NoteTable';"); if (!sql.next()) this->createTable(); sql.finish(); this->setEditStrategy(QSqlTableModel::OnFieldChange); this->setTable("NoteTable"); this->setFilter("lid in (select lid from filter)"); } // Destructor NoteModel::~NoteModel() { } //* Create the NoteModel table. void NoteModel::createTable() { QLOG_TRACE() << "Entering NoteModel::createTable()"; QLOG_DEBUG() << "Creating table NoteTable"; NSqlQuery sql(global.db); QString command("Create table if not exists NoteTable (" + QString("lid integer primary key,") + QString("dateCreated real default null,") + QString("dateUpdated real default null,") + QString("title text default null collate nocase,") + QString("notebookLid integer default null,") + QString("notebook text default null collate nocase,") + QString("tags text default null collate nocase,") + QString("author text default null collate nocase,") + QString("dateSubject real default null,") + QString("dateDeleted real default null,") + QString("source text default null collate nocase,") + QString("sourceUrl text default null collate nocase,") + QString("sourceApplication text default null collate nocase,") + QString("latitude real default null,") + QString("longitude real default null,") + QString("altitude real default null,") + QString("hasEncryption integer default null,") + QString("hasTodo integer default null,") + QString("isDirty integer default null,") + QString("size integer default null,") + QString("reminderOrder real default null,") + QString("reminderTime real default null,") + QString("reminderDoneTime real default null,") + QString("isPinned integer default null,") + QString("titleColor text default null,") + QString("thumbnail default null") + QString(")")); if (!sql.exec(command) || !sql.exec("CREATE INDEX if not exists NoteTable_Title_Index on NoteTable (title)") || !sql.exec("CREATE INDEX if not exists NoteTable_Author_Index on NoteTable (author)") || !sql.exec("CREATE INDEX if not exists NoteTable_Notebook_Index on NoteTable (notebook)") || !sql.exec("CREATE INDEX if not exists NoteTable_Notebook_Lid_Index on NoteTable (notebookLid)") || !sql.exec("CREATE INDEX if not exists NoteTable_DateCreated_Index on NoteTable (dateCreated)") || !sql.exec("CREATE INDEX if not exists NoteTable_DateUpdated_Index on NoteTable (dateUpdated)") || !sql.exec("CREATE INDEX if not exists NoteTable_Date_Subject_Index on NoteTable (dateSubject)") || !sql.exec("CREATE INDEX if not exists NoteTable_Date_Deleted_Index on NoteTable (dateDeleted)") || !sql.exec("CREATE INDEX if not exists NoteTable_Source_Index on NoteTable (source)") || !sql.exec("CREATE INDEX if not exists NoteTable_Source_Url_Index on NoteTable (sourceUrl)") || !sql.exec("CREATE INDEX if not exists NoteTable_Source_Application_Index on NoteTable (sourceApplication)") || !sql.exec("CREATE INDEX if not exists NoteTable_Latitude_Index on NoteTable (latitude)") || !sql.exec("CREATE INDEX if not exists NoteTable_Longitude_Index on NoteTable (longitude)") || !sql.exec("CREATE INDEX if not exists NoteTable_Altitude_Index on NoteTable (altitude)") || !sql.exec("CREATE INDEX if not exists NoteTable_Has_Encryption_Index on NoteTable (hasEncryption)") || !sql.exec("CREATE INDEX if not exists NoteTable_Has_Todo_Index on NoteTable (hasTodo)") || !sql.exec("CREATE INDEX if not exists NoteTable_Is_Dirty_Index on NoteTable (isDirty)") || !sql.exec("CREATE INDEX if not exists NoteTable_Reminder_Order_Index on NoteTable (reminderOrder)") || !sql.exec("CREATE INDEX if not exists NoteTable_Reminder_Time_Index on NoteTable (reminderTime)") || !sql.exec("CREATE INDEX if not exists NoteTable_isPinned_Index on NoteTable (isPinned)") || !sql.exec("CREATE INDEX if not exists NoteTable_Reminder_Done_Time_Index on NoteTable (reminderDoneTime)") ) { QLOG_ERROR() << "Creation of NoteTable table failed: " << sql.lastError(); } sql.finish(); } //int NoteModel::rowCount(const QModelIndex & /*parent*/) const // { // QLOG_TRACE() << "Entering NoteModel::rowCount()"; // NSqlQuery sql(*db); // sql.exec("Select count(lid) from NoteTable where lid in (select lid from filter)"); // if (!sql.next()) { // QLOG_ERROR() << "Error retrieving NoteModel::rowCount: " << sql.lastError(); // return 0; // } // int rowCount = QVariant(sql.value(0)).toInt(); // return rowCount; // } int NoteModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); // Suppress unused variable // parent.column(); return NOTE_TABLE_COLUMN_COUNT; } Qt::ItemFlags NoteModel::flags(const QModelIndex &index) const { if (!index.isValid()) return Qt::ItemIsEnabled; // Make the table row non-editable return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; } QVariant NoteModel::data (const QModelIndex & index, int role) const { if (role == Qt::ForegroundRole) { QString color = index.sibling(index.row(), NOTE_TABLE_COLOR_POSITION).data().toString(); if (color != "") { if (color == "blue" || color == "black") return QColor("white"); } } if (role == Qt::BackgroundRole) { QString color = index.sibling(index.row(), NOTE_TABLE_COLOR_POSITION).data().toString(); if (color != "") { return QColor(color); } } return QSqlTableModel::data(index,role); } nixnote2-2.0.2/models/notemodel.h000066400000000000000000000027431315604104400167070ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NOTEMODEL_H #define NOTEMODEL_H #include #include "sql/databaseconnection.h" class NoteModel : public QSqlTableModel { Q_OBJECT private: public: explicit NoteModel(QObject *parent = 0); ~NoteModel(); //int rowCount(const QModelIndex &parent) const; int columnCount(const QModelIndex &parent) const; void createTable(); Qt::ItemFlags flags(const QModelIndex &index) const; QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const; signals: public slots: }; #endif // NOTEMODEL_H nixnote2-2.0.2/models/ntreemodel.cpp000066400000000000000000000020271315604104400174050ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "ntreemodel.h" NTreeModel::NTreeModel(QObject *parent) : QAbstractItemModel(parent) { } nixnote2-2.0.2/models/ntreemodel.h000066400000000000000000000022421315604104400170510ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NTREEMODEL_H #define NTREEMODEL_H #include class NTreeModel : public QAbstractItemModel { Q_OBJECT public: explicit NTreeModel(QObject *parent = 0); signals: public slots: }; #endif // NTREEMODEL_H nixnote2-2.0.2/nixnote.cpp000066400000000000000000004346621315604104400154660ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "nixnote.h" #include "threads/syncrunner.h" #include "gui/nwebview.h" #include "watcher/filewatcher.h" #include "dialog/accountdialog.h" #include "dialog/preferences/preferencesdialog.h" #include "sql/resourcetable.h" #include "sql/nsqlquery.h" #include "dialog/logviewer.h" #include "filters/filtercriteria.h" #include "filters/filterengine.h" #include "dialog/faderdialog.h" #include "dialog/shortcutdialog.h" #include "utilities/noteindexer.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "sql/notetable.h" #include "dialog/screencapture.h" #include "gui/ntabwidget.h" #include "sql/notebooktable.h" #include "sql/usertable.h" #include "settings/startupconfig.h" #include "dialog/logindialog.h" #include "dialog/closenotebookdialog.h" #include "gui/lineedit.h" #include "gui/findreplace.h" #include "gui/nattributetree.h" #include "dialog/watchfolderdialog.h" #include "dialog/notehistoryselect.h" #include "gui/ntrashtree.h" #include "html/attachmenticonbuilder.h" #include "filters/filterengine.h" #include "global.h" #include "html/enmlformatter.h" //#include "oauth/oauthwindow.h" //#include "oauth/oauthtokenizer.h" #include "dialog/databasestatus.h" #include "dialog/adduseraccountdialog.h" #include "dialog/accountmaintenancedialog.h" #include "communication/communicationmanager.h" #include "utilities/encrypt.h" // Windows Check #ifndef _WIN32 #include #endif #include "cmdtools/cmdlinequery.h" #include "cmdtools/alternote.h" #include "gui/nmainmenubar.h" #include "dialog/logindialog.h" #include "xml/importdata.h" #include "xml/importenex.h" #include "xml/exportdata.h" #include "dialog/aboutdialog.h" #include "qevercloud/include/QEverCloudOAuth.h" using namespace qevercloud; // Windows Check #ifndef _WIN32 using namespace boost; #endif extern Global global; class SyncRunner; //************************************************* //* This is the main class that is used to start //* everything else. //************************************************* NixNote::NixNote(QWidget *parent) : QMainWindow(parent) { splashScreen = new QSplashScreen(this, global.getPixmapResource(":splashLogoImage")); global.settings->beginGroup("Appearance"); if(global.settings->value("showSplashScreen", false).toBool()) { splashScreen->setWindowFlags( Qt::WindowStaysOnTopHint | Qt::SplashScreen | Qt::FramelessWindowHint ); splashScreen->show(); QTimer::singleShot(2500, splashScreen, SLOT(close())); } global.settings->endGroup(); #if QT_VERSION < 0x050000 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); #endif global.setDebugLevel(); // Load any plugins this->loadPlugins(); QTranslator *nixnoteTranslator = new QTranslator(); QLOG_DEBUG() << "Looking for transaltions: " << global.fileManager.getTranslateFilePath("nixnote2_" + QLocale::system().name() + ".qm"); nixnoteTranslator->load(global.fileManager.getTranslateFilePath("nixnote2_" + QLocale::system().name() + ".qm")); QApplication::instance()->installTranslator(nixnoteTranslator); connect(&syncThread, SIGNAL(started()), this, SLOT(syncThreadStarted())); connect(&counterThread, SIGNAL(started()), this, SLOT(counterThreadStarted())); connect(&indexThread, SIGNAL(started()), this, SLOT(indexThreadStarted())); counterThread.start(QThread::LowestPriority); syncThread.start(QThread::LowPriority); indexThread.start(QThread::LowestPriority); this->thread()->setPriority(QThread::HighestPriority); heartbeatTimer.setInterval(1000); heartbeatTimer.setSingleShot(false); connect(&heartbeatTimer, SIGNAL(timeout()), this, SLOT(heartbeatTimerTriggered())); heartbeatTimer.start(); QFont f = this->font(); //f.setPointSize(8); global.getGuiFont(f); this->setFont(f); db = new DatabaseConnection("nixnote"); // Startup the database // Setup the sync thread QLOG_TRACE() << "Setting up counter thread"; connect(this, SIGNAL(updateCounts()), &counterRunner, SLOT(countAll())); // Setup the counter thread QLOG_TRACE() << "Setting up sync thread"; connect(this,SIGNAL(syncRequested()),&syncRunner,SLOT(synchronize())); connect(&syncRunner, SIGNAL(setMessage(QString, int)), this, SLOT(setMessage(QString, int))); QLOG_TRACE() << "Setting up GUI"; global.filterPosition = 0; this->setupGui(); global.resourceWatcher = new QFileSystemWatcher(this); QLOG_TRACE() << "Connecting signals"; connect(favoritesTreeView, SIGNAL(updateSelectionRequested()), this, SLOT(updateSelectionCriteria())); connect(tagTreeView, SIGNAL(updateSelectionRequested()), this, SLOT(updateSelectionCriteria())); connect(notebookTreeView, SIGNAL(updateSelectionRequested()), this, SLOT(updateSelectionCriteria())); connect(searchTreeView, SIGNAL(updateSelectionRequested()), this, SLOT(updateSelectionCriteria())); connect(attributeTree, SIGNAL(updateSelectionRequested()), this, SLOT(updateSelectionCriteria())); connect(trashTree, SIGNAL(updateSelectionRequested()), this, SLOT(updateSelectionCriteria())); connect(searchText, SIGNAL(updateSelectionRequested()), this, SLOT(updateSelectionCriteria())); connect(global.resourceWatcher, SIGNAL(fileChanged(QString)), this, SLOT(resourceExternallyUpdated(QString))); hammer = new Thumbnailer(global.db); hammer->startTimer(); finalSync = false; // Setup reminders global.reminderManager = new ReminderManager(); connect(global.reminderManager, SIGNAL(showMessage(QString,QString,int)), this, SLOT(showMessage(QString,QString,int))); global.reminderManager->reloadTimers(); global.settings->beginGroup("Appearance"); bool showMissed = global.settings->value("showMissedReminders", false).toBool(); global.settings->endGroup(); if (showMissed) QTimer::singleShot(5000, global.reminderManager, SLOT(timerPop())); else global.setLastReminderTime(QDateTime::currentMSecsSinceEpoch()); // Check for Java and verify encryption works QString test = "Test Message"; QString result; EnCrypt encrypt; if (!encrypt.encrypt(result, test, test)) { if (!encrypt.decrypt(result, result, test)) { if (result == test) global.javaFound = true; } } // Check if Tidy is installed QProcess tidyProcess; tidyProcess.start("tidy -h"); tidyProcess.waitForFinished(); if (tidyProcess.exitCode()) { QMessageBox mb; mb.critical(this, tr("Tidy Not Found"), tr("Tidy is not found on this system.\nUntil tidy is installed you cannot save any notes.")); } if (global.startupNewNote) { this->showMinimized(); this->newExternalNote(); } //this->openNote(false); // Init OAuth winwod //oauthWindow = NULL; //QDesktopServices::setUrlHandler("evernote", this, "showDesktopUrl"); remoteQuery = new RemoteQuery(); // Initialize pdfExportWindow to null. We don't fully set this up in case the person requests it. pdfExportWindow = NULL; // Setup file watcher importManager = new FileWatcherManager(this); connect(importManager, SIGNAL(fileImported(qint32,qint32)), this, SLOT(updateSelectionCriteria())); connect(importManager, SIGNAL(fileImported()), this, SLOT(updateSelectionCriteria())); importManager->setup(); this->updateSelectionCriteria(true); // This is only needed in case we imported something at statup. QLOG_DEBUG() << "Exiting NixNote constructor"; } // Destructor to call when all done NixNote::~NixNote() { delete splashScreen; syncThread.quit(); indexThread.quit(); counterThread.quit(); while (!syncThread.isFinished()); while (!indexThread.isFinished()); while(!counterThread.isFinished()); // Cleanup any temporary files if (global.purgeTemporaryFilesOnShutdown) { QDir myDir(global.fileManager.getTmpDirPath()); QStringList list = myDir.entryList(); for (int i=0; isetStyleSheet("background-color: white;"); //statusBar(); setWindowTitle(tr("NixNote 2")); setWindowIcon(QIcon(global.getIconResource(":windowIcon"))); //QLOG_TRACE() << "Setting up menu bar"; searchText = new LineEdit(); menuBar = new NMainMenuBar(this); setMenuBar(menuBar); QLOG_TRACE() << "Setting up tool bar"; toolBar = addToolBar(tr("ToolBar")); connect(toolBar, SIGNAL(visibilityChanged(bool)), this, SLOT(toolbarVisibilityChanged())); //menuBar = new NMainMenuBar(this); toolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); toolBar->setObjectName("toolBar"); //toolBar->addWidget(menuBar); menuBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); toolBar->setFloatable(true); toolBar->setMovable(true); toolBar->setFont(global.getGuiFont(toolBar->font())); toolBar->setAllowedAreas(Qt::BottomToolBarArea | Qt::TopToolBarArea); //toolBar->addSeparator(); leftArrowButton = toolBar->addAction(global.getIconResource(":leftArrowIcon"), tr("Back")); rightArrowButton = toolBar->addAction(global.getIconResource(":rightArrowIcon"), tr("Next")); leftArrowButton->setEnabled(false); leftArrowButton->setPriority(QAction::LowPriority); connect(leftArrowButton, SIGNAL(triggered(bool)),this, SLOT(leftButtonTriggered())); rightArrowButton->setEnabled(false); rightArrowButton->setPriority(QAction::LowPriority); connect(rightArrowButton, SIGNAL(triggered(bool)),this, SLOT(rightButtonTriggered())); toolBar->addSeparator(); homeButton = toolBar->addAction(global.getIconResource(":homeIcon"), tr("All Notes")); // homeButton->setPriority(QAction::LowPriority); Hide the text by the icon syncButton = toolBar->addAction(global.getIconResource(":synchronizeIcon"), tr("Sync")); // syncButton->setPriority(QAction::LowPriority); // Hide the text by the icon toolBar->addSeparator(); printNoteButton = toolBar->addAction(global.getIconResource(":printerIcon"), tr("Print")); printNoteButton->setToolTip(tr("Print the current note")); emailButton = toolBar->addAction(global.getIconResource(":emailIcon"), tr("Email")); emailButton->setToolTip(tr("Email the current note")); noteButton = new QToolButton(); toolBar->addSeparator(); newNoteButton = new QAction(noteButton); newNoteButton->setIcon(global.getIconResource(":newNoteIcon")); newNoteButton->setText(tr("New Text Note")); newWebcamNoteButton = new QAction(noteButton); newWebcamNoteButton->setIcon(global.getIconResource(":webcamIcon")); newWebcamNoteButton->setText(tr("New Webcam Note")); noteButton->addAction(newNoteButton); noteButton->addAction(newWebcamNoteButton); noteButton->setText(newNoteButton->text()); noteButton->setIcon(newNoteButton->icon()); noteButton->setProperty("currentNoteButton", NewTextNote); noteButton->setPopupMode(QToolButton::MenuButtonPopup); noteButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); connect(noteButton, SIGNAL(clicked()), this, SLOT(noteButtonClicked())); toolBar->addWidget(noteButton); toolBar->addSeparator(); deleteNoteButton = toolBar->addAction(global.getIconResource(":deleteIcon"), tr("Delete")); toolBar->addSeparator(); trunkButton = toolBar->addAction(global.getIconResource(":trunkIcon"), tr("Trunk")); trunkButton->setVisible(false); usageButton = toolBar->addAction(global.getIconResource(":usageIcon"), tr("Usage")); connect(syncButton,SIGNAL(triggered()), this, SLOT(synchronize())); connect(homeButton, SIGNAL(triggered()), this, SLOT(resetView())); connect(printNoteButton, SIGNAL(triggered()), this, SLOT(fastPrintNote())); connect(deleteNoteButton, SIGNAL(triggered()), this, SLOT(deleteCurrentNote())); connect(trunkButton, SIGNAL(triggered()), this, SLOT(openTrunk())); connect(newNoteButton, SIGNAL(triggered()), this, SLOT(newNote())); connect(newWebcamNoteButton, SIGNAL(triggered()), this, SLOT(newWebcamNote())); connect(newNoteButton, SIGNAL(triggered()), this, SLOT(noteButtonClicked())); connect(usageButton, SIGNAL(triggered()), this, SLOT(openAccount())); connect(emailButton, SIGNAL(triggered()), this, SLOT(emailNote())); QLOG_TRACE() << "Adding main splitter"; mainSplitter = new QSplitter(Qt::Horizontal); setCentralWidget(mainSplitter); rightPanelSplitter = new QSplitter(Qt::Vertical); leftPanelSplitter = new QSplitter(Qt::Vertical); leftPanel = new WidgetPanel(); this->setupNoteList(); this->setupFavoritesTree(); this->setupSynchronizedNotebookTree(); this->setupTagTree(); this->setupSearchTree(); this->setupAttributeTree(); this->setupTrashTree(); this->setupTabWindow(); leftPanel->vboxLayout->addStretch(); connect(tagTreeView, SIGNAL(tagDeleted(qint32,QString)), favoritesTreeView, SLOT(itemExpunged(qint32, QString))); connect(searchTreeView, SIGNAL(searchDeleted(qint32)), favoritesTreeView, SLOT(itemExpunged(qint32))); connect(notebookTreeView, SIGNAL(notebookDeleted(qint32,QString)), favoritesTreeView, SLOT(itemExpunged(qint32, QString))); connect(tagTreeView, SIGNAL(tagRenamed(qint32,QString,QString)), favoritesTreeView, SLOT(itemRenamed(qint32, QString, QString))); connect(searchTreeView, SIGNAL(searchDeleted(qint32)), favoritesTreeView, SLOT(itemExpunged(qint32))); connect(notebookTreeView, SIGNAL(notebookRenamed(qint32,QString,QString)), favoritesTreeView, SLOT(itemRenamed(qint32, QString, QString))); connect(notebookTreeView, SIGNAL(stackDeleted(QString)), favoritesTreeView, SLOT(stackExpunged(QString))); connect(notebookTreeView, SIGNAL(stackRenamed(QString,QString)), favoritesTreeView, SLOT(stackRenamed(QString, QString))); connect(tabWindow, SIGNAL(updateNoteTitle(QString,qint32,QString)), favoritesTreeView, SLOT(updateShortcutName(QString,qint32,QString))); QLOG_TRACE() << "Setting up left panel"; leftPanel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); leftScroll = new QScrollArea(); leftScroll->setWidgetResizable(true); leftScroll->setWidget(leftPanel); leftScroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); leftScroll->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); mainSplitter->insertWidget(0,leftScroll); mainSplitter->addWidget(rightPanelSplitter); mainSplitter->setStretchFactor(0,1); mainSplitter->setStretchFactor(1,3); QLOG_TRACE() << "Resetting left side widgets"; tagTreeView->resetSize(); searchTreeView->resetSize(); attributeTree->resetSize(); trashTree->resetSize(); // Restore the window state global.startMinimized = false; QLOG_TRACE() << "Restoring window state"; global.settings->beginGroup("Appearance"); int selectionBehavior = global.settings->value("startupNotebook", AppearancePreferences::UseLastViewedNotebook).toInt(); global.startMinimized = global.settings->value("startMinimized", false).toBool(); global.settings->endGroup(); global.settings->beginGroup("SaveState"); bool showStatusbar = global.settings->value("statusBar", true).toBool(); if (showStatusbar) { menuBar->viewStatusbar->setChecked(showStatusbar); statusBar()->setVisible(true); } else { menuBar->viewStatusbar->setChecked(false); statusBar()->setVisible(false); } restoreState(global.settings->value("WindowState").toByteArray()); restoreGeometry(global.settings->value("WindowGeometry").toByteArray()); mainSplitter->restoreState(global.settings->value("mainSplitter", 0).toByteArray()); rightPanelSplitter->restoreState(global.settings->value("rightSplitter", 0).toByteArray()); if (global.settings->value("isMaximized", false).toBool()) this->setWindowState(Qt::WindowMaximized); QString lidListString = global.settings->value("openTabs", "").toString().trimmed(); bool value = global.settings->value("leftPanelVisible", true).toBool(); if (!value) { menuBar->viewLeftPanel->setChecked(false); leftScroll->setVisible(false); } value = global.settings->value("noteListVisible", true).toBool(); if (!value) { menuBar->viewNoteList->setChecked(false); topRightWidget->setVisible(false); } value = global.settings->value("tabWindowVisible", true).toBool(); if (!value) { menuBar->viewNotePanel->setChecked(false); tabWindow->setVisible(false); } value = global.settings->value("favoritesTreeVisible", true).toBool(); if (!value) { menuBar->viewFavoritesTree->setChecked(false); favoritesTreeView->setVisible(false); } value = global.settings->value("notebookTreeVisible", true).toBool(); if (!value) { menuBar->viewNotebookTree->setChecked(false); notebookTreeView->setVisible(false); } value = global.settings->value("tagTreeVisible", true).toBool(); if (!value) { menuBar->viewTagTree->setChecked(false); tagTreeView->setVisible(false); } value = global.settings->value("savedSearchTreeVisible", true).toBool(); if (!value) { menuBar->viewSearchTree->setChecked(false); searchTreeView->setVisible(false); } value = global.settings->value("attributeTreeVisible", true).toBool(); if (!value) { menuBar->viewAttributesTree->setChecked(false); attributeTree->setVisible(false); } value = global.settings->value("trashTreeVisible", true).toBool(); if (!value) { menuBar->viewTrashTree->setChecked(false); trashTree->setVisible(false); } global.settings->endGroup(); checkLeftPanelSeparators(); if (rightPanelSplitter->orientation() == Qt::Vertical) viewNoteListWide(); else viewNoteListNarrow(); QStringList lidList = lidListString.split(' '); // If we have old notes we were viewing the last time if (lidList.size() > 0) { FilterCriteria *filter = global.filterCriteria[global.filterPosition]; for (int i=0; i0) filter = new FilterCriteria(); int lid = lidList[i].toInt(); QList selectedLids; selectedLids.append(lid); filter->setSelectedNotes(selectedLids); filter->setLid(lid); if (i>0) global.filterCriteria.append(filter); } for (int i=0; i 0 && noteTable.exists(global.startupNote)) { openExternalNote(global.startupNote); } // Setup the tray icon closeFlag = false; minimizeToTray = global.minimizeToTray(); closeToTray = global.closeToTray(); trayIcon = new QSystemTrayIcon(global.getIconResource(":trayIcon"), this); trayIconContextMenu = new TrayMenu(this); trayIconContextMenu->addAction(newNoteButton); newExternalNoteButton = trayIconContextMenu->addAction(tr("Quick Note")); connect(newExternalNoteButton, SIGNAL(triggered()), this, SLOT(newExternalNote())); screenCaptureButton = new QAction(tr("Screen Capture"), this); trayIconContextMenu->addAction(screenCaptureButton); screenCaptureButton->setIcon(global.getIconResource(":screenCaptureIcon")); noteButton->addAction(screenCaptureButton); connect(screenCaptureButton, SIGNAL(triggered()), this, SLOT(screenCapture())); trayIconContextMenu->addSeparator(); QMenu *favoritesMenu = trayIconContextMenu->addMenu(tr("Shortcut Notes")); trayIconContextMenu->setActionMenu(TrayMenu::FavoriteNotesMenu, favoritesMenu); QMenu *pinnedMenu = trayIconContextMenu->addMenu(tr("Pinned Notes")); trayIconContextMenu->setActionMenu(TrayMenu::PinnedMenu, pinnedMenu); QMenu *recentMenu = trayIconContextMenu->addMenu(tr("Recently Updated Notes")); trayIconContextMenu->setActionMenu(TrayMenu::RecentMenu, recentMenu); connect(trayIconContextMenu, SIGNAL(openNote(qint32)), this, SLOT(openExternalNote(qint32))); trayIconContextMenu->addSeparator(); showAction = trayIconContextMenu->addAction(tr("Show/Hide")); QLOG_DEBUG() << "QSystemTrayIcon::isSystemTrayAvailable():" << QSystemTrayIcon::isSystemTrayAvailable(); if (!QSystemTrayIcon::isSystemTrayAvailable() && global.forceSystemTrayAvailable) { QLOG_INFO() << "Overriding QSystemTrayIcon::isSystemTrayAvailable() per command line option."; } if (!global.showTrayIcon() || global.forceNoStartMimized || (!QSystemTrayIcon::isSystemTrayAvailable() && !global.forceSystemTrayAvailable)) { QLOG_DEBUG() << "Overriding close & minimize to tray because of command line or isSystemTrayAvailable"; closeToTray = false; minimizeToTray = false; } trayIconContextMenu->addSeparator(); closeAction = trayIconContextMenu->addAction(tr("Close")); connect(closeAction, SIGNAL(triggered()), this, SLOT(closeNixNote())); connect(showAction, SIGNAL(triggered()), this, SLOT(toggleVisible())); trayIcon->setContextMenu(trayIconContextMenu); trayIcon->setVisible(global.showTrayIcon()); if (trayIcon->isVisible()) trayIcon->show(); connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayActivated(QSystemTrayIcon::ActivationReason))); // Setup timers QLOG_TRACE() << "Setting up timers"; setSyncTimer(); connect(&syncTimer, SIGNAL(timeout()), this, SLOT(syncTimerExpired())); connect(&syncButtonTimer, SIGNAL(timeout()), this, SLOT(updateSyncButton())); connect(&syncRunner, SIGNAL(syncComplete()), this, SLOT(syncButtonReset())); QLOG_TRACE() << "Setting up more connections for tab windows & threads"; // Setup so we refresh whenever the sync is done. // connect(&syncRunner, SIGNAL(syncComplete()), this, SLOT(updateSelectionCriteria(bool))); connect(&syncRunner, SIGNAL(syncComplete()), this, SLOT(notifySyncComplete())); // connect so we refresh the note list and counts whenever a note has changed connect(tabWindow, SIGNAL(noteUpdated(qint32)), noteTableView, SLOT(refreshData())); connect(tabWindow, SIGNAL(noteUpdated(qint32)), &counterRunner, SLOT(countNotebooks())); connect(tabWindow, SIGNAL(noteUpdated(qint32)), &counterRunner, SLOT(countTags())); connect(tabWindow, SIGNAL(noteTagsUpdated(QString, qint32, QStringList)), noteTableView, SLOT(noteTagsUpdated(QString, qint32, QStringList))); connect(tabWindow, SIGNAL(noteNotebookUpdated(QString, qint32, QString)), noteTableView, SLOT(noteNotebookUpdated(QString, qint32, QString))); connect(tabWindow, SIGNAL(updateNoteList(qint32, int, QVariant)), noteTableView, SLOT(refreshCell(qint32, int, QVariant))); connect(noteTableView, SIGNAL(refreshNoteContent(qint32)), tabWindow, SLOT(refreshNoteContent(qint32))); connect(noteTableView, SIGNAL(saveAllNotes()), tabWindow, SLOT(saveAllNotes())); // connect so we refresh the tag tree when a new tag is added connect(tabWindow, SIGNAL(tagCreated(qint32)), tagTreeView, SLOT(addNewTag(qint32))); connect(tabWindow, SIGNAL(tagCreated(qint32)), &counterRunner, SLOT(countTags())); connect(tabWindow, SIGNAL(updateSelectionRequested()), this, SLOT(updateSelectionCriteria())); connect(tabWindow->tabBar, SIGNAL(currentChanged(int)), this, SLOT(checkReadOnlyNotebook())); // Finish by filtering & displaying the data //updateSelectionCriteria(); // connect signal on a tag rename connect(tagTreeView, SIGNAL(tagRenamed(qint32,QString,QString)), this, SLOT(updateSelectionCriteria())); connect(notebookTreeView, SIGNAL(notebookRenamed(qint32,QString,QString)), this, SLOT(updateSelectionCriteria())); // Reload saved selection criteria if (selectionBehavior != AppearancePreferences::UseAllNotebooks) { bool criteriaFound = false; FilterCriteria *criteria = new FilterCriteria(); // Restore whatever they were looking at in the past if (selectionBehavior == AppearancePreferences::UseLastViewedNotebook) { global.settings->beginGroup("SaveState"); qint32 notebookLid = global.settings->value("selectedNotebook", 0).toInt(); if (notebookLid > 0 && notebookTreeView->dataStore[notebookLid] != NULL) { criteria->setNotebook(*notebookTreeView->dataStore[notebookLid]); criteriaFound = true; } else { QString selectedStack = global.settings->value("selectedStack", "").toString(); if (selectedStack != "" && notebookTreeView->stackStore[selectedStack] != NULL) { criteria->setNotebook(*notebookTreeView->stackStore[selectedStack]); criteriaFound = true; } } QString prevSearch = global.settings->value("searchString", "").toString(); if (prevSearch != "") { searchText->setText(prevSearch); criteria->setSearchString(prevSearch); criteriaFound = true; } qint32 searchLid = global.settings->value("selectedSearch", 0).toInt(); if (searchLid > 0 && searchTreeView->dataStore[searchLid] != NULL) { criteria->setSavedSearch(*searchTreeView->dataStore[searchLid]); criteriaFound = true; } QString selectedTags = global.settings->value("selectedTags", "").toString(); if (selectedTags != "") { QStringList tags = selectedTags.split(" "); QList items; for (int i=0; idataStore[tags[i].toInt()] != NULL) items.append(tagTreeView->dataStore[tags[i].toInt()]); } criteriaFound = true; criteria->setTags(items); } global.settings->endGroup(); } // Select the default notebook if (selectionBehavior == AppearancePreferences::UseDefaultNotebook) { NotebookTable ntable(global.db); qint32 lid = ntable.getDefaultNotebookLid(); if (notebookTreeView->dataStore[lid] != NULL) { criteria->setNotebook(*notebookTreeView->dataStore[lid]); criteriaFound = true; } } // If we have some filter criteria, save it. Otherwise delete // the unused memory. if (criteriaFound) { global.filterPosition++; global.appendFilter(criteria); } else delete criteria; } this->updateSelectionCriteria(); // Set default focuse to the editor window tabWindow->currentBrowser()->editor->setFocus(); QStringList accountNames = global.accountsManager->nameList(); QList ids = global.accountsManager->idList(); for (int i=0; icurrentId) { setWindowTitle("NixNote - " +accountNames[i]); i=ids.size(); } } // Determine if we should start minimized QLOG_DEBUG() << "isSystemTrayAvailable:" << QSystemTrayIcon::isSystemTrayAvailable(); if (global.startMinimized && !global.forceNoStartMimized && (QSystemTrayIcon::isSystemTrayAvailable()||global.forceSystemTrayAvailable)) { this->setWindowState(Qt::WindowMinimized); if (minimizeToTray) QTimer::singleShot(100,this, SLOT(hide())); } if (global.forceStartMinimized) { this->setWindowState(Qt::WindowMinimized); if (minimizeToTray) QTimer::singleShot(100,this, SLOT(hide())); } // Restore expanded tags & stacks global.settings->beginGroup("SaveState"); QString expandedTags = global.settings->value("expandedTags", "").toString(); if (expandedTags != "") { QStringList tags = expandedTags.split(" "); for (int i=0; idataStore[tags[i].toInt()]; if (item != NULL) item->setExpanded(true); } } QString expandedNotebooks = global.settings->value("expandedStacks", "").toString(); if (expandedNotebooks != "") { QStringList books = expandedNotebooks.split(" "); for (int i=0; idataStore[books[i].toInt()]; if (item != NULL && item->stack != "" && item->parent() != NULL) { item->parent()->setExpanded(true); //QLOG_DEBUG() << "Parent of " << books[i] << " expanded."; } } } searchTreeView->root->setExpanded(true); QString collapsedTrees = global.settings->value("collapsedTrees", "").toString(); if (collapsedTrees != "") { QStringList trees = collapsedTrees.split(" "); for (int i=0; ifavoritesTreeView->root->setExpanded(false); if (item=="notebooks") this->notebookTreeView->root->setExpanded(false); if (item=="tags") this->tagTreeView->root->setExpanded(false); if (item=="attributes") this->attributeTree->root->setExpanded(false); if (item=="savedsearches") this->searchTreeView->root->setExpanded(false); } } global.settings->endGroup(); // Setup application-wide shortcuts focusSearchShortcut = new QShortcut(this); focusSearchShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(focusSearchShortcut, "Focus_Search"); connect(focusSearchShortcut, SIGNAL(activated()), searchText, SLOT(setFocus())); fileSaveShortcut = new QShortcut(this); fileSaveShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(fileSaveShortcut, "File_Save_Content"); connect(fileSaveShortcut, SIGNAL(activated()), tabWindow, SLOT(saveAllNotes())); focusTitleShortcut = new QShortcut(this); focusTitleShortcut->setContext(Qt::WidgetShortcut); this->setupShortcut(focusTitleShortcut, "Focus_Title"); connect(focusTitleShortcut, SIGNAL(activated()), &tabWindow->currentBrowser()->noteTitle, SLOT(setFocus())); focusNoteShortcut = new QShortcut(this); focusNoteShortcut->setContext(Qt::WidgetShortcut); this->setupShortcut(focusNoteShortcut, "Focus_Note"); connect(focusNoteShortcut, SIGNAL(activated()), tabWindow->currentBrowser()->editor, SLOT(setFocus())); copyNoteUrlShortcut = new QShortcut(this); copyNoteUrlShortcut->setContext(Qt::WidgetShortcut); this->setupShortcut(copyNoteUrlShortcut, "Edit_Copy_Note_Url"); connect(copyNoteUrlShortcut, SIGNAL(activated()), tabWindow->currentBrowser(), SLOT(copyNoteUrl())); focusTagShortcut = new QShortcut(this); focusTagShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(focusTagShortcut, "Focus_Tag"); connect(focusTagShortcut, SIGNAL(activated()), tabWindow->currentBrowser(), SLOT(newTagFocusShortcut())); focusUrlShortcut = new QShortcut(this); focusUrlShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(focusUrlShortcut, "Focus_Url"); connect(focusUrlShortcut, SIGNAL(activated()), tabWindow->currentBrowser(), SLOT(urlFocusShortcut())); focusAuthorShortcut = new QShortcut(this); focusAuthorShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(focusAuthorShortcut, "Focus_Author"); connect(focusAuthorShortcut, SIGNAL(activated()), tabWindow->currentBrowser(), SLOT(authorFocusShortcut())); focusNotebookShortcut = new QShortcut(this); focusNotebookShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(focusNotebookShortcut, "Focus_Notebook"); connect(focusNotebookShortcut, SIGNAL(activated()), tabWindow->currentBrowser(), SLOT(notebookFocusShortcut())); focusFontShortcut = new QShortcut(this); focusFontShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(focusFontShortcut, "Focus_Font"); connect(focusFontShortcut, SIGNAL(activated()), tabWindow->currentBrowser(), SLOT(fontFocusShortcut())); focusFontSizeShortcut = new QShortcut(this); focusFontSizeShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(focusFontSizeShortcut, "Focus_Font_Size"); connect(focusFontSizeShortcut, SIGNAL(activated()), tabWindow->currentBrowser(), SLOT(fontSizeFocusShortcut())); nextTabShortcut = new QShortcut(this); nextTabShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(nextTabShortcut, "Next_Tab"); connect(nextTabShortcut, SIGNAL(activated()), tabWindow, SLOT(nextTab())); prevTabShortcut = new QShortcut(this); prevTabShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(prevTabShortcut, "Prev_Tab"); connect(prevTabShortcut, SIGNAL(activated()), tabWindow, SLOT(prevTab())); closeTabShortcut = new QShortcut(this); closeTabShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(closeTabShortcut, "Close_Tab"); connect(closeTabShortcut, SIGNAL(activated()), tabWindow, SLOT(closeTab())); downNoteShortcut = new QShortcut(this); downNoteShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(downNoteShortcut, "Down_Note"); connect(downNoteShortcut, SIGNAL(activated()), noteTableView, SLOT(downNote())); upNoteShortcut = new QShortcut(this); upNoteShortcut->setContext(Qt::WidgetWithChildrenShortcut); this->setupShortcut(upNoteShortcut, "Up_Note"); connect(upNoteShortcut, SIGNAL(activated()), noteTableView, SLOT(upNote())); // Disable menu items when plugins are not available if (!webcamPluginAvailable) { newWebcamNoteButton->setVisible(false); this->menuBar->newWebcamNoteAction->setVisible(false); this->menuBar->newWebcamNoteAction->setEnabled(false); } // startup the index timer (if needed) if (global.enableIndexing) { indexTimer.setInterval(global.minimumThumbnailInterval); connect(&indexTimer, SIGNAL(timeout()), &indexRunner, SLOT(index())); connect(&indexRunner, SIGNAL(indexDone(bool)), this, SLOT(indexFinished(bool))); indexTimer.start(); } } void NixNote::indexFinished(bool finished) { indexTimer.stop(); if (!finished) indexTimer.setInterval(global.minIndexInterval); else indexTimer.setInterval(global.maxIndexInterval); indexTimer.start(); } //************************************************************** //* Move sync, couter, & index objects to their appropriate //* thread. //************************************************************** void NixNote::counterThreadStarted() { counterRunner.moveToThread(&counterThread); } //*************************************************************** //* Signal received when the syncRunner thread has started //*************************************************************** void NixNote::syncThreadStarted() { syncRunner.moveToThread(&syncThread); global.settings->beginGroup("Sync"); bool syncOnStartup = global.settings->value("syncOnStartup", false).toBool(); global.showGoodSyncMessagesInTray = global.settings->value("showGoodSyncMessagesInTray", true).toBool(); global.settings->endGroup(); if (syncOnStartup) synchronize(); } void NixNote::indexThreadStarted() { indexRunner.moveToThread(&indexThread); indexRunner.initialize(); global.indexRunner = &indexRunner; } //****************************************************************************** //* This function sets up the note list window. This is what the users select //* view a specific note //****************************************************************************** void NixNote::setupNoteList() { QLOG_TRACE() << "Starting NixNote.setupNoteList()"; // Setup a generic widget to hold the search & note table topRightWidget = new QWidget(this); topRightLayout = new QVBoxLayout(); topRightLayout->addWidget(searchText); topRightWidget->setLayout(topRightLayout); noteTableView = new NTableView(); topRightLayout->addWidget(noteTableView); topRightLayout->setContentsMargins(QMargins(0,0,0,0)); // Add the generic widget if (global.listView == Global::ListViewWide) rightPanelSplitter->addWidget(topRightWidget); else mainSplitter->addWidget(topRightWidget); connect(noteTableView, SIGNAL(newNote()), this, SLOT(newNote())); connect(noteTableView, SIGNAL(notesDeleted(QList,bool)), this, SLOT(notesDeleted(QList))); connect(noteTableView, SIGNAL(notesRestored(QList)), this, SLOT(notesRestored(QList))); connect(&syncRunner, SIGNAL(syncComplete()), noteTableView, SLOT(refreshData())); connect(&syncRunner, SIGNAL(noteSynchronized(qint32, bool)), this, SLOT(noteSynchronized(qint32, bool))); QLOG_TRACE() << "Leaving NixNote.setupNoteList()"; } // Signal received when a note has been synchronized void NixNote::noteSynchronized(qint32 lid, bool value) { noteTableView->refreshCell(lid, NOTE_TABLE_IS_DIRTY_POSITION, value); } //***************************************************************************** //* This function sets up the user's search tree //***************************************************************************** void NixNote::setupSearchTree() { QLOG_TRACE() << "Starting NixNote.setupSearchTree()"; leftSeparator3 = new QLabel(); leftSeparator3->setTextFormat(Qt::RichText); leftSeparator3->setText("
"); leftPanel->addSeparator(leftSeparator3); searchTreeView = new NSearchView(leftPanel); leftPanel->addSearchView(searchTreeView); connect(&syncRunner, SIGNAL(searchUpdated(qint32, QString)), searchTreeView, SLOT(searchUpdated(qint32, QString))); connect(&syncRunner, SIGNAL(searchExpunged(qint32)), searchTreeView, SLOT(searchExpunged(qint32))); //connect(&syncRunner, SIGNAL(syncComplete()),searchTreeView, SLOT(re); QLOG_TRACE() << "Exiting NixNote.setupSearchTree()"; } //***************************************************************************** //* This function sets up the user's tag tree //***************************************************************************** void NixNote::setupTagTree() { QLOG_TRACE() << "Starting NixNote.setupTagTree()"; leftSeparator2 = new QLabel(); leftSeparator2->setTextFormat(Qt::RichText); leftSeparator2->setText("
"); leftPanel->addSeparator(leftSeparator2); tagTreeView = new NTagView(leftPanel); leftPanel->addTagView(tagTreeView); connect(&syncRunner, SIGNAL(tagUpdated(qint32, QString, QString, qint32)),tagTreeView, SLOT(tagUpdated(qint32, QString, QString, qint32))); connect(&syncRunner, SIGNAL(tagExpunged(qint32)), tagTreeView, SLOT(tagExpunged(qint32))); connect(&syncRunner, SIGNAL(syncComplete()),tagTreeView, SLOT(rebuildTree())); connect(&counterRunner, SIGNAL(tagTotals(qint32,qint32, qint32)), tagTreeView, SLOT(updateTotals(qint32,qint32, qint32))); connect(&counterRunner, SIGNAL(tagCountComplete()), tagTreeView, SLOT(hideUnassignedTags())); connect(notebookTreeView, SIGNAL(notebookSelectionChanged(qint32)), tagTreeView, SLOT(notebookSelectionChanged(qint32))); connect(tagTreeView, SIGNAL(updateNoteList(qint32,int,QVariant)), noteTableView, SLOT(refreshCell(qint32,int,QVariant))); connect(tagTreeView, SIGNAL(updateCounts()), &counterRunner, SLOT(countAll())); QLOG_TRACE() << "Exiting NixNote.setupTagTree()"; } //***************************************************************************** //* This function sets up the attribute search tree //***************************************************************************** void NixNote::setupAttributeTree() { QLOG_TRACE() << "Starting NixNote.setupAttributeTree()"; leftseparator4 = new QLabel(); leftseparator4->setTextFormat(Qt::RichText); leftseparator4->setText("
"); leftPanel->addSeparator(leftseparator4); attributeTree = new NAttributeTree(leftPanel); leftPanel->addAttributeTree(attributeTree); QLOG_TRACE() << "Exiting NixNote.setupAttributeTree()"; } //***************************************************************************** //* This function sets up the trash //***************************************************************************** void NixNote::setupTrashTree() { QLOG_TRACE() << "Starting NixNote.setupTrashTree()"; leftSeparator5 = new QLabel(); leftSeparator5->setTextFormat(Qt::RichText); leftSeparator5->setText("
"); leftPanel->addSeparator(leftSeparator5); trashTree = new NTrashTree(leftPanel); leftPanel->addTrashTree(trashTree); QLOG_TRACE() << "Exiting NixNote.setupTrashTree()"; connect(&counterRunner, SIGNAL(trashTotals(qint32)), trashTree, SLOT(updateTotals(qint32))); } //***************************************************************************** //* This function sets up the user's synchronized notebook tree //***************************************************************************** void NixNote::setupFavoritesTree() { QLOG_TRACE() << "Starting NixNote.setupFavoritesdNotebookTree()"; favoritesTreeView = new FavoritesView(leftPanel); leftPanel->addFavoritesView(favoritesTreeView); // connect(&syncRunner, SIGNAL(notebookUpdated(qint32, QString,QString, bool, bool)),notebookTreeView, SLOT(notebookUpdated(qint32, QString, QString, bool, bool))); connect(&syncRunner, SIGNAL(notebookExpunged(qint32)), favoritesTreeView, SLOT(itemExpunged(qint32))); connect(&syncRunner, SIGNAL(tagExpunged(qint32)), favoritesTreeView, SLOT(itemExpunged(qint32))); // connect(&syncRunner, SIGNAL(noteUpdated(qint32)), notebookTreeView, SLOT(itemExpunged(qint32))); connect(&counterRunner, SIGNAL(notebookTotals(qint32,qint32, qint32)), favoritesTreeView, SLOT(updateTotals(qint32,qint32, qint32))); connect(&counterRunner, SIGNAL(tagTotals(qint32,qint32,qint32)), favoritesTreeView, SLOT(updateTotals(qint32,qint32, qint32))); connect(favoritesTreeView, SIGNAL(updateCounts()), &counterRunner, SLOT(countAll())); leftSeparator1 = new QLabel(); leftSeparator1->setTextFormat(Qt::RichText); leftSeparator1->setText("
"); leftPanel->addSeparator(leftSeparator1); QLOG_TRACE() << "Exiting NixNote.setupFavoritesTree()"; } //***************************************************************************** //* This function sets up the user's synchronized notebook tree //***************************************************************************** void NixNote::setupSynchronizedNotebookTree() { QLOG_TRACE() << "Starting NixNote.setupSynchronizedNotebookTree()"; notebookTreeView = new NNotebookView(leftPanel); leftPanel->addNotebookView(notebookTreeView); connect(&syncRunner, SIGNAL(notebookUpdated(qint32, QString,QString, bool, bool)),notebookTreeView, SLOT(notebookUpdated(qint32, QString, QString, bool, bool))); connect(&syncRunner, SIGNAL(syncComplete()),notebookTreeView, SLOT(rebuildTree())); connect(&syncRunner, SIGNAL(notebookExpunged(qint32)), notebookTreeView, SLOT(notebookExpunged(qint32))); connect(&counterRunner, SIGNAL(notebookTotals(qint32,qint32, qint32)), notebookTreeView, SLOT(updateTotals(qint32,qint32, qint32))); connect(notebookTreeView, SIGNAL(updateNoteList(qint32,int,QVariant)), noteTableView, SLOT(refreshCell(qint32,int,QVariant))); connect(notebookTreeView, SIGNAL(updateCounts()), &counterRunner, SLOT(countAll())); QLOG_TRACE() << "Exiting NixNote.setupSynchronizedNotebookTree()"; } //***************************************************************************** //* This function sets up the tab window that is used by the browser //***************************************************************************** void NixNote::setupTabWindow() { QLOG_TRACE() << "Starting NixNote.setupTabWindow()"; tabWindow = new NTabWidget(this, &syncRunner, notebookTreeView, tagTreeView); QWidget *tabPanel = new QWidget(this); tabPanel->setLayout(new QVBoxLayout()); tabPanel->layout()->addWidget(tabWindow); rightPanelSplitter->addWidget(tabPanel); NBrowserWindow *newBrowser = new NBrowserWindow(this); connect(&syncRunner, SIGNAL(syncComplete()), &newBrowser->notebookMenu, SLOT(reloadData())); connect(&syncRunner, SIGNAL(syncComplete()), &newBrowser->tagEditor, SLOT(reloadTags())); connect(&syncRunner, SIGNAL(noteUpdated(qint32)), newBrowser, SLOT(noteSyncUpdate(qint32))); tabWindow->addBrowser(newBrowser, ""); rightPanelSplitter->setStretchFactor(1,10); connect(noteTableView, SIGNAL(openNote(bool)), this, SLOT(openNote(bool))); connect(noteTableView, SIGNAL(openNoteExternalWindow(qint32)), this, SLOT(openExternalNote(qint32))); connect(menuBar->viewSourceAction, SIGNAL(triggered()), tabWindow, SLOT(toggleSource())); connect(menuBar->viewHistoryAction, SIGNAL(triggered()), this, SLOT(viewNoteHistory())); connect(menuBar->viewPresentationModeAction, SIGNAL(triggered()), this, SLOT(presentationModeOn())); connect(tabWindow, SIGNAL(escapeKeyPressed()), this, SLOT(presentationModeOff())); connect(menuBar->undoAction, SIGNAL(triggered()), tabWindow, SLOT(undoButtonPressed())); connect(menuBar->redoAction, SIGNAL(triggered()), tabWindow, SLOT(redoButtonPressed())); connect(menuBar->cutAction, SIGNAL(triggered()), tabWindow, SLOT(cutButtonPressed())); connect(menuBar->copyAction, SIGNAL(triggered()), tabWindow, SLOT(copyButtonPressed())); connect(menuBar->pasteAction, SIGNAL(triggered()), tabWindow, SLOT(pasteButtonPressed())); connect(menuBar->pasteAsTextAction, SIGNAL(triggered()), tabWindow, SLOT(pasteAsTextButtonPressed())); connect(menuBar->selectAllAction, SIGNAL(triggered()), tabWindow, SLOT(selectAllButtonPressed())); connect(menuBar->viewExtendedInformation, SIGNAL(triggered()), tabWindow, SLOT(viewExtendedInformation())); QLOG_TRACE() << "Exiting NixNote.setupTabWindow()"; } //**************************************************************************** //* Close NixNote. This will force a close. Even if "close to tray" is set. //***************************************************************************** void NixNote::closeNixNote() { closeFlag = true; closeToTray = false; close(); } //***************************************************************************** //* Close nixnote via the shortcut. If we have it set to close to the tray, //* we just hide things. //***************************************************************************** void NixNote::closeShortcut() { if (closeToTray && isVisible()) toggleVisible(); else closeNixNote(); } //***************************************************************************** //* Save program contents on exit //****************************************************************************** void NixNote::saveOnExit() { QLOG_DEBUG() << "saveOnExit called"; QLOG_DEBUG() << "Saving contents"; saveContents(); QLOG_DEBUG() << "Shutting down threads"; indexRunner.keepRunning = false; counterRunner.keepRunning = false; QCoreApplication::processEvents(); QLOG_DEBUG() << "Saving window states"; ConfigStore config(global.db); config.saveSetting(CONFIG_STORE_WINDOW_STATE, saveState()); config.saveSetting(CONFIG_STORE_WINDOW_GEOMETRY, saveGeometry()); QString lidList; QList *browsers = tabWindow->browserList; for (int i=0;isize(); i++) { lidList = lidList + QString::number(browsers->at(i)->lid) + QString(" "); } global.settings->beginGroup("SaveState"); global.settings->setValue("WindowState", saveState()); global.settings->setValue("WindowGeometry", saveGeometry()); global.settings->setValue("isMaximized", isMaximized()); global.settings->setValue("openTabs", lidList); global.settings->setValue("lastViewed", tabWindow->currentBrowser()->lid); global.settings->setValue("noteListWidth", noteTableView->width()); global.settings->setValue("noteListHeight", noteTableView->height()); global.settings->setValue("mainSplitter", mainSplitter->saveState()); global.settings->setValue("rightSplitter", rightPanelSplitter->saveState()); global.settings->setValue("listView", global.listView); global.settings->remove("selectedStack"); global.settings->remove("selectedNotebook"); global.settings->remove("expandedStacks"); global.settings->remove("selectedTags"); global.settings->remove("expandedTags"); global.settings->remove("selectedSearch"); global.settings->remove("searchString"); // Save the current notebook/stack selection if (notebookTreeView->selectedItems().size() > 0) { NNotebookViewItem *item = (NNotebookViewItem*)notebookTreeView->selectedItems().at(0); qint32 saveLid = item->lid; if (saveLid > 0) { global.settings->setValue("selectedNotebook", saveLid); } else { QString saveStack = item->text(0); global.settings->setValue("selectedStack", saveStack); } } if (searchText->isSet()) { global.settings->setValue("searchString", searchText->text().trimmed()); } if (searchTreeView->selectedItems().size() > 0) { NSearchViewItem *item = (NSearchViewItem*)searchTreeView->selectedItems().at(0); qint32 saveLid = item->data(0, Qt::UserRole).toInt(); if (saveLid > 0) { global.settings->setValue("selectedSearch", saveLid); } } // Save any selected tags QString savedLids = ""; if (tagTreeView->selectedItems().size() > 0) { for (int i=0; iselectedItems().size(); i++) { NTagViewItem *item = (NTagViewItem*)tagTreeView->selectedItems().at(i); qint32 saveLid = item->data(0, Qt::UserRole).toInt(); savedLids = savedLids + QString::number(saveLid) + " "; } global.settings->setValue("selectedTags", savedLids.trimmed()); } QHash::iterator iterator; savedLids = ""; for (iterator=tagTreeView->dataStore.begin(); iterator!=tagTreeView->dataStore.end(); ++iterator) { if (iterator.value() != NULL) { qint32 saveLid = iterator.value()->data(0, Qt::UserRole).toInt(); if (iterator.value()->isExpanded()) { savedLids = savedLids + QString::number(saveLid) + " "; } } } global.settings->setValue("expandedTags", savedLids.trimmed()); QString collapsedTrees = ""; global.settings->remove("collapsedTrees"); if (!favoritesTreeView->root->isExpanded()) collapsedTrees = "favorites "; if (!notebookTreeView->root->isExpanded()) collapsedTrees= collapsedTrees + "notebooks "; if (!tagTreeView->root->isExpanded()) collapsedTrees= collapsedTrees + "tags "; if (!attributeTree->root->isExpanded()) collapsedTrees= collapsedTrees + "attributes "; if (!searchTreeView->root->isExpanded()) collapsedTrees= collapsedTrees + "savedsearches "; global.settings->setValue("collapsedTrees", collapsedTrees.trimmed()); QHash::iterator books; savedLids = ""; for (books=notebookTreeView->dataStore.begin(); books!=notebookTreeView->dataStore.end(); ++books) { if (books.value() != NULL) { qint32 saveLid = books.value()->data(0, Qt::UserRole).toInt(); if (books.value()->stack != "" && books.value()->parent()->isExpanded()) { savedLids = savedLids + QString::number(saveLid) + " "; } } } global.settings->setValue("expandedStacks", savedLids.trimmed()); global.settings->endGroup(); saveNoteColumnWidths(); saveNoteColumnPositions(); noteTableView->saveColumnsVisible(); QLOG_DEBUG() << "Closing threads"; indexThread.quit(); counterThread.quit(); QLOG_DEBUG() << "Exitng saveOnExit()"; } //***************************************************************************** //* Close the program //***************************************************************************** void NixNote::closeEvent(QCloseEvent *event) { // if (closeToTray && !closeFlag) { // event->ignore(); // hide(); // return; // } saveOnExit(); global.settings->beginGroup("Sync"); bool syncOnShutdown = global.settings->value("syncOnShutdown", false).toBool(); global.settings->endGroup(); if (syncOnShutdown && !finalSync && global.accountsManager->oauthTokenFound()) { finalSync = true; syncRunner.finalSync = true; hide(); connect(&syncRunner, SIGNAL(syncComplete()), this, SLOT(close())); synchronize(); event->ignore(); return; } syncRunner.keepRunning = false; syncThread.quit(); if (trayIcon->isVisible()) trayIcon->hide(); if (trayIcon != NULL) delete trayIcon; QMainWindow::closeEvent(event); QLOG_DEBUG() << "Quitting"; } //************************************************************* //* Function called on shutdown to save all of the note //* table column positions. These values are restored the //* next time NixNote starts. //************************************************************** void NixNote::saveNoteColumnPositions() { int position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_ALTITUDE_POSITION); global.setColumnPosition("noteTableAltitudePosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_AUTHOR_POSITION); global.setColumnPosition("noteTableAuthorPosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_DATE_CREATED_POSITION); global.setColumnPosition("noteTableDateCreatedPosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_DATE_DELETED_POSITION); global.setColumnPosition("noteTableDateDeletedPosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_DATE_SUBJECT_POSITION); global.setColumnPosition("noteTableDateSubjectPosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_DATE_UPDATED_POSITION); global.setColumnPosition("noteTableDateUpdatedosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_HAS_ENCRYPTION_POSITION); global.setColumnPosition("noteTableHasEncryptionPosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_HAS_TODO_POSITION); global.setColumnPosition("noteTableHasTodoPosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_IS_DIRTY_POSITION); global.setColumnPosition("noteTableIsDirtyPosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_LATITUDE_POSITION); global.setColumnPosition("noteTableLatitudePosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_LONGITUDE_POSITION); global.setColumnPosition("noteTableLongitudePosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_NOTEBOOK_LID_POSITION); global.setColumnPosition("noteTableNotebookLidPosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_LID_POSITION); global.setColumnPosition("noteTableLidPosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_NOTEBOOK_POSITION); global.setColumnPosition("noteTableNotebookPosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_SIZE_POSITION); global.setColumnPosition("noteTableSizePosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_SOURCE_APPLICATION_POSITION); global.setColumnPosition("noteTableSourceApplicationPosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_SOURCE_POSITION); global.setColumnPosition("noteTableSourcePosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_SOURCE_URL_POSITION); global.setColumnPosition("noteTableSourceUrlPosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_TAGS_POSITION); global.setColumnPosition("noteTableTagsPosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_TITLE_POSITION); global.setColumnPosition("noteTableTitlePosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_REMINDER_TIME_POSITION); global.setColumnPosition("noteTableReminderTimePosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_REMINDER_TIME_DONE_POSITION); global.setColumnPosition("noteTableReminderTimeDonePosition", position); position = noteTableView->horizontalHeader()->visualIndex(NOTE_TABLE_REMINDER_ORDER_POSITION); global.setColumnPosition("noteTableReminderOrderPosition", position); } //************************************************************* //* Function called on shutdown to save all of the note //* table column widths. These values are restored the //* next time NixNote starts. //************************************************************** void NixNote::saveNoteColumnWidths() { int width; width = noteTableView->columnWidth(NOTE_TABLE_ALTITUDE_POSITION); global.setColumnWidth("noteTableAltitudePosition", width); width = noteTableView->columnWidth(NOTE_TABLE_AUTHOR_POSITION); global.setColumnWidth("noteTableAuthorPosition", width); width = noteTableView->columnWidth(NOTE_TABLE_DATE_CREATED_POSITION); global.setColumnWidth("noteTableDateCreatedPosition", width); width = noteTableView->columnWidth(NOTE_TABLE_DATE_DELETED_POSITION); global.setColumnWidth("noteTableDateDeletedPosition", width); width = noteTableView->columnWidth(NOTE_TABLE_DATE_SUBJECT_POSITION); global.setColumnWidth("noteTableDateSubjectPosition", width); width = noteTableView->columnWidth(NOTE_TABLE_DATE_UPDATED_POSITION); global.setColumnWidth("noteTableDateUpdatedPosition", width); width = noteTableView->columnWidth(NOTE_TABLE_HAS_ENCRYPTION_POSITION); global.setColumnWidth("noteTableHasEncryptionPosition", width); width = noteTableView->columnWidth(NOTE_TABLE_HAS_TODO_POSITION); global.setColumnWidth("noteTableHasTodoPosition", width); width = noteTableView->columnWidth(NOTE_TABLE_IS_DIRTY_POSITION); global.setColumnWidth("noteTableIsDirtyPosition", width); width = noteTableView->columnWidth(NOTE_TABLE_LATITUDE_POSITION); global.setColumnWidth("noteTableLatitudePosition", width); width = noteTableView->columnWidth(NOTE_TABLE_LID_POSITION); global.setColumnWidth("noteTableLidPosition", width); width = noteTableView->columnWidth(NOTE_TABLE_LONGITUDE_POSITION); global.setColumnWidth("noteTableLongitudePosition", width); width = noteTableView->columnWidth(NOTE_TABLE_NOTEBOOK_LID_POSITION); global.setColumnWidth("noteTableNotebookLidPosition", width); width = noteTableView->columnWidth(NOTE_TABLE_NOTEBOOK_POSITION); global.setColumnWidth("noteTableNotebookPosition", width); width = noteTableView->columnWidth(NOTE_TABLE_SIZE_POSITION); global.setColumnWidth("noteTableSizePosition", width); width = noteTableView->columnWidth(NOTE_TABLE_SOURCE_APPLICATION_POSITION); global.setColumnWidth("noteTableSourceApplicationPosition", width); width = noteTableView->columnWidth(NOTE_TABLE_TAGS_POSITION); global.setColumnWidth("noteTableTagsPosition", width); width = noteTableView->columnWidth(NOTE_TABLE_TITLE_POSITION); global.setColumnWidth("noteTableTitlePosition", width); width = noteTableView->columnWidth(NOTE_TABLE_REMINDER_TIME_POSITION); global.setColumnWidth("noteTableReminderTimePosition", width); width = noteTableView->columnWidth(NOTE_TABLE_REMINDER_TIME_DONE_POSITION); global.setColumnWidth("noteTableReminderTimeDonePosition", width); width = noteTableView->columnWidth(NOTE_TABLE_REMINDER_ORDER_POSITION); global.setColumnWidth("noteTableReminderOrderPosition", width); } //***************************************************************************** //* The sync timer has expired //***************************************************************************** void NixNote::syncTimerExpired() { pauseIndexing(true); // If we are already connected, we are already synchronizing so there is nothing more to do if (global.connected == true) return; if (!global.accountsManager->oauthTokenFound()) return; tabWindow->saveAllNotes(); emit(syncRequested()); } //****************************************************************************** //* User synchronize was requested //****************************************************************************** void NixNote::synchronize() { // If we are already connected, we are already synchronizing so there is nothing more to do if (global.connected == true) return; this->pauseIndexing(true); if (tabWindow->currentBrowser()->noteTitle.hasFocus()) tabWindow->currentBrowser()->noteTitle.checkNoteTitleChange(); if (!global.accountsManager->oauthTokenFound()) { QString consumerKey = "baumgarr-3523"; QString consumerSecret = "8d5ee175f8a5d3ec"; EvernoteOAuthDialog d(consumerKey, consumerSecret, global.server); d.setWindowTitle(tr("Log in to Evernote")); if(d.exec() != QDialog::Accepted) { QMessageBox::critical(0, tr("NixNote"), "Login failed.\n" + d.oauthError()); return; } QString token = QString("oauth_token=") +d.oauthResult().authenticationToken + QString("&oauth_token_secret=&edam_shard=")+d.oauthResult().shardId + QString("&edam_userId=") +QString::number(d.oauthResult().userId) + QString("&edam_expires=") +QString::number(d.oauthResult().expires) + QString("&edam_noteStoreUrl=") + d.oauthResult().noteStoreUrl + QString("&edam_webApiUrlPrefix=") +d.oauthResult().webApiUrlPrefix; global.accountsManager->setOAuthToken(token); } this->saveContents(); statusBar()->clearMessage(); tabWindow->saveAllNotes(); syncButtonTimer.start(3); emit syncRequested(); } //******************************************************************************** //* Disconnect from Evernote //******************************************************************************** void NixNote::disconnect() { global.connected = false; menuBar->disconnectAction->setEnabled(false); syncButtonTimer.stop(); pauseIndexing(false); } //******************************************************** //* Function called when a sync has completed. It stops //* the spinning sync icon and resets it to the default //* value. //********************************************************* void NixNote::syncButtonReset() { pauseIndexing(false); if (syncIcons.size() == 0) return; syncButtonTimer.stop(); syncButton->setIcon(syncIcons[0]); // If we had an API rate limit exceeded, restart at the top of the hour. if (syncRunner.apiRateLimitExceeded) { global.settings->beginGroup("Sync"); bool restart = global.settings->value("apiRateLimitAutoRestart", false).toBool(); global.settings->endGroup(); if (restart) { QTime t = QTime::currentTime(); int minutes = 60-t.minute()+1; // Time to the top of the hour plus a padding. QTimer::singleShot(60*1000*minutes, this, SLOT(synchronize())); } } } //***************************************************** //* Rotate the sync icon when we are connected to //* Evernote and are transmitting & receiving info //***************************************************** void NixNote::updateSyncButton() { if (syncIcons.size() == 0) { double angle = 0.0; synchronizeIconAngle = 0; QPixmap pix(":synchronizeIcon"); syncIcons.push_back(pix); for (qint32 i=0; i<=360; i++) { QPixmap rotatedPix(pix.size()); QPainter p(&rotatedPix); rotatedPix.fill(toolBar->palette().color(QPalette::Background)); QSize size = pix.size(); p.translate(size.width()/2, size.height()/2); angle = angle+1.0; p.rotate(angle); p.setBackgroundMode( Qt::OpaqueMode); p.translate(-size.width()/2, -size.height()/2); p.drawPixmap(0,0, pix); p.end(); syncIcons.push_back(rotatedPix); } } synchronizeIconAngle++; if (synchronizeIconAngle > 359) synchronizeIconAngle=0; syncButton->setIcon(syncIcons[synchronizeIconAngle]); } //************************************************************ //* Open a new note. If newWindow is true it is an external //* note request. //************************************************************ void NixNote::openNote(bool newWindow) { saveContents(); FilterCriteria *criteria = global.filterCriteria[global.filterPosition]; qint32 lid; if (criteria->isLidSet()) { lid = criteria->getLid(); if (newWindow) tabWindow->openNote(lid, NTabWidget::NewTab); else tabWindow->openNote(lid, NTabWidget::CurrentTab); } else { tabWindow->openNote(-1, NTabWidget::CurrentTab); } rightArrowButton->setEnabled(false); leftArrowButton->setEnabled(false); if (global.filterPosition+1 < global.filterCriteria.size()) rightArrowButton->setEnabled(true); if (global.filterPosition > 0) leftArrowButton->setEnabled(true); checkReadOnlyNotebook(); } //************************************************************** //* Open a note in an external window. //************************************************************** void NixNote::openExternalNote(qint32 lid) { tabWindow->openNote(lid, NTabWidget::ExternalWindow); } //***************************************************** //* Called when a user changes the selection criteria //* (i.e. they select a notebook, tag, saved search... //***************************************************** void NixNote::updateSelectionCriteria(bool afterSync) { QLOG_DEBUG() << "starting NixNote.updateSelectionCriteria()"; tabWindow->currentBrowser()->saveNoteContent(); // Invalidate the cache QDir dir(global.fileManager.getTmpDirPath()); QFileInfoList files = dir.entryInfoList(); for (int i=0; i keys = global.cache.keys(); for (int i=0; irefreshData(); favoritesTreeView->updateSelection(); tagTreeView->updateSelection(); notebookTreeView->updateSelection(); searchTreeView->updateSelection(); attributeTree->updateSelection(); trashTree->updateSelection(); searchText->updateSelection(); rightArrowButton->setEnabled(false); leftArrowButton->setEnabled(false); if (global.filterPosition+1 < global.filterCriteria.size()) rightArrowButton->setEnabled(true); if (global.filterPosition > 0) leftArrowButton->setEnabled(true); QList selectedNotes; global.filterCriteria[global.filterPosition]->getSelectedNotes(selectedNotes); if (selectedNotes.size() == 0) { tabWindow->currentBrowser()->clear(); tabWindow->currentBrowser()->setReadOnly(true); } if (selectedNotes.size() > 0 && !afterSync) { //tabWindow->currentBrowser()->setContent(selectedNotes.at(0)); // <<<<<< This causes problems with multiple tabs after sync NBrowserWindow *window = NULL; tabWindow->findBrowser(window, selectedNotes.at(0)); if (window!= NULL) window->setContent(selectedNotes.at(0)); if (!afterSync) openNote(false); } if (global.filterCriteria[global.filterPosition]->isDeletedOnlySet() && global.filterCriteria[global.filterPosition]->getDeletedOnly()) newNoteButton->setEnabled(false); else newNoteButton->setEnabled(true); emit updateCounts(); } //****************************************************************** //* Check if the notebook selected is read-only. With //* read-only notes the editor and a lot of actions are disabled. //****************************************************************** void NixNote::checkReadOnlyNotebook() { qint32 lid = tabWindow->currentBrowser()->lid; Note n; NoteTable ntable(global.db); NotebookTable btable(global.db); ntable.get(n, lid, false, false); qint32 notebookLid = 0; if (n.notebookGuid.isSet()) notebookLid = btable.getLid(n.notebookGuid); if (btable.isReadOnly(notebookLid)) { newNoteButton->setEnabled(false); menuBar->deleteNoteAction->setEnabled(false); } else { newNoteButton->setEnabled(true); menuBar->deleteNoteAction->setEnabled(true); } } //********************************************* //* User clicked the -> "forward" button //* to go to the next history position. //********************************************* void NixNote::rightButtonTriggered() { global.filterPosition++; updateSelectionCriteria(); } //********************************************* //* User clicked the <- "back" button //* to go to the previous history position. //********************************************* void NixNote::leftButtonTriggered() { global.filterPosition--; updateSelectionCriteria(); } //************************************************** // Import notes menu option chosen //************************************************** void NixNote::noteExport() { databaseBackup(false); } //************************************************** //* Backup (or export) notes //************************************************** void NixNote::databaseBackup(bool backup) { QLOG_TRACE() << "Entering databaseBackup()"; ExportData noteReader(backup); if (!backup) { noteTableView->getSelectedLids(noteReader.lids); if (noteReader.lids.size() == 0) { QMessageBox::critical(this, tr("Error"), tr("No notes selected.")); return; } } QString caption, directory; if (backup) caption = tr("Backup Database"); else caption = tr("Export Notes"); if (saveLastPath == "") directory = QDir::homePath(); else directory = saveLastPath; QFileDialog fd(0, caption, directory, tr("NixNote Export (*.nnex);;All Files (*.*)")); fd.setFileMode(QFileDialog::AnyFile); fd.setConfirmOverwrite(true); fd.setAcceptMode(QFileDialog::AcceptSave); if (fd.exec() == 0 || fd.selectedFiles().size() == 0) { QLOG_DEBUG() << "Database restore canceled in file dialog."; return; } waitCursor(true); QStringList fileNames; fileNames = fd.selectedFiles(); saveLastPath = fileNames[0]; int pos = saveLastPath.lastIndexOf("/"); if (pos != -1) saveLastPath.truncate(pos); if (backup) setMessage(tr("Performing backup")); else setMessage(tr("Performing export")); if (!fileNames[0].endsWith(".nnex")) { fileNames[0].append(".nnex"); } noteReader.backupData(fileNames[0]); if (noteReader.lastError != 0) { setMessage(noteReader.errorMessage); QLOG_ERROR() << "Backup problem: " << noteReader.errorMessage; QMessageBox::critical(this, tr("Error"), noteReader.errorMessage); waitCursor(false); return; } if (backup) setMessage(tr("Database backup complete.")); else setMessage(tr("Note extract complete.")); waitCursor(false); } //************************************************** // Import notes menu option chosen //************************************************** void NixNote::noteImport() { databaseRestore(false); } //************************************************** //* Restore (or import) notes //************************************************** void NixNote::databaseRestore(bool fullRestore) { QLOG_TRACE() << "Entering databaseRestore()"; if (fullRestore) { QMessageBox msgBox; msgBox.setText(tr("This is used to restore a database from backups.\nIt is HIGHLY recommended that this only be used to populate\nan empty database. Restoring into a database that\n already has data can cause problems.\n\nAre you sure you want to continue?")); msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Ok); msgBox.setWindowTitle(tr("Confirm Restore")); int retval = msgBox.exec(); switch (retval) { case QMessageBox::Cancel: // Cancel was clicked, let's exit QLOG_DEBUG() << "Database restore has been canceled"; return; break; default: // Anything else we don't care break; } } QString caption, directory, filter; if (fullRestore) { caption = tr("Restore Database"); filter = tr("NixNote Export (*.nnex);;All Files (*.*)"); } else { caption = tr("Import Notes"); filter = tr("NixNote Export (*.nnex);;Evernote Export (*.enex);;All Files (*.*)"); } if (saveLastPath == "") directory = QDir::homePath(); else directory = saveLastPath; QFileDialog fd(0, caption, directory, filter); fd.setFileMode(QFileDialog::ExistingFile); fd.setConfirmOverwrite(true); fd.setAcceptMode(QFileDialog::AcceptOpen); if (fd.exec() == 0 || fd.selectedFiles().size() == 0) { QLOG_DEBUG() << "Database restore canceled in file dialog."; return; } waitCursor(true); QStringList fileNames; fileNames = fd.selectedFiles(); saveLastPath = fileNames[0]; int pos = saveLastPath.lastIndexOf("/"); if (pos != -1) saveLastPath.truncate(pos); if (fullRestore) setMessage(tr("Restoring database")); else setMessage(tr("Importing Notes")); if (fileNames[0].endsWith(".nnex") || fullRestore) { ImportData noteReader(fullRestore); noteReader.import(fileNames[0]); if (noteReader.lastError != 0) { setMessage(noteReader.getErrorMessage()); QLOG_ERROR() << "Restore problem: " << noteReader.errorMessage; QMessageBox::critical(this, tr("Error"), noteReader.errorMessage); waitCursor(false); return; } } else { ImportEnex enexReader; fullRestore = false; enexReader.import(fileNames[0]); QLOG_DEBUG() << "Back from import"; } // Finish by filtering & displaying the data updateSelectionCriteria(); if (fullRestore || fileNames[0].endsWith(".enex")) { tagTreeView->rebuildTagTreeNeeded = true; tagTreeView->loadData(); searchTreeView->loadData(); } notebookTreeView->rebuildNotebookTreeNeeded = true; notebookTreeView->loadData(); if (fullRestore) setMessage(tr("Database has been restored.")); else setMessage(tr("Notes have been imported.")); waitCursor(false); } //********************************************************* //* Set wait cursor //********************************************************* void NixNote::waitCursor(bool value) { Q_UNUSED(value); /* suppress warning of unused */ } // Show a message in the status bar void NixNote::setMessage(QString text, int timeout) { QLOG_TRACE_IN(); statusBar()->showMessage(text, timeout); QLOG_INFO() << text; QLOG_TRACE_OUT(); } // Notification slot that the sync has completed. void NixNote::notifySyncComplete() { updateSelectionCriteria(true); bool show; global.settings->beginGroup("Sync"); show = global.settings->value("enableNotification", false).toBool(); global.settings->endGroup(); if (!show) return; if (syncRunner.error) { showMessage(tr("Sync Error"), tr("Sync completed with errors.")); if (global.popupOnSyncError()) { QMessageBox::critical(0, tr("Sync Error"), tr("Sync error. See message log for details")); } } else if (global.showGoodSyncMessagesInTray) showMessage(tr("Sync Complete"), tr("Sync completed successfully.")); } void NixNote::showMessage(QString title, QString msg, int timeout) { if (global.systemNotifier() == "notify-send") { QProcess notifyProcess; QStringList arguments; arguments << title << msg << "-t" << QString::number(timeout); notifyProcess.start(QString("notify-send"), arguments, QIODevice::ReadWrite|QIODevice::Unbuffered); notifyProcess.waitForFinished(); QLOG_DEBUG() << "notify-send completed: " << notifyProcess.waitForFinished() << " Return Code: " << notifyProcess.state(); return; } trayIcon->showMessage(title, msg); } //******************************************************* //* Check for dirty notes and save the contents //******************************************************* void NixNote::saveContents() { for (int i=0; ibrowserList->size(); i++) { qint32 lid = tabWindow->browserList->at(i)->lid; // Check if the note is dirty if (tabWindow->browserList->at(i)->editor->isDirty) { tabWindow->browserList->at(i)->saveNoteContent(); noteTableView->refreshCell(lid, NOTE_TABLE_IS_DIRTY_POSITION, true); } } } //******************************************** //* Reset values back to the unset values //******************************************** void NixNote::resetView() { FilterCriteria *criteria = new FilterCriteria(); global.filterCriteria[global.filterPosition]->duplicate(*criteria); criteria->resetAttribute = true; criteria->resetDeletedOnly =true; criteria->resetFavorite = true; criteria->resetNotebook = true; criteria->resetSavedSearch = true; criteria->resetSearchString = true; criteria->resetTags = true; criteria->unsetFavorite(); criteria->unsetNotebook(); criteria->unsetDeletedOnly(); criteria->unsetTags(); criteria->unsetAttribute(); criteria->unsetSavedSearch(); criteria->unsetSearchString(); global.filterCriteria.append(criteria); global.filterPosition++; updateSelectionCriteria(); } //***************************** // Create a new note //***************************** void NixNote::newNote() { if (noteButton->property("currentNoteButton").toInt() != NewTextNote) { noteButton->setText(newNoteButton->text()); noteButton->setIcon(newNoteButton->icon()); noteButton->setProperty("currentNoteButton", NewTextNote); } QString newNoteBody = QString("")+ QString("")+ QString("
"); Note n; NotebookTable notebookTable(global.db); n.content = newNoteBody; n.title = tr("Untitled note"); QString uuid = QUuid::createUuid().toString(); uuid = uuid.mid(1); uuid.chop(1); n.guid = uuid; n.active = true; //QDateTime now; n.created = QDateTime::currentMSecsSinceEpoch(); n.updated = n.created; n.updateSequenceNum = 0; if (notebookTreeView->selectedItems().size() > 0) { NNotebookViewItem *item = (NNotebookViewItem*)notebookTreeView->selectedItems().at(0); qint32 lid = item->lid; // If we have a stack, we find the first notebook (in alphabetical order) for the new note. if (lid == 0) { QString stackName = notebookTreeView->selectedItems().at(0)->data(0, Qt::DisplayRole).toString(); QList notebooks; notebookTable.getStack(notebooks, stackName); QString priorName; Notebook book; if (notebooks.size() > 0) { for (int i=0; iitems = favoritesTreeView->selectedItems(); QString notebookGuid = notebookTable.getDefaultNotebookGuid(); for (int i=0; irecord.type == FavoritesRecord::LocalNotebook || item->record.type == FavoritesRecord::SynchronizedNotebook) { QString guid; notebookTable.getGuid(guid, item->record.target.toInt()); if (guid != "") { notebookGuid = guid; i=items.size(); } } } n.notebookGuid = notebookGuid; } if (global.full_username != "") { NoteAttributes na; if (n.attributes.isSet()) na = n.attributes; na.author = global.full_username; n.attributes = na; } NoteTable table(global.db); qint32 lid = table.add(0,n,true); FilterCriteria *criteria = new FilterCriteria(); global.filterCriteria[global.filterPosition]->duplicate(*criteria); criteria->unsetTags(); criteria->unsetSearchString(); criteria->setLid(lid); global.filterCriteria.append(criteria); global.filterPosition++; updateSelectionCriteria(); openNote(false); if (global.newNoteFocusToTitle()) { tabWindow->currentBrowser()->noteTitle.setFocus(); tabWindow->currentBrowser()->noteTitle.selectAll(); } else tabWindow->currentBrowser()->editor->setFocus(); } //********************************************** //* Create a new note in an external window. //********************************************** void NixNote::newExternalNote() { QString newNoteBody = QString("")+ QString("")+ QString("
"); Note n; NotebookTable notebookTable(global.db); n.content = newNoteBody; n.title = "Untitled note"; QString uuid = QUuid::createUuid().toString(); uuid = uuid.mid(1); uuid.chop(1); n.guid = uuid; n.active = true; //QDateTime now; n.created = QDateTime::currentMSecsSinceEpoch(); n.updated = n.created; n.updateSequenceNum = 0; if (notebookTreeView->selectedItems().size() == 0) { n.notebookGuid = notebookTable.getDefaultNotebookGuid(); } else { NNotebookViewItem *item = (NNotebookViewItem*)notebookTreeView->selectedItems().at(0); qint32 lid = item->lid; // If we have a stack, we find the first notebook (in alphabetical order) for the new note. if (lid == 0) { QString stackName = notebookTreeView->selectedItems().at(0)->data(0, Qt::DisplayRole).toString(); QList notebooks; notebookTable.getStack(notebooks, stackName); QString priorName; Notebook book; if (notebooks.size() > 0) { for (int i=0; iopenNote(lid, NTabWidget::ExternalWindow); updateSelectionCriteria(); // Find the position in the external window array & set the focus. int pos = -1; for (int i=0; iexternalList->size(); i++) { if (tabWindow->externalList->at(i)->browser->lid == lid) { pos = i; i = tabWindow->externalList->size(); } } // This shouldn't happen, but just in case... if (pos < 0) return; // Set the focus if (global.newNoteFocusToTitle()) { tabWindow->externalList->at(pos)->browser->noteTitle.setFocus(); tabWindow->externalList->at(pos)->browser->noteTitle.selectAll(); } else tabWindow->externalList->at(pos)->browser->editor->setFocus(); } // Slot for when notes have been deleted from the notes list. void NixNote::notesDeleted(QList) { updateSelectionCriteria(); } // Slot for when notes have been deleted from the notes list. void NixNote::notesRestored(QList) { updateSelectionCriteria(); } // Open the trunk web site void NixNote::openTrunk() { QDesktopServices::openUrl(QUrl("http://www.evernote.com/trunk")); } // Open Evernote support void NixNote::openEvernoteSupport() { QString server = "http://www.evernote.com/about/contact/support/"; if (global.accountsManager->getServer() == "app.yinxiang.com") server = "https://support.yinxiang.com"; QDesktopServices::openUrl(QUrl(server)); } //***************************************** //* Open the user account dialog box. //***************************************** void NixNote::openAccount() { AccountDialog dialog; dialog.exec(); } //******************************* //* Open Help/About dialog box. //******************************* void NixNote::openAbout() { AboutDialog about; about.exec(); } //******************************* //* Open About Qt dialog box. //******************************* void NixNote::openQtAbout() { QApplication::aboutQt(); } //******************************* //* Open the NixNote GitHub page. //******************************* void NixNote::openGithub() { QString server = "http://www.github.com/baumgarr/nixnote2"; QDesktopServices::openUrl(QUrl(server)); } //********************************* //* Open Shortcut Keys Dialog //********************************* void NixNote::openShortcutsDialog() { ShortcutDialog *dialog = new ShortcutDialog(); dialog->exec(); delete dialog; } //********************************************** //* Show/Hide the left display panel. //********************************************** void NixNote::toggleLeftPanel() { bool visible; if (leftPanel->isVisible()) { leftScroll->hide(); visible = false; } else { visible = true; leftScroll->show(); } global.settings->beginGroup("SaveState"); global.settings->setValue("leftPanelVisible", visible); global.settings->endGroup(); } //************************************************ //* Show/Hide the note table. //************************************************ void NixNote::toggleNoteList() { bool value; if (topRightWidget->isVisible()) { topRightWidget->hide(); value = false; } else { value = true; topRightWidget->show(); } global.settings->beginGroup("SaveState"); global.settings->setValue("noteListVisible", value); global.settings->endGroup(); } //**************************************************** //* Show/hide the note editor/tab window. //**************************************************** void NixNote::toggleTabWindow() { bool value; if (tabWindow->isVisible()) { tabWindow->hide(); value = false; } else { tabWindow->show(); value = true; } global.settings->beginGroup("SaveState"); global.settings->setValue("tabWindowVisible", value); global.settings->endGroup(); } //************************************** //* Toggle the main window toolbar. //************************************** void NixNote::toggleToolbar() { if (toolBar->isVisible()) toolBar->hide(); else toolBar->show(); } //***************************************** //* Show/hide the window statusbar. //***************************************** void NixNote::toggleStatusbar() { if (statusBar()->isVisible()) statusBar()->hide(); else statusBar()->show(); global.settings->beginGroup("saveState"); global.settings->setValue("statusBar", statusBar()->isVisible()); global.settings->endGroup(); } //********************************************** //* View the current note's history. //********************************************** void NixNote::viewNoteHistory() { this->saveContents(); statusBar()->clearMessage(); qint32 lid = this->tabWindow->currentBrowser()->lid; NoteTable ntable(global.db); Note n; ntable.get(n,lid,false,false); if (n.updateSequenceNum.isSet() && n.updateSequenceNum == 0) { QMessageBox::information(0,tr("Unsynchronized Note"), tr("This note has never been synchronized with Evernote")); return; } if (!global.accountsManager->oauthTokenFound()) { QString consumerKey = "baumgarr-3523"; QString consumerSecret = "8d5ee175f8a5d3ec"; EvernoteOAuthDialog d(consumerKey, consumerSecret, global.server); d.setWindowTitle(tr("Log in to Evernote")); if(d.exec() != QDialog::Accepted) { QMessageBox::critical(0, tr("NixNote"), "Login failed.\n" + d.oauthError()); return; } QString token = QString("oauth_token=") +d.oauthResult().authenticationToken + QString("&oauth_token_secret=&edam_shard=")+d.oauthResult().shardId + QString("&edam_userId=") +QString::number(d.oauthResult().userId) + QString("&edam_expires=") +QString::number(d.oauthResult().expires) + QString("&edam_noteStoreUrl=") + d.oauthResult().noteStoreUrl + QString("&edam_webApiUrlPrefix=") +d.oauthResult().webApiUrlPrefix; global.accountsManager->setOAuthToken(token); } UserTable userTable(global.db); User user; userTable.getUser(user); bool normalUser = false; if (user.privilege == PrivilegeLevel::NORMAL) normalUser = true; NoteHistorySelect dialog; QString guid = ntable.getGuid(tabWindow->currentBrowser()->lid); QList versions; CommunicationManager comm(global.db); if (comm.enConnect()) { QList versions; NoteTable ntable(global.db); QString guid = ntable.getGuid(tabWindow->currentBrowser()->lid); if (!normalUser) comm.listNoteVersions(versions, guid); } dialog.loadData(versions); dialog.exec(); if (!dialog.importPressed) return; Note note; if (dialog.usn > 0 && !comm.getNoteVersion(note, guid, dialog.usn)) { QMessageBox mbox; mbox.setText(tr("Error retrieving note.")); mbox.setWindowTitle(tr("Error retrieving note")); mbox.exec(); return; } if (dialog.usn <= 0 && !comm.getNote(note, guid,true,true,true)) { QMessageBox mbox; mbox.setText(tr("Error retrieving note.")); mbox.setWindowTitle(tr("Error retrieving note")); mbox.exec(); return; } if (!dialog.replaceCurrentNote()) { note.updateSequenceNum = 0; note.active = true; QUuid uuid; QString newGuid = uuid.createUuid().toString().replace("{", "").replace("}", ""); note.guid = newGuid; QList resources; if (note.resources.isSet()) resources = note.resources; for (int i=0;icurrentBrowser()->setContent(newLid); QMessageBox::information(0,tr("Note Restored"), tr("A new copy has been restored.")); } else { ntable.expunge(lid); bool dirty = true; if (dialog.usn <=0) dirty=false; ntable.add(lid,note,dirty); tabWindow->currentBrowser()->setContent(0); tabWindow->currentBrowser()->setContent(lid); QMessageBox::information(0,tr("Note Restored"), tr("Note successfully restored.")); } updateSelectionCriteria(); setMessage(tr("Note restored")); } //**************************************** //* Search for text within a note //**************************************** void NixNote::findInNote() { tabWindow->currentBrowser()->findShortcut(); // if (!findReplaceWindow->isVisible()) { // findReplaceWindow->showFind(); // } else { // if (findReplaceWindow->findLine->hasFocus()) // findReplaceWindow->hide(); // else { // findReplaceWindow->showFind(); // findReplaceWindow->findLine->setFocus(); // findReplaceWindow->findLine->selectAll(); // } // } } //******************************************* //* Search for the next occurrence of text //* in a note. //******************************************* void NixNote::findNextInNote() { tabWindow->currentBrowser()->findNextInNote(); } //******************************************* //* Search for the previous occurrence of //* text in a note. //******************************************* void NixNote::findPrevInNote() { tabWindow->currentBrowser()->findPrevInNote(); } //******************************************* //* This just does a null find to reset the //* text in a note so nothing is highlighted. //* This is triggered when the find dialog //* box is hidden. //******************************************* void NixNote::findReplaceWindowHidden() { tabWindow->currentBrowser()->findReplaceWindowHidden(); } //************************************** //* Show find & replace dialog box. //************************************** void NixNote::findReplaceInNote() { tabWindow->currentBrowser()->findReplaceShortcut(); } //*************************************** //* Find/replace button pressed, so we //* need to highlight all the occurrences //* in a note. //*************************************** void NixNote::findReplaceInNotePressed() { tabWindow->currentBrowser()->findReplaceInNotePressed(); } //************************************************** //* Temporarily disable all note editing //************************************************** void NixNote::disableEditing() { global.disableEditing = !global.disableEditing; for (int i=0; ibrowserList->size(); i++) { NBrowserWindow *browser = tabWindow->browserList->at(i); browser->setReadOnly(global.disableEditing && browser->isReadOnly); } for (int i=0; iexternalList->size(); i++) { NBrowserWindow *browser = tabWindow->externalList->at(i)->browser; browser->setReadOnly(global.disableEditing && browser->isReadOnly); } } //************************************************* //* Replace All button pressed. //************************************************* void NixNote::findReplaceAllInNotePressed() { tabWindow->currentBrowser()->findReplaceAllInNotePressed(); } //************************************************************** //* This queries she shared memory segment at occasional //* intervals. This is useful for cross-program communication. //************************************************************** void NixNote::heartbeatTimerTriggered() { QByteArray data = global.sharedMemory->read(); if (data.startsWith("SYNCHRONIZE")) { QLOG_DEBUG() << "Sync requested by shared memory segment."; this->synchronize(); return; } if (data.startsWith("IMMEDIATE_SHUTDOWN")) { QLOG_ERROR() << "Immediate shutdown requested by shared memory segment."; this->closeNixNote(); return; } if (data.startsWith("SHOW_WINDOW")) { this->raise(); this->showMaximized(); return; } if (data.startsWith("QUERY:")) { QList results; QString query = data.mid(6); QLOG_DEBUG() << query; FilterCriteria filter; filter.setSearchString(query); FilterEngine engine; engine.filter(&filter, &results); QString xmlString; QXmlStreamWriter dom(&xmlString); dom.setAutoFormatting(true); dom.writeStartDocument(); dom.writeStartElement("response"); NoteTable ntable(global.db); for (int i=0; iwrite(xmlString); } if (data.startsWith("OPEN_NOTE:")) { QString number = data.mid(10); qint32 note = number.toInt(); NoteTable noteTable(global.db); if (noteTable.exists(note)) this->openExternalNote(note); } if (data.startsWith("NEW_NOTE")) { this->newExternalNote(); } if (data.startsWith("CMDLINE_QUERY:")) { QString xml = data.mid(14); CmdLineQuery query; query.unwrap(xml.trimmed()); QString tmpFile = global.fileManager.getTmpDirPath()+query.returnUuid+".txt"; FilterCriteria *filter = new FilterCriteria(); FilterEngine engine; filter->setSearchString(query.query); QList lids; engine.filter(filter, &lids); query.write(lids, tmpFile); } if (data.startsWith("DELETE_NOTE:")) { qint32 lid = data.mid(12).toInt(); NoteTable noteTable(global.db); noteTable.deleteNote(lid, true); updateSelectionCriteria(); } if (data.startsWith("EMAIL_NOTE:")) { QString xml = data.mid(11); EmailNote email; email.unwrap(xml); email.sendEmail(); } if (data.startsWith("ALTER_NOTE:")) { QString xml = data.mid(11); AlterNote alter; alter.unwrap(xml); alter.alterNote(); updateSelectionCriteria(); } if (data.startsWith("READ_NOTE:")) { QString xml = data.mid(10); ExtractNoteText data; data.unwrap(xml); NoteTable ntable(global.db); Note n; if (ntable.get(n, data.lid,false,false)) data.text = data.stripTags(n.content); else data.text=tr("Note not found."); QString reply = data.wrap(); CrossMemoryMapper responseMapper(data.returnUuid); if (!responseMapper.attach()) return; responseMapper.write(reply); responseMapper.detach(); } if (data.startsWith("SIGNAL_GUI:")) { QString cmd = data.mid(12); QLOG_DEBUG() << "COMMAND REQUESTED: " << cmd; if (cmd.startsWith("SYNCHRONIZE")) { this->synchronize(); } if (cmd.startsWith("SCREENSHOT")) { this->screenCapture(); } if (cmd.startsWith("SHUTDOWN")) { this->close(); } if (cmd.startsWith("SHOW")) { if (!isVisible()) this->toggleVisible(); this->raise(); this->activateWindow(); this->showNormal(); this->tabWindow->currentBrowser()->editor->setFocus(); } if (cmd.startsWith("NEW_NOTE")) { this->newNote(); if (!isVisible()) this->toggleVisible(); this->raise(); this->activateWindow(); this->showNormal(); this->tabWindow->currentBrowser()->editor->setFocus(); } if (cmd.startsWith("NEW_EXTERNAL_NOTE")) { this->newExternalNote(); this->raise(); this->activateWindow(); if (tabWindow->lastExternal != NULL) { tabWindow->lastExternal->activateWindow(); tabWindow->lastExternal->showNormal(); tabWindow->lastExternal->browser->editor->setFocus(); } } if (cmd.startsWith("OPEN_EXTERNAL_NOTE")) { cmd = cmd.mid(18); qint32 lid = cmd.toInt(); this->openExternalNote(lid); if (tabWindow->lastExternal != NULL) { tabWindow->lastExternal->activateWindow(); tabWindow->lastExternal->showNormal(); tabWindow->lastExternal->browser->editor->setFocus(); } return; } if (cmd.startsWith("OPEN_NOTE")) { bool newTab = false; if (!isVisible()) { this->toggleVisible(); } if (cmd.startsWith("OPEN_NOTE_NEW_TAB")) { newTab = true; cmd = cmd.mid(18); } else { cmd = cmd.mid(10); } qint32 lid = cmd.toInt(); QList lids; lids.append(lid); // First, find out if we're already viewing history. If we are we // chop off the end of the history & start a new one if (global.filterPosition+1 < global.filterCriteria.size()) { while (global.filterPosition+1 < global.filterCriteria.size()) delete global.filterCriteria.takeAt(global.filterCriteria.size()-1); } FilterCriteria *newFilter = new FilterCriteria(); global.filterCriteria.at(global.filterPosition)->duplicate(*newFilter); newFilter->setSelectedNotes(lids); newFilter->setLid(lid); global.filterCriteria.push_back(newFilter); global.filterPosition++; this->openNote(newTab); this->raise(); this->activateWindow(); this->showNormal(); this->tabWindow->currentBrowser()->editor->setFocus(); } } //free(buffer); // Fixes memory leak } // Open the dialog status dialog box. void NixNote::openDatabaseStatus() { DatabaseStatus dbstatus; dbstatus.exec(); } // Open the dialog status dialog box. void NixNote::openImportFolders() { WatchFolderDialog dialog; dialog.exec(); if (dialog.okClicked) { importManager->reset(); importManager->setup(); } } // Print the current note void NixNote::printNote() { tabWindow->currentBrowser()->fastPrint = false; tabWindow->currentBrowser()->printNote(); } // Print the current note void NixNote::emailNote() { tabWindow->currentBrowser()->emailNote(); } // Print the current note void NixNote::printPreviewNote() { tabWindow->currentBrowser()->printPreviewNote(); } // Print the current note void NixNote::fastPrintNote() { tabWindow->currentBrowser()->fastPrint = true; tabWindow->currentBrowser()->printNote(); } //*********************************************************** //* Toggle the window visibility. Used when closing to //* the tray. //************************************************************ void NixNote::toggleVisible() { if (minimizeToTray || closeToTray) { if (isMinimized() || !isVisible()) { setWindowState(Qt::WindowActive) ; this->show(); this->raise(); this->showNormal(); this->activateWindow(); this->setFocus(); return; } else { showMinimized(); this->setHidden(true); return; } } else { if (isMinimized()) { setWindowState(Qt::WindowActive); this->showNormal(); this->setFocus(); return; } else { this->showMinimized(); return; } } } // The tray icon was activated. If it was double clicked we restore the // gui. void NixNote::trayActivated(QSystemTrayIcon::ActivationReason reason) { int doNothing = 0; int showHide = 1; int newNote = 2; int newQuickNote = 3; int screenCapture = 4; if (reason == QSystemTrayIcon::DoubleClick) { global.settings->beginGroup("Appearance"); int value = global.settings->value("trayDoubleClickAction", -1).toInt(); global.settings->endGroup(); if (value == doNothing) return; if (value == showHide) toggleVisible(); if (value == newNote) { if (!isVisible()) toggleVisible(); this->newNote(); } if (value == newQuickNote) this->newExternalNote(); if (value == screenCapture) this->screenCapture(); } if (reason == QSystemTrayIcon::MiddleClick) { global.settings->beginGroup("Appearance"); int value = global.settings->value("trayMiddleClickAction", -1).toInt(); global.settings->endGroup(); if (value == doNothing) return; if (value == showHide) toggleVisible(); if (value == newNote) { if (!isVisible()) toggleVisible(); this->newNote(); } if (value == newQuickNote) this->newExternalNote(); if (value == screenCapture) this->screenCapture(); } if (reason == QSystemTrayIcon::Trigger) { global.settings->beginGroup("Appearance"); int value = global.settings->value("traySingleClickAction", -1).toInt(); global.settings->endGroup(); if (value == doNothing) return; if (value == showHide) toggleVisible(); if (value == newNote) { if (!isVisible()) toggleVisible(); this->newNote(); } if (value == newQuickNote) this->newExternalNote(); if (value == screenCapture) this->screenCapture(); } } //******************************************************* //* Event triggered when the window state is changing. //* Useful when hiding & restoring from the tray. //******************************************************* //void NixNote::changeEvent(QEvent *e) { // return QMainWindow::changeEvent(e); //} bool NixNote::event(QEvent *event) { if (event->type() == QEvent::WindowStateChange && isMinimized()) { if (minimizeToTray) { hide(); return false; } } if (event->type() == QEvent::Close) { if (closeToTray && isVisible()) { QLOG_DEBUG() << "overriding close event"; this->toggleVisible(); event->ignore(); return false; } } return QMainWindow::event(event); } //***************************************************** //* Open the Edit/Preferences dialog box. //***************************************************** void NixNote::openPreferences() { PreferencesDialog prefs; prefs.exec(); if (prefs.okButtonPressed) { setSyncTimer(); bool showTrayIcon = global.showTrayIcon(); setWindowIcon(global.getIconResource(":windowIcon")); trayIcon->setIcon(global.getIconResource(":trayIcon")); if (!showTrayIcon) { //trayIconBehavior(); if (!this->isVisible()) this->show(); trayIcon->setVisible(false); } else { trayIcon->setVisible(true); minimizeToTray = global.minimizeToTray(); closeToTray = global.closeToTray(); //trayIconBehavior(); } indexRunner.officeFound = global.synchronizeAttachments(); } global.setDebugLevel(); } //************************************************************** //* Set the automatic sync timer interval. //************************************************************** void NixNote::setSyncTimer() { global.settings->beginGroup("Sync"); bool automaticSync = global.settings->value("syncAutomatically", false).toBool(); int interval = global.settings->value("syncInterval", 15).toInt(); if (interval < 15) interval = 15; global.settings->endGroup(); syncTimer.blockSignals(true); syncTimer.stop(); syncTimer.blockSignals(false); if (!automaticSync) { return; } syncTimer.setInterval(60*1000*interval); syncTimer.blockSignals(true); syncTimer.start(); syncTimer.blockSignals(false); } //********************************************************************* //* Switch user account. //********************************************************************* void NixNote::switchUser() { QAction *userSwitch; QList checkedEntries; int currentAcctPos = 0; int newAcctPos = 0; for (int i=0; iuserAccountActions.size(); i++) { userSwitch = menuBar->userAccountActions[i]; int actionID = userSwitch->data().toInt(); if (actionID == global.accountsManager->currentId) currentAcctPos = i; else if (userSwitch->isChecked()) newAcctPos = i; if (userSwitch->isChecked()) { checkedEntries.append(i); } } // If nothing is checked, we recheck the old one or // if more than one is checked, we uncheck the old guy if(checkedEntries.size() == 0) { menuBar->blockSignals(true); menuBar->userAccountActions[currentAcctPos]->setChecked(true); menuBar->blockSignals(false); return; } if(checkedEntries.size() > 1) { menuBar->blockSignals(true); menuBar->userAccountActions[currentAcctPos]->setChecked(false); menuBar->blockSignals(false); global.accountsManager->currentId = menuBar->userAccountActions[newAcctPos]->data().toInt(); global.globalSettings->beginGroup("SaveState"); global.globalSettings->setValue("lastAccessedAccount", global.accountsManager->currentId); global.globalSettings->endGroup(); closeAction->trigger(); global.sharedMemory->detach(); QProcess::startDetached(QCoreApplication::applicationFilePath()); return; } } //********************************************************************* //* Add another user account. //********************************************************************* void NixNote::addAnotherUser() { AddUserAccountDialog dialog; dialog.exec(); if (!dialog.okPushed) return; QString name = dialog.newAccountName->text().trimmed(); int six = dialog.newAccountServer->currentIndex(); QString server = dialog.newAccountServer->itemData(six, Qt::UserRole).toString(); int newid = global.accountsManager->addId(-1, name, "", server); QAction *newAction = new QAction(menuBar); newAction->setText(tr("Switch to ") +name); newAction->setCheckable(true); newAction->setData(newid); menuBar->addUserAccount(newAction); connect(newAction, SIGNAL(triggered()), this, SLOT(switchUser())); } //********************************************************************* //* Edit a user account //********************************************************************* void NixNote::userMaintenance() { AccountMaintenanceDialog dialog(menuBar, this); dialog.exec(); } //********************************************************************* //* Show the note list in a wide view above the editor. //********************************************************************* void NixNote::viewNoteListWide() { menuBar->blockSignals(true); menuBar->viewNoteListNarrow->setChecked(false); menuBar->viewNoteListWide->setChecked(true); menuBar->blockSignals(false); saveNoteColumnPositions(); saveNoteColumnWidths(); noteTableView->saveColumnsVisible(); rightPanelSplitter->setOrientation(Qt::Vertical); global.listView = Global::ListViewWide; noteTableView->setColumnsVisible(); noteTableView->repositionColumns(); noteTableView->resizeColumns(); } //********************************************************************* //* Show the note list in a narrow view between the editor & left panel. //********************************************************************* void NixNote::viewNoteListNarrow() { menuBar->blockSignals(true); menuBar->viewNoteListWide->setChecked(false); menuBar->viewNoteListNarrow->setChecked(true); menuBar->blockSignals(false); saveNoteColumnPositions(); saveNoteColumnWidths(); noteTableView->saveColumnsVisible(); rightPanelSplitter->setOrientation(Qt::Horizontal); global.listView = Global::listViewNarrow; noteTableView->setColumnsVisible(); noteTableView->repositionColumns(); noteTableView->resizeColumns(); } // This is called via global.resourceWatcher when a resource // has been updated by an external program. The file name is the // resource file which starts with the lid. void NixNote::resourceExternallyUpdated(QString resourceFile) { // We do a remove of the watcher at the beginning and a // re-add at the end, because some applications don't actually // update an existing file, but delete & re-add it. The delete // causes NN to stop watching and any later saves are lost. // This re-add at the end hopefully fixes it. global.resourceWatcher->removePath(resourceFile); QString shortName = resourceFile; QString dba = global.fileManager.getDbaDirPath(); shortName.replace(dba, ""); int pos = shortName.indexOf("."); if (pos != -1) shortName = shortName.mid(0,pos); qint32 lid = shortName.toInt(); QFile file(resourceFile); file.open(QIODevice::ReadOnly); QByteArray ba = file.readAll(); file.close(); QByteArray newHash = QCryptographicHash::hash(ba, QCryptographicHash::Md5); ResourceTable resTable(global.db); QByteArray oldHash = resTable.getDataHash(lid); if (oldHash != newHash) { qint32 noteLid = resTable.getNoteLid(lid); resTable.updateResourceHash(lid, newHash); NoteTable noteTable(global.db); noteTable.updateEnmediaHash(noteLid, oldHash, newHash, true); tabWindow->updateResourceHash(noteLid, oldHash, newHash); } AttachmentIconBuilder icon; icon.buildIcon(lid,resourceFile); global.resourceWatcher->addPath(resourceFile); } //********************************************************************* //* Screen capture request. //********************************************************************* void NixNote::screenCapture() { if (noteButton->property("currentNoteButton").toInt() != NewScreenNote) { noteButton->setText(screenCaptureButton->text()); noteButton->setIcon(screenCaptureButton->icon()); noteButton->setProperty("currentNoteButton", NewScreenNote); } this->hide(); sleep(1); ScreenCapture sc; sc.exec(); QPixmap pix = sc.getSelection(); this->show(); ConfigStore cs(global.db); qint32 lid = cs.incrementLidCounter(); QCryptographicHash md5hash(QCryptographicHash::Md5); QByteArray data; QBuffer buffer(&data); buffer.open(QIODevice::WriteOnly); pix.save(&buffer, "PNG"); QByteArray hash = md5hash.hash(data, QCryptographicHash::Md5); // * Start setting up the new note Note newNote; newNote.guid = QString::number(lid); newNote.title = tr("Screen Capture"); NotebookTable bookTable(global.db); QString notebook; notebook = bookTable.getDefaultNotebookGuid(); newNote.notebookGuid = notebook; QString newNoteBody = QString("")+ QString("")+ QString(""); QString mime = "image/png"; QString enMedia =QString(""); newNoteBody.append(enMedia + QString("")); newNote.content = newNoteBody; newNote.active = true; newNote.created = QDateTime::currentMSecsSinceEpoch();; newNote.updated = newNote.created; newNote.updateSequenceNum = 0; NoteTable ntable(global.db); ntable.add(lid, newNote, true); QString noteGuid = ntable.getGuid(lid); qint32 noteLid = lid; lid = cs.incrementLidCounter(); // Start creating the new resource Resource newRes; Data d; d.body = data; d.bodyHash = hash; d.size = data.size(); newRes.mime = mime; ResourceAttributes attributes; attributes.attachment = false; newRes.active = true; newRes.guid = QString::number(lid); newRes.noteGuid = noteGuid; newRes.updateSequenceNum = 0; newRes.data = d; newRes.attributes = attributes; ResourceTable restable(global.db); restable.add(lid, newRes, true, noteLid); updateSelectionCriteria(); } // Reindex all notes & resources void NixNote::reindexDatabase() { int response = QMessageBox::question ( this, tr("Reindex Database"), tr("Reindex the entire database?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); if (response != QMessageBox::Yes) return; NoteTable ntable(global.db); ResourceTable rtable(global.db); rtable.reindexAllResources(); ntable.reindexAllNotes(); setMessage(tr("Notes will be reindexed.")); } // Open/Close selected notebooks void NixNote::openCloseNotebooks() { CloseNotebookDialog dialog; dialog.exec(); if (dialog.okPressed) { notebookTreeView->rebuildNotebookTreeNeeded = true; this->updateSelectionCriteria(); notebookTreeView->rebuildTree(); } } // Capture an image from the webcam and create a new note void NixNote::newWebcamNote() { if (!webcamPluginAvailable) { QMessageBox::critical(this, tr("Plugin Error"), tr("Webcam plugin not found or could not be loaded")); return; } webcamInterface->initialize(); if (noteButton->property("currentNoteButton") != NewWebcamNote) { noteButton->setText(newWebcamNoteButton->text()); noteButton->setIcon(newWebcamNoteButton->icon()); noteButton->setProperty("currentNoteButton", NewWebcamNote); } //WebcamCaptureDialog dialog; QMessageBox msgBox; msgBox.setText(tr("Unable to find webcam or capture image.")); msgBox.setWindowTitle(tr("Webcam Error")); webcamInterface->initialize(); // Check for error reading camera if (!webcamInterface->isWebcamReady()) { msgBox.exec(); return; } webcamInterface->exec(); if (!webcamInterface->okPressed()) { return; } QImage img; // Check for webcam error if (!webcamInterface->isWebcamReady() || !webcamInterface->getImage(img)) { msgBox.exec(); return; } //Start generating the new note Note newNote; NoteTable ntable(global.db); QByteArray data; QBuffer buffer(&data); buffer.open(QIODevice::WriteOnly); img.save(&buffer, "PNG"); ConfigStore cs(global.db); qint32 lid = cs.incrementLidCounter(); QCryptographicHash md5hash(QCryptographicHash::Md5); QByteArray hash = md5hash.hash(data, QCryptographicHash::Md5); // * Start setting up the new note newNote.guid = QString::number(lid); newNote.title = "Webcam Note"; NotebookTable notebookTable(global.db); if (notebookTreeView->selectedItems().size() == 0) { newNote.notebookGuid = notebookTable.getDefaultNotebookGuid(); } else { NNotebookViewItem *item = (NNotebookViewItem*)notebookTreeView->selectedItems().at(0); qint32 lid = item->lid; // If we have a stack, we find the first notebook (in alphabetical order) for the new note. if (lid == 0) { QString stackName = notebookTreeView->selectedItems().at(0)->data(0, Qt::DisplayRole).toString(); QList notebooks; notebookTable.getStack(notebooks, stackName); QString priorName; Notebook book; if (notebooks.size() > 0) { for (int i=0; i")+ QString("")+ QString(""); QString enMedia =QString(""); newNoteBody.append(enMedia + QString("")); newNote.content = newNoteBody; newNote.active = true; newNote.created = QDateTime::currentMSecsSinceEpoch();; newNote.updated = newNote.created; newNote.updateSequenceNum = 0; qint32 noteLid = lid; ntable.add(lid, newNote, true); QString noteGuid = ntable.getGuid(lid); lid = cs.incrementLidCounter(); // Start creating the new resource Resource newRes; Data d; ResourceAttributes attributes; d.body = data; d.bodyHash = hash; d.size = data.size(); newRes.mime = "image/png"; attributes.fileName = ""; attributes.attachment = false; newRes.active = true; newRes.guid = QString::number(lid); newRes.noteGuid = noteGuid; newRes.updateSequenceNum = 0; newRes.data = d; newRes.attributes = attributes; ResourceTable restable(global.db); restable.add(lid, newRes, true, noteLid); FilterCriteria *criteria = new FilterCriteria(); global.filterCriteria[global.filterPosition]->duplicate(*criteria); criteria->setLid(noteLid); global.filterCriteria.append(criteria); global.filterPosition++; openNote(false); updateSelectionCriteria(); if (global.newNoteFocusToTitle()) { tabWindow->currentBrowser()->noteTitle.setFocus(); tabWindow->currentBrowser()->noteTitle.selectAll(); } else tabWindow->currentBrowser()->editor->setFocus(); return; } // Reindex the current note void NixNote::reindexCurrentNote() { tabWindow->currentBrowser()->saveNoteContent(); NoteIndexer indexer(global.db); indexer.indexNote(tabWindow->currentBrowser()->lid); ResourceTable rtable(global.db); QList rlids; rtable.getResourceList(rlids, tabWindow->currentBrowser()->lid); for (int i=0; icurrentBrowser()->lid; QString typeDelete; QString msg; FilterCriteria *f = global.filterCriteria[global.filterPosition]; bool expunged = false; typeDelete = tr("Delete "); if (f->isDeletedOnlySet() && f->getDeletedOnly()) { typeDelete = tr("Permanently delete "); expunged = true; } msg = typeDelete + tr("this note?"); if (global.confirmDeletes()) { QMessageBox msgBox; msgBox.setWindowTitle(tr("Verify Delete")); msgBox.setText(msg); msgBox.setStandardButtons(QMessageBox::Yes|QMessageBox::No); msgBox.setIcon(QMessageBox::Question); msgBox.setDefaultButton(QMessageBox::Yes); int rc = msgBox.exec(); if (rc != QMessageBox::Yes) return; } NoteTable ntable(global.db); NSqlQuery sql(global.db); sql.prepare("Delete from filter where lid=:lid"); ntable.deleteNote(lid, true); if (expunged) ntable.expunge(lid); sql.bindValue(":lid", lid); sql.exec(); sql.finish(); delete global.cache[lid]; global.cache.remove(lid); QList lids; lids.append(lid); emit(notesDeleted(lids)); } // Duplicate the current note void NixNote::duplicateCurrentNote() { tabWindow->currentBrowser()->saveNoteContent(); qint32 oldLid = tabWindow->currentBrowser()->lid; qint32 newLid; NoteTable ntable(global.db); newLid = ntable.duplicateNote(oldLid); FilterCriteria *criteria = new FilterCriteria(); global.filterCriteria[global.filterPosition]->duplicate(*criteria); criteria->setLid(newLid); global.filterCriteria.append(criteria); global.filterPosition++; openNote(false); updateSelectionCriteria(); tabWindow->currentBrowser()->editor->setFocus(); } // "Pin" the current note. This makes sure it appears in all searches void NixNote::pinCurrentNote() { qint32 lid = tabWindow->currentBrowser()->lid; NoteTable ntable(global.db); ntable.pinNote(lid, true); updateSelectionCriteria(); } // "Unpin" the current note so it doesn't appear in every search void NixNote::unpinCurrentNote() { qint32 lid = tabWindow->currentBrowser()->lid; NoteTable ntable(global.db); ntable.pinNote(lid, false); updateSelectionCriteria(); } // Run the spell checker void NixNote::spellCheckCurrentNote() { tabWindow->currentBrowser()->spellCheckPressed(); } // Pause/unpause indexing. void NixNote::pauseIndexing(bool value) { if (menuBar->pauseIndexingAction->isChecked()) { indexRunner.pauseIndexing = true; return; } indexRunner.pauseIndexing = value; } // View the mesasge log. These same messages show up in a terminal void NixNote::openMessageLog() { LogViewer viewer; viewer.exec(); } // Note button has been pressed, so we need to know what type of note to create void NixNote::noteButtonClicked() { if (noteButton->property("currentNoteButton").toInt() == NewTextNote) newNote(); if (noteButton->property("currentNoteButton").toInt() == NewWebcamNote) newWebcamNote(); if (noteButton->property("currentNoteButton").toInt() == NewScreenNote) screenCapture(); } // Show a url to the debugging log void NixNote::showDesktopUrl(const QUrl &url) { QLOG_DEBUG() << url.toString(); } // Reload the icons after a theme switch void NixNote::reloadIcons() { QString newThemeName = ""; global.settings->beginGroup("Appearance"); QString currentTheme = global.settings->value("themeName", "").toString(); global.settings->endGroup(); QAction *themeSwitch; QList checkedEntries; int currentThemePos = 0; int newThemePos = 0; for (int i=0; ithemeActions.size(); i++) { themeSwitch = menuBar->themeActions[i]; QString checkedTheme = themeSwitch->data().toString(); if (checkedTheme == currentTheme) currentThemePos = i; else { if (themeSwitch->isChecked()) newThemePos = i; } if (themeSwitch->isChecked()) { checkedEntries.append(i); } } // If nothing is checked, we recheck the old one or // if more than one is checked, we uncheck the old guy if(checkedEntries.size() == 0) { menuBar->blockSignals(true); menuBar->themeActions[currentThemePos]->setChecked(true); menuBar->blockSignals(false); } if(checkedEntries.size() > 0) { menuBar->blockSignals(true); menuBar->themeActions[currentThemePos]->setChecked(false); menuBar->blockSignals(false); global.settings->beginGroup("Appearance"); newThemeName = menuBar->themeActions[newThemePos]->data().toString(); if (newThemeName != "") global.settings->setValue("themeName", newThemeName); else global.settings->remove("themeName"); global.settings->endGroup(); global.loadTheme(global.resourceList,global.colorList,newThemeName); } setWindowIcon(QIcon(global.getIconResource(":windowIcon"))); leftArrowButton->setIcon(global.getIconResource(":leftArrowIcon")); rightArrowButton->setIcon(global.getIconResource(":rightArrowIcon")); homeButton->setIcon(global.getIconResource(":homeIcon")); syncButton->setIcon(global.getIconResource(":synchronizeIcon")); printNoteButton->setIcon(global.getIconResource(":printerIcon")); newNoteButton->setIcon(global.getIconResource(":newNoteIcon")); newWebcamNoteButton->setIcon(global.getIconResource(":webcamIcon")); deleteNoteButton->setIcon(global.getIconResource(":deleteIcon")); usageButton->setIcon(global.getIconResource(":usageIcon")); trayIcon->setIcon(global.getIconResource(":trayIcon")); screenCaptureButton->setIcon(global.getIconResource(":screenCaptureIcon")); trunkButton->setIcon(global.getIconResource(":trunkIcon")); emailButton->setIcon(global.getIconResource(":emailIcon")); notebookTreeView->reloadIcons(); tagTreeView->reloadIcons(); attributeTree->reloadIcons(); trashTree->reloadIcons(); searchTreeView->reloadIcons(); searchText->reloadIcons(); favoritesTreeView->reloadIcons(); tabWindow->reloadIcons(); tabWindow->changeEditorStyle(); QString themeInformation = global.getResourceFileName(global.resourceList, ":themeInformation"); menuBar->themeInformationAction->setVisible(true); if (themeInformation.startsWith("http://", Qt::CaseInsensitive)) return; if (themeInformation.startsWith("https://", Qt::CaseInsensitive)) return; QFile f(themeInformation); if (!f.exists() && newThemeName != "") menuBar->themeInformationAction->setVisible(false); } // Show/Hide the favorites tree on the left side void NixNote::toggleFavoritesTree() { bool visible = true; if (favoritesTreeView->isVisible()) visible = false; global.settings->beginGroup("SaveState"); global.settings->setValue("favoritesTreeVisible", visible); global.settings->endGroup(); favoritesTreeView->setVisible(visible); checkLeftPanelSeparators(); } // Show/Hide the notebook tree on the left side void NixNote::toggleNotebookTree() { bool visible = true; if (notebookTreeView->isVisible()) visible = false; global.settings->beginGroup("SaveState"); global.settings->setValue("notebookTreeVisible", visible); global.settings->endGroup(); notebookTreeView->setVisible(visible); checkLeftPanelSeparators(); } // Show/Hide the tag tree on the left side void NixNote::toggleTagTree() { bool visible = true; if (tagTreeView->isVisible()) visible = false; global.settings->beginGroup("SaveState"); global.settings->setValue("tagTreeVisible", visible); global.settings->endGroup(); tagTreeView->setVisible(visible); checkLeftPanelSeparators(); } // Show/Hide the saved search tree on the left side void NixNote::toggleSavedSearchTree() { bool visible = true; if (searchTreeView->isVisible()) visible = false; global.settings->beginGroup("SaveState"); global.settings->setValue("savedSearchTreeVisible", visible); global.settings->endGroup(); searchTreeView->setVisible(visible); checkLeftPanelSeparators(); } // Show/Hide the attributes tree on the left side void NixNote::toggleAttributesTree() { bool visible = true; if (attributeTree->isVisible()) visible = false; global.settings->beginGroup("SaveState"); global.settings->setValue("attributeTreeVisible", visible); global.settings->endGroup(); attributeTree->setVisible(visible); checkLeftPanelSeparators(); } // Show/Hide the trash tree on the left side void NixNote::toggleTrashTree() { bool visible = true; if (trashTree->isVisible()) visible = false; global.settings->beginGroup("SaveState"); global.settings->setValue("trashTreeVisible", visible); global.settings->endGroup(); trashTree->setVisible(visible); checkLeftPanelSeparators(); } // This function will show/hide all of the separators between the trees on the left side // of the gui. void NixNote::checkLeftPanelSeparators() { bool s1 = false; bool s2 = false; bool s3 = false; bool s4 = false; bool s5 = false; bool tags; bool notebooks; bool favorites; bool searches; bool attributes; bool trash; global.settings->beginGroup("SaveState"); favorites = global.settings->value("favoritesTreeVisible", true).toBool(); notebooks = global.settings->value("notebookTreeVisible",true).toBool(); tags = global.settings->value("tagTreeVisible", true).toBool(); searches = global.settings->value("savedSearchTreeVisible", true).toBool(); attributes = global.settings->value("attributeTreeVisible", true).toBool(); trash = global.settings->value("trashTreeVisible", true).toBool(); global.settings->endGroup(); if (favorites && (notebooks || tags || searches || attributes || trash)) { s1=true; } if (notebooks && (tags || searches || attributes || trash)) { s2=true; } if (tags && (searches || attributes || trash)) { s3=true; } if (searches && (attributes || trash)) { s4=true; } if (attributes && trash) { s5=true; } leftSeparator1->setVisible(s1); leftSeparator2->setVisible(s2); leftSeparator3->setVisible(s3); leftseparator4->setVisible(s4); leftSeparator5->setVisible(s5); } // Load any shortcut keys void NixNote::setupShortcut(QShortcut *action, QString text) { if (!global.shortcutKeys->containsAction(&text)) return; QKeySequence key(global.shortcutKeys->getShortcut(&text)); action->setKey(key); } // Make sure the toolbar checkbox & the menu match. void NixNote::toolbarVisibilityChanged() { menuBar->viewToolbar->blockSignals(true); menuBar->viewToolbar->setChecked(toolBar->isVisible()); menuBar->viewToolbar->blockSignals(false); } //Turn on presentation mode void NixNote::presentationModeOn() { this->leftScroll->hide(); // this->toggleLeftPanel(); // this->toggleLeftPanel(); this->menuBar->setVisible(false); this->topRightWidget->setVisible(false); this->toolBar->setVisible(false); this->statusBar()->setVisible(false); this->showFullScreen(); global.isFullscreen=true; tabWindow->currentBrowser()->buttonBar->hide(); FaderDialog *d = new FaderDialog(); d->setText(tr("Press ESC to exit.")); d->show(); } //Turn off presentation mode void NixNote::presentationModeOff() { if (!this->isFullScreen()) return; if (menuBar->viewLeftPanel->isChecked()) leftScroll->show(); if (menuBar->viewNoteList->isChecked()) topRightWidget->show(); if (menuBar->viewStatusbar->isChecked()) statusBar()->show(); menuBar->show(); toolBar->show(); global.isFullscreen=false; if (!global.autoHideEditorToolbar) tabWindow->currentBrowser()->buttonBar->show(); this->showMaximized(); } // Check to see if plugins are avaialble and they match // the correct version expected. Load them if possible. void NixNote::loadPlugins() { webcamPluginAvailable = false; QStringList dirList; dirList.append(global.fileManager.getProgramDirPath("")); dirList.append(global.fileManager.getProgramDirPath("")+"/plugins"); dirList.append("/usr/lib/nixnote2/"); dirList.append("/usr/local/lib/nixnote2/"); dirList.append("/usr/local/lib"); dirList.append("/usr/lib"); // Start loading plugins for (int i=0; i(plugin); if (webcamInterface) { webcamPluginAvailable = true; } } else { QLOG_ERROR() << tr("Error loading Webcam plugin: ") << pluginLoader.errorString(); } } // The Hunspell plugin isn't actually used here. We just use this as a // check to be sure that the menu should be available. if (fileName == "libhunspellplugin.so") { if (plugin) { HunspellInterface *hunspellInterface; hunspellInterface = qobject_cast(plugin); if (hunspellInterface) { hunspellPluginAvailable = true; } delete hunspellInterface; } else { QLOG_ERROR() << tr("Error loading Hunspell plugin: ") << pluginLoader.errorString(); } } } } } // Export selected notes as PDF files. void NixNote::exportAsPdf() { QList lids; noteTableView->getSelectedLids(lids); if (pdfExportWindow == NULL) { pdfExportWindow = new QWebView(); connect(pdfExportWindow, SIGNAL(loadFinished(bool)), this, SLOT(exportAsPdfReady(bool))); } if (lids.size() <= 0) { QList lids; noteTableView->getSelectedLids(lids); QString file = QFileDialog::getSaveFileName(0,tr("PDF Export"), "","*.pdf"); if (file == "") return; QPrinter printer; printer.setOutputFormat(QPrinter::PdfFormat); printer.setResolution(QPrinter::HighResolution); printer.setPaperSize(QPrinter::A4); printer.setOutputFileName(file); printer.setDocName(tabWindow->currentBrowser()->noteTitle.text()); tabWindow->currentBrowser()->editor->print(&printer); QMessageBox::information(0, tr("NixNote"), tr("Export complete")); return; } NoteTable noteTable(global.db); QByteArray content; content.clear(); NoteFormatter formatter; QProgressDialog *progress = new QProgressDialog(0); progress->setMinimum(0); progress->setWindowTitle(tr("Exporting Notes as PDF")); progress->setLabelText(tr("Exporting notes as PDF")); progress->setMaximum(lids.size()); progress->setVisible(true); progress->setWindowModality(Qt::ApplicationModal); progress->setCancelButton(0); progress->show(); for (int i=0; i"+n.title+""); content.append(formatter.rebuildNoteHTML()); if (i

"); progress->setValue(i); } progress->hide(); delete progress; pdfExportWindow->setHtml(content); return; } // Slot called when notes that were exported as PDF files are ready to be printed void NixNote::exportAsPdfReady(bool) { QString file = QFileDialog::getSaveFileName(0,tr("PDF Export"), "","*.pdf"); if (file == "") return; QPrinter printer; printer.setOutputFormat(QPrinter::PdfFormat); printer.setResolution(QPrinter::HighResolution); printer.setPaperSize(QPrinter::A4); printer.setOutputFileName(file); pdfExportWindow->print(&printer); QMessageBox::information(0, tr("NixNote"), tr("Export complete")); } nixnote2-2.0.2/nixnote.h000066400000000000000000000221621315604104400151170ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NIXNOTE_H #define NIXNOTE_H #include #include #include #include #include #include #include #include #include #include "filters/remotequery.h" #include "watcher/filewatchermanager.h" #include "gui/ntabwidget.h" #include "gui/lineedit.h" #include "sql/databaseconnection.h" #include "gui/ntableview.h" #include "gui/ntagview.h" #include "gui/nsearchview.h" #include "threads/syncrunner.h" #include "threads/indexrunner.h" #include "gui/widgetpanel.h" #include "gui/nnotebookview.h" #include "gui/favoritesview.h" #include "gui/nmainmenubar.h" #include "gui/traymenu.h" #include "gui/nattributetree.h" #include "gui/ntrashtree.h" #include "dialog/accountdialog.h" #include "threads/counterrunner.h" //#include "oauth/oauthwindow.h" #include "html/thumbnailer.h" #include "reminders/remindermanager.h" #include "plugins/webcam/webcaminterface.h" #include "plugins/hunspell/hunspellinterface.h" //**************************************** //* This is the main NixNote class that //* starts everything else. It is called //* by main() //**************************************** // Forward declare classes used later class DatabaseConnection; class NMainMenuBar; class NixNote; class SyncRunner; class IndexRunner; class CounterRunner; class NTabWidget; class Thumbnailer; class NTableView; class SyncRunner; // Define the actual class class NixNote : public QMainWindow { Q_OBJECT private: enum NewNoteButtonAction { NewTextNote=1, NewWebcamNote=2, NewScreenNote=3 }; QWebView *pdfExportWindow; DatabaseConnection *db; // The database connection NTableView *noteTableView; NSearchView *searchTreeView; NNotebookView *notebookTreeView; FavoritesView *favoritesTreeView; QLabel *leftSeparator1; QLabel *leftSeparator2; QLabel *leftSeparator3; QLabel *leftseparator4; QLabel *leftSeparator5; NTrashTree *trashTree; NTagView *tagTreeView; QSplitter *mainSplitter; QSplitter *leftPanelSplitter; WidgetPanel *leftPanel; QSplitter *rightPanelSplitter; QScrollArea *leftScroll; QToolButton *noteButton; QWidget *topRightWidget; QVBoxLayout *topRightLayout; NAttributeTree *attributeTree; bool finalSync; QSystemTrayIcon *trayIcon; QString saveLastPath; // Last path viewed in the restore dialog FileWatcherManager *importManager; // OAuthWindow *oauthWindow; Thumbnailer *hammer; QTimer indexTimer; // Tool & menu bar NMainMenuBar *menuBar; TrayMenu *trayIconContextMenu; QToolBar *toolBar; QAction *leftArrowButton; QAction *rightArrowButton; QAction *homeButton; QAction *syncButton; QAction *printNoteButton; QAction *deleteNoteButton; QAction *newNoteButton; QAction *newWebcamNoteButton; QAction *screenCaptureButton; QAction *newExternalNoteButton; QAction *trunkButton; QAction *usageButton; QAction *emailButton; QAction *toolsAccountAction; QAction *showAction; //QAction *minimizeToTrayAction; //QAction *closeToTrayAction; QAction *closeAction; bool minimizeToTray; bool closeToTray; bool closeFlag; bool unhidingWindow; // Sync Button rotate QTimer syncButtonTimer; QTimer syncTimer; QList syncIcons; unsigned int synchronizeIconAngle; QTimer heartbeatTimer; // Timer to check shared memory for other instance commands. void setupGui(); void setupNoteList(); void setupSearchTree(); void setupTagTree(); void setupAttributeTree(); void setupFavoritesTree(); void setupTrashTree(); void setupSynchronizedNotebookTree(); void setupTabWindow(); void waitCursor(bool value); void saveContents(); void saveNoteColumnPositions(); void saveNoteColumnWidths(); void checkLeftPanelSeparators(); QSplashScreen *splashScreen; RemoteQuery *remoteQuery; QShortcut *focusSearchShortcut; QShortcut *fileSaveShortcut; QShortcut *focusNotebookShortcut; QShortcut *focusFontShortcut; QShortcut *focusFontSizeShortcut; QShortcut *focusTitleShortcut; QShortcut *focusTagShortcut; QShortcut *focusNoteShortcut; QShortcut *focusUrlShortcut; QShortcut *focusAuthorShortcut; QShortcut *copyNoteUrlShortcut; QShortcut *nextTabShortcut; QShortcut *prevTabShortcut; QShortcut *closeTabShortcut; QShortcut *downNoteShortcut; QShortcut *upNoteShortcut; void setupShortcut(QShortcut *shortcut, QString keySequence); // Plugins void loadPlugins(); bool webcamPluginAvailable; WebCamInterface *webcamInterface; public: NixNote(QWidget *parent = 0); // Constructor ~NixNote(); //Destructor SyncRunner syncRunner; QThread syncThread; QThread indexThread; QThread counterThread; IndexRunner indexRunner; CounterRunner counterRunner; void closeEvent(QCloseEvent *event); //bool notify(QObject* receiver, QEvent* event); bool event(QEvent *event); LineEdit *searchText; NTabWidget *tabWindow; bool hunspellPluginAvailable; public slots: void closeNixNote(); void closeShortcut(); void synchronize(); void syncTimerExpired(); void disconnect(); void updateSyncButton(); void syncButtonReset(); void updateSelectionCriteria(bool afterSync=false); void leftButtonTriggered(); void rightButtonTriggered(); void openNote(bool newWindow); void noteImport(); void noteExport(); void databaseRestore(bool fullRestore=true); void databaseBackup(bool backup=true); void resetView(); void newNote(); void noteButtonClicked(); void newExternalNote(); void disableEditing(); void setSyncTimer(); void notesDeleted(QList lid); void reindexCurrentNote(); void openTrunk(); void openAccount(); void openDatabaseStatus(); void openAbout(); void openShortcutsDialog(); void openImportFolders(); void openQtAbout(); void setMessage(QString msg, int timeout=15000); void toggleLeftPanel(); void toggleFavoritesTree(); void toggleNotebookTree(); void toggleTagTree(); void toggleSavedSearchTree(); void toggleAttributesTree(); void toggleTrashTree(); void toggleNoteList(); void toggleTabWindow(); void toggleToolbar(); void toggleStatusbar(); void findReplaceInNote(); void findReplaceAllInNotePressed(); void findReplaceInNotePressed(); void findInNote(); void findNextInNote(); void findPrevInNote(); void viewNoteHistory(); void findReplaceWindowHidden(); void checkReadOnlyNotebook(); void heartbeatTimerTriggered(); void notesRestored(QList); void emailNote(); void printNote(); void printPreviewNote(); void fastPrintNote(); void trayActivated(QSystemTrayIcon::ActivationReason reason); void toggleVisible(); //void trayIconBehavior(); // void changeEvent(QEvent *e); void openPreferences(); void notifySyncComplete(); void addAnotherUser(); void switchUser(); void userMaintenance(); void viewNoteListWide(); void viewNoteListNarrow(); void resourceExternallyUpdated(QString resource); void screenCapture(); void reindexDatabase(); void noteSynchronized(qint32 lid, bool value); void indexThreadStarted(); void syncThreadStarted(); void counterThreadStarted(); void openCloseNotebooks(); void newWebcamNote(); void deleteCurrentNote(); void duplicateCurrentNote(); void pinCurrentNote(); void unpinCurrentNote(); void spellCheckCurrentNote(); void openExternalNote(qint32 lid); void pauseIndexing(bool value=true); void openEvernoteSupport(); void openGithub(); void openMessageLog(); void showDesktopUrl(const QUrl &url); void reloadIcons(); void showMessage(QString title, QString msg, int timeout=10000); void toolbarVisibilityChanged(); void presentationModeOn(); void presentationModeOff(); void indexFinished(bool finished); void exportAsPdf(); void exportAsPdfReady(bool); void saveOnExit(); signals: void syncRequested(); void updateCounts(); }; #endif // NIXNOTE_H nixnote2-2.0.2/nixnote2.desktop000066400000000000000000000005501315604104400164200ustar00rootroot00000000000000[Desktop Entry] Name=NixNote2 Comment=Use with Evernote to remember everything GenericName=Evernote-clone Exec=nixnote2 Icon=nixnote2 StartupNotify=true Terminal=false Type=Application Categories=Qt;Utility;Network; Keywords=NixNote2;Text;Evernote;note; Actions=NewNote; [Desktop Action NewNote] Name=New Note Name[zh_CN]=新建笔记 Exec=nixnote2 --newNote nixnote2-2.0.2/oauth/000077500000000000000000000000001315604104400143775ustar00rootroot00000000000000nixnote2-2.0.2/oauth/oauthtokenizer.cpp000066400000000000000000000053471315604104400201670ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "oauthtokenizer.h" #include OAuthTokenizer::OAuthTokenizer(QObject *parent) : QObject(parent) { } void OAuthTokenizer::tokenize(QString decoded) { QStringList tokens; for (;decoded.length()>0;) { int i=decoded.indexOf("&"); if (i != -1) { tokens.append(decoded.left(i)); decoded=decoded.right(decoded.length()-i-1); } else { tokens.append(decoded); decoded=""; } } QString oauth_tokenString = "oauth_token="; QString edam_shardString = "edam_shard="; QString edam_userIdString = "edam_userid="; QString edam_expiresString = "edam_expires="; QString edam_noteStoreUrlString ="edam_notestoreurl="; QString edam_webApiUrlPrefixString = "edam_webapiurlprefix="; oauth_token = ""; edam_shard = ""; edam_userId = ""; edam_expires = ""; edam_noteStoreUrl = ""; edam_webApiUrlPrefix = ""; for (int i=0; i class OAuthTokenizer : public QObject { Q_OBJECT public: explicit OAuthTokenizer(QObject *parent = 0); QString oauth_token; QString edam_shard; QString edam_userId; QString edam_expires; QString edam_noteStoreUrl; QString edam_webApiUrlPrefix; void tokenize(QString decoded); signals: public slots: }; #endif // OAUTHTOKENIZER_H nixnote2-2.0.2/oauth/oauthwindow.cpp000066400000000000000000000177301315604104400174630ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "oauthwindow.h" #include #include #include #include #include #include #include #include #include #include "global.h" extern Global global; OAuthWindow::OAuthWindow(QMainWindow *parent) : QMainWindow(parent) { tempAuthPage = new QWebView(); userLoginPage = new QWebView(); authRequestPage = new QWebView(); consumerKey = "baumgarr-3523"; consumerSecret = "8d5ee175f8a5d3ec"; urlBase = "https://" +global.server; requestTokenUrl = urlBase + "/oauth"; accessTokenUrl = urlBase + "/oauth"; authorizationUrlBase = urlBase + "/OAuth.action"; callbackUrl = "index.jsp?action=callbackReturn"; struct timeb tmb; ftime(&tmb); int time = tmb.time; int millis = tmb.millitm; // Create the URLs needed for authentication with Evernote temporaryCredUrl = "https://"+global.server + "/oauth?oauth_consumer_key=" +consumerKey + "&oauth_signature=" + consumerSecret + "%26&oauth_signature_method=PLAINTEXT&oauth_timestamp="+QString::number(time)+ "&oauth_nonce="+QString::number(millis) +"&oauth_callback=nnoauth"; permanentCredUrl = "https://"+global.server + "/oauth?oauth_consumer_key=" +consumerKey + "&oauth_signature=" + consumerSecret + "%26&oauth_signature_method=PLAINTEXT&oauth_timestamp="+QString::number(time)+ "&oauth_nonce="+QString::number(millis) +"&oauth_token="; // Build the window setWindowTitle(tr("Please Grant NixNote Access")); setWindowIcon(global.getIconResource(":passwordIcon")); //setLayout(&grid); //grid.addWidget(userLoginPage); setCentralWidget(userLoginPage); error = false; errorMessage = ""; // Check that SSL sockets are supported if (!QSslSocket::supportsSsl()) { errorMessage = tr("SSL Support not found. Aborting connection"); error = true; close(); return; } // Turn on TLS (sometimes it isn't on by default) QSslConfiguration config = QSslConfiguration::defaultConfiguration(); #if QT_VERSION < 0x050000 config.setProtocol(QSsl::TlsV1); #else config.setProtocol(QSsl::TlsV1_0); #endif config.setProtocol(QSsl::SslV3); QSslConfiguration::setDefaultConfiguration(config); // Since this page loads async, we need flags to be sure we don't load something twice authTokenReceived = false; userLoginPageLoaded = false; // Load the temporary URL to start the authentication procesess. When // finished, this QWebView will contain the URL to start the // authentication process. QUrl tu(temporaryCredUrl); connect(tempAuthPage, SIGNAL(loadFinished(bool)), this, SLOT(tempAuthPageLoaded(bool))); connect(tempAuthPage->page()->networkAccessManager(),SIGNAL(finished(QNetworkReply*)), this, SLOT(tempAuthPageReply(QNetworkReply*))); tempAuthPage->load(tu); } void OAuthWindow::reset() { authTokenReceived = false; userLoginPageLoaded = false; error = false; errorMessage = ""; // Load the temporary URL to start the authentication procesess. When // finished, this QWebView will contain the URL to start the // authentication process. QUrl tu(temporaryCredUrl); connect(tempAuthPage, SIGNAL(loadFinished(bool)), this, SLOT(tempAuthPageLoaded(bool))); connect(tempAuthPage->page()->networkAccessManager(),SIGNAL(finished(QNetworkReply*)), this, SLOT(tempAuthPageReply(QNetworkReply*))); tempAuthPage->load(tu); } void OAuthWindow::tempAuthPageLoaded(bool rc) { QLOG_DEBUG() << "Temporary credentials received from Evernote"; if (!rc) { errorMessage = tr("Error receiving temporary credentials"); error = true; QWebFrame *mainFrame = tempAuthPage->page()->mainFrame(); QString contents = mainFrame->toHtml(); QLOG_DEBUG() << "Reply contents:" << contents; emit closed(); close(); return; } QWebFrame *mainFrame = tempAuthPage->page()->mainFrame(); QString contents = mainFrame->toPlainText(); // QLOG_DEBUG() << "Temporary Cred Contents: " << contents; int index = contents.indexOf("&oauth_token_secret"); contents = contents.left(index); QUrl accessUrl(urlBase+"/OAuth.action?" +contents); connect(userLoginPage->page()->networkAccessManager(),SIGNAL(finished(QNetworkReply*)),this,SLOT(userLoginReply(QNetworkReply*))); userLoginPage->load(accessUrl); //grid.addWidget(userLoginPage); } void OAuthWindow::tempAuthPageReply(QNetworkReply* reply) { QLOG_DEBUG() << "error: " << reply->error(); if (reply->error() != QNetworkReply::NoError) { int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); QLOG_DEBUG() << "status:" << statusCode; // QLOG_DEBUG() << "error: " << reply->error(); return; } } void OAuthWindow::permanentCredentialsReceived(bool rc) { if (authTokenReceived) return; QWebFrame *mainFrame; mainFrame = authRequestPage->page()->mainFrame(); QString contents = mainFrame->toPlainText(); if (!rc) { errorMessage = tr("Error receiving permanent credentials"); QLOG_DEBUG() << "Bad return code while receiveng permanent credentials"; error = true; emit closed(); close(); } if (contents.startsWith("oauth_token=S%3D")) { QLOG_DEBUG() << "Permanent Auth Response: " << contents; QLOG_DEBUG() << "Permanent credentials received received from Evernote"; authTokenReceived = true; QLOG_DEBUG() << "Good authorization token received."; QString decoded; QByteArray enc; enc.append(contents); decoded = QUrl::fromEncoded(enc).toString(); response = decoded; userLoginPage->disconnect(this); tempAuthPage->disconnect(this); authRequestPage->disconnect(this); error = false; errorMessage = ""; emit closed(); close(); } } void OAuthWindow::userLoginReply(QNetworkReply *reply) { if (userLoginPageLoaded) return; // QLOG_DEBUG() << "Authentication reply received from Evernote"; // QLOG_DEBUG() << "error: " << reply->error(); QString searchReq = "?oauth_token="; // QLOG_DEBUG() << "Reply:" << reply->url().toString(); int pos = reply->url().toString().indexOf(searchReq); if (pos != -1) { QString token = reply->url().toString(); token = token.mid(pos+searchReq.length()); if (not token.contains("auth_verifier")) { errorMessage = tr("Error receiving authorization"); error = true; return; } if (reply->isFinished()) { QLOG_DEBUG() << "Loading URL"; QLOG_DEBUG() << "Permanent URL: " << permanentCredUrl; QLOG_DEBUG() << "Token: " << token; connect(authRequestPage, SIGNAL(loadFinished(bool)), this, SLOT(permanentCredentialsReceived(bool))); authRequestPage->load(QUrl(permanentCredUrl+token)); userLoginPageLoaded = true; } } } nixnote2-2.0.2/oauth/oauthwindow.h000066400000000000000000000040051315604104400171170ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef OAUTHWINDOW_H #define OAUTHWINDOW_H #include #include #include #include #include class OAuthWindow : public QMainWindow { Q_OBJECT private: QString iconPath; QGridLayout grid; QString consumerKey; QString consumerSecret; QString temporaryCredUrl; QString permanentCredUrl; QString urlBase; QString requestTokenUrl; QString accessTokenUrl; QString authorizationUrlBase; QString callbackUrl; bool authTokenReceived; bool userLoginPageLoaded; QWebView *tempAuthPage; QWebView *userLoginPage; QWebView *authRequestPage; public: explicit OAuthWindow(QMainWindow *parent = 0); void reset(); QString response; bool error; QString errorMessage; signals: void permanentTokenFound(QString token); void closed(); public slots: void tempAuthPageLoaded(bool rc); void permanentCredentialsReceived(bool rc); void userLoginReply(QNetworkReply *reply); void tempAuthPageReply(QNetworkReply *reply); }; #endif // OAUTHWINDOW_H nixnote2-2.0.2/package_scripts/000077500000000000000000000000001315604104400164215ustar00rootroot00000000000000nixnote2-2.0.2/package_scripts/Gentoo.txt000066400000000000000000000003221315604104400204120ustar00rootroot00000000000000NixNote is acailable via gentoo-zh overlay, you can install by: ```bash # run with root privileges layman -a gentoo-zh emerge nixnote:1 # to install nixnote-1.6 # or emerge nixnote:2 # to install nixnote-2.0 nixnote2-2.0.2/package_scripts/PuppyLinux.txt000066400000000000000000000003031315604104400213130ustar00rootroot00000000000000Puppy Linux users can find more informaion regarding NixNote at http://murga-linux.com/puppy/viewtopic.php?t=101997. Thanks to Christopher Havel for his work in bringing this to Puppy Linux! nixnote2-2.0.2/package_scripts/build.sh000077500000000000000000000027731315604104400200700ustar00rootroot00000000000000#!/bin/sh #################################################### # Make sure we are running as root #################################################### #if [ "$(id -u)" != "0" ]; then # echo "This script must be run as root" 1>&2 # exit 1 #fi package_dir=$(cd `dirname $0` && pwd) # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done sl="s" read -p "Enter version for build: " version sudo $package_dir/clean.sh arch=$arch version=$version sudo $package_dir/translate.sh arch=$arch version=$version sudo $package_dir/copy_files.sh arch=$arch version=$version read -p "Build tar.gz (y/n): " yn if [ "$yn" = "y" ] then sudo $package_dir/tar.sh arch=$arch version=$version fi read -p "Build deb (y/n): " yn if [ "$yn" = "y" ] then sudo $package_dir/dpkg.sh arch=$arch version=$version echo "**********************************" echo "* Checking deb for errors" echo "**********************************" lintian $package_dir/nixnote2-${version}_${arch}.deb fi read -p "Build rpm (y/n): " yn if [ "$yn" = "y" ] then sudo $package_dir/rpm.sh arch=$arch version=$version fi read -p "Build Gentoo ebuild (y/n): " yn if [ "$yn" = "y" ] then sudo $package_dir/gentoo.sh version=$version fi # Cleanup echo "Cleaning up" sudo rm -rf $package_dir/nixnote2 echo "****************************************" echo "Build complete" echo "****************************************" nixnote2-2.0.2/package_scripts/clean.sh000077500000000000000000000021401315604104400200370ustar00rootroot00000000000000#!/bin/sh version="2.0" # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; esac pkgarch="i386" case "$(uname -m)" in "x86_64" ) pkgarch="x86_64";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done package_dir=$(cd `dirname $0` && pwd) destination="$package_dir/nixnote/share/nixnote" # Check that we are runinng as root if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # Delete the tar.gz file if it exists if [ -e "$package_dir/nixnote2-${version}_${arch}.tar.gz" ] then rm $package_dir/nixnote2-${version}_${arch}.tar.gz fi #delete the debif it exists if [ -e "$package_dir/nixnote2-${version}_${arch}.deb" ] then rm $package_dir/nixnote2-${version}_${arch}.deb fi #delete the rpm if it exists rpmversion=`echo $version | sed -e 's/[-]/_/g'` if [ -e "$package_dir/nixnote2-${rpmversion}-0.${pkgarch}.rpm" ] then rm $package_dir/nixnote2-${rpmversion}-0.${pkgarch}.rpm fi # Cleanup any directory info if [ -d "$package_dir/nixnote2" ] then rm -rf $package_dir/nixnote2 fi nixnote2-2.0.2/package_scripts/copy_files.sh000077500000000000000000000063771315604104400211310ustar00rootroot00000000000000#!/bin/sh version="2.0" arch="amd64" package_dir=$(cd `dirname $0` && pwd) source_dir="$package_dir/.." #################################################### # Make sure we are running as root #################################################### if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done # Determine which lib directory to use case "$arch" in "amd64" ) lib="lib64";; "i386" ) lib="lib32";; esac ################################################## # Banner page ################################################## echo "****************************************************" echo "Copying files for NixNote $version for $arch" echo "****************************************************" ############################ # Copy the things we need # ############################ # Create directories echo "Building directories" mkdir $package_dir/nixnote2 mkdir $package_dir/nixnote2/usr mkdir $package_dir/nixnote2/usr/share mkdir $package_dir/nixnote2/usr/share/pixmaps mkdir $package_dir/nixnote2/usr/share/applications mkdir $package_dir/nixnote2/usr/share/nixnote2 mkdir $package_dir/nixnote2/usr/share/man mkdir $package_dir/nixnote2/usr/share/man/man1 mkdir $package_dir/nixnote2/usr/bin mkdir $package_dir/nixnote2/usr/share/doc/ mkdir $package_dir/nixnote2/usr/share/doc/nixnote2 # Copy binary, configs, & man pages echo "Copying files" cp $source_dir/images/windowIcon.png $package_dir/nixnote2/usr/share/pixmaps/nixnote2.png cp $source_dir/*.ini $package_dir/nixnote2/usr/share/nixnote2/ cp $source_dir/*.txt $package_dir/nixnote2/usr/share/nixnote2/ cp $source_dir/*.html $package_dir/nixnote2/usr/share/nixnote2/ cp $source_dir/nixnote2.desktop $package_dir/nixnote2/usr/share/applications/ cp $source_dir/copyright $package_dir/nixnote2/usr/share/doc/nixnote2/ strip --strip-all $source_dir/nixnote2 -o $package_dir/nixnote2/usr/bin/nixnote2 gzip -c -n -9 $source_dir/man/nixnote2.1 > $package_dir/nixnote2/usr/share/man/man1/nixnote2.1.gz cp $source_dir/changelog.txt $package_dir/nixnote2/usr/share/doc/nixnote2/changelog.Debian gzip -c -n -9 $package_dir/nixnote2/usr/share/doc/nixnote2/changelog.Debian > $package_dir/nixnote2/usr/share/doc/nixnote2/changelog.Debian.gz rm $package_dir/nixnote2/usr/share/doc/nixnote2/changelog.Debian if [ ! -d $source_dir/spell ] then mkdir $source_dir/spell fi # Copy subdirectories cp -r $source_dir/images $package_dir/nixnote2/usr/share/nixnote2/ cp -r $source_dir/spell $package_dir/nixnote2/usr/share/nixnote2/ cp -r $source_dir/translations $package_dir/nixnote2/usr/share/nixnote2/ #cp -r $source_dir/certs $package_dir/nixnote2/usr/share/nixnote2/ cp -r $source_dir/qss $package_dir/nixnote2/usr/share/nixnote2/ cp -r $source_dir/java $package_dir/nixnote2/usr/share/nixnote2/ cp -r $source_dir/help $package_dir/nixnote2/usr/share/nixnote2/ #Remove .ts from translations rm $package_dir/nixnote2/usr/share/nixnote2/translations/*.ts #set help page sed -i "s/__VERSION__/$version/" $package_dir/nixnote2/usr/share/nixnote2/help/about.html # Reset user permissions echo "Resetting ownership & permissions" chown -R root:root $package_dir/nixnote2/ # Cleanup #echo "Cleaning up" #rm -rf $package_dir/nixnote2 nixnote2-2.0.2/package_scripts/deb/000077500000000000000000000000001315604104400171535ustar00rootroot00000000000000nixnote2-2.0.2/package_scripts/deb/control000066400000000000000000000013461315604104400205620ustar00rootroot00000000000000Package: nixnote2 Version: __VERSION__ Section: x11 Priority: optional Architecture: __ARCH__ Installed-Size: 133120 Depends: libc6, libpoppler-qt5-1, libqt5sql5, libqt5sql5-sqlite, libqt5xml5, libqt5gui5, libqt5webkit5, libqt5network5, libqt5core5 | libqt5core5a, libpng12-0, libsqlite3-0, libtbb2, tidy, libcurl3 Recommends: mimetex, libreoffice-common, openjdk-7-jre | openjdk-7-jdk | sun-java7-jdk | sun-java7-jre | java7-sdk | java7-runtime | default-jre, nixnote2-webcam-plugin, nixnote2-hunspell-plugin Maintainer: Randy Baumgarte Description: Open Source Evernote client. NixNote is a client for the Evernote service (www.evernote.com). It will allow synchronization and editing of notes from your local system. nixnote2-2.0.2/package_scripts/deb/control-qt4000066400000000000000000000013421315604104400212640ustar00rootroot00000000000000Package: nixnote2 Version: __VERSION__ Section: x11 Priority: optional Architecture: __ARCH__ Installed-Size: 133120 Depends: libc6, libpoppler-qt4-4, libqtwebkit4, libqt4-sql, libqt4-sql-sqlite, libqt4-xml, libqtgui4, libqt4-network, libqtcore4, libpng12-0, libsqlite3-0, libtbb2, tidy, libdc1394-22, libcurl3 Recommends: mimetex, libreoffice-common, openjdk-7-jre | openjdk-7-jdk | sun-java7-jdk | sun-java7-jre | java7-sdk | java7-runtime | default-jre, nixnote2-webcam-plugin, nixnote2-hunspell-plugin Maintainer: Randy Baumgarte Description: Open Source Evernote client. NixNote is a client for the Evernote service (www.evernote.com). It will allow synchronization and editing of notes from your local system. nixnote2-2.0.2/package_scripts/dpkg.sh000077500000000000000000000034021315604104400177040ustar00rootroot00000000000000#!/bin/sh export DEB_BUILD_HARDENING=0 version="2.0.2" package_dir=$(cd `dirname $0` && pwd) source_dir="$package_dir/.." #################################################### # Make sure we are running as root #################################################### if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done # Determine which lib directory to use case "$arch" in "amd64" ) lib="lib64";; "i386" ) lib="lib32";; esac ################################################## # Banner page ################################################## echo "**************************************************" echo "Building deb NixNote $version for $arch" echo "**************************************************" # Cleanup any old stuff if [ -e "$package_dir/nixnote2-${version}_${arch}.deb" ] then rm $package_dir/nixnote2-${version}_${arch}.deb fi cd $package_dir # Copy control file for the package mkdir $package_dir/nixnote2/DEBIAN cp $package_dir/deb/control $package_dir/nixnote2/DEBIAN/control # remove the gpl.txt to avoid a lintian warning rm $package_dir/nixnote2/usr/share/nixnote2/gpl.txt # edit the version & architecture sed -i "s/__ARCH__/$arch/" $package_dir/nixnote2/DEBIAN/control sed -i "s/__VERSION__/$version/" $package_dir/nixnote2/DEBIAN/control # build the deb dpkg -b $package_dir/nixnote2 $package_dir/nixnote2-${version}_${arch}.deb # remove the temporary directory rm -rf $package_dir/nixnote2/DEBIAN # copy the gpl.txt back in cp $source_dir/gpl.txt $package_dir/nixnote2/usr/share/nixnote2/gpl.txt # Exit cd - nixnote2-2.0.2/package_scripts/gentoo.sh000077500000000000000000000022141315604104400202520ustar00rootroot00000000000000#!/bin/sh version="2.0.2" eversion="2.0.2" package_dir=$(cd `dirname $0` && pwd) #################################################### # Make sure we are running as root #################################################### if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi read -p "Enter GitHub tag for build: " tag ################################################## # Banner page ################################################## echo "**************************************************" echo "Building Gentoo ebuild for NixNote $version " echo "**************************************************" #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done eversion=$version # Cleanup any old stuff if [ -e "$package_dir/nixnote2-${eversion}.ebuild" ] then rm $package_dir/nixnote2-${eversion}.ebuild fi cp $package_dir/gentoo/ebuild $package_dir/nixnote2-${eversion}.ebuild #edit the spec file to update the version & architecture sed -i "s/__TAG__/$tag/g" $package_dir/nixnote2-${eversion}.ebuild sed -i "s/__VERSION__/$version/g" $package_dir/nixnote2-${eversion}.ebuild nixnote2-2.0.2/package_scripts/gentoo/000077500000000000000000000000001315604104400177145ustar00rootroot00000000000000nixnote2-2.0.2/package_scripts/gentoo/ebuild000066400000000000000000000042061315604104400211050ustar00rootroot00000000000000# Copyright 1999-2015 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Id$ EAPI=5 inherit qmake-utils versionator if [[ "${PV}" == "9999" ]] ; then inherit git-r3 EGIT_REPO_URI="https://github.com/baumgarr/${PN}.git" SLOT="0/9999" else MY_PV="$(replace_version_separator 2 '-')" SRC_URI="https://github.com/baumgarr/${PN}/archive/v${MY_PV}.tar.gz -> ${PN}-${MY_PV}.tar.gz" SLOT="0/2" S="${WORKDIR}/${PN}-${MY_PV}" fi DESCRIPTION="Nixnote - A clone of Evernote for Linux" HOMEPAGE="http://sourceforge.net/projects/nevernote/" LICENSE="GPL-2" KEYWORDS="~amd64 ~x86" IUSE="qt4 qt5 +opencv3" REQUIRED_USE="^^ ( qt4 qt5 ) qt5? ( opencv3 ) " DEPEND="dev-libs/boost app-text/hunspell qt4? ( app-text/poppler[qt4] dev-qt/qtwebkit:4 dev-qt/qtcore:4 dev-qt/qtgui:4 dev-qt/qtsql:4 ) qt5? ( app-text/poppler[qt5] dev-qt/qtwebkit:5 dev-qt/qtcore:5 dev-qt/qtgui:5 dev-qt/qtsql:5 ) opencv3? ( media-libs/opencv:0/3.0 ) !opencv3? ( media-libs/opencv:0/2.4 ) " RDEPEND="${DEPEND} app-text/htmltidy" # After commit 836482e, NixNote2 can not be compiled with qt4 any more if [[ "${PV}" == *9999* ]] && use qt4; then EGIT_COMMIT="836482e00c93618560c2896bbac87d3f89d17299" fi src_prepare() { # fix VideoCapture undefined reference error with opencv-3 if use opencv3; then sed -i 's/LIBS += /LIBS += -lopencv_videoio/g' NixNote2.pro sed -i '/\#include "opencv\/cv.h"/i\#include "opencv2\/videoio.hpp"' dialog/webcamcapturedialog.h fi lupdate -pro NixNote2.pro -no-obsolete || die lrelease NixNote2.pro || die if use qt4; then eqmake4 NixNote2.pro || die "qmake failed" fi if use qt5; then eqmake5 NixNote2.pro || die "qmake failed" fi } src_install() { insinto /usr/share/nixnote2 doins -r help images java qss translations changelog.txt license.html shortcuts.txt *.ini rm -r ${D}/usr/share/nixnote2/translations/*.ts dobin nixnote2 insinto /usr/share/applications doins nixnote2.desktop doman ${S}/man/nixnote2.1 } nixnote2-2.0.2/package_scripts/hunspell_plugin/000077500000000000000000000000001315604104400216315ustar00rootroot00000000000000nixnote2-2.0.2/package_scripts/hunspell_plugin/build.sh000077500000000000000000000023501315604104400232670ustar00rootroot00000000000000#!/bin/sh package_dir=$(cd `dirname $0` && pwd) # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done sl="s" read -p "Enter version for build: " version sudo $package_dir/clean.sh arch=$arch version=$version sudo $package_dir/copy_files.sh arch=$arch version=$version read -p "Build tar.gz (y/n): " yn if [ "$yn" = "y" ] then sudo $package_dir/tar.sh arch=$arch version=$version fi read -p "Build deb (y/n): " yn if [ "$yn" = "y" ] then sudo $package_dir/dpkg.sh arch=$arch version=$version echo "**********************************" echo "* Checking deb for errors" echo "**********************************" lintian $package_dir/nixnote2-hunspell-plugin-${version}_${arch}.deb fi read -p "Build rpm (y/n): " yn if [ "$yn" = "y" ] then sudo $package_dir/rpm.sh arch=$arch version=$version fi #read -p "Build Gentoo ebuild (y/n): " yn #if [ "$yn" = "y" ] #then # sudo $package_dir/gentoo.sh version=$version #fi # Cleanup echo "Cleaning up" sudo rm -rf $package_dir/nixnote2 echo "****************************************" echo "Build complete" echo "****************************************" nixnote2-2.0.2/package_scripts/hunspell_plugin/clean.sh000077500000000000000000000023021315604104400232470ustar00rootroot00000000000000#!/bin/sh version="1.0-1" # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; esac pkgarch="i386" case "$(uname -m)" in "x86_64" ) pkgarch="x86_64";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done package_dir=$(cd `dirname $0` && pwd) destination="$package_dir/nixnote/share/nixnote" # Check that we are runinng as root if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # Delete the tar.gz file if it exists if [ -e "$package_dir/nixnote2_hunspell_plugin_${version}_${arch}.tar.gz" ] then rm $package_dir/nixnote2_hunspell_plugin_${version}_${arch}.tar.gz fi #delete the debif it exists if [ -e "$package_dir/nixnote2-hunspell-plugin-${version}_${arch}.deb" ] then rm $package_dir/nixnote2-hunspell-plugin-${version}_${arch}.deb fi #delete the rpm if it exists rpmversion=`echo $version | sed -e 's/[-]/_/g'` if [ -e "$package_dir/nixnote2_hunspell_plugin-${rpmversion}-0.${pkgarch}.rpm" ] then rm $package_dir/nixnote2_hunspell_plugin-${rpmversion}-0.${pkgarch}.rpm fi # Cleanup any directory info if [ -d "$package_dir/nixnote2" ] then rm -rf $package_dir/nixnote2 fi nixnote2-2.0.2/package_scripts/hunspell_plugin/copy_files.sh000077500000000000000000000041731315604104400243310ustar00rootroot00000000000000#!/bin/sh version="1.0" arch="amd64" package_dir=$(cd `dirname $0` && pwd) source_dir="$package_dir/../.." #################################################### # Make sure we are running as root #################################################### if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done # Determine which lib directory to use case "$arch" in "amd64" ) lib="lib64";; "i386" ) lib="lib32";; esac ################################################## # Banner page ################################################## echo "****************************************************" echo "Copying files for NixNote Webcam Plugin $version for $arch" echo "****************************************************" ############################ # Copy the things we need # ############################ # Create directories echo "Building directories" mkdir $package_dir/nixnote2 mkdir $package_dir/nixnote2/usr mkdir $package_dir/nixnote2/usr/lib mkdir $package_dir/nixnote2/usr/lib/nixnote2 mkdir $package_dir/nixnote2/usr/share mkdir $package_dir/nixnote2/usr/share/doc/ mkdir $package_dir/nixnote2/usr/share/doc/nixnote2-hunspell-plugin # Copy binary, configs, & man pages echo "Copying files" cp $source_dir/copyright $package_dir/nixnote2/usr/share/doc/nixnote2-hunspell-plugin/ strip --strip-all $source_dir/plugins/libhunspellplugin.so -o $package_dir/nixnote2/usr/lib/nixnote2/libhunspellplugin.so cp $source_dir/plugins/hunspell/changelog.txt $package_dir/nixnote2/usr/share/doc/nixnote2-hunspell-plugin/changelog.Debian gzip -c -n -9 $package_dir/nixnote2/usr/share/doc/nixnote2-hunspell-plugin/changelog.Debian > $package_dir/nixnote2/usr/share/doc/nixnote2-hunspell-plugin/changelog.Debian.gz rm $package_dir/nixnote2/usr/share/doc/nixnote2-hunspell-plugin/changelog.Debian if [ ! -d $source_dir/spell ] then mkdir $source_dir/spell fi # Reset user permissions echo "Resetting ownership & permissions" chown -R root:root $package_dir/nixnote2/ chmod 644 $package_dir/nixnote2/usr/lib/nixnote2/libhunspellplugin.so nixnote2-2.0.2/package_scripts/hunspell_plugin/deb/000077500000000000000000000000001315604104400223635ustar00rootroot00000000000000nixnote2-2.0.2/package_scripts/hunspell_plugin/deb/control000066400000000000000000000005001315604104400237610ustar00rootroot00000000000000Package: nixnote2-hunspell-plugin Version: __VERSION__ Section: x11 Priority: optional Architecture: __ARCH__ Installed-Size: 60000 Depends: libc6, libhunspell-1.3-0 Recommends: Maintainer: Randy Baumgarte Description: Webcam plugin for NixNote2. A plugin for NixNote2 to allow for spell checking. nixnote2-2.0.2/package_scripts/hunspell_plugin/deb/nixnote2-hunspell-plugin000066400000000000000000000001531315604104400271770ustar00rootroot00000000000000nixnote2-hunspell-plugin: arch-dependent-file-in-usr-share usr/share/nixnote2/plugins/libhunspellplugin.so nixnote2-2.0.2/package_scripts/hunspell_plugin/dpkg.sh000077500000000000000000000034571315604104400231260ustar00rootroot00000000000000#!/bin/sh export DEB_BUILD_HARDENING=0 version="1.0-1" package_dir=$(cd `dirname $0` && pwd) source_dir="$package_dir/../.." #################################################### # Make sure we are running as root #################################################### if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done # Determine which lib directory to use case "$arch" in "amd64" ) lib="lib64";; "i386" ) lib="lib32";; esac ################################################## # Banner page ################################################## echo "**************************************************" echo "Building deb NixNote $version for $arch" echo "**************************************************" # Cleanup any old stuff if [ -e "$package_dir/nixnote2-hunspell-plugin-${version}_${arch}.deb" ] then rm $package_dir/nixnote2-hunspell-plugin-${version}_${arch}.deb fi cd $package_dir # Copy control file for the package mkdir $package_dir/nixnote2/DEBIAN cp $package_dir/deb/control $package_dir/nixnote2/DEBIAN/ # remove the gpl.txt to avoid a lintian warning #rm $package_dir/nixnote2/usr/share/nixnote2/gpl.txt # edit the version & architecture sed -i "s/__ARCH__/$arch/" $package_dir/nixnote2/DEBIAN/control sed -i "s/__VERSION__/$version/" $package_dir/nixnote2/DEBIAN/control # build the deb dpkg -b $package_dir/nixnote2 $package_dir/nixnote2-hunspell-plugin-${version}_${arch}.deb # remove the temporary directory rm -rf $package_dir/nixnote2/DEBIAN # copy the gpl.txt back in cp $source_dir/gpl.txt $package_dir/nixnote2/usr/share/nixnote2/gpl.txt # Exit cd - nixnote2-2.0.2/package_scripts/hunspell_plugin/install.sh000077500000000000000000000003431315604104400236360ustar00rootroot00000000000000#!/bin/sh package_dir=$(cd `dirname $0` && pwd) if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi mkdir -p /usr/share/nixnote2/plugins cp -r $package_dir/* / echo "Install complete" nixnote2-2.0.2/package_scripts/hunspell_plugin/rpm.sh000077500000000000000000000044031315604104400227670ustar00rootroot00000000000000#!/bin/sh export DEB_BUILD_HARDENING=0 version="1.0-1" package_dir=$(cd `dirname $0` && pwd) #################################################### # Make sure we are running as root #################################################### if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; "i686" ) arch="i686";; esac rpmdir="i386" case "$(uname -m)" in "x86_64" ) rpmdir="x86_64";; "i686" ) rpmdir="i686";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done version=`echo $version | sed -e 's/[-]/_/g'` case "$arch" in "amd64" ) lib="lib64";; "i386" ) lib="lib32";; "i686" ) lib="lib32";; esac ################################################## # Banner page ################################################## echo "**************************************************" echo "Building rpm NixNote $version for $arch" echo "**************************************************" # Cleanup any old stuff if [ -e "$package_dir/nixnote2_webcam_plugin_${version}_${arch}.rpm" ] then rm $package_dir/nixnote2_webcam_plugin_${version}_${arch}.rpm fi #Remove lintian stuff that RPM doesn't need rm -rf $package_dir/nixnote2/usr/share/lintian # Copy control file for the package mkdir $package_dir/rpmbuild mkdir $package_dir/rpmbuild/SPECS mkdir $package_dir/rpmbuild/SOURCES #start creating the source tar. Note, we don't include the /usr/lib directory # since there is a Thrift RPM package. cp $package_dir/rpm/nixnote2_hunspell_plugin.spec $package_dir/rpmbuild/SPECS/nixnote2_hunspell_plugin.spec tar -czf $package_dir/rpmbuild/SOURCES/nixnote2_hunspell_plugin_${version}_${arch}.tar.gz ./nixnote2 #edit the spec file to update the version & architecture sed -i "s/__VERSION__/$version/" $package_dir/rpmbuild/SPECS/nixnote2_hunspell_plugin.spec sed -i "s/__ARCH__/$arch/" $package_dir/rpmbuild/SPECS/nixnote2_hunspell_plugin.spec #do the actual build rpmbuild --quiet --define "_topdir ${package_dir}/rpmbuild" -ba ${package_dir}/rpmbuild/SPECS/nixnote2_hunspell_plugin.spec #copy the rpm out cp $package_dir/rpmbuild/RPMS/$rpmdir/*.rpm $package_dir/ #cleanup cd - rm -rf $package_dir/rpmbuild nixnote2-2.0.2/package_scripts/hunspell_plugin/rpm/000077500000000000000000000000001315604104400224275ustar00rootroot00000000000000nixnote2-2.0.2/package_scripts/hunspell_plugin/rpm/nixnote2_hunspell_plugin.spec000066400000000000000000000026041315604104400303430ustar00rootroot00000000000000Summary: A spell check plugin for NixNote Name: nixnote2_hunspell_plugin Version: __VERSION__ Release: 0 License: GPLv2 Group: Applications/Internet Vendor: Randy Baumgarte URL: http://nevernote.sourceforge.net/ Packager: Randy Baumgarte Source: nixnote2_hunspell_plugin___VERSION_____ARCH__.tar.gz AutoReqProv: no Requires: nixnote2, hunspell >= 1.3.2 %description NixNote-Hunspell-Plugin:: Plugin allowing for a hunspell to be used in NixNote2. Copyright 2009-2015, Randy Baumgarte Licensed under GNU General Public License version 2 This is a plugin for NixNote2. It allows for spell checking of notes via Hunspell. See release.txt for details of what works and what doesn't work. Documents: changelog.txt: ChangeLog and development history. gpl.txt: License description of GPL v2. license.html: Legal notices for licenses and trademarks. %prep %setup -n nixnote2 %clean rm -rf /usr/share/doc/nixnote2-hunspell-plugin rm -rf /usr/lib/nixnote2/libhunspellplugin.so %define debug_package %{nil} %build %install mkdir -p /usr/lib/nixnote2 mkdir -p /usr/share/doc/nixnote2-hunspell-plugin mv -f usr ${RPM_BUILD_ROOT} %post %postun %files %attr(755,root,root) /usr/lib/nixnote2/libhunspellplugin.so %attr(755,root,root) /usr/share/doc/nixnote2-hunspell-plugin %changelog * Sun Sep 11 2016 Randy Baumgarte - __VERSION__ - See changelog.txt for all changes nixnote2-2.0.2/package_scripts/hunspell_plugin/tar.sh000077500000000000000000000026101315604104400227550ustar00rootroot00000000000000#!/bin/sh version="1.0-1" package_dir=$(cd `dirname $0` && pwd) source_dir="$package_dir/../.." #################################################### # Make sure we are running as root #################################################### if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done # Determine which lib directory to use case "$arch" in "amd64" ) lib="lib64";; "i386" ) lib="lib32";; esac ################################################## # Banner page ################################################## echo "**************************************************" echo "Building tar.gz for NixNote $version for $arch" echo "**************************************************" # Cleanup any old stuff if [ -e "$package_dir/nixnote2-hunspell_plugin_${version}_${arch}.tar.gz" ] then rm $package_dir/nixnote2-hunspell_plugin_${version}_${arch}.tar.gz fi cd $package_dir echo "Building tar" cp $package_dir/install.sh $package_dir/nixnote2/ cp $package_dir/uninstall.sh $package_dir/nixnote2/ tar -czf $package_dir/nixnote2_hunspell_plugin_${version}_${arch}.tar.gz ./nixnote2 rm $package_dir/nixnote2/install.sh rm $package_dir/nixnote2/uninstall.sh cd - nixnote2-2.0.2/package_scripts/hunspell_plugin/uninstall.sh000077500000000000000000000003371315604104400242040ustar00rootroot00000000000000#!/bin/sh package_dir=$(cd `dirname $0` && pwd) if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi rm /usr/share/nixnote2/plugins/libhunspellplugin.so echo "Uninstall completed" nixnote2-2.0.2/package_scripts/rpm.sh000077500000000000000000000044051315604104400175610ustar00rootroot00000000000000#!/bin/sh export DEB_BUILD_HARDENING=0 version="2.0.2" package_dir=$(cd `dirname $0` && pwd) #################################################### # Make sure we are running as root #################################################### if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; "i686" ) arch="i686";; esac rpmdir="i386" case "$(uname -m)" in "x86_64" ) rpmdir="x86_64";; "i686" ) rpmdir="i686";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done version=`echo $version | sed -e 's/[-]/_/g'` case "$arch" in "amd64" ) lib="lib64";; "i386" ) lib="lib32";; "i686" ) lib="lib32";; esac ################################################## # Banner page ################################################## echo "**************************************************" echo "Building rpm NixNote $version for $arch" echo "**************************************************" # Cleanup any old stuff if [ -e "$package_dir/nixnote2-${version}_${arch}.rpm" ] then rm $package_dir/nixnote2-${version}_${arch}.rpm fi # Copy control file for the package mkdir $package_dir/rpmbuild mkdir $package_dir/rpmbuild/SPECS mkdir $package_dir/rpmbuild/SOURCES #start creating the source tar. Note, we don't include the /usr/lib directory # since there is a Thrift RPM package. cp $package_dir/rpm/nixnote2.spec $package_dir/rpmbuild/SPECS/nixnote2.spec if [ -d "$package_dir/nixnote2/usr/lib" ] then mv $package_dir/nixnote2/usr/lib $package_dir/nixnote2-lib fi tar -czf $package_dir/rpmbuild/SOURCES/nixnote2_${version}_${arch}.tar.gz ./nixnote2 if [ -d "$package_dir/nixnote2-lib" ] then mv $package_dir/nixnote2-lib $package_dir/nixnote2/usr/lib fi #edit the spec file to update the version & architecture sed -i "s/__VERSION__/$version/" $package_dir/rpmbuild/SPECS/nixnote2.spec sed -i "s/__ARCH__/$arch/" $package_dir/rpmbuild/SPECS/nixnote2.spec #do the actual build rpmbuild --quiet --define "_topdir $package_dir/rpmbuild" -ba $package_dir/rpmbuild/SPECS/nixnote2.spec #copy the rpm out cp $package_dir/rpmbuild/RPMS/$rpmdir/*.rpm $package_dir/ #cleanup cd - rm -rf $package_dir/rpmbuild nixnote2-2.0.2/package_scripts/rpm/000077500000000000000000000000001315604104400172175ustar00rootroot00000000000000nixnote2-2.0.2/package_scripts/rpm/nixnote2.spec000066400000000000000000000041161315604104400216430ustar00rootroot00000000000000Summary: An Evernote client clone for Linux Name: nixnote2 Version: __VERSION__ Release: 0 License: GPLv2+ Group: Applications/Internet Vendor: Randy Baumgarte URL: http://nevernote.sourceforge.net/ Packager: Randy Baumgarte Source: nixnote2___VERSION_____ARCH__.tar.gz AutoReqProv: no Requires: tidy, bash, qt >= 4.8.5, qt-x11 >= 4.8.5, qtwebkit >= 2.3, glibc >= 2.18, libgcc >= 4.8.2, poppler-qt, libstdc++ >= 4.8.2, openssl >= 1.0.0, OpenEXR >= 1.7, tbb >= 4.1, libcurl >= 3.75.0, libtidy >= 5.0 %description NixNote:: Evernote client clone for Linux Copyright 2009-2015, Randy Baumgarte Licensed under GNU General Public License version 2+ This is an incomplete clone of Evernote designed to run on Linux. While this is designed to work with Evernote, it is in no way connected with or supported by Evernote. Any problems you encounter will not be corrected by them and, since this is GPL software, you are using this software at your own risk. See release.txt for details of what works and what doesn't work. Documents: changelog.txt: ChangeLog and development history. install.txt: Build and install instructions. credit.txt: Credit of nixnote developers. gpl.txt: License description of GPL v2. license.html: Legal notices for licenses and trademarks. colors.txt: Sample config file to the color menu for note & title backgrounds. theme.ini: Theme configuration file. shortcuts.txt Shortcut configuration file. %prep %setup -n nixnote2 %clean rm -rf ${RPM_BUILD_ROOT} rm -rf ${RPM_BUILD_DIR}/nixnote2 %define debug_package %{nil} %build %install rm -rf ${RPM_BUILD_ROOT} mkdir -p ${RPM_BUILD_ROOT} mv -f usr ${RPM_BUILD_ROOT} %post %postun %files %attr(755,root,root) /usr/share/nixnote2 %attr(755,root,root) /usr/bin/nixnote2 %attr(755,root,root) /usr/share/doc/nixnote2 %attr(755,root,root) /usr/share/applications/nixnote2.desktop %attr(755,root,root) /usr/share/pixmaps/nixnote2.png %attr(755,root,root) /usr/share/man/man1/nixnote2.1.gz %changelog * Thu Dec 10 2015 Randy Baumgarte - __VERSION__ - See changelog.txt for all changes nixnote2-2.0.2/package_scripts/tar.sh000077500000000000000000000025231315604104400175500ustar00rootroot00000000000000#!/bin/sh version="2.0.2" package_dir=$(cd `dirname $0` && pwd) source_dir="$package_dir/.." #################################################### # Make sure we are running as root #################################################### if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done # Determine which lib directory to use case "$arch" in "amd64" ) lib="lib64";; "i386" ) lib="lib32";; esac ################################################## # Banner page ################################################## echo "**************************************************" echo "Building tar.gz for NixNote $version for $arch" echo "**************************************************" # Cleanup any old stuff if [ -e "$package_dir/nixnote2-${version}_${arch}.tar.gz" ] then rm $package_dir/nixnote2-${version}_${arch}.tar.gz fi cd $package_dir echo "Building tar" cp $source_dir/install.sh $package_dir/nixnote2/ cp $source_dir/uninstall.sh $package_dir/nixnote2/ tar -czf $package_dir/nixnote2-${version}_${arch}.tar.gz ./nixnote2 rm $package_dir/nixnote2/install.sh rm $package_dir/nixnote2/uninstall.sh cd - nixnote2-2.0.2/package_scripts/translate.sh000077500000000000000000000011731315604104400207570ustar00rootroot00000000000000#!/bin/sh package_dir=$(cd `dirname $0` && pwd) if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi echo "****************************************" echo "* Translating files" echo "****************************************" lupdate="lupdate" lrelease="lrelease" if [ -f "/usr/bin/lupdate-qt4" ] then lupdate="lupdate-qt4" fi if [ -f "/usr/bin/lrelease-qt4" ] then lrelease="lrelease-qt4" fi # Retranslate rm $package_dir/../translations/*.qm #lupdate $package_dir/../NixNote2.pro $lupdate -pro $package_dir/../NixNote2.pro -no-obsolete $lrelease $package_dir/../translations/*.ts nixnote2-2.0.2/package_scripts/webcam_plugin/000077500000000000000000000000001315604104400212355ustar00rootroot00000000000000nixnote2-2.0.2/package_scripts/webcam_plugin/build.sh000077500000000000000000000027221315604104400226760ustar00rootroot00000000000000#!/bin/sh #################################################### # Make sure we are running as root #################################################### #if [ "$(id -u)" != "0" ]; then # echo "This script must be run as root" 1>&2 # exit 1 #fi package_dir=$(cd `dirname $0` && pwd) # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done sl="s" read -p "Enter version for build: " version sudo $package_dir/clean.sh arch=$arch version=$version sudo $package_dir/copy_files.sh arch=$arch version=$version read -p "Build tar.gz (y/n): " yn if [ "$yn" = "y" ] then sudo $package_dir/tar.sh arch=$arch version=$version fi read -p "Build deb (y/n): " yn if [ "$yn" = "y" ] then sudo $package_dir/dpkg.sh arch=$arch version=$version echo "**********************************" echo "* Checking deb for errors" echo "**********************************" lintian $package_dir/nixnote2-webcam-plugin-${version}_${arch}.deb fi read -p "Build rpm (y/n): " yn if [ "$yn" = "y" ] then sudo $package_dir/rpm.sh arch=$arch version=$version fi #read -p "Build Gentoo ebuild (y/n): " yn #if [ "$yn" = "y" ] #then # sudo $package_dir/gentoo.sh version=$version #fi # Cleanup echo "Cleaning up" sudo rm -rf $package_dir/nixnote2 echo "****************************************" echo "Build complete" echo "****************************************" nixnote2-2.0.2/package_scripts/webcam_plugin/clean.sh000077500000000000000000000022661315604104400226640ustar00rootroot00000000000000#!/bin/sh version="1.0-1" # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; esac pkgarch="i386" case "$(uname -m)" in "x86_64" ) pkgarch="x86_64";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done package_dir=$(cd `dirname $0` && pwd) destination="$package_dir/nixnote/share/nixnote" # Check that we are runinng as root if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # Delete the tar.gz file if it exists if [ -e "$package_dir/nixnote2_webcam_plugin_${version}_${arch}.tar.gz" ] then rm $package_dir/nixnote2_webcam_plugin_${version}_${arch}.tar.gz fi #delete the debif it exists if [ -e "$package_dir/nixnote2-webcam-plugin-${version}_${arch}.deb" ] then rm $package_dir/nixnote2-webcam-plugin-${version}_${arch}.deb fi #delete the rpm if it exists rpmversion=`echo $version | sed -e 's/[-]/_/g'` if [ -e "$package_dir/nixnote2_webcam_plugin-${rpmversion}-0.${pkgarch}.rpm" ] then rm $package_dir/nixnote2_webcam_plugin-${rpmversion}-0.${pkgarch}.rpm fi # Cleanup any directory info if [ -d "$package_dir/nixnote2" ] then rm -rf $package_dir/nixnote2 fi nixnote2-2.0.2/package_scripts/webcam_plugin/copy_files.sh000077500000000000000000000042221315604104400237300ustar00rootroot00000000000000#!/bin/sh version="1.0" arch="amd64" package_dir=$(cd `dirname $0` && pwd) source_dir="$package_dir/../.." #################################################### # Make sure we are running as root #################################################### if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done # Determine which lib directory to use case "$arch" in "amd64" ) lib="lib64";; "i386" ) lib="lib32";; esac ################################################## # Banner page ################################################## echo "****************************************************" echo "Copying files for NixNote Webcam Plugin $version for $arch" echo "****************************************************" ############################ # Copy the things we need # ############################ # Create directories echo "Building directories" mkdir $package_dir/nixnote2 mkdir $package_dir/nixnote2/usr mkdir $package_dir/nixnote2/usr/share mkdir $package_dir/nixnote2/usr/lib/ mkdir $package_dir/nixnote2/usr/lib/nixnote2 mkdir $package_dir/nixnote2/usr/share/doc/ mkdir $package_dir/nixnote2/usr/share/doc/nixnote2-webcam-plugin # Copy binary, configs, & man pages echo "Copying files" cp $source_dir/copyright $package_dir/nixnote2/usr/share/doc/nixnote2-webcam-plugin/ strip --strip-all $source_dir/plugins/libwebcamplugin.so -o $package_dir/nixnote2/usr/lib/nixnote2/libwebcamplugin.so cp $source_dir/plugins/webcam/changelog.txt $package_dir/nixnote2/usr/share/doc/nixnote2-webcam-plugin/changelog.Debian gzip -c -n -9 $package_dir/nixnote2/usr/share/doc/nixnote2-webcam-plugin/changelog.Debian > $package_dir/nixnote2/usr/share/doc/nixnote2-webcam-plugin/changelog.Debian.gz rm $package_dir/nixnote2/usr/share/doc/nixnote2-webcam-plugin/changelog.Debian #cp $source_dir/package_scripts/webcam_plugin/deb/nixnote* $package_dir/nixnote2/usr/share/lintian/overrides/ # Reset user permissions echo "Resetting ownership & permissions" chown -R root:root $package_dir/nixnote2/ chmod 644 $package_dir/nixnote2/usr/lib/nixnote2/libwebcamplugin.so nixnote2-2.0.2/package_scripts/webcam_plugin/deb/000077500000000000000000000000001315604104400217675ustar00rootroot00000000000000nixnote2-2.0.2/package_scripts/webcam_plugin/deb/control000066400000000000000000000016321315604104400233740ustar00rootroot00000000000000Package: nixnote2-webcam-plugin Version: __VERSION__ Section: x11 Priority: optional Architecture: __ARCH__ Installed-Size: 60000 Depends: libc6, libqt5gui5, libqt5core5 | libqt5core5a, libpng12-0, libtbb2, libopenexr6 | libopenexr22, libavcodec54 | libavcodec-ffmpeg56 | libavcodec-extra-53 | libavcodec-extra-54 | libavcodec-extra-56 | libavcodec-ffmpeg-extra56, libavformat53 | libavformat54 | libavformat-extra-53 | libavformat-extra-54 | libavformat-55 | libavformat55 | libavformat-extra-55 | libavformat56 | libavformat-56 | libavformat-extra-56 | libavformat-ffmpeg56, libswscale2 | libswscale-extra-2 | libswscale3 | libswscale-ffmpeg3, libdc1394-22, libopencv-core2.4 | libopencv-core2.4v5, libopencv-highgui2.4 | libopencv-highgui2.4v5, libcurl3 Recommends: Maintainer: Randy Baumgarte Description: Webcam plugin for NixNote2. A plugin for NixNote2 to allow for note creation via a webcam. nixnote2-2.0.2/package_scripts/webcam_plugin/deb/control-qt4000066400000000000000000000016301315604104400241000ustar00rootroot00000000000000Package: nixnote2-webcam-plugin Version: __VERSION__ Section: x11 Priority: optional Architecture: __ARCH__ Installed-Size: 60000 Depends: libc6, libqtgui4, libqtcore4, libpng12-0, libtbb2, libopenexr6 | libopenexr22, libavcodec53 | libavcodec54 | libavcodec-ffmpeg56 | libavcodec-extra-53 | libavcodec-extra-54 | libavcodec-extra-56 | libavcodec-ffmpeg-extra56, libavformat53 | libavformat54 | libavformat-extra-53 | libavformat-extra-54 | libavformat-55 | libavformat55 | libavformat-extra-55 | libavformat56 | libavformat-56 | libavformat-extra-56 | libavformat-ffmpeg56, libswscale2 | libswscale-extra-2 | libswscale3 | libswscale-ffmpeg3, libdc1394-22, libopencv-core2.4 | libopencv-core2.4v5, libopencv-highgui2.4 | libopencv-highgui2.4v5, libcurl3 Recommends: Maintainer: Randy Baumgarte Description: Webcam plugin for NixNote2. A plugin for NixNote2 to allow for note creation via a webcam. nixnote2-2.0.2/package_scripts/webcam_plugin/deb/nixnote2-webcam-plugin000066400000000000000000000001471315604104400262120ustar00rootroot00000000000000nixnote2-webcam-plugin: arch-dependent-file-in-usr-share usr/share/nixnote2/plugins/libwebcamplugin.so nixnote2-2.0.2/package_scripts/webcam_plugin/dpkg.sh000077500000000000000000000034611315604104400225250ustar00rootroot00000000000000#!/bin/sh export DEB_BUILD_HARDENING=0 version="1.0-1" package_dir=$(cd `dirname $0` && pwd) source_dir="$package_dir/../.." #################################################### # Make sure we are running as root #################################################### if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done # Determine which lib directory to use case "$arch" in "amd64" ) lib="lib64";; "i386" ) lib="lib32";; esac ################################################## # Banner page ################################################## echo "**************************************************" echo "Building deb NixNote $version for $arch" echo "**************************************************" # Cleanup any old stuff if [ -e "$package_dir/nixnote2-webcam-webcam-plugin-${version}_${arch}.deb" ] then rm $package_dir/nixnote2-webcam-plugin-${version}_${arch}.deb fi cd $package_dir # Copy control file for the package mkdir $package_dir/nixnote2/DEBIAN cp $package_dir/deb/control $package_dir/nixnote2/DEBIAN/ # remove the gpl.txt to avoid a lintian warning #rm $package_dir/nixnote2/usr/share/nixnote2/gpl.txt # edit the version & architecture sed -i "s/__ARCH__/$arch/" $package_dir/nixnote2/DEBIAN/control sed -i "s/__VERSION__/$version/" $package_dir/nixnote2/DEBIAN/control # build the deb dpkg -b $package_dir/nixnote2 $package_dir/nixnote2-webcam-plugin-${version}_${arch}.deb # remove the temporary directory rm -rf $package_dir/nixnote2/DEBIAN # copy the gpl.txt back in #cp $source_dir/gpl.txt $package_dir/nixnote2/usr/share/nixnote2/gpl.txt # Exit cd - nixnote2-2.0.2/package_scripts/webcam_plugin/install.sh000077500000000000000000000003431315604104400232420ustar00rootroot00000000000000#!/bin/sh package_dir=$(cd `dirname $0` && pwd) if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi mkdir -p /usr/share/nixnote2/plugins cp -r $package_dir/* / echo "Install complete" nixnote2-2.0.2/package_scripts/webcam_plugin/rpm.sh000077500000000000000000000043631315604104400224000ustar00rootroot00000000000000#!/bin/sh export DEB_BUILD_HARDENING=0 version="1.0-1" package_dir=$(cd `dirname $0` && pwd) #################################################### # Make sure we are running as root #################################################### if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; "i686" ) arch="i686";; esac rpmdir="i386" case "$(uname -m)" in "x86_64" ) rpmdir="x86_64";; "i686" ) rpmdir="i686";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done version=`echo $version | sed -e 's/[-]/_/g'` case "$arch" in "amd64" ) lib="lib64";; "i386" ) lib="lib32";; "i686" ) lib="lib32";; esac ################################################## # Banner page ################################################## echo "**************************************************" echo "Building rpm NixNote $version for $arch" echo "**************************************************" # Cleanup any old stuff if [ -e "$package_dir/nixnote2_webcam_plugin_${version}_${arch}.rpm" ] then rm $package_dir/nixnote2_webcam_plugin_${version}_${arch}.rpm fi #Remove lintian stuff that RPM doesn't need rm -rf $package_dir/nixnote2/usr/share/lintian # Copy control file for the package mkdir $package_dir/rpmbuild mkdir $package_dir/rpmbuild/SPECS mkdir $package_dir/rpmbuild/SOURCES #start creating the source tar. Note, we don't include the /usr/lib directory # since there is a Thrift RPM package. cp $package_dir/rpm/nixnote2_webcam_plugin.spec $package_dir/rpmbuild/SPECS/nixnote2_webcam_plugin.spec tar -czf $package_dir/rpmbuild/SOURCES/nixnote2_webcam_plugin_${version}_${arch}.tar.gz ./nixnote2 #edit the spec file to update the version & architecture sed -i "s/__VERSION__/$version/" $package_dir/rpmbuild/SPECS/nixnote2_webcam_plugin.spec sed -i "s/__ARCH__/$arch/" $package_dir/rpmbuild/SPECS/nixnote2_webcam_plugin.spec #do the actual build rpmbuild --quiet --define "_topdir $package_dir/rpmbuild" -ba $package_dir/rpmbuild/SPECS/nixnote2_webcam_plugin.spec #copy the rpm out cp $package_dir/rpmbuild/RPMS/$rpmdir/*.rpm $package_dir/ #cleanup cd - rm -rf $package_dir/rpmbuild nixnote2-2.0.2/package_scripts/webcam_plugin/rpm/000077500000000000000000000000001315604104400220335ustar00rootroot00000000000000nixnote2-2.0.2/package_scripts/webcam_plugin/rpm/nixnote2_webcam_plugin.spec000066400000000000000000000025661315604104400273620ustar00rootroot00000000000000Summary: A webcam plugin for NixNote Name: nixnote2_webcam_plugin Version: __VERSION__ Release: 0 License: GPLv2 Group: Applications/Internet Vendor: Randy Baumgarte URL: http://nevernote.sourceforge.net/ Packager: Randy Baumgarte Source: nixnote2_webcam_plugin___VERSION_____ARCH__.tar.gz AutoReqProv: no Requires: nixnote2, opencv >= 2.4.7 %description NixNote-Webcam-Plugin:: Plugin allowing for a webcam to be used in NixNote2. Copyright 2009-2015, Randy Baumgarte Licensed under GNU General Public License version 2 This is a plugin for NixNote2. It allows for the creation of notes by using a webcam as input. See release.txt for details of what works and what doesn't work. Documents: changelog.txt: ChangeLog and development history. gpl.txt: License description of GPL v2. license.html: Legal notices for licenses and trademarks. %prep %setup -n nixnote2 %clean rm -rf /usr/share/doc/nixnote2-webcam-plugin rm -rf /usr/lib/nixnote2/libwebcamplugin.so %define debug_package %{nil} %build %install mkdir -p /usr/lib/nixnote2 mkdir -p /usr/share/doc/nixnote2-webcam-plugin mv -f usr ${RPM_BUILD_ROOT} %post %postun %files %attr(755,root,root) /usr/lib/nixnote2/libwebcamplugin.so %attr(755,root,root) /usr/share/doc/nixnote2-webcam-plugin %changelog * Thu Dec 10 2015 Randy Baumgarte - __VERSION__ - See changelog.txt for all changes nixnote2-2.0.2/package_scripts/webcam_plugin/tar.sh000077500000000000000000000026021315604104400223620ustar00rootroot00000000000000#!/bin/sh version="1.0-1" package_dir=$(cd `dirname $0` && pwd) source_dir="$package_dir/../.." #################################################### # Make sure we are running as root #################################################### if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # Determine which platform we are on arch="i386" case "$(uname -m)" in "x86_64" ) arch="amd64";; esac #Do any parameter overrides while [ -n "$*" ] do eval $1 shift done # Determine which lib directory to use case "$arch" in "amd64" ) lib="lib64";; "i386" ) lib="lib32";; esac ################################################## # Banner page ################################################## echo "**************************************************" echo "Building tar.gz for NixNote $version for $arch" echo "**************************************************" # Cleanup any old stuff if [ -e "$package_dir/nixnote2-webcam_plugin_${version}_${arch}.tar.gz" ] then rm $package_dir/nixnote2-webcam_plugin_${version}_${arch}.tar.gz fi cd $package_dir echo "Building tar" cp $package_dir/install.sh $package_dir/nixnote2/ cp $package_dir/uninstall.sh $package_dir/nixnote2/ tar -czf $package_dir/nixnote2_webcam_plugin_${version}_${arch}.tar.gz ./nixnote2 rm $package_dir/nixnote2/install.sh rm $package_dir/nixnote2/uninstall.sh cd - nixnote2-2.0.2/package_scripts/webcam_plugin/uninstall.sh000077500000000000000000000003351315604104400236060ustar00rootroot00000000000000#!/bin/sh package_dir=$(cd `dirname $0` && pwd) if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi rm /usr/share/nixnote2/plugins/libwebcamplugin.so echo "Uninstall completed" nixnote2-2.0.2/plugins/000077500000000000000000000000001315604104400147405ustar00rootroot00000000000000nixnote2-2.0.2/plugins/hunspell/000077500000000000000000000000001315604104400165725ustar00rootroot00000000000000nixnote2-2.0.2/plugins/hunspell/Hunspell.pro000066400000000000000000000004761315604104400211150ustar00rootroot00000000000000TARGET = ../hunspellplugin CONFIG += plugin TEMPLATE = lib SOURCES += hunspellplugin.cpp \ ../../utilities/spellchecker.cpp HEADERS += hunspellplugin.h \ hunspellinterface.h \ ../../utilities/spellchecker.h LIBS += -lhunspell QMAKE_LFLAGS += -Wl,-soname,libhunspellplugin.so.1 nixnote2-2.0.2/plugins/hunspell/changelog.txt000066400000000000000000000006111315604104400212600ustar00rootroot00000000000000nixnote2-hunspell-plugin (1.1-1) stable; urgency=low * Move plugin location to /usr/lib/nixnote2. -- Randy Baumgarte Tue, 7 Mar 2017 12:00:00 -0400 nixnote2-hunspell-plugin (1.0-1) stable; urgency=low * Initial release. -- Randy Baumgarte Mon, 16 Aug 2016 12:00:00 -0400 nixnote2-2.0.2/plugins/hunspell/hunspellinterface.h000066400000000000000000000027571315604104400224710ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2016 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ // This class is used as a virtual . #ifndef HUNSPELLINTERFACE_H #define HUNSPELLINTERFACE_H #include #include "../../utilities/spellchecker.h" class HunspellInterface { public: virtual ~HunspellInterface() {} virtual void initialize(QString programDictionary, QString userDictionary) = 0; virtual bool spellCheck(QString word, QStringList &suggestions) = 0; virtual void addWord(QString dictionary, QString word) = 0; }; Q_DECLARE_INTERFACE(HunspellInterface, "org.nixnote.NixNote2.HunspellInterface/2.0") #endif // HUNSPELLINTERFACE_H nixnote2-2.0.2/plugins/hunspell/hunspellplugin.cpp000066400000000000000000000033421315604104400223510ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2016 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include #include "hunspellplugin.h" HunspellPlugin::HunspellPlugin() { } // Initialize for use. I don't do it in the constructor because I don't // want to take the time unless the user REALLY wants to use the spell checker. void HunspellPlugin::initialize(QString programDictionary, QString userDictionary) { checker = new SpellChecker(); std::cout << "**************" << checker << std::endl; checker->setup(programDictionary, userDictionary); return; } bool HunspellPlugin::spellCheck(QString word, QStringList &suggestions) { return checker->spellCheck(word, suggestions); } void HunspellPlugin::addWord(QString dictionary, QString word) { return checker->addWord(dictionary, word); } #if QT_VERSION < 0x050000 Q_EXPORT_PLUGIN2(hunspellplugin, HunspellPlugin) #endif nixnote2-2.0.2/plugins/hunspell/hunspellplugin.h000066400000000000000000000031671315604104400220230ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2016 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ // This overrides the virtual plugin HunspellInterface. #ifndef HUNSPELLPLUGIN_H #define HUNSPELLPLUGIN_H #include "hunspellinterface.h" #// Windows Check #ifndef _WIN32 class HunspellPlugin : public QObject, HunspellInterface { Q_OBJECT Q_INTERFACES(HunspellInterface) #if QT_VERSION < 0x050000 #else Q_PLUGIN_METADATA(IID "org.nixnote.NixNote2.HunspellInterface/2.0"); #endif private: SpellChecker *checker; public: HunspellPlugin(); void initialize(QString programDictionary, QString userDictionary); bool spellCheck(QString word, QStringList &suggestions); void addWord(QString dictionary, QString word); }; #endif // end of windows check #endif // HUNSPELLPLUGIN_H nixnote2-2.0.2/plugins/webcam/000077500000000000000000000000001315604104400161765ustar00rootroot00000000000000nixnote2-2.0.2/plugins/webcam/WebCam.pro000066400000000000000000000007551315604104400200650ustar00rootroot00000000000000greaterThan(QT_MAJOR_VERSION,4) { QT += widgets } TARGET = ../webcamplugin CONFIG += plugin TEMPLATE = lib SOURCES += webcamplugin.cpp \ ../../webcam/cvimagewidget.cpp \ ../../dialog/webcamcapturedialog.cpp LIBS += -lopencv_core -lopencv_highgui -lopencv_imgproc HEADERS += webcamplugin.h \ webcaminterface.h \ ../../webcam/cvimagewidget.h \ ../../dialog/webcamcapturedialog.h QMAKE_LFLAGS += -Wl,-soname,libwebcamplugin.so.1 nixnote2-2.0.2/plugins/webcam/changelog.txt000066400000000000000000000006061315604104400206700ustar00rootroot00000000000000nixnote2-webcam-plugin (1.1-1) stable; urgency=low * Move plugin directory to /usr/lib/nixnote2. -- Randy Baumgarte Tue, 7 Mar 2017 12:00:00 -0400 nixnote2-webcam-plugin (1.0-1) stable; urgency=low * Initial release. -- Randy Baumgarte Sat, 16 Jul 2016 12:00:00 -0400 nixnote2-2.0.2/plugins/webcam/webcaminterface.h000066400000000000000000000027071315604104400214740ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2016 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ // This class is used as a virtual . #ifndef WEBCAMINTERFACE_H #define WEBCAMINTERFACE_H #include #include class WebCamInterface { public: virtual ~WebCamInterface() {} virtual void initialize() = 0; virtual bool getImage(QImage &image) = 0; virtual bool isWebcamReady() = 0; virtual void exec() = 0; virtual bool okPressed() = 0; virtual void pictureRefresh() = 0; }; Q_DECLARE_INTERFACE(WebCamInterface, "org.nixnote.NixNote2.WebCamInterface/2.0") #endif // WEBCAMINTERFACE_H nixnote2-2.0.2/plugins/webcam/webcamplugin.cpp000066400000000000000000000036271315604104400213670ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2016 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "webcamplugin.h" #include // Default constructor WebCamPlugin::WebCamPlugin() { initialized=false; } // Update the picture displayed. void WebCamPlugin::pictureRefresh() { if (isWebcamReady()) dialog->pictureRefresh(); } // Check if the webcam is ready for use bool WebCamPlugin::isWebcamReady() { return dialog->webcamReady; } // Initialize for use. I don't do it in the constructor because I don't // want to take the time unless the user REALLY wants to use the webcam. // It also solves the problem of users void WebCamPlugin::initialize() { if (!initialized) dialog = new WebcamCaptureDialog(); initialized=true; return; } bool WebCamPlugin::okPressed() { return dialog->okPressed; } void WebCamPlugin::exec() { dialog->exec(); } bool WebCamPlugin::getImage(QImage &image) { return dialog->webcamImage->getImage(image); } #if QT_VERSION < 0x050000 Q_EXPORT_PLUGIN2(webcamplugin, WebCamPlugin) #endif nixnote2-2.0.2/plugins/webcam/webcamplugin.h000066400000000000000000000031101315604104400210170ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2016 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ // This overrides the virtual plugin WebCamInterface. #ifndef WEBCAMPLUGIN_H #define WEBCAMPLUGIN_H #include "webcaminterface.h" #include "../../dialog/webcamcapturedialog.h" class WebCamPlugin : public QObject, WebCamInterface { Q_OBJECT Q_INTERFACES(WebCamInterface) #if QT_VERSION < 0x050000 #else Q_PLUGIN_METADATA(IID "org.nixnote.NixNote2.WebCamInterface/2.0") #endif private: WebcamCaptureDialog *dialog; bool initialized; public: WebCamPlugin(); void initialize(); bool getImage(QImage &image); bool isWebcamReady(); void exec(); bool okPressed(); void pictureRefresh(); }; #endif // WEBCAMPLUGIN_H nixnote2-2.0.2/qevercloud/000077500000000000000000000000001315604104400154305ustar00rootroot00000000000000nixnote2-2.0.2/qevercloud/AsyncResult.cpp000066400000000000000000000060141315604104400204110ustar00rootroot00000000000000 #include "AsyncResult.h" #include #include #include #include "http.h" #include "EventLoopFinisher.h" #include "qt4helpers.h" QVariant qevercloud::AsyncResult::asIs(QByteArray replyData) { return replyData; } qevercloud::AsyncResult::AsyncResult(QString url, QByteArray postData, qevercloud::AsyncResult::ReadFunctionType readFunction, bool autoDelete, QObject *parent) : QObject(parent), request_(createEvernoteRequest(url)), postData_(postData), readFunction_(readFunction), autoDelete_(autoDelete) { QMetaObject::invokeMethod(this, "start", Qt::QueuedConnection); } qevercloud::AsyncResult::AsyncResult(QNetworkRequest request, QByteArray postData, qevercloud::AsyncResult::ReadFunctionType readFunction, bool autoDelete, QObject *parent) : QObject(parent), request_(request), postData_(postData), readFunction_(readFunction), autoDelete_(autoDelete) { QMetaObject::invokeMethod(this, "start", Qt::QueuedConnection); } bool qevercloud::AsyncResult::waitForFinished(int timeout) { QEventLoop loop; QObject::connect(this, SIGNAL(finished(QVariant,QSharedPointer)), &loop, SLOT(quit())); if(timeout >= 0) { QTimer timer; EventLoopFinisher finisher(&loop, 1); connect(&timer, SIGNAL(timeout()), &finisher, SLOT(stopEventLoop())); timer.setSingleShot(true); timer.setInterval(timeout); timer.start(); return loop.exec(QEventLoop::ExcludeUserInputEvents) == 0; } else { return loop.exec(QEventLoop::ExcludeUserInputEvents) == 0; } } void qevercloud::AsyncResult::start() { ReplyFetcher* f = new ReplyFetcher; QObject::connect(f, QEC_SIGNAL(ReplyFetcher,replyFetched,QObject*), this, QEC_SLOT(AsyncResult,onReplyFetched,QObject*)); f->start(evernoteNetworkAccessManager(), request_, postData_); } void qevercloud::AsyncResult::onReplyFetched(QObject *rp) { ReplyFetcher* reply = qobject_cast(rp); QSharedPointer error; QVariant result; try { if(reply->isError()) { error = QSharedPointer(new EverCloudExceptionData(reply->errorText())); } else if(reply->httpStatusCode() != 200) { error = QSharedPointer(new EverCloudExceptionData(QStringLiteral("HTTP Status Code = %1").arg(reply->httpStatusCode()))); } else { result = readFunction_(reply->receivedData()); } } catch(const EverCloudException& e) { error = e.exceptionData(); } catch(const std::exception& e) { error = QSharedPointer(new EverCloudExceptionData(QStringLiteral("Exception of type \"%1\" with the message: %2").arg(typeid(e).name()).arg(e.what()))); } catch(...) { error = QSharedPointer(new EverCloudExceptionData(QStringLiteral("Unknown exception"))); } emit finished(result, error); reply->deleteLater(); if(autoDelete_) this->deleteLater(); } nixnote2-2.0.2/qevercloud/AsyncResult.h000066400000000000000000000043031315604104400200550ustar00rootroot00000000000000#ifndef QEVERCLOUD_ASYNCRESULT_H #define QEVERCLOUD_ASYNCRESULT_H #include #include "EverCloudException.h" #include "http.h" namespace qevercloud { /** * @brief Returned by asynchonous versions of functions. * * Wait for AsyncResult::finished signal. * * Intended usage is something like this: * * @code NoteStore* ns; Note note; ... QObject::connect(ns->createNoteAsync(note), &AsyncResult::finished, [ns](QVariant result, QSharedPointer error) { if(!error.isNull()) { // do something in case of an error } else { Note note = result.value(); // process returned result } }); @endcode */ class AsyncResult: public QObject { Q_OBJECT Q_DISABLE_COPY(AsyncResult) private: static QVariant asIs(QByteArray replyData); public: /** @cond HIDDEN_SYMBOLS */ typedef QVariant (*ReadFunctionType)(QByteArray replyData); AsyncResult(QString url, QByteArray postData, ReadFunctionType readFunction = AsyncResult::asIs, bool autoDelete = true, QObject *parent = 0); AsyncResult(QNetworkRequest request, QByteArray postData, ReadFunctionType readFunction = AsyncResult::asIs, bool autoDelete = true, QObject *parent = 0); /** @endcond */ /** * @brief Wait for asyncronous operation to complete. * @param timeout * Maximum time to wait in milliseconds. Forever if < 0. * @return true if finished succesfully, flase in case of the timeout */ bool waitForFinished(int timeout = -1); signals: /** * @brief Emitted upon asyncronous call completition. * @param result * @param error * error.isNull() != true in case of an error. See EverCloudExceptionData for more details. * * AsyncResult deletes itself after emitting this signal. You don't have to manage it's lifetime explicitly. */ void finished(QVariant result, QSharedPointer error); /** @cond HIDDEN_SYMBOLS */ private slots: void onReplyFetched(QObject* rp); void start(); private: QNetworkRequest request_; QByteArray postData_; ReadFunctionType readFunction_; bool autoDelete_; /** @endcond */ }; } #endif // AQEVERCLOUD_SYNCRESULT_H nixnote2-2.0.2/qevercloud/EventLoopFinisher.cpp000066400000000000000000000005021315604104400215340ustar00rootroot00000000000000#include "EventLoopFinisher.h" /** @cond HIDDEN_SYMBOLS */ qevercloud::EventLoopFinisher::EventLoopFinisher(QEventLoop* loop, int exitCode, QObject *parent) : QObject(parent), loop_(loop), exitCode_(exitCode) { } void qevercloud::EventLoopFinisher::stopEventLoop() { loop_->exit(exitCode_); } /** @endcond */ nixnote2-2.0.2/qevercloud/EventLoopFinisher.h000066400000000000000000000006761315604104400212150ustar00rootroot00000000000000#ifndef EVENTLOOPFINISHER_H #define EVENTLOOPFINISHER_H #include #include /** @cond HIDDEN_SYMBOLS */ namespace qevercloud { class EventLoopFinisher : public QObject { Q_OBJECT public: explicit EventLoopFinisher(QEventLoop* loop, int exitCode, QObject *parent = 0); public slots: void stopEventLoop(); private: QEventLoop* loop_; int exitCode_; }; /** @endcond */ } #endif // EVENTLOOPFINISHER_H nixnote2-2.0.2/qevercloud/EverCloudException.h000066400000000000000000000115001315604104400213450ustar00rootroot00000000000000#ifndef QEVERCLOUD_EVERCLOUDEXCEPTION_H #define QEVERCLOUD_EVERCLOUDEXCEPTION_H #include #include #include #include #include "qt4helpers.h" namespace qevercloud { class EverCloudExceptionData; /** * All exceptions throws by the library are of this class or its descendants. */ class EverCloudException: public std::exception { protected: mutable QByteArray err_; public: explicit EverCloudException() {} ~EverCloudException() throw() {} explicit EverCloudException(QString err): err_(err.toUtf8()) {} explicit EverCloudException(const std::string& err): err_(err.c_str()) {} explicit EverCloudException(const char* err): err_(err) {} const char* what() const throw() Q_DECL_OVERRIDE {return err_.constData();} virtual QSharedPointer exceptionData() const; }; /** * @brief EverCloudException counterpart for asynchronous API. * * Asynchronous functions cannot throw exceptions so descendants of EverCloudExceptionData are retunded instead * in case of an error. Every exception class has its own counterpart. * The EverCloudExceptionData descendants hierarchy is a copy of the EverCloudException descendants hierarchy. * * The main reason not to use exception classes directly is that dynamic_cast does not work across module (exe, dll, etc) boundaries * in general, while `qobject_cast` do work as expected. That's why I decided to inherit my error classes from QObject. * * In general error checking in asynchronous API look like this: * * @code NoteStore* ns; ... QObject::connect(ns->getNotebook(notebookGuid), &AsyncResult::finished, [](QVariant result, QSharedPointer error) { if(!error.isNull()) { QSharedPointer errorNotFound = error.objectCast(); QSharedPointer errorUser = error.objectCast(); QSharedPointer errorSystem = error.objectCast(); if(!errorNotFound.isNull()) { qDebug() << "notebook not found" << errorNotFound.identifier << errorNotFound.key; } else if(!errorUser.isNull()) { qDebug() << errorUser.errorMessage; } else if(!errorSystem.isNull()) { if(errorSystem.errorCode == EDAMErrorCode::RATE_LIMIT_REACHED) { qDebug() << "Evernote API rate limits are reached"; } else if(errorSystem.errorCode == EDAMErrorCode::AUTH_EXPIRED) { qDebug() << "Authorization token is inspired"; } else { // some other Evernote trouble qDebug() << errorSystem.errorMessage; } } else { // some unexpected error qDebug() << error.errorMessage; } } else { // success } }); @endcode */ class EverCloudExceptionData: public QObject { Q_OBJECT Q_DISABLE_COPY(EverCloudExceptionData) public: /** * Contains an error message. It's the std::exception::what() counterpart. */ QString errorMessage; explicit EverCloudExceptionData(QString err) : errorMessage(err) {} /** * If you want to throw an exception that corresponds to a recrived EverCloudExceptionData * descendant than call this function. Do not use `throw` statement, it's not polymorphic. */ virtual void throwException() const {throw EverCloudException(errorMessage);} }; inline QSharedPointer EverCloudException::exceptionData() const { return QSharedPointer(new EverCloudExceptionData(what())); } /** * All exception sent by Evernote servers (as opposed to other error conditions, for example http errors) are * descendants of this class. */ class EvernoteException: public EverCloudException { public: explicit EvernoteException(): EverCloudException() {} explicit EvernoteException(QString err): EverCloudException(err) {} explicit EvernoteException(const std::string& err): EverCloudException(err) {} explicit EvernoteException(const char* err): EverCloudException(err) {} virtual QSharedPointer exceptionData() const Q_DECL_OVERRIDE; }; /** Asynchronous API conterpart of EvernoteException. See EverCloudExceptionData for more details.*/ class EvernoteExceptionData: public EverCloudExceptionData { Q_OBJECT Q_DISABLE_COPY(EvernoteExceptionData) public: explicit EvernoteExceptionData(QString err) : EverCloudExceptionData(err) {} virtual void throwException() const Q_DECL_OVERRIDE {throw EvernoteException(errorMessage);} }; inline QSharedPointer EvernoteException::exceptionData() const { return QSharedPointer(new EvernoteExceptionData(what())); } } #endif // QEVERCLOUD_EVERCLOUDEXCEPTION_H nixnote2-2.0.2/qevercloud/Optional.h000066400000000000000000000212041315604104400173650ustar00rootroot00000000000000#ifndef QEVERCLOUD_OPTIONAL_H #define QEVERCLOUD_OPTIONAL_H #include "EverCloudException.h" #include namespace qevercloud { /** * Supports optional values. * * Most of the fields in the Evernote API structs are optional. But С++ does not support this notion directly. * * To implement the concept of optional values conventional Thrift C++ wrapper uses a special field of a struct type * where each field is of type bool with the same name as a field in the struct. This bool flag indicated was * the field with the same name in the outer struct assigned or not. * * While this method have its advantages (obviousness and simplicity) I found it very inconvenient to work with. * You have to check by hand that both values (value itself and its __isset flag) are in sync. * There is no checks whatsoever against an error and such an error is too easy to make. * * So for my library I created a special class that supports the optional value notion explicitly. * Basically Optional class just holds a bool value that tracks the fact that a value was assigned. But this tracking * is done automatically and attempts to use unissigned values throw exceptions. In this way errors are much harder to * make and it's harder for them to slip through testing unnoticed too. * */ template class Optional { bool isSet_; T value_; public: /** Default constructor. * Default Optional is not set. */ Optional(): isSet_(false), value_(T()) {} /** * Copy constructor. */ Optional(const Optional& o): isSet_(o.isSet_), value_(o.value_) {} /** * Template copy constructor. Allows to be initialized with Optional of any compatible type. */ template Optional(const Optional& o): isSet_(o.isSet_), value_(o.value_) {} /** * Initialization with a value of the type T. Note: it's implicit. */ Optional(const T& value): isSet_(true), value_(value) {} /** * Template initialization with a value of any compatible type. */ template Optional(const X& value): isSet_(true), value_(value) {} /** * Assignment. */ Optional& operator=(const Optional& o) { value_ = o.value_; isSet_ = o.isSet_; return *this; } /** * Template assignment with an Optional of any compatible value. */ template Optional& operator=(const Optional& o) { value_ = o.value_; isSet_ = o.isSet_; return *this; } /** * Assignment with a value of the type T. */ Optional& operator=(const T& value) { value_ = value; isSet_ = true; return *this; } /** * Template assignment with a value of any compatible type. */ template Optional& operator=(const X& value) { value_ = value; isSet_ = true; return *this; } /** * Implicit conversion of Optional to T. * * const version. */ operator const T&() const { if(!isSet_) throw EverCloudException("qevercloud::Optional: nonexistent value access"); return value_; } /** * Implicit conversion of Optional to T. * * Note: a reference is returned, not a copy. */ operator T&() { if(!isSet_) throw EverCloudException("qevercloud::Optional: nonexistent value access"); return value_; } /** * Returs a reference to the holded value. * * const version. * */ const T& ref() const { if(!isSet_) throw EverCloudException("qevercloud::Optional: nonexistent value access"); return value_; } /** * Returs reference to the holded value. * * There are contexts in C++ where impicit type conversions can't help. For example: * * @code Optional l; for(auto s : l); // you will hear from your compiler @endcode * * Explicit type conversion can be used... * * @code Optional l; for(auto s : static_cast(l)); // ugh... @endcode * * ... but this is indeed ugly as hell. * * So I implemented ref() function that returns a reference to the holded value. * @code Optional l; for(auto s : l.ref()); // not ideal but OK @endcode */ T& ref() { if(!isSet_) throw EverCloudException("qevercloud::Optional: nonexistent value access"); return value_; } /** * @brief Checks if value is set. * @return true if Optional have been assigned a value and false otherwise. * * Access to an unassigned ("not set") Optional lead to an exception. */ bool isSet() const {return isSet_;} /** * Clears an Optional. * * @code Optional o(1); o.clear(); cout << o; // exception @endcode */ void clear() {isSet_ = false; value_ = T();} /** * Fast way to initialize an Optional with a default value. * * It's very useful for structs. * * @code struct S2 {int f;}; struct S {int f1; Optional f2}; Optional o; // o.isSet() != ture // without init() it's cumbersome to access struct fields // it's especially true for nested Optionals o = S(); // now o is set o->f2 = S2(); // and o.f2 is set o->f2->f = 1; // so at last it can be used // with init() it's simpler o.init()->f2.init()->f = 1; @endcode * @return reference to itself */ Optional& init() {isSet_ = true; value_ = T(); return *this;} /** * Two syntatic constructs come to mind to use for implementation of access to a struct's/class's field directly from Optional. * * One is the dereference operator. * This is what boost::optional uses. While it's conceptually nice * I found it to be not a very convenient way to refer to structs, especially nested ones. * So I overloaded the operator-> and use smart pointer semantics. * * @code struct S1 {int f1;}; struct S2 {Optional f2;}; Optional o; *((*o).f2).f1; // boost way, not implemented o->f2->f1; // QEverCloud way @endcode * * I admit, boost::optional is much more elegant overall. It uses pointer semantics quite clearly and * in an instantly understandable way. It's universal (* works for any type and not just structs). There is * no need for implicit type concersions and so there is no subtleties because of it. And so on. * * But then referring to struct fields is a chore. And this is the most common use case of Optionals in QEverCloud. * * So I decided to use non-obvious-on-the-first-sight semantics for my Optional. IMO it's much more convenient when gotten used to. * */ T* operator->() { if(!isSet_) throw EverCloudException("qevercloud::Optional: nonexistent value access"); return &value_; } /** * const version. */ const T* operator->() const { if(!isSet_) throw EverCloudException("qevercloud::Optional: nonexistent value access"); return &value_; } /** * The function is sometimes useful to simplify checking for the value being set. * @param defaultValue * The value to return if Optional is not set. * @return Optional value if set and defaultValue otherwise. */ T value(T defaultValue = T()) const { return isSet_ ? value_ : defaultValue; } /** * Two optionals are equal if they are both not set or have * equal values. * * I do not define `operator==` due to not easily resolvable conflicts with `operator T&`. * * Note that `optional == other_optional` may throw but `optional.isEqual(other_optional)` will not. */ bool isEqual(const Optional & other) const { if(isSet_ != other.isSet_) return false; return !isSet_ || (value_ == other.value_); } template friend class Optional; friend void swap(Optional& first, Optional& second) { using std::swap; swap(first.isSet_, second.isSet_); swap(first.value_, second.value_); } #ifdef Q_COMPILER_RVALUE_REFS Optional(Optional&& other) { swap(*this, other); } Optional& operator=(Optional&& other) { swap(*this, other); return *this; } Optional(T&& other) { using std::swap; isSet_ = true; swap(value_, other); } Optional& operator=(T&& other) { using std::swap; isSet_ = true; swap(value_, other); return *this; } #endif }; } #endif // QEVERCLOUD_OPTIONAL_H nixnote2-2.0.2/qevercloud/QEverCloud.pro000066400000000000000000000017411315604104400201660ustar00rootroot00000000000000TARGET = QEverCloud TEMPLATE = lib CONFIG += staticlib QT += network widgets use_qwebengine { QT += webenginewidgets webengine DEFINES += USE_QT_WEB_ENGINE } else { QT += webkitwidgets webkit } CONFIG += silent CONFIG -= debug_and_release debug_and_release_target DESTDIR = bin MOC_DIR = moc OBJECTS_DIR = obj UI_DIR = ui RCC_DIR = rcc HEADERS += \ include/QEverCloud.h \ include/QEverCloudOAuth.h \ oauth.h \ thrift.h \ http.h \ public.h \ exceptions.h \ globals.h \ impl.h \ thumbnail.h \ AsyncResult.h \ Optional.h \ EverCloudException.h \ qt4helpers.h \ EventLoopFinisher.h SOURCES += \ exceptions.cpp \ oauth.cpp \ http.cpp \ services_nongenerated.cpp \ AsyncResult.cpp \ EventLoopFinisher.cpp SOURCES += generated/constants.cpp generated/services.cpp generated/types.cpp HEADERS += generated/constants.h generated/services.h generated/types.h generated/types_impl.h generated/EDAMErrorCode.h nixnote2-2.0.2/qevercloud/exceptions.cpp000066400000000000000000000251661315604104400203270ustar00rootroot00000000000000 #include "generated/types.h" #include "generated/types_impl.h" #include "impl.h" #include "Optional.h" /** @cond HIDDEN_SYMBOLS */ namespace qevercloud { QByteArray strEDAMErrorCode(EDAMErrorCode::type errorCode) { switch(errorCode) { case EDAMErrorCode::UNKNOWN: return "UNKNOWN"; case EDAMErrorCode::BAD_DATA_FORMAT: return "BAD_DATA_FORMAT"; case EDAMErrorCode::PERMISSION_DENIED: return "PERMISSION_DENIED"; case EDAMErrorCode::INTERNAL_ERROR: return "INTERNAL_ERROR"; case EDAMErrorCode::DATA_REQUIRED: return "DATA_REQUIRED"; case EDAMErrorCode::LIMIT_REACHED: return "LIMIT_REACHED"; case EDAMErrorCode::QUOTA_REACHED: return "QUOTA_REACHED"; case EDAMErrorCode::INVALID_AUTH: return "INVALID_AUTH"; case EDAMErrorCode::AUTH_EXPIRED: return "AUTH_EXPIRED"; case EDAMErrorCode::DATA_CONFLICT: return "DATA_CONFLICT"; case EDAMErrorCode::ENML_VALIDATION: return "ENML_VALIDATION"; case EDAMErrorCode::SHARD_UNAVAILABLE: return "SHARD_UNAVAILABLE"; case EDAMErrorCode::LEN_TOO_SHORT: return "LEN_TOO_SHORT"; case EDAMErrorCode::LEN_TOO_LONG: return "LEN_TOO_LONG"; case EDAMErrorCode::TOO_FEW: return "TOO_FEW"; case EDAMErrorCode::TOO_MANY: return "TOO_MANY"; case EDAMErrorCode::UNSUPPORTED_OPERATION: return "UNSUPPORTED_OPERATION"; case EDAMErrorCode::TAKEN_DOWN: return "TAKEN_DOWN"; case EDAMErrorCode::RATE_LIMIT_REACHED: return "RATE_LIMIT_REACHED"; default: return "???"; } } const char *EDAMUserException::what() const throw() { if(err_.isEmpty()) { err_ = "EDAMUserException: " + strEDAMErrorCode(errorCode); if(parameter.isSet()) { err_ += " parameter=" + parameter->toUtf8(); } } return EvernoteException::what(); } const char *EDAMSystemException::what() const throw() { if(err_.isEmpty()) { err_ = "EDAMSystemException: " + strEDAMErrorCode(errorCode); if(message.isSet()) { err_ += " " + message->toUtf8(); } if(rateLimitDuration.isSet()) { err_ += QStringLiteral(" rateLimitDuration= %1 sec.").arg(rateLimitDuration).toUtf8(); } } return EvernoteException::what(); } const char * EDAMNotFoundException::what() const throw() { if(err_.isEmpty()) { err_ = "EDAMNotFoundException: "; if(identifier.isSet()) { err_ += " identifier=" + identifier->toUtf8(); } if(key.isSet()) { err_ += " key=" + key->toUtf8(); } } return EvernoteException::what(); } ThriftException readThriftException(ThriftBinaryBufferReader& r) { QString name; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(name); QString err; ThriftException::Type::type type = ThriftException::Type::UNKNOWN; while(true) { r.readFieldBegin(name, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; switch(fieldId) { case 1: if(fieldType == ThriftFieldType::T_STRING) { QString str; r.readString(str); err = str; } else { r.skip(fieldType); } break; case 2: if(fieldType == ThriftFieldType::T_I32) { qint32 t; r.readI32(t); type = static_cast(t); } else { r.skip(fieldType); } break; default: r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); return ThriftException(type, err); } void readEDAMUserException(ThriftBinaryBufferReader& r, EDAMUserException& e) { QString name; ThriftFieldType::type fieldType; qint16 fieldId; bool errorCode_isset = false; r.readStructBegin(name); while(true) { r.readFieldBegin(name, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; switch(fieldId) { case 2: if(fieldType == ThriftFieldType::T_STRING) { QString str; r.readString(str); e.parameter = str; } else { r.skip(fieldType); } break; case 1: if(fieldType == ThriftFieldType::T_I32) { qint32 t; r.readI32(t); e.errorCode = static_cast(t); errorCode_isset = true; } else { r.skip(fieldType); } break; default: r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); if(!errorCode_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, QStringLiteral("EDAMUserException.errorCode has no value")); } void readEDAMSystemException(ThriftBinaryBufferReader& r, EDAMSystemException& e) { QString name; ThriftFieldType::type fieldType; qint16 fieldId; bool errorCode_isset = false; r.readStructBegin(name); while(true) { r.readFieldBegin(name, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; switch(fieldId) { case 2: if(fieldType == ThriftFieldType::T_STRING) { QString str; r.readString(str); e.message = str; } else { r.skip(fieldType); } break; case 1: if(fieldType == ThriftFieldType::T_I32) { qint32 t; r.readI32(t); e.errorCode = static_cast(t); errorCode_isset = true; } else { r.skip(fieldType); } break; case 3: if(fieldType == ThriftFieldType::T_I32) { qint32 t; r.readI32(t); e.rateLimitDuration = t; errorCode_isset = true; } else { r.skip(fieldType); } break; default: r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); if(!errorCode_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, QStringLiteral("EDAMSystemException.errorCode has no value")); } void readEDAMNotFoundException(ThriftBinaryBufferReader& r, EDAMNotFoundException& e) { QString name; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(name); while(true) { r.readFieldBegin(name, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; switch(fieldId) { case 1: if(fieldType == ThriftFieldType::T_STRING) { QString str; r.readString(str); e.identifier = str; } else { r.skip(fieldType); } break; case 2: if(fieldType == ThriftFieldType::T_STRING) { QString str; r.readString(str); e.key = str; } else { r.skip(fieldType); } break; default: r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } QSharedPointer EDAMUserException::exceptionData() const { return QSharedPointer(new EDAMUserExceptionData(what(), errorCode, parameter)); } void EDAMUserExceptionData::throwException() const { EDAMUserException e; e.errorCode = errorCode; e.parameter = parameter; throw e; } QSharedPointer EDAMSystemException::exceptionData() const { return QSharedPointer(new EDAMSystemExceptionData(what(), errorCode, message, rateLimitDuration)); } void EDAMSystemExceptionData::throwException() const { EDAMSystemException e; e.errorCode = errorCode; e.message = message; e.rateLimitDuration = rateLimitDuration; throw e; } QSharedPointer EDAMNotFoundException::exceptionData() const { return QSharedPointer(new EDAMNotFoundExceptionData(what(), identifier, key)); } void EDAMNotFoundExceptionData::throwException() const { EDAMNotFoundException e; e.identifier = identifier; e.key = key; throw e; } const char *ThriftException::what() const throw() { if (err_.isEmpty()) { switch (type_) { case Type::UNKNOWN : return "ThriftException: Unknown application exception"; case Type::UNKNOWN_METHOD : return "ThriftException: Unknown method"; case Type::INVALID_MESSAGE_TYPE : return "ThriftException: Invalid message type"; case Type::WRONG_METHOD_NAME : return "ThriftException: Wrong method name"; case Type::BAD_SEQUENCE_ID : return "ThriftException: Bad sequence identifier"; case Type::MISSING_RESULT : return "ThriftException: Missing result"; case Type::INVALID_DATA : return "ThriftException: Invalid data"; default : return "ThriftException: (Invalid exception type)"; }; } else { return err_.constData(); } } void throwEDAMSystemException(const EDAMSystemException& e) { if(e.errorCode == EDAMErrorCode::AUTH_EXPIRED) { EDAMSystemExceptionAuthExpired ee; ee.errorCode = e.errorCode; ee.message = e.message; ee.rateLimitDuration = e.rateLimitDuration; throw ee; } if(e.errorCode == EDAMErrorCode::RATE_LIMIT_REACHED) { EDAMSystemExceptionRateLimitReached ee; ee.errorCode = e.errorCode; ee.message = e.message; ee.rateLimitDuration = e.rateLimitDuration; throw ee; } throw e; } QSharedPointer EDAMSystemExceptionRateLimitReached::exceptionData() const { return QSharedPointer(new EDAMSystemExceptionRateLimitReachedData(what(), errorCode, message, rateLimitDuration)); } void EDAMSystemExceptionRateLimitReachedData::throwException() const { EDAMSystemExceptionRateLimitReached e; e.errorCode = errorCode; e.message = message; e.rateLimitDuration = rateLimitDuration; throw e; } QSharedPointer EDAMSystemExceptionAuthExpired::exceptionData() const { return QSharedPointer(new EDAMSystemExceptionAuthExpiredData(what(), errorCode, message, rateLimitDuration)); } void EDAMSystemExceptionAuthExpiredData::throwException() const { EDAMSystemExceptionAuthExpired e; e.errorCode = errorCode; e.message = message; e.rateLimitDuration = rateLimitDuration; throw e; } } /** @endcond */ nixnote2-2.0.2/qevercloud/exceptions.h000066400000000000000000000123011315604104400177570ustar00rootroot00000000000000#ifndef QEVERCLOUD_EXCEPTIONS_H #define QEVERCLOUD_EXCEPTIONS_H #include #include #include #include "Optional.h" #include "./generated/EDAMErrorCode.h" #include "EverCloudException.h" #include "./generated/types.h" namespace qevercloud { /** * Errors of the Thrift protocol level. It could be wrongly formatted parameters * or return values for example. */ class ThriftException : public EverCloudException { public: struct Type { enum type { UNKNOWN = 0, UNKNOWN_METHOD = 1, INVALID_MESSAGE_TYPE = 2, WRONG_METHOD_NAME = 3, BAD_SEQUENCE_ID = 4, MISSING_RESULT = 5, INTERNAL_ERROR = 6, PROTOCOL_ERROR = 7, INVALID_DATA = 8 }; }; ThriftException() : EverCloudException(), type_(Type::UNKNOWN) {} ThriftException(Type::type type) : EverCloudException(), type_(type) {} ThriftException(Type::type type, QString message) : EverCloudException(message), type_(type) {} Type::type type() const { return type_; } const char* what() const throw() Q_DECL_OVERRIDE; virtual QSharedPointer exceptionData() const Q_DECL_OVERRIDE; protected: Type::type type_; }; /** Asynchronous API conterpart of ThriftException. See EverCloudExceptionData for more details.*/ class ThriftExceptionData: public EverCloudExceptionData { Q_OBJECT Q_DISABLE_COPY(ThriftExceptionData) public: ThriftException::Type::type type; explicit ThriftExceptionData(QString err, ThriftException::Type::type type) : EverCloudExceptionData(err), type(type) {} virtual void throwException() const Q_DECL_OVERRIDE {throw ThriftException(type, errorMessage);} }; inline QSharedPointer ThriftException::exceptionData() const { return QSharedPointer(new ThriftExceptionData(what(), type())); } /** Asynchronous API conterpart of EDAMUserException. See EverCloudExceptionData for more details.*/ class EDAMUserExceptionData: public EvernoteExceptionData { Q_OBJECT Q_DISABLE_COPY(EDAMUserExceptionData) public: EDAMErrorCode::type errorCode; Optional parameter; explicit EDAMUserExceptionData(QString err, EDAMErrorCode::type errorCode, Optional parameter) : EvernoteExceptionData(err), errorCode(errorCode), parameter(parameter) {} virtual void throwException() const Q_DECL_OVERRIDE; }; /** Asynchronous API conterpart of EDAMSystemException. See EverCloudExceptionData for more details.*/ class EDAMSystemExceptionData: public EvernoteExceptionData { Q_OBJECT Q_DISABLE_COPY(EDAMSystemExceptionData) public: EDAMErrorCode::type errorCode; Optional message; Optional rateLimitDuration; explicit EDAMSystemExceptionData(QString err, EDAMErrorCode::type errorCode, Optional message, Optional rateLimitDuration) : EvernoteExceptionData(err), errorCode(errorCode), message(message), rateLimitDuration(rateLimitDuration) {} virtual void throwException() const Q_DECL_OVERRIDE; }; /** Asynchronous API conterpart of EDAMNotFoundException. See EverCloudExceptionData for more details.*/ class EDAMNotFoundExceptionData: public EvernoteExceptionData { Q_OBJECT Q_DISABLE_COPY(EDAMNotFoundExceptionData) public: Optional identifier; Optional key; explicit EDAMNotFoundExceptionData(QString err, Optional identifier, Optional key) : EvernoteExceptionData(err), identifier(identifier), key(key) {} virtual void throwException() const Q_DECL_OVERRIDE; }; /** * EDAMSystemException for `errorCode = RATE_LIMIT_REACHED` */ class EDAMSystemExceptionRateLimitReached: public EDAMSystemException { public: virtual QSharedPointer exceptionData() const Q_DECL_OVERRIDE; }; /** Asynchronous API conterpart of EDAMSystemExceptionRateLimitReached. See EverCloudExceptionData for more details.*/ class EDAMSystemExceptionRateLimitReachedData: public EDAMSystemExceptionData { Q_OBJECT Q_DISABLE_COPY(EDAMSystemExceptionRateLimitReachedData) public: explicit EDAMSystemExceptionRateLimitReachedData(QString err, EDAMErrorCode::type errorCode, Optional message, Optional rateLimitDuration) : EDAMSystemExceptionData(err, errorCode, message, rateLimitDuration) {} virtual void throwException() const Q_DECL_OVERRIDE; }; /** * EDAMSystemException for `errorCode = AUTH_EXPIRED` */ class EDAMSystemExceptionAuthExpired: public EDAMSystemException { public: virtual QSharedPointer exceptionData() const Q_DECL_OVERRIDE; }; /** Asynchronous API conterpart of EDAMSystemExceptionAuthExpired. See EverCloudExceptionData for more details.*/ class EDAMSystemExceptionAuthExpiredData: public EDAMSystemExceptionData { Q_OBJECT Q_DISABLE_COPY(EDAMSystemExceptionAuthExpiredData) public: explicit EDAMSystemExceptionAuthExpiredData(QString err, EDAMErrorCode::type errorCode, Optional message, Optional rateLimitDuration) : EDAMSystemExceptionData(err, errorCode, message, rateLimitDuration) {} virtual void throwException() const Q_DECL_OVERRIDE; }; } #endif // EXCEPTIONS_H nixnote2-2.0.2/qevercloud/generated/000077500000000000000000000000001315604104400173665ustar00rootroot00000000000000nixnote2-2.0.2/qevercloud/generated/EDAMErrorCode.h000066400000000000000000000055661315604104400220660ustar00rootroot00000000000000// This file is generated from Evernote Thrift API and is a part of the QEverCloud project #ifndef QEVERCLOUD_GENERATED_EDAMERRORCODE_H #define QEVERCLOUD_GENERATED_EDAMERRORCODE_H namespace qevercloud { /** * Numeric codes indicating the type of error that occurred on the * service. *
*
UNKNOWN
*
No information available about the error
*
BAD_DATA_FORMAT
*
The format of the request data was incorrect
*
PERMISSION_DENIED
*
Not permitted to perform action
*
INTERNAL_ERROR
*
Unexpected problem with the service
*
DATA_REQUIRED
*
A required parameter/field was absent
*
LIMIT_REACHED
*
Operation denied due to data model limit
*
QUOTA_REACHED
*
Operation denied due to user storage limit
*
INVALID_AUTH
*
Username and/or password incorrect
*
AUTH_EXPIRED
*
Authentication token expired
*
DATA_CONFLICT
*
Change denied due to data model conflict
*
ENML_VALIDATION
*
Content of submitted note was malformed
*
SHARD_UNAVAILABLE
*
Service shard with account data is temporarily down
*
LEN_TOO_SHORT
*
Operation denied due to data model limit, where something such * as a string length was too short
*
LEN_TOO_LONG
*
Operation denied due to data model limit, where something such * as a string length was too long
*
TOO_FEW
*
Operation denied due to data model limit, where there were * too few of something.
*
TOO_MANY
*
Operation denied due to data model limit, where there were * too many of something.
*
UNSUPPORTED_OPERATION
*
Operation denied because it is currently unsupported.
*
TAKEN_DOWN
*
Operation denied because access to the corresponding object is * prohibited in response to a take-down notice.
*
RATE_LIMIT_REACHED
*
Operation denied because the calling application has reached * its hourly API call limit for this user.
*
*/ struct EDAMErrorCode { enum type { UNKNOWN = 1, BAD_DATA_FORMAT = 2, PERMISSION_DENIED = 3, INTERNAL_ERROR = 4, DATA_REQUIRED = 5, LIMIT_REACHED = 6, QUOTA_REACHED = 7, INVALID_AUTH = 8, AUTH_EXPIRED = 9, DATA_CONFLICT = 10, ENML_VALIDATION = 11, SHARD_UNAVAILABLE = 12, LEN_TOO_SHORT = 13, LEN_TOO_LONG = 14, TOO_FEW = 15, TOO_MANY = 16, UNSUPPORTED_OPERATION = 17, TAKEN_DOWN = 18, RATE_LIMIT_REACHED = 19 }; }; } #endif // QEVERCLOUD_GENERATED_EDAMERRORCODE_H nixnote2-2.0.2/qevercloud/generated/constants.cpp000066400000000000000000000240701315604104400221110ustar00rootroot00000000000000// This file is generated from Evernote Thrift API and is a part of the QEverCloud project #include "constants.h" #include "../impl.h" namespace qevercloud { // Limits.thrift const qint32 EDAM_ATTRIBUTE_LEN_MIN = 1; const qint32 EDAM_ATTRIBUTE_LEN_MAX = 4096; const QString EDAM_ATTRIBUTE_REGEX = "^[^\\p{Cc}\\p{Zl}\\p{Zp}]{1,4096}$"; const qint32 EDAM_ATTRIBUTE_LIST_MAX = 100; const qint32 EDAM_ATTRIBUTE_MAP_MAX = 100; const qint32 EDAM_GUID_LEN_MIN = 36; const qint32 EDAM_GUID_LEN_MAX = 36; const QString EDAM_GUID_REGEX = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"; const qint32 EDAM_EMAIL_LEN_MIN = 6; const qint32 EDAM_EMAIL_LEN_MAX = 255; const QString EDAM_EMAIL_LOCAL_REGEX = "^[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*$"; const QString EDAM_EMAIL_DOMAIN_REGEX = "^[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*\\.([A-Za-z]{2,})$"; const QString EDAM_EMAIL_REGEX = "^[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*\\.([A-Za-z]{2,})$"; const QString EDAM_VAT_REGEX = "^((AT)?U[0-9]{8}|(BE)?0?[0-9]{9}|(BG)?[0-9]{9,10}|(CY)?[0-9]{8}L|(CZ)?[0-9]{8,10}|(DE)?[0-9]{9}|(DK)?[0-9]{8}|(EE)?[0-9]{9}|(EL|GR)?[0-9]{9}|(ES)?[0-9A-Z][0-9]{7}[0-9A-Z]|(FI)?[0-9]{8}|(FR)?[0-9A-Z]{2}[0-9]{9}|(GB)?([0-9]{9}([0-9]{3})?|[A-Z]{2}[0-9]{3})|(HU)?[0-9]{8}|(IE)?[0-9]S[0-9]{5}L|(IT)?[0-9]{11}|(LT)?([0-9]{9}|[0-9]{12})|(LU)?[0-9]{8}|(LV)?[0-9]{11}|(MT)?[0-9]{8}|(NL)?[0-9]{9}B[0-9]{2}|(PL)?[0-9]{10}|(PT)?[0-9]{9}|(RO)?[0-9]{2,10}|(SE)?[0-9]{12}|(SI)?[0-9]{8}|(SK)?[0-9]{10})|[0-9]{9}MVA|[0-9]{6}|CHE[0-9]{9}(TVA|MWST|IVA)$"; const qint32 EDAM_TIMEZONE_LEN_MIN = 1; const qint32 EDAM_TIMEZONE_LEN_MAX = 32; const QString EDAM_TIMEZONE_REGEX = "^([A-Za-z_-]+(/[A-Za-z_-]+)*)|(GMT(-|\\+)[0-9]{1,2}(:[0-9]{2})?)$"; const qint32 EDAM_MIME_LEN_MIN = 3; const qint32 EDAM_MIME_LEN_MAX = 255; const QString EDAM_MIME_REGEX = "^[A-Za-z]+/[A-Za-z0-9._+-]+$"; const QString EDAM_MIME_TYPE_GIF = "image/gif"; const QString EDAM_MIME_TYPE_JPEG = "image/jpeg"; const QString EDAM_MIME_TYPE_PNG = "image/png"; const QString EDAM_MIME_TYPE_WAV = "audio/wav"; const QString EDAM_MIME_TYPE_MP3 = "audio/mpeg"; const QString EDAM_MIME_TYPE_AMR = "audio/amr"; const QString EDAM_MIME_TYPE_AAC = "audio/aac"; const QString EDAM_MIME_TYPE_M4A = "audio/mp4"; const QString EDAM_MIME_TYPE_MP4_VIDEO = "video/mp4"; const QString EDAM_MIME_TYPE_INK = "application/vnd.evernote.ink"; const QString EDAM_MIME_TYPE_PDF = "application/pdf"; const QString EDAM_MIME_TYPE_DEFAULT = "application/octet-stream"; const QSet< QString > EDAM_MIME_TYPES = QSet< QString >() << EDAM_MIME_TYPE_GIF << EDAM_MIME_TYPE_JPEG << EDAM_MIME_TYPE_PNG << EDAM_MIME_TYPE_WAV << EDAM_MIME_TYPE_MP3 << EDAM_MIME_TYPE_AMR << EDAM_MIME_TYPE_INK << EDAM_MIME_TYPE_PDF << EDAM_MIME_TYPE_MP4_VIDEO << EDAM_MIME_TYPE_AAC << EDAM_MIME_TYPE_M4A; const QSet< QString > EDAM_INDEXABLE_RESOURCE_MIME_TYPES = QSet< QString >() << "application/msword" << "application/mspowerpoint" << "application/excel" << "application/vnd.ms-word" << "application/vnd.ms-powerpoint" << "application/vnd.ms-excel" << "application/vnd.openxmlformats-officedocument.wordprocessingml.document" << "application/vnd.openxmlformats-officedocument.presentationml.presentation" << "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" << "application/vnd.apple.pages" << "application/vnd.apple.numbers" << "application/vnd.apple.keynote" << "application/x-iwork-pages-sffpages" << "application/x-iwork-numbers-sffnumbers" << "application/x-iwork-keynote-sffkey"; const qint32 EDAM_SEARCH_QUERY_LEN_MIN = 0; const qint32 EDAM_SEARCH_QUERY_LEN_MAX = 1024; const QString EDAM_SEARCH_QUERY_REGEX = "^[^\\p{Cc}\\p{Zl}\\p{Zp}]{0,1024}$"; const qint32 EDAM_HASH_LEN = 16; const qint32 EDAM_USER_USERNAME_LEN_MIN = 1; const qint32 EDAM_USER_USERNAME_LEN_MAX = 64; const QString EDAM_USER_USERNAME_REGEX = "^[a-z0-9]([a-z0-9_-]{0,62}[a-z0-9])?$"; const qint32 EDAM_USER_NAME_LEN_MIN = 1; const qint32 EDAM_USER_NAME_LEN_MAX = 255; const QString EDAM_USER_NAME_REGEX = "^[^\\p{Cc}\\p{Zl}\\p{Zp}]{1,255}$"; const qint32 EDAM_TAG_NAME_LEN_MIN = 1; const qint32 EDAM_TAG_NAME_LEN_MAX = 100; const QString EDAM_TAG_NAME_REGEX = "^[^,\\p{Cc}\\p{Z}]([^,\\p{Cc}\\p{Zl}\\p{Zp}]{0,98}[^,\\p{Cc}\\p{Z}])?$"; const qint32 EDAM_NOTE_TITLE_LEN_MIN = 1; const qint32 EDAM_NOTE_TITLE_LEN_MAX = 255; const QString EDAM_NOTE_TITLE_REGEX = "^[^\\p{Cc}\\p{Z}]([^\\p{Cc}\\p{Zl}\\p{Zp}]{0,253}[^\\p{Cc}\\p{Z}])?$"; const qint32 EDAM_NOTE_CONTENT_LEN_MIN = 0; const qint32 EDAM_NOTE_CONTENT_LEN_MAX = 5242880; const qint32 EDAM_APPLICATIONDATA_NAME_LEN_MIN = 3; const qint32 EDAM_APPLICATIONDATA_NAME_LEN_MAX = 32; const qint32 EDAM_APPLICATIONDATA_VALUE_LEN_MIN = 0; const qint32 EDAM_APPLICATIONDATA_VALUE_LEN_MAX = 4092; const qint32 EDAM_APPLICATIONDATA_ENTRY_LEN_MAX = 4095; const QString EDAM_APPLICATIONDATA_NAME_REGEX = "^[A-Za-z0-9_.-]{3,32}$"; const QString EDAM_APPLICATIONDATA_VALUE_REGEX = "^[^\\p{Cc}]{0,4092}$"; const qint32 EDAM_NOTEBOOK_NAME_LEN_MIN = 1; const qint32 EDAM_NOTEBOOK_NAME_LEN_MAX = 100; const QString EDAM_NOTEBOOK_NAME_REGEX = "^[^\\p{Cc}\\p{Z}]([^\\p{Cc}\\p{Zl}\\p{Zp}]{0,98}[^\\p{Cc}\\p{Z}])?$"; const qint32 EDAM_NOTEBOOK_STACK_LEN_MIN = 1; const qint32 EDAM_NOTEBOOK_STACK_LEN_MAX = 100; const QString EDAM_NOTEBOOK_STACK_REGEX = "^[^\\p{Cc}\\p{Z}]([^\\p{Cc}\\p{Zl}\\p{Zp}]{0,98}[^\\p{Cc}\\p{Z}])?$"; const qint32 EDAM_PUBLISHING_URI_LEN_MIN = 1; const qint32 EDAM_PUBLISHING_URI_LEN_MAX = 255; const QString EDAM_PUBLISHING_URI_REGEX = "^[a-zA-Z0-9.~_+-]{1,255}$"; const QSet< QString > EDAM_PUBLISHING_URI_PROHIBITED = QSet< QString >() << ".."; const qint32 EDAM_PUBLISHING_DESCRIPTION_LEN_MIN = 1; const qint32 EDAM_PUBLISHING_DESCRIPTION_LEN_MAX = 200; const QString EDAM_PUBLISHING_DESCRIPTION_REGEX = "^[^\\p{Cc}\\p{Z}]([^\\p{Cc}\\p{Zl}\\p{Zp}]{0,198}[^\\p{Cc}\\p{Z}])?$"; const qint32 EDAM_SAVED_SEARCH_NAME_LEN_MIN = 1; const qint32 EDAM_SAVED_SEARCH_NAME_LEN_MAX = 100; const QString EDAM_SAVED_SEARCH_NAME_REGEX = "^[^\\p{Cc}\\p{Z}]([^\\p{Cc}\\p{Zl}\\p{Zp}]{0,98}[^\\p{Cc}\\p{Z}])?$"; const qint32 EDAM_USER_PASSWORD_LEN_MIN = 6; const qint32 EDAM_USER_PASSWORD_LEN_MAX = 64; const QString EDAM_USER_PASSWORD_REGEX = "^[A-Za-z0-9!#$%&'()*+,./:;<=>?@^_`{|}~\\[\\]\\\\-]{6,64}$"; const qint32 EDAM_BUSINESS_URI_LEN_MAX = 32; const qint32 EDAM_NOTE_TAGS_MAX = 100; const qint32 EDAM_NOTE_RESOURCES_MAX = 1000; const qint32 EDAM_USER_TAGS_MAX = 100000; const qint32 EDAM_BUSINESS_TAGS_MAX = 100000; const qint32 EDAM_USER_SAVED_SEARCHES_MAX = 100; const qint32 EDAM_USER_NOTES_MAX = 100000; const qint32 EDAM_BUSINESS_NOTES_MAX = 500000; const qint32 EDAM_USER_NOTEBOOKS_MAX = 250; const qint32 EDAM_BUSINESS_NOTEBOOKS_MAX = 5000; const qint32 EDAM_USER_RECENT_MAILED_ADDRESSES_MAX = 10; const qint32 EDAM_USER_MAIL_LIMIT_DAILY_FREE = 50; const qint32 EDAM_USER_MAIL_LIMIT_DAILY_PREMIUM = 200; const qint64 EDAM_USER_UPLOAD_LIMIT_FREE = 62914560; const qint64 EDAM_USER_UPLOAD_LIMIT_PREMIUM = 1073741824; const qint64 EDAM_USER_UPLOAD_LIMIT_BUSINESS = 2147483647; const qint32 EDAM_NOTE_SIZE_MAX_FREE = 26214400; const qint32 EDAM_NOTE_SIZE_MAX_PREMIUM = 104857600; const qint32 EDAM_RESOURCE_SIZE_MAX_FREE = 26214400; const qint32 EDAM_RESOURCE_SIZE_MAX_PREMIUM = 104857600; const qint32 EDAM_USER_LINKED_NOTEBOOK_MAX = 100; const qint32 EDAM_USER_LINKED_NOTEBOOK_MAX_PREMIUM = 250; const qint32 EDAM_NOTEBOOK_SHARED_NOTEBOOK_MAX = 250; const qint32 EDAM_NOTE_CONTENT_CLASS_LEN_MIN = 3; const qint32 EDAM_NOTE_CONTENT_CLASS_LEN_MAX = 32; const QString EDAM_NOTE_CONTENT_CLASS_REGEX = "^[A-Za-z0-9_.-]{3,32}$"; const QString EDAM_HELLO_APP_CONTENT_CLASS_PREFIX = "evernote.hello."; const QString EDAM_FOOD_APP_CONTENT_CLASS_PREFIX = "evernote.food."; const QString EDAM_CONTENT_CLASS_HELLO_ENCOUNTER = "evernote.hello.encounter"; const QString EDAM_CONTENT_CLASS_HELLO_PROFILE = "evernote.hello.profile"; const QString EDAM_CONTENT_CLASS_FOOD_MEAL = "evernote.food.meal"; const QString EDAM_CONTENT_CLASS_SKITCH_PREFIX = "evernote.skitch"; const QString EDAM_CONTENT_CLASS_SKITCH = "evernote.skitch"; const QString EDAM_CONTENT_CLASS_SKITCH_PDF = "evernote.skitch.pdf"; const QString EDAM_CONTENT_CLASS_PENULTIMATE_PREFIX = "evernote.penultimate."; const QString EDAM_CONTENT_CLASS_PENULTIMATE_NOTEBOOK = "evernote.penultimate.notebook"; const qint32 EDAM_RELATED_PLAINTEXT_LEN_MIN = 1; const qint32 EDAM_RELATED_PLAINTEXT_LEN_MAX = 131072; const qint32 EDAM_RELATED_MAX_NOTES = 25; const qint32 EDAM_RELATED_MAX_NOTEBOOKS = 1; const qint32 EDAM_RELATED_MAX_TAGS = 25; const qint32 EDAM_BUSINESS_NOTEBOOK_DESCRIPTION_LEN_MIN = 1; const qint32 EDAM_BUSINESS_NOTEBOOK_DESCRIPTION_LEN_MAX = 200; const QString EDAM_BUSINESS_NOTEBOOK_DESCRIPTION_REGEX = "^[^\\p{Cc}\\p{Z}]([^\\p{Cc}\\p{Zl}\\p{Zp}]{0,198}[^\\p{Cc}\\p{Z}])?$"; const qint32 EDAM_BUSINESS_PHONE_NUMBER_LEN_MAX = 20; const qint32 EDAM_PREFERENCE_NAME_LEN_MIN = 3; const qint32 EDAM_PREFERENCE_NAME_LEN_MAX = 32; const qint32 EDAM_PREFERENCE_VALUE_LEN_MIN = 1; const qint32 EDAM_PREFERENCE_VALUE_LEN_MAX = 1024; const qint32 EDAM_MAX_PREFERENCES = 100; const qint32 EDAM_MAX_VALUES_PER_PREFERENCE = 256; const QString EDAM_PREFERENCE_NAME_REGEX = "^[A-Za-z0-9_.-]{3,32}$"; const QString EDAM_PREFERENCE_VALUE_REGEX = "^[^\\p{Cc}]{1,1024}$"; const QString EDAM_PREFERENCE_SHORTCUTS = "evernote.shortcuts"; const qint32 EDAM_PREFERENCE_SHORTCUTS_MAX_VALUES = 250; const qint32 EDAM_DEVICE_ID_LEN_MAX = 32; const QString EDAM_DEVICE_ID_REGEX = "^[^\\p{Cc}]{1,32}$"; const qint32 EDAM_DEVICE_DESCRIPTION_LEN_MAX = 64; const QString EDAM_DEVICE_DESCRIPTION_REGEX = "^[^\\p{Cc}]{1,64}$"; const qint32 EDAM_SEARCH_SUGGESTIONS_MAX = 10; const qint32 EDAM_SEARCH_SUGGESTIONS_PREFIX_LEN_MAX = 1024; const qint32 EDAM_SEARCH_SUGGESTIONS_PREFIX_LEN_MIN = 2; // Types.thrift const QString CLASSIFICATION_RECIPE_USER_NON_RECIPE = "000"; const QString CLASSIFICATION_RECIPE_USER_RECIPE = "001"; const QString CLASSIFICATION_RECIPE_SERVICE_RECIPE = "002"; const QString EDAM_NOTE_SOURCE_WEB_CLIP = "web.clip"; const QString EDAM_NOTE_SOURCE_MAIL_CLIP = "mail.clip"; const QString EDAM_NOTE_SOURCE_MAIL_SMTP_GATEWAY = "mail.smtp"; // UserStore.thrift const qint16 EDAM_VERSION_MAJOR = 1; const qint16 EDAM_VERSION_MINOR = 25; } nixnote2-2.0.2/qevercloud/generated/constants.h000066400000000000000000000572201315604104400215610ustar00rootroot00000000000000// This file is generated from Evernote Thrift API and is a part of the QEverCloud project #ifndef QEVERCLOUD_GENERATED_CONSTANTS_H #define QEVERCLOUD_GENERATED_CONSTANTS_H #include #include #include #include #include #include #include #include "../Optional.h" namespace qevercloud { // Limits.thrift /** * Minimum length of any string-based attribute, in Unicode chars */ extern const qint32 EDAM_ATTRIBUTE_LEN_MIN; /** * Maximum length of any string-based attribute, in Unicode chars */ extern const qint32 EDAM_ATTRIBUTE_LEN_MAX; /** * Any string-based attribute must match the provided regular expression. * This excludes all Unicode line endings and control characters. */ extern const QString EDAM_ATTRIBUTE_REGEX; /** * The maximum number of values that can be stored in a list-based attribute * (e.g. see UserAttributes.recentMailedAddresses) */ extern const qint32 EDAM_ATTRIBUTE_LIST_MAX; /** * The maximum number of entries that can be stored in a map-based attribute * such as applicationData fields in Resources and Notes. */ extern const qint32 EDAM_ATTRIBUTE_MAP_MAX; /** * The minimum length of a GUID generated by the Evernote service */ extern const qint32 EDAM_GUID_LEN_MIN; /** * The maximum length of a GUID generated by the Evernote service */ extern const qint32 EDAM_GUID_LEN_MAX; /** * GUIDs generated by the Evernote service will match the provided pattern */ extern const QString EDAM_GUID_REGEX; /** * The minimum length of any email address */ extern const qint32 EDAM_EMAIL_LEN_MIN; /** * The maximum length of any email address */ extern const qint32 EDAM_EMAIL_LEN_MAX; /** * A regular expression that matches the part of an email address before * the '@' symbol. */ extern const QString EDAM_EMAIL_LOCAL_REGEX; /** * A regular expression that matches the part of an email address after * the '@' symbol. */ extern const QString EDAM_EMAIL_DOMAIN_REGEX; /** * A regular expression that must match any email address given to Evernote. * Email addresses must comply with RFC 2821 and 2822. */ extern const QString EDAM_EMAIL_REGEX; /** * A regular expression that must match any VAT ID given to Evernote. * ref http://en.wikipedia.org/wiki/VAT_identification_number * ref http://my.safaribooksonline.com/book/programming/regular-expressions/9780596802837/4dot-validation-and-formatting/id2995136 */ extern const QString EDAM_VAT_REGEX; /** * The minimum length of a timezone specification string */ extern const qint32 EDAM_TIMEZONE_LEN_MIN; /** * The maximum length of a timezone specification string */ extern const qint32 EDAM_TIMEZONE_LEN_MAX; /** * Any timezone string given to Evernote must match the provided pattern. * This permits either a locale-based standard timezone or a GMT offset. * E.g.:
    *
  • America/Los_Angeles
  • *
  • GMT+08:00
  • *
*/ extern const QString EDAM_TIMEZONE_REGEX; /** * The minimum length of any MIME type string given to Evernote */ extern const qint32 EDAM_MIME_LEN_MIN; /** * The maximum length of any MIME type string given to Evernote */ extern const qint32 EDAM_MIME_LEN_MAX; /** * Any MIME type string given to Evernote must match the provided pattern. * E.g.: image/gif */ extern const QString EDAM_MIME_REGEX; /** Canonical MIME type string for GIF image resources */ extern const QString EDAM_MIME_TYPE_GIF; /** Canonical MIME type string for JPEG image resources */ extern const QString EDAM_MIME_TYPE_JPEG; /** Canonical MIME type string for PNG image resources */ extern const QString EDAM_MIME_TYPE_PNG; /** Canonical MIME type string for WAV audio resources */ extern const QString EDAM_MIME_TYPE_WAV; /** Canonical MIME type string for MP3 audio resources */ extern const QString EDAM_MIME_TYPE_MP3; /** Canonical MIME type string for AMR audio resources */ extern const QString EDAM_MIME_TYPE_AMR; /** Canonical MIME type string for AAC audio resources */ extern const QString EDAM_MIME_TYPE_AAC; /** Canonical MIME type string for MP4 audio resources */ extern const QString EDAM_MIME_TYPE_M4A; /** Canonical MIME type string for MP4 video resources */ extern const QString EDAM_MIME_TYPE_MP4_VIDEO; /** Canonical MIME type string for Evernote Ink resources */ extern const QString EDAM_MIME_TYPE_INK; /** Canonical MIME type string for PDF resources */ extern const QString EDAM_MIME_TYPE_PDF; /** MIME type used for attachments of an unspecified type */ extern const QString EDAM_MIME_TYPE_DEFAULT; /** * The set of resource MIME types that are expected to be handled * correctly by all of the major Evernote client applications. */ extern const QSet< QString > EDAM_MIME_TYPES; /** * The set of MIME types that Evernote will parse and index for * searching. With exception of images, and PDFs, which are * handled in a different way. */ extern const QSet< QString > EDAM_INDEXABLE_RESOURCE_MIME_TYPES; /** * The minimum length of a user search query string in Unicode chars */ extern const qint32 EDAM_SEARCH_QUERY_LEN_MIN; /** * The maximum length of a user search query string in Unicode chars */ extern const qint32 EDAM_SEARCH_QUERY_LEN_MAX; /** * Search queries must match the provided pattern. This is used for * both ad-hoc queries and SavedSearch.query fields. * This excludes all control characters and line/paragraph separators. */ extern const QString EDAM_SEARCH_QUERY_REGEX; /** * The exact length of a MD5 hash checksum, in binary bytes. * This is the exact length that must be matched for any binary hash * value. */ extern const qint32 EDAM_HASH_LEN; /** * The minimum length of an Evernote username */ extern const qint32 EDAM_USER_USERNAME_LEN_MIN; /** * The maximum length of an Evernote username */ extern const qint32 EDAM_USER_USERNAME_LEN_MAX; /** * Any Evernote User.username field must match this pattern. This * restricts usernames to a format that could permit use as a domain * name component. E.g. "username.whatever.evernote.com" */ extern const QString EDAM_USER_USERNAME_REGEX; /** * Minimum length of the User.name field */ extern const qint32 EDAM_USER_NAME_LEN_MIN; /** * Maximum length of the User.name field */ extern const qint32 EDAM_USER_NAME_LEN_MAX; /** * The User.name field must match this pattern, which excludes line * endings and control characters. */ extern const QString EDAM_USER_NAME_REGEX; /** * The minimum length of a Tag.name, in Unicode characters */ extern const qint32 EDAM_TAG_NAME_LEN_MIN; /** * The maximum length of a Tag.name, in Unicode characters */ extern const qint32 EDAM_TAG_NAME_LEN_MAX; /** * All Tag.name fields must match this pattern. * This excludes control chars, commas or line/paragraph separators. * The string may not begin or end with whitespace. */ extern const QString EDAM_TAG_NAME_REGEX; /** * The minimum length of a Note.title, in Unicode characters */ extern const qint32 EDAM_NOTE_TITLE_LEN_MIN; /** * The maximum length of a Note.title, in Unicode characters */ extern const qint32 EDAM_NOTE_TITLE_LEN_MAX; /** * All Note.title fields must match this pattern. * This excludes control chars or line/paragraph separators. * The string may not begin or end with whitespace. */ extern const QString EDAM_NOTE_TITLE_REGEX; /** * Minimum length of a Note.content field. * Note.content fields must comply with the ENML DTD. */ extern const qint32 EDAM_NOTE_CONTENT_LEN_MIN; /** * Maximum length of a Note.content field * Note.content fields must comply with the ENML DTD. */ extern const qint32 EDAM_NOTE_CONTENT_LEN_MAX; /** * Minimum length of an application name, which is the key in an * applicationData LazyMap found in entities such as Resources and * Notes. */ extern const qint32 EDAM_APPLICATIONDATA_NAME_LEN_MIN; /** * Maximum length of an application name, which is the key in an * applicationData LazyMap found in entities such as Resources and * Notes. */ extern const qint32 EDAM_APPLICATIONDATA_NAME_LEN_MAX; /** * Minimum length of an applicationData value in a LazyMap, found * in entities such as Resources and Notes. */ extern const qint32 EDAM_APPLICATIONDATA_VALUE_LEN_MIN; /** * Maximum length of an applicationData value in a LazyMap, found * in entities such as Resources and Notes. Note, however, that * the sum of the size of hte key and value is constrained by * EDAM_APPLICATIONDATA_ENTRY_LEN_MAX, so the maximum length, in * practice, depends upon the key value being used. */ extern const qint32 EDAM_APPLICATIONDATA_VALUE_LEN_MAX; /** * The total length of an entry in an applicationData LazyMap, which * is the sum of the length of the key and the value for the entry. */ extern const qint32 EDAM_APPLICATIONDATA_ENTRY_LEN_MAX; /** * An application name must match this regex. An application * name is the key portion of an entry in an applicationData * map as found in entities such as Resources and Notes. * Note that even if both the name and value regexes match, * it is still necessary to check the sum of the lengths * against EDAM_APPLICATIONDATA_ENTRY_LEN_MAX. */ extern const QString EDAM_APPLICATIONDATA_NAME_REGEX; /** * An applicationData map value must match this regex. * Note that even if both the name and value regexes match, * it is still necessary to check the sum of the lengths * against EDAM_APPLICATIONDATA_ENTRY_LEN_MAX. */ extern const QString EDAM_APPLICATIONDATA_VALUE_REGEX; /** * The minimum length of a Notebook.name, in Unicode characters */ extern const qint32 EDAM_NOTEBOOK_NAME_LEN_MIN; /** * The maximum length of a Notebook.name, in Unicode characters */ extern const qint32 EDAM_NOTEBOOK_NAME_LEN_MAX; /** * All Notebook.name fields must match this pattern. * This excludes control chars or line/paragraph separators. * The string may not begin or end with whitespace. */ extern const QString EDAM_NOTEBOOK_NAME_REGEX; /** * The minimum length of a Notebook.stack, in Unicode characters */ extern const qint32 EDAM_NOTEBOOK_STACK_LEN_MIN; /** * The maximum length of a Notebook.stack, in Unicode characters */ extern const qint32 EDAM_NOTEBOOK_STACK_LEN_MAX; /** * All Notebook.stack fields must match this pattern. * This excludes control chars or line/paragraph separators. * The string may not begin or end with whitespace. */ extern const QString EDAM_NOTEBOOK_STACK_REGEX; /** * The minimum length of a public notebook URI component */ extern const qint32 EDAM_PUBLISHING_URI_LEN_MIN; /** * The maximum length of a public notebook URI component */ extern const qint32 EDAM_PUBLISHING_URI_LEN_MAX; /** * A public notebook URI component must match the provided pattern */ extern const QString EDAM_PUBLISHING_URI_REGEX; /** * The set of strings that may not be used as a publishing URI */ extern const QSet< QString > EDAM_PUBLISHING_URI_PROHIBITED; /** * The minimum length of a Publishing.publicDescription field. */ extern const qint32 EDAM_PUBLISHING_DESCRIPTION_LEN_MIN; /** * The maximum length of a Publishing.publicDescription field. */ extern const qint32 EDAM_PUBLISHING_DESCRIPTION_LEN_MAX; /** * Any public notebook's Publishing.publicDescription field must match * this pattern. * No control chars or line/paragraph separators, and can't start or * end with whitespace. */ extern const QString EDAM_PUBLISHING_DESCRIPTION_REGEX; /** * The minimum length of a SavedSearch.name field */ extern const qint32 EDAM_SAVED_SEARCH_NAME_LEN_MIN; /** * The maximum length of a SavedSearch.name field */ extern const qint32 EDAM_SAVED_SEARCH_NAME_LEN_MAX; /** * SavedSearch.name fields must match this pattern. * No control chars or line/paragraph separators, and can't start or * end with whitespace. */ extern const QString EDAM_SAVED_SEARCH_NAME_REGEX; /** * The minimum length of an Evernote user password */ extern const qint32 EDAM_USER_PASSWORD_LEN_MIN; /** * The maximum length of an Evernote user password */ extern const qint32 EDAM_USER_PASSWORD_LEN_MAX; /** * Evernote user passwords must match this regular expression */ extern const QString EDAM_USER_PASSWORD_REGEX; /** * The maximum length of an Evernote Business URI */ extern const qint32 EDAM_BUSINESS_URI_LEN_MAX; /** * The maximum number of Tags per Note */ extern const qint32 EDAM_NOTE_TAGS_MAX; /** * The maximum number of Resources per Note */ extern const qint32 EDAM_NOTE_RESOURCES_MAX; /** * Maximum number of Tags per account */ extern const qint32 EDAM_USER_TAGS_MAX; /** * Maximum number of Tags per business account. */ extern const qint32 EDAM_BUSINESS_TAGS_MAX; /** * Maximum number of SavedSearches per account */ extern const qint32 EDAM_USER_SAVED_SEARCHES_MAX; /** * Maximum number of Notes per user */ extern const qint32 EDAM_USER_NOTES_MAX; /** * Maximum number of Notes per business account */ extern const qint32 EDAM_BUSINESS_NOTES_MAX; /** * Maximum number of Notebooks per user */ extern const qint32 EDAM_USER_NOTEBOOKS_MAX; /** * Maximum number of Notebooks in a business account */ extern const qint32 EDAM_BUSINESS_NOTEBOOKS_MAX; /** * Maximum number of recent email addresses that are maintained * (see UserAttributes.recentMailedAddresses) */ extern const qint32 EDAM_USER_RECENT_MAILED_ADDRESSES_MAX; /** * The number of emails of any type that can be sent by a user with a Free * account from the service per day. If an email is sent to two different * recipients, this counts as two emails. */ extern const qint32 EDAM_USER_MAIL_LIMIT_DAILY_FREE; /** * The number of emails of any type that can be sent by a user with a Premium * account from the service per day. If an email is sent to two different * recipients, this counts as two emails. */ extern const qint32 EDAM_USER_MAIL_LIMIT_DAILY_PREMIUM; /** * The number of bytes of new data that may be uploaded to a Free user's * account each month. */ extern const qint64 EDAM_USER_UPLOAD_LIMIT_FREE; /** * The number of bytes of new data that may be uploaded to a Premium user's * account each month. */ extern const qint64 EDAM_USER_UPLOAD_LIMIT_PREMIUM; /** * The number of bytes of new data that may be uploaded to a Business user's * personal account each month. Note that content uploaded into the Business * notebooks by the user does not count against this limit. */ extern const qint64 EDAM_USER_UPLOAD_LIMIT_BUSINESS; /** * Maximum total size of a Note that can be added to a Free account. * The size of a note is calculated as: * ENML content length (in Unicode characters) plus the sum of all resource * sizes (in bytes). */ extern const qint32 EDAM_NOTE_SIZE_MAX_FREE; /** * Maximum total size of a Note that can be added to a Premium account. * The size of a note is calculated as: * ENML content length (in Unicode characters) plus the sum of all resource * sizes (in bytes). */ extern const qint32 EDAM_NOTE_SIZE_MAX_PREMIUM; /** * Maximum size of a resource, in bytes, for Free accounts */ extern const qint32 EDAM_RESOURCE_SIZE_MAX_FREE; /** * Maximum size of a resource, in bytes, for Premium accounts */ extern const qint32 EDAM_RESOURCE_SIZE_MAX_PREMIUM; /** * Maximum number of linked notebooks per account, for a free * account. */ extern const qint32 EDAM_USER_LINKED_NOTEBOOK_MAX; /** * Maximum number of linked notebooks per account, for a premium * account. Users who are part of an active business are also * covered under "premium". */ extern const qint32 EDAM_USER_LINKED_NOTEBOOK_MAX_PREMIUM; /** * Maximum number of shared notebooks per notebook */ extern const qint32 EDAM_NOTEBOOK_SHARED_NOTEBOOK_MAX; /** * The minimum length of the content class attribute of a note. */ extern const qint32 EDAM_NOTE_CONTENT_CLASS_LEN_MIN; /** * The maximum length of the content class attribute of a note. */ extern const qint32 EDAM_NOTE_CONTENT_CLASS_LEN_MAX; /** * The regular expression that the content class of a note must match * to be valid. */ extern const QString EDAM_NOTE_CONTENT_CLASS_REGEX; /** * The content class prefix used for all notes created by Evernote Hello. * This prefix can be used to assemble individual content class strings, * or can be used to create a wildcard search to get all notes created by * Hello. When performing a wildcard search via filtered sync chunks or * search strings, the * character must be appended to this constant. */ extern const QString EDAM_HELLO_APP_CONTENT_CLASS_PREFIX; /** * The content class prefix used for all notes created by Evernote Food. * This prefix can be used to assemble individual content class strings, * or can be used to create a wildcard search to get all notes created by * Food. When performing a wildcard search via filtered sync chunks or * search strings, the * character must be appended to this constant. */ extern const QString EDAM_FOOD_APP_CONTENT_CLASS_PREFIX; /** * The content class prefix used for structured notes created by Evernote * Hello that represents an encounter with a person. When performing a * wildcard search via filtered sync chunks or search strings, the * * character must be appended to this constant. */ extern const QString EDAM_CONTENT_CLASS_HELLO_ENCOUNTER; /** * The content class prefix used for structured notes created by Evernote * Hello that represents the user's profile. When performing a * wildcard search via filtered sync chunks or search strings, the * * character must be appended to this constant. */ extern const QString EDAM_CONTENT_CLASS_HELLO_PROFILE; /** * The content class prefix used for structured notes created by * Evernote Food that captures the experience of a particular meal. * When performing a wildcard search via filtered sync chunks or search * strings, the * character must be appended to this constant. */ extern const QString EDAM_CONTENT_CLASS_FOOD_MEAL; /** * The content class prefix used for structured notes created by Evernote * Skitch. When performing a wildcard search via filtered sync chunks * or search strings, the * character must be appended to this constant. */ extern const QString EDAM_CONTENT_CLASS_SKITCH_PREFIX; /** * The content class value used for structured image notes created by Evernote * Skitch. */ extern const QString EDAM_CONTENT_CLASS_SKITCH; /** * The content class value used for structured PDF notes created by Evernote * Skitch. */ extern const QString EDAM_CONTENT_CLASS_SKITCH_PDF; /** * The content class prefix used for structured notes created by Evernote * Penultimate. When performing a wildcard search via filtered sync chunks * or search strings, the * character must be appended to this constant. */ extern const QString EDAM_CONTENT_CLASS_PENULTIMATE_PREFIX; /** * The content class value used for structured notes created by Evernote * Penultimate that represents a Penultimate notebook. */ extern const QString EDAM_CONTENT_CLASS_PENULTIMATE_NOTEBOOK; /** * The minimum length of the plain text in a findRelated query, assuming that * plaintext is being provided. */ extern const qint32 EDAM_RELATED_PLAINTEXT_LEN_MIN; /** * The maximum length of the plain text in a findRelated query, assuming that * plaintext is being provided. */ extern const qint32 EDAM_RELATED_PLAINTEXT_LEN_MAX; /** * The maximum number of notes that will be returned from a findRelated() * query. */ extern const qint32 EDAM_RELATED_MAX_NOTES; /** * The maximum number of notebooks that will be returned from a findRelated() * query. */ extern const qint32 EDAM_RELATED_MAX_NOTEBOOKS; /** * The maximum number of tags that will be returned from a findRelated() query. */ extern const qint32 EDAM_RELATED_MAX_TAGS; /** * The minimum length, in Unicode characters, of a description for a business * notebook. */ extern const qint32 EDAM_BUSINESS_NOTEBOOK_DESCRIPTION_LEN_MIN; /** * The maximum length, in Unicode characters, of a description for a business * notebook. */ extern const qint32 EDAM_BUSINESS_NOTEBOOK_DESCRIPTION_LEN_MAX; /** * All business notebook descriptions must match this pattern. * This excludes control chars or line/paragraph separators. * The string may not begin or end with whitespace. */ extern const QString EDAM_BUSINESS_NOTEBOOK_DESCRIPTION_REGEX; /** * The maximum length of a business phone number. */ extern const qint32 EDAM_BUSINESS_PHONE_NUMBER_LEN_MAX; /** * Minimum length of a preference name */ extern const qint32 EDAM_PREFERENCE_NAME_LEN_MIN; /** * Maximum length of a preference name */ extern const qint32 EDAM_PREFERENCE_NAME_LEN_MAX; /** * Minimum length of a preference value */ extern const qint32 EDAM_PREFERENCE_VALUE_LEN_MIN; /** * Maximum length of a preference value */ extern const qint32 EDAM_PREFERENCE_VALUE_LEN_MAX; /** * Maximum number of name/value pairs allowed */ extern const qint32 EDAM_MAX_PREFERENCES; /** * Maximum number of values per preference name */ extern const qint32 EDAM_MAX_VALUES_PER_PREFERENCE; /** * A preference name must match this regex. */ extern const QString EDAM_PREFERENCE_NAME_REGEX; /** * A preference value must match this regex. */ extern const QString EDAM_PREFERENCE_VALUE_REGEX; /** * The name of the preferences entry that contains shortcuts. */ extern const QString EDAM_PREFERENCE_SHORTCUTS; /** * The maximum number of shortcuts that a user may have. */ extern const qint32 EDAM_PREFERENCE_SHORTCUTS_MAX_VALUES; /** * Maximum length of the device identifier string associated with long sessions. */ extern const qint32 EDAM_DEVICE_ID_LEN_MAX; /** * Regular expression for device identifier strings associated with long sessions. */ extern const QString EDAM_DEVICE_ID_REGEX; /** * Maximum length of the device description string associated with long sessions. */ extern const qint32 EDAM_DEVICE_DESCRIPTION_LEN_MAX; /** * Regular expression for device description strings associated with long sessions. */ extern const QString EDAM_DEVICE_DESCRIPTION_REGEX; /** * Maximum number of search suggestions that can be returned */ extern const qint32 EDAM_SEARCH_SUGGESTIONS_MAX; /** * Maximum length of the search suggestion prefix */ extern const qint32 EDAM_SEARCH_SUGGESTIONS_PREFIX_LEN_MAX; /** * Minimum length of the search suggestion prefix */ extern const qint32 EDAM_SEARCH_SUGGESTIONS_PREFIX_LEN_MIN; // Types.thrift /** * A value for the "recipe" key in the "classifications" map in NoteAttributes * that indicates the user has classified a note as being a non-recipe. */ extern const QString CLASSIFICATION_RECIPE_USER_NON_RECIPE; /** * A value for the "recipe" key in the "classifications" map in NoteAttributes * that indicates the user has classified a note as being a recipe. */ extern const QString CLASSIFICATION_RECIPE_USER_RECIPE; /** * A value for the "recipe" key in the "classifications" map in NoteAttributes * that indicates the Evernote service has classified a note as being a recipe. */ extern const QString CLASSIFICATION_RECIPE_SERVICE_RECIPE; /** * Standardized value for the 'source' NoteAttribute for notes that * were clipped from the web in some manner. */ extern const QString EDAM_NOTE_SOURCE_WEB_CLIP; /** * Standardized value for the 'source' NoteAttribute for notes that * were clipped from an email message. */ extern const QString EDAM_NOTE_SOURCE_MAIL_CLIP; /** * Standardized value for the 'source' NoteAttribute for notes that * were created via email sent to Evernote's email interface. */ extern const QString EDAM_NOTE_SOURCE_MAIL_SMTP_GATEWAY; // UserStore.thrift /** * The major version number for the current revision of the EDAM protocol. * Clients pass this to the service using UserStore.checkVersion at the * beginning of a session to confirm that they are not out of date. */ extern const qint16 EDAM_VERSION_MAJOR; /** * The minor version number for the current revision of the EDAM protocol. * Clients pass this to the service using UserStore.checkVersion at the * beginning of a session to confirm that they are not out of date. */ extern const qint16 EDAM_VERSION_MINOR; } #endif // QEVERCLOUD_GENERATED_CONSTANTS_H nixnote2-2.0.2/qevercloud/generated/services.cpp000066400000000000000000012663641315604104400217370ustar00rootroot00000000000000// This file is generated from Evernote Thrift API and is a part of the QEverCloud project #include "services.h" #include "../impl.h" #include "types_impl.h" namespace qevercloud { QByteArray NoteStore_getSyncState_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getSyncState", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getSyncState_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } SyncState NoteStore_getSyncState_readReply(QByteArray reply) { bool resultIsSet = false; SyncState result = SyncState(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getSyncState") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; SyncState v; readSyncState(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getSyncState: missing result")); return result; } QVariant NoteStore_getSyncState_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getSyncState_readReply(reply)); } SyncState NoteStore::getSyncState(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getSyncState_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); return NoteStore_getSyncState_readReply(reply); } AsyncResult* NoteStore::getSyncStateAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getSyncState_prepareParams(authenticationToken); return new AsyncResult(url_, params, NoteStore_getSyncState_readReplyAsync); } QByteArray NoteStore_getSyncStateWithMetrics_prepareParams(QString authenticationToken, const ClientUsageMetrics& clientMetrics) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getSyncStateWithMetrics", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getSyncStateWithMetrics_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("clientMetrics", ThriftFieldType::T_STRUCT, 2); writeClientUsageMetrics(w, clientMetrics); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } SyncState NoteStore_getSyncStateWithMetrics_readReply(QByteArray reply) { bool resultIsSet = false; SyncState result = SyncState(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getSyncStateWithMetrics") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; SyncState v; readSyncState(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getSyncStateWithMetrics: missing result")); return result; } QVariant NoteStore_getSyncStateWithMetrics_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getSyncStateWithMetrics_readReply(reply)); } SyncState NoteStore::getSyncStateWithMetrics(const ClientUsageMetrics& clientMetrics, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getSyncStateWithMetrics_prepareParams(authenticationToken, clientMetrics); QByteArray reply = askEvernote(url_, params); return NoteStore_getSyncStateWithMetrics_readReply(reply); } AsyncResult* NoteStore::getSyncStateWithMetricsAsync(const ClientUsageMetrics& clientMetrics, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getSyncStateWithMetrics_prepareParams(authenticationToken, clientMetrics); return new AsyncResult(url_, params, NoteStore_getSyncStateWithMetrics_readReplyAsync); } QByteArray NoteStore_getSyncChunk_prepareParams(QString authenticationToken, qint32 afterUSN, qint32 maxEntries, bool fullSyncOnly) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getSyncChunk", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getSyncChunk_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("afterUSN", ThriftFieldType::T_I32, 2); w.writeI32(afterUSN); w.writeFieldEnd(); w.writeFieldBegin("maxEntries", ThriftFieldType::T_I32, 3); w.writeI32(maxEntries); w.writeFieldEnd(); w.writeFieldBegin("fullSyncOnly", ThriftFieldType::T_BOOL, 4); w.writeBool(fullSyncOnly); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } SyncChunk NoteStore_getSyncChunk_readReply(QByteArray reply) { bool resultIsSet = false; SyncChunk result = SyncChunk(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getSyncChunk") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; SyncChunk v; readSyncChunk(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getSyncChunk: missing result")); return result; } QVariant NoteStore_getSyncChunk_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getSyncChunk_readReply(reply)); } SyncChunk NoteStore::getSyncChunk(qint32 afterUSN, qint32 maxEntries, bool fullSyncOnly, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getSyncChunk_prepareParams(authenticationToken, afterUSN, maxEntries, fullSyncOnly); QByteArray reply = askEvernote(url_, params); return NoteStore_getSyncChunk_readReply(reply); } AsyncResult* NoteStore::getSyncChunkAsync(qint32 afterUSN, qint32 maxEntries, bool fullSyncOnly, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getSyncChunk_prepareParams(authenticationToken, afterUSN, maxEntries, fullSyncOnly); return new AsyncResult(url_, params, NoteStore_getSyncChunk_readReplyAsync); } QByteArray NoteStore_getFilteredSyncChunk_prepareParams(QString authenticationToken, qint32 afterUSN, qint32 maxEntries, const SyncChunkFilter& filter) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getFilteredSyncChunk", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getFilteredSyncChunk_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("afterUSN", ThriftFieldType::T_I32, 2); w.writeI32(afterUSN); w.writeFieldEnd(); w.writeFieldBegin("maxEntries", ThriftFieldType::T_I32, 3); w.writeI32(maxEntries); w.writeFieldEnd(); w.writeFieldBegin("filter", ThriftFieldType::T_STRUCT, 4); writeSyncChunkFilter(w, filter); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } SyncChunk NoteStore_getFilteredSyncChunk_readReply(QByteArray reply) { bool resultIsSet = false; SyncChunk result = SyncChunk(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getFilteredSyncChunk") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; SyncChunk v; readSyncChunk(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getFilteredSyncChunk: missing result")); return result; } QVariant NoteStore_getFilteredSyncChunk_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getFilteredSyncChunk_readReply(reply)); } SyncChunk NoteStore::getFilteredSyncChunk(qint32 afterUSN, qint32 maxEntries, const SyncChunkFilter& filter, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getFilteredSyncChunk_prepareParams(authenticationToken, afterUSN, maxEntries, filter); QByteArray reply = askEvernote(url_, params); return NoteStore_getFilteredSyncChunk_readReply(reply); } AsyncResult* NoteStore::getFilteredSyncChunkAsync(qint32 afterUSN, qint32 maxEntries, const SyncChunkFilter& filter, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getFilteredSyncChunk_prepareParams(authenticationToken, afterUSN, maxEntries, filter); return new AsyncResult(url_, params, NoteStore_getFilteredSyncChunk_readReplyAsync); } QByteArray NoteStore_getLinkedNotebookSyncState_prepareParams(QString authenticationToken, const LinkedNotebook& linkedNotebook) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getLinkedNotebookSyncState", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getLinkedNotebookSyncState_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("linkedNotebook", ThriftFieldType::T_STRUCT, 2); writeLinkedNotebook(w, linkedNotebook); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } SyncState NoteStore_getLinkedNotebookSyncState_readReply(QByteArray reply) { bool resultIsSet = false; SyncState result = SyncState(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getLinkedNotebookSyncState") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; SyncState v; readSyncState(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getLinkedNotebookSyncState: missing result")); return result; } QVariant NoteStore_getLinkedNotebookSyncState_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getLinkedNotebookSyncState_readReply(reply)); } SyncState NoteStore::getLinkedNotebookSyncState(const LinkedNotebook& linkedNotebook, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getLinkedNotebookSyncState_prepareParams(authenticationToken, linkedNotebook); QByteArray reply = askEvernote(url_, params); return NoteStore_getLinkedNotebookSyncState_readReply(reply); } AsyncResult* NoteStore::getLinkedNotebookSyncStateAsync(const LinkedNotebook& linkedNotebook, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getLinkedNotebookSyncState_prepareParams(authenticationToken, linkedNotebook); return new AsyncResult(url_, params, NoteStore_getLinkedNotebookSyncState_readReplyAsync); } QByteArray NoteStore_getLinkedNotebookSyncChunk_prepareParams(QString authenticationToken, const LinkedNotebook& linkedNotebook, qint32 afterUSN, qint32 maxEntries, bool fullSyncOnly) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getLinkedNotebookSyncChunk", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getLinkedNotebookSyncChunk_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("linkedNotebook", ThriftFieldType::T_STRUCT, 2); writeLinkedNotebook(w, linkedNotebook); w.writeFieldEnd(); w.writeFieldBegin("afterUSN", ThriftFieldType::T_I32, 3); w.writeI32(afterUSN); w.writeFieldEnd(); w.writeFieldBegin("maxEntries", ThriftFieldType::T_I32, 4); w.writeI32(maxEntries); w.writeFieldEnd(); w.writeFieldBegin("fullSyncOnly", ThriftFieldType::T_BOOL, 5); w.writeBool(fullSyncOnly); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } SyncChunk NoteStore_getLinkedNotebookSyncChunk_readReply(QByteArray reply) { bool resultIsSet = false; SyncChunk result = SyncChunk(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getLinkedNotebookSyncChunk") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; SyncChunk v; readSyncChunk(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getLinkedNotebookSyncChunk: missing result")); return result; } QVariant NoteStore_getLinkedNotebookSyncChunk_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getLinkedNotebookSyncChunk_readReply(reply)); } SyncChunk NoteStore::getLinkedNotebookSyncChunk(const LinkedNotebook& linkedNotebook, qint32 afterUSN, qint32 maxEntries, bool fullSyncOnly, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getLinkedNotebookSyncChunk_prepareParams(authenticationToken, linkedNotebook, afterUSN, maxEntries, fullSyncOnly); QByteArray reply = askEvernote(url_, params); return NoteStore_getLinkedNotebookSyncChunk_readReply(reply); } AsyncResult* NoteStore::getLinkedNotebookSyncChunkAsync(const LinkedNotebook& linkedNotebook, qint32 afterUSN, qint32 maxEntries, bool fullSyncOnly, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getLinkedNotebookSyncChunk_prepareParams(authenticationToken, linkedNotebook, afterUSN, maxEntries, fullSyncOnly); return new AsyncResult(url_, params, NoteStore_getLinkedNotebookSyncChunk_readReplyAsync); } QByteArray NoteStore_listNotebooks_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("listNotebooks", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_listNotebooks_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QList< Notebook > NoteStore_listNotebooks_readReply(QByteArray reply) { bool resultIsSet = false; QList< Notebook > result = QList< Notebook >(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("listNotebooks") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_LIST) { resultIsSet = true; QList< Notebook > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (listNotebooks.result)"); for(quint32 i = 0; i < size; i++) { Notebook elem; readNotebook(r, elem); v.append(elem); } r.readListEnd(); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("listNotebooks: missing result")); return result; } QVariant NoteStore_listNotebooks_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_listNotebooks_readReply(reply)); } QList< Notebook > NoteStore::listNotebooks(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_listNotebooks_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); return NoteStore_listNotebooks_readReply(reply); } AsyncResult* NoteStore::listNotebooksAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_listNotebooks_prepareParams(authenticationToken); return new AsyncResult(url_, params, NoteStore_listNotebooks_readReplyAsync); } QByteArray NoteStore_getNotebook_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getNotebook", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getNotebook_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } Notebook NoteStore_getNotebook_readReply(QByteArray reply) { bool resultIsSet = false; Notebook result = Notebook(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getNotebook") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; Notebook v; readNotebook(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getNotebook: missing result")); return result; } QVariant NoteStore_getNotebook_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getNotebook_readReply(reply)); } Notebook NoteStore::getNotebook(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNotebook_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_getNotebook_readReply(reply); } AsyncResult* NoteStore::getNotebookAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNotebook_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_getNotebook_readReplyAsync); } QByteArray NoteStore_getDefaultNotebook_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getDefaultNotebook", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getDefaultNotebook_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } Notebook NoteStore_getDefaultNotebook_readReply(QByteArray reply) { bool resultIsSet = false; Notebook result = Notebook(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getDefaultNotebook") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; Notebook v; readNotebook(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getDefaultNotebook: missing result")); return result; } QVariant NoteStore_getDefaultNotebook_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getDefaultNotebook_readReply(reply)); } Notebook NoteStore::getDefaultNotebook(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getDefaultNotebook_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); return NoteStore_getDefaultNotebook_readReply(reply); } AsyncResult* NoteStore::getDefaultNotebookAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getDefaultNotebook_prepareParams(authenticationToken); return new AsyncResult(url_, params, NoteStore_getDefaultNotebook_readReplyAsync); } QByteArray NoteStore_createNotebook_prepareParams(QString authenticationToken, const Notebook& notebook) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("createNotebook", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_createNotebook_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("notebook", ThriftFieldType::T_STRUCT, 2); writeNotebook(w, notebook); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } Notebook NoteStore_createNotebook_readReply(QByteArray reply) { bool resultIsSet = false; Notebook result = Notebook(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("createNotebook") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; Notebook v; readNotebook(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("createNotebook: missing result")); return result; } QVariant NoteStore_createNotebook_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_createNotebook_readReply(reply)); } Notebook NoteStore::createNotebook(const Notebook& notebook, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_createNotebook_prepareParams(authenticationToken, notebook); QByteArray reply = askEvernote(url_, params); return NoteStore_createNotebook_readReply(reply); } AsyncResult* NoteStore::createNotebookAsync(const Notebook& notebook, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_createNotebook_prepareParams(authenticationToken, notebook); return new AsyncResult(url_, params, NoteStore_createNotebook_readReplyAsync); } QByteArray NoteStore_updateNotebook_prepareParams(QString authenticationToken, const Notebook& notebook) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("updateNotebook", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_updateNotebook_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("notebook", ThriftFieldType::T_STRUCT, 2); writeNotebook(w, notebook); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_updateNotebook_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("updateNotebook") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("updateNotebook: missing result")); return result; } QVariant NoteStore_updateNotebook_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_updateNotebook_readReply(reply)); } qint32 NoteStore::updateNotebook(const Notebook& notebook, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_updateNotebook_prepareParams(authenticationToken, notebook); QByteArray reply = askEvernote(url_, params); return NoteStore_updateNotebook_readReply(reply); } AsyncResult* NoteStore::updateNotebookAsync(const Notebook& notebook, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_updateNotebook_prepareParams(authenticationToken, notebook); return new AsyncResult(url_, params, NoteStore_updateNotebook_readReplyAsync); } QByteArray NoteStore_expungeNotebook_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("expungeNotebook", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_expungeNotebook_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_expungeNotebook_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("expungeNotebook") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("expungeNotebook: missing result")); return result; } QVariant NoteStore_expungeNotebook_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_expungeNotebook_readReply(reply)); } qint32 NoteStore::expungeNotebook(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeNotebook_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_expungeNotebook_readReply(reply); } AsyncResult* NoteStore::expungeNotebookAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeNotebook_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_expungeNotebook_readReplyAsync); } QByteArray NoteStore_listTags_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("listTags", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_listTags_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QList< Tag > NoteStore_listTags_readReply(QByteArray reply) { bool resultIsSet = false; QList< Tag > result = QList< Tag >(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("listTags") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_LIST) { resultIsSet = true; QList< Tag > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (listTags.result)"); for(quint32 i = 0; i < size; i++) { Tag elem; readTag(r, elem); v.append(elem); } r.readListEnd(); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("listTags: missing result")); return result; } QVariant NoteStore_listTags_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_listTags_readReply(reply)); } QList< Tag > NoteStore::listTags(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_listTags_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); return NoteStore_listTags_readReply(reply); } AsyncResult* NoteStore::listTagsAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_listTags_prepareParams(authenticationToken); return new AsyncResult(url_, params, NoteStore_listTags_readReplyAsync); } QByteArray NoteStore_listTagsByNotebook_prepareParams(QString authenticationToken, Guid notebookGuid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("listTagsByNotebook", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_listTagsByNotebook_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("notebookGuid", ThriftFieldType::T_STRING, 2); w.writeString(notebookGuid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QList< Tag > NoteStore_listTagsByNotebook_readReply(QByteArray reply) { bool resultIsSet = false; QList< Tag > result = QList< Tag >(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("listTagsByNotebook") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_LIST) { resultIsSet = true; QList< Tag > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (listTagsByNotebook.result)"); for(quint32 i = 0; i < size; i++) { Tag elem; readTag(r, elem); v.append(elem); } r.readListEnd(); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("listTagsByNotebook: missing result")); return result; } QVariant NoteStore_listTagsByNotebook_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_listTagsByNotebook_readReply(reply)); } QList< Tag > NoteStore::listTagsByNotebook(Guid notebookGuid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_listTagsByNotebook_prepareParams(authenticationToken, notebookGuid); QByteArray reply = askEvernote(url_, params); return NoteStore_listTagsByNotebook_readReply(reply); } AsyncResult* NoteStore::listTagsByNotebookAsync(Guid notebookGuid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_listTagsByNotebook_prepareParams(authenticationToken, notebookGuid); return new AsyncResult(url_, params, NoteStore_listTagsByNotebook_readReplyAsync); } QByteArray NoteStore_getTag_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getTag", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getTag_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } Tag NoteStore_getTag_readReply(QByteArray reply) { bool resultIsSet = false; Tag result = Tag(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getTag") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; Tag v; readTag(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getTag: missing result")); return result; } QVariant NoteStore_getTag_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getTag_readReply(reply)); } Tag NoteStore::getTag(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getTag_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_getTag_readReply(reply); } AsyncResult* NoteStore::getTagAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getTag_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_getTag_readReplyAsync); } QByteArray NoteStore_createTag_prepareParams(QString authenticationToken, const Tag& tag) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("createTag", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_createTag_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("tag", ThriftFieldType::T_STRUCT, 2); writeTag(w, tag); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } Tag NoteStore_createTag_readReply(QByteArray reply) { bool resultIsSet = false; Tag result = Tag(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("createTag") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; Tag v; readTag(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("createTag: missing result")); return result; } QVariant NoteStore_createTag_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_createTag_readReply(reply)); } Tag NoteStore::createTag(const Tag& tag, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_createTag_prepareParams(authenticationToken, tag); QByteArray reply = askEvernote(url_, params); return NoteStore_createTag_readReply(reply); } AsyncResult* NoteStore::createTagAsync(const Tag& tag, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_createTag_prepareParams(authenticationToken, tag); return new AsyncResult(url_, params, NoteStore_createTag_readReplyAsync); } QByteArray NoteStore_updateTag_prepareParams(QString authenticationToken, const Tag& tag) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("updateTag", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_updateTag_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("tag", ThriftFieldType::T_STRUCT, 2); writeTag(w, tag); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_updateTag_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("updateTag") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("updateTag: missing result")); return result; } QVariant NoteStore_updateTag_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_updateTag_readReply(reply)); } qint32 NoteStore::updateTag(const Tag& tag, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_updateTag_prepareParams(authenticationToken, tag); QByteArray reply = askEvernote(url_, params); return NoteStore_updateTag_readReply(reply); } AsyncResult* NoteStore::updateTagAsync(const Tag& tag, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_updateTag_prepareParams(authenticationToken, tag); return new AsyncResult(url_, params, NoteStore_updateTag_readReplyAsync); } QByteArray NoteStore_untagAll_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("untagAll", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_untagAll_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } void NoteStore_untagAll_readReply(QByteArray reply) { ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("untagAll") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); } QVariant NoteStore_untagAll_readReplyAsync(QByteArray reply) { NoteStore_untagAll_readReply(reply); return QVariant(); } void NoteStore::untagAll(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_untagAll_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); NoteStore_untagAll_readReply(reply); } AsyncResult* NoteStore::untagAllAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_untagAll_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_untagAll_readReplyAsync); } QByteArray NoteStore_expungeTag_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("expungeTag", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_expungeTag_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_expungeTag_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("expungeTag") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("expungeTag: missing result")); return result; } QVariant NoteStore_expungeTag_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_expungeTag_readReply(reply)); } qint32 NoteStore::expungeTag(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeTag_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_expungeTag_readReply(reply); } AsyncResult* NoteStore::expungeTagAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeTag_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_expungeTag_readReplyAsync); } QByteArray NoteStore_listSearches_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("listSearches", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_listSearches_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QList< SavedSearch > NoteStore_listSearches_readReply(QByteArray reply) { bool resultIsSet = false; QList< SavedSearch > result = QList< SavedSearch >(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("listSearches") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_LIST) { resultIsSet = true; QList< SavedSearch > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (listSearches.result)"); for(quint32 i = 0; i < size; i++) { SavedSearch elem; readSavedSearch(r, elem); v.append(elem); } r.readListEnd(); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("listSearches: missing result")); return result; } QVariant NoteStore_listSearches_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_listSearches_readReply(reply)); } QList< SavedSearch > NoteStore::listSearches(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_listSearches_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); return NoteStore_listSearches_readReply(reply); } AsyncResult* NoteStore::listSearchesAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_listSearches_prepareParams(authenticationToken); return new AsyncResult(url_, params, NoteStore_listSearches_readReplyAsync); } QByteArray NoteStore_getSearch_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getSearch", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getSearch_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } SavedSearch NoteStore_getSearch_readReply(QByteArray reply) { bool resultIsSet = false; SavedSearch result = SavedSearch(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getSearch") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; SavedSearch v; readSavedSearch(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getSearch: missing result")); return result; } QVariant NoteStore_getSearch_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getSearch_readReply(reply)); } SavedSearch NoteStore::getSearch(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getSearch_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_getSearch_readReply(reply); } AsyncResult* NoteStore::getSearchAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getSearch_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_getSearch_readReplyAsync); } QByteArray NoteStore_createSearch_prepareParams(QString authenticationToken, const SavedSearch& search) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("createSearch", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_createSearch_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("search", ThriftFieldType::T_STRUCT, 2); writeSavedSearch(w, search); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } SavedSearch NoteStore_createSearch_readReply(QByteArray reply) { bool resultIsSet = false; SavedSearch result = SavedSearch(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("createSearch") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; SavedSearch v; readSavedSearch(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("createSearch: missing result")); return result; } QVariant NoteStore_createSearch_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_createSearch_readReply(reply)); } SavedSearch NoteStore::createSearch(const SavedSearch& search, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_createSearch_prepareParams(authenticationToken, search); QByteArray reply = askEvernote(url_, params); return NoteStore_createSearch_readReply(reply); } AsyncResult* NoteStore::createSearchAsync(const SavedSearch& search, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_createSearch_prepareParams(authenticationToken, search); return new AsyncResult(url_, params, NoteStore_createSearch_readReplyAsync); } QByteArray NoteStore_updateSearch_prepareParams(QString authenticationToken, const SavedSearch& search) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("updateSearch", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_updateSearch_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("search", ThriftFieldType::T_STRUCT, 2); writeSavedSearch(w, search); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_updateSearch_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("updateSearch") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("updateSearch: missing result")); return result; } QVariant NoteStore_updateSearch_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_updateSearch_readReply(reply)); } qint32 NoteStore::updateSearch(const SavedSearch& search, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_updateSearch_prepareParams(authenticationToken, search); QByteArray reply = askEvernote(url_, params); return NoteStore_updateSearch_readReply(reply); } AsyncResult* NoteStore::updateSearchAsync(const SavedSearch& search, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_updateSearch_prepareParams(authenticationToken, search); return new AsyncResult(url_, params, NoteStore_updateSearch_readReplyAsync); } QByteArray NoteStore_expungeSearch_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("expungeSearch", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_expungeSearch_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_expungeSearch_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("expungeSearch") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("expungeSearch: missing result")); return result; } QVariant NoteStore_expungeSearch_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_expungeSearch_readReply(reply)); } qint32 NoteStore::expungeSearch(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeSearch_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_expungeSearch_readReply(reply); } AsyncResult* NoteStore::expungeSearchAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeSearch_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_expungeSearch_readReplyAsync); } QByteArray NoteStore_findNotes_prepareParams(QString authenticationToken, const NoteFilter& filter, qint32 offset, qint32 maxNotes) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("findNotes", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_findNotes_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("filter", ThriftFieldType::T_STRUCT, 2); writeNoteFilter(w, filter); w.writeFieldEnd(); w.writeFieldBegin("offset", ThriftFieldType::T_I32, 3); w.writeI32(offset); w.writeFieldEnd(); w.writeFieldBegin("maxNotes", ThriftFieldType::T_I32, 4); w.writeI32(maxNotes); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } NoteList NoteStore_findNotes_readReply(QByteArray reply) { bool resultIsSet = false; NoteList result = NoteList(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("findNotes") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; NoteList v; readNoteList(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("findNotes: missing result")); return result; } QVariant NoteStore_findNotes_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_findNotes_readReply(reply)); } NoteList NoteStore::findNotes(const NoteFilter& filter, qint32 offset, qint32 maxNotes, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_findNotes_prepareParams(authenticationToken, filter, offset, maxNotes); QByteArray reply = askEvernote(url_, params); return NoteStore_findNotes_readReply(reply); } AsyncResult* NoteStore::findNotesAsync(const NoteFilter& filter, qint32 offset, qint32 maxNotes, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_findNotes_prepareParams(authenticationToken, filter, offset, maxNotes); return new AsyncResult(url_, params, NoteStore_findNotes_readReplyAsync); } QByteArray NoteStore_findNoteOffset_prepareParams(QString authenticationToken, const NoteFilter& filter, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("findNoteOffset", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_findNoteOffset_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("filter", ThriftFieldType::T_STRUCT, 2); writeNoteFilter(w, filter); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 3); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_findNoteOffset_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("findNoteOffset") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("findNoteOffset: missing result")); return result; } QVariant NoteStore_findNoteOffset_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_findNoteOffset_readReply(reply)); } qint32 NoteStore::findNoteOffset(const NoteFilter& filter, Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_findNoteOffset_prepareParams(authenticationToken, filter, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_findNoteOffset_readReply(reply); } AsyncResult* NoteStore::findNoteOffsetAsync(const NoteFilter& filter, Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_findNoteOffset_prepareParams(authenticationToken, filter, guid); return new AsyncResult(url_, params, NoteStore_findNoteOffset_readReplyAsync); } QByteArray NoteStore_findNotesMetadata_prepareParams(QString authenticationToken, const NoteFilter& filter, qint32 offset, qint32 maxNotes, const NotesMetadataResultSpec& resultSpec) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("findNotesMetadata", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_findNotesMetadata_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("filter", ThriftFieldType::T_STRUCT, 2); writeNoteFilter(w, filter); w.writeFieldEnd(); w.writeFieldBegin("offset", ThriftFieldType::T_I32, 3); w.writeI32(offset); w.writeFieldEnd(); w.writeFieldBegin("maxNotes", ThriftFieldType::T_I32, 4); w.writeI32(maxNotes); w.writeFieldEnd(); w.writeFieldBegin("resultSpec", ThriftFieldType::T_STRUCT, 5); writeNotesMetadataResultSpec(w, resultSpec); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } NotesMetadataList NoteStore_findNotesMetadata_readReply(QByteArray reply) { bool resultIsSet = false; NotesMetadataList result = NotesMetadataList(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("findNotesMetadata") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; NotesMetadataList v; readNotesMetadataList(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("findNotesMetadata: missing result")); return result; } QVariant NoteStore_findNotesMetadata_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_findNotesMetadata_readReply(reply)); } NotesMetadataList NoteStore::findNotesMetadata(const NoteFilter& filter, qint32 offset, qint32 maxNotes, const NotesMetadataResultSpec& resultSpec, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_findNotesMetadata_prepareParams(authenticationToken, filter, offset, maxNotes, resultSpec); QByteArray reply = askEvernote(url_, params); return NoteStore_findNotesMetadata_readReply(reply); } AsyncResult* NoteStore::findNotesMetadataAsync(const NoteFilter& filter, qint32 offset, qint32 maxNotes, const NotesMetadataResultSpec& resultSpec, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_findNotesMetadata_prepareParams(authenticationToken, filter, offset, maxNotes, resultSpec); return new AsyncResult(url_, params, NoteStore_findNotesMetadata_readReplyAsync); } QByteArray NoteStore_findNoteCounts_prepareParams(QString authenticationToken, const NoteFilter& filter, bool withTrash) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("findNoteCounts", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_findNoteCounts_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("filter", ThriftFieldType::T_STRUCT, 2); writeNoteFilter(w, filter); w.writeFieldEnd(); w.writeFieldBegin("withTrash", ThriftFieldType::T_BOOL, 3); w.writeBool(withTrash); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } NoteCollectionCounts NoteStore_findNoteCounts_readReply(QByteArray reply) { bool resultIsSet = false; NoteCollectionCounts result = NoteCollectionCounts(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("findNoteCounts") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; NoteCollectionCounts v; readNoteCollectionCounts(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("findNoteCounts: missing result")); return result; } QVariant NoteStore_findNoteCounts_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_findNoteCounts_readReply(reply)); } NoteCollectionCounts NoteStore::findNoteCounts(const NoteFilter& filter, bool withTrash, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_findNoteCounts_prepareParams(authenticationToken, filter, withTrash); QByteArray reply = askEvernote(url_, params); return NoteStore_findNoteCounts_readReply(reply); } AsyncResult* NoteStore::findNoteCountsAsync(const NoteFilter& filter, bool withTrash, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_findNoteCounts_prepareParams(authenticationToken, filter, withTrash); return new AsyncResult(url_, params, NoteStore_findNoteCounts_readReplyAsync); } QByteArray NoteStore_getNote_prepareParams(QString authenticationToken, Guid guid, bool withContent, bool withResourcesData, bool withResourcesRecognition, bool withResourcesAlternateData) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getNote", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getNote_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldBegin("withContent", ThriftFieldType::T_BOOL, 3); w.writeBool(withContent); w.writeFieldEnd(); w.writeFieldBegin("withResourcesData", ThriftFieldType::T_BOOL, 4); w.writeBool(withResourcesData); w.writeFieldEnd(); w.writeFieldBegin("withResourcesRecognition", ThriftFieldType::T_BOOL, 5); w.writeBool(withResourcesRecognition); w.writeFieldEnd(); w.writeFieldBegin("withResourcesAlternateData", ThriftFieldType::T_BOOL, 6); w.writeBool(withResourcesAlternateData); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } Note NoteStore_getNote_readReply(QByteArray reply) { bool resultIsSet = false; Note result = Note(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getNote") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; Note v; readNote(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getNote: missing result")); return result; } QVariant NoteStore_getNote_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getNote_readReply(reply)); } Note NoteStore::getNote(Guid guid, bool withContent, bool withResourcesData, bool withResourcesRecognition, bool withResourcesAlternateData, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNote_prepareParams(authenticationToken, guid, withContent, withResourcesData, withResourcesRecognition, withResourcesAlternateData); QByteArray reply = askEvernote(url_, params); return NoteStore_getNote_readReply(reply); } AsyncResult* NoteStore::getNoteAsync(Guid guid, bool withContent, bool withResourcesData, bool withResourcesRecognition, bool withResourcesAlternateData, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNote_prepareParams(authenticationToken, guid, withContent, withResourcesData, withResourcesRecognition, withResourcesAlternateData); return new AsyncResult(url_, params, NoteStore_getNote_readReplyAsync); } QByteArray NoteStore_getNoteApplicationData_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getNoteApplicationData", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getNoteApplicationData_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } LazyMap NoteStore_getNoteApplicationData_readReply(QByteArray reply) { bool resultIsSet = false; LazyMap result = LazyMap(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getNoteApplicationData") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; LazyMap v; readLazyMap(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getNoteApplicationData: missing result")); return result; } QVariant NoteStore_getNoteApplicationData_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getNoteApplicationData_readReply(reply)); } LazyMap NoteStore::getNoteApplicationData(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNoteApplicationData_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_getNoteApplicationData_readReply(reply); } AsyncResult* NoteStore::getNoteApplicationDataAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNoteApplicationData_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_getNoteApplicationData_readReplyAsync); } QByteArray NoteStore_getNoteApplicationDataEntry_prepareParams(QString authenticationToken, Guid guid, QString key) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getNoteApplicationDataEntry", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getNoteApplicationDataEntry_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldBegin("key", ThriftFieldType::T_STRING, 3); w.writeString(key); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QString NoteStore_getNoteApplicationDataEntry_readReply(QByteArray reply) { bool resultIsSet = false; QString result = QString(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getNoteApplicationDataEntry") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRING) { resultIsSet = true; QString v; r.readString(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getNoteApplicationDataEntry: missing result")); return result; } QVariant NoteStore_getNoteApplicationDataEntry_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getNoteApplicationDataEntry_readReply(reply)); } QString NoteStore::getNoteApplicationDataEntry(Guid guid, QString key, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNoteApplicationDataEntry_prepareParams(authenticationToken, guid, key); QByteArray reply = askEvernote(url_, params); return NoteStore_getNoteApplicationDataEntry_readReply(reply); } AsyncResult* NoteStore::getNoteApplicationDataEntryAsync(Guid guid, QString key, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNoteApplicationDataEntry_prepareParams(authenticationToken, guid, key); return new AsyncResult(url_, params, NoteStore_getNoteApplicationDataEntry_readReplyAsync); } QByteArray NoteStore_setNoteApplicationDataEntry_prepareParams(QString authenticationToken, Guid guid, QString key, QString value) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("setNoteApplicationDataEntry", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_setNoteApplicationDataEntry_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldBegin("key", ThriftFieldType::T_STRING, 3); w.writeString(key); w.writeFieldEnd(); w.writeFieldBegin("value", ThriftFieldType::T_STRING, 4); w.writeString(value); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_setNoteApplicationDataEntry_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("setNoteApplicationDataEntry") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("setNoteApplicationDataEntry: missing result")); return result; } QVariant NoteStore_setNoteApplicationDataEntry_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_setNoteApplicationDataEntry_readReply(reply)); } qint32 NoteStore::setNoteApplicationDataEntry(Guid guid, QString key, QString value, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_setNoteApplicationDataEntry_prepareParams(authenticationToken, guid, key, value); QByteArray reply = askEvernote(url_, params); return NoteStore_setNoteApplicationDataEntry_readReply(reply); } AsyncResult* NoteStore::setNoteApplicationDataEntryAsync(Guid guid, QString key, QString value, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_setNoteApplicationDataEntry_prepareParams(authenticationToken, guid, key, value); return new AsyncResult(url_, params, NoteStore_setNoteApplicationDataEntry_readReplyAsync); } QByteArray NoteStore_unsetNoteApplicationDataEntry_prepareParams(QString authenticationToken, Guid guid, QString key) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("unsetNoteApplicationDataEntry", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_unsetNoteApplicationDataEntry_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldBegin("key", ThriftFieldType::T_STRING, 3); w.writeString(key); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_unsetNoteApplicationDataEntry_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("unsetNoteApplicationDataEntry") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("unsetNoteApplicationDataEntry: missing result")); return result; } QVariant NoteStore_unsetNoteApplicationDataEntry_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_unsetNoteApplicationDataEntry_readReply(reply)); } qint32 NoteStore::unsetNoteApplicationDataEntry(Guid guid, QString key, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_unsetNoteApplicationDataEntry_prepareParams(authenticationToken, guid, key); QByteArray reply = askEvernote(url_, params); return NoteStore_unsetNoteApplicationDataEntry_readReply(reply); } AsyncResult* NoteStore::unsetNoteApplicationDataEntryAsync(Guid guid, QString key, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_unsetNoteApplicationDataEntry_prepareParams(authenticationToken, guid, key); return new AsyncResult(url_, params, NoteStore_unsetNoteApplicationDataEntry_readReplyAsync); } QByteArray NoteStore_getNoteContent_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getNoteContent", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getNoteContent_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QString NoteStore_getNoteContent_readReply(QByteArray reply) { bool resultIsSet = false; QString result = QString(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getNoteContent") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRING) { resultIsSet = true; QString v; r.readString(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getNoteContent: missing result")); return result; } QVariant NoteStore_getNoteContent_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getNoteContent_readReply(reply)); } QString NoteStore::getNoteContent(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNoteContent_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_getNoteContent_readReply(reply); } AsyncResult* NoteStore::getNoteContentAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNoteContent_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_getNoteContent_readReplyAsync); } QByteArray NoteStore_getNoteSearchText_prepareParams(QString authenticationToken, Guid guid, bool noteOnly, bool tokenizeForIndexing) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getNoteSearchText", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getNoteSearchText_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldBegin("noteOnly", ThriftFieldType::T_BOOL, 3); w.writeBool(noteOnly); w.writeFieldEnd(); w.writeFieldBegin("tokenizeForIndexing", ThriftFieldType::T_BOOL, 4); w.writeBool(tokenizeForIndexing); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QString NoteStore_getNoteSearchText_readReply(QByteArray reply) { bool resultIsSet = false; QString result = QString(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getNoteSearchText") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRING) { resultIsSet = true; QString v; r.readString(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getNoteSearchText: missing result")); return result; } QVariant NoteStore_getNoteSearchText_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getNoteSearchText_readReply(reply)); } QString NoteStore::getNoteSearchText(Guid guid, bool noteOnly, bool tokenizeForIndexing, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNoteSearchText_prepareParams(authenticationToken, guid, noteOnly, tokenizeForIndexing); QByteArray reply = askEvernote(url_, params); return NoteStore_getNoteSearchText_readReply(reply); } AsyncResult* NoteStore::getNoteSearchTextAsync(Guid guid, bool noteOnly, bool tokenizeForIndexing, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNoteSearchText_prepareParams(authenticationToken, guid, noteOnly, tokenizeForIndexing); return new AsyncResult(url_, params, NoteStore_getNoteSearchText_readReplyAsync); } QByteArray NoteStore_getResourceSearchText_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getResourceSearchText", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getResourceSearchText_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QString NoteStore_getResourceSearchText_readReply(QByteArray reply) { bool resultIsSet = false; QString result = QString(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getResourceSearchText") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRING) { resultIsSet = true; QString v; r.readString(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getResourceSearchText: missing result")); return result; } QVariant NoteStore_getResourceSearchText_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getResourceSearchText_readReply(reply)); } QString NoteStore::getResourceSearchText(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceSearchText_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_getResourceSearchText_readReply(reply); } AsyncResult* NoteStore::getResourceSearchTextAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceSearchText_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_getResourceSearchText_readReplyAsync); } QByteArray NoteStore_getNoteTagNames_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getNoteTagNames", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getNoteTagNames_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QStringList NoteStore_getNoteTagNames_readReply(QByteArray reply) { bool resultIsSet = false; QStringList result = QStringList(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getNoteTagNames") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_LIST) { resultIsSet = true; QStringList v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (getNoteTagNames.result)"); for(quint32 i = 0; i < size; i++) { QString elem; r.readString(elem); v.append(elem); } r.readListEnd(); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getNoteTagNames: missing result")); return result; } QVariant NoteStore_getNoteTagNames_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getNoteTagNames_readReply(reply)); } QStringList NoteStore::getNoteTagNames(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNoteTagNames_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_getNoteTagNames_readReply(reply); } AsyncResult* NoteStore::getNoteTagNamesAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNoteTagNames_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_getNoteTagNames_readReplyAsync); } QByteArray NoteStore_createNote_prepareParams(QString authenticationToken, const Note& note) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("createNote", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_createNote_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("note", ThriftFieldType::T_STRUCT, 2); writeNote(w, note); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } Note NoteStore_createNote_readReply(QByteArray reply) { bool resultIsSet = false; Note result = Note(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("createNote") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; Note v; readNote(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("createNote: missing result")); return result; } QVariant NoteStore_createNote_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_createNote_readReply(reply)); } Note NoteStore::createNote(const Note& note, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_createNote_prepareParams(authenticationToken, note); QByteArray reply = askEvernote(url_, params); return NoteStore_createNote_readReply(reply); } AsyncResult* NoteStore::createNoteAsync(const Note& note, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_createNote_prepareParams(authenticationToken, note); return new AsyncResult(url_, params, NoteStore_createNote_readReplyAsync); } QByteArray NoteStore_updateNote_prepareParams(QString authenticationToken, const Note& note) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("updateNote", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_updateNote_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("note", ThriftFieldType::T_STRUCT, 2); writeNote(w, note); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } Note NoteStore_updateNote_readReply(QByteArray reply) { bool resultIsSet = false; Note result = Note(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("updateNote") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; Note v; readNote(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("updateNote: missing result")); return result; } QVariant NoteStore_updateNote_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_updateNote_readReply(reply)); } Note NoteStore::updateNote(const Note& note, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_updateNote_prepareParams(authenticationToken, note); QByteArray reply = askEvernote(url_, params); return NoteStore_updateNote_readReply(reply); } AsyncResult* NoteStore::updateNoteAsync(const Note& note, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_updateNote_prepareParams(authenticationToken, note); return new AsyncResult(url_, params, NoteStore_updateNote_readReplyAsync); } QByteArray NoteStore_deleteNote_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("deleteNote", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_deleteNote_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_deleteNote_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("deleteNote") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("deleteNote: missing result")); return result; } QVariant NoteStore_deleteNote_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_deleteNote_readReply(reply)); } qint32 NoteStore::deleteNote(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_deleteNote_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_deleteNote_readReply(reply); } AsyncResult* NoteStore::deleteNoteAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_deleteNote_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_deleteNote_readReplyAsync); } QByteArray NoteStore_expungeNote_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("expungeNote", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_expungeNote_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_expungeNote_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("expungeNote") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("expungeNote: missing result")); return result; } QVariant NoteStore_expungeNote_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_expungeNote_readReply(reply)); } qint32 NoteStore::expungeNote(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeNote_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_expungeNote_readReply(reply); } AsyncResult* NoteStore::expungeNoteAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeNote_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_expungeNote_readReplyAsync); } QByteArray NoteStore_expungeNotes_prepareParams(QString authenticationToken, QList< Guid > noteGuids) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("expungeNotes", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_expungeNotes_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("noteGuids", ThriftFieldType::T_LIST, 2); w.writeListBegin(ThriftFieldType::T_STRING, noteGuids.length()); Q_FOREACH(const Guid& elem, noteGuids) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_expungeNotes_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("expungeNotes") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("expungeNotes: missing result")); return result; } QVariant NoteStore_expungeNotes_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_expungeNotes_readReply(reply)); } qint32 NoteStore::expungeNotes(QList< Guid > noteGuids, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeNotes_prepareParams(authenticationToken, noteGuids); QByteArray reply = askEvernote(url_, params); return NoteStore_expungeNotes_readReply(reply); } AsyncResult* NoteStore::expungeNotesAsync(QList< Guid > noteGuids, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeNotes_prepareParams(authenticationToken, noteGuids); return new AsyncResult(url_, params, NoteStore_expungeNotes_readReplyAsync); } QByteArray NoteStore_expungeInactiveNotes_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("expungeInactiveNotes", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_expungeInactiveNotes_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_expungeInactiveNotes_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("expungeInactiveNotes") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("expungeInactiveNotes: missing result")); return result; } QVariant NoteStore_expungeInactiveNotes_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_expungeInactiveNotes_readReply(reply)); } qint32 NoteStore::expungeInactiveNotes(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeInactiveNotes_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); return NoteStore_expungeInactiveNotes_readReply(reply); } AsyncResult* NoteStore::expungeInactiveNotesAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeInactiveNotes_prepareParams(authenticationToken); return new AsyncResult(url_, params, NoteStore_expungeInactiveNotes_readReplyAsync); } QByteArray NoteStore_copyNote_prepareParams(QString authenticationToken, Guid noteGuid, Guid toNotebookGuid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("copyNote", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_copyNote_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("noteGuid", ThriftFieldType::T_STRING, 2); w.writeString(noteGuid); w.writeFieldEnd(); w.writeFieldBegin("toNotebookGuid", ThriftFieldType::T_STRING, 3); w.writeString(toNotebookGuid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } Note NoteStore_copyNote_readReply(QByteArray reply) { bool resultIsSet = false; Note result = Note(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("copyNote") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; Note v; readNote(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("copyNote: missing result")); return result; } QVariant NoteStore_copyNote_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_copyNote_readReply(reply)); } Note NoteStore::copyNote(Guid noteGuid, Guid toNotebookGuid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_copyNote_prepareParams(authenticationToken, noteGuid, toNotebookGuid); QByteArray reply = askEvernote(url_, params); return NoteStore_copyNote_readReply(reply); } AsyncResult* NoteStore::copyNoteAsync(Guid noteGuid, Guid toNotebookGuid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_copyNote_prepareParams(authenticationToken, noteGuid, toNotebookGuid); return new AsyncResult(url_, params, NoteStore_copyNote_readReplyAsync); } QByteArray NoteStore_listNoteVersions_prepareParams(QString authenticationToken, Guid noteGuid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("listNoteVersions", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_listNoteVersions_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("noteGuid", ThriftFieldType::T_STRING, 2); w.writeString(noteGuid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QList< NoteVersionId > NoteStore_listNoteVersions_readReply(QByteArray reply) { bool resultIsSet = false; QList< NoteVersionId > result = QList< NoteVersionId >(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("listNoteVersions") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_LIST) { resultIsSet = true; QList< NoteVersionId > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (listNoteVersions.result)"); for(quint32 i = 0; i < size; i++) { NoteVersionId elem; readNoteVersionId(r, elem); v.append(elem); } r.readListEnd(); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("listNoteVersions: missing result")); return result; } QVariant NoteStore_listNoteVersions_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_listNoteVersions_readReply(reply)); } QList< NoteVersionId > NoteStore::listNoteVersions(Guid noteGuid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_listNoteVersions_prepareParams(authenticationToken, noteGuid); QByteArray reply = askEvernote(url_, params); return NoteStore_listNoteVersions_readReply(reply); } AsyncResult* NoteStore::listNoteVersionsAsync(Guid noteGuid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_listNoteVersions_prepareParams(authenticationToken, noteGuid); return new AsyncResult(url_, params, NoteStore_listNoteVersions_readReplyAsync); } QByteArray NoteStore_getNoteVersion_prepareParams(QString authenticationToken, Guid noteGuid, qint32 updateSequenceNum, bool withResourcesData, bool withResourcesRecognition, bool withResourcesAlternateData) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getNoteVersion", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getNoteVersion_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("noteGuid", ThriftFieldType::T_STRING, 2); w.writeString(noteGuid); w.writeFieldEnd(); w.writeFieldBegin("updateSequenceNum", ThriftFieldType::T_I32, 3); w.writeI32(updateSequenceNum); w.writeFieldEnd(); w.writeFieldBegin("withResourcesData", ThriftFieldType::T_BOOL, 4); w.writeBool(withResourcesData); w.writeFieldEnd(); w.writeFieldBegin("withResourcesRecognition", ThriftFieldType::T_BOOL, 5); w.writeBool(withResourcesRecognition); w.writeFieldEnd(); w.writeFieldBegin("withResourcesAlternateData", ThriftFieldType::T_BOOL, 6); w.writeBool(withResourcesAlternateData); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } Note NoteStore_getNoteVersion_readReply(QByteArray reply) { bool resultIsSet = false; Note result = Note(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getNoteVersion") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; Note v; readNote(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getNoteVersion: missing result")); return result; } QVariant NoteStore_getNoteVersion_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getNoteVersion_readReply(reply)); } Note NoteStore::getNoteVersion(Guid noteGuid, qint32 updateSequenceNum, bool withResourcesData, bool withResourcesRecognition, bool withResourcesAlternateData, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNoteVersion_prepareParams(authenticationToken, noteGuid, updateSequenceNum, withResourcesData, withResourcesRecognition, withResourcesAlternateData); QByteArray reply = askEvernote(url_, params); return NoteStore_getNoteVersion_readReply(reply); } AsyncResult* NoteStore::getNoteVersionAsync(Guid noteGuid, qint32 updateSequenceNum, bool withResourcesData, bool withResourcesRecognition, bool withResourcesAlternateData, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getNoteVersion_prepareParams(authenticationToken, noteGuid, updateSequenceNum, withResourcesData, withResourcesRecognition, withResourcesAlternateData); return new AsyncResult(url_, params, NoteStore_getNoteVersion_readReplyAsync); } QByteArray NoteStore_getResource_prepareParams(QString authenticationToken, Guid guid, bool withData, bool withRecognition, bool withAttributes, bool withAlternateData) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getResource", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getResource_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldBegin("withData", ThriftFieldType::T_BOOL, 3); w.writeBool(withData); w.writeFieldEnd(); w.writeFieldBegin("withRecognition", ThriftFieldType::T_BOOL, 4); w.writeBool(withRecognition); w.writeFieldEnd(); w.writeFieldBegin("withAttributes", ThriftFieldType::T_BOOL, 5); w.writeBool(withAttributes); w.writeFieldEnd(); w.writeFieldBegin("withAlternateData", ThriftFieldType::T_BOOL, 6); w.writeBool(withAlternateData); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } Resource NoteStore_getResource_readReply(QByteArray reply) { bool resultIsSet = false; Resource result = Resource(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getResource") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; Resource v; readResource(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getResource: missing result")); return result; } QVariant NoteStore_getResource_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getResource_readReply(reply)); } Resource NoteStore::getResource(Guid guid, bool withData, bool withRecognition, bool withAttributes, bool withAlternateData, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResource_prepareParams(authenticationToken, guid, withData, withRecognition, withAttributes, withAlternateData); QByteArray reply = askEvernote(url_, params); return NoteStore_getResource_readReply(reply); } AsyncResult* NoteStore::getResourceAsync(Guid guid, bool withData, bool withRecognition, bool withAttributes, bool withAlternateData, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResource_prepareParams(authenticationToken, guid, withData, withRecognition, withAttributes, withAlternateData); return new AsyncResult(url_, params, NoteStore_getResource_readReplyAsync); } QByteArray NoteStore_getResourceApplicationData_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getResourceApplicationData", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getResourceApplicationData_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } LazyMap NoteStore_getResourceApplicationData_readReply(QByteArray reply) { bool resultIsSet = false; LazyMap result = LazyMap(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getResourceApplicationData") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; LazyMap v; readLazyMap(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getResourceApplicationData: missing result")); return result; } QVariant NoteStore_getResourceApplicationData_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getResourceApplicationData_readReply(reply)); } LazyMap NoteStore::getResourceApplicationData(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceApplicationData_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_getResourceApplicationData_readReply(reply); } AsyncResult* NoteStore::getResourceApplicationDataAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceApplicationData_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_getResourceApplicationData_readReplyAsync); } QByteArray NoteStore_getResourceApplicationDataEntry_prepareParams(QString authenticationToken, Guid guid, QString key) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getResourceApplicationDataEntry", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getResourceApplicationDataEntry_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldBegin("key", ThriftFieldType::T_STRING, 3); w.writeString(key); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QString NoteStore_getResourceApplicationDataEntry_readReply(QByteArray reply) { bool resultIsSet = false; QString result = QString(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getResourceApplicationDataEntry") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRING) { resultIsSet = true; QString v; r.readString(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getResourceApplicationDataEntry: missing result")); return result; } QVariant NoteStore_getResourceApplicationDataEntry_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getResourceApplicationDataEntry_readReply(reply)); } QString NoteStore::getResourceApplicationDataEntry(Guid guid, QString key, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceApplicationDataEntry_prepareParams(authenticationToken, guid, key); QByteArray reply = askEvernote(url_, params); return NoteStore_getResourceApplicationDataEntry_readReply(reply); } AsyncResult* NoteStore::getResourceApplicationDataEntryAsync(Guid guid, QString key, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceApplicationDataEntry_prepareParams(authenticationToken, guid, key); return new AsyncResult(url_, params, NoteStore_getResourceApplicationDataEntry_readReplyAsync); } QByteArray NoteStore_setResourceApplicationDataEntry_prepareParams(QString authenticationToken, Guid guid, QString key, QString value) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("setResourceApplicationDataEntry", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_setResourceApplicationDataEntry_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldBegin("key", ThriftFieldType::T_STRING, 3); w.writeString(key); w.writeFieldEnd(); w.writeFieldBegin("value", ThriftFieldType::T_STRING, 4); w.writeString(value); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_setResourceApplicationDataEntry_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("setResourceApplicationDataEntry") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("setResourceApplicationDataEntry: missing result")); return result; } QVariant NoteStore_setResourceApplicationDataEntry_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_setResourceApplicationDataEntry_readReply(reply)); } qint32 NoteStore::setResourceApplicationDataEntry(Guid guid, QString key, QString value, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_setResourceApplicationDataEntry_prepareParams(authenticationToken, guid, key, value); QByteArray reply = askEvernote(url_, params); return NoteStore_setResourceApplicationDataEntry_readReply(reply); } AsyncResult* NoteStore::setResourceApplicationDataEntryAsync(Guid guid, QString key, QString value, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_setResourceApplicationDataEntry_prepareParams(authenticationToken, guid, key, value); return new AsyncResult(url_, params, NoteStore_setResourceApplicationDataEntry_readReplyAsync); } QByteArray NoteStore_unsetResourceApplicationDataEntry_prepareParams(QString authenticationToken, Guid guid, QString key) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("unsetResourceApplicationDataEntry", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_unsetResourceApplicationDataEntry_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldBegin("key", ThriftFieldType::T_STRING, 3); w.writeString(key); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_unsetResourceApplicationDataEntry_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("unsetResourceApplicationDataEntry") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("unsetResourceApplicationDataEntry: missing result")); return result; } QVariant NoteStore_unsetResourceApplicationDataEntry_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_unsetResourceApplicationDataEntry_readReply(reply)); } qint32 NoteStore::unsetResourceApplicationDataEntry(Guid guid, QString key, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_unsetResourceApplicationDataEntry_prepareParams(authenticationToken, guid, key); QByteArray reply = askEvernote(url_, params); return NoteStore_unsetResourceApplicationDataEntry_readReply(reply); } AsyncResult* NoteStore::unsetResourceApplicationDataEntryAsync(Guid guid, QString key, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_unsetResourceApplicationDataEntry_prepareParams(authenticationToken, guid, key); return new AsyncResult(url_, params, NoteStore_unsetResourceApplicationDataEntry_readReplyAsync); } QByteArray NoteStore_updateResource_prepareParams(QString authenticationToken, const Resource& resource) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("updateResource", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_updateResource_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("resource", ThriftFieldType::T_STRUCT, 2); writeResource(w, resource); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_updateResource_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("updateResource") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("updateResource: missing result")); return result; } QVariant NoteStore_updateResource_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_updateResource_readReply(reply)); } qint32 NoteStore::updateResource(const Resource& resource, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_updateResource_prepareParams(authenticationToken, resource); QByteArray reply = askEvernote(url_, params); return NoteStore_updateResource_readReply(reply); } AsyncResult* NoteStore::updateResourceAsync(const Resource& resource, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_updateResource_prepareParams(authenticationToken, resource); return new AsyncResult(url_, params, NoteStore_updateResource_readReplyAsync); } QByteArray NoteStore_getResourceData_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getResourceData", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getResourceData_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QByteArray NoteStore_getResourceData_readReply(QByteArray reply) { bool resultIsSet = false; QByteArray result = QByteArray(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getResourceData") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRING) { resultIsSet = true; QByteArray v; r.readBinary(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getResourceData: missing result")); return result; } QVariant NoteStore_getResourceData_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getResourceData_readReply(reply)); } QByteArray NoteStore::getResourceData(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceData_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_getResourceData_readReply(reply); } AsyncResult* NoteStore::getResourceDataAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceData_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_getResourceData_readReplyAsync); } QByteArray NoteStore_getResourceByHash_prepareParams(QString authenticationToken, Guid noteGuid, QByteArray contentHash, bool withData, bool withRecognition, bool withAlternateData) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getResourceByHash", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getResourceByHash_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("noteGuid", ThriftFieldType::T_STRING, 2); w.writeString(noteGuid); w.writeFieldEnd(); w.writeFieldBegin("contentHash", ThriftFieldType::T_STRING, 3); w.writeBinary(contentHash); w.writeFieldEnd(); w.writeFieldBegin("withData", ThriftFieldType::T_BOOL, 4); w.writeBool(withData); w.writeFieldEnd(); w.writeFieldBegin("withRecognition", ThriftFieldType::T_BOOL, 5); w.writeBool(withRecognition); w.writeFieldEnd(); w.writeFieldBegin("withAlternateData", ThriftFieldType::T_BOOL, 6); w.writeBool(withAlternateData); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } Resource NoteStore_getResourceByHash_readReply(QByteArray reply) { bool resultIsSet = false; Resource result = Resource(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getResourceByHash") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; Resource v; readResource(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getResourceByHash: missing result")); return result; } QVariant NoteStore_getResourceByHash_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getResourceByHash_readReply(reply)); } Resource NoteStore::getResourceByHash(Guid noteGuid, QByteArray contentHash, bool withData, bool withRecognition, bool withAlternateData, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceByHash_prepareParams(authenticationToken, noteGuid, contentHash, withData, withRecognition, withAlternateData); QByteArray reply = askEvernote(url_, params); return NoteStore_getResourceByHash_readReply(reply); } AsyncResult* NoteStore::getResourceByHashAsync(Guid noteGuid, QByteArray contentHash, bool withData, bool withRecognition, bool withAlternateData, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceByHash_prepareParams(authenticationToken, noteGuid, contentHash, withData, withRecognition, withAlternateData); return new AsyncResult(url_, params, NoteStore_getResourceByHash_readReplyAsync); } QByteArray NoteStore_getResourceRecognition_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getResourceRecognition", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getResourceRecognition_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QByteArray NoteStore_getResourceRecognition_readReply(QByteArray reply) { bool resultIsSet = false; QByteArray result = QByteArray(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getResourceRecognition") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRING) { resultIsSet = true; QByteArray v; r.readBinary(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getResourceRecognition: missing result")); return result; } QVariant NoteStore_getResourceRecognition_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getResourceRecognition_readReply(reply)); } QByteArray NoteStore::getResourceRecognition(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceRecognition_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_getResourceRecognition_readReply(reply); } AsyncResult* NoteStore::getResourceRecognitionAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceRecognition_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_getResourceRecognition_readReplyAsync); } QByteArray NoteStore_getResourceAlternateData_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getResourceAlternateData", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getResourceAlternateData_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QByteArray NoteStore_getResourceAlternateData_readReply(QByteArray reply) { bool resultIsSet = false; QByteArray result = QByteArray(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getResourceAlternateData") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRING) { resultIsSet = true; QByteArray v; r.readBinary(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getResourceAlternateData: missing result")); return result; } QVariant NoteStore_getResourceAlternateData_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getResourceAlternateData_readReply(reply)); } QByteArray NoteStore::getResourceAlternateData(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceAlternateData_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_getResourceAlternateData_readReply(reply); } AsyncResult* NoteStore::getResourceAlternateDataAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceAlternateData_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_getResourceAlternateData_readReplyAsync); } QByteArray NoteStore_getResourceAttributes_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getResourceAttributes", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getResourceAttributes_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } ResourceAttributes NoteStore_getResourceAttributes_readReply(QByteArray reply) { bool resultIsSet = false; ResourceAttributes result = ResourceAttributes(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getResourceAttributes") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; ResourceAttributes v; readResourceAttributes(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getResourceAttributes: missing result")); return result; } QVariant NoteStore_getResourceAttributes_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getResourceAttributes_readReply(reply)); } ResourceAttributes NoteStore::getResourceAttributes(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceAttributes_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_getResourceAttributes_readReply(reply); } AsyncResult* NoteStore::getResourceAttributesAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getResourceAttributes_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_getResourceAttributes_readReplyAsync); } QByteArray NoteStore_getPublicNotebook_prepareParams(UserID userId, QString publicUri) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getPublicNotebook", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getPublicNotebook_pargs"); w.writeFieldBegin("userId", ThriftFieldType::T_I32, 1); w.writeI32(userId); w.writeFieldEnd(); w.writeFieldBegin("publicUri", ThriftFieldType::T_STRING, 2); w.writeString(publicUri); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } Notebook NoteStore_getPublicNotebook_readReply(QByteArray reply) { bool resultIsSet = false; Notebook result = Notebook(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getPublicNotebook") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; Notebook v; readNotebook(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getPublicNotebook: missing result")); return result; } QVariant NoteStore_getPublicNotebook_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getPublicNotebook_readReply(reply)); } Notebook NoteStore::getPublicNotebook(UserID userId, QString publicUri) { QByteArray params = NoteStore_getPublicNotebook_prepareParams(userId, publicUri); QByteArray reply = askEvernote(url_, params); return NoteStore_getPublicNotebook_readReply(reply); } AsyncResult* NoteStore::getPublicNotebookAsync(UserID userId, QString publicUri) { QByteArray params = NoteStore_getPublicNotebook_prepareParams(userId, publicUri); return new AsyncResult(url_, params, NoteStore_getPublicNotebook_readReplyAsync); } QByteArray NoteStore_createSharedNotebook_prepareParams(QString authenticationToken, const SharedNotebook& sharedNotebook) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("createSharedNotebook", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_createSharedNotebook_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("sharedNotebook", ThriftFieldType::T_STRUCT, 2); writeSharedNotebook(w, sharedNotebook); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } SharedNotebook NoteStore_createSharedNotebook_readReply(QByteArray reply) { bool resultIsSet = false; SharedNotebook result = SharedNotebook(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("createSharedNotebook") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; SharedNotebook v; readSharedNotebook(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("createSharedNotebook: missing result")); return result; } QVariant NoteStore_createSharedNotebook_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_createSharedNotebook_readReply(reply)); } SharedNotebook NoteStore::createSharedNotebook(const SharedNotebook& sharedNotebook, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_createSharedNotebook_prepareParams(authenticationToken, sharedNotebook); QByteArray reply = askEvernote(url_, params); return NoteStore_createSharedNotebook_readReply(reply); } AsyncResult* NoteStore::createSharedNotebookAsync(const SharedNotebook& sharedNotebook, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_createSharedNotebook_prepareParams(authenticationToken, sharedNotebook); return new AsyncResult(url_, params, NoteStore_createSharedNotebook_readReplyAsync); } QByteArray NoteStore_updateSharedNotebook_prepareParams(QString authenticationToken, const SharedNotebook& sharedNotebook) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("updateSharedNotebook", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_updateSharedNotebook_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("sharedNotebook", ThriftFieldType::T_STRUCT, 2); writeSharedNotebook(w, sharedNotebook); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_updateSharedNotebook_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("updateSharedNotebook") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("updateSharedNotebook: missing result")); return result; } QVariant NoteStore_updateSharedNotebook_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_updateSharedNotebook_readReply(reply)); } qint32 NoteStore::updateSharedNotebook(const SharedNotebook& sharedNotebook, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_updateSharedNotebook_prepareParams(authenticationToken, sharedNotebook); QByteArray reply = askEvernote(url_, params); return NoteStore_updateSharedNotebook_readReply(reply); } AsyncResult* NoteStore::updateSharedNotebookAsync(const SharedNotebook& sharedNotebook, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_updateSharedNotebook_prepareParams(authenticationToken, sharedNotebook); return new AsyncResult(url_, params, NoteStore_updateSharedNotebook_readReplyAsync); } QByteArray NoteStore_setSharedNotebookRecipientSettings_prepareParams(QString authenticationToken, qint64 sharedNotebookId, const SharedNotebookRecipientSettings& recipientSettings) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("setSharedNotebookRecipientSettings", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_setSharedNotebookRecipientSettings_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("sharedNotebookId", ThriftFieldType::T_I64, 2); w.writeI64(sharedNotebookId); w.writeFieldEnd(); w.writeFieldBegin("recipientSettings", ThriftFieldType::T_STRUCT, 3); writeSharedNotebookRecipientSettings(w, recipientSettings); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_setSharedNotebookRecipientSettings_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("setSharedNotebookRecipientSettings") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("setSharedNotebookRecipientSettings: missing result")); return result; } QVariant NoteStore_setSharedNotebookRecipientSettings_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_setSharedNotebookRecipientSettings_readReply(reply)); } qint32 NoteStore::setSharedNotebookRecipientSettings(qint64 sharedNotebookId, const SharedNotebookRecipientSettings& recipientSettings, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_setSharedNotebookRecipientSettings_prepareParams(authenticationToken, sharedNotebookId, recipientSettings); QByteArray reply = askEvernote(url_, params); return NoteStore_setSharedNotebookRecipientSettings_readReply(reply); } AsyncResult* NoteStore::setSharedNotebookRecipientSettingsAsync(qint64 sharedNotebookId, const SharedNotebookRecipientSettings& recipientSettings, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_setSharedNotebookRecipientSettings_prepareParams(authenticationToken, sharedNotebookId, recipientSettings); return new AsyncResult(url_, params, NoteStore_setSharedNotebookRecipientSettings_readReplyAsync); } QByteArray NoteStore_sendMessageToSharedNotebookMembers_prepareParams(QString authenticationToken, Guid notebookGuid, QString messageText, QStringList recipients) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("sendMessageToSharedNotebookMembers", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_sendMessageToSharedNotebookMembers_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("notebookGuid", ThriftFieldType::T_STRING, 2); w.writeString(notebookGuid); w.writeFieldEnd(); w.writeFieldBegin("messageText", ThriftFieldType::T_STRING, 3); w.writeString(messageText); w.writeFieldEnd(); w.writeFieldBegin("recipients", ThriftFieldType::T_LIST, 4); w.writeListBegin(ThriftFieldType::T_STRING, recipients.length()); Q_FOREACH(const QString& elem, recipients) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_sendMessageToSharedNotebookMembers_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("sendMessageToSharedNotebookMembers") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("sendMessageToSharedNotebookMembers: missing result")); return result; } QVariant NoteStore_sendMessageToSharedNotebookMembers_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_sendMessageToSharedNotebookMembers_readReply(reply)); } qint32 NoteStore::sendMessageToSharedNotebookMembers(Guid notebookGuid, QString messageText, QStringList recipients, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_sendMessageToSharedNotebookMembers_prepareParams(authenticationToken, notebookGuid, messageText, recipients); QByteArray reply = askEvernote(url_, params); return NoteStore_sendMessageToSharedNotebookMembers_readReply(reply); } AsyncResult* NoteStore::sendMessageToSharedNotebookMembersAsync(Guid notebookGuid, QString messageText, QStringList recipients, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_sendMessageToSharedNotebookMembers_prepareParams(authenticationToken, notebookGuid, messageText, recipients); return new AsyncResult(url_, params, NoteStore_sendMessageToSharedNotebookMembers_readReplyAsync); } QByteArray NoteStore_listSharedNotebooks_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("listSharedNotebooks", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_listSharedNotebooks_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QList< SharedNotebook > NoteStore_listSharedNotebooks_readReply(QByteArray reply) { bool resultIsSet = false; QList< SharedNotebook > result = QList< SharedNotebook >(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("listSharedNotebooks") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_LIST) { resultIsSet = true; QList< SharedNotebook > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (listSharedNotebooks.result)"); for(quint32 i = 0; i < size; i++) { SharedNotebook elem; readSharedNotebook(r, elem); v.append(elem); } r.readListEnd(); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("listSharedNotebooks: missing result")); return result; } QVariant NoteStore_listSharedNotebooks_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_listSharedNotebooks_readReply(reply)); } QList< SharedNotebook > NoteStore::listSharedNotebooks(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_listSharedNotebooks_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); return NoteStore_listSharedNotebooks_readReply(reply); } AsyncResult* NoteStore::listSharedNotebooksAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_listSharedNotebooks_prepareParams(authenticationToken); return new AsyncResult(url_, params, NoteStore_listSharedNotebooks_readReplyAsync); } QByteArray NoteStore_expungeSharedNotebooks_prepareParams(QString authenticationToken, QList< qint64 > sharedNotebookIds) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("expungeSharedNotebooks", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_expungeSharedNotebooks_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("sharedNotebookIds", ThriftFieldType::T_LIST, 2); w.writeListBegin(ThriftFieldType::T_I64, sharedNotebookIds.length()); Q_FOREACH(const qint64& elem, sharedNotebookIds) { w.writeI64(elem); } w.writeListEnd(); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_expungeSharedNotebooks_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("expungeSharedNotebooks") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("expungeSharedNotebooks: missing result")); return result; } QVariant NoteStore_expungeSharedNotebooks_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_expungeSharedNotebooks_readReply(reply)); } qint32 NoteStore::expungeSharedNotebooks(QList< qint64 > sharedNotebookIds, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeSharedNotebooks_prepareParams(authenticationToken, sharedNotebookIds); QByteArray reply = askEvernote(url_, params); return NoteStore_expungeSharedNotebooks_readReply(reply); } AsyncResult* NoteStore::expungeSharedNotebooksAsync(QList< qint64 > sharedNotebookIds, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeSharedNotebooks_prepareParams(authenticationToken, sharedNotebookIds); return new AsyncResult(url_, params, NoteStore_expungeSharedNotebooks_readReplyAsync); } QByteArray NoteStore_createLinkedNotebook_prepareParams(QString authenticationToken, const LinkedNotebook& linkedNotebook) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("createLinkedNotebook", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_createLinkedNotebook_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("linkedNotebook", ThriftFieldType::T_STRUCT, 2); writeLinkedNotebook(w, linkedNotebook); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } LinkedNotebook NoteStore_createLinkedNotebook_readReply(QByteArray reply) { bool resultIsSet = false; LinkedNotebook result = LinkedNotebook(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("createLinkedNotebook") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; LinkedNotebook v; readLinkedNotebook(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("createLinkedNotebook: missing result")); return result; } QVariant NoteStore_createLinkedNotebook_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_createLinkedNotebook_readReply(reply)); } LinkedNotebook NoteStore::createLinkedNotebook(const LinkedNotebook& linkedNotebook, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_createLinkedNotebook_prepareParams(authenticationToken, linkedNotebook); QByteArray reply = askEvernote(url_, params); return NoteStore_createLinkedNotebook_readReply(reply); } AsyncResult* NoteStore::createLinkedNotebookAsync(const LinkedNotebook& linkedNotebook, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_createLinkedNotebook_prepareParams(authenticationToken, linkedNotebook); return new AsyncResult(url_, params, NoteStore_createLinkedNotebook_readReplyAsync); } QByteArray NoteStore_updateLinkedNotebook_prepareParams(QString authenticationToken, const LinkedNotebook& linkedNotebook) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("updateLinkedNotebook", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_updateLinkedNotebook_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("linkedNotebook", ThriftFieldType::T_STRUCT, 2); writeLinkedNotebook(w, linkedNotebook); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_updateLinkedNotebook_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("updateLinkedNotebook") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("updateLinkedNotebook: missing result")); return result; } QVariant NoteStore_updateLinkedNotebook_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_updateLinkedNotebook_readReply(reply)); } qint32 NoteStore::updateLinkedNotebook(const LinkedNotebook& linkedNotebook, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_updateLinkedNotebook_prepareParams(authenticationToken, linkedNotebook); QByteArray reply = askEvernote(url_, params); return NoteStore_updateLinkedNotebook_readReply(reply); } AsyncResult* NoteStore::updateLinkedNotebookAsync(const LinkedNotebook& linkedNotebook, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_updateLinkedNotebook_prepareParams(authenticationToken, linkedNotebook); return new AsyncResult(url_, params, NoteStore_updateLinkedNotebook_readReplyAsync); } QByteArray NoteStore_listLinkedNotebooks_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("listLinkedNotebooks", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_listLinkedNotebooks_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QList< LinkedNotebook > NoteStore_listLinkedNotebooks_readReply(QByteArray reply) { bool resultIsSet = false; QList< LinkedNotebook > result = QList< LinkedNotebook >(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("listLinkedNotebooks") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_LIST) { resultIsSet = true; QList< LinkedNotebook > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (listLinkedNotebooks.result)"); for(quint32 i = 0; i < size; i++) { LinkedNotebook elem; readLinkedNotebook(r, elem); v.append(elem); } r.readListEnd(); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("listLinkedNotebooks: missing result")); return result; } QVariant NoteStore_listLinkedNotebooks_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_listLinkedNotebooks_readReply(reply)); } QList< LinkedNotebook > NoteStore::listLinkedNotebooks(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_listLinkedNotebooks_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); return NoteStore_listLinkedNotebooks_readReply(reply); } AsyncResult* NoteStore::listLinkedNotebooksAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_listLinkedNotebooks_prepareParams(authenticationToken); return new AsyncResult(url_, params, NoteStore_listLinkedNotebooks_readReplyAsync); } QByteArray NoteStore_expungeLinkedNotebook_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("expungeLinkedNotebook", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_expungeLinkedNotebook_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } qint32 NoteStore_expungeLinkedNotebook_readReply(QByteArray reply) { bool resultIsSet = false; qint32 result = qint32(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("expungeLinkedNotebook") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_I32) { resultIsSet = true; qint32 v; r.readI32(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("expungeLinkedNotebook: missing result")); return result; } QVariant NoteStore_expungeLinkedNotebook_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_expungeLinkedNotebook_readReply(reply)); } qint32 NoteStore::expungeLinkedNotebook(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeLinkedNotebook_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_expungeLinkedNotebook_readReply(reply); } AsyncResult* NoteStore::expungeLinkedNotebookAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_expungeLinkedNotebook_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_expungeLinkedNotebook_readReplyAsync); } QByteArray NoteStore_authenticateToSharedNotebook_prepareParams(QString shareKey, QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("authenticateToSharedNotebook", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_authenticateToSharedNotebook_pargs"); w.writeFieldBegin("shareKey", ThriftFieldType::T_STRING, 1); w.writeString(shareKey); w.writeFieldEnd(); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 2); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } AuthenticationResult NoteStore_authenticateToSharedNotebook_readReply(QByteArray reply) { bool resultIsSet = false; AuthenticationResult result = AuthenticationResult(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("authenticateToSharedNotebook") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; AuthenticationResult v; readAuthenticationResult(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("authenticateToSharedNotebook: missing result")); return result; } QVariant NoteStore_authenticateToSharedNotebook_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_authenticateToSharedNotebook_readReply(reply)); } AuthenticationResult NoteStore::authenticateToSharedNotebook(QString shareKey, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_authenticateToSharedNotebook_prepareParams(shareKey, authenticationToken); QByteArray reply = askEvernote(url_, params); return NoteStore_authenticateToSharedNotebook_readReply(reply); } AsyncResult* NoteStore::authenticateToSharedNotebookAsync(QString shareKey, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_authenticateToSharedNotebook_prepareParams(shareKey, authenticationToken); return new AsyncResult(url_, params, NoteStore_authenticateToSharedNotebook_readReplyAsync); } QByteArray NoteStore_getSharedNotebookByAuth_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getSharedNotebookByAuth", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_getSharedNotebookByAuth_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } SharedNotebook NoteStore_getSharedNotebookByAuth_readReply(QByteArray reply) { bool resultIsSet = false; SharedNotebook result = SharedNotebook(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getSharedNotebookByAuth") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; SharedNotebook v; readSharedNotebook(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getSharedNotebookByAuth: missing result")); return result; } QVariant NoteStore_getSharedNotebookByAuth_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_getSharedNotebookByAuth_readReply(reply)); } SharedNotebook NoteStore::getSharedNotebookByAuth(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getSharedNotebookByAuth_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); return NoteStore_getSharedNotebookByAuth_readReply(reply); } AsyncResult* NoteStore::getSharedNotebookByAuthAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_getSharedNotebookByAuth_prepareParams(authenticationToken); return new AsyncResult(url_, params, NoteStore_getSharedNotebookByAuth_readReplyAsync); } QByteArray NoteStore_emailNote_prepareParams(QString authenticationToken, const NoteEmailParameters& parameters) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("emailNote", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_emailNote_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("parameters", ThriftFieldType::T_STRUCT, 2); writeNoteEmailParameters(w, parameters); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } void NoteStore_emailNote_readReply(QByteArray reply) { ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("emailNote") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); } QVariant NoteStore_emailNote_readReplyAsync(QByteArray reply) { NoteStore_emailNote_readReply(reply); return QVariant(); } void NoteStore::emailNote(const NoteEmailParameters& parameters, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_emailNote_prepareParams(authenticationToken, parameters); QByteArray reply = askEvernote(url_, params); NoteStore_emailNote_readReply(reply); } AsyncResult* NoteStore::emailNoteAsync(const NoteEmailParameters& parameters, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_emailNote_prepareParams(authenticationToken, parameters); return new AsyncResult(url_, params, NoteStore_emailNote_readReplyAsync); } QByteArray NoteStore_shareNote_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("shareNote", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_shareNote_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QString NoteStore_shareNote_readReply(QByteArray reply) { bool resultIsSet = false; QString result = QString(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("shareNote") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRING) { resultIsSet = true; QString v; r.readString(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("shareNote: missing result")); return result; } QVariant NoteStore_shareNote_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_shareNote_readReply(reply)); } QString NoteStore::shareNote(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_shareNote_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); return NoteStore_shareNote_readReply(reply); } AsyncResult* NoteStore::shareNoteAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_shareNote_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_shareNote_readReplyAsync); } QByteArray NoteStore_stopSharingNote_prepareParams(QString authenticationToken, Guid guid) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("stopSharingNote", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_stopSharingNote_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 2); w.writeString(guid); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } void NoteStore_stopSharingNote_readReply(QByteArray reply) { ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("stopSharingNote") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); } QVariant NoteStore_stopSharingNote_readReplyAsync(QByteArray reply) { NoteStore_stopSharingNote_readReply(reply); return QVariant(); } void NoteStore::stopSharingNote(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_stopSharingNote_prepareParams(authenticationToken, guid); QByteArray reply = askEvernote(url_, params); NoteStore_stopSharingNote_readReply(reply); } AsyncResult* NoteStore::stopSharingNoteAsync(Guid guid, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_stopSharingNote_prepareParams(authenticationToken, guid); return new AsyncResult(url_, params, NoteStore_stopSharingNote_readReplyAsync); } QByteArray NoteStore_authenticateToSharedNote_prepareParams(QString guid, QString noteKey, QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("authenticateToSharedNote", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_authenticateToSharedNote_pargs"); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 1); w.writeString(guid); w.writeFieldEnd(); w.writeFieldBegin("noteKey", ThriftFieldType::T_STRING, 2); w.writeString(noteKey); w.writeFieldEnd(); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 3); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } AuthenticationResult NoteStore_authenticateToSharedNote_readReply(QByteArray reply) { bool resultIsSet = false; AuthenticationResult result = AuthenticationResult(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("authenticateToSharedNote") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; AuthenticationResult v; readAuthenticationResult(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("authenticateToSharedNote: missing result")); return result; } QVariant NoteStore_authenticateToSharedNote_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_authenticateToSharedNote_readReply(reply)); } AuthenticationResult NoteStore::authenticateToSharedNote(QString guid, QString noteKey, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_authenticateToSharedNote_prepareParams(guid, noteKey, authenticationToken); QByteArray reply = askEvernote(url_, params); return NoteStore_authenticateToSharedNote_readReply(reply); } AsyncResult* NoteStore::authenticateToSharedNoteAsync(QString guid, QString noteKey, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_authenticateToSharedNote_prepareParams(guid, noteKey, authenticationToken); return new AsyncResult(url_, params, NoteStore_authenticateToSharedNote_readReplyAsync); } QByteArray NoteStore_findRelated_prepareParams(QString authenticationToken, const RelatedQuery& query, const RelatedResultSpec& resultSpec) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("findRelated", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("NoteStore_findRelated_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("query", ThriftFieldType::T_STRUCT, 2); writeRelatedQuery(w, query); w.writeFieldEnd(); w.writeFieldBegin("resultSpec", ThriftFieldType::T_STRUCT, 3); writeRelatedResultSpec(w, resultSpec); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } RelatedResult NoteStore_findRelated_readReply(QByteArray reply) { bool resultIsSet = false; RelatedResult result = RelatedResult(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("findRelated") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; RelatedResult v; readRelatedResult(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("findRelated: missing result")); return result; } QVariant NoteStore_findRelated_readReplyAsync(QByteArray reply) { return QVariant::fromValue(NoteStore_findRelated_readReply(reply)); } RelatedResult NoteStore::findRelated(const RelatedQuery& query, const RelatedResultSpec& resultSpec, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_findRelated_prepareParams(authenticationToken, query, resultSpec); QByteArray reply = askEvernote(url_, params); return NoteStore_findRelated_readReply(reply); } AsyncResult* NoteStore::findRelatedAsync(const RelatedQuery& query, const RelatedResultSpec& resultSpec, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = NoteStore_findRelated_prepareParams(authenticationToken, query, resultSpec); return new AsyncResult(url_, params, NoteStore_findRelated_readReplyAsync); } QByteArray UserStore_checkVersion_prepareParams(QString clientName, qint16 edamVersionMajor, qint16 edamVersionMinor) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("checkVersion", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("UserStore_checkVersion_pargs"); w.writeFieldBegin("clientName", ThriftFieldType::T_STRING, 1); w.writeString(clientName); w.writeFieldEnd(); w.writeFieldBegin("edamVersionMajor", ThriftFieldType::T_I16, 2); w.writeI16(edamVersionMajor); w.writeFieldEnd(); w.writeFieldBegin("edamVersionMinor", ThriftFieldType::T_I16, 3); w.writeI16(edamVersionMinor); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } bool UserStore_checkVersion_readReply(QByteArray reply) { bool resultIsSet = false; bool result = bool(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("checkVersion") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_BOOL) { resultIsSet = true; bool v; r.readBool(v); result = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("checkVersion: missing result")); return result; } QVariant UserStore_checkVersion_readReplyAsync(QByteArray reply) { return QVariant::fromValue(UserStore_checkVersion_readReply(reply)); } bool UserStore::checkVersion(QString clientName, qint16 edamVersionMajor, qint16 edamVersionMinor) { QByteArray params = UserStore_checkVersion_prepareParams(clientName, edamVersionMajor, edamVersionMinor); QByteArray reply = askEvernote(url_, params); return UserStore_checkVersion_readReply(reply); } AsyncResult* UserStore::checkVersionAsync(QString clientName, qint16 edamVersionMajor, qint16 edamVersionMinor) { QByteArray params = UserStore_checkVersion_prepareParams(clientName, edamVersionMajor, edamVersionMinor); return new AsyncResult(url_, params, UserStore_checkVersion_readReplyAsync); } QByteArray UserStore_getBootstrapInfo_prepareParams(QString locale) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getBootstrapInfo", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("UserStore_getBootstrapInfo_pargs"); w.writeFieldBegin("locale", ThriftFieldType::T_STRING, 1); w.writeString(locale); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } BootstrapInfo UserStore_getBootstrapInfo_readReply(QByteArray reply) { bool resultIsSet = false; BootstrapInfo result = BootstrapInfo(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getBootstrapInfo") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; BootstrapInfo v; readBootstrapInfo(r, v); result = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getBootstrapInfo: missing result")); return result; } QVariant UserStore_getBootstrapInfo_readReplyAsync(QByteArray reply) { return QVariant::fromValue(UserStore_getBootstrapInfo_readReply(reply)); } BootstrapInfo UserStore::getBootstrapInfo(QString locale) { QByteArray params = UserStore_getBootstrapInfo_prepareParams(locale); QByteArray reply = askEvernote(url_, params); return UserStore_getBootstrapInfo_readReply(reply); } AsyncResult* UserStore::getBootstrapInfoAsync(QString locale) { QByteArray params = UserStore_getBootstrapInfo_prepareParams(locale); return new AsyncResult(url_, params, UserStore_getBootstrapInfo_readReplyAsync); } QByteArray UserStore_authenticate_prepareParams(QString username, QString password, QString consumerKey, QString consumerSecret, bool supportsTwoFactor) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("authenticate", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("UserStore_authenticate_pargs"); w.writeFieldBegin("username", ThriftFieldType::T_STRING, 1); w.writeString(username); w.writeFieldEnd(); w.writeFieldBegin("password", ThriftFieldType::T_STRING, 2); w.writeString(password); w.writeFieldEnd(); w.writeFieldBegin("consumerKey", ThriftFieldType::T_STRING, 3); w.writeString(consumerKey); w.writeFieldEnd(); w.writeFieldBegin("consumerSecret", ThriftFieldType::T_STRING, 4); w.writeString(consumerSecret); w.writeFieldEnd(); w.writeFieldBegin("supportsTwoFactor", ThriftFieldType::T_BOOL, 5); w.writeBool(supportsTwoFactor); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } AuthenticationResult UserStore_authenticate_readReply(QByteArray reply) { bool resultIsSet = false; AuthenticationResult result = AuthenticationResult(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("authenticate") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; AuthenticationResult v; readAuthenticationResult(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("authenticate: missing result")); return result; } QVariant UserStore_authenticate_readReplyAsync(QByteArray reply) { return QVariant::fromValue(UserStore_authenticate_readReply(reply)); } AuthenticationResult UserStore::authenticate(QString username, QString password, QString consumerKey, QString consumerSecret, bool supportsTwoFactor) { QByteArray params = UserStore_authenticate_prepareParams(username, password, consumerKey, consumerSecret, supportsTwoFactor); QByteArray reply = askEvernote(url_, params); return UserStore_authenticate_readReply(reply); } AsyncResult* UserStore::authenticateAsync(QString username, QString password, QString consumerKey, QString consumerSecret, bool supportsTwoFactor) { QByteArray params = UserStore_authenticate_prepareParams(username, password, consumerKey, consumerSecret, supportsTwoFactor); return new AsyncResult(url_, params, UserStore_authenticate_readReplyAsync); } QByteArray UserStore_authenticateLongSession_prepareParams(QString username, QString password, QString consumerKey, QString consumerSecret, QString deviceIdentifier, QString deviceDescription, bool supportsTwoFactor) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("authenticateLongSession", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("UserStore_authenticateLongSession_pargs"); w.writeFieldBegin("username", ThriftFieldType::T_STRING, 1); w.writeString(username); w.writeFieldEnd(); w.writeFieldBegin("password", ThriftFieldType::T_STRING, 2); w.writeString(password); w.writeFieldEnd(); w.writeFieldBegin("consumerKey", ThriftFieldType::T_STRING, 3); w.writeString(consumerKey); w.writeFieldEnd(); w.writeFieldBegin("consumerSecret", ThriftFieldType::T_STRING, 4); w.writeString(consumerSecret); w.writeFieldEnd(); w.writeFieldBegin("deviceIdentifier", ThriftFieldType::T_STRING, 5); w.writeString(deviceIdentifier); w.writeFieldEnd(); w.writeFieldBegin("deviceDescription", ThriftFieldType::T_STRING, 6); w.writeString(deviceDescription); w.writeFieldEnd(); w.writeFieldBegin("supportsTwoFactor", ThriftFieldType::T_BOOL, 7); w.writeBool(supportsTwoFactor); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } AuthenticationResult UserStore_authenticateLongSession_readReply(QByteArray reply) { bool resultIsSet = false; AuthenticationResult result = AuthenticationResult(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("authenticateLongSession") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; AuthenticationResult v; readAuthenticationResult(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("authenticateLongSession: missing result")); return result; } QVariant UserStore_authenticateLongSession_readReplyAsync(QByteArray reply) { return QVariant::fromValue(UserStore_authenticateLongSession_readReply(reply)); } AuthenticationResult UserStore::authenticateLongSession(QString username, QString password, QString consumerKey, QString consumerSecret, QString deviceIdentifier, QString deviceDescription, bool supportsTwoFactor) { QByteArray params = UserStore_authenticateLongSession_prepareParams(username, password, consumerKey, consumerSecret, deviceIdentifier, deviceDescription, supportsTwoFactor); QByteArray reply = askEvernote(url_, params); return UserStore_authenticateLongSession_readReply(reply); } AsyncResult* UserStore::authenticateLongSessionAsync(QString username, QString password, QString consumerKey, QString consumerSecret, QString deviceIdentifier, QString deviceDescription, bool supportsTwoFactor) { QByteArray params = UserStore_authenticateLongSession_prepareParams(username, password, consumerKey, consumerSecret, deviceIdentifier, deviceDescription, supportsTwoFactor); return new AsyncResult(url_, params, UserStore_authenticateLongSession_readReplyAsync); } QByteArray UserStore_completeTwoFactorAuthentication_prepareParams(QString authenticationToken, QString oneTimeCode, QString deviceIdentifier, QString deviceDescription) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("completeTwoFactorAuthentication", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("UserStore_completeTwoFactorAuthentication_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("oneTimeCode", ThriftFieldType::T_STRING, 2); w.writeString(oneTimeCode); w.writeFieldEnd(); w.writeFieldBegin("deviceIdentifier", ThriftFieldType::T_STRING, 3); w.writeString(deviceIdentifier); w.writeFieldEnd(); w.writeFieldBegin("deviceDescription", ThriftFieldType::T_STRING, 4); w.writeString(deviceDescription); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } AuthenticationResult UserStore_completeTwoFactorAuthentication_readReply(QByteArray reply) { bool resultIsSet = false; AuthenticationResult result = AuthenticationResult(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("completeTwoFactorAuthentication") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; AuthenticationResult v; readAuthenticationResult(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("completeTwoFactorAuthentication: missing result")); return result; } QVariant UserStore_completeTwoFactorAuthentication_readReplyAsync(QByteArray reply) { return QVariant::fromValue(UserStore_completeTwoFactorAuthentication_readReply(reply)); } AuthenticationResult UserStore::completeTwoFactorAuthentication(QString oneTimeCode, QString deviceIdentifier, QString deviceDescription, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = UserStore_completeTwoFactorAuthentication_prepareParams(authenticationToken, oneTimeCode, deviceIdentifier, deviceDescription); QByteArray reply = askEvernote(url_, params); return UserStore_completeTwoFactorAuthentication_readReply(reply); } AsyncResult* UserStore::completeTwoFactorAuthenticationAsync(QString oneTimeCode, QString deviceIdentifier, QString deviceDescription, QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = UserStore_completeTwoFactorAuthentication_prepareParams(authenticationToken, oneTimeCode, deviceIdentifier, deviceDescription); return new AsyncResult(url_, params, UserStore_completeTwoFactorAuthentication_readReplyAsync); } QByteArray UserStore_revokeLongSession_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("revokeLongSession", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("UserStore_revokeLongSession_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } void UserStore_revokeLongSession_readReply(QByteArray reply) { ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("revokeLongSession") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); } QVariant UserStore_revokeLongSession_readReplyAsync(QByteArray reply) { UserStore_revokeLongSession_readReply(reply); return QVariant(); } void UserStore::revokeLongSession(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = UserStore_revokeLongSession_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); UserStore_revokeLongSession_readReply(reply); } AsyncResult* UserStore::revokeLongSessionAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = UserStore_revokeLongSession_prepareParams(authenticationToken); return new AsyncResult(url_, params, UserStore_revokeLongSession_readReplyAsync); } QByteArray UserStore_authenticateToBusiness_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("authenticateToBusiness", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("UserStore_authenticateToBusiness_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } AuthenticationResult UserStore_authenticateToBusiness_readReply(QByteArray reply) { bool resultIsSet = false; AuthenticationResult result = AuthenticationResult(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("authenticateToBusiness") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; AuthenticationResult v; readAuthenticationResult(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("authenticateToBusiness: missing result")); return result; } QVariant UserStore_authenticateToBusiness_readReplyAsync(QByteArray reply) { return QVariant::fromValue(UserStore_authenticateToBusiness_readReply(reply)); } AuthenticationResult UserStore::authenticateToBusiness(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = UserStore_authenticateToBusiness_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); return UserStore_authenticateToBusiness_readReply(reply); } AsyncResult* UserStore::authenticateToBusinessAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = UserStore_authenticateToBusiness_prepareParams(authenticationToken); return new AsyncResult(url_, params, UserStore_authenticateToBusiness_readReplyAsync); } QByteArray UserStore_refreshAuthentication_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("refreshAuthentication", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("UserStore_refreshAuthentication_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } AuthenticationResult UserStore_refreshAuthentication_readReply(QByteArray reply) { bool resultIsSet = false; AuthenticationResult result = AuthenticationResult(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("refreshAuthentication") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; AuthenticationResult v; readAuthenticationResult(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("refreshAuthentication: missing result")); return result; } QVariant UserStore_refreshAuthentication_readReplyAsync(QByteArray reply) { return QVariant::fromValue(UserStore_refreshAuthentication_readReply(reply)); } AuthenticationResult UserStore::refreshAuthentication(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = UserStore_refreshAuthentication_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); return UserStore_refreshAuthentication_readReply(reply); } AsyncResult* UserStore::refreshAuthenticationAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = UserStore_refreshAuthentication_prepareParams(authenticationToken); return new AsyncResult(url_, params, UserStore_refreshAuthentication_readReplyAsync); } QByteArray UserStore_getUser_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getUser", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("UserStore_getUser_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } User UserStore_getUser_readReply(QByteArray reply) { bool resultIsSet = false; User result = User(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getUser") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; User v; readUser(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getUser: missing result")); return result; } QVariant UserStore_getUser_readReplyAsync(QByteArray reply) { return QVariant::fromValue(UserStore_getUser_readReply(reply)); } User UserStore::getUser(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = UserStore_getUser_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); return UserStore_getUser_readReply(reply); } AsyncResult* UserStore::getUserAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = UserStore_getUser_prepareParams(authenticationToken); return new AsyncResult(url_, params, UserStore_getUser_readReplyAsync); } QByteArray UserStore_getPublicUserInfo_prepareParams(QString username) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getPublicUserInfo", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("UserStore_getPublicUserInfo_pargs"); w.writeFieldBegin("username", ThriftFieldType::T_STRING, 1); w.writeString(username); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } PublicUserInfo UserStore_getPublicUserInfo_readReply(QByteArray reply) { bool resultIsSet = false; PublicUserInfo result = PublicUserInfo(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getPublicUserInfo") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; PublicUserInfo v; readPublicUserInfo(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMNotFoundException e; readEDAMNotFoundException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getPublicUserInfo: missing result")); return result; } QVariant UserStore_getPublicUserInfo_readReplyAsync(QByteArray reply) { return QVariant::fromValue(UserStore_getPublicUserInfo_readReply(reply)); } PublicUserInfo UserStore::getPublicUserInfo(QString username) { QByteArray params = UserStore_getPublicUserInfo_prepareParams(username); QByteArray reply = askEvernote(url_, params); return UserStore_getPublicUserInfo_readReply(reply); } AsyncResult* UserStore::getPublicUserInfoAsync(QString username) { QByteArray params = UserStore_getPublicUserInfo_prepareParams(username); return new AsyncResult(url_, params, UserStore_getPublicUserInfo_readReplyAsync); } QByteArray UserStore_getPremiumInfo_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getPremiumInfo", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("UserStore_getPremiumInfo_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } PremiumInfo UserStore_getPremiumInfo_readReply(QByteArray reply) { bool resultIsSet = false; PremiumInfo result = PremiumInfo(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getPremiumInfo") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRUCT) { resultIsSet = true; PremiumInfo v; readPremiumInfo(r, v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getPremiumInfo: missing result")); return result; } QVariant UserStore_getPremiumInfo_readReplyAsync(QByteArray reply) { return QVariant::fromValue(UserStore_getPremiumInfo_readReply(reply)); } PremiumInfo UserStore::getPremiumInfo(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = UserStore_getPremiumInfo_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); return UserStore_getPremiumInfo_readReply(reply); } AsyncResult* UserStore::getPremiumInfoAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = UserStore_getPremiumInfo_prepareParams(authenticationToken); return new AsyncResult(url_, params, UserStore_getPremiumInfo_readReplyAsync); } QByteArray UserStore_getNoteStoreUrl_prepareParams(QString authenticationToken) { ThriftBinaryBufferWriter w; qint32 cseqid = 0; w.writeMessageBegin("getNoteStoreUrl", ThriftMessageType::T_CALL, cseqid); w.writeStructBegin("UserStore_getNoteStoreUrl_pargs"); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 1); w.writeString(authenticationToken); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); w.writeMessageEnd(); return w.buffer(); } QString UserStore_getNoteStoreUrl_readReply(QByteArray reply) { bool resultIsSet = false; QString result = QString(); ThriftBinaryBufferReader r(reply); qint32 rseqid = 0; QString fname; ThriftMessageType::type mtype; r.readMessageBegin(fname, mtype, rseqid); if (mtype == ThriftMessageType::T_EXCEPTION) { ThriftException e = readThriftException(r); r.readMessageEnd(); throw e; } if (mtype != ThriftMessageType::T_REPLY) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::INVALID_MESSAGE_TYPE); } if (fname.compare("getNoteStoreUrl") != 0) { r.skip(ThriftFieldType::T_STRUCT); r.readMessageEnd(); throw ThriftException(ThriftException::Type::WRONG_METHOD_NAME); } ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 0) { if(fieldType == ThriftFieldType::T_STRING) { resultIsSet = true; QString v; r.readString(v); result = v; } else { r.skip(fieldType); } } else if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMUserException e; readEDAMUserException(r, e); throw e; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { EDAMSystemException e; readEDAMSystemException(r, e); throwEDAMSystemException(e); } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); r.readMessageEnd(); if(!resultIsSet) throw ThriftException(ThriftException::Type::MISSING_RESULT, QStringLiteral("getNoteStoreUrl: missing result")); return result; } QVariant UserStore_getNoteStoreUrl_readReplyAsync(QByteArray reply) { return QVariant::fromValue(UserStore_getNoteStoreUrl_readReply(reply)); } QString UserStore::getNoteStoreUrl(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = UserStore_getNoteStoreUrl_prepareParams(authenticationToken); QByteArray reply = askEvernote(url_, params); return UserStore_getNoteStoreUrl_readReply(reply); } AsyncResult* UserStore::getNoteStoreUrlAsync(QString authenticationToken) { if(authenticationToken.isEmpty()) authenticationToken = this->authenticationToken_; QByteArray params = UserStore_getNoteStoreUrl_prepareParams(authenticationToken); return new AsyncResult(url_, params, UserStore_getNoteStoreUrl_readReplyAsync); } } nixnote2-2.0.2/qevercloud/generated/services.h000066400000000000000000003554151315604104400213770ustar00rootroot00000000000000// This file is generated from Evernote Thrift API and is a part of the QEverCloud project #ifndef QEVERCLOUD_GENERATED_SERVICES_H #define QEVERCLOUD_GENERATED_SERVICES_H #include #include #include #include #include #include #include #include "../Optional.h" #include #include "constants.h" #include "types.h" #include "../AsyncResult.h" namespace qevercloud { /** * Service: NoteStore *

* The NoteStore service is used by EDAM clients to exchange information * about the collection of notes in an account. This is primarily used for * synchronization, but could also be used by a "thin" client without a full * local cache. *

* All functions take an "authenticationToken" parameter, which is the * value returned by the UserStore which permits access to the account. * This parameter is mandatory for all functions. *

* * Calls which require an authenticationToken may throw an EDAMUserException * for the following reasons: *
    *
  • AUTH_EXPIRED "authenticationToken" - token has expired *
  • *
  • BAD_DATA_FORMAT "authenticationToken" - token is malformed *
  • *
  • DATA_REQUIRED "authenticationToken" - token is empty *
  • *
  • INVALID_AUTH "authenticationToken" - token signature is invalid *
  • *
*/ class NoteStore: public QObject { Q_DISABLE_COPY(NoteStore) public: explicit NoteStore(QString noteStoreUrl = QString(), QString authenticationToken = QString(), QObject *parent = 0); explicit NoteStore(QObject *parent); void setNoteStoreUrl(QString noteStoreUrl) {url_ = noteStoreUrl;} QString noteStoreUrl() {return url_;} void setAuthenticationToken(QString authenticationToken) {authenticationToken_ = authenticationToken;} QString authenticationToken() {return authenticationToken_ ;} /** * Asks the NoteStore to provide information about the status of the user * account corresponding to the provided authentication token. */ SyncState getSyncState(QString authenticationToken = QString()); /** Asynchronous version of @link getSyncState @endlink */ AsyncResult* getSyncStateAsync(QString authenticationToken = QString()); /** * Asks the NoteStore to provide information about the status of the user * account corresponding to the provided authentication token. * This version of 'getSyncState' allows the client to upload coarse- * grained usage metrics to the service. * * @param clientMetrics see the documentation of the ClientUsageMetrics * structure for an explanation of the fields that clients can pass to * the service. */ SyncState getSyncStateWithMetrics(const ClientUsageMetrics& clientMetrics, QString authenticationToken = QString()); /** Asynchronous version of @link getSyncStateWithMetrics @endlink */ AsyncResult* getSyncStateWithMetricsAsync(const ClientUsageMetrics& clientMetrics, QString authenticationToken = QString()); /** * DEPRECATED - use getFilteredSyncChunk. */ SyncChunk getSyncChunk(qint32 afterUSN, qint32 maxEntries, bool fullSyncOnly, QString authenticationToken = QString()); /** Asynchronous version of @link getSyncChunk @endlink */ AsyncResult* getSyncChunkAsync(qint32 afterUSN, qint32 maxEntries, bool fullSyncOnly, QString authenticationToken = QString()); /** * Asks the NoteStore to provide the state of the account in order of * last modification. This request retrieves one block of the server's * state so that a client can make several small requests against a large * account rather than getting the entire state in one big message. * This call gives fine-grained control of the data that will * be received by a client by omitting data elements that a client doesn't * need. This may reduce network traffic and sync times. * * @param afterUSN * The client can pass this value to ask only for objects that * have been updated after a certain point. This allows the client to * receive updates after its last checkpoint rather than doing a full * synchronization on every pass. The default value of "0" indicates * that the client wants to get objects from the start of the account. * * @param maxEntries * The maximum number of modified objects that should be * returned in the result SyncChunk. This can be used to limit the size * of each individual message to be friendly for network transfer. * * @param filter * The caller must set some of the flags in this structure to specify which * data types should be returned during the synchronization. See * the SyncChunkFilter structure for information on each flag. * * @throws EDAMUserException
    *
  • BAD_DATA_FORMAT "afterUSN" - if negative *
  • *
  • BAD_DATA_FORMAT "maxEntries" - if less than 1 *
  • *
*/ SyncChunk getFilteredSyncChunk(qint32 afterUSN, qint32 maxEntries, const SyncChunkFilter& filter, QString authenticationToken = QString()); /** Asynchronous version of @link getFilteredSyncChunk @endlink */ AsyncResult* getFilteredSyncChunkAsync(qint32 afterUSN, qint32 maxEntries, const SyncChunkFilter& filter, QString authenticationToken = QString()); /** * Asks the NoteStore to provide information about the status of a linked * notebook that has been shared with the caller, or that is public to the * world. * This will return a result that is similar to getSyncState, but may omit * SyncState.uploaded if the caller doesn't have permission to write to * the linked notebook. * * This function must be called on the shard that owns the referenced * notebook. (I.e. the shardId in /shard/shardId/edam/note must be the * same as LinkedNotebook.shardId.) * * @param authenticationToken * This should be an authenticationToken for the guest who has received * the invitation to the share. (I.e. this should not be the result of * NoteStore.authenticateToSharedNotebook) * * @param linkedNotebook * This structure should contain identifying information and permissions * to access the notebook in question. */ SyncState getLinkedNotebookSyncState(const LinkedNotebook& linkedNotebook, QString authenticationToken = QString()); /** Asynchronous version of @link getLinkedNotebookSyncState @endlink */ AsyncResult* getLinkedNotebookSyncStateAsync(const LinkedNotebook& linkedNotebook, QString authenticationToken = QString()); /** * Asks the NoteStore to provide information about the contents of a linked * notebook that has been shared with the caller, or that is public to the * world. * This will return a result that is similar to getSyncChunk, but will only * contain entries that are visible to the caller. I.e. only that particular * Notebook will be visible, along with its Notes, and Tags on those Notes. * * This function must be called on the shard that owns the referenced * notebook. (I.e. the shardId in /shard/shardId/edam/note must be the * same as LinkedNotebook.shardId.) * * @param authenticationToken * This should be an authenticationToken for the guest who has received * the invitation to the share. (I.e. this should not be the result of * NoteStore.authenticateToSharedNotebook) * * @param linkedNotebook * This structure should contain identifying information and permissions * to access the notebook in question. This must contain the valid fields * for either a shared notebook (e.g. shareKey) * or a public notebook (e.g. username, uri) * * @param afterUSN * The client can pass this value to ask only for objects that * have been updated after a certain point. This allows the client to * receive updates after its last checkpoint rather than doing a full * synchronization on every pass. The default value of "0" indicates * that the client wants to get objects from the start of the account. * * @param maxEntries * The maximum number of modified objects that should be * returned in the result SyncChunk. This can be used to limit the size * of each individual message to be friendly for network transfer. * Applications should not request more than 256 objects at a time, * and must handle the case where the service returns less than the * requested number of objects in a given request even though more * objects are available on the service. * * @param fullSyncOnly * If true, then the client only wants initial data for a full sync. * In this case, the service will not return any expunged objects, * and will not return any Resources, since these are also provided * in their corresponding Notes. * * @throws EDAMUserException
    *
  • BAD_DATA_FORMAT "afterUSN" - if negative *
  • *
  • BAD_DATA_FORMAT "maxEntries" - if less than 1 *
  • *
* * @throws EDAMNotFoundException
    *
  • "LinkedNotebook" - if the provided information doesn't match any * valid notebook *
  • *
  • "LinkedNotebook.uri" - if the provided public URI doesn't match any * valid notebook *
  • *
  • "SharedNotebook.id" - if the provided information indicates a * shared notebook that no longer exists *
  • *
*/ SyncChunk getLinkedNotebookSyncChunk(const LinkedNotebook& linkedNotebook, qint32 afterUSN, qint32 maxEntries, bool fullSyncOnly, QString authenticationToken = QString()); /** Asynchronous version of @link getLinkedNotebookSyncChunk @endlink */ AsyncResult* getLinkedNotebookSyncChunkAsync(const LinkedNotebook& linkedNotebook, qint32 afterUSN, qint32 maxEntries, bool fullSyncOnly, QString authenticationToken = QString()); /** * Returns a list of all of the notebooks in the account. */ QList< Notebook > listNotebooks(QString authenticationToken = QString()); /** Asynchronous version of @link listNotebooks @endlink */ AsyncResult* listNotebooksAsync(QString authenticationToken = QString()); /** * Returns the current state of the notebook with the provided GUID. * The notebook may be active or deleted (but not expunged). * * @param guid * The GUID of the notebook to be retrieved. * * @throws EDAMUserException
    *
  • BAD_DATA_FORMAT "Notebook.guid" - if the parameter is missing *
  • *
  • PERMISSION_DENIED "Notebook" - private notebook, user doesn't own *
  • *
* * @throws EDAMNotFoundException
    *
  • "Notebook.guid" - tag not found, by GUID *
  • *
*/ Notebook getNotebook(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link getNotebook @endlink */ AsyncResult* getNotebookAsync(Guid guid, QString authenticationToken = QString()); /** * Returns the notebook that should be used to store new notes in the * user's account when no other notebooks are specified. */ Notebook getDefaultNotebook(QString authenticationToken = QString()); /** Asynchronous version of @link getDefaultNotebook @endlink */ AsyncResult* getDefaultNotebookAsync(QString authenticationToken = QString()); /** * Asks the service to make a notebook with the provided name. * * @param notebook * The desired fields for the notebook must be provided on this * object. The name of the notebook must be set, and either the 'active' * or 'defaultNotebook' fields may be set by the client at creation. * If a notebook exists in the account with the same name (via * case-insensitive compare), this will throw an EDAMUserException. * * @return * The newly created Notebook. The server-side GUID will be * saved in this object's 'guid' field. * * @throws EDAMUserException
    *
  • BAD_DATA_FORMAT "Notebook.name" - invalid length or pattern *
  • *
  • BAD_DATA_FORMAT "Notebook.stack" - invalid length or pattern *
  • *
  • BAD_DATA_FORMAT "Publishing.uri" - if publishing set but bad uri *
  • *
  • BAD_DATA_FORMAT "Publishing.publicDescription" - if too long *
  • *
  • DATA_CONFLICT "Notebook.name" - name already in use *
  • *
  • DATA_CONFLICT "Publishing.uri" - if URI already in use *
  • *
  • DATA_REQUIRED "Publishing.uri" - if publishing set but uri missing *
  • *
  • LIMIT_REACHED "Notebook" - at max number of notebooks *
  • *
*/ Notebook createNotebook(const Notebook& notebook, QString authenticationToken = QString()); /** Asynchronous version of @link createNotebook @endlink */ AsyncResult* createNotebookAsync(const Notebook& notebook, QString authenticationToken = QString()); /** * Submits notebook changes to the service. The provided data must include * the notebook's guid field for identification. * * @param notebook * The notebook object containing the requested changes. * * @return * The Update Sequence Number for this change within the account. * * @throws EDAMUserException
    *
  • BAD_DATA_FORMAT "Notebook.name" - invalid length or pattern *
  • *
  • BAD_DATA_FORMAT "Notebook.stack" - invalid length or pattern *
  • *
  • BAD_DATA_FORMAT "Publishing.uri" - if publishing set but bad uri *
  • *
  • BAD_DATA_FORMAT "Publishing.publicDescription" - if too long *
  • *
  • DATA_CONFLICT "Notebook.name" - name already in use *
  • *
  • DATA_CONFLICT "Publishing.uri" - if URI already in use *
  • *
  • DATA_REQUIRED "Publishing.uri" - if publishing set but uri missing *
  • *
* * @throws EDAMNotFoundException
    *
  • "Notebook.guid" - not found, by GUID *
  • *
*/ qint32 updateNotebook(const Notebook& notebook, QString authenticationToken = QString()); /** Asynchronous version of @link updateNotebook @endlink */ AsyncResult* updateNotebookAsync(const Notebook& notebook, QString authenticationToken = QString()); /** * Permanently removes the notebook from the user's account. * After this action, the notebook is no longer available for undeletion, etc. * If the notebook contains any Notes, they will be moved to the current * default notebook and moved into the trash (i.e. Note.active=false). *

* NOTE: This function is generally not available to third party applications. * Calls will result in an EDAMUserException with the error code * PERMISSION_DENIED. * * @param guid * The GUID of the notebook to delete. * * @return * The Update Sequence Number for this change within the account. * * @throws EDAMUserException

    *
  • BAD_DATA_FORMAT "Notebook.guid" - if the parameter is missing *
  • *
  • LIMIT_REACHED "Notebook" - trying to expunge the last Notebook *
  • *
  • PERMISSION_DENIED "Notebook" - private notebook, user doesn't own *
  • *
*/ qint32 expungeNotebook(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link expungeNotebook @endlink */ AsyncResult* expungeNotebookAsync(Guid guid, QString authenticationToken = QString()); /** * Returns a list of the tags in the account. Evernote does not support * the undeletion of tags, so this will only include active tags. */ QList< Tag > listTags(QString authenticationToken = QString()); /** Asynchronous version of @link listTags @endlink */ AsyncResult* listTagsAsync(QString authenticationToken = QString()); /** * Returns a list of the tags that are applied to at least one note within * the provided notebook. If the notebook is public, the authenticationToken * may be ignored. * * @param notebookGuid * the GUID of the notebook to use to find tags * * @throws EDAMNotFoundException
    *
  • "Notebook.guid" - notebook not found by GUID *
  • *
*/ QList< Tag > listTagsByNotebook(Guid notebookGuid, QString authenticationToken = QString()); /** Asynchronous version of @link listTagsByNotebook @endlink */ AsyncResult* listTagsByNotebookAsync(Guid notebookGuid, QString authenticationToken = QString()); /** * Returns the current state of the Tag with the provided GUID. * * @param guid * The GUID of the tag to be retrieved. * * @throws EDAMUserException
    *
  • BAD_DATA_FORMAT "Tag.guid" - if the parameter is missing *
  • *
  • PERMISSION_DENIED "Tag" - private Tag, user doesn't own *
  • *
* * @throws EDAMNotFoundException
    *
  • "Tag.guid" - tag not found, by GUID *
  • *
*/ Tag getTag(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link getTag @endlink */ AsyncResult* getTagAsync(Guid guid, QString authenticationToken = QString()); /** * Asks the service to make a tag with a set of information. * * @param tag * The desired list of fields for the tag are specified in this * object. The caller must specify the tag name, and may provide * the parentGUID. * * @return * The newly created Tag. The server-side GUID will be * saved in this object. * * @throws EDAMUserException
    *
  • BAD_DATA_FORMAT "Tag.name" - invalid length or pattern *
  • *
  • BAD_DATA_FORMAT "Tag.parentGuid" - malformed GUID *
  • *
  • DATA_CONFLICT "Tag.name" - name already in use *
  • *
  • LIMIT_REACHED "Tag" - at max number of tags *
  • *
* * @throws EDAMNotFoundException
    *
  • "Tag.parentGuid" - not found, by GUID *
  • *
*/ Tag createTag(const Tag& tag, QString authenticationToken = QString()); /** Asynchronous version of @link createTag @endlink */ AsyncResult* createTagAsync(const Tag& tag, QString authenticationToken = QString()); /** * Submits tag changes to the service. The provided data must include * the tag's guid field for identification. The service will apply * updates to the following tag fields: name, parentGuid * * @param tag * The tag object containing the requested changes. * * @return * The Update Sequence Number for this change within the account. * * @throws EDAMUserException
    *
  • BAD_DATA_FORMAT "Tag.name" - invalid length or pattern *
  • *
  • BAD_DATA_FORMAT "Tag.parentGuid" - malformed GUID *
  • *
  • DATA_CONFLICT "Tag.name" - name already in use *
  • *
  • DATA_CONFLICT "Tag.parentGuid" - can't set parent: circular *
  • *
  • PERMISSION_DENIED "Tag" - user doesn't own tag *
  • *
* * @throws EDAMNotFoundException
    *
  • "Tag.guid" - tag not found, by GUID *
  • *
  • "Tag.parentGuid" - parent not found, by GUID *
  • *
*/ qint32 updateTag(const Tag& tag, QString authenticationToken = QString()); /** Asynchronous version of @link updateTag @endlink */ AsyncResult* updateTagAsync(const Tag& tag, QString authenticationToken = QString()); /** * Removes the provided tag from every note that is currently tagged with * this tag. If this operation is successful, the tag will still be in * the account, but it will not be tagged on any notes. * * This function is not indended for use by full synchronizing clients, since * it does not provide enough result information to the client to reconcile * the local state without performing a follow-up sync from the service. This * is intended for "thin clients" that need to efficiently support this as * a UI operation. * * @param guid * The GUID of the tag to remove from all notes. * * @throws EDAMUserException
    *
  • BAD_DATA_FORMAT "Tag.guid" - if the guid parameter is missing *
  • *
  • PERMISSION_DENIED "Tag" - user doesn't own tag *
  • *
* * @throws EDAMNotFoundException
    *
  • "Tag.guid" - tag not found, by GUID *
  • *
*/ void untagAll(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link untagAll @endlink */ AsyncResult* untagAllAsync(Guid guid, QString authenticationToken = QString()); /** * Permanently deletes the tag with the provided GUID, if present. *

* NOTE: This function is generally not available to third party applications. * Calls will result in an EDAMUserException with the error code * PERMISSION_DENIED. * * @param guid * The GUID of the tag to delete. * * @return * The Update Sequence Number for this change within the account. * * @throws EDAMUserException

    *
  • BAD_DATA_FORMAT "Tag.guid" - if the guid parameter is missing *
  • *
  • PERMISSION_DENIED "Tag" - user doesn't own tag *
  • *
* * @throws EDAMNotFoundException
    *
  • "Tag.guid" - tag not found, by GUID *
  • *
*/ qint32 expungeTag(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link expungeTag @endlink */ AsyncResult* expungeTagAsync(Guid guid, QString authenticationToken = QString()); /** * Returns a list of the searches in the account. Evernote does not support * the undeletion of searches, so this will only include active searches. */ QList< SavedSearch > listSearches(QString authenticationToken = QString()); /** Asynchronous version of @link listSearches @endlink */ AsyncResult* listSearchesAsync(QString authenticationToken = QString()); /** * Returns the current state of the search with the provided GUID. * * @param guid * The GUID of the search to be retrieved. * * @throws EDAMUserException
    *
  • BAD_DATA_FORMAT "SavedSearch.guid" - if the parameter is missing *
  • *
  • PERMISSION_DENIED "SavedSearch" - private Tag, user doesn't own *
  • * * @throws EDAMNotFoundException
      *
    • "SavedSearch.guid" - not found, by GUID *
    • *
    */ SavedSearch getSearch(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link getSearch @endlink */ AsyncResult* getSearchAsync(Guid guid, QString authenticationToken = QString()); /** * Asks the service to make a saved search with a set of information. * * @param search * The desired list of fields for the search are specified in this * object. The caller must specify the name and query for the * search, and may optionally specify a search scope. * The SavedSearch.format field is ignored by the service. * * @return * The newly created SavedSearch. The server-side GUID will be * saved in this object. * * @throws EDAMUserException
      *
    • BAD_DATA_FORMAT "SavedSearch.name" - invalid length or pattern *
    • *
    • BAD_DATA_FORMAT "SavedSearch.query" - invalid length *
    • *
    • DATA_CONFLICT "SavedSearch.name" - name already in use *
    • *
    • LIMIT_REACHED "SavedSearch" - at max number of searches *
    • *
    */ SavedSearch createSearch(const SavedSearch& search, QString authenticationToken = QString()); /** Asynchronous version of @link createSearch @endlink */ AsyncResult* createSearchAsync(const SavedSearch& search, QString authenticationToken = QString()); /** * Submits search changes to the service. The provided data must include * the search's guid field for identification. The service will apply * updates to the following search fields: name, query, and scope. * * @param search * The search object containing the requested changes. * * @return * The Update Sequence Number for this change within the account. * * @throws EDAMUserException
      *
    • BAD_DATA_FORMAT "SavedSearch.name" - invalid length or pattern *
    • *
    • BAD_DATA_FORMAT "SavedSearch.query" - invalid length *
    • *
    • DATA_CONFLICT "SavedSearch.name" - name already in use *
    • *
    • PERMISSION_DENIED "SavedSearch" - user doesn't own tag *
    • *
    * * @throws EDAMNotFoundException
      *
    • "SavedSearch.guid" - not found, by GUID *
    • *
    */ qint32 updateSearch(const SavedSearch& search, QString authenticationToken = QString()); /** Asynchronous version of @link updateSearch @endlink */ AsyncResult* updateSearchAsync(const SavedSearch& search, QString authenticationToken = QString()); /** * Permanently deletes the saved search with the provided GUID, if present. *

    * NOTE: This function is generally not available to third party applications. * Calls will result in an EDAMUserException with the error code * PERMISSION_DENIED. * * @param guid * The GUID of the search to delete. * * @return * The Update Sequence Number for this change within the account. * * @throws EDAMUserException

      *
    • BAD_DATA_FORMAT "SavedSearch.guid" - if the guid parameter is empty *
    • *
    • PERMISSION_DENIED "SavedSearch" - user doesn't own *
    • *
    * * @throws EDAMNotFoundException
      *
    • "SavedSearch.guid" - not found, by GUID *
    • *
    */ qint32 expungeSearch(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link expungeSearch @endlink */ AsyncResult* expungeSearchAsync(Guid guid, QString authenticationToken = QString()); /** * DEPRECATED. Use findNotesMetadata. */ NoteList findNotes(const NoteFilter& filter, qint32 offset, qint32 maxNotes, QString authenticationToken = QString()); /** Asynchronous version of @link findNotes @endlink */ AsyncResult* findNotesAsync(const NoteFilter& filter, qint32 offset, qint32 maxNotes, QString authenticationToken = QString()); /** * Finds the position of a note within a sorted subset of all of the user's * notes. This may be useful for thin clients that are displaying a paginated * listing of a large account, which need to know where a particular note * sits in the list without retrieving all notes first. * * @param authenticationToken * Must be a valid token for the user's account unless the NoteFilter * 'notebookGuid' is the GUID of a public notebook. * * @param filter * The list of criteria that will constrain the notes to be returned. * * @param guid * The GUID of the note to be retrieved. * * @return * If the note with the provided GUID is found within the matching note * list, this will return the offset of that note within that list (where * the first offset is 0). If the note is not found within the set of * notes, this will return -1. * * @throws EDAMUserException
      *
    • BAD_DATA_FORMAT "offset" - not between 0 and EDAM_USER_NOTES_MAX *
    • *
    • BAD_DATA_FORMAT "maxNotes" - not between 0 and EDAM_USER_NOTES_MAX *
    • *
    • BAD_DATA_FORMAT "NoteFilter.notebookGuid" - if malformed *
    • *
    • BAD_DATA_FORMAT "NoteFilter.tagGuids" - if any are malformed *
    • *
    • BAD_DATA_FORMAT "NoteFilter.words" - if search string too long *
    • * * @throws EDAMNotFoundException
        *
      • "Notebook.guid" - not found, by GUID *
      • *
      • "Note.guid" - not found, by GUID *
      • *
      */ qint32 findNoteOffset(const NoteFilter& filter, Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link findNoteOffset @endlink */ AsyncResult* findNoteOffsetAsync(const NoteFilter& filter, Guid guid, QString authenticationToken = QString()); /** * Used to find the high-level information about a set of the notes from a * user's account based on various criteria specified via a NoteFilter object. *

      * Web applications that wish to periodically check for new content in a user's * Evernote account should consider using webhooks instead of polling this API. * See http://dev.evernote.com/documentation/cloud/chapters/polling_notification.php * for more information. * * @param authenticationToken * Must be a valid token for the user's account unless the NoteFilter * 'notebookGuid' is the GUID of a public notebook. * * @param filter * The list of criteria that will constrain the notes to be returned. * * @param offset * The numeric index of the first note to show within the sorted * results. The numbering scheme starts with "0". This can be used for * pagination. * * @param maxNotes * The mximum notes to return in this query. The service will return a set * of notes that is no larger than this number, but may return fewer notes * if needed. The NoteList.totalNotes field in the return value will * indicate whether there are more values available after the returned set. * * @param resultSpec * This specifies which information should be returned for each matching * Note. The fields on this structure can be used to eliminate data that * the client doesn't need, which will reduce the time and bandwidth * to receive and process the reply. * * @return * The list of notes that match the criteria. * * @throws EDAMUserException

        *
      • BAD_DATA_FORMAT "offset" - not between 0 and EDAM_USER_NOTES_MAX *
      • *
      • BAD_DATA_FORMAT "maxNotes" - not between 0 and EDAM_USER_NOTES_MAX *
      • *
      • BAD_DATA_FORMAT "NoteFilter.notebookGuid" - if malformed *
      • *
      • BAD_DATA_FORMAT "NoteFilter.tagGuids" - if any are malformed *
      • *
      • BAD_DATA_FORMAT "NoteFilter.words" - if search string too long *
      • *
      * * @throws EDAMNotFoundException
        *
      • "Notebook.guid" - not found, by GUID *
      • *
      */ NotesMetadataList findNotesMetadata(const NoteFilter& filter, qint32 offset, qint32 maxNotes, const NotesMetadataResultSpec& resultSpec, QString authenticationToken = QString()); /** Asynchronous version of @link findNotesMetadata @endlink */ AsyncResult* findNotesMetadataAsync(const NoteFilter& filter, qint32 offset, qint32 maxNotes, const NotesMetadataResultSpec& resultSpec, QString authenticationToken = QString()); /** * This function is used to determine how many notes are found for each * notebook and tag in the user's account, given a current set of filter * parameters that determine the current selection. This function will * return a structure that gives the note count for each notebook and tag * that has at least one note under the requested filter. Any notebook or * tag that has zero notes in the filtered set will not be listed in the * reply to this function (so they can be assumed to be 0). * * @param authenticationToken * Must be a valid token for the user's account unless the NoteFilter * 'notebookGuid' is the GUID of a public notebook. * * @param filter * The note selection filter that is currently being applied. The note * counts are to be calculated with this filter applied to the total set * of notes in the user's account. * * @param withTrash * If true, then the NoteCollectionCounts.trashCount will be calculated * and supplied in the reply. Otherwise, the trash value will be omitted. * * @throws EDAMUserException
        *
      • BAD_DATA_FORMAT "NoteFilter.notebookGuid" - if malformed *
      • *
      • BAD_DATA_FORMAT "NoteFilter.notebookGuids" - if any are malformed *
      • *
      • BAD_DATA_FORMAT "NoteFilter.words" - if search string too long *
      • * * @throws EDAMNotFoundException
          *
        • "Notebook.guid" - not found, by GUID *
        • *
        */ NoteCollectionCounts findNoteCounts(const NoteFilter& filter, bool withTrash, QString authenticationToken = QString()); /** Asynchronous version of @link findNoteCounts @endlink */ AsyncResult* findNoteCountsAsync(const NoteFilter& filter, bool withTrash, QString authenticationToken = QString()); /** * Returns the current state of the note in the service with the provided * GUID. The ENML contents of the note will only be provided if the * 'withContent' parameter is true. The service will include the meta-data * for each resource in the note, but the binary contents of the resources * and their recognition data will be omitted. * If the Note is found in a public notebook, the authenticationToken * will be ignored (so it could be an empty string). The applicationData * fields are returned as keysOnly. * * @param guid * The GUID of the note to be retrieved. * * @param withContent * If true, the note will include the ENML contents of its * 'content' field. * * @param withResourcesData * If true, any Resource elements in this Note will include the binary * contents of their 'data' field's body. * * @param withResourcesRecognition * If true, any Resource elements will include the binary contents of the * 'recognition' field's body if recognition data is present. * * @param withResourcesAlternateData * If true, any Resource elements in this Note will include the binary * contents of their 'alternateData' fields' body, if an alternate form * is present. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Note.guid" - if the parameter is missing *
        • *
        • PERMISSION_DENIED "Note" - private note, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Note.guid" - not found, by GUID *
        • *
        */ Note getNote(Guid guid, bool withContent, bool withResourcesData, bool withResourcesRecognition, bool withResourcesAlternateData, QString authenticationToken = QString()); /** Asynchronous version of @link getNote @endlink */ AsyncResult* getNoteAsync(Guid guid, bool withContent, bool withResourcesData, bool withResourcesRecognition, bool withResourcesAlternateData, QString authenticationToken = QString()); /** * Get all of the application data for the note identified by GUID, * with values returned within the LazyMap fullMap field. * If there are no applicationData entries, then a LazyMap * with an empty fullMap will be returned. If your application * only needs to fetch its own applicationData entry, use * getNoteApplicationDataEntry instead. */ LazyMap getNoteApplicationData(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link getNoteApplicationData @endlink */ AsyncResult* getNoteApplicationDataAsync(Guid guid, QString authenticationToken = QString()); /** * Get the value of a single entry in the applicationData map * for the note identified by GUID. * * @throws EDAMNotFoundException
          *
        • "Note.guid" - note not found, by GUID
        • *
        • "NoteAttributes.applicationData.key" - note not found, by key
        • *
        */ QString getNoteApplicationDataEntry(Guid guid, QString key, QString authenticationToken = QString()); /** Asynchronous version of @link getNoteApplicationDataEntry @endlink */ AsyncResult* getNoteApplicationDataEntryAsync(Guid guid, QString key, QString authenticationToken = QString()); /** * Update, or create, an entry in the applicationData map for * the note identified by guid. */ qint32 setNoteApplicationDataEntry(Guid guid, QString key, QString value, QString authenticationToken = QString()); /** Asynchronous version of @link setNoteApplicationDataEntry @endlink */ AsyncResult* setNoteApplicationDataEntryAsync(Guid guid, QString key, QString value, QString authenticationToken = QString()); /** * Remove an entry identified by 'key' from the applicationData map for * the note identified by 'guid'. Silently ignores an unset of a * non-existing key. */ qint32 unsetNoteApplicationDataEntry(Guid guid, QString key, QString authenticationToken = QString()); /** Asynchronous version of @link unsetNoteApplicationDataEntry @endlink */ AsyncResult* unsetNoteApplicationDataEntryAsync(Guid guid, QString key, QString authenticationToken = QString()); /** * Returns XHTML contents of the note with the provided GUID. * If the Note is found in a public notebook, the authenticationToken * will be ignored (so it could be an empty string). * * @param guid * The GUID of the note to be retrieved. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Note.guid" - if the parameter is missing *
        • *
        • PERMISSION_DENIED "Note" - private note, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Note.guid" - not found, by GUID *
        • *
        */ QString getNoteContent(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link getNoteContent @endlink */ AsyncResult* getNoteContentAsync(Guid guid, QString authenticationToken = QString()); /** * Returns a block of the extracted plain text contents of the note with the * provided GUID. This text can be indexed for search purposes by a light * client that doesn't have capabilities to extract all of the searchable * text content from the note and its resources. * * If the Note is found in a public notebook, the authenticationToken * will be ignored (so it could be an empty string). * * @param guid * The GUID of the note to be retrieved. * * @param noteOnly * If true, this will only return the text extracted from the ENML contents * of the note itself. If false, this will also include the extracted text * from any text-bearing resources (PDF, recognized images) * * @param tokenizeForIndexing * If true, this will break the text into cleanly separated and sanitized * tokens. If false, this will return the more raw text extraction, with * its original punctuation, capitalization, spacing, etc. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Note.guid" - if the parameter is missing *
        • *
        • PERMISSION_DENIED "Note" - private note, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Note.guid" - not found, by GUID *
        • *
        */ QString getNoteSearchText(Guid guid, bool noteOnly, bool tokenizeForIndexing, QString authenticationToken = QString()); /** Asynchronous version of @link getNoteSearchText @endlink */ AsyncResult* getNoteSearchTextAsync(Guid guid, bool noteOnly, bool tokenizeForIndexing, QString authenticationToken = QString()); /** * Returns a block of the extracted plain text contents of the resource with * the provided GUID. This text can be indexed for search purposes by a light * client that doesn't have capability to extract all of the searchable * text content from a resource. * * If the Resource is found in a public notebook, the authenticationToken * will be ignored (so it could be an empty string). * * @param guid * The GUID of the resource to be retrieved. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Resource.guid" - if the parameter is missing *
        • *
        • PERMISSION_DENIED "Resource" - private resource, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Resource.guid" - not found, by GUID *
        • *
        */ QString getResourceSearchText(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link getResourceSearchText @endlink */ AsyncResult* getResourceSearchTextAsync(Guid guid, QString authenticationToken = QString()); /** * Returns a list of the names of the tags for the note with the provided * guid. This can be used with authentication to get the tags for a * user's own note, or can be used without valid authentication to retrieve * the names of the tags for a note in a public notebook. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Note.guid" - if the parameter is missing *
        • *
        • PERMISSION_DENIED "Note" - private note, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Note.guid" - not found, by GUID *
        • *
        */ QStringList getNoteTagNames(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link getNoteTagNames @endlink */ AsyncResult* getNoteTagNamesAsync(Guid guid, QString authenticationToken = QString()); /** * Asks the service to make a note with the provided set of information. * * @param note * A Note object containing the desired fields to be populated on * the service. * * @return * The newly created Note from the service. The server-side * GUIDs for the Note and any Resources will be saved in this object. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Note.title" - invalid length or pattern *
        • *
        • BAD_DATA_FORMAT "Note.content" - invalid length for ENML content *
        • *
        • BAD_DATA_FORMAT "Resource.mime" - invalid resource MIME type *
        • *
        • BAD_DATA_FORMAT "NoteAttributes.*" - bad resource string *
        • *
        • BAD_DATA_FORMAT "ResourceAttributes.*" - bad resource string *
        • *
        • DATA_CONFLICT "Note.deleted" - deleted time set on active note *
        • *
        • DATA_REQUIRED "Resource.data" - resource data body missing *
        • *
        • ENML_VALIDATION "*" - note content doesn't validate against DTD *
        • *
        • LIMIT_REACHED "Note" - at max number per account *
        • *
        • LIMIT_REACHED "Note.size" - total note size too large *
        • *
        • LIMIT_REACHED "Note.resources" - too many resources on Note *
        • *
        • LIMIT_REACHED "Note.tagGuids" - too many Tags on Note *
        • *
        • LIMIT_REACHED "Resource.data.size" - resource too large *
        • *
        • LIMIT_REACHED "NoteAttribute.*" - attribute string too long *
        • *
        • LIMIT_REACHED "ResourceAttribute.*" - attribute string too long *
        • *
        • PERMISSION_DENIED "Note.notebookGuid" - NB not owned by user *
        • *
        • QUOTA_REACHED "Accounting.uploadLimit" - note exceeds upload quota *
        • *
        • BAD_DATA_FORMAT "Tag.name" - Note.tagNames was provided, and one * of the specified tags had an invalid length or pattern *
        • *
        • LIMIT_REACHED "Tag" - Note.tagNames was provided, and the required * new tags would exceed the maximum number per account *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Note.notebookGuid" - not found, by GUID *
        • *
        */ Note createNote(const Note& note, QString authenticationToken = QString()); /** Asynchronous version of @link createNote @endlink */ AsyncResult* createNoteAsync(const Note& note, QString authenticationToken = QString()); /** * Submit a set of changes to a note to the service. The provided data * must include the note's guid field for identification. The note's * title must also be set. * * @param note * A Note object containing the desired fields to be populated on * the service. With the exception of the note's title and guid, fields * that are not being changed do not need to be set. If the content is not * being modified, note.content should be left unset. If the list of * resources is not being modified, note.resources should be left unset. * * @return * The metadata (no contents) for the Note on the server after the update * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Note.title" - invalid length or pattern *
        • *
        • BAD_DATA_FORMAT "Note.content" - invalid length for ENML body *
        • *
        • BAD_DATA_FORMAT "NoteAttributes.*" - bad resource string *
        • *
        • BAD_DATA_FORMAT "ResourceAttributes.*" - bad resource string *
        • *
        • BAD_DATA_FORMAT "Resource.mime" - invalid resource MIME type *
        • *
        • DATA_CONFLICT "Note.deleted" - deleted time set on active note *
        • *
        • DATA_REQUIRED "Resource.data" - resource data body missing *
        • *
        • ENML_VALIDATION "*" - note content doesn't validate against DTD *
        • *
        • LIMIT_REACHED "Note.tagGuids" - too many Tags on Note *
        • *
        • LIMIT_REACHED "Note.resources" - too many resources on Note *
        • *
        • LIMIT_REACHED "Note.size" - total note size too large *
        • *
        • LIMIT_REACHED "Resource.data.size" - resource too large *
        • *
        • LIMIT_REACHED "NoteAttribute.*" - attribute string too long *
        • *
        • LIMIT_REACHED "ResourceAttribute.*" - attribute string too long *
        • *
        • PERMISSION_DENIED "Note" - user doesn't own *
        • *
        • PERMISSION_DENIED "Note.notebookGuid" - user doesn't own destination *
        • *
        • QUOTA_REACHED "Accounting.uploadLimit" - note exceeds upload quota *
        • *
        • BAD_DATA_FORMAT "Tag.name" - Note.tagNames was provided, and one * of the specified tags had an invalid length or pattern *
        • *
        • LIMIT_REACHED "Tag" - Note.tagNames was provided, and the required * new tags would exceed the maximum number per account *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Note.guid" - note not found, by GUID *
        • *
        • "Note.notebookGuid" - if notebookGuid provided, but not found *
        • *
        */ Note updateNote(const Note& note, QString authenticationToken = QString()); /** Asynchronous version of @link updateNote @endlink */ AsyncResult* updateNoteAsync(const Note& note, QString authenticationToken = QString()); /** * Moves the note into the trash. The note may still be undeleted, unless it * is expunged. This is equivalent to calling updateNote() after setting * Note.active = false * * @param guid * The GUID of the note to delete. * * @return * The Update Sequence Number for this change within the account. * * @throws EDAMUserException
          *
        • PERMISSION_DENIED "Note" - user doesn't have permission to * update the note. *
        • *
        * * @throws EDAMUserException
          *
        • DATA_CONFLICT "Note.guid" - the note is already deleted *
        • *
        * @throws EDAMNotFoundException
          *
        • "Note.guid" - not found, by GUID *
        • *
        */ qint32 deleteNote(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link deleteNote @endlink */ AsyncResult* deleteNoteAsync(Guid guid, QString authenticationToken = QString()); /** * Permanently removes a Note, and all of its Resources, * from the service. *

        * NOTE: This function is not available to third party applications. * Calls will result in an EDAMUserException with the error code * PERMISSION_DENIED. * * @param guid * The GUID of the note to delete. * * @return * The Update Sequence Number for this change within the account. * * @throws EDAMUserException

          *
        • PERMISSION_DENIED "Note" - user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Note.guid" - not found, by GUID *
        • *
        */ qint32 expungeNote(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link expungeNote @endlink */ AsyncResult* expungeNoteAsync(Guid guid, QString authenticationToken = QString()); /** * Permanently removes a list of Notes, and all of their Resources, from * the service. This should be invoked with a small number of Note GUIDs * (e.g. 100 or less) on each call. To expunge a larger number of notes, * call this method multiple times. This should also be used to reduce the * number of Notes in a notebook before calling expungeNotebook() or * in the trash before calling expungeInactiveNotes(), since these calls may * be prohibitively slow if there are more than a few hundred notes. * If an exception is thrown for any of the GUIDs, then none of the notes * will be deleted. I.e. this call can be treated as an atomic transaction. *

        * NOTE: This function is not available to third party applications. * Calls will result in an EDAMUserException with the error code * PERMISSION_DENIED. * * @param noteGuids * The list of GUIDs for the Notes to remove. * * @return * The account's updateCount at the end of this operation * * @throws EDAMUserException

          *
        • PERMISSION_DENIED "Note" - user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Note.guid" - not found, by GUID *
        • *
        */ qint32 expungeNotes(QList< Guid > noteGuids, QString authenticationToken = QString()); /** Asynchronous version of @link expungeNotes @endlink */ AsyncResult* expungeNotesAsync(QList< Guid > noteGuids, QString authenticationToken = QString()); /** * Permanently removes all of the Notes that are currently marked as * inactive. This is equivalent to "emptying the trash", and these Notes * will be gone permanently. *

        * This operation may be relatively slow if the account contains a large * number of inactive Notes. *

        * NOTE: This function is not available to third party applications. * Calls will result in an EDAMUserException with the error code * PERMISSION_DENIED. * * @return * The number of notes that were expunged. */ qint32 expungeInactiveNotes(QString authenticationToken = QString()); /** Asynchronous version of @link expungeInactiveNotes @endlink */ AsyncResult* expungeInactiveNotesAsync(QString authenticationToken = QString()); /** * Performs a deep copy of the Note with the provided GUID 'noteGuid' into * the Notebook with the provided GUID 'toNotebookGuid'. * The caller must be the owner of both the Note and the Notebook. * This creates a new Note in the destination Notebook with new content and * Resources that match all of the content and Resources from the original * Note, but with new GUID identifiers. * The original Note is not modified by this operation. * The copied note is considered as an "upload" for the purpose of upload * transfer limit calculation, so its size is added to the upload count for * the owner. * * @param noteGuid * The GUID of the Note to copy. * * @param toNotebookGuid * The GUID of the Notebook that should receive the new Note. * * @return * The metadata for the new Note that was created. This will include the * new GUID for this Note (and any copied Resources), but will not include * the content body or the binary bodies of any Resources. * * @throws EDAMUserException

          *
        • LIMIT_REACHED "Note" - at max number per account *
        • *
        • PERMISSION_DENIED "Notebook.guid" - destination not owned by user *
        • *
        • PERMISSION_DENIED "Note" - user doesn't own *
        • *
        • QUOTA_REACHED "Accounting.uploadLimit" - note exceeds upload quota *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Notebook.guid" - not found, by GUID *
        • *
        */ Note copyNote(Guid noteGuid, Guid toNotebookGuid, QString authenticationToken = QString()); /** Asynchronous version of @link copyNote @endlink */ AsyncResult* copyNoteAsync(Guid noteGuid, Guid toNotebookGuid, QString authenticationToken = QString()); /** * Returns a list of the prior versions of a particular note that are * saved within the service. These prior versions are stored to provide a * recovery from unintentional removal of content from a note. The identifiers * that are returned by this call can be used with getNoteVersion to retrieve * the previous note. * The identifiers will be listed from the most recent versions to the oldest. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Note.guid" - if the parameter is missing *
        • *
        • PERMISSION_DENIED "Note" - private note, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Note.guid" - not found, by GUID *
        • *
        */ QList< NoteVersionId > listNoteVersions(Guid noteGuid, QString authenticationToken = QString()); /** Asynchronous version of @link listNoteVersions @endlink */ AsyncResult* listNoteVersionsAsync(Guid noteGuid, QString authenticationToken = QString()); /** * This can be used to retrieve a previous version of a Note after it has been * updated within the service. The caller must identify the note (via its * guid) and the version (via the updateSequenceNumber of that version). * to find a listing of the stored version USNs for a note, call * listNoteVersions. * This call is only available for notes in Premium accounts. (I.e. access * to past versions of Notes is a Premium-only feature.) * * @param noteGuid * The GUID of the note to be retrieved. * * @param updateSequenceNum * The USN of the version of the note that is being retrieved * * @param withResourcesData * If true, any Resource elements in this Note will include the binary * contents of their 'data' field's body. * * @param withResourcesRecognition * If true, any Resource elements will include the binary contents of the * 'recognition' field's body if recognition data is present. * * @param withResourcesAlternateData * If true, any Resource elements in this Note will include the binary * contents of their 'alternateData' fields' body, if an alternate form * is present. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Note.guid" - if the parameter is missing *
        • *
        • PERMISSION_DENIED "Note" - private note, user doesn't own *
        • *
        • PERMISSION_DENIED "updateSequenceNum" - * The account isn't permitted to access previous versions of notes. * (i.e. this is a Free account.) *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Note.guid" - not found, by GUID *
        • *
        • "Note.updateSequenceNumber" - the Note doesn't have a version with * the corresponding USN. *
        • *
        */ Note getNoteVersion(Guid noteGuid, qint32 updateSequenceNum, bool withResourcesData, bool withResourcesRecognition, bool withResourcesAlternateData, QString authenticationToken = QString()); /** Asynchronous version of @link getNoteVersion @endlink */ AsyncResult* getNoteVersionAsync(Guid noteGuid, qint32 updateSequenceNum, bool withResourcesData, bool withResourcesRecognition, bool withResourcesAlternateData, QString authenticationToken = QString()); /** * Returns the current state of the resource in the service with the * provided GUID. * If the Resource is found in a public notebook, the authenticationToken * will be ignored (so it could be an empty string). Only the * keys for the applicationData will be returned. * * @param guid * The GUID of the resource to be retrieved. * * @param withData * If true, the Resource will include the binary contents of the * 'data' field's body. * * @param withRecognition * If true, the Resource will include the binary contents of the * 'recognition' field's body if recognition data is present. * * @param withAttributes * If true, the Resource will include the attributes * * @param withAlternateData * If true, the Resource will include the binary contents of the * 'alternateData' field's body, if an alternate form is present. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Resource.guid" - if the parameter is missing *
        • *
        • PERMISSION_DENIED "Resource" - private resource, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Resource.guid" - not found, by GUID *
        • *
        */ Resource getResource(Guid guid, bool withData, bool withRecognition, bool withAttributes, bool withAlternateData, QString authenticationToken = QString()); /** Asynchronous version of @link getResource @endlink */ AsyncResult* getResourceAsync(Guid guid, bool withData, bool withRecognition, bool withAttributes, bool withAlternateData, QString authenticationToken = QString()); /** * Get all of the application data for the Resource identified by GUID, * with values returned within the LazyMap fullMap field. * If there are no applicationData entries, then a LazyMap * with an empty fullMap will be returned. If your application * only needs to fetch its own applicationData entry, use * getResourceApplicationDataEntry instead. */ LazyMap getResourceApplicationData(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link getResourceApplicationData @endlink */ AsyncResult* getResourceApplicationDataAsync(Guid guid, QString authenticationToken = QString()); /** * Get the value of a single entry in the applicationData map * for the Resource identified by GUID. * * @throws EDAMNotFoundException
          *
        • "Resource.guid" - Resource not found, by GUID
        • *
        • "ResourceAttributes.applicationData.key" - Resource not found, by key
        • *
        */ QString getResourceApplicationDataEntry(Guid guid, QString key, QString authenticationToken = QString()); /** Asynchronous version of @link getResourceApplicationDataEntry @endlink */ AsyncResult* getResourceApplicationDataEntryAsync(Guid guid, QString key, QString authenticationToken = QString()); /** * Update, or create, an entry in the applicationData map for * the Resource identified by guid. */ qint32 setResourceApplicationDataEntry(Guid guid, QString key, QString value, QString authenticationToken = QString()); /** Asynchronous version of @link setResourceApplicationDataEntry @endlink */ AsyncResult* setResourceApplicationDataEntryAsync(Guid guid, QString key, QString value, QString authenticationToken = QString()); /** * Remove an entry identified by 'key' from the applicationData map for * the Resource identified by 'guid'. */ qint32 unsetResourceApplicationDataEntry(Guid guid, QString key, QString authenticationToken = QString()); /** Asynchronous version of @link unsetResourceApplicationDataEntry @endlink */ AsyncResult* unsetResourceApplicationDataEntryAsync(Guid guid, QString key, QString authenticationToken = QString()); /** * Submit a set of changes to a resource to the service. This can be used * to update the meta-data about the resource, but cannot be used to change * the binary contents of the resource (including the length and hash). These * cannot be changed directly without creating a new resource and removing the * old one via updateNote. * * @param resource * A Resource object containing the desired fields to be populated on * the service. The service will attempt to update the resource with the * following fields from the client: *
          *
        • guid: must be provided to identify the resource *
        • *
        • mime *
        • *
        • width *
        • *
        • height *
        • *
        • duration *
        • *
        • attributes: optional. if present, the set of attributes will * be replaced. *
        • *
        * * @return * The Update Sequence Number of the resource after the changes have been * applied. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Resource.guid" - if the parameter is missing *
        • *
        • BAD_DATA_FORMAT "Resource.mime" - invalid resource MIME type *
        • *
        • BAD_DATA_FORMAT "ResourceAttributes.*" - bad resource string *
        • *
        • LIMIT_REACHED "ResourceAttribute.*" - attribute string too long *
        • *
        • PERMISSION_DENIED "Resource" - private resource, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Resource.guid" - not found, by GUID *
        • *
        */ qint32 updateResource(const Resource& resource, QString authenticationToken = QString()); /** Asynchronous version of @link updateResource @endlink */ AsyncResult* updateResourceAsync(const Resource& resource, QString authenticationToken = QString()); /** * Returns binary data of the resource with the provided GUID. For * example, if this were an image resource, this would contain the * raw bits of the image. * If the Resource is found in a public notebook, the authenticationToken * will be ignored (so it could be an empty string). * * @param guid * The GUID of the resource to be retrieved. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Resource.guid" - if the parameter is missing *
        • *
        • PERMISSION_DENIED "Resource" - private resource, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Resource.guid" - not found, by GUID *
        • *
        */ QByteArray getResourceData(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link getResourceData @endlink */ AsyncResult* getResourceDataAsync(Guid guid, QString authenticationToken = QString()); /** * Returns the current state of a resource, referenced by containing * note GUID and resource content hash. * * @param noteGuid * The GUID of the note that holds the resource to be retrieved. * * @param contentHash * The MD5 checksum of the resource within that note. Note that * this is the binary checksum, for example from Resource.data.bodyHash, * and not the hex-encoded checksum that is used within an en-media * tag in a note body. * * @param withData * If true, the Resource will include the binary contents of the * 'data' field's body. * * @param withRecognition * If true, the Resource will include the binary contents of the * 'recognition' field's body. * * @param withAlternateData * If true, the Resource will include the binary contents of the * 'alternateData' field's body, if an alternate form is present. * * @throws EDAMUserException
          *
        • DATA_REQUIRED "Note.guid" - noteGuid param missing *
        • *
        • DATA_REQUIRED "Note.contentHash" - contentHash param missing *
        • *
        • PERMISSION_DENIED "Resource" - private resource, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Note" - not found, by guid *
        • *
        • "Resource" - not found, by hash *
        • *
        */ Resource getResourceByHash(Guid noteGuid, QByteArray contentHash, bool withData, bool withRecognition, bool withAlternateData, QString authenticationToken = QString()); /** Asynchronous version of @link getResourceByHash @endlink */ AsyncResult* getResourceByHashAsync(Guid noteGuid, QByteArray contentHash, bool withData, bool withRecognition, bool withAlternateData, QString authenticationToken = QString()); /** * Returns the binary contents of the recognition index for the resource * with the provided GUID. If the caller asks about a resource that has * no recognition data, this will throw EDAMNotFoundException. * If the Resource is found in a public notebook, the authenticationToken * will be ignored (so it could be an empty string). * * @param guid * The GUID of the resource whose recognition data should be retrieved. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Resource.guid" - if the parameter is missing *
        • *
        • PERMISSION_DENIED "Resource" - private resource, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Resource.guid" - not found, by GUID *
        • *
        • "Resource.recognition" - resource has no recognition *
        • *
        */ QByteArray getResourceRecognition(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link getResourceRecognition @endlink */ AsyncResult* getResourceRecognitionAsync(Guid guid, QString authenticationToken = QString()); /** * If the Resource with the provided GUID has an alternate data representation * (indicated via the Resource.alternateData field), then this request can * be used to retrieve the binary contents of that alternate data file. * If the caller asks about a resource that has no alternate data form, this * will throw EDAMNotFoundException. * * @param guid * The GUID of the resource whose recognition data should be retrieved. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Resource.guid" - if the parameter is missing *
        • *
        • PERMISSION_DENIED "Resource" - private resource, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Resource.guid" - not found, by GUID *
        • *
        • "Resource.alternateData" - resource has no recognition *
        • *
        */ QByteArray getResourceAlternateData(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link getResourceAlternateData @endlink */ AsyncResult* getResourceAlternateDataAsync(Guid guid, QString authenticationToken = QString()); /** * Returns the set of attributes for the Resource with the provided GUID. * If the Resource is found in a public notebook, the authenticationToken * will be ignored (so it could be an empty string). * * @param guid * The GUID of the resource whose attributes should be retrieved. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Resource.guid" - if the parameter is missing *
        • *
        • PERMISSION_DENIED "Resource" - private resource, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Resource.guid" - not found, by GUID *
        • *
        */ ResourceAttributes getResourceAttributes(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link getResourceAttributes @endlink */ AsyncResult* getResourceAttributesAsync(Guid guid, QString authenticationToken = QString()); /** *

        * Looks for a user account with the provided userId on this NoteStore * shard and determines whether that account contains a public notebook * with the given URI. If the account is not found, or no public notebook * exists with this URI, this will throw an EDAMNotFoundException, * otherwise this will return the information for that Notebook. *

        *

        * If a notebook is visible on the web with a full URL like * http://www.evernote.com/pub/sethdemo/api * Then 'sethdemo' is the username that can be used to look up the userId, * and 'api' is the publicUri. *

        * * @param userId * The numeric identifier for the user who owns the public notebook. * To find this value based on a username string, you can invoke * UserStore.getPublicUserInfo * * @param publicUri * The uri string for the public notebook, from Notebook.publishing.uri. * * @throws EDAMNotFoundException
          *
        • "Publishing.uri" - not found, by URI
        • *
        * * @throws EDAMSystemException
          *
        • TAKEN_DOWN "PublicNotebook" - The specified public notebook is * taken down (for all requesters).
        • *
        • TAKEN_DOWN "Country" - The specified public notebook is taken * down for the requester because of an IP-based country lookup.
        • *
        */ Notebook getPublicNotebook(UserID userId, QString publicUri); /** Asynchronous version of @link getPublicNotebook @endlink */ AsyncResult* getPublicNotebookAsync(UserID userId, QString publicUri); /** * Used to construct a shared notebook object. The constructed notebook will * contain a "share key" which serve as a unique identifer and access token * for a user to access the notebook of the shared notebook owner. * * @param sharedNotebook * A shared notebook object populated with the email address of the share * recipient, the notebook guid and the access permissions. All other * attributes of the shared object are ignored. The SharedNotebook.allowPreview * field must be explicitly set with either a true or false value. * * @return * The fully populated SharedNotebook object including the server assigned * share id and shareKey which can both be used to uniquely identify the * SharedNotebook. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "SharedNotebook.email" - if the email was not valid
        • *
        • BAD_DATA_FORMAT "requireLogin" - if the SharedNotebook.allowPreview field was * not set, and the SharedNotebook.requireLogin was also not set or was set to * false.
        • *
        • PERMISSION_DENIED "SharedNotebook.recipientSettings" - if * recipientSettings is set in the sharedNotebook. Only the recipient * can set these values via the setSharedNotebookRecipientSettings * method. *
        • *
        * @throws EDAMNotFoundException
          *
        • Notebook.guid - if the notebookGuid is not a valid GUID for the user. *
        • *
        */ SharedNotebook createSharedNotebook(const SharedNotebook& sharedNotebook, QString authenticationToken = QString()); /** Asynchronous version of @link createSharedNotebook @endlink */ AsyncResult* createSharedNotebookAsync(const SharedNotebook& sharedNotebook, QString authenticationToken = QString()); /** * Update a SharedNotebook object. * * @param authenticationToken * Must be an authentication token from the owner or a shared notebook * authentication token or business authentication token with sufficient * permissions to change invitations for a notebook. * * @param sharedNotebook * The SharedNotebook object containing the requested changes. * The "id" of the shared notebook must be set to allow the service * to identify the SharedNotebook to be updated. In addition, you MUST set * the email, permission, and allowPreview fields to the desired values. * All other fields will be ignored if set. * * @return * The Update Serial Number for this change within the account. * * @throws EDAMUserException
          *
        • UNSUPPORTED_OPERATION "updateSharedNotebook" - if this service instance does not support shared notebooks.
        • *
        • BAD_DATA_FORMAT "SharedNotebook.email" - if the email was not valid.
        • *
        • DATA_REQUIRED "SharedNotebook.id" - if the id field was not set.
        • *
        • DATA_REQUIRED "SharedNotebook.privilege" - if the privilege field was not set.
        • *
        • DATA_REQUIRED "SharedNotebook.allowPreview" - if the allowPreview field was not set.
        • *
        * @throws EDAMNotFoundException
          *
        • SharedNotebook.id - if no shared notebook with the specified ID was found. *
        */ qint32 updateSharedNotebook(const SharedNotebook& sharedNotebook, QString authenticationToken = QString()); /** Asynchronous version of @link updateSharedNotebook @endlink */ AsyncResult* updateSharedNotebookAsync(const SharedNotebook& sharedNotebook, QString authenticationToken = QString()); /** * Set values for the recipient settings associated with a shared notebook. Having * update rights to the shared notebook record itself has no effect on this call; * only the recipient of the shared notebook can can the recipient settings. * * If you do not wish to, or cannot, change one of the reminderNotifyEmail or * reminderNotifyInApp fields, you must leave that field unset in recipientSettings. * This method will skip that field for updates and leave the existing state as * it is. * * @return The update sequence number of the account to which the shared notebook * belongs, which is the account from which we are sharing a notebook. * * @throws EDAMNotFoundException "sharedNotebookId" - Thrown if the service does not * have a shared notebook record for the sharedNotebookId on the given shard. If you * receive this exception, it is probable that the shared notebook record has * been revoked or expired, or that you accessed the wrong shard. * * @throws EDAMUserException
          *
        • PEMISSION_DENIED "authenticationToken" - If you do not have permission to set * the recipient settings for the shared notebook. Only the recipient has * permission to do this. *
        • DATA_CONFLICT "recipientSettings.reminderNotifyEmail" - Setting whether * or not you want to receive reminder e-mail notifications is possible on * a business notebook in the business to which the user belongs. All * others can safely unset the reminderNotifyEmail field from the * recipientSettings parameter. *
        */ qint32 setSharedNotebookRecipientSettings(qint64 sharedNotebookId, const SharedNotebookRecipientSettings& recipientSettings, QString authenticationToken = QString()); /** Asynchronous version of @link setSharedNotebookRecipientSettings @endlink */ AsyncResult* setSharedNotebookRecipientSettingsAsync(qint64 sharedNotebookId, const SharedNotebookRecipientSettings& recipientSettings, QString authenticationToken = QString()); /** * Send a reminder message to some or all of the email addresses that a notebook has been * shared with. The message includes the current link to view the notebook. * @param authenticationToken * The auth token of the user with permissions to share the notebook * @param notebookGuid * The guid of the shared notebook * @param messageText * User provided text to include in the email * @param recipients * The email addresses of the recipients. If this list is empty then all of the * users that the notebook has been shared with are emailed. * If an email address doesn't correspond to share invite members then that address * is ignored. * @return * The number of messages sent * @throws EDAMUserException
          *
        • LIMIT_REACHED "(recipients)" - * The email can't be sent because this would exceed the user's daily * email limit. *
        • *
        • PERMISSION_DENIED "Notebook.guid" - The user doesn't have permission to * send a message for the specified notebook. *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Notebook.guid" - not found, by GUID *
        • *
        */ qint32 sendMessageToSharedNotebookMembers(Guid notebookGuid, QString messageText, QStringList recipients, QString authenticationToken = QString()); /** Asynchronous version of @link sendMessageToSharedNotebookMembers @endlink */ AsyncResult* sendMessageToSharedNotebookMembersAsync(Guid notebookGuid, QString messageText, QStringList recipients, QString authenticationToken = QString()); /** * Lists the collection of shared notebooks for all notebooks in the * users account. * * @return * The list of all SharedNotebooks for the user */ QList< SharedNotebook > listSharedNotebooks(QString authenticationToken = QString()); /** Asynchronous version of @link listSharedNotebooks @endlink */ AsyncResult* listSharedNotebooksAsync(QString authenticationToken = QString()); /** * Expunges the SharedNotebooks in the user's account using the * SharedNotebook.id as the identifier. *

        * NOTE: This function is generally not available to third party applications. * Calls will result in an EDAMUserException with the error code * PERMISSION_DENIED. * * @param * sharedNotebookIds - a list of ShardNotebook.id longs identifying the * objects to delete permanently. * * @return * The account's update sequence number. */ qint32 expungeSharedNotebooks(QList< qint64 > sharedNotebookIds, QString authenticationToken = QString()); /** Asynchronous version of @link expungeSharedNotebooks @endlink */ AsyncResult* expungeSharedNotebooksAsync(QList< qint64 > sharedNotebookIds, QString authenticationToken = QString()); /** * Asks the service to make a linked notebook with the provided name, username * of the owner and identifiers provided. A linked notebook can be either a * link to a public notebook or to a private shared notebook. * * @param linkedNotebook * The desired fields for the linked notebook must be provided on this * object. The name of the linked notebook must be set. Either a username * uri or a shard id and share key must be provided otherwise a * EDAMUserException is thrown. * * @return * The newly created LinkedNotebook. The server-side id will be * saved in this object's 'id' field. * * @throws EDAMUserException

          *
        • BAD_DATA_FORMAT "LinkedNotebook.name" - invalid length or pattern *
        • *
        • BAD_DATA_FORMAT "LinkedNotebook.username" - bad username format *
        • *
        • BAD_DATA_FORMAT "LinkedNotebook.uri" - * if public notebook set but bad uri *
        • *
        • BAD_DATA_FORMAT "LinkedNotebook.shareKey" - * if private notebook set but bad shareKey *
        • *
        • DATA_REQUIRED "LinkedNotebook.shardId" - * if private notebook but shard id not provided *
        • *
        */ LinkedNotebook createLinkedNotebook(const LinkedNotebook& linkedNotebook, QString authenticationToken = QString()); /** Asynchronous version of @link createLinkedNotebook @endlink */ AsyncResult* createLinkedNotebookAsync(const LinkedNotebook& linkedNotebook, QString authenticationToken = QString()); /** * @param linkedNotebook * Updates the name of a linked notebook. * * @return * The Update Sequence Number for this change within the account. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "LinkedNotebook.name" - invalid length or pattern *
        • *
        */ qint32 updateLinkedNotebook(const LinkedNotebook& linkedNotebook, QString authenticationToken = QString()); /** Asynchronous version of @link updateLinkedNotebook @endlink */ AsyncResult* updateLinkedNotebookAsync(const LinkedNotebook& linkedNotebook, QString authenticationToken = QString()); /** * Returns a list of linked notebooks */ QList< LinkedNotebook > listLinkedNotebooks(QString authenticationToken = QString()); /** Asynchronous version of @link listLinkedNotebooks @endlink */ AsyncResult* listLinkedNotebooksAsync(QString authenticationToken = QString()); /** * Permanently expunges the linked notebook from the account. *

        * NOTE: This function is generally not available to third party applications. * Calls will result in an EDAMUserException with the error code * PERMISSION_DENIED. * * @param guid * The LinkedNotebook.guid field of the LinkedNotebook to permanently remove * from the account. */ qint32 expungeLinkedNotebook(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link expungeLinkedNotebook @endlink */ AsyncResult* expungeLinkedNotebookAsync(Guid guid, QString authenticationToken = QString()); /** * Asks the service to produce an authentication token that can be used to * access the contents of a shared notebook from someone else's account. * This authenticationToken can be used with the various other NoteStore * calls to find and retrieve notes, and if the permissions in the shared * notebook are sufficient, to make changes to the contents of the notebook. * * @param shareKey * The 'shareKey' identifier from the SharedNotebook that was granted to * some recipient. This string internally encodes the notebook identifier * and a security signature. * * @param authenticationToken * If a non-empty string is provided, this is the full user-based * authentication token that identifies the user who is currently logged in * and trying to access the shared notebook. This may be required if the * notebook was created with 'requireLogin'. * If this string is empty, the service will attempt to authenticate to the * shared notebook without any logged in user. * * @throws EDAMSystemException

          *
        • BAD_DATA_FORMAT "shareKey" - invalid shareKey string *
        • *
        • INVALID_AUTH "shareKey" - bad signature on shareKey string *
        • *
        * * @throws EDAMNotFoundException
          *
        • "SharedNotebook.id" - the shared notebook no longer exists *
        • *
        * * @throws EDAMUserException
          *
        • DATA_REQUIRED "authenticationToken" - the share requires login, and * no valid authentication token was provided. *
        • *
        • PERMISSION_DENIED "SharedNotebook.username" - share requires login, * and another username has already been bound to this notebook. *
        • *
        */ AuthenticationResult authenticateToSharedNotebook(QString shareKey, QString authenticationToken = QString()); /** Asynchronous version of @link authenticateToSharedNotebook @endlink */ AsyncResult* authenticateToSharedNotebookAsync(QString shareKey, QString authenticationToken = QString()); /** * This function is used to retrieve extended information about a shared * notebook by a guest who has already authenticated to access that notebook. * This requires an 'authenticationToken' parameter which should be the * resut of a call to authenticateToSharedNotebook(...). * I.e. this is the token that gives access to the particular shared notebook * in someone else's account -- it's not the authenticationToken for the * owner of the notebook itself. * * @param authenticationToken * Should be the authentication token retrieved from the reply of * authenticateToSharedNotebook(), proving access to a particular shared * notebook. * * @throws EDAMUserException
          *
        • PERMISSION_DENIED "authenticationToken" - * authentication token doesn't correspond to a valid shared notebook *
        • *
        * * @throws EDAMNotFoundException
          *
        • "SharedNotebook.id" - the shared notebook no longer exists *
        • *
        */ SharedNotebook getSharedNotebookByAuth(QString authenticationToken = QString()); /** Asynchronous version of @link getSharedNotebookByAuth @endlink */ AsyncResult* getSharedNotebookByAuthAsync(QString authenticationToken = QString()); /** * Attempts to send a single note to one or more email recipients. *

        * NOTE: This function is generally not available to third party applications. * Calls will result in an EDAMUserException with the error code * PERMISSION_DENIED. * * @param authenticationToken * The note will be sent as the user logged in via this token, using that * user's registered email address. If the authenticated user doesn't * have permission to read that note, the emailing will fail. * * @param parameters * The note must be specified either by GUID (in which case it will be * sent using the existing data in the service), or else the full Note * must be passed to this call. This also specifies the additional * email fields that will be used in the email. * * @throws EDAMUserException

          *
        • LIMIT_REACHED "NoteEmailParameters.toAddresses" - * The email can't be sent because this would exceed the user's daily * email limit. *
        • *
        • BAD_DATA_FORMAT "(email address)" - * email address malformed *
        • *
        • DATA_REQUIRED "NoteEmailParameters.toAddresses" - * if there are no To: or Cc: addresses provided. *
        • *
        • DATA_REQUIRED "Note.title" - * if the caller provides a Note parameter with no title *
        • *
        • DATA_REQUIRED "Note.content" - * if the caller provides a Note parameter with no content *
        • *
        • ENML_VALIDATION "*" - note content doesn't validate against DTD *
        • *
        • DATA_REQUIRED "NoteEmailParameters.note" - * if no guid or note provided *
        • *
        • PERMISSION_DENIED "Note" - private note, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Note.guid" - not found, by GUID *
        • *
        */ void emailNote(const NoteEmailParameters& parameters, QString authenticationToken = QString()); /** Asynchronous version of @link emailNote @endlink */ AsyncResult* emailNoteAsync(const NoteEmailParameters& parameters, QString authenticationToken = QString()); /** * If this note is not already shared (via its own direct URL), then this * will start sharing that note. * This will return the secret "Note Key" for this note that * can currently be used in conjunction with the Note's GUID to gain direct * read-only access to the Note. * If the note is already shared, then this won't make any changes to the * note, and the existing "Note Key" will be returned. The only way to change * the Note Key for an existing note is to stopSharingNote first, and then * call this function. * * @param guid * The GUID of the note to be shared. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Note.guid" - if the parameter is missing *
        • *
        • PERMISSION_DENIED "Note" - private note, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Note.guid" - not found, by GUID *
        • *
        */ QString shareNote(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link shareNote @endlink */ AsyncResult* shareNoteAsync(Guid guid, QString authenticationToken = QString()); /** * If this note is not already shared then this will stop sharing that note * and invalidate its "Note Key", so any existing URLs to access that Note * will stop working. * If the Note is not shared, then this function will do nothing. * * @param guid * The GUID of the note to be un-shared. * * @throws EDAMUserException
          *
        • BAD_DATA_FORMAT "Note.guid" - if the parameter is missing *
        • *
        • PERMISSION_DENIED "Note" - private note, user doesn't own *
        • *
        * * @throws EDAMNotFoundException
          *
        • "Note.guid" - not found, by GUID *
        • *
        */ void stopSharingNote(Guid guid, QString authenticationToken = QString()); /** Asynchronous version of @link stopSharingNote @endlink */ AsyncResult* stopSharingNoteAsync(Guid guid, QString authenticationToken = QString()); /** * Asks the service to produce an authentication token that can be used to * access the contents of a single Note which was individually shared * from someone's account. * This authenticationToken can be used with the various other NoteStore * calls to find and retrieve the Note and its directly-referenced children. * * @param guid * The GUID identifying this Note on this shard. * * @param noteKey * The 'noteKey' identifier from the Note that was originally created via * a call to shareNote() and then given to a recipient to access. * * @param authenticationToken * An optional authenticationToken that identifies the user accessing the * shared note. This parameter may be required to access some shared notes. * * @throws EDAMUserException
          *
        • PERMISSION_DENIED "Note" - the Note with that GUID is either not * shared, or the noteKey doesn't match the current key for this note *
        • *
        • PERMISSION_DENIED "authenticationToken" - an authentication token is * required to access this Note, but either no authentication token or a * "non-owner" authentication token was provided. *
        • *
        * * @throws EDAMNotFoundException
          *
        • "guid" - the note with that GUID is not found *
        • *
        * * @throws EDAMSystemException
          *
        • TAKEN_DOWN "Note" - The specified shared note is taken down (for * all requesters). *
        • *
        • TAKEN_DOWN "Country" - The specified shared note is taken down * for the requester because of an IP-based country lookup. *
        *
      */ AuthenticationResult authenticateToSharedNote(QString guid, QString noteKey, QString authenticationToken = QString()); /** Asynchronous version of @link authenticateToSharedNote @endlink */ AsyncResult* authenticateToSharedNoteAsync(QString guid, QString noteKey, QString authenticationToken = QString()); /** * Identify related entities on the service, such as notes, * notebooks, and tags related to notes or content. * * @param query * The information about which we are finding related entities. * @param resultSpec * Allows the client to indicate the type and quantity of * information to be returned, allowing a saving of time and * bandwidth. * * @return * The result of the query, with information considered * to likely be relevantly related to the information * described by the query. * * @throws EDAMUserException
        *
      • BAD_DATA_FORMAT "RelatedQuery.plainText" - If you provided a * a zero-length plain text value. *
      • *
      • BAD_DATA_FORMAT "RelatedQuery.noteGuid" - If you provided an * invalid Note GUID, that is, one that does not match the constraints * defined by EDAM_GUID_LEN_MIN, EDAM_GUID_LEN_MAX, EDAM_GUID_REGEX. *
      • *
      • BAD_DATA_FORMAT "NoteFilter.notebookGuid" - if malformed *
      • *
      • BAD_DATA_FORMAT "NoteFilter.tagGuids" - if any are malformed *
      • *
      • BAD_DATA_FORMAT "NoteFilter.words" - if search string too long *
      • *
      • PERMISSION_DENIED "Note" - If the caller does not have access to * the note identified by RelatedQuery.noteGuid. *
      • *
      • DATA_REQUIRED "RelatedResultSpec" - If you did not not set any values * in the result spec. *
      • *
      * * @throws EDAMNotFoundException
        *
      • "RelatedQuery.noteGuid" - the note with that GUID is not * found, if that field has been set in the query. *
      • *
      */ RelatedResult findRelated(const RelatedQuery& query, const RelatedResultSpec& resultSpec, QString authenticationToken = QString()); /** Asynchronous version of @link findRelated @endlink */ AsyncResult* findRelatedAsync(const RelatedQuery& query, const RelatedResultSpec& resultSpec, QString authenticationToken = QString()); private: QString url_; QString authenticationToken_; }; /** * Service: UserStore *

      * The UserStore service is primarily used by EDAM clients to establish * authentication via username and password over a trusted connection (e.g. * SSL). A client's first call to this interface should be checkVersion() to * ensure that the client's software is up to date. *

      * All calls which require an authenticationToken may throw an * EDAMUserException for the following reasons: *
        *
      • AUTH_EXPIRED "authenticationToken" - token has expired *
      • BAD_DATA_FORMAT "authenticationToken" - token is malformed *
      • DATA_REQUIRED "authenticationToken" - token is empty *
      • INVALID_AUTH "authenticationToken" - token signature is invalid *
      */ class UserStore: public QObject { Q_DISABLE_COPY(UserStore) public: explicit UserStore(QString host, QString authenticationToken = QString(), QObject *parent = 0); void setAuthenticationToken(QString authenticationToken) {authenticationToken_ = authenticationToken;} QString authenticationToken() {return authenticationToken_ ;} /** * This should be the first call made by a client to the EDAM service. It * tells the service what protocol version is used by the client. The * service will then return true if the client is capable of talking to * the service, and false if the client's protocol version is incompatible * with the service, so the client must upgrade. If a client receives a * false value, it should report the incompatibility to the user and not * continue with any more EDAM requests (UserStore or NoteStore). * * @param clientName * This string provides some information about the client for * tracking/logging on the service. It should provide information about * the client's software and platform. The structure should be: * application/version; platform/version; [ device/version ] * E.g. "Evernote Windows/3.0.1; Windows/XP SP3". * * @param edamVersionMajor * This should be the major protocol version that was compiled by the * client. This should be the current value of the EDAM_VERSION_MAJOR * constant for the client. * * @param edamVersionMinor * This should be the major protocol version that was compiled by the * client. This should be the current value of the EDAM_VERSION_MINOR * constant for the client. */ bool checkVersion(QString clientName, qint16 edamVersionMajor = EDAM_VERSION_MAJOR, qint16 edamVersionMinor = EDAM_VERSION_MINOR); /** Asynchronous version of @link checkVersion @endlink */ AsyncResult* checkVersionAsync(QString clientName, qint16 edamVersionMajor = EDAM_VERSION_MAJOR, qint16 edamVersionMinor = EDAM_VERSION_MINOR); /** * This provides bootstrap information to the client. Various bootstrap * profiles and settings may be used by the client to configure itself. * * @param locale * The client's current locale, expressed in language[_country] * format. E.g., "en_US". See ISO-639 and ISO-3166 for valid * language and country codes. * * @return * The bootstrap information suitable for this client. */ BootstrapInfo getBootstrapInfo(QString locale); /** Asynchronous version of @link getBootstrapInfo @endlink */ AsyncResult* getBootstrapInfoAsync(QString locale); /** * This is used to check a username and password in order to create a * short-lived authentication session that can be used for further actions. * * This function is only available to Evernote's internal applications. * Third party applications must authenticate using OAuth as * described at * dev.evernote.com. * * @param username * The username (not numeric user ID) for the account to * authenticate against. This function will also accept the user's * registered email address in this parameter. * * @param password * The plaintext password to check against the account. Since * this is not protected by the EDAM protocol, this information must be * provided over a protected transport (e.g. SSL). * * @param consumerKey * The "consumer key" portion of the API key issued to the client application * by Evernote. * * @param consumerSecret * The "consumer secret" portion of the API key issued to the client application * by Evernote. * * @param supportsTwoFactor * Whether the calling application supports two-factor authentication. If this * parameter is false, this method will fail with the error code INVALID_AUTH and the * parameter "password" when called for a user who has enabled two-factor * authentication. * * @return *

      The result of the authentication. If the authentication was successful, * the AuthenticationResult.user field will be set with the full information * about the User.

      *

      If the user has two-factor authentication enabled, * AuthenticationResult.secondFactorRequired will be set and * AuthenticationResult.authenticationToken will contain a short-lived token * that may only be used to complete the two-factor authentication process by calling * UserStore.completeTwoFactorAuthentication.

      * * @throws EDAMUserException
        *
      • DATA_REQUIRED "username" - username is empty *
      • DATA_REQUIRED "password" - password is empty *
      • DATA_REQUIRED "consumerKey" - consumerKey is empty *
      • INVALID_AUTH "username" - username not found *
      • INVALID_AUTH "password" - password did not match *
      • INVALID_AUTH "consumerKey" - consumerKey is not authorized *
      • INVALID_AUTH "consumerSecret" - consumerSecret is incorrect *
      • PERMISSION_DENIED "User.active" - user account is closed *
      • PERMISSION_DENIED "User.tooManyFailuresTryAgainLater" - user has * failed authentication too often *
      */ AuthenticationResult authenticate(QString username, QString password, QString consumerKey, QString consumerSecret, bool supportsTwoFactor); /** Asynchronous version of @link authenticate @endlink */ AsyncResult* authenticateAsync(QString username, QString password, QString consumerKey, QString consumerSecret, bool supportsTwoFactor); /** * This is used to check a username and password in order to create a * long-lived authentication token that can be used for further actions. * * This function is not available to most third party applications, * which typically authenticate using OAuth as * described at * dev.evernote.com. * If you believe that your application requires permission to authenticate * using username and password instead of OAuth, please contact Evernote * developer support by visiting * dev.evernote.com. * * @param username * The username or registered email address of the account to * authenticate against. * * @param password * The plaintext password to check against the account. Since * this is not protected by the EDAM protocol, this information must be * provided over a protected transport (i.e. SSL). * * @param consumerKey * The "consumer key" portion of the API key issued to the client application * by Evernote. * * @param consumerSecret * The "consumer secret" portion of the API key issued to the client application * by Evernote. * * @param deviceIdentifier * An optional string, no more than 32 characters in length, that uniquely identifies * the device from which the authentication is being performed. This string allows * the service to return the same authentication token when a given application * requests authentication repeatedly from the same device. This may happen when the * user logs out of an application and then logs back in, or when the application is * uninstalled and later reinstalled. If no reliable device identifier can be created, * this value should be omitted. If set, the device identifier must be between * 1 and EDAM_DEVICE_ID_LEN_MAX characters long and must match the regular expression * EDAM_DEVICE_ID_REGEX. * * @param deviceDescription * A description of the device from which the authentication is being performed. * This field is displayed to the user in a list of authorized applications to * allow them to distinguish between multiple tokens issued to the same client * application on different devices. For example, the Evernote iOS client on * a user's iPhone and iPad might pass the iOS device names "Bob's iPhone" and * "Bob's iPad". The device description must be between 1 and * EDAM_DEVICE_DESCRIPTION_LEN_MAX characters long and must match the regular * expression EDAM_DEVICE_DESCRIPTION_REGEX. * * @param supportsTwoFactor * Whether the calling application supports two-factor authentication. If this * parameter is false, this method will fail with the error code INVALID_AUTH and the * parameter "password" when called for a user who has enabled two-factor * authentication. * * @return *

      The result of the authentication. The level of detail provided in the returned * AuthenticationResult.User structure depends on the access level granted by * calling application's API key.

      *

      If the user has two-factor authentication enabled, * AuthenticationResult.secondFactorRequired will be set and * AuthenticationResult.authenticationToken will contain a short-lived token * that may only be used to complete the two-factor authentication process by calling * UserStore.completeTwoFactorAuthentication.

      * * @throws EDAMUserException
        *
      • DATA_REQUIRED "username" - username is empty *
      • DATA_REQUIRED "password" - password is empty *
      • DATA_REQUIRED "consumerKey" - consumerKey is empty *
      • DATA_REQUIRED "consumerSecret" - consumerSecret is empty *
      • DATA_REQUIRED "deviceDescription" - deviceDescription is empty *
      • BAD_DATA_FORMAT "deviceDescription" - deviceDescription is not valid. *
      • BAD_DATA_FORMAT "deviceIdentifier" - deviceIdentifier is not valid. *
      • INVALID_AUTH "username" - username not found *
      • INVALID_AUTH "password" - password did not match *
      • INVALID_AUTH "consumerKey" - consumerKey is not authorized *
      • INVALID_AUTH "consumerSecret" - consumerSecret is incorrect *
      • PERMISSION_DENIED "User.active" - user account is closed *
      • PERMISSION_DENIED "User.tooManyFailuresTryAgainLater" - user has * failed authentication too often *
      */ AuthenticationResult authenticateLongSession(QString username, QString password, QString consumerKey, QString consumerSecret, QString deviceIdentifier, QString deviceDescription, bool supportsTwoFactor); /** Asynchronous version of @link authenticateLongSession @endlink */ AsyncResult* authenticateLongSessionAsync(QString username, QString password, QString consumerKey, QString consumerSecret, QString deviceIdentifier, QString deviceDescription, bool supportsTwoFactor); /** * Complete the authentication process when a second factor is required. This * call is made after a successful call to authenticate or authenticateLongSession * when the authenticating user has enabled two-factor authentication. * * @param authenticationToken An authentication token returned by a previous * call to UserStore.authenticate or UserStore.authenticateLongSession that * could not be completed in a single call because a second factor was required. * * @param oneTimeCode The one time code entered by the user. This value is delivered * out-of-band, typically via SMS or an authenticator application. * * @param deviceIdentifier See the corresponding parameter in authenticateLongSession. * * @param deviceDescription See the corresponding parameter in authenticateLongSession. * * @return * The result of the authentication. The level of detail provided in the returned * AuthenticationResult.User structure depends on the access level granted by the * calling application's API key. If the initial authentication call was made to * authenticateLongSession, the AuthenticationResult will contain a long-lived * authentication token. * * @throws EDAMUserException
        *
      • DATA_REQUIRED "authenticationToken" - authenticationToken is empty *
      • DATA_REQUIRED "oneTimeCode" - oneTimeCode is empty *
      • BAD_DATA_FORMAT "authenticationToken" - authenticationToken is not well formed *
      • INVALID_AUTH "oneTimeCode" - oneTimeCode did not match *
      • AUTH_EXPIRED "authenticationToken" - authenticationToken has expired *
      • PERMISSION_DENIED "authenticationToken" - authenticationToken is not valid *
      • PERMISSION_DENIED "User.active" - user account is closed *
      • PERMISSION_DENIED "User.tooManyFailuresTryAgainLater" - user has * failed authentication too often *
      • DATA_CONFLICT "User.twoFactorAuthentication" - The user has not enabled * two-factor authentication.
      • *
      */ AuthenticationResult completeTwoFactorAuthentication(QString oneTimeCode, QString deviceIdentifier, QString deviceDescription, QString authenticationToken = QString()); /** Asynchronous version of @link completeTwoFactorAuthentication @endlink */ AsyncResult* completeTwoFactorAuthenticationAsync(QString oneTimeCode, QString deviceIdentifier, QString deviceDescription, QString authenticationToken = QString()); /** * Revoke an existing long lived authentication token. This can be used to * revoke OAuth tokens or tokens created by calling authenticateLongSession, * and allows a user to effectively log out of Evernote from the perspective * of the application that holds the token. The authentication token that is * passed is immediately revoked and may not be used to call any authenticated * EDAM function. * * @param authenticationToken the authentication token to revoke. * * @throws EDAMUserException
        *
      • DATA_REQUIRED "authenticationToken" - no authentication token provided *
      • BAD_DATA_FORMAT "authenticationToken" - the authentication token is not well formed *
      • INVALID_AUTH "authenticationToken" - the authentication token is invalid *
      • AUTH_EXPIRED "authenticationToken" - the authentication token is expired or * is already revoked. *
      */ void revokeLongSession(QString authenticationToken = QString()); /** Asynchronous version of @link revokeLongSession @endlink */ AsyncResult* revokeLongSessionAsync(QString authenticationToken = QString()); /** * This is used to take an existing authentication token that grants access * to an individual user account (returned from 'authenticate', * 'authenticateLongSession' or an OAuth authorization) and obtain an additional * authentication token that may be used to access business notebooks if the user * is a member of an Evernote Business account. * * The resulting authentication token may be used to make NoteStore API calls * against the business using the NoteStore URL returned in the result. * * @param authenticationToken * The authentication token for the user. This may not be a shared authentication * token (returned by NoteStore.authenticateToSharedNotebook or * NoteStore.authenticateToSharedNote) or a business authentication token. * * @return * The result of the authentication, with the token granting access to the * business in the result's 'authenticationToken' field. The URL that must * be used to access the business account NoteStore will be returned in the * result's 'noteStoreUrl' field. The 'User' field will * not be set in the result. * * @throws EDAMUserException
        *
      • PERMISSION_DENIED "authenticationToken" - the provided authentication token * is a shared or business authentication token.
      • *
      • PERMISSION_DENIED "Business" - the user identified by the provided * authentication token is not currently a member of a business.
      • *
      • PERMISSION_DENIED "Business.status" - the business that the user is a * member of is not currently in an active status.
      • *
      */ AuthenticationResult authenticateToBusiness(QString authenticationToken = QString()); /** Asynchronous version of @link authenticateToBusiness @endlink */ AsyncResult* authenticateToBusinessAsync(QString authenticationToken = QString()); /** * This is used to take an existing authentication token (returned from * 'authenticate') and exchange it for a newer token which will not expire * as soon. This must be invoked before the previous token expires. * * This function is only availabe to Evernote's internal applications. * * @param authenticationToken * The previous authentication token from the authenticate() result. * * @return * The result of the authentication, with the new token in * the result's 'authenticationToken' field. The 'User' field will * not be set in the result. */ AuthenticationResult refreshAuthentication(QString authenticationToken = QString()); /** Asynchronous version of @link refreshAuthentication @endlink */ AsyncResult* refreshAuthenticationAsync(QString authenticationToken = QString()); /** * Returns the User corresponding to the provided authentication token, * or throws an exception if this token is not valid. * The level of detail provided in the returned User structure depends on * the access level granted by the token, so a web service client may receive * fewer fields than an integrated desktop client. */ User getUser(QString authenticationToken = QString()); /** Asynchronous version of @link getUser @endlink */ AsyncResult* getUserAsync(QString authenticationToken = QString()); /** * Asks the UserStore about the publicly available location information for * a particular username. * * @throws EDAMUserException
        *
      • DATA_REQUIRED "username" - username is empty *
      */ PublicUserInfo getPublicUserInfo(QString username); /** Asynchronous version of @link getPublicUserInfo @endlink */ AsyncResult* getPublicUserInfoAsync(QString username); /** * Returns information regarding a user's Premium account corresponding to the * provided authentication token, or throws an exception if this token is not * valid. */ PremiumInfo getPremiumInfo(QString authenticationToken = QString()); /** Asynchronous version of @link getPremiumInfo @endlink */ AsyncResult* getPremiumInfoAsync(QString authenticationToken = QString()); /** * Returns the URL that should be used to talk to the NoteStore for the * account represented by the provided authenticationToken. * This method isn't needed by most clients, who can retrieve the correct * NoteStore URL from the AuthenticationResult returned from the authenticate * or refreshAuthentication calls. This method is typically only needed * to look up the correct URL for a long-lived session token (e.g. for an * OAuth web service). */ QString getNoteStoreUrl(QString authenticationToken = QString()); /** Asynchronous version of @link getNoteStoreUrl @endlink */ AsyncResult* getNoteStoreUrlAsync(QString authenticationToken = QString()); private: QString url_; QString authenticationToken_; }; } Q_DECLARE_METATYPE(QList< qevercloud::Notebook >) Q_DECLARE_METATYPE(QList< qevercloud::Tag >) Q_DECLARE_METATYPE(QList< qevercloud::SavedSearch >) Q_DECLARE_METATYPE(QList< qevercloud::NoteVersionId >) Q_DECLARE_METATYPE(QList< qevercloud::SharedNotebook >) Q_DECLARE_METATYPE(QList< qevercloud::LinkedNotebook >) #endif // QEVERCLOUD_GENERATED_SERVICES_H nixnote2-2.0.2/qevercloud/generated/types.cpp000066400000000000000000006774211315604104400212570ustar00rootroot00000000000000// This file is generated from Evernote Thrift API and is a part of the QEverCloud project #include "types.h" #include "../impl.h" #include "types_impl.h" namespace qevercloud { /** @cond HIDDEN_SYMBOLS */ void writeSyncState(ThriftBinaryBufferWriter& w, const SyncState& s) { w.writeStructBegin("SyncState"); w.writeFieldBegin("currentTime", ThriftFieldType::T_I64, 1); w.writeI64(s.currentTime); w.writeFieldEnd(); w.writeFieldBegin("fullSyncBefore", ThriftFieldType::T_I64, 2); w.writeI64(s.fullSyncBefore); w.writeFieldEnd(); w.writeFieldBegin("updateCount", ThriftFieldType::T_I32, 3); w.writeI32(s.updateCount); w.writeFieldEnd(); if(s.uploaded.isSet()) { w.writeFieldBegin("uploaded", ThriftFieldType::T_I64, 4); w.writeI64(s.uploaded.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readSyncState(ThriftBinaryBufferReader& r, SyncState& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; bool currentTime_isset = false; bool fullSyncBefore_isset = false; bool updateCount_isset = false; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I64) { currentTime_isset = true; qint64 v; r.readI64(v); s.currentTime = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_I64) { fullSyncBefore_isset = true; qint64 v; r.readI64(v); s.fullSyncBefore = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_I32) { updateCount_isset = true; qint32 v; r.readI32(v); s.updateCount = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.uploaded = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); if(!currentTime_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "SyncState.currentTime has no value"); if(!fullSyncBefore_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "SyncState.fullSyncBefore has no value"); if(!updateCount_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "SyncState.updateCount has no value"); } void writeSyncChunk(ThriftBinaryBufferWriter& w, const SyncChunk& s) { w.writeStructBegin("SyncChunk"); w.writeFieldBegin("currentTime", ThriftFieldType::T_I64, 1); w.writeI64(s.currentTime); w.writeFieldEnd(); if(s.chunkHighUSN.isSet()) { w.writeFieldBegin("chunkHighUSN", ThriftFieldType::T_I32, 2); w.writeI32(s.chunkHighUSN.ref()); w.writeFieldEnd(); } w.writeFieldBegin("updateCount", ThriftFieldType::T_I32, 3); w.writeI32(s.updateCount); w.writeFieldEnd(); if(s.notes.isSet()) { w.writeFieldBegin("notes", ThriftFieldType::T_LIST, 4); w.writeListBegin(ThriftFieldType::T_STRUCT, s.notes.ref().length()); Q_FOREACH(const Note& elem, s.notes.ref()) { writeNote(w, elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.notebooks.isSet()) { w.writeFieldBegin("notebooks", ThriftFieldType::T_LIST, 5); w.writeListBegin(ThriftFieldType::T_STRUCT, s.notebooks.ref().length()); Q_FOREACH(const Notebook& elem, s.notebooks.ref()) { writeNotebook(w, elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.tags.isSet()) { w.writeFieldBegin("tags", ThriftFieldType::T_LIST, 6); w.writeListBegin(ThriftFieldType::T_STRUCT, s.tags.ref().length()); Q_FOREACH(const Tag& elem, s.tags.ref()) { writeTag(w, elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.searches.isSet()) { w.writeFieldBegin("searches", ThriftFieldType::T_LIST, 7); w.writeListBegin(ThriftFieldType::T_STRUCT, s.searches.ref().length()); Q_FOREACH(const SavedSearch& elem, s.searches.ref()) { writeSavedSearch(w, elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.resources.isSet()) { w.writeFieldBegin("resources", ThriftFieldType::T_LIST, 8); w.writeListBegin(ThriftFieldType::T_STRUCT, s.resources.ref().length()); Q_FOREACH(const Resource& elem, s.resources.ref()) { writeResource(w, elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.expungedNotes.isSet()) { w.writeFieldBegin("expungedNotes", ThriftFieldType::T_LIST, 9); w.writeListBegin(ThriftFieldType::T_STRING, s.expungedNotes.ref().length()); Q_FOREACH(const Guid& elem, s.expungedNotes.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.expungedNotebooks.isSet()) { w.writeFieldBegin("expungedNotebooks", ThriftFieldType::T_LIST, 10); w.writeListBegin(ThriftFieldType::T_STRING, s.expungedNotebooks.ref().length()); Q_FOREACH(const Guid& elem, s.expungedNotebooks.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.expungedTags.isSet()) { w.writeFieldBegin("expungedTags", ThriftFieldType::T_LIST, 11); w.writeListBegin(ThriftFieldType::T_STRING, s.expungedTags.ref().length()); Q_FOREACH(const Guid& elem, s.expungedTags.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.expungedSearches.isSet()) { w.writeFieldBegin("expungedSearches", ThriftFieldType::T_LIST, 12); w.writeListBegin(ThriftFieldType::T_STRING, s.expungedSearches.ref().length()); Q_FOREACH(const Guid& elem, s.expungedSearches.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.linkedNotebooks.isSet()) { w.writeFieldBegin("linkedNotebooks", ThriftFieldType::T_LIST, 13); w.writeListBegin(ThriftFieldType::T_STRUCT, s.linkedNotebooks.ref().length()); Q_FOREACH(const LinkedNotebook& elem, s.linkedNotebooks.ref()) { writeLinkedNotebook(w, elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.expungedLinkedNotebooks.isSet()) { w.writeFieldBegin("expungedLinkedNotebooks", ThriftFieldType::T_LIST, 14); w.writeListBegin(ThriftFieldType::T_STRING, s.expungedLinkedNotebooks.ref().length()); Q_FOREACH(const Guid& elem, s.expungedLinkedNotebooks.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readSyncChunk(ThriftBinaryBufferReader& r, SyncChunk& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; bool currentTime_isset = false; bool updateCount_isset = false; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I64) { currentTime_isset = true; qint64 v; r.readI64(v); s.currentTime = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.chunkHighUSN = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_I32) { updateCount_isset = true; qint32 v; r.readI32(v); s.updateCount = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_LIST) { QList< Note > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (SyncChunk.notes)"); for(quint32 i = 0; i < size; i++) { Note elem; readNote(r, elem); v.append(elem); } r.readListEnd(); s.notes = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_LIST) { QList< Notebook > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (SyncChunk.notebooks)"); for(quint32 i = 0; i < size; i++) { Notebook elem; readNotebook(r, elem); v.append(elem); } r.readListEnd(); s.notebooks = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_LIST) { QList< Tag > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (SyncChunk.tags)"); for(quint32 i = 0; i < size; i++) { Tag elem; readTag(r, elem); v.append(elem); } r.readListEnd(); s.tags = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_LIST) { QList< SavedSearch > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (SyncChunk.searches)"); for(quint32 i = 0; i < size; i++) { SavedSearch elem; readSavedSearch(r, elem); v.append(elem); } r.readListEnd(); s.searches = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_LIST) { QList< Resource > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (SyncChunk.resources)"); for(quint32 i = 0; i < size; i++) { Resource elem; readResource(r, elem); v.append(elem); } r.readListEnd(); s.resources = v; } else { r.skip(fieldType); } } else if(fieldId == 9) { if(fieldType == ThriftFieldType::T_LIST) { QList< Guid > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (SyncChunk.expungedNotes)"); for(quint32 i = 0; i < size; i++) { Guid elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.expungedNotes = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_LIST) { QList< Guid > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (SyncChunk.expungedNotebooks)"); for(quint32 i = 0; i < size; i++) { Guid elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.expungedNotebooks = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_LIST) { QList< Guid > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (SyncChunk.expungedTags)"); for(quint32 i = 0; i < size; i++) { Guid elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.expungedTags = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_LIST) { QList< Guid > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (SyncChunk.expungedSearches)"); for(quint32 i = 0; i < size; i++) { Guid elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.expungedSearches = v; } else { r.skip(fieldType); } } else if(fieldId == 13) { if(fieldType == ThriftFieldType::T_LIST) { QList< LinkedNotebook > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (SyncChunk.linkedNotebooks)"); for(quint32 i = 0; i < size; i++) { LinkedNotebook elem; readLinkedNotebook(r, elem); v.append(elem); } r.readListEnd(); s.linkedNotebooks = v; } else { r.skip(fieldType); } } else if(fieldId == 14) { if(fieldType == ThriftFieldType::T_LIST) { QList< Guid > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (SyncChunk.expungedLinkedNotebooks)"); for(quint32 i = 0; i < size; i++) { Guid elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.expungedLinkedNotebooks = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); if(!currentTime_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "SyncChunk.currentTime has no value"); if(!updateCount_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "SyncChunk.updateCount has no value"); } void writeSyncChunkFilter(ThriftBinaryBufferWriter& w, const SyncChunkFilter& s) { w.writeStructBegin("SyncChunkFilter"); if(s.includeNotes.isSet()) { w.writeFieldBegin("includeNotes", ThriftFieldType::T_BOOL, 1); w.writeBool(s.includeNotes.ref()); w.writeFieldEnd(); } if(s.includeNoteResources.isSet()) { w.writeFieldBegin("includeNoteResources", ThriftFieldType::T_BOOL, 2); w.writeBool(s.includeNoteResources.ref()); w.writeFieldEnd(); } if(s.includeNoteAttributes.isSet()) { w.writeFieldBegin("includeNoteAttributes", ThriftFieldType::T_BOOL, 3); w.writeBool(s.includeNoteAttributes.ref()); w.writeFieldEnd(); } if(s.includeNotebooks.isSet()) { w.writeFieldBegin("includeNotebooks", ThriftFieldType::T_BOOL, 4); w.writeBool(s.includeNotebooks.ref()); w.writeFieldEnd(); } if(s.includeTags.isSet()) { w.writeFieldBegin("includeTags", ThriftFieldType::T_BOOL, 5); w.writeBool(s.includeTags.ref()); w.writeFieldEnd(); } if(s.includeSearches.isSet()) { w.writeFieldBegin("includeSearches", ThriftFieldType::T_BOOL, 6); w.writeBool(s.includeSearches.ref()); w.writeFieldEnd(); } if(s.includeResources.isSet()) { w.writeFieldBegin("includeResources", ThriftFieldType::T_BOOL, 7); w.writeBool(s.includeResources.ref()); w.writeFieldEnd(); } if(s.includeLinkedNotebooks.isSet()) { w.writeFieldBegin("includeLinkedNotebooks", ThriftFieldType::T_BOOL, 8); w.writeBool(s.includeLinkedNotebooks.ref()); w.writeFieldEnd(); } if(s.includeExpunged.isSet()) { w.writeFieldBegin("includeExpunged", ThriftFieldType::T_BOOL, 9); w.writeBool(s.includeExpunged.ref()); w.writeFieldEnd(); } if(s.includeNoteApplicationDataFullMap.isSet()) { w.writeFieldBegin("includeNoteApplicationDataFullMap", ThriftFieldType::T_BOOL, 10); w.writeBool(s.includeNoteApplicationDataFullMap.ref()); w.writeFieldEnd(); } if(s.includeResourceApplicationDataFullMap.isSet()) { w.writeFieldBegin("includeResourceApplicationDataFullMap", ThriftFieldType::T_BOOL, 12); w.writeBool(s.includeResourceApplicationDataFullMap.ref()); w.writeFieldEnd(); } if(s.includeNoteResourceApplicationDataFullMap.isSet()) { w.writeFieldBegin("includeNoteResourceApplicationDataFullMap", ThriftFieldType::T_BOOL, 13); w.writeBool(s.includeNoteResourceApplicationDataFullMap.ref()); w.writeFieldEnd(); } if(s.requireNoteContentClass.isSet()) { w.writeFieldBegin("requireNoteContentClass", ThriftFieldType::T_STRING, 11); w.writeString(s.requireNoteContentClass.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readSyncChunkFilter(ThriftBinaryBufferReader& r, SyncChunkFilter& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeNotes = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeNoteResources = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeNoteAttributes = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeNotebooks = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeTags = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeSearches = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeResources = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeLinkedNotebooks = v; } else { r.skip(fieldType); } } else if(fieldId == 9) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeExpunged = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeNoteApplicationDataFullMap = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeResourceApplicationDataFullMap = v; } else { r.skip(fieldType); } } else if(fieldId == 13) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeNoteResourceApplicationDataFullMap = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.requireNoteContentClass = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeNoteFilter(ThriftBinaryBufferWriter& w, const NoteFilter& s) { w.writeStructBegin("NoteFilter"); if(s.order.isSet()) { w.writeFieldBegin("order", ThriftFieldType::T_I32, 1); w.writeI32(s.order.ref()); w.writeFieldEnd(); } if(s.ascending.isSet()) { w.writeFieldBegin("ascending", ThriftFieldType::T_BOOL, 2); w.writeBool(s.ascending.ref()); w.writeFieldEnd(); } if(s.words.isSet()) { w.writeFieldBegin("words", ThriftFieldType::T_STRING, 3); w.writeString(s.words.ref()); w.writeFieldEnd(); } if(s.notebookGuid.isSet()) { w.writeFieldBegin("notebookGuid", ThriftFieldType::T_STRING, 4); w.writeString(s.notebookGuid.ref()); w.writeFieldEnd(); } if(s.tagGuids.isSet()) { w.writeFieldBegin("tagGuids", ThriftFieldType::T_LIST, 5); w.writeListBegin(ThriftFieldType::T_STRING, s.tagGuids.ref().length()); Q_FOREACH(const Guid& elem, s.tagGuids.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.timeZone.isSet()) { w.writeFieldBegin("timeZone", ThriftFieldType::T_STRING, 6); w.writeString(s.timeZone.ref()); w.writeFieldEnd(); } if(s.inactive.isSet()) { w.writeFieldBegin("inactive", ThriftFieldType::T_BOOL, 7); w.writeBool(s.inactive.ref()); w.writeFieldEnd(); } if(s.emphasized.isSet()) { w.writeFieldBegin("emphasized", ThriftFieldType::T_STRING, 8); w.writeString(s.emphasized.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readNoteFilter(ThriftBinaryBufferReader& r, NoteFilter& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.order = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.ascending = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.words = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_STRING) { Guid v; r.readString(v); s.notebookGuid = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_LIST) { QList< Guid > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (NoteFilter.tagGuids)"); for(quint32 i = 0; i < size; i++) { Guid elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.tagGuids = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.timeZone = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.inactive = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.emphasized = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeNoteList(ThriftBinaryBufferWriter& w, const NoteList& s) { w.writeStructBegin("NoteList"); w.writeFieldBegin("startIndex", ThriftFieldType::T_I32, 1); w.writeI32(s.startIndex); w.writeFieldEnd(); w.writeFieldBegin("totalNotes", ThriftFieldType::T_I32, 2); w.writeI32(s.totalNotes); w.writeFieldEnd(); w.writeFieldBegin("notes", ThriftFieldType::T_LIST, 3); w.writeListBegin(ThriftFieldType::T_STRUCT, s.notes.length()); Q_FOREACH(const Note& elem, s.notes) { writeNote(w, elem); } w.writeListEnd(); w.writeFieldEnd(); if(s.stoppedWords.isSet()) { w.writeFieldBegin("stoppedWords", ThriftFieldType::T_LIST, 4); w.writeListBegin(ThriftFieldType::T_STRING, s.stoppedWords.ref().length()); Q_FOREACH(const QString& elem, s.stoppedWords.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.searchedWords.isSet()) { w.writeFieldBegin("searchedWords", ThriftFieldType::T_LIST, 5); w.writeListBegin(ThriftFieldType::T_STRING, s.searchedWords.ref().length()); Q_FOREACH(const QString& elem, s.searchedWords.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.updateCount.isSet()) { w.writeFieldBegin("updateCount", ThriftFieldType::T_I32, 6); w.writeI32(s.updateCount.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readNoteList(ThriftBinaryBufferReader& r, NoteList& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; bool startIndex_isset = false; bool totalNotes_isset = false; bool notes_isset = false; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I32) { startIndex_isset = true; qint32 v; r.readI32(v); s.startIndex = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_I32) { totalNotes_isset = true; qint32 v; r.readI32(v); s.totalNotes = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_LIST) { notes_isset = true; QList< Note > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (NoteList.notes)"); for(quint32 i = 0; i < size; i++) { Note elem; readNote(r, elem); v.append(elem); } r.readListEnd(); s.notes = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_LIST) { QStringList v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (NoteList.stoppedWords)"); for(quint32 i = 0; i < size; i++) { QString elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.stoppedWords = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_LIST) { QStringList v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (NoteList.searchedWords)"); for(quint32 i = 0; i < size; i++) { QString elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.searchedWords = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.updateCount = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); if(!startIndex_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "NoteList.startIndex has no value"); if(!totalNotes_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "NoteList.totalNotes has no value"); if(!notes_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "NoteList.notes has no value"); } void writeNoteMetadata(ThriftBinaryBufferWriter& w, const NoteMetadata& s) { w.writeStructBegin("NoteMetadata"); w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 1); w.writeString(s.guid); w.writeFieldEnd(); if(s.title.isSet()) { w.writeFieldBegin("title", ThriftFieldType::T_STRING, 2); w.writeString(s.title.ref()); w.writeFieldEnd(); } if(s.contentLength.isSet()) { w.writeFieldBegin("contentLength", ThriftFieldType::T_I32, 5); w.writeI32(s.contentLength.ref()); w.writeFieldEnd(); } if(s.created.isSet()) { w.writeFieldBegin("created", ThriftFieldType::T_I64, 6); w.writeI64(s.created.ref()); w.writeFieldEnd(); } if(s.updated.isSet()) { w.writeFieldBegin("updated", ThriftFieldType::T_I64, 7); w.writeI64(s.updated.ref()); w.writeFieldEnd(); } if(s.deleted.isSet()) { w.writeFieldBegin("deleted", ThriftFieldType::T_I64, 8); w.writeI64(s.deleted.ref()); w.writeFieldEnd(); } if(s.updateSequenceNum.isSet()) { w.writeFieldBegin("updateSequenceNum", ThriftFieldType::T_I32, 10); w.writeI32(s.updateSequenceNum.ref()); w.writeFieldEnd(); } if(s.notebookGuid.isSet()) { w.writeFieldBegin("notebookGuid", ThriftFieldType::T_STRING, 11); w.writeString(s.notebookGuid.ref()); w.writeFieldEnd(); } if(s.tagGuids.isSet()) { w.writeFieldBegin("tagGuids", ThriftFieldType::T_LIST, 12); w.writeListBegin(ThriftFieldType::T_STRING, s.tagGuids.ref().length()); Q_FOREACH(const Guid& elem, s.tagGuids.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.attributes.isSet()) { w.writeFieldBegin("attributes", ThriftFieldType::T_STRUCT, 14); writeNoteAttributes(w, s.attributes.ref()); w.writeFieldEnd(); } if(s.largestResourceMime.isSet()) { w.writeFieldBegin("largestResourceMime", ThriftFieldType::T_STRING, 20); w.writeString(s.largestResourceMime.ref()); w.writeFieldEnd(); } if(s.largestResourceSize.isSet()) { w.writeFieldBegin("largestResourceSize", ThriftFieldType::T_I32, 21); w.writeI32(s.largestResourceSize.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readNoteMetadata(ThriftBinaryBufferReader& r, NoteMetadata& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; bool guid_isset = false; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { guid_isset = true; Guid v; r.readString(v); s.guid = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.title = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.contentLength = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.created = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.updated = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.deleted = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.updateSequenceNum = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.notebookGuid = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_LIST) { QList< Guid > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (NoteMetadata.tagGuids)"); for(quint32 i = 0; i < size; i++) { Guid elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.tagGuids = v; } else { r.skip(fieldType); } } else if(fieldId == 14) { if(fieldType == ThriftFieldType::T_STRUCT) { NoteAttributes v; readNoteAttributes(r, v); s.attributes = v; } else { r.skip(fieldType); } } else if(fieldId == 20) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.largestResourceMime = v; } else { r.skip(fieldType); } } else if(fieldId == 21) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.largestResourceSize = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); if(!guid_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "NoteMetadata.guid has no value"); } void writeNotesMetadataList(ThriftBinaryBufferWriter& w, const NotesMetadataList& s) { w.writeStructBegin("NotesMetadataList"); w.writeFieldBegin("startIndex", ThriftFieldType::T_I32, 1); w.writeI32(s.startIndex); w.writeFieldEnd(); w.writeFieldBegin("totalNotes", ThriftFieldType::T_I32, 2); w.writeI32(s.totalNotes); w.writeFieldEnd(); w.writeFieldBegin("notes", ThriftFieldType::T_LIST, 3); w.writeListBegin(ThriftFieldType::T_STRUCT, s.notes.length()); Q_FOREACH(const NoteMetadata& elem, s.notes) { writeNoteMetadata(w, elem); } w.writeListEnd(); w.writeFieldEnd(); if(s.stoppedWords.isSet()) { w.writeFieldBegin("stoppedWords", ThriftFieldType::T_LIST, 4); w.writeListBegin(ThriftFieldType::T_STRING, s.stoppedWords.ref().length()); Q_FOREACH(const QString& elem, s.stoppedWords.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.searchedWords.isSet()) { w.writeFieldBegin("searchedWords", ThriftFieldType::T_LIST, 5); w.writeListBegin(ThriftFieldType::T_STRING, s.searchedWords.ref().length()); Q_FOREACH(const QString& elem, s.searchedWords.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.updateCount.isSet()) { w.writeFieldBegin("updateCount", ThriftFieldType::T_I32, 6); w.writeI32(s.updateCount.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readNotesMetadataList(ThriftBinaryBufferReader& r, NotesMetadataList& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; bool startIndex_isset = false; bool totalNotes_isset = false; bool notes_isset = false; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I32) { startIndex_isset = true; qint32 v; r.readI32(v); s.startIndex = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_I32) { totalNotes_isset = true; qint32 v; r.readI32(v); s.totalNotes = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_LIST) { notes_isset = true; QList< NoteMetadata > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (NotesMetadataList.notes)"); for(quint32 i = 0; i < size; i++) { NoteMetadata elem; readNoteMetadata(r, elem); v.append(elem); } r.readListEnd(); s.notes = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_LIST) { QStringList v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (NotesMetadataList.stoppedWords)"); for(quint32 i = 0; i < size; i++) { QString elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.stoppedWords = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_LIST) { QStringList v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (NotesMetadataList.searchedWords)"); for(quint32 i = 0; i < size; i++) { QString elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.searchedWords = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.updateCount = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); if(!startIndex_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "NotesMetadataList.startIndex has no value"); if(!totalNotes_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "NotesMetadataList.totalNotes has no value"); if(!notes_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "NotesMetadataList.notes has no value"); } void writeNotesMetadataResultSpec(ThriftBinaryBufferWriter& w, const NotesMetadataResultSpec& s) { w.writeStructBegin("NotesMetadataResultSpec"); if(s.includeTitle.isSet()) { w.writeFieldBegin("includeTitle", ThriftFieldType::T_BOOL, 2); w.writeBool(s.includeTitle.ref()); w.writeFieldEnd(); } if(s.includeContentLength.isSet()) { w.writeFieldBegin("includeContentLength", ThriftFieldType::T_BOOL, 5); w.writeBool(s.includeContentLength.ref()); w.writeFieldEnd(); } if(s.includeCreated.isSet()) { w.writeFieldBegin("includeCreated", ThriftFieldType::T_BOOL, 6); w.writeBool(s.includeCreated.ref()); w.writeFieldEnd(); } if(s.includeUpdated.isSet()) { w.writeFieldBegin("includeUpdated", ThriftFieldType::T_BOOL, 7); w.writeBool(s.includeUpdated.ref()); w.writeFieldEnd(); } if(s.includeDeleted.isSet()) { w.writeFieldBegin("includeDeleted", ThriftFieldType::T_BOOL, 8); w.writeBool(s.includeDeleted.ref()); w.writeFieldEnd(); } if(s.includeUpdateSequenceNum.isSet()) { w.writeFieldBegin("includeUpdateSequenceNum", ThriftFieldType::T_BOOL, 10); w.writeBool(s.includeUpdateSequenceNum.ref()); w.writeFieldEnd(); } if(s.includeNotebookGuid.isSet()) { w.writeFieldBegin("includeNotebookGuid", ThriftFieldType::T_BOOL, 11); w.writeBool(s.includeNotebookGuid.ref()); w.writeFieldEnd(); } if(s.includeTagGuids.isSet()) { w.writeFieldBegin("includeTagGuids", ThriftFieldType::T_BOOL, 12); w.writeBool(s.includeTagGuids.ref()); w.writeFieldEnd(); } if(s.includeAttributes.isSet()) { w.writeFieldBegin("includeAttributes", ThriftFieldType::T_BOOL, 14); w.writeBool(s.includeAttributes.ref()); w.writeFieldEnd(); } if(s.includeLargestResourceMime.isSet()) { w.writeFieldBegin("includeLargestResourceMime", ThriftFieldType::T_BOOL, 20); w.writeBool(s.includeLargestResourceMime.ref()); w.writeFieldEnd(); } if(s.includeLargestResourceSize.isSet()) { w.writeFieldBegin("includeLargestResourceSize", ThriftFieldType::T_BOOL, 21); w.writeBool(s.includeLargestResourceSize.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readNotesMetadataResultSpec(ThriftBinaryBufferReader& r, NotesMetadataResultSpec& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 2) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeTitle = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeContentLength = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeCreated = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeUpdated = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeDeleted = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeUpdateSequenceNum = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeNotebookGuid = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeTagGuids = v; } else { r.skip(fieldType); } } else if(fieldId == 14) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeAttributes = v; } else { r.skip(fieldType); } } else if(fieldId == 20) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeLargestResourceMime = v; } else { r.skip(fieldType); } } else if(fieldId == 21) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeLargestResourceSize = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeNoteCollectionCounts(ThriftBinaryBufferWriter& w, const NoteCollectionCounts& s) { w.writeStructBegin("NoteCollectionCounts"); if(s.notebookCounts.isSet()) { w.writeFieldBegin("notebookCounts", ThriftFieldType::T_MAP, 1); w.writeMapBegin(ThriftFieldType::T_STRING, ThriftFieldType::T_I32, s.notebookCounts.ref().keys().length()); Q_FOREACH(const Guid& elem, s.notebookCounts.ref().keys()) { w.writeString(elem); w.writeI32(s.notebookCounts.ref().value(elem)); } w.writeMapEnd(); w.writeFieldEnd(); } if(s.tagCounts.isSet()) { w.writeFieldBegin("tagCounts", ThriftFieldType::T_MAP, 2); w.writeMapBegin(ThriftFieldType::T_STRING, ThriftFieldType::T_I32, s.tagCounts.ref().keys().length()); Q_FOREACH(const Guid& elem, s.tagCounts.ref().keys()) { w.writeString(elem); w.writeI32(s.tagCounts.ref().value(elem)); } w.writeMapEnd(); w.writeFieldEnd(); } if(s.trashCount.isSet()) { w.writeFieldBegin("trashCount", ThriftFieldType::T_I32, 3); w.writeI32(s.trashCount.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readNoteCollectionCounts(ThriftBinaryBufferReader& r, NoteCollectionCounts& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_MAP) { QMap< Guid, qint32 > v; quint32 size; ThriftFieldType::type keyType; ThriftFieldType::type elemType; r.readMapBegin(keyType, elemType, size); if(keyType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect map key type (NoteCollectionCounts.notebookCounts)"); if(elemType != ThriftFieldType::T_I32) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect map value type (NoteCollectionCounts.notebookCounts)"); for(quint32 i = 0; i < size; i++) { Guid key; r.readString(key); qint32 value; r.readI32(value); v[key] = value; } r.readMapEnd(); s.notebookCounts = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_MAP) { QMap< Guid, qint32 > v; quint32 size; ThriftFieldType::type keyType; ThriftFieldType::type elemType; r.readMapBegin(keyType, elemType, size); if(keyType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect map key type (NoteCollectionCounts.tagCounts)"); if(elemType != ThriftFieldType::T_I32) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect map value type (NoteCollectionCounts.tagCounts)"); for(quint32 i = 0; i < size; i++) { Guid key; r.readString(key); qint32 value; r.readI32(value); v[key] = value; } r.readMapEnd(); s.tagCounts = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.trashCount = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeNoteEmailParameters(ThriftBinaryBufferWriter& w, const NoteEmailParameters& s) { w.writeStructBegin("NoteEmailParameters"); if(s.guid.isSet()) { w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 1); w.writeString(s.guid.ref()); w.writeFieldEnd(); } if(s.note.isSet()) { w.writeFieldBegin("note", ThriftFieldType::T_STRUCT, 2); writeNote(w, s.note.ref()); w.writeFieldEnd(); } if(s.toAddresses.isSet()) { w.writeFieldBegin("toAddresses", ThriftFieldType::T_LIST, 3); w.writeListBegin(ThriftFieldType::T_STRING, s.toAddresses.ref().length()); Q_FOREACH(const QString& elem, s.toAddresses.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.ccAddresses.isSet()) { w.writeFieldBegin("ccAddresses", ThriftFieldType::T_LIST, 4); w.writeListBegin(ThriftFieldType::T_STRING, s.ccAddresses.ref().length()); Q_FOREACH(const QString& elem, s.ccAddresses.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.subject.isSet()) { w.writeFieldBegin("subject", ThriftFieldType::T_STRING, 5); w.writeString(s.subject.ref()); w.writeFieldEnd(); } if(s.message.isSet()) { w.writeFieldBegin("message", ThriftFieldType::T_STRING, 6); w.writeString(s.message.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readNoteEmailParameters(ThriftBinaryBufferReader& r, NoteEmailParameters& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.guid = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { Note v; readNote(r, v); s.note = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_LIST) { QStringList v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (NoteEmailParameters.toAddresses)"); for(quint32 i = 0; i < size; i++) { QString elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.toAddresses = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_LIST) { QStringList v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (NoteEmailParameters.ccAddresses)"); for(quint32 i = 0; i < size; i++) { QString elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.ccAddresses = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.subject = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.message = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeNoteVersionId(ThriftBinaryBufferWriter& w, const NoteVersionId& s) { w.writeStructBegin("NoteVersionId"); w.writeFieldBegin("updateSequenceNum", ThriftFieldType::T_I32, 1); w.writeI32(s.updateSequenceNum); w.writeFieldEnd(); w.writeFieldBegin("updated", ThriftFieldType::T_I64, 2); w.writeI64(s.updated); w.writeFieldEnd(); w.writeFieldBegin("saved", ThriftFieldType::T_I64, 3); w.writeI64(s.saved); w.writeFieldEnd(); w.writeFieldBegin("title", ThriftFieldType::T_STRING, 4); w.writeString(s.title); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); } void readNoteVersionId(ThriftBinaryBufferReader& r, NoteVersionId& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; bool updateSequenceNum_isset = false; bool updated_isset = false; bool saved_isset = false; bool title_isset = false; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I32) { updateSequenceNum_isset = true; qint32 v; r.readI32(v); s.updateSequenceNum = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_I64) { updated_isset = true; qint64 v; r.readI64(v); s.updated = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_I64) { saved_isset = true; qint64 v; r.readI64(v); s.saved = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_STRING) { title_isset = true; QString v; r.readString(v); s.title = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); if(!updateSequenceNum_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "NoteVersionId.updateSequenceNum has no value"); if(!updated_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "NoteVersionId.updated has no value"); if(!saved_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "NoteVersionId.saved has no value"); if(!title_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "NoteVersionId.title has no value"); } void writeClientUsageMetrics(ThriftBinaryBufferWriter& w, const ClientUsageMetrics& s) { w.writeStructBegin("ClientUsageMetrics"); if(s.sessions.isSet()) { w.writeFieldBegin("sessions", ThriftFieldType::T_I32, 1); w.writeI32(s.sessions.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readClientUsageMetrics(ThriftBinaryBufferReader& r, ClientUsageMetrics& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.sessions = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeRelatedQuery(ThriftBinaryBufferWriter& w, const RelatedQuery& s) { w.writeStructBegin("RelatedQuery"); if(s.noteGuid.isSet()) { w.writeFieldBegin("noteGuid", ThriftFieldType::T_STRING, 1); w.writeString(s.noteGuid.ref()); w.writeFieldEnd(); } if(s.plainText.isSet()) { w.writeFieldBegin("plainText", ThriftFieldType::T_STRING, 2); w.writeString(s.plainText.ref()); w.writeFieldEnd(); } if(s.filter.isSet()) { w.writeFieldBegin("filter", ThriftFieldType::T_STRUCT, 3); writeNoteFilter(w, s.filter.ref()); w.writeFieldEnd(); } if(s.referenceUri.isSet()) { w.writeFieldBegin("referenceUri", ThriftFieldType::T_STRING, 4); w.writeString(s.referenceUri.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readRelatedQuery(ThriftBinaryBufferReader& r, RelatedQuery& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.noteGuid = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.plainText = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { NoteFilter v; readNoteFilter(r, v); s.filter = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.referenceUri = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeRelatedResult(ThriftBinaryBufferWriter& w, const RelatedResult& s) { w.writeStructBegin("RelatedResult"); if(s.notes.isSet()) { w.writeFieldBegin("notes", ThriftFieldType::T_LIST, 1); w.writeListBegin(ThriftFieldType::T_STRUCT, s.notes.ref().length()); Q_FOREACH(const Note& elem, s.notes.ref()) { writeNote(w, elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.notebooks.isSet()) { w.writeFieldBegin("notebooks", ThriftFieldType::T_LIST, 2); w.writeListBegin(ThriftFieldType::T_STRUCT, s.notebooks.ref().length()); Q_FOREACH(const Notebook& elem, s.notebooks.ref()) { writeNotebook(w, elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.tags.isSet()) { w.writeFieldBegin("tags", ThriftFieldType::T_LIST, 3); w.writeListBegin(ThriftFieldType::T_STRUCT, s.tags.ref().length()); Q_FOREACH(const Tag& elem, s.tags.ref()) { writeTag(w, elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.containingNotebooks.isSet()) { w.writeFieldBegin("containingNotebooks", ThriftFieldType::T_LIST, 4); w.writeListBegin(ThriftFieldType::T_STRUCT, s.containingNotebooks.ref().length()); Q_FOREACH(const NotebookDescriptor& elem, s.containingNotebooks.ref()) { writeNotebookDescriptor(w, elem); } w.writeListEnd(); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readRelatedResult(ThriftBinaryBufferReader& r, RelatedResult& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_LIST) { QList< Note > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (RelatedResult.notes)"); for(quint32 i = 0; i < size; i++) { Note elem; readNote(r, elem); v.append(elem); } r.readListEnd(); s.notes = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_LIST) { QList< Notebook > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (RelatedResult.notebooks)"); for(quint32 i = 0; i < size; i++) { Notebook elem; readNotebook(r, elem); v.append(elem); } r.readListEnd(); s.notebooks = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_LIST) { QList< Tag > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (RelatedResult.tags)"); for(quint32 i = 0; i < size; i++) { Tag elem; readTag(r, elem); v.append(elem); } r.readListEnd(); s.tags = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_LIST) { QList< NotebookDescriptor > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (RelatedResult.containingNotebooks)"); for(quint32 i = 0; i < size; i++) { NotebookDescriptor elem; readNotebookDescriptor(r, elem); v.append(elem); } r.readListEnd(); s.containingNotebooks = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeRelatedResultSpec(ThriftBinaryBufferWriter& w, const RelatedResultSpec& s) { w.writeStructBegin("RelatedResultSpec"); if(s.maxNotes.isSet()) { w.writeFieldBegin("maxNotes", ThriftFieldType::T_I32, 1); w.writeI32(s.maxNotes.ref()); w.writeFieldEnd(); } if(s.maxNotebooks.isSet()) { w.writeFieldBegin("maxNotebooks", ThriftFieldType::T_I32, 2); w.writeI32(s.maxNotebooks.ref()); w.writeFieldEnd(); } if(s.maxTags.isSet()) { w.writeFieldBegin("maxTags", ThriftFieldType::T_I32, 3); w.writeI32(s.maxTags.ref()); w.writeFieldEnd(); } if(s.writableNotebooksOnly.isSet()) { w.writeFieldBegin("writableNotebooksOnly", ThriftFieldType::T_BOOL, 4); w.writeBool(s.writableNotebooksOnly.ref()); w.writeFieldEnd(); } if(s.includeContainingNotebooks.isSet()) { w.writeFieldBegin("includeContainingNotebooks", ThriftFieldType::T_BOOL, 5); w.writeBool(s.includeContainingNotebooks.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readRelatedResultSpec(ThriftBinaryBufferReader& r, RelatedResultSpec& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.maxNotes = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.maxNotebooks = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.maxTags = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.writableNotebooksOnly = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeContainingNotebooks = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeData(ThriftBinaryBufferWriter& w, const Data& s) { w.writeStructBegin("Data"); if(s.bodyHash.isSet()) { w.writeFieldBegin("bodyHash", ThriftFieldType::T_STRING, 1); w.writeBinary(s.bodyHash.ref()); w.writeFieldEnd(); } if(s.size.isSet()) { w.writeFieldBegin("size", ThriftFieldType::T_I32, 2); w.writeI32(s.size.ref()); w.writeFieldEnd(); } if(s.body.isSet()) { w.writeFieldBegin("body", ThriftFieldType::T_STRING, 3); w.writeBinary(s.body.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readData(ThriftBinaryBufferReader& r, Data& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { QByteArray v; r.readBinary(v); s.bodyHash = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.size = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRING) { QByteArray v; r.readBinary(v); s.body = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeUserAttributes(ThriftBinaryBufferWriter& w, const UserAttributes& s) { w.writeStructBegin("UserAttributes"); if(s.defaultLocationName.isSet()) { w.writeFieldBegin("defaultLocationName", ThriftFieldType::T_STRING, 1); w.writeString(s.defaultLocationName.ref()); w.writeFieldEnd(); } if(s.defaultLatitude.isSet()) { w.writeFieldBegin("defaultLatitude", ThriftFieldType::T_DOUBLE, 2); w.writeDouble(s.defaultLatitude.ref()); w.writeFieldEnd(); } if(s.defaultLongitude.isSet()) { w.writeFieldBegin("defaultLongitude", ThriftFieldType::T_DOUBLE, 3); w.writeDouble(s.defaultLongitude.ref()); w.writeFieldEnd(); } if(s.preactivation.isSet()) { w.writeFieldBegin("preactivation", ThriftFieldType::T_BOOL, 4); w.writeBool(s.preactivation.ref()); w.writeFieldEnd(); } if(s.viewedPromotions.isSet()) { w.writeFieldBegin("viewedPromotions", ThriftFieldType::T_LIST, 5); w.writeListBegin(ThriftFieldType::T_STRING, s.viewedPromotions.ref().length()); Q_FOREACH(const QString& elem, s.viewedPromotions.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.incomingEmailAddress.isSet()) { w.writeFieldBegin("incomingEmailAddress", ThriftFieldType::T_STRING, 6); w.writeString(s.incomingEmailAddress.ref()); w.writeFieldEnd(); } if(s.recentMailedAddresses.isSet()) { w.writeFieldBegin("recentMailedAddresses", ThriftFieldType::T_LIST, 7); w.writeListBegin(ThriftFieldType::T_STRING, s.recentMailedAddresses.ref().length()); Q_FOREACH(const QString& elem, s.recentMailedAddresses.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.comments.isSet()) { w.writeFieldBegin("comments", ThriftFieldType::T_STRING, 9); w.writeString(s.comments.ref()); w.writeFieldEnd(); } if(s.dateAgreedToTermsOfService.isSet()) { w.writeFieldBegin("dateAgreedToTermsOfService", ThriftFieldType::T_I64, 11); w.writeI64(s.dateAgreedToTermsOfService.ref()); w.writeFieldEnd(); } if(s.maxReferrals.isSet()) { w.writeFieldBegin("maxReferrals", ThriftFieldType::T_I32, 12); w.writeI32(s.maxReferrals.ref()); w.writeFieldEnd(); } if(s.referralCount.isSet()) { w.writeFieldBegin("referralCount", ThriftFieldType::T_I32, 13); w.writeI32(s.referralCount.ref()); w.writeFieldEnd(); } if(s.refererCode.isSet()) { w.writeFieldBegin("refererCode", ThriftFieldType::T_STRING, 14); w.writeString(s.refererCode.ref()); w.writeFieldEnd(); } if(s.sentEmailDate.isSet()) { w.writeFieldBegin("sentEmailDate", ThriftFieldType::T_I64, 15); w.writeI64(s.sentEmailDate.ref()); w.writeFieldEnd(); } if(s.sentEmailCount.isSet()) { w.writeFieldBegin("sentEmailCount", ThriftFieldType::T_I32, 16); w.writeI32(s.sentEmailCount.ref()); w.writeFieldEnd(); } if(s.dailyEmailLimit.isSet()) { w.writeFieldBegin("dailyEmailLimit", ThriftFieldType::T_I32, 17); w.writeI32(s.dailyEmailLimit.ref()); w.writeFieldEnd(); } if(s.emailOptOutDate.isSet()) { w.writeFieldBegin("emailOptOutDate", ThriftFieldType::T_I64, 18); w.writeI64(s.emailOptOutDate.ref()); w.writeFieldEnd(); } if(s.partnerEmailOptInDate.isSet()) { w.writeFieldBegin("partnerEmailOptInDate", ThriftFieldType::T_I64, 19); w.writeI64(s.partnerEmailOptInDate.ref()); w.writeFieldEnd(); } if(s.preferredLanguage.isSet()) { w.writeFieldBegin("preferredLanguage", ThriftFieldType::T_STRING, 20); w.writeString(s.preferredLanguage.ref()); w.writeFieldEnd(); } if(s.preferredCountry.isSet()) { w.writeFieldBegin("preferredCountry", ThriftFieldType::T_STRING, 21); w.writeString(s.preferredCountry.ref()); w.writeFieldEnd(); } if(s.clipFullPage.isSet()) { w.writeFieldBegin("clipFullPage", ThriftFieldType::T_BOOL, 22); w.writeBool(s.clipFullPage.ref()); w.writeFieldEnd(); } if(s.twitterUserName.isSet()) { w.writeFieldBegin("twitterUserName", ThriftFieldType::T_STRING, 23); w.writeString(s.twitterUserName.ref()); w.writeFieldEnd(); } if(s.twitterId.isSet()) { w.writeFieldBegin("twitterId", ThriftFieldType::T_STRING, 24); w.writeString(s.twitterId.ref()); w.writeFieldEnd(); } if(s.groupName.isSet()) { w.writeFieldBegin("groupName", ThriftFieldType::T_STRING, 25); w.writeString(s.groupName.ref()); w.writeFieldEnd(); } if(s.recognitionLanguage.isSet()) { w.writeFieldBegin("recognitionLanguage", ThriftFieldType::T_STRING, 26); w.writeString(s.recognitionLanguage.ref()); w.writeFieldEnd(); } if(s.referralProof.isSet()) { w.writeFieldBegin("referralProof", ThriftFieldType::T_STRING, 28); w.writeString(s.referralProof.ref()); w.writeFieldEnd(); } if(s.educationalDiscount.isSet()) { w.writeFieldBegin("educationalDiscount", ThriftFieldType::T_BOOL, 29); w.writeBool(s.educationalDiscount.ref()); w.writeFieldEnd(); } if(s.businessAddress.isSet()) { w.writeFieldBegin("businessAddress", ThriftFieldType::T_STRING, 30); w.writeString(s.businessAddress.ref()); w.writeFieldEnd(); } if(s.hideSponsorBilling.isSet()) { w.writeFieldBegin("hideSponsorBilling", ThriftFieldType::T_BOOL, 31); w.writeBool(s.hideSponsorBilling.ref()); w.writeFieldEnd(); } if(s.taxExempt.isSet()) { w.writeFieldBegin("taxExempt", ThriftFieldType::T_BOOL, 32); w.writeBool(s.taxExempt.ref()); w.writeFieldEnd(); } if(s.useEmailAutoFiling.isSet()) { w.writeFieldBegin("useEmailAutoFiling", ThriftFieldType::T_BOOL, 33); w.writeBool(s.useEmailAutoFiling.ref()); w.writeFieldEnd(); } if(s.reminderEmailConfig.isSet()) { w.writeFieldBegin("reminderEmailConfig", ThriftFieldType::T_I32, 34); w.writeI32(static_cast(s.reminderEmailConfig.ref())); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readUserAttributes(ThriftBinaryBufferReader& r, UserAttributes& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.defaultLocationName = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_DOUBLE) { double v; r.readDouble(v); s.defaultLatitude = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_DOUBLE) { double v; r.readDouble(v); s.defaultLongitude = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.preactivation = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_LIST) { QStringList v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (UserAttributes.viewedPromotions)"); for(quint32 i = 0; i < size; i++) { QString elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.viewedPromotions = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.incomingEmailAddress = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_LIST) { QStringList v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (UserAttributes.recentMailedAddresses)"); for(quint32 i = 0; i < size; i++) { QString elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.recentMailedAddresses = v; } else { r.skip(fieldType); } } else if(fieldId == 9) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.comments = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.dateAgreedToTermsOfService = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.maxReferrals = v; } else { r.skip(fieldType); } } else if(fieldId == 13) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.referralCount = v; } else { r.skip(fieldType); } } else if(fieldId == 14) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.refererCode = v; } else { r.skip(fieldType); } } else if(fieldId == 15) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.sentEmailDate = v; } else { r.skip(fieldType); } } else if(fieldId == 16) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.sentEmailCount = v; } else { r.skip(fieldType); } } else if(fieldId == 17) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.dailyEmailLimit = v; } else { r.skip(fieldType); } } else if(fieldId == 18) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.emailOptOutDate = v; } else { r.skip(fieldType); } } else if(fieldId == 19) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.partnerEmailOptInDate = v; } else { r.skip(fieldType); } } else if(fieldId == 20) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.preferredLanguage = v; } else { r.skip(fieldType); } } else if(fieldId == 21) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.preferredCountry = v; } else { r.skip(fieldType); } } else if(fieldId == 22) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.clipFullPage = v; } else { r.skip(fieldType); } } else if(fieldId == 23) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.twitterUserName = v; } else { r.skip(fieldType); } } else if(fieldId == 24) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.twitterId = v; } else { r.skip(fieldType); } } else if(fieldId == 25) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.groupName = v; } else { r.skip(fieldType); } } else if(fieldId == 26) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.recognitionLanguage = v; } else { r.skip(fieldType); } } else if(fieldId == 28) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.referralProof = v; } else { r.skip(fieldType); } } else if(fieldId == 29) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.educationalDiscount = v; } else { r.skip(fieldType); } } else if(fieldId == 30) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.businessAddress = v; } else { r.skip(fieldType); } } else if(fieldId == 31) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.hideSponsorBilling = v; } else { r.skip(fieldType); } } else if(fieldId == 32) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.taxExempt = v; } else { r.skip(fieldType); } } else if(fieldId == 33) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.useEmailAutoFiling = v; } else { r.skip(fieldType); } } else if(fieldId == 34) { if(fieldType == ThriftFieldType::T_I32) { ReminderEmailConfig::type v; readEnumReminderEmailConfig(r, v); s.reminderEmailConfig = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeAccounting(ThriftBinaryBufferWriter& w, const Accounting& s) { w.writeStructBegin("Accounting"); if(s.uploadLimit.isSet()) { w.writeFieldBegin("uploadLimit", ThriftFieldType::T_I64, 1); w.writeI64(s.uploadLimit.ref()); w.writeFieldEnd(); } if(s.uploadLimitEnd.isSet()) { w.writeFieldBegin("uploadLimitEnd", ThriftFieldType::T_I64, 2); w.writeI64(s.uploadLimitEnd.ref()); w.writeFieldEnd(); } if(s.uploadLimitNextMonth.isSet()) { w.writeFieldBegin("uploadLimitNextMonth", ThriftFieldType::T_I64, 3); w.writeI64(s.uploadLimitNextMonth.ref()); w.writeFieldEnd(); } if(s.premiumServiceStatus.isSet()) { w.writeFieldBegin("premiumServiceStatus", ThriftFieldType::T_I32, 4); w.writeI32(static_cast(s.premiumServiceStatus.ref())); w.writeFieldEnd(); } if(s.premiumOrderNumber.isSet()) { w.writeFieldBegin("premiumOrderNumber", ThriftFieldType::T_STRING, 5); w.writeString(s.premiumOrderNumber.ref()); w.writeFieldEnd(); } if(s.premiumCommerceService.isSet()) { w.writeFieldBegin("premiumCommerceService", ThriftFieldType::T_STRING, 6); w.writeString(s.premiumCommerceService.ref()); w.writeFieldEnd(); } if(s.premiumServiceStart.isSet()) { w.writeFieldBegin("premiumServiceStart", ThriftFieldType::T_I64, 7); w.writeI64(s.premiumServiceStart.ref()); w.writeFieldEnd(); } if(s.premiumServiceSKU.isSet()) { w.writeFieldBegin("premiumServiceSKU", ThriftFieldType::T_STRING, 8); w.writeString(s.premiumServiceSKU.ref()); w.writeFieldEnd(); } if(s.lastSuccessfulCharge.isSet()) { w.writeFieldBegin("lastSuccessfulCharge", ThriftFieldType::T_I64, 9); w.writeI64(s.lastSuccessfulCharge.ref()); w.writeFieldEnd(); } if(s.lastFailedCharge.isSet()) { w.writeFieldBegin("lastFailedCharge", ThriftFieldType::T_I64, 10); w.writeI64(s.lastFailedCharge.ref()); w.writeFieldEnd(); } if(s.lastFailedChargeReason.isSet()) { w.writeFieldBegin("lastFailedChargeReason", ThriftFieldType::T_STRING, 11); w.writeString(s.lastFailedChargeReason.ref()); w.writeFieldEnd(); } if(s.nextPaymentDue.isSet()) { w.writeFieldBegin("nextPaymentDue", ThriftFieldType::T_I64, 12); w.writeI64(s.nextPaymentDue.ref()); w.writeFieldEnd(); } if(s.premiumLockUntil.isSet()) { w.writeFieldBegin("premiumLockUntil", ThriftFieldType::T_I64, 13); w.writeI64(s.premiumLockUntil.ref()); w.writeFieldEnd(); } if(s.updated.isSet()) { w.writeFieldBegin("updated", ThriftFieldType::T_I64, 14); w.writeI64(s.updated.ref()); w.writeFieldEnd(); } if(s.premiumSubscriptionNumber.isSet()) { w.writeFieldBegin("premiumSubscriptionNumber", ThriftFieldType::T_STRING, 16); w.writeString(s.premiumSubscriptionNumber.ref()); w.writeFieldEnd(); } if(s.lastRequestedCharge.isSet()) { w.writeFieldBegin("lastRequestedCharge", ThriftFieldType::T_I64, 17); w.writeI64(s.lastRequestedCharge.ref()); w.writeFieldEnd(); } if(s.currency.isSet()) { w.writeFieldBegin("currency", ThriftFieldType::T_STRING, 18); w.writeString(s.currency.ref()); w.writeFieldEnd(); } if(s.unitPrice.isSet()) { w.writeFieldBegin("unitPrice", ThriftFieldType::T_I32, 19); w.writeI32(s.unitPrice.ref()); w.writeFieldEnd(); } if(s.businessId.isSet()) { w.writeFieldBegin("businessId", ThriftFieldType::T_I32, 20); w.writeI32(s.businessId.ref()); w.writeFieldEnd(); } if(s.businessName.isSet()) { w.writeFieldBegin("businessName", ThriftFieldType::T_STRING, 21); w.writeString(s.businessName.ref()); w.writeFieldEnd(); } if(s.businessRole.isSet()) { w.writeFieldBegin("businessRole", ThriftFieldType::T_I32, 22); w.writeI32(static_cast(s.businessRole.ref())); w.writeFieldEnd(); } if(s.unitDiscount.isSet()) { w.writeFieldBegin("unitDiscount", ThriftFieldType::T_I32, 23); w.writeI32(s.unitDiscount.ref()); w.writeFieldEnd(); } if(s.nextChargeDate.isSet()) { w.writeFieldBegin("nextChargeDate", ThriftFieldType::T_I64, 24); w.writeI64(s.nextChargeDate.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readAccounting(ThriftBinaryBufferReader& r, Accounting& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.uploadLimit = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.uploadLimitEnd = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.uploadLimitNextMonth = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_I32) { PremiumOrderStatus::type v; readEnumPremiumOrderStatus(r, v); s.premiumServiceStatus = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.premiumOrderNumber = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.premiumCommerceService = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.premiumServiceStart = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.premiumServiceSKU = v; } else { r.skip(fieldType); } } else if(fieldId == 9) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.lastSuccessfulCharge = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.lastFailedCharge = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.lastFailedChargeReason = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.nextPaymentDue = v; } else { r.skip(fieldType); } } else if(fieldId == 13) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.premiumLockUntil = v; } else { r.skip(fieldType); } } else if(fieldId == 14) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.updated = v; } else { r.skip(fieldType); } } else if(fieldId == 16) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.premiumSubscriptionNumber = v; } else { r.skip(fieldType); } } else if(fieldId == 17) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.lastRequestedCharge = v; } else { r.skip(fieldType); } } else if(fieldId == 18) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.currency = v; } else { r.skip(fieldType); } } else if(fieldId == 19) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.unitPrice = v; } else { r.skip(fieldType); } } else if(fieldId == 20) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.businessId = v; } else { r.skip(fieldType); } } else if(fieldId == 21) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.businessName = v; } else { r.skip(fieldType); } } else if(fieldId == 22) { if(fieldType == ThriftFieldType::T_I32) { BusinessUserRole::type v; readEnumBusinessUserRole(r, v); s.businessRole = v; } else { r.skip(fieldType); } } else if(fieldId == 23) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.unitDiscount = v; } else { r.skip(fieldType); } } else if(fieldId == 24) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.nextChargeDate = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeBusinessUserInfo(ThriftBinaryBufferWriter& w, const BusinessUserInfo& s) { w.writeStructBegin("BusinessUserInfo"); if(s.businessId.isSet()) { w.writeFieldBegin("businessId", ThriftFieldType::T_I32, 1); w.writeI32(s.businessId.ref()); w.writeFieldEnd(); } if(s.businessName.isSet()) { w.writeFieldBegin("businessName", ThriftFieldType::T_STRING, 2); w.writeString(s.businessName.ref()); w.writeFieldEnd(); } if(s.role.isSet()) { w.writeFieldBegin("role", ThriftFieldType::T_I32, 3); w.writeI32(static_cast(s.role.ref())); w.writeFieldEnd(); } if(s.email.isSet()) { w.writeFieldBegin("email", ThriftFieldType::T_STRING, 4); w.writeString(s.email.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readBusinessUserInfo(ThriftBinaryBufferReader& r, BusinessUserInfo& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.businessId = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.businessName = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_I32) { BusinessUserRole::type v; readEnumBusinessUserRole(r, v); s.role = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.email = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writePremiumInfo(ThriftBinaryBufferWriter& w, const PremiumInfo& s) { w.writeStructBegin("PremiumInfo"); w.writeFieldBegin("currentTime", ThriftFieldType::T_I64, 1); w.writeI64(s.currentTime); w.writeFieldEnd(); w.writeFieldBegin("premium", ThriftFieldType::T_BOOL, 2); w.writeBool(s.premium); w.writeFieldEnd(); w.writeFieldBegin("premiumRecurring", ThriftFieldType::T_BOOL, 3); w.writeBool(s.premiumRecurring); w.writeFieldEnd(); if(s.premiumExpirationDate.isSet()) { w.writeFieldBegin("premiumExpirationDate", ThriftFieldType::T_I64, 4); w.writeI64(s.premiumExpirationDate.ref()); w.writeFieldEnd(); } w.writeFieldBegin("premiumExtendable", ThriftFieldType::T_BOOL, 5); w.writeBool(s.premiumExtendable); w.writeFieldEnd(); w.writeFieldBegin("premiumPending", ThriftFieldType::T_BOOL, 6); w.writeBool(s.premiumPending); w.writeFieldEnd(); w.writeFieldBegin("premiumCancellationPending", ThriftFieldType::T_BOOL, 7); w.writeBool(s.premiumCancellationPending); w.writeFieldEnd(); w.writeFieldBegin("canPurchaseUploadAllowance", ThriftFieldType::T_BOOL, 8); w.writeBool(s.canPurchaseUploadAllowance); w.writeFieldEnd(); if(s.sponsoredGroupName.isSet()) { w.writeFieldBegin("sponsoredGroupName", ThriftFieldType::T_STRING, 9); w.writeString(s.sponsoredGroupName.ref()); w.writeFieldEnd(); } if(s.sponsoredGroupRole.isSet()) { w.writeFieldBegin("sponsoredGroupRole", ThriftFieldType::T_I32, 10); w.writeI32(static_cast(s.sponsoredGroupRole.ref())); w.writeFieldEnd(); } if(s.premiumUpgradable.isSet()) { w.writeFieldBegin("premiumUpgradable", ThriftFieldType::T_BOOL, 11); w.writeBool(s.premiumUpgradable.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readPremiumInfo(ThriftBinaryBufferReader& r, PremiumInfo& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; bool currentTime_isset = false; bool premium_isset = false; bool premiumRecurring_isset = false; bool premiumExtendable_isset = false; bool premiumPending_isset = false; bool premiumCancellationPending_isset = false; bool canPurchaseUploadAllowance_isset = false; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I64) { currentTime_isset = true; qint64 v; r.readI64(v); s.currentTime = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_BOOL) { premium_isset = true; bool v; r.readBool(v); s.premium = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_BOOL) { premiumRecurring_isset = true; bool v; r.readBool(v); s.premiumRecurring = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.premiumExpirationDate = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_BOOL) { premiumExtendable_isset = true; bool v; r.readBool(v); s.premiumExtendable = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_BOOL) { premiumPending_isset = true; bool v; r.readBool(v); s.premiumPending = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_BOOL) { premiumCancellationPending_isset = true; bool v; r.readBool(v); s.premiumCancellationPending = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_BOOL) { canPurchaseUploadAllowance_isset = true; bool v; r.readBool(v); s.canPurchaseUploadAllowance = v; } else { r.skip(fieldType); } } else if(fieldId == 9) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.sponsoredGroupName = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_I32) { SponsoredGroupRole::type v; readEnumSponsoredGroupRole(r, v); s.sponsoredGroupRole = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.premiumUpgradable = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); if(!currentTime_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "PremiumInfo.currentTime has no value"); if(!premium_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "PremiumInfo.premium has no value"); if(!premiumRecurring_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "PremiumInfo.premiumRecurring has no value"); if(!premiumExtendable_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "PremiumInfo.premiumExtendable has no value"); if(!premiumPending_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "PremiumInfo.premiumPending has no value"); if(!premiumCancellationPending_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "PremiumInfo.premiumCancellationPending has no value"); if(!canPurchaseUploadAllowance_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "PremiumInfo.canPurchaseUploadAllowance has no value"); } void writeUser(ThriftBinaryBufferWriter& w, const User& s) { w.writeStructBegin("User"); if(s.id.isSet()) { w.writeFieldBegin("id", ThriftFieldType::T_I32, 1); w.writeI32(s.id.ref()); w.writeFieldEnd(); } if(s.username.isSet()) { w.writeFieldBegin("username", ThriftFieldType::T_STRING, 2); w.writeString(s.username.ref()); w.writeFieldEnd(); } if(s.email.isSet()) { w.writeFieldBegin("email", ThriftFieldType::T_STRING, 3); w.writeString(s.email.ref()); w.writeFieldEnd(); } if(s.name.isSet()) { w.writeFieldBegin("name", ThriftFieldType::T_STRING, 4); w.writeString(s.name.ref()); w.writeFieldEnd(); } if(s.timezone.isSet()) { w.writeFieldBegin("timezone", ThriftFieldType::T_STRING, 6); w.writeString(s.timezone.ref()); w.writeFieldEnd(); } if(s.privilege.isSet()) { w.writeFieldBegin("privilege", ThriftFieldType::T_I32, 7); w.writeI32(static_cast(s.privilege.ref())); w.writeFieldEnd(); } if(s.created.isSet()) { w.writeFieldBegin("created", ThriftFieldType::T_I64, 9); w.writeI64(s.created.ref()); w.writeFieldEnd(); } if(s.updated.isSet()) { w.writeFieldBegin("updated", ThriftFieldType::T_I64, 10); w.writeI64(s.updated.ref()); w.writeFieldEnd(); } if(s.deleted.isSet()) { w.writeFieldBegin("deleted", ThriftFieldType::T_I64, 11); w.writeI64(s.deleted.ref()); w.writeFieldEnd(); } if(s.active.isSet()) { w.writeFieldBegin("active", ThriftFieldType::T_BOOL, 13); w.writeBool(s.active.ref()); w.writeFieldEnd(); } if(s.shardId.isSet()) { w.writeFieldBegin("shardId", ThriftFieldType::T_STRING, 14); w.writeString(s.shardId.ref()); w.writeFieldEnd(); } if(s.attributes.isSet()) { w.writeFieldBegin("attributes", ThriftFieldType::T_STRUCT, 15); writeUserAttributes(w, s.attributes.ref()); w.writeFieldEnd(); } if(s.accounting.isSet()) { w.writeFieldBegin("accounting", ThriftFieldType::T_STRUCT, 16); writeAccounting(w, s.accounting.ref()); w.writeFieldEnd(); } if(s.premiumInfo.isSet()) { w.writeFieldBegin("premiumInfo", ThriftFieldType::T_STRUCT, 17); writePremiumInfo(w, s.premiumInfo.ref()); w.writeFieldEnd(); } if(s.businessUserInfo.isSet()) { w.writeFieldBegin("businessUserInfo", ThriftFieldType::T_STRUCT, 18); writeBusinessUserInfo(w, s.businessUserInfo.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readUser(ThriftBinaryBufferReader& r, User& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I32) { UserID v; r.readI32(v); s.id = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.username = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.email = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.name = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.timezone = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_I32) { PrivilegeLevel::type v; readEnumPrivilegeLevel(r, v); s.privilege = v; } else { r.skip(fieldType); } } else if(fieldId == 9) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.created = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.updated = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.deleted = v; } else { r.skip(fieldType); } } else if(fieldId == 13) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.active = v; } else { r.skip(fieldType); } } else if(fieldId == 14) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.shardId = v; } else { r.skip(fieldType); } } else if(fieldId == 15) { if(fieldType == ThriftFieldType::T_STRUCT) { UserAttributes v; readUserAttributes(r, v); s.attributes = v; } else { r.skip(fieldType); } } else if(fieldId == 16) { if(fieldType == ThriftFieldType::T_STRUCT) { Accounting v; readAccounting(r, v); s.accounting = v; } else { r.skip(fieldType); } } else if(fieldId == 17) { if(fieldType == ThriftFieldType::T_STRUCT) { PremiumInfo v; readPremiumInfo(r, v); s.premiumInfo = v; } else { r.skip(fieldType); } } else if(fieldId == 18) { if(fieldType == ThriftFieldType::T_STRUCT) { BusinessUserInfo v; readBusinessUserInfo(r, v); s.businessUserInfo = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeTag(ThriftBinaryBufferWriter& w, const Tag& s) { w.writeStructBegin("Tag"); if(s.guid.isSet()) { w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 1); w.writeString(s.guid.ref()); w.writeFieldEnd(); } if(s.name.isSet()) { w.writeFieldBegin("name", ThriftFieldType::T_STRING, 2); w.writeString(s.name.ref()); w.writeFieldEnd(); } if(s.parentGuid.isSet()) { w.writeFieldBegin("parentGuid", ThriftFieldType::T_STRING, 3); w.writeString(s.parentGuid.ref()); w.writeFieldEnd(); } if(s.updateSequenceNum.isSet()) { w.writeFieldBegin("updateSequenceNum", ThriftFieldType::T_I32, 4); w.writeI32(s.updateSequenceNum.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readTag(ThriftBinaryBufferReader& r, Tag& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { Guid v; r.readString(v); s.guid = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.name = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRING) { Guid v; r.readString(v); s.parentGuid = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.updateSequenceNum = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeLazyMap(ThriftBinaryBufferWriter& w, const LazyMap& s) { w.writeStructBegin("LazyMap"); if(s.keysOnly.isSet()) { w.writeFieldBegin("keysOnly", ThriftFieldType::T_SET, 1); w.writeSetBegin(ThriftFieldType::T_STRING, s.keysOnly.ref().count()); Q_FOREACH(const QString& elem, s.keysOnly.ref()) { w.writeString(elem); } w.writeSetEnd(); w.writeFieldEnd(); } if(s.fullMap.isSet()) { w.writeFieldBegin("fullMap", ThriftFieldType::T_MAP, 2); w.writeMapBegin(ThriftFieldType::T_STRING, ThriftFieldType::T_STRING, s.fullMap.ref().keys().length()); Q_FOREACH(const QString& elem, s.fullMap.ref().keys()) { w.writeString(elem); w.writeString(s.fullMap.ref().value(elem)); } w.writeMapEnd(); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readLazyMap(ThriftBinaryBufferReader& r, LazyMap& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_SET) { QSet< QString > v; quint32 size; ThriftFieldType::type elemType; r.readSetBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect set type (LazyMap.keysOnly)"); for(quint32 i = 0; i < size; i++) { QString elem; r.readString(elem); v.insert(elem); } r.readSetEnd(); s.keysOnly = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_MAP) { QMap< QString, QString > v; quint32 size; ThriftFieldType::type keyType; ThriftFieldType::type elemType; r.readMapBegin(keyType, elemType, size); if(keyType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect map key type (LazyMap.fullMap)"); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect map value type (LazyMap.fullMap)"); for(quint32 i = 0; i < size; i++) { QString key; r.readString(key); QString value; r.readString(value); v[key] = value; } r.readMapEnd(); s.fullMap = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeResourceAttributes(ThriftBinaryBufferWriter& w, const ResourceAttributes& s) { w.writeStructBegin("ResourceAttributes"); if(s.sourceURL.isSet()) { w.writeFieldBegin("sourceURL", ThriftFieldType::T_STRING, 1); w.writeString(s.sourceURL.ref()); w.writeFieldEnd(); } if(s.timestamp.isSet()) { w.writeFieldBegin("timestamp", ThriftFieldType::T_I64, 2); w.writeI64(s.timestamp.ref()); w.writeFieldEnd(); } if(s.latitude.isSet()) { w.writeFieldBegin("latitude", ThriftFieldType::T_DOUBLE, 3); w.writeDouble(s.latitude.ref()); w.writeFieldEnd(); } if(s.longitude.isSet()) { w.writeFieldBegin("longitude", ThriftFieldType::T_DOUBLE, 4); w.writeDouble(s.longitude.ref()); w.writeFieldEnd(); } if(s.altitude.isSet()) { w.writeFieldBegin("altitude", ThriftFieldType::T_DOUBLE, 5); w.writeDouble(s.altitude.ref()); w.writeFieldEnd(); } if(s.cameraMake.isSet()) { w.writeFieldBegin("cameraMake", ThriftFieldType::T_STRING, 6); w.writeString(s.cameraMake.ref()); w.writeFieldEnd(); } if(s.cameraModel.isSet()) { w.writeFieldBegin("cameraModel", ThriftFieldType::T_STRING, 7); w.writeString(s.cameraModel.ref()); w.writeFieldEnd(); } if(s.clientWillIndex.isSet()) { w.writeFieldBegin("clientWillIndex", ThriftFieldType::T_BOOL, 8); w.writeBool(s.clientWillIndex.ref()); w.writeFieldEnd(); } if(s.recoType.isSet()) { w.writeFieldBegin("recoType", ThriftFieldType::T_STRING, 9); w.writeString(s.recoType.ref()); w.writeFieldEnd(); } if(s.fileName.isSet()) { w.writeFieldBegin("fileName", ThriftFieldType::T_STRING, 10); w.writeString(s.fileName.ref()); w.writeFieldEnd(); } if(s.attachment.isSet()) { w.writeFieldBegin("attachment", ThriftFieldType::T_BOOL, 11); w.writeBool(s.attachment.ref()); w.writeFieldEnd(); } if(s.applicationData.isSet()) { w.writeFieldBegin("applicationData", ThriftFieldType::T_STRUCT, 12); writeLazyMap(w, s.applicationData.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readResourceAttributes(ThriftBinaryBufferReader& r, ResourceAttributes& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.sourceURL = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.timestamp = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_DOUBLE) { double v; r.readDouble(v); s.latitude = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_DOUBLE) { double v; r.readDouble(v); s.longitude = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_DOUBLE) { double v; r.readDouble(v); s.altitude = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.cameraMake = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.cameraModel = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.clientWillIndex = v; } else { r.skip(fieldType); } } else if(fieldId == 9) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.recoType = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.fileName = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.attachment = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_STRUCT) { LazyMap v; readLazyMap(r, v); s.applicationData = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeResource(ThriftBinaryBufferWriter& w, const Resource& s) { w.writeStructBegin("Resource"); if(s.guid.isSet()) { w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 1); w.writeString(s.guid.ref()); w.writeFieldEnd(); } if(s.noteGuid.isSet()) { w.writeFieldBegin("noteGuid", ThriftFieldType::T_STRING, 2); w.writeString(s.noteGuid.ref()); w.writeFieldEnd(); } if(s.data.isSet()) { w.writeFieldBegin("data", ThriftFieldType::T_STRUCT, 3); writeData(w, s.data.ref()); w.writeFieldEnd(); } if(s.mime.isSet()) { w.writeFieldBegin("mime", ThriftFieldType::T_STRING, 4); w.writeString(s.mime.ref()); w.writeFieldEnd(); } if(s.width.isSet()) { w.writeFieldBegin("width", ThriftFieldType::T_I16, 5); w.writeI16(s.width.ref()); w.writeFieldEnd(); } if(s.height.isSet()) { w.writeFieldBegin("height", ThriftFieldType::T_I16, 6); w.writeI16(s.height.ref()); w.writeFieldEnd(); } if(s.duration.isSet()) { w.writeFieldBegin("duration", ThriftFieldType::T_I16, 7); w.writeI16(s.duration.ref()); w.writeFieldEnd(); } if(s.active.isSet()) { w.writeFieldBegin("active", ThriftFieldType::T_BOOL, 8); w.writeBool(s.active.ref()); w.writeFieldEnd(); } if(s.recognition.isSet()) { w.writeFieldBegin("recognition", ThriftFieldType::T_STRUCT, 9); writeData(w, s.recognition.ref()); w.writeFieldEnd(); } if(s.attributes.isSet()) { w.writeFieldBegin("attributes", ThriftFieldType::T_STRUCT, 11); writeResourceAttributes(w, s.attributes.ref()); w.writeFieldEnd(); } if(s.updateSequenceNum.isSet()) { w.writeFieldBegin("updateSequenceNum", ThriftFieldType::T_I32, 12); w.writeI32(s.updateSequenceNum.ref()); w.writeFieldEnd(); } if(s.alternateData.isSet()) { w.writeFieldBegin("alternateData", ThriftFieldType::T_STRUCT, 13); writeData(w, s.alternateData.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readResource(ThriftBinaryBufferReader& r, Resource& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { Guid v; r.readString(v); s.guid = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRING) { Guid v; r.readString(v); s.noteGuid = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRUCT) { Data v; readData(r, v); s.data = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.mime = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_I16) { qint16 v; r.readI16(v); s.width = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_I16) { qint16 v; r.readI16(v); s.height = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_I16) { qint16 v; r.readI16(v); s.duration = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.active = v; } else { r.skip(fieldType); } } else if(fieldId == 9) { if(fieldType == ThriftFieldType::T_STRUCT) { Data v; readData(r, v); s.recognition = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_STRUCT) { ResourceAttributes v; readResourceAttributes(r, v); s.attributes = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.updateSequenceNum = v; } else { r.skip(fieldType); } } else if(fieldId == 13) { if(fieldType == ThriftFieldType::T_STRUCT) { Data v; readData(r, v); s.alternateData = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeNoteAttributes(ThriftBinaryBufferWriter& w, const NoteAttributes& s) { w.writeStructBegin("NoteAttributes"); if(s.subjectDate.isSet()) { w.writeFieldBegin("subjectDate", ThriftFieldType::T_I64, 1); w.writeI64(s.subjectDate.ref()); w.writeFieldEnd(); } if(s.latitude.isSet()) { w.writeFieldBegin("latitude", ThriftFieldType::T_DOUBLE, 10); w.writeDouble(s.latitude.ref()); w.writeFieldEnd(); } if(s.longitude.isSet()) { w.writeFieldBegin("longitude", ThriftFieldType::T_DOUBLE, 11); w.writeDouble(s.longitude.ref()); w.writeFieldEnd(); } if(s.altitude.isSet()) { w.writeFieldBegin("altitude", ThriftFieldType::T_DOUBLE, 12); w.writeDouble(s.altitude.ref()); w.writeFieldEnd(); } if(s.author.isSet()) { w.writeFieldBegin("author", ThriftFieldType::T_STRING, 13); w.writeString(s.author.ref()); w.writeFieldEnd(); } if(s.source.isSet()) { w.writeFieldBegin("source", ThriftFieldType::T_STRING, 14); w.writeString(s.source.ref()); w.writeFieldEnd(); } if(s.sourceURL.isSet()) { w.writeFieldBegin("sourceURL", ThriftFieldType::T_STRING, 15); w.writeString(s.sourceURL.ref()); w.writeFieldEnd(); } if(s.sourceApplication.isSet()) { w.writeFieldBegin("sourceApplication", ThriftFieldType::T_STRING, 16); w.writeString(s.sourceApplication.ref()); w.writeFieldEnd(); } if(s.shareDate.isSet()) { w.writeFieldBegin("shareDate", ThriftFieldType::T_I64, 17); w.writeI64(s.shareDate.ref()); w.writeFieldEnd(); } if(s.reminderOrder.isSet()) { w.writeFieldBegin("reminderOrder", ThriftFieldType::T_I64, 18); w.writeI64(s.reminderOrder.ref()); w.writeFieldEnd(); } if(s.reminderDoneTime.isSet()) { w.writeFieldBegin("reminderDoneTime", ThriftFieldType::T_I64, 19); w.writeI64(s.reminderDoneTime.ref()); w.writeFieldEnd(); } if(s.reminderTime.isSet()) { w.writeFieldBegin("reminderTime", ThriftFieldType::T_I64, 20); w.writeI64(s.reminderTime.ref()); w.writeFieldEnd(); } if(s.placeName.isSet()) { w.writeFieldBegin("placeName", ThriftFieldType::T_STRING, 21); w.writeString(s.placeName.ref()); w.writeFieldEnd(); } if(s.contentClass.isSet()) { w.writeFieldBegin("contentClass", ThriftFieldType::T_STRING, 22); w.writeString(s.contentClass.ref()); w.writeFieldEnd(); } if(s.applicationData.isSet()) { w.writeFieldBegin("applicationData", ThriftFieldType::T_STRUCT, 23); writeLazyMap(w, s.applicationData.ref()); w.writeFieldEnd(); } if(s.lastEditedBy.isSet()) { w.writeFieldBegin("lastEditedBy", ThriftFieldType::T_STRING, 24); w.writeString(s.lastEditedBy.ref()); w.writeFieldEnd(); } if(s.classifications.isSet()) { w.writeFieldBegin("classifications", ThriftFieldType::T_MAP, 26); w.writeMapBegin(ThriftFieldType::T_STRING, ThriftFieldType::T_STRING, s.classifications.ref().keys().length()); Q_FOREACH(const QString& elem, s.classifications.ref().keys()) { w.writeString(elem); w.writeString(s.classifications.ref().value(elem)); } w.writeMapEnd(); w.writeFieldEnd(); } if(s.creatorId.isSet()) { w.writeFieldBegin("creatorId", ThriftFieldType::T_I32, 27); w.writeI32(s.creatorId.ref()); w.writeFieldEnd(); } if(s.lastEditorId.isSet()) { w.writeFieldBegin("lastEditorId", ThriftFieldType::T_I32, 28); w.writeI32(s.lastEditorId.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readNoteAttributes(ThriftBinaryBufferReader& r, NoteAttributes& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.subjectDate = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_DOUBLE) { double v; r.readDouble(v); s.latitude = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_DOUBLE) { double v; r.readDouble(v); s.longitude = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_DOUBLE) { double v; r.readDouble(v); s.altitude = v; } else { r.skip(fieldType); } } else if(fieldId == 13) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.author = v; } else { r.skip(fieldType); } } else if(fieldId == 14) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.source = v; } else { r.skip(fieldType); } } else if(fieldId == 15) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.sourceURL = v; } else { r.skip(fieldType); } } else if(fieldId == 16) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.sourceApplication = v; } else { r.skip(fieldType); } } else if(fieldId == 17) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.shareDate = v; } else { r.skip(fieldType); } } else if(fieldId == 18) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.reminderOrder = v; } else { r.skip(fieldType); } } else if(fieldId == 19) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.reminderDoneTime = v; } else { r.skip(fieldType); } } else if(fieldId == 20) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.reminderTime = v; } else { r.skip(fieldType); } } else if(fieldId == 21) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.placeName = v; } else { r.skip(fieldType); } } else if(fieldId == 22) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.contentClass = v; } else { r.skip(fieldType); } } else if(fieldId == 23) { if(fieldType == ThriftFieldType::T_STRUCT) { LazyMap v; readLazyMap(r, v); s.applicationData = v; } else { r.skip(fieldType); } } else if(fieldId == 24) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.lastEditedBy = v; } else { r.skip(fieldType); } } else if(fieldId == 26) { if(fieldType == ThriftFieldType::T_MAP) { QMap< QString, QString > v; quint32 size; ThriftFieldType::type keyType; ThriftFieldType::type elemType; r.readMapBegin(keyType, elemType, size); if(keyType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect map key type (NoteAttributes.classifications)"); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect map value type (NoteAttributes.classifications)"); for(quint32 i = 0; i < size; i++) { QString key; r.readString(key); QString value; r.readString(value); v[key] = value; } r.readMapEnd(); s.classifications = v; } else { r.skip(fieldType); } } else if(fieldId == 27) { if(fieldType == ThriftFieldType::T_I32) { UserID v; r.readI32(v); s.creatorId = v; } else { r.skip(fieldType); } } else if(fieldId == 28) { if(fieldType == ThriftFieldType::T_I32) { UserID v; r.readI32(v); s.lastEditorId = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeNote(ThriftBinaryBufferWriter& w, const Note& s) { w.writeStructBegin("Note"); if(s.guid.isSet()) { w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 1); w.writeString(s.guid.ref()); w.writeFieldEnd(); } if(s.title.isSet()) { w.writeFieldBegin("title", ThriftFieldType::T_STRING, 2); w.writeString(s.title.ref()); w.writeFieldEnd(); } if(s.content.isSet()) { w.writeFieldBegin("content", ThriftFieldType::T_STRING, 3); w.writeString(s.content.ref()); w.writeFieldEnd(); } if(s.contentHash.isSet()) { w.writeFieldBegin("contentHash", ThriftFieldType::T_STRING, 4); w.writeBinary(s.contentHash.ref()); w.writeFieldEnd(); } if(s.contentLength.isSet()) { w.writeFieldBegin("contentLength", ThriftFieldType::T_I32, 5); w.writeI32(s.contentLength.ref()); w.writeFieldEnd(); } if(s.created.isSet()) { w.writeFieldBegin("created", ThriftFieldType::T_I64, 6); w.writeI64(s.created.ref()); w.writeFieldEnd(); } if(s.updated.isSet()) { w.writeFieldBegin("updated", ThriftFieldType::T_I64, 7); w.writeI64(s.updated.ref()); w.writeFieldEnd(); } if(s.deleted.isSet()) { w.writeFieldBegin("deleted", ThriftFieldType::T_I64, 8); w.writeI64(s.deleted.ref()); w.writeFieldEnd(); } if(s.active.isSet()) { w.writeFieldBegin("active", ThriftFieldType::T_BOOL, 9); w.writeBool(s.active.ref()); w.writeFieldEnd(); } if(s.updateSequenceNum.isSet()) { w.writeFieldBegin("updateSequenceNum", ThriftFieldType::T_I32, 10); w.writeI32(s.updateSequenceNum.ref()); w.writeFieldEnd(); } if(s.notebookGuid.isSet()) { w.writeFieldBegin("notebookGuid", ThriftFieldType::T_STRING, 11); w.writeString(s.notebookGuid.ref()); w.writeFieldEnd(); } if(s.tagGuids.isSet()) { w.writeFieldBegin("tagGuids", ThriftFieldType::T_LIST, 12); w.writeListBegin(ThriftFieldType::T_STRING, s.tagGuids.ref().length()); Q_FOREACH(const Guid& elem, s.tagGuids.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.resources.isSet()) { w.writeFieldBegin("resources", ThriftFieldType::T_LIST, 13); w.writeListBegin(ThriftFieldType::T_STRUCT, s.resources.ref().length()); Q_FOREACH(const Resource& elem, s.resources.ref()) { writeResource(w, elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.attributes.isSet()) { w.writeFieldBegin("attributes", ThriftFieldType::T_STRUCT, 14); writeNoteAttributes(w, s.attributes.ref()); w.writeFieldEnd(); } if(s.tagNames.isSet()) { w.writeFieldBegin("tagNames", ThriftFieldType::T_LIST, 15); w.writeListBegin(ThriftFieldType::T_STRING, s.tagNames.ref().length()); Q_FOREACH(const QString& elem, s.tagNames.ref()) { w.writeString(elem); } w.writeListEnd(); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readNote(ThriftBinaryBufferReader& r, Note& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { Guid v; r.readString(v); s.guid = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.title = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.content = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_STRING) { QByteArray v; r.readBinary(v); s.contentHash = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.contentLength = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.created = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.updated = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.deleted = v; } else { r.skip(fieldType); } } else if(fieldId == 9) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.active = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.updateSequenceNum = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.notebookGuid = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_LIST) { QList< Guid > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (Note.tagGuids)"); for(quint32 i = 0; i < size; i++) { Guid elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.tagGuids = v; } else { r.skip(fieldType); } } else if(fieldId == 13) { if(fieldType == ThriftFieldType::T_LIST) { QList< Resource > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (Note.resources)"); for(quint32 i = 0; i < size; i++) { Resource elem; readResource(r, elem); v.append(elem); } r.readListEnd(); s.resources = v; } else { r.skip(fieldType); } } else if(fieldId == 14) { if(fieldType == ThriftFieldType::T_STRUCT) { NoteAttributes v; readNoteAttributes(r, v); s.attributes = v; } else { r.skip(fieldType); } } else if(fieldId == 15) { if(fieldType == ThriftFieldType::T_LIST) { QStringList v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRING) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (Note.tagNames)"); for(quint32 i = 0; i < size; i++) { QString elem; r.readString(elem); v.append(elem); } r.readListEnd(); s.tagNames = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writePublishing(ThriftBinaryBufferWriter& w, const Publishing& s) { w.writeStructBegin("Publishing"); if(s.uri.isSet()) { w.writeFieldBegin("uri", ThriftFieldType::T_STRING, 1); w.writeString(s.uri.ref()); w.writeFieldEnd(); } if(s.order.isSet()) { w.writeFieldBegin("order", ThriftFieldType::T_I32, 2); w.writeI32(static_cast(s.order.ref())); w.writeFieldEnd(); } if(s.ascending.isSet()) { w.writeFieldBegin("ascending", ThriftFieldType::T_BOOL, 3); w.writeBool(s.ascending.ref()); w.writeFieldEnd(); } if(s.publicDescription.isSet()) { w.writeFieldBegin("publicDescription", ThriftFieldType::T_STRING, 4); w.writeString(s.publicDescription.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readPublishing(ThriftBinaryBufferReader& r, Publishing& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.uri = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_I32) { NoteSortOrder::type v; readEnumNoteSortOrder(r, v); s.order = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.ascending = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.publicDescription = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeBusinessNotebook(ThriftBinaryBufferWriter& w, const BusinessNotebook& s) { w.writeStructBegin("BusinessNotebook"); if(s.notebookDescription.isSet()) { w.writeFieldBegin("notebookDescription", ThriftFieldType::T_STRING, 1); w.writeString(s.notebookDescription.ref()); w.writeFieldEnd(); } if(s.privilege.isSet()) { w.writeFieldBegin("privilege", ThriftFieldType::T_I32, 2); w.writeI32(static_cast(s.privilege.ref())); w.writeFieldEnd(); } if(s.recommended.isSet()) { w.writeFieldBegin("recommended", ThriftFieldType::T_BOOL, 3); w.writeBool(s.recommended.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readBusinessNotebook(ThriftBinaryBufferReader& r, BusinessNotebook& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.notebookDescription = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_I32) { SharedNotebookPrivilegeLevel::type v; readEnumSharedNotebookPrivilegeLevel(r, v); s.privilege = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.recommended = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeSavedSearchScope(ThriftBinaryBufferWriter& w, const SavedSearchScope& s) { w.writeStructBegin("SavedSearchScope"); if(s.includeAccount.isSet()) { w.writeFieldBegin("includeAccount", ThriftFieldType::T_BOOL, 1); w.writeBool(s.includeAccount.ref()); w.writeFieldEnd(); } if(s.includePersonalLinkedNotebooks.isSet()) { w.writeFieldBegin("includePersonalLinkedNotebooks", ThriftFieldType::T_BOOL, 2); w.writeBool(s.includePersonalLinkedNotebooks.ref()); w.writeFieldEnd(); } if(s.includeBusinessLinkedNotebooks.isSet()) { w.writeFieldBegin("includeBusinessLinkedNotebooks", ThriftFieldType::T_BOOL, 3); w.writeBool(s.includeBusinessLinkedNotebooks.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readSavedSearchScope(ThriftBinaryBufferReader& r, SavedSearchScope& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeAccount = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includePersonalLinkedNotebooks = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.includeBusinessLinkedNotebooks = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeSavedSearch(ThriftBinaryBufferWriter& w, const SavedSearch& s) { w.writeStructBegin("SavedSearch"); if(s.guid.isSet()) { w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 1); w.writeString(s.guid.ref()); w.writeFieldEnd(); } if(s.name.isSet()) { w.writeFieldBegin("name", ThriftFieldType::T_STRING, 2); w.writeString(s.name.ref()); w.writeFieldEnd(); } if(s.query.isSet()) { w.writeFieldBegin("query", ThriftFieldType::T_STRING, 3); w.writeString(s.query.ref()); w.writeFieldEnd(); } if(s.format.isSet()) { w.writeFieldBegin("format", ThriftFieldType::T_I32, 4); w.writeI32(static_cast(s.format.ref())); w.writeFieldEnd(); } if(s.updateSequenceNum.isSet()) { w.writeFieldBegin("updateSequenceNum", ThriftFieldType::T_I32, 5); w.writeI32(s.updateSequenceNum.ref()); w.writeFieldEnd(); } if(s.scope.isSet()) { w.writeFieldBegin("scope", ThriftFieldType::T_STRUCT, 6); writeSavedSearchScope(w, s.scope.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readSavedSearch(ThriftBinaryBufferReader& r, SavedSearch& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { Guid v; r.readString(v); s.guid = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.name = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.query = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_I32) { QueryFormat::type v; readEnumQueryFormat(r, v); s.format = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.updateSequenceNum = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_STRUCT) { SavedSearchScope v; readSavedSearchScope(r, v); s.scope = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeSharedNotebookRecipientSettings(ThriftBinaryBufferWriter& w, const SharedNotebookRecipientSettings& s) { w.writeStructBegin("SharedNotebookRecipientSettings"); if(s.reminderNotifyEmail.isSet()) { w.writeFieldBegin("reminderNotifyEmail", ThriftFieldType::T_BOOL, 1); w.writeBool(s.reminderNotifyEmail.ref()); w.writeFieldEnd(); } if(s.reminderNotifyInApp.isSet()) { w.writeFieldBegin("reminderNotifyInApp", ThriftFieldType::T_BOOL, 2); w.writeBool(s.reminderNotifyInApp.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readSharedNotebookRecipientSettings(ThriftBinaryBufferReader& r, SharedNotebookRecipientSettings& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.reminderNotifyEmail = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.reminderNotifyInApp = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeSharedNotebook(ThriftBinaryBufferWriter& w, const SharedNotebook& s) { w.writeStructBegin("SharedNotebook"); if(s.id.isSet()) { w.writeFieldBegin("id", ThriftFieldType::T_I64, 1); w.writeI64(s.id.ref()); w.writeFieldEnd(); } if(s.userId.isSet()) { w.writeFieldBegin("userId", ThriftFieldType::T_I32, 2); w.writeI32(s.userId.ref()); w.writeFieldEnd(); } if(s.notebookGuid.isSet()) { w.writeFieldBegin("notebookGuid", ThriftFieldType::T_STRING, 3); w.writeString(s.notebookGuid.ref()); w.writeFieldEnd(); } if(s.email.isSet()) { w.writeFieldBegin("email", ThriftFieldType::T_STRING, 4); w.writeString(s.email.ref()); w.writeFieldEnd(); } if(s.notebookModifiable.isSet()) { w.writeFieldBegin("notebookModifiable", ThriftFieldType::T_BOOL, 5); w.writeBool(s.notebookModifiable.ref()); w.writeFieldEnd(); } if(s.requireLogin.isSet()) { w.writeFieldBegin("requireLogin", ThriftFieldType::T_BOOL, 6); w.writeBool(s.requireLogin.ref()); w.writeFieldEnd(); } if(s.serviceCreated.isSet()) { w.writeFieldBegin("serviceCreated", ThriftFieldType::T_I64, 7); w.writeI64(s.serviceCreated.ref()); w.writeFieldEnd(); } if(s.serviceUpdated.isSet()) { w.writeFieldBegin("serviceUpdated", ThriftFieldType::T_I64, 10); w.writeI64(s.serviceUpdated.ref()); w.writeFieldEnd(); } if(s.shareKey.isSet()) { w.writeFieldBegin("shareKey", ThriftFieldType::T_STRING, 8); w.writeString(s.shareKey.ref()); w.writeFieldEnd(); } if(s.username.isSet()) { w.writeFieldBegin("username", ThriftFieldType::T_STRING, 9); w.writeString(s.username.ref()); w.writeFieldEnd(); } if(s.privilege.isSet()) { w.writeFieldBegin("privilege", ThriftFieldType::T_I32, 11); w.writeI32(static_cast(s.privilege.ref())); w.writeFieldEnd(); } if(s.allowPreview.isSet()) { w.writeFieldBegin("allowPreview", ThriftFieldType::T_BOOL, 12); w.writeBool(s.allowPreview.ref()); w.writeFieldEnd(); } if(s.recipientSettings.isSet()) { w.writeFieldBegin("recipientSettings", ThriftFieldType::T_STRUCT, 13); writeSharedNotebookRecipientSettings(w, s.recipientSettings.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readSharedNotebook(ThriftBinaryBufferReader& r, SharedNotebook& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.id = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.userId = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.notebookGuid = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.email = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.notebookModifiable = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.requireLogin = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.serviceCreated = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.serviceUpdated = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.shareKey = v; } else { r.skip(fieldType); } } else if(fieldId == 9) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.username = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_I32) { SharedNotebookPrivilegeLevel::type v; readEnumSharedNotebookPrivilegeLevel(r, v); s.privilege = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.allowPreview = v; } else { r.skip(fieldType); } } else if(fieldId == 13) { if(fieldType == ThriftFieldType::T_STRUCT) { SharedNotebookRecipientSettings v; readSharedNotebookRecipientSettings(r, v); s.recipientSettings = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeNotebookRestrictions(ThriftBinaryBufferWriter& w, const NotebookRestrictions& s) { w.writeStructBegin("NotebookRestrictions"); if(s.noReadNotes.isSet()) { w.writeFieldBegin("noReadNotes", ThriftFieldType::T_BOOL, 1); w.writeBool(s.noReadNotes.ref()); w.writeFieldEnd(); } if(s.noCreateNotes.isSet()) { w.writeFieldBegin("noCreateNotes", ThriftFieldType::T_BOOL, 2); w.writeBool(s.noCreateNotes.ref()); w.writeFieldEnd(); } if(s.noUpdateNotes.isSet()) { w.writeFieldBegin("noUpdateNotes", ThriftFieldType::T_BOOL, 3); w.writeBool(s.noUpdateNotes.ref()); w.writeFieldEnd(); } if(s.noExpungeNotes.isSet()) { w.writeFieldBegin("noExpungeNotes", ThriftFieldType::T_BOOL, 4); w.writeBool(s.noExpungeNotes.ref()); w.writeFieldEnd(); } if(s.noShareNotes.isSet()) { w.writeFieldBegin("noShareNotes", ThriftFieldType::T_BOOL, 5); w.writeBool(s.noShareNotes.ref()); w.writeFieldEnd(); } if(s.noEmailNotes.isSet()) { w.writeFieldBegin("noEmailNotes", ThriftFieldType::T_BOOL, 6); w.writeBool(s.noEmailNotes.ref()); w.writeFieldEnd(); } if(s.noSendMessageToRecipients.isSet()) { w.writeFieldBegin("noSendMessageToRecipients", ThriftFieldType::T_BOOL, 7); w.writeBool(s.noSendMessageToRecipients.ref()); w.writeFieldEnd(); } if(s.noUpdateNotebook.isSet()) { w.writeFieldBegin("noUpdateNotebook", ThriftFieldType::T_BOOL, 8); w.writeBool(s.noUpdateNotebook.ref()); w.writeFieldEnd(); } if(s.noExpungeNotebook.isSet()) { w.writeFieldBegin("noExpungeNotebook", ThriftFieldType::T_BOOL, 9); w.writeBool(s.noExpungeNotebook.ref()); w.writeFieldEnd(); } if(s.noSetDefaultNotebook.isSet()) { w.writeFieldBegin("noSetDefaultNotebook", ThriftFieldType::T_BOOL, 10); w.writeBool(s.noSetDefaultNotebook.ref()); w.writeFieldEnd(); } if(s.noSetNotebookStack.isSet()) { w.writeFieldBegin("noSetNotebookStack", ThriftFieldType::T_BOOL, 11); w.writeBool(s.noSetNotebookStack.ref()); w.writeFieldEnd(); } if(s.noPublishToPublic.isSet()) { w.writeFieldBegin("noPublishToPublic", ThriftFieldType::T_BOOL, 12); w.writeBool(s.noPublishToPublic.ref()); w.writeFieldEnd(); } if(s.noPublishToBusinessLibrary.isSet()) { w.writeFieldBegin("noPublishToBusinessLibrary", ThriftFieldType::T_BOOL, 13); w.writeBool(s.noPublishToBusinessLibrary.ref()); w.writeFieldEnd(); } if(s.noCreateTags.isSet()) { w.writeFieldBegin("noCreateTags", ThriftFieldType::T_BOOL, 14); w.writeBool(s.noCreateTags.ref()); w.writeFieldEnd(); } if(s.noUpdateTags.isSet()) { w.writeFieldBegin("noUpdateTags", ThriftFieldType::T_BOOL, 15); w.writeBool(s.noUpdateTags.ref()); w.writeFieldEnd(); } if(s.noExpungeTags.isSet()) { w.writeFieldBegin("noExpungeTags", ThriftFieldType::T_BOOL, 16); w.writeBool(s.noExpungeTags.ref()); w.writeFieldEnd(); } if(s.noSetParentTag.isSet()) { w.writeFieldBegin("noSetParentTag", ThriftFieldType::T_BOOL, 17); w.writeBool(s.noSetParentTag.ref()); w.writeFieldEnd(); } if(s.noCreateSharedNotebooks.isSet()) { w.writeFieldBegin("noCreateSharedNotebooks", ThriftFieldType::T_BOOL, 18); w.writeBool(s.noCreateSharedNotebooks.ref()); w.writeFieldEnd(); } if(s.updateWhichSharedNotebookRestrictions.isSet()) { w.writeFieldBegin("updateWhichSharedNotebookRestrictions", ThriftFieldType::T_I32, 19); w.writeI32(static_cast(s.updateWhichSharedNotebookRestrictions.ref())); w.writeFieldEnd(); } if(s.expungeWhichSharedNotebookRestrictions.isSet()) { w.writeFieldBegin("expungeWhichSharedNotebookRestrictions", ThriftFieldType::T_I32, 20); w.writeI32(static_cast(s.expungeWhichSharedNotebookRestrictions.ref())); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readNotebookRestrictions(ThriftBinaryBufferReader& r, NotebookRestrictions& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noReadNotes = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noCreateNotes = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noUpdateNotes = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noExpungeNotes = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noShareNotes = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noEmailNotes = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noSendMessageToRecipients = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noUpdateNotebook = v; } else { r.skip(fieldType); } } else if(fieldId == 9) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noExpungeNotebook = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noSetDefaultNotebook = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noSetNotebookStack = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noPublishToPublic = v; } else { r.skip(fieldType); } } else if(fieldId == 13) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noPublishToBusinessLibrary = v; } else { r.skip(fieldType); } } else if(fieldId == 14) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noCreateTags = v; } else { r.skip(fieldType); } } else if(fieldId == 15) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noUpdateTags = v; } else { r.skip(fieldType); } } else if(fieldId == 16) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noExpungeTags = v; } else { r.skip(fieldType); } } else if(fieldId == 17) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noSetParentTag = v; } else { r.skip(fieldType); } } else if(fieldId == 18) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.noCreateSharedNotebooks = v; } else { r.skip(fieldType); } } else if(fieldId == 19) { if(fieldType == ThriftFieldType::T_I32) { SharedNotebookInstanceRestrictions::type v; readEnumSharedNotebookInstanceRestrictions(r, v); s.updateWhichSharedNotebookRestrictions = v; } else { r.skip(fieldType); } } else if(fieldId == 20) { if(fieldType == ThriftFieldType::T_I32) { SharedNotebookInstanceRestrictions::type v; readEnumSharedNotebookInstanceRestrictions(r, v); s.expungeWhichSharedNotebookRestrictions = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeNotebook(ThriftBinaryBufferWriter& w, const Notebook& s) { w.writeStructBegin("Notebook"); if(s.guid.isSet()) { w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 1); w.writeString(s.guid.ref()); w.writeFieldEnd(); } if(s.name.isSet()) { w.writeFieldBegin("name", ThriftFieldType::T_STRING, 2); w.writeString(s.name.ref()); w.writeFieldEnd(); } if(s.updateSequenceNum.isSet()) { w.writeFieldBegin("updateSequenceNum", ThriftFieldType::T_I32, 5); w.writeI32(s.updateSequenceNum.ref()); w.writeFieldEnd(); } if(s.defaultNotebook.isSet()) { w.writeFieldBegin("defaultNotebook", ThriftFieldType::T_BOOL, 6); w.writeBool(s.defaultNotebook.ref()); w.writeFieldEnd(); } if(s.serviceCreated.isSet()) { w.writeFieldBegin("serviceCreated", ThriftFieldType::T_I64, 7); w.writeI64(s.serviceCreated.ref()); w.writeFieldEnd(); } if(s.serviceUpdated.isSet()) { w.writeFieldBegin("serviceUpdated", ThriftFieldType::T_I64, 8); w.writeI64(s.serviceUpdated.ref()); w.writeFieldEnd(); } if(s.publishing.isSet()) { w.writeFieldBegin("publishing", ThriftFieldType::T_STRUCT, 10); writePublishing(w, s.publishing.ref()); w.writeFieldEnd(); } if(s.published.isSet()) { w.writeFieldBegin("published", ThriftFieldType::T_BOOL, 11); w.writeBool(s.published.ref()); w.writeFieldEnd(); } if(s.stack.isSet()) { w.writeFieldBegin("stack", ThriftFieldType::T_STRING, 12); w.writeString(s.stack.ref()); w.writeFieldEnd(); } if(s.sharedNotebookIds.isSet()) { w.writeFieldBegin("sharedNotebookIds", ThriftFieldType::T_LIST, 13); w.writeListBegin(ThriftFieldType::T_I64, s.sharedNotebookIds.ref().length()); Q_FOREACH(const qint64& elem, s.sharedNotebookIds.ref()) { w.writeI64(elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.sharedNotebooks.isSet()) { w.writeFieldBegin("sharedNotebooks", ThriftFieldType::T_LIST, 14); w.writeListBegin(ThriftFieldType::T_STRUCT, s.sharedNotebooks.ref().length()); Q_FOREACH(const SharedNotebook& elem, s.sharedNotebooks.ref()) { writeSharedNotebook(w, elem); } w.writeListEnd(); w.writeFieldEnd(); } if(s.businessNotebook.isSet()) { w.writeFieldBegin("businessNotebook", ThriftFieldType::T_STRUCT, 15); writeBusinessNotebook(w, s.businessNotebook.ref()); w.writeFieldEnd(); } if(s.contact.isSet()) { w.writeFieldBegin("contact", ThriftFieldType::T_STRUCT, 16); writeUser(w, s.contact.ref()); w.writeFieldEnd(); } if(s.restrictions.isSet()) { w.writeFieldBegin("restrictions", ThriftFieldType::T_STRUCT, 17); writeNotebookRestrictions(w, s.restrictions.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readNotebook(ThriftBinaryBufferReader& r, Notebook& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { Guid v; r.readString(v); s.guid = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.name = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.updateSequenceNum = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.defaultNotebook = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.serviceCreated = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_I64) { qint64 v; r.readI64(v); s.serviceUpdated = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_STRUCT) { Publishing v; readPublishing(r, v); s.publishing = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.published = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.stack = v; } else { r.skip(fieldType); } } else if(fieldId == 13) { if(fieldType == ThriftFieldType::T_LIST) { QList< qint64 > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_I64) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (Notebook.sharedNotebookIds)"); for(quint32 i = 0; i < size; i++) { qint64 elem; r.readI64(elem); v.append(elem); } r.readListEnd(); s.sharedNotebookIds = v; } else { r.skip(fieldType); } } else if(fieldId == 14) { if(fieldType == ThriftFieldType::T_LIST) { QList< SharedNotebook > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (Notebook.sharedNotebooks)"); for(quint32 i = 0; i < size; i++) { SharedNotebook elem; readSharedNotebook(r, elem); v.append(elem); } r.readListEnd(); s.sharedNotebooks = v; } else { r.skip(fieldType); } } else if(fieldId == 15) { if(fieldType == ThriftFieldType::T_STRUCT) { BusinessNotebook v; readBusinessNotebook(r, v); s.businessNotebook = v; } else { r.skip(fieldType); } } else if(fieldId == 16) { if(fieldType == ThriftFieldType::T_STRUCT) { User v; readUser(r, v); s.contact = v; } else { r.skip(fieldType); } } else if(fieldId == 17) { if(fieldType == ThriftFieldType::T_STRUCT) { NotebookRestrictions v; readNotebookRestrictions(r, v); s.restrictions = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeLinkedNotebook(ThriftBinaryBufferWriter& w, const LinkedNotebook& s) { w.writeStructBegin("LinkedNotebook"); if(s.shareName.isSet()) { w.writeFieldBegin("shareName", ThriftFieldType::T_STRING, 2); w.writeString(s.shareName.ref()); w.writeFieldEnd(); } if(s.username.isSet()) { w.writeFieldBegin("username", ThriftFieldType::T_STRING, 3); w.writeString(s.username.ref()); w.writeFieldEnd(); } if(s.shardId.isSet()) { w.writeFieldBegin("shardId", ThriftFieldType::T_STRING, 4); w.writeString(s.shardId.ref()); w.writeFieldEnd(); } if(s.shareKey.isSet()) { w.writeFieldBegin("shareKey", ThriftFieldType::T_STRING, 5); w.writeString(s.shareKey.ref()); w.writeFieldEnd(); } if(s.uri.isSet()) { w.writeFieldBegin("uri", ThriftFieldType::T_STRING, 6); w.writeString(s.uri.ref()); w.writeFieldEnd(); } if(s.guid.isSet()) { w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 7); w.writeString(s.guid.ref()); w.writeFieldEnd(); } if(s.updateSequenceNum.isSet()) { w.writeFieldBegin("updateSequenceNum", ThriftFieldType::T_I32, 8); w.writeI32(s.updateSequenceNum.ref()); w.writeFieldEnd(); } if(s.noteStoreUrl.isSet()) { w.writeFieldBegin("noteStoreUrl", ThriftFieldType::T_STRING, 9); w.writeString(s.noteStoreUrl.ref()); w.writeFieldEnd(); } if(s.webApiUrlPrefix.isSet()) { w.writeFieldBegin("webApiUrlPrefix", ThriftFieldType::T_STRING, 10); w.writeString(s.webApiUrlPrefix.ref()); w.writeFieldEnd(); } if(s.stack.isSet()) { w.writeFieldBegin("stack", ThriftFieldType::T_STRING, 11); w.writeString(s.stack.ref()); w.writeFieldEnd(); } if(s.businessId.isSet()) { w.writeFieldBegin("businessId", ThriftFieldType::T_I32, 12); w.writeI32(s.businessId.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readLinkedNotebook(ThriftBinaryBufferReader& r, LinkedNotebook& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.shareName = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.username = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.shardId = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.shareKey = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.uri = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_STRING) { Guid v; r.readString(v); s.guid = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.updateSequenceNum = v; } else { r.skip(fieldType); } } else if(fieldId == 9) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.noteStoreUrl = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.webApiUrlPrefix = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.stack = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.businessId = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writeNotebookDescriptor(ThriftBinaryBufferWriter& w, const NotebookDescriptor& s) { w.writeStructBegin("NotebookDescriptor"); if(s.guid.isSet()) { w.writeFieldBegin("guid", ThriftFieldType::T_STRING, 1); w.writeString(s.guid.ref()); w.writeFieldEnd(); } if(s.notebookDisplayName.isSet()) { w.writeFieldBegin("notebookDisplayName", ThriftFieldType::T_STRING, 2); w.writeString(s.notebookDisplayName.ref()); w.writeFieldEnd(); } if(s.contactName.isSet()) { w.writeFieldBegin("contactName", ThriftFieldType::T_STRING, 3); w.writeString(s.contactName.ref()); w.writeFieldEnd(); } if(s.hasSharedNotebook.isSet()) { w.writeFieldBegin("hasSharedNotebook", ThriftFieldType::T_BOOL, 4); w.writeBool(s.hasSharedNotebook.ref()); w.writeFieldEnd(); } if(s.joinedUserCount.isSet()) { w.writeFieldBegin("joinedUserCount", ThriftFieldType::T_I32, 5); w.writeI32(s.joinedUserCount.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readNotebookDescriptor(ThriftBinaryBufferReader& r, NotebookDescriptor& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { Guid v; r.readString(v); s.guid = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.notebookDisplayName = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.contactName = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.hasSharedNotebook = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_I32) { qint32 v; r.readI32(v); s.joinedUserCount = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); } void writePublicUserInfo(ThriftBinaryBufferWriter& w, const PublicUserInfo& s) { w.writeStructBegin("PublicUserInfo"); w.writeFieldBegin("userId", ThriftFieldType::T_I32, 1); w.writeI32(s.userId); w.writeFieldEnd(); w.writeFieldBegin("shardId", ThriftFieldType::T_STRING, 2); w.writeString(s.shardId); w.writeFieldEnd(); if(s.privilege.isSet()) { w.writeFieldBegin("privilege", ThriftFieldType::T_I32, 3); w.writeI32(static_cast(s.privilege.ref())); w.writeFieldEnd(); } if(s.username.isSet()) { w.writeFieldBegin("username", ThriftFieldType::T_STRING, 4); w.writeString(s.username.ref()); w.writeFieldEnd(); } if(s.noteStoreUrl.isSet()) { w.writeFieldBegin("noteStoreUrl", ThriftFieldType::T_STRING, 5); w.writeString(s.noteStoreUrl.ref()); w.writeFieldEnd(); } if(s.webApiUrlPrefix.isSet()) { w.writeFieldBegin("webApiUrlPrefix", ThriftFieldType::T_STRING, 6); w.writeString(s.webApiUrlPrefix.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readPublicUserInfo(ThriftBinaryBufferReader& r, PublicUserInfo& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; bool userId_isset = false; bool shardId_isset = false; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I32) { userId_isset = true; UserID v; r.readI32(v); s.userId = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRING) { shardId_isset = true; QString v; r.readString(v); s.shardId = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_I32) { PrivilegeLevel::type v; readEnumPrivilegeLevel(r, v); s.privilege = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.username = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.noteStoreUrl = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.webApiUrlPrefix = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); if(!userId_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "PublicUserInfo.userId has no value"); if(!shardId_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "PublicUserInfo.shardId has no value"); } void writeAuthenticationResult(ThriftBinaryBufferWriter& w, const AuthenticationResult& s) { w.writeStructBegin("AuthenticationResult"); w.writeFieldBegin("currentTime", ThriftFieldType::T_I64, 1); w.writeI64(s.currentTime); w.writeFieldEnd(); w.writeFieldBegin("authenticationToken", ThriftFieldType::T_STRING, 2); w.writeString(s.authenticationToken); w.writeFieldEnd(); w.writeFieldBegin("expiration", ThriftFieldType::T_I64, 3); w.writeI64(s.expiration); w.writeFieldEnd(); if(s.user.isSet()) { w.writeFieldBegin("user", ThriftFieldType::T_STRUCT, 4); writeUser(w, s.user.ref()); w.writeFieldEnd(); } if(s.publicUserInfo.isSet()) { w.writeFieldBegin("publicUserInfo", ThriftFieldType::T_STRUCT, 5); writePublicUserInfo(w, s.publicUserInfo.ref()); w.writeFieldEnd(); } if(s.noteStoreUrl.isSet()) { w.writeFieldBegin("noteStoreUrl", ThriftFieldType::T_STRING, 6); w.writeString(s.noteStoreUrl.ref()); w.writeFieldEnd(); } if(s.webApiUrlPrefix.isSet()) { w.writeFieldBegin("webApiUrlPrefix", ThriftFieldType::T_STRING, 7); w.writeString(s.webApiUrlPrefix.ref()); w.writeFieldEnd(); } if(s.secondFactorRequired.isSet()) { w.writeFieldBegin("secondFactorRequired", ThriftFieldType::T_BOOL, 8); w.writeBool(s.secondFactorRequired.ref()); w.writeFieldEnd(); } if(s.secondFactorDeliveryHint.isSet()) { w.writeFieldBegin("secondFactorDeliveryHint", ThriftFieldType::T_STRING, 9); w.writeString(s.secondFactorDeliveryHint.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readAuthenticationResult(ThriftBinaryBufferReader& r, AuthenticationResult& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; bool currentTime_isset = false; bool authenticationToken_isset = false; bool expiration_isset = false; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_I64) { currentTime_isset = true; qint64 v; r.readI64(v); s.currentTime = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRING) { authenticationToken_isset = true; QString v; r.readString(v); s.authenticationToken = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_I64) { expiration_isset = true; qint64 v; r.readI64(v); s.expiration = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_STRUCT) { User v; readUser(r, v); s.user = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_STRUCT) { PublicUserInfo v; readPublicUserInfo(r, v); s.publicUserInfo = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.noteStoreUrl = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.webApiUrlPrefix = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.secondFactorRequired = v; } else { r.skip(fieldType); } } else if(fieldId == 9) { if(fieldType == ThriftFieldType::T_STRING) { QString v; r.readString(v); s.secondFactorDeliveryHint = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); if(!currentTime_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "AuthenticationResult.currentTime has no value"); if(!authenticationToken_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "AuthenticationResult.authenticationToken has no value"); if(!expiration_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "AuthenticationResult.expiration has no value"); } void writeBootstrapSettings(ThriftBinaryBufferWriter& w, const BootstrapSettings& s) { w.writeStructBegin("BootstrapSettings"); w.writeFieldBegin("serviceHost", ThriftFieldType::T_STRING, 1); w.writeString(s.serviceHost); w.writeFieldEnd(); w.writeFieldBegin("marketingUrl", ThriftFieldType::T_STRING, 2); w.writeString(s.marketingUrl); w.writeFieldEnd(); w.writeFieldBegin("supportUrl", ThriftFieldType::T_STRING, 3); w.writeString(s.supportUrl); w.writeFieldEnd(); w.writeFieldBegin("accountEmailDomain", ThriftFieldType::T_STRING, 4); w.writeString(s.accountEmailDomain); w.writeFieldEnd(); if(s.enableFacebookSharing.isSet()) { w.writeFieldBegin("enableFacebookSharing", ThriftFieldType::T_BOOL, 5); w.writeBool(s.enableFacebookSharing.ref()); w.writeFieldEnd(); } if(s.enableGiftSubscriptions.isSet()) { w.writeFieldBegin("enableGiftSubscriptions", ThriftFieldType::T_BOOL, 6); w.writeBool(s.enableGiftSubscriptions.ref()); w.writeFieldEnd(); } if(s.enableSupportTickets.isSet()) { w.writeFieldBegin("enableSupportTickets", ThriftFieldType::T_BOOL, 7); w.writeBool(s.enableSupportTickets.ref()); w.writeFieldEnd(); } if(s.enableSharedNotebooks.isSet()) { w.writeFieldBegin("enableSharedNotebooks", ThriftFieldType::T_BOOL, 8); w.writeBool(s.enableSharedNotebooks.ref()); w.writeFieldEnd(); } if(s.enableSingleNoteSharing.isSet()) { w.writeFieldBegin("enableSingleNoteSharing", ThriftFieldType::T_BOOL, 9); w.writeBool(s.enableSingleNoteSharing.ref()); w.writeFieldEnd(); } if(s.enableSponsoredAccounts.isSet()) { w.writeFieldBegin("enableSponsoredAccounts", ThriftFieldType::T_BOOL, 10); w.writeBool(s.enableSponsoredAccounts.ref()); w.writeFieldEnd(); } if(s.enableTwitterSharing.isSet()) { w.writeFieldBegin("enableTwitterSharing", ThriftFieldType::T_BOOL, 11); w.writeBool(s.enableTwitterSharing.ref()); w.writeFieldEnd(); } if(s.enableLinkedInSharing.isSet()) { w.writeFieldBegin("enableLinkedInSharing", ThriftFieldType::T_BOOL, 12); w.writeBool(s.enableLinkedInSharing.ref()); w.writeFieldEnd(); } if(s.enablePublicNotebooks.isSet()) { w.writeFieldBegin("enablePublicNotebooks", ThriftFieldType::T_BOOL, 13); w.writeBool(s.enablePublicNotebooks.ref()); w.writeFieldEnd(); } w.writeFieldStop(); w.writeStructEnd(); } void readBootstrapSettings(ThriftBinaryBufferReader& r, BootstrapSettings& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; bool serviceHost_isset = false; bool marketingUrl_isset = false; bool supportUrl_isset = false; bool accountEmailDomain_isset = false; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { serviceHost_isset = true; QString v; r.readString(v); s.serviceHost = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRING) { marketingUrl_isset = true; QString v; r.readString(v); s.marketingUrl = v; } else { r.skip(fieldType); } } else if(fieldId == 3) { if(fieldType == ThriftFieldType::T_STRING) { supportUrl_isset = true; QString v; r.readString(v); s.supportUrl = v; } else { r.skip(fieldType); } } else if(fieldId == 4) { if(fieldType == ThriftFieldType::T_STRING) { accountEmailDomain_isset = true; QString v; r.readString(v); s.accountEmailDomain = v; } else { r.skip(fieldType); } } else if(fieldId == 5) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.enableFacebookSharing = v; } else { r.skip(fieldType); } } else if(fieldId == 6) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.enableGiftSubscriptions = v; } else { r.skip(fieldType); } } else if(fieldId == 7) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.enableSupportTickets = v; } else { r.skip(fieldType); } } else if(fieldId == 8) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.enableSharedNotebooks = v; } else { r.skip(fieldType); } } else if(fieldId == 9) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.enableSingleNoteSharing = v; } else { r.skip(fieldType); } } else if(fieldId == 10) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.enableSponsoredAccounts = v; } else { r.skip(fieldType); } } else if(fieldId == 11) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.enableTwitterSharing = v; } else { r.skip(fieldType); } } else if(fieldId == 12) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.enableLinkedInSharing = v; } else { r.skip(fieldType); } } else if(fieldId == 13) { if(fieldType == ThriftFieldType::T_BOOL) { bool v; r.readBool(v); s.enablePublicNotebooks = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); if(!serviceHost_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "BootstrapSettings.serviceHost has no value"); if(!marketingUrl_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "BootstrapSettings.marketingUrl has no value"); if(!supportUrl_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "BootstrapSettings.supportUrl has no value"); if(!accountEmailDomain_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "BootstrapSettings.accountEmailDomain has no value"); } void writeBootstrapProfile(ThriftBinaryBufferWriter& w, const BootstrapProfile& s) { w.writeStructBegin("BootstrapProfile"); w.writeFieldBegin("name", ThriftFieldType::T_STRING, 1); w.writeString(s.name); w.writeFieldEnd(); w.writeFieldBegin("settings", ThriftFieldType::T_STRUCT, 2); writeBootstrapSettings(w, s.settings); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); } void readBootstrapProfile(ThriftBinaryBufferReader& r, BootstrapProfile& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; bool name_isset = false; bool settings_isset = false; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_STRING) { name_isset = true; QString v; r.readString(v); s.name = v; } else { r.skip(fieldType); } } else if(fieldId == 2) { if(fieldType == ThriftFieldType::T_STRUCT) { settings_isset = true; BootstrapSettings v; readBootstrapSettings(r, v); s.settings = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); if(!name_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "BootstrapProfile.name has no value"); if(!settings_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "BootstrapProfile.settings has no value"); } void writeBootstrapInfo(ThriftBinaryBufferWriter& w, const BootstrapInfo& s) { w.writeStructBegin("BootstrapInfo"); w.writeFieldBegin("profiles", ThriftFieldType::T_LIST, 1); w.writeListBegin(ThriftFieldType::T_STRUCT, s.profiles.length()); Q_FOREACH(const BootstrapProfile& elem, s.profiles) { writeBootstrapProfile(w, elem); } w.writeListEnd(); w.writeFieldEnd(); w.writeFieldStop(); w.writeStructEnd(); } void readBootstrapInfo(ThriftBinaryBufferReader& r, BootstrapInfo& s) { QString fname; ThriftFieldType::type fieldType; qint16 fieldId; bool profiles_isset = false; r.readStructBegin(fname); while(true) { r.readFieldBegin(fname, fieldType, fieldId); if(fieldType == ThriftFieldType::T_STOP) break; if(fieldId == 1) { if(fieldType == ThriftFieldType::T_LIST) { profiles_isset = true; QList< BootstrapProfile > v; quint32 size; ThriftFieldType::type elemType; r.readListBegin(elemType, size); v.reserve(size); if(elemType != ThriftFieldType::T_STRUCT) throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect list type (BootstrapInfo.profiles)"); for(quint32 i = 0; i < size; i++) { BootstrapProfile elem; readBootstrapProfile(r, elem); v.append(elem); } r.readListEnd(); s.profiles = v; } else { r.skip(fieldType); } } else { r.skip(fieldType); } r.readFieldEnd(); } r.readStructEnd(); if(!profiles_isset) throw ThriftException(ThriftException::Type::INVALID_DATA, "BootstrapInfo.profiles has no value"); } void readEnumEDAMErrorCode(ThriftBinaryBufferReader& r, EDAMErrorCode::type& e) { qint32 i; r.readI32(i); switch(i) { case static_cast(EDAMErrorCode::UNKNOWN): e = EDAMErrorCode::UNKNOWN; break; case static_cast(EDAMErrorCode::BAD_DATA_FORMAT): e = EDAMErrorCode::BAD_DATA_FORMAT; break; case static_cast(EDAMErrorCode::PERMISSION_DENIED): e = EDAMErrorCode::PERMISSION_DENIED; break; case static_cast(EDAMErrorCode::INTERNAL_ERROR): e = EDAMErrorCode::INTERNAL_ERROR; break; case static_cast(EDAMErrorCode::DATA_REQUIRED): e = EDAMErrorCode::DATA_REQUIRED; break; case static_cast(EDAMErrorCode::LIMIT_REACHED): e = EDAMErrorCode::LIMIT_REACHED; break; case static_cast(EDAMErrorCode::QUOTA_REACHED): e = EDAMErrorCode::QUOTA_REACHED; break; case static_cast(EDAMErrorCode::INVALID_AUTH): e = EDAMErrorCode::INVALID_AUTH; break; case static_cast(EDAMErrorCode::AUTH_EXPIRED): e = EDAMErrorCode::AUTH_EXPIRED; break; case static_cast(EDAMErrorCode::DATA_CONFLICT): e = EDAMErrorCode::DATA_CONFLICT; break; case static_cast(EDAMErrorCode::ENML_VALIDATION): e = EDAMErrorCode::ENML_VALIDATION; break; case static_cast(EDAMErrorCode::SHARD_UNAVAILABLE): e = EDAMErrorCode::SHARD_UNAVAILABLE; break; case static_cast(EDAMErrorCode::LEN_TOO_SHORT): e = EDAMErrorCode::LEN_TOO_SHORT; break; case static_cast(EDAMErrorCode::LEN_TOO_LONG): e = EDAMErrorCode::LEN_TOO_LONG; break; case static_cast(EDAMErrorCode::TOO_FEW): e = EDAMErrorCode::TOO_FEW; break; case static_cast(EDAMErrorCode::TOO_MANY): e = EDAMErrorCode::TOO_MANY; break; case static_cast(EDAMErrorCode::UNSUPPORTED_OPERATION): e = EDAMErrorCode::UNSUPPORTED_OPERATION; break; case static_cast(EDAMErrorCode::TAKEN_DOWN): e = EDAMErrorCode::TAKEN_DOWN; break; case static_cast(EDAMErrorCode::RATE_LIMIT_REACHED): e = EDAMErrorCode::RATE_LIMIT_REACHED; break; default: throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect value for enum EDAMErrorCode"); } } void readEnumPrivilegeLevel(ThriftBinaryBufferReader& r, PrivilegeLevel::type& e) { qint32 i; r.readI32(i); switch(i) { case static_cast(PrivilegeLevel::NORMAL): e = PrivilegeLevel::NORMAL; break; case static_cast(PrivilegeLevel::PREMIUM): e = PrivilegeLevel::PREMIUM; break; case static_cast(PrivilegeLevel::VIP): e = PrivilegeLevel::VIP; break; case static_cast(PrivilegeLevel::MANAGER): e = PrivilegeLevel::MANAGER; break; case static_cast(PrivilegeLevel::SUPPORT): e = PrivilegeLevel::SUPPORT; break; case static_cast(PrivilegeLevel::ADMIN): e = PrivilegeLevel::ADMIN; break; default: throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect value for enum PrivilegeLevel"); } } void readEnumQueryFormat(ThriftBinaryBufferReader& r, QueryFormat::type& e) { qint32 i; r.readI32(i); switch(i) { case static_cast(QueryFormat::USER): e = QueryFormat::USER; break; case static_cast(QueryFormat::SEXP): e = QueryFormat::SEXP; break; default: throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect value for enum QueryFormat"); } } void readEnumNoteSortOrder(ThriftBinaryBufferReader& r, NoteSortOrder::type& e) { qint32 i; r.readI32(i); switch(i) { case static_cast(NoteSortOrder::CREATED): e = NoteSortOrder::CREATED; break; case static_cast(NoteSortOrder::UPDATED): e = NoteSortOrder::UPDATED; break; case static_cast(NoteSortOrder::RELEVANCE): e = NoteSortOrder::RELEVANCE; break; case static_cast(NoteSortOrder::UPDATE_SEQUENCE_NUMBER): e = NoteSortOrder::UPDATE_SEQUENCE_NUMBER; break; case static_cast(NoteSortOrder::TITLE): e = NoteSortOrder::TITLE; break; default: throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect value for enum NoteSortOrder"); } } void readEnumPremiumOrderStatus(ThriftBinaryBufferReader& r, PremiumOrderStatus::type& e) { qint32 i; r.readI32(i); switch(i) { case static_cast(PremiumOrderStatus::NONE): e = PremiumOrderStatus::NONE; break; case static_cast(PremiumOrderStatus::PENDING): e = PremiumOrderStatus::PENDING; break; case static_cast(PremiumOrderStatus::ACTIVE): e = PremiumOrderStatus::ACTIVE; break; case static_cast(PremiumOrderStatus::FAILED): e = PremiumOrderStatus::FAILED; break; case static_cast(PremiumOrderStatus::CANCELLATION_PENDING): e = PremiumOrderStatus::CANCELLATION_PENDING; break; case static_cast(PremiumOrderStatus::CANCELED): e = PremiumOrderStatus::CANCELED; break; default: throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect value for enum PremiumOrderStatus"); } } void readEnumSharedNotebookPrivilegeLevel(ThriftBinaryBufferReader& r, SharedNotebookPrivilegeLevel::type& e) { qint32 i; r.readI32(i); switch(i) { case static_cast(SharedNotebookPrivilegeLevel::READ_NOTEBOOK): e = SharedNotebookPrivilegeLevel::READ_NOTEBOOK; break; case static_cast(SharedNotebookPrivilegeLevel::MODIFY_NOTEBOOK_PLUS_ACTIVITY): e = SharedNotebookPrivilegeLevel::MODIFY_NOTEBOOK_PLUS_ACTIVITY; break; case static_cast(SharedNotebookPrivilegeLevel::READ_NOTEBOOK_PLUS_ACTIVITY): e = SharedNotebookPrivilegeLevel::READ_NOTEBOOK_PLUS_ACTIVITY; break; case static_cast(SharedNotebookPrivilegeLevel::GROUP): e = SharedNotebookPrivilegeLevel::GROUP; break; case static_cast(SharedNotebookPrivilegeLevel::FULL_ACCESS): e = SharedNotebookPrivilegeLevel::FULL_ACCESS; break; case static_cast(SharedNotebookPrivilegeLevel::BUSINESS_FULL_ACCESS): e = SharedNotebookPrivilegeLevel::BUSINESS_FULL_ACCESS; break; default: throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect value for enum SharedNotebookPrivilegeLevel"); } } void readEnumSponsoredGroupRole(ThriftBinaryBufferReader& r, SponsoredGroupRole::type& e) { qint32 i; r.readI32(i); switch(i) { case static_cast(SponsoredGroupRole::GROUP_MEMBER): e = SponsoredGroupRole::GROUP_MEMBER; break; case static_cast(SponsoredGroupRole::GROUP_ADMIN): e = SponsoredGroupRole::GROUP_ADMIN; break; case static_cast(SponsoredGroupRole::GROUP_OWNER): e = SponsoredGroupRole::GROUP_OWNER; break; default: throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect value for enum SponsoredGroupRole"); } } void readEnumBusinessUserRole(ThriftBinaryBufferReader& r, BusinessUserRole::type& e) { qint32 i; r.readI32(i); switch(i) { case static_cast(BusinessUserRole::ADMIN): e = BusinessUserRole::ADMIN; break; case static_cast(BusinessUserRole::NORMAL): e = BusinessUserRole::NORMAL; break; default: throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect value for enum BusinessUserRole"); } } void readEnumSharedNotebookInstanceRestrictions(ThriftBinaryBufferReader& r, SharedNotebookInstanceRestrictions::type& e) { qint32 i; r.readI32(i); switch(i) { case static_cast(SharedNotebookInstanceRestrictions::ONLY_JOINED_OR_PREVIEW): e = SharedNotebookInstanceRestrictions::ONLY_JOINED_OR_PREVIEW; break; case static_cast(SharedNotebookInstanceRestrictions::NO_SHARED_NOTEBOOKS): e = SharedNotebookInstanceRestrictions::NO_SHARED_NOTEBOOKS; break; default: throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect value for enum SharedNotebookInstanceRestrictions"); } } void readEnumReminderEmailConfig(ThriftBinaryBufferReader& r, ReminderEmailConfig::type& e) { qint32 i; r.readI32(i); switch(i) { case static_cast(ReminderEmailConfig::DO_NOT_SEND): e = ReminderEmailConfig::DO_NOT_SEND; break; case static_cast(ReminderEmailConfig::SEND_DAILY_EMAIL): e = ReminderEmailConfig::SEND_DAILY_EMAIL; break; default: throw ThriftException(ThriftException::Type::INVALID_DATA, "Incorrect value for enum ReminderEmailConfig"); } } /** @endcond */ } nixnote2-2.0.2/qevercloud/generated/types.h000066400000000000000000004214761315604104400207210ustar00rootroot00000000000000// This file is generated from Evernote Thrift API and is a part of the QEverCloud project #ifndef QEVERCLOUD_GENERATED_TYPES_H #define QEVERCLOUD_GENERATED_TYPES_H #include #include #include #include #include #include #include #include "../Optional.h" #include "EDAMErrorCode.h" #include #include namespace qevercloud { /** * This enumeration defines the possible permission levels for a user. * Free accounts will have a level of NORMAL and paid Premium accounts * will have a level of PREMIUM. */ struct PrivilegeLevel { enum type { NORMAL = 1, PREMIUM = 3, VIP = 5, MANAGER = 7, SUPPORT = 8, ADMIN = 9 }; }; /** * Every search query is specified as a sequence of characters. * Currently, only the USER query format is supported. */ struct QueryFormat { enum type { USER = 1, SEXP = 2 }; }; /** * This enumeration defines the possible sort ordering for notes when * they are returned from a search result. */ struct NoteSortOrder { enum type { CREATED = 1, UPDATED = 2, RELEVANCE = 3, UPDATE_SEQUENCE_NUMBER = 4, TITLE = 5 }; }; /** * This enumeration defines the possible states of a premium account * * NONE: the user has never attempted to become a premium subscriber * * PENDING: the user has requested a premium account but their charge has not * been confirmed * * ACTIVE: the user has been charged and their premium account is in good * standing * * FAILED: the system attempted to charge the was denied. Their premium * privileges have been revoked. We will periodically attempt to re-validate * their order. * * CANCELLATION_PENDING: the user has requested that no further charges be made * but the current account is still active. * * CANCELED: the premium account was canceled either because of failure to pay * or user cancelation. No more attempts will be made to activate the account. */ struct PremiumOrderStatus { enum type { NONE = 0, PENDING = 1, ACTIVE = 2, FAILED = 3, CANCELLATION_PENDING = 4, CANCELED = 5 }; }; /** * Privilege levels for accessing shared notebooks. * * READ_NOTEBOOK: Recipient is able to read the contents of the shared notebook * but does to have access to information about other recipients of the * notebook or the activity stream information. * * MODIFY_NOTEBOOK_PLUS_ACTIVITY: Recipient has rights to read and modify the contents * of the shared notebook, including the right to move notes to the trash and to create * notes in the notebook. The recipient can also access information about other * recipients and the activity stream. * * READ_NOTEBOOK_PLUS_ACTIVITY: Recipient has READ_NOTEBOOK rights and can also * access information about other recipients and the activity stream. * * GROUP: If the user belongs to a group, such as a Business, that has a defined * privilege level, use the privilege level of the group as the privilege for * the individual. * * FULL_ACCESS: Recipient has full rights to the shared notebook and recipient lists, * including privilege to revoke and create invitations and to change privilege * levels on invitations for individuals. This privilege level is primarily intended * for use by individual shares. * * BUSINESS_FULL_ACCESS: Intended for use with Business Notebooks, a * BUSINESS_FULL_ACCESS level is FULL_ACCESS with the additional rights to * change how the notebook will appear in the business library, including the * rights to publish and unpublish the notebook from the library. */ struct SharedNotebookPrivilegeLevel { enum type { READ_NOTEBOOK = 0, MODIFY_NOTEBOOK_PLUS_ACTIVITY = 1, READ_NOTEBOOK_PLUS_ACTIVITY = 2, GROUP = 3, FULL_ACCESS = 4, BUSINESS_FULL_ACCESS = 5 }; }; /** * Enumeration of the roles that a User can have within a sponsored group. * * GROUP_MEMBER: The user is a member of the group with no special privileges. * * GROUP_ADMIN: The user is an administrator within the group. * * GROUP_OWNER: The user is the owner of the group. */ struct SponsoredGroupRole { enum type { GROUP_MEMBER = 1, GROUP_ADMIN = 2, GROUP_OWNER = 3 }; }; /** * Enumeration of the roles that a User can have within an Evernote Business account. * * ADMIN: The user is an administrator of the Evernote Business account. * * NORMAL: The user is a regular user within the Evernote Business account. */ struct BusinessUserRole { enum type { ADMIN = 1, NORMAL = 2 }; }; /** * An enumeration describing restrictions on the domain of shared notebook * instances that are valid for a given operation, as used, for example, in * NotebookRestrictions. * * ONLY_JOINED_OR_PREVIEW: The domain consists of shared notebooks that * "belong" to the recipient or still available for preview by any recipient. * Shared notebooks that the recipient has joined (the username has already been * assigned to our user) are in the domain. Additionally, shared notebooks * that allow preview and have not yet been joined are in the domain. * * NO_SHARED_NOTEBOOKS: No shared notebooks are applicable to the operation. */ struct SharedNotebookInstanceRestrictions { enum type { ONLY_JOINED_OR_PREVIEW = 1, NO_SHARED_NOTEBOOKS = 2 }; }; /** * An enumeration describing the configuration state related to receiving * reminder e-mails from the service. Reminder e-mails summarize notes * based on their Note.attributes.reminderTime values. * * DO_NOT_SEND: The user has selected to not receive reminder e-mail. * * SEND_DAILY_EMAIL: The user has selected to receive reminder e-mail for those * days when there is a reminder. */ struct ReminderEmailConfig { enum type { DO_NOT_SEND = 1, SEND_DAILY_EMAIL = 2 }; }; /** * Every Evernote account is assigned a unique numeric identifier which * will not change for the life of the account. This is independent of * the (string-based) "username" which is known by the user for login * purposes. The user should have no reason to know their UserID. */ typedef qint32 UserID; /** * Most data elements within a user's account (e.g. notebooks, notes, tags, * resources, etc.) are internally referred to using a globally unique * identifier that is written in a standard string format. For example: * * "8743428c-ef91-4d05-9e7c-4a2e856e813a" * * The internal components of the GUID are not given any particular meaning: * only the entire string is relevant as a unique identifier. */ typedef QString Guid; /** * An Evernote Timestamp is the date and time of an event in UTC time. * This is expressed as a specific number of milliseconds since the * standard base "epoch" of: * * January 1, 1970, 00:00:00 GMT * * NOTE: the time is expressed at the resolution of milliseconds, but * the value is only precise to the level of seconds. This means that * the last three (decimal) digits of the timestamp will be '000'. * * The Thrift IDL specification does not include a native date/time type, * so this value is used instead. * * The service will accept timestamp values (e.g. for Note created and update * times) between 1000-01-01 and 9999-12-31 */ typedef qint64 Timestamp; /** * This structure encapsulates the information about the state of the * user's account for the purpose of "state based" synchronization. **/ struct SyncState { /** The server's current date and time. */ Timestamp currentTime; /** The cutoff date and time for client caches to be updated via incremental synchronization. Any clients that were last synched with the server before this date/time must do a full resync of all objects. This cutoff point will change over time as archival data is deleted or special circumstances on the service require resynchronization. */ Timestamp fullSyncBefore; /** Indicates the total number of transactions that have been committed within the account. This reflects (for example) the number of discrete additions or modifications that have been made to the data in this account (tags, notes, resources, etc.). This number is the "high water mark" for Update Sequence Numbers (USN) within the account. */ qint32 updateCount; /** The total number of bytes that have been uploaded to this account in the current monthly period. This can be compared against Accounting.uploadLimit (from the UserStore) to determine how close the user is to their monthly upload limit. This value may not be present if the SyncState has been retrieved by a caller that only has read access to the account. */ Optional< qint64 > uploaded; bool operator==(const SyncState& other) const { return (currentTime == other.currentTime) && (fullSyncBefore == other.fullSyncBefore) && (updateCount == other.updateCount) && uploaded.isEqual(other.uploaded) ; } bool operator!=(const SyncState& other) const { return !(*this == other); } }; /** * This structure is used with the 'getFilteredSyncChunk' call to provide * fine-grained control over the data that's returned when a client needs * to synchronize with the service. Each flag in this structure specifies * whether to include one class of data in the results of that call. * **/ struct SyncChunkFilter { /** If true, then the server will include the SyncChunks.notes field */ Optional< bool > includeNotes; /** If true, then the server will include the 'resources' field on all of the Notes that are in SyncChunk.notes. If 'includeNotes' is false, then this will have no effect. */ Optional< bool > includeNoteResources; /** If true, then the server will include the 'attributes' field on all of the Notes that are in SyncChunks.notes. If 'includeNotes' is false, then this will have no effect. */ Optional< bool > includeNoteAttributes; /** If true, then the server will include the SyncChunks.notebooks field */ Optional< bool > includeNotebooks; /** If true, then the server will include the SyncChunks.tags field */ Optional< bool > includeTags; /** If true, then the server will include the SyncChunks.searches field */ Optional< bool > includeSearches; /** If true, then the server will include the SyncChunks.resources field. Since the Resources are also provided with their Note (in the Notes.resources list), this is primarily useful for clients that want to watch for changes to individual Resources due to recognition data being added. */ Optional< bool > includeResources; /** If true, then the server will include the SyncChunks.linkedNotebooks field. */ Optional< bool > includeLinkedNotebooks; /** If true, then the server will include the 'expunged' data for any type of included data. For example, if 'includeTags' and 'includeExpunged' are both true, then the SyncChunks.expungedTags field will be set with the GUIDs of tags that have been expunged from the server. */ Optional< bool > includeExpunged; /** If true, then the values for the applicationData map will be filled in, assuming notes and note attributes are being returned. Otherwise, only the keysOnly field will be filled in. */ Optional< bool > includeNoteApplicationDataFullMap; /** If true, then the fullMap values for the applicationData map will be filled in, assuming resources and resource attributes are being returned (includeResources is true). Otherwise, only the keysOnly field will be filled in. */ Optional< bool > includeResourceApplicationDataFullMap; /** If true, then the fullMap values for the applicationData map will be filled in for resources found inside of notes, assuming resources are being returned in notes (includeNoteResources is true). Otherwise, only the keysOnly field will be filled in. */ Optional< bool > includeNoteResourceApplicationDataFullMap; /** If set, then only send notes whose content class matches this value. The value can be a literal match or, if the last character is an asterisk, a prefix match. */ Optional< QString > requireNoteContentClass; bool operator==(const SyncChunkFilter& other) const { return includeNotes.isEqual(other.includeNotes) && includeNoteResources.isEqual(other.includeNoteResources) && includeNoteAttributes.isEqual(other.includeNoteAttributes) && includeNotebooks.isEqual(other.includeNotebooks) && includeTags.isEqual(other.includeTags) && includeSearches.isEqual(other.includeSearches) && includeResources.isEqual(other.includeResources) && includeLinkedNotebooks.isEqual(other.includeLinkedNotebooks) && includeExpunged.isEqual(other.includeExpunged) && includeNoteApplicationDataFullMap.isEqual(other.includeNoteApplicationDataFullMap) && includeResourceApplicationDataFullMap.isEqual(other.includeResourceApplicationDataFullMap) && includeNoteResourceApplicationDataFullMap.isEqual(other.includeNoteResourceApplicationDataFullMap) && requireNoteContentClass.isEqual(other.requireNoteContentClass) ; } bool operator!=(const SyncChunkFilter& other) const { return !(*this == other); } }; /** * A list of criteria that are used to indicate which notes are desired from * the account. This is used in queries to the NoteStore to determine * which notes should be retrieved. * **/ struct NoteFilter { /** The NoteSortOrder value indicating what criterion should be used to sort the results of the filter. */ Optional< qint32 > order; /** If true, the results will be ascending in the requested sort order. If false, the results will be descending. */ Optional< bool > ascending; /** If present, a search query string that will filter the set of notes to be returned. Accepts the full search grammar documented in the Evernote API Overview. */ Optional< QString > words; /** If present, the Guid of the notebook that must contain the notes. */ Optional< Guid > notebookGuid; /** If present, the list of tags (by GUID) that must be present on the notes. */ Optional< QList< Guid > > tagGuids; /** The zone ID for the user, which will be used to interpret any dates or times in the queries that do not include their desired zone information. For example, if a query requests notes created "yesterday", this will be evaluated from the provided time zone, if provided. The format must be encoded as a standard zone ID such as "America/Los_Angeles". */ Optional< QString > timeZone; /** If true, then only notes that are not active (i.e. notes in the Trash) will be returned. Otherwise, only active notes will be returned. There is no way to find both active and inactive notes in a single query. */ Optional< bool > inactive; /** If present, a search query string that may or may not influence the notes to be returned, both in terms of coverage as well as of order. Think of it as a wish list, not a requirement. Accepts the full search grammar documented in the Evernote API Overview. */ Optional< QString > emphasized; bool operator==(const NoteFilter& other) const { return order.isEqual(other.order) && ascending.isEqual(other.ascending) && words.isEqual(other.words) && notebookGuid.isEqual(other.notebookGuid) && tagGuids.isEqual(other.tagGuids) && timeZone.isEqual(other.timeZone) && inactive.isEqual(other.inactive) && emphasized.isEqual(other.emphasized) ; } bool operator!=(const NoteFilter& other) const { return !(*this == other); } }; /** * This structure is provided to the findNotesMetadata function to specify * the subset of fields that should be included in each NoteMetadata element * that is returned in the NotesMetadataList. * Each field on this structure is a boolean flag that indicates whether the * corresponding field should be included in the NoteMetadata structure when * it is returned. For example, if the 'includeTitle' field is set on this * structure when calling findNotesMetadata, then each NoteMetadata in the * list should have its 'title' field set. * If one of the fields in this spec is not set, then it will be treated as * 'false' by the server, so the default behavior is to include nothing in * replies (but the mandatory GUID) */ struct NotesMetadataResultSpec { /** NOT DOCUMENTED */ Optional< bool > includeTitle; /** NOT DOCUMENTED */ Optional< bool > includeContentLength; /** NOT DOCUMENTED */ Optional< bool > includeCreated; /** NOT DOCUMENTED */ Optional< bool > includeUpdated; /** NOT DOCUMENTED */ Optional< bool > includeDeleted; /** NOT DOCUMENTED */ Optional< bool > includeUpdateSequenceNum; /** NOT DOCUMENTED */ Optional< bool > includeNotebookGuid; /** NOT DOCUMENTED */ Optional< bool > includeTagGuids; /** NOT DOCUMENTED */ Optional< bool > includeAttributes; /** NOT DOCUMENTED */ Optional< bool > includeLargestResourceMime; /** NOT DOCUMENTED */ Optional< bool > includeLargestResourceSize; bool operator==(const NotesMetadataResultSpec& other) const { return includeTitle.isEqual(other.includeTitle) && includeContentLength.isEqual(other.includeContentLength) && includeCreated.isEqual(other.includeCreated) && includeUpdated.isEqual(other.includeUpdated) && includeDeleted.isEqual(other.includeDeleted) && includeUpdateSequenceNum.isEqual(other.includeUpdateSequenceNum) && includeNotebookGuid.isEqual(other.includeNotebookGuid) && includeTagGuids.isEqual(other.includeTagGuids) && includeAttributes.isEqual(other.includeAttributes) && includeLargestResourceMime.isEqual(other.includeLargestResourceMime) && includeLargestResourceSize.isEqual(other.includeLargestResourceSize) ; } bool operator!=(const NotesMetadataResultSpec& other) const { return !(*this == other); } }; /** * A data structure representing the number of notes for each notebook * and tag with a non-zero set of applicable notes. * **/ struct NoteCollectionCounts { /** A mapping from the Notebook GUID to the number of notes (from some selection) that are in the corresponding notebook. */ Optional< QMap< Guid, qint32 > > notebookCounts; /** A mapping from the Tag GUID to the number of notes (from some selection) that have the corresponding tag. */ Optional< QMap< Guid, qint32 > > tagCounts; /** If this is set, then this is the number of notes that are in the trash. If this is not set, then the number of notes in the trash hasn't been reported. (I.e. if there are no notes in the trash, this will be set to 0.) */ Optional< qint32 > trashCount; bool operator==(const NoteCollectionCounts& other) const { return notebookCounts.isEqual(other.notebookCounts) && tagCounts.isEqual(other.tagCounts) && trashCount.isEqual(other.trashCount) ; } bool operator!=(const NoteCollectionCounts& other) const { return !(*this == other); } }; /** * Identifying information about previous versions of a note that are backed up * within Evernote's servers. Used in the return value of the listNoteVersions * call. * * */ struct NoteVersionId { /** The update sequence number for the Note when it last had this content. This serves to uniquely identify each version of the note, since USN values are unique within an account for each update. */ qint32 updateSequenceNum; /** The 'updated' time that was set on the Note when it had this version of the content. This is the user-modifiable modification time on the note, so it's not reliable for guaranteeing the order of various versions. (E.g. if someone modifies the note, then changes this time manually into the past and then updates the note again.) */ Timestamp updated; /** A timestamp that holds the date and time when this version of the note was backed up by Evernote's servers. This */ Timestamp saved; /** The title of the note when this particular version was saved. (The current title of the note may differ from this value.) */ QString title; bool operator==(const NoteVersionId& other) const { return (updateSequenceNum == other.updateSequenceNum) && (updated == other.updated) && (saved == other.saved) && (title == other.title) ; } bool operator!=(const NoteVersionId& other) const { return !(*this == other); } }; /** * This structure is passed from clients to the Evernote service when they wish * to relay coarse-grained usage metrics to the service to help improve * products. * * */ struct ClientUsageMetrics { /** This field contains a count of the number of usage "sessions" that have occurred with this client which have not previously been reported to the service. A "session" is defined as one of the 96 fifteen-minute intervals of the day when someone used Evernote's interface at least once. So if a user interacts with an Evernote client at 12:18, 12:24, and 12:36, and then the client synchronizes at 12:39, it would report that there were two previously-unreported sessions (one session for the 12:15-12:30 time period, and one for the 12:30-12:45 period). If the user used Evernote again at 12:41 and synchronized at 12:43, it would not report any new sessions, because the 12:30-12:45 session had already been reported. */ Optional< qint32 > sessions; bool operator==(const ClientUsageMetrics& other) const { return sessions.isEqual(other.sessions) ; } bool operator!=(const ClientUsageMetrics& other) const { return !(*this == other); } }; /** * A description of the thing for which we are searching for related * entities. * * You must specify either noteGuid or plainText, but * not both. filter and referenceUri are optional. * * */ struct RelatedQuery { /** The GUID of an existing note in your account for which related entities will be found. */ Optional< QString > noteGuid; /** A string of plain text for which to find related entities. You should provide a text block with a number of characters between EDAM_RELATED_PLAINTEXT_LEN_MIN and EDAM_RELATED_PLAINTEXT_LEN_MAX. */ Optional< QString > plainText; /** The list of criteria that will constrain the notes being considered related. Please note that some of the parameters may be ignored, such as order and ascending. */ Optional< NoteFilter > filter; /** A URI string specifying a reference entity, around which "relatedness" should be based. This can be an URL pointing to a web page, for example. */ Optional< QString > referenceUri; bool operator==(const RelatedQuery& other) const { return noteGuid.isEqual(other.noteGuid) && plainText.isEqual(other.plainText) && filter.isEqual(other.filter) && referenceUri.isEqual(other.referenceUri) ; } bool operator!=(const RelatedQuery& other) const { return !(*this == other); } }; /** * A description of the thing for which the service will find related * entities, via findRelated(), together with a description of what * type of entities and how many you are seeking in the * RelatedResult. * * */ struct RelatedResultSpec { /** Return notes that are related to the query, but no more than this many. Any value greater than EDAM_RELATED_MAX_NOTES will be silently capped. If you do not set this field, then no notes will be returned. */ Optional< qint32 > maxNotes; /** Return notebooks that are related to the query, but no more than this many. Any value greater than EDAM_RELATED_MAX_NOTEBOOKS will be silently capped. If you do not set this field, then no notebooks will be returned. */ Optional< qint32 > maxNotebooks; /** Return tags that are related to the query, but no more than this many. Any value greater than EDAM_RELATED_MAX_TAGS will be silently capped. If you do not set this field, then no tags will be returned. */ Optional< qint32 > maxTags; /** Require that all returned related notebooks are writable. The user will be able to create notes in all returned notebooks. However, individual notes returned may still belong to notebooks in which the user lacks the ability to create notes. */ Optional< bool > writableNotebooksOnly; /** If set to true, return the containingNotebooks field in the RelatedResult, which will contain the list of notebooks to to which the returned related notes belong. */ Optional< bool > includeContainingNotebooks; bool operator==(const RelatedResultSpec& other) const { return maxNotes.isEqual(other.maxNotes) && maxNotebooks.isEqual(other.maxNotebooks) && maxTags.isEqual(other.maxTags) && writableNotebooksOnly.isEqual(other.writableNotebooksOnly) && includeContainingNotebooks.isEqual(other.includeContainingNotebooks) ; } bool operator!=(const RelatedResultSpec& other) const { return !(*this == other); } }; /** * In several places, EDAM exchanges blocks of bytes of data for a component * which may be relatively large. For example: the contents of a clipped * HTML note, the bytes of an embedded image, or the recognition XML for * a large image. This structure is used in the protocol to represent * any of those large blocks of data when they are transmitted or when * they are only referenced their metadata. * **/ struct Data { /** This field carries a one-way hash of the contents of the data body, in binary form. The hash function is MD5
      Length: EDAM_HASH_LEN (exactly) */ Optional< QByteArray > bodyHash; /** The length, in bytes, of the data body. */ Optional< qint32 > size; /** This field is set to contain the binary contents of the data whenever the resource is being transferred. If only metadata is being exchanged, this field will be empty. For example, a client could notify the service about the change to an attribute for a resource without transmitting the binary resource contents. */ Optional< QByteArray > body; bool operator==(const Data& other) const { return bodyHash.isEqual(other.bodyHash) && size.isEqual(other.size) && body.isEqual(other.body) ; } bool operator!=(const Data& other) const { return !(*this == other); } }; /** * A structure holding the optional attributes that can be stored * on a User. These are generally less critical than the core User fields. * **/ struct UserAttributes { /** the location string that should be associated with the user in order to determine where notes are taken if not otherwise specified.
      Length: EDAM_ATTRIBUTE_LEN_MIN - EDAM_ATTRIBUTE_LEN_MAX */ Optional< QString > defaultLocationName; /** if set, this is the latitude that should be assigned to any notes that have no other latitude information. */ Optional< double > defaultLatitude; /** if set, this is the longitude that should be assigned to any notes that have no other longitude information. */ Optional< double > defaultLongitude; /** if set, the user account is not yet confirmed for login. I.e. the account has been created, but we are still waiting for the user to complete the activation step. */ Optional< bool > preactivation; /** a list of promotions the user has seen. This list may occasionally be modified by the system when promotions are no longer available.
      Length: EDAM_ATTRIBUTE_LEN_MIN - EDAM_ATTRIBUTE_LEN_MAX */ Optional< QStringList > viewedPromotions; /** if set, this is the email address that the user may send email to in order to add an email note directly into the account via the SMTP email gateway. This is the part of the email address before the '@' symbol ... our domain is not included. If this is not set, the user may not add notes via the gateway.
      Length: EDAM_ATTRIBUTE_LEN_MIN - EDAM_ATTRIBUTE_LEN_MAX */ Optional< QString > incomingEmailAddress; /** if set, this will contain a list of email addresses that have recently been used as recipients of outbound emails by the user. This can be used to pre-populate a list of possible destinations when a user wishes to send a note via email.
      Length: EDAM_ATTRIBUTE_LEN_MIN - EDAM_ATTRIBUTE_LEN_MAX each
      Max: EDAM_USER_RECENT_MAILED_ADDRESSES_MAX entries */ Optional< QStringList > recentMailedAddresses; /** Free-form text field that may hold general support information, etc.
      Length: EDAM_ATTRIBUTE_LEN_MIN - EDAM_ATTRIBUTE_LEN_MAX */ Optional< QString > comments; /** The date/time when the user agreed to the terms of service. This can be used as the effective "start date" for the account. */ Optional< Timestamp > dateAgreedToTermsOfService; /** The number of referrals that the user is permitted to make. */ Optional< qint32 > maxReferrals; /** The number of referrals sent from this account. */ Optional< qint32 > referralCount; /** A code indicating where the user was sent from. AKA promotion code */ Optional< QString > refererCode; /** The most recent date when the user sent outbound emails from the service. Used with sentEmailCount to limit the number of emails that can be sent per day. */ Optional< Timestamp > sentEmailDate; /** The number of emails that were sent from the user via the service on sentEmailDate. Used to enforce a limit on the number of emails per user per day to prevent spamming. */ Optional< qint32 > sentEmailCount; /** If set, this is the maximum number of emails that may be sent in a given day from this account. If unset, the server will use the configured default limit. */ Optional< qint32 > dailyEmailLimit; /** If set, this is the date when the user asked to be excluded from offers and promotions sent by Evernote. If not set, then the user currently agrees to receive these messages. */ Optional< Timestamp > emailOptOutDate; /** If set, this is the date when the user asked to be included in offers and promotions sent by Evernote's partners. If not sent, then the user currently does not agree to receive these emails. */ Optional< Timestamp > partnerEmailOptInDate; /** a 2 character language codes based on: http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt used for localization purposes to determine what language to use for the web interface and for other direct communication (e.g. emails). */ Optional< QString > preferredLanguage; /** Preferred country code based on ISO 3166-1-alpha-2 indicating the users preferred country */ Optional< QString > preferredCountry; /** Boolean flag set to true if the user wants to clip full pages by default when they use the web clipper without a selection. */ Optional< bool > clipFullPage; /** The username of the account of someone who has chosen to enable Twittering into Evernote. This value is subject to change, since users may change their Twitter user name. */ Optional< QString > twitterUserName; /** The unique identifier of the user's Twitter account if that user has chosen to enable Twittering into Evernote. */ Optional< QString > twitterId; /** A name identifier used to identify a particular set of branding and light customization. */ Optional< QString > groupName; /** a 2 character language codes based on: http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt If set, this is used to determine the language that should be used when processing images and PDF files to find text. If not set, then the 'preferredLanguage' will be used. */ Optional< QString > recognitionLanguage; /** NOT DOCUMENTED */ Optional< QString > referralProof; /** NOT DOCUMENTED */ Optional< bool > educationalDiscount; /** A string recording the business address of a Sponsored Account user who has requested invoicing. */ Optional< QString > businessAddress; /** A flag indicating whether to hide the billing information on a sponsored account owner's settings page */ Optional< bool > hideSponsorBilling; /** A flag indicating the user's sponsored group is exempt from sale tax */ Optional< bool > taxExempt; /** A flag indicating whether the user chooses to allow Evernote to automatically file and tag emailed notes */ Optional< bool > useEmailAutoFiling; /** Configuration state for whether or not the user wishes to receive reminder e-mail. This setting applies to both the reminder e-mail sent for personal reminder notes and for the reminder e-mail sent for reminder notes in the user's business notebooks that the user has configured for e-mail notifications. */ Optional< ReminderEmailConfig::type > reminderEmailConfig; bool operator==(const UserAttributes& other) const { return defaultLocationName.isEqual(other.defaultLocationName) && defaultLatitude.isEqual(other.defaultLatitude) && defaultLongitude.isEqual(other.defaultLongitude) && preactivation.isEqual(other.preactivation) && viewedPromotions.isEqual(other.viewedPromotions) && incomingEmailAddress.isEqual(other.incomingEmailAddress) && recentMailedAddresses.isEqual(other.recentMailedAddresses) && comments.isEqual(other.comments) && dateAgreedToTermsOfService.isEqual(other.dateAgreedToTermsOfService) && maxReferrals.isEqual(other.maxReferrals) && referralCount.isEqual(other.referralCount) && refererCode.isEqual(other.refererCode) && sentEmailDate.isEqual(other.sentEmailDate) && sentEmailCount.isEqual(other.sentEmailCount) && dailyEmailLimit.isEqual(other.dailyEmailLimit) && emailOptOutDate.isEqual(other.emailOptOutDate) && partnerEmailOptInDate.isEqual(other.partnerEmailOptInDate) && preferredLanguage.isEqual(other.preferredLanguage) && preferredCountry.isEqual(other.preferredCountry) && clipFullPage.isEqual(other.clipFullPage) && twitterUserName.isEqual(other.twitterUserName) && twitterId.isEqual(other.twitterId) && groupName.isEqual(other.groupName) && recognitionLanguage.isEqual(other.recognitionLanguage) && referralProof.isEqual(other.referralProof) && educationalDiscount.isEqual(other.educationalDiscount) && businessAddress.isEqual(other.businessAddress) && hideSponsorBilling.isEqual(other.hideSponsorBilling) && taxExempt.isEqual(other.taxExempt) && useEmailAutoFiling.isEqual(other.useEmailAutoFiling) && reminderEmailConfig.isEqual(other.reminderEmailConfig) ; } bool operator!=(const UserAttributes& other) const { return !(*this == other); } }; /** * This represents the bookkeeping information for the user's subscription. * **/ struct Accounting { /** The number of bytes that can be uploaded to the account in the current month. For new notes that are created, this is the length of the note content (in Unicode characters) plus the size of each resource (in bytes). For edited notes, this is the the difference between the old length and the new length (if this is greater than 0) plus the size of each new resource. */ Optional< qint64 > uploadLimit; /** The date and time when the current upload limit expires. At this time, the monthly upload count reverts to 0 and a new limit is imposed. This date and time is exclusive, so this is effectively the start of the new month. */ Optional< Timestamp > uploadLimitEnd; /** When uploadLimitEnd is reached, the service will change uploadLimit to uploadLimitNextMonth. If a premium account is canceled, this mechanism will reset the quota appropriately. */ Optional< qint64 > uploadLimitNextMonth; /** Indicates the phases of a premium account during the billing process. */ Optional< PremiumOrderStatus::type > premiumServiceStatus; /** The order number used by the commerce system to process recurring payments */ Optional< QString > premiumOrderNumber; /** The commerce system used (paypal, Google checkout, etc) */ Optional< QString > premiumCommerceService; /** The start date when this premium promotion began (this number will get overwritten if a premium service is canceled and then re-activated). */ Optional< Timestamp > premiumServiceStart; /** The code associated with the purchase eg. monthly or annual purchase. Clients should interpret this value and localize it. */ Optional< QString > premiumServiceSKU; /** Date the last time the user was charged. Null if never charged. */ Optional< Timestamp > lastSuccessfulCharge; /** Date the last time a charge was attempted and failed. */ Optional< Timestamp > lastFailedCharge; /** Reason provided for the charge failure */ Optional< QString > lastFailedChargeReason; /** The end of the billing cycle. This could be in the past if there are failed charges. */ Optional< Timestamp > nextPaymentDue; /** An internal variable to manage locking operations on the commerce variables. */ Optional< Timestamp > premiumLockUntil; /** The date any modification where made to this record. */ Optional< Timestamp > updated; /** The number number identifying the recurring subscription used to make the recurring charges. */ Optional< QString > premiumSubscriptionNumber; /** Date charge last attempted */ Optional< Timestamp > lastRequestedCharge; /** ISO 4217 currency code */ Optional< QString > currency; /** charge in the smallest unit of the currency (e.g. cents for USD) */ Optional< qint32 > unitPrice; /** DEPRECATED:See BusinessUserInfo. */ Optional< qint32 > businessId; /** DEPRECATED:See BusinessUserInfo. */ Optional< QString > businessName; /** DEPRECATED:See BusinessUserInfo. */ Optional< BusinessUserRole::type > businessRole; /** discount per seat in negative amount and smallest unit of the currency (e.g. cents for USD) */ Optional< qint32 > unitDiscount; /** The next time the user will be charged, may or may not be the same as nextPaymentDue */ Optional< Timestamp > nextChargeDate; bool operator==(const Accounting& other) const { return uploadLimit.isEqual(other.uploadLimit) && uploadLimitEnd.isEqual(other.uploadLimitEnd) && uploadLimitNextMonth.isEqual(other.uploadLimitNextMonth) && premiumServiceStatus.isEqual(other.premiumServiceStatus) && premiumOrderNumber.isEqual(other.premiumOrderNumber) && premiumCommerceService.isEqual(other.premiumCommerceService) && premiumServiceStart.isEqual(other.premiumServiceStart) && premiumServiceSKU.isEqual(other.premiumServiceSKU) && lastSuccessfulCharge.isEqual(other.lastSuccessfulCharge) && lastFailedCharge.isEqual(other.lastFailedCharge) && lastFailedChargeReason.isEqual(other.lastFailedChargeReason) && nextPaymentDue.isEqual(other.nextPaymentDue) && premiumLockUntil.isEqual(other.premiumLockUntil) && updated.isEqual(other.updated) && premiumSubscriptionNumber.isEqual(other.premiumSubscriptionNumber) && lastRequestedCharge.isEqual(other.lastRequestedCharge) && currency.isEqual(other.currency) && unitPrice.isEqual(other.unitPrice) && businessId.isEqual(other.businessId) && businessName.isEqual(other.businessName) && businessRole.isEqual(other.businessRole) && unitDiscount.isEqual(other.unitDiscount) && nextChargeDate.isEqual(other.nextChargeDate) ; } bool operator!=(const Accounting& other) const { return !(*this == other); } }; /** * This structure is used to provide information about an Evernote Business * membership, for members who are part of a business. * * */ struct BusinessUserInfo { /** The ID of the Evernote Business account that the user is a member of.
      businessName The human-readable name of the Evernote Business account that the user is a member of. */ Optional< qint32 > businessId; /** NOT DOCUMENTED */ Optional< QString > businessName; /** The role of the user within the Evernote Business account that they are a member of. */ Optional< BusinessUserRole::type > role; /** An e-mail address that will be used by the service in the context of your Evernote Business activities. For example, this e-mail address will be used when you e-mail a business note, when you update notes in the account of your business, etc. The business e-mail cannot be used for identification purposes such as for logging into the service. */ Optional< QString > email; bool operator==(const BusinessUserInfo& other) const { return businessId.isEqual(other.businessId) && businessName.isEqual(other.businessName) && role.isEqual(other.role) && email.isEqual(other.email) ; } bool operator!=(const BusinessUserInfo& other) const { return !(*this == other); } }; /** * This structure is used to provide information about a user's Premium account. **/ struct PremiumInfo { /** The server-side date and time when this data was generated. */ Timestamp currentTime; /** True if the user's account is Premium. */ bool premium; /** True if the user's account is Premium and has a recurring payment method. */ bool premiumRecurring; /** The date when the user's Premium account expires, or the date when the user's account is due for payment if it has a recurring payment method. */ Optional< Timestamp > premiumExpirationDate; /** True if the user is eligible for purchasing Premium account extensions. */ bool premiumExtendable; /** True if the user's Premium account is pending payment confirmation */ bool premiumPending; /** True if the user has requested that no further charges to be made; the Premium account will remain active until it expires. */ bool premiumCancellationPending; /** True if the user is eligible for purchasing additional upload allowance. */ bool canPurchaseUploadAllowance; /** The name of the sponsored group that the user is part of. */ Optional< QString > sponsoredGroupName; /** DEPRECATED - will be removed in a future update. */ Optional< SponsoredGroupRole::type > sponsoredGroupRole; /** True if the user is eligible for purchasing Premium account upgrade. */ Optional< bool > premiumUpgradable; bool operator==(const PremiumInfo& other) const { return (currentTime == other.currentTime) && (premium == other.premium) && (premiumRecurring == other.premiumRecurring) && premiumExpirationDate.isEqual(other.premiumExpirationDate) && (premiumExtendable == other.premiumExtendable) && (premiumPending == other.premiumPending) && (premiumCancellationPending == other.premiumCancellationPending) && (canPurchaseUploadAllowance == other.canPurchaseUploadAllowance) && sponsoredGroupName.isEqual(other.sponsoredGroupName) && sponsoredGroupRole.isEqual(other.sponsoredGroupRole) && premiumUpgradable.isEqual(other.premiumUpgradable) ; } bool operator!=(const PremiumInfo& other) const { return !(*this == other); } }; /** * This represents the information about a single user account. **/ struct User { /** The unique numeric identifier for the account, which will not change for the lifetime of the account. */ Optional< UserID > id; /** The name that uniquely identifies a single user account. This name may be presented by the user, along with their password, to log into their account. May only contain a-z, 0-9, or '-', and may not start or end with the '-'
      Length: EDAM_USER_USERNAME_LEN_MIN - EDAM_USER_USERNAME_LEN_MAX
      Regex: EDAM_USER_USERNAME_REGEX */ Optional< QString > username; /** The email address registered for the user. Must comply with RFC 2821 and RFC 2822.
      Third party applications that authenticate using OAuth do not have access to this field. Length: EDAM_EMAIL_LEN_MIN - EDAM_EMAIL_LEN_MAX
      Regex: EDAM_EMAIL_REGEX */ Optional< QString > email; /** The printable name of the user, which may be a combination of given and family names. This is used instead of separate "first" and "last" names due to variations in international name format/order. May not start or end with a whitespace character. May contain any character but carriage return or newline (Unicode classes Zl and Zp).
      Length: EDAM_USER_NAME_LEN_MIN - EDAM_USER_NAME_LEN_MAX
      Regex: EDAM_USER_NAME_REGEX */ Optional< QString > name; /** The zone ID for the user's default location. If present, this may be used to localize the display of any timestamp for which no other timezone is available. The format must be encoded as a standard zone ID such as "America/Los_Angeles" or "GMT+08:00"
      Length: EDAM_TIMEZONE_LEN_MIN - EDAM_TIMEZONE_LEN_MAX
      Regex: EDAM_TIMEZONE_REGEX */ Optional< QString > timezone; /** The level of access permitted for the user. */ Optional< PrivilegeLevel::type > privilege; /** The date and time when this user account was created in the service. */ Optional< Timestamp > created; /** The date and time when this user account was last modified in the service. */ Optional< Timestamp > updated; /** If the account has been deleted from the system (e.g. as the result of a legal request by the user), the date and time of the deletion will be represented here. If not, this value will not be set. */ Optional< Timestamp > deleted; /** If the user account is available for login and synchronization, this flag will be set to true. */ Optional< bool > active; /** DEPRECATED - Client applications should have no need to use this field. */ Optional< QString > shardId; /** If present, this will contain a list of the attributes for this user account. */ Optional< UserAttributes > attributes; /** Bookkeeping information for the user's subscription. */ Optional< Accounting > accounting; /** If present, this will contain a set of commerce information relating to the user's premium service level. */ Optional< PremiumInfo > premiumInfo; /** If present, this will contain a set of business information relating to the user's business membership. If not present, the user is not currently part of a business. */ Optional< BusinessUserInfo > businessUserInfo; bool operator==(const User& other) const { return id.isEqual(other.id) && username.isEqual(other.username) && email.isEqual(other.email) && name.isEqual(other.name) && timezone.isEqual(other.timezone) && privilege.isEqual(other.privilege) && created.isEqual(other.created) && updated.isEqual(other.updated) && deleted.isEqual(other.deleted) && active.isEqual(other.active) && shardId.isEqual(other.shardId) && attributes.isEqual(other.attributes) && accounting.isEqual(other.accounting) && premiumInfo.isEqual(other.premiumInfo) && businessUserInfo.isEqual(other.businessUserInfo) ; } bool operator!=(const User& other) const { return !(*this == other); } }; /** * A tag within a user's account is a unique name which may be organized * a simple hierarchy. **/ struct Tag { /** The unique identifier of this tag. Will be set by the service, so may be omitted by the client when creating the Tag.
      Length: EDAM_GUID_LEN_MIN - EDAM_GUID_LEN_MAX
      Regex: EDAM_GUID_REGEX */ Optional< Guid > guid; /** A sequence of characters representing the tag's identifier. Case is preserved, but is ignored for comparisons. This means that an account may only have one tag with a given name, via case-insensitive comparison, so an account may not have both "food" and "Food" tags. May not contain a comma (','), and may not begin or end with a space.
      Length: EDAM_TAG_NAME_LEN_MIN - EDAM_TAG_NAME_LEN_MAX
      Regex: EDAM_TAG_NAME_REGEX */ Optional< QString > name; /** If this is set, then this is the GUID of the tag that holds this tag within the tag organizational hierarchy. If this is not set, then the tag has no parent and it is a "top level" tag. Cycles are not allowed (e.g. a->parent->parent == a) and will be rejected by the service.
      Length: EDAM_GUID_LEN_MIN - EDAM_GUID_LEN_MAX
      Regex: EDAM_GUID_REGEX */ Optional< Guid > parentGuid; /** A number identifying the last transaction to modify the state of this object. The USN values are sequential within an account, and can be used to compare the order of modifications within the service. */ Optional< qint32 > updateSequenceNum; bool operator==(const Tag& other) const { return guid.isEqual(other.guid) && name.isEqual(other.name) && parentGuid.isEqual(other.parentGuid) && updateSequenceNum.isEqual(other.updateSequenceNum) ; } bool operator!=(const Tag& other) const { return !(*this == other); } }; /** * A structure that wraps a map of name/value pairs whose values are not * always present in the structure in order to reduce space when obtaining * batches of entities that contain the map. * * When the server provides the client with a LazyMap, it will fill in either * the keysOnly field or the fullMap field, but never both, based on the API * and parameters. * * When a client provides a LazyMap to the server as part of an update to * an object, the server will only update the LazyMap if the fullMap field is * set. If the fullMap field is not set, the server will not make any changes * to the map. * * Check the API documentation of the individual calls involving the LazyMap * for full details including the constraints of the names and values of the * map. * * */ struct LazyMap { /** The set of keys for the map. This field is ignored by the server when set. */ Optional< QSet< QString > > keysOnly; /** The complete map, including all keys and values. */ Optional< QMap< QString, QString > > fullMap; bool operator==(const LazyMap& other) const { return keysOnly.isEqual(other.keysOnly) && fullMap.isEqual(other.fullMap) ; } bool operator!=(const LazyMap& other) const { return !(*this == other); } }; /** * Structure holding the optional attributes of a Resource * */ struct ResourceAttributes { /** the original location where the resource was hosted
      Length: EDAM_ATTRIBUTE_LEN_MIN - EDAM_ATTRIBUTE_LEN_MAX */ Optional< QString > sourceURL; /** the date and time that is associated with this resource (e.g. the time embedded in an image from a digital camera with a clock) */ Optional< Timestamp > timestamp; /** the latitude where the resource was captured */ Optional< double > latitude; /** the longitude where the resource was captured */ Optional< double > longitude; /** the altitude where the resource was captured */ Optional< double > altitude; /** information about an image's camera, e.g. as embedded in the image's EXIF data
      Length: EDAM_ATTRIBUTE_LEN_MIN - EDAM_ATTRIBUTE_LEN_MAX */ Optional< QString > cameraMake; /** information about an image's camera, e.g. as embedded in the image's EXIF data
      Length: EDAM_ATTRIBUTE_LEN_MIN - EDAM_ATTRIBUTE_LEN_MAX */ Optional< QString > cameraModel; /** if true, then the original client that submitted the resource plans to submit the recognition index for this resource at a later time. */ Optional< bool > clientWillIndex; /** DEPRECATED - this field is no longer set by the service, so should be ignored. */ Optional< QString > recoType; /** if the resource came from a source that provided an explicit file name, the original name will be stored here. Many resources come from unnamed sources, so this will not always be set. */ Optional< QString > fileName; /** this will be true if the resource should be displayed as an attachment, or false if the resource should be displayed inline (if possible). */ Optional< bool > attachment; /** Provides a location for applications to store a relatively small (4kb) blob of data associated with a Resource that is not visible to the user and that is opaque to the Evernote service. A single application may use at most one entry in this map, using its API consumer key as the map key. See the documentation for LazyMap for a description of when the actual map values are returned by the service.

      To safely add or modify your application's entry in the map, use NoteStore.setResourceApplicationDataEntry. To safely remove your application's entry from the map, use NoteStore.unsetResourceApplicationDataEntry.

      Minimum length of a name (key): EDAM_APPLICATIONDATA_NAME_LEN_MIN
      Sum max size of key and value: EDAM_APPLICATIONDATA_ENTRY_LEN_MAX
      Syntax regex for name (key): EDAM_APPLICATIONDATA_NAME_REGEX */ Optional< LazyMap > applicationData; bool operator==(const ResourceAttributes& other) const { return sourceURL.isEqual(other.sourceURL) && timestamp.isEqual(other.timestamp) && latitude.isEqual(other.latitude) && longitude.isEqual(other.longitude) && altitude.isEqual(other.altitude) && cameraMake.isEqual(other.cameraMake) && cameraModel.isEqual(other.cameraModel) && clientWillIndex.isEqual(other.clientWillIndex) && recoType.isEqual(other.recoType) && fileName.isEqual(other.fileName) && attachment.isEqual(other.attachment) && applicationData.isEqual(other.applicationData) ; } bool operator!=(const ResourceAttributes& other) const { return !(*this == other); } }; /** * Every media file that is embedded or attached to a note is represented * through a Resource entry. * */ struct Resource { /** The unique identifier of this resource. Will be set whenever a resource is retrieved from the service, but may be null when a client is creating a resource.
      Length: EDAM_GUID_LEN_MIN - EDAM_GUID_LEN_MAX
      Regex: EDAM_GUID_REGEX */ Optional< Guid > guid; /** The unique identifier of the Note that holds this Resource. Will be set whenever the resource is retrieved from the service, but may be null when a client is creating a resource.
      Length: EDAM_GUID_LEN_MIN - EDAM_GUID_LEN_MAX
      Regex: EDAM_GUID_REGEX */ Optional< Guid > noteGuid; /** The contents of the resource. Maximum length: The data.body is limited to EDAM_RESOURCE_SIZE_MAX_FREE for free accounts and EDAM_RESOURCE_SIZE_MAX_PREMIUM for premium accounts. */ Optional< Data > data; /** The MIME type for the embedded resource. E.g. "image/gif"
      Length: EDAM_MIME_LEN_MIN - EDAM_MIME_LEN_MAX
      Regex: EDAM_MIME_REGEX */ Optional< QString > mime; /** If set, this contains the display width of this resource, in pixels. */ Optional< qint16 > width; /** If set, this contains the display height of this resource, in pixels. */ Optional< qint16 > height; /** DEPRECATED: ignored. */ Optional< qint16 > duration; /** DEPRECATED: ignored. */ Optional< bool > active; /** If set, this will hold the encoded data that provides information on search and recognition within this resource. */ Optional< Data > recognition; /** A list of the attributes for this resource. */ Optional< ResourceAttributes > attributes; /** A number identifying the last transaction to modify the state of this object. The USN values are sequential within an account, and can be used to compare the order of modifications within the service. */ Optional< qint32 > updateSequenceNum; /** Some Resources may be assigned an alternate data format by the service which may be more appropriate for indexing or rendering than the original data provided by the user. In these cases, the alternate data form will be available via this Data element. If a Resource has no alternate form, this field will be unset. */ Optional< Data > alternateData; bool operator==(const Resource& other) const { return guid.isEqual(other.guid) && noteGuid.isEqual(other.noteGuid) && data.isEqual(other.data) && mime.isEqual(other.mime) && width.isEqual(other.width) && height.isEqual(other.height) && duration.isEqual(other.duration) && active.isEqual(other.active) && recognition.isEqual(other.recognition) && attributes.isEqual(other.attributes) && updateSequenceNum.isEqual(other.updateSequenceNum) && alternateData.isEqual(other.alternateData) ; } bool operator!=(const Resource& other) const { return !(*this == other); } }; /** * The list of optional attributes that can be stored on a note. * */ struct NoteAttributes { /** time that the note refers to */ Optional< Timestamp > subjectDate; /** the latitude where the note was taken */ Optional< double > latitude; /** the longitude where the note was taken */ Optional< double > longitude; /** the altitude where the note was taken */ Optional< double > altitude; /** the author of the content of the note
      Length: EDAM_ATTRIBUTE_LEN_MIN - EDAM_ATTRIBUTE_LEN_MAX */ Optional< QString > author; /** the method that the note was added to the account, if the note wasn't directly authored in an Evernote desktop client.
      Length: EDAM_ATTRIBUTE_LEN_MIN - EDAM_ATTRIBUTE_LEN_MAX */ Optional< QString > source; /** the original location where the resource was hosted. For web clips, this will be the URL of the page that was clipped.
      Length: EDAM_ATTRIBUTE_LEN_MIN - EDAM_ATTRIBUTE_LEN_MAX */ Optional< QString > sourceURL; /** an identifying string for the application that created this note. This string does not have a guaranteed syntax or structure -- it is intended for human inspection and tracking.
      Length: EDAM_ATTRIBUTE_LEN_MIN - EDAM_ATTRIBUTE_LEN_MAX */ Optional< QString > sourceApplication; /** The date and time when this note was directly shared via its own URL. This is only set on notes that were individually shared - it is independent of any notebook-level sharing of the containing notebook. This field is treated as "read-only" for clients; the server will ignore changes to this field from an external client. */ Optional< Timestamp > shareDate; /** The set of notes with this parameter set are considered "reminders" and are to be treated specially by clients to give them higher UI prominence within a notebook. The value is used to sort the reminder notes within the notebook with higher values representing greater prominence. Outside of the context of a notebook, the value of this parameter is undefined. The value is not intended to be compared to the values of reminder notes in other notebooks. In order to allow clients to place a note at a higher precedence than other notes, you should never set a value greater than the current time (as defined for a Timetstamp). To place a note at higher precedence than existing notes, set the value to the current time as defined for a timestamp (milliseconds since the epoch). Synchronizing clients must remember the time when the update was performed, using the local clock on the client, and use that value when they later upload the note to the service. Clients must not set the reminderOrder to the reminderTime as the reminderTime could be in the future. Those two fields are never intended to be related. The correct value for reminderOrder field for new notes is the "current" time when the user indicated that the note is a reminder. Clients may implement a separate "sort by date" feature to show notes ordered by reminderTime. Whenever a reminderDoneTime or reminderTime is set but a reminderOrder is not set, the server will fill in the current server time for the reminderOrder field. */ Optional< qint64 > reminderOrder; /** The date and time when a user dismissed/"marked done" the reminder on the note. Users typically do not manually set this value directly as it is set to the time when the user dismissed/"marked done" the reminder. */ Optional< Timestamp > reminderDoneTime; /** The date and time a user has selected to be reminded of the note. A note with this value set is known as a "reminder" and the user can be reminded, via e-mail or client-specific notifications, of the note when the time is reached or about to be reached. When a user sets a reminder time on a note that has a reminder done time, and that reminder time is in the future, then the reminder done time should be cleared. This should happen regardless of any existing reminder time that may have previously existed on the note. */ Optional< Timestamp > reminderTime; /** Allows the user to assign a human-readable location name associated with a note. Users may assign values like 'Home' and 'Work'. Place names may also be populated with values from geonames database (e.g., a restaurant name). Applications are encouraged to normalize values so that grouping values by place name provides a useful result. Applications MUST NOT automatically add place name values based on geolocation without confirmation from the user; that is, the value in this field should be more useful than a simple automated lookup based on the note's latitude and longitude. */ Optional< QString > placeName; /** The class (or type) of note. This field is used to indicate to clients that special structured information is represented within the note such that special rules apply when making modifications. If contentClass is set and the client application does not specifically support the specified class, the client MUST treat the note as read-only. In this case, the client MAY modify the note's notebook and tags via the Note.notebookGuid and Note.tagGuids fields. The client MAY also modify the reminderOrder field as well as the reminderTime and reminderDoneTime fields.

      Applications should set contentClass only when they are creating notes that contain structured information that needs to be maintained in order for the user to be able to use the note within that application. Setting contentClass makes a note read-only in other applications, so there is a trade-off when an application chooses to use contentClass. Applications that set contentClass when creating notes must use a contentClass string of the form CompanyName.ApplicationName to ensure uniqueness.

      Length restrictions: EDAM_NOTE_CONTENT_CLASS_LEN_MIN, EDAM_NOTE_CONTENT_CLASS_LEN_MAX
      Regex: EDAM_NOTE_CONTENT_CLASS_REGEX */ Optional< QString > contentClass; /** Provides a location for applications to store a relatively small (4kb) blob of data that is not meant to be visible to the user and that is opaque to the Evernote service. A single application may use at most one entry in this map, using its API consumer key as the map key. See the documentation for LazyMap for a description of when the actual map values are returned by the service.

      To safely add or modify your application's entry in the map, use NoteStore.setNoteApplicationDataEntry. To safely remove your application's entry from the map, use NoteStore.unsetNoteApplicationDataEntry.

      Minimum length of a name (key): EDAM_APPLICATIONDATA_NAME_LEN_MIN
      Sum max size of key and value: EDAM_APPLICATIONDATA_ENTRY_LEN_MAX
      Syntax regex for name (key): EDAM_APPLICATIONDATA_NAME_REGEX */ Optional< LazyMap > applicationData; /** An indication of who made the last change to the note. If you are accessing the note via a shared notebook to which you have modification rights, or if you are the owner of the notebook to which the note belongs, then you have access to the value. In this case, the value will be unset if the owner of the notebook containing the note was the last to make the modification, else it will be a string describing the guest who made the last edit. If you do not have access to this value, it will be left unset. This field is read-only by clients. The server will ignore all values set by clients into this field. */ Optional< QString > lastEditedBy; /** A map of classifications applied to the note by clients or by the Evernote service. The key is the string name of the classification type, and the value is a constant that begins with CLASSIFICATION_. */ Optional< QMap< QString, QString > > classifications; /** The numeric user ID of the user who originally created the note. */ Optional< UserID > creatorId; /** The numeric user ID of the user described in lastEditedBy. */ Optional< UserID > lastEditorId; bool operator==(const NoteAttributes& other) const { return subjectDate.isEqual(other.subjectDate) && latitude.isEqual(other.latitude) && longitude.isEqual(other.longitude) && altitude.isEqual(other.altitude) && author.isEqual(other.author) && source.isEqual(other.source) && sourceURL.isEqual(other.sourceURL) && sourceApplication.isEqual(other.sourceApplication) && shareDate.isEqual(other.shareDate) && reminderOrder.isEqual(other.reminderOrder) && reminderDoneTime.isEqual(other.reminderDoneTime) && reminderTime.isEqual(other.reminderTime) && placeName.isEqual(other.placeName) && contentClass.isEqual(other.contentClass) && applicationData.isEqual(other.applicationData) && lastEditedBy.isEqual(other.lastEditedBy) && classifications.isEqual(other.classifications) && creatorId.isEqual(other.creatorId) && lastEditorId.isEqual(other.lastEditorId) ; } bool operator!=(const NoteAttributes& other) const { return !(*this == other); } }; /** * Represents a single note in the user's account. * * */ struct Note { /** The unique identifier of this note. Will be set by the server, but will be omitted by clients calling NoteStore.createNote()
      Length: EDAM_GUID_LEN_MIN - EDAM_GUID_LEN_MAX
      Regex: EDAM_GUID_REGEX */ Optional< Guid > guid; /** The subject of the note. Can't begin or end with a space.
      Length: EDAM_NOTE_TITLE_LEN_MIN - EDAM_NOTE_TITLE_LEN_MAX
      Regex: EDAM_NOTE_TITLE_REGEX */ Optional< QString > title; /** The XHTML block that makes up the note. This is the canonical form of the note's contents, so will include abstract Evernote tags for internal resource references. A client may create a separate transformed version of this content for internal presentation, but the same canonical bytes should be used for transmission and comparison unless the user chooses to modify their content.
      Length: EDAM_NOTE_CONTENT_LEN_MIN - EDAM_NOTE_CONTENT_LEN_MAX */ Optional< QString > content; /** The binary MD5 checksum of the UTF-8 encoded content body. This will always be set by the server, but clients may choose to omit this when they submit a note with content.
      Length: EDAM_HASH_LEN (exactly) */ Optional< QByteArray > contentHash; /** The number of Unicode characters in the content of the note. This will always be set by the service, but clients may choose to omit this value when they submit a Note. */ Optional< qint32 > contentLength; /** The date and time when the note was created in one of the clients. In most cases, this will match the user's sense of when the note was created, and ordering between notes will be based on ordering of this field. However, this is not a "reliable" timestamp if a client has an incorrect clock, so it cannot provide a true absolute ordering between notes. Notes created directly through the service (e.g. via the web GUI) will have an absolutely ordered "created" value. */ Optional< Timestamp > created; /** The date and time when the note was last modified in one of the clients. In most cases, this will match the user's sense of when the note was modified, but this field may not be absolutely reliable due to the possibility of client clock errors. */ Optional< Timestamp > updated; /** If present, the note is considered "deleted", and this stores the date and time when the note was deleted by one of the clients. In most cases, this will match the user's sense of when the note was deleted, but this field may be unreliable due to the possibility of client clock errors. */ Optional< Timestamp > deleted; /** If the note is available for normal actions and viewing, this flag will be set to true. */ Optional< bool > active; /** A number identifying the last transaction to modify the state of this note (including changes to the note's attributes or resources). The USN values are sequential within an account, and can be used to compare the order of modifications within the service. */ Optional< qint32 > updateSequenceNum; /** The unique identifier of the notebook that contains this note. If no notebookGuid is provided on a call to createNote(), the default notebook will be used instead.
      Length: EDAM_GUID_LEN_MIN - EDAM_GUID_LEN_MAX
      Regex: EDAM_GUID_REGEX */ Optional< QString > notebookGuid; /** A list of the GUID identifiers for tags that are applied to this note. This may be provided in a call to createNote() to unambiguously declare the tags that should be assigned to the new note. Alternately, clients may pass the names of desired tags via the 'tagNames' field during note creation. If the list of tags are omitted on a call to createNote(), then the server will assume that no changes have been made to the resources. Maximum: EDAM_NOTE_TAGS_MAX tags per note */ Optional< QList< Guid > > tagGuids; /** The list of resources that are embedded within this note. If the list of resources are omitted on a call to updateNote(), then the server will assume that no changes have been made to the resources. The binary contents of the resources must be provided when the resource is first sent to the service, but it will be omitted by the service when the Note is returned in the future. Maximum: EDAM_NOTE_RESOURCES_MAX resources per note */ Optional< QList< Resource > > resources; /** A list of the attributes for this note. If the list of attributes are omitted on a call to updateNote(), then the server will assume that no changes have been made to the resources. */ Optional< NoteAttributes > attributes; /** May be provided by clients during calls to createNote() as an alternative to providing the tagGuids of existing tags. If any tagNames are provided during createNote(), these will be found, or created if they don't already exist. Created tags will have no parent (they will be at the top level of the tag panel). */ Optional< QStringList > tagNames; bool operator==(const Note& other) const { return guid.isEqual(other.guid) && title.isEqual(other.title) && content.isEqual(other.content) && contentHash.isEqual(other.contentHash) && contentLength.isEqual(other.contentLength) && created.isEqual(other.created) && updated.isEqual(other.updated) && deleted.isEqual(other.deleted) && active.isEqual(other.active) && updateSequenceNum.isEqual(other.updateSequenceNum) && notebookGuid.isEqual(other.notebookGuid) && tagGuids.isEqual(other.tagGuids) && resources.isEqual(other.resources) && attributes.isEqual(other.attributes) && tagNames.isEqual(other.tagNames) ; } bool operator!=(const Note& other) const { return !(*this == other); } }; /** * If a Notebook has been opened to the public, the Notebook will have a * reference to one of these structures, which gives the location and optional * description of the externally-visible public Notebook. * */ struct Publishing { /** If this field is present, then the notebook is published for mass consumption on the Internet under the provided URI, which is relative to a defined base publishing URI defined by the service. This field can only be modified via the web service GUI ... publishing cannot be modified via an offline client.
      Length: EDAM_PUBLISHING_URI_LEN_MIN - EDAM_PUBLISHING_URI_LEN_MAX
      Regex: EDAM_PUBLISHING_URI_REGEX */ Optional< QString > uri; /** When the notes are publicly displayed, they will be sorted based on the requested criteria. */ Optional< NoteSortOrder::type > order; /** If this is set to true, then the public notes will be displayed in ascending order (e.g. from oldest to newest). Otherwise, the notes will be displayed in descending order (e.g. newest to oldest). */ Optional< bool > ascending; /** This field may be used to provide a short description of the notebook, which may be displayed when (e.g.) the notebook is shown in a public view. Can't begin or end with a space.
      Length: EDAM_PUBLISHING_DESCRIPTION_LEN_MIN - EDAM_PUBLISHING_DESCRIPTION_LEN_MAX
      Regex: EDAM_PUBLISHING_DESCRIPTION_REGEX */ Optional< QString > publicDescription; bool operator==(const Publishing& other) const { return uri.isEqual(other.uri) && order.isEqual(other.order) && ascending.isEqual(other.ascending) && publicDescription.isEqual(other.publicDescription) ; } bool operator!=(const Publishing& other) const { return !(*this == other); } }; /** * If a Notebook contained in an Evernote Business account has been published * the to business library, the Notebook will have a reference to one of these * structures, which specifies how the Notebook will be represented in the * library. * * */ struct BusinessNotebook { /** A short description of the notebook's content that will be displayed in the business library user interface. The description may not begin or end with whitespace.
      Length: EDAM_BUSINESS_NOTEBOOK_DESCRIPTION_LEN_MIN - EDAM_BUSINESS_NOTEBOOK_DESCRIPTION_LEN_MAX
      Regex: EDAM_BUSINESS_NOTEBOOK_DESCRIPTION_REGEX */ Optional< QString > notebookDescription; /** The privileges that will be granted to users who join the notebook through the business library. */ Optional< SharedNotebookPrivilegeLevel::type > privilege; /** Whether the notebook should be "recommended" when displayed in the business library user interface. */ Optional< bool > recommended; bool operator==(const BusinessNotebook& other) const { return notebookDescription.isEqual(other.notebookDescription) && privilege.isEqual(other.privilege) && recommended.isEqual(other.recommended) ; } bool operator!=(const BusinessNotebook& other) const { return !(*this == other); } }; /** * A structure defining the scope of a SavedSearch. * * */ struct SavedSearchScope { /** The search should include notes from the account that contains the SavedSearch. */ Optional< bool > includeAccount; /** The search should include notes within those shared notebooks that the user has joined that are NOT business notebooks. */ Optional< bool > includePersonalLinkedNotebooks; /** The search should include notes within those shared notebooks that the user has joined that are business notebooks in the business that the user is currently a member of. */ Optional< bool > includeBusinessLinkedNotebooks; bool operator==(const SavedSearchScope& other) const { return includeAccount.isEqual(other.includeAccount) && includePersonalLinkedNotebooks.isEqual(other.includePersonalLinkedNotebooks) && includeBusinessLinkedNotebooks.isEqual(other.includeBusinessLinkedNotebooks) ; } bool operator!=(const SavedSearchScope& other) const { return !(*this == other); } }; /** * A named search associated with the account that can be quickly re-used. * */ struct SavedSearch { /** The unique identifier of this search. Will be set by the service, so may be omitted by the client when creating.
      Length: EDAM_GUID_LEN_MIN - EDAM_GUID_LEN_MAX
      Regex: EDAM_GUID_REGEX */ Optional< Guid > guid; /** The name of the saved search to display in the GUI. The account may only contain one search with a given name (case-insensitive compare). Can't begin or end with a space.
      Length: EDAM_SAVED_SEARCH_NAME_LEN_MIN - EDAM_SAVED_SEARCH_NAME_LEN_MAX
      Regex: EDAM_SAVED_SEARCH_NAME_REGEX */ Optional< QString > name; /** A string expressing the search to be performed.
      Length: EDAM_SAVED_SEARCH_QUERY_LEN_MIN - EDAM_SAVED_SEARCH_QUERY_LEN_MAX */ Optional< QString > query; /** The format of the query string, to determine how to parse and process it. */ Optional< QueryFormat::type > format; /** A number identifying the last transaction to modify the state of this object. The USN values are sequential within an account, and can be used to compare the order of modifications within the service. */ Optional< qint32 > updateSequenceNum; /**

      Specifies the set of notes that should be included in the search, if possible.

      Clients are expected to search as much of the desired scope as possible, with the understanding that a given client may not be able to cover the full specified scope. For example, when executing a search that includes notes in both the owner's account and business notebooks, a mobile client may choose to only search within the user's account because it is not capable of searching both scopes simultaneously. When a search across multiple scopes is not possible, a client may choose which scope to search based on the current application context. If a client cannot search any of the desired scopes, it should refuse to execute the search.

      */ Optional< SavedSearchScope > scope; bool operator==(const SavedSearch& other) const { return guid.isEqual(other.guid) && name.isEqual(other.name) && query.isEqual(other.query) && format.isEqual(other.format) && updateSequenceNum.isEqual(other.updateSequenceNum) && scope.isEqual(other.scope) ; } bool operator!=(const SavedSearch& other) const { return !(*this == other); } }; /** * Settings meant for the recipient of a shared notebook, such as * for indicating which types of notifications the recipient wishes * for reminders, etc. * * The reminderNotifyEmail and reminderNotifyInApp fields have a * 3-state read value but a 2-state write value. On read, it is * possible to observe "unset", true, or false. The initial state is * "unset". When you choose to set a value, you may set it to either * true or false, but you cannot unset the value. Once one of these * members has a true/false value, it will always have a true/false * value. * * */ struct SharedNotebookRecipientSettings { /** Indicates that the user wishes to receive daily e-mail notifications for reminders associated with the shared notebook. This may be true only for business notebooks that belong to the business of which the user is a member. You may only set this value on a notebook in your business. */ Optional< bool > reminderNotifyEmail; /** Indicates that the user wishes to receive notifications for reminders by applications that support providing such notifications. The exact nature of the notification is defined by the individual applications. */ Optional< bool > reminderNotifyInApp; bool operator==(const SharedNotebookRecipientSettings& other) const { return reminderNotifyEmail.isEqual(other.reminderNotifyEmail) && reminderNotifyInApp.isEqual(other.reminderNotifyInApp) ; } bool operator!=(const SharedNotebookRecipientSettings& other) const { return !(*this == other); } }; /** * Shared notebooks represent a relationship between a notebook and a single * share invitation recipient. * */ struct SharedNotebook { /** the primary identifier of the share */ Optional< qint64 > id; /** the user id of the owner of the notebook */ Optional< qint32 > userId; /** the GUID of the associated notebook shared. */ Optional< QString > notebookGuid; /** the email address of the recipient - used by the notebook owner to identify who they shared with. */ Optional< QString > email; /** (DEPRECATED) a flag indicating the share is read/write -otherwise it's read only. This field is deprecated in favor of the new "privilege" field. */ Optional< bool > notebookModifiable; /** (DEPRECATED) indicates that a user must login to access the share. This field is deprecated and will be "true" for all new shared notebooks. It is read-only and ignored when creating or modifying a shared notebook, except that a shared notebook can be modified to require login. See "allowPreview" for information on privileges and shared notebooks. */ Optional< bool > requireLogin; /** the date the owner first created the share with the specific email address */ Optional< Timestamp > serviceCreated; /** the date the shared notebook was last updated on the service. This will be updated when authenticateToSharedNotebook is called the first time with a shared notebook requiring login (i.e. when the username is bound to that shared notebook). */ Optional< Timestamp > serviceUpdated; /** NOT DOCUMENTED */ Optional< QString > shareKey; /** the username of the user who can access this share. Once it's assigned it cannot be changed. */ Optional< QString > username; /** The privilege level granted to the notebook, activity stream, and invitations. See the corresponding enumeration for details. */ Optional< SharedNotebookPrivilegeLevel::type > privilege; /** Whether or not to grant "READ_NOTEBOOK" privilege without an authentication token, for authenticateToSharedNotebook(...). With the change to "requireLogin" always being true for new shared notebooks, this is the only way to access a shared notebook without an authorization token. This setting expires after the first use of authenticateToSharedNotebook(...) with a valid authentication token. */ Optional< bool > allowPreview; /** Settings intended for use only by the recipient of this shared notebook. You should skip setting this value unless you want to change the value contained inside the structure, and only if you are the recipient. */ Optional< SharedNotebookRecipientSettings > recipientSettings; bool operator==(const SharedNotebook& other) const { return id.isEqual(other.id) && userId.isEqual(other.userId) && notebookGuid.isEqual(other.notebookGuid) && email.isEqual(other.email) && notebookModifiable.isEqual(other.notebookModifiable) && requireLogin.isEqual(other.requireLogin) && serviceCreated.isEqual(other.serviceCreated) && serviceUpdated.isEqual(other.serviceUpdated) && shareKey.isEqual(other.shareKey) && username.isEqual(other.username) && privilege.isEqual(other.privilege) && allowPreview.isEqual(other.allowPreview) && recipientSettings.isEqual(other.recipientSettings) ; } bool operator!=(const SharedNotebook& other) const { return !(*this == other); } }; /** * This structure captures information about the types of operations * that cannot be performed on a given notebook with a type of * authenticated access and credentials. The values filled into this * structure are based on then-current values in the server database * for shared notebooks and notebook publishing records, as well as * information related to the authentication token. Information from * the authentication token includes the application that is accessing * the server, as defined by the permissions granted by consumer (api) * key, and the method used to obtain the token, for example via * authenticateToSharedNotebook, authenticateToBusiness, etc. Note * that changes to values in this structure that are the result of * shared notebook or publishing record changes are communicated to * the client via a change in the notebook USN during sync. It is * important to use the same access method, parameters, and consumer * key in order obtain correct results from the sync engine. * * The server has the final say on what is allowed as values may * change between calls to obtain NotebookRestrictions instances * and to operate on data on the service. * * If the following are set and true, then the given restriction is * in effect, as accessed by the same authentication token from which * the values were obtained. * * */ struct NotebookRestrictions { /** The client is not able to read notes from the service and the notebook is write-only. */ Optional< bool > noReadNotes; /** The client may not create new notes in the notebook. */ Optional< bool > noCreateNotes; /** The client may not update notes currently in the notebook. */ Optional< bool > noUpdateNotes; /** The client may not expunge notes currently in the notebook. */ Optional< bool > noExpungeNotes; /** The client may not share notes in the notebook via the shareNote method. */ Optional< bool > noShareNotes; /** The client may not e-mail notes via the Evernote service by using the emailNote method. */ Optional< bool > noEmailNotes; /** The client may not send messages to the share recipients of the notebook. */ Optional< bool > noSendMessageToRecipients; /** The client may not update the Notebook object itself, for example, via the updateNotebook method. */ Optional< bool > noUpdateNotebook; /** The client may not expunge the Notebook object itself, for example, via the expungeNotebook method. */ Optional< bool > noExpungeNotebook; /** The client may not set this notebook to be the default notebook. The caller should leave Notebook.defaultNotebook unset. */ Optional< bool > noSetDefaultNotebook; /** If the client is able to update the Notebook, the Notebook.stack value may not be set. */ Optional< bool > noSetNotebookStack; /** The client may not change the publish the notebook to the public. For example, business notebooks may not be shared publicly. */ Optional< bool > noPublishToPublic; /** The client may not publish the notebook to the business library. */ Optional< bool > noPublishToBusinessLibrary; /** The client may not complete an operation that results in a new tag being created in the owner's account. */ Optional< bool > noCreateTags; /** The client may not update tags in the owner's account. */ Optional< bool > noUpdateTags; /** The client may not expunge tags in the owner's account. */ Optional< bool > noExpungeTags; /** If the client is able to create or update tags in the owner's account, then they will not be able to set the parent tag. Leave the value unset. */ Optional< bool > noSetParentTag; /** The client is unable to create shared notebooks for the notebook. */ Optional< bool > noCreateSharedNotebooks; /** Restrictions on which shared notebook instances can be updated. If the value is not set or null, then the client can update any of the shared notebooks associated with the notebook on which the NotebookRestrictions are defined. See the enumeration for further details. */ Optional< SharedNotebookInstanceRestrictions::type > updateWhichSharedNotebookRestrictions; /** Restrictions on which shared notebook instances can be expunged. If the value is not set or null, then the client can expunge any of the shared notebooks associated with the notebook on which the NotebookRestrictions are defined. See the enumeration for further details. */ Optional< SharedNotebookInstanceRestrictions::type > expungeWhichSharedNotebookRestrictions; bool operator==(const NotebookRestrictions& other) const { return noReadNotes.isEqual(other.noReadNotes) && noCreateNotes.isEqual(other.noCreateNotes) && noUpdateNotes.isEqual(other.noUpdateNotes) && noExpungeNotes.isEqual(other.noExpungeNotes) && noShareNotes.isEqual(other.noShareNotes) && noEmailNotes.isEqual(other.noEmailNotes) && noSendMessageToRecipients.isEqual(other.noSendMessageToRecipients) && noUpdateNotebook.isEqual(other.noUpdateNotebook) && noExpungeNotebook.isEqual(other.noExpungeNotebook) && noSetDefaultNotebook.isEqual(other.noSetDefaultNotebook) && noSetNotebookStack.isEqual(other.noSetNotebookStack) && noPublishToPublic.isEqual(other.noPublishToPublic) && noPublishToBusinessLibrary.isEqual(other.noPublishToBusinessLibrary) && noCreateTags.isEqual(other.noCreateTags) && noUpdateTags.isEqual(other.noUpdateTags) && noExpungeTags.isEqual(other.noExpungeTags) && noSetParentTag.isEqual(other.noSetParentTag) && noCreateSharedNotebooks.isEqual(other.noCreateSharedNotebooks) && updateWhichSharedNotebookRestrictions.isEqual(other.updateWhichSharedNotebookRestrictions) && expungeWhichSharedNotebookRestrictions.isEqual(other.expungeWhichSharedNotebookRestrictions) ; } bool operator!=(const NotebookRestrictions& other) const { return !(*this == other); } }; /** * A unique container for a set of notes. * */ struct Notebook { /** The unique identifier of this notebook.
      Length: EDAM_GUID_LEN_MIN - EDAM_GUID_LEN_MAX
      Regex: EDAM_GUID_REGEX */ Optional< Guid > guid; /** A sequence of characters representing the name of the notebook. May be changed by clients, but the account may not contain two notebooks with names that are equal via a case-insensitive comparison. Can't begin or end with a space.
      Length: EDAM_NOTEBOOK_NAME_LEN_MIN - EDAM_NOTEBOOK_NAME_LEN_MAX
      Regex: EDAM_NOTEBOOK_NAME_REGEX */ Optional< QString > name; /** A number identifying the last transaction to modify the state of this object. The USN values are sequential within an account, and can be used to compare the order of modifications within the service. */ Optional< qint32 > updateSequenceNum; /** If true, this notebook should be used for new notes whenever the user has not (or cannot) specify a desired target notebook. For example, if a note is submitted via SMTP email. The service will maintain at most one defaultNotebook per account. If a second notebook is created or updated with defaultNotebook set to true, the service will automatically update the prior notebook's defaultNotebook field to false. If the default notebook is deleted (i.e. "active" set to false), the "defaultNotebook" field will be set to false by the service. If the account has no default notebook set, the service will use the most recent notebook as the default. */ Optional< bool > defaultNotebook; /** The time when this notebook was created on the service. This will be set on the service during creation, and the service will provide this value when it returns a Notebook to a client. The service will ignore this value if it is sent by clients. */ Optional< Timestamp > serviceCreated; /** The time when this notebook was last modified on the service. This will be set on the service during creation, and the service will provide this value when it returns a Notebook to a client. The service will ignore this value if it is sent by clients. */ Optional< Timestamp > serviceUpdated; /** If the Notebook has been opened for public access, or business users shared with their business (i.e. if 'published' is set to true), then this will point to the set of publishing information for the Notebook (URI, description, etc.). A Notebook cannot be published without providing this information, but it will persist for later use if publishing is ever disabled on the Notebook. Clients that do not wish to change the publishing behavior of a Notebook should not set this value when calling NoteStore.updateNotebook(). */ Optional< Publishing > publishing; /** If this is set to true, then the Notebook will be accessible either to the public, or for business users to their business, via the 'publishing' specification, which must also be set. If this is set to false, the Notebook will not be available to the public (or business). Clients that do not wish to change the publishing behavior of a Notebook should not set this value when calling NoteStore.updateNotebook(). */ Optional< bool > published; /** If this is set, then the notebook is visually contained within a stack of notebooks with this name. All notebooks in the same account with the same 'stack' field are considered to be in the same stack. Notebooks with no stack set are "top level" and not contained within a stack. */ Optional< QString > stack; /** DEPRECATED - replaced by sharedNotebooks. */ Optional< QList< qint64 > > sharedNotebookIds; /** The list of recipients to whom this notebook has been shared (one SharedNotebook object per recipient email address). This field will be unset if you do not have permission to access this data. If you are accessing the notebook as the owner or via a shared notebook that is modifiable, then you have access to this data and the value will be set. This field is read-only. Clients may not make changes to shared notebooks via this field. */ Optional< QList< SharedNotebook > > sharedNotebooks; /** If the notebook is part of a business account and has been published to the business library, this will contain information for the library listing. The presence or absence of this field is not a reliable test of whether a given notebook is in fact a business notebook - the field is only used when a notebook is or has been published to the business library. */ Optional< BusinessNotebook > businessNotebook; /** Intended for use with Business accounts, this field identifies the user who has been designated as the "contact". For notebooks created in business accounts, the server will automatically set this value to the user who created the notebook unless Notebook.contact.username has been set, in which that value will be used. When updating a notebook, it is common to leave Notebook.contact field unset, indicating that no change to the value is being requested and that the existing value, if any, should be preserved. */ Optional< User > contact; /** NOT DOCUMENTED */ Optional< NotebookRestrictions > restrictions; bool operator==(const Notebook& other) const { return guid.isEqual(other.guid) && name.isEqual(other.name) && updateSequenceNum.isEqual(other.updateSequenceNum) && defaultNotebook.isEqual(other.defaultNotebook) && serviceCreated.isEqual(other.serviceCreated) && serviceUpdated.isEqual(other.serviceUpdated) && publishing.isEqual(other.publishing) && published.isEqual(other.published) && stack.isEqual(other.stack) && sharedNotebookIds.isEqual(other.sharedNotebookIds) && sharedNotebooks.isEqual(other.sharedNotebooks) && businessNotebook.isEqual(other.businessNotebook) && contact.isEqual(other.contact) && restrictions.isEqual(other.restrictions) ; } bool operator!=(const Notebook& other) const { return !(*this == other); } }; /** * A link in an users account that refers them to a public or individual share in * another user's account. * * */ struct LinkedNotebook { /** the display name of the shared notebook. The link owner can change this. */ Optional< QString > shareName; /** the username of the user who owns the shared or public notebook */ Optional< QString > username; /** the shard ID of the notebook if the notebook is not public
      shareKey the secret key that provides access to the shared notebook */ Optional< QString > shardId; /** NOT DOCUMENTED */ Optional< QString > shareKey; /** the identifier of the public notebook */ Optional< QString > uri; /** The unique identifier of this linked notebook. Will be set whenever a linked notebook is retrieved from the service, but may be null when a client is creating a linked notebook.
      Length: EDAM_GUID_LEN_MIN - EDAM_GUID_LEN_MAX
      Regex: EDAM_GUID_REGEX */ Optional< Guid > guid; /** A number identifying the last transaction to modify the state of this object. The USN values are sequential within an account, and can be used to compare the order of modifications within the service. */ Optional< qint32 > updateSequenceNum; /** This field will contain the full URL that clients should use to make NoteStore requests to the server shard that contains that notebook's data. I.e. this is the URL that should be used to create the Thrift HTTP client transport to send messages to the NoteStore service for the account. */ Optional< QString > noteStoreUrl; /** This field will contain the initial part of the URLs that should be used to make requests to Evernote's thin client "web API", which provide optimized operations for clients that aren't capable of manipulating the full contents of accounts via the full Thrift data model. Clients should concatenate the relative path for the various servlets onto the end of this string to construct the full URL, as documented on our developer web site. */ Optional< QString > webApiUrlPrefix; /** If this is set, then the notebook is visually contained within a stack of notebooks with this name. All notebooks in the same account with the same 'stack' field are considered to be in the same stack. Notebooks with no stack set are "top level" and not contained within a stack. The link owner can change this and this field is for the benefit of the link owner. */ Optional< QString > stack; /** If set, this will be the unique identifier for the business that owns the notebook to which the linked notebook refers. */ Optional< qint32 > businessId; bool operator==(const LinkedNotebook& other) const { return shareName.isEqual(other.shareName) && username.isEqual(other.username) && shardId.isEqual(other.shardId) && shareKey.isEqual(other.shareKey) && uri.isEqual(other.uri) && guid.isEqual(other.guid) && updateSequenceNum.isEqual(other.updateSequenceNum) && noteStoreUrl.isEqual(other.noteStoreUrl) && webApiUrlPrefix.isEqual(other.webApiUrlPrefix) && stack.isEqual(other.stack) && businessId.isEqual(other.businessId) ; } bool operator!=(const LinkedNotebook& other) const { return !(*this == other); } }; /** * A structure that describes a notebook or a user's relationship with * a notebook. NotebookDescriptor is expected to remain a lighter-weight * structure when compared to Notebook. * */ struct NotebookDescriptor { /** The unique identifier of the notebook. */ Optional< Guid > guid; /** A sequence of characters representing the name of the notebook. */ Optional< QString > notebookDisplayName; /** The User.name value of the notebook's "contact". */ Optional< QString > contactName; /** Whether a SharedNotebook record exists between the calling user and this notebook. */ Optional< bool > hasSharedNotebook; /** The number of users who have joined this notebook. */ Optional< qint32 > joinedUserCount; bool operator==(const NotebookDescriptor& other) const { return guid.isEqual(other.guid) && notebookDisplayName.isEqual(other.notebookDisplayName) && contactName.isEqual(other.contactName) && hasSharedNotebook.isEqual(other.hasSharedNotebook) && joinedUserCount.isEqual(other.joinedUserCount) ; } bool operator!=(const NotebookDescriptor& other) const { return !(*this == other); } }; /** * This structure is used to provide publicly-available user information * about a particular account. **/ struct PublicUserInfo { /** The unique numeric user identifier for the user account. */ UserID userId; /** DEPRECATED - Client applications should have no need to use this field. */ QString shardId; /** The privilege level of the account, to determine whether this is a Premium or Free account. */ Optional< PrivilegeLevel::type > privilege; /** NOT DOCUMENTED */ Optional< QString > username; /** This field will contain the full URL that clients should use to make NoteStore requests to the server shard that contains that user's data. I.e. this is the URL that should be used to create the Thrift HTTP client transport to send messages to the NoteStore service for the account. */ Optional< QString > noteStoreUrl; /** This field will contain the initial part of the URLs that should be used to make requests to Evernote's thin client "web API", which provide optimized operations for clients that aren't capable of manipulating the full contents of accounts via the full Thrift data model. Clients should concatenate the relative path for the various servlets onto the end of this string to construct the full URL, as documented on our developer web site. */ Optional< QString > webApiUrlPrefix; bool operator==(const PublicUserInfo& other) const { return (userId == other.userId) && (shardId == other.shardId) && privilege.isEqual(other.privilege) && username.isEqual(other.username) && noteStoreUrl.isEqual(other.noteStoreUrl) && webApiUrlPrefix.isEqual(other.webApiUrlPrefix) ; } bool operator!=(const PublicUserInfo& other) const { return !(*this == other); } }; /** * When an authentication (or re-authentication) is performed, this structure * provides the result to the client. **/ struct AuthenticationResult { /** The server-side date and time when this result was generated. */ Timestamp currentTime; /** Holds an opaque, ASCII-encoded token that can be used by the client to perform actions on a NoteStore. */ QString authenticationToken; /** Holds the server-side date and time when the authentication token will expire. This time can be compared to "currentTime" to produce an expiration time that can be reconciled with the client's local clock. */ Timestamp expiration; /** Holds the information about the account which was authenticated if this was a full authentication. May be absent if this particular authentication did not require user information. */ Optional< User > user; /** If this authentication result was achieved without full permissions to access the full User structure, this field may be set to give back a more limited public set of data. */ Optional< PublicUserInfo > publicUserInfo; /** This field will contain the full URL that clients should use to make NoteStore requests to the server shard that contains that user's data. I.e. this is the URL that should be used to create the Thrift HTTP client transport to send messages to the NoteStore service for the account. */ Optional< QString > noteStoreUrl; /** This field will contain the initial part of the URLs that should be used to make requests to Evernote's thin client "web API", which provide optimized operations for clients that aren't capable of manipulating the full contents of accounts via the full Thrift data model. Clients should concatenate the relative path for the various servlets onto the end of this string to construct the full URL, as documented on our developer web site. */ Optional< QString > webApiUrlPrefix; /** If set to true, this field indicates that the user has enabled two-factor authentication and must enter their second factor in order to complete authentication. In this case the value of authenticationResult will be a short-lived authentication token that may only be used to make a subsequent call to completeTwoFactorAuthentication. */ Optional< bool > secondFactorRequired; /** When secondFactorRequired is set to true, this field may contain a string describing the second factor delivery method that the user has configured. This will typically be an obfuscated mobile device number, such as "(xxx) xxx-x095". This string can be displayed to the user to remind them how to obtain the required second factor. TODO do we need to differentiate between SMS and voice delivery? */ Optional< QString > secondFactorDeliveryHint; bool operator==(const AuthenticationResult& other) const { return (currentTime == other.currentTime) && (authenticationToken == other.authenticationToken) && (expiration == other.expiration) && user.isEqual(other.user) && publicUserInfo.isEqual(other.publicUserInfo) && noteStoreUrl.isEqual(other.noteStoreUrl) && webApiUrlPrefix.isEqual(other.webApiUrlPrefix) && secondFactorRequired.isEqual(other.secondFactorRequired) && secondFactorDeliveryHint.isEqual(other.secondFactorDeliveryHint) ; } bool operator!=(const AuthenticationResult& other) const { return !(*this == other); } }; /** * This structure describes a collection of bootstrap settings. **/ struct BootstrapSettings { /** The hostname and optional port for composing Evernote web service URLs. This URL can be used to access the UserStore and related services, but must not be used to compose the NoteStore URL. Client applications must handle serviceHost values that include only the hostname (e.g. www.evernote.com) or both the hostname and port (e.g. www.evernote.com:8080). If no port is specified, or if port 443 is specified, client applications must use the scheme "https" when composing URLs. Otherwise, a client must use the scheme "http". */ QString serviceHost; /** The URL stem for the Evernote corporate marketing website, e.g. http://www.evernote.com. This stem can be used to compose website URLs. For example, the URL of the Evernote Trunk is composed by appending "/about/trunk/" to the value of marketingUrl. */ QString marketingUrl; /** The full URL for the Evernote customer support website, e.g. https://support.evernote.com. */ QString supportUrl; /** The domain used for an Evernote user's incoming email address, which allows notes to be emailed into an account. E.g. m.evernote.com. */ QString accountEmailDomain; /** Whether the client application should enable sharing of notes on Facebook. */ Optional< bool > enableFacebookSharing; /** Whether the client application should enable gift subscriptions. */ Optional< bool > enableGiftSubscriptions; /** Whether the client application should enable in-client creation of support tickets. */ Optional< bool > enableSupportTickets; /** Whether the client application should enable shared notebooks. */ Optional< bool > enableSharedNotebooks; /** Whether the client application should enable single note sharing. */ Optional< bool > enableSingleNoteSharing; /** Whether the client application should enable sponsored accounts. */ Optional< bool > enableSponsoredAccounts; /** Whether the client application should enable sharing of notes on Twitter. */ Optional< bool > enableTwitterSharing; /** NOT DOCUMENTED */ Optional< bool > enableLinkedInSharing; /** NOT DOCUMENTED */ Optional< bool > enablePublicNotebooks; bool operator==(const BootstrapSettings& other) const { return (serviceHost == other.serviceHost) && (marketingUrl == other.marketingUrl) && (supportUrl == other.supportUrl) && (accountEmailDomain == other.accountEmailDomain) && enableFacebookSharing.isEqual(other.enableFacebookSharing) && enableGiftSubscriptions.isEqual(other.enableGiftSubscriptions) && enableSupportTickets.isEqual(other.enableSupportTickets) && enableSharedNotebooks.isEqual(other.enableSharedNotebooks) && enableSingleNoteSharing.isEqual(other.enableSingleNoteSharing) && enableSponsoredAccounts.isEqual(other.enableSponsoredAccounts) && enableTwitterSharing.isEqual(other.enableTwitterSharing) && enableLinkedInSharing.isEqual(other.enableLinkedInSharing) && enablePublicNotebooks.isEqual(other.enablePublicNotebooks) ; } bool operator!=(const BootstrapSettings& other) const { return !(*this == other); } }; /** * This structure describes a collection of bootstrap settings. **/ struct BootstrapProfile { /** The unique name of the profile, which is guaranteed to remain consistent across calls to getBootstrapInfo. */ QString name; /** The settings for this profile. */ BootstrapSettings settings; bool operator==(const BootstrapProfile& other) const { return (name == other.name) && (settings == other.settings) ; } bool operator!=(const BootstrapProfile& other) const { return !(*this == other); } }; /** * This structure describes a collection of bootstrap profiles. **/ struct BootstrapInfo { /** List of one or more bootstrap profiles, in descending preference order. */ QList< BootstrapProfile > profiles; bool operator==(const BootstrapInfo& other) const { return (profiles == other.profiles) ; } bool operator!=(const BootstrapInfo& other) const { return !(*this == other); } }; /** * This structure is given out by the NoteStore when a client asks to * receive the current state of an account. The client asks for the server's * state one chunk at a time in order to allow clients to retrieve the state * of a large account without needing to transfer the entire account in * a single message. * * The server always gives SyncChunks using an ascending series of Update * Sequence Numbers (USNs). * **/ struct SyncChunk { /** The server's current date and time. */ Timestamp currentTime; /** The highest USN for any of the data objects represented in this sync chunk. If there are no objects in the chunk, this will not be set. */ Optional< qint32 > chunkHighUSN; /** The total number of updates that have been performed in the service for this account. This is equal to the highest USN within the account at the point that this SyncChunk was generated. If updateCount and chunkHighUSN are identical, that means that this is the last chunk in the account ... there is no more recent information. */ qint32 updateCount; /** If present, this is a list of non-expunged notes that have a USN in this chunk. This will include notes that are "deleted" but not expunged (i.e. in the trash). The notes will include their list of tags and resources, but the note content, resource content, resource recognition data and resource alternate data will not be supplied. */ Optional< QList< Note > > notes; /** If present, this is a list of non-expunged notebooks that have a USN in this chunk. This will include notebooks that are "deleted" but not expunged (i.e. in the trash). */ Optional< QList< Notebook > > notebooks; /** If present, this is a list of the non-expunged tags that have a USN in this chunk. */ Optional< QList< Tag > > tags; /** If present, this is a list of non-expunged searches that have a USN in this chunk. */ Optional< QList< SavedSearch > > searches; /** If present, this is a list of the non-expunged resources that have a USN in this chunk. This will include the metadata for each resource, but not its binary contents or recognition data, which must be retrieved separately. */ Optional< QList< Resource > > resources; /** If present, the GUIDs of all of the notes that were permanently expunged in this chunk. */ Optional< QList< Guid > > expungedNotes; /** If present, the GUIDs of all of the notebooks that were permanently expunged in this chunk. When a notebook is expunged, this implies that all of its child notes (and their resources) were also expunged. */ Optional< QList< Guid > > expungedNotebooks; /** If present, the GUIDs of all of the tags that were permanently expunged in this chunk. */ Optional< QList< Guid > > expungedTags; /** If present, the GUIDs of all of the saved searches that were permanently expunged in this chunk. */ Optional< QList< Guid > > expungedSearches; /** If present, this is a list of non-expunged LinkedNotebooks that have a USN in this chunk. */ Optional< QList< LinkedNotebook > > linkedNotebooks; /** If present, the GUIDs of all of the LinkedNotebooks that were permanently expunged in this chunk. */ Optional< QList< Guid > > expungedLinkedNotebooks; bool operator==(const SyncChunk& other) const { return (currentTime == other.currentTime) && chunkHighUSN.isEqual(other.chunkHighUSN) && (updateCount == other.updateCount) && notes.isEqual(other.notes) && notebooks.isEqual(other.notebooks) && tags.isEqual(other.tags) && searches.isEqual(other.searches) && resources.isEqual(other.resources) && expungedNotes.isEqual(other.expungedNotes) && expungedNotebooks.isEqual(other.expungedNotebooks) && expungedTags.isEqual(other.expungedTags) && expungedSearches.isEqual(other.expungedSearches) && linkedNotebooks.isEqual(other.linkedNotebooks) && expungedLinkedNotebooks.isEqual(other.expungedLinkedNotebooks) ; } bool operator!=(const SyncChunk& other) const { return !(*this == other); } }; /** * A small structure for returning a list of notes out of a larger set. * **/ struct NoteList { /** The starting index within the overall set of notes. This is also the number of notes that are "before" this list in the set. */ qint32 startIndex; /** The number of notes in the larger set. This can be used to calculate how many notes are "after" this note in the set. (I.e. remaining = totalNotes - (startIndex + notes.length) ) */ qint32 totalNotes; /** The list of notes from this range. The Notes will include all metadata (attributes, resources, etc.), but will not include the ENML content of the note or the binary contents of any resources. */ QList< Note > notes; /** If the NoteList was produced using a text based search query that included words that are not indexed or searched by the service, this will include a list of those ignored words. */ Optional< QStringList > stoppedWords; /** If the NoteList was produced using a text based search query that included viable search words or quoted expressions, this will include a list of those words. Any stopped words will not be included in this list. */ Optional< QStringList > searchedWords; /** Indicates the total number of transactions that have been committed within the account. This reflects (for example) the number of discrete additions or modifications that have been made to the data in this account (tags, notes, resources, etc.). This number is the "high water mark" for Update Sequence Numbers (USN) within the account. */ Optional< qint32 > updateCount; bool operator==(const NoteList& other) const { return (startIndex == other.startIndex) && (totalNotes == other.totalNotes) && (notes == other.notes) && stoppedWords.isEqual(other.stoppedWords) && searchedWords.isEqual(other.searchedWords) && updateCount.isEqual(other.updateCount) ; } bool operator!=(const NoteList& other) const { return !(*this == other); } }; /** * This structure is used in the set of results returned by the * findNotesMetadata function. It represents the high-level information about * a single Note, without some of the larger deep structure. This allows * for the information about a list of Notes to be returned relatively quickly * with less marshalling and data transfer to remote clients. * Most fields in this structure are identical to the corresponding field in * the Note structure, with the exception of: * * */ struct NoteMetadata { /** NOT DOCUMENTED */ Guid guid; /** NOT DOCUMENTED */ Optional< QString > title; /** NOT DOCUMENTED */ Optional< qint32 > contentLength; /** NOT DOCUMENTED */ Optional< Timestamp > created; /** NOT DOCUMENTED */ Optional< Timestamp > updated; /** NOT DOCUMENTED */ Optional< Timestamp > deleted; /** NOT DOCUMENTED */ Optional< qint32 > updateSequenceNum; /** NOT DOCUMENTED */ Optional< QString > notebookGuid; /** NOT DOCUMENTED */ Optional< QList< Guid > > tagGuids; /** NOT DOCUMENTED */ Optional< NoteAttributes > attributes; /** If set, then this will contain the MIME type of the largest Resource (in bytes) within the Note. This may be useful, for example, to choose an appropriate icon or thumbnail to represent the Note. */ Optional< QString > largestResourceMime; /** If set, this will contain the size of the largest Resource file, in bytes, within the Note. This may be useful, for example, to decide whether to ask the server for a thumbnail to represent the Note. */ Optional< qint32 > largestResourceSize; bool operator==(const NoteMetadata& other) const { return (guid == other.guid) && title.isEqual(other.title) && contentLength.isEqual(other.contentLength) && created.isEqual(other.created) && updated.isEqual(other.updated) && deleted.isEqual(other.deleted) && updateSequenceNum.isEqual(other.updateSequenceNum) && notebookGuid.isEqual(other.notebookGuid) && tagGuids.isEqual(other.tagGuids) && attributes.isEqual(other.attributes) && largestResourceMime.isEqual(other.largestResourceMime) && largestResourceSize.isEqual(other.largestResourceSize) ; } bool operator!=(const NoteMetadata& other) const { return !(*this == other); } }; /** * This structure is returned from calls to the findNotesMetadata function to * give the high-level metadata about a subset of Notes that are found to * match a specified NoteFilter in a search. * **/ struct NotesMetadataList { /** The starting index within the overall set of notes. This is also the number of notes that are "before" this list in the set. */ qint32 startIndex; /** The number of notes in the larger set. This can be used to calculate how many notes are "after" this note in the set. (I.e. remaining = totalNotes - (startIndex + notes.length) ) */ qint32 totalNotes; /** The list of metadata for Notes in this range. The set of optional fields that are set in each metadata structure will depend on the NotesMetadataResultSpec provided by the caller when the search was performed. Only the 'guid' field will be guaranteed to be set in each Note. */ QList< NoteMetadata > notes; /** If the NoteList was produced using a text based search query that included words that are not indexed or searched by the service, this will include a list of those ignored words. */ Optional< QStringList > stoppedWords; /** If the NoteList was produced using a text based search query that included viable search words or quoted expressions, this will include a list of those words. Any stopped words will not be included in this list. */ Optional< QStringList > searchedWords; /** Indicates the total number of transactions that have been committed within the account. This reflects (for example) the number of discrete additions or modifications that have been made to the data in this account (tags, notes, resources, etc.). This number is the "high water mark" for Update Sequence Numbers (USN) within the account. */ Optional< qint32 > updateCount; bool operator==(const NotesMetadataList& other) const { return (startIndex == other.startIndex) && (totalNotes == other.totalNotes) && (notes == other.notes) && stoppedWords.isEqual(other.stoppedWords) && searchedWords.isEqual(other.searchedWords) && updateCount.isEqual(other.updateCount) ; } bool operator!=(const NotesMetadataList& other) const { return !(*this == other); } }; /** * Parameters that must be given to the NoteStore emailNote call. These allow * the caller to specify the note to send, the recipient addresses, etc. * * */ struct NoteEmailParameters { /** If set, this must be the GUID of a note within the user's account that should be retrieved from the service and sent as email. If not set, the 'note' field must be provided instead. */ Optional< QString > guid; /** If the 'guid' field is not set, this field must be provided, including the full contents of the note note (and all of its Resources) to send. This can be used for a Note that as not been created in the service, for example by a local client with local notes. */ Optional< Note > note; /** If provided, this should contain a list of the SMTP email addresses that should be included in the "To:" line of the email. Callers must specify at least one "to" or "cc" email address. */ Optional< QStringList > toAddresses; /** If provided, this should contain a list of the SMTP email addresses that should be included in the "Cc:" line of the email. Callers must specify at least one "to" or "cc" email address. */ Optional< QStringList > ccAddresses; /** If provided, this should contain the subject line of the email that will be sent. If not provided, the title of the note will be used as the subject of the email. */ Optional< QString > subject; /** If provided, this is additional personal text that should be included into the email as a message from the owner to the recipient(s). */ Optional< QString > message; bool operator==(const NoteEmailParameters& other) const { return guid.isEqual(other.guid) && note.isEqual(other.note) && toAddresses.isEqual(other.toAddresses) && ccAddresses.isEqual(other.ccAddresses) && subject.isEqual(other.subject) && message.isEqual(other.message) ; } bool operator!=(const NoteEmailParameters& other) const { return !(*this == other); } }; /** * The result of calling findRelated(). The contents of the notes, * notebooks, and tags fields will be in decreasing order of expected * relevance. It is possible that fewer results than requested will be * returned even if there are enough distinct entities in the account * in cases where the relevance is estimated to be low. * * */ struct RelatedResult { /** If notes have been requested to be included, this will be the list of notes. */ Optional< QList< Note > > notes; /** If notebooks have been requested to be included, this will be the list of notebooks. */ Optional< QList< Notebook > > notebooks; /** If tags have been requested to be included, this will be the list of tags. */ Optional< QList< Tag > > tags; /** If includeContainingNotebooks is set to true in the RelatedResultSpec, return the list of notebooks to to which the returned related notes belong. The notebooks in this list will occur once per notebook GUID and are represented as NotebookDescriptor objects. */ Optional< QList< NotebookDescriptor > > containingNotebooks; bool operator==(const RelatedResult& other) const { return notes.isEqual(other.notes) && notebooks.isEqual(other.notebooks) && tags.isEqual(other.tags) && containingNotebooks.isEqual(other.containingNotebooks) ; } bool operator!=(const RelatedResult& other) const { return !(*this == other); } }; /** * This exception is thrown by EDAM procedures when a call fails as a result of * a problem that a caller may be able to resolve. For example, if the user * attempts to add a note to their account which would exceed their storage * quota, this type of exception may be thrown to indicate the source of the * error so that they can choose an alternate action. * * This exception would not be used for internal system errors that do not * reflect user actions, but rather reflect a problem within the service that * the user cannot resolve. * * errorCode: The numeric code indicating the type of error that occurred. * must be one of the values of EDAMErrorCode. * * parameter: If the error applied to a particular input parameter, this will * indicate which parameter. */ class EDAMUserException: public EvernoteException { public: EDAMErrorCode::type errorCode; Optional< QString > parameter; EDAMUserException() {} ~EDAMUserException() throw() {} const char* what() const throw() Q_DECL_OVERRIDE; virtual QSharedPointer exceptionData() const Q_DECL_OVERRIDE; }; /** * This exception is thrown by EDAM procedures when a call fails as a result of * a problem in the service that could not be changed through caller action. * * errorCode: The numeric code indicating the type of error that occurred. * must be one of the values of EDAMErrorCode. * * message: This may contain additional information about the error * * rateLimitDuration: Indicates the minimum number of seconds that an application should * expect subsequent API calls for this user to fail. The application should not retry * API requests for the user until at least this many seconds have passed. Present only * when errorCode is RATE_LIMIT_REACHED, */ class EDAMSystemException: public EvernoteException { public: EDAMErrorCode::type errorCode; Optional< QString > message; Optional< qint32 > rateLimitDuration; EDAMSystemException() {} ~EDAMSystemException() throw() {} const char* what() const throw() Q_DECL_OVERRIDE; virtual QSharedPointer exceptionData() const Q_DECL_OVERRIDE; }; /** * This exception is thrown by EDAM procedures when a caller asks to perform * an operation on an object that does not exist. This may be thrown based on an invalid * primary identifier (e.g. a bad GUID), or when the caller refers to an object * by another unique identifier (e.g. a User's email address). * * identifier: A description of the object that was not found on the server. * For example, "Note.notebookGuid" when a caller attempts to create a note in a * notebook that does not exist in the user's account. * * key: The value passed from the client in the identifier, which was not * found. For example, the GUID that was not found. */ class EDAMNotFoundException: public EvernoteException { public: Optional< QString > identifier; Optional< QString > key; EDAMNotFoundException() {} ~EDAMNotFoundException() throw() {} const char* what() const throw() Q_DECL_OVERRIDE; virtual QSharedPointer exceptionData() const Q_DECL_OVERRIDE; }; } Q_DECLARE_METATYPE(qevercloud::SyncState) Q_DECLARE_METATYPE(qevercloud::SyncChunkFilter) Q_DECLARE_METATYPE(qevercloud::NoteFilter) Q_DECLARE_METATYPE(qevercloud::NotesMetadataResultSpec) Q_DECLARE_METATYPE(qevercloud::NoteCollectionCounts) Q_DECLARE_METATYPE(qevercloud::NoteVersionId) Q_DECLARE_METATYPE(qevercloud::ClientUsageMetrics) Q_DECLARE_METATYPE(qevercloud::RelatedQuery) Q_DECLARE_METATYPE(qevercloud::RelatedResultSpec) Q_DECLARE_METATYPE(qevercloud::Data) Q_DECLARE_METATYPE(qevercloud::UserAttributes) Q_DECLARE_METATYPE(qevercloud::Accounting) Q_DECLARE_METATYPE(qevercloud::BusinessUserInfo) Q_DECLARE_METATYPE(qevercloud::PremiumInfo) Q_DECLARE_METATYPE(qevercloud::User) Q_DECLARE_METATYPE(qevercloud::Tag) Q_DECLARE_METATYPE(qevercloud::LazyMap) Q_DECLARE_METATYPE(qevercloud::ResourceAttributes) Q_DECLARE_METATYPE(qevercloud::Resource) Q_DECLARE_METATYPE(qevercloud::NoteAttributes) Q_DECLARE_METATYPE(qevercloud::Note) Q_DECLARE_METATYPE(qevercloud::Publishing) Q_DECLARE_METATYPE(qevercloud::BusinessNotebook) Q_DECLARE_METATYPE(qevercloud::SavedSearchScope) Q_DECLARE_METATYPE(qevercloud::SavedSearch) Q_DECLARE_METATYPE(qevercloud::SharedNotebookRecipientSettings) Q_DECLARE_METATYPE(qevercloud::SharedNotebook) Q_DECLARE_METATYPE(qevercloud::NotebookRestrictions) Q_DECLARE_METATYPE(qevercloud::Notebook) Q_DECLARE_METATYPE(qevercloud::LinkedNotebook) Q_DECLARE_METATYPE(qevercloud::NotebookDescriptor) Q_DECLARE_METATYPE(qevercloud::PublicUserInfo) Q_DECLARE_METATYPE(qevercloud::AuthenticationResult) Q_DECLARE_METATYPE(qevercloud::BootstrapSettings) Q_DECLARE_METATYPE(qevercloud::BootstrapProfile) Q_DECLARE_METATYPE(qevercloud::BootstrapInfo) Q_DECLARE_METATYPE(qevercloud::SyncChunk) Q_DECLARE_METATYPE(qevercloud::NoteList) Q_DECLARE_METATYPE(qevercloud::NoteMetadata) Q_DECLARE_METATYPE(qevercloud::NotesMetadataList) Q_DECLARE_METATYPE(qevercloud::NoteEmailParameters) Q_DECLARE_METATYPE(qevercloud::RelatedResult) #endif // QEVERCLOUD_GENERATED_TYPES_H nixnote2-2.0.2/qevercloud/generated/types_impl.h000066400000000000000000000175021315604104400217310ustar00rootroot00000000000000// This file is generated from Evernote Thrift API and is a part of the QEverCloud project #ifndef QEVERCLOUD_GENERATED_TYPES_IMPL_H #define QEVERCLOUD_GENERATED_TYPES_IMPL_H #include #include #include #include #include #include #include #include "../Optional.h" #include "../impl.h" #include "types.h" namespace qevercloud { /** @cond HIDDEN_SYMBOLS */ void writeSyncState(ThriftBinaryBufferWriter& w, const SyncState& s); void readSyncState(ThriftBinaryBufferReader& r, SyncState& s); void writeSyncChunk(ThriftBinaryBufferWriter& w, const SyncChunk& s); void readSyncChunk(ThriftBinaryBufferReader& r, SyncChunk& s); void writeSyncChunkFilter(ThriftBinaryBufferWriter& w, const SyncChunkFilter& s); void readSyncChunkFilter(ThriftBinaryBufferReader& r, SyncChunkFilter& s); void writeNoteFilter(ThriftBinaryBufferWriter& w, const NoteFilter& s); void readNoteFilter(ThriftBinaryBufferReader& r, NoteFilter& s); void writeNoteList(ThriftBinaryBufferWriter& w, const NoteList& s); void readNoteList(ThriftBinaryBufferReader& r, NoteList& s); void writeNoteMetadata(ThriftBinaryBufferWriter& w, const NoteMetadata& s); void readNoteMetadata(ThriftBinaryBufferReader& r, NoteMetadata& s); void writeNotesMetadataList(ThriftBinaryBufferWriter& w, const NotesMetadataList& s); void readNotesMetadataList(ThriftBinaryBufferReader& r, NotesMetadataList& s); void writeNotesMetadataResultSpec(ThriftBinaryBufferWriter& w, const NotesMetadataResultSpec& s); void readNotesMetadataResultSpec(ThriftBinaryBufferReader& r, NotesMetadataResultSpec& s); void writeNoteCollectionCounts(ThriftBinaryBufferWriter& w, const NoteCollectionCounts& s); void readNoteCollectionCounts(ThriftBinaryBufferReader& r, NoteCollectionCounts& s); void writeNoteEmailParameters(ThriftBinaryBufferWriter& w, const NoteEmailParameters& s); void readNoteEmailParameters(ThriftBinaryBufferReader& r, NoteEmailParameters& s); void writeNoteVersionId(ThriftBinaryBufferWriter& w, const NoteVersionId& s); void readNoteVersionId(ThriftBinaryBufferReader& r, NoteVersionId& s); void writeClientUsageMetrics(ThriftBinaryBufferWriter& w, const ClientUsageMetrics& s); void readClientUsageMetrics(ThriftBinaryBufferReader& r, ClientUsageMetrics& s); void writeRelatedQuery(ThriftBinaryBufferWriter& w, const RelatedQuery& s); void readRelatedQuery(ThriftBinaryBufferReader& r, RelatedQuery& s); void writeRelatedResult(ThriftBinaryBufferWriter& w, const RelatedResult& s); void readRelatedResult(ThriftBinaryBufferReader& r, RelatedResult& s); void writeRelatedResultSpec(ThriftBinaryBufferWriter& w, const RelatedResultSpec& s); void readRelatedResultSpec(ThriftBinaryBufferReader& r, RelatedResultSpec& s); void writeData(ThriftBinaryBufferWriter& w, const Data& s); void readData(ThriftBinaryBufferReader& r, Data& s); void writeUserAttributes(ThriftBinaryBufferWriter& w, const UserAttributes& s); void readUserAttributes(ThriftBinaryBufferReader& r, UserAttributes& s); void writeAccounting(ThriftBinaryBufferWriter& w, const Accounting& s); void readAccounting(ThriftBinaryBufferReader& r, Accounting& s); void writeBusinessUserInfo(ThriftBinaryBufferWriter& w, const BusinessUserInfo& s); void readBusinessUserInfo(ThriftBinaryBufferReader& r, BusinessUserInfo& s); void writePremiumInfo(ThriftBinaryBufferWriter& w, const PremiumInfo& s); void readPremiumInfo(ThriftBinaryBufferReader& r, PremiumInfo& s); void writeUser(ThriftBinaryBufferWriter& w, const User& s); void readUser(ThriftBinaryBufferReader& r, User& s); void writeTag(ThriftBinaryBufferWriter& w, const Tag& s); void readTag(ThriftBinaryBufferReader& r, Tag& s); void writeLazyMap(ThriftBinaryBufferWriter& w, const LazyMap& s); void readLazyMap(ThriftBinaryBufferReader& r, LazyMap& s); void writeResourceAttributes(ThriftBinaryBufferWriter& w, const ResourceAttributes& s); void readResourceAttributes(ThriftBinaryBufferReader& r, ResourceAttributes& s); void writeResource(ThriftBinaryBufferWriter& w, const Resource& s); void readResource(ThriftBinaryBufferReader& r, Resource& s); void writeNoteAttributes(ThriftBinaryBufferWriter& w, const NoteAttributes& s); void readNoteAttributes(ThriftBinaryBufferReader& r, NoteAttributes& s); void writeNote(ThriftBinaryBufferWriter& w, const Note& s); void readNote(ThriftBinaryBufferReader& r, Note& s); void writePublishing(ThriftBinaryBufferWriter& w, const Publishing& s); void readPublishing(ThriftBinaryBufferReader& r, Publishing& s); void writeBusinessNotebook(ThriftBinaryBufferWriter& w, const BusinessNotebook& s); void readBusinessNotebook(ThriftBinaryBufferReader& r, BusinessNotebook& s); void writeSavedSearchScope(ThriftBinaryBufferWriter& w, const SavedSearchScope& s); void readSavedSearchScope(ThriftBinaryBufferReader& r, SavedSearchScope& s); void writeSavedSearch(ThriftBinaryBufferWriter& w, const SavedSearch& s); void readSavedSearch(ThriftBinaryBufferReader& r, SavedSearch& s); void writeSharedNotebookRecipientSettings(ThriftBinaryBufferWriter& w, const SharedNotebookRecipientSettings& s); void readSharedNotebookRecipientSettings(ThriftBinaryBufferReader& r, SharedNotebookRecipientSettings& s); void writeSharedNotebook(ThriftBinaryBufferWriter& w, const SharedNotebook& s); void readSharedNotebook(ThriftBinaryBufferReader& r, SharedNotebook& s); void writeNotebookRestrictions(ThriftBinaryBufferWriter& w, const NotebookRestrictions& s); void readNotebookRestrictions(ThriftBinaryBufferReader& r, NotebookRestrictions& s); void writeNotebook(ThriftBinaryBufferWriter& w, const Notebook& s); void readNotebook(ThriftBinaryBufferReader& r, Notebook& s); void writeLinkedNotebook(ThriftBinaryBufferWriter& w, const LinkedNotebook& s); void readLinkedNotebook(ThriftBinaryBufferReader& r, LinkedNotebook& s); void writeNotebookDescriptor(ThriftBinaryBufferWriter& w, const NotebookDescriptor& s); void readNotebookDescriptor(ThriftBinaryBufferReader& r, NotebookDescriptor& s); void writePublicUserInfo(ThriftBinaryBufferWriter& w, const PublicUserInfo& s); void readPublicUserInfo(ThriftBinaryBufferReader& r, PublicUserInfo& s); void writeAuthenticationResult(ThriftBinaryBufferWriter& w, const AuthenticationResult& s); void readAuthenticationResult(ThriftBinaryBufferReader& r, AuthenticationResult& s); void writeBootstrapSettings(ThriftBinaryBufferWriter& w, const BootstrapSettings& s); void readBootstrapSettings(ThriftBinaryBufferReader& r, BootstrapSettings& s); void writeBootstrapProfile(ThriftBinaryBufferWriter& w, const BootstrapProfile& s); void readBootstrapProfile(ThriftBinaryBufferReader& r, BootstrapProfile& s); void writeBootstrapInfo(ThriftBinaryBufferWriter& w, const BootstrapInfo& s); void readBootstrapInfo(ThriftBinaryBufferReader& r, BootstrapInfo& s); void readEDAMUserException(ThriftBinaryBufferReader& r, EDAMUserException& e); void readEDAMSystemException(ThriftBinaryBufferReader& r, EDAMSystemException& e); void readEDAMNotFoundException(ThriftBinaryBufferReader& r, EDAMNotFoundException& e); void readEnumEDAMErrorCode(ThriftBinaryBufferReader& r, EDAMErrorCode::type& e); void readEnumPrivilegeLevel(ThriftBinaryBufferReader& r, PrivilegeLevel::type& e); void readEnumQueryFormat(ThriftBinaryBufferReader& r, QueryFormat::type& e); void readEnumNoteSortOrder(ThriftBinaryBufferReader& r, NoteSortOrder::type& e); void readEnumPremiumOrderStatus(ThriftBinaryBufferReader& r, PremiumOrderStatus::type& e); void readEnumSharedNotebookPrivilegeLevel(ThriftBinaryBufferReader& r, SharedNotebookPrivilegeLevel::type& e); void readEnumSponsoredGroupRole(ThriftBinaryBufferReader& r, SponsoredGroupRole::type& e); void readEnumBusinessUserRole(ThriftBinaryBufferReader& r, BusinessUserRole::type& e); void readEnumSharedNotebookInstanceRestrictions(ThriftBinaryBufferReader& r, SharedNotebookInstanceRestrictions::type& e); void readEnumReminderEmailConfig(ThriftBinaryBufferReader& r, ReminderEmailConfig::type& e); /** @endcond */ } #endif // QEVERCLOUD_GENERATED_TYPES_IMPL_H nixnote2-2.0.2/qevercloud/globals.h000066400000000000000000000010141315604104400172200ustar00rootroot00000000000000#ifndef QEVERCLOUD_GLOBALS_H #define QEVERCLOUD_GLOBALS_H #include /** * All the library lives in this namespace. */ namespace qevercloud { /** * All network request made by QEverCloud - including OAuth - are * served by this NetworkAccessManager. * * Use this function to handle proxy authentication requests etc. */ QNetworkAccessManager* evernoteNetworkAccessManager(); /** * qevercloud library version. */ const int libraryVersion = 2*10000 + 1; } #endif // QEVERCLOUD_GLOBALS_H nixnote2-2.0.2/qevercloud/http.cpp000066400000000000000000000146641315604104400171260ustar00rootroot00000000000000 #include "thumbnail.h" #include "http.h" #include "exceptions.h" #include "globals.h" #include #include #include #include /** @cond HIDDEN_SYMBOLS */ namespace qevercloud { QNetworkAccessManager* evernoteNetworkAccessManager() { static QSharedPointer networkAccessManager_; static QMutex networkAccessManagerMutex; QMutexLocker mutexLocker(&networkAccessManagerMutex); if(networkAccessManager_.isNull()) { networkAccessManager_ = QSharedPointer(new QNetworkAccessManager); } return networkAccessManager_.data(); } ReplyFetcher::ReplyFetcher(): success_(false), httpStatusCode_(0) { ticker_ = new QTimer(this); connect(ticker_, SIGNAL(timeout()), this, SLOT(checkForTimeout())); } void ReplyFetcher::start(QNetworkAccessManager *nam, QUrl url) { QNetworkRequest request; request.setUrl(url); start(nam, request); } void ReplyFetcher::start(QNetworkAccessManager *nam, QNetworkRequest request, QByteArray postData) { httpStatusCode_= 0; errorText_.clear(); receivedData_.clear(); success_ = true; // not in finished() signal handler, it might be not called according to the docs // besides, I've added timeout feature lastNetworkTime_ = QDateTime::currentMSecsSinceEpoch(); ticker_->start(1000); if(postData.isNull()) { reply = QSharedPointer(nam->get(request), &QObject::deleteLater); } else { reply = QSharedPointer(nam->post(request, postData), &QObject::deleteLater); } connect(reply.data(), SIGNAL(finished()), this, SLOT(onFinished())); connect(reply.data(), SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onError())); connect(reply.data(), SIGNAL(sslErrors(QList)), this, SLOT(onSslErrors(QList))); connect(reply.data(), SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(onDownloadProgress(qint64,qint64))); } void ReplyFetcher::onDownloadProgress(qint64, qint64) { lastNetworkTime_ = QDateTime::currentMSecsSinceEpoch(); } void ReplyFetcher::checkForTimeout() { const int connectionTimeout = 30*1000; if((lastNetworkTime_ - QDateTime::currentMSecsSinceEpoch()) > connectionTimeout) { setError(QStringLiteral("Connection timeout.")); } } void ReplyFetcher::onFinished() { ticker_->stop(); if(!success_) return; receivedData_ = reply->readAll(); httpStatusCode_ = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); disconnect(reply.data()); emit replyFetched(this); } void ReplyFetcher::onError() { setError(reply->errorString()); } void ReplyFetcher::onSslErrors(QList l) { QString errorText = QStringLiteral("SSL Errors:\n"); foreach(QSslError e, l) { errorText += e.errorString().append('\n'); } setError(errorText); } void ReplyFetcher::setError(QString errorText) { success_ = false; ticker_->stop(); errorText_ = errorText; disconnect(reply.data()); emit replyFetched(this); } QByteArray simpleDownload(QNetworkAccessManager* nam, QNetworkRequest request, QByteArray postData = QByteArray(), int* httpStatusCode = 0) { ReplyFetcher f; QEventLoop loop; QObject::connect(&f, SIGNAL(replyFetched(QObject*)), &loop, SLOT(quit())); f.start(nam, request, postData); loop.exec(QEventLoop::ExcludeUserInputEvents); if(httpStatusCode) *httpStatusCode = f.httpStatusCode(); if(f.isError()) { throw EverCloudException(f.errorText()); } return f.receivedData(); } QNetworkRequest createEvernoteRequest(QString url) { QNetworkRequest request; request.setUrl(url); request.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-thrift")); #if QT_VERSION < 0x050000 request.setRawHeader("User-Agent", QString("QEverCloud %1.%2").arg(libraryVersion / 10000).arg(libraryVersion % 10000).toLatin1()); #else request.setHeader(QNetworkRequest::UserAgentHeader, QStringLiteral("QEverCloud %1.%2").arg(libraryVersion / 10000).arg(libraryVersion % 10000)); #endif request.setRawHeader("Accept", "application/x-thrift"); return request; } QByteArray askEvernote(QString url, QByteArray postData) { int httpStatusCode = 0; QByteArray reply = simpleDownload(evernoteNetworkAccessManager(), createEvernoteRequest(url), postData, &httpStatusCode); if(httpStatusCode != 200) { throw EverCloudException(QStringLiteral("HTTP Status Code = %1").arg(httpStatusCode)); } return reply; } QByteArray Thumbnail::download(Guid guid, bool isPublic, bool isResourceGuid) { int httpStatusCode = 0; QPair request = createPostRequest(guid, isPublic, isResourceGuid); QByteArray reply = simpleDownload(evernoteNetworkAccessManager(), request.first, request.second, &httpStatusCode); if(httpStatusCode != 200) { throw EverCloudException(QStringLiteral("HTTP Status Code = %1").arg(httpStatusCode)); } return reply; } AsyncResult* Thumbnail::downloadAsync(Guid guid, bool isPublic, bool isResourceGuid) { QPair pair = createPostRequest(guid, isPublic, isResourceGuid); return new AsyncResult(pair.first, pair.second); } QPair Thumbnail::createPostRequest(Guid guid, bool isPublic, bool isResourceGuid) { QByteArray postData = ""; // not QByteArray()! or else ReplyFetcher will not work. QNetworkRequest request; QString urlPattern; if(isResourceGuid) { urlPattern = QStringLiteral("https://%1/shard/%2/thm/res/%3"); } else { urlPattern = QStringLiteral("https://%1/shard/%2/thm/note/%3"); } QString url = urlPattern.arg(host_).arg(shardId_).arg(guid); QString ext; switch(imageType_) { case ImageType::BMP: ext = QStringLiteral(".bmp"); break; case ImageType::GIF: ext = QStringLiteral(".gif"); break; case ImageType::JPEG: ext = QStringLiteral(".jpg"); break; default: ext = QStringLiteral(".png"); break; } url += ext; if(size_ != 300) { url += QStringLiteral("?size=%1").arg(size_); } request.setUrl(QUrl(url)); request.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded")); if(!isPublic) { postData = QByteArray("auth=")+ QUrl::toPercentEncoding(authenticationToken_); } return qMakePair(request, postData); } } /** @endcond */ nixnote2-2.0.2/qevercloud/http.h000066400000000000000000000030531315604104400165610ustar00rootroot00000000000000#ifndef QEVERCLOUD_HTTP_H #define QEVERCLOUD_HTTP_H #include #include #include #include #include #include #include #include #include #include /** @cond HIDDEN_SYMBOLS */ namespace qevercloud { QNetworkAccessManager* evernoteNetworkAccessManager(); // the class greatly simplifies QNetworkReply handling class ReplyFetcher: public QObject { Q_OBJECT public: ReplyFetcher(); void start(QNetworkAccessManager* nam, QUrl url); // if !postData.isNull() then POST will be issued instead of GET void start(QNetworkAccessManager* nam, QNetworkRequest request, QByteArray postData = QByteArray()); bool isError() {return !success_;} QString errorText() {return errorText_;} QByteArray receivedData() {return receivedData_;} int httpStatusCode() {return httpStatusCode_;} signals: void replyFetched(QObject*); // sends itself private slots: void onFinished(); void onError(); void onSslErrors(QList l); void onDownloadProgress(qint64, qint64); void checkForTimeout(); private: QSharedPointer reply; bool success_; QString errorText_; QByteArray receivedData_; int httpStatusCode_; void setError(QString errorText); QTimer* ticker_; qint64 lastNetworkTime_; }; QNetworkRequest createEvernoteRequest(QString url); QByteArray askEvernote(QString url, QByteArray postData); } /** @endcond */ #endif // QEVERCLOUD_HTTP_H nixnote2-2.0.2/qevercloud/impl.h000066400000000000000000000015361315604104400165470ustar00rootroot00000000000000#ifndef QEVERCLOUD_IMPL_H #define QEVERCLOUD_IMPL_H #include "exceptions.h" #include "globals.h" #include "http.h" #include "thrift.h" #include "Optional.h" /** @mainpage About QEverCloud This library presents complete Evernote SDK for Qt. All the functionality that is described on Evernote site is implemented and ready to use. In particular OAuth autentication is implemented. Include *QEverCloud.h* or *QEverCloudOAuth.h* to use the library. The latter header is needed if you use OAuth functionality. QEverCloud on GitHub */ namespace qevercloud { /** @cond HIDDEN_SYMBOLS */ ThriftException readThriftException(ThriftBinaryBufferReader& r); void throwEDAMSystemException(const EDAMSystemException &e); /** @endcond */ } #endif // QEVERCLOUD_IMPL_H nixnote2-2.0.2/qevercloud/include/000077500000000000000000000000001315604104400170535ustar00rootroot00000000000000nixnote2-2.0.2/qevercloud/include/QEverCloud.h000066400000000000000000000001751315604104400212400ustar00rootroot00000000000000 #ifndef QEVERCLOUD_INFTHEADER_H #define QEVERCLOUD_INFTHEADER_H #include "../public.h" #endif // QEVERCLOUD_INFTHEADER_H nixnote2-2.0.2/qevercloud/include/QEverCloudOAuth.h000066400000000000000000000002411315604104400221730ustar00rootroot00000000000000#ifndef QEVERCLOUDOAUTH_INFTHEADER_H #define QEVERCLOUDOAUTH_INFTHEADER_H #include "QEverCloud.h" #include "../oauth.h" #endif // QEVERCLOUDOAUTH_INFTHEADER_H nixnote2-2.0.2/qevercloud/oauth.cpp000066400000000000000000000157611315604104400172660ustar00rootroot00000000000000#include "oauth.h" #include "http.h" #include #include #ifdef USE_QT_WEB_ENGINE #include #else #include #include #endif #include #include namespace { quint64 random64() { quint64 res = 0; for(int i = 0; i < 8; i++) { res += static_cast(qrand() % 256) << i*8; } QByteArray randomData = QUuid::createUuid().toRfc4122(); quint64 random; std::memcpy(&random, &randomData.constData()[0], sizeof(random)); res ^= random; std::memcpy(&random, &randomData.constData()[sizeof(random)], sizeof(random)); res ^= random; return res; } typedef quint64 (*NonceGenerator)(); NonceGenerator nonceGenerator_ = random64; NonceGenerator nonceGenerator() {return nonceGenerator_;} } void setNonceGenerator(quint64 (*nonceGenerator)()) { nonceGenerator_ = nonceGenerator; } qevercloud::EvernoteOAuthWebView::EvernoteOAuthWebView(QWidget *parent) #ifdef USE_QT_WEB_ENGINE : QWebEngineView(parent), isSucceeded_(false) #else : QWebView(parent), isSucceeded_(false) #endif { #ifndef USE_QT_WEB_ENGINE page()->setNetworkAccessManager(evernoteNetworkAccessManager()); #endif } void qevercloud::EvernoteOAuthWebView::setSizeHint(QSize sizeHint) { sizeHint_ = sizeHint; updateGeometry(); } void qevercloud::EvernoteOAuthWebView::authenticate(QString host, QString consumerKey, QString consumerSecret) { host_ = host; isSucceeded_ = false; this->setHtml(""); this->history()->clear(); qint64 timestamp = QDateTime::currentMSecsSinceEpoch()/1000; qint64 nonce = nonceGenerator()(); oauthUrlBase_ = QStringLiteral("https://%1/oauth?oauth_consumer_key=%2&oauth_signature=%3&oauth_signature_method=PLAINTEXT&oauth_timestamp=%4&oauth_nonce=%5") .arg(host).arg(consumerKey).arg(consumerSecret).arg(timestamp).arg(nonce); // step 1: acquire temporary token ReplyFetcher* replyFetcher = new ReplyFetcher(); connect(replyFetcher, QEC_SIGNAL(ReplyFetcher,replyFetched,QObject*), this, QEC_SLOT(EvernoteOAuthWebView,temporaryFinished,QObject*)); QUrl url(oauthUrlBase_ + QStringLiteral("&oauth_callback=nnoauth")); #ifdef USE_QT_WEB_ENGINE replyFetcher->start(evernoteNetworkAccessManager(), url); #else replyFetcher->start(page()->networkAccessManager(), url); #endif } void qevercloud::EvernoteOAuthWebView::temporaryFinished(QObject *rf) { ReplyFetcher* replyFetcher = qobject_cast(rf); if(replyFetcher->isError()) { setError(replyFetcher->errorText()); } else { QString reply = QString(replyFetcher->receivedData()); int index = reply.indexOf(QStringLiteral("&oauth_token_secret")); QString token = reply.left(index); // step 2: directing a user to the login page connect(this, SIGNAL(urlChanged(QUrl)), this, SLOT(onUrlChanged(QUrl))); QUrl loginUrl(QStringLiteral("https://%1//OAuth.action?%2").arg(host_).arg(token)); this->setUrl(loginUrl); } replyFetcher->deleteLater(); } void qevercloud::EvernoteOAuthWebView::onUrlChanged(const QUrl &url) { // step 3: catch the rediret to our callback url (nnoauth) QString s = url.toString(); QString oauthMarker = QStringLiteral("?oauth_token="); if(s.contains(QStringLiteral("nnoauth?")) && s.contains(oauthMarker)) { if(s.contains(QStringLiteral("&oauth_verifier="))) { // success QString token = s.mid(s.indexOf(oauthMarker) + oauthMarker.length()); // step 4: acquire permanent token ReplyFetcher* replyFetcher = new ReplyFetcher(); connect(replyFetcher, QEC_SIGNAL(ReplyFetcher,replyFetched,QObject*), this, QEC_SLOT(EvernoteOAuthWebView,permanentFinished,QObject*)); QUrl url(oauthUrlBase_ + QStringLiteral("&oauth_token=%1").arg(token)); #ifdef USE_QT_WEB_ENGINE replyFetcher->start(evernoteNetworkAccessManager(), url); #else replyFetcher->start(page()->networkAccessManager(), url); #endif } else { setError(QStringLiteral("Authentification failed.")); } disconnect(this, SIGNAL(urlChanged(QUrl)), this, SLOT(onUrlChanged(QUrl))); QMetaObject::invokeMethod(this, "clearHtml", Qt::QueuedConnection); } } void qevercloud::EvernoteOAuthWebView::permanentFinished(QObject *rf) { ReplyFetcher* replyFetcher = qobject_cast(rf); if(replyFetcher->isError()) { setError(replyFetcher->errorText()); } else { isSucceeded_ = true; QByteArray reply = replyFetcher->receivedData(); QMap params; QList vals = reply.split('&'); for(int i = 0; i < vals.length(); i++) { QString decoded = QUrl::fromPercentEncoding(vals[i]); int pos = decoded.indexOf('='); params[decoded.left(pos).trimmed()] = decoded.mid(pos + 1); } oauthResult_.noteStoreUrl = params[QStringLiteral("edam_noteStoreUrl")]; oauthResult_.expires = Timestamp(params[QStringLiteral("edam_expires")].toLongLong()); oauthResult_.shardId = params[QStringLiteral("edam_shard")]; oauthResult_.userId = params[QStringLiteral("edam_userId")].toInt(); oauthResult_.webApiUrlPrefix = params[QStringLiteral("edam_webApiUrlPrefix")]; oauthResult_.authenticationToken = params[QStringLiteral("oauth_token")]; emit authenticationFinished(true); emit authenticationSuceeded(); } replyFetcher->deleteLater(); } void qevercloud::EvernoteOAuthWebView::setError(QString errorText) { isSucceeded_ = false; this->setHtml(""); this->history()->clear(); errorText_ = errorText; emit authenticationFinished(false); emit authenticationFailed(); } void qevercloud::EvernoteOAuthWebView::clearHtml() { setHtml(""); } qevercloud::EvernoteOAuthDialog::EvernoteOAuthDialog(QString consumerKey, QString consumerSecret, QString host, QWidget *parent) : QDialog(parent), host_(host), consumerKey_(consumerKey), consumerSecret_(consumerSecret) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); webView_ = new EvernoteOAuthWebView(this); connect(webView_, SIGNAL(authenticationSuceeded()), this, SLOT(accept()), Qt::QueuedConnection); connect(webView_, SIGNAL(authenticationFailed()), this, SLOT(reject()), Qt::QueuedConnection); QVBoxLayout* layout_ = new QVBoxLayout; layout_->addWidget(webView_); setLayout(layout_); webView_->setSizeHint(QSize(768,576)); adjustSize(); } qevercloud::EvernoteOAuthDialog::~EvernoteOAuthDialog() { #ifndef USE_QT_WEB_ENGINE QWebSettings::clearMemoryCaches(); #endif } int qevercloud::EvernoteOAuthDialog::exec() { webView_->authenticate(host_, consumerKey_, consumerSecret_); return QDialog::exec(); } void qevercloud::EvernoteOAuthDialog::open() { QDialog::open(); webView_->authenticate(host_, consumerKey_, consumerSecret_); } nixnote2-2.0.2/qevercloud/oauth.h000066400000000000000000000171161315604104400167270ustar00rootroot00000000000000#ifndef QEVERCLOUD_OAUTH_H #define QEVERCLOUD_OAUTH_H #include "./generated/types.h" #include "qt4helpers.h" #ifdef USE_QT_WEB_ENGINE #include #else #include #endif #include /** @page oauth_include Reasons for QEverCloudOAuth.h header file * * Using EvernoteOAuthDialog or EvernoteOAuthWebView implies the use of QtWidgets and QtWebkit modules so you have to use them in your app: @code # Somewhere in your Qt 5 .pro file QT += widgets webkitwidgets @endcode * * Other parts of QEverCloud depend only on QtCore and QtNetwork modules so all OAuth functionality is moved into a separate inculde file * named QEverCloudOAuth.h. If you do not use the provided OAuth functionality (say, you write a small app for personal use which relies on developer tokens only) * and do not include the header then your app will not depend on the QtWidgets and QtWebkit modules. * */ namespace qevercloud { /** * @brief Sets the function to use for nonce generation for OAuth authentication. * * The default algorithm uses qrand() so do not forget to call qsrand() in your application! * * qrand() is not guaranteed to be cryptographically strong. I try to amend the fact by using * QUuid::createUuid() which uses /dev/urandom if it's availabe. But this is no guarantee either. * So if you want total control over nonce generation you can write you own algorithm. * * setNonceGenerator is NOT thread safe. */ void setNonceGenerator(quint64 (*nonceGenerator)()); /** * @brief The class is tailored specifically for OAuth authorization with Evernote. * * While it is functional by itself you probably will prefer to use EvernoteOAuthDialog. * * %Note that you have to include @link oauth_include QEverCloudOAuth.h header@endlink. * * By deafult EvernoteOAuthWebView uses qrand() for generating nonce so do not forget to call qsrand() * in your application. See @link setNonceGenerator @endlink If you want more control over nonce generation. */ #ifdef USE_QT_WEB_ENGINE class EvernoteOAuthWebView: public QWebEngineView { #else class EvernoteOAuthWebView: public QWebView { #endif Q_OBJECT public: EvernoteOAuthWebView(QWidget* parent = 0); /** * This function starts the OAuth sequence. In the end of the sequence will be emitted one of the signals: authenticationSuceeded or authenticationFailed. * * Do not call the function while its call is in effect, i.e. one of the signals is not emitted. * * @param host * Evernote host to authorize with. You need one of this: *
        *
      • "www.evernote.com" - the production service. It's the default value.
      • *
      • "sandox.evernote.com" - the developers "sandbox" service
      • *
      * @param consumerKey * get it from the Evernote * @param consumerSecret * along with this */ void authenticate(QString host, QString consumerKey, QString consumerSecret); /** @return true if the last call to authenticate resulted in a successful authentication. */ bool isSucceeded() {return isSucceeded_;} /** @return error message resulted from the last call to authenticate */ QString oauthError() {return errorText_;} /** Holds data that is returned by Evernote on a succesful authentication */ struct OAuthResult { QString noteStoreUrl; ///< note store url for the user; no need to question UserStore::getNoteStoreUrl for it. Timestamp expires; ///< authenticationToken time of expiration. QString shardId; ///< usually is not used UserID userId; ///< same as PublicUserInfo::userId QString webApiUrlPrefix; ///< see PublicUserInfo::webApiUrlPrefix QString authenticationToken; ///< This is what this all was for! }; /** @returns the result of the last authentication, i.e. authenticate() call.*/ OAuthResult oauthResult() {return oauthResult_;} /** The method is useful to specify default size for a EverOAuthWebView. */ void setSizeHint(QSize sizeHint); QSize sizeHint() const {return sizeHint_;} signals: /** Emitted when the OAuth sequence started with authenticate() call is finished */ void authenticationFinished(bool success); /** Emitted when the OAuth sequence is succesfully finished. Call oauthResult() to get the data.*/ void authenticationSuceeded(); /** Emitted when the OAuth sequence is finished with a failure. Some error info may be availabe with errorText().*/ void authenticationFailed(); private slots: void temporaryFinished(QObject* rf); void permanentFinished(QObject* rf); void onUrlChanged(const QUrl& url); void clearHtml(); private: bool isSucceeded_; QSize sizeHint_; QString errorText_; QString oauthUrlBase_; QString host_; OAuthResult oauthResult_; void setError(QString errorText); }; /** * @brief Authorizes your app with the Evernote service by means of OAuth authentication. * * Intended usage: * @code #include OAuthDialog d(myConsumerKey, myConsumerSecret); if(d.exec() == QDialog::Accepted) { OAuthDialog::OAuthResult res = d.oauthResult(); // Connect to Evernote ... } else { QString errorText = d.oauthError(); // handle an authentication error ... } @endcode * * %Note that you have to include @link oauth_include QEverCloudOAuth.h header@endlink. * * By default EvernoteOAuthDialog uses qrand() for generating nonce so do not forget to call qsrand() * in your application. See @link setNonceGenerator @endlink If you want more control over nonce generation. */ class EvernoteOAuthDialog: public QDialog { public: typedef EvernoteOAuthWebView::OAuthResult OAuthResult; /** Constructs the dialog. * * @param host * Evernote host to authorize with. You need one of this: *
        *
      • "www.evernote.com" - the production service. It's the default value.
      • *
      • "sandox.evernote.com" - the developers "sandbox" service
      • *
      * @param consumerKey * get it from the Evernote * @param consumerSecret * along with this */ EvernoteOAuthDialog(QString consumerKey, QString consumerSecret, QString host = QStringLiteral("www.evernote.com"), QWidget* parent = 0); ~EvernoteOAuthDialog(); /** * The dialog adjusts its initial size automatically based on the conatined QWebView preffered size. * Use this method to set the size. * * @param sizeHint will be used as the preffered size of the contained QWebView. */ void setWebViewSizeHint(QSize sizeHint) {webView_->setSizeHint(sizeHint);} /** @return true in case of a succesful authentication. * You probably better chech exec() return value instead. */ bool isSucceeded() {return webView_->isSucceeded();} /** * @return In case of an authentification error may return some information about the error. */ QString oauthError() {return webView_->oauthError();} /** * @return the result of a succesful authentication. */ OAuthResult oauthResult() {return webView_->oauthResult();} /** * @return * QDialog::Accepted on a succesful authentication. */ #if QT_VERSION < 0x050000 int exec(); #else virtual int exec() Q_DECL_OVERRIDE; #endif /** Shows the dialog as a window modal dialog, returning immediately. */ #if QT_VERSION < 0x050000 void open(); #else virtual void open() Q_DECL_OVERRIDE; #endif private: EvernoteOAuthWebView* webView_; QString host_; QString consumerKey_; QString consumerSecret_; }; } #endif // QEVERCLOUD_OAUTH_H nixnote2-2.0.2/qevercloud/public.h000066400000000000000000000003721315604104400170610ustar00rootroot00000000000000#ifndef QEVERCLOUD_PUBLIC_H #define QEVERCLOUD_PUBLIC_H #include "exceptions.h" #include "globals.h" #include "thumbnail.h" #include "generated/constants.h" #include "generated/types.h" #include "generated/services.h" #endif // QEVERCLOUD_PUBLIC_H nixnote2-2.0.2/qevercloud/qt4helpers.h000066400000000000000000000016571315604104400177050ustar00rootroot00000000000000/* * This header provides the "backports" of several Qt5 macros into Qt4 * so that one can use Qt5 candies with Qt4 as well */ #ifndef QEVERCLOUD_QT4_HELPERS_H #define QEVERCLOUD_QT4_HELPERS_H #if QT_VERSION < 0x050000 #if __cplusplus >= 201103L #define Q_DECL_OVERRIDE override #define Q_DECL_FINAL final #define Q_STATIC_ASSERT_X(x1,x2) static_assert(x1, x2) #define Q_DECL_EQ_DELETE = delete #else #define Q_DECL_OVERRIDE #define Q_DECL_FINAL #define Q_STATIC_ASSERT_X(x1,x2) #define Q_DECL_EQ_DELETE #endif #define QStringLiteral(x) QString(QLatin1String(x)) #define QEC_SIGNAL(className, methodName, ...) SIGNAL(methodName(__VA_ARGS__)) #define QEC_SLOT(className, methodName, ...) SLOT(methodName(__VA_ARGS__)) #else // QT_VERSION #define QEC_SIGNAL(className, methodName, ...) &className::methodName #define QEC_SLOT(className, methodName, ...) &className::methodName #endif // QT_VERSION #endif // QEVERCLOUD_QT4_HELPERS_H nixnote2-2.0.2/qevercloud/services_nongenerated.cpp000066400000000000000000000036141315604104400225140ustar00rootroot00000000000000 #include "generated/services.h" #include /** * @brief Constructs UserStore object. * @param host * www.evernote.com or sandbox.evernote.com * @param authenticationToken * This token that will be used as the default token. */ qevercloud::UserStore::UserStore(QString host, QString authenticationToken, QObject *parent): QObject(parent) { QUrl url; url.setScheme(QStringLiteral("https")); url.setHost(host); url.setPath("/edam/user"); url_ = url.toString(QUrl::StripTrailingSlash); setAuthenticationToken(authenticationToken); } /** * Constructs NoteStore object. * @param noteStoreUrl * EDAM NoteStore service url. In general it's different for different users. * @param authenticationToken * This token that will be used as the default token. * */ qevercloud::NoteStore::NoteStore(QString noteStoreUrl, QString authenticationToken, QObject *parent): QObject(parent) { setNoteStoreUrl(noteStoreUrl); setAuthenticationToken(authenticationToken); } /** * Constructs NoteStore object. * * noteStoreUrl and possibly authenticationToken are expected to be specified later. */ qevercloud::NoteStore::NoteStore(QObject *parent): QObject(parent) { } /** @fn qevercloud::UserStore::setAuthenticationToken * Sets a value that will be used as the default token. * */ /** @fn qevercloud::UserStore::authenticationToken * @returns the default authentication token value. * */ /** @fn qevercloud::NoteStore::setAuthenticationToken * Sets a value that will be used as the default token. * */ /** @fn qevercloud::NoteStore::authenticationToken * @returns the default authentication token value. * */ /** @fn qevercloud::NoteStore::setNoteStoreUrl * Sets a value that will be used as EDAM NoteStore service url by this object. * */ /** @fn qevercloud::NoteStore::authenticationToken * @returns EDAM NoteStore service url that is used by this NoteStore object. * */ nixnote2-2.0.2/qevercloud/thrift.h000066400000000000000000000407331315604104400171100ustar00rootroot00000000000000#ifndef QEVERCLOUD_THRIFT_H #define QEVERCLOUD_THRIFT_H #include #include #include #include "exceptions.h" #include "qt4helpers.h" #include namespace qevercloud { // Use this to get around strict aliasing rules. // For example, uint64_t i = bitwise_cast(returns_double()); // The most obvious implementation is to just cast a pointer, // but that doesn't work. // http://cellperformance.beyond3d.com/articles/2006/06/understanding-strict-aliasing.html // http://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule // http://stackoverflow.com/questions/2906365/gcc-strict-aliasing-and-casting-through-a-union // taken from thrift sources template static inline To bitwise_cast(From from) { Q_STATIC_ASSERT_X(sizeof(From) == sizeof(To), "bitwise_cast: incompatible types"); // BAD!!! These are all broken with -O2. //return *reinterpret_cast(&from); // BAD!!! //return *static_cast(static_cast(&from)); // BAD!!! //return *(To*)(void*)&from; // BAD!!! // Super clean and partially blessed by section 3.9 of the standard. //unsigned char c[sizeof(from)]; //memcpy(c, &from, sizeof(from)); //To to; //memcpy(&to, c, sizeof(c)); //return to; // Slightly more questionable. // Same code emitted by GCC. //To to; //memcpy(&to, &from, sizeof(from)); //return to; // Technically undefined, but almost universally supported, // and the most efficient implementation. union { From f; To t; } u; u.f = from; return u.t; } struct ThriftFieldType { enum type { T_STOP = 0, T_VOID = 1, T_BOOL = 2, T_BYTE = 3, T_I08 = 3, T_I16 = 6, T_I32 = 8, T_U64 = 9, T_I64 = 10, T_DOUBLE = 4, T_STRING = 11, T_UTF7 = 11, T_STRUCT = 12, T_MAP = 13, T_SET = 14, T_LIST = 15, T_UTF8 = 16, T_UTF16 = 17 }; }; struct ThriftMessageType { enum type { T_CALL = 1, T_REPLY = 2, T_EXCEPTION = 3, T_ONEWAY = 4 }; }; static const qint32 VERSION_1 = ((qint32)0x80010000); static const qint32 VERSION_MASK = ((qint32)0xffff0000); class ThriftBinaryBufferWriter { private: QByteArray buf; bool strict; void write(const quint8* bytes, const int bytesCount) { buf.append(reinterpret_cast(bytes), bytesCount); } public: ThriftBinaryBufferWriter(): strict(true) {} void setStrictMode(bool on) {strict = on;} QByteArray buffer() {return buf;} quint32 writeMessageBegin(QString name, const ThriftMessageType::type messageType, const qint32 seqid) { if (strict) { qint32 version = (VERSION_1) | ((qint32)messageType); quint32 wsize = 0; wsize += writeI32(version); wsize += writeString(name); wsize += writeI32(seqid); return wsize; } else { quint32 wsize = 0; wsize += writeString(name); wsize += writeByte((qint8)messageType); wsize += writeI32(seqid); return wsize; } } quint32 writeMessageEnd() {return 0;} inline quint32 writeStructBegin(QString name) { (void) name; return 0; } inline quint32 writeStructEnd() {return 0;} inline quint32 writeFieldBegin(QString name, const ThriftFieldType::type fieldType, const qint16 fieldId) { (void) name; quint32 wsize = 0; wsize += writeByte(static_cast(fieldType)); wsize += writeI16(fieldId); return wsize; } inline quint32 writeFieldEnd() {return 0;} inline quint32 writeFieldStop() {return writeByte((qint8)ThriftFieldType::T_STOP);} inline quint32 writeMapBegin(const ThriftFieldType::type keyType, const ThriftFieldType::type valType, const quint32 size) { quint32 wsize = 0; wsize += writeByte(static_cast(keyType)); wsize += writeByte(static_cast(valType)); wsize += writeI32(static_cast(size)); return wsize; } inline quint32 writeMapEnd() {return 0;} inline quint32 writeListBegin(const ThriftFieldType::type elemType, const quint32 size) { quint32 wsize = 0; wsize += writeByte(static_cast(elemType)); wsize += writeI32(static_cast(size)); return wsize; } inline quint32 writeListEnd() {return 0;} inline quint32 writeSetBegin(const ThriftFieldType::type elemType, const quint32 size) { return writeListBegin(elemType, size); } inline quint32 writeSetEnd() {return 0;} inline quint32 writeBool(bool value) { quint8 tmp = value ? 1 : 0; write(&tmp, 1); return 1; } inline quint32 writeByte(const qint8 byte) { write(reinterpret_cast(&byte), 1); return 1; } inline quint32 writeI16(const qint16 i16) { qint16 net; qToBigEndian(i16, reinterpret_cast(&net)); write(reinterpret_cast(&net), 2); return 2; } inline quint32 writeI32(const qint32 i32) { qint32 net; qToBigEndian(i32, reinterpret_cast(&net)); write(reinterpret_cast(&net), 4); return 4; } inline quint32 writeI64(const qint64 i64) { qint64 net; qToBigEndian(i64, reinterpret_cast(&net)); write(reinterpret_cast(&net), 8); return 8; } inline quint32 writeDouble(const double dub) { Q_STATIC_ASSERT_X(sizeof(double) == sizeof(qint64) && std::numeric_limits::is_iec559, "incompatible double type"); qint64 bits = bitwise_cast(dub); qToBigEndian(bits, reinterpret_cast(&bits)); write(reinterpret_cast(&bits), 8); return 8; } inline quint32 writeString(const QString& str) { QByteArray utf8 = str.toUtf8(); return writeBinary(utf8); } inline quint32 writeBinary(const QByteArray& bytes) { qint32 size = static_cast(bytes.length()); if(size > std::numeric_limits::max()) { throw ThriftException(ThriftException::Type::PROTOCOL_ERROR, QStringLiteral("The data is too big")); } quint32 result = writeI32((qint32)size); if (size > 0) { write((const quint8*)bytes.constData(), size); } return result + size; } }; class ThriftBinaryBufferReader { QByteArray buf; qint32 pos; qint32 stringLimit; bool strict; void read(quint8* dest, qint32 bytesCount) { if((pos + bytesCount) > buf.length()) { throw ThriftException(ThriftException::Type::PROTOCOL_ERROR, QStringLiteral("Unexpected end of data")); } std::memcpy(dest, buf.mid(pos, bytesCount).constData(), bytesCount); pos += bytesCount; } public: ThriftBinaryBufferReader(QByteArray buffer): buf(buffer), pos(0), stringLimit(0), strict(false) {} void setStringLimit(qint32 limit) {stringLimit = limit;} void setStrictMode(bool on) {strict = on;} quint32 readMessageBegin(QString& name, ThriftMessageType::type& messageType, qint32& seqid) { quint32 result = 0; qint32 sz; result += readI32(sz); if (sz < 0) { // Check for correct version number qint32 version = sz & VERSION_MASK; if (version != VERSION_1) { throw ThriftException(ThriftException::Type::PROTOCOL_ERROR, QStringLiteral("Bad version identifier")); } messageType = static_cast(sz & 0x000000ff); result += readString(name); result += readI32(seqid); } else { if (strict) { throw ThriftException(ThriftException::Type::PROTOCOL_ERROR, QStringLiteral("No version identifier... old protocol client in strict mode?")); } else { // Handle pre-versioned input qint8 type; pos -= 4; result += readString(name); result += readByte(type); messageType = static_cast(type); result += readI32(seqid); } } return result; } quint32 readMessageEnd() {return 0;} inline quint32 readStructBegin(QString& name) {name = ""; return 0;} inline quint32 readStructEnd() {return 0;} inline quint32 readFieldBegin(QString& name, ThriftFieldType::type& fieldType, qint16& fieldId) { (void) name; quint32 result = 0; qint8 type; result += readByte(type); fieldType = static_cast(type); if (fieldType == ThriftFieldType::T_STOP) { fieldId = 0; return result; } result += readI16(fieldId); return result; } inline quint32 readFieldEnd() {return 0;} inline quint32 readMapBegin(ThriftFieldType::type& keyType, ThriftFieldType::type& valType, quint32& size) { qint8 k, v; quint32 result = 0; qint32 sizei; result += readByte(k); keyType = static_cast(k); result += readByte(v); valType = static_cast(v); result += readI32(sizei); if (sizei < 0) { throw ThriftException(ThriftException::Type::PROTOCOL_ERROR, QStringLiteral("Negative size!")); } else if (stringLimit > 0 && sizei > stringLimit) { throw ThriftException(ThriftException::Type::PROTOCOL_ERROR, QStringLiteral("The size limit is exceeded.")); } size = (quint32)sizei; return result; } inline quint32 readMapEnd() {return 0;} inline quint32 readListBegin(ThriftFieldType::type& elemType, quint32& size) { qint8 e; quint32 result = 0; qint32 sizei; result += readByte(e); elemType = static_cast(e); result += readI32(sizei); if (sizei < 0) { throw ThriftException(ThriftException::Type::PROTOCOL_ERROR, QStringLiteral("Negative size!")); } else if (stringLimit > 0 && sizei > stringLimit) { throw ThriftException(ThriftException::Type::PROTOCOL_ERROR, QStringLiteral("The size limit is exceeded.")); } size = (quint32)sizei; return result; } inline quint32 readListEnd() {return 0;} inline quint32 readSetBegin(ThriftFieldType::type& elemType, quint32& size) {return readListBegin(elemType, size);} inline quint32 readSetEnd() {return 0;} inline quint32 readBool(bool& value) { quint8 b[1]; read(b, 1); value = *(qint8*)b != 0; return 1; } inline quint32 readByte(qint8& byte) { quint8 b[1]; read(b, 1); byte = *(qint8*)b; return 1; } inline quint32 readI16(qint16& i16) { union bytes { quint8 b[2]; qint16 all; } theBytes; read(theBytes.b, 2); i16 = qFromBigEndian(theBytes.all); return 2; } inline quint32 readI32(qint32& i32) { union bytes { quint8 b[4]; qint32 all; } theBytes; read(theBytes.b, 4); i32 = qFromBigEndian(theBytes.all); return 4; } inline quint32 readI64(qint64& i64) { union bytes { quint8 b[8]; qint64 all; } theBytes; read(theBytes.b, 8); i64 = qFromBigEndian(theBytes.all); return 8; } inline quint32 readDouble(double& dub) { Q_STATIC_ASSERT_X(sizeof(double) == sizeof(qint64) && std::numeric_limits::is_iec559, "incompatible double type"); union bytes { quint8 b[8]; qint64 all; } theBytes; read(theBytes.b, 8); theBytes.all = qFromBigEndian(theBytes.all); dub = bitwise_cast(theBytes.all); return 8; } inline quint32 readString(QString& str) { quint32 result; qint32 size; result = readI32(size); if (size < 0) { throw ThriftException(ThriftException::Type::PROTOCOL_ERROR, QStringLiteral("Negative size!")); } if (stringLimit > 0 && size > stringLimit) { throw ThriftException(ThriftException::Type::PROTOCOL_ERROR, QStringLiteral("The size limit is exceeded.")); } // Catch empty string case if (size == 0) { str.clear(); return result; } if((pos + size) > buf.length()) { throw ThriftException(ThriftException::Type::PROTOCOL_ERROR, QStringLiteral("Unexpected end of data")); } str = QString::fromUtf8(buf.constData() + pos, size); pos += size; result += size; return result; } inline quint32 readBinary(QByteArray& str) { quint32 result; qint32 size; result = readI32(size); if (size < 0) { throw ThriftException(ThriftException::Type::PROTOCOL_ERROR, QStringLiteral("Negative size!")); } if (stringLimit > 0 && size > stringLimit) { throw ThriftException(ThriftException::Type::PROTOCOL_ERROR, QStringLiteral("The size limit is exceeded.")); } // Catch empty string case if (size == 0) { str.clear(); return result; } if((pos + size) > buf.length()) { throw ThriftException(ThriftException::Type::PROTOCOL_ERROR, QStringLiteral("Unexpected end of data")); } str = buf.mid(pos, size); pos += size; result += size; return result; } inline quint32 skip(ThriftFieldType::type type) { switch (type) { case ThriftFieldType::T_BOOL: { bool boolv; return readBool(boolv); } case ThriftFieldType::T_BYTE: { qint8 bytev; return readByte(bytev); } case ThriftFieldType::T_I16: { qint16 i16; return readI16(i16); } case ThriftFieldType::T_I32: { qint32 i32; return readI32(i32); } case ThriftFieldType::T_I64: { qint64 i64; return readI64(i64); } case ThriftFieldType::T_DOUBLE: { double dub; return readDouble(dub); } case ThriftFieldType::T_STRING: { QByteArray str; return readBinary(str); } case ThriftFieldType::T_STRUCT: { quint32 result = 0; QString name; qint16 fid; ThriftFieldType::type ftype; result += readStructBegin(name); while (true) { result += readFieldBegin(name, ftype, fid); if (ftype == ThriftFieldType::T_STOP) { break; } result += skip(ftype); result += readFieldEnd(); } result += readStructEnd(); return result; } case ThriftFieldType::T_MAP: { quint32 result = 0; ThriftFieldType::type keyType; ThriftFieldType::type valType; quint32 i, size; result += readMapBegin(keyType, valType, size); for (i = 0; i < size; i++) { result += skip(keyType); result += skip(valType); } result += readMapEnd(); return result; } case ThriftFieldType::T_SET: { quint32 result = 0; ThriftFieldType::type elemType; quint32 i, size; result += readSetBegin(elemType, size); for (i = 0; i < size; i++) { result += skip(elemType); } result += readSetEnd(); return result; } case ThriftFieldType::T_LIST: { quint32 result = 0; ThriftFieldType::type elemType; quint32 i, size; result += readListBegin(elemType, size); for (i = 0; i < size; i++) { result += skip(elemType); } result += readListEnd(); return result; } case ThriftFieldType::T_STOP: case ThriftFieldType::T_VOID: case ThriftFieldType::T_U64: case ThriftFieldType::T_UTF8: case ThriftFieldType::T_UTF16: break; } return 0; } }; } #endif // QEVERCLOUD_THRIFT_H nixnote2-2.0.2/qevercloud/thumbnail.h000066400000000000000000000105511315604104400175660ustar00rootroot00000000000000#ifndef QEVERCLOUD_THUMBNAIL_H #define QEVERCLOUD_THUMBNAIL_H #include "generated/types.h" #include #include #include #include "AsyncResult.h" namespace qevercloud { /** * @brief The class is for downloading thumbnails for notes and resources from Evernote servers. * * This thumbnails are available not with general EDAM Thrift interface as explained in the documentation. * * Usage: @code Thumbnail thumb("www.evernote.com", sharId, authenticationToken); QByteArray pngImage = thumb.download(noteGuid); @endcode * * By defualt 300x300 PNG images are requested. */ class Thumbnail { public: /** * Specifies image type of the returned thumbnail. * * Can be PNG, JPEG, GIF or BMP. */ struct ImageType { enum type {PNG, JPEG, GIF, BMP}; }; /** * @brief Default constructor. * * host, shardId, authenticationToken have to be specified before calling @link download @endlink or @link createPostRequest @endlink */ Thumbnail(): size_(300), imageType_(ImageType::PNG) {} /** * @brief Constructs Thumbnail. * @param host * www.evernote.com or sandbox.evernote.com * @param shardId * You can get the value from UserStore service or as a result of an authentication. * @param authenticationToken * For working privite notes/resources you must supply a valid authentication token. For public resources the value specified is not used. * @param size * The size of the thumbnail. Evernote supports values from from 1 to 300. By defualt 300 is used. * @param imageType * Thumbnail image type. See ImageType. By default PNG is used. */ Thumbnail(QString host, QString shardId, QString authenticationToken, int size = 300, ImageType::type imageType = ImageType::PNG) : host_(host), shardId_(shardId), authenticationToken_(authenticationToken), size_(size), imageType_(imageType) {} /** * @param host * www.evernote.com or sandbox.evernote.com */ Thumbnail& setHost(QString host); /** * @param shardId * You can get the value from UserStore service or as a result of an authentication. */ Thumbnail& setShardId(QString shardId); /** * @param authenticationToken * For working privite notes/resources you must supply a valid authentication token. For public resources the value specified is not used. */ Thumbnail& setAuthenticationToken(QString authenticationToken); /** * @param size * The size of the thumbnail. Evernote supports values from from 1 to 300. By defualt 300 is used. */ Thumbnail& setSize(int size); /** * @param imageType * Thumbnail image type. See ImageType. By default PNG is used. */ Thumbnail& setImageType(ImageType::type imageType); /** * @brief Downloads the thumbnail for a resource or a note. * @param guid * The note or resource guid * @param isPublic * Specify true for public notes/resources. In this case authentication token is not sent to * with the request as it shoud be according to the docs. * @param isResourceGuid * true if guid denotes a resource and false if it denotes a note. * @return downloaded data. * */ QByteArray download(Guid guid, bool isPublic = false, bool isResourceGuid = false); /** Asynchronous version of @link download @endlink function*/ AsyncResult* downloadAsync(Guid guid, bool isPublic = false, bool isResourceGuid = false); /** * @brief Prepares a POST request for a thumbnail download. * @param guid * The note or resource guid * @param isPublic * Specify true for public notes/resources. In this case authentication token is not sent to * with the request as it shoud be according to the docs. * @param isResourceGuid * true if guid denotes a resource and false if it denotes a note. * @return a pair of QNetworkRequest for the POST request and data that must be posted with the request. */ QPair createPostRequest(qevercloud::Guid guid, bool isPublic = false, bool isResourceGuid = false); private: QString host_; QString shardId_; QString authenticationToken_; int size_; ImageType::type imageType_; }; } #endif // THUMBNAIL_H nixnote2-2.0.2/qss/000077500000000000000000000000001315604104400140655ustar00rootroot00000000000000nixnote2-2.0.2/qss/editor.css000066400000000000000000000000271315604104400160640ustar00rootroot00000000000000body { color: black; } nixnote2-2.0.2/qss/editor_dark.css000066400000000000000000000001231315604104400170620ustar00rootroot00000000000000body { background-color: black; color: white; } a { color: lightblue; } nixnote2-2.0.2/reminders/000077500000000000000000000000001315604104400152475ustar00rootroot00000000000000nixnote2-2.0.2/reminders/reminderevent.cpp000066400000000000000000000034601315604104400206250ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "reminderevent.h" #include "global.h" #include ReminderEvent::ReminderEvent(QObject *parent) : QObject(parent) { timer.setSingleShot(true); } bool ReminderEvent::setTimer(qint32 lid, QDateTime time) { this->lid = lid; this->time = time.currentMSecsSinceEpoch(); QDateTime now = QDateTime::currentDateTime(); int interval = (now.secsTo(time)+1)*1000; if (interval>0) { timer.stop(); timer.start(interval); return true; } return false; } bool ReminderEvent::setTimer(qint32 lid, qlonglong time) { this->lid = lid; this->time = time; QDateTime now = QDateTime::currentDateTime(); qlonglong interval = time - now.currentMSecsSinceEpoch(); if (interval>0) { timer.start(interval); return true; } return false; } void ReminderEvent::stopTimer() { timer.stop(); } nixnote2-2.0.2/reminders/reminderevent.h000066400000000000000000000025701315604104400202730ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef REMINDEREVENT_H #define REMINDEREVENT_H #include #include #include class ReminderEvent : public QObject { Q_OBJECT public: explicit ReminderEvent(QObject *parent = 0); qint32 lid; QTimer timer; qlonglong time; bool setTimer(qint32 lid, QDateTime time); bool setTimer(qint32 lid, qlonglong time); void stopTimer(); signals: public slots: }; #endif // REMINDEREVENT_H nixnote2-2.0.2/reminders/remindermanager.cpp000066400000000000000000000066771315604104400211330ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "remindermanager.h" #include "sql/notetable.h" #include "global.h" extern Global global; ReminderManager::ReminderManager(QObject *parent) : QObject(parent) { } void ReminderManager::reloadTimers() { for (int i=reminders.size()-1; i>=0; i--) { delete reminders[i]; } ReminderEvent *event = new ReminderEvent(); connect(&event->timer, SIGNAL(timeout()), this, SLOT(timerPop())); NoteTable ntable(global.db); QList< QPair* > notes; ntable.getAllReminders(¬es); for (int i=notes.size() -1; i>=0; i--) { ReminderEvent *event = new ReminderEvent(); event->lid = notes[i]->first; connect(&event->timer, SIGNAL(timeout()), this, SLOT(timerPop())); event->setTimer(notes[i]->first, notes[i]->second); reminders.append(event); } } void ReminderManager::timerPop() { checkReminders(); } void ReminderManager::checkReminders() { QString msg; NoteTable ntable(global.db); QDateTime now = QDateTime::currentDateTime(); for (int i=reminders.size()-1; i>=0; i--) { Note note; ReminderEvent *event; event = reminders[i]; if (event->time > global.getLastReminderTime() || global.getLastReminderTime() == 0) { if (event->time <= now.currentMSecsSinceEpoch()) { ntable.get(note, event->lid, false, false); QString title = note.title; msg = msg+title+"\n"; delete reminders[i]; reminders.removeAt(i); } } else { if (event->time < global.getLastReminderTime()) { delete reminders[i]; reminders.removeAt(i); } } } if (msg.trimmed() != "") emit showMessage(tr("Reminders Due"), msg, 10000); global.setLastReminderTime(now.currentMSecsSinceEpoch()); } void ReminderManager::updateReminder(qint32 lid, QDateTime time) { for (int i=0; ilid == lid) { reminders[i]->setTimer(lid, time); return; } } ReminderEvent *event = new ReminderEvent(); event->lid = lid; connect(&event->timer, SIGNAL(timeout()), this, SLOT(timerPop())); event->setTimer(lid, time); reminders.append(event); } void ReminderManager::remove(qint32 lid) { for (int i=reminders.size()-1; i>=0; i--) { if (reminders[i]->lid == lid) { delete reminders[i]; reminders.removeAt(i); } } } nixnote2-2.0.2/reminders/remindermanager.h000066400000000000000000000027721315604104400205700ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef REMINDERMANAGER_H #define REMINDERMANAGER_H #include #include #include #include "reminders/reminderevent.h" class ReminderManager : public QObject { Q_OBJECT private: QList reminders; public: explicit ReminderManager(QObject *parent = 0); void reloadTimers(); void checkReminders(); void updateReminder(qint32 lid, QDateTime time); void remove(qint32 lid); signals: void showMessage(QString, QString, int); public slots: void timerPop(); }; #endif // REMINDERMANAGER_H nixnote2-2.0.2/sample_exits/000077500000000000000000000000001315604104400157545ustar00rootroot00000000000000nixnote2-2.0.2/sample_exits/insert_todo.js000066400000000000000000000015341315604104400206460ustar00rootroot00000000000000/* This is a sample exit. It is called when a note's contents are saved. It will scan the contents of a note for any [], [x], or [X] strings. If found, those strings will be changed into a todo statement. */ var c = note.getContents(); var todoUnchecked = ""; var todoChecked = ""; c = c.replace("[]", todoUnchecked); c = c.replace("[x]", todoChecked); c = c.replace("[X]", todoChecked); note.setContents(c); nixnote2-2.0.2/sample_exits/markdown_save.js000066400000000000000000000051271315604104400211570ustar00rootroot00000000000000/*********************************************/ /* This is a sample note-save exit. It will */ /* do very basic markdown editing when */ /* saving a note. */ /* */ /* These markdown tags are supported: */ /* "---" : horizontal line. */ /* "___" : horizontal line. */ /* "***" : horizontal line. */ /* "__" : italics */ /* "--" : Bold. */ /* "**" : Bold. */ /* "~~" : Strikeout. */ /* "[]" : insert a todo. */ /* "[x]" : insert a completed todo. */ /* "[X]" : insert a completed todo. */ /* "+" : Unordered list. */ /*********************************************/ /* This function converts tags with end tags (i.e. or ) */ function markdown1(content, start, end, tag) { current = start; while (content.indexOf(tag)>0) { content = content.replace(tag,current); if (current === start) current = end; else current = start; } note.log(content); return content; } /* This function converts tags with no end (i.e.
      ) */ function markdown2(content, html, tag) { while (content.indexOf(tag)>0) { content = content.replace(tag,html); } note.log(content); return content; } /* This function converts "+" into an unordered list */ function markdownUl(content, tag) { var first = true; while (content.indexOf(tag)>0) { if (first) content = content.replace(tag, "
      • "); else content = content.replace(tag, "
      • "); first = false; } return content; } var c = note.getContents(); var todoUnchecked = ""; var todoChecked = ""; c = c.replace("[]", todoUnchecked); c = c.replace("[x]", todoChecked); c = c.replace("[X]", todoChecked); c = markdown2(c, "
        ", "---"); c = markdown2(c, "
        ", "***"); c = markdown2(c, "
        ", "___"); c = markdown1(c, "","", "--"); c = markdown1(c, "","", "**"); c = markdown1(c, "","", "__"); c = markdown1(c, "","", "~~"); c = markdownUl(c, "+"); note.setContents(c); nixnote2-2.0.2/sample_exits/save_note.js000066400000000000000000000015211315604104400202740ustar00rootroot00000000000000/* This is a sample exit. It is called when a note's contents are saved. It just looks for a note that starts with a day of the week, followed by month, day & year. For example, "Monday, January 2, 2017". If this string is found at the beginning of a note it is assigned to the "Journal" notebook. */ var dateCreated = new Date(note.getCreatedDate("yyyy-MM-dd")); var contents = note.getContentsPlainText().split(" "); var dow = contents[0]; if (dow === "Monday," || dow === "Tuesday," || dow === "Wednesday" || dow === "Thursday," || dow === "Friday," || dow === "Saturday," || dow === "Sunday,") { var month = contents[1]; var day = contents[2]; var year = contents[3]; day = day.substring(0,day.length-1); var newDate = new Date(month + " " +day + " " + year); note.setNotebook("Journal"); } nixnote2-2.0.2/screenshot.png000066400000000000000000012753751315604104400161660ustar00rootroot00000000000000‰PNG  IHDR€8èÓÁCsBIT|dˆ IDATxœìÝg`Õ½Æáß™ÙÕªK–ä*0.àŒ)6Æ¡„Lw¨¡^BKB ä&!ÄôÎ !ÐRn€„v)Z „PM7à‚-ã&[V/ÛfÎý0;»’,ÉÝû}aíî”÷üwv4»gÏŒÙó¤_YDDDDDDDDDDDDDDäK/2E|sg‘ ÀÙÜDDDDDDDDDDDDDDdÃ0‰x»µ~ü8Ø4à81Œ“¬Ÿ›ëgæŠdßæð©›1¾ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ„"ÖCr6YKº% ‘VÜh­€¼`\lª›jÀ¦=ÒMäõw1±A×s瑌~›XÊï¯{ŽaývfñòÙÄýfλp‘¡àäc“ËøÍõïÐÑQÀüâÅìW9’S¿7"e›;¿ˆˆˆˆˆˆˆˆˆˆˆˆˆˆdD°)lº‘å3 )¨XBÉίQûÄY<ñ×ç8öø¥àưéVÚkʉ¶…Ýv©eåg¬×‚±éÍ_DDDDDdËâ7â6.„ÈP¼ÒòÍf3°ZÛR‹ñ-D‡.«Z÷Åùõ¸õ‹0‘mH—Wl¸˜"""""""«‘¨µÚibG÷ú˜õ’ø‰vL^N$Öå1?À&;pb…7¯Ëc¬~ƒÄéïùÄöy˜·Ÿ:æÔc¼5s9Ÿ1ßCÌñK2צÁ‹ç® ,""""""«g[qê?ñ@lé’ÒàþägDšÛ°%Õ˜ØPîzþwLzïz¸äs–•ôÑ ¼ºå•î„—çöÉkÄI€_PfC4²[.ÁæõÇ/ªÂ:}­ÄBj9%CöæÎOe¿.-ïÞÉá?zyEëÐ ì×ìÈ´é·³ËÇ¿asf³´¬b Úl!>Hk;Å/ÙPÅÙÀ6Æó'""""""LÝ»ôúXÕ¸ãz}ÌzI RusÈ$ž|éMšŸ±¼D ån‡²'¿ðTuév°>ÖO Þ™/ÿløQFî8“§ŸÄÛ³|®ºs&ÖïÜÙkÁ¦ƒEDDDDDdõl+N¼ˆß½8šéÓ˜qYªZš ñå»ü„yÓåÞ] Õ΂Ï2gQ; 'Ò{ŸÞš,o—¸I¯÷L^=ùe#øþñ#šjÜ0oñºåª™>š—ï䱟ïÉ^,Àñúú"±‡‰w°ßwOa¿0ç…gxðŸsYâo€`í[m›-tÌcÈþS™?}5Óoã'•sqÒ_À÷¿ãù‘/?ÙÎ1MâæKÎåïw_A¿H;^¢/ÑBE´ƒiw]ÎÍ—œËÑNÄOvt™×ɼÆtz§8ëµ:ê]öšôW~'˜ìIk!¸á£w—""""""ë¦ô 38eÐòÜ(Ù ë}Î5g_Àq¿YDcQ¶u‘º‰´ÇÁ¶ãÔH¤nŽg×hyá¨Z·áã`9õsq’I ‰iYɸÓÎæ§gŽghz!n[{fúZ܆ˆÔ}ˆÛ0'™ZÇV.å…¿¿ÀS³Æþmúã‰LL/ÁX¿—u$1¶ˆ¡"Àn½á÷\ùDŠŽü¦ý3Üú`úHÃg8©Ì%‰¼:ܺ‰45·Ó‹ƒiš[{Èãaš{js×iœT”I“Gáø­x âˆ}+‰&“¹z&—àÖ‡õœƒ›Hõ}õ_ƒì~=n݇¸­ËpÂZ5.NÝëó'""""""›S¢vVö‚Q¾=ý¬Ž+æÉ—ÞdÎüÅŒ^Íw^F¿H;Ñ¿c*£†W3gþbž|é-œXQ×y³¿eF =ÙÎ{ÏÍQ‡0|ôø*õõù@ØåkÕ÷+"""""²®V.¦•¡œÞÎôK¤»<äŽãïoO£æO»0¨±† çÿŽšéÓxþ¤ :"\9m5Ó¯ã{ý–çF÷±<ÒK©¶wþí>j¦Ocî´K¹|B#ùÍËØýÌ©üé¨R(Þ_žÆ›ç[ šP9|î~ðoÔLŸÆ¼ÇÁ¥ãV’—H²Ö>äöÏwÏÿ§Lk„ê#ùù‘¶Ï{^GKûþàüdÀŽüî¹'xèkµ¸m ì{æÅ¼ø‡¨™>9]Ìw¨%_N^áxž>šÛ·¥ªé3Šªã­éÓøhj¥­‰®yl»ýWmîÜqj[q vâ›»¸Ä§?ÎKaÄ¡ØÖk ¾8XÈà]'sï£ êùÌõܼw3y­5=ßßö9=Õ¿mYßÙ›—ìȓӧñÊ…óÛû‚Z͸çpá´/ïùùS'°ˆˆˆˆˆÈfW÷î#½þ¬)ãDhöK9òœ©|2w!£†Wóâ½×ñÏ¿\˨áÕ|2w!Gž3•[Šq"]æÍvCfx¯¥£à: æqÀQ?dû‰ÿÅQÇ|“ŸÓ…ÿ5¹[""""""²æìçOó›÷o I÷ñÛïÞs¬„Q§ŸÁ§žÍiaÞnåOK˲³õµ<'o®ûÍ™6¬™¦½Äc8ëºK8›4- g3' øóùß[ïàúuàæš_ŸÎ¡çs÷¯ïå)o,ç^óŽ-X”y `1ñ¥8m‹qÚ–ô=BؔຼýÄ[¬Ä°ó¾C)ŠêyeiVÌxWšVðÈm·s×ü~X¿ƒú´Ë²×§qÃ=¯°|ð8.üÕì˜n]»/'›­ÝÛü²% ¯“d1©Jw9€‰yðñ³ÿaÚÛÍ0òë|½ª“n š¿;·\ûU·ò¯iÏðÙÍÔ/kÁ–ŒëáþVüØ(®ï©þƒšÖ8övSŽf›wáŽ×[)s4WN)!깫>]Ú"""""""_vN¬ˆf¿„cÏ¿œ¹5K<°’Á+™[³„cÏ¿œf¿d•Ñ¿™î`tcÁ@ÚË£x’CÅ€r\×á€ögjáU´§÷ÀÚ°ó×Yea""""""²zÆiâ¿}†³ï>œïž³¶·^Ì<æqݵ¯pØMûpé9À’'¸ø¾zÚ +0‰Õ-ÏR4æ,‚þšï]?—’w0ýò1œpPwüåU>j9–q±žú¿yÝD)Ýå*†eþ™[žGaÃx޾b SÆyÛ˹˜ø Fð Nß!ƒGí›/rç‡Ê‹öÜ 7Š×ÖH+PYR@ÅN_ïe>¼ø/ÞüöÉX¶œ>ú"Ï9_Á/ŽñɧrJÚ‡H5öà}øïêá r’ÌZ«ï%»|öïnmŽŽÀ†ß”ö!nÙõ°±°¼¿œëgÒqäDŽXÈ_žj `ì~LŒÂÊi7sþÕ‹h‹x˜(ëé~CÉn½ÔÿàÜóÔÆ^ö So}Œ¹£*™òÕÉ Ø¾’|»l5m‘Í©§Ó<¯Íàµi bvúÂoa,‚M­é牽¹.¹Ñ¼†Eª+>'•Jâºùx‹qìRÈ«%øzµÉ ‘µf í?Ê-ïƵ‡žÎÉ3êèu mlõoM㉺}8½ f?ü4x°&;'S¯Ës(¨ìG hø¼‰T^>­ËVД )!š]«Á˜–$ýû‘ :ñfœ˜‹QÖ/†c}< $š~à±|{¯ ³qQü%þøNº÷`?‰[REж²Hëp»ÌÁšvÜ´áÌ_ÞÀyûgPq×¾ÓÃ÷’-Æu»-£3ÓåwcbØHçÓœèp¦L, ùúy0&6ì:yWúO{¿¼”(°r~É‚ÁøyŸGa¿žïï»þk˜½q1u~ ?'8®évR®žÚ"""""""ë"¼voobG¯ñ²:OÛy¹kÚìÅ›\ì1í®Ë2¨ŠÙóð•áÛ0í®Ë8êÜËXÚÚ„›_Öe¾ÆÁ8QL¦Cןó¿ÿ?¬lóyþéqqì|ôÖ?¸ó{+‰ØÇ˜3oç ó×DÀh°ˆˆˆˆˆÈ:±mmËK3¼[6œ.þ&Û¥2# v ]TÐK;›qÚŠØïø=)'Í«ÿ^@]Soë($m:w…[H,eÛïáŠÃGP÷ì­|óOuvóœ78œÄÎ_B¡ÇT ¢ ˆ÷VvèÚæx¯ <˜j päaìW PÅÞ‡›qç˜Tú2/4¶úm[F$¾„T*q í =Ýïô] ³{i¼à ÄkÞYg½uÐö4ªw]¬Ér¬Ÿ¦ÌmçÁ[¯`ÛÁ˜31Çœw9Æ¿c*£†Wóà­—pÄÙ¿¢Õ/êràà+ÓN ‡„oˆÛÌØ‘ÂHí žà77MåûîÆµýð".Ö:ã‚ÉC×YG¦ŒæáÖ–èÀò^Þ]µ-žÈ•?CtÅ?8ïŠ7i-Ý—k¿·=å­mk´¼ÖÿÁ³MPuìÅÜué÷¹ã¢0,â±êHÚ6–´E¸è'gqÉáÕ$?y†g›`ÀÁÇpüÄQìºË8Ž>voÊ­NåbËÆ’®Ú%øé­ó·ß®|ÿç?äϹƒ»)ÆÎ}˜kþ¦¹×u´õø6ÓÍœÖ8ѧpÔD®qðZ–±°ý-nüÅüþç»ÑË8dÀ¿µk›uÉ'“ˆó•C'PI;O~ÿ$¶›pÛM˜ÂÁw-wG¾¹{!퟼À+qè?å'Üó‹“¹éš_qסe$>îùþŽ^ë¿‚ŽµÊ¾6m‘/‚Dí¬ìOg±£³?½ñ­±ÿDF ¯fÎüÅ}Þe4¤ ©OpÌù—3gþbF ¯æˆý÷ÄOtýŒÀÁ‰b"å8em¼_Îë-¼¿h_Nº™Ïú?:ç@®¸ê¿ùÓÿÉãÓN`nívxÑ&RŒ‘uàb “<ö»çXÑÛ$ÖpÐÎcÿ‚ÿ¹ý!ž}ö¹m.ô?ê~¼c[·3 ÷¼<›šÏ/ôGž^PÂ~GìÏî©9Ü?õn[R—ßÁÿÝþf¶2áˆÙ«¿‡í˜ËϾ÷{ž[ÎÑç|›©?8šƒ%‰§Á®õ—€±ÿaû±ßÀF^ý¿Û8ê¼§ø0¶iA¯ëè:ÌÕ@^¾ðîÓNõñ?å÷'¹<ôðÒl›}o7ÜòÄËÙ{ò.´?|O5õ–'‚ëÞæÆ÷8C˜¼o$>æ±O\üб¤ËË™ÿï7YB„‰“GSÚô>_ô7^ø¼˜}:œÇ°by’tûŒîOàõU»6Ù»‹öÑYUãŽëñgmÔ½ûÈ*?kÃÉ+äñÞࢫïâÈs~ECº7V‚+¡>UÀQçN墫ï≾‰“×õ‹Ù&Þ^oIÖá'ji¨mÆÇRV™O4¿í€MÕãÅkñÒ´ux•“W2È6G\³VaEDDDDD¶Z¶§þ3w[Òåý ©ÅDšêƒ-Ý /Ò„[¿Ù†ty)¦e6nÂÇ–ŒÆËóqgãxQü²¯àGÚW¿¼<“ªÃi­Åx>8ø…CñócÁôÉŸ-õë` GâæCº·µ“N6Z…W:hÍO¶3ìÌuò°yýñ‹*°ÆëíuIœ†Y8^!^ÅöXð›q›?Ǥ=l¤mÁéÈë‰5>&þ9N[ÆF°…ý!¾Aº´üúNõ¬è¥ÍáåvÜú¹¿¿b¾“ipz nc&o;Ò¥¥ªÅm]‰ñ<01lÉH¼<·×û{¯ÿZfO/!ÒXyÃI—–¬¦-""""""²9¬î°æ×¶^?ÇDb8‘®—üñÓ l:ÍǸy]3‰x»µ~l¬—¹Û'ãäkãàuä7p 0NÛ~Ù‘Ëô?ð§võ“‰ˆˆˆˆˆˆˆˆˆˆˆˆˆÈ³úIDDDDDDDDDDDDDDäË@À""""""""""""""[3dÈZDDDDDDDDDDDDDd  À""""""""""""""[u‹ˆˆˆˆˆˆˆˆˆˆˆˆˆl!Ô,"""""""""""""²…P°ˆˆˆˆˆˆˆˆˆˆˆˆˆÈBÀ""""""""""""""[ˆ ÜœÏWθŠËOA†’ ?â¦_~ƒA‘ »– *,Üø+ެŽÒ5ÿææPºÇw¹úg“ÝÜYdm¸âç7]Ĥ²/Ñ÷+ò¶ã¸+nàüò7wYëÔ5úM.ýñ>”v¾óó‡¸ì×o°è_óHz)) ¶A"nÈ|¯Ñè÷5g²K~p©Üe*LgNsŸ3®5§bo.¼ä`æÿæ*]˜ÊÞï:”ŸýtÞ¾á:^øô9ik¢.½AW½áÄFóí«Îg̒ǹöÖ±ÂËÜŸ¿#ç^vK{_œês¦p8{îØÎ»ïÔ²ú©7CÉ„rå)Ãzx,ɇ¿¿”?ÎNl²4ë+:ô›\úƒÁ<üËß1#ޛϘï^ɉ+n㪇ÜœEDDDDDDDDDDDd“X÷±¹Þ\þø«Ûù¨#¼Ãâûj>`fýÓ­ó­n&Ÿ¶l~0ùÃ9øØƒh»çÝ Þì7~ÄkŸÃ7öÌß.Ìv8÷ßm*–¿Á{+<~v¬ŒÒ¾x:Óî}„7—óµ_Â×?¹‰ëž^JÚÈ¡?û9‡¥㪛^¦Î²í±—ðý!OpÅíïÑjW›lí¤kùÏ õL<ê8Æ}|o7õÐqj ¶ßñð®TAÛâ÷yþáGxyA‚~¾Åw¦lG{*¿¼ª•ÏŸ¾»^k ¸§¶.K²Aã[ßxø¬õð}?èÄ6… ûzO™Û±@¤r7Ž<é(¾ºCyÉz>}í xòVvߘMŒ!_;SÛê"¯¹†×¼‡G?nY‡ÎòõÕË6´J]ƒmï’}fñüÒQì1²’Ò‚æ>w?û÷çÄ7ô6$""""""""""""̦»H©;¯ûÆ,y+/¾ˆËªe×SÎäkUî&‹eãOá´=;xúºŸòãKnåe;†mòz­œXÀÓx”ùéz^úíåüêº Øù €Oó¬WYP0– C‚+GúïÎý–ðúŒz¼nS;å8í¿¾JÇÓ7ðÓ‹~ÉfmÇqgBµÛ̼(5”"NùhÆD±¼tWF–pJ1ªˆåÔо1:îŒKræcúÎ9xÝ#šÂÑ{ÔHæÿù—\xáO˜zûã¼QÓ¶:û؆z©kþЯRñî¸áª©\öÛ7éwø™º.H-"""""""""""òE¶îÀ‘íùö57sóÍ7sóÍ×sÑAé«+×í¿;-ç¥΢)íÑ4û5>h¯füöŧ:²=g]y#7Þx#7Þx 8×0la$?xw—'±é&f½üo–l¦³ýÚ–Ù¼úY>c' !ýwOÙâ×ù¨¡{ ‡Ò¿ÆðÖ7yþƒ:’^ Þx“ºŠ]Ù¹Ò²rÖ§t Ø‘A1‡Òv£tþKüki»mWˆS° c*ùx^óFêttˆØFÞ~øI–ïx}u.±ã&0ä©;/åóç?fÕ³(;U©<˜‹®ýzæt½.QÓ@ažCrÙ j˜Â¨ª2ŠÆU²ìµO™]ÜÈ¡»oCIÛÅ?åéUÎM¼ayu¯óÀ3{rñ‰‡ñÖ-ã…mpò)+v阗«9~ .Û÷+ÀÐ}Xußme•±ÑÁj2»måø-4'Â!Õ–Ds3éÂ Šº›!¹€'nýû>™ï\q +§?Ƀ½Î¢qån¯IÈç+gü„ÃF­¦®«ò“­$ÂçÑOÐ’€‚²üMxÚY[ëq àm4ÆW?)€ßÖ@{ê3þïòßòοmlšöæfš;ç3 ZÚ}òË p ºüRò{Xº±sZÚç½ÊœÈqì1¦ƒQÅ5<;³§‘º>í í¤–½Ê 7¾ÈŠî} f.+bïí¿ÂÀu¼7¿•Æü´ï¿;_ùʶ85ÓX¶AO_Ý“4µ¯<À?÷ü'\Ïât¦v~œÆ–4…ÙšãЯÀ§µ±£‡ ¯¦­›Âj2{mõ´;)‹‚ âb¥¥DÚçÓÞÃàÞTý'¼pï'¼4m‡w.繄«^°J×÷z[å5™Ok*ÛƒÛw]{øî†SXA¡“½AEtÌ‹o–ÓW‹ˆˆˆˆˆˆˆˆˆˆˆÈšÙdƒùÒ+Þez]5‡~c,ò]œhUÛg`þFÿ ÆàF£DÃ×€í æíòwÝ+#§˜_Û‡mz©‚MwÐî1¨2†1f£ŒT¶íŸñÚœ<Æãk”.xÙ-=u:û4Í|•šòýøÆøjŠ"‘‚~T¯FœÚ6æÏXI¿=&1¤éæ¶øxõ³˜íïÀž»•²ôýE$6BöU¤óÒß^½ŽdçìÅ€;˜ÿÊǘ]fü ÆäÑ÷ƒ—÷)¯}ÖÅ'Ñ’À)ByŒ±}·u“è;sjù»¼Q;ý¿¾%®Á)É>TÓðî»Ô¦º.É)ªfûmËÉ3àµÖQÛ˜ÆÉÛ”×½­fêS8–Ç $Ï8o¿/ûläÃulܱä""""""""""""²>6Ýå<ÓËxá®ûÈ;ñh.¾î,ò°´/~“vcœ×É™WÞ˜»ýùC\öë×h|û~îßæ Ž¿ä&NM®dΫ¯ñnäž—‘˜Ïó/.æœÿºŠ›šßçžkÿœ=¥ô†gÁk³°»ïÊü'æÐÖK)üú·øóJ8á›põ· €µï?ÁÝ÷.¦ ¦Oç>ú¼<@£øËùh~>_ß³GkÚ6úXæPbásüíÕq|ï°ØÒ6óaîzîxNúþ5œPhˆ/ÿ˜ÿp?4cIW¼ý,ïM<‰ÿ¾áëÔcÀ`‚ÅY‹ÍL§üÙü™:„õí\ÿp´nOùÃùm¦áA»3óy™¶x`±Xlg/™ö€ÅúßZ|ß#‰¾ÑØš·åW~åW~åW~åW~åW~åW~åW~åWþ--$\³1.Æ_%L0³Í¬–`` Æä>àê,¸íàwBæÃ±°W;hˆÉ¬—Ll&ƒ!œ rÓZ,ŽÉvzØ•_ù•_ù•_ù•_ù•kÎvrzž‡ã¸AÇ­ Öd¯ÂzA»×ë™Éd4ë[0ù3ÌA-,᜹ü6Û®·[þLY²ÄaM³ßÍÔÙàöÛNo2µ6™ç*s¿Ÿù=S|ž^(Xžoý.ù=Ïk³å6óakÞ~”_ù•_ù•_ù•_ù•_ù•_ù•_ù•_ù·´üî°aÃ.K¥R¹6\z§mö'˜ ¾ïaý܇g¾ïãyÁ}ÁJÀóÒÁ23ç°FRd®]–™×b;]-÷aWØØ0GЀ`$„ïù™ù¬ò+¿ò+¿ò+¿ò+¿òo¥ùS©………¤’I°ÁWÏKgFÀ‚µ™öe2xž—ݶ3<=rx0*¸Ó`/,'Æ·>žç§ÎÔÀ . “½íû^æš»¾õs#o3Ù¼´—[§ç‘J¥ñÃÎYß'•Ne×m­O:íáûÆ€—ö29=ÒétfDo×üA¾N§|öƒõ¥S©Ìï–H$BKK Ñht«Þ~”_ù•_ù•_ù•_ù•_ù•_ù•_ù•_ù·´üÇqp]ǘìŸ~:0ŒµC*Ø1an6X±1&3ÌØ÷Ãë …÷a‚ăð‚ÇN§aÏÆq>Ì28ŽƒÁ`œðeÁõ͌〵xÖC°,kq\‡ .ù­õÁóô•ð!ÔÖÖÓ óÙëÿEÌ?ï³ÏX[6l'Á²û2|ø0Õ_ù•_ù•_ù•ç‚üŽ“9œMö<ümm˜%8þ3ÆÁŽëô˜ß·þç·Æ]ëüžç­qýƒüUë%S›9à7òÛ`ý™QÆNæÇ×%´5o?ʯüʯüʯüʯüʯüʯüʯüʯü[Z~wĈᗥө̃ÇV®¬ÇCUUÙ^k‚&l€ÉÜ4°™°Àq‚eÏO•Ni!ó¡[qq %%%´·· Á`3ÿ ? ƒ ÖÚì CPèì^™ÜóƒÁq‚ôúÊ¿Ï>ûP^^Fmír|ß[«üÁ}Á²7Wþõ©¿ò÷œ¿¡¡‘µÕ¿ŠŠŠhooï²îžô+/Wý•_ù¿pùÉüò»Ž“éDñ³±óÙë¯üÊ¿þùÓé4¥¥eøž—ÍŸ}ýZ?“ŸUóÓi=™ƒk³j~,ÙõÕåꃚdª×I°ÞpÿŽLî«þ~&?=äkÐYøF¢§úwÍaq#.ÍÍÍäÅò¶êíGù•_ù•_ù•_ù•_ù•_ù•_ù•_ù•KË±Öæ>زÁ°âí·‰1&8 ]-ˆi,Ö†« 8N0ŠÀZp'sÛf¦7äi…1TVVqÈ!‡ðòË/g†:“é¥NQ./øÉÆ'h² –~×=?X|ßt®í*ù1†‚‚ößÿ yóÍ7ñýŽ5ÊŸ-v&ÌæÈ_RZÊ;ìÀ{ï½»Öõÿ"ä_Ÿígcæ_®ëâûÁºJKK9r$ñxœ–––./ÀUlÅõÃe—_NiiéÕàÒK/¥µ¥å ‘ÿË^ÿ­=¿ãÀàÁCØu—]ºÝv8ŽÃìÙ³™3g+V¬ÀC2™ÄZŸÌY=NÚéõ¬ú+ÿFÎoŒCii ®ëâº.étšöö6::â_Šü›³þdîÏg^»}ä'Ìf-Á»ÉÎ|“Ò_%¿õƒoTö–?¸îËšæ·„o‚ƒ{?óx®†ó‡v©¿1]ò‡¿;NõÏtû¾—®ìyþV½ý(¿ò+¿ò+¿ò+¿ò+¿ò+¿ò+¿ò+¿òoiù#ƄØ-ÁPæ ·Áf.<ü?l ÙðX²aaPßWž’Λ`ÅÆ åàƒ¡²²2˜KxJº0°1™ÆfÀ1N¸zŒ1ÙaÎÁðhÖ:¿É´¢µµ•=ö؃’’þõ¯—hmmë3¿1K./›)ÿÑG͘1c(--åùçŸgРAL™2€·Þz‹wÞy×u¿°ù×uûÙØù{ã8‘H„Aƒѯ_?†Š1†•+WÒ¿¢Ñ(Ìž=»¥ëÙZëo¥ªªj­:€ÇÉìô6þ/{ý·æü®cèß  fáBæÎ›G~~>åååì½÷Þ :”x€=÷ܓǜt:m‡Íü‘Uý•SäÏË‹2bÄb±Ñh”xªª*"—h4B*•ÆC*•"¼¦¦ê¯ü*¿ëºTU_ þVq………S\\Œëºäçç–dr(¾ï&»]677ÓÖÖ¦ú›pôj?¸Nnf$­ Û:;N0^aE%•DbÇ­áÙ* ×ÅéT’Ž–âmÍxéTæàÞÁó|Œñð3§ ÞdÚ˜ySÐ5®Ùü6Ìü½s›m§ç¥3Ó°Jþìõf|‹|ßdëd èû^öÔÑëo“y,׿¢mÕÛò+¿ò+¿ò+¿ò+¿ò+¿ò+¿ò+¿ò+ÿ––?|x$ÿÛÔÔ@iiiÐCW&w—뺄Y‚Î7.W…X,ʸqãÙgŸ}hkk#>ØÊË‹QZV–Y‡É6ʃ—NÓÚÖ–½ðq°,ÛuåÖfÖÝ5¸þŠŠ*&MšD^^^6z^^N¦ó·ªª*óá¾Okk+UUUs̱<óÌ3,[¶4›ß˜ð=“]µÉä°€ ‹nœ.O–…õÊo-]ê‰D8í´Ó©¨¨ ££€d2É®»îJEEñxß÷I&S™e|±ò¯ëö³)ówç8Çg·Ýv FT©TІ† X¶l#FŒÀC<Ï>/½ ;…·ÎúC~~~öÃìÎ5ŽF£]^›Aó,7ÒC¿¸ÛÏ»þ[gþòò~tttÐÑÑÁ€˜4iÝE£QÆŽK"‘ ½½ƒ‚‚‚ì·³¬Í]KTõWþ •ßqœýBÈqœì1‹çy¸®KYY9……EÙý¦µ–––¢Ñ(mm­ª&×ÉM˜Ö "yùW"/¿D{ ‰öZ–“N%ˆÆ 1ÆŠ·c\—â²*œH„’ŠA•UÑ\_K¼µ)hŸïãûNæ ?ÈïØ`$®1ôž¿×Í(¬aÐv?Û®ÜÛ…°l6÷ô„+‚ì>*X^ðæ›9ø·ÞHd—ѹþ¹umÍÛò+¿ò+¿ò+¿ò+¿ò+¿ò+¿ò+¿ò+ÿ––?â˜ì­LhÃÂ… ±Ö2vç±&³–^xžŸ•Bö¨ ƒ×^Ënï½÷aüøñ477gGú¾ÏäÉ“³Á¾ïg.\ÈóÏ=—-XÐ2Cpm›ýp>lVçüÙ­¥ÿþ466fó& òóóÉÏϧ¥¥%[x€öövb±GuÏ<ó óçÏÏ}—Y¯!ìï´VkqMXS‹ï…ïü„¯kþ°þ à„N //æææ.ÏA{{;eee´¶¶A§p*•Æu##<Ö1ÞpNºêGTÝÿ3¦dÏ‹¹âŸpýÕO±Ì[»üëºý¬Wþu¨wýû÷gìØ±8ŽCGGGöz¡ÍÍͤR)ª««Ùn»í˜?>555ÔÕÕF)..¦½½d2Iç‘Àáyã7õöóE©$Év®…ë ëãyžçuÉgÃY7B~wàA\|Ñ®¼vÝÿðj£¿Éë‹åSRRšÙA“mC÷?ÝåÖÙé>XCKKñx|óm?Ñaûóó©zô2îüÀg§ï\Ãé-·1õ¯Ÿ‘Ø ûO'ÁZK}}}—;¿&!ø°Ë.»p饗2`À&L˜ÀóÏ?O*•ÌtèlÞýÿ×3ï?•Íó[߉DˆÅb]¶GcL—c¡P$ÒõË0IJ_nÛHùó‡sÂÔÒÿo¿àw3Ú¿õ¾ •J¥ºÕ?ÈVTZI¿ÛèhcÅÂOI&:ˆ–N%C*Ùµ`=m8^¿Ê¯üʯüʯüʯüʯüʯüʯüʯü[Bþˆos4Zkq]ÃСÛs™Üüáʺÿæû~pÝ4ãdNKi6ôë×É“'3lذlçd¨µµß÷I§ÓÙ;Ãß#‘ùùùD¢‘Ü(,l¶ÑÁ©ë‚SÅö”?ÛæN;kooÇ÷ýÌ©»ŠÇã8ŽÃäÉ“yå•W˜9sfö¹ì‚;-<;T;|B||àæ×’[¯ü&¸oäÈ‘tÐAcÖh„i8j(7ª¨ÓØS~S„\Íé%OqÅ5ÏPëeòGÝÜ4Ýò[Û9¿aÀ!—0õèBÞ¸í*’Òšƒ»„ŸŽz‚_þæÚ³!zÛ~ªvÝ“~óÞ`NKçNšÕä߀õïÌu]FM$¡µµ•™3g²hѢ̇Ë&[ë¹sçòÑGa­%‹1tèP¦L™Â[o½ÅË/¿Üu¹«äR9î(N=foFUæí nöKüïÝOS“2ë½ý„¿w­âš½~7|ý}‰D—ù«ãûþšåwÊá5œ9<œ$NÝÜé<óð¼¹$ž›£S~¿þ}ž|ðs7yXë¬6?Ù4¦·Þ\Š·êÍË#/‚Ó}¶w´cl°œî”áòƒ»Mf‡8¸™‘ÒÑxñxǪùM1{\x-g ï¼Ä6Þ¸åRîý4¾Nù»Ô?Ü~ÒËxýÑ(XÄqcd;,:ÿ1Ù„ûO×uihhÈÎÛÜÜÜk}‹‹‹Y´hgŸ}6üqæ2t¶§ü±ÇoàŒêøóew0½)“/RΞ?žÊþo]É ÿnÀ߯߼aœpÙOØ·§Ëi/}œË¯{:m_¿*w™@åü7˜ÓÜCýc£9÷Ú Øyñ#\õë—XæÏÛ‘ï^}Kþçr¦-õW›ß¯£·§×’ؤûŸ/ÖþÓCSS‰Dœh4³O´6³BC®ŸÏvJ‘û;•L&YV»¬ïü¦„ ?îüºOÑ´h&Ó_˜Æ?ÞYJ‡·šü]FÓšõÛ~6Iýƒç>¸6o×9K*RV5ˆD{3M+–‘Jt`Œ!ÞÖ”í@µ^PÿH47!oÍüOÓÚ¸Çu)*­ šcåâx~pê0¿ãˆ å”{îa¿'Nç;Õ~¥)R}wþñPž=ë\Zœî’ß;Æ ëŸÝd:ïªVÝmÑy´p¸ýcp#î×?wª"»žõßz^¿Ê¯üʯüʯüʯüʯüʯüʯüʯü_†üëÛì’'B\RR‚ï[¼´‡qLöñÜzmpÛdY°ø`ÁÏtR 2„£Ž:ŠÊÊÊl§j¸â°`}ñ}ŸtÚË40XïûÁiò ¾õq²‹Êå·Öâù«Ž é,:=òòò²¹º®;Í~ûíG,ãý÷ß'™L`ŒCîô~Á¿N§Î k-dzçc2ùsë ³9Ž d:•úÈq]&NšÈî»ïF2™êÚ݇òòròóó3O¸Í,Óï1¿ÜÊñì·M3+ìWÙkÈ‹<öyL?Ì áó`{¨°eø^1¿u8¯_õsÚ½ìö~ðA)}o?&6’ƒ§Lû]Ó™Ó’^£üºþ <8{šðššjjj2Û`n¡MMMÔÕÕK0†²²2N8áÈØ±c™>}z—k4vÏïö›À™gL¤å‘[¸ä:lqCxÔ¦XïíŸLÂÇ׿õ›­ç¨4eèС$IR©5ߎ*++)(Ègñâ%}ç·>fås7pÕ´%P6Œ¯žø]N=§š«þÎâTùS+øäÝ:ÂÎ_¾ °Ùí?W—òqßdÊøçxï­Z¼ P°$“IñŠKJ‰Ec46Ö“N§²5í^ÿ îA£yQú•Wâ8.-ÍMÄò 2õ§çíŸ4õÏßÄÕ_B*üƒÐÃþ½¶¯ƒ¥3Þ˶ÏO¾ïA/ûŸðÔ}×í·ÿH$B:Æó‚åôïߟãŽ;®ËëÜó¼ì—ž{î9Š‹‹©®®æþûïïôÇu5Û¿5`}0c8þ¸]˜ù‡÷i3†tÚïò·{m÷ÿ}Ö?>Ÿ‡.¹€‡,D·9’_þdGž»ìf^kô1&ø¬Ùþ?¬¿S0‚C;„¶;§3§Åë¡þëY¼íŽâäI3øÍ++è|‰ ã¸Ùƒ‘Þó;TŽ›Â”qÏóÞ[ËVÝ~6Âþ§{ýqhjj&‹‘Ÿù×Ômmm£¸¸(hóFÞ&’ R©eee”””d‚m$x­÷ô»1†d2Ikk+ÉD²ïíÇõ°6ÍÊgoàÊ'“ί`øøC9ùÔÿfDéµÜòÂ2¼¾ò‡›™o)öUbÃíçŽÎÛÏFÚþ{©?ÙÇ»Ö?¿¸ŒòþƒY¹´†xk3‘¼Ûëþ§°´‚޶fÂk»n°íÖ×."Í£ÿ¶#)0„ÆÚEA;0Ùý³õ}|k±^ÏKg:€ Žî#½Ìõƒ3ÇV¾“ÙN°¹û3mYuû1¹ú;ÎZoÿ=Õ?\ߦ>~ؘûÿ/ÊñϦÜþUÕ_õWýUÕ_õWýUÕ_õWýUÕ_õWý»×?b3+¬!œ#(FØ m³ 1l¦1A£s+¯•8jÔhŽ:ê( H&“]:×NP¨pÙAAÂÆd®µæ:½æïÜQד°cº§|¾ïÓÐÐÀĉ)((à­·Þ¤£#žÍJ§Ó™õ8]ê~`~(~¶%÷ÁbÏù­µpàTWWÓÜÜÒ¥í«³ÝvÛ‹ÅxöÙg2LvcêžßZ—ö¦bö#ü¥i §ì;”§ï›K¢S[ÈÖ?×6ßïZk-m3Ÿàíª#8åopÍc5$“ÙRLvCŒVŒãèÓ¦°÷¨ ò’+™óŸÇ¹Ú{Ô9Ã8ò»g³WE1þ¯dÏÆ÷¸ûú¿2!ìuâ™3q(Å^=3ÿyÿûÔlšýÕûžÌéGìÁ6E^óþsÿ<òQ ÞúÔ¿“wÜ1ûûœ9sVéü ·¡ÎV®\Éûï¿Ï¡‡ÊСC>|83fÌè4_×ú;…(³Kxñ4¶ƒmk¥±œÒñ|ï²ãh¼í2î›ÇZŸÈÐã¹âÇÕ<>õNZO¾‚ã^dÞñìPYJIdo>p7|Єœüj¾zÜ·8bâÊ#išf>Æ-w¼ÄòT߯ßÜv–{Ý÷µýôµýû¾Ï;ì@4eáÂ…455ñôÓO÷8ò¾7óæÍ£¸¸˜±cDzhÑç464ö’?ŒçãyiRõóxý_³9ú;ÛÐϵ4ïþ~5ñîÿUN™<Šö'¯äúww῱/üêF^mŒ²ãyWq|ãKÌ<ŽQaM¼‡‡Þm¢bÏSùÞqÃ(ˆœÁe×µ±ðÉ_ó»—W`ûØÿ¬Éþ ¥¥98{y?ú÷HKK3ÍÍM„£²º×߇’’RJKˈ'ÔÖ.Á÷|bêÚÓöë{A}:oÿÑaœtéYDþ9¢IãØ¶¢ wùk<Òé¾uÛÿ;ŽÃ¶ÛnË~ûíÇŽ;îHuu5ùùù̘1ƒššæÎË¢E‹ÈÏÏ笳Îâ¹çžcòäÉ|ôÑGD£Q‰D¶ó¸Ïíß±`’,xæEì¡'q쎟rßÌöl^kƒŽ3KÃü§NÇà‚µï?ɽ÷½È|gw.¸êdš~÷Kî—Â)ß‹‹¯>•ò®åòÇ‘r«8èg—²çkWpÝ‹uxáÁDØägÖᥳ_Ú‰TŽçØ3ŽgßÊqš?ãåÿÀcï5`«öá—NýÝWrïÌ6ÜsñÏöeþ]÷ÒqØ·ƒýï®fbã{Üsý_™—êVÿô2^~n%{s<ã?¸·[rWÙÓΚBFt2'}cw¶)‚¶ÅïòÌßà¥ù *÷< ŽNAäL.»®•ÏŸú ¿ÿOE£ã´“d§ª(m‹Þà±?>ÈkKƒ‘ûëºÿémÿï8† .¸€W_}•Y³f‰DI¥Œ³3“&MâÞ{ÿ’y±®ýñÏÚî?=/MQQ……™kÏfÎ.‘N§³Ç&·68Ë„ëºÁS²—{Ûÿ8™£Ü ¼¯dÞ«ð{3˜©SŽf§7îá£v‹[±Çœ~ûl_ŽÓ<—ü¾[GÚËõÏmÃ<•SÛ=» ÿåÞRÃŽü^æï÷…Áös÷õe¾©fÒ §çþ~¿pÿûô,šÒ}ÿ¬ëñgPÓðRÁ|‘h•ƒ†Ò¼²–¶¦•ãèhËHwßÿ8n„üâ2:Úš»,;oÇHziZê(«L[ÓJí=äÞ(ã`ÂüÙ§Ý`L#޾ˆ_œu#KÒõ3ùû?çÖך¨Ø÷{ü✃³m9±ä2Þ}ä&®¸ç--Œ<†Ÿ\rã* )//À¯ùß=ÿnæ°‡ýàœ{è(ÊÒµ¼ýà\ó¿ïPŸ^ýñOçQÌëSÿµÝþ7æþSäßXÇÿª¿ê¯ú«þª¿ê¯ú«þª¿ê¯ú«þª¿ê¯ú«þªþ‘àC*“]i,ø%ì<¬í´ø\‘:²uÝãÇgòäÉtþ³{çj$Éž^sur¡ƒ,¦SQƒ‹#wnx×üÆô¶Ôœd2™=%mO#†ëëë7n+V,gæÌYX›[nð»“}‚‚ OnºðƒI‡`›>”u›iêùc±|8ð@JJJhhhX£:uWTTÄa‡Mæßÿþ7ííí“ÛÀ;ç'ZÍÞ_-bæ}Ÿ0§u[’?<€ŠæòQ{祅õ2Fw®ðœD#µüó¾WûÃÓ8xú <½ØÏ=ld‡|÷ vžy'—ÿn&­Å£9òûçr~|)×=9iw<ĨkaÞ-—óø¢4PÀðã¾Ç ÕoðÛŸßÈç…ùöOÎå´%—sÇì|óØQ|vûO¹nnšâAÛRÖÔŒgüëVÿP4¥¤¤€%K–d¿È°:¾ïóé§ŸrÈ!‡àº.»ì² 3fÌè4…éRÿdí{¼ß¸?ßüÖAt<öofÕ%±XlëL^úÈ匽‡ût&)¡zânäúÌj5lkò8i8Ï_s=÷×Y*÷ù!—ž|8ïÌü+Ÿ% 9åNþ6÷\u;³Zb èçQ—¢Ûk¸ëë7¨YøúÊ혂ûzÞ~zÛþ}ß²Ûn»a­å?ÿùOöú•ýë_W[ÃîZZZX¸p!‡~xöÌ«ä7~¸»Äq"ä—çk~çói,K GÍA ÿƯÿûâ ¼Š]²õö»y œ8Œg¯º–¿Ö*öþ!¿:q2o͸—oÜÇŸ¶5µ¢Ô IDATÅEÕrùo>¤ƒ`çß×þgMöŸáu W,_FQq1eeý(,*¦±¡žx¼£Kýc±ÊûU`Œ¡¾¡žö¶ÖNûo²(VÙþ­ 2õ´ýÑ*&îÑÆ5ÿsµl×üœ³ÏŸÁ_®¹Žûë#Œ<îR~püÞ¼ñßÔ§šXðÿìw|Õ½·Ÿ3[´êÅr•åî`SL±1½C $¡„f í&\rCòæ’ )„$$B€ôL脎cš 6ØÆ Œ{Q³šÕ¶ïÌyÿ˜ÝYY²e[’ ¿‡Ñjwvæ{ž9sv5gΙ%/óÈÓŸQ-aÊÝÕ_ZÊ’G–RÉK> ûþŽÔ4§íÛv}ìþÛŸö ´´”ÓO?™3gòüóÏÓÜÜŒ×륤¤„’’&MšÄرcùðÃI$œtÒI<ðÀœy晼öÚk©ú½ûúo 10Z>ä‰7æ{×|÷?džԵ!v']ÞÑWsûEÙ¼õ›ï0¯¾g~ã.n½¼’ýk+Ëk²8kd¼wsÄñ”Ôl‡±ãéóZ%;²‡rTi«Ö5¥¦“u×ûÐéã×7so¿£7ü…ÿûýZÔø¯ðÝ›n¡¡â×¼W·€§þ=‰ï]3#~þ.ƒ®¹€œùñòêuD·>ÏÈŸ]ÊÆ‡ïãåJ3õÅÈíå!¾æE^õ=®¼êÖýíZ”²Í'æM¸ŽÛ/ôñúo¾Ãüjƒ~Snän¿Ž†ÿ™å gð÷¡öqtßo–Ò£x 7~ýZžþ)ßZbè´ïpÇíQqÿ+l‹í[û³»öìØqpöÙg Ùºu+Æ åŒ3Î ++‹ñãÆ³zÍš.¿ûÛ~Æbñd`ù ƒÔÖî ¤¤`_PTZZ hêë4hPjÖûXw_èÖqûãRZ§ZšÖ,¦ú+1¾¯Á'ÛK8÷–éµáÏüßïÖ¢Æ_ÍwoºÙ®/ÍÉ5v=Ï ·]˜Í[›¹õ¥œùÍïpÛ•ühÆg¼òØsŒ|à26>|ÿ®HYŒ¸òv®(ûGþ÷A¶çžh~Wÿ˜Ç–4£;ùþ³¯ß?µNûv>«/Áf"Nv~¡Ö&±pjy÷{Aáñz ääáõg¥ÞŸÙþä—ô%¿¤Í 5ÄcÑŽý§¾ƒªä÷v±=Up"ß¼}"+ÿ÷n^¥pÈ(Jw¶ •EÛ–¥¼üËçøþšüGßΟþ6_~ïþ¶­?—|ÿ6†¾{;_yz…çý’¿^÷)wÞüW6ÅŒùæÏ¹ãˆ™|ç‹·³>ÿ<î}ìG|oóõüï»õè.|ÿÑZï·ÿ½­ÿ™þÓëížö¿çó÷Ä÷ñ/þÅ¿øÿâ_ü‹ñ/þÅ¿øÿâ_ü‹ÿîôoÐA¬ 7²qãF´«×ØJþ$ùO“üÝ…×륨¨¬¬¬Œ‚9£WÜÿö„³nÃpzÉÓ':Ý=Úåש÷«=n'‘Hd܇Øýìé°gÏžÍúõë“2uR#Ü® –eº|¨ÔöÓ™;5Ý۟ίµ&sÊÔ©ø|>vîÜI8Þ§Á`Ã0˜2eŠëž«»æ ?ƒã=+˜³9B¼æ#´Œâ¬ñ™æ\Ù;÷¯0<Ñ-oò¯…9œwíiô3Ò'=-­ñô;ž“úV2ëí5ìLXÄ›>åY•ô=éDúûHíß”#_§LÊgãæ°¹Í$^»”÷?ƒQ' Ám¢&˜ËèI)Ï5i®\ÏÖV3•e_ü»1M3u’= íõèõºº:¼^/ñx<9ÉU.—b[ø÷¯Ï»‘c˜~ßCÜÿ­+™RžÒa6ÌY†9þTŽÌ5ÀWÆIý|6wmI÷±usXÑLš7m %0€"¿Bû3ùØÖ¿:“ÕuaâáTT6“ØÃñ›ö”vä~noêYY'œp±XŒP(DKKË~ý ‡ÃlÙ²…óÎ;ŸÏ×q~¼ô9ÿüæðÐoä¸àLýÓ|‘Ý‘õ¼1óv´E‰Æí«`œr9?3œn^OKöJÉ‹\û°+íÏžÛÏÌ÷)¥‡‚Ôî¨&‰Ð§´/%}JS÷ó..éCŸÒ¾Ä¢QvÔTÑÖÚ’áß},v\ÿ½ô9ï{üòá‡ùÍo~ÃÃ?ûcÎ{,¶Ï_j׳®"B|ã<>iH ­0ŸÖ  ûS`h0›Ù°l ÕAh`í'µPXBŽ¡\NÎéO¬êO¦ÿö÷·ý‡ÚÚZššš»Þ~îê?µ—ËLP[±x4BiÙ²ó‹3Ú ‡’CtÄ8úEQÿ2Ìx”¢~ƒÈ)(Âãñ`¿ñPÔwù%ýiª«¢¹¾ŠŒ9Ð]ùAÃ.ù“Ïk­ckK!Çu GXìܲŠõÍvÞhÅ殪%b%h]?ŸUmù”zÁ×1}ÛX³¢šˆ• ~Í šúN < ±ü#¸ø¬"V>ù«›M"ÛgóÒ2Å1Œ%g/¿ÿìÿ½­ÿnc»>Þ¿ö¿7òwç÷ñ/þÅ¿øÿâ_ü‹ñ/þÅ¿øÿâ_ü‹ÿžðïµ â‘y:7Yç--­\pÁ©{0¶Ç0 ü~ÿ.ÓçîŠÊ­©N­ížqûw§àÉüɈíw†{ŠE¯×Kvv6sæÌaݺϒåP´ßáμà ð$Gêä´Œ†¡’'vA©ôŽsvdûü¦i2løpâñ8 ]ʾ'”RSYY‘šû;ýb.£Ï:–‚"?wýz :YÎ<–>Kç⌳D»+«&5ýs*¿3 ¥F[!Ö½ú/–Þóu®ò Ïšöè4xrKȶZiŠÚ¾oi&‘Ó‡\ÃUïœí¹”æùõµûy8yž[y}è 9øâŸðƒäœ/^Â7øõ½ÂÓ/ͧ"¢öÙ¿ÛMß¾}“'~! bšfê÷=±~ýzúõë‡Öö=3ß×þ «e=ï=ù s^Ä„ ¯ç†»nEýäæoÇÂðœ62› Í'0Á÷)3Ö·bZ,,¢­{*_´=ýªRZƒ'›’@„­qô^¿IõI?NVÚç{Sÿ?þxrss9ï¼ó8î¸ãˆÇã]r·;JKKñûýŒ3ÆžV;#¿ì{]þø•íÄ’ùÓWÈ€ÙVKK¢ÿäÿí2ØNMçw ´R¨ŽêÚŸôs»ñßî‘Öö´°õƒ-””ô¥_ÿhmß;²®¶šx<‘j³Ýþ)•t’QÿÑ ìœó~ýV5q­Q$…5Úg¿n‹Ø÷ìV–i GqîÜ­, ­ 0*»Œ“¾p §-Å—H  ã ªT~çAÊ™¶ë§ÕAý±³ÚW89ÝÏïWûoY´´´`gžy&ÕÕÕÔÔÔ°páB***¨­­åÒK/MÝOuìØ±Üÿý{ì±|òÉ'®ø=ÔÃ~N ³šwžšÃ wNçÜ%QëôÏYd‘7þN~y|òóÖðቴàW1¶¯YKè´qôÏkfÒfV¼ðM¿ÌG²qÀpԖ穎%ŸkM»:¥5¨ÜRò¼å|å¾ßpyrIOS•ãÇ@c™ ,™µ†Ëî8†f³9b¯6½jÕ±ÿdÙµeß1—¯ŸÌ÷¯þ ~õ Kƒ¶ÐÊOažAx}(y{ VÆÁ¨âl”Š¥2+JyÈ+ÍÃ[z!ÿûës’[ðàSäøÓíõÞ¶?»kÿ½^/¯¼ò ×]wC‡åœsÎÁï÷³yófÞxýu²Y®6±gÛÏ`°-ušs»åÚÇ™õ=ýƲ,Z[Z3Ú‚ÎÛŸd^W~#·¹„© Yy}Éóá+÷=¼K}Q:½Ï-r(.Ì"ï¨ÿæÁŒ:ÜŒßPxœïOÊy)Ïþüþúí>¿x´FÓ íg;ÿŽ÷± 3– ¾j3…¥(î_ŽÇë§¥q…}ú“_ÒŸX$DKc –i‘“_Œ•ˆá äR2`(‘¼fšëk((íOVv>5Û67Úír;v¾?;û_áίœ¯—JAd }óÿ¸â–›øÕ‹ß ú?á×xuAƒÒ®â–kÏdT&få0¤À`¶°¢Õ¬¬Îá Ç–X½™â ÇQÜ°ŠŠˆ_e…޽ïf&ì¿ó“ü BìþûóǶ?,öÙÿÞÖÿžlÿ{#w~ÿ?ùÅ¿øÿâ_ü‹ñ/þÅ¿øÿâ_ü‹ñøû÷:ovz§µ‚#†§ÃhûI-´ëN!‰8‹-¤µµ•iÓ¦‘Ñ ìœèôz½øýþ;ˆÓ2Ò'¦ŒäIv˲ìNJÜ™ùU§kìgÎÏ@ €ÏçãÝwßeóæÍ)ö0ì4íO˜ÛÂLU°·ý8¯Ú•=3¿¶4«W¯fÛ¶mx<Ž>úh²³³3|¸Owôœs‚8‰°råJ,Ë¢¹¹™ÜÜ\ÚWOáQœ9ª‰Y¿y„Ùµ ûJ‡Ü‰ÜôíÓ™ÔooÖÙ÷èv®bpD8euç'YW,­±ÚVóïgWóÃë¾Â„9fê>ßV°ÑŸ¢€‚ˆ}ØWPˆ7¼‘ ©ÑÞt>¥Xaƒa–ýýüqu(åÛ02,BAâÕsøéýoS—PéþLëþÏßììlž~úin¸áHUUÏ>ó >¿?U»tüîgû‰D‰D"äææv8ËDû)bÜÏ·¶µ¦Ê³Ûö'½Åd~/ý?…AáÏxaG«¤‘`|Ïüà!>nK»ÀŸ›Þ¨ŽÐÔ¥éýßrïó›‰éôg)(ÁgÙ'¶€ÎÊ-Ëžžpåʕ̘1ƒ††×Ä™ÓA{½^áȶ{¶3´¦wÎòƒ}"¬³îmY–ENNZkfΜɦM›2Öö‰2g¬vo[Û/Îö:ͤh#UÙÜïiŸßðxȃÔÕՋňD"©Ñh4ã÷Žž‹F£D£Qb±uuu´µµ‘“““<¹ìί(>öl†6ÌcÞúZihh¤aûǼ·©ˆS&ÄcY¼ÿßžü;/k´¶h^þÏmÆÎ.߬?ñ‹YP3sÎE¾Ò¨Ü#8ãÜÁ4,ZLM\£AÚÌú÷Iž„nãƒÃŒvcK²0<òû`X±•]ÆÈòb²$‚µTïŒãñ˜ûáß]Ó4‰Åb(¥(--%;;ÛU:Ç0 &NœˆRŠH$ÂŽ;Úëɨ?FÉ8&Ù‚,<¹”{ £ýµ¬«bYq—ΡfÈ…\t,¬˜¿•¨ã@wàŽVðáŠ(£¿p.cŠýx¼¹ôÜ—];~c!£ ö¦þçææ’——×#ÿ²NòÛ¿ì.?äw:,§:åÀn,í‘ym`•Qì#Y¿öÜþì®ýLK»÷ßÒÜDKsSªþvæßÉÔiý”áÅëóáóyñx vérrò§~uò;Û¬üDšhŽ˜ùG0åäAx“¯[–Ë£N;é¬þ¸ËêÌFáv°?í¿=µ®IUUÓ¦MãàÑGå¾ûîãâ‹/æä“O& F9ùä“Yºt)Ó§OÇï÷ãñxö®þZ'ë¿bý«3XZt—™eû'Ć9«ñ4SGâ3<ø rÄÐB<‘í,«Êç˜G’X½Šú¸IËú4—ŸÊ”ÒzVlj±/®éèøMï<,K«YÄGµƒ¹è¢‰ô (o}‡Á€lMC.¼‘3â3ùËcÆÚ\uõq* %Ûß,»ÜúO× +ºwžœ §^Æ„‚äë:ĆÙ+1޹€øý?IþµÌ[ÄÔ&‘–Fá Š½Jiv®šËæâ³øÂ‰eä #PDÙð2rÕ¾·?Öÿví¿Ïçã_O=ņ xê©x}¾nùþ³7í§eYÄãñŒãÖýÓ02½»_Çã»­ÿ™ÛÖh üe}þ׸ã’bV¿ô*"ß±˜j˹øâ‰ôÍ2À“MŸòáôÑ Ãl˜½ ï‰3ux^å%PTÆà 0´& Òjæ0 OJ)td+ó—DwÉùŒí“…2²Èï?‚}|¨Î>÷Ó¿Ó.ìÎ[S=µÛÖP»}#mM ©}ÈÍ#ÜÖB"EkM"¦¾bá¶fê¶o jM×ÿÎò›;ùø•åäN»“ë'—S•EþЩ|õ[àûèE–6™¨¼LÕ‡€±¦J¶ÔÅð¼à+ ßcçŽ&b:‹òÓ/ã¸\§•ö3ø¬‹é÷Á¹qú Üô?òÚ†í&¼Ž×ß rÂW¯`Rÿo€ÂÁc8z`£«ß×½\ÿ{ªýïünwûûýÿ@äÿâ_ü‹ñ/þÅ¿øÿâ_ü‹ñ/þÅÿáïß›š›:Õ‹l÷$ÛC¡­tÁó»Ú݇m1v°7¦±‡TCEÅvžxâ .»ì2Ž8∌)Ÿ@ª yyyD"‘ŒÑÀµµµÉí¸O€&{­ çÆËÚž²4õZûüözÜÐn ƒÄb1 hmmeöìÙ44Ô£”Â4Ó#§Höß;;ÌîqO;r¶íõz’;ÊLåw-wò[Ö®ù}~^ŸŸÏ‡a©l{‹a(òòrñx¼É“ÈŽËd~ïN>c Õï-¡Á$ýºneíÜ ä\s:#fÎv•Ûy¨’ønÿ:õš2†RhÝÌ’g^dê½×2Ò¹ÚìáÇþAîôëùÉ#%øMlZð¾aOÙ«¢›˜ùN߸åW<Ò²„ÇüV¾ø[ž¾üz¦ÿø"н`¶l使ü-õeœöµ«9¾eEiX?¯n$¶ŸþÓÅT|öÙgœp (¥())¡¦¦&U_ ॥%ùÇãaÈ!L˜0¥ŒÎ¬?Fîœ}ãÍŒ,É4á«™ó—ǘSgܱv~Â슫øÚ€Ù<[OÕ#Y­uº rŽaÝ àÅ«®ã¦Ÿ^@žÒ4}ò/úsáD×_¥ØçúŸ———ù[__ÏêÕ«w©£{ÃèÑ£0`€ë¢‘Ìü©ˆ´ÏŸyÝM:¿ûº“ÇÎJÔ.z‹'_Ë=¿9—-¯>ÈCÿ©"¾ÛögÏí§ýœýûþú·×A'õÀKɹÿËCç:Kùð×?à‰méõ+#y¬¦Ög?No"Æ–·^fù}™ýîrB5+øÏ{RwjÚ;‹½]§³{×üî¤v×Nµ{ÎYÿÞ´ÿöåÖ­[±,‹eË–±mÛ66mÚDEE'NdòäÉ\tÑEh­)//güøñ :”¶¶Vb±h×ü;þÉç<^:¼–Ÿ^ÆÑ·—üR i[9ƒG^¿ŠknûWäoäÓ·ã±ÍM@ÍŸ43àŠ|>x£–„2ÐMkX“ø20‹'šÝS”d¿†&ÃNT3ëÑ¿‘uÝåÜýÐ-d¡ nŸÏSØJcÿ‹ùê™ïüò]vÄÔ>ÿ,k'}ÆãoL¶¿òû–%×~å.~5=ˆP³ôEûG-‰žýüÕÀ³Ï>›ši£;¿ÿtåøu¾ÐeânvívʬµµÇúo¿^úœ¿;Ðê7ÂÜGÂÛ«vÚí—UÅþð7²®¿œï?|«]_*æóÔ¶PÕæž^ZÓ¶òI~ÿÚÕ\{ÛÉ:ÜÀ§o>Æ£›š º™oWðÍ[Å#-Kyì¾?²ú¥ßñô—¯ãú{/¢(ùùýþßcëÎDjÆ=åßÿí×Õ™ÿh¸êÍkÐVº­ñú²E<"+Óþ$âqª¶¤¶±çöGSÿÎOøNÁ7¹ã;çº>>ˆì`ŬßpçãóØi'ç.¹ç8kHÊ S³âU~õç5„¶òØ3góÃßà¢D=+_ýÿZ=š‘É,ñ†ò§ßÏKg&7üŒú=~?¿‘U¼‹‡nûÜýôWéë…Dã*^¸ïÿ±ª:]øþ¤ÚÿÞ¬ÿéúÕýíOçïîïÿ¢ýÿâ_ü‹ñ/þÅ¿øÿâ_ü‹ñ/þÅÿáí_M:UG£QgÕh­immC‘žºU'7¦HŸêvV¬8ó`ÛóOÛ÷=ÕÚJþ´×söÙgsâ‰' …°,‹@ À“O>Ikkë.`À¬««KÊÔ®WÒ=ßJÖIq®üîÀðz½É¨éeœüÓ¦M#‹Å())¡ªªŠyóæÑÚÚš‘ßh—˲¬äÜÚNJÏÍídq–wvˆ½lz=©Ì»ÉŸˆÇ9êè£;89Ü5 Ã`ÍšÕx½¾Ýæï·ïýõŸ|Ç~ÕŸÞô_YY•Ê——Ç„ غu+uuu˜¦IQQÓ¦Mcþüù¬_¿>ÃÓàÁƒ¹ä’K5jñxœ_|‘>ú(Ã_YYÙÞù7 9þŽû˜¶éA~òZ‰CÄÿ·¿ýmŽ9æf̘Á/ùK¼^û†½Á‰}ÇwpóÍ7ðÏþ“wß}·[òïÑÖÿ‚Â"rrr©®ªèÿý "'G ï_ûÓ[õ§§ýûý~†ÁW¿úU^yåü~?Gy$Æ cÒ¤I¬ZµŠ{ï½—; /¼œœ}ôQfÏ~Ÿšš¢ÑX—ýwgû¸øïéü‡ƒÿ1cÆPVV†Ï磹¹™72|øpLÓdÓ¦MŒ9’D"ÁöíÛ3f yyy„Ãa–/_FCC£øwåÅb”––‹E÷ºþõDQ¿2´ÖÄ£aª· µ$õ_Qrê½üåöF~ù?dÑŽø }ÝxäÔsíÍ/PØwÿ~Ÿú†|>o¯ÖŸŽöGü‹ñ/þÅ¿øÿâ_ü‹ñ/þÅ¿øÿâ¿ûü'ïl÷d;á+++;vLò]É•‚«ðöŠœ ö†5ö ˆížu­íaÆ--ͼñÆ455qÎ9ç¤FƒAªª*]ªÜ±·{±íÇ馓Ë*ìy±3ó+•òKÂLd¬ÏÙ™ö<Þ6¥¥¥¬_¿ž>úˆ¶¶VR÷˜Mæ·E§‡‹;ë±{ꊬRÂÓ•'½seç÷%­v˜?‘H`š&û‚×ëMæ7w›Ü•»ûýÛ‹ï_ýé]ÿiB¡‹-JM}ê©§röÙg“““Ûo¾ @qq1@€ÁƒsÚi§Q^^N"‘àÓOút£Û IDAT?eÅŠ»¬sïü†ÁÅÃ*yç ÷hÓƒßÿŒ3:t( àÜsÏeûöíôéÓ‡½! Q]]ÍE]„ßïgñâÅÌž=;åióÈúé›îñ¯\.ö¿ýÙSþC¿‚ææf À/~ñ <Ojê¥ùùùLŸ>óÏ?ŸœœÀ¾HÃëõ%?£Ž:Š@ @"‘à»ßý.áp˜ŠŠ F×ëÅãñ‡Y°`ï¼ó¡Ph—uvÕ¿§x2ÿ}ïŒ1jXøÌ#,hÔ‡”ÿššîºëÛs̱äçç³sçN®¸â Š‹‹w½b±?þ8o¿ý6•••¬Y³ÆÕèíþÎü÷Ný×x½ ‹\™íû~¦ëhû+•œçu+õ»}áŠý¡ÑíOoÔŸžöŸH˜„Ãa¶nÝʸqã2¶hš&£F¢¬¬ŒÊÊJ¶oßÎöíÛY¼x1ùùùx<ÞÚþþ{:ÿá࿹¹Ó4ÑZ§.L³¯þ³×çñx’Ç´ýeÐîüFÄÿ.ù3ßßÕúo^´enk&`Æ#x}þ”_ÿT¼ú+žw¿ùFŒ„Fbû¢§ùþÏÐdZ‰iÄ¿øÿâ_ü‹ñ/þÅ¿øÿâ_ü‹ñ/þ&ÿ^{£ÚõfE~^>NG‚=_tgØÎT÷u÷œ;½ÜñxœÅ‹ÓÔÔÌe—]–<©éHF¸t•«àuÖeæGÛ,­S'RÝ(Î …BÌŸ?ŸeË–&ï?l÷’[Vfþ]·—^Oj›àª@:õ^g¤_G•Â]ÎöùѰuëV† ’º?aW ‡Ãlß¾ ¿?+cyGùzÒçt^œ›q÷¾ÿŽùì³Ï5jYYYx½^¼^/ÙÙÙ©ÍX,Fmm- .dÁ‚ƒÁÝ®ÏÉïÐ>Ÿ¹óCþÖ‡)G‡¢ÿx<ÁâÅ‹0M“üüêêꨯ¯ß­“Ž0M“Y³fáñxÚ9Ýÿü¢þÇcQL3Avräi:‹ê0›k‰T~÷‡–e™Äc1×òûÞþôVýi_Æîöo·ç&[·n% ÒØØH}}=[¶l¡ººš-[¶PWWGKK ápÓ4Q ²²²Û2>Ü;ÊßSíÿáâÿÐkÿ{ß(äÔ;…ߟÅÀÉÍÍ%S^>˜œœâñ8ƒ•ˆÇã´´´Ç3Ê+þI}oÝÛúE01J Ç4?¡Ö¦ƒªþ›ÍËxâîëxR¥¯MçSûåßÞ¦îÑü»¼[ÚŸƒ¢ýé(Ÿøÿâ_ü‹ñ/þ{.¿ƒøÿâ_ü‹ñïÎ%þÅOúW§œrŠv¦dÎXHëd¿¤–ÙµçZu>ýZæïçwÞêìtÃP 2„ŠŠ ‰J®u¦óãZ‹R®Œ3UcæhD{‡Y©édt÷Ìw”½}~mY„#¡ñxœtÑ3KeÏîh¤:'@†[{ùŽó»Ëá®äÝå¿+õ'í«cÿ»Ëß]þ«ªªwy ðÅ/~‘É“'SUUESSÅÅÅ$ ªªª¨¯¯gáÂ…´´´¤NæwÄÀ:̸ú»7+++™-ó*ç¹ô~ÂÚ~¤ì‹G<#9%‚ÑíùWÿûÚþôvþžôŸ—ŸÏÀ)//§¦¦†––ÒŸyvÝŠÇ㘦™œv?!þ¥þ÷Z~¯×ÃÔ©§¦.,ÒZ§~š¦™š-Å™&³}ûv6lØpPä?˜üÇãqJJЉÅâ{•>¹…}ðx Úšw µ}nê¿×ëeçÎøý>iáú/þÅ¿øÿâ_ü‹ñ/þÅ¿øÿâ_ü‹ñßÞ¿7c#Ú~ä6œ7d”SeH±OLj<g䯕 `FjZRgãJÙËÕÔÔ¤~OJËI»MoÜ™7{×ÊÓq~¥máÊP(Ô.…ߺuk² ÇÉh¤ÓÚ¾O°RžŒí87j¶s†JJ×®@²ü*U¡Ò9Ó;4]þ]ó+à ;Àçõbi+£b:þò˜¦•š:ÒîÈÖ†ÃP®¼¤^wçw»tkíÿ{[œòµ÷¿»üÝí¿3"‘¯¾ú*¼û[·¥YYYD£ÑT½¶3îÚ¸u–ÿóà_)’œ»ÑR©ÔqßN‚[ÇãÁ9þº3ÿçÁÿ¾´?½•¿7ü{½²³³©¯¯Ç4M"‘Á`X,Šiší'(ñßÍþ¥þïÞ¿ei6oÞLyù` Ãj·=·gËÒD£QjjjÄùÁþ¬±,k¯ë¿™ˆÑ\_ZS¶ô{çúŸ\B§6$íÏ!XÿÅ¿øÿâ_ü‹ñ/þÅ¿øÿâ_ü‹ñ/þÛû÷jmŸTTht2Õ¶m[Å!å$»eP®Õ¸Å(åîèµ’w:qÓË8ePʹ1qG"Îe»îÑ­é^ùôc’îÎïz2!ó©:#ºbª ÎóöÎOߘ9].±“Ò]•»3g õnóû|>»ö© èt8:>=žt~gH¹3ª9e¨ƒün2+‹Ê(û¾ø×ÉÜni:®?íýï)Ïøï˜p8̬Y³R#|•RÄb1W=ßýû²|Þü§×£’%¸¶o/‘<4;8~íÿõXþσÿ}mz#oøojj¢¹©¹“öS‰ÿöß“ùÿÎý§»âß]nñß>?É/ƆÔÿ½ð¯SÓé^Í/þŽöGü‹ñ/þÅ¿øÿâ_ü‹ñ/þÅ¿øÿ‡¯Oyùàûì)Uê_ss3hWaíý•ìiÖ`%·ät8š¦3¢/½ûgúy­íåíB§…¹çÁ¶Cºw@Z¼Ý!äÚy*Y,WþdÚÔÏŽò+ìüN¥Ò§îìN~{¤Ë›Îç^wú½Îëöˆh{÷§]èT9Ô^æï̦÷´ÿ=çwþ9yèQÿÝŸ¿{ü·µµÑZk»3©¹9£žï ¹¹yâ_ê¿øÿâ_ü‹ÿnö¯µ&++˵]ñßÿ‡H$’œiCêoû—öGü‹ñ/þÅ¿øÿâ_ü‹ñ/þÅ¿øÿ=åß«µ&Y¦T!‡ â*³¥0”ÂJvä©aÈöJŽ\å,ïl$•JÙ# ’R=†Ç00-38Ù;m[¶7SÓ`9=ñJ'·Cj$¦‘ì1Oï$@(G¢;¿aø²G!Û¢RÓ''ÿi’÷2î ?€‘,ƒ;?¨TV§üf"‘±íd=Iiµ¬äHR#3¿½œÑ#þ;ËïTìÞöß]ù»ËÿÀRÒ.þ“ª=2]§öGr‹èä©ÝùR&3Ðâ7þ¥þ‹ñ/þÅ¿øß'ÿ¤·/þ¥þ‹ñ/þÅ¿øÿâ_ü‹ñ/þÅ¿øÿâ_üÞý{•2P8=ÉνfÓ¨ä;Ú=Îj§×*Ýž~ÚI”^ŸVÎï¶p÷Êí,:Ùƒ®ÓoÔöÿ’?lñ®iþœüèôêt'ùµN?ÓùuùQv éÍ¥óÓI~ñ/þÅ¿k}âùÅ¿øÿ™ùÅÿçÓúyñ¿7þ-˾Ö¹=˾ú—ú/íøÿâ_ü‹ñ/þÅ¿øÿâ?3¿øÿâ_ühÿžÁƒËî‹'âv¡5éëôvaÌÚµ%K[)Î{µ¶ìI –Ö©×UºÈ8=Ö©¡Í$O>i Ê54Z'‡K«¤pe œ«”NÐ:#¿kc»äw–Iß/nÿó»3¸óëd~ÕA~åÊï”_ü‹ñ/þÅ¿øÿâ_üï½´Æã±/jÿ]÷o&L®+^¥þšõ_ü‹ñ/þÅ¿øÿâ_ü‹ñ/þÅ¿øÿ⿽¯Ö®°é½‚Rì  å’àˆH‹Ñ®ÿÛ Tz;]…pÛSÉ»×cã ×–FFêy¥TZT'ù•r¶ 2ã$ùÓÅ¿øÿâ¿wó§‹ñ/þÅïæO?Þ7ÿþ¬,‚ÁÙÙÙvG°råI–Âñd_½™,´Ò(|MÙ_¼ W¶Œ-988ù“Q:ò¯”)GŽ……‘zOzÅÊõ{2¯+?É?zºÛ¿išD"ü~?¦if¼GãüÁAÆ`Î*µó‡mi´‘üƒ.éIk;Ôÿ®åO?–öGü‹ñß»ùÓÅ¿øÿâ¿wó§‹ñ/þÅïæO?ÿâÿð÷ïµOx©Œ¬Î P¸GH«T \!Ùcí~-µ=•Êê¼E«tÑl¨d/¸Û@²ÈÇîÑÖv½¡ìm†{˜sš.åÇΨÕüâ_ü‹ñ/þÅÿ¡˜_ü‹ÿôïõz±,‹`0ÈáDFçk••…×ëMvwoý·¬ä•´Z£UòjW¥¤þKûsèåÿâ_ü‹ñ/þÅüâ_ü‹ñ/þÅÿ¡˜_üwk~¯r–G£µr…w ¤“ì (g4,t*):ýDòw­-”òØñ4ΛAÙëHÍSN¿– `Zfju–e¡”aÖ­µkl;?‡x~ñ/þÅÿ¡›_ü‹ñèæÿ‡¶ÿX,ŠÏë#';Ãcp5 é©t’×_&¿ûÉLZ[†eZ(×îüiZx<ž]òÛBìœv~û˶3•½}eOÃcÙK†JÝwW[†Ç@;¿k½ÇüZëýÎoYšxŸ@ €RêóÑ<|øpÎ=÷<Þ~{V‡?ÿô§?舂 BD"‰^ïç¢ Az˜îøC®·:Œ»ã)ùƒLAAA¡ûI$D"²³³ïà,ïJ½çP냹ÓOqlH‡?Ëß&¦BÔ…?БA8ˆÇãø|¾CA8ÄÙ×é;êì=ªr?`AAAA„×ë%“q Ãô$¥Þs¸ó†»øÎÏ&°ÃXÀÝNÜåg±€Ç¸‹ó'þð@ÇAA„NÑZ”SC¬¹AAAA>¯Ö#€µ†¬l[uò©Uíò³8Os…qe…déõ›—3÷ƒUÔ›ELœ6!^åU͈m¡'K‚ Âþ²7¦=µìÞЕϾ½Ѭµ–ÏTAAAA„nÄ9×rXw[jZàæ³ÏbʧpÆÙgîòó½§4áXWÖè¥ô¸K¹æ’)Œìã¦~ÝžøË›lŽtßÉ6•3œ“Æ…Xòñâ{Z8k 7?ð &xÖóÄÏâWŽì1Üø£op|öfüà!¶ì9£à$Žõ¯fÑÖ0½;ŽÃKé±§qdÛ^ج2ú¶±ò­§Ø´SS2î¦uuO¿Åư²SÎf¼þˆ—ÿñ-¾LúÂ…œ=¡Š>ndõ‚ Œ¿h*Gn~“uA"ô J)í$‚ ì]ýüèÊr½õYÔ~;»ë¸Ý›Ž`éAAAAèÜçXë`­a{k­5«×¬îp™ÒÒRš£e´u¡Ø(>‘éן@ë‹¿ãž%uè¼¾”õ3ÙëÎoÅlj/û+ºÒ SŸÆ©G±dÁÎä¨WEÎS•ØAØìâ¦U>ã.ý2§º‰Å½ÝìÈÄÑ*ßßB›"•,™S™z¹~ã:OšDŸƒaþ€A¨r- •¨§º)ÁÈ€$ê×°&xG²ay“Œz 9a-‚ ô{ê@uwÆ ŸE{ʰ¿¯ ‚ ‚ ‚ ‚ {ÇaÝli‹š:QFÝér-±¡ÈžUxrûR¨«yÙ6šÃÂ[i©³_SYåœyíÕœ1fÅÙŠ`å^ûÇ3̯i׳¬r9îΟré¦_ñÓW+‰þá_áÞoñÔ=¦fÂu|óËÃÈöLçÿ~ÖÆö7~Çãów’7æB®½ê,Æ•úU,â•'žãÃê˜ÝIkµ±nIŒã§N ä£9Ô[€Êcô©Ã¨ÿèòÎ(Oo>k “¿| Ÿ8Œ#Bíê÷yþ陬mÍeüÿÅuãóÈý=î?gsÿ=oUù~æU\uÞ1”åB°rÿyæ9fo ¡ 0ö–{¹xý –y%—LðñÑC?âUu:×^{.G÷  â;YÿÞßùÓ›ÙÝ ioÉyj™Wíðõ¬>åÆw°¤ÕÂlÿøSŽ;ïN‹}LEÖhNì[ÍǯՓHúؾ5ȤƒÈYÑdw( Âç/ýN»ž/•ÌãŸ/o | ã‚ ìiÄîî^?#‚÷gÄïžFùÊ(`AAAA„îå°îÆ‚º–ZkV­îxpß¾} &òG²÷¸ºxí –7É—®>‹ðËóø¬>–%«ãMl]ú*>³Ž±>L¾í¹ü‹+Xöø :îÒì“ÆEÿâŸCFò­²çùñoWŒâ“¹áëSh}æçܵ,Ä‹ÿ‡oÜ|Ûx• ¥¯™Oʼn§rlé¼]kbŒåÔ²Jæ½æ¢3õg1â²ÿâ˃>à‘{fK´˜‰W}‹¯ßÔÊ¿›ÇêÿÆÌ‘ßgÒ¿à—s±PäM¼ÛÎ÷ñúï¾Çü*Mÿ)7rçí×ÐøÓ¿²¢ÀÏÐó¿À¶çÿÈŸ¨'læsÊ]ÒoѯøÎ¬j(DYvÑÝž‹Td•àUÐÜÁg•=ŒÉ§ ¦náKT%ûÓcõŸ±ºúH¦w #^j¾É–6g¬¯Ikm3zl?ò=khKtyÂ~£²Ë8fê&Ž@A–‚h#ëæ¾Ê¬O[zg4º§ˆ#†gS¿°šHolOAè6öµó·7¦îʨãÝuäJ'¯ ‚ ‚ ‚ Bïaè=‰‰Ic¬½›ÿ,mŠ·êJ7ml ¯<üÞ Oäú>Èÿû Nœ°ZÙ¸|-5! h`í'µPXLÎ~Ÿç2(;•­2ky13Èæ?¤®Ï1]êI.£Ð-«™·µˆ“'õËAÑÑSé»eŸ¹‡¿ú3ù˜lÖÍœËæ6 o`嬹ìz GwT²qÊXÌå3YXÁÒQªÍdI|,§‘k—…Yù6o.­¢5#aFh¨QrÔ ŒE¢©‚ÍÕ{šNZá ø &ÞnAÌÉŸNɆY¼·®Íî@3ò}î4މ~À33fðÄÓ³ÙyäE\rb?|É÷éXÓ“ï°®áÂA‡·/'}qãÍU¼õ¯?ó§¿>Á³3ç³tsk¯MEî)ƹ ¬­ õò}¼A„=±/µZëNß·»×:Z®«ÿz#SGïAAAAº‡Ãz°e&hnhCëBFïf èHb#ÁæòN_ÏXgëzÞê!æ¼8€ \ÇõÿóuøéXȉ©cúàK$0 ãk[ÔŤŠÎû‰ rûäá-=Ÿïþò¬d‡ŽŸÚÉ:¿«wS·²vîF®üÒI x÷FN)bý+ëaée<¹”bìhKߨ 5R9”äx ©ý¦æ{o a¦ß@cÈÑÅm€E¨±™ÔmuÕ3æ©ó¦qñ]pÅöyüûé×XRÛmg”™0ÁãϨ*PÆIŸMY廼¾¸&=Š8kcFXûÒVÚ, u KV1úŒ1”,©eG”LJaÅ1å\¢Ð‹xûÍQ¼ó§ìˆDˆËKñ¨“9íä£Rä'^·’·_›ÃÆ6 Œ|FM=‹ŽHqž®fé[¯± "‚ö—sÁuSiœ·–’ObTö^zâª<òdŽ5ˆ¢,hÛø6Ͻ¹ÏБ´ÕS4ù n:ryÞÛ>x™×—&§HAJ:êÕZÓÜÜ|Òì?………»Œø•QÀ‚ ‚ ‚ ‚ ½ÃaÝœ0#˜Á hX½ªó) ÍDˆxxï&Kµ"5,ë&N¾•£dS9æV®·˜ß>ôg6…}Ïúß?©ƒ7j¥AéÎ[ONNGªZ„v†ˆWÏã_¼KÙîå¬ôÃÐúy¬Íú §k2,g ÏmŽ K]ËšAÂ~Šó<©§ŒœrѲWœqêÑŠÐÔ’ »$ØÀF%9Á¦HzÙv',u´†¥¯ý™e3K™øå;¸ñæ6*~þjÚgw•1ÚÔ‚™SJžvÆ@qâÅçP^ý>o.®&nxðh3ÞJC4—!ÃJYÝTKÔS@ùÈ~-´‡“]’Ú@°Óm B`&°üƒ8zÜ@jWVJÕ?E¾ÀåÇùàõ¿ñZk)§\{9§Œÿ„- 01i«\ÆÌß 1VÈ W_ËÄQÅ,¬¨F•Ž¢<¯Âò¼öwÞ ÅIø†ræ•çÓgý;¼öWhõRäi¡\ŽÕ¯¿™æå¯ñ·-ÊΞÎÇ %oy=M½5 YAØ+ö4úµ_¿~½”¤{¨­­íô5éAAAAèyë rM3Q{Ì›êä?tœD4¶ÇõyûŒc‘(Èò`øò|Ì)Œòײ¡^“•Ÿ‘fZ¢#“OØIïz‚¦ê…cÇ1 Kad—3ùÜÑ®©Š-"­QŒÂAû@)MóšØR|M*#ÏkàÍ.fðˆÁäµÛ{:¼‘V{™|õ9>YÀ¶öEŠmgÁÒ Gž7•¡9Ê[ĸ³¦R²ýCV7Y`Ei‹(ò–àW ¥Âlš» 5ñ|& ÈB)?ýŽ;—ãüëø`c'ÓËz vä ò½ h¦fG+–×gçù⛩SýVl[ ”ŸÈÄ>Yu×Þô5¾ö5ûßµSàMÔ²hÖbZG\Àõ7ßÂ-_ý“ŸñλëìÁ*›à WTÐ&^B/’¨ûˆ×ßßDîIWðõ¯_Å™c‹ñFþXΞRÄÚ™ïóiC +ÑFKÔBÉà Qµq ¡ZƒGÅi¬lÆÄKÉÈ¡dÕ-fÖœ•T¶D‰'< <ùlFµÌã­7±3j’5Rßš@ebtߟ½ý+kÃXÚ¢;ë ɱ ‚pHq8L‰|8”AAAAáPä°lêžx´fì˜1/hmÁŒ÷¸>#wgN¿‰#‹³M¸öS>øûŸ™[ÂøÏk¬¸õ‹üßÃ_$¼c%oÏ^Hý)­%ƶYÏ1ÿæ«ùî¯.&Þ´™ÞyʃÔÔ-z‹¥']ÃÝ¿>‹-¯?Äog}Äßÿ”ÇUWÞÉ×eQv,û7ügm뎲uþrZOË⪈Ó~ÇØòêc<ÿåk¹åþiä1ÖÍåïý€z ÕoÍçÌ›îäÁk™óû_ðšgy|æU\ý­_ð•EdÇ*ÞùÓ –·tÒ›¤rqî­Ü1®¿¶×}ÊÛO¿OõæžÕ¡í|²u gŒÈ¢Û ¯™?­ßÍjWòî‹+;|É(8‚£ú´ðéÜ™òVè]tŒÚ•ïðÌšrâ¸äÜói¬|m£Ž¡Ì_ÀÀËoáh  ðx"|6·ÓÈaÐÑ'rܨä{4Ú›O¿ÂFÞ« £=}1,‹ê…ŸÒäŒ&öâ˜Q>¶ÎÜD[»óêcèúŒ*“3x‹9¢ÜCͼZö|‰‹ ‚Гìîž¹]]öP¤£¿–ÑÁ‚ ‚ ‚ ‚ ݃*,,Ô¹¹¹:Gà M×u5˶œÀ¢ew¸Lß¾}y⟘ó§QTyÏêå„‚#o |ñ(jßz™ë÷±ëVåý@¢ IDAT0âœ/qBð]þ½ Z:½‚Á ÝÙε¶¶âóùv»Œ§ï)\Å@þóu¢çÝÄéõ/ðä¼Úv%ø0õj.¼ž7^[Äö ¦è¸«¹vÌjf<³œ¶Â¸æêá,{òyVµ&ï^:™ë¯Êâ>ËêŒà,†]|#ç„_åŸïU<}&s핃XôÄK¬ > ‚ ‡"ûÚÜÜÜ|HN]XX˜ú½£NÝÎ:z¥XAAAa߉Çãäççî#€#øQøùl¢ñÎîñ[χ ¶a%æã¡~¬¶µÌz©†Üýê§JP·øU^ni‘Î_¡÷ð0tXm5µì ™d• ã¸3Çc­~“MA“¾a“œåôÉn .æ%·¸„@puñRÆŽ)¢uɧT!¿|gŸÜ‡–Å[i³ ò†Ž$¿i Û]·ÚŒ“ðäS>¨€uÃø ñëi¢/£YlŸÙ@ƒ‚áG׸œÊtþ ‚ *N£dd¯ ‚ ‚ ‚ BïrXvyj­±, ¬fмuÌz|OïèKkb!‰DÇ#'¨ ‰`Íû³£µIº~…ÞEú3zÊÙŒ)ök®dýŠ×yþ“*¢@õ‚÷Ysáé\uó)@œ–Ê•¼ÿf ˜-lÛÚÄøS§sÛñõl]½†Æ–Fª7·`ª\ÊGѺ~kƽ¬­¦ÕÌ]2”sϿۄw,ç­—ç,E¹QÅ;µÉúoä1ddMk·#ƒAAAAAáóÃa=´ ˜) AÁMW§€nÿû.S@{qé?㤷¿ËgÕáÜ"ÞÓÿbîÿÅ©ÌûÞxc‡É¤ýаëÔÎ2´ ‚ ‚ ‚ B÷ãLmè ‚ ‚ ‚ðyäpœî¹«|žË.‚ ‚ ‚ ‚ÐÓ–S@ ‚ ô$†!×΂ 1*À³¿Êm—OfHžÙ¼‘÷þòO.k£è„k¸íÊÉ9 ¼žÕ3ÿÊ^XI‹¥ 9‡¯Ýv)ã‹°ª^çÞ{ža‹Ìé7ÜÊUS‡“oÖ³êÍ¿òØK+i>°ƒAAAANÿÅç¢cøðáÜrË­þAؤXA8˜Qy¸îš±¬ûÝí\ýW¹ãÌÙØ†…IÛöÕÌúÓ=Ü6}:·=ø1ý¦ÝÈye>ðôã¬Û¾BÙ‡?ç[߸•;ÿ´ŠPÍ«ÜóƒgØËâˆ+ïâúòe<ü¸éî—ˆóßÜ|B!2a³ ‚ ‚ ‚ ÂÁƒÓqXÎòN Ô{ű>˜;ýdžtø³,ðmb*D]øñY„C¹?¡ ‚p0£c;©jËgÜÉÇ1¬b›+ÖÓ’|-V³”k’7/a]p*ýó=à+划ÖÖÓ&Í?£¥d<²`›Ê“ Y÷·Y¬o5Ñ­‹˜µf:ß>uÙ-#tÀJ*‚ ‚ ‚ ‚ ¸qú/ëàRï9ÜyÃ] ž²”½ù7î~ðküó•¿füüÇ+å±á¹gaÆGÒ,žQJɽ A„F‡AÉk“4@t=Oýø·\xåå|ï÷×R÷Ásüõ©÷Ù2(>úb®ºä$†çAÌ 0(ÏÃ2€xëê²9}Ü@²6TR4z…;׳# øòé—ïgܿ篦†Ï‡µ6Ÿr6*‚ ‚ ‚ ‚ h ãsЬ5deCت£(O}¨j—ŸÅ|šãq²³}ûµ-O¿ó¸û÷£_³ Éê¦üöî;>Š¢ àøo¯¦÷¡Wi H¥ƒAé "¨(UQ ÅW”"EªÒ{“@:¡¥÷Ë%×öý# %¤ 9ÂóåsŸ#w{»s7³³³óìÌæžb,NÃöMÐï\Êæd´>•iØ´>º &…rbç&vKGxö¥Çˆ\·œ}¶ûžN! 777’““±Û寇B!î3{1&ð,ꉖÒD:¯¢xª ĘSÛ¡ÖÈC¬øæ«<ÊËï cx§†- ¤ßÐ6¤ÌͨíaXòöŒ·ÓÖÎÆÙËxjÂ'|Õ$œøè,˜±œ+ I$2!‰½ßaÆQs|m!„B!„B‘=­V‹‹‹ v»½p€*„ÆCïæÍxªÉ34iÞô¶ç¿ª˜-¹Y£Ž€Úíx½íSTò7€j&òÔ~þq5!ùôrGGÀ㨘x€Å—’Qµ~Ôjõ4Å.¯ç·•× è Z·lEèeŠ=îc5hßèQN/;DĪ…xà TUÅbÉUÅ!D®äÅÔâ22]ç”Ù¾™ñµ›ÿÎv_Vã þç®=»óRðlV‹„€ÇhÛýôG¾åx‚ŠÆ£4•9w!š”„0®D[Ñuh xè¬DD'bÃHñú-©î¦á(z‚4Áÿà—|8û‰;6›#mDñE6ïIâýWZóèµUœˆQñ(Zš"Ö‹œ‰°d:X«Õ^ÿÿÍõ[ƺ.³ºOnµ „B!„¢0¹×ó\éó¹e00ô˜Í…<¬ªp)ÁŠªªÎt™€€âRJ˜‹8ŽÆ÷ ÞèV„%3u Õ#Eì„Y xç3Q³² W6] Q­w*zDrðÐeL6.âßÈ*Ô©èÃÑýÑÄ:BdízT8ÆŽp,Ä2›Í¸ººâééYÐIN$ç†ÜÃÑP“À·Ê,°›ÝsêÕë¯EGGgX£ƒè³˜âÑn='ÑÖG–HNnÿ™‰ ö§‚Ö¥4ͼÉGA.(Žd"Nnâ§ßOcŽ½Ê‚Õ ðþlÙb8½i)«N—¥LÚš­±±¸·ÊÌúi/˜Ï³þÛÏùå`§LeÞë½èóùKøéÀwšµ_Æ™ˆÌѾ¾>@z  (7ꇜž3þ_!„B!„¸[Gð4çsè‡ãw‹³9uö¶Bv¨B#ô8Há‘*•³\.Þb!)9çŸB눷zMÿ†gVÁ|‘øˆ´÷ÐQä©î|Ô¤A®6"üÅœŸ7q)E4xU}Ž×_iJµ".8â/°gÕo,Ù} ‹êBÕ>ãè¹SÅëR¥ˆö6ÿö?ÖN$§Aº:¿ò׆³-<%5-¸Y£‰KL«â"Sp+ê…–hìæ«œ‹uå±2^hã‘Il…¸sf³ùzE*„Bd'·£}s? 8‘Ók¿eÌÚo3}Û¹YïmgÖmïÄsláx,¼ùµM€‚WA|ôì%¦¿ýG£- õ |»±Œ~¥>k¯'Âr•íó&°}^vßô¦-Å'YuïtT°B!„B!„ȽBÆñTUåXpæ#€1Ù<0'»æ¸:køaÅ6¥Cçf˜ÿÜÆ‘¦¼Ó§®ß:¾5÷Z¼ñAw:Ö9Èô±à÷={=Eô‚) ?®L ú @‡ˆOXtÀ@±'˱vÒgü«àW¿#z¾Ìùñ?sҜݕ F? I—‰³¦½¢Ó£Ø­Ø¯LÅfµ£èõ©j5™¨h îE¼Ð!`!„Bˆ‡›÷¥p7Ÿ"º _§Nq='Ïf7?µ‚ÞE63Öô¿V ­rc­^‹jµ¦&V±%ÛP|©ËÈÈ!„Bˆ¡(ÊõѾ7ÿÿþ²¶q.Ë+¼Éè¯Û£Ø($zt5_þt˜Äæ5ó¨Vl)ÙM³œJç_‹áeÔ¢Ñ{P²VC1„s&2§0ªƒøÛ9çñ-óC¯(¸”l@Ë*Žì¼Lú–µ•Zа´+Å•Ò [P.ù8û¯ZsL—5ú<JÊú¦Åóqÿ½«E›Ñå­·èÚ¢8á;Öq02-˜l¤œŸÐ ±B!„B!„B!„¢)Ô#€íjZ«T•ªUªd½ ãv«)ÇõiÜËÓôžTô5*æðlŸû[#ìP$ûÏ:bö2ï'_^ïø!Ÿ÷4¢š®p`ùw,9mFŰ“xò"Å;aZIˆ9Áú9Ë8mÎyê?5éG.>E“êAì »D `?Ãö?ϰý¶¥ÜJ?F ëiV‡æôB!„y+ãôÎYÝ8} åðððûŸÈ{”Õ=3N -ÓD !„B!„Bä=ÅÛÛ[uww/ètä ]Ò‹èù÷B=öþ»?Óeùyþ¶|ÿWuÍîs Ó¹PµÏ'tKü†q¿ãn²*<×þQÂ×üÉþìF$ŠóôËM1îZÊÆ æ,¦¬¢p1™LäU=—˜˜(ÕB!îJv÷ôÍê½;}ýN—ÉNnŽwY-s§¯çv{B!„B!„UUñðð¸£ÏòÀÉèm)|:y3)Ö¬îñÉ®!8l%è_Ñx’õKCqÏ¡ŸOQã9¶z) qüân(Š’gÁd!2JIIÁh4t2D!&e¬àd Æfœ½ùµœ–ÏÍúòCN#x³û;³¯ŒBˆûGÚÎEòùH~ˆŒ¤L8Éç"ùá\$?œK~å‡É”ó,Æ=À!Ϭ©ªŠÃáG>ºÖ—Ó'I°íÁf³¡ÕjØŽ'›)–¸–Q­‰Äæ´"[÷«“]<|TU•ò%ò•”±‚“SÀ7«×î%ð›#€3NO}'gLOf¯ !„È?Òp.’ÎEòCd$e¹H~8Éç"ùá\œ)? eXQ´Z-xîå{s÷!ÐØÏ‘̉ï‡óQm]!„Bܹ €fw¿àô¿!ó`o~\Ô˜W£xÔ .…B!„B!…2,„B!ă(7#e3 úf ¨æÕÕ¦wzÏÞܾ&„B!„B!ò€…â9Ë¢ðq¦)BDá$e¬`Ýét͹}-7ïÝ­Ü™³ JßɈe)ŸB‘¤à\$?œ‹ä‡ÈHÊ„s‘üp.’ÎEòù8S~h]\\Æ †‚NG¾*W®;v":::Óçt…ùÈjµ’WõœÕjE§“kgDþ°Ûí©·0"ŸH+Xw¼Í꽂>¡Èjd¯ŒøBç$íç"ùá\$?DFR&œ‹ä‡s‘üp.’Î%¿òÃf³ÝqŒ£PG1ŒºèZàkñÇcÀ×R:Óç.ïbQ’ˆ0WÐIB!„¡ìF¿fõÞÍÖû Î)¸{§SF !„B!„Bˆ¼W¨G3taH÷a<÷¦ƒÝgV0hðóì8uëóöS+ûæ'¤D6æÈå/ :ÉBˆ|×#€åŠª›ëcïñËŒ†ü·jaÖ‚Nͭ䊽{àÞ€)|B©=ñoŒ=7d |Ÿ˜×9œ.aÉÇ-e%}*™» øIs9åݽ¾·ËÞìN‚µ÷¾Óm‰;`x„¾?|C›ˆul¹”Âm%ÁX™ó¤í¥•l¼Rµ™â~+<íßæ_°hd;W!6›~º’øîoa^»Žsæü»ÀªðäGá ùq37êŒ]Ä´ZGYµ;[A'§€H™¸ 9µ?ïäGf ®Bòù<°ù‘uFAʯü°Ûí2øfª FW0;"ðqñ$2éêmϾ.žÄY­¸ºêó/!Š’ÍzÑ÷Åjø¨l™1™Åçï¬JVŒÅiؾ úKÙ’ŒÖ§2 ›Öç‘@Ô¤PNìÜÄ®s àñϾô‘ë–³/âam¢ ñr­Í˜…i~ °Çséðþœÿ3kN%æêêR¶)Ï÷ò÷¦»8àjñyôEztoÇÓÕ‹á¦Ø1EœaÇÜO™¹),oOµþÔnñWþÙE˜TswGñ¡é´¼_5ý Ñç²qñ<~Û|‘Üôs)žÕhY7Í›îô$ÃH•Asù¬ô×¼öþNLé/*ÑwÎ<òC†o‰Ï×Fßݧ½à©ªJéÒ¥0`³fÍâÒ¥K<{åt¯ÛܼŸ.§o~•Ü®W‚¿ùÉ:cðÉ“™gjç1¬ûa&n'ÒŽërüBäCåþÌý²-æßßfÐÜÓ$§½n¬ú6?uaj©1ç´ÅžjF±ÿp(_/æÙ2VfàÜ/iã›É{!sxkà\‘cˆÓRÜë2bþªÿó½¾ý”\Rö¿;¢øÐtÚÏt?ú}æž»~N©/Ûïg<ί݇òwLœÑfìçpd\Ç‘ì1eù©û+cûÒzùÖö§ÓÓQâÕoø¶ÉJÞz{%áéÅßåQ†Íçg]·?é·‘C›ýµálŠ{0~-ç§àZöYú éJ³*þè°q/ >Ÿ´ÞŸÂ$›| yÐêŒ<’±_V5zl ¿ù‘õÌyú[ê°C…ÐxèݼO5y€&Í›Þö¼ñWs~ÖÆò<÷\9Bæ~ÈØ£)h°bªËã†`ö^ÌM†êx¼°øR2ªÖZ­ž¦Øåõü¶ò=Aë–­¨½ŒC±gØu¬í=Êée‡ˆuäã÷B8{ßïÎgGSpñ¯@ý—ú1dú4оûóþË¡®Q|¨Û£/mgã&îì”OÁ«Î¾ú¤)‘KfòÑ縔¨§XÕêø]ŠÎó«… e^ ßA|½õî:°ªE¶¬„ýþ}æžÇîV„*:1èÝTóĈ¥—È~p´–"úЧÑïìxà‚¨÷šö‚+AªªâççGß¾}ñòò¢_¿~L›6˜˜˜K“È?éÑ; ðæ×TÐw¨•ÀîýÄÁñíi£QÀåQ†ÎïônŒÙgTvê®í×—¾×ã§BdÇá°Püåwé°i¿]¸ó–âVN};’ðñæ\ TU•Æ}^Kùoº¶á;ôe»ñí—µù£×0ÖE9@u`—>&'¦à]§µR.¢>ÝŽê?Oå`.ƒ„w³ÿ‰ûÄžÀ¦{0íhÚ¥5ª‡퇷µ/Õ$.ÜÔþs›ý^dr¼…®í?H­ãÓüñ>¢u~”,_”xg›þïa“]¾¨–‡¸Î¸Ñ/«ø=BóãygL<§úÎç|ÙBVU¸”`EUU‚gºL@@q)%HÌÇÞkÅà…·.‘áf;Å“Zí^¦ñ‰sìËMØDÍÊ.\ÙtD´Þ¨èÉÁC—1ÙT¸|ˆ#«P§¢G÷GwꑵëQ=à;Â¥wGˆ¼v¿î³xGÒû>TUµcŽ<ÅæŸ>ÆR|.õ~†ï­#ÊX‘ï¾ÃKµËè®n ó&ÅêK®Ôð ï>áëã_ókÇK¬ý¿œ7PµÃ†¾þ ¥ÝÍ\Þù+Ÿ±„“‰¾¿¾ mû¿€a݇Œùñ_Òß>»o gŒU4û]L³—УÍ‹btç±ì·—¡Õ€áôjQ /[8—|Åg¿ ÆúÏ2xXgT*ЧÎÌ•Ý øìóÅœõoϨ;SÊOaܼlj=üC&íÂ\äz ïGëÇüÑÄgÕ7Søq[V@ãU“×ß—Žu‹Bôq6mMâҦнŸ™”³»Ö÷.¶”¾ATÕÍʱ5_3F)ÍœÞoRkÝö&jhØ›á=šR­„7k8‡–}Åäù‡16ÆÄ~•q׽ǜñœþù}ƬŽÀ«N† z™ºAÎþÍOSg±îbr†ãœšö·šºýÛ’”š/>Í¿àǶXt±Í ÂÏÃÄáß>cúòÓ$©€.€§zŽ`P»Gñµ„òï†=¸©ŽÔõ«y™v·Jíú~wž)¥'þìþ¹¢»=ý÷‹‹ ƒ ÂÇLJ„„|}}4hS§N%999çp?˘È;Í‹‚Ì»ÜlûNïIœÓHg‘3Uµ§vÚl8ÕnÃfKkÿ«0h|q¡ÏÞ~üœ“¾’Ô|P~$ÏñÂ1õgZDngâ™Kɺ^RUP\ÊÐæ£Ù4y¢4–Kl›?õz[1Ëm¥·ôÅž¡çÐÞ¼P³Æ”0ÿõ#Óçn#Ôšžî´¶žÆŸ&#f2ÐíWÞ·Š+yØ!ç¬í2ÕžzLQlTTì66›Å5‹óÉ@OP³ŒèÑ€¢nÞø¸§¶ ¢7~@Ÿ tü`íjÅHWvÿ„IK¹‹ëò•³æG®iy²í#„ü:‰/~D»Z^܇ *õaΙõÚûì2Š­¾œO§=é»Ì®·í?¥žµy֦ǔy®FúøÿXõÕ¾Û‰ì÷!]ÉN|=©$¿ÎIâÕAí¨tù º]OÔöóf]&n>Ÿ¾qN˜úÿ´º#ËsÒĪ®”k=˜÷ÞhBy/ ¶˜“¬ùòc¾Ýƒ#ÃfT@µÙo´ïÒèJvbֵضÆLý§ÊáïëIòÑ|:u)§Í*(žTk?ˆ¯5¢‚—‚%t+Ó†Mf‡ë«·æÍ•ŸøYÓ{Ó÷—‹©ð{Ôeä¼p|Úƒï|&dy^n-Õ!ÓöåsRÛŸ#÷𲝋UôÃGx®Û…GÃ:”ôóÃ5v7?Mø’u™Üž$öÑ›óì¦>¢ô|M{=«>ª“&­o=ºçPÇe×fÏn_º]NýZ|ë¼ÎÐí©W {ôIþžÿ%ß­¿@rÿtNYgê¼)émæø¦Ýœ1‰ÄE„€¶m¿úžv{³.ç?µ?ÂÒš4ª€¯·ÊÙåÓ˜ôó!âU²ÜŸ¶D9ÏÕN™é²Ê¸åœuä~šù‚>UŒ€ƒ·nÿMãõ¡ˆæÁ:WÍ9?ní—M‰:ÉÆUGxëã øëTÎY´øfÒO¹âtîçöH§¹»¯ð`p¨B#ô8Py¤JåL~þÄ[,$%çb‡ÕP·Ó»Lür&3gÎ`ʈ7¨ïŸ:—·Îÿq:¼ý1ÓfÎdæ´y»C-üu +ö ]û¼DY] Ïý„q½RïÕt­îA©—>`â„wy¾DöÓOëüÊS\ΙðÔ Özàf&Î’^P,ÄE¦àVÔ - š¯r.Ö•ReRÿB<¤Ô8Žþ}*5 ¬ ¨–(Nn™ËÈîíxþÅÞ̉kH¿>uð$–}ßMâ·+ç~Èë]†òË9+^õóqgwþz¯mÚg­O7Æö­‰{†A]Z¿š4(Ãö5ÇÉò¸«/M»·j<­':Nä É…Ê=ÆÓ¿Ü>~­ mûÿ‚åÅ‘¼û´/ `‹=Ãîß?¡wûhÓõsNW“M±‡,eÒ»HJØÄØî¯Ñcâ.âµ¥é0v8Oœÿ’7_lÃ_]âé÷FÒ:HŠuŽ¢£û*†½üíûýDDõÇñ’Ê1v"÷o₱*õK;ñ±bÚ@^yá^¹ƒ ŽƒhWZ!ìïéLù+ ëÑ©ô|í F®…À|0êyÿןvm:1þ@ŽíLù»¾ý¶‚{åç)ºy<ý{v¡ë{ë(Úc$]* þM‡ó~+óû¶ã…ŽÃX¦>AEcz³&Ón|„7F¿EÙ=ãèÔº-oN ¦ÌþäÍ]ÅsÏ`00lØ0Š-Ê… 5j/^¤X±b 6,Ïîs.U›þpw›&gúkfÇÏ[ŽÙJ®ûB‘E§rbÞ ¶{ƒwž-–ÉhWª¿õ ýÊîá“×[ó|»Ì‹ŽQ#Ÿ§˜å$óÇËqk8KÞïFç¾39–œs½¤÷¯MÀî tmÓšNãöPî­QimÅl¶¥ôeé4þ=ž87ƒž/>O›ž_qºî0Æ¿Vî–6žCqå‘ÎãTúÆúWžDYžO* ø>ÃÁµ žÜ“ίtbìÆ¢×¿G¯©'(Úa íô‹è÷âó´îП)¿ïÊ"°!î….¨1mKŸfåÎclüëÕ^zÿÜôúš3ÛÿtøÔ«MôÜ´¾Cþ4ð .T6’«}HS¤½šFðãÀWèðÁF¢³>euNªGñ¬KßÞ58>±#Ï?ß–®#¾gÝÉxî4”¤ñzœ¦š%|ا]ºçà#o2°±?| e|7¶MèJ»_¡÷ǧ¨„¢ IDAT¿p0&u ·äÍû²~Ù üZ4§LZæyTy–ZÖݬ:n"»óòœÛ—9ÔÅú"<óD? íM÷ν˜qõ úõ®‡“µ?³ê£Ò` ì½Ôq¹<]—Cÿ„¶èsŒõ‰?ä¥ç[Óyü.J÷û„>ºâd?iþH¾ÀÆý6êÏ Õý1¤i{Ûÿ̾œ»UlEÑ­Ó¿GWº [‹ÿ«ƒy±”rØŸD.d•/9¢Ø8®;¯½ößšÄæÈö­ü—8µ°Ÿ«*|«Ðò¥¨Ç¶r!´YôSÞBÆñTUåXpp¦°ðpL¶D̹¸ ÆX®5¯ÔŽç1CxûL[´•ÿbí +N«~ݨ~y†¾Í;ãRµýZ•@ ÝÆ/ß/ç‚-‚µ_ŒbÜ;Ø·dkCm\ùs #GÁšlÏ"Œ>~’"ˆK[LÑéQìVnÌ¡b³ÚQôúÔ€¯šLT´÷"^…{ˆ·D½~e s= íÚÅ›^³&ĬóÄ]ª-šcÛös1Á†ÃÊÁ—Á¿îÊMW%]ÿ¬UÛ<ºóWÖž5aM:Ëúgð|¢1eô·nCãî‡ϵ8[ÖéÓ¨\[1µ'#1™S°Êólc‚üIpœ•”Ë[Y~H¡F‹J¸ª*ŽÄ3ìØuš«käa¶^°ãSÌíÍß5íÿÚâÏЪô%ÿ¾ŸH‹•ȃ«Ø_žf5½QŒåhZ[Ï¡…«9•hÇÌŠßbS7ïÛ#½ÄÜôšÝE®x»¦ŽÊK¹¼‹Ç#Hq؉?½“à‚¼µ¨×Gœ§ÿŽ >uZS=v- ·^!ÙÇñµë¸Zôiž,¦Í´¬’1P¹Q ÓÒ³‹ Çâp¨*)!›YÀSO¡Ã*ͪ’¼m!›.%ã°Dr`ÙrÎÛo|6¯Ò®/Ñ~çX¼ì0±6;¦³ëY´Ë„ý>—¡š5kHXX3gÎÄb±0cÆ BCC  V­Z_¦äqW»=¶ÜÏãT^nËÙ¥ò#c®ªjꨑ ¿æïçþ¸/yÈC¨ hõ¿—ï¿>@Ùžiä¯A½¹mg,ϳO»sø×ÇÙp¤\cçÂåDT~'4©ë¹¥ŽÊ¹^rÄïàÍ!˜6b,gùEÿÔ¶bÛÒ•hLó ó,Z¼ŸH‹käA/ªŠåð"VÃæ0q~÷>"=J`$Wû¢F±íçåM )ÙŠ£À£<~ §h§Y,[µŠUi?¿íL>çsRGJ—¼¨ÙøI*xÚ‰¹ÌéØÌûSÐxÒlÊ"–/_ÎòåËY4±~éçÎöËü½þ$ GâYö_V (ã‹Nu§ê u°o˲#‘$[=w‘x{fyc!jß2þuoB˲TÕÊ­j’²ã/þKJMC–çåY”õê};§WýÃ…dª#–ÿ†¢-VOÍýËKTÐWÈü7òrÕ’Ïi饽ÞG–uÕ×q7·ÙsÞ—n}dß?¡àWç9*GýÅ‚íWIv؈?±’_ºñÌ 1ô>s?Ž8öN„Œ¼0îÏOÏgJ`ÀAtŽå|'ŒÆ¦ª¤\=Â)“7eýt¨ÙîOò¸·|I{ÿ¶:ÄGßÊ3!ß3cS¶Âz®Šž¢¾aÅÚ5¬X0Ö‘³ywÂÂmY÷SÞB´c'Ú…ŠÏõ '3r¨’¬ñ$á•óúÈ74äñZ帰ëáç/ +^›zWY·ñ±6âþcã†+4n]—¢®påž¾…‚ÞE63Öô›Õ‚C£G«ÜXF«×¢Z­iW‹©Ø’m(¾ÆÔeº«ì„È_ªê„;•zýŒî¦ô)è}pI‰&.Å.åiÙýMÚÔ Â`µ¢ñ«€!nCÚAGM[EÚAHãF€Ÿ+ÞOLáÆvT@ÑÑ™£1**7ÿ6S4&ÅwM濪‚j!új<¶ô÷u^÷6Rsäo,·©€‚Ö`À~Ô*– gx½g”qÅnÏò”SéÉÔt’ö­WÞºŠ žó'}U z#œ÷0¢hÜñw5s)Ö’–6•”ØH’\ÿ¼3QoÉ¿|ÝRêw¿ÞèH¥õ(‚‰œM°£ªZüë¼B¯×SÉ ,WJyiÙ“žÆ›Ë <‹y¡êÌÌ%REŠ£&OcÆr¡¢:n:é¹ñrê“ãÆësæ´“Tìfb’ÀÍß ’„¯—–ÄéeJlña$ØÓËEÞ¥]côÇÍC¤É‘V^l$D$b÷Ïþ|¶k×.‚‚‚غu+III$&&2cÆ 5jÄÎ;Ñhr¾®ïþ•1q/œ-î5=w:5´¸ ××›öñ ¯e<~Þò¾âžëã¾âÁ•_íUUAQAµ½ý¾{öú÷kÀ±%V¸¤Ö;ZOЏ%s)Îr= ¶ø0OŠzhP“àF¥BNç#€ÝI¢-½­h""1­­˜Ã¶4®xØc‰ºÞ¾S1GGaõ(z=è€Ë£ôúð¥\K°åÛïæÌÇÅô´¥§SqÍú|Òq’‹Ž§©[Ñ}G T­[”¤3g‰±Ù0¯Ë»önôzû{^W±xÖWü²'g»a™³çG¶\*Ò¦U^¾cY´ÊŽªhÑi[–bù¼s··Ò©™µÒCÃÌQñXÓÏÍì6hШ*\ìC¶X®ÄXÜߔ지VU‘+Ç2|áÒ‡õèKwä³ •ÓúW²9'5göÐñtèñ&Ÿ.è˵¿çðåw«9cʰ-U‡‰íòupÚ-l&b*ZUG1&{Z8*( *®øùhI8w=ÿnþNóFû—e»u|ð\æ^vãÙšIlþè ɪŠ+Ùœ—çԾ̩ÞVAµ‘›Œ#­Ü9 (šLûkògMëO™ÏðQë‰H¿¶± ýf¼w=@e(žU•°;©ã2´Ï³Ý—´¾42—µ\+̰ƒÙõOhp/≒FBú±+ñáI¸VòN Øçå/ç¬ufJ(»Èî…3©Ô¼~0¢É=™´'§rCRz9Wí8PРf»?9§ÍtYåË¡Œç± nÕ»1´ÙU~êÿ7a¶\´ ðkçœ*ªj%lá`zÍ7Ñbòôp‰#2ɪê³ì§¼…:ì°Ûˆ‹JDU½©\¥r–Ë%ÛÎbŠ+•ãúl×60s–™6mz2®mGÖ.â÷g°¸ùâæH >ùFM‰Ãæê‡{Œ±¶Ûì 5\Ï,[B&Ci¼ JêN èñö7’‘˜vpI c·âpÂ@qŸhx²MUìÁŸq>Ù@…ÞãZ3Žà Å_ù†ZÞXü–êBM"*ÖLä²÷éñídw‡{ô1þêGÃ&e™{ê?²ºé-ë·ÅŸÈ¶É]™p éÖuÅyyô‡<{êcõßC”Ý›ÆÓ~£OækžN|Ê1¾î6Œ±*=W¢’]ðóÐ)€‚ÎÓWMl6ßèa¥§dãç(—xˆï.§ ø6åýqIž1ˆ_ÅâR›Ñ¿Êâ³vð\\Ißþp%ÛÞ; &¨Qo$¦-«ü(îžBT¼åF@Ú«ZÀ h=)榣&ì31 vÜü=Ð6@ãî‡[Ú4RŠï3y–vCÅ(’´ÅñqQH½ù°7?÷û~‹FÃ’%KÐh4׃iТŒ%KÐje^óÂ$=ú.dšgg“Myºƒã¾BdËÁ¦™?ñüìAô:µkzgº-žP“ ^zH«e´žEñ$°;·ÕQÙÖK ¾€Ö=÷ëmEŠx¦µmJ¶Û²[CIЖÂß-½}§àêç>1˜„´ô*¶‹Ìô)ê;ÓÑk7ý¿>”õín *tËú|RÙÁŒïZ2û³_hx5šèÓ0aöQÌj"§×}ˈõó)ûì0>ý×ÞƺH™>3o(x<öO«ÛsgRR_s{l _¼ÕšJ grFµã@ƒ6½RëA€ûÍç™î¬Ú¢öøœ÷¡¬×ZX¤Î Aú­^õ&li_:§sRKØ^NÞËâjóÆÄ |ÒëÝgœÈ¤ æ %.†èhs©ÈìE3±ñv<ŠÜ8_ÎþsfN®Ø‚}ÜóÔÜo¤FÂF>¸`´Iƒ³S­ DEDÜ»%Ù®¦N­¬+΋ÙõQÝC—í¾d‹áø¤^tѧŽî²'Å’”]ÿ„øÐ8TÏ¢xj!ڠëˆÉqœé#<,»- «9«ÅÍì$œÙ‚/G3òëÝx>×—ÎUÝPMQ˜4žx»¤W F/otæLYÔõ¹?¸9H‰Çî€GZØŽ“±~ÔªY7·â5©]$‰3gb°(z¼|$G'J¥$ÄCHÑñ)S‡—†Májçøå‡ÝĨZÜ|Ý )гŠÖ§:ϵ*Ëõ;ÛÍÄ&)ø”-ŠQQPH$xå>ô-Þ u5?ŒZnåx´ŠßíW¥œeé¼}x½ò1v¬G_WŒ®Þ-_ŠÞY¥’ϲf³‰ºo¾Jí¢®hu.ø–ªFµ¢F ÞZ’££H´+¸WlE»GnÜ+ÝaŽ%Ùµ8%=µ (X/obÃÕ tíÚ’î:´F/Š?RÒî $ŸcÓA¿Ú‚². Š[ž{¥z‰IÜ èpõ¯@ƒÎ#ù´Göý0ŸcI 1x᥷J5jËã×; ì$ÅšÑø—'Њ¢µo'ÛÓ­Yy¼õZôE¨P½·¡;Öq¡Dg¶¯I1#.¾hÞ§uM[XuêÆñXãÑŽMKaT´x×|‰v¥#Ù±óV5‘“ÿü‡{£l2?o¡ÞÁq_!r`»¶†éÿ‹ a¯V¥7ã“ϰfs<5:·¡²‡E@½WÚPäÌZöFÚQ­‰ÄÛ½(äšzÉE½¤ñjÈ+J¤¶kÇKeÒÚŠ9lËzy3kCJój‡ÇñÕ)h½£Ý«Û´‰K鑇™ØØóü9e.‘-Fпž÷ÃqÿÄ,åp>©õç‰6•9=­?oõéÇ»“ÿàX¼ÐøØc”òÔj&ââLŠƒöáþ5ó”âMöuIÞô'/GADD8wÿÉ>}#^zÔ{ìE"”²4ª€NÑøD{^(y£Kø¶ý/‡MæjzÈewNªñ*OJ¸(`‹»BH¤­Q—Åï® Õ0Òú¬–»‰šHðšC蛼IÛj~t.ø•)OcÖŸL9»šuñµéÚµÑþáÒMÑÂ,ÏËÉ¡}™C]üÀȶêÞê¸ì÷¥ÔìR÷éH¢M¶ú'Äì[E°Ï ¼Ú (EÁ­âs¼V;™kÎd9X£0Q\ËP¿~5Jø¸ Õñ¯Ö’ç+Ú8Ž…ìËy–îb·Ê)_npá‘ÎÃy.f>Ó×^»×zÎU-ç—ñõ/¾ó2å Ž,û)ïFaù2e·[ %}Ll6;¥jÅ–’S EÁX¤AŽË„D&cŽ %2EÁG§` ?ÈîÐf4oúÇVœÂäZÆÍK½ÿw¬€k†U9RHLVð òàÄBöCÕ­Ñç‰Pž¤¬¯ŽKa6pÄü÷6¼š5£Ë[.()‘œÚ±ŽƒéOC åül„Œ•°'Í?_Ns€”HÎø›)ý°%$õÚ¨“¿ÍaÇø>Ìý«/‰!»X´lW[§}Veï/ñò¨Ïù³ùeþü ?ßìžÎÈŸ2dÜoôóÑ@JŒeÌÉè ¶¾aƒloÐïõ˜ý–À}”ßF~ę˙%ÖÌñ?bfŸ¡ ŸÛ…Ø¢³lÒ(N„…°òÇ5<1d+:%úïr-?Ï+iÕxÊÙ?Yx`2ƒ~YMƒ_Ðÿ£u,=—¡}øfÙ\PI8»–é£NbJ`ß×Y6b³V À̆?ÿâR1ÏüÈŒž¢¯}Ǫ×5‰Ð»Y5¦ì K=vDlæ‡ÅM1q)ÏÚ"9¾ú~?^‰Ô憫ÿ–Vï2{åËœœ;„a ×1q¬C}ÎÃ=3—¶Îfôä³ÄeزíÒRF10¨÷(æõöFƒ‰ËÖ2ù½y1¥^õ ` ß͵úcY0¸4ÖËlûa¿žM-ÏÿLejÅ‘ ž÷ï'_ãßU«Ùþ,ö¼L{òIæ}<÷FLfiW…س[Xòç{4¿óGˆÛeT½ß#…%¸û`ºíøùñÅ›ÞU‰Ëõq_!rbãÒò/ø­åw¼˜þZ2'~ɬþÃùxQ|µÉ„ZÁ¤ñ«¸jìÁ,øã,FÿÁ_Ñ[ûÖ'ì˲^ŠDïûGkâ—·Ëãm¿rK[1ÛmÂâqSñþ.?ÿUƒ5’ãë¾d̯gIáÖŽ2Û•U|öã3|ûÞ võù”í1ë¨Usöç“Ø‰ÐRsØ|–K}Åré¾õ5!õz1~J5|u*Ö¸óìüñ þ €‚?NNøí‹ãŸ.Ü:**é$ívðIûÚxŽÞƬ9O3æƒßXýa"!»³x{/¤/kθÿ}‘ýÀ[î÷¡‡Uv礊kyÚ|8˜Æ%]QfÂŽ®fúÜ™è44ùôš¤ÿí8Èè—Gp Û­;ˆÞö9c‚ÞaȤ…ôvëÕ Lú9{³úˆí2ÿ¬‰å¾í–þäìÎ˳o_æPï?(×1[²ë£Òâw/u\ûÒmr蟰Gl`Òø@† žÍŠQ®8âϲùÇQ|{Øä#­ó>€º]ßcTe?Œ€=î;ËÌ-Ñ©ß?›ržµ¬÷§ðB75Ÿd—/ú"7–s­Nçö¥ð _þÖÛå%|øÁ".ösU5‘#?ÏÁ9Ãxûù _žy?e÷ÃÿÝñªoooÕÝÝ=ïí ÉíѺuáßÓ5HHIÊr¹iÓö³}Ne.«Ïd³6jÔý)J¸iP­q\Ü·’ÿ-ÞC¸´~5iÛõež®è‹ÞËùÝ+øuÙ~­*ŠW}ÞýøYŽO™ÈšP; Á£ÚË êÙˆšp¶ÌœÂâóÙ ”nÞ‰&ê&m¼”Ã0w·J/Ðé‰XV/ÚA˜D€…Àd2‘WõœÉd’Ñv"ßX­Vôz}Î z ¾-¾â×nûÐëg.ȱ,ÏHB!^Òp.…'?ܨ>ø[FzÎã½é[¸bVѺ•¦õ¤Y¼zl½~<˃0(´ðä‡È+W™ÐÔþk¾kö}ÞYEêÌ«Îu^þpå‡ó{0ó#³r^8<˜ùQxåW~Øíö;ŽqꋲZkê\î'ŽŸÈt™ÀÀ@Õ†ÃjÍá×PI<¾ˆÉ,Êô]{ôa–Í8̲Ì>¿‡iC÷Üœ2ÿÁäáäò›¤pyÏ^"Û×ç±€kìÌæˆk¢v]Bvl$\:Ì…Èú=…óRUUÊW@UQs˜%CÜ)cB!ÄÃKÚÎ¥Ðä‡b$¨‚?Ö#Wˆ2ÛSÛî.”ôµq9«šÅ}L¡É‘g¦2¡õ«KçW‹phÖVÂl7öYg:/˜òãAð æGVå¼0xó£0s¦ü(Ô`»šŒÞ–§“7“bÍj¦ûHví Áa+éÔ¿†#ñ$ë—†âžC¹QÔxŽ­^JBœ¹PUbB!„B!„Âɨ1ì˜ùõ†ç·6:ìvP,áY;‘I"xX'Íâ +Cç³èõˆÓË?cÔ®8éO…”sñ+”S@«ªŠÃဤ”t{%WŸ‰7'ç2­V+÷5¢Éë) ¥ŽùÅf³¡Ó9ñÕHâ'eL!„xxI;À¹H~8É‘‘” ç"ùá\$?œ‹ä‡sɯüPUU¦€P%õž{¹–õííoåºÂùs!„B!„B!„B!š‚N€B!„B!„B!„Bˆ¼!`!„B!„B!„B!„($Š9Ë•+GË–­Ø°a}¦Ïß?» “(„x€X,–‚N‚(Ĥ|‰ü&eL!„xxI;À¹H~8É‘‘” ç"ùá\$?œ‹ä‡sÉüÐëõwü™B6êj k¯Å{Œ_KéLŸK¸¼‹EI"Âü]A'Yñ°;Ô‚N‚B!„B!„B!wþ-äS@èZ0¤û0†OªA˜f'~Vó¶çPÍN¾ýtÏÖ]ÐÉB!„B!„B!„Bˆ{R¨G«*]ÁìˆÀÇœȤ«·=ûºxgµâêz7ñó“b,NÃöMÐï\ÊæŒÅjÒ¨Q-Êúp˜®q|×föœKÀ(†@mÔ„:å}1ظ|d;›\"I[œf]ÚPÑqíIÿ¹„3å_¤¥çA–ýs“£¾¤B!„B!„B!„¡B=Ø¡Bh<4mÞŒ‘ãFÓ¤yÓLŸã-*æ{œ’ÛT—úe\Qò&éùHGÀ㨘x€}—’Q¥hتºàUÌÿq ·GSªÉ³ÔôÓzŠ=ù,õ<ϲö矘³x/æÊÍiZÉÅzÍÿû‰Ÿ~JÌáç¿Nb2_%$ÎLØ¿»¹Ô€ú%Œý……B‘Cyº}ñ-ÃëzÞUÆ¥jfÏ@5—Oàû©¯PúŽÇ“(x?=Žù_t d¾EÑS¦ÓtæªKÁ´¤rWfïº-„Bˆ\)ô#€/%XQU•àãÁ™.@\J ï%¬xR­ÝË4>qŽ}Í8õÝA AÔ¬ì•MHTAçWê6üIŠR.îg÷•Î4¬ìËá}:*—ÕqyÓ1B“í|žƒGkórµÒ¸Ÿ:N¢Ý~c½Šåj–Çvr%WS®rôŒƒ6—Áýò)LNý£q¯Üʵ ÷ÐîÔº8•ÓŽ`P ­û];4¡Vi/´É¡\5‡ï—'þ¦‘ñß§ùhj[‚Ç}IJkn<Ú¾/oµ©IC2W÷/cö÷«9mRÑxV¢Åk¯ÑúÉʺ؉=³•…ßý­×,·¦¥Æ@¾èÈ´áó8Z¯ª¼8`KífÌÐyœI[\W¢=S§¾L±›>}~ÎFÿEÆûŠ[yž«ê—ÄÍÁ‘¿æòÝÒ#ĦWzj¿:˜Á­ÝøsøG,¿fËá7ÓR´Å¦ö(ʆQÃù弎z£¾ghÕÛ—¼²p8#V†b¿ý-ŒeÚóñ¤—Q~ÆG«Ã°ë|©ñÂë¼Úª.|õX£Ž³þçÙ,Ü•å:œ—‚±D#º÷ëDãò^8bOñÏÿ¾å—ÝØô<Þ¦#í›Ö¦¢¿RÂ9ö÷¯|ÿû"oúùo)_WlÙä•–€zн%U|5$^ØÎÂoç±érÊMǵܗ/­Ï£´îò*­j—ÅÛ`çêŸãµ$k&ß4Óõ(.”x²¯½Øˆe¼Ñ“Ä•«™÷ã ‚ãoŸ^"»2M®öŸ´ß,§eJ=ý*]Ú6¤jQW´ÉG˜>tL¹ÎXça½Ææ_çâz:©ÀÛ/Æ’ ©oü—mgïZ2nÛµŸ?æžçRìýª5R¸°f.ó¬—¸ÇkóVÆò¡õ¥Æ3å¹¶ý9Uó™P<*Ѹ¦‰;®fZ!„(HNz,HÞ}i:N@Ý>àÃU7‹+Ñë‹(½x8ŸZΜ„ÂÒÚDùÛ–u¡Ú ™Œjàšáu3»& ffpržoñÞH™Bg¡¸U¥ûä‘´ŠœIŸ {H)ýÓ&µ! ã‚–Lî?#¯,û¦o¥%èÅO™öZñë¯8L¡oýƒŸí!\NúB¡;T¡z¤ðH•ÊY.o±”œ‹ŸB@Ý—ß }ƒrxiU’®ìgéËIlÖ®Õ=0Vþ€‰-ÂØúÝ×l/1ˆ‘õ¶óëù'éü|%ÌMdÒÚpÜ«lŠ É Öã ÃgÆX‘2ÉÛ˜9l2ç“hðÖhúºÂcÖ–¾aÅ‹š/Àaè IDATÔ ië'\HQðx¤-oi‰îTæ ñ2­G .1›˜0âgÎ¤í£ªÍz[ð\¨òúP:näÓþ£¹àV—^£3 |“·D¡øÔâµwûòDÂqb¬¹»¾X_¼}_ò%69=áIìŸÜƒî7 1ÓxÖfð§¯eàVq©@‡~MPâo´*×âT*Éš©ƒÙsE¥t‹ÁŒØ›sïLaW\A‡¸î¾m‡¾I•#_2x ¨Ú‰‘C†òBÈVDhñ4^cݗØp>c¹V =>†òéθ´cÁÍåˆ6›¼Ò6eð€„ÿð>=ö™)Óf#†w$äƒÿ]/wR¾×Êtó6•öÍfÒ๚ä@Q”LŽQÙ¯Çà©áôÒÉÌ>t™*´1‚wºáíYÇ0gXSÖeZÁ%7ûOZz Ù.«%°É;ŒîÄâ™#˜v:+ ÊV´®SÍ\:°÷î?žWéP¼¨ùZž=zŠg“îïÅ™l[µ„qhwØ}L„ƒ„3ûØ·˜+ʇ¡DsÞxµsvßMXKÀ“]éúäJöæ:¬¢ø¥ Bñ°pÒc‘@ò¦X¯²c[/6ªG‘5+¹–Ö85–iD]÷³,8ƒ5&ŠÝ1iËç{[6™ß ûìô¿uk5‚[žcÃygìp“2+„NAñ F—·¨m6]?·†üÁ°7—Ü´ž’/}ÌÈJû¸dQ²é›>Db&§çÖ‹ó6z‘~Užãí÷ûÓ/äŸlɤYÜo…:Œ"â-¨ªÊ±àÌGb²y`NÎxÝíŒåZóJíxŽÂa“ ¥‹`‰‰#vÉÖVúˆºÛ§0uK4½‹=a/òdqw4ÁæÔƒ >ˆF-Špfé>"îÔmZ”Ÿ²ùbVBزxmG¶¤ŠûaöŸ[ÃçÒ×vý[OÓs`Yüt\`iýëò|Åþž{+*Ä„°õë‘ü«éÊoMºÎ3—„ƒD™­·ìç·1–¡q#G¾[ÇñVˆßËÒµí˜Ü¢~Ûþ!*9’3k>cù1ÞQêÖϺT¥ïçïSaóXF.Nùi(M›þ/`^þ;ç:t¸ñSÚ¬7´}òEª†­fþEKæëQܨұ?O^üåæž<›¾ž„`–|£Î¿°{—:¿Bio»â¬ËÏôÅêó”ÿ–­8B´E…#+Xv¡)/?Ěŗغpéõe­÷³7´­Š¸£%ÜZ¾ì@–y¥Á·FcÊF®ã»½a¤ØàÔº%~¾ÍËþΙÿR;r_¾4øÖëHcËrFý~àz‡‰ªfÈQIÉj=j2ç×/à|úß±gØs8†6U|1*`6ÞZ.².Ó*ÉÙí?ú[דí²Ú²´n_š£?¾Ç†S¦´ÐÔ¢2T Çô‘ýq“ÿU©1l:Ý£Öq²d}ªñÆKζy_ñ¿}©bh<«Ñ¾oÚÖ „ØÓìØ‚¢Æ__>ð :÷ëFó*¾hbOó÷ÏßðÛž¬† ôøìm<¶ìǽ^ ‚||p‰;È‚¯~ds¨+µº@¿Ç½pyôf½x• S'±$Äzk:§D·f'žO?AÙ@_t×63ÿkÔ|¥U‹øâe?Ëʯ¿fùé$ôåºðÅØ²Ì0‘I€âCã§Óöß‘|°ìêõ*^ÔêþÞmÛ^n}žÉŸÖ㯡cÙd*G©ƒpù{îOÖ¦”ŸÚÐíÿgï¼Ã£*¾üÞmÙlz„Þ{ïEiŠŠJGP¤«RQ¤(‚ˆ?ŠéÐ[¨ )Ò{v³íîýþH …°€òÍËÓdwîÌÜ™3sÏ=gæ «ÿÈé¤û'OÉ© íúãÕ6p“¸¸í–ü|‘Ô"U!gêŽ_ÄÛis½â:r©øtZM‚ö™iØ8/OW,W~eá’í„™\¨Òu0oölJiƒ™èS¿°tÙÔžõéóvž©å‡™Äœù™/nçÖ½æÔØg3ëneÜÔ=$8tTôÓÛG±èYKSp®3’Eï8XðÞšÌÊ’yqíó^w<%Þ]P›´+ß0ùëPè*uã½7:Q¿„žÌÛGX»`%û£sÏ·jüÚ câ•0hÞâ‹¥é„mú„¹{3©Ö{8ýŸªAiO')!ìû~1kŽ'dN ÷ú¯1uPKª{«I¹¶‹o iw@ üUæY¤¢Ä³Ÿ0§õž,ƒŸ 8×ãýÅo’4{,+#JÑ{Æ4Z_ø„‰ëB±è«ðÚ¬IÔ9<©?…óotW=v´¼<ç#jny—éû’p’G &~Ñ—˜Y“9õ¼<}óÉäÊìÛ™I‹ÖU)á­'ùÄ|©=ºÕ£¤—'šè=,[°žó©Âôúç°sì1ÝÛÐÔ{vÔ$'Ê·mˆþúZΧ(x´þˆ…½.ðá»ñí{¿.»ÅÚŠAúӨ‚/®3Ñg6³ôëm„˜r£ö㙩sè|n ~ºõg¨ËèoãX4ŽEs+rÎ;ŽÚ¿{zpxÞF®™@¹Â3¼ùöK4 Ð’q’ÃÑ9&_I_žgßB—:eñ1@Fäqþ·øöFY³ôìÂôôh Æ³NO† z–zþZ2"óã’ï8diËô¹ÏpêÉY‘¦çZoñå=KÇ.C¶ðžÌZPãY·;CÞèBØ£ØóÅtÖ$h(õôÛ|Ö¥)e vbOoÊÑy@ðPáѨ?CªœåÇ£5Z7ûcEÆ–Ëh&ªÑµ½ž‹O“¬¸Ð¤(ÛtAà»(V’®bÿíÞô pGpÿx¢Y‘I²&fï(øŸCq`²¥az€W9#–4]9Ô¯€‡*“¸°pŠŒ haÇ—ˆ3Z°Êî5ZS1ýœ‹Ç* ;vŒxŸúÔñUƒ#ÐsW‰19Pì‰\½^î9ZÜ:r&kë¼-žQl7p1IÅ«±8ÜKàVäQuZ½ì™Ø²Çªb eßî+èõàþ}y¡‘¸83™éd»;j´¹ò”Ô:T²9×XW¹V¦Qy+WÎEç í¢Ø2±¡ÅYûï?Y øóȤæ\¼ ¤¢e]å^‰Ú>©\M»÷t*×v®—Ø~> EíAY5IaI9«²BIT—¢¢wþõ::J× „ˆ‹äØØ5”hÕ‰Ò;9Ÿ59ÙâÏrøJ*2R¾ê©prÕâø*sW­eÝê%|6®7õ½îŸD$CIJ;§–pw„ˤDÄ ûUÆW Šù6AÇn’¡pÿr*7/]äò­Œ¬{–ôTêùO'¬eÅÑTêBÚL_™çºúré×cY¥üù áZ§/Ãê_bùÚKX m{ C¹z”0‡p%áOÄ+}Ìh|Êã™y‹ÓÝI;“èp#žUüÉs\”Ú•À=èâuƒ]AqܽÓ<òEQ}¥Á»‚7ޏRî^l‰ãfŠ3e\³•…‡‘/=MÊ’yÛ‰Îæñõòe|õÉHž¯êZà9¢…ç“ I‹gåöôn¥áÌÎK¤+ä“‹—éûÆÏ}òUxZomj»%Wy Ÿ.þš•_Ïcr¿øÿcçw=jœ(զזMfì¨wøàg™§ö¤’\¨ÛÝ {øhh?}ð#‰Õjáz·‰5<;n8 "¿a쀌þ&Š&o¤C‰ìšÕOâ‡iï3úíwù&¶ýúÖÁ…4Î}¿ˆ_¢lDü8™ïLÏëü½‹ÖŸ¶ÍÓùߌ÷5j&û<º2z\®,™ÌØ‘£™s¦ ½úµÄça´[åAËö£eÃD~˜þ>£ßyŸoâZ0âÍæÜ\™•^OÿÀ³Ì{»?>ø[§Q kâñÐg,«ÜjÓJµOÞLjÑ_p±âK lá… ×úy·§ÝåÁ³Ï½7ãߨAÒR¦kžÑþÆÞà!“øê·ÓÄå™þlÄž¿Œ©d=ÊèmMjX¹‘@óJ΀–’u+¡ ;AD.õص…ËO“™q”ÏǼ͘/Og­þ•ôTo¦açÇoñúÀ÷ø_Z“¬~ÍsÃ2ñ‡VòÕždlW–2ö­1ÌÞ¬˜‰»v€ÕÓGÐïõ!LÙ©å齨r÷°8IG…élúp(¯ œÈFSÛBÚ] ÿ…?‹ŠÁÁoK~ÃÜa(ϺRîù!ü{Û7™Ø95ÓÞcÔÈØéÒ…Ï”æ‰QQrÜ öÝñ£MSÿ¬Ý3úò´kèÄÕÝÁ¤å¶¢OÚÓÂ8óÛ—¼;¤oŒ\FXÕ—ÐÒ'ïø‘8±ó^mZQ:»³ UÚQË~†Ý7r{Šs¡ö£ÝÐ>ø[Áú«Ùá¦uyil_Êž™Ïð~óõ5Ê4ðº×ÿŠ-™ãë™=f¯ xŸÓšÐﵺ¸ÞÕ× ÓÓ%Pû´fʧ0nšÈÀ~o1ÿB%ŒëA™´3ìð¡uÓÙ»‹œ©Ô®.\Üõ|aBÕ~í=ö”³>pÃ>üŠ­¡Ù µeiåw’ù#úÓoÔ2ªõy°yF E¢öjÎàþXò3aöœFj|š÷¢‘qÛndÂCÙ¦ó!iñ¬Ú†vþ±ŠÇ>ýKx¢Ÿ§ÙNjbŠ¢P­zµÿûøú`¶§`L-Þ,gÞÅ¢¯vcn8ˆfMbPÇʸÑ‚rFs'¾@)I…‹N…äTšf½†1~Ò$>xÿ]†w.ƒ6ÜŽÙh»·ÃÈ!ËØ2-9†j‡E¥*Îÿ„l—A­ËµõÛéÖ)vløžïV¯eÃîPÔ‘‚ÍšB‚E¯ëÝÔ*œ½ÝQ›â1Þ+XƒOíúøÄŸãjr^o¸¤Ö¢ÆŽU«ö4þ´Ô—€SkØ~÷QÕ:7Cuj'WŒ HZœµ`3çŒuÅnƆ]îÁ-a¨Þ›áíÒøuÍ RîŽG]Yž~Ê‹+ÛÏ’\ì+If1lØ› ì÷Æ.â°¾+ãßëJ©|Ïs•Ö6,öœ±¬ØÌص.芛:mwØõõ|¾ JBF¹ꋼÕ"œoW E©ÀIK…Wãž´’ò륌¬¶È“¨ÜÒpN|ý?. ó¬¨<òƺ„ý¸ž`Óo.Rëô¨ì–{‹v@Áf¶¡Ò;£•µ¦}˺5_3{`9‚×­aL¶§'¿|‰ ­³ÙlÏÙɪØÈ´“‹.«yF¾Tz¼= x× â‡iŒ6šÙûé1ö jÖ ¦¥ÜKŸñýÚU,™Þ ×c«ùñTJÖîÀN8ÒªŽ–à-û39ÓoðÇÖ«÷hJ6§]À¶m½@’ÍNÒ¥½œÈ(G«šîÙ §LØî#ܶ* ¤sóRjÿ’EêRy‘ ۔崷Ær%ÂŒõú^N'ØA1sëb4¯<þ‘ø62aûNci\ÞwkµVTÌ@FWާZxpí×?¸‘.c9ÁÎ`‰šm+R|¬™üEFsè`(&Sç£Á»Œ TíXNýÂþÈLds$w…ãZ¿%e´Œ1‰Иæ5ýј㠽‡%ß`¹}šP¥uKêÐø7 žt–íûS¨Ð¬zµ'Uk¹uâ&ÅN8Û¾KÉ6kçOF?D¿ÚI¸x’ËqfŠ™;ç/¤÷ÇýžµÚAØŽ]\M“Q¬w8¶í,ö‚Ú] ÿ …>‹ŠÇ¹¥¿Ùé:~ã:ÛØüÕ6 ðc îa#æø!ÛQÏS’;5ŸªDÆñCDÔnr4GF`V@Náz²LÄþãDY°Åsí¦ ÷2žOˆ~ú˜8¹/ ¿ÖM(¡}¹¶4Ð^f÷åôŠþ£˜"8y&œ4»‚œ|… ÛÜý]óõ‰Bê¹\rnI»@` J»ZXOîãfÇúªñm3˜¾¥N°|ýå{ºš¶TcyD°uÇÒd™‘‡Ør:W(j9•k'.e”Ql \:äåƒáž¾V˜ž®Â£nª¦ígó‰X,r7ö Ö· üÒ9»/ïVYíƒsEÚÕ…ó{o÷Õ[…WÝöTJÞ͆ƒa¤Y­¤ÇD›™ÈËþ­gˆµ*Ø/r4RyàyF … ö£í›¯â±s ›Ã-…oZÒÒù…²„nÙO´‡°Mç -ן…kÖ²ní*–L}šŒÍËø5T,ù{TH’„¢(¨Õj´Zí}¶ö'úyj—ÍÈF#(|©ðв݄-³@Í*2é!øqÁ!¶”Š!ï ãÕèi¬¼ú gà90%›°EbÖg{ˆÏcaÖR¶ç0úÖ<É—óWpÓ$á÷ô&5Ë›C‘3 –”4dƒ/®H¾û! ¨ô¾Tnú45­—ØrÇö$®…Xx¾Q-üãΓ¨+Oúî$‹$#Ûø/9—¥au a»ÃvõÅI&±Ù_ðÿµ͆L¤¯ó6>Y|–´»ãÇ­]ë›9<ó&fÅŠÑ Z½öî°DÒèÑbÃd½;À$œ+vãý±¹þõ ¶ÞÎYO¥¯Ü‰–º³|ü`/¤(V22²~µ&]aÇûxfzSª¹m#:9'‡Õ„-Nšœˆ¤Õ£±›r9&‹Gr­ÅkÃê¼bçÒÐ’PÀÓ=ªpgÛ7;T^4ÔÒ¿`åu3Ф+0•[múNJà‘/øä`£=SôoB¶˜ÕNäRÈŠä X2±+€쨎į%éðlDïw¦1£ÄL&o Ç–_¾ŠÄÕhGå£Éñ¥g+}ÖÌ,¥ïáäKB¥²½ëgEd ·ïàJŸ!4,©åâ͇±þÙˆØ876ªÐûT¤å«£ùôo&}²3ßÙ½<€L>~ º‡ÓJ*0_à§­H°ÖËì>˜ÀÓM*â²=&ïn€ÿ$,i™9ãEQPP¡’•/½™;÷ÎÜV°¥%cΞÓÔnþ¸iÊ3pÞJ^W$4:…[.ú{`cº5ç%ÂHª‡Ø+cÊu½C¶c5åZ §È(…æ'=ôÜüegæ^ˆ—™ŠE]w]>/§Æn:jŽZÄ*9KæTZ-Ž«t<Ô:‡™Ô\‡b+Š’õÒ¦rÆÇS[ýI,o.g=+Ô:Ô™©èU2 û¿`†£¯ œM/‚Ùºz¿œM$Ï&`SAQ.t©ìŸª†ÐuŸ5ci׈ÒWià—À™k©8ð|€ŠÚÉH6g÷ƒ‚CV¼_U®TíÔ‡^mªâ¥²#k}ñÓDåºVƘb¾×Dz1‰Lu@V»…~)ÿ8…=‹ DÊ·(ÓÊ­ý¿Öëmª]þŠýQbHqØc‚8ßöõ<9x¦OUJãÈÚ(l™îr÷¢ +¬ÆÜz’‚¤ú«úÏÿwdOï%âÕ.4-±‡+íê£ ^ÁUc–ŽWÚMèùrW•Ñ#[Á%P‹v:%ã2;Ϊy»}y6Dëi_#“cs Þ-¯öiÅ×Êpjñb.å2© Þ8Ë©$ß ›,cL2áðÊúKÒÒæ¥éXۭݎʳÚôÜ÷P˜ž®ÆÍß ­wf.ïšõ½¤F§Jâ’$ŸßCØ/дÄ6vx¶¥Žã C2!ÏÒG5.¾®KzAA¹d‰¦œ;G‘óŒ@ ŠGC©ŽoÒ[½™wDa+t9˜„{Ý´×1ÿTJÖ{÷Ù¦ó’s°׀Ƽüîdf¸ÍàÃõa"òË#@­Vãéé‰^¯'-- •J…Å’ÓòO´X–­`ÉÒ.ŠT{vKqÆh 'ÿJ”rÜ&2ÁLfb  O f ·RÞè¤äBÛAêåÄwïʳ¯òÓéhÌZJ–r!%<'7'0§’fQP¹U¢EóRhþ#²-)Œx©9å½4ÜŠµJ¶éC·ê®`Ï 6ô<Û·]&É`'þôµyšgû7Aç0{e?»/ß _«Â½j#Êd^æ—èüí§Âµtô©×ˆçvþ?£ö¦Ùì¿ÏæþNĽmX*|w¡Zâ^ÖÜu,ÙS¿c£co´’±ZßJø(ñD¦Ø }Åçyïý§ˆùv&ßžIÍq|H®ÔêÒû±9ÜÈüsU•$’ÃJþ#»ÓÂ3Ü(遲(; Æ#°$š¤}$>DTeCîMx¡‰åOgew µZU>gE«MLýh3QúZ¼:éj_\Ì'¯=à.¶¶ø’ õ)i¸nU@r¦d9ÒBó„ÜG±’q‚í{Ò¾u ¼~ŽDÎ/_E—DBhRõrxªÏ“):?*zZˆ¾“ãaåËa$&Æ‚³oÖ w;€J‹V%ÿ…¨̉!Þ~Ч6¥¢ábÓ‹Î+¯L1~дöäHRTÍñÒ«Àä$Ô:5ŠÝöäœmRØŠ3G&É'¼\4€и¸ã¤Ê:Ø‘‘@†õߞɑüžp]¥â‹ýkµÎ›—âÀ„ú®VmÀËPø˜âËÖàæíŒ @íæ‹‹œFªÅ‘w1‹œABº‰ %£ùò⟜Œs׫Àc³Í$§™IÚñ)㾿Éý¬‘°ß3ëà&ʶ{“É£G?n&û“rI¨’ÆÓ ¼^¯:õœ=û-‚ôWTƒhT[O€1˜ñMð·ÔŸí;çýy÷U_~úÛ#Íh+¾Îü©r¥Pãâ•«Ý]}0Ümw@ < S ‡$Õ½°r’Þ7DÒÝ’+u^z…r¡Ç«ð /ÕºÀ7—Œëóþ‰CŽçÄ8z´©M€©9“ð}´ÂLw}“€ 8ÉgÙÖ—®Mëã_WÅ…e× }·Ìó±ºF¿C»› ˜<ñ,É7ZLYH߯4òGò¸öÔ¼àD ã>)èNíMËA¯xf)_]ÈÈSžœ™ŒYU' 2@³§söøÔR¾÷x†Ö=ÂÇÓp=CÊ:û탴€Œ1!ÛíÝL˜´˜ü/èÒEö„ö£{ÃÒܨ|f!¡÷­>v`J2«®jrŽÊ…e@ øÑ–¦ý³5ðö­Êçß¾€J­Fb$_/ïÀŠ ³9äu Úö®Cò®Éܸ;wk›.E&#ê {O¦ñTÃxn »ã†àoE’$ Fƒ››z½žððð{ižèвb› …Õ«øßÏÇvd›±Øü´¾xå½ÏørÑ"L•’—6²ñ²EÉ xûÒfî¼Éô._ðn4GÒqV-?„¶ãhf}ñ%_ÌùíËá,YˆØùç Ý™úÅ|fjƒé@PÖ¹—3Šé"TT¨UЬãÕìÄ\ÇŠåËYñí:¶&6wœ@[—÷nâ»åËY¾r-›Ü$='î4©ç7ñÍúS$寫ƇêÕ]ˆ½š+½@ðÿ µMOfpÉC|¾`‘v Z­­F…¤)AËÎe‰Üy,×Ã0“»Ï¢iÑ‹¶eô¨õehÝ«5†+û¸’ú Ïóþ„$®™ÍwgÒPiµhµZÔ¨<ò\­4öí,ÀPZJ4lBõÔHh=«ñÌ+m0\ÝϵüÛù­‘8f¤N¯NTvQ£õkLÏ®þD8Gbqó”6€Î#ÞePs,ç1rÔhFǘ±ã3q)Í)ìŸ7‘òê­ö¥E¯ÆXl&8w=råCâfÍÈÑÙùŒ›ÊšpÑ¿ÎdÂÜ?ˆqªÉ«“FQïÊ×ÌÙx ³:«´…7ü/ÆÄþ;eéþ|m<5ÓjÆsœŠyˆÝj7¨B W-·ò´|¶)n±¹eVòÈ…ºH™.züäÍG*2­œpŠ]a¥y©oKJéT8•hL·öÜÔ}º Þy+TQ¡sGª¹©‘t¥hù|!í.‚GŒLFLþh‘I8y€˜€öt|ºI‡e}!x|8R8¿÷&þ]{ÓD:ÏžÂÎåͯOªp7¨°¤$crHÊ·¥SÅÂOd¶Fîã@FzõªAÊ¡£ô» ïfèWé2k6\Á¬É~ÇÕjÑH`‹>Å™ôrtíP•„S©f<×Ð%{Ï—½»2“I5+¨Ý«ñT»2x>´ƒäó{¸áÓ…Þ­qÓªÑ|(Wµnj@IãâÞP^É ø‹¿óåÒ R'êöêEuW-Œ˜G«{×È\øüV•|†òwv±4æÁÇ´. -C‡¤”‹ lÉ„ýÌìïtß µró§¬ü6, ƒœÊõ=ËX¸;¶ø°ÊjÊÕ¨E¥¤ã‘$%æúNŸ†Å!cJI"Ù˜Uo§rÏðB¹[ü¶øV^Gc®|TŽDÒ’r½VJ6Òm vc I)f\[÷áù@|—Ås’¥ïŸÁ¨×ÿ[áGäv~ù þï¼ÅâÕîHá^=Ÿ_"làëO“Wú0ª’zÈÑ^ά !8ʼR€|#ù8K¿*Ã;ƒç²z”óSü4-—M*üÛ=¼|™¯ÿÈgß÷cØèEôrWaŒ<Æó×ò0 9S¦MÞUO¶T"/ìgÁœmܶú\rAZ2]Ôøy‹ÙWrçc¤jQiÏÆ³oáB¼Þìϧ«†ãdK$xç¾:”øŸ 3þP(œÿn1ÛG eæ·ýp$_çàŽ½ÜñsÉúÞv›ßæ.E?´/Ÿ® X17$+x@‘y§qîç½tõ!ß´Žfç§²úÆŸ?(Бr‚Õë3æíE|/‰:ó;ÛN&gG(¾ì2ò§1rÁ™ÞŸ®`’—šÔë»øjQ)Žü꣙?ÎaUßÁ ›×o È)7ؾx.7âÿ®ƒÒÏ~Ãg?õcðØ…¼á®k7Ïçóžõ^æÝ‰UðÐ(ØÒnqê+8\Àjë3Ü4t¡Å•Ù Ì„¿…Ϙš\]Qà\i‰ØÉ–‹°ð;^¾¸‚‰ ¢¢ÞvbýÊñ¶CølUWB6Lgæ® ü|}ÿZÍð´Žü²•s)Msx›m»$z|ü55ýt¤_ßÅ’ìvÁãÅü#kN¥ßç«èŸOð®íì‰y Üêñú›ÍˆÛ0‰#‰6äƒß²±í§ ï{‚ +.Üw|” 9é4ûâú2¨v4?~Ë?a±< ©örÃéÊüºðEh÷é“SÙú¿ýÔü1ßvË$>ø¶üq‹ç [aæð¾T^ì§âûô»äNíÎ qqƒQ ›äù*ìÛÑLÙʆ›þö¬è)‘qœm;é^ÀLÈæ œß—ùßõÅxç ¿í8DlŠñýÈ Y8ßÁ&³l˜0s'hs—DŽBzð^B†Ž¦™i'S 9è[ŽÝÍ‚…ž ë÷ˇêÀr‹³§³.ýÁê ‚‡A&3%‰œ˜djtF‡-Ĥ4,  ò¢I¯–pìsN§äVÌŠ²M\ZÖÀý³þ°'zl5sÖ^}€ã襀ù?“<<<—GU§GŠdì„^Ó—>ïØ±Ø ¹cG#±\hGŒþùGX»Ç‹ÆÅ%ƒTÓ?ãÖ»»£ÍL%ýaþ!ŒF#×?›†ˆ£'àïâ‰- B@ @ @ @ øo"B@ Á#@£V=î*@ @ @ Èÿ /F… xóÍa…þ@ @ @ ‚ÿ"’$åùû‰Þ줩‹¯¦#^Väd^ÖÀ–ÖÃ*™ˆÏüúqWY @ @ @ þ4Oô`_MGF÷Ï»ŸÖ%Vu”‰sëÝ÷3Fu”¥³ÆÓ¹Þ”Ç]]@ ‚ÿGHx´šÊ·s{RúQ/ITûÒqæ7Ììä‹ú/Ì™:c–³xpœþñ²Tx¶œÀ’Y½)«ýÇ ãÑÞ[!<Ò¾‚' ]%ú/\É{õ €3µG,æË!Õßœ.(Ñ7ÿ>þŠÎõ(t`-}æóͤFþ©"ŠäÁdVSªŸ};ö^O´yZ ‚ÇÆ½XQÀÉ2ñxêÝH0ݹ輪ÞT› gçGb%{h$§ZõlöèÏŒ÷¦fÓFÔªP wÈÆ®Ÿ<ȱë)Ø‘0TëÁëíür]ÆÙM9™êF½nÝ Ù¶K©8ÛÝO"º€6ôö2m*¸áH¹ÁÞ–òcPöìj·<÷ÖH^,ÄôwWjÍ›ƒÊ«fuãòŒ)ü¡iF¯WºÑ¦V) ¹ô +Ví"´‰ï6œøOÙ$ž$þ_…€v(“C;|‡*§WðÙ˜³D›H’TÀËjQùh(Õyƒk_eñ»ŸqÉ@‡·'0nPŸ&=_f:7!¿ÌaåùÛ˜]ªÓãý÷ùzã–ßs IúJôx³Rš½g o%ÊšðÕ{Ÿnñ£Ù úv×?ÚI¼sUJ&²sÞhND)”íð“ÞBØø¹OýÍEÉW‚W§hv-\ǧaéèÊwbô‡o1$b`èIÏç½q/r{â„X²=rù’po4ˆ‘%6ÍÎþ_Ú½=‘±ýï0aé92òe¦võEŸ¼ŸO'}ϬØm8ôþò׬ Y”ô”íð&c{úq+½@g¶à?Àl*xää+%?îZ<’;uû¼F§‹×9zÓôð užà¾‚G‹ƒôГœ~ÜÕ€è›GŽ=šc‡ãy®ucüwl%:[Aq lCCC(ëϧ`KNÊѹþª>S,f®.ÁàwºJvšÀ”Ž¡ì /èeæq+HBfà±¢6à’zŒ“çq#IEÉVC˜2dÑ7¦±#©h{¢ªÛaAØ#×ðþ´Ý$8txWëˆw‡3ôÖ fJÿ<Ñ`E[é6E!ørpi|}}Iµ”&ãßèÖ•¢^5=Qû³ŒÜÆpNÈù:%"„DG+Üõ*H'7-æ” ¬²|Ÿ²iO¸ÌeãKÔ«âAȹ1ø‚¿ M©f´ð ã×­I²*pq+›ÃŸ¢gËRìøé–”H-™Âyé5æT*0Z?íO诧H”m(V³úîw‰—9z!öå}Ð…o£ú¸Þø‘?®¥b®lûcíÆÒ©Òz®gy€Õ>è\)½«ï`GBËWáÙø%ÚZ·0mãib²' E)èEQ)ü>TžÔj^‚èó¹hÅA8{Öí¤Ã´ÎÔv;Ã1ku†|ö•NcêO·ßõ?Âï^›‰ É<[Í ' 2@2PíÅa4ÜÈoætº›V_#O>æ°|v÷ËhÎ ÁöVy¼5—Ì/+sæüˆ CÜ~¥7e=ÔOýo¹ëŠ“¯Ã~¹—ÖyŠ“1}èèg@M–Œä•/À’@èŽyl öaÌes•¤Â³N;Ê%þÁŠ“±Xìpc×O\ì2Œöå7r-˨ðÈåK2P¥}M,Ç>ã`¤ ;‘úùÝ>èH5ÃyNËyåKãê‹>ã,If¶<Âbî/¢bž|lÙe(‹Šô;§ùnÚYÒ:ΤFîíÆÿE4þ´x}8¯¶­Œ§FÁxë?,XÁáxo^ö:ªy!¥Þ`ï÷KùñDvÉ•½Þäv5ðt‘µKX”€¬«DÿYCÈüa'^}^§•ïeæšÏùLªtîOÿnÍt“°Æ±ræ×\•M|D‡Vq'™Ë[—ñÕÏ—ï[@"éËÓeÈ :×.‹·2"ƒØ¸ô[öEY³BXÎ~—ƒ§qi\‡Ržž8¥žeý¢o8ct”jÝ·^kCyçL¢ÏâšN*¨E²ò*à.È¥iûÆ0ú´.›œÀ¥íß²ì—K¤Ê­¦ðY§‹l½]“Õüñ2˜¸²e+ÿÏšÛô>PãQç½Þ™¥ `Žbß—ó]° uaý‘7w2ƒ~‰; BS–gO£æÖ÷™¹?  y4çýÏ_%泩œy~nž¾™1©všiÖª þÞzRN®ç‡à²¼ð|=Jzz¢ŽÙËÊ…¸*¬?;1A‰y¡5ýwdï|r¢\›8__ÇÅVS³t®I{ðíûþ}úÌoÖ– ú*øâ¢6sv Ë–ÿN¨)W1*?:MŸM§sS™ôKT–^g¨Ë;óÞÂñÕx–\ÊI¬Èö{ï8jÿ¶ôëîΑ?qݤÎåŸað[½iZJKzä)ŽFçŽñ×ôè‚õ»Ã–6Lý¬§§~Èæ¨,Ô¹ÖpætbùøÈCÜ“YK!:îÚ$ %Ÿz‹OŸiBƒ¸3?±øë„›·[ þ»ÈI§ùicÎßwÎ'r`?Jº©!6¦H{¢\¨í°+I×qðvOº—rCpÿx¢ÀÅAL¼ªV¯Vhº4«“ùšBãKãÞýèÙ¢îjSÔ)~^µÿác©²k Žf9V%·FŒø¨'q‹çp±Ó$z%ìâz@cªû{â*G²Ý÷켑QìÐxW$@Ç¡¸ûWóI:Ê5hˆwÊU‚’쀭“÷*ÝXW ÖTî\;Åá“¡¤ÙG·"Œ4®€á|Ê}»¦ÁŸCë]ÌÛÄš²•’IL¤¯Ê~踅)þGãA_SB*À>­+ÿ4m]ƒùîBÚýktÕÞT«j úè,¨Ðh5(ö\;å Ìzš–tAlÆÿ–(ù;AñYo†öBË×S¶qYÌQ—yæ½ÏiZÎ9á;×|ÇöÆûêRh>’ìVùÞ5rF<J{¨!:…°à XnóÎy’JíéÙRÃÙÿg;z$\k¿ÂzÁ¬ü(q¹ ²’OV+P;"6‘ߟ†Àz”È áç„ÿ^èâäëžãGíBÙf=èìuƒ?NÄßûü>ù2ßæÄqÀÅ'_I¼Ë{ላ åîÅ–xn¦hVÚÕ5Ëã‘/µ'eý4$%q·km ¡$jêSÁ[Íé<ò¥ÂÉU‡SÙW˜µò5´J:·.ìaÃêÍœOV}¡ùå«YD&åòRÐRþ ð9é«ôæf)¬7SzJ”/‰%YM]Ç £þµEŒÿ,êöç£ïþ1;ãÌÄ];Ä÷‡–p-Êá½oï ©Ñ—ï ÃñIü•×µ©Ø’ ÚÀœUWˆ¶øÒnü'¼þêINÌ;@ëCÓúIL™ñ·lî4õC_­Íég±”|†wÕ!쫱Ì8“OóÁL}KC¡eï»'*½>ž×1gät"\Z1bÚH†ÜzŸùAi*¶ÇwÓ‡L^™¶tW&MIkù1šô56¿NL™;„÷Ö1yú¢”^˜1“~ðÁO¿"(9î$¢{ñT?¶o‰Æ®/O›N\]s‰4Üï&TÒ8¿6¿>’!Œ³[±ábF·†¼9óúµbúžÄœB œÜÂK½[°u‘60TnK-û¾ 1P+@íGÛÁ/áw| ®f‡›ÖU ×èW(4‡“®a/Ý‘Sš¡Í^4ýWôh³W!úÝä=ì‹|….K°-* ;ÎTlSéÒ2®›r¯ëUû¢ãzš²´ðÝÂ'£–äÚ„a3‡gÏ3IÂq *ç’ÔïÞ²wöó¿[ù4±‚쉅Ú‹AÒàQ¥5müã8ñ},÷™hÕã®À?ŠâÓ¬(ŠÂ¥ààÿÇÆÅa´gù+Ëœ*<Ç‹ ÓØ8u4£Æ|À¼õ¹–Í©“)”n^w€„kÕ”7#è¶ÐQ²yn®ËÇS'óÙxjPoª:g5–pòôFgŠ'5÷hq*O×o2tÀËt LáÌáK$جDîú5«V±rùJ~Øvkå<ßÄ/ÛË/“—Šâ曺 òÁŸA¥sB-[°Ý›BØ2m¨œœÑ;Ì TíÔ éô\½ï¼\'» ¥›v/köÅ"c#æü5ìU»Ð¢´’Ê@éæ=èXJƒCξVW†§Ú{ruÇ9RŠ{SRéñö4àU=€ÈuÓýöXæî7ðÂè7¨ex¯–œÄ•‹i”íÔžJ’Ο†/t£²ÆCìÑìY¾€ïOÜ=WKà‹³Xµú[Míëñ5¬?‚ ¨ÜðúÀ*œZ¾ž+&%¯#ð¾|î5†j½Ú6-?œ¼ï¾U è;¨aë7rÅôß[ùR¬|©}é0e%kV-å“\þßZÆf›xŠ’¯ûKBë¬A6ç8òQl˜màä¢C‚Ç#_’gØÌ¶{õRìlŠ*Ÿ\8H:8›ogèÀþ ywÇœº0f|Jiй¿|òU¤,>aØÓîâT‘¦M*ã)™ˆ %ÙšÍhp‡íÛ.’l·“|i'3ÊÑ¢¦;*ì$^:É•83ÅLôù $ëýq¿»–N¥·{o&“i±"c ÊÓupœØÈÎkÉXí&nÝÁ˜-GŽôSl=r‹L‡Lzè)®Ý)ëYÀÂ<9•ë'/qÇ(£Ø¸t&ÉË—{Ú¬Løž£Ü¶* ¤v)µ_I\Uj¶ŸO®X‰=µC‰E8Nó߃.¶Íݹ±ùBÒe¬1'ØuY¢F› Ü=‰MN=Ãáë(€5:ˆw¼hÔÈÿþÕ–…Þ‡ Ïºí©˜²‡MÃI·ZI¹El¦RLGaí’7•bM&:ÚÍPÎÕAZÔ ÂÓex€{Ïn4<ê>MÕ´l=‹UÎ äàb}ÓÐ_ƒ¦TSZ•¸Í–Ÿƒ¸c²cM½Cd¢µ€…ªt¨§7s02Ù|‹C»#p­ßœÒÚ?Ñ—@ øóÈÑ9t“Š)‚‹1 Þ¥=h'5òw–m“éNš]AN¾Ê‰ÛÜý\Ék’SH½°“`C Ú–Õ*·­‰åÔ>nx¬¯ßÖƒx¹äIVn¸|o1Ÿ¶dcyDðûΫ¤Ë2#±õL®PÔZ.B¿óMçüþ¼[6¦„p®H›:paß ò¾z®ãàˆãà柳³*Ø“.qüÖƒÏ3@ (—†¼»l ß-›ÃÈzÑlþn'w÷eO|H4ý˜¿j kVË¢ÉO‘ñÛr¶Ü,ä¬5Á#ç‰~žÊÈ$YQðD)D=s(L¶4L9k÷ Ï/#–4]+Ô¯@ø±›Ä……~&ˆ¤Í©é~œ£©.TmQã™ÍܱAe¬!G ζ–']æ÷Ûy×–©ÜjóÊ„¡[ÀìC ÿÀ9Lÿ<ÅÊ—œÀž‡°GÒáQ¶=FLaZ‰O™¶)[¡òU`IXvT>jî%iÑkÁjÊr¾>ùR¬- Z½‰¬“¬$µZɆÉV€Z±’‘‘õ«5é*;×ï§ã´&TuÛMT1÷w•MZÿ»Ø£¶òÙg™ô~ió_2rzójVo¿ŠÕÍ7MyúÏ]N_@…F§pÛEJåJ¥/ѳMUâ°ÇžàpÂó´­ëÉ¡³UiW)c?ÞÆ†öþĹûFq + Vc®ç½¬ IÒýÏ{ÁC “xf‘/w¡‰ÿ®¶©‡æò7\3féCÅ¡õoB÷>]hPZæàRV‹~:%ã2œU3¼]96Å8Ó¶F&As Þ-¯öiÉÀWKsfÉWçZä«6xã,§‘|os‹Œ1É„Ã+믿¢G®ßAò…}„¿ÖÆ%¶‘äÙ†:Žó,Í„<Ë ×q³ 3‘dÊ™gEÎ3@ x`Œgø|X?$+%ëtaØ{Szᇬ 6¡aO|Øõz9g«q hLŸ±“˜æö1S6<|^‚¿Ÿ'Úìí¤&f (T+"´ÙŠ1µøxæöè],ú*“çŸÄG/˜¸°c=ö†–‰h^Ó ‹•hQ>S¿DcC(X–ÜœI†Ý }ñÛpe» j]Áä0“q‰KÉõhèŽ&*ÿpd)L²ížñRRkQ9lȲTQ <¶ø’ëQ qê€äLÉ@ÒBŠyÈ©ðnÔ…ª‰ûX›Ç¢¥ÔSo3±—ÂÏŸ.åP\®‘­¹ñûWLþ=ëOµg¦µˆbÏ-3H®ÔìÜÛñ¹„d>@ÅFbc-8ûf­@¶¨´èT2Öâ<×ùPÌ·Ø·rûVHx´xÙñçÉ€gÞ `N áÈŽSôœÜ”Š¥á¹ÆÞ6úˆe/då£V« ò\–¶ü‰é3¶7¬„¾ÂsŒߎØï>aõ™Ô<É­/OA­K_1{Ó5ŠÝû/ååK±’y‚‡ºÓ®eu<‰D.P¾ -‰Ä›q¨ª—ÃS}LÐùRÁÓBttŽÇ%_ö"¢mt(ïö`2V@ë[G‘ÉÅ»ô%• ÉaÃb/æþr]£önÌó%‹ÿudR¯ýÁ·3÷°¡rgF½?–AQãX’˜€Ñz5ã>áXZÞ>s®õã^ñeóôéìŒ4£­ðs¦”Ï“&ÏŠ™´ .¾.ïVU°¨@K¹žãT÷ŸÎø’F‰]?fVë|Yx­ƒÌd¼1¨!ÕHÎx:½".O^²‘„ '—ŽeÑ¥üƒ@ú?öî;<Š¢àøwo¯åÒ+=ÔЛt¤wQé‚"¢ ½#H/" Hé-à‹ @D¤÷Þ{ $Ò{r—\®ìûG„’¤8ž{înËìÞdwv~SpTŽžîexÙ /' ÓÕäG‚ÞY‡‚)6½q”y0\9`3fþ{dGv×°Deó‚³lý±­† fP»Û Y›Õ±g¬Ü³cŒ6b¹»“‘£þ¸?÷÷ý#÷%YÎ…‡^Î/ÉÄ%¤³m C¸ùȽTÆûü–‚ Â3Èì&¢( É÷ïí’Þ'µÄýÁm%GJµiOþ›G,ØžV%ϳòâãSØ"9¾7‚5J‘ÛT•‚q‡ø!Ä O CöoðÂ?f=ÃîÀ4®üÞeT\Xr-Ógˇ>–sP¿_/jݜ͸Qgˆµ;Suäl:Ÿ­Uùé<»n~Ì{oååF®RXOÏ}BÏåÌ˸÷¾WD^Axak¡gþ⯻ÍhWÎÍÅ ÙÇêyÚ,S™ïȆñî)vŸH vù¸ÿHøëØç5'=2Œá][bµ¥`1A‹.>ñDx6« KòÓûGÄ{Y;k4#çÁ¹Iw:”0 Ù¢9s$Š\UŠ‘£H|ãsâ~—ynN¨ÓÏ»¤qÁMk&>åi¹ßŽ9.›Á '5€„Î+y<ÓzðJjœó–¦¬—•ˆ$¬*'ò̃›^T轊R¹¬ 1׃I²§§ÃÕ)š'vÊá±FcoH>Z4+…«ZkÉf¼_(–#‡C²žë@ƒê ór{ûá 7V 9ëôfx+™ÍSs0JA£Ñ Ñ¨ÓÛßkU/cÈ]‰v½[b8¸žã±vTnoÑ´d{÷g³uUÚC¦½úÇ4/æŒ,;ã× ~¦3œ ÿ»­óÓ[–Kz|J¿GNù¸ðó¬€:7 {æÓªÈjOJ•/‚“ µs~ª7­‚søy‚Cö2uÀ ÌàÁƒüåX~²¶q#§o'Œ ÛAB_ 9ƒ¿¬Gôš©øŸND•~žd $§’´Ö‡²W2ý竤È4 jùõkEœUþ²»úQ®X.\u*@Æ«kç ñjñÒ“òWVâÏïäš[Þ«èFv¤pƒV”³žbO ù%æ¯dnì<ƒ\½%5óè‘õy¨Ñ²&Wvs%Iy8¡Æç­Êó1 #¡v+Jƒ¶5q¸º—kF{–Ç—q;ÄìË:/¾QÁ_ }®bñq@ÆFrä]"Ì:µ„5ôûÃ}ùàƒŠä2ÈÈZ'| ú‘Û B6¸ ³‰MHµ'eêVÆ#«&…Љk{.¡®Úš~®hdny|ñÔþ¿I½«’ãˆ7+È.E©]+o6[2Úˆ½xŒ0ï:4,áŠ,©ñ(׈šÞcN s{Ž˜(Ó¦¥½ôȲ×\EðóÒÞïÿ¡r¬Hóê¹ÐJ2ÎÅÒ0w 'OE<Ò@/«ã°{nAž hUÃGµŒÞ#¾®r¿Çó»®©œ|)^ÀÖÄpîÆ¤"ke¤l{;qçvqã1-ßöÅY-£6xâë狳 –°£Žò¥ÅÉé £vôÆ7²=…„d ×¼^h% ×vžCS³uýÜÐÊjÜóQ´°òóø-A„çÀFRXÖ(í­A’)Ö  …î_Ž%œÊt [åþ7 ߯ £j·ö”r|ýÊãÿ.Q'÷ž»õêæ'öÀ‘7¬ìù²Çqn×-¼›´¢’ê»2›—÷ÑòŒ¬ÃŠ‹Ñ.aÈ_‹3/¹¦ïa_Ri>hY’ø‡}ìwWá^¥3ºÄš —IQkÒë 4¨%°„ätBšÔ-Œ£JB›« MßrL‰æYÊÑY—ïP¸¸û&.ÕëQ¯„…Sûy|ÐÏÌ˸‚ ‹ Â1YJåsG/K éð.݈&ùS ¸•u}â3Åd ¹+P¿ª'ƛϸ-áyy£{Ûl©`N+5e9ðbÁj~Z•¶„Χ0¹ìwŽJ!9:Œ(³„›ZlDŸ=Ld÷©YÛ¸c¿’±Óžì×€¾×Ø ùj4 `Ê%¶…<½Üs‹H©ÜÕÜ·¡2äá­·ë“ÓE‹ …ÔÄpnÞ‘à\p*Xúõ=Ñ«ÀžCÐ…müy>.}ˆrp!ùÎô€° Ï…-Œ¿æ­À§WOf/wF2qpõ,~ Îúo\“·6u=®±îTìƒÞ‡Z_·®€›+túfî/}‹åýdz'1-'Œçƒ¼2–¸ Ní˜Ç7[®bRd|ª6"Èvÿ‚”k?2ý‡éÚw¸¨0Þ>º™?ð7§i½ê0brütVïœgÏŠ¯Ùx2½G®Ú•üÅKQ(Ü锼5;Ó½/nZ ¬ñÜ>·—¹Ó·p7Õ 1v,YI´Ø±c‰‰OƦ/ð`;˜ðû %Åœ4Ðsoß_ÉÆù}XìØ†f¾Žà;˜Yl2qï× Zvý ¤¯°¬ò——7Û÷¢w¡´ë¾ÍÊåKøvà ìyÛ?ž¿žÂ{”Å òҳ˷,ë£&%ô$¿ÎþË&ÞLü¥`¼°šÙ|Áãó©ÖBÔ…­Ì]tŒx…‡ó‰èrÕâó/z“ÓQÖXný•ikc2=>ô¶s4†„¬òâßIþk@ã]O{Ç×Q…’ËÍC«Y|. ŚĖ Ñ}Þ‘ û¡CÁ¼—eÓ½ð¿^ïG÷9+ø"!ˆC·p.®R{±| 3}>£Ë¹|èÖðÌ›¸”€l§4…€?qr`¦-ëˆ)ä¿ÿu€ˆºÙ[Ûú'óVå¤wï9¬Ðš¸{z;.&Rùoìÿƺi¬êð9]§¾‡lñ×Ù6:7¢Ò®÷Öè3D–ëϜι1XB9þã\6¥òp/٬ñ“9óÜèöñ|®ómþšú5k®ßÍô÷yNó›Kú|ÔëÙ™ª¹ôHö¢®îaù†˜±eqìïÛµù³\èòÉæw3)„[ËŒ…Á$¦±qÆR Ý>fò¢¾È$quÃd¦Þ½ËÙßvѤÏÕeû”Ѭ>½œï~éD—þ³øÈE©Q\Ø4‹™qXžù·AžÓ¥uüp²?M]F§äH.íü“ÝaMœËÒ±[U"7ŒäPŒÛþ•ü\k"Ý:gIJó¯íè<ÿ[Ì)öFv s©PÖ­ l¤7áߦa7t½Éb·2ë;¢$\ê \9€q»øyκõÆ‚$‚Žòçö@Š…g-GgY¾C!ñÒ.>ïGeÓ_ŒËd¢ïÌʸ?&e/ ‚ Âߣv+E‹{Q,‡…äÈkûßTÖžNBÉ¢>ñŸÔ™¦ÍüIÚk,7¬fúÿ®dc::áß ¹ºº*ŽŽŽ/;/„6¥%²á#N_/K¢9“VzÀôé'8°¼w”ZYlM©d;út~›<Š%ž ã›Y½á(@åA­Aci—?œ_ËŽ §Ä_ó‰ê(W\*R>¯Ä^æ¯5þl»ž”Jy¾õÛSGÙͺ]·Ÿ)h¡r-KËÖŸõëÏœŠ`á¿Åh4ò¼®sF£«U<† ‚ ÷H¸ÖÍÌÎ3zø¯oØá‚ ‚ ‹'ãÓx«íbÄÄÝD½i­NAAxfjµú¡‡$Ixxx R©ÐëõH’„‹‹ .\x°ÎËHè¿Ån·"[R‰Ë—.?qooo$ÅŠÝbyÊÙPHº´Ž)ÃÖe²³öןý}!¡$œbí ¬úÛG`æÎÑcDµ¬J¯PNDýÃEÉ@*eQ_ÙÉüAAAA„W‚ìZ†M=¹´úÑ"ø+‚ ÂsòF€mJ «™ÉSö`¶dÖé<ŠÃ‡‚±[ó¾’gÞt…¿~ Ãñ™†H²y|¿%$dsîFAAAAA^uZŒGÛ6w,aæ™DÄé‚ ‚ c™ö©4äo?“U£*ñrJ•Ù»ž<ü\ ‚ Âó¦~Ù x¼z U XMÎx¨>ÄjÒÞ%®$V÷hˆ+‰—Tch.ÜUØ’µäÑ"U2™¼ðe‚ ¯ ]žwèÜ£=µ ¹`»ÆÎÕ Xs$«Æ›·ÞmG˺(â©svüÀâõ'‰²>؂ʽ&#¦¾ÇÅq#øõ®4žThÛ—¾Í ü6dCï-,ãU¹½:7¤¸»Š¤Àü¸`%»ï˜Q2¤ÇP¶73º%1}ÈJ®›Av)A‹^ýi—ïc®äF†)Œe·Ò4ÿ¨-*ÀUk#ä·qŒú9Ë£Gi(DÓ®_Ъj^ –HÎmYÁÂ_Îg49¨Þ±Þ)Š—ÎBôõƒ¬_¼†ý¡YÍ•,“£ÁWLí’ƒí£†°æÖÃËêò·dü¤ÖH? fÄáØ]]ëG×Ùc©çòà#åâ ºM:… Ê]ÀÐrnqIû™ÐoWÌY$é•$ò×sË_’ßzéÖ²*…Üe’Ã/³ë‡Å¬;óxþzê¹0l@·)4•^ÓÏ‘ü·~×Wˆ%”=?¬Àáº)Ãïü÷IN~Ô.gäàÁÇ~ßNƧV;êj¶0ìÓ„J2NUê>·­g‡6ÚTLduÿaì‰W!Yžå,Ý#ãR¼¶mLÕb>8H6LÑ[7eÇŸÃæŸÕsÊ‚ ÂëÆLàÖ¬´Ü&«R–ð©sóÁ”ITÝþ%£¶EÞ/£Ê9š3yj-ö Éïá/<øTªÏ\ˆ{¼”üŸ¡ñ¥ÝÔ¯©´sÃ{ð¼ óãó#ðÝ0„‰g6²<1–ðôÇ)]ÞTÕfÀ‹(Cé)Ùg.£ª;<òy2‡'õeîÅ”ç¾Çg#®'‚ /•Ú²Í:Ò¶Q% »k°D_â/ÿEüx":ýž¦Â©H}:thJÕžè¤8öOÊâ«fÔyZ2ujkrfØÜ­åý½3ûC;‘ÉÕb2Ó?Ì}ÿ»1Œ‹û~bÙº£D<¿Ê!ἑàÆåFÓ¾#,:؇¯¾þŒU—ßíÜë3VmÜMÇ.Ý>\ŽÓ‘§þu VnXɂɳY¿Ö`A²I“÷~Jñs³èûõe(Ñž‘ýÒ,x ›"eœu¡l›5˜¯o%¢+؈£{óEà@&ŠO(”ñªÚ„B¡±(ÌŠìVžu§Jâ%b-·Õ•½ëÒ·Wu"– ¥Ëñdò¿;˜¯†´#xØjnÜ lJ.”kVÓ¾‰š%œŠ¾G¿þ Q_‹$ùá»4’C1>ӿ㋘Ô÷4!&;’$=áaUOñŽi罋É=Gh¨Äç£úÒ+â+¦ìÅ­út¯Îüaßr"Þ… ÇÒ¯G —'ì"*“:MîFtÿÀ¸”Çô…iÕ£RB%µ3^ÚP~>†M÷˜vkZàIeÀÃÅNÀÒL<—^8±c} "=·ü¥ÎÕˆ>ü83m ã.¥àS«ã{~ƵÓ9‘ôpª²<©z|tgHk/n'S”Çcÿd'Gˆ¾Êh ŠCÀ•(ìÅœÑJ€¾Ý¿Já=c¹!½ç§Ö—w{6#yãzn¶jõð¾$ÅÛõ¤ZÐz6&Fã{Ÿ?²›Á⸓‚åÑy²#Þ†""1[^Ǩï"=¿ü%éœÑ[B¸Mˆë7ˆ—+`Ð<º;¸fy.,$„œdùèSÄ7ü†R¹žÃý2i ÓeæHr,íÃ”Ó eϤsô6®ä­JIW\äö¯œÍêã1Ø$=¾ ºÐ³Muò;©°Å°sél¶:}ȰN…1¨{2sA"·6|ÃwiüEWš”ɇ§’‚ðã¼e캛Í>*ʶù‚εÝÐiú2k^{fLäŒËHN”l݃ÎuKÇM‡=î»WÏÃÿH65:õä£Ú~¸©’‚±fÆböÅŠmá|Ù©!åsèI¾s5³–²'4ãõBÆ«úÇôèðz‰asÊpó·É|»-‘‚M»ðÙû•Éï$‘|”ß–­dë # ”<¶s¸Dg:TÒ²wÜ@–^ÏpÌš<4é\íÞ)L[{cúŸDÐÙ#hŸ’>maºLý‚äÕâÞ¾µ¼/2µ÷tÎÚóR§S7ÚÖ,Œ›œLè™­¬Zº‘sq¶ôuz£ÞzçšU(àíŽ:t«~ ¥\›F”ðqÇÅÀæyóØxÝ„’1OœQQmô\:\Ëuic:¿Ï˜ù•‹û|Ç™dÊžÁGw~å|ÚTÈç…«í&¬øs­6Ô.䉻c2çšÍÂíwx«'A„{(;x.½¦ÒÉ5l¹ÞcÒØ’ÝB…J¾¸»9a¾üs¾ßÊ­9š}ÃÔš;Ó*ül€C9†Îû‚˜)Y”‹ÖÆRóÜ7 ÿ_f½MA™ãós ¸<²÷Ût›8€Ê] ò›-à×ˉØõ¥è?·/–øþr  &OË)LzkýÇî#)g¿+…i7´u=±šM­˜ãÌûnC³* ¼ì3ñ¢X ;¼—°÷kQÅgkú¨I: ¼Sýµ5œSp­9Ž9­Î1ò«xuF·\ЗžÈü!lŸ:‰M©5ø¬ûûT,è…“:…ÐSY°p 7Lv#{ÓhÌTŸͰŸï¤=ÃÊÒV/ìs1÷üƒ…›…{íeŸÚtiéÊé?qÕ¤ñE¯¶TÍ­!1è8BTùJú4ˬl®-L—iýpÚ{ÇÊeÉ忆>þkgß+˸•iI÷ÏšQÎGCRÐÖ~¿’ýæw?­'FOi p(Õ“Ùô,¸[÷9÷¯'fdÜʾO×NM¨Û)wÙ9s<þÑjrÕëÅ·MªÏ`%üä†ô댋FáŸR/òóâ‹÷ßÙÏímðuUs8AK©6ÍpÚ7 ÿýAéå2å~ã2µ³úÄSD'?¸ïdo§©Ä\ÙÏž;­i™Û~¼‘àäTˆK†‘ãFP§~½'¾~ÿ Ô®W:õ-Ô©_—]?($gV/©-@»±ƒ©õ¤Ža™0óLìMÙŒñcû}5Ÿ É€ä@¾jÍy¯^%ŠætD¥˜I¹Ì_+ýÙ[˜nßtÁ¼p þ÷»Y©p¯9„1uÏ2eÒ6Âÿà /áU¦ö,€[òmÂLéwI%™Ð@#n~>h¸ý 'œì„oõhâ~mG#¸7è®.}j;]`ùÙ„´žm)w8zpòztOxôÀDܽ•ÍÜŒs Z^'TWÍØQ“£FCòýÁ‘È´‹†%ò4"A_JBzh2G=¾•ó‘|ç"‡M§Z'l‘غj[®%=ÔËN2ä$C§¢î] mÄ…a{·^š\;´cMº2ðc‰MÁ¹iÖÖ‰C+öf¤xn^8ùvRÚM_ÒS¸eOêE­aô!]ÚfL”„S™Žt/Åc.à68Ãw¶‡·£Ò9£Õ— ÷¼•ôWÛˆ½u‚?Öø³õjvI‡“Î…ê_. šF9ò‡6úóÞ ’_³gH‘¿ž_þ²oç·ëãèÚ·-ÿÛKñ–M0o›Ã‰8Ô·ó´sMÜÅœACAéMœ!UG®Z…ÙøÕ(–D*x×Éw]Zrèì2®ëÊÒ©c ®MëɈ˩8ç)€gB<á K™_°c|W1pâ Lr*7ެcʲK„¤zQgÈd:tœcÓN­êì œ[?‡N3鵄SÏŒ„kî Ë()D\Ý˪}ó¸ ùZŒfâ§­8|z1…ÚйjKûwæx’9 æÀk é)^UÍ”¯{òÑ‹ú_~Ã'r|Æ©ûY°uxÓM^ÌïÇ·–q-UÂ¥R?¾ü@ËO{°ó¶Bóe7"¿œÍñ„´óW¸e[n­šAïá$§>\°”ÝJR1G<Ç\˰¯Gd•>uw(ÁšƒYyÇHªYO±Ï†òI¾]Lî3ëfªtÍ€~ ûf‘Þ©–Ȱ C ‘òÓvÊ7ôtš_bq´šbŸLeä'os`좲›UîÓ“¯A)6}5†51:Jwƈ/»³gÚ†ÍMÄ©b_¦÷îHÙÃÓ8žô}â[_ IDATš]„AþãTÎ¥©¡úšQC¯’ìP‚.S‡Ò¥úÆíŽÏzÅÔ 6¿™Jc»ÑüÀDNVéJ½”Œß,‚¿Ï‡ŒSq_Çáû@Èß|(cû̵A 9ŸšÖÌ׬Ÿ¹šsÚquâ—¬ ²€äDµ~<¯&[Ä1v‡´¢^¶l Áª/@í :®¬¼H‚ƒq[”άžË¯%'óöÎQ÷‡ï– ·8µy6kÏat®HÏÉ}ùôí#ŒÙa'QÛvÛÔ Ï¦uYÀàW›RÖS̼nzBªÙ›ÚÝÚá}x6Ó¯¤7­-DÛÉwø[z|uKžú W ÍÍô$Zb3-›'¨=©Z>†ác‡rÛâB•Óèѱ Çgœ"Å£&½Ô%~ùpº1R°í†ú€[Ãw°+¨ͪä`ó¯w±â@áÚeáü®Š<”ä:ô؈¤5“é±ÿ.ŠGN ñÉ(n€&5¼cBïùD;W¡×¤žéù1FAž CþräH¹ÁÏQVÐä§Bá·+Óoê üÜ þÚ~Xú gâtNt¾˜¶âc4J·ÏîdíŠß8û”•¤Á­h-jû„stUØsNx¯l8<<Y–Ñét8::âææ†yóæeÏž=Y®›” ÑIAddä—)Q¢¡I@d/…àååE¼9I™€Sùit6êÜÍ1¤Û'ÌàpœP°kŠÝĉyãX}ýÞ#‚b$ù›÷gP‰Ãë—2ñÜ’Tnä-âCbŒÞÄúcAøµzTV3:¡*XR,¨ôh$@åMÃQßÒ¥¨RÙµj{ÂÒ£J’b«¢:1›Ë™FîQ¡qPcK±>ž)’- sÔ¦]F´ù¨W×ËkNû´'%•7¹ š:–ÕÁVr7èÇØ¼ó¦éQiÐbÁl}ð™bIÁªqD+=á ;vÜfh«v|.¹`?±”ÒÖ,!l_8#}- ‡¢mèY=åcŽg+”!€¦r©@çÏý86,—ŒZÞÎxm|h;ÀÝŒê±{RV]Ê}З_õ!aÐTöÇ^g垬µ&a²È[õC÷Îg1ƒùþ¬ñµšÓRä¯ç—¿°EsjÛ~hLÇ‚:\w3wçMLÊ£ÛÑ?ý\¼ÑÌ—wp"2-Å]¿Bœ¡ž:‰k©±„$9Sªz Ü9Ä­;×I@~|3¶x®;Ÿþ&Š 'C‘êzbP‘½p¶X‰:ü~À2äì9bZùá¢[b±ºzT­R„»¯z= m!-€[[·r!Ö‚Bg‡Ò©~NœT`ÌòyÆ‘¢õËb;6…}ÁÉØ;~ãP«‘4,îĉcV@´‰ ‡o“ð„?;•ÁG%‘ˆÄ¬v”Eú$…ðí?±' 6mxA]1êT1piÑ_\K´‘œØ´6“ëQÁc7ÛâlÜÚ}”´NÎá\J¡¹n'£¬€•ÛçC±WΫšV0_ÝÍéhLÐù0lCÙs)íï4)ðª†ätVA’hÑ(‚ðZ±…²_@ZyÉÄÙP¨×5O ©Á[X°¹"c£¶ÁÂÆñ[“>' –‹¿³û¦ ;¸{ ×Zuáí|ZÎecõL×QY›‘-Šã»ïÒ¾aerlÙHtþwxKs‰¥—³õL©˜‚8~*ýMìeŽÞ±ÓÉÇ ™èŒKæO.têLmß_ñPãW»©Ç§só‰…f¯ZŸÓ1×1fϾt¿A¡&W%*ºñ럗I°)¼ŸM'ÛRÒýÞ±d^6OJ[€[;r'U¹y!¹ANœT*teëS4a£Ž…c¶Áõ={ oV—ŠÞ¿²{w¿[™›ïrWSˆÚeáì¼ë˜:A*ÜËÖ¡pìFî»E‚ &P»öpöü~ŠðT¢Ïs(XáÓôü(.‚ ÏNåZN]Ërkí(.š08ããb _"S¿éÏu“Õº¡o†L=HÌÞÉt?!aJJEíQœÆ=3øK3CÇüνYø2ÒäïÌÿÎéï¢8ùÃ\~ Mþ^¯l8GŽDE=^õ´à/€)ÅN¼I…»§îžO\Ʀ؉L²PÊâÅHHMÅ”’ù)QìvÀnWPPPìvìö‡kÁÛ㟩Ü+Ó¦—WO`ýÉôJk¸~*,mÝSI„W”ÍlÂ&ëÒ‚qHhôs2V°E²}ügl—´¸úV¤uŸ±LÈ1‘Q?bq.CÓò)˜x3;©F+*Oõƒ”¤ÁA©É@_¤!okO3ÿbvH%T* ¡ÛaP6àö?¹Ü®+rj8óÁ£–=Õ„ :õƒÐ—¤Ñ£¶š°(ò¼;Œ¡5.1«ßd.¦æ¢æ§Cû•#c¿ÙÂÝ 5’S)>ê^ž‹KÆr&A}†ä¨Ü©úÙ'äÙ7“¥×RP$íSÏGJbÚ£*)áœþm-'ê¦z~ûc“±%'¦õBÄÈÃ?±¾~-:W΃öìµ×ª×È_Ï)!¡/Ú±½ ²ëë¾ü(S¨á žÐí¨YìΔzú¹x³Ù1'$?˜·LQPP¡’óuÖŒŸM³öm>ï#"¬gÙšÝÜzBçIïK­¶mhPÚÕŠÊ-?šÄç>W9Q´a;ZÕ*Š»ÊŠMã…·ú.`¹³™IS’iÛ®/³Û9ñëJVüq9=`m%)6%½<¦`·) ©žÜWéqw‘1]5>8?6#QF%< ¨H옢â0g’QìÉq$KŽx8ÊéìpOKŸ…¸ˆ iðÒ› I|ð$f7Fa”ñvRAzØ”˜z?ÿÚmVRMæ½*Jv΀$=²\Æ<£`·+ØS¤Þß™‰ln]Ax•ØSˆO~P¿¡( d:ŠôHãöTnïùƒ[­zQìÒ|öÜ¡ÅìxâܾéçõÁWvRâ÷GýQ¬IÄYp7<¡Q^†õ¬þw~×'mïѲÀ›ÊFôÉ]uhB•;¹\»<ê‹K¸bLrùi49*Ó²}S*æÕcKG_ Ò­Ç—S’.ñçi™^u °>TOÉžúäÞò²g º~”—óæq!ÃÈ*²Á[<±÷‡M¶aŒ1aO?½lnØ¡¬˜Ö™E…„Œ³3Ÿ÷™¸¸iÚ÷’ŒVÃÄžÝÉ­NïQ%Çþt{‡2ö3̹‘ 8dL5Ž^NNâØLD›”‹í7? ‚ ™R9—¦ãˆnøœÉ7û¢ÒŸÛ%TöxmØÎµx+Á©¿N2¬2yµ‰MI%)½Ê55æ2®ÝM£ñU(æ¼…ÐØÇ *æ–qÊ]‰öCF1Áy#×Ýz­ê`ßT¯lÀËË‹ÄÄÄûïoܸ‘­õL) I)©„GdÞ¸dÉ’D“OàÂż½½1ZHNqxâòÿœ„ƒï[ä³]eñ¥1|‰ ¼a,‘7ˆ1”'§AâZª’9ó;’ýpkU%•ø clÝ×’:5KàþK0¶JM(½ ÿ;Ù© ±Tusä„aß“6¿Œ,_/¢âÁ¤Vö$_¥ñ,}@B–Uà÷Kjl`̸dyš$2VÌΜö%*UZÏÙ×í,ò×sÊ_;¦²È^×ËÙy3ر–?ëO¢QiìÍP¡ö”s‘Ãí=±æ1%ê çŸaËÿJÓfè`¾ü0˜ËƒYJCÖƒéVö _ŸÅµ$)mžÀwžo2JtfH/~3Ž­Á)h }ÌŒ1Ó¿µeK'ìàÇ"M8|]ï`fú8ÿ(oO&&ÞŠÁËñA¾–ñr´“cÊLÍ|붸«\ˆý˜ÊÕó²îæÍL†þVúlID$ëðtVCú•Aåè…#F¢’ž1Ç*i‡#ɪûÉŽn8–sаjߜŨᧉµ;S}ô:>qÍnüuÛ :”<§£„ñ ß<éNöàíÏ>Â÷ÔæŸ{xZ[r,)ª¸ê$Òæ=’qpsHÿû|–²¹ cT–;;6b a¶_”γ3àÞ¯‡ë¹Kc;5‡€ÇZÛ1ŘÀÉ'™Óìd Š’‚ ÏŸä\Š#úPúü<¾ùéêƒû—5–àx ¹\´H¤7þ‘µÈ¶Ô'6S—$’=óÓôRl$Ý=Å®ã Ô­P· ·Ä´¦/˜ôHƒ)I’Òöe âçìœÞ;7!!Ûë˜,vL©ñØ;J&ÿìŠØ”DlØî¿7Y0YŸ¡¢L2P¹ïdf̘ÁŒ3˜Ü» ®’„ÎÕÉCÒ“ZºÝ£2P¹ÿTfÍš•þ&ãÚç{µ#ô‚ ` ?Êž|¼ÿniÜÔjÜJ5§eáXº‹ÝÍòÅsãªS2†ÜiZ7 —o'åàíÆùÞv8›7C…øs;¸æÞ*y£‘(Ò°5å­§ØuˌʭÍK%°{Wp6‡IJ{È´¿Ý‰Å]egŠ6zŸbÆ3œ{äa35˜½‡”iÕ"Ž2ïJ´lêCðÞ3D[’¸j!WÕ·È­—@Ò“·J òXîoMn÷ÂgÕ<1Ÿ™Kß~ýé7pbÀðœO‰cÏôáLXó“úö§oÿôïÁ?ÐBèo6í/By° }¾ŠT,â‰^’Λrïµ§¼õ4{ƒÌ¨\ü¨\.?nZ Tä®Òš6…b9zøîk7¤™È_Ï)ý@Ôí(Tù«QÆ[ƒ„ŒS¡ªTöNâV¨ E“1e}.þËTN¾”(èNkb8wc,¨´jÀNrB *w_<5 Ijô.zHŽ%>EAv)FÝÚyÑ<×ÔHÈŽ.èlIÄ&¤‚Æ“²õ*ã¡IûNŸ«8E|±‘y—ˆ ­úY{˜¸ºý4Rå÷©‘G$iÉUõ]ªë.±ój6+´SƒÙúÓYœš ¦Ï»åÈãªG«wÆË×.ÿ°&ÕÈîÉ”x¿>…UHÊ7«Wà^NÇ<ëÓV*Ñ·¸—-O^½„ÊP€º-J£2Aþãl$…EbËY‰²>$Ù…âšQøþ­L©lGºW¹Ëšy‹™ûcÕºw ´“¸dIIàÂÎËêu¦e…Ü8iµ8å©H›Ok¡9»K‰÷Jš’Í©SÀIr `Ýæø¥œãÐíT°Æï€_ÅB8©$t¹ªÑ¼ŠK¶+ÿ‹‘$»y|$ é¿^°Çqv×M|𶦲t–™ÍËkO!!Y…k^/´’„$ëp1¨0ÇÅb²K ¼CÃB™—†Sƒw³7© ­Z• nÿ¡ôi;2RáQõS>)| ÿõ—IQkÐhÒþ«%°„žàTb~šÖ/‚£JB—«*Í+8¦þåg(›Û‰=»“ëžMh]ÃgŒÆàIþ¢ùq–%ó»p­Ñ€ú%-œÜû¤Þ^6bÎí#г­kú⤖Ñ{ú’ßõ?ÒŠ@á%œJÒaD?Ê]^ÈÔŸ®’"§ß7d Rï°w_ %?jÍ[žd_Þy¿"ªK‡ 6kÈQ¡2Ås‘и£Ñ‡µ0\ÙÃÕ¤§ÕzÈòT¤a5OŒ·ˆÁßN­V£Ñ<¸£Ë²ŒÙüðøµˆ/ªT/Nm2YIIÃÓËO/Ï'.cWì$$ÅãbÅ]H±`4f¥} %™³+¦±þfúI¶%“¨(8&&£8¸áÕaØ“9·b:nÝ«Z—p­ÜƒUÿyrAøØÂØ6{>}z2o• RR VÍà× xùPùÃvô+œ¨´%…rñÀb&¯¿=ï‡Ô÷¸ÊÿNÆd»G¡=ö æç¥ÏçÓXÕOMJÈ ~ž±†K&>µQ d; ² K¹¶–oWB÷þsiå¢Â|˜µ3Öqã±'¶Tnþ<‹ÿ}Þ‹¯·Å`‹çÚÎEÌÙŽM³Ëç°µë'Œ[ÜG•¤»§Ø8}9§“л’¿D) ‡9" &&ãtGúÌv¦¸bSIŸÝ2d!Ñ¢`5Æ—ŒM_àþvTÄ 2¦iÏž öÖf"¯`å䵜MRÜœ)Õª ½‹¸£EÁzž]ó¿å§€×p!‘¿žOþ2¦Â,ÈÝ•S–ÑO/a»Åᦳöºt®òW4–LÏÅ»iº¤÷¥AïO©–KdO!òÊn–®¿ŽáûãÈ;]ùvESn¬Ï”ë91¸#3VvÄrŠÍî'¼ÞóL‚ñüz~¹ÖóWÑ#!ˆƒ¿þΙ¸*h|ªóyïäwT¡¤ÆpПg“PÈñLûL:³‚i¿v¡Û˜E|îÉ!gØä?¾0“yy%3¿ì¢i¿‘,«ʶIcøýÇ=”ûük–·H&òâ_lúë6Í3 œ[C9°;ž6Ÿ¨X=+œÇžº$J7®€£3ô›óðykyFï `ý¬ ôèõKZJ$a˶@ŠHáÆ3”ÍmQû˜3Ã…Ï?Å¢î …£ÿcÚ÷A$¢xq7ºõ§ªi£3™èÛ¾ƒYsÜèþÉ8wÓ‚ù6NÏÿŸ¸¸ ‚ðL$\Ê·ã]_Gð¼Æ¾IÜ3~K®q{Ó 9~ÁgÓWà¡1vj3–Ÿ%I‘qÏýÝzô%—£ ,±ý…)«“IµÇCs[c 8¼Š©k®dc::áYiµZ F£•J…N§#<<ü¡e$WWWÅÑÑñ%%ñÅ(ätžúŸÓ².Ë! kU mS >JÀÛÛÿÕá_[Ž€ÄÒYn_û]F-ÁöqÓ9t¯ÂOWœnßtÁ¼p þÔnËÞõ:º!! 'àÉôx‘'®«Â½æÆÔ=Ë”IÛDwyAxF£‘çu3¤˜_Ã@¢ ‚ ‚ ‚ ¯ Ÿ&ã™R}C'ì"JÔ ‚ ‚ð½NûPŒC’$œqwwÇÑÑ‘ˆˆbbb°ÛDë_ù! ÿ ›9ìiã¥H™ü ÕŠÍžúà½bÁúŒU†aX4j °EeÓq•ºt¥y¹¼¸ê5h nä,1≠‚ ‚ ‚ ‚ ü7Éneù ¹7Ÿ ZAAÈEQHHH ((ˆK—.õPð^“! ÿ.›%+Þž^x{z=y!»V+î”(^0ý³À´uÿ)•н'Sñþ>®°è«ù\HNââÚïXÝšæíÓØ%m¾<ã,”aAAAAAÞxê<¼?ní Ú¸µ}ßNx|Ô@AA„è:·uÍû…Óª½w–C@×ô;M‹V-:kÓ†€^uƒ½‹‹¢~®“Ô ‚ð’‰! AAAAAAx=:tv¼™=€­&öì½N¢)*Óeþø}Øt\½jDþ] DqøP0vkÞ7ô¬‚ð¼¨å7rô|AAAAAAÞod¨3)ù.ÀîÃY/ç \=Fè‰Ü¨ÐeH´^ý¿‘JAAAAAAA„çë ݇büË?yhAAAAAAA„׋ÇTAAx©p{{ßOnM>ÍËN‹ ‚ ¯ Ù‹—1±¡òËN‹ ‚ ‚ ¼$od`A„„6w->éÞžZ±Ç]g× X{4 «Æ‹òÍÚñ~Ý·(ì¡sw®e醓D[lAå^ƒa“[piÂ(6†(õþti^m ¡'cÉÒ­Ü0* éñ­×™®­Þ¦€3$ÞÚÏOKV³÷Ž%Cz ez1íó$f[Å 3ÈÎ%hÞ³/mòeüU¤>Ø·ìVš¦ZÓà­¸jm„lÏØ_n“!y iÉQñ=:´¬K¹|ÎÈ)aœÞ²‚¥›/“hO_FíÉ[mzÓ«™MÃF±9ô¡-<,Óee<+}HN (æ®Âtu‹V=r|é´~|6s4uœ|¤\œIÏoOcBÂѯŸ}ÚŒ·ò:ƒñ.ç¶ù³,cz_""½(ÚÂtž>–ú®Oøîî:†ŽÚB˜íî_6S&Pq÷pFm ãþ®t~tùn8ù~Âä³›X•KD?¹ ‚ ‚ ‚ ‚‘„¡@}>ïÿ 傦ÑwÖy’Ó¿‘ÝÊÒ²ëÇÔ/•ƒ=ž ›X¾rJqzÎNuãۊeû¸/Y}3C¥29ßý†©írßÿÄn ãÒþ ¬\LÔã¼"Dø(X° 6bûö¿žøºxñ¢—DAþ-ê¼´èÿ)EÏÏbà7W x[†õ@“àqü¥ÆIÊö9ÿcÒ­D´ÒdOº fêáøô “ŒW•Æ ÛÎ’p.?£oc‰ z°'ʋڽ†3°sÜ!µP|˜›ýßõcBø½7ƒ?$dø*®¥¤§Gr¡LÓ2|C YÂѯ}ú5@}-’äG‚S’CQ>Ù¿“KøvÀiBMv$Iz<¦rÂ×Ï…›¾fѹ(´EZ0xX_>º1˜…“‘]ËÓn`7*%^&ÖúX á!Y-+{סwjD.ûŠnÇMø6Ì—ƒÚpgøÜ0?zÞðÒ„òë¨qüžàSìÖ´À¢¶­û´Äcû$úü¾4²í. aÙõG7ôŠùKä¯)5ÿþ]X#:o+&-ÃïC'°/VÅŽíE´­¡>Ióš•ðùówBÓ#À:ßZT0°îl–؎ƾàt‚ ‚ðfy¬À)‚ ‚ð"éÉWÿ ¶ô"èvâÃ10Pê“^4°ÿÈ„{ ×§Õð/éÕô2#~¹Ââ>Ÿ³Tº¿!ôE;1±§–³á–'îÊìÏб;ˆ²kñ(Ö„ÞCzÐíöu&ïåuë'ñ&C@ÿ :uYòèážÚ[l‘L_óèáíÐãe'W„:WUª{ÞbÓïç‰IM%æüïl ÌIí·s¡¶„q`ý¯º‡E±a >Áñ0Þ†C‘©sQ³žÛNm7àW§$æÃ¿°/Ø„ÕÌþ_b)߀b 9+–Çéú&þºÕÏå-?pXU•†…õ÷Ó#{V¤qá(víÁŠ‚9.˜ýßfÖÎðGnö*Ü*µåÔM,üé$¡¦´[²¢<¡¶ÄÃñµËÙt:Œd›•øG8¡'ONGT€ÝEÀŸÓ³ø(ñvéáuõ%è:{9“[çC“å²*ÜÊÔ&ô_üv<³5‘ëÛæ¼CuêÐ=¶•Ág⹓‚ÅbÁb±`µ¥§]¥ÇEk"øê]Lv;¦«58;¼~·<‘¿DþzÑ» ›Í†Í®   ØìéïU¸–nÍï–âᅧ¿ N€äD‰Öƒ˜4g +ýýY>w «¦±¨-LçßñYÃÖôÿ-3ç/bÎèŽT)Q—ÏGMæ»Ù X4ãKÞ+b@ÂJØÑ}„å¨I%Ÿ{muä¯õ×vq>NÁµÆ–OkIžô¯Õ^•ùhäl–ûû³bîh:UñB-{QÂr¾k/­e£:7ïOõÇÿ›Æø¤%Š‚Íbéðª¸H™lã^Ú§O¦]…:tŸ²ÿ¥ƒ(—u›AAx½i ÓyÆ ¾hÞž¾eÆÜÌõ<ÒJ“’¾MûL`ÖÂøû¯àû‰=¨›G €ìZŽvÃf°ÔßÿELØ„¼š'žÏ½2C—Χ[1*ÚŒñ÷gV‡hä4›´œoû #ãZ¦ƒ¦.b•¿?ËçŒá³ÚyÑI”0ŸqËÓ¤ÿ VøÏ¥K- %WÍ®LX° ÿ• ù¶_c|µ÷Ê‚i|›¶=ÿ¥3ÞÆ‡GŠ•‚ ‚ o ÅBbÈIVŽÂÆÀG:+Hj N2ñ7¯aV°%q5ÄŒÎY ›Õr¿.Ìb3PºyeÌ{¶pÙø”vJ*1W÷³ïŽ„g.g1 Ç+âõ¬­|I¼Ô èßy0C&•%\uˆáÓÊ=ö¦:ĂɃi\nôËN® ÿG\“ïnJ¿ *É„q/â6ゲ#ùª~@c÷ëì<y?X¦-Pwœ.²íè¾0s IDAT\ŠìF>o5±·b¸×¦Ê@´:'=4¨5j«õAƒv[Q)zr¦Ê@ÏÛ É¼£‘i]鬑g8t9ÒC•zòUÊGÊ]¾üŽy 0ûëÞ4ósäiu!*—B”òˆãòÍ쀒r‡cGnb|R³.k·.žãÒmãS–UãQÀ{Dq÷NŽ9’›q|ó8¡zd;*3Z}qzÌ^Žÿª¥Ìד¦EÒÎCÊu6n¢JÏî¼[µ2ÿgï¾Ã£(úŽ÷öîÒ{’jè½÷ÞAé( ½w)JDD”"½ƒ¥¨¨(*Mzï=„ ¤÷r—K®ìûGB „Eùøä‰ÜíÍÍíMvf§ü¦Õ€AT‰ø_®§f}Óמ(_¢|ý[d×Ú ÙÝÖOèßg .¡ç‡mñÕŠ¨GØðÅúöÈgiiг=E­2_¬ñ¤n¶|1žÑ£gpȱÃ?¬ÈõS÷áhæ^ð¦]š¸©Àu†CážÔ©ê‘1k]º­¸¾ßŸ¤¬÷j/Z~8ˆ !kÛ·/cÖ…QeÐp»%sãR,.¥ á ìZ–ŠÚ ªPÂQÙ™b¥?sœCž™·&još¾_’›«>bа%øë_Ù)A„‡ÆšãøaúxÆŒú˜õQ5Ü¿:.*PŒñÜ>µ…ÙcûÓ«ï¶$W¡{ײØI¼[ô¤™ö&õíEŸAŸ°âÏóD›²<*é6gB­)ZÜ 5ö~Õq F*Sw5Hv…(ïÇÅkqà^Ÿá#ê£ß:…½ú0bá¼»£[1ëÌv¤–Âm;‘çô|F ˆ;é¨ó5cxß²„|3š¾}F2ï”#•ófΓݩի=yÏ``¯Þ øh>?ŸÅ V ‚ ‚ðŸe&!à—cŒ<Õ§$sù—Xš§OÓ*Ôl?„Þ…®óËŽ Ò³ªÎ×€¶Eî±cÿ}²_ÿûI“_êzFqú\äó^ 1ü¬l Õ³µ1ú°§~»X;h4bcóoç6Ú‚t™1—¡¥ÿ™ÌIV^Ôy¿ }ܘIhÝKÓ¤Û@ú6÷yb°BÒzP¶IgzÈÀ~]iU5?¶*@v¦|»¼SÆINá ÒZ!›Ó0>ì@°`L5¢²²A#²;§|Ãwë–3£·/?läpdæ”dK±¦Õ‘ÎýÅu’- ƇƒpŠ) £¢ÅNk&âÒ LÅZPÓÛ Ie‹wv4ɧÆò`e¢Ö‡† œ¹¾ë" Ï‹±¡²ÆÕÙ—^„lžÊ¨¡£™sЖwGõ ´í3†èÔžÔéÝ ¯sù38k³ ¦pö­ZÀ†Óq<{+Q5fƒùѤbÄ`+;-R–tL¡¿3uØ÷ïCïA“XÎ¥–‹ 0qò/Î)hÓ­ïWJåèŸÇËEv_7¢|=‡(_ÿNåQ,鞎$ÝœBàáCDºW¡’§0ë†kQ,ŠðK—‰·öÄñáÆ"f‚ž"¤Gq=Ä@ú­ý\ˆ1bàþÕp,Î^Ç›c8wð>â©ëu© ¹Æþk)OEoTç©N]¯0vn¿B¼ÉD¼ÿΤ f)[b._C—¯ÞÖ*œJVÃùÖNvÝÏCµ"ö¨l PÁ#– ×rLÃ1£Ý¡RˆÚû3‡ïÄ“š–þœr%‚ ÿfîDùú»ˆòõbTØ{8 ö|—i+ZdÔá’ŒV‡• Töø5îLûºÅpV1kí]“òx9%Q£`ç6_¹Mý\¸å]ÕíM„¦©ps³] )+c)1¬ :dv`YÐÇÄ“þ°Ñ¥ÂÖÅöÉ×XtÄ> £¤pqõt¾iÓ™ŽS—Ò#h/߯û‰“áéÿ‘v› ‚  ݩ;rmâÖ0nä9R\*ÒyÔ8&;~Í´FI‘ÝjС²žŸ_GÿŒFÓ£=€e켪Ðeô$¦:LgÊ–§W ¯ž~Š÷’(ŠÂÕ€«ÙãîîNbš7)o[éÖæ£|qkB‘¢˜1Äqä×`RKwÄËé±cÕn/¨æþ" f0Üåü•Jt,å‹ÝÍRbÐu¦¼ŸÄfáÂkÍH¼MyòØJÜJW@²!¯¯I·cž¬ä”tCN³ûH[ê×*ó¯!˜+· Xì6†fÅ0%n¤qAW4‡ãI4î…q³ÄoEÇ­K™¼#ãpÙ³9Sk†²ïž${J5¯„ñäs‰Ö¢#22 w{dȬҠU™I7eS«Ë®Tí;‰ÞùzÞNBÒþîî#±w¢P•(€³|™T3 u§sáá)Ï¿H*LL VêS^:ÏÜãá¤+~m?œhÈø¦…ÙxéoR ^Q¾þ.¢|½ ºXÆÐ}|2yYFCmJ÷cÌûîl›6Ý!4…º3{JÁ'Žy‘oБA]i^µ"eUø¯¾Ivó¿Ìºté7ùnÌ Nd-é9jO“eñòŠâä­$âmΓҪ:eÊDºýaéÏIC[ä…ó.‚ ožÌ´/g1ýÔsÎØ£N²ÊO£¾óùì,^¼™zR;ïƒ Ë*K¶bÐäÙ,^¼˜Å_ÂûÅm2ÖÑ( Ú‚M4õk-^ÌìI=©á©yôº­2u.‹/bÖø¨•OûÜýÔ®…ñ’£Œz°¼ß‚>ì÷’Íd]Á#ipѤ“bztll"OdÀ’½`N…½xV¤PAx˜¢Ns(,?ï´*“ZS©V´-ÏÉaXœü(_<NV*@Æ6_%š×ÏCòÛ$Jy¨ÙÔ‡{{Nõ°2L%pßEäší©ãmlíMíöu°¹~€ë)«á2öY•±õªB—aí±=¶…3ñTÎiY*‰CCr9»ÊÀí½§°Ôü€ÖÅeüš¼ƒŸþ"ç"³ìÒ »PµÏ$úæ=ÊüE»¸gR£ÑhШUÏ¿>¨½h:d,½«g^Ûr¤xe7›ðne4²Ešt ¼é<ƒÒ²¤#a¿2•Џa­ÉÊrmºPÞ|‘ÃAi˜âƒI°+AU?'d@íRœe쉽óÆí?!Ê×sˆòõ±py?®Íi_˵ŒÚÖ _?_d ÙÖ+³Žø¤tP»Q¶aU\_fJ¡%ËûïâÑ¢UT—Ù˜ýÆ»¦ð“‰ô¥]»Ê䳕‘µöxòÃËV%…ÀsѸת‡oü®'Y0Å\檹$u«9qÿL0©ÏKCAÞJ* 4kJ GIëE­Öoã®AÆÚÉRHLS‹Q¿®Oæ*5®Å‹“ÏNÅ@\hzIƒF¥Éáq RC8{ß‘*5‹cºr‰“…¤çH(؈zžÑœ»•Œ‚…ÄËû¹éØ€VÝÑH6êñNé4Î &û`‚f⯞&£MK:!Kj\Ë7£ŽGfëPv¢H‰ü8ª%caaI˜ÕÚç´AAþ›C÷t®T¨ì‹ $­'åjEy‡¸Ì>Dɱ<íêYqnÛYžý9 [¯J4®î†îN‰bð÷µ V¿ D'¥£( þW³_ìááÎdOª!ûì*bnŸä§Së¸ ^M?ä£Î­8ç¿‘ÛjW*—‰çËù_e¶§t·‰ôéÂôågI4&|þw–ýp“Èt7jž@§ö—¸°â—Zôí_ݯ‹™x*œ=±I6d¬h‘¬(RQfÙ ¬Ò¹RgÈx:µ?ÏåUþœ«Ñ«-’˜ÉØ z|[fØ€„|õ;÷ŸÙ«-aåìŠVŸÄ\ô~Kj-2fŒ]s:Ù Y0“•ˆRÒ9€1+Wx™#økÉ:<‡aáZ$]0Ç6,à·#¸{Pù½¡ +œ1dÖ…síèjfýˆÅç=ºÞäÇóñ­>TÐùo`Ꭰœ¶ŠÞZ#1þ;Y¼ò4‰  ö¡ýçÓhç#cLæüÞ%ÌØ~½"ãY½Âö°*"÷0†›?0wÓô±ˆvŽ*t÷NòãüŸ¸¥gEö¬C§zžØÑ)K;oVýºñùŠ‘X¡  9Äš¹· Ó›‰ ¸Š±k+L¿¬É¸i1Gp>ІuâØ˜¹§ð³Òø/}‚ ‚[þ6´Ÿ¾’ñ.2I·ö²béi,ftÛ~âÜè®ÌYÓ }Øyþüë(Q T8—Ñã‹â¤V0%ßãÜk8«¯Qv›AIáöùòuwäÀÖðŒ‰s±þ\6vå]éOâ3:ÌqGY¶Ø•þ½f°z¸5–”Ný8M×ô(dßÏb ßÅ’oó2lØ"Öiõ„^ØÍÞ«ÉTìñk3š‰åÜÑ*fôWؾv÷³Û˜‚ ‚ ÿUé·Ù²ðgz÷ËâŽö¨þ{X²ì±f™Þ®ªØ•êÅÞ?9{ùB¶Ç¸»»³å¸¸Ó‡s·ü^(}Ï»LSˆ_'/䢩 ]¦Ž&ÿ¶)Ì;„h‹tgÚPG6OYΕ'Ǩp­÷“kâËÙ‡1×ÇÔÆW™5c;áßÔh3Ò,¸c*_KÀ’ùº)uÎð嬃«ajÓëÌ™ñ'a&=3~rm.ÌœÁÎðgMÙPá\¡ŠðãV’Ÿ˜"ã^ã=Ú8fóîû¤’m1Úv­HÈÖŸ8Ÿ9…DãÓŒîŒìÞ|€ph¼Ó½…–ýwò¶…Óþv:Ž¿ë:§Óé0™Do ‚ ‚ o8mz}=ϵ#˜sñ¿±‘… ‚ ‚ ü©Õêã+€_€Ål"16Eq¢x‰â9g0ÝF—˜ÿù ªì(T÷ZU/Œ“d¬qÃUþØf zãÃYŠ!™tÙ ­ Éœj­ÛP§„“ •“š”Ó€ [[H‰A—혭]bÚÃaŠEI¨°s³GíÞœf7Ê|OÏM­ xöš}³É ²6WJIO &Íw{5ħ*l\‘õ×ÑefL’5¨,FÌb#>AAAAø‰­AAá¿F ¿“Ù€Y§®úçÚlÒcL}þ"wk¿Î nëÊ®¹s9š†Ú·ŸŽö}ì{kT¤bTö®Ø˜SHJ“ñi5ˆn¥Î°pÞjîè%<gRu ©‰©`çŠ ’ž·UP²Tµ ×c ?ÂW³öýB1Ú-¤%$a¶uçá˜î³˜â¸˜F›Ê¥ñŒºD¬¶ •Ê9w1„ d ; Òæ0ˆ-‚ ‚ ‚ ‚ ‚ ‚ BvTÿvÞ$fs:¤e„~•røň)íy£ ²=Z‹ŽÄd#¨](Y»ÎO É«ðiPŸ¢*$m^ª6)ƒ|ç !i*¬¬ÀHRš‚Ê¡05käËÍ·p’{ÎõhUÍÆÊÅoù9ù±p” —´ªâ½Z…ÚÆŸÂ>Øç¢”ãî-yRÐ%7s LDŸû‹SIEhÕ«?ýÞ«…Ó݃ì HÊX™,Ù· #©÷ïg ‚ ‚ ‚ ‚ð·J¿Í·#û3ç¢þùÇ ‚ ‚ ‚ðF+€_€YÑ# (”,Q"ç-A˜ºç¤¦ ¿þ;ïô£ÇŒ||Ÿ³»öTá±tÒºfM«ñ_SØI&ùÎ!¾]w$‹™ÔÝpiP{>ßžÔÈ+ì9xŠ˜Ú™ùŒ9ÊšµNtï4†YÝ´Æ¡¥óøùþ³sd‰;ɺUö¼×e_}`¤yáWV~{Ÿ”ç}ý=.×¢Aé|œŽ¼GÚÃgÌÄœÜÌú¬/0ưÿgö?–ʱeÜ’¸v8±Óªð:2™ÅÌAAAAAAþyêÿc4WrrrR^tãà·•Zÿ«®\ªÊé g³=ÆÃÃƒï¾ äЪb„©ýÿo¦-H—©#pßü Ë®>?œôë@e_‚í˵ó7ÎÆüŸC·’-…›t ªn¿çyë¨!7t:Ý oþ¬´ Ï]á/‚ ‚ ‚ ‚ ‚ ‚ðò¬­´/<Æ!V¿³b@cJã«™I3æ4(Éã!XL>ÓÙ•þŽD^ KÊuþÚ]¶{ ç–‰è3¿ó[R’üAAAAAA„$öÎEQ0›Í˜,‰8«£ùkE<‡Ö¤æø“~̓dÓ)L&ŠòR£¡o“.DýKnVÒINH"MDØA„‘ eG,cÉÀâX½‘é¿$mazÌ[θ*oÄTK×2¡¢íß“1AáõöÄuÿ5¯›…ÕßÖÖøÏPá\g«fwÂW󢯕pªóßÎë€Ï ¿6·4xo>ßN®Â¿ÓªËÝõDï]¾^?†.¢{ZAþ bp.H’„,ËàpšpNçîEö ~™Ó›Ä–OÆþÿ¯á‘°ò®G¯ÁïQ¿°#–„›ìÛ°œ'£1i<¨Ø¦ íV¢¨›¤Eá¿w«¶œãñ(é*—:Lšý.W?›Ä¯á¶”i?ˆþmÊã©5vöWV®ÚÁ-]ædIK¾Ú=3¨>©+‡3õh"J–üØ–Ƽ)Ì·ž[i ;–ä¡£è’ÿ$ŸŽ^OàcËëeç2´îÞ™f• â¤5öÛgLþ%c6Ÿ4Çt4y¨Õ}ÝÃEÖsÿÔo¬^³óQž³%“§Éf÷ÉÞÉãØx7$k 4îÍÀNµ)äIwŽðãÊo9x?§S’q¯Ú•¡½šRÂEEJÐQ~X¾žYŽ•lKÒkæ'4‹YÌÀé§Hyãæä¼Âò•«óÿ–”/­ýN¥‘㣇”«óðåyôØPáãå|\þ±:>åŸ\Éõ´g}—oš4‚v®c½ñÞ?‘ãŸNÿ%Ã9¸i6·ôÙ\žGg•ÚxÅ?ÁüdîiæØ³ü´î.÷^Ñû ‚ ÿE¯yÝü6Q¹PwÒ†8þ¸I¿ö°m¯Á³Æû |¿!¥<´ è‰¼úËü­Tq,Ñ„÷;7§zqOl$3úØ Nÿ¸Œ­¦wÝ»…D_ÝÎÂEg©0|mËz IâðwóY}<–œZÿX[CíB¹VÝèܬ E\4cøë»•üp6#/’½õËë8v,,Û{ˆ'È.”«[˜ð£çˆ~‰u h|é2{:UögâŸ΋•ýæMÂ÷çq|qqk“ã‰Ì|/+ŸÚT·ºÀ‘ÛÿOûñy¬)5|1“kÚdy<•_Ž`ñk·uœ¸ž‚ üû$l 5aÀè^TžÍй—I}ìÙìûá$l|ëйۻÔ+“[R9ù++×üÅÝÔlj7Mjv@×zÅp·2{ë[VmäHxÖ«¿L¾w¾bfÍ=Œ²‡3¨œ+3èóAxìúœ™;“¨:uÃü¯`ˆ¾ÅñmëØxð†7®?÷õ!€A^†&?ïŽîM‰Ë 1ý”|OF¦Uȧü-ã`Îîc™~7«BÍ=eƒFóÕñ·2îÕ[P8ü/VF˜q¬ÒŸ[Hlùl ¢Ýi0|cû„2néERdj÷G¯¢‘ÜL4á˜]~$GÊ·*‡þð¥IØ{—‘£š¢¾Mj–•õ’Mqº:¿3+ùrÄÂô$IÊæfõYé¨ñj9Š害hôL®¼i2|õdÜ¢s$åPAk¼š1¨ †GVE:3¶›7‡f ç³Ûà×v,ã>îJØÇ빑å~VöhȈ¡5‰Zý1}ΤR ÍX&ŒëBÈø >„“ì)×½?•RuÏï,x]½ÂòeÌÍùKÊjܵáü2ñS~Ïìѱ˜2Ê‘ÊWG ·¿ÍGÈÈ®Ó[Èrb!9ð gߨô_’’ʽs¹œô—…dãGÛžï2÷ø+VÒ#¹x2ò•¼— ‚ð_õš×ÍoÙ½*Í $a©OŸlÊhhªÜj3tpm’6|Á°‘(ŽyðÍg!¨ñ§s1¬õnLÏΞ¬=ù7 Ã8v$šwêUÅsç„g6é¬ Ô£ŠÝm¾¿1>–“ñ>ˆ#åßïNó+79v[Ÿã@úÿÏÀµåCéµòÁ¿Õäm6iMï°çîë8 U\OAþU’5¾M1®£;wC’²ÔKÏî‡s.\õÅuL˜wƒ$‡rt›<šÛÝ`Ü÷AYêb®52¨Z$KÇÏâl¢#•zMeäà ®}¾Ÿ˜gT†’UAÞ3¿s‹øtç}ÒqŒDÿ>•q?†`Ò8Q¨~?&öNôOØö²ûÛKÄØAx š¼Õ©åÄo¿_&.=¸Ë¿ókP^ÖʇÆÁá¶rìNFÅLJðYNG¨pó´ãaà,M>ê5ñ$p×b,voXŠ´c¿p0XQ¡Ÿa¬Ø”v˜S‰ôÿ‰iŸmÂ?9ûÛsÙ­ -‹F³÷p(FÒâC8¼äæîàɪR…KÕ.ÔO߯²-çÓgÔöÙ‡­F:*gÊÔÈKøŽí\ŠMǤ»ËÞ»H.ׂ2X—dÐ’uÌîäËÃèVZ_Ú iEê¶mÜy8!LCÞʱ¿¹Ý71š øs#ÇU5h^Ô:K:*\ÊÕ§`Ìn¶žŽ$͘ÄÍÝ¿pɶ& >0¥Â©r/úû]à‡±¼©Qå_]ùzÎùÏôv”/PÙºâH÷ã ÆŒsfÞe;é\ ‡¬/µ.J—GÒÐ-/­'/dÙ¬>”°Éʇ§³rÃF6¯_ÀÄÎeq’y˜öª u¨ÜqË7mdn{o¬_ð|<>φrcW0·w{LžÉüEËY³t½«ºf|’=¥:cÖÒ5lÜ´‘ï–~FŸîˆ€Ž‚ o»§ëæÙ+&Ðñ½™1gËV¯bþ˜V²–™<­fòí—MqPØ”çã5Kéï§m:Î\ËünE°$k?>˜¿ŽY ŠðÒÏ¥&_Æx\ÝÌ·ÇUÔj–qdû¼¸(÷8vê.ñz w¸|!ˆ  ñ¦E¯Fh-`Î÷Ç ŒN!UOð¥“\Š~ù™ŠO·5–3ë½f|0~ó–¬dÍÂñt¬P–6#¦1gþ¾Y5‡QM}2¿o yêôcú¢e¬X½!³m¶‘eCJa•|•_VýÈñÌfA'pOʃ¯“u1±GlKaþòLhìKÙ> Y7½5^j@r âÐe¬›Òoß–|øQ[¼œk1nÁ2ŒªŒýKíãa"âÄ!"òÔ¥šçƒµ3V¬W ë›û¸” < ã¬u¤B¯ñ ®èH¡®_°tÉT:újžÝ^}@ö ÙôuÌíèóh…Žm9F­ZÁˆ²OoVÌÆ‡÷&—ÚôiïÄÑ•?qCŸ1À¦PsFÍù†Í›¾eå—ƒ¨çùhÍd]Ö#¿`ñêoÙ¼é[V}5„FÞÚŒ'µEè³p!#:ô`ÂWsX¸|5+g¡A¾wXÙߨ=š2cýÚ{?z›ÒCXµz4ímŸ¾—(×qsVe|ÿkfѯŒmæV+jò5ʬÕß±yÓÚÇ®3‚ ÂÿM1’v޵S¾â· ¬…žÕŸg$üàzÖî &ÝLzìUŽ^J¹OïZ ¡±·ƒØÆQŒqܾƒÅÖí3.ã’Ê…êÆÒ"i37ùg­Q1&rçØ~nñqkX_†þ?*Tˆåø[„·‡Ú­ Ω÷ˆÐgÖVJ*áA:œý<Ÿ¬e{|k¶£…Ë-öœŠzX¹ZhL}{v^JB‘Èï)w7îáŒ*cÌmbå|vUƒ’Bàñ³„¦)HÙV¤jòÔnŠwðnNFgL³2F_àèµDÌHY^coÕü¤Þ·¢ùø¹¬Xµ’¥3FЦ˜}¶û]明¤F+ƒ)ýј9%ìN~g5˜¹ã…€{)ƒ°’5EÚ¡QÌFVO@%?HLB­•QL¦Gƒµæd¢S­È›×Õé¨q-äŠ%*˜„'2-Š; 6øúØ£d—ôëåÅ¡e[¹kzs‡5^]ùÒ>ûügäæ-)_ ²r@k]’aKÖ³yãZ–NJëâe É {+Gj~´œM›6°vÁú7,€Í›ØGa çØÑ8|ë—Ã9ãÃáXªEu§9üd¸Ù­Ã>lˆîç‰ôé9„y—‹Ð{L;|Óïpæ¾5~%ÝP#a_¬:n¡A¨Ê”ÇC ’]a*xÄs! þ¹+!dçJ4¶ú‹¯ÆfØ'[1ÕÈÄæ1|7õ#FŽøŒÝv-èÝÌ `JºËù?2®OzŒXÉÝbé]Ë `S²ƒë&òÝøa 4?£t\\8Ž9'“°«Ð‡qímÙ;}=úMç€cGÆö(IvcÀO’°)X“ó™0f$Ã??ˆË;}iê•åFÄÈ–ù¸iŒaû£:~×Ó¬(òÞXzù^`îÐ^ôž°cÓ‘ ªê”ù÷ aWæ=Z«wòù þLú# Ó ž§Y‘¯nn¬œÌè‘Ù°ÕLÃ>í)¢Q7ñí´aôü ?SvkhÔ»~¢G^AÈBåP†ÚªÌøx ÃFÍçJáÎô©éòüޤô`þXö†ÆhíkO6ýidØÆ²?‚x×*¾V´¾4ªgÏå=— 8pœôŠÍ)™9’iŒ8Ùx?zôoEYO«'ÚÕ²s)*çIäôþ›c²õtÁãÄj~¼žnZ[˜Î£»‘ÿü<÷ìÇ+nàSÑåa;Q1ÆxòGf~Ø—î½?æû¤ªôì^îÑ ¹ÚêâØ4õcF ǚȊôìV;)çûŸ¤óìv£Nµ<™ƒ×6©_®ìãF–B({4`Ôèf(»¾bpŸ¾ úd)ÞNÍÈ»&?µ=Î0oX/zŽ\ÉÝâ]rwAžÁLÂÕ£\Œ6’]'rÎýyYÈ®”(nKØ¥ÐlÚpf¢ÿÌi箌þ Uêweäûöÿá 9-Ø•¬)Ôn,ý¼0wéa¢r8N’í)P«!…R.pìžh=¾ QŸ¾+u9¼­Çà’Þs|Ñ{[ÁÃfð¿]A^YkÊ”†ñáý‚Ñ`DemƒFdšN]ËæïV0³O®nþŽƒjAÉ–âÍ«£:»›k:$ 60Œ»“#Zìž5uêm~5táÚÎ Ä?oÉ«ÊWg[\Kz¼i*ÃbæAÚîA™ç„åU 9RªaRN!ä‰ñ_NåS,é ÛNG’fNáÖÁCDºW¥²‡Žëbq-[;•-Ekû¶k7*QÚYÆÊ§>©\ŒÌÅÊs8ÇcPÀÈÍx3ÁOš®€1šwô8ú8#Š>˜3çƒH2)˜ã¯qê¾GO{ddóû`}…ÛÉ Šá>á2>E]QcK±&àì¯ IÅláðž ì+ÔÂ'ûQÔ'³—xŽ}þ‰˜ôÈëÜÖ;’ß%3QµhXÓ‰¿ýÅ­d3é§Ù}U¢T½Â<ÜÅ-õ[·] <Å@šIyáóñ4…´k{9mÌ$ܺN‚­nV`"æÊ¢ Xa—.gí‰c.Î ‚ð–1‡säðmôJFÝ{)\}œrµ—XzÈv–ÿa¢åØñŒindÛÒí‹Í@ŸË¦h3jÈçØ˜Š1ôKѲ|椱´Û|?m;ôU2w‹'÷¢AÁŒU”*[Wì”d¢’_Íö vãbÍ ¤|%sòE$aA!%(€(•yT¨] ’G Åÿ^*Š’BÐÕXl ù☥£rªDþå¸ûý\Õg?z«è¯³eÅQÜÞÿˆñêºy£ÿ¡ÏlŽáÌP<êT%¬ Ô£¢&€½Ï—ý(¯9µWŸ8ŠÄ‹»ð·©E}_-`‹_ýÒ¤Ÿ9Àl·õ•q¯ÛnùN³êÇ€‡ƒýš|U¨ìÌŸ»®‘d¶r„ßÏ=ŠÚœÈÓWÕ™QŒ1øŸ GrqÃöa¯°™»{q?]%™;þQÈžy±W=ë> ™ ‚q­q~°)Lýrpiÿ-žüúT¸”k@‘ø½l9|—¤ôt’#Bˆ|°—¤%’ƒž'2]Á{…ã!J®¯3‚ Â?H²¢@ËA´ÕìcýþÈl'õ[’®³wï=¼w¡_ßVä¹±ƒ]W“rŒÄ¨ÉßšÍ|°Ñªyº2Õàñî—|»i#›¾[ÁWlØ¿ò{®¼ìŒ®·œ¨O_€»º £zŧÖy6ïXËÄ9ýøvÛš'~¯ß¶†å_-a˰ñäŠ;Ë‚ üÃÌiz̲UÆ`k JZ*&0G³gZ_öHZœ|+ÓqøT>Ïó“ ÂèP–– ýâNÆÌg%]:h¬5HdÔƒ’Ú Fôéϯ쬋6¥–öK¯ææ†TB¥2¾g+G‚S0÷ŽîâZ—þTÊ«áÊÜöΤs÷—ùl°ëËÈù-±2„sáÐÂÒ‹­{r—d_šîƒ*puõT.&)`ýø³ zÿï˜÷[úLXD9…àSG ˆÕcoÈÒp°®3¡rS?pËÜLOµ§É@:ÊÛ˜¾+ãÔôÕ•/ úÛÏ>ÿoOù°`HNÉø_C$~ûž³ÇR³€GâS1§&“1_Çý?±¥q]zUõF{éæ·ªÅqŠÃÑïР¼3‡Ï§a‘$Žm ÅøDQÆÁÓg[¾XÕ2ãû—d´ª8ü­,Ä\öG×´<ÞN‰Ô*˜ÀÙ W‰«ÒæÅ\¸éSÕÜÏ͉±H|°ùŒ¢`V,¤ëÒ–7‹YARIH€&OUÚ¿×’Ê>Ö˜ÓÁÎWƒtÀLRpúwËSÌégÒ RÞÛBØá8L*Üœ­q¨0‰U52V•K²95ë\L‰´1<,üT¹õW;ÇAK©‘‹YgÎѧÒh°\·E+eü-š’#IÌz7õç#›Ü’–”úèMQPPeäWeO±¦]èP·.*f;êÐ7pƒ ‚ð{¼."s;'WJâ/íãnw©–g;»œëQÖr‘E©ðhš# cçnÉ‘$g·Òˬ'Vÿè[´<ó:#‚ ¼Z¼ gBËD6Lû‘©Ùõjðn3žk°`äW\MÏGÞã˜:ÁŽ©3¶“]ÓÏsˆÙSOPn§ ïr‰®=6ièÑÀF• žeßåñ_à2w«ýuoæÖk¯1ü¬l Õ³µ1ú°§~»X;h4bcóú/£¬¼¨Ý¾šã[9b@ABë^ŠzÍj㻃»ïó ‹^eëK•µ)ãã€Ú”ĽËG9tþ>zÉ™ò#oàïl÷O|c÷Ù„ÿ—1:8Û äµ•¸™®€dCÞv$ÝŽå‰!.%ÄàÓì<ÜžuJâ²5s•ÝÏw÷3kDSAaFšrEs(žt@ã^7%š„çlv/ÙSºE%L'fs+5·èˆˆHÃÆ=c² @¥A£2“n~±*U1„°ÕgìÏÈε>fNô³ìSl[²- óä…ñËh€Œ,ÓWRyï—LX‹›Û3q{Æñrž|^û>{B²N}6s; ©DœåK¤š­…Ór¤~ß’¸ºãëµ=PÉ2#X±ª1«ÇÏäPÜ›s¥z¥åK1æ|þߪò• I…Œ‰4cvy—P©2Vf¿9%ë1æhNŠ¢]Ý2xékP8þÂ<ÙD4£‹IÁx/ã'm'"k/›íyéNÙrFŠêβ5.é¼j–¡¤½=÷÷Ý%‡vOÉv›è¬ä<45œúw0yââ-Ôœ²ˆn™O§^ûžÕ—¾ä£ù ˆŠKâþÑe¬<“„¢ØŸd n×—ŒÙp‡_„¤äò†#ËQæb’õœZ6Š…W²þI8=#í\³‘ý‹mJöb\Ww~ûô3v†Ðþ€yŸz‰7AþËrª‹‹$Õðr’µ#j‰¸Hö”íü>nŸàn¡÷é\ú2kDçÝ3©œ+вd<|1›¿¢2\’C%†OiJ¼ø5ôÑ=¡%5”S[¤Jƒ1TöÖpðú üã? jM~¼sçÕLJÌeCEI<Ëš u™õɪD&pw 7^þYr(M×IÃ)se 3~ºñœÖ*\kt§­ãNÆU¤g›‚LùéÁ`éß_º,ñØw·-«UÀ³œŠË+s±ýÄÃÏi¯>É@à_§0i@©ËV”ÔcÆýlzÍeWjõíŽïùå,½œòÄû™Sã1¨òàd%AªÈØ8Ûdþ}j(Øq,Êcú´ÜL‘ÈÓj³ëåæ <ç>@ºÂ¾Û=i[É›[^e0Ÿ_Äí§n¯,èãô`ï½ Ùum¼T›WAø›iÈ×h8“;(üƒœÉ¸WkN‘èýì¿Ell,±±±ÄŸfw + æÇÖ£ XR 7’¯zE¼¬%¬ñ©Voã}‚Ÿ qö$ãý,ý%‘:CºSÞ!›:[eGÙÆ4ô6r3ö ío{=ˆÀ/@Qà^²EQ¸p5ÛcÜÝÝILó&å€U®¨ç“D´Rƒš^øí^?MÅÏ€Ú«5“Æ•dÏçó8‘`!#´Ž„MÑöŒQýá-¬Ý@X²‚­‡/…<’ˆËÍ_„6å‹[z ˆŒ¨1f ñAù5˜ÔÒñrzüXOüh7„Y]íQ¦„ëü6ûk’JöaLïh‹0j\* ¥Âð‘4sÓ í5žÌg͵Ҍ™×‹Ä¹#™wáï\­m"%NE©óX;0ãcØ1ÖÌù†KÅºÐÆ×|DZ¤ù£W$üœ‘«oyä7NÖëϬu- üiû‹÷ÂïÚ7||)™4Ë.VíªÃgCÛqvònïæ÷+é½h=ï]YÍÄÙ‡‰}é*…ÄËû¹e5œgVä°// $qqë~ZŽü„5uÂÙýå§üù¬öêS§(œ£éÔSņÙ´Ç%GÊ4¯„Œ\Tõ‰§î®Å”}·Ù²àgÀêöIÁ'Ù¾;ˆ% nÛÂٱݘ·¾º°óü±ë‘rwžy€BòÕýEuýn¦ä°Ñ·9r/ 93¨çg¬ …´{ìš9Íɹ˃ ‚ðŠh}iÑ©2ÎNÐû«•ô~øÄ]VŸÊQ;Š—) Ž*OáÒÚEììß“ÏVõÁNeáìÝwxEÀñï^Kré’PBïEz“¢ EA@Elô&½ ÒAª"EA@š‚R)Òkè½&´I ôr—K®ìûG IHõt>><ñîöæf÷fwçæ7%)äÛç­âr•=#!û~`SÝ™ è~±Kï’¹p‡´-äÄ`ÎoǪó b™¿@rtt”mmm_t>^ îªáÔhòKצlÊ»{Ãr—vkÙ½x!RUâÙöK†xïæ—øŽ|¤ù™ë2{Ì©¼Þa˜J˜:S#×”EiýåxšþÀŒ ·²Ì“^xª¢Íø¸-Ç7ìæA¶ ¬·òŽ£/2¦€¶.K‡kñhë.¥çASü->n‘ʾ G 3)q­×…NÅ®òÛ6ñcNxéèt:þ®ëœN§ÃòêzAþÕÔÅè4u}Ã÷‡‚ЙX¹×gÐŒn¤,Á’›…˜ò[Aá?Ȫ⾡ä‡?píyšreMù3b»…™?%Ü £´ñâÍ1ÓyûÎ4Fÿ$Fõ Ä£Í4æ4<̘¯gï ‚ ‚X[iž9Æ!F? D&¤"Ë27ürìîîŽÎdG²Á¦piª‹Ñ¨–[nr7Éãàæ”ÓÞãF>•m…cyjz$reýýç þ‚„•“ ý#â SÓN$0ÎŽÊ•½¸yæ©Ö^T¯] é½/Ì$>ŽG®ä½ÒŸ¤ÂAAøû¨\(í±áÑèÍj碸ªâ¹ *(‚ ‚ ¹SáVÙý‰ÜþÛ‚¿€dM‘’ΘnE—’>í³µ+E-D‡%ý}3°¼â”NÕéø¶~k/-h¡x IDATŠ ‚ ~fÌĤF#ㄜÇÀs‹lAoL@C¡Ò´öiJ-ÅuV>0`4ŸãtÂ(šW¶ÇïBÞCÛ•Z'´èˆÖ¥× 5¥øàË!4vQ€%†ßÏaK`~#%ÔÖj0%c,L½ÞßÁcØ5mÂÝ4˜C¸ƒ©t"†ôAÉrj f¥ j±ª´ ‚ /JòMÖ¯½È€Þßò£•‹ ¦øûœþi!»CEXA!w&B¶~ÉÈ¿;Y9žók¥zß|ÿ†‹Ec4·Ž-fñ‰h±„˜Ê›w§~Ň¥Ì<8ð#ß^Ó\ ‚ ‚ð÷àg`1›ˆNB–©P±BžÛL÷ÐÅbúgÉ–ò-jâà¤aø7 ‘P*м&Η|‰É£&lNN œ´ À Æ`þün:mÊóÙ˜ŽX) þh³É JM¡ €9á§vÝã¼[t¡bè#’Òó()Õ(,FÌ¢¦*‚  c$üÄ*¦žXõ¢3"‚ ‚ c<À’ ^tF^N¦¶OìÍöAAþ•Dø˜ÌÌ:Èàw#ï) Í&=Æä‚טS8T¡y¹8|¿”ãé |HvÕè1ìuêzœd_xîó¾Xð{ºu‹±+ø)²}|,ú”DR €µ—€Yë† b µœ©È ÔR´Rcš—ˆåÒÖ(ÒÆÒ(°q±G¡@'¦ªþTJ1Ô]AAAAA„—“ˆb<³9RÒBžRÿ 1¥UUàR³9%£Orú~±±±ÄÆÆóè2ÇiÜÈu^o5†rtÛ%TÍ>§ûÚø¸Úa¥Ö`mï€u!¿QcÌ"%|œ ×@S²5=úõ£_Ï.4+©ãüÎýÜLÌþkCQ’=,‚ ‚ ‚ ‚ ‚ ‚ ÂÿŸü ̲¥Ñ²L¥ŠóÞЈ٨Ë?1eê6-JØÑ+Dg5+'qûxÚ›âóç/<ÈýH¸ò3ß,kIÇvÚÊ1-XœšÈã œ‰/x®¬ȵ F4¯âɹˆ‡¤<ÙK¢Îl`MŽíSƒö²fyîi)ÊPÕ5›¾ÑˆÕõAAAAAAáÅQZ[[OÕh4/:¯)µJ©2†{sõú5¢"£žú'!qíJçIT¬Í;19‰ß}œ N&ç¬Í©Øè1f°$ÞáØÞS<4äÜÊ‚!2€+§³oÏöìÙÞý‡ð=sGúÂÌm&12¯zµ° ½C¨þ9‡îJZJ½ÞœâaÇ𽛈˜ZxFþ®ëœÑhÄbCÝAø·SàÔh óåšïM^ÀeOåÙžÙß‚É×—À§êA‘¦ ÝçÍ›¡9ñOt_“°­ø_NCŸ®í¨i¾Ä‰Û‰ˆ»ÇËʆjÃ`r•[ºó÷Õg5eè¾`.o…äT¸ñïJõ9ØPuÐB&ԸǑKјŸµ|fÛŽ'³t¨ ŽÜ"ñßP¨•n´œ¾ˆ^ÊS»¯ÏþÛLSšO¾žAËè㜠+Ôº9‚ ÏoüãuAA៤P(ž9Æ!F?³l@mJaöœ£¤óZã7ŠÓ§‚±˜Š½ôG×’t‹ý[ñýKmª&"Ïïà„D“ˆðß%¡õy“ÞúQ#h.C^'@ÒP¤v>êÔ‚ÅíQ¹üçjVî¼™­ÁTáܘ±³ÛãÿÕ$ö«êÓ¹k{^¯â‰ÏncÅê&ƒméft~¿ +ya§´x†?V¯ãàƒ¬•Új™Û;‰c×JûJ¼ýùÞ/v–i£×r/ýdUywdÖìÎͲ'k†3õpLöFà|÷C¦Dã<òœãâ"YãU¿]Þyê%Q¡'ôÒÖý´ÿDkj_ư\&WÙ4†‰»Âól×”èÈ”‘6ŒfÒÞÇiÛIÖoü]Û7¦’‡ Ãu¾=ŸKLÎðò‘Ðx½N·þòz){,qw9¼~)¿žÂ¤v£f».¼Ûâ5ʸXAÊcüýÊÊ-‰ÎÒ¦ó¤|Md{¸–*ïö£çÛÕñлø+Vî!@'ƒdM‰7ºÓ§s#|ì!ñÁq6¯ø™cRž«|(ªÒö£÷hùšŽ3¡;¦1eëÃ\g‹È3• >êK—×Ëáfe$&à›W¬çdxw•+¯½?ˆí´ì;‘aY>MÒàÙðS†ökFòŠ¡L?ÿT',…}9ÞìÒ…¶õ+àfm&þÞq6.ÿ…a©€„]…·éݳ=µ½l0ÅÞæÐúÙx.êÕœCr Ñ¤…¼k*c7ó¤©ÑBâͬMŠåq¾;¦Â£v#ÜNâWˆHþ3$j~зs³é¿.³Ò’­|hJÆ·S[á”õ=«>õ1ÿ†€Ú?ɺ*ávæožTb\dÏÏëØ ËõœþïÉy^¦´w-ëŒÓêë”ÏW‘d[Ž×k$qúTkÈĆï†5X¤×µ”ÎTmRŠð“—ˆzÕš  Ä¹^Fto†½‰(ÿ?Y4ÿwBŠ¥Ý£ »¦0iÓƒÌÙÂ4e{2w„5ËF-åfŠ&-f@ÙŒ´d QœÙ±† Ç’ÖoKB[²)ïumG£JžØ*dôá79½û76 D/Kh+ugÖp/¶Oüš#‘f@¶JOft`ãÄï9+nŠ/«œuS|0—þƺ]7UBAAxäÑ^•‘ºç0¤º_]ŒŸP¡áÇýèÚ¼ÎJ=!ç¶óÓê½im‡Ù()úÎL¾éâ•ùŒEŽÿñ-¬Ùt®€¶$áÿå%Q¾dYNñg‰ÇIÉþe½ÃDÓYL&J¥I’þÙ|.&]ñ%9•Ä8úþÃ$kŠ¿ÙÜz˜˜½UaG‰rÜß2¯E¡)ÛžQc‡ðIÀ(–ùeÜr•¸ÕkM©ð¬ˆ§&eP]]ËÄ…·I°¯Æ‡ã†3ôÝÛŒý-…•)W×óÕb"Lμöñ† }—»c~%0£µSr ZÛjèNÌ$0E¶\{m‰êN$É9ÚO”vnXÇeÖøŸ3ƒm²Éøô |÷ÄS©¼òôT#¬Æ^AÀ¶oXyõÛŠt3†!Ÿ0r©—¾éMï,—Kɾƒfv!Â?ïÑX’u:ök†”`ÊÒè¯Ä­ÙPÆwLæ÷%ãY‡ éUŒ ¨ŠÑ~XÊ__Ȉ™· âŒ2œ6ÁSÙ¥ÂÎ*Œßo`ÖƒD4>­6ásúâ›ÓͬåËŒCí^ i-±å«r£ÙÀqŒèÊØ¥WH-ý>ûzqüÛ¡|uÊuÁˆQ] ·–;}žž¡|I6åé:a0å.®àëá— Ó[$)—àL~é(pnØ—>u³lü7\ŒwàµÏ&1¨ ·g!*GÁP:֤ˈ¾ÔI¼I¬I›ãXºÓ°ÇHº•àN¼û<º„Æ­ Å 'YòÅצ¸S¿×ú áÎÔ}DZW§ûÐw°úcŸ æú‡Œù|$ºÐÉüñèßU»5ÇÞällþÛH6åxçÓwÐ-8ýÏ€eùU é)µ¸ÚA\Ðc ²9·¢aºÅ÷C¿ærÆí@¶`íÜ…cÑqjÖ–ÝJAeëEݾàó¡ïqwôºlP^ÿÿ2üôyi!ñÞy.flP˜òùJQâÚàc>®·‹ ÏÎïë‘“yxé|æC÷|öžkΊ°ðo`&öÜO|-eѧ,šÿ;RAX,FŠ´íC›ÓSÙþ0¯³ÊDÔ®´d&µ#>M{2¦ç@"oObg˜ µw[¾˜ò>ß5Ì_u™Gz5Eª¾E·>“c7™™»¡¿µ™Ÿ.ÌbP÷†\]p‚XuY:õ¬Ã£_'rî?ü}…ê>¦›,<›Ë)ZŠÔx—!C‡Ñ;d$ .$¾*{ ‚ ÿNùµWgRâÒ '—N@Ÿ¹ ÏÖCé]õ‹GÍ ƒoËÈ^»ø"‰¹ÜàMÁë3å Q .Ú0hôú>¼Ëìã±b´—€‚$I(•J°?Gç ÷&;P‰Ã+ÿ~²‘ÄЋ¬™r™„–3¨”u8­9†ó¿®Ê|˜p†sÛS¿¨- ¿ä´› Ê“&oxpï D›ÈÇÖ’9y|´?§®%ÐÜÇ5A$ÞÜŦ›/FáöúÆž8¨ £µSéZ›Öe¢8¼62Äsü‡I\•>á›2Ù³®²sÃ:é21#Æüâ6ùîGaùäÙh]‰>_Aß)Lþý!~#0cÛøÎ]‹¥]g¬$H6³4Ú*)Rïm*Fìå— TÈ‘Ž@ÒRáýþ4ÞÌNCOZe¼UãC»Ž%¸¾j,‡îfŒ{ešQ²QyÖ§¡ëþØu˜T®ïb{` :5òdïï9±i[æ¶Æà œïBKw-JâÓ*wYË—EK­æ•I9ý5¾ÁzLs|ëIÚÙ’ Z?"k×Äîî¯ì¿öÞ›®çt³´*³‘;~ià—/Nu> iê¦l¾Hxzù’åܾ™”<Ó‘ÐØÚBÌmîE‘åîÝŠF®`Zâ©raJ‰âÞÞyìðseø‚âÙ?Ƭç±ßflxHÕ U©ŸõµéìeÕƒŒøt<ãç>¸¨ ¾xC*Ë—øÞ7 t—·ò›ÿ<>mZŒ?7þ½#Ï^( ÇÆ“XÐñ:“Æm#ܶï èÎ[UÜÐLøåm|¿"€#ÓÜÕËø…4‰=Ïâ©k¸jKÙ6½èýn]¼µé#ÍWì!@Ž'ñMë›ì ­Dý².8ÚCÐþå,ÙêŸë ZÊuMûÆUñ°Òt|=KÖ <l)Ûº=:Ô¡„DRð9v¬Y›9 T².F³OzÓ¹qœ”É„_Ý˺Ÿvpã©@µÏV£™òN<«§.ç†[[úöy‡×ÊŸúÆÔ¾<™ñÛBÒÎ}muÏû˒Ѭw•ù=†˜À¦úH¾ëÇÜQ«¸› Våû0”-K‡}Ç ¨ÜêòaÿOy³‚3Rü]ÿ¼”_ÏEa†jÿ£â\Fýt7mD˜¦½æ}ÓŠaÌ¿fÀ±ñ$æw¸ÂÄ ;ˆ°­EŸi=Ñn™Ê¢ÑHy¯È¿D“1éB¸x쉼qRŠ* ^8Ó‘,»eTx½;‹¯íbä4_âÔeè>»Éë÷áÜåS»ù3oèÒl?L%kÚôéEëªÅqÑBRðY6/]Å‘TTží™>±2çŽx­NqœíH¹µ%Ëöæ>U¹,áPã#&ôhD%ñw²ú‡ß¸c”8VíHßm©î¡F|’K×r,$Y²£Rç~|Ö¬^NVXâ8öËür6 ³u>ûøu(-Gçæ›É%Y7x6—ô€äDÓ)óyçòDÆoÅ”çùnÀµI?Æ|R­js'øûlæ‰Á.¯c›#/aWŽs[“G‡]Mº;UCYÙ”¡#;àé$1b^n­bêâK$½Š A(€%æ ›ïT¥cï79;c/á\«ec<NáÞGðvRA˜†Š;àü+c~ö%2ý:xv‹”%™Ûã}ªùŽK:7~[ÃÕÙ}ø¬Îþ,Ù‡ÆÑ›™túoœŽÿUSÐ}£Ú»ôþ¬55ŠÚ`Ž àÄï«Xïûˆùyë>?rÁRõézÞâ½<*dÅV6ë ¿z„“aoѼ˜Ê ‰Ï}_é˜K½rñ^ÂÝ ºÇæsßü›¿AAx¥å×^NéÑ”¾:pô·ë4ý4}N…U!lï|®E§b!Cöñæ”ÖTµ¿Äé„|î¸r*1·ãû¨ïzÚ£D€_ŠA„W›™8ÿ“\‹2Bƒý¥©âÇÍû ™7@Ï4µócßµ„§´*]¨P^KصÐÌ©×ÒHh\«ÐºcUt§ös/3¨ Â£Q+¼ƒ÷q6½•Åy…S7ã1#‘}2Vv¬ŠweöÊu¬[µ„™Ã;SÃYYàç¶yæÙÇ¿kø?Ôå˜VZ…cÙætj¤âò¿§?ÖehÛÆ ¿í§ÓFy>•Ž„]Õ®ô©áÇÊõ~²ìœÊµ Uìb‰,ÓƒéßýÀ²%s÷i<^Á>9j“‘±¶»œLx°ç²îd[ñAiKñúií|—Cç"3{öe+_J'Š»«ˆ}“¤4FÝ#ZU”R.jTj²)ËHjsQkеM¯,»–.fw˜‰ûkÇ3dLnÁßü™"¶1®W7ºuëÉ ï®Q¼cW^s4òÇ—tëÖƒák1…ldLÏnt½š}{pjÒ¯ôB¨-Û”*¦KÐçÿA9©¼h;¼?5ƒW1ªW/F®¥NÿÁ¼éQð½!+IU”7>ïM™sKX~2s>Ç믞7 O^kVüŽó °ÇYåM«®•¸³ü úŻI6Ærïì&¾ՇdSb>ù¨¶éeXa_…†Š=Ìùr4ÃF~ÇRЭsî?¬|*%±urº÷Ïïú×Ч>Î Pº4æó¡ÍÑm@ŸžƒXx­ ݆¿K 5 x|û8?ÏB¯îý˜º_Cón(kUÀ¾r;/³ìÛßP>3Y¢8¿¯peOåùƒ{U#xåzõÊÂK^´©b_È£ùï¢NüIJ#±˜n-ã‹Á#™{$ò9¶9ó2ÿ¬µ‹\I0…ìeñÊK$ëN³`Ô`F/Á_áßKRÊlYÍ÷÷èÕÔ‚î’ÒŽ ZP2é2§¦€Úƒjå¬ =s•˜l±G q7OóHS–é9ñ*ÖÞ¦B¿)|ñf[Wù>5ËËJ~÷ ·f Ò ýÖIôíÞ“!ß]Æû“Ñ|\Þéyë>±ŠÜëyÏÐAKRÙâõZKšMäæÍhLùÞ÷ó¨W¦^~÷Ø| ‚ dQ@{µÊ“–};¢Øù#"$”ÛH*4J0¥š3ÛÍI‘$©\ñv, F(©p,ׄ×=sîbÄ¿h€Ä«M€AþT4éñ1^aWPúü”’–ò­ê#]ÜÏ­œë(HV”hÓ—öêì;‘ÙÞªB¾[»–• ÆÒ"u?«ÿ¸Eæ[5ÅhÑ܉[{¯W`+ 1¾s4p}{v§ÏèEœ¶jÃðQmð̯ 4·ýÈ/Ϧ0-_ÈÏç2zñ«)ñþlV¯]Ţɱ;³ŽãrôðWà\« ÍÇÙá—”VáÈ‘ŽÂá5>íYŽ Ë7rS/g *í=°ÓxSEéË‚/1xÂ:‚«÷ap«¢6^½l+”挙ÅÂ1ÙˆÂÊ&m¬Ò7'­dÝê¥ÌìQÿß~Á7"½õ$gù’ÔØhÀh0fVâdS FYƒ­ÆLøÕۘʷ¡¡·’B‹wƒŽ´ôTaɈt>KùRXãâ¤Å¹¢Á¦0làæÕÒaØgTÑ>Û²–Ä[:ô¯7> G¶xÜÙÃ~ÿôÎO•¯ç”g:Ú éÛ4ëÏgÔ‹Z×¢Õkn¨$%v¥[Щ ùßܯт."¼êР²;*C÷ï>&%×À‡–roÖ€‹Ûñ NÆlxÈñƒAØÕl€wzãœ9þGüâ1©oq_ï@q§<.<–Çøî½J´IÆ}•}'c)Ö°Ž -åߨ†éüvŽ?LÆ"9ù§S«ñf;$«’4««å減hFNäÒ΃ĔiAM—ô+lÄäÚœ«ã¿l!»ƒS-ÉDE¤àZ³Õ½¬1Æs7DÿT•g}yÄ®Ý׉5ɘbýس+˜"MáYØFHU%†-ZÉÊ•+Y¹r)SÞöÌuî…J úHò^qC&þÚ>ü´ iZ\h)Û´2)Žpÿ{ª"õyÝ+”=^'Öd"öÆÎ'•¤ae‡Âÿhl(Ûy(ùƒ›n¡—ÿ¦ã••–Fã—³nÝ:Öüø5½Š]fÍÚ39‚ ù½_æñÁ-øÞ%9%õéë‡9ž;çoª3#›¢¸q)ÉÙ ÛŒƒ`ãäñûèeõA\—qñvÌcî ûr;ÁŒœÆ™ÝW0—oD)ŽÕß |Â1v‹ ÕœD€ï1"ÜêPËC˜ˆ¾qž› XdaW¯kí‘6ëÇK£°eO‰SÕxFaÏÕLr*öp<º°_XçûSÛçwl51/‚ðß )ÕHI×øuí ŠwéN—ÜjÑ*ÜÞ™ÁOëÖ±võÌxÏš£+6â—$ƒÒGkHŽM~ªsœ’€Þb“MFšnâ®Å›È \ûOG!¿û†Sõ攉;ÂÎ I•Íèîb»Ÿ õÞ(…ÕóÖ}ž©ž—ƒª×­cíªELx¯(WWÌaÃC÷ý>/Ï{lA÷MAA GCñvýikØÂò#iƒH2~T™c¸y=â­šSF«@ÒxP«C{ʪ,Xò¨¨Jtcþêu¬[»ŠE[´s9;îç6úBxD-é9”*UŠV­ÞâÀý¹þ]¾üÇEA^&Jêõú’®Ö2ç‡Ë$¤·‚HöUiS#™“³î“½^ƒgóA|Ñ: 36q'˼£)·W2¬ûJ”Z*4ïÎà>¬°ˆ³q¬Ë´¢¡ú Ký ¹æ’œJRRÚÿ¦ÆÜb߯£´œR—òö» ‹Í%…<ö£ ‚›1z´±,ðŒåKB!™;¸•Á:ÌÀ£Sû¸õA/^+ªæÆýÂ.Ò©Âûí±ŒjèÏ¢ásð7zÒ¸ÛH&ŽÑòլ݄þ£ë/JØ”nϨau¸»b:»ÓçÀ³ÄžåÇÅžôúx*‹{ÈÄß=Á™{INÊcM•3ÑÇ2ÃÒ‘.=fó®ìÏîŸW³ýJ.w… .N֨׸’ê›ÓË™¥!«ôà™lˆÇyýH›ž]‘W¿‹ž½%s[}L2Ø8a£²ÁÉA‰þvÒ“†e³žh½‚Š®6(”¶¸Ú¤–ôä[±è¢Ða‡»­âÉÚݺ $˜MÑiå9‰++¦³òxoÊ> <ȯ«7s&,5[¹WÚºbkN .sh°LJ|F­öJ(Ta0ðÓÄï¹–œö~sò“2¤*Ò‰Ù«:¥'ÎÉó󹮂œäÏþËJ4+É–pšVJæìÜ R›Bd%s¿ì=°WùÐ}îr>–¨42l­Q`”84›ÄŠfYßeäJ–G §Z¼ßJËÕoO’Ñ¥Àã•Ù5X…g»ÉLïêƒH¹»–q³==,s `’Æ…ò­ú1bú`Tã¿çt2O‘r–/ÙHüc]>ë˧É{ïóFUÔF# §¨³¾ß@ü“BŒl‘‘ò*IJ]œ!³œšõ1$+=qШ°s·GåÑiËÚ¤½.)Ñ(b°µR€ÂŽro~@§×Ëã¤0bV»ã¦z”GŽsÙÇ¿ª æWöžP uÖ‚.ФŒƒnÑët ™ÈòöÎwr6.(ò9¶êçÈ‹ üIâ/þÌúf³ùô“ZÜÙkÊQ|²°QaƒGÕö ñÎ ÆóÓdâ PÌىٮ·’•Z… äôg%-:D©›{¹P²Ÿ58Ë‚“ÿå) ó¾oغÚf¿~a")Ê€•=*¥éùê>ùÔó ¬Î¤¯|)ÇLVùÞ÷Íçñyi›æuÍïÚ.ƶ‚ BáHX•ê@ÿQl˜v’h3Ùg$•À­ XÿiOÍkƒ&9Œ+¾× K-K”.÷ÚÙ“5€•ØzաˈñL±ŸÎ¤M¶õOøçˆð3°RUÇMÕçTW̱œSKäú×Ûz$©’žÈäe/:Ë‚ ¼hJ‹  IDATêöO÷£|;Á™]›¸ÔnCùè#ü’uR 5ž-2®³ÌÖYK9þ8÷ŸÝfýcüïávÇ!ÔõÖp6^EåÖµ0ž™K@.ß…!)H#)¹}džûQøÚD$Ê€„måö´t¸ÆŠ3Q¹6ü(]êðNJÔžÊ$”J”ËÒF¿3cY0qЏX+ =p¤Ò(‘M¦Wní cd±65(¢•¸›*ƒdCѶ$Ü‹Ê^‰’S‰>ǾãïÒ¬QEœ¶cÎY¾Lq…yÓǵo,©€Ú­4®–(‚cÍ ë¸»{ w§m®ôhÍ”†!zhÉîÙÊ—EGDD 6nvdÆÂj4 3©¦gˆÀ+ݨÙÈ›ð= ðO´ ÂÉ¿óÆüŽÔ+²Ÿ?Bþ©«„u©·9ªkf²öR|–²c&îÚïÌ¿ö{ÚC]f5ãþÁ°÷ô6²Ž@ßõ|s|+ÅšöaÜAD~1“ã9wZN&.Á@̾9ŒY?Ge_Â1m£Â¯Ó¦Ðâb«€  ÀÖM úX’MÉÄÆ›ÐºÙ=™ªÔ⪵“ŒÅœD¤Þ ;¤çBaë†-:¢2=’‘€UØä=‚1Ÿ·çú´­¥‚låì–ï8·Ãƒ:Ÿ|ÉÀa‰MÜ‘­Ã9)’$¥'ÎÖi‹KX9:¡ÖßÍÒ([Ð15’G\¶FÓ´ —)b[úš½ÖÞ-6i,]BÇòKž' Ü;xó°æTº®¡¢î_?2BAkä`ÖE¡K½Ãº‘3sYÛÇ0“plÎÓkgÙÊ{–UËп_wêLù‘óq–g8^&žÇ˜3é#•Ìzâ 8žrj ·âá}©ã¥áô½´é-™#-ø˜³i8ï2¨¦d§‘ôª~’Y_}Ç]D‘¶Ó™Ý¤Ð d')±u²F iÁps"ñ)&tÑ:Œ!‡˜0qwæZélªôfdW7¶O›Æ¾`êRŸðÍ$ŸÌ/Ì>š,c‘ÓêT¶NØjÚŒ¼Ê^V’cõ uA«„x Ùàdóäód,È(žL=¦Ôâ¬MÝRÀùž–@¶ÏËûØ*q/“^ò÷ õ"„¿ƒ9†Ók7Ñlf7º<¸„)¯Ê´%™Ç~G9ÑŽ¶5=PûEp#À@«Õp9p(s `PàT©!ÅRØšv­°.Ý^õBøuâ&ü˺3»Ç'¼vc â_µšûß$ŸûFRd"غa—qýB…›5)1‰˜Ìæç®ûäUÏóy¾ï Àû~Ÿw*#\/µù]ÛAA(+J·iI W-Ÿ/¨Íç %J Æ.]ÂÅ£ùîÚCެüŠ#+$~ÁœÈ+<µ~_²]È%Ž\H YÍJ8ÿød°ðˆnrÏÀMÕ’aÝG1zVu"§7·ÆSçX:{­kLzÑÙáES:S·çxz=Á‚ï÷òФB­V£V)TEhتœæqæÍPMÑæƒ×YÉÎo–s2JNÛ^­B’¬ð¬VW-* $µ3åßx›ÊŠ`n„Q8½FÛÊ ;\ÈÞU*<^«K-J$TNåiùAlnãNÎé¨óÛüò  ò¢Õç£èQߥʕ*5Ëâa§FBBe_’†mëaqG#Û”®4èX›”c;ñϺ°^–tˆñå›áÃ>b£FbÔSXd"|û,&Ì;@HÄ=ð¢s׆Õ(ÐxÔáí¦<8u|н”LÏq,´8íÛUÁQ¥Â±r;Þ-˙ӡXËQ£‚'ŽV @‰Ö³­›!ñö=â¥ÜÊW2‡® l؉&ÞÖ(­½iÜ© 6·Žp+)­a&mÀ—­Wº ê„öä&ÎÇZž£|¥, ?åí ö(•ö”kÙžrú+\Œx†0©%‘Ðp#EëÕÄËZÉšbuãe !8Þœ½|=Ó‘Í![:Ö>o3ê‹7ˆþåÖ]ND‘^¦3RúÈ8•½M>ûœ7’÷³Õ_÷j‡éçuŽ}M£Â¥Bô©¿ÎÖöÄØØ<Ï‚fÿÉʋƚ£>µ•£Á†'Ô/¿ÿU’²nÇ} J{JÔ¨G­Š%ñ°S)ÿ3;H’äDöí)°ƒ?oÄ¿r#éáÿMéÑ„÷›z`Kg&-éüä…ˆmLZfE —;l¼ûä\Ò” õ{µpr„Ïf.å³Ì7<`ÕðoxT¶} ÇË>­WwÌý‹ìœ¿ãÑàÖæ-J†`yÁwãtVž¯Ó»ß ŠÚ*ÀËý³Û˜ûËIrvôÎo?ÆM¹F˼òd׳UYÒ9CBL–é%‰F &],1ñɘIæØ’Å8÷éÆô•ý±2Eã¿)KO¼‚SÉ™ÃÙ¿x5?ç»UöHº Nþ¼?‚àæNí2¨´+Ö 0ë¸yb_o ÀRìçË2º?óÝî~ô›¶œ#Q7ö°èÇsÄË€ª¾šFÇbJŒqA\:¸˜™ÞF/+ñ¨ÿ¬å w~cÞúOé3ä{::(Ð=<ÃÆ›¹÷,Ë€È:®­Y̾^Ÿ2qilt!—ص` W’d°ÎR.ˆy†„sÈZ¾ÐS®c'*Ø©áó¹4ÊÜÈÌõùƒ˜{ÅLù^_3®™ RJ4gwóíœC¹OWþÊPáÖn*ËÚeÌ[åŠÚK€ï*æo/l' @UÁ‹~zò8p5çÅLŽ) S£¹yø'6ß-àä1…sêXÆOóîšczÇ|ÉIÜØ°€c'2âÓ‡LY}í¯¯¬Ò×Î8?õáר¿xG›p¯ÙE•_ðCK ‰Ágعó6ë6q÷¶oæâˆ˜ûÓÇèC/±kÿ ·xžŒ)Øs@¢Ã´¨ä¦!éîA~\r.m-õ(_–,t g·ñ,é« „û•ùË‚y|c3Ûî¥ÿ÷«é—Ä©ír-®NZš¦öÑó¼ü©€*©îXÇÑ὘¶¼3©±øîÚCp±’…ÛÇ|Ê^æ&a{Y¼¶(ƒ}Ïjž«Ç¸f¤|úë–¸óü¼¹C|ÇjIGèå=ì¹KsäÎw Onçìë½™¹² ÷¶|ÅÌyÛÄœy¹¼ƒ~‰¦ˆ¤ígç±t[°ŠnüÄÄo}Ÿª7 «C‰s½î ïV•Ci0°hÁï„>µ‰°+ÙÑd&]²>Ÿ¾ð;iäć\ض€µcÈŸ|3]LJuæË…° oqzÃt6}„^­zÓÚü'ÓE¦ÕÓÍ‘ø®ÝÅ›_õâ=ßñ¬»¥µ;Ø=üî1'øa‘ }ºÏdÅ`k,IÁœÝ8Ÿõ7ÓŽÓsÕ}®|Å©ê2<—zžMµÞÌéÀº‘3ðy†o"ßz’:ïzeÑü“5çsß4h½©P¥"’½Â8–¬D•!h%ˆ×¸RºRe”—­n¾â6Aá/‘ÓÚOuOžÑ8%c–5$ÄÄ’h¥[ ÆÏîI9+‰®stõt¶_Ì;”¶p·´¦XîŸù™ynåXîPxQ$GGGÙÖÖöEçã•PT3’žŸŽ¢ïT#)漇w^¯âô ¿œôþ?æ.?*ܼÏÛn—Ùòçm2ÕIÖ½#¯{Xa“zœõ;îcP:R¾vY,nò ʀʭ*oµ¯ƒÅ÷7vèQz4¤K;.lÞýô(AAxIét:þ®ëœN§Ãdú÷®ô)‚ ¼ª”x´žÊŒ‡?ãÈÓëæ Â?æ9ÊžÒ–Ó¾¦ù±±L9û’‚ ‹¤¢øûs˜Tncæœ$N4ÿ‚ ‚ ¼P*•ê™cbð3ex˜hD–eüüýrÝÆÍÍøo’^¦‘@OjT°&äHà“à/6%óz‘ ÎxÓ´xúÓæx˜ùVsôÄ×£²½ =¦(üuP£œ#WâÄ(`AA„—€Ò±íÛºâÿó¢E4Mø?eOá_HaOéJ*®n¿’6[ ‚ ‚ðÊàg`‘-„Gª±BùŠòÜ.!5½¡p‡Våöº¾Kã ®h,z‚,æû½ÉT¯–ÂA)£¹ÀÖë9ïLÜž/ ¥EåR/åcŽ?~2u Â¶ ¯7vâξãDyËý +\ÊÔ¢ªm87î'¤{-I< ÒQ§´Ú«q$‰‚ ‚ /ŽÊ›ö“§ò™Àƒ+Xp%QLm(üˆ²'‚ðïe‰åØôá{ÑùAAž›? D&¤"Ë27ürìîîŽÎdG²Á¦àôT^¼Õ¿5aĨÝpWÆ (õï×Jà·Éøª³Æ½„©qf¬J¿ëóù“°rrA£D|Æ¬Õ {Ê7«ÍÝ\Ž2aWLÊþ…=•Û@“"*0FqëäQn'dŒõ5“ø8¹’öJ’ÄL¸‚ ‚ /Ž)„“û²óEçCøïù+eÏÅÁ‰½9øwçIAAA@€Ÿ‰31©ÑÈ8!çÑ¿Ý"[ÐÐãP`z*ZÔucß— O¶@r8!€Ê:‚Mc^«YŠÀÓ÷yü 0mû¤ÜŸÏŸ„ÚZ ¦dŒ2€ÇÊÍ©­¸ÌÎ뱘Q䲉øo_…¿¤ÂÆÅ‡Úo¾KGÇl;… SS0+mPçòVAø/0™Åäç‚ ‚ ‚ ‚ ‚ ‚ üóTÏÍàg`1›ˆNB–©ÏÐÓ=tñÅó|=ƒBëŒÖOlrö`’)ì‹–$óÎ;½˜ÚAϵ½Ùt8€¤¼ž/ e6™A©Iû²•ÎT¬î‰­]ºôj€¤P Ñ’Ïz„â»ùOnëÒƒÛ²‰äèû\¿S‹Še½Ð^Œ"Á’RÂbÄ,æxAAAAAA„—Š?“Ù€Y§ünä=´Ù¤Ç˜l(0=99ƒ²NÖ 0dâšI 8Ư ³Ã§}÷磰)¬ôÓçù|Þ±X )q ˜µnØ© 65–ˬÇO‘1í³‡Êíhë}?< Jx¦O²IBãäCµŠ$?Š@oIÛÞÆÅ…>]A³O ‚ ‚ ‚ ‚ ‚ ‚ ‚ð%&ñ}fs*¤¤-z+åñ²SJjé_âBt1ÞjSk%*­+ÞžvØx”ÅÇÍ’£Ã‰J‘ШXåú¼TðçÄ< RòÀÇYXHÕëHJJÊü§Kµ › è’’1)ð©×Ž®=ûÒ¯_º½[‡àcüy&€dCQ’=*pä± ‚ ¯.•g¾]3¦N×5AA^J7ÞšµšÙ­ÝQ¾è¼‚ ‚  "F?³¬Gi4‚,S©bż7´b6ê NÐøˆ½Ë~Áæ³÷?·7JtÜÛµ˜5kÓµû¼µ dc¤Yi,qw8ôóR~9‰ çfÓXÒ¯t–íóÇ—cÙôИùŒÂ¹ ã¿é€ßÔñl ÓRµSú¼SÐ Ûøqùnî겟éV%;1mÖ{HëG1~wOäKh«b~ß$æ^ÃÝP:T¢ýÀat)~†É#Ö HÖx7x—®í›R½¤#jô„\ÜÍš•;ðKÈÑ»CÒP¤NG>íÜœš%P¹´kË·û“¹©Ú•Z aÈÛZþ=žía¹_!TÞøæ›÷(šå¹«†1éP2µ'.gD¥§ßòÛh¾ÜÎS“H<wcdÿf$ÿ8˜)'â‘¥c%ZØ™Vu+RD+aŒ½ƒïÆ•ür"””Wnêú|Ê—Ú×ÞéB§µ(ëj)¹qp=Ë7]$*Ëá/tù’¬)ùfú½ß˜Röpÿ8\ËÑG)Yî3…,_é”NUyû“x«–Ž3¡LeâïÁ<)ýY¶Í+…C¡Î °)Ñ„>î@ÓªžhI"øÌ6~üi?’Óö¯ÄÝéÛ©>¥•$GÜäðúål¼óTÙRØ—£e×®¼Ý îÖfâ|ùmÙÏø†™qo=ﺕxzî,eÀW'Ixåʘ]é×µ•Ý5 ë‰ðÛÏ çÁ‹Îš ‚ ‚ ‚ ‚ð$´¥ZÒwDwj}ÃÀy×HÎm3M9ú|7…7ž<%ûͧï¬KèsnZ¦; 'ã§3¹¨T4>®æõLüþ4êv³™×Õ+s{‹.?ßÍü´ñ,sk þq"ü ,Jc* qÓÿf®Û¸»»#É&,Fc¡Ž®1ò›æ_`S¶g72gìÆ§7öÏãù¥ðèì9¢:Õ§š[¢ž3t+iñ©WÕ­C܈Ãuq:ŒèAÅk 2ý&Tú ÃFÐ.x2;B%ìܵè¯,`äÂŒ›¬ŒÙ”õTâV¿ ¥Ãöóc¸‡:}ÞFbÓÔ~‰t£ùàñŒêÂè%WHJ,IÖeè< 9RB.wNÉíª£÷A`Š„]ù Ö ÕHr,7ŽÆ^ÁÝ­søñÊ#Rì*ÒéË/þYC—ÜÈ^!PØQ²¼÷6ÅW£Ð”ëÀ˜qCùìΖø%£tªIבý©—èO¬Q›ïáRÚ¹c{„é_®# ½7Šl2b.ÌéI÷, öµ2»+á~OèP¹Ó¸×hº—àN¼ ‡¬¯)µØÆŸæÇqßr'Fg“~Lé7ˆ°;“ÙñŠÍ]Ÿ_ùŠTboƾ…£˜þ «Ro1bÒ úŽ`ö©øô máË—±ÌŒúØ›c_fê=(÷î(FùˆÐ1k¸±ªÁ3”/ɦŸLJ¹ó?2kÈeBõ$IÊ¥ÓR~éH…:'Ò¨p*]Õ•Õ|9ÿ6 öÕùxâ†w¼Íè_‘=ßbðgå¸2wSý x¼>iŸ÷âÎðy\È–„ƽ,% ÇY4j n4ì3‰þƒC¸=y/L¦ûá,UéJ‹q_ÑâÂ=žŠI¿®8 1 ?Ï`Ðéd‡"”ð´öêõ–AAH#ª1‚ ‚ ü—IÖ”hÙŸÑï¹ñ 8áévÕ¬Tö¸iÂø}Üdvd 豘r¼‘ý3ì¨üÑ|긟Y3OeVà ƒÖ2jÒ¢,\*¶aè˜Ï|‡¾±ˆˆÒÿŸ?³l@mJaöœ£¤óZã7ŠÓ§‚±˜Š½TG×’t‹ý[ñýK?„LDžßÁ <Áµ ü7¨‹Ö§‘k Ûv\#&U†k;ØØ‚÷y²gËcìÜmH &ÙhÌýÆ©ö¤iK¶ž'ÊbK•I99›£AzŒslËI:LhEEÛ«iA*IKÅ.ŸÓ hÛ“{Ñ:GrJ×:´-ÉÁÕ!‘!6ߟ¬ø”ùe³l(x°ÿ×'#üâ8{5–w*:c%ArÖk…9†sëWf>L¾{š³íiàe‹Â/‹!Š€=sÙ~Õ‘ßÏž!ëJôÿv eŽNa–`TönX'^":Ùˆ1GíC6e=FJŠ4hO¥ˆÝ¬ J}*£9™ˆ›™öËCªMšM£lÙ½Èæ,}eB."ØÜƒ¢öJxÅÀù—¯‡øþ¶5s[cÐÎ…È[¶(‰O›¥¡ÐåËÈÚ¯awgûnÇcüwý©#i]ö7nßH»çº|¡À¹nš¥ng⦋„¥vYÎí&$“’W:’-ò;'L³•‹°£kX•ñÞh?N\M E)WÔb´²ÇÚÊ­ÀxÌ2<¾@¼²Z5O•/Ãý=¬¸Ÿ‘P|ïÒk.*ˆH1aÌRcÕx· ç~=‘…ú%¥´+гü=g«—AŸ¸ð´×²Uc”.4<6Û˜õgi¾jÇÊ ÒƒçJ<ÿÇÞ}FQ´ÿïíÝåÒ{€!ôzï½+Ò‘&EºtéR¬ˆ( ¨bEšô^B 5 ¤‘Þ“ËÝåʾB IHÔW‰ÎïK`ovon÷¹ÛÝyvfž]À⇙1ïÝC÷û)›Ö§¬‡ rìQ¾ühÉV@Æ­VoF ëN ™áGÙôÉW¹zš ‚ ‚ð·ÐVdèÒüÏےΟî#‡ÓµVY< 3â$ß}ôûïd#»Õ¥ß˜ÁtðƱç~då;‰v||ùª/°|©‹_çÓ&TmyçÃá¸ÿ6›Éß„a–KðìÂÅ´<0ƒY»’p®Ý‹ƒºR·”=ÖÔŽ|ÿ9EaRì©=e9/\ùŒÕóRC-‡Þ™ÄçÁPªÕ`Æ lMyÑsÝîÞ‡”pªÒƒQ#{P¿”=RvWûˆå[ƒ½çAAø·P̤G²î­s¤uZ@@©ü‹ª½EÁf³- 7u{>}ÒÞdXNa±XeIz:æÎ³èSIû3P²ÉH©_Ax˜ÚÓ7C$±YwOtŠ˜0=n•}Є£=>-æ°®› ±\=ôë¶œ îîWÉ®\Ú8±îb:ŠìKY™ä“É÷¡æÄP’äzTðPs6Ó‚S­ŒªÄgoá6%÷o‹š-:Q:ü7N&ä¤¢Ì ç9šº‰|Š$ nÛÒ·…šsß‘ñ„s}ÎPði\ MÏ9q£8upòz¼°5[A—1EfbC…“;¿—Xöå@4J:‘÷±éËŸ¹’+u¦«Ä3ݼúò‰V@õðv%“ãgAö¡v?±*û’ÔëÙ ¿è|Yü~¿ ޝÈ sÙ ¿f½èêÌîSñ÷‡è/||iIÑÊ(˃‹1k ;š”tDdÄV¤øÒáר,†¨+t™±œ¦þNX‚عþKvÜÌ|,Ñ—ïvdׂ¿1¹ââa²Õª:}ô&À±—Ÿƒßaøøøö÷ªõîŠi÷œMU@]ÀvÐRº–„o%&÷S’3µ{·A}|9ŠßØÏ˜cÏp&¥+¯ ïNÖ·¿Ÿ;«  £B¯É ó=Ê{s÷f å˜ak:x2Eö¦a+"?C‚Õ4Þ4¯ŸÄô¹Ó‰±ºPoä"Ƽ͔¥ÇHwoÉØ×Û‘¶îM†žÔSþ…·ysr/nÏØL˜HAþ~œ·SÌ)„œÜÌâ/®íEÛ©‹üòN/»ˆg·ÁtÖüÂC¨ö¿¬D¼EC™<–Ç¥Y9¥£{uOÔ7bp¨ÒÏ;aP³Þê0b*P×;…óWSÀ»-&¶%ñóÙ ;™ˆ¦â3L}V( IDATs:c§³î:€{¿Àíõ+»:Cv6êR=˜8¼6·?|w3ðh6‚¹c5¤È^´Ò›’Gç0l[¸•¥œcyµS ‚ ‚ ü;XI½r” h(ÿ„Ü”Êέ®:c?úЉj+)·ÏòÛרy#¯62 皘þ¼ÌOó¾älj>i]Iƒ[•V´ñ‰ãÔúØ'÷(þ/D¸$IB–ep>M § ·’¨Åî„=Y«Ce1ñà)³ÑŒJgFÊââûã)Ñ›$œË·fèÔ1Ì"Ži_ßÂ$9PµKTgßçš^{ ˜æû ÅbÄŒG­„Ê¥>ƒ_­ÌéçpU¯¥yîó·¶,íÛ¹síëón”v å^x—w{•F&ƒë¿­cÍÙÔ' âCëað=û9…"¡jŽfï§+îÿ7ùÐ"F•ÈÊÌFíQ.¯MaÊ4Óßþ•Ó«poØ›Öüt7Y˜k;O䨀éïO¢®=XcNòÍš]„™ž¼ÚÓ¦àøTÞt𽄡U´` cÿú5Œ½»#‹_b.ÜÀ<¡+-Ê\ã÷h™ÒÍzÓÉWCªõné¢Ä—J‡‡›¾„/ÃÆ ¾'0gÒ+„Où”ËY…lq“ þNä’庢§fïí¿Û3ךĹÝGèôz”·Ã%ãî»E–Bñ%áP­/¯µIççy§É}M+—hEŸšIìšu‹b^9L¡lš»„äû1zy?l7ö³õëï9–3Ó‹b³b_“Û'ðÕÛ[¸ž¥‘ì?Ì¼Žµq;u”tŸ†´ô cg`V\+·œ&Ö ÎÕÉ~£ìOp»vª¤döé8LV>xˆ¸îíhPâ¢þà‚ ‚ ü ù·¨OãÆéËwË%ƒÔΕ }l´mHÓWØu)ŽÐ›r>ËÕ\?ŸÄÀZþ8nO£b‹2DïÚDFŸ.¸ýJ²O]Ê®ò}œ÷–m©˜²Ÿ/ÎÄaRÀò;?õ`l‡ò|s= °„ogë‰Hrž¿“ñ®ÕßÄý|x! ³qgvp8©1µlâ²ñª×‚ºg·q&*œ›)ûNAAx*Yîlcök{±efb±+A^ãyýq¤O^Ê‘¼5UèÿªNvq¨¥ÇÛ÷4åóÁ†Áwÿ—Hà7òsh±m5+öTÿtAŠ3«) «l—“Œ@B£Ó ˜ XPÌz2VÅBú­C|÷Kîõêâ­ɹÝê9º÷F%}6htîmNRëÐ`&ËâJ“aƒ(}x5?Ü4æ9Tª®R'škϳóJF!‡R5þý ^yyÃ&,ç¨û ¾Ñ™r>ÅeOš “ö;X¶î<édÜ%›ÌL6²“¯±kÓRË4¦ªóCÙl/í{U&zÇ^"þh§]} K‡äåÁ¯1ãÛxZÌXÀ°žŽñ ïIñ…5½s‡1`à0FÏÛ­Çæ=ï–"ÆW¶¬  ¬øYOû7>à³ç3¤b W“²HK1b£¨ñ%¡R™‰Ùû#GÂ3±*F"î⚺:õKj ¿ ¬s~µÐâÛ~otKcãÒÍÜ0(€„®ÊKÌ[‰ãóÇ3vôhæìucð¼ ´òÌ/à%ì+ô`ú¤†Üüt¿Få~VQGåîÝð¹¶ÃÅlhñܬi×øí³¹Œ9“·*0xÎë´¹·_ìªòòf¸›‰Ïº÷¥·{ôwbÊu ž‡Ÿ-ð ý ÷o ¬ô’ö6C&Ù­gg4>=y÷³u|õå:¾XÜ2*G;qI*‚ ÿŒüÎÛ*$­_™Ì¼%‹Y´`.S{–C#I€•ă+™÷m 5†.法Sy¡ž'ê|—[H¼„Þ·¥]ýiîŸÊÙ +œˆð¢IwJÔ¬„êV Q&G/'$}"úû—W2è<]î>bo#+1ÓýKAîùÐ:6=Iú»×%J&ç×ÌeÍ•’Š3FŠ_6=±±&콜¸Ÿ^UiШ¬d[‹;Oªóc4”j?ŽÙ}¶.ø„Ãñ–ûËK7mŒkÈ/ì»e@±eúû&veÔ¤sM—<%tžeÚôvÄ®[Ⱥsi {£roHŸ G·]¤˜Žþü›á§~ÜÌYs”ÎÙã’5ŠïgÏäÛŒvŒë_Ç»;Ëšt†Ýa¥hר Z¸qsïeÒîï5Îö÷/2eg/­é¤™,è31GmbÆða :Œ!C3`à$6„¿!ÚAáß!¿ó¶Œß)Œ¨Å×ógòæ¬9¬Øõ`ø>EÏíCY4i ³6ÓqâXZz¨ò]nŠ>GþԪ݌Jú³\NÎ ôT,¾ÍjR½ºQ§n“…•Œø '/åõsòÒaJʸ?Í ÊÃ_6²R ààŽÃ½uTö¸Ù?hîRŒÑœÜ²’飧ñUL^›Ô _1`› ‚ Âã$2LùÍlÑ—–ƵͫٯëÉøžù$w+™wαÿL:%ëWÇ-¿þÂÿ•HÿåË—gäÈQùþá¿ÃwŠƒÑeéùlMÜÔjÜž¡wÅŽ¿ƒYö¤fãJ;kqòoÅ‹Ý}ˆ:r$©Í»”%b÷ t4üûyÔÍúкŒYW†–}ZâpíW"²hüDÆOœÌë“&óúä·Ùf&æçw™±lqŽõy& û#òLx!îG¦Ïøñ±ò®ìJ¹êTŒuDE:ZßÖŒxm<¥U`N!ôÔ,ÞxŒä»;Á®\gž+É/E>šh|d;Iö –Ýè9hìÝD³‚!á&§¾YÌ×ç3 94öS¤ øòò¡Qÿ~L¨˜s‘fÍŒáÊÑÏX´%[™þE‹/Д¥ï»séSF95Œ³{>dÞ¯×ÉRdJ4-b|Æ››X²q£&~HúˆlZ±™"åKŸPç‡ãBëF×çàæ C­aÈýmÜfí¸98ºšÕ¾ÃyiñLÐIXRosâ›ål 6ÝÃñ¥§JŸ>TsÒÀØå´xp0¸ôÞhŸÏBr¬N¯Î.\þâñÅüVå\…î£ÇSÍS(dÅ\â÷V±'Î ¥”³ÄþÎêï±hÔ`ßø„3i62¯îæ²ãL\\ÌuýCß.ÅHÈ%{ú.\ËLw™´›{ùøÃS9s('æƒ.¼:d6kF9F¢O}˲OÂÉø›?» ‚ pÞ¶¢ß¶…³S°â«è£ÏñË®#ĵPáVçE¦¾YWµ‚9=’³ß­åh’‚o‡¼–[AÉ$80ßW\Ù¿5:çÁÌä .™ÐSú…O“s.ª¬IGøp•£†.âË :láœøî=6\ÍBÁ>Ï`‰ÞÅ_ù2~üGlÔê¹sn7{®dÐ@åD•S˜UÇ ;ÅJVìe~ùbWÁ÷0‚ ‚ ÿZvxV À1ê V‡Št=š)Þ:ÀDÂõ£|µh3ŸÔŠª` ù‰wÖgθ87siäšØ’Bè‰õ,ýúzÎôtÂßNruuUÿéz ¥u“™8x ešŸãÛßÖ1¸ç«¬ßöÅ#¿Úö£š~Ä–ÍðõÉÒÿt•Aôz=Õïœ^¯ÇhC• ‚ `À˜¯a^5µ7î^Êk+2tå,J|>–Åç‹<½ ‚ 'qÞAA„bAg§-rŽC ]Švö`°%à¦s&1+ú±¿î:gÒÌfìó~0õÏÓúÓoÁrÆØ*\cñ¬g)ýMl)ÙùÒ²ÿÚùÝëæ/¡õ  ã€‘ ëR†ûs€ËÎøÕï@¯Ã9r$#‡õ癦þ8©Ù:½^¡GMW‚ ‚PHvøµ{žúÙu+¯ç8ŏЂ ‚P|ˆó¶ ‚ ‚ üÛˆ! ‹À¦@l:ŒèОæm[жC»ÇþîÿFÁP˜‚’3 '-dpù‡ê9¹êm¾ -Ìlèoîf‹>„ÂÊùRãU¯5•2ÙiDAƒG@[º6p&1ÙøÐ°£*têT‚öžàv¢µWM:÷hO›Äïø-$•+ÇCèÞ’J·ã¦¾Ø Ò*‚ ÿöµ'²jz#ì“ÏóÝòLJAAAAáŸ%ÀE (™aFQ®\½’g///ÒL¥É,ô±’_ÁÂ_îp¯ýT±Ù \ãaÖ´`Î¥ºø_K[Š:UuÜ9FÎðVŒ)aù)C@_|]©(7O>øoÒmn§5¦†³‰,,‰W¹ª:•] ¹Já÷€ ‚ 'Ã¥÷50Ÿ³Cùrì°¿µ>‚ ‚ üAâ¼-‚ ‚ ÿZ"\6ÅFl‚&ªT«šo¹ôìl²ŒEØµŠ ›ÍöXÒSíUçú÷¤EUO´¶,Â÷~Ä{.!áÜx2óº^céÂ߈QùÓoÖP쎜á~-|ÝœQÅŸâû¯¶q)ÕŠÊ%€gõ£MU´IÚÉÚuû‰1«p©Ö—_lO / YQ§Ù¶a 'b²)¨/®Ú£¾r·-“Èp= +øâp1•'Î1.ÿ µ,+AAAAAáé$ÀEaƒ„ôlE!èJÞ=€½½½Ñ[œ0ÿä$Àj_:Dݰ¯Y6ý"É/¼ådÌø>a=ÔLaáÊw‰·:0àM†¾ÁüÕqn÷m4{X4é8ÉjwÊ–R‘d•{coNÆw‹™r> ¿g&1vDW"m/`XG ;7´YQ¤vèG•35z¼@Ëj0'rýØAn¤ßK{[ɈOC©îƒ³|•ÌdHkAAAAAAA(ÞD¸¬XIÎNBÁ %Ÿ¾±6ÅF–9,\ ¹U5¦±¤mN"TɺÌÚù_âYŸFÞ1ìþä<±b¹ }ÒölD¿@‚ “àW1i„ŸîQ )мõ«ÜààµDÂo¨p«Þ’ 'Xv!l+Ü>q‚„-¨åµƒ¨k>ï#¡ÑiÀbÀ\ØÞº¶ ®n[ÇUI½‡? :ô¤—ë/üt&  d›°ÊöhDçJAAAAAAAøCD¸lV iI™(Š+U Úh EŸV¶[µ’zx5+wÇ`P,deƒÊÁk)†¢Î†kŘe¾ŸžVŒd˾8k!åÄZVÙºñÜ‹3éªÜdÿÖÍì ÊÀÑÓ µW¦-mw=”ÂM­ È/ V‹dmуH±`HºÅå›õ©VɇÀDÒm ÉT63V1ü³ ‚ üC4øõ[œJß0~a Ù¥ºóö[ 84g!ûò¿&ÈŸ=µ^ŸQ˘òE0¦Ü/k+2ø½7ñY7e²þ‚ú ‚ ‚Phœ‡jŽ]ÆÓ‡LÿüÆãçlAø¯שE£ö¡õ¨© jRuêIV½¹š ú?ÒÀ'áÚâ-VöºÌ[oþÄ1B  ‚ üa"\««^ \ Êh«% ³ÁXÈ­*ØL™d¤§óðHÊCF¹n:‹’–qrס€ P9y`oÍ$Ýd%‹È“?ðñ©”jú2† !qÞ‡ÜHÉÂs„EKöQø¶]¦Ôt¬^8©!%»àÒ*‡”q5‘†Á"¡uó§V5 QqdÙTØ{8£Ê AÿGÚ—á#¡õmÅ Q/Òª¼3¶Ô`ö³šM§± áÞzï¯ðPùx¶Ïzƒ­‘îbTî-˜±¨WçÏçLÙgè÷l+jû¹¢&‹ès;ÙðÅ/\͸û; i)Õl F¶Á°vó¥å@¡Ö–½šÉÊë 1ì\gFçù2§˜;u=¡w¿¯êÒ½X¸¨%Z;ì«×ygòcs’Kè2l½—ÆÁœHÐίXóÓ%Ò¬€Ê…€ž#úLm|´Fbfíç; Éëf¯ ²ÚÊ [ùmW®¬dô’óä¾ÝV9W¦C¿~tkR/•´Ð#lþìkŽÆÜýp’޲-úÒ¿G ªûØ£2^惩+8§Âá|ê_/êvïGÏvõ¨èa¦x®ìÛÄç[Izè&ù~|͛ͶX‡ü÷¿¤£lÛA¼Ú«1åÝe ñ×9øíZ¾?—üУ@…/Ù­&Ý^êKÇzþ¸j­DoŸËœ#yä^ÒR¢Ás¼Ô»uÊ:#c9¿ãK>ÿå÷µ'õž˘îlŸ1›_bòn(0¦ÿ²ø*è;ÿïcM:ËÖõaD¥ˆ“³ ‚ ü»™ßµž æHžp{/j|4Ç;äWÒr®•%ÇÊ´ª“ɉã1v¶´Çi©ðòb¦zmdÚçɹ­ÎkÙÓEë×…¾õ3ùzòP§ª,]%íÊ4§±öGoeå3£ ‚ð({êLý˜)µJÿé²àõϸaÙ­6½‡¤C@Ili„ŸÝκ¯~'Ì ¡½X¦ä³ XÚïÁ”¥6},Wlå«-§‰ÿ76’C"\Vk6˜r"WBÊ¿ bÆb*ì-“*5jæÞÊX-Ìñç8›ÔžÎ]kòóe’Un”p5“ô¤í©(Ó¶ •.l'ØäC£Ž5‘o}G„IƽRy´Ñ·‰Ë2‘AòD£²‘võ(a=»Ñ½áu~ŒÁ¨q¥d)GRâÈ, ÷lN¾M‚Ôw5‘qOøFË.ø7nD'4ØL©DbÇ鸜sÉž’þ.¢ ~OAxê¨ËÐcâª\^Ť×¡Ú Ìÿ:]#Þá×pòv ëâ*¦ppï;þ€ŒWã.”ÝËÚ8+N5T„ü´”Ï/Fat¬F¯éÓ?0„É«¯`P{ÓlÈdUŠãfšç¼ê#¹P«[-ôGf’p¬Üƒq:¢¾™@îd'/t)Y8sãý¤b1?–üUûOäyï,û+ᎠúæX^‹“e‡Spj0Œñ]$¶Î{ƒ‰^´ó&“G3cõ2¹;“p)¨¬Ú /M ?Í~‡_ï&ø›%¤š„Ö«"eÇøxÚÂLÞ46‹cîpóÝÄ[e¼ÚL`f/?|<“•!©XŠãbAñ•¨ÆÉ.†½|ËÂÛhý;1qÖh†‡Oa鉴û#:<_ícÉNŒy¥ß›ÂükF|Z¾ÆÛ£†¾T¸5|ÖÙÛ™ó} ±wãKQò8 ÖdÎlZwÿ¿†“œŽïA“’ލ®°™ ݵœíWùŽsÉ¢ÉIAø·ztÚk©ÌŸ]ƒÓÔkX7W'L×·ññ§»3ªðé:ŸÅ-÷ç4øYûÚLyÉK§ðeDIzÏy›æ—ñÖw¡˜t•xéÝ7©ylïü.z ŇbC[ñY&ìH†¨ã|ûÁN-Gß©ãhëéŒmæ*Z¦œeãnÏ¿\õk,û(ƒ°ñÁõ¦Ì™U•㿨ߤ<^nv¤næ“ G‰Í–ñé4“…}ÒY=ý3@¹FWêfgI轑s-Ëë:xÕZŽ&XQ{5âÅQéPÕ)-˜ýW³ét"ì©õú{ô½¶–“Õñb '¾¤a§–Mû’`€†rý—ðVåmL_pk^ŒÒÚ>ôÇØ¼z=‡î˜P´¼h8†ovãÞo -¼®±vC<-{×Eç"1ue-no_ÌòC::F—šeñp€ÌˆS|¿zîd£õÀҷ˱aÜ"Îe’­ç¬àÙó³™¹-æÁþ—\¨3h:#ê:£«9Ÿžá÷勸)âÑÖµOcú }‘öÞhmznýº„…[ÃÄo ÿ]*'¼ì$Äg’mÎÕ"-©qp’I»L¼IÁj çF´‰–Î:T¡½87%›äG8ÿ¦ IDATÕ›ž¥œ‘ à§HÍfA6ç ÿxíêµ<Ëx{{#)lfó“÷®’ÁÙã9›ÏËæ„³lYq–-¹–o™5åþ¿3N/gÒé»ÿÑ* õŸùdëw¹Ö²¾}3·çùÉÈÞÃç ö<¡Â¹™ˆ:ušÄÞM¨åÃÙÄ?Øì-9à߸6êëûJ? Bñ¢ñðÇÕEܽä„b 6B{%o´$açhOó·ù¬« ±\;ü#ë·ž$îîˆÖ¿=­®ðÕ¥ôG”’׊méÝ\Íùﮡè =²5ó¬Ÿæ(ñ§îŽçnI¸ÀñÐÕ¸@…“»²ýYôùËh” "/ícËúm\Ì5Ô«äP_ûtÎ'Ý»}²’‹õ™JxénPÖ[MÊ©äû nsb(I꺔÷ ŒIåö•K˜"õØd·Ë^´9£ÕUãµ÷×1Nm%åv »¾ÝÈî›™Ø,mç±Ï­Å·¦„o%Ö ê8¥p¶âæ¿€—ZOø‰øâ»“Ånø‘‚ãë¡d£ìHÙ&½èâÌžÓ ÷—?_²oÁÇ*òw¶‡¼Í°±Ï³i_ Õzu!{ÏG¦Þ‹Ì¢Ä—޲ Ëb¼s•ÎÓÞ£q9G¬‰AìÞð;ï'åó¦r©@€G*×n¥çkc§OŽž~$. Ži•Ý__…>&Å…¶<}&ö§ì©¥ŒyK錫 šÛÕUîË+MRùròPÎfê(á_SŠ#ñ7ްñÈ'ÜH€2ÏÎfî Þœ¼°–&Ǫ~„ϟΚpðë>•Ùã^&xÚ‚§:C˜ÔÓžŸŽb¼7]¦½ÍėØñùUÎçY—¤d/&1  <Î?F’îQ‹zÚ0bRÍeñénT©áLÌPô¶ê¬/šÕKfæüÄX©;|!c†ßfÆ{Ç—*‚ Â…Ê9€fªwyç›ì«3hÑ45=Å»Ó ^1;‚k~¥ÁìWév|ç½J[ãvÞÝ!’¿B1£ÒQµ±še ưRïMû)óøÒ)Wç‡U_Sýý¸¹p›#Ì€–IJ՘]vÓ’¨KìR›ª9Ìy“®2ýæÍ`L‡æîŒÃsƒËAY$Ý{@UåN½®UI=¸‰¨{7m¹–éªçsM®ö¥Û루{ãC¦,¹µóÎØqćÍgw<€– =ŸçöÆ•L\‡A[ §gÑÒÏŽà`h|iÖØ™Û?^"Ý­S'´%í«Y ?¥§|ß·˜ñzOnÏÜB8€º4úWçÛO§±áŽžlS6gS½yD*ïMYGp6 »zj K¿¼FŒÉ‹6S0ð¥3œ^XøÞÑJ:¿þˆmÕÒlÿ[ÌÙ›øx`uYzLzF¡kyûµ3$j|(©NüCp ‚ ü ¨´8é\h2õ«eL‰ÁœÜ¾M‡"0(\úá=_ÇPý9µá…ò×ùaQÙ¨p*d{ñc$5®•[ÒÊ'žÓãÄïðSB$€‹ÀªÑXL,Z|“9¿9~9q<›¥Ì?¸w žú/f˼ΞcqüS]ë,$œÙÎÏééâfP(vTZ;d«‰ m˜ fTvöh¤,.}0‘1j#z“„³+MÍ âyãÛ[dKTéÔ)ð®ßÇIƒßóó˜û\id2¸±óKÖ¦n˜#mÚµuãú7H}b‚ÂFòáÅŒ ”ÈÊÌFíQ•Î#&óú3ßÙÁÃ#Ùª4öh0cz¨×¤b6`Ñ8 Ui°×‚Ùh¾ŸÔS,&ÌŠG­ ,1ìûlÕÝæ_`YKèvæŒÝ‹-SÅ·ÚÏcÂô1dL{£)mçUû0¢u:Ûœ!ÕvÎ>8iK oaå´OHs¨É‹3'2.)Œ¹;c‹ÕQÇ ò¢ÃÌÅ ®¬c7®åð½!ùsÇ—æ Çʚą=Gé8¡3ýýípÉ<ÈÇn=Hº%¾T:<Üpw÷%â½9|i¥TûñÌžø Ó×”»7ç=jZ€oà¬/ÄÁòh\Ówþšør|Ò1)f]Í5%ÒÀ5œm»¯“aU ⿞ëKu÷ÇËZÒ£IµkGãF•9x“ØÐ{¯t†{³TÄ\¼DJ¯Ê¸¨!gxóÕº… ?øÁ½†Ò´Œ– °‡ßÁÊê@àrG°É‘ßÃya`SJk®æ4$=¡.úK×Ðw¬MiÝQ¤êq ÞÉ6ç—h\щ£7ÊQ×;‰ó×S±Tg3€•ÛOkÈàÚÁ‹˜§7§¼ýqRŠÝ\â‚ ‚ðYc8väîõ`V8—cê•vEÍÀ@vÄo¬ÙÑ€Y¯Ï µƒ™_ßýqÃ/;6ÂvíâJŠ…x.žååv%qRAVa7aáĉHŒ `¸Í±“)tiV×ݱ$máý EeŸ&t.w‡=kâï?Xúز|®ƒÕ¥›ÐÊ7š+.“b±AÐÎd¾E³.ì7–ˆ_øñddÎæ¦ë쿦ehK?삃±ù6£±Sß_NÇ¥^{ª¤bÎé8²­røqÝÚRßçG•Büï[9|+%ÿûkk7ÏÜû­H$è\,R[/UZ„#ð$êRiQ"ŠíËNe¢‰ø ·/‚P,e‡°aúX6›3ÉR(ÝøE&½öC’§ñé%=†ð#ì½Ñœ½_¡±“Áß½GàÝÎ}…m/¾Gí7ˆ_ºû¿DÎmú˜í·Lþ"\Š¢`³ÙÀ–†›:=Ÿ>i o2,§°X,ȲŒ$ý} Ù‚EŸZˆÛ¿(Ùd¤Š;A¡x²™ Xd»œÄ*4öl&#‹žÌ»'ÇôÛ‡Ù²£#KÚ×Á{Ë-¢jÒµŽc oñà‘3[ßdèV: 4ë?žùÓc€ B­UˆrÔ¡ÂØÈJL!ûþÓÀYÜ×{eGp䤞€Þ©ä(£ñj@Ï.>D>O’Õ@Ⱦ ÈÍzÓ²´YWš½[bý×3PûÒiô†4ñ@¦ ² +Û€ú=Ñ©@²ó¢ö³ý¨c½Àá0S®íHèüŸaÊ´ö$}½” ç3Pi4h4jd ¬‰gÙwÛ—>ý›QR«BëÓgZ»pûx(OØO‚âËæZ™:UKáj§dJÕ§K›dÜ%-¯ø*pÿ›I‹LBU®1^šœx-ߘ†^™„Åd!9¾Œ„þ~ [³̱œO÷§k»Š8ª$´¥Ó­ž#òc%%t¥ªRÉÇ+†„;Ä›$ìÔ*dì¬zRÒ³AíI­vðP?º®ºzwÚøÛ#Iöø·íN%ã%NDåŠ&%‹›û.¡iÙ‡v•ÝÐÊjìÝËR¥¢[®úäW ”LBðjÞ¿”3\O·aI¼ÄkuZ5v%êL8¤BÔYE¹Î¨æ"#i}iþL]ä›Ç¸ß ‚ ‚ðŸb%36K‰úÔôÖ ÉÎTíØ• ÷OØNµ^bD£h¾ýx-ŸlŽ¥Éˆ püwŽ&ü·(=™V'|}tH’„„ CºÉÍO FTyÓ¦k]<ÕjÏztkáJä‰ë¤ÙT8×îÏäñÏQA§Â±Zr†=7²î&<¥<—åwl‰9É‘8?zõj@)Yë„OùÊø:ð½Ë áàeuÚ·§¡ýuö_×£`#õÒ~B<ºÐ»¹Îjµƒ'~•ýp~ü&!2:WRI3)È.UhÓªÌýn2Ö´;$S†Æ5Ü‘%5µ»Ð®d>MÔ6#é ×2^h% Izx¿I˜cOq"ѽPÒ^Fíè_i'dIGÅž˜ôbMœ%P¹ÖaÀäñ<ëoÈø´Δm)!ºF ‚ð/¤r®DƒÚ~¸i%PÙSªQú”OæôÉh²ñDê=¨ÛÀGHZj·¨„:îÉÖ"´?FÆÁ·>šx¢¿FšHþ>ÄiNáϰƲç£/ñ3š÷×9#éÃ9¶q?G˜A¥Æ³ÁKŒ“s£d͈äüž•,߃T¶?훇Žfêêçq°¦¼-í‹Ç èƒ6òþo#9÷3†hÍ$íäÃ5§ISµ+åªP!ΉäË:ØW Ëk£xÝK˜H¼qŒ ‹¿ã²^ÝÃÛÉ¢r¯ÞTuÒÀèe4p0¸¼b,Ë.$rèãp>ˆùŸÂÎ’ÄÕ=«Y}4¹XÍÿ _^Þ4xq c+ä$5­ú®]Ë’­!ØÊ¼øx|¡°ÿmpt5k|_åÅ…k§“°¦Ýæä¦l±àÕ¥¨ñƛ߱ü› ÿ½\Tè#O²yå÷„æšDöiÉó­}p¤o}ÜçÁ q?ñæ›?ûÄWF1ý×ÅWǤ82…òÃ[ñÚ V÷’H?Å®½aT­òxQw3†Œ~?GJv ·Žoä³KdÊßóSðF}ð%#ÓÃ9¾m—R>´f!?ŸÄû•Ŭ­äŽ*é2¿|ô-ײ”û=r(dœ_Ç{?¾ÂЉ«xÙEÙ‰m_ÅÊÐGçBÏ».™(@òÕ+˜_êŽå‡/H¶ÖXÎ…ØÓµe2C2QPÐ=¡Î6#!Aöôž¿†î2éÁ¿óéǧ 1¿º ‚ ü7d]ÝÌ7yyé¼bHàê¾]ˆí€ä\›#š°uÇ“ÍX|Å­ÞeÄKg˜ùÅežØ~(Å1˜_~‹`òøY—zš•o~Ä•cÛ8ÕêU|ޕЭóXr°ÄhlÇÌOÆámg üÈ:>Þ‹û•©Q#CZJt­IÖ‘ܾw¿$¹P;÷2 ¸¶d²cŧؽ:€yŸNÀ}Ä!¾XJt¾¹}ð2ºY­‘O½Çͬœ/§5ñ0¯raè ™|<Â0sz+> ßQœsm7tÛ÷Nz‰e_ +ú¿î9J|»œWm©gØø}CÆ¿ö>_Jz¢ÏïdçÙÚæµ)%‹?ï§ë¸™¬iÃÞÅï°ûÞ~Óál[ñ9#²hÍxd2¹±uK£Óñ¬PƒAØ© KW’J5ª“r@ƒ¦àPº ÕM8© ®PŸI¡Q¹Ð{0£+º£E!+æ2W/å‡[Ù@([ÞßÊ¡Sø°¯jÅHlÐ^>úäIVe Ý^œã‘9€-)Ü:¹‘åß^GW rªB·}iä-: ‚ ‚ <&;”õ†³ìB¾“¥ ‚ ‚ ÂYb~aư9LÉgâDAA„ÿ#‘,›±é0¢C{š·m@Ûíû»ÿCößY35^õZS)3­‘ƃÊH:Ê6mM¹lÖ{Ÿ!3„Aµéݺ&Á?] U\ƒ B‘Y¬â‹#‚ ‚ ‚ ‚ ‚ ÂÿŸúdsE¸"3Ì(ŠÂ•«Wò,ãååEš©4™gX[Š:UuÜ9Fæƒì/öåZЪD8§CJÓºì½å6Òn^"±~#¼‚8où+*‚ ‚ ‚ ‚ ‚ ‚ Âÿ“HÁÿØ»ïð(ª½ãßٖͦWR½÷Þ{A•.½7QébQ¤ƒ ˆ "½÷ÞBO( $„’Þ“ÍfÛ¼$¡„TË^Ïç>y¸îΜýÍ™3§Ze+Ñj¬¤S®Bù\·K2Ñ vjU®5èÒ§;MÊ8£H áÄæØz9ŽÂ4˪\KᣌâDTú“×v¥iÚØ™;ûNã[ô¹íå´ÇÜK°¥jqG”QqOF ‚ ‚ ‚ ‚ ‚ ‚ ‚ðjk†¢“ŒÈ²Ì€€ÿ"£¢H5§fóOOéE«!}¨üø>?Ž™¿DP½Ï@š¸+ qP6ήhôÑ$š2_R8P®y}loærŒY’žßE6gÄÎÓQôAáO’pj2‹u ºQT *ïŽ|¾|m= SŽù³l©6qË—Ãæði‚ ‚ ¼B”î´ûb-s^óàQ*y9ˆr™ ‚ ‚ð<ÑþW,Äc‘qF&ç^«lEoJBc¾é)=kÒÀ+’ÃËo’`¶Â­S\MOr¿XУ’PkÕ`NÃ$(pªÔ‚ÚŠËì¸%Ç6~³ÁŒäbƒR‚\¾Š "aãÛŒ~ÃÞ¦y)G¬ w8ôãR~:YÒP¤NWzwkAbŽ( \Ú¹†ÛIzfa…K¦Ì{ƒ€YSøã‘ÔnÔê1šÑul4…máÏÌ  ö¤n×÷èÖ²*EíU˜‚×1ùóCÄXž®ÚH Naþ¤J¥cE:KO¿³ÌÿÁF@ÒâÛ  ½:7£Zq'Ôèyä¿›Vm' )ç5ŽsLPù¾É¼yÝñzfÛ5c™~(–çR*ÈgJ¼÷eÂÐæ¤-ÅÌ“‰9dQv¥ZУgUòÁ^i%)ô ¬^Çþ{úŒí%-~MzðÞ©XÄ¥áߌŸj!~Ú—Bñ¥ö f§ž¼Ù²eÜl =Š7°â7bž ™çâ+\G•7‡2¨Su<5_üƒå+v”*ƒ¤¥X«~ ~³>¥\”¤EÞäð†üêÿìLŒ¯LJç*t|¯íj•ÀIcáñÖYLû= /ú;â4ßXÌ÷úÉõ‰ê"4zo(ïµ*‡‹RÏÃs[Y¹zOFÝás”xwžÃü^>O^±¦Fp|«=GTN•Âÿœh.«ÅLbl ²ìDù<¦€6˜ï’šè—ëûY”vîØ)ýè9ýkº ¡TÃc)Ÿ}Ÿe1[@©Éø1•.T¨æ}zl”‘ªBDúôÌñM»¸*¡T+ÁbÂ*á¯QûñÆøþT¸¶ÑŸÞ„Šo3uìx^›ÁöH{Š—säî¦Ù|5MÙ7˜üñúÜÏ’€´Ì”¸×oO©ðý,0£t®A¯ C©—H¼I÷ügIŽÔ2ƒAŽûùnæ¢ÈÙs É‘ê¯WCü3BÓ%ì˽Á˜±mQ݉&-[ã”ÆAAЖ¹,¿òtû ¼ùÑGŒë̘%7H{>Ñ<ÓQÚ{ ?§­'8s&zÙl"§¶°>;ãæs1kùBÄ—d[ž÷fŒ¡ì…å|1ú2õV$IʱAÿï‰Ó|b± ×Oæñh<ÊPÜp‚ï&Î%ÄàNÃAÓ:ê·gì%RYŠ·ÆtÃußg ß ÅÛóÁôQ¼8wÒsHï¿C6Fråläÿö3_ÅëZA„–(ˆr™ ‚ ü§åQ7ªÎ«>1ïc\í‹ÆÏåºÁ—6£>âƒA‘LZäOR÷zÓýuLœ~€«× í3y8ÃÂîðÙñø놅ÿ-Ñ\f‹Kj*Èp# Çm<<<°˜õ˜Ò ù¦gÕÇ£7ÝeÓÌo¹˜œíêÑ”(àQYIOH¢sÇ^ñÆx.oÝ@€"«R[c¥×éà{­BHÔË ©qt±Á—R¨µ†Ax‘Ú«>ÜBùcû5âŒ2\ÛΡ-éÞÈ›=›p~ê'Û¦á\dgøØ¡HË‘èM³6žo¹1 ÑCðž¯Øvà ‹žïH¢ònÁÛ5óÓä܈Ϻ…>Ÿw(ÝêСL4×>„ ña_<•ËŠÞ,(ó̆²ý Éúï„`Î]§Sl$H{.Y™ôÜÒTîh“/›f”½ƒ¹¶"C¿žLé£3™º9,ïÏ´¤ycŸüô€ªÓçÐ(t’w°10ëÍÎÜFßÄG • ã›Å¸¾êÜIÍQ¡¦J/ÂwÏçj¬+!üi/mg·§ŠÃ%NçÔœE6wëGvçMG”ˆà—Á«[[ù/°XŒžÑd*åò?dæô ÃÙ™£ü9]”í«ái«D¡¶Ã½X)¼l 3þLq!DKž”pQVŒúTRRRžü¥­È©)i˜e@ãAIW3¡ ¢Xþ"•[ œÓ¡Ï¼Êi„‡¦â\Öu¶mŽ¥©â–Hàݤ'7@›â­inƒ=W“Ùðsgî‘"gÏ$ìËÔÂ#é1ž=g°hÙ V,šÅÐVÅÐ>ÙTE‘Æmñ½¿³Ñ½¦èËœ¼™ˆ‰ìË?MZs™to¬âÒ¾/TäŽ{56ÅÞ᫵?ñóºïùrBwj¸d®5eIäÞë>HÉ6tŸ)§|ú"Òå5·t°q«L‡îUH9µ»P¹W¡ŠCQeðÅâe¬Z6Ÿi}â™ýy8¾”ökØ•ö.A8õ$o.¾”Nøy*‰ ‰{2³)æ.±JoJ¹ª0…`kPîA“:m0ª=éû~ábBV@&¾´«ëGÚC^ûp>ËV,gÉç£éTÎ>Ç1·:NŸ‹‹¼b1Ÿë'×øÐà[µÜ¿N¸ 0ñÇîêÆ êÑiè0ê…ocÓÍìã‘_j?Þø`(5ÂÖ0±úNXͽjC™üF±Ì“°-ѳßðÑ„1Œš}—ÎiëS>„6x7-ÍíåÓ?fm±ÐrÀ›”Öd¼Wúí‰ô+v™ù#úÑÿ£-˜ÚŽah]§Ì±¡ô›=ð:·€‘ïgÝÝœÊUJì+#tÍ$ô¬C::íMe›XÎï Â¥ic|3/]ÙæT6_â`hüA„ç¨=hT+– ŸLfì¨É¬ŽjÈÈ! pQ€lŠ'øì¯Ì7÷úOfcR]ú¾W {IMÑýh§ÞÁGýûÐgЖìð'Êœó둉÷¸ðPKÙŠn¨°/W·G¡(ªTÇC’])jxÄs905­úw£¬X„XA ^7š½>QR¡Q‚Ùhy2Æ’MªÒ?ç|Ê’çrMiîɹ‹9.ÿ&üï‰àB°Èz0™@–©X¡BŽnî`5c1`¡Is8–­çªgW>œ·oÌáƒwêSDS¸`Yÿ€k÷”¬ìÍ‹e]+‰W~cÍö{dŒI–Ð«Š¯)ˆëù7R ‚7¥F‹Âœž¹7€ŒÉ`B¡µEý쥬ò¤ÙÀwñ¹¸ží¡™×ž¤£ükõQ\ÜÇÍÖQÈN…ƒ‡6^Upº¼ŒÉ#†3á»+øõO÷šŒM4~´jéÂÍ=—‰/P+5Å{|É?­åûOºaf/&²Ç´•¸cs:túö¡ÿøï8©íÀÄ:à­L9°l?œËZGöO~æ é€M…!,þéGÖ.ú˜VéûY½å)2(˜±m½Pê»ýûò/¥mg®áçõ˘; 8?¯çhDfóoöø’ÔØªÁd0=)ÄÉf&4Øi$°Äriß ˿ƻƒûÑÂÆŸ‡î‘Õö\¨øRhquÖáZчûf2rèXæµ¥ëø>TÑî—gÌ<yÅb>×Oñ•yÑUèΰæIl]ž+€‰ð³û¸H Þè=ˆwk§q|ÇI½¢·TµWšz>`ÇÎëÄ™dÌñìÞ†gÓFød>Xý9t# `Œ¼Å]½#~.©h”I¿y‹ÑfÀBBÐ-t>¸ÙH )NˆNÜÞºŸ d ƈóì ¨Ô¬¶H˜ïogó™$Œ˜rŒ9SÀNŽÜÓcµê =²‹;6Uiä§&ñÊ^nØ6¢y1  £lóÊ/á^þ´‚ ÂŒ…#ç‰0Ö$\ÅX¾1¥lK"·Ï_çQªÙà ÿp$7t +©±àS‡•©Gy‡]„Çg?’¿é3ô[+Õ{J]*´êÇØ9£YûÑ·\’`¸Æï;¯cŒ<C«º¥°Û‘ãz/«|ãËÍOr@ÒàT¬6ÝGÍdv‘Ϙ¶)Söø’¤A­U#‘1ù±¤Ò¢Æ„ÞÚrï0sdI:š¡JJµÂÄÙcÐL[ȉX ÚBÅ—„Ba"üÀNÜOÁ<8¹—›=QËKÍõ{…i--DÌä‹û¸—ÏõóbøIØ–êÌäñu¸³l6;fô]”j0dF´›§2òh¶;3fìl/Æò+½ö^ {7tÖ$⟠ƒ‘1$&`¶óÀA €ÕøÌ(+² еã[IOJ{zneEƾ*Š8h¨4æ;ÖZd@B¡Vc½¥#£œ}LéyžP+†ÄÔ'#Þes &[\tJä”@ö^V2¢E ~ ×Ò¢bgæ…"AA!; i©O;ZÓIWúá¨Q YŠÒ´Ç[´©â‰ÚlFá\u²Xˆ9ú ³­Ýè5`.Ý`纵üq96÷×¯Ý µmu|iT"‹?Wç=^+ç¢ePÜû‰‡éJÜÝí‘RcH}R€0“c@[Ò1³Š%{AÎE)ÏìcM%65ó¡KNáòòOXþÆÛ¼õÉRú…dÃê_9n|éÊm¢\–Ã1'§?¡Ç’FRfš(ì)×¶'Ýš–ÃEaÆ¢vÇCõ(ÇÙ†Aá?'¿ºÑ<êC~ÿ†í2æ›Ø¹|ì:eˆN͹1ééÀJì}êðö¤iÌv˜ÍÔ_CDÌK@4‚E6 6§3gîQÒM¹5×ÄpætVsÑÿéÙµ¦Übÿ–ìòy‚‘ä$nìÞBrbÚK÷°#¯"St0qºxé$îelñ*nGÒÝXŒJWêšÊûžGøò«ÝÜòÔ¬À­N{ÊÇfýÂLŠa&áQ,ÖúØ+!Á H*lT`6Y@²§rûZ˜ÏÌ#¨Ð3ÑZ1ÄsrÏEÞšQRºýDæ4tI’Éj$=ÏÝ¿ï3-úHîáÖ›c¨ç«á|L Џh ·JÙlzåÖžÈ7¾²ÈFïŸgÏñ7iѤ".[°d/s¡M´)éŠúXýd!wR$мþ9óšeî&§rìGæߌ_ó!L;’è Ÿq4.—×_"˜÷¨ZÍD™Ô‹l‰KÆp.Ÿ†U¨hoÏÃC!豕Œ\Ï»¬2*ìݵ¤Ç&?]Âê¹2‚}Bè\Ðeí£°ÅÙöé„w²á1gû†s[=©Ûg £Ç':e^²Nñ¢\öbš:WÔ¤Ë iœž¤i[q“ÞqgëŒYì 3 .Õ›3J MAAøÿÏ_ÀºÑêC‰4„qxÅ, áÜh2_E_&8¿z[ÙBÊ£K¾DËZqÞRèÁ>ÂßOL]²,c±X0[qVE³Y<ÇV§åúg¼éA²ùf³9ßBòßÇœš@¢>ï'Ù”BBbZ!§x!7æÈs}ìG—NUpV©p®Ü‘7KÇsúô#LJê½?÷½Nðõ½„™U¨ÕjÔ*’ª^ó#lß™Þ e’oìãšC{ú´)N©Æµêëtð‰âÜxdçZt¬œÄ‘Ãahl¥Ê*5ËRÄ^„„Ê¡^¯‡CäujA,5EjÕ¥BJ$ÔÎåi׫)º[G¹"ƒÚ‡×FNb`7”å3ŸMG²Á»Z5JºéPK ©](ߺ#•a\0a‰¹È_z¼Ûo›"uè܉{§îeÔ£¼BòŠ/«sYjTðÁÉF(ÑùÔ¦CË"$Ý &AÊ)¾Ò:xUÃn4+ªE©-J“nMÐÝ<ÂÍd‰bPo@U5JìKÕ§®G !áz¤ÂÆ‚÷ŸÃÚ¨+8¢T:P®]ʧ^ábD!áò‹™gã"ÏX´æyýXžKGB[²“?lMìú¹üp) …ZZ­F)9þ>ñv©WÎ % r©@£ªöÄż’뛘"Îpô±/^¯Œ“RBéX×:'æôÿ“_(ý>‡Ïê©Þ£#Uݵ(•68ù”¥œ‡&—‘ «¿Ãcß ô“…Ï%Ô•:Ò¢„-’dKÉ–)k¸ÆéQj ;±”ªtëV‘„§3ÖpA!%Ú·£¢£IãC“Î5QÞ>Å=ƒ­£ÒâI4È(ËÓ²yÑ̵hU¸U¨€½d±ÃÑ£A­Pçòºi÷¹ðБº+`ºz•h³•Ä[þÄ—lMsÏh.%#c%ñÚ!î8¶¤s-wÔRÆš·]ª¤sñhn#F-Äß8K¸GKÚUrB)©p«þÍ<2Q:Q¦¢Žj Ù”À£GIXT6(_¡¢ÿÅr™RçFÇç—OzBBU©­JêPH:JµÊJÓ„ÒÎK ñIFP»Q­U]\³¦ÎV¶·-×ñ{RÙ^…µûLbl§â9,¡&‚ ÿ?äU7jtÊ£>Ñ eÜÿ%-žU»0¢_1®m:Bx¾ç”è|kÓ¶©wCH P/1¸$IB©T‚ÃyÂ9_°ìA%N¯ üÿg‰`ß·«ñ5œÅë‘RB9¹nÜ7¡ôjJÏæžØÓYK»?Ý'r S¾·¡µëm~ö+ð¨T9ÉŸ•ó·ñþûSXÙG‡œx—#«²ë‘ŒG‡v”x|€¥ìÆ.ÙR´i?FŒ)޳FS"a׎²pÞ. ;HNãÓŒÁÃFãm§S¶’ù»ò’ ")ócv-X†ýÐÁ,\ç†ÆOбÕ|ýÇ}Œ¹îÛ?Á@ÐÆy¬}÷}†Î , AìYüAÑ9õÔ°õ*G¥JIÕÀ]€žà?ÎàÑokʺ ˆ½ÆöEÌZ¸ÚÎÉ#‰¼ÕWÁ #_ÍßGAþi²àk¶tÿb%S\”$Þ9À’ïΑ`µºí7.N|—?¼KêãKìØ{‚ÈV œ«¿Í¤Ë⤒1%=àâ/+9+ãÓ:§×- §äO'o~œÑq.î×LïÒEÚÁ²¸Œ’º%öß-teè€9¬£Åš|Ÿ3¿|Íú@=r.%óã½,úÁ‡Ñ£ó£&•G—ö±? ™z1Upç‰L­îŽlAq«÷ú™çâ?W.ÓP²×lfW:ÀmÍaD¶™äëwñ{ÿkÖw„'iZ‘¯ÿÆ–;c¶dÃ’îsê\I¨—±ÛsÏŽqظ•¢r% W´  ¶)[‰JÑ.¨¤ûùLk-‚ ¯(Ku£®r­OL”î-™>o ålÌ$?¼ÆáÕ³ùãbb®õ×k÷Ëøsdáÿ•Ëe¶Å¨îÌÎSQ¯ÞLM‚ ‚ ¯1GñŸP²dIÚ¶mÇûsüwÅŠåÿö! ‚ ‚ ü7©|é2k6o—´r`9__NBÌî'‚ ‚ð/È«\–z™ù£/ÿ›G'‚ ‚ðÿš˜ºlTÕpWµ¡ˆ›5i¸|Ú˜ã¿{w„c”ôD§-û·YÄЂ ‚ ‚ ‚ ‚ ‚ ¼šþÌТ¸|µÛo"E]âçÝkè×å}Öm[ýÜ¿?l[ÍЋùíWøé¬ï¿}È‚ ð÷7›Íæ¿%-AAAAAA„¼¨TªB·qˆ)  A–ÁÆÒ¬Ñ8kˆÑ?~á_­‰&¶¶ê¿ôYJÏÖLœP3_}ˉXk¡÷—l|hüf Ô§·pô¡ßjõ©[¥$:%–”Çœ>ÊùвRVh}¨Þª u]ï±õ—“D™¥3Õ;w¦XðvvÝH¤ðG!‚ ‚ ‚ ‚ ‚ ‚ Âÿ’h.« I0¸u+µh @‹Ö-_ø÷ð™´¿8C¬5þ*;{@xbF³«¤+IýJzü/FbÊwoî5›Q&ÅŸÍ `ãK§®ïÙÀ½x×JmèܪÑ÷p7 l¼jЦMe”‘ÉŸ]$Ï’@Àé`*¿Þ„2!»¹“*VÐAAAAAA„—™âß>€W‰,Ãd²,ã_dT$‰éò€eS —îoPàR»Ýy¬Å^ãMõòZ] %EÙðÿcç Ž5`µ¦s÷q’n: cNåÎá-ì Hza”¯9&ÀToª—uÁ"‚ ¿À–*#óí òØüÛ‡’EéN›ÏVóY[w”ùnlKÕq+Xü~ÙöøuµøxõÞ.–ó,4Ú ÃXòýp*jÿɃøhJñÞ×K_Ûéß>A„ÿgTÞùrÍ'´pµ‚ð<Î>äû9Ýñ+ô€Ng°æ«7ñýdžå¨)Ös«§ÔF÷O}Dž V~yŒ ‚ ü³ÄàB°ÊV"¢ÕXI§\…ò¹n—d4¢7äÔªp¯Ûƒþ«âªµÇÁ6£Ú*éÂ">ß[’ Wçð' ¹Uî]Fu/­²/3¾HáÁ®E,;›ë”Ì*×Rø(£8•žãû6n~8™"ñO¶`I#(Ô>9}éÜO¥N)tWHƒ€! OSú}›¦%°&qxÃR6ž‹Á¬v§Æë=éÒ²&¥]m =Š€CYµÙŸØg–V¸4æÃ9 œ=m:*w€ŽÕðÔ÷ßÊÊU{N•AÒâ×¢/ïw­GI%iQ·8úóJ6]ŠÃòÌñ誎à«÷SøæÃu§ƒÒ¡"‡æ­¢çødÒ:î>ÓAEé\…ït§MÍ8i,<Þþ 3·< §UŽsLGÒâSÿ zvjJµbN¨ÐóøÒÖ¯ÞA`r.¹”ÊšodÄë:¶8áÏ|š¤Á»aoÆ iNÚÊ1|z*‘œ²…CYZ÷ìI‡úåq×ZH¼{‚_WüÄÉp# a_¾#ïèLm[Ìñ·9´a9¿žÉñ{½ÜD|ý­ñ•IS¬+3?ë†ôó$¦ïzæûe|G»RÍéöV{VôÁ^i%9ô,[×®ç`ˆ…SEÚöx“6uÊã©“0ÇqbÓ*6œ ~W…äH£é‹V&s_çûëú§×œäDÃÉ ^YæÊ×#Yp--„TxÖ›÷{¶¤¢‡d=QX¶h Ái2H¼êuå7šSÕÏéÄ]`ÿ¦_8p+)ã7ÐVa좑¤/ϲ[†gÒNçþÞu¬7=à/ö¯ ISª_Ïj‹óÃ_˜<}7Ï\,êïðÕ츆oæÃ©ÛÉáR{B²+K‡þýèX¯˜B9÷ë"VŸŠÁ(ÊÓöí´«W-X’qýÄ66n9G¸Q”xuúœ/dò̃Ä<{ÑšÂ9þóhƒõ9Þ/^’]YšVOáÌéðgûÉïý|©\©Öñº·ªEI5˜½t˜-wr%ösw”l¼©×åm:7­F1'“ ¿u•K¶fä…dS´õ4W8yïÕþíAþQáY»Á§H´ä¿ùËJåÇ[sgSûÈÇLÛñôyÁ¦,¾þ¿ß'1çêvÖ¥Äg,¡Æ?}_ÒRqÄ·|ÜÀ6Ûëiœ;–ï 9îõïåwA„•Ê…*í{ñVÛ:”rQcнÉÁŸ–ó›9ÞÕžÔîòo6¯Š¯½ ÓÝõL™søùgo2ë¦å‡Qs¸¤Tž43“–ÌZ|U‡Ï™×ói#“55‚À›ùá·óOî—Âÿ–h. +D'‘e™9nâááAªÙž4CöBÙ‹$Ǽóvî}?›ù!**÷ý˜wÌk™½!³gÉÌ­,Äÿ™uÅÊ2Îw³¿½J^Õ¯ aãìŠFÿÄj‡$Û4lV”ès[x\ R˜…ä¨D䊞8(Iª f|¿Ç|¸ô ¯¶ŒèS†«_OäÓ›<› cÆÐþMüÿ¬Þ’#U;T%õä焦KØ•į́1mP݉&-[{™d[Ž^SGQÖ%_Ž»L¸ÞŠ$I9<¬æŽÆAAðóXuõ!» t<™Ñ½ƒ™°4à…üJéTƒžãS'ù&ñæl}‘U4ì?¾e"¹“hÁ!ד.¡q/ŸáK>ø’ÐtêœÊà¸3kÑÚjôÓ ›­_0üH8¶ÕÞfòð ¤>žÁÖ‡¯X&&âë¬OÓ–¦ëæHIæ\+f6ö¤_ÝÀìÅDš]¨ùîTÆŽéBÐäJ¦Jë ØÝ¸ô¤1 ]ê IDAT³—Â¥­J$U€2µ C‡6&é§/{6Ù±~^ÂÓ3ï\â“ÁE¹òÓ¦œ %IáJ¹æ½üá4\çÌbã¼*ʬ$ß½€ÿßôuÿ¯`kÓŸ=d³>†¯æ4ðÚÏÖGYy¨ Å[ÔEù(k¾64”î9†·|O±èùÜIÕâêë‡SL@Ò–¡ç´)´NÙÅÊ/¾' Ò„®hM: Â,?¦.8öÂCçó_,—.üÉo÷²PâÖà]Þ­·“‹96ðæ÷~>$ª˜É„aü¾r&ß܉ÃêX‚Ý3vfM[Áå¤8¨UÞ´ø)ï¹_bãò霹‡Õ¡(å‹™ 7ü‰Ï–©Öó=Ú^¿Ãé{úœ+1A„ÿ9ɶ,zw"õ›3¯v°9œ3'£éؤž{wžùUlŠ5¥–î.¿^MÀǹøÌíÿñû’[ËGòþʬùNTxµýémîr(4§Áÿvaõ%,¿ ‚ ü‡H¶>”õŠeßü±œ$ã×zS†"dâWœMÌv©5hòý'K Œ1"d~-ÉŽŠoOä§|9ç1^€9l}FÇm«×òí9iƒ1çD|®…Žh. ⌱È8#çR˜²ÊVô¦$ô8曞ÊÉ9œC ȲăÛñض(Šƒ"˜ø|÷΄Z«s¦ìײ¶( :6Ç5x»î¤ø‚“éX”¶¨ÅŒ,‚ð•w}º…°uçuâŒ2\ßɶЖ¼ÙÈ›½¿?àäo<ÙÖv‘ =iã¡CIbÆ(H•7MZyrwëEb­:jµ¨Dú™/9¦ÇL'¶œ¢óGm(¯»Ê5lŒáܾŸˆE†¨ »$(k¡{fÊ)¥[m^+Ãáu1#CB'¾ŸÎUé=æ•~öÈ8×éA3ãvfnò2ªK–sÊÛdÒsKG6zàB³þ;1˜ó×ây½¼ 6¤ÙTdЗPúøLfüþsz w÷Îg{€ã¾ñ{þc,z¢6óÙϨ2µ õŸ}Oû|:†½¬ Éz3œK'‚1 /« ýRI¾Ä¢ã÷I5Cêå-ü8ŸÞÍŠ²ëçÐ?7rê_"âëoŒ/IGù·†Ò l; h›õz¶øJ¾¹“ßnf½Cà¹;è{ã¨Kœ?¿ozšäãKg Ð/%¼ª À’™ÿ h›·¡²ÃeÎ%e4ÚºÕn‰gðqn—x - ­8˜¯ÇÚ³vÒÂÌNJ¼:~ÆçŽ3s•#.Ö‡ì;B¼^ý="2Ó×§C$ï˜Æªa™× ž+Û—²Üç+ÆõªÏ¾ÏŽ›ëÚRuÜ· MþЉ«Cp{}2“_÷AHGTWøzäž ¬)M¿¹ÃQî9ƒC“z”pwFqŒŸ6‡Sµ{;*z8ã`¹Ç®ï—°#sä¨Ê£oêEËŠîhŒ1Ü<¼‘U¿] Ú  Á»I_†¿×”¶i„_9ÁmMÖ‘ÏöŸ2·Éá§£Sm«1ñÛÁÄÍ›ÈÚàìßG‰S•® îßjžjRÃNñëÒu{”ž­t©ÄµN/†ôhD/4¦ö­aéï7H²JWj¿=œ~mËãdŠ&àÄelŸ¹Æé2t0ª¹CBgÎ¥#ÉÉoª\Îþ¨Ì8Óq123$½šÓðÔ.éŽÒ@Äåí,_±›»zpj<9³*¸)ºVD¿ås~uêÃàh«|Ê¢Náœ?‡?Â^¥;¼ ¼$4¥é7w$6‡ÎaW¿~.Ž("O²þû_¸—uOPáÕr8_´«KQ™¨K¿³8óÚÎ/? /÷òHî?6¾4ë3”žMJà`‰áÆž5,ÿ㉖Œ}ç½v“½+R¿Œ+Npÿ –l $YIëG³wЭI\Tfnü öã^ˆüyÛRü+õ¦…›Ö) ių~àvΓӽäÌDœ;NÄM¨ã¹7sV!Š7­‰íŸ¹ž ãÔxßt½Îô)‡pwò ÷¥ÆF¹ž»'ò,CMäûO7–-fL™—¥Ò³}»8rjáïÜÑË€„m‰v¼?¼;õ¼Õ$‡]ätøÓ…J$m ÚÈkUüpÕAJØ96-]ÑGÆÌ|`vÇý±«Soggl/óëw«9a"·²ëÉô¦Ìø²-þ3¦²-³“ måaÌmʉ+± ^˜Y~"%NUß``ïרé­Ã#Ž|û)?ÅAîyŒÈDAþ,99€?V=ÀxÿÜ öꎟ“’³‰Ï?_«¼šÓ£z8?ÞI@|V‹Q~y° ¯V#]ç.+gm'$§<[6wûǾIo”ˆàƒhÒ+«ÅLbl ²,S¾BùÿÜÜÝ0˜HMÌ¿—„9á>á²7•ütH JVrÃðè¹ÍjYP³”šçZ÷%­/õ;¶Æ÷Ñ!v_ˆx¡b(/’RÂjÂ"Ê^‚ðµk œÒ©Ï¼@ä4"ÂRq)ãæÙ •vøÕïÊk.A:ýd \M‰V4³`ßµ$d¥3~*âCâž4Ršbî«ò¢¤«Óƒƒl.ÍÀ‘oѨvkú| ãþ_ñOȺ8Ux6j‹oØ>ÎeV⛣¯púf"$¤ç²%-~uü0<²¡Ý_³xéR¾ýt$¯—µË±Wî馩[¦2hÀH^+Mßq]xqé^ )9°r:#ú÷gø×þéÔŸ¶¾*@KÃ! kšÆïSÑÄgì£%²¥%;ªôCGÝ!>ÖŸ!S!¶|eì3ëµe»Ó§~?N@¿#ødíâsîÀ Pš:ˆ®a3ü4ºr­©œpœ‹ñdüÖÖ.ì Æ¹Ic|2¿‡®L3*›/q88Ž{'n¡kÝŸžJàðÜ¢É6øT/tÿ7³@µÄ\ãb”+»ÿÉ«j|Û÷¥fSöcÀЩ,Ûy)³A?JÇj4VìfÞ”IŒ°ˆ€òýÑÚëɚϺR-p?û-Ó>˸/ŽãÖc4]‹k-åzMâ=¿+|7výOcSrsÆŒjGÖÎ*_ÚöªÈ0täwœ>¼šeGâ1ßZÆ£&ðÕ“Æ_ 1'_|÷æŒÝý–é î7€Ñß^Æ÷½I¼[N›-Ÿ•Я·á&gC²´7>ââõŠÔ,ƒ”ß÷–°¯ÞŸñ]l9üÅP ùŒcŽÝû^Et™û**ÓP±‡¹Mbì„o¹Q²}¸ À†¢õÊ£ 9Èùœ:–¤.ïüއôgÀ¸„”}‹¾ Ýž<¬ÚUîAå>1„;ïpé§Ål{d&lãtÆŒ-á¯P»Ó°f¿|ú!ÆN懨 TŸ'Krªühè~‘…c0pÜ BÊe]ÛrÏ…B˧<yoJ÷˜Hïb—Y8zƒ¦nÅÔz4ƒê8=¹/Ø–h†û¹o™:ic?;ŠK§þ´öQ‘uïê[úk>ÂÀ!“øjã9¢Í…ÌŸ·eÓŸ2ǰç‹qŒþøUmüÍ`‰ºÀ±pOšÔõÈ(‹hKд¦ ·ßà¹b‹œÄÕîKù; Ÿ2ÔóÛžPzÐìýxœ]Íæ[™÷vMIºí…ßåo9à}&­¸ƒo —'q#›â¹{î7æMD¿ñ[rÞ{§*vYÁ¡v£^8~™ýFO懨ô~§ vRîeWßäË s£Q"™e5[J5­ŠtãHf£ô3‡ìÞœÑcÛ"ï›ËÈAƒ9ã{vßKË8ö|òAᯒЫN‘´`n¾0½–„}™šx$=Æã­i,X²Œ¥ßÌ`PK?´¹6o)°¯ü.»«Øöõø'æÒ˜%©p*Û„¦žQœ÷|¥äü"î§…`¶0¥¦‚ 7rü‹ŠŒÂbÖcJËý 9ù*¿þNý1ŸðÉô±´‘±zË]þZùØJzB;ö™µe’Ö‡zÛà~„=Â1)”(•J”úõغ: ÐÇ’úŠl„’BcƒÒ’þ̈{+¦4 [Ô t§õôU¬_»”Ïû#ð—Ÿ8™Yû,é(×¶>’ÿ~n¥Ê ©±Õ€É`zRA+›Ó1Éì4 °ÄreÿI˵£×û}ifs‰GîñäÙJS”–-œ¹µ÷ ùu$QhquÖáRÁ‡°Ÿg2vÄx¾:ªã±}¨¬+À4ÏQSì­9¬]·†ïftÅþìz~õϘÚs8‡V,äÇó¹¬1QP¹¦#¡+ßÁ͒ؾá V0>ò'T[‹¶5ÝQIJìKµäÍÎ(äW¯Ÿ™ˆ/ø»âKáX“ÞÊrqůÜÔËÏ74çŽMùA|»n«¾ù–Æý¬Ýz‹Ô¬saW‹IË×óÃòyŒ®ζöqÿ®Ü ÉÍù£Qo]¨¼ÑØö ‡ïž6&pôh<¥[WÃY¥Gm»ßçÐå8,éwùõ³¯Ø«¯ÍyËøæã>4+®CZ'lÑŸ}~oÀ¢OÄ ´Ç^]ظPàT«7}J_gíÆëO¦­Î–:¡GÏaŒQÜ 3` :Ìå3È„cuöÁQ•1Ú¾q‘‡ìÜ}x³Œ9>€=;Ã(Ò¤Þj%ÎUàs„=Wã0ËF"/îáDìŸÉÕ8UkE¹¤cì<‰Ñ’BðñcDº×¡–ç‹ÍœÆˆËøÇa”­¤†^âNªET é(Ó¸ évp&܈lŽçƾö5à«~ºï©÷ YŸë2®¾N¨P sÖbŠ'·Á<²> ÿË¡$™e,ñ·8ÿЊ£‡ý“wÒn±uÇ"R ¤›E¯TAø{Y9z>ã~iMææÑ«˜Ê5¢dÖ Ö(Žïö'Ê(cŽ»ÁÙY×væÞ¹å‡ÿΗy¥å]ÉØ&×ó­)F³ŽmÛOp²cÄyJTlZ’¬ŸÒ’x‰#‰XcÔ-îéñsVMqšÕÕqsË®E0âxð c»ÿtþl‰ÁÿèCÜ×ÅSÚâM©¡¾Éá›)š`9ßs—±Ue¨œRUâÞd o{]`ÕoOžOÔ^u¨ítŸÝûn‘l±’v‚—ž™ŠÚ’È 7xœjA6ÇpãR’‹;vO YBæ¡Q9™Ñ(=¼°WäQvuOæêÑû¸6ªC`[ЦUáÚ‘ žoÿÍ(·”J8Äæã¡$$G< 2kš€|òAá¯Q8ÕäÝU ùu7õÙï`Jì=ÐxUÆéÊ ¦Œɤ%Wñ{woæÖ¡OU–·4ÂCkƒ*‡;¢ªX_¬]ÏúukønZKRv¬`û½WºÒì•&î§…`±!=£vLÊktÙ„9½#NTnRœ¾d¹"‹³5§b¤Cr: '\ÔW1˜¥\¦ÑÌ`Š !Zj@ "ÍhýêQÝÍÜÚó^•§Ûnmççãä9B²Å«„#i’òêµÂ?Κž†YiÃÓ¶ j[5Ötf°ÄpèÓA’48ùÕ¦ëÈéÌ,ò37‡br¨BûêiœúâÙHjºŒZ«F"c² IiƒZ2¡7ÉhËöbêð’û|,»î+(ÙfãgÆfú·œŒ³ -Ý–†ê+, L.À©„B2~p 'ÃR±OïãVÔôRsã^aF3šÛü16+к–¢a¯Ñ|ú+3æîÿ‡gÄ•°-Õ™‰cë´òSv?ÌèKf?ÇòÅÞ |w‹ûË$äìÝübSòÎï^B"¾ào‰/… õú÷Å÷Ä7¬ 2 KùJI¿½Š±ýV¡ÔyR¾E?F}V‚uS¿ã\‚R/ñõоH*{¼ª¶gèŸâ»h*kòZÇöeg&æâavoE÷3ÜnÒå…%ÜO×>·MÄéƒDthE ×óܬÝ×{;¹š9E%ñÿØ»ïð(Š>€ãß½½Ë].½B( ½¤+ ½#Ò¤wò‚"ÒAD¥ˆ¨"‚ŠôÞ‘¡%$H/w¹äʾ$¤BP¢óñቹ›ìÎîÍíÎÎoÊUv|õ»¾+IÝ.ƒúþ˜<Ÿ£¦RÐãf¯‚B]²ÞÕ@r®è_Á$ççx£_e®¬y IùE”¬¤$¥e~&6«³15k”·Í’ æ”q«Ñ‘^RÆÌŠGçT:\œT®f-éa5Dg~WéqÓšˆHºßÇVÁœ)ã}Køo|üq =zŽdaOg¶®eíökùÏB“̾³0¦Ey6D:ÓªL8ûVÇa­›•DI¾Â®s2Úù±)Òž¦US89?”4ÅÄùôäfÜ*µ¤Ïˆñ¼ïü!ï¬ûSBWG49ƒƒ*{\íÁ”ò§‰²spÚºÒë­9tQ®ðûº5l=›GÚ<>,%•¤Ô¬é¯L ©Hö®Ø« PR“É|Ûf"1#X-Ëxا‘œuDZ¢1àˆ—ƒ HŸ™âžáotŒRáàá³Lb!9Ú„¶ŒÓx6RSPô®èsEÒUØ»êQŒñ˜îo'¿ãVÛãîªÃ©Ö;|ÑКq±C6Å“Yt ¦¬OK±)H* °‘’˜ŠÚÕ»?ç ïútéÕžÚ%uØÌ ¥5H!Yï[“î’PÔnâ‚PT(VL†¬‚6S"©riœí2¾Ü6#±ÙzØ2¿ÛžßõŠ\Ýûi+¸>’q Éï|«(ædGÕQ‹YiMŸX¥Ñ`»®Ï|–PL ˜²uÞRUzEO{ æ\uÙÿöõÙJÌÙý„½ÚžúÞ{¹öb-ÔWVqÝ~~æaçî¾ëP=Ñÿõ’œýb)†¬OKÖ»coM$.³ìX1ı¹¥ÿ&éJÓ¤Ç+´¬áÆlFåê‹&){&¬³×›IR!Xw…¸‹û y£3õŠm#ÖõEjÚ.ðyp dv;€ÌzKÒÝlõ–lrAþ:•S ^›<ß㋘{8:ÏgPI%a ÞÊϧ#ÓŸÕ‚°ûvg:UwgcHdî¿QÂùõƒy„¶Î„á¹8k+Ù'ÅËZXÆ¡D=z›Ât§xcHž÷6áÉàG`UŒÈf3( U«TÉ?¡-«ÙPˆ-Ú0Ä«¨øÆt>y#ýóÝ?ذì;NçÜ3Q§¶s¶aoÞ]Ð’ßòÙ®ˆ|¦ãm.†6¢yuNݽMJàV><7æ;{ù滜¯©œËSÃ#‘«‡bÄÛ äÁDœ}-Šé%Ó”ôN¾$G缩)i$„bçá.4kTןðÖmO¥˜ý|žÑ@o‰'4ÂL«2îhÅ‘h<Ëáa‹&,NE‰®õq þš}·Ò§Jº¹÷v¶üÖ5œ9zØLµvu0Ÿ˜OPJî|æb3p÷n*öžŽY3* v*+i¹ç¶ SlGwœ¦ÛÔ”Ñïæn~™¿MBW¶ã'4ãî׳Y{6![€ÀJüÅŸXxñ§ô_íÊÐë£fÜÜQä¦å+ÇFÿrù’ÝëñR=w|ëÎ`ù˲¬‚ óù²ÑOÌœõ áùÜ䬯{\Ù·ë]GS¿¤'㳺â+–d"ÎïbWxGzÕòFP´+³¶Øsì½õ/5m@©zVŽŽ™‹;c9Í®Ðn´©W‡\ ÜòÀx€-%œ?¶l ^³qÔ)¡áÐõ\MèMíºÅù1ävÖ÷Pr üóåQ…þÈmPØÙ"%'ü_‹j××òÞùăî…ì™E²ìƒ›N"}ÑB ­‹+c ÉV)qFл£—Ioä”ìqµÏMSäÌ‘ª’ÎGµ”ǺÆ6 1Ìá{yoêï™ëcçy˜. òv'R¿žÎ´£w1k«3zÑèŒÍ˜HH¶aïæ¹OUFp2ý}#ñ©Z\õj œÑ©ï1 ×w±úýl¬ÐŽ1“Æ1 |<‹Ïò9g&Bœ"mb„9RâÖï\JTøÈLï9‰ulsª^²£ŠáÿùÀUW±w}/?üÖ”[UÁ]æÎ…”¾©âtŠ?²&ÙÓŸzÞÉ\½ý×ë ŠCß1ïðfJ5Ä»£Gõ¿Ùdž‚ 9sg=nFGUx8¨Hæ¬ÂÑËŒqÜÈ®rð@ÿ';âé(a¼ž‚Õ*eÔâîxÿ܃ÊÁ Dgë4ë¼\»A>Õ±œ[’ÇÈec\ 8xá C|®Š]Á×Aᯑœªóêä‘T¿¼”¹›®çsÿ²’‹µWÖ³¥$c§kZ~ eÉÜKHàÚÆåìÿ`#:_`ÆO!¹gµU¬Âϲÿt"Íž«ŠÛO!Ox 1ô#°Ù,`NoD»zåjžÿ¢£¢‘ 6óàZÊõKWëFfMËèÑcû¿Ùl1Ö¢CcT÷vñá¸ù˘gÓw𵳯3zÌÿXP@ð7]*žÎ½Ì›_ A{Ï#¿Ð&%uȺ’4îÖûkû¹–l&áv *¿T÷Ô !ãX¶õ<“ ‰0"¹Ö¦CµD+d*ý!ÓöB:UvB–¨Øº3ç9s÷¤jª?WoG j'?^èЧ»—ø3Eu Ú ŸÀ[ ݘêêåØŽ„®L'&ü¯%1ßÎã›sI¨44ufc¾”1ôNíT†&o§eÊ.6_É/°ñìåëñ”/kì!æ½ý6o›À„ ˜ð¿é|j!rëG¼·`7‘dÛŽ¤Å§¦?e<ô¨%4nTjÙ‰jª0.GZqðó§zi7t²’¯miï—Fðµè"×Á %‹K ü IDAT{ñz¹?L‡9™GmÃÏ…7poÝ….×Ù›1žÚËŸºUJઓQiœð­ßœjÚH®Ý3CZ(ÛºˆËËcТ^vh|ðï<œa “Ù½ád¶©„A¥Ö ÑdüS˹Ö3u¨þ*üƒY÷íYò[jæQY"OpèN :¶¯†‹,!;U¦MG?¢'Âl%.à‘^ÍiSÕYRã^«-M2tµ’yK±:ÔðÒ ÉNTnÝžryJñ÷äÞŽn|qR˨õøVô}`m\PiqR›IŒKÆ‚Ÿ­©v?H© >v}ƒvÔõR§ï³U[üîo#5ŒãVªulL)­„dïG³ŽU2‚t:ŸÊTð¶GÆJJT8÷R%´ê‚GZ¤…渱6o½êÃ=×òœv;-쇒kе[5Ž#¨œ(WÛŸ²^ØÉ2ö^UiÚ¤8)·n‘`Uˆ?ý#»ãk1xtwê”rAg§Ç½|ÞÛ¯€sN%ÉYeC£A]àè5î•+ãã ƒb"6<£¤A£’°&„K)TsKÿ<ýÛÑ¢øƒ`/šµµ„Ú£6»pûøµÌ2§r¨K§|°“dœª´¡M‰XΜ½‡%5”'’©òrKÊ9¨ÔîÔêÐЃœÍïi×FJ¢ ÉÕMÖ=,ÿ÷.îã†ss:ÖöD#IØû5¥sõTÎ Íõàm½{ˆ ÇšJ‡ÅqÒÚáà]…6ƒÆÐNsœ ûïd=[äwÜV#7ö^DÓ¤;-*ºb'«±w+M¥ò®…¸¿+$œý‘]±Õ0þ WðDog‡Þµ8åÊ{£“µ8ëU¤&Äa°Ièý^¤uÙ‡<ÃØL$¦H¸”òÄN*`ýxA A…_Û6Tq–‘ìJШÓsÈ7Žrëá«Z¥ÿu~×Ã'›é¥‚ë#éi ¾ÿ©ùJGjxêe-.>¨èi÷𱪩a>“Jõ©á¡EÖ8QÜ·8ú¿p}V,’­Ž”ðÖ!IÎW4Øâ¹¸ï^í»SOu1ÿuy¼/=â¹Ë³•ƒ ·ýèSî ßnºŠ)[}Y-9ò çËоEyTv> èPÛ!ã-£sÑAJ< © ²s%š½Xª#‚RwU ØçZÒ²ª™³‡ò`%îâ!B=ZÓ½±/j{i|]þV ‚Pɱ¯N…ÿµe,øé:&9ãž!K é(ße ã^­“¤°“KNíx£Uô²·h_â§®ÄØ¡OI¹ÁOËv#wA· º<îù2úuhÕÐÃÍDð÷©#€U1¡±¤2gîRÍù= EsüX6K©‚Ï®¤Å³´ ÖÀhÓl/¹ãí¤ÿ·¦„KgK¾Æ®Í‘8ü­h‡…¨?~aKbb‘Ñ$O”5’]Ÿ¯Á{Äp>[í„dåèºEl 3ƒ§u_ÁÈrèT`5DpõÈJ>Þ„­Ô«´p¿Á†³qdd¸¼ŽÏ~™+xËÎLôåí,Y~ŠÅG¾dy‰¼úÑJFé$¬ ·8±~!‚,x¶k‹ßݬÈ+`“ÓXð]^LWg†Û'Øðé?ʲ ’ŽRMú1t”/®vX¸}ñ KlKQ©sÁ¯JuÊÝu@"¯i7 I};F*víFeG ŸO£ÌDV.-ÉüóV* ø˜w›¹#¥Ætòw>™»7Çt$E†(_§|ÙRIŒÍD²d¶a1Ä›‚UW&ÛvRp¨Ð†AÃÞ¦„Sú¾Ø›gøuá÷ޱâXª:ûŒ r1=2 )Q78õý<ÖŸ+ÜZ`Ï6…ä€=\2ÕÀmÿ)¢¬äQ—QH¾º‹ËŽïPçÂÇSàʱ퇎¢²‡P0F\bßÒÏØ“ѽ3æð¦›»óF—·™ßß1½¢ñ2›æÍfÛõlSg«x~ÒRž¿ÿ»í2 G,ɪIÎÔêÖ7'}?\Ì›i7ùáÃE‰ýÑ`˶/ZŽãàA,XíÆGСÕ,ÜšÑé!bŸ¯-ÎÈ‘‹Ycg$üÜNö$Q?ãÏW6ðÝ™±¼1oo¦DqeïöGvÈsWÖèC,]äLÿ¾SX:X˜ˆ8µž…ËÂÈ>Ÿ5ö?lža¿¤©%ŽÀ?³-¨,~é'†ØcËYî7’~óW3$õWöàDLÓŒÉÀÅo>gçðÁÌZÙk\ Gví#ÂÓ× ¼5ü]|T(iqÜ<¶ŽR†-w8z8’ÎmÙd$Ï~¤–HŽL {ß}–Ñø/ÙQ¬Á«ôS:½¡ÐGð‰ ,øö FS gÏ%áõžôÑ÷ŒaÅ–1ó»ãDg««K¿ÁÇ+ÞÈüýÞÖ)¼ók~VáZëUÆM®€‹ZÁ’t›3Vq,ÆŠ?X÷c=FûŒ5’;ç¶³ýtÍsKgL-˜òÅ(¼´)„^ÍÒ}‘X3k-1牪5–ÅýJ 7GðÇKØš~£ Þø ëú fÜ’ž8«R‰º²‡/–ìMï“g[§…{G·ròÅÌþª=Á›f1û×ðlÁ“¼Þ?ÂKÜÔo6+Gé°%‡qrÃB¾»šÇTôJçWÍ`Qç7è1ô#^sQƒ5‘°s{ùlƯœÏ>Œ?ßㆤs«ùdó›ô»ˆ7œUÍå_ñipüÃ0›‚øqö_ïIÏw2Ô …;G¾bîWgÙ³á þýg±²S QWvóÛîÛt((j $raË>ÚšÂòÆìžû>낊â^ž6A—íéöÁr&»É$îaÙÒSÄÛ ×`TÐõPxD©ØSðùÚ0Ÿµ¯dм.¸«ÁšÈÎ¥ Š~H7EÅÈ•ï>áû¾ƒ¾°3N’BÜÙ5Ì^røÑ¯Ï¦@~ý=Œñ£—²:þŸ¾û9ó‰™ —÷¤‰ßéåùwŒÈu_šÁ¶G9wyÕ¡²“œ©Þ¶6N0òÓú9Þ ùúmfì æ§Å›Óør ¤Þf×¼ø!¹pyA…„s­Wèèë¾XÔ6뤃0~õ=<ÊU£šþ2Z$%žeÕÂ_0à¾|C’ÌÁÕ‹ÙžßTy™LÁ[X¶£6S‡¿Â¹÷ ûk÷MOb‰ãæ‰u,øþ…ì[(?)F ýkÈx·›Á‡Ïïcʇûso ¿ wž6“A%Ž²à£ \ÍožÅ'HíÓ™Ù³ë±} Ä=¸ —Æïói×K¼ÿîÏùN_|Ü‚ ü+Ù•§ß'ïâ½z4óÏfìþ½×Ãg“8ßÿn¡%‚ ¿šZ­~ä‡\’$!Ë28"‚S…û#GPxzRÿ<ÄÚy‡KAAž8IKéæÝy.ù ³ƒÿjÿMÓÍ­,øÜécßc¨y&Ëýu^…g†ìR“Î<¸²î41µáÒˉ•ã:q:'›™;w3ƧŒ”øo®4û_=nAø/+òõ B‘öXêP‚ ‚ `AAá¡ìkŽá“‰õ°=ÏÆOçÏ¿±µ‘p~5ãû?®Ü O•º$§Í g+!{Vòéù¤¿>Lû“ fÇãÊŸ ‚ ³èqסAA²S@ ‚ð¯'¦€AAAAA¡(S@ÿCÊ–-K›6mÙ½{Wž?W¬Xþ´³(Âd±ÚžvAAAAAAøPÿ…h®?­ÚOukÜÒ<°ÆÙá–æ›çÏ’ºñ¤IF¢R–=í, ‚ ‚ ‚ ‚ ‚ ‚ ‚ð¢zÚ(J<Õ­Ûo?òç®êïί•ëg¤ê_Ι@»Zï?íì ‚ ‚ ‚ ‚ ‚ ‚ ‚ð#À@Q@k)¶(\uNDïäúé¦s"ÁlÆÞ¾´+C¯Ù Q½0‰ÿ U‡|ÂG½ËaWˆÔ’¶M^ëM _{œkô`È!¹ÿu©€Þ±úô ¾—@.‚ ÿ9våé¿t5ïÔÖÿH¸4™ÁÚ…Ý)¥yl9+<»r¼¹ðK&ÖsBz »TjŸNÌ^>6^òßÛÐcùìA„÷{jŽþ‚χTFû´ó%Ï<®MÞażWð}äºì?QÖà÷ꧬZ§Së+ÜõDíó2Ÿ|ý-ÜDó´ ‚ < "‚÷l D&ÂàV-iÔüEš·j‘ëç¾ïRÒÇeé5GÕxÖnJ…ä3lºB2?³êj¶&Q•#U:u£Ê­(LÉI¿ìO·¦5üù<ñb9Tá?MB[²)ý†½J³rÎØâo°wÝ—|{" ‹Æ‹Ú/õ¢[‹:TðÐBê=.ïùŽÏmÉÚ‚Ê­ Sæ½LÀŒ)ü¡§F·¡ z©Þv&îœþ™å+~'Р¤'ÖxS¿ëtoQ“RŽjÌAk™4{/ÑÖ¬üèýG²pp2 &~M`*ÈÎUé÷%÷FèS.cfxGk¹ò¨Ï¯á…×Itò§÷Ôq¼Ýõ:ׇäÙþe]Ë„÷wm³Ã½J{ÆLΰ°|x(1nðéàG`SlDFi°‘J¥*•óM—˜–†ÑTÈS«(Ø•iÃÐWšRÝS‹)â6µž %yiø¹9b3‹ñçYýÉVìÞšN×È\/õ<5|Üq²…±oã^Ò¼Äó¾n¸èM\ÿí+ÖŽx¤^vj÷r”ïqø^GIG©:Uƒw–ÑÓCI¹ÃÍx{jú9#ß‹}•[A(4ÅÒÈ#„Ÿ¹HlšáçôhäÃöM·9ôÃæÌ´æÐÓœŠ|•¶ÞÈ$`ÐøÐ´µ7A›ÿ Úæ@½ÕH=:‡¡FÌ„qpÓQ^~¯ U.pÞ¹9¯>w‡o'ýÆå¸û·Ðœá4Ù£*D±gM8fˆ ãÐçïqNÕ‡…²§TáV¿ÍÒ¶2uã™ÌZEÉ#Bªõ£Y]-—íäz¢O±yGæ¶~÷à æ:A1f%–àkÑØ*;a'ºª ýdåL罟b©\ÀñNV@ÒS¥×pžÝÈÖ”´»Ÿ‡ìÛÙ”1‚4Ÿ´ŠÍ‚9[ îd :úÜ`ýá‚G?‹þÉòuAë„Î|‡k! X¸D‚\}¶iÉžHùB!5ßí€ÍMÐöùl½ìÁøÅ¥s¾ù@¹P;y¢K:KLŠsŽ[Áts;+oÞÿ=‚Ó‡0² îj¸«É¹¤+¿²þÊý´Ñ¿Ž±‰ÎjH/|*\êöcPÅs¬?VÁþý(Ÿi:è5ZU÷BkK&ø—ùpSå{ £_‹ª”tÕb‹bÿºÏùæDtîï‘äH¥ýèÿòóø9I¤EdùÌ¥œq}…Ó˰fÄlÎÉ•f3?ååsï1ùçˆ\Û¨–×þN¦Q³ßd†ÕvFWãC–v¾ÃîyñÓm;*vèÏ€.õñs”H;É–U_³=È€‚=þÐ3`Ç«öãõzvœ1ޝ³ÕŒìÊÓÿÓ÷(öÕ(æžKÁ¥É4v¸ÊïáÕx¾‚;.Î ¡;—³xÓ’²[]zMC 'lS?ãÅØ?X„عãø*Ô‡³¦ÓäâlÞý>˜T]EÞ˜3…šGf2í§žÅp• äd!òøA"»¼Hïí3i)Ó´ºßr!^Á¥É w¿È{ïìÁ³wîúê/i0´ uËzâ¨6qv+_.ÛF1Ûnd/ÚN›G»óï3ù§?ÓŸáôþŒ]4Û’ñ,¹”•X±f=ãÈÞÍèßÍ…# ~äºQ$ì˶eȈž4,¡!)ôŽDdµKJº2t2ˆö5K㡇ä°üðù*ö…§¥×‹ ª["ãZ³Ct¤–·†äÐ#¬ÿâk§6eæü¶œ~ï]~OØWÎgoëørÜr¬Cg^OR‘qõï 7ÛS§„Láìýt&ßĨñi9‚Û7 ´ÞÂÝ3›2®3E­÷¶ Â3D1“xç «ß?KB›ÙT÷ÉDönư×\ØÿýEš÷uÍxÕLįY}?QLG.$Ò¢¬ògí3Øk‡9ðgº•pFF€Ÿb‘…Gaƒ¨Ä4Eár@@žÿîÞ»‡Á’LJa+*’–òµe}öcÇÀ¯Éµx¥[eôi!ü¶ò'nYbÙ·xï}´à4-%šT"lý'Ìš6ƒ¯®—¤ã°7)~jsfNeÖww¨Ôµ+UeE; ­«;vÆ(òø«œ+Q§d2—.E‘ÙD1›†ƒ·³èE ü§©=Êàšr›HcÆw^I!"Ä€kEor,ç#;âûBWÚ»²ûä½Ìï’Ö¯Í/³ýB"ŠìBio™Ø[±™7Tst01²åÜ58V¨ƒWâ¼{Mcñ²¬X<ƒ¡-}Ñe~ÝÕk܆’¡;9•þdhŽ:Ç‘« X‘r\tøÖ/MÊŸZÚM^À²ËY:{4/Ur̵¦¤/NIûDnEßžX‰ÄêUO•¨c›8åú:ãú4§^³×óš#Ç~8@¤°&póò%®ÜNÆVàñ© Çš½úÜeV|{™Ôìξô\åŸ6GæðïÖ õ±­œ/Zs?ÿdùRcÛÍ–À Ý“&õZÓT{RwþÀéøûçíÉ”¯‚·ŠéON¿I²’Ç_æ(*´Ž´¾¯3Í·|¿ö >߃çÜòZ3ÕŽ’5}!ôæ·“„Ö£:zÔ ùèN‚3fV“Ýžg`¿üb3·,sMÖ§MSš—'£AôF¦îOÿѳøj_8iЉ{ײvæHúöÄû;5´|«;s-â%á\wÿëáΉEcèÿÖþ·ð'.%»Ú³oö0úô¬Ý:ºþo0õœï—-å»õ¤øÉ…Œ8޵Áë'a_¦^'>åñc5ënЦĵS?]Ç s4Û>ˈÉk¸–ª¥ü«èç{Ž#úñÖ;›1·ÃÐú.å]¡ƫtRogÖÐALùõ@v­C+í.æLÇÈ÷6ci:„wÛEóÍôÿ1fô v:´ç­¶%Ési8µ Ÿ‹å»é“;b"«îÖ¦oïš8HœK± £ ‚ðˆTN5h¬ÚÎìIã9öS.•ëIÿÜÞ”ʯ_üŠ©Õ`:ù:â÷Ò Zš¶òů"ø+Ö{§ØÇ‹x§·{éÊÐ¬Ž–k{r.+¤äU_5cI¼ÅÙ_?câ ¾¼9z9·*õä­F9¿?ÖhNí ÄíÅÆ”̨ôé+6£ºå,{³Gг‘½h6¸^ÇW²áZÆtÓvåè9®7¥Ï.dXßþ¼½ì:¥j»eÖ#sA'60÷í¼ñÖ$Ö'Ö§ïþ8Þ¯:P·”=š0òí6½Kÿ¾ÃYx±ÊL®†6m‡uCµõKvÞ•PåJ’Ý©RYÏ á¯ÃI\+½H3ﻜ<)fË{Fˆûé#°b%6-¥€ÿlŠ £9c¡klÜÞ¿Ÿëñs4çï!{xãï'£|Œ€8+(&¯ÝÖÀñÀdl(oß FåŽWþȃ„F§K æ\ñ Þþþ8Gœ#0Ç4Ô “ÉN‹ü(±fAø—‘ít¨,©Ù¾; f“•ÎÈ^´™¾šï¿YÆÜþ~|ÿ "3Âs’žÊí¢:½“«$ ö0›Ì™ãz‹ 3v8Ø©qòrB[¼.ç–1iÄpÆ/9Oé>ãèQÆ.=±]iZ¶pãêösÄ=,ö¢ÒáîªÇ½j B¿›ÎÈ¡c™{Àž®ãÞ¤†>ç—Z¥±Ç3©–¬ „b6aÑ8`'-ñ{öܦD«^ Бb×gG@bz Í|‡ÝËòõÉX¬Ÿ„ʹýVäÔ²¸bPÈ)̾(8möϧ؋t¯ÃŽ7‹dcÓ?W¾$°Æpvça*·£÷à~4מá×½7¹{~RåëoÉQ.lÄœÃСCèß÷MÞ·„#ºLø_|rÄð$ôUz0¬Y"[¾9•¾Žýå @[eŸ»Ž5‹ß¥eê.Vm¾–>M¹ìEÓ!¯ã²ó ¶†¤æ]‘.B4ÅҤ؟lýé$áF3©ñwICÁBô¥?¸rÏ„M1qçÂEbuÞ8çŠF:P©•?Ö“Ùq-ŽT³‘¨°;$?r7ÏÂî/Û>OmáPX 6ÅÄŸG¶pÌìO›*Ž™AWKè/l:~›DSZŽYòcM8ÃÞË X´»×6:SÚ­ÝÜìühñ‚ ×·ì"0ÉJZä)vHTkZŽÌUÚR®²yë9"’MY×RkÇŽ…bRÀÄ8+¡Nž¦€9Šë78—r%ï.Vní9ÊŸi (Iܼ|Ù»8ŽªG=—‚ ‚Pk‡cT@1†r!ÜK¹ªxZØ6¾üÕB‡ “ßÎÌÖ¥Û‹ E‰5š?ö‡ãÕ¤>ÅÔ ókJmÍö\I*Ô¿Š1”?ΆhQ°Æ]åäŸ6œ½¨Û)$œßÁeûF4óµôTlV´?ös3Ïe}e<_HoŸS¬Øp%s‰#O=꺄òÛŽ«$Zm¤„æ—3Ù¦¢¶&pýÔ% Vs4—ÏD ¹—< IDATy Ïl:̯n©ÂÅ¿•°õÔ]R­É8È]ÏúÔõJâÜþPܧŸìËÑÌ.ì Ìz†@…›sÊÇíaã¡[$¦¥‘ÆÝûkIÚîrà·³ÜMS°Ä\âX˜RèëŒ ‚ðWØQºãp:¥üȲ}w± åݬ*iñë0”.š½|½/ÿY5~ýXüÍ·|ÿí¾˜Ö’ä­ËÙ\[aÿÄýôجb’Q*0´ÉŒ!¡t¾ïçdÅš9âH±) ¼UHM6e|ál6›ÙHZfk¾é‘#ûV‹d»\BÒ—¡n…ÀßÃȹ焬‘ÁjÆVôÕ ÂccM5b•µéÁ8à~‡ %5‹X£Ø=s»%;\|ëÒcÔtfû©?†`vªI‡çLùð&&% Cht$Ò'w–Ô:4˜1¦)H* sÐ6ÿ‰I‚ö³óö˼\ÝnE¢©Ð†FvçXP˜R •ÊLÄîÍMÆ Ü>²ƒ«½Q§¸†K7³ZgliFRÑ UgU$µÅˆYÑPò¥ÉLj|…EcææC“·&2ý¦ÏÞFxöî^ŸÅ…†úRòЧ|uÄ"ÙåŸu•[!Óê¨Ø±ÞW×qèÁE^‹ˆ®|®ÒëLY–}Œæ·™rm†0aÖì¦.âpŒÝ*_•’Frrúÿ¦Å^eÇúý´Ù€ÊNÛˆˆË˜­\g&«Çe³øíÏüû#¦^[Á¨>+õŨҲcçŒfÍ;K i8„òV>ØŽ9ŸÐ\Q¢rôÄÁOŒÑöàTjÓ‹î/VÂMeÁªñÄKžû¡@¥ÃÍY…ázR!¦Îç¡âQö—¹OãuC¶F-ÑU=ô¨Hl£ãI}„:ŠÍ”@Ö.6…ü{Áf§v¢˜“ÕÆ,a5½œ©4l×ôØIéß5KÒ]•øðl ½p”!ÞHj´j°˜­ 9R½},Çç˜RˆŒÛ DF¦bï™ÞÙ Ò QYI³æ¼Æ(Æ;„$;QÆÓÂ-€Œ‹oqÔ±û‰Q›P¨µH¬Æ»ìÙεnchàçG™ŽUq÷¬Ä'«ß@%ËHŒfÙŠV¬œ<—ƒ±Ek…›!޹n:dk൯ډ¯{²eÚ ¶‡™Ð”ëÃÂieso@1‘lÃÁÓ!ë³¾ÿ–bÆ„|¿Wš¬ÇMŸwÐüaûËQjl)Ä&XÐgߧ쀧ƒ¤XcÖçúÈõ%¥P£9rÕϬÉD'9ùÅX>»ôàDÂ¥€m?ö*ðÙ ‚ B!äw¯Rl6T™Ï%3Nj‰Øû $Gjö| ¿àãÜ*û=«_dÕeC!﵂ðl°Åcï­ÞthðÞþ*..¿!¿ïDö_äb´;Šf71õÝsÄÙœxáýÅôÎó/Mí:‰u|sª]ÔRÕp”ÙyuT•Ýi4à |Ï~ÉÒ‹É9ögM‰Ã¤*†‹V"}ô†Œ½«}Æ÷SC™ì”f.âF²”¾†wÓœ+†èdÌîaò”mD>Ø¡QºÄÞà¾t©S’À5°ž]œ¹lNÆX#8fkËxÀ“¨ ‚ yÑR¾Cü<ôŒZ\Q*Y‚)+ªqzÁx^°àÓrS»+lšý‡î2ú£XI?˾?iQ§*®›nQDÇãü«ˆ) Õš©é^Êç?3–Ô¿?ºI±¤`°9PÜC‹$0jæ10ÇÞ"Jò¦Lö©µ%¨]Íž?ÏÞ éÁöl;/ʺ[ˆ ‰`á?Ír÷$ËK5pU«q­Þ‰nåã8v,›kEž«R­ Ñ—¨K‡ÅH¼D¼TŒFíJ¶óx¶›a {Ρ~¡;MKéu¥hÒ½ ú«û¹šd#éòN.:µçÍÖeÐËÜkv¤C‰{œ¼‡âZ‡NÕÙ¿/ŒÂ]}Ò2mÞ¤sgdÙ‰Jm»PÙpžÓ‘yU=%ä‚ög3‘˜¢Â¥”'v’„$¹¾ûRý.4.©C’ìðiø/h¯°÷ú“oXVÌ’mŽ”ô¶O¯Ÿ¥†²ï„‘Z=;QÓS‡,kq)Q‘J^vOaÔíCÎ¥ ‚ <V’#£°¯‡¿·Iv¦JÛŽ”Ïìç%áèß›¡ Âùöó,ù!’燾N G1ªO(blñ\Øwï=¨/]`o~ëò>X_•µ8ëU¤ÆÇa´IèË4¥M¹ü+diaû9˜\“îÝ«øXÆ3mv*ܾEßòWøfãULêôgFƒZsÄiÎ&ùÑ¡UTZŸ†tªã1_‘ŒÎY)q$˜dçÊ´hVŠÂUmÄ]ØK G{z4öÅI#£Ñ{àWÉ'P¹´/—Æ­iUÍÌ™ƒyö²{ñ!­éÑÄGµŒÎÃ?—¢?›’ BÑ“Jàד=flF»Öx&-œ5’Ÿ­Â{Ôp>_댔‘µ ù9Ô žÞÔ­cÊ{ S59‚€#+˜³1[©×hå~ïÏÄf…¨`¸´Ž…Û†0üƒ¯`g&êÒï|öåIâ ñ +leàÀ)¬|S’ÌþU‹Ø®àÕ¡-eîìæËÈÂwÉ0ÝXÏÇëú2tìº;«0„gý åzbKãæO‹ø~àÞYѽ5{—³xÏ]¬ \X½˜íƒú2cET6’ÃϲuÁjÎ%+ sÁ¯juÊG: "&ÿã³Ú 6ÛŽ%3If‹!žØø¬º2YÛ±ÅXPZ@r¨J×¶Î\Zu”{E¹Âñ•/ù’/K âõ¹«£“°Äßâøw XhÁ«ý“,_ƒœ½|%bW¢)ƒ‡ÆÇAæ8‚OnfÄÚ´øwïNG Œ\@ã¬ÌÅO†3÷jöíq¬Ð–!#ÆQÒI¤|†-Ÿ|ËÁ˜4¬Ä’5ÆSÆÎ`ÅfN"&6ñ‘¦~f¤…ðó'+Ñ}“y_A&™k?~ÄÜÙ|c Ö®eXb(Gþóñ òØ€øSËùÄ{ '-¥·=˜ïañÌåDÇŸbí†z¼=b ë$ággÛq´Ìµ Ã¥ö§$r~ó>:ŒyUM"ØùÑ{¬=¿†ù?÷gð´å t€”;çùuárNþAxS [¶…2iì|’“–paý<ÖôÈÐ]qWƒ5>íŸÏ'0꟞îò!çRAcÀz¾9=޾Ÿ¬¡_J»·³7²# 9բφÜÛ8…£1f¬‡VócÓÖû“W^$¹(Ö™„ÿ(…„‹ûÔŽÂïeù¬ËKõÕiüöÃj ü€ÕSˆ ØÅ/»nÓ)¿ÖsKGö'ðJ_ëÝÍ=ÐBr¦F»:88Á˜Åõs¼ukõXÞßÌÆE›6âVv“H =Á¶!¤7]šÚº‘Óz³ðëÞîœåׇ¹›»Rž'kô!/tfà[SY>T˜¸sò{æJ Iû<–†Æ¼ŸÏBßÖ»{X´Ø•¡}g°b°¤ÞfÇÜ™|ŸT¸<‚ ‹‚ÙGL¶Ð•k 6›†„˜8’¤ò¼òJ]\]à­9Ëy+3Õ-VŽšÎþ¸Üm.ék÷KÿÅGðñµÌûö…Wx²$ÅÁÁáiç£HP;£Ñ¾Î¹úœ:w:Ï4^^^|³6ˆƒ+*qG]ÈÚÔ3BåX…öÝjpoûNGÐÈoW‚&=Z =¾™}!)b 'á™g0x\×9ƒÁ€é1ŒðAAAAïö3™ûÂ>&ÍÚGtQîÄ,‚ ¡ÓÚ=rŒCŒ~Vńƒʜ¹H5çׇ!šãǰYJ¹³kK¾Æ®Í‘8<$¢+)‰\þ}3I "ø+‚ ‚ ‚ ‚ •ìêO×Nž¬=MŒþ ‚ ‚ð˜±åÓ¡( 6› l ¸ª£ØµìaáE’å$‹Y–‘¤¢³ÎÅOÂCÒ(ædâ–HAAAA„¼©KÒeÆ,^-kåÖîå|r.Q ´Aá±S@ ‚ð¯'¦€AAAAA¡(S@ ‚ üÔ²êigAAAAAA!O"Š!‚ ‚ ‚ ‚ ‚ ‚ ‚ð/!ÀAÙ²e2dh¾?AAAAAAAž~Zµ?%uãqK„5®B¾?KêÆãe?ìigWAA($•GKf~5›—Jj@²§Âk øêý¦¸=Cµå¢GAA„?®&óÅœ”Ö<êßJ¸4žÆêùÝ(ùÄæÓàÛk!«¦ÔEÿ¤vQ {jŒüœÏUF[@*µOg>^=“æ¢2+‚ O„Xøxª[3¶ßJ5:Ë÷¿¯æÝùY»uUŽŸ_o]Å—s>gãøöIJ§eAž8 »/Òw諼XÖ [| û¾û’õ'£±hšWJdæÄµ§eí[v­A‡×{кv\ì¬Üùe&Ó7ß&[öÒ·ª/G»ƒéÚ $zs4—·ÍòŸ/’`TÎùç9_2Þ­&1·_1öL›Ä÷!jêNYÆØ*¹S†oœÄÔß"³#¨œ*ÒªW/:4¬Œ§ÎJBða6¬ø–#'é(ݸ¯unLUo{T¦K,ž¸³†B~¬Ï Q¾OùJI‡oË~ êÞˆ2Ntë0?®\ÇÁ?Sɵ%»Š øô}š;e½¤|ÊðÏȃ謁9û]ZÇ,eÄì“$”¥g’ ×:}ݧå<õȘˆ¾ñ»~ÚÈî« 9¾sEÚ»)ƒFõ Ž¯:• CÄUŽoßȦƒ·0f|n¶Ø¬û¹:ýÆ}L •„->€oWŸ$Þötóž]QÈ£ ‚P´hK5¢ÝyŽÜ4æ®=É¡"/ÖJæø±Ì-wÂã$>£G .Í+sgQwÿ»LÝ–íYT[‘þŸ¼KéŸ&2çÂ/¬MŽã^ÆÃÍãú.åMGÕŸñîóö¼žÂ‰¹cùâŠé±ïñïI%tÇZ¾1ß&íá‰A„ÇMíFö¯ñJ›z”sÓ`Ž¹Êžo—³ñLzŸìêO·A}hU½8z[¡§aõ×{IQ@SŒzáµæq“„ŸÚʪ5;òh‡“)þÒlæõ*‘ùŠÍÉ•Ãÿgﮣ£¸ÞŽg-›+4¸¬‡¥´HÑâî^\Š[‹w…^Ú…Šw ˆ IˆËFÖæý#! !Ð-ÐÞÏ99°»3³wgî̘[gŽqîa\Z°«Ðæ¥BƒFTu~È®ŸN¦œÈJG*´h‡ßöùÆ Ê …ÿU~Z ëNñ‹1ë”lËØ!Ãiô {ÃUØZsðûmÌöCS¨1Ã& wà(柉I}(TâZ­ …C²6ÔŒ}•ž i"±szŽ…»RwàxFt{ÊØ•WIÊݘ]ŠqíÛQ̸„ûÇý™Ò¯;÷G-âÒóš'ÉžrÍÊ¡?9‹€d Ï ÚÕ½03œ’uq:LŒç¥µÌ~…à ’$eñ°ª¥D‡a|év”ùƒöhãEñƒèÿl< |¢°}Eš³«SåiLŸÏˆNzž¨.ÏïE/)Cúì*3hV;BoEfªˆ’и¥@Ò)–=€d7ª÷œHŸO¸÷Íž™•¸ÖÊ„–‰ü¼|‹ü¢1!!}p•sˆüõÖòhŠ|Éðy9ñíP¦?ÏÏG0bTžŽß̽Ìå%*[\ÕÁü:éö§D¬²ÅôbŵdK¹Ž=©˜¨©BûÃa!ö¾;WäéÓ(Œjg UiFçSÈýý6ûêÿ†Â«wÃyƒC?=æ—GÁÄZ¬q÷¬Á]Ç3Áe3ñ'Iäüö-eò¾wÚWøÒ(‚ |8${Ê·ûŠÆ7îqúaÂÿÐøK‰KNtª¶—‹¢rñ=%ŽÑ1sædÍ?öÂ}ÿ^‚SO+ÚTÖ=`ûµhŒQ‘œ‹J]þ­KÙIâÎêAôZûüYEîÆc™Ü臒³Xþ]Gñâ\àÒ;N… •dÏÜønçŸÈh8˜ zã?jgc¬)Óu ,?1½ÿqB­JÒzü× lv› ¿„àÖd(½ÊÞaÙèyø&å¥áÀ±ŒìùŒ±Ë.—ÅíÅä͘©‡·hp.Ñ”A£ûÓçÑ}月õDï1ÆÆ°È õ6`â7“©×°~–ÿÆdsÒÄM™‹&“3®®ó;:*\+Õ¡Xü%.,–¸nû“DBÌSnÙÄÂíq|Ô±>¹m+0r7ÞÞÿ60¾šJʵfäüÕlööfÃ÷SèY7?VY„ª<-˜·~*;H t£Î¨å,ìU;…g¯¯7o9ë6{ã½n!cÛ–Å^χÆ[?ïsò¨@áP™¾‹—2üc—ôü hKõaÙªT±}þÅJr7ŸÃúYÍÈqAS~·ò,.‘$}$AWgÕ¢ýhštÀËQXSnø*¾m瑚—4nÿ-ÞÞYÞš¬‡ê³¦Âèµ,í^ MŸ[—Éš¥=ñÔ¤¼¶*ޛ嫇QV«"_˹™ö«7Þßv¤T®Uùjâ6x{³qédºTsMm±ùº4ZSnø–õòLjOãIÏ¥kR?Uîºôžü+7lÆ{ójæoNQˆÝAþ“${*tCŸŠvê8ƒï—L¡•‡$Š5œUÞx{¯aÞ°O)¦“@ãA«YëXС(Z@Ò£Ó·ë™Ýªy?î˘¯Š¢+ÕŸËòu}7Ôh7v!ë¼½ñö^ÍüMÉÿa´“‡$¬ 5að¼5x{odù´Þ4o3UãS†ñÕêÄâ ã©ü|L_É‘:ßl`þySbɆbM1sÅF¼½7±bæ@š³AB‰kÇH‰‡²mýí:¼½7³rf_êå³B”áøe¿Î+âFÉ–ê“6°0-¾M±,]3Š”ðÅšrÃW0¯[KzN˜Í‚EËY½t*]½œ_ˆ ß>!ç|Éõ1^îσ?+ Ö®„õ½#܈–Óc?uÖçRŽâ.…§­g~«|é=ttå¼r%˾8x³l6¥=›Xœ>¢ëöœZû3÷d^Ê;3ûQÛ-}IÚB4<Å«6âí½‘3ûS?_jª)J·…‹ز3_ÏœÇÂe«Y>«?ur??"Yç•k#¦¯ŸÇƱ¶.ÓŸ«†QÑF—).UâP®#æ­J‰{×Ì¡G){CEîú˜½jÞÞëøvx3 iE|*‚ð¿ãnò뺜 ŠÇlÖxî¹(à I…ÎVIÌÃû‚{G~!ˆš´wqS¦ð[ÜÒ·¥‚§~W£Eëá?Cí\‡ÄÇ„>CTN$$HS174dêViCê-iâtŸ?χ¥½¯)Ô€:¶7Ùt=Y™—n*¢ÎE¦µÈ6†? BU‘ÂÎJ.=:Ä¿)ôô%?Ž¢dË&þ\Æ¥èçS*Ü?jL¾ ß9–R%e »Êé0Ж–^¸Ok)àU€¤'·øäëo©VÐs¸/¼7ñÇý{ýIº\䵎åJÄó ›™è Ì᪽͋ûê4Gãó:Éô)×IK‘/úQ?|ßœÑÓ­M6;V[”fM]¹¹ù áf@Ê´hÈ[ÖwbU®2”±âbÑîÌèUW•žÀ3?³þ§³Üð#"½­ü¥@¥V!›LéßmŽ'B{ÛÌ[z•8 hßâàÚ?Xø u‰ŽÌ߯gÇñó£ «rÓ`@/Šž_Ê´S/T¸'=8Ä™Äñ4,cÇås±ÈJ7ªÔrãñá „eª™—l«0bîJkŸ¿¡F£6R%Ÿ†“Q/.«ÌUŸ.õ”Ç„Iû1ª¼´ÞŠw—2jÞM(ßo æYÀ <ûßÓhŽõçÊޥ츈ޮ2}g¦kÍsL;.b7A„ÿ9–k?,cwÉÙÔ<2™©Ã1#a[±/#¾°f×ì~yæF“¯§0ì«Æ®»Å¾Õ{©2©ÍNÏârÕ^ÔKÚÃÌ}yjXϪÂ%™TÀ›¯g_"5íÇñ‰æ7&ôF t®Ã€¡õˆÙ4‘Þçôn3™±Ã¿À¯ÈM»Òr¬Ã IDAT¾áñS“/›u”®u³ïåä·Y‘§VQöNœÂ†0·˜Û­%g®oàþßXöf~vãÁ­©_Õ?öcÒ¢v%+îxû+ƒýó³<—@ÒewE¤‰%œ ühÛ¦y÷î Ⱥbu(cºÌ¿„,REJƒÊ^mq;»”ÅwR‡›Î2ïTGšwdcÎí`þÆÛ'»RwÔ,:w¼Àùï.¡P»P­b$“§ã‘ÑžªCçѧcY.-¾B’S­¬óɤà ê@S¯\ì{òÖ©]Éw5÷dŠfL²k]† kLü¶¹ :ùœs¡‹IDvT¨éº‡YCWi[•~3ûÓµÆ9f‹ñ© Â[!¡ó¨@®D?~ 7ƒÇõŸòÅðÁôÐÿŒ¯m]Ú¾ÃÏs0H®h”`2˜ÓÊuÌñaÄ«\Èç „ØW’ Ï©íþŒó[BÅh#ï Ñø Xd !aj,È/Y"Ë?gWb ’Þ¬ e2Ä µ5jŒ$§ÿHdc"&µâ5i6sxÍb¶œÄŒ„µgúÕ dÓ¦óD›!S­áóoÄ©r+jšO°çf|Êv_ØNFº­éS'–=[/m¥;¶š|”Qú°èëA žèMPùÞ nœûƒk}&ò×ÛÊ_FB®ÝÅT¼)5óY!)tä«Ñ’FyTXÌòKùËôdS  ïtï7·òÐvÌ@>rR€Ò•Ú½;àpp%¿$#g™‡?,É~Û˜þõhFNù¿ô z¬Röq–8–¯GÑè£üvñÙŒþÁavß´¦ZƒÂé½O3­c_¡3Cë=cË÷ûJ-¬3„\á’_$Ù‚>à2÷ô6ä²ËÐ>Q²¦Xë¡´d‹vÜIÏÏqìXE–ÇQ¥[j¹røÊË=³eýuVOLÿ£'®á¶Y6Ó•Aá€WÇÏÐÝÁ•ØvìU®êÔÎû”?öÝ Êd"Ê÷(â R³´ý‹Aû_L£œÄ¥+ÄšdÌQw8ÿØ‚½›íwmAþ.:<V€K»ñ JÄœôˆ‡±­Xƒ|j0ýÎê}fš ËðÆFö®ú=ížþ" úÐHÈëEÒn¨’ÂyxÿÉâ<ÿ un/ª8òû;Ä™-$`ïåœ'¬£xƒr˜.ìæÄ£D,rONí⌡ KØfÑ`QCù=ÎÞó¡Ìñøù'ÔÕ‹ÊîÒ_8~Ùó¿7f&c¸sˆKa&ÀL”ߢuyqÎjè™·ÉÎ¥cq­Uwh Ö¦¢ú6GnÇçht©œÅ]21×pSW“:4€ŽbuJ“|ñ(³œÖW‰ëÇ=iŸûëvÜâùtŒ¯Í;æî]ðå©ÞŒl Ç÷r’“+6i¦™€Ã§ylAŽÃß7 ¥[nl¯È'®q\;ˆóG^äRÖE¨]®½Ÿ)fOÉE¢³Ó'€8ƒ¸G„&¦.dy†Ïï—xf1Eúrö‘Œs>ÑcIá-Q8T¢SÏrøoÿ?n'È€Lbà Þµ£f«.ôlåIÈ¡}\ 79’Û7b)иEu $;•?oA1•KvÓ°yteáFo¼7o`é¤úÄÿ¶†=³šž@xÄýôMX ,Ö€,ËøÞ̺°››z“-‰IÖo¼ysü#|ÿ\ÏžÛI°-O—q=iëu™…—Oq_ÝŽêù4øû@ ¯J¶î»EŒ9 éÁYþïÜFD@ÞÆÃùºí§\òý¯l )aåèŒ&á11©Í1L‘„«kP¦àUÂèQ»•¢JQRXN*³ÍÄ=‹A.åŽòñ¢e¯ðaINĤ´J©Œ@ÚZ%9)eèas8‡gôæ°¤Á¡@ZšÌÔ\³™º3£]YšVHäÔì‡$ÈôÉ2j­‰”Y{$¥jÉH‚QFëÙ‰ s|Ö0ö*(ܨ/#¾‚Õä%œŒ4£-Ú˜šê«¬¼—ƒR …d"øÐ/œ ÒcŸ>À¶=©”[o†±™-† ¨±Jÿ‘HjkT¦DŒ–W¥ùÅk‡dS†}*pkÝ4®ÅÉ %kª¼Ôû¢ÁlàÑk®cÖEZ0j˜÷×Îà÷Ç©3II×ùå÷DÃmŽœŒ ¾Walö‡ð×çüODþz[ùK&á¦7‹÷t§Û˜Å|©Ôtá$·#ÐE%eѰÉBRœ>å¿Iϸºg;—Œ †‡ ~¹úÒR¹‡9ž`ü—T›É¦b¢Ÿ÷0pÔ¹¢³Ä•ybç4 l\l@N|Z©’‰øð$¬ Ùe\ªÜ©ÝÖ˱o¸õ|%%Ne?¥]‹ê²£lE[W3~“ce¾l¬ãÚ·§Í2¶0rú!ÍPÑù<·«|„óý\‹Ê"í²}LtÚKe'”‰Ä›!­XTºx+ڼºO(]-ÓÏÈÕŠ9Z½ð^Ì‘¬÷Ò_¡´sÇNUˆn ÖÐIP ÒÈ<¶Ñ¢ày)à«Ò¨Ä¾îdÖÖÍøž1mŸªÝ«òE»¦TʧÅb”±) F x{éA>p kœµØUÇŠêæÔØKƒ2)+€ÇÇ~' åŠß^Áñ'Ùõí0q|13--i×}_È·ø}ËFv_DdO©sÆÚKTRZŸô‘ Xœ²[#C¨ÂG{% wãÓc[s JºX£ sA¬[7;TîŸ3mUÓÔÑt”h‘ØXñŽ_vÇ<öÍãÆ—XZHŠML¯Ì”edIúz´˜‰¸|” öM©ê~˜;µ+ ºµž»ú”!—_'§q—‹?¯(é_· ;C¬©S*‘s ÉêQXéò=:æãòŠåÜÔ§?•½.ïHÚ|ÜæK”uGm4¢pô@—1fâ iÏyYF’H¯É'Q×ðU ¼rí#Ò±6å,×Xö ÈX&šúìš!d`I 2!=v·Xd$ŇßÈVá} °+K‡±}ð8³˜¹'RF¨@éJí¡ø,r=£‡^"Þ©m‡f’ý·LÛîGÀ/‹ØÚ¹ƒ¾kŠ&1˜«>76#\Ÿu“´ô9€•Øäõ¢Ýˆ Lµ›ÁäYÞË„–¨~fÌD"q$»Ù$-²…c, éƒÁ䘜ø˜k¾©/bîs%ØL ~œº¯¦Cõ|hüý‘syQÉÆŸ=·c‘‘‰ºs•ç#†ÞºMtÓÂØ©àÕg˜„Z«SbZÏ29áG9P§fKº|,“zŸÏ’pŽOÎѰ+²!³ÒµèW.ü‡Ãüˆ²®@.Ä}ƒ ’5¹=lˆ}þâ)(ˆ :Ï_P÷£’8þ„¹JSŠGå‡ç'¦hƒ4,äŒÚ'  v-‚‹%œ (y[VÅáÁ&Žø'"ÿÄ3iTÖžS'Œ”nRãÙø%æ á=¡¡ÉX»¦´@6(Ôhf ¦¯orB0qvrÑÀ ÄÁ#ê¨ãD&½*Í/ºR-¨—+7|½Œz(Q*i+©|d.6ßÇ€„Mé4²¿ÎÚ³á¯hí.¡-Üœ‘£êºi›/Ǥ]§LÑAD+jà¬U@ꃤJ£D6™>¸!¤Dþz»ùëþïË™ô{ÊòJ÷&L­ù„òlZÿ"IB‰$rS·iIœ]=™»¶3 ¥‰A,[Ù€ æáù¡å²L”îToT ½ HÌ®ªßB|Xظb«„€ [W-É‘qY šB9´ú µ¢ï4¶ÞÖƒC5úoNò¦©L9ŠÑª Cyñ›¢Î±áPQúõí†×ÔÕ\È¢û¹9â"¶¢±—'65¹¿Ë7 =4ä¯U¼†ûüü$™”2E^>éR…Ç;¦pGoKé—~ƯLÿkJVÅš £¿§÷ë¾ê ˜õáè ÷ð9‹3/ýë¤ÑLìñ¹ŒZ?¥˜WãIÏï¾Æ@™‹†CRûá¾™t•(‹Õ'.¡ã[L¿ ‚ðáyán#'›D乌Ùúðå"Ɇ2_¶§àónOëÒ7Øt3uzÌ·-YO€ÏVæŸø…üuz3~È Â¾žõáÇJ#sb‰Jwì­$H”%ÖŽÖi2d(Ÿ×)u8éR?µ$cBçj›^1ªÔᢳ™˜òôÂ1² Ðc|r˜‰“~O™Šâ†7?~Yó9ø¾*n”e,2HŠô‚$•#Ö™ÛYÊ羚%ê*G:Ò¤j%ÜÊ)ð]{}6Iyáí7Š»’xpèæaõ(uCCIýiæ=΢q…Ò™Ý;áqe5n¼Ø ùÕyGMÁV#éYþ³§/á¾^"W³ÌùøéO߯Î'Ò Ž<ìÌç•òã—§ ¦+K³è¹,“•6nØ(!ú¥‡ù]^A„5É® íÇ¢Œïræî¼›vÿ’lŠS·D>S®i’!ì2¿l¿Mí¾u(ð‹÷“qtÝtŽ®p¨ù5sîâ÷š‹µlFÿä2G/ÆR·b)œ~ 4gØ#QU÷,f1ñȲL‰’%²üsqu!É>æÍ[«©]+òYÏŒŸ8ޱc†Òº¨:¥Q¡œÈƒS÷P•­N>š\^Ñ=<ÅÝx6®ÛAc&0aìFv¯…³*gßm6™A©ÉÐ ÀB£‹ìß±…M›`Ç¡( ,0:G­t%¥…ňYnˆéÙyŽ?-@‹OËà RáPúS¾(ÅÙ3O±8xR¡D¬€]žÊ4©›‹¸»ˆ‘rQ³q~<ó´›a"~‡¯¢¬ÙŠóiQjóQ«ÕÇXß9Êx#1"P¬FW5Jl WÃË5ž€à$ÇJ4+ËñcA9l]•òi©Ù™æ%ìP*íðlÔÏ„«\ Íô°iâÄY=eZ5¢˜µk¾hâNÏ"̯J³ ª¼40ŠîÕI¾¶ŒÇ3bÔ(FŨ‰«ðMŠæø¢‰ÌÚéŸ27„Ò…-«|ü7nÅg¸˜dØŽ m¡æŒúº?ÌÇûJ µµZ…RsøEûç¥u‡šäÖ(и{ѼŽ=þ§m}Ö{J䯷™¿žÏS¬D—׋vƒZ¡;µƒ Q–—óW*T.ê‚V’•+å?kGóU|üüÙ3m8ǧ~Ǩ±ÌÝû “ÿf¦LXι׎ý¾Q`ãQ†ù±±²Â.w)õùš¯Š„r`Û"² Ô-Ä\?Â=ûz|Zɵ$a]°-Ê$séxàKýKRÈ$íãûͨ1¤µ]•(Ô¶Ø©ŒÄFÅcŠ<ÕQZ—945zl%˯£×ÐfÐd±iK4×ÜùÑÔw¸Ëá,†åS:£¬gœtVhòQá³AŒþÜ…‡»¶§ô@¾B[gÛ…¨wÒ`Ä|–¡´lY…<:%J-î…=É«Kï¡ü—Ó¨°Â^§ 9& ½EBW°6 ‹¶ ‚ ÿi–$b%ò»¢‘$$¸wø:ê[SßÓR…µSŠuD‰„m¹Žô©ú”mËײb{Õû´§ŒXHŒMBrôÀE ’¤Æ¹D òØ(AN"òI ’µèÕ÷JÆK\‰-DÓúE±QHhòT£Y%›´1gÌ1Oˆ$?ÕJ;¡”T8—oBýÜÏc§îºŠÂ«åÓ"IrWûŒV·8rWüÒ1’‰¾~?ç&´úÈ;••ÎO씪lŸ¤²Ã5—+6/•;e·Žüš¸ÑHäãxËU ŸVB¡+DÝæeÐä4«dŠã­=[1lx[JÛH p òW#ü©Y…9b‰æúÜš¶ÆKq#ÙÍË›ù\R¾YÜe:†O|YZ¶*MÌÉÓ¿T§À©Z7:¹Å;o“¤R£V§ü©¤×å%Z-$F“,£´/NÝÚùsØ#ÈòŠ|ȱÜ<úûš hPÊÈeŸ€,žÌD]÷!Ð¥­ky`£R¢u.€‡Ã¿c4%A„÷‘d[šöcSþÎ*¾ûù.IÊÔ{†RBNzÆ#½3«x`£IãNùZÅP…>$Ò ¥Œs!iq/û9ý»À÷çc„¼¶‚H‰.oeVwAÿ0€Qùû^¥>oÀdN¬׃ 7}³ÚlJÀ˜˜ƒE)ݨݫ;5‚Ö±`®/1[*›AKdýOqGÑ ¯gI,oß®”V‡Úâméÿ…3û¿ûŽcO’Qy´fÊ|¡…äèXÌ:WlUõ¼D?uŒM…Ö•bÕPÚàËž§9³]µ³Š?² @þÌ!ü¹l#î°dƒ’>S[³+È®nTi?AER*’Ìú`nŸ\˼~Xò·§¾ó=¶_ÎX€/£÷ÝÂ’ßûÒwÚºkŒ„ûþÁÒÕ牑-pr%«óö¢ýìµ ÖJ˜cü9ûãB¶û™pmò ŸdÍëïÆi’îýÄw[;Ó{È÷´´W t–í‹þ/òü]Âö½òKtæîY˲ÃÏ0Ã+Ò ¨(X² EBmàÜ#"#3lVK²ÅLbt$Qú”tk ~Âg±wÅ£+3lG"Ï–­(a«† ø(ý`pcá \ çøòe8õîÊŒuý°2EpëÏ•¬<ùòœ ï=‘¿Þ^þR õôi´Ì¯ÄÈåC˘µïnÊüT/ä¯(ÖEhÒ¿Ã]µ@2áwOá=÷'nèMÈD’Þ Z‰&Á„ÅOdTì8¯„uÁôîZ•\V‰<»{ž-3vpø~Â+‡ú6GždÅRgzw›ÅÚÁZ,ñAœÛ¾­·_±žl&òìz¾/8…Ñ#Zótö~ú£ýG¯¤Ž)ŠûÇ~eŸ_a ¾´^<¾Û±gì$Ft~ÄÔ×y±á©Lüí?ñµGåkóR‡å{‘®Íµ¦Œ³° ¾ÅéuSÙyâq†k]>Ø?ýHʃÍ_ˆ’³"zòºzé/ —^½Óö-\…U¯NL_5+dôAÇYÿÝž&üi4>áÐöã”ï1µÍ »u½ÑL”Å ‚ üwɱ\Ûu„¦ƒ'°ºV0çNfË• |ûKz [ÌWö 0„ã»g1‹Ÿ¤SŸê„íœÈéH#æ›ø¹öLút¼À„õ7xvj7çj÷bÖº¦<Ø9‡mÖí:¶*SÜ#.m_Ïéì[— Éøùûôé?–•-%b/ròj$eœS>¶D_`Ëÿy1¤ÿ6Jzž^ùƒ?.F¥Ž~#mßíîN¯‰+éa‰ÁWù}ñZ.ÄXK¦c4Y¿ù°|±==ºN`yDðùY¸*› í‘Åñ³.׋¹#íñ9ŸÈŒ1—ÇlÖ1˯ŽöxslxO¦­i!ÊŸ½”ÿ¥ˆ0k™âxKJ•ÖpÍZÁ­dkÜ=KS*Ì µ„á/Åê21¾Gð³DÁ‹«ñÏ®¨ï¥séö½IÜe áôñZwV°uɳ—;aHö”ù¤6v0hQÕ> Ø4œoŽdÎ;çØ0€Å’x°ûÿ¸4¢# Öw"áéeöþy’gõs¶ÌáÙå“ â‰»u„½†R5áO¾ÉzRpÌÏóý2GútžÂÊ^H~ÄŸógðS|ÎÒ ‚ ¼ û _ò©‡ xŒbñ'éŸÄŸÁÈõ~ìX²“î=F±´-*9‰߃,[q‚3(]ë1aN<­LÄ=¾Á±3Ø})&Ûè)swMyaŠâáÙ-|·íoX;&üM$ÙÆÆæ]§ãƒ`üØ·ãÊíÒœ¿šuž«›+ÞÞ9³¹<†Ê¯Þ 2M&Œ§’Ït柶æ³Ic©x~>s‚2úh‰ó‰ùÌøõF¬ðì2™NÊ;˜ŠkÙ=s=¾ `Sq3;Ù2}-W(×v}>ŠdýØÅ\ͦaâs’®Í;Ô fßOœM)EÌ]§-JÚ‚)žÐ×8wö¡™J´ÕyÒ±~2û·ŸäÙó¨T²¡Äçð ÛÃöÓab^á½¢×ëy[×9½^É$r¸ Â{ź ýôŰt,îŠÇ AAþ Ôx´›ÇÔb[2û¯)âù¨(ðå\&{þʘ¹§ˆþà?¾Ï”¸7ù†™5Ž0aæQÂE[ AA2Q©To\Ç!z¿³œ€ÒhY¦TÉ’Ù/h ÀlÔç`‹)Mÿd0†pb÷Jw÷“ˆ¸ëÃAŸ§4Lk˜LЙÛX «îòJ¤Žcšpç7þxØ‹.³Ó9î1÷âVlÅý9á×?¢^™<œ}D2&B|¶±ÖçÕëŸÆ{ë‹ï)ì‹RÖ%–Û>¢òWA„ŽdEz­©œYDå¯ ‚ ÂßBaG‘R*®í¾š2ðÖ(ÊÑ¢™ ·¶\|Å4,‚ ‚ oFT¿‹Å„Òh$nߺå2nnnH² ‹ÑøŠ½›R««vñ¤„£ððD,˜‰ºü#s/ÿ˜a¹½œÎð*Ùo+†¼Xó*'òçŠ)ü™ñMŸ×Ôà¦o‘ÇçÎÞª:å\ƒ¹þ«n%…ª•Guç0¾QÚü‡‚ ‚ |¨¬Ë åÛÑ^XG^eÇ¢ßy,Z¡ ‚ ‚ ü=,QŸ1œãï:ÿ&ª|´˜ò m ™ 8´–EWã^9 ‹ ‚ ›C@¿Iß­ªí›H6fßÃäÌé ’¯×%DûY–Ÿ« ¶aâÈz¸(,„]ÜÊŠοÓá]T6ŽØÈñÄ$üÕ ` vZ ±±$‹ú_á=$†€AAAAAáCôW†€À9 Ë2‹j’_÷eŽÖ‰MŒ#F;¥R‰$I™>UbekƒÚO¼AÔ˜ ÂßímW'%ÞʶAAAAAA^Ek¥sÿ$IB©T‚Ýy‚9Ÿ³•lA•íî5“Kò[K¡ ‚ ‚ ‚ ‚ ‚ ‚ (ÞuAAAAAAA„·CT ‚ ‚ o‡® “6-¦cAõ»NIÎ(]ùdöFæ4qCù®Ó"‚ ÿ4MQz,ßÀ¸J:ÀšrCV°¬o ¬Þuº„Lıyÿ(püxkæ‰Ç‡½Ãæ…­Éÿ·…Ìj ¶_ÄæI^èþ®¯x¥œåYUžÏùvÓ ê;‰âiAAø;ˆ! ÿ‚Â… Ó¸ñ'<øg–ÿ®Y³ú]'Q„”„®p#úŒèFÅÀù üî:‰’†\^-éܺ=ìQ&…pyïÖì¾El†é¿N3aþçÜüf¿ë(Ûª½?«€»&‰§eõšß¹¯—QØyÒ¨Cš×(›ÖL´Ÿ?­Ú‚O°áÅ´”ÄÂ>ñ|7z÷“Ai_Š‡Ñ®ÀY¦ŒØ„_êâª|­˜?¿ ¹3¬í¿a“GyvrIW„f½ûÒºz~tÆ0®ïÛȪ_®mN]@íBå¶CÒ\Ç®ÑØlzÍ>S’«Ñ8æ÷ÈÅÁI£ùÁ?5Qjwª¶üŠÖõË‘ßV…Ño3cf&Üœiu'½—L¥}ú[òÍ…ô™} ›&3XÒÕã导·’þÓO+¿&iï «|uèÖ¿=u‹Øc‰¾Çá-+ùál&µ•>kG«ú•)æbÉÏð=´•5;.ža÷ç,YSuÒF”z9O~͸ßB0§¦'§ù @éX–æ_µå“Ê…pИyºë&ý„1‹_šõv$¬=>¦m§Ï©S6:â :û+«×ÿ‰âËòUyš?/³*ØŠi³Û mÅ„ßCɘ%])ºÍÈ'áKé;ãñTÞz)q¬ÔŽÁ=>¡´‹šägWÙµr{î% v­ ‚ üÝ’ øc#›Œxut$üóıùÇ©=h7^‡Ç2~oHú3€•'½NÀcçhf^Ý͆¸(BSŸ½¬ò×¢ºÕN<ø;bW-¥/eRMëLï'rfö–ÞLzëßø¿yVá}ñRÙ•ê5å‰ê\ÔìÔ‡ŽuŠãje$âþ)v¬ù/•Ÿ)ÉÓbßuÈ›öŽEÂMŸÿcýös<˪ðOøÇ‰ à7`¥*«ªNÌQœ Yþ›O;ƒ”@XâªwdAþn’FýÝÆÿ Ø*‡PØR°¸=þo:+®…£ñüœ1ã‡ÒåÞ–ßLL]H‰kõ¦ þ“Õ!fì½z3¼©ÄŽoúr4Ì•zƒ'0ªÇF/¿†É­“N°tÔ\ü“\©Ù{2ý?áî”ý„>ÿbÉž Ÿ–'Ág&ɶÅ?gè°Æ¨î…‘˜©VWië†6ê(3Æyã—:)¹l2¾Tù ZJvA;·#Ì0™½& aà³qÌ=äX‘#ûQ-îQÆœµ/Vçý„~-ˆNʰÇ${ªôBoû?Y:u97à ÈHYo@e‡«&˜ŸÇOaÏóÊf‹ #2‰§ÐíH†õ”.Ô?ú ÿÐj‘Ô"pô IDATø|DwJ^_Ì·¡T{&Á§ASئÄÎ*˜‹G1Ã?«ÂŸ0bò úŒ`Îé˜ÔB‡œæ¯«\œÛƒnv›Â®2Cæt äfdz¾~ƒü%Y—à«)Cñ¼°šÙC®ð4Á‚$IY†¼j;*‹Euu#ãÞ%Ö®<&`xË»Œþ1ॊäìó´„6'çOæ”i‹Òº=¤Ø,¢VÉ–ò_õ¦r¢>Ë má/PàÓýc"ÝÄâÙu6ãºÔàäÔ#D¼|az;>´k‚ ‚ üm,Äù]àâ»N†qlþqƧœ:F‹:Uqÿã7‚SŸ¬ ÖÁËæ?^ÂÁÙ¨Ôå%{*tøŠ&7îqêAÙ<^ü’¸½r ÝÒú›¨ÈýÉ8¦5~ÈAÿä·þmÿ;‘gAÞ Y–]½ª<1§š}éW-”åcçq1ÆžÊݦ2´·§y¹ƒ` Ų̈É ·hp.Ù”¡cÐ?è3}¢²(cþibŒ7àªjİn£=»<¡ŠÓŒ_Pá¥C§Y9gM*L~×É០‰}z‰ “ç°+ Óƒ—9’ó[×±ër‰f1÷Ïp.ÔŠ|ymÒ/¾ê<ÔiäŽßþ „[l(Q¿4ɧ~æX`Æ„ Žï<…±RcJÚ@ÒÃ?X»å~ÑFÌIÁ\ô¹ÑµÎšò(]¼hV,ŒC>O0"“„ϲ‰|w(„Ì}rUv®hãž‘hÄhLù3eUbUºU¬¸¾ówc$‡œç—ýoTgX’ÂñûcW%:óúÚRô[¶‘ù_z6º•ƃÏ|JâîÝ<ÌÐxL•§í+>å‡U{ñ 3¤ÖËÈYnG¡sÆžhG&¥¥ÝhN]ÃbJÏhDÊ]ŸOóÜc׉пáAüï¥Î]\صç:‘‘×÷ðk@nꔵ1ŸŸ~áÔÃhŒ²™øÀ‹œQàân“>”mŽó—„l2fØok´ TèïL?H9Ï_ œª¶£®a7+v\âiBJÈ'ËYe°WmÇHð±MlØ‹pƒCÄMN^‹Å±°KJ~Ê”/²ÏÓò«ÏŸ¬ò©¤£d»ÔÜÁàÌ!«‡*Ýèíy…ŸÎ¼Ücþƒ¢-ðµ«XJ›ú†Š|­¾eóô:8J)òÍ_5Ž6í‡3kÁBV¬]⑟RX›ÚZ@éŒWçɬðþ­ë1¾mi¬3gI›Ÿú}¦±bólûa-ßnMyÇl[– $dd£³¬@c­$)2†äl+i­)?j3šVäӋزu9½=5 ÙàùéP¬ým[×ñ݈æÓ=oÝ !Oí>ÌZ½…m[Öð툦xd—N²ÁóÓÁÌY½™m[½Y3gŸ³É®)Š ‚ ü‹XS~Ô:Võ)ޝ‹”äút.›g7ÆõùmݺcÖ§Þ‹5i3w‹:E HZO:/Úȼ6…ÄÆÙQ{Ð~ѦÕwN{V”j2aÃRzz:¼tlæ-IÓÏ0mþ"V­[Éœ¾u(ýQ&Ìù–ïW­cÅÔŽTpE~‰3Ç ÉU›jîϸ­(T§2Ú{‡¹-§㬱§b·±ô¯dOáŽ3Y¾l*m<Ô¨s×£ßÔE¬Ù´%%ùY†˜4•ÒOflä»6ùÓ{èèÊ3lÍ*†”{±qµlNƱ8Õ¢G+N®þ?î&È€„uá& [°Žm[7³zv?긧HÚB4:“¥k7³mëfÖÌ@ƒ|š”5Eé±d CZwaÜœ,Y¹–ÕsP/Ïó'#%Žå¾dì¢ lÛº…5³ûQ?¿*·ÆÌÚ´€VùҿǺÌÖ¬A%[Ý y”8–oÍèkضõ¶­ŸG¯²ºÔ[Ež™·Ö›m[7¼ø¬!‚ ü²)»zey¢„ÚÖ"îâaD6FòàN8š×]še‘wNp채K^{1ÍÖ{BDƒo@–ÁÊ-a8jíOxúÒ¿NZ;bŒF¬3Ê’uAZOC¿ ¶TÁ¢d•—;t¢¾‡ ÍzÓ·oßô¿nõÈ­…mqšunCU7ÑÑ\ø73}ó$WÃŒ ½úLVØ¥¬K ·ĦÝt­ 6¤®­/\‹EV:PÀ]I¤dZ«,cø"”y(âœù<Ò¯œÞ 8­ —Š\µ“/ðgÃRª:aW8y;3R¦ä)°²UcåÑ‘`ÛæÌÙ†ŠN/ßž%]nòYÇâþ¼"ÐLt`f·b¸ªANz̹3‰—³øýæúÞàÖ£ø”ß,i)Új Â`íéhÊçëHØ«Œ[ìSÜÛMáûUkXóý7ôkàVzy; +;4ÚR Z¶‰m?l`ùŒ4/aûòMM²£|«º¨Nïæê‡5ö3*—B8&>"$!5ír"Áz=Ýyaº(¥-5[ÒÔé>Ï=K«DýËùK[ŒæÍ\ñÝu&Cë¾7É_Z<ª ñ±MÆ~Ǫ5«Y>kŸÏú~—ýv2Q:S²„Ž§×ž ™òEÎóôKçOæ|Š„m¹Nô«èËš|IΔ(¥S zuËËñ¿àoú÷‡´ »²ÔRüÁ¬1#4l7Š´¥GM'(pþ¨?ƒê$°clO:÷ŸÎr% §=h)Ñi ] \añàn|Õs;âê1|h}ܲÚm¦Žüx§Nã˜8}½]±dý•× ­mEÑVmÉ}n!ƒz`ó#¶{0º•ŽC3úÐ¥× ŽÚ·aT—Rè$Påi°Þå Z;œn]³àŒ^¹ŸŸMöUzóuKkŽÌêOçÎ}™~PK˯ûàeÿ!Ej‚ ‚ðvd¼†!ßVüFRÃ>4÷°¥àg½i´›¿ð>öU|/ƒ9u2ºåqTHØ—®G1ýy޾<ˆ®Ò±2 ­þdÎØ šø ¦:}ß$ï©_3tÈ7°iJ÷Oòñ·M1û`~vž£Oݨ]Í=¥rV[ˆº•­¸sèæ‹Ó É±\ݲ”_Ÿ üqƒOãç #¦X.ÿ¶„ѽ»ÒeÈjü‹·¥ûG./ž?æpθSíZäK=X:Ϻ”1]æÐý„¬¦t£nŸv¸YËö;©ÃMkŠÐvD' \^Hÿ®=¾ê.ù+9¥Ù…ßÙíÌÞ“¯ºáÇØªtýª<¶ÏC\• Õ+F²uê† ÍúÐJtíT ”.3hx}ô;ÇÓ£ë^/J÷‘-É{™#.|\-Wjåµ5Eë–‡‡¹›iè-¥[=†øyÿú÷èI¿‰ËÙû 1%íêÔr»ÀÂAÝè:t5þ%Úåì:#‚ ¼RŽÊ®^*O4vz'ç;2¢s=¼êvdh[NÿtŒ×Íö'©q,^›ºî¡œ»"FË{Oˆš¹7`‘!$ú4lÀGõjP¯aý—þ=²U&1'“\˜B9ûëv¬ü?¤¹íT¸VªC±øKì|”„,Ùbcm!Ìg;¿ÝOHë±g6ñ~œñ-O«:e¹ÿëU¢?è.R‚ð?R¹S§g'ò^\Dz€Ô „¤£D“ê(..á¶^µk5“Œi×Ù”„ 6/4³’ЕlCÿº±ìš~>ýÜÒ A}'nÿp…¨×žo"Ï¡ßE‰„x*ç’4é?ŠQ_'3fÊ^2Ná«P[£ÁHr†îÁ²1 “Úæõ­¿ŒO9¸jaZº­‹É€šl˜ržhsY¤´Š5vnvXå.‹Ãöo³6 UÑŒ?‚6þcÙêŸq;À“ÝLêK|<&«\Th9„áã;r>'2üxe®Ú´.Áþ‰?ÈÂ&¥F‹Â”Œ1m×Ë“Œ(´Ö¨%@áFãIóèQ\IÙ¼šcÏ#²¿œ¿8yµ¢–Ù‡™¾ñé÷§7É_ -ÎŽ:œó8*[‚Läm4”©#º8j7þÂ]O²¢`³~|¡>Ì·GR{s_Ì9ËÓYœ?–·£°¯L·^žœ_>•[z eÜ=J7êôíˆÃ¹ìHƵÜ bÐÌ Ÿ$È@B ׂ¡r~T’bµ‹‘|~g‚ ȸ±ÿAš¥¬gUzÕtÜZý'÷âÌ@÷äË9 ¨ì|”a/öÉ—4y¨T½Úd… &slþ~nÆZ@åB™*‰÷½BàKã¸K˜÷°óÌ£Ô‚8Ê5ªp,(3Aø  }—ȯ¾KT¹ä ?ÂÒ«e½°Ÿˆj”#eÝâ Ëc>?Ÿ D,Àã“»8Ýz"KÚrñ|ܯ ‚ Â[] @ÌkW5ícåoU˜2j,uuFvOÛGõ˜B#!gOÞ¼.}8eGéúE‰?û#A(•yqs0§O’$Q~Ü‹2#;˃ „q÷aŸçwDÉ#QûW™Ã¹pô íW%×¾ÝD¬C%õ-ÖÝÊYL('rárꋨۜ{l¡‹»-J"2.EÌÕýøvéF]_ñ~ Â³n ¾ãa–Óú*q­Ý‹NyγdÉ­´)ŽÔy¼¨âȯûok–!è{.µ¥´ÓóßÃÝó7R_„ã{)©¾ :ħ,€ÿ¡S<6È@}Ÿ¡l”[…«ò ){ŒIçCI6ÃýcÇ ý´>UÜ~åèÑ@:V•\¿=ቺuËõe÷yñqOSùz:ÄDb@Hq€Ê°„rlïeB 2DÜàtL÷ü¨ˆó ‚ üU¯+»Rf_žh‰½Ã¡CÓº½${,×±ñfl¶£ß© vã{ïn©¯Â¹´u)»|ˆ¥°ÿN¢ø È2<Š3"Ë27oÝÌrWWWb’óŸ“(ENâéõ«o7‘7M*”Ðòäh@J¥v#±±I˜Ì™Wµsï:á•«RÆÕ—SÏ^×LDþ¥”.Tï=žNÖû˜µì ±©wLÉ®Í*&qræC’dz¨µj$R?–TZÔI0<‚’°.Ò‚1#¼¸·j:{§?Îk‹5æ#Í–ßÌa%…l >åiCämöÿx”O¦U£„Ý>‚£Ò·`1$Œ+Uz° ©µ¨L *&_O²-ÃWý*rsíÔ”Þ¸ÚLŸ+$Œ~»øåBHJA†ßQ<úœÏË8ó“H¦á›-$Å¥&>)”+»~äbÃQÔ,hʼn¨çó+kñü´î··à“Ý$¯ï9srf¥UJe/j­991ehcs§õä ¤ÁÁ£ mOez®™Lú¿Œ)ê¼4héÉÓ}ë Êp/{³ü%¡P >ø 'ã1Nîçv»ÞTέæÆÃ7}”×·Á`Æ5‹aË´íÜMÌ&¯ÍÓÙŸ?iNTïÙ•|>‹Xw/ YÒdøPEžF}i£ÜÍŒýO0þ[´É\§mI"&Ãä̲,§Œx Ðâh«@KŸv~šõèŸ/ª´ÅU›ÌÓ¸ôû¿EŽ^²ÁÍV/T[Q´Ãz9ÍÌQ¿Y¹?ÓFMÀüí~SµgH‰#¯d‘X áÑéÃD+¬qqÔbWqkj˜Sò¹Rƒ21­BÎIñá蟵EOÄó+´8Ù+I¸›þ{0ë ×+(å¢CAÜ7Œ¼ ‚ üO²‹²$eŠ! <:ö;þ­RâÖrŽ=Õ¯c 9‡OX êUpÄçr êåÔO0fUt—ñØÈ2fÙ‚AoH‹Ó-fI!}P£Í½ÌD\:B`ǦTËu˜Ûu+¢º¹–;ú”çŠ×QçªJ«öͨ’_‹Ù6j$ÿ——“ão±ÿŠ’õ ±#XK½R‰œ™Ÿuoy¥K-z•Ÿ‹Ë–á›a˜¥Îks QIÏß3£LÀ’Z,i=¨ÝöK•uGm2¡p,ˆ:.ão0£KÏ?²H(±s·Cíþ3×4Kù\R¢QDâkQ×ãßåsªåÚÇ~Ç:”³\å{¿D ã°ˆJl\m!.”¸¬ŠÍ D$¤GÙ–W^gA„×ËAÙU¶å‰Opûl,cjÝbñÐ9Ü4äáã:Ά©³ö‘U8—>°Û¼^´=‰évÿÏÞ}ÇGQü ÿìí]Ú¥7!ô^¥÷ÒÁ‚J颠tDºJéÒD.Eª´PC/Ih $Ò{r)×öù#$!Qñ™7/_1¹ÙݹݹÛÙùNùš‰[¼•ƒqþkD8ÌŠ™ð( fÒ)S®lŽéõzRÒòpj-ŠÑ}êH\7Mb©_**ÛÒ´îõ1­*8C|gO„R®¹ [¾^Ï=ÊÒF?Œ+§²! )Øfã+aêwçIT@íüzu£a)GT‰8µ}¿]ÅhQŒî>"mçq:t£¶Ë]~Z££{o-¿N_É ȸ·Ï—5Ï3{þ1¢rháT;— É©È̯¤ÆRmMɶ½)!«0&Exõ çoÇ ”ÔPîÇ[S¹¨=rd¬h8þÿ‘©3p"Ü3wþ~‚ŸE)p©Ù†²1ÇØð$eŒ'(Ô@ËâÎhNÆ¡4®%qQ¢‰7V%ÚóŸf„¯ù†5Wžõ¾’l©Ø¦:Æsó¸—úR.òD’THf=é/|P•”P‚’í(æj€ŒC‘‚¨c“~6å;Ѭ@A¿”æ'Yf¬ Æ³˜u7s7leÈx»j,Õ`4äá›CR!c$=KDZåT“® NϹÎ[8û3†¨bmÞ¡ Ä]½’5‹jI Œy¾7´¢'!ø¼»Ð´ayœv†`ÊwùÐVèH+»¬8ýì;;¿åˬ#<<kW[dȘ’Z¥A£2¡7å÷bhðh>‚I]¶Ï\Šw>:=_¦sùüd!»Ô¢c-ŠÖœÎêNÛɲ J˪†pÞ¶<Î.eøvM/T²ŒÄH–¯lÁªñs8û¶Mw¡`V$ä§s¬©Ð:Ù¼ôxíòÍæ4’ÍXg¦7*kG¬ŸìË”Ldª%.vjÈ,±*­+ZtD'¿pždGÊUt$êÜS O/gº<ŒéãæPǨáѯ“ðÏiäxÖÌ)iÄ%¦{pŸý|ÿ…Q2nñ©`ã„Í“ï•5ŽO2lN%6Áˆ«öY¹•µ¸jÍ$Ŧ¼Ýk= ‚ Ÿ”mPÌfTÏÖ«µ²ÇN-û$dKåÿõ hà9ïÁÿ*Þà'_˜M#7¦(.œŒ¤s£JJ©K‰¸3üf §¦»œ®ðú˜ã®rôÁ‡´­ýîUTÜXq——&¤ÉôÜŸå´5‚&÷2é««Ä™í¨7y1f»e‡}0}Ö” 7,)¯;ÃÌì:ªÊÎÔïÿE®,ãÇÉÏÏ”Gšª–¤f´ñY;Zg~>5ë6–AUÎ0cúBî&Kxo&óçå ˜ÐE'cxôã'üNø‹æÒMŽö¦SuOéÊb_¹l&%6l³<ë¿@”eA„×HãIÓ÷Êã욇¶«Ûw§Q½aaÂ~ÿ¿D3 9½y;-u¡Žû!v>Î¥MN1‘üø Ç.&Ò¬zy·?à-óŸ"–TÈ3D%êQ_?¿lÿ‹ˆŒDgL&5-ŸµɆr洛õ)ŒÅçs÷¢«Ñˆy]°E.HóOzQ1ôW¦ÍÔ_éګ? ]3›pÕiÒ©4÷7Îà‹/×pãŽ7—ÒJÓ¨læzŒ² Uj»væ19~0%,±H‰"áI]ÔÁ™­X·î'V­ÞÀoã)Ô¨ ½,3^WÒˆ‰Õ£u·½ „ÿd'j˜Ä€‚§øváABŒj4 µ I]€ú­½9t.ËÍ0•{\E]¯+ [![¦a׆ØÜ:έ$°*Þžqã[³aë®$¢ÒhÐh4Ȩ«Ó®b"Ç…äqš$ ª×¢\d$4Žey·G#lnŸà΋ nêC8yNGå®­(¥•ѸդK[wBNæö}ñä0…h=üsú×u!ýÚŒütŸŽùŒÑc>côW˸™ωï¾âëmˆñ=Ä »6ôjY Yƒså÷h[(ß8LYö##aåUƒ¥\°RdéFÕŽðŽñ*'ƒŸô-ÓàÙ¼3e#pàþÛÛßÌáÉP/:µ¯„£ZcÅvt)ÇÙ³1;–ær…p°T26…jжYo/å·|e^sÙ•z]k’~r7~YÊAþËWF#†¹~/:”³G–í(ón'Êê®q);·ð¤Vy5w>ËÃT3ð€SкGÞ6—Ý«Q·`ÇVÜ"Þh†Ûg¸®CÍ2vx_$…(ï}œ ŽÏÁò˜³gãÛ¨<öW/ìR…ÚÎ8v3>—.SbL}nÚW³>-3 N\À.–/CýâN¨†cDÁ˜fDr²Ìhd­§Âÿ#²{#º7qÇ–nL[ÖíÙ ;™°Ô’ÎwØt96ËgNAwóg¾ÿý†ÎXM Q7÷³h™ñŠ%Uºv¥œ­†Gƒ§Û˜¸ñíÖ|—b¡GXž÷Ñ‘…3hÈH<´*0Ä賓9?ŸáåŒzîïXȦÃøråÿ°1%p÷è ÿñꀌì@Ñò)®E:BlÖ厬I7›H‰%Ng.³ê»Ý 0U½lP9þÓB~l«gûQ‹Ê¦$m‡e¬›NÔíÓ¬›½™ë™AKI[žÎïÚsó§3D¾ÍS8‡ý„ûˆ¡,Yo”Äéõß³+Ø®îÔêÑOKfÂMÉaø^Éì­˜ ÷ÈgùÊHaYô]:}ÈÞ%³zeÜêæ¿|¥ÝÝÌÜŸ{3xÔtµW¡ 9Çæï·Ÿx¼EÚ¼_Gè;{}Ÿ¾ð€U#¦r<5k¹HÌ¥LçöùÊœ[YöcŽ!16K&%I£.žØøŒ dr–sc¡3a6$›ølâ·‰1Œ£k÷RyØxV¾k&1ø{öÞ¡B­¼ll&æÌr–I¿ï×24=¿£Ç9Ó$óõt~Ϻރûcwät¢üŽðâ?²éš‚ï†EìÔ—/—uB­˜ÑGßáôºÉlÑtâ‹Ï¿D?w6Û寮¢*¡tõ'æîèÍ€1‹ée¯}47wÏ·ñB²x]!FŽ\ÂÏ:_9Äa¿$jgn›|m-ówõcД ÐBjè5ö~¿Ÿ·1¸/‚ £¿Íl¸4†Þß®¥Oj~Gp4ü=$@²«ÊÇŸÔ!rëÎÄ0y¯a[ãY ùðãWÝàÅþ¦Â3¦ØËüþ•ÂØ¼.±Ö›¦pã÷,GPôâòÖå”D®ížÀû½Uü¼0›ë.ÙS©uu´vðéâç+êÖŒbòÑ@¶.ÜÎa_²ª‹Dbðy~?D¹riìÞÊ¥±òýºÑ…^aïÁSD4ÏÛ0E{³ø{{ôÄŠÁ6@¡>›˜¿4˜$’üŽ0huR19‡…¾M°p±#ƒ{Ocå HÈÁ9ÓÙ””·<‚ ùa"5>–gø=ßv¥w­œc{bº¢p}Íb ìÍ´•ýЪÌ$?¾ÂîïÖp5‡ Üskã<·žyo“Ó-SøgIŠV«}Óùx+8*C1ú€ g=I6ä<æ‚…\Þ^™Û‘¥rßaÖ) ï—æÓÙ=ˆX8-A&ËÒ}˜>~ššÃÐm'0¾bÆÐi%{1cTm¬ †ÌŠ¢„¬‘Ý=‹o½mè6u$n›'ñ£ï³|«\š0v| ÎÎþ{5>çóòGøfÉ¥\¦JUaW© T|ÀŽmWˆË¶-ÔšR?¤vÔn¶œ‹Æ„šzÒÁé ÷Ü|áÐét¼®ï9NGZz~×/AAAAÈŽŒ{›éÌ©wŒq_#úmîÄ,‚ ÂßÂÊÒ"ß118Œ¦4L:(àçë—m777LÆ ©ù ušSIH·ÀÞæÉ(Nà0P IDAT²–ª'Ýá2ÖèS=“QÆÚÁúéæ”8R l›ºˆKI/Dp-Šeìá…?›ã®qòQ[W-MM{î¸Í‹›¾°éñ‰˜l\±UCœ$«u3KŠIƒcñšÔt×qÿ||ÆÈ@Iƒ½“%i±É¢çª ‚ ‚ ‚ ‚ d!;V¡s;WüÖ_zõ2K‚ ‚ y$ÖΓIéOÆ×fÿÅ€1¿#õ¹tÇDٵ𰬠S¯E©gzc¡IV”¨R­J½-ªÙ=½€ÆÈËøD¦m›*¸[˨4Z\‹”  u.kì˜ñ;ˆSã64° äÔ½W¯ogˆ}@”äN1§Ìœ©¬ð¬Ñ–ýñÉ ¾t®iKбý\ŒÌ ÷Z¸QÜÙHxP¼ ‚ ‚ ‚ ‚ €Ú“NßüÄÏ?¥èåU¬¹š(VNAáµ#€óÁ¤¤   (”ÏXH#{æ L]þv®¤pkÛNôùˆqß½9þ>—.ß&ÙíÉÁ#9³ååú cN㌹פô;™¯Ã8²|vaü¼X òè›–žãlÕ º»'¹­Ieÿ%¦¼ºš©¤<äFp}šVôàBÄCÒS‚9ó[0g²M-aS¤2ž†{ìSæ ‚ ‚ ‚ ‚ ÆÇìž4€Ýo:‚ ‚ ü'‰p>˜ÍFdƒ¸å+Û4nnnHгÁ³›x5'Ýaß’)ìËü«e©ÞT©+=M£»·Å“ö=·åñ£Ïþßwƒ=?Þ`ÏKûbëı9[B2%põtP×çMç‘Ï¢»Ô¡²k—¢s×káAõšŽ„œ9F¤þ+ü‡¨e1y‚ ‚ ‚ ‚ ‚ ‚ ÿN"œ&% 1ÙsNnÈ)\͹³!˜…s=»’$!Y:âb©')Ýü·ä÷•$ <ë·£’î, ƒÓó¼™9ù6‡w†£}Å€aIIÄwÿN’RÅ6‚ ‚ ‚ ‚ ‚ ‚ ‚ðàGèuñ$¼"bH&þU‰AAAAAAAxm$E«Õ¾é|‚ ümt:¯ë{N§Óa4Š9ÍAÞN &³ óM&µ‹Ç/}[Syô"'ÍgìO÷Èûü(/ãûŽ×˜4qO¾;Ù ‚ Â?Æ¢$}¾ý ÷5Ÿ2ÿšB¥áó”þãVßù“÷@áïa-®Í¿Ž Çú_0«C³§ìà¡!?Û¾ª>ú:h(Ò}.SKýÂÈY—Iù;‘«¼•YµGfάɱÓ9÷†fGA„·„Z­ÎwŒCŒAøK$, 5¢÷àhTÜsü=Žý²ŒÍ>Ñ5®¼ó^w:5«FIgKHÄïèfVo¿LL–‡<•SÆÏî€ÿדØnCÅNŸÐ¯]Ü-Ò»ü«V @gM ËUîå<Þ:ŽIûÂ1eæÇ¦ò0æHfÁøõ¤ƒlWžvCGò~a¦¾žÀ,“ÈŽ•hÛ³-«ÃÁÂDèžéLÝùìžA³ß„u‘tíÑF=°AÇCŸ]¬Z{„ ÔÜ&—qo1Ž9} ðÇ”ql Ò£²+M‹îÝi[§,®V&O±eåFN‡½8K‚„¶Dº¾ß†zå a+›I :Ïok7ðǃ”禜—lÊÓkæW´Œù‘a3}H~ëæ£åëu•¯¬,Štfê7]‘6}Î䃑™ï-{/§•°-ÛŽý:P£5Ƹ;ýe[.Dgû¾„7@v¢RÃ℟¹B´¸(‚ ‚Gé\ÏÃCþù9ʄ܉kóS{ñþœ¯©qü+&ýþìyÁ²4ý¾ý ¯Ÿ3ûúÖ'Ç™Yß´,\ŸÚ×8}?åoXÍŠòÃñU]ëþžÊù9£XêŸÓ2uoŠ(³‚ o’ìPžVÿëBËšeq·‘0ÆÝãÔ¶Õür& }Ö›”ÊZÃæ0²Šs?]‚_æí$oíy2ÛÏd^÷BOÿbÖ…ãj;ë¶^xzÞ,Aø+Ô…é0ª/en.dÌÌÛPîŒ9š6!ÓØ­ÆÖ2Œ#‹71ëAÅZ1jâPeÞ¹„̇B×Ú­)~„U&ìkôgdk‰í_áD´+M†}Ř>¡Œ_v+ó0 ËŒò’]u†ÏìN„ì³RÉžÊm+£;=“ t méŒø´%ê»Q¤¾Ð¡V².C‰#(}ysG_%,ÅŒ$IÙ<¬æ¶5ŽÅK¢¾¾žI ïhW™¾ͧî0þ×`rê­öhÅ ŽNħ=Ù™„…kI¼ÒÎðãs Jw£Nÿ‰ ö˜»ÓùB„NeiKúõ_øz‰?F'ª}8‘QŸvâÞ¸Í=9¨dKåžýy'U÷öæDùzMå+ËѬJÒù“&H‰ÆW6Ìd—VÒV¡Ï§í±ümC‡a]åÆ ý ]è~{ôÖ–´ÿ ÏæôêæÎ:ŸœÀÊ[×DAþnf’/rùMgCȆ¸6ÿ8cçNGÑ®aMÜî#,óȲH#ªÛ²åz<†¸X|â2ÓKöTéþ­nÞåìý”\;˜þ9iÜ^1œ«ž<°©)Øj<“[r4(»ñµoº²+ʬ Â%Û M8ǪIßq/VEÁ™,‘HJ–¶“¼·çe0†l`ÜÔ?ˆ6[à\¶ Ã? ‡÷˜}*1·Ã›'ÀBñâÅiÕê]Ž9œíÏ•+W¼é, ‚ðQ{Ô¡žË~Ûw“X½7÷±;¨]ê{ppÇCNoÝõ4­!äûÓÒÍ™„Œ ¤Úƒ†ÍÝ üí1fª7­@ú¹¹x‡¤`$„S;ÏÐáË–”µ¹Îe!KÀK¦@ív”‹8ÈÆ,ëˆË.5h]2šcëC1¢@|§–NæºôóJf͹ Çšÿ£±~S·]&<óÞ¯dQHÏq?ÂN®gý“_cü9{#‘¦Å\ÐŒÁª<ç~AIï©LÙñ0#ÿEh7¤-©{·q¿s×§ÇH{p5žì(Œ+§0 -†³"5Ïï'éÖ>¶Þz’6Ÿ»¤4ðÀ^ QáP½7ýK]c˹ ô¯’·ëùo#Ê×ë*_™$ʾ?˜º!ÛØ›ÖVOþžÝ~rHkáU Ê{£3‚îêN~õÿŽæ÷MA9¥ÿÍÔîµéÞïšWtìãþ¾¹ÌÚ„Ù­6 ìA³ò®X裹ul3«·^$ʘ1]Û×JròPu”ÆÝÙŠø‹[øÅÏ‹Ží«RÐÑ9ü«oåF‚9ßé‘´”jÓŸjái“9Z}ÕRÔ˜1©N¤Q­¦Ž¶¤ßÞÍËòÈ¥5Ÿ~ÖG‰1ßU$ñö¦-¹òÒèɲ0-G̦nUO´†0.îXÆêÃA¼<°\Æ¡r'ôjMÕ‚Ö˜â8½c ¿x?"]$-¥[÷¡O‡:±“ÐGù°ú›åÜÊz,»Êô™:‚b§æ0gÏÒÞt{œ ‚ dëùeL¹ÜoƒÒT¸·™Áœ†Ç2üL€uÆ.Dì¼±¬ )H—©S¨s6“ $ݪ=¿ùŠJg¾fÚ®`1"0;j/ÞŸ3• ûÆñ͉XÌ€äP—qßö$|î®´ŸÿܵÉW½JøŒ„ûxÞ±!5ݲ7ÌXR´Q5¬ïnâf¼‚Cƒ)Ó8O8Šë‡ãôŽV•f°¸}|7›½úúôÔ‘Å]ÑÊi„_ÝÊ•û Ì:³ÊVÓçÐêÚ&ìzœñ gS…ß ÅüãX–ú>K¬˜Œ2Ÿ«d÷ÆôîdÏ™…;¸›¢ÖÅÞeÀÐnÔöÐr‰³aòÓm%«b´ØŸÖ•¼p¶ä¶-[ÃñÇúŒ©àçŒ@ë}mÍÊx8:b™p•-?ü„w¸q¨Ô™A}ÛRÅ]ƒ.ä [–­çtz#¦ÌmÅå)Ù9µuÅ!|7Ò’•cWa´0˲*2•;ÒÿãÖTó°´Ç_4ƒ±j 6ʬwkQØÆHä•,Y~ QiAøÓL±—Ù±íÙï¡WÎÒ¯7ídÈ Ëîô='~½Iã3Sæ§=Ø;§ð~Ô…NvȈð¿êMgàmb©®‚§Õg8ébŠ+•ãOO«Ïp³ò¦³+Â?@ã\ ‡ÔGD¤dÞ•TÂCt8•rÃ"kBY‹WδvºÇÑ QOG¤ZkNc[?ÝHD‘ñrS÷ öiÉHŒº ÅežcU’¶m\ñÛ}.£Á5îõ[árŸ¨Œ?£®qöV&$$é¹àUÓ‹´Ç–¼ûÅ·,Y¶ŒE3†ó^i-/Ëy?/)[Ɔ°¡ëüãyàwÿ‡ºŒ›¾dE‰Nƒi½‰5çâ‘åœvdA¡JE ø&á†löó”„…KEZw®„îìaŸLUâT‡¾½ á½bA&U¶ïém Ê× þRù’°­ÔƒUýXý‹iYôRùÊ9­¤Ö 20=©û*bõ8x9£É%ëÿZj/:ŒB­˜íLÒŸ£f°æx(µ>û„ª!ëø¢ú±†•?᳎^Oß§ìPfV‡™7a,£&ÿ†±Ñ@ƵŠaãôñŒ=?lZÓ»¥çÓÞ†yO/a[µ/c:YslÖ`ú}ò 'í»2ê£òØd^ •]Eê©0çËÏõÙ"|‹ÿÞu0?>È’ÕWHÕcÁØ|þÃËÁ_µSEœ®,ftÿ~ _p•Â|Jç¢/¥“]›0bdRvNfPŸ~Œ\tÏ>çÃ2VHHØWÈg]¸°x4ûáË…»¸ù´¡Uµ-† ¥ê,Ø+‚¿‚ ÂÛ%§ûí+’ô!ü¾béÍжˆ–"íÐ4mËÁßÃ8w&–"«à¨°/ß„’º‹œ yù¬å·&äŸ)ò"'ÃÜiXË-ãõ5»B ˜puߌÿ¤/ýF¯äAé÷é]ÏåùÏ9š‹‡plØ€B™•l›R©h¼Â±€Vî•Ýh<à¸ÿ‰í·3§›¶(N×Q=𺺀áýðùÊ»x¾ãô´Þ®âôÙʼ±éÓÿK¶&Õ䣞•Ñ>yÌѸPûX~ýúK>9Žu‘ïðqÏJh%0ôÓ¦èvNd`¿á,¼Q’Þ£;á™t•ã!.Ô¯Y ³œYS¢Qe$ßã™Aé,YvmÂÈQ­PÍaøÀ Ÿ²”ý÷S3ò®ö¢žë%~Úþ£Wò L¿gA„cù|V"Tgùj~Õ—~†«Î²löXZWü¦³+Â?@ea‰lJÇðôùÆŒ!Õ€ÊÒÈ®´˜¼š k—1³oü݈wDfxN²¡L«:H—s[§€¤ÁÚ i†§Ój(Æt ŠZ‹¬_×*œªw¡žé{ü’ŸMÁaQ˜fM¹}ðñ¯êb¥²ÂÙѧr…Ù4•QÃÆ0ÿ„ Gõ¢¢ÍŸ —J–i3ˆšcl8‘1í•1Œ£+òó…XLHX—îÆàzÁ¬[wxdí“°)Û•AÙóËÅŒ÷òÜ~2X–È¢õëY½`<Íô‡YûÛmt »Òh`Ž,coP:J®Å7Q¾²ø‹åKe_û•æÒÊ-ÜJQž/z/”¯ÜÒê_&Ȫ:­ª¹¢–dlK4£K]GTÊÛÙ¯QíQ›±g§¡)Fô ¡„Äè‘=êРÀ#öí¿IœQÁçÇ}!hX'-I¦0Î !MS|÷âL„xûªWÀÍ)ØvxÖð˜çô6”nQ.ïÆ;$SÚCNýŒí;uñÌrì3§î“¢€’ÌÍpgO‡<7rš“/±ß'ŒtÅDÒ?8êDî/l¯Â±JSJÆgï¥HôŠ ]àQvûYS»yq,±¡tóʘ/lãÐ8ôÆ¢†¢Ë, ŠQEéÆÐEµ›o×_A ÀAÞ:á~«ÙÏŠßM´=žÑ­ ì[¾Ÿlâ˜ÂSF"|NíÕ˜*Ž*ì)ߤ$É>§y˜ÝyËo=LÈ?S4—O<µA-ÜÕ`U´ïhnqìVrž&XVRB¸|5ˆD£‚)î6™±w³åù®· 7ágSÆ^€ ¥W ýÒqîg»¬¯ŒkÃþ|Pð"«·úg<ÿš‚5©áÌþC·I2™I 9ž+Y¦¢6%p÷¢/¡:Š1ß+áHN®hŸ>š:z–Gz”$øF!»ÄV¥Â¡JsÊ$ždß…ô¦d¼OáZ“ê®I\?ŒsýšPÖ%hTn¿Çóñߌ:u‰ø£l÷"I¯')ü!O¦Þ1Gâ½ÿ2‘zc¬/çæ¯^/‚ ä@[ÏWl`ÝŠyŒ¬Æîu‡N°Àë½Á´MÛÎÊãƒHž´{ý‰ö™©f1u{»J´©šÊ™Y÷IPôèÒ4V$2Ví‘dK4’C–ȺM;•"ìÀšç¬J¶¢žæËü“òð}"¡’Œ„ý±“Ó!:LÀ£³‡¸ý¿þT+¨Á÷~~[g,ðh:œ/Z'²é›­Ü}yU$mEz ªŠÿêé\ORÀ*û|Y—èÀØQ5¹·jûåÜ_,ýÎjFõYlãNÙ¦}ñM1ÖO\FpíOè,ïaö¡ÇÈqˆñ[A”¯'þbùR9Q»ooÌ&I’žõÍkz•5ÎŽVØUý’¥uL™eÕ9-KU6û³‚¤Ê{çsJ©¦§¿§S°v´~áC…ÖE ºh’Ÿ¶žIŽNò˜j•5Žö*’ï$g»Î›Æ«ý [ ;E’èú*‚ ¼òu¿}q&=Nì'¨óPÊÜZÊÉÇâfø*ƈ œŽnOã*ŽœºZ†&%9·ù†ìæ™Éo=LøLÄ\9NÈm¨å~”Ûª¢öÿ‰;ºŒ)—_Eã^‹NÝÛPÍÓ ³AAë¥A z9’ìÏá«2Cše{¸5˧â3?ûÑò²K}úõôäÊÒñÓ={&’mœ±6%÷´înB›‚Ù)ã7ÉÊ‹†ÝÞ§y%w4*Ç"h’²fÂDJR–ò£(H’ ¶nv¨Ý;2}y›ÌY—d,T±h-!îÆq‚>ê@Í¿ëØˆÊæë, L¬³ì<³N‘¥N…9…Ø”gß3æ|ÖëA„è®ðíàÞHj[ VnÃà/fà¹x›RÚ2¸Y4›¦Ÿ!ÆÄó3 þ‰ö¼gkËh Õ¤û˜ Lµ›Áä­Abæ—γá‰0¨Esê7m@ÓÍ^úyì…Ô¼”ncçwmÁòAÊŸþ‚×j)•|™íÓPÐà\±)mjØ›öÜT©æäÎùV¡KãJÜÛ•‡\‚ ¼’!*€8몰‘¸§W@²¦`-‰ÑÏßä= !8tªMê—ÃqW¦m(sœOCŒñ‡hQÌwz@ãZs4!qOž”$´:ÐÒþ«ÎG? :H¶Th]Ãùù¤æ!ãféX»fô@6¨4X¨LèùýFÒàÑl_uUØ9k§"³ƒÙ”ï@Óá‹%4@Θ¢wú2ª›Ã„õ¨Š·ã³±MˆX7“õWò´V„)%ÿc¸Óy$µŠ¥X›r8»–fΪPÉ2ÃY²¬9k&ÌÅ;öíùòå ^Kù:{”ôšÎx՘ƊŽïS–UPj>Ëêï`ú×{È\¶ Ù¹&ík:S$·´7vðýX£û¬&Üÿ#ì­œÞÆœGªì³• ²MÉQ$Ë8YId,Œ+aéàˆ&åÞó 7ù½œy.‘J|b±‡æ0î—û/=0<­¼æ¸¯WDeãŒÍ“Â)kq±•H¹“úB ×LrTh]±•!!caml]­HM¨¤‘˜lFëªÍvJSìqæÌ ¦ý”ô©}Ÿ}âÅú7‚ ÂÛ'§Ûª¢€$?½JVت%bž¼.i©øþ½ž âеÂMÖùéþBÛÇÿ¦(.žŒ¤CƒŠJ©Cñø³üj„œ'óogŽ»Æñ ž´®U ·Ê*|WÝE—ÃyîÏrZ|:ŒF÷1mÒ5âÌvÔ™¸ˆžÙn™Fà>˜F5¥üM ÊéÎ27»ŽÐ²3uû~H‘«+˜póùA$¦Ô8Rewì-ŸÔÝe¬­3?ŸŠvùŒþUÎ0ëëEÜÓIh;ƒÙ sÉÿ³3€.F‡áñQ&NÚÿt-ȧ¤›»ÿ1«&À£"Æ«?d3rY!%.´nheˆéqN!/KK ‚ ŽbL&ìÚa?~îU=¹èÐ’".6 ]Pƒ¡*Y‚ñË~äò‚IüñgÛóºÇW8~)‘&ï”ÇiGГ内7H€óAQàa’EQðó÷Ë6««+ éž$ç%¬¤zãÚ_Ë”…UËZñøxPæw&Òâ‚8µ+˜ÔŠÝ(ä5±™„»7ˆ®^‹Š®¾œÉ¡]„¼3F^àdh{:¼W‘›[oCÙ÷èT"ŽóC1;”¦jÁd‚‚"HH—°ñ¨Në&Hò $A*@«V…yxx ‘Oo†©½†<¬ .ádŒ º4Äúözn?YÄRv¡n礟üÿ, [ª«Ñ¶B"'§‡ä±wUÆC¦ùóiwæ[v@‰–(rù ci(Øt8_u•Ù;o9g¢4  `4QÔ…h5¨'žWÖ²ñÊÆŒÎÒxaUŽÓz³t;ïÅ kÇg_4'æç¹l¸š„J£A…‚ÙhÄ$?ÛÏÏt¸W*‹ehbS0©(ݼT!l~ŒÏôÑy:ŒOM–ãø¢â¦-ºHÄ[ÖóE”¯×T¾“0o;ølt§ÊŽZ£¦ÒâÚ\æÿB,…h54³|]ôfÞèËÏ*H/¦5‚$I(Š‚Ú®u»¥yêafú¿ š†pÎE·¡CçÜþõ Ñ*g 9¦ò8ü<Þ¡mx¯M®mõ'Ù¦,­Þ+Jô¹ „ýÝ‘n%…»Go Ô•fVsü~2²½^ÎIÆ¿rssZ"zË¢ÔÊÜJ7“]‹’ʶmkïåÁé(,˶¢U¡X.¯ŠÄøÜ`3 7Žq·GWÞ«všu—bPiL‡Šé\^Lº’ÆÝþ¨ûw£å©e¹Ÿ†¶`ä¨G%=‰¤¨³¬ÝP“YýPÿÞBNÇŠ§Aá¿ÀDrx$ÆÕ©ävŒãQV”mÙ†2 a[¹'ƒj…²iÂ*nUùŒo}ÀʼnkñÍ)z&&¢/{Ñ¡)Í›¹wzá¢ÙæÍ2ÇsãØ>îÕã å´.¯9ÄT ‡Â®XH1¤É–ØÛ¨HOˆCg–°)Úˆ–ÅÕ˜ýæúx'£s5 §wöÒuWáT»—ðgÝ”[¤©5ÏÖ÷50„_æjbkÚ4+ÉÕÝ Ô¦m5-r€Œ•ƒ¤Æ“® Û—¥I£Â¨óôQ4ãt¡K}_6ž{Lª…#…<µÄÝ!É”ˆßñû|ܱ9Í­ \YÄË“~šˆ»áMpÏNtmp™5gc²/„»)”мdAAÈ'Ú¢•(f~H`h˜Ý߯ÆfÐÇÌ^1™dîlŸÍ¼=9» IDAT°p¶ƒòÝ4Æ8¼×ðýîŒNoR!éê¾ÝÙ‹~£ò‘½ ôÑøîYÈ‚ÀøWÚõÁ‡Ùë;žÞ Öð?ߟ˜ô­7ÏüWH¸±‹ÛF° ¯v¦p.þú»ƒõ<DÙ2iîÞÆå1=™ÿÓ‡¤„^aßáÓD6ËÛ0E{óãB{úõžÀƒl€4Â.læûå!$¡äŒÀŸR+å0ÓrXèÛy”ÅKôñ– °€ô‡ž7ƒ_“ó–A!ÔŽéðñ0ʰAF!5ê.6ÍcóÕ$ Äfi"³pLŤX—±|U>Ûó2Öîñ‹1Žûçæ»M·Éé–)ü³$E«Õ¾é|¼ÜT£)ôÎ(¶í4séÆÕìÓ¸¹±g»-×ö¸qê^‘Üw˜%¼,¸,#¦w#bùl¶°-XǤ`&çþ•ЖëLÏw±sÛEžT"ãZ÷Ú;x³)s à j 6ývZo6þž]ÏÈeôo%å!7‚ëÓ´¢"fYyØDôùM¬{.µ„M‘Êxî±?<jAAAAAAAþýD8Ìf#²AHÜò¿•m777$ňÙ`ÈÇÙU0Ç^`ÝŒ /ló"G>ˆîR‡Ê®a\ŠÎe\¯…Õk:ræ‘bø¯ ‚ ‚ ‚ ‚ ‚ ‚ üç¨ÞtÞ&&% ŒéÌžs‚ýû¢³ýoýÚ[œ=ˆÙ˜’ë¾$IBe鈋¥ž¤tó_Ê—9ù6‡wþÁ½Ü‰¤$â»''‚RQþÒAAÞ&Îá½ %4o:/3 OF/ÏüZ6¹-Xò7RáÚ°ç7§T¶çú¿{-4 X»rÝÜÞ†G,KjÇžOŠbýOÖ¦?®Ãð¢ê7—Až±,ÌçK'±°šâ3)ùñªúNnþ‰ºšÒ=Æprrylÿ®Cä*oß'Füº~0߆º“ ‚ ¼}Äà–sçb_cNÿNfâüñþ‹{ùkçòõäáßäõ”-AxSþ{ŸIAøÓ ÑöŽããÆ(´ÿ!™Õ|ë¢Õh¬}Ì×’ÐÇ%üƒõ=W—ΣÉÓ)2^­û°ªÕ#v>ø7¶¾‹ïA„7IeíJå‚ñlž÷Ç)”lÕ¥Ã;q{ôÏÉ©±6cK\kuà»öz–OÝÏ™D…"€!øwºOº@¸Yƒ{¹zÌßI!îøïèä-äH€AþMÁJ´v cÍž"õ \?ÅÚ5ÐÀ•ÍÛ"8þËž§iu÷nr,¢!-<¬Qù¦gÜ 5®¼×Ê ¿þD˜Œ˜Oìcþ“ Òp𚎎Ű ½)Ç~G²1‚ÚS†Ñ2›üÈ.åù t<»ÖFc@¸p~_²œ3R¶–ÊšR…k­–´×{ÓËí§´Š’M%À² íkjðY~žë‰FHôgÍÆüܪ n§})×¼8igÖ³78 áìÛq^kSU{ocQ&~׋ 'VÒo[z‹‚|<¬º=G¹ÕµÙÓÃH–Zl Ñ\ Jƨ@轇ĨÊa§¬Š½¼ÉŠwºw¥eðQ6¤µçy¼&ÿÆÇ㜼ê½ìß|üiZ}°?ÇÃ[ò¾»2É/—/³r¹Vçì«3¸Z4‹¿8ÍŸ'Õ·çËÃßR¾PHÍq?–¶Ö‚oŒ³’ˆßíxÌål°”x©\ÒâñÛ¿‘õ¾Ì]Üâ¹c¤Ü?ËìûO~ÆûäC¾á»k²î' §ªÕ(}žbI5ÂCÇ8÷^W:?Êݧ| qâÝ^ÝÙÔ WµBbÈ }·›ýQ&4î6°+9aeNÅφïV1b^gtÎáÖ£-mÝ0vØ/œ3¹Ó¾o†5*„£)ž ¿ïaúŽ@bM€dM¥÷:2¡KŠÛè ¹x‚+Îâ›Î°µM›C‹Ó²”=Îö wîbòöÄ+2ž­û±±›ŽiŸÿÊÉĬåG¾LC&nD#K$}—÷ocü¶GÈ¥³ÿ;€¢²£y¿OXÒÈ'¹´ggæ±^<1*\ª4áËÞuiXÈ Ò¢øíûÕÌóMCíV‘áƒß¥SG¬Òã¹|ô³¶øj^ñ~^õ:H–¹ŸÇÊmÛñE§J”¶“HòeîŠPZ kLQG‰ù‹J翇Ë“´ /…W}Ëè«iç¿m{Æu®@i[HöcÝO¿³5 3–Ô;šÏb}¸V¸"ÕÝlqRÇr`í^L$k—ëò]Ø5ΖY#7â vÕz²ç‹¢œšõ=S|ÓQ9TáÇE-🾄_ ÷å·®ô‚õfR5-6•†°¯C4Ûç¯gW>®…Æ£ë¦åàát×õ¤ £†˜KG˜²î!úŒsº©á%fÞ{‡/»'yÛ>Þƒ}•&|Õ§õ<,1Å?âÀÖÝ,<‰±P}fñÂ9[|›× Ú–®åìQÅ?dçúíüà“1²_²*@û^ÔÈ 7µ‰èG˜v¾ã{ÆVÝ•mËS¸³m_úWbÝœ l³Š=±f¤ÿcï¾ã£(úŽööZré^¥WA@@@Š€(>4AAÄÞv>*¶Ÿ½"ˆ(Š4¥ƒz'zBBzO®ßíþþ%Tý¾yñ:¸Û›™-·ßk ×Â=ꥺ9º}o¾Š yZñ°«oÞ@Èʽ„tnBýð`òãùðÝùürFäÐ@Lçå–ÙÅ¿%›ðê{×ãÿ¿wy~穽Eóûð¿83Ætà±a6MY·(Ø]ÎÓ÷ö£om•¼Ä½üžzjXeÅZ‹›î mc¨¨Ÿ¸‹O>XÀÜcÞ*\“ˆl×›gÇw§kŒ‘‚Ä|øáB~u_Êço]ÎOÄWÇŸ¨µµÁì‡Ì¼üÐ|w>ròxâ,çÚúl•ú}G0ãêV4ôslËržýpñ®]£Bˆ³F+<ÌŸ¼ ÆþuÛ9|Sš„©,É/ïIU…€Æ½x㎚,žòsR}€ZzÝKFüv~Iê͸:)àBƒB”&`!„ø Ì‘µˆp¦“tbˆfÝÍÑD'QMñP:d©CçÈ"¶²Ÿ|:ÊÚ 3׿Ííö3Ÿ˜RC¸´¹•ĵ™Å7It'qk÷‚N—2'vT©{E%Ʋ4³ø˜7s?¿eB@kå´¾œfšt©#ù#'=H¿†ø3ñýÔ_˜¹ßY*/†ÀHØY“ybküdÍÆw]]jY¸$Æ@ƺü“Ûêɯ³|é`Þfá«—_cNz8£&MàcSõiÅ7«:PköÇÜòaÆú½ùæÕëû!_Ó°§&²a—“tÏi7€Ô0ŽëMý5ŸÓon„ÇÐ$0§!Œe½¯ƒ0G·¦Åá¯ùE&¦VW3õ©ë*Ý{[¾ŒWîBþŒo´:""Êw£›jpëÃè¶ó{nøß!ò‚sçÓ7ò–+›Û~ʨt{*þ\¥õ¨òË1´Ó¦\ÈŒ7Þfâ!ᵂ±'g²êÓzÌ¿ßËÎf« °Ô-±% a†0e˜‘Ï^~9IаÏõ|ôÄÒû•fê÷¬Ë´'?ar&Ô¾ê6fŽïÍâóÙUbÌ>WÒ^öèƒéZËÈêšw¯IöA7­»DcÝŒ¡^3»ù<Õ'² Û‰6‹¯[ÝÀ¥Ÿ0î÷<ü(DÔ¯z]¨!Mdø”ÛŸLÁe­Ç=¯ÝÊKý“˜°0PnÓ›/àî‰ß‘éò¢Ew╇.#íóOè·>ó%WðÖÓcx íÞˆåÙOë—.3c4cÎû~`ÄäÃÐn0_>pǾä‡t#ío¾…Çšìâ©Ç¦³©ÀBýhĤͼРŸÖ_ÈÈ—÷R˜j•̵…ö7á¡z›yðÞ/‰s‡Ò{üx^{ ˆ1¯n"ÀJ¿Œ}ñylôyè~ž} «¦ì£°T“×ÈO>ÌOŸ¬å±ƒEXZ `곃û!Ÿ¥„0ì®þ4\û9CÉ"¬ç¾šÌÝO/ã ,å}/éÌãܘ†/ÿøQì yì1<Úm7w®VËÜß ’“Î,ËR D_1œ¯tóί°0+€®7gŠEaÓk7ÒxеŒ4ÿÁ-·n!ÍJ³z ©¾‹|â"Wîqa…½â/ºÓ˜þÑz½0„›×~Å]†0Ĺš;Hð·"öuÙ¿o¤_F Rz3¤K83çeáµÖâÚŽf¶O=LžÎ©¹Ê¼ÞC` kæÿÀG;Ó( nÁó¯ßÀ£Ýw3ai‰¹Ùüy¬ü-‰{F¶§áü%ðBPÓŽtòÅ3i9{‹Îà‰WQkÝ<±÷ø”–ÚÜñð.Y?AO&â­Û™×^lƒùø½Ý[Hܺ%<ôÅ=a\÷ø=t¹_~DŸõ.ZÜp;ï?Ú‹øI›˜—8€›ºD0}N&^,´¼² Ê®Ùì°ë´.™åòÎåa€©£Vs×½?‘ÔŠ&8~œ‘^eBqv(5hB]W2_d–>W#ZóÌèΤóŸÄŸyï®8)#‘ÍÚsm\–“#Áß‹€¡òEÄé5jÄĉw–û*„ø÷P-fŒ>Þ“gEËjµ`.É2†sÍíi°éW¦%)VÚ_ÝuÓz¶ž>_®b¦é5øռ™)Ër*œ÷$s †ô fÛ¯ûȪ엒ÁLL˜•è–Qøö3þ3ñm\aå¶G®¡S`éœb²`ƇÃw*ºÇ×€Å`ÄfËòÂ@÷¹qc$ج€7‹ÙÇ” øQ°5ëË ÝSyóë8²ü”ž#Ý_ÀÚß·“Ó¬+÷Þq ×Yâùvé1ŠtNK !ÍyxB}V~¼„-v’ÉT¹N.•n‹ƈŸeÝôIL_‹Í3~å—ã"ŸÞ¾”ŠêJ%$&kÍKˆØö3£ïþ#ÿo?—Œ¹‰ MÅ Ÿ£öU­ Ÿ—¦Ó°ßU¾ùh-ä.a….ìë²!«–gR«g+ê! á¥\a:œ8G•“š#U[SÉõéÅÓc$iDÄœÖG'{û:6´ep}`¥MïF¸6mao™ñ_5{þ‡{kîáµïœ|`Ì\³½ÂÒ˜ñ[y~ {â6¦oqúä/bÇÆC$Ø5to›6g£„‡|ò’ ¼k‘í;Ѿ`+ßlÌÁåw°{ÅV’¢ZÑ3ÚNìò4¢{´¢®¨Ãàv°~Y¥gp*ÿ\^¼êæ/Œç˜[Ç›}ˆÅGõ*g„BTÎÚœ'4!~æR6;Ê]A  ×­éjÂj8}<@05¸–9Óÿ˺ÏñË ÈŸ7‡©‡äÂîbð/½ŠûsBlM©U£15BP¥nÍÞe¾6o<¯×Ï᤹ç;ËBˆsÌïvãS͘NþpR0YU4—¥Jß;nã>ëZîÿ¿ýœ]×| 7^êaÑËÇp–JÕDƒ¾#ywPク„Ϊ }ؤ Ìûy1ÎQÆ<«§S0(>Ž.^Á¢D'>àðšul5„µŒl`o¾< Ë33Y”]â'¶!˜~·_C£U3y}¿])}*«R\$*ݳ_|…ÙŠ‰ˆú-¸ýþÛù¼æ×ŒŸ•Š÷ôö¥W\Wƒ‚÷à*¾Ü˜CnáǤžŒiÂÇG²1Ÿ£öU1#®ËÛÝðÔýß°ÕÉÀq£ùô)+w¼²–„jw·U°]Ò“)´d×'_òmRY!—Ý¥žzJN1h·Ã‡÷Ô¾¼Ék¸²›‰£Fòó.VÏù…7&à #Ø_Dº£¬Û[>²Ó§n(©Ô 6qÙ±Â_<ÁdD‹À¢Z¨f&ìÒ[ù­«†(ª £³ˆ€ã‡ÍU„£D@]×A­,˜®;XûÉ—¼:ä*îxé >²‰ÿûb)KRË{¿¸®ýŽB O>¡ã×Àzƺ „D@a§5cP(Áš¬“Çeg^![¡*dWa{Êý¼’rŒ1Pï¬ÚA'7ÅBtˆJQ|‰úò»H³èiÅ€Ðpæ»O}®éè(N/ÍÎŽ-y<Ю&qõèè;ijq¨7z]¢·ájc#aI E%{ÄT juqbÝòÝ'Ê\ÑïA ƦBà/Ì)Ö²x£‹ëÏžGÁ©&?ÛM@Cf8£t [ IDAT§¾18‚0c-{ûi,¾›ŽÉ ‡‚̨j5­Žæûªpì+A  †ÕÃÑÂSÑN¿=Ÿ%€ZAŠ»Ûø),ôR¢P †Óg_T¢Úuçžÿ´¡E0¸53 ‚ ¬ðæ²3ÃÌu­# 8˜ID‹FDä&‘ä®ä{eÑ<䔸æÐ4Å T°¿Ur6˜‰ 6P¸çTûóÛóOÕ{é•“¾r&wë½¹{ü½Œç3¦.àëmöÎþ(ÄŨ¼ãB9”Ry9¼"–øá#h¿ç'$ËS™‹öºìK#mëfÜÔ>56±íÊf˜âæ±Í^\®•1×hŸ»Ñ³®¿G'¸¾Žœ¹œ^”À¬­^èS‹ORÍ\×ÒÍÒÿ•Ý[^jϤ[¢YýÁl.eUƒ±ùíd:O]/d»ð‡ÿO±Öàš‘ýÖ6³×^saÉm(ïšÄ@ht ¦˜^|ýy·âÏ‹!ŸÍ…¬›Ù7¶'}j¬%#¼—kûyæ ›â±wN(ÿÚºxÕ.2í§ÚveÇ!„Ug¾„ûŸJÓØ™Ü·*¯üκ—]Ó?æe÷¾¹k×íÎܽ…OͬR»%w?>Ž/‚¿ä¶ïSdt— œ€«¡Vv\?äY6Ïà—_§sÛ¸±ÌÿeZ©×y ¦ñØ#/±~m ‡gJXˆ:OFͨ °Ë­ƒb¡~ƒræS|ï5„¾wŒã‰è-<üf,NÞÀ6Ý©í²7óN©›!Fê÷É#t>e6 3ªØ¯Q ¤Ó x×Mg—³òÅÑ\$§{ Œ ÄÈñ›á#fƒ·¯ô-n͙ɾ¢@šE›à˜P‰h‰9g ®Bö§øÞ(ÓªBÜ€9ª1ZrKçÝÖ²CjD¤Ç€ŠQ^™DÏ¥ßòŠÖšÈ ˜s¸x~ä½K3«ßÝŒlkã÷•…'Œª‘­Ó9”¦&²dhño£j€¦°øŠåÜõi%ur©´} {ÉIÜë®äºˆšŽïôö嫨®¼d'çã»üøMs ¨XUðyüèç°}UH åŠ1$-üŽ­™üöÝ †¿%}cÖWs(:…ÀÆ=x뉎$ù5on)*çÉ}i‡rQZÖ$R=€Ý˜Ãhæ%1Å+÷ŸÓ¾Šùɉ_ÏëÿÝÈÇMº1ùé›y*ùžÏ)À®F`g%}üNÒ ],ÿèmžÙyZ)(dxÈøm*7L;vZ)Dü…œë®L–ý0“åsÂé=ö6^zÄÎþ§V“PæûÇÛªÂÓ(ÊuCP!*d•8DûŠr)0D P<6ºB@X0fÇÑÁÆ?©Âr $§H#8ÊŠÊ™Ìò7ÅMFžŸ ¨€SßS­Ô´iäeW¡gé ’¶û0…W5£KçÚãæ“T˜ÍòcÚ5¤0*Õûʘ΀òJ½:Ç‚jÚ ­B£À^@Q9=Ió3'ë¯x(w•ÐH ®μeë+Ê£Às”·øŠÅ§åËD¦ÛLLðÉ£YÕ6Áï Õi"&øT©¶PBp‘VT½’7„¶â…‡{àüúSnû#¥1¯~0êøzr™ûÉ*¼zsúä’›Àï®æ ·’ï•£¼M*o˨(1ÍCN‘F`Ä©vkÆVÞTº“ø•‹xpÕr_9”ºž”‡¿aË?eâ"Uî1\ÓA1œœÎ` "Ô¨~b%€Î7ô§Ù¡]ìkÔŸ;ZäÍÝå '(Ž»x¯Ëþ©´œýÌMÀ¨.Í©ÝÎÀ†Ož6MÃ)¥ÞV#ñÐõ >ü=ã&í'K äªçå¾2¿éf÷’8|tä²&:ØwrYL¨! ?&[~æÅ¥{!û…8 ‘DXNœ ØÂ,Ç÷O#ÍFŒæ©ö;¸çÅïÙY¤P÷Ú»ø®W•J€‚l'žäMÜòÔZ’N?¿*™sh·vŒfWÆø¶þPFÏåò¯­O-!„âl37æÞ§GÒi×Ü?+±ÜóW1YY2ö-dòÖ{yñžNlyugô›Ðý‹gîF;ÿéШSHþ÷ÍqQ‘! «A×AUUTS !¡Fõد¡aF‚C=U(ZsCnxu ÷´¬´÷/¾ó9ß’Š)–Úô¸ñfúÔ·¢Ô¦í•×qãm™8q"·þ=›…rÀHH£Î ¸~,&Ndâ¸Q ìXûTï %€:— âÆñ™8q7 hO ‹˜¨Ñõnéߤü@B\$¼éq,H©Á­ƒiT‰l}ã.)dql&5„>ÆódÍí<ñî:ùTÌ&#f£ÅÁÀ1úmW‰¥‘ú}FòáHß¼>‡E™zñò&µÒƒµ!¼97µ¶³`YZƒPnâïF»b·´°aTi; íìûY•vÚÙÝÎ/±.:ïB›st Æ çàÊý¤ûÝìZ²c÷Þ\S׌jaЈöíݶBLÑŒ¼÷žèŠsû,†Þÿ6Ãzëzë'ýÌFW! Þúˆ»f%‘–”‡¡akºD‹Ÿ4nÜšÞÑNâSÜh%Ò!{Þ÷6Cx·8‡?ãÝGç|Í-onàð± ꤺ|žUÔ¾üaõèÞ"Š‹0T»9£úF’ŸDŽRVûª¨®4òw¯gCp7¼ªAª‘è¶Ý¹±N.Ëw¢ŸËöUÍABªz]šÓÀª€b¡q—v4ôfp _+Õ¾Ô RltS&u"}Ú4¦lµc01›ŒNKG'gç&v†_ÎmÂ1«´Зn¾xæñV¼ÏW}Ë. µÐ&Æ‚ŠFQfÇ\ £‚'5Ž%™5¹ux ꨘlá4­Xv9»S™¿ÞEבWÐ%ÊŒªš‰¨]¶Ñ&ÝÅÎ%0÷èËÐfÁXT[D Ú7 ®ÂSˆÂÚà­‡zÑòô®¡j­[Ö Ü¤ {‹H8fÇo4a4–ó~µ:hdîØÆþÈ.ÜÞ£&!F•ÀÈ4 Uñ¦îfAJ4£5"BUPC0rpMR×î"ñ¯F*+ÇG0uëLjfA˜U3QujRâ 9‹pY#¨d8½ëàbç’}ºôb`3ÅDý®=¹Êr„¹û\ÕëÑ ¸Sö§6 g »6dâÂÅÞõYÔë×&EÙ”UÆ/?ÍC®S!¢^V¥ŒžÅUagð5M©aR0E5çæžAŠM §œž¤Ù;6³#ä2Fw ì(ØväÖ¶V­(îMsz™yÓvókzMnÞ‚ú*ª9:ëÓ0Pw 7{è<ò .2c4R¯A$AІ£À!¼5L§MiàNc^¬“C;ÓÊf@1…ÐíÚÎÔHØÊÚ²3^.ÅH¨ÉGnŽ/ft½œÎ'‡Ó7R¿{Gjlùž[žø±¯-`^¢»¸WW…ß«†òö7å̲,Ew·öA]ºÑ3Úˆ¢Ú¸´ÿå4+ó@¢R£E© {ÈHΦÃ?iâŸD#?-o–t‰)Þ¿ÛèN«“û·Bh»<Û%“÷ÿo.ÏÍÌæª»úÓ)Hö‹ò]è×eÿRZ!ë—¥Pûš>ôV0·¼yyO¿ÞQÍ„pæR¤)5ìÀˆÆå—²;q ¿]ÂøÈ^½“£gœÇ DwÌ×ápÇï1)àIÝËšÂšÜØ¯.Ák­6Ü|YÀñ6b 0Ô ÎB²]:jH}®ëSÅ!–5²¶ofwdW&\Q“0“S`(M›Õ$Lt;›–#¢Gg†¶ò±ze*g>/\þ¹\!ĹajÄ=Oß@×½³yôÇDêñsFeÃzhvÖ|3—•5úóâÕÑeœ+ ÕiÁˆ®¡N)1—¸PÉ5^5躎ӡ3ðê ¼z@™¯ËOÇç«îók’WÌâG_Êy~ŠÜHT‡^4)ÚÂOI.ô@3çAVý´ˆ4»Ð¦W2äÊ~ä§Íag‘…ÈdnšÇʤBÔtíUtOÿžåǼ4ìEÿ¶ ›æM%¾0˜æý3°G.³–%}ÛzRG]Éåu’Xžtqö™6³Þ›OûG0š ¥(•ß¾ùޝ}k¶çÎ+à ¡Ÿ~ÒçÔwÒWrÛG&†DåÃ-§žv5×䆑-ˆ …G_ŸÄ£'¿Âäû>g~¹7ŒUju½œfÇ6ðrZÕϼŽ}‹ydú5<óÐcŒQ(<º‹¦,#îŒ]ÒKüì™|xûõ¼óy?‚üEìZ6—g–ÏM\¸ëW&-Æs/?é»byæ£8²u@µÑ¬U#Z¥[QÖ¥“‘]"Yk.MÞW@–ÝÌæ¥ÚC¸çÏðŠUÁ——Â’ogðáXN¥cÐòÉÍ)jS|äyu|öB2òÜøp—[' Ú—Á•7õãåKB 4€¿(‹ÍkæòÀÉøëõ?³}¡W\WñL~k5ON¸ßÇZ!?™ù_|ÏwÇ Ö5ç²}U@w²îËY|Ç >ý|0Á‚äx¦½µ€µE:XK´ ò+˜ØLÛá}¸4È÷>ÈÀ{O¼¯±áÍÿñÐÞÒéxswñò1¼8á~V=¨âHÙË—S~c«Cʯ“‹‘¹F[ž¸÷6šÚ hžBö®ý•—v8Ð=¾zs.¶»®aÆ—£0â`û¬©<¸¨¬T<ìš9·nÂ3o_IŒ|yIüðß²;ÓKÞÖù<òÓ5<ñÈ#<bOçÎäñƒE•äNÁV³>—µ²³ÀLéÞ†Ú]w3\†U×(J;Èô/ÖsØȨ²Þ÷VmXâ|é›xê½`ž½u¿O4;Y“¿àý™Ìœò3¡w eö´P̾v¯ZÀãsŠްUcgª¸³7Ìáñ˜ÿðä“s_xÓ·óì‹sY¸i»ÆòØûÏs×®yÜúNf‰4uò·ÿ£?æ©&ñ¤MÁž²Ÿo§ÌayÞŸèkáJcå±P^nrÇ=ÅéïÛCFk©½fYÙA7ÝNììÍÜøà8–öÈâÇW?eju×ëËbµ³}zµ-nö¯^ÀsK³ñ•3ü¢?{;Ï¿Â3ãîaŃfü…i,9ƒw÷½]§—Ùÿ¶1ýÍÙX' dê7€NAâV&¿‘L‚ÃÅ–éßòþmCxñ½ž„):™[p÷»[H^³Š¥Wá۩݉›õl,™ q?|ËÛc†òÆGýˆP½¤Ämäùw7¦Q_aþìÝ|°° />9‰Á¾v._É·jÑôÄšòŠz ºÙÂÎàÝí¯ÊÊÛß¼ •Q–é'›–FúšŸy¹á <öÎs¼àÎeóÒÍ,ÉêXÖJˆ¼´?o>]£Ž· U3çñ[¶†O¿ˆ÷ÇRå!Ä?KQÜbÞÝ|MyŽG¹l^²Ž¹iÝ07á;[slÖÇüží÷zŸ]y7Ïݼ‡ÑŸäôÁD± ûºìßJ'gçfv[FÒlÓÏì)oœË3®w>cÆÌ­t›p'˯s“·é¿§ssy÷Ý}Yü¾ÂÎcÞ}'÷Ìû‚ŠÎ› ¯¼ßªÔGû¾z›ñKñé;ËyîÞ±,®›°›™¿§risqs—±ê±üøÍ@ Sö1}ÑvŽõ«Z ø³¶ñìOŽÇ¢»¬€›Ä ‹yìÃ4òÐÉ‹ÛDÜÄéëXÏøržÀ*ïÚúƒÂªåA!Du(„u¸ŠÑ  Á-Ì»úÔ'y+¿døgGËxXç­ðï}²‹o½ž[v~Å2NÌ|mñ¾Bö¬û•G¦'â8—›!Î %44T·ÙþÚÏã‹& †Ñ¿çs<û¿.÷ëÜ4þXžÅ´Ù+NÐÜ^¸Ÿ¨ïžå£¸ªŒ©ù70×㪛ú¡¬˜É’£eÜ¥·4bð-W·à{Ödœv³ÛÆ¥× ñÇKƒkn¦GÁB¾_“0Fwç†Á¡Ä~·ˆ·‘˜î£µ‰ìÇ.?Å9d·Û9[Ç9»ÝN@«!g%-!„BTÌT«'Ó_oÅwÆü¹`,M!ì²ë™>ÚΫ¯,acŽ]  åÐ |Òi#£žÝ@ª<‘-„B\ Ô¹z"Óºofô7Sçn…Bñ/áÜ3¯Ú1€·t]§° øîä´lžyû{^|É©™|3ë7æý¶—SÃë­î *+-'¾Åk77Æ ¨1xzò} ºnO<û¯¾ñÏßÑ—zP‰êû4ï<Ù‹ˆ5hmÅ]o½ÊÌ`®Ë5O½ÍóCbK#†¿ð6O_S·Òᥩ­fp0ãÌà¯b¥a‡ŽDäų/çÌžNŠ5š:6'©™.tC ÁŠ2‹NöÈòe`7„mS¹GRðE5!ú|y-þ•EA×uTUÅd29t£B!. rž>“º5væRè-ñÁ@šVœ¹Ø¥ç©BqQPÚpëàP6/ØK†…Bq–ÈÐÕP2¼;þ0ûàŽ»a+Š¢Ð n4.W^Ï_¿ãbjNgû¼ùê!\Ö¦Œ|ún¸l+ïÄV2FŠ'™%Ó–Ðîá›é»é]v]z3ÝÝ‹ygIr%ó*XÂ"0;’É/9j‹¥!ƒn@=3hy‡X¿j7Y§Ç !4ëÙ°„U,ÏòAŬ‚æÕNÍ/ç÷âLjåøD|¾ÂtŠ í‰¶©$¸å Wü½TU%,, «ÕJAAƒ·[†#B!ÄÅÂOò²_˜Úd0t%¿xHÞË“_È«B!ÄÏÍØÿNäîFûÏá±­väù-!„Bœ-®†’`³QÅë)™LAøµâˆ¨Ïë;Þø,\²ilØ€SœÉÄgê´­‚Jå“dx-eú’v<8ñ>ºxYüÎ2ŽU:¹°‚ÉjŸ“R˜Ý ,šú¬„ÕkKïAÉXò«'‚hÜëZ.7mgá²Äâüê>Ü>0˜ (P6˜Pñãñ'®{x1`’âï¥( FŒF#ÁÁÁX­VÎwÖ„BQ‚7õn¼õó –V”ÀÔ)T^e!„Bœ¾L¦=ó*ÓÎw>„Bñ$àjðû}ä»èÕµ=ïõ3~MãÑ;odñÒUXiÝâ6.O=;= 5…®S‘XM åKJ`ë%eÝ2’ÝÊ%¦².­Òè/~ŸTsÙ Cs‘—¸›Ý¹í¹¼~ÆcYø 6÷Lxý¶“ì=ƒ5Ùy~ZE¡îsσM/$Û^ÜÛWQM¨øN„…ø»(Š‚Éd:ù³ÙL@@@•¾«ë:Î=óÎUÖ„B!„B!„B!NÒõêÇÑ$\ ~¿·»MÓøù÷µ8\nÐaáÊ­˜-Vt vó.¼¾<û9̉^ V ''qV,ÁØŒ ¹'Qi>xu·p´þ®m¶—ö9¨¸‰h¸ó ðFd„\‚%ª.QZyv¼º‘à:mhå#c{>ƒF=¯£gè~~ÿ}9~Ut ¿æ!}ÏQ ý.£Ùž¥ÄÑô²¦˜S×z<6®E„ƒ‡ p#þ^e,«z :ÛÙB!„B!„B!„8k$\ >¿¿n'3;¾œÅ‰.·Óü•ˆuÉÍLåÞGÿË+ÁëwœÃœhØ3³ñG·£EÔZÖfY¸¤W_ [ËaÜri?OžÁ–w2é–!lŸü=ñŽŠƒ\Þœ#d*]in$)Ý!°º÷£fˆ:žÂt¯[Èú£. ¡—Ò¹y:ñŸ±N%R°…ÜBî±µ,ÙÑ›ÞÃÆÑÃè§0y'KW¦8 ‚êÔÅš¿t—ô矢ÈPäB!„B!„B!„¸øI¸ü~ºî $(Ç 9#`¤ù}x<v[ðù2Îi^œûç1{çŒxîmFº²Ù÷Ç Öfö@ jŰÑÉúe2›s½ø7üÀ®“¸eØv^ûn/Å€uG;»Ó»u-6¦'á<ºž_Ž®/{á¼íÌúl{¹t“¶ýw¾/kc$-ZØHßvˆBé,„B!„B!„B!ÄY¡„††ê6›í|çã¢Ü‘˜ ñ¬Ø<¬ÂåÞž¼žÕ+÷°i÷sSÎÎ.CP ®Ö†ŒEsÙœå«ü Õ_!­®eh‹cü2+9çbB”`·Û)yœS…ˆˆ V«EQ°ÙlìÝ»÷¬¬OQt]GQ ߟ_!„B!„B!*¢( ªªb6›±ÛírRq’ô®ÍïAÓL™¼(?jûÇQ|¾s9ô¹¥ųøç4lçð\áIþƒ9ò)”à¯ø:qáe³Ù02¼´B!„B!„âœ0Øl6233)((8ßÙB\ $\º®£in¯kp<‹¯ô;…Eø|>TU½(ƒ?>{ùç,u WA®s–¾ç—¦i„……¡ªêùΊB!„B!„âÌï÷c·Û •°â$ WÁ‰Þ|nïav8\åïR¼BüF, &“é|gE!„B!„Bñ§ª*ç;Bˆ ˆD(…â,S…ÂÂBBBB$,„B!„B!„8'Nt^³Z­¤§§Ÿïì!. Bˆ³Ìçóa0°Z­â÷û/Ê¡àÿ‰¤ÄÅFÚ¬ç†ì[âb#mV!„B”Åï÷ãõzIMM%//ï|gGq‘ðŸÐ¨Q#ú÷À’%‹Ë|ýì³OÏw…ç‘®ë¸Ýn®úñB!„B!„B!„gƒ€«ÁblG”ñ*Â=‘øsÍ„{ê—ùZÇúÅA¦ó“óe!„B!„B!„B!Ä¿ˆá|gàbe¼Šo}”Ç^kGº!–§ÞlÆkš!–'?ÊÀöÏïì !„B!„B!„B!þe¤p5è:XÀ©ef &Ë‘rÆk¸5˜|¯—€ÓùÎîßF±ÔæŠa½1ÅþÌÊd•:í.§s›FDªø‹Rˆ‹]ÉÆ„"4ÀXŸN½¯ MÝ`Œ¾’v®aÕÖdJí¯»Žúç³pw>ÚùÞ(!„B!„B!„B!.B®M‡´¸£__º÷î @ï~}Îx]>CÇé©B‚J0~[¹ØúÑóLÝëD?ùYî}‰[›ëìþø)>Ý㪠!#Q‡póºÓ4Ò º“¬ý«˜öůqé ˜‰ép5Ãv£eí T<äÙÆªùóXy°°8ØjiÁ¯ŽÃýÉóL;è®F©‰êЋ&E[ø)É–:Ô-b×¢ÎÕ‰hu×õíEæÌErÒ¤o?š9þàç¯c·5¡çàþô³ÿĽyÄŤõ5=hräWöÛõÊW-„B!„B!„B!„(EÀÕ ëTèE×uâöÄ•¹LTTùî:U% €g–N‹žMŒßʼn¸§!´5=ê‘å¶Vš‚!¼ cÇt¦pöû<»%=(š:1~Ò=:` ¼Ëx]‹¸Ù_óÚÖ$ •0.é6”Ñ÷?LØûo2çP‰Àsu™kѾ¹•c+(Ò×1¶¬:vòã¬Cûɹ¼‘i14q²oîò¼ä`ÃæVŒjÓˆ };)ÈÚÃûHÚ7 åàö<é,„B!„â¢STT@PPÐÉ÷¼^/‡›Í†Ñh®¢e±umõz¶!ÔÆ˜Nt±îfmb‰4¼ÇˆÍ£aÏ–„( F¶£KD2ìÊCó$0ïYîlϘçÞä¥FÒµn  ZC°â"¿ŒÉ~g!nÕFéÏv·U0YMàsâ=-Þ­XëÒõÚ+‰8¸˜åû‹Š‡sÖò‰[ºŠ£=9v,7j‰žœƒÏUȉìé7~5“´L!„B!„B!„B!ªMæ®Íï#?»]¥y‹æå.çòž_¯)ûÉݱ†ÔÁ=¸4b3/ï„aûW$»-¥–ÉØô}{Ð&lÚu&,q {ò‹#§ZáVÌx›U³kÒîê[óðxåC6º pa%Ôjü¥Öªcñ;°Ÿ½­NÎ}~PÍ¥’b­Ãå×ö£Î±eü²) w‰äžaÒÒ IDATý‡ˆý屘©ÓçZ¤$St<¬¨& š¿Œv%„B!„B!„B!DµI¸|~~»tˆÛWæ2ÑÑÑø}¼NWµÒöçíâ£CéßµµÚûØüY*^–ZFËÝΪäAôjߘÀN!^OáiRÍ•ÆöEóhßíNÚÖ4±þàa §m»~I:vjh%†—5ÄplÇÜ€©ZÙ=±6Üyø£2B®kmº\{õRWðë¦T¼@÷ã×@5š-¯ wý\¶þœ…Á±ûË_«B!„B!„B!„¢l®¿ßîâP¥BÃ&ë^|nOõ× ÙóÇaF¿‰ÈäùLÎðÃéóàjÄ­<Ä¡Ws…å?°£ÆÈV´ Ï!!)“"-€Ú—^A3sK³|àMbÙÂ=t½y7æ}˯ے(4„Ó¤ûpÆtt°úý­ä•Ú`4a2YÃçóSQg\oÎ2•®4 7’”îÃZ¯ í#-y5£ÛœZÎ?ŸïV§ah0›ÖǬyÈOÝϦ+Ù_x¢ûo5†àL>Õ#X!„B!„B!„BQu®¿î@õzA×iÙ¢Eù j ø½öj¦®cß÷{Ý-‹ÝF¶Ÿ3ÀèØ÷¯"Þv?m÷|À!GqhÖ`kLŸ±ãintœ{Yóõç¬Î,îF›»áKÞô]Ëðwðü¶â‰Ÿñ,øà–rž ð¹ìÞÉ\vr;âùtÒ‡ìvVkG;»Ó»u-6¦'á<0—ÏT°™‰¿1õ³²?2„\B›Èö®Î>Þ#X!„B!„B!„BQJhh¨n³ÙÎw>. FÇu˜,7±-¡3·m.s™èèh¦}sUŸ5#ÅØ÷ìgÂÚœ±ÏÁûåËÌ<äþ (X âÁz’ûÓÛ|½.ó/[ A-¸zX2ÍesÖŸLM ¤ñUÃél_ÆœØTªÙZˆ ÙívJçE!""ƒÁ€ÕjEQl6{÷î=¹B!„B!„B!„øë¤p5øu&Ÿ›É¯¯Äí-oŽß,ÖÅEóÕ=û¥«˜©ÓýZÚØcy7ñÏt܉¿ññסs $ø+„B!„B!„B!ÄŸ$à*ÐuMÓ@Ë'̘ÉâO*ûF4…¾ ø|>TUEQ*˜/¸Š¬-'ðÂÝí ÈÛÍüÏ–‘ú—ºíjîžÉ þålä³ç‘ÿWÐ=æIèW!„B!„B!„Bˆ¿B†€BüãÉÐB!„B!„B!„ø·0œï !„B!„B!„B!„8;$,„B!„B!„B!„ÿþ5jÄĉw–û*„B!„B!„B!„çƒñ|gàbb1¶#ÊxážHü¹fÂ=õË|­c}â ÓùÉùβB!„B!„B!„â_DÀÕe¼Šo}”ºÝ·òݯ_ñÔ›·óͼ/K½N÷%Oþ€Y?À·ë%,„B!„B!„BQš¦á÷ûÐuý<çæÜR£Ñxòßåù7•ËùT:¹ÐI¸t,àÔ2 ³“åH9ã5ÜL¾×K@€é|g· VZN|…1Eñâw‡ñü…”,MÆòâ…¯^ø†î³–AÔ˜<õT{–ÿw ±yÚÙKøOR,µ¹bXoL±sØr 7v}ÉËËeÛ¶m•þ{Íš5guý’ªÖÉÅ@ÀÕ éi™&4Ü4kѼÜå <®*­©}·¦hñëÌXuìxpÔÉîÅß0½æóLÚ‘•ïÆR5€'î‹á·y.úº’úé3xî]Ä ÃÈîM©bF/H vö×ÌÞšƒŸâ¡‹»¿‘k.oD˜ê§ ~ï}²á´ i1ˆÑ£úÒ*Ê„#y#ó¦Íb]ªçŒð«!¨)ÇÜBÿVPp„-[Ý(zQñ‡Š¦×”•—|B»ÜÂ}# Žåù׊HZø>ŸnäÊÑ7Ñ»EmÂìǶ°`ê÷¬M;57ÒxÀÝ èÒ‚(³“ä ?óõ¬ dxÁÝQcÒ®^ª›Œ]¿3ýÛe$8!°qFîOÛ+Š7—˿泅GpH£>7qóÕ—R3ÀMÆŽELŸ±œgÅIcDcj«ü‘QÆ׊•º[ ú£ÇÓÑ)Î  mƒÔŒâzÿ^111<ðÀdggc·ÛÏwv„B!„B!„â¼P…ÄÄD~ûí·*-ïv»ñzÏÝx¢N§€€€t]?ùÿŸ¡(J©åη»êslž«r±Z­tîÒ…œì,öîÝ[é¿W®\yÖóp!©N\È$\d?]±;®ìÀÑÑÑØ}A8]• ¡i’ËÎ¥{ÆêŽlI@ߎږX Cxg†tšÏŒ×Ÿäh‘†CëùqÃ×ʆÚýâñ‘×°e÷·òXh<ônF6Ü—¯|ȾÂb"ýdû¡ä ¶†ð.Ü:¡;…߿ΣÛÔ¿öaî½ãjŽNžOrÉ )´¸~ý–ðÎË9¦6dà=aS·ϯ‹¬òò²ñ;¾©ß”‡êüÈKïíÀ `ð¸u>}¿ŸtO$ÝîšÄõÃv°í“¸ÔhZšæ1eÒÇ·ãÆGÇ1®çaÞZž‰¿(‰Ý‹¿dþÞdAí3i<#;meÊZ…Î#³ñ-[œ ¡µ©[W°µÅÄ«­üöÞã¬ÉŠ¢÷½3qD/ÏØOù1`KXfG2ùeO !ÍèX§ˆ]?gr²¯¯î";ǃ-&#þ7³X,Œ3†   FŽIPPÐùÎ’B!„B!„Bœ©©©lÛ¶zõêñù矟·|hšFVV‡ƒÁ€ÅbÁår•êQëp88zô(V«·Û¦iyÑ \’ÑЈæ' c¾ÂêÙqd5!<ÿÝJÿÝÄúJ·Îó–ˆòÎw.&~üäx²Ñ+ø£éo*B@µ†`ÅE¾ëÌ cýÎBܪ ›©¸{¹¢ç³}ájä8p{üèøÉßÎ,7šî&}Ï^ò,‘s]º]È…‹Ù“åÆçÎ#%¥ð´€¤–=h\¸ŽÅÛ3ñøíY·ŽÌÈKiuÚAÌ\‡Î-ì_K’SC+:ÂK–H¯‚¼”E+äÐöxÒº/›øNà‰žôZë–Ç‘ëÓñ寱bcµ:5#ĺ3™»“(ôëøó°-ÕOp¤ Uw‘å!¢MgZÕ´àËKæHªõl ;cÝ1~÷16¬J&°õeÔ2UT; &« |N¼g‰MÄ´kGHê6”¬;ŸË‡b¶ ^¼£ˆ³`ĈÔ«WO‚¿BñÿìÝw|uúÀñÏÌöMÙt)$´Ð«""`= *žzœŠõ~WÔÓóôšzêÙÎvz<=E슽*ˆ(E1$ôÒH#l’í;å÷GHh© àóöµ¯Mv¾óï|ggƒûÌóÌÄ“•ßÝCB!„B!D+zöìÉ´iÓ8î¸ã˜4iR»í ÃÀ4Í.D£Q@ó6‚Á V«•ØØX<‡ØØX¬V+Á`Ãhüþ? iÚASÓ6:¢+çÅn¦pLÞ)üúâcøÇ}ÙÔ¥~Jò©_ðð¿Ûþ9éÔ%üûöñ\zÞ1 M9ã ÌIw?:sLe’Ü †®Q·Ó‡izÈk£tHÛ‚¿.«ÝþôP=!œxœ*ìžµ¸âpè~üQœ€Þ@•o¯6j ¹ÇMgÚ¸>x Ý–L’uÇî•cHr†©lÐÚ¸“®JLr,Ö”SøÃ½Sw·³`Sv±Ñ¾ßxTG˜J_S®«I´¡Žæ¸u[ciâÈ`ìi§3q`26MCõdbó}µ§ÄÛܹAЧ§ ¶¤‘œrƆõt`DÁaƒÀôS8ïA^8y:§]ç•,áÍ—Þå›'‰±C~ËÝ£w÷©Ú°„ë±·¤Õ5,öNÅØ~&›>(Þ/ƒXÁb³€Å8na,ºO\\?ûÙϺ{B!„B!„BqÈ;v,_|ñŸþy›íšq]MÓ4EÁ4M\.»ÝÐôSÕÆ¼ÉH$B]]Á`EQÐ4 ›­Í¬²ï¥3ûÙÕóâŽUð3‰î¿ŸÏÊÂX³gð·ë²wwÀ±“c"­mÀ®ÑK¸ëžO©n«^±¤.l'ÞÝ”¬`qÇáPÚËldN»Š ÍÃ<ÅÖ€BêÔ?ò§q{5Q]$ºTØeÜInz *©wÙ%Œ/þ÷Ý]@Ëèknç¬Ý«™á V½ûß~”ˆs~Ë%Wø(½g u a¼Ÿ=ÂßߨNǫㄽõèîb­°«y-$Mzý–Tkû®¢ØˆOtªõ¡íßøI1MS2…B!„B!„b/qq-;ö²&fW …BÔÔÔœœŒÛíF×uÂá0v»½938&&›ÍFJJ @€ÚÚZjjjHIIÁétvé¸:²¿c^LÓD1Ábi vWUW¡ª*þP°ÝŸÃ!ÃgãÈ –îí`½lRºt=áÆÐžÒʘQ´pk×½DKøôýµÄŸr9??¶/Én;öØ >éb~9:Àâ·Wám1Ó\ÁâŠÅnø©kˆ‚5‘AÇŽ$¡)œ)cE~˜§ÀÀD;[,©©¸öÉx5¨[ûE‰“™vT±V«+‘Ì>™Äîÿ®ˆ”±rƒNÞ GÓÓ® 839æ„~»¯hg,„¨ž^$Ú@Q,8⪣>l¢Æõá˜ñ=÷½AMaüäÁ$X,‰C˜2ÖCù7›hÀN¬[%Rï%h(¸2Ç1){÷š–xrúõ"Ϊ`juTT6`XíX²uÉZ¬c§117›jÁ™Ð‹¾9ñ´W­?Z»j%œÄ½FçèŨÁ.JWm¤aÿccO%7I£¢È+`ñ“UõÆfÒŽ«d]>k¡7O\ËÏ?j«ÒÂÁdR1+¹S+(låŽG걈l©æøá[øOÉáð0Eÿ·–A7ø ü˜›m¨ç´~ë¹¥Ðì¾1!„B!„B"t]gçΤ¤¤àv»‡Ãø|¾× ƒ¸ÝnRRRعs'ºÞV6ÝáÃ4!¤AMääæpûÝwrÛ?n§wNïvŽê&ÞDÛš Ç®úï+Ür”p3ò†çxú7ƒéÚð¹h‹dw‚n°D£`š 8°õ†FzÔß v­xšû´Ó˜qÊüíç1¨Dñ­æ“Gç±hK¨•À‚I`ý»|¸õ2fÝù¿h(eåGŸ°¶~äîÅA6¾ñ8ožwßv2±Š‰wÍË<üôª}·^»œÿΉåü™×p×/\@˜ÊoßäÉçJÙç#Ï °îµgøì⋸ñþs1¼[Y±øK*“Ýíê¯>dÕ¸ ¹ùþ©½÷ÿþß»|wÕÙüíÁ³ V®áãÏVPsìžÍi5_± v,¿ùÇlz¸Â”®x‰ÿ.©FZXòö2ÿüFþyRˆ>çãÏË9A7}NºŠßNÂn«×ññK‹Ø¡™/ñøûçòó+ngFœ ÑZÖÿosŠêiëóÉ ”¿}“‡ôä«Ê’Æ»:‡Køtî³-´Vpg##º‰*ްh‹´( _Òïœx²m€ÝÁ/þ–o´…î¹å·Bò±i|‹•5mäõÚ{1ñœ)8–ÍgaQðÿû©ñûýìý9§( III¨ªŠÓéDQbbbX·n]—lïÊ+¯ä–[né’¾7UolfèCq,þ´ƒìÝ=š®\[ɤYaü<›‰‡âŸLCãÙùçñýXxiã½Ë»ûXtÍœ™?¿…‰ï¦²æUž®àa¤ÓsÙPÏi£Ê9êí›Öïêyq«ã8qÔ™>ù—‹µ[Ö³}ûöv×>|8EÉÌ{ÀÅÎXRœÙrCÇ®žs'é\Ì­+»¯.ÝÁ:&‡ƒC"Ièp¡›!ÐÂÜu÷g|ð^M‹çþ»Ž¥_lÁФÐâ‘Àð­gÁüOØÔÎáTÌz >˜Ïgü-‰DxíO›Éë“'+Ÿœ“KxqwùÚpqº`=éYùxr ™zo`0Àõ6rë‚Z®šZ€§ À „˜{ý&úääãé·ž³îm ªéºCç«9Û78OVG]QÍ×»¯Þªzc3™Ó*¸ûw›;q9ƒÖ1ý>; “mÿÝLú°"ÞÝyàÐw}]Å…“ IÈÊÇÓ§ß ÁlýuEòÖŸ6Ó/7OîÞÛÚŸIåâJ~>¥OV>žA¹v‰Ž „Kê¸ùüÝó2`=§ÿ½Ží‘ŽìOûËÛ›ÇO3qDã±JŸPÌ+˪™uI%«¼œ?a-#®®§6àú1ÌøTß3ÿOsìð5x²Ö{J1ÿ^¥Ó¸IOgrÔŸ+ùÝy5~-™£7sÇÑÊÅû——;`ïy÷~RDzV!—}ÑØ“QãeZÿõüe¹§ÄsHcÁ_·ñ«O5¾»cyGoæîµf§ŽEdKÇŒÚÆCsâ ëɶ–I7ìbshÏœæ^¸‹îßJÿ¬|Žz8Dd÷ñ›y|!‰Yù¤ŽÙÌï^0!¼©…93!\ZÇMç®#-+ŸäÑ›¹ñ½M¬Mˆ¹7nfPŸ|]@¿?4–_Žl©büˆ­Ü}ÏvŽŸ²ž¼!…Œº¬šÕ»Ën´t^íÜØò\îC‹òÞß·—›OÂÀõœu¯†æáí;­º[š>s² =»šµáÆý?lÏGùÃ+„B!„BˆV4LcccÆ€ïÞeœ­V+º®·šõÙ(ܻւ°v»[n¹…ñãÇc»¿Ï3 Ž9æþö·¿uÍuBaƒ•1˜˜dfeqìĉí>ââã ë:Þ FTkñK߸ý—Wxþ·ƒpÖŒsytÞí\ðË›yà±9<÷ÒK<ùç³èçR ég=ÂFZSìÕ=†¿½ú¿èG.xäuž¼tN@qä²9¯óÈ}80”{˜“.&à0M³ñ$7êH°V³à‰],~:Øê#².•mš¦1©â?ešßK] í»úšQÞº`›%¥ÅO—ÿ› n|ׯ}ˇáÝ:„OîJfrº‘\RÌÛ½ÒY\8ŒŠ¯ûñ¯‹ËÜ ñä>Æ?GéwÙL3XyO\Ï‹«†Qñqœs‹ùõ‡P»¨ŒŸ?¬3ûõ!Ô¬ëË/k*¹ðVõ»?‚ÖÔR<=‡¥_ bÝü$*+ã?[L@!®o 'CÖþõaµ¯þµ’Í3úR^<ŒKrøëYbôV^ß}á\¨¤ŽoGdòíæal}ÞÃÖG›¶µ_÷¥µ\|E êì>lÙ4”­dó»Q”Hˆ..aÁà VmNõ’LF}VÂÌGBìŽG¶±?í-o{«”2óþ(gÏDÅ–!|õtN›Ê³÷{ˆKHà•¥ƒùî‰x’öKª¬YPÊ̇u.}e0µÛ‡ðÁ/ þyq)ï×4µ0ØôF€qôçÛåƒøò:…çÿTÉ7Á}ûqô0ÆâÓ-`ðÝ;AÒG«|ýAˆ X_ÏÚ˜Ní³×T+'ß–Íú+ ýK6|Ý›+:ZM/驼ýÉ@Ö/ËaÊŠ2fÏ ݽÜûEj)|˜?”ÏÿωZZË%WÕ’p}Ê·cãâYÛ6þô•½ s¦…ù÷e%üoP&«· cÍ=NÞ½¶˜g¶7—ewnã߯ððgC©Z7ùMä˜ó3ùÏ/l8Ægñí·™ÿ û~÷®h\ï¦õñÌ]9Œ]ûó·ÄZf]]Ëö¦íp”·>µqû[y¬ù&‡rê¹é޼LƒBb^,WÞߟmEÃ(z>žm•ñä&´Ï\·ƒ gåRðí ˆÅ“›Æ’z2ÒÙÆz-Ðk}¼ª§ðΧY¿¼7Sò+¸áÝ(z+ç[â€öÞ&åo–pÅ«þüÉPjóûòJ=ß[ںɺ§Êx2œÊ²-ÃÙ¹®?ÿù?9ö#ë|B!„B!„h7¦8_~Úl¶²:].Wó=÷g±X°ÙlûôÑÔçþFŽIBBÓ§OgàÀèºÎ Aƒ˜6m‰‰‰]²?]Ç$¢›xßáTUW±vÝÚvþ€ÍÐðEÂèú÷©ñ#8^}›¿þúJ.¹ì¬î7‹«ŽKn?hÞʼNèÔßrvn¹çü–S‚¯ñÀé¨*Ç$;;›ììlrssÉÍÍmþ½éq0H¸EÁb±`‰ûŠ–;ôðÇÞŽÕjݧ”€â§Éšì =àÍì0,ô㦗 Â[½¼Rää†ë=äÅ+¸R ÍPï)k@îÅéÌi#έb yþñ¿Ka\’‚+×ÃUÇš,y-€sëá”ÌlÁëâÂK\ìZèeíî5ÅÃ%­XWïXFÇkîΠL™Ô“y¥2rÿÒ² Ù½UJ>ÙÅÇ› é.Æ ° ¶özÓjI®;ÇIœE!yT<<{¶µ‡IÅ¢Z¾IKá/ç»Hqª$ç:éÛ8//owríUqô²ƒ½G,¿ùµ“m¯ïbS¸ýýisy{ó8¯ëééüjœ —ÝBö ‰íVùÐY>¯Ûi=¸h‹ª2èœ4Îu4ðÔ mwU×1)LÏR…ô11ôhS¶ß¿+•8Óûë,_© †˜¿ÒÊ/.÷`[^ÏֈɶÏèÃ= 9°M‹:v,š&ÍÁÌ3Ä( Äº8ÿL+ëÞòSÕteK\ üu<ýUܶÝǯG¿ÿ™—ª8*™'¼5/@K×@F¶y™·ÉÁoK/»B¯ã’8#1È«K5ô@yïëL¼!“²U±6† ´Òîí]Až_gÒ5ÉŒKRPv¦ý&…ŒÕ;ùhGÓ~*Œüeƒ\€jaÔqv´â0µ-\±ãêÏô1¶ÆýÏxÎÖ&„#|Snáèqv\ŠBÚÈRvøÙhg½Væù‚™n¡”mÔˆ´s^µÊ4X9?@Ìiiœ×WEµÛ˜zy C¬-7O̵Á¦zæ/qÛ}”·r$B!„B!„8Ü5Ýë¶+Ñh‹Å‚¢(­¶q8Í }m=šbEM÷ Þÿ±lÙ2òóó±ÙlÌš5‹ &pá…âp8øî»ïZí·;æÅ4!†`ã\.·›ä””v«xMà$ IDATÍÐð‡ÀmõßT.µùwöZ¦—±ð“ ø ÿ…oÊL’³°4¯wà5ýÞú¼¡sÆŸoãϧGxíþùl ·<Žƒ}L:ª¸¸ 9û|ïØaÓ²®&`!„8ÈÒxûÅTâÞ)føˆ\ü¸Ÿto¯ÍFf| Š(*=²-{²£:[k þj-=ûÞ¿™Ô Fuʪ v¾¶•Üþ¤÷/`ȵ~¢ºN`wËk%v¯À‰ª@»: §>ÐÇ&†¹óŒµ >¯œ×¶˜­½¾{5kœ OÓÀ«Úò¶¼å:$ÙIÚ/P¥{£ÔY­ôŒÝóZLš {]”Z­cûÓêòvæ±b§Ibo+­ÄÎZ¦7®çɴмI«…,IM¹Ñ\ 6YÝÓ¯ ŠirÀEr+Çœd£dqêÍu|aå”c=Œõ7°°8ÊW_h俢¥·LK:z,Ǥ’¼W`9.Õ‚Ù¥~÷Ø’¤îu/ao¹Žé±ïSHÊPñ—ë-^m§ÕFØ rý¤BÒû>l OU@Ôk k:Å>•ì…N]6¥é”øTzí•jõØH4uн{öÛ“¨6ÿƒGUÀ4h¡\¿ÉŽÏ«¸jæ&Æ´‰ãÏ)å½]»Û9ìŒÏÖùji˜€iR¶ÂGU7}\í¬×U%-fï_ÐÍÖÏ·öæ@שÜe’°×ûÏê±µ(Uȉá:…B!„B!öbFsÆo4ݧüóÞZº÷o]׉FëäY,–æRÂû³X,Ì;—ââb\.gu±±±lß¾yóæýÀ=éZ&&aS£.¼ ³“ÿif„ÍGÄl»rj›ŒÞàžy4MPZXîÿa„í æ³%©‰›æ³ 8Òêf¥cÒè …BD"‘}^;ä;5!„8èÒÆ¥ð¯ùÉܺª†YqÍ€ü§§¸h˜rŸ ±†½ö) `µháÌ dî¤ý";¦Nz²J¯Ëú°êV7®ýú©jÅ÷yŒƒ³oÌá¬ßEx÷֭̾ÂÊðÿ¥‘×Ê뉻7Ô‘mŧ[Àa—é{ýq·$ÚIÔ(÷»ƒNþª(O ‰{ýÕjo-.ogÓ¼¥zçʹ[,ôJU¨Û{=M§¤N!©§Ê^ñÑPÈ:.–„yõ,ü0HtB&ý’œ9Tã¡Å>Êìœ~´•–b{-vßÁc€®S\ôjüµ¶Xƒxž½6¶w_IYV”Ýǯ‡ `R[fàîiÁÁPK‚Dg ÿ\Ö—óRö[è×èå6(kéf®mí€ÕBNü¾ëiuQva!+a¯.:0 FMW]^MÌýY|®§ßÇ/Çnß½;—<؃×~¶‰!/ÚIíËíOö`¨£õZÓÊxZ;ß2ÚêËb!-A¡aÇž÷ŸÞ 5î Zy~/Þ:¯k_-åô«‹é½$—ã”óQ!„B!„b/M™¿@s)ç–ÄÄì_q‹ÅÒDnÊn«íc=Æu×]Gff&%%%<þøã¨ê¡—Ñ£"^0Óñù|TWW·»ŽËåB7t‚Z€Xý€–mMLÃuOe<Å™@œM¥ytJ#g]Bî¦ÏÙÜ÷.±ŠÇVûZM¤8”ŽIqqqsÉçƒüÉþ^rss¹òÊ«Z}Bˆ½ù¶øùºXGC!>ÛIŽÛ$gçf¹ÿ¡z6ûLÂu 6ê´øgÓíâ—Ó-|z_ ‹J 4Í js€¥¹Ç\GøJþ»2JP3i¨±ìÛhóý[[gRóÙοªŠUþýi+—‡¨Ž€â°2 ŸkÄ@‹¶òz§*c(ôœœÈðòÜõFˆ]Q_yˆ‚GŸfõñÈS>ª4Ðvúyò‰Yg%ÐßÑ™m´ ÍyTwA,áw*xj¥FH3¨Ø¢4–+n„M^³…ÔN ã/ŽÇø°ŠW7¦Áæw«y#Ëìq–NÞ]ý<¥ùyý#ƒq§9qaaôt[^ØEAB“3ZèQUIƒê Q‚&ß§J‰aÞSõ”F \VÏ#ó5ŸCj+™¤i““WSË¿>Ž2¡¡ –¾P9ýnœ3GŸ.Ì rÏCulj0ÑB:ÛòýlhÜN.:EeñýÕ,,3ˆ†5¶¬ So(Ħ¨è•!JÙ»ûp»øåV¾|t'ßÔ™˜‘(ÏÙIÉÐ$NéÙ¹™7B:µ…Ôžl|¿†Å Mi²å­ZJOÉaéÂ<–¼œÁ%C˵·½^'´v¾™í¼ÿ•£ÎvQ÷A ï—˜˜šÆ²¹5ä·øAbR¶ÂÏFoã?¢38ð˜aýH:…B!„Bq¸ëÊRǪª¢ëz‡Ê;·U&ºé¡ë:ªª¶ÛîÑGeíÚµ<òÈ#í¶íŽy1 °O%è« %5…Aƒµûp¹]èF˜PC„HÈh{;ƒnþÙ4wïÞÚÐû¶ÅÄ45êË*ÐzŽgd¨ñ >ý,XÌÝí!vÔl®PÂÓ÷<ĽϖsÜ5—0"¶ýù9Çäû(..>èÁ_p§8¬ÃÉpþžÄÈåè»úµúœáü=©®«»{¸BˆCD¸ØËµÓÖ’œ•Oê1¥¬?1ƒ{§XPœ.n|6‹“6”3~ÐÒ†nâÿ‹¶FeÜŸr¹¸ÿ›T@rnƒg–ó^iã£ä2yãz+¯\±žôÜ5dWÄ=_t,s®a›ŸÅK”…ö[`h,¬ˆa}óñô.ääyV®½'…ÖV^··Ø}«l½“yþñDêÿµ™œ>kȘRÌóÛL°9øÍ²8¥ „á}óIWÌ—GgðÊ5®²›;¯­yTè1-“—maÞ¬µôÈ-`øìj¾óƒkH ¿Ÿå†ñkȽheûMlÒ” ^½FåÉs Iê]ÈÔÇM~ýt&g¦~¼ë'gô²¨ÔÉŒ!¦“ŽòÐk“ßȸ–ƒnª•“¯K"õí-dØÀM«Ú-ð} ›ƒÓbk™6| iJÙ05“gf9Z½¯µW"ÏÌIbç=›èÕ;Ÿ>¿ð’uswOh z0g'×>›ÍiÛv0ið’û2åÆ]l 4–?žtk.wlàòc Hé·–Óÿé§ÖPè3£3Ì*&ô/äÄÇBû•—V9ú¦\îÍ«ç‚ÑkH°›‹=<ód2¹¬qbíéáö+|0«ä¸f}<׎Ùý¶÷°á}·ˆÖÖg ƒ6qãÇJ;ëuXk盽½÷ŸBÆŒlžœá¦ãÖ2l3Ä9-](€IÅ¢œ6z ž¬|úÍ®gäŸ29?C9¢ÎG!„B!„Bˆ&6› Ã0д–­  i†a´™IÜ$‰ðÄO4—Ž>Ô˜††£…|€IѶ"¶¸Ý‡w—ÓÐÑ"a´ÈþE]ßÿ_žZæaö“óy류ÉG|XÞX2Y‰Ãå×N¤âùÇø¬&BÕ§2¯úx®›=Џv¾Š=ÔIWS<ÙVj»Ø#Ãù{®¹øz2'¬âÅžáâ3/ã¹·ŸÞçùÙ·Ÿæªñòê+0oy›E…?¿ß¿O EQHJJBUUœN'Š¢úuëºd{W^y%·ÜrK—ô%Ä!²¥ŠcO®ã7_öçâôîÍ¡§fA1ï°òè+éLí©¢h:«ÙÌ©%óÍû)dË 5º'+Ÿº’áÝ= !„B!„B´ã¶ÛncΜ9-.Óu@ @jj*@ K¶ ©««#66–ØØX¢Ñ(ªª6—tn®ëÍA_ŸÏ‡ÏçÃãñàrýðKã¡ñÞÃÕÕÕ¸ÝîVÇt0æÅfŒ ;nkÃ+(ßvµÁú¯»lY%7þªžäP%Ƹ.Ï¡¤#Çäp _Yv‚i‚ÃA£šg5òžqÔE£¸\í_ÒiöfÞò[R^ü »¾ÿNP½8öìÉØ–Îçóê$ÃÜžÄÛA÷W°ñëÏY¶Ñ‹;€SÎFÍÿÞæëê~…Bˆƒ©1óRìÍdׯ ÞØdr’UTÀŒêlÛª“m'îðý7 B!„B!ÄÏétÒÐÐ@ Àívw({woM÷ÿ5 ƒ@ МTt¸3M]‹‚¦¡Û·og{Ñöv×1b`‚¦£k©3|“p'&TÔÃ'LeÂäã˜|”ž¾`ŒtÁUÇõ¦ê«|j©ò†VRFM¢Ÿï^/ aºí8‚›Yüú‡TøU<ýçÌãO ®âMòë7³¬`8gOʦ7WãýUI…8ÜhšÆŽ;èÙ³gwEñƒ)ô¹(“¾-ãg£+1l &*}'¥òÂ=q$J¼\!„B!„¢CÊËËôm6Ulhh ¾¾ž„„„æeº®·™u»÷²úúz à ..E9ü¿2M C ƒzgeÓ;+»Cë*†4]÷Kø&àN0M(iˆbš&…k [l“’’B]8_€m='rîé)¼²ê Û{2"ÏIÙ¢"|&à/båW{{·of§q,ñNê5ê6æS3úh†¤ðe•d‹#ߺuëX´h^xawEˆ±÷Mãë-iÝ=ŒC–%1†žÀ Ý=!„B!„BˆÃXEEEEEí¶3MÓ4»l»n·›P(D(¢¡¡ØØX Ã@UÕæŸ}~oúÙçó …°Ùl¸Ýî.[gúêÊy1MÓˆ‚Ū««©©©iw½Þ½{cb€¡¡¡.‹CÅ‘²OîÃ4¨¨¶afÀÀ¼VÛÕG"B›Zkò(θè,ŽíŸ„=R˦/ßä…wVS—2•˯>…ñ WÝšGÃæ—ùç¼z0Mì9'qÕ¹“’â ´ãkæÿç%–W5Þ´Úš4’3gÃÄ~ ¨õÛXòú³¼õm-š=‡™ºˆÐüEx¦ŸÃØä<ñ—gñŽù9³NMFŒŠ^_Ä—/Íá‚ÚJÔµ&õ¡—¥Š%Uá–)v½G&É»žµÁ^3XÎV¯‹a½ã±TÕr(Ų…8–-[ÆàÁƒyüñÇ™1c=zôèî! !ÄMîÿ+„B!„BºÊËË©¨¨àwÞaÁ‚í¶?8Çî]»ðûýèºN||q3÷lŽ›žIBƒ¿Íà/(8’°J©‹îõ²#‡Ÿ]p2Yv0¼[X¾¸€š¦d_3ÄÎÚ1iñX‘°øixúé§8p EEE¸ÝîîŽB!„B!„Bt›¢¢¢‹ÅBbb"^¯—P(D$Áívãt:±X,ÍÙ¾ÐXþ9 0 «ÕJBBB«å¢G&:¦=Âç_Qlèàš +AÃÔ1ŠFÀ £SÙ‰I&-_`˜h=âÛíÏš6š£SÊùßÂux5ê6°ðã2Ž?í(z|\FuË[ dÑ"6x5Lj(\]ÅŒ‰iĨNÅøôJ>¹¯fÀú/ùÎG ˆãó•€bRýù{,ÛîÝä­£2À1ÃÈܱ’’ÛhÿW°9m ‰î=á">|v¨N²†1ùg3Húøu>/‹&ZHCIt`Q •©∳~ýzÖ¯_ßÝÃB!„B!„BˆŸ<‹ÅBRR@¿ßÏçÃçó¡ªê>¥Ÿ›ÊA+ŠBll,n·ûˆ¸ïï¾tL=H†u ¿:k#˜KÝK¶çRoašæ87G w‚¡kÔíôašòÚ(Ò¶à¯Ëj·?ÕˆÛh >Ô5 ×ס¹’ˆQi%¬ã¯ 7g隆 Jã“%&…K3ÿúOf `±A¹ÛNãé¥ag`O†odo>ø4S¦ŸÆoîœAÍWïðòü¥”ÛŽÐêš{Ëo#„w{»F0.;kY  ›ô(†…B!„B!„BÑÓ4÷  .— §ÓÙœ ¬išÖXÒTUUìv;v»§Ó‰¢(]~O⽆ѡ¾»j^š¶§èAjÍq;tìߣ«ðmûÌÛ‘îè19ÔI¸4=„î÷ƒ …­—€ÖµÑ`¨Ýþ ÿNüj˜OC…B!„B!„BÑ:UUûÀÛÁ ó":ëQvÓ41 Œ:¬Õ,x¢½5RiÐV i‹åˆ­Ç®ù½ÔµÓÆŒúð¶×H!„B!„B!„BÑ%$ÜMéÞÄ}žêØJ±`•éB!„B!„B!„Büˆ$_\!„B!„B!„B!ŽB!„B!„B!„Bˆ#„€¿‡ÜÜ\®¼òªVŸ…B!„B!„B!„¢;ÈMj;ÁaNŠõD#Éè»ì$F²[|Îpþžˆ :øDwY!„B!„B!„Bñ"Àb=‘k.¾žþ1œJu)7ß7â€ç u)ßu=§ŒøkwW!„B!„B!„Bñ#À`šàpAШ&ÁGM ü€çDguÑ(.—íoÏ’v27ß<‚…·ÝÏR¯Ñ{°/ÅÑ‹cÏžŒmé|>+ab#iÀьٞñvÔh) ^þˆíaPÝYŒ9~ƒ3<8Ì5ÛVóùÔè Œ˜>ìÍïð~A]?J!„B!„B!„B!DGI¸ *êኦ2aòqL>aÊÏ _0 Fºm˜d%eÔ$úù¾áõ’&*qObú˜+?yÿUЛÛÚÉ8ö†˜ËyëÙ ÔÛzrÔé?ã„áå¼¾²–Â¥›2m"ý¶}ÀF¿Ùû$„B!„B!„B!ÄO›€;Á4¡¤!Šiš®-l±MJJ uá |‡zØÞ“yNÊá3k ÃG'Súù«V†÷klÁîT ”UR¯™Z ;¼ýV@«YËZÿyŒèïaój¯d !„B!„B!„BÑM$Ü †iPQmà ̀y­¶«D„:0µöfþùRKVá=Œ^ q¨U+xíÙ·É÷6åßZI›p1š<’ž.šü÷yfî"JÂ7ö:þ:iïÈ㨾Éx\!6ýo./,.!ÔN"®5©½,U,©j öª±d8ý¥MäœIÄY"ÔlþšÏWl¡^R²r£O>‘I‘•”:ò›ºƒ•ïÖ >J¶û9ªO/ÜßyÊB!„B!„B!„Bˆ€;Àêú¦iRPØrpjj*~-–`ÈÕ±>­IŒº‹­c».„B!„B!„B!„èZjwàp¢£SÙ‰ÙÆ†iˆÖ`ÿ2Ê­1(Yºšê(`øØ´l-Ñ>G“ílZ\òO󩉘è»ÖóM¹ABz<–¦Åõù¬ØêÇ¢•«XV™Àðá)íDölNhA¢MÙºŠÑV~WŠO31å¬Ýè#!'‡KÞIÓþ‚—çÍcîKŸ±«ß4Λ†m÷êf$Œnqa“w”B!„B!„B!„ÝF2€;ÁÐ5êvú0Mym”€i[ð×eu°WP JSÖ 5±ô"ξ;’jñ÷ÜU×0UÙó{ÄO¤i±¦!N«ÝȾ®é`±7¿ -¥16"&  ZU0tLG:{†X?;>h(â›åäMHÒ7UTj Xl¨F]Ê? !„B!„B!„BÑm$Ü šB÷ûÁ„‚ÖK@ëZ€h0ÔÁ^-Ä&:Q bjl.ÝG}Ø;€I[1UÕ„»)Ú«ÆÁÍ}µÎ ì­Gw§k…]0|ÛX[3†£Æ÷cÇâÍøÝ9ŒÈsQ½²šH4†á²sR(ôV¶Ä“Õ? µ~%~@Å•‡ØŒ_osÃB!„B!„B!„BˆƒHÀ ë7ÞàVAi½¡E G:Ø«Jæäãé·ú6…Ó8úÄ¡X¶¾LqˆëÀÚîáœxTŠ—Ucï<“Ò½|7¯†öníÝFµ2žœD+%• ¬ÿäÜÇË9³§`Õ}”,dáF†áç«_sÜq§2ëh'ª¡®´O>ÝØ˜¬¸Hω'XZНíȳB!„B!„B!„â ’p'èfK4 ¦É [oh¡GýëÔS´ÎÉ´?þ“> [óÜ¿¥Þ ù>¿mÑvP3ärŽK«bõ[OóQi´ÝõÌ@ ùÛ'0yHO¾ª,! V~ø2+lM¤j Ÿ¾±¦Å¾Ôø¾ M®gÝç;Û < !„BˆïgüÑN®ÿýD\Î=W C ÜÿÀ,ÿº£ÕgÚvâ‰'’››Kff&ñññ]Ò祴´”’’JKKY¾|9†!W& !„B!„â§IÀ`–hPX·v]‹mRSSQL #íØìª ÁuoñØë/°H¯ZÀ×-Øë• þžœZ5_>ó¯wºôr˜Ò_Qsö8†¥ì`eÍ÷ Ý*nrÆǺþS vÉ—lâð¥(mdõ !„ݬw¶•k¯™DzÏáôHËÀ4}ÔîÜÆÿ`ãžûý  °ªªÌž=›íÛ·óå—_RZZJ}}}W ÿG‘™™IVViiiÜwß}¼ð ¬Zµª»‡%„B!„Bñ£“p'èf›æ®»?#mí ¶–--ÆÐ2;1»?0ðô=W7|ëY0¿‚˜¶n2Ü.ê¯ßá­úz:ZôZ!„Bt\J²Ê·£WÆp²³CQB`úÁTé•1¸Þà¾û?cù×áN÷òÉ'sê©§òôÓOSXXxöàÇQZZJii)o¿ý67ÝtÆ ã¹çžëæ‘ !„B!„Bü¸$ܦi6–3êH°V³à‰öÖH¥A[¦iX,–C:³Pó{©û!˜¼úB!„8X¼o™ÙcÉÎCwE۾Ĩ%Æå¡OŸ>ôJOF×øÝo'bþë V¬ìxXUUN=õT~ÿûßÄ=èwß}7>ø sçÎÅ4ÐB!„B!„‡‹Óé¼Õn·w÷8iŠ¢ ª*ª£ Ÿúq‡Qû稪ÚvðW÷R¸p_W¿òË‘²eüoñ&|RyYˆ6E£QöþœS—Ë…¢(X­VEÁn·S]]Ýõ·ç0óïåøÊ%ßû\?ü9xéß¹fH_®ÙE§+Ö»†ó»{ÿôF)Ÿ IDATÂ/ÙPoÿa}‰®aëÍŒ¿ÞÄ$ï VU¶~%ídþ|ûY„—-§¬óI‰cIaü%7pÝeçrÚÄ”,ÿŽêèAÚ–Ýä §_¿£°ÙãXWø>/¼¸ˆ¿ÿcºVA¯ŒXz¤*¸]6‚!ƒ>¹jª«(-ïØ'äe—]Æ;ï¼spþvìØÁ´iÓX½zu—ô§ª*S¦LÁï÷ã÷û9r$iiiTVV¶»ŽÏç#tÉ8~(EQ˜8q"Š¢PWwàå V«•“N:‰êêjÂáƒõ.„B!„BˆƒEíî!ÄO›…”ãÉ‹ßóq¬¸sTl?¨_½gÜÆÝ—Å­´õÚ!Bé¢Wymq9?<.ו}uêaà1ÃI²ì¿ »æóûS=cùݽæ”ôv¦s´J–¿ù ¶èîœ:[æNæã[®åº[^`] »G$D×3 L?>_-¯Îo ؽ:¿¿¯Ÿ¯šP¨œži’ã9÷œaŒ?ÚÑn¿'žx"Û·o?¬Ë>·'??Ÿòòr¦NÚ©õ’’’?~<Ó¦McÚ´iL™2…^½zЮ¨¨ˆ¢¢¢.-ÄÅÅáñxº¬¿ƒ%==‡£ý÷˜B!„B!º‡€…¢)Î>œtÎÉ Œo È©$Ž™ÁŒ é?¬F¿3—IGYYóÙ&šãa-½ö£0ð­&¿4ØÁ®ì«cl='rîé£HÞÿ€tÛ|~_*I£&“]õ9_WýÀÜi3Dyþj¶5t KL®P>C‹Òý#¢ë†aÀôãtÆrÞŒxÎ;;‹j'6á"’z>‰¯a+©)ab8åä¼vƒÀ¹¹¹”••ý»ð£p»ÝôêÕ‹ÜÜ\rsséÕ«n·›²²2rss;ÜOJJ ãÇÇëõ²hÑ",X@AA»ví: ­×륾¾¾KƯ( yyy$$$tI‹ÕjeРAB!„B!aràï!77—“N:™?^Ðâóœ9Ov÷…‡ÓÄžsW;‰!)B;¾fþ^by]§ÿj6c1~÷wÆz¿ãõÏL?'—å—üí>JÞÿOmîíË×KB •M’ÇA]þÛ<ûê ª¢RŽ¿†›§50÷öÿðÏbó¦04ò5no*Û¸ßkJ ý§Íâ¼ ýéoǬ/béÿåUµèöfþùRKVá=Œ^ q¨U+xíÙ·É÷6­I#9sÖ9Lì—€Z¿%¯?Ë[ßÖ¢Ùs˜ù§‹Í_„gú9ŒMÞÈ~cÖÌò=Æ­/n%‚Jü S¹ðÜ) NsbÔ±â½ycù"&`I`ø™—pþñ}‰‹îdÊœÍ÷nt2èÊûºàœÉ íá‚p_>õ¯lØ;@¬7ö:þ6y +0:'øX“ÒÅóøïûñ™ Ø{2þ¼Yœ16‹X½–õ _bîë ¦Måò«O¡G¼ÂU·æÑ°ùeþùL>~s¿ù´¦pÔ9¿äìcr‰·˜ÊV2ÿ©X±SÇš2Š3~~&Çæ%c7lÿøQþµÀÂYÌÓ“¬Õ[Gƒ(nr§\À…§Ž$ݦê»yþ……iwÿZÆ—BÑ‡ß±ËØžkX÷ù—šÀ®9wñv™Ñ×ÜÁ™[ÿÉï”ì¹?ç–_'ðÂ_ž`­‘ÃÌ[~KÊ‹á±Âàî±ÍdæI£ÉŒUˆî\Å >Ç>WÕÆ\z#3rÿ“K¨j¡"º%ídnüM½â„ó'»òþúÀrü‰-½ßêˆ3ƒ_œ9GœÂ¯nHñ‚Gyì3Ù-ΓÙÉþw¿Ÿÿ<÷ò|Ü#Ñ#>{ÃÞ~ú%–W5æ ·x|ß+Áhíé¢ñÓR[[CYY }ûô£OŸ\Î;WçôŸ5`µ¹<ü ì® ÔÕ~„ß_C(´ƒäÄtêëÝL<¶7вe_µ\Â733“ÒÒÒ=/ØÒ9þŠë™}Ò@’¬& EŸñôÿâÓJ [úD.þÍ%œ:¢£¯ÿ?½jaö¿¯!ðÔÛ$_|SzäsÛ/ÿÎ7z6'^u—LíG¼VÅê·åþ¿Å«J,Ïú ¿;ÿX²bB”-{‘~‹ ~H˜r/Ož¹†·J†s\^2 ØöîƒÜóB>õí\h“””D=p8X­ÿ‹£i‡;w’Ý¡¹VU•!C†PZZÊúõë›_o*‘­ªû^?;fÌ"‘kÖ¬ƒÇƒ&66]×ùæ›o¨­­ÝgÞ½{Ó·o_–.]J(ƒ¿ƒ&--””úöíËÊ•+ihh ''‡~ýúa³Ù¨¯¯§  ¯×{ÀØ- Ç'55«ÕJ}}=«W¯Æçó‘‘ÁàÁƒ±Z­TUUa±ì©¡ª*yyyäää`%%%-ÎÅbáè£Æår1~üx‚Á K—.%55•¼¼_|ñ†!—í!„B!„ƒ€;ÁaNŠõD#Éè»ì$F²[|Îpþžˆ :øDwYq(Pôe᱇obŽ?‰‰¿ú#çž½Šü9¼÷Ôô¿}:[þuo—Fµ½úsmÆküýáï–4Pã3V¹ÞULÄ‘Ë7þ–KŽÛÊý kUnfÝú µÑÝߎ«†NéGÝÒ·(oª“|Àk!j¶,çµÿeËNèuÒµüá¼i|S0-Ö$Æ ÝÅ?¼ƒ*=–!ÞÌ¥sûã+©SÒ™zå,†ly†Ûþ½Ïõ—Φ¦äA>«¬éfæÏ½×vø‰D,äí5jÒf_6Ú—îá†UµX{ŸÈÕ¿ù?fTßÁ+›£xŽšÅÅゼ~çõ,¯u3ø¬k¸Ú®°¡…©U“&0ûòIøß|„›WT@B®†P ÙÁ άcHþà.îúöî;<Šrmàðo¶'Ù$$$$t*Ä‚½!XŠÇzì~+r@ì½ÅЍ AQQQ@z „NIéu{™ùþ„ôÝ í¨Ïí•+—›™gÞ6Ë<û¾3£}ò<úÈx†oxŽòô´¿ôNÆ&¯á¿O¾JvØ`&üß­\Ÿû ïoZÊ'3;1õ/ügi‡s(uÊÓ|ÊEŒPÁWOßÏ»…øv xÊü`Hâ¼;þA¿Ì/xùß[(1Ư/ÁKRåd¢ýØÆâ¨$¼çxncáÇ7á¢8FþëAn¿*›gf¦8¿ª¤½©Í0†„ïföŽJ4t´h¨œctüz'²ÏuÜy¡•_§=Íë™n¬­¢qUªphr˜†™vcng|«u|ðú &«ë4f0— ú–™/‹äÉÕ"t'oæ…© ~ŸƒSº´eð/••…DÆ\_üÍÞ;…ÄvÓ2á–|Ûƒø–©´GÒ¿_«×5œÌ‹ŠŠª5{ÕÒýîVÂ;·^ÎêŠp’º$á*ö±W?ýCw¿Áƒ×¬¦ÀÔš$C:€±-ßÒ›_»ƒiY•¸]ºÞ>‰Û;üÂÓ7>B†u$¾ú÷gÞÉ”eXÝÍÄñ|õøx~ÈkÍ%“_â©Û2¸óÍ­€Bxçsi5ë^î}µ }‡kxóõ»¹pÙ=|•ÝøÀNll,´jÕª:Y›””DAA^¯»ÝTY›ÍfÂÃÃÙ²eKÐõsXXXdçÎäääVëù¹š¦G×®]Y»vmuò÷ðßvîÜIË–-Ù¿?û÷殺ZîÒ¥ k×®¥²²’¶mÛ2xð`–/_^ïÙ¼ªªrðàA¶mÛ†ßïgРAôèуõë×AïÞ½III¡  €ÄÄDúõëW½mbb"mÚ´aùòå8NzôèQ+A|Øá¤öÙgŸÍš5kªÛOee%[¶l¡¼¼œ˜˜N?ýtrss±ÛíôéÓ‡ƒ’‘‘A›6mèܹ³$…B!„BˆãL–€Aœáî¿éaþï¹>äëVñøË}ëýÎÓ­â½çæü¾Ov¸Bˆÿ*Ù¿ýÆî2š·ˆí› зL "”XÍgýƸ5Ð\Ù¬ÛXFÒ ®Dé4l»¾å£é?“}è>°¾åF¶ÉcÙ†B§šê¿æ§t×fҊܨš›ü;)3·$²úkA*Ù«6SèTi«wàí4˜vÐ'ôgHë|–þ²“2ŸŸ²]+Ùbo஑UE£pù"Vï/Ãå©»$¯ŽèžCi_¾’%›‹ðh*ŽÌü¸ËBÿ3ÛaRÂè0¸#îÍKØXàAó•±ó÷ehðqÕ¾:T¬`Ñšll^/¶Âºž&¦V¦²rO%*à-Lc¿3’¤h˜ÚpÆ+{ZÆ>›oa Ëö(t=½–Fª£nyúmùT˜ÚÓ¿_G¢uN öeRæCÂÇä§Å)ä9}x*ò8Pê©JP×-§&ã£ãð^ú#«¸ð»°vYá½’h p~JF@—ú;é B*ç@ÂèxfÔ”ïø=½ ÏIÉ<‡ö¥i~,½¯á¶3K˜ûÞw¤;›žÆ§hålþ~9i%Ü?º@í­n,Ê)ôý«d¯XÏAš¬ÝÅèõ߯ê7´˜…¬¨Xå±§RÈÚ¿™={²ñxÍ(НÁäoÎþy¸ÝnŠÇåÃë ~Þ¹¿<‡KW† íN¬ÎÆ]»)ö1y#÷3gædÛ½¸K³ÙWè®Ëò¾ÿœŸ÷ãpyð›;rÞˆhvÎYÄ® žÜ•|—ªÐgt‰ Ç…ƒaÍWü¼ÏϹ¥‹öbtíL‡b([Ã[Êðž¼m¤9ZС¥±É¸ccc±Z­´k׎iÓ¦1räHz÷îÍûï¿O×®]‰ˆˆ`íÚµA•ÑXu,Çt¹Ûí&''UU±Ûíø|Uå¯iaaaôë×Í›7½lt»víÈËË£¢¢MÓÈÉÉÁï÷¦‘——‡×ëEUUòóó1›Í(ŠB\\N§“ÂÂB4M#??§ÓY½mrr2yyyØívTUeß¾}hZðÏ7°Û픕•¡iåååø|¾êc‡……Q\\ T-™m±XL. !„B!„âØ‘À!Ð40‡S-¤…%’"Gn½ß1–Hʽ^š¾QõW¦˜“8óŠ‘WÍç÷, ¦¸žŒ8ïLÚ/拟rðú–§3þª¾XëîÀ—ÉâYëh9æÚ¥Ë÷ÛÊ噎âOνÜ]ÝŽ5U%Ä4êÁî9|#VÅ]éK4Ôî ZFì¾E¤–ª¿¦‹ ãðK¸ðôND+>üÆ–ÄÖŠÙåðVϤÕ\•xôIDštè#âˆÐ·eÜÄW¸½rÃM(x©,v4Òou„Ç„£8Jª„àÃ^êÂÜÖŠA1¡Ã™æ¨N^«ŽRœ Nš¬Ú¶"ìALªT]¸ª©¡Šè­Ä[Mœ2a*¯ÚÎ`DÍè@ý…Së—§ïàϼý_'_<ÿ\ê õÇÙÌYšŽ'<†p9¥Î†J£N95‡ÞBL´k¯{yaÀá:4¢wW`Rœ X»3ª§‹uoeUOHå|˜r¨~ëÐYˆŽÔãȰÓàæ¦Î\~5J~£¸Ár¨Ã_IíÈž··Ú±*§Ð÷ïÃi¯Ñ4 åPÿÕ5R¿!Å,DŠŠUŸ¸…)Ul¶îtloeßÎK±Û‹j%SÖ=…Ñܽ™:ä³kwQÐÇðfÍã©§íÜpã¿ùè&;k¾z—i ¶á¶&`õ•Rèh kJólGú¿!ŠÖQfú<ú)óeFêv+&}8q±¢MeæðÃ}Ô„ÁYZu=TgÎc™ªþƪÙlÆh4’““ÃôéÓ¹ÿþûQU•ùó瓞žŽÉd¢¨(¸r8œ°=œEXX§ÁÄ©¢(ôêÕ  ÖÌߦ(Š‚Ñh¬·„´×ëÅb©ÿ%½^O·nÝhÙ²%ªªb6›ñz«–±X,x½ÞêØTU­þ›¢(˜L¦ZÇ9œDÖáe«M&š¦U—Ÿ¦i8âââ(++#66·Û-³…B!„BˆãLÀ!P5È«€ÛFŸÍБÃ9zT½ßKgj8CŸ4pÌ(á9½§ƒòñ~û1f ®ÿºØ62/Û…†‘Ø^#30’¢W­„¿x=³?ÞPã=1ý/çâVû(q—‘·*^£Ë¾Åì±?Aˆÿ=O¢ ²më‰ ×qèá­D´Œ€Z7É1µcøiaìürç‘g¿6ðšå”«¹ó²X~|õU~?àÆÐîJž~°æóõXc,èp¢:k,a~nÕQŠÃ›ÁÜIo²¡²Nü¦UgÕèi©Ø‹mh±„ë Â` "Æ‚»Ì†OsSáP±D‡¡ü€Î…¥Á‰B*Îr'DÄQ½¯fðÛ)±;Ù<ãi>ÞUÿ¦¼¹î •1~*Ó—ñå+ø¶Ã(þyÏ\{p3ÊÊqé[Ñ¢£Fv¶Z­rj*%œòJ7e¿¿Í”¯÷×Û"›xhË@å¬U%]”ϺԇGU'hjŸ„›J»JXì‘}ÕŠÎï_žv̓Üté6^œ»GCz“í ¨•¢Ñ\M”4ÔŒŽ¦=kΆë7PÌB4WQ±ÊÔ¶ñ¯»T*lméØ6¶ê™¿u“¿ûr±;­€5ëÿ4˜““Sç9À>ʶ}Ç;.fF·ËxbêDîɺ•WŠŠqÚÐ2L $kµr¿Â ;+_À )ŽÚoT"))sQôíÜñaµ?.+´8´·£é5‡gßêt:²²²ª_6áèr¹p¹\$%%Q^^Ò±].F£EQLoݺ•ÈÈHúõëÇÊ•+Ƥi‡°°°Z¯Æ“È]»v%..ŽÕ«Wãõz騱#mÚ´©ŽÍ`0TÇv8¹\ó8fó‘+žÁ`¨÷¼ãƘÍfȶmÛ8pàz½žÑ£GUåžššÊ™gžIÛ¶mq:lÚ´ ¿_–ÃB!„B!Ž'Y‰0šÙ•Uߜ߾c{ƒ?ùù”»ÁvÒÀ:b^É•C[Ÿœì¾)‘¾Ý,HÍ<”ñã*ÍdÅ‚El*ª{RÅï÷ùÑ'뻉})ûqhà+ÚÁ{"}O‰–†*þ²4Ÿ»Aë–UË$*¨¸*Ý袓ˆ1VÍÊ@×’!£zcP0ÄœÊÙƒ£ÈݘF¥ªÃÚórî¸õ<Ú›u„Ÿ2’¾læ÷tç¡èJƒ¯éì˜T;å•^0ÄÐãÌ~´¨5hèh3ò,ºDêPL­|Ωè÷®'Ë ¾‚¬-lÃcú¦GgŒ ®]'Z‡3·Q¥bçìµåœÞ±K›38·»‡ÔU9x4'û×ïÇÒ½[PtV:?‹6 *å;ÖÝbž–L¸^9&™äH=úØA\sç?žÄHèÉaÕ&'=.M÷X3:½‰ÈVékDáÐìgs á:P.csB:ÄYСâ,Σȭ`2(x 6±¡¸ çéC‚E!¼%ɉ iMÅ¡9Ù»b†Ó.dXÇ(Œ:=–ItîÕ`R³}ƒÎJ"wÙFª?°œ}”tÝ£'­Í º°¶œqn7Œ &€ì]µÀ‹Þ1 £ÞDTëdbª§&»±Uæ²ì³ï(;í&®ìi ilHí­åt4í¹±úUªÑ´Ü‘‘G¾Ö³ÿ~Z·nÕZµfNbb"ƒ¡Þ¬`¨JÄþ\m6›«“¿ÅÅÅÕÏJ†ªåªk&–sssILL$,, EQhß¾ý‘Ï ”‘¦i„‡‡ ÓéÐétÕÏ$>ãa‰‰‰äçç³lÙ2Ö­[Wkùë.]ºÐ½{÷ꥢLDDD½¿ !„B!„"428ª¦’WhDÅM×îÝ}_…ǃÃDÑš:0îÉ[0¯ØDø€Þ$µˆDW°–¹Ÿ.$µÌèˆê1†ëÆŽ¢g‚µ"“µ‹fñõšƒx0“<ìn¼hÉ:ü™¬üòc~ ¿Œ»¯ê@˜þ<ýœìïßbÚÊrb_ÍÍ—ô&Öb%òÐ èŠõoñì¹ÿž~\èbôø³h—?“‰¯­ÁÓËn¼Ša]Z «ØÇŠyŸòMJ ž"gˆíD’¾€‡MUqä¦á@O\“·üuX; ½{ óeÏUÙûí ê”Dø–²3í„ø qïå§_s¸óÖçy½"…žý„]ë~`Óé×ñø«g“¹è5ÞÙ øóIuÉý/L ¥ÉEÎÚ/™¾¢?z,ñèÚµ’5¦HâFuǹîM² E‰¤GÝ×ÐpìúŽöÞÊϾÁ •9løñvTô;—ê&s§… }…NÑz*÷.cÆô*T@=ÈÏÓ>ÃtÝ<úÒ?1¡áÈYͬi™ä9 H-]ǧÇpݸÇye‚Í~€ §ñuZUBµtýg|Þvãž~xŠØýÇ*6–ip_þ¢?øø“h®û/^gO.Ëþû =‰tî~ J¤ Í2r³oá»Ì¹üZ®z -ôà¯ØÇïÓß#³Ä‹çÀ2–ìú㦼Á%»°X©[ž`ŒÈ57ÝKr¸Í[Îþõsù|‡ÍkçÇi_vãXžxùVôØÉXô6ÿý-ô8lÛ¾ä½ïÇrÍmÏpe¤¼%ìúé>ȬlòìŒIC9³E ·–ÕX…A­_Ϋ·°ßs¸ xÈZ2‡•·]Ë#¯\„·lk~YÊÄ6 A¥bó|w ãï~–Ë-à+\Çô׿`{ͺ*üƒÏöã±®fës3ØRäòŸ¾¦Ú[Ý ƒÖD9U4¼,y“û›7§áúýé@1 ºÌý>f}•Á—ù¨¬Œ£}ÛÎñ‘ž9 IË( ˜ü8pà Õÿol=‚ýß³t´êÐ<%ìù}¯o¨DóTòÕ”7‰xàvÞ™ý*Ùþù<½°¡½ºØõé$Þ›p/÷¿ qð•îä»—&³«ÀCźwøÏ¬;¸ûÉéü3Zž6ÏžÊ3»K›]%%%X,²²²˜2e ©©©hšÆþýûIOOÇápôþÏ">œ€„ª´6lÀf³5ºÃá %%…^½zÑ»woü~?ëÖ­«5“Øï÷³yófÎ8ã j%r5M#--œœÌÚµk),,$--3Î8£ÑˆÍfcÆ ÕÉÖšÒÓÓ8p cÆŒÁf³‘™™I»vU«{Øl6¶oß΀ÐétÔZ;77—¨¨(Fމßï'++«Ö3‚kòù|ìÝ»—àr¹X±bûöícРAhšFvv6eeeÕïw»ÝtéÒ…ÄÄÄêí7oÞLaa!-Z´¨NFZ¶l‰ÉdÂápÔú›B!„B!B£DGGk‡¿e-š¯{€¤~÷3w¾Ê†Ô”†ßÏ·ó¬lþ6žií|O5SÆMz˜¡…syî¿Ë)ð[éuÝãܽ€gÞÛ@e‹aÜ÷ÄJ¾|ƒ¯6•`hwÞ3œÜiS™“׃M¾ŠüiÏ37Ý‹µuZTî'Û¦§ýØI<<—'ÞÜ‚P¢qÏÓ—pàÝçY°Ï@¯<ε¾éL™™Ž/á<›xÆmß2sîj²ln<þxÎ}ä†d|Â[ vAñ<|K¿>÷:¿5•HQˆè~9×öËaþÜõ”Ôz«ž¸!ã¹8z9³=¸Cá<¼/K'¿Âª²<2u`ܤ{‰›õ$ïnî9…â/ ¬÷={û_›Êœÿ!D膜f¤_ï$¬± z8x°ˆýÙ%¬^\Öét¼üòË<üðÃÇ9Òã/66–V­Za6›«“†>Ÿ·ÛÍ Aƒøâ‹/\–Y_­Zµ¢{÷î¬[·§Ó‰N§£S§N´nÝš•+WJ!„B!„lj|¥:~ü”xŠÑhÑèÓÉTMÅá­ÀAT{UÉ^µ™B/€´Õ;ðÞ=˜v–MäôJûò•|µ¹žÌü¸ë\n:³ ¾,'ßA×½ispÙ÷Q5¬þb|†è¶Äkù5×…¦)dï.%ld"u锊VÎæï—“VRu³PŸØŸ!­óYúþNÊ|*ìZÉûƒ êÉò¢²†gP `´ÁçÄÒ½K›þtÓïeI¦£VÉj7~}XÃËŽ ñ·£ô3ƒÙñ„8Æt-9ómí¥T=™_óêûë( rb°7š¦Uÿ@Õ2¼+Vz±Fäaµ:ðùTÜ.Ëÿp Óéª+pè§1ªª2sæLä·¤c IDAT{ì1^xá…u*ÇEII .—‹-ZT/»ìv»9û쳫g‹Ïjµâ÷ûkÍX¶Z­8©!„B!„â8’pT¿òbšM·&–€vù2°—·môïµùq9¼Õ)ÍU‰GŸD¤É@xL8Š£GõÍpöRæ¶V ž¼þ1£.¹ˆ{ž½’¢ußòÕüUd7°R›¯l?µ~ôlÎÎ {¶ÄuàÕ«oú+)°™®«ˆ#Bß–q_áJôFÈ 7Lù}~ЛBkXº(ºlƒcû|òëLXQôFtª¿ÜBˆ¿µ˜•ïLdåÉŽCˆ?™ºÉ\½¾êK¿üæ «_7!íwÓ¦MôîÝ›×_éÓ§“ššzLâ=‡£úÿï½÷^EaË–-'1ª¿·¬¬,Z´hÁèÑ£QÕª|³mÛ¶“™B!„Bñ×& àøü.üv;h°}ÛößßçÀë vÙT=Ö :œ¨€ÎK˜ßF…Û‡½Ø†K¸*ü"b,¸ËløoÉv–ÌØÎ¯ßt㢻îäÎK0yözGÐ*·0ûëÓxü¾Éô)ª "ëW>žŸ›†æ ƒê(ÅáÍ`î¤7ÙPJæUÅ]V?<«Jë­óÜ0c«¾ô‰ÊcÍîò:³‹u„ÅF¢s¤côO!þÂüK˜úà’w@O&sžüó/*BäLå­‡þ¼‰!Dó͘1ƒÏ>ûŒ›o¾™ÄÄD8@VV';´´mÛ–¶mÛÒªU+†ÎŒ3$ù{’y½^6nÜx²ÃB!„B!þv$¿ßîªÑ*MÍ…Õ¼øÜAf?ÑÑfäYtÙü-iîŸs*ú½_‘åV±íüƒ½—_Ä9½×2{K)úä38·»‡ÔrðE$Ó%ÖNVN[!ye^t& âªt£‹N"Ƹ—OAS¢é5¬=Ù3_äýåøý>|jã‰]_ÁFÖŽä‚1}ÈZ´"Ÿ…ØÄV ÷‘çl:!ì-ÙG¡2„1²óƒxh¯AÇ] ãö;êì[ £u‡(œ99ØdIP!„BˆãFÓ4¦OŸÎèÑ£9ýôÓ¹úê«‰Š ö‘&ÿ²³³«~øaYbX!„B!„[’_s ÷zAÓèѽ{ãoT3ñ{íÁíTu“¹ÓÂ…¾B§h=•{—1cz *PºŽO?ŽáºqóÊ3šýNãë4'ZL2ÃnÇ€3Šê¦$c%_~µ~ ×ýÀ¦Ó¯ãñWÏ&sÑk¼ù‹{™ŽS®ŸÄ+×WÖ›¿žÙÓf²¡¡˜|ùyÚg˜®»‚G_ú'&49«™5-3`Xsd“º(#{%².?›#OûòS´fŸÖÛÀΞEŸ°§}é¢:sjË v./&ˆT²B!„8J¿þúëÉA!„B!„B%%::Z‹ˆˆ8Ùqü)—`4_KJæ`Ö¥4˜:%>>žÏf¤³ìƒ®äÎnz‡¦Œ›t/q³žäÝíÁ.*3®~Œ›#ñö—)º5t–V »ûÎÎxgæà ¼“è¬ÝsÅ©üð Šš™ºUÂétΕ ¶ÿÊ‚U v>µ ±ÛíÔçE!66N‡ÅbAQ¬V+;vì8‰Q !„B!„B!„B=™¿æÂèsóü ¿ãö6–°-bõª,T_›J·‰å¤–b&®m4þ´"*<ê¡—bIˆÔ(+°s<­«Úv±d~GµêžÂõßòME…$…B!„B!„B!„’$€ƒ iªª‚ZN C!K¦Ú"žJßZ|>z½E9Ž Þ@´J¶Ìù†×ÝÆ”azü~P|¥¤¯™Î§ëJ9^ÖõÙË(?šh*Ë$õ+„B!„B!„B!D(d h!Ä_ž,-„B!„B!„Bˆ¿ ÝÉ@!„B!„B!„B!ı! `!„B!„B!„B!„ø‹p3tìØ‘Ûo¿£ÑßB!„B!„B!„Bq2Nv&fCâ çãi‰¿ÔDŒ§]ƒ¿“-áQ:§ì…B!„B!„B!„#28q†s¸ÿ¦‡ù¿çú¯[Åã/÷­÷;O·Š÷ž˜óûN<Ùá !„B!„B!„B!þfdp4 ÌaàT ia‰¤È‘[ïwŒ%’r¯—°0ãÉ÷˜QÌIœyÅHŒ«æó{– #±]3¤_£Lè¼9,ùêG²]9ÿòÞý´õ…¾“¶B!„B!„B!„;’ªA^Ü6úl†ŽÀÈÑ£êý^:SÃé9iacâú ‹m#ó²]hèˆì~.— ô°á—yü”ïÀø­îtVoëÃ#N%mÁfÊÔ“·B!„B!„B!„?’¦Av¥MÓØ¾c{ƒï‰‹‹£ÜŒí¯’6%Ò·›…¿ebÓC}´$gù¶ç»ë¼Y¥|O*EÓ+n+ d°B!„B!„B!„'’$€C j*y…FTÜtíÞ­Ñ÷Ux<8\A­©㞸×ü߈¾ä*Nk¹‡iO¾Ï"C®¾‘KOk‹Õ_®¥_òÙâ]Tª æäá\{ãùt‹6cµš«âÊû…W^ZHŽÒðvŽØáÜóØJ>yŽ/vØÑ·>—‡þ=œÌ÷žgnš­‰ ±HÒ°¢ *Ù«³&“l±“™0Œ«F$©÷P”¾žåk3¨ðƒæÌeoY½ÛG¡/(92;X!„B!„B!„BqÜI8*VxÐ4mÛžÝgÅé nŸ†ÖœuÙ)Ìÿìæ´ãñ˜h?öNÆ&¯á¿O¾JvØ`&üß­\Ÿû ïo1sæ—Ñzã+<ýK>ÖÓîæñó÷óæ‹ßqÀg¢CcÛmZÅÌoúóïñÑùåßHºæ<ÂW¿ÏwéM'AÁÜ"“#‡roÕ+:KC,ɺuü4{)S2C.9slE|“ZŽª¹(.ñ‘…I !„B!„B!„Bq"I8~ü”xŠÑhÖHêTÕTÞ D·SE£pù"Vï/C0uâŒVöÎ^Æ>›͖²=c¹ýôvX¶{iã$3½¯¦R±?[‹®Ä›à€®MãÛmÚFÑê™,ì÷on¹»;FËjÞŸ–³éì/ `´ÁçÄ{ø½ŠÞl6lÉÁæ|¹ìØc£{‡xÌ©å8Ñð¹|(1fô È0 ñ—”››{²CB!„B!„B!Ä_PRRRÀ÷H8ªßGy± M‹¦[K@»|ØËÛ¹W/•ÅŽªä/€ÞJ¼ÕÄ)¦òê¡é³:ƒ5# £?½EÎ蚀)ó Q»Y¾"/`hb;œþb6ý²“Ëþ5⯗³Ï\fÖïóƒÞTÝPT{ ¥F<  3è@õÊõ*èzð{Q%ù+„B!„B!„B!Ä % àøü.üv;h°}[ãK@û}¼NWÐûÕj&JývJìN6ÏxšwÕßǪ/~`пÿÍ”¡ET–¦óÍÇ?qÀ (Mo‡©ç\Õ“’M»‰>ÿ ú§|ÌÆrµþûjQq—UàÃj€R¨¶}ì(È !]8¸,{xúv £pC!ÅHTŒW‰ _Ð% „B!„B!„B!„8t';€?¿ß¦ÒÈh^|nOóâÉaÕ&'=.M÷X3:½‰ÈVékDÁ@ÂÀ¡Ä¦~ÄóÏ>Ï‹oŪwÕÌÛ¦¶SÌ´sgyæÓ™Ÿòå?€AÔ¾·d…Jb}W@­d×/¿°Ë4«&ÜÆ„«O'"m)K÷Ø-aOÇXy™e’B!„B!„B!„â“À!ðkô^/h=ºwoüj&~¯½™Gq³oá»Ì¹üZ®z -ôà¯ØÇïÓß#³Ä‡·¢œ°óocê€Cowe³lÆ4æo«hd»iŒ:›Fª,}íwò<^ æÏ#ýÉñŒ·Êhj°æÈ&uÿPFöJd]~6n@ud³á‡¯ØPïÝ áíz“ìMcq^3àB!„B!„B!„BˆfS¢££µˆˆˆ“ÇŸ‚Áq Fóµ¤df]Jýô'T-ýÙŒt–}Е\ÃÙÇðè Ö>7óØå•Ìzk!;˼ §Ýyó`ßåLyi%Vtn&µ;c®8•‚¾aCQózMI »jæÕóYšéD,þWØívjŽsŠ¢‹N§Ãb± ( V«•;v“ãåææ“ý!„B!„B!„BÔ”””ð=28~Í…Ñçæù~Çímì¿E¬^•…êksŒKWGxë$Â]Pdó¢Š>‚¸ î¢b\Ç1ÛªÚv±d~Ž¡hl[<ŸÊrIþ !„B!„B!„Bq2H8š¦¡ª*¨å´0²dZ -â©ô­Åçó¡×ëQåDá§hål~j?žž½Å¯. w-åïvà8ÎWŸ½ŒòïѼ6ʽI!„B!„B!„BqÜÈÐBˆ¿kÌfÉ^Ç Mþ‚¸þ#èbÛÈúlš!žA£‘þŸø!Ÿ-Þ¹ßhNke@µ¥³z›Â©#N¥…´Hñ7¡‹ìÁ•O}Âw¿o`ëÖ­l\¾wMb£ßÑÙk“füÈê-[Ùºù½÷ ç$ÕØÀÀ™w½ÉœŸ×²uëz~ÿŸÛsY!ažaÅÖ­Ì». }ÝCXú1iy Ÿžß‘áÎfÍ–ï¸óÔ¼¹!•™—´¬qÁˆ`ÈkëHu9ñ:-9˜Âg—ö`ÔƒòÓ†­lM]ÅwoÝÁi1 wjcç;Y”ò5N?ŸßžÃÒ[ÙðëÞ¸ãtZꛈ§³1¨óTÌí¹ð‰øîÍl^±¿”!ÿ˜CÊ÷ÑÕÔø¾ÖË¡sýb쮞<ƒÅ«·°iÙ|Þºc q­†óÀûß±bóV¶,ŸÃÔËÛcn¬:C¨eª‹çòYkùø+JÏIü²å[þÙý ^\zdÉÍÏÙÜx»2´gÂ7«yw˜eÀ+¬HýŠ«j[×’ ?ÚÌÖEwÑ¥f» Àäå[YýÒP¬áƒÄð#,®sŒgns4§Õ,ÿFÎMA·«&ñÉ·ËÙ¼u+kü„'¯èJDu½4P†=û‡Þ&ê•Kpõ}Tçì>‚ÅÚƒqS?ç‡Õ[زz1Ÿ=w}¢LA3¶æ¬ûÞaÞ¯غy‹f<øÖ#õ|´ý¢¡zmZèe14¨6°½4äX÷ýª@_‚‰õx×ÏáPBi;†vÜ´`+[¦_Hì¡]„ œÊ[·²áíDz›uø[¬ßú+ö2×î_ µ‰øCÇ2·åüG¦±`Y [SW³è;8½f:ß@íÄ` …ÐÇ‚c:v jÖ5?àõ;˜~x ÛH9ÿ/+ÈóhÇͽöÓÇ‚iSõÚweÐÐu½CÍÏ|GѶC»þöŸÙ„B!„âOJÒm!Ð4È®ô¢iÛwloð'¿ Ÿr7ØŽwXÓЂIéj.rS7³¯òeÜ”Hßn¤fbÓÅH˜ÁCq^)MÃS–G‘[O˜Q¨”ïI¥(º½âdRºøÐÅqþKŸ3ùÊ(R>›Ê£O<ÏôNOx/K¬Ÿ˜t±£˜üÑD.‹ØÂ¬'2ù¿?SÒo¯¾2žv@˨gç1íîTüü_&>ùßåtáæ×æóÆ¥Gö©Vf°1e=[ó<Œ ÚŽ{‰gÏq±ìËyl* v6SnyƒÇzlçƒÿ‹GÞX…yÔ=¼ñØ"K†ºpË;/p«ùøÙ©|¸ZLj{>âËÇO«±MxÊ¢Ÿ§¾5—¼>‡Ç·bÇÌgyúÍÅ” yšÿÞխβu÷d½èýÀ ŒU—ðú£1m[<£îù”ï¾ù=¶ÄÓNfv~W.›ô4çÆ7p™ ²®B*Sµ˜ŸË“+\ñ_n¹äæä6´¢BísNц7Þ®8ÀÜ»Æ1y“ ;_âú‹ïç§â×µ”u 6áo?†IGJ6¬Û%ŒŒ)ã×¹[°5\ñ5b˜Í¬‡Æ×>FI×¶fô¡Z| ›™žw}ÆÜÿ\BDÊ ¦<ñ ŸmK`ü”Y¼yu›m§nQ9ê6qh¿MÖ÷ÑžsHå snùè+&^–@Úœ—˜üúB²N¹WïïN£¹O]<ç½0—wnëÄþù/ñø¤YkÃÄ/ßc|[ñéþêµÁöÔŒñªž° ÛKÍ28}Ÿ ®ÁÄz"ê§9mÇ—Ïše¹èºä”0#‰ƒú ˜{£ƒÀL‡a½°T¬ã·Lwík n~•‡:íàógå™é)Dœu¯=zÖêª Ž3Á|±åØÕ¬k~S×ï`úá±ì úDέ°tY.¾@í¸¡râÚ¸AÀ6UW 2h躞ã=²}sÛvsÆ®@uþWþÌ&„B!„b’m ª©äQqÓµ{·FßWáñàpQ´†8]õ®8£#Qz Ç Ìÿp&km]˜ðÌ-ø>˜Ägén@Oë1Oðè©?3éÕ5Øtát:ï.Î;­;q&'9kç3}ÎZ ¼uŽaêÀ¸I÷7ë)ÞÝî"ò´™8l+‹s{rF·bÂ]ìþqëÃG2f@-¢L”§ÌãÃÙ)ñƒbJdÈÕ7réim±úKصôK>[¼‹@ùdCl'’ô¬(8t#ΛϦT—ŒEåÚ ÔŽƒèT¾‰Å«2åš3—½eaôn…¾ „¿ÚnBÔbŒ!Ñ»ž{Š)ó²ñü´ú/àªîñ9X¯˜Ú c µ€y“Ÿæí­nà;–§•rßY:Âô`H¾”û.Œ!ýÍ˹û£ <ß/#瓘t÷5œòãëìrƒ;íSøÇ§M†—Ðyw\6™Uå*D åú OËjý…Û¯}ƒ­.€MØúŒà½=i©_Eeƒ«»ë°nýW?° jÖ΂ïÙàú–O¯¾‡s>¼™åõã1´¿™¹Îs_ç¸w¸ŽÜÂã?¡‹~Ë$òÇWÑÔ¹šOaB°õ²ï˜:ƒ~Ðg´äüÿË<üöZl¬©èËŸ¡{œ‘E…µ†¶AÔUÈeªbÏÏ&ÏæCs‘u K›ë©æ9[úMâ¥FÛ•¬ƒÙä;T4 ÈÊʯúBOc–¬›OŠú<HdÆçÙø±pÊ…#‰-þ…¯·Ùi,X«Ü±2¼æ1Â;7¼QMÍèCµù¨¬snŽØ1Ü?¡+ù3od‹›±kÀ÷¿°Sùž7﹕ÞßN&¥¡ø-}8Bkö†£j²¾õG{Ρ•[S±hn矽<¬xôX\õÌÍ‹Sð}ÿ1W™>´©óx8Ïʺ§ÆòÈÂ|T`ñ´Yò2cG¶fþòsŽI¿È¬ÛfÃÚ…^ÖÊе<+p{qÕÞæøôýÀ×]tàX··=1õzÛq“µ| ¥·žÁ™í̬Ým¥ÇÐÖ”¦îÄÜ{0ýôl=˜À€Ópo^ÂnVsûú}ÝfnUõ§²¯¸÷·Øá~YM^§ßøo·îÄÖà æš°•4pì —ã ¥7ìêÇu_ úšàú ˾ o5ŒsŒË˜’ã 8ÎÌ™Û@9qí'@«ÖD›²Õé·A•AÝëz­5¯m;‚êŽ]AÕù_ô3›B!„Bü™É×\C¡Ba…MÓØ¶}{ƒ?ùØ}6œ®ÀwxÌ/bì€ æ>}?÷=ð¯Î^Îî² SŸúxzWòÖc÷óà¤Yèq-· bF‚BXdzHÜò1/L~Š©³ éyå=\¦_Â[S'ñÔsßá4– ;˜í/½“±É[ùðÉxèùð ¿•ëûE5>ÃçÐ1Ì-b19 )¯NHû(ÏØJ&íè7tC:xÙ³9²Ã7C4Å%"¢ä[ â¯ÏÆ'÷ÝÄ¿çeãÓ™‰íгÇ^ÏÙÉ 4Ò¹<¹ØéNàê)ÏrÏe§Ó¥¥¢ßßâ©ÉŸ±Û­`í6œNìäËEû¨^€À_gmDM©M-AXGñ¯óÙTúª¥üLZõMC/eù•hŠ®Ñsk>ÿµêF"€fcëìùäèzpVç#wðÄÌy‰8”ÖîÕÌú£êF"€Z¼ŠÙkëßÔ«u®!ÔKîºTŠÅí·`öý±»ú澿¢JçZ]…^¦Õ<ç¦ÛUà}©Åk™Ÿ¢Òõ¢3HÐæS¸èì8 ~œÏgp14K3úP –.gÓÇ”ËâovVÝPKX;wŽ˜~ôI8ruj(þæ·‰#š¬ïcqÎ!ì£ñXL$ŸÞ«m)3–V÷1Ͷ…9‹ò9°ŽØ~ÃiëßÈWË jôË%Ü?jæåv‚ûÅÑî#”öRåøõý@ý8p¬¦T?Íi;àLû…W"CÄ¡·tfDg/)³f’âiψQè"{qVG•?m£2„ç-ÿ•½Õ㜗²[Uœ!ÖÕñJýíØÕ¼ñ8¸ëwÃŽe_Ð?ô<,Ë%Ëhœ9’ õÚìµ²ñ6uteª¦â}ì:ìïø™M!„B!þÜ$×?~J<Åh´htùeUSqx+px¶|*LgÒ¿_G2Wï¥`_fÕ‚©µˆÕK·SêÓ t;¿­+ã‘A]‰ú½ˆ'ÚÕÜ´rk2lh€={Åj›×gáÒ€Êýì-·pJŒÅϬ콌}6?š-…e{Ærûéí°lÚFã÷öŒ#øœx“biÇY—Ÿák¾ØU)©£Ï½œ¿ÍgY– ŸË‡cF¯À ~`±'˜‰¤Ñÿâ‰;.`PD,¥ûز%wƒ3.ª¨?ðÈî¼ûÆMýˆ;[Æï|õÎKLûõ–‘èÔ2òm5oâj¸K °s*qz ¸¼yg6t¬"¿2ÄÙû6òJj¯—ï+˦ ±Ñ¦êc‰G âæ£ü@Y#Ç5`m ¶4Šk5*WE).t´>Áý¢9û¨Ùƒk/5ëÿøõý@ý8p¬æT?Íi;€}?mó3ud/Z®ïJï°L>NÙˆq¯žèDLéºëÓ™¶©$È«\Uìy|f²®™*~,rH¡ÔÿÑŽ]Í»æº~×]’¨öÞŽY_ÐÅqú˜HV¿ºOÀq°Úgˆ×þ€×ÊCñ7Þ¦šYÍÒt¡]‡ý?³ !„B!ÄŸ›$€C ú}”Ûдhº5±´Ë—½¼mÀýùþÌÛÿurñÅøÏ¥RœÍœ¥é ?3±Þ󔹪¿'³Ì –h,:yæbM]ÞTSUTÕƒÃSýpü(:@o%Þjâ” Syõп¶u#jFFœM$ü>?èMÕ Ì×vìç‡ô2|€/7•µé=¹¨W«²²ð  7êÁïE•䝸‹3´¿†7Þ˜@ÔwÏóðcß³fo9~C{&ÌÉ?ÝJ¥rçbÛa† IDATB^¾w!¯¢hÛç,.›ð·¿þî+ÆñU™ UׂV‘:¨¾Ñ¦`މ#¥ŽàSš_mú;Šk´¹þ a-ÔÎIëX3pän>:™¸Ù[é­ŽáH<®€çéÅYê€ÈVDáHÒ@T|ý§ðÕ<׿ÕK¨‚9‡ur™A­úmª]]Í´ô@{S)Z=Ÿ-LæÒA­Iïy Ùßò]FÓÓ‡¶±ºê´¹ãQW~[).öóÙí²¸ NIóRvÀS}-9þ`5QßÇâœCÚG£±ø±Ú!º 1F82­Ë@trt£Û8KÞ²ª_þ™b¦uïþ´sî"ýD÷‹P÷Q§ Õ^j¿xû~Óýøó€±:±ô?õÓœ¶¨el^’†áž³4°- …kØVTˆ²:¨Ñg2¸¸ÖìŬ)1¥ßhœ!ÖUM]CBýíØÕ¼k~p×¾ ‹Ì…1ky{oÕ#sšgv²!»þ97.¸Væ޵ye` ruwßx¡]‡ý?³ !„B!ÄŸ›,Ÿß…×n ¶oÛÞàOA~~Ÿ¯3˜)9~*Ó—ñåyò5D޹ƒk{„£ ¡j ºêÚÑV»²taÄ„éªÿÎ2œG±¢fýðì”Øl~ï zè!zè!¸ï^zs=MÞßPq—UàÃj8¼«"æD:¶ª:]xkº´1c˯¬ú޹b$*ÆŒ«Ää7ç…øó²´BÒ™ýþVî-Ç(íèߨ-c —|ÀòåÓ¸8A‡æ« kÓw¼÷òç¤ÓŽ~IFl»W°—\{QGª£¨O䜣;¸–Ԓ暦`Mˆ¬ƒt-‡pEŸcqù02ä£I<<ÉE±Ò{üU´c7Ë3 Æø<=äoÚD‰ù ®9³å‘˜c‡2~ˆ¹ÉhB¯—ææŽå@Þ”@íª‘‡¹Ö¡­fAªBß«¯bÜy­Ø·à{ö7vÿ8(ÛÜñ¨+çÞåìô'2 ÙÁþŒ 222ÈÈÈAúÏ>q ­”“ûí¤cqÎǦÜ<ä®ßL…õln™P]Gеã/nÝÈ6~ж¬#ß8˜ñÃâÔk‹á<ñчüçü8\ÿ3ý‚iƒ¡·—ãÕ÷÷ãÀ±úNPý4§íø)ZÿÙ‘C¹ñún¸·­%Çã&{Õfí.æÚ‹’)Y½‚ì£wj ¶®Žçõ1xÇvì öœB½~×>Ʊé :Z ¼ˆø?‘î†ÀãL|ƒß|<.›kåñ)ƒÐ5¿½ü?³ !„B!ÄŸ›ÌßïwUzRiê»ýšŸ;Ð](sBgÕ²Š\8‹ó(r+´0(à+'·Ò°>í‰HOÃןÑý#ÑÖØ\Ç‘=ùcöV*£z1ê´hrI£R…ð£>ÓC<9¬Úääî‹GÓ½àö”kDÄ%çÍ!³¤éo÷{KöQ¨ ¡CŒì|ji*?ÿaeÄÈk¹5Â>y»—±$µ´j¹>S<c}äm*“°øËsØH&pÝ}·RðõFÊZôåÒN`tè»FŸä46”ÔÜB¥tÛòbä?ïL!iî:ŠÂ»pÆ¥×ÑŹ†é{œø òöâ[xóþOy·å‡,Þ£ÒáÜ[¸¥¿‹?žšÅžC³*̧ÜÌ‹GPúé¿yfiQàå2=Ù²Fß9™ûK¦³ÎÙ–Ñn§—ÍÂR›3 šÄgovà³ßbí?–Û.M Þ“ü”¯B÷T}ÙÏÓ¿íS>H¹œÇ^ú”º|ÁªÂXθöz4µlAÖKñÑŸs0çpx™Êã+p»‚04¿Š’|&£†d³rã ê^ÞÔ"V-ØŠaòí\Á^þ)»ÉÅ?Rë©Û\è}(ˆãnú™·fßÁôI_ñA×OY¼ÓIëpíeý(xÿ=ö¹8AõÒ°cqÎǪÛS>âã­òà 3y«ÛçüžF¿«ÿÉEW£+Í»w}Á»«¯fò‹3x¹Óg,Ë1Ó÷ê{¥[Ëä™8–³~Q«^w·M-AŒ{jAí¥ŽãÓ÷÷ã`b=QõÓœ¶àÉùƒUÅwqM{ØüaFÕäÎôeìÒ.dP+;?ý’AS_½¬Õ&¶Ž3¨ºRƒ»>C›á¸]!\ó›¼~×±N?<&}A‰¦ÿE­ÙüiZuÝjÇN­·›`ÆÅ-¯•¡ ª ‚jÛnÎØuØßñ3›B!„Bü™É àø5x½ iôèÞ½ÁŸø–q úð{í÷gŒÈ5¼È›o¿Í“¯¥õ¶¹ÌÝaGó°röÏõ»›Þx•É·œBÆ’ 5þì+ZÇ’’Ó¸ç¹×ycòµ$mÿ’OWãgEºÙ·ð]ædÂõO¿Â›o¼Ê3÷]AߨÀßÐÙ¤î×ѱW"UßßöQº{9 g~‡|À‡ŸÌ⻕é”WMÿ%¼]o’½ilÍ;fÓ7„øŸåÝ÷>1‡ü~·ñÂûÓxfB?²ß¼–kŸ[FQ¯{xúÚNõýóîûœîÿ5æÜñô³L~p,§V,dò-ÿfQžÔ–>9–»ÞK!úÜ1yÊ\’¸‡é^É V ºÈÎ ì?˜Þ­MÁ-QéÍdÖ#ù:­×Oy›WCøòÈ‚ÜcðeBæÞÿ0ßéGpÛSOðÏ3à÷îàš©k¨h,Ìyz÷3ë®ñLZPFß›ždâgÁÜ™¼¢¼n|ÜSlN½4Kuu"lW8Ø=[—1åí‡9-º¡ *…«¾áÿÙ»ï訪µãß)éHBBI¨ŠT¥JA,W¤*^Q@Þ«vQA¸¢`¹6TAED¤¢ "½ÄP¡×„@ ©“6åœ÷$ „߇•5dfŸ]ž3s’•çì½7ÄMç·gúÎ8¡Àý%¾çÎ͹:¡Ýr¹ÄŒ¹>o­À¯í£ ù"}®³³ôGxt\Üiö½ÿgœ‹1Ÿ³÷¸kûõ俳qe÷§>¸ 5·ÀÀW—œz…o"3Ÿ¸—g¿:@íÏ3ê¿ÿ¡u£}†<çðsqây=‹Ù`¥¹î™Î3¿œ§Ï~‰ŸãÒôõŸ:?góÞÈßÍÂ59À~VnÎÄŒÌÍ,Ù x6²`ëé~ï>‹÷D©~Ö”æçci®¡gê<^»Jý3¿¤Ÿß%Äü¼Ÿ,åsgµMÌÛZd„%½‹r)®‹”ø³ò,œ“ÏÔY¼·ÏæÚ\¶¿³‰ˆˆˆˆˆ\Â,åË—7ƒ‚‚.t?. öÜ»ðñëź½-ˆ^Sl™ˆˆ&OÚÉâOëh¿ùîáÅÅê¨Çm]®&ùçYĤž&!àÉ ÷¶Çoå îÍ;?û*Êe-''‡¢×9‹ÅBXXV«, ‡ƒ¸¸¸sÒ^bbâ9©§,ó¹ò1fÎêÁŠÞ·ózl)§¹”’5 5£üHß·ŸôcSQ´·„B^£Ãý38qÛ;)Ùùüù-'ýÎ&"""""rñ‰ŒŒ,±Œ–€>^3OoŒ^DûTëc¥²rÅ~ OÕË>º†s+ f"¨„Œ®ÅÌbÓ¼dg*ù+"Ÿ=ª;cgöbc¿N¼°ÊYødàU´­ëCÊo;ÉÔEDDD.8ýÎ&"""""rþ\æ)ÊÒ1MÃ0ÀÈ$Ğ‚ñ%A¶g5›Í†ÅrË–žœ 2K(cºd”THD¤”\{äëµ}yqôöŒžLŒ³2mú¦ ~g¤âLjnâI¡þÁdºÝø\èî–ŠÅ/’ë»´ÃgÅ íÏÇć°:-hݤ6UÊùbu'°`ê/ÄûÔ¡Ó=×:6¦x.t·EDDDDDDDDDDDD¤JŸÄCYЯÃÍ´iw#í:´?éqá7&y®ÒÔh'¼Ygzß݆«*ø‚™GêöÅ|ýC6]Ÿ¿•=ïŽdú>÷±Ò¶Ê·1ôÅüùÆÖ^ó,¯ÜĪ^cÊÖ\ÌÂT¾m(ÏÖý‘—ßß@^iÚoÚ–ÚÎ5LÏÇÄJp½[¹«¹‹˜ß¦3?)ïÑ¢;Y¹©]Ú^ÍŽ™ëÉ0J5ù§(|Lâ³Ý˜¦Éæ¸ÍÅ– '³ g)ÀÖЖôy°Ù?|ÀËkR0DUôr0%‡åñ]¸½E$³÷í£0l£bÓ–TH^ÉÚ/`bxƒhÕûNV½>]ùæ™È· ëúsà½8MÀN£fHX2ÍI'6Èܾ‘Ôf-h¾‰åÉš,""""""""""""r±Qø ¦Á¡ ¨S¯î)Ëe¹\äæ—Z[På̓ü±n?™y&äí#+ÀÊæeûèvWK¢~ÜÇ^`¯HÓaZ¶žÃ^¨älÚ wp§hFÏÞG©&a»‚H[2K“ “½VGQþ9ì­x÷¶"Øæ"uçŸ,Y½‹,/˜y‰ìÎàšå°%§ý5;XDDDDDDDDDDDDD. Ö ÝKŠ)Y.LÓdÓæÍÅ~%%'“ãq’Wйîä ¬Ï¨E×^7S/ÜK‘†²¶,cO@cZFú`hʵ¡‰¬ØpøHâÕ‚í¿OY†å¦Þtˆ:Ó=‡-ø…„á››Bæ‘U¦­þåð·‡eÝÆüï¾bòôe¤U»‰[–/|£˜ùNsT±œî¹)|¼xIsÆ<Í?Ã4Èug‘ˉK(õ—Ùï~ļÆ<øÊ[Œ|²;­«`Ììm,ÛåO£–Qøb§b³k IXNlú_›ïZí6 öþÌ·ÑÜÚ»-mg2 >þ>àÉÃ}4Wm±€;ž˜ 8=&Fn"qÛ„ÔŒÀO¾‹¯6Ë©k‘ C9Ï€áõy؉i–§îi–€Î÷ì"'³ZéêÌÞÁßüÅ?T¦ÑmðàGáµX•îdû²øöhIÔÜ6/Ïþ›É4N¨ÀÌcÇœ©¬{©/½®‹eš÷ħæõxÁæ{ìM`䤑k¹‚  ¸LÀ‚ÕnÃKaŽØ‚ÍÇ^7ÆYl9,"""""""""""""ç—ÀgÀãÍÇ›“&lÞ´¹Ø2x=¹¸óòϨn#ÿëžMãëpMeV¥»sÛí=¸öê<êïãç¸LŠKïš9[˜=m /õîA£¥G“µ%¶HAFÞÀpvHwáÜC\js®m]›ƒ‹w’X“ÆuH‰I)Ü_ØâC¹P?òÓœxÎht"""""""""""""òOÐÐgÀëuAAaêÓrŠ˜n<®ë³Wh@£Ú•)çgÃêã j“ë©ã›ÌÎÔÂ6ÌÜÝ,ßæK‹Ûo ÜÞelË>Uj× kãt~ØSƒ;ÛGQÚÝ€Ýi{H±T¤fè‘ûŒl¶þö[}›soß~ôíÞŠ  Y¸ÝY˜xö V˜‡C{3”¹iððš¹ØÜn0Mê׫wê‚Æ^¼îœë³]Aû>}©ê˜ä%oaÙÄÏX’â=R"=Ë·`6kÂîYÛqžnj¯‘Áši³¸î•û¨]Êñ˜¹ñlÜ׆v «O`äÆóóTbN*m!°ú5D¹w0ïPÉÉm‘KÅ¢­EDDDDDDDDDDäÒg)_¾¼t¡ûqI°çÞ…_/ÖímAôº“S¤P¸ôäI;Yüií7ÿÃ=>žÞ½ˆ÷©öøMeåŠýžª—Dt çVÌ8DP ]‹™Å¦y3ÈÎTòWDDDDDDDDDDDDäbu ¤(/<Ó41 ŒLBì),_Òd{Vãñx°ÙlýÒ²žœ 2K(cºd”THDDDDDDDDDDDDD.(%€KÁb±`³Ù 8šƒD—î Ø^ùY/tDDDDDDDDDDDDDDäÜPXDDDDDDDDDDDDD¤Œ¸,ÀµjÕ¢ÿ§|) Êô&µ~öF„Ûo!ÔUoº/¡®êÅ>Fù?…Ë’KJÞø Ýe‘³V¦g‡ÛoaÐCOóÌëH²®àÅ·ŸôxȺ‚qo¯¯×‹×{´™Û7’Z¾! ÃËôý "gÁJåÓØ¸r -/t_|©qçv©ÿ…n+¨﬎eZÊçð‡ÞYŒ/ ¯-‹efŸj…×ò¿9Êôßœ ÓàPŠÔ©W÷”å²\.róK…%˜†Ýÿ:ð«û<£nIbÉø±,‹z‚‘·máÍ×ç‘Ö‘çÕdÅ¢šµ¬Exˆ™ëg3c[ni@Åòå±%/ã› ?—mVÊÕ»û{ÞLƒpr¢™=y+ºŠÌ¸µÖò¿·&¶> {ÝIüOðÙŽæ<óxE~™O‡ž7Q=é^ù_4–F]xðîk©áÀǓƶ?¾eÒO[É6 —YnÝõ>îhU‹›—¬­3yüòŠÓQŸO÷¥Úêùð+‡=Aø”—ùxs>Á-‡0¬Ý&Õ¡YÍÊ9LÍÄŸ¶ã4-øEÝH¯;Q·¼‡_á98ôo¿9›øÓL[¶‡]A¤-™¥ÉG:aÇÏÀ•·÷á ›Ov»Ö-gÕÖø3/‘Ý\S£¶ä4¼§?s"rAøRý_10p/ßÎÚIþy½I¦„¶<ÙìZCVJ)—z8mŠˆˆˆˆˆˆˆˆˆˆ\ e:Œ)Y.LÓdÓæÍʼnˆˆ Çã /¿„M€Íl6ÿð¿\5”k—áÍÅiXŽ:¾˜µÜ5\ï÷6o¿> O…¶ v?ÿ©<“1ï¼ÆA*Óñ¹çé~S4£æ&b„¶ä¡GÛ=u4O¯Ë¥úCøO¿ÛØÿÆ$K˜zI‹žÂ¤êW18ê{F¾¿<ÀV¬¡-è|í|3úyö; p™öƒÛXòõïŒß›…Ï•÷ðü“=¹iÍ(æ&Ú¸âžt¯¹†Ï_ûˆmÙT¬àå°¡pº´½"7þû!îúŠ·ì§À^ó„ Xð¯væ½Á“²±EÝÎóÏöäÆ˜×ù9%ŒëìLå5o3ì·$-ÿ;íãý1s8pÚå±-ø…„á››@æÑ1{’X>m2«½ù¸L?B¯hE§öwrCÎw,Œ/3ŸÃi.‚*–ÃŽÀr~9NÇµ‚8>øð…î…ˆˆˆˆˆˆˆˆˆˆÈ?¢L/íÅKšë0æiþ¦A®;‹\ ÎM£F211 ˜àÍÜËîLƒ+×rÈm‚û0»÷çá¨\VÊÕ¿+²W²`} .o{V®$¥B® ·•ª)‹™ÉúŸ–°#-——p'obÞ ܦAn|,»s wØÀ·*×5 dÇO ˆK-ÀSAbbö±ä©é±R«ón·Îçãï6’uŠUŸì,ßž¸Sv°//˜Èòv°‡Q#4½;ã6 ²öíÂr¾%Žðäá.2ƒÎpåãòFé;£ùó/QµBܱ`âÉ÷`ñõÃf)¾V‘‹›•à†=>éVnˆ%vý2æŽÂ-‘>…/µáý˜|sW…"é Zÿ/šSî!âÈ“VG}z¼ö?¯ÜÀ†•ó˜üú4*w‡Â^‘ë¾Ï´_Wû'¿ÏÇÓ·VÅï4Ÿkp}º¾üsÅËš%³ùxHªéžÏ•1wÝômÕ‰!NcášXb~ŸÆ{ZQÁØkÐwÖJ>¾ÁŽ¥ÙÛ,Ý8•{+ÿãÆâWƒ;†N`βõ¬_:›O_¼›Ö}¦±î—'©sôúa ¢î½ÃùâÇ%¬eõ/_ðR—:YJÙV` Æ¬Üø×ÐþxéuL¾»>í‡|Æü˜Xb7®`ÎhzôØÓœ£S´YRÜÎ\ ïŸÊÜôäX¦ÿCìú¥Ìô_zÔwg†/YÇ—jqãóß±jûÒçôñ<Öt eJC¹Êô `Ãë!ó°Ó,OÝÓ,ïÙENfµsÔh>ÙÇÖ50LWî_K:^‹Õ‚+AØÃ;ñì›7y݆%í¾V(ͼVo6É΢ål”¯×»;6¥z¸ ?*YÙ` "Ì¿€¤lÅ­TêÕ‘û"}È]“JÎifìùYäK›˜€Åx³;ÕŸëêTÄwïAÊ]Y‡àÌ=¤žféçcÃðxÁæ{š7£‹ÅÄë>Úw 6xÝZvUγó1ó×Öž^¡ÝyL3žƒA¹»o_Þy;…»ú|ÍþÒTâW›‡'LepÃCüñÅ›|vÀA³îOòÎ]~àÜ}´!ÚšÎwXXýÕG¼²ÕMÍ[úòÈÿfPûåÎ<>ûàÉWk8ÞüŠ­ö2sìkŒK äŠÖwóPßÿ1&þ6ž~°°œ½6MÞªÉ|>êͺ3àñ |ñ÷ŽZË÷{5z*ÃÞæþg°ûp1w•Ø*s×»Óu}2óÆâ³”0Ú<8Œ*ú`Ï\v¤P Nfêc5Ø2c#?˦ÊM}0r µ|îá±iJ×ÖIì\õð{¼ò3Ÿ>÷95ïæ©!ó^^,^XANèéÎÑÔ“ÛL£Ó§Û™®VPâûĈ ãèïy§c6 ƿɗ þ4íñ¯|[Û]ómJá8«õx“QÕsYüí<Ö¦ù–Ï<%Æ<O)b˜­ë³ˆˆˆˆˆˆˆˆˆÈQ¦Ào>Þœ0aó¦S/íõäâÎË/Uçîïٹ鹸.å1¿“rÖ1¶7áÁ~·àšöoF§àö­Ë#ÿ}äHs¹d¸| ²'ïƒi¤/ãøõ©Þôhú×fQšÊ1ÞTV|ý3×>÷#Û¤’¾“YŸÏç@‰ `ƒ‚Œ,¼á8ìî‹%jDxH>˜F®×‡Z×rmÅv¯Ê(L X|(êG~š“Ó®.-r‘ò­~ÍÉL1Œc €9,ّΓ7Y (Ý8šõçц.–>ÿƒç¥`3ç­ÃóÓçÜ{d欽ÚÝÌ‹¿¤bsÿØKð/oÓöHk…›Ô·Iß¼ù}ÊŒÈÖ\]Üç¼`_<ùÏMÇcõ#¬fnîv?7GqÂ5ÏŪ¯~/Lþ6Nìw3H°Öç¦+‹ÙSÝbÅf³û²ZíD4oCå‚•LY–zl Æá|·ú¯ ø×¾™F¾‰Ì›µ¥0 `¤±úûä†6¡Qų¿)}Ù¯ì8v¤lL‹‹å,ÎQ©ãVz§ïƒ•°&7RÍ»†©‹“‹ÄoƒÚ·¥o‘LJŸÁÚÌÂ¥‰ç™Äüt1‘ £LÏöš¹ØÜn0Mê׫wê‚Æ^¼îœ’+4lþy9íûâ­–É,þðMæÿþi«˜ø©ƒž=ñÆ@IëfòɤœÇ„”èŸYÛª7/¾s3{çþ±ë‹©/c-³6§ÏÀ1´öf°gùÏü¶§UÌ<¶ÿ0Ž™Ýïç¡qXL2b§òþç©Ev?6È\÷S› åþ®c÷„g0 î¬L:õãµfGžÊgñ¤ñÌØtúÙÄfn<÷µ¡]Ã*D'ÅS»å³ö±üíV¿†(÷æ*EÒ^äor» §±ûøœõF®'1’æÙí<öÐãµ œ»1u워ÿ=þ”;’ÿ•S³™H?n–½‡ÌÇJû‡c52Hrýš¤%“ÃÕ„Ùà¤O§/‘þÃзsmý*ø§ïaƽœ´H‚“CiÇ=ñ¤áOXy_,?ý?°åN¸ #ßžöoçCvYÇu“‘ä„Ú…ßÙËUÄA$}¿¡ïII$,¨”S¦‹‘•”}ÊY¹%ž£“în)mÜJïô}HÂQ)œ;8|\g ò³ÒÉð?2ÎCYÇÆYšxžIÌOC¹0ÊtØ0<ØÜ.À–¸-Å–‰ˆˆÀbz0ÜîRDÃÀ÷=£Ÿùþ¯§ö¼Ãè#ÿO^ÀkCüõš;YÆ9ÞÅî)Cy¦H}Ù;0aT‘cNÕrz “FÆ0éØ3o Àp²uö» ]ôÉÇþgæ'°ô«1,ýê„Ê£ßá©£c ‹uŸ¿plyÏi/=}¬Xvt‘±¸vñõ‹ÏþÍ“í™ðÊ8¶d¸ÁHõŽO3ä_MY·˜´Ó®']@ÂêhR»´âšðƒÄ¤žf^¯oš]Âþå IÖô_ùäææbš&!!!ç°Vƒì-³yë‰Ù¼m/GµF7ѹï`ú¿;–‚.ݰ˜C,>8ÊûI{q¦ä@ùª„úPdUw;å£Êù¿I~†ÃB¥`+K[ð 'ˆ\ÒsONÝÙkÜÇ{ïõ¥Üœ7xú…ŸXµ;¯½}§·£Ïq%ƒ©æü•á´•"„vg»OšýŸû.ö˜ˆ¥°o®Ãñxÿ• Á•(ïe½í”‹økße¯3|ö1¹ÿæ%Ÿp!1Ýdpg™œ7O·FA çhçñ¥K·3qº>ÜÇœ´\¬P¿¼#‡Xü¨|MSªçm!&þÈ0½Æ±óQšxzCJó£w#œ6†""""""""""r!”í% Í|ððÆèEÌ››Zìפ‰[X±l†'÷Bw÷f%°r$ù)¤:$~lA„Wô§ õ0ù¥Èέ,˜ñ;J8 3‹Móf°hoÞ9ÜYäÔ *¹`©Y©x×§,Y2žU´bz²Ø¿vãÞúŠT§I¤/`bšƒ]¤­ZÓ¥ÑÑï\$þ¹ž,ÇÍü»]Åce,Ž&ôüWå#ß™8·-e7õéug-|6o«Â-´Àzp5‹¹3ÿZkj³“ï>™ÆòÝ™xKPuêFœ¸¦¯­ût ÊÑÉ ×ô¼—êlcÉ®“?ÈFn";¶ÄG\Üv&99´v-i~×qßõþgXz¶ö;v\Þî%lñV¡YT.ûvíb×®]ìÚ•€¥Í`F ½‹J–óq%(Í9:^éãv®ú`#uC4I>-èyCÄ_ñ ¹‘¡>ãÕNÅÞÓTšx^˜˜‹ˆˆˆˆˆˆˆˆˆÈ¹R&g›¦‰a`dbOaÁø’Žˆ Û³ǃÍf;å»r*^R—Çü=<êv,^È'eëB>›Gn)sžœ 2K(cºd”THä:—K?2Hß´ŠC¡CxuìH"¿&5°6×ÝÝ›Úy«˜¸=\Ù°:<6‚Ai‰Î«F‡¾ýièô[°9gÝ>½ƒ!£¿áƒº_±(1€&ÝåN{þ±U=ñ³ùpÞü?èK>®ðó¶Ô¼õanšÏ²—§°½˜µ¦ ¬a/ƒéýä#$ÿ°†ŒÆÜýh_:”[Ý–4ŠÚÁ†#eí×gòû5™¼è ަÝèwwE’¦¿Äü¤Â˜^KÔõ´oÏò5q$Ÿ°j{Þ¦/ùtÝ=¼ðæ—Œ®ý5+R¸®×}ÔÏûë¢a$ÿÊß `âð©|ZçKæmÉ£róÛéÕ¹ ÉŸŒcÏ‘ È%µuÎÏǵ¹:¹ä¸Å¤Û>¤|ÍÇ+»3bÌ$Þºb2‹ühÜýqÚ[W3bæ^\\}r­¥ˆ§QPŠ˜ûÿøŠˆˆˆˆˆˆˆˆˆÈùT&À‹›ÍÁÑ$ºä`/›áøG9;™ÿÙ¨¿µ'²Èå½ç+r0tP7 댯7›„u³ñð{Ì=äö2åÙW¨1j÷ü6²xÚó<ëx™q­TâÚÅÄ~=q¾øwš›,ÙðÇ ß„w†)c¤±ð¥n Ü÷2ƒºþ‡ØHÝù'‡¼ÆG¿,vïV÷ž¯24’Qƒû1ºc?R¶­dÆû½èù?÷8Ãz­ä¾™)|?èu2º?N¿—¯$(m;ËÆ `ä'«È2rÙ6c&±Ã»3òÃ(^¼½sSN˜qìÞÇ”=É{ö<ô²ãøíó!Œhð>7.Àc¦“˜1÷ÑçÀ‹<ÓûQ†õrŸ¼‰…ï<Â[_ÅYù¸móstb›—·{?:×}Hdæ÷’;èöxžŽ¡n’7-`ô£o1〧ø$miâYª˜‹ˆˆˆˆˆˆˆˆˆÈÅÊR¾|yóÜ.o*"rqÉÉÉ9ng‹ÅBXXV«, ÁÁÁlÞ¼ùœ´—˜˜xNê¹Xù\ù3gõ`EïÛy=¶˜iÄ¥d ¨DÍ(?Ò÷í'Ý}ôYmÇ-á£×èpÿ NÜ‚VDDDDDDDDDDärYb™2½°ˆÈßåt:q:ºe’=ª;cg~ËóÍ=xmëú»“L%EDDDDDDDDDDÎØe‘®U«ýû8壈ˆüó\{äëµÜ9z nkEó:óÄ{Ò3bS§måì狈ˆˆˆˆˆˆˆˆˆ\¾Êô¦·~öF„Ûo!ÔUoº/¡®êÅ>Fù?…Ë’KJÞø Ýe¹È8Ž’ ÉÙñìç»!ýñ}á9ú¼6ÇméìÛ´‚ú¿É;]ºw"""""""""""—¤2½p”ÿS zèiª¶YË”y_ðPçG˜4ûó㿜ý9ZeÚwðõª¨ Ýe9´°ˆˆˆˆˆˆˆˆˆˆˆ”—ýÀ¦ ~g¤âLjnâI¡þÁdºÝ\èÞ^¿Hn¸¯7í«ûc)ú‚o$×÷îOÿ»¯Àÿ¤ƒ©uËCôø¢|[ïy»®._¶ßP"""""""""""""¹2½´a¡,è×áfÚ´»€vÚŸô¸ð“¼ËrµQ;áMÛRÛ¹†éñù˜GŸ¶øS­u[j¸ ðžtŒ• Ú7p]D®£/z3ؼb' ï¸Ú{æ±=Ç<é(‘K•ÛíÀÇÇç÷DDDDDDDDDDDD¤de:lšŸíÆ4M6Ç¿´kxx8™Q8/ǰo×õçÀ{qþ•ý% ÆõÜXiÑ;£h[íøC¬åêÒ®U [W%P·Mà±ç=©qÄåt§ñUåÙ¹>ã„Èù•››‹iš„„„\讈ˆˆˆˆˆˆˆˆˆˆˆ”¨L'€ ÓàPŠÔ©W÷”å²\.róK…5ŒŸÆÍqo2jn"[enúwºg0âÍ?H5|¨~ï0EÍdħ)\Û»íêE`!çÀæ|9•å©ÜõÒÓ\õëHÞ[Q˜$µ7ç?¯v!yìH¾?PÖÝäî–ÕpxÓØºð[&ÏÛJ¶Aá²Ëí{Ò³c¢‚ çÀ:æOÆ¢½¹˜€=¼)wß×™ëëVÀ×Èe߯cù`n<§ËkÛî Ò–ÌÒä‚¿†t%7^ÂöùKIªzü¶¶k†eÝ6e]M½ã‚í$~_×^Ià†Œ" e‘K[```É…DDDDDDDDDDDD.e:Œ)Y.LÓdÓæâgGDDãq—_Â&ÀF;7§Ñ¥^u‚~J$;´>WûÄ“ИÚÁ‹HÍ.Ï•u‚H^¾§Ë;µ?òñÔí$¹*pÝc/ЭËÖßLÌŸ´kÝ€r«VaXpÔ¹Žš¹ë™“5:?F·¨U|ôÒ;Ä´ ï3pâùdm6AzóX'æ~ð<ËM*µù7ƒö&íµÏÙW…ŽúÐdï×¼õÜÒ|‰°¥á>í€,ø…„á››@æÑ‚Ö`êÜÔŠ€MóX—êÁQµè®Àvµ§‘ëOfoÉ·`9nÓ`/ÙÉ™˜õ+l‹Ãé)éäˆ\´ôó°U£Ï÷³é:· ݾHæšóù,ê5né·€Œo ñ¥Æs‡ïïLœ¹“ü³îĹªçcupU§‡éÿÜpM+ä§lãÏß~à‹ Ó‰I>z¡÷£þ3s™öPå“ëpg‘û_¿ÿß®M¿ÌWrð¥b‹n xíÖ$<ÐKVâ.Öÿ:™>û‰¸Ì“7H¹X”é°/i®Ã˜„`R|öÁ0 rÝYäR®„Ú<ŽÛA^ÛTñ‹ÆrUÊíYÈ|GšÖ "zWUVÈ vG†áa×ú­GŽ;ÌÖÉÐ&”@‹‡äµ«IëКåV±"3ˆ:×Õ$gíl-UéÖÌÁîï³ÇéÅt®cñönôoUÿµ»¹âúúx×eõ| à`ô/¬¹ýIn¼2ˆ¸äf´ˆ8Èü×q(Ï€¼C(1:|ü}À“‡Û°R¾A;š[×1'6/ÖãJÛ#šÒ¾~6+gíÀiÿÆ1]xmøX‹yQDʾ€š\•ǶM)xl¡ÔkÌ¡…»)ݶà¾Tÿ×c ÜË·³v’Ö«œ«z.!>QÜõÚ$^¿£»–ñË׳ؕ@õ×Ò¾×P&v½±}ÿO7:‹ü$Ü÷c&³ýh†ÜæG¹Ê×pÛƒ]yᳪÜ5€é‰—ëÖòUñqFàMYGôá[iÝ «c¯äºšÙÄÌ<ˆÛÖ€‡/Wõ}wŽL,²Ú}0vàcó§|°¼]¹›sdä’–k£v¨?6g(ÞLÒóÎl¾–×ã›oá›ÀJ½FUrT¢Gß6X¬V,܃ÿ>ÈÆÄ TpørsïšÜ `µbî|¨{çOeA¼ ‹Í«áÆ«¿‰‹\–|«4¦¶O_ìÏÿê\[µ€•°ü=¾Ôþ÷{¼~GëÆ?ÊOVsøXÞÖÂÛWuåÕñ¯òø‡/°éîa,Ï<ò’;%³¦³ÌY´. 360ÿƒ›éÒ"”³S.ÏYÀ¶*Ü1¸•öBƲåØ4ò©Lýõ9fLêÍ7}Î#?¥^žñ‘‹^™ž«éñæãÎÉ6oÚ\ìWrR2^O.î¼R,šφƒA\U»>Í+§°f“Œ±äÖhF½zÕ±ìÛÈ!—Uï@ï‰Ì|o4£ß|‡Ï~?ȱ¿Ç{³~U*UZÖ¥Rí–TÏü“˜$xsHËÉcý¸¡<õÔS<õÔS ~ò žzÿO²¼ùddy Äv´k a9ùy™äÛ‚ ñ?“ÓiP‘…70‡ð¦³nÖ7L™2•©S§2uê4~ZŸ…7e3¦ÿÆú%Ó˜2eʑצòýüíäºö³pú,ItV‚±æ&G+cJât:q:%<#V‚ö`ø¤_X¹!–Øõ˘;n·DYnÚ§27=9–é¿Ç»~)s'ý—õ…mÿ& _²Ž/;ÕâÆç¿cÕ†9ݘí5è;k%ß`ÇÒìm–nœÊ½­XƒëÓõå/˜³(†ØØXÖ,™ÍÇC:Påh˜NŠÃ/|:ïäzÊrì-Á-з+Gð̸¢É_“œ3þô’Ã:óä‘ý )–IÞá$r0ÈÏsŸbÝŒ²¿bÙƒ©TŒ¤*8>>ÎØ©|4yëòmXŠ;öH¾îÖšî#&1oåÖ.žÁš^éF2‡¥ëcÙ°d¯ÝS?üh4t!±KFÒ¬ÈN–rmy/:–¹kSü"ôeð<”ò¸’¯ gzJ9.‘KH™N{½.((ük¸åÿ0Ýx \%Whæ°gãaÂZ\GTÆzvfxDZÍ{­›sp]<ùXñ öƒüL² L¬ÁWp]ë*E¦Z{9¼a%)•ÚpÃõÕȈ^K²p%°bmõÿÕza~Xm¾WªE­0,ä±{É&,;qme?,_*6»•f¾ÛY¶+WòZbW¥ãm¨èoÃX¨*A%ž\wÚR,©j \¹9Ç’]N§“—éÍ'Ç™GA~îñ¯å¹1My99ä{K•k–#/!§¦D‰œ–5¬=#&¼Bç  Ló #>ú•´&}yçížT·Ö:Žþž±ý®`ߌ7yqøg¬¶ßÆ+ߎ£gµ£W;Õz¼É¨[òYüítÖ¦ùÒ`àd¾õ.‚ÖMbäÐÿ2ySEzŽœÂûÝ«¹”¢LaÝW=ü/Ôß̧Ïý‡gß[_ûÇyï…Ö“ qíø„ûo»‡A?¦cl}›ûï¸î#ÖâÊZÀ3]n§Ó³ËÉ;ݘ9À÷{0b­[Þäþ b~zÞüŠ]˱nòk+¾^Dr±×^“ܸéÌŒ‡úšp,fõ¥\H(¡¡G¾Â+S³Q'>Û…ˆƒ3˜°:«ØpY‹_±\‰D¯ËÄÚâU>x©mªùyêÞÇì·FðÁïIœú^';× M7cï>ÿã7EÐþñ/™3ëUêožÀ°!#ø.©‡ãÖ7;~YJzèõtª},‰£QgZìcî‚}ÅΠ/»ç¡„ã¬á¥¾.”þXÏ`\"""""""""—†2ý7-¯™‹ÍíÓ¤~½z§.hìÅëÎ)Mdl߆§K§=ÎZê뙜ƒyF)ÆUŠ…bDDDDDDDDD.e:lln`aKÜ–bËDDD`1=nw©¢áN˜Åð'fy¦€_¿È_)“´Œ/F.;î¸ß–íXKßÄÒê6]IDO{èiÅ4læ±oÑ—Œ^tŠ~¥Ä0í1wè©°:šÔ.­¸&ü 1©g™ºµR³e#ì[gSº¦ÿДĕÖ‚nt9Ь/¿ç—eëÙ½è^^`¥r“©æ]û‹“ÝÄa^À ö«ñsgá%€Ã¿Ï`í‘Dí›iä›È´Y[ “F«¿_AnÇ&4ªhg[•’ˬK.|:}Ù¯ì8–ðp“‘”y¥Ë©fïùFÒ¨*$|wþTk\çöd¥s1 vðÅ“þßêGXõú4iÓ™›£8©EãP’2{8ÅrÍ1 ,EëØÂGC>`ÓÑv,>”¯Õ–‡wcø«w3p&‹™âZæâg±b³þõ‚i†‰‘Ë”º3uD%ê6¿Ž6×_OÛ0´k?†&-àÕG†òþ‚b*,”½‘ÃGâçu&ãœË¶»!Á›•ŒKaŸr63wUwÞrQ㶳ǯ!¯w°oò¯ìwßÇKþ<wJqÜ\Îä”fìëöëö6¹t”é°×ÌÇÇSÀ£Qà>ÕÔTV®Øá©ZÆ£Q<ù•3TRöà´<¤üù#³²²(ÅBÚ"—=#ùgž}ÐÎcÿ÷=^›ÀÀ¹kSÇ¾Éøß“pT çý`äg¥“à_øLÖ¡¬c³Ýìå*â ’¾ßÇÐ÷¤ ²•ªÌQYIÙ§Yâ¶{ úöGž©wd‘Ü1‹Ù8æè‹“ˆî¼‡q]ºññÎÓ9ž‚“®A¾DvøCÜεõ«àŸ¾‡ öRPÌ¥¼hJR¦bI~òÒiÀÕQþ°»øÙ¢øT¢~U;$í&ÍMaêÏʦUËXVt{ë¥KÙdoÆÜ!÷Ò2l6³SNNª—­øA`Ë1,œpAG¾?<í~nµ‹¿O~>î¼$¶,›Å–e³øü­áÔhÛ—ÿ¾=€WF,eYßY$⾯ËsBRÞÄí:U1‡Ø¹1|Љ6•&’\ånnÞÇW¿îÇ}ª>þ÷Ò>ÅŽé­’;“뙜ƒÒK `¹t”É”§iš…³ŒLBì),_Òd{Vãñx°ÙlXN7ͪ òädùw*0]dg(õ+RzÙ[fóÖ³yÛ^Žjn¢sßÁôw,]îcNZ.V ¼wä‹•¯iJõ¼-ÄÄ>ezc ¯3|ö1¹ÿ測é&〠oHÉeŽnŽYÊ»B<‰Ì|6}’ £"ÿï—Xa¶áµ/ûs`h>ÞšEZ‚0O3æîŒßy|µö÷ñÞ{})7ç ž~á'VíÎÄk¯AßéíèsBŠÆ¡de(ö@ÁÎ_‰vÞK»n¢âò¹ÅîP¿+]kÀæobH3Ž$€‹åáðö}P‹JÁ6(&\Öâ—û.ö˜ˆÀÄux4ÂÜoï!æ‘<[dè¹ì[ô-¼Ÿ ×5'ÊoIy§ªùL˜d­ÿ‘µî·¹£uuv4º‘òû¾9¶üsq},À ÿ>Å©N‰ÇÉuáL”fì"""""""""—ë…îÀù`±X°ÙlØ‚£9h{®T_9Žÿb·Û/»ä¯ˆüÓ¬T¼ëS–,Ï¿*Z1=Yì_;‡qo}ÅNªÓ$ÒFê†h’|ZÐó†ˆcikÈ ð¯vŠ(öμÝKØâ­B³¨\öíÚÅ®]»Øµ+K›ÁŒz•,f©Êœ97™ö‘l‰À?u-kâv²ßYŽrF+×le×îÒ]–Æì{R­þÕZS›|÷É4–ïÎÄ X‚ªS7âï\£ËZìÁÌþ“ñ·á׿UÞ~¬lE_µX»+¯¾Û‡*é³xÿ§ƒ%ÎŒ5= üö+î׃²?#7‘[∋‹#.n ;“ò)ˆ_Åz§ƒýßñï7‹£>í;àà’ÎaNÐÌ\Çœ »õæv¡ì›ó+ñîSõÑEÄ%~Š‹{iŽ^Ùc&ñÖ“YœàGãîÓÞºš3÷ââê“kMþ•¾ÀÄáSù´Î—ÌÛ’Gåæ·Ó«s’?Çž|0 J.stiØ3ãCå†UàÀ·r_Õ†„;w°;ëØîDý•< IDAT£%Ž0½–¨ëiß:žÕÉkØË`z?ùÉ?¬!#¤1w?Ú—åÀV·%¢vs¸øÞ­gùš8’%êÊbì]ìœ8˜—®šÄ¨øåÖ¥ü²|»Òý©Ö 7wlLxþ:>|x «²JNb.'ù”'*Ô8qÛ²¿“™™+xÿ½Üðò0æÌ¾™ Ö³')Ÿð+huGWZG&2mØÜb÷H>kÆa¢çlÆöjOÚ³—±¿Æsн¹\ÎCq œýuátJ3v‘K‰À""ÿ0÷ž¯<ÈÁÐAÝ0¬3¾ÞlÖÍfÄÃï1÷Hdæ÷’;èöxžŽ¡n’7-`ô£o1〧ø‹é$fÌ}ô9ð"Ïô~”a½ä'obá;ðÖWq…«À–¦ÌÙ°R­~é[÷ã4}ˆª[ û¡…$É–<æ\¶Í˜IìðîŒü0Šoœ!C#5¸£;ö#eÛJf¼ß‹^‘Ïññs3¬×Jî[\gN¬§s‹,e\æbàNàÇçïaû¢¾ôë}'ûÜH ¥€´ý;ˆü2}:‡-™§Ø¬ö7q.ÜôèmD®žNâ IÎ2¿“¸Ù?íIºx€ÿ<Ú…[ûÜ@9¤`׺‰¼üÌ—ÌÍ¢t--ƒÔ•sÙB#êïïñ§NÿÂårŠ÷×gy](Á—ˆˆˆˆˆˆˆˆÈ¹f)_¾¼t¡ûq^ÕªU‹[oíȯ¿.(öñÓO?¹Ð]‘ó(''‡¢×9‹ÅBXXV«, ÁÁÁlÞ¼ùœ´—˜˜xNê‘ˈãþ÷û8®úünº~ºç43€EDDDDDDDDärYb™2=ØÏÞˆpû-„º*àM÷%ÔU½ØÇ(ÿ§pYrIÉ¡»,"""— å›uáºÀ½Lü5AÉ_ù[¬ºçS¸ý=ô4ϼވ$ë ^|«ñI‡¬+÷ÆÓtjüʅˆˆ\f¬¡¹»Ï þ;¼#A›¿eÞ~¥EDDDDDDDDäï)Ó3€Mü ÏH!Ä?˜ÔÜÄ“CýƒÉt» ðù{Y|©zó# ¸«!f ‹?Íô=®s3KœÅ/’ë»´ÃgÅ íÏÇR—ëÛ·¢N„?fî!¶¬øƒ•»³ÁQ‡N÷\CêüÙü™â¹ÐÝ9﬎t؇»gñê+?à-ù‘Ó)Ó `ÄCYЯÃÍ´iw#í:´?éqá7&y7Wëw·ÝV‹ý_dxlÖ¿»€£µMþý4ØÆØ—¾`[Áßì_1,µhÕ —51Içq¹I;áMÛRÛ¹†éñù˜¶0št¼Ê ˜2ç TiÉ·v¤QÚLÖgìdå¦Fti{5;f®'Ã8o¹(xâ¿åß×}{¡»!"""""""""eH™N›&Äg»1M“Íq›‹-NfAο™¶ø–£¼ÝÉ–ä< ÃËßË]Z iÞ“®5œä·‰°VB›w¥kÓߨp>À¾Uh\ןìÅi‚­ü•Ôv¤²v}9Ö³.µÍk‡“Fæö¤6kAÃðM,OÖ,`‘3Q¦À†ip(ŃêÔ«{ÊrY.¹ù%…ÂJ¹&3´·/3^ÿ„è m=—îÉgêg;øöÎ;<ŠêkÀïHHB ½H“*¢R¥( *Ý‚ ¢  ?D±`>¥ˆ "JSЀ ‘*BHh¡¥ÞÛöï@êfwf³@Xîë“'’¹{Ϲ§ÍÜ™{[?7ˆÆ4œ6›‡/ndናäÕêÄÑCy´e-œ y\Ûý-K‚b0xudèËÃx¬yM”YW8´q…¦qkºSåý/ ­ÎÑ¿¢è>¬z…=Rù`Æ´=Z@»~Ô¨î†úâV®ÙGŒÚXØçÖƒxaxÚøº`ȺJHÐ:þ<–„{×—˜4¬1®ª±|ú9Äü½„eGÒqoõ$/ŽêKoGòb³eM Á74¼é2l,Ï=Ò„ê*#yq'ØôÓo„¤š_«ÒÁ«)õTIJ*|…YåîM5m™cáF ™)jªÕ®ŽŠ4ôùñ\Îp¥]£ê¨’Ò+a @ @ @ Ò±ë ` œ¥Áh4ræ¬é7€}||ÈÕ¹“_àj±±¬ð@ÖwžÉèaí8ÿ§’aÏúqvý—œŠÎæär5¾‰\8‡ôàP§&Œ¥ãÕ_™ÿ~iŽÞø¨ÒЪêÐÿ—iý ߃֣xo¼?)1ß°?E¾ô|iÊ]K8Ü‹ ó½Rº·¤«róçDSàÒ‚3ßbäC§øæhxõÀÿÕ¤­ŸËÿN¥áÐè ÞœôÏ'ÏæãëXݰSý6ðùâ0ò¥gw^y­Ù¿Å{¡y4<·_Äõ/·’Üx0Ã;gñû§SËuÁ§¡/š KÓ³ œkzá”KæÍWŒŽ(ôZôÆ[ÇÑiõ(Q HMÓàæ[İ@ @ @ @ åÝîÀíDž4M*F3ÿŒò´Yä!a“]C6~çBÓ˜8q4M¢~gcx¶Éåž|;ÓÕç;·‡’¯C“•@\º¥o'º×Iäß=Qdèôdœ;BXn}º<àGêõKß‚ ÖNF‡…… ` I„„\%߯üXÎ%©Y§:*”ÔhÓƒF™GØu:Ñ@ÞÕCì8çB§GâT®!%Õ[?FÓì`vNF£ÏåJp0ɵ:ÒÎ[…>'‘,§FtêØ„Ê|’®\Åâü/ ]A—öÖ ¿Z ¥#*Eñ1*GF­ö¦è t(œœK#@ @ @ ¤`×À½ŽÌÔŒF#-[µ4ùSË»º r3¥Í6²#ÙsB_½Žï"Ûhú8e5Oªé3IÏ/==¬róÆMÕ€‘Ÿ,`áÂ…,œ;•Çk‚ªšÎ 2ö±46­ûô²³Êέÿå–.]ÊÒÅ_ðbó›S¸†² Š;a0J ¤šg5yiäµ¥#7½gOw¯~+q«åŽƒ÷@¦Ï[ÈÂ… ™ÿáê*”¸9)ÑÝØÍÒïöPÐٟϾœ‰ÿÍq—`=zTNEß§ËN$×É‹N7õ­p¤F-g Rsn.]8!Œ^‹¡Ý ‚{%uF<—®Õ̦jÀØM§øË¿¸Ò)à 'V  ¦ä‡BÊ|[7¾‰ pdûNzâD£Á˜ø\s\*8¹ÉH¾úˆðŒkdß‹ƒØËúµOªÑþ½@V¾P×ÎÌ>Áæ± ó}ŸSÖE`øQ¾ìbÎñmðýÒܯ¶Y¸ßtoI^[è£L.íùh_8[üÙ×’V÷}ܪŠH¬_ow/nw.-g{÷‰Ï Ês[lánäÅ»˜‹oW,/[sWenK̨ä˜VýÝO¶éL«©Y9ÜÞêš2cx›ôêüÀ[üþÛk4/ÿ—@ H¦Ê× •A§/@Ÿ› F8{¦â% õº<´ù’ÚTù>ƈGô„‡Ã£Ã{pté’M¼ kÌϤ@U›š.J((žÍ5䥓§fìŜ(5{ìL‹WzâçéʸÏÛó  PªP*`Ò¼/ ÿqëæÎâ/€u¶¼ÌõÔ@njF7/ª)!Kà€›§ ꌜ¢ý†KŸ—ž‡öÆ!¾œ»×¤LÙ—°~Ñ!¶6îÃk“&0æÆ,VœÍ£âyZêŒ,ôÕ¼qw€t ².s.£#;øu;ÐÙ7KÁé…Ë=+©îéLAš©> ‚ûׯtñËçü™dt*OZµñ áßËäZûPˆ.›èS'ÈJÖØ´›÷N4|úM&V»Êú¿.QPN.´|é-xgÑ´Ù‘ ß—‡%ýÚ'NÍ^`f¿ó|32¾¥?¬*>WUúq׸?m³jp¿éÞ’¼¶ÐG™6*ßéªÉ}·wr¶wŸøœ <·ÅîF^¼‹¹XÄr0är=ìÕÔfîÊÅ^ê«ûÈ6ЯG.;§&›\=óÞ¥ÌÞ&½ª/ýÁ/©ëø`Èv&lŒÛ$ «°ë `½^ê[yųE§–¤jÓëåÁxÇ÷ÿ(xúƒ·xùñ(ïO*—È´I§8‘Ú—ƒÚsé¯Ò”5©]£€I' IîÍ“ƒÚs=è ):¼êÖÆ!ù*W6ÌáÓ­ÅÏ 9Öš)/»±yáïœKÍ%Wk$·Äw¨ÌvÖ@VÔa.?;˜'Ú…ðGX:*¿GèßJCøòX4(ÈV£¬QOÇ0 tF2#suè“<Õåž¼Ac êÔu#ãjZïfÔ5Är=¥€üÔRÔ j:X~O›v…dEw{:“¨C&g÷¢zß¾¼øš u ŽìäTÊÍ4æäC/ §2İ@pŸâT·Ícùåz¸4¤K}5—ÂÐZÛ :’ï'Ž·eí %.Îcö´/œDûº2ÜÜéôêªïÄé#¸–ù¸ŒÏݵ§½…ï ‚{ ·w a{‚[[¨Fô$ÿ‡Sôçïçónÿ:(ÓŽ±rù!Ÿ˜Â—ß,æ›y1®w#\àèý£§ÏeñÒ¥, C3Ø™kñI>c^ á×”4i[ç[ã’u‰Ã­á§åËY¾zûÏ¥-ÿ\­a;ü´‰H¸Ÿ”Ü(ñh;’Y«wAÄéÃý0'ê9âX‡^ï|ËÆ½'ˆ8}ˆ Õ_0²µ{aÐvéȬƒ¡¬Ø„ÇgüÁ±°m¼ÙÌ”n´6‹_¶ätD!;~á£çÀ­ä³–ŽqiÏGûBY3¤5}¦ýÄÎD„eÛ’ <ì)/e(Ý[3röZþ #,x;kþï%ÚW¯øÁç6ÓÙÁÉMhàØ†Y»Ãˆ8öÜÝè·,˜ˆ•ýð°æ{ªuenpx‰åx*©_¸˜ÀÝ!DDüÇÞM?ð^ÿú8ËÑ£T]K׊úëÐÿ¿‚ùþ1p(üw†ù–lÛ‡g×…ðó“î(ÚÌbOØV^kÙÅ´}I”ù×áݰšíÁaœ:°‰%»öãLýq‡NGv0ÙÏ6*Ê å0§{·,>ÎoÏÔ*QÀ¸Ñ}áqÂ×=‹ÓþѦ™*ë–ôk {«‚þ®ôêÁ¸Þvÿ}“× å|®ìû1dáA"B–3¦©³´¾šê‡ð}ë}_δŸù/?§s‰I~Eõž,:AÐÄæ8Jщ¿5……±Pz´æùaÛþDDDpòྟֺ·†Óû–zŽ9™¥êþ~±µŠ>·$_ILµásó@ç œ¾ŒÍB‰&èÛ t“+[)0sì)!÷Øh<ÊÆ-‰c¨pnÄS3W°íðiNÚÂò‡Ð}l ¡;Þá“ËÚan²QLU¿:4ä•Í„­| ¯›M¸>4›ÃœXÚ³¨nu| ÿEìeFÛ›9Ï¢—×ï„Feÿ6•K+Ó¯’¶WŸ+âæŠì±¤ºš½IPèŸøwÈ´¥ü{2‚{Y4¡µn©¶¢v$Ä+‹>XAÛRíÖêúº*ØB¹66ñõÖÛà7f¿ófî±L]Gt’?VÆr‹öP ±Ü¬ˆQe}®ÜÐ’êA3òت¾’+«Ë©5îÛp ^ïÞè÷"A/alîåÚ·ÑÃå¯m!{fG]žæ¥Žîæ”-b×Àƒ´@ATd”ÉŸ”äF­¥wËt$ì]À{ŸüÁÅ|#`$ïüz>yïkö%é0f…ðõ´Ïù§ÄÒ™Úä.ü˜©“'3yò,Ú‡Ч‡³õ»Þ›<™É“ßaÆÜõ„e–åJ{mŸÌø…ó<á£OÚÅìió9šqëÜ|Î|û.Ÿl¼vóM9ÙçÿáÇ/¦3åw˜úá\ÖŠ)Z^Ä~‚ÕŸ¿Ëäw¦óõ®è0}q+æ¼ÏäÉ“™<ùÌþåÉz#9‘ðÕŒ)Lž<™wÞý˜¯×‡$éu<5±!ÇIñëF;o /œ;Õ¥s—š\?rŠ$ñú¯ÀŽQzõ!`Å' u cÝÜOøn7iýùzÁ(:J|µo_oʵMóøpÖO„8 â“õ?0ªÁ-?r ÁÈyÌy¢€ë7r*͉6×°á³gp ]Íç3¿`Í_F}¾ŽÅ#êß\îÁUÂ1…m·¿ˆZŸeùûo3}ÑQœûLbÑÝñº¯ssƯøO†úr1pßláz‹wøzJ« ×cÐ\ü‘=Ë”­éÎ-àŧždDÀ)4Y»øßsO2púÊ=ªcÅ÷TZÿJ/úÌÙȲ·:“µû;>ùh!Ûb›3ná& ©[bu)z´tŒ„13×ߺ‰l˜8’€SˆšÇ‹OOagj‰|cHe÷´á|t¨¢¿cü3ŒÓQξ2jH–¹ÝÔ¯nØÅ73>`ÙúLZŶ¿>£õÙ|:-€?`è¬OéojÖG’íK¡LÿÓ åÿ&Ég,Œ‘>μ~mao¦ä¹ËþîÖöi:êNqðš «|èûÉJæôŠa©ÿ4~¿¬–Ñ×߯œïKBÍŇH÷|”Í‹o)»·Jw×kíº†V²Ndbq,¼8o-ÏW'tÍlfÌü’•‡òé꿹CåŽEY,œcIfå¸p_Ùš)}¤×”g7¦ÚH3 šŽûšw›F²ö‹|±2·^“X8ãa o‘Y[nê¬t‘úÖŠ-ÆÃŠvUuxæ›@措MäosøtñvÒºÊw[V(£Ýå&[ʹE—ȱñ([õ¦…+€#u»t¤àÜæ1;8Óø±¶¸dgßUµ,ÿ.©ßÐŒ~e2—V²_¥Î·ÖçJr§sHY{4á·ÍÿíWX¶mOÉvku}]lÁD¿î»]~c¦ß©Î’ã©ëˆJ]ãÜl×|}!5Žc1–[ƒ•1ʤÏÉþj3ò`ƒúÊ Y-ëXf­qŸØ&ªºôê§àßñèì½öM+óz”-åÉ»ÀÞs®ôÔâÎï-ìû^ÚX€£NÍ—_íG­­h§’‚^Ç «oçÚ¸{rαkSn^V³8³}Ù™ù6Ü#D ¨z85|Œ‡Ü“Øð)K#ÔÀ6^Lç^J\UàÔdS¸süãáLß’ˆØ~8‰ú»æ3¼w7¶ãÛ,’ C8ši@Yk?ø?@âo/ã?÷tá~¹ï!Jñ7‹'½J»­„¹õbŠ…cBoöÑÝ}oŒYDDÀ)rÚ÷ä‡Öm¨¥:J¶„4Ü;¿Ákm5šñS·î÷²y{(º¿f˜É7QÀ¨Í"1އ껑zŠó1‰Ô\ EÜß„_Žå†‰¹ k¾§²úßtð ÞyÊ“K‹Ÿå­Ñhþ>@ì/ÿ0ë­Ñ´Øñ ç¤èQÂ1¹5,ÙÙæúëMàÚó IâúõDrJX¹‰1$äè0ªSˆ¹~ƒ,§Ú@iûrh4Ž eæÊ·L½‘zPE×b`Ïøì™É{KCÈ1±¬<¹ª;­¼ J.}“É©™ÛßdzLMQ²ÿ¸täIäûŒ¸zÜ~íÑß]hÒóAœ¯}ƒìù_UMº½ûß ÍeÕko±âláJ"ÊZúZ¦Œ¾_Yß—FþùíÍzž^}ñuÄ4¸óàи][ÍîëZ ‘¬9XŒ®ÔÕžåŸÿû˜Ï7Æ®$³ó8tṴ́V>8r£h,kò™¹sòý$Èl).XϾlMGv}4gY>µù6rœ s¿3yê’Â%ñö“Ðtßµl…—Ã1ò$ÈV6¶Ü¢TqëÁ‹¦“e;RÆ#ÛŠv5¼ÄäÇ•š>žw¤`‚ö]ÅcÇzVОÝå&GO›Ä£ìÜ¢æúÁc¤¿ú6t&ä¼;­{Ô!=< çv]éä«"â†/öE}zçóÀ¡¡ô¸YJ¿uGþ±‚\ZÙ~•ÞÎÁ:ŸË)3.w:‡”ò[“(qøŒS7¾¶ùoNleÕˆI<ñÓ86g–oGJ |¥™t,ÕGçøK´[ëëëª` eÛˆA}àéþ6ö y#ÏkäøSú:¢=ýåŽA šk*éqì–b¹5ûªÉñKË>'óòè¸^Éú*p£|Y¯ZбRv­qØ&€ªöc<áx€Ïcµö_ûº6”m[’äÑäOáÝðs %Úê½ÑÁýŠ]¾l4Ñëõè ™ÔtHfײtüœ_á&ʇl]:£QL=Þt¹d景>Ú22óŦö»G‚(µ/#>ŸÃ¤¡Ýh^Ë”ýKø8` çÕJ¼:>NýI~?P¼¿¸!uSúôÄcqqºw§n^l¹4ïK{§x¶ÿUXÀÒÙp”<ÏŽ´÷utÌ-ÒïæbÑ…Š–ŒÄlŒ % S¯?(”¨Tª¢¥Ò¿npÏù—Õ’‹d0æ„”h^9Nõh_bOÇ¡Á…|ɹp‰ “×”NV}OåôŸ€kËÇiJ냮P´X½þ{×ÄP¯;–X®GŠÍcyÌœ$Û‹\ŠíK» ™ã‡“zóKõ9IäWŸ/º@×g%‘ƒÂ„-I·}yý7ý·Ûæe°;WV§ÙƒµÈ»G®œ{= WZ½úËÆ6E™pˆ™EòÊék!Â÷mâûåb·‰Ï=Kб\üžè…Ÿ#àÞ–¡ºs-h7×µòbƒt$ø…ú"¿¼ó ïoŒA§tÆ«qGú‘¾~”³[kü·âsl!ó}hk¥°­Ý¤ÜKñËZ2’r eÚØRŒ©"…ÊŽ‡üvUø<Ôƒ:ê`ÖN)1>Gù#¤â§tì.7Ù$&X—[ò/î!´ .=:{£riFÏfZB×ýF¨¦=[WGéÑ–^M DîÕ!ª†¤˜þ²o¾õ#g¯`½Ÿß¿Ç²½‰¸×ö€œ‹¤ªK^(ÈJ§¸µîKVBVQáéPÝwêá¿áþå¾1/7•¤cn‘•˜-ù†nµ‡çòïŠA¸Ýüwj ?3\!3ŽôRO'êÈŒË0݈C#^Y¿•ÿµºYÏ=@øÜ[®æøÐ+üðÜp¾¿TrpÕ–Ç .3¡o¹ö«lŒ’OI_–+Oi$Ô¥Þn—&«!Ú|Ÿ*SkõÜm¥7Ýyüõ54÷]í+Ó$È£ÏI!OÕo7%dÛî¡ @p f<àŽc ;j ó'oaCu´ïÅPÿ©¼ñÍ·¨ŸͶ´<¨V‹Ž@þÍSÎÔi׉†ùQœˆ)ü“Qo(*ôõ9ép5oLc{R™‚Ш%#Nƒ¾¦åcŠ®Àd¬†Pñ /\‰£Àˆ&5åˆ\¨QOG(~äÑ~5L7¢‹ç¯©Ïò_§wX1§ËÆ}ÄQcf¯zƒ¸™oðý¹,ÒbËÞÞÒ““,ó{€Êéÿ—2r0(kRÛC E½gOoÜÈ#=¯Dù.Efޱ<®ù¸t²`/­»,/¶/#rd¶=ù–l?ÞÄi GÜk8—»XÒ?LýMŠÏXãå±/¿y‚ÌãtœøtŸoÑüÀ£ÌŸô>ýwLf{’AÚX”Bø¾-|¿|ì¾Bù—+ŒdÞÊ)ížêÞ‹í§Æ]މ› IDATµßØ}] (¬ øíMé-ƂӚ¡,ZäOõm_òÞsìr&z‡FøoìÍØr"Xa¯žc‹xhI>û³µ2Ú6§TJ¶²±¥ÄÇ&rH)*²áJއüsôä§çGíÂñ)rbªû”ß•µûÊMFÛ &X™[ œÞu‡I}éòP|“q&%EpÕû=J×ÔŽ¸ÇlçX’¹q³¼VœK+×/Ȳß;›C,ú-Ôñr†·ïU5ü¨‰šËÙÚ¢såÕÀZY>X²²ì¶2T [¨LŸ*a+%Sû[¶%+1£3ëìÁ\,Á²K¥óœåÚO^Ž®´žÊù²%yÌ5&áZ2ÖYÍ÷im%j¢žÛ¡m*½ºò”gK/«Õ}VûʬuÅJ¤à6c—K@ AÕE‰ï3Ë9xpOû*1겸~j?Ì_Ë%Ò±žŠ”°ã$:veÔc>EAZYóqf®ø‰Ïú˜|r'ÿòA¢ôuéì—ǵèh¢££‰ŽŽEÑc*sf>Cm…QÒ1Ö`È‹çbT$‘‘‘DFFq)1‹¸ÿN“åÞ—q½}‹dP¸wdÔÓu*hEKfÜ5’>¸¤œâdä%®çT§º!–à“爾Kº¦lÿ4ÄËþžÊêß›‚ó‡¸LkÆ nBÑvpªº<ñRW”7BO³Ý™–ÇLg•½ÈÃHΑY/A#F£w_âÏkuç¹öòË™Û奱?GŸMb¸Õr“WDóIˆÉDoHaÏüÅ„;÷dƤ‡ñPX3Â÷máûåcwÉJÆÌP¶…h;ü^êíɵm»‰Ñ‚ôØ ×o-Ç·ÝiÎ%þø1#—3Ñ ·†´ô‘²ðde°E<´$ŸýÙZiîTN±eœ·]î±=:O"ÍùF?Z«¸^=Õݹ‚sì/7¹Ø$&X“[ô¤ü·¼übKÔgBˆÕ¨‰9zš¼†O3f°iÁ‡ˆÑ@¥íßL.­\¿nw>‡˜Ã‘îcûQ÷ÖËt wÚFCÎs0:ÏTï%ôQc…b»•BÕ°ëûd›¼qgjë‘o–byùË-×~·3G[òeùò”Fʵ¤\Y±Ø'[Ø•=Úf͇ãsr'—ÔpÿÕ¾¶÷#•»7Õô¤ÈÚƒI  ±ë7€'Lx“]»v2`ÀÀ¢ßqq±øùÕ'..–³gÏÒ¿ÿvïÞEÿþX¾üÇ»Ýe@`÷H?sŒÏi|öíçÔÛpœ”jÍydÈ 4Ï?ÆÊ ù¨“åûàÌ]Íü¦k8ëL‡“è£ !`óU4E—Ú¹ìÜ]ôΩ­jªr¹4ª¼AËé—)äúœIîB1‡C—Y¬Yܘ5ûoàÞi8¯ñ%qãGìL4€‰ù%)}ÔËöÁBle·R¨ ¶P.OØÚo,}ç©;w-l ’ì!­ä–c¹5ܶë>‹¹TŠ<®•ª¯4´—)«¥…>Y[kصm*jÐipN¯ºXäÃv_ûF•þÛú‘^Mk£ˆßÉõÊìñ%î[ªÂcË6ÇÇõMü\ÞE—W/åèR¿ÉPôÛ[ñ6¹7zâ©>¿~.ïâãúæÝî¾@ °s´WÖ2uÊOsîÉ„Oç0m8fm!`üû%èAÏæÉØ¾6Žæ#g0ç‹·é­ÜÅW¯ýMqìåbÌáÄÜÑŒ瞯ñéç2ö}ý*¯ýYxA-å[¡‰fåë£øbKÍF¼Ç¬©ÏÑøÂ&~v¬Šî…(ªÑ uMÒÏ]'ÇèˆOË8$„_Á½µßSiýÒø÷£áLü!”ýß&àó©â“ ½`Ã4e‚VÎDL´·Üd³˜`Mý Pp™Oæ× >›‰0džåàe@ήs¹ÅÇÚÌ¿ËäRSöËéW9¬ð9“Ü…R!Él˜òÛT=yý㙼öþa£g£ÂçM%õQ¾‚ íV wÝLä‰Ûî7eûwç®…­À{°Ë­ávÕ |Ù²<•¬¯¬ÕbŸ¬Êköm›ŠêÜà Ûϕ蹽׾eã¢Må©F³nõÈü/„¸²»¢ 5jÔ0º¹¹Ýí~Ø”—ºÇ1êøñÈ$^êÏê-¿”ûý€׹ÜÐäP†‚UW1áñÅþ¿ó»Û"’››KÉ8§P(ðòòB©Tâââ‚B¡ÀÃóg­}´½4ññ¦6*û@é5€ï‚Þåâ«CYeî Ýàþ ÷þ@‹Ÿ‡ðüò+ˆ{AÕAéZ›Æ~Τ_»Nz‘sºÓó‡ƒ|Ws6ý^Ü„©-b‚;FÈ!ŽÍÞdó_#9ú“ü_„mkრ\ÚóÑ?¿òðÚgö˵ªñÀ”@p/R­ ³ÿ^€òƒ§™’s·{#ªõêÕ³xŒ]¾ìê Ž¾PÓŃ”¼x“¿31¨3 -6‰”¼x<=ª‘©Õâêz;êÔ˜‘³0¡íÖòPùöãý¯¦ñx-åmi_ Áý!í(«ö;ÑpSÌïn'°ÔèüT»Ê¶Ý±bòW ¨b8øàÛÍë™ñ{ñ«µ gKG’#.‘)&žwûÏ!ÂS(pPÚz?kàþÃíÁçéQį§Åä¯@ °»Ü8_ùðÑgŸÐ»__“¿¿ß½úö¥w?-½ûõáßߌä[³7ZÂFP` 72 v:½/àî’Cè/ëÉZú—}JHŽù=î÷.JÏ<ýLžxeng¿dûu{¼u/ÜÛh®nå×Sþ|øÕ\®|µ†9uè1v:£|γ4ðbÁÝâ~É!‚Ò(=šÓãéôð‚äÔ<«ö뀲¾ôW~Ïy‘L•TÙ àÄÄDT*ÎÎθ¹¹Q³fM|}}©_¿>û÷ï7{nŽRs )9‰ääd“Ç´nÝš9@rg#ãñöö&SíGÎ=>lÔ¦y*¥ðNw·/@ ìͥߘ³w5ïñãäºX±¬›¢toÃóÇÒèò_|öÉŸÄÚt.@`t×ùcÚ8}ð>cg¯`’*kg޲äyür鿸ÜÓÜ79Dø @P ×¶™7³Ù‡—0ooŠ˜¬Ä¹Ù(ükmäã­ñ¶ÝY ÜWTÙ àÚµk“’’Rîï–&ò dæ)ñ¬å…g-/“Çè’s´´õòâVdi4äT¬§ÆÏ1íõ®ÔPJ<Ü 8ºb7 ^yŒðyÿÇŽ„ÂpìÒò>{Õ‰_Öãôú ½¼€Ù[ãÐNMF3ëíšüöñ2"KUAŽÔî5‘÷úgñû‚5œÊt¡IŸQŒÐ?7È eçï쿪§ÙK³xÃuŸ­8CžPzÓçýx4t.óBÛóþ‡ø7àkŽæ™i?C”`@ ¬%ð#w·»!¸­èbÖ3î‘õw»Àú´¬z$«îvG‚T¥¢^ÆÓí–ݶö… Åä{íîv/‚{õÅïýâÝî…@ ¸×©²ÀÞÞÞdggýûÒ¥K’ÎË+0’S !1©â7€Û´iCjn‰‰Yœ9¹:wò *ÞXsu3s?Ú ¨ðé9™é½®pôBõ㞦oGvïH@ º·Bqn-ÑùFZ[ì­£Q[Ëg™ð”»—¬#4È{‡xs #AKfp$ÞHíã˜2ñÒfÿLTpÚ ÐÔõ,gòŒ(½Úñ°o2ÇB“M<dª}1ù+@ @ @ Ø#U~—X›oçfeI>'Ok O“‰ÁhÀXÁ£ô‚lôè‹þ§Í"OgyrTåýcž®Nð¯;¸žŸÁÙ£qÔìÚàÒˆî­ òÈeò¥l‰gÔ¢óìÁ¸qm¸°f9{ã4q¥é£­ÑŸÞAH\£šÇwpRۚǛ¹¡9F˜º4uE¯vS;)˜Ó©&„0Ù¾@ @ @ @ °GªôÀ·P*åÍSçåé(ÐdPË»µ¼k™<Æ`4•“‰§§-[Õ @Mn®…]ì”^tý žÇ—³üª#y˜ëÃÐÑgûkt§•ñ,¿\-ÜL4 @QêŸt9%qlMSî¡t¡†‡Šüè¼â7z y¤å©hîé‚BKHXo=ÒרÚ=ìKÂÑpÒô”n»¢ö@ @ @ ]Råß¶M^>zM.I‰Iœ=sÖäÑ`D›ŸÇ×9{æ,I‰Ièuyhó Ì´¬Ä³ëh†úœä·¿/SpóUZcÖ9Ž\«NçvuiÔõôÁ\SF##(JL`«ªUÇ¥¤ÖZ.¯ŸÃÂ}Î ןúN€¡€Œ,®^ÕP}u5¼ªÈÍ(Àˆ–øP šu£iÖtñŽçHDºéÉ]Sí @ @ @ »Ä.'€õj ´@áû¶¦þ@£CoÐÿÛ¨E§ÖTØ®²fgF>W‡Ðß¶]r}gc6ç\ãËc<ÖBGø± [Ñ‘q#­ÛPÇYÒµôo‰cI­ dgqåŸÕìS>Áø§ã¬ÈçòÁ3(: ¤Kg '|;÷§³ÓGça´ ÿq2¯)=Ö ¯¸#œÍ¬àÝ^“í[©X@ ¸¨0vÓ)þòo„®t 8ȉ¨i.V)Ýiñädæÿºƒà°"""øïß|?s ]|KèLëÿí&""¢üÏ©#ü³:€;{Úg2*ƒL¿tn2’¯ƒþ#"|#ãÝ ÌTQ”ÔHxð\ºV3õ¹O`âsÍq¹Ó]sëÆ×!ެcÛ˜éÚ™Ù‡#Ø<¶Á½±4ÑÁÒ8ÛÂÊ´áÒžö…³Å¿‘9˜ð o·ÁæoG<­r~d)§ÜëXÃRþت‡ü<&7÷U9¸‡¸]uƽHUÕE¹~‰ZÂzîF|¾‹×‚*Œ½× À.s²^[F>µ¼ñ©åmú ƒt:¼¼9sí…×蘀±·&‘5\ßÈ‘×Ç0}Á`´W8¶ç_âêÖ/ß¼æ:»Vï¡Ý»ãræ+6FþÁ²£3u.£«)(H<Þå¿r:ëæD¯6§Ô|8°×FRÑüo…í_Ê{ ‚ªkcºøåsþL2:•'­Úxðïer+ RŽ~<3{5ÿ÷TmÔчÙñë_Dg¸Ò°MúŒ™ÉÊçŸä[ÿ·XžS"Î]aýÜ5\¸âUÎT¯ÓŽA/?Ï?ÕGýÌ6Æ[Ø@ ¸Ÿå—.´|é-xgÑ´Ù‘ 7uÀ&8Ñðé7™Xí*ëÿºT´ÍA—Mô©d%Wü°¤ÀVXg[ØA™6*ßéû“r~!âáíá6ؼñ.ÆS°4†eü1^O5¹yLä¾;‡Ðu1UUåú%j‰{ ‘÷à~Ä.'€ :5´¤$§œœlò˜6mÚ€VCbRès&•éeÒ.fOÛ%©}@ ¨ 8Õí@sÇX~¹^. éR_ͥ𴦦ù¸EüßS5 ]öÓ~ !µhÞVÁ‚ÏóٲϘ´ôÎ ù”#™7?ÒÆrð¯Î)Ù–‚Má®ì\Ò—çºz²iK²Ø'] ¸‰<¿TââáŒ1fAûÂIŽdŸ¨#ù~âø»Ý  jQÎ/D<ªåýQv¹ïÎ!t]LUÕEUí—@ ‚ ©R«‰Ø ½.ý.²zeÛƒRLþ,˜wôΟOc{P «WFqôp4]ÞÝî¾@ °{”x´ɬÕ7—/>}˜ ¦ñD½K;Ö¡×;ß²qï "N"hõŒlí^´]:2ë`(«6áñp,lo6s¥-‡Íâ—­9AÈŽ_øè¹p+¹d«¥c\ÚóѾPÖ iMŸi?±óDáGÙ¶d{ÊHõ±Îm¦³'"‚“›&ÐÀ± ³v‡qì'¸»ÑoY0+ûáQ¦Y…GW&ø·BÀÿ~(9ù `$÷â&f½·Ž$¯¡¼3¸^ñ>ê&1’ŸšH. òµ¬Š ƪäwý:¼;#V³=8ŒS6±dÂCx×~œ©?nãÐéÂ2ûÙF8ãLû™ÿqðs:»7£¨Þ“EÇ#šØœ2ß`¿ú–xžÒ£5Ïü ÛöŸ ""‚“·ðý´~Ôu,ÝŽô1(Wdû¥Ò‡g×…ðó“î(ÚÌbOØV^kÙÅô88øòèÄÅî!"â?önú÷ú×/ÞšÂZåÚ˜³3,‹ÅqwoÍÈÙkù'8Œ°àí¬ù¿—h_½‚Áqh„ÿ_Á|ÿ˜ŠÎ 8þ;Ã|•lׄ_´é$_×Õº278¼xÙ?[Ù¶­¸c&5TÆÆ*ç"9*øÜ’|%1Õ†ÏÍ0pú26%"<˜ o'ÐM®l¥°Ã¸^’’~a*6.½-…¤Ühi,Ýz°øD8¿=S«ÄżÝ'|ݳøTÔu >"5ÉÒ—ÔsÌÉlÉ'¤ô¿\›XT¾MIñÊR¬Ë~$§ï2ô(+§ÜM{¼vaÊ[="?•Í}RbȰ;8j~Çfoú'þÝ2mi ÿžŒàÄÞ@MèF­[VÖÄee-žZqšˆ ‰4/ù•Õ:p0‚ày=p/§kÉ-ůǵ¤¥6,|n.äÆh‡†¼²9‚°•Oáuócׇfs8"‚K{Õûî/Ὲ½Ìhë\º_•©%äêû^®n}•¬ø,Q/•ªý™òÅ>³±§š”x Ee±I°Â~×Î_p("‚/˜ºW$lÑÜx‰{Aö/H`¿ØåpN~$YÁÙ·¤†ÙŸÎÍfïWö-©AÁ‰vdå¹ÛÝvŽÒ«+>a¨[ëæ~BÀw»IëèÏ× FÑÐPú0à« |ûzS®mšÇ‡³~"ÄaŸ¬ÿQ n-Qà@ƒ‘ó˜óDÖoäTšm&®aÃgÏບÏg~Áš3¾Œú|‹GÔ¿¹°«„c Ûn1~´>Ëò÷ßfú¢£8÷™Ä¢ºã!«P(ÛÇÒË j.þÈ‹ƒžeÊÖt çðâSO2"àš¬]üï¹'8ý¹eZtnÞŸnîýu?I&ߪ1’¹‘Í1Ðz`GŠj*¥ÕkzâéyóÇ»Ûdâôç𹱉!Y&'€ÅX•>¦ÝÔ¯nØÅ73>`ÙúLZŶ¿>£õÙ|:-€?`è¬Oéï£åâŽC¤{>ÊÀæÅÓtîí‡ÒÝõA»®™|“Ô~õmá<¥7ç­%àùê„®™ÍŒ™_²òP>]ý2whݧrÆ@)C®bdû¥!•ÝÓ†óÑ¡ˆþŽñÏL 0NW~2jÐgÎF–½Õ™¬ÝßñÉG ÙÛœq 7±hHed”iCRtbÉΔ^’e1;îÎÍ¿âw>êËÅÀy|³…ë-Þáë)­0iNº86LIÀ)DÍãŧ§°3ÕY²í–tC¥um[Û®$wjÌ$SI«›hbœK$KÑ‹Lÿ0‘×m9hùzÝb<_JÒ«Å`ý²£9ú šr÷„-šCÜ ºî ì»ï\Ï÷ËM˜Ãô"Ñ@p{pjø¹'±1àS–F¨m¼˜Î;½”¸ªÀ©É(¦pçøÇÙ¾%°ýpõwÍgxï:n(lÇ·Y$†p4Ó€²Ö ~ð€Äß^ÆîéÂ}:ÿÞC”âoOz•v[sëÅ Ç„Þ죻ûÞ³ˆˆ€Sä´ïÉ­ÛPKu”l[å–ìcYŒÚ,ãx¨¾)¡§8“HýÁµPÄýMøåXn”;E‹op-y¾uµDYû¿êw+â³%½8H‰‘j¿Œ ×ë ÁR<Ø¢“_饒9àš\ûÔW1uì*«t~¿Úbâ^Ýß Ø/vù°@ Te4ñ'ˆRû2âó9LÚæµHÙ¿„Öp^­Ä«ãã4Пä÷IE{ÒRw1¥OOü7'ÿÔ½›8uóÂÝ¥y_Ú;ųý¯¨ÂÄ`H#dÃQò<;ÒÞ×AÒ1·H?¼›‹EÅ€–ŒÄlŒ % SO¶)”¨Tª¢¥²ø ’}4‰S=ÚׇØÓqhp¡A_r.\"Þy¦—k.Æ`0@©þFñÝ´‰Lœxóç­wø`þF¢\ú2ë³g¨[Á#äb¬J<œÔ›Bés’È®>_tÃMŸ•DŠÂïÎ=Kб\üžè…Ÿ#àÞ–¡ºs-h7×µ¦ûrÏëÛŒ~Íž§¾È/ï¼ÂûcÐ)ñjÜ‘¾Ã_¤¯åÆQÎÈ‘«VúeYŠÇA{ËÇiJ냮^Àèo°wÝI õºó`‰%dÙYÌÛ8Y°³\eÈRñ¸;á×­î9ÿ²ú@ñþãÆœ0ƒ%ëXΛòñÊèÚ²ŒÈ²í 1ãW…XŠ ¶3i2WÞÆäNŠËó/K¤ÜË墆Z2’r eú˜rÏÇu[c67Úv,‹‘ g¾j¾*>ÇF2Û"ÖXlCº½šó£ÊôÝæ9宨£ynÿwKëGùc-Õ·ewx,×üŽ­Ý[8Ù`Ì!âMÄ*[Ó«Yñ  Ü¸lH aS¨·¯Œf IDAT?‚¯pnÁà¾Þ$íØDd~Ù>ØNn©c&õx)²ZjC^ŸäéBŽ=ç_ÜChA]ztöFåÒŒžÍ´„®ûPM#z¶®ŽÒ£-½šˆÜy†lKà%cÿvW'”«[­ŠÏæõb#ÿ°t½^سñÀêëM*Ÿlm¿ÂÍ#îÝ'÷‚v‰m@ ¸Ã’þaú˼ùÖKŒœ½‚ @Nô~~ÿvËö&â^Ûr.’ª.Y¥(ÈJ§À¥ð/Y YEEŽCu_Ü©‡ÿ†ø—ûÆx¼ÜT’޹EVb¶äÐ՞˿+ávóß©/2h~ù>–¡¯¬ßÊÿZݼ0™{€ð¹·>\Íñ¡Wøá¹á|ISâ$#IWH§ ú¹ÀeÓOâX›Öõ ñ2iZðЦpæØa—\[ìÐ!Î8t&hÚ0öÚ–äò7BÄX•F¯Ñ•™|7¢ÕTô¨c.A'P/HÚ+Iª;„Ç<®±v÷u´õå‹{[ßfõkvœœ¨×ïmfNx’.­ëâ’~…°°«¨M<‘)g ¤ÉUâ\«ü²bŠÇAKM”† sJú™uZ¹<ˆ·› 2äËXó>#A'ÎìLI²T<î*ªyºBfé¥B™ŽÌ¸ I²‚Ô1¾Ù>^]µk#Û®Ó±"œâ&îИI“¹ò6&‰þ…”'8Œd%d•}ªÙ1ûË£•Ç\n”8–e_I¼IÅóœ–|äøª5úªø©ök‰ÊÇËmHУKaßÍùQeúnûœr7ìQŠ<¶² iȱiKu†úf?åÙÀË5 i¥k=]F i¸àUé¨M¹qC*!›OcøüºyoäŸ'éçOЖ ”Ÿ‡µÜǬÌÄPåkI†ë¾S’ÉÔ…Œ:¦ˆÜHvžÑ3»w[jý÷í\¯òsèI/«x»gS<Ó{ÒJu‰e§Ò$U·ú%Çþí­N(_·ú3ÃA~|6¯—8Õ~æ¯× ·5uòkÃ[T:$ÙÖ~…-šGÜ ²ó{A»FL[A“&Mèß»wï2ù{ùòïvA•Æ@vÔæOÞ‡ê4hß‹¡þSyã›oQ?7šmiyP­5[OC+œ©Ó® ó£8Sø'£ÞP”üõ9ép5oLc{ÙÍqZ2â4èkZ>¦èjÙ(ýß‚ˆoxyäJF4©WPÓª\K¡‹ç¯©Ïò_§wX1§ËÆ}ÄQcf¯zƒ¸™oðý¹,ÒbËOðª/íæxÎ0z¿Ô ß#A&÷vmý<Ï7‚³¿ ÍpsØ$:R/\CMj{¨Àİ«Ê`$ëôVNiðT÷†\lÿ85®ýV´äé¾(¸‡õmZ¦,žçÐh4‹ùS}Û—¼÷Áß»œ‰Þ¡þ{3Ö¬ŽÍ#EöRXé—Q<F 2r0(kRÛC Eò œ=½q#ô<[M¿˜óÙ¬µ¨“|\:™³³s\’#K…ã®''9jÔÇÓŠmw †_ ÉÒJã›¶k{¿õ=·×¶MûUIôä› ¶3i2[K6ʼn‹rüÁÆþU)ÙL=b_y´ò˜Ë ëÇRáˆ{ ç &Ý,ùH§5C¥ûª5úªðÛØ¯-bå6,ëñ–½ÊÑ‘¬¾Û<§Ü {”"ϬÌõÃæëŒe±Ö´ygÇÁr=àA/g(ñH’ª†5Qs9[[t®Ü¸ FR‚7FCºÔáR›'ðÙʶh¯áVÆÊÉmaÌÊ=ØXÙZ²PVKßiöóøJèBŽí28½ë"“úÒ塸&ãLJ2Šàª÷{”®©qÙα$™þf3Ÿº÷ê„òukÊÖÄgszÉï6‰‘æ¯× 1tzkjÃ[ŸW2ØÜ~…-Úq/èž»$°kÄÐ2pvhŸË»xj^CŸÞ¼Âß~.ïâãúæÝî®@ ¨’(ñ}f9.ãi_%F]×Omã‡ùk¹DC:ÖS‘vœDÇ®Œz̧(H+k>ÎÌ?ñÙ@“Oîä_>H”¾.ýò¸Mtt4Ñѱ(zLeÎÌg¨­0J:Æ yñ\ŒŠ$22’ÈÈ(.%H˜dÐ’w$….)§8y‰ë9Õ©nˆ%øä9¢/Ç’®)ߊ1û?–­[Ò‹£ÍlÂÜõz!æãÁíÑ£T›·¥ý [´5â^нv/H`ψ7€eàíðS^yú=N±nû/|8ÿUVoù¹ÔïU[~æ‡/¿%ðøõز»Ýe@På0~æ žÓøìÛÏ©·á8)ÕšóÈhžŒ•òQ'ÿÊ÷Á#˜»šùM×p Ö™#&ÑGBÀæ«hx°|«I»YòÇVÎúå¬b{T>uz’1C;’ôã\)ƒÚò1·–M¹38R§m]ˆ[O‚œë·Å;ç"—³ÌïIuiåT>j±š9W°£ÿ!v #:Ý…mºÒw@¼ BY:~.Dz,4MÔÀÏÓÊ->&ƪÒR9¾í,ªÏFч«|»;†Šß½õ­Ž;ÉU¦òÂ;¯’ôçI2jv`Èkþô«ª–ÓÞï"'Rå·+EöòXã—–ÑÅlaéöñ,ž²ŠïkýÄö ÷ÏøNþxÔØ@Ç–mHŠNÔçÌÛYÞ4›È’º‚Ÿ#žbÚW¿±¤åZöÇ»ÒqÄk v(0»b›Qo@á÷(}ºÇpäTÕŽ’l;Íßs‡ÆL ¶°1 .¥Çùd$Ien^•ú'ž³G÷süj¸?ÀÀgÛ‘²s ÿ%‹õëU핵LâÎÌ)ÙðéPœôÙĆn!`ü"‚ô@<›'#oÊ'L9ƒžZ’Îìâ«×æ³)Ngºø0æpbîhÆÆ}Èÿ^xOǸSt†¿~•ùk# a)ÇÜIÕhк&é箓ctįeþ%¾‚‹•"´±lñ,öûóú ƒ0öqª)Ô¤]¿HÄšùnù6¢2¥U¯êg¸ÁsôzmõB6_æ•a1V•Å@JpQ´§õÕmìŽ1¿|ðýªoí•_™6³s¦¾ÎW^'ù|0›aL½÷ùþýI|:&˜aßZѰ5rYë—–0¤ñïGÙxíc¦<ÿ6/ý?{÷EÕöqü;»é=! z/ÒAEEA‘¦T;XP}í"‚lØ@l€E)"MŠTé¡C !@HÏöyÿ$»A„ßÇ+×’ì™3÷œsvvÝ{Î+‡vüÉ×_ã“9ÞgëûÊûò¡MÜ^ÆçèXI|ý`/rŸ‘¾=ž¢±Ÿu¿È#£šðîàâ6Êgë¤É$îÁÐ*ðüÍ2í>Wø4¶?9;ú§ú̾¼î¼Æ[D?Ÿr›‚"ž/õñVG×Ïͱæß^÷#²Vsš\™LüÙOî;M ワ+É|ÿô ª¼þ8wýˆžûÖ³`³<ö#[³K/cÎÃßô>äSsøòú,ù5áÓ¹æÍ§ÕÑŸå§ü>À‡:6–~¼zqÎ>œÕ{ œ—ñè‹s0.þ^Ïigý%ñ…Ôùéñ7Èì1€_ªAhÆ6þÙŸ¡Ÿ-£Øë}>çz8¸äg6ИF›&2g_ ßßœ£ãöþ>tªsòYÒK¼ì#ä,ÚâlÙv2oU½Ûf鯬ÂPÖFî„+ª®gÖ–¼6>‹Ï§ù÷NðÁYœŸ½·ËÙŒ‰¢Ï™%ÿÿº·óÁßÔŽ¾ŽùRŽ_Kx .oÚœ3ÎX_cñ\îô]o.¨ï‚ä¢eDFFš¡¡¡ÞK 垤ï]Oñà+NìîâO\ó¾ócé¯|»¸Â?ÿ\ØIÝUH_±žŒsúÙÉüˆkÙŽ±k˜8}+yhÖ¢YÖ³óˆILývtºÒdáø_I*0ˆjrÝjì`òäµdžÕ ä‚–——ÇÉç9Ã0ˆ‰‰Áb±„a„‡‡³qc©/Y-Rjjª÷B"—аV¼7w$µ¾ìÌm£w•pÕ§ˆˆÈ…(Œë>x‡2o<ÊÿN¿‡ÖYW©÷F¹€h<^.€~ð¯ñ0“îÉ’;næÄ¿zõŸˆü+sîÑù@þ² à}Mäb—ൌf—‚iBJŽÓ4Ù¸©èDQll,Yö ä^Ä÷Òö/ßŠî·Æòãê¿1PžÆu‚Ø÷{2¹&`ÛǪûŽ?}(i-® Lˆ…¤7YÛÖs¨Ys.‹ÝÀât͹0D6ëÆU!É|={¯>ð‹ˆÈ¿,U°%÷\]eª÷F¹h<^Ô"r>èÜ#-‘ …À¥à1=¤ôǃÚuë[.Ûá ßæ½iªvcàƒÍ‰4Ká¡6–|1›J÷¶bý°7˜yt9š :÷òÊý|;d<¾J—ïðÚ/ûpÕz3ø?Q|÷Ò(6ò„?eÛ<ÂS7fóÃ;ãX}ò´Ø€ªô|±!ËÖÒ¸e#"ÈIdÊ—ãY–^xJö+Ó”ÎwvåšZ182ؾx2ßý²–¬Øëyàáö”0èÿJrvüÀ;_­ÇÝ„.wßN«šQX²w±hâ~^“ˤB«ÞÜݱB-¸³“Y<~4ÿÛSâíübª“`MgQzÑW™–©D¤ó«r ÛÈ,Hegf0 «D`MÏ8·Kù‰ˆH©Y¢sk§¶´»÷&B7¾ÉŒ=úÈ/""ÿ6Ôês 3¾d|þ_¯Mïr!Ñx¼0¨Dä|йGþ.["%€Kó˜¦É†b–Š‹‹#ÏF-ØkuŽäɼýâdÀJ\ëÿòt›],Ù¶ŽŠûnåú&qÌž™†› ª´¬‹±å’ Lêy­ÕÄ4 Bët¥ÿ-~Ìþð{Öµ&²_4M/;ÂÛï½Fª3Œ&÷â®nuX?zùÖnzøn.Ûü¯~º™œÐ:tð Û2lÆ<¾ú®:¯õu2ú•±l·ÖrÜôÐÝ\–ôC>ÙõzñTß~JyŸ¶zÜÖµ&;G=ÏÛ;œ„•«HTNž—{ËFÅ¿—¬"Þ#Œàª\Õº"—O"õØLkÓÆá ¡ñø¡°ˆÈùf «ÏmÜC•?óÊ ÿ±W'fù×±³}Ü+¼yŽjÓ{£\H4/ ê9tî‘¿‹Æ–È…E àRpã&Ãq“(LÌ"ËxLùÎlò‰ð¹^kìUô¹5‚¥#g²§ÀIÖ’}ÜÖ® q³g’æ_…–uaÓ˜˜Vï•™N\ÑWs_§úl÷.s÷9Š‹””E²ßayìÙz˵ñ„ZÀߌ汩ü6o3™.²¶2oö>Út¼‚²³÷qðôøã›Ò²Üæ}¶™L—¶,f]Þ@®¨ΕYÈ¥öå ©¸%)ûw‘ãõ üƒüÁU€ó´à Š´ì؆˜¿1}[îI‰d—Í…ˆÕ€bZDDþ!®”ñÜwÕøó†ˆˆÈCïr!Ñx¼0\HýàLÅ­ Gï0DäàíÜ£óœ­ é}MD”.ÛEÖá\L3’:%,ms%‘—UÉ·J-1´è݉è£lDz6ýÁžÛo¢IÜæG¶¤®¹‘¯’m@h§üNãž±°_2ì%Ì´uQç<ž'5Mð†Mˆ'‡lÛñg±ggá Ž!Ô™ àÐXB­•è9èn;“ÕRC0»˜üþ—´íÔ‘¯ßÆ¡¿ðä%¤”œ¡u»Ü` 8e€AhÑñ*ì›Ë´?Ó°ŸR…Õß n'%EDDDDDDDDDDDä¥p)¸Ü6Üyy`ÂÆ Å/ívåã,°ùP£…èæ½é·ŠÏ¿Üɱ|«™½…Å»»sSÃòì*[wâW춘xL0,–ã5XC"²œT¥ádçø·ø¥\Üw#›ßÁ^E2‹I”zò“g)KdAaP‘øì$¯ˆŒ²'ÿùÎ$~<‚•9gVêÎØÈ¬±™ûs:>ò0wÞÇ“)&,Àƒ=3wH,a~pÄFPWvlG¥ý¿3ãÏý8-V¬¦·0ü‰ˆÄ–‘‹«ØzEDDDDDDDDDDDD.nïEä·ÛöÂô¢QÌ@á2ÌöâÓ›ÇX¢šÑ³[9Ö|7•¤“gÄš9l]¼›ð+ZѪ–‹õËRŽ&K]dîÏ'²^}ÊX‚+qÕuð?¹M¶œlvý:–ß-íè{KU JÅ•¾šei帡mm­–°´¹¡+WrÀ ¦-G`,ñ!0 \é«X~°"7whD|°‹(±•«S.ØÀZš•¢0À{´L'–ï×83vqЈ§jtaÙ JWÒ¸L Ñ :pg¿û¹ÿþŸ;[•+¼Š! Žj1.Ò’3•‘K–f—‚ÛÌÇêt‚iR¯nÝâ z’q;ó¼Ôf%¶y{„FQÐwL;Û¾ƘÍänûƒÝw<@“‚¼s| ¯ƒ=³&°øÁ><ýNGœ™»X6gûÊW<³zÇfCÃ'ûÒyÃ[LÜQàûmqÝiÌýüBﺓWÞÆß•É®e?ðÙÌ}8ö-`Ö–ÿÐsètÚò=o\ÆìQ㸣Ï{€Lò÷.åûQɤ[+Ð꾞4‹ÄðØÉHZÌøv•0û·™ŸÂúÝWsÝeåYq …‚í?3z{q¥ B*7¤‚s;3Ò¼'ÞEDDDDDDDDDDDD.VFdd¤ZÔ½eåt~ùðìÃšäæ¬X³²È2qqqŒ»ƒ£k“êwý?áÅÅV—ÝþëϬ¢š7!Î U¡e]Ø´x'¾Ü¶Öt⊾šûî«Ï¶q£™»ÏQò˧ÇA6²Š˜Áì.ÈÁn %Ô¿øé³î¼Ö‚ýŒ¿\øùƒ«g©nÙkT±)u¬;YœÊñ›;nk0þù""""""""""""rÒ àRð¸]dÎÅ4#©S·N±ål®$ò²*ùV©%†½;½b4£“í˜@Ö¦?ØsûM4‰›ÃüÈ–Ô57òU² -¢ãÔ…p÷쌅}ü’a/õ}nݶlldܧÅõ†PõòªXö®'µ¸ÉÍ–(´ªŠ{çR±®Âh°gfã‰%¬`ÿ²i‘Æš­Y§%À-Ç„cÉ?Lž»˜EDDDDDDDDDDDDþÅ”.·ÛöÂÇÅü.Ãlwx­ÏÕŒžÝʱ滩$¼¾³™ÃÖÅ» ¿¢­j¹X¿,…ÂÚ\dîÏ'²^}ÊX‚+qÕuN]ÎØô`ËÉfׯcùÝÒŽ¾·T%°4)̾‰ˆöÐûš” ¬,õo¼—{šå³`ÊjN¿¥°a ¼\]ÚÜ9€>Õö1óçDr̳«ëŒp2vqЈ§j´`#”j—ׄ¤5ìÎ?mš¯L¹ªìÝKni§F‹ˆˆˆˆˆˆˆˆˆˆˆˆü h èRp›ùXN0MêÕ­[|AO2ngž—Ú¬Ä6oOƒÐ( ú¢‘ `gÛ7ó¹€Üm°ûŽhR°€wöK&;Ø3k‹ìÃÓïtÄ™¹‹es汯|Å3«wìaÖØ94|²/7¼ÅÄ>Þ ØÃ‘å_2ÜÕ‘ÛÚ?È˽C±à$3y-s>þ–ß“l'걄ÐüñwhàÈ$et  IDATËŸŒ{û7V§9K_W1ÌüÖレë.+ÏŠ)'ÝYÙÍ¡eß3æŒ òØ6í+¶Q—%¢ Êd³yáa\>µ…ˆˆˆˆˆˆˆˆˆˆˆˆÈ¿‹i††uoY9_~'üû°&¹9+Ö¬,²L\\ãÆî`ÁèÚ¤ú]ÿGxq²„Õ¥C·¤ÿú3+eêÖ¡z»Ûhž7—ÉKöã}~¶\Lòòò8ùÆv‚%¦-C¾D—Ðu|ÿö †|2›Œ&ýx÷^Tö,qÜôÖO|ü`uvOÆóƒ?g¹_I¯J~ǵômäk¬~ÔêûÏÕÛÈègþÃÓ,!°í>x®%áGÅžœ$V­ù“Ä4æ9î}‘¿ËE}“ÚˆÐZ”/Ûˆø²DR±ÜuE>Ö©~;N§›)?ŸïEä_cý» aI–K™ŒìW›ßÝM¿·×’gÓç°Ù˜Îˆ÷Óð—!¬9¶á®yⵉìwƒ5© í[?KÜœxê£åäš°,»17iIÝXf†tæ±[¢Ù1¢+~‘„`úö~õ+ƒíM­™ï³mÅ$ÖxÞ¤cëòŒý&7AÔºå:bÏáò°”éÀãÞb³zl•[qyX:‡¼ÌG‰v`* ·á±6‚­P­OÜÆŠ—ºóô”x€¤SqÖpº_WŽ ?]­ mã=Ö£1†…Íá¡>hXMn£ÖŒ¬WŸ2Ö%ä¸À¾} OÜ3æï"""""""""""çÜE=¸|ÙFtïò÷ÜÛ›´´TîëÛçŒÇýûSù¿'‡Ò¶ÕÎw¸"r‰9žèô‹ˆ'Œúý´’~g”L%&ôÄ]hÝ×iK›8Eµ»APT8O&r=§”·g¤“GbC­à9ÌòÉkñ íD‹Ø‰üw37ħ2mÊ6ì@„O±ºOú¯<}·?z=_û‚þ@nÒ|~øx£æ ¬l8änç°ýä#ñ`Ë>‚ èìÚ¨4í˜} çxÝ"""""""""""‹‹<lRoÒ¾ÃM´ïp@‘ó~;€Ëå)¶žSY¯ÙšÎÛФF,A†‡‚#)¬ûå+~X™¡d‚\DüˆmÚšš¹«˜˜bƒÀ ”Ì%ñ×ïØyÄ$¦~;:]ßšƒã%)wK74¢[ëlŸ¼–L__N—8Óí9žÈuçÁÆnÆ=4é§5 é$sŸJ=3ÕÄ–™‹ÇEÙp OFÇJ>GòÝ€‡CK'±Ž!t¾¢;ê·#>å¦&Ù}í r6Oaø§ðŽ_•µ¡K¿'xèý±wëÍÔŒ|)C¤?Pp,¬@Ê5lJå‚ͬL9»6rG•¢MÝÙWDDDDDDDDDD.>õ´WÓ4ÉÍöž’µ˜8¾d¬ Bëõäÿ¿•²»§óÉ+Ïñô3ƒñÃ<ÖìÌVòW..åi\'ˆ}ë“É5Á´ícÕ‚ì8lÃã±s(iF$eB,€‡¬më9y—Å^Ôוüm v.d³»<Í*ä³;)‰¤¤$’’öb\ý¯¿Ð‰²ÆÙ$+Mr·.b'õèÓ±Çþl-O»»šcÙ¿œõ…ç>Ï¡¥L^oиÇíô¼©,»&Og·ãlc³ßi4 ŽâÖx ¦+›=«§2rø7ì 2M¬Z·‚þÍéÕ*îø‘%êZ^øâs^iWäÕI¾Äñ÷´£ˆˆˆˆˆˆˆˆˆˆÈ¿ÇE©1M“œìÂäÆÞ´ÃŒü~6þ~èÑ–¹‹VF—­°xp:}H ø•£Mkð_ö1£¦l%ÿè&û6­f@@Uzzˆ ±C·ÃÖx®ò%ºUÞÍ·/¾Çòl¿Ø¦tîÝ…kê”!À“ÏîÙ#™à¾“§o)wê¾ÍcØ“ÙÞ„.wßN«šQX²w±hâ~^“‹ ê=ôÖOfÜËñgöÑ`‚ërï+ÿáŠý_ó܈ÕäT¢í}¸®nÑÁyûV1uÌ,N;}Æž…¨ÆÝ¸»óT‹ Ãß•ÁÖßÇ3vúr<áW>ÉЛöÆ ö»‚¸ì‘×¹#ã#†ü˜Œ'î*zÝÝžF•b±ÚIOüo¾KrAa\uàÿ4>ž€roÅs#7b+©Í}…¥ß+ÜQíÔëòW}ÄËß;èRR[ÛªÐóåDÿŸmr“pãc<Þ|;£Þ›ÊžˆyþÙºüòÒ‡¬/Käôù^êgNãµ7~ãÀ)™ü ê=ô ·šÍ¶„+¨E˜{ó¿ÿ†ß¶çâübJê£W¹+ë†ü¸k®<ù`–Žø„yûa—óÄ›÷QýØ®r—ðÞàñìr†Rë–»équ-ÊF`f'³ä_ó¿Õ¸ªÒsðS\›û3C‡ÍåàÑXý+ueÐ37`›<„·ç‚ø›xþùÆÌò.KN™Ž@Í»‡ð õ+^³{IÃ=¦: Öt¥]*°L%"X•S„YÊÎÌ`V‰Àš®Ùð¥åIŸÍ‡?öçëÁ?0ºöfl. Üå7Ó§KÒ?É.Ç—E. WÊ>šÑ—áÓ2Ÿ3c›‡ª7ö¥oS¼ô=ÛŽu¯çK&'â7ä!º±á¿¥à,Ml§ G6,#-z ¯|<”„ŸVp(¤&Wu¾ƒšËøz[öƒßòéÒ y{,ëcÁÞ@÷@[Ër†LNÆAƒ³j#ýܵc`­ûx{PkŽŒy†WçBÛEDDDDDDDDDäßà’Ioز“­Û“öñ>–,_aT©‡ÍæÓ `KDmÅf³vÜ®ãÉßJѤí"RÉ;~ËnêM’¿eø3ëÈð%ΚAê‘×ùﯢ[ý/·YÍoÍ)LìYËqÓCwsYÒW ùd ÔëÅS}ûq(å}æð€»2­›Ä°jáa<„ÕiMmÃ<ž¨0™ì^ý Ÿþ°Ž2\õðstï¶Ž5£Öv òöoeá·s•œ®<ûX/Ú¬zi©ÞSyîÜ6Ìú’_6ï%?¬w?×W¬æÝEx0ˆˆ„=ãôîJ¢z æ¿1>´™'“¥ï=ÎR‚i0àuz¥`èÄÝ…I©€ª%·õq!uºñ@Û|¦¼7]6kÄÉOSëÖÎTÎȤ¨El P®e5f¾1œŸ2 bZ<Äsýng×Ðqlq”åúûèh„‘MéÓ·){Ç¿Ãüý…i5KHB 6ñÙà‘ì¨ÖŸ×î:ZØ´q(i?-ÿš¤Ãpã<ÝãVmø–$gÜ5´,·€©û\@ UZ5%Äí!ßkOùÊ 0*†€ü½d9‹x6¸*Wµ®ÈÁå“H=Öp¦ÃBã#ðC àR3sYùvoîÙ÷<ÿwǼÜ' [úæ½{?ÿÙt|•äRód0ïÅî<²û%¿í? ¹ËÊ¡òõÀ×ødÎþ“úÉÃÁ%?³Æ4Ú4‘9ûNº§ïYÄæÜõ O<Æ w§ÿË]pç°w͆ôý€iin •Éÿ½üÇñHÏg¹)ÚIú†Y¼õÀp&ís¤õ%ŽsØŽ–ð\Þ´9f”~õm‘óä’IøYq: §ºùû‡áö&7\N×ÑÀÞÀÖ(‚Í<Ÿ™e<ƒ\ƒŽHœ²€J}šàߌæqûùíÓ5¤x  ­pæpqû‹oJËr˜÷Ùf2]ز˜uy¹¢v8 Ùék·zõ•”]ü+ûÍ(¶.KòÊTj'­Ä“CÒÚ-G9Ì–õépu4!g$±éXwìß)‰ìÌoAl˜|Hå™{Y·áè/YÛY³ßÍíeB±’+eÃpe¡ÀQ¥h3_”´5º9wÝR—-ãÞeé¡3ÿ Ü^S¦r{»bÇŽ%l<:“6#ñ’{ÞÁå þlÏ÷ÖG€mûÝJì’QŒXŸ}<9o(K¨ý0¹g„åæÈ–µ9úÛM›ÉìPp?Àx²Ø¼ÆAÓV•ùíÇ8CjѦÖ!Vì 81›ø/3ðòW§OŽ7‚*Ò²cbvüÆôm¹'ÍŠ4qÙ\ÑX @+í϶–!­žùwO&kÆ=ËãŠÛn=¯·=m»¬YÜÛ°Ñ)rlÿˆ›~tâ®tþøô1þø´ä°,¶„ißÃÌa2sXOžmùR¦¨vÄΆ7oàä–,X=ˆk*aG"""""""""""ž‹:ìv»ÈÎ*LµnÙ˜¿š„Ûãá©þ½™5g!ÁA\V·+æíÇn/i1Ü£õÙ²±ÁD[(1)jø“ж; öNaxr(ýþÙMˆ;‹#¾-$j %ÔZ‰žƒÞá¶ÂбúCjH…ÇåL[Æšò·qUÅ9LÉoÆ5a‰LßSíxجÀ•o¥UÝ2ø»\X"+⟻¢¨½Y÷:ßԔʡàôR6Ô†“JøÅÝÌ ïß|ÊV9>úÇ6¡}ç¶4,ˆÇ !ü!åX©b*†’»;Å(¦Í¼*q;*^+Á™Óy}{Þ™ùHkZv¿š‚Yï±!¯=ŠâgâȳŸHtº ÈudÅjxë#ƒàZí¹14…o¿LÁ~< !e˘µ˜ÌÓÅJµk;qK‹êD.ÜþeˆñÛR7GÖþAàm­©œÌÞËÚ°k!S{šö«LŸWGÐwÁa’–ýÌ·S6ûШG÷ârƒ5à”“„To Â¾¹Lû3í¤ã9vìVp;ñ(ù+"""""""""""r^\ä `;v{.‡I¿-&ßf¦Ï_M@`&°de"NWGž×úgg¾AÜõÏòB‹3÷e„7áîÛá˜0œa+â ¨Ãý¯ÞJ×Á_ϼ0€5Žkï¿–{¾`ø[Èò„ÑìñWézlCÿ8ê–w³w^1Ë—Ðf%òº“=3Æ‘~Ë=Ü×.‰gíÅaÛÔ$ô²®t[ƨ¥‡p×)iG‚£Âð3Àa‚áAT€Ã67žo}dR°e?ô ×ÝW³gÔb '"’P¯ ¹I)äyÀzòVµzðp—f¾û.ó÷Ùñ«|/¬|JÍžì ,L½Öõ+±ùÚ(6OÚ‰í†ÓvïÚÃø!ï²$‚+\Kÿ'{Óqý,ó©q=Ø3³q‡ÄæG`%peÇvTÚÿ;3þÜÓb-ŒÛtãö†?ÑØ2r‹Oô‹ˆˆˆˆˆˆˆˆˆˆˆÈßÊr¾ø;¹ÜÜfgòñ—°ÙmØ6¾ùi1e+âÁÊžBjÚ>œnîžêÜËïÓ6zýCÜ×®>åÂñ #¦B5*†kʪvhOÄŠ‰,>xjºÓ™¾š•‡+rS‡FÄYñ )C…ò¡Åv‚+}ËVäæˆ¶bñ%¶ruÊŸ›Žã†þôl~¢­x®ïZ•-ÿ›ÃÞâoþ{œµV;®©ŒÅ¦ò5í¨fÛÄÊT§o}äÉbÝŸ³0¼+ý;Õ ØKD=Zײ³~u§Þb×ÀF€'¬'øESïš&DÞiž<¶ÎßA|û®´ñ_ÍâG +.›¸Ý&àÁUŠæufìâ OÕèÂUº’Æe‰nÐ;ûÝÏý÷þÜÙª\ᘠˆ£ZŒ‹´äfz‹ˆˆˆˆˆˆˆˆˆˆˆÈßê"ŸìÀ4ó‰ áñ¾]0ŒS×øõ¸]8’7âr¥ûP£‡#+¾d¸»#·µ¿‡ç»&oÝÙ;ømä§ìM¬AÄ®dÔì=88-ÃîÜËÌQß|ww^~?VòHšöŸìÏ£ÈùÀ®ýÌ5Ž€;ºñì°À$ïR¾•LZÁ‰bfîìîÍÁ?°>óäšììþm*ëúwãå÷»Qp ‘Ùó—sèš"Ž,s5Sæ]Î=¼MKw&»ÿÊœ]•¨èC«àLcÑ”¥Ôïý ïÜhãðÖ…Ì^˜Ê †Ahƒ»yìî*lŸø [ ŠIQ–Ôf%ñq;Wú"¾W‰§ï¹Ÿ6ï}ÂBQÄìú–O·æûp«Z7¹[v“ÐëeÞ­G63ë«Él/0ßúûnfŽžHÅgàXÚÞ@äÊoù.ÅyÚ¾Lò·Lå×÷s÷ëpWÎ^VΜæì&gDeO^DbГԚû-ÜqzãK@Ž ¶-ϯ»íĵòzÀ…‘ä§°~÷Õ\wYyVH¡`ûÏŒÞ^\iƒÊ ©àÜÎŒ42ê""""""""""""ò·0"##ÍÐÐÐóÇß"*¼ñaýø}e·˽÷æ2ÎßÄŸýC‘]J ð!Åzá ¢ÞC¯qwî§¼òý΢—ý.5ó_Ñ*–°ºtèÖ€ô_f塿õ$Ðêö¶.Ä¼ä‚ îØòòò8ùó+^ìV›Ðbfû×x˜ikþG¿íøÑæ­JdåÜ |пe¬G 5aðÂ5Œi_kŸý‘eë¦òp ð‹çšGF0aörÿdùokÊúÒè…y$.J³àåˆÖ|°"‘iÔ䌚‹èkKX=z¾ö ¿.]Ǻ¥3÷Æ]4Šðq*·%Ž®ß/çË›Ã0êfκ_x ªí]\?Z¹÷öòa YÂëqÛK_1uþJYµp Ÿ¼òǪ).o㼎ñàf¯²(1‘‰w$`åT>gÀ¬Â-/|ÁÔ?Ö²vÑF?ß™–÷L`ÍÌǨPBü^ÚÆ×ý—ºOJj·³ŒÕ§¾jÄ‹¿¯a\çz´ø9¿­L$qý¦~ØŸ+£/‰Ÿ"""""""""çÍ%ñ \AAøùùŸìççG@@ç;<¹”Yã¸~Ð×¼Þ&…ú ä‡ö¿VŸk?=Ò“!«=°ywÞú8¿e˜€AõûÞåÉê›øæÕgyõë5„¶À{Ï^IÁÔd?½Ò‰Ð5cú«ŒÛO¯¡ß3¢GÅâ—‹ð«Ißßâf–òåë¯ñùR ­|Áøç¯$üx²ÈJ=‡ñz; ÆOduf$m_ŸÈ¨G›‘=û½øS÷Öä¾÷&ñAçò…‰9K7½õ?XÝ“†ñüàÏYî×AãGÒ«’ŸOñZbÚ2ä‹At ]Ç÷obÈ'³ÉhÒwßéEe?ïÏÉ(K÷áC¹Ñ±€Ñ¯½Æç‹M®zè& iM´ÅÎö™‹8} íkž¸OpX£.´ ÞÍ´Y»qzë¿Àšôýâu‰gû„a y {j=Æ»×ŧ°ç0³vçÅE6Hú„¾ú3!5Ü{{ÕO§.í½½|C–XÚû†!·E°fÜk<û›|½¨€æýÞãí.%Ä’íe<€÷1žœ$V­ù“Ä4E^þåm<[ËÑéý ¼Ý«,›¾{—GÌ £åË|òHÓ^#§·e€o¯/Ÿ^O¥è¯¯£³Õ×ó…µú~Àsõ62ú™ÿðôKl;€žkYäñˆˆˆˆˆˆˆˆˆÈ¹qA/}Ýu×1þü¿\OAA!!!8'î±èp8°Z­Øl6BBBþò>þ2K ­Ÿ~‰«—½Æ°hÅN‘K€5ŠOŽäý.yŒyàQ¾Ø˜WtRªT\äìOá@¾“töì9@n`Ù§2à¿O|È&;0g)iÕç“:u‰ñ[F~dïW›ßÝM¿·×’gÓç°Ù˜Îˆ÷Óð—!¬±µ? a‰¯Ðã‰É¤¹ÉÓYiû…1=Ðîóû˜œUX*¾Æ&úwÂ’,~Uîã§[¢Ù1¢+~‘„`úö~õ+ƒíM­™ï³³r/ž¸)Œ/uçé)ð3þH§â¬át¿®g4ðïæÊ­¸<,‰C^æ£D;0•…ÛðX ÁVðò<®¢[Øýç+Ü3pJáÒÊ“§³Òþ czþ‡Ÿ,füÖ,ɾ6m«ðnâ6„Ñ ËÕ„îËì=^Ó¿„5{ˆ.s°èÙ»xbÆA<ÀäkpMÿ’Û|éyRHËuaÚ‘²g?ù•îã1/í½…3ûétÞÚËâË2£)ïÜȯo¼ÄЉ)…MüÛ h:™ÛëÆáÏ~ÜEÄPk?—0&ütt£Æx® ìÛÇðÄ=cJh¿’ÇóŒ2wñßk-,zº/ÏÏ<„˜ö{2á3ß¡õi5¿¥LFzi› >ìòiëy{ë“€j%¿ŽŽµ[ic]êC_1,lõù€DÀjrµfd½ú”±.!§˜×˜ˆˆˆˆˆˆˆˆˆü5ô à½{÷R³fÍ¿\iš¸\g~Ëèv»Ïz h#¸=†~ÄGO4;¾Ü¡R–W”=s‰O‘ÓÁÔ½ÿFÝSKÚ"~KÌúÛ/ü8´p.'&;ÉFR IDATLÏÅ4,@PÍëiÊŒŸ7&s<,ÿi ùÑMh_ÜõB–}3·0Y`æ’øã$öZêѦƉuÏÄê,`VçZª³™ñÓvqü²÷~æ~¿ OBKDûÓäZ*¹WñÂôãíâ9<‹ÇÛ¶¦ßÄýøû¯#u%›íñôú:º´ f?Íÿ—†Œc«¯ÏÍÎ’qóNÜW×Ì%ñ‡Iì¥&­ªCÞF¦-Ë£B»6TðÂ.£Ë5aìž6ïùß*´hLXî<Æ.8ȉ]¬c´Þ6.†/í}â£À‰~:“·öòi Ù·óÕc÷òÌÄ\–@bª6áúîwr}0N›z"‹×ñplø•4Æ}SÒx#îò«)g_Ê÷:)Ž%ü¸üÌsr[úþúòíõt<ÚûÄ÷v+m¬¥9_ùc6Û_<â$ó@NaŸh°ˆˆˆˆˆˆˆˆÈßæ‚žœžž@DDÙÙÙg]ÅbÁívc±œšïöx«d-L^^þþ§ÎÍu¹\„……³Uq,„7êAïj˜²²6wÔ°så] ¸½*ÁÖ{xù\R¦ȨÅG«{3wöºžú±þäï]Á”qXºß‰?ñ-zrßm-¨dãÀÆe$§ì'¢ˆm—Û[òÔKmX?ì f"Tç^^¹?€o_ù‚ ù}Yù'¸Xùr†Nq²´ö5 ð 7Îü/3ÒÿÆyÀ%¬xàÎ=‚ÝŒ{hà™1˜N2÷9ŠÞpÊÅ'2xÖÈ DaggŽóx²Êt{ŽþÛÄ–™‹ÇEÙp OJFÇJ>GòdäCH"ýc·j7)×°)• 6³Ù§xMr6Oaø§ðŽ_•µ¡K¿'xèý±wëÁ¨¯ÏŸ)‚òÑÀ‰Ÿ~‘ˆ¢€­™LL²×þÂjç;ÜÒ²2Û]Käîï|ZþÜä̃ȊDûÉéº~DVˆôaû¢øÒÞ'Òs'ú©(žÛëúįÊÝ|ðA?"¦¾ÉSÏMgÙÎ,Ü~Uè7ñ:î9=ò㱸½Ž‡•)Ç6ú«ï%g;ùGò!¼laLJ€qg~–8¹-}z}Uô¶g}SRŸôfªíVÚXÝQ>ϱ4¹ODDDDDDDDD¤´.è% óòòŽÿœmò À8NLÓÄ4MœN'•ª.KT3zw/˲q¿’â>6ÃÅMÆŠïûG®ãúÂ`>]|¢¯äÞ®¦`ú[<õÄó|¾¹*=ì@°Æ_G¿>õØ÷Ý`>ñŸ­Ž Q܉|¼¥˜mËç%²x_Í›ÄQ¸÷ ª´¬‹±e1Iú’Uä_Ã, -% ·çs†`}`kžp%áçiYÔ‚ Ùì.O³ ùìNJ"))‰¤¤½W?Áë/t¢¬QÜùÅŸ–÷Ü@ùc§C#Œ†½n§2[Y˜”_Dy“Ü­‹ØI=út¬ÆñÛÚZËÓî®æXö/g}†“CëVpÀ¿9½ZÅ£²D]Ë _|Î+íãpz× ¾Óh.Å­ñLW6{VOeäðoØAeš$yy¾¸îrõ=×SöXPFút§²{¿ï(̰™Yk˜ºÞÃeÝïà®ë¢Ù=u6)>MívúçZ²Ã®ç¾ëâ9±‹&ôºµœ/Á—öö墋×öòe UjIMvðãgX¼3 7`„V¦N\Ißíu<œ»«ÙJÏÙX½šŒÀ«è}M™qÄ\M¯–%Öêûë«4¯'o}b=«vó%Ö³?_ˆˆˆˆˆˆˆˆˆÈ?႞l·N¯‰ýËuSPPpüž¿§ÔÉ_¬1´¼£ á >avŠƒèº%¶Q¯Õs–2|íAnصt)o¸††±¿’_«å23fã\&\7—åGšR×Û¶1¿²tÉ>nkׄ¸Ù3Ió¯B˺°iÌN”ÿùwr¥ü×¾¸ƒ ½D¿ñݱû¯×iº=®¡mËoô^Þ“>›ìÏ׃`tí1ÌØ\@¹Ëo¦O—&¤6’]E,Ñ{Œßƒ7¢*ãæï'¬iwìω/òÛ‘Gu¥Lá£}ñø>-ó93¶y¨zc_ú6µñÇKß³Íî-ßòéÒ y{,ëcÁÞ@÷@[Ër†LNÆ–žæ%^® ËH‹È+%á§ ©ÉUï fÁ2¾Þ–Ç‘à’ž/83ð–ÅqùPÆ}Po¦qy¼5ŽÝcŸdÞ¡£‰TÏaVL݈õ•^´%™g§ø¼´wÞš/ø2ñ¾õÖù†ù©Á4éñýlœ¸It õy®8ÀWϼÆï‡KNàúÒÞx};ôp¤Äö,ði ¹ö­"™'¸ã±ûIÿß*2£Óù~ÜÖ:WÒ¨ÂvV>sïv/ãÁA}ŸÚ7°Ö}¼=¨5GÆ<ëóyßí’ÆsÁ¡1Œ^Ó•ç†á­šß²ä` WõéM=/oÀ¥y}•øz*eŸØzk·g«ÇîÃñ”ò#–ˆˆˆˆˆˆˆˆˆœ;tØívS¶lÙ¿T‡Ë墠 €üü|Ž'€ýüüÈÈÈ $$„¬V«—š¬Ä·º››­³øð÷4œx+o!´L~±íyzØõG—V´âoa[€ÁQ!—Aþ±ïsÝ'/ÃYÒ¶µéöÜ~Mâæ0?²%uÍ|•\BvFD.pv¶Œy•‰·}A¿—ngò#Ûþb}ùl4™ÄÁ=úQžïú¡÷MÌ\V¾Ý›{ö=ÏÿÝñ/÷ Ö¾yïÞÏðo6Q\:òÓãoÙc¾TƒÐŒmü1²?C?[öÿìÝwxÅÀñïÕÜ]½„Þ› (U”*UAiþP@DQšt©‚ "EzéUzï PC ¤'—ë¿?BR.!HÀ÷ó;øù‹‰¬½gœ(ïÍEôëëÆ}?¦ç°æhmøÙÀˆ®SÙôÀ†ÔŸ,ó%~볜"ŸF!ÅÑ]`Ï/]µà,Qñ1@;lâ•(wk#;þ—¿/ó»·#ò‡Átm3€zŠûœûçWzÏ®Ìäá©ñ,UÊoÞ"OJ•Ó[ßN°¤QŸÎ]“ÅôÿÑ‹1ýºós£î]9ÂÚièàõ3¿ëðGh=#™ƒ§u?8lTº—à*Õ Øöd}êÄÒ¸Ÿí·YÚ»ÆCéÙe0ïF\dןýQ~3_7aM)ìDûÒ8süt_“ Ô›3}A†û !„B!„B!Ä¿Aáééépuu}ÑåÈtv»èèèøµµZ-V«›-öQ·Z­F¥Ra6›±X,¸ºº¢×ëSk Ò|È÷4ÌaÇfs ”*% Àn¼Æ²±¿s¿áPúXÅÓÎaDIöÚß2´î)ÆßMP¢'ìJrÖûŽ¡uN3nÜl€º ùŽ ÿŒ`¾PÁîµ³ð^A\q¿×Uføþ3,h\Œ:߯àè¹ô*¡y¡EB!„B!„B!DÖ—¥×öóó£dÉ’\¿~ý™òq8X­Ö§>·Ùl/ÕÐJ·R¼×ås>ô:Íä+¹e\JÑeÔ×T{*îÆþI#XuÛNö×›óéÇu)™MI´ßq6üµ’#÷ͼ˚Š7¢ÛçuQßxDŒ=Á¯L×Yüã7,U<ùÈ¥x¾ï¢åBeÎÚtíò–ŒaÀ9#öâË^á?fMlYñ¯SjÆ×M²s}Z ¾œë‹`ó>üæmeø—í)µí.Ç¥ÍSâ"=›àp˜=•…B!„B!„B!beéphhh¢íŒkõz=QQQh4‰§OµZ­¸¹¹9Ÿ‘•RM:Óæ­RäõÐâ¿Åá5óYs:˜§Æå) kÐŽïW&ŸÞD๭,Z²‡[¶4ð Õ.ýÊøõ·0»£å ¯({b “¶‘»v{:7­JW%¶ð[Z6‡5>˜ÃîqlÁx.(Z1´hÂ9°Y-Oޝôàõ†•±™ÆµhžUkQ0x‹Ïa¶Á}›¹Ô 3oÚÈ-_‰ ñïSàV¦ŹĘM7‰o…¶ûì^zŠ¡“jòZv%—㺿G»×rZ‚¿B!„B!„B!„pR–GEEÅÿÛÝÝ=Ãùèõz¬V+&“ µ:ö”­V+...èt:ç3rÄðÐ÷(«ŽÍÇ÷x½×mšpÊg1¾‰*p-ߎïëØ6m æ¢þÿúÓ£õ]F-¹ÊοvR©GÞ91ïÊyË´ƒ_vúaq­L«%¹1ûÆ_·à–¯ Ù"¢°öG>œx.¥(’/ê¼oÓ¸¨?»–ÞÇ‚šl…²áxèGøã±ù·ÃõTÍïŠÒ׌„•„ø·)ÐesGi% 2a t` $Š×È媂¸pøƒð§_0B!„B!„B!„HA–žÿØd2a2™ž)øû˜^¯Çn·ãp8p8Øíöô°rù,ך°;L\¼D¨KNÜŸ £ë)V§œßÆ‘{1ØL÷8¶ÏC…7ȯ˽],Úi£A>ô¨gaÇÂÝܳ€ÃF@´+¥ß¨HAW;÷or72!Z…ž’êàê³3¡v@F§Âf²=Yï×aÁd­A“j Yñ¼8ˆ Ä®ÌF^÷„]°—ì¹p%šè'!_‡Í.ëu !„B!„B!„ÂiYz°Íf#o޼ϔ‡ÕjÅh4V«Åሠ¥¨Õj‚ƒƒ1  T*UÚ™)])Vç#šÔ(Ž§ÂŠM““êûɤӑÝÓ· _ñsÕ¸®RƒÊŽV`ÁÿÈnî~Ð…×pä%6ù&ë~ù“5¥Ï˜V<<þ7Ë׿®Ñ¹ð2û4©Ãá)׉ÝÅ%ÚŠ2»êI°W¡ÆE£U‚JB¼"¯àßСi1Ö?^X•Ÿ†ª£¼ÿçƒíÈB!„B!„B!„Ȉ,~–à¯Ýn':::~í_WWW¬V+v{l@V­V£Õj1›Í<|øWWWôz}ª`]©6ôjžƒm“'³÷ž uáV ë_øé„ŽÂ"L„îÎÈ5·±$ý½Â@™›Sðö)înNÓÒ—Xq%` ¾ÀŽ…ؽ¾ M{÷¢W³{ŒXq‹´WëÕP°Þ{¸³•ù÷­qŸY¾ýEÉ‚x¨.c49)ìa& J¦â±ÞÝÀô-]™Öw3sþÁ–«vоו®Ub88d)WM@z'(B!„B!„B!„ ‹OQ‹…ÀÀ@L&ƒ¥R‰ÉdÂf{2­êã5•J%ƒ“ÉDPPfsJ¡V*½Z{aPg§ÜÛ•É–\Ýa䯋¨ßlBíbh”*tÙ¼(QÔ \˵¤Så¬]°„©Ú©9e ”®(Y(ZØ"ƒxjA©u.F¯p¯Àµ´œÛ~ŽÐøÈ®ƒˆK¸áY—Æ•r¢Q(Z·)lÞ¾›vHYñœØƒÙ3øczÏ:ƒç{ÿcÄÈ~|”ÿ*óû·¢ß†û²æ¯B!„B!„B!2,KÎ(£ÑˆF£A¥Ra2™RMkµZ±Z­¨Õj F£­V›LJÑ—7²õÆçt3•N~œÜ¶‹‹á•“M鳌Y›?¦}÷Q´rW‚%˜ËÛçðÇÃB´ü¤*7ãdˆÛ±l®9ˆN-Ïòó6wjÖ–ªy\PØMûbÙò›NŒþU‘»Æû”<ÄÄëÆDS;ÛÃN±ha~>k?”)ÝT˜αeή99­´â9±rpæ×œ™ÂïcÎ2¢nŵHB!„B!„B!„xù)<==®®®/º™*00•J¿Þ¯³ V«õ™×Bd-QQQ$ìç 9rä@©T¢ÓéP(xxxàãã“)Çó÷÷Ï”|„B!„B!„B!òòòJ3Í+9Øf³¡T*Óâ×B!„B!„B!„Bˆ—Í+vuu%***Ãû !„B!„B!„B!ÄËè• {xxàááñ¢‹!„B!„B!„B!„ÿ*å‹.€B!„B!„B!„BˆÌ!`!„B!„B!„B!„xE¼’S@'Çn·CLL :N‡R)1p!„B!„B!„B!Ä«á?ýt8„„„àp8ðôôÄÓÓ3ÑgB!ÄË@[¢«ÿÈkº]!Ä¿AÚ¼B!„B!„ȈÿDØh4¢ÕjQ«Õñ£€Õj5Z­£Ñø¢‹'„¯}UFôfݧ…28Õ„’|m—°mDô™\´˜¿+Ïf\5Ã3䢧ʈýx{{§ðs”‰5ÒÎ__u¤Õæ¯KŸY[8´þ+Êû”eÇ÷ò× ÷)⢈ÝA]„në½ñö^Ï—e\’?7oo¼ç‘©åp)ÛŸíÞg™]7/5§ÇûŸÁTJ¬2PiÀJæw,˜ø^PyÑnYìñvªÈÓ¥ÖR¤iOz·,‰.ÙíL «Äàγ¡[‘ç0%Š’|mWrþÈxªÀ¥ô—,_ò%µOR¤]w (ô”ûb.û¼½YÕÑ UF‹åZƒÉǼYÙ6_:þL½îS:4ÛTÒ²$í72Ô¸óî|o¼7™¨®ãËZ~ »¼O1£¶[Ü'nÔ™uï(÷ôM˜àܧ×QièÞdÚÌIþY7‹oE¯H¾dé¹Þi¶ùDtT¼ƒC+%¸>.¼öÃn¼Ïmç— £‰û4iß’Ø3ö»Ïµ= !„B!„BˆôÈÒÏgêׯÏÞ½{Ÿ9£ÑˆÁ`Àl6Çf6›Q©TÄÄÄ`0<ËÃþÿåzŒ¦säL~ZzsÚ;$¦)B«{‘{ý朋äŹÖQ®Ç(:…ýƈ·Ò>ñ¸¿ù #߿Ą±[¸oÍÄ" !^nöKü5~%7“v0#·n˜Ò——K¾˜=ƒOCÿ`p?5½ú»2{rmÇMd¦é.­¹@L|âôÑž-rËò/—3ÑþOþ©-ё߽Â/mï‘°›Tåk@ë×bÿ§ÑG”™êÍù˜„™h)üa/zn±lýubI·3^¼Át}ó-eP³-ô\í-¥„)—ëôîQ™[“>å»uRÞ?-Ö|OŸ$<(=ß~¨{gÒd¨,Y„ý ‹',Ç× D—³oµêH×É•)ô͇ Øù»3ù$WOéjó ô%[òu‹ühþN˜‰‰K3>£gÔtföþ„²Çáý MZ!„B!„B¼\²tØÏÏ’%KrýúõgÊÇáp`µ>³ÙléžZ›¿U´8~Û˜ö³M¥'ek!ðøy‚3ü¤ö` à躸܌ÎÁ_!„øDßdïúÕœˆÎØî–‡¾<´Uåæ# .%[кØmæ6ŸÍÛ'|n±qëÐ|FÍùšSjæ¼Ç„úa¬Ð—á-vÑ}Uâ€ëó('€%ø&-¹ù(š‡7b-|“‡ñv£ÊçðØÝ‡³‘ ¿Ôx·åÞLŸEÏïѬÌΟ‹Iæ¯û#->Å )³qMiÕ]bJCrkqâøEŒN…“gºÈÌÞ]3¾2ÒsÏ»,ÿš˜Ûì]¿šcQO>ZºúS·L¦ágõȵ{-I.“³õäT›7)p«ú5øˆeó¢%ÉÇq—³G.Õ© žÀ”¸oB!„B!„¯®,=t`` xxx¤8J¥2>Ø›ðÇf³¡T¦£ î”oÞšzEõ¤0»_"šüµùøÃ*äÌÒaö#ÿóg¹ñ ¬…x¥(q¯Ð–á ·qäœ7Þg²iVziž$Ñä£Þ×3X½û$Þg°iá(Ú–s‹í´u•¾ÿ £Î÷+8zn#½Jh@éJ™ÖÙ÷÷~Îz{slÛ<·,kÂ+­4ºJ þç 5+Gƒþ°ý¤7Þç³ñמ¼™ýY¾2œ8çôæè^ŽVCæ±qïI¼½½9µ3û¿K~  .L—uÞœ›ß„qÅÖ¿1šƒÞÞœœ^÷¸<ÜêüÊ ïÝ|_!™¹_5h6e?ÞÇæÐ¡x2¿ެ}¸pë çXPº¸¢Q(P$ª~+w—|FÃö¿q%ÁàIÓùß±%šj¤qžç+Þv•37®ræ^$Î^â¦ÏeBâÒÊoñY}3;7ß ÑàCu¶,íÔrÖo^Éqs.6/ûdÚYuº­?ÂÌÚjU'qàüZ¦lJ¸½œÖy”©ß¥Ö–s)Dã³Y·ï Þç°iFOj$¼ßh[J·r´½ˆ­GÎqîÈþÛ‰J‰ÿZˆòYËa݇tªì–fÝ=MxüÞš¦D/6YC·é?}%{Nysr÷J¦ö¬AÎÇóC'×WT¨Åø#çŸL»œV›êZÄÖ½³÷@"IÛ”¡zâ²¼äì!çØÈ[‚\ÉtmÎÖ“smÞ-ìÇv®dö¬Uø¤4º×áÀ¡xr&ì[ÒÏÉ~<­ö$„B!„B!ž»,š Õ ZÐ IDAT M´®`mz½ž¨¨(4šÄ¨¬V+nnn)ì•„Â m¾¤S7\Ê|Ϙ†ìŸ=æj´ëܘJ…r`P™ôÞ΢ŻñólÀ½“×CAÏŸÊá»™ÃÙ[SóÂDÆn¹;u£¾<Ý~ê‚}þO,~T9Ù|nÁýÍþ «=¥©Z4nüö-fþæ«D:@»V û&o«ÌQ—o‡Ôãü„±l{ûÄQW¦ ?}®eñˆe˜êw¢Í[¥Èë¡Å~‹Ãkæ³ætðÓÓL* kÐŽïW&ŸÞD๭,Z²‡[Fª<ø®O¶mˆáÝvõ(°„¡3ÐxØWäZ:„™Œ)ìÿËôä§6!ü6byÜt¤ ¶Â7Å·1ræ}ýÐ ÃÑó^/G^´ÞløsG-(\ Ñà“Ô/ëEv½‚¨{§Ø¸`9‡¤5­¤—"Mè×§*¾s§°>äm&,à6+šðf²×mk’ä¦ÎY…fŸ´àíR9Кƒ¹vhKþ>KˆG&Õ½x%(s4`ÄܡԿ·…ùãgsßõušuëÆäIA|ôébîØsÓèçULnÁŽÙXà§£JÛ¯º¬(ªº²,@M¡¶S8š}˶p:XKùÞ±¼W.­ÅÈ?"È_ïSzŽ\J1M z­ôÊމ4±y—ê:•AA[™óÝ"¢Š6ã›þ}˜jô¦ñ ÃDd`(šçœÞ)Ô•¹h®>¤²õ4so'®?M¡Æ´(iáøÀƒ< v°æ¸‰_¶ Üijœ6Ö{¬êÝ–ðŸ—3\?‰Oî!ÐêÁá±·wp#$Mí¸MéL[RPü³É|sz ¿Z‹ºb zwëÔïÏÑxÐQ"i7.%é:w9ý*<àŸyøãžUÛ|Íä\ òF‚ëz•Ý—õ ¿ºcgˆ1¥\wNQ—¤ëŒŸ1ý‹?ǬÁ­jzö™Ë²ÜŸÓzÌq"b%î+Bl{:£TÚüñ$×b7%¹©R8Dµ%צžç jCì½$Îéâ©~Áfm^Jå¢BIv¶“×;ÆÉ6oôÝÂ_À¥Ù[·!¿3eLз¤Wšý8v{B!„B!„ÿ†,ŽŠz2¯ž»»{*)S§×ë±Z­˜L&ÔêØS¶Z­¸¸¸ ÓéœËÄÁ…5óØVêGªÏ„}ÁØ…þ.>;þäïK~D»U¢ó n´©všÉö0oIqFwµ0ç§…\3)ð¨þ›V'ÿοñ³€¾XMÊØ¼ù㦛2¥|BºBµÈ¹eãF *ðßlG“cÙúÀ†-2¥}ƒ­?gõæÐ½æ¼S97;·=À†Ž"5Ë¢¸¼ßh#:ߣ¬:6ßGàõ^?¶iÂ)ŸÅø&Š¡*p-ߎïëØ6m æ¢þÿúÓ£õ]F-¹ŠPf¯Nój³äçï¹iÂL!§ö½þ×4m©Q@ËÍ›fÐä¥Z7no¾H˜=;¨³S¥Bã§ŒÆßâFåχҩeÎÏñ!ÚÊíÓ3sùUÌ9©Õk·<Ç™ÙçˆN!Xåp€2[:ô¨MèšÉ¬»y’–ߌîõò¼—Âuãõª½hÔ«3.ÍeÔÌKD¸–á£>ÝéÄ„m™Q÷âU¡-\›7ÜY=bÓ½MÀFö_ áëzJô*ÐkG¿Fnò17`¶ ¤àމ|\?+WÅæ“§ÄEz6Áá0;Êœï3«[i–t¦Ûø³D9€Í»¸¤ØÌ´>ŸSñïœs­Gß4Òœ‰+£›Û.zt˜Šw Ài"+ÕeV¹òäT&"ë]§uÎiÏUœ„&;ù-Ø:v#WßÝ}ûq¨²ŽÖes£á>wö%äóZ¼]Ø…cWÜ(÷V>BÎ_Â¥buªäQá}?Uß̃éì®Dó$¬ÊFofñKó(|ñ%s/D¥úz׆LÝÞð©ýÿü˜fS¯v8Ù†1"n^æÐƒŒì=į;YD1n¼Šå+Ö°ùø¢“šìÛ7±5‡§ïšSüt4üÊéJåž]ȹq8ã¢óÍ_¨;{þ¶ÒºK#Nî]80EÄ}_[£Ü:ŠÕ} —Û¿8þ«¡ÈûÍ(sˆ©GC°;àÔšã˜j¿C‹ò8}*°qÿ.ÑvrçÎ=Ba ¶ˆÔ–JóP•p®-ºœ¯úýÊE°ëŠÿÃoeÊ’C}”hÏ´Û͵*=ø¢‚™ßw¢ß– ìÀº-g°nþ“ÖÚ„çï1ù…Ãa'i|"õsÎÓ5æ}ÜQº£p9*¿Õœw _Fãµ]œ‰iÅ[Us1ívê–°pfÜ\F §n9GV ^1;çû<Õ¬ÐSöóߘ]«8Jÿùl÷{ê\R=ïljͧøå»¹\Mø´uç.éŸxÕNäù?éÓd)E aÞèê(+tfØÝè¾ák:û‡‡‰ÒÛðß0Ši­70pDoÖµšÀù”²N«œJ®¡ûY°b;ƒvqøh;~š<›Í}!hãWLI%Œ§ô Äk9‰ö½GTÂJÔåƒfEˆ9ú+-z °\ÜÂK´¬€ë©D¥˜iiÞJr¤Ù–rðpÿnž ò¶‰£δ-Ñ5^Ç-r ÷ÅÇyŽ•›hÝ*a¡­ßÀáU…Â:ðuúfPàZ¼ ¹–0‚fæè¢ÝŠ¥r§u#*çÞÅ^Ïš”u\`Þ­PºR¬ÎG4©QO…›&'9Ô÷Ÿ> ¥Žìž.¸UøŠŸ«ÆH©Ae 2ºÄA`d “§¶?F|]Eݱ´~XªUÆpcW" °bŒ²Är8(âÈS¸àͦR»lN4V+JÏ‚h"*ò¼;€A- ¡Ì7W2fê @EηÚóžÚÊ•a˜Æ0’”?µë–0¬4dÇ` <&¾„˜Âðês઴sïYë^¼2ì[ØYM¯/;Ñvô\z‘¾{Y>c³wà–×"¯ñÈ”ðÆ´B Ä?d?M¸Ú#nxÑmÕIº=uDr¸ªœJóXx@„ÓSÞÏž¹ïã·ýhå'¼?)=ç|Sº‡jñz÷üØóª•Ë.ä&çÎÝ”0¾u‘í>6Fׯ@Î¥©¨¿ÅŸgN¡¹¡âu‹“=¤.eU×™}:öe™ØÞDMÉZ*Öþ¾“=»0¸í>ýëv²AÛdÏ{ﵯ sÞGr"cí’g7rïâ5Þ `X‡è»Íeaï´žwßï$Ik¹ÅŠŸfÓrõ—Œêö7’ÎWÿXZå´?âŸñãâ7#/.ãÛ¦ë›KKDP–Ô®›Ê¼î ¢E' ø¹ÿ ‚®àdvM²Oƒ–¼æz‚cNE€ÓºÔN¶%áÂS„žv»ÑbÈ®‡°{„$ºQ¬„Ý }j[äC¢U¥È媄ç¢x.å¿fî”zø-îÃÞD‘¿H'5ZCžÚø€[¾"%éióéã|›J¯äÛàÍØèÛœ>t«I"±.ÁµÈ”fi;ÏŒïæp9.Ðé°Etã ×ü#Ò=¡AŠRkó7œ«A›ÿ&¯hÃô™“¹Õ±/«ý2^º4ûq ­ö$„B!„B!þY:ü,Á_»ÝNtttüÚ¿®®®X­VìqCCÔj5Z­³ÙÌÇquuE¯×§Nô¬[•›:ŸFÍ;s™ø³av7ªöE‹÷6qëÀiìÝߢÔ% %£O2ã¾%ù8Y³/+Çg½b§´à°]æÐíiT1?7ó–Ææ=Û&ЕiC¯æ9Ø6y2{ï™PnŰþ…“©€Â"L„îÎÈ5O?ÀM3ŒžÆþÜ<ÄeeGª:б’žëë¯>qEì´ÍOÓP°IO:–?Á´)p#ZAîw¾çÇ6œÅÈÓj€ÃM¸]A^DŸŸËäã¯óu×ÎÔöÁþ ”}§pÝ’Œe±G="J™Ob€OÔÆDÙÁþŒu/^!v".m`âW˜¤ö P¥z4ïÖ¿ÌÀÔ²=ƒ£ÁO Ä/©p!_Å*6^âdÜË!›=¾O²E†ÃmþêÑŸ-I‚J ¡÷ÌØ²¥&þ¶N¾±%+Æû:·FàÀüè&&ʧãœÛ0ûzúÆË©‹´gêÔnxlÇ€A›9z# ›ºÝV×çÓøC†rvÇ5Ô}Þ¡Ú…ÈtŸ‡A(Ž<ÀãÝ·©þ¨2nw·p40aÛ·rrXOFn°p¤ôÛLìóïmûêéúJñ¼3{Œ› ¯æã™øîiXŠ_ܧ{8ç×­æJ¯þÏ©¤`Àtu!Ã6cI÷t<³)óŠd7èìJµIï#J|Ô/ûy~í;•3ñs +p­Ò_¿®O«Šn;šöJ¡iß6ŒN¶¥Ôî÷´Û–‘AQàYìÌܠƳ€gšçᇻÃ=:k¢¢º“/‡ ðäÍ•g²aâFD‚¦ô)ãyMÊì|›J¯äÛ &¹8°-àâ†K2ÍW¡ó@‡cÒ·L8{hŸ“/+¤‡“mÞÉ0ľ0è°Ù°?ó%N£/ìsŸà[!„B!„B¤Aù¢ ðø 4áÇN`”©ç“ªÔöuXˆ !$$„0¢­pDpåÐmܫզv)+çÞÅŒ•Þ ­=а ¨³SîíÊdK®#7\Dýfjó@£T¡ËæE‰¢iÙßx“C—””¯S›×u×8t=Ú‰u•¸¸»@Lá&J÷âÔª™?þí»)‚ÐØz0ÅDs`Ž$ôâ:ŸÊEóOë“/•*Oöº%a <ÍÑùx·AiÜU ”n%¨÷n‚Ož$À³׽xE(ÉóÑöïŸÍ‡y”8¬áÜ9½‘YqÂTöRñðÜq4ÕiW;w|'­ÌV‡çþÁOs'ûæŽñÆ~.ÙòSµ@4·}}ñõõÅ××Å[ýóãGäU8œJ“öh®]ºÈÅ‹¹xñ×b’´Û´ÎY›BÎ)ÓªII®³â÷•º† P¸¦Lî„OüÃ]÷·èüIL>Çð3›¸{ø,Ñ…?¤CÓ9À݄ݾÃȃ»aØìÙ5qç]êò}Ÿ7qO&0”öyg&[n^«ó.å=~e+0z|Їø>J!äˆÆû÷ᬠ*GŸa-(˜éeKƒ-‚€ppÍéúä —Ò4?¶KX»ÿ'OžŒû9ÁuK9is§n«Š¸9‘}Ú÷€-Cm)©´Û ÿg w{‡Ïêç‰?ŽÂ­2í>Ì÷T~*·\l¡<Œr>jº4ƒîßì£H·¾ÔÉžð>ÐPóÓwÉÿø XáFÅv­)ÌöûfæðógŽ6•^™Óc¸sâähH‡:¹ÿa¬ÌCÝÎÈÁuŽÞ~¶é“÷ m>*¯¦|ÓVϲÿ dí½g—›ùý¸B!„B!„x~^É0“ÑhD£Ñ R©â×N‰ÕjÅjµ¢V«Q(F´Úb9"¹°õ ºõeâ›ì›>‰ÝŽP¾ýwLz/†GWö³s¿?ïÆ=Ô4ßÛÇŽËÿ£íÈ©|ty)ãg%ÄÀ‰Ã4ùXÉÚ¹±ëÎbyÀTòIUº÷uyõ ·;~Aeã>&ùÅF>¢/odëÏé.;šP-oÛwù’RXÇzw £çvde!t[ö1Ó.efÈ…r½§ðcµûÌùv,BRê=í„[ÎËFN€v¹žow¦÷Ж¸Ö;)ƒ'™>r ïÍhB¶L,½Sìaøú<ÂP¾nÊSí /Û‚Fylœš|œ¤§l>Á†svÞ¬Óš×Ýp("v䪢ÀÛ4¨y—C§î$Ú>èÄ=p9­¶”t¤z2§áDÛ2ž™ËŸÞMèÿó~-³ˆ½þz*·ù‚¦ê1ªÉQ¡dN5$˜öY]m8M+Ê_{ïãVåcº7ËCÀêÁl°C&Æä_‹‹f`‘Û§ÚÔíÌ+_ÆÙ¸¿q}²O§üM±íëØãíOŒ¡ßmE£2|çgóýç3AöÓž­Í'¥ÍS†<ö»œ½›úßÃN•+“ûq!„B!„Bñü¼’à˜˜T*V«ó#¬V+ …‚˜˜<=Sš²ÑNäÅUüüíª'Ý\ÆÏ§—%H³‰ÃÿiyÀ¾ÙCÙ—4…Ó­œ ~ü0ÑFÈé”ó±ŸLÿã ~eöeñßÅo¦¶or‘ç˜ýíW‰?‹¹ÍŽ™ÃØ‘ðÃýûãþÃ¥9ßòc|b#wö/bÂþEOg¸ƒÑýw$þÌ|‹•ƒ$8X*û¦ëKøñ«%©çƒè0n3à óFL´Ë®CÉfw>üxÓx•þ‰Û¸÷tù{êº9ˆHrmlÁçX÷ë9Ö¥päô×½xYn.¢__7~ìû1=‡5Gk‹ÀïÌFtʦ6ÀŸu_µ&ºïPz·ýžFÙ-úìàç/&ÆŽàJ.Hëˆääøö|zï¾íøÃ:¸èÞɟ3qÑÅØÀ§3i^Ø9§7¿ÅôÿÑ‹1ýºós£î]9ÂÚièàõ3¿ëðGh=馘ì9EûÆ8r!,6vý7 ZÑó츜Úü­&./ÅêVsé6¤5ëº,áN¦-l©Æ³Tu*¿yƒ‡éBÅó ×íåEÂ~N¡P#G”J%:…B‡‡>>>™r<ÿLÉç¿MI¾¶‹XPa-‡Ÿy®Áé—‰ºðg,™ž“m'sñYôý ”9ñÛ¦o¸öys¦\z ü¼ª1zó$”ƒ>äÇci¯sœ2Ok–nïÁ±Íøå² M‰^¬[ß–Ã?`¬·Ôí«êYÛ¼¡Ú8vÌòdPƒ/9˜æ-'ý®B!„B!ÄËÀËË+Í4¯ä`WWW¢¢RÕ•ú¾Ï…* ä£B6îî_ÌïÞD|)ÈuBd)v,&–—¤#²fÁÞAüÔ´8¿]ºÄ=LéúZ+ÞŠÙDŸ³é þÆrà™°v®x™B!„B!„B!„BˆWÁ"l4Ñjµ¨ÕêøQÀjµ­V‹Ñh|ÑÅB!„B!„B!„BˆL‘¥Àõë×Ï”|ŒF#jµ³ÙŒÝnÇn·c6›Q©TñSB¿LTy1dÊjx(žó‘¸¿9€)C“W•ù)ñ¨Þ‡ŸHMjét”ë1‰±‹£ÍŒÃ !„B!„B!„Bñ‘¥À~~~”,Yò™óq8X­Ö§>·Ùl2ô¿ÊNÔÕí¬\wœ §/‡ÿºªt?xiÝ‹“ò»ZòÔŸ¶­Ëà’ìö³p¡Ø7»ÙÖ+îK é¶Èú²â5KrºÖfÀi&¶QeLXG*Ü+ÎW+ΰâ²?+î㇯ß#—&qú|ŒdøV^ºÆï+gòáëž$|ÕJáQ‘†#ÖñÛ±;¬¹|›ùÛVòyËò”ΧÑÕœÍâËþ¬IöçCë{<}*šâ4]v›åsÞEŸÒy~Òˆiö+ÿ–Ì쯄P‘«ývVŸø g÷y÷ SßÝ•‘s|^x¿žEËY¯ËGÝÄ¥bsš~¹¡4bà¯>˜Q‘­ñ &üÒ”è]¿±hI…[ö¥ëò’¸4ûˆ5×L *@ƒiÓ»VÇçŽb¯ ¯Æ}h9n Ù"ëòËÎ ìN¤±Ü^ò)—Ð%úóC®T;Z5á²_Ò™I4xu˜F—*ØŸÊ7‘† IDATy¡PïçW铉ý•"÷àsñ¢ûõ¬ZÈzåB!„BñŸ—¥À¡¡¡‰¶3¬ÕëõDEE¡Ñ$žwØjµâæææ\&ÊœÔ0˜z&2vË}lúòtû© öù?±øQeÚunL¥B90¨LzogÑâÝÜ2‚û›ýVÿ{JSµh6<Üøí[ÌüÍW‰t(ÉözK:7«F±Ünh¬Á\ùg 7_&™§úÊl¼Ñõ;Úê¶2ù÷g¯•|9LžTïÞŸ–E4€›ºÛ‹<åÊJÎ_áV޶ºQèØt¦o¿ƒ-{ešwnMí’ÙP†ßäÀê¬?EÑNÃé¡_ÊOs}ˆvÊ\4øn0oŸ™ÀŒŽ ÿÆná¾Ô¹ªÐ¬}sÞ.“­=šÛ;gðë¦ À†²4ÿº+µJeCy›Ëç²æ\h vñrRzŸªæML°&»-²¾—âšÅœgE÷Ö/ìðñuô0'5Çô¡Ðù!ôýb÷ÍË8ø=+Õ%ŸÖ‡;Ž¼×¿)úsƒù®ÿ|X@±ÅõÖ¿hñe-¶öß‹Éë>¬¥áʰVLZéûwÀÖÓ¨·náÃOßfî®õD:‘&ìþN6ÏÙ™¸°.åøxå×ÜŸÛš¿¯›ŸGÑÏè3ð ”ì÷_üyÚ(ôêQ!â½à~=‘¬TÈzåB!„BñŸ—¥‡¿FEEÅÿ<ËH]½^‹‹ ‹‡ÃÃáÀb±àââ‚N§s.{0g÷ÞÂóÍêä‹#ë‹Õ¤ŒÍ›ƒ7Ø"ïâ³ãOFÛ—~Cs·øG´©–=®‚è Õ"ç©9Œ1”!SàÙ°uòª;Q÷¯°ñx¾ïÛ—ïgž#÷{í¨—/íØ¼ ¿ßƒvyóǼƒZI¹öPNü>œü‘Á£p*4š ®épâø¨óPç³.Tð]Äœw0)óñNÎTð_Έþý¾ü¯wîFí\VîñÆRªÅõ±g*sTäÍó˜øÏ5Ö\öå¿—ði£"hâS•îo3¶m^Ço'ýXqh7ƒz×$[¾wéôç\ðgÕ‘ôiUœ'%H| úÒ4±†éÇî°úäÆNú’jMÿ`ᱸ©D¸nNÕKjuûÔ=»•†EkÓïĽÄÓa:Y'cZ¼FõoW0ûœ?k.]fúÌ~¼–C•v9’©£Gî5y§º’ ó×óÀ (U(ˆâê”Ö øb&wÌ ÌU‹EáêÒÍÄ~ á9ÌŽ=!Þ|ŸB:PjmÜÙ¿š=Gž|—Y¸÷..¨Î¥IæF"» ´t]ÌŒÙg1%úUqÞÿù ì͆ëÉ=“r¿âÌ5P¥ÙFV/jgÜEs©>•…—ýY6«!®qYêÍgéåÓt{-™¿¡’»òªÒ¾öÉI©-¦Ù†3ضR+£27µÜaÍöJx«jðåaM®‡œhGÉSzTäÝá«™~èk.û³üÈ>ø É4åOí•v[H­ŸÊhý:sžNµåä)Ü^£ñ¸¿™yÂÕ'3fü”öHòÿ€ÔŽŸÂ=èT§Õ¯CÚm̉úsê3r½Ÿ¥wæ÷†·^`¿žDÒ²dôžsæ;Ò™¼•G‰ÛÛS˜wÙ‡¯êfËWEަ Y|ù Ÿ¼–•çùB!„BñªÈÒ`“É„ÉdÂÝÝý™óÒëõØíöø°Ýnw>ø €ƒˆ‹ÿpE_-îa„žb5Kc>{ˆ;&pý8çs—›[Ø5ÎÜ·ážÓ5~0{Äy]ÀX‚®qÛ莗glÕèù›¡Xv¢ïzs#Ú@.·ÔŽ96tÛÓýí`VÍÚÈucìdci•…žM;R%`+NÆŽ¦Mëø«’bÍ{òr;3Wœ'ܪ¯ëâÒÐ;gŸ“rsÎÝ÷šú9'²êH¹ž3éUe#s'®#ÏáŸs>ç·®ØÓ—8´ù"†ZmñsÍ,CÉFðœê´¢œ € å©sÜöœÍy\5kýêËŽh;û>/9碋Ýs¸@sËVÛX¢8¼tæJiTþFPʹæ³4òaÏ¢}$Ù½¾ä¥h>cºãø÷#øtجؚD~_3¸ËÍÛÇæ\°µNº}í_Gó›Ëyr¾—Î?¬ãµ.e8¿p s>^Ì¥{†ñî:Y‚s6òÏs ·ÝÆvµ—9fOÛØUÇBô÷¿]Çì\_³ÝÛ¸®Û¥cî–¤m!a×$æ¬1Òrü{Ôò0`ðyŒ>£ŸàÊwï°ôHÒ¿-ŒˆˆˆˆˆˆˆMwôÐf³™Ò¥Kÿ«4222HNN&)) '''¬ÖÌ›«DGGãææ†››&Sþ·¬‰'Ùh¢O³Š¬Šp¡iöLàX¢>m;¶â¾²ÎXÒÁ­¼#\¼ñ^KJ)×oÞZ±€ ïš­éØ¦~înq¦´»‘ö ãTÎÝÀ!z3QÉ7î ç_.UŸ¤W£Ë¬˜ºçêÍdÛù;–oÃsåIÚIâÕÓFMî%p7U¤ûè-ò/׿ôÇéÕ¯Q?wdÌä½$[Uk9cü›ao¤ÆïC9~5%ßê‡ÿäP®XÀýQž²‘³“_þu0x2ï«õ¡W[œO¿„ؾýe6Ïå‰V娏åIz>]œ Ÿ´dÒ×'3O6XµðŸvñÆ[/ã·v"g¯%vf:ÓÆÍ'Ò ¦Ó%y¨åx|Ö¿ÍŒÏþ&É ‡âñðÏP¥¤#Û.§fë3—ûߢ{c Þ{ši«Ã±›ÖüƒyÝo<^€ Åm·ËÙ|Û6=ǘ½D²k•죢b7»ÛÄÍýƘ̩€=$ßÿ8£jÕÃÛ´• }LFöqmj\wÊÓ~úN-˜Î¬¹a¸7z‘ž~a‚C;†|r£[q\I 61ë•Ì$G&nxº˜2Îì}Ê¿²†™oW nÝ@f-½ý„ »®p¥ÊË#¸?â†nÌöÜH‡Ê/1pH5ö{ÿWžÌ£ß²Íçk¿Æä³®¤•·Ý¡[ÿ&îµ4¨äLàq/ª>Tž¸€@œê5£f)N…–¡V“Ò¤ï_ŹC°\ # ƒì}æD©fÍðŠ_ÇŠÍá7Ê¿õ«/ÙÝf`_»ü»ñaÀ­m·}5®§™F\xèû s¾Ú@F»ÙŒùPŽ`ö\ÆROÑ«§/3äBÖGÿ:V¥ÝÔ‘”ß6Œy"ò|öoîùœéæëŠ}}zj-ÇSÊsÿ¥1¹ÜCéŸÿ-ÇÓªñ@m/Œ^õhTÕBк­€Á„Éäpýјs³³ïóI'ë\,ȶní*£5êo6î7S©C |L€KMy¼Ñkp&ÙβåUÏÔcü>  Ÿ.>‡Ùè‚w•F<ؽ/–‡ëy¼/ÿ¹`kºT.hû¤ò›Ë¹ëäLé¦ q‹ÿ“•[²®i{Y¿êÆšVü¯³ÙÆh¯|>»m—ÍÝ®:¼¿‹f/Ø:×u›ë våSt œv,—×òí¤­øö[̈ÖŸÁñýûFDDDDDDn;zpa¥§§…££#nnn˜ÍfRS³o-ÉÈÈ ##“É„››©©©$$$àëë‹“ÓÍ¿~Ÿ¼“݉hßÞ8ÿµ„gŽNx¸I‹‹%ÙbÀµBZø9ÀyÛe58ºãîATl"8QºA îq5ÞØ½r3–TâCÙûÓ*îö"Ïùˆ_NæW'üÚö¦Yܦíм~Ëžü-é‰$DîeÁâûù\Oýš=ûð¿Ü’öíêqaõa"3\ð-[‡Ëg K¶’öû’úóðÃ>ø†üÍ‘+ÈÖJØÏÞ¨ÇhÓ®§$ÚXŒÒÞ)\ºd+/r7°’v¥ ›ZòGTtZ¶¿Éˆ9O®xsÂ@Ž–©$÷=éMÀ´3™7js¾ŽøOz:Òí­WiûÑbºI§7°næ~ûëÙsº!÷}ÏüËå^7*ÐyùY:çzo0ÞFˆÈ|•xéJž;ßn–¿ÅF¼Š"on¥½ áWR³¶°™Ô¸hR1QÂÇ ƒ9†¨„¬)XI‹ #‰s7BÌÕw¥eä=ZÉH½I­³õ™Cf9®\ .=ëEÄ_ŒÉûýYdm7{ÚÅrÁÆøÈ÷ž¶ç´IBxÜMûÝV§³kSjiİ&àFPÄÏÙ¤w¯É=e8M2x¹e= Ä„kqw øäe?±ð#Û¹•ó®Û™Òs u>ÛÁž¸‚\ãH©'ß ^Æf&ïŒÊ2(õÌÇô®áÏ·£vî'Î&ÀÑw//,‰q¤’cþ^Í÷æëŠ}~ˆ lUï=µ¨áz†åûýq2ñÜ£÷àý8•M'øm_f™]š|Á¼:rí+'± ;0`ìÉçëÒdVît¦dþÖ¹X9lÿܲ³m,— \ºËä®Ô+ñ —ìL“RÁl[~”4ÀÃŽ²åYϱx=1”Wûw¦Níò8EŸæd@éY~uÍ»ó› ¡6Ö)À¥pí[>Èo.ç®S7>spÏcM3|cM³+ÿ\œ(™oÛZ×¹Ú^ùvÛ.›.¾¶ëXðþ¶ïóÍæ:^ ßnߺnÌ«=¦åVÁÆ\LÏûÚ¼bºù¥· "ÿšÃ?#åá„åüu(.¯¯‰ˆˆˆˆˆˆÜwe899GGGL&S®ÀoN×Á ’““ó cçŸñ<ÙÕȲyW©éal_±‹ÚϽό'Rˆ:± ÛBimÇ—Ê-±ûY±éúôŸJSs,gwüÁ_g+RÁκš/ÿÍÏ+ê3¼w7'Ï¿y9œ«Ò¦ei\­O2dB»Ì÷Flæ‹/wÙ™¿…+±°þHzõnÆ™/w°aîO8õì°i¯â„•¤à]ü:÷aÉVHcïþTF´-Ç©ŸæùÜCÒƒY7w>®/teäôW0‘HÐêY|q)ÊÎÚ‹üû׻ܽ)QÜH¾þ7&ï x’Jp\z®›ŒŸæ<âó7¿žIÍó5XH<ºˆú/âGoJׂÇ^ų³~$íé'ø-¯M¥G\½]rÜ(Í¿\fs4©œauß~l‹Èq+ÕšFBpÚõ;¯V‹%ÿ›¥¹òÏ¿«Š"o )ÑIàV Ç,Õ4¸P¢^cÊ$æbLíŸbw-à¤u:-—ãB'ñ½°˜­§Sí.[ª)w=Í•^fج7q_ñ3†.#0(³CU:ÿÞ†Wßžw;[H½é\hÏÖ|ש@Ž^ Pík.V€>Èg.ç®ÓEŒ=âó\Ó<³¬iö­WÙ—7Ùlc[ëúöʯN¶Ë–„÷eÛu,xÛùùfsOËÿç¡Y½ëzžíÑ ï¤ 4æ‚HãÁÜæù»­:äÅ…Ê}ÆÒÜ-НWéûÌÏŒùõ|ƒÈ"""""""…sW€SRR0™LddØ¿·.##ƒÁ@JJ ÞÞÞù_l0zn;Ñ×þùn&fÿ¦ì_å¢Õì¼úé{>fðž,?J bþˆ÷¯¾HåøŠO¹"k;É9b=‡¬¿žwäö™¼·ýêË|ÊñÍ·òL/,Ÿüã÷|ÌëeãÀ·Ã9píeÌ!V~qˆ•y¦šAèêñ¼µ:ëßY‰ÏÑé—÷²ø“½,Îñîc_¿ÇȬ©…®fÜà<3ùÌ‘z/µ§Ä–™Ç-<©Ñ³7e8ŠÓ9ÎiÄ«qŠíýŒ‹)y½6áÛé>fáûÎ/°-â a{—°èrIl9œš\à’+ÜJ{aä2fÀPüZßo„“ö—+ÕúgÍS³B"‹v^{.ª3_üš·ZòUÿÄæY_[ùÛ®ÃÒã…Í;« bî ʱíZ”fßÕgï|ãÕæQñûÇxwÅ&.òí:TcÓµç"š*ÐôÅf/}ÍÉhs!‚T9û,•ˆ‘òj[:=Vš#«®–óm;–+@»Aê[íò)F[ããt~7Æ­$/Š6±ÕÇnxÕÈÚFº•áÃhݧ>þ+‰1Æ’Üߣ9N±k8šŽ%}'þçŒ<Ûõ1|×-&Ê ûy´e ’üÿàbŠ.gP²öS´¬7‰#;¯îâ2úPýÑjpåOBãÒH²yÍÛþ•:вr"²|U"³_/~ÿ c×»ÞhcšM˜I›˜iLîOø±d¼še¯§mvö㿎pÏ—éð‚;©ÓOK…ûH~õYÚ?]–+[6v5peMºÈù£säåYà|­©y¤ã’»¶Çª=s¸ðmc‰ÜÊÆC^ëÑ“¶Ê²p9¡i([íåÚâa*r‚_¿ü™ƒç3·…Ü«P¥Ô ‘»MøvZ˜Ï\p`…ujÐ×…kß³EÔyWÿ½$ô*ÇšÖ8ÛšV˜1àTÉVÛ^×ój¯Â´_¨u,xÛóùfkwÇ·ÎOù¯óÙÀ·k]wÁz:õÁÍvä”çzånïï6çXã5¨ÀÁíø­Æ|>:™G6½È–°ù0b;Ü•`³ÙŒÑh,Ô3d-–üwe½jÓ¦µ'–S¸ \ö1硃èX1û†´sKùø«=ÄÞʼEäŽ`µX1”oIãfç8¸÷l¶×‡¯©hj]ŽßË<ÊÒPŒšY_c&.pQ¾0`î J.ÚI¬Û½Üßù*&oç÷I‰sÐdÀÇôŠú‚ÃÉ•iòê ª%ä¿—À¬‘0UÂ/Ì‘îÚE²Á—&9Æ‚=ìê =x £Þ¥]e81÷$)§ÖsÖÚ™:eعþ¤Í|³…ýöåkÂÏá¢iÌ— Xz‡‰ïðÇøáó×¶«lyHö'„Ö<9äMbûWìZ¾þ&M¼ÀX³95*ãHpRŽuÖöz—‘ÿ:•Îý…jß[ÕÉûg±üPg^ȶ¦ äÇäëÏ4°·³}f†ÛÑÆ6Öõtî³Y~{Ê–jGs+ŠÏ7[ëxñøˆše-»­rÅqä£öŒ ™ÄK½òz//ÒÂâ?­?þxèæ¥tÛùÛ®C!óÆ{šso“Sø:À̦­I<•î=ÆÑÌ7èÀÕ|÷ÒX6§‘ìöÏ~D¯®ï1 ±§v²â­,ØR¸ãÝæê3RYÔ« NäéžcyÀ|ž“}A$jE IDATÄôÕÝyï5ûÛ «íb³msŒÙŽŸe/¿¹hÚ$¿>Þ–Ø„ws¶\^ÖÑNÒ»gúŒ/FÒÖ¾Û›_Öž»¼3óç;Œó!}ú¼Ë çœˆ:´‰¯|ÈŠÓi7Úú垤Eûñ˜c ±A{X7ì ¬:‘¹óÍžk ÞT¼&ÏåL!¾M–×üµ‹½}r’=ÿ$Ю}$‡c2ß¹À¾3P§ò~vK¸y@îõ«ÛŠj>Ø3V Ãîñi&fÇBNó5ŽÌÇ?$˃\ Y¶Œ3ó˜1¬‡¼Ã;m!æø66~ÒžaåÇ1rÄP^ïµw§äz»íõÎÆ:•W`Ξ:ܪ>H;ÉŠ—Û‘üÁGtêþ!ŒÁœØ8…‰_4æÝ içœcðE»Ú¸ÀíU˜ö³§Žy(’Ï7iX±‘GÎ]··a]ϬÛ-dÏgd9Rî¹OèUû8 :, <ˆßÅ‚±+iöÅz7ßÉÇêyÀ""""""rK¼½½­7 zŠˆÜ³}¹Ã`0àëë‹ÑhÄÅŃÁ€——‡.’üBCCm_ô/9TÂg«_à`÷fÌ;d÷°·ÜZ®ÿ_L”xn-sß=͘GßäÈ-Þ<%""""""""""·O¹rål^£°ˆÜõî´ðÒã·>@,""""w¦gkÚþ‡ºˆˆˆˆˆˆÈÍØ¾+€¹“ÅM¿;u§íZ®ÿ_´XDDDDDDDDDäÿ3ã]):ZDîzwÚÐ""""""""""""…aÏÐÚ,"""""""""""""r—PXDDDDDDDDDDDDDä.¡°ˆˆˆˆˆˆˆˆˆˆˆˆˆÈ]B`‘»„À""""""""""""""w €EDDDDDDDDDDDDDî ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆÜ%¹K(,"""""""""""""r—PXDDDDDDDDDDDDDä.¡°ˆˆˆˆˆˆˆˆˆˆˆˆˆÈ]B`‘»„À""""""""""""""w €EDDDDDDDDDDDDDî ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆÜ%¹K8Ø{azzú­,‡ˆH¡8::þ×E¹cØVEDDDDDDDDDDDDDäΦ# EDDDDDDDDDDDDDî ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆÜ%¹K(,"""""""""""""r—PXDDDDDDDDDDDDDä.¡°ˆˆˆˆˆˆˆˆˆˆˆˆˆÈ]B`‘»„À""rç0U¤Ï²ýüÞ·¸Ò`Ü6öÎkC1Cat¢ÒS¯Ó¿Ku\ò|]\ê1jó!Vô­„C¡Ëõ¿¦0å7R¦ûbíšJc·[™ …ê/{¦Žw7ê½»˜ï{V¸mz•kC&þÈò>¯æ‘cl¸7ácÿ@w/“Ï/·9úÇ®÷üÛrþ¯+ø˜v¾g y•êN·¶d""""""""rs ‹ˆÈõ2Ê'sâðe2L>Ô¬íIؾ3$Z › ~O¿AÿÎÕp1äõú¿r§”£°nWùÿ×Ûéÿ§j=ÙúsW†qûrÍ>62â Ú¿—#—ÓìO¢0ï›RO/⻨n ïXÓ]‘ÿ§îŽÍ ""rWp*{?ÕƒùîB ¸øÑ¨B*§…‘þ_LDnƒ¯<ׯL(ô75þ½Ô£|Ùÿå[ÿ±ÍÅŽùû>®'÷®šÁÑÔÿº@""""""""ÿÿh°ˆÈmgijNwÆü¸Ž]ü›Õsóx9Ç—8–áÑ·g³dã^ngõè^Ë#sÑv©Ï˜mø¡m¶ˆÝ«x£š#ݹ÷Ù1|·rñ_÷£ºÜƒ{Ö“¶®q©Ç¨Íø©c-Z þ†?÷xh'«>}ìýÈ0âÝ|<[·1éábW?hŒ”j?‹Ý«y§Žk®w8×Ê_ì[ö:k3fC»¿¡‡;­çî"ðûÖxæ•“g-žùà;VmÙK`` û¶­àËÁ­)ë8T¢ïï»øòa g°ýÐ2>YõõBž-eÌ? {úãz%*Òvè\–o=@à¡]¬žý:Mòj³\åÊ,¥x¨ÿLoð'0ð6.›Ã»OTÀ9Ÿ¯v•=+{û7¿²Ü¬ü9ËæQ‹îæ]ìZËO“{SÏ+Geò7Éç¶õ—óÉ®:f¯ð]7÷¾Íy©eÖœ!5K:ó»6¥Û¸Y»+€ý[—ñùëP¢ô# újÛ°m1;WÂÀ½93÷â—ųô‘;M?Ùá_;S2göyJ2uסlÇ9Ûì·Æ9Þ“ÿ8V{ƒÕ–Ò·I[ÏZ̦}ìݸ˜Ï^oBñ|¶ºæ?f©7rÛÆÓ0ËÒhðjÁg{YÝ¿:¹¦saÚìZcþõ¼½*ñð2vºƒ^O¶§Û¸ý¤Å­ç½.íi;t‰¹²m§ý̸g¼8ðÓD†üˆï·'Ó¸ï'LíTSF¿õïθý86^O¿Å´×³¾~‡?c|óO{ûÃ@Õ—>fHÕ£ü~§&7†ñ˜g;Ý®þ²c®ØUÇ]vÎ}÷:OS?c?ÛÎgÝæéÀ}ƒ¦ÐÕ²žO‡ gîá’´ø«~K­#óøpð8…ßC§1òD®è®òÑ9vߊþp¨Î˳§Ðž]|;i"ßì2Òbà<Œx0ï6²9OS9µn;1>ѶúõP-õ:ÑÔõ<«×Ÿ¿É lc[óÚî6³s,%dãqWš·«ñ?úœs‘ÿm:ZDä6sò{˜<"X2îCf¦«Øv*†·5âj§*=ÔÆƒ=teèŠp,ÀÚ¿#¨°~:][–año™é”ªv”×;cç Æâí˜Ó÷Ây¾Sf>3wÍ_3¬aæÀW¸oå8Üå׸ZF¿xíùÏLØOB½Ì©U›â¦ÄÛóOK [§OdóÊéŒë·‘éžÒ>i>/}HR§ÄZÓãuà îDØÏ‰‹áTxª8†5:Ì%Kî÷àèCÙô#ü1ùÆ/¹˜ùìÑ?÷@ƒå<[³$Ž\"þÒE“,X‰àÂ…b­W²¼'Á©†Í4LÕìëbòÖ Ï3;ýkaU7óŽ5ñuØMB¶6ËÈQ®pRü^âí'}8=³3æ‘°f+ÁßýÁ˜ÏQcݧÏyŒªõ7ߤ{òëßäòm—%GùsžüëÑð5^­“Æöa½´ö2`ùÚd¬ù–g2¯1·c<æÌç6õW’·í²j`»Ž9Ý}sß…*-êâ|þSÎçŸgg3hâ.™ÁTœ¶-†Qò¯‘¼;ËŸ+쎻Ÿö?4¥f GV_¸É@½©Üs(ÁÕ/ÛöŒÁ‚öO&#cé6h9af`ùö¦¬ä‡nyü›—X—#Q;æiò‰µìŒ{†G[UâãÀ“¤áAÝNÍq?ÿ#.äs~Úx›íy\Tó6 ‰ ÿP¼»6¡¼ã‚tŽ¿ˆˆˆˆˆˆˆÈm¥À""·YZè^Ž¥–¢ÛøI ìÔ„êňÜò9Œû‰©F|ë?BEó>nàZÜÓµžwZµ ï’A½¨ËØ%ó —êQÏ)”µ¿˼!`‰Æÿ·$ùÔ§^)»®¹&æï œJ¹ö*Øðx¬#†¼v¸Œ˜L¦ëŒÆÌ‹,—70yÊNJõÇìnVðò{F¨S9êU€àƒ!¤áBÅûK‘pò4±yROñÝÛ/òþ’‹dñ­\ŸÇºöâ±òä]ÎB¥aDnÛÈ™ëA°tb#2ÛÌf! xÜûU9Æ‚Õg33æKlüu–rM©›×¼ÿ¢þ7ïßB–%'Ê7¹„Mü¸õòõ6³&°xuøõ« 2í¯sÑô—í²¹ÙUǜoô¢ZÝâ$!1Ç< Ýsˆ¨«6'DœýûÄõ/ ˜ã"HÀ`ÿ\-ûÆ`Nù÷Ïõ«ØýóÆÌàof¢.ZF°±VË}¼½]ó4ñ«w'RþñG)ïxÔ¡ÓCœ_½üâ¿ö·±=óÚ¥ˆçmÑg±–k€Ÿ¶‹ˆˆˆˆˆˆˆÜvÚ,"r›Y"þ`è ¼1 7Ý'Îãu !h gOcîÆpÿKþÇ?ˆ=ó:­ç­ˆˆˆˆˆˆˆˆü×t´ˆÈme¤T‡¯Ù¶m.O—2b͈ãÂþUÌ™þ3§ñ£~9‘{wlL‡K^_¤Åaä¼oÛ¶džßÜI>³cæ²4,ŸÄù  ‚‚‚ ÆÐ|“Fv ´Áj×5…aI åÔ±£=z”£Gq:<+à\½ß(ËŽÑ/Ðï»0Å“¥óÚՙΕóDJ⹟}GOs!Á /K0»ö'èL01i¹ËæR±)Õ9Í¢¯³ãÌÌ€ÁÝ{KÚ2²†¹PýQ0VNlç µxþ©*\<©©,÷nŒñ’?‡¢sïž+ŠúUY²K#ôŸƒÄy<ÆK-K]o3ƒG}z<]æúU…·«¿l—-Õ®:fw÷Í}Ìñ„Ç{q÷ù ¥«Õ€G)Ïõ.Þ”.õ ›ª}c0;[ýsm68Ò´OkÊš®'Ê}=žÅl JÊ•ª½óÔzå«Y¨Óµ'½[úp~Õ.Ùssí™×)E>oM%p3Ç™ó|p¹å´XDä¶²sx7a>ƒ;{<å~ÛC¤[ušuìIõäÝ|2™ÔËóùrW7ÆMý‘éUbk°3÷wH+£?ã–Ÿ#º¹SØÀç‹^çû1 ùúžX{,™2´çùNõ‰øjgSÀ’jûŠêYNUy~â›T øˆÁëβeK:|Ëð÷[±cè_DåŠ8R¦NYY@X8W¨C‰„Sœ‰»yà 5dçDÏ·_!bé>b‹ÝOÇWûÒÚ L÷>H½ò§Ø’¹[ÒPþ!Z5½ÈŽ}²½ö°#ã¶ú£v¡š([¹¬`ÖÚ—™ùÎ|YüÖž´Pù‰—y¹A ð+'Ss¿ß¾ú'ç:š×–Œ‹ö•%{»%"ËÆ¿Äóø6ðIOù…Ïïý™-¡®Ôïö*O9¤\?ÉÚž1›3ŸÛÕ_ö”-ÙŽ:æHõî›û–+ŽÂ­vy<ŒûH.lœ/íç¡õãx'ú{ö$W¤ußר“`ÎwüfƒÇ²ÿÌž1˜£26ûçÚ9÷ÆðÓÌÊü´å ºÒ¯c)—ŒâÏp 8gOÕîyj‰bϪ#˜Æö 瘽áb¾Ç?”=óÚ\„óð­ZCèŸ\(бü""""""""Rî¨ÀM»ðÛ‚ÇY½¼Ëõ?¿-xœ¦‹*"!"òßK?û3ƒÞù†ÝÎ-xýÃIŒÜ•ºq+÷òû¬3ƒ9”åo=ËПC¨Þ}“&¼IKãz¦¼úËBnò Mk{§>GŸé;qnñ*ŽAŸflÿø^s4ó4Y{®)ŽTê>wjä‹qË ÎkÂ^fMøk›Ñ næûÃÇàFÅZň9~«#%ï­ˆCØ!Bó|^“~v>ƒG.&¼~?¦|5— }ësqæóߨ¸ 8V{ƒå¿wggÏöL¼uõx˜O6ΡƷyæë³Eºø¶skÄÄ530š‘þ ÿuiDDDDDDDDî*åÊ•³yͱ¸Dq#“Æ5¡\ùzøù=‚‹ki\\JÓÆÎ¶»ƒ½î£ë»ñù¬YÌš9Žj»ñožÌ(™+ucÒ¬YÌõ8%ózœ¨ˆˆˆÜ–èü°Å‰'žªšóôc)Þ »ÐÌí«6ÿo÷ºÏÐZšçóËEDDDDDDDäÖ+Òûtxyyg÷û, V `M$!!šÅË®°xÙ:vˆ#!ÁÈ l)Wâ¼èúì}@ »ÿÉg[5žƒ?|ÄAÀ­þ;L}¥:œ^È”™$cÀµRK^x­uüJànÊ æôv–þ´‚€3˜|©ß¥Ï>\bY¾ü“'¯'ýþ.ôîÔŒj>ŽX’.´ÿO.õ'"ãêu*·ëÇ u2ß\åÅÉ|þôz¦LÚBÙ·&óbé=Ìû9–V½ÛP%âgFº‡{ió\W«WWk"!ûÿdáâ-œK²‚sMú}ô&uÏ/懠ú<ûÄ=x[c8¶îg~¯OÏ-¨äžÎ僿óÍÏÛ¹”v³Ý7ñìùv2 ƒKÒ~øpž,Uü\Ø“„Ñ33ÿÖõÊàB2—þâ·…q*Á‚c¥nŒ}¯W–ÍfGåtmèÄ®'°"­Ýz=Ec?OŒæÂNø³zá*b,¸VjA·my ¢'Æ”poZ‚?gázzÉp°B[Z×òņMóç±òh<–«ýÓõÙ›ôˆˆˆÜA’84£/ýןÅÒƒæòô}s‹<ÝŒ‹ x©Ù‚"O÷¿’zêKžëõ_—BDDDDDDDäÿ·"Ýþ{ýÅbÿ[‹Å‚Å’ÖD\\<èöLæÎÙn]¼0ð(Ö ß²_‘†’%Rñ)æNÛ6÷þ‹g[IOs¡| aG÷xÑŒOõV¼Ô³>ž#^ {ñÒ£Õð ÙÆÊ 'H0‡°kÓ®¸Ô¥{ïTóIç\ÀANF»P¡¬‰ôlÕ5â`¹BøÕÇÉgâ¿ÿÂ]Çnòâëm¨æF£L%yäµù#ÍÞKJån|8¤~-¦Ü¶e„]K/ý(?ÏþšK]^Ÿøu<+QÑÃÈÙhK>ý³à÷¶ˆˆˆˆˆˆˆˆˆˆˆˆÈÿENMÍ Ä–(Q¢@ï=î S&0g$Q£zE7L'>þ2ž>½®/žOY¿/Õõ+kQ²xâ=iP¿»ö\,`I(ñÀ3¼Ð¹9U³žñlrÀH±¡±€'%kV£l\EÊ9±Ñ$YÀwŒ'ÒxîÞªtöM÷­eé²Íœ°ÿÄkÀÂé¿¶s:6 G_?|"ŽšbÅjáDÜ_±UŠ;Àõ´c8•–Ä«Ï5¶q6š ,$E%^ùîvò)‰)\>áϺ¥«8oÅÙ¯2¾>-èÿA‹,W»ãíœe p”?›ÂHʸÌÝÁ´yºõzÈÄGv²zÉ vœËÀǯ8ѧƒI´‚9ì8a–x«D)gÃð•‹D¤X±ã‰NM8š 6úGDDDDDDDDDDDDDn¦HÀf³™Ò¥Kø}‘Q†p€&X°Z Jew †Œ<ƒ¿Áç—šjÅ‚…´” ÒÓ3lgƒÁ«>=ûödq÷2ù|Ð)Ó}1‡vM¥±[á²1–íÁâC;ù¨ÑMÈY׆Lü;å}*f~-çë›1U¤Ï²ýüÞ·¸Ò`Ü6öÎkC±<šÛXöEf;Î;ÝsÿÀýaÞÝÊôçÊ]-SÞòåÓ—+g>§>çk»˜(ñÜŸ,ùç êØÝ–N”í0˜îÏÞ‹³ÝùØàÒ~‡0³_Õ”Ý^…©£ˆˆˆˆˆˆˆˆˆüŠtð¿eaâ”üÙßB\BEªTôÍ|æoÎàïYÁ!‘œ8Áî=y?í6?ñaÄXÁ׳ Ï÷-Fz¥:xgù¹ÑÅG(þPgž­žH†%¸àƒlX¹…3ÎÍx{ècXÏž!<£4µ]Ô0B,7ËÎ&sÄ?l<ÕŽçk4àõQe£,eÁ|z û"Íàh;##ŸM§ÛУz^ß“ƒgâq*Y*©K7k?yîv(Kû÷ߤ^|ç¢MøU1W¸™Ä•ȿ؟܆Õ{3|D+ÒJ–Ç ¸´c!é¹öç.þ¹Ý2.,áÃéíù}Ä>ì´™×—„’`ð ÁÀ‰t-y‘z}I@¢}ç1€‘bà×¹]ñ>ñó¿ø‰sñŽ”¼ç!ºôžÄ¢Çjñb÷iìO°7½œŽ'hÿ^â.Û}4Å­QTåp­L£òÉœ8|™ “5k{¶é v7wVæ8‚÷í"1"ÍÎÓ3ngÊvDw÷ þXv;¾%"""""""""b—;¡af¾ùîA§ƒ8œ†ÅZŽõ+k]þ1p1¸ðÁ_kÜA–­:N¬Å‘rµÊÿ×—ü|äZZ&<ŠY‰NŠQ¦|y*T¬Bíf]xíÙê8¥^æ|”~uѤ~E,a‡XóÍbŽ%ý‹;·–hv;›ß\"Å«,e½’¸tp%³¿ÝEtáãÊö3G±sÞç,ûçq^Õ©ÿ@j•H&èXDžG4g¾'‘Ð ñxV¿Ÿ¬K©¤‹ì]ú «Ï§cMä×ϲû|<®eÊã“q™£ë¿âËõW&6äß?""ÿ…tÎÿ6šŒ<øþhÚ—6Üî{ƒI=Ëpþ»áÌ L´? h*Ë“ƒºRúÂWôéý>3ZÂŠå ˜7õ-zôÏ¥Š=yëÑâ…ÿN=Ê—ý_fÜæhnÇÇÈ­.‡SÙû©îÌ?RÀÅFR9}(ŒB}2¤bQ¿g™»)ò?‹ˆˆˆˆˆˆˆˆˆÜooo«»ûMŽIüU©ä@—N•ðñ)A¥Ši¤§gp:‚C"9Yèà¯-¯F œð"÷\ZÉ´™¹˜ .~íyh;Jžý‰‘ŸþC¼î‹üOILL$ë:g0ðõõÅh4âââ‚Á`ÀËˋÇI~¡¡¡6®0âY§+CÞïK»úåñ°^áü®¥|6a6…^]ÛËðhÿx«SSî-žÌù€-ü4e*KŽ%`q©Ï˜õßSeÒ3|[ Ó{ºñÃ3Ï0÷¬÷vya/¶¦aRCþaåWSøì÷“7vJÝó¿Æ¥£þø‘{?íÉ÷Õ†0¼WSÊ9ÅsnËLó {bò ãÝmõ¹9ÇJ½ùnÅ0ªo~—Ž£ƒy~Á"ú¾åùn39œ\€çš ^ù/…¼GËWþ$&ë[+ÑiÐKTÚ?—/6†“×ãmrkÌÔßRåÓ6<·8 `ô¨E×á#y¹u=ÊBÀæ…Ì?Ó¯œá•ÖÃø'©àÙËö`áŸïÔ÷qFìMÇòtœº€Igòóo± ¬^ör¸6d↩óõ“tûé"9_çl¦ÚCY³¨7}ÀÄÞA4y#ñÙÊô"Ó6àbŸ˜ùO"8úÑòãµ¼õðaæu{‰?.5dÐÖß(ÿqc†- ÅâÚ„·¶,§êÜæ¼÷ý9Ì9_ç‘­Á£.mFM¦Óã )ÅNlú‘5A]Òï$c}“#I€ÑƒÊÏŽ¡ïËí¨Yµ8éÁ;Ù2g4ó—#ÙT…οïà…ê×R `ΣO³)¹6­¡s›†”+îBzÌ)—Lá«Ïÿ òÚ¯=Žåh4ð#žïÒ‚ÊÅ“=°žÕ“?dýÑx¬. é÷×*ê.|¥¯òL‡‡¨è›BèÖ¹|=òs£¯Ö&¿²Y PÇì£÷º½yaÄjà‡›5–пò˘©ì¾¾äWöF¼±i)å'´fyƒÙ éåΊNñÛg›eµY—†ôûk9•g<ÅïÕGóÊ PÒ)ŽÐÍsùêƒYŽ.Ô,ùO”+WÎæ5wÜàkΞÏ`çî „‡q µpö\§Ïܺào&Cf£”¼Ÿ­§Í“èѽ%%±pvïYþÍF_£o+ÆÍM'÷~:šq_l º~_>žÑ?ÀX’6S~cv¿ªœ_6c¾Áß¡£Ì¡GÅk'÷;P±û4&=žÂÖKØíDíþ?ñÛØ¸ø‘ñ#'ðÓáRôÿ+3»U¸zÞ¿«×d¦]ãåÏ^ë_¿ÿ&C?Û‰s«|6¼)žy=sõ.«O~ÒÏ/âƒp}|Ÿ}ò)ý*Ÿå›a_,ø ÊžW06Ë磞§¹Ÿûäôó¬˜>ŽÏ ü5zVç±WÆ2¹oÏ”u®ÎËó2úÿØ»ï訊6ŽãßÝͦ „ÞAé]¤ Ò›"–¢¨Aª€(*ˆŠ *6"]D¤IïB©ÞÛî¾$ô„DÁ¼¿Ï9“›™¹ÏÌ\9<;3]¼8½ø&~¼’ ÊCøphµ+Ûò;T~Ž÷& ]e÷;ûË©mÆ}Ë”–ÁÌöÎÏçÒ뤟þ’~te説'fÐï±Gé5ñéñëy³Û£tñI·Œ©8Þù…×Z°à™¬;›ú·c¡*]ç¯ãÅn%üys>\Ì…*#yãõš×qàLÅWV2cr|É—#G±Ú¯$§¬edŸ²˜2CØ0°_ì·Âñ ŒêèË_ÑEh6c%ƒ{âÄ·oóñȱ¬Ü’LÍ_1¼[©¬3}MÅi6coªLØ’ Ìó ~æÎ¼¸ä')sù¼>¾_Ò¿âV¿ó _}½çV#xóíf8å'¶|÷ñz†"üíTZ»ìç·÷†óÅ'kˆ¯;˜7g>K »üÆn¦Dß9¼Ö>…ý ~Â?Ú1ïXóÓŸì¶Ë øß‡YúÆ3|ôáfìÛ¼Å[cšs[Gw‹ˆˆˆˆˆˆˆˆüÜ7gÛl¶+¬V+ÛþÊÀÕå"®®ÉdfZIKMdëödŒF#ƒáÊŸ»Gü!üXާ:5¡IDz€•”KçØ¹d+¶GÞÙJ,‘kØ—iN}×–NÏl¿4`5[OÇ0¤¥'Ø—ïð®ìÛ“+ñk·Gà³~:=[•`ñ’¬v¼*gP—‰ìˆ³b,òs|«þS|§ÊZýúëø~eÖ«/ðઉviÉÐ<ÊÌŽÑÕõ^|r&~©H¬Õ‚9ÕkPÄ´ƒ„̂ݟ[Ë ðç±Ìì´š7šºüu_æK¹½ `‹gç”—yŸñ¼Úg4_öMFøqvþõÛ·¬gÝÖÄä+.#Îe›ÑãÙx®W¼"öòý”2q¿®”k½P3m#ŸfØÚKXåk’ùë×ô°Ï*“HLéq|¼l(—ö/eþ×óùå¯@’ò³HÚTˆÆ¯Ïáã.IÌ0˜yÇnc;ì[°eÄfG}"àdp8>Áú+GÎ…páV±™ óà›?ñV·DV>ןeGïJLNõ‡Ñý4¼ñÓ͚ϛ~Ý‹eÝÚe¥¡H;ú ¬NÔ™ðÞ¾¬U¨«×rθ‘C^¥òŠœ¸HT’á\ º@Š}uŠffûäá|±8{åño;°ÕÛDûê%°#cÅgè×Ñ•££ÚññŠ XmÛ.PâÏ/hßÚ›õ‹²ƒŒùŽ©¯Mål*°a+‘1ºúxØm#Õ#ïØëåÝÇÙ—iMu·p6ŒƒGR_Ø*š§Zq´s™üÅîYé“Áá8+†"—G¬']ò1ÖÙ1:»üƤÁïq:`)µÛ1¦z-"òÿ*=lþi=é5i ñó—°nû!Îmþ„±›Œ”¨ó0¥-ûùxKÄ•sS­QëÚz7ñX( @ÔÆeˆË*áX© µìÃX¼ÂÿêöÈÖhv/ÙAr‡:Ôò²ãdɼˌȺ³}Cv’ ƒØðläô™›‚Ö FLÆ«?°Ù¬X­WS‡F÷ŠÔôÉúÚ«F ›Ž‘r«OåÒž5Á£zñóÄâT­ß”f=D‹¶/0ºû@F‡¯çFóK`.«h Žx7ìL__ž|țȽ¿ðÝ«“Y¶í‰VÀ¹ì5…í)Õ¸6®‰›ønË¥+ÏÀ–x˜ÅkÂéÑ=ë{KÄŸL÷Ý•ZÒëY_|?_Ãa;XøÍ7|¿ra©¹¤O NT{á3¾hZcØ·üîww϶÷¦–„, %GJ×ö"ñÔbouƒå_üqÍ*cýœGbïÒy¿öoRç„ßYµ9üêX&ìcýê ´ë‘õ½CåG©lÂúe~W·)¶Fâ·h ©ëSÅË̉ šNógÅànY_ñ(ûUêM£RµìÖ„Gݶ”°ìæ‡Í¯Þ;êW¦5sF<Š»e-!×Ì÷„ðl¥ ò› ©ùèã2Bwú4Þ›Iâ×?ò×Ö½„ü9•OÿÌŠ½hž±ËŠ}ÃNd¿ò3Žç½ó1ÖÙïømkº2.éć'`«”Ë{@DDDDDDDDä?ì¾I‹ˆü¿°Füƈþv¼4øiz¿;A@âÙÍüüé|±1×ânxš¨´kSVVRãcHp̺1þÊ®vî^¸âï’}øÞtÇ0<]Lù*sY|xB¾w<(hýqn4Móáò©ÑQ‹ûñÈä#Y±‹ÐúíI<âx€9³’yfè&vÝÍË¿„Ýt~í-Û›rƒ£‘ÌÔT2RÂñß¾ÿí+øzúʶðeòŒAŒ›¸í¾+¿!Ñi.Û“w?Åcå¢Ù³ô^뼜¿o‘t5á\Ø âB‰¹î…LâBco(k%áÌŸ|3îO¾›Q…6½Ÿå¹WæñûˆÖM˜EçI¿©};*55±ìË ´ô,czÿÂ3ßò·k°+˳ Wñfµì ©§máÈ´Ë?üŽ=]˜Ó­'ŸŸ¹9"0Sº™‰ŸÿJÃÁ/1°ïOŒ™ë3º pôt¸ â¯ë …„˜«¥Ü‹ãŒ]—Ðõ¦6BðpÍi“m{еÁ€—»R³F)ì£ÏpêðY2®|À„sqwHô'îºß% iñѤAöï’Ä‹q¹ö5ïØìóÕÇY#VðÑSfz½6€Žï/¦|fëfM`ÉaùŒ’.Ä]óÈ{ó5ÖÙ àÄðxíä"""""""""ÿ”ù×YIð_Éô×V2ÃÎÒµZÒÅw/~ü)iÝú²::œ‹àa.ï.lp Äƒu)“âϾà¬K6‹õʪFKb ©òý‹ÃYqC*ЖAlh:–By—¹rÀ§ívÖK¬þ¤ú}LÿÞßb6ØH ÈJPa¤H›·™ÔÑ…Cïcî¢ B®æÝ·'ÑuçK, Ë9å–S{ÔΚ…]Ù÷B[FîI¾f(“ Üü ŸmêǼ¦õ)å°‚ðv˜6¹Wà XOpÔï('C“òXqk!ñRxøPØ W3¸vx”òȽVÜ9ömßB…J5¨þX%¬˜ÛÙÀ™ì?ˆI+3ØYå!¦¿úí×½vó3¹]™a¬Ö•½u‡0oŠ7_<7†¶f¼;ÿEBG¿Èç'â‰É-ÍœÁ±1OòåŠ WkÅëC'Òdíólø»é¿LR.%€GYܯKn¥ ])eIŒ&s¬ñÈÖïiK'1$¸~/eSÙç9û\VŽeƈeøÅbW®+:ðVR£“ÁÙ ×ë~—)Z«!%Rü8~yUñ-æ{Þ±%ã‘>ÞÌJÒñEÌyßÙyP¼N{Ú CÙß‘ÞéQ¶ä3v›õÚ÷@Þãh)”±¾£÷šˆˆˆˆˆˆˆˆÈWÎÿ–+""ÿ#^O|ÅÖ­_ÐÉˈ-3ž «™3ýÎP†:Þ&"ï!ÜÜ>Í‹]yI =Ìèysy§c±?¹“rn+þ–’Ô+•LàÙ³œ={–³gC04Æ”ÑOPÜ`ËWõ¬Éaœö?ÎñãÇ9~ÜŸ3á©ØcѶŒžÔ×c3¿4ˆ Ë~üûy{r7Jåò‘ªœÚK ÞÅ¡DWÚ|œ²×ï?kp­N«Ú®pÁŸð·¦ú}@—}y{]ÍG}ÏÆmËøxHgjËåpVÒ Û{ˆx×6<×ÊëÊ30¸Ö¡O§7·+LõG^bêÂ?Ùºx2í62îÉ–tz/{ôl)\ ŽÃbäé³8âЂ‘¯6Âíoo«›A\h †b8F`ÿñ3%ºãn açþœ=BLz.ÏØ–BTP,K»¦¾Ï)ûvøm†Ëߎ)ˆÝûHtëH—6ŝޥ[C:vö¾R*íÜX|¨æ“Ä…3§9sŠ3ñ=)’ÃÜ´/ۜҜdÝç?pèl,ÀàRžò^—ƒÎ$öÐ_D™›ñH‹kî]¸ æ/âåGJ`º©Õ›å[Z¾úx=ž]~æÛ háe–ÇÅ}KYôþWSŽj>vw{~ÆñNÆZDDDDDDDD¤ Ó `‘••˜£»¸Xx8ï|: ï%{ˆt®DÓÎOQ)eßžJ!íÒ|¾³§}Çô ß³%ÄÚ½^¥µq7—Ÿ'nn5bŸ,Ä·~æ«*óYëŸB‰úòd—:D|9‡€T°¦å]æò6¬ÿ¿ýÉ…±(íÞžH·“Ì»€ìÄlfÈr&|Ü…UoâÝ;¸($_Û Ûâv0kæšÏê•mX¶þá)˜‹V ñcÝiâÆâñk¸Ë‚Õ̘c¬ýô ~›ëEÝÇûãë;Ÿ¾ÍÉõ?2oÎw¬»¾|ÒÁy|í÷çþÄ'U`s˜uz àq»T./6ºT¢]ÿ¼ðôcÔpbë™<;l ÃÓò}~nfð/¼;ï)¿8ß…=™˜Ïй2S¢fI]ÈÅtpð©IÑÄÓœ‹ÏÿêbKоšëËŒ—¦Òõ§vütþïE”r`6Ët¥ÿô_Yí+ö…ºP­Ï«þóŸË¢O3xÆr^¯øû‚©Òg ÛùbÙY2x0Ïøó[Z>úxÃ(ï·•(ϱ þbÅí Ö¹*µ»¾@é”m¬8™LzD^±×¾£Xó5Öwë= """"""""ò¡°ˆÈ¿,#à† ueôО ß{K!W2ñù™¬¹hÂXþZ’‡ŽãåÞ#éP8ƒˆ£ë™:`:ËB3sNfØÙ7­/Ï„¾Í›O `ü“®¤FeÓ‡/0ý‡ãY;®æ§Œú“#EÛænœûrߟI»æg.Ï'O¬`ØÈwé¹c?ç'œAÐâ!t }šWt£ý3Íq7AZL(g~ËØ7ç³Æ/>­Á–Áer`ùçø4éÊ3/ôgpïmlžyCÁô³|;°‰oáù^oÐÒpÃ~ÂË_Ôáà YEÌzðJ—"ìù|o.ßEpÊláœÆ‰ù“YÚ}¾c{°üåSwÐÆ5 Δ®^ˆ˜A$ÚÌ”ªZ»‹›KË»êU©œÿfz.¦ë„§Ø8ÐÿïÅ”~Š•Ï?BÊØ÷éÒ{< Œ!œÜ8•w?kÈ“³ËØâ9öþ£Œ Âsý^eP?wÒñûƒ^|÷Ý‘ì-Å“9¿t!§'öç•ÏK3«ý³Ìéë¯ehGˆ9±•=ÊÈRýöõÛÊÓ³ip[R‡O£wŸ‰4õÌ Úo ß<÷C2ò—èÌOlùéã 2ÏÍeÚ«î þ4½&öÁl‰'üÀ"¾èÿ[.d!·{~bÍ×X‹ˆˆˆˆˆˆˆˆü1xxxØ\\\îu""ÿ˜¤¤$®}Ï <==18::b0pwwçèÑ£wå~aaayùG1;ÈL³ä{Õîe“v¶42þæÑ½""""""""""òÏñöÎí¨¶«´XDD¤À°’q‡Km–42în0÷Ä/'ô ¹}=ªåý—f‘ÿ %€EDD¤ÀP"ODDDDDDDDDþßïu""""""""""""""rw(,"""""""""""""R@(,"""""""""""""R@(,"""""""""""""R@(,"""""""""""""R@(,"""""""""""""R@(,"""""""""""""R@(,"""""""""""""R@(,"""""""""""""R@(,"""""""""""""R@(,"""""""""""""R@(,"""""""""""""R@(,"""""""""""""R@(,"""""""""""""R@(,"""""""""""""R@Øå·`FFÆ?‡ˆÈ1›Í÷:‘ûF¾ÀJ²ˆˆˆˆˆˆˆˆˆˆˆˆˆˆÜß´´ˆˆˆˆˆˆˆˆˆˆˆˆˆH¡°ˆˆˆˆˆˆˆˆˆˆˆˆˆH¡°ˆˆˆˆˆˆˆˆˆˆˆˆˆH¡°ˆˆˆˆˆˆˆˆˆˆˆˆˆH¡°ˆˆˆˆˆˆˆˆˆˆˆˆˆH¡°ˆˆˆˆˆˆˆˆˆˆˆˆˆH¡°ˆˆˆˆˆˆˆˆˆˆˆˆˆH¡°ˆˆˆˆˆˆˆˆˆˆˆˆˆH¡°ˆˆˆˆˆˆˆˆˆˆˆˆˆH¡°ˆˆˆˆˆˆˆˆˆˆˆˆˆH¡°ˆˆüÃì)ûø ^îV Ç{ÊpªÇ»ÛýXþLiìîu,€CùÞ|¸f/~G–ò\Ùû!¢“=%ŸNïUq¸×¡ˆˆˆˆˆˆˆˆˆˆÜ§”‘˜=e:½ÄË]+âh¸×±ü×9RõéÁtðÜÃÌá“XwÑr¯ú—9Pò‰aôî^{Í%‘ý¿-ù3âèæ€-øOÖüy„p뽎GDDDDDDDDDDî7Z,"ò¯r ÖèMømD=§«W î-˜¹Ç5/W `çÅC/Ïbñ†Ýøùíeã²9¼Ñއ˫]š1kß~z¢È5/rš|´‡# ºR,··»¹-‡|ÊÒûð;´5ßM¦wu×+mݪÓ}ì7¬Þ¼???öo]ÉçÃÛRÒœ]À±cþ<È÷«Ózø\~ßç‡ß‘¬þd çpS»²ø®ØÉçÍí0Ô›Á¶#?Ó£t=&l=ÈüŽåyxä"v^Ä©æ=&7¸[±æÙNNòz>€Á¡,žÇêí‡8´m%_½Ý™&Ï,æàº!T±¿ƒvÅèº`7_?ꊡÆþ8¼Šån Òˆ[ÍÞLøn;ûáwh;kæ §÷5ån5ëÜðlVóRE3]¨Úc߬ÚÊ!??v¯û†1ݪàrí*ܼÊäóy8Õ›Ì6??–>å麱)O×5'ÓÂŒ¡þÌ÷ÿve0p{ ïõ~˜ï.ç³}!,úk#£^nB¡myúëmÌ?Æ’ëyµ{…¬yäÒ’‘‡By¿K1®†ïJ­Oΰtq ¸>ôßœ8Êk- g—1áùøwüxb;ýp¾ÅĹ÷”ùW¥qzÝ6b ?DÇJWO1u­Õ…&N¬YH†Ñ“ÖS–òÅàzÄoøŒqc>buH%žûh3;—¼>)v;ŒÅè0u Ÿ¬@à²x{Â\vÛ=¸…sèSÚŒEéøÁLìîÎÁïßeäè÷ùv[ }?bZ—kïkGåçg2ªú1¾zëFÌÜCëW™9ª n7n˛ʒ—{3ñ€ü? _§¡ümì(Ýû¦´KeËÂ%lú-1¹©/w)Ö|·sí½óñ|L%xâãÅLëSœã?Maü¬µD7Ïg/WÍ}ë¼ÚµF±axOÆlK…³ŸñüƒX’qC­™8o]\³`Ú8&~¶è:¾|8£eìò1²Çìê³YÊh{j¼ü=KÞy—ƒß1iôd¾?êEŸI ˜O9¿T€$ÖjÁœê5(bÚABæµwÍ$áB0áÉVlDN¢CI¼*gP—‰ìˆ³‚KcvÄwËuLnb.|wb5å¿Ëòó|*>ÍkÙ6âyÞ^‰XóçyÜÖÍ E.Ï'_Ï=<˜‹‰™ØÒ" º@ü [@Û—iN}×–NÏl¿4`5[OÇ0¤¥'Ø—Ïc,á¦gc,òs|«þS|§"Éüúþ†_™õê <¸j"‡]Z242ó9wÒNÏgØ3ós¡ ’.•dÁF8ƒ.’=—87&þH¤LgŠñP«I^?„3·“lƒ#ñ hþÃÔ/ffk`.àZÖ(öOÅžß¾`ð ß˜ïþÍ“ç1îó¤Úò®."""""""""r/i°ˆÈ¿-ékv%Qª]KJ™ךtyÈ•À5Ê0àZõa*àÏÂ5YI@Ë6.ØÕ» ä´ÕržŒxÖy˜Ò–ýü¼%‚ËyCkÔz†¶nïÒ XÒNóÍgyki0™F<ËÕ¡MÏ~´)†VöÆlßÀéÔËßež€Í`¼©Ü­Dm\Æ8k>Æ$‡Êw+ÖÛh'K~ž™bõ›Q"m' ¶G^3Ö;X´;-—Ѹ;Ï==lþi^ôš4…W»4¦R;"7ÂØ‰ßs2-s ûÚµÏÆ±RjÙ‡±v…VbÀÍî%;H.\‡Z^vù*“¯çq‡"vï'.;xKÂE’ÐmÇHÎŽÅw‘d nã&ÖKkùzÊ<.æí>VÖšÁ‰DeEDDDDDDDDäþ§À""ÿº$üÖì#퓎4+þ-%;ÓÜ-6‘ÇBn­±„'^»¼ÓFZtI<@Q$äÜrîé-;\‹»Aâi¢Ò®MbYI!+gwÛW=èQT/‰cL‡Ÿ'-õæÖâÃnZ{»â/Æ_ÓÆ­Æ$'w+Öü·“%?ÏÇ·ânNüuÁgž•î´Ý¼7ÿ¶Füƈþv¼4øiz¿;A@âÙÍüüé|±1<ï9à˜uåÚgcçî…+Þø.Ù‡ïMw ÃÓÅ”¯2—ݹs#KzæõÛEc#3íöîróïN&‘ÌaïÛ-iž¸œ?ŽÄ£ô¯ˆˆˆˆˆˆˆˆˆüÜW `7wwºtéJÃFØ»g7+W® !>þG&"r7Ùˆ?´Š3x¬IN×zÀŸ²·:6›ˆÕXˆânF¸’ 4àP¸(.$“œKbË`ÆÕÃ!—$°…”èdp.‚‡H¹\ÇÖ¥LŠ?‡Ò»0s¦/î«ßçQ¿²ë\»²ø.mÅ37uáï§Âlë5 µ[ÉÍìÊö½+±ÞV;Ùqæý|2H‰I·âYc}eѯîÅ\s|>ws®}Éb%Á%Ó_[É ;wJ×jIßa¼øñ§¤uëËê<æÀ¾àìh®y6–ÄR äû‡³6â†=§mƦc)”w™+ó.Ì»Î`ÆÉÃñ†ßGÊ=óÍœ£Hu€o÷˜° ð®'¯EDDDDDDDDDî¶ûf è:uë2wî<ÆKÏî]éÙ½+ãÇeîÜyÔ©[÷^‡'"rWÙâ²úˆ•š=ŸâéV… \½à ‰'·qŽê<ùxyì/W0•¤ÝÓ 1^ØÍ‘h+`Ãf3àêåvåEn,Ò„nµr{­[ˆ<¼‡psCú4/vµN¡‡=o.ït,†Ké&Tâ ‹¾\Ì_çâ°—2T-ö7öæ½ ¹ÉÍïR¬·ßN~žO:áíД¾¹:ÖžÍèÓÄáo´kÍ¥îeF¼žøŠ­[¿ “—[f–rn+þ–’Ô+•LàÙ³œ={–³gC04Æ”ÑOPÜ`ËW™û‡ œ‹»_C‘‡i[ûúßsåyu°‡FwaâÜ0ªx‡KÜWŸ›ÉÑ}ñ/™®®® þ ê×cݺuDFF’œœŒ““O=õ¯¿þ&ƒ_Dbbâ½õñlù{–"qçÇLXpîêÙŽ÷sÙ^¼óf Ü/®dÒÔ?¸¤eN"ÿk{VÃôNZsžO7_Ùê83x%³×>Ϭ¡óù¼È\Öž²R®ýó<_7•ícp* °^àp ´}i"C£¿eOJiÚú¾HÍD ¹¥ ÓNüÈç;{1qÚwL¯ð=[B¨ÝëUZw3qùyí÷sža<5ä"~ÙOl¡ÚtàK[w0UmD­R§ÙugݵY¬J=Dë&ÁüuìöÇ䦾„ÞXóÕNôõuòó|,GçóÕÁ®Œú`>S+ýÈŽKž4}²/ÕSrO„æë¹ß’•˜£»¸Xx8ï|: ï%{ˆt®DÓÎOQ)eßžJ!íÒ­ç@:ÜÜjÄ>Y4ˆo'üÌWUæ³Ö?…õåÉ.uˆør©`MË»Ìåí¥óâPù9¦kAÌü·˜¼)ò¦ùl³Ú0”jEæç9t4m^'=”“ç¡ñàéõGSÊÑxÀ0*&^³´}e{ÿM|ŽcúÚsD8`C×%ø¾ÝCÃ×›W.^DDDDDDDDDäº/V·iÛŽêÕ«²jÕ*ÜÝÝiÛ¶- 4 --¹sçR³fuÚ´mw-q«ú(/Žù€Ù³g3{æÞðu<ó>Gñßó_ˆQDî>+‘;×àp~5®]êjfÓ˜ž¼<ç í_aâ¤a>>lÞ¼ù–uSÓÒHˆO %%•“'OBtt—.]Âj±àääLjZž{_Þľø”3WñîÔ DØœ(æíB|ŒL…©Ó¹Ö¯„·‡$_àÀºŸøysvu_aòóU1üÈØwg3S¦ûxF´.DìæéLú%»²-èÝ÷êû¸bHäÄÖå,Xs„ `ò¤~ïéÛ¬v‘~l:x‡1F·ªtèÛ“¶µJàH ÿÁ’Ÿÿàtâ­úH n4þÏßübiýtÊGüÀ¸÷R¤úvᡪEq èÓÛYôí*N_ÊæFýþch_¿æ„slúq«Ž'`Í#ƒsyÚ>ù$íë”Ä™tâC޳uÙ"6œNÌuKZ‘ÿ_<êu£©óy¾ÝòŸMtÞ]gLìJõâÓåOrd`GFíÊ>¾À¹2-ªš¹ôÇâôR¼#¿œÈç‡+þa=ªåý,‘{å®%€‹/NddäM×óJþ9|ˆ¦McµZ8}æ4&“)ÉÉÄÇÇS´hQ.^¼È‘Çn;&KrI€“G9*1s)"…K!ÙQZ3°z–Â9>€Cç ”©S•zÝ}‰>ý.«Nï䜵*•}êPÚiqi…©Z½Ï‘ý°¸×á¹×zRË!žÓ{v‘R¦!µÚ äÅÄÉÌØ‰[çé߬&Ò‰¶–¦mûBw£©(Íæñò.ÛÅac×~‚—b™4g±·èÃÊÐì87âÙAdmaj4‚¹í_z6Å„‹„¦ºQÂˑԴk²ÞíxÜý"a±6¼ U íÓsøŸ °Ü*ž¸´}†.uŠb½äÏ¡‹öøT.K!Kº’¿"70®M§'ZÓîÙ¸{ŸµAÿåTçÝQÐÆ$ýü*~<àËÛS§0õ{ö%– Ù3#èSì$³Ÿàö?Ò$ Ä«ˆˆˆˆˆˆˆˆˆH~ܵ0@Ñ¢EIHH¸òý™3gòUo×Î4l؈k×aÇ_Û‰Àj³âááAËV­Ù·?5j>ÀÖ-›±Ùr:81g™¶²boc4¬E¿qïPý"­ó#2öDŽ|3ž#6£UŸÌ+õ<©TÊ BO³ëœ•Ê•ÊS»¤™ãQ¨UH8¾0  ÚRËRýÂ’ß‚°ާäø4~€Â›÷R¶q%LÀ…U0mC ¥»åÖ…o;F“WCZ•7BÌV–.ÿ“ƒ¶!iRµ)]ö²?!÷>B¯Ž“ñüf}ý'ñ˜¼»Ð¤8v˜¯¦|_˜ìÈL¿f2XÏòÓ´OØm©Çkï>Ke·²”v5äp«xëá @Âé­ü²ø(q˜1ZÿÛI‘‚ѵÝ_~†²çVðθ_ÑvëoL2ƒX4üEìG½Å3ïÎãUS GwðÉ‹ðÍ™ô¼ë‹ˆˆˆˆˆˆˆˆˆˆÜ¡»špssÃjµŸï:iiiüüóBºvíF­Úupsu%66;;3{÷î£X±¢T­×˜FoB#" Þ¸SdPÞ [ã9üãT> èJŸ®M¨Öa c«¬fúìõ„ÙU¤ÝS}i_»N×T1™Ml±œÜ€­REªÔôÂí|J ~{ M·£TÙ"8ÕyžÑu®©ìT'{WJ2‰œÁB:á§Â±æ’¾UŒQžåð(Ü‚—Ƕ¸¦’ F –r¹÷ÌË7àÌÛ8›•p0{xã~œà”¬$qFÚ IÚ˜³'Z±£O‚Ên&Ì&æ[Æcáø®½D6nIÑfƒ˜üÀiþ\±„_÷]࿞ǹÛ2ƒò\Ó…÷:ŒûJAKô>æ¿Õ›ù÷:ù¿r×ÀF£ñ¶ë„ñåŸóÀƒR¦ly‚([¶<…|ÊðÙ–c”®Rƒj5k²Å`%à_ò™Nâü¶Ÿ˜~h?=Þ|…å¡Så]üVõ9:×.„%ðæ¯ôǹý zW·Ï®d#áänÎÛ*R¾FMª.™Döï %0²J%XÆ/‡b¯lqlM 'òrÞd/µ٬ÜrÝrŽ1nã»Ë?ÜÊÂÕgH±]-o¢t§[õá²LRÓ®¦` —ƒ·]ï&)dزúã‚ëã±ù L æÑni]¥2­ŸAIã$æìŽÕ6Ð"""""""""""""ÿ‚$|§2228xà¸ríÀþýìK4‘Q¬&‹=uË•¡d§Žülµ°iÙ-’À¼kQÅtŽãÁ XC8žI O3..öÉ:—7xÛŸ8k Ñãæëj[ãO°;Ê—iÂCnμ‡=Ái€‘˜À(hꊳ{ ç$Æ Ì8;ZIÍt&<ÖEÝ([ÎS@,EÊ{aºíí°M й¸êGm€W3é&Ì£9ÉŒ %–jx¯Ó.b“m˜\<°O‰»²frÎ gFß*°s°#-d7Ë>=ÀÎv#ݹ$k•À¼;Vç]Šˆˆˆˆˆˆˆˆˆˆˆˆü î«pN ñ'’#£ó?ƒ“½«ûÐû‰Ž,´XÚ²2×$°c™ö¼Ø¯,¤Äá‚§»Ø‚8@\Ùx¨ìN¹ÎÏ3 ¡Õ*®¯lÃw”-CywHÙ·‡à4+±G6p¨ËêTêÇ[¯?ÈÉ(#žå*`·y:þÍÙ=ç°VªH©î#Ý(7Ÿ¢¹ö/÷“ɈÞͦ3èS©.ƒÞrãйì‹U¤|Ú/LœíGÜ…<úƒŒ‹»Ùq¡-JÖaиф$8R¼h$ßű<êfFÜ*žcx÷Ëó¥Â9œ€c¥’DÆ\—X‘ÎíïÕ|ÄÜŒ‹5 §P¶:Áïþ!¸÷¡ë£í)Ú¬S®õRCö±ï|4)…ðt7“~Œß¿šËÖK©mXÊŽ°4p¯De'|¾žK×Õ¶{|Á¤à¿;ˆÔìŸØŽðã¬üu6‡²µ¨_ï¼­Áø‡$cÅJÌÞŸøi÷Òq¢°}0kæþFømÇhK;æ}²½AÄ»W¢NýºT/šÂYÿ2lùèC2/ðÇœ¹lð¿Dšk |Jºxî$QùÉÒÞ2 A!¤©JF ¨æKÀ_?òÍæ,""""""""""""ò/1xxxØ\\\îuy²+K¡›‘jv!µTMZÔ®F‹J%Ù°iû>|ý^‡'"÷±¤¤$®}Ï <==18::b0pwwçèÑ£wå~aaaw¥‘ky{{çYæ¾ßú2Ó¥@bq¯^Î༳ï´K\JÔé²""""""""""""""pŸ%€m6Û•ÿ^þÀjµf}zŠX—B¸)ŽñÈFþ<ê@xøEL÷"X‘ûÌ}•6 ×ý÷2“éšoÀARÈ>›%EDDDDDDDDDDDDD²ïu""""""""""""""rw(,"""""""""""""R@(,"""""""""""""R@(,"""""""""""""R@(,"""""""""""""R@(|9Tz†÷§>Ke‡|vªÅ&ÒÅÇüÇõÿÅL©Îùhhmœîu(‡Ñ“#?bTKOýR‹ˆˆˆˆˆˆˆˆˆˆˆüS®èï0zP­i- L»Å5;J=1†7ªüÁäÿ"Æ Üi4d‚g1yYNÕ¥_Ÿ6Ô(j&9d+¿_ÌÎ éØìŠÒ Ç3tkZw“äÐ},›·’Ä6/ñtMWªŽdJ»p¶~1›ßÂÌ”oý$O=R‡NiDþ~ÚÄùpk4œ1 ·óS@ž|´2)¿Ná½uá˜K·ä©g;Q·¸‰!‡Ùqõs‡Ò´î÷$­ªySØÉ@Rè~VÏÿ™I5yi|ObçLdá¹tÌe{2~ˆ7«&Îfoüµ‰d™)XÓÉ´‚ÙÁCJ4I™¹ÌÕmržKžuéܯ+UöÄ>=šÓ-ç§U‡ˆÊ0ãÕ¸7ÏuoLiÇTÂíâ¬ÃÕ´xnóö‚O¿Û˜""""""""""""ò_S0ÀvÞtô uÎÿÈô·m.J1S4xƒ] Zv©Ì²ï'³äBééö”íù=Kíâ³1ìÔß7_ _Ød¾<%1˜£ë¿f•É®µè?Ê—^ ðá¶M|óSÞ}>ƒ¯ÞùŽÓi€©^ìOͳß0ñ³P½o<ïKdðÇlŽr ZÏ´wÚÀÇom"ÔTŽŽƒ‡ábÚŸ³%ž “þ¤‡%aÁH¡ýy¶q K§¼Á®hgjtÊKöN`%éÂI¶þ¸‘/ÎÇc®Ø•‘CúÐrÿÖœßʾÔ!<\Õ¿ ØLE¨Õ¨¶"*‡ä^fÔQöFCCÞ«j<кq;V–q‹kY-sq×v"Z=D-Ïl‰´bp«FÓ2ñì]†¥p#žÐŒ„Ÿ§òÆÁdÊ<>œW>BÐû«¸TîqzÖ‹ççñC9œäH±2^¤ÇÄûË7¬«<šÛ§ñÁ–h¬p©ù4/>âȺY#ØY”V¯ çÅÁLþé4`À¹ê´ ZÄÌQ_›šŽÅ¾ ]vÅûÀg¼ýÞY2K6ç…×ëaÊŠÚ–KàU|þó)ÂÓ‹Ðô¥Qôìv˜ƒ_ž`ó1#ý*Dzs§HÃŒwÃZ8žY†«ˆÓ Ú°†s#Ÿæµ!‘¸zÆðûÜ•¤ç<¬™s˜KvÞ<öRjúÏcòçþ$¸Tå‰WòRê%>XŠÕ«¾OV'ø› |ä—DáúOñú³vÄe·™ë¼Ýu{óCDDDDDDDDDDDDþ[ äÐv^õhX쿯=ÈÅ”LÒã/“žµÙ¯ÁÆ¥­kØKjzV{šÖsåÜï[H´qé [N¨Ò¸ Ž€-%„ÃGƒI°Ø°Äæà nE\Èé¨V“W]š”gÓþÄfZˆ=ñ‡“|hPÅ £})V·ãÔú§X±&°í3\ɹe†³í‡¯Xr0«Á‰r Ë“vh=û#Ò±eÆâ¿y ¡×lÑœq”ñdج$ûq.Ù™¢®&ÈeÇŽXÊ=\w˜ŠÔ¢‘gÛübÉÏÏ·b*RV>Ù²ïÒ•¸sºv™%ê[C½x¨NQLp«Ö”ÒÑ»Ø{ÑŠ{õæTHØÉúC—H·$°s'—ŠÔáÁ¢&,‰áÄÛ—¥nòxSˆ8OlŽÉI'Ê?\ެcgh*–´Pvo Á¹f}J𳋤žaÝú£D$¥‘n±aöªM-÷6n>C¢ÕJjèn6ø¥\kgàb²[f'ŽD€GaœIáìÖÃXj4§¢“ÌÞ4¬åÀÉm§Hº1ÿkp§N-JÓp*ëEÌÎulJÁfpÀ«F]jxÙç™l·óªGâalØäOl¦ KÜI6m¥hã7ñ¨VѱñX ™¶t.ÞÈO8×yûι÷ ä `£saœ-qĤä”ÒÊ !*ùj²ËäJ1W{*û¾Ë‡ÙIF£ëY'ÌÈ,R‡Ž[ó`I¬à\Ê Á9ß×äRSiz›Aw ˜ÌælÁ脇C቗÷¶‘‘—ó¹»Ü]Œ¤œN¾’Tµ&Çr% j£Z[:w¨KȰ:PÜÅÈQ,DìÝFD›æc"ÑŒÃ^ãeË'|µ·½};öÉQŽç1ÚFçÂ8[ˆ¿§´ø82Ù0˜]p±Ë$!6‰Lì)^·Uœ®é5žc›ÏR¸Å#<äv–m§“°Ö´bcbˆ‰‰!6!í6¶ü5à\¹µ9Äæ3)ÙIØœ®ÝÌ–r†-GL4x¤%öãk¬ÄßÎù­x¬A)\íŒØ9Ƨ‚®F^•(WÔ#VR¢.™fÀÞÎÖ4S ¸•ôÄÞ`À@ ç¶Ç®Ñc4/ïŽÙh±7˹ç¸E7@FÄaŽ&úкy9œì½êÒöAçì¹aÄÁÍRãˆO³at«@Ó&%¯ù”„…Èý[¹Xº#Ô¶qä¯ Ònºƒ…¸ ,%êQ³˜9+ÙžN@¸B&"ƒ.‘–Ã`Ý<—°ëb Ú¶®‚›É€Ñµ"-Û–"zß>Â3¬Äž<@D‘‡hQÅ“ÁDá­h\${ä1os›""""""""""""òßgrtt|ÇÞÞþ^ÇqwYã ð¤hóî<Õ»+¶oHɸ#ì;o¢z«Æ8ûmbï¥Ë[1[ˆ=ãOlÉ–ô|º/ÝëH«:%H=y€“‘qDÄ{P·S_z<ÞšzEÂØvÌ™²†#l?OFR–2-èÙ§+­Êǰï ü^ĽI7ú=ÙNÛÒ¨¬€ƒÇOM'êL0æÚ]éÿT7Ú7*Iôžc8–1slËa¢%iÞíQÊÇìeÇéx’/œ"¢P3zõïKç6uðÚEPaoR÷oçÄ¥KDÙW£C¯ÞtnߟØì¦,î§¶q(*k9mF\"¥:<ŠÏ‰¥,ÛIf]‘º´®Á¾­Çn>o×ð?öî30ª*ïãø÷Îd&É$“Bè@ZŽ"HE)‚"bA]ײ>ܵ¬Áƺë*Š*X@¤H ½„Nh ée2“™LfîódAª"ñ÷y—™{Ï9÷œË¼ùqþ'ŠæƒPwóg|»Åu08>ÞgÇ ¤ ŠËû5åÀÌOXœQ€YºŸÍ{Bh~ÍPnt ½{t¤AX&ë×§¬ÝƒQwbðµ}é}yë¾dÚÂݸ~ŠŠ"iÙw{·Á±}ë¶ob‡ï"z ÆàkûгsS*¦°&ÕEHt½(—%‹wPr¸Tr»wùipÕM ЋŽõ|¬]iR;&•Éû)8à¥J‡ë2 7].cÛÂ}Ä×t±ré<&˜¾BÊõ¥kd2³é8»¨M|Y;8àhAß®çš^=éÖ¶¥k>ç¯÷ÓhÈ´öofÝ^×Qg&Žó.mÝœElç!Ü+ý¹\ÇÙÙ/"""""""""""r†œÎãÕÀ=šmFDDüÑßUX#n~b8þ·žaZê±ûTO¶š×ñ÷¿VáËgÞ`ýñkE_8 'mî~œ«v¿Ä¸ï2/Üàôô~üÜn7GþΆAll,‹…°°0 à **Š”””³Ò_FFÆYiGDDDDDDDDDDDäHÕ«W?å5²ôŸža§FǾ\ì^ʽç9Ü ‰§ußK±®ý­zø‹Ax½®ô®“É˳.Üð÷ô~ˆˆˆˆˆˆˆˆˆˆˆˆÈYrêKäBÖä6ž¼«á…)Ì|c™ç-¥´“xý£Üyžsyûý]Ç9/÷Âa©t)w?6ŒFÖ,V}ö_–çŸþ Ê$œ÷CDDDDDDDDDDDDΕ€‘ O% EDDDDDDDDDD¤"P h‘?À""""""""""""""„`‘ B°ˆˆˆˆˆˆˆˆˆˆˆˆˆH¡XDDDDDDDDDDDDD¤‚¨˜°­žÇè‘¿ávk•<üütŽ;þôXzò—¢c¥Š9}"""""""""""""raª˜ fyË¿ü„9»<˜§q¹á¨Kû¶U°ú;X°žo>ý–”¢ öjm¹´Nøo “EDDDDDDDDDDDDD~/36½dlXÇnWð4.¶Óf:V%äçÛý¹l^³‚rÀp’tí@º$*‘?¶S_r²'2øÉ¿ÿÑ?ø÷&“&w<Å Â…ì¬ÖŠqNœÖ\V|úÓ×»¨Ôn÷ L$Üz3OŒ-!íÛWysGÓ‚ùO¿AQ;Ö4’ÐFð\÷,½>™9þ£» ‰mɵÃÒé¢JXŠw³øówøjm>冓Vwüƒaá_3öÕŸ(ˆlÊÕ7¦K£XìxÉI™Å›oÏ'Óo!ªIo†êJRBÁâ=$óÓ—gRfBHå Þ‹æµbqX}doüž÷?˜ÇžRp¶{€Ç/ßÂÜÌF´­Gt¸—߿LJ ÓðžÎög©0*f| ; íê0gÜx¦åA\§{ùû>¬Ú2Ý+>âÝÚ ¸¿Æg<ýÊzJk¡ÛL›¦¿ÍìÑö§ñLX˜OðÈï¬UévÇpš¦¾Í?_Û M†ðà-£ÈM{‰yeäïÞʖм¦ê]¯§‹mãXJ~H µªYÈ+KlGFÝÚ‘üiãù¿5ù„ÔéÎ÷ÜÍ€œgùd§@I)sÞbæ–t<‘Íþè(®o»†I‹ ƒð:—ûÍ8žÿÐMHµnÜ÷·Ò'õ9¾Ló3"""""""""""""RqUÌÐÇ0)Û±˜ y @Ñî‡U!Æ~æE­ ­h_5‹ù?l¡°<@áÖ%¬wפmC'ÓÇÞ9S™òõ6ÜfwNTmAë†q„øòÙ»;—2ÓBtRGê-aκ\ÊÌ ž=‹™½5ŒV—ÕÆ˜¥é¬OIÃ0 í`mfg\ÖCco y—ðg­aYV%š7ÿ³¤û"""""""""""""rÈŸ$#4ñ•x þÓÄ4,g%ý¶FÄa­ÅàÇ'2« 2ö_œ¤`Ù›¼ìC¿!ÑÛÜÎüÏ?aVŠ GŒÓçð‘Åå¸ ¼„ÖŠ$Æ·¤W¿®4«JÐŽ6H;¢å27e?ßôáòBXtøŸ%Ý‘Cþ$0`þöqOvgÐS€ÇŸÊgO¾Â*×)ú0=¤-ŸÎkÉßR­ýMÜ;j$¹OOfk^ fD, Bˆˆ ÃWXB¹µ2oIû}SxáùŠ‚‘´¾ï®;¢Y‹ãà½ÿˆ .Jw–âûòLæ¾þö¡ýydÂmØ1ñ¤/ã£×÷pÀk'&±! ÷b7váLêÇè{êâ´š”—d°aÆG¬,4WðÎ[1 <†‰£B1ÝûY=ãu¦ï(Å4°xÆ2’nx˜‰=¼äm[ÄÜE\yD]^BnÓÛxvpUÂ˳Y÷Õ[ÌN÷ÿ^("""""""""""""Ftt´q¾Ç!¿‰³Ýßxº÷&<÷™Sß!ògäv»9òwÎ0 bcc±X,„……aQQQ¤¤¤œ•þ222ÎJ;""""""""""""Gª^½ú)¯Q èŠÂ8õ%"""""""""""""R±)© tðÍĵb¬8ßã‘?í© ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆT €EDDDDDDDDDDDDD*À""""""""""""""„`‘ Bð™²'2ø¹IÜÝ4ü4F“;^à¹!‰ØOz…¨Kîáù¿_M Û9Æ'Œ&wLdìÐzØk•<üütŽ«ˆ¯»ýþÉ‹÷µà\¼""""""""""""ra©ˆ‰Ø™³DÓ¸Csb­ç{ §+ˆ{û÷|úå rÊÏ÷X~ÃQ—öm«p.së`Áz¾ùô[RŠ‚ç°—cÙ«µåÒ:á¿k¯""""""""""""òg¦ø8lÕ:1èêVÄ…œþ=&æ¹Ðií`ÍælÊÎï0~% 1m0 cU~ÅTÿj¦?—Ík¶Sð{†ã†“¤kÒ%ñ\ÀÔ‚‹ˆˆˆˆˆˆˆˆˆˆˆÈ9v.s·óÇžÈà¿Â±|ŽM¨…ݵ‘oMcy¶°Õ¤7Cu%)!Œ`ñ’¿ùˆéË3 VéÆmwö¢J”Áè§áÚù1ßÞ€/¦%×H§‹*a)ÞÍâÏß᫵ù”˜Φý¹ÿ†¶Ô¯BqêB>yg 'í«Ì u»aHÏ–Ôˆ÷þµ|ÿñ§,ØãùE´gZç*î¿§5©S^d¦»=ØŽ]ÿz†i©~œíþÆÓ½·0aìwdÇöä‘ûYºÀGëvu‰¯JѺ|±­½º'‘5û'>œ2“Í® Fh-ºÞt#W4®NL¸{ÿj¾~çc–(K4÷Á vÕwDâ°”²yê3¼¾Æ³qnÒ¤xžôÌxïS–e–aD5åê›Ó¥Q,v¼ä¤ÌâÍ·ç“éÿùy¬Ä¶Æ= ·ÞÌcKHûöUþ»ÊA—…â/¹ž‘×4#6,gøÁhµx嫌ߘûÏÇѯƒ5¡'cÆ´`þ?'±´ÐN“;žbPáBvVkEƒ8'Nk.+>}‹éë †6bÔ3·PþÆ“¼·ÓX©Úû1¹x.ONZ-nᱡv¾û_VBLû»øûu^>;•µÅ‡vNš^7ÚFÚèžëžÅ¢×'3·¬-C†÷¢y­XVÙ¿çýæ±§ÔÄpÔ§çðé’IXdÄÁÑþÝ|1î_lLº‡1W¹xï™)¬/°Z]:âjZU ¡$}=+³ü¢N°&ŠŠEDDDDDDDDDDD*¾Š„ÄЪiã_|– $-o}œaý±á¼1ukGò§çÿÖäR§;wÞs7ržå“óyûÃz<{‹Ÿ7žz—>ÀZ•žw §iêÛüóµ­ÐdÞ2ŠÜ´—XP 6j5póꄇÙé‹§Ã-róMûxæ?«pU:Y_eD4ʽl|óê#,É0©Òq$÷Ý5”ügßb½ëࣘ&X*µâÆ;:Q8}_nsCL;¶lc¿+pÜÇ·D5ã²Ð‰Lû.åq—óÀ7ñ—ª_2~Ò³dR•ž?Âõ]VðÜ7”û Ù»f&ÿþx;Yeqt¸óQõ_ÏÚ××lП›ÚóÑØÉ¤ø¹öÑ;©:ãYþ»Î…Óž·uÄõñó<¸ÖCí¾ð—Û{³oÜ,èz=]ls÷ÀRòCb¨UÍBÞQ;p䝸ˆwk7àþŸñô+ë)°”p,¥Î–Ü8¤1»þý4“v‡Ðôæ1ÜX>•§?ÜIyLÔóqªívÚÕaθñL˃¸N÷ò÷!}Xµe»Oz_â Ÿ2­õcÜ0°Û¦[x] 6MÇúâ#ÊK›.6M›Ù £íOã™°0Ÿ `„§‘2ç-fnIÇÙœáŽâú¶k˜´ØE^7ÓÝ>‹qÿHÆU¹{°Ëž™Ey&‘Y;Ù²µ”|¿ ö:ô½ý:ª¯y1cS)¯Ö‰[ÿÖÛ¾CëÓîk2“tÿqJDDDDDDDDDDDD* \:HÚâ•d–™`ºÙ·-K\ ÑI©S´„9ër)3ƒxö,föÖ0Z]VûqZ²&´¢}Õ,æÿ°…Âò…[—°Þ]“¶ ‡&0HÚ‚E¤º˜eY¬ž—B Þ%Ô;U_áÔ»¬ u³IÞï%húÈ\1›Õþ&t®q¨t°I¹Y•·&aÙ¼›œK¬æÓ7>`Iöñ`‚Ù¬Z•ŽÏ„@ÑvÙ¿l ü&øóص¯”ȪQX‚.R×må€'ˆYžÇÖ ÙƒÃ°Y½¡ù[Øë61}™ìȶR-±!XˆjÒ‰z®eÌY—CYÀÍîeËȉkI³xpç@Õ´nGˆ/Ÿ½»sO¯<õ Ç!ѵ¨lf²5ËiºIÛV@x­š8-§1G1)Û±˜ y @Ñî‡U!Æ~Åšƒ.6~ö1Ûë å®»n î–ù|ƒ‹Ó9]Ø,Mg}J®€I hk38ã"°b'¾Ž“âí{( ˜øów±¯,žzq6À¤dëL¦LKšl -h•μ;) ñîOfîÆÒCýŸlM.˜­EDDDDDDDDDDDä TÜÀ”Sêö.{kš&†a,8bž|<Áÿ]ë.ðZ+’à—GÅZ#≰Öbðã€Õû¡6€§Èw8 –âµVÁi9y_–0¢VJS=Ž-ƒò=V.Š Ã °×ñz„”³mqÑéŸñôâòþ|q ¤Ìó¿2ÀÁ€‰a10#´íú^M§ÆqØÊ˱D×ÄV²R’žFi¦Ôs®d½¿MªÉJ.¤ q‘„Ä÷⡠ݵkÅf°ÝËÞäå`ú yŒÞævæþ ³R 8U<{â±@yá^2Í–$Õr°%5„ºIqx÷ïÇu:éëQL|%ÞÿÅ41 ˉÿ7Ä/rá k3?¬òñp7“Þß‚ë4×Äß’^ýºÒ¬Z(A?8jØ  Œœ]…8Õ'f^Å I Íciþ±[v-a• ¸(:bm=¥¢“®‰N9û""""""""""""r¡«ÀðÁÒÉÇ âÎ+ÁŒˆÅaâ@1aø KŽ ‚ž<þT>{òVý2í³'VÑaX8¸Óâˆ!,PB±¯üä}½—ëÀÊ¡xÎâ ÖÄ]è=à™x6LaÒŠÜ{Ëp:¥þ‹E9g3ȳQóªÑ MZÉ+/¾É.AånðØ¥¿õîüŠi›Ç0ú©§É-tq`å»|¸Þ…‰OæbƟDZCò“¶|:¯%Kµö7q﨑ä>ý Ë O–Öž|,¦k=ŸLoǘ{ÿIóÜbŠ÷Íã­/Rñý–Ç>þ˘MËá4ØJxtøQá°5¡×w°a\6¨#K'/<Îósô™»ÖÊt¾u$í÷Má…çS( FÒú¾g¸?ûç¼ÏÒ‡îçOw'ß•Çæiï°4÷ع z‹ðZ*ã´à5 aQawr<ÅšˆˆˆˆˆˆˆˆˆˆˆˆHEWK@ŸHâ-?±+²#Ý›Åb3 Âjv Gã26,M§ 0½.ÊBãIpXÀ0(Ï^MrNMúônNB¸‹-‚øÚõ¨þóÖP µ®èL½H †-6Ý/ƺk%û|§ê«”]‹R0Zô¢mÕP ÃNBë´¶oç§TÏá¸ÜSBáæ/ù`u<×Þ|UCÀÛ–Πgšá[u†‚·ˆbŸ‰ÅYí«þŸFD}:7+aæÄç;nS¾ÝDQàà<mþ‰=1WpUÛD†X ¡f½šDZ¬Ä\tUV0}ffSjذó¶ñº|X¢«cðžt,X¢iÚ©iŽç¹±Ïóò»óHu IÏÚ|”‘á £^ó:DX ì ­¸²•óÿPBªÐex_œËÞãý÷ßgE¥kÞ9c ,}”x œÕb±†ÕN¤ÃBYq!¥Aƒðš—ryíÿÕVã2ÚZ3yìXƽð¾XƒÿÐúD&]Çè[{R'ÔÀŸ½ž”’št픈ãçñ5s.E~â5BªÒeÄ iƒƒ°º}¸íŽkhè0ÀE³w2êÊšÇ-ƒ.""""""""""""† ½øD‚+xç­†ÃÄQ¡˜îý¬žñ:Ów”beû2gë_üôË\³õ#Æÿg9s_ûÐþ<2á6ì˜xÒ—ñÑë{8P ”e2‘A¯‡ÆÓ0ÖNÉ®…¼7u-ÅAà}¹7Â볇pãýã¹ÁaàÍJá‡7>`]ñ/vš¶}õÉcîbD÷­¼šRú`8-pZçÞžˆ½ßÍúÑýyâ¥þ”fmdî‚dr/ûy²|øªÓoÌúü€‚”¯øïÔìÏ_ÎÔ7"2ø>Æ |d­ý’ÿ¾›#©£ï©‹ÓjR^’Á†±²à—;Z䬘ŚK‡2fR7ö|ó"¯l,qZhpÓ“L¼éà'þ¬•|òú‡¬ ;r>Î`:Ù,ùd.GÜÍó—)Ù¿†9sRiÐ „ª]†Ó·ÒJ^Ÿ½¯¾›¶š1w çòͯðcöûÇÍ6ÍZB×Q÷ñB»lNžÈ¼ËHºáa&öð’·msep¥``”çSׇûÇu9Ô@ ;gMáÍY{«\† ],·ÁÞ’½|3冸‡ñ½ \ékøqaõëš¡®I:%V'54¢NŽ …Øcëа¡ÍaÛ}aT®ÛyÑ„é§_j\DDDDDDDDDDDDþPŒèèh3""â|CþˆBªÑûÁ{¨¿ì?Lý)OЂ=®#DÙ”§xwÇo*¾ü…RïúGñ “§­%Çgb «B§»¢[êK<7#cO̽0Xb;r÷ÿu"uʘ³ÛE€¢â¡Û˜þø«¬sŸï^øÜn7GþΆAll,‹…°°0 à **Š”””³Ò_FFÆYiGDDDDDDDDDDDäHÕ«W?å5ÂÐrÚB*Q+Π(§€ÒC›wmQ ÄX]pï´äsÈ%¾V4¼\ŠË‚€‰K‚Ó¤0ÛÍ…|Ü­5ªUB\ää» ˜!8+Çaw ðBMµEDDDDDDDDDDDä¼Ð`9 •Û dxß–T± `(ÞËš9_ðíšìß¹L°AhÍÎÜ0´'IqV0Ê Ø¹ü[¦¿‰Â :®D³k†ÑÿÒZ„›0L<™™ÿÅW,M÷¢jÌgN;€EDDDDDDDDDD¤"8À €E¤ÂS,"""""""""""J@‹ˆˆˆˆˆˆˆˆˆˆˆˆˆü‰(© ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆT €EDDDDDDDDDDDDD*À""""""""""""""„à_ÞÈàç&qwÓðsÓö³vöÛþ]8Û=ÈKO\Eµó=–ßSMîxç†$b?ßC‘?­ Û«µåÒ:áç{ ¿#ÃQ—öm«`;›ÚjÑÿé—¸¿U%j\ý$/>ІÈC“j«3g&OäÖ¦Žs8Ï6j^ý/?Þ—ê‡eGÒHƽpm¢.äW8”F·L`Â-ˆºhã&ÜJãÐó=&¹]ÈéÙ‰N’®H—Äs›˜ç Õ3e!¦Ít¬ÊYÝx,¥ÈSJ±Ç‡§Èƒ×åÆo„‘ع%ÖL ¯HÂyÎ`?û|EJäåôiqp=­ñ´¿ºîg°¡8x®:þñ¹qyð—ávQz!?Žˆˆˆˆˆˆˆˆˆˆˆˆœw¯H¯á¤éõw3¬i$¡á¹îY,z}2sËÚ2dx/š×ŠÅaõ‘½ñ{Þÿ`{JM G}z¿‘.‰‘„EFÜAëßÍÏ¿Maÿ1 ÿš±¯þD€iàlÚŸûohKýJ!§.ä“wf°¡0XˆjÒ›¡ƒº’”F°xÉß|Äôå™”™€á n×! éÙ’àÞ¿–ï?þ”{<¿ˆ”mTérö(æã‰ï±.Ø„«oL—F±Øñ’“2‹7ßžO¦ÿçë­Ä¶Æ= ·ÞÌcKHûöUXNí. IDATþ»ÊA—›näŠÆÕ‰ 7pï_Í×ï|Ì’e`‰æâ~#Ô®áŽHV€R6OËçÎQf|gîy´7ùoåƒÍn¬U{ð·‡;³ç?ãølGéá91K6ñõ<Ô·=•·ÌÇuQ/®ŒIaÚÂ,"Z dx¿¶Ô­‰­<Ÿm?NãÝo·â †Ñ䎧T¸ÕZÑ Î‰ÓšËŠOßbúúƒÏZ‡Ò·]"Q/Ù›~ä³i³Ùê©Æ5sŸæå¥‡®u¶á/Oõ'û_ãYRsÃû¶¦F„…@ñ–L{ƒé)þ#žØ ´ÎUÜOkRß~‡œ«àòM/0ö»LáIŒzjÁ©Ïðma %x)/-ÄíU,""""""""""""gÄö”Ý^‘N--#gëv‚-/Ã9g,ÏLÏWÓ£`-3>ú”¯—d‘xÍ \âNfù¾rj^ýWnŒ™Ã„ñïòíjMÛ…óý¸—X˜$4¶QÅÛX·=¿µM¯èD³¨­|ðâ¿ùð»Õ”^<˜Z擼:ÌeÜy_WŠ¿œÄ‹oÉ©‘t9ˆš»–²)?Hd‹<Ø?”y“_àOç’b¶å¦a““¼–¬@%šv¹„° Ø׿Žaáko±4Ç Fï;¹!~.ãž~ƒ/ç­bwv6Ùùžƒa"&¥û7³'²=íʧñÄØY–VŠišX‚™,þŸ· OóA j”ÁâÕYXÞÈ_ûúøtì‹|ôýì­[P:íYþ»Ö…^™ªá¹¤¬O¥¸¼œ’Ì42²óqg’¶?›|IT«Á\[uŸ}»–‚ú}èîØÈÒÔL Bkt ëE¹,Y¼ƒ£*ÝkÖûÞgÂ˰ +‘þ#.'°:™Ý¹i¤z’Я:»We“tóÍ4Üü6oÿ”ÿ¨55ñdæ’Ðã:êglÃÙ÷â–¼Ã×ÛK(7­x¶ÎbÚÇ3˜ŸCϡݰ­[Âv—…ÊmzrEó ÿý*}7Ÿ5eíÚ¿Û§P¥þ Qs¯Oxiß­¦¨áõŒ¼ÌÏêå[Ér\Bï–.’“ÓðšÎf¸®þN¾˜×îDú›O1éÃY,Ù¼ŸÜìŠÊ¬TnÓfÞ•,Þ_¡÷öÁÿÕ«|´.‹<#zu`Ó’m!¼á5 j–ÉW_­â@^&ûdSP\@ÆþäxQ|öùý~Žü3 ƒððp à $$Ã0 %;;û¬ôçr¹ÎJ;""""""""""""Gr:§¼¦b–€>³4õ)i¸&¢¬Í àŒ‹ÀŠø:NŠ·ï¡(`âÏßž²xêÅÙÀô±wÎT¦|½ ÷á-ºAÒ,"ÕÀ,Ëbõ¼õ.¡v˜…褎Ô)Zœu¹”™A<{3{k­.«pê]Ö„ÀºÙ$ï÷4}d®˜Íj:×?TÚØôSÓ‘‘#“ØþÞÌÛ_†IwNTmAë†q„øòÙ»;÷àŽâS ºH]·•ž fy[7dCt ÃBdõj„æoa¯ÛÄôe²#ÛJµÄJ„`R²u&S¦Î%Íwðy]i»Éñ™KÒÙãôÄÒ²KM²~ZO~ÀͶEÛqvè@õã>lMhEûªYÌÿa …å ·.a½»&m:± wÙ‡ÌÈiÃ-wßÅÕQËxÿëTJólfévf}ŸG‹£¹¦Ò:¾ZšKðg§°~w!~3ˆ'm#»<â#­?ßEÙŽÅlÈ Švï¤8¬ 1vì5éÐ2œí³±»$ˆéÏcãœEÔ¹Œ‹c‚d¯I&¿F{’¢,`DÒ°C"î5ÉdxŠÈòDаM3jFqeî&­$x¸¿r³*=nL²7x79—&®Í?²-¼-í«Û€pê¶oHÙº%ìóAyÁö”cŠØ»§àÁ·ˆˆˆˆˆˆˆˆˆˆˆˆÈ¯SñJ@Ÿ€-¾%½úu¥YµP‚~pÔ°A@9» q6ªO̼,Š’šÇÒüEqý Ë OV,ØFÍ«F34i%¯¼ø&»<•»=Âc—üÖ»ó+¦mÃè§ž&·ÐÅ•ïòáz§ÞXl£fÇ87¿ÏØwàåàsVï}/7_Ñ€¯vn:êê §?•Ïž|…U®ã´n¯M÷Iä¯ÙFt¯þ´Zû«‹Nð\ånŠ|âK¼‡ÎåmÉðÛ»Söé LX‘ƒßÞˆ[Ÿ¹õè{Ì 3³)5lØŽY¹ ^—Ktubl`VB¡à-¢ØgbqÖ£Cûj‡#¢>›•0sâsŒ7‰)ßn¢è`*MdÒuŒ¾µ'uB_va‰\ÞÆÆæ7’YP@AA9l_¼o£n$9¾§<{5É95éÓ»9 áV,¶âk×£j¸F(uz ‹.ï|øÓ¶ÕeðÖT:Í·Ò°ERŽ«ÐM9vª´ºœ†á§ysYK׸¹¨g'ê8,!•Hê։شel* òÖ/#§JG:]V‹ÂkÈ.KD .ªU »’ú±ØžU“rO …›¿äƒÕñ\{óT=ô•?})ËÝèÓ§!ÅÉ+É:­Ö"""""""""""""¿RÅÜl–°iÖºŽºÚe³pòDæÍXFÒ 3±‡—¼m‹˜»(ƒ+Ö]Æ(ϧ$®÷ër¨vΚ›³³‰IlHÃð­ØÎ5Ë2™¿È ×Cãik§d×BÞ›º–â P°‚wÞŠaèà1LŠéÞÏê¯3}G)&àÞü ¯ÏÂ÷ç‡7+…Þø€uÅA°1þ²}Ìy÷šýíú¥LbeR?.N«IyIf|ÄÊ‚_î’ ³bk.ʘIÝØóÍ‹¼öý׬ÝŸ'^êOiÖFæ.H&÷²C—}øªÓoÌúü€‚”¯øïÔÅø*×£aCËm°×wd »ÒÌLáÝ¥Gõî?°‚•Å—Óµe,Û½G|QžÉÜ×ßÃ>´?L¸ ;&žôe|ôú^ ªôaÄA濸€e~²¿øœÂÖ;ysU!'Ûß ,\ÃŒùm¸ù®ñ´²{É,~Ø]‹š§¸ïÐ$³gæølàMÜñÜ58-eäm_ÄÔ·~"÷PUè`ÁF–å `p£,f|šC°„Ö ÓÈÁ´NÅúÈO]´wSÆ ›¶}õÉcîbD÷­¼8{?þ@+—º¸j…/¦äž²|·ˆˆˆˆˆˆˆˆˆˆˆˆÈoaDGG›ç{ç%¶#wÿ_'R§ü‡9»]!ªñ º=é¿Ê:÷ùá9RÞÞCýeÿaêOéx‚ìq­ñð ʦ<Å»;|§nC~% ñW<Ä£m~bìKKÈ?Uº-g•ÛíæÈß9Ã0ˆÅb±†aDEE‘’’r’VN_FFÆYiGDDDDDDDDDDDäHÕ«W?å5³ô¯`ªA•9ùn&@ÎÊqØÝ(¬¨Ç´†T¢VœAQN¥‡‚H[T1V\ªM|.X¢’èye Û~XÏ1›·EDDDDDDDDDDDDÎ’ŠYúWð§ÍåÓ¥ÃèÿÈ8š0L<™™ùß™ì-;ߣ;G¼;ùêó ¿áqž· `(ÞËšiSø1KʼnÏ*kUz>ø×Ô ¶èþ»±äàyÏ"""""""""""""çÀŸ¾´ˆT|*-"""""""""""J@‹ˆˆˆˆˆˆˆˆˆˆˆˆˆü‰(© ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆT €EDDDDDDDDDDDDD*À""""""""""""""„à³"ŒÆ·Œå™›êc?ßC‘?­ Û«µåÒ:á¿Koe¤ÿø)Ÿ-ÌÀÿ»ô'"""""""""""""r¬ŠN’®H—Äß+R²gÒK1—þDDDDDDDDDDDDDDŽr¾pÖNš^7ÚFÚèžëžÅ¢×'3·¬-C†÷¢y­XVÙ¿çýæ±§ÔÄpÔ§çðé’IXd6ÿn¾xþm ûaXø×Œý÷n:ŽysŸæå¥…ÃÙ†¿<ÕŸìM`c'^òožúheçy DDDDDDDDDDDDDäÏ©âÀ¦‹MÓßfvƒÇhûÓx&,Ì?Ö†§‘2ç-fnIÇÙœáŽâú¶k˜´ØE^7ÓÝ>‹qÿHÆU¹{°Ëž™Eù6êìÞʖмþ,V­,äŠöID-_JaÐ ²a=ëø:½ Çù~nùÓ«˜% Ã,Mg}J®€I hk38ã"°b'¾Ž“âí{( ˜øów±¯,žzq60}ì3•)_oÃm–“½&™üíIв€Iɸ×$“¡ƒEDDDDDDDDDDDDä âí>[|KzõëJ³j¡ýà¨aƒ4€2rvâlTŸ˜yY'4$14¥ùǦºœµ¬ÈëAû¤(’7Ö§C¢‹U_fâÿóL£ˆˆˆˆˆˆˆˆˆˆˆˆˆüUØäÒ<òke:ß:’öû¦ðÂó)#i}ß3\€ŸýsÞgéC÷󧻓ïÊcó´wXš<¶Ñ@ë–çÒ³]#ª”¶¦vÑJ¦g•S§Q¤B2 㘿MÓ<ÁÕ""""""""""""ŽŠ™\}”x œÕb±ø¬v"ÊŠ ) „×¼”Ëk‡ÀÞƒ—Ûj\F[ëb&Á>o@y€ €JbÏáô û‰gn¥Ä ·~9=:Òé²Ê®ø’ìòóù "ò[„„„`³ÙX­V|>ßy•ˆˆˆˆˆˆˆˆˆˆˆÈ™«˜°Y¦YKè:ê>^h—ÍÂÉ™7cI7<ÌÄ^ò¶-bî¢ ®4 Œò|Jâúpÿ¸.‡(aç¬)¼9;›˜Ä†4 ߊÝLldYÞ7ÊbƧ9ÎßSŠÈod·Ûq8¸Ýn, ¡¡¡deeïa‰ˆˆˆˆˆˆˆˆˆˆˆœ1#::ÚŒˆˆ8ßã8o,±¹ûÿ:‘:å?ÌÙí"@QñÐí LüUÖ¹Ï÷EäL¹ÝnŽü3 §ÓILL dgg“ŸŸO0xœÒï¿AFFÆYiGDDDDDDDDDDDäHÕ«W?å5sð¯`ªA•ËóÝLÀÁY9»û…þó=:9LÓ¤¸¸˜âââó=‘³êO¿k%š]3Œþ—Ö"Ü €aâÉÜÈü/¾biºó|ODÎØ/wŸkÚ,"""""""""""çÂéìV,"ž`©N'¶üã‘ß`‘ B°ˆˆˆˆˆˆˆˆˆˆˆˆˆH¡XDDDDDDDDDDDDD¤‚P,"""""""""""""RA(>.5úý“ïkAøo¹ÝOû[ž`ÒäɼòÜHš:Œ\hàl÷ /=qÕBÎ`¸PÖ„žü㥇èXé,¾föD?;‘ÑIagÖŽ%–Ëy‘G»Äž£×öÅÇ{QÅzN:9F… €íÕÚripN½žK¶š]éÛ¬„éOÞÏO~Èù»ÁÝŽ{'ü^U­'ýLŽï|¾?"""""""""""""¿UÅ € 'IפKâo ðÎ,°µFÄî=À’Ár?Á3jí·°Ûê jg/bevà$ŸÉqñû#""""""""""""r~T¼ÂÆ“¦×ßͰ¦‘„6z„çºg±èõÉÌʰQ·ë†ôlIpï_Ë÷Ê‚=L Âjua舫iU%„’ôõ¬Ì>:‰kE¿›®ã²±ØËòÙ±äK>œ¹Ž¼r+ñ]îcÌU.Þ{f*iú3ìÚ¦„: îúgcöÍùo¤ÔgÐð^4¯‹Ãê#{ã÷¼ÿÁ<ö”þbì!ñ´x3ý;Ô%ÊjâÙ¿Š/Þüä¼!±-¹vø@:]T Kñnþ_­Í§üxsR…vãÙ3k=Á“|ö³ÐFŒzæÊßx’÷vú+U{?Æ#ÏåÉIËqWîÉ#4díR/ÍZÔ :*ߎÙL}ïGÒ|&`!ªIonxW ß–¼ù"Ÿ„Ðq]Ñ’jáåänø–·¼¯qnÒ¤xžôÌxïS–e–až ÍOv9pUºÜŃ=Šùxâ{¬) £n×Ú»%UÃ}d¯ŸÅûÎgO© ØH¸t0#\J­0/Y›–“zœx÷ïÏܲ¶ 9Á:êõছzÐ,! Ã_ÀŽùSyãÛ=G7Ù„ÁŽ¢Vòd&ÏóÐlÀñ×YDDDDDDDDDDDDäLT¼Øt±iúÛÌnðmÏ„…ù1ˆl1‚;{ÙøæÕGX’aR¥ãHî»k(ùϾÅz_múÞ~Õ׼Ƙ±©”WëÄ­kmß¡6CªÓóÎá4Ý2…gþ½WD#®¹çvîôæ0á» ¼Y;Ù²µ”|9ù«?ãÒXžVÌ¿ŸšÆî20Âí¤Ìy‹™[ÒñD6gø££¸¾í&-.8jè¡uû2¨u1?qëÝaT®@Ya¬UévÇpš¦¾Í?_Û M†ðà-£ÈM{‰¹Ç††öšhïØÆ'›]‡÷2ï³_ÃÙˆK,/óÂs©xÃpýcw3¸Í^ZZ±uÛ帿œÌ˜äP)p—3êàܵýž—ÿñ-¹ù‘ÿ»/¦#nëˆëãçyp­‡Ú}à/·÷f߸™d8OÐæÁEÆ4 "]Çè«B˜ûêG¬-4‰h:„;z‡1û•‡ø)7ž+þòw Lã™·SVù FÝØ„´·ŸäÅnbÚ åo#B(:­÷Œð´ã¯áƒK®ïCЉüßœLˆ®Nð<|&ØLBèKÑN+¥©çlAù+Å„a-©DXÀEÑÏ#A<¥¢ÝîˆÁtQ|ø{_qåá±DœF„n‹oI¯~]iV-” 5lvìuå™s™üZ)W_=ЧúyØ0û>¿“²ˆx"¬µüøD``µA†Ã~̵Fdcº&yYñê>|'ùì”~ÙpЋËû¿ð8,`Á〒\ÜÇ 1ƒ¥–{_D\$!ñ½xhB·C©›QÀv{ÈÉÛ4œ´Ü û™™ï;Ô[ˆ‰%²é_y¾õ¡þ,6¬¾b솕ðJpçãùy(žÓO]O¸†¦›M¼Ä‡=¯¡ïƒã¸>m1_NûšÕÙþƒ÷ÕèÉ ÕmxVçâ>T¯ûDë\òû-""""""""""""L… €ÚçôRX\Nx¬+ -bAÜ…^Þ"¼–Ê8íxžMvx‡nЇÛR…è°Ÿ¿7Š&¤tîS…vÖÊt¾u$í÷Má…çS( FÒú¾g¸î¸pí\È´—33±+·Ý3š3Ÿä‚<þT>{òV¹N¶ƒ×B¥æ]©_°„é™þ“|vìlMËá0ÛJxtøinRZT Ãðâc2Uó%§ƒx <ø33nü›§ž]KûË® g^è°ß³$I’$I’$I’t¼’sp¢’%¯Lgðu·r_ïb¦Lü%Ï/}†?ük<—û—\– vÛb^è æ—Ç÷yé^⪫¿Å/‡¨Ø4—·¦l¤]»½ýŶòÆŸ'óª+ùѯòGËX7óiþø¯ÍÔ$·q[Ú·¯`fÞ?påú­L}q.û.÷Ÿ[ËŽoóÚÛE =DÞÎ?ƒË®¾™ÂŒ ‰ú]¼?ë9_ZE"ZÅkxŒÈqǽ7!Aõ¦üåëÙZ³Íh¸àLú7XË‹Êö_|¨¶ƒÄŠ™þÌkt¼ú›üb`œÊÍs™4i §t;¶áŽmŸÆŸÎåʱ·ñË+"PWÄ”ß=Èß*|_|çLþ÷¡,Æ_z+?¿*ØÍ¶yãn¢ò0}>¿éCÔm`Ò£¯Óå¶k½ø<¿ø)~ÿòX.»ñ.ÎBýN–¿ú­/§~Ûd~¶)×\û~©aë¢É¼½¢’C¾âAóç~Þ8ÜwÈ í¹ßàæN ‰$âÔ”,ãµ§ÞbK2÷¿)»æ=ÃÓݾǕWõcë[…\6áßó± ·$I’$I’$I’tXÜÜÜDffæÑ¯”¤¯¨ªª*>Ïß¹¢¢¢ÏíY’$I’$I’$éÄQPPpÔk’s :M #°IDAThI’$I’$I’$I:K’$I’$I’$IR’0–$I’$I’$I’¤$a,I’$I’$I’$IIÂX’$I’$I’$I’’„°$I’$I’$I’$% `I’$I’$I’$IJÀ’$I’$I’$I’”$ €EzWnyðÇ\Ø"ü?(Láèóà­§“þ¥ªëlÈÀ;äÎA ¿Ú ÎI’$I’$I’¤ÎW:ßúR æÒ±_W†¾èBŽG€ô–¹þî‰<ðõSI;Úå¡& ½ó>¾Ó/oÿ„:TÛg"Dþé}éóeŸÊAr:á–»dâĉîÿùêRObôwoæš³ÖòÀ›;Èî9«ûÔðüOogæÎ :¹•›"V§jË Þ~â þ°¾œp»1ÜqËxÍù)/½ÉÃO¶å'×ÖóÐeÕn ÔŒa_ŸÀikæÇ¿[§Žçök¯cûÆ_1¹¼Ü8†‚¹¿ã¿~¶†hó\[ÂöÔ¯*bÕ²l®ˆA|º^™9â³ûÓµá ¦lÈîH¿VåÌz¾è£áïÞ~ÊW¾ÇR´<âþÄ{2NæìÓãÌûÃZjŽÐ¶G”­G¨%–×›«o8“ЧÁíóªiuÁwø÷‡³áç¯Ààq Oâçßy‡)y´ldGÕv^úÓ_9åžQ¬ùíOxqS=¡ÍØ›[8“ß}ÿ6¦÷âºÿ¸ž+‹îás+€F1dÃ3üúÎ?RV[MÎáºËOeãÃwñà¢*òθ‚Û®Na×Þªc•Y<éÏücÙ&ª³º2áÎë×s.L[Îä%A&ôoà kW²›0½º’¶ú–U¼ÆŠyçÅù ¸æ[ÜÜ7Lãº<üçÅT&Ÿn=Ä\J)`ÄM8mÙÿpÏ/£"³£¾u#7Õ–pï?·yÄù!I’$I’$I’¤Á‰»t|³ælfwµyoN=Û“J§M¯“Ø=sŠëHDËX6y ›?´q}ñb¬+£>§zã"ÖVgŸuè-ˆCMºÓ·Ù6Þ|}eÑe˧³ ª=Ûg“ÚätºælâÉ«©ŒÇ©Ýü.¯-ªÙ·er¬tÏ>ôÓ‹cøäuÅvÌåíÍMèß-Ÿ²;ö£åΙÌÚ=ÎA Ýi0ªf2mSÝÚö;|-qrN@ÛŠLš_B]¬Šu3fPÒ¨]ò¡ª¤šNöHÙ½“÷×m?ôêÙH úõÈbí«SXW£¾dSVhß§Õþ³ŒkWó¯I‹)®ÚM],@nÇ4Û97–”MÔQ²à Þ-Ý?°‰šM,X¼‘ŠX‚Ø®UÌÛ#»Q&¡D kÞ^@¬ÓÚ¥ \@¯®©¬˜ºò `7iÂiÝZ‘Z—BËÂzæÿk2++ãÊ£}÷δÈ8zÚžÒ¤½ò‹xíÍe”EÄv­àÍ×6“ß§'M#GŸ’$I’$I’$IJ~'Î àóµxUûÄ8»+vCZ.i¡Tr2ƒÔ¬ªÞwþm¼º”š}‡á†Èí8”ÑúÓ*êã©4Í ²ø0 eæ“jÉ¥?¸Ÿ‹÷ CQF„PZÒbìªÝ_Gui ±ÜCÕuÅËXôÖ.¼à šL™NË~…”Ìø %ñzÞüC®nŸ DÙòêýÜ÷ÒæC¬ >Œ`Cº nÃö©O³-z„¶;\-± Íe‘’ÿyï½§!‡JYÒâ×ñó=þ{ O¬äÍçŸá•Å¥Ÿ/Ê¢qV„S®û ì›`J˜øštÂ=§,Ç*K(ÿи¥7È€ªTïKÞ«)­Þúq8¿çL—æ©Äë!£0 ÷|V·a*³joaÀ)¬ÞÕ‹.)ËxjMõ§9Gh=ú›\Öz6ï~…².WqÛ×o&öÐD^ æÚKÒëï¹þ°•Ä«K©®_Ãswý†Ùl n±‹Ú`c²#¨MAÒrÒ8äZâÄñÔ• rù–»„žíÊ8© ˜wßA,‘`á#?á‡) A¬¶âØÃ_ Ô´7›l`Ò¼û‚ØCµð"‡®¨.­¦~ËT~þË7(9(¸¬gãÌ¿ò»w_¦yß+¹åºkØ~÷ox7zàVËU쬪aþ£?äÏËkè#@öAõĨÝU鹤Ù ÓÈù``C9ëúkè»á¸ï‹ÙϢǭ÷0æƒÛ£[™9½”ÛúŸÊÉ% .y‚u5<"”K»ö¹ìœ3‹õ5õÄÞ{œ_¯á¶ûÝ¢a¶¼x/+kŽ~Vo¼jUÁ¦ä¦}0_¤æä’R³–ª£Ì[I’$I’$I’$’s èè.Š*ÒhÛµ5™Á‘&ÝÚ=û€¸}ŸF^J€”¼Î é•CÑœUTÄjxÖû¤uL—F)‚Y´;k-öÞg’™¥¢¬Š(švHûôý='j+¨KͧIF¢Åsx·¤çïJ“ôÁp&ù­ÚÒ,=@}ñW¶`ð€6d|Pg—Œ}u†öä²›¾ÆYMR qœuÕ¬fÊÂ=‡ŸCó¢i,*‹ ê*Ê(--¥´´Œòµ\4BËþýÈ^ùKÊãGh;Ø¡k‰³ké4Öç͈ž…d¥IIÏ£EÛdCä|2M3BØMÙ–bjaÂAHDk¨ŠgÒ¬Q*@€@Ý&Þ™[é#‡Ò±a*ÁP„ì¦'qRÃðA‹À÷ˆS¶b.Åú3°}¡@ˆ¼NgÓ§ÑÞ± FÈÊRW^FM<@z‹> lõáÿ7cûœ·ÙÚò<†Ÿž`áô ì>ð±J6ÕÒ°KW S€èöulªÏ¦aj9·T2,?x.ÍeæÖf ÜžìP€`V; -dçìÙl«;òü€ YÆðë‡Ñ:5¡†ô¾ü&&ôoL áÚ›Æqznrþ$H’$I’$I’$(Biii?ŠD"_tŸ®D5[·„è8|<ã/FÿvuÌžº›ÖÍ61uÆ&ê3ÛqÖ€,[Û˜‘×\ÅEçt$>ï9ye%•ñµ[VRÜàLÆM¸ŒÑCº‘»a&ò ¨3å%%ìˆtdظK}nZ”½Ã»´&gåTæïˆ«ÚA¬Õ@ÆŽÃÙ'•2gÖr–-ÞJNß‹¸òò‹yÞPz·N°nÞ¶U—±nm=§Œ¸’«.>3ÛîfÞ¬­òÖ0ùÝm$Á¨Ñ]‰ÍŸÊâÒèqÕ1*Ks8ú4¶þã¦|>ïG…È=u }2óÖœí´›súÉ\xYw¶üýæìˆ¾í]K¢f3K×§ÐuÔ\9vÃÏ=“SÒ¶°`Á²úOàßo¸œ1 gp×tV½ü¯./#«`G¨=ç^:Ž‘ý›±aÆlV-[FYóAŒ½ê2.qgwkF특¬Ø%RØÁ'ogúÔUTîM]UYµ«€!—OàÒ qjÊ2fìjNÓâwxgí¶•çÒ}äe\rÁ`z4*bê’ Z2my9q ±»Œº08ë]ž~i gßQv®Þí‡qéø >ìúµ ²âÿ=ÂsK›2zÂ@ÒWÏcUéGGùPsiùÒm4·gI’$I’$I’¤GAAÁQ¯9Á÷{=ô¦ÀI)%Ÿô!4ïu–Ñë—©–ã ½í`†·ÞÂ[3·þJ’$I’$I’$é •rôKôա͸;ùöÀFT¯~‡_{ðµ'd-Ç/Ø ßüÞUtmcösdæÎß{,I’$I’$I’$}NÈ- %XÜZ’$I’$I’$%·€–$I’$I’$I’¤ˆ°$I’$I’$I’$% `I’$I’$I’$IJÀ’$I’$I’$I’”$ €%I’$I’$I’$)IK’$I’$I’$IR’0–$I’$I’$I’¤$a,I’$I’$I’$IIÂX’$I’$I’$I’’„°$I’$I’$I’$% `I’$I’$I’$IJÀ’$I’$I’$I’”$ €%I’$I’$I’$)IK’$I’$I’$IR’0–$I’$I’$I’¤$a,I’$I’$I’$IIÂX’$I’$I’$I’’„°$I’$I’$I’$% `I’$I’$I’$IJÀ’$I’$I’$I’”$ €%I’$I’$I’$)IK’$I’$I’$IR’0–$I’$I’$I’¤$a,I’$I’$I’$II"åX/¬¯¯ÿ,ë¤O$Ñ%H’$I’$I’$}islÈ"I’$I’$I’$I_nn-I’$I’$I’$IIÂX’$I’$I’$I’’„°$I’$I’$I’$% `I’$I’$I’$IJÀ’$I’$I’$I’”$ €%I’$I’$I’$)IK’$I’$I’$IR’0–$I’$I’$I’¤$a,I’$I’$I’$IIÂX’$I’$I’$I’’„°$I’$I’$I’$% `I’$I’$I’$IJÀ’$I’$I’$I’”$ €%I’$I’$I’$)IK’$I’$I’$IR’0–$I’$I’$I’¤$a,I’$I’$I’$IIÂX’$I’$I’$I’’„°$I’$I’$I’$% `I’$I’$I’$IJ'NÈ¢óÕ?eâoÀE­#@ˆ&ç~Ÿ‰'ò“±­ ÑõI’$I’$I’$IÒqúRÀÁ¼þüÇĉLœ8‘ßÞÖ—©.…üç1¢KÒû[™í8âºæ…ŽÖ;‘ô4¤“åÚc µ°#ÎïM“”O©KI’$I’$I’$Iú„¾D±e€ìö½hõÁ¿Z÷ᔬw™UžØÓÚšaãFÒ¯´’wfl¤6$¯ûEŒ;?Ÿ™+ÞfaiìðÝ'Ê™ûÐ,‹$¨­ûãDâ“–œIÇQã8ÿÔ5l˜üÅÑOØ$I’$I’$I’$} Biii?ŠD"ÇÝѶmÛ¨­­%‹‡ÉÍÍ¥eË–tíÚ•õë×½ƒ@6/º„îJ˜>½šV­ H}³·ÖÌjψo`póävfÈù#è—¶Œy£øÆøNd"´è{#Ft`Ë”YÄÏþ¿øÎÂïWÒíúÛ¹é¢6¬Ÿº’67ßË^:„‚uS˜»=Nf» êEíŽZZޏë/Aß–u¬^¼žòX˜ÂÑwñ³o]Bïà|¦¯ª$ÔâBîúé·¸¤W€ù3JhwñM|­W¡@>=ÏÁˆnµÌzg=ÕÁ†œ~áõüÛ¸dÔpÎêÒ˜ú«Ø°+ Á:¼žûú×;ê|†öëDÓø&Vl(çñµ¤ãP__ϧñ;w¬***>·gI’$I’$I’¤GvvöQ¯ùÔ¶€nÚ´é!Û'Ož|L÷2ÛÒ»mÊ–0kÖ"J Ñ®w[Òˆd‘Û»¼¶n# ç¼ÇÜõµD²BÔíMMËVÎcöŒÅìØ· 7Ÿso¸†…© r¤MŸœ1„S(¡4¢a—‹¸fH³£/¦‘•R·7´­fÍüÙÌ\PDm"Láùß䆡È)YÀŒÙë eoÆýû¥œš ÒöB®v*ƒ›Y<)[Íi•%úIW!K’$I’$I’$IÒ^ŸêÐùùùYù¶zõêc¼3@z›Þœœ5«±iS‚UÕCè}JoÚ¤-déι¼üjgúvìEú¶é<÷ØtÊâ@ðEfôèÁ¸U,ÿç<¹¦ÑäƒncKxöWO2³¨Šh<“3÷ø÷Ÿáþ§S×åÜ}Ãi4íÑ™†“&¹äèV¦ÿýMÎ8³§Ä7ðú_eq i˨þM-¼úì‹Ì)°&ã6®êÔ…¾-#¬KÍ% `Ç^úeÖTâ®þ•’HAAÁ]‚$I’$I’$I:A}êggggÇ)//ÿw¥ÑªW{"DY:¿ˆººóÖÖÓ»s{z·JcéŠÚOTKõÂ×ywcõÀ‘–WlÞLeËÉL¡nÕTæUvàŒfÃøöÏz°øµ¿ñ×W±=þ &I’$I’$I’$Iò©ÀÁàÇÜY:µ½:¦Ðé†_ðÛ}„騫©+Žu%ñGÕ×Ôs,;+>¨78tNØóy œNøèíé#±‰IOLbSýÄ(_WK¬bÿì׬9† ÎlCçónä¤F¿çîÇ–Rí6Ð’$I’$I’$I’ŽÃ§vðñˆö¤S@5e¥¥”––RZ¶gýmf§3(ˆ@"ßæ†"J­Äö4I9Ò)¿G–Õ²9Á™-N¡@ùVÊcqbõ{6fÎnšK8"÷¤6|ôXå8ñH!ÜóüDõV6W,RK–2oÞ<æÍ›ÇÂekÙ¸+F œJ°r o?õ ?úÍJÌö§Ñø3‰â%I’$I’$I’$H¾±c˜ægt& Øþ¯_óÓ—·H)dÔÿ¹“a:Ó½Ù l(/¢ È(¸›ÿ£'¥«Ÿç¿_(b{I-´L£Çu·Ó¸¤˜)~”u·„‹¹ãgÍoLØ6w1;c1Âïof7Iív#wܱ“ŒÂ&½/º‹ÍeÐ!ïd®ºý?Z2'ÿ4™Éoo¡ßˆæ ºõ»4]¸‘ÝÍi×|+Üý¿lìx#w]šÁúUEÔ6èD/ÞÀ.–$I’$I’$I’tœ¾øÀáftï’”²páö=á/@´˜‹Ê€œÞ­)Áí3y~Ò*!¶lL¨¶ž»YóÒ Ì)®ƒŒædGÙý¸û(WòÞϱ0Ú€,bl_ðWys+Q fÅ <õÎ&jH¡Q~”EÏþ™7¶èÖúͼõ×élªHãBò¨¥>QOѤßñû.¤¨¶1»ŸÁé'gS¶r%;£-{Ÿ-‰æt:£=ÚEؾâM~|6ež,I’$I’$I’$é8rss™™™_t’ô™©ªªÂß9I’$I’$I’t"øâWK’$I’$I’$I’>)‰D‚ªªª/ºIúÌ$wkxI’$I’$I’¤¯¦ÿxaÃLŸIEND®B`‚nixnote2-2.0.2/settings/000077500000000000000000000000001315604104400151175ustar00rootroot00000000000000nixnote2-2.0.2/settings/accountsmanager.cpp000066400000000000000000000221741315604104400210030ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "accountsmanager.h" #include "global.h" extern Global global; //******************************************** //* Constructor //******************************************** AccountsManager::AccountsManager(int id, QObject *parent) : QObject(parent) { currentId = id; configFile = global.fileManager.getHomeDirPath("")+"accounts.conf"; if (!QFile(configFile).exists()) { QFile xmlFile(configFile); xmlFile.open(QIODevice::WriteOnly | QIODevice::Text); QXmlStreamWriter writer(&xmlFile); writer.setAutoFormatting(true); writer.setCodec("UTF-8"); writer.writeStartDocument(); writer.writeDTD(""); writer.writeStartElement("user-accounts"); writer.writeStartElement("account"); writer.writeTextElement("name", "Default Account"); writer.writeTextElement("id", "1"); writer.writeEndElement(); writer.writeEndElement(); writer.writeEndDocument(); xmlFile.close(); } QFile file(configFile); file.open(QIODevice::ReadOnly | QIODevice::Text); doc.setContent(&file); file.close(); QDomNodeList nodes = doc.elementsByTagName("account"); for (int i=0; igetOAuthToken().length() > 0) return true; else return false; } //******************************************** //* Get a list of account IDs //******************************************** QList AccountsManager::idList() { QList ids; QDomNodeList nodes = doc.elementsByTagName("account"); for (int i=0; igetServer(); QString name = this->getName(); this->removeId(currentId); this->addId(currentId, name, token, server); QDomNodeList nodes = doc.elementsByTagName("account"); for (int i=0; igetServer(); QString token = this->getOAuthToken(); if (id <=0) id = currentId; this->removeId(id); this->addId(id, name, token, server); } //******************************************** //* Set the server for an acocunt //******************************************** QString AccountsManager::getServer() { QDomElement element = currentNode.toElement(); QDomNode tokenNode = element.firstChildElement("server"); QString server = tokenNode.toElement().text(); if (server == "") server = "www.evernote.com"; return server; } //******************************************** //* Get the name of the account in use //******************************************** QString AccountsManager::getName() { QDomElement element = currentNode.toElement(); QDomNode tokenNode = element.firstChildElement("name"); QString server = tokenNode.toElement().text(); return server; } //******************************************** //* Add an account //******************************************** int AccountsManager::addId(int id, QString name, QString oauth, QString server) { if (id <=0) id = getNewIdNumber(); QDomElement account = doc.createElement("account"); QDomElement idElement = doc.createElement("id"); QDomText idText = doc.createTextNode(QString::number(id)); idElement.appendChild(idText); account.appendChild(idElement); QDomElement nameElement = doc.createElement("name"); QDomText nameText = doc.createTextNode(name); nameElement.appendChild(nameText); account.appendChild(nameElement); if (oauth.trimmed() != "") { QDomElement consumerKeyElement = doc.createElement("consumerKey"); QDomText consumerKeyText = doc.createTextNode("baumgarr-3523"); // current EDAM_CONSUMER_KEY = "baumgarr-3523" consumerKeyElement.appendChild(consumerKeyText); account.appendChild(consumerKeyElement); QDomElement oauthElement = doc.createElement("oauth-token"); QDomText oauthText = doc.createTextNode(oauth); oauthElement.appendChild(oauthText); account.appendChild(oauthElement); } if (server.trimmed() != "" && server != "www.evernote.com") { QDomElement serverElement = doc.createElement("server"); QDomText serverText = doc.createTextNode(server); serverElement.appendChild(serverText); account.appendChild(serverElement); } doc.documentElement().appendChild(account); save(); return id; } //******************************************** //* save to accounts.conf //******************************************** void AccountsManager::save() { QFile xmlFile(configFile); xmlFile.open(QIODevice::WriteOnly | QIODevice::Text); xmlFile.write(doc.toByteArray()); xmlFile.close(); } //******************************************** //* Remove an account //******************************************** bool AccountsManager::removeId(int id) { QDomNodeList nodes = doc.elementsByTagName("account"); for (int i=0; i numbers = idList(); for (int i=1; ;i++) if (!numbers.contains(i)) return i; } //******************************************** //* set the oauth token for a specific //* account. //******************************************** void AccountsManager::setOAuthToken(int id, QString token) { AccountsManager manager(id); manager.setOAuthToken(token); } nixnote2-2.0.2/settings/accountsmanager.h000066400000000000000000000063651315604104400204540ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef ACCOUNTSMANAGER_H #define ACCOUNTSMANAGER_H #include #include #include //******************************************************** //******************************************************** //* This class manages the accounts.conf file. It //* stores the oauth key, server URL, consumer key, and //* the unique ID of each account. //******************************************************** //******************************************************** class AccountsManager : public QObject { Q_OBJECT private: QDomDocument doc; // XML dom doc to parse out accounts.conf QDomNode currentNode; // node to parse out accounts.conf void save(); // Save accounts.conf file. public: explicit AccountsManager(int id, QObject *parent = 0); // Constructor int currentId; // ID currently in use QString configFile; // Configuration (accounts.conf) file bool oauthTokenFound(); // Do we have a good oauth token? QList idList(); // List of all IDs int addId(int id, QString name, QString oauth="", QString server=""); // Add a new account int getNewIdNumber(); // Increment the ID number (used for a new account) QStringList nameList(); // Get a list of account names QString getOAuthToken(); // Get the oauth token for the current account void setOAuthToken(QString token); // Set the oauth token for the current account void setOAuthToken(int id, QString token); // set oauth token for a specific account void setName(QString name, int id=0); // Set the name of a specificaccount QString getServer(); // Get the URL of the server for the current account QString getName(); // Get the name of the current account in use bool removeId(int id); // Delete an account signals: public slots: }; #endif // ACCOUNTSMANAGER_H nixnote2-2.0.2/settings/colorsettings.cpp000066400000000000000000000054631315604104400205320ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "colorsettings.h" #include #include #include #include #include "global.h" extern Global global; ColorSettings::ColorSettings(QObject *parent) : QObject(parent) { colors.clear(); colors.insert(tr("White"), "white"); colors.insert(tr("Red"), "Red"); colors.insert(tr("Blue"), "blue"); colors.insert(tr("Green"), "green"); colors.insert(tr("Yellow"), "yellow"); colors.insert(tr("Black"), "black"); colors.insert(tr("Purple"), "purple"); colors.insert(tr("Brown"), "brown"); colors.insert(tr("Orange"), "orange"); colors.insert(tr("Grey"), "grey"); colors.insert(tr("Powder Blue"), "powderblue"); QString userFile = global.fileManager.getHomeDirPath("") + QString("colors.txt"); QString globalFile = global.fileManager.getProgramDirPath("") +QString("colors.txt"); QSettings globalSettings(globalFile, QSettings::IniFormat); QSettings userSettings(userFile, QSettings::IniFormat); loadFile(globalSettings); loadFile(userSettings); } void ColorSettings::loadFile(QSettings &settings) { QStringList keyList = settings.allKeys(); for (int i=0; i > ColorSettings::colorList() { QStringList keys = colors.keys(); keys.sort(); QList< QPair > list; for (int i=0; i pair; pair.first = keys[i]; pair.second = colors[keys[i]]; list.append(pair); } return list; } nixnote2-2.0.2/settings/colorsettings.h000066400000000000000000000025131315604104400201700ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef COLORSETTINGS_H #define COLORSETTINGS_H #include #include #include class ColorSettings : public QObject { Q_OBJECT private: void loadFile(QSettings &settings); public: explicit ColorSettings(QObject *parent = 0); QHash colors; QList < QPair > colorList(); signals: public slots: }; #endif // COLORSETTINGS_H nixnote2-2.0.2/settings/filemanager.cpp000066400000000000000000000247371315604104400201120ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "filemanager.h" #include "global.h" #include #include //******************************************* //* This class is used to find the location //* of various files & directories //******************************************* using namespace std; FileManager::FileManager() { } void FileManager::setup(QString homeDirPath, QString programDirPath, int id) { homeDir.setPath(toPlatformPathSeparator(homeDirPath)); programDir.setPath(toPlatformPathSeparator(programDirPath)); createDirOrCheckWriteable(homeDir); this->homeDirPath = slashTerminatePath(homeDir.path()); this->programDirPath = slashTerminatePath(programDir.path()); // Read only files that everyone uses imagesDir.setPath(programDirPath+"images"); checkExistingReadableDir(imagesDir); imagesDirPath = slashTerminatePath(imagesDir.path()); javaDir.setPath(programDirPath+"java"); checkExistingReadableDir(javaDir); javaDirPath = slashTerminatePath(javaDir.path()); // spellDir.setPath(programDirPath+"spell"); // checkExistingReadableDir(spellDir); // spellDirPath = slashTerminatePath(spellDir.path()); spellDirUser.setPath(homeDirPath+"spell"); createDirOrCheckWriteable(spellDirUser); spellDirPathUser = slashTerminatePath(spellDirUser.path()); //xmlDir.setPath(programDirPath+"xml"); //checkExistingReadableDir(xmlDir); translateDir.setPath(programDirPath+"translations"); checkExistingReadableDir(translateDir); translateDirPath= slashTerminatePath(translateDir.path()); qssDir.setPath(programDirPath+"qss"); checkExistingReadableDir(qssDir); qssDirPath = slashTerminatePath(qssDir.path()); // Read/write directories that only we use QString settingsFile = getHomeDirPath("") + "nixnote.conf"; QSettings globalSettings(settingsFile, QSettings::IniFormat); if (id <=0) { globalSettings.beginGroup("SaveState"); int accountId = globalSettings.value("lastAccessedAccount", 1).toInt(); globalSettings.endGroup(); id = accountId; } qssDirUser.setPath(homeDirPath+"qss"); createDirOrCheckWriteable(qssDirUser); qssDirPathUser = slashTerminatePath(qssDirUser.path()); logsDir.setPath(homeDirPath+"logs-" +QString::number(id)); createDirOrCheckWriteable(logsDir); logsDirPath = slashTerminatePath(logsDir.path()); tmpDir.setPath(homeDirPath+"tmp-" +QString::number(id)); createDirOrCheckWriteable(tmpDir); tmpDirPath = slashTerminatePath(tmpDir.path()); dbDir.setPath(homeDirPath+"db-" +QString::number(id)); createDirOrCheckWriteable(dbDir); dbDirPath = slashTerminatePath(dbDir.path()); dbaDir.setPath(dbDirPath+"dba"); createDirOrCheckWriteable(dbaDir); dbaDirPath = slashTerminatePath(dbaDir.path()); dbiDir.setPath(dbDirPath+"dbi"); createDirOrCheckWriteable(dbiDir); dbiDirPath = slashTerminatePath(dbiDir.path()); thumbnailDir.setPath(dbDirPath+"tdba"); createDirOrCheckWriteable(thumbnailDir); thumbnailDirPath = slashTerminatePath(thumbnailDir.path()); } QString FileManager::toPlatformPathSeparator(QString relativePath) { return relativePath; } /*************************************************/ /* Given a path, append either a / or a \ to */ /* form a fully qualified path */ /*************************************************/ QString FileManager::slashTerminatePath(QString path) { if (!path.endsWith(QDir::separator())) { return path + QDir::separator(); } return path; } /*************************************************/ /* Delete files in a directory. This is used */ /* to cleanup temporary files. */ /*************************************************/ void FileManager::deleteTopLevelFiles(QDir dir, bool exitOnFail) { dir.setFilter(QDir::Files); QStringList list = dir.entryList(); for (qint32 i=0; icheckExistingReadableDir(dir); } QDir FileManager::getProgramDirFile(QString relativePath) { return QDir(programDir.dirName() + toPlatformPathSeparator(relativePath)); } QString FileManager::getProgramDirPath(QString relativePath) { return programDirPath + toPlatformPathSeparator(relativePath); } QDir FileManager::getHomeDirFile(QString relativePath) { return QDir(homeDir.dirName() + toPlatformPathSeparator(relativePath)); } QString FileManager::getHomeDirPath(QString relativePath) { return homeDirPath + toPlatformPathSeparator(relativePath); } //QString FileManager::getSpellDirPath(QString relativePath) { // return spellDirPath + toPlatformPathSeparator(relativePath); //} //QDir FileManager::getSpellDirFile(QString relativePath) { // return QDir(spellDir.dirName() + toPlatformPathSeparator(relativePath)); //} //QString FileManager::getSpellDirPath() { // return spellDirPath; //} QDir FileManager::getSpellDirFileUser(QString relativePath) { return spellDirPathUser + toPlatformPathSeparator(relativePath); } QString FileManager::getSpellDirPathUser() { return spellDirPathUser; } QString FileManager::getDbDirPath(QString relativePath) { return dbDirPath + toPlatformPathSeparator(relativePath); } QDir FileManager::getImageDirFile(QString relativePath) { return QDir(imagesDir.dirName()+ toPlatformPathSeparator(relativePath)); } QString FileManager::getImageDirPath(QString relativePath) { return imagesDirPath + toPlatformPathSeparator(relativePath); } QDir FileManager::getJavaDirFile(QString relativePath) { return QDir(javaDir.dirName()+ toPlatformPathSeparator(relativePath)); } QString FileManager::getJavaDirPath(QString relativePath) { return javaDirPath + toPlatformPathSeparator(relativePath); } QDir FileManager::getLogsDirFile(QString relativePath) { return QDir(logsDir.dirName() + toPlatformPathSeparator(relativePath)); } QString FileManager::getLogsDirPath(QString relativePath) { return logsDirPath + toPlatformPathSeparator(relativePath); } QString FileManager::getQssDirPath(QString relativePath) { return qssDirPath + toPlatformPathSeparator(relativePath); } QString FileManager::getQssDirPathUser(QString relativePath) { return qssDirPathUser + toPlatformPathSeparator(relativePath); } QString FileManager::getTmpDirPath() { return tmpDirPath; } QString FileManager::getTmpDirPath(QString relativePath) { return tmpDirPath + toPlatformPathSeparator(relativePath); } QString FileManager::getTmpDirPathSpecialChar(QString relativePath) { return tmpDirPath + toPlatformPathSeparator(relativePath).replace("#", "%23"); } QString FileManager::getDbaDirPath() { return dbaDirPath.replace("\\", "/"); } QString FileManager::getDbaDirPath(QString relativePath) { return dbaDirPath + toPlatformPathSeparator(relativePath); } QString FileManager::getDbaDirPathSpecialChar(QString relativePath) { return dbaDirPath + toPlatformPathSeparator(relativePath).replace("#", "%23"); } QString FileManager::getDbiDirPath() { return dbiDirPath; } QString FileManager::getDbiDirPath(QString relativePath) { return dbiDirPath + toPlatformPathSeparator(relativePath); } QString FileManager::getDbiDirPathSpecialChar(QString relativePath) { return dbiDirPath + toPlatformPathSeparator(relativePath).replace("#", "%23"); } QString FileManager::getThumbnailDirPath() { return thumbnailDirPath; } QString FileManager::getThumbnailDirPath(QString relativePath) { return thumbnailDirPath + toPlatformPathSeparator(relativePath); } QString FileManager::getThumbnailDirPathSpecialChar(QString relativePath) { return thumbnailDirPath + toPlatformPathSeparator(relativePath).replace("#", "%23"); } /* QDir FileManager::getXMLDirFile(QString relativePath) { return QDir(xmlDir.dirName() + toPlatformPathSeparator(relativePath)); } */ QString FileManager::getTranslateFilePath(QString relativePath) { return translateDirPath + toPlatformPathSeparator(relativePath); } void FileManager::purgeResDirectory(bool exitOnFail) { this->deleteTopLevelFiles(tmpDir.dirName(), exitOnFail); } nixnote2-2.0.2/settings/filemanager.h000066400000000000000000000100471315604104400175440ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef FILEMANAGER_H #define FILEMANAGER_H #include #include #include #include #include //************************************************ //* This class is used to retrieve the //* location of certain directories. //************************************************ class FileManager : public QObject { Q_OBJECT private: //QRegExp ALL_PATH_SEPARATORS_REGEX = "[/\\\\]"; QString programDirPath; QDir programDir; QString homeDirPath; QDir homeDir; QString dbDirPath; QDir dbDir; QDir logsDir; QString logsDirPath; QString imagesDirPath; QDir imagesDir; QString javaDirPath; QDir javaDir; // QString spellDirPath; // QDir spellDir; QString spellDirPathUser; QDir spellDirUser; QString qssDirPath; QDir qssDir; QString qssDirPathUser; QDir qssDirUser; QString tmpDirPath; QDir tmpDir; QString dbaDirPath; QDir dbaDir; QString dbiDirPath; QDir dbiDir; QString thumbnailDirPath; QDir thumbnailDir; //QDir xmlDir; QString translateDirPath; QDir translateDir; QString toPlatformPathSeparator(QString relativePath); QString slashTerminatePath(QString path); void deleteTopLevelFiles(QDir dir, bool exitOnFail); void createDirOrCheckWriteable(QDir dir); void checkExistingReadableDir(QDir dir); void checkExistingWriteableDir(QDir dir); public: FileManager(); void setup(QString homeDirPath, QString programDirPath, int id); QDir getProgramDirFile(QString relativePath); QString getProgramDirPath(QString relativePath); QDir getHomeDirFile(QString relativePath); QString getHomeDirPath(QString relativePath); // QString getSpellDirPath(QString relativePath); // QDir getSpellDirFile(QString relativePath); QString getSpellDirPath(); QDir getSpellDirFileUser(QString relativePath); QString getSpellDirPathUser(); QString getDbDirPath(QString relativePath); QString getDbaDirPath(); QString getDbaDirPath(QString relativePath); QString getDbaDirPathSpecialChar(QString relativePath); QString getDbiDirPath(); QString getDbiDirPath(QString relativePath); QString getDbiDirPathSpecialChar(QString relativePath); QString getThumbnailDirPath(); QString getThumbnailDirPath(QString relativePath); QString getThumbnailDirPathSpecialChar(QString relativePath); QDir getImageDirFile(QString relativePath); QString getImageDirPath(QString relativePath); QDir getJavaDirFile(QString relativePath); QString getJavaDirPath(QString relativePath); QDir getLogsDirFile(QString relativePath); QString getLogsDirPath(QString relativePath); QString getQssDirPath(QString relativePath); QString getQssDirPathUser(QString relativePath); QString getTmpDirPath(); QString getTmpDirPath(QString relativePath); QString getTmpDirPathSpecialChar(QString relativePath); //QDir getXMLDirFile(QString relativePath); QString getTranslateFilePath(QString relativePath); void purgeResDirectory(bool exitOnFail); signals: public slots: }; #endif // FILEMANAGER_H nixnote2-2.0.2/settings/startupconfig.cpp000066400000000000000000001047441315604104400205250ustar00rootroot00000000000000/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "startupconfig.h" #include #include #include #include "threads/syncrunner.h" #include //extern Global global; StartupConfig::StartupConfig() { homeDirPath = QDir().homePath() + QString("/.nixnote/"); this->forceNoStartMinimized = false; this->startupNewNote = false; this->sqlExec = false; this->sqlString = ""; this->forceStartMinimized = false; this->enableIndexing = false; this->startupNoteLid = 0; this->forceSystemTrayAvailable=false; this->disableEditing = false; this->accountId=-1; command = new QBitArray(STARTUP_OPTION_COUNT); command->fill(false); newNote = NULL; queryNotes = NULL; purgeTemporaryFiles=true; delNote = NULL; email = NULL; extractText = NULL; exportNotes = NULL; importNotes = NULL; alter = NULL; signalGui = NULL; } // Print out user help void StartupConfig::printHelp() { QString help = QString("usage: nixnote2 \n" +QString(" options:\n\n") +QString(" help or ? or --? or --help Show this message\n") +QString(" start Start NixNote GUI with the specified options.\n") +QString(" If no command is specified, this is the default.\n") +QString(" start options:\n") +QString(" --accountId= Start with specified user account.\n") +QString(" --configDir= Directory containing config & database.\n") +QString(" --dontStartMinimized Override option to start minimized.\n") +QString(" --disableEditing Disable note editing\n") +QString(" --enableIndexing Enable background Indexing (can cause problems)\n") +QString(" --openNote= Open a specific note on startup\n") +QString(" --forceSystemTrayAvailable Force the program to accept that\n") +QString(" the desktop supports tray icons.\n") +QString(" --startMinimized Force a startup with NixNote minimized\n") +QString(" --syncAndExit Synchronize and exit the program.\n") +QString(" sync Synchronize with Evernote without showing GUI.\n") +QString(" shutdown If running, ask NixNote to shutdown\n") +QString(" show_window If running, ask NixNote to show the main window.\n") +QString(" query If running, search NixNote and display the results.\n") +QString(" query options:\n") +QString(" --accountId= Account number (defaults to last used account).\n") +QString(" --configDir= Directory containing config & database.\n") +QString(" --search=\"search string\" Search string.\n\n") +QString(" --delimiter=\"character\" Character to place between fields. Defaults to |.\n") +QString(" --noHeaders Do not show column headings.") +QString(" --display=\"\" Search string.\n\n") +QString(" Output Format: <:>\n") +QString(" %i Show the internal note ID.\n") +QString(" %t Show the note title.\n") +QString(" %n Show the notebook.\n") +QString(" %g Show tags.\n") +QString(" %c Show the date the note was created.\n") +QString(" %u Show the last date updated.\n") +QString(" %e Show if is synchronized with Evernote.\n") +QString(" %s Show the source URL.\n") +QString(" %a Show the author.\n") +QString(" %x Show if the note has a todo item.\n") +QString(" %r Show the reminder time.\n") +QString(" %v Show the time the reminder was completed.\n") +QString(" Pad the field to this number of spaces on the display.\n") +QString(" <:> Truncate the field if longer than the padding.\n") +QString(" addNote Add a new note via the command line.\n") +QString(" addNote options:\n") +QString(" --title=\"\" Title of the new note.\n") +QString(" --notebook=\"<notebook>\" Notebook for the new note.\n") +QString(" --tag=\"<tag>\" Assign a tag.\n") +QString(" For multiple tags use multiple --tag statements.\n") +QString(" --attachment=\"<file_path>\" File to attach to the note.\n") +QString(" For multiple files, use multiple --attachment statements.\n") +QString(" --delimiter=\"<delmiiter>\" Character string identifying attachment points.\n") +QString(" Defaults to %%.\n") +QString(" --created=\"<datetime>\" Date & time created in yyyy-MM-ddTHH:mm:ss.zzzZ format.\n") +QString(" --updated=\"<datetime>\" Date & time updated in yyyy-MM-ddTHH:mm:ss.zzzZ format.\n") +QString(" --reminder=\"<datetime>\" Reminder date & time in yyyy-MM-ddTHH:mm:ss.zzzZ format.\n") +QString(" --noteText=\"<text>\" Text of the note. If not provided input\n") +QString(" is read from stdin.\n") +QString(" --accountId=<id> Account number (defaults to last used account).\n") +QString(" --configDir=<dir> Directory containing config & database.\n") +QString(" appendNote <options> Append to an existing note.\n") +QString(" appendNote options:\n") +QString(" --id=\"<title>\" ID of note to append.\n") +QString(" --attachment=\"<file_path>\" File to attach to the note.\n") +QString(" For multiple files, use multiple --attachment statements.\n") +QString(" --delimiter=\"<delmiiter>\" Character string identifying attachment points.\n") +QString(" Defaults to %%.\n") +QString(" --noteText=\"<text>\" Text of the note. If not provided input\n") +QString(" is read from stdin.\n") +QString(" --accountId=<id> Account number (defaults to last used account).\n") +QString(" --configDir=<dir> Directory containing config & database.\n") +QString(" alterNote <options> Change a notes't notebook or tags.\n") +QString(" alterNote options:\n") +QString(" --id=\"<note_ids>\" Space separated list of note IDs to extract.\n") +QString(" --search=\"search string\" Alter notes matching search string.\n") +QString(" --notebook=\"<notebook>\" Move matching notes to this notebook.\n") +QString(" --addTag=\"<tag_name>\" Add this tag to matching notes.\n") +QString(" --delTag=\"<tag_name>\" Remove this tag from matching notes.\n") +QString(" --reminder=\"<datetime>\" Set a reminder in yyyy-MM-ddTHH:mm:ss.zzzZ format") +QString(" --reminderClear Clear the note's reminder.\n") +QString(" --reminderComplete Set the reminder as complete.\n") +QString(" yyyy-MM-ddTHH:mm:ss.zzzZ format or the literal 'now' to default\n") +QString(" to the current date & time.") +QString(" --accountId=<id> Account number (defaults to last used account).\n") +QString(" --configDir=<dir> Directory containing config & database.\n") +QString(" readNote <options> Read the text contents of a note.\n") +QString(" --id=\"<note_id>\" ID of the note to read.\n") +QString(" --accountId=<id> Account number (defaults to last used account).\n") +QString(" --configDir=<dir> Directory containing config & database.\n") +QString(" deleteNote <options> Move a note to the trash via the command line.\n") +QString(" deleteNote options:\n") +QString(" --id=\"<note_id>\" ID of the note to delete.\n") +QString(" --noVerify Do not prompt for verification.\n") +QString(" --accountId=<id> Account number (defaults to last used account).\n") +QString(" --configDir=<dir> Directory containing config & database.\n") +QString(" emailNote <options> Move a note to the trash via the command line.\n") +QString(" emailNote options:\n") +QString(" --id=\"<note_id>\" ID of the note to email.\n") +QString(" --subject=\"<subject>\" Additional comments.\n") +QString(" --to=\"<address list>\" List of recipients for the email.\n") +QString(" --cc=\"<address list>\" List of recipients to carbon copy.\n") +QString(" --bcc=\"<address list>\" List of recipients to blind carbon copy.\n") +QString(" --note=\"<note>\" Additional comments.\n") +QString(" --ccSelf Send a copy to yourself.\n") +QString(" --accountId=<id> Account number (defaults to last used account).\n") +QString(" --configDir=<dir> Directory containing config & database.\n") +QString(" backup <options> Backup the NixNote database.\n") +QString(" backup options:\n") +QString(" --output=<filename> Output filename.\n") +QString(" --accountId=<id> Account number (defaults to last used account).\n") +QString(" --configDir=<dir> Directory containing config & database.\n") +QString(" export <options> Export notes from NixNote.\n") +QString(" export options:\n") +QString(" --id=\"<note_ids>\" Space separated list of note IDs to extract.\n") +QString(" --search=\"search string\" Export notes matching search string.\n") +QString(" --output=\"filename\" Output file name.\n") +QString(" --deleteAfterExtract Delete notes after the extract completes.\n") +QString(" --noVerifyDelete Don't verify deletions.\n") +QString(" --accountId=<id> Account number (defaults to last used account).\n\n") +QString(" --configDir=<dir> Directory containing config & database.\n") +QString(" import <options> Import notes from a NixNote extract (.nnex).\n") +QString(" import options:\n") +QString(" --input=\"filename\" Input file name.\n") +QString(" --accountId=<id> Account number (defaults to last used account).\n\n") +QString(" --configDir=<dir> Directory containing config & database.\n") +QString(" closeNotebook <options> Close a notebook.\n") +QString(" closeNotebook options:\n") +QString(" --notebook=\"notebook\" Notebook name.\n") +QString(" --accountId=<id> Account number (defaults to last used account).\n\n") +QString(" --configDir=<dir> Directory containing config & database.\n") +QString(" openNotebook <options> Open a closed a notebook.\n") +QString(" openNotebook options:\n") +QString(" --notebook=\"notebook\" Notebook name.\n") +QString(" --accountId=<id> Account number (defaults to last used account).\n\n") +QString(" --configDir=<dir> Directory containing config & database.\n") +QString(" signalGui <options> Send command to a running NixNote.\n") +QString(" signalGui options:\n") +QString(" --show Show NixNote if hidden.\n") +QString(" --synchronize Synchronize with Evernote.\n") +QString(" --shutdown Shutdown NixNote.\n") +QString(" --screenshot Start a screen capture.\n") +QString(" --openNote Open a note. --id=<id> must be specified.\n") +QString(" --openNoteNewTab Open a note in a new tab. --id=<id> must be specified.\n") +QString(" --openExternalNote Open a note in an external window. --id=<id> must be specified.\n") +QString(" --id=<id> Note Id to open.\n") +QString(" --newNote Create a new note.\n") +QString(" --newExternalNote Create a new note in an external window.\n") +QString(" --accountId=<id> Account number (defaults to last used account).\n\n") +QString(" --configDir=<dir> Directory containing config & database.\n") +QString(" Examples:\n\n") +QString(" To Start NixNote, do a sync, and then exit.\n") +QString(" nixnote2 start --syncAndExit\n\n") +QString(" To start NixNote using a secondary account.\n") +QString(" nixnote2 --accountId=2\n\n") +QString(" To close an open notebook.\n") +QString(" nixnote2 --closeNotebook notebook=\"My Notebook\"\n\n") +QString(" To add a note to the notebook \"My Notebook\"\n") +QString(" nixnote2 addNote --notebook=\"My Stuff\" --title=\"My New Note\" --tag=\"Tag1\" --tag=\"Tag2\" --noteText=\"My Note Text\"\n\n") +QString(" To append to an existing note.\n") +QString(" nixnote2 appendNote --id=3 --noteText=\"My Note Text\"\n\n") +QString(" To add a tag to notes in the notebook \"Stuff\".\n") +QString(" nixnote2 alterNote --search=\"notebook:Stuff\" --addTag=\"NewTag\"\n\n") +QString(" Query notes for the search text. Results show the ID, note title (padded to 10 characters but truncated longer) and the notebook\n") +QString(" nixnote2 query --search=\"Famous Authors\" --delimiter=\" * \" --display=\"\%i%t10:%n\"\n\n") +QString(" To extract all notes in the \"Notes\" notebook.\n") +QString(" nixnote2 export --search=\"notebook:notes\" --output=/home/joe/exports.nnex\n\n") +QString(" To signal NixNote to do a screenshot from the command line (NixNote must already be running).\n") +QString(" nixnote2 signalGui --screenshot\n\n") +QString("\n\n") ); std::cout << help.toStdString(); } int StartupConfig::init(int argc, char *argv[], bool &guiAvailable) { guiAvailable = true; // Check if we have a GUI available. This is ugly, but it works. // We check for a DISPLAY value, if one is found then we assume // that the GUI is available. We can override this with the --forceNoGui // as any parameter. // Windows Check #ifndef _WIN32 QString display = QProcessEnvironment::systemEnvironment().value("DISPLAY", ""); if (display.trimmed() == "") guiAvailable = false; #endif // End windows check for (int i=1; i<argc; i++) { QString parm(argv[i]); if (parm == "--help" || parm == "-?" || parm == "help" || parm == "--?") { printHelp(); return 1; } if (parm.startsWith("--accountId=", Qt::CaseSensitive)) { parm = parm.mid(12); accountId = parm.toInt(); } if (parm.startsWith("--configDir=", Qt::CaseSensitive)) { parm = parm.mid(12); homeDirPath = parm; } if (parm.startsWith("addNote")) { command->setBit(STARTUP_ADDNOTE,true); if (newNote == NULL) newNote = new AddNote(); guiAvailable = false; } if (parm.startsWith("appendNote")) { command->setBit(STARTUP_APPENDNOTE,true); if (newNote == NULL) newNote = new AddNote(); guiAvailable = false; } if (parm.startsWith("emailNote")) { command->setBit(STARTUP_EMAILNOTE,true); if (email == NULL) email = new EmailNote(); guiAvailable = false; } if (parm.startsWith("export")) { command->setBit(STARTUP_EXPORT,true); if (exportNotes == NULL) exportNotes = new ExtractNotes(); guiAvailable = false; exportNotes->backup=false; } if (parm.startsWith("import")) { command->setBit(STARTUP_IMPORT,true); if (importNotes == NULL) importNotes = new ImportNotes(); guiAvailable = false; } if (parm.startsWith("backup")) { command->setBit(STARTUP_BACKUP,true); if (exportNotes == NULL) exportNotes = new ExtractNotes(); exportNotes->backup=true; guiAvailable = false; } if (parm.startsWith("query")) { command->setBit(STARTUP_QUERY); if (queryNotes == NULL) queryNotes = new CmdLineQuery(); guiAvailable = false; } if (parm.startsWith("readNote")) { command->setBit(STARTUP_READNOTE); if (extractText == NULL) extractText = new ExtractNoteText(); guiAvailable = false; } if (parm.startsWith("deleteNote")) { command->setBit(STARTUP_DELETENOTE); if (delNote == NULL) delNote = new DeleteNote(); guiAvailable = false; } if (parm.startsWith("sync")) { command->setBit(STARTUP_SYNC,true); guiAvailable = false; } if (parm.startsWith("show_window")) { command->setBit(STARTUP_SHOW,true); } if (parm.startsWith("shutdown")) { command->setBit(STARTUP_SHUTDOWN,true); } if (parm.startsWith("alterNote")) { command->setBit(STARTUP_ALTERNOTE,true); if (alter == NULL) alter = new AlterNote(); } if (parm.startsWith("openNotebook")) { command->setBit(STARTUP_OPENNOTEBOOK); notebookList.clear(); } if (parm.startsWith("closeNotebook")) { command->setBit(STARTUP_CLOSENOTEBOOK); notebookList.clear(); } if (parm.startsWith("sqlExec", Qt::CaseSensitive)) { command->setBit(STARTUP_SQLEXEC); guiAvailable = false; } if (parm.startsWith("signalGui")) { command->setBit(STARTUP_SIGNALGUI,true); if (signalGui == NULL) signalGui = new SignalGui(); guiAvailable = false; } // This should be last because it is the default if (parm.startsWith("start")) { command->setBit(STARTUP_GUI,true); guiAvailable = true; } if (command->at(STARTUP_ADDNOTE)) { if (parm.startsWith("--title=", Qt::CaseSensitive)) { parm = parm.mid(8); newNote->title = parm; } if (parm.startsWith("--notebook=", Qt::CaseSensitive)) { parm = parm.mid(11); newNote->notebook = parm; } if (parm.startsWith("--tag=", Qt::CaseSensitive)) { parm = parm.mid(6); newNote->tags.append(parm); } if (parm.startsWith("--attachment=", Qt::CaseSensitive)) { parm = parm.mid(13); newNote->attachments.append(parm); } if (parm.startsWith("--created=", Qt::CaseSensitive)) { parm = parm.mid(10); newNote->created = parm; } if (parm.startsWith("--updated=", Qt::CaseSensitive)) { parm = parm.mid(10); newNote->updated = parm; } if (parm.startsWith("--reminder=", Qt::CaseSensitive)) { parm = parm.mid(11); newNote->reminder = parm; } if (parm.startsWith("--noteText=", Qt::CaseSensitive)) { parm = parm.mid(11); newNote->content = parm; } } if (command->at(STARTUP_APPENDNOTE)) { if (parm.startsWith("--id=", Qt::CaseSensitive)) { parm = parm.mid(5); newNote->lid = parm.toInt(); } if (parm.startsWith("--noteText=", Qt::CaseSensitive)) { parm = parm.mid(11); newNote->content = parm; } } if (command->at(STARTUP_QUERY)) { if (parm.startsWith("--search=", Qt::CaseSensitive)) { parm = parm.mid(9); queryNotes->query = parm; } if (parm.startsWith("--display=", Qt::CaseSensitive)) { parm = parm.mid(10); queryNotes->outputFormat = parm; } if (parm.startsWith("--delimiter=", Qt::CaseSensitive)) { parm = parm.mid(12); queryNotes->delimiter = parm; } if (parm.startsWith("--noHeaders", Qt::CaseSensitive)) { queryNotes->printHeaders=false; } } if (command->at(STARTUP_GUI) || command->count(true) == 0) { command->setBit(STARTUP_GUI,true); if (parm.startsWith("--openNote=", Qt::CaseSensitive)) { parm = parm.mid(11); startupNoteLid = parm.toInt(); } if (parm == "--disableEditing") { disableEditing = true; } if (parm == "--dontStartMinimized") { forceNoStartMinimized = true; } if (parm == "--startMinimized") { forceStartMinimized = true; } if (parm == "--newNote") { startupNewNote = true; } if (parm == "--syncAndExit") { command->clear(); command->setBit(STARTUP_SYNC, true); } if (parm == "--enableIndexing") { enableIndexing = true; } if (parm == "--forceSystemTrayAvailable") { forceSystemTrayAvailable = true; } } if (command->at(STARTUP_DELETENOTE)) { if (parm == "--noVerify") { delNote->verifyDelete = false; } if (parm.startsWith("--id=", Qt::CaseSensitive)) { parm = parm.mid(5); delNote->lid = parm.toInt(); } } if (command->at(STARTUP_EXPORT)) { if (parm.startsWith("--id=", Qt::CaseSensitive)) { parm = parm.mid(5); QRegExp regExp("[ ,;]"); QStringList tokens = parm.split(regExp); for (int i=0; i<tokens.size(); i++) { if (tokens[i].trimmed() != "") exportNotes->lids.append(tokens[i].toInt()); } } if (parm.startsWith("--deleteAfterExport", Qt::CaseSensitive)) { exportNotes->deleteAfterExtract=true; } if (parm.startsWith("--noVerifyDelete", Qt::CaseSensitive)) { exportNotes->verifyDelete=false; } if (parm.startsWith("--search=", Qt::CaseSensitive)) { parm = parm.mid(9); exportNotes->query = parm; } if (parm.startsWith("--output=", Qt::CaseSensitive)) { parm = parm.mid(9); exportNotes->outputFile = parm; } } if (command->at(STARTUP_IMPORT)) { if (parm.startsWith("--input=", Qt::CaseSensitive)) { parm = parm.mid(8); importNotes->inputFile = parm; } } if (command->at(STARTUP_BACKUP)) { if (parm.startsWith("--output=", Qt::CaseSensitive)) { parm = parm.mid(9); exportNotes->outputFile = parm; } } if (command->at(STARTUP_READNOTE)) { if (parm.startsWith("--id=", Qt::CaseSensitive)) { parm = parm.mid(5); extractText->lid = parm.toInt(); } } if (command->at(STARTUP_SIGNALGUI)) { if (parm.startsWith("--id=", Qt::CaseSensitive)) { parm = parm.mid(5); signalGui->lid = parm.toInt(); } if (parm.startsWith("--show", Qt::CaseSensitive)) signalGui->show=true; if (parm.startsWith("--synchronize", Qt::CaseSensitive)) signalGui->synchronize=true; if (parm.startsWith("--screenshot", Qt::CaseSensitive)) signalGui->takeScreenshot=true; if (parm.startsWith("--openNote", Qt::CaseSensitive)) signalGui->openNote=true; if (parm.startsWith("--openExternalNote", Qt::CaseSensitive)) signalGui->openExternalNote=true; if (parm.startsWith("--openNoteNewTab", Qt::CaseSensitive)) signalGui->openNoteNewTab=true; if (parm.startsWith("--newNote", Qt::CaseSensitive)) signalGui->newNote=true; if (parm.startsWith("--newExternalNote", Qt::CaseSensitive)) signalGui->newExternalNote=true; if (parm.startsWith("--shutdown", Qt::CaseSensitive)) signalGui->shutdown=true; } if (command->at(STARTUP_ALTERNOTE)) { if (parm.startsWith("--id=", Qt::CaseSensitive)) { parm = parm.mid(5); QRegExp regExp("[ ,;]"); QStringList tokens = parm.split(regExp); for (int i=0; i<tokens.size(); i++) { if (tokens[i].trimmed() != "") alter->lids.append(tokens[i].toInt()); } } if (parm.startsWith("--search=", Qt::CaseSensitive)) { parm = parm.mid(9); alter->query = parm; } if (parm.startsWith("--notebook=", Qt::CaseSensitive)) { parm = parm.mid(11); alter->notebook = parm; } if (parm.startsWith("--addTag=", Qt::CaseSensitive)) { parm = parm.mid(9); alter->addTagNames.append(parm); } if (parm.startsWith("--delTag=", Qt::CaseSensitive)) { parm = parm.mid(9); alter->delTagNames.append(parm); } if (parm == "--clearReminder") { alter->clearReminder=true; } if (parm == "--reminderComplete") { alter->reminderCompleted=true; } } if (command->at(STARTUP_EMAILNOTE)) { if (parm == "--ccSelf") { email->ccSelf = true; } if (parm.startsWith("--to=", Qt::CaseSensitive)) { parm = parm.mid(5); email->to = parm; } if (parm.startsWith("--cc=", Qt::CaseSensitive)) { parm = parm.mid(5); email->cc = parm; } if (parm.startsWith("--bcc=", Qt::CaseSensitive)) { parm = parm.mid(6); email->bcc = parm; } if (parm.startsWith("--note=", Qt::CaseSensitive)) { parm = parm.mid(7); email->note = parm; } if (parm.startsWith("--subject=", Qt::CaseSensitive)) { parm = parm.mid(10); email->subject = parm; } if (parm.startsWith("--id=", Qt::CaseSensitive)) { parm = parm.mid(5); email->lid = parm.toInt(); } } if (command->at(STARTUP_OPENNOTEBOOK)) { if (parm.startsWith("--notebook=", Qt::CaseSensitive)) { parm = parm.mid(11); notebookList.append(parm); } } if (command->at(STARTUP_CLOSENOTEBOOK)) { if (parm.startsWith("--notebook=", Qt::CaseSensitive)) { parm = parm.mid(11); notebookList.append(parm); } } if (command->at(STARTUP_SQLEXEC)) { this->sqlExec=true; if (parm.startsWith("--query", Qt::CaseSensitive)) { parm = parm.mid(8); } if (!parm.startsWith("sqlExec", Qt::CaseInsensitive)) { sqlString = sqlString + " " + parm; } } } if (command->count(true) == 0) command->setBit(STARTUP_GUI,true); if (command->count(true) > 1) { std::cout << "\nInvalid options specified. Only one command may be specified at a time.\n"; return 16; } // Check for GUI overrides for (int i=0; i<argc; i++) { QString value = QString(argv[i]); if (value == "--forceNoGui") { guiAvailable = false; command->clearBit(STARTUP_GUI); i = argc; } if (value == "--forceGui") { guiAvailable = true; command->setBit(STARTUP_GUI); i = argc; } } return 0; } bool StartupConfig::query() { return command->at(STARTUP_QUERY); } bool StartupConfig::gui() { return command->at(STARTUP_GUI); } bool StartupConfig::sync() { return command->at(STARTUP_SYNC); } bool StartupConfig::addNote() { return command->at(STARTUP_ADDNOTE); } bool StartupConfig::appendNote() { return command->at(STARTUP_APPENDNOTE); } bool StartupConfig::show() { return command->at(STARTUP_SHOW); } bool StartupConfig::shutdown() { return command->at(STARTUP_SHUTDOWN); } bool StartupConfig::deleteNote() { return command->at(STARTUP_DELETENOTE); } bool StartupConfig::readNote() { return command->at(STARTUP_READNOTE); } bool StartupConfig::emailNote() { return command->at(STARTUP_EMAILNOTE); } bool StartupConfig::exports() { return command->at(STARTUP_EXPORT); } bool StartupConfig::import() { return command->at(STARTUP_IMPORT); } bool StartupConfig::backup() { return command->at(STARTUP_BACKUP); } bool StartupConfig::alterNote() { return command->at(STARTUP_ALTERNOTE); } bool StartupConfig::openNotebook() { return command->at(STARTUP_OPENNOTEBOOK); } bool StartupConfig::closeNotebook() { return command->at(STARTUP_CLOSENOTEBOOK); } bool StartupConfig::signalOtherGui() { return command->at(STARTUP_SIGNALGUI); } ����������������������������nixnote2-2.0.2/settings/startupconfig.h�������������������������������������������������������������0000664�0000000�0000000�00000006132�13156041044�0020162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef STARTUPCONFIG_H #define STARTUPCONFIG_H #include <QString> #include <QHash> #include <QIcon> #include <QPixmap> #include <QBitArray> #include "cmdtools/addnote.h" #include "cmdtools/cmdlinequery.h" #include "cmdtools/deletenote.h" #include "cmdtools/emailnote.h" #include "cmdtools/extractnotetext.h" #include "cmdtools/extractnotes.h" #include "cmdtools/alternote.h" #include "cmdtools/importnotes.h" #include "cmdtools/signalgui.h" #define STARTUP_GUI 0 #define STARTUP_SYNC 1 #define STARTUP_SHUTDOWN 2 #define STARTUP_SHOW 3 #define STARTUP_ADDNOTE 4 #define STARTUP_QUERY 5 #define STARTUP_DELETENOTE 6 #define STARTUP_EMAILNOTE 7 #define STARTUP_ALTERNOTE 8 #define STARTUP_EXPORT 9 #define STARTUP_IMPORT 10 #define STARTUP_BACKUP 11 #define STARTUP_READNOTE 12 #define STARTUP_CLOSENOTEBOOK 13 #define STARTUP_OPENNOTEBOOK 14 #define STARTUP_APPENDNOTE 15 #define STARTUP_SQLEXEC 16 #define STARTUP_SIGNALGUI 17 #define STARTUP_OPTION_COUNT 18 class StartupConfig { private: void loadTheme(QString theme); private: QBitArray *command; public: StartupConfig(); QString name; QString homeDirPath; QString programDirPath; QString queryString; bool forceNoStartMinimized; bool startupNewNote; bool sqlExec; int accountId; qint32 startupNoteLid; bool forceStartMinimized; bool enableIndexing; bool forceSystemTrayAvailable; bool disableEditing; bool purgeTemporaryFiles; AddNote *newNote; SignalGui *signalGui; DeleteNote *delNote; EmailNote *email; CmdLineQuery *queryNotes; ExtractNoteText *extractText; ExtractNotes *exportNotes; ImportNotes *importNotes; AlterNote *alter; bool gui(); bool sync(); bool addNote(); bool appendNote(); bool show(); bool shutdown(); bool query(); bool deleteNote(); bool emailNote(); bool readNote(); bool exports(); bool backup(); bool alterNote(); bool openNotebook(); bool closeNotebook(); bool import(); bool signalOtherGui(); QString sqlString; QStringList notebookList; int init(int argc, char *argv[], bool &guiAvailable); void printHelp(); }; #endif // STARTUPCONFIG_H ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/shortcuts.txt������������������������������������������������������������������������0000664�0000000�0000000�00000015620�13156041044�0016062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������File_Note_Add Ctrl+N // Add a new note File_Note_Reindex // Reindex the current note File_Note_Modify_Tags // Change current note tags File_Note_Delete Ctrl+Shift+D // Delete a tag File_Note_Restore // Restore from the trash File_Note_Duplicate // Duplicate the current note File_Note_Merge // Merge multiple notes File_Note_History // View the current note history File_Notebook_Add // Add a notebook File_Notebook_Edit // Edit an existing notebook File_Notebook_Delete // Delete the existing notebook File_Notebook_Close // Open/Close (i.e. archive) a notebook File_Notebook_Icon // Modify the selected notebook icon File_Notebook_Stack // Stack/Unstack notebooks File_Notebook_Publish // publish a notebook File_Notebook_Share // Share a notebook with others File_Tag_Add Ctrl+Shift+T // Add a notebook File_Tag_Edit // Edit an existing notebook File_Tag_Delete // Delete the existing notebook File_Tag_Icon // Modify the selected tag(s) icon. File_SavedSearch_Add // Add a notebook File_SavedSearch_Edit // Edit an existing notebook File_SavedSearch_Delete // Delete the existing notebook File_Save_Content Ctrl+S // Force an immediate save of all notes File_Print Ctrl+P // Print File_Selective_Sync // Selective sync setup File_Empty_Trash // Purge all delete notes File_Exit Ctrl+Q // I'm outahere File_Note_Export_Pdf // Export selected notes as a PDF Edit_Search_Find Ctrl+F // Search only within the current note Edit_Search_Find_Next Ctrl+G // Find the next occurrence within the current note Edit_Search_Find_Prev Ctrl+Shift+G // Find the previous occurrence within the current note Edit_Search_Find_Replace Ctrl+H // Find & Replace within the current note Edit_Undo Ctrl+Z // Undo last change Edit_Redo Ctrl+Y // Redo the last undone change Edit_Cut Ctrl+X // Cut current selection to the clipboard Edit_Copy Ctrl+C // Copy the current selection to the clipboard Edit_Paste Ctrl+V // Paste Edit_Paste_Without_Formatting Ctrl+Shift+V // Paste as plain text Edit_Remove_Formatting // Remove selected formatting from text Edit_Preferences // Settings dialog box Edit_Image_Rotate_Left // Rotate an image left Edit_Image_Rotate_Right // Rotate an image to the right Edit_Delete_Table_Row // Delete a table row Edit_Insert_Table_Row // Insert a table row Edit_Insert_Table_Column // Insert a table row Edit_Delete_Table_Column // Delete a table row Edit_Insert_Hyperlink Ctrl+K // Insert a hyperlink (Popup menu) Edit_Insert_Todo // Insert a todo checkbox (Popup menu) Edit_Insert_QuickLink // Insert a quick link to another note (Popup menu) Edit_Remove_Hyperlink // Remove hyperlink from text Edit_Insert_Html_Entities // Insert HTML Entities Edit_Encrypt_Text // Encrypt selected text (Popup menu) Edit_Insert_Table // Insert a table into a note (Popup menu) Edit_Attach_File // Attach a file Edit_Insert_Latex // Insert a LaTeX formula. Edit_Copy_Note_Url // Copy the current note URL to the clipboard View_List_Narrow // View with the list on the side View_List_Wide // View with the list on the top View_Thumbnail // Fullscreen preview View_Source // Reveal the HTML source of a note View_Extended_Information F8 // View details on the current note View_Show_Note_List F10 // Show current notes View_Show_Notebooks // Show notebooks View_Show_Tags // Show the tags window View_Show_Attribute_Searches // Show the attribute selection tree View_Show_SavedSearches // Show the saved search tree View_Show_Trash // Show the trash window View_Show_Editor_Button_Bar // Hide the editor button bar View_Show_Left_Side F11 // Hide all left hand windows View_Show_Favorites_List // Show/Hide the favorites list in the left hand window View_Show_Notebook_List // Show/Hide the notebook list in the left hand window View_Show_Tags_List // Show/Hide the tags list in the left hand window View_Show_Saved_Search_List // Show/Hide the saved searcht list in the left hand window View_Show_Attribute_List // Show/Hide the attribute list in the left hand window View_Show_Trash // Show/Hide the trash list in the left hand window View_Toolbar // Show/hide the toolbar View_Show_Search // Show/hide the search box View_Show_Quota // Show/hide the user quota View_Show_Zoom // Show/hide the zoom spinner View_Presentation_Mode // Turn on presentation mode Prev_Tab Ctrl+PgDown // Previous tab Next_Tab Ctrl+PgUp // Next Tab Close_Tab Ctrl+W // Close the current tab Up_Note Ctrl+Shift+PgUp // Move up one note in the list Down_Note Ctrl+Shift+PgDown // Move down one note in the list Format_Bold Ctrl+B // Bold (duh) Format_Underline Ctrl+U // Underline Format_Italic Ctrl+I // Italic Format_Strikethrough Ctrl+- // Strikethrough Format_Horizontal_Line // Href line Format_Superscript Ctrl+= // Set superscript Format_Subscript Ctrl+Shift+= // Subscript Format_Alignment_Left Ctrl+L // Left align text Format_Alignment_Center Ctrl+E // Center text Format_Alignment_Full // Fully align text Format_Alignment_Right Ctrl+R // Right align text Format_List_Bullet Ctrl+Shift+B // Bullet list Format_List_Numbered Ctrl+Shift+N // Numbered list Format_Indent_Increase Ctrl+M // Increase the indentation Format_Indent_Decrease Ctrl+Shift+M // Decrease the indent Format_Highlight // Highlight the current text Format_Code_Block // Format code block Tools_Synchronize F9 // Synchronize with Evernote Tools_Connect // Connect to Evernote Tools_Spell_Check // Spell check dialog Tools_Account_Information // Show account information Tools_Reindex_Database // Reindex the entire database Tools_Disable_Note_Indexing // Disable note indexing Tools_Compact_Database // Free unused database space Tools_Database_Status // Current database information Tools_Disable_Editing // Enable/Disable note editing About_Release_Notes // Current version's release notes About_Log // Message log About_About // About dialog box Insert_DateTime Ctrl+; // Insert the current date/time Focus_Title // Focus on the current note title Focus_Tag // Focus on the tag line Focus_Note // Focus on the note itself Focus_Author // Focus on the author field Focus_Url // Focus on the source URL field Focus_Search // Focus on the search field Focus_Notebook // Focus on the notebook Focus_Font // Focus on the font drop down Focus_Font_Size // Focus on the font size drop down ����������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/shortcuts_howto.txt������������������������������������������������������������������0000664�0000000�0000000�00000005114�13156041044�0017277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������I've tried to add the ability to customize your NixNote menu shortcuts, but I don't want to take the time to setup a new dialog box and all the junk that entails. So, I chose a text file config instead. Eventually I may change it so the text file can be edited within the running program, but I have other things to spend my time on at the moment. First, you don't need to do this. Nixnote comes with a default set of shortcuts. If you are happy with those then you don't need to do a thing. If you want to customize your shortcuts then you need to do a little work. You should have a shortcuts_sample.txt file. Copy this to shortcuts.txt in your Nixnote home directory (~/.nevernote on Linux & OS-X and your user home directory on Windows). This is the file that is read when Nixnote starts. Any changes to this file only happen at startup so if you change it you need to restart the program to see those changes. This file has three main columns. The first column is the menu item you are wanting to trigger with the shortcut. For example, File_Note_Add is the shortcut to add a note and Tools_Connect is the shortcut under the tools menu to connect. The second column is the shortcut sequence. For example, "Ctrl+N" or "F10" or "Ctrl+Shift+F12". The remainder of the line is comments and comments should begin with // characters. Spaces or tabs are treated as delimiters. When editing the file, you must have at least the first column (i.e. File_Note_Add). If you do not put anything else on that line or if you just have comments on the rest of the line you will be removing that shortcut. For example, a line like this will cause the shortcut to add a note to be removed. File_Note_Add // Remove that shortcut If you want to change a shortcut, then put the shortcut sequece. For example, this line would change the note add shortcut to Ctrl+W File_Note_Add Ctrl+W // Add shortcut If you choose a shortcut key sequence that already exists in the it will remove that default shortcut and assign it to your custom shortcut. If you put the same shortcut twice or the same action twice with two different shortcuts, the last one will be the one used. In you shortcuts.txt you only need to put the shortcuts you want changed. Any action not in that file will use the default shortcut (or will use the default of no shortcut). It doesn't hurt to use the complete sample shortcut file, but I'd recommend only having the shortcuts you want changed in shortcuts.txt. It will probably make it easier in the long run for you to support if I add other shortcuts later. Good luck. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/���������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13156041044�0014056�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/configstore.cpp������������������������������������������������������������������0000664�0000000�0000000�00000013020�13156041044�0017100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "configstore.h" #include "global.h" #include "sql/nsqlquery.h" #include <QVariant> extern Global global; //********************** // Generic constructor. //********************** ConfigStore::ConfigStore(DatabaseConnection *conn) { db = conn; db->lockForRead(); // Check if the database exists. If not, create it. NSqlQuery sql(db); sql.exec("Select * from sqlite_master where type='table' and name='ConfigStore';"); if (!sql.next()) { db->unlock(); sql.finish(); this->createTable(); return; } sql.finish(); db->unlock(); } //******************************************** // Create the table & set the initial values //******************************************** void ConfigStore::createTable() { QLOG_TRACE() << "Entering ConfigStore::createTable()"; QLOG_DEBUG() << "Creating table ConfigStore"; NSqlQuery sql(db); db->lockForWrite(); // build the SQL command & cretae the table QString command("Create table if not exists ConfigStore (" + QString("key integer primary key not null unique,") + QString("value blob)")); if (!sql.exec(command)) { QLOG_ERROR() << "Creation of ConfigStore table failed: " << sql.lastError(); sql.finish(); db->unlock(); } else { // insert default values into the new table this->initTable(); sql.finish(); db->unlock(); } } //******************************************* // Insert default values into the new table //******************************************* void ConfigStore::initTable() { QLOG_TRACE() << "Entering ConfigStore::initTable()"; QLOG_DEBUG() << "Initializing table ConfigStore"; db->lockForWrite(); NSqlQuery sql(db); sql.prepare("Insert into ConfigStore (key, value) values (:key, :value);"); sql.bindValue(":key", CONFIG_STORE_LID); sql.bindValue(":value", 0); if (!sql.exec()) { QLOG_ERROR() << "Insertion of initial counter failed: " << sql.lastError(); } sql.finish(); db->unlock(); } //******************************************************************* // Every time we add a new object, we call this to get its unique // local ID. This number never changes //******************************************************************* qint32 ConfigStore::incrementLidCounter() { db->lockForWrite(); NSqlQuery sql(db); // Prepare the SQL statement & fetch the row sql.prepare("Select value from ConfigStore where key=:key"); sql.bindValue(":key", CONFIG_STORE_LID); if (!sql.exec()) { QLOG_ERROR() << "Fetch of ConfigStore LID counter statement failed: " << sql.lastError(); } if (!sql.next()) { QLOG_ERROR() << "Fetch from ConfigStore failure: LID NOT FOUND!!!"; } else { // Now that we have the next lid, increment the number & save it qint32 sequence = QVariant(sql.value(0)).toInt(); sequence++; db->lockForWrite(); sql.prepare("Update ConfigStore set value=:lid where key=:key;"); sql.bindValue(":lid",sequence); sql.bindValue(":key", CONFIG_STORE_LID); if (!sql.exec()) { QLOG_ERROR() << "Error updating sequence number: " << sql.lastError(); } sql.finish(); db->unlock(); // Return the next lid to the caller return sequence; } sql.finish(); db->unlock(); return -1; } //******************************************************************* // Save a setting to the DB //******************************************************************* void ConfigStore::saveSetting(int key, QByteArray value) { NSqlQuery sql(db); // Prepare the SQL statement & fetch the row db->lockForWrite(); sql.prepare("Delete from ConfigStore where key=:key"); sql.bindValue(":key", key); sql.exec(); sql.prepare("insert into ConfigStore (key, value) values (:key, :value)"); sql.bindValue(":key", key); sql.bindValue(":value", value); sql.exec(); sql.finish(); db->unlock(); } //******************************************************************* // Return a value from the DB //******************************************************************* bool ConfigStore::getSetting(QByteArray &value, int key) { db->lockForRead(); NSqlQuery sql(db); sql.prepare("select value from ConfigStore where key=:key"); sql.bindValue(":key", key); sql.exec(); while (sql.next()) { value = sql.value(0).toByteArray(); sql.finish(); db->unlock(); return true; } sql.finish(); db->unlock(); return false; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/configstore.h��������������������������������������������������������������������0000664�0000000�0000000�00000004070�13156041044�0016552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef CONFIGSTORE_H #define CONFIGSTORE_H #include <QtSql> #include "sql/databaseconnection.h" //************************************* //* This table is used to store //* config values & things about how //* to run the program. //************************************* // Define key types #define CONFIG_STORE_LID 0 // This is the highest number object in the database #define CONFIG_STORE_WINDOW_GEOMETRY 1 // The window geometry between runs #define CONFIG_STORE_WINDOW_STATE 2 // The window state between runs class DatabaseConnection; // Class used to access & update the table class ConfigStore { private: void initTable(); // Initialize a new table DatabaseConnection *db; // DB connection public: ConfigStore(DatabaseConnection *conn); // Generic constructor // DB Read Functions bool getSetting(QByteArray &value, int key); // retrieve a setting // DB Write Functions void createTable(); // SQL to create the table qint32 incrementLidCounter(); // Get the next LID number void saveSetting(int key, QByteArray); // Save a setting }; #endif // CONFIGSTORE_H ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/databaseconnection.cpp�����������������������������������������������������������0000664�0000000�0000000�00000010333�13156041044�0020406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "databaseconnection.h" #include "global.h" #include "notetable.h" #include "sql/nsqlquery.h" #include "resourcetable.h" #include "sql/databaseupgrade.h" extern Global global; //***************************************** //* This class is used to connect to the //* database. //***************************************** DatabaseConnection::DatabaseConnection(QString connection) { dbLocked = Unlocked; this->connection = connection; QLOG_DEBUG() << "SQL drivers available: " << QSqlDatabase::drivers(); QLOG_TRACE() << "Adding database SQLITE"; conn = QSqlDatabase::addDatabase("QSQLITE", connection); QLOG_TRACE() << "Setting DB name"; conn.setDatabaseName(global.fileManager.getDbDirPath("nixnote.db")); QLOG_TRACE() << "Opening database"; if (!conn.open()) { QLOG_ERROR() << "Error opening database: " << conn.lastError(); exit(16); } if (connection == "nixnote") global.db = this; QLOG_TRACE() << "Preparing tables"; // Start preparing the tables configStore = new ConfigStore(this); dataStore = new DataStore(this); NSqlQuery tempTable(this); // tempTable.exec("pragma cache_size=8096"); // tempTable.exec("pragma page_size=8096"); tempTable.exec("pragma busy_timeout=50000"); tempTable.exec("pragma journal_mode=wal"); // tempTable.exec("pragma SQLITE_THREADSAFE=2"); if (connection == "nixnote") { tempTable.exec("pragma COMPILE_OPTIONS"); QLOG_DEBUG() << "*** SQLITE COMPILE OPTIONS ***"; while (tempTable.next()) { QLOG_DEBUG() << tempTable.value(0).toString(); } int value = global.getDatabaseVersion(); if (value < 2){ QLOG_DEBUG() << "*****************"; QLOG_DEBUG() << "Upgrading Database"; DatabaseUpgrade dbu; dbu.fixSql(); } global.setDatabaseVersion(2); // Get username to use for default notes. This needs to be done after // the database is started because we set it by default to the usertable // username. global.full_username = global.getUsername(); } QLOG_TRACE() << "Creating filter table"; tempTable.exec("Create table if not exists filter (lid integer)"); tempTable.exec("delete from filter"); QLOG_TRACE() << "Adding to filter table"; tempTable.exec("insert into filter select distinct lid from NoteTable;"); QLOG_TRACE() << "Addition complete"; tempTable.finish(); } // Destructor. Close the database & delete the // memory used by the valiables. DatabaseConnection::~DatabaseConnection() { conn.close(); delete configStore; delete dataStore; } // Lock the database for a read request void DatabaseConnection::lockForRead() { return; if (dbLocked) return; global.dbLock->lockForRead(); dbLocked = Read; } // Lock the database for a read request void DatabaseConnection::lockForWrite() { return; if (dbLocked) return; global.dbLock->lockForWrite(); dbLocked = Write; } // Unlock the database void DatabaseConnection::unlock() { return; if (dbLocked == Unlocked) return; dbLocked = Unlocked; global.dbLock->unlock(); } // Get the database connection name QString DatabaseConnection::getConnectionName() { return connection; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/databaseconnection.h�������������������������������������������������������������0000664�0000000�0000000�00000003770�13156041044�0020062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef DATABASECONNECTION_H #define DATABASECONNECTION_H #include "global.h" #include "datastore.h" #include "configstore.h" #include <QtSql> //*************************************** //* This class is used to control the //* database as a whole. //*************************************** // Forward declare table classes class NoteTable; class ConfigStore; class DataStore; // Define the class used to access the table class DatabaseConnection { public: QSqlDatabase conn; // The actual database connection ConfigStore *configStore; // Table used to store program settings DataStore *dataStore; // Table that contains the note data enum LockMethod { Unlocked = 0, Read = 1, Write = 2 }; DatabaseConnection(QString connection); // Generic constructor ~DatabaseConnection(); // Destructor void lockForRead(); void lockForWrite(); void unlock(); QString getConnectionName(); private: LockMethod dbLocked; QString connection; }; #endif // DATABASECONNECTION_H ��������nixnote2-2.0.2/sql/databaseupgrade.cpp��������������������������������������������������������������0000664�0000000�0000000�00000005033�13156041044�0017677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "databaseupgrade.h" #include <QPair> #include "sql/notetable.h" #include "sql/notebooktable.h" #include "sql/searchtable.h" #include "sql/tagtable.h" #include "sql/resourcetable.h" #include "sql/linkednotebooktable.h" #include "sql/sharednotebooktable.h" #include "sql/nsqlquery.h" #include "global.h" DatabaseUpgrade::DatabaseUpgrade(QObject *parent) : QObject(parent) { } void DatabaseUpgrade::fixSql(bool toQt5) { QList<int> fields; fields.append(NOTE_ISPINNED); fields.append(NOTE_HAS_TODO_COMPLETED); fields.append(NOTE_HAS_TODO_UNCOMPLETED); fields.append(NOTE_ACTIVE); fields.append(NOTE_INDEX_NEEDED); fields.append(NOTE_EXPUNGED_FROM_TRASH); fields.append(NOTE_THUMBNAIL_NEEDED); fields.append(NOTE_ISPINNED); fields.append(NOTE_HAS_ENCRYPT); fields.append(NOTE_ISDIRTY); fields.append(NOTE_HAS_ENCRYPT); fields.append(NOTE_HAS_IMAGE); fields.append(NOTE_HAS_AUDIO); fields.append(NOTE_HAS_INK); fields.append(NOTE_HAS_PDF); fields.append(NOTE_HAS_ATTACHMENT); fields.append(NOTE_ATTRIBUTE_REMINDER_ORDER); fields.append(RESOURCE_INDEX_NEEDED); fields.append(RESOURCE_INKNOTE); fields.append(RESOURCE_CLIENT_WILL_INDEX); fields.append(RESOURCE_ACTIVE); fields.append(RESOURCE_ATTACHMENT); fields.append(NOTEBOOK_IS_DEFAULT); fields.append(NOTEBOOK_IS_LOCAL); fields.append(NOTEBOOK_ISDIRTY); fields.append(NOTEBOOK_IS_CLOSED); fields.append(NOTEBOOK_IS_DELETED); fields.append(NOTEBOOK_PUBLISHED); fields.append(SEARCH_ISDELETED); fields.append(SEARCH_ISDIRTY); fields.append(TAG_ISDIRTY); fields.append(TAG_ISDELETED); fields.append(LINKEDNOTEBOOK_IS_DIRTY); fields.append(SHAREDNOTEBOOK_ISDIRTY); fields.append(SHAREDNOTEBOOK_REQUIRE_LOGIN); fields.append(SHAREDNOTEBOOK_MODIFIABLE); fields.append(SHAREDNOTEBOOK_ALLOW_PREVIEW); NSqlQuery falseQuery(global.db); NSqlQuery trueQuery(global.db); if (toQt5) { falseQuery.prepare("Update Datastore set data=0 where data='false' and key=:key"); trueQuery.prepare("Update Datastore set data=1 where data='true' and key=:key"); } else { falseQuery.prepare("Update Datastore set data='false' where data=0 and key=:key"); trueQuery.prepare("Update Datastore set data='true' where data=1 and key=:key"); } for (int i=0; i<fields.size(); i++) { falseQuery.bindValue(":key", fields[i]); falseQuery.exec(); trueQuery.bindValue(":key", fields[i]); trueQuery.exec(); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/databaseupgrade.h����������������������������������������������������������������0000664�0000000�0000000�00000000426�13156041044�0017345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef DATABASEUPGRADE_H #define DATABASEUPGRADE_H #include <QObject> class DatabaseUpgrade : public QObject { Q_OBJECT public: explicit DatabaseUpgrade(QObject *parent = 0); void fixSql(bool toQt5=true); signals: public slots: }; #endif // DATABASEUPGRADE_H ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/datastore.cpp��������������������������������������������������������������������0000664�0000000�0000000�00000010223�13156041044�0016546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "datastore.h" #include <QtSql> #include <QString> #include <QList> #include "configstore.h" #include "searchtable.h" #include "tagtable.h" #include "notebooktable.h" #include "global.h" #include "sql/nsqlquery.h" extern Global global; #define GUID 1; #define DIRTY_RECORD 2; #define ORIGINAL_GID 3; #define UPDATE_SEQUENCE_NUMBER 4; DataStore::DataStore(DatabaseConnection *db) { this->db = db; db->lockForRead(); // Check if the table exists. If not, create it. NSqlQuery sql(db); sql.exec("Select * from sqlite_master where type='table' and name='DataStore';"); if (!sql.next()) { db->unlock(); this->createTable(); } this->setTable("DataStore"); this->select(); this->setEditStrategy(QSqlTableModel::OnFieldChange); sql.finish(); db->unlock(); } //* Create the NoteTable table. void DataStore::createTable() { db->lockForWrite(); QLOG_TRACE() << "Entering DataStore::createTable()"; QLOG_DEBUG() << "Creating table DataStore"; NSqlQuery sql(db); QString command("Create table DataStore (" + QString("lid integer,") + QString("key integer,") + QString("data blob default null collate nocase)")); if (!sql.exec(command)) { QLOG_ERROR() << "Creation of DataStore table failed: " << sql.lastError(); } sql.exec("CREATE INDEX DataStore_Lid on DataStore (lid)"); sql.exec("CREATE INDEX DataStore_Key on DataStore (key)"); sql.prepare("Create view SearchModel as select lid, data as name from DataStore where key=2001"); if (!sql.exec()) { QLOG_ERROR() << "Creation of SearchModel table failed: " << sql.lastError(); } sql.prepare("Create View TagModel as select a.lid, (select d.data from DataStore d where d.key=1000 and a.lid = d.lid) as guid, (select data from datastore b1 where b1.lid = (select b.data from DataStore b where b.key=1002 and a.lid = b.lid)) as parent_gid, (select c.data from DataStore c where c.key=1001 and a.lid = c.lid) as name, (select e.data from DataStore e where e.key=1006 and a.lid = e.lid) as account from DataStore a where a.key=1000;"); if (!sql.exec()) { QLOG_ERROR() << "Creation of TagModel table failed: " << sql.lastError(); } sql.prepare("Create View NotebookModel as select a.lid, (select b.data from DataStore b where b.key=3002 and a.lid = b.lid) as stack, (select c.data from DataStore c where c.key=3001 and a.lid = c.lid) as name, (select d.data from DataStore d where d.key=3201 and a.lid = d.lid) as username, (select e.data from DataStore e where e.key=3999 and a.lid = e.lid) as isClosed from DataStore a where a.key=3000;"); if (!sql.exec()) { QLOG_ERROR() << "Creation of NotebookModel table failed: " << sql.lastError(); } if (!sql.exec("Create virtual table SearchIndex using fts4 (lid int, weight int, source text, content text)")) { QLOG_ERROR() << "Creation of SearchIndex table failed: " << sql.lastError(); } sql.finish(); db->unlock(); Notebook notebook; NotebookTable table(db); notebook.name = "My Notebook"; notebook.defaultNotebook = true; QUuid uuid; notebook.guid = uuid.createUuid().toString().replace("{","").replace("}",""); table.add(0,notebook,true,false); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/datastore.h����������������������������������������������������������������������0000664�0000000�0000000�00000003477�13156041044�0016230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef DATASTORETABLE_H #define DATASTORETABLE_H #include "global.h" #include <QSqlTableModel> #include <QList> #include "sql/databaseconnection.h" class DatabaseConnection; //*********************************************************** // The DataStore is the "main" table which contains multiple // values. It consists of a LID which identifies a note, // a value which is the actual data, and a key which // identifies what the value actually is (i.e. is it a // note title, a note body, tag name, notebook GUID... //*********************************************************** using namespace std; #include "qevercloud/include/QEverCloud.h" using namespace qevercloud; class DataStore : public QSqlTableModel { Q_OBJECT private: void createTable(); DatabaseConnection *db; public: explicit DataStore(DatabaseConnection *db); signals: public slots: }; #endif // DATASTORETABLE_H �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/favoritesrecord.cpp��������������������������������������������������������������0000664�0000000�0000000�00000002166�13156041044�0017770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "favoritesrecord.h" // Generic constructor FavoritesRecord::FavoritesRecord(QObject *parent) : QObject(parent) { lid = 0; displayName = ""; order = 0; parent=0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/favoritesrecord.h����������������������������������������������������������������0000664�0000000�0000000�00000004143�13156041044�0017432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ //* Favorites Records are used to store information that the user //* defines in the upper left corner as a "favorite". It can be //* many different types of items. #ifndef FAVORITESRECORD_H #define FAVORITESRECORD_H #include <QObject> #include <QVariant> class FavoritesRecord; class FavoritesRecord : public QObject { Q_OBJECT public: explicit FavoritesRecord(QObject *parent = 0); // What type of favorite record is it enum FavoritesRecordType { Note=1, Tag=2, Search=3, LocalNotebook=4, SynchronizedNotebook=5, ConflictNotebook=6, NotebookStack=7, SharedNotebook=8, LinkedNotebook=9, LinkedStack=10 }; qint32 lid; // LID of the actual note/notebook/tag/search... QString displayName; // Display nme to show in the favorites list qint32 order; // Display order (lower ones show up first) FavoritesRecordType type; // The actual type of record we point to QVariant target; // The target of the record qint32 parent; // The parent of this record signals: public slots: }; #endif // FAVORITESRECORD_H �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/favoritestable.cpp���������������������������������������������������������������0000664�0000000�0000000�00000021505�13156041044�0017577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "favoritestable.h" #include "sql/nsqlquery.h" #include "sql/configstore.h" #include "sql/tagtable.h" #include "sql/notebooktable.h" #include "sql/notetable.h" #include "sql/searchtable.h" // Generic constructor FavoritesTable::FavoritesTable(DatabaseConnection *db, QObject *parent) : QObject(parent) { this->db = db; } // Get the LID of all favorites void FavoritesTable::getAll(QList<qint32> &lids) { lids.empty(); db->lockForRead(); NSqlQuery query(db); query.prepare("Select lid from datastore where key=:key"); query.bindValue(":key", FAVORITES_TARGET); query.exec(); while (query.next()) { lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); } // Fetch an individual favorite bool FavoritesTable::get(FavoritesRecord &record, qint32 lid) { NSqlQuery query(db); record.parent = 0; db->lockForRead(); query.prepare("select key,data from datastore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); int type = 0; bool retval = false; while (query.next()) { retval = true; record.lid = lid; int key = query.value(0).toInt(); switch (key) { case FAVORITES_ORDER : record.order = query.value(1).toInt(); break; case FAVORITES_TYPE : type = query.value(1).toInt(); break; case FAVORITES_TARGET : record.target = query.value(1); break; case FAVORITES_PARENT : record.parent = query.value(1).toInt(); } } query.finish(); db->unlock(); switch (type) { case FavoritesRecord::Note : record.type = FavoritesRecord::Note; break; case FavoritesRecord::LocalNotebook : record.type = FavoritesRecord::LocalNotebook; break; case FavoritesRecord::SynchronizedNotebook : record.type = FavoritesRecord::SynchronizedNotebook; break; case FavoritesRecord::ConflictNotebook : record.type = FavoritesRecord::ConflictNotebook; break; case FavoritesRecord::NotebookStack : record.type = FavoritesRecord::NotebookStack; break; case FavoritesRecord::SharedNotebook : record.type = FavoritesRecord::SharedNotebook; break; case FavoritesRecord::LinkedNotebook : record.type = FavoritesRecord::LinkedNotebook; break; case FavoritesRecord::LinkedStack : record.type = FavoritesRecord::LinkedStack; break; case FavoritesRecord::Tag : record.type = FavoritesRecord::Tag; break; case FavoritesRecord::Search : record.type = FavoritesRecord::Search; break; } record.displayName = "<missing value>"; if (record.type == FavoritesRecord::Tag) { TagTable tagTable(db); Tag t; tagTable.get(t, record.target.toInt()); if (t.name.isSet()) record.displayName = t.name; } if (record.type == FavoritesRecord::Note) { NoteTable table(db); Note r; table.get(r, record.target.toInt(), false,false); if (r.title.isSet()) record.displayName = r.title; } if (record.type == FavoritesRecord::LocalNotebook|| record.type == FavoritesRecord::SynchronizedNotebook|| record.type == FavoritesRecord::ConflictNotebook || record.type == FavoritesRecord::SharedNotebook || record.type == FavoritesRecord::LinkedNotebook) { NotebookTable table(db); Notebook r; table.get(r, record.target.toInt()); if (r.name.isSet()) record.displayName = r.name; } if (record.type == FavoritesRecord::Search) { SearchTable table(db); SavedSearch r; table.get(r, record.target.toInt()); if (r.name.isSet()) record.displayName = r.name; } if (record.type == FavoritesRecord::NotebookStack || record.type == FavoritesRecord::LinkedStack) { record.displayName = record.target.toString(); } return retval; } // Change the sort order of the favorite records void FavoritesTable::setOrder(QList< QPair< qint32, qint32 > > order) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from datastore where key=:key"); query.bindValue(":key", FAVORITES_ORDER); query.exec(); query.prepare("Insert into datastore (lid, key, data) values (:lid, :key, :value)"); for (int i=0; i<order.size(); i++) { query.bindValue(":lid", order[i].first); query.bindValue(":key", FAVORITES_ORDER); query.bindValue(":value", order[i].second); query.exec(); } query.finish(); db->unlock(); } // Erase a favorite record void FavoritesTable::expunge(qint32 lid) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from datastore where lid=:key"); query.bindValue(":key", lid); query.exec(); query.finish(); db->unlock(); } // Get a favorite's lid by the data target qint32 FavoritesTable::getLidByTarget(const QVariant &target) { NSqlQuery query(db); db->lockForRead(); query.prepare("select lid from datastore where key=:key and data=:target"); query.bindValue(":key", FAVORITES_TARGET); query.bindValue(":target", target); qint32 result = 0; query.exec(); if (query.next()) result = query.value(0).toInt(); query.finish(); db->unlock(); return result; } // Add a new record qint32 FavoritesTable::add(const FavoritesRecord &record) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Insert into datastore (lid, key, data) values (:lid, :key, :data)"); qint32 lid = record.lid; ConfigStore cs(db); if (lid <= 0) lid = cs.incrementLidCounter(); else expunge(lid); qint32 tempLid = getLidByTarget(record.target); if (tempLid>0) expunge(tempLid); query.bindValue(":lid", lid); query.bindValue(":key", FAVORITES_TYPE); query.bindValue(":data", record.type); query.exec(); query.bindValue(":lid", lid); query.bindValue(":key", FAVORITES_TARGET); query.bindValue(":data", record.target); query.exec(); query.bindValue(":lid", lid); query.bindValue(":key", FAVORITES_ORDER); query.bindValue(":data", record.order); query.exec(); query.bindValue(":lid", lid); query.bindValue(":key", FAVORITES_PARENT); query.bindValue(":data", record.parent); query.exec(); query.finish(); db->unlock(); return lid; } // Insert a new favorite qint32 FavoritesTable::insert(const FavoritesRecord &record) { NSqlQuery query(db); NSqlQuery subQuery(db); db->lockForWrite(); query.prepare("Select lid, data from datastore where key=:key and lid in (select lid from datastore where key=:parentkey and data=0) order by data"); query.bindValue(":key", FAVORITES_ORDER); query.bindValue(":parentkey", FAVORITES_PARENT); query.exec(); int newOrder = 0; while (query.next()) { qint32 lid = query.value(0).toInt(); int order = query.value(1).toInt(); if(order == record.order) newOrder++; subQuery.prepare("Update datastore set data=:neworder where lid=:lid and key=:key"); subQuery.bindValue(":neworder", newOrder); subQuery.bindValue(":lid", lid); subQuery.bindValue(":key", FAVORITES_ORDER); subQuery.exec(); newOrder++; } query.finish(); db->unlock(); return add(record); } // Does this favorite have any children? bool FavoritesTable::childrenFound(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("select lid from datastore where key=:key and data=:lid limit 1"); query.bindValue(":key", FAVORITES_PARENT); query.bindValue(":lid", lid); query.exec(); if (query.next()) { query.finish(); db->unlock(); return true; } query.finish(); db->unlock(); return false; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/favoritestable.h�����������������������������������������������������������������0000664�0000000�0000000�00000004605�13156041044�0017246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef FAVORITESTABLE_H #define FAVORITESTABLE_H #include <QObject> #include "sql/favoritesrecord.h" #include "sql/databaseconnection.h" #include <QSqlDatabase> #include <QPair> #define FAVORITES_TYPE 200 #define FAVORITES_TARGET 201 #define FAVORITES_ORDER 202 #define FAVORITES_PARENT 203 // Read/Write a favorite records to the database class FavoritesTable : public QObject { Q_OBJECT private: DatabaseConnection *db; public: explicit FavoritesTable(DatabaseConnection *db, QObject *parent = 0); // Generic constructor // DB Read Functions void getAll(QList<qint32> &lids); // Get the lid of all favorites bool get(FavoritesRecord &record, qint32 lid); // Get a particular favorite record bool childrenFound(qint32 lid); // Does this favorite have any children? // DB Write Functions void expunge(qint32 lid); // Erase a favorite record void setOrder(QList< QPair< qint32, qint32 > > order); // Set the order of display for a favorite qint32 add(const FavoritesRecord &record); // Add a new favorite qint32 insert(const FavoritesRecord &record); // Insert a new favorite qint32 getLidByTarget(const QVariant &target); // Get a favorite lid by an owner signals: public slots: }; #endif // FAVORITESTABLE_H ���������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/filewatchertable.cpp�������������������������������������������������������������0000664�0000000�0000000�00000010322�13156041044�0020065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "filewatchertable.h" #include "sql/configstore.h" #include "sql/nsqlquery.h" FileWatcherTable::FileWatcherTable(DatabaseConnection *db) { this->db = db; } // Add a new directory to watch qint32 FileWatcherTable::addEntry(qint32 lid, QString baseDir, FileWatcher::ScanType type, qint32 notebookLid, bool includeSubdirs) { if (lid == 0) { ConfigStore cs(global.db); lid = cs.incrementLidCounter(); } db->lockForWrite(); NSqlQuery sql(db); sql.prepare("Insert Into DataStore (lid, key, data) values (:lid, :key, :data)"); sql.bindValue(":lid", lid); sql.bindValue(":key", FILE_WATCHER_DIR); sql.bindValue(":data", baseDir); sql.exec(); sql.bindValue(":lid", lid); sql.bindValue(":key", FILE_WATCHER_TYPE); sql.bindValue(":data", type); sql.exec(); sql.bindValue(":lid", lid); sql.bindValue(":key", FILE_WATCHER_NOTEBOOK); sql.bindValue(":data", notebookLid); sql.exec(); sql.bindValue(":lid", lid); sql.bindValue(":key", FILE_WATCHER_SUBDIRS); sql.bindValue(":data", includeSubdirs); sql.exec(); sql.finish(); db->unlock(); return lid; } // Get an individual record void FileWatcherTable::get(qint32 lid, QString &baseDir, FileWatcher::ScanType &type, qint32 ¬ebookLid, bool &includeSubdirs) { NSqlQuery sql(db); db->lockForRead(); sql.prepare("Select key, data from DataStore where lid=:lid"); sql.bindValue(":lid", lid); sql.exec(); while(sql.next()) { int key = sql.value(0).toInt(); switch(key) { case FILE_WATCHER_DIR : baseDir = sql.value(1).toString(); break; case FILE_WATCHER_NOTEBOOK : notebookLid = sql.value(1).toInt(); break; case FILE_WATCHER_SUBDIRS : includeSubdirs = sql.value(1).toBool(); break; case FILE_WATCHER_TYPE : { int value = sql.value(1).toInt(); if (value == FileWatcher::ImportDelete) type = FileWatcher::ImportDelete; else type = FileWatcher::ImportKeep; } default : break; } } db->unlock(); sql.finish(); } // Find the record by a directory name qint32 FileWatcherTable::findLidByDir(QString baseDir) { NSqlQuery sql(db); db->lockForRead(); sql.prepare("Select lid from DataStore where key=:key and data=:data"); sql.bindValue(":key", FILE_WATCHER_DIR); sql.bindValue(":data", baseDir); sql.exec(); qint32 retval = -1; if (sql.next()) retval = sql.value(0).toInt(); sql.finish(); db->unlock(); return retval; } // Get all LIDs for file watchers qint32 FileWatcherTable::getAll(QList<qint32> &lids) { NSqlQuery sql(db); db->lockForRead(); sql.prepare("Select lid from DataStore where key=:key"); sql.bindValue(":key", FILE_WATCHER_DIR); sql.exec(); lids.clear(); while(sql.next()) lids.append(sql.value(0).toInt()); sql.finish(); db->unlock(); return lids.size(); } // Remove a record void FileWatcherTable::expunge(qint32 lid) { NSqlQuery sql(db); db->lockForWrite(); sql.prepare("Delete from datastore where lid=:lid"); sql.bindValue(":lid", lid); sql.exec(); sql.finish(); db->unlock(); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/filewatchertable.h���������������������������������������������������������������0000664�0000000�0000000�00000004474�13156041044�0017545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef FILEWATCHERTABLE_H #define FILEWATCHERTABLE_H #include <QObject> #include "watcher/filewatcher.h" #include "sql/databaseconnection.h" #include "global.h" extern Global global; //************************************* //* This table is used to keep track //* of what directories to "watch". //* Files found in these directories are //* imparted automatically. //************************************* // Define key types #define FILE_WATCHER_DIR 100 // The base directory #define FILE_WATCHER_TYPE 101 // ImportDelete or ImportKeep #define FILE_WATCHER_NOTEBOOK 102 // The notebook to import to #define FILE_WATCHER_SUBDIRS 103 // Include subdirectories? class FileWatcherTable : public QObject { Q_OBJECT public: explicit FileWatcherTable(DatabaseConnection *db); DatabaseConnection *db; // DB Read Functions void get(qint32 lid, QString &baseDir, FileWatcher::ScanType &type, qint32 ¬ebookLid, bool &includeSubdirs); // Get a record qint32 findLidByDir(QString baseDir); // Find a LID by the directory name qint32 getAll(QList<qint32> &lids); // Get all watcher LIDs // DB Write Functions qint32 addEntry(qint32 lid, QString baseDir, FileWatcher::ScanType type, qint32 notebookLid, bool includeSubdirs); // Add a record void expunge(qint32 lid); // Delete a record signals: public slots: }; #endif // FILEWATCHERTABLE_H ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/linkednotebooktable.cpp����������������������������������������������������������0000664�0000000�0000000�00000041077�13156041044�0020612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "linkednotebooktable.h" #include "sql/notetable.h" #include "sql/configstore.h" #include "sql/notebooktable.h" #include "sql/sharednotebooktable.h" #include "sql/nsqlquery.h" #include "global.h" // Generic constructor LinkedNotebookTable::LinkedNotebookTable(DatabaseConnection *db) { this->db = db; } // Given a notebook's name as a std::string, we return the lid qint32 LinkedNotebookTable::findByName(string &name) { NotebookTable ntable(db); return ntable.findByName(name); } // Given a notebook's name as a QString, we return the lid qint32 LinkedNotebookTable::findByName(QString &name) { string n = name.toStdString(); return findByName(n); } // Synchronize a new notebook with what is in the database. We basically // just delete the old one & give it a new entry qint32 LinkedNotebookTable::sync(LinkedNotebook ¬ebook) { return sync(0, notebook); } // Synchronize a new notebook with what is in the database. We basically // just delete the old one & give it a new entry qint32 LinkedNotebookTable::sync(qint32 lid, LinkedNotebook ¬ebook) { qint32 lastUSN = 0; NotebookTable ntable(db); SharedNotebookTable stable(db); if (lid == 0 && notebook.shareKey.isSet()) { lid = stable.findByShareKey(notebook.shareKey); } if (lid == 0 && notebook.uri.isSet()) { lid = ntable.findByUri(notebook.uri); } if (lid > 0) { lastUSN = getLastUpdateSequenceNumber(lid); // Delete the old record NSqlQuery query(db); db->lockForWrite(); query.prepare("Delete from DataStore where lid=:lid and key>=3200 and key<3300"); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); SharedNotebookTable stable(db); stable.expunge(lid); } if (lid == 0) { lid = ntable.getLid(notebook.guid); if (lid == 0) { ConfigStore cs(db); lid = cs.incrementLidCounter(); NotebookTable ntable(db); // Build the dummy notebook entry Notebook book; book.guid = notebook.guid; book.name = notebook.shareName; book.updateSequenceNum = notebook.updateSequenceNum; book.published = true; Publishing publishing; publishing.uri = notebook.uri; book.publishing = publishing; if (notebook.stack.isSet()) { book.stack = notebook.stack; } ntable.sync(lid, book); } } add(lid, notebook, false); if (lastUSN > 0) { setLastUpdateSequenceNumber(lid, lastUSN); } return lid; } // Given a notebook's GUID, we return the LID qint32 LinkedNotebookTable::getLid(QString guid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:data"); query.bindValue(":data", guid); query.bindValue(":key", LINKEDNOTEBOOK_GUID); query.exec(); qint32 retval = 0; if (query.next()) retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } // Given a notebook's GUID, we return the LID qint32 LinkedNotebookTable::getLid(string guid) { QString s(QString::fromStdString(guid)); return getLid(s); } // Add a new notebook to the database qint32 LinkedNotebookTable::add(qint32 l, LinkedNotebook &t, bool isDirty) { ConfigStore cs(db); qint32 lid = l; if (lid == 0) { lid = cs.incrementLidCounter(); } NSqlQuery query(db); NSqlQuery query2(db); db->lockForWrite(); query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_GUID); QString linkedguid = ""; if (t.guid.isSet()) linkedguid = t.guid; query.bindValue(":data", linkedguid); query.exec(); if (t.username.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_USERNAME); QString username = t.username; query.bindValue(":data",username); query.exec(); } if (t.shardId.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_SHARD_ID); QString shardid = t.shardId; query.bindValue(":data",shardid); query.exec(); } if (t.shareKey.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_SHARE_KEY); QString sharekey = t.shareKey; query.bindValue(":data", sharekey); query.exec(); } if (t.uri.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_URI); QString uri = t.uri; query.bindValue(":data", uri); query.exec(); } if (t.updateSequenceNum.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_UPDATE_SEQUENCE_NUMBER); qint32 usn = t.updateSequenceNum; query.bindValue(":data", usn); query.exec(); } if (t.noteStoreUrl.isSet()) { QString url = t.noteStoreUrl; query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_NOTE_STORE_URL); query.bindValue(":data", url); query.exec(); } if (t.webApiUrlPrefix.isSet()) { query.bindValue(":lid", lid); QString api = t.webApiUrlPrefix; query.bindValue(":key", LINKEDNOTEBOOK_WEB_API_URL_PREFIX); query.bindValue(":data", api); query.exec(); } if (t.stack.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_STACK); QString stack = t.stack; query.bindValue(":data", stack); query.exec(); } if (t.businessId.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_BUSINESS_ID); qint32 businessid = t.businessId; query.bindValue(":data", businessid); query.exec(); } if (t.shareName.isSet()) { query.bindValue(":lid", lid); QString sharename = t.shareName; query.bindValue(":key", LINKEDNOTEBOOK_SHARE_NAME); query.bindValue(":data", sharename); query.exec(); query2.prepare("Update datastore set data=:name where key=:key and lid=:lid"); query2.bindValue(":name", sharename); query2.bindValue(":key", NOTEBOOK_NAME); query2.bindValue(":lid", lid); query2.exec(); query2.prepare("Update notetable set notebook=:name where lid=:lid"); query2.bindValue(":name", sharename); query2.bindValue(":lid", lid); query2.exec(); query2.finish(); } if (isDirty) { query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_IS_DIRTY); query.bindValue(":data", true); query.exec(); } query.finish(); db->unlock(); return lid; } // Return a notebook structure given the LID bool LinkedNotebookTable::get(LinkedNotebook ¬ebook, qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select key, data from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); if (query.size() == 0) return false; while (query.next()) { qint32 key = query.value(0).toInt(); switch (key) { case (LINKEDNOTEBOOK_GUID): notebook.guid = query.value(1).toString(); break; case (LINKEDNOTEBOOK_UPDATE_SEQUENCE_NUMBER): notebook.updateSequenceNum = query.value(1).toInt(); break; case (LINKEDNOTEBOOK_SHARE_NAME): notebook.shareName = query.value(1).toString(); break; case (LINKEDNOTEBOOK_SHARE_KEY): notebook.shareKey = query.value(1).toString(); break; case (LINKEDNOTEBOOK_USERNAME): notebook.username = query.value(1).toString(); break; case (LINKEDNOTEBOOK_SHARD_ID): notebook.shardId = query.value(1).toString(); break; case (LINKEDNOTEBOOK_URI): notebook.uri = query.value(1).toString(); break; case (LINKEDNOTEBOOK_NOTE_STORE_URL): notebook.noteStoreUrl = query.value(1).toString(); break; case (LINKEDNOTEBOOK_WEB_API_URL_PREFIX): notebook.webApiUrlPrefix = query.value(1).toString(); break; case (LINKEDNOTEBOOK_STACK): notebook.stack = query.value(1).toString(); break; case (LINKEDNOTEBOOK_BUSINESS_ID): notebook.businessId = query.value(1).toInt(); break; } } query.finish(); db->unlock(); return true; } // Return a notebook given the GUID bool LinkedNotebookTable::get(LinkedNotebook ¬ebook, QString guid) { qint32 lid = getLid(guid); return get(notebook, lid); } // Return a notebook given the GUID as a std::string bool LinkedNotebookTable::get(LinkedNotebook ¬ebook, string guid) { qint32 lid = getLid(guid); return get(notebook, lid); } // Get a list of all notebooks qint32 LinkedNotebookTable::getAll(QList<qint32> &books) { NSqlQuery query(db); db->lockForRead(); query.prepare("select distinct lid from DataStore where key=:key"); query.bindValue(":key", LINKEDNOTEBOOK_GUID); query.exec(); while (query.next()) { books.append(query.value(0).toInt()); } query.finish(); db->unlock(); return books.size(); } // Get all notebooks for a particular stack qint32 LinkedNotebookTable::getStack(QList<qint32> &retval, QString &stack){ NSqlQuery query(db); db->lockForRead(); query.prepare("select distinct lid from DataStore where key=:key and data=:stack"); query.bindValue(":key", LINKEDNOTEBOOK_STACK); query.bindValue(":stack", stack); query.exec(); while (query.next()) { retval.append(query.value(0).toInt()); } query.finish(); db->unlock(); return retval.size(); } // Get the guid for a particular lid bool LinkedNotebookTable::getGuid(QString &retval, qint32 lid){ NSqlQuery query(db); db->lockForRead(); query.prepare("select data from DataStore where key=:key and lid=:lid"); query.bindValue(":key", LINKEDNOTEBOOK_GUID); query.bindValue(":lid", lid); query.exec(); while (query.next()) { retval = query.value(0).toString(); query.finish(); db->unlock(); return true; } query.finish(); db->unlock(); return false; } bool LinkedNotebookTable::findGuidByName(QString &retval, QString &guid) { NotebookTable ntable(db); return ntable.findGuidByName(retval, guid); } bool LinkedNotebookTable::update(LinkedNotebook ¬ebook, bool isDirty) { LinkedNotebook oldBook; qint32 lid = getLid(notebook.guid); get(oldBook, lid); if (lid <= 0) return false; expunge(lid); add(lid, notebook, isDirty); // Rename anything in the note list QString oldname = ""; QString newname = ""; if (notebook.shareName.isSet()) newname = notebook.shareName; if (oldBook.shareName.isSet()) oldname = oldBook.shareName; if (oldname != newname) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update notetable set notebook=:name where notebooklid=:lid"); query.bindValue(":name", newname); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } return true; } void LinkedNotebookTable::expunge(qint32 lid) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } void LinkedNotebookTable::expunge(string guid) { int lid = this->getLid(guid); this->expunge(lid); } void LinkedNotebookTable::expunge(QString guid) { int lid = this->getLid(guid); NoteTable ntable(db); // Remove any notes QList<qint32> notes; ntable.findNotesByNotebook(notes, lid); for (int i=0; i<notes.size(); i++) { ntable.expunge(notes[i]); } // Expunge the actual notebook this->expunge(lid); } void LinkedNotebookTable::renameStack(QString oldName, QString newName) { QList<qint32> lids; findByStack(lids, oldName); NSqlQuery query(db); db->lockForWrite(); query.prepare("Update Datastore set data=:newname where key=:key and data=:oldname"); query.bindValue(":newname", newName); query.bindValue(":key", LINKEDNOTEBOOK_STACK); query.bindValue(":oldname", oldName); query.exec(); query.finish(); db->unlock(); } void LinkedNotebookTable::findByStack(QList<qint32> &lids, QString stackName) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:name"); query.bindValue(":key", LINKEDNOTEBOOK_STACK); query.bindValue(":name", stackName); query.exec(); while(query.next()) { lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); } bool LinkedNotebookTable::isDeleted(qint32 lid) { NotebookTable ntable(db); return ntable.isDeleted(lid); } void LinkedNotebookTable::getStacks(QStringList &stacks) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select distinct data from DataStore where key=:key"); query.bindValue(":key", LINKEDNOTEBOOK_STACK); query.exec(); while (query.next()) { stacks.append(query.value(0).toString()); } query.finish(); db->unlock(); } bool LinkedNotebookTable::isStacked(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_STACK); query.exec(); bool retval = false; if (query.next()) retval = true; query.finish(); db->unlock(); return retval; } void LinkedNotebookTable::removeFromStack(qint32 lid) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_STACK); query.exec(); query.finish(); db->unlock(); } qint32 LinkedNotebookTable::getLastUpdateSequenceNumber(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("select data from datastore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_LAST_USN); query.exec(); qint32 retval = 0; if (query.next()) { retval = query.value(0).toInt(); } query.finish(); db->unlock(); return retval; } void LinkedNotebookTable::setLastUpdateSequenceNumber(qint32 lid, qint32 lastUSN) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from datastore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_LAST_USN); query.exec(); query.prepare("insert into datastore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_LAST_USN); query.bindValue(":data", lastUSN); query.exec(); query.finish(); db->unlock(); } bool LinkedNotebookTable::exists(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("select lid from datastore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", LINKEDNOTEBOOK_SHARE_NAME); query.exec(); bool retval = false; if (query.next()) retval = true; query.finish(); db->unlock(); return retval; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/linkednotebooktable.h������������������������������������������������������������0000664�0000000�0000000�00000011275�13156041044�0020254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef LINKEDNOTEBOOKTABLE_H #define LINKEDNOTEBOOKTABLE_H #define LINKEDNOTEBOOK_SHARE_NAME 3200 #define LINKEDNOTEBOOK_USERNAME 3201 #define LINKEDNOTEBOOK_SHARD_ID 3202 #define LINKEDNOTEBOOK_SHARE_KEY 3203 #define LINKEDNOTEBOOK_URI 3204 #define LINKEDNOTEBOOK_GUID 3205 #define LINKEDNOTEBOOK_UPDATE_SEQUENCE_NUMBER 3206 #define LINKEDNOTEBOOK_NOTE_STORE_URL 3207 #define LINKEDNOTEBOOK_WEB_API_URL_PREFIX 3208 #define LINKEDNOTEBOOK_STACK 3209 #define LINKEDNOTEBOOK_BUSINESS_ID 3210 #define LINKEDNOTEBOOK_LAST_USN 3211 #define LINKEDNOTEBOOK_IS_DIRTY 3299 #include <QObject> #include <iostream> #include <string> #include <stdio.h> #include <QSqlTableModel> #include <QtSql> #include <QString> #include "global.h" #include "sql/databaseconnection.h" extern Global global; using namespace std; class LinkedNotebookTable : public QObject { Q_OBJECT public: explicit LinkedNotebookTable(DatabaseConnection *db); // DB Read Functions qint32 getLid(QString guid); // given a guid, return the lid qint32 getLid(string guid); // Given a guid, return the lid qint32 findByName(string &name); // Find a notebook given a name qint32 findByName(QString &name); // Find a notebook given a name bool get(LinkedNotebook ¬ebook, qint32 lid); // Get a notebook given a lid bool get(LinkedNotebook ¬ebook, QString guid); // get a notebook given a guid bool get(LinkedNotebook ¬ebook, string guid); // get a notebook given a guid qint32 getAll(QList<qint32> &retVal); // Get a list of all notebooks qint32 getStack(QList<qint32> &retval, QString &stack); // Get all notebooks for a particular stack bool getGuid(QString& retval, qint32 lid); // Get a guid for a particular lid bool findGuidByName(QString &retval, QString &guid); // Search for a notebook's guid based upon its name bool isDeleted(qint32 lid); // is this notebook deleted? void findByStack(QList<qint32> &lids, QString stackName); // Find notebooks by the stack name bool isStacked(qint32 lid); // does this notebook belong to a stack? void getStacks(QStringList &stacks); // Get a list of all stacks bool exists(qint32 lid); // Does this LID exist in the database? void setLastUpdateSequenceNumber(qint32 lid, qint32 lastUSN); // Update the last update sequence number DatabaseConnection *db; // DB Write Functions qint32 getLastUpdateSequenceNumber(qint32 lid); // Get the last update sequence number for this notebook void removeFromStack(qint32 lid); // Remove from a stack bool update(LinkedNotebook ¬ebook, bool isDirty); // Update a linked noteboook record void renameStack(QString oldName, QString newName); // Rename the stack name void deleteLinkedNotebook(qint32 lid); // mark a notebook for deletion void expunge(qint32 lid); // purge a notebook void expunge(string guid); // purge a notebook void expunge(QString guid); // purge a notebook qint32 sync(LinkedNotebook ¬ebook); // Sync a notebook with a new record qint32 sync(qint32 lid, LinkedNotebook ¬ebook); // Sync a notebook with a new record qint32 add(qint32 lid, LinkedNotebook &t, bool isDirty); // Add a new notebook signals: public slots: }; #endif // LINKEDNOTEBOOKTABLE_H �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/notebooktable.cpp����������������������������������������������������������������0000664�0000000�0000000�00000101743�13156041044�0017420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "notebooktable.h" #include "sql/configstore.h" #include "sql/notetable.h" #include "sql/sharednotebooktable.h" #include "sql/linkednotebooktable.h" #include "sql/nsqlquery.h" #include "sql/usertable.h" #include "global.h" #include <iostream> #include <string> #include <stdio.h> #include <QSqlTableModel> #include <QtSql> #include <QString> // Default constructor NotebookTable::NotebookTable(DatabaseConnection *db) { this->db = db; } // Given a notebook's name as a std::string, we return the lid qint32 NotebookTable::findByName(string &name) { qint32 retval = 0; NSqlQuery query(db); query.prepare("Select lid from DataStore where key=:key and data=:name"); query.bindValue(":key", NOTEBOOK_NAME); query.bindValue(":name", QString::fromStdString(name)); db->lockForRead(); query.exec(); if (query.next()) { retval = query.value(0).toInt(); } else { query.prepare("Select lid from DataStore where key=:key and data=:name"); query.bindValue(":key", NOTEBOOK_ALIAS); query.bindValue(":name", QString::fromStdString(name)); query.exec(); if (query.next()) retval = query.value(0).toInt(); } query.finish(); db->unlock(); return retval; } // Given a notebook's name as a QString, we return the lid qint32 NotebookTable::findByName(QString &name) { string n = name.toStdString(); return findByName(n); } // Given a notebook's lid, we give it a new guid. This can happen // the first time a record is synchronized void NotebookTable::updateGuid(qint32 lid, Guid &guid) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update DataStore set data=:data where key=:key and lid=:lid"); query.bindValue(":data", guid); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_GUID); query.exec(); query.finish(); db->unlock(); } // Synchronize a new notebook with what is in the database. We basically // just delete the old one & give it a new entry qint32 NotebookTable::sync(Notebook ¬ebook) { return sync(0, notebook); } // Synchronize a new notebook with what is in the database. We basically // just delete the old one & give it a new entry qint32 NotebookTable::sync(qint32 lid, Notebook ¬ebook) { if (lid == 0) { lid = findByName(notebook.name); if (lid == 0) { SharedNotebookTable stable(db); lid = stable.findByNotebookGuid(notebook.guid); } } if (lid > 0) { NSqlQuery query(db); NoteTable noteTable(db); noteTable.updateNotebookName(lid, notebook.name); // Delete the old record db->lockForWrite(); query.prepare("Delete from DataStore where lid=:lid and key>=3000 and key<3200"); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } else { ConfigStore cs(db); lid = cs.incrementLidCounter(); } return add(lid, notebook, false); } // Given a notebook's GUID, we return the LID qint32 NotebookTable::getLid(QString guid) { NSqlQuery query(db); qint32 retval = 0; db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:data"); query.bindValue(":data", guid); query.bindValue(":key", NOTEBOOK_GUID); query.exec(); if (query.next()) { retval = query.value(0).toInt(); } else { query.prepare("Select lid from DataStore where key=:key and data=:data"); query.bindValue(":data", guid); query.bindValue(":key", SHAREDNOTEBOOK_NOTEBOOK_GUID); query.exec(); if (query.next()) retval = query.value(0).toInt(); } query.finish(); db->unlock(); return retval; } // Given a notebook's GUID, we return the LID qint32 NotebookTable::getLid(string guid) { QString s(QString::fromStdString(guid)); return getLid(s); } // Add a new notebook to the database qint32 NotebookTable::addStub(QString guid) { NSqlQuery query(db); ConfigStore cs(db); qint32 lid = cs.incrementLidCounter(); db->lockForWrite(); query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_GUID); query.bindValue(":data", guid); query.exec(); query.finish(); db->unlock(); return lid; } // Add a new notebook to the database qint32 NotebookTable::add(qint32 l, Notebook &t, bool isDirty, bool isLocal) { NSqlQuery query(db); ConfigStore cs(db); db->lockForWrite(); query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); qint32 lid = l; if (lid == 0) { lid = cs.incrementLidCounter(); } else { LinkedNotebookTable ltable(db); LinkedNotebook lbook; if (ltable.get(lbook, lid)) { QString sharename = ""; if (lbook.shareName.isSet()) sharename = lbook.shareName; if (sharename != "") { t.name = lbook.shareName; } } } QString guid = ""; if (t.guid.isSet()) guid = t.guid; query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_GUID); query.bindValue(":data", guid); query.exec(); QString name = ""; if (t.name.isSet()) name = t.name; query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_NAME); query.bindValue(":data", name); query.exec(); qint32 usn = 0; if (t.updateSequenceNum.isSet()) usn = t.updateSequenceNum; query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_UPDATE_SEQUENCE_NUMBER); query.bindValue(":data", usn); query.exec(); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_IS_LOCAL); query.bindValue(":data", isLocal); query.exec(); if (t.defaultNotebook.isSet()) { NSqlQuery dq(db); dq.prepare("delete from datastore where key=:key"); dq.bindValue(":key", NOTEBOOK_IS_DEFAULT); dq.exec(); bool defaultNotebook = t.defaultNotebook; if (defaultNotebook) { query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_IS_DEFAULT); query.bindValue(":data", defaultNotebook); query.exec(); } } if (t.stack.isSet()) { QString stack = t.stack; query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_STACK); query.bindValue(":data", stack); query.exec(); } query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_ISDIRTY); query.bindValue(":data", isDirty); query.exec(); if (t.serviceCreated.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_SERVICE_CREATED); qlonglong created = t.serviceCreated; query.bindValue(":data", created); query.exec(); } if (t.serviceUpdated.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_SERVICE_UPDATED); qlonglong updated = t.serviceUpdated; query.bindValue(":data", updated); query.exec(); } if (t.published.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_PUBLISHED); bool published = t.published; query.bindValue(":data", published); query.exec(); } if (t.publishing.isSet()) { Publishing publishing = t.publishing; if (publishing.uri.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_PUBLISHING_URI); QString uri = publishing.uri; query.bindValue(":data", uri); query.exec(); } if (publishing.order.isSet()) { NoteSortOrder::type order = publishing.order; query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_PUBLISHING_ORDER); query.bindValue(":data", order); query.exec(); } if (publishing.ascending.isSet()) { bool ascending = publishing.ascending; query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_PUBLISHING_ASCENDING); query.bindValue(":data", ascending); query.exec(); } if (publishing.publicDescription.isSet()) { QString desc = publishing.publicDescription; query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_PUBLISHING_DESCRIPTION); query.bindValue(":data",desc); query.exec(); } } if (t.sharedNotebooks.isSet()) { SharedNotebookTable sharedTable(db); QList<SharedNotebook> sharedNotebooks; if (t.sharedNotebooks.isSet()) sharedNotebooks = t.sharedNotebooks; for (int i=0; i<sharedNotebooks.size(); i++) { sharedTable.add(lid, sharedNotebooks[i], isDirty); } } query.finish(); db->unlock(); NoteTable noteTable(db); noteTable.updateNotebookName(lid, t.name); return lid; } // Return a notebook structure given the LID bool NotebookTable::get(Notebook ¬ebook, qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select key, data from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); Publishing publishing; if (query.size() == 0) return false; while (query.next()) { qint32 key = query.value(0).toInt(); switch (key) { case (NOTEBOOK_GUID): notebook.guid = query.value(1).toString(); break; case (NOTEBOOK_UPDATE_SEQUENCE_NUMBER): notebook.updateSequenceNum = query.value(1).toInt(); break; case (NOTEBOOK_STACK): notebook.stack = query.value(1).toString(); break; case (NOTEBOOK_NAME): notebook.name = query.value(1).toString(); break; case (NOTEBOOK_IS_DEFAULT): notebook.defaultNotebook = query.value(1).toBool(); break; case (NOTEBOOK_SERVICE_CREATED): notebook.serviceCreated = query.value(1).toLongLong(); break; case (NOTEBOOK_SERVICE_UPDATED): notebook.serviceUpdated = query.value(1).toLongLong(); break; case (NOTEBOOK_PUBLISHED): notebook.published = query.value(1).toBool(); break; case (NOTEBOOK_PUBLISHING_URI): if (notebook.publishing.isSet()) publishing = notebook.publishing; publishing.uri = query.value(1).toString(); notebook.publishing = publishing; break; case (NOTEBOOK_PUBLISHING_ORDER): { qint32 value = query.value(1).toInt(); if (notebook.publishing.isSet()) publishing = notebook.publishing; publishing.order = NoteSortOrder::CREATED; if (value == NoteSortOrder::UPDATED) publishing.order = NoteSortOrder::UPDATED; if (value == NoteSortOrder::RELEVANCE) publishing.order = NoteSortOrder::RELEVANCE; if (value == NoteSortOrder::UPDATE_SEQUENCE_NUMBER) publishing.order = NoteSortOrder::UPDATE_SEQUENCE_NUMBER; if (value == NoteSortOrder::TITLE) publishing.order = NoteSortOrder::TITLE; notebook.publishing = publishing; break; } case (NOTEBOOK_PUBLISHING_ASCENDING): if (notebook.publishing.isSet()) publishing = notebook.publishing; publishing.ascending = query.value(1).toBool(); notebook.publishing = publishing; break; case (NOTEBOOK_PUBLISHING_DESCRIPTION): if (notebook.publishing.isSet()) publishing = notebook.publishing; publishing.publicDescription = query.value(1).toString(); notebook.publishing = publishing; break; } } query.finish(); db->unlock(); if (!notebook.defaultNotebook.isSet()) notebook.defaultNotebook = false; return true; } // Return a notebook given the GUID bool NotebookTable::get(Notebook ¬ebook, QString guid) { qint32 lid = getLid(guid); return get(notebook, lid); } // Return a notebook given the GUID as a std::string bool NotebookTable::get(Notebook ¬ebook, string guid) { qint32 lid = getLid(guid); return get(notebook, lid); } // Return if a notebook is dirty given its lid bool NotebookTable::isDirty(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_ISDIRTY); query.exec(); bool retval = false; if (query.next()) retval = query.value(0).toBool(); query.finish(); db->unlock(); return retval; } // Determine if a notebook is dirty given a guid bool NotebookTable::isDirty(QString guid) { qint32 lid = getLid(guid); return isDirty(lid); } // Determine if a notebook is dirty given a guid bool NotebookTable::isDirty(string guid) { QString g(QString::fromStdString(guid)); return isDirty(g); } // Set a notebook as needing a sync bool NotebookTable::setDirty(string guid, bool dirty=true) { qint32 lid = getLid(guid); return setDirty(lid, dirty); } // Set a notebook as needing a sync bool NotebookTable::setDirty(QString guid, bool dirty=true) { qint32 lid = getLid(guid); return setDirty(lid, dirty); } // Set a notebook as needing a sync bool NotebookTable::setDirty(qint32 lid, bool dirty) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Delete from DataStore where key=:key and lid=:lid"); query.bindValue(":key", NOTEBOOK_ISDIRTY); query.bindValue(":lid", lid); query.exec(); query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_ISDIRTY); query.bindValue(":data", dirty); bool retval = query.exec(); query.finish(); db->unlock(); return retval; } // Does this notebook exist? bool NotebookTable::exists(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_GUID); query.exec(); bool retval = false; if (query.next()) retval = true; query.finish(); db->unlock(); return retval; } // Determine if a notebook is dirty given a guid bool NotebookTable::exists(QString guid) { qint32 lid = getLid(guid); return exists(lid); } // Determine if a notebook is dirty given a guid bool NotebookTable::exists(string guid) { qint32 lid = getLid(guid); return exists(lid); } // Get a list of all notebooks qint32 NotebookTable::getAll(QList<qint32> &books) { NSqlQuery query(db); db->lockForRead(); query.prepare("select distinct lid from DataStore where key=:key"); query.bindValue(":key", NOTEBOOK_GUID); query.exec(); while (query.next()) { books.append(query.value(0).toInt()); } query.finish(); db->unlock(); return books.size(); } // Get a list of all notebooks qint32 NotebookTable::getAllOrderByName(QList<qint32> &books) { NSqlQuery query(db); db->lockForRead(); query.prepare("select distinct lid from DataStore where key=:key order by data"); query.bindValue(":key", NOTEBOOK_NAME); query.exec(); while (query.next()) { books.append(query.value(0).toInt()); } query.finish(); db->unlock(); return books.size(); } // Get all notebooks for a particular stack qint32 NotebookTable::getStack(QList<qint32> &retval, QString &stack){ NSqlQuery query(db); db->lockForRead(); query.prepare("select distinct lid from DataStore where key=:key and data=:stack"); query.bindValue(":key", NOTEBOOK_STACK); query.bindValue(":stack", stack); query.exec(); while (query.next()) { retval.append(query.value(0).toInt()); } query.finish(); db->unlock(); return retval.size(); } // Get the guid for a particular lid bool NotebookTable::getGuid(QString &retval, qint32 lid){ NSqlQuery query(db); db->lockForRead(); query.prepare("select data from DataStore where key=:key and lid=:lid"); query.bindValue(":key", NOTEBOOK_GUID); query.bindValue(":lid", lid); query.exec(); while (query.next()) { retval = query.value(0).toString(); query.finish(); db->unlock(); return true; } query.finish(); db->unlock(); return false; } // Find a notebook GUID by the notebook's name bool NotebookTable::findGuidByName(QString &retval, QString &guid) { NSqlQuery query(db); db->lockForRead(); query.prepare("select data from DataStore where key=:key and lid=(select lid from DataStore where data=:guid and key=:gkey)"); query.bindValue(":key", NOTEBOOK_GUID); query.bindValue(":guid", guid); query.bindValue(":gkey", NOTEBOOK_NAME); query.exec(); QLOG_DEBUG() << query.lastError(); while (query.next()) { retval = query.value(0).toString(); query.finish(); db->unlock(); return true; } query.finish(); db->unlock(); return false; } // Delete this notebook void NotebookTable::deleteNotebook(qint32 lid) { if (!exists(lid)) return; // First delete all the notes for this notebook and // move them to the default notebook QList<qint32> notes; NoteTable noteTable(db); QString guid; getGuid(guid, lid); qint32 defaultNotebookLid = getDefaultNotebookLid(); noteTable.findNotesByNotebook(notes, guid); for (qint32 i=0; i<notes.size(); i++) { noteTable.updateNotebook(notes[i], defaultNotebookLid, true); noteTable.deleteNote(notes[i], true); } // Now delete the actual notebook Notebook notebook; get(notebook, lid); if (notebook.updateSequenceNum.isSet() && notebook.updateSequenceNum > 0) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from datastore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_IS_DELETED); query.exec(); query.prepare("insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_IS_DELETED); query.bindValue(":data", true); query.exec(); query.finish(); db->unlock(); setDirty(lid, true); } else { expunge(lid); } } // Is this notebook local? bool NotebookTable::isLocal(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_IS_LOCAL); query.exec(); bool retval = false; if (query.next()) retval = query.value(0).toBool(); query.finish(); db->unlock(); return retval; } // Update a notebook bool NotebookTable::update(Notebook ¬ebook, bool isDirty) { Notebook oldBook; qint32 lid = getLid(notebook.guid); get(oldBook, lid); if (lid <= 0) return false; bool local = isLocal(lid); expunge(lid); add(lid, notebook, isDirty, local); // Rename anything in the note list QString oldname = ""; QString newname = ""; if (notebook.name.isSet()) newname = notebook.name; if (oldBook.name.isSet()) oldname = oldBook.name; if (newname != oldname) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update notetable set notebook=:name where notebooklid=:lid"); query.bindValue(":name", newname); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } return true; } // Erase a notebook void NotebookTable::expunge(qint32 lid) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where lid=:lid and key>=3000 and key<3200"); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } // Erase a notebook void NotebookTable::expunge(string guid) { int lid = this->getLid(guid); this->expunge(lid); } // Erase a notebook void NotebookTable::expunge(QString guid) { int lid = this->getLid(guid); this->expunge(lid); } // Rename the stack for this notebook void NotebookTable::renameStack(QString oldName, QString newName) { QList<qint32> lids; findByStack(lids, oldName); NSqlQuery query(db); db->lockForWrite(); query.prepare("Update Datastore set data=:newname where key=:key and data=:oldname"); query.bindValue(":newname", newName); query.bindValue(":key", NOTEBOOK_STACK); query.bindValue(":oldname", oldName); query.exec(); query.finish(); db->unlock(); for (qint32 i=0; i<lids.size(); i++) setDirty(lids[i], true); } // Find a notebook by the stack name void NotebookTable::findByStack(QList<qint32> &lids, QString stackName) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:name"); query.bindValue(":key", NOTEBOOK_STACK); query.bindValue(":name", stackName); query.exec(); while(query.next()) { lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); } // Is this notebook deleted bool NotebookTable::isDeleted(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("select lid from DataStore where lid=:lid and key=:key and data=:value"); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_IS_DELETED); query.bindValue(":value", true); query.exec(); bool retval = false; if (query.next()) { retval = true; } query.finish(); db->unlock(); return retval; } // Get a list of stack names void NotebookTable::getStacks(QStringList &stacks) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select distinct data from DataStore where key=:key"); query.bindValue(":key", NOTEBOOK_STACK); query.exec(); while (query.next()) { stacks.append(query.value(0).toString()); } query.finish(); db->unlock(); } // Is this notebook stacked? bool NotebookTable::isStacked(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_STACK); query.exec(); bool retval = false; if (query.next()) retval = true; query.finish(); db->unlock(); return retval; } // Remove this notebook from a stack void NotebookTable::removeFromStack(qint32 lid) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_STACK); query.exec(); query.finish(); db->unlock(); } // Get the default notebook qint32 NotebookTable::getDefaultNotebookLid() { db->lockForRead(); NSqlQuery query(db); qint32 retval = 0; query.exec("Select lid from datastore where key=3007 and data=1"); if (query.next()) { retval = query.value(0).toInt(); } else { query.exec("Select lid from datastore where key=3001"); if (query.next()) { retval = query.value(0).toInt(); } } query.finish(); db->unlock(); return retval; } // Get the default notebook GUID QString NotebookTable::getDefaultNotebookGuid() { qint32 lid = getDefaultNotebookLid(); QString guid; this->getGuid(guid, lid); return guid; } // Is this notebook read-only? bool NotebookTable::isReadOnly(qint32 notebookLid) { // If this is a local notebook we automatically have read/write if (notebookLid <= 0) return true; bool found = false; UserTable userTable(db); User user; userTable.getUser(user); QString username = ""; if (user.username.isSet()) username = user.username; SharedNotebook sharedNotebook; SharedNotebookTable stable(db); found = stable.get(sharedNotebook, notebookLid, username); // If this is a shared notebook check the owner & & priv. if (found) { QString shareusername = ""; if (sharedNotebook.username.isSet()) shareusername = sharedNotebook.username; QLOG_DEBUG() << "Shared Notebook properties:"; QLOG_DEBUG() << " share user name: " << shareusername; QLOG_DEBUG() << " username: " << username; QLOG_DEBUG() << " privileges: " << sharedNotebook.privilege; if (!sharedNotebook.privilege.isSet()) return true; if (sharedNotebook.privilege == SharedNotebookPrivilegeLevel::READ_NOTEBOOK) return true; if (sharedNotebook.privilege == SharedNotebookPrivilegeLevel::READ_NOTEBOOK_PLUS_ACTIVITY) return true; // By default we have read/write return false; } // Check privileges for linked notebooks LinkedNotebookTable ltable(db); LinkedNotebook linkedNotebook; QString linkedusername = ""; found = ltable.get(linkedNotebook, notebookLid); if (found && linkedNotebook.uri.isSet()) { if (linkedNotebook.username.isSet()) linkedusername =linkedNotebook.username; QLOG_DEBUG() << "Linked Notebook properties:"; QLOG_DEBUG() << " linked notebook user name: " << linkedusername; QLOG_DEBUG() << " username: " << username; return true; } // Default privileges for non-linked & non-shared & non-local notebooks. return false; } // Get the LID of the conflict notebook qint32 NotebookTable::getConflictNotebook() { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from datastore where data like 'Conflict%' and key=:key"); query.bindValue(":key", NOTEBOOK_NAME); query.exec(); int i=0; while (query.next()) { qint32 lid = query.value(0).toInt(); if (isLocal(lid)) return lid; i++; } query.finish(); db->unlock(); // If there is no conflict notebook, we create one Notebook n; if (i>0) n.name = "Conflict-" +QString::number(i); else n.name = "Conflict"; n.updateSequenceNum = 0; return add(0,n,true,true); } // Get a count of all new unsequenced notebooks int NotebookTable::getNewUnsequencedCount() { db->lockForRead(); NSqlQuery query(db); query.prepare("Select count(lid) from DataStore where key=:key and data=0 and lid not in (select lid from datastore where key=:localkey and data=1)"); query.bindValue(":key", NOTEBOOK_UPDATE_SEQUENCE_NUMBER); query.bindValue(":localkey", NOTEBOOK_IS_LOCAL); query.exec(); qint32 retval = 0; while(query.next()) { retval = query.value(0).toInt(); } query.finish(); db->unlock(); return retval; } // Get all dirty lids qint32 NotebookTable::getAllDirty(QList<qint32> &lids) { NSqlQuery query(db); lids.clear(); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=1"); query.bindValue(":key", NOTEBOOK_ISDIRTY); query.exec(); while(query.next()) { lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); return lids.size(); } // Update the USN void NotebookTable::setUpdateSequenceNumber(qint32 lid, qint32 usn) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update DataStore set data=:data where key=:key and lid=:lid"); query.bindValue(":data", usn); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_UPDATE_SEQUENCE_NUMBER); query.exec(); query.finish(); db->unlock(); } // Linked notebooks are not uploaded, so we reset the dirty flags in case // they were updated locally void NotebookTable::resetLinkedNotebooksDirty() { db->lockForWrite(); NSqlQuery query(db); query.prepare("Delete from datastore where key=:key and lid in (select lid from datastore where key=:linkedkey)"); query.bindValue(":key", NOTEBOOK_ISDIRTY); query.bindValue(":linkedkey", LINKEDNOTEBOOK_GUID); query.exec(); query.finish(); db->unlock(); } // Find a notebook by the publishing URI qint32 NotebookTable::findByUri(QString uri) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:data"); query.bindValue(":key", NOTEBOOK_PUBLISHING_URI); query.bindValue(":data", uri); query.exec(); qint32 retval = 0; if (query.next()) retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } // Find a notebook by the publishing URI qint32 NotebookTable::findByUri(string uri) { return findByUri(QString::fromStdString(uri)); } // Return a list of all closed notebooks. Return the // list of LIDs. void NotebookTable::getClosedNotebooks(QList<qint32> &lids) { lids.empty(); NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key"); query.bindValue(":key", NOTEBOOK_IS_CLOSED); query.exec(); while (query.next()) { lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); } // Get a list of any notebooks that are open and // return a list of LIDs. void NotebookTable::getOpenNotebooks(QList<qint32> &lids) { lids.empty(); NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and lid not in (select lid from datastore where key=:key2)"); query.bindValue(":key", NOTEBOOK_GUID); query.bindValue(":key2", NOTEBOOK_IS_CLOSED); query.exec(); while (query.next()) { qint32 lid = query.value(0).toInt(); lids.append(lid); } query.finish(); db->unlock(); } // Open all notebooks. Really we just delete the // NOTEBOOK_IS_CLOSED record since the default is to be // open. void NotebookTable::openAllNotebooks() { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where key=:key"); query.bindValue(":key", NOTEBOOK_IS_CLOSED); query.exec(); query.finish(); db->unlock(); } // Close a specific notebook void NotebookTable::closeNotebook(qint32 lid) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_IS_CLOSED); query.exec(); query.prepare("insert into DataStore (lid, key, data) values (:lid, :key, 1)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_IS_CLOSED); query.exec(); query.finish(); db->unlock(); } // Open a specific notebook void NotebookTable::openNotebook(qint32 lid) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTEBOOK_IS_CLOSED); query.exec(); db->unlock(); } // Merge two notebooks void NotebookTable::merge(qint32 source, qint32 target) { this->expunge(source); NSqlQuery query(db); db->lockForWrite(); query.prepare("Update datastore set data=:newLid where key=:key and data=:oldLid"); query.bindValue(":newLid", target); query.bindValue(":key", NOTE_NOTEBOOK_LID); query.bindValue(":oldLid", source); query.exec(); QLOG_DEBUG() << query.lastError(); query.prepare("Update notetable set notebooklid=:newLid where notebooklid=:oldLid"); query.bindValue(":newLid", target); query.bindValue(":oldLid", source); query.exec(); QLOG_DEBUG() << query.lastError(); query.finish(); db->unlock(); } void NotebookTable::resetDirtyLocalNotebooks() { NSqlQuery query(db); query.prepare("update datastore set data=0 where key=:dirty and data=1 and lid in (select lid from datastore where key=:local and data=1);"); query.bindValue(":dirty", NOTEBOOK_ISDIRTY); query.bindValue(":local", NOTEBOOK_IS_LOCAL); query.exec(); query.finish(); db->unlock(); } �����������������������������nixnote2-2.0.2/sql/notebooktable.h������������������������������������������������������������������0000664�0000000�0000000�00000015074�13156041044�0017066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NOTEBOOKTABLE_H #define NOTEBOOKTABLE_H #include "global.h" #include <iostream> #include <string> #include <stdio.h> #include <QSqlTableModel> #include <QtSql> #include <QString> #define NOTEBOOK_GUID 3000 #define NOTEBOOK_NAME 3001 #define NOTEBOOK_STACK 3002 #define NOTEBOOK_UPDATE_SEQUENCE_NUMBER 3003 #define NOTEBOOK_ISDIRTY 3004 #define NOTEBOOK_LID 3005 #define NOTEBOOK_IS_LOCAL 3006 #define NOTEBOOK_IS_DEFAULT 3007 #define NOTEBOOK_SERVICE_CREATED 3008 #define NOTEBOOK_SERVICE_UPDATED 3009 #define NOTEBOOK_ALIAS 3010 #define NOTEBOOK_IS_CLOSED 3999 #define NOTEBOOK_PUBLISHED 3100 #define NOTEBOOK_PUBLISHING_URI 3101 #define NOTEBOOK_PUBLISHING_ORDER 3102 #define NOTEBOOK_PUBLISHING_ASCENDING 3103 #define NOTEBOOK_PUBLISHING_DESCRIPTION 3104 #define NOTEBOOK_IS_DELETED 3105 using namespace std; class NotebookTable { private: DatabaseConnection *db; public: NotebookTable(DatabaseConnection *db); // Constructor // DB Read Functions qint32 getLid(QString guid); // given a guid, return the lid qint32 getLid(string guid); // Given a guid, return the lid qint32 findByName(string &name); // Find a notebook given a name qint32 findByName(QString &name); // Find a notebook given a name bool get(Notebook ¬ebook, qint32 lid); // Get a notebook given a lid bool get(Notebook ¬ebook, QString guid); // get a notebook given a guid bool get(Notebook ¬ebook, string guid); // get a notebook given a guid bool isDirty(qint32 lid); // Check if a notebook is dirty bool isDirty(QString guid); // Check if a notebook is dirty bool isDirty(string guid); // Check if a notebook is dirty bool exists(qint32 lid); // Does this notebook exist? bool exists(QString guid); // Does this notebook exist? bool exists(string guid); // Does this notebook exist? qint32 getAll(QList<qint32> &retVal); // Get a list of all notebooks qint32 getAllOrderByName(QList<qint32> &retVal); // Get a list of all notebooks qint32 getStack(QList<qint32> &retval, QString &stack); // Get all notebooks for a particular stack bool getGuid(QString& retval, qint32 lid); // Get a guid for a particular lid bool findGuidByName(QString &retval, QString &guid); // Search for a notebook's guid based upon its name bool isDeleted(qint32 lid); // is this notebook deleted? bool isLocal(qint32 lid); // Is this notebook local? void findByStack(QList<qint32> &lids, QString stackName); // Find a notebook by the stack name void getStacks(QStringList &stacks); // Get a list of all stacks bool isStacked(qint32 lid); // Is this notebook in a stack? qint32 getDefaultNotebookLid(); // Get the default notebook LID QString getDefaultNotebookGuid(); // Get the default notebok GUID bool isReadOnly(qint32 notebookLid); // Is this DB read only? qint32 getConflictNotebook(); // get the LID of the conflict notebook qint32 getAllDirty(QList<qint32> &lids); // get all dirty notebooks int getNewUnsequencedCount(); // Get a count of all notebooks with USN=0 qint32 findByUri(QString uri); // Find a notebook by the URI qint32 findByUri(string uri); // Find a notebook by the URI void getOpenNotebooks(QList<qint32> &lids); // Get a list of all open notebooks void getClosedNotebooks(QList<qint32> &lids); // Get a list of all closed notebooks // DB Write Functions void updateGuid(qint32 lid, Guid &guid); // Update a notebook's guid qint32 sync(Notebook ¬ebook); // Sync a notebook with a new record qint32 sync(qint32 lid, Notebook ¬ebook); // Sync a notebook with a new record qint32 add(qint32 lid, Notebook &t, bool isDirty, bool isLocal = false); // Add a new notebook void openAllNotebooks(); // Open all notebooks void closeNotebook(qint32 lid); // Close a notebook void openNotebook(qint32 lid); // Open a notebook void merge(qint32 source, qint32 target); // Merge two notebooks qint32 addStub(QString guid); // Add a stub for later insertion void setUpdateSequenceNumber(qint32 lid, qint32 usn); // set the update sequence number bool update(Notebook ¬ebook, bool isDirty); bool setDirty(string guid, bool dirty); // Set the notebook dirty/clean bool setDirty(QString guid, bool dirty); // set the notebook dirty/clean bool setDirty(qint32 lid, bool dirty); // set the notebook dirty/clean void deleteNotebook(qint32 lid); // mark a notebook for deletion void expunge(qint32 lid); // purge a notebook void expunge(string guid); // purge a notebook void expunge(QString guid); // purge a notebook void renameStack(QString oldName, QString newName); // Rename a stack void removeFromStack(qint32 lid); // Remove from a stack void resetLinkedNotebooksDirty(); // mark all linked notebooks as not-dirty void resetDirtyLocalNotebooks(); // mark all local notebooks as synchornized }; #endif // NOTEBOOKTABLE_H ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/notemetadata.cpp�����������������������������������������������������������������0000664�0000000�0000000�00000003661�13156041044�0017236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "notemetadata.h" // Constructor NoteMetaData::NoteMetaData() { color = -1; pinned = false; dirty = false; } // Get the GUID for the note QString NoteMetaData::getGuid() { return guid; } // Set the GUID for the note void NoteMetaData::setGuid(QString g) { guid = g; } // Get the title color for the note int NoteMetaData::getColor() { return color; } // Set the title color for the note void NoteMetaData::setColor(int c) { color = c; } // Set this note as pinned void NoteMetaData::setPinned(bool value) { pinned = value; } // Is this note pinned? bool NoteMetaData::isPinned() { return pinned; } // Set this note as needing to be synced void NoteMetaData::setDirty(bool v) { dirty = v; } // Does this note need to be synchornized bool NoteMetaData::isDirty() { return dirty; } // Copy this metadata void NoteMetaData::copy(NoteMetaData m) { color = m.getColor(); guid = m.getGuid(); pinned = m.isPinned(); dirty = m.isDirty(); } �������������������������������������������������������������������������������nixnote2-2.0.2/sql/notemetadata.h�������������������������������������������������������������������0000664�0000000�0000000�00000003557�13156041044�0016707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NOTEMETADATA_H #define NOTEMETADATA_H #include <QString> class NoteMetaData; class NoteMetaData { public: NoteMetaData(); // Constructor QString getGuid(); // Get the GUID for this record void setGuid(QString g); // Set the GUID for this record int getColor(); // Get the title color for a note void setColor(int c); // Set the title color for a note void setPinned(bool value); // Set this note pinned? bool isPinned(); // Is this note pinned? void setDirty(bool v); // Set this note as needing a sync bool isDirty(); // Does this note need a sync? void copy(NoteMetaData m); // Copy this record private: QString guid; // Note GUID int color; // Note color bool pinned; // Is it pinned? bool dirty; // Does it need a sync }; #endif // NOTEMETADATA_H �������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/notetable.cpp��������������������������������������������������������������������0000664�0000000�0000000�00000231137�13156041044�0016546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "notetable.h" #include "resourcetable.h" #include "configstore.h" #include "notebooktable.h" #include "linkednotebooktable.h" #include "sql/nsqlquery.h" #include "tagtable.h" #include "global.h" #include "utilities/noteindexer.h" #include <QSqlTableModel> #include <QtXml> #include "html/tagscanner.h" extern Global global; // Default constructor NoteTable::NoteTable(DatabaseConnection *db) { this->db = db; } // Given a note's lid, we give it a new guid. This can happen // the first time a record is synchronized void NoteTable::updateGuid(qint32 lid, Guid &guid) { QLOG_TRACE() << "Entering NoteTable::updateNoteGuid()"; NSqlQuery query(db); db->lockForWrite(); query.prepare("Update DataStore set data=:data where key=:key and lid=:lid"); query.bindValue(":data", guid); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_GUID); query.exec(); db->unlock(); QLOG_TRACE() << "Leaving NoteTable::updateNoteGuid()"; } // Synchronize a new note with what is in the database. We basically // just delete the old one & give it a new entry void NoteTable::sync(Note ¬e, qint32 account) { sync(0, note, account); } // Synchronize a new note with what is in the database. We basically // just delete the old one & give it a new entry void NoteTable::sync(qint32 lid, const Note ¬e, qint32 account) { // QLOG_TRACE() << "Entering NoteTable::sync()"; if (lid > 0) { NSqlQuery query(db); // Delete the old record query.prepare("Delete from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); query.finish(); ResourceTable resTable(db); resTable.expungeByNote(lid); } else { ConfigStore cs(db); lid = cs.incrementLidCounter(); } add(lid, note, false, account); setThumbnailNeeded(lid, true); //QLOG_TRACE() << "Leaving NoteTable::sync()"; } // Given a note's GUID, we return the LID qint32 NoteTable::getLid(QString guid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:data"); query.bindValue(":key", NOTE_GUID); query.bindValue(":data", guid); query.exec(); qint32 retval = 0; if (query.next()) retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } // Given a note's lid, return the guid QString NoteTable::getGuid(qint32 lid) { NSqlQuery query(db); QString retval = ""; db->lockForRead(); query.prepare("Select data from DataStore where key=:key and lid=:lid"); query.bindValue(":key", NOTE_GUID); query.bindValue(":lid", lid); query.exec(); if (query.next()) retval = query.value(0).toString(); query.finish(); db->unlock(); return retval; } // Given a note's GUID, we return the LID qint32 NoteTable::getLid(string guid) { QString s(QString::fromStdString(guid)); return getLid(s); } // Add a new note to the database qint32 NoteTable::add(qint32 l, const Note &t, bool isDirty, qint32 account) { db->lockForWrite(); ResourceTable resTable(db); ConfigStore cs(db); NSqlQuery query(db); qint32 lid = l; qint32 notebookLid = account; query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); if (lid <= 0) lid = cs.incrementLidCounter(); QLOG_DEBUG() << "Adding note("<<lid<<") " << (t.title.isSet() ? t.title : "title is empty"); if (t.guid.isSet()) { QString guid = t.guid; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_GUID); query.bindValue(":data", guid); query.exec(); } query.bindValue(":lid", lid); query.bindValue(":key", NOTE_INDEX_NEEDED); query.bindValue(":data", true); query.exec(); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_THUMBNAIL_NEEDED); query.bindValue(":data", true); query.exec(); if (t.title.isSet()) { query.bindValue(":lid", lid); QString title = t.title; query.bindValue(":key", NOTE_TITLE); query.bindValue(":data", title); query.exec(); } if (t.content.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_CONTENT); QByteArray b; QString content = t.content; #if QT_VERSION < 0x050000 b.append(content.toAscii()); #else b.append(content); #endif query.bindValue(":data", b); query.exec(); } if (t.contentHash.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_CONTENT_HASH); QByteArray contentHash = t.contentHash; query.bindValue(":data", contentHash); query.exec(); } if (t.contentLength.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_CONTENT_LENGTH); qint32 len = t.contentLength; query.bindValue(":data", len); query.exec(); } if (t.updateSequenceNum.isSet()) { query.bindValue(":lid", lid); qint32 usn = t.updateSequenceNum; query.bindValue(":key", NOTE_UPDATE_SEQUENCE_NUMBER); query.bindValue(":data", usn); query.exec(); } if (isDirty) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ISDIRTY); query.bindValue(":data", isDirty); query.exec(); } if (t.created.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_CREATED_DATE); qlonglong date = t.created; query.bindValue(":data",date); query.exec(); } if (t.updated.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_UPDATED_DATE); qlonglong date = t.updated; query.bindValue(":data", date); query.exec(); } if (t.deleted.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_DELETED_DATE); qlonglong date = t.deleted; query.bindValue(":data", date); query.exec(); } if (t.active.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ACTIVE); bool active = t.active; query.bindValue(":data", active); query.exec(); } if (t.notebookGuid.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_NOTEBOOK_LID); NotebookTable notebookTable(db); LinkedNotebookTable linkedTable(db); if (account > 0) notebookLid = account; else notebookLid = 0; if (notebookLid <= 0) notebookLid = notebookTable.getLid(t.notebookGuid); if (notebookLid <= 0) { notebookLid = linkedTable.getLid(t.notebookGuid); } // If not found, we insert one to avoid problems. We'll probably get the real data later if (notebookLid <= 0) { notebookLid = cs.incrementLidCounter(); Notebook notebook; notebook.guid = t.notebookGuid; notebook.name = "<Missing Notebook>"; notebookTable.add(notebookLid, notebook, false, false); } query.bindValue(":data", notebookLid); query.exec(); } QList<QString> tagGuids; if (t.tagGuids.isSet()) tagGuids = t.tagGuids; for (int i=0; i<tagGuids.size(); i++) { TagTable tagTable(db); qint32 tagLid = tagTable.getLid(tagGuids[i]); if (tagLid == 0) { // create a dummy tag to avoid later problems Tag newTag; newTag.guid = tagGuids[i]; newTag.name = ""; tagLid = cs.incrementLidCounter(); tagTable.add(tagLid, newTag, false, 0); } query.bindValue(":lid", lid); query.bindValue(":key", NOTE_TAG_LID); query.bindValue(":data", tagLid); query.exec(); } QList<Resource> resources; if (t.resources.isSet()) resources = t.resources; for (int i=0; i<resources.size(); i++) { qint32 resLid; resLid = 0; Resource r; r = resources[i]; resLid = resTable.getLid(t.guid,resources[i].guid); if (resLid == 0) resLid = cs.incrementLidCounter(); resTable.add(resLid, r, isDirty, lid); if (r.mime.isSet()) { QString mime = r.mime; if (!mime.startsWith("image/") && mime != "vnd.evernote.ink") { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_HAS_ATTACHMENT); query.bindValue(":data", true); query.exec(); } } } if (t.attributes.isSet()) { NoteAttributes na = t.attributes; if (na.subjectDate.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_SUBJECT_DATE); qlonglong ts = na.subjectDate; query.bindValue(":data",ts); query.exec(); } if (na.latitude.isSet()) { double lat = na.latitude; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_LATITUDE); query.bindValue(":data", lat); query.exec(); } if (na.longitude.isSet()) { double lon = na.longitude; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_LONGITUDE); query.bindValue(":data", lon); query.exec(); } if (na.altitude.isSet()) { double alt = na.altitude; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_ALTITUDE); query.bindValue(":data", alt); query.exec(); } if (na.author.isSet()) { QString author = na.author; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_AUTHOR); query.bindValue(":data", author); query.exec(); } if (na.source.isSet()) { QString source = na.source; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_SOURCE); query.bindValue(":data", source); query.exec(); } if (na.sourceURL.isSet()) { QString sourceURL = na.sourceURL; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_SOURCE_URL); query.bindValue(":data", sourceURL); query.exec(); } if (na.sourceApplication.isSet()) { QString sourceApplication = na.sourceApplication; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_SOURCE_APPLICATION); query.bindValue(":data", sourceApplication); query.exec(); } if (na.shareDate.isSet()) { double date = na.shareDate; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_SHARE_DATE); query.bindValue(":data",date); query.exec(); } if (na.placeName.isSet()) { QString placename = na.placeName; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_PLACE_NAME); query.bindValue(":data", placename); query.exec(); } if (na.contentClass.isSet()) { QString cc = na.contentClass; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_CONTENT_CLASS); query.bindValue(":data", cc); query.exec(); } if (na.reminderTime.isSet()) { double rt = na.reminderTime; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_TIME); query.bindValue(":data",rt); query.exec(); } if (na.reminderDoneTime.isSet()) { double rt = na.reminderDoneTime; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_DONE_TIME); query.bindValue(":data", rt); query.exec(); } if (na.reminderOrder.isSet()) { bool rt = na.reminderOrder; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_ORDER); query.bindValue(":data", rt); query.exec(); } } // No determine some attributes of the note based upon the content // This should probably happen every time a note changes? Or at least something simular: QString content; if (t.content.isSet()) content = t.content; else content = ""; if (content.contains("<en-crypt")) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_HAS_ENCRYPT); query.bindValue(":data", true); query.exec(); } if (content.contains("<en-todo")) { if (content.contains("<en-todo checked=\"true\"")) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_HAS_TODO_COMPLETED); query.bindValue(":data", true); query.exec(); } if (content.contains("<en-todo checked=\"false\"") || content.contains("<en-todo/>")) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_HAS_TODO_UNCOMPLETED); query.bindValue(":data", true); query.exec(); } } query.finish(); db->unlock(); updateNoteList(lid, t, isDirty, account); // Experimental index helper if (global.enableIndexing) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_INDEX_NEEDED); query.bindValue(":data", true); query.exec(); } else { NoteIndexer indexer(db); indexer.indexNote(lid); } return lid; } // Add a stub for a note. More information about the note will be added later. This can // happen during a sync if a resource appears before the note itself qint32 NoteTable::addStub(QString noteGuid) { db->lockForWrite(); ConfigStore cs(db); NSqlQuery query(db); qint32 lid = 0; lid = getLid(noteGuid); if (lid <= 0) lid = cs.incrementLidCounter(); query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_GUID); query.bindValue(":data", noteGuid); query.exec(); query.finish(); db->unlock(); return lid; } // Update the note listing table bool NoteTable::updateNoteList(qint32 lid, const Note &t, bool isDirty, qint32 notebook) { if (lid <= 0) return false; db->lockForWrite(); NotebookTable notebookTable(db); LinkedNotebookTable linkedNotebookTable(db); QString notebookName = ""; qint32 account = 0; // By default we search in our account. This is used later to find tag names qint32 notebookLid = notebook; if (notebookLid <= 0) notebookLid = notebookTable.getLid(t.notebookGuid); if (notebookLid <=0) { notebookLid = linkedNotebookTable.getLid(t.notebookGuid); if (notebookLid > 0) account = notebookLid; } if (notebookLid <=0) notebookLid = notebookTable.addStub(t.notebookGuid); else { Notebook notebook; notebookTable.get(notebook, notebookLid); notebookName = notebook.name; } // Now let's update the user table NSqlQuery query(db); query.prepare("Delete from NoteTable where lid=:lid"); query.bindValue(":lid", lid); query.exec(); query.prepare(QString("Insert into NoteTable (lid, title, author, ") + QString("dateCreated, dateUpdated, dateSubject, dateDeleted, source, sourceUrl, sourceApplication, ") + QString("latitude, longitude, altitude, reminderOrder, reminderTime, reminderDoneTime, hasEncryption, hasTodo, isDirty, size, notebook, notebookLid, tags) ") + QString("Values (:lid, :title, :author, ") + QString(":dateCreated, :dateUpdated, :dateSubject, :dateDeleted, :source, :sourceUrl, :sourceApplication, ") + QString(":latitude, :longitude, :altitude, :reminderOrder, :reminderTime, :reminderDoneTime, :hasEncryption, :hasTodo, :isDirty, :size, :notebook, :notebookLid, :tags) ")) ; query.bindValue(":lid", lid); QString title = ""; if (t.title.isSet()) title = t.title; query.bindValue(":title", title); NoteAttributes na; if (t.attributes.isSet()) na = t.attributes; if (na.author.isSet()) { QString author = na.author; query.bindValue(":author",author); } else { query.bindValue(":author", ""); } if (na.subjectDate.isSet()) { double sd = na.subjectDate; query.bindValue(":dateSubject", sd); } else { query.bindValue(":dateSubject", 0); } if (na.source.isSet()) { QString source = na.source; query.bindValue(":source", source); } else { query.bindValue(":source", ""); } if (na.sourceURL.isSet()) { QString url = na.sourceURL; query.bindValue(":sourceUrl", url); } else { query.bindValue(":sourceUrl", ""); } if (na.sourceApplication.isSet()) { QString sa = na.sourceApplication; query.bindValue(":sourceApplication", sa); } else { query.bindValue(":sourceApplication", ""); } if (na.latitude.isSet()) { double lat = na.latitude; query.bindValue(":latitude", lat); } else { query.bindValue(":latitude", 0); } if (na.longitude.isSet()) { double lon = na.longitude; query.bindValue(":longitude",lon); } else { query.bindValue(":longitude", 0); } if (na.altitude.isSet()) { double alt = na.altitude; query.bindValue(":altitude", alt); } else { query.bindValue(":altitude", 0); } if (na.reminderOrder.isSet()) { qint64 order = na.reminderOrder; query.bindValue(":reminderOrder", order); } else { query.bindValue(":reminderOrder", 0); } if (na.reminderTime.isSet()) { qlonglong rt = na.reminderTime; query.bindValue(":reminderTime", rt); } else { query.bindValue(":reminderTime", 0); } if (na.reminderDoneTime.isSet()) { qlonglong rt = na.reminderDoneTime; query.bindValue(":reminderDoneTime", rt); } else { query.bindValue(":reminderDoneTime", 0); } qlonglong created = 0; if (t.created.isSet()) created = t.created; query.bindValue(":dateCreated", created); qlonglong updated = created; if (t.updated.isSet()) updated = t.updated; query.bindValue(":dateUpdated", updated); qlonglong deleted = 0; if (t.deleted.isSet()) deleted = t.deleted; query.bindValue(":dateDeleted", deleted); bool hasEncryption; QString content; if (t.content.isSet()) content = t.content; if (content.contains("<en-crypt")) hasEncryption = true; else hasEncryption = false; query.bindValue(":hasEncryption", hasEncryption); bool hasTodo; if (content.contains("<en-todo")) hasTodo = true; else hasTodo = false; query.bindValue(":hasTodo", hasTodo); query.bindValue(":isDirty", isDirty); qlonglong size = content.length(); QList<Resource> reslist; if (t.resources.isSet()) reslist = t.resources; for (int i=0; i<reslist.size(); i++) { if (reslist[i].data.isSet()) { Data d = reslist[i].data; if (d.size.isSet()) size+=d.size; } } query.bindValue(":size", size); query.bindValue(":notebook", notebookName); query.bindValue(":notebookLid", notebookLid); QString tagName; QList<QString> tagNames; // Normal sort is below. If user has problems with non-ASCII characters // they can choose to bypass the name sorting if (!global.nonAsciiSortBug) { QStringList sortedNames; if (t.tagNames.isSet()) tagNames = t.tagNames; for (int i=0; i<tagNames.size(); i++) { sortedNames.append(tagNames[i].toLower()); } sortedNames.sort(); TagTable tagTable(db); // We search the table to get the name in the correct case. // We lowercased them above to sort properly without regards // to case. Now, for the note list we need the correct case for (int i=0; i<sortedNames.size(); i++) { Tag currentTag; qint32 tagLid = tagTable.findByName(sortedNames[i], account); tagTable.get(currentTag, tagLid); if (currentTag.name.isSet()) { if (i>0) { tagName = tagName+", "; } tagName = tagName + currentTag.name; } } } else { // Users have experienced bugs with the above because of non-ASCII characters. // This enables them to bypass the bug at the cost of not sorting tags. if (t.tagNames.isSet()) tagNames = t.tagNames; for (int i=0; i<tagNames.size(); i++) { if (i>0) tagName = tagName+", "; tagName = tagName + tagNames[i]; } } query.bindValue(":tags", tagName); if (!query.exec()) { QLOG_ERROR() << "Error inserting into NoteTable: " << query.lastError(); QLOG_ERROR() << "Error inserting into NoteTable: " << query.lastQuery(); query.finish(); db->unlock(); return false; } query.finish(); db->unlock(); return true; } // Update the name of a notebook in the note list table bool NoteTable::updateNotebookName(qint32 lid, QString name) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update NoteTable set notebook=:name where notebooklid=:lid"); query.bindValue(":name", name); query.bindValue(":lid", lid); bool retval = query.exec(); query.finish(); db->unlock(); return retval; } // Return a note structure given the LID bool NoteTable::get(Note ¬e, qint32 lid,bool loadResources, bool loadBinary) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select key, data from DataStore where lid=:lid"); query.bindValue(":lid", lid); NoteAttributes na; QList<QString> tagGuids; QList<QString> tagNames; if (note.attributes.isSet()) { na = note.attributes; } query.exec(); while (query.next()) { qint32 key = query.value(0).toInt(); switch (key) { case (NOTE_GUID): note.guid = query.value(1).toString(); break; case (NOTE_UPDATE_SEQUENCE_NUMBER): note.updateSequenceNum = query.value(1).toInt(); break; case (NOTE_ACTIVE): note.active = query.value(1).toBool(); break; case (NOTE_DELETED_DATE): note.active = query.value(1).toLongLong(); break; case (NOTE_ATTRIBUTE_SOURCE_URL): na.sourceURL = query.value(1).toString(); note.attributes = na; break; case (NOTE_ATTRIBUTE_SOURCE_APPLICATION): na.sourceApplication = query.value(1).toString(); note.attributes = na; break; case (NOTE_CONTENT_LENGTH): note.contentLength = query.value(1).toLongLong(); break; case (NOTE_ATTRIBUTE_LONGITUDE): na.longitude = query.value(1).toFloat(); note.attributes = na; break; case (NOTE_TITLE): note.title = query.value(1).toString(); break; case (NOTE_ATTRIBUTE_SOURCE): na.source = query.value(1).toString(); note.attributes = na; break; case (NOTE_ATTRIBUTE_ALTITUDE): na.altitude = query.value(1).toFloat(); note.attributes = na; break; case (NOTE_NOTEBOOK_LID): { qint32 notebookLid = query.value(1).toInt(); NotebookTable ntable(db); QString notebookGuid; ntable.getGuid(notebookGuid, notebookLid); note.notebookGuid = notebookGuid; break; } case (NOTE_UPDATED_DATE): note.updated = query.value(1).toLongLong(); break; case (NOTE_CREATED_DATE): note.created = query.value(1).toLongLong(); break; case (NOTE_ATTRIBUTE_SUBJECT_DATE): na.subjectDate = query.value(1).toLongLong(); note.attributes = na; break; case (NOTE_ATTRIBUTE_LATITUDE): na.latitude = query.value(1).toFloat(); note.attributes = na; break; case (NOTE_CONTENT): note.content = query.value(1).toByteArray().data(); // Sometimes Evernote doesn't send the XML tag with UTF8 encoding. This forces it. if (global.forceUTF8 && !note.content->startsWith("<?xml")) note.content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + note.content; break; case (NOTE_CONTENT_HASH): note.contentHash = query.value(1).toByteArray(); break; case (NOTE_ATTRIBUTE_AUTHOR): na.author = query.value(1).toString(); note.attributes = na; break; case (NOTE_ISDIRTY): break; case (NOTE_ATTRIBUTE_SHARE_DATE) : na.shareDate = query.value(1).toLongLong(); note.attributes = na; break; case (NOTE_ATTRIBUTE_PLACE_NAME) : na.placeName = query.value(1).toString(); note.attributes = na; break; case (NOTE_ATTRIBUTE_CONTENT_CLASS) : na.contentClass = query.value(1).toString(); note.attributes = na; break; case (NOTE_ATTRIBUTE_REMINDER_ORDER) : na.reminderOrder = query.value(1).toLongLong(); note.attributes = na; break; case (NOTE_ATTRIBUTE_REMINDER_DONE_TIME) : na.reminderDoneTime = query.value(1).toLongLong(); note.attributes = na; break; case (NOTE_ATTRIBUTE_REMINDER_TIME) : na.reminderTime = query.value(1).toLongLong(); note.attributes = na; break; case (NOTE_TAG_LID) : TagTable tagTable(db); qint32 tagLid = query.value(1).toInt(); Tag tag; tagTable.get(tag, tagLid); if (tag.guid.isSet()) tagGuids.append(tag.guid); if (tag.name.isSet()) tagNames.append(tag.name); break; } } query.finish(); if (tagGuids.size() > 0) { note.tagGuids = tagGuids; note.tagNames = tagNames; } ResourceTable resTable(db); QLOG_TRACE() << "Fetching Resources? " << loadResources << " With binary? " << loadBinary; QList<Resource> resources; resTable.getAllResources(resources, lid, loadResources, loadBinary); note.resources = resources; QLOG_TRACE() << "Fetched resources"; db->unlock(); if (note.guid.isSet()) return true; else return false; } // Return a note given the GUID bool NoteTable::get(Note& note, QString guid,bool loadResources, bool loadBinary) { qint32 lid = getLid(guid); return get(note, lid, loadResources, loadBinary); } // Return a note given the GUID as a std::string bool NoteTable::get(Note ¬e, string guid, bool loadResources, bool loadBinary) { qint32 lid = getLid(guid); return get(note, lid, loadResources, loadBinary); } // Return if a note is dirty given its lid bool NoteTable::isIndexNeeded(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_INDEX_NEEDED); query.exec(); bool retval = false; if (query.next()) retval = query.value(0).toBool(); query.finish(); db->unlock(); return retval; } // Return if a note is dirty given its lid bool NoteTable::isDirty(qint32 lid) { db->lockForRead(); NSqlQuery query(db); bool retval = false; query.prepare("Select data from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ISDIRTY); query.exec(); if (query.next()) retval = query.value(0).toBool(); query.finish(); db->unlock(); return retval; } // Determine if a note is dirty given a guid bool NoteTable::isDirty(QString guid) { qint32 lid = getLid(guid); return isDirty(lid); } // Determine if a note is dirty given a guid bool NoteTable::isDirty(string guid) { QString g(QString::fromStdString(guid)); return isDirty(g); } // Does this note exist? bool NoteTable::exists(qint32 lid) { NSqlQuery query(db); bool retval = false; db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_GUID); query.exec(); if (query.next()) retval = true; query.finish(); db->unlock(); return retval; } // Determine if a note is dirty given a guid bool NoteTable::exists(QString guid) { qint32 lid = getLid(guid); return exists(lid); } // Determine if a note is dirty given a guid bool NoteTable::exists(string guid) { qint32 lid = getLid(guid); return exists(lid); } // Find the note LIDs for a tag qint32 NoteTable::findNotesByTag(QList<qint32> &values, qint32 tagLid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:tagLid"); query.bindValue(":key", NOTE_TAG_LID); query.bindValue(":tagLid", tagLid); query.exec(); while (query.next()) { values.append(query.value(0).toInt()); } query.finish(); db->unlock(); return values.size(); } // Find the note LIDs for a tag qint32 NoteTable::findNotesByTag(QList<qint32> &values, QString data) { TagTable tagTable(db); qint32 tagLid = tagTable.getLid(data); return findNotesByTag(values, tagLid); } // Find the note LIDs for a tag qint32 NoteTable::findNotesByTag(QList<qint32> &values, string data) { return findNotesByTag(values, QString::fromStdString(data)); } // Update the user note list with the proper tag names void NoteTable::updateNoteListTags(qint32 noteLid, QString tags) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update NoteTable set tags=:tags where lid=:lid"); query.bindValue(":lid", noteLid); query.bindValue(":tags", tags); query.exec(); query.finish(); db->unlock(); } // Update the user's notebook name list void NoteTable::updateNoteListNotebooks(QString guid, QString name) { db->lockForWrite(); NotebookTable notebookTable(db); qint32 notebookLid; notebookLid = notebookTable.getLid(guid); NSqlQuery sql2(db); sql2.prepare("Update NoteTable set notebook=:note where lid=:lid"); sql2.bindValue(":note", name); sql2.bindValue(":lid", notebookLid); sql2.exec(); sql2.finish(); db->unlock(); } // Get a list of notes for a given tag qint32 NoteTable::getNotesWithTag(QList<qint32> &retval, QString tag) { db->lockForRead(); NSqlQuery query(db); TagTable tagTable(db); qint32 tagLid = tagTable.getLid(tag); query.prepare("Select lid data from DataStore where data=:tag and key=:key"); query.bindValue(":tag", tagLid); query.bindValue(":key", NOTE_TAG_LID); query.exec(); while(query.next()) { retval.append(query.value(0).toInt()); } query.finish(); db->unlock(); return retval.size(); } // Set if a note needs to be indexed void NoteTable::setIndexNeeded(qint32 lid, bool indexNeeded) { QLOG_TRACE_IN(); if (lid <= 0) { QLOG_TRACE_OUT(); return; } // If it is already set to this value, then we don't need to // do anything. if (this->isIndexNeeded(lid) == indexNeeded) { QLOG_TRACE_OUT(); return; } NSqlQuery query(db); db->lockForWrite(); query.prepare("Delete from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_INDEX_NEEDED); query.exec(); // We don't really need to do anything after deleting the flag if (!indexNeeded) { QLOG_TRACE_OUT(); return; } query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_INDEX_NEEDED); query.bindValue(":data", indexNeeded); query.exec(); query.finish(); db->unlock(); // Experimental class to index at save if (!global.enableIndexing) { QLOG_TRACE() << "Calling indexNote"; NoteIndexer indexer(db); indexer.indexNote(lid); } QLOG_TRACE_OUT(); } // Set if a note needs to be indexed qint32 NoteTable::getIndexNeeded(QList<qint32> &lids) { NSqlQuery query(db); lids.clear(); qlonglong delayTime = QDateTime::currentDateTime().currentMSecsSinceEpoch()-300000; db->lockForRead(); query.prepare("Select lid, data from DataStore where key=:key and lid in (select lid from datastore where key=:key2 and data=1)"); query.bindValue(":key", NOTE_UPDATED_DATE); query.bindValue(":key2", NOTE_INDEX_NEEDED); query.exec(); while (query.next()) { qlonglong dt = query.value(1).toLongLong(); if (delayTime > dt) lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); return lids.size(); } // Update the notebook for a note void NoteTable::updateNotebook(qint32 noteLid, qint32 notebookLid, bool setAsDirty) { Notebook book; NotebookTable notebookTable(db); notebookTable.get(book, notebookLid); if (book.guid.isSet()) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update DataStore set data=:notebookLid where lid=:lid and key=:key;"); query.bindValue(":notebookLid", notebookLid); query.bindValue(":lid", noteLid); query.bindValue(":key", NOTE_NOTEBOOK_LID); query.exec(); if (setAsDirty) { setDirty(noteLid, setAsDirty,false); } QString bookName = book.name; query.prepare("Update NoteTable set notebook=:name where lid=:lid"); query.bindValue(":name", bookName); query.bindValue(":lid", noteLid); query.exec(); query.prepare("Update NoteTable set notebookLid=:nlid where lid=:lid"); query.bindValue(":nlid", notebookLid); query.bindValue(":lid", noteLid); query.exec(); query.finish(); db->unlock(); } } // Update the URL for a note void NoteTable::updateUrl(qint32 noteLid, QString url, bool setAsDirty=false) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from datastore where lid=:lid and key=:key"); query.bindValue(":lid", noteLid); query.bindValue(":key", NOTE_ATTRIBUTE_SOURCE_URL); query.exec(); if (url.trimmed() != "") { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", noteLid); query.bindValue(":key", NOTE_ATTRIBUTE_SOURCE_URL); query.bindValue(":data", url); query.exec(); } if (setAsDirty) { setDirty(noteLid, setAsDirty); } query.prepare("Update NoteTable set SourceURl=:url where lid=:lid"); query.bindValue(":url", url); query.bindValue(":lid", noteLid); query.exec(); query.finish(); db->unlock(); } // Update the title for a note void NoteTable::updateTitle(qint32 noteLid, QString title, bool setAsDirty=false) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update DataStore set data=:url where lid=:lid and key=:key;"); query.bindValue(":url", title); query.bindValue(":lid", noteLid); query.bindValue(":key", NOTE_TITLE); query.exec(); if (setAsDirty) { setDirty(noteLid, setAsDirty); } query.prepare("Update NoteTable set Title=:url where lid=:lid"); query.bindValue(":url", title); query.bindValue(":lid", noteLid); query.exec(); query.finish(); db->unlock(); } // Update the author for a note void NoteTable::updateAuthor(qint32 noteLid, QString author, bool setAsDirty=false) { if (noteLid <=0) return; NSqlQuery query(db); db->lockForWrite(); query.prepare("Delete from Datastore where lid=:lid and key=:key"); query.bindValue(":lid", noteLid); query.bindValue(":key", NOTE_ATTRIBUTE_AUTHOR); query.exec(); query.prepare("Insert into Datastore(lid, key, data) values(:lid, :key, :author);"); query.bindValue(":author", author); query.bindValue(":lid", noteLid); query.bindValue(":key", NOTE_ATTRIBUTE_AUTHOR); query.exec(); if (setAsDirty) { setDirty(noteLid, setAsDirty); } query.prepare("Update NoteTable set Author=:author where lid=:lid"); query.bindValue(":author", author); query.bindValue(":lid", noteLid); query.exec(); query.finish(); db->unlock(); } // Update the subject/update/deleted/created date for a note void NoteTable::updateDate(qint32 lid, Timestamp ts, qint32 key, bool isDirty = false) { if (lid <= 0) return; NSqlQuery query(db); db->lockForWrite(); query.prepare("Update DataStore set data=:ts where lid=:lid and key=:key;"); query.bindValue(":ts",ts); query.bindValue(":lid", lid); query.bindValue(":key",key); query.exec(); if (isDirty) { setDirty(lid, isDirty); } if (key == NOTE_CREATED_DATE) query.prepare("Update NoteTable set dateCreated=:date where lid=:lid"); if (key == NOTE_UPDATED_DATE) query.prepare("Update NoteTable set dateUpdated=:date where lid=:lid"); if (key == NOTE_DELETED_DATE) query.prepare("Update NoteTable set dateDeleted=:date where lid=:lid"); if (key == NOTE_ATTRIBUTE_SUBJECT_DATE) query.prepare("Update NoteTable set dateSubject=:date where lid=:lid"); if (key == NOTE_ATTRIBUTE_REMINDER_TIME) { query.prepare("Delete from Datastore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_TIME); query.exec(); query.prepare("Delete from Datastore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_ORDER); query.exec(); query.prepare("Delete from Datastore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_DONE_TIME); query.exec(); query.prepare("Insert into Datastore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_TIME); query.bindValue(":data", QVariant::fromValue(ts)); query.exec(); query.prepare("Insert into Datastore (lid, key, data) values (:lid, :key, datetime('now'))"); query.bindValue(":lid", lid); query.bindValue(":key",NOTE_ATTRIBUTE_REMINDER_ORDER); query.exec(); query.prepare("Update NoteTable set reminderTime=:date where lid=:lid"); } query.bindValue(":date", QVariant::fromValue(ts)); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } void NoteTable::removeTag(qint32 lid, qint32 tag, bool isDirty = false) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where lid=:lid and key=:key and data=:tag"); query.bindValue(":lid", lid); query.bindValue(":key",NOTE_TAG_LID); query.bindValue(":tag", tag); query.exec();; query.finish(); db->unlock(); if (isDirty) { setDirty(lid, isDirty,false); } rebuildNoteListTags(lid); } void NoteTable::addTag(qint32 lid, qint32 tag, bool isDirty = false) { if (lid <= 0) return; NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where lid=:lid and key=:key and data=:tag"); query.bindValue(":lid", lid); query.bindValue(":key",NOTE_TAG_LID); query.bindValue(":tag:", tag); query.exec(); query.prepare("insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key",NOTE_TAG_LID); query.bindValue(":data", tag); query.exec(); query.finish(); db->unlock(); if (isDirty) { setDirty(lid, isDirty,false); } rebuildNoteListTags(lid); } bool NoteTable::hasTag(qint32 noteLid, qint32 tagLid) { NSqlQuery query(db); db->lockForRead(); bool retval = false; query.prepare("select lid from DataStore where lid=:lid and key=:key and data=:tag"); query.bindValue(":lid", noteLid); query.bindValue(":key",NOTE_TAG_LID); query.bindValue(":tag:", tagLid); query.exec(); if (query.next()) retval = true; query.finish(); db->unlock(); return retval; } void NoteTable::rebuildNoteListTags(qint32 lid) { // update the note list QStringList tagNames; TagTable tagTable(db); NSqlQuery query(db); db->lockForWrite(); query.prepare("select data from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_TAG_LID); query.exec(); while (query.next()) { qint32 tagLid = query.value(0).toInt(); Tag t; tagTable.get(t, tagLid); if (t.name.isSet()) tagNames.append(t.name); } qSort(tagNames.begin(), tagNames.end(), caseInsensitiveLessThan); QString tagCol; for (qint32 i=0; i<tagNames.size(); i++) { tagCol = tagCol + tagNames[i]; if (i<tagNames.size()-1) tagCol=tagCol+", "; } query.prepare("update NoteTable set tags=:tags where lid=:lid"); query.bindValue(":tags", tagCol); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } QString NoteTable::getNoteListTags(qint32 lid) { db->lockForRead(); QString retval = ""; NSqlQuery query(db); query.prepare("select tags from NoteTable where lid=:lid"); query.bindValue(":lid", lid); query.exec(); if (query.next()) { retval = query.value(0).toString(); } query.finish(); db->unlock(); return retval; } void NoteTable::setDirty(qint32 lid, bool dirty, bool setDateUpdated) { if (lid <=0) return; qint64 dt = QDateTime::currentMSecsSinceEpoch(); db->lockForWrite(); NSqlQuery query(db); // If it is setting it as dirty, we need to update the // update date & time. if (dirty && setDateUpdated) { query.prepare("Delete from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_UPDATED_DATE); query.exec(); query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :value)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_UPDATED_DATE); query.bindValue(":value", dt); query.exec(); query.prepare("Update NoteTable set dateUpdated=:value where lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":value", dt); query.exec(); } // If it is already set to the value, then we don't // need to do anything more. if (isDirty(lid) == dirty) { query.finish(); db->unlock(); return; } // If we got here, then the current dirty state doesn't match // what the caller wants. query.prepare("Update NoteTable set isDirty=:isDirty where lid=:lid"); query.bindValue(":isDirty", dirty); query.bindValue(":lid", lid); query.exec(); query.prepare("Delete from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ISDIRTY); query.exec(); if (dirty) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ISDIRTY); query.bindValue(":data", dirty); query.exec(); query.finish(); db->unlock(); setIndexNeeded(lid, true); } else { query.finish(); db->unlock(); } } bool NoteTable::isDeleted(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("select data from DataStore where key=:key and lid=:lid"); query.bindValue(":key", NOTE_ACTIVE); query.bindValue(":lid", lid); query.exec(); if (query.next()) { db->unlock(); bool active = query.value(0).toBool(); query.finish(); return !active; } query.finish(); db->unlock(); return false; } void NoteTable::deleteNote(qint32 lid, bool isDirty=true) { if (lid <=0) return; NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where key=:key and lid=:lid"); query.bindValue(":key", NOTE_ACTIVE); query.bindValue(":lid", lid); query.exec(); query.prepare("delete from DataStore where key=:key and lid=:lid"); query.bindValue(":key", NOTE_DELETED_DATE); query.bindValue(":lid", lid); query.exec(); if (isDirty) { query.prepare("delete from DataStore where key=:key and lid=:lid"); query.bindValue(":key", NOTE_ISDIRTY); query.bindValue(":lid", lid); query.exec(); } query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ACTIVE); query.bindValue(":data", false); query.exec(); query.prepare("update notetable set dateDeleted=strftime('%s','now') where lid=:lid"); query.bindValue(":lid", lid); query.exec(); if (isDirty) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ISDIRTY); query.bindValue(":data", true); query.exec(); } query.finish(); db->unlock(); } void NoteTable::restoreNote(qint32 lid, bool isDirty=true) { if (lid <=0) return; NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where key=:key and lid=:lid"); query.bindValue(":key", NOTE_ACTIVE); query.bindValue(":lid", lid); query.exec(); query.prepare("delete from DataStore where key=:key and lid=:lid"); query.bindValue(":key", NOTE_DELETED_DATE); query.bindValue(":lid", lid); query.exec(); if (isDirty) { query.prepare("delete from DataStore where key=:key and lid=:lid"); query.bindValue(":key", NOTE_ISDIRTY); query.bindValue(":lid", lid); query.exec(); } query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ACTIVE); query.bindValue(":data", true); query.exec(); query.prepare("update notetable set dateDeleted=0 where lid=:lid"); query.bindValue(":lid", lid); query.exec(); if (isDirty) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ISDIRTY); query.bindValue(":data", true); query.exec(); } query.finish(); db->unlock(); } qint32 NoteTable::getAllDeleted(QList<qint32> &lids) { db->lockForRead(); lids.clear(); NSqlQuery query(db); query.prepare("select lid from DataStore where key=:key and data=0"); query.bindValue(":key", NOTE_ACTIVE); query.exec(); while (query.next()) { lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); return lids.size(); } void NoteTable::expunge(qint32 lid) { // Expunge the thumbnail QString thumbnail = global.fileManager.getThumbnailDirPath() + QString::number(lid) + ".png"; QFile f(thumbnail); if (f.exists()) { QDir d; d.remove(thumbnail); } Note note; this->get(note, lid, true, false); ResourceTable resTable(db); QList<Resource> resources; if (note.resources.isSet()) resources = note.resources; for (int i=0; i<resources.size(); i++) { resTable.expunge(resources[i].guid); } NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); query.prepare("delete from NoteTable where lid=:lid"); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } void NoteTable::expunge(string guid) { int lid = this->getLid(guid); this->expunge(lid); } void NoteTable::expunge(QString guid) { int lid = this->getLid(guid); this->expunge(lid); } // Add to the deletion queue void NoteTable::addToDeleteQueue(qint32 lid, Note n) { get(n,lid,true,true); NSqlQuery query(db); db->lockForWrite(); query.prepare("insert into datastore (lid,key,data) values (:lid, :key, :data)"); QString guid = n.guid; QString notebookGuid = n.notebookGuid; query.bindValue(":lid", lid); query.bindValue(":key", NOTE_DELETE_PENDING_GUID); query.bindValue(":data" , guid); query.exec(); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_DELETE_PENDING_NOTEBOOK); query.bindValue(":data" , notebookGuid); query.exec(); db->unlock(); } // Get every pending delete void NoteTable::getAllDeleteQueue(QStringList &guids, QString notebookGuid) { NSqlQuery query(db); guids.clear(); db->lockForRead(); if (notebookGuid == "") { query.prepare("Select data from datastore where key=:key"); query.bindValue(":key", NOTE_DELETE_PENDING_GUID); } else { query.prepare("Select data from datastore where key=:key and data=:notebookGuid"); query.bindValue(":key", NOTE_DELETE_PENDING_GUID); query.bindValue(":data", notebookGuid); } query.exec(); while(query.next()) { guids.append(query.value(0).toString()); } db->unlock(); } // Expunge from the deletion queue void NoteTable::expungeFromDeleteQueue(qint32 lid) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from datastore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); db->unlock(); } // Expunge from the deletion queue void NoteTable::expungeFromDeleteQueue(QString guid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from datastore where key=:key and data=:data"); query.bindValue(":key", NOTE_DELETE_PENDING_GUID); query.bindValue(":data", guid); query.exec(); db->unlock(); while(query.next()) { expungeFromDeleteQueue(query.value(0).toInt()); } } // Find all notes belonging to a particular notebook. qint32 NoteTable::findNotesByNotebook(QList<qint32> ¬es, QString guid) { NSqlQuery query(db); qint32 notebookLid; NotebookTable notebookTable(db); notebookLid = notebookTable.getLid(guid); return findNotesByNotebook(notes, notebookLid); } // Find all notes belonging to a particular notebook. qint32 NoteTable::findNotesByNotebook(QList<qint32> ¬es, qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:notebookLid"); query.bindValue(":notebookLid", lid); query.bindValue(":key", NOTE_NOTEBOOK_LID); query.exec(); while (query.next()) { notes.append(query.value(0).toInt()); } query.finish(); db->unlock(); return notes.size(); } qint32 NoteTable::findNotesByNotebook(QList<qint32> ¬es, string guid) { return findNotesByNotebook(notes, QString::fromStdString(guid)); } void NoteTable::updateNoteContent(qint32 lid, QString content, bool isDirty) { db->lockForWrite(); NSqlQuery query(db); query.prepare("update datastore set data=:content where lid=:lid and key=:key"); query.bindValue(":content", content); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_CONTENT); query.exec(); // Update the note size query.prepare("Delete from datastore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_CONTENT_LENGTH); query.exec(); query.prepare("Insert into datastore (lid, key, data) values (:lid, :key, :content)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_CONTENT_LENGTH); query.bindValue(":content", content.length()); query.exec(); // Make sure we don't have a todo NSqlQuery query2(db); query2.prepare("Update NoteTable set hasTodo=0 where lid=:lid"); query2.bindValue(":lid", lid); query2.exec(); query2.prepare("delete from datastore where lid=:lid and (key=:key1 or key=:key2)"); query2.bindValue(":lid", lid); query2.bindValue(":key1", NOTE_HAS_TODO_COMPLETED); query2.bindValue(":key2", NOTE_HAS_TODO_UNCOMPLETED); query2.exec(); query2.prepare("Update NoteTable set hasEncryption=0 where lid=:lid"); query2.bindValue(":lid", lid); query2.exec(); query2.prepare("delete from datastore where lid=:lid and key=:key"); query2.bindValue(":lid", lid); query2.bindValue(":key", NOTE_HAS_ENCRYPT); query2.exec(); if (content.contains("<en-todo")) { QLOG_DEBUG() << content; query.prepare("insert into datastore (lid, key, data) values (:lid, :key, 1)"); // If we have a todo that is checked, then it is completed. if (content.contains("<en-todo checked=\"true\"")) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_HAS_TODO_COMPLETED); query.exec(); } // If we have a todo that is not checked, but still have a todo, then it must be uncoompleted. if (content.contains("<en-todo checked=\"false\"") || content.contains("<en-todo/>")) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_HAS_TODO_UNCOMPLETED); query.exec(); } NSqlQuery query2(db); query2.prepare("Update NoteTable set hasTodo=:value where lid=:lid"); query2.bindValue(":lid", lid); query2.bindValue(":value", 1); query2.exec(); } if (content.contains("<en-crypt")) { query.prepare("insert into datastore (lid, key, data) values (:lid, :key, 1)"); if (content.contains("<en-todo checked=\"true\"")) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_HAS_TODO_COMPLETED); query.exec(); } NSqlQuery query2(db); query2.prepare("Update NoteTable set hasEncryption=:value where lid=:lid"); query2.bindValue(":lid", lid); query2.bindValue(":value", 1); query2.exec(); } query.prepare("update datastore set data=1 where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_INDEX_NEEDED); query.exec(); query.finish(); if (global.enableIndexing) { query.prepare("insert into datastore (lid, key, data) values (:lid, :key, 1)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_INDEX_NEEDED); query.bindValue(":data", true); query.exec(); } else { NoteIndexer indexer(db); indexer.indexNote(lid); } qlonglong totalsize = this->getSize(lid); NSqlQuery query3(db); query3.prepare("Update notetable set size=:size where lid=:lid"); query3.bindValue(":size", totalsize); query3.bindValue(":lid", lid); query3.exec(); db->unlock(); setDirty(lid, isDirty); } qint32 NoteTable::findNotesByTitle(QList<qint32> &lids, QString title) { NSqlQuery query(db); lids.clear(); db->lockForRead(); query.prepare("select lid from notetable where title like :title order by datecreated;"); query.bindValue(":title", title); query.exec(); while (query.next()) { lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); return lids.size(); } qint32 NoteTable::getCount() { qint32 retval = 0; NSqlQuery query(db); db->lockForRead(); query.prepare("Select count(lid) from DataStore where key=:key and lid not in (select lid from datastore where key=:key2 and data = 1)"); query.bindValue(":key", NOTE_GUID); query.bindValue(":key2", NOTE_EXPUNGED_FROM_TRASH); query.exec(); if (query.next()) retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } qint32 NoteTable::getUnindexedCount() { qint32 retval = 0; NSqlQuery query(db); db->lockForRead(); query.prepare("Select count(lid) from DataStore where key=:key and data=1 and lid not in (select lid from datastore where key=:key2 and data = 1)"); query.bindValue(":key", NOTE_INDEX_NEEDED); query.bindValue(":key2", NOTE_EXPUNGED_FROM_TRASH); query.exec(); if (query.next()) retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } qint32 NoteTable::duplicateNote(qint32 oldLid, bool keepCreatedDate) { if (oldLid <=0) return -1; ConfigStore cs(db); qint32 newLid = cs.incrementLidCounter(); db->lockForWrite(); NSqlQuery query(db); query.prepare("insert into datastore (lid, key, data) select :newLid, key, data from datastore where lid=:oldLid"); query.bindValue(":newLid", newLid); query.bindValue(":oldLid", oldLid); query.exec(); query.prepare("update datastore set data=:data where lid=:lid and key=:key"); query.bindValue(":data", QString::number(newLid)); query.bindValue(":lid", newLid); query.bindValue(":key", NOTE_GUID); query.exec(); query.prepare("update datastore set data=:data where lid=:lid and key=:key"); query.bindValue(":data", 0); query.bindValue(":lid", newLid); query.bindValue(":key", NOTE_UPDATE_SEQUENCE_NUMBER); query.exec(); Note n; get(n, newLid, false, false); NotebookTable notebookTable(db); qint32 notebookLid = notebookTable.getLid(n.notebookGuid); updateNoteList(newLid, n, true, notebookLid); setDirty(newLid, true); setIndexNeeded(newLid, true); if (!keepCreatedDate) { qint64 dt = QDateTime::currentMSecsSinceEpoch(); this->updateDate(newLid, dt, NOTE_CREATED_DATE, true); } // Update all the resources ResourceTable resTable(db); QList<qint32> lids; resTable.getResourceList(lids, oldLid); for (int i=0; i<lids.size(); i++) { qint32 newResLid = cs.incrementLidCounter(); query.prepare("insert into datastore (lid, key,data) select :newLid, key, data from datastore where lid=:oldLid"); query.bindValue(":newLid", newResLid); query.bindValue(":oldLid", lids[i]); query.exec(); query.prepare("update datastore set data=:data where lid=:lid and key=:key"); query.bindValue(":data", QString::number(newResLid)); query.bindValue(":lid", newResLid); query.bindValue(":key", RESOURCE_GUID); query.exec(); query.prepare("update datastore set data=:data where lid=:lid and key=:key"); query.bindValue(":data", 0); query.bindValue(":lid", newResLid); query.bindValue(":key", RESOURCE_UPDATE_SEQUENCE_NUMBER); query.exec(); query.prepare("update datastore set data=:data where lid=:lid and key=:key"); query.bindValue(":data", newLid); query.bindValue(":lid", newResLid); query.bindValue(":key", RESOURCE_NOTE_LID); query.exec(); QStringList filter; QDir resDir(global.fileManager.getDbaDirPath()); filter << QString::number(lids[i])+".*"; QStringList files = resDir.entryList(filter); for (int j=0; j<files.size(); j++) { QFile file(global.fileManager.getDbaDirPath()+files[j]); int pos = files[j].indexOf("."); QString type = files[j].mid(pos); file.open(QIODevice::ReadOnly); file.copy(global.fileManager.getDbaDirPath()+ QString::number(newResLid) +type); file.close(); } } query.finish(); db->unlock(); return newLid; } // Get all dirty lids qint32 NoteTable::getAllDirty(QList<qint32> &lids) { NSqlQuery query(db); db->lockForRead(); lids.clear(); query.prepare("Select lid from DataStore where key=:key and data = 1"); query.bindValue(":key", NOTE_ISDIRTY); query.exec(); while(query.next()) { lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); return lids.size(); } // Get all dirty lids qint32 NoteTable::getAllDirty(QList<qint32> &lids, qint32 linkedNotebookLid) { NSqlQuery query(db); lids.clear(); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data = 1 and lid in (select lid from datastore where key=:notebookKey and data=:notebookLid)"); query.bindValue(":key", NOTE_ISDIRTY); query.bindValue(":notebookKey", NOTE_NOTEBOOK_LID); query.bindValue(":notebookLid", linkedNotebookLid); query.exec(); while(query.next()) { lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); return lids.size(); } // Get the notebook lid for a note qint32 NoteTable::getNotebookLid(qint32 noteLid) { qint32 retval = 0; NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from DataStore where key=:key and lid=:lid"); query.bindValue(":key", NOTE_NOTEBOOK_LID); query.bindValue(":lid", noteLid); query.exec(); if (query.next()) { retval = query.value(0).toInt(); } query.finish(); db->unlock(); return retval; } // Update the USN void NoteTable::setUpdateSequenceNumber(qint32 lid, qint32 usn) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update DataStore set data=:data where key=:key and lid=:lid"); query.bindValue(":data", usn); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_UPDATE_SEQUENCE_NUMBER); query.exec(); query.finish(); db->unlock(); } void NoteTable::updateEnmediaHash(qint32 lid, QByteArray oldHash, QByteArray newHash, bool isDirty) { QString content; NSqlQuery query(db); db->lockForWrite(); query.prepare("Select data from datastore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_CONTENT); query.exec(); if (query.next()) { content = query.value(0).toString(); // Start going through & looking for the old hash int pos = content.indexOf("<en-note"); int endPos; int hashPos = -1; QString hashString = "hash=\"" +oldHash.toHex() +"\""; while (pos != -1) { endPos = content.indexOf(">", pos); // Find the matching end of the tag hashPos = content.indexOf(hashString, pos); if (hashPos < endPos && hashPos != -1) { // If we found the hash, begin the update QString startString = content.mid(0, hashPos); QString endString = content.mid(hashPos+hashString.length()); QString newContent = startString + "hash=\"" +newHash.toHex() +"\"" +endString; updateNoteContent(lid, newContent, isDirty); pos = -1; } else { pos = content.indexOf("<", pos+1); } } } query.finish(); db->unlock(); } void NoteTable::setThumbnail(qint32 lid, QString filename) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update notetable set thumbnail=:thumbnail where lid=:lid"); query.bindValue(":thumbnail", filename); query.bindValue(":lid", lid); query.exec(); query.prepare("Delete from datastore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_THUMBNAIL_NEEDED); query.exec(); query.finish(); db->unlock(); } void NoteTable::reindexAllNotes() { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from datastore where key=:indexKey"); query.bindValue(":indexKey", NOTE_INDEX_NEEDED); query.exec(); query.prepare("insert into datastore (lid, key, data) select lid, :indexKey, 1 from datastore where key=:key;"); query.bindValue(":indexKey", NOTE_INDEX_NEEDED); query.bindValue(":key", NOTE_GUID); query.exec(); query.finish(); db->unlock(); } void NoteTable::resetGeography(qint32 lid, bool isDirty) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from datastore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_LONGITUDE); query.exec(); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_LATITUDE); query.exec(); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_ALTITUDE); query.exec(); query.finish(); db->unlock(); if (isDirty) this->setDirty(lid, isDirty); } void NoteTable::setGeography(qint32 lid, double longitude, double latitude, double altitude, bool isDirty) { this->resetGeography(lid, isDirty); db->lockForWrite(); NSqlQuery query(db); query.prepare("insert into datastore (lid,key,data) values(:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_LONGITUDE); query.bindValue(":data", longitude); query.exec(); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_LATITUDE); query.bindValue(":data", latitude); query.exec(); if (altitude>0.0) { query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_ALTITUDE); query.bindValue(":data", altitude); query.exec(); } query.finish(); db->unlock(); if (isDirty) this->setDirty(lid, isDirty); } void NoteTable::setThumbnailNeeded(qint32 lid, bool value) { if (lid >=0) return; // If it is already set to this value, then we don't need to // do anything. if (isThumbnailNeeded(lid) == value) return; db->lockForWrite(); NSqlQuery query(db); query.prepare("Delete from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_THUMBNAIL_NEEDED); query.exec(); if (value) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_THUMBNAIL_NEEDED); query.bindValue(":data", value); query.exec(); } query.finish(); db->unlock(); } void NoteTable::setThumbnailNeeded(QString guid, bool value) { qint32 lid = getLid(guid); setThumbnailNeeded(lid, value); } void NoteTable::setThumbnailNeeded(string guid, bool value) { qint32 lid = getLid(guid); setThumbnailNeeded(lid, value); } bool NoteTable::isThumbnailNeeded(qint32 lid) { bool retval = false; NSqlQuery query(db); db->lockForRead(); query.prepare("select data from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_THUMBNAIL_NEEDED); query.exec(); if (query.next()) { retval = query.value(0).toBool(); } query.finish(); db->unlock(); return retval; } bool NoteTable::isThumbnailNeeded(QString guid) { qint32 lid = getLid(guid); return isThumbnailNeeded(lid); } bool NoteTable::isThumbnailNeeded(string guid) { qint32 lid = getLid(guid); return isThumbnailNeeded(lid); } qint32 NoteTable::getNextThumbnailNeeded() { qint32 retval = -1; NSqlQuery query(db); db->lockForRead(); query.prepare("select lid from datastore where data=1 and key=:key limit 1;"); query.bindValue(":key", NOTE_THUMBNAIL_NEEDED); query.exec(); if (query.next()) { retval = query.value(0).toInt(); } query.finish(); db->unlock(); return retval; } qint32 NoteTable::getThumbnailsNeededCount() { qint32 retval = 0; NSqlQuery query(db); db->lockForRead(); query.prepare("select count(lid)from datastore where data=1 and key=:key;"); query.bindValue(":key", NOTE_THUMBNAIL_NEEDED); query.exec(); if (query.next()) { retval = query.value(0).toInt(); } query.finish(); db->unlock(); return retval; } void NoteTable::setReminderCompleted(qint32 lid, bool completed) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Delete from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_DONE_TIME); query.exec(); if (completed) { QDateTime dt = QDateTime::currentDateTime(); query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :dt)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_DONE_TIME); query.bindValue(":dt", dt.toMSecsSinceEpoch()); query.exec(); query.prepare("Update NoteTable set reminderDoneTime=:dt where lid=:lid"); query.bindValue(":dt", dt.toMSecsSinceEpoch()); query.bindValue(":lid", lid); query.exec(); } query.finish(); db->unlock(); } void NoteTable::removeReminder(qint32 lid) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Delete from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_DONE_TIME); query.exec(); query.prepare("Delete from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_ORDER); query.exec(); query.prepare("Delete from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ATTRIBUTE_REMINDER_TIME); query.exec(); query.prepare("Update NoteTable set reminderTime=0 where lid=:lid"); query.bindValue(":lid", lid); query.exec(); query.finish(); query.prepare("Update NoteTable set reminderDoneTime=0 where lid=:lid"); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } void NoteTable::getAllReminders(QList< QPair<qint32,qlonglong>* > *reminders) { NSqlQuery query(db); db->lockForRead(); query.prepare("select lid,data from datastore where key=:key1 and lid not in (select lid from datastore where key=:key2)"); query.bindValue(":key1", NOTE_ATTRIBUTE_REMINDER_TIME); query.bindValue(":key2", NOTE_ATTRIBUTE_REMINDER_DONE_TIME); query.exec(); while (query.next()) { qint32 lid = query.value(0).toInt(); qlonglong dt = query.value(1).toLongLong(); QPair<qint32, qlonglong> *p = new QPair<qint32, qlonglong>(); p->first = lid; p->second = dt; reminders->append(p); } query.finish(); db->unlock(); } // Return if a note is dirty given its lid bool NoteTable::isPinned(qint32 lid) { bool retval = false; NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ISPINNED); query.exec(); if (query.next()) retval = query.value(0).toBool(); query.finish(); db->unlock(); return retval; } // Determine if a note is pinned given a guid bool NoteTable::isPinned(QString guid) { qint32 lid = getLid(guid); return isPinned(lid); } // Determine if a note is pinned a guid bool NoteTable::isPinned(string guid) { QString g(QString::fromStdString(guid)); return isPinned(g); } // Return if a note is dirty given its lid void NoteTable::pinNote(qint32 lid, bool value) { if (value && isPinned(lid)) return; NSqlQuery query(db); db->lockForWrite(); query.prepare("Delete from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ISPINNED); query.exec(); if (!value) { query.prepare("Update NoteTable set isPinned=0 where lid=:lid"); query.bindValue(":lid", lid); query.exec(); QLOG_DEBUG() << query.lastError(); query.finish(); return; } query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, 1)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_ISPINNED); query.exec(); query.prepare("Update NoteTable set isPinned=1 where lid=:lid"); query.bindValue(":lid", lid); query.exec(); query.lastError(); query.finish(); db->unlock(); //setDirty(lid, true, false); } // Determine if a note is pinned given a guid void NoteTable::pinNote(QString guid, bool value) { qint32 lid = getLid(guid); pinNote(lid, value); } // Determine if a note is pinned a guid void NoteTable::pinNote(string guid, bool value) { QString g(QString::fromStdString(guid)); pinNote(g, value); } void NoteTable::getAllPinned(QList< QPair< qint32, QString > > &lids) { NSqlQuery query(db); lids.clear(); db->lockForRead(); query.prepare("Select lid, data from DataStore where key=:titlekey and lid in (select lid from datastore where key=:key and data=1) order by data"); query.bindValue(":titlekey", NOTE_TITLE); query.bindValue(":key", NOTE_ISPINNED); query.exec(); while (query.next()) { QPair<qint32, QString> pair; pair.first = query.value(0).toInt(); pair.second = query.value(1).toString(); lids.append(pair); } query.finish(); db->unlock(); return; } void NoteTable::getRecentlyUpdated(QList< QPair< qint32, QString > > &lids) { NSqlQuery query(db); lids.clear(); db->lockForRead(); query.prepare("select lid, title from notetable order by dateupdated desc limit 10"); query.exec(); while (query.next()) { QPair<qint32, QString> pair; pair.first = query.value(0).toInt(); pair.second = query.value(1).toString(); lids.append(pair); } query.finish(); db->unlock(); return; } // Get all lids void NoteTable::getAll(QList<qint32> &lids) { NSqlQuery query(db); lids.empty(); db->lockForRead(); query.prepare("Select lid from DataStore where key=:guid"); query.bindValue(":guid", NOTE_GUID); query.exec(); while(query.next()) { lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); } // Get all lids void NoteTable::setTitleColor(qint32 lid, QString color) { NSqlQuery query(db); QString c = color; if (c == "white") c = ""; db->lockForWrite(); query.prepare("Update NoteTable set titleColor=:color where lid=:lid"); query.bindValue(":color", c); query.bindValue(":lid", lid); query.exec(); query.prepare("Delete from DataStore where key=:key and lid=:lid"); query.bindValue(":key", NOTE_TITLE_COLOR); query.bindValue(":lid", lid); query.exec(); if (c == "") return; query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :value)"); query.bindValue(":lid", lid); query.bindValue(":key", NOTE_TITLE_COLOR); query.bindValue(":value", c); query.exec(); query.finish(); db->unlock(); } qlonglong NoteTable::getSize(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("select data from datastore where key=:key and lid=:lid"); query.bindValue(":key", NOTE_CONTENT_LENGTH); query.bindValue(":lid", lid); query.exec(); qlonglong returnValue = 0; if (query.next()) { returnValue = query.value(0).toLongLong(); } query.prepare("Select sum(data) from DataStore where key=:key and lid in (select lid from datastore where key=:key2 and data=:lid)"); query.bindValue(":key", RESOURCE_DATA_SIZE); query.bindValue(":key2", RESOURCE_NOTE_LID); query.bindValue(":data", lid); query.exec(); while (query.next()) { returnValue = returnValue+query.value(0).toLongLong(); } return returnValue; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/notetable.h����������������������������������������������������������������������0000664�0000000�0000000�00000031675�13156041044�0016220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ /**************************************************************************************/ /* This class is used to read & write note related information to the database */ /**************************************************************************************/ #ifndef NOTETABLE_H #define NOTETABLE_H #include <iostream> #include <string> #include <stdio.h> #include <QSqlTableModel> #include <QtSql> #include <QString> #include "sql/databaseconnection.h" #include "qevercloud/include/QEverCloud.h" using namespace qevercloud; #define NOTE_GUID 5000 #define NOTE_TITLE 5001 #define NOTE_CONTENT 5002 #define NOTE_UPDATE_SEQUENCE_NUMBER 5003 #define NOTE_ISDIRTY 5004 #define NOTE_CONTENT_HASH 5005 #define NOTE_CONTENT_LENGTH 5006 #define NOTE_CREATED_DATE 5007 #define NOTE_UPDATED_DATE 5008 #define NOTE_DELETED_DATE 5009 #define NOTE_ACTIVE 5010 #define NOTE_NOTEBOOK_LID 5011 #define NOTE_TAG_LID 5012 #define NOTE_ATTRIBUTE_SUBJECT_DATE 5014 #define NOTE_ATTRIBUTE_LATITUDE 5015 #define NOTE_ATTRIBUTE_LONGITUDE 5016 #define NOTE_ATTRIBUTE_ALTITUDE 5017 #define NOTE_ATTRIBUTE_AUTHOR 5018 #define NOTE_ATTRIBUTE_SOURCE 5019 #define NOTE_ATTRIBUTE_SOURCE_URL 5020 #define NOTE_ATTRIBUTE_SOURCE_APPLICATION 5021 #define NOTE_HAS_ENCRYPT 5022 #define NOTE_HAS_TODO_COMPLETED 5023 #define NOTE_HAS_TODO_UNCOMPLETED 5024 #define NOTE_HAS_IMAGE 5025 #define NOTE_HAS_AUDIO 5026 #define NOTE_HAS_INK 5026 #define NOTE_HAS_PDF 5027 #define NOTE_HAS_ATTACHMENT 5028 #define NOTE_ATTRIBUTE_SHARE_DATE 5029 #define NOTE_ATTRIBUTE_PLACE_NAME 5030 #define NOTE_ATTRIBUTE_CONTENT_CLASS 5031 #define NOTE_ATTRIBUTE_REMINDER_ORDER 5032 #define NOTE_ATTRIBUTE_REMINDER_TIME 5033 #define NOTE_ATTRIBUTE_REMINDER_DONE_TIME 5034 #define NOTE_DELETE_PENDING_GUID 5500 #define NOTE_DELETE_PENDING_NOTEBOOK 5501 #define NOTE_TITLE_COLOR 5995 #define NOTE_ISPINNED 5996 #define NOTE_THUMBNAIL_NEEDED 5997 #define NOTE_EXPUNGED_FROM_TRASH 5998 #define NOTE_INDEX_NEEDED 5999 using namespace std; class NoteTable { private: DatabaseConnection *db; public: // DB Read Functions NoteTable(DatabaseConnection *db); // Constructor qint32 getLid(QString guid); // given a guid, return the lid qint32 getLid(string guid); // Given a guid, return the lid QString getGuid(int lid); // given a lid, get the guid bool get(Note ¬e, qint32 lid, bool loadResources, bool loadBinary); // Get a note given a lid bool get(Note ¬e, QString guid, bool loadResources, bool loadBinary); // get a note given a guid bool get(Note ¬e, string guid,bool loadResources, bool loadBinary); // get a note given a guid bool isDirty(qint32 lid); // Check if a note is dirty bool isDirty(QString guid); // Check if a note is dirty bool isDirty(string guid); // Check if a note is dirty bool exists(qint32 lid); // Does this note exist? bool exists(QString guid); // Does this note exist? bool exists(string guid); // Does this note exist? bool isPinned(string guid); // is the note pinned? bool isPinned(QString guid); // is the note pinned? bool isPinned(qint32 lid); // is the note pinned? qint32 findNotesByTag(QList<qint32> &values, QString tags); // Find all notes which have a given tag qint32 findNotesByTag(QList<qint32> &values, string tags); // Find all notes which have a given tag. qint32 findNotesByTag(QList<qint32> &values, qint32 tagLid); // Find all notes which have a given tag qint32 findNotesByTitle(QList<qint32> &lids, QString title); // Find a note by its title qint32 getNotesWithTag(QList<qint32> &retval, QString tag); // Find all notes for a specific tag; qint32 getIndexNeeded(QList<qint32> &lids); // Get a list of all notes needing indexing qint32 findNotesByNotebook(QList<qint32> ¬es, QString guid); // Find all notes for a given notebook qint32 findNotesByNotebook(QList<qint32> ¬es, string guid); // Find all notes for a given notebook qint32 findNotesByNotebook(QList<qint32> ¬es, qint32 lid); // Find all notes for a given notebook qint32 getCount(); // count of all notes qint32 getUnindexedCount(); // count of unindexed notes qint32 getAllDeleted(QList<qint32> &lids); // Get all deleted notes qint32 getAllDirty(QList<qint32> &lids); // get all dirty notes qint32 getAllDirty(QList<qint32> &lids, qint32 notebookLid); // Get all dirty for a particular (linked) notebook qint32 getNotebookLid(qint32 noteLid); // Get the notebook for a note bool isDeleted(qint32 lid); // Is this note deleted? bool hasTag(qint32 noteLid, qint32 tagLid); // Does this note have the specified tag? QString getNoteListTags(qint32 lid); // Get the string of tags from the notetable list bool isThumbnailNeeded(qint32 lid); // see if a thumbnail is needed bool isThumbnailNeeded(QString guid); // see if a thumbnail is needed bool isThumbnailNeeded(string guid); // see if a thumbnail is needed bool isIndexNeeded(qint32 lid); // see if an index is needed qint32 getNextThumbnailNeeded(); // get any note that needs a thumbnail void getAllReminders(QList< QPair<qint32, qlonglong>* > *reminders); // Get all notes with un-completed reminders qint32 getThumbnailsNeededCount(); // Get a count of all notes in need of a thumbnail void getAll(QList<qint32> &lids); // Get all note lids void getAllPinned(QList<QPair<qint32, QString> > &lids); // Get all notes that are pinned void getRecentlyUpdated(QList< QPair< qint32, QString > > &lids); // Get any notes recently updated (used for the icon in the toolbar). // DB Write Functions void setReminderCompleted(qint32 lid, bool completed); // Set a note reminder as completed or clear it void removeReminder(qint32 lid); // Clear any existing reminder qint32 addStub(QString noteGuid); // Add a stub. Used if a resource appears before the owning note void setTitleColor(qint32 lid, QString color); // Set the color of the title in the note list void reindexAllNotes(); // Reindex all notes void resetGeography(qint32 lid, bool isDirty); // clear geography of note void setGeography(qint32 lid, double longitude, double latitude, double altitude, bool isDirty); // Set the note location void setThumbnailNeeded(qint32 lid, bool value); // Set if a thumbnail is needed? void setThumbnailNeeded(QString guid, bool value); // Set if a thumbail is needed void setThumbnailNeeded(string guid, bool value); // see if a thumbnail is needed void setThumbnail(qint32 lid, QString filename); // set the file containing the thumbnail qint32 duplicateNote(qint32 oldLid, bool keepCreatedDate=false); // Duplicate an existing note void setUpdateSequenceNumber(qint32 lid, qint32 usn); // set the update sequence number void updateNoteContent(qint32 lid, QString content, bool isDirty=true); // Update the content of a note void updateEnmediaHash(qint32 lid, QByteArray oldHash, QByteArray newHash, bool isDirty=true); // Update the hash value for a resource in a notte bool updateNotebookGuid(QString oldGuid, QString newGuid, QString name); // Update a notebook's name/guid bool updateNoteList(qint32 lid, const Note &t, bool isDirty, qint32 account); // Update the user viewing list bool updateNotebookName(qint32 lid, QString name); // Update a notebook's name in the user listing void updateNotebook(qint32 noteLid, qint32 notebookLid); // Set the current note's notebook void setDirty(qint32 lid, bool dirty, bool setDateUpdated=true); // Set if a note needs a sync void updateNotebook(qint32 noteLid, qint32 notebookLid, bool setAsDirty=false); // Update the notebook for a note void updateUrl(qint32 lid, QString text, bool dirty); // Update a URL for a note void updateTitle(qint32 noteLid, QString title, bool setAsDirty); // Update a title for a note void updateDate(qint32 lid, Timestamp ts, qint32 key, bool isDirty); // Update a date for a note void updateAuthor(qint32 lid, QString value, bool isDirty); // Update a note's author void removeTag(qint32 noteLid, qint32 tag, bool isDirty); // Remove a tag from a note void addTag(qint32 lid, qint32 tag, bool isDirty); // Add a tag to a note void rebuildNoteListTags(qint32 lid); // Update the note's tags in the display table void deleteNote(qint32 lid, bool isDirty); // mark a note for deletion void restoreNote(qint32 lid, bool isDirty); // unmark a note for deletion void expunge(qint32 lid); // expunge a note permanently void expunge(QString guid); // expunge a note permanently void expunge(string guid); // expunge a note permanently void pinNote(string guid, bool value); // pin the current note void pinNote(QString guid, bool value); // pin the current note void pinNote(qint32 lid, bool value); // pin the current note void updateGuid(qint32 lid, Guid &guid); // Update a note's guid void sync(Note ¬e, qint32 account=0); // Sync a note with a new record void sync(qint32 lid, const Note ¬e, qint32 account=0); // Sync a note with a new record qint32 add(qint32 lid, const Note &t, bool isDirty, qint32 account=0); // Add a new note void setIndexNeeded(qint32 lid, bool indexNeeded); // flag if a note needs reindexing void updateNoteListTags(qint32 noteLid, QString tags); // Update the tag names in the note list void updateNoteListNotebooks(QString guid, QString name); // Update the notebook name in the note list void addToDeleteQueue(qint32 lid, Note n); // Add to the notes that need to be deleted from Evernote void getAllDeleteQueue(QStringList &guids, QString notebookGuid=""); // Get the list of notes we need to let Evernote to delete void expungeFromDeleteQueue(qint32 lid); // Expunge from the delete pending queue void expungeFromDeleteQueue(QString guid); // Expunge from the delete pending queue qlonglong getSize(qint32 lid); // get the total size of the note }; #endif // NOTETABLE_H �������������������������������������������������������������������nixnote2-2.0.2/sql/nsqlquery.cpp��������������������������������������������������������������������0000664�0000000�0000000�00000014235�13156041044�0016632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "nsqlquery.h" #include <QSqlQuery> #include <QSqlError> #include "global.h" // Windows Check #ifndef _WIN32 #include <execinfo.h> #endif // End windows check #include <signal.h> #include <stdio.h> #include <stdlib.h> // The following include is needed for demangling names on a backtrace #include <cxxabi.h> extern Global global; // Constructor NSqlQuery::NSqlQuery(DatabaseConnection *db) : QSqlQuery(db->conn) { this->db = db; DEBUG_TRIGGER = 100; INDEX_PAUSE_TRIGGER = 10; } // Destructor NSqlQuery::~NSqlQuery() { this->finish(); // if (db->dbLocked) { // QLOG_DEBUG() << "*** Warning: NSqlQuery Terminating with lock active"; // global.stackDump(); // } } QString getLastExecutedQuery(const QSqlQuery& query) { QString str = query.lastQuery(); QMapIterator<QString, QVariant> it(query.boundValues()); while (it.hasNext()) { it.next(); str.replace(it.key(),it.value().toString()); } return str; } // Generic exec(). A prepare should have been done already bool NSqlQuery::exec() { bool indexPauseSave; bool indexRestoreNeeded = false; //QLOG_DEBUG() << "Sending SQL:" << getLastExecutedQuery(*this); for (int i=1; i<1000; i++) { bool rc = QSqlQuery::exec(); if (rc) { if (indexRestoreNeeded) global.indexRunner->pauseIndexing = indexPauseSave; return true; } if (lastError().number() != DATABASE_LOCKED) return false; if (i>DEBUG_TRIGGER) { QLOG_ERROR() << "DB Locked: Retry #" << i; } if (i == INDEX_PAUSE_TRIGGER && this->db->getConnectionName() != "indexrunner") { QLOG_DEBUG() << "Pausing indexrunner due to db lock"; indexPauseSave = global.indexRunner->pauseIndexing; indexRestoreNeeded = true; global.indexRunner->pauseIndexing=true; } // Print stack trace to see what is happening if (i==DEBUG_TRIGGER) { QLOG_DEBUG() << "Dumping stack due to DB lock limit of " << DEBUG_TRIGGER << " being reached."; global.stackDump(); } QTime dieTime= QTime::currentTime().addSecs(1); while( QTime::currentTime() < dieTime ) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } if (indexRestoreNeeded) global.indexRunner->pauseIndexing = indexPauseSave; return false; } // Execute a SQL statement bool NSqlQuery::exec(const QString &query) { bool indexPauseSave; bool indexRestoreNeeded = false; //QLOG_DEBUG() << "Sending SQL:" << query; for (int i=1; i<1000; i++) { bool rc = QSqlQuery::exec(query); if (rc) { if (indexRestoreNeeded) global.indexRunner->pauseIndexing = indexPauseSave; return true; } if (lastError().number() != DATABASE_LOCKED) return false; if (i == INDEX_PAUSE_TRIGGER && this->db->getConnectionName() != "indexrunner") { QLOG_DEBUG() << "Pausing indexrunner due to db lock"; indexPauseSave = global.indexRunner->pauseIndexing; indexRestoreNeeded = true; global.indexRunner->pauseIndexing=true; } if (i>DEBUG_TRIGGER) { QLOG_ERROR() << "DB Locked: Retry #" << i; } // Print stack dump to see what is happening if (i==DEBUG_TRIGGER) { QLOG_DEBUG() << "Dumping stack due to DB lock limit of " << DEBUG_TRIGGER << " being reached."; global.stackDump(); } QTime dieTime= QTime::currentTime().addSecs(1); while( QTime::currentTime() < dieTime ) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } if (indexRestoreNeeded) global.indexRunner->pauseIndexing = indexPauseSave; return false; } // Execute a SQL statement bool NSqlQuery::exec(const string query) { QString q; q = QString::fromStdString(query); return this->exec(q); } // Execute a SQL statement bool NSqlQuery::exec(const char *query) { QString q; q = QString::fromStdString(query); return this->exec(q); } #if QT_VERSION < 0x050000 // Override bindValue for SQL fix void NSqlQuery::bindValue(const QString & placeholder, const QVariant & val, QSql::ParamType paramType) { if (val.type() == QVariant::Bool) { if (val.toBool() == true) QSqlQuery::bindValue(placeholder, 1, paramType); else QSqlQuery::bindValue(placeholder, 0, paramType); return; } QSqlQuery::bindValue(placeholder, val, paramType); } void NSqlQuery::bindValue(int pos, const QVariant &val, QSql::ParamType paramType) { if (val.type() == QVariant::Bool) { if (val.toBool() == true) QSqlQuery::bindValue(pos, 1, paramType); else QSqlQuery::bindValue(pos, 0, paramType); return; } QSqlQuery::bindValue(pos, val, paramType); } void NSqlQuery::addBindValue(const QVariant &val, QSql::ParamType paramType) { if (val.type() == QVariant::Bool) { if (val.toBool() == true) QSqlQuery::addBindValue(1, paramType); else QSqlQuery::addBindValue(0, paramType); } QSqlQuery::addBindValue(val, paramType); } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/nsqlquery.h����������������������������������������������������������������������0000664�0000000�0000000�00000004275�13156041044�0016302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ //***************************************** // This is a version of QSqlQuery. The // main reason to have this is to handle // the database being locked and to issue // a retry if it fails. //***************************************** #ifndef NSQLQUERY_H #define NSQLQUERY_H #include <QtSql> #include "sql/databaseconnection.h" using namespace std; #define DATABASE_LOCKED 5 class NSqlQuery : public QSqlQuery { private: DatabaseConnection *db; int DEBUG_TRIGGER; int INDEX_PAUSE_TRIGGER; public: explicit NSqlQuery(DatabaseConnection *db); // Constructor ~NSqlQuery(); // Destructor bool exec(); // Execute SQL statement bool exec(const QString &query); // Execute SQL statement bool exec(const string query); // Execute SQL statement bool exec(const char *query); // Execute SQL statement #if QT_VERSION < 0x050000 // Overrides for SQLite fix in Qt 4.8 void bindValue(const QString & placeholder, const QVariant & val, QSql::ParamType paramType = QSql::In); void bindValue(int pos, const QVariant & val, QSql::ParamType paramType = QSql::In); void addBindValue(const QVariant & val, QSql::ParamType paramType = QSql::In); #endif }; #endif // NSQLQUERY_H �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/resourcetable.cpp����������������������������������������������������������������0000664�0000000�0000000�00000107406�13156041044�0017431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "resourcetable.h" #include "configstore.h" #include "notetable.h" #include "utilities/mimereference.h" #include "sql/nsqlquery.h" #include "utilities/noteindexer.h" #include <QSqlTableModel> #include <iostream> #include <fstream> using namespace std; extern Global global; // Default constructor ResourceTable::ResourceTable(DatabaseConnection *db) { this->db = db; } // Given a resource's lid, we give it a new guid. This can happen // the first time a record is synchronized void ResourceTable::updateGuid(qint32 lid, Guid &guid) { QLOG_TRACE() << "Entering ResourceTable::updateGuid()"; db->lockForWrite(); NSqlQuery query(db); query.prepare("Update DataStore set data=:data where key=:key and lid=:lid"); query.bindValue(":data", guid); query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_GUID); query.exec(); query.finish(); db->unlock(); QLOG_TRACE() << "Leaving ResourceTable::updateGuid()"; } // Synchronize a new resource with what is in the database. We basically // just delete the old one & give it a new entry void ResourceTable::sync(Resource &resource) { QLOG_TRACE() << "Leaving ResourceTable::sync()"; sync(0, resource); QLOG_TRACE() << "Leaving ResourceTable::sync()"; } // Synchronize a new resource with what is in the database. We basically // just delete the old one & give it a new entry void ResourceTable::sync(qint32 lid, Resource &resource) { QLOG_TRACE() << "Leaving ResourceTable::sync()"; if (lid > 0) { expunge(lid); NSqlQuery query(db); // Delete the old record db->lockForWrite(); query.prepare("Delete from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } else { ConfigStore cs(db); lid = cs.incrementLidCounter(); } add(lid, resource, false); QLOG_TRACE() << "Leaving ResourceTable::sync()"; } // Given a resource's GUID, we return the LID qint32 ResourceTable::getLid(QString noteGuid, QString guid) { NSqlQuery query(db); NoteTable n(db); db->lockForRead(); qint32 noteLid = n.getLid(noteGuid); query.prepare("Select a.lid from DataStore a where a.data=:data and a.key=:key and a.lid = (select distinct b.lid from DataStore b where b.key=:key2 and b.data=:noteLid)"); query.bindValue(":data", guid); query.bindValue(":key", RESOURCE_GUID); query.bindValue(":key2", RESOURCE_NOTE_LID); query.bindValue(":noteLid", noteLid); query.exec(); qint32 retval = 0; if (query.next()) retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } // Given a resource's GUID, we return the LID qint32 ResourceTable::getLid(string noteGuid, string guid) { QString nGuid(QString::fromStdString(noteGuid)); QString rGuid(QString::fromStdString(guid)); return getLid(nGuid, rGuid); } // Get the lid for a resource guid qint32 ResourceTable::getLid(string resourceGuid) { return this->getLid(QString::fromStdString(resourceGuid)); } // Get the lid for a given resource's guid qint32 ResourceTable::getLid(QString resourceGuid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:data"); query.bindValue(":key", RESOURCE_GUID); query.bindValue(":data", resourceGuid); query.exec(); qint32 retval = 0; if (query.next()) retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } // Get the guid for a given resource lid QString ResourceTable::getGuid(int lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from DataStore where key=:key and lid=:lid"); query.bindValue(":key", RESOURCE_GUID); query.bindValue(":lid", lid); query.exec(); QString retval = ""; if (query.next()) retval = query.value(0).toString(); query.finish(); db->unlock(); return retval; } // Return a resource structure given the LID bool ResourceTable::get(Resource &resource, qint32 lid, bool withBinary) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select key, data from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); if (query.size() == 0) { db->unlock(); return false; } while (query.next()) { mapResource(query, resource); } query.finish(); db->unlock(); // Now read the binary data from the disk if (withBinary) { QString mimetype = resource.mime; MimeReference ref; QString filename; ResourceAttributes attributes; if (resource.attributes.isSet()) attributes = resource.attributes; if (attributes.fileName.isSet()) filename = attributes.fileName; QString fileExt = ref.getExtensionFromMime(mimetype, filename); QFile tfile(global.fileManager.getDbDirPath("/dba/"+QString::number(lid)) +fileExt ); tfile.open(QIODevice::ReadOnly); QByteArray b = tfile.readAll(); Data d; if (resource.data.isSet()) d = resource.data; d.body = b; resource.data = d; tfile.close(); } return true; } // Save a resource's map data. void ResourceTable::mapResource(NSqlQuery &query, Resource &resource) { NoteTable ntable(db); Data d, rd, ad; ResourceAttributes attributes; if (resource.data.isSet()) d = resource.data; if (resource.recognition.isSet()) rd = resource.recognition; if (resource.alternateData.isSet()) ad = resource.alternateData; if (resource.attributes.isSet()) attributes = resource.attributes; qint32 key = query.value(0).toInt(); switch (key) { case (RESOURCE_GUID): resource.guid = query.value(1).toString(); break; case (RESOURCE_NOTE_LID): resource.noteGuid = ntable.getGuid(query.value(1).toInt()); break; case (RESOURCE_DATA_BODY): break; case (RESOURCE_DATA_HASH): d.bodyHash = QByteArray::fromHex(query.value(1).toByteArray()); resource.data = d; break; case (RESOURCE_DATA_SIZE): d.size = query.value(1).toInt(); resource.data = d; break; case (RESOURCE_MIME): resource.mime = query.value(1).toString(); break; case (RESOURCE_ACTIVE): resource.active = query.value(1).toBool(); break; case (RESOURCE_HEIGHT): resource.height = query.value(1).toString().toInt(); break; case (RESOURCE_WIDTH): resource.width = query.value(1).toString().toInt(); break; case (RESOURCE_DURATION): resource.duration = query.value(1).toString().toInt(); break; case (RESOURCE_RECOGNITION_BODY): rd.body = query.value(1).toByteArray(); resource.recognition = rd; break; case (RESOURCE_RECOGNITION_HASH): rd.bodyHash = query.value(1).toByteArray(); resource.recognition = rd; break; case (RESOURCE_RECOGNITION_SIZE): rd.size = query.value(1).toInt(); resource.recognition = rd; break; case (RESOURCE_UPDATE_SEQUENCE_NUMBER): resource.duration = query.value(1).toString().toInt(); break; case (RESOURCE_ALTERNATE_BODY): ad.body = query.value(1).toByteArray(); resource.alternateData = ad; break; case (RESOURCE_ALTERNATE_HASH): ad.bodyHash = query.value(1).toByteArray(); resource.alternateData = ad; break; case (RESOURCE_ALTERNATE_SIZE): ad.size = query.value(1).toInt(); resource.alternateData = ad; break; case (RESOURCE_SOURCE_URL): attributes.sourceURL = query.value(1).toString(); resource.attributes = attributes; break; case (RESOURCE_CAMERA_MAKE): attributes.cameraMake = query.value(1).toString(); resource.attributes = attributes; break; case (RESOURCE_CAMERA_MODEL): attributes.cameraModel = query.value(1).toString(); resource.attributes = attributes; break; case (RESOURCE_ALTITUDE): attributes.altitude = query.value(1).toString().toDouble(); resource.attributes = attributes; break; case (RESOURCE_LONGITUDE): attributes.longitude = query.value(1).toString().toDouble(); resource.attributes = attributes; break; case (RESOURCE_LATITUDE): attributes.latitude = query.value(1).toString().toDouble(); resource.attributes = attributes; break; case (RESOURCE_RECO_TYPE): attributes.recoType = query.value(1).toString(); resource.attributes = attributes; break; case (RESOURCE_ATTACHMENT): attributes.attachment = query.value(1).toBool(); resource.attributes = attributes; break; case (RESOURCE_FILENAME): attributes.fileName = query.value(1).toString(); resource.attributes = attributes; break; case (RESOURCE_CLIENT_WILL_INDEX): attributes.clientWillIndex = query.value(1).toBool(); resource.attributes = attributes; break; case (RESOURCE_TIMESTAMP): attributes.timestamp = query.value(1).toDouble(); resource.attributes = attributes; break; } } // Return a resource given the GUID bool ResourceTable::get(Resource &resource, QString noteGuid, QString guid, bool withBinary) { qint32 lid = getLid(noteGuid, guid); return get(resource, lid, withBinary); } // Return a resource given the GUID as a std::string bool ResourceTable::get(Resource &resource, string noteGuid, string guid, bool withBinary) { qint32 lid = getLid(noteGuid, guid); return get(resource, lid, withBinary); } // Return if a resource is dirty given its lid bool ResourceTable::isDirty(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_ISDIRTY); query.exec(); bool retval = false; if (query.next()) retval = query.value(0).toBool(); query.finish(); db->unlock(); return retval; } // Determine if a resource is dirty given a guid bool ResourceTable::isDirty(QString noteGuid, QString guid) { qint32 lid = getLid(noteGuid, guid); return isDirty(lid); } // Determine if a resource is dirty given a guid bool ResourceTable::isDirty(string noteGuid, string guid) { QString g(QString::fromStdString(guid)); QString ng(QString::fromStdString(noteGuid)); return isDirty(ng, g); } // Does this resource exist? bool ResourceTable::exists(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_GUID); query.exec(); bool retval = false; if (query.next()) retval = true; query.finish(); db->unlock(); return retval; } // Determine if a resource exists given a guid bool ResourceTable::exists(QString noteGuid, QString guid) { qint32 lid = getLid(noteGuid, guid); return exists(lid); } // Determine if a resource exists given a guid bool ResourceTable::exists(string noteGuid, string guid) { qint32 lid = getLid(noteGuid, guid); return exists(lid); } // Add a resource to the database qint32 ResourceTable::add(qint32 l, Resource &t, bool isDirty, int noteLid) { ConfigStore cs(db); qint32 lid = l; if (lid <= 0) lid = cs.incrementLidCounter(); else expunge(lid); NSqlQuery query(db); db->lockForWrite(); query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); if (t.guid.isSet()) { QString guid = t.guid; query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_GUID); query.bindValue(":data", guid); query.exec(); } query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_INDEX_NEEDED); query.bindValue(":data", true); query.exec(); if (noteLid <=0) { NoteTable noteTable(db); noteLid = noteTable.getLid(t.noteGuid); if (noteLid <=0) { noteLid = noteTable.addStub(t.noteGuid); } } query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_NOTE_LID); query.bindValue(":data", noteLid); query.exec(); query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_ISDIRTY); query.bindValue(":data", isDirty); query.exec(); if (t.data.isSet()) { Data d = t.data; if (d.size.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_DATA_SIZE); qint32 size = d.size; query.bindValue(":data", size); query.exec(); } if (d.bodyHash.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_DATA_HASH); QByteArray b; b.append(d.bodyHash); query.bindValue(":data", b.toHex()); query.exec(); } if (d.body.isSet()) { QString mimetype = t.mime; QString filename; MimeReference ref; ResourceAttributes attributes; if (t.attributes.isSet()) attributes = t.attributes; if (attributes.fileName.isSet()) filename = attributes.fileName; QString fileExt = ref.getExtensionFromMime(mimetype, filename); QFile tfile(global.fileManager.getDbDirPath("/dba/"+QString::number(lid)) +fileExt ); tfile.open(QIODevice::WriteOnly); if (d.size > 0) tfile.write(d.body); tfile.close(); } } if (t.mime.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_MIME); QString mime = t.mime; query.bindValue(":data", mime); query.exec(); } if (t.width.isSet()) { qint16 width = t.width; query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_WIDTH); query.bindValue(":data", width); query.exec(); } if (t.height.isSet()) { qint16 height = t.height; query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_HEIGHT); query.bindValue(":data", height); query.exec(); } if (t.duration.isSet()) { qint16 duration = t.duration; query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_DURATION); query.bindValue(":data", duration); query.exec(); } if (t.active.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_ACTIVE); bool active = t.active; query.bindValue(":data", active); query.exec(); } if (t.recognition.isSet()) { Data r = t.recognition; if (r.size.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_RECOGNITION_SIZE); qint32 size = r.size; query.bindValue(":data", size); query.exec(); } if (r.bodyHash.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_RECOGNITION_HASH); QByteArray b; b.append(r.bodyHash); query.bindValue(":data", b.toHex()); query.exec(); } if (r.body.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_RECOGNITION_BODY); QByteArray body = r.body; query.bindValue(":data", body); query.exec(); } } if (t.updateSequenceNum.isSet()) { qint32 usn =t.updateSequenceNum; query.bindValue(":key", RESOURCE_UPDATE_SEQUENCE_NUMBER); query.bindValue(":data", usn); query.exec(); } if (t.alternateData.isSet()) { Data ad = t.alternateData; if (ad.size.isSet()) { qint32 size = ad.size; query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_ALTERNATE_SIZE); query.bindValue(":data", size); query.exec(); } if (ad.bodyHash.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_ALTERNATE_HASH); QByteArray b; b.append(ad.bodyHash); query.bindValue(":data", b.toHex()); query.exec(); } if (ad.body.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_ALTERNATE_BODY); QByteArray body = ad.body; query.bindValue(":data", body); query.exec(); } } if (t.attributes.isSet()) { ResourceAttributes ra = t.attributes; if (ra.sourceURL.isSet()) { query.bindValue(":lid", lid); QString url = ra.sourceURL; query.bindValue(":key", RESOURCE_SOURCE_URL); query.bindValue(":data", url); query.exec(); } if (ra.timestamp.isSet()) { qlonglong ts = ra.timestamp; query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_TIMESTAMP); query.bindValue(":data", ts); query.exec(); } if (ra.latitude.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_LATITUDE); double lat = ra.latitude; query.bindValue(":data", lat); query.exec(); } if (ra.longitude.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_LONGITUDE); double lon = ra.longitude; query.bindValue(":data", lon); query.exec(); } if (ra.altitude.isSet()) { double alt = ra.altitude; query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_ALTITUDE); query.bindValue(":data", alt); query.exec(); } if (ra.cameraMake.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_CAMERA_MAKE); QString cameramake = ra.cameraMake; query.bindValue(":data", cameramake); query.exec(); } if (ra.cameraModel.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_CAMERA_MODEL); QString model = ra.cameraModel; query.bindValue(":data", model); query.exec(); } if (ra.clientWillIndex.isSet()) { bool cwi = ra.clientWillIndex; query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_CLIENT_WILL_INDEX); query.bindValue(":data", cwi); query.exec(); } if (ra.recoType.isSet()) { QString reco = ra.recoType; query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_RECO_TYPE); query.bindValue(":data", reco); query.exec(); } if (ra.fileName.isSet()) { QString filename = ra.fileName; query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_FILENAME); query.bindValue(":data", filename); query.exec(); } if (ra.attachment.isSet()) { bool attachment = ra.attachment; query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_ATTACHMENT); query.bindValue(":data", attachment); query.exec(); } } query.finish(); db->unlock(); NoteIndexer indexer(db); indexer.indexResource(lid); return lid; } // Get the recognition data for a resource bool ResourceTable::getResourceRecognition(Resource &resource, qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select key, data from DataStore where lid=:lid and (key=:body or key=:size or key=:hash)"); query.bindValue(":lid", lid); query.bindValue(":body", RESOURCE_RECOGNITION_BODY); query.bindValue(":size", RESOURCE_RECOGNITION_SIZE); query.bindValue(":hash", RESOURCE_RECOGNITION_HASH); query.exec(); if (query.size() == 0) return false; Data d; if (resource.recognition.isSet()) d = resource.recognition; while (query.next()) { if (query.value(0).toInt() == RESOURCE_RECOGNITION_HASH) { d.bodyHash = query.value(1).toByteArray(); } if (query.value(0).toInt() == RESOURCE_RECOGNITION_SIZE) { d.size = query.value(1).toLongLong(); } if (query.value(0).toInt() == RESOURCE_RECOGNITION_BODY) { d.body = query.value(1).toByteArray(); } } query.finish(); db->unlock(); resource.recognition = d; return true; } // Get a resource for a note by the resource data hash. This is useful // when going through a note and finding the resource for that note qint32 ResourceTable::getLidByHashHex(QString noteGuid, QString hash) { NoteTable noteTable(db); qint32 notelid = noteTable.getLid(noteGuid); NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where data=:lid and key=:key"); query.bindValue(":lid", notelid); query.bindValue(":key", RESOURCE_NOTE_LID); query.exec(); while (query.next()) { NSqlQuery query2(db); qint32 lid = query.value(0).toInt(); QByteArray b; b.append(hash); query2.prepare("Select lid from DataStore where upper(data) like upper(:hash) and key=:key and lid=:lid"); query2.bindValue(":hash", hash); query2.bindValue(":key", RESOURCE_DATA_HASH); query2.bindValue(":lid", lid); query2.exec(); if (query2.next()) { db->unlock(); return query2.value(0).toInt(); } else { QLOG_ERROR() << "Resource not found for lid:" << lid << " key:" << RESOURCE_DATA_HASH << " hash:" << hash; QLOG_DEBUG() << query2.lastError(); } } db->unlock(); return 0; } // Get an ink note's data bool ResourceTable::getInkNote(QByteArray &value, qint32 lid) { QString fileName = global.fileManager.getDbaDirPath()+QString::number(lid)+QString(".png"); QFile f(fileName); f.open(QIODevice::ReadOnly); value = f.readAll(); if (value.size() > 0) return true; return false; } // Set/unset the index needed flag void ResourceTable::setIndexNeeded(qint32 lid, bool indexNeeded) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Delete from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_INDEX_NEEDED); query.exec(); if (indexNeeded) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_INDEX_NEEDED); query.bindValue(":data", indexNeeded); query.exec(); } query.finish(); NoteIndexer indexer(db); indexer.indexResource(lid); db->unlock(); } // Get a list of all resources that need indexing qint32 ResourceTable::getIndexNeeded(QList<qint32> &lids) { NSqlQuery query(db); lids.clear(); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=1"); query.bindValue(":key", RESOURCE_INDEX_NEEDED); query.exec(); while (query.next()) { lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); return lids.size(); } // Get a list of all resource LIDs for a given note bool ResourceTable::getResourceList(QList<qint32> &resourceList, qint32 noteLid) { resourceList.clear(); db->lockForRead(); NSqlQuery query(db); query.prepare("Select lid from DataStore where key=:key and data=:noteLid"); query.bindValue(":key", RESOURCE_NOTE_LID); query.bindValue(":noteLid", noteLid); query.exec(); while (query.next()) { int resLid = query.value(0).toInt(); resourceList.append(resLid); } query.finish(); db->unlock(); if (resourceList.size() > 0) return true; else return false; } // Permanently delete a resource void ResourceTable::expunge(qint32 lid) { if (!this->exists(lid)) { return; } NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); // Delete the physical files (resource) QDir myDir(global.fileManager.getDbaDirPath()); QString num = QString::number(lid); QStringList filter; filter.append(num+QString(".*")); QStringList list = myDir.entryList(filter, QDir::Files, QDir::NoSort); // filter resource files for (int i=0; i<list.size(); i++) { myDir.remove(list[i]); } // Delete the physical files (thumbnail) QDir myTDir(global.fileManager.getThumbnailDirPath()); list = myTDir.entryList(filter, QDir::Files, QDir::NoSort); // filter resource files for (int i=0; i<list.size(); i++) { myTDir.remove(list[i]); } } // Permanently delete a resource void ResourceTable::expunge(QString guid) { int lid = this->getLid(guid); this->expunge(lid); } // Permanently delete a resource void ResourceTable::expungeByNote(qint32 notebookLid) { QList<qint32> lids; { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from datastore where data=:data and key=:key"); query.bindValue(":key", RESOURCE_NOTE_LID); query.bindValue(":data", notebookLid); query.exec(); db->unlock(); while(query.next()) { qint32 lid = query.value(0).toInt(); lids.append(lid); } query.finish(); } for (int i=0; i<lids.size(); i++) { expunge(lids[i]); } } // Update the existing Resource's hash void ResourceTable::updateResourceHash(qint32 lid, QByteArray newhash) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update datastore set data=:hash where key=:key and lid=:lid"); query.bindValue(":hash", newhash.toHex()); query.bindValue(":key", RESOURCE_DATA_HASH); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } // Get a count of all resources in the database qint32 ResourceTable::getCount() { NSqlQuery query(db); db->lockForRead(); query.prepare("Select count(lid) from DataStore where key=:key;"); query.bindValue(":key", RESOURCE_GUID); query.exec(); qint32 retval = 0; if (query.next()) retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } // Get the count of inindexed resources qint32 ResourceTable::getUnindexedCount() { NSqlQuery query(db); db->lockForRead(); query.prepare("Select count(lid) from DataStore where key=:key and data=1"); query.bindValue(":key", RESOURCE_INDEX_NEEDED); query.exec(); qint32 retval =0; if (query.next()) retval= query.value(0).toInt(); query.finish(); db->unlock(); return retval; } // Add a stub resource. This is a placeholder for a full resource that // should be added later. qint32 ResourceTable::addStub(qint32 resLid, qint32 noteLid) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", resLid); query.bindValue(":key", RESOURCE_NOTE_LID); query.bindValue(":data", noteLid); query.exec(); query.bindValue(":lid", resLid); query.bindValue(":key", RESOURCE_GUID); query.bindValue(":data", QString::number(resLid)); query.exec(); query.finish(); db->unlock(); return resLid; } // Get the owning note's LID for a resource. qint32 ResourceTable::getNoteLid(qint32 resLid) { NSqlQuery query(db); qint32 retval = 0; db->lockForRead(); query.prepare("Select data from datastore where lid=:lid and key=:key"); query.bindValue(":lid", resLid); query.bindValue(":key", RESOURCE_NOTE_LID); query.exec(); if (query.next()) { retval = query.value(0).toInt(); } db->unlock(); return retval; } // Get a resource's HASH data QByteArray ResourceTable::getDataHash(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from datastore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", RESOURCE_DATA_HASH); query.exec(); if (query.next()) { db->unlock(); return QByteArray::fromHex(query.value(0).toByteArray()); } db->unlock(); return QByteArray(); } // Mark all note resource as needing reindexed void ResourceTable::reindexAllResources() { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from datastore where key=:indexKey"); query.bindValue(":indexKey", RESOURCE_INDEX_NEEDED); query.exec(); query.prepare("insert into datastore (lid, key, data) select lid, :indexKey, 1 from datastore where key=:key;"); query.bindValue(":indexKey", RESOURCE_INDEX_NEEDED); query.bindValue(":key", RESOURCE_GUID); query.exec(); query.finish(); db->unlock(); } // Update a resource's owning note. This is done when merging notes void ResourceTable::updateNoteLid(qint32 resourceLid, qint32 newNoteLid) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update datastore set data=:newNoteLid where lid=:resourceLid and key=:key"); query.bindValue(":newNoteLid", newNoteLid); query.bindValue(":resourceLid", resourceLid); query.bindValue(":key", RESOURCE_NOTE_LID); query.exec(); query.finish(); db->unlock(); } // Get a resource's map data void ResourceTable::getResourceMap(QHash<QString, qint32> &map, QHash< qint32, Resource > &resourceMap, QString guid) { NoteTable ntable(db); qint32 lid = ntable.getLid(guid); this->getResourceMap(map, resourceMap, lid); } // Get a resource's map data void ResourceTable::getResourceMap(QHash<QString, qint32> &map, QHash<qint32, Resource> &resourceMap, string guid) { NoteTable ntable(db); qint32 lid = ntable.getLid(guid); this->getResourceMap(map, resourceMap, lid); } // Get a resource's map data void ResourceTable::getResourceMap(QHash<QString, qint32> &hashMap, QHash<qint32, Resource> &resourceMap, qint32 noteLid) { NoteTable ntable(db); QString noteGuid = ntable.getGuid(noteLid); NSqlQuery query(db); qint32 prevLid = -1; db->lockForRead(); query.prepare("Select key, data, lid from datastore where lid in (select lid from datastore where key=:key2 and data=:noteLid) order by lid"); query.bindValue(":key2", RESOURCE_NOTE_LID); query.bindValue(":noteLid", noteLid); query.exec(); hashMap.clear(); resourceMap.clear(); Resource *r = NULL; QString hash; while (query.next()) { qint32 lid = query.value(2).toInt(); // Peek at the next record to see if we are at the end // If this is the last result set, we force a save of the // record if (!query.next()) { prevLid = lid; lid = -1; } query.previous(); // If these don't match, we need to save the current // record we are building. if (prevLid != lid) { if (prevLid > 0) { if (hash != "") { hashMap.insert(hash, prevLid); if (r == NULL) r = new Resource(); if (!r->noteGuid.isSet()) { r->noteGuid = noteGuid; } resourceMap.insert(prevLid, *r); delete r; } } r = new Resource(); prevLid = lid; hash = ""; } qint32 key = query.value(0).toInt(); if (key == RESOURCE_DATA_HASH) { hash = query.value(1).toString(); } mapResource(query, *r); } db->unlock(); query.finish(); if (r != NULL) delete r; } // Get all resources for a note void ResourceTable::getAllResources(QList<Resource> &list, qint32 noteLid, bool fullLoad, bool withBinary) { //NoteTable ntable(db); //QString noteGuid = ntable.getGuid(noteLid); NSqlQuery query(db); db->lockForRead(); QHash<qint32, Resource*> lidMap; if (fullLoad){ query.prepare("Select key, data, lid from datastore where lid in (select lid from datastore where key=:key2 and data=:noteLid) order by lid"); query.bindValue(":key2", RESOURCE_NOTE_LID); query.bindValue(":noteLid", noteLid); } else { query.prepare("Select key, data, lid from datastore where key=:key and lid in (select lid from datastore where key=:key2 and data=:noteLid) order by lid"); query.bindValue(":key", RESOURCE_GUID); query.bindValue(":key2", RESOURCE_NOTE_LID); query.bindValue(":noteLid", noteLid); } Resource *r = NULL; query.exec(); while (query.next()) { qint32 lid = query.value(2).toInt(); if (!lidMap.contains(lid)) { r = new Resource(); lidMap.insert(lid, r); } else { r = lidMap[lid]; } mapResource(query, *r); } query.finish(); db->unlock(); // if we need binary data, read it in. Then add to the list QHash<qint32, Resource*>::iterator i; list.clear(); for (i=lidMap.begin(); i!=lidMap.end(); ++i) { if (withBinary && fullLoad) { Resource *r = i.value(); qint32 lid = i.key(); QString mimetype = r->mime; MimeReference ref; QString filename; ResourceAttributes attributes; if (r->attributes.isSet()) attributes = r->attributes; if (attributes.fileName.isSet()) filename = attributes.fileName; QString fileExt = ref.getExtensionFromMime(mimetype, filename); QFile tfile(global.fileManager.getDbDirPath("/dba/"+QString::number(lid)) +fileExt ); if (!tfile.open(QIODevice::ReadOnly)) { QDir dir(global.fileManager.getDbaDirPath()); QStringList filterList; filterList.append(QString::number(lid)+".*"); QStringList list= dir.entryList(filterList, QDir::Files); if (list.size() > 0) { tfile.setFileName(global.fileManager.getDbaDirPath()+list[0]); tfile.open(QIODevice::ReadOnly); } } QByteArray b = tfile.readAll(); Data d; if (r->data.isSet()) d = r->data; d.body = b; r->data = d; tfile.close(); } list.append(*i.value()); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/resourcetable.h������������������������������������������������������������������0000664�0000000�0000000�00000015550�13156041044�0017074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef RESOURCETABLE_H #define RESOURCETABLE_H #include "sql/nsqlquery.h" #include "global.h" #include <iostream> #include <string> #include <stdio.h> #include <QSqlTableModel> #include <QtSql> #include <QString> #define RESOURCE_GUID 6000 #define RESOURCE_NOTE_LID 6001 #define RESOURCE_DATA_BODY 6002 #define RESOURCE_DATA_HASH 6003 #define RESOURCE_DATA_SIZE 6004 #define RESOURCE_MIME 6005 #define RESOURCE_ACTIVE 6006 #define RESOURCE_HEIGHT 6007 #define RESOURCE_WIDTH 6008 #define RESOURCE_DURATION 6009 #define RESOURCE_RECOGNITION_BODY 6010 #define RESOURCE_RECOGNITION_SIZE 6011 #define RESOURCE_RECOGNITION_HASH 6012 #define RESOURCE_UPDATE_SEQUENCE_NUMBER 6013 #define RESOURCE_ALTERNATE_BODY 6014 #define RESOURCE_ALTERNATE_SIZE 6015 #define RESOURCE_ALTERNATE_HASH 6016 #define RESOURCE_SOURCE_URL 6017 #define RESOURCE_CAMERA_MAKE 6018 #define RESOURCE_CAMERA_MODEL 6019 #define RESOURCE_ALTITUDE 6020 #define RESOURCE_LONGITUDE 6021 #define RESOURCE_LATITUDE 6022 #define RESOURCE_RECO_TYPE 6023 #define RESOURCE_ATTACHMENT 6024 #define RESOURCE_FILENAME 6025 #define RESOURCE_CLIENT_WILL_INDEX 6026 #define RESOURCE_ISDIRTY 6027 #define RESOURCE_TIMESTAMP 6028 #define RESOURCE_INKNOTE 6029 #define RESOURCE_INDEX_NEEDED 6999 using namespace std; class ResourceTable { private: DatabaseConnection *db; public: ResourceTable(DatabaseConnection *db); // Constructor // DB Read Functions qint32 getLid(QString noteGuid, QString guid); // given a note & resource guid, return the lid qint32 getLid(string noteGuid, string guid); // Given a note & resource guid, return the lid qint32 getLid(string resourceGuid); // Given a GUID, return the lid qint32 getLid(QString resourceGuid); // Given a resource GUID, return the lid QString getGuid(int lid); // Given a lid, get the guid bool get(Resource &resource, qint32 lid, bool withBinary); // Get a resource given a lid bool get(Resource &resource, QString noteGuid, QString guid, bool withBinary); // get a resource given a guid bool get(Resource &resource, string noteGuid, string guid, bool withBinary); // get a resource given a guid bool isDirty(qint32 lid); // Check if a resource is dirty bool isDirty(QString noteGuid, QString guid); // Check if a resource is dirty bool isDirty(string noteGuid, string guid); // Check if a resource is dirty bool exists(qint32 lid); // Does this resource exist? bool exists(QString noteGuid, QString guid); // Does this resource exist? bool exists(string noteGuid, string guid); // Does this resource exist? bool getResourceRecognition(Resource &resource, qint32 lid); // Get a resource's recognition data qint32 getLidByHashHex(QString noteGuid, QString hash); // Get a lid by the resource's hash value bool getInkNote(QByteArray &value, qint32 lid); // Get an inknote qint32 getIndexNeeded(QList<qint32> &lids); // Get a list of all resources needing indexing bool getResourceList(QList<qint32> &resourceList, qint32 noteLid); // Get resources for a note qint32 getCount(); // count of all resources qint32 getUnindexedCount(); // count of unindexed resources qint32 getNoteLid(qint32 resLid); // Get the owning note for this resource QByteArray getDataHash(qint32 lid); // Get the hash value for the data in a resource void getResourceMap(QHash<QString, qint32> &map, QHash<qint32, Resource> &resourceMap, qint32 noteLid); // Get a resource MAP data void getResourceMap(QHash<QString, qint32> &map, QHash<qint32, Resource> &resourceMap, string guid); // Get a resource's MAP data void getResourceMap(QHash<QString, qint32> &map, QHash<qint32, Resource> &resourceMap, QString guid); // Get a resource's MAP data void getAllResources(QList<Resource> &list, qint32 noteLid, bool fullLoad, bool withBinary); // Get all resources for a note // DB Write Functions void updateGuid(qint32 lid, Guid &guid); // Update a resource's guid void sync(Resource &resource); // Sync a resource with a new record void sync(qint32 lid, Resource &resource); // Sync a resource with a new record qint32 add(qint32 lid, Resource &t, bool isDirty, int noteLid=0); // Add a new resource void setIndexNeeded(qint32 lid, bool indexNeeded); // flag if a resource needs reindexing void expunge(int lid); // erase a resource void expunge(QString guid); // erase a resource void updateResourceHash(qint32 lid, QByteArray newhash); // Update a resource's hash value qint32 addStub(qint32 resLid, qint32 noteLid); // Add a basic "stub" record. Useful when duplicating notes void reindexAllResources(); // Reindex all relources void updateNoteLid(qint32 resourceLid, qint32 newNoteLid); // Update the owning note void expungeByNote(qint32 notebookLid); // Given a note's LID, erase the resource void mapResource(NSqlQuery &query, Resource &resource); // Save a resource map data }; #endif // RESOURCETABLE_H ��������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/searchtable.cpp������������������������������������������������������������������0000664�0000000�0000000�00000030311�13156041044�0017035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "searchtable.h" #include "configstore.h" #include <QSqlTableModel> #include "sql/nsqlquery.h" #include "global.h" extern Global global; // Default constructor SearchTable::SearchTable(DatabaseConnection *db) { this->db = db; } // Get the LIDs for all searches void SearchTable::getAll(QList<qint32> &lids) { lids.empty(); db->lockForRead(); NSqlQuery query(db); query.prepare("Select lid from datastore where key=:key"); query.bindValue(":key", SEARCH_GUID); query.exec(); while (query.next()) { lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); } // Given a record's name as a std::string, we return the lid qint32 SearchTable::findByName(string &name) { db->lockForRead(); QLOG_TRACE() << "Entering SearchTable::findByName()"; qint32 retval = 0; NSqlQuery query(db); query.prepare("Select lid from DataStore where key=:key and data=:name"); query.bindValue(":key", SEARCH_NAME); query.bindValue(":name", QString::fromStdString(name)); query.exec(); if (query.next()) retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } // Given a search's name as a QString, we return the lid qint32 SearchTable::findByName(QString &name) { string n = name.toStdString(); return findByName(n); } // Given a search's lid, we give it a new guid. This can happen // the first time a record is synchronized void SearchTable::updateGuid(qint32 lid, Guid &guid) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update DataStore set data=:data where key=:key and lid=:lid"); query.bindValue(":data", guid); query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_GUID); query.exec(); query.finish(); db->unlock(); } // Synchronize a new search with what is in the database. We basically // just delete the old one & give it a new entry void SearchTable::sync(SavedSearch &search) { sync(0, search); } // Synchronize a new search with what is in the database. We basically // just delete the old one & give it a new entry void SearchTable::sync(qint32 lid, SavedSearch &search) { NSqlQuery query(db); if (lid > 0) { db->lockForWrite(); query.prepare("Delete from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); db->unlock(); } else { ConfigStore cs(db); lid = cs.incrementLidCounter(); } add(lid, search, false); } // Given a record's GUID, we return the LID qint32 SearchTable::getLid(QString guid) { qint32 retval = 0; NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:data"); query.bindValue(":data", guid); query.bindValue(":key", SEARCH_GUID); query.exec(); if (query.next()) retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } // Given a search's GUID, we return the LID qint32 SearchTable::getLid(string guid) { QString s(QString::fromStdString(guid)); return getLid(s); } // Add a new search to the database void SearchTable::add(qint32 l, SavedSearch &t, bool isDirty) { ConfigStore cs(db); qint32 lid = l; if (lid == 0) lid = cs.incrementLidCounter(); NSqlQuery query(db); db->lockForWrite(); query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); if (t.guid.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_GUID); QString guid = t.guid; query.bindValue(":data", guid); query.exec(); } if (t.name.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_NAME); QString name = t.name; query.bindValue(":data", name); query.exec(); } if (t.updateSequenceNum.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_UPDATE_SEQUENCE_NUMBER); qint32 usn = t.updateSequenceNum; query.bindValue(":data", usn); query.exec(); } else { query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_UPDATE_SEQUENCE_NUMBER); query.bindValue(":data", 0); query.exec(); } if (t.format.isSet()) { int format = t.format; query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_FORMAT); query.bindValue(":data", format); query.exec(); } if (t.query.isSet()) { QString q= t.query; query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_QUERY); query.bindValue(":data", q); query.exec(); } query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_ISDIRTY); query.bindValue(":data", isDirty); query.exec(); query.finish(); db->unlock(); } // Return a search's structure given the LID bool SearchTable::get(SavedSearch &search ,qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select key, data from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); if (query.size() == 0) { query.finish(); return false; } while (query.next()) { qint32 key = query.value(0).toInt(); switch (key) { case (SEARCH_GUID): search.guid = query.value(1).toString(); break; case (SEARCH_UPDATE_SEQUENCE_NUMBER): search.updateSequenceNum = query.value(1).toInt(); break; case (SEARCH_NAME): search.name = query.value(1).toString(); break; case (SEARCH_QUERY): search.query = query.value(1).toString(); break; case (SEARCH_FORMAT): qint32 value = query.value(1).toInt(); search.format = QueryFormat::USER; if (value == QueryFormat::SEXP) search.format = QueryFormat::SEXP; break; } } query.finish(); db->unlock(); return true; } // Return a search given the GUID bool SearchTable::get(SavedSearch &search, QString guid) { qint32 lid = getLid(guid); return get(search, lid); } // Return a search given the GUID as a std::string bool SearchTable::get(SavedSearch &search, string guid) { qint32 lid = getLid(guid); return get(search, lid); } // Return if a search is dirty given its lid bool SearchTable::isDirty(qint32 lid) { bool retval = false; NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_ISDIRTY); query.exec(); if (query.next()) retval = query.value(0).toBool(); query.finish(); db->unlock(); return retval; } // Determine if a search is dirty given a guid bool SearchTable::isDirty(QString guid) { qint32 lid = getLid(guid); return isDirty(lid); } // Determine if a search is dirty given a guid bool SearchTable::isDirty(string guid) { QString g(QString::fromStdString(guid)); return isDirty(g); } // Does this search exist? bool SearchTable::exists(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_GUID); query.exec(); if (query.next()) { query.finish(); db->unlock(); return true; } query.finish(); db->unlock(); return false; } // Set the search as "dirty" so it is synchronized next time void SearchTable::setDirty(qint32 lid, bool dirty) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update DataStore set data=:data where key=:key and lid=:lid"); query.bindValue(":data", dirty); query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_ISDIRTY); query.exec(); query.finish(); db->unlock(); } // Delete this search void SearchTable::deleteSearch(qint32 lid) { if (!exists(lid)) return; SavedSearch s; get(s, lid); if (s.updateSequenceNum.isSet() && s.updateSequenceNum > 0) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Delete from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_ISDELETED); query.exec(); query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":data", true); query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_ISDELETED); query.exec(); query.finish(); db->unlock(); setDirty(lid,true); } else { expunge(lid); } } void SearchTable::expunge(qint32 lid) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } // Erase a search void SearchTable::expunge(string guid) { expunge(getLid(guid)); } // Erase a search void SearchTable::expunge(QString guid) { expunge(getLid(guid)); } // Determine if a search is dirty given a guid bool SearchTable::exists(QString guid) { qint32 lid = getLid(guid); return exists(lid); } // Determine if a search is dirty given a guid bool SearchTable::exists(string guid) { qint32 lid = getLid(guid); return exists(lid); } // Update an existing saved search bool SearchTable::update(qint32 lid, SavedSearch &s, bool isDirty=true) { this->sync(lid, s); this->setDirty(lid, isDirty); return true; } // Is this search deleted? bool SearchTable::isDeleted(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and lid=:lid and data=1"); query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_ISDELETED); query.exec(); if (query.next()) { query.finish(); db->unlock(); return true; } query.finish(); db->unlock(); return false; } // Get all dirty lids qint32 SearchTable::getAllDirty(QList<qint32> &lids) { NSqlQuery query(db); lids.clear(); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=1"); query.bindValue(":key", SEARCH_ISDIRTY); query.exec(); while(query.next()) { lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); return lids.size(); } // Update the USN void SearchTable::setUpdateSequenceNumber(qint32 lid, qint32 usn) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update DataStore set data=:data where key=:key and lid=:lid"); query.bindValue(":data", usn); query.bindValue(":lid", lid); query.bindValue(":key", SEARCH_UPDATE_SEQUENCE_NUMBER); query.exec(); db->unlock(); query.finish(); } // Get all dirty lids QString SearchTable::getGuid(qint32 lid) { QString retval = ""; NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from DataStore where key=:key and lid=:lid"); query.bindValue(":key", SEARCH_GUID); query.bindValue(":lid", lid); query.exec(); if(query.next()) { retval = query.value(0).toString(); } query.finish(); db->unlock(); return retval; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/searchtable.h��������������������������������������������������������������������0000664�0000000�0000000�00000007600�13156041044�0016507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef SEARCHTABLE_H #define SEARCHTABLE_H #include "global.h" #include <iostream> #include <string> #include <stdio.h> #include <QSqlTableModel> #include <QtSql> #include <QString> #include "sql/databaseconnection.h" using namespace std; #define SEARCH_GUID 2000 #define SEARCH_NAME 2001 #define SEARCH_UPDATE_SEQUENCE_NUMBER 2003 #define SEARCH_ISDIRTY 2004 #define SEARCH_FORMAT 2005 #define SEARCH_QUERY 2006 #define SEARCH_ISDELETED 2007 #define SEARCH_LID_POSITION 0 #define SEARCH_NAME_POSITION 1 class SearchTable { private: DatabaseConnection *db; public: SearchTable(DatabaseConnection *db); // Constructor qint32 getLid(QString guid); // given a guid, return the lid qint32 getLid(string guid); // Given a guid, return the lid qint32 findByName(string &name); // Find a record given a name qint32 findByName(QString &name); // Find a record given a name qint32 getAllDirty(QList<qint32>&lids); // get all dirty lids bool get(SavedSearch &search, qint32 lid); // Get a record given a lid bool get(SavedSearch &search, QString guid); // get a record given a guid bool get(SavedSearch &search, string guid); // get a record given a guid bool isDirty(qint32 lid); // Check if a record is dirty bool isDirty(QString guid); // Check if a record is dirty bool isDirty(string guid); // Check if a record is dirty bool exists(qint32 lid); // Does this record exist? bool exists(QString guid); // Does this record exist? bool exists(string guid); // Does this record exist? bool isDeleted(qint32 lid); // Is this search marked for deletion? QString getGuid(qint32 lid); // Get the GUID for a searcht void getAll(QList<qint32> &lids); // Get a list of all search LIDs. // DB Write Functions void updateGuid(qint32 lid, Guid &guid); // Update a record's guid void sync(SavedSearch &search); // Sync a record void sync(qint32 lid, SavedSearch &search); // Sync a record void add(qint32 lid, SavedSearch &t, bool isDirty); // Add a new record bool update(qint32 lid, SavedSearch &s, bool isDirty); // Update an existing saved search void deleteSearch(qint32 lid); // Mark a search as deleted void expunge(qint32 lid); // Erase a search void expunge(QString guid); // Erase a search void expunge(string guid); // Erase a search void setDirty(qint32 lid, bool dirty); // Set a search as needing to be synchronized void setUpdateSequenceNumber(qint32 lid, qint32 usn); // Set the update sequence number for a search }; #endif // SEARCHTABLE_H ��������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/sharednotebooktable.cpp����������������������������������������������������������0000664�0000000�0000000�00000035534�13156041044�0020613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "sharednotebooktable.h" #include "configstore.h" #include "global.h" #include "sql/notebooktable.h" #include "sql/nsqlquery.h" #include <QSqlTableModel> extern Global global; SharedNotebookTable::SharedNotebookTable(DatabaseConnection *db) { this->db = db; } // Given the notebook ID, return the LID qint32 SharedNotebookTable::getLid(qlonglong id){ qint32 retval = 0; NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:data"); query.bindValue(":key", SHAREDNOTEBOOK_ID); query.bindValue(":data", id); query.exec(); if (query.next()) retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } // Synchronize a shared notebook qint32 SharedNotebookTable::sync(SharedNotebook &sharedNotebook){ return sync(0, sharedNotebook); } // Synchronize a shared notebook qint32 SharedNotebookTable::sync(qint32 l, SharedNotebook sharedNotebook){ qint32 lid = l; if (lid == 0) lid= findById(sharedNotebook.id); if (lid == 0) lid = findByNotebookGuid(sharedNotebook.notebookGuid); if (lid > 0) { NSqlQuery query(db); // Delete the old record db->lockForWrite(); query.prepare("Delete from DataStore where lid=:lid and key>=3300 and key <3400"); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } else { ConfigStore cs(db); lid = cs.incrementLidCounter(); } return add(lid, sharedNotebook, false); } // Add a new shared notebook qint32 SharedNotebookTable::add(qint32 l, const SharedNotebook &t, bool isDirty){ Q_UNUSED(isDirty); //suppress unused if (l>0) expunge(l); ConfigStore cs(db); qint32 lid = l; if (lid == 0) lid = cs.incrementLidCounter(); NSqlQuery query(db); db->lockForWrite(); if (t.email.isSet()) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_EMAIL); QString email = t.email; query.bindValue(":data",email); query.exec(); } if (t.id.isSet()) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_ID); qint64 id = t.id; query.bindValue(":data", id); query.exec(); } if (t.notebookGuid.isSet()) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_NOTEBOOK_GUID); QString notebookGuid = t.notebookGuid; query.bindValue(":data", notebookGuid); query.exec(); } if (t.notebookModifiable.isSet()) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_MODIFIABLE); bool mod = t.notebookModifiable; query.bindValue(":data", mod); query.exec(); } if (t.privilege.isSet()) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_PRIVILEGE); qint32 priv = t.privilege; query.bindValue(":data", priv); query.exec(); } if (t.requireLogin.isSet()) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_REQUIRE_LOGIN); bool login = t.requireLogin; query.bindValue(":data", login); query.exec(); } if (t.allowPreview.isSet()) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_ALLOW_PREVIEW); bool preview = t.allowPreview; query.bindValue(":data", preview); query.exec(); } if (t.serviceCreated.isSet()) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_SERVICE_CREATED); qlonglong date = t.serviceCreated; query.bindValue(":data", date); query.exec(); } if (t.shareKey.isSet()) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_SHARE_KEY); QString key = t.shareKey; query.bindValue(":data", key); query.exec(); } if (t.userId.isSet()) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_USERID); int userid = t.userId; query.bindValue(":data", userid); query.exec(); } if (t.username.isSet()) { query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_USERNAME); QString username = t.username; query.bindValue(":data", username); query.exec(); } query.finish(); db->unlock(); return lid; } // given a LID, return a shared notebook record bool SharedNotebookTable::get(SharedNotebook ¬ebook, qint32 lid, QString username){ NSqlQuery query(db); db->lockForRead(); query.prepare("select key, data from datastore where lid in (Select lid from DataStore where lid=:lid and key=:key and data=:data)"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_USERNAME); query.bindValue(":data", username); query.exec(); bool returnVal = false; while (query.next()) { qint32 key = query.value(0).toInt(); switch (key) { case (SHAREDNOTEBOOK_EMAIL): notebook.email = query.value(1).toString(); returnVal = true; break; case (SHAREDNOTEBOOK_ISDIRTY): returnVal = true; break; case (SHAREDNOTEBOOK_SERVICE_CREATED): notebook.serviceCreated = query.value(1).toLongLong(); returnVal = true; break; case (SHAREDNOTEBOOK_SERVICE_UPDATED): returnVal = true; break; case (SHAREDNOTEBOOK_ALLOW_PREVIEW): notebook.allowPreview = query.value(1).toBool(); returnVal = true; break; case (SHAREDNOTEBOOK_ID): notebook.id = query.value(1).toLongLong(); returnVal = true; break; case (SHAREDNOTEBOOK_NOTEBOOK_GUID): notebook.notebookGuid = query.value(1).toString(); returnVal = true; break; case (SHAREDNOTEBOOK_MODIFIABLE): notebook.notebookModifiable = query.value(1).toBool(); returnVal = true; break; case (SHAREDNOTEBOOK_REQUIRE_LOGIN): notebook.requireLogin = query.value(1).toBool(); returnVal = true; break; case (SHAREDNOTEBOOK_PRIVILEGE): { int priv = query.value(1).toInt(); notebook.privilege = SharedNotebookPrivilegeLevel::READ_NOTEBOOK; if (priv == SharedNotebookPrivilegeLevel::FULL_ACCESS) notebook.privilege = SharedNotebookPrivilegeLevel::FULL_ACCESS; if (priv == SharedNotebookPrivilegeLevel::BUSINESS_FULL_ACCESS) notebook.privilege = SharedNotebookPrivilegeLevel::BUSINESS_FULL_ACCESS; if (priv == SharedNotebookPrivilegeLevel::GROUP) notebook.privilege = SharedNotebookPrivilegeLevel::GROUP; if (priv == SharedNotebookPrivilegeLevel::MODIFY_NOTEBOOK_PLUS_ACTIVITY) notebook.privilege = SharedNotebookPrivilegeLevel::MODIFY_NOTEBOOK_PLUS_ACTIVITY; if (priv == SharedNotebookPrivilegeLevel::READ_NOTEBOOK_PLUS_ACTIVITY) notebook.privilege = SharedNotebookPrivilegeLevel::READ_NOTEBOOK_PLUS_ACTIVITY; returnVal = true; break; } case (SHAREDNOTEBOOK_USERID): notebook.userId = query.value(1).toInt(); returnVal = true; break; case (SHAREDNOTEBOOK_SHARE_KEY): notebook.shareKey = query.value(1).toString(); returnVal = true; break; case (SHAREDNOTEBOOK_USERNAME): notebook.username = query.value(1).toString(); returnVal =true; break; } } query.finish(); db->unlock(); return returnVal; } // Does this shared notebook need a sync? bool SharedNotebookTable::isDirty(qint32 lid){ bool retval = false; NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_ISDIRTY); query.exec(); if (query.next()) retval = query.value(0).toBool(); query.finish(); db->unlock(); return retval; } // Does this shared notebook exist? bool SharedNotebookTable::exists(qint32 lid){ NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_ID); query.exec(); if (query.next()) { query.finish(); db->unlock(); return true; } query.finish(); db->unlock(); return false; } // Does this shared notebook exist? bool SharedNotebookTable::exists(qlonglong id){ NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:id"); query.bindValue(":key", SHAREDNOTEBOOK_ID); query.bindValue(":id", id); query.exec(); if (query.next()) { query.finish(); db->unlock(); return true; } query.finish(); db->unlock(); return false; } // Get a list of all shared notebooks qint32 SharedNotebookTable::getAll(QList<qint32> &values){ QLOG_TRACE() << "Entering SharedNotebookTable::getAll()"; NSqlQuery query(db); db->lockForRead(); query.prepare("select distinct lid from DataStore where key=:key"); query.bindValue(":key", SHAREDNOTEBOOK_ID); query.exec(); while (query.next()) { values.append(query.value(0).toInt()); } query.finish(); db->unlock(); return values.size(); } // Get the shared notebook ID when given the LID qlonglong SharedNotebookTable::getId(qint32 lid){ NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_ID); query.exec(); while (query.next()) { qint32 retval = 0; retval = query.value(0).toLongLong(); query.finish(); db->unlock(); return retval; } query.finish(); db->unlock(); return 0; } // Find a shared notebook LID by it's ID qint32 SharedNotebookTable::findById(qlonglong id) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:id"); query.bindValue(":key", SHAREDNOTEBOOK_ID); query.bindValue(":id", id); query.exec(); if (query.next()) { qint32 retval = 0; retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } query.finish(); db->unlock(); return 0; } // Find a shared notebook by the share key qint32 SharedNotebookTable::findByShareKey(QString id) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:id"); query.bindValue(":key", SHAREDNOTEBOOK_SHARE_KEY); query.bindValue(":id", id); query.exec(); while (query.next()) { qint32 retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } db->unlock(); query.finish(); return 0; } // Find a shared notebook by the share key qint32 SharedNotebookTable::findByShareKey(string id) { return findByShareKey(QString::fromStdString(id)); } // Find a shared notebook LID by its GUID qint32 SharedNotebookTable::findByNotebookGuid(QString id) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:id"); query.bindValue(":key", SHAREDNOTEBOOK_NOTEBOOK_GUID); query.bindValue(":id", id); query.exec(); while (query.next()) { qint32 retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } query.finish(); db->unlock(); NotebookTable ntable(db); return ntable.getLid(id); } // Find a shared notebook by the GUID qint32 SharedNotebookTable::findByNotebookGuid(string id) { return findByNotebookGuid(QString::fromStdString(id)); } //Find users for a specific shared notebook qint32 SharedNotebookTable::getShareUsers(QStringList &users, qint32 lid) { qint32 retval = 0; users.clear(); NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", SHAREDNOTEBOOK_USERNAME); query.exec(); while (query.next()) { retval++; users.append(query.value(0).toString()); } query.finish(); db->unlock(); return retval; } // Remove a shared notebook void SharedNotebookTable::expunge(qint32 lid) { db->lockForWrite(); NSqlQuery query(db); query.prepare("Delete from DataStore where lid=:lid and key>=3300 and key<3400"); query.bindValue(":lid", lid); query.exec(); db->unlock(); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/sharednotebooktable.h������������������������������������������������������������0000664�0000000�0000000�00000006662�13156041044�0020260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef SHAREDNOTEBOOKTABLE_H #define SHAREDNOTEBOOKTABLE_H #include "global.h" #include "sql/databaseconnection.h" #include <iostream> #include <string> #include <stdio.h> #include <QSqlTableModel> #include <QtSql> #include <QString> #define SHAREDNOTEBOOK_ID 3300 #define SHAREDNOTEBOOK_USERID 3301 #define SHAREDNOTEBOOK_NOTEBOOK_GUID 3302 #define SHAREDNOTEBOOK_EMAIL 3303 #define SHAREDNOTEBOOK_PRIVILEGE 3304 #define SHAREDNOTEBOOK_ALLOW_PREVIEW 3305 #define SHAREDNOTEBOOK_SERVICE_CREATED 3306 #define SHAREDNOTEBOOK_SERVICE_UPDATED 3307 #define SHAREDNOTEBOOK_SHARE_KEY 3308 #define SHAREDNOTEBOOK_USERNAME 3309 #define SHAREDNOTEBOOK_MODIFIABLE 3310 #define SHAREDNOTEBOOK_REQUIRE_LOGIN 3311 #define SHAREDNOTEBOOK_ISDIRTY 3399 using namespace std; class SharedNotebookTable { private: DatabaseConnection *db; public: SharedNotebookTable(DatabaseConnection *db); // Constructor // DB Read Functions qint32 getLid(qlonglong id); // given a guid, return the lid bool get(SharedNotebook ¬ebook, qint32 lid, QString username); // Get a shared notebook given a lid bool isDirty(qint32 lid); // Check if a shared notebook is dirty bool exists(qint32 lid); // Does this shared notebook exist? bool exists(qlonglong id); // Does this shared notebook exist? qint32 getAll(QList<qint32> &values); // Get all possible shared notebook lids qlonglong getId(qint32 lid); // Get a shared notebook for a tag given the lid qint32 findById(qlonglong id); // Find a lid by the id qint32 findByShareKey(QString key); // Find by the share key qint32 findByShareKey(string key); // Find by the share key qint32 findByNotebookGuid(string key); // Find by the notebook Guid qint32 findByNotebookGuid(QString key); // Find by the notebook Guid qint32 getShareUsers(QStringList &users, qint32 lid); void expunge(qint32 lid); // Remove this // DB Write Functions qint32 sync(SharedNotebook &sharedNotebook); // Sync a notebook with a new record qint32 sync(qint32 lid, SharedNotebook sharedNotebook); // Sync a notebook with a new record qint32 add(qint32 lid, const SharedNotebook &t, bool isDirty); // Add a new record } ; #endif // SHAREDNOTEBOOKTABLE_H ������������������������������������������������������������������������������nixnote2-2.0.2/sql/tagtable.cpp���������������������������������������������������������������������0000664�0000000�0000000�00000054244�13156041044�0016356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "tagtable.h" #include "configstore.h" #include "notetable.h" #include "sql/nsqlquery.h" #include <QSqlTableModel> #include <QList> #include "global.h" extern Global global; // Default constructor TagTable::TagTable(DatabaseConnection *db) { this->db = db; } // Given a tag's name as a std::string, we return the lid qint32 TagTable::findByName(string &name, qint32 account) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:name"); query.bindValue(":key", TAG_NAME); query.bindValue(":name", QString::fromStdString(name)); query.exec(); while (query.next()) { qint32 lid = query.value(0).toInt(); if (account == 0 || owningAccount(lid) == account) { query.finish(); db->unlock(); return lid; } } query.finish(); db->unlock(); return 0; } // Given a tag's name as a QString, we return the lid qint32 TagTable::findByName(QString &name, qint32 account) { string n = name.toStdString(); return findByName(n, account); } // Determine if a lid belongs to a linked notebook bool TagTable::isLinked(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from datastore where key=:key and lid=:lid"); query.bindValue(":key", TAG_OWNING_ACCOUNT); query.bindValue(":lid", lid); query.exec(); if (query.next()) { query.finish(); db->unlock(); return true; } query.finish(); db->unlock(); return false; } // Get the owning account for a lid qint32 TagTable::owningAccount(qint32 lid) { qint32 retval = 0; NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from datastore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", TAG_OWNING_ACCOUNT); query.exec(); if (query.next()) retval = query.value(0).toInt(); query.finish(); db->unlock(); return retval; } // Get a list of all tag names hashed by LID void TagTable::getAllNames(QHash<qint32, QString> *list) { NSqlQuery query(db); list->clear(); db->lockForRead(); query.prepare("select lid, data from DataStore where key=:key"); query.bindValue(":key", TAG_NAME); query.exec(); while (query.next()) { list->insert(query.value(0).toInt(), query.value(1).toString()); } query.finish(); db->unlock(); return; } // Get a list of all tags qint32 TagTable::getAllInAccount(QList<qint32> &tags, qint32 account) { NSqlQuery query(db); db->lockForRead(); if (account != 0) query.prepare("select distinct lid from DataStore where key=:key and lid in (select lid from DataStore where key=:key2 and data=:account)"); else query.prepare("select distinct lid from DataStore where key=:key and lid not in (select lid from DataStore where key=:key2)"); query.bindValue(":key", TAG_GUID); query.bindValue(":key2", TAG_OWNING_ACCOUNT); if (account !=0) query.bindValue(":account", account); query.exec(); while (query.next()) { tags.append(query.value(0).toInt()); } query.finish(); db->unlock(); return tags.size(); } // Get a list of all tags qint32 TagTable::getAll(QList<qint32> &tags) { NSqlQuery query(db); db->lockForRead(); query.prepare("select distinct lid from DataStore where key=:key"); query.bindValue(":key", TAG_GUID); query.exec(); while (query.next()) { tags.append(query.value(0).toInt()); } query.finish(); db->unlock(); return tags.size(); } // Given a tag's lid, we give it a new guid. This can happen // the first time a record is synchronized void TagTable::updateGuid(qint32 lid, Guid &guid) { QLOG_TRACE_IN(); QString oldGuid; getGuid(oldGuid, lid); NSqlQuery query(db); db->lockForWrite(); query.prepare("Update DataStore set data=:data where key=:key and lid=:lid"); query.bindValue(":data", guid); query.bindValue(":lid", lid); query.bindValue(":key", TAG_GUID); query.exec(); query.finish(); db->unlock(); QLOG_TRACE_OUT(); } // Synchronize a new tag with what is in the database. We basically // just delete the old one & give it a new entry qint32 TagTable::sync(Tag &tag, qint32 account) { qint32 lid= getLid(tag.guid); return sync(lid, tag, account); } // Update a tag record void TagTable::update(Tag &tag, bool dirty=true) { qint32 lid = getLid(tag.guid); if (lid > 0) { NSqlQuery query(db); // Delete the old record db->lockForWrite(); query.prepare("Delete from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); qint32 account = owningAccount(lid); add(lid, tag, dirty,account); // Now update the Note display list NoteTable noteTable(db); QList<qint32> noteList; noteTable.findNotesByTag(noteList, lid); for (qint32 i=0; i<noteList.size(); i++) { noteTable.rebuildNoteListTags(noteList[i]); } } } // Synchronize a newtag with what is in the database. We basically // just delete the old one & give it a new entry qint32 TagTable::sync(qint32 l, Tag &tag, qint32 account) { qint32 lid = l; if (lid == 0) lid= getLid(tag.name); if (lid > 0) { NSqlQuery query(db); // Delete the old record db->lockForWrite(); query.prepare("Delete from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } else { ConfigStore cs(db); lid = cs.incrementLidCounter(); } add(lid, tag, false, account); return lid; } // Given a tag's GUID, we return the LID qint32 TagTable::getLid(QString guid) { QLOG_TRACE_IN(); qint32 retval = 0; NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:data"); query.bindValue(":data", guid); query.bindValue(":key", TAG_GUID); query.exec(); if (query.next()) retval = query.value(0).toInt(); query.finish(); db->unlock(); QLOG_TRACE_OUT(); return retval; } // Given a tag's GUID, we return the LID qint32 TagTable::getLid(string guid) { QLOG_TRACE_IN(); QString s(QString::fromStdString(guid)); QLOG_TRACE_OUT(); return getLid(s); } // Add a new tag to the database qint32 TagTable::add(qint32 l, Tag &t, bool isDirty, qint32 account) { ConfigStore cs(db); qint32 lid = l; if (lid == 0) lid = cs.incrementLidCounter(); NSqlQuery query(db); db->lockForWrite(); query.prepare("Insert into DataStore (lid, key, data) values (:lid, :key, :data)"); if (t.guid.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", TAG_GUID); QString guid = t.guid; query.bindValue(":data", guid); query.exec(); } if (t.name.isSet()) { query.bindValue(":lid", lid); query.bindValue(":key", TAG_NAME); QString name = t.name; query.bindValue(":data", name); query.exec(); } qint32 usn = 0; if (t.updateSequenceNum.isSet()) usn = t.updateSequenceNum; query.bindValue(":lid", lid); query.bindValue(":key", TAG_UPDATE_SEQUENCE_NUMBER); query.bindValue(":data", usn); query.exec(); if (t.parentGuid.isSet()) { QString parentGuid = t.parentGuid; if (parentGuid != "") { db->unlock(); qint32 parentLid = getLid(t.parentGuid); if (parentLid == 0) { Tag tempTag; parentLid = cs.incrementLidCounter(); tempTag.guid = t.parentGuid; tempTag.name="<no name>"; tempTag.updateSequenceNum = 0; add(parentLid, tempTag, false, account); } db->lockForWrite(); query.bindValue(":lid", lid); query.bindValue(":key", TAG_PARENT_LID); query.bindValue(":data", parentLid); query.exec(); } } query.bindValue(":lid", lid); query.bindValue(":key", TAG_ISDIRTY); query.bindValue(":data", isDirty); query.exec(); if (account >0) { query.bindValue(":lid", lid); query.bindValue(":key", TAG_OWNING_ACCOUNT); query.bindValue(":data", account); query.exec(); } query.finish(); db->unlock(); return lid; } // Return a tag structure given the LID bool TagTable::get(Tag &tag, qint32 lid) { QLOG_TRACE_IN(); NSqlQuery query(db); db->lockForRead(); query.prepare("Select key, data from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); if (query.size() == 0) { query.finish(); db->unlock(); QLOG_TRACE_OUT(); return false; } while (query.next()) { qint32 key = query.value(0).toInt(); switch (key) { case (TAG_GUID): tag.guid = query.value(1).toString(); break; case (TAG_UPDATE_SEQUENCE_NUMBER): tag.updateSequenceNum = query.value(1).toInt(); break; case (TAG_PARENT_LID): { if (query.value(1).toInt() > 0) { QString parentGuid; if (getGuid(parentGuid, query.value(1).toInt())) tag.parentGuid = parentGuid; break; } } case (TAG_NAME): tag.name = query.value(1).toString(); break; default: { QLOG_ERROR() << "Unknown Tag record key: " << key; } } } query.finish(); db->unlock(); if (!tag.name.isSet()) tag.name = "** Unknown **"; QLOG_TRACE_OUT(); return true; } // Return a tag given the GUID bool TagTable::get(Tag &tag, QString guid) { qint32 lid = getLid(guid); return get(tag, lid); } // Return a tag given the GUID as a std::string bool TagTable::get(Tag &tag, string guid) { qint32 lid = getLid(guid); return get(tag, lid); } // Return if a tag is dirty given its lid bool TagTable::isDirty(qint32 lid) { QLOG_TRACE_IN(); NSqlQuery query(db); bool retval = false; db->lockForRead(); query.prepare("Select data from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", TAG_ISDIRTY); query.exec(); if (query.next()) retval = query.value(0).toBool(); query.finish(); db->unlock(); QLOG_TRACE_OUT(); return retval; } // Determine if a tag is dirty given a guid bool TagTable::isDirty(QString guid) { qint32 lid = getLid(guid); return isDirty(lid); } // Determine if a tag is dirty given a guid bool TagTable::isDirty(string guid) { QString g(QString::fromStdString(guid)); return isDirty(g); } // Set a flag dirty or clean void TagTable::setDirty(string guid, bool dirty) { qint32 lid = getLid(guid); return setDirty(lid, dirty); } // Set a flag dirty or clean void TagTable::setDirty(QString guid, bool dirty) { qint32 lid = getLid(guid); return setDirty(lid, dirty); } // Return if a tag is dirty given its lid void TagTable::setDirty(qint32 lid, bool dirty) { //bool retval = false; NSqlQuery query(db); db->lockForWrite(); query.prepare("Update DataStore set data=:dirty where key=:key and lid=:lid"); query.bindValue(":dirty", dirty); query.bindValue(":key", TAG_ISDIRTY); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); } // Does this tag exist? bool TagTable::exists(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and lid=:lid"); query.bindValue(":lid", lid); query.bindValue(":key", TAG_GUID); query.exec(); if (query.next()) { query.finish(); db->unlock(); return true; } query.finish(); db->unlock(); return false; } // Determine if a tag is dirty given a guid bool TagTable::exists(QString guid) { qint32 lid = getLid(guid); return exists(lid); } // Determine if a tag is dirty given a guid bool TagTable::exists(string guid) { qint32 lid = getLid(guid); return exists(lid); } // Return a tag guid given the LID bool TagTable::getGuid(QString &guid, qint32 lid) { QLOG_TRACE_IN(); NSqlQuery query(db); db->lockForRead(); query.prepare("Select data, data from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", TAG_GUID); query.exec(); while (query.next()) { guid = query.value(0).toString(); query.finish(); db->unlock(); QLOG_TRACE_OUT(); return true; } query.finish(); db->unlock(); QLOG_TRACE_OUT(); return false; } // Delete this tag void TagTable::deleteTag(qint32 lid) { if (!exists(lid)) return; // First find the current tag we want to delet. // If it has a parent, then we save it because // when we delete the current tag all of the children // will be promoted to the current tag's parent Tag currentTag; QString newParent = ""; get(currentTag, lid); if (currentTag.parentGuid.isSet()) newParent = currentTag.parentGuid; // Now, get a list of all the children. // The children will now be given a new parent QList<qint32> list; QString currentGuid; getGuid(currentGuid, lid); findChildren(list, currentGuid); for (int i=0; i<list.size(); i++) { Tag childTag; get(childTag, list[i]); childTag.parentGuid = newParent; update(childTag, true); } // Now, we need to delete the actual tag. NoteTable noteTable(db); NSqlQuery query(db); if (currentTag.updateSequenceNum.isSet() && currentTag.updateSequenceNum > 0) { db->lockForWrite(); query.prepare("delete from DataStore where lid=:lid and key=:key"); query.bindValue(":lid", lid); query.bindValue(":key", TAG_ISDELETED); query.exec(); query.prepare("insert into DataStore (lid, key, data) values (:lid, :key, :data)"); query.bindValue(":lid", lid); query.bindValue(":key", TAG_ISDELETED); query.bindValue(":data", true); query.exec(); db->unlock(); setDirty(lid, true); } else { expunge(lid); } query.finish(); // Now, find all the notes with this tag and remove them. QList<qint32> noteLids; noteTable.findNotesByTag(noteLids, lid); for (int j=0; j<noteLids.size(); j++) { noteTable.removeTag(noteLids[j], lid, false); } } // Erase a tag void TagTable::expunge(qint32 lid) { QString tagGuid; this->getGuid(tagGuid, lid); NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from DataStore where lid=:lid"); query.bindValue(":lid", lid); query.exec(); query.finish(); db->unlock(); NoteTable noteTable(db); QList<int> notes; noteTable.findNotesByTag(notes, tagGuid); for (int i=0; i<notes.size(); i++) noteTable.removeTag(notes[i], lid, false); } // Erase a tag void TagTable::expunge(string guid) { int lid = this->getLid(guid); expunge(lid); } // Erase a tag void TagTable::expunge(QString guid) { int lid = this->getLid(guid); expunge(lid); } // Is this search deleted? bool TagTable::isDeleted(qint32 lid) { NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where lid=:lid and key=:key and data=:data"); query.bindValue(":lid", lid); query.bindValue(":key", TAG_ISDELETED); query.bindValue(":data", true); query.exec(); if (query.next()) { query.finish(); db->unlock(); return true; } query.finish(); db->unlock(); return false; } qint32 TagTable::findChildren(QList<qint32> &list, QString parentGuid) { qint32 parentLid = getLid(parentGuid); NSqlQuery query(db); db->lockForRead(); query.prepare("Select lid from DataStore where key=:key and data=:parent"); query.bindValue(":key", TAG_PARENT_LID); query.bindValue(":parent", parentLid); query.exec(); db->unlock(); // Now find all the children for each found tag while (query.next()) { qint32 nextChild = query.value(0).toInt(); QString nextGuid; getGuid(nextGuid, nextChild); findChildren(list, nextGuid); list.append(nextChild); } query.finish(); return list.size(); } // Get all dirty lids qint32 TagTable::getAllDirty(QList<qint32> &lids) { QLOG_TRACE_IN(); NSqlQuery query(db); db->lockForRead(); lids.clear(); query.prepare("Select lid from DataStore where key=:key and data=1"); query.bindValue(":key", TAG_ISDIRTY); query.exec(); while(query.next()) { lids.append(query.value(0).toInt()); } query.finish(); db->unlock(); QLOG_TRACE_OUT(); return lids.size(); } // Update the USN void TagTable::setUpdateSequenceNumber(qint32 lid, qint32 usn) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Update DataStore set data=:data where key=:key and lid=:lid"); query.bindValue(":data", usn); query.bindValue(":lid", lid); query.bindValue(":key", TAG_UPDATE_SEQUENCE_NUMBER); query.exec(); query.finish(); db->unlock(); } // Linked tags are not uploaded, so we reset the dirty flags in case // they were updated locally void TagTable::resetLinkedTagsDirty() { QLOG_TRACE_IN(); NSqlQuery query(db); db->lockForWrite(); query.prepare("Delete from datastore where key=:key and lid in (select lid from datastore where key=:linkedkey and data > 0)"); query.bindValue(":key", TAG_ISDIRTY); query.bindValue(":linkedkey", TAG_OWNING_ACCOUNT); query.exec(); query.finish(); db->unlock(); QLOG_TRACE_OUT(); } // Get a count of all new unsequenced notebooks // Get all dirty lids int TagTable::getNewUnsequencedCount() { NSqlQuery query(db); db->lockForRead(); qint32 retval = 0; query.prepare("Select count(lid) from DataStore where key=:key and data=0"); query.bindValue(":key", TAG_UPDATE_SEQUENCE_NUMBER); query.exec(); while(query.next()) { retval = query.value(0).toInt(); } query.finish(); db->unlock(); return retval; } // This function will look at all the tags in linked notebooks. If any tag has a name of // <no name> then it is missing. This can happen because we get a parent guid from a tag // sync chunk, but not the actual parent tag. When this happens we delete the <no name> tag // and remove the parent record. void TagTable::cleanupLinkedTags() { // Delete the parent records from the children NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from datastore where data in (select lid from datastore where lid in (select lid from datastore where data='<no name>' and key=:nameKey and lid in (select lid from datastore where key=:owningKey)) and key=:parentKey)"); query.bindValue(":parentKey", TAG_PARENT_LID); query.bindValue(":nameKey", TAG_NAME); query.bindValue(":owningKey", TAG_OWNING_ACCOUNT); query.exec(); // Delete the actual parent query.prepare("delete from datastore where lid in (select lid from datastore where data='<no name>' and key=:nameKey and lid in (select lid from datastore where key=:owningKey))"); query.bindValue(":owningKey", TAG_OWNING_ACCOUNT); query.bindValue(":nameKey", TAG_NAME); query.exec(); query.finish(); db->unlock(); } // Get a hashtable of tags by GUID void TagTable::getGuidMap(QHash<QString,QString> &guidMap) { QList<qint32> tags; Tag t; getAll(tags); guidMap.empty(); for (int i=0; i<tags.size(); i++) { get(t,tags[i]); QString guid = ""; QString name = ""; if (t.guid.isSet()) guid = t.guid; if (t.name.isSet()) name = t.name; guidMap.insert(t.guid, t.name); } } // Get a hash table of tags by name void TagTable::getNameMap(QHash<QString,QString> &nameMap) { QList<qint32> tags; Tag t; getAll(tags); nameMap.empty(); for (int i=0; i<tags.size(); i++) { get(t,tags[i]); nameMap.insert(t.name, t.guid); } } // Find any invalid parent records void TagTable::findMissingParents(QList<qint32> &lids) { NSqlQuery query(db); db->lockForRead(); query.prepare("select data from datastore where key=:parentKey and data not in (select lid from datastore where key=:guidKey)"); query.bindValue(":parentKey", TAG_PARENT_LID); query.bindValue(":guidKey", TAG_GUID); query.exec(); lids.clear(); while (query.next()) { qint32 lid = query.value(0).toInt(); lids.append(lid); } query.finish(); db->unlock(); } // Remove any invalid parent records void TagTable::cleanupMissingParents() { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from datastore where key=:parentKey and data not in (select lid from datastore where key=:guidKey)"); query.bindValue(":parentKey", TAG_PARENT_LID); query.bindValue(":guidKey", TAG_GUID); query.exec(); query.finish(); db->unlock(); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/tagtable.h�����������������������������������������������������������������������0000664�0000000�0000000�00000011605�13156041044�0016015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef TAGTABLE_H #define TAGTABLE_H #include "global.h" #include <iostream> #include <string> #include <stdio.h> #include <QSqlTableModel> #include <QtSql> #include <QString> #include <QList> #include "sql/databaseconnection.h" #define TAG_GUID 1000 #define TAG_NAME 1001 #define TAG_PARENT_LID 1002 #define TAG_UPDATE_SEQUENCE_NUMBER 1003 #define TAG_ISDIRTY 1004 #define TAG_ISDELETED 1005 #define TAG_OWNING_ACCOUNT 1006 using namespace std; class TagTable { private: DatabaseConnection *db; public: TagTable(DatabaseConnection *db); // Constructor // DB Read Functions qint32 getLid(QString guid); // given a guid, return the lid qint32 getLid(string guid); // Given a guid, return the lid qint32 findByName(string &name, qint32 account); // Find a tag given a name qint32 findByName(QString &name, qint32 account); // Find a tag given a name qint32 findChildren(QList<qint32> &list, QString parentGuid); bool get(Tag &tag, qint32 lid); // Get a tag given a lid bool get(Tag &tag, QString guid); // get a tag given a guid bool get(Tag &tag, string guid); // get a tag given a guid bool isDirty(qint32 lid); // Check if a tag is dirty bool isDirty(QString guid); // Check if a tag is dirty bool isDirty(string guid); // Check if a tag is dirty bool exists(qint32 lid); // Does this tag exist? bool exists(QString guid); // Does this tag exist? bool exists(string guid); // Does this tag exist? qint32 getAll(QList<qint32> &values); // Get all possible tag lids bool getGuid(QString &guid, qint32 lid); // Get a guid for a tag given the lid bool isDeleted(qint32 lid); // is this tag deleted? bool isLinked(qint32 lid); // is this a linked tag? qint32 owningAccount(qint32 lid); // Get the owning account for a tag qint32 getAllDirty(QList<qint32> &lids); // get all dirty tags int getNewUnsequencedCount(); // Get all tags which have never been synchronized void getGuidMap(QHash<QString, QString> &nameMap); // get a hashtable of tag names with the GUID as the key void getNameMap(QHash<QString,QString> &nameMap); // get a hashtable of tag GUIDs with the name as the key void findMissingParents(QList<qint32> &lids); // Find any tags with invalid parent records qint32 getAllInAccount(QList<qint32> &tags, qint32 account); // Find all tags for a specific account void getAllNames(QHash<qint32, QString> *list); // Get a hastable of all tag names by lid // DB Write Functions void setDirty(string guid, bool dirty); // set the note dirty flag void setDirty(QString guid, bool dirty); // set the note dirty flag void setDirty(qint32 lid, bool dirty); // set the note dirty flag void updateGuid(qint32 lid, Guid &guid); // Update a tag's guid void deleteTag(qint32 lid); // delete a tag void expunge(qint32 lid); // really delete a tag void expunge(QString guid); // really delete a tag void expunge(string guid); // really delete a tag qint32 sync(Tag &tag, qint32 account); // Sync a tag with a new record qint32 sync(qint32 lid, Tag &tag, qint32 account); // Sync a tag with a new record qint32 add(qint32 lid, Tag &t, bool isDirty, qint32 account); // Add a new tag void update(Tag &tag, bool dirty); // Update an existing tag void setUpdateSequenceNumber(qint32 lid, qint32 usn); // set the update sequence number void resetLinkedTagsDirty(); // mark all linked tags as not-dirty void cleanupMissingParents(); void cleanupLinkedTags(); }; #endif // TAGTABLE_H ���������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/usertable.cpp��������������������������������������������������������������������0000664�0000000�0000000�00000044065�13156041044�0016561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "usertable.h" #include "nsqlquery.h" #include "sql/databaseconnection.h" #define USER_EVERNOTE_ACCOUNT 1 // Unique Evernote account number #define USER_EMAIL 2 // User email registered with Evernote #define USER_NAME 3 // Name of owner of the account #define USER_TIMEZONE 4 // Timezone of the user #define USER_PRIVILEGE 5 // User privilige level #define USER_CREATED 6 // date the Evernote account was created #define USER_UPDATED 7 // Date the account was last updated #define USER_DELETED 8 // Date the userid was deleted #define USER_ACTIVE 9 // Is the user active? #define USER_SHARD 10 // user's shard id #define USER_USERID 11 // userid #define USER_ACCOUNTING_UPLOAD_LIMIT 100 #define USER_ACCOUNTING_UPLOAD_LIMIT_END 101 #define USER_ATTR_BUSINESS_ADDRESS 200 #define USER_ATTR_CLIP_FULL_PAGE 201 #define USER_ATTR_COMMENTS 202 #define USER_ATTR_CUSTOMER_PROFILE_ID 203 #define USER_ATTR_DAILY_EMAIL_LIMIT 204 #define USER_ATTR_DEFAULT_LATITUDE 205 #define USER_ATTR_DEFAULT_LONGITUDE 206 #define USER_ATTR_DEFAULT_LOCATION 207 #define USER_ATTR_GROUPNAME 208 #define USER_ATTR_INCOMING_EMAIL 209 #define USER_ATTR_PREFERED_COUNTRY 210 #define USER_ATTR_TWITTER_ID 211 #define USER_ATTR_TWITTER_USERNAME 212 #define USER_SYNC_UPLOADED 300 #define USER_SYNC_LAST_DATE 301 #define USER_SYNC_LAST_NUMBER 302 #include <QtSql> #include "global.h" extern Global global; // Default constructor UserTable::UserTable(DatabaseConnection *db) { this->db = db; // Check if the table exists. If not, create it. NSqlQuery sql(db); db->lockForRead(); sql.exec("Select * from sqlite_master where type='table' and name='UserTable';"); if (!sql.next()) { db->unlock(); this->createTable(); } else db->unlock(); } //* Create the NoteTable table. void UserTable::createTable() { QLOG_TRACE() << "Entering UserTable::userTable()"; QLOG_DEBUG() << "Creating table UserTable"; NSqlQuery sql(db); db->lockForWrite(); QString command("Create table UserTable (" + QString("key integer primary key,") + QString("data blob default null collate nocase") + QString(")")); if (!sql.exec(command)) { QLOG_ERROR() << "Creation of UserTable table failed: " << sql.lastError(); } db->unlock(); } // Update the database's user record void UserTable::updateUser(User &user) { QLOG_TRACE_IN(); NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from UserTable where key != :lastdate and key != :lastnumber;"); query.bindValue(":lastdate", USER_SYNC_LAST_DATE); query.bindValue(":lastnumber", USER_SYNC_LAST_NUMBER); query.exec(); if (user.id.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_EVERNOTE_ACCOUNT); qint32 id = user.id; query.bindValue(":data", id); query.exec(); } if (user.email.isSet()) { QString email = user.email; query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_EMAIL); query.bindValue(":data", email); query.exec(); } if (user.name.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); QString name = user.name; query.bindValue(":key", USER_NAME); query.bindValue(":data",name); query.exec(); } if (user.timezone.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_TIMEZONE); QString tz = user.timezone; query.bindValue(":data", tz); query.exec(); } if (user.privilege.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_PRIVILEGE); int priv = user.privilege; query.bindValue(":data", priv); query.exec(); } if (user.created.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_CREATED); qlonglong created = user.created; query.bindValue(":data", created); query.exec(); } if (user.updated.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_UPDATED); qlonglong updated = user.updated; query.bindValue(":data", updated); query.exec(); } if (user.deleted.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_DELETED); qlonglong deleted = user.deleted; query.bindValue(":data",deleted); query.exec(); } if (user.active.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ACTIVE); bool active = user.active; query.bindValue(":data", active); query.exec(); } if (user.username.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_USERID); QString username = user.username; query.bindValue(":data", username); query.exec(); } if (user.shardId.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_SHARD); QString shard = user.shardId; query.bindValue(":data", shard); query.exec(); } if (user.accounting.isSet()) { Accounting accounting = user.accounting; if (accounting.uploadLimit.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ACCOUNTING_UPLOAD_LIMIT); qint32 limit = accounting.uploadLimit; query.bindValue(":data", limit); query.exec(); } if (accounting.uploadLimitEnd.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ACCOUNTING_UPLOAD_LIMIT_END); qlonglong limit = accounting.uploadLimitEnd; query.bindValue(":data",limit); query.exec(); } } if (user.attributes.isSet()) { UserAttributes attributes = user.attributes; if (attributes.groupName.isSet()) { QString groupName = attributes.groupName; query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ATTR_GROUPNAME); query.bindValue(":data", groupName); query.exec(); } if (attributes.dailyEmailLimit.isSet()) { int limit = attributes.dailyEmailLimit; query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ATTR_DAILY_EMAIL_LIMIT); query.bindValue(":data", limit); query.exec(); } if (attributes.preferredCountry.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ATTR_PREFERED_COUNTRY); QString country = attributes.preferredCountry; query.bindValue(":data",country); query.exec(); } if (attributes.defaultLongitude.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ATTR_DEFAULT_LONGITUDE); qlonglong longitude = attributes.defaultLongitude; query.bindValue(":data", longitude); query.exec(); } if (attributes.defaultLatitude.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ATTR_DEFAULT_LATITUDE); qlonglong latitude = attributes.defaultLatitude; query.bindValue(":data", latitude); query.exec(); } if (attributes.businessAddress.isSet()) { query.bindValue(":key", USER_ATTR_BUSINESS_ADDRESS); QString address = attributes.businessAddress; query.bindValue(":data", address); query.exec(); } if (attributes.defaultLocationName.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ATTR_DEFAULT_LOCATION); QString loc = attributes.defaultLocationName; query.bindValue(":data", loc); query.exec(); } if (attributes.businessAddress.isSet()) { QString addr = attributes.businessAddress; query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ATTR_BUSINESS_ADDRESS); query.bindValue(":data", addr); query.exec(); } if (attributes.twitterUserName.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ATTR_TWITTER_USERNAME); QString username = attributes.twitterUserName; query.bindValue(":data", username); query.exec(); } if (attributes.twitterId.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ATTR_TWITTER_ID); QString id = attributes.twitterId; query.bindValue(":data", id); query.exec(); } if (attributes.incomingEmailAddress.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ATTR_INCOMING_EMAIL); QString email = attributes.incomingEmailAddress; query.bindValue(":data", email); query.exec(); } if (attributes.clipFullPage.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ATTR_CLIP_FULL_PAGE); bool clipFullPage = attributes.clipFullPage; query.bindValue(":data", clipFullPage); query.exec(); } // query.prepare("Insert into UserTable (key, data) values (:key, :data);"); // query.bindValue(":key", USER_ATTR_CUSTOMER_PROFILE_ID); // query.bindValue(":data", QString::number(user.attributes.customerProfileId)); // query.exec(); if (attributes.comments.isSet()) { query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_ATTR_COMMENTS); QString comments = attributes.comments; query.bindValue(":data", comments); query.exec(); } } query.finish(); db->unlock(); QLOG_TRACE_OUT(); } // Update the database's user record void UserTable::updateSyncState(SyncState s) { NSqlQuery query(db); db->lockForWrite(); query.prepare("Delete from UserTable where key=:key1 or key=:key2 or key=:key3;"); query.bindValue(":key1", USER_SYNC_UPLOADED); query.bindValue(":key2", USER_SYNC_LAST_DATE); query.bindValue(":key3", USER_SYNC_LAST_NUMBER); query.exec(); query.prepare("Insert into UserTable (key, data) values (:key, :data);"); if (s.uploaded.isSet()) { query.bindValue(":key", USER_SYNC_UPLOADED); query.bindValue(":data",qlonglong(s.uploaded)); if (!query.exec()) { QLOG_ERROR() << "Error updating USER_SYNC_UPLOADED : " << query.lastError(); } } query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_SYNC_LAST_DATE); query.bindValue(":data", qlonglong(s.currentTime)); if (!query.exec()) { QLOG_ERROR() << "Error updating USER_SYNC_LAST_DATE : " << query.lastError(); } query.prepare("Insert into UserTable (key, data) values (:key, :data);"); query.bindValue(":key", USER_SYNC_LAST_NUMBER); query.bindValue(":data", s.updateCount); if (!query.exec()) { QLOG_ERROR() << "Error updating USER_SYNC_LAST_NUMBER : " << query.lastError(); } query.finish(); db->unlock(); } // Get the last date we synchronized qlonglong UserTable::getLastSyncDate() { NSqlQuery query(db); query.prepare("Select data from UserTable where key=:key"); db->lockForRead(); query.bindValue(":key", USER_SYNC_LAST_DATE); query.exec(); if (query.next()) { qlonglong value = query.value(0).toLongLong(); query.finish(); db->unlock(); return value; } query.finish(); db->unlock(); return 0; } // Get the last sequence number qint32 UserTable::getLastSyncNumber() { qint32 value = 0; NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from UserTable where key=:key"); query.bindValue(":key", USER_SYNC_LAST_NUMBER); query.exec(); if (query.next()) { value = query.value(0).toInt(); query.finish(); db->unlock(); return value; } query.finish(); db->unlock(); return value; } // update the last date we synchronized void UserTable::updateLastSyncDate(long date) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from UserTable where key=:key"); query.bindValue(":key", USER_SYNC_LAST_DATE); query.exec(); query.prepare("Insert into UserTable (key, data) values (:key, :data)"); query.bindValue(":key", USER_SYNC_LAST_DATE); query.bindValue(":data", qlonglong(date)); query.exec(); query.finish(); db->unlock(); } // update the last sequence number void UserTable::updateLastSyncNumber(qint32 value) { NSqlQuery query(db); db->lockForWrite(); query.prepare("delete from UserTable where key=:key"); query.bindValue(":key", USER_SYNC_LAST_NUMBER); query.exec(); query.prepare("Insert into UserTable (key, data) values (:key, :data)"); query.bindValue(":key", USER_SYNC_LAST_NUMBER); query.bindValue(":data", value); query.exec(); query.finish(); db->unlock(); } // Fetch the user record fro the DB void UserTable::getUser(User &user) { NSqlQuery query(db); db->lockForRead(); query.exec("Select key, data from UserTable;"); Accounting accounting; while (query.next()) { if (query.value(0) == USER_EVERNOTE_ACCOUNT) { user.id = QVariant(query.value(1)).toInt(); } if (query.value(0) == USER_EMAIL) { user.email = QVariant(query.value(1)).toString(); } if (query.value(0) == USER_NAME) { user.name = QVariant(query.value(1)).toString(); } if (query.value(0) == USER_TIMEZONE) { user.timezone = QVariant(query.value(1)).toString(); } if (query.value(0) == USER_PRIVILEGE) { int priv = QVariant(query.value(1)).toInt(); user.privilege = PrivilegeLevel::NORMAL; if (priv == PrivilegeLevel::ADMIN) user.privilege = PrivilegeLevel::ADMIN; if (priv == PrivilegeLevel::PREMIUM) user.privilege = PrivilegeLevel::PREMIUM; if (priv == PrivilegeLevel::MANAGER) user.privilege = PrivilegeLevel::MANAGER; if (priv == PrivilegeLevel::SUPPORT) user.privilege = PrivilegeLevel::SUPPORT; } if (query.value(0) == USER_CREATED) { user.created = QVariant(query.value(1)).toInt(); } if (query.value(0) == USER_UPDATED) { user.updated = QVariant(query.value(1)).toInt(); } if (query.value(0) == USER_DELETED) { user.deleted = QVariant(query.value(1)).toInt(); } if (query.value(0) == USER_ACTIVE) { user.active = QVariant(query.value(1)).toInt(); } if (query.value(0) == USER_SHARD) { user.shardId = QVariant(query.value(1)).toString(); } if (query.value(0) == USER_USERID) { user.username = QVariant(query.value(1)).toString(); } if (query.value(0) == USER_ACCOUNTING_UPLOAD_LIMIT) { accounting.uploadLimit =query.value(1).toLongLong(); user.accounting = accounting; } if (query.value(0) == USER_ACCOUNTING_UPLOAD_LIMIT_END) { accounting.uploadLimitEnd = query.value(1).toLongLong(); user.accounting = accounting; } } query.finish(); db->unlock(); } // Get the amount of data the user has uploaded qlonglong UserTable::getUploadAmt() { qint32 retval = 0; NSqlQuery query(db); db->lockForRead(); query.prepare("Select data from usertable where key=:key"); query.bindValue(":key", USER_SYNC_UPLOADED); query.exec(); if (query.next()) retval = query.value(0).toLongLong(); query.finish(); db->unlock(); return retval; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/sql/usertable.h����������������������������������������������������������������������0000664�0000000�0000000�00000003702�13156041044�0016217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef USERTABLE_H #define USERTABLE_H #include <QtGlobal> #if QT_VERSION < 0x050000 #include <Q_LONG> #endif #include <QSqlDatabase> #include "sql/databaseconnection.h" #include <qevercloud/include/QEverCloud.h> using namespace qevercloud; class UserTable { private: void createTable(); DatabaseConnection *db; public: UserTable(DatabaseConnection *db); // Default constructor // DB Read Functions qlonglong getLastSyncDate(); // Get the last date the user did a sync qint32 getLastSyncNumber(); // Get the last high sequence number void getUser(User &user); // Get the user record qlonglong getUploadAmt(); // Get the amount uploaded // DB Write Functions void updateUser(User &user); // Save the user record void updateSyncState(SyncState s); // Update the sync state void updateLastSyncDate(long date); // Update the last sync date void updateLastSyncNumber(qint32 usn); // Update the last sync number }; #endif // USER_H ��������������������������������������������������������������nixnote2-2.0.2/theme.ini����������������������������������������������������������������������������0000664�0000000�0000000�00000033715�13156041044�0015073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [Classic NixNote] windowIcon = /usr/share/nixnote2/images/classic-theme/windowIcon.png stackIcon =/usr/share/nixnote2/images/classic-theme/stack-green.png notebookSmallIcon = /usr/share/nixnote2/images/classic-theme/notebook-green.png [Material Light] windowIcon=/usr/share/nixnote2/images/material-light/windowIcon.png passwordIcon=/usr/share/nixnote2/images/material-light/password.png homeIcon=/usr/share/nixnote2/images/material-light/home.png leftArrowIcon=/usr/share/nixnote2/images/material-light/left_arrow.png rightArrowIcon=/usr/share/nixnote2/images/material-light/right_arrow.png synchronizeIcon=/usr/share/nixnote2/images/material-light/synchronize.png filecloseIcon=/usr/share/nixnote2/images/material-light/fileclose.png tagIcon=/usr/share/nixnote2/images/material-light/tag.png searchIcon=/usr/share/nixnote2/images/material-light/lens.png trashIcon=/usr/share/nixnote2/images/material-light/trash.png attributesIcon=/usr/share/nixnote2/images/material-light/attribute.png upArrowSmallIcon=/usr/share/nixnote2/images/material-light/up_arrow_small.png downArrowSmallIcon=/usr/share/nixnote2/images/material-light/down_arrow_small.png undoIcon=/usr/share/nixnote2/images/material-light/undo.png redoIcon=/usr/share/nixnote2/images/material-light/redo.png boldIcon=/usr/share/nixnote2/images/material-light/bold.png bulletListIcon=/usr/share/nixnote2/images/material-light/bulletList.png copyIcon=/usr/share/nixnote2/images/material-light/copy.png cutIcon=/usr/share/nixnote2/images/material-light/cut.png hlineIcon=/usr/share/nixnote2/images/material-light/hline.png fontHighlightIcon=/usr/share/nixnote2/images/material-light/fontHilight.png fontColorIcon=/usr/share/nixnote2/images/material-light/fontColor.png shiftRightIcon=/usr/share/nixnote2/images/material-light/indent.png centerAlignIcon=/usr/share/nixnote2/images/material-light/justifyCenter.png leftAlignIcon=/usr/share/nixnote2/images/material-light/justifyLeft.png rightAlignIcon=/usr/share/nixnote2/images/material-light/justifyRight.png fullAlignIcon=/usr/share/nixnote2/images/material-light/justifyFull.png linkIcon=/usr/share/nixnote2/images/material-light/link.png numberListIcon=/usr/share/nixnote2/images/material-light/numberList.png shiftLeftIcon=/usr/share/nixnote2/images/material-light/outdent.png underlineIcon=/usr/share/nixnote2/images/material-light/underline.png strikethroughIcon=/usr/share/nixnote2/images/material-light/strikethrough.png spellCheckIcon=/usr/share/nixnote2/images/material-light/spellCheck.png pasteIcon=/usr/share/nixnote2/images/material-light/paste.png todoIcon=/usr/share/nixnote2/images/material-light/todo.png italicsIcon=/usr/share/nixnote2/images/material-light/italic.png newNoteIcon=/usr/share/nixnote2/images/material-light/newNote.png trunkIcon=/usr/share/nixnote2/images/material-light/trunk.png usageIcon=/usr/share/nixnote2/images/material-light/usage.png blackDotIcon=/usr/share/nixnote2/images/material-light/black_dot.png notebookSmallIcon=/usr/share/nixnote2/images/material-light/notebookSmall.png notebookLocalIcon=/usr/share/nixnote2/images/material-light/local-notebook.png notebookLinkedIcon=/usr/share/nixnote2/images/material-light/linked-notebook.png notebookConflictIcon=/usr/share/nixnote2/images/material-light/notebook-conflict.png notebookSharedIcon=/usr/share/nixnote2/images/material-light/public-notebook.png stackIcon=/usr/share/nixnote2/images/material-light/stack.png silhouetteIcon=/usr/share/nixnote2/images/material-light/silhouette.png eraserIcon=/usr/share/nixnote2/images/material-light/eraser.png gridIcon=/usr/share/nixnote2/images/material-light/grid.png navigationIcon=/usr/share/nixnote2/images/material-light/navigation.png splashLogoImage=/usr/share/nixnote2/images/material-light/splash_logo.png alarmclockIcon=/usr/share/nixnote2/images/material-light/alarmclock.png webcamIcon=/usr/share/nixnote2/images/material-light/webcam.png printerIcon=/usr/share/nixnote2/images/material-light/printer.png deleteIcon=/usr/share/nixnote2/images/material-light/delete.png expandedIcon=/usr/share/nixnote2/images/material-light/expanded.png collapsedIcon=/usr/share/nixnote2/images/material-light/collapsed.png htmlentitiesIcon=/usr/share/nixnote2/images/material-light/htmlentities.png screenCaptureIcon=/usr/share/nixnote2/images/material-light/screenCapture.png favoritesIcon=/usr/share/nixnote2/images/material-light/favorites.png subscriptIcon=/usr/share/nixnote2/images/material-light/subscript.png superscriptIcon=/usr/share/nixnote2/images/material-light/superscript.png dateTime=/usr/share/nixnote2/images/material-light/datetime.png emailIcon=/usr/share/nixnote2/images/material-light/emailIcon.png trayIcon=/usr/share/nixnote2/images/material-light/trayicon.png editorFontColor=black editorBackgroundColor=white [Ubuntu Purple - 1] themeInformation=/usr/share/nixnote2/images/purple-theme/purpleThemeInfo.html synchronizeIcon = /usr/share/nixnote2/images/purple-theme/synchronize.png homeIcon = /usr/share/nixnote2/images/purple-theme/home.png notebookSmallIcon = /usr/share/nixnote2/images/purple-theme/notebook.png leftArrowIcon=/usr/share/nixnote2/images/purple-theme/left_arrow.png rightAccowIcon=/usr/share/nixnote2/images/purple-theme/right_arrow.png stackIcon =/usr/share/nixnote2/images/purple-theme/stack-purple.png windowIcon=/usr/share/nixnote2/images/purple-theme/windowIcon1.png [Ubuntu Purple - 2] themeInformation=/usr/share/nixnote2/images/purple-theme/purpleThemeInfo.html homeIcon = /usr/share/nixnote2/images/purple-theme/home.png notebookSmallIcon = /usr/share/nixnote2/images/purple-theme/notebook.png leftArrowIcon=/usr/share/nixnote2/images/purple-theme/left_arrow.png rightArrowIcon=/usr/share/nixnote2/images/purple-theme/right_arrow.png stackIcon =/usr/share/nixnote2/images/purple-theme/stack-purple.png windowIcon=/usr/share/nixnote2/images/purple-theme/windowIcon2.png [Ubuntu Purple - 3] themeInformation=/usr/share/nixnote2/images/purple-theme/purpleThemeInfo.html synchronizeIcon = /usr/share/nixnote2/images/purple-theme/synchronize.png homeIcon = /usr/share/nixnote2/images/purple-theme/home.png notebookSmallIcon = /usr/share/nixnote2/images/purple-theme/notebook.png leftArrowIcon=/usr/share/nixnote2/images/purple-theme/left_arrow.png rightArrowIcon=/usr/share/nixnote2/images/purple-theme/right_arrow.png stackIcon =/usr/share/nixnote2/images/purple-theme/stack-purple.png windowIcon=/usr/share/nixnote2/images/purple-theme/windowIcon3.png [Ubuntu Purple - 4] themeInformation=/usr/share/nixnote2/images/purple-theme/purpleThemeInfo.html synchronizeIcon = /usr/share/nixnote2/images/purple-theme/synchronize.png homeIcon = /usr/share/nixnote2/images/purple-theme/home.png notebookSmallIcon = /usr/share/nixnote2/images/purple-theme/notebook.png leftArrowIcon=/usr/share/nixnote2/images/purple-theme/left_arrow.png rightArrowIcon=/usr/share/nixnote2/images/purple-theme/right_arrow.png stackIcon =/usr/share/nixnote2/images/purple-theme/stack-purple.png windowIcon=/usr/share/nixnote2/images/purple-theme/windowIcon4.png [Ubuntu Purple - 5] themeInformation=/usr/share/nixnote2/images/purple-theme/purpleThemeInfo.html synchronizeIcon = /usr/share/nixnote2/images/purple-theme/synchronize.png homeIcon = /usr/share/nixnote2/images/purple-theme/home.png notebookIcon = /usr/share/nixnote2/images/purple-theme/notebook.png leftArrowIcon=/usr/share/nixnote2/images/purple-theme/left_arrow.png rightArrowIcon=/usr/share/nixnote2/images/purple-theme/right_arrow.png stackIcon =/usr/share/nixnote2/images/purple-theme/stack-purple.png windowIcon=/usr/share/nixnote2/images/purple-theme/windowIcon5.png [Dark Editor] editorFontColor=white editorBackgroundColor=black editorCss=editor_dark.css #[SampleTheme] #windowIcon=/usr/share/nixnote2/images/windowIcon0.png # Main window icon #passwordIcon=/usr/share/nixnote2/images/password.png # Small password lock icon #homeIcon=/usr/share/nixnote2/images/home.png # Home button on main button bar #leftArrowIcon=/usr/share/nixnote2/images/left_arrow.png # Left arrow on main button bar #rightArrowIcon=/usr/share/nixnote2/images/right_arrow.png # Right arrow on main button bar #synchronizeIcon=/usr/share/nixnote2/images/synchronize.png # Spinning sync button #filecloseIcon=/usr/share/nixnote2/images/fileclose.png # Very small "x" next to tag names in the editor #tagIcon=/usr/share/nixnote2/images/tag.png # Icon for tags #searchIcon=/usr/share/nixnote2/images/lens.png # Search icon #trashIcon=/usr/share/nixnote2/images/trash.png # trashcan for deleted notes #attributesIcon=/usr/share/nixnote2/images/attribute.png # Gear icon for attributes #upArrowSmallIcon=/usr/share/nixnote2/images/up_arrow_small.png # Small up arrow #downArrowSmallIcon=/usr/share/nixnote2/images/down_arrow_small.png # Small down arrow #undoIcon=/usr/share/nixnote2/images/undo.png # Undo button on editor button bar #redoIcon=/usr/share/nixnote2/images/redo.png # Redo button on editor button bar #boldIcon=/usr/share/nixnote2/images/bold.png # Bold icon on editor button bar #bulletListIcon=/usr/share/nixnote2/images/bulletList.png # Bullet list icon on editor button bar #copyIcon=/usr/share/nixnote2/images/copy.png # Copy icon on editor button bar #cutIcon=/usr/share/nixnote2/images/cut.png # Cut icon on editor button bar #hlineIcon=/usr/share/nixnote2/images/hline.png # Horizontal line on editor button bar #fontHighlightIcon=/usr/share/nixnote2/images/fontHilight.png # Font Hilight icon on editor button bar #fontColorIcon=/usr/share/nixnote2/images/fontColor.png # Font color icon on editor button bar #shiftRightIcon=/usr/share/nixnote2/images/indent.png # Indent button on editor button bar #centerAlignIcon=/usr/share/nixnote2/images/justifyCenter.png # Center justify icon on editor button bar #leftAlignIcon=/usr/share/nixnote2/images/justifyLeft.png # Left justify icon on editor button bar #rightAlignIcon=/usr/share/nixnote2/images/justifyRight.png # Right justify on icon button bar #linkIcon=/usr/share/nixnote2/images/link.png # Paper clip link icon on editor button bar #numberListIcon=/usr/share/nixnote2/images/numberList.png # Number list on icon on editor button bar #shiftLeftIcon=/usr/share/nixnote2/images/outdent.png # Outdent icon on editor button bar #underlineIcon=/usr/share/nixnote2/images/underline.png # Underline icon on editor button bar #strikethroughIcon=/usr/share/nixnote2/images/strikethrough.png # Strikethrough icon on editor button bar #spellCheckIcon=/usr/share/nixnote2/images/spellCheck.png # Spell check on editor button bar #pasteIcon=/usr/share/nixnote2/images/paste.png # Paste icon on editor button bar #todoIcon=/usr/share/nixnote2/images/todo.png # To-do icon on editor button bar #italicsIcon=/usr/share/nixnote2/images/italic.png # Italics icon on editor button bar #newNoteIcon=/usr/share/nixnote2/images/newNote.png # New note icon on main button bar #trunkIcon=/usr/share/nixnote2/images/trunk.png # Open Evernote Trunk icon #usageIcon=/usr/share/nixnote2/images/usage.png # Usage icon on main button bar #blackDotIcon=/usr/share/nixnote2/images/black_dot.png # Small black dot used in main note list #notebookSmallIcon=/usr/share/nixnote2/images/iconza-notebook-green.png # Small notebook icon #notebookLocalIcon=/usr/share/nixnote2/images/local-notebook.png # local notebook icon #notebookLinkedIcon=/usr/share/nixnote2/images/linked-notebook.png # linked notebook icon #notebookConflictIcon=/usr/share/nixnote2/images/notebook-conflict.png # conflict notebook icon #notebookSharedIcon=/usr/share/nixnote2/images/public-notebook.png # Public notebook icon #stackIcon=/usr/share/nixnote2/images/stack-green.png # Stack icon #silhouetteIcon=/usr/share/nixnote2/images/silhouette.png # Person outline for linked notebooks #eraserIcon=/usr/share/nixnote2/images/eraser.png # Eraser icon on editor button bar #gridIcon=/usr/share/nixnote2/images/grid.png # Table icon on editor button bar #navigationIcon=/usr/share/nixnote2/images/navigation.png # GPS navigator icon in note editor #splashLogoImage=/usr/share/nixnote2/images/splash_logo.png # Splash screen logo #alarmclockIcon=/usr/share/nixnote2/images/alarmclock.png # Alarm clock icon for reminders #webcamIcon=/usr/share/nixnote2/images/webcam.png # Webcam icon in main button bar #printerIcon=/usr/share/nixnote2/images/printer.png # Printer icon in main button bar #deleteIcon=/usr/share/nixnote2/images/delete.png # Delete note icon #expandedIcon=/usr/share/nixnote2/images/expanded.png # Down arrow used to expand & collapse note attribute editor #collapsedIcon=/usr/share/nixnote2/images/collapsed.png # Up arrow used to expand & collapse note attribute editor #htmlentitiesIcon=/usr/share/nixnote2/images/htmlentities.png # HTML entities icon on editor button bar #screenCaptureIcon=/usr/share/nixnote2/images/screenCapture.png # Icon for srceen capture in tray icon #favoritesIcon=/usr/share/nixnote2/images/favorites.png # Favorites icon #trayIcon=/usr/share/nixnote2/images/trayicon.png # Small tray icon. #editorFontColor=white # Editor font color #editorBackgroundColor=black # Editor background color ���������������������������������������������������nixnote2-2.0.2/threads/�����������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13156041044�0014711�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/threads/browserrunner.cpp������������������������������������������������������������0000664�0000000�0000000�00000003312�13156041044�0020331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2017 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "browserrunner.h" #include "global.h" #include "utilities/nuuid.h" #include "utilities/noteindexer.h" #include "sql/notetable.h" extern Global global; BrowserRunner::BrowserRunner(QObject *parent) : QObject(parent) { isIdle = true; init = false; } void BrowserRunner::initialize() { init = true; QLOG_DEBUG() << "Starting CounterRunner"; db = new DatabaseConnection("browserrunner-"+NUuid().create()); QLOG_DEBUG() << "CounterRunner initialization complete."; } void BrowserRunner::updateNoteContent(qint32 lid, QString content, bool isDirty) { isIdle = false; if (!init) initialize(); QLOG_DEBUG() << "Updating note content"; NoteTable table(db); table.updateNoteContent(lid, content, isDirty); isIdle = true; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/threads/browserrunner.h��������������������������������������������������������������0000664�0000000�0000000�00000000710�13156041044�0017775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef BROWSERRUNNER_H #define BROWSERRUNNER_H #include <QObject> #include "sql/databaseconnection.h" class BrowserRunner : public QObject { Q_OBJECT private: DatabaseConnection *db; bool init; void initialize(); public: explicit BrowserRunner(QObject *parent = 0); bool keepRunning; bool isIdle; signals: public slots: void updateNoteContent(qint32 lid, QString content, bool isDirty); }; #endif // BROWSERRUNNER_H ��������������������������������������������������������nixnote2-2.0.2/threads/counterrunner.cpp������������������������������������������������������������0000664�0000000�0000000�00000011535�13156041044�0020333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "counterrunner.h" #include "sql/notetable.h" #include "sql/notebooktable.h" #include "sql/nsqlquery.h" #include "sql/tagtable.h" #include <QtSql> CounterRunner::CounterRunner(QObject *parent) : QObject(parent) { init = false; } void CounterRunner::initialize() { if (global.countBehavior == Global::CountNone) return; init = true; QLOG_DEBUG() << "Starting CounterRunner"; db = new DatabaseConnection("counterrunner"); QLOG_DEBUG() << "CounterRunner initialization complete."; } void CounterRunner::countAll() { if (global.countBehavior == Global::CountNone) return; QLOG_TRACE_IN(); if (!init) initialize(); this->countNotebooks(); this->countTags(); this->countTrash(); QLOG_TRACE_OUT(); } void CounterRunner::countTrash() { if (global.countBehavior == Global::CountNone) return; QLOG_TRACE_IN(); if (!init) initialize(); NoteTable ntable(db); QList<qint32> lids; emit trashTotals(ntable.getAllDeleted(lids)); QLOG_TRACE_OUT(); } void CounterRunner::countNotebooks() { if (global.countBehavior == Global::CountNone) return; QLOG_TRACE_IN(); if (!init) initialize(); // First get every possible notebook NotebookTable nTable(db); QList<qint32> lids; nTable.getAll(lids); // Next, get the totals of everything possible QHash<qint32, qint32> allNotebooks; for (int i=0; i<lids.size(); i++) { allNotebooks.insert(lids.at(i), 0); } NSqlQuery query(db); query.exec(" select data, count(data) from datastore where key=5011 and lid not in (select lid from datastore where data=0 and key=5010) group by data;"); while (query.next()) { qint32 lid = query.value(0).toInt(); qint32 total = query.value(1).toInt(); allNotebooks[lid] = total; } query.exec("select notebooklid, count(notebooklid) from notetable where lid in (select lid from filter) and lid not in (select lid from datastore where data=0 and key=5010) group by notebooklid;"); while(query.next()) { qint32 lid = query.value(0).toInt(); emit notebookTotals(lid, query.value(1).toInt(), allNotebooks[lid]); lids.removeAll(lid); } // The ones that are left have a zero count for (int i=0; i<lids.size(); i++) emit(notebookTotals(lids[i], 0, allNotebooks[lids[i]])); emit(notebookTotals(-1, -1, -1)); QLOG_TRACE_OUT(); } void CounterRunner::countTags() { if (global.countBehavior == Global::CountNone) return; QLOG_TRACE_IN(); if (!init) initialize(); // First get every possible tag TagTable tTable(db); QList<qint32> lids; tTable.getAll(lids); // Next, get the totals of everything possible QHash<qint32, qint32> allTags; for (int i=0; i<lids.size(); i++) { allTags.insert(lids.at(i), 0); } NSqlQuery query(db); query.exec(" select data, count(data) from datastore where key=5012 and lid not in (select lid from datastore where data=0 and key=5010) group by data;"); while (query.next()) { qint32 lid = query.value(0).toInt(); qint32 total = query.value(1).toInt(); allTags[lid] = total; } // Start counting query.prepare("select data, count(lid) from datastore where key=:key and lid in (select lid from filter) and lid not in (select lid from datastore where data=0 and key=5010) group by data;"); query.bindValue(":key", NOTE_TAG_LID); query.exec(); while(query.next()) { qint32 lid = query.value(0).toInt(); emit tagTotals(lid, query.value(1).toInt(), allTags[lid]); lids.removeAll(lid); } // The ones that are left have a zero count, so we reset them for (int i=0; i<lids.size(); i++) emit(tagTotals(lids[i], 0, allTags[lids[i]])); // Finally, emit that we are done so unassigned tags can be hidden emit(tagCountComplete()); QLOG_TRACE_OUT(); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/threads/counterrunner.h��������������������������������������������������������������0000664�0000000�0000000�00000003350�13156041044�0017774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef COUNTERRUNNER_H #define COUNTERRUNNER_H #include <QThread> #include "global.h" #include <QPair> #include <QList> #include "sql/databaseconnection.h" extern Global global; class CounterRunner : public QObject { Q_OBJECT private: QList<QPair<qint32, qint32>*> *notebookCounts; QList<QPair<qint32, qint32>*> *tagCounts; qint32 trashCounts; DatabaseConnection *db; void initialize(); bool init; public: explicit CounterRunner(QObject *parent = 0); bool keepRunning; signals: void trashTotals(qint32); void notebookTotals(qint32, qint32, qint32); void tagTotals(qint32, qint32, qint32); void tagCountComplete(); public slots: void countAll(); void countTrash(); void countNotebooks(); void countTags(); }; #endif // COUNTERTHREAD_H ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/threads/indexrunner.cpp��������������������������������������������������������������0000664�0000000�0000000�00000041125�13156041044�0017761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "indexrunner.h" #include "global.h" #include "sql/notetable.h" #include "sql/nsqlquery.h" #include "sql/resourcetable.h" #include <QTextDocument> #include <QtXml> #if QT_VERSION < 0x050000 #include <poppler-qt4.h> #else #include <poppler-qt5.h> #endif extern Global global; using namespace Poppler; // Generic constructor IndexRunner::IndexRunner() { init = false; officeFound = false; // temporarily disabled to test performance impact this->pauseIndexing = false; this->textDocument = NULL; this->enableIndexing = true; this->indexHash = NULL; this->keepRunning = true; this->db = NULL; //this->indexTimer = NULL; this->iAmBusy = false; } // Destructor IndexRunner::~IndexRunner() { delete indexHash; } // Main thread runner. This just basically starts up the event queue. Everything else // is done via events signaled from the main thread. void IndexRunner::initialize() { //moveToThread(this); keepRunning = true; pauseIndexing = false; enableIndexing = global.enableIndexing; init = true; iAmBusy = false; QLOG_DEBUG() << "Starting IndexRunner"; db = new DatabaseConnection("indexrunner"); //indexTimer = new QTimer(); //indexTimer->setInterval(global.minIndexInterval); //connect(indexTimer, SIGNAL(timeout()), this, SLOT(index())); //indexTimer->start(); textDocument = new QTextDocument(); indexHash = new QHash<qint32, IndexRecord*>(); QLOG_DEBUG() << "Indexrunner initialized."; } // The index timer has expired. Look for any unindexed notes or resources void IndexRunner::index() { if (!enableIndexing) return; if (!keepRunning || pauseIndexing) { return; } if (!init) initialize(); if (iAmBusy) return; //indexTimer->stop(); // Stop the timer because we are already working //indexTimer->setInterval(global.minIndexInterval); busy(true,false); QList<qint32> lids; NoteTable noteTable(db); ResourceTable resourceTable(db); bool endMsgNeeded = false; int countPause = global.indexNoteCountPause; QList<qint32> finishedLids; // Get any unindexed notes if (keepRunning && !pauseIndexing && noteTable.getIndexNeeded(lids) > 0) { QApplication::processEvents(); endMsgNeeded = true; QLOG_DEBUG() << "Unindexed Notes found: " << lids.size(); // Index any undindexed note content. for (int i=0; keepRunning && !pauseIndexing && i<lids.size(); i++) { QApplication::processEvents(); Note n; noteTable.get(n, lids[i], false, false); indexNote(lids[i],n); finishedLids.append(lids[i]); if (countPause <=0) { flushCache(); for (int j=0; j<finishedLids.size(); j++) noteTable.setIndexNeeded(finishedLids[j], false); //indexTimer->start(); busy(false,false); return; } countPause--; } } if (keepRunning && !pauseIndexing) flushCache(); for (int j=0; !pauseIndexing && keepRunning && j<finishedLids.size(); j++) noteTable.setIndexNeeded(finishedLids[j], false); lids.clear(); // Clear out the list so we can start on resources if (!keepRunning || pauseIndexing) { //indexTimer->start(); busy(false,false); return; } countPause = global.indexResourceCountPause; finishedLids.clear(); // Start indexing resources if (keepRunning && !pauseIndexing && resourceTable.getIndexNeeded(lids) > 0) { endMsgNeeded = true; // Index each resource that is needed. for (int i=0; keepRunning && !pauseIndexing && i<lids.size(); i++) { QApplication::processEvents(); Resource r; resourceTable.get(r, lids.at(i), false); qint32 noteLid = noteTable.getLid(r.noteGuid); indexRecognition(noteLid, r); QString mime = ""; if (r.mime.isSet()) mime = r.mime; if (mime == "application/pdf") indexPdf(noteLid, r); else { if (mime.startsWith("application", Qt::CaseInsensitive)) indexAttachment(noteLid, r); } finishedLids.append(lids[i]); if (countPause <=0) { flushCache(); for (int j=0; keepRunning && !pauseIndexing && j<finishedLids.size(); j++) { resourceTable.setIndexNeeded(finishedLids[j], false); } busy(false,false); //indexTimer->start(); return; } countPause--; } } if (!keepRunning || pauseIndexing) { busy(false,false); //indexTimer->start(); return; } if (keepRunning && !pauseIndexing) flushCache(); for (int j=0; keepRunning && !pauseIndexing && j<finishedLids.size(); j++) { resourceTable.setIndexNeeded(finishedLids[j], false); } if (endMsgNeeded) { QLOG_DEBUG() << "Indexing completed"; } busy(false,true); //indexTimer->setInterval(global.maxIndexInterval); //indexTimer->start(); } // This indexes the actual note. void IndexRunner::indexNote(qint32 lid, Note &n) { if (n.title.isSet()) { QLOG_DEBUG() << "Indexing note: " << n.title; } QString content = ""; if (n.content.isSet()) content = n.content; //.replace(QString("\n"), QString(" ")); // Start looking through the note qint32 startPos = content.indexOf(QChar('<')); qint32 endPos = content.indexOf(QChar('>'),startPos)+1; content.remove(startPos,endPos-startPos); // Remove encrypted text while (keepRunning && !pauseIndexing && content.contains("<en-crypt")) { startPos = content.indexOf("<en-crypt"); endPos = content.indexOf("</en-crypt>") + 11; content = content.mid(0,startPos)+content.mid(endPos); } // Remove any XML tags while (keepRunning && !pauseIndexing && content.contains(QChar('<'))) { startPos = content.indexOf(QChar('<')); endPos = content.indexOf(QChar('>'),startPos)+1; content.remove(startPos,endPos-startPos); }; if (!keepRunning || pauseIndexing) { //indexTimer->start(); return; } // Get the content as an HTML doc. textDocument->setHtml(content); QString title = ""; if (n.title.isSet()) title = n.title; content = textDocument->toPlainText() + " " + title; IndexRecord *rec = new IndexRecord(); rec->content = content; rec->source = "text"; rec->weight = 100; rec->lid = lid; if (indexHash->contains(lid)) { delete indexHash->value(lid); indexHash->remove(lid); } indexHash->insert(lid, rec); } // Index any resources void IndexRunner::indexRecognition(qint32 lid, Resource &r) { if (!keepRunning || pauseIndexing) { //indexTimer->start(); return; } // Add filename or source url to search index if (r.attributes.isSet()) { NSqlQuery sql(db); ResourceAttributes a = r.attributes; if (a.fileName.isSet()) { sql.prepare("Insert into SearchIndex (lid, weight, source, content) values (:lid, :weight, :source, :content)"); sql.bindValue(":lid", lid); sql.bindValue(":weight", 100); sql.bindValue(":source", "recognition"); sql.bindValue(":content", QString(a.fileName)); sql.exec(); } if (a.sourceURL.isSet()) { sql.prepare("Insert into SearchIndex (lid, weight, source, content) values (:lid, :weight, :source, :content)"); sql.bindValue(":lid", lid); sql.bindValue(":weight", 100); sql.bindValue(":source", "recognition"); sql.bindValue(":content", QString(a.sourceURL)); sql.exec(); } } // Make sure we have something to look through. Data recognition; if (r.recognition.isSet()) recognition = r.recognition; if (!recognition.body.isSet()) return; QDomDocument doc; QString emsg; doc.setContent(recognition.body, &emsg); // look for text tags QDomNodeList anchors = doc.documentElement().elementsByTagName("t"); #if QT_VERSION < 0x050000 for (unsigned int i=0; keepRunning && !pauseIndexing && i<anchors.length(); i++) { #else for (int i=0; keepRunning && !pauseIndexing && i<anchors.length(); i++) { #endif QApplication::processEvents(); QDomElement enmedia = anchors.at(i).toElement(); QString weight = enmedia.attribute("w"); QString text = enmedia.text(); if (text != "") { IndexRecord *rec = new IndexRecord(); rec->weight = weight.toInt(); rec->lid = lid; rec->content = text; rec->source = "recognition"; if (indexHash->contains(lid)) { delete indexHash->value(lid); indexHash->remove(lid); } indexHash->insert(lid, rec); } } } // Index any PDFs that are attached. Basically it turns the PDF into text and adds it the same // way as a note's body void IndexRunner::indexPdf(qint32 lid, Resource &r) { if (!global.indexPDFLocally) return; if (!keepRunning || pauseIndexing) { //indexTimer->start(); return; } ResourceTable rtable(db); qint32 reslid = rtable.getLid(r.guid); if (lid <= 0) { //indexTimer->start(); return; } QString file = global.fileManager.getDbaDirPath() + QString::number(reslid) +".pdf"; QString text = ""; Poppler::Document *doc = Poppler::Document::load(file); if (doc == NULL || doc->isEncrypted() || doc->isLocked()) { //indexTimer->start(); return; } for (int i=0; keepRunning && !pauseIndexing && i<doc->numPages(); i++) { QRectF rect; text = text + doc->page(i)->text(rect) + QString(" "); } IndexRecord *rec = new IndexRecord(); rec->content = text; rec->source = "recognition"; rec->weight = 100; rec->lid = lid; if (indexHash->contains(lid)) { delete indexHash->value(lid); indexHash->remove(lid); } indexHash->insert(lid, rec); } // Index any files that are attached. void IndexRunner::indexAttachment(qint32 lid, Resource &r) { if (!officeFound) return; QLOG_DEBUG() << "indexing attachment to note " << lid; if (!keepRunning || pauseIndexing) { //indexTimer->start(); return; } ResourceTable rtable(db); qint32 reslid = rtable.getLid(r.guid); if (lid <= 0) { //indexTimer->start(); return; } QLOG_DEBUG() << "Resource " << reslid; QString extension = ""; ResourceAttributes attributes; if (r.attributes.isSet()) attributes = r.attributes; if (attributes.fileName.isSet()) { extension = attributes.fileName; int i = extension.indexOf("."); if (i != -1) extension = extension.mid(i); } if (extension != ".doc" && extension != ".xls" && extension != ".ppt" && extension != ".docx" && extension != ".xlsx" && extension != ".pptx" && extension != ".pps" && extension != ".pdf" && extension != ".odt" && extension != ".odf" && extension != ".ott" && extension != ".odm" && extension != ".html" && extension != ".txt" && extension != ".oth" && extension != ".ods" && extension != ".ots" && extension != ".odg" && extension != ".otg" && extension != ".odp" && extension != ".otp" && extension != ".odb" && extension != ".oxt" && extension != ".htm" && extension != ".docm") return; QString file = global.fileManager.getDbaDirPath() + QString::number(reslid) +extension; QFile dataFile(file); if (!dataFile.exists()) { QDir dir(global.fileManager.getDbaDirPath()); QStringList filterList; filterList.append(QString::number(lid)+".*"); QStringList list= dir.entryList(filterList, QDir::Files); if (list.size() > 0) { file = global.fileManager.getDbaDirPath()+list[0]; } } QString outDir = global.fileManager.getTmpDirPath(); QProcess sofficeProcess; QString cmd = "soffice --headless --convert-to txt:\"Text\" --outdir " +outDir + " " +file; sofficeProcess.start(cmd, QIODevice::ReadWrite|QIODevice::Unbuffered); QLOG_DEBUG() << "Starting soffice "; sofficeProcess.waitForStarted(); QLOG_DEBUG() << "Waiting for completion"; sofficeProcess.waitForFinished(); int rc = sofficeProcess.exitCode(); QLOG_DEBUG() << "soffice Errors:" << sofficeProcess.readAllStandardError(); QLOG_DEBUG() << "soffice Output:" << sofficeProcess.readAllStandardOutput(); QLOG_DEBUG() << "return code:" << rc; if (rc == 255) { QLOG_ERROR() << "soffice not found. Disabling attachment indexing."; this->officeFound = false; return; } QFile txtFile(outDir+QString::number(reslid) +".txt"); if (txtFile.open(QIODevice::ReadOnly)) { QString text; text = txtFile.readAll(); NSqlQuery sql(db); db->lockForWrite(); sql.prepare("Insert into SearchIndex (lid, weight, source, content) values (:lid, :weight, 'recognition', :content)"); sql.bindValue(":lid", lid); sql.bindValue(":weight", 100); if (!global.forceSearchLowerCase) sql.bindValue(":content", text); else sql.bindValue(":content", text.toLower()); QLOG_DEBUG() << "Adding note resource to index DB"; sql.exec(); db->unlock(); txtFile.close(); } QDir dir; dir.remove(outDir+QString::number(reslid) +".txt"); } void IndexRunner::flushCache() { if (indexHash->size() <= 0) return; QDateTime start = QDateTime::currentDateTimeUtc(); NSqlQuery sql(db); db->lockForWrite(); sql.exec("begin"); QHash<qint32, IndexRecord*>::iterator i; // Start adding words to the index. Every 200 sql insertions we do a commit int commitCount = 200; for (i=indexHash->begin(); keepRunning && !pauseIndexing && i!=indexHash->end(); ++i) { qint32 lid = i.key(); IndexRecord *rec = i.value(); qint32 weight = rec->weight; QString source = rec->source; QString content = rec->content; delete rec; // Delete any old content sql.prepare("Delete from SearchIndex where lid=:lid and source=:source"); sql.bindValue(":lid", lid); sql.bindValue(":source", source); sql.exec(); // Add the new content. it is basically a text version of the note with a weight of 100. sql.prepare("Insert into SearchIndex (lid, weight, source, content) values (:lid, :weight, :source, :content)"); sql.bindValue(":lid", lid); sql.bindValue(":weight", weight); sql.bindValue(":source", source); if (!global.forceSearchLowerCase) sql.bindValue(":content", content); else sql.bindValue(":content", content.toLower()); sql.exec(); commitCount--; if (commitCount <= 0) { sql.exec("commit"); commitCount = 200; } } indexHash->clear(); sql.exec("commit"); sql.finish(); db->unlock(); QDateTime finish = QDateTime::currentDateTimeUtc(); QLOG_DEBUG() << "Index Cache Flush Complete: " << finish.toMSecsSinceEpoch() - start.toMSecsSinceEpoch() << " milliseconds."; } void IndexRunner::busy(bool value, bool finished) { iAmBusy=value; emit(this->indexDone(finished)); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/threads/indexrunner.h����������������������������������������������������������������0000664�0000000�0000000�00000004444�13156041044�0017431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef INDEXRUNNER_H #define INDEXRUNNER_H #include <QObject> #include <QThread> #include <QString> #include <QMap> #include <QHash> #include <QVector> #include "sql/databaseconnection.h" #include <iostream> #include <string> #include <stdio.h> #include <QFileInfo> #include <QTimer> #include <QTextDocument> #include "qevercloud/include/QEverCloud.h" using namespace qevercloud; using namespace std; // Forward declare classes used later class DatabaseConnection; class IndexRecord : public QObject { Q_OBJECT public: qint32 lid; qint32 weight; QString source; QString content; }; class IndexRunner : public QObject { Q_OBJECT private: // QTimer *indexTimer; QHash<qint32, IndexRecord*> *indexHash; bool init; void indexRecognition(qint32 lid, Resource &r); void indexNote(qint32 lid, Note &n); void indexPdf(qint32 lid, Resource &r); void indexAttachment(qint32 lid, Resource &r); QTextDocument *textDocument; DatabaseConnection *db; void flushCache(); void busy(bool value, bool finished); bool iAmBusy; public: bool enableIndexing; bool keepRunning; bool pauseIndexing; void initialize(); bool officeFound; IndexRunner(); ~IndexRunner(); signals: void thumbnailNeeded(qint32); void indexDone(bool finished); public slots: void index(); }; #endif // INDEXRUNNER_H ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/threads/syncrunner.cpp���������������������������������������������������������������0000664�0000000�0000000�00000130730�13156041044�0017627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include <QTimer> #include "syncrunner.h" #include "global.h" #include "sql/databaseconnection.h" #include "sql/usertable.h" #include "sql/tagtable.h" #include "sql/searchtable.h" #include "sql/notebooktable.h" #include "sql/notetable.h" #include "sql/linkednotebooktable.h" #include "sql/resourcetable.h" #include "sql/sharednotebooktable.h" #include "nixnote.h" #include "communication/communicationmanager.h" #include "communication/communicationerror.h" #include "sql/nsqlquery.h" extern Global global; SyncRunner::SyncRunner() { init = false; finalSync = false; apiRateLimitExceeded=false; } SyncRunner::~SyncRunner() { } void SyncRunner::synchronize() { QLOG_DEBUG() << "Starting SyncRunner.synchronize()"; if (!init) { this->setObjectName("SyncRunnerThread"); init = true; consumerKey = ""; secret = ""; apiRateLimitExceeded=false; // Setup the user agent userAgent = "NixNote2/Linux"; userStoreUrl = QString("http://" +global.server +"/edam/user").toStdString(); updateSequenceNumber = 0; defaultMsgTimeout = 150000; db = new DatabaseConnection("syncrunner"); comm = new CommunicationManager(db); if (global.guiAvailable) connect(global.application, SIGNAL(stdException(QString)), this, SLOT(applicationException(QString))); } // If we are already connected, we are already synchronizing so there is nothing more to do if (global.connected == true) return; error = false; comm->error.reset(); if (!comm->enConnect()) { this->communicationErrorHandler(); error = true; emit syncComplete(); return; } global.connected = true; keepRunning = true; evernoteSync(); emit syncComplete(); comm->enDisconnect(); global.connected=false; } void SyncRunner::evernoteSync() { QLOG_TRACE() << "Sync thread:" << QThread::currentThreadId(); if (!global.connected) return; User user; UserTable userTable(db); if (!comm->getUserInfo(user)) { this->communicationErrorHandler(); error =true; return; } userTable.updateUser(user); SyncState syncState; if (!comm->getSyncState("", syncState)) { this->communicationErrorHandler(); error = true; return; } fullSync = false; qlonglong lastSyncDate = userTable.getLastSyncDate(); updateSequenceNumber = userTable.getLastSyncNumber(); if ((syncState.fullSyncBefore/1000) > lastSyncDate) { QLOG_DEBUG() << "Full sequence date has expired"; lastSyncDate = 0; fullSync = true; } if (updateSequenceNumber == 0) fullSync = true; emit setMessage(tr("Beginning Sync"), defaultMsgTimeout); // If there are remote changes QLOG_DEBUG() << "--->>> Current Chunk High Sequence Number: " << syncState.updateCount; QLOG_DEBUG() << "--->>> Last User High Sequence Number: " << updateSequenceNumber; if (syncState.updateCount > updateSequenceNumber) { QLOG_DEBUG() << "Remote changes found"; QLOG_DEBUG() << "Downloading changes"; emit setMessage(tr("Downloading changes"), defaultMsgTimeout); bool rc = syncRemoteToLocal(syncState.updateCount); if (!rc) error = true; } if (!comm->getUserInfo(user)) { this->communicationErrorHandler(); error = true; return; } userTable.updateUser(user); if (!global.disableUploads && !error) { qint32 searchUsn = uploadSavedSearches(); if (searchUsn > updateSequenceNumber) updateSequenceNumber = searchUsn; qint32 tagUsn = uploadTags(); if (tagUsn > updateSequenceNumber) updateSequenceNumber = tagUsn; qint32 notebookUsn = uploadNotebooks(); if (notebookUsn > updateSequenceNumber) updateSequenceNumber = notebookUsn; qint32 personalNotesUsn = uploadPersonalNotes(); if (personalNotesUsn > updateSequenceNumber) updateSequenceNumber = personalNotesUsn; } // Synchronize linked notebooks if (!error && !syncRemoteLinkedNotebooksActual()) error = true; if (error || !comm->getSyncState("", syncState)) { error =true; this->communicationErrorHandler(); return; } userTable.updateSyncState(syncState); // Cleanup any missing parent tags QList<qint32> lids; TagTable tagTable(db); tagTable.findMissingParents(lids); for (int i=0; i<lids.size(); i++) { if (!finalSync) emit(tagExpunged(lids[i])); } tagTable.cleanupMissingParents(); if (!error) emit setMessage(tr("Sync Complete Successfully"), defaultMsgTimeout); QLOG_TRACE() << "Leaving SyncRunner::evernoteSync()"; } bool SyncRunner::syncRemoteToLocal(qint32 updateCount) { QLOG_TRACE_IN(); // The sync is run in several parts. // Part #1: Get all remote tags, notebooks, & saved searches for // a user's account. We do this first because we want // the tag & notebook naems for filling out the note table. // It is just easier this way. // Part #2: Get all changed notes & resources. If it is a full sync // then we get the resources & notes together as one entity // (the resource chunk won't have anything). We also do not // get deleted notes on a full sync. If it is a partial sync // then we get resources & notes separately (i.e. the notes chunk // may reference a resource guid, but it won't have the detail and // the chunk resources will have valid data. We get deleted notes // on a partial sync. // Part #3: Upload anything local to the user's account. // Part #4: Do linked notebook stuff. Basically the same as // this except we do it across multiple accounts. int chunkSize = 5000; bool more = true; bool rc; int startingSequenceNumber = updateSequenceNumber; while(more && keepRunning) { SyncChunk chunk; rc = comm->getSyncChunk(chunk, updateSequenceNumber, chunkSize, SYNC_CHUNK_LINKED_NOTEBOOKS | SYNC_CHUNK_NOTEBOOKS | SYNC_CHUNK_TAGS | SYNC_CHUNK_SEARCHES | SYNC_CHUNK_EXPUNGED, fullSync); if (!rc) { QLOG_ERROR() << "Error retrieving chunk"; error = true; this->communicationErrorHandler(); QLOG_TRACE_OUT(); return false; } QLOG_DEBUG() << "-(Pass 1)->>>> Old USN:" << updateSequenceNumber << " New USN:" << chunk.chunkHighUSN; int pct = (updateSequenceNumber-startingSequenceNumber)*100/(updateCount-startingSequenceNumber); emit setMessage(tr("Download ") +QString::number(pct) + tr("% complete for notebooks, tags, & searches."), defaultMsgTimeout); processSyncChunk(chunk); updateSequenceNumber = chunk.chunkHighUSN; if (!chunk.chunkHighUSN.isSet() || chunk.chunkHighUSN >= chunk.updateCount) more = false; } emit setMessage(tr("Download complete for notebooks, tags, & searches. Downloading notes."), defaultMsgTimeout); comm->loadTagGuidMap(); more = true; chunkSize = 50; updateSequenceNumber = startingSequenceNumber; UserTable userTable(db); while(more && keepRunning) { SyncChunk chunk; rc = comm->getSyncChunk(chunk, updateSequenceNumber, chunkSize, SYNC_CHUNK_NOTES | SYNC_CHUNK_RESOURCES, fullSync); if (!rc) { QLOG_ERROR() << "Error retrieving chunk"; error = true; this->communicationErrorHandler(); QLOG_TRACE_OUT(); return false; } QLOG_DEBUG() << "-(Pass 2) ->>>> Old USN:" << updateSequenceNumber << " New USN:" << chunk.chunkHighUSN; int pct = (updateSequenceNumber-startingSequenceNumber)*100/(updateCount-startingSequenceNumber); emit setMessage(tr("Download ") +QString::number(pct) + tr("% complete."), defaultMsgTimeout); processSyncChunk(chunk); userTable.updateLastSyncNumber(chunk.chunkHighUSN); userTable.updateLastSyncDate(chunk.currentTime); updateSequenceNumber = chunk.chunkHighUSN; if (!chunk.chunkHighUSN.isSet() || chunk.chunkHighUSN >= chunk.updateCount) { more = false; userTable.updateLastSyncNumber(updateCount); } } emit setMessage(tr("Download complete."), defaultMsgTimeout); QLOG_TRACE_OUT(); return true; } // Deal with the sync chunk returned void SyncRunner::processSyncChunk(SyncChunk &chunk, qint32 linkedNotebook) { // Now start processing the chunk if (chunk.expungedNotes.isSet()) syncRemoteExpungedNotes(chunk.expungedNotes); if (chunk.expungedNotebooks.isSet()) syncRemoteExpungedNotebooks(chunk.expungedNotebooks); if (chunk.expungedSearches.isSet()) syncRemoteExpungedSavedSearches(chunk.expungedSearches); if (chunk.expungedTags.isSet()) syncRemoteExpungedTags(chunk.expungedTags); if (chunk.expungedLinkedNotebooks.isSet()) syncRemoteExpungedLinkedNotebooks(chunk.expungedLinkedNotebooks); if (chunk.notebooks.isSet()) syncRemoteNotebooks(chunk.notebooks, linkedNotebook); if (chunk.tags.isSet()) syncRemoteTags(chunk.tags, linkedNotebook); if (chunk.searches.isSet()) syncRemoteSearches(chunk.searches); if (chunk.linkedNotebooks.isSet()) syncRemoteLinkedNotebooksChunk(chunk.linkedNotebooks); if (chunk.notes.isSet()) syncRemoteNotes(chunk.notes, linkedNotebook); if (chunk.resources.isSet()) syncRemoteResources(chunk.resources); chunk.expungedLinkedNotebooks.clear();; chunk.expungedNotebooks.clear(); chunk.expungedNotes.clear(); chunk.expungedSearches.clear(); chunk.expungedTags.clear(); chunk.notebooks.clear(); chunk.notes.clear(); chunk.tags.clear(); chunk.linkedNotebooks.clear(); chunk.searches.clear(); // Save any thumbnails notes while (comm->thumbnailList->size() > 0) { QPair<QString, QImage *> *pair = comm->thumbnailList->takeFirst(); NoteTable nTable(db); qint32 lid = nTable.getLid(pair->first); if (lid > 0) { QString filename = global.fileManager.getThumbnailDirPath() + QString::number(lid) + QString(".png"); pair->second->save(filename, "png"); nTable.setThumbnail(lid, filename); } delete pair->second; delete pair; } // Save any ink notes while (comm->inkNoteList->size() > 0) { QPair<QString, QImage *> *pair = comm->inkNoteList->takeFirst(); ResourceTable resTable(db); qint32 resLid = resTable.getLid(pair->first); if (resLid > 0) { QString filename = global.fileManager.getDbaDirPath() + QString::number(resLid) + QString(".png"); pair->second->save(filename); } delete pair->second; delete pair; } } // Expunge deleted notes from the local database void SyncRunner::syncRemoteExpungedNotes(QList<Guid> guids) { QLOG_TRACE() << "Entering SyncRunner::syncRemoteExpungedNotes"; NoteTable noteTable(db); for (int i=0; i<guids.size(); i++) { noteTable.expunge(guids[i]); } QLOG_TRACE() << "Leaving SyncRunner::syncRemoteExpungedNotes"; } // Expunge deleted notebooks from the local database void SyncRunner::syncRemoteExpungedNotebooks(QList<Guid> guids) { QLOG_TRACE() << "Entering SyncRunner::syncRemoteExpungedNotebooks"; NotebookTable notebookTable(db); for (int i=0; i<guids.size(); i++) { int lid = notebookTable.getLid(guids[i]); notebookTable.expunge(guids[i]); if (!finalSync) emit notebookExpunged(lid); } QLOG_TRACE() << "Leaving SyncRunner::syncRemoteExpungedNotebooks"; } // Expunge deleted tags from the local database void SyncRunner::syncRemoteExpungedTags(QList<Guid> guids) { QLOG_TRACE() << "Entering SyncRunner::syncRemoteExpungedTags"; TagTable tagTable(db); for (int i=0; i<guids.size(); i++) { int lid = tagTable.getLid(guids[i]); tagTable.expunge(guids[i]); if (!finalSync) emit tagExpunged(lid); } QLOG_TRACE() << "Leaving SyncRunner::syncRemoteExpungedTags"; } // Expunge deleted tags from the local database void SyncRunner::syncRemoteExpungedSavedSearches(QList<Guid> guids) { QLOG_TRACE() << "Entering SyncRunner::syncRemoteExpungedSavedSearches"; SearchTable searchTable(db); for (int i=0; i<guids.size(); i++) { int lid = searchTable.getLid(guids[i]); searchTable.expunge(guids[i]); if (!finalSync) emit searchExpunged(lid); } QLOG_TRACE() << "Leaving SyncRunner::syncRemoteExpungedSavedSearches"; } // Synchronize remote tags with the current database // If there is a conflict, the remote wins void SyncRunner::syncRemoteTags(QList<Tag> tags, qint32 account) { QLOG_TRACE() << "Entering SyncRunner::syncRemoteTags"; TagTable tagTable(db); for (int i=0; i<tags.size() && keepRunning; i++) { Tag t = tags.at(i); // There are two ways to get the tag. We can get // it by name or by guid. We check both. We'll find it by // name if a new tag was created locally with the same name // as an unsynced remote. We then merge them. We'll find it by guid // if a note was synchrozied with this tag before a chunk // with this tag was downloaded. qint32 lid = tagTable.findByName(t.name, account); if (lid == 0) lid = tagTable.getLid(t.guid); if (lid > 0) { Tag currentTag; tagTable.get(currentTag, lid); QString tagname = ""; if (currentTag.name.isSet()) tagname = currentTag.name; QString tname = ""; if (t.name.isSet()) tname = t.name; if (tagname != tname) changedTags.insert(t.guid, t.name); lid = tagTable.sync(lid, t, account); } else { tagTable.sync(t, account); lid = tagTable.getLid(t.guid); changedTags.insert(t.guid, t.name); } QString parentGuid = ""; if (t.parentGuid.isSet()) parentGuid = t.parentGuid; if (!finalSync) { if (t.name.isSet()) emit tagUpdated(lid, t.name, parentGuid, account); else emit(tagUpdated(lid, "", parentGuid, account)); } } QLOG_TRACE() << "Leaving SyncRunner::syncRemoteTags"; } // Synchronize remote searches with the current database // If there is a conflict, the remote wins void SyncRunner::syncRemoteSearches(QList<SavedSearch> searches) { QLOG_TRACE() << "Entering SyncRunner::syncRemoteSearches"; SearchTable searchTable(db); for (int i=0; i<searches.size() && keepRunning; i++) { SavedSearch t = searches.at(i); qint32 lid = searchTable.getLid(t.guid); if (lid > 0) { searchTable.sync(lid, t); } else { searchTable.sync(t); lid = searchTable.getLid(t.guid); } if (!finalSync) { if (t.name.isSet()) emit searchUpdated(lid, t.name); else emit searchUpdated(lid, ""); } } QLOG_TRACE() << "Leaving SyncRunner::syncRemoteSearches"; } // Synchronize remote notebooks with the current database // If there is a conflict, the remote wins void SyncRunner::syncRemoteNotebooks(QList<Notebook> books, qint32 account) { QLOG_TRACE() << "Entering SyncRunner::syncRemoteNotebooks"; NotebookTable notebookTable(db); LinkedNotebookTable ltable(db); SharedNotebookTable stable(db); for (int i=0; i<books.size() && keepRunning; i++) { Notebook t = books.at(i); // There are a few to get the notebook. // We can get it by the guid, the share key, the uri, or the name. qint32 lid = account; if (lid == 0) lid = notebookTable.getLid(t.guid); if (lid == 0) lid = ltable.getLid(t.guid); if (lid == 0 && t.sharedNotebooks.isSet()) { QList<SharedNotebook> sharedNotebooks = t.sharedNotebooks; for (int j=0; j<sharedNotebooks.size() && lid == 0; j++) { lid = stable.findById(sharedNotebooks[j].id); } } Publishing publishing; if (t.publishing.isSet()) publishing = t.publishing; if (lid == 0 && publishing.uri.isSet()) { lid = notebookTable.findByUri(publishing.uri); } if (lid == 0) lid = notebookTable.findByName(t.name); if (lid > 0) { notebookTable.sync(lid, t); } else { lid = notebookTable.sync(t); } changedNotebooks.insert(t.guid, t.name); QString stack = ""; if (t.stack.isSet()) stack = t.stack; bool shared = false; if (t.sharedNotebookIds.isSet() || t.sharedNotebooks.isSet()) shared = true; if (account > 0) { LinkedNotebookTable ltb(db); LinkedNotebook lbook; ltb.get(lbook, account); if (lbook.username.isSet()) stack = QString::fromStdString(username); } if (!finalSync) { if (t.name.isSet()) emit notebookUpdated(lid, t.name, stack, false, shared); else emit notebookUpdated(lid, "", stack, false, shared); } } QLOG_TRACE() << "Leaving SyncRunner::syncRemoteNotebooks"; } // Synchronize remote notes with the current database void SyncRunner::syncRemoteNotes(QList<Note> notes, qint32 account) { QLOG_TRACE() << "Entering SyncRunner::syncRemoteNotes"; NoteTable noteTable(db); NotebookTable bookTable(db); for (int i=0; i<notes.size() && keepRunning; i++) { Note t = notes[i]; qint32 lid = noteTable.getLid(t.guid); if (lid > 0) { // Find out if it is a conflicting change if (noteTable.isDirty(lid)) { qint32 newLid = noteTable.duplicateNote(lid); qint32 conflictNotebook = bookTable.getConflictNotebook(); noteTable.updateNotebook(newLid, conflictNotebook, true); if (!finalSync) emit noteUpdated(newLid); } noteTable.sync(lid, notes.at(i), account); } else { noteTable.sync(t, account); lid = noteTable.getLid(t.guid); } // Remove it from the cache (if it exists) if (global.cache.contains(lid)) { delete global.cache[lid]; global.cache.remove(lid); } if (!finalSync) emit noteUpdated(lid); } QLOG_TRACE() << "Leaving SyncRunner::syncRemoteNotes"; } // Synchronize remote resources with the current database void SyncRunner::syncRemoteResources(QList<Resource> resources) { QLOG_TRACE() << "Entering SyncRunner::syncRemoteResources"; ResourceTable resTable(db); for (int i=0; i<resources.size(); i++) { Resource r = resources[i]; qint32 lid = resTable.getLid(r.noteGuid, r.guid); if (lid > 0) resTable.sync(lid, r); else resTable.sync(r); } QLOG_TRACE() << "Leaving SyncRunner::syncRemoteResources"; } // Synchronize remote linked notebooks void SyncRunner::syncRemoteLinkedNotebooksChunk(QList<LinkedNotebook> books) { QLOG_TRACE_IN(); LinkedNotebookTable ltable(db); for (int i=0; i<books.size(); i++) { qint32 lid = ltable.sync(books[i]); LinkedNotebook lbk = books[i]; QString sharename = ""; QString username = ""; if (lbk.shareName.isSet()) sharename = lbk.shareName; if (lbk.username.isSet()) username = lbk.username; if (!finalSync) emit notebookUpdated(lid, sharename, username, true, false); } QLOG_TRACE_OUT(); } // Synchronize remote linked notebooks bool SyncRunner::syncRemoteLinkedNotebooksActual() { QLOG_TRACE_IN(); LinkedNotebookTable ltable(db); QList<qint32> lids; ltable.getAll(lids); bool fs; for (int i=0; i<lids.size(); i++) { LinkedNotebook book; qint32 usn = ltable.getLastUpdateSequenceNumber(lids[i]); qint32 startingUSN = usn; ltable.get(book, lids[i]); int chunkSize = 5000; // If the share key is set, we need to authenticate if (!comm->authenticateToLinkedNotebookShard(book)) { // If we can't authenticate, we just gid of the notebook // because the user probably stopped sharing. qint32 linkedLid=0; LinkedNotebookTable ntable(db); linkedLid = ntable.getLid(book.guid); ntable.expunge(book.guid); emit notebookExpunged(linkedLid); return true; //this->communicationErrorHandler(); //error = true; //return false; } bool more = true; SyncState syncState; if (!comm->getLinkedNotebookSyncState(syncState, book)) { this->communicationErrorHandler(); error = true; return false; } if (syncState.updateCount <= usn) more=false; qint32 startingSequenceNumber = usn; if (usn == 0) fs = true; else fs = false; // ***** STARTING PASS #1 while (more && keepRunning) { SyncChunk chunk; if (!comm->getLinkedNotebookSyncChunk(chunk, book, usn, chunkSize, fs)) { more = false; if (comm->error.type == CommunicationError::EDAMNotFoundException) { ltable.expunge(lids[i]); if (!finalSync) emit(notebookExpunged(lids[i])); } else { this->communicationErrorHandler(); error = true; QLOG_TRACE_OUT(); return false; } } else { processSyncChunk(chunk, lids[i]); usn = chunk.chunkHighUSN; if (chunk.updateCount > 0 && chunk.updateCount > startingSequenceNumber) { int pct = (usn-startingSequenceNumber)*100/(chunk.updateCount-startingSequenceNumber); QString sharename = ""; if (book.shareName.isSet()) sharename = book.shareName; emit setMessage(tr("Downloading ") +QString::number(pct) + tr("% complete for tags in shared notebook ") +sharename + tr("."), defaultMsgTimeout); } if (!chunk.chunkHighUSN.isSet()|| chunk.chunkHighUSN >= chunk.updateCount) more = false; } } //************* STARTING PASS 2 usn = startingUSN; more = true; chunkSize = 50; if (error == true) more=false; QString sharename = ""; if (book.shareName.isSet()) sharename = book.shareName; emit setMessage(tr("Downloading notes for shared notebook ") +sharename + tr("."), defaultMsgTimeout); while (more && keepRunning) { SyncChunk chunk; if (!comm->getLinkedNotebookSyncChunk(chunk, book, usn, chunkSize, fs)) { more = false; if (comm->error.type == CommunicationError::EDAMNotFoundException) { ltable.expunge(lids[i]); if (!finalSync) emit(notebookExpunged(lids[i])); } else { this->communicationErrorHandler(); error = true; return false; } } else { processSyncChunk(chunk, lids[i]); usn = chunk.chunkHighUSN; if (chunk.updateCount > 0 && chunk.updateCount > startingSequenceNumber) { int pct = (usn-startingSequenceNumber)*100/(chunk.updateCount-startingSequenceNumber); QString sharename = ""; if (book.shareName.isSet()) sharename = book.shareName; emit setMessage(tr("Downloading ") +QString::number(pct) + tr("% complete for shared notebook ") +sharename + tr("."), defaultMsgTimeout); } if (!chunk.chunkHighUSN.isSet() || chunk.chunkHighUSN >= chunk.updateCount) { more = false; ltable.setLastUpdateSequenceNumber(lids[i], syncState.updateCount); } } } qint32 noteUSN = uploadLinkedNotes(lids[i]); if (noteUSN > usn) ltable.setLastUpdateSequenceNumber(lids[i], noteUSN); } TagTable tagTable(db); tagTable.cleanupLinkedTags(); QLOG_TRACE_OUT(); return true; } // Upload notes that belong to me qint32 SyncRunner::uploadLinkedNotes(qint32 notebookLid) { QLOG_TRACE_IN(); qint32 usn; qint32 maxUsn = 0; NoteTable noteTable(db); QList<qint32> lids, validLids, deletedLids; noteTable.getAllDirty(lids, notebookLid); // Split the list into deleted and updated notes for (int i=0; i<lids.size(); i++) { if (noteTable.isDeleted(lids[i])) deletedLids.append(lids[i]); else validLids.append(lids[i]); } // Start deleting notes for (int i=0; i<deletedLids.size(); i++) { QString guid = noteTable.getGuid(deletedLids[i]); noteTable.setDirty(lids[i], false); usn = comm->deleteLinkedNote(guid); if (usn > maxUsn) { maxUsn = usn; noteTable.setUpdateSequenceNumber(deletedLids[i], usn); noteTable.setDirty(deletedLids[i], false); if (!finalSync) emit(noteSynchronized(deletedLids[i], false)); } } // Start deleting notes that were in the trash, but the trash was // emptied. NotebookTable bookTable(db); QString notebookGuid = ""; bookTable.getGuid(notebookGuid, notebookLid); // Get all of the notes QStringList deleteQueueGuids; noteTable.getAllDeleteQueue(deleteQueueGuids, notebookGuid); // Do the actual deletes for (int i=0; i<deleteQueueGuids.size(); i++) { QString guid = deleteQueueGuids[i]; usn = comm->deleteLinkedNote(guid); if (usn > maxUsn) { maxUsn = usn; } noteTable.expungeFromDeleteQueue(guid); } // Start uploading notes for (int i=0; i<validLids.size(); i++) { Note note; noteTable.get(note, validLids[i],true, true); qint32 oldUsn = note.updateSequenceNum; usn = comm->uploadLinkedNote(note); if (usn == 0) { this->communicationErrorHandler(); error = true; QLOG_TRACE_OUT(); return maxUsn; } if (usn > maxUsn) { maxUsn = usn; if (oldUsn == 0) noteTable.updateGuid(validLids[i], note.guid); noteTable.setUpdateSequenceNumber(validLids[i], usn); noteTable.setDirty(validLids[i], false); if (!finalSync) emit(noteSynchronized(validLids[i], false)); } else { error = true; } } QLOG_TRACE_OUT(); return maxUsn; } // Synchronize remote expunged linked notebooks void SyncRunner::syncRemoteExpungedLinkedNotebooks(QList<Guid> guids) { LinkedNotebookTable btable(db); for (int i=0; i<guids.size(); i++) { LinkedNotebookTable ntable(db); qint32 lid = ntable.getLid(guids[i]); btable.expunge(guids[i]); emit notebookExpunged(lid); } } void SyncRunner::applicationException(QString s) { QLOG_DEBUG() << "Application Exception!!! : " << s; } // Upload any saved searchs qint32 SyncRunner::uploadSavedSearches() { QLOG_TRACE_IN(); qint32 usn; qint32 maxUsn = 0; SearchTable stable(db); QList<qint32> lids; stable.getAllDirty(lids); if (lids.size() == 0) { QLOG_TRACE_OUT(); return 0; } for (int i=0; i<lids.size(); i++) { SavedSearch search; stable.get(search, lids[i]); if (!stable.isDeleted(lids[i])) { qint32 oldUsn = search.updateSequenceNum; usn = comm->uploadSavedSearch(search); if (usn == 0) { this->communicationErrorHandler(); error = true; QLOG_TRACE_OUT(); return maxUsn; } if (usn > maxUsn) { maxUsn = usn; if (oldUsn == 0) stable.updateGuid(lids[i], search.guid); stable.setUpdateSequenceNumber(lids[i], usn); } else { error = true; } } else { QString guid = stable.getGuid(lids[i]); stable.expunge(lids[i]); if (search.updateSequenceNum > 0) { usn = comm->expungeSavedSearch(guid); if (usn>maxUsn) maxUsn = usn; } } } QLOG_TRACE_OUT(); return maxUsn; } // Upload any tags qint32 SyncRunner::uploadTags() { QLOG_TRACE_IN(); qint32 usn; qint32 maxUsn = 0; TagTable table(db); QList<qint32> lids, deletedLids, updatedLids; table.resetLinkedTagsDirty(); table.getAllDirty(lids); if (lids.size() == 0) { QLOG_TRACE_OUT(); return 0; } // Split the lids into lids to be updated, and lids to be deleted for (int i=0; i<lids.size(); i++) { if (table.isDeleted(lids[i])) deletedLids.append(lids[i]); else updatedLids.append(lids[i]); } // Get existing tags in case there is a duplicate name QList<Tag> existingTags; comm->getTagList(existingTags); // Update any lids QLOG_DEBUG() << "Beginning to upload new & altered tags"; int i=0; while(updatedLids.size() > 0) { Tag tag; table.get(tag, updatedLids[i]); if (tag.name.isSet()) { QLOG_DEBUG() << "Found changed tag " << tag.name; } qint32 parentLid = 0; QString parentGuid = ""; if (tag.parentGuid.isSet()) parentGuid = tag.parentGuid; if (parentGuid != "") parentLid = table.getLid(tag.parentGuid); // If the parent is either not dirty, or there is no parent we can update this lid. if (parentLid <= 0 || !table.isDirty(parentLid)) { QLOG_DEBUG() << "Tag has no parent or parent is unaltered"; // Check if a tag with this name already exists. // In reality this should never happen, but there was a bug // where a tag was uploaded but the USN & GUID wasn't // updated. This is a workaround for people who // have that bug. Tag foundTag; bool matchFound = false; for (int j=0; j<existingTags.size(); j++) { QString tempTagName = existingTags[j].name; if (tempTagName == tag.name) { matchFound = true; foundTag = existingTags[j]; j = existingTags.size(); } } if (!matchFound) { qint32 oldUsn = 0; if (tag.updateSequenceNum.isSet()) oldUsn = tag.updateSequenceNum; QLOG_DEBUG() << "Uploaing tag " << tag.name; usn = comm->uploadTag(tag); if (usn == 0) { this->communicationErrorHandler(); error = true; QLOG_TRACE_OUT(); return maxUsn; } if (usn > 0) { maxUsn = usn; QLOG_DEBUG() << "Tag USN: " << usn; if (oldUsn == 0) { QLOG_DEBUG() << "New USN: " << tag.guid; table.updateGuid(updatedLids[i], tag.guid); } table.setUpdateSequenceNumber(updatedLids[i], usn); table.setDirty(tag.guid, false); updatedLids.removeAt(i); i=-1; // Reset for the next time through the loop } else { error = true; updatedLids.clear(); } } else { QLOG_DEBUG() << "Tag with this name exists."; table.updateGuid(updatedLids[i], foundTag.guid); table.setUpdateSequenceNumber(updatedLids[i], foundTag.updateSequenceNum); updatedLids.removeAt(i); i=-1; // Reset for the next time through the loop } } i++; } QLOG_DEBUG() << "Deleting LIDS"; // delete any lids for (int i=0; i<deletedLids.size(); i++) { Tag tag; table.get(tag, deletedLids[i]); table.expunge(lids[i]); if (tag.updateSequenceNum > 0) { usn = comm->expungeTag(tag.guid); if (usn>maxUsn) maxUsn = usn; } } QLOG_TRACE_OUT(); return maxUsn; } // Upload any saved searchs qint32 SyncRunner::uploadNotebooks() { QLOG_TRACE_IN(); qint32 usn; qint32 maxUsn = 0; NotebookTable table(db); QList<qint32> lids; table.resetDirtyLocalNotebooks(); table.resetLinkedNotebooksDirty(); table.getAllDirty(lids); for (int i=0; i<lids.size(); i++) { Notebook notebook; table.get(notebook, lids[i]); if (!table.isDeleted(lids[i])) { qint32 oldUsn = notebook.updateSequenceNum; usn = comm->uploadNotebook(notebook); if (usn == 0) { this->communicationErrorHandler(); error = true; QLOG_TRACE_OUT(); return maxUsn; } if (usn > maxUsn) { maxUsn = usn; if (oldUsn == 0) table.updateGuid(lids[i], notebook.guid); table.setUpdateSequenceNumber(lids[i], usn); } else { error = true; } } else { QString guid; table.getGuid(guid, lids[i]); table.expunge(lids[i]); if (notebook.updateSequenceNum > 0) { usn = comm->expungeNotebook(guid); if (usn>maxUsn) maxUsn = usn; } } } QLOG_TRACE_OUT(); return maxUsn; } // Upload notes that belong to me qint32 SyncRunner::uploadPersonalNotes() { QLOG_TRACE_IN(); qint32 usn; qint32 maxUsn = 0; NotebookTable notebookTable(db); LinkedNotebookTable linkedNotebookTable(db); NoteTable noteTable(db); QList<qint32> lids, validLids, deletedLids, movedLids; QStringList deleteQueueGuids; noteTable.getAllDirty(lids); // Get all of the notes that were deleted, and then removed from the trash noteTable.getAllDeleteQueue(deleteQueueGuids); // Get a list of all notes that are both dirty and in an account we own and isn't deleted for (int i=0; i<lids.size(); i++) { qint32 notebookLid = noteTable.getNotebookLid(lids[i]); if (!linkedNotebookTable.exists(notebookLid)) { if (!notebookTable.isLocal(notebookLid)) { if (noteTable.isDeleted(lids[i])) deletedLids.append(lids[i]); else validLids.append(lids[i]); } else { // We have a note that is local. Check if it was once // synchronized. If so, it was moved to a local notebook // and now needs to be deleted on the remote end Note n; noteTable.get(n, lids[i], false, false); if (n.updateSequenceNum.isSet() && n.updateSequenceNum > 0) { movedLids.append(lids[i]); } } } } // Start deleting notes for (int i=0; i<deletedLids.size(); i++) { QString guid = noteTable.getGuid(deletedLids[i]); noteTable.setDirty(lids[i], false); usn = comm->deleteNote(guid); if (usn > maxUsn) { maxUsn = usn; noteTable.setUpdateSequenceNumber(deletedLids[i], usn); noteTable.setDirty(deletedLids[i], false); if (!finalSync) emit(noteSynchronized(deletedLids[i], false)); } } // Start handling notes moved to a local notebook. What // we do is to delete the note on Evernote, then give the // note in the local notebook a new GUID & set the // update sequence number to 0. for (int i=0; i<movedLids.size(); i++) { QUuid uuid; Guid newGuid = uuid.createUuid().toString().replace("{","").replace("}",""); QString guid = noteTable.getGuid(movedLids[i]); noteTable.setDirty(movedLids[i], false); noteTable.updateGuid(movedLids[i], newGuid); noteTable.setUpdateSequenceNumber(movedLids[0], 0); usn = comm->deleteNote(guid); if (usn > maxUsn) { maxUsn = usn; } if (!finalSync) emit(noteSynchronized(movedLids[i], false)); } // Delete any notes that were deleted, but emptied from the trash for (int i=0; i<deleteQueueGuids.size(); i++) { QString guid = deleteQueueGuids[i]; usn = comm->deleteNote(guid); if (usn > maxUsn) { maxUsn = usn; } noteTable.expungeFromDeleteQueue(guid); } // Start uploading notes for (int i=0; i<validLids.size(); i++) { Note note; noteTable.get(note, validLids[i],true, true); qint32 oldUsn=0; if (note.updateSequenceNum.isSet()) oldUsn = note.updateSequenceNum; usn = comm->uploadNote(note); if (usn == 0) { this->communicationErrorHandler(); if (note.title.isSet()) QLOG_ERROR() << tr("Error uploading note:") +note.title; else QLOG_ERROR() << tr("Error uploading note with a missing title!"); error = true; //return maxUsn; } if (usn > maxUsn) { maxUsn = usn; if (oldUsn == 0) noteTable.updateGuid(validLids[i], note.guid); noteTable.setUpdateSequenceNumber(validLids[i], usn); noteTable.setDirty(validLids[i], false); if (!finalSync) emit(noteSynchronized(validLids[i], false)); } else { error = true; } } QLOG_TRACE_OUT(); return maxUsn; } // Return a pointer to the CommunicationManager error class CommunicationError* SyncRunner::getError() { return &comm->error; } // If a communication error happened, try to determine what the error is and // notify the user void SyncRunner::communicationErrorHandler() { QString emitMsg; if (comm->error.type == CommunicationError::ThriftException) { if (comm->error.message != "") emitMsg = "Thrift error: " +comm->error.message; else emitMsg = "Thrift error communicating with Evernote"; emit(setMessage(emitMsg, defaultMsgTimeout)); return; } if (comm->error.type == CommunicationError::TTransportException) { if (comm->error.message != "") emitMsg = "Network Transport error: " +comm->error.message; else emitMsg = "Network Transport error communicating with Evernote"; emit(setMessage(emitMsg, defaultMsgTimeout)); return; } if (comm->error.type == CommunicationError::EDAMSystemException) { if (comm->error.message != "") emitMsg = comm->error.message; else emitMsg = "Evernote System Error communicating with Evernote."; emit(setMessage(emitMsg, defaultMsgTimeout)); return; } if (comm->error.type == CommunicationError::RateLimitExceeded) { if (comm->error.message != "") emitMsg = comm->error.message; else emitMsg = "API rate limit exceeded. Please try again in one hour."; emit(setMessage(emitMsg, 0)); apiRateLimitExceeded = true; return; } if (comm->error.type == CommunicationError::EDAMNotFoundException) { if (comm->error.message != "") emitMsg = comm->error.message; else emitMsg = "Evernote \"Not Found\" error."; emit(setMessage(emitMsg, 0)); return; } if (comm->error.type == CommunicationError::EDAMUserException) { CommunicationError *e = &comm->error; if (e->code == EDAMErrorCode::UNKNOWN) emitMsg = "An unknown error has occurred" +e->message; if (e->code == EDAMErrorCode::BAD_DATA_FORMAT) emitMsg = "Unable to sync. Bad data format : " +e->message; if (e->code == EDAMErrorCode::PERMISSION_DENIED) emitMsg = "Unable to sync. Permission denied : " +e->message; if (e->code == EDAMErrorCode::INTERNAL_ERROR) emitMsg = "Internal Evernote error : " +e->message + " Please try again later."; if (e->code == EDAMErrorCode::DATA_REQUIRED) emitMsg = "Communication Error - Data required : " +e->message; if (e->code == EDAMErrorCode::INVALID_AUTH) emitMsg = "Invalid authorization : " +e->message; if (e->code == EDAMErrorCode::AUTH_EXPIRED) { emitMsg = "Authorization token has expired or been revoked."; global.accountsManager->setOAuthToken(""); } if (e->code == EDAMErrorCode::DATA_CONFLICT) emitMsg = "Communication Error - Data conflict : " +e->message; if (e->code == EDAMErrorCode::ENML_VALIDATION) emitMsg = "Unable to update note. Invalid note structure : " +e->message; if (e->code == EDAMErrorCode::LIMIT_REACHED) emitMsg = "Communication Error - limit reached : " +e->message; if (e->code == EDAMErrorCode::QUOTA_REACHED) emitMsg = "Communication Error - User quota exceeded : " +e->message; if (e->code == EDAMErrorCode::SHARD_UNAVAILABLE) emitMsg = "Communication Error - Shard unavailable. Please try again later. " +e->message; if (e->code == EDAMErrorCode::LEN_TOO_SHORT) emitMsg = "Communication Error - Length too short : " +e->message; if (e->code == EDAMErrorCode::LEN_TOO_LONG) emitMsg = "Communication Error - Length too long : " +e->message; if (e->code == EDAMErrorCode::TOO_FEW) emitMsg = "Communication Error - Length \"too few\" error : " +e->message; if (e->code == EDAMErrorCode::TOO_MANY) emitMsg = "Communication Error - \"too many\" error : " +e->message; if (e->code == EDAMErrorCode::UNSUPPORTED_OPERATION) emitMsg = "Communication Error - Unsupported operation " +e->message; emit(setMessage(emitMsg, defaultMsgTimeout)); return; } if (comm->error.type == CommunicationError::TSSLException) { CommunicationError *e = &comm->error; emitMsg = "Communication Error - SSL Exception: " +e->message; emit(setMessage(emitMsg, 0)); return; } if (comm->error.type == CommunicationError::TException) { CommunicationError *e = &comm->error; emitMsg = "TException: " +e->message; emit(setMessage(emitMsg, 0)); return; } if (comm->error.type == CommunicationError::StdException) { CommunicationError *e = &comm->error; emitMsg = "Internal Error: " +e->message; emit(setMessage(emitMsg, 0)); return; } } ����������������������������������������nixnote2-2.0.2/threads/syncrunner.h�����������������������������������������������������������������0000664�0000000�0000000�00000007623�13156041044�0017300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef SYNCRUNNER_H #define SYNCRUNNER_H #include <QObject> #include <QThread> #include <QString> #include <QMap> #include <QHash> #include <QVector> #include <QTimer> #include "communication/communicationmanager.h" #include "sql/databaseconnection.h" #include <iostream> #include <string> #include <stdio.h> #include "qevercloud/include/QEverCloud.h" using namespace qevercloud; class SyncRunner : public QObject { Q_OBJECT private: bool idle; bool init; int defaultMsgTimeout; long evernoteUpdateCount; DatabaseConnection *db; CommunicationManager *comm; QVector<QString> errorSharedNotebooks; QMap<QString,QString> errorSharedNotebooksIgnored; string consumerKey; string secret; string authToken; string userAgent; string username; string password; long authTimeRemaining; long authRefreshTime; bool authRefreshNeeded; long failedRefreshes; long sequenceDate; qint32 updateSequenceNumber; bool fullSync; QHash<QString, QString> changedNotebooks; QHash<QString, QString> changedTags; void evernoteSync(); bool syncRemoteToLocal(qint32 highSequence); void syncRemoteExpungedNotes(QList<Guid> guids); void syncRemoteExpungedNotebooks(QList<Guid> guids); void processSyncChunk(SyncChunk &chunk, qint32 linkedNotebook=0); void syncRemoteExpungedTags(QList<Guid> guids); void syncRemoteExpungedSavedSearches(QList<Guid> guid); void syncRemoteTags(QList<Tag> tag, qint32 account=0); void syncRemoteSearches(QList<SavedSearch> searches); void syncRemoteNotebooks(QList<Notebook> books, qint32 account=0); void syncRemoteNotes(QList<Note> notes, qint32 account=0); void syncRemoteResources(QList<Resource> resources); void syncRemoteLinkedNotebooksChunk(QList<LinkedNotebook> books); void syncRemoteExpungedLinkedNotebooks(QList<Guid> guids); bool syncRemoteLinkedNotebooksActual(); //void checkForInkNotes(QList<Resource> &resources); qint32 uploadSavedSearches(); qint32 uploadTags(); qint32 uploadNotebooks(); qint32 uploadPersonalNotes(); qint32 uploadLinkedNotes(qint32 notebookLid); public: bool keepRunning; string userStoreUrl; string noteStoreUrl; SyncRunner(); ~SyncRunner(); bool error; CommunicationError* getError(); void communicationErrorHandler(); bool finalSync; bool apiRateLimitExceeded; signals: void syncComplete(); void setMessage(QString message, int timeout); void searchUpdated(qint32 lid, QString name); void tagUpdated(qint32 lid, QString name, QString parentGuid, qint32 account); void notebookUpdated(qint32 lid, QString name, QString stack, bool linked, bool shared); void noteUpdated(qint32 lid); void tagExpunged(qint32 lid); void notebookExpunged(qint32 lid); void searchExpunged(qint32 lid); void noteSynchronized(qint32, bool); public slots: void synchronize(); void applicationException(QString); }; #endif // SYNCRUNNER_H �������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/translations/������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13156041044�0016000�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/translations/README������������������������������������������������������������������0000664�0000000�0000000�00000000054�13156041044�0016657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Translations can be done using Qt-linguist ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/translations/nixnote2_ca.ts����������������������������������������������������������0000664�0000000�0000000�00000615170�13156041044�0020573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="ca_ES"> <context> <name>AboutDialog</name> <message> <location filename="../dialog/aboutdialog.cpp" line="36"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/aboutdialog.cpp" line="53"/> <source>Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountDialog</name> <message> <location filename="../dialog/accountdialog.cpp" line="37"/> <source>Account Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="40"/> <source>Normal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="46"/> <source>Premium</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="48"/> <source>VIP</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="50"/> <source>Manager</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="52"/> <source>Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="54"/> <source>Admin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="75"/> <source> Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="79"/> <source> KB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="83"/> <source> MB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="90"/> <source>Account:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="93"/> <source>User Name:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="95"/> <source>Account Type:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="97"/> <source>Limit:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="99"/> <source>Uploaded In This Period:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="103"/> <source>Less than 1MB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="104"/> <source>Current Cycle Ends:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="112"/> <source>OK</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountMaintenanceDialog</name> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="34"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="35"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="36"/> <source>Add</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="37"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="38"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="64"/> <source>User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="104"/> <source>Are you sure you want to delete this account?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="105"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="117"/> <source>You cannot delete the active account.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="170"/> <location filename="../dialog/accountmaintenancedialog.cpp" line="194"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> </context> <context> <name>AddNote</name> <message> <location filename="../cmdtools/addnote.cpp" line="33"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AddUserAccountDialog</name> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="38"/> <source>Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="39"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="41"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="46"/> <source>Account Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="69"/> <source>Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="70"/> <source>Yinxiang Biji</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="71"/> <source>Evernote Sandbox</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AppearancePreferences</name> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="39"/> <source>Show tray icon</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="40"/> <source>Display PDFs inline**</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="41"/> <source>Show splash screen on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="42"/> <source>Start automatically at login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="43"/> <source>Confirm Deletes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="44"/> <source>Show missed reminders on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="45"/> <source>Always Start minimized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="46"/> <source>Show notebook and tag totals</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="47"/> <source>Auto-Hide editor toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="49"/> <source>Disable note editing on statup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="50"/> <source>Focus on Note Title on New Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="51"/> <source>Limit Editor to Web Fonts*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="53"/> <source>Show note list grid*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="54"/> <source>Alternate note list colors*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="55"/> <source>Set author on new notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="57"/> <source>Preview fonts in editor dialag*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="61"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="68"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="75"/> <source>Do Nothing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="62"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="69"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="76"/> <source>Show/Hide NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="63"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="70"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="77"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="64"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="71"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="78"/> <source>New Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="65"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="72"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="79"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="82"/> <source>Open New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="83"/> <source>Open New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="98"/> <source>Qt Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="99"/> <source>notify-send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="106"/> <source>Startup Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="108"/> <source>Restore Selection Criteria</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="109"/> <source>Select Default Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="110"/> <source>View All Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="120"/> <source>Minimize to tray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="121"/> <source>Close to tray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="143"/> <source>Notification Service</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="146"/> <source>Middle Click Open Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="149"/> <source>Tray Icon Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="152"/> <source>Tray Icon Middle Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="155"/> <source>Tray Icon Double Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="158"/> <source>Default GUI Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="161"/> <source>Default GUI Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="164"/> <source>Default Editor Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="167"/> <source>Default Editor Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="171"/> <source>* May require restart on some systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="172"/> <source>** Can crash on Gnome systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="102"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="405"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="423"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="442"/> <source>System Default</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AttachmentIconBuilder</name> <message> <location filename="../html/attachmenticonbuilder.cpp" line="74"/> <source>Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/attachmenticonbuilder.cpp" line="78"/> <source>KB</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AuthorEditor</name> <message> <location filename="../gui/browserWidgets/authoreditor.cpp" line="37"/> <source>Click to set author</source> <translation type="unfinished"></translation> </message> </context> <context> <name>BatchImport</name> <message> <location filename="../xml/batchimport.cpp" line="112"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CloseNotebookDialog</name> <message> <location filename="../dialog/closenotebookdialog.cpp" line="37"/> <source>Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="42"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="43"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="56"/> <source>Open Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="57"/> <source>Closed Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="59"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="60"/> <source>Close</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CmdLineQuery</name> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="67"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="69"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="72"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="75"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="78"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="81"/> <source>Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="84"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="87"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="90"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="93"/> <source>Todo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="96"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="99"/> <source>Reminder Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="181"/> <location filename="../cmdtools/cmdlinequery.cpp" line="190"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="183"/> <location filename="../cmdtools/cmdlinequery.cpp" line="188"/> <source>Yes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CmdLineTool</name> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="56"/> <source>Unable to attach to shared memory segment. Is the other NixNote running? </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="315"/> <location filename="../cmdtools/cmdlinetool.cpp" line="452"/> <source> has been created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="318"/> <source>No response from NixNote. Please verify that the note was created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="332"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="535"/> <source> was not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="538"/> <location filename="../cmdtools/cmdlinetool.cpp" line="609"/> <source> has been appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="541"/> <source>No response from NixNote. Please verify that the note was appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="552"/> <source> was not found. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="221"/> <location filename="../cmdtools/cmdlinetool.cpp" line="654"/> <source>No response received from NixNote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="156"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="663"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="674"/> <location filename="../cmdtools/cmdlinetool.cpp" line="690"/> <location filename="../cmdtools/cmdlinetool.cpp" line="722"/> <location filename="../cmdtools/cmdlinetool.cpp" line="742"/> <source>This cannot be done with NixNote running.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="732"/> <location filename="../cmdtools/cmdlinetool.cpp" line="752"/> <source>Notebook not found: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="765"/> <source>OAuth token not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="783"/> <source>Error synchronizing with Evernote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="786"/> <source>Sync completed.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ColorSettings</name> <message> <location filename="../settings/colorsettings.cpp" line="37"/> <source>White</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="38"/> <source>Red</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="39"/> <source>Blue</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="40"/> <source>Green</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="41"/> <source>Yellow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="42"/> <source>Black</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="43"/> <source>Purple</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="44"/> <source>Brown</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="45"/> <source>Orange</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="46"/> <source>Grey</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="47"/> <source>Powder Blue</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CommunicationManager</name> <message> <location filename="../communication/communicationmanager.cpp" line="675"/> <source>Linked notebook notestore URL missing.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source>API rate limit exceeded. Please try again in </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <source> minutes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source> minute.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1206"/> <source>EDAMSystemException </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1208"/> <source>EDAMSystemException: Unknown error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1232"/> <source>EDAMNotFoundException: Note not found</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DatabaseStatus</name> <message> <location filename="../dialog/databasestatus.cpp" line="35"/> <source>Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="47"/> <source>Total Notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="49"/> <source>Total Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="51"/> <source>Unindexed Notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="53"/> <source>Unindexed Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="55"/> <source>Thumbnails Needed:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="60"/> <source>OK</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DateDelegate</name> <message> <location filename="../gui/datedelegate.cpp" line="42"/> <source>Today</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DateEditor</name> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="38"/> <source>Created:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="42"/> <source>Updated:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="46"/> <source>Subject:</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DebugPreferences</name> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="38"/> <source>Disable image search highlighting.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="35"/> <source>Strict note checking.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="37"/> <source>Disable uploads to server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="39"/> <source>Show LID column (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="40"/> <source>Disable Tag Sorting (useful for non-ASCII sort bug).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="41"/> <source>Force UTF8 Encoding.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="59"/> <source>Intercept Unix SIGHUP (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="64"/> <source>Use multipe theads to save note contents (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="68"/> <source>Use libtidy directly (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="72"/> <source>Auto-Save Interval (in seconds).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="79"/> <source>Message Level</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="82"/> <source>Trace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="83"/> <source>Debug</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="84"/> <source>Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="85"/> <source>Warnings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="86"/> <source>Errors</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="87"/> <source>Fatal</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EditorButtonBar</name> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="37"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="133"/> <source>Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="38"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="137"/> <source>Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="39"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="142"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="40"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="41"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="150"/> <source>Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="42"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="153"/> <source>Remove Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="43"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="159"/> <source>Bold</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="44"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="166"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="167"/> <source>Italics</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="45"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="184"/> <source>Superscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="46"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="188"/> <source>Subscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="47"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="174"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="175"/> <source>Underline</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="48"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="180"/> <source>Strikethrough</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="49"/> <source>Align Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="50"/> <source>Align Center</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="51"/> <source>Align Full</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="52"/> <source>Align Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="53"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="208"/> <source>Horizontal Line</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="54"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="55"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="220"/> <source>Shift Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="56"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="224"/> <source>Shift Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="57"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="228"/> <source>Bullet List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="58"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="232"/> <source>Number List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="59"/> <source>Font</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="60"/> <source>Font Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="61"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="248"/> <source>Font Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="62"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="257"/> <source>Highlight</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="63"/> <source>To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="192"/> <source>Center Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="196"/> <source>Fully Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="214"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="215"/> <source>Insert Date & Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="262"/> <source>Todo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="64"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="266"/> <source>Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="65"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="270"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="66"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="204"/> <source>Left Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="200"/> <source>Right Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="274"/> <source>Insert HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="661"/> <source>Times</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailDialog</name> <message> <location filename="../dialog/emaildialog.cpp" line="36"/> <source>Send Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="38"/> <source>Send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="39"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="51"/> <source>To:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="53"/> <source>BCC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="55"/> <source>CC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="57"/> <source>Subject:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="59"/> <source>Note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="77"/> <source>CC me on this email</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailNote</name> <message> <location filename="../cmdtools/emailnote.cpp" line="261"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="327"/> <source>Connection Error: Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="333"/> <source>Login Error : Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="338"/> <source>Send Error : Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="344"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailPreferences</name> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="17"/> <source>SMTP Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="18"/> <source>Server Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="19"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="20"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="21"/> <source>Sender Display Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="22"/> <source>Sender Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="23"/> <source>Connection Type</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="31"/> <source>Plain Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="32"/> <source>SSL Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="33"/> <source>TLS Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="35"/> <source>Send Test Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="108"/> <location filename="../dialog/preferences/emailpreferences.cpp" line="113"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="109"/> <source>You must specify a SMTP server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="114"/> <source>You must specify a sender email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="146"/> <source>Test Email From NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="152"/> <source><h1>This is a test email from NixNote.</h1> </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="153"/> <source>If you are reading it then your email preferences are are setup properly.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message sent.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnCryptDialog</name> <message> <location filename="../dialog/encryptdialog.cpp" line="31"/> <source>Encrypt Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="47"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="49"/> <source>Verify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="51"/> <source>Hint</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="53"/> <source>Remember Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="61"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="65"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="113"/> <source>Password must be at least 4 characters</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="117"/> <source>Passwords do not match</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="121"/> <source>Hint must be entered</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnDecryptDialog</name> <message> <location filename="../dialog/endecryptdialog.cpp" line="35"/> <source>Decrypt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="51"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="52"/> <source>Hint</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="59"/> <source>Permanently Decrypt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="61"/> <source>Remember Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="66"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="70"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExportData</name> <message> <location filename="../xml/exportdata.cpp" line="54"/> <source>Cannot open file.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="62"/> <source>Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="81"/> <source>Backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="114"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="151"/> <source>Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="360"/> <source>Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="405"/> <source>Linked Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="448"/> <source>Shared Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="508"/> <source>Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="725"/> <source>Backup Canceled</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExternalBrowse</name> <message> <location filename="../gui/externalbrowse.cpp" line="32"/> <source>NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/externalbrowse.cpp" line="124"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExtractNotes</name> <message> <location filename="../cmdtools/extractnotes.cpp" line="41"/> <location filename="../cmdtools/extractnotes.cpp" line="82"/> <source>Output file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="64"/> <source>Deleting notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="65"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FavoritesView</name> <message> <location filename="../gui/favoritesview.cpp" line="68"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="90"/> <source>Remove from shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="565"/> <source>Are you sure you want to remove this shortcut?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="566"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>FileWatcher</name> <message> <location filename="../watcher/filewatcher.cpp" line="72"/> <source>Error removing file: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FindReplace</name> <message> <location filename="../gui/findreplace.cpp" line="46"/> <source>Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="47"/> <source>Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="48"/> <source>Match case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="57"/> <source>Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="58"/> <source>Replace all</source> <translation type="unfinished"></translation> </message> </context> <context> <name>HtmlEntitiesDialog</name> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="34"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="35"/> <source>Edit entries list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="36"/> <source>Save entities list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="71"/> <source>HTML Entities Selection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="206"/> <source>Comma separated list of HTML entities. See http://www.w3schools.com/charsets/ for list.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportData</name> <message> <location filename="../xml/importdata.cpp" line="59"/> <source>Imported Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="106"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="107"/> <location filename="../xml/importdata.cpp" line="119"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="130"/> <source>Importing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="131"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="133"/> <source>Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="134"/> <source>Restoring Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportEnex</name> <message> <location filename="../xml/importenex.cpp" line="40"/> <source>Imported Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="83"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="84"/> <location filename="../xml/importenex.cpp" line="94"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="101"/> <location filename="../xml/importenex.cpp" line="102"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportNotes</name> <message> <location filename="../cmdtools/importnotes.cpp" line="19"/> <source>Input file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/importnotes.cpp" line="24"/> <source>Input file not found.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLatexDialog</name> <message> <location filename="../dialog/insertlatexdialog.cpp" line="32"/> <source>Insert LaTeX Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="42"/> <source>Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="52"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLinkDialog</name> <message> <location filename="../dialog/insertlinkdialog.cpp" line="34"/> <source>Insert Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="45"/> <source>URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="54"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LineEdit</name> <message> <location filename="../gui/lineedit.cpp" line="39"/> <source>Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocalePreferences</name> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="37"/> <source>Date Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="40"/> <source>MM/dd/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="41"/> <source>MM/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="42"/> <source>M/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="43"/> <source>M/d/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="44"/> <source>dd/MM/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="45"/> <source>d/M/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="46"/> <source>dd/MM/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="47"/> <source>d/M/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="48"/> <source>yyyy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="49"/> <source>yy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="52"/> <source>Time Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="55"/> <source>HH:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="56"/> <source>HH:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="57"/> <source>HH:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="58"/> <source>HH:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="59"/> <source>hh:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="60"/> <source>hh:mm:ss a- </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="61"/> <source>h:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="62"/> <source>hh:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="63"/> <source>hh:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="64"/> <source>h:mm a - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationDialog</name> <message> <location filename="../dialog/locationdialog.cpp" line="33"/> <source>Location</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="40"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="42"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="44"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="49"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="52"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationEditor</name> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="42"/> <source>Click to set location...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="45"/> <source>Edit...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="46"/> <source>Clear</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="47"/> <source>View on map</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LogViewer</name> <message> <location filename="../dialog/logviewer.cpp" line="41"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="43"/> <source>Refresh</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="45"/> <source>Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="54"/> <source>Save Logs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>Save Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>NixNote Log (*.log);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LoginDialog</name> <message> <location filename="../dialog/logindialog.cpp" line="34"/> <source>NixNote Login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="43"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="44"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="52"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="56"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NAttributeTree</name> <message> <location filename="../gui/nattributetree.cpp" line="48"/> <source>Attributes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="129"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="132"/> <location filename="../gui/nattributetree.cpp" line="213"/> <source>Since</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="136"/> <location filename="../gui/nattributetree.cpp" line="173"/> <location filename="../gui/nattributetree.cpp" line="217"/> <location filename="../gui/nattributetree.cpp" line="254"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="140"/> <location filename="../gui/nattributetree.cpp" line="177"/> <location filename="../gui/nattributetree.cpp" line="221"/> <location filename="../gui/nattributetree.cpp" line="258"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="144"/> <location filename="../gui/nattributetree.cpp" line="181"/> <location filename="../gui/nattributetree.cpp" line="225"/> <location filename="../gui/nattributetree.cpp" line="262"/> <source>This week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="148"/> <location filename="../gui/nattributetree.cpp" line="185"/> <location filename="../gui/nattributetree.cpp" line="229"/> <location filename="../gui/nattributetree.cpp" line="266"/> <source>Last week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="152"/> <location filename="../gui/nattributetree.cpp" line="189"/> <location filename="../gui/nattributetree.cpp" line="233"/> <location filename="../gui/nattributetree.cpp" line="270"/> <source>This Month</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="156"/> <location filename="../gui/nattributetree.cpp" line="193"/> <location filename="../gui/nattributetree.cpp" line="237"/> <location filename="../gui/nattributetree.cpp" line="274"/> <source>Last Month</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="160"/> <location filename="../gui/nattributetree.cpp" line="197"/> <location filename="../gui/nattributetree.cpp" line="241"/> <location filename="../gui/nattributetree.cpp" line="278"/> <source>This Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="164"/> <location filename="../gui/nattributetree.cpp" line="201"/> <location filename="../gui/nattributetree.cpp" line="245"/> <location filename="../gui/nattributetree.cpp" line="282"/> <source>Last Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="169"/> <location filename="../gui/nattributetree.cpp" line="250"/> <source>Before</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="210"/> <source>Last Modified</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="289"/> <source>Contains</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="292"/> <source>Images</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="296"/> <source>Audio</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="300"/> <source>Ink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="304"/> <source>Encrypted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="308"/> <source>To-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="312"/> <source>Unfinished to-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="316"/> <source>Finished to-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="320"/> <source>PDF document</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="324"/> <source>Attachment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="328"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="332"/> <source>Uncompleted Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="336"/> <source>Future Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="341"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="344"/> <source>Emailed to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="348"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="352"/> <source>Web page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="356"/> <source>Mobile</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="360"/> <source>Another application</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NBrowserWindow</name> <message> <location filename="../gui/nbrowserwindow.cpp" line="521"/> <location filename="../gui/nbrowserwindow.cpp" line="3112"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="523"/> <location filename="../gui/nbrowserwindow.cpp" line="3114"/> <source>Tomorrow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="525"/> <location filename="../gui/nbrowserwindow.cpp" line="3116"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to save this note. Either tidy isn't installed or the note is too complex to save.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="1808"/> <source>Insert Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>Unable Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>This is an ink note. Ink notes are not supported since Evernote has not published any specifications on them and I'm too lazy to figure them out by myself.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2240"/> <source>Edit Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2304"/> <source>Unable to create LaTeX image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2305"/> <source>Unable to create LaTeX image. Are you sure mimetex is installed?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2635"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2636"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2645"/> <source>Sending Email. Please be patient.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3159"/> <source>Decryption Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3160"/> <source>Unknown encryption method. Unable to decrypt.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3263"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3264"/> <source>Error Encrypting String. Please verify you have Java installed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Hunspell plugin not found or could not be loaded.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NMainMenuBar</name> <message> <location filename="../gui/nmainmenubar.cpp" line="60"/> <source>&File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="79"/> <source>Print this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="87"/> <source>Backup database to a file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="93"/> <source>Restore from a backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="113"/> <source>Import notes from an export file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="133"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="151"/> <source>Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="159"/> <source>Close the program</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="175"/> <source>&Edit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="78"/> <source>&Print Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="64"/> <source>Email Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="65"/> <source>Email a copy of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="71"/> <source>Print Preview Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="72"/> <source>Print preview of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="86"/> <source>&Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="92"/> <source>&Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="112"/> <source>&Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="140"/> <source>&Add Another User...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="144"/> <source>&User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="150"/> <source>&Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="158"/> <source>E&xit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="180"/> <source>&Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="184"/> <source>&Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="190"/> <source>&Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="194"/> <source>C&opy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="198"/> <source>&Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="202"/> <source>Pas&te as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="206"/> <source>Remo&ve Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="212"/> <source>Select &All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="218"/> <source>F&ind and Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="220"/> <source>&Search Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="225"/> <source>&Reset Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="232"/> <source>&Find in Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="238"/> <source>Find &Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="243"/> <source>Find &Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="250"/> <source>Replace &Within Note...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="260"/> <source>Preferences</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="268"/> <source>&View</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="273"/> <source>Wide Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="278"/> <source>Narrow Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="285"/> <source>&Show Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="289"/> <source>Note &History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="295"/> <source>&Presentation Mode</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="299"/> <source>Show &Left Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="306"/> <source>Show &Favorites</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="313"/> <source>Show &Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="320"/> <source>Show Ta&gs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="327"/> <source>Show Sa&ved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="341"/> <source>Show T&rash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="348"/> <source>Show N&ote List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="355"/> <source>Show Note &Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="364"/> <source>View Note &Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="368"/> <source>View &Toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="375"/> <source>View Status&bar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="391"/> <source>New &Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="396"/> <source>New &Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="401"/> <source>Dupl&icate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="406"/> <source>&Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="411"/> <source>Reindex Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="418"/> <source>&Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="427"/> <source>&Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="432"/> <source>&UnPin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="446"/> <source>&Synchronize</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="447"/> <source>Synchronize with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="452"/> <source>&Disconnect</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="460"/> <source>Pause &Indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="461"/> <source>Temporarily pause indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="468"/> <source>Disable &Editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="469"/> <source>Temporarily disable note editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="476"/> <source>A&ccount</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="490"/> <source>&Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="514"/> <source>&User's Guide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="537"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="538"/> <source>View currentt shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="547"/> <source>Github Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="548"/> <source>Goto the NixNote2 Github project page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="585"/> <source>About &Qt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="625"/> <source>Theme</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="386"/> <source>&Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="100"/> <source>&Export to NixNote Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="101"/> <source>Export selected notes to a NNEX file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="106"/> <source>&Export Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="107"/> <source>Export selected notes to a PDF file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="441"/> <source>&Tools</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="453"/> <source>Disconnect from Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="477"/> <source>Account information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="484"/> <source>&Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="485"/> <source>Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="491"/> <source>Reindex all notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="499"/> <source>&Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="500"/> <source>Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="509"/> <source>&Help</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="515"/> <source>Open the user manual.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="542"/> <source>Message &Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="554"/> <source>&Evernote Account Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="559"/> <source>Evernote &Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="568"/> <source>Evernote &Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="573"/> <source>Evernote User &Forum</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="580"/> <source>&About</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="634"/> <source>System Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="543"/> <source>View current program messages</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="334"/> <source>Show &Attribute Filter</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="520"/> <source>Theme &Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="521"/> <source>View information about the current theme.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="555"/> <source>Go to your Evernote account page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="560"/> <source>Go to Evernote's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="562"/> <source>Yinxiang Biji Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="563"/> <source>Go to Yinxiang Biji's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="569"/> <source>Go to Evernote Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="574"/> <source>Go to the Evernote user support forum.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="581"/> <location filename="../gui/nmainmenubar.cpp" line="586"/> <source>About</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NNotebookView</name> <message> <location filename="../gui/nnotebookview.cpp" line="69"/> <source>Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="86"/> <source>Create New Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="95"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="103"/> <source>Add to stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="116"/> <source>Create New stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="119"/> <source>Remove from stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="123"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="131"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="641"/> <source>Are you sure you want to delete this notebook?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="642"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>New Stack (</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NSearchView</name> <message> <location filename="../gui/nsearchview.cpp" line="65"/> <source>Saved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="74"/> <source>Create Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="83"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="90"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="94"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="404"/> <source>Are you sure you want to delete this saved search?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="405"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTabWidget</name> <message> <location filename="../gui/ntabwidget.cpp" line="254"/> <location filename="../gui/ntabwidget.cpp" line="262"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntabwidget.cpp" line="267"/> <location filename="../gui/ntabwidget.cpp" line="334"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableView</name> <message> <location filename="../gui/ntableview.cpp" line="203"/> <source>Open Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="209"/> <source>Open Note In New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="215"/> <source>Open Note In New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="222"/> <source>Add Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="227"/> <source>Delete Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="238"/> <source>Restore Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="244"/> <source>Copy Note Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="249"/> <source>Duplicate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="254"/> <source>Reminders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="258"/> <source>Remove</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="263"/> <source>Mark Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="269"/> <source>Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="274"/> <source>Unpin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="279"/> <source>Merge Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="285"/> <source>Create Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="291"/> <source>Title Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="296"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="301"/> <source>White</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="304"/> <source>Red</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="307"/> <source>Blue</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="310"/> <source>Green</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="313"/> <source>Yellow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="316"/> <source>Black</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="319"/> <source>Gray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="322"/> <source>Cyan</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="325"/> <source>Magenta</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="663"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="666"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="672"/> <source>selected note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="677"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="942"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="943"/> <source>This note has never been synchronized. Using this in a note link can cause problems unless you synchronize it first.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1319"/> <source>Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1370"/> <source>One or more notes are unsynchronized. This can cause issues if they are later synchronized. Do you wish to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1654"/> <source>Note LID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1657"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1660"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1663"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1666"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1668"/> <location filename="../gui/ntableview.cpp" line="1676"/> <location filename="../gui/ntableview.cpp" line="1682"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1670"/> <location filename="../gui/ntableview.cpp" line="1674"/> <location filename="../gui/ntableview.cpp" line="1680"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1672"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1678"/> <source>Has To-Do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1684"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1687"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1690"/> <source>Date Deleted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1698"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1706"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1710"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1719"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1728"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1737"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1740"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1743"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1746"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1754"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableViewHeader</name> <message> <location filename="../gui/ntableviewheader.cpp" line="42"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="47"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="52"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="57"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="62"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="67"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="72"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="77"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="82"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="87"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="92"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="97"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="102"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="107"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="112"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="117"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="122"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="128"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="133"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="138"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="143"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTagView</name> <message> <location filename="../gui/ntagview.cpp" line="67"/> <location filename="../gui/ntagview.cpp" line="156"/> <source>Tags from Personal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="91"/> <source>Create New Tag</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="100"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="107"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="110"/> <source>Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="113"/> <source>Hide Unassigned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="119"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="154"/> <source>Tags from </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="351"/> <source>-<Missing Tag>-</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="706"/> <source>Are you sure you want to merge these tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="707"/> <source>Verify Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="753"/> <source>Are you sure you want to delete this tag?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="755"/> <source>Are you sure you want to delete all selected tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="756"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTitleEditor</name> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="123"/> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="137"/> <source>Untitled note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="134"/> <source>untitled note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTrashTree</name> <message> <location filename="../gui/ntrashtree.cpp" line="53"/> <source>Trash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="65"/> <source>Restore Deleted Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="68"/> <source>Empty Trash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="238"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="239"/> <source>Are you sure you want to permanently delete these notes?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NWebView</name> <message> <location filename="../gui/nwebview.cpp" line="56"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="61"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="66"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="71"/> <source>Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="76"/> <source>Paste as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="81"/> <source>Remove Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="86"/> <source>Copy Note URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="93"/> <source>Background Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="113"/> <source>To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="120"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="127"/> <source>Encrypted Selected Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="132"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="137"/> <source>Insert Hyperlink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="142"/> <source>Quick Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="147"/> <source>Remove Hyperlink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="152"/> <source>Attach File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="158"/> <source>Insert LaTeX Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="164"/> <source>Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="167"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="173"/> <source>Insert Row</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="178"/> <source>Insert Column</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="185"/> <source>Delete Row</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="189"/> <source>Delete Column</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="196"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="203"/> <source>Image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="206"/> <source>Save Image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="214"/> <source>Rotate Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="218"/> <source>Rotate Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="224"/> <source>Save Attachment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="502"/> <location filename="../gui/nwebview.cpp" line="532"/> <source>Save File</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NixNote</name> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy Not Found</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy is not found on this system. Until tidy is installed you cannot save any notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="291"/> <source>ToolBar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="303"/> <source>Back</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="304"/> <source>Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="314"/> <source>All Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="316"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="319"/> <source>Print</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="329"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="332"/> <source>New Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="344"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="347"/> <source>Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="349"/> <source>Usage</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="531"/> <location filename="../nixnote.cpp" line="3183"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="547"/> <source>Show/Hide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="559"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1799"/> <source>Confirm Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1815"/> <source>Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1818"/> <source>Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1730"/> <location filename="../nixnote.cpp" line="1816"/> <source>NixNote Export (*.nnex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="320"/> <source>Print the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="322"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="323"/> <source>Email the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="528"/> <source>Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="538"/> <source>Shortcut Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="540"/> <source>Pinned Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="542"/> <source>Recently Updated Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1437"/> <location filename="../nixnote.cpp" line="2350"/> <source>Log in to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1439"/> <location filename="../nixnote.cpp" line="2352"/> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <location filename="../nixnote.cpp" line="1761"/> <location filename="../nixnote.cpp" line="1857"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <source>No notes selected.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1722"/> <source>Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1724"/> <source>Export Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1749"/> <source>Performing backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1751"/> <source>Performing export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1768"/> <source>Database backup complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1770"/> <source>Note extract complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1796"/> <source>This is used to restore a database from backups. It is HIGHLY recommended that this only be used to populate an empty database. Restoring into a database that already has data can cause problems. Are you sure you want to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1819"/> <source>NixNote Export (*.nnex);;Evernote Export (*.enex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1846"/> <source>Restoring database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1848"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1880"/> <source>Database has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1882"/> <source>Notes have been imported.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <location filename="../nixnote.cpp" line="1918"/> <source>Sync Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <source>Sync completed with errors.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1918"/> <source>Sync error. See message log for details</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync completed successfully.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2002"/> <source>Untitled note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>This note has never been synchronized with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3872"/> <source>Error loading Webcam plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3887"/> <source>Error loading Hunspell plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3913"/> <location filename="../nixnote.cpp" line="3965"/> <source>PDF Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>Export complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3937"/> <source>Exporting Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3938"/> <source>Exporting notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2391"/> <location filename="../nixnote.cpp" line="2398"/> <source>Error retrieving note.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2392"/> <location filename="../nixnote.cpp" line="2399"/> <source>Error retrieving note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <location filename="../nixnote.cpp" line="2431"/> <source>Note Restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <source>A new copy has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2431"/> <source>Note successfully restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2434"/> <source>Note restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2650"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3054"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex the entire database?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3247"/> <source>Notes will be reindexed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Webcam plugin not found or could not be loaded</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3281"/> <source>Unable to find webcam or capture image.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3282"/> <source>Webcam Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3432"/> <source>Note Reindexed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3444"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3447"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3451"/> <source>this note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3455"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3816"/> <source>Press ESC to exit.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteFormatter</name> <message> <location filename="../html/noteformatter.cpp" line="657"/> <source>File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/noteformatter.cpp" line="691"/> <source>Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/noteformatter.cpp" line="695"/> <source>KB</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteHistorySelect</name> <message> <location filename="../dialog/notehistoryselect.cpp" line="32"/> <source>Note History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="34"/> <source>Import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="39"/> <source>Replace current note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="80"/> <source>Current copy on Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="93"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="95"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteProperties</name> <message> <location filename="../dialog/noteproperties.cpp" line="37"/> <source>Note Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/noteproperties.cpp" line="38"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NotebookProperties</name> <message> <location filename="../dialog/notebookproperties.cpp" line="38"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="42"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="46"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="52"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="60"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="62"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="135"/> <source>Add Notebook</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OAuthWindow</name> <message> <location filename="../oauth/oauthwindow.cpp" line="70"/> <source>Please Grant NixNote Access</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="81"/> <source>SSL Support not found. Aborting connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="132"/> <source>Error receiving temporary credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="176"/> <source>Error receiving permanent credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="219"/> <source>Error receiving authorization</source> <translation type="unfinished"></translation> </message> </context> <context> <name>PopplerViewer</name> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source>Page </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source> of </source> <translation type="unfinished"></translation> </message> </context> <context> <name>PreferencesDialog</name> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="30"/> <source>User Settings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="49"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="92"/> <source>Appearance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="98"/> <source>Locale</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="104"/> <source>Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="110"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="116"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="121"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="127"/> <source>Advanced</source> <translation type="unfinished"></translation> </message> </context> <context> <name>QApplication</name> <message> <location filename="../dialog/screencapture.cpp" line="108"/> <source>Use your mouse to draw a rectangle to screenshot or exit pressing any key or using the right or middle mouse buttons.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/screencapture.cpp" line="145"/> <source>%1 x %2 pixels </source> <translation type="unfinished"></translation> </message> </context> <context> <name>QObject</name> <message> <location filename="../gui/ntableview.cpp" line="175"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="176"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="177"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="178"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="179"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="180"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="181"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="182"/> <source>Deletion Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="183"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="184"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="185"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="186"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="187"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="188"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="189"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="190"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="191"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="192"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="193"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="194"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="195"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="196"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="197"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderButton</name> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="35"/> <source>Mark as Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="36"/> <source>Change Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="37"/> <source>Clear Reminder</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderManager</name> <message> <location filename="../reminders/remindermanager.cpp" line="85"/> <source>Reminders Due</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderSetDialog</name> <message> <location filename="../dialog/remindersetdialog.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/remindersetdialog.cpp" line="48"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>RemoteQuery</name> <message> <location filename="../filters/remotequery.cpp" line="113"/> <location filename="../filters/remotequery.cpp" line="130"/> <source>Today</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SavedSearchProperties</name> <message> <location filename="../dialog/savedsearchproperties.cpp" line="35"/> <source>Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="43"/> <source>Query</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="51"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="53"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="106"/> <source>Add Saved Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SearchPreferences</name> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="36"/> <source>Index Attachments</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="44"/> <source>Clear Notebook Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="48"/> <source>Clear Tag Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="52"/> <source>Clear Search Text on Notebook Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="56"/> <source>Show Any Matching Tags When Selecting Multiple Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="60"/> <source>Index PDFs locally</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="64"/> <source>Background Indexing (requires restart & may cause issues on some systems)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="68"/> <source>Experimental: Force search to lower case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="73"/> <source>Minimum Image Recognition Weight</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ShortcutDialog</name> <message> <location filename="../dialog/shortcutdialog.cpp" line="41"/> <source>Defined Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/shortcutdialog.cpp" line="42"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SpellCheckDialog</name> <message> <location filename="../dialog/spellcheckdialog.cpp" line="35"/> <source>Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="50"/> <source>Suggestion</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="56"/> <source>Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="57"/> <source>Ignore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="58"/> <source>Ignore All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="59"/> <source>Add To Dictionary</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="66"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncPreferences</name> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="34"/> <source>Sync automatically</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="38"/> <source>Every 15 minutes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="39"/> <source>Every 30 minutes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="40"/> <source>Every hour</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="41"/> <source>Every day</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="43"/> <source>Sync on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="45"/> <source>Sync on shutdown</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="47"/> <source>Enable sync notifications</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="48"/> <source>Show successful syncs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="49"/> <source>Restart sync on API limit (experimental)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="51"/> <source>Enable Proxy*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="52"/> <source>Enable Socks5</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="53"/> <source>Proxy Hostname</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="54"/> <source>Proxy Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="55"/> <source>Proxy Username</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="56"/> <source>Proxy Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="57"/> <source>*Note: Restart required</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="73"/> <source>Popup message on sync errors.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncRunner</name> <message> <location filename="../threads/syncrunner.cpp" line="134"/> <source>Beginning Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="142"/> <source>Downloading changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="192"/> <source>Sync Complete Successfully</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <location filename="../threads/syncrunner.cpp" line="267"/> <source>Download </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <source>% complete for notebooks, tags, & searches.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="247"/> <source>Download complete for notebooks, tags, & searches. Downloading notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="267"/> <source>% complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="280"/> <source>Download complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>Downloading </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <source>% complete for tags in shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="721"/> <source>Downloading notes for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="743"/> <source>% complete for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1149"/> <source>Error uploading note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1151"/> <source>Error uploading note with a missing title!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="721"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TableDialog</name> <message> <location filename="../dialog/tabledialog.cpp" line="30"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="34"/> <source>Percent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="35"/> <source>Pixels</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="51"/> <source>Rows</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="53"/> <source>Columns</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="55"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="57"/> <source>Unit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="64"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="67"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TablePropertiesDialog</name> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="72"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="105"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="86"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="87"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="106"/> <source>Cell Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="214"/> <source>Row 1 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="216"/> <source>Row 1 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="218"/> <source>Row 1 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="220"/> <source>Row 2 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="222"/> <source>Row 2 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="224"/> <source>Row 2 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="226"/> <source>Row 3 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="228"/> <source>Row 3 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="230"/> <source>Row 3 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="456"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="464"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="480"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="494"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="511"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="526"/> <source>Percent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="465"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="479"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="493"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="510"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="525"/> <source>Pixels</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="476"/> <source>Top Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="490"/> <source>Bottom Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="507"/> <source>Left Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="522"/> <source>Right Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="560"/> <source>Border Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="561"/> <source>Font Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="562"/> <source>Background Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="576"/> <source>Border Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="587"/> <source>Padding</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="597"/> <source>Top Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="606"/> <source>Bottom Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="615"/> <source>Left Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="624"/> <source>Right Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="636"/> <source>Horizontal Alignment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="641"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="642"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="643"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="644"/> <source>Center</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="676"/> <source>Solid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="677"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="678"/> <source>Dotted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="679"/> <source>Dashed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="680"/> <source>Double</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="681"/> <source>Ridge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="682"/> <source>Inset</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="683"/> <source>Outset</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagEditorNewTag</name> <message> <location filename="../gui/browserWidgets/tageditornewtag.cpp" line="55"/> <source>Click to add tag...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagProperties</name> <message> <location filename="../dialog/tagproperties.cpp" line="36"/> <source>Tag</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="48"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="50"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="102"/> <source>Add Tag</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ThumbnailPreferences</name> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="14"/> <source>Disable thumbnail generation</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="15"/> <source>Images to generate per interval</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="16"/> <source>Minimum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="17"/> <source>Maximum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>UrlEditor</name> <message> <location filename="../gui/browserWidgets/urleditor.cpp" line="45"/> <source>Click to set source URL...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>WatchFolderAdd</name> <message> <location filename="../dialog/watchfolderadd.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="51"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="55"/> <source>Directory</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="63"/> <source>Keep</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="64"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="90"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="92"/> <source>After import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="94"/> <source>Include subdirectories</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="101"/> <source>Add Import Folder</source> <translation type="unfinished"></translation> </message> </context> <context> <name>WatchFolderDialog</name> <message> <location filename="../dialog/watchfolderdialog.cpp" line="38"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="42"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="50"/> <source>Auto Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="62"/> <source>Add</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="66"/> <source>Edit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="71"/> <location filename="../dialog/watchfolderdialog.cpp" line="162"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="112"/> <source>Directory</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="113"/> <source>Target Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="114"/> <location filename="../dialog/watchfolderdialog.cpp" line="159"/> <source>Keep</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="115"/> <source>Include Subdirectories</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="169"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="172"/> <source>No</source> <translation type="unfinished"></translation> </message> </context> </TS> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/translations/nixnote2_cs_CZ.ts�������������������������������������������������������0000664�0000000�0000000�00000632573�13156041044�0021217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="cs_CZ"> <context> <name>AboutDialog</name> <message> <location filename="../dialog/aboutdialog.cpp" line="36"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/aboutdialog.cpp" line="53"/> <source>Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available.</source> <translation><span align="center"><p>ÄŒeský pÅ™eklad MiloÅ¡ Kožina, 2015.<br> ChybÄ›jící pÅ™eklady, chyby a námÄ›ty na vylepÅ¡ení <br> posílejte prosím na <i>Milos.Kozina@email.cz</i>.</p></span></translation> </message> </context> <context> <name>AccountDialog</name> <message> <location filename="../dialog/accountdialog.cpp" line="37"/> <source>Account Information</source> <translation>Informace o úÄtu</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="40"/> <source>Normal</source> <translation>Normální</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="46"/> <source>Premium</source> <translatorcomment>TODO - OVĚŘIT V GUI</translatorcomment> <translation>Prémiový</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="48"/> <source>VIP</source> <translation>VIP</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="50"/> <source>Manager</source> <translatorcomment>TODO - OVĚŘIT V GUI</translatorcomment> <translation>Manažerský</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="52"/> <source>Support</source> <translatorcomment>TODO - OVĚŘIT V GUI</translatorcomment> <translation>Podpora</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="54"/> <source>Admin</source> <translatorcomment>TODO - OVĚŘIT V GUI</translatorcomment> <translation>Administrativní</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="75"/> <source> Bytes</source> <translation> Byte(ů)</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="79"/> <source> KB</source> <translation> KB</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="83"/> <source> MB</source> <translation> MB</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="90"/> <source>Account:</source> <translation>ÚÄet:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="93"/> <source>User Name:</source> <translation>Uživatelské jméno:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="95"/> <source>Account Type:</source> <translation>Typ úÄtu:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="97"/> <source>Limit:</source> <translation>Limit:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="99"/> <source>Uploaded In This Period:</source> <translation>Nahráno v tomto období:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="103"/> <source>Less than 1MB</source> <translation>MénÄ› než 1MB</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="104"/> <source>Current Cycle Ends:</source> <translation>Nahrávací období konÄí:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="112"/> <source>OK</source> <translation>OK</translation> </message> </context> <context> <name>AccountMaintenanceDialog</name> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="34"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="35"/> <source>Close</source> <translation>Zavřít</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="36"/> <source>Add</source> <translation>PÅ™idat</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="37"/> <source>Rename</source> <translation>PÅ™ejmenovat</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="38"/> <source>Delete</source> <translation>Smazat</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="64"/> <source>User Account Maintenance</source> <translation>Správa uživatelských úÄtů</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="104"/> <source>Are you sure you want to delete this account?</source> <translation>Opravdu chcete smazat tento úÄet?</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="105"/> <source>Verify Delete</source> <translation>Potvrzení smazání</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="117"/> <source>You cannot delete the active account.</source> <translation>Nelze smazat aktivní uživatelský úÄet.</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="170"/> <location filename="../dialog/accountmaintenancedialog.cpp" line="194"/> <source>Switch to </source> <translation>PÅ™epnout na </translation> </message> </context> <context> <name>AddNote</name> <message> <location filename="../cmdtools/addnote.cpp" line="33"/> <source>Untitled Note</source> <translation>Nová poznámka</translation> </message> </context> <context> <name>AddUserAccountDialog</name> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="38"/> <source>Server</source> <translation>Server</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="39"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="41"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="46"/> <source>Account Name</source> <translation>Název úÄtu</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="69"/> <source>Evernote</source> <translation>Evernote</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="70"/> <source>Yinxiang Biji</source> <translation>Yinxiang Biji</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="71"/> <source>Evernote Sandbox</source> <translation>Evernote Sandbox (testovací)</translation> </message> </context> <context> <name>AppearancePreferences</name> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="39"/> <source>Show tray icon</source> <translation>Zobrazovat ikonu v systémové Äásti panelu</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="40"/> <source>Display PDFs inline**</source> <translation>Zobrazuj PDF jako vložené**</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="41"/> <source>Show splash screen on startup</source> <translation>Zobrazovat úvodní obrázek pÅ™i spuÅ¡tÄ›ní</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="42"/> <source>Start automatically at login</source> <translation>Spustit automaticky po pÅ™ihlášení</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="43"/> <source>Confirm Deletes</source> <translation>Potvrzení smazání</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="44"/> <source>Show missed reminders on startup</source> <translation>Zobrazovat zmeÅ¡kané pÅ™ipomínky pÅ™i spuÅ¡tÄ›ní</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="45"/> <source>Always Start minimized</source> <translation>SpouÅ¡tÄ›t minimalizované</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="46"/> <source>Show notebook and tag totals</source> <translation>Zobrazovat poÄty u složek a Å¡títků</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="47"/> <source>Auto-Hide editor toolbar</source> <translatorcomment>TODO: ověřit v GUI</translatorcomment> <translation>Automaticky skrývat nástroje editoru</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="49"/> <source>Disable note editing on statup</source> <translation>Vypnout editaci poznámky pÅ™i startu</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="50"/> <source>Focus on Note Title on New Note</source> <translation>Dát fokus na název nové poznámky</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="51"/> <source>Limit Editor to Web Fonts*</source> <translation>Omezit editor na Webové Fonty*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="53"/> <source>Show note list grid*</source> <translatorcomment>TODO: Ověřit v GUI</translatorcomment> <translation>Zobrazovat seznam poznámek s mřížkou*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="54"/> <source>Alternate note list colors*</source> <translatorcomment>TODO: Ověřit v GUI</translatorcomment> <translation>Střídat barvy v seznamu poznámek*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="55"/> <source>Set author on new notes.</source> <translation>Nastavit autora na nových poznámkách.</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="57"/> <source>Preview fonts in editor dialag*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="61"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="68"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="75"/> <source>Do Nothing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="62"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="69"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="76"/> <source>Show/Hide NixNote</source> <translation>Zobrazit/Skrýt NixNote</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="63"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="70"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="77"/> <source>New Text Note</source> <translation>Nová poznámka</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="64"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="71"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="78"/> <source>New Quick Note</source> <translation>Rychlá poznámka</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="65"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="72"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="79"/> <source>Screen Capture</source> <translation>Snímat obrazovku</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="82"/> <source>Open New Tab</source> <translation>Otevřít nový panel</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="83"/> <source>Open New Window</source> <translation>Otevřít nové okno</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="98"/> <source>Qt Default</source> <translation>Výchozí Qt</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="99"/> <source>notify-send</source> <translation>UpozornÄ›ní na odeslání</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="106"/> <source>Startup Behavior</source> <translation>Chování pÅ™i spuÅ¡tÄ›ní</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="108"/> <source>Restore Selection Criteria</source> <translation>Obnovit kritéria výbÄ›ru</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="109"/> <source>Select Default Notebook</source> <translation>Vyberte výchozí poznámkový blok</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="110"/> <source>View All Notebooks</source> <translation>Zobrazit vÅ¡echny poznámkové bloky</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="120"/> <source>Minimize to tray</source> <translation>Minimalizovat do systémové Äásti</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="121"/> <source>Close to tray</source> <translation>Zavřít do systémové Äásti</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="143"/> <source>Notification Service</source> <translatorcomment>TODO: Ověřit v GUI</translatorcomment> <translation>Služba ohlášení</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="146"/> <source>Middle Click Open Behavior</source> <translation>Chování prostÅ™edního tlaÄítka pÅ™i otevírání</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="149"/> <source>Tray Icon Click Action</source> <translation>Kliknutí na ikonu v systémové Äásti panelu</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="152"/> <source>Tray Icon Middle Click Action</source> <translation>Kliknutí prostÅ™edním tlaÄítkem na ikonu v systémové Äásti panelu</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="155"/> <source>Tray Icon Double Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="158"/> <source>Default GUI Font*</source> <translation>Výchozí písmo v GUI</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="161"/> <source>Default GUI Font Size*</source> <translation>Výchozí velikost písma v GUI</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="164"/> <source>Default Editor Font*</source> <translation>Výchozí písmo editoru</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="167"/> <source>Default Editor Font Size*</source> <translation>Výchozí velikost písma v editoru</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="171"/> <source>* May require restart on some systems.</source> <translation>* Může vyžadovat restart na nÄ›kterých systémech.</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="172"/> <source>** Can crash on Gnome systems.</source> <translation>** Může způsobit pád aplikace v prostÅ™edí Gnome.</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="102"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="405"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="423"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="442"/> <source>System Default</source> <translation>Výchozí systémové</translation> </message> </context> <context> <name>AttachmentIconBuilder</name> <message> <location filename="../html/attachmenticonbuilder.cpp" line="74"/> <source>Bytes</source> <translation>Byte(ů)</translation> </message> <message> <location filename="../html/attachmenticonbuilder.cpp" line="78"/> <source>KB</source> <translation>KB</translation> </message> </context> <context> <name>AuthorEditor</name> <message> <location filename="../gui/browserWidgets/authoreditor.cpp" line="37"/> <source>Click to set author</source> <translatorcomment>TODO - OVĚŘIT V GUI</translatorcomment> <translation>Klik pro nastavení autora</translation> </message> </context> <context> <name>BatchImport</name> <message> <location filename="../xml/batchimport.cpp" line="112"/> <source>Untitled Note</source> <translation>Nová poznámka</translation> </message> </context> <context> <name>CloseNotebookDialog</name> <message> <location filename="../dialog/closenotebookdialog.cpp" line="37"/> <source>Open/Close Notebooks</source> <translation>Otevřít/zavřít poznámkové bloky</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="42"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="43"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="56"/> <source>Open Notebooks</source> <translation>Otevřít poznámkové bloky</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="57"/> <source>Closed Notebooks</source> <translation>ZavÅ™ené poznámkové bloky</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="59"/> <source>Open</source> <translation>Otevřít</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="60"/> <source>Close</source> <translation>Zavřít</translation> </message> </context> <context> <name>CmdLineQuery</name> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="67"/> <source>ID</source> <translation>ID</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="69"/> <source>Title</source> <translation>Název</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="72"/> <source>Notebook</source> <translation>Poznámkový blok</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="75"/> <source>Tags</source> <translation>Å títky</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="78"/> <source>Created</source> <translation>VytvoÅ™eno</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="81"/> <source>Updated</source> <translation>ZmÄ›nÄ›no</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="84"/> <source>Sync</source> <translation>Synchronizováno</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="87"/> <source>Source URL</source> <translation>Zdrojová URL</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="90"/> <source>Author</source> <translation>Autor</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="93"/> <source>Todo</source> <translation>TODO (úkol)</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="96"/> <source>Reminder Due</source> <translation>Termín upomínky</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="99"/> <source>Reminder Done</source> <translation>Upomínka splnÄ›na</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="181"/> <location filename="../cmdtools/cmdlinequery.cpp" line="190"/> <source>No</source> <translation>Ne</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="183"/> <location filename="../cmdtools/cmdlinequery.cpp" line="188"/> <source>Yes</source> <translation>Ano</translation> </message> </context> <context> <name>CmdLineTool</name> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="56"/> <source>Unable to attach to shared memory segment. Is the other NixNote running? </source> <translation>Nemohu se pÅ™ipojit ke sdílené pamÄ›ti. Není spuÅ¡tÄ›ný další NixNote?</translation> </message> <message> <source>Type DELETE to very: </source> <translation type="vanished">NapiÅ¡te "DELETE" pro potvrzení smazání:</translation> </message> <message> <source>No resospnse received from NixNote.</source> <translation type="vanished">Neobdržena žádná odezva z NixNote.</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="315"/> <location filename="../cmdtools/cmdlinetool.cpp" line="452"/> <source> has been created. </source> <translation> byla vytvoÅ™ena.</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="318"/> <source>No response from NixNote. Please verify that the note was created. </source> <translation>Neobdržena odezva z NixNote. Prosím ověřte, že poznámka byla vytvoÅ™ena.</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="332"/> <source>Untitled Note</source> <translation>Nová poznámka</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="535"/> <source> was not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="538"/> <location filename="../cmdtools/cmdlinetool.cpp" line="609"/> <source> has been appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="541"/> <source>No response from NixNote. Please verify that the note was appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="552"/> <source> was not found. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="221"/> <location filename="../cmdtools/cmdlinetool.cpp" line="654"/> <source>No response received from NixNote.</source> <translation>Neobdržena žádná odezva z NixNote.</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="156"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="663"/> <source>Note not found.</source> <translation>Poznámka nenalezena.</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="674"/> <location filename="../cmdtools/cmdlinetool.cpp" line="690"/> <location filename="../cmdtools/cmdlinetool.cpp" line="722"/> <location filename="../cmdtools/cmdlinetool.cpp" line="742"/> <source>This cannot be done with NixNote running.</source> <translation>Nelze provést pokud NixNote běží.</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="732"/> <location filename="../cmdtools/cmdlinetool.cpp" line="752"/> <source>Notebook not found: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="765"/> <source>OAuth token not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="783"/> <source>Error synchronizing with Evernote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="786"/> <source>Sync completed.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ColorSettings</name> <message> <location filename="../settings/colorsettings.cpp" line="37"/> <source>White</source> <translation>Bílá</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="38"/> <source>Red</source> <translation>ÄŒervená</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="39"/> <source>Blue</source> <translation>Modrá</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="40"/> <source>Green</source> <translation>Zelená</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="41"/> <source>Yellow</source> <translation>Žlutá</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="42"/> <source>Black</source> <translation>ÄŒerná</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="43"/> <source>Purple</source> <translation>Fialová</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="44"/> <source>Brown</source> <translation>HnÄ›dá</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="45"/> <source>Orange</source> <translation>Oranžová</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="46"/> <source>Grey</source> <translation>Å edá</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="47"/> <source>Powder Blue</source> <translation>Modrá metalíza</translation> </message> </context> <context> <name>CommunicationManager</name> <message> <location filename="../communication/communicationmanager.cpp" line="675"/> <source>Linked notebook notestore URL missing.</source> <translatorcomment>TODO - OVĚŘIT V GUI</translatorcomment> <translation>ChybÄ›jící URL úložiÅ¡tÄ› pro pÅ™ilinkovaný poznámkový blok.</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source>API rate limit exceeded. Please try again in </source> <translation>PÅ™ekroÄen limit rychlosti API. Prosím zkuste to znovu za </translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <source> minutes.</source> <translation> minut(y).</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source> minute.</source> <translation> minutu.</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1206"/> <source>EDAMSystemException </source> <translation>Systémová chyba protokolu EDAM </translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1208"/> <source>EDAMSystemException: Unknown error</source> <translation>Systémová chyba protokolu EDAM: Neznámá chyba</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1232"/> <source>EDAMNotFoundException: Note not found</source> <translation>Chyba protokolu EDAM (nenalezeno): Poznámka nenalezena</translation> </message> </context> <context> <name>DatabaseStatus</name> <message> <location filename="../dialog/databasestatus.cpp" line="35"/> <source>Database Status</source> <translation>Stav databáze</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="47"/> <source>Total Notes:</source> <translation>Poznámek celkem:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="49"/> <source>Total Resources:</source> <translatorcomment>NapÅ™. obrázky v HTML, atd.</translatorcomment> <translation>Příloh celkem:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="51"/> <source>Unindexed Notes:</source> <translation>Nezindexovované poznámky:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="53"/> <source>Unindexed Resources:</source> <translatorcomment>NapÅ™. obrázky v HTML, atd.</translatorcomment> <translation>Nezindexovované přílohy:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="55"/> <source>Thumbnails Needed:</source> <translation>Náhledy poznámek:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="60"/> <source>OK</source> <translation>OK</translation> </message> </context> <context> <name>DateDelegate</name> <message> <location filename="../gui/datedelegate.cpp" line="42"/> <source>Today</source> <translation>Dnes</translation> </message> </context> <context> <name>DateEditor</name> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="38"/> <source>Created:</source> <translation>VytvoÅ™eno:</translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="42"/> <source>Updated:</source> <translation>ZmÄ›nÄ›no:</translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="46"/> <source>Subject:</source> <translation>PÅ™edmÄ›t:</translation> </message> </context> <context> <name>DebugPreferences</name> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="38"/> <source>Disable image search highlighting.</source> <translation>Vypnout zvýraznÄ›ní obrázků pÅ™i hledání.</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="35"/> <source>Strict note checking.</source> <translation>Striktní kontrola poznámky.</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="37"/> <source>Disable uploads to server.</source> <translation>Vypnout nahrávání na server.</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="39"/> <source>Show LID column (requires restart).</source> <translation>Zobrazovat sloupec LID (vyžaduje restart).</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="40"/> <source>Disable Tag Sorting (useful for non-ASCII sort bug).</source> <translation>Vypnout Å™azení Å¡títků (užiteÄné pÅ™i problémech se Å™azením ne-ASCII znaků).</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="41"/> <source>Force UTF8 Encoding.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="59"/> <source>Intercept Unix SIGHUP (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="64"/> <source>Use multipe theads to save note contents (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="68"/> <source>Use libtidy directly (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="72"/> <source>Auto-Save Interval (in seconds).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="79"/> <source>Message Level</source> <translation>Úroveň logování</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="82"/> <source>Trace</source> <translation>Trasování (trace)</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="83"/> <source>Debug</source> <translation>LadÄ›ní (debug)</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="84"/> <source>Info</source> <translation>Info</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="85"/> <source>Warnings</source> <translation>Varování (warnings)</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="86"/> <source>Errors</source> <translation>Chyby (errors)</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="87"/> <source>Fatal</source> <translation>Fatální chyby (fatal)</translation> </message> </context> <context> <name>EditorButtonBar</name> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="37"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="133"/> <source>Undo</source> <translation>ZpÄ›t (vrátit akci)</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="38"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="137"/> <source>Redo</source> <translation>Znovu (opakovat akci)</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="39"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="142"/> <source>Cut</source> <translation>Vyjmout</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="40"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="146"/> <source>Copy</source> <translation>Kopírovat</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="41"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="150"/> <source>Paste</source> <translation>Vložit</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="42"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="153"/> <source>Remove Formatting</source> <translation>Odstranit formátování</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="43"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="159"/> <source>Bold</source> <translation>TuÄnÄ›</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="44"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="166"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="167"/> <source>Italics</source> <translation>Kurzíva</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="45"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="184"/> <source>Superscript</source> <translation>Horní index</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="46"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="188"/> <source>Subscript</source> <translation>Spodní index</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="47"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="174"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="175"/> <source>Underline</source> <translation>Podtržené</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="48"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="180"/> <source>Strikethrough</source> <translation>PÅ™eÅ¡krtnuté</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="49"/> <source>Align Left</source> <translation>Zarovnat vlevo</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="50"/> <source>Align Center</source> <translation>Zarovnat na stÅ™ed</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="51"/> <source>Align Full</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="52"/> <source>Align Right</source> <translation>Zarovnat vpravo</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="53"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="208"/> <source>Horizontal Line</source> <translation>Vodorovná linka</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="54"/> <source>Insert Date && Time</source> <translation>Vložit Datum a ÄŒas</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="55"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="220"/> <source>Shift Right</source> <translation>Odsadit vpravo</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="56"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="224"/> <source>Shift Left</source> <translation>Odsadit vlevo (zruÅ¡it odsazení)</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="57"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="228"/> <source>Bullet List</source> <translation>NeÄíslovaný seznam (body)</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="58"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="232"/> <source>Number List</source> <translation>Číslovaný seznam</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="59"/> <source>Font</source> <translation>Písmo</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="60"/> <source>Font Size</source> <translation>Velikost písma</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="61"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="248"/> <source>Font Color</source> <translation>Barva písma</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="62"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="257"/> <source>Highlight</source> <translation>ZvýraznÄ›ní</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="63"/> <source>To-do</source> <translation>TODO (úkol)</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="192"/> <source>Center Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="196"/> <source>Fully Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="214"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="215"/> <source>Insert Date & Time</source> <translation>Vložit Datum a ÄŒas</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="262"/> <source>Todo</source> <translation>TODO (úkol)</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="64"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="266"/> <source>Spell Check</source> <translation>Kontrola pravopisu</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="65"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="270"/> <source>Insert Table</source> <translation>Vložit tabulku</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="66"/> <source>HTML Entities</source> <translation>HTML speciální znaky</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="204"/> <source>Left Justify</source> <translation>Zarovnat vlevo</translation> </message> <message> <source>Center</source> <translation type="vanished">Zarovnat na stÅ™ed</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="200"/> <source>Right Justify</source> <translation>Zarovnat vpravo</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="274"/> <source>Insert HTML Entities</source> <translation>Vložit speciální HTML znaky</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="661"/> <source>Times</source> <translatorcomment>TODO - OVĚŘIT V GUI</translatorcomment> <translation>ÄŒasy</translation> </message> </context> <context> <name>EmailDialog</name> <message> <location filename="../dialog/emaildialog.cpp" line="36"/> <source>Send Email</source> <translation>Odeslat Email</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="38"/> <source>Send</source> <translation>Odeslat</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="39"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="51"/> <source>To:</source> <translation>Komu:</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="53"/> <source>BCC:</source> <translation>Slepá kopie:</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="55"/> <source>CC:</source> <translation>Kopie:</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="57"/> <source>Subject:</source> <translation>PÅ™edmÄ›t:</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="59"/> <source>Note:</source> <translation>Poznámka:</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="77"/> <source>CC me on this email</source> <translation>PÅ™idej mne do kopie tohoto Emailu</translation> </message> </context> <context> <name>EmailNote</name> <message> <location filename="../cmdtools/emailnote.cpp" line="261"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation>SMTP server není nastaven. Prosím upÅ™esnÄ›te nastavení v nabídce "PÅ™edvolby".</translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="327"/> <source>Connection Error: Unable to connect to host.</source> <translation>Chyba spojení: NepodaÅ™ilo se pÅ™ipojit k serveru.</translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="333"/> <source>Login Error : Unable to login.</source> <translation>Chyba pÅ™ihlášení: PÅ™ihlášení se nezdaÅ™ilo.</translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="338"/> <source>Send Error : Unable to send email.</source> <translation>Chyba odesílání: Odeslání se nezdaÅ™ilo.</translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="344"/> <source>Message Sent</source> <translation>Zpráva byla odeslána</translation> </message> </context> <context> <name>EmailPreferences</name> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="17"/> <source>SMTP Server</source> <translation>SMTP server</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="18"/> <source>Server Port</source> <translation>Port serveru</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="19"/> <source>Userid</source> <translation>Uživatelské ID</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="20"/> <source>Password</source> <translation>Heslo</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="21"/> <source>Sender Display Name</source> <translation>Jméno odesílatele</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="22"/> <source>Sender Email</source> <translation>Email odesílatele</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="23"/> <source>Connection Type</source> <translation>Typ spojení</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="31"/> <source>Plain Text</source> <translation>Plain text (bez zabezpeÄení)</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="32"/> <source>SSL Connection</source> <translation>SSL pÅ™ipojení</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="33"/> <source>TLS Connection</source> <translation>TLS pÅ™ipojení</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="35"/> <source>Send Test Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="108"/> <location filename="../dialog/preferences/emailpreferences.cpp" line="113"/> <source>Setup Error</source> <translation type="unfinished">Chyba nastavení</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="109"/> <source>You must specify a SMTP server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="114"/> <source>You must specify a sender email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="146"/> <source>Test Email From NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="152"/> <source><h1>This is a test email from NixNote.</h1> </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="153"/> <source>If you are reading it then your email preferences are are setup properly.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Connection Error</source> <translation type="unfinished">Chyba spojení</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Unable to connect to host.</source> <translation type="unfinished">NepodaÅ™ilo se pÅ™ipojit k serveru.</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Login Error</source> <translation type="unfinished">Chyba pÅ™ihlášení</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Unable to login.</source> <translation type="unfinished">PÅ™ihlášení se nezdaÅ™ilo.</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Send Error</source> <translation type="unfinished">Chyba odesílání</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Unable to send email.</source> <translation type="unfinished">Odeslání se nezdaÅ™ilo.</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message Sent</source> <translation type="unfinished">Zpráva byla odeslána</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message sent.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnCryptDialog</name> <message> <location filename="../dialog/encryptdialog.cpp" line="31"/> <source>Encrypt Text</source> <translation>ZaÅ¡ifrovat text</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="47"/> <source>Password</source> <translation>Heslo</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="49"/> <source>Verify</source> <translation>Heslo (ověření)</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="51"/> <source>Hint</source> <translation>NápovÄ›da k heslu</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="53"/> <source>Remember Password</source> <translation>Pamatovat si heslo</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="61"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="65"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="113"/> <source>Password must be at least 4 characters</source> <translation>Heslo musí být minimálnÄ› 4 znaky dlouhé</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="117"/> <source>Passwords do not match</source> <translation>Heslo nesouhlasí s ověřením</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="121"/> <source>Hint must be entered</source> <translation>NápovÄ›da k heslu musí být zadána</translation> </message> </context> <context> <name>EnDecryptDialog</name> <message> <location filename="../dialog/endecryptdialog.cpp" line="35"/> <source>Decrypt</source> <translation>DeÅ¡ifrovat</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="51"/> <source>Password</source> <translation>Heslo</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="52"/> <source>Hint</source> <translation>NápovÄ›da k heslu</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="59"/> <source>Permanently Decrypt</source> <translation>Trvale deÅ¡ifrovat</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="61"/> <source>Remember Password</source> <translation>Pamatovat si heslo</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="66"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="70"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> </context> <context> <name>ExportData</name> <message> <location filename="../xml/exportdata.cpp" line="54"/> <source>Cannot open file.</source> <translation>Soubor nelze otevřít.</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="62"/> <source>Export</source> <translation>Export</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="81"/> <source>Backup</source> <translation>Záloha</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="114"/> <source>Tags</source> <translation>Å títky</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="151"/> <source>Notebooks</source> <translation>Poznámkové bloky</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="360"/> <source>Searches</source> <translation>Hledání</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="405"/> <source>Linked Notebooks</source> <translation>PÅ™ilinkované poznámkové bloky</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="448"/> <source>Shared Notebooks</source> <translation>Sdílené poznámkové bloky</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="508"/> <source>Notes</source> <translation>Poznámky</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="725"/> <source>Backup Canceled</source> <translation>Zálohování zruÅ¡eno</translation> </message> </context> <context> <name>ExternalBrowse</name> <message> <location filename="../gui/externalbrowse.cpp" line="32"/> <source>NixNote</source> <translation>NixNote</translation> </message> <message> <location filename="../gui/externalbrowse.cpp" line="124"/> <source>NixNote - </source> <translation>NixNote - </translation> </message> </context> <context> <name>ExtractNotes</name> <message> <location filename="../cmdtools/extractnotes.cpp" line="41"/> <location filename="../cmdtools/extractnotes.cpp" line="82"/> <source>Output file not specified.</source> <translation>Výstupní soubor nebyl specifikován.</translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="64"/> <source>Deleting notes:</source> <translation>Smazání poznámek:</translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="65"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> <message> <source>Type DELETE to very: </source> <translatorcomment>TODO: ověřit v GUI</translatorcomment> <translation type="vanished">NapiÅ¡te "DELETE" pro potvrzení smazání:</translation> </message> </context> <context> <name>FavoritesView</name> <message> <location filename="../gui/favoritesview.cpp" line="68"/> <source>Shortcuts</source> <translation>Zkratky</translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="90"/> <source>Remove from shortcuts</source> <translation>Odebrat ze zkratek</translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="565"/> <source>Are you sure you want to remove this shortcut?</source> <translation>Opravdu chcete smazat tuto zkratku?</translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="566"/> <source>Verify Delete</source> <translation>Potvrzení smazání</translation> </message> </context> <context> <name>FileWatcher</name> <message> <location filename="../watcher/filewatcher.cpp" line="72"/> <source>Error removing file: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FindReplace</name> <message> <location filename="../gui/findreplace.cpp" line="46"/> <source>Next</source> <translation>Další</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="47"/> <source>Previous</source> <translation>PÅ™edchozí</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="48"/> <source>Match case</source> <translation>RozliÅ¡ovat malá/VELKÃ</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="57"/> <source>Replace</source> <translation>Nahradit</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="58"/> <source>Replace all</source> <translation>Nahradit vÅ¡e</translation> </message> </context> <context> <name>HtmlEntitiesDialog</name> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="33"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="34"/> <source>Close</source> <translation>Zavřít</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="35"/> <source>Edit entries list</source> <translation>Upravit výbÄ›r znaků</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="36"/> <source>Save entities list</source> <translation>Uložit výbÄ›r znaků</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="71"/> <source>HTML Entities Selection</source> <translation>VýbÄ›r speciálních znaků</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="206"/> <source>Comma separated list of HTML entities. See http://www.w3schools.com/charsets/ for list.</source> <translation>Seznam HTML entit (speciálních znaků) oddÄ›lených Äárkou. Seznam napÅ™. na http://www.w3schools.com/charsets/ .</translation> </message> </context> <context> <name>ImportData</name> <message> <location filename="../xml/importdata.cpp" line="59"/> <source>Imported Notes</source> <translation>Naimportované poznámky</translation> </message> <message> <location filename="../xml/importdata.cpp" line="106"/> <source>Scanning File</source> <translation>NaÄítám importní soubor</translation> </message> <message> <location filename="../xml/importdata.cpp" line="107"/> <location filename="../xml/importdata.cpp" line="119"/> <source> notes found.</source> <translation> poznámek nalezeno.</translation> </message> <message> <location filename="../xml/importdata.cpp" line="130"/> <source>Importing</source> <translation>Importuji</translation> </message> <message> <location filename="../xml/importdata.cpp" line="131"/> <source>Importing Notes</source> <translation>Import poznámek</translation> </message> <message> <location filename="../xml/importdata.cpp" line="133"/> <source>Restore</source> <translation>Obnovit</translation> </message> <message> <location filename="../xml/importdata.cpp" line="134"/> <source>Restoring Notes</source> <translation>Obnovení poznámek</translation> </message> </context> <context> <name>ImportEnex</name> <message> <location filename="../xml/importenex.cpp" line="40"/> <source>Imported Notes</source> <translation>Naimportované poznámky</translation> </message> <message> <location filename="../xml/importenex.cpp" line="83"/> <source>Scanning File</source> <translation>NaÄítám importní soubor</translation> </message> <message> <location filename="../xml/importenex.cpp" line="84"/> <location filename="../xml/importenex.cpp" line="94"/> <source> notes found.</source> <translation> poznámek nalezeno.</translation> </message> <message> <location filename="../xml/importenex.cpp" line="101"/> <location filename="../xml/importenex.cpp" line="102"/> <source>Importing Notes</source> <translation>Import poznámek</translation> </message> </context> <context> <name>ImportNotes</name> <message> <location filename="../cmdtools/importnotes.cpp" line="19"/> <source>Input file not specified.</source> <translation>Vstupní soubor nebyl specifikován.</translation> </message> <message> <location filename="../cmdtools/importnotes.cpp" line="24"/> <source>Input file not found.</source> <translation>Vstupní soubor nenalezen.</translation> </message> </context> <context> <name>InsertLatexDialog</name> <message> <location filename="../dialog/insertlatexdialog.cpp" line="32"/> <source>Insert LaTeX Formula</source> <translation>Vložit LaTex vzorec</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="42"/> <source>Formula</source> <translation>Vzorec</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="47"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="52"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> </context> <context> <name>InsertLinkDialog</name> <message> <location filename="../dialog/insertlinkdialog.cpp" line="34"/> <source>Insert Link</source> <translation>Vložit odkaz</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="45"/> <source>URL</source> <translation>URL</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="50"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="54"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> </context> <context> <name>LineEdit</name> <message> <location filename="../gui/lineedit.cpp" line="39"/> <source>Search</source> <translatorcomment>TODO - OVĚŘIT V GUI</translatorcomment> <translation>Hledání</translation> </message> </context> <context> <name>LocalePreferences</name> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="37"/> <source>Date Format</source> <translation>Formát data</translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="40"/> <source>MM/dd/yy - </source> <translation>MM/dd/rr - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="41"/> <source>MM/dd/yyyy - </source> <translation>MM/dd/rrrr - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="42"/> <source>M/dd/yyyy - </source> <translation>M/dd/rrrr - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="43"/> <source>M/d/yyyy - </source> <translation>M/d/rrrr - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="44"/> <source>dd/MM/yy - </source> <translation>dd/MM/rr - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="45"/> <source>d/M/yy - </source> <translation>d/M/rr - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="46"/> <source>dd/MM/yyyy - </source> <translation>dd/MM/rrrr - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="47"/> <source>d/M/yyyy - </source> <translation>d/M/rrrr - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="48"/> <source>yyyy-MM-dd - </source> <translation>rrrr-MM-dd - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="49"/> <source>yy-MM-dd - </source> <translation>rr-MM-dd - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="52"/> <source>Time Format</source> <translation>Formát Äasu</translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="55"/> <source>HH:mm:ss - </source> <translation>HH:mm:ss - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="56"/> <source>HH:mm:ss a - </source> <translation>HH:mm:ss a- </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="57"/> <source>HH:mm - </source> <translation>HH:mm - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="58"/> <source>HH:mm a - </source> <translation>HH:mm a - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="59"/> <source>hh:mm:ss - </source> <translation>hh:mm:ss - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="60"/> <source>hh:mm:ss a- </source> <translation>hh:mm:ss a- </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="61"/> <source>h:mm:ss a - </source> <translation>h:mm:ss a - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="62"/> <source>hh:mm - </source> <translation>hh:mm - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="63"/> <source>hh:mm a - </source> <translation>hh:mm a - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="64"/> <source>h:mm a - </source> <translation>h:mm a - </translation> </message> </context> <context> <name>LocationDialog</name> <message> <location filename="../dialog/locationdialog.cpp" line="33"/> <source>Location</source> <translation>Geografická poloha</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="40"/> <source>Longitude</source> <translation>ZemÄ›pisná délka</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="42"/> <source>Latitude</source> <translation>ZemÄ›pisná šířka</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="44"/> <source>Altitude</source> <translation>NadmoÅ™ská výška</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="49"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="52"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> </context> <context> <name>LocationEditor</name> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="42"/> <source>Click to set location...</source> <translation>Klik pro geografické umístÄ›ní...</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="45"/> <source>Edit...</source> <translation>Upravit...</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="46"/> <source>Clear</source> <translation>VyÄistit</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="47"/> <source>View on map</source> <translation>Zobrazit na mapÄ›</translation> </message> </context> <context> <name>LogViewer</name> <message> <location filename="../dialog/logviewer.cpp" line="41"/> <source>Close</source> <translation>Zavřít</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="43"/> <source>Refresh</source> <translation>Aktualizovat</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="45"/> <source>Save</source> <translation>Uložit</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="54"/> <source>Save Logs</source> <translation>Uložit logy</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>Save Log</source> <translation>Uložit log</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>NixNote Log (*.log);;All Files (*.*)</source> <translation>NixNote Log (*.log);;VÅ¡echny soubory (*.*)</translation> </message> </context> <context> <name>LoginDialog</name> <message> <location filename="../dialog/logindialog.cpp" line="34"/> <source>NixNote Login</source> <translation>NixNote pÅ™ihlášení</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="43"/> <source>Userid</source> <translation>Uživatelské ID</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="44"/> <source>Password</source> <translation>Heslo</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="52"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="56"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> </context> <context> <name>NAttributeTree</name> <message> <location filename="../gui/nattributetree.cpp" line="48"/> <source>Attributes</source> <translation>Vlastnosti</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="129"/> <source>Created</source> <translation>VytvoÅ™eno</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="132"/> <location filename="../gui/nattributetree.cpp" line="213"/> <source>Since</source> <translation>Po</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="136"/> <location filename="../gui/nattributetree.cpp" line="173"/> <location filename="../gui/nattributetree.cpp" line="217"/> <location filename="../gui/nattributetree.cpp" line="254"/> <source>Today</source> <translation>Dnes</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="140"/> <location filename="../gui/nattributetree.cpp" line="177"/> <location filename="../gui/nattributetree.cpp" line="221"/> <location filename="../gui/nattributetree.cpp" line="258"/> <source>Yesterday</source> <translation>VÄera</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="144"/> <location filename="../gui/nattributetree.cpp" line="181"/> <location filename="../gui/nattributetree.cpp" line="225"/> <location filename="../gui/nattributetree.cpp" line="262"/> <source>This week</source> <translation>Tento týden</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="148"/> <location filename="../gui/nattributetree.cpp" line="185"/> <location filename="../gui/nattributetree.cpp" line="229"/> <location filename="../gui/nattributetree.cpp" line="266"/> <source>Last week</source> <translation>Minulý týden</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="152"/> <location filename="../gui/nattributetree.cpp" line="189"/> <location filename="../gui/nattributetree.cpp" line="233"/> <location filename="../gui/nattributetree.cpp" line="270"/> <source>This Month</source> <translation>Tento mÄ›síc</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="156"/> <location filename="../gui/nattributetree.cpp" line="193"/> <location filename="../gui/nattributetree.cpp" line="237"/> <location filename="../gui/nattributetree.cpp" line="274"/> <source>Last Month</source> <translation>Minulý mÄ›síc</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="160"/> <location filename="../gui/nattributetree.cpp" line="197"/> <location filename="../gui/nattributetree.cpp" line="241"/> <location filename="../gui/nattributetree.cpp" line="278"/> <source>This Year</source> <translation>Tento rok</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="164"/> <location filename="../gui/nattributetree.cpp" line="201"/> <location filename="../gui/nattributetree.cpp" line="245"/> <location filename="../gui/nattributetree.cpp" line="282"/> <source>Last Year</source> <translation>Minulý rok</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="169"/> <location filename="../gui/nattributetree.cpp" line="250"/> <source>Before</source> <translation>PÅ™ed</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="210"/> <source>Last Modified</source> <translation>Naposledy zmÄ›nÄ›no</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="289"/> <source>Contains</source> <translation>Obsahuje</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="292"/> <source>Images</source> <translation>Obrázky</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="296"/> <source>Audio</source> <translation>Zvuky</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="300"/> <source>Ink</source> <translation>Ink</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="304"/> <source>Encrypted Text</source> <translation>ZaÅ¡ifrovaný text</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="308"/> <source>To-do items</source> <translation>Úkoly (TODO)</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="312"/> <source>Unfinished to-do items</source> <translation>NedokonÄené úkoly (TODO)</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="316"/> <source>Finished to-do items</source> <translation>DokonÄené úkoly (TODO)</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="320"/> <source>PDF document</source> <translation>PDF dokumenty</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="324"/> <source>Attachment</source> <translation>Přílohy</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="328"/> <source>Reminder</source> <translation type="unfinished">Upomínka</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="332"/> <source>Uncompleted Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="336"/> <source>Future Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="341"/> <source>Source</source> <translation>Zdroj poznámky</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="344"/> <source>Emailed to Evernote</source> <translation>Posláno mailem do Evernote</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="348"/> <source>Email</source> <translation>Email</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="352"/> <source>Web page</source> <translation>Webová stránka</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="356"/> <source>Mobile</source> <translation>Mobilní klient</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="360"/> <source>Another application</source> <translation>Jiná aplikace</translation> </message> </context> <context> <name>NBrowserWindow</name> <message> <location filename="../gui/nbrowserwindow.cpp" line="521"/> <location filename="../gui/nbrowserwindow.cpp" line="3112"/> <source>Today</source> <translation>Dnes</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="523"/> <location filename="../gui/nbrowserwindow.cpp" line="3114"/> <source>Tomorrow</source> <translation>Zítra</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="525"/> <location filename="../gui/nbrowserwindow.cpp" line="3116"/> <source>Yesterday</source> <translation>VÄera</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to Save</source> <translation>Uložení selhalo</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to save this note. Either tidy isn't installed or the note is too complex to save.</source> <translation>NepodaÅ™ilo se uložit tuto poznámku. BuÄ není nainstalován balíÄek "tidy" nebo je poznámka příliÅ¡ složitá pro uložení.</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="1808"/> <source>Insert Link</source> <translation>Vložit odkaz</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>Unable Open</source> <translation>OtevÅ™ení selhalo</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>This is an ink note. Ink notes are not supported since Evernote has not published any specifications on them and I'm too lazy to figure them out by myself.</source> <translation>Toto je INK poznámka. INK poznámky nejsou podporovány, jelikož Evernote nezveÅ™ejnil žádnou jejich specifikaci a autor byl příliÅ¡ líný na to, aby to zjišťoval metodou pokus omyl.</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2240"/> <source>Edit Link</source> <translation>Upravit odkaz</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2304"/> <source>Unable to create LaTeX image</source> <translation>NepodaÅ™ilo se vytvoÅ™it LaTeX obrázek</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2305"/> <source>Unable to create LaTeX image. Are you sure mimetex is installed?</source> <translation>NepodaÅ™ilo se vytvoÅ™it LaTeX obrázek. Jste si jistí, že "mimetex" je nainstalován?</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2635"/> <source>Setup Error</source> <translation>Chyba nastavení</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2636"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation>SMTP server není nastaven. Prosím upÅ™esnÄ›te nastavení v nabídce "PÅ™edvolby".</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2645"/> <source>Sending Email. Please be patient.</source> <translation>Odesílám Email. Chvilku strpení, prosím.</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Connection Error</source> <translation>Chyba spojení</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Unable to connect to host.</source> <translation>NepodaÅ™ilo se pÅ™ipojit k serveru.</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Login Error</source> <translation>Chyba pÅ™ihlášení</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Unable to login.</source> <translation>PÅ™ihlášení se nezdaÅ™ilo.</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Send Error</source> <translation>Chyba odesílání</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Unable to send email.</source> <translation>Odeslání se nezdaÅ™ilo.</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3159"/> <source>Decryption Error</source> <translation>Chyba deÅ¡ifrování</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3160"/> <source>Unknown encryption method. Unable to decrypt.</source> <translation>Neznámá Å¡ifrovací medota. DeÅ¡ifrování selhalo.</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3263"/> <source>Error</source> <translation>Chyba</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3264"/> <source>Error Encrypting String. Please verify you have Java installed.</source> <translation>Chyba pÅ™i Å¡ifrování Å™etÄ›zce. Ověřte prosím, že "Java" je nainstalovaná.</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Hunspell plugin not found or could not be loaded.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete</source> <translation>Kontrola pravopisu dokonÄena</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete.</source> <translation>Kontrola pravopisu dokonÄena.</translation> </message> </context> <context> <name>NMainMenuBar</name> <message> <location filename="../gui/nmainmenubar.cpp" line="60"/> <source>&File</source> <translation>&Soubor</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="79"/> <source>Print this note</source> <translation>Vytiskne tuto poznámku</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="87"/> <source>Backup database to a file</source> <translation>Zálohovat databázi do souboru</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="93"/> <source>Restore from a backup</source> <translation>Obnovit databázi ze zálohy</translation> </message> <message> <source>Export selected notes to a file</source> <translation type="vanished">Exportovat vybrané poznámky do souboru</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="113"/> <source>Import notes from an export file</source> <translation>Naimportuje poznámky z exportního souboru</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="133"/> <source>Switch to </source> <translation>PÅ™epnout na </translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="151"/> <source>Open/Close Notebooks</source> <translation>Otevřít/zavřít poznámkové bloky</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="159"/> <source>Close the program</source> <translation>UkonÄí bÄ›h této aplikace</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="175"/> <source>&Edit</source> <translation>Ú&pravy</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="78"/> <source>&Print Note</source> <translation>Vytisknout &poznámku</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="64"/> <source>Email Note</source> <translation>Odeslat poznámku emailem</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="65"/> <source>Email a copy of this note</source> <translation>Odeslat kopii poznámky emailem</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="71"/> <source>Print Preview Note</source> <translation>Náhled tisku poznámky</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="72"/> <source>Print preview of this note</source> <translation>Náhled tisku této poznámky</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="86"/> <source>&Backup Database</source> <translation>Záloha data&báze</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="92"/> <source>&Restore Database</source> <translation>Obnovení &databáze</translation> </message> <message> <source>&Export Notes</source> <translation type="vanished">&Export poznámek</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="112"/> <source>&Import Notes</source> <translation>&Import poznámek</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="140"/> <source>&Add Another User...</source> <translation>PÅ™id&at nového uživatele...</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="144"/> <source>&User Account Maintenance</source> <translation>Správa &uživatelských úÄtů</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="150"/> <source>&Open/Close Notebooks</source> <translation>&Otevřít/zavřít poznámkové bloky</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="158"/> <source>E&xit</source> <translation>U&konÄit</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="180"/> <source>&Undo</source> <translation>&ZpÄ›t (vrátit akci)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="184"/> <source>&Redo</source> <translation>Znovu (p&rovést akci)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="190"/> <source>&Cut</source> <translation>&Vyjmout</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="194"/> <source>C&opy</source> <translation>&Kopírovat</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="198"/> <source>&Paste</source> <translation>V&ložit</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="202"/> <source>Pas&te as Unformatted Text</source> <translation>Vložit jako neformátovaný &text</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="206"/> <source>Remo&ve Formatting</source> <translation>Odstranit &formátování</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="212"/> <source>Select &All</source> <translation>Vybr&at vÅ¡e</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="218"/> <source>F&ind and Replace</source> <translation>Najít a na&hradit</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="220"/> <source>&Search Notes</source> <translation>H&ledat v poznámkách</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="225"/> <source>&Reset Search</source> <translation>Z&ruÅ¡it hledání</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="232"/> <source>&Find in Note</source> <translation>&Najít v poznámce</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="238"/> <source>Find &Next</source> <translation>Najít &další</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="243"/> <source>Find &Previous</source> <translation>Najít &pÅ™edchozí</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="250"/> <source>Replace &Within Note...</source> <translation>Na&hradit v poznámce...</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="260"/> <source>Preferences</source> <translation>PÅ™edvolby</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="268"/> <source>&View</source> <translation>&Zobrazit</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="273"/> <source>Wide Note List</source> <translation>Seznam poznámek na šířku</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="278"/> <source>Narrow Note List</source> <translation>Seznam poznámek na výšku</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="285"/> <source>&Show Source</source> <translation>&Zobrazit zdroj</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="289"/> <source>Note &History</source> <translation>&Historie poznámky</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="295"/> <source>&Presentation Mode</source> <translation>&Mód prezentace</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="299"/> <source>Show &Left Panel</source> <translation>Zobrazit &levý panel</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="306"/> <source>Show &Favorites</source> <translation>Zobrazit &oblíbené</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="313"/> <source>Show &Notebooks</source> <translation>Zobrazit poznámkové &bloky</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="320"/> <source>Show Ta&gs</source> <translation>Zobrazit Å¡&títky</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="327"/> <source>Show Sa&ved Searches</source> <translation>Zobrazit &uložená hledání</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="341"/> <source>Show T&rash</source> <translation>Zobrazit &koÅ¡</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="348"/> <source>Show N&ote List</source> <translation>Zobrazit &seznam poznámek</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="355"/> <source>Show Note &Panel</source> <translation>Zobrazit &panel poznámky</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="364"/> <source>View Note &Info</source> <translation>Zobrazit &informace o poznámce</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="368"/> <source>View &Toolbar</source> <translation>Zobrazit &nástrojovou liÅ¡tu</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="375"/> <source>View Status&bar</source> <translation>Zobrazit sta&vovou liÅ¡tu</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="391"/> <source>New &Note</source> <translation>&Nová poznámka</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="396"/> <source>New &Webcam Note</source> <translation>Nová poznámka z &Webkamery</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="401"/> <source>Dupl&icate Note</source> <translation>&Duplikovat poznámku</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="406"/> <source>&Delete</source> <translation>&Smazat</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="411"/> <source>Reindex Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="418"/> <source>&Spell Check</source> <translation>&Kontrola pravopisu</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="427"/> <source>&Pin Note</source> <translation>&PÅ™ipnout poznámku</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="432"/> <source>&UnPin Note</source> <translation>Odepno&ut poznámku</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="446"/> <source>&Synchronize</source> <translation>&Synchronizovat</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="447"/> <source>Synchronize with Evernote</source> <translation>Synchronizovat s Evernote</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="452"/> <source>&Disconnect</source> <translation>O&dpojit</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="460"/> <source>Pause &Indexing</source> <translation>Pozastavit &indexování databáze</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="461"/> <source>Temporarily pause indexing</source> <translation>DoÄasnÄ› pozastavit indexování databáze</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="468"/> <source>Disable &Editing</source> <translation>Vypnout &editaci poznámky</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="469"/> <source>Temporarily disable note editing</source> <translation>DoÄasnÄ› vypnout editaci poznámky</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="476"/> <source>A&ccount</source> <translation>&ÚÄet</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="490"/> <source>&Reindex Database</source> <translation>Zin&dexovat databázi</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="514"/> <source>&User's Guide</source> <translation>&Uživatelská příruÄka</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="537"/> <source>Shortcuts</source> <translation type="unfinished">Zkratky</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="538"/> <source>View currentt shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="547"/> <source>Github Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="548"/> <source>Goto the NixNote2 Github project page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="585"/> <source>About &Qt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="625"/> <source>Theme</source> <translation>Motiv</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="386"/> <source>&Note</source> <translation>P&oznámka</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="100"/> <source>&Export to NixNote Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="101"/> <source>Export selected notes to a NNEX file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="106"/> <source>&Export Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="107"/> <source>Export selected notes to a PDF file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="441"/> <source>&Tools</source> <translation>&Nástroje</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="453"/> <source>Disconnect from Evernote</source> <translation>Odpojit od Evernote</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="477"/> <source>Account information</source> <translation>Informace o úÄtu</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="484"/> <source>&Database Status</source> <translation>Stav &databáze</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="485"/> <source>Database Status</source> <translation>Stav databáze</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="491"/> <source>Reindex all notes</source> <translation>Zindexovat vÅ¡echny poznámky</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="499"/> <source>&Import Folders</source> <translation>Složky s automatickým &importem</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="500"/> <source>Import Folders</source> <translation>Složky s automatickým importem</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="509"/> <source>&Help</source> <translation>Nápo&vÄ›da</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="515"/> <source>Open the user manual.</source> <translation>Otevřít uživatelskou příruÄku.</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="542"/> <source>Message &Log</source> <translation>&Log</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="554"/> <source>&Evernote Account Page</source> <translation>&Evernote úÄet v prohlížeÄi</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="559"/> <source>Evernote &Support</source> <translation>&Podpora Evernote</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="568"/> <source>Evernote &Trunk</source> <translation>Everno&te App Center v prohlížeÄi</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="573"/> <source>Evernote User &Forum</source> <translation>Uživatelské &fórum Evernote</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="580"/> <source>&About</source> <translation>O &aplikaci</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="634"/> <source>System Default</source> <translation>Výchozí systémové</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="543"/> <source>View current program messages</source> <translation>Zobrazit aktuální logy programu</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="334"/> <source>Show &Attribute Filter</source> <translation>Zobrazit filtr &vlastností</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="520"/> <source>Theme &Information</source> <translation>&Informace o motivu</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="521"/> <source>View information about the current theme.</source> <translation>Zobrazit informace o souÄasném motivu.</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="555"/> <source>Go to your Evernote account page.</source> <translation>Otevřít Váš Evernote úÄet v prohlížeÄi.</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="560"/> <source>Go to Evernote's support page</source> <translation>Otevřít Evernote podporu v prohlížeÄi</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="562"/> <source>Yinxiang Biji Support</source> <translation>Yinxiang Biji podpora</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="563"/> <source>Go to Yinxiang Biji's support page</source> <translation>Otevřít Yinxiang Biji podporu v prohlížeÄi</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="569"/> <source>Go to Evernote Trunk</source> <translation>Otevřít Evernote App Center v prohlížeÄi</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="574"/> <source>Go to the Evernote user support forum.</source> <translation>Otevřít Evernote uživatelské fórum v prohlížeÄi.</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="581"/> <location filename="../gui/nmainmenubar.cpp" line="586"/> <source>About</source> <translation>O aplikaci</translation> </message> </context> <context> <name>NNotebookView</name> <message> <location filename="../gui/nnotebookview.cpp" line="69"/> <source>Notebooks</source> <translation>Poznámkové bloky</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="86"/> <source>Create New Notebook</source> <translation>VytvoÅ™it nový poznámkový blok</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="95"/> <source>Delete</source> <translation>Smazat</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="103"/> <source>Add to stack</source> <translation>PÅ™idat do skupiny</translation> </message> <message> <source>New stack</source> <translation type="vanished">Nová skupina</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="116"/> <source>Create New stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="119"/> <source>Remove from stack</source> <translation>Odebrat ze skupiny</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="123"/> <source>Rename</source> <translation>PÅ™ejmenovat</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="131"/> <source>Properties</source> <translation>Vlastnosti</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="641"/> <source>Are you sure you want to delete this notebook?</source> <translation>Opravdu chcete smazat tento poznámkový blok?</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="642"/> <source>Verify Delete</source> <translation>Potvrzení smazání</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>New Stack (</source> <translation>Nová skupina (</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>)</source> <translation>)</translation> </message> </context> <context> <name>NSearchView</name> <message> <location filename="../gui/nsearchview.cpp" line="65"/> <source>Saved Searches</source> <translation>Uložená hledání</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="74"/> <source>Create Saved Search</source> <translation>VytvoÅ™it nové hledání</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="83"/> <source>Delete</source> <translation>Smazat</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="90"/> <source>Rename</source> <translation>PÅ™ejmenovat</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="94"/> <source>Properties</source> <translation>Vlastnosti</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="404"/> <source>Are you sure you want to delete this saved search?</source> <translation>Opravdu chcete smazat toto uložené hledání?</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="405"/> <source>Verify Delete</source> <translation>Potvrzení smazání</translation> </message> </context> <context> <name>NTabWidget</name> <message> <location filename="../gui/ntabwidget.cpp" line="254"/> <location filename="../gui/ntabwidget.cpp" line="262"/> <source>Untitled Note</source> <translation>Nová poznámka</translation> </message> <message> <location filename="../gui/ntabwidget.cpp" line="267"/> <location filename="../gui/ntabwidget.cpp" line="334"/> <source>NixNote - </source> <translation>NixNote - </translation> </message> </context> <context> <name>NTableView</name> <message> <location filename="../gui/ntableview.cpp" line="203"/> <source>Open Note</source> <translation>Otevřít poznámku</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="209"/> <source>Open Note In New Tab</source> <translation>Otevřít poznámku v novém panelu</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="215"/> <source>Open Note In New Window</source> <translation>Otevřít poznámku v novém oknÄ›</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="222"/> <source>Add Note</source> <translation>PÅ™idat poznámku</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="227"/> <source>Delete Note</source> <translation>Smazat poznámku</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="238"/> <source>Restore Note</source> <translation>Obnovit poznámku</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="244"/> <source>Copy Note Link</source> <translation>Kopírovat odkaz na poznámku</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="249"/> <source>Duplicate Note</source> <translation>Duplikovat poznámku</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="254"/> <source>Reminders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="258"/> <source>Remove</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="263"/> <source>Mark Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="269"/> <source>Pin Note</source> <translation>PÅ™ipnout poznámku</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="274"/> <source>Unpin Note</source> <translation>Odepnout poznámku</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="279"/> <source>Merge Notes</source> <translation>SlouÄit poznámky</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="285"/> <source>Create Table of Contents</source> <translatorcomment>TODO: ověřit v GUI</translatorcomment> <translation>VytvoÅ™it obsah</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="291"/> <source>Title Color</source> <translation>Barva názvu</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="296"/> <source>Properties</source> <translation type="unfinished">Vlastnosti</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="301"/> <source>White</source> <translation>Bílá</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="304"/> <source>Red</source> <translation>ÄŒervená</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="307"/> <source>Blue</source> <translation>Modrá</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="310"/> <source>Green</source> <translation>Zelená</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="313"/> <source>Yellow</source> <translation>Žlutá</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="316"/> <source>Black</source> <translation>ÄŒerná</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="319"/> <source>Gray</source> <translation>Å edá</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="322"/> <source>Cyan</source> <translation>Azurová</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="325"/> <source>Magenta</source> <translation>Purpurová</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="663"/> <source>Delete </source> <translation>Smazat</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="666"/> <source>Permanently delete </source> <translation>Trvale smazat </translation> </message> <message> <location filename="../gui/ntableview.cpp" line="672"/> <source>selected note?</source> <translation>oznaÄenou poznámku?</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="677"/> <source>Verify Delete</source> <translation>Potvrzení smazání</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="942"/> <source>Unsynchronized Note</source> <translation>Nesynchronizovaná poznámka</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="943"/> <source>This note has never been synchronized. Using this in a note link can cause problems unless you synchronize it first.</source> <translation>Poznámka nebyla nikdy synchronizována. Použití odkazu na tuto poznámku může způsobit problémy pokud poznámku pÅ™edtím nesynchronizujete.</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1319"/> <source>Table of Contents</source> <translation>Obsah</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1370"/> <source>One or more notes are unsynchronized. This can cause issues if they are later synchronized. Do you wish to continue?</source> <translation>Jedna Äi více poznámek není synchronizována. Může to způsobit problémy, pokud jsou synchronizovány pozdÄ›ji. PÅ™ejete si pokraÄovat?</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1654"/> <source>Note LID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1657"/> <source>Title</source> <translation type="unfinished">Název</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1660"/> <source>Notebook</source> <translation type="unfinished">Poznámkový blok</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1663"/> <source>Tags</source> <translation type="unfinished">Å títky</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1666"/> <source>Synchronized</source> <translation type="unfinished">Synchronizováno</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1668"/> <location filename="../gui/ntableview.cpp" line="1676"/> <location filename="../gui/ntableview.cpp" line="1682"/> <source>No</source> <translation type="unfinished">Ne</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1670"/> <location filename="../gui/ntableview.cpp" line="1674"/> <location filename="../gui/ntableview.cpp" line="1680"/> <source>Yes</source> <translation type="unfinished">Ano</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1672"/> <source>Has Encryption</source> <translation type="unfinished">Obsahuje zaÅ¡ifrovaný text</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1678"/> <source>Has To-Do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1684"/> <source>Date Created</source> <translation type="unfinished">Datum vytvoÅ™ení</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1687"/> <source>Date Updated</source> <translation type="unfinished">Datum zmÄ›ny</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1690"/> <source>Date Deleted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1698"/> <source>Subject Date</source> <translation type="unfinished">Datum pÅ™edmÄ›tu</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1706"/> <source>Author</source> <translation type="unfinished">Autor</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1710"/> <source>Longitude</source> <translation type="unfinished">ZemÄ›pisná délka</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1719"/> <source>Latitude</source> <translation type="unfinished">ZemÄ›pisná šířka</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1728"/> <source>Altitude</source> <translation type="unfinished">NadmoÅ™ská výška</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1737"/> <source>Source</source> <translation type="unfinished">Zdroj poznámky</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1740"/> <source>Source Application</source> <translation type="unfinished">Zdrojová aplikace</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1743"/> <source>Source URL</source> <translation type="unfinished">Zdrojová URL</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1746"/> <source>Reminder Due</source> <translation type="unfinished">Termín upomínky</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1754"/> <source>Reminder Completed</source> <translation type="unfinished">Upomínka splnÄ›na</translation> </message> </context> <context> <name>NTableViewHeader</name> <message> <location filename="../gui/ntableviewheader.cpp" line="42"/> <source>Date Created</source> <translation>Datum vytvoÅ™ení</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="47"/> <source>Date Updated</source> <translation>Datum zmÄ›ny</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="52"/> <source>Title</source> <translation>Název</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="57"/> <source>Notebook</source> <translation>Poznámkový blok</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="62"/> <source>Tags</source> <translation>Å títky</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="67"/> <source>Author</source> <translation>Autor</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="72"/> <source>Subject Date</source> <translation>Datum pÅ™edmÄ›tu</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="77"/> <source>Source</source> <translation>Zdroj poznámky</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="82"/> <source>Source URL</source> <translation>Zdrojová URL</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="87"/> <source>Latitude</source> <translation>ZemÄ›pisná šířka</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="92"/> <source>Longitude</source> <translation>ZemÄ›pisná délka</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="97"/> <source>Altitude</source> <translation>NadmoÅ™ská výška</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="102"/> <source>Has Encryption</source> <translation>Obsahuje zaÅ¡ifrovaný text</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="107"/> <source>Has To-do</source> <translation>Obsahuje úkoly (TODO)</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="112"/> <source>Synchronized</source> <translation>Synchronizováno</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="117"/> <source>Size</source> <translation>Velikost</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="122"/> <source>Reminder</source> <translation>Upomínka</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="128"/> <source>Reminder Due</source> <translation>Termín upomínky</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="133"/> <source>Reminder Completed</source> <translation>Upomínka splnÄ›na</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="138"/> <source>Pinned</source> <translation>PÅ™ipnuto</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="143"/> <source>Thumbnail</source> <translation>Náhled</translation> </message> </context> <context> <name>NTagView</name> <message> <location filename="../gui/ntagview.cpp" line="67"/> <location filename="../gui/ntagview.cpp" line="156"/> <source>Tags from Personal</source> <translation>Vlastní Å¡títky</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="91"/> <source>Create New Tag</source> <translation>VytvoÅ™it nový Å¡títek</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="100"/> <source>Delete</source> <translation>Smazat</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="107"/> <source>Rename</source> <translation>PÅ™ejmenovat</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="110"/> <source>Merge</source> <translation>SlouÄit</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="113"/> <source>Hide Unassigned</source> <translation>Skryj nepÅ™iÅ™azené</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="119"/> <source>Properties</source> <translation>Vlastnosti</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="154"/> <source>Tags from </source> <translation>Å títky z </translation> </message> <message> <location filename="../gui/ntagview.cpp" line="351"/> <source>-<Missing Tag>-</source> <translatorcomment>TODO - OVĚŘIT V GUI</translatorcomment> <translation>-<ChybÄ›jící Å¡títek>-</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="706"/> <source>Are you sure you want to merge these tags?</source> <translation>Opravdu chcete slouÄity tyto Å¡títky?</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="707"/> <source>Verify Merge</source> <translation>Potvrzení slouÄení</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="753"/> <source>Are you sure you want to delete this tag?</source> <translation>Opravdu chcete smazat tento Å¡títek?</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="755"/> <source>Are you sure you want to delete all selected tags?</source> <translation>Opravdu chcete smazat vÅ¡echny oznaÄené Å¡títky?</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="756"/> <source>Verify Delete</source> <translation>Potvrzení smazání</translation> </message> </context> <context> <name>NTitleEditor</name> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="123"/> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="137"/> <source>Untitled note</source> <translation>Nová poznámka</translation> </message> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="134"/> <source>untitled note</source> <translation>nová poznámka</translation> </message> </context> <context> <name>NTrashTree</name> <message> <location filename="../gui/ntrashtree.cpp" line="53"/> <source>Trash</source> <translation>KoÅ¡</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="65"/> <source>Restore Deleted Notes</source> <translation>Obnovit smazané poznámky</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="68"/> <source>Empty Trash</source> <translation>Vysypat koÅ¡</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="238"/> <source>Verify Delete</source> <translation>Potvrzení smazání</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="239"/> <source>Are you sure you want to permanently delete these notes?</source> <translation>Opravdu chcete trvale smazat tyto poznámky?</translation> </message> </context> <context> <name>NWebView</name> <message> <location filename="../gui/nwebview.cpp" line="56"/> <source>Open</source> <translation>Otevřít</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="61"/> <source>Cut</source> <translation>Vyjmout</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="66"/> <source>Copy</source> <translation>Kopírovat</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="71"/> <source>Paste</source> <translation>Vložit</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="76"/> <source>Paste as Unformatted Text</source> <translation>Vložit jako neformátovaný text</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="81"/> <source>Remove Formatting</source> <translation>Odstranit formátování</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="86"/> <source>Copy Note URL</source> <translation>Kopírovat URL poznámky</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="93"/> <source>Background Color</source> <translation>Barva pozadí</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="113"/> <source>To-do</source> <translation>TODO (úkol)</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="120"/> <source>HTML Entities</source> <translation>HTML speciální znaky</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="127"/> <source>Encrypted Selected Text</source> <translation>ZaÅ¡ifrovat vybraný text</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="132"/> <source>Insert Date && Time</source> <translation>Vložit Datum a ÄŒas</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="137"/> <source>Insert Hyperlink</source> <translation>Vložit odkaz</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="142"/> <source>Quick Link</source> <translation>Odkaz na poznámku</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="147"/> <source>Remove Hyperlink</source> <translation>Odstranit odkaz</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="152"/> <source>Attach File</source> <translation>PÅ™iložit soubor</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="158"/> <source>Insert LaTeX Formula</source> <translation>Vložit LaTex vzorec</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="164"/> <source>Table</source> <translation>Tabulka</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="167"/> <source>Insert Table</source> <translation>Vložit tabulku</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="173"/> <source>Insert Row</source> <translation>Vložit řádek</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="178"/> <source>Insert Column</source> <translation>Vložit sloupec</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="185"/> <source>Delete Row</source> <translation>Smazat řádek</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="189"/> <source>Delete Column</source> <translation>Smazat sloupec</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="196"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="203"/> <source>Image</source> <translation>Obrázek</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="206"/> <source>Save Image</source> <translation>Uložit obrázek</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="214"/> <source>Rotate Left</source> <translation>OtoÄit vlevo</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="218"/> <source>Rotate Right</source> <translation>OtoÄit vpravo</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="224"/> <source>Save Attachment</source> <translation>Uložit přílohu</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="502"/> <location filename="../gui/nwebview.cpp" line="532"/> <source>Save File</source> <translation>Uložit soubor</translation> </message> </context> <context> <name>NixNote</name> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy Not Found</source> <translation>Tidy nenalezeno</translation> </message> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy is not found on this system. Until tidy is installed you cannot save any notes.</source> <translation>Program tidy nebyl nalezen v tomto poÄítaÄi. Dokud nebude tidy nainstalován, nebude možné ukládat žádné poznámky.</translation> </message> <message> <location filename="../nixnote.cpp" line="291"/> <source>ToolBar</source> <translation>Nástrojová liÅ¡ta</translation> </message> <message> <location filename="../nixnote.cpp" line="303"/> <source>Back</source> <translation>ZpÄ›t</translation> </message> <message> <location filename="../nixnote.cpp" line="304"/> <source>Next</source> <translation>VpÅ™ed</translation> </message> <message> <location filename="../nixnote.cpp" line="314"/> <source>All Notes</source> <translation>VÅ¡echny poznámky</translation> </message> <message> <location filename="../nixnote.cpp" line="316"/> <source>Sync</source> <translation>Synchronizace</translation> </message> <message> <location filename="../nixnote.cpp" line="319"/> <source>Print</source> <translation>Tisk</translation> </message> <message> <location filename="../nixnote.cpp" line="329"/> <source>New Text Note</source> <translation>Nová poznámka</translation> </message> <message> <location filename="../nixnote.cpp" line="332"/> <source>New Webcam Note</source> <translation>Nová poznámka z Webkamery</translation> </message> <message> <location filename="../nixnote.cpp" line="344"/> <source>Delete</source> <translation>Smazat</translation> </message> <message> <location filename="../nixnote.cpp" line="347"/> <source>Trunk</source> <translatorcomment>TODO - OVĚŘIT V GUI</translatorcomment> <translation>Trunk TODO</translation> </message> <message> <location filename="../nixnote.cpp" line="349"/> <source>Usage</source> <translation>Kvóta</translation> </message> <message> <location filename="../nixnote.cpp" line="531"/> <location filename="../nixnote.cpp" line="3183"/> <source>Screen Capture</source> <translatorcomment>TODO - OVĚŘIT V GUI</translatorcomment> <translation>Snímat obrazovku</translation> </message> <message> <location filename="../nixnote.cpp" line="547"/> <source>Show/Hide</source> <translation>Zobrazit/Skrýt</translation> </message> <message> <location filename="../nixnote.cpp" line="559"/> <source>Close</source> <translation>Zavřít</translation> </message> <message> <location filename="../nixnote.cpp" line="1799"/> <source>Confirm Restore</source> <translation>Potvrzení obnovení</translation> </message> <message> <location filename="../nixnote.cpp" line="1815"/> <source>Restore Database</source> <translation>Obnovení databáze</translation> </message> <message> <location filename="../nixnote.cpp" line="1818"/> <source>Import Notes</source> <translation>Import poznámek</translation> </message> <message> <location filename="../nixnote.cpp" line="1730"/> <location filename="../nixnote.cpp" line="1816"/> <source>NixNote Export (*.nnex);;All Files (*.*)</source> <translation>NixNote Export (*.nnex);;VÅ¡echny soubory (*.*)</translation> </message> <message> <location filename="../nixnote.cpp" line="320"/> <source>Print the current note</source> <translatorcomment>TODO: ověřit v GUI</translatorcomment> <translation>Tisknout tuto poznámku</translation> </message> <message> <location filename="../nixnote.cpp" line="322"/> <source>Email</source> <translation>Email</translation> </message> <message> <location filename="../nixnote.cpp" line="323"/> <source>Email the current note</source> <translation>Odeslat tuto poznámku emailem</translation> </message> <message> <location filename="../nixnote.cpp" line="528"/> <source>Quick Note</source> <translation>Rychlá poznámka</translation> </message> <message> <location filename="../nixnote.cpp" line="538"/> <source>Shortcut Notes</source> <translatorcomment>TODO: ověřit v GUI</translatorcomment> <translation>Zkratky na poznámky</translation> </message> <message> <location filename="../nixnote.cpp" line="540"/> <source>Pinned Notes</source> <translation>PÅ™ipnuté poznámky</translation> </message> <message> <location filename="../nixnote.cpp" line="542"/> <source>Recently Updated Notes</source> <translation>Nedávno upravované poznámky</translation> </message> <message> <location filename="../nixnote.cpp" line="1437"/> <location filename="../nixnote.cpp" line="2350"/> <source>Log in to Evernote</source> <translation>PÅ™ihlásit se k Evernote</translation> </message> <message> <location filename="../nixnote.cpp" line="1439"/> <location filename="../nixnote.cpp" line="2352"/> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>NixNote</source> <translation>NixNote</translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <location filename="../nixnote.cpp" line="1761"/> <location filename="../nixnote.cpp" line="1857"/> <source>Error</source> <translation>Chyba</translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <source>No notes selected.</source> <translation>Žádné poznámky nebyly vybrány.</translation> </message> <message> <location filename="../nixnote.cpp" line="1722"/> <source>Backup Database</source> <translation>Záloha databáze</translation> </message> <message> <location filename="../nixnote.cpp" line="1724"/> <source>Export Notes</source> <translation>Export poznámek</translation> </message> <message> <location filename="../nixnote.cpp" line="1749"/> <source>Performing backup</source> <translation>Probíhá zálohování</translation> </message> <message> <location filename="../nixnote.cpp" line="1751"/> <source>Performing export</source> <translation>Probíhá export</translation> </message> <message> <location filename="../nixnote.cpp" line="1768"/> <source>Database backup complete.</source> <translation>Záloha databáze dokonÄena.</translation> </message> <message> <location filename="../nixnote.cpp" line="1770"/> <source>Note extract complete.</source> <translatorcomment>TODO - OVĚŘIT V GUI</translatorcomment> <translation>Export poznámky dokonÄen.</translation> </message> <message> <location filename="../nixnote.cpp" line="1796"/> <source>This is used to restore a database from backups. It is HIGHLY recommended that this only be used to populate an empty database. Restoring into a database that already has data can cause problems. Are you sure you want to continue?</source> <translation>Tato funkce slouží k obnovÄ› databáze ze zálohy. Pozor - doporuÄujeme používat pouze k naplnÄ›ní prázdné databáze. Obnova do databáze již obsahující data může způsobit problémy. Jste si jisti, že chcete pokraÄovat?</translation> </message> <message> <location filename="../nixnote.cpp" line="1819"/> <source>NixNote Export (*.nnex);;Evernote Export (*.enex);;All Files (*.*)</source> <translation>NixNote Export (*.nnex);;Evernote Export (*.enex);;VÅ¡echny soubory (*.*)</translation> </message> <message> <location filename="../nixnote.cpp" line="1846"/> <source>Restoring database</source> <translation>Obnovuji databázi</translation> </message> <message> <location filename="../nixnote.cpp" line="1848"/> <source>Importing Notes</source> <translation>Import poznámek</translation> </message> <message> <location filename="../nixnote.cpp" line="1880"/> <source>Database has been restored.</source> <translation>Databáze byla obnovena.</translation> </message> <message> <location filename="../nixnote.cpp" line="1882"/> <source>Notes have been imported.</source> <translation>Poznámky byly naimportovány.</translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <location filename="../nixnote.cpp" line="1918"/> <source>Sync Error</source> <translation>Chyba synchronizace</translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <source>Sync completed with errors.</source> <translation>Synchronizace dokonÄena s chybami.</translation> </message> <message> <location filename="../nixnote.cpp" line="1918"/> <source>Sync error. See message log for details</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync Complete</source> <translation>Synchronizace dokonÄena</translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync completed successfully.</source> <translation>Synchronizace úspěšnÄ› dokonÄena.</translation> </message> <message> <location filename="../nixnote.cpp" line="2002"/> <source>Untitled note</source> <translation>Nová poznámka</translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>Unsynchronized Note</source> <translation type="unfinished">Nesynchronizovaná poznámka</translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>This note has never been synchronized with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3872"/> <source>Error loading Webcam plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3887"/> <source>Error loading Hunspell plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3913"/> <location filename="../nixnote.cpp" line="3965"/> <source>PDF Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>Export complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3937"/> <source>Exporting Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3938"/> <source>Exporting notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <source>This feature is only available to premium users.</source> <translation type="vanished">Tato funkce je dostupná pouze pro prémiové uživatele.</translation> </message> <message> <source>Premium Feature</source> <translation type="vanished">Prémiová funkce</translation> </message> <message> <location filename="../nixnote.cpp" line="2391"/> <location filename="../nixnote.cpp" line="2398"/> <source>Error retrieving note.</source> <translation>Chyba pÅ™i stahování poznámky.</translation> </message> <message> <location filename="../nixnote.cpp" line="2392"/> <location filename="../nixnote.cpp" line="2399"/> <source>Error retrieving note</source> <translation>Chyba pÅ™i stahování poznámky</translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <location filename="../nixnote.cpp" line="2431"/> <source>Note Restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <source>A new copy has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2431"/> <source>Note successfully restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2434"/> <source>Note restored</source> <translation>Poznámka obnovena</translation> </message> <message> <source>No versions of this note can be found.</source> <translation type="vanished">Nenalezeny žádné verze této poznámky.</translation> </message> <message> <source>Note Not Found</source> <translation type="vanished">Poznámka nenalezena</translation> </message> <message> <location filename="../nixnote.cpp" line="2650"/> <source>Note not found.</source> <translation>Poznámka nenalezena.</translation> </message> <message> <location filename="../nixnote.cpp" line="3054"/> <source>Switch to </source> <translation>PÅ™epnout na </translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex Database</source> <translation>Zindexovat databázi</translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex the entire database?</source> <translation>Zindexovat celou databázi?</translation> </message> <message> <location filename="../nixnote.cpp" line="3247"/> <source>Notes will be reindexed.</source> <translation>Poznámky budou zindexovány.</translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Webcam plugin not found or could not be loaded</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3281"/> <source>Unable to find webcam or capture image.</source> <translation>Nemohu nalézt webkameru nebo se nepovedlo získat obraz.</translation> </message> <message> <location filename="../nixnote.cpp" line="3282"/> <source>Webcam Error</source> <translation>Chyba webkamery</translation> </message> <message> <location filename="../nixnote.cpp" line="3432"/> <source>Note Reindexed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3444"/> <source>Delete </source> <translation>Smazat </translation> </message> <message> <location filename="../nixnote.cpp" line="3447"/> <source>Permanently delete </source> <translation>Trvale smazat </translation> </message> <message> <location filename="../nixnote.cpp" line="3451"/> <source>this note?</source> <translation> tuto poznámku?</translation> </message> <message> <location filename="../nixnote.cpp" line="3455"/> <source>Verify Delete</source> <translation>Potvrzení smazání</translation> </message> <message> <location filename="../nixnote.cpp" line="3816"/> <source>Press ESC to exit.</source> <translation>StisknÄ›te ESC pro ukonÄení.</translation> </message> </context> <context> <name>NoteFormatter</name> <message> <location filename="../html/noteformatter.cpp" line="657"/> <source>File</source> <translation>Soubor</translation> </message> <message> <location filename="../html/noteformatter.cpp" line="691"/> <source>Bytes</source> <translation>Byte(ů)</translation> </message> <message> <location filename="../html/noteformatter.cpp" line="695"/> <source>KB</source> <translation>KB</translation> </message> </context> <context> <name>NoteHistorySelect</name> <message> <location filename="../dialog/notehistoryselect.cpp" line="32"/> <source>Note History</source> <translation>Historie poznámky</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="33"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="34"/> <source>Import</source> <translation>Import</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="39"/> <source>Replace current note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="80"/> <source>Current copy on Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="93"/> <source>Today</source> <translation>Dnes</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="95"/> <source>Yesterday</source> <translation>VÄera</translation> </message> </context> <context> <name>NoteProperties</name> <message> <location filename="../dialog/noteproperties.cpp" line="37"/> <source>Note Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/noteproperties.cpp" line="38"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NotebookProperties</name> <message> <location filename="../dialog/notebookproperties.cpp" line="38"/> <source>Notebook</source> <translation>Poznámkový blok</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="42"/> <source>Synchronized</source> <translation>Synchronizováno</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="46"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="52"/> <source>Name</source> <translation>Jméno</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="60"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="62"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="135"/> <source>Add Notebook</source> <translation>PÅ™idat poznámkový blok</translation> </message> </context> <context> <name>OAuthWindow</name> <message> <location filename="../oauth/oauthwindow.cpp" line="70"/> <source>Please Grant NixNote Access</source> <translation>Prosím o potvrzení přístupu pro NixNote</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="81"/> <source>SSL Support not found. Aborting connection</source> <translation>SSL podpora nenalezena. PÅ™eruÅ¡uji pÅ™ipojení</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="132"/> <source>Error receiving temporary credentials</source> <translation>Chyba pÅ™i příjmu doÄasného pověření</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="176"/> <source>Error receiving permanent credentials</source> <translation>Chyba pÅ™i příjmu trvalého pověření</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="219"/> <source>Error receiving authorization</source> <translation>Chyba pÅ™i příjmu autorizace</translation> </message> </context> <context> <name>PopplerViewer</name> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source>Page </source> <translation>Strana </translation> </message> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source> of </source> <translation> z </translation> </message> </context> <context> <name>PreferencesDialog</name> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="30"/> <source>User Settings</source> <translation>Uživatelské nastavení</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="49"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="50"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="92"/> <source>Appearance</source> <translation>Vzhled</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="98"/> <source>Locale</source> <translation>Místní nastavení</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="104"/> <source>Search</source> <translation>Hledání</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="110"/> <source>Sync</source> <translation>Synchronizace</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="116"/> <source>Email</source> <translation>Email</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="121"/> <source>Thumbnail</source> <translation type="unfinished">Náhled</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="127"/> <source>Advanced</source> <translation type="unfinished"></translation> </message> <message> <source>Debugging</source> <translation type="vanished">LadÄ›ní</translation> </message> </context> <context> <name>QApplication</name> <message> <location filename="../dialog/screencapture.cpp" line="108"/> <source>Use your mouse to draw a rectangle to screenshot or exit pressing any key or using the right or middle mouse buttons.</source> <translation>Nakreslete myší obdélník, ze kterého chcete udÄ›lat snímek nebo ukonÄete snímkování libovolnou klávesou Äi prostÅ™edním tlaÄítekm myÅ¡i.</translation> </message> <message> <location filename="../dialog/screencapture.cpp" line="145"/> <source>%1 x %2 pixels </source> <translation>%1 x %2 pixelů </translation> </message> </context> <context> <name>QObject</name> <message> <location filename="../gui/ntableview.cpp" line="175"/> <source>Title</source> <translation>Název</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="176"/> <source>Author</source> <translation>Autor</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="177"/> <source>Notebook</source> <translation>Poznámkový blok</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="178"/> <source>Tags</source> <translation>Å títky</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="179"/> <source>Date Created</source> <translation>Datum vytvoÅ™ení</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="180"/> <source>Date Updated</source> <translation>Datum zmÄ›ny</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="181"/> <source>Subject Date</source> <translation>Datum pÅ™edmÄ›tu</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="182"/> <source>Deletion Date</source> <translation>Datum smazání</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="183"/> <source>Reminder</source> <translation>Upomínka</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="184"/> <source>Reminder Due</source> <translation>Termín upomínky</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="185"/> <source>Reminder Completed</source> <translation>Upomínka splnÄ›na</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="186"/> <source>Source</source> <translation>Zdroj poznámky</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="187"/> <source>Source URL</source> <translation>Zdrojová URL</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="188"/> <source>Source Application</source> <translation>Zdrojová aplikace</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="189"/> <source>Longitude</source> <translation>ZemÄ›pisná délka</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="190"/> <source>Latitude</source> <translation>ZemÄ›pisná šířka</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="191"/> <source>Altitude</source> <translation>NadmoÅ™ská výška</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="192"/> <source>Has Encryption</source> <translation>Obsahuje zaÅ¡ifrovaný text</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="193"/> <source>Has To-do</source> <translation>Obsahuje úkoly (TODO)</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="194"/> <source>Sync</source> <translation>Synchronizováno</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="195"/> <source>Size</source> <translation>Velikost</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="196"/> <source>Thumbnail</source> <translation>Náhled</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="197"/> <source>Pinned</source> <translation>PÅ™ipnuto</translation> </message> </context> <context> <name>ReminderButton</name> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="35"/> <source>Mark as Done</source> <translation>OznaÄit jako splnÄ›né</translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="36"/> <source>Change Date</source> <translation>ZmÄ›nit termín</translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="37"/> <source>Clear Reminder</source> <translation>Odstranit upomínku</translation> </message> </context> <context> <name>ReminderManager</name> <message> <location filename="../reminders/remindermanager.cpp" line="85"/> <source>Reminders Due</source> <translation>Termíny upomínek</translation> </message> </context> <context> <name>ReminderSetDialog</name> <message> <location filename="../dialog/remindersetdialog.cpp" line="47"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/remindersetdialog.cpp" line="48"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> </context> <context> <name>RemoteQuery</name> <message> <location filename="../filters/remotequery.cpp" line="113"/> <location filename="../filters/remotequery.cpp" line="130"/> <source>Today</source> <translation>Dnes</translation> </message> </context> <context> <name>SavedSearchProperties</name> <message> <location filename="../dialog/savedsearchproperties.cpp" line="35"/> <source>Saved Search</source> <translation>Uložená hledání</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="42"/> <source>Name</source> <translation>Jméno</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="43"/> <source>Query</source> <translation>Hledaný výraz</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="51"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="53"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="106"/> <source>Add Saved Search</source> <translation>PÅ™idat nové hledání</translation> </message> </context> <context> <name>SearchPreferences</name> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="36"/> <source>Index Attachments</source> <translation>Indexovat přílohy</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="44"/> <source>Clear Notebook Selection on Search Text Changes</source> <translatorcomment>TODO: ověřit v GUI</translatorcomment> <translation>ZruÅ¡it výbÄ›r poznámkových bloků pÅ™i zmÄ›nÄ› hledaného textu</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="48"/> <source>Clear Tag Selection on Search Text Changes</source> <translation>ZruÅ¡it výbÄ›r Å¡títků pÅ™i zmÄ›nÄ› hledaného textu</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="52"/> <source>Clear Search Text on Notebook Changes</source> <translation>VyÄistit hledaný text pÅ™i zmÄ›nÄ› poznámkového bloku</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="56"/> <source>Show Any Matching Tags When Selecting Multiple Tags</source> <translation>PÅ™i vícenásobném výbÄ›ru Å¡títků hledat libovolný z nich</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="60"/> <source>Index PDFs locally</source> <translation>Lokální indexování PDF</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="64"/> <source>Background Indexing (requires restart & may cause issues on some systems)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="68"/> <source>Experimental: Force search to lower case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="73"/> <source>Minimum Image Recognition Weight</source> <translation>Minimální práh rozpoznávání obrázků</translation> </message> </context> <context> <name>ShortcutDialog</name> <message> <location filename="../dialog/shortcutdialog.cpp" line="41"/> <source>Defined Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/shortcutdialog.cpp" line="42"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SpellCheckDialog</name> <message> <location filename="../dialog/spellcheckdialog.cpp" line="35"/> <source>Spell Check</source> <translation>Kontrola pravopisu</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="50"/> <source>Suggestion</source> <translation>Návrhy</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="56"/> <source>Replace</source> <translation>Nahradit</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="57"/> <source>Ignore</source> <translation>Ignorovat</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="58"/> <source>Ignore All</source> <translation>Ignorovat vÅ¡e</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="59"/> <source>Add To Dictionary</source> <translation>PÅ™idat do slovníku</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="66"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> </context> <context> <name>SpellChecker</name> <message> <source>Unable to find dictionaries. Is Huntspell installed?</source> <translation type="vanished">NepodaÅ™ilo se nalézt slovníky. Je Huntspell nainstalován?</translation> </message> </context> <context> <name>SyncPreferences</name> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="34"/> <source>Sync automatically</source> <translation>Automatická synchronizace</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="38"/> <source>Every 15 minutes</source> <translation>Každých 15 minut</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="39"/> <source>Every 30 minutes</source> <translation>Každých 30 minut</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="40"/> <source>Every hour</source> <translation>Každou hodinu</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="41"/> <source>Every day</source> <translation>Každý den</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="43"/> <source>Sync on startup</source> <translation>Synchronizovat pÅ™i spuÅ¡tÄ›ní</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="45"/> <source>Sync on shutdown</source> <translation>Synchronizovat pÅ™i ukonÄení</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="47"/> <source>Enable sync notifications</source> <translation>Zapnout upozornÄ›ní na synchronizaci</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="48"/> <source>Show successful syncs</source> <translation>Zobrazovat úspěšné synchronizace</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="49"/> <source>Restart sync on API limit (experimental)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="51"/> <source>Enable Proxy*</source> <translation>Použít proxy*</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="52"/> <source>Enable Socks5</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="53"/> <source>Proxy Hostname</source> <translation>Hostitel proxy</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="54"/> <source>Proxy Port</source> <translation>Port proxy</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="55"/> <source>Proxy Username</source> <translation>Uživatelské jméno proxy</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="56"/> <source>Proxy Password</source> <translation>Heslo proxy</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="57"/> <source>*Note: Restart required</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="73"/> <source>Popup message on sync errors.</source> <translation type="unfinished"></translation> </message> <message> <source>Note: Restart required</source> <translation type="vanished">Poznámka: Vyžaduje restart aplikace</translation> </message> </context> <context> <name>SyncRunner</name> <message> <location filename="../threads/syncrunner.cpp" line="134"/> <source>Beginning Sync</source> <translation>Zahajuji synchronizaci</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="142"/> <source>Downloading changes</source> <translation>Stahuji zmÄ›ny</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="192"/> <source>Sync Complete Successfully</source> <translation>Synchronizace úspěšnÄ› dokonÄena</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <location filename="../threads/syncrunner.cpp" line="267"/> <source>Download </source> <translation>Stahování </translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <source>% complete for notebooks, tags, & searches.</source> <translation>% hotovo pro poznámkové bloky, Å¡títky a hledání.</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="247"/> <source>Download complete for notebooks, tags, & searches. Downloading notes.</source> <translation>Stahování dokonÄeno pro poznámkové bloky, Å¡títky a hledání. Stahuji poznámky.</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="267"/> <source>% complete.</source> <translation>% hotovo.</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="280"/> <source>Download complete.</source> <translation>Stahování dokonÄeno.</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>Downloading </source> <translation>Stahování </translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <source>% complete for tags in shared notebook </source> <translation>% dokonÄeno pro Å¡títky ve sdíleném poznámkovém bloku </translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="721"/> <source>Downloading notes for shared notebook </source> <translation>Stahování poznámek pro sdílený poznámkový blok </translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="743"/> <source>% complete for shared notebook </source> <translation>% hotovo pro sdílený poznámkový blok </translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1149"/> <source>Error uploading note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1151"/> <source>Error uploading note with a missing title!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="721"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>.</source> <translation>.</translation> </message> </context> <context> <name>TableDialog</name> <message> <location filename="../dialog/tabledialog.cpp" line="30"/> <source>Insert Table</source> <translation>Vložit tabulku</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="34"/> <source>Percent</source> <translation>Procenta</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="35"/> <source>Pixels</source> <translation>Body (pixely)</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="51"/> <source>Rows</source> <translation>Řádky</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="53"/> <source>Columns</source> <translation>Sloupce</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="55"/> <source>Width</source> <translation>Šířka</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="57"/> <source>Unit</source> <translation>Jednotky</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="64"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="67"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> </context> <context> <name>TablePropertiesDialog</name> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="72"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="105"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="86"/> <source>Cancel</source> <translation type="unfinished">ZruÅ¡it</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="87"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="106"/> <source>Cell Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="214"/> <source>Row 1 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="216"/> <source>Row 1 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="218"/> <source>Row 1 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="220"/> <source>Row 2 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="222"/> <source>Row 2 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="224"/> <source>Row 2 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="226"/> <source>Row 3 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="228"/> <source>Row 3 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="230"/> <source>Row 3 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="456"/> <source>Width</source> <translation type="unfinished">Šířka</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="464"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="480"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="494"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="511"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="526"/> <source>Percent</source> <translation type="unfinished">Procenta</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="465"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="479"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="493"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="510"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="525"/> <source>Pixels</source> <translation type="unfinished">Body (pixely)</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="476"/> <source>Top Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="490"/> <source>Bottom Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="507"/> <source>Left Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="522"/> <source>Right Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="560"/> <source>Border Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="561"/> <source>Font Color</source> <translation type="unfinished">Barva písma</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="562"/> <source>Background Color</source> <translation type="unfinished">Barva pozadí</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="576"/> <source>Border Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="587"/> <source>Padding</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="597"/> <source>Top Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="606"/> <source>Bottom Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="615"/> <source>Left Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="624"/> <source>Right Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="636"/> <source>Horizontal Alignment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="641"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="642"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="643"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="644"/> <source>Center</source> <translation type="unfinished">Zarovnat na stÅ™ed</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="676"/> <source>Solid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="677"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="678"/> <source>Dotted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="679"/> <source>Dashed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="680"/> <source>Double</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="681"/> <source>Ridge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="682"/> <source>Inset</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="683"/> <source>Outset</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagEditorNewTag</name> <message> <location filename="../gui/browserWidgets/tageditornewtag.cpp" line="55"/> <source>Click to add tag...</source> <translation>Klik pro Å¡títky...</translation> </message> </context> <context> <name>TagProperties</name> <message> <location filename="../dialog/tagproperties.cpp" line="36"/> <source>Tag</source> <translation>Å títek</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="42"/> <source>Name</source> <translation>Jméno</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="48"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="50"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="102"/> <source>Add Tag</source> <translation>PÅ™idat Å¡títek</translation> </message> </context> <context> <name>ThumbnailPreferences</name> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="14"/> <source>Disable thumbnail generation</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="15"/> <source>Images to generate per interval</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="16"/> <source>Minimum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="17"/> <source>Maximum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>UrlEditor</name> <message> <location filename="../gui/browserWidgets/urleditor.cpp" line="45"/> <source>Click to set source URL...</source> <translation>Klik pro zdrojovou URL...</translation> </message> </context> <context> <name>WatchFolderAdd</name> <message> <location filename="../dialog/watchfolderadd.cpp" line="47"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="51"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="55"/> <source>Directory</source> <translation>Složka</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="63"/> <source>Keep</source> <translation>Ponechat</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="64"/> <source>Delete</source> <translation>Smazat</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="90"/> <source>Notebook</source> <translation>Poznámkový blok</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="92"/> <source>After import</source> <translation>Po importu</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="94"/> <source>Include subdirectories</source> <translation>VÄetnÄ› zanoÅ™ených složek</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="101"/> <source>Add Import Folder</source> <translation>PÅ™idat importní složku</translation> </message> </context> <context> <name>WatchFolderDialog</name> <message> <location filename="../dialog/watchfolderdialog.cpp" line="38"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="42"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="50"/> <source>Auto Import Folders</source> <translation>Složka pro automatický import</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="62"/> <source>Add</source> <translation>PÅ™idat</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="66"/> <source>Edit</source> <translation>Upravit</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="71"/> <location filename="../dialog/watchfolderdialog.cpp" line="162"/> <source>Delete</source> <translation>Smazat</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="112"/> <source>Directory</source> <translation>Složka</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="113"/> <source>Target Notebook</source> <translation>Cílový poznámkový blok</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="114"/> <location filename="../dialog/watchfolderdialog.cpp" line="159"/> <source>Keep</source> <translation>Ponechat</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="115"/> <source>Include Subdirectories</source> <translation>VÄetnÄ› zanoÅ™ených složek</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="169"/> <source>Yes</source> <translation>Ano</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="172"/> <source>No</source> <translation>Ne</translation> </message> </context> </TS> �������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/translations/nixnote2_da.ts����������������������������������������������������������0000664�0000000�0000000�00000615170�13156041044�0020574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="da_DK"> <context> <name>AboutDialog</name> <message> <location filename="../dialog/aboutdialog.cpp" line="36"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/aboutdialog.cpp" line="53"/> <source>Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountDialog</name> <message> <location filename="../dialog/accountdialog.cpp" line="37"/> <source>Account Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="40"/> <source>Normal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="46"/> <source>Premium</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="48"/> <source>VIP</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="50"/> <source>Manager</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="52"/> <source>Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="54"/> <source>Admin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="75"/> <source> Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="79"/> <source> KB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="83"/> <source> MB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="90"/> <source>Account:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="93"/> <source>User Name:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="95"/> <source>Account Type:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="97"/> <source>Limit:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="99"/> <source>Uploaded In This Period:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="103"/> <source>Less than 1MB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="104"/> <source>Current Cycle Ends:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="112"/> <source>OK</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountMaintenanceDialog</name> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="34"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="35"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="36"/> <source>Add</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="37"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="38"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="64"/> <source>User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="104"/> <source>Are you sure you want to delete this account?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="105"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="117"/> <source>You cannot delete the active account.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="170"/> <location filename="../dialog/accountmaintenancedialog.cpp" line="194"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> </context> <context> <name>AddNote</name> <message> <location filename="../cmdtools/addnote.cpp" line="33"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AddUserAccountDialog</name> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="38"/> <source>Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="39"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="41"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="46"/> <source>Account Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="69"/> <source>Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="70"/> <source>Yinxiang Biji</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="71"/> <source>Evernote Sandbox</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AppearancePreferences</name> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="39"/> <source>Show tray icon</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="40"/> <source>Display PDFs inline**</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="41"/> <source>Show splash screen on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="42"/> <source>Start automatically at login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="43"/> <source>Confirm Deletes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="44"/> <source>Show missed reminders on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="45"/> <source>Always Start minimized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="46"/> <source>Show notebook and tag totals</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="47"/> <source>Auto-Hide editor toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="49"/> <source>Disable note editing on statup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="50"/> <source>Focus on Note Title on New Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="51"/> <source>Limit Editor to Web Fonts*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="53"/> <source>Show note list grid*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="54"/> <source>Alternate note list colors*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="55"/> <source>Set author on new notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="57"/> <source>Preview fonts in editor dialag*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="61"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="68"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="75"/> <source>Do Nothing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="62"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="69"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="76"/> <source>Show/Hide NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="63"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="70"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="77"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="64"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="71"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="78"/> <source>New Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="65"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="72"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="79"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="82"/> <source>Open New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="83"/> <source>Open New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="98"/> <source>Qt Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="99"/> <source>notify-send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="106"/> <source>Startup Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="108"/> <source>Restore Selection Criteria</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="109"/> <source>Select Default Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="110"/> <source>View All Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="120"/> <source>Minimize to tray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="121"/> <source>Close to tray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="143"/> <source>Notification Service</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="146"/> <source>Middle Click Open Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="149"/> <source>Tray Icon Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="152"/> <source>Tray Icon Middle Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="155"/> <source>Tray Icon Double Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="158"/> <source>Default GUI Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="161"/> <source>Default GUI Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="164"/> <source>Default Editor Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="167"/> <source>Default Editor Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="171"/> <source>* May require restart on some systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="172"/> <source>** Can crash on Gnome systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="102"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="405"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="423"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="442"/> <source>System Default</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AttachmentIconBuilder</name> <message> <location filename="../html/attachmenticonbuilder.cpp" line="74"/> <source>Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/attachmenticonbuilder.cpp" line="78"/> <source>KB</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AuthorEditor</name> <message> <location filename="../gui/browserWidgets/authoreditor.cpp" line="37"/> <source>Click to set author</source> <translation type="unfinished"></translation> </message> </context> <context> <name>BatchImport</name> <message> <location filename="../xml/batchimport.cpp" line="112"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CloseNotebookDialog</name> <message> <location filename="../dialog/closenotebookdialog.cpp" line="37"/> <source>Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="42"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="43"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="56"/> <source>Open Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="57"/> <source>Closed Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="59"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="60"/> <source>Close</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CmdLineQuery</name> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="67"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="69"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="72"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="75"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="78"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="81"/> <source>Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="84"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="87"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="90"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="93"/> <source>Todo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="96"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="99"/> <source>Reminder Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="181"/> <location filename="../cmdtools/cmdlinequery.cpp" line="190"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="183"/> <location filename="../cmdtools/cmdlinequery.cpp" line="188"/> <source>Yes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CmdLineTool</name> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="56"/> <source>Unable to attach to shared memory segment. Is the other NixNote running? </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="315"/> <location filename="../cmdtools/cmdlinetool.cpp" line="452"/> <source> has been created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="318"/> <source>No response from NixNote. Please verify that the note was created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="332"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="535"/> <source> was not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="538"/> <location filename="../cmdtools/cmdlinetool.cpp" line="609"/> <source> has been appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="541"/> <source>No response from NixNote. Please verify that the note was appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="552"/> <source> was not found. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="221"/> <location filename="../cmdtools/cmdlinetool.cpp" line="654"/> <source>No response received from NixNote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="156"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="663"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="674"/> <location filename="../cmdtools/cmdlinetool.cpp" line="690"/> <location filename="../cmdtools/cmdlinetool.cpp" line="722"/> <location filename="../cmdtools/cmdlinetool.cpp" line="742"/> <source>This cannot be done with NixNote running.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="732"/> <location filename="../cmdtools/cmdlinetool.cpp" line="752"/> <source>Notebook not found: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="765"/> <source>OAuth token not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="783"/> <source>Error synchronizing with Evernote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="786"/> <source>Sync completed.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ColorSettings</name> <message> <location filename="../settings/colorsettings.cpp" line="37"/> <source>White</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="38"/> <source>Red</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="39"/> <source>Blue</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="40"/> <source>Green</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="41"/> <source>Yellow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="42"/> <source>Black</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="43"/> <source>Purple</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="44"/> <source>Brown</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="45"/> <source>Orange</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="46"/> <source>Grey</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="47"/> <source>Powder Blue</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CommunicationManager</name> <message> <location filename="../communication/communicationmanager.cpp" line="675"/> <source>Linked notebook notestore URL missing.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source>API rate limit exceeded. Please try again in </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <source> minutes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source> minute.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1206"/> <source>EDAMSystemException </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1208"/> <source>EDAMSystemException: Unknown error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1232"/> <source>EDAMNotFoundException: Note not found</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DatabaseStatus</name> <message> <location filename="../dialog/databasestatus.cpp" line="35"/> <source>Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="47"/> <source>Total Notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="49"/> <source>Total Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="51"/> <source>Unindexed Notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="53"/> <source>Unindexed Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="55"/> <source>Thumbnails Needed:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="60"/> <source>OK</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DateDelegate</name> <message> <location filename="../gui/datedelegate.cpp" line="42"/> <source>Today</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DateEditor</name> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="38"/> <source>Created:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="42"/> <source>Updated:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="46"/> <source>Subject:</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DebugPreferences</name> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="38"/> <source>Disable image search highlighting.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="35"/> <source>Strict note checking.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="37"/> <source>Disable uploads to server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="39"/> <source>Show LID column (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="40"/> <source>Disable Tag Sorting (useful for non-ASCII sort bug).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="41"/> <source>Force UTF8 Encoding.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="59"/> <source>Intercept Unix SIGHUP (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="64"/> <source>Use multipe theads to save note contents (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="68"/> <source>Use libtidy directly (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="72"/> <source>Auto-Save Interval (in seconds).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="79"/> <source>Message Level</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="82"/> <source>Trace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="83"/> <source>Debug</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="84"/> <source>Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="85"/> <source>Warnings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="86"/> <source>Errors</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="87"/> <source>Fatal</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EditorButtonBar</name> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="37"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="133"/> <source>Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="38"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="137"/> <source>Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="39"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="142"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="40"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="41"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="150"/> <source>Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="42"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="153"/> <source>Remove Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="43"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="159"/> <source>Bold</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="44"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="166"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="167"/> <source>Italics</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="45"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="184"/> <source>Superscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="46"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="188"/> <source>Subscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="47"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="174"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="175"/> <source>Underline</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="48"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="180"/> <source>Strikethrough</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="49"/> <source>Align Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="50"/> <source>Align Center</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="51"/> <source>Align Full</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="52"/> <source>Align Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="53"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="208"/> <source>Horizontal Line</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="54"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="55"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="220"/> <source>Shift Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="56"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="224"/> <source>Shift Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="57"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="228"/> <source>Bullet List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="58"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="232"/> <source>Number List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="59"/> <source>Font</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="60"/> <source>Font Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="61"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="248"/> <source>Font Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="62"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="257"/> <source>Highlight</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="63"/> <source>To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="192"/> <source>Center Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="196"/> <source>Fully Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="214"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="215"/> <source>Insert Date & Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="262"/> <source>Todo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="64"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="266"/> <source>Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="65"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="270"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="66"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="204"/> <source>Left Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="200"/> <source>Right Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="274"/> <source>Insert HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="661"/> <source>Times</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailDialog</name> <message> <location filename="../dialog/emaildialog.cpp" line="36"/> <source>Send Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="38"/> <source>Send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="39"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="51"/> <source>To:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="53"/> <source>BCC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="55"/> <source>CC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="57"/> <source>Subject:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="59"/> <source>Note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="77"/> <source>CC me on this email</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailNote</name> <message> <location filename="../cmdtools/emailnote.cpp" line="261"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="327"/> <source>Connection Error: Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="333"/> <source>Login Error : Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="338"/> <source>Send Error : Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="344"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailPreferences</name> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="17"/> <source>SMTP Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="18"/> <source>Server Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="19"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="20"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="21"/> <source>Sender Display Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="22"/> <source>Sender Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="23"/> <source>Connection Type</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="31"/> <source>Plain Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="32"/> <source>SSL Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="33"/> <source>TLS Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="35"/> <source>Send Test Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="108"/> <location filename="../dialog/preferences/emailpreferences.cpp" line="113"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="109"/> <source>You must specify a SMTP server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="114"/> <source>You must specify a sender email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="146"/> <source>Test Email From NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="152"/> <source><h1>This is a test email from NixNote.</h1> </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="153"/> <source>If you are reading it then your email preferences are are setup properly.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message sent.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnCryptDialog</name> <message> <location filename="../dialog/encryptdialog.cpp" line="31"/> <source>Encrypt Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="47"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="49"/> <source>Verify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="51"/> <source>Hint</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="53"/> <source>Remember Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="61"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="65"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="113"/> <source>Password must be at least 4 characters</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="117"/> <source>Passwords do not match</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="121"/> <source>Hint must be entered</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnDecryptDialog</name> <message> <location filename="../dialog/endecryptdialog.cpp" line="35"/> <source>Decrypt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="51"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="52"/> <source>Hint</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="59"/> <source>Permanently Decrypt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="61"/> <source>Remember Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="66"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="70"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExportData</name> <message> <location filename="../xml/exportdata.cpp" line="54"/> <source>Cannot open file.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="62"/> <source>Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="81"/> <source>Backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="114"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="151"/> <source>Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="360"/> <source>Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="405"/> <source>Linked Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="448"/> <source>Shared Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="508"/> <source>Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="725"/> <source>Backup Canceled</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExternalBrowse</name> <message> <location filename="../gui/externalbrowse.cpp" line="32"/> <source>NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/externalbrowse.cpp" line="124"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExtractNotes</name> <message> <location filename="../cmdtools/extractnotes.cpp" line="41"/> <location filename="../cmdtools/extractnotes.cpp" line="82"/> <source>Output file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="64"/> <source>Deleting notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="65"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FavoritesView</name> <message> <location filename="../gui/favoritesview.cpp" line="68"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="90"/> <source>Remove from shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="565"/> <source>Are you sure you want to remove this shortcut?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="566"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>FileWatcher</name> <message> <location filename="../watcher/filewatcher.cpp" line="72"/> <source>Error removing file: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FindReplace</name> <message> <location filename="../gui/findreplace.cpp" line="46"/> <source>Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="47"/> <source>Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="48"/> <source>Match case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="57"/> <source>Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="58"/> <source>Replace all</source> <translation type="unfinished"></translation> </message> </context> <context> <name>HtmlEntitiesDialog</name> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="34"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="35"/> <source>Edit entries list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="36"/> <source>Save entities list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="71"/> <source>HTML Entities Selection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="206"/> <source>Comma separated list of HTML entities. See http://www.w3schools.com/charsets/ for list.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportData</name> <message> <location filename="../xml/importdata.cpp" line="59"/> <source>Imported Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="106"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="107"/> <location filename="../xml/importdata.cpp" line="119"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="130"/> <source>Importing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="131"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="133"/> <source>Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="134"/> <source>Restoring Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportEnex</name> <message> <location filename="../xml/importenex.cpp" line="40"/> <source>Imported Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="83"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="84"/> <location filename="../xml/importenex.cpp" line="94"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="101"/> <location filename="../xml/importenex.cpp" line="102"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportNotes</name> <message> <location filename="../cmdtools/importnotes.cpp" line="19"/> <source>Input file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/importnotes.cpp" line="24"/> <source>Input file not found.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLatexDialog</name> <message> <location filename="../dialog/insertlatexdialog.cpp" line="32"/> <source>Insert LaTeX Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="42"/> <source>Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="52"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLinkDialog</name> <message> <location filename="../dialog/insertlinkdialog.cpp" line="34"/> <source>Insert Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="45"/> <source>URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="54"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LineEdit</name> <message> <location filename="../gui/lineedit.cpp" line="39"/> <source>Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocalePreferences</name> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="37"/> <source>Date Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="40"/> <source>MM/dd/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="41"/> <source>MM/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="42"/> <source>M/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="43"/> <source>M/d/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="44"/> <source>dd/MM/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="45"/> <source>d/M/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="46"/> <source>dd/MM/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="47"/> <source>d/M/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="48"/> <source>yyyy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="49"/> <source>yy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="52"/> <source>Time Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="55"/> <source>HH:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="56"/> <source>HH:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="57"/> <source>HH:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="58"/> <source>HH:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="59"/> <source>hh:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="60"/> <source>hh:mm:ss a- </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="61"/> <source>h:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="62"/> <source>hh:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="63"/> <source>hh:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="64"/> <source>h:mm a - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationDialog</name> <message> <location filename="../dialog/locationdialog.cpp" line="33"/> <source>Location</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="40"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="42"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="44"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="49"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="52"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationEditor</name> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="42"/> <source>Click to set location...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="45"/> <source>Edit...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="46"/> <source>Clear</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="47"/> <source>View on map</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LogViewer</name> <message> <location filename="../dialog/logviewer.cpp" line="41"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="43"/> <source>Refresh</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="45"/> <source>Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="54"/> <source>Save Logs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>Save Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>NixNote Log (*.log);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LoginDialog</name> <message> <location filename="../dialog/logindialog.cpp" line="34"/> <source>NixNote Login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="43"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="44"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="52"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="56"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NAttributeTree</name> <message> <location filename="../gui/nattributetree.cpp" line="48"/> <source>Attributes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="129"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="132"/> <location filename="../gui/nattributetree.cpp" line="213"/> <source>Since</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="136"/> <location filename="../gui/nattributetree.cpp" line="173"/> <location filename="../gui/nattributetree.cpp" line="217"/> <location filename="../gui/nattributetree.cpp" line="254"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="140"/> <location filename="../gui/nattributetree.cpp" line="177"/> <location filename="../gui/nattributetree.cpp" line="221"/> <location filename="../gui/nattributetree.cpp" line="258"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="144"/> <location filename="../gui/nattributetree.cpp" line="181"/> <location filename="../gui/nattributetree.cpp" line="225"/> <location filename="../gui/nattributetree.cpp" line="262"/> <source>This week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="148"/> <location filename="../gui/nattributetree.cpp" line="185"/> <location filename="../gui/nattributetree.cpp" line="229"/> <location filename="../gui/nattributetree.cpp" line="266"/> <source>Last week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="152"/> <location filename="../gui/nattributetree.cpp" line="189"/> <location filename="../gui/nattributetree.cpp" line="233"/> <location filename="../gui/nattributetree.cpp" line="270"/> <source>This Month</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="156"/> <location filename="../gui/nattributetree.cpp" line="193"/> <location filename="../gui/nattributetree.cpp" line="237"/> <location filename="../gui/nattributetree.cpp" line="274"/> <source>Last Month</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="160"/> <location filename="../gui/nattributetree.cpp" line="197"/> <location filename="../gui/nattributetree.cpp" line="241"/> <location filename="../gui/nattributetree.cpp" line="278"/> <source>This Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="164"/> <location filename="../gui/nattributetree.cpp" line="201"/> <location filename="../gui/nattributetree.cpp" line="245"/> <location filename="../gui/nattributetree.cpp" line="282"/> <source>Last Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="169"/> <location filename="../gui/nattributetree.cpp" line="250"/> <source>Before</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="210"/> <source>Last Modified</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="289"/> <source>Contains</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="292"/> <source>Images</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="296"/> <source>Audio</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="300"/> <source>Ink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="304"/> <source>Encrypted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="308"/> <source>To-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="312"/> <source>Unfinished to-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="316"/> <source>Finished to-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="320"/> <source>PDF document</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="324"/> <source>Attachment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="328"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="332"/> <source>Uncompleted Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="336"/> <source>Future Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="341"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="344"/> <source>Emailed to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="348"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="352"/> <source>Web page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="356"/> <source>Mobile</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="360"/> <source>Another application</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NBrowserWindow</name> <message> <location filename="../gui/nbrowserwindow.cpp" line="521"/> <location filename="../gui/nbrowserwindow.cpp" line="3112"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="523"/> <location filename="../gui/nbrowserwindow.cpp" line="3114"/> <source>Tomorrow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="525"/> <location filename="../gui/nbrowserwindow.cpp" line="3116"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to save this note. Either tidy isn't installed or the note is too complex to save.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="1808"/> <source>Insert Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>Unable Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>This is an ink note. Ink notes are not supported since Evernote has not published any specifications on them and I'm too lazy to figure them out by myself.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2240"/> <source>Edit Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2304"/> <source>Unable to create LaTeX image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2305"/> <source>Unable to create LaTeX image. Are you sure mimetex is installed?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2635"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2636"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2645"/> <source>Sending Email. Please be patient.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3159"/> <source>Decryption Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3160"/> <source>Unknown encryption method. Unable to decrypt.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3263"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3264"/> <source>Error Encrypting String. Please verify you have Java installed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Hunspell plugin not found or could not be loaded.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NMainMenuBar</name> <message> <location filename="../gui/nmainmenubar.cpp" line="60"/> <source>&File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="79"/> <source>Print this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="87"/> <source>Backup database to a file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="93"/> <source>Restore from a backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="113"/> <source>Import notes from an export file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="133"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="151"/> <source>Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="159"/> <source>Close the program</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="175"/> <source>&Edit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="78"/> <source>&Print Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="64"/> <source>Email Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="65"/> <source>Email a copy of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="71"/> <source>Print Preview Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="72"/> <source>Print preview of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="86"/> <source>&Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="92"/> <source>&Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="112"/> <source>&Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="140"/> <source>&Add Another User...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="144"/> <source>&User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="150"/> <source>&Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="158"/> <source>E&xit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="180"/> <source>&Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="184"/> <source>&Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="190"/> <source>&Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="194"/> <source>C&opy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="198"/> <source>&Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="202"/> <source>Pas&te as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="206"/> <source>Remo&ve Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="212"/> <source>Select &All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="218"/> <source>F&ind and Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="220"/> <source>&Search Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="225"/> <source>&Reset Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="232"/> <source>&Find in Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="238"/> <source>Find &Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="243"/> <source>Find &Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="250"/> <source>Replace &Within Note...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="260"/> <source>Preferences</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="268"/> <source>&View</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="273"/> <source>Wide Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="278"/> <source>Narrow Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="285"/> <source>&Show Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="289"/> <source>Note &History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="295"/> <source>&Presentation Mode</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="299"/> <source>Show &Left Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="306"/> <source>Show &Favorites</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="313"/> <source>Show &Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="320"/> <source>Show Ta&gs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="327"/> <source>Show Sa&ved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="341"/> <source>Show T&rash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="348"/> <source>Show N&ote List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="355"/> <source>Show Note &Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="364"/> <source>View Note &Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="368"/> <source>View &Toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="375"/> <source>View Status&bar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="391"/> <source>New &Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="396"/> <source>New &Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="401"/> <source>Dupl&icate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="406"/> <source>&Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="411"/> <source>Reindex Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="418"/> <source>&Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="427"/> <source>&Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="432"/> <source>&UnPin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="446"/> <source>&Synchronize</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="447"/> <source>Synchronize with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="452"/> <source>&Disconnect</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="460"/> <source>Pause &Indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="461"/> <source>Temporarily pause indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="468"/> <source>Disable &Editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="469"/> <source>Temporarily disable note editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="476"/> <source>A&ccount</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="490"/> <source>&Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="514"/> <source>&User's Guide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="537"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="538"/> <source>View currentt shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="547"/> <source>Github Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="548"/> <source>Goto the NixNote2 Github project page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="585"/> <source>About &Qt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="625"/> <source>Theme</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="386"/> <source>&Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="100"/> <source>&Export to NixNote Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="101"/> <source>Export selected notes to a NNEX file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="106"/> <source>&Export Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="107"/> <source>Export selected notes to a PDF file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="441"/> <source>&Tools</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="453"/> <source>Disconnect from Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="477"/> <source>Account information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="484"/> <source>&Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="485"/> <source>Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="491"/> <source>Reindex all notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="499"/> <source>&Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="500"/> <source>Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="509"/> <source>&Help</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="515"/> <source>Open the user manual.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="542"/> <source>Message &Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="554"/> <source>&Evernote Account Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="559"/> <source>Evernote &Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="568"/> <source>Evernote &Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="573"/> <source>Evernote User &Forum</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="580"/> <source>&About</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="634"/> <source>System Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="543"/> <source>View current program messages</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="334"/> <source>Show &Attribute Filter</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="520"/> <source>Theme &Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="521"/> <source>View information about the current theme.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="555"/> <source>Go to your Evernote account page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="560"/> <source>Go to Evernote's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="562"/> <source>Yinxiang Biji Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="563"/> <source>Go to Yinxiang Biji's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="569"/> <source>Go to Evernote Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="574"/> <source>Go to the Evernote user support forum.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="581"/> <location filename="../gui/nmainmenubar.cpp" line="586"/> <source>About</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NNotebookView</name> <message> <location filename="../gui/nnotebookview.cpp" line="69"/> <source>Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="86"/> <source>Create New Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="95"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="103"/> <source>Add to stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="116"/> <source>Create New stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="119"/> <source>Remove from stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="123"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="131"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="641"/> <source>Are you sure you want to delete this notebook?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="642"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>New Stack (</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NSearchView</name> <message> <location filename="../gui/nsearchview.cpp" line="65"/> <source>Saved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="74"/> <source>Create Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="83"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="90"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="94"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="404"/> <source>Are you sure you want to delete this saved search?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="405"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTabWidget</name> <message> <location filename="../gui/ntabwidget.cpp" line="254"/> <location filename="../gui/ntabwidget.cpp" line="262"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntabwidget.cpp" line="267"/> <location filename="../gui/ntabwidget.cpp" line="334"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableView</name> <message> <location filename="../gui/ntableview.cpp" line="203"/> <source>Open Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="209"/> <source>Open Note In New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="215"/> <source>Open Note In New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="222"/> <source>Add Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="227"/> <source>Delete Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="238"/> <source>Restore Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="244"/> <source>Copy Note Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="249"/> <source>Duplicate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="254"/> <source>Reminders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="258"/> <source>Remove</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="263"/> <source>Mark Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="269"/> <source>Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="274"/> <source>Unpin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="279"/> <source>Merge Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="285"/> <source>Create Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="291"/> <source>Title Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="296"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="301"/> <source>White</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="304"/> <source>Red</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="307"/> <source>Blue</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="310"/> <source>Green</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="313"/> <source>Yellow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="316"/> <source>Black</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="319"/> <source>Gray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="322"/> <source>Cyan</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="325"/> <source>Magenta</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="663"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="666"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="672"/> <source>selected note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="677"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="942"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="943"/> <source>This note has never been synchronized. Using this in a note link can cause problems unless you synchronize it first.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1319"/> <source>Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1370"/> <source>One or more notes are unsynchronized. This can cause issues if they are later synchronized. Do you wish to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1654"/> <source>Note LID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1657"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1660"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1663"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1666"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1668"/> <location filename="../gui/ntableview.cpp" line="1676"/> <location filename="../gui/ntableview.cpp" line="1682"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1670"/> <location filename="../gui/ntableview.cpp" line="1674"/> <location filename="../gui/ntableview.cpp" line="1680"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1672"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1678"/> <source>Has To-Do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1684"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1687"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1690"/> <source>Date Deleted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1698"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1706"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1710"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1719"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1728"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1737"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1740"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1743"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1746"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1754"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableViewHeader</name> <message> <location filename="../gui/ntableviewheader.cpp" line="42"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="47"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="52"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="57"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="62"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="67"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="72"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="77"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="82"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="87"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="92"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="97"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="102"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="107"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="112"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="117"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="122"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="128"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="133"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="138"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="143"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTagView</name> <message> <location filename="../gui/ntagview.cpp" line="67"/> <location filename="../gui/ntagview.cpp" line="156"/> <source>Tags from Personal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="91"/> <source>Create New Tag</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="100"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="107"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="110"/> <source>Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="113"/> <source>Hide Unassigned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="119"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="154"/> <source>Tags from </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="351"/> <source>-<Missing Tag>-</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="706"/> <source>Are you sure you want to merge these tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="707"/> <source>Verify Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="753"/> <source>Are you sure you want to delete this tag?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="755"/> <source>Are you sure you want to delete all selected tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="756"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTitleEditor</name> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="123"/> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="137"/> <source>Untitled note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="134"/> <source>untitled note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTrashTree</name> <message> <location filename="../gui/ntrashtree.cpp" line="53"/> <source>Trash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="65"/> <source>Restore Deleted Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="68"/> <source>Empty Trash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="238"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="239"/> <source>Are you sure you want to permanently delete these notes?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NWebView</name> <message> <location filename="../gui/nwebview.cpp" line="56"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="61"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="66"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="71"/> <source>Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="76"/> <source>Paste as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="81"/> <source>Remove Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="86"/> <source>Copy Note URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="93"/> <source>Background Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="113"/> <source>To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="120"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="127"/> <source>Encrypted Selected Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="132"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="137"/> <source>Insert Hyperlink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="142"/> <source>Quick Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="147"/> <source>Remove Hyperlink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="152"/> <source>Attach File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="158"/> <source>Insert LaTeX Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="164"/> <source>Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="167"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="173"/> <source>Insert Row</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="178"/> <source>Insert Column</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="185"/> <source>Delete Row</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="189"/> <source>Delete Column</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="196"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="203"/> <source>Image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="206"/> <source>Save Image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="214"/> <source>Rotate Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="218"/> <source>Rotate Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="224"/> <source>Save Attachment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="502"/> <location filename="../gui/nwebview.cpp" line="532"/> <source>Save File</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NixNote</name> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy Not Found</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy is not found on this system. Until tidy is installed you cannot save any notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="291"/> <source>ToolBar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="303"/> <source>Back</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="304"/> <source>Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="314"/> <source>All Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="316"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="319"/> <source>Print</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="329"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="332"/> <source>New Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="344"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="347"/> <source>Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="349"/> <source>Usage</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="531"/> <location filename="../nixnote.cpp" line="3183"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="547"/> <source>Show/Hide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="559"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1799"/> <source>Confirm Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1815"/> <source>Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1818"/> <source>Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1730"/> <location filename="../nixnote.cpp" line="1816"/> <source>NixNote Export (*.nnex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="320"/> <source>Print the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="322"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="323"/> <source>Email the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="528"/> <source>Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="538"/> <source>Shortcut Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="540"/> <source>Pinned Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="542"/> <source>Recently Updated Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1437"/> <location filename="../nixnote.cpp" line="2350"/> <source>Log in to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1439"/> <location filename="../nixnote.cpp" line="2352"/> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <location filename="../nixnote.cpp" line="1761"/> <location filename="../nixnote.cpp" line="1857"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <source>No notes selected.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1722"/> <source>Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1724"/> <source>Export Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1749"/> <source>Performing backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1751"/> <source>Performing export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1768"/> <source>Database backup complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1770"/> <source>Note extract complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1796"/> <source>This is used to restore a database from backups. It is HIGHLY recommended that this only be used to populate an empty database. Restoring into a database that already has data can cause problems. Are you sure you want to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1819"/> <source>NixNote Export (*.nnex);;Evernote Export (*.enex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1846"/> <source>Restoring database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1848"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1880"/> <source>Database has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1882"/> <source>Notes have been imported.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <location filename="../nixnote.cpp" line="1918"/> <source>Sync Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <source>Sync completed with errors.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1918"/> <source>Sync error. See message log for details</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync completed successfully.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2002"/> <source>Untitled note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>This note has never been synchronized with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3872"/> <source>Error loading Webcam plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3887"/> <source>Error loading Hunspell plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3913"/> <location filename="../nixnote.cpp" line="3965"/> <source>PDF Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>Export complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3937"/> <source>Exporting Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3938"/> <source>Exporting notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2391"/> <location filename="../nixnote.cpp" line="2398"/> <source>Error retrieving note.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2392"/> <location filename="../nixnote.cpp" line="2399"/> <source>Error retrieving note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <location filename="../nixnote.cpp" line="2431"/> <source>Note Restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <source>A new copy has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2431"/> <source>Note successfully restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2434"/> <source>Note restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2650"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3054"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex the entire database?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3247"/> <source>Notes will be reindexed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Webcam plugin not found or could not be loaded</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3281"/> <source>Unable to find webcam or capture image.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3282"/> <source>Webcam Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3432"/> <source>Note Reindexed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3444"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3447"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3451"/> <source>this note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3455"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3816"/> <source>Press ESC to exit.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteFormatter</name> <message> <location filename="../html/noteformatter.cpp" line="657"/> <source>File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/noteformatter.cpp" line="691"/> <source>Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/noteformatter.cpp" line="695"/> <source>KB</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteHistorySelect</name> <message> <location filename="../dialog/notehistoryselect.cpp" line="32"/> <source>Note History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="34"/> <source>Import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="39"/> <source>Replace current note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="80"/> <source>Current copy on Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="93"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="95"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteProperties</name> <message> <location filename="../dialog/noteproperties.cpp" line="37"/> <source>Note Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/noteproperties.cpp" line="38"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NotebookProperties</name> <message> <location filename="../dialog/notebookproperties.cpp" line="38"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="42"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="46"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="52"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="60"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="62"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="135"/> <source>Add Notebook</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OAuthWindow</name> <message> <location filename="../oauth/oauthwindow.cpp" line="70"/> <source>Please Grant NixNote Access</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="81"/> <source>SSL Support not found. Aborting connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="132"/> <source>Error receiving temporary credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="176"/> <source>Error receiving permanent credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="219"/> <source>Error receiving authorization</source> <translation type="unfinished"></translation> </message> </context> <context> <name>PopplerViewer</name> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source>Page </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source> of </source> <translation type="unfinished"></translation> </message> </context> <context> <name>PreferencesDialog</name> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="30"/> <source>User Settings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="49"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="92"/> <source>Appearance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="98"/> <source>Locale</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="104"/> <source>Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="110"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="116"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="121"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="127"/> <source>Advanced</source> <translation type="unfinished"></translation> </message> </context> <context> <name>QApplication</name> <message> <location filename="../dialog/screencapture.cpp" line="108"/> <source>Use your mouse to draw a rectangle to screenshot or exit pressing any key or using the right or middle mouse buttons.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/screencapture.cpp" line="145"/> <source>%1 x %2 pixels </source> <translation type="unfinished"></translation> </message> </context> <context> <name>QObject</name> <message> <location filename="../gui/ntableview.cpp" line="175"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="176"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="177"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="178"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="179"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="180"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="181"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="182"/> <source>Deletion Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="183"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="184"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="185"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="186"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="187"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="188"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="189"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="190"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="191"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="192"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="193"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="194"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="195"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="196"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="197"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderButton</name> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="35"/> <source>Mark as Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="36"/> <source>Change Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="37"/> <source>Clear Reminder</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderManager</name> <message> <location filename="../reminders/remindermanager.cpp" line="85"/> <source>Reminders Due</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderSetDialog</name> <message> <location filename="../dialog/remindersetdialog.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/remindersetdialog.cpp" line="48"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>RemoteQuery</name> <message> <location filename="../filters/remotequery.cpp" line="113"/> <location filename="../filters/remotequery.cpp" line="130"/> <source>Today</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SavedSearchProperties</name> <message> <location filename="../dialog/savedsearchproperties.cpp" line="35"/> <source>Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="43"/> <source>Query</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="51"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="53"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="106"/> <source>Add Saved Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SearchPreferences</name> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="36"/> <source>Index Attachments</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="44"/> <source>Clear Notebook Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="48"/> <source>Clear Tag Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="52"/> <source>Clear Search Text on Notebook Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="56"/> <source>Show Any Matching Tags When Selecting Multiple Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="60"/> <source>Index PDFs locally</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="64"/> <source>Background Indexing (requires restart & may cause issues on some systems)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="68"/> <source>Experimental: Force search to lower case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="73"/> <source>Minimum Image Recognition Weight</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ShortcutDialog</name> <message> <location filename="../dialog/shortcutdialog.cpp" line="41"/> <source>Defined Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/shortcutdialog.cpp" line="42"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SpellCheckDialog</name> <message> <location filename="../dialog/spellcheckdialog.cpp" line="35"/> <source>Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="50"/> <source>Suggestion</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="56"/> <source>Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="57"/> <source>Ignore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="58"/> <source>Ignore All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="59"/> <source>Add To Dictionary</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="66"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncPreferences</name> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="34"/> <source>Sync automatically</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="38"/> <source>Every 15 minutes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="39"/> <source>Every 30 minutes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="40"/> <source>Every hour</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="41"/> <source>Every day</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="43"/> <source>Sync on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="45"/> <source>Sync on shutdown</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="47"/> <source>Enable sync notifications</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="48"/> <source>Show successful syncs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="49"/> <source>Restart sync on API limit (experimental)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="51"/> <source>Enable Proxy*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="52"/> <source>Enable Socks5</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="53"/> <source>Proxy Hostname</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="54"/> <source>Proxy Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="55"/> <source>Proxy Username</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="56"/> <source>Proxy Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="57"/> <source>*Note: Restart required</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="73"/> <source>Popup message on sync errors.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncRunner</name> <message> <location filename="../threads/syncrunner.cpp" line="134"/> <source>Beginning Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="142"/> <source>Downloading changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="192"/> <source>Sync Complete Successfully</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <location filename="../threads/syncrunner.cpp" line="267"/> <source>Download </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <source>% complete for notebooks, tags, & searches.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="247"/> <source>Download complete for notebooks, tags, & searches. Downloading notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="267"/> <source>% complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="280"/> <source>Download complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>Downloading </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <source>% complete for tags in shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="721"/> <source>Downloading notes for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="743"/> <source>% complete for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1149"/> <source>Error uploading note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1151"/> <source>Error uploading note with a missing title!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="721"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TableDialog</name> <message> <location filename="../dialog/tabledialog.cpp" line="30"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="34"/> <source>Percent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="35"/> <source>Pixels</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="51"/> <source>Rows</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="53"/> <source>Columns</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="55"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="57"/> <source>Unit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="64"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="67"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TablePropertiesDialog</name> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="72"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="105"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="86"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="87"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="106"/> <source>Cell Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="214"/> <source>Row 1 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="216"/> <source>Row 1 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="218"/> <source>Row 1 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="220"/> <source>Row 2 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="222"/> <source>Row 2 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="224"/> <source>Row 2 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="226"/> <source>Row 3 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="228"/> <source>Row 3 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="230"/> <source>Row 3 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="456"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="464"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="480"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="494"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="511"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="526"/> <source>Percent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="465"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="479"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="493"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="510"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="525"/> <source>Pixels</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="476"/> <source>Top Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="490"/> <source>Bottom Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="507"/> <source>Left Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="522"/> <source>Right Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="560"/> <source>Border Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="561"/> <source>Font Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="562"/> <source>Background Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="576"/> <source>Border Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="587"/> <source>Padding</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="597"/> <source>Top Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="606"/> <source>Bottom Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="615"/> <source>Left Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="624"/> <source>Right Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="636"/> <source>Horizontal Alignment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="641"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="642"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="643"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="644"/> <source>Center</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="676"/> <source>Solid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="677"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="678"/> <source>Dotted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="679"/> <source>Dashed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="680"/> <source>Double</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="681"/> <source>Ridge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="682"/> <source>Inset</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="683"/> <source>Outset</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagEditorNewTag</name> <message> <location filename="../gui/browserWidgets/tageditornewtag.cpp" line="55"/> <source>Click to add tag...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagProperties</name> <message> <location filename="../dialog/tagproperties.cpp" line="36"/> <source>Tag</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="48"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="50"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="102"/> <source>Add Tag</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ThumbnailPreferences</name> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="14"/> <source>Disable thumbnail generation</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="15"/> <source>Images to generate per interval</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="16"/> <source>Minimum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="17"/> <source>Maximum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>UrlEditor</name> <message> <location filename="../gui/browserWidgets/urleditor.cpp" line="45"/> <source>Click to set source URL...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>WatchFolderAdd</name> <message> <location filename="../dialog/watchfolderadd.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="51"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="55"/> <source>Directory</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="63"/> <source>Keep</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="64"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="90"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="92"/> <source>After import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="94"/> <source>Include subdirectories</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="101"/> <source>Add Import Folder</source> <translation type="unfinished"></translation> </message> </context> <context> <name>WatchFolderDialog</name> <message> <location filename="../dialog/watchfolderdialog.cpp" line="38"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="42"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="50"/> <source>Auto Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="62"/> <source>Add</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="66"/> <source>Edit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="71"/> <location filename="../dialog/watchfolderdialog.cpp" line="162"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="112"/> <source>Directory</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="113"/> <source>Target Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="114"/> <location filename="../dialog/watchfolderdialog.cpp" line="159"/> <source>Keep</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="115"/> <source>Include Subdirectories</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="169"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="172"/> <source>No</source> <translation type="unfinished"></translation> </message> </context> </TS> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/translations/nixnote2_de.ts����������������������������������������������������������0000664�0000000�0000000�00000617063�13156041044�0020603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="de_DE"> <context> <name>AboutDialog</name> <message> <location filename="../dialog/aboutdialog.cpp" line="36"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/aboutdialog.cpp" line="53"/> <source>Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountDialog</name> <message> <location filename="../dialog/accountdialog.cpp" line="37"/> <source>Account Information</source> <translation>Benutzerkonto Informationen</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="40"/> <source>Normal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="46"/> <source>Premium</source> <translation>Premium</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="48"/> <source>VIP</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="50"/> <source>Manager</source> <translation>Manager</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="52"/> <source>Support</source> <translation>Unterstützung</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="54"/> <source>Admin</source> <translation>Administrator</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="75"/> <source> Bytes</source> <translation>Bytes</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="79"/> <source> KB</source> <translation>KB</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="83"/> <source> MB</source> <translation>MB</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="90"/> <source>Account:</source> <translation>Konto:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="93"/> <source>User Name:</source> <translation>Benutzername:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="95"/> <source>Account Type:</source> <translation>Kontotyp:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="97"/> <source>Limit:</source> <translation>Begrenzung:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="99"/> <source>Uploaded In This Period:</source> <translation>Im Zeitraum hochgeladen:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="103"/> <source>Less than 1MB</source> <translation>weniger als 1MB</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="104"/> <source>Current Cycle Ends:</source> <translation>aktueller Zyklus endet:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="112"/> <source>OK</source> <translation>OK</translation> </message> </context> <context> <name>AccountMaintenanceDialog</name> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="34"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="35"/> <source>Close</source> <translation>Schließen</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="36"/> <source>Add</source> <translation>Hinzufügen</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="37"/> <source>Rename</source> <translation>Umbenennen</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="38"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="64"/> <source>User Account Maintenance</source> <translation>Benutzerkonto bearbeiten</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="104"/> <source>Are you sure you want to delete this account?</source> <translation>Wollen Sie wirklich dieses Benutzerkonto löschen? </translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="105"/> <source>Verify Delete</source> <translation>Löschung bestätigen</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="117"/> <source>You cannot delete the active account.</source> <translation>Sie können das aktive Konto nicht löschen.</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="170"/> <location filename="../dialog/accountmaintenancedialog.cpp" line="194"/> <source>Switch to </source> <translation>Benutzer wechseln</translation> </message> </context> <context> <name>AddNote</name> <message> <location filename="../cmdtools/addnote.cpp" line="33"/> <source>Untitled Note</source> <translation type="unfinished">unbenannte Notiz</translation> </message> </context> <context> <name>AddUserAccountDialog</name> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="38"/> <source>Server</source> <translation>Server</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="39"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="41"/> <source>Cancel</source> <translation>abbrechen</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="46"/> <source>Account Name</source> <translation>Name des Benutzerkonto</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="69"/> <source>Evernote</source> <translation></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="70"/> <source>Yinxiang Biji</source> <translation></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="71"/> <source>Evernote Sandbox</source> <translation></translation> </message> </context> <context> <name>AppearancePreferences</name> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="39"/> <source>Show tray icon</source> <translation>Zeige Icon im Tray</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="40"/> <source>Display PDFs inline**</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="41"/> <source>Show splash screen on startup</source> <translation>Zeige das Begrüßungsfenster beim Starten</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="42"/> <source>Start automatically at login</source> <translation>Starte automatisch beim Login </translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="43"/> <source>Confirm Deletes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="44"/> <source>Show missed reminders on startup</source> <translation>Zeige beim Starten alle vergessenen Erinnerungen</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="45"/> <source>Always Start minimized</source> <translation>Immer Minimiert starten</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="46"/> <source>Show notebook and tag totals</source> <translation>Zeige alle Notiozbücher und Tags</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="47"/> <source>Auto-Hide editor toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="49"/> <source>Disable note editing on statup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="50"/> <source>Focus on Note Title on New Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="51"/> <source>Limit Editor to Web Fonts*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="53"/> <source>Show note list grid*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="54"/> <source>Alternate note list colors*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="55"/> <source>Set author on new notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="57"/> <source>Preview fonts in editor dialag*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="61"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="68"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="75"/> <source>Do Nothing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="62"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="69"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="76"/> <source>Show/Hide NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="63"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="70"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="77"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="64"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="71"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="78"/> <source>New Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="65"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="72"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="79"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="82"/> <source>Open New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="83"/> <source>Open New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="98"/> <source>Qt Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="99"/> <source>notify-send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="106"/> <source>Startup Behavior</source> <translation>Startverhalten</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="108"/> <source>Restore Selection Criteria</source> <translatorcomment>Auswahl für die Startoption</translatorcomment> <translation>Wiederherstellen der Auswahlkriterien</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="109"/> <source>Select Default Notebook</source> <translatorcomment>Auswahl für die Startoption</translatorcomment> <translation>Zeige das Standard-Notizbuch</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="110"/> <source>View All Notebooks</source> <translatorcomment>Auswahl für die Startoption</translatorcomment> <translation>Zeige alle Notizbücher</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="120"/> <source>Minimize to tray</source> <translation>In den Tray minimieren</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="121"/> <source>Close to tray</source> <translatorcomment>Bei der Fensterfunktion "Schließen" wird anstelle des Beenden in den Tray minimiert</translatorcomment> <translation>Schließen in den Tray</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="143"/> <source>Notification Service</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="146"/> <source>Middle Click Open Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="149"/> <source>Tray Icon Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="152"/> <source>Tray Icon Middle Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="155"/> <source>Tray Icon Double Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="158"/> <source>Default GUI Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="161"/> <source>Default GUI Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="164"/> <source>Default Editor Font*</source> <translation>Voreinstellung der Editor Schrift/-art</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="167"/> <source>Default Editor Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="171"/> <source>* May require restart on some systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="172"/> <source>** Can crash on Gnome systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="102"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="405"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="423"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="442"/> <source>System Default</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AttachmentIconBuilder</name> <message> <location filename="../html/attachmenticonbuilder.cpp" line="74"/> <source>Bytes</source> <translation>Bytes</translation> </message> <message> <location filename="../html/attachmenticonbuilder.cpp" line="78"/> <source>KB</source> <translation>KB</translation> </message> </context> <context> <name>AuthorEditor</name> <message> <location filename="../gui/browserWidgets/authoreditor.cpp" line="37"/> <source>Click to set author</source> <translation>Hier den Autor auswählen</translation> </message> </context> <context> <name>BatchImport</name> <message> <location filename="../xml/batchimport.cpp" line="112"/> <source>Untitled Note</source> <translation type="unfinished">unbenannte Notiz</translation> </message> </context> <context> <name>CloseNotebookDialog</name> <message> <location filename="../dialog/closenotebookdialog.cpp" line="37"/> <source>Open/Close Notebooks</source> <translation>Notizbücher öffnen/schließen </translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="42"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="43"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="56"/> <source>Open Notebooks</source> <translation>OK</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="57"/> <source>Closed Notebooks</source> <translation>Geschlossene Notizbücher</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="59"/> <source>Open</source> <translation>Öffnen</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="60"/> <source>Close</source> <translation type="unfinished">Schließen</translation> </message> </context> <context> <name>CmdLineQuery</name> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="67"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="69"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="72"/> <source>Notebook</source> <translation type="unfinished">Notizbuch</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="75"/> <source>Tags</source> <translation type="unfinished">Schlagwörter</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="78"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="81"/> <source>Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="84"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="87"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="90"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="93"/> <source>Todo</source> <translation type="unfinished">Checkbox</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="96"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="99"/> <source>Reminder Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="181"/> <location filename="../cmdtools/cmdlinequery.cpp" line="190"/> <source>No</source> <translation type="unfinished">Nein</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="183"/> <location filename="../cmdtools/cmdlinequery.cpp" line="188"/> <source>Yes</source> <translation type="unfinished">Ja</translation> </message> </context> <context> <name>CmdLineTool</name> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="56"/> <source>Unable to attach to shared memory segment. Is the other NixNote running? </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="315"/> <location filename="../cmdtools/cmdlinetool.cpp" line="452"/> <source> has been created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="318"/> <source>No response from NixNote. Please verify that the note was created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="332"/> <source>Untitled Note</source> <translation type="unfinished">unbenannte Notiz</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="535"/> <source> was not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="538"/> <location filename="../cmdtools/cmdlinetool.cpp" line="609"/> <source> has been appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="541"/> <source>No response from NixNote. Please verify that the note was appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="552"/> <source> was not found. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="221"/> <location filename="../cmdtools/cmdlinetool.cpp" line="654"/> <source>No response received from NixNote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="156"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="663"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="674"/> <location filename="../cmdtools/cmdlinetool.cpp" line="690"/> <location filename="../cmdtools/cmdlinetool.cpp" line="722"/> <location filename="../cmdtools/cmdlinetool.cpp" line="742"/> <source>This cannot be done with NixNote running.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="732"/> <location filename="../cmdtools/cmdlinetool.cpp" line="752"/> <source>Notebook not found: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="765"/> <source>OAuth token not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="783"/> <source>Error synchronizing with Evernote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="786"/> <source>Sync completed.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ColorSettings</name> <message> <location filename="../settings/colorsettings.cpp" line="37"/> <source>White</source> <translation type="unfinished">Weiß</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="38"/> <source>Red</source> <translation type="unfinished">Rot</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="39"/> <source>Blue</source> <translation type="unfinished">Blau</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="40"/> <source>Green</source> <translation type="unfinished">Grün</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="41"/> <source>Yellow</source> <translation type="unfinished">Gelb</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="42"/> <source>Black</source> <translation type="unfinished">Schwarz</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="43"/> <source>Purple</source> <translation type="unfinished">Violett</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="44"/> <source>Brown</source> <translation type="unfinished">Braun</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="45"/> <source>Orange</source> <translation type="unfinished">Orange</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="46"/> <source>Grey</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="47"/> <source>Powder Blue</source> <translation type="unfinished">Taubenblau</translation> </message> </context> <context> <name>CommunicationManager</name> <message> <location filename="../communication/communicationmanager.cpp" line="675"/> <source>Linked notebook notestore URL missing.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source>API rate limit exceeded. Please try again in </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <source> minutes.</source> <translation> Minuten.</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source> minute.</source> <translation> Minute.</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1206"/> <source>EDAMSystemException </source> <translation>EDAMSystemException </translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1208"/> <source>EDAMSystemException: Unknown error</source> <translation>EDAMSystemException: Unbekannter Fehler</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1232"/> <source>EDAMNotFoundException: Note not found</source> <translation>EDAMSystemException: Notiz nicht gefunden</translation> </message> </context> <context> <name>DatabaseStatus</name> <message> <location filename="../dialog/databasestatus.cpp" line="35"/> <source>Database Status</source> <translation>Datenbank Status</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="47"/> <source>Total Notes:</source> <translation>Gesamte Notizen:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="49"/> <source>Total Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="51"/> <source>Unindexed Notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="53"/> <source>Unindexed Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="55"/> <source>Thumbnails Needed:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="60"/> <source>OK</source> <translation>OK</translation> </message> </context> <context> <name>DateDelegate</name> <message> <location filename="../gui/datedelegate.cpp" line="42"/> <source>Today</source> <translation>Heute</translation> </message> </context> <context> <name>DateEditor</name> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="38"/> <source>Created:</source> <translation>Erstellt:</translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="42"/> <source>Updated:</source> <translation>Geändert:</translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="46"/> <source>Subject:</source> <translatorcomment>Was ist der Unterschied zu Updated? Der Zeitstempel ist der Gleiche</translatorcomment> <translation>Geändert:</translation> </message> </context> <context> <name>DebugPreferences</name> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="38"/> <source>Disable image search highlighting.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="35"/> <source>Strict note checking.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="37"/> <source>Disable uploads to server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="39"/> <source>Show LID column (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="40"/> <source>Disable Tag Sorting (useful for non-ASCII sort bug).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="41"/> <source>Force UTF8 Encoding.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="59"/> <source>Intercept Unix SIGHUP (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="64"/> <source>Use multipe theads to save note contents (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="68"/> <source>Use libtidy directly (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="72"/> <source>Auto-Save Interval (in seconds).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="79"/> <source>Message Level</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="82"/> <source>Trace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="83"/> <source>Debug</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="84"/> <source>Info</source> <translation>Info</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="85"/> <source>Warnings</source> <translation>Warnungen</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="86"/> <source>Errors</source> <translation>Fehler</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="87"/> <source>Fatal</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EditorButtonBar</name> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="37"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="133"/> <source>Undo</source> <translation>Rückgängig</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="38"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="137"/> <source>Redo</source> <translation>Wiederherstellen</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="39"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="142"/> <source>Cut</source> <translation>Ausschneiden</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="40"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="146"/> <source>Copy</source> <translation>Kopieren</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="41"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="150"/> <source>Paste</source> <translation>Einfügen</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="42"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="153"/> <source>Remove Formatting</source> <translation>Formatierung entfernen</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="43"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="159"/> <source>Bold</source> <translation>Fett</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="44"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="166"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="167"/> <source>Italics</source> <translation>Kursiv</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="45"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="184"/> <source>Superscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="46"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="188"/> <source>Subscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="47"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="174"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="175"/> <source>Underline</source> <translation>Unterstrichen</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="48"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="180"/> <source>Strikethrough</source> <translation>Durchgestrichen</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="49"/> <source>Align Left</source> <translation>Linksbündig</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="50"/> <source>Align Center</source> <translation>Zentriert</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="51"/> <source>Align Full</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="52"/> <source>Align Right</source> <translation>Rechtsbündig</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="53"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="208"/> <source>Horizontal Line</source> <translation>Horizontale Linie</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="54"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="55"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="220"/> <source>Shift Right</source> <translation>Einzug erhöhen</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="56"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="224"/> <source>Shift Left</source> <translation>Einzug vermindern</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="57"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="228"/> <source>Bullet List</source> <translation>Aufzählungszeichen</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="58"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="232"/> <source>Number List</source> <translation>Nummerierung</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="59"/> <source>Font</source> <translation>Schriftart</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="60"/> <source>Font Size</source> <translation>Schriftgrad</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="61"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="248"/> <source>Font Color</source> <translation>Schriftfarbe</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="62"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="257"/> <source>Highlight</source> <translation>Hervorheben</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="63"/> <source>To-do</source> <translation type="unfinished">To-Do</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="192"/> <source>Center Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="196"/> <source>Fully Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="214"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="215"/> <source>Insert Date & Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="262"/> <source>Todo</source> <translation>Checkbox</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="64"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="266"/> <source>Spell Check</source> <translation>Rechtschreibprüfung</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="65"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="270"/> <source>Insert Table</source> <translation>Tabelle einfügen</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="66"/> <source>HTML Entities</source> <translation>HTML Zeichenreferenz</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="204"/> <source>Left Justify</source> <translation>linksbündig</translation> </message> <message> <source>Center</source> <translation type="vanished">Zentrieren</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="200"/> <source>Right Justify</source> <translation>rechtsbündig</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="274"/> <source>Insert HTML Entities</source> <translation>HTML Zeichenreferenz einfügen</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="661"/> <source>Times</source> <translation>Vorlagen</translation> </message> </context> <context> <name>EmailDialog</name> <message> <location filename="../dialog/emaildialog.cpp" line="36"/> <source>Send Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="38"/> <source>Send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="39"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="51"/> <source>To:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="53"/> <source>BCC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="55"/> <source>CC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="57"/> <source>Subject:</source> <translation type="unfinished">Geändert:</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="59"/> <source>Note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="77"/> <source>CC me on this email</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailNote</name> <message> <location filename="../cmdtools/emailnote.cpp" line="261"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="327"/> <source>Connection Error: Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="333"/> <source>Login Error : Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="338"/> <source>Send Error : Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="344"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailPreferences</name> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="17"/> <source>SMTP Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="18"/> <source>Server Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="19"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="20"/> <source>Password</source> <translation type="unfinished">Passwort</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="21"/> <source>Sender Display Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="22"/> <source>Sender Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="23"/> <source>Connection Type</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="31"/> <source>Plain Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="32"/> <source>SSL Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="33"/> <source>TLS Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="35"/> <source>Send Test Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="108"/> <location filename="../dialog/preferences/emailpreferences.cpp" line="113"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="109"/> <source>You must specify a SMTP server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="114"/> <source>You must specify a sender email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="146"/> <source>Test Email From NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="152"/> <source><h1>This is a test email from NixNote.</h1> </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="153"/> <source>If you are reading it then your email preferences are are setup properly.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message sent.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnCryptDialog</name> <message> <location filename="../dialog/encryptdialog.cpp" line="31"/> <source>Encrypt Text</source> <translation>Text verschlüsseln</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="47"/> <source>Password</source> <translation>Passwort</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="49"/> <source>Verify</source> <translation>Bestätigen</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="51"/> <source>Hint</source> <translation>Hinweis</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="53"/> <source>Remember Password</source> <translation>Passwort wiederholen</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="61"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="65"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="113"/> <source>Password must be at least 4 characters</source> <translation>Passwort muss mindestens 4 Zeichen enthalten</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="117"/> <source>Passwords do not match</source> <translation>Passwörter stimmen nicht überein</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="121"/> <source>Hint must be entered</source> <translation>Hinweis eingeben</translation> </message> </context> <context> <name>EnDecryptDialog</name> <message> <location filename="../dialog/endecryptdialog.cpp" line="35"/> <source>Decrypt</source> <translation>Entschlüsseln</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="51"/> <source>Password</source> <translation>Passwort</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="52"/> <source>Hint</source> <translation>Hinweis</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="59"/> <source>Permanently Decrypt</source> <translation>Dauerhaft Entschlüsseln</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="61"/> <source>Remember Password</source> <translation>Passwort wiederholen</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="66"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="70"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> </context> <context> <name>ExportData</name> <message> <location filename="../xml/exportdata.cpp" line="54"/> <source>Cannot open file.</source> <translation>Datei kann nicht geöffnet werden.</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="62"/> <source>Export</source> <translation>Exportieren</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="81"/> <source>Backup</source> <translation>Sichern</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="114"/> <source>Tags</source> <translation>Schlagwörter</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="151"/> <source>Notebooks</source> <translation>Notizbücher</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="360"/> <source>Searches</source> <translation>Suchen</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="405"/> <source>Linked Notebooks</source> <translation>Verlinkte Notizbücher</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="448"/> <source>Shared Notebooks</source> <translation>Geteilte Notizbücher</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="508"/> <source>Notes</source> <translation>Notizen</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="725"/> <source>Backup Canceled</source> <translation>Sicherung abgebrochen</translation> </message> </context> <context> <name>ExternalBrowse</name> <message> <location filename="../gui/externalbrowse.cpp" line="32"/> <source>NixNote</source> <translation>NixNote</translation> </message> <message> <location filename="../gui/externalbrowse.cpp" line="124"/> <source>NixNote - </source> <translation>NixNote - </translation> </message> </context> <context> <name>ExtractNotes</name> <message> <location filename="../cmdtools/extractnotes.cpp" line="41"/> <location filename="../cmdtools/extractnotes.cpp" line="82"/> <source>Output file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="64"/> <source>Deleting notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="65"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FavoritesView</name> <message> <location filename="../gui/favoritesview.cpp" line="68"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="90"/> <source>Remove from shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="565"/> <source>Are you sure you want to remove this shortcut?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="566"/> <source>Verify Delete</source> <translation>Löschen bestätigen</translation> </message> </context> <context> <name>FileWatcher</name> <message> <location filename="../watcher/filewatcher.cpp" line="72"/> <source>Error removing file: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FindReplace</name> <message> <location filename="../gui/findreplace.cpp" line="46"/> <source>Next</source> <translation>Weiter</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="47"/> <source>Previous</source> <translation>vorheriges</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="48"/> <source>Match case</source> <translation>Übereinstimmung</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="57"/> <source>Replace</source> <translation>Ersetzen</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="58"/> <source>Replace all</source> <translation>Alle ersetzen</translation> </message> </context> <context> <name>HtmlEntitiesDialog</name> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="33"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="34"/> <source>Close</source> <translation>Schließen</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="35"/> <source>Edit entries list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="36"/> <source>Save entities list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="71"/> <source>HTML Entities Selection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="206"/> <source>Comma separated list of HTML entities. See http://www.w3schools.com/charsets/ for list.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportData</name> <message> <location filename="../xml/importdata.cpp" line="59"/> <source>Imported Notes</source> <translation>Importierte Notizen</translation> </message> <message> <location filename="../xml/importdata.cpp" line="106"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="107"/> <location filename="../xml/importdata.cpp" line="119"/> <source> notes found.</source> <translation>Notizen gefunden.</translation> </message> <message> <location filename="../xml/importdata.cpp" line="130"/> <source>Importing</source> <translation>Importieren</translation> </message> <message> <location filename="../xml/importdata.cpp" line="131"/> <source>Importing Notes</source> <translation>Notizen importieren</translation> </message> <message> <location filename="../xml/importdata.cpp" line="133"/> <source>Restore</source> <translation>Wiederherstellen</translation> </message> <message> <location filename="../xml/importdata.cpp" line="134"/> <source>Restoring Notes</source> <translation>Notizen wiederherstellen</translation> </message> </context> <context> <name>ImportEnex</name> <message> <location filename="../xml/importenex.cpp" line="40"/> <source>Imported Notes</source> <translation>Importierte Notizen</translation> </message> <message> <location filename="../xml/importenex.cpp" line="83"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="84"/> <location filename="../xml/importenex.cpp" line="94"/> <source> notes found.</source> <translation>Notizen gefunden.</translation> </message> <message> <location filename="../xml/importenex.cpp" line="101"/> <location filename="../xml/importenex.cpp" line="102"/> <source>Importing Notes</source> <translation>Notizen importieren</translation> </message> </context> <context> <name>ImportNotes</name> <message> <location filename="../cmdtools/importnotes.cpp" line="19"/> <source>Input file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/importnotes.cpp" line="24"/> <source>Input file not found.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLatexDialog</name> <message> <location filename="../dialog/insertlatexdialog.cpp" line="32"/> <source>Insert LaTeX Formula</source> <translation>Ein LaTeX Formular einfügen</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="42"/> <source>Formula</source> <translation>Formular</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="47"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="52"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> </context> <context> <name>InsertLinkDialog</name> <message> <location filename="../dialog/insertlinkdialog.cpp" line="34"/> <source>Insert Link</source> <translation>Link einfügen</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="45"/> <source>URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="50"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="54"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> </context> <context> <name>LineEdit</name> <message> <location filename="../gui/lineedit.cpp" line="39"/> <source>Search</source> <translation>Suchen</translation> </message> </context> <context> <name>LocalePreferences</name> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="37"/> <source>Date Format</source> <translation>Datumsformat</translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="40"/> <source>MM/dd/yy - </source> <translation>MM/tt/jj - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="41"/> <source>MM/dd/yyyy - </source> <translation>MM/tt/jjjj - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="42"/> <source>M/dd/yyyy - </source> <translation>M/tt/jjjj - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="43"/> <source>M/d/yyyy - </source> <translation>M/t/jjjj - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="44"/> <source>dd/MM/yy - </source> <translation>tt/MM/jj - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="45"/> <source>d/M/yy - </source> <translation>t/M/yy - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="46"/> <source>dd/MM/yyyy - </source> <translation>tt/MM/jjjj - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="47"/> <source>d/M/yyyy - </source> <translation>t/M/jjjj - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="48"/> <source>yyyy-MM-dd - </source> <translation>jjjj-MM-tt - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="49"/> <source>yy-MM-dd - </source> <translation>jj-MM-tt - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="52"/> <source>Time Format</source> <translation>Zeitformat</translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="55"/> <source>HH:mm:ss - </source> <translation>HH:mm:ss - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="56"/> <source>HH:mm:ss a - </source> <translation>HH:mm:ss a - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="57"/> <source>HH:mm - </source> <translation>HH:mm - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="58"/> <source>HH:mm a - </source> <translation>HH:mm a - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="59"/> <source>hh:mm:ss - </source> <translation>hh:mm:ss - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="60"/> <source>hh:mm:ss a- </source> <translation>hh:mm:ss a- </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="61"/> <source>h:mm:ss a - </source> <translation>h:mm:ss a - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="62"/> <source>hh:mm - </source> <translation>hh:mm - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="63"/> <source>hh:mm a - </source> <translation>hh:mm a - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="64"/> <source>h:mm a - </source> <translation>h:mm a - </translation> </message> </context> <context> <name>LocationDialog</name> <message> <location filename="../dialog/locationdialog.cpp" line="33"/> <source>Location</source> <translation>Standort</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="40"/> <source>Longitude</source> <translation>Längengrad</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="42"/> <source>Latitude</source> <translation>Breitengrad</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="44"/> <source>Altitude</source> <translation>Höhenlage</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="49"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="52"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> </context> <context> <name>LocationEditor</name> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="42"/> <source>Click to set location...</source> <translation>Klicke, um den Speicherort festzulegen...</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="45"/> <source>Edit...</source> <translation>Bearbeiten...</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="46"/> <source>Clear</source> <translation>Löschen</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="47"/> <source>View on map</source> <translation>Auf der Karte zeigen</translation> </message> </context> <context> <name>LogViewer</name> <message> <location filename="../dialog/logviewer.cpp" line="41"/> <source>Close</source> <translation type="unfinished">Schließen</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="43"/> <source>Refresh</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="45"/> <source>Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="54"/> <source>Save Logs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>Save Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>NixNote Log (*.log);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LoginDialog</name> <message> <location filename="../dialog/logindialog.cpp" line="34"/> <source>NixNote Login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="43"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="44"/> <source>Password</source> <translation type="unfinished">Passwort</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="52"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="56"/> <source>Cancel</source> <translation type="unfinished">abbrechen</translation> </message> </context> <context> <name>NAttributeTree</name> <message> <location filename="../gui/nattributetree.cpp" line="48"/> <source>Attributes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="129"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="132"/> <location filename="../gui/nattributetree.cpp" line="213"/> <source>Since</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="136"/> <location filename="../gui/nattributetree.cpp" line="173"/> <location filename="../gui/nattributetree.cpp" line="217"/> <location filename="../gui/nattributetree.cpp" line="254"/> <source>Today</source> <translation type="unfinished">Heute</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="140"/> <location filename="../gui/nattributetree.cpp" line="177"/> <location filename="../gui/nattributetree.cpp" line="221"/> <location filename="../gui/nattributetree.cpp" line="258"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="144"/> <location filename="../gui/nattributetree.cpp" line="181"/> <location filename="../gui/nattributetree.cpp" line="225"/> <location filename="../gui/nattributetree.cpp" line="262"/> <source>This week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="148"/> <location filename="../gui/nattributetree.cpp" line="185"/> <location filename="../gui/nattributetree.cpp" line="229"/> <location filename="../gui/nattributetree.cpp" line="266"/> <source>Last week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="152"/> <location filename="../gui/nattributetree.cpp" line="189"/> <location filename="../gui/nattributetree.cpp" line="233"/> <location filename="../gui/nattributetree.cpp" line="270"/> <source>This Month</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="156"/> <location filename="../gui/nattributetree.cpp" line="193"/> <location filename="../gui/nattributetree.cpp" line="237"/> <location filename="../gui/nattributetree.cpp" line="274"/> <source>Last Month</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="160"/> <location filename="../gui/nattributetree.cpp" line="197"/> <location filename="../gui/nattributetree.cpp" line="241"/> <location filename="../gui/nattributetree.cpp" line="278"/> <source>This Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="164"/> <location filename="../gui/nattributetree.cpp" line="201"/> <location filename="../gui/nattributetree.cpp" line="245"/> <location filename="../gui/nattributetree.cpp" line="282"/> <source>Last Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="169"/> <location filename="../gui/nattributetree.cpp" line="250"/> <source>Before</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="210"/> <source>Last Modified</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="289"/> <source>Contains</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="292"/> <source>Images</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="296"/> <source>Audio</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="300"/> <source>Ink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="304"/> <source>Encrypted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="308"/> <source>To-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="312"/> <source>Unfinished to-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="316"/> <source>Finished to-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="320"/> <source>PDF document</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="324"/> <source>Attachment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="328"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="332"/> <source>Uncompleted Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="336"/> <source>Future Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="341"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="344"/> <source>Emailed to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="348"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="352"/> <source>Web page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="356"/> <source>Mobile</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="360"/> <source>Another application</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NBrowserWindow</name> <message> <location filename="../gui/nbrowserwindow.cpp" line="521"/> <location filename="../gui/nbrowserwindow.cpp" line="3112"/> <source>Today</source> <translation type="unfinished">Heute</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="523"/> <location filename="../gui/nbrowserwindow.cpp" line="3114"/> <source>Tomorrow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="525"/> <location filename="../gui/nbrowserwindow.cpp" line="3116"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to save this note. Either tidy isn't installed or the note is too complex to save.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="1808"/> <source>Insert Link</source> <translation type="unfinished">Link einfügen</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>Unable Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>This is an ink note. Ink notes are not supported since Evernote has not published any specifications on them and I'm too lazy to figure them out by myself.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2240"/> <source>Edit Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2304"/> <source>Unable to create LaTeX image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2305"/> <source>Unable to create LaTeX image. Are you sure mimetex is installed?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2635"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2636"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2645"/> <source>Sending Email. Please be patient.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3159"/> <source>Decryption Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3160"/> <source>Unknown encryption method. Unable to decrypt.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3263"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3264"/> <source>Error Encrypting String. Please verify you have Java installed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Hunspell plugin not found or could not be loaded.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NMainMenuBar</name> <message> <location filename="../gui/nmainmenubar.cpp" line="60"/> <source>&File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="79"/> <source>Print this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="87"/> <source>Backup database to a file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="93"/> <source>Restore from a backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="113"/> <source>Import notes from an export file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="133"/> <source>Switch to </source> <translation type="unfinished">Benutzer wechseln</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="151"/> <source>Open/Close Notebooks</source> <translation type="unfinished">Notizbücher öffnen/schließen </translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="159"/> <source>Close the program</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="175"/> <source>&Edit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="78"/> <source>&Print Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="64"/> <source>Email Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="65"/> <source>Email a copy of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="71"/> <source>Print Preview Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="72"/> <source>Print preview of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="86"/> <source>&Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="92"/> <source>&Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="112"/> <source>&Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="140"/> <source>&Add Another User...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="144"/> <source>&User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="150"/> <source>&Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="158"/> <source>E&xit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="180"/> <source>&Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="184"/> <source>&Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="190"/> <source>&Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="194"/> <source>C&opy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="198"/> <source>&Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="202"/> <source>Pas&te as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="206"/> <source>Remo&ve Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="212"/> <source>Select &All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="218"/> <source>F&ind and Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="220"/> <source>&Search Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="225"/> <source>&Reset Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="232"/> <source>&Find in Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="238"/> <source>Find &Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="243"/> <source>Find &Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="250"/> <source>Replace &Within Note...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="260"/> <source>Preferences</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="268"/> <source>&View</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="273"/> <source>Wide Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="278"/> <source>Narrow Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="285"/> <source>&Show Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="289"/> <source>Note &History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="295"/> <source>&Presentation Mode</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="299"/> <source>Show &Left Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="306"/> <source>Show &Favorites</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="313"/> <source>Show &Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="320"/> <source>Show Ta&gs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="327"/> <source>Show Sa&ved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="341"/> <source>Show T&rash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="348"/> <source>Show N&ote List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="355"/> <source>Show Note &Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="364"/> <source>View Note &Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="368"/> <source>View &Toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="375"/> <source>View Status&bar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="391"/> <source>New &Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="396"/> <source>New &Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="401"/> <source>Dupl&icate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="406"/> <source>&Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="411"/> <source>Reindex Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="418"/> <source>&Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="427"/> <source>&Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="432"/> <source>&UnPin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="446"/> <source>&Synchronize</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="447"/> <source>Synchronize with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="452"/> <source>&Disconnect</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="460"/> <source>Pause &Indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="461"/> <source>Temporarily pause indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="468"/> <source>Disable &Editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="469"/> <source>Temporarily disable note editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="476"/> <source>A&ccount</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="490"/> <source>&Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="514"/> <source>&User's Guide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="537"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="538"/> <source>View currentt shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="547"/> <source>Github Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="548"/> <source>Goto the NixNote2 Github project page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="585"/> <source>About &Qt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="625"/> <source>Theme</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="386"/> <source>&Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="100"/> <source>&Export to NixNote Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="101"/> <source>Export selected notes to a NNEX file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="106"/> <source>&Export Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="107"/> <source>Export selected notes to a PDF file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="441"/> <source>&Tools</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="453"/> <source>Disconnect from Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="477"/> <source>Account information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="484"/> <source>&Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="485"/> <source>Database Status</source> <translation type="unfinished">Datenbank Status</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="491"/> <source>Reindex all notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="499"/> <source>&Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="500"/> <source>Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="509"/> <source>&Help</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="515"/> <source>Open the user manual.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="542"/> <source>Message &Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="554"/> <source>&Evernote Account Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="559"/> <source>Evernote &Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="568"/> <source>Evernote &Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="573"/> <source>Evernote User &Forum</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="580"/> <source>&About</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="634"/> <source>System Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="543"/> <source>View current program messages</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="334"/> <source>Show &Attribute Filter</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="520"/> <source>Theme &Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="521"/> <source>View information about the current theme.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="555"/> <source>Go to your Evernote account page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="560"/> <source>Go to Evernote's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="562"/> <source>Yinxiang Biji Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="563"/> <source>Go to Yinxiang Biji's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="569"/> <source>Go to Evernote Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="574"/> <source>Go to the Evernote user support forum.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="581"/> <location filename="../gui/nmainmenubar.cpp" line="586"/> <source>About</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NNotebookView</name> <message> <location filename="../gui/nnotebookview.cpp" line="69"/> <source>Notebooks</source> <translation type="unfinished">Notizbücher</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="86"/> <source>Create New Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="95"/> <source>Delete</source> <translation type="unfinished">Löschen</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="103"/> <source>Add to stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="116"/> <source>Create New stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="119"/> <source>Remove from stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="123"/> <source>Rename</source> <translation type="unfinished">Umbenennen</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="131"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="641"/> <source>Are you sure you want to delete this notebook?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="642"/> <source>Verify Delete</source> <translation type="unfinished">Löschung bestätigen</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>New Stack (</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NSearchView</name> <message> <location filename="../gui/nsearchview.cpp" line="65"/> <source>Saved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="74"/> <source>Create Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="83"/> <source>Delete</source> <translation type="unfinished">Löschen</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="90"/> <source>Rename</source> <translation type="unfinished">Umbenennen</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="94"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="404"/> <source>Are you sure you want to delete this saved search?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="405"/> <source>Verify Delete</source> <translation type="unfinished">Löschung bestätigen</translation> </message> </context> <context> <name>NTabWidget</name> <message> <location filename="../gui/ntabwidget.cpp" line="254"/> <location filename="../gui/ntabwidget.cpp" line="262"/> <source>Untitled Note</source> <translation>unbenannte Notiz</translation> </message> <message> <location filename="../gui/ntabwidget.cpp" line="267"/> <location filename="../gui/ntabwidget.cpp" line="334"/> <source>NixNote - </source> <translation>NixNote - </translation> </message> </context> <context> <name>NTableView</name> <message> <location filename="../gui/ntableview.cpp" line="203"/> <source>Open Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="209"/> <source>Open Note In New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="215"/> <source>Open Note In New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="222"/> <source>Add Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="227"/> <source>Delete Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="238"/> <source>Restore Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="244"/> <source>Copy Note Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="249"/> <source>Duplicate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="254"/> <source>Reminders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="258"/> <source>Remove</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="263"/> <source>Mark Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="269"/> <source>Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="274"/> <source>Unpin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="279"/> <source>Merge Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="285"/> <source>Create Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="291"/> <source>Title Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="296"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="301"/> <source>White</source> <translation type="unfinished">Weiß</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="304"/> <source>Red</source> <translation type="unfinished">Rot</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="307"/> <source>Blue</source> <translation type="unfinished">Blau</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="310"/> <source>Green</source> <translation type="unfinished">Grün</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="313"/> <source>Yellow</source> <translation type="unfinished">Gelb</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="316"/> <source>Black</source> <translation type="unfinished">Schwarz</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="319"/> <source>Gray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="322"/> <source>Cyan</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="325"/> <source>Magenta</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="663"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="666"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="672"/> <source>selected note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="677"/> <source>Verify Delete</source> <translation type="unfinished">Löschung bestätigen</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="942"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="943"/> <source>This note has never been synchronized. Using this in a note link can cause problems unless you synchronize it first.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1319"/> <source>Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1370"/> <source>One or more notes are unsynchronized. This can cause issues if they are later synchronized. Do you wish to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1654"/> <source>Note LID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1657"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1660"/> <source>Notebook</source> <translation type="unfinished">Notizbuch</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1663"/> <source>Tags</source> <translation type="unfinished">Schlagwörter</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1666"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1668"/> <location filename="../gui/ntableview.cpp" line="1676"/> <location filename="../gui/ntableview.cpp" line="1682"/> <source>No</source> <translation type="unfinished">Nein</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1670"/> <location filename="../gui/ntableview.cpp" line="1674"/> <location filename="../gui/ntableview.cpp" line="1680"/> <source>Yes</source> <translation type="unfinished">Ja</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1672"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1678"/> <source>Has To-Do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1684"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1687"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1690"/> <source>Date Deleted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1698"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1706"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1710"/> <source>Longitude</source> <translation type="unfinished">Längengrad</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1719"/> <source>Latitude</source> <translation type="unfinished">Breitengrad</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1728"/> <source>Altitude</source> <translation type="unfinished">Höhenlage</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1737"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1740"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1743"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1746"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1754"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableViewHeader</name> <message> <location filename="../gui/ntableviewheader.cpp" line="42"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="47"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="52"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="57"/> <source>Notebook</source> <translation type="unfinished">Notizbuch</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="62"/> <source>Tags</source> <translation type="unfinished">Schlagwörter</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="67"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="72"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="77"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="82"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="87"/> <source>Latitude</source> <translation type="unfinished">Breitengrad</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="92"/> <source>Longitude</source> <translation type="unfinished">Längengrad</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="97"/> <source>Altitude</source> <translation type="unfinished">Höhenlage</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="102"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="107"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="112"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="117"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="122"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="128"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="133"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="138"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="143"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTagView</name> <message> <location filename="../gui/ntagview.cpp" line="67"/> <location filename="../gui/ntagview.cpp" line="156"/> <source>Tags from Personal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="91"/> <source>Create New Tag</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="100"/> <source>Delete</source> <translation type="unfinished">Löschen</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="107"/> <source>Rename</source> <translation type="unfinished">Umbenennen</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="110"/> <source>Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="113"/> <source>Hide Unassigned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="119"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="154"/> <source>Tags from </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="351"/> <source>-<Missing Tag>-</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="706"/> <source>Are you sure you want to merge these tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="707"/> <source>Verify Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="753"/> <source>Are you sure you want to delete this tag?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="755"/> <source>Are you sure you want to delete all selected tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="756"/> <source>Verify Delete</source> <translation type="unfinished">Löschung bestätigen</translation> </message> </context> <context> <name>NTitleEditor</name> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="123"/> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="137"/> <source>Untitled note</source> <translation>unbenannte Notiz</translation> </message> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="134"/> <source>untitled note</source> <translation>unbenannte Notiz</translation> </message> </context> <context> <name>NTrashTree</name> <message> <location filename="../gui/ntrashtree.cpp" line="53"/> <source>Trash</source> <translation>Papierkorb</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="65"/> <source>Restore Deleted Notes</source> <translation>gleöschte Notizen wiederherstellen</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="68"/> <source>Empty Trash</source> <translation>Papierkorb leeren</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="238"/> <source>Verify Delete</source> <translation>Löschen bestätigen</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="239"/> <source>Are you sure you want to permanently delete these notes?</source> <translation>Wollen Sie wirklich die Notizen permanent löschen?</translation> </message> </context> <context> <name>NWebView</name> <message> <location filename="../gui/nwebview.cpp" line="56"/> <source>Open</source> <translation>Öffnen</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="61"/> <source>Cut</source> <translation>Ausschneiden</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="66"/> <source>Copy</source> <translation>Kopieren</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="71"/> <source>Paste</source> <translation>Einfügen</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="76"/> <source>Paste as Unformatted Text</source> <translation>Als unfomtierten Text einfügen</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="81"/> <source>Remove Formatting</source> <translation>Formatierung entfernen</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="86"/> <source>Copy Note URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="93"/> <source>Background Color</source> <translation>Hintergrundfarbe</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="113"/> <source>To-do</source> <translation>To-Do</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="120"/> <source>HTML Entities</source> <translation type="unfinished">HTML Zeichenreferenz</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="127"/> <source>Encrypted Selected Text</source> <translation>markierten Text verschlüsseln</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="132"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="137"/> <source>Insert Hyperlink</source> <translation>Hyperlink einfügen</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="142"/> <source>Quick Link</source> <translatorcomment>Was ist damit gemeint? Welche Verwendugn liegt vor?</translatorcomment> <translation type="unfinished">Quick Link</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="147"/> <source>Remove Hyperlink</source> <translation>Link entfernen</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="152"/> <source>Attach File</source> <translation>Datei anhängen</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="158"/> <source>Insert LaTeX Formula</source> <translation>LaTeX Formular einfügen</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="164"/> <source>Table</source> <translation>Tabelle</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="167"/> <source>Insert Table</source> <translation>Tabelle einfügen</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="173"/> <source>Insert Row</source> <translation>Zeile einfügen</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="178"/> <source>Insert Column</source> <translation>Spalte einfügen</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="185"/> <source>Delete Row</source> <translation>Zeile löschen</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="189"/> <source>Delete Column</source> <translation>Spalte löschen</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="196"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="203"/> <source>Image</source> <translation>Bild</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="206"/> <source>Save Image</source> <translation>Bild speichern</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="214"/> <source>Rotate Left</source> <translation>nach links rotieren</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="218"/> <source>Rotate Right</source> <translation>nach rechts rotieren</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="224"/> <source>Save Attachment</source> <translation>Anhang speichern</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="502"/> <location filename="../gui/nwebview.cpp" line="532"/> <source>Save File</source> <translation>Datei speichern</translation> </message> </context> <context> <name>NixNote</name> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy Not Found</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy is not found on this system. Until tidy is installed you cannot save any notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="291"/> <source>ToolBar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="303"/> <source>Back</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="304"/> <source>Next</source> <translation type="unfinished">Weiter</translation> </message> <message> <location filename="../nixnote.cpp" line="314"/> <source>All Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="316"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="319"/> <source>Print</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="329"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="332"/> <source>New Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="344"/> <source>Delete</source> <translation type="unfinished">Löschen</translation> </message> <message> <location filename="../nixnote.cpp" line="347"/> <source>Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="349"/> <source>Usage</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="531"/> <location filename="../nixnote.cpp" line="3183"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="547"/> <source>Show/Hide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="559"/> <source>Close</source> <translation type="unfinished">Schließen</translation> </message> <message> <location filename="../nixnote.cpp" line="1799"/> <source>Confirm Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1815"/> <source>Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1818"/> <source>Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1730"/> <location filename="../nixnote.cpp" line="1816"/> <source>NixNote Export (*.nnex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="320"/> <source>Print the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="322"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="323"/> <source>Email the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="528"/> <source>Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="538"/> <source>Shortcut Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="540"/> <source>Pinned Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="542"/> <source>Recently Updated Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1437"/> <location filename="../nixnote.cpp" line="2350"/> <source>Log in to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1439"/> <location filename="../nixnote.cpp" line="2352"/> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>NixNote</source> <translation type="unfinished">NixNote</translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <location filename="../nixnote.cpp" line="1761"/> <location filename="../nixnote.cpp" line="1857"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <source>No notes selected.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1722"/> <source>Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1724"/> <source>Export Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1749"/> <source>Performing backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1751"/> <source>Performing export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1768"/> <source>Database backup complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1770"/> <source>Note extract complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1796"/> <source>This is used to restore a database from backups. It is HIGHLY recommended that this only be used to populate an empty database. Restoring into a database that already has data can cause problems. Are you sure you want to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1819"/> <source>NixNote Export (*.nnex);;Evernote Export (*.enex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1846"/> <source>Restoring database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1848"/> <source>Importing Notes</source> <translation type="unfinished">Notizen importieren</translation> </message> <message> <location filename="../nixnote.cpp" line="1880"/> <source>Database has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1882"/> <source>Notes have been imported.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <location filename="../nixnote.cpp" line="1918"/> <source>Sync Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <source>Sync completed with errors.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1918"/> <source>Sync error. See message log for details</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync completed successfully.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2002"/> <source>Untitled note</source> <translation type="unfinished">unbenannte Notiz</translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>This note has never been synchronized with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3872"/> <source>Error loading Webcam plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3887"/> <source>Error loading Hunspell plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3913"/> <location filename="../nixnote.cpp" line="3965"/> <source>PDF Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>Export complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3937"/> <source>Exporting Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3938"/> <source>Exporting notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2391"/> <location filename="../nixnote.cpp" line="2398"/> <source>Error retrieving note.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2392"/> <location filename="../nixnote.cpp" line="2399"/> <source>Error retrieving note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <location filename="../nixnote.cpp" line="2431"/> <source>Note Restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <source>A new copy has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2431"/> <source>Note successfully restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2434"/> <source>Note restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2650"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3054"/> <source>Switch to </source> <translation type="unfinished">Benutzer wechseln</translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex the entire database?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3247"/> <source>Notes will be reindexed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Webcam plugin not found or could not be loaded</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3281"/> <source>Unable to find webcam or capture image.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3282"/> <source>Webcam Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3432"/> <source>Note Reindexed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3444"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3447"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3451"/> <source>this note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3455"/> <source>Verify Delete</source> <translation type="unfinished">Löschung bestätigen</translation> </message> <message> <location filename="../nixnote.cpp" line="3816"/> <source>Press ESC to exit.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteFormatter</name> <message> <location filename="../html/noteformatter.cpp" line="657"/> <source>File</source> <translation>Datei</translation> </message> <message> <location filename="../html/noteformatter.cpp" line="691"/> <source>Bytes</source> <translation>Bytes</translation> </message> <message> <location filename="../html/noteformatter.cpp" line="695"/> <source>KB</source> <translation>KB</translation> </message> </context> <context> <name>NoteHistorySelect</name> <message> <location filename="../dialog/notehistoryselect.cpp" line="32"/> <source>Note History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished">abbrechen</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="34"/> <source>Import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="39"/> <source>Replace current note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="80"/> <source>Current copy on Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="93"/> <source>Today</source> <translation type="unfinished">Heute</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="95"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteProperties</name> <message> <location filename="../dialog/noteproperties.cpp" line="37"/> <source>Note Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/noteproperties.cpp" line="38"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NotebookProperties</name> <message> <location filename="../dialog/notebookproperties.cpp" line="38"/> <source>Notebook</source> <translation type="unfinished">Notizbuch</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="42"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="46"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="52"/> <source>Name</source> <translation type="unfinished">Name</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="60"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="62"/> <source>Cancel</source> <translation type="unfinished">abbrechen</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="135"/> <source>Add Notebook</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OAuthWindow</name> <message> <location filename="../oauth/oauthwindow.cpp" line="70"/> <source>Please Grant NixNote Access</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="81"/> <source>SSL Support not found. Aborting connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="132"/> <source>Error receiving temporary credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="176"/> <source>Error receiving permanent credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="219"/> <source>Error receiving authorization</source> <translation type="unfinished"></translation> </message> </context> <context> <name>PopplerViewer</name> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source>Page </source> <translation>Seite</translation> </message> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source> of </source> <translation>von</translation> </message> </context> <context> <name>PreferencesDialog</name> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="30"/> <source>User Settings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="49"/> <source>Cancel</source> <translation type="unfinished">abbrechen</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="92"/> <source>Appearance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="98"/> <source>Locale</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="104"/> <source>Search</source> <translation type="unfinished">Suchen</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="110"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="116"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="121"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="127"/> <source>Advanced</source> <translation type="unfinished"></translation> </message> </context> <context> <name>QApplication</name> <message> <location filename="../dialog/screencapture.cpp" line="108"/> <source>Use your mouse to draw a rectangle to screenshot or exit pressing any key or using the right or middle mouse buttons.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/screencapture.cpp" line="145"/> <source>%1 x %2 pixels </source> <translation type="unfinished"></translation> </message> </context> <context> <name>QObject</name> <message> <location filename="../gui/ntableview.cpp" line="175"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="176"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="177"/> <source>Notebook</source> <translation type="unfinished">Notizbuch</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="178"/> <source>Tags</source> <translation type="unfinished">Schlagwörter</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="179"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="180"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="181"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="182"/> <source>Deletion Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="183"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="184"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="185"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="186"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="187"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="188"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="189"/> <source>Longitude</source> <translation type="unfinished">Längengrad</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="190"/> <source>Latitude</source> <translation type="unfinished">Breitengrad</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="191"/> <source>Altitude</source> <translation type="unfinished">Höhenlage</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="192"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="193"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="194"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="195"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="196"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="197"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderButton</name> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="35"/> <source>Mark as Done</source> <translation>Als erledigt markieren</translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="36"/> <source>Change Date</source> <translation>Datum ändern</translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="37"/> <source>Clear Reminder</source> <translation>Erinnerung löschen</translation> </message> </context> <context> <name>ReminderManager</name> <message> <location filename="../reminders/remindermanager.cpp" line="85"/> <source>Reminders Due</source> <translation>Fällige Erinnerungen</translation> </message> </context> <context> <name>ReminderSetDialog</name> <message> <location filename="../dialog/remindersetdialog.cpp" line="47"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/remindersetdialog.cpp" line="48"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> </context> <context> <name>RemoteQuery</name> <message> <location filename="../filters/remotequery.cpp" line="113"/> <location filename="../filters/remotequery.cpp" line="130"/> <source>Today</source> <translation>Heute</translation> </message> </context> <context> <name>SavedSearchProperties</name> <message> <location filename="../dialog/savedsearchproperties.cpp" line="35"/> <source>Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished">Name</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="43"/> <source>Query</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="51"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="53"/> <source>Cancel</source> <translation type="unfinished">abbrechen</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="106"/> <source>Add Saved Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SearchPreferences</name> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="36"/> <source>Index Attachments</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="44"/> <source>Clear Notebook Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="48"/> <source>Clear Tag Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="52"/> <source>Clear Search Text on Notebook Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="56"/> <source>Show Any Matching Tags When Selecting Multiple Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="60"/> <source>Index PDFs locally</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="64"/> <source>Background Indexing (requires restart & may cause issues on some systems)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="68"/> <source>Experimental: Force search to lower case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="73"/> <source>Minimum Image Recognition Weight</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ShortcutDialog</name> <message> <location filename="../dialog/shortcutdialog.cpp" line="41"/> <source>Defined Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/shortcutdialog.cpp" line="42"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SpellCheckDialog</name> <message> <location filename="../dialog/spellcheckdialog.cpp" line="35"/> <source>Spell Check</source> <translation type="unfinished">Rechtschreibprüfung</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="50"/> <source>Suggestion</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="56"/> <source>Replace</source> <translation type="unfinished">Ersetzen</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="57"/> <source>Ignore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="58"/> <source>Ignore All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="59"/> <source>Add To Dictionary</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="66"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> </context> <context> <name>SpellChecker</name> <message> <source>Unable to find dictionaries. Is Huntspell installed?</source> <translation type="vanished">Keine Wörterbücher gefunden. Ist Huntspell installiert? </translation> </message> </context> <context> <name>SyncPreferences</name> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="34"/> <source>Sync automatically</source> <translation>Automatisch Synchronisieren</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="38"/> <source>Every 15 minutes</source> <translation>jede 15 Minuten</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="39"/> <source>Every 30 minutes</source> <translation>jede 30 Minuten</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="40"/> <source>Every hour</source> <translation>jede Stunde</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="41"/> <source>Every day</source> <translation>täglich</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="43"/> <source>Sync on startup</source> <translation>Synchronisiere beim Starten</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="45"/> <source>Sync on shutdown</source> <translation>Synchronisiere beim Beenden</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="47"/> <source>Enable sync notifications</source> <translation>Synchronisationsbenachrichtigungen einschalten</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="48"/> <source>Show successful syncs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="49"/> <source>Restart sync on API limit (experimental)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="51"/> <source>Enable Proxy*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="52"/> <source>Enable Socks5</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="53"/> <source>Proxy Hostname</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="54"/> <source>Proxy Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="55"/> <source>Proxy Username</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="56"/> <source>Proxy Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="57"/> <source>*Note: Restart required</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="73"/> <source>Popup message on sync errors.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncRunner</name> <message> <location filename="../threads/syncrunner.cpp" line="134"/> <source>Beginning Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="142"/> <source>Downloading changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="192"/> <source>Sync Complete Successfully</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <location filename="../threads/syncrunner.cpp" line="267"/> <source>Download </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <source>% complete for notebooks, tags, & searches.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="247"/> <source>Download complete for notebooks, tags, & searches. Downloading notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="267"/> <source>% complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="280"/> <source>Download complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>Downloading </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <source>% complete for tags in shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="721"/> <source>Downloading notes for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="743"/> <source>% complete for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1149"/> <source>Error uploading note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1151"/> <source>Error uploading note with a missing title!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="721"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TableDialog</name> <message> <location filename="../dialog/tabledialog.cpp" line="30"/> <source>Insert Table</source> <translation type="unfinished">Tabelle einfügen</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="34"/> <source>Percent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="35"/> <source>Pixels</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="51"/> <source>Rows</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="53"/> <source>Columns</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="55"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="57"/> <source>Unit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="64"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="67"/> <source>Cancel</source> <translation type="unfinished">abbrechen</translation> </message> </context> <context> <name>TablePropertiesDialog</name> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="72"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="105"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="86"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="87"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="106"/> <source>Cell Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="214"/> <source>Row 1 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="216"/> <source>Row 1 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="218"/> <source>Row 1 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="220"/> <source>Row 2 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="222"/> <source>Row 2 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="224"/> <source>Row 2 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="226"/> <source>Row 3 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="228"/> <source>Row 3 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="230"/> <source>Row 3 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="456"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="464"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="480"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="494"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="511"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="526"/> <source>Percent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="465"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="479"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="493"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="510"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="525"/> <source>Pixels</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="476"/> <source>Top Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="490"/> <source>Bottom Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="507"/> <source>Left Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="522"/> <source>Right Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="560"/> <source>Border Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="561"/> <source>Font Color</source> <translation type="unfinished">Schriftfarbe</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="562"/> <source>Background Color</source> <translation type="unfinished">Hintergrundfarbe</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="576"/> <source>Border Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="587"/> <source>Padding</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="597"/> <source>Top Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="606"/> <source>Bottom Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="615"/> <source>Left Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="624"/> <source>Right Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="636"/> <source>Horizontal Alignment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="641"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="642"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="643"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="644"/> <source>Center</source> <translation type="unfinished">Zentrieren</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="676"/> <source>Solid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="677"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="678"/> <source>Dotted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="679"/> <source>Dashed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="680"/> <source>Double</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="681"/> <source>Ridge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="682"/> <source>Inset</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="683"/> <source>Outset</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagEditorNewTag</name> <message> <location filename="../gui/browserWidgets/tageditornewtag.cpp" line="55"/> <source>Click to add tag...</source> <translation>Klicke, um Schlagwörter hinzuzufügen...</translation> </message> </context> <context> <name>TagProperties</name> <message> <location filename="../dialog/tagproperties.cpp" line="36"/> <source>Tag</source> <translation>Schlagwort</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="42"/> <source>Name</source> <translation>Name</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="48"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="50"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="102"/> <source>Add Tag</source> <translation>Schlagwort hinzufügen</translation> </message> </context> <context> <name>ThumbnailPreferences</name> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="14"/> <source>Disable thumbnail generation</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="15"/> <source>Images to generate per interval</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="16"/> <source>Minimum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="17"/> <source>Maximum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>UrlEditor</name> <message> <location filename="../gui/browserWidgets/urleditor.cpp" line="45"/> <source>Click to set source URL...</source> <translation>Klicke, um Quell-Url hinzuzufügen...</translation> </message> </context> <context> <name>WatchFolderAdd</name> <message> <location filename="../dialog/watchfolderadd.cpp" line="47"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="51"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="55"/> <source>Directory</source> <translation>Verzeichnis</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="63"/> <source>Keep</source> <translation>Behalten</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="64"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="90"/> <source>Notebook</source> <translation>Notizbuch</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="92"/> <source>After import</source> <translation>Nach dem Import</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="94"/> <source>Include subdirectories</source> <translation>Unterverzeichnisse beinhalten</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="101"/> <source>Add Import Folder</source> <translation>Füge Importverzeichnis hinzu</translation> </message> </context> <context> <name>WatchFolderDialog</name> <message> <location filename="../dialog/watchfolderdialog.cpp" line="38"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="42"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="50"/> <source>Auto Import Folders</source> <translation>Automatisch Ordner importieren</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="62"/> <source>Add</source> <translation>Hinzufügen</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="66"/> <source>Edit</source> <translation>Bearbeiten</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="71"/> <location filename="../dialog/watchfolderdialog.cpp" line="162"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="112"/> <source>Directory</source> <translation>Verzeichnis</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="113"/> <source>Target Notebook</source> <translation>Zielnotizbuch</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="114"/> <location filename="../dialog/watchfolderdialog.cpp" line="159"/> <source>Keep</source> <translation>Behalten</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="115"/> <source>Include Subdirectories</source> <translation>Unterverzeichnisse beinhalten</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="169"/> <source>Yes</source> <translation>Ja</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="172"/> <source>No</source> <translation>Nein</translation> </message> </context> </TS> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/translations/nixnote2_es.ts����������������������������������������������������������0000664�0000000�0000000�00000615170�13156041044�0020617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="es_ES"> <context> <name>AboutDialog</name> <message> <location filename="../dialog/aboutdialog.cpp" line="36"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/aboutdialog.cpp" line="53"/> <source>Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountDialog</name> <message> <location filename="../dialog/accountdialog.cpp" line="37"/> <source>Account Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="40"/> <source>Normal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="46"/> <source>Premium</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="48"/> <source>VIP</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="50"/> <source>Manager</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="52"/> <source>Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="54"/> <source>Admin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="75"/> <source> Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="79"/> <source> KB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="83"/> <source> MB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="90"/> <source>Account:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="93"/> <source>User Name:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="95"/> <source>Account Type:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="97"/> <source>Limit:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="99"/> <source>Uploaded In This Period:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="103"/> <source>Less than 1MB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="104"/> <source>Current Cycle Ends:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="112"/> <source>OK</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountMaintenanceDialog</name> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="34"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="35"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="36"/> <source>Add</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="37"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="38"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="64"/> <source>User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="104"/> <source>Are you sure you want to delete this account?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="105"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="117"/> <source>You cannot delete the active account.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="170"/> <location filename="../dialog/accountmaintenancedialog.cpp" line="194"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> </context> <context> <name>AddNote</name> <message> <location filename="../cmdtools/addnote.cpp" line="33"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AddUserAccountDialog</name> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="38"/> <source>Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="39"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="41"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="46"/> <source>Account Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="69"/> <source>Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="70"/> <source>Yinxiang Biji</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="71"/> <source>Evernote Sandbox</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AppearancePreferences</name> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="39"/> <source>Show tray icon</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="40"/> <source>Display PDFs inline**</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="41"/> <source>Show splash screen on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="42"/> <source>Start automatically at login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="43"/> <source>Confirm Deletes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="44"/> <source>Show missed reminders on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="45"/> <source>Always Start minimized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="46"/> <source>Show notebook and tag totals</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="47"/> <source>Auto-Hide editor toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="49"/> <source>Disable note editing on statup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="50"/> <source>Focus on Note Title on New Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="51"/> <source>Limit Editor to Web Fonts*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="53"/> <source>Show note list grid*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="54"/> <source>Alternate note list colors*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="55"/> <source>Set author on new notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="57"/> <source>Preview fonts in editor dialag*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="61"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="68"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="75"/> <source>Do Nothing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="62"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="69"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="76"/> <source>Show/Hide NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="63"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="70"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="77"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="64"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="71"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="78"/> <source>New Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="65"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="72"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="79"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="82"/> <source>Open New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="83"/> <source>Open New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="98"/> <source>Qt Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="99"/> <source>notify-send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="106"/> <source>Startup Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="108"/> <source>Restore Selection Criteria</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="109"/> <source>Select Default Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="110"/> <source>View All Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="120"/> <source>Minimize to tray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="121"/> <source>Close to tray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="143"/> <source>Notification Service</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="146"/> <source>Middle Click Open Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="149"/> <source>Tray Icon Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="152"/> <source>Tray Icon Middle Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="155"/> <source>Tray Icon Double Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="158"/> <source>Default GUI Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="161"/> <source>Default GUI Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="164"/> <source>Default Editor Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="167"/> <source>Default Editor Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="171"/> <source>* May require restart on some systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="172"/> <source>** Can crash on Gnome systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="102"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="405"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="423"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="442"/> <source>System Default</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AttachmentIconBuilder</name> <message> <location filename="../html/attachmenticonbuilder.cpp" line="74"/> <source>Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/attachmenticonbuilder.cpp" line="78"/> <source>KB</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AuthorEditor</name> <message> <location filename="../gui/browserWidgets/authoreditor.cpp" line="37"/> <source>Click to set author</source> <translation type="unfinished"></translation> </message> </context> <context> <name>BatchImport</name> <message> <location filename="../xml/batchimport.cpp" line="112"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CloseNotebookDialog</name> <message> <location filename="../dialog/closenotebookdialog.cpp" line="37"/> <source>Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="42"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="43"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="56"/> <source>Open Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="57"/> <source>Closed Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="59"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="60"/> <source>Close</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CmdLineQuery</name> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="67"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="69"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="72"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="75"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="78"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="81"/> <source>Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="84"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="87"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="90"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="93"/> <source>Todo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="96"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="99"/> <source>Reminder Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="181"/> <location filename="../cmdtools/cmdlinequery.cpp" line="190"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="183"/> <location filename="../cmdtools/cmdlinequery.cpp" line="188"/> <source>Yes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CmdLineTool</name> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="56"/> <source>Unable to attach to shared memory segment. Is the other NixNote running? </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="315"/> <location filename="../cmdtools/cmdlinetool.cpp" line="452"/> <source> has been created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="318"/> <source>No response from NixNote. Please verify that the note was created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="332"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="535"/> <source> was not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="538"/> <location filename="../cmdtools/cmdlinetool.cpp" line="609"/> <source> has been appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="541"/> <source>No response from NixNote. Please verify that the note was appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="552"/> <source> was not found. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="221"/> <location filename="../cmdtools/cmdlinetool.cpp" line="654"/> <source>No response received from NixNote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="156"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="663"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="674"/> <location filename="../cmdtools/cmdlinetool.cpp" line="690"/> <location filename="../cmdtools/cmdlinetool.cpp" line="722"/> <location filename="../cmdtools/cmdlinetool.cpp" line="742"/> <source>This cannot be done with NixNote running.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="732"/> <location filename="../cmdtools/cmdlinetool.cpp" line="752"/> <source>Notebook not found: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="765"/> <source>OAuth token not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="783"/> <source>Error synchronizing with Evernote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="786"/> <source>Sync completed.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ColorSettings</name> <message> <location filename="../settings/colorsettings.cpp" line="37"/> <source>White</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="38"/> <source>Red</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="39"/> <source>Blue</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="40"/> <source>Green</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="41"/> <source>Yellow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="42"/> <source>Black</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="43"/> <source>Purple</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="44"/> <source>Brown</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="45"/> <source>Orange</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="46"/> <source>Grey</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="47"/> <source>Powder Blue</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CommunicationManager</name> <message> <location filename="../communication/communicationmanager.cpp" line="675"/> <source>Linked notebook notestore URL missing.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source>API rate limit exceeded. Please try again in </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <source> minutes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source> minute.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1206"/> <source>EDAMSystemException </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1208"/> <source>EDAMSystemException: Unknown error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1232"/> <source>EDAMNotFoundException: Note not found</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DatabaseStatus</name> <message> <location filename="../dialog/databasestatus.cpp" line="35"/> <source>Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="47"/> <source>Total Notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="49"/> <source>Total Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="51"/> <source>Unindexed Notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="53"/> <source>Unindexed Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="55"/> <source>Thumbnails Needed:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="60"/> <source>OK</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DateDelegate</name> <message> <location filename="../gui/datedelegate.cpp" line="42"/> <source>Today</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DateEditor</name> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="38"/> <source>Created:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="42"/> <source>Updated:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="46"/> <source>Subject:</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DebugPreferences</name> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="38"/> <source>Disable image search highlighting.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="35"/> <source>Strict note checking.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="37"/> <source>Disable uploads to server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="39"/> <source>Show LID column (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="40"/> <source>Disable Tag Sorting (useful for non-ASCII sort bug).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="41"/> <source>Force UTF8 Encoding.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="59"/> <source>Intercept Unix SIGHUP (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="64"/> <source>Use multipe theads to save note contents (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="68"/> <source>Use libtidy directly (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="72"/> <source>Auto-Save Interval (in seconds).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="79"/> <source>Message Level</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="82"/> <source>Trace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="83"/> <source>Debug</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="84"/> <source>Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="85"/> <source>Warnings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="86"/> <source>Errors</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="87"/> <source>Fatal</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EditorButtonBar</name> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="37"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="133"/> <source>Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="38"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="137"/> <source>Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="39"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="142"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="40"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="41"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="150"/> <source>Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="42"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="153"/> <source>Remove Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="43"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="159"/> <source>Bold</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="44"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="166"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="167"/> <source>Italics</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="45"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="184"/> <source>Superscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="46"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="188"/> <source>Subscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="47"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="174"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="175"/> <source>Underline</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="48"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="180"/> <source>Strikethrough</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="49"/> <source>Align Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="50"/> <source>Align Center</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="51"/> <source>Align Full</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="52"/> <source>Align Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="53"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="208"/> <source>Horizontal Line</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="54"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="55"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="220"/> <source>Shift Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="56"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="224"/> <source>Shift Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="57"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="228"/> <source>Bullet List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="58"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="232"/> <source>Number List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="59"/> <source>Font</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="60"/> <source>Font Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="61"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="248"/> <source>Font Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="62"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="257"/> <source>Highlight</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="63"/> <source>To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="192"/> <source>Center Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="196"/> <source>Fully Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="214"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="215"/> <source>Insert Date & Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="262"/> <source>Todo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="64"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="266"/> <source>Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="65"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="270"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="66"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="204"/> <source>Left Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="200"/> <source>Right Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="274"/> <source>Insert HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="661"/> <source>Times</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailDialog</name> <message> <location filename="../dialog/emaildialog.cpp" line="36"/> <source>Send Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="38"/> <source>Send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="39"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="51"/> <source>To:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="53"/> <source>BCC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="55"/> <source>CC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="57"/> <source>Subject:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="59"/> <source>Note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="77"/> <source>CC me on this email</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailNote</name> <message> <location filename="../cmdtools/emailnote.cpp" line="261"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="327"/> <source>Connection Error: Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="333"/> <source>Login Error : Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="338"/> <source>Send Error : Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="344"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailPreferences</name> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="17"/> <source>SMTP Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="18"/> <source>Server Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="19"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="20"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="21"/> <source>Sender Display Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="22"/> <source>Sender Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="23"/> <source>Connection Type</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="31"/> <source>Plain Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="32"/> <source>SSL Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="33"/> <source>TLS Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="35"/> <source>Send Test Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="108"/> <location filename="../dialog/preferences/emailpreferences.cpp" line="113"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="109"/> <source>You must specify a SMTP server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="114"/> <source>You must specify a sender email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="146"/> <source>Test Email From NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="152"/> <source><h1>This is a test email from NixNote.</h1> </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="153"/> <source>If you are reading it then your email preferences are are setup properly.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message sent.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnCryptDialog</name> <message> <location filename="../dialog/encryptdialog.cpp" line="31"/> <source>Encrypt Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="47"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="49"/> <source>Verify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="51"/> <source>Hint</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="53"/> <source>Remember Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="61"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="65"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="113"/> <source>Password must be at least 4 characters</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="117"/> <source>Passwords do not match</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="121"/> <source>Hint must be entered</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnDecryptDialog</name> <message> <location filename="../dialog/endecryptdialog.cpp" line="35"/> <source>Decrypt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="51"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="52"/> <source>Hint</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="59"/> <source>Permanently Decrypt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="61"/> <source>Remember Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="66"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="70"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExportData</name> <message> <location filename="../xml/exportdata.cpp" line="54"/> <source>Cannot open file.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="62"/> <source>Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="81"/> <source>Backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="114"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="151"/> <source>Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="360"/> <source>Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="405"/> <source>Linked Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="448"/> <source>Shared Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="508"/> <source>Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="725"/> <source>Backup Canceled</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExternalBrowse</name> <message> <location filename="../gui/externalbrowse.cpp" line="32"/> <source>NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/externalbrowse.cpp" line="124"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExtractNotes</name> <message> <location filename="../cmdtools/extractnotes.cpp" line="41"/> <location filename="../cmdtools/extractnotes.cpp" line="82"/> <source>Output file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="64"/> <source>Deleting notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="65"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FavoritesView</name> <message> <location filename="../gui/favoritesview.cpp" line="68"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="90"/> <source>Remove from shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="565"/> <source>Are you sure you want to remove this shortcut?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="566"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>FileWatcher</name> <message> <location filename="../watcher/filewatcher.cpp" line="72"/> <source>Error removing file: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FindReplace</name> <message> <location filename="../gui/findreplace.cpp" line="46"/> <source>Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="47"/> <source>Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="48"/> <source>Match case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="57"/> <source>Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="58"/> <source>Replace all</source> <translation type="unfinished"></translation> </message> </context> <context> <name>HtmlEntitiesDialog</name> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="34"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="35"/> <source>Edit entries list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="36"/> <source>Save entities list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="71"/> <source>HTML Entities Selection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="206"/> <source>Comma separated list of HTML entities. See http://www.w3schools.com/charsets/ for list.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportData</name> <message> <location filename="../xml/importdata.cpp" line="59"/> <source>Imported Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="106"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="107"/> <location filename="../xml/importdata.cpp" line="119"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="130"/> <source>Importing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="131"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="133"/> <source>Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="134"/> <source>Restoring Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportEnex</name> <message> <location filename="../xml/importenex.cpp" line="40"/> <source>Imported Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="83"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="84"/> <location filename="../xml/importenex.cpp" line="94"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="101"/> <location filename="../xml/importenex.cpp" line="102"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportNotes</name> <message> <location filename="../cmdtools/importnotes.cpp" line="19"/> <source>Input file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/importnotes.cpp" line="24"/> <source>Input file not found.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLatexDialog</name> <message> <location filename="../dialog/insertlatexdialog.cpp" line="32"/> <source>Insert LaTeX Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="42"/> <source>Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="52"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLinkDialog</name> <message> <location filename="../dialog/insertlinkdialog.cpp" line="34"/> <source>Insert Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="45"/> <source>URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="54"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LineEdit</name> <message> <location filename="../gui/lineedit.cpp" line="39"/> <source>Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocalePreferences</name> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="37"/> <source>Date Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="40"/> <source>MM/dd/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="41"/> <source>MM/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="42"/> <source>M/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="43"/> <source>M/d/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="44"/> <source>dd/MM/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="45"/> <source>d/M/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="46"/> <source>dd/MM/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="47"/> <source>d/M/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="48"/> <source>yyyy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="49"/> <source>yy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="52"/> <source>Time Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="55"/> <source>HH:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="56"/> <source>HH:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="57"/> <source>HH:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="58"/> <source>HH:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="59"/> <source>hh:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="60"/> <source>hh:mm:ss a- </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="61"/> <source>h:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="62"/> <source>hh:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="63"/> <source>hh:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="64"/> <source>h:mm a - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationDialog</name> <message> <location filename="../dialog/locationdialog.cpp" line="33"/> <source>Location</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="40"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="42"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="44"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="49"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="52"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationEditor</name> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="42"/> <source>Click to set location...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="45"/> <source>Edit...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="46"/> <source>Clear</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="47"/> <source>View on map</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LogViewer</name> <message> <location filename="../dialog/logviewer.cpp" line="41"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="43"/> <source>Refresh</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="45"/> <source>Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="54"/> <source>Save Logs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>Save Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>NixNote Log (*.log);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LoginDialog</name> <message> <location filename="../dialog/logindialog.cpp" line="34"/> <source>NixNote Login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="43"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="44"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="52"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="56"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NAttributeTree</name> <message> <location filename="../gui/nattributetree.cpp" line="48"/> <source>Attributes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="129"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="132"/> <location filename="../gui/nattributetree.cpp" line="213"/> <source>Since</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="136"/> <location filename="../gui/nattributetree.cpp" line="173"/> <location filename="../gui/nattributetree.cpp" line="217"/> <location filename="../gui/nattributetree.cpp" line="254"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="140"/> <location filename="../gui/nattributetree.cpp" line="177"/> <location filename="../gui/nattributetree.cpp" line="221"/> <location filename="../gui/nattributetree.cpp" line="258"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="144"/> <location filename="../gui/nattributetree.cpp" line="181"/> <location filename="../gui/nattributetree.cpp" line="225"/> <location filename="../gui/nattributetree.cpp" line="262"/> <source>This week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="148"/> <location filename="../gui/nattributetree.cpp" line="185"/> <location filename="../gui/nattributetree.cpp" line="229"/> <location filename="../gui/nattributetree.cpp" line="266"/> <source>Last week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="152"/> <location filename="../gui/nattributetree.cpp" line="189"/> <location filename="../gui/nattributetree.cpp" line="233"/> <location filename="../gui/nattributetree.cpp" line="270"/> <source>This Month</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="156"/> <location filename="../gui/nattributetree.cpp" line="193"/> <location filename="../gui/nattributetree.cpp" line="237"/> <location filename="../gui/nattributetree.cpp" line="274"/> <source>Last Month</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="160"/> <location filename="../gui/nattributetree.cpp" line="197"/> <location filename="../gui/nattributetree.cpp" line="241"/> <location filename="../gui/nattributetree.cpp" line="278"/> <source>This Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="164"/> <location filename="../gui/nattributetree.cpp" line="201"/> <location filename="../gui/nattributetree.cpp" line="245"/> <location filename="../gui/nattributetree.cpp" line="282"/> <source>Last Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="169"/> <location filename="../gui/nattributetree.cpp" line="250"/> <source>Before</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="210"/> <source>Last Modified</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="289"/> <source>Contains</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="292"/> <source>Images</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="296"/> <source>Audio</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="300"/> <source>Ink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="304"/> <source>Encrypted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="308"/> <source>To-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="312"/> <source>Unfinished to-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="316"/> <source>Finished to-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="320"/> <source>PDF document</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="324"/> <source>Attachment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="328"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="332"/> <source>Uncompleted Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="336"/> <source>Future Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="341"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="344"/> <source>Emailed to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="348"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="352"/> <source>Web page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="356"/> <source>Mobile</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="360"/> <source>Another application</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NBrowserWindow</name> <message> <location filename="../gui/nbrowserwindow.cpp" line="521"/> <location filename="../gui/nbrowserwindow.cpp" line="3112"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="523"/> <location filename="../gui/nbrowserwindow.cpp" line="3114"/> <source>Tomorrow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="525"/> <location filename="../gui/nbrowserwindow.cpp" line="3116"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to save this note. Either tidy isn't installed or the note is too complex to save.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="1808"/> <source>Insert Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>Unable Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>This is an ink note. Ink notes are not supported since Evernote has not published any specifications on them and I'm too lazy to figure them out by myself.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2240"/> <source>Edit Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2304"/> <source>Unable to create LaTeX image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2305"/> <source>Unable to create LaTeX image. Are you sure mimetex is installed?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2635"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2636"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2645"/> <source>Sending Email. Please be patient.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3159"/> <source>Decryption Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3160"/> <source>Unknown encryption method. Unable to decrypt.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3263"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3264"/> <source>Error Encrypting String. Please verify you have Java installed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Hunspell plugin not found or could not be loaded.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NMainMenuBar</name> <message> <location filename="../gui/nmainmenubar.cpp" line="60"/> <source>&File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="79"/> <source>Print this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="87"/> <source>Backup database to a file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="93"/> <source>Restore from a backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="113"/> <source>Import notes from an export file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="133"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="151"/> <source>Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="159"/> <source>Close the program</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="175"/> <source>&Edit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="78"/> <source>&Print Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="64"/> <source>Email Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="65"/> <source>Email a copy of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="71"/> <source>Print Preview Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="72"/> <source>Print preview of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="86"/> <source>&Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="92"/> <source>&Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="112"/> <source>&Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="140"/> <source>&Add Another User...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="144"/> <source>&User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="150"/> <source>&Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="158"/> <source>E&xit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="180"/> <source>&Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="184"/> <source>&Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="190"/> <source>&Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="194"/> <source>C&opy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="198"/> <source>&Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="202"/> <source>Pas&te as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="206"/> <source>Remo&ve Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="212"/> <source>Select &All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="218"/> <source>F&ind and Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="220"/> <source>&Search Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="225"/> <source>&Reset Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="232"/> <source>&Find in Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="238"/> <source>Find &Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="243"/> <source>Find &Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="250"/> <source>Replace &Within Note...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="260"/> <source>Preferences</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="268"/> <source>&View</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="273"/> <source>Wide Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="278"/> <source>Narrow Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="285"/> <source>&Show Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="289"/> <source>Note &History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="295"/> <source>&Presentation Mode</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="299"/> <source>Show &Left Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="306"/> <source>Show &Favorites</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="313"/> <source>Show &Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="320"/> <source>Show Ta&gs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="327"/> <source>Show Sa&ved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="341"/> <source>Show T&rash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="348"/> <source>Show N&ote List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="355"/> <source>Show Note &Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="364"/> <source>View Note &Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="368"/> <source>View &Toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="375"/> <source>View Status&bar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="391"/> <source>New &Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="396"/> <source>New &Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="401"/> <source>Dupl&icate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="406"/> <source>&Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="411"/> <source>Reindex Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="418"/> <source>&Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="427"/> <source>&Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="432"/> <source>&UnPin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="446"/> <source>&Synchronize</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="447"/> <source>Synchronize with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="452"/> <source>&Disconnect</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="460"/> <source>Pause &Indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="461"/> <source>Temporarily pause indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="468"/> <source>Disable &Editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="469"/> <source>Temporarily disable note editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="476"/> <source>A&ccount</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="490"/> <source>&Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="514"/> <source>&User's Guide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="537"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="538"/> <source>View currentt shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="547"/> <source>Github Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="548"/> <source>Goto the NixNote2 Github project page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="585"/> <source>About &Qt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="625"/> <source>Theme</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="386"/> <source>&Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="100"/> <source>&Export to NixNote Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="101"/> <source>Export selected notes to a NNEX file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="106"/> <source>&Export Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="107"/> <source>Export selected notes to a PDF file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="441"/> <source>&Tools</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="453"/> <source>Disconnect from Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="477"/> <source>Account information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="484"/> <source>&Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="485"/> <source>Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="491"/> <source>Reindex all notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="499"/> <source>&Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="500"/> <source>Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="509"/> <source>&Help</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="515"/> <source>Open the user manual.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="542"/> <source>Message &Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="554"/> <source>&Evernote Account Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="559"/> <source>Evernote &Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="568"/> <source>Evernote &Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="573"/> <source>Evernote User &Forum</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="580"/> <source>&About</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="634"/> <source>System Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="543"/> <source>View current program messages</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="334"/> <source>Show &Attribute Filter</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="520"/> <source>Theme &Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="521"/> <source>View information about the current theme.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="555"/> <source>Go to your Evernote account page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="560"/> <source>Go to Evernote's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="562"/> <source>Yinxiang Biji Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="563"/> <source>Go to Yinxiang Biji's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="569"/> <source>Go to Evernote Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="574"/> <source>Go to the Evernote user support forum.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="581"/> <location filename="../gui/nmainmenubar.cpp" line="586"/> <source>About</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NNotebookView</name> <message> <location filename="../gui/nnotebookview.cpp" line="69"/> <source>Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="86"/> <source>Create New Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="95"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="103"/> <source>Add to stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="116"/> <source>Create New stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="119"/> <source>Remove from stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="123"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="131"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="641"/> <source>Are you sure you want to delete this notebook?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="642"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>New Stack (</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NSearchView</name> <message> <location filename="../gui/nsearchview.cpp" line="65"/> <source>Saved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="74"/> <source>Create Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="83"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="90"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="94"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="404"/> <source>Are you sure you want to delete this saved search?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="405"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTabWidget</name> <message> <location filename="../gui/ntabwidget.cpp" line="254"/> <location filename="../gui/ntabwidget.cpp" line="262"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntabwidget.cpp" line="267"/> <location filename="../gui/ntabwidget.cpp" line="334"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableView</name> <message> <location filename="../gui/ntableview.cpp" line="203"/> <source>Open Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="209"/> <source>Open Note In New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="215"/> <source>Open Note In New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="222"/> <source>Add Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="227"/> <source>Delete Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="238"/> <source>Restore Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="244"/> <source>Copy Note Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="249"/> <source>Duplicate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="254"/> <source>Reminders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="258"/> <source>Remove</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="263"/> <source>Mark Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="269"/> <source>Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="274"/> <source>Unpin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="279"/> <source>Merge Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="285"/> <source>Create Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="291"/> <source>Title Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="296"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="301"/> <source>White</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="304"/> <source>Red</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="307"/> <source>Blue</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="310"/> <source>Green</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="313"/> <source>Yellow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="316"/> <source>Black</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="319"/> <source>Gray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="322"/> <source>Cyan</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="325"/> <source>Magenta</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="663"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="666"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="672"/> <source>selected note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="677"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="942"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="943"/> <source>This note has never been synchronized. Using this in a note link can cause problems unless you synchronize it first.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1319"/> <source>Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1370"/> <source>One or more notes are unsynchronized. This can cause issues if they are later synchronized. Do you wish to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1654"/> <source>Note LID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1657"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1660"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1663"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1666"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1668"/> <location filename="../gui/ntableview.cpp" line="1676"/> <location filename="../gui/ntableview.cpp" line="1682"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1670"/> <location filename="../gui/ntableview.cpp" line="1674"/> <location filename="../gui/ntableview.cpp" line="1680"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1672"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1678"/> <source>Has To-Do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1684"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1687"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1690"/> <source>Date Deleted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1698"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1706"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1710"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1719"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1728"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1737"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1740"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1743"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1746"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1754"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableViewHeader</name> <message> <location filename="../gui/ntableviewheader.cpp" line="42"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="47"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="52"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="57"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="62"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="67"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="72"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="77"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="82"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="87"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="92"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="97"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="102"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="107"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="112"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="117"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="122"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="128"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="133"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="138"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="143"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTagView</name> <message> <location filename="../gui/ntagview.cpp" line="67"/> <location filename="../gui/ntagview.cpp" line="156"/> <source>Tags from Personal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="91"/> <source>Create New Tag</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="100"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="107"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="110"/> <source>Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="113"/> <source>Hide Unassigned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="119"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="154"/> <source>Tags from </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="351"/> <source>-<Missing Tag>-</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="706"/> <source>Are you sure you want to merge these tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="707"/> <source>Verify Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="753"/> <source>Are you sure you want to delete this tag?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="755"/> <source>Are you sure you want to delete all selected tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="756"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTitleEditor</name> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="123"/> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="137"/> <source>Untitled note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="134"/> <source>untitled note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTrashTree</name> <message> <location filename="../gui/ntrashtree.cpp" line="53"/> <source>Trash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="65"/> <source>Restore Deleted Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="68"/> <source>Empty Trash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="238"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="239"/> <source>Are you sure you want to permanently delete these notes?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NWebView</name> <message> <location filename="../gui/nwebview.cpp" line="56"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="61"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="66"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="71"/> <source>Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="76"/> <source>Paste as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="81"/> <source>Remove Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="86"/> <source>Copy Note URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="93"/> <source>Background Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="113"/> <source>To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="120"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="127"/> <source>Encrypted Selected Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="132"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="137"/> <source>Insert Hyperlink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="142"/> <source>Quick Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="147"/> <source>Remove Hyperlink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="152"/> <source>Attach File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="158"/> <source>Insert LaTeX Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="164"/> <source>Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="167"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="173"/> <source>Insert Row</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="178"/> <source>Insert Column</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="185"/> <source>Delete Row</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="189"/> <source>Delete Column</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="196"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="203"/> <source>Image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="206"/> <source>Save Image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="214"/> <source>Rotate Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="218"/> <source>Rotate Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="224"/> <source>Save Attachment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="502"/> <location filename="../gui/nwebview.cpp" line="532"/> <source>Save File</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NixNote</name> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy Not Found</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy is not found on this system. Until tidy is installed you cannot save any notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="291"/> <source>ToolBar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="303"/> <source>Back</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="304"/> <source>Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="314"/> <source>All Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="316"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="319"/> <source>Print</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="329"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="332"/> <source>New Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="344"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="347"/> <source>Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="349"/> <source>Usage</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="531"/> <location filename="../nixnote.cpp" line="3183"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="547"/> <source>Show/Hide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="559"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1799"/> <source>Confirm Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1815"/> <source>Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1818"/> <source>Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1730"/> <location filename="../nixnote.cpp" line="1816"/> <source>NixNote Export (*.nnex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="320"/> <source>Print the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="322"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="323"/> <source>Email the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="528"/> <source>Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="538"/> <source>Shortcut Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="540"/> <source>Pinned Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="542"/> <source>Recently Updated Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1437"/> <location filename="../nixnote.cpp" line="2350"/> <source>Log in to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1439"/> <location filename="../nixnote.cpp" line="2352"/> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <location filename="../nixnote.cpp" line="1761"/> <location filename="../nixnote.cpp" line="1857"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <source>No notes selected.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1722"/> <source>Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1724"/> <source>Export Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1749"/> <source>Performing backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1751"/> <source>Performing export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1768"/> <source>Database backup complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1770"/> <source>Note extract complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1796"/> <source>This is used to restore a database from backups. It is HIGHLY recommended that this only be used to populate an empty database. Restoring into a database that already has data can cause problems. Are you sure you want to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1819"/> <source>NixNote Export (*.nnex);;Evernote Export (*.enex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1846"/> <source>Restoring database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1848"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1880"/> <source>Database has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1882"/> <source>Notes have been imported.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <location filename="../nixnote.cpp" line="1918"/> <source>Sync Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <source>Sync completed with errors.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1918"/> <source>Sync error. See message log for details</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync completed successfully.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2002"/> <source>Untitled note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>This note has never been synchronized with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3872"/> <source>Error loading Webcam plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3887"/> <source>Error loading Hunspell plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3913"/> <location filename="../nixnote.cpp" line="3965"/> <source>PDF Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>Export complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3937"/> <source>Exporting Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3938"/> <source>Exporting notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2391"/> <location filename="../nixnote.cpp" line="2398"/> <source>Error retrieving note.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2392"/> <location filename="../nixnote.cpp" line="2399"/> <source>Error retrieving note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <location filename="../nixnote.cpp" line="2431"/> <source>Note Restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <source>A new copy has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2431"/> <source>Note successfully restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2434"/> <source>Note restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2650"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3054"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex the entire database?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3247"/> <source>Notes will be reindexed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Webcam plugin not found or could not be loaded</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3281"/> <source>Unable to find webcam or capture image.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3282"/> <source>Webcam Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3432"/> <source>Note Reindexed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3444"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3447"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3451"/> <source>this note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3455"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3816"/> <source>Press ESC to exit.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteFormatter</name> <message> <location filename="../html/noteformatter.cpp" line="657"/> <source>File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/noteformatter.cpp" line="691"/> <source>Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/noteformatter.cpp" line="695"/> <source>KB</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteHistorySelect</name> <message> <location filename="../dialog/notehistoryselect.cpp" line="32"/> <source>Note History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="34"/> <source>Import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="39"/> <source>Replace current note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="80"/> <source>Current copy on Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="93"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="95"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteProperties</name> <message> <location filename="../dialog/noteproperties.cpp" line="37"/> <source>Note Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/noteproperties.cpp" line="38"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NotebookProperties</name> <message> <location filename="../dialog/notebookproperties.cpp" line="38"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="42"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="46"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="52"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="60"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="62"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="135"/> <source>Add Notebook</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OAuthWindow</name> <message> <location filename="../oauth/oauthwindow.cpp" line="70"/> <source>Please Grant NixNote Access</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="81"/> <source>SSL Support not found. Aborting connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="132"/> <source>Error receiving temporary credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="176"/> <source>Error receiving permanent credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="219"/> <source>Error receiving authorization</source> <translation type="unfinished"></translation> </message> </context> <context> <name>PopplerViewer</name> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source>Page </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source> of </source> <translation type="unfinished"></translation> </message> </context> <context> <name>PreferencesDialog</name> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="30"/> <source>User Settings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="49"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="92"/> <source>Appearance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="98"/> <source>Locale</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="104"/> <source>Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="110"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="116"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="121"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="127"/> <source>Advanced</source> <translation type="unfinished"></translation> </message> </context> <context> <name>QApplication</name> <message> <location filename="../dialog/screencapture.cpp" line="108"/> <source>Use your mouse to draw a rectangle to screenshot or exit pressing any key or using the right or middle mouse buttons.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/screencapture.cpp" line="145"/> <source>%1 x %2 pixels </source> <translation type="unfinished"></translation> </message> </context> <context> <name>QObject</name> <message> <location filename="../gui/ntableview.cpp" line="175"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="176"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="177"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="178"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="179"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="180"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="181"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="182"/> <source>Deletion Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="183"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="184"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="185"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="186"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="187"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="188"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="189"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="190"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="191"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="192"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="193"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="194"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="195"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="196"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="197"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderButton</name> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="35"/> <source>Mark as Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="36"/> <source>Change Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="37"/> <source>Clear Reminder</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderManager</name> <message> <location filename="../reminders/remindermanager.cpp" line="85"/> <source>Reminders Due</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderSetDialog</name> <message> <location filename="../dialog/remindersetdialog.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/remindersetdialog.cpp" line="48"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>RemoteQuery</name> <message> <location filename="../filters/remotequery.cpp" line="113"/> <location filename="../filters/remotequery.cpp" line="130"/> <source>Today</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SavedSearchProperties</name> <message> <location filename="../dialog/savedsearchproperties.cpp" line="35"/> <source>Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="43"/> <source>Query</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="51"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="53"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="106"/> <source>Add Saved Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SearchPreferences</name> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="36"/> <source>Index Attachments</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="44"/> <source>Clear Notebook Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="48"/> <source>Clear Tag Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="52"/> <source>Clear Search Text on Notebook Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="56"/> <source>Show Any Matching Tags When Selecting Multiple Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="60"/> <source>Index PDFs locally</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="64"/> <source>Background Indexing (requires restart & may cause issues on some systems)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="68"/> <source>Experimental: Force search to lower case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="73"/> <source>Minimum Image Recognition Weight</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ShortcutDialog</name> <message> <location filename="../dialog/shortcutdialog.cpp" line="41"/> <source>Defined Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/shortcutdialog.cpp" line="42"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SpellCheckDialog</name> <message> <location filename="../dialog/spellcheckdialog.cpp" line="35"/> <source>Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="50"/> <source>Suggestion</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="56"/> <source>Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="57"/> <source>Ignore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="58"/> <source>Ignore All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="59"/> <source>Add To Dictionary</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="66"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncPreferences</name> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="34"/> <source>Sync automatically</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="38"/> <source>Every 15 minutes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="39"/> <source>Every 30 minutes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="40"/> <source>Every hour</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="41"/> <source>Every day</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="43"/> <source>Sync on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="45"/> <source>Sync on shutdown</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="47"/> <source>Enable sync notifications</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="48"/> <source>Show successful syncs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="49"/> <source>Restart sync on API limit (experimental)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="51"/> <source>Enable Proxy*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="52"/> <source>Enable Socks5</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="53"/> <source>Proxy Hostname</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="54"/> <source>Proxy Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="55"/> <source>Proxy Username</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="56"/> <source>Proxy Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="57"/> <source>*Note: Restart required</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="73"/> <source>Popup message on sync errors.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncRunner</name> <message> <location filename="../threads/syncrunner.cpp" line="134"/> <source>Beginning Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="142"/> <source>Downloading changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="192"/> <source>Sync Complete Successfully</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <location filename="../threads/syncrunner.cpp" line="267"/> <source>Download </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <source>% complete for notebooks, tags, & searches.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="247"/> <source>Download complete for notebooks, tags, & searches. Downloading notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="267"/> <source>% complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="280"/> <source>Download complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>Downloading </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <source>% complete for tags in shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="721"/> <source>Downloading notes for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="743"/> <source>% complete for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1149"/> <source>Error uploading note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1151"/> <source>Error uploading note with a missing title!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="721"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TableDialog</name> <message> <location filename="../dialog/tabledialog.cpp" line="30"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="34"/> <source>Percent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="35"/> <source>Pixels</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="51"/> <source>Rows</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="53"/> <source>Columns</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="55"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="57"/> <source>Unit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="64"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="67"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TablePropertiesDialog</name> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="72"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="105"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="86"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="87"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="106"/> <source>Cell Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="214"/> <source>Row 1 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="216"/> <source>Row 1 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="218"/> <source>Row 1 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="220"/> <source>Row 2 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="222"/> <source>Row 2 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="224"/> <source>Row 2 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="226"/> <source>Row 3 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="228"/> <source>Row 3 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="230"/> <source>Row 3 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="456"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="464"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="480"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="494"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="511"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="526"/> <source>Percent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="465"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="479"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="493"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="510"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="525"/> <source>Pixels</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="476"/> <source>Top Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="490"/> <source>Bottom Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="507"/> <source>Left Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="522"/> <source>Right Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="560"/> <source>Border Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="561"/> <source>Font Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="562"/> <source>Background Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="576"/> <source>Border Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="587"/> <source>Padding</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="597"/> <source>Top Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="606"/> <source>Bottom Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="615"/> <source>Left Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="624"/> <source>Right Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="636"/> <source>Horizontal Alignment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="641"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="642"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="643"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="644"/> <source>Center</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="676"/> <source>Solid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="677"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="678"/> <source>Dotted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="679"/> <source>Dashed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="680"/> <source>Double</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="681"/> <source>Ridge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="682"/> <source>Inset</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="683"/> <source>Outset</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagEditorNewTag</name> <message> <location filename="../gui/browserWidgets/tageditornewtag.cpp" line="55"/> <source>Click to add tag...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagProperties</name> <message> <location filename="../dialog/tagproperties.cpp" line="36"/> <source>Tag</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="48"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="50"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="102"/> <source>Add Tag</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ThumbnailPreferences</name> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="14"/> <source>Disable thumbnail generation</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="15"/> <source>Images to generate per interval</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="16"/> <source>Minimum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="17"/> <source>Maximum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>UrlEditor</name> <message> <location filename="../gui/browserWidgets/urleditor.cpp" line="45"/> <source>Click to set source URL...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>WatchFolderAdd</name> <message> <location filename="../dialog/watchfolderadd.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="51"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="55"/> <source>Directory</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="63"/> <source>Keep</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="64"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="90"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="92"/> <source>After import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="94"/> <source>Include subdirectories</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="101"/> <source>Add Import Folder</source> <translation type="unfinished"></translation> </message> </context> <context> <name>WatchFolderDialog</name> <message> <location filename="../dialog/watchfolderdialog.cpp" line="38"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="42"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="50"/> <source>Auto Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="62"/> <source>Add</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="66"/> <source>Edit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="71"/> <location filename="../dialog/watchfolderdialog.cpp" line="162"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="112"/> <source>Directory</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="113"/> <source>Target Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="114"/> <location filename="../dialog/watchfolderdialog.cpp" line="159"/> <source>Keep</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="115"/> <source>Include Subdirectories</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="169"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="172"/> <source>No</source> <translation type="unfinished"></translation> </message> </context> </TS> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/translations/nixnote2_fr.ts����������������������������������������������������������0000664�0000000�0000000�00000624463�13156041044�0020624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="fr_FR"> <context> <name>AboutDialog</name> <message> <location filename="../dialog/aboutdialog.cpp" line="36"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/aboutdialog.cpp" line="53"/> <source>Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountDialog</name> <message> <location filename="../dialog/accountdialog.cpp" line="37"/> <source>Account Information</source> <translation>Informations sur le compte</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="40"/> <source>Normal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="46"/> <source>Premium</source> <translation>Premium</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="48"/> <source>VIP</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="50"/> <source>Manager</source> <translation>Manager</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="52"/> <source>Support</source> <translation>Support</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="54"/> <source>Admin</source> <translation>Admin</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="75"/> <source> Bytes</source> <translation> Octets</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="79"/> <source> KB</source> <translation> ko</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="83"/> <source> MB</source> <translation> Mo</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="90"/> <source>Account:</source> <translation>Compte :</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="93"/> <source>User Name:</source> <translation>Utilisateur :</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="95"/> <source>Account Type:</source> <translation>Type de compte :</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="97"/> <source>Limit:</source> <translation>Limite :</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="99"/> <source>Uploaded In This Period:</source> <translation>Téléversé dans cette période :</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="103"/> <source>Less than 1MB</source> <translation>Moins de 1 Mo</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="104"/> <source>Current Cycle Ends:</source> <translation>Cycle actuel se finit :</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="112"/> <source>OK</source> <translation>OK</translation> </message> </context> <context> <name>AccountMaintenanceDialog</name> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="34"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="35"/> <source>Close</source> <translation>Fermer</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="36"/> <source>Add</source> <translation>Ajouter</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="37"/> <source>Rename</source> <translation>Renommer</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="38"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="64"/> <source>User Account Maintenance</source> <translation>Maintenance du compte</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="104"/> <source>Are you sure you want to delete this account?</source> <translation>Souhaitez-vous vraiment supprimer ce compte ?</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="105"/> <source>Verify Delete</source> <translation>Vérifier la suppression</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="117"/> <source>You cannot delete the active account.</source> <translation>Vous ne pouvez pas supprimer le compte actif.</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="170"/> <location filename="../dialog/accountmaintenancedialog.cpp" line="194"/> <source>Switch to </source> <translation>Changer pour </translation> </message> </context> <context> <name>AddNote</name> <message> <location filename="../cmdtools/addnote.cpp" line="33"/> <source>Untitled Note</source> <translation type="unfinished">Note sans titre</translation> </message> </context> <context> <name>AddUserAccountDialog</name> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="38"/> <source>Server</source> <translation>Serveur</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="39"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="41"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="46"/> <source>Account Name</source> <translation>Nom du compte</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="69"/> <source>Evernote</source> <translation>Evernote</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="70"/> <source>Yinxiang Biji</source> <translation>Yinxiang Biji</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="71"/> <source>Evernote Sandbox</source> <translation>Bac-à-sable Evernote</translation> </message> </context> <context> <name>AppearancePreferences</name> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="39"/> <source>Show tray icon</source> <translation>Afficher dans la zone de notification</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="40"/> <source>Display PDFs inline**</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="41"/> <source>Show splash screen on startup</source> <translation>Afficher l'écran de démarrage</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="42"/> <source>Start automatically at login</source> <translation>Démarrer automatiquement à l'ouverture de session</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="43"/> <source>Confirm Deletes</source> <translation>Confirmer les suppressions</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="44"/> <source>Show missed reminders on startup</source> <translation>Afficher les rappels manqués au démarrage</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="45"/> <source>Always Start minimized</source> <translation>Toujours démarrer minimisé</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="46"/> <source>Show notebook and tag totals</source> <translation>Afficher le total des cahier de notes et étiquettes</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="47"/> <source>Auto-Hide editor toolbar</source> <translation>Cacher automatiquement la barre d'édition</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="49"/> <source>Disable note editing on statup</source> <translation>Désactiver l'édition de notes au démarrage</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="50"/> <source>Focus on Note Title on New Note</source> <translation>Mettre le focus sur le titre de la note pour les nouvelles notes</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="51"/> <source>Limit Editor to Web Fonts*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="53"/> <source>Show note list grid*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="54"/> <source>Alternate note list colors*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="55"/> <source>Set author on new notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="57"/> <source>Preview fonts in editor dialag*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="61"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="68"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="75"/> <source>Do Nothing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="62"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="69"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="76"/> <source>Show/Hide NixNote</source> <translation>Montrer/Cacher NixNote</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="63"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="70"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="77"/> <source>New Text Note</source> <translation>Nouvelle note texte</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="64"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="71"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="78"/> <source>New Quick Note</source> <translation>Nouvelle note rapide</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="65"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="72"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="79"/> <source>Screen Capture</source> <translation>Enregistrement de l'écran</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="82"/> <source>Open New Tab</source> <translation>Ouvrir un nouvel onglet</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="83"/> <source>Open New Window</source> <translation>Ouvrir une nouvelle fenêtre</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="98"/> <source>Qt Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="99"/> <source>notify-send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="106"/> <source>Startup Behavior</source> <translation>Comportement au démarrage</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="108"/> <source>Restore Selection Criteria</source> <translation>Restaurer les critères de sélection</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="109"/> <source>Select Default Notebook</source> <translation>Sélectionner le cahier de notes par défaut</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="110"/> <source>View All Notebooks</source> <translation>Voir tous les cahiers de notes</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="120"/> <source>Minimize to tray</source> <translation>Minimiser dans la zone de notification</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="121"/> <source>Close to tray</source> <translation>Fermer dans la zone de notification</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="143"/> <source>Notification Service</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="146"/> <source>Middle Click Open Behavior</source> <translation>Action du bouton du milieu</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="149"/> <source>Tray Icon Click Action</source> <translation>Action du clic sur l'icône de la zone de notification</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="152"/> <source>Tray Icon Middle Click Action</source> <translation>Action du clic du milieu sur l'icône de la zone de notification</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="155"/> <source>Tray Icon Double Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="158"/> <source>Default GUI Font*</source> <translation>Police par défaut de l'interface*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="161"/> <source>Default GUI Font Size*</source> <translation>Taille par défaut de la police</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="164"/> <source>Default Editor Font*</source> <translation>Police par défaut dans l'éditeur</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="167"/> <source>Default Editor Font Size*</source> <translation>Taille par défaut de la police dans l'éditeur</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="171"/> <source>* May require restart on some systems.</source> <translation>* Peut nécessiter un redémarrage.</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="172"/> <source>** Can crash on Gnome systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="102"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="405"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="423"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="442"/> <source>System Default</source> <translation>Du système</translation> </message> </context> <context> <name>AttachmentIconBuilder</name> <message> <location filename="../html/attachmenticonbuilder.cpp" line="74"/> <source>Bytes</source> <translation>Octets</translation> </message> <message> <location filename="../html/attachmenticonbuilder.cpp" line="78"/> <source>KB</source> <translation>ko</translation> </message> </context> <context> <name>AuthorEditor</name> <message> <location filename="../gui/browserWidgets/authoreditor.cpp" line="37"/> <source>Click to set author</source> <translation>Indiquer l'auteur</translation> </message> </context> <context> <name>BatchImport</name> <message> <location filename="../xml/batchimport.cpp" line="112"/> <source>Untitled Note</source> <translation type="unfinished">Note sans titre</translation> </message> </context> <context> <name>CloseNotebookDialog</name> <message> <location filename="../dialog/closenotebookdialog.cpp" line="37"/> <source>Open/Close Notebooks</source> <translation>Ouvrir/fermer les cahiers de notes</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="42"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="43"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="56"/> <source>Open Notebooks</source> <translation>Cahiers de notes ouverts</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="57"/> <source>Closed Notebooks</source> <translation>Cahiers de notes fermés</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="59"/> <source>Open</source> <translation>Ouvrir</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="60"/> <source>Close</source> <translation>Fermer</translation> </message> </context> <context> <name>CmdLineQuery</name> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="67"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="69"/> <source>Title</source> <translation type="unfinished">Titre</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="72"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="75"/> <source>Tags</source> <translation type="unfinished">Étiquettes</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="78"/> <source>Created</source> <translation type="unfinished">Créé</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="81"/> <source>Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="84"/> <source>Sync</source> <translation type="unfinished">Sync</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="87"/> <source>Source URL</source> <translation type="unfinished">URL source</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="90"/> <source>Author</source> <translation type="unfinished">Auteur</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="93"/> <source>Todo</source> <translation type="unfinished">À faire</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="96"/> <source>Reminder Due</source> <translation type="unfinished">Date de rappel</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="99"/> <source>Reminder Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="181"/> <location filename="../cmdtools/cmdlinequery.cpp" line="190"/> <source>No</source> <translation type="unfinished">Non</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="183"/> <location filename="../cmdtools/cmdlinequery.cpp" line="188"/> <source>Yes</source> <translation type="unfinished">Oui</translation> </message> </context> <context> <name>CmdLineTool</name> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="56"/> <source>Unable to attach to shared memory segment. Is the other NixNote running? </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="315"/> <location filename="../cmdtools/cmdlinetool.cpp" line="452"/> <source> has been created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="318"/> <source>No response from NixNote. Please verify that the note was created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="332"/> <source>Untitled Note</source> <translation type="unfinished">Note sans titre</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="535"/> <source> was not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="538"/> <location filename="../cmdtools/cmdlinetool.cpp" line="609"/> <source> has been appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="541"/> <source>No response from NixNote. Please verify that the note was appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="552"/> <source> was not found. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="221"/> <location filename="../cmdtools/cmdlinetool.cpp" line="654"/> <source>No response received from NixNote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="156"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="663"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="674"/> <location filename="../cmdtools/cmdlinetool.cpp" line="690"/> <location filename="../cmdtools/cmdlinetool.cpp" line="722"/> <location filename="../cmdtools/cmdlinetool.cpp" line="742"/> <source>This cannot be done with NixNote running.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="732"/> <location filename="../cmdtools/cmdlinetool.cpp" line="752"/> <source>Notebook not found: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="765"/> <source>OAuth token not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="783"/> <source>Error synchronizing with Evernote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="786"/> <source>Sync completed.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ColorSettings</name> <message> <location filename="../settings/colorsettings.cpp" line="37"/> <source>White</source> <translation type="unfinished">Blanc</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="38"/> <source>Red</source> <translation type="unfinished">Rouge</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="39"/> <source>Blue</source> <translation type="unfinished">Bleu</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="40"/> <source>Green</source> <translation type="unfinished">Vert</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="41"/> <source>Yellow</source> <translation type="unfinished">Jaune</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="42"/> <source>Black</source> <translation type="unfinished">Noir</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="43"/> <source>Purple</source> <translation type="unfinished">Violet</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="44"/> <source>Brown</source> <translation type="unfinished">Brun</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="45"/> <source>Orange</source> <translation type="unfinished">Orange</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="46"/> <source>Grey</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="47"/> <source>Powder Blue</source> <translation type="unfinished">Bleu poudre</translation> </message> </context> <context> <name>CommunicationManager</name> <message> <location filename="../communication/communicationmanager.cpp" line="675"/> <source>Linked notebook notestore URL missing.</source> <translation>URL notestore du cahier de notes lié manquante.</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source>API rate limit exceeded. Please try again in </source> <translation>Ratio limite de l'API dépassé. Réessayer dans </translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <source> minutes.</source> <translation> minutes.</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source> minute.</source> <translation> minute.</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1206"/> <source>EDAMSystemException </source> <translation></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1208"/> <source>EDAMSystemException: Unknown error</source> <translation></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1232"/> <source>EDAMNotFoundException: Note not found</source> <translation></translation> </message> </context> <context> <name>DatabaseStatus</name> <message> <location filename="../dialog/databasestatus.cpp" line="35"/> <source>Database Status</source> <translation>État de la base de données</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="47"/> <source>Total Notes:</source> <translation>Notes totales :</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="49"/> <source>Total Resources:</source> <translation>Ressources totales :</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="51"/> <source>Unindexed Notes:</source> <translation>Notes non indexées :</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="53"/> <source>Unindexed Resources:</source> <translation>Ressources non indexées :</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="55"/> <source>Thumbnails Needed:</source> <translation>Vignettes nécessaires :</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="60"/> <source>OK</source> <translation>OK</translation> </message> </context> <context> <name>DateDelegate</name> <message> <location filename="../gui/datedelegate.cpp" line="42"/> <source>Today</source> <translation>Aujourd'hui</translation> </message> </context> <context> <name>DateEditor</name> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="38"/> <source>Created:</source> <translation>Créé :</translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="42"/> <source>Updated:</source> <translation>Mis à jour :</translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="46"/> <source>Subject:</source> <translation>Sujet :</translation> </message> </context> <context> <name>DebugPreferences</name> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="38"/> <source>Disable image search highlighting.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="35"/> <source>Strict note checking.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="37"/> <source>Disable uploads to server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="39"/> <source>Show LID column (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="40"/> <source>Disable Tag Sorting (useful for non-ASCII sort bug).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="41"/> <source>Force UTF8 Encoding.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="59"/> <source>Intercept Unix SIGHUP (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="64"/> <source>Use multipe theads to save note contents (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="68"/> <source>Use libtidy directly (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="72"/> <source>Auto-Save Interval (in seconds).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="79"/> <source>Message Level</source> <translation>Niveau des messages</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="82"/> <source>Trace</source> <translation>Trace</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="83"/> <source>Debug</source> <translation>Débogue</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="84"/> <source>Info</source> <translation></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="85"/> <source>Warnings</source> <translation>Avertissements</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="86"/> <source>Errors</source> <translation>Erreurs</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="87"/> <source>Fatal</source> <translation></translation> </message> </context> <context> <name>EditorButtonBar</name> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="37"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="133"/> <source>Undo</source> <translation>Annuler</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="38"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="137"/> <source>Redo</source> <translation>Refaire</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="39"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="142"/> <source>Cut</source> <translation>Couper</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="40"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="146"/> <source>Copy</source> <translation>Copier</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="41"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="150"/> <source>Paste</source> <translation>Coller</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="42"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="153"/> <source>Remove Formatting</source> <translation>Supprimer le formatage</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="43"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="159"/> <source>Bold</source> <translation>Gras</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="44"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="166"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="167"/> <source>Italics</source> <translation>Italique</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="45"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="184"/> <source>Superscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="46"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="188"/> <source>Subscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="47"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="174"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="175"/> <source>Underline</source> <translation>Souligné</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="48"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="180"/> <source>Strikethrough</source> <translation>Barré</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="49"/> <source>Align Left</source> <translation>Aligner à gauche</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="50"/> <source>Align Center</source> <translation>Aligner au centre</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="51"/> <source>Align Full</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="52"/> <source>Align Right</source> <translation>Aligner à droite</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="53"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="208"/> <source>Horizontal Line</source> <translation>Ligne horizontale</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="54"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="55"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="220"/> <source>Shift Right</source> <translation>Décaler à droite</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="56"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="224"/> <source>Shift Left</source> <translation>Décaler à gauche</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="57"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="228"/> <source>Bullet List</source> <translation>Liste à puces</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="58"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="232"/> <source>Number List</source> <translation>Liste numérotée</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="59"/> <source>Font</source> <translation>Police</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="60"/> <source>Font Size</source> <translation>Taille de la police</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="61"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="248"/> <source>Font Color</source> <translation>Couleur de la police</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="62"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="257"/> <source>Highlight</source> <translation>Surligné</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="63"/> <source>To-do</source> <translation type="unfinished">À faire</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="192"/> <source>Center Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="196"/> <source>Fully Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="214"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="215"/> <source>Insert Date & Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="262"/> <source>Todo</source> <translation>À faire</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="64"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="266"/> <source>Spell Check</source> <translation>Vérification de l'orthographe</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="65"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="270"/> <source>Insert Table</source> <translation>Insérer un tableau</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="66"/> <source>HTML Entities</source> <translation>Entités HTML</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="204"/> <source>Left Justify</source> <translation>Justifier à gauche</translation> </message> <message> <source>Center</source> <translation type="vanished">Centrer</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="200"/> <source>Right Justify</source> <translation>Justifier à droite</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="274"/> <source>Insert HTML Entities</source> <translation>Insérer des entités HTML</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="661"/> <source>Times</source> <translation></translation> </message> </context> <context> <name>EmailDialog</name> <message> <location filename="../dialog/emaildialog.cpp" line="36"/> <source>Send Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="38"/> <source>Send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="39"/> <source>Cancel</source> <translation type="unfinished">Annuler</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="51"/> <source>To:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="53"/> <source>BCC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="55"/> <source>CC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="57"/> <source>Subject:</source> <translation type="unfinished">Sujet :</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="59"/> <source>Note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="77"/> <source>CC me on this email</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailNote</name> <message> <location filename="../cmdtools/emailnote.cpp" line="261"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="327"/> <source>Connection Error: Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="333"/> <source>Login Error : Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="338"/> <source>Send Error : Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="344"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailPreferences</name> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="17"/> <source>SMTP Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="18"/> <source>Server Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="19"/> <source>Userid</source> <translation type="unfinished">Identifiant</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="20"/> <source>Password</source> <translation type="unfinished">Mot de passe</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="21"/> <source>Sender Display Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="22"/> <source>Sender Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="23"/> <source>Connection Type</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="31"/> <source>Plain Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="32"/> <source>SSL Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="33"/> <source>TLS Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="35"/> <source>Send Test Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="108"/> <location filename="../dialog/preferences/emailpreferences.cpp" line="113"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="109"/> <source>You must specify a SMTP server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="114"/> <source>You must specify a sender email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="146"/> <source>Test Email From NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="152"/> <source><h1>This is a test email from NixNote.</h1> </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="153"/> <source>If you are reading it then your email preferences are are setup properly.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message sent.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnCryptDialog</name> <message> <location filename="../dialog/encryptdialog.cpp" line="31"/> <source>Encrypt Text</source> <translation>Texte chiffré</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="47"/> <source>Password</source> <translation>Mot de passe</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="49"/> <source>Verify</source> <translation>Vérifier</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="51"/> <source>Hint</source> <translation>Indice</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="53"/> <source>Remember Password</source> <translation>Se souvenir du mot de passe</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="61"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="65"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="113"/> <source>Password must be at least 4 characters</source> <translation>Le mot de passe doit contenir au moins 4 caractères</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="117"/> <source>Passwords do not match</source> <translation>Les mots de passe ne correspondent pas</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="121"/> <source>Hint must be entered</source> <translation>L'indice doit être entré</translation> </message> </context> <context> <name>EnDecryptDialog</name> <message> <location filename="../dialog/endecryptdialog.cpp" line="35"/> <source>Decrypt</source> <translation>Déchiffrer</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="51"/> <source>Password</source> <translation>Mot de passe</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="52"/> <source>Hint</source> <translation>Indice</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="59"/> <source>Permanently Decrypt</source> <translation>Déchiffrer de façon permanente</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="61"/> <source>Remember Password</source> <translation>Se souvenir du mot de passe</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="66"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="70"/> <source>Cancel</source> <translation>Annuler</translation> </message> </context> <context> <name>ExportData</name> <message> <location filename="../xml/exportdata.cpp" line="54"/> <source>Cannot open file.</source> <translation>Impossible d'ouvrir le fichier.</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="62"/> <source>Export</source> <translation>Exporter</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="81"/> <source>Backup</source> <translation>Sauvegarde</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="114"/> <source>Tags</source> <translation>Étiquettes</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="151"/> <source>Notebooks</source> <translation>Cahiers de notes</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="360"/> <source>Searches</source> <translation>Recherches</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="405"/> <source>Linked Notebooks</source> <translation>Cahiers de notes liés</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="448"/> <source>Shared Notebooks</source> <translation>Cahiers de notes partagés</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="508"/> <source>Notes</source> <translation>Notes</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="725"/> <source>Backup Canceled</source> <translation>Sauvegarde de secours annulée</translation> </message> </context> <context> <name>ExternalBrowse</name> <message> <location filename="../gui/externalbrowse.cpp" line="32"/> <source>NixNote</source> <translation></translation> </message> <message> <location filename="../gui/externalbrowse.cpp" line="124"/> <source>NixNote - </source> <translation></translation> </message> </context> <context> <name>ExtractNotes</name> <message> <location filename="../cmdtools/extractnotes.cpp" line="41"/> <location filename="../cmdtools/extractnotes.cpp" line="82"/> <source>Output file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="64"/> <source>Deleting notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="65"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FavoritesView</name> <message> <location filename="../gui/favoritesview.cpp" line="68"/> <source>Shortcuts</source> <translation>Raccourcis</translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="90"/> <source>Remove from shortcuts</source> <translation>Supprimer des raccourcis</translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="565"/> <source>Are you sure you want to remove this shortcut?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="566"/> <source>Verify Delete</source> <translation>Vérifier la suppression</translation> </message> </context> <context> <name>FileWatcher</name> <message> <location filename="../watcher/filewatcher.cpp" line="72"/> <source>Error removing file: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FindReplace</name> <message> <location filename="../gui/findreplace.cpp" line="46"/> <source>Next</source> <translation>Suivant</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="47"/> <source>Previous</source> <translation>Précédent</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="48"/> <source>Match case</source> <translation>Respecter la casse</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="57"/> <source>Replace</source> <translation>Remplacer</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="58"/> <source>Replace all</source> <translation>Remplacer tout</translation> </message> </context> <context> <name>HtmlEntitiesDialog</name> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="33"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="34"/> <source>Close</source> <translation>Fermer</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="35"/> <source>Edit entries list</source> <translation>Éditer la liste d'entités</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="36"/> <source>Save entities list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="71"/> <source>HTML Entities Selection</source> <translation>Sélection des entités HTML</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="206"/> <source>Comma separated list of HTML entities. See http://www.w3schools.com/charsets/ for list.</source> <translation>Liste des entités HTML, séparées par des virgules. Voir http://www.w3schools.com/charsets/ pour la liste.</translation> </message> </context> <context> <name>ImportData</name> <message> <location filename="../xml/importdata.cpp" line="59"/> <source>Imported Notes</source> <translation>Notes importées</translation> </message> <message> <location filename="../xml/importdata.cpp" line="106"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="107"/> <location filename="../xml/importdata.cpp" line="119"/> <source> notes found.</source> <translation>notes trouvées.</translation> </message> <message> <location filename="../xml/importdata.cpp" line="130"/> <source>Importing</source> <translation>Importation</translation> </message> <message> <location filename="../xml/importdata.cpp" line="131"/> <source>Importing Notes</source> <translation>Importation des notes</translation> </message> <message> <location filename="../xml/importdata.cpp" line="133"/> <source>Restore</source> <translation>Restauration</translation> </message> <message> <location filename="../xml/importdata.cpp" line="134"/> <source>Restoring Notes</source> <translation>Restauration des notes</translation> </message> </context> <context> <name>ImportEnex</name> <message> <location filename="../xml/importenex.cpp" line="40"/> <source>Imported Notes</source> <translation>Notes importées</translation> </message> <message> <location filename="../xml/importenex.cpp" line="83"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="84"/> <location filename="../xml/importenex.cpp" line="94"/> <source> notes found.</source> <translation>notes trouvées.</translation> </message> <message> <location filename="../xml/importenex.cpp" line="101"/> <location filename="../xml/importenex.cpp" line="102"/> <source>Importing Notes</source> <translation>Importation des notes</translation> </message> </context> <context> <name>ImportNotes</name> <message> <location filename="../cmdtools/importnotes.cpp" line="19"/> <source>Input file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/importnotes.cpp" line="24"/> <source>Input file not found.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLatexDialog</name> <message> <location filename="../dialog/insertlatexdialog.cpp" line="32"/> <source>Insert LaTeX Formula</source> <translation>Insérer une formule LaTeX</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="42"/> <source>Formula</source> <translation>Formule</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="47"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="52"/> <source>Cancel</source> <translation>Annuler</translation> </message> </context> <context> <name>InsertLinkDialog</name> <message> <location filename="../dialog/insertlinkdialog.cpp" line="34"/> <source>Insert Link</source> <translation>Insérer un lien</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="45"/> <source>URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="50"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="54"/> <source>Cancel</source> <translation>Annuler</translation> </message> </context> <context> <name>LineEdit</name> <message> <location filename="../gui/lineedit.cpp" line="39"/> <source>Search</source> <translation>Chercher</translation> </message> </context> <context> <name>LocalePreferences</name> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="37"/> <source>Date Format</source> <translation>Format des dates</translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="40"/> <source>MM/dd/yy - </source> <translation>MM/jj/aa - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="41"/> <source>MM/dd/yyyy - </source> <translation>MM/jj/aaaa - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="42"/> <source>M/dd/yyyy - </source> <translation>M/jj/aaaa - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="43"/> <source>M/d/yyyy - </source> <translation>M/j/aaaa - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="44"/> <source>dd/MM/yy - </source> <translation>jj/MM/aa - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="45"/> <source>d/M/yy - </source> <translation>j/M/aa - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="46"/> <source>dd/MM/yyyy - </source> <translation>jj/MM/aaaa - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="47"/> <source>d/M/yyyy - </source> <translation>j/M/aaaa - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="48"/> <source>yyyy-MM-dd - </source> <translation>aaaa-MM-jj</translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="49"/> <source>yy-MM-dd - </source> <translation>aa-MM-jj - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="52"/> <source>Time Format</source> <translation>Format de l'heure</translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="55"/> <source>HH:mm:ss - </source> <translation></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="56"/> <source>HH:mm:ss a - </source> <translation></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="57"/> <source>HH:mm - </source> <translation></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="58"/> <source>HH:mm a - </source> <translation></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="59"/> <source>hh:mm:ss - </source> <translation></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="60"/> <source>hh:mm:ss a- </source> <translation></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="61"/> <source>h:mm:ss a - </source> <translation></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="62"/> <source>hh:mm - </source> <translation></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="63"/> <source>hh:mm a - </source> <translation></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="64"/> <source>h:mm a - </source> <translation></translation> </message> </context> <context> <name>LocationDialog</name> <message> <location filename="../dialog/locationdialog.cpp" line="33"/> <source>Location</source> <translation>Emplacement</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="40"/> <source>Longitude</source> <translation></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="42"/> <source>Latitude</source> <translation></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="44"/> <source>Altitude</source> <translation></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="49"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="52"/> <source>Cancel</source> <translation>Annuler</translation> </message> </context> <context> <name>LocationEditor</name> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="42"/> <source>Click to set location...</source> <translation>Indiquer l'emplacement...</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="45"/> <source>Edit...</source> <translation>Éditer...</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="46"/> <source>Clear</source> <translation>Effacer</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="47"/> <source>View on map</source> <translation>Voir sur la carte</translation> </message> </context> <context> <name>LogViewer</name> <message> <location filename="../dialog/logviewer.cpp" line="41"/> <source>Close</source> <translation>Fermer</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="43"/> <source>Refresh</source> <translation>Rafraichir</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="45"/> <source>Save</source> <translation>Sauvegarder</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="54"/> <source>Save Logs</source> <translation>Sauvegarder les historiques d'activité</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>Save Log</source> <translation>Sauvegarder l'historique d'activité</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>NixNote Log (*.log);;All Files (*.*)</source> <translation>Historique d'activité NixNote (*.log);;Tous les fichiers (*.*)</translation> </message> </context> <context> <name>LoginDialog</name> <message> <location filename="../dialog/logindialog.cpp" line="34"/> <source>NixNote Login</source> <translation>Ouverture de session NixNote</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="43"/> <source>Userid</source> <translation>Identifiant</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="44"/> <source>Password</source> <translation>Mot de passe</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="52"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="56"/> <source>Cancel</source> <translation>Annuler</translation> </message> </context> <context> <name>NAttributeTree</name> <message> <location filename="../gui/nattributetree.cpp" line="48"/> <source>Attributes</source> <translation>Attributs</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="129"/> <source>Created</source> <translation>Créé</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="132"/> <location filename="../gui/nattributetree.cpp" line="213"/> <source>Since</source> <translation>Depuis</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="136"/> <location filename="../gui/nattributetree.cpp" line="173"/> <location filename="../gui/nattributetree.cpp" line="217"/> <location filename="../gui/nattributetree.cpp" line="254"/> <source>Today</source> <translation>Aujourd'hui</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="140"/> <location filename="../gui/nattributetree.cpp" line="177"/> <location filename="../gui/nattributetree.cpp" line="221"/> <location filename="../gui/nattributetree.cpp" line="258"/> <source>Yesterday</source> <translation>Hier</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="144"/> <location filename="../gui/nattributetree.cpp" line="181"/> <location filename="../gui/nattributetree.cpp" line="225"/> <location filename="../gui/nattributetree.cpp" line="262"/> <source>This week</source> <translation>Cette semaine</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="148"/> <location filename="../gui/nattributetree.cpp" line="185"/> <location filename="../gui/nattributetree.cpp" line="229"/> <location filename="../gui/nattributetree.cpp" line="266"/> <source>Last week</source> <translation>La semaine dernière</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="152"/> <location filename="../gui/nattributetree.cpp" line="189"/> <location filename="../gui/nattributetree.cpp" line="233"/> <location filename="../gui/nattributetree.cpp" line="270"/> <source>This Month</source> <translation>Ce mois-ci</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="156"/> <location filename="../gui/nattributetree.cpp" line="193"/> <location filename="../gui/nattributetree.cpp" line="237"/> <location filename="../gui/nattributetree.cpp" line="274"/> <source>Last Month</source> <translation>Le mois dernier</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="160"/> <location filename="../gui/nattributetree.cpp" line="197"/> <location filename="../gui/nattributetree.cpp" line="241"/> <location filename="../gui/nattributetree.cpp" line="278"/> <source>This Year</source> <translation>Cette année</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="164"/> <location filename="../gui/nattributetree.cpp" line="201"/> <location filename="../gui/nattributetree.cpp" line="245"/> <location filename="../gui/nattributetree.cpp" line="282"/> <source>Last Year</source> <translation>L'année dernière</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="169"/> <location filename="../gui/nattributetree.cpp" line="250"/> <source>Before</source> <translation>Avant</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="210"/> <source>Last Modified</source> <translation>Modifié pour la dernière fois</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="289"/> <source>Contains</source> <translation>Contient</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="292"/> <source>Images</source> <translation></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="296"/> <source>Audio</source> <translation></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="300"/> <source>Ink</source> <translation>Encre</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="304"/> <source>Encrypted Text</source> <translation>Texte chiffré</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="308"/> <source>To-do items</source> <translation>Tâches à faire</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="312"/> <source>Unfinished to-do items</source> <translation>Tâches à faire non finies</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="316"/> <source>Finished to-do items</source> <translation>Tâches à faire finies</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="320"/> <source>PDF document</source> <translation>Document PDF</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="324"/> <source>Attachment</source> <translation>Pièce jointe</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="328"/> <source>Reminder</source> <translation type="unfinished">Rappel</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="332"/> <source>Uncompleted Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="336"/> <source>Future Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="341"/> <source>Source</source> <translation></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="344"/> <source>Emailed to Evernote</source> <translation>Envoyé à Evernote par courriel</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="348"/> <source>Email</source> <translation>Courriel</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="352"/> <source>Web page</source> <translation>Page Web</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="356"/> <source>Mobile</source> <translation></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="360"/> <source>Another application</source> <translation>Autre application</translation> </message> </context> <context> <name>NBrowserWindow</name> <message> <location filename="../gui/nbrowserwindow.cpp" line="521"/> <location filename="../gui/nbrowserwindow.cpp" line="3112"/> <source>Today</source> <translation>Aujourd'hui</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="523"/> <location filename="../gui/nbrowserwindow.cpp" line="3114"/> <source>Tomorrow</source> <translation>Demain</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="525"/> <location filename="../gui/nbrowserwindow.cpp" line="3116"/> <source>Yesterday</source> <translation>Hier</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to Save</source> <translation>Impossible de sauvegarder</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to save this note. Either tidy isn't installed or the note is too complex to save.</source> <translation>Impossible de sauvegarder cette note. Ou bien tidy n'est pas installé, ou bien la note est trop compliquée pour être sauvegarder.</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="1808"/> <source>Insert Link</source> <translation>Insérer un lien</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>Unable Open</source> <translation>Impossible d'ouvrir</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>This is an ink note. Ink notes are not supported since Evernote has not published any specifications on them and I'm too lazy to figure them out by myself.</source> <translation>Ceci est une note de type « Encre ». Ces notes ne sont pas supportées car Evernote n'en a pas publié de spécifications.</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2240"/> <source>Edit Link</source> <translation>Éditer un lien</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2304"/> <source>Unable to create LaTeX image</source> <translation>Impossible créer l'image LaTeX</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2305"/> <source>Unable to create LaTeX image. Are you sure mimetex is installed?</source> <translation>Impossible créer l'image LaTeX. Est-ce que mimetex est bien installé ?</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2635"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2636"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2645"/> <source>Sending Email. Please be patient.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3159"/> <source>Decryption Error</source> <translation>Erreur de déchiffrement</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3160"/> <source>Unknown encryption method. Unable to decrypt.</source> <translation>Méthode de chiffrement inconnue. Impossible de déchiffrer.</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3263"/> <source>Error</source> <translation>Erreur</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3264"/> <source>Error Encrypting String. Please verify you have Java installed.</source> <translation>Erreur pendant le chiffrement. Vérifiez que Java est bien installé.</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Hunspell plugin not found or could not be loaded.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete</source> <translation>Vérification orthographique terminée</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete.</source> <translation>Vérification orthographique terminée.</translation> </message> </context> <context> <name>NMainMenuBar</name> <message> <location filename="../gui/nmainmenubar.cpp" line="60"/> <source>&File</source> <translation>&Fichier</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="79"/> <source>Print this note</source> <translation>Imprimer cette note</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="87"/> <source>Backup database to a file</source> <translation>Sauvegarder la base de données</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="93"/> <source>Restore from a backup</source> <translation>Restaurer à partir d'une sauvegarde</translation> </message> <message> <source>Export selected notes to a file</source> <translation type="vanished">Exporter les notes sélectionnées dans un fichier</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="113"/> <source>Import notes from an export file</source> <translation>Importer des notes à partir d'un fichier</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="133"/> <source>Switch to </source> <translation>Changer pour </translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="151"/> <source>Open/Close Notebooks</source> <translation>Ouvrir/fermer les cahiers de notes</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="159"/> <source>Close the program</source> <translation>Fermer le programme</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="175"/> <source>&Edit</source> <translation>&Édition</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="78"/> <source>&Print Note</source> <translation>Im&primer la note</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="64"/> <source>Email Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="65"/> <source>Email a copy of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="71"/> <source>Print Preview Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="72"/> <source>Print preview of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="86"/> <source>&Backup Database</source> <translation>&Sauvegarder la base de données</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="92"/> <source>&Restore Database</source> <translation>&Restaurer la base de données</translation> </message> <message> <source>&Export Notes</source> <translation type="vanished">&Exporter les notes</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="112"/> <source>&Import Notes</source> <translation>&Importer des notes</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="140"/> <source>&Add Another User...</source> <translation>&Ajouter un autre utilisateur...</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="144"/> <source>&User Account Maintenance</source> <translation>&Maintenance du compte</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="150"/> <source>&Open/Close Notebooks</source> <translation>&Ouvrir/fermer les cahiers de notes</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="158"/> <source>E&xit</source> <translation>&Quitter</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="180"/> <source>&Undo</source> <translation>A&nnuler</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="184"/> <source>&Redo</source> <translation>&Refaire</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="190"/> <source>&Cut</source> <translation>&Couper</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="194"/> <source>C&opy</source> <translation>C&opier</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="198"/> <source>&Paste</source> <translation>Co&ller</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="202"/> <source>Pas&te as Unformatted Text</source> <translation>Coller comme texte non &formaté</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="206"/> <source>Remo&ve Formatting</source> <translation>Supprimer le formata&ge</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="212"/> <source>Select &All</source> <translation>Sélectionner &tout</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="218"/> <source>F&ind and Replace</source> <translation>C&hercher et remplacer</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="220"/> <source>&Search Notes</source> <translation>Che&rcher des notes</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="225"/> <source>&Reset Search</source> <translation>&Annuler la recherche</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="232"/> <source>&Find in Note</source> <translation>Chercher dans &la note</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="238"/> <source>Find &Next</source> <translation>Chercher &suivant</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="243"/> <source>Find &Previous</source> <translation>Chercher précéde&nt</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="250"/> <source>Replace &Within Note...</source> <translation>Remplacer à l'&intérieur de la note...</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="260"/> <source>Preferences</source> <translation></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="268"/> <source>&View</source> <translation>&Affichage</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="273"/> <source>Wide Note List</source> <translation>Liste de notes large</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="278"/> <source>Narrow Note List</source> <translation>Liste de notes étroite</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="285"/> <source>&Show Source</source> <translation>&Voir source</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="289"/> <source>Note &History</source> <translation>&Historique des notes</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="295"/> <source>&Presentation Mode</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="299"/> <source>Show &Left Panel</source> <translation>Afficher le panneau de &gauche</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="306"/> <source>Show &Favorites</source> <translation>Afficher les &favoris</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="313"/> <source>Show &Notebooks</source> <translation>Afficher les &cahiers de notes</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="320"/> <source>Show Ta&gs</source> <translation>Afficher les &étiquettes</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="327"/> <source>Show Sa&ved Searches</source> <translation>Afficher les &recherches sauvegardées</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="341"/> <source>Show T&rash</source> <translation>Afficher la c&orbeille</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="348"/> <source>Show N&ote List</source> <translation>Afficher la liste des &notes</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="355"/> <source>Show Note &Panel</source> <translation>Afficher les no&tes</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="364"/> <source>View Note &Info</source> <translation>Afficher les &informations de la note</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="368"/> <source>View &Toolbar</source> <translation>Afficher la &barre d'outils</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="375"/> <source>View Status&bar</source> <translation>Afficher la barre d'état&s</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="391"/> <source>New &Note</source> <translation>Nouvelle &note</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="396"/> <source>New &Webcam Note</source> <translation>Nouvelle note &filmée</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="401"/> <source>Dupl&icate Note</source> <translation>Dupli&quer la note</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="406"/> <source>&Delete</source> <translation>&Supprimer</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="411"/> <source>Reindex Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="418"/> <source>&Spell Check</source> <translation>&Correction orthographique</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="427"/> <source>&Pin Note</source> <translation>&Épingler la note</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="432"/> <source>&UnPin Note</source> <translation>&Ne plus épingler la note</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="446"/> <source>&Synchronize</source> <translation>&Synchroniser</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="447"/> <source>Synchronize with Evernote</source> <translation>Synchroniser avec Evernote</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="452"/> <source>&Disconnect</source> <translation>&Déconnecter</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="460"/> <source>Pause &Indexing</source> <translation>Mettre l'indexaction en &pause</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="461"/> <source>Temporarily pause indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="468"/> <source>Disable &Editing</source> <translation>Désactiver l'é&dition</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="469"/> <source>Temporarily disable note editing</source> <translation>Désactiver temporairement l'édition</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="476"/> <source>A&ccount</source> <translation>Co&mpte</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="490"/> <source>&Reindex Database</source> <translation>&Réindexer la base de données</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="514"/> <source>&User's Guide</source> <translation>&Guide de l'utilisateur</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="537"/> <source>Shortcuts</source> <translation type="unfinished">Raccourcis</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="538"/> <source>View currentt shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="547"/> <source>Github Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="548"/> <source>Goto the NixNote2 Github project page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="585"/> <source>About &Qt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="625"/> <source>Theme</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="386"/> <source>&Note</source> <translation>&Note</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="100"/> <source>&Export to NixNote Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="101"/> <source>Export selected notes to a NNEX file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="106"/> <source>&Export Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="107"/> <source>Export selected notes to a PDF file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="441"/> <source>&Tools</source> <translation>&Outils</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="453"/> <source>Disconnect from Evernote</source> <translation>Se déconnecter d'Evernote</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="477"/> <source>Account information</source> <translation>Informations sur le compte</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="484"/> <source>&Database Status</source> <translation>&État de la base de données</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="485"/> <source>Database Status</source> <translation>État de la base de données</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="491"/> <source>Reindex all notes</source> <translation>Réindexer toutes les notes</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="499"/> <source>&Import Folders</source> <translation>&Importer des dossiers</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="500"/> <source>Import Folders</source> <translation>Importer des dossiers</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="509"/> <source>&Help</source> <translation>&Aide</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="515"/> <source>Open the user manual.</source> <translation>Ouvrir le manuel utilisateur.</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="542"/> <source>Message &Log</source> <translation>&Historique d'activité</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="554"/> <source>&Evernote Account Page</source> <translation>Page de compte &Evernote</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="559"/> <source>Evernote &Support</source> <translation>&Support Evernote</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="568"/> <source>Evernote &Trunk</source> <translation>Evernote &Trunk</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="573"/> <source>Evernote User &Forum</source> <translation>Forum utilisateurs &Evernote</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="580"/> <source>&About</source> <translation>&À propos</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="634"/> <source>System Default</source> <translation>Valeur par défaut du système</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="543"/> <source>View current program messages</source> <translation>Voir les messages actuels du programme</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="334"/> <source>Show &Attribute Filter</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="520"/> <source>Theme &Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="521"/> <source>View information about the current theme.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="555"/> <source>Go to your Evernote account page.</source> <translation>Aller à la page Evernote de votre compte.</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="560"/> <source>Go to Evernote's support page</source> <translation>Aller à la page de support Evernote</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="562"/> <source>Yinxiang Biji Support</source> <translation>Support Yinxiang Biji</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="563"/> <source>Go to Yinxiang Biji's support page</source> <translation>Aller à la page de support de Yinxiang Biji</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="569"/> <source>Go to Evernote Trunk</source> <translation>Aller au Trunk d'Evernote</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="574"/> <source>Go to the Evernote user support forum.</source> <translation>Aller au forum de support aux utilisateurs d'Evernote.</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="581"/> <location filename="../gui/nmainmenubar.cpp" line="586"/> <source>About</source> <translation>À propos</translation> </message> </context> <context> <name>NNotebookView</name> <message> <location filename="../gui/nnotebookview.cpp" line="69"/> <source>Notebooks</source> <translation>Cahiers de notes</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="86"/> <source>Create New Notebook</source> <translation>Créer un nouveau cahier de notes</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="95"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="103"/> <source>Add to stack</source> <translation>Ajouter à la pile</translation> </message> <message> <source>New stack</source> <translation type="vanished">Nouvelle pile</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="116"/> <source>Create New stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="119"/> <source>Remove from stack</source> <translation>Supprimer de la pile</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="123"/> <source>Rename</source> <translation>Renommer</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="131"/> <source>Properties</source> <translation>Propriétés</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="641"/> <source>Are you sure you want to delete this notebook?</source> <translation>Souhaitez-vous vraiment supprimer ce cahier de notes ?</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="642"/> <source>Verify Delete</source> <translation>Vérifier la suppression</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>New Stack (</source> <translation>Nouvelle pile (</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>)</source> <translation>)</translation> </message> </context> <context> <name>NSearchView</name> <message> <location filename="../gui/nsearchview.cpp" line="65"/> <source>Saved Searches</source> <translation>Recherches sauvegardées</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="74"/> <source>Create Saved Search</source> <translation>Créer une recherche sauvegardée</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="83"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="90"/> <source>Rename</source> <translation>Renommer</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="94"/> <source>Properties</source> <translation>Propriétés</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="404"/> <source>Are you sure you want to delete this saved search?</source> <translation>Souhaitez-vous vraiment supprimer cette recherche sauvegardée ?</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="405"/> <source>Verify Delete</source> <translation>Vérifier la suppression</translation> </message> </context> <context> <name>NTabWidget</name> <message> <location filename="../gui/ntabwidget.cpp" line="254"/> <location filename="../gui/ntabwidget.cpp" line="262"/> <source>Untitled Note</source> <translation>Note sans titre</translation> </message> <message> <location filename="../gui/ntabwidget.cpp" line="267"/> <location filename="../gui/ntabwidget.cpp" line="334"/> <source>NixNote - </source> <translation>NixNote - </translation> </message> </context> <context> <name>NTableView</name> <message> <location filename="../gui/ntableview.cpp" line="203"/> <source>Open Note</source> <translation>Ouvrir la note</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="209"/> <source>Open Note In New Tab</source> <translation>Ouvrir la note dans un nouvel onglet</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="215"/> <source>Open Note In New Window</source> <translation>Ouvrir la note dans une nouvelle fenêtre</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="222"/> <source>Add Note</source> <translation>Ajouter une note</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="227"/> <source>Delete Note</source> <translation>Supprimer la note</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="238"/> <source>Restore Note</source> <translation>Restaurer la note</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="244"/> <source>Copy Note Link</source> <translation>Copier le lien vers la note</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="249"/> <source>Duplicate Note</source> <translation>Dupliquer la note</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="254"/> <source>Reminders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="258"/> <source>Remove</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="263"/> <source>Mark Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="269"/> <source>Pin Note</source> <translation>Épingler la note</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="274"/> <source>Unpin Note</source> <translation>Ne plus épingler la note</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="279"/> <source>Merge Notes</source> <translation>Fusionner les notes</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="285"/> <source>Create Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="291"/> <source>Title Color</source> <translation>Couleur du titre</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="296"/> <source>Properties</source> <translation type="unfinished">Propriétés</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="301"/> <source>White</source> <translation>Blanc</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="304"/> <source>Red</source> <translation>Rouge</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="307"/> <source>Blue</source> <translation>Bleu</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="310"/> <source>Green</source> <translation>Vert</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="313"/> <source>Yellow</source> <translation>Jaune</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="316"/> <source>Black</source> <translation>Noir</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="319"/> <source>Gray</source> <translation>Gris</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="322"/> <source>Cyan</source> <translation>Cyan</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="325"/> <source>Magenta</source> <translation>Magenta</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="663"/> <source>Delete </source> <translation>Supprimer</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="666"/> <source>Permanently delete </source> <translation>Supprimer de façon permanente</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="672"/> <source>selected note?</source> <translation>note choisie?</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="677"/> <source>Verify Delete</source> <translation>Vérifier la suppression</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="942"/> <source>Unsynchronized Note</source> <translation>Note non synchronisée</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="943"/> <source>This note has never been synchronized. Using this in a note link can cause problems unless you synchronize it first.</source> <translation>Cette note n'a jamais été synchronisée. L'utiliser dans un lien peut causer des problèmes à moins que vous ne la synchronisiez d'abord.</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1319"/> <source>Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1370"/> <source>One or more notes are unsynchronized. This can cause issues if they are later synchronized. Do you wish to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1654"/> <source>Note LID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1657"/> <source>Title</source> <translation type="unfinished">Titre</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1660"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1663"/> <source>Tags</source> <translation type="unfinished">Étiquettes</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1666"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1668"/> <location filename="../gui/ntableview.cpp" line="1676"/> <location filename="../gui/ntableview.cpp" line="1682"/> <source>No</source> <translation type="unfinished">Non</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1670"/> <location filename="../gui/ntableview.cpp" line="1674"/> <location filename="../gui/ntableview.cpp" line="1680"/> <source>Yes</source> <translation type="unfinished">Oui</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1672"/> <source>Has Encryption</source> <translation type="unfinished">Contient du chiffrement</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1678"/> <source>Has To-Do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1684"/> <source>Date Created</source> <translation type="unfinished">Date de création</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1687"/> <source>Date Updated</source> <translation type="unfinished">Date de mise à jour</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1690"/> <source>Date Deleted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1698"/> <source>Subject Date</source> <translation type="unfinished">Sujet Date</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1706"/> <source>Author</source> <translation type="unfinished">Auteur</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1710"/> <source>Longitude</source> <translation type="unfinished">Longitude</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1719"/> <source>Latitude</source> <translation type="unfinished">Latitude</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1728"/> <source>Altitude</source> <translation type="unfinished">Altitude</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1737"/> <source>Source</source> <translation type="unfinished">Source</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1740"/> <source>Source Application</source> <translation type="unfinished">Application source</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1743"/> <source>Source URL</source> <translation type="unfinished">URL source</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1746"/> <source>Reminder Due</source> <translation type="unfinished">Date de rappel</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1754"/> <source>Reminder Completed</source> <translation type="unfinished">Rappel complété</translation> </message> </context> <context> <name>NTableViewHeader</name> <message> <location filename="../gui/ntableviewheader.cpp" line="42"/> <source>Date Created</source> <translation>Date de création</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="47"/> <source>Date Updated</source> <translation>Date de mise à jour</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="52"/> <source>Title</source> <translation>Titre</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="57"/> <source>Notebook</source> <translation>Cahier de notes</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="62"/> <source>Tags</source> <translation>Étiquettes</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="67"/> <source>Author</source> <translation>Auteur</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="72"/> <source>Subject Date</source> <translation>Sujet Date</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="77"/> <source>Source</source> <translation>Source</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="82"/> <source>Source URL</source> <translation>URL source</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="87"/> <source>Latitude</source> <translation></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="92"/> <source>Longitude</source> <translation></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="97"/> <source>Altitude</source> <translation></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="102"/> <source>Has Encryption</source> <translation>Contient du chiffrement</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="107"/> <source>Has To-do</source> <translation>Contient des tâches à faire</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="112"/> <source>Synchronized</source> <translation>Synchronisée</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="117"/> <source>Size</source> <translation>Taille</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="122"/> <source>Reminder</source> <translation>Rappel</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="128"/> <source>Reminder Due</source> <translation>Date de rappel</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="133"/> <source>Reminder Completed</source> <translation>Rappel complété</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="138"/> <source>Pinned</source> <translation>Épinglée</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="143"/> <source>Thumbnail</source> <translation>Vignette</translation> </message> </context> <context> <name>NTagView</name> <message> <location filename="../gui/ntagview.cpp" line="67"/> <location filename="../gui/ntagview.cpp" line="156"/> <source>Tags from Personal</source> <translation>Étiquettes de personnel</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="91"/> <source>Create New Tag</source> <translation>Créer une nouvelle étiquette</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="100"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="107"/> <source>Rename</source> <translation>Renommer</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="110"/> <source>Merge</source> <translation>Fusionner</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="113"/> <source>Hide Unassigned</source> <translation>Cacher les non assignés</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="119"/> <source>Properties</source> <translation>Propriétés</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="154"/> <source>Tags from </source> <translation>Étiquettes de </translation> </message> <message> <location filename="../gui/ntagview.cpp" line="351"/> <source>-<Missing Tag>-</source> <translation>-<Étiquette manquante>-</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="706"/> <source>Are you sure you want to merge these tags?</source> <translation>Souhaitez-vous vraiment fusionner ces étiquettes ?</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="707"/> <source>Verify Merge</source> <translation>Vérifier la fusion</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="753"/> <source>Are you sure you want to delete this tag?</source> <translation>Souhaitez-vous vraiment supprimer cette étiquette?</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="755"/> <source>Are you sure you want to delete all selected tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="756"/> <source>Verify Delete</source> <translation>Vérifier la suppression</translation> </message> </context> <context> <name>NTitleEditor</name> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="123"/> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="137"/> <source>Untitled note</source> <translation>Note sans titre</translation> </message> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="134"/> <source>untitled note</source> <translation>note sans titre</translation> </message> </context> <context> <name>NTrashTree</name> <message> <location filename="../gui/ntrashtree.cpp" line="53"/> <source>Trash</source> <translation>Corbeille</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="65"/> <source>Restore Deleted Notes</source> <translation>Restaurer les notes supprimées</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="68"/> <source>Empty Trash</source> <translation>Vider la corbeille</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="238"/> <source>Verify Delete</source> <translation>Vérifier la suppression</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="239"/> <source>Are you sure you want to permanently delete these notes?</source> <translation>Souhaitez-vous vraiment supprimer ces notes de manière permanente ?</translation> </message> </context> <context> <name>NWebView</name> <message> <location filename="../gui/nwebview.cpp" line="56"/> <source>Open</source> <translation>Ouvrir</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="61"/> <source>Cut</source> <translation>Couper</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="66"/> <source>Copy</source> <translation>Copier</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="71"/> <source>Paste</source> <translation>Coller</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="76"/> <source>Paste as Unformatted Text</source> <translation>Coller comme texte non formaté</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="81"/> <source>Remove Formatting</source> <translation>Supprimer le formatage</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="86"/> <source>Copy Note URL</source> <translation>Copier l'URL de la note</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="93"/> <source>Background Color</source> <translation>Couleur d'arrière-plan</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="113"/> <source>To-do</source> <translation>À faire</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="120"/> <source>HTML Entities</source> <translation>Entités HTML</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="127"/> <source>Encrypted Selected Text</source> <translation>Texte sélectionné chiffré</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="132"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="137"/> <source>Insert Hyperlink</source> <translation>Insérer un hyperlien</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="142"/> <source>Quick Link</source> <translation>Lien rapide</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="147"/> <source>Remove Hyperlink</source> <translation>Supprimer un hyperlien</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="152"/> <source>Attach File</source> <translation>Attacher un fichier</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="158"/> <source>Insert LaTeX Formula</source> <translation>Insérer une formule LaTeX</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="164"/> <source>Table</source> <translation>Tableau</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="167"/> <source>Insert Table</source> <translation>Insérer un tableau</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="173"/> <source>Insert Row</source> <translation>Insérer une ligne</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="178"/> <source>Insert Column</source> <translation>Insérer une colonne</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="185"/> <source>Delete Row</source> <translation>Supprimer la ligne</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="189"/> <source>Delete Column</source> <translation>Supprimer la colonne</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="196"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="203"/> <source>Image</source> <translation>Image</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="206"/> <source>Save Image</source> <translation>Sauvegarder l'image</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="214"/> <source>Rotate Left</source> <translation>Tourner vers la gauche</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="218"/> <source>Rotate Right</source> <translation>Tourner vers la droite</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="224"/> <source>Save Attachment</source> <translation>Sauvegarder la pièce jointe</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="502"/> <location filename="../gui/nwebview.cpp" line="532"/> <source>Save File</source> <translation>Sauvegarder le fichier</translation> </message> </context> <context> <name>NixNote</name> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy Not Found</source> <translation>Tiny non trouvé</translation> </message> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy is not found on this system. Until tidy is installed you cannot save any notes.</source> <translation>Tidy n'a pas été trouvé sur ce système. Tant que tidy n'est pas installé, vous ne pourrez pas sauvegarder des notes.</translation> </message> <message> <location filename="../nixnote.cpp" line="291"/> <source>ToolBar</source> <translation>Bar d'outils</translation> </message> <message> <location filename="../nixnote.cpp" line="303"/> <source>Back</source> <translation>Précédent</translation> </message> <message> <location filename="../nixnote.cpp" line="304"/> <source>Next</source> <translation>Suivant</translation> </message> <message> <location filename="../nixnote.cpp" line="314"/> <source>All Notes</source> <translation>Toutes les notes</translation> </message> <message> <location filename="../nixnote.cpp" line="316"/> <source>Sync</source> <translation>Sync</translation> </message> <message> <location filename="../nixnote.cpp" line="319"/> <source>Print</source> <translation>Imprimer</translation> </message> <message> <location filename="../nixnote.cpp" line="329"/> <source>New Text Note</source> <translation>Nouvelle note texte</translation> </message> <message> <location filename="../nixnote.cpp" line="332"/> <source>New Webcam Note</source> <translation>Nouvelle note filmée</translation> </message> <message> <location filename="../nixnote.cpp" line="344"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> <location filename="../nixnote.cpp" line="347"/> <source>Trunk</source> <translation>Trunk</translation> </message> <message> <location filename="../nixnote.cpp" line="349"/> <source>Usage</source> <translation>Utilisation</translation> </message> <message> <location filename="../nixnote.cpp" line="531"/> <location filename="../nixnote.cpp" line="3183"/> <source>Screen Capture</source> <translation>Enregistrement de l'écran</translation> </message> <message> <location filename="../nixnote.cpp" line="547"/> <source>Show/Hide</source> <translation>Montrer/Cacher</translation> </message> <message> <location filename="../nixnote.cpp" line="559"/> <source>Close</source> <translation>Fermer</translation> </message> <message> <location filename="../nixnote.cpp" line="1799"/> <source>Confirm Restore</source> <translation>Confirmer la restauration</translation> </message> <message> <location filename="../nixnote.cpp" line="1815"/> <source>Restore Database</source> <translation>Restaurer la base de données</translation> </message> <message> <location filename="../nixnote.cpp" line="1818"/> <source>Import Notes</source> <translation>Importer des notes</translation> </message> <message> <location filename="../nixnote.cpp" line="1730"/> <location filename="../nixnote.cpp" line="1816"/> <source>NixNote Export (*.nnex);;All Files (*.*)</source> <translation>Exportation NixNote (*.nnex);;Tous les fichiers (*.*)</translation> </message> <message> <location filename="../nixnote.cpp" line="320"/> <source>Print the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="322"/> <source>Email</source> <translation type="unfinished">Courriel</translation> </message> <message> <location filename="../nixnote.cpp" line="323"/> <source>Email the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="528"/> <source>Quick Note</source> <translation>Note rapide</translation> </message> <message> <location filename="../nixnote.cpp" line="538"/> <source>Shortcut Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="540"/> <source>Pinned Notes</source> <translation>Notes épinglées</translation> </message> <message> <location filename="../nixnote.cpp" line="542"/> <source>Recently Updated Notes</source> <translation>Notes récemment modifiées</translation> </message> <message> <location filename="../nixnote.cpp" line="1437"/> <location filename="../nixnote.cpp" line="2350"/> <source>Log in to Evernote</source> <translation>Ouvrir une session Evernote</translation> </message> <message> <location filename="../nixnote.cpp" line="1439"/> <location filename="../nixnote.cpp" line="2352"/> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>NixNote</source> <translation>NixNote</translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <location filename="../nixnote.cpp" line="1761"/> <location filename="../nixnote.cpp" line="1857"/> <source>Error</source> <translation>Erreur</translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <source>No notes selected.</source> <translation>Aucune note sélectionnée.</translation> </message> <message> <location filename="../nixnote.cpp" line="1722"/> <source>Backup Database</source> <translation>Sauvegarde de la base de données</translation> </message> <message> <location filename="../nixnote.cpp" line="1724"/> <source>Export Notes</source> <translation>Exporter les notes</translation> </message> <message> <location filename="../nixnote.cpp" line="1749"/> <source>Performing backup</source> <translation>Sauvegarde en cours</translation> </message> <message> <location filename="../nixnote.cpp" line="1751"/> <source>Performing export</source> <translation>Exportation en cours</translation> </message> <message> <location filename="../nixnote.cpp" line="1768"/> <source>Database backup complete.</source> <translation>Sauvegarde de la base de données terminée.</translation> </message> <message> <location filename="../nixnote.cpp" line="1770"/> <source>Note extract complete.</source> <translation>Extraction des notes complète.</translation> </message> <message> <location filename="../nixnote.cpp" line="1796"/> <source>This is used to restore a database from backups. It is HIGHLY recommended that this only be used to populate an empty database. Restoring into a database that already has data can cause problems. Are you sure you want to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1819"/> <source>NixNote Export (*.nnex);;Evernote Export (*.enex);;All Files (*.*)</source> <translation>Exportation NixNote (*.nnex);;Exportation Evernote (*.enex);;Tous les fichiers (*.*)</translation> </message> <message> <location filename="../nixnote.cpp" line="1846"/> <source>Restoring database</source> <translation>Restauration de la base de données</translation> </message> <message> <location filename="../nixnote.cpp" line="1848"/> <source>Importing Notes</source> <translation>Importation de notes en cours</translation> </message> <message> <location filename="../nixnote.cpp" line="1880"/> <source>Database has been restored.</source> <translation>La base de données à été restaurée.</translation> </message> <message> <location filename="../nixnote.cpp" line="1882"/> <source>Notes have been imported.</source> <translation>Les notes ont été importées.</translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <location filename="../nixnote.cpp" line="1918"/> <source>Sync Error</source> <translation>Erreur de synchronisation</translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <source>Sync completed with errors.</source> <translation>Synchronisation complétée sans erreur.</translation> </message> <message> <location filename="../nixnote.cpp" line="1918"/> <source>Sync error. See message log for details</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync Complete</source> <translation>Synchronisation terminée</translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync completed successfully.</source> <translation>Synchronisation complétée avec succès.</translation> </message> <message> <location filename="../nixnote.cpp" line="2002"/> <source>Untitled note</source> <translation type="unfinished">Note sans titre</translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>Unsynchronized Note</source> <translation type="unfinished">Note non synchronisée</translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>This note has never been synchronized with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3872"/> <source>Error loading Webcam plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3887"/> <source>Error loading Hunspell plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3913"/> <location filename="../nixnote.cpp" line="3965"/> <source>PDF Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>Export complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3937"/> <source>Exporting Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3938"/> <source>Exporting notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <source>This feature is only available to premium users.</source> <translation type="vanished">Cette fonctionnalité n'est disponible qu'aux utilisateurs premium.</translation> </message> <message> <source>Premium Feature</source> <translation type="vanished">Fonctionnalité premium</translation> </message> <message> <location filename="../nixnote.cpp" line="2391"/> <location filename="../nixnote.cpp" line="2398"/> <source>Error retrieving note.</source> <translation>Erreur dans la récupération des notes.</translation> </message> <message> <location filename="../nixnote.cpp" line="2392"/> <location filename="../nixnote.cpp" line="2399"/> <source>Error retrieving note</source> <translation>Erreur dans la récupération des notes</translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <location filename="../nixnote.cpp" line="2431"/> <source>Note Restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <source>A new copy has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2431"/> <source>Note successfully restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2434"/> <source>Note restored</source> <translation>Note restaurée</translation> </message> <message> <source>No versions of this note can be found.</source> <translation type="vanished">Aucune version de cette note ne peut être trouvée.</translation> </message> <message> <source>Note Not Found</source> <translation type="vanished">La note n'a pas pu être trouvée</translation> </message> <message> <location filename="../nixnote.cpp" line="2650"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3054"/> <source>Switch to </source> <translation>Changer pour </translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex Database</source> <translation>Réindexer la base de données</translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex the entire database?</source> <translation>Entièrement réindexer la base de données ?</translation> </message> <message> <location filename="../nixnote.cpp" line="3247"/> <source>Notes will be reindexed.</source> <translation>Les notes vont être réindexées.</translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Webcam plugin not found or could not be loaded</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3281"/> <source>Unable to find webcam or capture image.</source> <translation>Impossible de trouver la webcam ou d'enregistrer une image.</translation> </message> <message> <location filename="../nixnote.cpp" line="3282"/> <source>Webcam Error</source> <translation>Erreur de la webcam</translation> </message> <message> <location filename="../nixnote.cpp" line="3432"/> <source>Note Reindexed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3444"/> <source>Delete </source> <translation>Supprimer</translation> </message> <message> <location filename="../nixnote.cpp" line="3447"/> <source>Permanently delete </source> <translation>Supprimer de façon permanente</translation> </message> <message> <location filename="../nixnote.cpp" line="3451"/> <source>this note?</source> <translation>cette note ?</translation> </message> <message> <location filename="../nixnote.cpp" line="3455"/> <source>Verify Delete</source> <translation>Vérifier la suppression</translation> </message> <message> <location filename="../nixnote.cpp" line="3816"/> <source>Press ESC to exit.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteFormatter</name> <message> <location filename="../html/noteformatter.cpp" line="657"/> <source>File</source> <translation>Fichier</translation> </message> <message> <location filename="../html/noteformatter.cpp" line="691"/> <source>Bytes</source> <translation>Octets</translation> </message> <message> <location filename="../html/noteformatter.cpp" line="695"/> <source>KB</source> <translation>ko</translation> </message> </context> <context> <name>NoteHistorySelect</name> <message> <location filename="../dialog/notehistoryselect.cpp" line="32"/> <source>Note History</source> <translation>Historique des notes</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="33"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="34"/> <source>Import</source> <translation>Importer</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="39"/> <source>Replace current note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="80"/> <source>Current copy on Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="93"/> <source>Today</source> <translation>Aujourd'hui</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="95"/> <source>Yesterday</source> <translation>Hier</translation> </message> </context> <context> <name>NoteProperties</name> <message> <location filename="../dialog/noteproperties.cpp" line="37"/> <source>Note Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/noteproperties.cpp" line="38"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NotebookProperties</name> <message> <location filename="../dialog/notebookproperties.cpp" line="38"/> <source>Notebook</source> <translation>Cahier de notes</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="42"/> <source>Synchronized</source> <translation>Synchronisé</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="46"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="52"/> <source>Name</source> <translation>Nom</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="60"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="62"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="135"/> <source>Add Notebook</source> <translation>Ajouter un cahier de notes</translation> </message> </context> <context> <name>OAuthWindow</name> <message> <location filename="../oauth/oauthwindow.cpp" line="70"/> <source>Please Grant NixNote Access</source> <translation>Veuillez accorder l'accès à NixNote</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="81"/> <source>SSL Support not found. Aborting connection</source> <translation>Support pour SSL non trouvé, connexion annulée</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="132"/> <source>Error receiving temporary credentials</source> <translation>Erreur pendant la réception des crédentials</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="176"/> <source>Error receiving permanent credentials</source> <translation>Erreur pendant la réception des crédentials permanents</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="219"/> <source>Error receiving authorization</source> <translation>Erreur pendant la réception de l'autorisation</translation> </message> </context> <context> <name>PopplerViewer</name> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source>Page </source> <translation>Page </translation> </message> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source> of </source> <translation> sur </translation> </message> </context> <context> <name>PreferencesDialog</name> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="30"/> <source>User Settings</source> <translation>Paramètres utilisateur</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="49"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="50"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="92"/> <source>Appearance</source> <translation>Apparence</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="98"/> <source>Locale</source> <translation>Locale</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="104"/> <source>Search</source> <translation>Recherche</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="110"/> <source>Sync</source> <translation>Sync</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="116"/> <source>Email</source> <translation type="unfinished">Courriel</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="121"/> <source>Thumbnail</source> <translation type="unfinished">Vignette</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="127"/> <source>Advanced</source> <translation type="unfinished"></translation> </message> <message> <source>Debugging</source> <translation type="vanished">Débogage</translation> </message> </context> <context> <name>QApplication</name> <message> <location filename="../dialog/screencapture.cpp" line="108"/> <source>Use your mouse to draw a rectangle to screenshot or exit pressing any key or using the right or middle mouse buttons.</source> <translation>Utilisez votre souris pour dessiner un rectangle à capturer, ou annuler en appuyant sur n'importe quelle touche.</translation> </message> <message> <location filename="../dialog/screencapture.cpp" line="145"/> <source>%1 x %2 pixels </source> <translation>%1 x %2 pixels</translation> </message> </context> <context> <name>QObject</name> <message> <location filename="../gui/ntableview.cpp" line="175"/> <source>Title</source> <translation>Titre</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="176"/> <source>Author</source> <translation>Auteur</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="177"/> <source>Notebook</source> <translation>Cahier de notes</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="178"/> <source>Tags</source> <translation>Étiquettes</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="179"/> <source>Date Created</source> <translation>Date de création</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="180"/> <source>Date Updated</source> <translation>Date de mise à jour</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="181"/> <source>Subject Date</source> <translation>Sujet Date</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="182"/> <source>Deletion Date</source> <translation>Date de suppression</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="183"/> <source>Reminder</source> <translation>Rappel</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="184"/> <source>Reminder Due</source> <translation>Date de rappel</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="185"/> <source>Reminder Completed</source> <translation>Rappel complété</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="186"/> <source>Source</source> <translation>Source</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="187"/> <source>Source URL</source> <translation type="unfinished">URL source</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="188"/> <source>Source Application</source> <translation>Application source</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="189"/> <source>Longitude</source> <translation>Longitude</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="190"/> <source>Latitude</source> <translation>Latitude</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="191"/> <source>Altitude</source> <translation>Altitude</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="192"/> <source>Has Encryption</source> <translation>Contient du chiffrement</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="193"/> <source>Has To-do</source> <translation>Contient des tâches à faire</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="194"/> <source>Sync</source> <translation>Sync</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="195"/> <source>Size</source> <translation>Taille</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="196"/> <source>Thumbnail</source> <translation>Vignette</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="197"/> <source>Pinned</source> <translation>Épinglée</translation> </message> </context> <context> <name>ReminderButton</name> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="35"/> <source>Mark as Done</source> <translation>Marquer comme fait</translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="36"/> <source>Change Date</source> <translation>Changer la date</translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="37"/> <source>Clear Reminder</source> <translation>Supprimer le rappel</translation> </message> </context> <context> <name>ReminderManager</name> <message> <location filename="../reminders/remindermanager.cpp" line="85"/> <source>Reminders Due</source> <translation>Rappels dus</translation> </message> </context> <context> <name>ReminderSetDialog</name> <message> <location filename="../dialog/remindersetdialog.cpp" line="47"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/remindersetdialog.cpp" line="48"/> <source>Cancel</source> <translation>Annuler</translation> </message> </context> <context> <name>RemoteQuery</name> <message> <location filename="../filters/remotequery.cpp" line="113"/> <location filename="../filters/remotequery.cpp" line="130"/> <source>Today</source> <translation>Aujourd'hui</translation> </message> </context> <context> <name>SavedSearchProperties</name> <message> <location filename="../dialog/savedsearchproperties.cpp" line="35"/> <source>Saved Search</source> <translation>Recherche sauvegardée</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="42"/> <source>Name</source> <translation>Nom</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="43"/> <source>Query</source> <translation>Requête</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="51"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="53"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="106"/> <source>Add Saved Search</source> <translation>Ajouter la recherche sauvegardée</translation> </message> </context> <context> <name>SearchPreferences</name> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="36"/> <source>Index Attachments</source> <translation>Indexer les pièces jointes</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="44"/> <source>Clear Notebook Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="48"/> <source>Clear Tag Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="52"/> <source>Clear Search Text on Notebook Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="56"/> <source>Show Any Matching Tags When Selecting Multiple Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="60"/> <source>Index PDFs locally</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="64"/> <source>Background Indexing (requires restart & may cause issues on some systems)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="68"/> <source>Experimental: Force search to lower case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="73"/> <source>Minimum Image Recognition Weight</source> <translation>Poids minimal de reconnaisance de l'image</translation> </message> </context> <context> <name>ShortcutDialog</name> <message> <location filename="../dialog/shortcutdialog.cpp" line="41"/> <source>Defined Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/shortcutdialog.cpp" line="42"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SpellCheckDialog</name> <message> <location filename="../dialog/spellcheckdialog.cpp" line="35"/> <source>Spell Check</source> <translation>Vérification de l'orthographe</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="50"/> <source>Suggestion</source> <translation>Suggestion</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="56"/> <source>Replace</source> <translation>Remplacer</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="57"/> <source>Ignore</source> <translation>Ignorer</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="58"/> <source>Ignore All</source> <translation>Ignorer tout</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="59"/> <source>Add To Dictionary</source> <translation>Ajouter au dictionnaire</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="66"/> <source>Cancel</source> <translation>Annuler</translation> </message> </context> <context> <name>SpellChecker</name> <message> <source>Unable to find dictionaries. Is Huntspell installed?</source> <translation type="vanished">Dictionnaires introuvables. Est-ce que Huntspell est installé ?</translation> </message> </context> <context> <name>SyncPreferences</name> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="34"/> <source>Sync automatically</source> <translation>Synchronisation automatique</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="38"/> <source>Every 15 minutes</source> <translation>Chaque 15 minutes</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="39"/> <source>Every 30 minutes</source> <translation>Chaque 30 minutes</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="40"/> <source>Every hour</source> <translation>Chaque heures</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="41"/> <source>Every day</source> <translation>Chaque jours</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="43"/> <source>Sync on startup</source> <translation>Synchronisation au démarrage</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="45"/> <source>Sync on shutdown</source> <translation>Synchronisation à la fermeture</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="47"/> <source>Enable sync notifications</source> <translation>Activer les notifications de synchronisation</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="48"/> <source>Show successful syncs</source> <translation>Montrer les synchronisations réussies</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="49"/> <source>Restart sync on API limit (experimental)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="51"/> <source>Enable Proxy*</source> <translation>Activer le proxy*</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="52"/> <source>Enable Socks5</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="53"/> <source>Proxy Hostname</source> <translation>Nom d'hôte du proxy</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="54"/> <source>Proxy Port</source> <translation>Port du proxy</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="55"/> <source>Proxy Username</source> <translation>Nom d'utilisateur du proxy</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="56"/> <source>Proxy Password</source> <translation>Mot de passe du proxy</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="57"/> <source>*Note: Restart required</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="73"/> <source>Popup message on sync errors.</source> <translation type="unfinished"></translation> </message> <message> <source>Note: Restart required</source> <translation type="vanished">Note : redémarrage requis</translation> </message> </context> <context> <name>SyncRunner</name> <message> <location filename="../threads/syncrunner.cpp" line="134"/> <source>Beginning Sync</source> <translation>Synchronisation en cours</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="142"/> <source>Downloading changes</source> <translation>Téléchargement des changements</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="192"/> <source>Sync Complete Successfully</source> <translation>Synchronisation complétée avec succès</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <location filename="../threads/syncrunner.cpp" line="267"/> <source>Download </source> <translation>Téléchargement </translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <source>% complete for notebooks, tags, & searches.</source> <translation>% complet pour les cahiers, étiquettes et recherches.</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="247"/> <source>Download complete for notebooks, tags, & searches. Downloading notes.</source> <translation>Téléchargement terminé pour les cahiers, étiquettes et recherches. Téléchargement des notes.</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="267"/> <source>% complete.</source> <translation>% terminé.</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="280"/> <source>Download complete.</source> <translation>Téléchargement terminé.</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>Downloading </source> <translation>Téléchargement </translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <source>% complete for tags in shared notebook </source> <translation>% complétés pour les étiquettes dans les cahiers partagés </translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="721"/> <source>Downloading notes for shared notebook </source> <translation>Téléchargement des notes des cahiers partagés </translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="743"/> <source>% complete for shared notebook </source> <translation>% complété pour les cahiers partagés </translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1149"/> <source>Error uploading note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1151"/> <source>Error uploading note with a missing title!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="721"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>.</source> <translation>.</translation> </message> </context> <context> <name>TableDialog</name> <message> <location filename="../dialog/tabledialog.cpp" line="30"/> <source>Insert Table</source> <translation>Insérer un tableau</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="34"/> <source>Percent</source> <translation>Pourcent</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="35"/> <source>Pixels</source> <translation>Pixels</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="51"/> <source>Rows</source> <translation>Lignes</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="53"/> <source>Columns</source> <translation>Colonnes</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="55"/> <source>Width</source> <translation>Largeur</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="57"/> <source>Unit</source> <translation>Unité</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="64"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="67"/> <source>Cancel</source> <translation>Annuler</translation> </message> </context> <context> <name>TablePropertiesDialog</name> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="72"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="105"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="86"/> <source>Cancel</source> <translation type="unfinished">Annuler</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="87"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="106"/> <source>Cell Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="214"/> <source>Row 1 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="216"/> <source>Row 1 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="218"/> <source>Row 1 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="220"/> <source>Row 2 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="222"/> <source>Row 2 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="224"/> <source>Row 2 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="226"/> <source>Row 3 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="228"/> <source>Row 3 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="230"/> <source>Row 3 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="456"/> <source>Width</source> <translation type="unfinished">Largeur</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="464"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="480"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="494"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="511"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="526"/> <source>Percent</source> <translation type="unfinished">Pourcent</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="465"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="479"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="493"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="510"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="525"/> <source>Pixels</source> <translation type="unfinished">Pixels</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="476"/> <source>Top Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="490"/> <source>Bottom Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="507"/> <source>Left Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="522"/> <source>Right Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="560"/> <source>Border Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="561"/> <source>Font Color</source> <translation type="unfinished">Couleur de la police</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="562"/> <source>Background Color</source> <translation type="unfinished">Couleur d'arrière-plan</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="576"/> <source>Border Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="587"/> <source>Padding</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="597"/> <source>Top Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="606"/> <source>Bottom Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="615"/> <source>Left Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="624"/> <source>Right Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="636"/> <source>Horizontal Alignment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="641"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="642"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="643"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="644"/> <source>Center</source> <translation type="unfinished">Centrer</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="676"/> <source>Solid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="677"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="678"/> <source>Dotted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="679"/> <source>Dashed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="680"/> <source>Double</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="681"/> <source>Ridge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="682"/> <source>Inset</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="683"/> <source>Outset</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagEditorNewTag</name> <message> <location filename="../gui/browserWidgets/tageditornewtag.cpp" line="55"/> <source>Click to add tag...</source> <translation>Cliquer pour ajouter une étiquette...</translation> </message> </context> <context> <name>TagProperties</name> <message> <location filename="../dialog/tagproperties.cpp" line="36"/> <source>Tag</source> <translation>Étiquette</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="42"/> <source>Name</source> <translation>Nom</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="48"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="50"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="102"/> <source>Add Tag</source> <translation>Ajouter une étiquette</translation> </message> </context> <context> <name>ThumbnailPreferences</name> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="14"/> <source>Disable thumbnail generation</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="15"/> <source>Images to generate per interval</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="16"/> <source>Minimum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="17"/> <source>Maximum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>UrlEditor</name> <message> <location filename="../gui/browserWidgets/urleditor.cpp" line="45"/> <source>Click to set source URL...</source> <translation>Indiquer l'URL source...</translation> </message> </context> <context> <name>WatchFolderAdd</name> <message> <location filename="../dialog/watchfolderadd.cpp" line="47"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="51"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="55"/> <source>Directory</source> <translation>Répertoire</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="63"/> <source>Keep</source> <translation>Conserver</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="64"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="90"/> <source>Notebook</source> <translation>Carnet de notes</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="92"/> <source>After import</source> <translation>Après l'import</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="94"/> <source>Include subdirectories</source> <translation>Inclure les sous-répertoires</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="101"/> <source>Add Import Folder</source> <translation>Ajouter un répertoire d'importation</translation> </message> </context> <context> <name>WatchFolderDialog</name> <message> <location filename="../dialog/watchfolderdialog.cpp" line="38"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="42"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="50"/> <source>Auto Import Folders</source> <translation>Importer les répertoires automatiquement</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="62"/> <source>Add</source> <translation>Ajouter</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="66"/> <source>Edit</source> <translation>Éditer</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="71"/> <location filename="../dialog/watchfolderdialog.cpp" line="162"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="112"/> <source>Directory</source> <translation>Répertoire</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="113"/> <source>Target Notebook</source> <translation>Carnet de note destination</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="114"/> <location filename="../dialog/watchfolderdialog.cpp" line="159"/> <source>Keep</source> <translation>Conserver</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="115"/> <source>Include Subdirectories</source> <translation>Inclure les sous-répertoires</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="169"/> <source>Yes</source> <translation>Oui</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="172"/> <source>No</source> <translation>Non</translation> </message> </context> </TS> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/translations/nixnote2_ja.ts����������������������������������������������������������0000664�0000000�0000000�00000623636�13156041044�0020610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="ja_JP"> <context> <name>AboutDialog</name> <message> <location filename="../dialog/aboutdialog.cpp" line="36"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/aboutdialog.cpp" line="53"/> <source>Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountDialog</name> <message> <location filename="../dialog/accountdialog.cpp" line="37"/> <source>Account Information</source> <translatorcomment>Evernote Windows版ã®è¨³èªž</translatorcomment> <translation>アカウントレベル</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="40"/> <source>Normal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="46"/> <source>Premium</source> <translation>プレミアム</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="48"/> <source>VIP</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="50"/> <source>Manager</source> <translatorcomment>ビジãƒã‚¹ãƒ—レミアムã®ãƒ­ãƒ¼ãƒ«</translatorcomment> <translation>管ç†è€…</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="52"/> <source>Support</source> <translation type="unfinished">サãƒãƒ¼ãƒˆæ‹…当</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="54"/> <source>Admin</source> <translatorcomment>対応ã™ã‚‹è¨³ãŒä¸æ˜Ž</translatorcomment> <translation type="unfinished">Admin</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="75"/> <source> Bytes</source> <translation>ãƒã‚¤ãƒˆ</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="79"/> <source> KB</source> <translation>キロãƒã‚¤ãƒˆ</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="83"/> <source> MB</source> <translation>メガãƒã‚¤ãƒˆ</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="90"/> <source>Account:</source> <translation>アカウント:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="93"/> <source>User Name:</source> <translation>ユーザå:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="95"/> <source>Account Type:</source> <translation>アカウントタイプ:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="97"/> <source>Limit:</source> <translatorcomment>Evernote Windows版ã®ç”¨èªž</translatorcomment> <translation>使用é‡ä¸Šé™ï¼š</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="99"/> <source>Uploaded In This Period:</source> <translatorcomment>Evernote Windows版ã®è¨³ã«ã‚ã‚ã›ã‚‹</translatorcomment> <translation>今月ã®ä½¿ç”¨çжæ³ï¼š</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="103"/> <source>Less than 1MB</source> <translation>1MB未満</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="104"/> <source>Current Cycle Ends:</source> <translation>サイクル終了日:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="112"/> <source>OK</source> <translation>OK</translation> </message> </context> <context> <name>AccountMaintenanceDialog</name> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="34"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="35"/> <source>Close</source> <translation>é–‰ã˜ã‚‹</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="36"/> <source>Add</source> <translation>追加</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="37"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="38"/> <source>Delete</source> <translation>削除</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="64"/> <source>User Account Maintenance</source> <translation>ユーザアカウント管ç†</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="104"/> <source>Are you sure you want to delete this account?</source> <translation>ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’本当ã«å‰Šé™¤ã—ã¦è‰¯ã„ã§ã™ã‹ï¼Ÿ</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="105"/> <source>Verify Delete</source> <translation>削除ã®ç¢ºèª</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="117"/> <source>You cannot delete the active account.</source> <translation>動作中ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’削除ã§ãã¾ã›ã‚“.</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="170"/> <location filename="../dialog/accountmaintenancedialog.cpp" line="194"/> <source>Switch to </source> <translation>切り替ãˆ</translation> </message> </context> <context> <name>AddNote</name> <message> <location filename="../cmdtools/addnote.cpp" line="33"/> <source>Untitled Note</source> <translation type="unfinished">タイトルã®ãªã„ノート</translation> </message> </context> <context> <name>AddUserAccountDialog</name> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="38"/> <source>Server</source> <translation>サーãƒ</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="39"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="41"/> <source>Cancel</source> <translation>キャンセル</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="46"/> <source>Account Name</source> <translation>アカウントå</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="69"/> <source>Evernote</source> <translation>Evernote</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="70"/> <source>Yinxiang Biji</source> <translation>å°è±¡ç¬”记(中国版Evernote)</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="71"/> <source>Evernote Sandbox</source> <translation>Evernoteサンドボックス(開発版)</translation> </message> </context> <context> <name>AppearancePreferences</name> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="39"/> <source>Show tray icon</source> <translation>トレイアイコン表示</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="40"/> <source>Display PDFs inline**</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="41"/> <source>Show splash screen on startup</source> <translation>スプラッシュ画é¢ã‚’開始時ã«è¡¨ç¤º</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="42"/> <source>Start automatically at login</source> <translation>ログイン時ã«è‡ªå‹•é–‹å§‹</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="43"/> <source>Confirm Deletes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="44"/> <source>Show missed reminders on startup</source> <translation>é–‹å§‹æ™‚ã«æœªè¡¨ç¤ºã®ãƒªãƒžã‚¤ãƒ³ãƒ€ãƒ¼ã‚’表示</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="45"/> <source>Always Start minimized</source> <translation>å¸¸ã«æœ€å°åŒ–ã§é–‹å§‹</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="46"/> <source>Show notebook and tag totals</source> <translation>ノートブックã¨ã‚¿ã‚°ã®ç·æ•°ã‚’表示</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="47"/> <source>Auto-Hide editor toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="49"/> <source>Disable note editing on statup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="50"/> <source>Focus on Note Title on New Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="51"/> <source>Limit Editor to Web Fonts*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="53"/> <source>Show note list grid*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="54"/> <source>Alternate note list colors*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="55"/> <source>Set author on new notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="57"/> <source>Preview fonts in editor dialag*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="61"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="68"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="75"/> <source>Do Nothing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="62"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="69"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="76"/> <source>Show/Hide NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="63"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="70"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="77"/> <source>New Text Note</source> <translation type="unfinished">æ–°è¦ãƒ†ã‚­ã‚¹ãƒˆãƒŽãƒ¼ãƒˆ</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="64"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="71"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="78"/> <source>New Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="65"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="72"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="79"/> <source>Screen Capture</source> <translation type="unfinished">スクリーンキャプãƒãƒ£</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="82"/> <source>Open New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="83"/> <source>Open New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="98"/> <source>Qt Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="99"/> <source>notify-send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="106"/> <source>Startup Behavior</source> <translation>起動時ã®å‹•作</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="108"/> <source>Restore Selection Criteria</source> <translation type="unfinished">é¸æŠžæ–¹æ³•ã‚’ãƒªã‚¹ãƒˆã‚¢ã™ã‚‹</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="109"/> <source>Select Default Notebook</source> <translation>既定ã®ãƒŽãƒ¼ãƒˆãƒ–ãƒƒã‚¯ã‚’é¸æŠž</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="110"/> <source>View All Notebooks</source> <translation>å…¨ã¦ã®ãƒŽãƒ¼ãƒˆãƒ–ックを表示</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="120"/> <source>Minimize to tray</source> <translation>ãƒˆãƒ¬ã‚¤ã«æœ€å°åŒ–</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="121"/> <source>Close to tray</source> <translation>トレイã¸é–‰ã˜ã‚‹</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="143"/> <source>Notification Service</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="146"/> <source>Middle Click Open Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="149"/> <source>Tray Icon Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="152"/> <source>Tray Icon Middle Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="155"/> <source>Tray Icon Double Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="158"/> <source>Default GUI Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="161"/> <source>Default GUI Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="164"/> <source>Default Editor Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="167"/> <source>Default Editor Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="171"/> <source>* May require restart on some systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="172"/> <source>** Can crash on Gnome systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="102"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="405"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="423"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="442"/> <source>System Default</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AttachmentIconBuilder</name> <message> <location filename="../html/attachmenticonbuilder.cpp" line="74"/> <source>Bytes</source> <translation>ãƒã‚¤ãƒˆ</translation> </message> <message> <location filename="../html/attachmenticonbuilder.cpp" line="78"/> <source>KB</source> <translation>キロãƒã‚¤ãƒˆ</translation> </message> </context> <context> <name>AuthorEditor</name> <message> <location filename="../gui/browserWidgets/authoreditor.cpp" line="37"/> <source>Click to set author</source> <translation>著者設定</translation> </message> </context> <context> <name>BatchImport</name> <message> <location filename="../xml/batchimport.cpp" line="112"/> <source>Untitled Note</source> <translation type="unfinished">タイトルã®ãªã„ノート</translation> </message> </context> <context> <name>CloseNotebookDialog</name> <message> <location filename="../dialog/closenotebookdialog.cpp" line="37"/> <source>Open/Close Notebooks</source> <translation>ノートブックã®è¡¨ç¤º/éžè¡¨ç¤º</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="42"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="43"/> <source>Cancel</source> <translation>キャンセル</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="56"/> <source>Open Notebooks</source> <translation>ノートブックを開ã</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="57"/> <source>Closed Notebooks</source> <translation>ノートブックを閉ã˜ã‚‹</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="59"/> <source>Open</source> <translation>é–‹ã</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="60"/> <source>Close</source> <translation>é–‰ã˜ã‚‹</translation> </message> </context> <context> <name>CmdLineQuery</name> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="67"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="69"/> <source>Title</source> <translation type="unfinished">タイトル</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="72"/> <source>Notebook</source> <translation type="unfinished">ノートブック</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="75"/> <source>Tags</source> <translation type="unfinished">ã‚¿ã‚°</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="78"/> <source>Created</source> <translation type="unfinished">ä½œæˆæ—¥</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="81"/> <source>Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="84"/> <source>Sync</source> <translation type="unfinished">åŒæœŸ</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="87"/> <source>Source URL</source> <translation type="unfinished">ソースURL</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="90"/> <source>Author</source> <translation type="unfinished">作者</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="93"/> <source>Todo</source> <translation type="unfinished">ã‚„ã‚‹ã“ã¨ãƒªã‚¹ãƒˆ</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="96"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="99"/> <source>Reminder Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="181"/> <location filename="../cmdtools/cmdlinequery.cpp" line="190"/> <source>No</source> <translation type="unfinished">ã„ã„ãˆ</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="183"/> <location filename="../cmdtools/cmdlinequery.cpp" line="188"/> <source>Yes</source> <translation type="unfinished">ã¯ã„</translation> </message> </context> <context> <name>CmdLineTool</name> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="56"/> <source>Unable to attach to shared memory segment. Is the other NixNote running? </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="315"/> <location filename="../cmdtools/cmdlinetool.cpp" line="452"/> <source> has been created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="318"/> <source>No response from NixNote. Please verify that the note was created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="332"/> <source>Untitled Note</source> <translation type="unfinished">タイトルã®ãªã„ノート</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="535"/> <source> was not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="538"/> <location filename="../cmdtools/cmdlinetool.cpp" line="609"/> <source> has been appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="541"/> <source>No response from NixNote. Please verify that the note was appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="552"/> <source> was not found. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="221"/> <location filename="../cmdtools/cmdlinetool.cpp" line="654"/> <source>No response received from NixNote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="156"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="663"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="674"/> <location filename="../cmdtools/cmdlinetool.cpp" line="690"/> <location filename="../cmdtools/cmdlinetool.cpp" line="722"/> <location filename="../cmdtools/cmdlinetool.cpp" line="742"/> <source>This cannot be done with NixNote running.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="732"/> <location filename="../cmdtools/cmdlinetool.cpp" line="752"/> <source>Notebook not found: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="765"/> <source>OAuth token not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="783"/> <source>Error synchronizing with Evernote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="786"/> <source>Sync completed.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ColorSettings</name> <message> <location filename="../settings/colorsettings.cpp" line="37"/> <source>White</source> <translation type="unfinished">白</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="38"/> <source>Red</source> <translation type="unfinished">赤</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="39"/> <source>Blue</source> <translation type="unfinished">é’</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="40"/> <source>Green</source> <translation type="unfinished">ç·‘</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="41"/> <source>Yellow</source> <translation type="unfinished">黄</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="42"/> <source>Black</source> <translation type="unfinished">é»’</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="43"/> <source>Purple</source> <translation type="unfinished">ç´«</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="44"/> <source>Brown</source> <translation type="unfinished">茶</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="45"/> <source>Orange</source> <translation type="unfinished">æ©™</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="46"/> <source>Grey</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="47"/> <source>Powder Blue</source> <translation type="unfinished">パウダーブルー</translation> </message> </context> <context> <name>CommunicationManager</name> <message> <location filename="../communication/communicationmanager.cpp" line="675"/> <source>Linked notebook notestore URL missing.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source>API rate limit exceeded. Please try again in </source> <translation>APIã®æ›´æ–°åˆ¶é™ã‚’è¶…ãˆã¾ã—ãŸã€‚æ¬¡ã®æ™‚間経éŽå¾Œã€å†åº¦è©¦ã¿ã¦ãã ã•ã„ </translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <source> minutes.</source> <translation>分。</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source> minute.</source> <translation>分。</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1206"/> <source>EDAMSystemException </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1208"/> <source>EDAMSystemException: Unknown error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1232"/> <source>EDAMNotFoundException: Note not found</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DatabaseStatus</name> <message> <location filename="../dialog/databasestatus.cpp" line="35"/> <source>Database Status</source> <translation>データベースã®çŠ¶æ…‹</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="47"/> <source>Total Notes:</source> <translation>全ノート:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="49"/> <source>Total Resources:</source> <translation>トータルã®è³‡æºï¼š</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="51"/> <source>Unindexed Notes:</source> <translation>索引å‰ãƒŽãƒ¼ãƒˆ:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="53"/> <source>Unindexed Resources:</source> <translation>インデックスã•れã¦ã„ãªã„資æºï¼š</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="55"/> <source>Thumbnails Needed:</source> <translation>サムãƒã‚¤ãƒ«åŒ–ãŒå¿…è¦ï¼š</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="60"/> <source>OK</source> <translation>OK</translation> </message> </context> <context> <name>DateDelegate</name> <message> <location filename="../gui/datedelegate.cpp" line="42"/> <source>Today</source> <translation>今日</translation> </message> </context> <context> <name>DateEditor</name> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="38"/> <source>Created:</source> <translation>ä½œæˆæ—¥:</translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="42"/> <source>Updated:</source> <translation>更新日:</translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="46"/> <source>Subject:</source> <translation>タイトル:</translation> </message> </context> <context> <name>DebugPreferences</name> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="38"/> <source>Disable image search highlighting.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="35"/> <source>Strict note checking.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="37"/> <source>Disable uploads to server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="39"/> <source>Show LID column (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="40"/> <source>Disable Tag Sorting (useful for non-ASCII sort bug).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="41"/> <source>Force UTF8 Encoding.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="59"/> <source>Intercept Unix SIGHUP (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="64"/> <source>Use multipe theads to save note contents (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="68"/> <source>Use libtidy directly (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="72"/> <source>Auto-Save Interval (in seconds).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="79"/> <source>Message Level</source> <translation>メッセージレベル</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="82"/> <source>Trace</source> <translation>トレース</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="83"/> <source>Debug</source> <translation>デãƒãƒƒã‚°</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="84"/> <source>Info</source> <translation>情報</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="85"/> <source>Warnings</source> <translation>警告</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="86"/> <source>Errors</source> <translation>エラー</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="87"/> <source>Fatal</source> <translation>é‡å¤§ãªã‚¨ãƒ©ãƒ¼</translation> </message> </context> <context> <name>EditorButtonBar</name> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="37"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="133"/> <source>Undo</source> <translation>å…ƒã«æˆ»ã™</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="38"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="137"/> <source>Redo</source> <translation>やり直ã™</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="39"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="142"/> <source>Cut</source> <translation>切りå–り</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="40"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="146"/> <source>Copy</source> <translation>コピー</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="41"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="150"/> <source>Paste</source> <translation>貼り付ã‘</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="42"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="153"/> <source>Remove Formatting</source> <translation>書å¼ã®å‰Šé™¤</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="43"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="159"/> <source>Bold</source> <translation>太字</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="44"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="166"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="167"/> <source>Italics</source> <translation>イタリック体</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="45"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="184"/> <source>Superscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="46"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="188"/> <source>Subscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="47"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="174"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="175"/> <source>Underline</source> <translation>下線</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="48"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="180"/> <source>Strikethrough</source> <translation>å–æ¶ˆç·š</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="49"/> <source>Align Left</source> <translation>左寄ã›</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="50"/> <source>Align Center</source> <translation>中央寄ã›</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="51"/> <source>Align Full</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="52"/> <source>Align Right</source> <translation>å³å¯„ã›</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="53"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="208"/> <source>Horizontal Line</source> <translation>水平線</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="54"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="55"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="220"/> <source>Shift Right</source> <translation>å³ã¸ã‚·ãƒ•ト</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="56"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="224"/> <source>Shift Left</source> <translation>å·¦ã¸ã‚·ãƒ•ト</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="57"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="228"/> <source>Bullet List</source> <translation>ç®‡æ¡æ›¸ã</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="58"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="232"/> <source>Number List</source> <translation>番å·ã¤ãリスト</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="59"/> <source>Font</source> <translation>フォント</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="60"/> <source>Font Size</source> <translation>フォントã®ã‚µã‚¤ã‚º</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="61"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="248"/> <source>Font Color</source> <translation>フォントã®è‰²</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="62"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="257"/> <source>Highlight</source> <translation>ãƒã‚¤ãƒ©ã‚¤ãƒˆ</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="63"/> <source>To-do</source> <translation type="unfinished">To-Do</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="192"/> <source>Center Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="196"/> <source>Fully Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="214"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="215"/> <source>Insert Date & Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="262"/> <source>Todo</source> <translation type="unfinished">ã‚„ã‚‹ã“ã¨ãƒªã‚¹ãƒˆ</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="64"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="266"/> <source>Spell Check</source> <translation>スペルãƒã‚§ãƒƒã‚¯</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="65"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="270"/> <source>Insert Table</source> <translation>è¡¨ã®æŒ¿å…¥</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="66"/> <source>HTML Entities</source> <translation>HTMLエンティティ</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="204"/> <source>Left Justify</source> <translation>å·¦æƒãˆ</translation> </message> <message> <source>Center</source> <translation type="vanished">中央</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="200"/> <source>Right Justify</source> <translation>峿ƒãˆ</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="274"/> <source>Insert HTML Entities</source> <translation>HTMLã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ã®æŒ¿å…¥</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="661"/> <source>Times</source> <translation type="unfinished">回数</translation> </message> </context> <context> <name>EmailDialog</name> <message> <location filename="../dialog/emaildialog.cpp" line="36"/> <source>Send Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="38"/> <source>Send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="39"/> <source>Cancel</source> <translation type="unfinished">キャンセル</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="51"/> <source>To:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="53"/> <source>BCC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="55"/> <source>CC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="57"/> <source>Subject:</source> <translation type="unfinished">タイトル:</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="59"/> <source>Note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="77"/> <source>CC me on this email</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailNote</name> <message> <location filename="../cmdtools/emailnote.cpp" line="261"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="327"/> <source>Connection Error: Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="333"/> <source>Login Error : Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="338"/> <source>Send Error : Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="344"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailPreferences</name> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="17"/> <source>SMTP Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="18"/> <source>Server Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="19"/> <source>Userid</source> <translation type="unfinished">ユーザID</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="20"/> <source>Password</source> <translation type="unfinished">パスワード</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="21"/> <source>Sender Display Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="22"/> <source>Sender Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="23"/> <source>Connection Type</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="31"/> <source>Plain Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="32"/> <source>SSL Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="33"/> <source>TLS Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="35"/> <source>Send Test Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="108"/> <location filename="../dialog/preferences/emailpreferences.cpp" line="113"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="109"/> <source>You must specify a SMTP server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="114"/> <source>You must specify a sender email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="146"/> <source>Test Email From NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="152"/> <source><h1>This is a test email from NixNote.</h1> </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="153"/> <source>If you are reading it then your email preferences are are setup properly.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message sent.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnCryptDialog</name> <message> <location filename="../dialog/encryptdialog.cpp" line="31"/> <source>Encrypt Text</source> <translation>ãƒ†ã‚­ã‚¹ãƒˆã®æš—å·åŒ–</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="47"/> <source>Password</source> <translation>パスワード</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="49"/> <source>Verify</source> <translation>確èª</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="51"/> <source>Hint</source> <translation>ヒント</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="53"/> <source>Remember Password</source> <translation>パスワードを記憶ã™ã‚‹</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="61"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="65"/> <source>Cancel</source> <translation>キャンセル</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="113"/> <source>Password must be at least 4 characters</source> <translation>パスワードã¯å°‘ãªãã¨ã‚‚4文字必è¦ã§ã™</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="117"/> <source>Passwords do not match</source> <translation>パスワードãŒä¸€è‡´ã—ãªã„</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="121"/> <source>Hint must be entered</source> <translation>ヒントã¯å¿…ãšå…¥åŠ›ãŒå¿…è¦ã§ã™</translation> </message> </context> <context> <name>EnDecryptDialog</name> <message> <location filename="../dialog/endecryptdialog.cpp" line="35"/> <source>Decrypt</source> <translation>復å·</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="51"/> <source>Password</source> <translation>パスワード</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="52"/> <source>Hint</source> <translation>ヒント</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="59"/> <source>Permanently Decrypt</source> <translation>永久ã«è¤‡å·ã™ã‚‹</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="61"/> <source>Remember Password</source> <translation>パスワードを記憶ã™ã‚‹</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="66"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="70"/> <source>Cancel</source> <translation>キャンセル</translation> </message> </context> <context> <name>ExportData</name> <message> <location filename="../xml/exportdata.cpp" line="54"/> <source>Cannot open file.</source> <translation>ファイルを開ã‘ã¾ã›ã‚“</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="62"/> <source>Export</source> <translation>エキスãƒãƒ¼ãƒˆ</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="81"/> <source>Backup</source> <translation>ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="114"/> <source>Tags</source> <translation>ã‚¿ã‚°</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="151"/> <source>Notebooks</source> <translation>ノートブック</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="360"/> <source>Searches</source> <translation>検索</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="405"/> <source>Linked Notebooks</source> <translation>リンクã•れãŸãƒŽãƒ¼ãƒˆãƒ–ック</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="448"/> <source>Shared Notebooks</source> <translation>共有ã•れãŸãƒŽãƒ¼ãƒˆãƒ–ック</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="508"/> <source>Notes</source> <translation>ノート</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="725"/> <source>Backup Canceled</source> <translation>ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ãŒã‚­ãƒ£ãƒ³ã‚»ãƒ«ã•れã¾ã™</translation> </message> </context> <context> <name>ExternalBrowse</name> <message> <location filename="../gui/externalbrowse.cpp" line="32"/> <source>NixNote</source> <translation>NixNote</translation> </message> <message> <location filename="../gui/externalbrowse.cpp" line="124"/> <source>NixNote - </source> <translation>NixNote - </translation> </message> </context> <context> <name>ExtractNotes</name> <message> <location filename="../cmdtools/extractnotes.cpp" line="41"/> <location filename="../cmdtools/extractnotes.cpp" line="82"/> <source>Output file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="64"/> <source>Deleting notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="65"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FavoritesView</name> <message> <location filename="../gui/favoritesview.cpp" line="68"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="90"/> <source>Remove from shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="565"/> <source>Are you sure you want to remove this shortcut?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="566"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>FileWatcher</name> <message> <location filename="../watcher/filewatcher.cpp" line="72"/> <source>Error removing file: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FindReplace</name> <message> <location filename="../gui/findreplace.cpp" line="46"/> <source>Next</source> <translation>次</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="47"/> <source>Previous</source> <translation>å‰</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="48"/> <source>Match case</source> <translation>å¤§æ–‡å­—ãƒ»å°æ–‡å­—を区別</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="57"/> <source>Replace</source> <translation>ç½®ãæ›ãˆ</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="58"/> <source>Replace all</source> <translation>å…¨ã¦ç½®ãæ›ãˆ</translation> </message> </context> <context> <name>HtmlEntitiesDialog</name> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="33"/> <source>Cancel</source> <translation>キャンセル</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="34"/> <source>Close</source> <translation>é–‰ã˜ã‚‹</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="35"/> <source>Edit entries list</source> <translation>エントリーリストを編集</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="36"/> <source>Save entities list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="71"/> <source>HTML Entities Selection</source> <translation>HTMLã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£é¸æŠž</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="206"/> <source>Comma separated list of HTML entities. See http://www.w3schools.com/charsets/ for list.</source> <translation type="unfinished">HTMLエンティティã®ã‚«ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒªã‚¹ãƒˆã€‚http://www.w3schools.com/charsets/ã‚’å‚ç…§ã®ã“ã¨ã€‚</translation> </message> </context> <context> <name>ImportData</name> <message> <location filename="../xml/importdata.cpp" line="59"/> <source>Imported Notes</source> <translation>インãƒãƒ¼ãƒˆã•れãŸãƒŽãƒ¼ãƒˆ</translation> </message> <message> <location filename="../xml/importdata.cpp" line="106"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="107"/> <location filename="../xml/importdata.cpp" line="119"/> <source> notes found.</source> <translation>見ã¤ã‹ã£ãŸãƒŽãƒ¼ãƒˆ</translation> </message> <message> <location filename="../xml/importdata.cpp" line="130"/> <source>Importing</source> <translation>インãƒãƒ¼ãƒˆ</translation> </message> <message> <location filename="../xml/importdata.cpp" line="131"/> <source>Importing Notes</source> <translation>インãƒãƒ¼ãƒˆã•れるノート</translation> </message> <message> <location filename="../xml/importdata.cpp" line="133"/> <source>Restore</source> <translation>復元</translation> </message> <message> <location filename="../xml/importdata.cpp" line="134"/> <source>Restoring Notes</source> <translation>復元ã•れるノート</translation> </message> </context> <context> <name>ImportEnex</name> <message> <location filename="../xml/importenex.cpp" line="40"/> <source>Imported Notes</source> <translation>インãƒãƒ¼ãƒˆã•れãŸãƒŽãƒ¼ãƒˆ</translation> </message> <message> <location filename="../xml/importenex.cpp" line="83"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="84"/> <location filename="../xml/importenex.cpp" line="94"/> <source> notes found.</source> <translation>見ã¤ã‹ã£ãŸãƒŽãƒ¼ãƒˆ</translation> </message> <message> <location filename="../xml/importenex.cpp" line="101"/> <location filename="../xml/importenex.cpp" line="102"/> <source>Importing Notes</source> <translation>ノートã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ</translation> </message> </context> <context> <name>ImportNotes</name> <message> <location filename="../cmdtools/importnotes.cpp" line="19"/> <source>Input file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/importnotes.cpp" line="24"/> <source>Input file not found.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLatexDialog</name> <message> <location filename="../dialog/insertlatexdialog.cpp" line="32"/> <source>Insert LaTeX Formula</source> <translation>LaTeXæ•°å¼ã®ã‚¤ãƒ³ã‚µãƒ¼ãƒˆ</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="42"/> <source>Formula</source> <translation>æ•°å¼</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="47"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="52"/> <source>Cancel</source> <translation>キャンセル</translation> </message> </context> <context> <name>InsertLinkDialog</name> <message> <location filename="../dialog/insertlinkdialog.cpp" line="34"/> <source>Insert Link</source> <translation>ãƒªãƒ³ã‚¯ã®æŒ¿å…¥</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="45"/> <source>URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="50"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="54"/> <source>Cancel</source> <translation>キャンセル</translation> </message> </context> <context> <name>LineEdit</name> <message> <location filename="../gui/lineedit.cpp" line="39"/> <source>Search</source> <translation>検索</translation> </message> </context> <context> <name>LocalePreferences</name> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="37"/> <source>Date Format</source> <translation>日付ã®ãƒ•ォーマット</translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="40"/> <source>MM/dd/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="41"/> <source>MM/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="42"/> <source>M/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="43"/> <source>M/d/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="44"/> <source>dd/MM/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="45"/> <source>d/M/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="46"/> <source>dd/MM/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="47"/> <source>d/M/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="48"/> <source>yyyy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="49"/> <source>yy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="52"/> <source>Time Format</source> <translation>時刻ã®ãƒ•ォーマット</translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="55"/> <source>HH:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="56"/> <source>HH:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="57"/> <source>HH:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="58"/> <source>HH:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="59"/> <source>hh:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="60"/> <source>hh:mm:ss a- </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="61"/> <source>h:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="62"/> <source>hh:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="63"/> <source>hh:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="64"/> <source>h:mm a - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationDialog</name> <message> <location filename="../dialog/locationdialog.cpp" line="33"/> <source>Location</source> <translation>åœ°ç†æƒ…å ±</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="40"/> <source>Longitude</source> <translation>経度</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="42"/> <source>Latitude</source> <translation>緯度</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="44"/> <source>Altitude</source> <translation>高度</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="49"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="52"/> <source>Cancel</source> <translation>キャンセル</translation> </message> </context> <context> <name>LocationEditor</name> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="42"/> <source>Click to set location...</source> <translation>åœ°ç†æƒ…å ±ã®è¨­å®š...</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="45"/> <source>Edit...</source> <translation>編集...</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="46"/> <source>Clear</source> <translation>クリア</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="47"/> <source>View on map</source> <translation>地図表示</translation> </message> </context> <context> <name>LogViewer</name> <message> <location filename="../dialog/logviewer.cpp" line="41"/> <source>Close</source> <translation>é–‰ã˜ã‚‹</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="43"/> <source>Refresh</source> <translation type="unfinished">å†è¡¨ç¤º</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="45"/> <source>Save</source> <translation>ä¿å­˜</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="54"/> <source>Save Logs</source> <translation>ログä¿å­˜</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>Save Log</source> <translation>ログä¿å­˜</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>NixNote Log (*.log);;All Files (*.*)</source> <translation>NixNoteログ(*.log);;å…¨ã¦ã®ãƒ•ァイル(*.*)</translation> </message> </context> <context> <name>LoginDialog</name> <message> <location filename="../dialog/logindialog.cpp" line="34"/> <source>NixNote Login</source> <translation>NixNoteログイン</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="43"/> <source>Userid</source> <translation>ユーザID</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="44"/> <source>Password</source> <translation>パスワード</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="52"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="56"/> <source>Cancel</source> <translation>キャンセル</translation> </message> </context> <context> <name>NAttributeTree</name> <message> <location filename="../gui/nattributetree.cpp" line="48"/> <source>Attributes</source> <translation>属性</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="129"/> <source>Created</source> <translation>ä½œæˆæ—¥</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="132"/> <location filename="../gui/nattributetree.cpp" line="213"/> <source>Since</source> <translation>以é™</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="136"/> <location filename="../gui/nattributetree.cpp" line="173"/> <location filename="../gui/nattributetree.cpp" line="217"/> <location filename="../gui/nattributetree.cpp" line="254"/> <source>Today</source> <translation>今日</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="140"/> <location filename="../gui/nattributetree.cpp" line="177"/> <location filename="../gui/nattributetree.cpp" line="221"/> <location filename="../gui/nattributetree.cpp" line="258"/> <source>Yesterday</source> <translation>昨日</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="144"/> <location filename="../gui/nattributetree.cpp" line="181"/> <location filename="../gui/nattributetree.cpp" line="225"/> <location filename="../gui/nattributetree.cpp" line="262"/> <source>This week</source> <translation>今週</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="148"/> <location filename="../gui/nattributetree.cpp" line="185"/> <location filename="../gui/nattributetree.cpp" line="229"/> <location filename="../gui/nattributetree.cpp" line="266"/> <source>Last week</source> <translation>先週</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="152"/> <location filename="../gui/nattributetree.cpp" line="189"/> <location filename="../gui/nattributetree.cpp" line="233"/> <location filename="../gui/nattributetree.cpp" line="270"/> <source>This Month</source> <translation>今月</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="156"/> <location filename="../gui/nattributetree.cpp" line="193"/> <location filename="../gui/nattributetree.cpp" line="237"/> <location filename="../gui/nattributetree.cpp" line="274"/> <source>Last Month</source> <translation>先月</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="160"/> <location filename="../gui/nattributetree.cpp" line="197"/> <location filename="../gui/nattributetree.cpp" line="241"/> <location filename="../gui/nattributetree.cpp" line="278"/> <source>This Year</source> <translation>今年</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="164"/> <location filename="../gui/nattributetree.cpp" line="201"/> <location filename="../gui/nattributetree.cpp" line="245"/> <location filename="../gui/nattributetree.cpp" line="282"/> <source>Last Year</source> <translation>昨年</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="169"/> <location filename="../gui/nattributetree.cpp" line="250"/> <source>Before</source> <translation>以å‰</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="210"/> <source>Last Modified</source> <translation>最終変更</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="289"/> <source>Contains</source> <translation>内容</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="292"/> <source>Images</source> <translation>ç”»åƒ</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="296"/> <source>Audio</source> <translation>音声</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="300"/> <source>Ink</source> <translation>インク</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="304"/> <source>Encrypted Text</source> <translation>æš—å·åŒ–ã—ãŸæ–‡ç« </translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="308"/> <source>To-do items</source> <translation>ã‚„ã‚‹ã“ã¨ãƒªã‚¹ãƒˆ</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="312"/> <source>Unfinished to-do items</source> <translation>終了ã—ã¦ã„ãªã„To-Doé …ç›®</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="316"/> <source>Finished to-do items</source> <translation>完了ã—ãŸTo-Doé …ç›®</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="320"/> <source>PDF document</source> <translation>PDF文書</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="324"/> <source>Attachment</source> <translation>添付ファイル</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="328"/> <source>Reminder</source> <translation type="unfinished">リマインダー</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="332"/> <source>Uncompleted Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="336"/> <source>Future Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="341"/> <source>Source</source> <translation>情報æº</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="344"/> <source>Emailed to Evernote</source> <translation>Evernoteã«é›»å­ãƒ¡ãƒ¼ãƒ«ã•れãŸ</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="348"/> <source>Email</source> <translation>é›»å­ãƒ¡ãƒ¼ãƒ«</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="352"/> <source>Web page</source> <translation>Webページ</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="356"/> <source>Mobile</source> <translation>モãƒã‚¤ãƒ«</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="360"/> <source>Another application</source> <translation>ä»–ã®ã‚¢ãƒ—リ</translation> </message> </context> <context> <name>NBrowserWindow</name> <message> <location filename="../gui/nbrowserwindow.cpp" line="521"/> <location filename="../gui/nbrowserwindow.cpp" line="3112"/> <source>Today</source> <translation>今日</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="523"/> <location filename="../gui/nbrowserwindow.cpp" line="3114"/> <source>Tomorrow</source> <translation>明日</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="525"/> <location filename="../gui/nbrowserwindow.cpp" line="3116"/> <source>Yesterday</source> <translation>昨日</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to Save</source> <translation>ä¿å­˜ä¸å¯</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to save this note. Either tidy isn't installed or the note is too complex to save.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="1808"/> <source>Insert Link</source> <translation>ãƒªãƒ³ã‚¯ã®æŒ¿å…¥</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>Unable Open</source> <translation>é–‹ãã®ã«å¤±æ•—</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>This is an ink note. Ink notes are not supported since Evernote has not published any specifications on them and I'm too lazy to figure them out by myself.</source> <translation type="unfinished">ã“れã¯ã‚¤ãƒ³ã‚¯ãƒŽãƒ¼ãƒˆã§ã™ã€‚ インクノートã¯ã€EvernoteãŒä»•様を公開ã—ãªã„ã†ã¡ã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“。</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2240"/> <source>Edit Link</source> <translation>リンクã®ç·¨é›†</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2304"/> <source>Unable to create LaTeX image</source> <translation>LaTeXイメージã®ä½œæˆã«å¤±æ•—</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2305"/> <source>Unable to create LaTeX image. Are you sure mimetex is installed?</source> <translation>LaTeXイメージã®ç”Ÿæˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚mimetexãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2635"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2636"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2645"/> <source>Sending Email. Please be patient.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3159"/> <source>Decryption Error</source> <translation>復å·ã‚¨ãƒ©ãƒ¼</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3160"/> <source>Unknown encryption method. Unable to decrypt.</source> <translation>æœªçŸ¥ã®æš—å·åŒ–æ–¹å¼ã€‚復å·ã§ãã¾ã›ã‚“。</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3263"/> <source>Error</source> <translation>エラー</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3264"/> <source>Error Encrypting String. Please verify you have Java installed.</source> <translation>文字列暗å·åŒ–ã«å¤±æ•—。JavaãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Hunspell plugin not found or could not be loaded.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete</source> <translation>スペルãƒã‚§ãƒƒã‚¯å®Œäº†</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete.</source> <translation>スペルãƒã‚§ãƒƒã‚¯å®Œäº†ã€‚</translation> </message> </context> <context> <name>NMainMenuBar</name> <message> <location filename="../gui/nmainmenubar.cpp" line="60"/> <source>&File</source> <translation>ファイル(&F)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="79"/> <source>Print this note</source> <translation>ã“ã®ãƒŽãƒ¼ãƒˆã‚’å°åˆ·</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="87"/> <source>Backup database to a file</source> <translation>データベースをファイルã«ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="93"/> <source>Restore from a backup</source> <translation>ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã‹ã‚‰å¾©å…ƒ</translation> </message> <message> <source>Export selected notes to a file</source> <translation type="vanished">é¸æŠžã—ãŸãƒŽãƒ¼ãƒˆã‚’ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãã ã™</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="113"/> <source>Import notes from an export file</source> <translation>書ãã ã—ãŸãƒ•ァイルã‹ã‚‰ãƒŽãƒ¼ãƒˆã‚’読ã¿è¾¼ã‚€</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="133"/> <source>Switch to </source> <translation>切り替ãˆ</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="151"/> <source>Open/Close Notebooks</source> <translation>ノートブックã®è¡¨ç¤º/éžè¡¨ç¤º</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="159"/> <source>Close the program</source> <translation>プログラムã®çµ‚了</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="175"/> <source>&Edit</source> <translation>編集(&E)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="78"/> <source>&Print Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="64"/> <source>Email Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="65"/> <source>Email a copy of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="71"/> <source>Print Preview Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="72"/> <source>Print preview of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="86"/> <source>&Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="92"/> <source>&Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="112"/> <source>&Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="140"/> <source>&Add Another User...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="144"/> <source>&User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="150"/> <source>&Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="158"/> <source>E&xit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="180"/> <source>&Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="184"/> <source>&Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="190"/> <source>&Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="194"/> <source>C&opy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="198"/> <source>&Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="202"/> <source>Pas&te as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="206"/> <source>Remo&ve Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="212"/> <source>Select &All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="218"/> <source>F&ind and Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="220"/> <source>&Search Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="225"/> <source>&Reset Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="232"/> <source>&Find in Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="238"/> <source>Find &Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="243"/> <source>Find &Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="250"/> <source>Replace &Within Note...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="260"/> <source>Preferences</source> <translation>設定</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="268"/> <source>&View</source> <translation>表示(&V)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="273"/> <source>Wide Note List</source> <translation></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="278"/> <source>Narrow Note List</source> <translation></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="285"/> <source>&Show Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="289"/> <source>Note &History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="295"/> <source>&Presentation Mode</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="299"/> <source>Show &Left Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="306"/> <source>Show &Favorites</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="313"/> <source>Show &Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="320"/> <source>Show Ta&gs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="327"/> <source>Show Sa&ved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="341"/> <source>Show T&rash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="348"/> <source>Show N&ote List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="355"/> <source>Show Note &Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="364"/> <source>View Note &Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="368"/> <source>View &Toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="375"/> <source>View Status&bar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="391"/> <source>New &Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="396"/> <source>New &Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="401"/> <source>Dupl&icate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="406"/> <source>&Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="411"/> <source>Reindex Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="418"/> <source>&Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="427"/> <source>&Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="432"/> <source>&UnPin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="446"/> <source>&Synchronize</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="447"/> <source>Synchronize with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="452"/> <source>&Disconnect</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="460"/> <source>Pause &Indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="461"/> <source>Temporarily pause indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="468"/> <source>Disable &Editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="469"/> <source>Temporarily disable note editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="476"/> <source>A&ccount</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="490"/> <source>&Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="514"/> <source>&User's Guide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="537"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="538"/> <source>View currentt shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="547"/> <source>Github Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="548"/> <source>Goto the NixNote2 Github project page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="585"/> <source>About &Qt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="625"/> <source>Theme</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="386"/> <source>&Note</source> <translation>ノート(&N)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="100"/> <source>&Export to NixNote Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="101"/> <source>Export selected notes to a NNEX file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="106"/> <source>&Export Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="107"/> <source>Export selected notes to a PDF file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="441"/> <source>&Tools</source> <translation>ツール(&T)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="453"/> <source>Disconnect from Evernote</source> <translation>Evernoteã‹ã‚‰åˆ‡æ–­</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="477"/> <source>Account information</source> <translation>アカウント情報</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="484"/> <source>&Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="485"/> <source>Database Status</source> <translation>データベースã®çŠ¶æ…‹</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="491"/> <source>Reindex all notes</source> <translation>å…¨ã¦ã®ãƒŽãƒ¼ãƒˆã‚’å†ç´¢å¼•</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="499"/> <source>&Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="500"/> <source>Import Folders</source> <translation>フォルダーã®å–り込ã¿</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="509"/> <source>&Help</source> <translation>ヘルプ(&H)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="515"/> <source>Open the user manual.</source> <translation>ユーザマニュアルを開ã</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="542"/> <source>Message &Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="554"/> <source>&Evernote Account Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="559"/> <source>Evernote &Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="568"/> <source>Evernote &Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="573"/> <source>Evernote User &Forum</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="580"/> <source>&About</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="634"/> <source>System Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="543"/> <source>View current program messages</source> <translation>ç¾åœ¨ã®ãƒ—ログラムメッセージを表示ã™ã‚‹</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="334"/> <source>Show &Attribute Filter</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="520"/> <source>Theme &Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="521"/> <source>View information about the current theme.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="555"/> <source>Go to your Evernote account page.</source> <translation>Evernoteã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãƒšãƒ¼ã‚¸ã¸è¡Œã。</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="560"/> <source>Go to Evernote's support page</source> <translation>Evernoteã®ã‚µãƒãƒ¼ãƒˆãƒšãƒ¼ã‚¸ã¸è¡Œã</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="562"/> <source>Yinxiang Biji Support</source> <translation>å°è±¡ç¬”记サãƒãƒ¼ãƒˆ</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="563"/> <source>Go to Yinxiang Biji's support page</source> <translation>å°è±¡ç¬”è®°ã®ã‚µãƒãƒ¼ãƒˆã¸è¡Œã</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="569"/> <source>Go to Evernote Trunk</source> <translation>Evernote Trunkã¸è¡Œã</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="574"/> <source>Go to the Evernote user support forum.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="581"/> <location filename="../gui/nmainmenubar.cpp" line="586"/> <source>About</source> <translation>情報</translation> </message> </context> <context> <name>NNotebookView</name> <message> <location filename="../gui/nnotebookview.cpp" line="69"/> <source>Notebooks</source> <translation>ノートブック</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="86"/> <source>Create New Notebook</source> <translation>æ–°è¦ãƒŽãƒ¼ãƒˆãƒ–ック作æˆ</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="95"/> <source>Delete</source> <translation>削除</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="103"/> <source>Add to stack</source> <translation>スタックã®è¿½åŠ </translation> </message> <message> <source>New stack</source> <translation type="vanished">æ–°è¦ã‚¹ã‚¿ãƒƒã‚¯</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="116"/> <source>Create New stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="119"/> <source>Remove from stack</source> <translation>スタックã‹ã‚‰å‰Šé™¤</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="123"/> <source>Rename</source> <translation>åå‰å¤‰æ›´</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="131"/> <source>Properties</source> <translation>プロパティ</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="641"/> <source>Are you sure you want to delete this notebook?</source> <translation>ã“ã®ãƒŽãƒ¼ãƒˆãƒ–ックを本当ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="642"/> <source>Verify Delete</source> <translation>削除確èª</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>New Stack (</source> <translation>æ–°è¦ã‚¹ã‚¿ãƒƒã‚¯ï¼ˆ</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>)</source> <translation>)</translation> </message> </context> <context> <name>NSearchView</name> <message> <location filename="../gui/nsearchview.cpp" line="65"/> <source>Saved Searches</source> <translation>検索ã®ä¿å­˜</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="74"/> <source>Create Saved Search</source> <translation>検索ä¿å­˜ã®ä½œæˆ</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="83"/> <source>Delete</source> <translation>削除</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="90"/> <source>Rename</source> <translation>åå‰å¤‰æ›´</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="94"/> <source>Properties</source> <translation>プロパティ</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="404"/> <source>Are you sure you want to delete this saved search?</source> <translation>ã“ã®ä¿å­˜ã•ã‚ŒãŸæ¤œç´¢ã‚’本当ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="405"/> <source>Verify Delete</source> <translation>削除確èª</translation> </message> </context> <context> <name>NTabWidget</name> <message> <location filename="../gui/ntabwidget.cpp" line="254"/> <location filename="../gui/ntabwidget.cpp" line="262"/> <source>Untitled Note</source> <translation>タイトルã®ãªã„ノート</translation> </message> <message> <location filename="../gui/ntabwidget.cpp" line="267"/> <location filename="../gui/ntabwidget.cpp" line="334"/> <source>NixNote - </source> <translation>NixNote - </translation> </message> </context> <context> <name>NTableView</name> <message> <location filename="../gui/ntableview.cpp" line="203"/> <source>Open Note</source> <translation>ノートを開ã</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="209"/> <source>Open Note In New Tab</source> <translation>ノートを新è¦ã‚¿ãƒ–ã«é–‹ã</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="215"/> <source>Open Note In New Window</source> <translation>ノートを新è¦ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã§é–‹ã</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="222"/> <source>Add Note</source> <translation>ノート追加</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="227"/> <source>Delete Note</source> <translation>ノート削除</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="238"/> <source>Restore Note</source> <translation>ノートã®å¾©å…ƒ</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="244"/> <source>Copy Note Link</source> <translation>ノートリンクã®ã‚³ãƒ”ー</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="249"/> <source>Duplicate Note</source> <translation>ノートã®è¤‡è£½</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="254"/> <source>Reminders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="258"/> <source>Remove</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="263"/> <source>Mark Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="269"/> <source>Pin Note</source> <translation>ノートã®Pinã©ã‚</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="274"/> <source>Unpin Note</source> <translation>ノートピンã©ã‚削除</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="279"/> <source>Merge Notes</source> <translation>ノートã®çµåˆ</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="285"/> <source>Create Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="291"/> <source>Title Color</source> <translation>タイトル色</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="296"/> <source>Properties</source> <translation type="unfinished">プロパティ</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="301"/> <source>White</source> <translation>白</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="304"/> <source>Red</source> <translation>赤</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="307"/> <source>Blue</source> <translation>é’</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="310"/> <source>Green</source> <translation>ç·‘</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="313"/> <source>Yellow</source> <translation>黄</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="316"/> <source>Black</source> <translation>é»’</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="319"/> <source>Gray</source> <translation>ç°</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="322"/> <source>Cyan</source> <translation>水色</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="325"/> <source>Magenta</source> <translation>ç´«</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="663"/> <source>Delete </source> <translation>削除</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="666"/> <source>Permanently delete </source> <translation>永久ã«å‰Šé™¤</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="672"/> <source>selected note?</source> <translation>é¸æŠžã•れãŸãƒŽãƒ¼ãƒˆï¼Ÿ</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="677"/> <source>Verify Delete</source> <translation>削除確èª</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="942"/> <source>Unsynchronized Note</source> <translation>åŒæœŸã•れã¦ã„ãªã„ノート</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="943"/> <source>This note has never been synchronized. Using this in a note link can cause problems unless you synchronize it first.</source> <translation>ã“ã®ãƒŽãƒ¼ãƒˆã¯ã¾ã åŒæœŸã•れã¦ã„ã¾ã›ã‚“。ã“ã®ãƒŽãƒ¼ãƒˆãƒªãƒ³ã‚¯ã®ä½¿ç”¨ã¯ã€åŒæœŸã‚’ã¾ãšè¡Œã†ã¾ã§ã€å•題を発生ã•ã›ã¾ã™ã€‚</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1319"/> <source>Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1370"/> <source>One or more notes are unsynchronized. This can cause issues if they are later synchronized. Do you wish to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1654"/> <source>Note LID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1657"/> <source>Title</source> <translation type="unfinished">タイトル</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1660"/> <source>Notebook</source> <translation type="unfinished">ノートブック</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1663"/> <source>Tags</source> <translation type="unfinished">ã‚¿ã‚°</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1666"/> <source>Synchronized</source> <translation type="unfinished">åŒæœŸæ¸ˆ</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1668"/> <location filename="../gui/ntableview.cpp" line="1676"/> <location filename="../gui/ntableview.cpp" line="1682"/> <source>No</source> <translation type="unfinished">ã„ã„ãˆ</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1670"/> <location filename="../gui/ntableview.cpp" line="1674"/> <location filename="../gui/ntableview.cpp" line="1680"/> <source>Yes</source> <translation type="unfinished">ã¯ã„</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1672"/> <source>Has Encryption</source> <translation type="unfinished">æš—å·åŒ–ã•れãŸ</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1678"/> <source>Has To-Do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1684"/> <source>Date Created</source> <translation type="unfinished">ä½œæˆæ—¥</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1687"/> <source>Date Updated</source> <translation type="unfinished">æ›´æ–°æ—¥</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1690"/> <source>Date Deleted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1698"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1706"/> <source>Author</source> <translation type="unfinished">作者</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1710"/> <source>Longitude</source> <translation type="unfinished">経度</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1719"/> <source>Latitude</source> <translation type="unfinished">緯度</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1728"/> <source>Altitude</source> <translation type="unfinished">高度</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1737"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1740"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1743"/> <source>Source URL</source> <translation type="unfinished">ソースURL</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1746"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1754"/> <source>Reminder Completed</source> <translation type="unfinished">リマインダー完了</translation> </message> </context> <context> <name>NTableViewHeader</name> <message> <location filename="../gui/ntableviewheader.cpp" line="42"/> <source>Date Created</source> <translation>ä½œæˆæ—¥</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="47"/> <source>Date Updated</source> <translation>æ›´æ–°æ—¥</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="52"/> <source>Title</source> <translation>タイトル</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="57"/> <source>Notebook</source> <translation>ノートブック</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="62"/> <source>Tags</source> <translation>ã‚¿ã‚°</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="67"/> <source>Author</source> <translation>作者</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="72"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="77"/> <source>Source</source> <translation>ソース</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="82"/> <source>Source URL</source> <translation>ソースURL</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="87"/> <source>Latitude</source> <translation>緯度</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="92"/> <source>Longitude</source> <translation>経度</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="97"/> <source>Altitude</source> <translation>高度</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="102"/> <source>Has Encryption</source> <translation>æš—å·åŒ–ã•れãŸ</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="107"/> <source>Has To-do</source> <translation>TODOé …ç›®ãŒã‚ã‚‹</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="112"/> <source>Synchronized</source> <translation>åŒæœŸæ¸ˆ</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="117"/> <source>Size</source> <translation>サイズ</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="122"/> <source>Reminder</source> <translation>リマインダー</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="128"/> <source>Reminder Due</source> <translation>リマインダー時間</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="133"/> <source>Reminder Completed</source> <translation>リマインダー完了</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="138"/> <source>Pinned</source> <translation>Pinã•れãŸ</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="143"/> <source>Thumbnail</source> <translation>サムãƒã‚¤ãƒ«</translation> </message> </context> <context> <name>NTagView</name> <message> <location filename="../gui/ntagview.cpp" line="67"/> <location filename="../gui/ntagview.cpp" line="156"/> <source>Tags from Personal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="91"/> <source>Create New Tag</source> <translation>æ–°è¦ã‚¿ã‚°ä½œæˆ</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="100"/> <source>Delete</source> <translation>削除</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="107"/> <source>Rename</source> <translation>åå‰ã‚’変更</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="110"/> <source>Merge</source> <translation>çµåˆ</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="113"/> <source>Hide Unassigned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="119"/> <source>Properties</source> <translation>プロパティ</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="154"/> <source>Tags from </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="351"/> <source>-<Missing Tag>-</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="706"/> <source>Are you sure you want to merge these tags?</source> <translation>ã“れらã®ã‚¿ã‚°ã‚’çµåˆã—ã¾ã™ã‹ï¼Ÿ</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="707"/> <source>Verify Merge</source> <translation>çµåˆã®ç¢ºèª</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="753"/> <source>Are you sure you want to delete this tag?</source> <translation>ã“ã®ã‚¿ã‚°ã‚’本当ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="755"/> <source>Are you sure you want to delete all selected tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="756"/> <source>Verify Delete</source> <translation>削除ã®ç¢ºèª</translation> </message> </context> <context> <name>NTitleEditor</name> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="123"/> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="137"/> <source>Untitled note</source> <translation>タイトルã®ãªã„ノート</translation> </message> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="134"/> <source>untitled note</source> <translation>タイトルã®ãªã„ノート</translation> </message> </context> <context> <name>NTrashTree</name> <message> <location filename="../gui/ntrashtree.cpp" line="53"/> <source>Trash</source> <translation>ゴミ箱</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="65"/> <source>Restore Deleted Notes</source> <translation>削除ã—ãŸãƒŽãƒ¼ãƒˆã®å¾©å…ƒ</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="68"/> <source>Empty Trash</source> <translation>ゴミ箱を空ã«ã™ã‚‹</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="238"/> <source>Verify Delete</source> <translation>削除ã®ç¢ºèª</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="239"/> <source>Are you sure you want to permanently delete these notes?</source> <translation>æœ¬å½“ã«æ°¸ä¹…ã®ã“れらã®ãƒŽãƒ¼ãƒˆã‚’削除ã—ã¦ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿ</translation> </message> </context> <context> <name>NWebView</name> <message> <location filename="../gui/nwebview.cpp" line="56"/> <source>Open</source> <translation>é–‹ã</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="61"/> <source>Cut</source> <translation>切りå–り</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="66"/> <source>Copy</source> <translation>コピー</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="71"/> <source>Paste</source> <translation>貼り付ã‘</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="76"/> <source>Paste as Unformatted Text</source> <translation>書å¼ãªã—テキストã¨ã—ã¦è²¼ã‚Šä»˜ã‘</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="81"/> <source>Remove Formatting</source> <translation>書å¼ã‚’削除</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="86"/> <source>Copy Note URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="93"/> <source>Background Color</source> <translation>背景ã®è‰²</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="113"/> <source>To-do</source> <translation>To-Do</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="120"/> <source>HTML Entities</source> <translation>HTMLエンティティ</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="127"/> <source>Encrypted Selected Text</source> <translation>é¸æŠžã•れãŸãƒ†ã‚­ã‚¹ãƒˆã®æš—å·åŒ–</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="132"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="137"/> <source>Insert Hyperlink</source> <translation>ãƒã‚¤ãƒ‘ãƒ¼ãƒªãƒ³ã‚¯ã®æŒ¿å…¥</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="142"/> <source>Quick Link</source> <translation>クイックリンク</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="147"/> <source>Remove Hyperlink</source> <translation>ãƒã‚¤ãƒ‘ーリンクã®å‰Šé™¤</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="152"/> <source>Attach File</source> <translation>ãƒ•ã‚¡ã‚¤ãƒ«ã®æ·»ä»˜</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="158"/> <source>Insert LaTeX Formula</source> <translation>LaTeXæ•°å¼ã®æŒ¿å…¥</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="164"/> <source>Table</source> <translation>表</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="167"/> <source>Insert Table</source> <translation>è¡¨ã®æŒ¿å…¥</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="173"/> <source>Insert Row</source> <translation>åˆ—ã®æŒ¿å…¥</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="178"/> <source>Insert Column</source> <translation>è¡Œã®æŒ¿å…¥</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="185"/> <source>Delete Row</source> <translation>列ã®å‰Šé™¤</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="189"/> <source>Delete Column</source> <translation>行ã®å‰Šé™¤</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="196"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="203"/> <source>Image</source> <translation>ç”»åƒ</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="206"/> <source>Save Image</source> <translation>ç”»åƒã®ä¿å­˜</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="214"/> <source>Rotate Left</source> <translation>左回転</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="218"/> <source>Rotate Right</source> <translation>å³å›žè»¢</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="224"/> <source>Save Attachment</source> <translation>添付ã®ä¿å­˜</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="502"/> <location filename="../gui/nwebview.cpp" line="532"/> <source>Save File</source> <translation>ファイルã®ä¿å­˜</translation> </message> </context> <context> <name>NixNote</name> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy Not Found</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy is not found on this system. Until tidy is installed you cannot save any notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="291"/> <source>ToolBar</source> <translation>ツールãƒãƒ¼</translation> </message> <message> <location filename="../nixnote.cpp" line="303"/> <source>Back</source> <translation>å‰</translation> </message> <message> <location filename="../nixnote.cpp" line="304"/> <source>Next</source> <translation>次</translation> </message> <message> <location filename="../nixnote.cpp" line="314"/> <source>All Notes</source> <translation>å…¨ã¦ã®ãƒŽãƒ¼ãƒˆ</translation> </message> <message> <location filename="../nixnote.cpp" line="316"/> <source>Sync</source> <translation>åŒæœŸ</translation> </message> <message> <location filename="../nixnote.cpp" line="319"/> <source>Print</source> <translation>å°åˆ·</translation> </message> <message> <location filename="../nixnote.cpp" line="329"/> <source>New Text Note</source> <translation>æ–°è¦ãƒ†ã‚­ã‚¹ãƒˆãƒŽãƒ¼ãƒˆ</translation> </message> <message> <location filename="../nixnote.cpp" line="332"/> <source>New Webcam Note</source> <translation>æ–°è¦Webカムノート</translation> </message> <message> <location filename="../nixnote.cpp" line="344"/> <source>Delete</source> <translation>削除</translation> </message> <message> <location filename="../nixnote.cpp" line="347"/> <source>Trunk</source> <translation>Trunk</translation> </message> <message> <location filename="../nixnote.cpp" line="349"/> <source>Usage</source> <translation>用途</translation> </message> <message> <location filename="../nixnote.cpp" line="531"/> <location filename="../nixnote.cpp" line="3183"/> <source>Screen Capture</source> <translation>スクリーンキャプãƒãƒ£</translation> </message> <message> <location filename="../nixnote.cpp" line="547"/> <source>Show/Hide</source> <translation>表示/éžè¡¨ç¤º</translation> </message> <message> <location filename="../nixnote.cpp" line="559"/> <source>Close</source> <translation>é–‰ã˜ã‚‹</translation> </message> <message> <location filename="../nixnote.cpp" line="1799"/> <source>Confirm Restore</source> <translation>復元確èª</translation> </message> <message> <location filename="../nixnote.cpp" line="1815"/> <source>Restore Database</source> <translation>データベースã®å¾©å…ƒ</translation> </message> <message> <location filename="../nixnote.cpp" line="1818"/> <source>Import Notes</source> <translation>ノートã®å–り込ã¿</translation> </message> <message> <location filename="../nixnote.cpp" line="1730"/> <location filename="../nixnote.cpp" line="1816"/> <source>NixNote Export (*.nnex);;All Files (*.*)</source> <translation>NixNote書ã出ã—(*.nnex);;全ファイル(*.*)</translation> </message> <message> <location filename="../nixnote.cpp" line="320"/> <source>Print the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="322"/> <source>Email</source> <translation type="unfinished">é›»å­ãƒ¡ãƒ¼ãƒ«</translation> </message> <message> <location filename="../nixnote.cpp" line="323"/> <source>Email the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="528"/> <source>Quick Note</source> <translation>クイックノート</translation> </message> <message> <location filename="../nixnote.cpp" line="538"/> <source>Shortcut Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="540"/> <source>Pinned Notes</source> <translation>Pinã•れãŸãƒŽãƒ¼ãƒˆ</translation> </message> <message> <location filename="../nixnote.cpp" line="542"/> <source>Recently Updated Notes</source> <translation>最近更新ã•れãŸãƒŽãƒ¼ãƒˆ</translation> </message> <message> <location filename="../nixnote.cpp" line="1437"/> <location filename="../nixnote.cpp" line="2350"/> <source>Log in to Evernote</source> <translation>Evernoteã¸ã®ãƒ­ã‚°ã‚¤ãƒ³</translation> </message> <message> <location filename="../nixnote.cpp" line="1439"/> <location filename="../nixnote.cpp" line="2352"/> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>NixNote</source> <translation>NixNote</translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <location filename="../nixnote.cpp" line="1761"/> <location filename="../nixnote.cpp" line="1857"/> <source>Error</source> <translation>エラー</translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <source>No notes selected.</source> <translation>ノートãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“。</translation> </message> <message> <location filename="../nixnote.cpp" line="1722"/> <source>Backup Database</source> <translation>データベースã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—</translation> </message> <message> <location filename="../nixnote.cpp" line="1724"/> <source>Export Notes</source> <translation>ãƒŽãƒ¼ãƒˆã®æ›¸ã出ã—</translation> </message> <message> <location filename="../nixnote.cpp" line="1749"/> <source>Performing backup</source> <translation>ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®å®Ÿè¡Œ</translation> </message> <message> <location filename="../nixnote.cpp" line="1751"/> <source>Performing export</source> <translation>書ã出ã—ã®å®Ÿè¡Œ</translation> </message> <message> <location filename="../nixnote.cpp" line="1768"/> <source>Database backup complete.</source> <translation>データベースãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®å®Œäº†ã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="1770"/> <source>Note extract complete.</source> <translation>ãƒŽãƒ¼ãƒˆã®æ›¸ã出ã—ãŒå®Œäº†ã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="1796"/> <source>This is used to restore a database from backups. It is HIGHLY recommended that this only be used to populate an empty database. Restoring into a database that already has data can cause problems. Are you sure you want to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1819"/> <source>NixNote Export (*.nnex);;Evernote Export (*.enex);;All Files (*.*)</source> <translation>NixNoteå½¢å¼(*.nnex);;Evernoteå½¢å¼ï¼ˆ*.enex);;全ファイル(*.*)</translation> </message> <message> <location filename="../nixnote.cpp" line="1846"/> <source>Restoring database</source> <translation>データベースを復元ã—ã¾ã™</translation> </message> <message> <location filename="../nixnote.cpp" line="1848"/> <source>Importing Notes</source> <translation>ノートをå–り込ã¿ã¾ã™</translation> </message> <message> <location filename="../nixnote.cpp" line="1880"/> <source>Database has been restored.</source> <translation>データベースã¯å¾©å…ƒã•れã¾ã—ãŸã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="1882"/> <source>Notes have been imported.</source> <translation>ノートã¯å–り込ã¾ã‚Œã¾ã—ãŸã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <location filename="../nixnote.cpp" line="1918"/> <source>Sync Error</source> <translation>åŒæœŸã‚¨ãƒ©ãƒ¼</translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <source>Sync completed with errors.</source> <translation>åŒæœŸãŒã‚¨ãƒ©ãƒ¼ã§çµ‚了ã—ã¾ã—ãŸã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="1918"/> <source>Sync error. See message log for details</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync Complete</source> <translation>åŒæœŸå®Œäº†</translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync completed successfully.</source> <translation>åŒæœŸãŒæˆåŠŸã—ã¾ã—ãŸã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="2002"/> <source>Untitled note</source> <translation type="unfinished">タイトルã®ãªã„ノート</translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>Unsynchronized Note</source> <translation type="unfinished">åŒæœŸã•れã¦ã„ãªã„ノート</translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>This note has never been synchronized with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3872"/> <source>Error loading Webcam plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3887"/> <source>Error loading Hunspell plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3913"/> <location filename="../nixnote.cpp" line="3965"/> <source>PDF Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>Export complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3937"/> <source>Exporting Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3938"/> <source>Exporting notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <source>This feature is only available to premium users.</source> <translation type="vanished">ã“ã®æ©Ÿèƒ½ã¯ã€ãƒ—レミアムユーザã«ã®ã¿æœ‰åйã§ã™ã€‚</translation> </message> <message> <source>Premium Feature</source> <translation type="vanished">プレミアム機能</translation> </message> <message> <location filename="../nixnote.cpp" line="2391"/> <location filename="../nixnote.cpp" line="2398"/> <source>Error retrieving note.</source> <translation>ノートã®å–り込ã¿ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="2392"/> <location filename="../nixnote.cpp" line="2399"/> <source>Error retrieving note</source> <translation>ã¨ã‚Šè¾¼ã¿ã‚¨ãƒ©ãƒ¼</translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <location filename="../nixnote.cpp" line="2431"/> <source>Note Restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <source>A new copy has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2431"/> <source>Note successfully restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2434"/> <source>Note restored</source> <translation>ノート復元</translation> </message> <message> <source>No versions of this note can be found.</source> <translation type="vanished">ã“ã®ãƒŽãƒ¼ãƒˆã®å‰ã®ç‰ˆãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。</translation> </message> <message> <source>Note Not Found</source> <translation type="vanished">ノートãŒè¦‹ã¤ã‹ã‚‰ãªã„</translation> </message> <message> <location filename="../nixnote.cpp" line="2650"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3054"/> <source>Switch to </source> <translation>切り替ãˆ</translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex Database</source> <translation>データベースã®å†ç´¢å¼•</translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex the entire database?</source> <translation>データベース全体ã®å†ç´¢å¼•ã‚’ã¤ãりã¾ã™ã‹ï¼Ÿ</translation> </message> <message> <location filename="../nixnote.cpp" line="3247"/> <source>Notes will be reindexed.</source> <translation>ノートã¯å†ç´¢å¼•ã•れã¾ã™ã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Webcam plugin not found or could not be loaded</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3281"/> <source>Unable to find webcam or capture image.</source> <translation>Webカムやイメージキャプãƒãƒ£ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。</translation> </message> <message> <location filename="../nixnote.cpp" line="3282"/> <source>Webcam Error</source> <translation>Webカムエラー</translation> </message> <message> <location filename="../nixnote.cpp" line="3432"/> <source>Note Reindexed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3444"/> <source>Delete </source> <translation>削除</translation> </message> <message> <location filename="../nixnote.cpp" line="3447"/> <source>Permanently delete </source> <translation>永久ã«å‰Šé™¤</translation> </message> <message> <location filename="../nixnote.cpp" line="3451"/> <source>this note?</source> <translation>ã“ã®ãƒŽãƒ¼ãƒˆï¼Ÿ</translation> </message> <message> <location filename="../nixnote.cpp" line="3455"/> <source>Verify Delete</source> <translation>削除確èª</translation> </message> <message> <location filename="../nixnote.cpp" line="3816"/> <source>Press ESC to exit.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteFormatter</name> <message> <location filename="../html/noteformatter.cpp" line="657"/> <source>File</source> <translation>ファイル</translation> </message> <message> <location filename="../html/noteformatter.cpp" line="691"/> <source>Bytes</source> <translation>ãƒã‚¤ãƒˆ</translation> </message> <message> <location filename="../html/noteformatter.cpp" line="695"/> <source>KB</source> <translation>キロãƒã‚¤ãƒˆ</translation> </message> </context> <context> <name>NoteHistorySelect</name> <message> <location filename="../dialog/notehistoryselect.cpp" line="32"/> <source>Note History</source> <translation type="unfinished">ノートã®çµŒç·¯</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="33"/> <source>Cancel</source> <translation>キャンセル</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="34"/> <source>Import</source> <translation>å–り込ã¿</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="39"/> <source>Replace current note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="80"/> <source>Current copy on Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="93"/> <source>Today</source> <translation>今日</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="95"/> <source>Yesterday</source> <translation>昨日</translation> </message> </context> <context> <name>NoteProperties</name> <message> <location filename="../dialog/noteproperties.cpp" line="37"/> <source>Note Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/noteproperties.cpp" line="38"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NotebookProperties</name> <message> <location filename="../dialog/notebookproperties.cpp" line="38"/> <source>Notebook</source> <translation>ノートブック</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="42"/> <source>Synchronized</source> <translation>åŒæœŸæ¸ˆ</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="46"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="52"/> <source>Name</source> <translation>åå‰</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="60"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="62"/> <source>Cancel</source> <translation>キャンセル</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="135"/> <source>Add Notebook</source> <translation>ノートブックã®è¿½åŠ </translation> </message> </context> <context> <name>OAuthWindow</name> <message> <location filename="../oauth/oauthwindow.cpp" line="70"/> <source>Please Grant NixNote Access</source> <translation></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="81"/> <source>SSL Support not found. Aborting connection</source> <translation>SSLサãƒãƒ¼ãƒˆãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。接続を中止ã—ã¾ã™</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="132"/> <source>Error receiving temporary credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="176"/> <source>Error receiving permanent credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="219"/> <source>Error receiving authorization</source> <translation type="unfinished"></translation> </message> </context> <context> <name>PopplerViewer</name> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source>Page </source> <translation>ページ</translation> </message> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source> of </source> <translation type="unfinished"></translation> </message> </context> <context> <name>PreferencesDialog</name> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="30"/> <source>User Settings</source> <translation>ユーザ設定</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="49"/> <source>Cancel</source> <translation>キャンセル</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="50"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="92"/> <source>Appearance</source> <translation>è¦‹ãˆæ–¹</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="98"/> <source>Locale</source> <translation>ロケール</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="104"/> <source>Search</source> <translation>検索</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="110"/> <source>Sync</source> <translation>åŒæœŸ</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="116"/> <source>Email</source> <translation type="unfinished">é›»å­ãƒ¡ãƒ¼ãƒ«</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="121"/> <source>Thumbnail</source> <translation type="unfinished">サムãƒã‚¤ãƒ«</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="127"/> <source>Advanced</source> <translation type="unfinished"></translation> </message> <message> <source>Debugging</source> <translation type="vanished">デãƒãƒƒã‚°</translation> </message> </context> <context> <name>QApplication</name> <message> <location filename="../dialog/screencapture.cpp" line="108"/> <source>Use your mouse to draw a rectangle to screenshot or exit pressing any key or using the right or middle mouse buttons.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/screencapture.cpp" line="145"/> <source>%1 x %2 pixels </source> <translation>%1 x %2 ピクセル</translation> </message> </context> <context> <name>QObject</name> <message> <location filename="../gui/ntableview.cpp" line="175"/> <source>Title</source> <translation>タイトル</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="176"/> <source>Author</source> <translation>作者</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="177"/> <source>Notebook</source> <translation>ノートブック</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="178"/> <source>Tags</source> <translation>ã‚¿ã‚°</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="179"/> <source>Date Created</source> <translation>ä½œæˆæ—¥</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="180"/> <source>Date Updated</source> <translation>æ›´æ–°æ—¥</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="181"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="182"/> <source>Deletion Date</source> <translation>削除日</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="183"/> <source>Reminder</source> <translation>リマインダー</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="184"/> <source>Reminder Due</source> <translation>ãƒªãƒžã‚¤ãƒ³ãƒ€ãƒ¼ã®æ™‚é–“</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="185"/> <source>Reminder Completed</source> <translation>リマインダー完了</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="186"/> <source>Source</source> <translation>ソース</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="187"/> <source>Source URL</source> <translation type="unfinished">ソースURL</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="188"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="189"/> <source>Longitude</source> <translation>経度</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="190"/> <source>Latitude</source> <translation>緯度</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="191"/> <source>Altitude</source> <translation>高度</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="192"/> <source>Has Encryption</source> <translation>æš—å·åŒ–ã•れãŸ</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="193"/> <source>Has To-do</source> <translation>TODOé …ç›®ã®ã‚ã‚‹</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="194"/> <source>Sync</source> <translation>åŒæœŸ</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="195"/> <source>Size</source> <translation>サイズ</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="196"/> <source>Thumbnail</source> <translation>サムãƒã‚¤ãƒ«</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="197"/> <source>Pinned</source> <translation>Pinã•れãŸ</translation> </message> </context> <context> <name>ReminderButton</name> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="35"/> <source>Mark as Done</source> <translation>完了マークã®</translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="36"/> <source>Change Date</source> <translation>変更日</translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="37"/> <source>Clear Reminder</source> <translation>リマインダーã®ã‚¯ãƒªã‚¢</translation> </message> </context> <context> <name>ReminderManager</name> <message> <location filename="../reminders/remindermanager.cpp" line="85"/> <source>Reminders Due</source> <translation>リマインダー時間</translation> </message> </context> <context> <name>ReminderSetDialog</name> <message> <location filename="../dialog/remindersetdialog.cpp" line="47"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/remindersetdialog.cpp" line="48"/> <source>Cancel</source> <translation>キャンセル</translation> </message> </context> <context> <name>RemoteQuery</name> <message> <location filename="../filters/remotequery.cpp" line="113"/> <location filename="../filters/remotequery.cpp" line="130"/> <source>Today</source> <translation type="unfinished">今日</translation> </message> </context> <context> <name>SavedSearchProperties</name> <message> <location filename="../dialog/savedsearchproperties.cpp" line="35"/> <source>Saved Search</source> <translation>ä¿å­˜ã•ã‚ŒãŸæ¤œç´¢</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="42"/> <source>Name</source> <translation>åå‰</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="43"/> <source>Query</source> <translation>検索文字列</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="51"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="53"/> <source>Cancel</source> <translation>キャンセル</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="106"/> <source>Add Saved Search</source> <translation>検索ä¿å­˜ã®è¿½åŠ </translation> </message> </context> <context> <name>SearchPreferences</name> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="36"/> <source>Index Attachments</source> <translation>添付ã®ç´¢å¼•</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="44"/> <source>Clear Notebook Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="48"/> <source>Clear Tag Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="52"/> <source>Clear Search Text on Notebook Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="56"/> <source>Show Any Matching Tags When Selecting Multiple Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="60"/> <source>Index PDFs locally</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="64"/> <source>Background Indexing (requires restart & may cause issues on some systems)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="68"/> <source>Experimental: Force search to lower case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="73"/> <source>Minimum Image Recognition Weight</source> <translation></translation> </message> </context> <context> <name>ShortcutDialog</name> <message> <location filename="../dialog/shortcutdialog.cpp" line="41"/> <source>Defined Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/shortcutdialog.cpp" line="42"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SpellCheckDialog</name> <message> <location filename="../dialog/spellcheckdialog.cpp" line="35"/> <source>Spell Check</source> <translation>スペルãƒã‚§ãƒƒã‚¯</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="50"/> <source>Suggestion</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="56"/> <source>Replace</source> <translation>ç½®æ›</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="57"/> <source>Ignore</source> <translation>無視</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="58"/> <source>Ignore All</source> <translation>å…¨ã¦ç„¡è¦–</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="59"/> <source>Add To Dictionary</source> <translation>辞書ã«è¿½åŠ </translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="66"/> <source>Cancel</source> <translation>キャンセル</translation> </message> </context> <context> <name>SpellChecker</name> <message> <source>Unable to find dictionaries. Is Huntspell installed?</source> <translation type="vanished">辞書ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。HuntspellãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚µã‚Œã¦ã„ã¾ã™ã‹ï¼Ÿ</translation> </message> </context> <context> <name>SyncPreferences</name> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="34"/> <source>Sync automatically</source> <translation>自動的ã«åŒæœŸ</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="38"/> <source>Every 15 minutes</source> <translation>15分ã”ã¨ã«</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="39"/> <source>Every 30 minutes</source> <translation>3ï¼åˆ†ã”ã¨ã«</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="40"/> <source>Every hour</source> <translation>一時間毎ã«</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="41"/> <source>Every day</source> <translation>毎日</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="43"/> <source>Sync on startup</source> <translation>起動時ã«åŒæœŸ</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="45"/> <source>Sync on shutdown</source> <translation>終了時ã«åŒæœŸ</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="47"/> <source>Enable sync notifications</source> <translation>åŒæœŸã®ãŠçŸ¥ã‚‰ã›ã‚’表示</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="48"/> <source>Show successful syncs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="49"/> <source>Restart sync on API limit (experimental)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="51"/> <source>Enable Proxy*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="52"/> <source>Enable Socks5</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="53"/> <source>Proxy Hostname</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="54"/> <source>Proxy Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="55"/> <source>Proxy Username</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="56"/> <source>Proxy Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="57"/> <source>*Note: Restart required</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="73"/> <source>Popup message on sync errors.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncRunner</name> <message> <location filename="../threads/syncrunner.cpp" line="134"/> <source>Beginning Sync</source> <translation>åŒæœŸé–‹å§‹</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="142"/> <source>Downloading changes</source> <translation>変更ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="192"/> <source>Sync Complete Successfully</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <location filename="../threads/syncrunner.cpp" line="267"/> <source>Download </source> <translation>ダウンロード</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <source>% complete for notebooks, tags, & searches.</source> <translation>%完了(ノートブックã€ã‚¿ã‚°ã€æ¤œç´¢ï¼‰ã€‚</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="247"/> <source>Download complete for notebooks, tags, & searches. Downloading notes.</source> <translation>ダウンロード完了(ノートブックã€ã‚¿ã‚°ã€æ¤œç´¢ï¼‰ ノートã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã€‚</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="267"/> <source>% complete.</source> <translation>%完了。</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="280"/> <source>Download complete.</source> <translation>ダウンロード完了。</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>Downloading </source> <translation>ダウンロード中</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <source>% complete for tags in shared notebook </source> <translation>%完了(共有ノートブックã®ã‚¿ã‚°ï¼‰</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="721"/> <source>Downloading notes for shared notebook </source> <translation>共有ノートブックã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="743"/> <source>% complete for shared notebook </source> <translation>%完了(共有ノートブック)</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1149"/> <source>Error uploading note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1151"/> <source>Error uploading note with a missing title!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="721"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>.</source> <translation>。</translation> </message> </context> <context> <name>TableDialog</name> <message> <location filename="../dialog/tabledialog.cpp" line="30"/> <source>Insert Table</source> <translation>è¡¨ã®æŒ¿å…¥</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="34"/> <source>Percent</source> <translation>パーセント</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="35"/> <source>Pixels</source> <translation>ピクセル</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="51"/> <source>Rows</source> <translation>列</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="53"/> <source>Columns</source> <translation>行</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="55"/> <source>Width</source> <translation>å¹…</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="57"/> <source>Unit</source> <translation>å˜ä½</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="64"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="67"/> <source>Cancel</source> <translation>キャンセル</translation> </message> </context> <context> <name>TablePropertiesDialog</name> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="72"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="105"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="86"/> <source>Cancel</source> <translation type="unfinished">キャンセル</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="87"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="106"/> <source>Cell Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="214"/> <source>Row 1 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="216"/> <source>Row 1 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="218"/> <source>Row 1 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="220"/> <source>Row 2 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="222"/> <source>Row 2 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="224"/> <source>Row 2 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="226"/> <source>Row 3 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="228"/> <source>Row 3 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="230"/> <source>Row 3 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="456"/> <source>Width</source> <translation type="unfinished">å¹…</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="464"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="480"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="494"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="511"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="526"/> <source>Percent</source> <translation type="unfinished">パーセント</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="465"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="479"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="493"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="510"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="525"/> <source>Pixels</source> <translation type="unfinished">ピクセル</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="476"/> <source>Top Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="490"/> <source>Bottom Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="507"/> <source>Left Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="522"/> <source>Right Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="560"/> <source>Border Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="561"/> <source>Font Color</source> <translation type="unfinished">フォントã®è‰²</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="562"/> <source>Background Color</source> <translation type="unfinished">背景ã®è‰²</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="576"/> <source>Border Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="587"/> <source>Padding</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="597"/> <source>Top Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="606"/> <source>Bottom Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="615"/> <source>Left Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="624"/> <source>Right Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="636"/> <source>Horizontal Alignment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="641"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="642"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="643"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="644"/> <source>Center</source> <translation type="unfinished">中央</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="676"/> <source>Solid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="677"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="678"/> <source>Dotted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="679"/> <source>Dashed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="680"/> <source>Double</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="681"/> <source>Ridge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="682"/> <source>Inset</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="683"/> <source>Outset</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagEditorNewTag</name> <message> <location filename="../gui/browserWidgets/tageditornewtag.cpp" line="55"/> <source>Click to add tag...</source> <translation>ã‚¿ã‚°ã®è¿½åŠ ...</translation> </message> </context> <context> <name>TagProperties</name> <message> <location filename="../dialog/tagproperties.cpp" line="36"/> <source>Tag</source> <translation>ã‚¿ã‚°</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="42"/> <source>Name</source> <translation>åå‰</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="48"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="50"/> <source>Cancel</source> <translation>キャンセル</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="102"/> <source>Add Tag</source> <translation>タグ追加</translation> </message> </context> <context> <name>ThumbnailPreferences</name> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="14"/> <source>Disable thumbnail generation</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="15"/> <source>Images to generate per interval</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="16"/> <source>Minimum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="17"/> <source>Maximum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>UrlEditor</name> <message> <location filename="../gui/browserWidgets/urleditor.cpp" line="45"/> <source>Click to set source URL...</source> <translation>ソースURLã®è¨­å®š</translation> </message> </context> <context> <name>WatchFolderAdd</name> <message> <location filename="../dialog/watchfolderadd.cpp" line="47"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="51"/> <source>Cancel</source> <translation>キャンセル</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="55"/> <source>Directory</source> <translation>ディレクトリ</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="63"/> <source>Keep</source> <translation>ä¿æŒ</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="64"/> <source>Delete</source> <translation>削除</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="90"/> <source>Notebook</source> <translation>ノートブック</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="92"/> <source>After import</source> <translation>å–り込ã¿å¾Œ</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="94"/> <source>Include subdirectories</source> <translation>サブディレクトリをå«ã‚€</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="101"/> <source>Add Import Folder</source> <translation>å–り込むフォルダーã®è¿½åŠ </translation> </message> </context> <context> <name>WatchFolderDialog</name> <message> <location filename="../dialog/watchfolderdialog.cpp" line="38"/> <source>OK</source> <translation>OK</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="42"/> <source>Cancel</source> <translation>キャンセル</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="50"/> <source>Auto Import Folders</source> <translation>自動å–り込ã¿ãƒ•ォルダー</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="62"/> <source>Add</source> <translation>追加</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="66"/> <source>Edit</source> <translation>編集</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="71"/> <location filename="../dialog/watchfolderdialog.cpp" line="162"/> <source>Delete</source> <translation>削除</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="112"/> <source>Directory</source> <translation>ディレクトリ</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="113"/> <source>Target Notebook</source> <translation>対象ノートブック</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="114"/> <location filename="../dialog/watchfolderdialog.cpp" line="159"/> <source>Keep</source> <translation>ä¿æŒ</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="115"/> <source>Include Subdirectories</source> <translation>サブディレクトリをå«ã‚€</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="169"/> <source>Yes</source> <translation>ã¯ã„</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="172"/> <source>No</source> <translation>ã„ã„ãˆ</translation> </message> </context> </TS> ��������������������������������������������������������������������������������������������������nixnote2-2.0.2/translations/nixnote2_pl.ts����������������������������������������������������������0000664�0000000�0000000�00000615170�13156041044�0020623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="pl_PL"> <context> <name>AboutDialog</name> <message> <location filename="../dialog/aboutdialog.cpp" line="36"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/aboutdialog.cpp" line="53"/> <source>Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountDialog</name> <message> <location filename="../dialog/accountdialog.cpp" line="37"/> <source>Account Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="40"/> <source>Normal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="46"/> <source>Premium</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="48"/> <source>VIP</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="50"/> <source>Manager</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="52"/> <source>Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="54"/> <source>Admin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="75"/> <source> Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="79"/> <source> KB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="83"/> <source> MB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="90"/> <source>Account:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="93"/> <source>User Name:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="95"/> <source>Account Type:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="97"/> <source>Limit:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="99"/> <source>Uploaded In This Period:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="103"/> <source>Less than 1MB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="104"/> <source>Current Cycle Ends:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="112"/> <source>OK</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountMaintenanceDialog</name> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="34"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="35"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="36"/> <source>Add</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="37"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="38"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="64"/> <source>User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="104"/> <source>Are you sure you want to delete this account?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="105"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="117"/> <source>You cannot delete the active account.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="170"/> <location filename="../dialog/accountmaintenancedialog.cpp" line="194"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> </context> <context> <name>AddNote</name> <message> <location filename="../cmdtools/addnote.cpp" line="33"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AddUserAccountDialog</name> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="38"/> <source>Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="39"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="41"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="46"/> <source>Account Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="69"/> <source>Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="70"/> <source>Yinxiang Biji</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="71"/> <source>Evernote Sandbox</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AppearancePreferences</name> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="39"/> <source>Show tray icon</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="40"/> <source>Display PDFs inline**</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="41"/> <source>Show splash screen on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="42"/> <source>Start automatically at login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="43"/> <source>Confirm Deletes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="44"/> <source>Show missed reminders on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="45"/> <source>Always Start minimized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="46"/> <source>Show notebook and tag totals</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="47"/> <source>Auto-Hide editor toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="49"/> <source>Disable note editing on statup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="50"/> <source>Focus on Note Title on New Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="51"/> <source>Limit Editor to Web Fonts*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="53"/> <source>Show note list grid*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="54"/> <source>Alternate note list colors*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="55"/> <source>Set author on new notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="57"/> <source>Preview fonts in editor dialag*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="61"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="68"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="75"/> <source>Do Nothing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="62"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="69"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="76"/> <source>Show/Hide NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="63"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="70"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="77"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="64"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="71"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="78"/> <source>New Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="65"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="72"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="79"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="82"/> <source>Open New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="83"/> <source>Open New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="98"/> <source>Qt Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="99"/> <source>notify-send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="106"/> <source>Startup Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="108"/> <source>Restore Selection Criteria</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="109"/> <source>Select Default Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="110"/> <source>View All Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="120"/> <source>Minimize to tray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="121"/> <source>Close to tray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="143"/> <source>Notification Service</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="146"/> <source>Middle Click Open Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="149"/> <source>Tray Icon Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="152"/> <source>Tray Icon Middle Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="155"/> <source>Tray Icon Double Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="158"/> <source>Default GUI Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="161"/> <source>Default GUI Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="164"/> <source>Default Editor Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="167"/> <source>Default Editor Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="171"/> <source>* May require restart on some systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="172"/> <source>** Can crash on Gnome systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="102"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="405"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="423"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="442"/> <source>System Default</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AttachmentIconBuilder</name> <message> <location filename="../html/attachmenticonbuilder.cpp" line="74"/> <source>Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/attachmenticonbuilder.cpp" line="78"/> <source>KB</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AuthorEditor</name> <message> <location filename="../gui/browserWidgets/authoreditor.cpp" line="37"/> <source>Click to set author</source> <translation type="unfinished"></translation> </message> </context> <context> <name>BatchImport</name> <message> <location filename="../xml/batchimport.cpp" line="112"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CloseNotebookDialog</name> <message> <location filename="../dialog/closenotebookdialog.cpp" line="37"/> <source>Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="42"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="43"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="56"/> <source>Open Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="57"/> <source>Closed Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="59"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="60"/> <source>Close</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CmdLineQuery</name> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="67"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="69"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="72"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="75"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="78"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="81"/> <source>Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="84"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="87"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="90"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="93"/> <source>Todo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="96"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="99"/> <source>Reminder Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="181"/> <location filename="../cmdtools/cmdlinequery.cpp" line="190"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="183"/> <location filename="../cmdtools/cmdlinequery.cpp" line="188"/> <source>Yes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CmdLineTool</name> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="56"/> <source>Unable to attach to shared memory segment. Is the other NixNote running? </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="315"/> <location filename="../cmdtools/cmdlinetool.cpp" line="452"/> <source> has been created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="318"/> <source>No response from NixNote. Please verify that the note was created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="332"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="535"/> <source> was not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="538"/> <location filename="../cmdtools/cmdlinetool.cpp" line="609"/> <source> has been appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="541"/> <source>No response from NixNote. Please verify that the note was appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="552"/> <source> was not found. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="221"/> <location filename="../cmdtools/cmdlinetool.cpp" line="654"/> <source>No response received from NixNote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="156"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="663"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="674"/> <location filename="../cmdtools/cmdlinetool.cpp" line="690"/> <location filename="../cmdtools/cmdlinetool.cpp" line="722"/> <location filename="../cmdtools/cmdlinetool.cpp" line="742"/> <source>This cannot be done with NixNote running.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="732"/> <location filename="../cmdtools/cmdlinetool.cpp" line="752"/> <source>Notebook not found: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="765"/> <source>OAuth token not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="783"/> <source>Error synchronizing with Evernote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="786"/> <source>Sync completed.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ColorSettings</name> <message> <location filename="../settings/colorsettings.cpp" line="37"/> <source>White</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="38"/> <source>Red</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="39"/> <source>Blue</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="40"/> <source>Green</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="41"/> <source>Yellow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="42"/> <source>Black</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="43"/> <source>Purple</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="44"/> <source>Brown</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="45"/> <source>Orange</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="46"/> <source>Grey</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="47"/> <source>Powder Blue</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CommunicationManager</name> <message> <location filename="../communication/communicationmanager.cpp" line="675"/> <source>Linked notebook notestore URL missing.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source>API rate limit exceeded. Please try again in </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <source> minutes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source> minute.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1206"/> <source>EDAMSystemException </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1208"/> <source>EDAMSystemException: Unknown error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1232"/> <source>EDAMNotFoundException: Note not found</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DatabaseStatus</name> <message> <location filename="../dialog/databasestatus.cpp" line="35"/> <source>Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="47"/> <source>Total Notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="49"/> <source>Total Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="51"/> <source>Unindexed Notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="53"/> <source>Unindexed Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="55"/> <source>Thumbnails Needed:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="60"/> <source>OK</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DateDelegate</name> <message> <location filename="../gui/datedelegate.cpp" line="42"/> <source>Today</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DateEditor</name> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="38"/> <source>Created:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="42"/> <source>Updated:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="46"/> <source>Subject:</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DebugPreferences</name> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="38"/> <source>Disable image search highlighting.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="35"/> <source>Strict note checking.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="37"/> <source>Disable uploads to server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="39"/> <source>Show LID column (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="40"/> <source>Disable Tag Sorting (useful for non-ASCII sort bug).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="41"/> <source>Force UTF8 Encoding.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="59"/> <source>Intercept Unix SIGHUP (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="64"/> <source>Use multipe theads to save note contents (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="68"/> <source>Use libtidy directly (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="72"/> <source>Auto-Save Interval (in seconds).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="79"/> <source>Message Level</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="82"/> <source>Trace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="83"/> <source>Debug</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="84"/> <source>Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="85"/> <source>Warnings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="86"/> <source>Errors</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="87"/> <source>Fatal</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EditorButtonBar</name> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="37"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="133"/> <source>Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="38"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="137"/> <source>Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="39"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="142"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="40"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="41"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="150"/> <source>Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="42"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="153"/> <source>Remove Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="43"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="159"/> <source>Bold</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="44"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="166"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="167"/> <source>Italics</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="45"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="184"/> <source>Superscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="46"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="188"/> <source>Subscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="47"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="174"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="175"/> <source>Underline</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="48"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="180"/> <source>Strikethrough</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="49"/> <source>Align Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="50"/> <source>Align Center</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="51"/> <source>Align Full</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="52"/> <source>Align Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="53"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="208"/> <source>Horizontal Line</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="54"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="55"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="220"/> <source>Shift Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="56"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="224"/> <source>Shift Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="57"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="228"/> <source>Bullet List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="58"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="232"/> <source>Number List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="59"/> <source>Font</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="60"/> <source>Font Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="61"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="248"/> <source>Font Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="62"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="257"/> <source>Highlight</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="63"/> <source>To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="192"/> <source>Center Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="196"/> <source>Fully Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="214"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="215"/> <source>Insert Date & Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="262"/> <source>Todo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="64"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="266"/> <source>Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="65"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="270"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="66"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="204"/> <source>Left Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="200"/> <source>Right Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="274"/> <source>Insert HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="661"/> <source>Times</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailDialog</name> <message> <location filename="../dialog/emaildialog.cpp" line="36"/> <source>Send Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="38"/> <source>Send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="39"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="51"/> <source>To:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="53"/> <source>BCC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="55"/> <source>CC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="57"/> <source>Subject:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="59"/> <source>Note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="77"/> <source>CC me on this email</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailNote</name> <message> <location filename="../cmdtools/emailnote.cpp" line="261"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="327"/> <source>Connection Error: Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="333"/> <source>Login Error : Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="338"/> <source>Send Error : Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="344"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailPreferences</name> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="17"/> <source>SMTP Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="18"/> <source>Server Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="19"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="20"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="21"/> <source>Sender Display Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="22"/> <source>Sender Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="23"/> <source>Connection Type</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="31"/> <source>Plain Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="32"/> <source>SSL Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="33"/> <source>TLS Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="35"/> <source>Send Test Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="108"/> <location filename="../dialog/preferences/emailpreferences.cpp" line="113"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="109"/> <source>You must specify a SMTP server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="114"/> <source>You must specify a sender email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="146"/> <source>Test Email From NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="152"/> <source><h1>This is a test email from NixNote.</h1> </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="153"/> <source>If you are reading it then your email preferences are are setup properly.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message sent.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnCryptDialog</name> <message> <location filename="../dialog/encryptdialog.cpp" line="31"/> <source>Encrypt Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="47"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="49"/> <source>Verify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="51"/> <source>Hint</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="53"/> <source>Remember Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="61"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="65"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="113"/> <source>Password must be at least 4 characters</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="117"/> <source>Passwords do not match</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="121"/> <source>Hint must be entered</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnDecryptDialog</name> <message> <location filename="../dialog/endecryptdialog.cpp" line="35"/> <source>Decrypt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="51"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="52"/> <source>Hint</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="59"/> <source>Permanently Decrypt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="61"/> <source>Remember Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="66"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="70"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExportData</name> <message> <location filename="../xml/exportdata.cpp" line="54"/> <source>Cannot open file.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="62"/> <source>Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="81"/> <source>Backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="114"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="151"/> <source>Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="360"/> <source>Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="405"/> <source>Linked Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="448"/> <source>Shared Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="508"/> <source>Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="725"/> <source>Backup Canceled</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExternalBrowse</name> <message> <location filename="../gui/externalbrowse.cpp" line="32"/> <source>NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/externalbrowse.cpp" line="124"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExtractNotes</name> <message> <location filename="../cmdtools/extractnotes.cpp" line="41"/> <location filename="../cmdtools/extractnotes.cpp" line="82"/> <source>Output file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="64"/> <source>Deleting notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="65"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FavoritesView</name> <message> <location filename="../gui/favoritesview.cpp" line="68"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="90"/> <source>Remove from shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="565"/> <source>Are you sure you want to remove this shortcut?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="566"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>FileWatcher</name> <message> <location filename="../watcher/filewatcher.cpp" line="72"/> <source>Error removing file: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FindReplace</name> <message> <location filename="../gui/findreplace.cpp" line="46"/> <source>Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="47"/> <source>Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="48"/> <source>Match case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="57"/> <source>Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="58"/> <source>Replace all</source> <translation type="unfinished"></translation> </message> </context> <context> <name>HtmlEntitiesDialog</name> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="34"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="35"/> <source>Edit entries list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="36"/> <source>Save entities list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="71"/> <source>HTML Entities Selection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="206"/> <source>Comma separated list of HTML entities. See http://www.w3schools.com/charsets/ for list.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportData</name> <message> <location filename="../xml/importdata.cpp" line="59"/> <source>Imported Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="106"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="107"/> <location filename="../xml/importdata.cpp" line="119"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="130"/> <source>Importing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="131"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="133"/> <source>Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="134"/> <source>Restoring Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportEnex</name> <message> <location filename="../xml/importenex.cpp" line="40"/> <source>Imported Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="83"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="84"/> <location filename="../xml/importenex.cpp" line="94"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="101"/> <location filename="../xml/importenex.cpp" line="102"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportNotes</name> <message> <location filename="../cmdtools/importnotes.cpp" line="19"/> <source>Input file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/importnotes.cpp" line="24"/> <source>Input file not found.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLatexDialog</name> <message> <location filename="../dialog/insertlatexdialog.cpp" line="32"/> <source>Insert LaTeX Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="42"/> <source>Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="52"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLinkDialog</name> <message> <location filename="../dialog/insertlinkdialog.cpp" line="34"/> <source>Insert Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="45"/> <source>URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="54"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LineEdit</name> <message> <location filename="../gui/lineedit.cpp" line="39"/> <source>Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocalePreferences</name> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="37"/> <source>Date Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="40"/> <source>MM/dd/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="41"/> <source>MM/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="42"/> <source>M/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="43"/> <source>M/d/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="44"/> <source>dd/MM/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="45"/> <source>d/M/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="46"/> <source>dd/MM/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="47"/> <source>d/M/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="48"/> <source>yyyy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="49"/> <source>yy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="52"/> <source>Time Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="55"/> <source>HH:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="56"/> <source>HH:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="57"/> <source>HH:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="58"/> <source>HH:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="59"/> <source>hh:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="60"/> <source>hh:mm:ss a- </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="61"/> <source>h:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="62"/> <source>hh:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="63"/> <source>hh:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="64"/> <source>h:mm a - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationDialog</name> <message> <location filename="../dialog/locationdialog.cpp" line="33"/> <source>Location</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="40"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="42"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="44"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="49"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="52"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationEditor</name> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="42"/> <source>Click to set location...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="45"/> <source>Edit...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="46"/> <source>Clear</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="47"/> <source>View on map</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LogViewer</name> <message> <location filename="../dialog/logviewer.cpp" line="41"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="43"/> <source>Refresh</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="45"/> <source>Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="54"/> <source>Save Logs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>Save Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>NixNote Log (*.log);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LoginDialog</name> <message> <location filename="../dialog/logindialog.cpp" line="34"/> <source>NixNote Login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="43"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="44"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="52"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="56"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NAttributeTree</name> <message> <location filename="../gui/nattributetree.cpp" line="48"/> <source>Attributes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="129"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="132"/> <location filename="../gui/nattributetree.cpp" line="213"/> <source>Since</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="136"/> <location filename="../gui/nattributetree.cpp" line="173"/> <location filename="../gui/nattributetree.cpp" line="217"/> <location filename="../gui/nattributetree.cpp" line="254"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="140"/> <location filename="../gui/nattributetree.cpp" line="177"/> <location filename="../gui/nattributetree.cpp" line="221"/> <location filename="../gui/nattributetree.cpp" line="258"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="144"/> <location filename="../gui/nattributetree.cpp" line="181"/> <location filename="../gui/nattributetree.cpp" line="225"/> <location filename="../gui/nattributetree.cpp" line="262"/> <source>This week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="148"/> <location filename="../gui/nattributetree.cpp" line="185"/> <location filename="../gui/nattributetree.cpp" line="229"/> <location filename="../gui/nattributetree.cpp" line="266"/> <source>Last week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="152"/> <location filename="../gui/nattributetree.cpp" line="189"/> <location filename="../gui/nattributetree.cpp" line="233"/> <location filename="../gui/nattributetree.cpp" line="270"/> <source>This Month</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="156"/> <location filename="../gui/nattributetree.cpp" line="193"/> <location filename="../gui/nattributetree.cpp" line="237"/> <location filename="../gui/nattributetree.cpp" line="274"/> <source>Last Month</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="160"/> <location filename="../gui/nattributetree.cpp" line="197"/> <location filename="../gui/nattributetree.cpp" line="241"/> <location filename="../gui/nattributetree.cpp" line="278"/> <source>This Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="164"/> <location filename="../gui/nattributetree.cpp" line="201"/> <location filename="../gui/nattributetree.cpp" line="245"/> <location filename="../gui/nattributetree.cpp" line="282"/> <source>Last Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="169"/> <location filename="../gui/nattributetree.cpp" line="250"/> <source>Before</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="210"/> <source>Last Modified</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="289"/> <source>Contains</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="292"/> <source>Images</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="296"/> <source>Audio</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="300"/> <source>Ink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="304"/> <source>Encrypted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="308"/> <source>To-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="312"/> <source>Unfinished to-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="316"/> <source>Finished to-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="320"/> <source>PDF document</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="324"/> <source>Attachment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="328"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="332"/> <source>Uncompleted Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="336"/> <source>Future Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="341"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="344"/> <source>Emailed to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="348"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="352"/> <source>Web page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="356"/> <source>Mobile</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="360"/> <source>Another application</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NBrowserWindow</name> <message> <location filename="../gui/nbrowserwindow.cpp" line="521"/> <location filename="../gui/nbrowserwindow.cpp" line="3112"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="523"/> <location filename="../gui/nbrowserwindow.cpp" line="3114"/> <source>Tomorrow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="525"/> <location filename="../gui/nbrowserwindow.cpp" line="3116"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to save this note. Either tidy isn't installed or the note is too complex to save.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="1808"/> <source>Insert Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>Unable Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>This is an ink note. Ink notes are not supported since Evernote has not published any specifications on them and I'm too lazy to figure them out by myself.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2240"/> <source>Edit Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2304"/> <source>Unable to create LaTeX image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2305"/> <source>Unable to create LaTeX image. Are you sure mimetex is installed?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2635"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2636"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2645"/> <source>Sending Email. Please be patient.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3159"/> <source>Decryption Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3160"/> <source>Unknown encryption method. Unable to decrypt.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3263"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3264"/> <source>Error Encrypting String. Please verify you have Java installed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Hunspell plugin not found or could not be loaded.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NMainMenuBar</name> <message> <location filename="../gui/nmainmenubar.cpp" line="60"/> <source>&File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="79"/> <source>Print this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="87"/> <source>Backup database to a file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="93"/> <source>Restore from a backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="113"/> <source>Import notes from an export file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="133"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="151"/> <source>Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="159"/> <source>Close the program</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="175"/> <source>&Edit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="78"/> <source>&Print Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="64"/> <source>Email Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="65"/> <source>Email a copy of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="71"/> <source>Print Preview Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="72"/> <source>Print preview of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="86"/> <source>&Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="92"/> <source>&Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="112"/> <source>&Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="140"/> <source>&Add Another User...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="144"/> <source>&User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="150"/> <source>&Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="158"/> <source>E&xit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="180"/> <source>&Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="184"/> <source>&Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="190"/> <source>&Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="194"/> <source>C&opy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="198"/> <source>&Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="202"/> <source>Pas&te as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="206"/> <source>Remo&ve Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="212"/> <source>Select &All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="218"/> <source>F&ind and Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="220"/> <source>&Search Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="225"/> <source>&Reset Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="232"/> <source>&Find in Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="238"/> <source>Find &Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="243"/> <source>Find &Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="250"/> <source>Replace &Within Note...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="260"/> <source>Preferences</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="268"/> <source>&View</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="273"/> <source>Wide Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="278"/> <source>Narrow Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="285"/> <source>&Show Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="289"/> <source>Note &History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="295"/> <source>&Presentation Mode</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="299"/> <source>Show &Left Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="306"/> <source>Show &Favorites</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="313"/> <source>Show &Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="320"/> <source>Show Ta&gs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="327"/> <source>Show Sa&ved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="341"/> <source>Show T&rash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="348"/> <source>Show N&ote List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="355"/> <source>Show Note &Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="364"/> <source>View Note &Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="368"/> <source>View &Toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="375"/> <source>View Status&bar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="391"/> <source>New &Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="396"/> <source>New &Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="401"/> <source>Dupl&icate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="406"/> <source>&Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="411"/> <source>Reindex Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="418"/> <source>&Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="427"/> <source>&Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="432"/> <source>&UnPin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="446"/> <source>&Synchronize</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="447"/> <source>Synchronize with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="452"/> <source>&Disconnect</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="460"/> <source>Pause &Indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="461"/> <source>Temporarily pause indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="468"/> <source>Disable &Editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="469"/> <source>Temporarily disable note editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="476"/> <source>A&ccount</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="490"/> <source>&Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="514"/> <source>&User's Guide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="537"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="538"/> <source>View currentt shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="547"/> <source>Github Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="548"/> <source>Goto the NixNote2 Github project page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="585"/> <source>About &Qt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="625"/> <source>Theme</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="386"/> <source>&Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="100"/> <source>&Export to NixNote Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="101"/> <source>Export selected notes to a NNEX file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="106"/> <source>&Export Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="107"/> <source>Export selected notes to a PDF file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="441"/> <source>&Tools</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="453"/> <source>Disconnect from Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="477"/> <source>Account information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="484"/> <source>&Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="485"/> <source>Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="491"/> <source>Reindex all notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="499"/> <source>&Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="500"/> <source>Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="509"/> <source>&Help</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="515"/> <source>Open the user manual.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="542"/> <source>Message &Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="554"/> <source>&Evernote Account Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="559"/> <source>Evernote &Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="568"/> <source>Evernote &Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="573"/> <source>Evernote User &Forum</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="580"/> <source>&About</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="634"/> <source>System Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="543"/> <source>View current program messages</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="334"/> <source>Show &Attribute Filter</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="520"/> <source>Theme &Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="521"/> <source>View information about the current theme.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="555"/> <source>Go to your Evernote account page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="560"/> <source>Go to Evernote's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="562"/> <source>Yinxiang Biji Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="563"/> <source>Go to Yinxiang Biji's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="569"/> <source>Go to Evernote Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="574"/> <source>Go to the Evernote user support forum.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="581"/> <location filename="../gui/nmainmenubar.cpp" line="586"/> <source>About</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NNotebookView</name> <message> <location filename="../gui/nnotebookview.cpp" line="69"/> <source>Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="86"/> <source>Create New Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="95"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="103"/> <source>Add to stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="116"/> <source>Create New stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="119"/> <source>Remove from stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="123"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="131"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="641"/> <source>Are you sure you want to delete this notebook?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="642"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>New Stack (</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NSearchView</name> <message> <location filename="../gui/nsearchview.cpp" line="65"/> <source>Saved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="74"/> <source>Create Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="83"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="90"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="94"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="404"/> <source>Are you sure you want to delete this saved search?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="405"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTabWidget</name> <message> <location filename="../gui/ntabwidget.cpp" line="254"/> <location filename="../gui/ntabwidget.cpp" line="262"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntabwidget.cpp" line="267"/> <location filename="../gui/ntabwidget.cpp" line="334"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableView</name> <message> <location filename="../gui/ntableview.cpp" line="203"/> <source>Open Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="209"/> <source>Open Note In New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="215"/> <source>Open Note In New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="222"/> <source>Add Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="227"/> <source>Delete Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="238"/> <source>Restore Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="244"/> <source>Copy Note Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="249"/> <source>Duplicate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="254"/> <source>Reminders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="258"/> <source>Remove</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="263"/> <source>Mark Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="269"/> <source>Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="274"/> <source>Unpin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="279"/> <source>Merge Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="285"/> <source>Create Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="291"/> <source>Title Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="296"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="301"/> <source>White</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="304"/> <source>Red</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="307"/> <source>Blue</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="310"/> <source>Green</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="313"/> <source>Yellow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="316"/> <source>Black</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="319"/> <source>Gray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="322"/> <source>Cyan</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="325"/> <source>Magenta</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="663"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="666"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="672"/> <source>selected note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="677"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="942"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="943"/> <source>This note has never been synchronized. Using this in a note link can cause problems unless you synchronize it first.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1319"/> <source>Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1370"/> <source>One or more notes are unsynchronized. This can cause issues if they are later synchronized. Do you wish to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1654"/> <source>Note LID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1657"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1660"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1663"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1666"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1668"/> <location filename="../gui/ntableview.cpp" line="1676"/> <location filename="../gui/ntableview.cpp" line="1682"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1670"/> <location filename="../gui/ntableview.cpp" line="1674"/> <location filename="../gui/ntableview.cpp" line="1680"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1672"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1678"/> <source>Has To-Do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1684"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1687"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1690"/> <source>Date Deleted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1698"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1706"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1710"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1719"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1728"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1737"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1740"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1743"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1746"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1754"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableViewHeader</name> <message> <location filename="../gui/ntableviewheader.cpp" line="42"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="47"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="52"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="57"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="62"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="67"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="72"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="77"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="82"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="87"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="92"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="97"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="102"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="107"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="112"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="117"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="122"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="128"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="133"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="138"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="143"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTagView</name> <message> <location filename="../gui/ntagview.cpp" line="67"/> <location filename="../gui/ntagview.cpp" line="156"/> <source>Tags from Personal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="91"/> <source>Create New Tag</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="100"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="107"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="110"/> <source>Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="113"/> <source>Hide Unassigned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="119"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="154"/> <source>Tags from </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="351"/> <source>-<Missing Tag>-</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="706"/> <source>Are you sure you want to merge these tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="707"/> <source>Verify Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="753"/> <source>Are you sure you want to delete this tag?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="755"/> <source>Are you sure you want to delete all selected tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="756"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTitleEditor</name> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="123"/> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="137"/> <source>Untitled note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="134"/> <source>untitled note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTrashTree</name> <message> <location filename="../gui/ntrashtree.cpp" line="53"/> <source>Trash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="65"/> <source>Restore Deleted Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="68"/> <source>Empty Trash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="238"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="239"/> <source>Are you sure you want to permanently delete these notes?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NWebView</name> <message> <location filename="../gui/nwebview.cpp" line="56"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="61"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="66"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="71"/> <source>Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="76"/> <source>Paste as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="81"/> <source>Remove Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="86"/> <source>Copy Note URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="93"/> <source>Background Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="113"/> <source>To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="120"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="127"/> <source>Encrypted Selected Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="132"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="137"/> <source>Insert Hyperlink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="142"/> <source>Quick Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="147"/> <source>Remove Hyperlink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="152"/> <source>Attach File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="158"/> <source>Insert LaTeX Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="164"/> <source>Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="167"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="173"/> <source>Insert Row</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="178"/> <source>Insert Column</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="185"/> <source>Delete Row</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="189"/> <source>Delete Column</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="196"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="203"/> <source>Image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="206"/> <source>Save Image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="214"/> <source>Rotate Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="218"/> <source>Rotate Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="224"/> <source>Save Attachment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="502"/> <location filename="../gui/nwebview.cpp" line="532"/> <source>Save File</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NixNote</name> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy Not Found</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy is not found on this system. Until tidy is installed you cannot save any notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="291"/> <source>ToolBar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="303"/> <source>Back</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="304"/> <source>Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="314"/> <source>All Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="316"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="319"/> <source>Print</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="329"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="332"/> <source>New Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="344"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="347"/> <source>Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="349"/> <source>Usage</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="531"/> <location filename="../nixnote.cpp" line="3183"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="547"/> <source>Show/Hide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="559"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1799"/> <source>Confirm Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1815"/> <source>Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1818"/> <source>Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1730"/> <location filename="../nixnote.cpp" line="1816"/> <source>NixNote Export (*.nnex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="320"/> <source>Print the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="322"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="323"/> <source>Email the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="528"/> <source>Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="538"/> <source>Shortcut Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="540"/> <source>Pinned Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="542"/> <source>Recently Updated Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1437"/> <location filename="../nixnote.cpp" line="2350"/> <source>Log in to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1439"/> <location filename="../nixnote.cpp" line="2352"/> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <location filename="../nixnote.cpp" line="1761"/> <location filename="../nixnote.cpp" line="1857"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <source>No notes selected.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1722"/> <source>Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1724"/> <source>Export Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1749"/> <source>Performing backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1751"/> <source>Performing export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1768"/> <source>Database backup complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1770"/> <source>Note extract complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1796"/> <source>This is used to restore a database from backups. It is HIGHLY recommended that this only be used to populate an empty database. Restoring into a database that already has data can cause problems. Are you sure you want to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1819"/> <source>NixNote Export (*.nnex);;Evernote Export (*.enex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1846"/> <source>Restoring database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1848"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1880"/> <source>Database has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1882"/> <source>Notes have been imported.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <location filename="../nixnote.cpp" line="1918"/> <source>Sync Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <source>Sync completed with errors.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1918"/> <source>Sync error. See message log for details</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync completed successfully.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2002"/> <source>Untitled note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>This note has never been synchronized with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3872"/> <source>Error loading Webcam plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3887"/> <source>Error loading Hunspell plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3913"/> <location filename="../nixnote.cpp" line="3965"/> <source>PDF Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>Export complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3937"/> <source>Exporting Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3938"/> <source>Exporting notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2391"/> <location filename="../nixnote.cpp" line="2398"/> <source>Error retrieving note.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2392"/> <location filename="../nixnote.cpp" line="2399"/> <source>Error retrieving note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <location filename="../nixnote.cpp" line="2431"/> <source>Note Restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <source>A new copy has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2431"/> <source>Note successfully restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2434"/> <source>Note restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2650"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3054"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex the entire database?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3247"/> <source>Notes will be reindexed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Webcam plugin not found or could not be loaded</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3281"/> <source>Unable to find webcam or capture image.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3282"/> <source>Webcam Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3432"/> <source>Note Reindexed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3444"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3447"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3451"/> <source>this note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3455"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3816"/> <source>Press ESC to exit.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteFormatter</name> <message> <location filename="../html/noteformatter.cpp" line="657"/> <source>File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/noteformatter.cpp" line="691"/> <source>Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/noteformatter.cpp" line="695"/> <source>KB</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteHistorySelect</name> <message> <location filename="../dialog/notehistoryselect.cpp" line="32"/> <source>Note History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="34"/> <source>Import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="39"/> <source>Replace current note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="80"/> <source>Current copy on Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="93"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="95"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteProperties</name> <message> <location filename="../dialog/noteproperties.cpp" line="37"/> <source>Note Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/noteproperties.cpp" line="38"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NotebookProperties</name> <message> <location filename="../dialog/notebookproperties.cpp" line="38"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="42"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="46"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="52"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="60"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="62"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="135"/> <source>Add Notebook</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OAuthWindow</name> <message> <location filename="../oauth/oauthwindow.cpp" line="70"/> <source>Please Grant NixNote Access</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="81"/> <source>SSL Support not found. Aborting connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="132"/> <source>Error receiving temporary credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="176"/> <source>Error receiving permanent credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="219"/> <source>Error receiving authorization</source> <translation type="unfinished"></translation> </message> </context> <context> <name>PopplerViewer</name> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source>Page </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source> of </source> <translation type="unfinished"></translation> </message> </context> <context> <name>PreferencesDialog</name> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="30"/> <source>User Settings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="49"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="92"/> <source>Appearance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="98"/> <source>Locale</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="104"/> <source>Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="110"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="116"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="121"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="127"/> <source>Advanced</source> <translation type="unfinished"></translation> </message> </context> <context> <name>QApplication</name> <message> <location filename="../dialog/screencapture.cpp" line="108"/> <source>Use your mouse to draw a rectangle to screenshot or exit pressing any key or using the right or middle mouse buttons.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/screencapture.cpp" line="145"/> <source>%1 x %2 pixels </source> <translation type="unfinished"></translation> </message> </context> <context> <name>QObject</name> <message> <location filename="../gui/ntableview.cpp" line="175"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="176"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="177"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="178"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="179"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="180"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="181"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="182"/> <source>Deletion Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="183"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="184"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="185"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="186"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="187"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="188"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="189"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="190"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="191"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="192"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="193"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="194"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="195"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="196"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="197"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderButton</name> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="35"/> <source>Mark as Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="36"/> <source>Change Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="37"/> <source>Clear Reminder</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderManager</name> <message> <location filename="../reminders/remindermanager.cpp" line="85"/> <source>Reminders Due</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderSetDialog</name> <message> <location filename="../dialog/remindersetdialog.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/remindersetdialog.cpp" line="48"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>RemoteQuery</name> <message> <location filename="../filters/remotequery.cpp" line="113"/> <location filename="../filters/remotequery.cpp" line="130"/> <source>Today</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SavedSearchProperties</name> <message> <location filename="../dialog/savedsearchproperties.cpp" line="35"/> <source>Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="43"/> <source>Query</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="51"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="53"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="106"/> <source>Add Saved Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SearchPreferences</name> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="36"/> <source>Index Attachments</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="44"/> <source>Clear Notebook Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="48"/> <source>Clear Tag Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="52"/> <source>Clear Search Text on Notebook Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="56"/> <source>Show Any Matching Tags When Selecting Multiple Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="60"/> <source>Index PDFs locally</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="64"/> <source>Background Indexing (requires restart & may cause issues on some systems)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="68"/> <source>Experimental: Force search to lower case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="73"/> <source>Minimum Image Recognition Weight</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ShortcutDialog</name> <message> <location filename="../dialog/shortcutdialog.cpp" line="41"/> <source>Defined Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/shortcutdialog.cpp" line="42"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SpellCheckDialog</name> <message> <location filename="../dialog/spellcheckdialog.cpp" line="35"/> <source>Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="50"/> <source>Suggestion</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="56"/> <source>Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="57"/> <source>Ignore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="58"/> <source>Ignore All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="59"/> <source>Add To Dictionary</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="66"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncPreferences</name> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="34"/> <source>Sync automatically</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="38"/> <source>Every 15 minutes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="39"/> <source>Every 30 minutes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="40"/> <source>Every hour</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="41"/> <source>Every day</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="43"/> <source>Sync on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="45"/> <source>Sync on shutdown</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="47"/> <source>Enable sync notifications</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="48"/> <source>Show successful syncs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="49"/> <source>Restart sync on API limit (experimental)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="51"/> <source>Enable Proxy*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="52"/> <source>Enable Socks5</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="53"/> <source>Proxy Hostname</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="54"/> <source>Proxy Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="55"/> <source>Proxy Username</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="56"/> <source>Proxy Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="57"/> <source>*Note: Restart required</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="73"/> <source>Popup message on sync errors.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncRunner</name> <message> <location filename="../threads/syncrunner.cpp" line="134"/> <source>Beginning Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="142"/> <source>Downloading changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="192"/> <source>Sync Complete Successfully</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <location filename="../threads/syncrunner.cpp" line="267"/> <source>Download </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <source>% complete for notebooks, tags, & searches.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="247"/> <source>Download complete for notebooks, tags, & searches. Downloading notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="267"/> <source>% complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="280"/> <source>Download complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>Downloading </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <source>% complete for tags in shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="721"/> <source>Downloading notes for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="743"/> <source>% complete for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1149"/> <source>Error uploading note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1151"/> <source>Error uploading note with a missing title!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="721"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TableDialog</name> <message> <location filename="../dialog/tabledialog.cpp" line="30"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="34"/> <source>Percent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="35"/> <source>Pixels</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="51"/> <source>Rows</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="53"/> <source>Columns</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="55"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="57"/> <source>Unit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="64"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="67"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TablePropertiesDialog</name> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="72"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="105"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="86"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="87"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="106"/> <source>Cell Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="214"/> <source>Row 1 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="216"/> <source>Row 1 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="218"/> <source>Row 1 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="220"/> <source>Row 2 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="222"/> <source>Row 2 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="224"/> <source>Row 2 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="226"/> <source>Row 3 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="228"/> <source>Row 3 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="230"/> <source>Row 3 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="456"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="464"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="480"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="494"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="511"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="526"/> <source>Percent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="465"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="479"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="493"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="510"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="525"/> <source>Pixels</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="476"/> <source>Top Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="490"/> <source>Bottom Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="507"/> <source>Left Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="522"/> <source>Right Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="560"/> <source>Border Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="561"/> <source>Font Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="562"/> <source>Background Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="576"/> <source>Border Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="587"/> <source>Padding</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="597"/> <source>Top Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="606"/> <source>Bottom Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="615"/> <source>Left Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="624"/> <source>Right Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="636"/> <source>Horizontal Alignment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="641"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="642"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="643"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="644"/> <source>Center</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="676"/> <source>Solid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="677"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="678"/> <source>Dotted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="679"/> <source>Dashed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="680"/> <source>Double</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="681"/> <source>Ridge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="682"/> <source>Inset</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="683"/> <source>Outset</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagEditorNewTag</name> <message> <location filename="../gui/browserWidgets/tageditornewtag.cpp" line="55"/> <source>Click to add tag...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagProperties</name> <message> <location filename="../dialog/tagproperties.cpp" line="36"/> <source>Tag</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="48"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="50"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="102"/> <source>Add Tag</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ThumbnailPreferences</name> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="14"/> <source>Disable thumbnail generation</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="15"/> <source>Images to generate per interval</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="16"/> <source>Minimum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="17"/> <source>Maximum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>UrlEditor</name> <message> <location filename="../gui/browserWidgets/urleditor.cpp" line="45"/> <source>Click to set source URL...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>WatchFolderAdd</name> <message> <location filename="../dialog/watchfolderadd.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="51"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="55"/> <source>Directory</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="63"/> <source>Keep</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="64"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="90"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="92"/> <source>After import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="94"/> <source>Include subdirectories</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="101"/> <source>Add Import Folder</source> <translation type="unfinished"></translation> </message> </context> <context> <name>WatchFolderDialog</name> <message> <location filename="../dialog/watchfolderdialog.cpp" line="38"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="42"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="50"/> <source>Auto Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="62"/> <source>Add</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="66"/> <source>Edit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="71"/> <location filename="../dialog/watchfolderdialog.cpp" line="162"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="112"/> <source>Directory</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="113"/> <source>Target Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="114"/> <location filename="../dialog/watchfolderdialog.cpp" line="159"/> <source>Keep</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="115"/> <source>Include Subdirectories</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="169"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="172"/> <source>No</source> <translation type="unfinished"></translation> </message> </context> </TS> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/translations/nixnote2_pt.ts����������������������������������������������������������0000664�0000000�0000000�00000615170�13156041044�0020633�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="pt_PT"> <context> <name>AboutDialog</name> <message> <location filename="../dialog/aboutdialog.cpp" line="36"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/aboutdialog.cpp" line="53"/> <source>Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountDialog</name> <message> <location filename="../dialog/accountdialog.cpp" line="37"/> <source>Account Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="40"/> <source>Normal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="46"/> <source>Premium</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="48"/> <source>VIP</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="50"/> <source>Manager</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="52"/> <source>Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="54"/> <source>Admin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="75"/> <source> Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="79"/> <source> KB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="83"/> <source> MB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="90"/> <source>Account:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="93"/> <source>User Name:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="95"/> <source>Account Type:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="97"/> <source>Limit:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="99"/> <source>Uploaded In This Period:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="103"/> <source>Less than 1MB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="104"/> <source>Current Cycle Ends:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="112"/> <source>OK</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountMaintenanceDialog</name> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="34"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="35"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="36"/> <source>Add</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="37"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="38"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="64"/> <source>User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="104"/> <source>Are you sure you want to delete this account?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="105"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="117"/> <source>You cannot delete the active account.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="170"/> <location filename="../dialog/accountmaintenancedialog.cpp" line="194"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> </context> <context> <name>AddNote</name> <message> <location filename="../cmdtools/addnote.cpp" line="33"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AddUserAccountDialog</name> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="38"/> <source>Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="39"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="41"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="46"/> <source>Account Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="69"/> <source>Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="70"/> <source>Yinxiang Biji</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="71"/> <source>Evernote Sandbox</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AppearancePreferences</name> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="39"/> <source>Show tray icon</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="40"/> <source>Display PDFs inline**</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="41"/> <source>Show splash screen on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="42"/> <source>Start automatically at login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="43"/> <source>Confirm Deletes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="44"/> <source>Show missed reminders on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="45"/> <source>Always Start minimized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="46"/> <source>Show notebook and tag totals</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="47"/> <source>Auto-Hide editor toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="49"/> <source>Disable note editing on statup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="50"/> <source>Focus on Note Title on New Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="51"/> <source>Limit Editor to Web Fonts*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="53"/> <source>Show note list grid*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="54"/> <source>Alternate note list colors*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="55"/> <source>Set author on new notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="57"/> <source>Preview fonts in editor dialag*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="61"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="68"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="75"/> <source>Do Nothing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="62"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="69"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="76"/> <source>Show/Hide NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="63"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="70"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="77"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="64"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="71"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="78"/> <source>New Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="65"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="72"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="79"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="82"/> <source>Open New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="83"/> <source>Open New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="98"/> <source>Qt Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="99"/> <source>notify-send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="106"/> <source>Startup Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="108"/> <source>Restore Selection Criteria</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="109"/> <source>Select Default Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="110"/> <source>View All Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="120"/> <source>Minimize to tray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="121"/> <source>Close to tray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="143"/> <source>Notification Service</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="146"/> <source>Middle Click Open Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="149"/> <source>Tray Icon Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="152"/> <source>Tray Icon Middle Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="155"/> <source>Tray Icon Double Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="158"/> <source>Default GUI Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="161"/> <source>Default GUI Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="164"/> <source>Default Editor Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="167"/> <source>Default Editor Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="171"/> <source>* May require restart on some systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="172"/> <source>** Can crash on Gnome systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="102"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="405"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="423"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="442"/> <source>System Default</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AttachmentIconBuilder</name> <message> <location filename="../html/attachmenticonbuilder.cpp" line="74"/> <source>Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/attachmenticonbuilder.cpp" line="78"/> <source>KB</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AuthorEditor</name> <message> <location filename="../gui/browserWidgets/authoreditor.cpp" line="37"/> <source>Click to set author</source> <translation type="unfinished"></translation> </message> </context> <context> <name>BatchImport</name> <message> <location filename="../xml/batchimport.cpp" line="112"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CloseNotebookDialog</name> <message> <location filename="../dialog/closenotebookdialog.cpp" line="37"/> <source>Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="42"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="43"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="56"/> <source>Open Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="57"/> <source>Closed Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="59"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="60"/> <source>Close</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CmdLineQuery</name> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="67"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="69"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="72"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="75"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="78"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="81"/> <source>Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="84"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="87"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="90"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="93"/> <source>Todo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="96"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="99"/> <source>Reminder Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="181"/> <location filename="../cmdtools/cmdlinequery.cpp" line="190"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="183"/> <location filename="../cmdtools/cmdlinequery.cpp" line="188"/> <source>Yes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CmdLineTool</name> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="56"/> <source>Unable to attach to shared memory segment. Is the other NixNote running? </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="315"/> <location filename="../cmdtools/cmdlinetool.cpp" line="452"/> <source> has been created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="318"/> <source>No response from NixNote. Please verify that the note was created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="332"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="535"/> <source> was not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="538"/> <location filename="../cmdtools/cmdlinetool.cpp" line="609"/> <source> has been appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="541"/> <source>No response from NixNote. Please verify that the note was appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="552"/> <source> was not found. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="221"/> <location filename="../cmdtools/cmdlinetool.cpp" line="654"/> <source>No response received from NixNote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="156"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="663"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="674"/> <location filename="../cmdtools/cmdlinetool.cpp" line="690"/> <location filename="../cmdtools/cmdlinetool.cpp" line="722"/> <location filename="../cmdtools/cmdlinetool.cpp" line="742"/> <source>This cannot be done with NixNote running.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="732"/> <location filename="../cmdtools/cmdlinetool.cpp" line="752"/> <source>Notebook not found: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="765"/> <source>OAuth token not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="783"/> <source>Error synchronizing with Evernote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="786"/> <source>Sync completed.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ColorSettings</name> <message> <location filename="../settings/colorsettings.cpp" line="37"/> <source>White</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="38"/> <source>Red</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="39"/> <source>Blue</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="40"/> <source>Green</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="41"/> <source>Yellow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="42"/> <source>Black</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="43"/> <source>Purple</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="44"/> <source>Brown</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="45"/> <source>Orange</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="46"/> <source>Grey</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="47"/> <source>Powder Blue</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CommunicationManager</name> <message> <location filename="../communication/communicationmanager.cpp" line="675"/> <source>Linked notebook notestore URL missing.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source>API rate limit exceeded. Please try again in </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <source> minutes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source> minute.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1206"/> <source>EDAMSystemException </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1208"/> <source>EDAMSystemException: Unknown error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1232"/> <source>EDAMNotFoundException: Note not found</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DatabaseStatus</name> <message> <location filename="../dialog/databasestatus.cpp" line="35"/> <source>Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="47"/> <source>Total Notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="49"/> <source>Total Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="51"/> <source>Unindexed Notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="53"/> <source>Unindexed Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="55"/> <source>Thumbnails Needed:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="60"/> <source>OK</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DateDelegate</name> <message> <location filename="../gui/datedelegate.cpp" line="42"/> <source>Today</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DateEditor</name> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="38"/> <source>Created:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="42"/> <source>Updated:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="46"/> <source>Subject:</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DebugPreferences</name> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="38"/> <source>Disable image search highlighting.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="35"/> <source>Strict note checking.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="37"/> <source>Disable uploads to server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="39"/> <source>Show LID column (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="40"/> <source>Disable Tag Sorting (useful for non-ASCII sort bug).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="41"/> <source>Force UTF8 Encoding.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="59"/> <source>Intercept Unix SIGHUP (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="64"/> <source>Use multipe theads to save note contents (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="68"/> <source>Use libtidy directly (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="72"/> <source>Auto-Save Interval (in seconds).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="79"/> <source>Message Level</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="82"/> <source>Trace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="83"/> <source>Debug</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="84"/> <source>Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="85"/> <source>Warnings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="86"/> <source>Errors</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="87"/> <source>Fatal</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EditorButtonBar</name> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="37"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="133"/> <source>Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="38"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="137"/> <source>Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="39"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="142"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="40"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="41"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="150"/> <source>Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="42"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="153"/> <source>Remove Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="43"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="159"/> <source>Bold</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="44"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="166"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="167"/> <source>Italics</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="45"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="184"/> <source>Superscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="46"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="188"/> <source>Subscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="47"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="174"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="175"/> <source>Underline</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="48"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="180"/> <source>Strikethrough</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="49"/> <source>Align Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="50"/> <source>Align Center</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="51"/> <source>Align Full</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="52"/> <source>Align Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="53"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="208"/> <source>Horizontal Line</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="54"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="55"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="220"/> <source>Shift Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="56"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="224"/> <source>Shift Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="57"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="228"/> <source>Bullet List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="58"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="232"/> <source>Number List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="59"/> <source>Font</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="60"/> <source>Font Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="61"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="248"/> <source>Font Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="62"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="257"/> <source>Highlight</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="63"/> <source>To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="192"/> <source>Center Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="196"/> <source>Fully Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="214"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="215"/> <source>Insert Date & Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="262"/> <source>Todo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="64"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="266"/> <source>Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="65"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="270"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="66"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="204"/> <source>Left Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="200"/> <source>Right Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="274"/> <source>Insert HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="661"/> <source>Times</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailDialog</name> <message> <location filename="../dialog/emaildialog.cpp" line="36"/> <source>Send Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="38"/> <source>Send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="39"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="51"/> <source>To:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="53"/> <source>BCC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="55"/> <source>CC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="57"/> <source>Subject:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="59"/> <source>Note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="77"/> <source>CC me on this email</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailNote</name> <message> <location filename="../cmdtools/emailnote.cpp" line="261"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="327"/> <source>Connection Error: Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="333"/> <source>Login Error : Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="338"/> <source>Send Error : Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="344"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailPreferences</name> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="17"/> <source>SMTP Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="18"/> <source>Server Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="19"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="20"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="21"/> <source>Sender Display Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="22"/> <source>Sender Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="23"/> <source>Connection Type</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="31"/> <source>Plain Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="32"/> <source>SSL Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="33"/> <source>TLS Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="35"/> <source>Send Test Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="108"/> <location filename="../dialog/preferences/emailpreferences.cpp" line="113"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="109"/> <source>You must specify a SMTP server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="114"/> <source>You must specify a sender email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="146"/> <source>Test Email From NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="152"/> <source><h1>This is a test email from NixNote.</h1> </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="153"/> <source>If you are reading it then your email preferences are are setup properly.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message sent.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnCryptDialog</name> <message> <location filename="../dialog/encryptdialog.cpp" line="31"/> <source>Encrypt Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="47"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="49"/> <source>Verify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="51"/> <source>Hint</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="53"/> <source>Remember Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="61"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="65"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="113"/> <source>Password must be at least 4 characters</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="117"/> <source>Passwords do not match</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="121"/> <source>Hint must be entered</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnDecryptDialog</name> <message> <location filename="../dialog/endecryptdialog.cpp" line="35"/> <source>Decrypt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="51"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="52"/> <source>Hint</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="59"/> <source>Permanently Decrypt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="61"/> <source>Remember Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="66"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="70"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExportData</name> <message> <location filename="../xml/exportdata.cpp" line="54"/> <source>Cannot open file.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="62"/> <source>Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="81"/> <source>Backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="114"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="151"/> <source>Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="360"/> <source>Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="405"/> <source>Linked Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="448"/> <source>Shared Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="508"/> <source>Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="725"/> <source>Backup Canceled</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExternalBrowse</name> <message> <location filename="../gui/externalbrowse.cpp" line="32"/> <source>NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/externalbrowse.cpp" line="124"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExtractNotes</name> <message> <location filename="../cmdtools/extractnotes.cpp" line="41"/> <location filename="../cmdtools/extractnotes.cpp" line="82"/> <source>Output file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="64"/> <source>Deleting notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="65"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FavoritesView</name> <message> <location filename="../gui/favoritesview.cpp" line="68"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="90"/> <source>Remove from shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="565"/> <source>Are you sure you want to remove this shortcut?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="566"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>FileWatcher</name> <message> <location filename="../watcher/filewatcher.cpp" line="72"/> <source>Error removing file: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FindReplace</name> <message> <location filename="../gui/findreplace.cpp" line="46"/> <source>Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="47"/> <source>Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="48"/> <source>Match case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="57"/> <source>Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="58"/> <source>Replace all</source> <translation type="unfinished"></translation> </message> </context> <context> <name>HtmlEntitiesDialog</name> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="34"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="35"/> <source>Edit entries list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="36"/> <source>Save entities list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="71"/> <source>HTML Entities Selection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="206"/> <source>Comma separated list of HTML entities. See http://www.w3schools.com/charsets/ for list.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportData</name> <message> <location filename="../xml/importdata.cpp" line="59"/> <source>Imported Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="106"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="107"/> <location filename="../xml/importdata.cpp" line="119"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="130"/> <source>Importing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="131"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="133"/> <source>Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="134"/> <source>Restoring Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportEnex</name> <message> <location filename="../xml/importenex.cpp" line="40"/> <source>Imported Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="83"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="84"/> <location filename="../xml/importenex.cpp" line="94"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="101"/> <location filename="../xml/importenex.cpp" line="102"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportNotes</name> <message> <location filename="../cmdtools/importnotes.cpp" line="19"/> <source>Input file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/importnotes.cpp" line="24"/> <source>Input file not found.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLatexDialog</name> <message> <location filename="../dialog/insertlatexdialog.cpp" line="32"/> <source>Insert LaTeX Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="42"/> <source>Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="52"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLinkDialog</name> <message> <location filename="../dialog/insertlinkdialog.cpp" line="34"/> <source>Insert Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="45"/> <source>URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="54"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LineEdit</name> <message> <location filename="../gui/lineedit.cpp" line="39"/> <source>Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocalePreferences</name> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="37"/> <source>Date Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="40"/> <source>MM/dd/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="41"/> <source>MM/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="42"/> <source>M/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="43"/> <source>M/d/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="44"/> <source>dd/MM/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="45"/> <source>d/M/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="46"/> <source>dd/MM/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="47"/> <source>d/M/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="48"/> <source>yyyy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="49"/> <source>yy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="52"/> <source>Time Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="55"/> <source>HH:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="56"/> <source>HH:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="57"/> <source>HH:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="58"/> <source>HH:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="59"/> <source>hh:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="60"/> <source>hh:mm:ss a- </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="61"/> <source>h:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="62"/> <source>hh:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="63"/> <source>hh:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="64"/> <source>h:mm a - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationDialog</name> <message> <location filename="../dialog/locationdialog.cpp" line="33"/> <source>Location</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="40"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="42"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="44"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="49"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="52"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationEditor</name> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="42"/> <source>Click to set location...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="45"/> <source>Edit...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="46"/> <source>Clear</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="47"/> <source>View on map</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LogViewer</name> <message> <location filename="../dialog/logviewer.cpp" line="41"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="43"/> <source>Refresh</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="45"/> <source>Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="54"/> <source>Save Logs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>Save Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>NixNote Log (*.log);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LoginDialog</name> <message> <location filename="../dialog/logindialog.cpp" line="34"/> <source>NixNote Login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="43"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="44"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="52"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="56"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NAttributeTree</name> <message> <location filename="../gui/nattributetree.cpp" line="48"/> <source>Attributes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="129"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="132"/> <location filename="../gui/nattributetree.cpp" line="213"/> <source>Since</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="136"/> <location filename="../gui/nattributetree.cpp" line="173"/> <location filename="../gui/nattributetree.cpp" line="217"/> <location filename="../gui/nattributetree.cpp" line="254"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="140"/> <location filename="../gui/nattributetree.cpp" line="177"/> <location filename="../gui/nattributetree.cpp" line="221"/> <location filename="../gui/nattributetree.cpp" line="258"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="144"/> <location filename="../gui/nattributetree.cpp" line="181"/> <location filename="../gui/nattributetree.cpp" line="225"/> <location filename="../gui/nattributetree.cpp" line="262"/> <source>This week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="148"/> <location filename="../gui/nattributetree.cpp" line="185"/> <location filename="../gui/nattributetree.cpp" line="229"/> <location filename="../gui/nattributetree.cpp" line="266"/> <source>Last week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="152"/> <location filename="../gui/nattributetree.cpp" line="189"/> <location filename="../gui/nattributetree.cpp" line="233"/> <location filename="../gui/nattributetree.cpp" line="270"/> <source>This Month</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="156"/> <location filename="../gui/nattributetree.cpp" line="193"/> <location filename="../gui/nattributetree.cpp" line="237"/> <location filename="../gui/nattributetree.cpp" line="274"/> <source>Last Month</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="160"/> <location filename="../gui/nattributetree.cpp" line="197"/> <location filename="../gui/nattributetree.cpp" line="241"/> <location filename="../gui/nattributetree.cpp" line="278"/> <source>This Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="164"/> <location filename="../gui/nattributetree.cpp" line="201"/> <location filename="../gui/nattributetree.cpp" line="245"/> <location filename="../gui/nattributetree.cpp" line="282"/> <source>Last Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="169"/> <location filename="../gui/nattributetree.cpp" line="250"/> <source>Before</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="210"/> <source>Last Modified</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="289"/> <source>Contains</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="292"/> <source>Images</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="296"/> <source>Audio</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="300"/> <source>Ink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="304"/> <source>Encrypted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="308"/> <source>To-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="312"/> <source>Unfinished to-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="316"/> <source>Finished to-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="320"/> <source>PDF document</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="324"/> <source>Attachment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="328"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="332"/> <source>Uncompleted Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="336"/> <source>Future Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="341"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="344"/> <source>Emailed to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="348"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="352"/> <source>Web page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="356"/> <source>Mobile</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="360"/> <source>Another application</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NBrowserWindow</name> <message> <location filename="../gui/nbrowserwindow.cpp" line="521"/> <location filename="../gui/nbrowserwindow.cpp" line="3112"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="523"/> <location filename="../gui/nbrowserwindow.cpp" line="3114"/> <source>Tomorrow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="525"/> <location filename="../gui/nbrowserwindow.cpp" line="3116"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to save this note. Either tidy isn't installed or the note is too complex to save.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="1808"/> <source>Insert Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>Unable Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>This is an ink note. Ink notes are not supported since Evernote has not published any specifications on them and I'm too lazy to figure them out by myself.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2240"/> <source>Edit Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2304"/> <source>Unable to create LaTeX image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2305"/> <source>Unable to create LaTeX image. Are you sure mimetex is installed?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2635"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2636"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2645"/> <source>Sending Email. Please be patient.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3159"/> <source>Decryption Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3160"/> <source>Unknown encryption method. Unable to decrypt.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3263"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3264"/> <source>Error Encrypting String. Please verify you have Java installed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Hunspell plugin not found or could not be loaded.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NMainMenuBar</name> <message> <location filename="../gui/nmainmenubar.cpp" line="60"/> <source>&File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="79"/> <source>Print this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="87"/> <source>Backup database to a file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="93"/> <source>Restore from a backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="113"/> <source>Import notes from an export file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="133"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="151"/> <source>Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="159"/> <source>Close the program</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="175"/> <source>&Edit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="78"/> <source>&Print Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="64"/> <source>Email Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="65"/> <source>Email a copy of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="71"/> <source>Print Preview Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="72"/> <source>Print preview of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="86"/> <source>&Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="92"/> <source>&Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="112"/> <source>&Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="140"/> <source>&Add Another User...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="144"/> <source>&User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="150"/> <source>&Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="158"/> <source>E&xit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="180"/> <source>&Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="184"/> <source>&Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="190"/> <source>&Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="194"/> <source>C&opy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="198"/> <source>&Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="202"/> <source>Pas&te as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="206"/> <source>Remo&ve Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="212"/> <source>Select &All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="218"/> <source>F&ind and Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="220"/> <source>&Search Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="225"/> <source>&Reset Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="232"/> <source>&Find in Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="238"/> <source>Find &Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="243"/> <source>Find &Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="250"/> <source>Replace &Within Note...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="260"/> <source>Preferences</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="268"/> <source>&View</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="273"/> <source>Wide Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="278"/> <source>Narrow Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="285"/> <source>&Show Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="289"/> <source>Note &History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="295"/> <source>&Presentation Mode</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="299"/> <source>Show &Left Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="306"/> <source>Show &Favorites</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="313"/> <source>Show &Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="320"/> <source>Show Ta&gs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="327"/> <source>Show Sa&ved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="341"/> <source>Show T&rash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="348"/> <source>Show N&ote List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="355"/> <source>Show Note &Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="364"/> <source>View Note &Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="368"/> <source>View &Toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="375"/> <source>View Status&bar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="391"/> <source>New &Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="396"/> <source>New &Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="401"/> <source>Dupl&icate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="406"/> <source>&Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="411"/> <source>Reindex Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="418"/> <source>&Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="427"/> <source>&Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="432"/> <source>&UnPin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="446"/> <source>&Synchronize</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="447"/> <source>Synchronize with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="452"/> <source>&Disconnect</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="460"/> <source>Pause &Indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="461"/> <source>Temporarily pause indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="468"/> <source>Disable &Editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="469"/> <source>Temporarily disable note editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="476"/> <source>A&ccount</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="490"/> <source>&Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="514"/> <source>&User's Guide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="537"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="538"/> <source>View currentt shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="547"/> <source>Github Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="548"/> <source>Goto the NixNote2 Github project page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="585"/> <source>About &Qt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="625"/> <source>Theme</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="386"/> <source>&Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="100"/> <source>&Export to NixNote Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="101"/> <source>Export selected notes to a NNEX file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="106"/> <source>&Export Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="107"/> <source>Export selected notes to a PDF file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="441"/> <source>&Tools</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="453"/> <source>Disconnect from Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="477"/> <source>Account information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="484"/> <source>&Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="485"/> <source>Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="491"/> <source>Reindex all notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="499"/> <source>&Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="500"/> <source>Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="509"/> <source>&Help</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="515"/> <source>Open the user manual.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="542"/> <source>Message &Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="554"/> <source>&Evernote Account Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="559"/> <source>Evernote &Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="568"/> <source>Evernote &Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="573"/> <source>Evernote User &Forum</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="580"/> <source>&About</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="634"/> <source>System Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="543"/> <source>View current program messages</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="334"/> <source>Show &Attribute Filter</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="520"/> <source>Theme &Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="521"/> <source>View information about the current theme.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="555"/> <source>Go to your Evernote account page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="560"/> <source>Go to Evernote's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="562"/> <source>Yinxiang Biji Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="563"/> <source>Go to Yinxiang Biji's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="569"/> <source>Go to Evernote Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="574"/> <source>Go to the Evernote user support forum.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="581"/> <location filename="../gui/nmainmenubar.cpp" line="586"/> <source>About</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NNotebookView</name> <message> <location filename="../gui/nnotebookview.cpp" line="69"/> <source>Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="86"/> <source>Create New Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="95"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="103"/> <source>Add to stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="116"/> <source>Create New stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="119"/> <source>Remove from stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="123"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="131"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="641"/> <source>Are you sure you want to delete this notebook?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="642"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>New Stack (</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NSearchView</name> <message> <location filename="../gui/nsearchview.cpp" line="65"/> <source>Saved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="74"/> <source>Create Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="83"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="90"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="94"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="404"/> <source>Are you sure you want to delete this saved search?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="405"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTabWidget</name> <message> <location filename="../gui/ntabwidget.cpp" line="254"/> <location filename="../gui/ntabwidget.cpp" line="262"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntabwidget.cpp" line="267"/> <location filename="../gui/ntabwidget.cpp" line="334"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableView</name> <message> <location filename="../gui/ntableview.cpp" line="203"/> <source>Open Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="209"/> <source>Open Note In New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="215"/> <source>Open Note In New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="222"/> <source>Add Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="227"/> <source>Delete Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="238"/> <source>Restore Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="244"/> <source>Copy Note Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="249"/> <source>Duplicate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="254"/> <source>Reminders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="258"/> <source>Remove</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="263"/> <source>Mark Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="269"/> <source>Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="274"/> <source>Unpin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="279"/> <source>Merge Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="285"/> <source>Create Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="291"/> <source>Title Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="296"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="301"/> <source>White</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="304"/> <source>Red</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="307"/> <source>Blue</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="310"/> <source>Green</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="313"/> <source>Yellow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="316"/> <source>Black</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="319"/> <source>Gray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="322"/> <source>Cyan</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="325"/> <source>Magenta</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="663"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="666"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="672"/> <source>selected note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="677"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="942"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="943"/> <source>This note has never been synchronized. Using this in a note link can cause problems unless you synchronize it first.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1319"/> <source>Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1370"/> <source>One or more notes are unsynchronized. This can cause issues if they are later synchronized. Do you wish to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1654"/> <source>Note LID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1657"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1660"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1663"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1666"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1668"/> <location filename="../gui/ntableview.cpp" line="1676"/> <location filename="../gui/ntableview.cpp" line="1682"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1670"/> <location filename="../gui/ntableview.cpp" line="1674"/> <location filename="../gui/ntableview.cpp" line="1680"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1672"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1678"/> <source>Has To-Do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1684"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1687"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1690"/> <source>Date Deleted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1698"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1706"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1710"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1719"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1728"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1737"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1740"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1743"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1746"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1754"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableViewHeader</name> <message> <location filename="../gui/ntableviewheader.cpp" line="42"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="47"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="52"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="57"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="62"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="67"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="72"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="77"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="82"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="87"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="92"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="97"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="102"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="107"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="112"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="117"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="122"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="128"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="133"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="138"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="143"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTagView</name> <message> <location filename="../gui/ntagview.cpp" line="67"/> <location filename="../gui/ntagview.cpp" line="156"/> <source>Tags from Personal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="91"/> <source>Create New Tag</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="100"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="107"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="110"/> <source>Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="113"/> <source>Hide Unassigned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="119"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="154"/> <source>Tags from </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="351"/> <source>-<Missing Tag>-</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="706"/> <source>Are you sure you want to merge these tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="707"/> <source>Verify Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="753"/> <source>Are you sure you want to delete this tag?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="755"/> <source>Are you sure you want to delete all selected tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="756"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTitleEditor</name> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="123"/> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="137"/> <source>Untitled note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="134"/> <source>untitled note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTrashTree</name> <message> <location filename="../gui/ntrashtree.cpp" line="53"/> <source>Trash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="65"/> <source>Restore Deleted Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="68"/> <source>Empty Trash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="238"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="239"/> <source>Are you sure you want to permanently delete these notes?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NWebView</name> <message> <location filename="../gui/nwebview.cpp" line="56"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="61"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="66"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="71"/> <source>Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="76"/> <source>Paste as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="81"/> <source>Remove Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="86"/> <source>Copy Note URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="93"/> <source>Background Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="113"/> <source>To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="120"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="127"/> <source>Encrypted Selected Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="132"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="137"/> <source>Insert Hyperlink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="142"/> <source>Quick Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="147"/> <source>Remove Hyperlink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="152"/> <source>Attach File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="158"/> <source>Insert LaTeX Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="164"/> <source>Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="167"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="173"/> <source>Insert Row</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="178"/> <source>Insert Column</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="185"/> <source>Delete Row</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="189"/> <source>Delete Column</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="196"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="203"/> <source>Image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="206"/> <source>Save Image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="214"/> <source>Rotate Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="218"/> <source>Rotate Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="224"/> <source>Save Attachment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="502"/> <location filename="../gui/nwebview.cpp" line="532"/> <source>Save File</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NixNote</name> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy Not Found</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy is not found on this system. Until tidy is installed you cannot save any notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="291"/> <source>ToolBar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="303"/> <source>Back</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="304"/> <source>Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="314"/> <source>All Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="316"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="319"/> <source>Print</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="329"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="332"/> <source>New Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="344"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="347"/> <source>Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="349"/> <source>Usage</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="531"/> <location filename="../nixnote.cpp" line="3183"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="547"/> <source>Show/Hide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="559"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1799"/> <source>Confirm Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1815"/> <source>Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1818"/> <source>Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1730"/> <location filename="../nixnote.cpp" line="1816"/> <source>NixNote Export (*.nnex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="320"/> <source>Print the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="322"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="323"/> <source>Email the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="528"/> <source>Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="538"/> <source>Shortcut Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="540"/> <source>Pinned Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="542"/> <source>Recently Updated Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1437"/> <location filename="../nixnote.cpp" line="2350"/> <source>Log in to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1439"/> <location filename="../nixnote.cpp" line="2352"/> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <location filename="../nixnote.cpp" line="1761"/> <location filename="../nixnote.cpp" line="1857"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <source>No notes selected.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1722"/> <source>Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1724"/> <source>Export Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1749"/> <source>Performing backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1751"/> <source>Performing export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1768"/> <source>Database backup complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1770"/> <source>Note extract complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1796"/> <source>This is used to restore a database from backups. It is HIGHLY recommended that this only be used to populate an empty database. Restoring into a database that already has data can cause problems. Are you sure you want to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1819"/> <source>NixNote Export (*.nnex);;Evernote Export (*.enex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1846"/> <source>Restoring database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1848"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1880"/> <source>Database has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1882"/> <source>Notes have been imported.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <location filename="../nixnote.cpp" line="1918"/> <source>Sync Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <source>Sync completed with errors.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1918"/> <source>Sync error. See message log for details</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync completed successfully.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2002"/> <source>Untitled note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>This note has never been synchronized with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3872"/> <source>Error loading Webcam plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3887"/> <source>Error loading Hunspell plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3913"/> <location filename="../nixnote.cpp" line="3965"/> <source>PDF Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>Export complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3937"/> <source>Exporting Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3938"/> <source>Exporting notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2391"/> <location filename="../nixnote.cpp" line="2398"/> <source>Error retrieving note.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2392"/> <location filename="../nixnote.cpp" line="2399"/> <source>Error retrieving note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <location filename="../nixnote.cpp" line="2431"/> <source>Note Restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <source>A new copy has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2431"/> <source>Note successfully restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2434"/> <source>Note restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2650"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3054"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex the entire database?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3247"/> <source>Notes will be reindexed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Webcam plugin not found or could not be loaded</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3281"/> <source>Unable to find webcam or capture image.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3282"/> <source>Webcam Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3432"/> <source>Note Reindexed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3444"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3447"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3451"/> <source>this note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3455"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3816"/> <source>Press ESC to exit.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteFormatter</name> <message> <location filename="../html/noteformatter.cpp" line="657"/> <source>File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/noteformatter.cpp" line="691"/> <source>Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/noteformatter.cpp" line="695"/> <source>KB</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteHistorySelect</name> <message> <location filename="../dialog/notehistoryselect.cpp" line="32"/> <source>Note History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="34"/> <source>Import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="39"/> <source>Replace current note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="80"/> <source>Current copy on Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="93"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="95"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteProperties</name> <message> <location filename="../dialog/noteproperties.cpp" line="37"/> <source>Note Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/noteproperties.cpp" line="38"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NotebookProperties</name> <message> <location filename="../dialog/notebookproperties.cpp" line="38"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="42"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="46"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="52"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="60"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="62"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="135"/> <source>Add Notebook</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OAuthWindow</name> <message> <location filename="../oauth/oauthwindow.cpp" line="70"/> <source>Please Grant NixNote Access</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="81"/> <source>SSL Support not found. Aborting connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="132"/> <source>Error receiving temporary credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="176"/> <source>Error receiving permanent credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="219"/> <source>Error receiving authorization</source> <translation type="unfinished"></translation> </message> </context> <context> <name>PopplerViewer</name> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source>Page </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source> of </source> <translation type="unfinished"></translation> </message> </context> <context> <name>PreferencesDialog</name> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="30"/> <source>User Settings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="49"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="92"/> <source>Appearance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="98"/> <source>Locale</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="104"/> <source>Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="110"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="116"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="121"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="127"/> <source>Advanced</source> <translation type="unfinished"></translation> </message> </context> <context> <name>QApplication</name> <message> <location filename="../dialog/screencapture.cpp" line="108"/> <source>Use your mouse to draw a rectangle to screenshot or exit pressing any key or using the right or middle mouse buttons.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/screencapture.cpp" line="145"/> <source>%1 x %2 pixels </source> <translation type="unfinished"></translation> </message> </context> <context> <name>QObject</name> <message> <location filename="../gui/ntableview.cpp" line="175"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="176"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="177"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="178"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="179"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="180"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="181"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="182"/> <source>Deletion Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="183"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="184"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="185"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="186"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="187"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="188"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="189"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="190"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="191"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="192"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="193"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="194"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="195"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="196"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="197"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderButton</name> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="35"/> <source>Mark as Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="36"/> <source>Change Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="37"/> <source>Clear Reminder</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderManager</name> <message> <location filename="../reminders/remindermanager.cpp" line="85"/> <source>Reminders Due</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderSetDialog</name> <message> <location filename="../dialog/remindersetdialog.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/remindersetdialog.cpp" line="48"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>RemoteQuery</name> <message> <location filename="../filters/remotequery.cpp" line="113"/> <location filename="../filters/remotequery.cpp" line="130"/> <source>Today</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SavedSearchProperties</name> <message> <location filename="../dialog/savedsearchproperties.cpp" line="35"/> <source>Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="43"/> <source>Query</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="51"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="53"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="106"/> <source>Add Saved Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SearchPreferences</name> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="36"/> <source>Index Attachments</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="44"/> <source>Clear Notebook Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="48"/> <source>Clear Tag Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="52"/> <source>Clear Search Text on Notebook Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="56"/> <source>Show Any Matching Tags When Selecting Multiple Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="60"/> <source>Index PDFs locally</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="64"/> <source>Background Indexing (requires restart & may cause issues on some systems)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="68"/> <source>Experimental: Force search to lower case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="73"/> <source>Minimum Image Recognition Weight</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ShortcutDialog</name> <message> <location filename="../dialog/shortcutdialog.cpp" line="41"/> <source>Defined Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/shortcutdialog.cpp" line="42"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SpellCheckDialog</name> <message> <location filename="../dialog/spellcheckdialog.cpp" line="35"/> <source>Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="50"/> <source>Suggestion</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="56"/> <source>Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="57"/> <source>Ignore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="58"/> <source>Ignore All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="59"/> <source>Add To Dictionary</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="66"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncPreferences</name> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="34"/> <source>Sync automatically</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="38"/> <source>Every 15 minutes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="39"/> <source>Every 30 minutes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="40"/> <source>Every hour</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="41"/> <source>Every day</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="43"/> <source>Sync on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="45"/> <source>Sync on shutdown</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="47"/> <source>Enable sync notifications</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="48"/> <source>Show successful syncs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="49"/> <source>Restart sync on API limit (experimental)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="51"/> <source>Enable Proxy*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="52"/> <source>Enable Socks5</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="53"/> <source>Proxy Hostname</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="54"/> <source>Proxy Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="55"/> <source>Proxy Username</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="56"/> <source>Proxy Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="57"/> <source>*Note: Restart required</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="73"/> <source>Popup message on sync errors.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncRunner</name> <message> <location filename="../threads/syncrunner.cpp" line="134"/> <source>Beginning Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="142"/> <source>Downloading changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="192"/> <source>Sync Complete Successfully</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <location filename="../threads/syncrunner.cpp" line="267"/> <source>Download </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <source>% complete for notebooks, tags, & searches.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="247"/> <source>Download complete for notebooks, tags, & searches. Downloading notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="267"/> <source>% complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="280"/> <source>Download complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>Downloading </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <source>% complete for tags in shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="721"/> <source>Downloading notes for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="743"/> <source>% complete for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1149"/> <source>Error uploading note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1151"/> <source>Error uploading note with a missing title!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="721"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TableDialog</name> <message> <location filename="../dialog/tabledialog.cpp" line="30"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="34"/> <source>Percent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="35"/> <source>Pixels</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="51"/> <source>Rows</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="53"/> <source>Columns</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="55"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="57"/> <source>Unit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="64"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="67"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TablePropertiesDialog</name> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="72"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="105"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="86"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="87"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="106"/> <source>Cell Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="214"/> <source>Row 1 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="216"/> <source>Row 1 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="218"/> <source>Row 1 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="220"/> <source>Row 2 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="222"/> <source>Row 2 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="224"/> <source>Row 2 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="226"/> <source>Row 3 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="228"/> <source>Row 3 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="230"/> <source>Row 3 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="456"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="464"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="480"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="494"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="511"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="526"/> <source>Percent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="465"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="479"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="493"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="510"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="525"/> <source>Pixels</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="476"/> <source>Top Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="490"/> <source>Bottom Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="507"/> <source>Left Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="522"/> <source>Right Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="560"/> <source>Border Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="561"/> <source>Font Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="562"/> <source>Background Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="576"/> <source>Border Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="587"/> <source>Padding</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="597"/> <source>Top Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="606"/> <source>Bottom Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="615"/> <source>Left Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="624"/> <source>Right Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="636"/> <source>Horizontal Alignment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="641"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="642"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="643"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="644"/> <source>Center</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="676"/> <source>Solid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="677"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="678"/> <source>Dotted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="679"/> <source>Dashed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="680"/> <source>Double</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="681"/> <source>Ridge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="682"/> <source>Inset</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="683"/> <source>Outset</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagEditorNewTag</name> <message> <location filename="../gui/browserWidgets/tageditornewtag.cpp" line="55"/> <source>Click to add tag...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagProperties</name> <message> <location filename="../dialog/tagproperties.cpp" line="36"/> <source>Tag</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="48"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="50"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="102"/> <source>Add Tag</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ThumbnailPreferences</name> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="14"/> <source>Disable thumbnail generation</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="15"/> <source>Images to generate per interval</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="16"/> <source>Minimum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="17"/> <source>Maximum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>UrlEditor</name> <message> <location filename="../gui/browserWidgets/urleditor.cpp" line="45"/> <source>Click to set source URL...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>WatchFolderAdd</name> <message> <location filename="../dialog/watchfolderadd.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="51"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="55"/> <source>Directory</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="63"/> <source>Keep</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="64"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="90"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="92"/> <source>After import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="94"/> <source>Include subdirectories</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="101"/> <source>Add Import Folder</source> <translation type="unfinished"></translation> </message> </context> <context> <name>WatchFolderDialog</name> <message> <location filename="../dialog/watchfolderdialog.cpp" line="38"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="42"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="50"/> <source>Auto Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="62"/> <source>Add</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="66"/> <source>Edit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="71"/> <location filename="../dialog/watchfolderdialog.cpp" line="162"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="112"/> <source>Directory</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="113"/> <source>Target Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="114"/> <location filename="../dialog/watchfolderdialog.cpp" line="159"/> <source>Keep</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="115"/> <source>Include Subdirectories</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="169"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="172"/> <source>No</source> <translation type="unfinished"></translation> </message> </context> </TS> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/translations/nixnote2_ru.ts����������������������������������������������������������0000664�0000000�0000000�00000630204�13156041044�0020631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="ru_RU"> <context> <name>AboutDialog</name> <message> <location filename="../dialog/aboutdialog.cpp" line="36"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/aboutdialog.cpp" line="53"/> <source>Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountDialog</name> <message> <location filename="../dialog/accountdialog.cpp" line="37"/> <source>Account Information</source> <translation type="unfinished">Об аккаунте</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="40"/> <source>Normal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="46"/> <source>Premium</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="48"/> <source>VIP</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="50"/> <source>Manager</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="52"/> <source>Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="54"/> <source>Admin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="75"/> <source> Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="79"/> <source> KB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="83"/> <source> MB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="90"/> <source>Account:</source> <translation type="unfinished">Об аккаунте:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="93"/> <source>User Name:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="95"/> <source>Account Type:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="97"/> <source>Limit:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="99"/> <source>Uploaded In This Period:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="103"/> <source>Less than 1MB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="104"/> <source>Current Cycle Ends:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="112"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> </context> <context> <name>AccountMaintenanceDialog</name> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="34"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="35"/> <source>Close</source> <translation type="unfinished">Закрыть</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="36"/> <source>Add</source> <translation type="unfinished">Добавить</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="37"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="38"/> <source>Delete</source> <translation type="unfinished">Удалить</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="64"/> <source>User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="104"/> <source>Are you sure you want to delete this account?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="105"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="117"/> <source>You cannot delete the active account.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="170"/> <location filename="../dialog/accountmaintenancedialog.cpp" line="194"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> </context> <context> <name>AddNote</name> <message> <location filename="../cmdtools/addnote.cpp" line="33"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AddUserAccountDialog</name> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="38"/> <source>Server</source> <translation type="unfinished">Сервер</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="39"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="41"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="46"/> <source>Account Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="69"/> <source>Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="70"/> <source>Yinxiang Biji</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="71"/> <source>Evernote Sandbox</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AppearancePreferences</name> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="39"/> <source>Show tray icon</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="40"/> <source>Display PDFs inline**</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="41"/> <source>Show splash screen on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="42"/> <source>Start automatically at login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="43"/> <source>Confirm Deletes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="44"/> <source>Show missed reminders on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="45"/> <source>Always Start minimized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="46"/> <source>Show notebook and tag totals</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="47"/> <source>Auto-Hide editor toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="49"/> <source>Disable note editing on statup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="50"/> <source>Focus on Note Title on New Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="51"/> <source>Limit Editor to Web Fonts*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="53"/> <source>Show note list grid*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="54"/> <source>Alternate note list colors*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="55"/> <source>Set author on new notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="57"/> <source>Preview fonts in editor dialag*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="61"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="68"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="75"/> <source>Do Nothing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="62"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="69"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="76"/> <source>Show/Hide NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="63"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="70"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="77"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="64"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="71"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="78"/> <source>New Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="65"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="72"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="79"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="82"/> <source>Open New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="83"/> <source>Open New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="98"/> <source>Qt Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="99"/> <source>notify-send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="106"/> <source>Startup Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="108"/> <source>Restore Selection Criteria</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="109"/> <source>Select Default Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="110"/> <source>View All Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="120"/> <source>Minimize to tray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="121"/> <source>Close to tray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="143"/> <source>Notification Service</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="146"/> <source>Middle Click Open Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="149"/> <source>Tray Icon Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="152"/> <source>Tray Icon Middle Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="155"/> <source>Tray Icon Double Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="158"/> <source>Default GUI Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="161"/> <source>Default GUI Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="164"/> <source>Default Editor Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="167"/> <source>Default Editor Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="171"/> <source>* May require restart on some systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="172"/> <source>** Can crash on Gnome systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="102"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="405"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="423"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="442"/> <source>System Default</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AttachmentIconBuilder</name> <message> <location filename="../html/attachmenticonbuilder.cpp" line="74"/> <source>Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/attachmenticonbuilder.cpp" line="78"/> <source>KB</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AuthorEditor</name> <message> <location filename="../gui/browserWidgets/authoreditor.cpp" line="37"/> <source>Click to set author</source> <translation type="unfinished"></translation> </message> </context> <context> <name>BatchImport</name> <message> <location filename="../xml/batchimport.cpp" line="112"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CloseNotebookDialog</name> <message> <location filename="../dialog/closenotebookdialog.cpp" line="37"/> <source>Open/Close Notebooks</source> <translation type="unfinished">Открыть/закрыть блокноты</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="42"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="43"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="56"/> <source>Open Notebooks</source> <translation type="unfinished">Открытые блокноты</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="57"/> <source>Closed Notebooks</source> <translation type="unfinished">Закрытые блокноты</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="59"/> <source>Open</source> <translation type="unfinished">Открыть</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="60"/> <source>Close</source> <translation type="unfinished">Закрыть</translation> </message> </context> <context> <name>CmdLineQuery</name> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="67"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="69"/> <source>Title</source> <translation type="unfinished">Заголовок</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="72"/> <source>Notebook</source> <translation type="unfinished">Блокнот</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="75"/> <source>Tags</source> <translation type="unfinished">Метки</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="78"/> <source>Created</source> <translation type="unfinished">Создана</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="81"/> <source>Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="84"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="87"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="90"/> <source>Author</source> <translation type="unfinished">Ðвтор</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="93"/> <source>Todo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="96"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="99"/> <source>Reminder Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="181"/> <location filename="../cmdtools/cmdlinequery.cpp" line="190"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="183"/> <location filename="../cmdtools/cmdlinequery.cpp" line="188"/> <source>Yes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CmdLineTool</name> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="56"/> <source>Unable to attach to shared memory segment. Is the other NixNote running? </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="315"/> <location filename="../cmdtools/cmdlinetool.cpp" line="452"/> <source> has been created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="318"/> <source>No response from NixNote. Please verify that the note was created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="332"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="535"/> <source> was not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="538"/> <location filename="../cmdtools/cmdlinetool.cpp" line="609"/> <source> has been appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="541"/> <source>No response from NixNote. Please verify that the note was appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="552"/> <source> was not found. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="221"/> <location filename="../cmdtools/cmdlinetool.cpp" line="654"/> <source>No response received from NixNote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="156"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="663"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="674"/> <location filename="../cmdtools/cmdlinetool.cpp" line="690"/> <location filename="../cmdtools/cmdlinetool.cpp" line="722"/> <location filename="../cmdtools/cmdlinetool.cpp" line="742"/> <source>This cannot be done with NixNote running.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="732"/> <location filename="../cmdtools/cmdlinetool.cpp" line="752"/> <source>Notebook not found: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="765"/> <source>OAuth token not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="783"/> <source>Error synchronizing with Evernote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="786"/> <source>Sync completed.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ColorSettings</name> <message> <location filename="../settings/colorsettings.cpp" line="37"/> <source>White</source> <translation type="unfinished">Белый</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="38"/> <source>Red</source> <translation type="unfinished">КраÑный</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="39"/> <source>Blue</source> <translation type="unfinished">Голубой</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="40"/> <source>Green</source> <translation type="unfinished">Зелёный</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="41"/> <source>Yellow</source> <translation type="unfinished">Жёлтый</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="42"/> <source>Black</source> <translation type="unfinished">Чёрный</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="43"/> <source>Purple</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="44"/> <source>Brown</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="45"/> <source>Orange</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="46"/> <source>Grey</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="47"/> <source>Powder Blue</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CommunicationManager</name> <message> <location filename="../communication/communicationmanager.cpp" line="675"/> <source>Linked notebook notestore URL missing.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source>API rate limit exceeded. Please try again in </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <source> minutes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source> minute.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1206"/> <source>EDAMSystemException </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1208"/> <source>EDAMSystemException: Unknown error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1232"/> <source>EDAMNotFoundException: Note not found</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DatabaseStatus</name> <message> <location filename="../dialog/databasestatus.cpp" line="35"/> <source>Database Status</source> <translation type="unfinished">СоÑтоÑние базы данных</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="47"/> <source>Total Notes:</source> <translation type="unfinished">Заметок:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="49"/> <source>Total Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="51"/> <source>Unindexed Notes:</source> <translation type="unfinished">ÐепроиндекÑированных заметок:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="53"/> <source>Unindexed Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="55"/> <source>Thumbnails Needed:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="60"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> </context> <context> <name>DateDelegate</name> <message> <location filename="../gui/datedelegate.cpp" line="42"/> <source>Today</source> <translation type="unfinished">СегоднÑ</translation> </message> </context> <context> <name>DateEditor</name> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="38"/> <source>Created:</source> <translation type="unfinished">Создана:</translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="42"/> <source>Updated:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="46"/> <source>Subject:</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DebugPreferences</name> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="38"/> <source>Disable image search highlighting.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="35"/> <source>Strict note checking.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="37"/> <source>Disable uploads to server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="39"/> <source>Show LID column (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="40"/> <source>Disable Tag Sorting (useful for non-ASCII sort bug).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="41"/> <source>Force UTF8 Encoding.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="59"/> <source>Intercept Unix SIGHUP (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="64"/> <source>Use multipe theads to save note contents (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="68"/> <source>Use libtidy directly (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="72"/> <source>Auto-Save Interval (in seconds).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="79"/> <source>Message Level</source> <translation type="unfinished">КоличеÑтво Ñообщений</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="82"/> <source>Trace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="83"/> <source>Debug</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="84"/> <source>Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="85"/> <source>Warnings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="86"/> <source>Errors</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="87"/> <source>Fatal</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EditorButtonBar</name> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="37"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="133"/> <source>Undo</source> <translation type="unfinished">Отменить</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="38"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="137"/> <source>Redo</source> <translation type="unfinished">Вернуть</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="39"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="142"/> <source>Cut</source> <translation type="unfinished">Вырезать</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="40"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Копировать</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="41"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="150"/> <source>Paste</source> <translation type="unfinished">Ð’Ñтавить</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="42"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="153"/> <source>Remove Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="43"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="159"/> <source>Bold</source> <translation type="unfinished">Полужирный</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="44"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="166"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="167"/> <source>Italics</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="45"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="184"/> <source>Superscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="46"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="188"/> <source>Subscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="47"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="174"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="175"/> <source>Underline</source> <translation type="unfinished">Подчёркнутый</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="48"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="180"/> <source>Strikethrough</source> <translation type="unfinished">Зачёркнутый</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="49"/> <source>Align Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="50"/> <source>Align Center</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="51"/> <source>Align Full</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="52"/> <source>Align Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="53"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="208"/> <source>Horizontal Line</source> <translation type="unfinished">Ð’Ñтавить горизонтальную линию</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="54"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="55"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="220"/> <source>Shift Right</source> <translation type="unfinished">Увеличить отÑтуп</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="56"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="224"/> <source>Shift Left</source> <translation type="unfinished">Уменьшить отÑтуп</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="57"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="228"/> <source>Bullet List</source> <translation type="unfinished">Маркированный ÑпиÑок</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="58"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="232"/> <source>Number List</source> <translation type="unfinished">Ðумерованный ÑпиÑок</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="59"/> <source>Font</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="60"/> <source>Font Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="61"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="248"/> <source>Font Color</source> <translation type="unfinished">Цвет текÑта</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="62"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="257"/> <source>Highlight</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="63"/> <source>To-do</source> <translation type="unfinished">Задача</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="192"/> <source>Center Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="196"/> <source>Fully Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="214"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="215"/> <source>Insert Date & Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="262"/> <source>Todo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="64"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="266"/> <source>Spell Check</source> <translation type="unfinished">Проверка орфографии</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="65"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="270"/> <source>Insert Table</source> <translation type="unfinished">Ð’Ñтавка таблицы</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="66"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="204"/> <source>Left Justify</source> <translation type="unfinished"></translation> </message> <message> <source>Center</source> <translation type="obsolete">По центру</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="200"/> <source>Right Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="274"/> <source>Insert HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="661"/> <source>Times</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailDialog</name> <message> <location filename="../dialog/emaildialog.cpp" line="36"/> <source>Send Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="38"/> <source>Send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="39"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="51"/> <source>To:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="53"/> <source>BCC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="55"/> <source>CC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="57"/> <source>Subject:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="59"/> <source>Note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="77"/> <source>CC me on this email</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailNote</name> <message> <location filename="../cmdtools/emailnote.cpp" line="261"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="327"/> <source>Connection Error: Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="333"/> <source>Login Error : Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="338"/> <source>Send Error : Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="344"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailPreferences</name> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="17"/> <source>SMTP Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="18"/> <source>Server Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="19"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="20"/> <source>Password</source> <translation type="unfinished">Пароль</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="21"/> <source>Sender Display Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="22"/> <source>Sender Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="23"/> <source>Connection Type</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="31"/> <source>Plain Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="32"/> <source>SSL Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="33"/> <source>TLS Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="35"/> <source>Send Test Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="108"/> <location filename="../dialog/preferences/emailpreferences.cpp" line="113"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="109"/> <source>You must specify a SMTP server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="114"/> <source>You must specify a sender email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="146"/> <source>Test Email From NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="152"/> <source><h1>This is a test email from NixNote.</h1> </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="153"/> <source>If you are reading it then your email preferences are are setup properly.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message sent.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnCryptDialog</name> <message> <location filename="../dialog/encryptdialog.cpp" line="31"/> <source>Encrypt Text</source> <translation type="unfinished">Шифрование заметки</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="47"/> <source>Password</source> <translation type="unfinished">Пароль</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="49"/> <source>Verify</source> <translation type="unfinished">Повторите</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="51"/> <source>Hint</source> <translation type="unfinished">ПодÑказка</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="53"/> <source>Remember Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="61"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="65"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="113"/> <source>Password must be at least 4 characters</source> <translation type="unfinished">Пароль должен Ñодержать не менее 4 Ñимволов</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="117"/> <source>Passwords do not match</source> <translation type="unfinished">Пароли не Ñовпадают</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="121"/> <source>Hint must be entered</source> <translation type="unfinished">Можно ввеÑти подÑказку</translation> </message> </context> <context> <name>EnDecryptDialog</name> <message> <location filename="../dialog/endecryptdialog.cpp" line="35"/> <source>Decrypt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="51"/> <source>Password</source> <translation type="unfinished">Пароль</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="52"/> <source>Hint</source> <translation type="unfinished">ПодÑказка</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="59"/> <source>Permanently Decrypt</source> <translation type="unfinished">СнÑть шифрование навÑегда</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="61"/> <source>Remember Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="66"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="70"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> </context> <context> <name>ExportData</name> <message> <location filename="../xml/exportdata.cpp" line="54"/> <source>Cannot open file.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="62"/> <source>Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="81"/> <source>Backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="114"/> <source>Tags</source> <translation type="unfinished">Метки</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="151"/> <source>Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="360"/> <source>Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="405"/> <source>Linked Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="448"/> <source>Shared Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="508"/> <source>Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="725"/> <source>Backup Canceled</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExternalBrowse</name> <message> <location filename="../gui/externalbrowse.cpp" line="32"/> <source>NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/externalbrowse.cpp" line="124"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExtractNotes</name> <message> <location filename="../cmdtools/extractnotes.cpp" line="41"/> <location filename="../cmdtools/extractnotes.cpp" line="82"/> <source>Output file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="64"/> <source>Deleting notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="65"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FavoritesView</name> <message> <location filename="../gui/favoritesview.cpp" line="68"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="90"/> <source>Remove from shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="565"/> <source>Are you sure you want to remove this shortcut?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="566"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>FileWatcher</name> <message> <location filename="../watcher/filewatcher.cpp" line="72"/> <source>Error removing file: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FindReplace</name> <message> <location filename="../gui/findreplace.cpp" line="46"/> <source>Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="47"/> <source>Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="48"/> <source>Match case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="57"/> <source>Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="58"/> <source>Replace all</source> <translation type="unfinished"></translation> </message> </context> <context> <name>HtmlEntitiesDialog</name> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="34"/> <source>Close</source> <translation type="unfinished">Закрыть</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="35"/> <source>Edit entries list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="36"/> <source>Save entities list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="71"/> <source>HTML Entities Selection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="206"/> <source>Comma separated list of HTML entities. See http://www.w3schools.com/charsets/ for list.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportData</name> <message> <location filename="../xml/importdata.cpp" line="59"/> <source>Imported Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="106"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="107"/> <location filename="../xml/importdata.cpp" line="119"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="130"/> <source>Importing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="131"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="133"/> <source>Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="134"/> <source>Restoring Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportEnex</name> <message> <location filename="../xml/importenex.cpp" line="40"/> <source>Imported Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="83"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="84"/> <location filename="../xml/importenex.cpp" line="94"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="101"/> <location filename="../xml/importenex.cpp" line="102"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportNotes</name> <message> <location filename="../cmdtools/importnotes.cpp" line="19"/> <source>Input file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/importnotes.cpp" line="24"/> <source>Input file not found.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLatexDialog</name> <message> <location filename="../dialog/insertlatexdialog.cpp" line="32"/> <source>Insert LaTeX Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="42"/> <source>Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="47"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="52"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> </context> <context> <name>InsertLinkDialog</name> <message> <location filename="../dialog/insertlinkdialog.cpp" line="34"/> <source>Insert Link</source> <translation type="unfinished">Ð’Ñтавить ÑÑылку</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="45"/> <source>URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="54"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> </context> <context> <name>LineEdit</name> <message> <location filename="../gui/lineedit.cpp" line="39"/> <source>Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocalePreferences</name> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="37"/> <source>Date Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="40"/> <source>MM/dd/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="41"/> <source>MM/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="42"/> <source>M/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="43"/> <source>M/d/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="44"/> <source>dd/MM/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="45"/> <source>d/M/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="46"/> <source>dd/MM/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="47"/> <source>d/M/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="48"/> <source>yyyy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="49"/> <source>yy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="52"/> <source>Time Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="55"/> <source>HH:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="56"/> <source>HH:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="57"/> <source>HH:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="58"/> <source>HH:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="59"/> <source>hh:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="60"/> <source>hh:mm:ss a- </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="61"/> <source>h:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="62"/> <source>hh:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="63"/> <source>hh:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="64"/> <source>h:mm a - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationDialog</name> <message> <location filename="../dialog/locationdialog.cpp" line="33"/> <source>Location</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="40"/> <source>Longitude</source> <translation type="unfinished">Долгота</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="42"/> <source>Latitude</source> <translation type="unfinished">Широта</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="44"/> <source>Altitude</source> <translation type="unfinished">Ð’Ñ‹Ñота</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="49"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="52"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> </context> <context> <name>LocationEditor</name> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="42"/> <source>Click to set location...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="45"/> <source>Edit...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="46"/> <source>Clear</source> <translation type="unfinished">ОчиÑтить</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="47"/> <source>View on map</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LogViewer</name> <message> <location filename="../dialog/logviewer.cpp" line="41"/> <source>Close</source> <translation type="unfinished">Закрыть</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="43"/> <source>Refresh</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="45"/> <source>Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="54"/> <source>Save Logs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>Save Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>NixNote Log (*.log);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LoginDialog</name> <message> <location filename="../dialog/logindialog.cpp" line="34"/> <source>NixNote Login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="43"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="44"/> <source>Password</source> <translation type="unfinished">Пароль</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="52"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="56"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> </context> <context> <name>NAttributeTree</name> <message> <location filename="../gui/nattributetree.cpp" line="48"/> <source>Attributes</source> <translation type="unfinished">СвойÑтва поиÑка</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="129"/> <source>Created</source> <translation type="unfinished">Создана</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="132"/> <location filename="../gui/nattributetree.cpp" line="213"/> <source>Since</source> <translation type="unfinished">ÐÐ°Ñ‡Ð¸Ð½Ð°Ñ Ñ</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="136"/> <location filename="../gui/nattributetree.cpp" line="173"/> <location filename="../gui/nattributetree.cpp" line="217"/> <location filename="../gui/nattributetree.cpp" line="254"/> <source>Today</source> <translation type="unfinished">СегоднÑ</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="140"/> <location filename="../gui/nattributetree.cpp" line="177"/> <location filename="../gui/nattributetree.cpp" line="221"/> <location filename="../gui/nattributetree.cpp" line="258"/> <source>Yesterday</source> <translation type="unfinished">Вчера</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="144"/> <location filename="../gui/nattributetree.cpp" line="181"/> <location filename="../gui/nattributetree.cpp" line="225"/> <location filename="../gui/nattributetree.cpp" line="262"/> <source>This week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="148"/> <location filename="../gui/nattributetree.cpp" line="185"/> <location filename="../gui/nattributetree.cpp" line="229"/> <location filename="../gui/nattributetree.cpp" line="266"/> <source>Last week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="152"/> <location filename="../gui/nattributetree.cpp" line="189"/> <location filename="../gui/nattributetree.cpp" line="233"/> <location filename="../gui/nattributetree.cpp" line="270"/> <source>This Month</source> <translation type="unfinished">Этого меÑÑца</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="156"/> <location filename="../gui/nattributetree.cpp" line="193"/> <location filename="../gui/nattributetree.cpp" line="237"/> <location filename="../gui/nattributetree.cpp" line="274"/> <source>Last Month</source> <translation type="unfinished">Предыдущего меÑÑца</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="160"/> <location filename="../gui/nattributetree.cpp" line="197"/> <location filename="../gui/nattributetree.cpp" line="241"/> <location filename="../gui/nattributetree.cpp" line="278"/> <source>This Year</source> <translation type="unfinished">Этого года</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="164"/> <location filename="../gui/nattributetree.cpp" line="201"/> <location filename="../gui/nattributetree.cpp" line="245"/> <location filename="../gui/nattributetree.cpp" line="282"/> <source>Last Year</source> <translation type="unfinished">Предыдущего года</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="169"/> <location filename="../gui/nattributetree.cpp" line="250"/> <source>Before</source> <translation type="unfinished">До</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="210"/> <source>Last Modified</source> <translation type="unfinished">Изменена</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="289"/> <source>Contains</source> <translation type="unfinished">Содержит</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="292"/> <source>Images</source> <translation type="unfinished">ИзображениÑ</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="296"/> <source>Audio</source> <translation type="unfinished">Ðудиофайлы</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="300"/> <source>Ink</source> <translation type="unfinished">РукопиÑные заметки</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="304"/> <source>Encrypted Text</source> <translation type="unfinished">Зашифрованные запиÑи</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="308"/> <source>To-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="312"/> <source>Unfinished to-do items</source> <translation type="unfinished">Ðезавершённые задачи</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="316"/> <source>Finished to-do items</source> <translation type="unfinished">Завершённые задачи</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="320"/> <source>PDF document</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="324"/> <source>Attachment</source> <translation type="unfinished">ВложениÑ</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="328"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="332"/> <source>Uncompleted Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="336"/> <source>Future Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="341"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="344"/> <source>Emailed to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="348"/> <source>Email</source> <translation type="unfinished">Отправить по почте</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="352"/> <source>Web page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="356"/> <source>Mobile</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="360"/> <source>Another application</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NBrowserWindow</name> <message> <location filename="../gui/nbrowserwindow.cpp" line="521"/> <location filename="../gui/nbrowserwindow.cpp" line="3112"/> <source>Today</source> <translation type="unfinished">СегоднÑ</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="523"/> <location filename="../gui/nbrowserwindow.cpp" line="3114"/> <source>Tomorrow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="525"/> <location filename="../gui/nbrowserwindow.cpp" line="3116"/> <source>Yesterday</source> <translation type="unfinished">Вчера</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to save this note. Either tidy isn't installed or the note is too complex to save.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="1808"/> <source>Insert Link</source> <translation type="unfinished">Ð’Ñтавить ÑÑылку</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>Unable Open</source> <translation type="unfinished">Ðевозможно открыть</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>This is an ink note. Ink notes are not supported since Evernote has not published any specifications on them and I'm too lazy to figure them out by myself.</source> <translation type="unfinished">Это рукопиÑÐ½Ð°Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ°. РукопиÑные заметки не поддерживаютÑÑ, поÑкольку Evernote не опубликовал никаких Ñпецификаций и Ñ Ñлишком ленив, чтобы понÑть их ÑамоÑтоÑтельно.</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2240"/> <source>Edit Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2304"/> <source>Unable to create LaTeX image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2305"/> <source>Unable to create LaTeX image. Are you sure mimetex is installed?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2635"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2636"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2645"/> <source>Sending Email. Please be patient.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3159"/> <source>Decryption Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3160"/> <source>Unknown encryption method. Unable to decrypt.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3263"/> <source>Error</source> <translation type="unfinished">Ошибка</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3264"/> <source>Error Encrypting String. Please verify you have Java installed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Hunspell plugin not found or could not be loaded.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete</source> <translation type="unfinished">Проверка орфографии завершена</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NMainMenuBar</name> <message> <location filename="../gui/nmainmenubar.cpp" line="60"/> <source>&File</source> <translation type="unfinished">&Файл</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="79"/> <source>Print this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="87"/> <source>Backup database to a file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="93"/> <source>Restore from a backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="113"/> <source>Import notes from an export file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="133"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="151"/> <source>Open/Close Notebooks</source> <translation type="unfinished">Открыть/закрыть блокноты</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="159"/> <source>Close the program</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="175"/> <source>&Edit</source> <translation type="unfinished">&Правка</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="78"/> <source>&Print Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="64"/> <source>Email Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="65"/> <source>Email a copy of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="71"/> <source>Print Preview Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="72"/> <source>Print preview of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="86"/> <source>&Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="92"/> <source>&Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="112"/> <source>&Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="140"/> <source>&Add Another User...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="144"/> <source>&User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="150"/> <source>&Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="158"/> <source>E&xit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="180"/> <source>&Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="184"/> <source>&Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="190"/> <source>&Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="194"/> <source>C&opy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="198"/> <source>&Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="202"/> <source>Pas&te as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="206"/> <source>Remo&ve Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="212"/> <source>Select &All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="218"/> <source>F&ind and Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="220"/> <source>&Search Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="225"/> <source>&Reset Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="232"/> <source>&Find in Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="238"/> <source>Find &Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="243"/> <source>Find &Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="250"/> <source>Replace &Within Note...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="260"/> <source>Preferences</source> <translation type="unfinished">ÐаÑтройки</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="268"/> <source>&View</source> <translation type="unfinished">&Вид</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="273"/> <source>Wide Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="278"/> <source>Narrow Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="285"/> <source>&Show Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="289"/> <source>Note &History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="295"/> <source>&Presentation Mode</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="299"/> <source>Show &Left Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="306"/> <source>Show &Favorites</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="313"/> <source>Show &Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="320"/> <source>Show Ta&gs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="327"/> <source>Show Sa&ved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="341"/> <source>Show T&rash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="348"/> <source>Show N&ote List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="355"/> <source>Show Note &Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="364"/> <source>View Note &Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="368"/> <source>View &Toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="375"/> <source>View Status&bar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="391"/> <source>New &Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="396"/> <source>New &Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="401"/> <source>Dupl&icate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="406"/> <source>&Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="411"/> <source>Reindex Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="418"/> <source>&Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="427"/> <source>&Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="432"/> <source>&UnPin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="446"/> <source>&Synchronize</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="447"/> <source>Synchronize with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="452"/> <source>&Disconnect</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="460"/> <source>Pause &Indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="461"/> <source>Temporarily pause indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="468"/> <source>Disable &Editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="469"/> <source>Temporarily disable note editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="476"/> <source>A&ccount</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="490"/> <source>&Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="514"/> <source>&User's Guide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="537"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="538"/> <source>View currentt shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="547"/> <source>Github Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="548"/> <source>Goto the NixNote2 Github project page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="585"/> <source>About &Qt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="625"/> <source>Theme</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="386"/> <source>&Note</source> <translation type="unfinished">&Заметка</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="100"/> <source>&Export to NixNote Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="101"/> <source>Export selected notes to a NNEX file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="106"/> <source>&Export Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="107"/> <source>Export selected notes to a PDF file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="441"/> <source>&Tools</source> <translation type="unfinished">С&ервиÑ</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="453"/> <source>Disconnect from Evernote</source> <translation type="unfinished">ОтключитьÑÑ Ð¾Ñ‚ Evernote</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="477"/> <source>Account information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="484"/> <source>&Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="485"/> <source>Database Status</source> <translation type="unfinished">СоÑтоÑние базы данных</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="491"/> <source>Reindex all notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="499"/> <source>&Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="500"/> <source>Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="509"/> <source>&Help</source> <translation type="unfinished">&Справка</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="515"/> <source>Open the user manual.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="542"/> <source>Message &Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="554"/> <source>&Evernote Account Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="559"/> <source>Evernote &Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="568"/> <source>Evernote &Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="573"/> <source>Evernote User &Forum</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="580"/> <source>&About</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="634"/> <source>System Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="543"/> <source>View current program messages</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="334"/> <source>Show &Attribute Filter</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="520"/> <source>Theme &Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="521"/> <source>View information about the current theme.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="555"/> <source>Go to your Evernote account page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="560"/> <source>Go to Evernote's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="562"/> <source>Yinxiang Biji Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="563"/> <source>Go to Yinxiang Biji's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="569"/> <source>Go to Evernote Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="574"/> <source>Go to the Evernote user support forum.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="581"/> <location filename="../gui/nmainmenubar.cpp" line="586"/> <source>About</source> <translation type="unfinished">О программе</translation> </message> </context> <context> <name>NNotebookView</name> <message> <location filename="../gui/nnotebookview.cpp" line="69"/> <source>Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="86"/> <source>Create New Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="95"/> <source>Delete</source> <translation type="unfinished">Удалить</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="103"/> <source>Add to stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="116"/> <source>Create New stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="119"/> <source>Remove from stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="123"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="131"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="641"/> <source>Are you sure you want to delete this notebook?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="642"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>New Stack (</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NSearchView</name> <message> <location filename="../gui/nsearchview.cpp" line="65"/> <source>Saved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="74"/> <source>Create Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="83"/> <source>Delete</source> <translation type="unfinished">Удалить</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="90"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="94"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="404"/> <source>Are you sure you want to delete this saved search?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="405"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTabWidget</name> <message> <location filename="../gui/ntabwidget.cpp" line="254"/> <location filename="../gui/ntabwidget.cpp" line="262"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntabwidget.cpp" line="267"/> <location filename="../gui/ntabwidget.cpp" line="334"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableView</name> <message> <location filename="../gui/ntableview.cpp" line="203"/> <source>Open Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="209"/> <source>Open Note In New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="215"/> <source>Open Note In New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="222"/> <source>Add Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="227"/> <source>Delete Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="238"/> <source>Restore Note</source> <translation type="unfinished">ВоÑÑтановить заметку</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="244"/> <source>Copy Note Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="249"/> <source>Duplicate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="254"/> <source>Reminders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="258"/> <source>Remove</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="263"/> <source>Mark Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="269"/> <source>Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="274"/> <source>Unpin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="279"/> <source>Merge Notes</source> <translation type="unfinished">Объединить заметки</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="285"/> <source>Create Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="291"/> <source>Title Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="296"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="301"/> <source>White</source> <translation type="unfinished">Белый</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="304"/> <source>Red</source> <translation type="unfinished">КраÑный</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="307"/> <source>Blue</source> <translation type="unfinished">Голубой</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="310"/> <source>Green</source> <translation type="unfinished">Зелёный</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="313"/> <source>Yellow</source> <translation type="unfinished">Жёлтый</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="316"/> <source>Black</source> <translation type="unfinished">Чёрный</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="319"/> <source>Gray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="322"/> <source>Cyan</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="325"/> <source>Magenta</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="663"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="666"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="672"/> <source>selected note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="677"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="942"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="943"/> <source>This note has never been synchronized. Using this in a note link can cause problems unless you synchronize it first.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1319"/> <source>Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1370"/> <source>One or more notes are unsynchronized. This can cause issues if they are later synchronized. Do you wish to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1654"/> <source>Note LID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1657"/> <source>Title</source> <translation type="unfinished">Заголовок</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1660"/> <source>Notebook</source> <translation type="unfinished">Блокнот</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1663"/> <source>Tags</source> <translation type="unfinished">Метки</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1666"/> <source>Synchronized</source> <translation type="unfinished">Синхронизирована</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1668"/> <location filename="../gui/ntableview.cpp" line="1676"/> <location filename="../gui/ntableview.cpp" line="1682"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1670"/> <location filename="../gui/ntableview.cpp" line="1674"/> <location filename="../gui/ntableview.cpp" line="1680"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1672"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1678"/> <source>Has To-Do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1684"/> <source>Date Created</source> <translation type="unfinished">Дата ÑозданиÑ</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1687"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1690"/> <source>Date Deleted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1698"/> <source>Subject Date</source> <translation type="unfinished">Дата темы заметки</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1706"/> <source>Author</source> <translation type="unfinished">Ðвтор</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1710"/> <source>Longitude</source> <translation type="unfinished">Долгота</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1719"/> <source>Latitude</source> <translation type="unfinished">Широта</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1728"/> <source>Altitude</source> <translation type="unfinished">Ð’Ñ‹Ñота</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1737"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1740"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1743"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1746"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1754"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableViewHeader</name> <message> <location filename="../gui/ntableviewheader.cpp" line="42"/> <source>Date Created</source> <translation type="unfinished">Дата ÑозданиÑ</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="47"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="52"/> <source>Title</source> <translation type="unfinished">Заголовок</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="57"/> <source>Notebook</source> <translation type="unfinished">Блокнот</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="62"/> <source>Tags</source> <translation type="unfinished">Метки</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="67"/> <source>Author</source> <translation type="unfinished">Ðвтор</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="72"/> <source>Subject Date</source> <translation type="unfinished">Дата темы заметки</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="77"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="82"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="87"/> <source>Latitude</source> <translation type="unfinished">Широта</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="92"/> <source>Longitude</source> <translation type="unfinished">Долгота</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="97"/> <source>Altitude</source> <translation type="unfinished">Ð’Ñ‹Ñота</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="102"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="107"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="112"/> <source>Synchronized</source> <translation type="unfinished">Синхронизирована</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="117"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="122"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="128"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="133"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="138"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="143"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTagView</name> <message> <location filename="../gui/ntagview.cpp" line="67"/> <location filename="../gui/ntagview.cpp" line="156"/> <source>Tags from Personal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="91"/> <source>Create New Tag</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="100"/> <source>Delete</source> <translation type="unfinished">Удалить</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="107"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="110"/> <source>Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="113"/> <source>Hide Unassigned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="119"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="154"/> <source>Tags from </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="351"/> <source>-<Missing Tag>-</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="706"/> <source>Are you sure you want to merge these tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="707"/> <source>Verify Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="753"/> <source>Are you sure you want to delete this tag?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="755"/> <source>Are you sure you want to delete all selected tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="756"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTitleEditor</name> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="123"/> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="137"/> <source>Untitled note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="134"/> <source>untitled note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTrashTree</name> <message> <location filename="../gui/ntrashtree.cpp" line="53"/> <source>Trash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="65"/> <source>Restore Deleted Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="68"/> <source>Empty Trash</source> <translation type="unfinished">ОчиÑтить корзину</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="238"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="239"/> <source>Are you sure you want to permanently delete these notes?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NWebView</name> <message> <location filename="../gui/nwebview.cpp" line="56"/> <source>Open</source> <translation type="unfinished">Открыть</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="61"/> <source>Cut</source> <translation type="unfinished">Вырезать</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="66"/> <source>Copy</source> <translation type="unfinished">Копировать</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="71"/> <source>Paste</source> <translation type="unfinished">Ð’Ñтавить</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="76"/> <source>Paste as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="81"/> <source>Remove Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="86"/> <source>Copy Note URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="93"/> <source>Background Color</source> <translation type="unfinished">Цвет фона</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="113"/> <source>To-do</source> <translation type="unfinished">Задача</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="120"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="127"/> <source>Encrypted Selected Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="132"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="137"/> <source>Insert Hyperlink</source> <translation type="unfinished">Ð’Ñтавить гиперÑÑылку</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="142"/> <source>Quick Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="147"/> <source>Remove Hyperlink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="152"/> <source>Attach File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="158"/> <source>Insert LaTeX Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="164"/> <source>Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="167"/> <source>Insert Table</source> <translation type="unfinished">Ð’Ñтавка таблицы</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="173"/> <source>Insert Row</source> <translation type="unfinished">Ð’Ñтавить Ñтроку</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="178"/> <source>Insert Column</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="185"/> <source>Delete Row</source> <translation type="unfinished">Удалить Ñтроку</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="189"/> <source>Delete Column</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="196"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="203"/> <source>Image</source> <translation type="unfinished">Изображение</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="206"/> <source>Save Image</source> <translation type="unfinished">Сохранить изображение</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="214"/> <source>Rotate Left</source> <translation type="unfinished">Повернуть против чаÑовой Ñтрелки</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="218"/> <source>Rotate Right</source> <translation type="unfinished">Повернуть по чаÑовой Ñтрелке</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="224"/> <source>Save Attachment</source> <translation type="unfinished">Сохранить вложениÑ</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="502"/> <location filename="../gui/nwebview.cpp" line="532"/> <source>Save File</source> <translation type="unfinished">Сохранить файл</translation> </message> </context> <context> <name>NixNote</name> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy Not Found</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy is not found on this system. Until tidy is installed you cannot save any notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="291"/> <source>ToolBar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="303"/> <source>Back</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="304"/> <source>Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="314"/> <source>All Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="316"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="319"/> <source>Print</source> <translation type="unfinished">Печать</translation> </message> <message> <location filename="../nixnote.cpp" line="329"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="332"/> <source>New Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="344"/> <source>Delete</source> <translation type="unfinished">Удалить</translation> </message> <message> <location filename="../nixnote.cpp" line="347"/> <source>Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="349"/> <source>Usage</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="531"/> <location filename="../nixnote.cpp" line="3183"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="547"/> <source>Show/Hide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="559"/> <source>Close</source> <translation type="unfinished">Закрыть</translation> </message> <message> <location filename="../nixnote.cpp" line="1799"/> <source>Confirm Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1815"/> <source>Restore Database</source> <translation type="unfinished">ВоÑÑтановление базы данных</translation> </message> <message> <location filename="../nixnote.cpp" line="1818"/> <source>Import Notes</source> <translation type="unfinished">Импорт заметок</translation> </message> <message> <location filename="../nixnote.cpp" line="1730"/> <location filename="../nixnote.cpp" line="1816"/> <source>NixNote Export (*.nnex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="320"/> <source>Print the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="322"/> <source>Email</source> <translation type="unfinished">Отправить по почте</translation> </message> <message> <location filename="../nixnote.cpp" line="323"/> <source>Email the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="528"/> <source>Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="538"/> <source>Shortcut Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="540"/> <source>Pinned Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="542"/> <source>Recently Updated Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1437"/> <location filename="../nixnote.cpp" line="2350"/> <source>Log in to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1439"/> <location filename="../nixnote.cpp" line="2352"/> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <location filename="../nixnote.cpp" line="1761"/> <location filename="../nixnote.cpp" line="1857"/> <source>Error</source> <translation type="unfinished">Ошибка</translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <source>No notes selected.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1722"/> <source>Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1724"/> <source>Export Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1749"/> <source>Performing backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1751"/> <source>Performing export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1768"/> <source>Database backup complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1770"/> <source>Note extract complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1796"/> <source>This is used to restore a database from backups. It is HIGHLY recommended that this only be used to populate an empty database. Restoring into a database that already has data can cause problems. Are you sure you want to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1819"/> <source>NixNote Export (*.nnex);;Evernote Export (*.enex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1846"/> <source>Restoring database</source> <translation type="unfinished">ВоÑÑтановление базы данных</translation> </message> <message> <location filename="../nixnote.cpp" line="1848"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1880"/> <source>Database has been restored.</source> <translation type="unfinished">ВоÑÑтановление базы данных завершено.</translation> </message> <message> <location filename="../nixnote.cpp" line="1882"/> <source>Notes have been imported.</source> <translation type="unfinished">Заметки были импортированы.</translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <location filename="../nixnote.cpp" line="1918"/> <source>Sync Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <source>Sync completed with errors.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1918"/> <source>Sync error. See message log for details</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync completed successfully.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2002"/> <source>Untitled note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>This note has never been synchronized with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3872"/> <source>Error loading Webcam plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3887"/> <source>Error loading Hunspell plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3913"/> <location filename="../nixnote.cpp" line="3965"/> <source>PDF Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>Export complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3937"/> <source>Exporting Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3938"/> <source>Exporting notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2391"/> <location filename="../nixnote.cpp" line="2398"/> <source>Error retrieving note.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2392"/> <location filename="../nixnote.cpp" line="2399"/> <source>Error retrieving note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <location filename="../nixnote.cpp" line="2431"/> <source>Note Restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <source>A new copy has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2431"/> <source>Note successfully restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2434"/> <source>Note restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2650"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3054"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex Database</source> <translation type="unfinished">ПереиндекÑировать базу данных</translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex the entire database?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3247"/> <source>Notes will be reindexed.</source> <translation type="unfinished">Заметки будут переиндекÑированы.</translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Webcam plugin not found or could not be loaded</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3281"/> <source>Unable to find webcam or capture image.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3282"/> <source>Webcam Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3432"/> <source>Note Reindexed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3444"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3447"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3451"/> <source>this note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3455"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3816"/> <source>Press ESC to exit.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteFormatter</name> <message> <location filename="../html/noteformatter.cpp" line="657"/> <source>File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/noteformatter.cpp" line="691"/> <source>Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/noteformatter.cpp" line="695"/> <source>KB</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteHistorySelect</name> <message> <location filename="../dialog/notehistoryselect.cpp" line="32"/> <source>Note History</source> <translation type="unfinished">ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ¸</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="34"/> <source>Import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="39"/> <source>Replace current note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="80"/> <source>Current copy on Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="93"/> <source>Today</source> <translation type="unfinished">СегоднÑ</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="95"/> <source>Yesterday</source> <translation type="unfinished">Вчера</translation> </message> </context> <context> <name>NoteProperties</name> <message> <location filename="../dialog/noteproperties.cpp" line="37"/> <source>Note Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/noteproperties.cpp" line="38"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NotebookProperties</name> <message> <location filename="../dialog/notebookproperties.cpp" line="38"/> <source>Notebook</source> <translation type="unfinished">Блокнот</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="42"/> <source>Synchronized</source> <translation type="unfinished">Синхронизирована</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="46"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="52"/> <source>Name</source> <translation type="unfinished">ИмÑ</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="60"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="62"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="135"/> <source>Add Notebook</source> <translation type="unfinished">Создание блокнота</translation> </message> </context> <context> <name>OAuthWindow</name> <message> <location filename="../oauth/oauthwindow.cpp" line="70"/> <source>Please Grant NixNote Access</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="81"/> <source>SSL Support not found. Aborting connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="132"/> <source>Error receiving temporary credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="176"/> <source>Error receiving permanent credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="219"/> <source>Error receiving authorization</source> <translation type="unfinished"></translation> </message> </context> <context> <name>PopplerViewer</name> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source>Page </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source> of </source> <translation type="unfinished"></translation> </message> </context> <context> <name>PreferencesDialog</name> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="30"/> <source>User Settings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="49"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="92"/> <source>Appearance</source> <translation type="unfinished">Внешний вид</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="98"/> <source>Locale</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="104"/> <source>Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="110"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="116"/> <source>Email</source> <translation type="unfinished">Отправить по почте</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="121"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="127"/> <source>Advanced</source> <translation type="unfinished"></translation> </message> <message> <source>Debugging</source> <translation type="obsolete">Отладка</translation> </message> </context> <context> <name>QApplication</name> <message> <location filename="../dialog/screencapture.cpp" line="108"/> <source>Use your mouse to draw a rectangle to screenshot or exit pressing any key or using the right or middle mouse buttons.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/screencapture.cpp" line="145"/> <source>%1 x %2 pixels </source> <translation type="unfinished"></translation> </message> </context> <context> <name>QObject</name> <message> <location filename="../gui/ntableview.cpp" line="175"/> <source>Title</source> <translation type="unfinished">Заголовок</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="176"/> <source>Author</source> <translation type="unfinished">Ðвтор</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="177"/> <source>Notebook</source> <translation type="unfinished">Блокнот</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="178"/> <source>Tags</source> <translation type="unfinished">Метки</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="179"/> <source>Date Created</source> <translation type="unfinished">Дата ÑозданиÑ</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="180"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="181"/> <source>Subject Date</source> <translation type="unfinished">Дата темы заметки</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="182"/> <source>Deletion Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="183"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="184"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="185"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="186"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="187"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="188"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="189"/> <source>Longitude</source> <translation type="unfinished">Долгота</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="190"/> <source>Latitude</source> <translation type="unfinished">Широта</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="191"/> <source>Altitude</source> <translation type="unfinished">Ð’Ñ‹Ñота</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="192"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="193"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="194"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="195"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="196"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="197"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderButton</name> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="35"/> <source>Mark as Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="36"/> <source>Change Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="37"/> <source>Clear Reminder</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderManager</name> <message> <location filename="../reminders/remindermanager.cpp" line="85"/> <source>Reminders Due</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderSetDialog</name> <message> <location filename="../dialog/remindersetdialog.cpp" line="47"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/remindersetdialog.cpp" line="48"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> </context> <context> <name>RemoteQuery</name> <message> <location filename="../filters/remotequery.cpp" line="113"/> <location filename="../filters/remotequery.cpp" line="130"/> <source>Today</source> <translation type="unfinished">СегоднÑ</translation> </message> </context> <context> <name>SavedSearchProperties</name> <message> <location filename="../dialog/savedsearchproperties.cpp" line="35"/> <source>Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished">ИмÑ</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="43"/> <source>Query</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="51"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="53"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="106"/> <source>Add Saved Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SearchPreferences</name> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="36"/> <source>Index Attachments</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="44"/> <source>Clear Notebook Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="48"/> <source>Clear Tag Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="52"/> <source>Clear Search Text on Notebook Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="56"/> <source>Show Any Matching Tags When Selecting Multiple Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="60"/> <source>Index PDFs locally</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="64"/> <source>Background Indexing (requires restart & may cause issues on some systems)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="68"/> <source>Experimental: Force search to lower case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="73"/> <source>Minimum Image Recognition Weight</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ShortcutDialog</name> <message> <location filename="../dialog/shortcutdialog.cpp" line="41"/> <source>Defined Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/shortcutdialog.cpp" line="42"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SpellCheckDialog</name> <message> <location filename="../dialog/spellcheckdialog.cpp" line="35"/> <source>Spell Check</source> <translation type="unfinished">Проверка орфографии</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="50"/> <source>Suggestion</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="56"/> <source>Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="57"/> <source>Ignore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="58"/> <source>Ignore All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="59"/> <source>Add To Dictionary</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="66"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> </context> <context> <name>SyncPreferences</name> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="34"/> <source>Sync automatically</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="38"/> <source>Every 15 minutes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="39"/> <source>Every 30 minutes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="40"/> <source>Every hour</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="41"/> <source>Every day</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="43"/> <source>Sync on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="45"/> <source>Sync on shutdown</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="47"/> <source>Enable sync notifications</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="48"/> <source>Show successful syncs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="49"/> <source>Restart sync on API limit (experimental)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="51"/> <source>Enable Proxy*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="52"/> <source>Enable Socks5</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="53"/> <source>Proxy Hostname</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="54"/> <source>Proxy Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="55"/> <source>Proxy Username</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="56"/> <source>Proxy Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="57"/> <source>*Note: Restart required</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="73"/> <source>Popup message on sync errors.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncRunner</name> <message> <location filename="../threads/syncrunner.cpp" line="134"/> <source>Beginning Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="142"/> <source>Downloading changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="192"/> <source>Sync Complete Successfully</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <location filename="../threads/syncrunner.cpp" line="267"/> <source>Download </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <source>% complete for notebooks, tags, & searches.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="247"/> <source>Download complete for notebooks, tags, & searches. Downloading notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="267"/> <source>% complete.</source> <translation type="unfinished">%.</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="280"/> <source>Download complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>Downloading </source> <translation type="unfinished">Загрузка</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <source>% complete for tags in shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="721"/> <source>Downloading notes for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="743"/> <source>% complete for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1149"/> <source>Error uploading note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1151"/> <source>Error uploading note with a missing title!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="721"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TableDialog</name> <message> <location filename="../dialog/tabledialog.cpp" line="30"/> <source>Insert Table</source> <translation type="unfinished">Ð’Ñтавка таблицы</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="34"/> <source>Percent</source> <translation type="unfinished">Проценты</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="35"/> <source>Pixels</source> <translation type="unfinished">ПикÑели</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="51"/> <source>Rows</source> <translation type="unfinished">КоличеÑтво Ñтрок</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="53"/> <source>Columns</source> <translation type="unfinished">КоличеÑтво Ñтолбцов</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="55"/> <source>Width</source> <translation type="unfinished">Ширина таблицы</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="57"/> <source>Unit</source> <translation type="unfinished">Единица измерениÑ</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="64"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="67"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> </context> <context> <name>TablePropertiesDialog</name> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="72"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="105"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="86"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="87"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="106"/> <source>Cell Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="214"/> <source>Row 1 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="216"/> <source>Row 1 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="218"/> <source>Row 1 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="220"/> <source>Row 2 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="222"/> <source>Row 2 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="224"/> <source>Row 2 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="226"/> <source>Row 3 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="228"/> <source>Row 3 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="230"/> <source>Row 3 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="456"/> <source>Width</source> <translation type="unfinished">Ширина таблицы</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="464"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="480"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="494"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="511"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="526"/> <source>Percent</source> <translation type="unfinished">Проценты</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="465"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="479"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="493"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="510"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="525"/> <source>Pixels</source> <translation type="unfinished">ПикÑели</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="476"/> <source>Top Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="490"/> <source>Bottom Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="507"/> <source>Left Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="522"/> <source>Right Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="560"/> <source>Border Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="561"/> <source>Font Color</source> <translation type="unfinished">Цвет текÑта</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="562"/> <source>Background Color</source> <translation type="unfinished">Цвет фона</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="576"/> <source>Border Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="587"/> <source>Padding</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="597"/> <source>Top Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="606"/> <source>Bottom Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="615"/> <source>Left Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="624"/> <source>Right Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="636"/> <source>Horizontal Alignment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="641"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="642"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="643"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="644"/> <source>Center</source> <translation type="unfinished">По центру</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="676"/> <source>Solid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="677"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="678"/> <source>Dotted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="679"/> <source>Dashed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="680"/> <source>Double</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="681"/> <source>Ridge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="682"/> <source>Inset</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="683"/> <source>Outset</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagEditorNewTag</name> <message> <location filename="../gui/browserWidgets/tageditornewtag.cpp" line="55"/> <source>Click to add tag...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagProperties</name> <message> <location filename="../dialog/tagproperties.cpp" line="36"/> <source>Tag</source> <translation type="unfinished">Метка</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished">ИмÑ</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="48"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="50"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="102"/> <source>Add Tag</source> <translation type="unfinished">Добавить метку</translation> </message> </context> <context> <name>ThumbnailPreferences</name> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="14"/> <source>Disable thumbnail generation</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="15"/> <source>Images to generate per interval</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="16"/> <source>Minimum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="17"/> <source>Maximum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>UrlEditor</name> <message> <location filename="../gui/browserWidgets/urleditor.cpp" line="45"/> <source>Click to set source URL...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>WatchFolderAdd</name> <message> <location filename="../dialog/watchfolderadd.cpp" line="47"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="51"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="55"/> <source>Directory</source> <translation type="unfinished">Папка</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="63"/> <source>Keep</source> <translation type="unfinished">ОÑтавить</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="64"/> <source>Delete</source> <translation type="unfinished">Удалить</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="90"/> <source>Notebook</source> <translation type="unfinished">Блокнот</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="92"/> <source>After import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="94"/> <source>Include subdirectories</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="101"/> <source>Add Import Folder</source> <translation type="unfinished">Добавить папку Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°</translation> </message> </context> <context> <name>WatchFolderDialog</name> <message> <location filename="../dialog/watchfolderdialog.cpp" line="38"/> <source>OK</source> <translation type="unfinished">OK</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="42"/> <source>Cancel</source> <translation type="unfinished">Отмена</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="50"/> <source>Auto Import Folders</source> <translation type="unfinished">Импорт папок</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="62"/> <source>Add</source> <translation type="unfinished">Добавить</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="66"/> <source>Edit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="71"/> <location filename="../dialog/watchfolderdialog.cpp" line="162"/> <source>Delete</source> <translation type="unfinished">Удалить</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="112"/> <source>Directory</source> <translation type="unfinished">Папка</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="113"/> <source>Target Notebook</source> <translation type="unfinished">Блокнот</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="114"/> <location filename="../dialog/watchfolderdialog.cpp" line="159"/> <source>Keep</source> <translation type="unfinished">ОÑтавить</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="115"/> <source>Include Subdirectories</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="169"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="172"/> <source>No</source> <translation type="unfinished"></translation> </message> </context> </TS> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/translations/nixnote2_sk.ts����������������������������������������������������������0000664�0000000�0000000�00000615170�13156041044�0020625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="sk_SK"> <context> <name>AboutDialog</name> <message> <location filename="../dialog/aboutdialog.cpp" line="36"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/aboutdialog.cpp" line="53"/> <source>Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountDialog</name> <message> <location filename="../dialog/accountdialog.cpp" line="37"/> <source>Account Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="40"/> <source>Normal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="46"/> <source>Premium</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="48"/> <source>VIP</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="50"/> <source>Manager</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="52"/> <source>Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="54"/> <source>Admin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="75"/> <source> Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="79"/> <source> KB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="83"/> <source> MB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="90"/> <source>Account:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="93"/> <source>User Name:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="95"/> <source>Account Type:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="97"/> <source>Limit:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="99"/> <source>Uploaded In This Period:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="103"/> <source>Less than 1MB</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="104"/> <source>Current Cycle Ends:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="112"/> <source>OK</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AccountMaintenanceDialog</name> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="34"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="35"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="36"/> <source>Add</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="37"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="38"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="64"/> <source>User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="104"/> <source>Are you sure you want to delete this account?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="105"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="117"/> <source>You cannot delete the active account.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="170"/> <location filename="../dialog/accountmaintenancedialog.cpp" line="194"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> </context> <context> <name>AddNote</name> <message> <location filename="../cmdtools/addnote.cpp" line="33"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AddUserAccountDialog</name> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="38"/> <source>Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="39"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="41"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="46"/> <source>Account Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="69"/> <source>Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="70"/> <source>Yinxiang Biji</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="71"/> <source>Evernote Sandbox</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AppearancePreferences</name> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="39"/> <source>Show tray icon</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="40"/> <source>Display PDFs inline**</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="41"/> <source>Show splash screen on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="42"/> <source>Start automatically at login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="43"/> <source>Confirm Deletes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="44"/> <source>Show missed reminders on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="45"/> <source>Always Start minimized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="46"/> <source>Show notebook and tag totals</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="47"/> <source>Auto-Hide editor toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="49"/> <source>Disable note editing on statup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="50"/> <source>Focus on Note Title on New Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="51"/> <source>Limit Editor to Web Fonts*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="53"/> <source>Show note list grid*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="54"/> <source>Alternate note list colors*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="55"/> <source>Set author on new notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="57"/> <source>Preview fonts in editor dialag*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="61"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="68"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="75"/> <source>Do Nothing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="62"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="69"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="76"/> <source>Show/Hide NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="63"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="70"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="77"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="64"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="71"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="78"/> <source>New Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="65"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="72"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="79"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="82"/> <source>Open New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="83"/> <source>Open New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="98"/> <source>Qt Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="99"/> <source>notify-send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="106"/> <source>Startup Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="108"/> <source>Restore Selection Criteria</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="109"/> <source>Select Default Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="110"/> <source>View All Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="120"/> <source>Minimize to tray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="121"/> <source>Close to tray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="143"/> <source>Notification Service</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="146"/> <source>Middle Click Open Behavior</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="149"/> <source>Tray Icon Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="152"/> <source>Tray Icon Middle Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="155"/> <source>Tray Icon Double Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="158"/> <source>Default GUI Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="161"/> <source>Default GUI Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="164"/> <source>Default Editor Font*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="167"/> <source>Default Editor Font Size*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="171"/> <source>* May require restart on some systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="172"/> <source>** Can crash on Gnome systems.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="102"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="405"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="423"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="442"/> <source>System Default</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AttachmentIconBuilder</name> <message> <location filename="../html/attachmenticonbuilder.cpp" line="74"/> <source>Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/attachmenticonbuilder.cpp" line="78"/> <source>KB</source> <translation type="unfinished"></translation> </message> </context> <context> <name>AuthorEditor</name> <message> <location filename="../gui/browserWidgets/authoreditor.cpp" line="37"/> <source>Click to set author</source> <translation type="unfinished"></translation> </message> </context> <context> <name>BatchImport</name> <message> <location filename="../xml/batchimport.cpp" line="112"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CloseNotebookDialog</name> <message> <location filename="../dialog/closenotebookdialog.cpp" line="37"/> <source>Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="42"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="43"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="56"/> <source>Open Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="57"/> <source>Closed Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="59"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="60"/> <source>Close</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CmdLineQuery</name> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="67"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="69"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="72"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="75"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="78"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="81"/> <source>Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="84"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="87"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="90"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="93"/> <source>Todo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="96"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="99"/> <source>Reminder Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="181"/> <location filename="../cmdtools/cmdlinequery.cpp" line="190"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="183"/> <location filename="../cmdtools/cmdlinequery.cpp" line="188"/> <source>Yes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CmdLineTool</name> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="56"/> <source>Unable to attach to shared memory segment. Is the other NixNote running? </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="315"/> <location filename="../cmdtools/cmdlinetool.cpp" line="452"/> <source> has been created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="318"/> <source>No response from NixNote. Please verify that the note was created. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="332"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="535"/> <source> was not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="538"/> <location filename="../cmdtools/cmdlinetool.cpp" line="609"/> <source> has been appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="541"/> <source>No response from NixNote. Please verify that the note was appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="552"/> <source> was not found. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="221"/> <location filename="../cmdtools/cmdlinetool.cpp" line="654"/> <source>No response received from NixNote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="156"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="663"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="674"/> <location filename="../cmdtools/cmdlinetool.cpp" line="690"/> <location filename="../cmdtools/cmdlinetool.cpp" line="722"/> <location filename="../cmdtools/cmdlinetool.cpp" line="742"/> <source>This cannot be done with NixNote running.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="732"/> <location filename="../cmdtools/cmdlinetool.cpp" line="752"/> <source>Notebook not found: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="765"/> <source>OAuth token not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="783"/> <source>Error synchronizing with Evernote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="786"/> <source>Sync completed.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ColorSettings</name> <message> <location filename="../settings/colorsettings.cpp" line="37"/> <source>White</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="38"/> <source>Red</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="39"/> <source>Blue</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="40"/> <source>Green</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="41"/> <source>Yellow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="42"/> <source>Black</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="43"/> <source>Purple</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="44"/> <source>Brown</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="45"/> <source>Orange</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="46"/> <source>Grey</source> <translation type="unfinished"></translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="47"/> <source>Powder Blue</source> <translation type="unfinished"></translation> </message> </context> <context> <name>CommunicationManager</name> <message> <location filename="../communication/communicationmanager.cpp" line="675"/> <source>Linked notebook notestore URL missing.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source>API rate limit exceeded. Please try again in </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <source> minutes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source> minute.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1206"/> <source>EDAMSystemException </source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1208"/> <source>EDAMSystemException: Unknown error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1232"/> <source>EDAMNotFoundException: Note not found</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DatabaseStatus</name> <message> <location filename="../dialog/databasestatus.cpp" line="35"/> <source>Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="47"/> <source>Total Notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="49"/> <source>Total Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="51"/> <source>Unindexed Notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="53"/> <source>Unindexed Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="55"/> <source>Thumbnails Needed:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="60"/> <source>OK</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DateDelegate</name> <message> <location filename="../gui/datedelegate.cpp" line="42"/> <source>Today</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DateEditor</name> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="38"/> <source>Created:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="42"/> <source>Updated:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="46"/> <source>Subject:</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DebugPreferences</name> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="38"/> <source>Disable image search highlighting.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="35"/> <source>Strict note checking.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="37"/> <source>Disable uploads to server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="39"/> <source>Show LID column (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="40"/> <source>Disable Tag Sorting (useful for non-ASCII sort bug).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="41"/> <source>Force UTF8 Encoding.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="59"/> <source>Intercept Unix SIGHUP (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="64"/> <source>Use multipe theads to save note contents (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="68"/> <source>Use libtidy directly (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="72"/> <source>Auto-Save Interval (in seconds).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="79"/> <source>Message Level</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="82"/> <source>Trace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="83"/> <source>Debug</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="84"/> <source>Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="85"/> <source>Warnings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="86"/> <source>Errors</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="87"/> <source>Fatal</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EditorButtonBar</name> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="37"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="133"/> <source>Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="38"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="137"/> <source>Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="39"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="142"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="40"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="41"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="150"/> <source>Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="42"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="153"/> <source>Remove Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="43"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="159"/> <source>Bold</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="44"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="166"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="167"/> <source>Italics</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="45"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="184"/> <source>Superscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="46"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="188"/> <source>Subscript</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="47"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="174"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="175"/> <source>Underline</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="48"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="180"/> <source>Strikethrough</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="49"/> <source>Align Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="50"/> <source>Align Center</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="51"/> <source>Align Full</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="52"/> <source>Align Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="53"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="208"/> <source>Horizontal Line</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="54"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="55"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="220"/> <source>Shift Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="56"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="224"/> <source>Shift Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="57"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="228"/> <source>Bullet List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="58"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="232"/> <source>Number List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="59"/> <source>Font</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="60"/> <source>Font Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="61"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="248"/> <source>Font Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="62"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="257"/> <source>Highlight</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="63"/> <source>To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="192"/> <source>Center Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="196"/> <source>Fully Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="214"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="215"/> <source>Insert Date & Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="262"/> <source>Todo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="64"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="266"/> <source>Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="65"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="270"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="66"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="204"/> <source>Left Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="200"/> <source>Right Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="274"/> <source>Insert HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="661"/> <source>Times</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailDialog</name> <message> <location filename="../dialog/emaildialog.cpp" line="36"/> <source>Send Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="38"/> <source>Send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="39"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="51"/> <source>To:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="53"/> <source>BCC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="55"/> <source>CC:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="57"/> <source>Subject:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="59"/> <source>Note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="77"/> <source>CC me on this email</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailNote</name> <message> <location filename="../cmdtools/emailnote.cpp" line="261"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="327"/> <source>Connection Error: Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="333"/> <source>Login Error : Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="338"/> <source>Send Error : Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="344"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailPreferences</name> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="17"/> <source>SMTP Server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="18"/> <source>Server Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="19"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="20"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="21"/> <source>Sender Display Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="22"/> <source>Sender Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="23"/> <source>Connection Type</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="31"/> <source>Plain Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="32"/> <source>SSL Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="33"/> <source>TLS Connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="35"/> <source>Send Test Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="108"/> <location filename="../dialog/preferences/emailpreferences.cpp" line="113"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="109"/> <source>You must specify a SMTP server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="114"/> <source>You must specify a sender email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="146"/> <source>Test Email From NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="152"/> <source><h1>This is a test email from NixNote.</h1> </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="153"/> <source>If you are reading it then your email preferences are are setup properly.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message Sent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message sent.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnCryptDialog</name> <message> <location filename="../dialog/encryptdialog.cpp" line="31"/> <source>Encrypt Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="47"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="49"/> <source>Verify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="51"/> <source>Hint</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="53"/> <source>Remember Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="61"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="65"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="113"/> <source>Password must be at least 4 characters</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="117"/> <source>Passwords do not match</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="121"/> <source>Hint must be entered</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnDecryptDialog</name> <message> <location filename="../dialog/endecryptdialog.cpp" line="35"/> <source>Decrypt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="51"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="52"/> <source>Hint</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="59"/> <source>Permanently Decrypt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="61"/> <source>Remember Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="66"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="70"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExportData</name> <message> <location filename="../xml/exportdata.cpp" line="54"/> <source>Cannot open file.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="62"/> <source>Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="81"/> <source>Backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="114"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="151"/> <source>Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="360"/> <source>Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="405"/> <source>Linked Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="448"/> <source>Shared Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="508"/> <source>Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="725"/> <source>Backup Canceled</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExternalBrowse</name> <message> <location filename="../gui/externalbrowse.cpp" line="32"/> <source>NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/externalbrowse.cpp" line="124"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExtractNotes</name> <message> <location filename="../cmdtools/extractnotes.cpp" line="41"/> <location filename="../cmdtools/extractnotes.cpp" line="82"/> <source>Output file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="64"/> <source>Deleting notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="65"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FavoritesView</name> <message> <location filename="../gui/favoritesview.cpp" line="68"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="90"/> <source>Remove from shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="565"/> <source>Are you sure you want to remove this shortcut?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="566"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>FileWatcher</name> <message> <location filename="../watcher/filewatcher.cpp" line="72"/> <source>Error removing file: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FindReplace</name> <message> <location filename="../gui/findreplace.cpp" line="46"/> <source>Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="47"/> <source>Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="48"/> <source>Match case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="57"/> <source>Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="58"/> <source>Replace all</source> <translation type="unfinished"></translation> </message> </context> <context> <name>HtmlEntitiesDialog</name> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="34"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="35"/> <source>Edit entries list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="36"/> <source>Save entities list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="71"/> <source>HTML Entities Selection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="206"/> <source>Comma separated list of HTML entities. See http://www.w3schools.com/charsets/ for list.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportData</name> <message> <location filename="../xml/importdata.cpp" line="59"/> <source>Imported Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="106"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="107"/> <location filename="../xml/importdata.cpp" line="119"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="130"/> <source>Importing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="131"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="133"/> <source>Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="134"/> <source>Restoring Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportEnex</name> <message> <location filename="../xml/importenex.cpp" line="40"/> <source>Imported Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="83"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="84"/> <location filename="../xml/importenex.cpp" line="94"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="101"/> <location filename="../xml/importenex.cpp" line="102"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportNotes</name> <message> <location filename="../cmdtools/importnotes.cpp" line="19"/> <source>Input file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/importnotes.cpp" line="24"/> <source>Input file not found.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLatexDialog</name> <message> <location filename="../dialog/insertlatexdialog.cpp" line="32"/> <source>Insert LaTeX Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="42"/> <source>Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="52"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLinkDialog</name> <message> <location filename="../dialog/insertlinkdialog.cpp" line="34"/> <source>Insert Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="45"/> <source>URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="54"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LineEdit</name> <message> <location filename="../gui/lineedit.cpp" line="39"/> <source>Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocalePreferences</name> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="37"/> <source>Date Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="40"/> <source>MM/dd/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="41"/> <source>MM/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="42"/> <source>M/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="43"/> <source>M/d/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="44"/> <source>dd/MM/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="45"/> <source>d/M/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="46"/> <source>dd/MM/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="47"/> <source>d/M/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="48"/> <source>yyyy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="49"/> <source>yy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="52"/> <source>Time Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="55"/> <source>HH:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="56"/> <source>HH:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="57"/> <source>HH:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="58"/> <source>HH:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="59"/> <source>hh:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="60"/> <source>hh:mm:ss a- </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="61"/> <source>h:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="62"/> <source>hh:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="63"/> <source>hh:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="64"/> <source>h:mm a - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationDialog</name> <message> <location filename="../dialog/locationdialog.cpp" line="33"/> <source>Location</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="40"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="42"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="44"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="49"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="52"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationEditor</name> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="42"/> <source>Click to set location...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="45"/> <source>Edit...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="46"/> <source>Clear</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="47"/> <source>View on map</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LogViewer</name> <message> <location filename="../dialog/logviewer.cpp" line="41"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="43"/> <source>Refresh</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="45"/> <source>Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="54"/> <source>Save Logs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>Save Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>NixNote Log (*.log);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LoginDialog</name> <message> <location filename="../dialog/logindialog.cpp" line="34"/> <source>NixNote Login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="43"/> <source>Userid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="44"/> <source>Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="52"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="56"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NAttributeTree</name> <message> <location filename="../gui/nattributetree.cpp" line="48"/> <source>Attributes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="129"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="132"/> <location filename="../gui/nattributetree.cpp" line="213"/> <source>Since</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="136"/> <location filename="../gui/nattributetree.cpp" line="173"/> <location filename="../gui/nattributetree.cpp" line="217"/> <location filename="../gui/nattributetree.cpp" line="254"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="140"/> <location filename="../gui/nattributetree.cpp" line="177"/> <location filename="../gui/nattributetree.cpp" line="221"/> <location filename="../gui/nattributetree.cpp" line="258"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="144"/> <location filename="../gui/nattributetree.cpp" line="181"/> <location filename="../gui/nattributetree.cpp" line="225"/> <location filename="../gui/nattributetree.cpp" line="262"/> <source>This week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="148"/> <location filename="../gui/nattributetree.cpp" line="185"/> <location filename="../gui/nattributetree.cpp" line="229"/> <location filename="../gui/nattributetree.cpp" line="266"/> <source>Last week</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="152"/> <location filename="../gui/nattributetree.cpp" line="189"/> <location filename="../gui/nattributetree.cpp" line="233"/> <location filename="../gui/nattributetree.cpp" line="270"/> <source>This Month</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="156"/> <location filename="../gui/nattributetree.cpp" line="193"/> <location filename="../gui/nattributetree.cpp" line="237"/> <location filename="../gui/nattributetree.cpp" line="274"/> <source>Last Month</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="160"/> <location filename="../gui/nattributetree.cpp" line="197"/> <location filename="../gui/nattributetree.cpp" line="241"/> <location filename="../gui/nattributetree.cpp" line="278"/> <source>This Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="164"/> <location filename="../gui/nattributetree.cpp" line="201"/> <location filename="../gui/nattributetree.cpp" line="245"/> <location filename="../gui/nattributetree.cpp" line="282"/> <source>Last Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="169"/> <location filename="../gui/nattributetree.cpp" line="250"/> <source>Before</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="210"/> <source>Last Modified</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="289"/> <source>Contains</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="292"/> <source>Images</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="296"/> <source>Audio</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="300"/> <source>Ink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="304"/> <source>Encrypted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="308"/> <source>To-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="312"/> <source>Unfinished to-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="316"/> <source>Finished to-do items</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="320"/> <source>PDF document</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="324"/> <source>Attachment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="328"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="332"/> <source>Uncompleted Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="336"/> <source>Future Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="341"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="344"/> <source>Emailed to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="348"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="352"/> <source>Web page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="356"/> <source>Mobile</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="360"/> <source>Another application</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NBrowserWindow</name> <message> <location filename="../gui/nbrowserwindow.cpp" line="521"/> <location filename="../gui/nbrowserwindow.cpp" line="3112"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="523"/> <location filename="../gui/nbrowserwindow.cpp" line="3114"/> <source>Tomorrow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="525"/> <location filename="../gui/nbrowserwindow.cpp" line="3116"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to Save</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to save this note. Either tidy isn't installed or the note is too complex to save.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="1808"/> <source>Insert Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>Unable Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>This is an ink note. Ink notes are not supported since Evernote has not published any specifications on them and I'm too lazy to figure them out by myself.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2240"/> <source>Edit Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2304"/> <source>Unable to create LaTeX image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2305"/> <source>Unable to create LaTeX image. Are you sure mimetex is installed?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2635"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2636"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2645"/> <source>Sending Email. Please be patient.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Unable to connect to host.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Login Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Unable to login.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Unable to send email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3159"/> <source>Decryption Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3160"/> <source>Unknown encryption method. Unable to decrypt.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3263"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3264"/> <source>Error Encrypting String. Please verify you have Java installed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Hunspell plugin not found or could not be loaded.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NMainMenuBar</name> <message> <location filename="../gui/nmainmenubar.cpp" line="60"/> <source>&File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="79"/> <source>Print this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="87"/> <source>Backup database to a file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="93"/> <source>Restore from a backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="113"/> <source>Import notes from an export file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="133"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="151"/> <source>Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="159"/> <source>Close the program</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="175"/> <source>&Edit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="78"/> <source>&Print Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="64"/> <source>Email Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="65"/> <source>Email a copy of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="71"/> <source>Print Preview Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="72"/> <source>Print preview of this note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="86"/> <source>&Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="92"/> <source>&Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="112"/> <source>&Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="140"/> <source>&Add Another User...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="144"/> <source>&User Account Maintenance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="150"/> <source>&Open/Close Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="158"/> <source>E&xit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="180"/> <source>&Undo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="184"/> <source>&Redo</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="190"/> <source>&Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="194"/> <source>C&opy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="198"/> <source>&Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="202"/> <source>Pas&te as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="206"/> <source>Remo&ve Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="212"/> <source>Select &All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="218"/> <source>F&ind and Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="220"/> <source>&Search Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="225"/> <source>&Reset Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="232"/> <source>&Find in Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="238"/> <source>Find &Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="243"/> <source>Find &Previous</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="250"/> <source>Replace &Within Note...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="260"/> <source>Preferences</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="268"/> <source>&View</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="273"/> <source>Wide Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="278"/> <source>Narrow Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="285"/> <source>&Show Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="289"/> <source>Note &History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="295"/> <source>&Presentation Mode</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="299"/> <source>Show &Left Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="306"/> <source>Show &Favorites</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="313"/> <source>Show &Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="320"/> <source>Show Ta&gs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="327"/> <source>Show Sa&ved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="341"/> <source>Show T&rash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="348"/> <source>Show N&ote List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="355"/> <source>Show Note &Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="364"/> <source>View Note &Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="368"/> <source>View &Toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="375"/> <source>View Status&bar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="391"/> <source>New &Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="396"/> <source>New &Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="401"/> <source>Dupl&icate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="406"/> <source>&Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="411"/> <source>Reindex Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="418"/> <source>&Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="427"/> <source>&Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="432"/> <source>&UnPin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="446"/> <source>&Synchronize</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="447"/> <source>Synchronize with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="452"/> <source>&Disconnect</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="460"/> <source>Pause &Indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="461"/> <source>Temporarily pause indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="468"/> <source>Disable &Editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="469"/> <source>Temporarily disable note editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="476"/> <source>A&ccount</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="490"/> <source>&Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="514"/> <source>&User's Guide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="537"/> <source>Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="538"/> <source>View currentt shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="547"/> <source>Github Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="548"/> <source>Goto the NixNote2 Github project page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="585"/> <source>About &Qt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="625"/> <source>Theme</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="386"/> <source>&Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="100"/> <source>&Export to NixNote Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="101"/> <source>Export selected notes to a NNEX file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="106"/> <source>&Export Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="107"/> <source>Export selected notes to a PDF file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="441"/> <source>&Tools</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="453"/> <source>Disconnect from Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="477"/> <source>Account information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="484"/> <source>&Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="485"/> <source>Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="491"/> <source>Reindex all notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="499"/> <source>&Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="500"/> <source>Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="509"/> <source>&Help</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="515"/> <source>Open the user manual.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="542"/> <source>Message &Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="554"/> <source>&Evernote Account Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="559"/> <source>Evernote &Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="568"/> <source>Evernote &Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="573"/> <source>Evernote User &Forum</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="580"/> <source>&About</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="634"/> <source>System Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="543"/> <source>View current program messages</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="334"/> <source>Show &Attribute Filter</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="520"/> <source>Theme &Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="521"/> <source>View information about the current theme.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="555"/> <source>Go to your Evernote account page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="560"/> <source>Go to Evernote's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="562"/> <source>Yinxiang Biji Support</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="563"/> <source>Go to Yinxiang Biji's support page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="569"/> <source>Go to Evernote Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="574"/> <source>Go to the Evernote user support forum.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="581"/> <location filename="../gui/nmainmenubar.cpp" line="586"/> <source>About</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NNotebookView</name> <message> <location filename="../gui/nnotebookview.cpp" line="69"/> <source>Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="86"/> <source>Create New Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="95"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="103"/> <source>Add to stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="116"/> <source>Create New stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="119"/> <source>Remove from stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="123"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="131"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="641"/> <source>Are you sure you want to delete this notebook?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="642"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>New Stack (</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NSearchView</name> <message> <location filename="../gui/nsearchview.cpp" line="65"/> <source>Saved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="74"/> <source>Create Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="83"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="90"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="94"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="404"/> <source>Are you sure you want to delete this saved search?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="405"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTabWidget</name> <message> <location filename="../gui/ntabwidget.cpp" line="254"/> <location filename="../gui/ntabwidget.cpp" line="262"/> <source>Untitled Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntabwidget.cpp" line="267"/> <location filename="../gui/ntabwidget.cpp" line="334"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableView</name> <message> <location filename="../gui/ntableview.cpp" line="203"/> <source>Open Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="209"/> <source>Open Note In New Tab</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="215"/> <source>Open Note In New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="222"/> <source>Add Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="227"/> <source>Delete Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="238"/> <source>Restore Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="244"/> <source>Copy Note Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="249"/> <source>Duplicate Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="254"/> <source>Reminders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="258"/> <source>Remove</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="263"/> <source>Mark Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="269"/> <source>Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="274"/> <source>Unpin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="279"/> <source>Merge Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="285"/> <source>Create Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="291"/> <source>Title Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="296"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="301"/> <source>White</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="304"/> <source>Red</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="307"/> <source>Blue</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="310"/> <source>Green</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="313"/> <source>Yellow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="316"/> <source>Black</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="319"/> <source>Gray</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="322"/> <source>Cyan</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="325"/> <source>Magenta</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="663"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="666"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="672"/> <source>selected note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="677"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="942"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="943"/> <source>This note has never been synchronized. Using this in a note link can cause problems unless you synchronize it first.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1319"/> <source>Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1370"/> <source>One or more notes are unsynchronized. This can cause issues if they are later synchronized. Do you wish to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1654"/> <source>Note LID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1657"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1660"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1663"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1666"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1668"/> <location filename="../gui/ntableview.cpp" line="1676"/> <location filename="../gui/ntableview.cpp" line="1682"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1670"/> <location filename="../gui/ntableview.cpp" line="1674"/> <location filename="../gui/ntableview.cpp" line="1680"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1672"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1678"/> <source>Has To-Do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1684"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1687"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1690"/> <source>Date Deleted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1698"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1706"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1710"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1719"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1728"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1737"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1740"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1743"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1746"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1754"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableViewHeader</name> <message> <location filename="../gui/ntableviewheader.cpp" line="42"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="47"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="52"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="57"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="62"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="67"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="72"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="77"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="82"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="87"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="92"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="97"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="102"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="107"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="112"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="117"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="122"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="128"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="133"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="138"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="143"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTagView</name> <message> <location filename="../gui/ntagview.cpp" line="67"/> <location filename="../gui/ntagview.cpp" line="156"/> <source>Tags from Personal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="91"/> <source>Create New Tag</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="100"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="107"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="110"/> <source>Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="113"/> <source>Hide Unassigned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="119"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="154"/> <source>Tags from </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="351"/> <source>-<Missing Tag>-</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="706"/> <source>Are you sure you want to merge these tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="707"/> <source>Verify Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="753"/> <source>Are you sure you want to delete this tag?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="755"/> <source>Are you sure you want to delete all selected tags?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="756"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTitleEditor</name> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="123"/> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="137"/> <source>Untitled note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="134"/> <source>untitled note</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTrashTree</name> <message> <location filename="../gui/ntrashtree.cpp" line="53"/> <source>Trash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="65"/> <source>Restore Deleted Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="68"/> <source>Empty Trash</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="238"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="239"/> <source>Are you sure you want to permanently delete these notes?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NWebView</name> <message> <location filename="../gui/nwebview.cpp" line="56"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="61"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="66"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="71"/> <source>Paste</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="76"/> <source>Paste as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="81"/> <source>Remove Formatting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="86"/> <source>Copy Note URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="93"/> <source>Background Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="113"/> <source>To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="120"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="127"/> <source>Encrypted Selected Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="132"/> <source>Insert Date && Time</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="137"/> <source>Insert Hyperlink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="142"/> <source>Quick Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="147"/> <source>Remove Hyperlink</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="152"/> <source>Attach File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="158"/> <source>Insert LaTeX Formula</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="164"/> <source>Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="167"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="173"/> <source>Insert Row</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="178"/> <source>Insert Column</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="185"/> <source>Delete Row</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="189"/> <source>Delete Column</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="196"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="203"/> <source>Image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="206"/> <source>Save Image</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="214"/> <source>Rotate Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="218"/> <source>Rotate Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="224"/> <source>Save Attachment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="502"/> <location filename="../gui/nwebview.cpp" line="532"/> <source>Save File</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NixNote</name> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy Not Found</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy is not found on this system. Until tidy is installed you cannot save any notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="291"/> <source>ToolBar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="303"/> <source>Back</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="304"/> <source>Next</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="314"/> <source>All Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="316"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="319"/> <source>Print</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="329"/> <source>New Text Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="332"/> <source>New Webcam Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="344"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="347"/> <source>Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="349"/> <source>Usage</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="531"/> <location filename="../nixnote.cpp" line="3183"/> <source>Screen Capture</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="547"/> <source>Show/Hide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="559"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1799"/> <source>Confirm Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1815"/> <source>Restore Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1818"/> <source>Import Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1730"/> <location filename="../nixnote.cpp" line="1816"/> <source>NixNote Export (*.nnex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="320"/> <source>Print the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="322"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="323"/> <source>Email the current note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="528"/> <source>Quick Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="538"/> <source>Shortcut Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="540"/> <source>Pinned Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="542"/> <source>Recently Updated Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1437"/> <location filename="../nixnote.cpp" line="2350"/> <source>Log in to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1439"/> <location filename="../nixnote.cpp" line="2352"/> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <location filename="../nixnote.cpp" line="1761"/> <location filename="../nixnote.cpp" line="1857"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <source>No notes selected.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1722"/> <source>Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1724"/> <source>Export Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1749"/> <source>Performing backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1751"/> <source>Performing export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1768"/> <source>Database backup complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1770"/> <source>Note extract complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1796"/> <source>This is used to restore a database from backups. It is HIGHLY recommended that this only be used to populate an empty database. Restoring into a database that already has data can cause problems. Are you sure you want to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1819"/> <source>NixNote Export (*.nnex);;Evernote Export (*.enex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1846"/> <source>Restoring database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1848"/> <source>Importing Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1880"/> <source>Database has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1882"/> <source>Notes have been imported.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <location filename="../nixnote.cpp" line="1918"/> <source>Sync Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <source>Sync completed with errors.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1918"/> <source>Sync error. See message log for details</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync Complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync completed successfully.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2002"/> <source>Untitled note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>Unsynchronized Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>This note has never been synchronized with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3872"/> <source>Error loading Webcam plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3887"/> <source>Error loading Hunspell plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3913"/> <location filename="../nixnote.cpp" line="3965"/> <source>PDF Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>Export complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3937"/> <source>Exporting Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3938"/> <source>Exporting notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2391"/> <location filename="../nixnote.cpp" line="2398"/> <source>Error retrieving note.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2392"/> <location filename="../nixnote.cpp" line="2399"/> <source>Error retrieving note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <location filename="../nixnote.cpp" line="2431"/> <source>Note Restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <source>A new copy has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2431"/> <source>Note successfully restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2434"/> <source>Note restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2650"/> <source>Note not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3054"/> <source>Switch to </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex the entire database?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3247"/> <source>Notes will be reindexed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Webcam plugin not found or could not be loaded</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3281"/> <source>Unable to find webcam or capture image.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3282"/> <source>Webcam Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3432"/> <source>Note Reindexed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3444"/> <source>Delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3447"/> <source>Permanently delete </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3451"/> <source>this note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3455"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3816"/> <source>Press ESC to exit.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteFormatter</name> <message> <location filename="../html/noteformatter.cpp" line="657"/> <source>File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/noteformatter.cpp" line="691"/> <source>Bytes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../html/noteformatter.cpp" line="695"/> <source>KB</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteHistorySelect</name> <message> <location filename="../dialog/notehistoryselect.cpp" line="32"/> <source>Note History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="33"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="34"/> <source>Import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="39"/> <source>Replace current note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="80"/> <source>Current copy on Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="93"/> <source>Today</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="95"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NoteProperties</name> <message> <location filename="../dialog/noteproperties.cpp" line="37"/> <source>Note Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/noteproperties.cpp" line="38"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NotebookProperties</name> <message> <location filename="../dialog/notebookproperties.cpp" line="38"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="42"/> <source>Synchronized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="46"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="52"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="60"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="62"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="135"/> <source>Add Notebook</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OAuthWindow</name> <message> <location filename="../oauth/oauthwindow.cpp" line="70"/> <source>Please Grant NixNote Access</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="81"/> <source>SSL Support not found. Aborting connection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="132"/> <source>Error receiving temporary credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="176"/> <source>Error receiving permanent credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="219"/> <source>Error receiving authorization</source> <translation type="unfinished"></translation> </message> </context> <context> <name>PopplerViewer</name> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source>Page </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source> of </source> <translation type="unfinished"></translation> </message> </context> <context> <name>PreferencesDialog</name> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="30"/> <source>User Settings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="49"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="50"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="92"/> <source>Appearance</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="98"/> <source>Locale</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="104"/> <source>Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="110"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="116"/> <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="121"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="127"/> <source>Advanced</source> <translation type="unfinished"></translation> </message> </context> <context> <name>QApplication</name> <message> <location filename="../dialog/screencapture.cpp" line="108"/> <source>Use your mouse to draw a rectangle to screenshot or exit pressing any key or using the right or middle mouse buttons.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/screencapture.cpp" line="145"/> <source>%1 x %2 pixels </source> <translation type="unfinished"></translation> </message> </context> <context> <name>QObject</name> <message> <location filename="../gui/ntableview.cpp" line="175"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="176"/> <source>Author</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="177"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="178"/> <source>Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="179"/> <source>Date Created</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="180"/> <source>Date Updated</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="181"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="182"/> <source>Deletion Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="183"/> <source>Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="184"/> <source>Reminder Due</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="185"/> <source>Reminder Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="186"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="187"/> <source>Source URL</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="188"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="189"/> <source>Longitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="190"/> <source>Latitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="191"/> <source>Altitude</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="192"/> <source>Has Encryption</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="193"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="194"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="195"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="196"/> <source>Thumbnail</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="197"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderButton</name> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="35"/> <source>Mark as Done</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="36"/> <source>Change Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="37"/> <source>Clear Reminder</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderManager</name> <message> <location filename="../reminders/remindermanager.cpp" line="85"/> <source>Reminders Due</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderSetDialog</name> <message> <location filename="../dialog/remindersetdialog.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/remindersetdialog.cpp" line="48"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>RemoteQuery</name> <message> <location filename="../filters/remotequery.cpp" line="113"/> <location filename="../filters/remotequery.cpp" line="130"/> <source>Today</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SavedSearchProperties</name> <message> <location filename="../dialog/savedsearchproperties.cpp" line="35"/> <source>Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="43"/> <source>Query</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="51"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="53"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="106"/> <source>Add Saved Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SearchPreferences</name> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="36"/> <source>Index Attachments</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="44"/> <source>Clear Notebook Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="48"/> <source>Clear Tag Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="52"/> <source>Clear Search Text on Notebook Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="56"/> <source>Show Any Matching Tags When Selecting Multiple Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="60"/> <source>Index PDFs locally</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="64"/> <source>Background Indexing (requires restart & may cause issues on some systems)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="68"/> <source>Experimental: Force search to lower case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="73"/> <source>Minimum Image Recognition Weight</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ShortcutDialog</name> <message> <location filename="../dialog/shortcutdialog.cpp" line="41"/> <source>Defined Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/shortcutdialog.cpp" line="42"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SpellCheckDialog</name> <message> <location filename="../dialog/spellcheckdialog.cpp" line="35"/> <source>Spell Check</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="50"/> <source>Suggestion</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="56"/> <source>Replace</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="57"/> <source>Ignore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="58"/> <source>Ignore All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="59"/> <source>Add To Dictionary</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="66"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncPreferences</name> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="34"/> <source>Sync automatically</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="38"/> <source>Every 15 minutes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="39"/> <source>Every 30 minutes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="40"/> <source>Every hour</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="41"/> <source>Every day</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="43"/> <source>Sync on startup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="45"/> <source>Sync on shutdown</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="47"/> <source>Enable sync notifications</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="48"/> <source>Show successful syncs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="49"/> <source>Restart sync on API limit (experimental)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="51"/> <source>Enable Proxy*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="52"/> <source>Enable Socks5</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="53"/> <source>Proxy Hostname</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="54"/> <source>Proxy Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="55"/> <source>Proxy Username</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="56"/> <source>Proxy Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="57"/> <source>*Note: Restart required</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="73"/> <source>Popup message on sync errors.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncRunner</name> <message> <location filename="../threads/syncrunner.cpp" line="134"/> <source>Beginning Sync</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="142"/> <source>Downloading changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="192"/> <source>Sync Complete Successfully</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <location filename="../threads/syncrunner.cpp" line="267"/> <source>Download </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <source>% complete for notebooks, tags, & searches.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="247"/> <source>Download complete for notebooks, tags, & searches. Downloading notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="267"/> <source>% complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="280"/> <source>Download complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>Downloading </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <source>% complete for tags in shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="721"/> <source>Downloading notes for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="743"/> <source>% complete for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1149"/> <source>Error uploading note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1151"/> <source>Error uploading note with a missing title!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="721"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TableDialog</name> <message> <location filename="../dialog/tabledialog.cpp" line="30"/> <source>Insert Table</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="34"/> <source>Percent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="35"/> <source>Pixels</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="51"/> <source>Rows</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="53"/> <source>Columns</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="55"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="57"/> <source>Unit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="64"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="67"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TablePropertiesDialog</name> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="72"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="105"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="86"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="87"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="106"/> <source>Cell Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="214"/> <source>Row 1 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="216"/> <source>Row 1 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="218"/> <source>Row 1 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="220"/> <source>Row 2 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="222"/> <source>Row 2 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="224"/> <source>Row 2 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="226"/> <source>Row 3 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="228"/> <source>Row 3 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="230"/> <source>Row 3 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="456"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="464"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="480"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="494"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="511"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="526"/> <source>Percent</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="465"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="479"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="493"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="510"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="525"/> <source>Pixels</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="476"/> <source>Top Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="490"/> <source>Bottom Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="507"/> <source>Left Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="522"/> <source>Right Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="560"/> <source>Border Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="561"/> <source>Font Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="562"/> <source>Background Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="576"/> <source>Border Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="587"/> <source>Padding</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="597"/> <source>Top Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="606"/> <source>Bottom Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="615"/> <source>Left Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="624"/> <source>Right Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="636"/> <source>Horizontal Alignment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="641"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="642"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="643"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="644"/> <source>Center</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="676"/> <source>Solid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="677"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="678"/> <source>Dotted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="679"/> <source>Dashed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="680"/> <source>Double</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="681"/> <source>Ridge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="682"/> <source>Inset</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="683"/> <source>Outset</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagEditorNewTag</name> <message> <location filename="../gui/browserWidgets/tageditornewtag.cpp" line="55"/> <source>Click to add tag...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagProperties</name> <message> <location filename="../dialog/tagproperties.cpp" line="36"/> <source>Tag</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="42"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="48"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="50"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="102"/> <source>Add Tag</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ThumbnailPreferences</name> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="14"/> <source>Disable thumbnail generation</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="15"/> <source>Images to generate per interval</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="16"/> <source>Minimum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="17"/> <source>Maximum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>UrlEditor</name> <message> <location filename="../gui/browserWidgets/urleditor.cpp" line="45"/> <source>Click to set source URL...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>WatchFolderAdd</name> <message> <location filename="../dialog/watchfolderadd.cpp" line="47"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="51"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="55"/> <source>Directory</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="63"/> <source>Keep</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="64"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="90"/> <source>Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="92"/> <source>After import</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="94"/> <source>Include subdirectories</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="101"/> <source>Add Import Folder</source> <translation type="unfinished"></translation> </message> </context> <context> <name>WatchFolderDialog</name> <message> <location filename="../dialog/watchfolderdialog.cpp" line="38"/> <source>OK</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="42"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="50"/> <source>Auto Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="62"/> <source>Add</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="66"/> <source>Edit</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="71"/> <location filename="../dialog/watchfolderdialog.cpp" line="162"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="112"/> <source>Directory</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="113"/> <source>Target Notebook</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="114"/> <location filename="../dialog/watchfolderdialog.cpp" line="159"/> <source>Keep</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="115"/> <source>Include Subdirectories</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="169"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="172"/> <source>No</source> <translation type="unfinished"></translation> </message> </context> </TS> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/translations/nixnote2_zh_CN.ts�������������������������������������������������������0000664�0000000�0000000�00000617661�13156041044�0021220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="zh_CN"> <context> <name>AboutDialog</name> <message> <location filename="../dialog/aboutdialog.cpp" line="36"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/aboutdialog.cpp" line="53"/> <source>Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available.</source> <translation><span align="center"><p>简体中文翻译:Aten Zhang, 2016ï¼›<br>Boyuan Yang, 2017。 有任何翻译缺失ã€BUG和改进æ„è§<br> 请å‘邮件到<i>atenzd@gmail.com</i>或å‘项目æäº¤é”™è¯¯æŠ¥å‘Šã€‚</p></span></translation> </message> </context> <context> <name>AccountDialog</name> <message> <location filename="../dialog/accountdialog.cpp" line="37"/> <source>Account Information</source> <translation>账户信æ¯</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="40"/> <source>Normal</source> <translation>å…è´¹</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="46"/> <source>Premium</source> <translatorcomment>Evernote has only two types of account, but yixiang note in China has three(Free, Standard and Premium).</translatorcomment> <translation>标准</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="48"/> <source>VIP</source> <translation>高级</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="50"/> <source>Manager</source> <translation>管ç†</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="52"/> <source>Support</source> <translation>支æŒ</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="54"/> <source>Admin</source> <translation>管ç†å‘˜</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="75"/> <source> Bytes</source> <translation> Bytes</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="79"/> <source> KB</source> <translation> KB</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="83"/> <source> MB</source> <translation> MB</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="90"/> <source>Account:</source> <translation>账户:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="93"/> <source>User Name:</source> <translation>用户å:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="95"/> <source>Account Type:</source> <translation>账户类型:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="97"/> <source>Limit:</source> <translation>æµé‡é™é¢ï¼š</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="99"/> <source>Uploaded In This Period:</source> <translation>本期已上传æµé‡ï¼š</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="103"/> <source>Less than 1MB</source> <translation>å°äºŽ1MB</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="104"/> <source>Current Cycle Ends:</source> <translation>æœ¬æœŸç»“æŸæ—¥æœŸï¼š</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="112"/> <source>OK</source> <translation>确定</translation> </message> </context> <context> <name>AccountMaintenanceDialog</name> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="34"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="35"/> <source>Close</source> <translation>关闭</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="36"/> <source>Add</source> <translation>添加</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="37"/> <source>Rename</source> <translation>é‡å‘½å</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="38"/> <source>Delete</source> <translation>删除</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="64"/> <source>User Account Maintenance</source> <translation>用户账户管ç†</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="104"/> <source>Are you sure you want to delete this account?</source> <translation>确定删除这个账户?</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="105"/> <source>Verify Delete</source> <translation>删除确认</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="117"/> <source>You cannot delete the active account.</source> <translation>ä¸èƒ½åˆ é™¤åœ¨ç”¨è´¦æˆ·ã€‚</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="170"/> <location filename="../dialog/accountmaintenancedialog.cpp" line="194"/> <source>Switch to </source> <translation>切æ¢åˆ°</translation> </message> </context> <context> <name>AddNote</name> <message> <location filename="../cmdtools/addnote.cpp" line="33"/> <source>Untitled Note</source> <translation>未命å笔记</translation> </message> </context> <context> <name>AddUserAccountDialog</name> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="38"/> <source>Server</source> <translation>æœåС噍</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="39"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="41"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="46"/> <source>Account Name</source> <translation>账户å</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="69"/> <source>Evernote</source> <translation>Evernote国际版</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="70"/> <source>Yinxiang Biji</source> <translation>å°è±¡ç¬”è®°</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="71"/> <source>Evernote Sandbox</source> <translation>Evernote沙盒</translation> </message> </context> <context> <name>AppearancePreferences</name> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="39"/> <source>Show tray icon</source> <translation>显示托盘图标</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="40"/> <source>Display PDFs inline**</source> <translation>行内显示PDF**</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="41"/> <source>Show splash screen on startup</source> <translation>å¯åŠ¨æ—¶æ˜¾ç¤ºæ¬¢è¿Žç•Œé¢</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="42"/> <source>Start automatically at login</source> <translation>系统登录时自动å¯åЍ</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="43"/> <source>Confirm Deletes</source> <translation>删除时确认</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="44"/> <source>Show missed reminders on startup</source> <translation>å¯åŠ¨æ—¶æ˜¾ç¤ºé”™è¿‡çš„æé†’事项</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="45"/> <source>Always Start minimized</source> <translation>å¯åŠ¨æ—¶æœ€å°åŒ–</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="46"/> <source>Show notebook and tag totals</source> <translation>显示笔记本和标签计数</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="47"/> <source>Auto-Hide editor toolbar</source> <translation>自动éšè—编辑工具æ </translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="49"/> <source>Disable note editing on statup</source> <translation>å¯åŠ¨æ—¶ç¦ç”¨ç¬”记编辑</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="50"/> <source>Focus on Note Title on New Note</source> <translation>新建笔记时光标ä½äºŽç¬”记标题</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="51"/> <source>Limit Editor to Web Fonts*</source> <translation>编辑器åªä½¿ç”¨Web字体*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="53"/> <source>Show note list grid*</source> <translation>显示笔记列表网格*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="54"/> <source>Alternate note list colors*</source> <translation>替æ¢ç¬”记列表颜色*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="55"/> <source>Set author on new notes.</source> <translation>新建笔记时自动设置作者</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="57"/> <source>Preview fonts in editor dialag*</source> <translation>åœ¨ç¼–è¾‘å¯¹è¯æ¡†å†…预览字体*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="61"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="68"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="75"/> <source>Do Nothing</source> <translation>æ— æ“作</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="62"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="69"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="76"/> <source>Show/Hide NixNote</source> <translation>显示/éšè— NixNote</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="63"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="70"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="77"/> <source>New Text Note</source> <translation>新建文本笔记</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="64"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="71"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="78"/> <source>New Quick Note</source> <translatorcomment>I got crash when click "New Quick Note", so I don't know what quick note really mean.</translatorcomment> <translation>新建快速笔记</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="65"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="72"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="79"/> <source>Screen Capture</source> <translation>å±å¹•截图</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="82"/> <source>Open New Tab</source> <translation>在新标签页打开</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="83"/> <source>Open New Window</source> <translation>åœ¨æ–°çª—å£æ‰“å¼€</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="98"/> <source>Qt Default</source> <translation>Qt 默认</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="99"/> <source>notify-send</source> <translation>notify-send</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="106"/> <source>Startup Behavior</source> <translation>å¯åŠ¨æ—¶</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="108"/> <source>Restore Selection Criteria</source> <translation>æ¢å¤ä¸Šæ¬¡æ‰“开笔记</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="109"/> <source>Select Default Notebook</source> <translation>打开默认笔记本</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="110"/> <source>View All Notebooks</source> <translation>æµè§ˆæ‰€æœ‰ç¬”记本</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="120"/> <source>Minimize to tray</source> <translation>最å°åŒ–到托盘</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="121"/> <source>Close to tray</source> <translation>关闭到托盘</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="143"/> <source>Notification Service</source> <translation>通知æœåŠ¡</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="146"/> <source>Middle Click Open Behavior</source> <translation>中键å•击笔记</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="149"/> <source>Tray Icon Click Action</source> <translation>å•击托盘图标</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="152"/> <source>Tray Icon Middle Click Action</source> <translation>中键å•击托盘图标</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="155"/> <source>Tray Icon Double Click Action</source> <translation>åŒå‡»æ‰˜ç›˜å›¾æ ‡</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="158"/> <source>Default GUI Font*</source> <translation>默认显示字体*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="161"/> <source>Default GUI Font Size*</source> <translation>默认显示字å·*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="164"/> <source>Default Editor Font*</source> <translation>默认编辑字体*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="167"/> <source>Default Editor Font Size*</source> <translation>默认编辑字å·*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="171"/> <source>* May require restart on some systems.</source> <translation>*在一些系统中å¯èƒ½éœ€è¦é‡å¯NixNoteæ‰èƒ½ç”Ÿæ•ˆã€‚</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="172"/> <source>** Can crash on Gnome systems.</source> <translation>** 在Gnome中å¯èƒ½ä¼šé€ æˆå´©æºƒã€‚</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="102"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="405"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="423"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="442"/> <source>System Default</source> <translation>系统默认</translation> </message> </context> <context> <name>AttachmentIconBuilder</name> <message> <location filename="../html/attachmenticonbuilder.cpp" line="74"/> <source>Bytes</source> <translation>Bytes</translation> </message> <message> <location filename="../html/attachmenticonbuilder.cpp" line="78"/> <source>KB</source> <translation>KB</translation> </message> </context> <context> <name>AuthorEditor</name> <message> <location filename="../gui/browserWidgets/authoreditor.cpp" line="37"/> <source>Click to set author</source> <translation>点击设置作者</translation> </message> </context> <context> <name>BatchImport</name> <message> <location filename="../xml/batchimport.cpp" line="112"/> <source>Untitled Note</source> <translation>未命å笔记</translation> </message> </context> <context> <name>CloseNotebookDialog</name> <message> <location filename="../dialog/closenotebookdialog.cpp" line="37"/> <source>Open/Close Notebooks</source> <translation>打开/关闭笔记本</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="42"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="43"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="56"/> <source>Open Notebooks</source> <translation>已打开笔记本</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="57"/> <source>Closed Notebooks</source> <translation>已关闭笔记本</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="59"/> <source>Open</source> <translation>打开</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="60"/> <source>Close</source> <translation>关闭</translation> </message> </context> <context> <name>CmdLineQuery</name> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="67"/> <source>ID</source> <translation>ID</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="69"/> <source>Title</source> <translation>标题</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="72"/> <source>Notebook</source> <translation>笔记本</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="75"/> <source>Tags</source> <translation>标签</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="78"/> <source>Created</source> <translation>创建时间</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="81"/> <source>Updated</source> <translation>æ›´æ–°æ—¶é—´</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="84"/> <source>Sync</source> <translation>åŒæ­¥</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="87"/> <source>Source URL</source> <translation>æ¥æºURL</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="90"/> <source>Author</source> <translation>作者</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="93"/> <source>Todo</source> <translation>待办事项</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="96"/> <source>Reminder Due</source> <translation>æé†’日期</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="99"/> <source>Reminder Done</source> <translation>æé†’完æˆ</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="181"/> <location filename="../cmdtools/cmdlinequery.cpp" line="190"/> <source>No</source> <translation>å¦</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="183"/> <location filename="../cmdtools/cmdlinequery.cpp" line="188"/> <source>Yes</source> <translation>是</translation> </message> </context> <context> <name>CmdLineTool</name> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="56"/> <source>Unable to attach to shared memory segment. Is the other NixNote running? </source> <translation>æ— æ³•è¿žæŽ¥åˆ°å…±äº«å†…å­˜æ®µã€‚æ˜¯å¦æœ‰å…¶å®ƒçš„ NixNote å®žä¾‹åœ¨åŒæ—¶è¿è¡Œï¼Ÿ</translation> </message> <message> <source>Type DELETE to very: </source> <translation type="vanished">输入 DELETE 以确认:</translation> </message> <message> <source>No resospnse received from NixNote.</source> <translation type="vanished">未收到NixNoteçš„å“应。</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="315"/> <location filename="../cmdtools/cmdlinetool.cpp" line="452"/> <source> has been created. </source> <translation>已创建。</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="318"/> <source>No response from NixNote. Please verify that the note was created. </source> <translation>NixNote未å“应,请检查笔记是å¦åˆ›å»ºã€‚</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="332"/> <source>Untitled Note</source> <translation>未命å笔记</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="535"/> <source> was not found.</source> <translation>未找到。</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="538"/> <location filename="../cmdtools/cmdlinetool.cpp" line="609"/> <source> has been appended. </source> <translation>已被附加。</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="541"/> <source>No response from NixNote. Please verify that the note was appended. </source> <translation>NixNote未å“应,请检查笔记是å¦å·²é™„加。</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="552"/> <source> was not found. </source> <translation>未找到。</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="221"/> <location filename="../cmdtools/cmdlinetool.cpp" line="654"/> <source>No response received from NixNote.</source> <translation>未收到NixNoteçš„å“应。</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="156"/> <source>Type DELETE to verify: </source> <translation>输入 DELETE 以确认:</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="663"/> <source>Note not found.</source> <translation>未找到笔记。</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="674"/> <location filename="../cmdtools/cmdlinetool.cpp" line="690"/> <location filename="../cmdtools/cmdlinetool.cpp" line="722"/> <location filename="../cmdtools/cmdlinetool.cpp" line="742"/> <source>This cannot be done with NixNote running.</source> <translation>无法在 NixNote 正在è¿è¡Œæ—¶å®Œæˆè¯¥æ“作。</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="732"/> <location filename="../cmdtools/cmdlinetool.cpp" line="752"/> <source>Notebook not found: </source> <translation>未找到笔记本:</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="765"/> <source>OAuth token not found.</source> <translation>OAuth å‡­è¯æœªæ‰¾åˆ°ã€‚</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="783"/> <source>Error synchronizing with Evernote.</source> <translation>与 Evernote åŒæ­¥å‡ºé”™ã€‚</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="786"/> <source>Sync completed.</source> <translation>åŒæ­¥å®Œæˆã€‚</translation> </message> </context> <context> <name>ColorSettings</name> <message> <location filename="../settings/colorsettings.cpp" line="37"/> <source>White</source> <translation>白色</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="38"/> <source>Red</source> <translation>红色</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="39"/> <source>Blue</source> <translation>è“色</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="40"/> <source>Green</source> <translation>绿色</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="41"/> <source>Yellow</source> <translation>黄色</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="42"/> <source>Black</source> <translation>黑色</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="43"/> <source>Purple</source> <translation>紫色</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="44"/> <source>Brown</source> <translation>棕色</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="45"/> <source>Orange</source> <translation>橙色</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="46"/> <source>Grey</source> <translation>ç°è‰²</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="47"/> <source>Powder Blue</source> <translation>æµ…è“</translation> </message> </context> <context> <name>CommunicationManager</name> <message> <location filename="../communication/communicationmanager.cpp" line="675"/> <source>Linked notebook notestore URL missing.</source> <translation>链接的笔记本缺失 notestore URL。</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source>API rate limit exceeded. Please try again in </source> <translation>API 调用频率超出é™åˆ¶ã€‚请在以下时间åŽé‡è¯•:</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <source> minutes.</source> <translation> 分钟。</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source> minute.</source> <translation> 分钟。</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1206"/> <source>EDAMSystemException </source> <translation>EDAMSystemException </translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1208"/> <source>EDAMSystemException: Unknown error</source> <translation>EDAMSystemException:未知错误</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1232"/> <source>EDAMNotFoundException: Note not found</source> <translation>EDAMNotFoundException:未找到笔记</translation> </message> </context> <context> <name>DatabaseStatus</name> <message> <location filename="../dialog/databasestatus.cpp" line="35"/> <source>Database Status</source> <translation>æ•°æ®åº“状æ€</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="47"/> <source>Total Notes:</source> <translation>总笔记数:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="49"/> <source>Total Resources:</source> <translatorcomment>What is the "resources" really mean?</translatorcomment> <translation>æ€»èµ„æºæ•°ï¼š</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="51"/> <source>Unindexed Notes:</source> <translation>未索引笔记:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="53"/> <source>Unindexed Resources:</source> <translation>未索引资æºï¼š</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="55"/> <source>Thumbnails Needed:</source> <translation>所需缩略图数:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="60"/> <source>OK</source> <translation>确定</translation> </message> </context> <context> <name>DateDelegate</name> <message> <location filename="../gui/datedelegate.cpp" line="42"/> <source>Today</source> <translation>今天</translation> </message> </context> <context> <name>DateEditor</name> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="38"/> <source>Created:</source> <translation>创建时间:</translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="42"/> <source>Updated:</source> <translation>æœ€åŽæ›´æ–°ï¼š</translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="46"/> <source>Subject:</source> <translation>主题:</translation> </message> </context> <context> <name>DebugPreferences</name> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="38"/> <source>Disable image search highlighting.</source> <translation>ç¦ç”¨å›¾åƒæœç´¢é«˜äº®ã€‚</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="35"/> <source>Strict note checking.</source> <translation>严格的笔记检查。</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="37"/> <source>Disable uploads to server.</source> <translation>ç¦ç”¨ä¸Šä¼ åˆ°æœåŠ¡å™¨ã€‚</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="39"/> <source>Show LID column (requires restart).</source> <translation>显示 LID 列(需è¦é‡å¯ï¼‰ã€‚</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="40"/> <source>Disable Tag Sorting (useful for non-ASCII sort bug).</source> <translation>ç¦ç”¨æ ‡ç­¾æŽ’åºï¼ˆå¯¹è§£å†³éž ASCII 字符排åºé—®é¢˜æœ‰å¸®åŠ©ï¼‰ã€‚</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="41"/> <source>Force UTF8 Encoding.</source> <translation>强制 UTF-8 ç¼–ç ã€‚</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="59"/> <source>Intercept Unix SIGHUP (requires restart).</source> <translation>拦截 UNIX SIGHUP(需è¦é‡æ–°å¯åŠ¨ï¼‰ã€‚</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="64"/> <source>Use multipe theads to save note contents (experimental).</source> <translation>使用多线程æ¥ä¿å­˜ç¬”记内容(实验性)。</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="68"/> <source>Use libtidy directly (experimental).</source> <translation>直接使用 libtidy(实验性)。</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="72"/> <source>Auto-Save Interval (in seconds).</source> <translation>自动ä¿å­˜é—´éš”(按秒计)。</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="79"/> <source>Message Level</source> <translation>消æ¯ç­‰çº§</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="82"/> <source>Trace</source> <translatorcomment>记录</translatorcomment> <translation>Trace</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="83"/> <source>Debug</source> <translatorcomment>查错</translatorcomment> <translation>Debug</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="84"/> <source>Info</source> <translatorcomment>ä¿¡æ¯</translatorcomment> <translation>Info</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="85"/> <source>Warnings</source> <translatorcomment>警告</translatorcomment> <translation>Warnings</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="86"/> <source>Errors</source> <translatorcomment>错误</translatorcomment> <translation>Errors</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="87"/> <source>Fatal</source> <translatorcomment>致命错误</translatorcomment> <translation>Fatal</translation> </message> </context> <context> <name>EditorButtonBar</name> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="37"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="133"/> <source>Undo</source> <translation>撤销</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="38"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="137"/> <source>Redo</source> <translation>é‡åš</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="39"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="142"/> <source>Cut</source> <translation>剪切</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="40"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="146"/> <source>Copy</source> <translation>å¤åˆ¶</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="41"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="150"/> <source>Paste</source> <translation>粘贴</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="42"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="153"/> <source>Remove Formatting</source> <translation>删除格å¼</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="43"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="159"/> <source>Bold</source> <translation>粗体</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="44"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="166"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="167"/> <source>Italics</source> <translation>斜体</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="45"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="184"/> <source>Superscript</source> <translation>上标</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="46"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="188"/> <source>Subscript</source> <translation>下标</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="47"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="174"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="175"/> <source>Underline</source> <translation>下划线</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="48"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="180"/> <source>Strikethrough</source> <translation>删除线</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="49"/> <source>Align Left</source> <translation>居左对é½</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="50"/> <source>Align Center</source> <translation>居中对é½</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="51"/> <source>Align Full</source> <translation>分散对é½</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="52"/> <source>Align Right</source> <translation>å±…å³å¯¹é½</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="53"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="208"/> <source>Horizontal Line</source> <translation>水平线</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="54"/> <source>Insert Date && Time</source> <translation>æ’入日期时间</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="55"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="220"/> <source>Shift Right</source> <translation>缩进</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="56"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="224"/> <source>Shift Left</source> <translation>å‡å°‘缩进</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="57"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="228"/> <source>Bullet List</source> <translation>项目列表</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="58"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="232"/> <source>Number List</source> <translation>ç¼–å·åˆ—表</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="59"/> <source>Font</source> <translation>字体</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="60"/> <source>Font Size</source> <translation>å­—å·</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="61"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="248"/> <source>Font Color</source> <translation>字体颜色</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="62"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="257"/> <source>Highlight</source> <translation>高亮</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="63"/> <source>To-do</source> <translation>待办事项</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="192"/> <source>Center Justify</source> <translation>居中对é½</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="196"/> <source>Fully Justify</source> <translation>分散对é½</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="214"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="215"/> <source>Insert Date & Time</source> <translation>æ’入日期时间</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="262"/> <source>Todo</source> <translation>待办事项</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="64"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="266"/> <source>Spell Check</source> <translation>拼写检查</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="65"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="270"/> <source>Insert Table</source> <translation>æ’入表格</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="66"/> <source>HTML Entities</source> <translation>HTML 实体</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="204"/> <source>Left Justify</source> <translation>左对é½</translation> </message> <message> <source>Center</source> <translation type="vanished">居中</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="200"/> <source>Right Justify</source> <translation>å³å¯¹é½</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="274"/> <source>Insert HTML Entities</source> <translation>æ’å…¥ HTML 实体</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="661"/> <source>Times</source> <translation>Times</translation> </message> </context> <context> <name>EmailDialog</name> <message> <location filename="../dialog/emaildialog.cpp" line="36"/> <source>Send Email</source> <translation>å‘é€é‚®ä»¶</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="38"/> <source>Send</source> <translation>å‘é€</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="39"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="51"/> <source>To:</source> <translation>å‘é€åˆ°ï¼š</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="53"/> <source>BCC:</source> <translation>密é€ï¼š</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="55"/> <source>CC:</source> <translation>抄é€ï¼š</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="57"/> <source>Subject:</source> <translation>主题:</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="59"/> <source>Note:</source> <translation>笔记:</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="77"/> <source>CC me on this email</source> <translation>抄é€ç»™è‡ªå·±</translation> </message> </context> <context> <name>EmailNote</name> <message> <location filename="../cmdtools/emailnote.cpp" line="261"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation>SMTPæœåŠ¡å™¨æœªé…置。 请在选项èœå•里指定æœåŠ¡å™¨ã€‚</translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="327"/> <source>Connection Error: Unable to connect to host.</source> <translation>连接错误:无法连接到主机。</translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="333"/> <source>Login Error : Unable to login.</source> <translation>登录错误:无法登录。</translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="338"/> <source>Send Error : Unable to send email.</source> <translation>å‘é€é”™è¯¯ï¼šæ— æ³•å‘é€é‚®ä»¶ã€‚</translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="344"/> <source>Message Sent</source> <translation>ä¿¡æ¯å·²å‘é€</translation> </message> </context> <context> <name>EmailPreferences</name> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="17"/> <source>SMTP Server</source> <translation>SMTPæœåС噍</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="18"/> <source>Server Port</source> <translation>æœåŠ¡å™¨ç«¯å£</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="19"/> <source>Userid</source> <translation>用户身份</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="20"/> <source>Password</source> <translation>密ç </translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="21"/> <source>Sender Display Name</source> <translation>å‘é€è€…å§“å</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="22"/> <source>Sender Email</source> <translation>å‘é€è€…邮箱</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="23"/> <source>Connection Type</source> <translation>连接类型</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="31"/> <source>Plain Text</source> <translation>明文</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="32"/> <source>SSL Connection</source> <translation>SSL加密</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="33"/> <source>TLS Connection</source> <translation>TLS加密</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="35"/> <source>Send Test Email</source> <translation>å‘逿µ‹è¯•邮件</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="108"/> <location filename="../dialog/preferences/emailpreferences.cpp" line="113"/> <source>Setup Error</source> <translation>é…置错误</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="109"/> <source>You must specify a SMTP server.</source> <translation>您必须指定一个 SMTP æœåŠ¡å™¨ã€‚</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="114"/> <source>You must specify a sender email.</source> <translation>您必须指定一个邮件å‘é€è€…地å€ã€‚</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="146"/> <source>Test Email From NixNote</source> <translation>测试从 NixNote å‘é€é‚®ä»¶</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="152"/> <source><h1>This is a test email from NixNote.</h1> </source> <translation><h1>这是æ¥è‡ª NixNote 的测试邮件。</h1></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="153"/> <source>If you are reading it then your email preferences are are setup properly.</source> <translation>如果您正在阅读本邮件,那么您的电å­é‚®ä»¶é…ç½®å¯æ­£å¸¸å·¥ä½œã€‚</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Connection Error</source> <translation>连接错误</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Unable to connect to host.</source> <translation>无法连接到主机。</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Login Error</source> <translation>登录错误</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Unable to login.</source> <translation>无法登录。</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Send Error</source> <translation>å‘é€é”™è¯¯</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Unable to send email.</source> <translation>无法å‘é€é‚®ä»¶ã€‚</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message Sent</source> <translation>ä¿¡æ¯å·²å‘é€</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message sent.</source> <translation>ä¿¡æ¯å·²å‘é€ã€‚</translation> </message> </context> <context> <name>EnCryptDialog</name> <message> <location filename="../dialog/encryptdialog.cpp" line="31"/> <source>Encrypt Text</source> <translation>加密文本</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="47"/> <source>Password</source> <translation>密ç </translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="49"/> <source>Verify</source> <translation>确认密ç </translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="51"/> <source>Hint</source> <translation>å¯†ç æç¤º</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="53"/> <source>Remember Password</source> <translation>è®°ä½å¯†ç </translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="61"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="65"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="113"/> <source>Password must be at least 4 characters</source> <translation>密ç é•¿åº¦å¿…须至少4个字符</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="117"/> <source>Passwords do not match</source> <translation>密ç ä¸åŒ¹é…</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="121"/> <source>Hint must be entered</source> <translation>å¿…é¡»è¾“å…¥å¯†ç æç¤º</translation> </message> </context> <context> <name>EnDecryptDialog</name> <message> <location filename="../dialog/endecryptdialog.cpp" line="35"/> <source>Decrypt</source> <translation>解密</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="51"/> <source>Password</source> <translation>密ç </translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="52"/> <source>Hint</source> <translation>å¯†ç æç¤º</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="59"/> <source>Permanently Decrypt</source> <translation>永久解密</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="61"/> <source>Remember Password</source> <translation>è®°ä½å¯†ç </translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="66"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="70"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>ExportData</name> <message> <location filename="../xml/exportdata.cpp" line="54"/> <source>Cannot open file.</source> <translation>无法打开文件。</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="62"/> <source>Export</source> <translation>导出</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="81"/> <source>Backup</source> <translation>备份</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="114"/> <source>Tags</source> <translation>标签</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="151"/> <source>Notebooks</source> <translation>笔记本</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="360"/> <source>Searches</source> <translation>æœç´¢å†…容</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="405"/> <source>Linked Notebooks</source> <translation>已链接笔记本</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="448"/> <source>Shared Notebooks</source> <translation>已共享的笔记本</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="508"/> <source>Notes</source> <translation>笔记</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="725"/> <source>Backup Canceled</source> <translation>备份已喿¶ˆ</translation> </message> </context> <context> <name>ExternalBrowse</name> <message> <location filename="../gui/externalbrowse.cpp" line="32"/> <source>NixNote</source> <translation>NixNote</translation> </message> <message> <location filename="../gui/externalbrowse.cpp" line="124"/> <source>NixNote - </source> <translation>NixNote - </translation> </message> </context> <context> <name>ExtractNotes</name> <message> <location filename="../cmdtools/extractnotes.cpp" line="41"/> <location filename="../cmdtools/extractnotes.cpp" line="82"/> <source>Output file not specified.</source> <translation>未指定输出文件。</translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="64"/> <source>Deleting notes:</source> <translation>正在删除笔记:</translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="65"/> <source>Type DELETE to verify: </source> <translation>输入 DELETE 以确认:</translation> </message> <message> <source>Type DELETE to very: </source> <translation type="vanished">输入 DELETE 以确认:</translation> </message> </context> <context> <name>FavoritesView</name> <message> <location filename="../gui/favoritesview.cpp" line="68"/> <source>Shortcuts</source> <translation>å¿«æ·æ–¹å¼</translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="90"/> <source>Remove from shortcuts</source> <translation>ä»Žå¿«æ·æ–¹å¼é‡Œåˆ é™¤</translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="565"/> <source>Are you sure you want to remove this shortcut?</source> <translation>确定è¦åˆ é™¤æ­¤å¿«æ·æ–¹å¼ï¼Ÿ</translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="566"/> <source>Verify Delete</source> <translation>删除确认</translation> </message> </context> <context> <name>FileWatcher</name> <message> <location filename="../watcher/filewatcher.cpp" line="72"/> <source>Error removing file: </source> <translation>删除文件出错:</translation> </message> </context> <context> <name>FindReplace</name> <message> <location filename="../gui/findreplace.cpp" line="46"/> <source>Next</source> <translation>下一个</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="47"/> <source>Previous</source> <translation>上一个</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="48"/> <source>Match case</source> <translation>匹é…大å°å†™</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="57"/> <source>Replace</source> <translation>替æ¢</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="58"/> <source>Replace all</source> <translation>全部替æ¢</translation> </message> </context> <context> <name>HtmlEntitiesDialog</name> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="33"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="34"/> <source>Close</source> <translation>关闭</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="35"/> <source>Edit entries list</source> <translation>编辑实体列表</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="36"/> <source>Save entities list</source> <translation>ä¿å­˜å®žä½“列表</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="71"/> <source>HTML Entities Selection</source> <translation>选择HTML实体</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="206"/> <source>Comma separated list of HTML entities. See http://www.w3schools.com/charsets/ for list.</source> <translation>HTML实体列表通过逗å·åˆ†éš”。 详细列表请看 http://www.w3schools.com/charsets 。</translation> </message> </context> <context> <name>ImportData</name> <message> <location filename="../xml/importdata.cpp" line="59"/> <source>Imported Notes</source> <translation>已导入笔记</translation> </message> <message> <location filename="../xml/importdata.cpp" line="106"/> <source>Scanning File</source> <translation>æ‰«ææ–‡ä»¶</translation> </message> <message> <location filename="../xml/importdata.cpp" line="107"/> <location filename="../xml/importdata.cpp" line="119"/> <source> notes found.</source> <translation>篇笔记已找到。</translation> </message> <message> <location filename="../xml/importdata.cpp" line="130"/> <source>Importing</source> <translation>正在导入</translation> </message> <message> <location filename="../xml/importdata.cpp" line="131"/> <source>Importing Notes</source> <translation>正在导入笔记</translation> </message> <message> <location filename="../xml/importdata.cpp" line="133"/> <source>Restore</source> <translation>æ¢å¤</translation> </message> <message> <location filename="../xml/importdata.cpp" line="134"/> <source>Restoring Notes</source> <translation>正在æ¢å¤ç¬”è®°</translation> </message> </context> <context> <name>ImportEnex</name> <message> <location filename="../xml/importenex.cpp" line="40"/> <source>Imported Notes</source> <translation>已导入笔记</translation> </message> <message> <location filename="../xml/importenex.cpp" line="83"/> <source>Scanning File</source> <translation>æ‰«ææ–‡ä»¶</translation> </message> <message> <location filename="../xml/importenex.cpp" line="84"/> <location filename="../xml/importenex.cpp" line="94"/> <source> notes found.</source> <translation>篇笔记已找到。</translation> </message> <message> <location filename="../xml/importenex.cpp" line="101"/> <location filename="../xml/importenex.cpp" line="102"/> <source>Importing Notes</source> <translation>正在导入笔记</translation> </message> </context> <context> <name>ImportNotes</name> <message> <location filename="../cmdtools/importnotes.cpp" line="19"/> <source>Input file not specified.</source> <translation>未指定输入文件。</translation> </message> <message> <location filename="../cmdtools/importnotes.cpp" line="24"/> <source>Input file not found.</source> <translation>未找到输入文件。</translation> </message> </context> <context> <name>InsertLatexDialog</name> <message> <location filename="../dialog/insertlatexdialog.cpp" line="32"/> <source>Insert LaTeX Formula</source> <translation>æ’å…¥LaTeXå…¬å¼</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="42"/> <source>Formula</source> <translation>å…¬å¼</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="47"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="52"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>InsertLinkDialog</name> <message> <location filename="../dialog/insertlinkdialog.cpp" line="34"/> <source>Insert Link</source> <translation>æ’入链接</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="45"/> <source>URL</source> <translation>URL</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="50"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="54"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>LineEdit</name> <message> <location filename="../gui/lineedit.cpp" line="39"/> <source>Search</source> <translation>æœç´¢</translation> </message> </context> <context> <name>LocalePreferences</name> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="37"/> <source>Date Format</source> <translation>日期格å¼</translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="40"/> <source>MM/dd/yy - </source> <translation>MM/dd/yy - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="41"/> <source>MM/dd/yyyy - </source> <translation>MM/dd/yyyy - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="42"/> <source>M/dd/yyyy - </source> <translation>M/dd/yyyy - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="43"/> <source>M/d/yyyy - </source> <translation>M/d/yyyy - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="44"/> <source>dd/MM/yy - </source> <translation>dd/MM/yy - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="45"/> <source>d/M/yy - </source> <translation>d/M/yy - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="46"/> <source>dd/MM/yyyy - </source> <translation>dd/MM/yyyy - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="47"/> <source>d/M/yyyy - </source> <translation>d/M/yyyy - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="48"/> <source>yyyy-MM-dd - </source> <translation>yyyy-MM-dd - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="49"/> <source>yy-MM-dd - </source> <translation>yy-MM-dd - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="52"/> <source>Time Format</source> <translation>æ—¶é—´æ ¼å¼</translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="55"/> <source>HH:mm:ss - </source> <translation>HH:mm:ss - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="56"/> <source>HH:mm:ss a - </source> <translation>HH:mm:ss a - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="57"/> <source>HH:mm - </source> <translation>HH:mm - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="58"/> <source>HH:mm a - </source> <translation>HH:mm a - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="59"/> <source>hh:mm:ss - </source> <translation>hh:mm:ss - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="60"/> <source>hh:mm:ss a- </source> <translation>hh:mm:ss a- </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="61"/> <source>h:mm:ss a - </source> <translation>h:mm:ss a - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="62"/> <source>hh:mm - </source> <translation>hh:mm - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="63"/> <source>hh:mm a - </source> <translation>hh:mm a - </translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="64"/> <source>h:mm a - </source> <translation>h:mm a - </translation> </message> </context> <context> <name>LocationDialog</name> <message> <location filename="../dialog/locationdialog.cpp" line="33"/> <source>Location</source> <translation>ä½ç½®</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="40"/> <source>Longitude</source> <translation>ç»åº¦</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="42"/> <source>Latitude</source> <translation>纬度</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="44"/> <source>Altitude</source> <translation>æµ·æ‹”</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="49"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="52"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>LocationEditor</name> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="42"/> <source>Click to set location...</source> <translation>点击设置ä½ç½®...</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="45"/> <source>Edit...</source> <translation>编辑...</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="46"/> <source>Clear</source> <translation>清除</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="47"/> <source>View on map</source> <translation>在地图中查看</translation> </message> </context> <context> <name>LogViewer</name> <message> <location filename="../dialog/logviewer.cpp" line="41"/> <source>Close</source> <translation>关闭</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="43"/> <source>Refresh</source> <translation>刷新</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="45"/> <source>Save</source> <translation>ä¿å­˜</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="54"/> <source>Save Logs</source> <translation>ä¿å­˜æ—¥å¿—</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>Save Log</source> <translation>ä¿å­˜æ—¥å¿—</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>NixNote Log (*.log);;All Files (*.*)</source> <translation>NixNote日志(*.log);;所有文件(*.*)</translation> </message> </context> <context> <name>LoginDialog</name> <message> <location filename="../dialog/logindialog.cpp" line="34"/> <source>NixNote Login</source> <translation>NixNote登录</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="43"/> <source>Userid</source> <translation>用户id</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="44"/> <source>Password</source> <translation>密ç </translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="52"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="56"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>NAttributeTree</name> <message> <location filename="../gui/nattributetree.cpp" line="48"/> <source>Attributes</source> <translation>属性</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="129"/> <source>Created</source> <translation>创建时间</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="132"/> <location filename="../gui/nattributetree.cpp" line="213"/> <source>Since</source> <translation>自从</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="136"/> <location filename="../gui/nattributetree.cpp" line="173"/> <location filename="../gui/nattributetree.cpp" line="217"/> <location filename="../gui/nattributetree.cpp" line="254"/> <source>Today</source> <translation>今天</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="140"/> <location filename="../gui/nattributetree.cpp" line="177"/> <location filename="../gui/nattributetree.cpp" line="221"/> <location filename="../gui/nattributetree.cpp" line="258"/> <source>Yesterday</source> <translation>昨天</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="144"/> <location filename="../gui/nattributetree.cpp" line="181"/> <location filename="../gui/nattributetree.cpp" line="225"/> <location filename="../gui/nattributetree.cpp" line="262"/> <source>This week</source> <translation>本周</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="148"/> <location filename="../gui/nattributetree.cpp" line="185"/> <location filename="../gui/nattributetree.cpp" line="229"/> <location filename="../gui/nattributetree.cpp" line="266"/> <source>Last week</source> <translation>上周</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="152"/> <location filename="../gui/nattributetree.cpp" line="189"/> <location filename="../gui/nattributetree.cpp" line="233"/> <location filename="../gui/nattributetree.cpp" line="270"/> <source>This Month</source> <translation>本月</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="156"/> <location filename="../gui/nattributetree.cpp" line="193"/> <location filename="../gui/nattributetree.cpp" line="237"/> <location filename="../gui/nattributetree.cpp" line="274"/> <source>Last Month</source> <translation>上月</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="160"/> <location filename="../gui/nattributetree.cpp" line="197"/> <location filename="../gui/nattributetree.cpp" line="241"/> <location filename="../gui/nattributetree.cpp" line="278"/> <source>This Year</source> <translation>今年</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="164"/> <location filename="../gui/nattributetree.cpp" line="201"/> <location filename="../gui/nattributetree.cpp" line="245"/> <location filename="../gui/nattributetree.cpp" line="282"/> <source>Last Year</source> <translation>去年</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="169"/> <location filename="../gui/nattributetree.cpp" line="250"/> <source>Before</source> <translation>早于</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="210"/> <source>Last Modified</source> <translation>最åŽä¿®æ”¹</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="289"/> <source>Contains</source> <translation>内容</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="292"/> <source>Images</source> <translation>图åƒ</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="296"/> <source>Audio</source> <translation>音频</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="300"/> <source>Ink</source> <translation>手写笔记</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="304"/> <source>Encrypted Text</source> <translation>加密文本</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="308"/> <source>To-do items</source> <translation>待办事项</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="312"/> <source>Unfinished to-do items</source> <translation>未完æˆçš„待办事项</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="316"/> <source>Finished to-do items</source> <translation>已完æˆçš„待办事项</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="320"/> <source>PDF document</source> <translation>PDF文档</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="324"/> <source>Attachment</source> <translation>附件</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="328"/> <source>Reminder</source> <translation>æé†’</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="332"/> <source>Uncompleted Reminder</source> <translation>æœªå®Œæˆæé†’</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="336"/> <source>Future Reminder</source> <translation>未æ¥çš„æé†’</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="341"/> <source>Source</source> <translation>æ¥æº</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="344"/> <source>Emailed to Evernote</source> <translation>邮件å‘é€åˆ°Evernote</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="348"/> <source>Email</source> <translation>邮箱</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="352"/> <source>Web page</source> <translation>网页</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="356"/> <source>Mobile</source> <translation>移动版</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="360"/> <source>Another application</source> <translation>其他应用</translation> </message> </context> <context> <name>NBrowserWindow</name> <message> <location filename="../gui/nbrowserwindow.cpp" line="521"/> <location filename="../gui/nbrowserwindow.cpp" line="3112"/> <source>Today</source> <translation>今天</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="523"/> <location filename="../gui/nbrowserwindow.cpp" line="3114"/> <source>Tomorrow</source> <translation>明天</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="525"/> <location filename="../gui/nbrowserwindow.cpp" line="3116"/> <source>Yesterday</source> <translation>昨天</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to Save</source> <translation>无法ä¿å­˜</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to save this note. Either tidy isn't installed or the note is too complex to save.</source> <translation>无法ä¿å­˜ç¬”记。Tidy未安装或者笔记格å¼å¤ªå¤æ‚。</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="1808"/> <source>Insert Link</source> <translation>æ’入链接</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>Unable Open</source> <translation>无法打开</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>This is an ink note. Ink notes are not supported since Evernote has not published any specifications on them and I'm too lazy to figure them out by myself.</source> <translation>这是一个手写笔记。 由于Evernote未公布任何手写笔记的技术细节 è€Œä½œè€…æœ¬äººåˆæ‡’于自己去找,所以手写笔记ä¸è¢«æ”¯æŒã€‚</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2240"/> <source>Edit Link</source> <translation>编辑链接</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2304"/> <source>Unable to create LaTeX image</source> <translation>无法创建LaTeX图åƒ</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2305"/> <source>Unable to create LaTeX image. Are you sure mimetex is installed?</source> <translation>无法创建 LaTeX 图åƒã€‚您是å¦å®‰è£…了 mimetex?</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2635"/> <source>Setup Error</source> <translation>é…置错误</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2636"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation>未é…ç½®SMTPæœåŠ¡å™¨ã€‚ 请在选项èœå•中指定æœåС噍é…置。</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2645"/> <source>Sending Email. Please be patient.</source> <translation>正在å‘é€é‚®ä»¶ã€‚请è€å¿ƒç­‰å¾…。</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Connection Error</source> <translation>连接错误</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Unable to connect to host.</source> <translation>无法连接到主机。</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Login Error</source> <translation>登录错误</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Unable to login.</source> <translation>无法登录。</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Send Error</source> <translation>å‘é€é”™è¯¯</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Unable to send email.</source> <translation>无法å‘é€é‚®ä»¶ã€‚</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3159"/> <source>Decryption Error</source> <translation>解密错误</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3160"/> <source>Unknown encryption method. Unable to decrypt.</source> <translation>未知加密方法。 无法解密。</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3263"/> <source>Error</source> <translation>错误</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3264"/> <source>Error Encrypting String. Please verify you have Java installed.</source> <translation>错误的加密字串。请确定Java已安装。</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Plugin Error</source> <translation>æ’件错误</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Hunspell plugin not found or could not be loaded.</source> <translation>Hunspell æ’件未找到或者无法加载。</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete</source> <translation>拼写检查完æˆ</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete.</source> <translation>拼写检查完æˆã€‚</translation> </message> </context> <context> <name>NMainMenuBar</name> <message> <location filename="../gui/nmainmenubar.cpp" line="60"/> <source>&File</source> <translation>文件(&F)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="79"/> <source>Print this note</source> <translation>打å°ç¬”è®°</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="87"/> <source>Backup database to a file</source> <translation>备份数æ®åº“到文件</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="93"/> <source>Restore from a backup</source> <translation>从备份æ¢å¤</translation> </message> <message> <source>Export selected notes to a file</source> <translation type="vanished">导出选中笔记到文件</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="113"/> <source>Import notes from an export file</source> <translation>从文件导入笔记</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="133"/> <source>Switch to </source> <translation>切æ¢åˆ°</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="151"/> <source>Open/Close Notebooks</source> <translation>打开/关闭笔记本</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="159"/> <source>Close the program</source> <translation>关闭程åº</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="175"/> <source>&Edit</source> <translation>编辑(&E)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="78"/> <source>&Print Note</source> <translation>打å°ç¬”è®°(&P)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="64"/> <source>Email Note</source> <translation>å‘é€ç¬”è®°</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="65"/> <source>Email a copy of this note</source> <translation>å‘é€ç¬”记副本</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="71"/> <source>Print Preview Note</source> <translation>打å°é¢„览</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="72"/> <source>Print preview of this note</source> <translation>此笔记的打å°é¢„览</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="86"/> <source>&Backup Database</source> <translation>备份数æ®åº“(&B)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="92"/> <source>&Restore Database</source> <translation>æ¢å¤æ•°æ®åº“(&R)</translation> </message> <message> <source>&Export Notes</source> <translation type="vanished">导出笔记(&E)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="112"/> <source>&Import Notes</source> <translation>导入笔记(&I)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="140"/> <source>&Add Another User...</source> <translation>添加账户(&A)...</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="144"/> <source>&User Account Maintenance</source> <translation>用户账户管ç†(&U)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="150"/> <source>&Open/Close Notebooks</source> <translation>打开/关闭笔记本(&O)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="158"/> <source>E&xit</source> <translation>退出(&X)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="180"/> <source>&Undo</source> <translation>撤销(&U)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="184"/> <source>&Redo</source> <translation>é‡åš(&R)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="190"/> <source>&Cut</source> <translation>剪切(&C)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="194"/> <source>C&opy</source> <translation>å¤åˆ¶(&O)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="198"/> <source>&Paste</source> <translation>粘贴(&P)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="202"/> <source>Pas&te as Unformatted Text</source> <translation>ç²˜è´´ä¸ºæ— æ ¼å¼æ–‡æœ¬(&T)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="206"/> <source>Remo&ve Formatting</source> <translation>删除格å¼(&V)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="212"/> <source>Select &All</source> <translation>全选(&A)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="218"/> <source>F&ind and Replace</source> <translation>查找和替æ¢(&I)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="220"/> <source>&Search Notes</source> <translation>æœç´¢ç¬”è®°(&S)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="225"/> <source>&Reset Search</source> <translation>é‡ç½®æœç´¢(&R)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="232"/> <source>&Find in Note</source> <translation>笔记内查找(&F)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="238"/> <source>Find &Next</source> <translation>查找下一个(&N)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="243"/> <source>Find &Previous</source> <translation>查找上一个(&P)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="250"/> <source>Replace &Within Note...</source> <translation>笔记内替æ¢(&W)...</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="260"/> <source>Preferences</source> <translation>选项</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="268"/> <source>&View</source> <translation>查看(&V)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="273"/> <source>Wide Note List</source> <translation>宽笔记列表</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="278"/> <source>Narrow Note List</source> <translation>窄笔记列表</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="285"/> <source>&Show Source</source> <translation>显示æºç (&S)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="289"/> <source>Note &History</source> <translation>笔记历å²(&H)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="295"/> <source>&Presentation Mode</source> <translation>演示模å¼(&P)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="299"/> <source>Show &Left Panel</source> <translation>显示左边æ (&L)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="306"/> <source>Show &Favorites</source> <translation>显示收è—(&F)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="313"/> <source>Show &Notebooks</source> <translation>显示笔记本(&N)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="320"/> <source>Show Ta&gs</source> <translation>显示标签(&G)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="327"/> <source>Show Sa&ved Searches</source> <translation>显示已ä¿å­˜æœç´¢é¡¹(&V)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="341"/> <source>Show T&rash</source> <translation>显示回收站(&R)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="348"/> <source>Show N&ote List</source> <translation>显示笔记列表(&O)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="355"/> <source>Show Note &Panel</source> <translation>æ˜¾ç¤ºç¬”è®°é¢æ¿(&P)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="364"/> <source>View Note &Info</source> <translation>显示笔记信æ¯(&I)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="368"/> <source>View &Toolbar</source> <translation>显示工具æ (&T)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="375"/> <source>View Status&bar</source> <translation>æ˜¾ç¤ºçŠ¶æ€æ (&B)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="391"/> <source>New &Note</source> <translation>新建笔记(&N)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="396"/> <source>New &Webcam Note</source> <translation>新建摄åƒå¤´ç¬”è®°(&W)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="401"/> <source>Dupl&icate Note</source> <translation>å¤åˆ¶ç¬”è®°(&I)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="406"/> <source>&Delete</source> <translation>删除(&D)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="411"/> <source>Reindex Note</source> <translation>釿–°ç´¢å¼•笔记</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="418"/> <source>&Spell Check</source> <translation>拼写检查(&S)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="427"/> <source>&Pin Note</source> <translation>固定笔记(&P)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="432"/> <source>&UnPin Note</source> <translation>å–æ¶ˆå›ºå®šç¬”è®°(&U)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="446"/> <source>&Synchronize</source> <translation>åŒæ­¥(&S)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="447"/> <source>Synchronize with Evernote</source> <translation>与EvernoteåŒæ­¥</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="452"/> <source>&Disconnect</source> <translation>断开连接(&D)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="460"/> <source>Pause &Indexing</source> <translation>æš‚åœç´¢å¼•(&I)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="461"/> <source>Temporarily pause indexing</source> <translation>æš‚åœç´¢å¼•</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="468"/> <source>Disable &Editing</source> <translation>ç¦ç”¨ç¼–辑(&E)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="469"/> <source>Temporarily disable note editing</source> <translation>暂时ç¦ç”¨ç¬”记编辑</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="476"/> <source>A&ccount</source> <translation>账户(&A)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="490"/> <source>&Reindex Database</source> <translation>é‡å»ºæ•°æ®åº“索引(&R)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="514"/> <source>&User's Guide</source> <translation>用户指å—(&U)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="537"/> <source>Shortcuts</source> <translation>å¿«æ·é”®</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="538"/> <source>View currentt shortcuts</source> <translation>查看当å‰çš„å¿«æ·é”®</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="547"/> <source>Github Page</source> <translation>GitHub 页é¢</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="548"/> <source>Goto the NixNote2 Github project page.</source> <translation>å‰å¾€ NixNote2 GitHub 项目页é¢ã€‚</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="585"/> <source>About &Qt</source> <translation>关于 &Qt</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="625"/> <source>Theme</source> <translation>主题</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="386"/> <source>&Note</source> <translation>笔记(&N)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="100"/> <source>&Export to NixNote Export</source> <translation>导出为 NixNote 导出格å¼(&E)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="101"/> <source>Export selected notes to a NNEX file</source> <translation>导出选中的笔记为 NNEX 文件</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="106"/> <source>&Export Notes as PDF</source> <translation>导出笔记为 PDF(&E)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="107"/> <source>Export selected notes to a PDF file</source> <translation>将选中的笔记导出为 PDF 文件</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="441"/> <source>&Tools</source> <translation>工具(&T)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="453"/> <source>Disconnect from Evernote</source> <translation>从Evernote断开连接</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="477"/> <source>Account information</source> <translation>账户信æ¯</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="484"/> <source>&Database Status</source> <translation>æ•°æ®åº“状æ€(&D)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="485"/> <source>Database Status</source> <translation>æ•°æ®åº“状æ€</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="491"/> <source>Reindex all notes</source> <translation>é‡å»ºæ‰€æœ‰ç¬”记索引</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="499"/> <source>&Import Folders</source> <translation>导入文件夹(&I)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="500"/> <source>Import Folders</source> <translation>导入文件夹</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="509"/> <source>&Help</source> <translation>帮助(&H)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="515"/> <source>Open the user manual.</source> <translation>打开用户手册。</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="542"/> <source>Message &Log</source> <translation>æ¶ˆæ¯æ—¥å¿—(&L)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="554"/> <source>&Evernote Account Page</source> <translation>Evernote账户页é¢(&E)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="559"/> <source>Evernote &Support</source> <translation>Evernote支æŒ(&S)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="568"/> <source>Evernote &Trunk</source> <translation>Evernote百å®ç®±(&T)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="573"/> <source>Evernote User &Forum</source> <translation>Evernote用户论å›(&F)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="580"/> <source>&About</source> <translation>关于(&A)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="634"/> <source>System Default</source> <translation>系统默认</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="543"/> <source>View current program messages</source> <translation>显示当å‰ç¨‹åºæ¶ˆæ¯</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="334"/> <source>Show &Attribute Filter</source> <translation>显示属性过滤器(&A)</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="520"/> <source>Theme &Information</source> <translation>主题信æ¯(&I) </translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="521"/> <source>View information about the current theme.</source> <translation>查看当å‰ä¸»é¢˜çš„ä¿¡æ¯ã€‚</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="555"/> <source>Go to your Evernote account page.</source> <translation>跳转到Evernote账户页é¢ã€‚</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="560"/> <source>Go to Evernote's support page</source> <translation>跳转到Evernote支æŒé¡µé¢</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="562"/> <source>Yinxiang Biji Support</source> <translation>å°è±¡ç¬”记支æŒ</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="563"/> <source>Go to Yinxiang Biji's support page</source> <translation>跳转到å°è±¡ç¬”记支æŒé¡µé¢</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="569"/> <source>Go to Evernote Trunk</source> <translation>跳转到Evernote百å®ç®±</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="574"/> <source>Go to the Evernote user support forum.</source> <translation>跳转到Evernote用户支æŒè®ºå›ã€‚</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="581"/> <location filename="../gui/nmainmenubar.cpp" line="586"/> <source>About</source> <translation>关于</translation> </message> </context> <context> <name>NNotebookView</name> <message> <location filename="../gui/nnotebookview.cpp" line="69"/> <source>Notebooks</source> <translation>笔记本</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="86"/> <source>Create New Notebook</source> <translation>新建笔记本</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="95"/> <source>Delete</source> <translation>删除</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="103"/> <source>Add to stack</source> <translation>添加到组</translation> </message> <message> <source>New stack</source> <translation type="vanished">新建组</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="116"/> <source>Create New stack</source> <translation>创建新组</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="119"/> <source>Remove from stack</source> <translation>从组中删除</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="123"/> <source>Rename</source> <translation>é‡å‘½å</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="131"/> <source>Properties</source> <translation>属性</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="641"/> <source>Are you sure you want to delete this notebook?</source> <translation>确定è¦åˆ é™¤è¿™ä¸ªç¬”记本?</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="642"/> <source>Verify Delete</source> <translation>删除确认</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>New Stack (</source> <translation>新建组(</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>)</source> <translation>)</translation> </message> </context> <context> <name>NSearchView</name> <message> <location filename="../gui/nsearchview.cpp" line="65"/> <source>Saved Searches</source> <translation>å·²ä¿å­˜æœç´¢é¡¹</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="74"/> <source>Create Saved Search</source> <translation>创建ä¿å­˜çš„æœç´¢é¡¹</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="83"/> <source>Delete</source> <translation>删除</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="90"/> <source>Rename</source> <translation>é‡å‘½å</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="94"/> <source>Properties</source> <translation>性质</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="404"/> <source>Are you sure you want to delete this saved search?</source> <translation>确定è¦åˆ é™¤è¿™ä¸ªæœç´¢é¡¹ï¼Ÿ</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="405"/> <source>Verify Delete</source> <translation>删除确认</translation> </message> </context> <context> <name>NTabWidget</name> <message> <location filename="../gui/ntabwidget.cpp" line="254"/> <location filename="../gui/ntabwidget.cpp" line="262"/> <source>Untitled Note</source> <translation>未命å笔记</translation> </message> <message> <location filename="../gui/ntabwidget.cpp" line="267"/> <location filename="../gui/ntabwidget.cpp" line="334"/> <source>NixNote - </source> <translation>NixNote - </translation> </message> </context> <context> <name>NTableView</name> <message> <location filename="../gui/ntableview.cpp" line="203"/> <source>Open Note</source> <translation>打开笔记</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="209"/> <source>Open Note In New Tab</source> <translation>在新标签页打开笔记</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="215"/> <source>Open Note In New Window</source> <translation>åœ¨æ–°çª—å£æ‰“开笔记</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="222"/> <source>Add Note</source> <translation>添加笔记</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="227"/> <source>Delete Note</source> <translation>删除笔记</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="238"/> <source>Restore Note</source> <translation>æ¢å¤ç¬”è®°</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="244"/> <source>Copy Note Link</source> <translation>å¤åˆ¶ç¬”记链接</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="249"/> <source>Duplicate Note</source> <translation>å¤åˆ¶ç¬”è®°</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="254"/> <source>Reminders</source> <translation>æé†’</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="258"/> <source>Remove</source> <translation>移除</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="263"/> <source>Mark Completed</source> <translation>标记为已完æˆ</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="269"/> <source>Pin Note</source> <translation>固定笔记</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="274"/> <source>Unpin Note</source> <translation>å–æ¶ˆå›ºå®šç¬”è®°</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="279"/> <source>Merge Notes</source> <translation>åˆå¹¶ç¬”è®°</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="285"/> <source>Create Table of Contents</source> <translation>创建目录</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="291"/> <source>Title Color</source> <translation>标题颜色</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="296"/> <source>Properties</source> <translation>属性</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="301"/> <source>White</source> <translation>白色</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="304"/> <source>Red</source> <translation>红色</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="307"/> <source>Blue</source> <translation>è“色</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="310"/> <source>Green</source> <translation>绿色</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="313"/> <source>Yellow</source> <translation>黄色</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="316"/> <source>Black</source> <translation>黑色</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="319"/> <source>Gray</source> <translation>ç°è‰²</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="322"/> <source>Cyan</source> <translation>è“绿</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="325"/> <source>Magenta</source> <translation>å“红</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="663"/> <source>Delete </source> <translation>删除 </translation> </message> <message> <location filename="../gui/ntableview.cpp" line="666"/> <source>Permanently delete </source> <translation>永久删除 </translation> </message> <message> <location filename="../gui/ntableview.cpp" line="672"/> <source>selected note?</source> <translation>已选笔记?</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="677"/> <source>Verify Delete</source> <translation>删除确认</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="942"/> <source>Unsynchronized Note</source> <translation>æœªåŒæ­¥ç¬”è®°</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="943"/> <source>This note has never been synchronized. Using this in a note link can cause problems unless you synchronize it first.</source> <translation>è¿™ä¸ªç¬”è®°ä»ŽæœªåŒæ­¥è¿‡ã€‚ 在笔记链接中使用会导致问题,除éžä½ å…ˆåŒæ­¥è¿™ä¸ªç¬”记。</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1319"/> <source>Table of Contents</source> <translation>目录</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1370"/> <source>One or more notes are unsynchronized. This can cause issues if they are later synchronized. Do you wish to continue?</source> <translation>一个或多个笔记未完æˆåŒæ­¥ã€‚ 如果之åŽå†è¿›è¡ŒåŒæ­¥ï¼Œå¯ä»¥ä¼šå¯¼è‡´ä¸€äº›é—®é¢˜ã€‚ 确定è¦ç»§ç»­å—?</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1654"/> <source>Note LID</source> <translation>笔记 LID</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1657"/> <source>Title</source> <translation>标题</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1660"/> <source>Notebook</source> <translation>笔记本</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1663"/> <source>Tags</source> <translation>标签</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1666"/> <source>Synchronized</source> <translation>å·²åŒæ­¥</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1668"/> <location filename="../gui/ntableview.cpp" line="1676"/> <location filename="../gui/ntableview.cpp" line="1682"/> <source>No</source> <translation>å¦</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1670"/> <location filename="../gui/ntableview.cpp" line="1674"/> <location filename="../gui/ntableview.cpp" line="1680"/> <source>Yes</source> <translation>是</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1672"/> <source>Has Encryption</source> <translation>包å«åŠ å¯†æ–‡æœ¬</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1678"/> <source>Has To-Do</source> <translation>包å«å¾…办事项</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1684"/> <source>Date Created</source> <translation>创建日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1687"/> <source>Date Updated</source> <translation>更新日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1690"/> <source>Date Deleted</source> <translation>删除日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1698"/> <source>Subject Date</source> <translation>主题日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1706"/> <source>Author</source> <translation>作者</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1710"/> <source>Longitude</source> <translation>ç»åº¦</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1719"/> <source>Latitude</source> <translation>纬度</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1728"/> <source>Altitude</source> <translation>æµ·æ‹”</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1737"/> <source>Source</source> <translation>æ¥æº</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1740"/> <source>Source Application</source> <translation>æ¥æºåº”用</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1743"/> <source>Source URL</source> <translation>æ¥æºURL</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1746"/> <source>Reminder Due</source> <translation>æé†’日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1754"/> <source>Reminder Completed</source> <translation>æé†’已完æˆ</translation> </message> </context> <context> <name>NTableViewHeader</name> <message> <location filename="../gui/ntableviewheader.cpp" line="42"/> <source>Date Created</source> <translation>创建日期</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="47"/> <source>Date Updated</source> <translation>更新日期</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="52"/> <source>Title</source> <translation>标题</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="57"/> <source>Notebook</source> <translation>笔记本</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="62"/> <source>Tags</source> <translation>标签</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="67"/> <source>Author</source> <translation>作者</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="72"/> <source>Subject Date</source> <translation>主题日期</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="77"/> <source>Source</source> <translation>æ¥æº</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="82"/> <source>Source URL</source> <translation>æ¥æºURL</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="87"/> <source>Latitude</source> <translation>纬度</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="92"/> <source>Longitude</source> <translation>ç»åº¦</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="97"/> <source>Altitude</source> <translation>æµ·æ‹”</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="102"/> <source>Has Encryption</source> <translation>包å«åŠ å¯†æ–‡æœ¬</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="107"/> <source>Has To-do</source> <translation>包å«å¾…办事项</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="112"/> <source>Synchronized</source> <translation>需è¦åŒæ­¥</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="117"/> <source>Size</source> <translation>大å°</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="122"/> <source>Reminder</source> <translation>æé†’</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="128"/> <source>Reminder Due</source> <translation>æé†’日期</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="133"/> <source>Reminder Completed</source> <translation>å®Œæˆæé†’</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="138"/> <source>Pinned</source> <translation>已固定</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="143"/> <source>Thumbnail</source> <translation>缩略图</translation> </message> </context> <context> <name>NTagView</name> <message> <location filename="../gui/ntagview.cpp" line="67"/> <location filename="../gui/ntagview.cpp" line="156"/> <source>Tags from Personal</source> <translation>个人标签</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="91"/> <source>Create New Tag</source> <translation>新建标签</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="100"/> <source>Delete</source> <translation>删除</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="107"/> <source>Rename</source> <translation>é‡å‘½å</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="110"/> <source>Merge</source> <translation>åˆå¹¶</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="113"/> <source>Hide Unassigned</source> <translation>éšè—æœªåˆ†é…æ ‡ç­¾</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="119"/> <source>Properties</source> <translation>性质</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="154"/> <source>Tags from </source> <translation>标签æ¥è‡ª </translation> </message> <message> <location filename="../gui/ntagview.cpp" line="351"/> <source>-<Missing Tag>-</source> <translation>-<缺少 标签>-</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="706"/> <source>Are you sure you want to merge these tags?</source> <translation>确定è¦åˆå¹¶è¿™äº›æ ‡ç­¾ï¼Ÿ</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="707"/> <source>Verify Merge</source> <translation>åˆå¹¶ç¡®è®¤</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="753"/> <source>Are you sure you want to delete this tag?</source> <translation>确定è¦åˆ é™¤è¿™ä¸ªæ ‡ç­¾ï¼Ÿ</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="755"/> <source>Are you sure you want to delete all selected tags?</source> <translation>确定è¦åˆ é™¤æ‰€æœ‰å·²é€‰æ ‡ç­¾ï¼Ÿ</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="756"/> <source>Verify Delete</source> <translation>删除确认</translation> </message> </context> <context> <name>NTitleEditor</name> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="123"/> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="137"/> <source>Untitled note</source> <translation>未命å笔记</translation> </message> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="134"/> <source>untitled note</source> <translation>未命å笔记</translation> </message> </context> <context> <name>NTrashTree</name> <message> <location filename="../gui/ntrashtree.cpp" line="53"/> <source>Trash</source> <translation>回收站</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="65"/> <source>Restore Deleted Notes</source> <translation>æ¢å¤å·²åˆ é™¤ç¬”è®°</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="68"/> <source>Empty Trash</source> <translation>清空回收站</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="238"/> <source>Verify Delete</source> <translation>删除确认</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="239"/> <source>Are you sure you want to permanently delete these notes?</source> <translation>ç¡®å®šè¦æ°¸ä¹…删除这些笔记?</translation> </message> </context> <context> <name>NWebView</name> <message> <location filename="../gui/nwebview.cpp" line="56"/> <source>Open</source> <translation>打开</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="61"/> <source>Cut</source> <translation>剪切</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="66"/> <source>Copy</source> <translation>å¤åˆ¶</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="71"/> <source>Paste</source> <translation>粘贴</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="76"/> <source>Paste as Unformatted Text</source> <translation>ç²˜è´´ä¸ºæ— æ ¼å¼æ–‡æœ¬</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="81"/> <source>Remove Formatting</source> <translation>删除格å¼</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="86"/> <source>Copy Note URL</source> <translation>å¤åˆ¶ç¬”è®°URL</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="93"/> <source>Background Color</source> <translation>背景颜色</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="113"/> <source>To-do</source> <translation>待办事项</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="120"/> <source>HTML Entities</source> <translation>HTML实体</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="127"/> <source>Encrypted Selected Text</source> <translation>加密已选文本</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="132"/> <source>Insert Date && Time</source> <translation>æ’入日期时间</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="137"/> <source>Insert Hyperlink</source> <translation>æ’入超链接</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="142"/> <source>Quick Link</source> <translation>快速链接</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="147"/> <source>Remove Hyperlink</source> <translation>删除超链接</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="152"/> <source>Attach File</source> <translation>添加附件</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="158"/> <source>Insert LaTeX Formula</source> <translation>æ’å…¥LaTeXå…¬å¼</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="164"/> <source>Table</source> <translation>表格</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="167"/> <source>Insert Table</source> <translation>æ’入表格</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="173"/> <source>Insert Row</source> <translation>æ’入行</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="178"/> <source>Insert Column</source> <translation>æ’入列</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="185"/> <source>Delete Row</source> <translation>删除行</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="189"/> <source>Delete Column</source> <translation>删除列</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="196"/> <source>Table Properties</source> <translation>表格属性</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="203"/> <source>Image</source> <translation>图åƒ</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="206"/> <source>Save Image</source> <translation>ä¿å­˜å›¾åƒ</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="214"/> <source>Rotate Left</source> <translation>å‘左旋转</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="218"/> <source>Rotate Right</source> <translation>å‘峿—‹è½¬</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="224"/> <source>Save Attachment</source> <translation>ä¿å­˜é™„ä»¶</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="502"/> <location filename="../gui/nwebview.cpp" line="532"/> <source>Save File</source> <translation>ä¿å­˜æ–‡ä»¶</translation> </message> </context> <context> <name>NixNote</name> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy Not Found</source> <translation>未找到Tidy</translation> </message> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy is not found on this system. Until tidy is installed you cannot save any notes.</source> <translation>系统中未找到Tidy。 在安装Tidy之å‰ä½ æ— æ³•ä¿å­˜ä»»ä½•笔记。</translation> </message> <message> <location filename="../nixnote.cpp" line="291"/> <source>ToolBar</source> <translation>工具æ </translation> </message> <message> <location filename="../nixnote.cpp" line="303"/> <source>Back</source> <translation>åŽé€€</translation> </message> <message> <location filename="../nixnote.cpp" line="304"/> <source>Next</source> <translation>å‰è¿›</translation> </message> <message> <location filename="../nixnote.cpp" line="314"/> <source>All Notes</source> <translation>所有笔记</translation> </message> <message> <location filename="../nixnote.cpp" line="316"/> <source>Sync</source> <translation>åŒæ­¥</translation> </message> <message> <location filename="../nixnote.cpp" line="319"/> <source>Print</source> <translation>打å°</translation> </message> <message> <location filename="../nixnote.cpp" line="329"/> <source>New Text Note</source> <translation>新建文字笔记</translation> </message> <message> <location filename="../nixnote.cpp" line="332"/> <source>New Webcam Note</source> <translation>新建摄åƒå¤´ç¬”è®°</translation> </message> <message> <location filename="../nixnote.cpp" line="344"/> <source>Delete</source> <translation>删除</translation> </message> <message> <location filename="../nixnote.cpp" line="347"/> <source>Trunk</source> <translation>百å®ç®±</translation> </message> <message> <location filename="../nixnote.cpp" line="349"/> <source>Usage</source> <translation>用é‡</translation> </message> <message> <location filename="../nixnote.cpp" line="531"/> <location filename="../nixnote.cpp" line="3183"/> <source>Screen Capture</source> <translation>å±å¹•截图</translation> </message> <message> <location filename="../nixnote.cpp" line="547"/> <source>Show/Hide</source> <translation>显示/éšè—</translation> </message> <message> <location filename="../nixnote.cpp" line="559"/> <source>Close</source> <translation>关闭</translation> </message> <message> <location filename="../nixnote.cpp" line="1799"/> <source>Confirm Restore</source> <translation>确认æ¢å¤</translation> </message> <message> <location filename="../nixnote.cpp" line="1815"/> <source>Restore Database</source> <translation>æ¢å¤æ•°æ®åº“</translation> </message> <message> <location filename="../nixnote.cpp" line="1818"/> <source>Import Notes</source> <translation>导入笔记</translation> </message> <message> <location filename="../nixnote.cpp" line="1730"/> <location filename="../nixnote.cpp" line="1816"/> <source>NixNote Export (*.nnex);;All Files (*.*)</source> <translation>NixNote导出格å¼(*.nnex);;所有文件(*.*)</translation> </message> <message> <location filename="../nixnote.cpp" line="320"/> <source>Print the current note</source> <translation></translation> </message> <message> <location filename="../nixnote.cpp" line="322"/> <source>Email</source> <translation>å‘é€é‚®ä»¶</translation> </message> <message> <location filename="../nixnote.cpp" line="323"/> <source>Email the current note</source> <translation>电å­é‚®ä»¶å‘é€å½“å‰ç¬”è®°</translation> </message> <message> <location filename="../nixnote.cpp" line="528"/> <source>Quick Note</source> <translation>快速笔记</translation> </message> <message> <location filename="../nixnote.cpp" line="538"/> <source>Shortcut Notes</source> <translation>已收è—笔记</translation> </message> <message> <location filename="../nixnote.cpp" line="540"/> <source>Pinned Notes</source> <translation>已固定笔记</translation> </message> <message> <location filename="../nixnote.cpp" line="542"/> <source>Recently Updated Notes</source> <translation>最近更新笔记</translation> </message> <message> <location filename="../nixnote.cpp" line="1437"/> <location filename="../nixnote.cpp" line="2350"/> <source>Log in to Evernote</source> <translation>登录到Evernote</translation> </message> <message> <location filename="../nixnote.cpp" line="1439"/> <location filename="../nixnote.cpp" line="2352"/> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>NixNote</source> <translation>NixNote</translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <location filename="../nixnote.cpp" line="1761"/> <location filename="../nixnote.cpp" line="1857"/> <source>Error</source> <translation>错误</translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <source>No notes selected.</source> <translation>未选择笔记。</translation> </message> <message> <location filename="../nixnote.cpp" line="1722"/> <source>Backup Database</source> <translation>备份数æ®åº“</translation> </message> <message> <location filename="../nixnote.cpp" line="1724"/> <source>Export Notes</source> <translation>导出笔记</translation> </message> <message> <location filename="../nixnote.cpp" line="1749"/> <source>Performing backup</source> <translation>正在备份</translation> </message> <message> <location filename="../nixnote.cpp" line="1751"/> <source>Performing export</source> <translation>正在导出</translation> </message> <message> <location filename="../nixnote.cpp" line="1768"/> <source>Database backup complete.</source> <translation>æ•°æ®åº“备份完æˆã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="1770"/> <source>Note extract complete.</source> <translation>笔记解压完æˆã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="1796"/> <source>This is used to restore a database from backups. It is HIGHLY recommended that this only be used to populate an empty database. Restoring into a database that already has data can cause problems. Are you sure you want to continue?</source> <translation>这个选项用于从备份æ¢å¤æ•°æ®åº“。 强烈建议åªç”¨äºŽç©ºæ•°æ®åº“,æ¢å¤åˆ°å·²æœ‰æ•°æ®çš„æ•°æ®åº“会导致问题。 确定è¦ç»§ç»­å—?</translation> </message> <message> <location filename="../nixnote.cpp" line="1819"/> <source>NixNote Export (*.nnex);;Evernote Export (*.enex);;All Files (*.*)</source> <translation>NixNote导出格å¼(*.nnex);;Evernote导出格å¼(*.enex);;所有文件(*.*)</translation> </message> <message> <location filename="../nixnote.cpp" line="1846"/> <source>Restoring database</source> <translation>正在æ¢å¤æ•°æ®åº“</translation> </message> <message> <location filename="../nixnote.cpp" line="1848"/> <source>Importing Notes</source> <translation>正在导入笔记</translation> </message> <message> <location filename="../nixnote.cpp" line="1880"/> <source>Database has been restored.</source> <translation>æ•°æ®åº“å·²æ¢å¤ã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="1882"/> <source>Notes have been imported.</source> <translation>笔记已导入。</translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <location filename="../nixnote.cpp" line="1918"/> <source>Sync Error</source> <translation>åŒæ­¥é”™è¯¯</translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <source>Sync completed with errors.</source> <translation>åŒæ­¥å®Œæˆï¼ˆæœ‰é”™è¯¯ï¼‰ã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="1918"/> <source>Sync error. See message log for details</source> <translation>åŒæ­¥å‡ºé”™ã€‚请查看日志信æ¯ä»¥äº†è§£è¯¦æƒ…</translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync Complete</source> <translation>åŒæ­¥å®Œæˆ</translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync completed successfully.</source> <translation>åŒæ­¥å®Œæˆï¼ˆæˆåŠŸï¼‰ã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="2002"/> <source>Untitled note</source> <translation>未命å笔记</translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>Unsynchronized Note</source> <translation>æœªåŒæ­¥ç¬”è®°</translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>This note has never been synchronized with Evernote</source> <translation>该笔记从未和 Evernote è¿›è¡ŒåŒæ­¥</translation> </message> <message> <location filename="../nixnote.cpp" line="3872"/> <source>Error loading Webcam plugin: </source> <translation>加载 Webcam æ’件出错:</translation> </message> <message> <location filename="../nixnote.cpp" line="3887"/> <source>Error loading Hunspell plugin: </source> <translation>加载 Hunspell æ’件出错:</translation> </message> <message> <location filename="../nixnote.cpp" line="3913"/> <location filename="../nixnote.cpp" line="3965"/> <source>PDF Export</source> <translation>PDF 导出</translation> </message> <message> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>Export complete</source> <translation>导出完æˆ</translation> </message> <message> <location filename="../nixnote.cpp" line="3937"/> <source>Exporting Notes as PDF</source> <translation>导出笔记为 PDF</translation> </message> <message> <location filename="../nixnote.cpp" line="3938"/> <source>Exporting notes as PDF</source> <translation>导出笔记为 PDF</translation> </message> <message> <source>This feature is only available to premium users.</source> <translation type="vanished">此功能仅付费用户å¯ç”¨ã€‚</translation> </message> <message> <source>Premium Feature</source> <translation type="vanished">高级功能</translation> </message> <message> <location filename="../nixnote.cpp" line="2391"/> <location filename="../nixnote.cpp" line="2398"/> <source>Error retrieving note.</source> <translation>检索笔记错误。</translation> </message> <message> <location filename="../nixnote.cpp" line="2392"/> <location filename="../nixnote.cpp" line="2399"/> <source>Error retrieving note</source> <translation>检索笔记错误</translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <location filename="../nixnote.cpp" line="2431"/> <source>Note Restored</source> <translation>笔记已æ¢å¤</translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <source>A new copy has been restored.</source> <translation>å·²æ¢å¤äº†ä¸€ä¸ªæ–°çš„副本。</translation> </message> <message> <location filename="../nixnote.cpp" line="2431"/> <source>Note successfully restored.</source> <translation>笔记æˆåŠŸæ¢å¤ã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="2434"/> <source>Note restored</source> <translation>笔记已æ¢å¤</translation> </message> <message> <source>No versions of this note can be found.</source> <translation type="vanished">未找到此笔记的旧版本。</translation> </message> <message> <source>Note Not Found</source> <translation type="vanished">未找到笔记</translation> </message> <message> <location filename="../nixnote.cpp" line="2650"/> <source>Note not found.</source> <translation>未找到笔记。</translation> </message> <message> <location filename="../nixnote.cpp" line="3054"/> <source>Switch to </source> <translation>切æ¢åˆ°</translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex Database</source> <translation>é‡å»ºæ•°æ®åº“索引</translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex the entire database?</source> <translation>é‡å»ºæ•´ä¸ªæ•°æ®åº“的索引?</translation> </message> <message> <location filename="../nixnote.cpp" line="3247"/> <source>Notes will be reindexed.</source> <translation>ç¬”è®°å°†é‡æ–°ç´¢å¼•。</translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Plugin Error</source> <translation>æ’件错误</translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Webcam plugin not found or could not be loaded</source> <translation>Webcam æ’件未找到或无法加载</translation> </message> <message> <location filename="../nixnote.cpp" line="3281"/> <source>Unable to find webcam or capture image.</source> <translation>无法找到摄åƒå¤´æˆ–æ•获图åƒã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="3282"/> <source>Webcam Error</source> <translation>æ‘„åƒå¤´é”™è¯¯</translation> </message> <message> <location filename="../nixnote.cpp" line="3432"/> <source>Note Reindexed</source> <translation>ç¬”è®°å·²é‡æ–°ç´¢å¼•</translation> </message> <message> <location filename="../nixnote.cpp" line="3444"/> <source>Delete </source> <translation>删除</translation> </message> <message> <location filename="../nixnote.cpp" line="3447"/> <source>Permanently delete </source> <translation>永久删除</translation> </message> <message> <location filename="../nixnote.cpp" line="3451"/> <source>this note?</source> <translation>这个笔记?</translation> </message> <message> <location filename="../nixnote.cpp" line="3455"/> <source>Verify Delete</source> <translation>删除确认</translation> </message> <message> <location filename="../nixnote.cpp" line="3816"/> <source>Press ESC to exit.</source> <translation>按ESC退出。</translation> </message> <message> <source>Error loading plugin: </source> <translation type="vanished">加载æ’件出错:</translation> </message> </context> <context> <name>NoteFormatter</name> <message> <location filename="../html/noteformatter.cpp" line="657"/> <source>File</source> <translation>文件</translation> </message> <message> <location filename="../html/noteformatter.cpp" line="691"/> <source>Bytes</source> <translation>Bytes</translation> </message> <message> <location filename="../html/noteformatter.cpp" line="695"/> <source>KB</source> <translation>KB</translation> </message> </context> <context> <name>NoteHistorySelect</name> <message> <location filename="../dialog/notehistoryselect.cpp" line="32"/> <source>Note History</source> <translation>笔记历å²</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="33"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="34"/> <source>Import</source> <translation>导入</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="39"/> <source>Replace current note?</source> <translation>替æ¢å½“å‰ç¬”记?</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="80"/> <source>Current copy on Evernote</source> <translation>当å‰åœ¨ Evernote 处的副本</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="93"/> <source>Today</source> <translation>今天</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="95"/> <source>Yesterday</source> <translation>昨天</translation> </message> </context> <context> <name>NoteProperties</name> <message> <location filename="../dialog/noteproperties.cpp" line="37"/> <source>Note Properties</source> <translation>笔记属性</translation> </message> <message> <location filename="../dialog/noteproperties.cpp" line="38"/> <source>Ok</source> <translation>确定</translation> </message> </context> <context> <name>NotebookProperties</name> <message> <location filename="../dialog/notebookproperties.cpp" line="38"/> <source>Notebook</source> <translation>笔记本</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="42"/> <source>Synchronized</source> <translation>åŒæ­¥</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="46"/> <source>Default</source> <translation>默认</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="52"/> <source>Name</source> <translation>åç§°</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="60"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="62"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="135"/> <source>Add Notebook</source> <translation>添加笔记本</translation> </message> </context> <context> <name>OAuthWindow</name> <message> <location filename="../oauth/oauthwindow.cpp" line="70"/> <source>Please Grant NixNote Access</source> <translation>请授æƒç»™NixNote</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="81"/> <source>SSL Support not found. Aborting connection</source> <translation>未找到SSL支æŒï¼Œç»ˆæ­¢è¿žæŽ¥</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="132"/> <source>Error receiving temporary credentials</source> <translation>接收临时è¯ä¹¦é”™è¯¯</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="176"/> <source>Error receiving permanent credentials</source> <translation>接收永久è¯ä¹¦é”™è¯¯</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="219"/> <source>Error receiving authorization</source> <translation>接收授æƒé”™è¯¯</translation> </message> </context> <context> <name>PopplerViewer</name> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source>Page </source> <translation>第</translation> </message> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source> of </source> <translation>页, å…±</translation> </message> </context> <context> <name>PreferencesDialog</name> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="30"/> <source>User Settings</source> <translation>用户设置</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="49"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="50"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="92"/> <source>Appearance</source> <translation>外观</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="98"/> <source>Locale</source> <translation>本地化</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="104"/> <source>Search</source> <translation>æœç´¢</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="110"/> <source>Sync</source> <translation>åŒæ­¥</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="116"/> <source>Email</source> <translation>邮箱</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="121"/> <source>Thumbnail</source> <translation>缩略图</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="127"/> <source>Advanced</source> <translation>高级</translation> </message> <message> <source>Debugging</source> <translation type="vanished">调试</translation> </message> </context> <context> <name>QApplication</name> <message> <location filename="../dialog/screencapture.cpp" line="108"/> <source>Use your mouse to draw a rectangle to screenshot or exit pressing any key or using the right or middle mouse buttons.</source> <translation>用鼠标画矩形获å–å±å¹•截图,按鼠标中键ã€å³é”®æˆ–键盘任æ„键喿¶ˆã€‚</translation> </message> <message> <location filename="../dialog/screencapture.cpp" line="145"/> <source>%1 x %2 pixels </source> <translation>%1 x %2 åƒç´  </translation> </message> </context> <context> <name>QObject</name> <message> <location filename="../gui/ntableview.cpp" line="175"/> <source>Title</source> <translation>标题</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="176"/> <source>Author</source> <translation>作者</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="177"/> <source>Notebook</source> <translation>笔记本</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="178"/> <source>Tags</source> <translation>标签</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="179"/> <source>Date Created</source> <translation>创建日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="180"/> <source>Date Updated</source> <translation>更新日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="181"/> <source>Subject Date</source> <translation>主题日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="182"/> <source>Deletion Date</source> <translation>删除日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="183"/> <source>Reminder</source> <translation>æé†’</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="184"/> <source>Reminder Due</source> <translation>æé†’日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="185"/> <source>Reminder Completed</source> <translation>å®Œæˆæé†’</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="186"/> <source>Source</source> <translation>æ¥æº</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="187"/> <source>Source URL</source> <translation>æ¥æºURL</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="188"/> <source>Source Application</source> <translation>æ¥æºåº”用</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="189"/> <source>Longitude</source> <translation>ç»åº¦</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="190"/> <source>Latitude</source> <translation>纬度</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="191"/> <source>Altitude</source> <translation>æµ·æ‹”</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="192"/> <source>Has Encryption</source> <translation>包å«åŠ å¯†æ–‡æœ¬</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="193"/> <source>Has To-do</source> <translation>包å«å¾…办事项</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="194"/> <source>Sync</source> <translation>需è¦åŒæ­¥</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="195"/> <source>Size</source> <translation>大å°</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="196"/> <source>Thumbnail</source> <translation>缩略图</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="197"/> <source>Pinned</source> <translation>已固定</translation> </message> </context> <context> <name>ReminderButton</name> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="35"/> <source>Mark as Done</source> <translation>标记未已完æˆ</translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="36"/> <source>Change Date</source> <translation>更改æé†’日期</translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="37"/> <source>Clear Reminder</source> <translation>清除æé†’</translation> </message> </context> <context> <name>ReminderManager</name> <message> <location filename="../reminders/remindermanager.cpp" line="85"/> <source>Reminders Due</source> <translation>æé†’日期</translation> </message> </context> <context> <name>ReminderSetDialog</name> <message> <location filename="../dialog/remindersetdialog.cpp" line="47"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/remindersetdialog.cpp" line="48"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>RemoteQuery</name> <message> <location filename="../filters/remotequery.cpp" line="113"/> <location filename="../filters/remotequery.cpp" line="130"/> <source>Today</source> <translation>今天</translation> </message> </context> <context> <name>SavedSearchProperties</name> <message> <location filename="../dialog/savedsearchproperties.cpp" line="35"/> <source>Saved Search</source> <translation>å·²ä¿å­˜æœç´¢é¡¹</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="42"/> <source>Name</source> <translation>åç§°</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="43"/> <source>Query</source> <translation>关键è¯</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="51"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="53"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="106"/> <source>Add Saved Search</source> <translation>添加已ä¿å­˜çš„æœç´¢é¡¹</translation> </message> </context> <context> <name>SearchPreferences</name> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="36"/> <source>Index Attachments</source> <translation>索引附件</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="44"/> <source>Clear Notebook Selection on Search Text Changes</source> <translation>æœç´¢æ–‡å­—æ”¹å˜æ—¶æ¸…除已选笔记本</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="48"/> <source>Clear Tag Selection on Search Text Changes</source> <translation>æœç´¢æ–‡å­—æ”¹å˜æ—¶æ¸…除已选标签</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="52"/> <source>Clear Search Text on Notebook Changes</source> <translation>ç¬”è®°æœ¬æ”¹å˜æ—¶æ¸…除æœç´¢æ–‡å­—</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="56"/> <source>Show Any Matching Tags When Selecting Multiple Tags</source> <translation>é€‰æ‹©å¤šä¸ªæ ‡ç­¾æ—¶æ˜¾ç¤ºæ‰€æœ‰åŒ¹é…æ ‡ç­¾</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="60"/> <source>Index PDFs locally</source> <translation>在本地索引 PDF</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="64"/> <source>Background Indexing (requires restart & may cause issues on some systems)</source> <translation>åŽå°ç´¢å¼•(需è¦é‡æ–°å¯åŠ¨ï¼›åœ¨æŸäº›ç³»ç»Ÿä¸Šå¯èƒ½å‡ºçŽ°é—®é¢˜ï¼‰</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="68"/> <source>Experimental: Force search to lower case</source> <translation>实验特性:强制使用å°å†™å­—æ¯æœç´¢</translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="73"/> <source>Minimum Image Recognition Weight</source> <translation>最å°å›¾åƒè¯†åˆ«æƒé‡</translation> </message> </context> <context> <name>ShortcutDialog</name> <message> <location filename="../dialog/shortcutdialog.cpp" line="41"/> <source>Defined Shortcuts</source> <translation>已定义快æ·é”®</translation> </message> <message> <location filename="../dialog/shortcutdialog.cpp" line="42"/> <source>Ok</source> <translation>确定</translation> </message> </context> <context> <name>SpellCheckDialog</name> <message> <location filename="../dialog/spellcheckdialog.cpp" line="35"/> <source>Spell Check</source> <translation>拼写检查</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="50"/> <source>Suggestion</source> <translation>拼写建议</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="56"/> <source>Replace</source> <translation>替æ¢</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="57"/> <source>Ignore</source> <translation>忽略</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="58"/> <source>Ignore All</source> <translation>忽略所有</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="59"/> <source>Add To Dictionary</source> <translation>添加到è¯å…¸</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="66"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>SpellChecker</name> <message> <source>Unable to find dictionaries. Is Huntspell installed?</source> <translation type="vanished">无法找到è¯å…¸ã€‚是å¦å·²å®‰è£…Huntspell?</translation> </message> </context> <context> <name>SyncPreferences</name> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="34"/> <source>Sync automatically</source> <translation>è‡ªåŠ¨åŒæ­¥</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="38"/> <source>Every 15 minutes</source> <translation>æ¯15分钟</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="39"/> <source>Every 30 minutes</source> <translation>æ¯30分钟</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="40"/> <source>Every hour</source> <translation>æ¯å°æ—¶</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="41"/> <source>Every day</source> <translation>æ¯å¤©</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="43"/> <source>Sync on startup</source> <translation>å¯åŠ¨æ—¶åŒæ­¥</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="45"/> <source>Sync on shutdown</source> <translation>å…³é—­æ—¶åŒæ­¥</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="47"/> <source>Enable sync notifications</source> <translation>å¯ç”¨åŒæ­¥é€šçŸ¥</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="48"/> <source>Show successful syncs</source> <translation>æ˜¾ç¤ºåŒæ­¥æˆåŠŸ</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="49"/> <source>Restart sync on API limit (experimental)</source> <translation>é‡åˆ° API 次数é™åˆ¶æ—¶é‡å¯åŒæ­¥ï¼ˆå®žéªŒæ€§ï¼‰</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="51"/> <source>Enable Proxy*</source> <translation>使用代ç†</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="52"/> <source>Enable Socks5</source> <translation>å¯ç”¨ Socks5</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="53"/> <source>Proxy Hostname</source> <translation>ä»£ç†æœåС噍</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="54"/> <source>Proxy Port</source> <translation>代ç†ç«¯å£</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="55"/> <source>Proxy Username</source> <translation>用户å</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="56"/> <source>Proxy Password</source> <translation>密ç </translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="57"/> <source>*Note: Restart required</source> <translation>注æ„:需è¦é‡æ–°å¯åЍ</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="73"/> <source>Popup message on sync errors.</source> <translation>åŒæ­¥å‡ºé”™æ—¶å¼¹å‡ºä¿¡æ¯ã€‚</translation> </message> <message> <source>Note: Restart required</source> <translation type="vanished">注æ„ï¼šè¦æ±‚é‡å¯NixNote</translation> </message> </context> <context> <name>SyncRunner</name> <message> <location filename="../threads/syncrunner.cpp" line="134"/> <source>Beginning Sync</source> <translation>å¼€å§‹åŒæ­¥</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="142"/> <source>Downloading changes</source> <translation>正在下载修改</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="192"/> <source>Sync Complete Successfully</source> <translation>åŒæ­¥å®Œæˆï¼ˆæˆåŠŸï¼‰</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <location filename="../threads/syncrunner.cpp" line="267"/> <source>Download </source> <translation>å·²å®Œæˆ </translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <source>% complete for notebooks, tags, & searches.</source> <translation>%çš„ç¬”è®°æœ¬ã€æ ‡ç­¾å’Œæœç´¢é¡¹ä¸‹è½½ã€‚</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="247"/> <source>Download complete for notebooks, tags, & searches. Downloading notes.</source> <translation>ä¸‹è½½ç¬”è®°æœ¬ã€æ ‡ç­¾å’Œæœç´¢é¡¹å®Œæˆã€‚正在下载笔记...</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="267"/> <source>% complete.</source> <translation>% 已完æˆã€‚</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="280"/> <source>Download complete.</source> <translation>下载完æˆã€‚</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>Downloading </source> <translation>正在下载</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <source>% complete for tags in shared notebook </source> <translation>% 的标签,æ¥è‡ªå…±äº«ç¬”记本</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="721"/> <source>Downloading notes for shared notebook </source> <translation>正在下载笔记,æ¥è‡ªå…±äº«ç¬”记本</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="743"/> <source>% complete for shared notebook </source> <translation>% 已完æˆï¼Œæ¥è‡ªå…±äº«ç¬”记本</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1149"/> <source>Error uploading note:</source> <translation>上传笔记出错:</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1151"/> <source>Error uploading note with a missing title!</source> <translation>上传笔记出错,没有标题ï¼</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="721"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>.</source> <translation>。</translation> </message> </context> <context> <name>TableDialog</name> <message> <location filename="../dialog/tabledialog.cpp" line="30"/> <source>Insert Table</source> <translation>æ’入表格</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="34"/> <source>Percent</source> <translation>百分比</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="35"/> <source>Pixels</source> <translation>åƒç´ </translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="51"/> <source>Rows</source> <translation>行</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="53"/> <source>Columns</source> <translation>列</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="55"/> <source>Width</source> <translation>宽度</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="57"/> <source>Unit</source> <translation>å•ä½</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="64"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="67"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>TablePropertiesDialog</name> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="72"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="105"/> <source>Table Properties</source> <translation>表格属性</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="86"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="87"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="106"/> <source>Cell Properties</source> <translation>å•元格属性</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="214"/> <source>Row 1 Cell 1</source> <translation>行 1 å•元格 1</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="216"/> <source>Row 1 Cell 2</source> <translation>行 1 å•元格 2</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="218"/> <source>Row 1 Cell 3</source> <translation>行 1 å•元格 3</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="220"/> <source>Row 2 Cell 1</source> <translation>行 2 å•元格 1</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="222"/> <source>Row 2 Cell 2</source> <translation>行 2 å•元格 2</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="224"/> <source>Row 2 Cell 3</source> <translation>行 2 å•元格 3</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="226"/> <source>Row 3 Cell 1</source> <translation>行 3 å•元格 1</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="228"/> <source>Row 3 Cell 2</source> <translation>行 3 å•元格 2</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="230"/> <source>Row 3 Cell 3</source> <translation>行 3 å•元格 3</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="456"/> <source>Width</source> <translation>宽度</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="464"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="480"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="494"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="511"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="526"/> <source>Percent</source> <translation>百分比</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="465"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="479"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="493"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="510"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="525"/> <source>Pixels</source> <translation>åƒç´ </translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="476"/> <source>Top Margin</source> <translation>顶部 margin</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="490"/> <source>Bottom Margin</source> <translation>底部 margin</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="507"/> <source>Left Margin</source> <translation>左侧 margin</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="522"/> <source>Right Margin</source> <translation>å³ä¾§ margin</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="560"/> <source>Border Color</source> <translation>边框颜色</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="561"/> <source>Font Color</source> <translation>字体颜色</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="562"/> <source>Background Color</source> <translation>背景颜色</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="576"/> <source>Border Size</source> <translation>边框大å°</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="587"/> <source>Padding</source> <translation>填充(padding)</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="597"/> <source>Top Border</source> <translation>顶部边框</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="606"/> <source>Bottom Border</source> <translation>底部边框</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="615"/> <source>Left Border</source> <translation>左侧边框</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="624"/> <source>Right Border</source> <translation>å³ä¾§è¾¹æ¡†</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="636"/> <source>Horizontal Alignment</source> <translation>水平对é½</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="641"/> <source>Default</source> <translation>默认</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="642"/> <source>Left</source> <translation>左对é½</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="643"/> <source>Right</source> <translation>å³å¯¹é½</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="644"/> <source>Center</source> <translation>居中</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="676"/> <source>Solid</source> <translation>实线</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="677"/> <source>None</source> <translation>æ— </translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="678"/> <source>Dotted</source> <translation>点状</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="679"/> <source>Dashed</source> <translation>虚线</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="680"/> <source>Double</source> <translation>åŒçº¿</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="681"/> <source>Ridge</source> <translation>垄状</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="682"/> <source>Inset</source> <translation>阴文(Inset)</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="683"/> <source>Outset</source> <translation>阳文(Outset)</translation> </message> </context> <context> <name>TagEditorNewTag</name> <message> <location filename="../gui/browserWidgets/tageditornewtag.cpp" line="55"/> <source>Click to add tag...</source> <translation>点击添加标签...</translation> </message> </context> <context> <name>TagProperties</name> <message> <location filename="../dialog/tagproperties.cpp" line="36"/> <source>Tag</source> <translation>标签</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="42"/> <source>Name</source> <translation>åç§°</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="48"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="50"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="102"/> <source>Add Tag</source> <translation>添加标签</translation> </message> </context> <context> <name>ThumbnailPreferences</name> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="14"/> <source>Disable thumbnail generation</source> <translation>ç¦ç”¨ç¼©ç•¥å›¾è‡ªåŠ¨ç”Ÿæˆ</translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="15"/> <source>Images to generate per interval</source> <translation>æ¯æ¬¡ç”Ÿæˆå›¾åƒæ•°é‡</translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="16"/> <source>Minimum scan interval (in seconds)</source> <translation>æœ€å°æ‰«æå‘¨æœŸï¼ˆç§’)</translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="17"/> <source>Maximum scan interval (in seconds)</source> <translation>最大扫æå‘¨æœŸï¼ˆç§’)</translation> </message> </context> <context> <name>UrlEditor</name> <message> <location filename="../gui/browserWidgets/urleditor.cpp" line="45"/> <source>Click to set source URL...</source> <translation>ç‚¹å‡»è®¾ç½®æ¥æºURL...</translation> </message> </context> <context> <name>WatchFolderAdd</name> <message> <location filename="../dialog/watchfolderadd.cpp" line="47"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="51"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="55"/> <source>Directory</source> <translation>目录</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="63"/> <source>Keep</source> <translation>ä¿ç•™</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="64"/> <source>Delete</source> <translation>删除</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="90"/> <source>Notebook</source> <translation>笔记本</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="92"/> <source>After import</source> <translation>导入åŽ</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="94"/> <source>Include subdirectories</source> <translation>包å«å­ç›®å½•</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="101"/> <source>Add Import Folder</source> <translation>添加导入文件夹</translation> </message> </context> <context> <name>WatchFolderDialog</name> <message> <location filename="../dialog/watchfolderdialog.cpp" line="38"/> <source>OK</source> <translation>确定</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="42"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="50"/> <source>Auto Import Folders</source> <translation>自动导入文件夹</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="62"/> <source>Add</source> <translation>添加</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="66"/> <source>Edit</source> <translation>编辑</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="71"/> <location filename="../dialog/watchfolderdialog.cpp" line="162"/> <source>Delete</source> <translation>删除</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="112"/> <source>Directory</source> <translation>目录</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="113"/> <source>Target Notebook</source> <translation>目标笔记本</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="114"/> <location filename="../dialog/watchfolderdialog.cpp" line="159"/> <source>Keep</source> <translation>ä¿ç•™</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="115"/> <source>Include Subdirectories</source> <translation>包å«å­ç›®å½•</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="169"/> <source>Yes</source> <translation>是</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="172"/> <source>No</source> <translation>å¦</translation> </message> </context> </TS> �������������������������������������������������������������������������������nixnote2-2.0.2/translations/nixnote2_zh_TW.ts�������������������������������������������������������0000664�0000000�0000000�00000615334�13156041044�0021245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="zh_TW"> <context> <name>AboutDialog</name> <message> <location filename="../dialog/aboutdialog.cpp" line="36"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/aboutdialog.cpp" line="53"/> <source>Note to translators: For translation credit, change this message to your name & contact information and it will appear in the About dialog box. HTML Formatting is available.</source> <translation><span align="center"><p>正體中文翻譯:Iridium Cao, 2016。<br> 有任何翻譯å•題,請賜教ï¼<br> 電郵:<i>iridiumcao@gmail.com</i>。</p></span></translation> </message> </context> <context> <name>AccountDialog</name> <message> <location filename="../dialog/accountdialog.cpp" line="37"/> <source>Account Information</source> <translation>帳戶資訊</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="40"/> <source>Normal</source> <translation>å…è²»</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="46"/> <source>Premium</source> <translation>標準</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="48"/> <source>VIP</source> <translation>高階</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="50"/> <source>Manager</source> <translation>管ç†</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="52"/> <source>Support</source> <translation>支æ´</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="54"/> <source>Admin</source> <translation>管ç†å“¡</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="75"/> <source> Bytes</source> <translation> Bytes</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="79"/> <source> KB</source> <translation> KB</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="83"/> <source> MB</source> <translation> MB</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="90"/> <source>Account:</source> <translation>使用者å稱:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="93"/> <source>User Name:</source> <translation>å…¨å:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="95"/> <source>Account Type:</source> <translation>帳戶層級:</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="97"/> <source>Limit:</source> <translation>æµé‡é™é¡ï¼š</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="99"/> <source>Uploaded In This Period:</source> <translation>本期已上載æµé‡</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="103"/> <source>Less than 1MB</source> <translation>å°æ–¼1MB</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="104"/> <source>Current Cycle Ends:</source> <translation>æœ¬æœŸçµæŸæ—¥æœŸï¼š</translation> </message> <message> <location filename="../dialog/accountdialog.cpp" line="112"/> <source>OK</source> <translation>確定</translation> </message> </context> <context> <name>AccountMaintenanceDialog</name> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="34"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="35"/> <source>Close</source> <translation>關閉</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="36"/> <source>Add</source> <translation>新增</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="37"/> <source>Rename</source> <translation>é‡å‘½å</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="38"/> <source>Delete</source> <translation>刪除</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="64"/> <source>User Account Maintenance</source> <translation>用戶帳戶管ç†</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="104"/> <source>Are you sure you want to delete this account?</source> <translation>確定刪除該帳戶?</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="105"/> <source>Verify Delete</source> <translation>確定刪除</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="117"/> <source>You cannot delete the active account.</source> <translation>ä¸èƒ½åˆªé™¤ç•¶å‰å¸³æˆ¶ã€‚</translation> </message> <message> <location filename="../dialog/accountmaintenancedialog.cpp" line="170"/> <location filename="../dialog/accountmaintenancedialog.cpp" line="194"/> <source>Switch to </source> <translation>切æ›åˆ°</translation> </message> </context> <context> <name>AddNote</name> <message> <location filename="../cmdtools/addnote.cpp" line="33"/> <source>Untitled Note</source> <translation>未命å記事</translation> </message> </context> <context> <name>AddUserAccountDialog</name> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="38"/> <source>Server</source> <translation>伺æœå™¨å稱</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="39"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="41"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="46"/> <source>Account Name</source> <translation>帳戶å</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="69"/> <source>Evernote</source> <translation>Evernote 國際版</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="70"/> <source>Yinxiang Biji</source> <translation>å°è±¡ç­†è¨˜</translation> </message> <message> <location filename="../dialog/adduseraccountdialog.cpp" line="71"/> <source>Evernote Sandbox</source> <translation>Evernote 沙箱</translation> </message> </context> <context> <name>AppearancePreferences</name> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="39"/> <source>Show tray icon</source> <translation>顯示托盤圖標</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="40"/> <source>Display PDFs inline**</source> <translation>行內顯示PDF**</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="41"/> <source>Show splash screen on startup</source> <translation>系統登陸時自動啓動</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="42"/> <source>Start automatically at login</source> <translation>系統啓動時自動啓動</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="43"/> <source>Confirm Deletes</source> <translation>刪除時確èª</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="44"/> <source>Show missed reminders on startup</source> <translation>啓動時顯示未處ç†çš„æé†’事項</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="45"/> <source>Always Start minimized</source> <translation>啓動時最å°åŒ–</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="46"/> <source>Show notebook and tag totals</source> <translation>顯示記事本和標籤數é‡</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="47"/> <source>Auto-Hide editor toolbar</source> <translation>自動隱è—編輯工具欄</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="49"/> <source>Disable note editing on statup</source> <translation>啓動時ç¦ç”¨è¨˜äº‹ç·¨è¼¯</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="50"/> <source>Focus on Note Title on New Note</source> <translation>æ–°å¢žè¨˜äº‹æ™‚å…‰æ¨™ä½æ–¼è¨˜äº‹æ¨™é¡Œ</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="51"/> <source>Limit Editor to Web Fonts*</source> <translation>編輯器åªä½¿ç”¨Webå­—åž‹*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="53"/> <source>Show note list grid*</source> <translation>顯示記事列表網格*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="54"/> <source>Alternate note list colors*</source> <translation>替æ›è¨˜äº‹åˆ—表é¡è‰²*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="55"/> <source>Set author on new notes.</source> <translation>新增記事時自動設置作者。</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="57"/> <source>Preview fonts in editor dialag*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="61"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="68"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="75"/> <source>Do Nothing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="62"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="69"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="76"/> <source>Show/Hide NixNote</source> <translation>顯示/éš±è— NixNote</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="63"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="70"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="77"/> <source>New Text Note</source> <translation>新文本記事</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="64"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="71"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="78"/> <source>New Quick Note</source> <translation>æ–°å¿«æ·è¨˜äº‹</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="65"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="72"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="79"/> <source>Screen Capture</source> <translation>æ“·å–螢幕截圖</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="82"/> <source>Open New Tab</source> <translation>在新的標籤é é–‹å•“</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="83"/> <source>Open New Window</source> <translation>在新的窗å£é–‹å•“</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="98"/> <source>Qt Default</source> <translation>Qt 缺çœ</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="99"/> <source>notify-send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="106"/> <source>Startup Behavior</source> <translation>啓動時</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="108"/> <source>Restore Selection Criteria</source> <translation>æ¢å¾©ä¸Šæ¬¡é–‹å•“的記事</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="109"/> <source>Select Default Notebook</source> <translation>開啓缺çœè¨˜äº‹</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="110"/> <source>View All Notebooks</source> <translation>ç€è¦½æ‰€æœ‰è¨˜äº‹æœ¬</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="120"/> <source>Minimize to tray</source> <translation>最å°åŒ–到托盤</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="121"/> <source>Close to tray</source> <translation>從托盤關閉</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="143"/> <source>Notification Service</source> <translation>通知æœå‹™</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="146"/> <source>Middle Click Open Behavior</source> <translation>中éµå–®æ“Šè¨˜äº‹</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="149"/> <source>Tray Icon Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="152"/> <source>Tray Icon Middle Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="155"/> <source>Tray Icon Double Click Action</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="158"/> <source>Default GUI Font*</source> <translation>缺çœé¡¯ç¤ºå­—é«”*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="161"/> <source>Default GUI Font Size*</source> <translation>缺çœé¡¯ç¤ºå­—號*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="164"/> <source>Default Editor Font*</source> <translation>缺çœç·¨è¼¯å­—é«”*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="167"/> <source>Default Editor Font Size*</source> <translation>缺çœç·¨è¼¯å­—號*</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="171"/> <source>* May require restart on some systems.</source> <translation>* 在æŸäº›ä½œæ¥­ç³»çµ±ä¸­å¯èƒ½éœ€è¦é‡å•“ NixNote æ‰èƒ½ç”Ÿæ•ˆã€‚</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="172"/> <source>** Can crash on Gnome systems.</source> <translation>** 在 Gnome 中å¯èƒ½å´©æ½°ã€‚</translation> </message> <message> <location filename="../dialog/preferences/appearancepreferences.cpp" line="102"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="405"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="423"/> <location filename="../dialog/preferences/appearancepreferences.cpp" line="442"/> <source>System Default</source> <translation>系統缺çœ</translation> </message> </context> <context> <name>AttachmentIconBuilder</name> <message> <location filename="../html/attachmenticonbuilder.cpp" line="74"/> <source>Bytes</source> <translation>Bytes</translation> </message> <message> <location filename="../html/attachmenticonbuilder.cpp" line="78"/> <source>KB</source> <translation>KB</translation> </message> </context> <context> <name>AuthorEditor</name> <message> <location filename="../gui/browserWidgets/authoreditor.cpp" line="37"/> <source>Click to set author</source> <translation>點擊設置作者</translation> </message> </context> <context> <name>BatchImport</name> <message> <location filename="../xml/batchimport.cpp" line="112"/> <source>Untitled Note</source> <translation>未命å記事</translation> </message> </context> <context> <name>CloseNotebookDialog</name> <message> <location filename="../dialog/closenotebookdialog.cpp" line="37"/> <source>Open/Close Notebooks</source> <translation>é–‹å•“/關閉記事本</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="42"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="43"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="56"/> <source>Open Notebooks</source> <translation>開啟記事本</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="57"/> <source>Closed Notebooks</source> <translation>關閉記事本</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="59"/> <source>Open</source> <translation>開啟</translation> </message> <message> <location filename="../dialog/closenotebookdialog.cpp" line="60"/> <source>Close</source> <translation>關閉</translation> </message> </context> <context> <name>CmdLineQuery</name> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="67"/> <source>ID</source> <translation>ID</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="69"/> <source>Title</source> <translation>標題</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="72"/> <source>Notebook</source> <translation>記事本</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="75"/> <source>Tags</source> <translation>標籤</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="78"/> <source>Created</source> <translation>建立</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="81"/> <source>Updated</source> <translation>æ›´æ–°</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="84"/> <source>Sync</source> <translation>åŒæ­¥</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="87"/> <source>Source URL</source> <translation>æº URL</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="90"/> <source>Author</source> <translation type="unfinished">作者</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="93"/> <source>Todo</source> <translation>待辦事項</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="96"/> <source>Reminder Due</source> <translation>æé†’日期</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="99"/> <source>Reminder Done</source> <translation>æé†’完æˆ</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="181"/> <location filename="../cmdtools/cmdlinequery.cpp" line="190"/> <source>No</source> <translation>å¦</translation> </message> <message> <location filename="../cmdtools/cmdlinequery.cpp" line="183"/> <location filename="../cmdtools/cmdlinequery.cpp" line="188"/> <source>Yes</source> <translation>是</translation> </message> </context> <context> <name>CmdLineTool</name> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="56"/> <source>Unable to attach to shared memory segment. Is the other NixNote running? </source> <translation>ç„¡æ³•é€£æŽ¥åˆ°å…±äº«è¨˜æ†¶é«”ã€‚è«‹ç¢ºä¿ NixNote 正在é‹è¡Œï¼</translation> </message> <message> <source>Type DELETE to very: </source> <translation type="vanished">確èªåˆªé™¤é¡žåž‹</translation> </message> <message> <source>No resospnse received from NixNote.</source> <translation type="vanished">未收到 NixNote 的響應。</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="315"/> <location filename="../cmdtools/cmdlinetool.cpp" line="452"/> <source> has been created. </source> <translation>已創建。</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="318"/> <source>No response from NixNote. Please verify that the note was created. </source> <translation>NixNote 未響應,請確èªè¨˜äº‹æ˜¯å¦å·²å‰µå»ºã€‚</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="332"/> <source>Untitled Note</source> <translation>未命å記事</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="535"/> <source> was not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="538"/> <location filename="../cmdtools/cmdlinetool.cpp" line="609"/> <source> has been appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="541"/> <source>No response from NixNote. Please verify that the note was appended. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="552"/> <source> was not found. </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="221"/> <location filename="../cmdtools/cmdlinetool.cpp" line="654"/> <source>No response received from NixNote.</source> <translation>未收到 NixNote 的響應。</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="156"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="663"/> <source>Note not found.</source> <translation>未找到記事。</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="674"/> <location filename="../cmdtools/cmdlinetool.cpp" line="690"/> <location filename="../cmdtools/cmdlinetool.cpp" line="722"/> <location filename="../cmdtools/cmdlinetool.cpp" line="742"/> <source>This cannot be done with NixNote running.</source> <translation>NixNote 正在é‹è¡Œï¼Œç„¡æ³•å®Œæˆæ“作。</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="732"/> <location filename="../cmdtools/cmdlinetool.cpp" line="752"/> <source>Notebook not found: </source> <translation>未找到記事:</translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="765"/> <source>OAuth token not found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="783"/> <source>Error synchronizing with Evernote.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/cmdlinetool.cpp" line="786"/> <source>Sync completed.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ColorSettings</name> <message> <location filename="../settings/colorsettings.cpp" line="37"/> <source>White</source> <translation>白</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="38"/> <source>Red</source> <translation>ç´…</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="39"/> <source>Blue</source> <translation>è—</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="40"/> <source>Green</source> <translation>ç¶ </translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="41"/> <source>Yellow</source> <translation>黃</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="42"/> <source>Black</source> <translation>黑</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="43"/> <source>Purple</source> <translation>ç´«</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="44"/> <source>Brown</source> <translation>棕</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="45"/> <source>Orange</source> <translation>æ©™</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="46"/> <source>Grey</source> <translation>ç°</translation> </message> <message> <location filename="../settings/colorsettings.cpp" line="47"/> <source>Powder Blue</source> <translation>æ·ºè—</translation> </message> </context> <context> <name>CommunicationManager</name> <message> <location filename="../communication/communicationmanager.cpp" line="675"/> <source>Linked notebook notestore URL missing.</source> <translation>è¨˜äº‹ç¼ºå¤±ç”¨æ–¼éˆæŽ¥çš„ URL。</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source>API rate limit exceeded. Please try again in </source> <translation>API 比例超é™ï¼Œè«‹æ–¼ä»¥ä¸‹æ™‚é–“é‡è©¦ï¼š</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1200"/> <source> minutes.</source> <translation>分é˜ã€‚</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1202"/> <source> minute.</source> <translation>分é˜ã€‚</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1206"/> <source>EDAMSystemException </source> <translation>EDAMSystemException </translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1208"/> <source>EDAMSystemException: Unknown error</source> <translation>EDAMSystemException: 未知錯誤</translation> </message> <message> <location filename="../communication/communicationmanager.cpp" line="1232"/> <source>EDAMNotFoundException: Note not found</source> <translation>EDAMNotFoundException: 記事未找到</translation> </message> </context> <context> <name>DatabaseStatus</name> <message> <location filename="../dialog/databasestatus.cpp" line="35"/> <source>Database Status</source> <translation>資料庫狀態</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="47"/> <source>Total Notes:</source> <translation>標籤總數:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="49"/> <source>Total Resources:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="51"/> <source>Unindexed Notes:</source> <translation type="unfinished">未索引記事:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="53"/> <source>Unindexed Resources:</source> <translation type="unfinished">ä½ç´¢å¼•資æºï¼š</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="55"/> <source>Thumbnails Needed:</source> <translation>縮略圖數:</translation> </message> <message> <location filename="../dialog/databasestatus.cpp" line="60"/> <source>OK</source> <translation>確定</translation> </message> </context> <context> <name>DateDelegate</name> <message> <location filename="../gui/datedelegate.cpp" line="42"/> <source>Today</source> <translation>今日</translation> </message> </context> <context> <name>DateEditor</name> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="38"/> <source>Created:</source> <translation>建立:</translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="42"/> <source>Updated:</source> <translation>更新:</translation> </message> <message> <location filename="../gui/browserWidgets/dateeditor.cpp" line="46"/> <source>Subject:</source> <translation>標題:</translation> </message> </context> <context> <name>DebugPreferences</name> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="38"/> <source>Disable image search highlighting.</source> <translation>ç¦ç”¨åœ–åƒæœç´¢é«˜äº®ã€‚</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="35"/> <source>Strict note checking.</source> <translation>精確的記事檢查。</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="37"/> <source>Disable uploads to server.</source> <translation>ç¦ç”¨ä¸Šè¼‰åˆ°ä¼ºæœå™¨ã€‚</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="39"/> <source>Show LID column (requires restart).</source> <translation>顯示 LID 列(需é‡å•“)。</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="40"/> <source>Disable Tag Sorting (useful for non-ASCII sort bug).</source> <translation>ç¦ç”¨æ¨™ç±¤æŽ’åºï¼ˆå°éž ASCII å­—ç¬¦æŽ’åº bug 有效)。</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="41"/> <source>Force UTF8 Encoding.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="59"/> <source>Intercept Unix SIGHUP (requires restart).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="64"/> <source>Use multipe theads to save note contents (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="68"/> <source>Use libtidy directly (experimental).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="72"/> <source>Auto-Save Interval (in seconds).</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="79"/> <source>Message Level</source> <translation>訊æ¯ç­‰ç´š</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="82"/> <source>Trace</source> <translation>記錄</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="83"/> <source>Debug</source> <translatorcomment>查錯</translatorcomment> <translation>Debug</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="84"/> <source>Info</source> <translation>訊æ¯</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="85"/> <source>Warnings</source> <translation>警告</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="86"/> <source>Errors</source> <translation>錯誤</translation> </message> <message> <location filename="../dialog/preferences/debugpreferences.cpp" line="87"/> <source>Fatal</source> <translation>致命錯誤</translation> </message> </context> <context> <name>EditorButtonBar</name> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="37"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="133"/> <source>Undo</source> <translation>復原</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="38"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="137"/> <source>Redo</source> <translation>é‡åš</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="39"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="142"/> <source>Cut</source> <translation>剪下</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="40"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="146"/> <source>Copy</source> <translation>複製</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="41"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="150"/> <source>Paste</source> <translation type="unfinished">貼上</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="42"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="153"/> <source>Remove Formatting</source> <translation>移除格å¼</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="43"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="159"/> <source>Bold</source> <translation>ç²—é«”</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="44"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="166"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="167"/> <source>Italics</source> <translation>斜體</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="45"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="184"/> <source>Superscript</source> <translation>上標</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="46"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="188"/> <source>Subscript</source> <translation>下標</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="47"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="174"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="175"/> <source>Underline</source> <translation>底線</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="48"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="180"/> <source>Strikethrough</source> <translation>刪除線</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="49"/> <source>Align Left</source> <translation>é å·¦å°é½Š</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="50"/> <source>Align Center</source> <translation>置中</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="51"/> <source>Align Full</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="52"/> <source>Align Right</source> <translation>é å³å°é½Š</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="53"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="208"/> <source>Horizontal Line</source> <translation>水平尺è¦</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="54"/> <source>Insert Date && Time</source> <translation type="unfinished">æ’入日期</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="55"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="220"/> <source>Shift Right</source> <translation>增加縮排</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="56"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="224"/> <source>Shift Left</source> <translation>減å°ç¸®æŽ’</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="57"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="228"/> <source>Bullet List</source> <translation>項目符號清單</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="58"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="232"/> <source>Number List</source> <translation>編號清單</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="59"/> <source>Font</source> <translation>å­—åž‹</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="60"/> <source>Font Size</source> <translation>文字大å°</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="61"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="248"/> <source>Font Color</source> <translation>文字é¡è‰²</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="62"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="257"/> <source>Highlight</source> <translation>熒光筆</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="63"/> <source>To-do</source> <translation>æ’å…¥æ ¸å–æ–¹å¡Š</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="192"/> <source>Center Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="196"/> <source>Fully Justify</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="214"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="215"/> <source>Insert Date & Time</source> <translation>æ’入日期</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="262"/> <source>Todo</source> <translation>待辦</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="64"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="266"/> <source>Spell Check</source> <translation>拼字檢查</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="65"/> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="270"/> <source>Insert Table</source> <translation>æ’入表格</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="66"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="204"/> <source>Left Justify</source> <translation>é å·¦å°é½Š</translation> </message> <message> <source>Center</source> <translation type="vanished">置中</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="200"/> <source>Right Justify</source> <translation>é å³å°é½Š</translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="274"/> <source>Insert HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/editorbuttonbar.cpp" line="661"/> <source>Times</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EmailDialog</name> <message> <location filename="../dialog/emaildialog.cpp" line="36"/> <source>Send Email</source> <translation>é›»å­éƒµä»¶</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="38"/> <source>Send</source> <translation>傳é€</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="39"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="51"/> <source>To:</source> <translation>收件人:</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="53"/> <source>BCC:</source> <translation>æš—é€ï¼š</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="55"/> <source>CC:</source> <translation>抄é€ï¼š</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="57"/> <source>Subject:</source> <translation>主旨:</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="59"/> <source>Note:</source> <translation>記事:</translation> </message> <message> <location filename="../dialog/emaildialog.cpp" line="77"/> <source>CC me on this email</source> <translation>æ­¤å°é›»å­éƒµä»¶å¯„é€å‰¯æœ¬çµ¦æˆ‘</translation> </message> </context> <context> <name>EmailNote</name> <message> <location filename="../cmdtools/emailnote.cpp" line="261"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation>SMTP 伺æœå™¨æœªè¨­ç½®ã€‚請轉到屬性èœå–®è¨­ç½®ã€‚</translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="327"/> <source>Connection Error: Unable to connect to host.</source> <translation>網路連接錯誤:無法連接到伺æœå™¨ã€‚</translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="333"/> <source>Login Error : Unable to login.</source> <translation>登錄錯誤:無法登錄</translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="338"/> <source>Send Error : Unable to send email.</source> <translation>傳é€éŒ¯èª¤ï¼šç„¡æ³•傳é€</translation> </message> <message> <location filename="../cmdtools/emailnote.cpp" line="344"/> <source>Message Sent</source> <translation>é›»å­éƒµä»¶å·²å‚³é€æˆåŠŸã€‚</translation> </message> </context> <context> <name>EmailPreferences</name> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="17"/> <source>SMTP Server</source> <translation>SMTP 伺æœå™¨</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="18"/> <source>Server Port</source> <translation>伺æœå™¨ç«¯å£</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="19"/> <source>Userid</source> <translation type="unfinished">帳號</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="20"/> <source>Password</source> <translation>密碼</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="21"/> <source>Sender Display Name</source> <translation>傳é€è€…å稱顯示</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="22"/> <source>Sender Email</source> <translation>傳é€è€…電郵</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="23"/> <source>Connection Type</source> <translation>連接類型</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="31"/> <source>Plain Text</source> <translation>純文本</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="32"/> <source>SSL Connection</source> <translation>SSL 連接</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="33"/> <source>TLS Connection</source> <translation>TLS 連接</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="35"/> <source>Send Test Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="108"/> <location filename="../dialog/preferences/emailpreferences.cpp" line="113"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="109"/> <source>You must specify a SMTP server.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="114"/> <source>You must specify a sender email.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="146"/> <source>Test Email From NixNote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="152"/> <source><h1>This is a test email from NixNote.</h1> </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="153"/> <source>If you are reading it then your email preferences are are setup properly.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Connection Error</source> <translation type="unfinished">連接錯誤</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="167"/> <source>Unable to connect to host.</source> <translation type="unfinished">無法連接到主機</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Login Error</source> <translation type="unfinished">登錄錯誤</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="173"/> <source>Unable to login.</source> <translation type="unfinished">無法登錄</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="178"/> <source>Unable to send email.</source> <translation type="unfinished">無法發é€é›»éƒµã€‚</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message Sent</source> <translation type="unfinished">é›»å­éƒµä»¶å·²å‚³é€æˆåŠŸã€‚</translation> </message> <message> <location filename="../dialog/preferences/emailpreferences.cpp" line="185"/> <source>Message sent.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>EnCryptDialog</name> <message> <location filename="../dialog/encryptdialog.cpp" line="31"/> <source>Encrypt Text</source> <translation>文字加密</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="47"/> <source>Password</source> <translation>密碼</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="49"/> <source>Verify</source> <translation>確èª</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="51"/> <source>Hint</source> <translation>æç¤º</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="53"/> <source>Remember Password</source> <translation>記ä½å¯†ç¢¼</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="61"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="65"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="113"/> <source>Password must be at least 4 characters</source> <translation>密碼至少需è¦4個字</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="117"/> <source>Passwords do not match</source> <translation>密碼å‰å¾Œä¸ç¬¦</translation> </message> <message> <location filename="../dialog/encryptdialog.cpp" line="121"/> <source>Hint must be entered</source> <translation>必須輸入æç¤º</translation> </message> </context> <context> <name>EnDecryptDialog</name> <message> <location filename="../dialog/endecryptdialog.cpp" line="35"/> <source>Decrypt</source> <translation>解密</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="51"/> <source>Password</source> <translation>密碼</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="52"/> <source>Hint</source> <translation>æç¤º</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="59"/> <source>Permanently Decrypt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="61"/> <source>Remember Password</source> <translation type="unfinished">記ä½å¯†ç¢¼</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="66"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/endecryptdialog.cpp" line="70"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>ExportData</name> <message> <location filename="../xml/exportdata.cpp" line="54"/> <source>Cannot open file.</source> <translation>ä¸èƒ½é–‹å•“檔案。</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="62"/> <source>Export</source> <translation>匯出</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="81"/> <source>Backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="114"/> <source>Tags</source> <translation>標籤</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="151"/> <source>Notebooks</source> <translation>記事本</translation> </message> <message> <location filename="../xml/exportdata.cpp" line="360"/> <source>Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="405"/> <source>Linked Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="448"/> <source>Shared Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="508"/> <source>Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/exportdata.cpp" line="725"/> <source>Backup Canceled</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExternalBrowse</name> <message> <location filename="../gui/externalbrowse.cpp" line="32"/> <source>NixNote</source> <translation type="unfinished">NixNote</translation> </message> <message> <location filename="../gui/externalbrowse.cpp" line="124"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>ExtractNotes</name> <message> <location filename="../cmdtools/extractnotes.cpp" line="41"/> <location filename="../cmdtools/extractnotes.cpp" line="82"/> <source>Output file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="64"/> <source>Deleting notes:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/extractnotes.cpp" line="65"/> <source>Type DELETE to verify: </source> <translation type="unfinished"></translation> </message> <message> <source>Type DELETE to very: </source> <translation type="obsolete">確èªåˆªé™¤é¡žåž‹</translation> </message> </context> <context> <name>FavoritesView</name> <message> <location filename="../gui/favoritesview.cpp" line="68"/> <source>Shortcuts</source> <translation>æ·å¾‘</translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="90"/> <source>Remove from shortcuts</source> <translation>從æ·å¾‘中刪除</translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="565"/> <source>Are you sure you want to remove this shortcut?</source> <translation>確定刪除此æ·å¾‘?</translation> </message> <message> <location filename="../gui/favoritesview.cpp" line="566"/> <source>Verify Delete</source> <translation type="unfinished"></translation> </message> </context> <context> <name>FileWatcher</name> <message> <location filename="../watcher/filewatcher.cpp" line="72"/> <source>Error removing file: </source> <translation type="unfinished"></translation> </message> </context> <context> <name>FindReplace</name> <message> <location filename="../gui/findreplace.cpp" line="46"/> <source>Next</source> <translation>下一個</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="47"/> <source>Previous</source> <translation>上一個</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="48"/> <source>Match case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/findreplace.cpp" line="57"/> <source>Replace</source> <translation>替æ›</translation> </message> <message> <location filename="../gui/findreplace.cpp" line="58"/> <source>Replace all</source> <translation>全部替æ›</translation> </message> </context> <context> <name>HtmlEntitiesDialog</name> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="33"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="34"/> <source>Close</source> <translation>關閉</translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="35"/> <source>Edit entries list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="36"/> <source>Save entities list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="71"/> <source>HTML Entities Selection</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/htmlentitiesdialog.cpp" line="206"/> <source>Comma separated list of HTML entities. See http://www.w3schools.com/charsets/ for list.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportData</name> <message> <location filename="../xml/importdata.cpp" line="59"/> <source>Imported Notes</source> <translation>匯入記事</translation> </message> <message> <location filename="../xml/importdata.cpp" line="106"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="107"/> <location filename="../xml/importdata.cpp" line="119"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="130"/> <source>Importing</source> <translation>匯入</translation> </message> <message> <location filename="../xml/importdata.cpp" line="131"/> <source>Importing Notes</source> <translation>正在匯入記事</translation> </message> <message> <location filename="../xml/importdata.cpp" line="133"/> <source>Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importdata.cpp" line="134"/> <source>Restoring Notes</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ImportEnex</name> <message> <location filename="../xml/importenex.cpp" line="40"/> <source>Imported Notes</source> <translation type="unfinished">匯入記事</translation> </message> <message> <location filename="../xml/importenex.cpp" line="83"/> <source>Scanning File</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="84"/> <location filename="../xml/importenex.cpp" line="94"/> <source> notes found.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../xml/importenex.cpp" line="101"/> <location filename="../xml/importenex.cpp" line="102"/> <source>Importing Notes</source> <translation>正在匯入記事</translation> </message> </context> <context> <name>ImportNotes</name> <message> <location filename="../cmdtools/importnotes.cpp" line="19"/> <source>Input file not specified.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../cmdtools/importnotes.cpp" line="24"/> <source>Input file not found.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>InsertLatexDialog</name> <message> <location filename="../dialog/insertlatexdialog.cpp" line="32"/> <source>Insert LaTeX Formula</source> <translation>æ’å…¥ LaTeX å…¬å¼</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="42"/> <source>Formula</source> <translation>å…¬å¼</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="47"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/insertlatexdialog.cpp" line="52"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>InsertLinkDialog</name> <message> <location filename="../dialog/insertlinkdialog.cpp" line="34"/> <source>Insert Link</source> <translation>æ’入連çµ</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="45"/> <source>URL</source> <translation>URL</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="50"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/insertlinkdialog.cpp" line="54"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>LineEdit</name> <message> <location filename="../gui/lineedit.cpp" line="39"/> <source>Search</source> <translation>尋找</translation> </message> </context> <context> <name>LocalePreferences</name> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="37"/> <source>Date Format</source> <translation>日期格å¼</translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="40"/> <source>MM/dd/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="41"/> <source>MM/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="42"/> <source>M/dd/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="43"/> <source>M/d/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="44"/> <source>dd/MM/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="45"/> <source>d/M/yy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="46"/> <source>dd/MM/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="47"/> <source>d/M/yyyy - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="48"/> <source>yyyy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="49"/> <source>yy-MM-dd - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="52"/> <source>Time Format</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="55"/> <source>HH:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="56"/> <source>HH:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="57"/> <source>HH:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="58"/> <source>HH:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="59"/> <source>hh:mm:ss - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="60"/> <source>hh:mm:ss a- </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="61"/> <source>h:mm:ss a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="62"/> <source>hh:mm - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="63"/> <source>hh:mm a - </source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/localepreferences.cpp" line="64"/> <source>h:mm a - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>LocationDialog</name> <message> <location filename="../dialog/locationdialog.cpp" line="33"/> <source>Location</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="40"/> <source>Longitude</source> <translation>經度</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="42"/> <source>Latitude</source> <translation>緯度</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="44"/> <source>Altitude</source> <translation>æµ·æ‹”</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="49"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/locationdialog.cpp" line="52"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>LocationEditor</name> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="42"/> <source>Click to set location...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="45"/> <source>Edit...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="46"/> <source>Clear</source> <translation type="unfinished">清除</translation> </message> <message> <location filename="../gui/browserWidgets/locationeditor.cpp" line="47"/> <source>View on map</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LogViewer</name> <message> <location filename="../dialog/logviewer.cpp" line="41"/> <source>Close</source> <translation>關閉</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="43"/> <source>Refresh</source> <translation>刷新</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="45"/> <source>Save</source> <translation>ä¿å­˜</translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="54"/> <source>Save Logs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>Save Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logviewer.cpp" line="83"/> <source>NixNote Log (*.log);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>LoginDialog</name> <message> <location filename="../dialog/logindialog.cpp" line="34"/> <source>NixNote Login</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="43"/> <source>Userid</source> <translation type="unfinished">帳號</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="44"/> <source>Password</source> <translation>密碼</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="52"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/logindialog.cpp" line="56"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>NAttributeTree</name> <message> <location filename="../gui/nattributetree.cpp" line="48"/> <source>Attributes</source> <translation>屬性</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="129"/> <source>Created</source> <translation>建立</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="132"/> <location filename="../gui/nattributetree.cpp" line="213"/> <source>Since</source> <translation>從</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="136"/> <location filename="../gui/nattributetree.cpp" line="173"/> <location filename="../gui/nattributetree.cpp" line="217"/> <location filename="../gui/nattributetree.cpp" line="254"/> <source>Today</source> <translation>今日</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="140"/> <location filename="../gui/nattributetree.cpp" line="177"/> <location filename="../gui/nattributetree.cpp" line="221"/> <location filename="../gui/nattributetree.cpp" line="258"/> <source>Yesterday</source> <translation>昨日</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="144"/> <location filename="../gui/nattributetree.cpp" line="181"/> <location filename="../gui/nattributetree.cpp" line="225"/> <location filename="../gui/nattributetree.cpp" line="262"/> <source>This week</source> <translation>本週</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="148"/> <location filename="../gui/nattributetree.cpp" line="185"/> <location filename="../gui/nattributetree.cpp" line="229"/> <location filename="../gui/nattributetree.cpp" line="266"/> <source>Last week</source> <translation>上週</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="152"/> <location filename="../gui/nattributetree.cpp" line="189"/> <location filename="../gui/nattributetree.cpp" line="233"/> <location filename="../gui/nattributetree.cpp" line="270"/> <source>This Month</source> <translation>本月</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="156"/> <location filename="../gui/nattributetree.cpp" line="193"/> <location filename="../gui/nattributetree.cpp" line="237"/> <location filename="../gui/nattributetree.cpp" line="274"/> <source>Last Month</source> <translation>上月</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="160"/> <location filename="../gui/nattributetree.cpp" line="197"/> <location filename="../gui/nattributetree.cpp" line="241"/> <location filename="../gui/nattributetree.cpp" line="278"/> <source>This Year</source> <translation>今年</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="164"/> <location filename="../gui/nattributetree.cpp" line="201"/> <location filename="../gui/nattributetree.cpp" line="245"/> <location filename="../gui/nattributetree.cpp" line="282"/> <source>Last Year</source> <translation>去年</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="169"/> <location filename="../gui/nattributetree.cpp" line="250"/> <source>Before</source> <translation>之å‰</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="210"/> <source>Last Modified</source> <translation>最後修改</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="289"/> <source>Contains</source> <translation>包å«</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="292"/> <source>Images</source> <translation>å½±åƒ</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="296"/> <source>Audio</source> <translation>語音</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="300"/> <source>Ink</source> <translation>手寫記事</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="304"/> <source>Encrypted Text</source> <translation>加密文字</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="308"/> <source>To-do items</source> <translation>待辦事項</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="312"/> <source>Unfinished to-do items</source> <translation>尚未完æˆçš„待辦事項項目</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="316"/> <source>Finished to-do items</source> <translation type="unfinished">已完æˆçš„待辦事項項目</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="320"/> <source>PDF document</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="324"/> <source>Attachment</source> <translation type="unfinished">附件</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="328"/> <source>Reminder</source> <translation type="unfinished">æé†’</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="332"/> <source>Uncompleted Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="336"/> <source>Future Reminder</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="341"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="344"/> <source>Emailed to Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="348"/> <source>Email</source> <translation>傳é€é›»å­éƒµä»¶</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="352"/> <source>Web page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="356"/> <source>Mobile</source> <translation>行動電話</translation> </message> <message> <location filename="../gui/nattributetree.cpp" line="360"/> <source>Another application</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NBrowserWindow</name> <message> <location filename="../gui/nbrowserwindow.cpp" line="521"/> <location filename="../gui/nbrowserwindow.cpp" line="3112"/> <source>Today</source> <translation>今日</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="523"/> <location filename="../gui/nbrowserwindow.cpp" line="3114"/> <source>Tomorrow</source> <translation>明日</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="525"/> <location filename="../gui/nbrowserwindow.cpp" line="3116"/> <source>Yesterday</source> <translation>昨日</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to Save</source> <translation>無法存檔</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="773"/> <source>Unable to save this note. Either tidy isn't installed or the note is too complex to save.</source> <translation>è¨˜äº‹ç„¡æ³•å­˜æª”ã€‚æœªå®‰è£ tidy æˆ–è¨˜äº‹éŽæ–¼è¤‡é›œã€‚</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="1808"/> <source>Insert Link</source> <translation>æ’å…¥è¶…éˆæŽ¥</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>Unable Open</source> <translation>無法開啟</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2055"/> <source>This is an ink note. Ink notes are not supported since Evernote has not published any specifications on them and I'm too lazy to figure them out by myself.</source> <translation>é€™æ˜¯ä¸€æ¢æ‰‹å¯«è¨˜äº‹ã€‚Evernote 沒有發佈相關的è¦ç¯„ï¼Œå› æ­¤æœ¬è»Ÿä»¶ä¸æ”¯æ´æ‰‹å¯«è¨˜äº‹ã€‚æˆ‘å¤ªæ‡’äº†ï¼Œä¹Ÿä¸æƒ³è‡ªå·±åŽ»åšé€™ä»¶äº‹ã€‚</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2240"/> <source>Edit Link</source> <translation>ç·¨è¼¯è¶…éˆæŽ¥</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2304"/> <source>Unable to create LaTeX image</source> <translation>無法創建 LaTeX 圖片</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2305"/> <source>Unable to create LaTeX image. Are you sure mimetex is installed?</source> <translation>無法創建 LaTeX 圖片。你確定 mimetex 已安è£ï¼Ÿ</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2635"/> <source>Setup Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2636"/> <source>SMTP Server has not been setup. Please specify server settings in the Preferences menu.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2645"/> <source>Sending Email. Please be patient.</source> <translation>正在發é€éƒµä»¶ï¼Œè«‹ç¨ç­‰ã€‚</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Connection Error</source> <translation>連接錯誤</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2705"/> <source>Unable to connect to host.</source> <translation>無法連接到主機</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Login Error</source> <translation>登錄錯誤</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2711"/> <source>Unable to login.</source> <translation>無法登錄</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Send Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="2716"/> <source>Unable to send email.</source> <translation>無法發é€é›»éƒµã€‚</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3159"/> <source>Decryption Error</source> <translation>解密錯誤</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3160"/> <source>Unknown encryption method. Unable to decrypt.</source> <translation>未知加密手段。無法解密。</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3263"/> <source>Error</source> <translation>錯誤</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3264"/> <source>Error Encrypting String. Please verify you have Java installed.</source> <translation>加密出錯,請確定是å¦å®‰è£ Java.</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3400"/> <source>Hunspell plugin not found or could not be loaded.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete</source> <translation>å®Œæˆæ‹¼å­—檢查</translation> </message> <message> <location filename="../gui/nbrowserwindow.cpp" line="3446"/> <source>Spell Check Complete.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NMainMenuBar</name> <message> <location filename="../gui/nmainmenubar.cpp" line="60"/> <source>&File</source> <translation>&檔案</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="79"/> <source>Print this note</source> <translation>åˆ—å°æœ¬æ¢è¨˜äº‹</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="87"/> <source>Backup database to a file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="93"/> <source>Restore from a backup</source> <translation type="unfinished"></translation> </message> <message> <source>Export selected notes to a file</source> <translation type="vanished">匯出é¸ä¸­çš„記事到單個檔案</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="113"/> <source>Import notes from an export file</source> <translation>從已匯出的檔案中匯入記事</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="133"/> <source>Switch to </source> <translation>切æ›åˆ°</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="151"/> <source>Open/Close Notebooks</source> <translation>é–‹å•“/關閉記事本</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="159"/> <source>Close the program</source> <translation>關閉程å¼</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="175"/> <source>&Edit</source> <translation>&編輯</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="78"/> <source>&Print Note</source> <translation>列å°è¨˜äº‹</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="64"/> <source>Email Note</source> <translation>電郵記事</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="65"/> <source>Email a copy of this note</source> <translation>電郵記事拷è²</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="71"/> <source>Print Preview Note</source> <translation>列å°é è¦½è¨˜äº‹</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="72"/> <source>Print preview of this note</source> <translation>列å°é è¦½</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="86"/> <source>&Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="92"/> <source>&Restore Database</source> <translation type="unfinished"></translation> </message> <message> <source>&Export Notes</source> <translation type="vanished">&導出紀事</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="112"/> <source>&Import Notes</source> <translation>&導入記事</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="140"/> <source>&Add Another User...</source> <translation>&新增其他使用者…</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="144"/> <source>&User Account Maintenance</source> <translation>&用戶帳號維護</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="150"/> <source>&Open/Close Notebooks</source> <translation>&é–‹å•“/關閉記事本</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="158"/> <source>E&xit</source> <translation>&退出</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="180"/> <source>&Undo</source> <translation>&後悔</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="184"/> <source>&Redo</source> <translation>&é‡åš</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="190"/> <source>&Cut</source> <translation>&剪下</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="194"/> <source>C&opy</source> <translation>&複製</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="198"/> <source>&Paste</source> <translation>&貼上</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="202"/> <source>Pas&te as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="206"/> <source>Remo&ve Formatting</source> <translation>移除格å¼</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="212"/> <source>Select &All</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="218"/> <source>F&ind and Replace</source> <translation>尋找和å–代</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="220"/> <source>&Search Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="225"/> <source>&Reset Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="232"/> <source>&Find in Note</source> <translation>在記事中尋找</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="238"/> <source>Find &Next</source> <translation>尋找下一個</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="243"/> <source>Find &Previous</source> <translation>尋找上一個</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="250"/> <source>Replace &Within Note...</source> <translation>在記事內å–代</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="260"/> <source>Preferences</source> <translation>å好設定</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="268"/> <source>&View</source> <translation type="unfinished">&檢視</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="273"/> <source>Wide Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="278"/> <source>Narrow Note List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="285"/> <source>&Show Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="289"/> <source>Note &History</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="295"/> <source>&Presentation Mode</source> <translation>簡報模å¼</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="299"/> <source>Show &Left Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="306"/> <source>Show &Favorites</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="313"/> <source>Show &Notebooks</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="320"/> <source>Show Ta&gs</source> <translation>顯示標籤檢視</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="327"/> <source>Show Sa&ved Searches</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="341"/> <source>Show T&rash</source> <translation>顯示垃圾桶</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="348"/> <source>Show N&ote List</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="355"/> <source>Show Note &Panel</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="364"/> <source>View Note &Info</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="368"/> <source>View &Toolbar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="375"/> <source>View Status&bar</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="391"/> <source>New &Note</source> <translation>新記事</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="396"/> <source>New &Webcam Note</source> <translation>新網路相機記事</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="401"/> <source>Dupl&icate Note</source> <translation>復制記事</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="406"/> <source>&Delete</source> <translation>刪除</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="411"/> <source>Reindex Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="418"/> <source>&Spell Check</source> <translation>拼字檢查</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="427"/> <source>&Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="432"/> <source>&UnPin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="446"/> <source>&Synchronize</source> <translation>åŒæ­¥</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="447"/> <source>Synchronize with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="452"/> <source>&Disconnect</source> <translation>斷開連接</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="460"/> <source>Pause &Indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="461"/> <source>Temporarily pause indexing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="468"/> <source>Disable &Editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="469"/> <source>Temporarily disable note editing</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="476"/> <source>A&ccount</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="490"/> <source>&Reindex Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="514"/> <source>&User's Guide</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="537"/> <source>Shortcuts</source> <translation type="unfinished">æ·å¾‘</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="538"/> <source>View currentt shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="547"/> <source>Github Page</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="548"/> <source>Goto the NixNote2 Github project page.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="585"/> <source>About &Qt</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="625"/> <source>Theme</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="386"/> <source>&Note</source> <translation>&記事</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="100"/> <source>&Export to NixNote Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="101"/> <source>Export selected notes to a NNEX file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="106"/> <source>&Export Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="107"/> <source>Export selected notes to a PDF file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="441"/> <source>&Tools</source> <translation>&工具</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="453"/> <source>Disconnect from Evernote</source> <translation>自 Evernote æ–·ç·š</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="477"/> <source>Account information</source> <translation>帳戶資訊</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="484"/> <source>&Database Status</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="485"/> <source>Database Status</source> <translation>資料庫狀態</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="491"/> <source>Reindex all notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="499"/> <source>&Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="500"/> <source>Import Folders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="509"/> <source>&Help</source> <translation>&說明</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="515"/> <source>Open the user manual.</source> <translation>開啓用戶手冊</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="542"/> <source>Message &Log</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="554"/> <source>&Evernote Account Page</source> <translation>Evernote 帳戶é </translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="559"/> <source>Evernote &Support</source> <translation>Evernote 支æ´</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="568"/> <source>Evernote &Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="573"/> <source>Evernote User &Forum</source> <translation>Evernote 用戶論壇</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="580"/> <source>&About</source> <translation>關於</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="634"/> <source>System Default</source> <translation type="unfinished">系統缺çœ</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="543"/> <source>View current program messages</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="334"/> <source>Show &Attribute Filter</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="520"/> <source>Theme &Information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="521"/> <source>View information about the current theme.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="555"/> <source>Go to your Evernote account page.</source> <translation>å‰å¾€æˆ‘的帳戶é </translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="560"/> <source>Go to Evernote's support page</source> <translation>æ”¯æ´ å­¸ç¿’ä¸­å¿ƒ</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="562"/> <source>Yinxiang Biji Support</source> <translation>å°è±¡ç­†è¨˜æ”¯æ´</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="563"/> <source>Go to Yinxiang Biji's support page</source> <translation>å‰å¾€å°è±¡ç­†è¨˜æ”¯æ´é </translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="569"/> <source>Go to Evernote Trunk</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="574"/> <source>Go to the Evernote user support forum.</source> <translation>å‰å¾€ç”¨æˆ¶æ”¯æ´è«–壇</translation> </message> <message> <location filename="../gui/nmainmenubar.cpp" line="581"/> <location filename="../gui/nmainmenubar.cpp" line="586"/> <source>About</source> <translation>關於</translation> </message> </context> <context> <name>NNotebookView</name> <message> <location filename="../gui/nnotebookview.cpp" line="69"/> <source>Notebooks</source> <translation>記事本</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="86"/> <source>Create New Notebook</source> <translation>新記事本</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="95"/> <source>Delete</source> <translation>刪除</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="103"/> <source>Add to stack</source> <translation>新增至堆壘</translation> </message> <message> <source>New stack</source> <translation type="vanished">新堆壘</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="116"/> <source>Create New stack</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="119"/> <source>Remove from stack</source> <translation>從堆壘移除</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="123"/> <source>Rename</source> <translation>釿–°å‘½å</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="131"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="641"/> <source>Are you sure you want to delete this notebook?</source> <translation>確定è¦åˆªé™¤é€™æ¢è¨˜äº‹å—Žï¼Ÿ</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="642"/> <source>Verify Delete</source> <translation>確定刪除</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>New Stack (</source> <translation>新堆壘(</translation> </message> <message> <location filename="../gui/nnotebookview.cpp" line="814"/> <source>)</source> <translation>)</translation> </message> </context> <context> <name>NSearchView</name> <message> <location filename="../gui/nsearchview.cpp" line="65"/> <source>Saved Searches</source> <translation>儲存æœå°‹çµæžœ</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="74"/> <source>Create Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="83"/> <source>Delete</source> <translation type="unfinished">刪除</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="90"/> <source>Rename</source> <translation>釿–°å‘½å</translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="94"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="404"/> <source>Are you sure you want to delete this saved search?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nsearchview.cpp" line="405"/> <source>Verify Delete</source> <translation>確定刪除</translation> </message> </context> <context> <name>NTabWidget</name> <message> <location filename="../gui/ntabwidget.cpp" line="254"/> <location filename="../gui/ntabwidget.cpp" line="262"/> <source>Untitled Note</source> <translation>未命å記事</translation> </message> <message> <location filename="../gui/ntabwidget.cpp" line="267"/> <location filename="../gui/ntabwidget.cpp" line="334"/> <source>NixNote - </source> <translation type="unfinished"></translation> </message> </context> <context> <name>NTableView</name> <message> <location filename="../gui/ntableview.cpp" line="203"/> <source>Open Note</source> <translation>開啓記事</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="209"/> <source>Open Note In New Tab</source> <translation>在新的 Tab 中開啓記事</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="215"/> <source>Open Note In New Window</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="222"/> <source>Add Note</source> <translation>新記事</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="227"/> <source>Delete Note</source> <translation>刪去記事</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="238"/> <source>Restore Note</source> <translation>還原記事</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="244"/> <source>Copy Note Link</source> <translation>復制記事連接</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="249"/> <source>Duplicate Note</source> <translation>復制記事</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="254"/> <source>Reminders</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="258"/> <source>Remove</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="263"/> <source>Mark Completed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="269"/> <source>Pin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="274"/> <source>Unpin Note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="279"/> <source>Merge Notes</source> <translation>åˆä½µè¨˜äº‹</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="285"/> <source>Create Table of Contents</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="291"/> <source>Title Color</source> <translation>標題é¡è‰²</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="296"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="301"/> <source>White</source> <translation>白</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="304"/> <source>Red</source> <translation>ç´…</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="307"/> <source>Blue</source> <translation type="unfinished">è—</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="310"/> <source>Green</source> <translation>ç¶ </translation> </message> <message> <location filename="../gui/ntableview.cpp" line="313"/> <source>Yellow</source> <translation>黃</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="316"/> <source>Black</source> <translation>黑</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="319"/> <source>Gray</source> <translation>ç°</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="322"/> <source>Cyan</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="325"/> <source>Magenta</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="663"/> <source>Delete </source> <translation>刪除</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="666"/> <source>Permanently delete </source> <translation>徹底刪除</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="672"/> <source>selected note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="677"/> <source>Verify Delete</source> <translation>確定刪除</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="942"/> <source>Unsynchronized Note</source> <translation>æœªåŒæ­¥è¨˜äº‹</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="943"/> <source>This note has never been synchronized. Using this in a note link can cause problems unless you synchronize it first.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1319"/> <source>Table of Contents</source> <translation>目次</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1370"/> <source>One or more notes are unsynchronized. This can cause issues if they are later synchronized. Do you wish to continue?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1654"/> <source>Note LID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1657"/> <source>Title</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1660"/> <source>Notebook</source> <translation type="unfinished">記事本</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1663"/> <source>Tags</source> <translation type="unfinished">標籤</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1666"/> <source>Synchronized</source> <translation type="unfinished">åŒæ­¥</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1668"/> <location filename="../gui/ntableview.cpp" line="1676"/> <location filename="../gui/ntableview.cpp" line="1682"/> <source>No</source> <translation type="unfinished">å¦</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1670"/> <location filename="../gui/ntableview.cpp" line="1674"/> <location filename="../gui/ntableview.cpp" line="1680"/> <source>Yes</source> <translation type="unfinished">是</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1672"/> <source>Has Encryption</source> <translation type="unfinished">是å¦åŒ…å«åР坆內容</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1678"/> <source>Has To-Do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1684"/> <source>Date Created</source> <translation type="unfinished">建立日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1687"/> <source>Date Updated</source> <translation type="unfinished">更新日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1690"/> <source>Date Deleted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1698"/> <source>Subject Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1706"/> <source>Author</source> <translation type="unfinished">作者</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1710"/> <source>Longitude</source> <translation type="unfinished">經度</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1719"/> <source>Latitude</source> <translation type="unfinished">緯度</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1728"/> <source>Altitude</source> <translation type="unfinished">æµ·æ‹”</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1737"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1740"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1743"/> <source>Source URL</source> <translation type="unfinished">æº URL</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1746"/> <source>Reminder Due</source> <translation type="unfinished">æé†’日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="1754"/> <source>Reminder Completed</source> <translation type="unfinished">æé†’完æˆ</translation> </message> </context> <context> <name>NTableViewHeader</name> <message> <location filename="../gui/ntableviewheader.cpp" line="42"/> <source>Date Created</source> <translation>建立日期</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="47"/> <source>Date Updated</source> <translation>更新日期</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="52"/> <source>Title</source> <translation>主旨</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="57"/> <source>Notebook</source> <translation>記事本</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="62"/> <source>Tags</source> <translation>標籤</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="67"/> <source>Author</source> <translation>作者</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="72"/> <source>Subject Date</source> <translation>標題日期</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="77"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="82"/> <source>Source URL</source> <translation type="unfinished">æº URL</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="87"/> <source>Latitude</source> <translation>緯度</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="92"/> <source>Longitude</source> <translation>經度</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="97"/> <source>Altitude</source> <translation>æµ·æ‹”</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="102"/> <source>Has Encryption</source> <translation type="unfinished">是å¦åŒ…å«åР坆內容</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="107"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="112"/> <source>Synchronized</source> <translation>åŒæ­¥</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="117"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="122"/> <source>Reminder</source> <translation>æé†’</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="128"/> <source>Reminder Due</source> <translation>æé†’日期</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="133"/> <source>Reminder Completed</source> <translation>æé†’完æˆ</translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="138"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableviewheader.cpp" line="143"/> <source>Thumbnail</source> <translation>縮略圖</translation> </message> </context> <context> <name>NTagView</name> <message> <location filename="../gui/ntagview.cpp" line="67"/> <location filename="../gui/ntagview.cpp" line="156"/> <source>Tags from Personal</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="91"/> <source>Create New Tag</source> <translation>新標籤</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="100"/> <source>Delete</source> <translation>刪除</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="107"/> <source>Rename</source> <translation>釿–°å‘½å</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="110"/> <source>Merge</source> <translation>åˆä¸¦</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="113"/> <source>Hide Unassigned</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="119"/> <source>Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="154"/> <source>Tags from </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="351"/> <source>-<Missing Tag>-</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="706"/> <source>Are you sure you want to merge these tags?</source> <translation>確定è¦åˆä¸¦é€™äº›æ¨™ç±¤å—Žï¼Ÿ</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="707"/> <source>Verify Merge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntagview.cpp" line="753"/> <source>Are you sure you want to delete this tag?</source> <translation>確定è¦åˆªé™¤æœ¬æ¨™ç±¤å—Žï¼Ÿ</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="755"/> <source>Are you sure you want to delete all selected tags?</source> <translation>確定è¦åˆªé™¤æ‰€æœ‰é¸ä¸­çš„æ¨™ç±¤å—Žï¼Ÿ</translation> </message> <message> <location filename="../gui/ntagview.cpp" line="756"/> <source>Verify Delete</source> <translation>刪除標籤</translation> </message> </context> <context> <name>NTitleEditor</name> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="123"/> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="137"/> <source>Untitled note</source> <translation>未命å記事</translation> </message> <message> <location filename="../gui/browserWidgets/ntitleeditor.cpp" line="134"/> <source>untitled note</source> <translation>未命å記事</translation> </message> </context> <context> <name>NTrashTree</name> <message> <location filename="../gui/ntrashtree.cpp" line="53"/> <source>Trash</source> <translation>垃圾桶</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="65"/> <source>Restore Deleted Notes</source> <translation>還原已刪除記事</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="68"/> <source>Empty Trash</source> <translation>清空垃圾桶</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="238"/> <source>Verify Delete</source> <translation>確定刪除</translation> </message> <message> <location filename="../gui/ntrashtree.cpp" line="239"/> <source>Are you sure you want to permanently delete these notes?</source> <translation>你確定è¦å¾¹åº•刪除這些記事嗎?</translation> </message> </context> <context> <name>NWebView</name> <message> <location filename="../gui/nwebview.cpp" line="56"/> <source>Open</source> <translation>開啟</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="61"/> <source>Cut</source> <translation>剪下</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="66"/> <source>Copy</source> <translation>複製</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="71"/> <source>Paste</source> <translation>貼上</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="76"/> <source>Paste as Unformatted Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="81"/> <source>Remove Formatting</source> <translation>移除格å¼</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="86"/> <source>Copy Note URL</source> <translation>複製 URL</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="93"/> <source>Background Color</source> <translation type="unfinished">背景é¡è‰²</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="113"/> <source>To-do</source> <translation type="unfinished">待辦事項</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="120"/> <source>HTML Entities</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="127"/> <source>Encrypted Selected Text</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="132"/> <source>Insert Date && Time</source> <translation>æ’入日期</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="137"/> <source>Insert Hyperlink</source> <translation>æ’入超連接</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="142"/> <source>Quick Link</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="147"/> <source>Remove Hyperlink</source> <translation>移除超連接</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="152"/> <source>Attach File</source> <translation>附加檔案</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="158"/> <source>Insert LaTeX Formula</source> <translation>æ’å…¥ LaTeX å…¬å¼</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="164"/> <source>Table</source> <translation>表格</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="167"/> <source>Insert Table</source> <translation>æ’入表格</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="173"/> <source>Insert Row</source> <translation>æ’入行</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="178"/> <source>Insert Column</source> <translation>æ’入列</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="185"/> <source>Delete Row</source> <translation>刪除行</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="189"/> <source>Delete Column</source> <translation>刪除列</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="196"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/nwebview.cpp" line="203"/> <source>Image</source> <translation>å½±åƒ</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="206"/> <source>Save Image</source> <translation>儲存影åƒ</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="214"/> <source>Rotate Left</source> <translation>å‘左旋轉</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="218"/> <source>Rotate Right</source> <translation>å‘峿—‹è½‰</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="224"/> <source>Save Attachment</source> <translation>儲存附檔</translation> </message> <message> <location filename="../gui/nwebview.cpp" line="502"/> <location filename="../gui/nwebview.cpp" line="532"/> <source>Save File</source> <translation>存檔</translation> </message> </context> <context> <name>NixNote</name> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy Not Found</source> <translation>未找到 Tidy</translation> </message> <message> <location filename="../nixnote.cpp" line="214"/> <source>Tidy is not found on this system. Until tidy is installed you cannot save any notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="291"/> <source>ToolBar</source> <translation>工具列</translation> </message> <message> <location filename="../nixnote.cpp" line="303"/> <source>Back</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="304"/> <source>Next</source> <translation>下一個</translation> </message> <message> <location filename="../nixnote.cpp" line="314"/> <source>All Notes</source> <translation>所有記事</translation> </message> <message> <location filename="../nixnote.cpp" line="316"/> <source>Sync</source> <translation>åŒæ­¥</translation> </message> <message> <location filename="../nixnote.cpp" line="319"/> <source>Print</source> <translation>列å°</translation> </message> <message> <location filename="../nixnote.cpp" line="329"/> <source>New Text Note</source> <translation>新文本記事</translation> </message> <message> <location filename="../nixnote.cpp" line="332"/> <source>New Webcam Note</source> <translation>新網路相機記事</translation> </message> <message> <location filename="../nixnote.cpp" line="344"/> <source>Delete</source> <translation type="unfinished">刪除</translation> </message> <message> <location filename="../nixnote.cpp" line="347"/> <source>Trunk</source> <translation>堆壘</translation> </message> <message> <location filename="../nixnote.cpp" line="349"/> <source>Usage</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="531"/> <location filename="../nixnote.cpp" line="3183"/> <source>Screen Capture</source> <translation>æ“·å–螢幕截圖</translation> </message> <message> <location filename="../nixnote.cpp" line="547"/> <source>Show/Hide</source> <translation>顯示/éš±è—</translation> </message> <message> <location filename="../nixnote.cpp" line="559"/> <source>Close</source> <translation>關閉</translation> </message> <message> <location filename="../nixnote.cpp" line="1799"/> <source>Confirm Restore</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1815"/> <source>Restore Database</source> <translation type="unfinished">回存資料庫</translation> </message> <message> <location filename="../nixnote.cpp" line="1818"/> <source>Import Notes</source> <translation type="unfinished">匯入記事</translation> </message> <message> <location filename="../nixnote.cpp" line="1730"/> <location filename="../nixnote.cpp" line="1816"/> <source>NixNote Export (*.nnex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="320"/> <source>Print the current note</source> <translation>列å°ç•¶å‰è¨˜äº‹</translation> </message> <message> <location filename="../nixnote.cpp" line="322"/> <source>Email</source> <translation>傳é€é›»å­éƒµä»¶</translation> </message> <message> <location filename="../nixnote.cpp" line="323"/> <source>Email the current note</source> <translation>用電å­éƒµä»¶å‚³é€ç•¶å‰è¨˜äº‹</translation> </message> <message> <location filename="../nixnote.cpp" line="528"/> <source>Quick Note</source> <translation>å¿«æ·è¨˜äº‹</translation> </message> <message> <location filename="../nixnote.cpp" line="538"/> <source>Shortcut Notes</source> <translation>æ·å¾‘記事</translation> </message> <message> <location filename="../nixnote.cpp" line="540"/> <source>Pinned Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="542"/> <source>Recently Updated Notes</source> <translation>最近更新的記事</translation> </message> <message> <location filename="../nixnote.cpp" line="1437"/> <location filename="../nixnote.cpp" line="2350"/> <source>Log in to Evernote</source> <translation>登錄 Evernote</translation> </message> <message> <location filename="../nixnote.cpp" line="1439"/> <location filename="../nixnote.cpp" line="2352"/> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>NixNote</source> <translation>NixNote</translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <location filename="../nixnote.cpp" line="1761"/> <location filename="../nixnote.cpp" line="1857"/> <source>Error</source> <translation>錯誤</translation> </message> <message> <location filename="../nixnote.cpp" line="1715"/> <source>No notes selected.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1722"/> <source>Backup Database</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1724"/> <source>Export Notes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1749"/> <source>Performing backup</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1751"/> <source>Performing export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1768"/> <source>Database backup complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1770"/> <source>Note extract complete.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1796"/> <source>This is used to restore a database from backups. It is HIGHLY recommended that this only be used to populate an empty database. Restoring into a database that already has data can cause problems. Are you sure you want to continue?</source> <translation>這是用作從備份æ¢å¾©è³‡æ–™åº«çš„辦法。 强烈推薦你衹在空的資料庫上使用本功能。 如果在éžç©ºçš„資料庫上æ“作,å¯èƒ½æœƒå‡ºç¾å•題。 你確定è¦ç¹¼çºŒæ“作嗎?</translation> </message> <message> <location filename="../nixnote.cpp" line="1819"/> <source>NixNote Export (*.nnex);;Evernote Export (*.enex);;All Files (*.*)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1846"/> <source>Restoring database</source> <translation type="unfinished">資料庫回存中</translation> </message> <message> <location filename="../nixnote.cpp" line="1848"/> <source>Importing Notes</source> <translation type="unfinished">正在匯入記事</translation> </message> <message> <location filename="../nixnote.cpp" line="1880"/> <source>Database has been restored.</source> <translation type="unfinished">資料庫回存完畢</translation> </message> <message> <location filename="../nixnote.cpp" line="1882"/> <source>Notes have been imported.</source> <translation type="unfinished">記事已匯入</translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <location filename="../nixnote.cpp" line="1918"/> <source>Sync Error</source> <translation>åŒæ­¥éŒ¯èª¤</translation> </message> <message> <location filename="../nixnote.cpp" line="1916"/> <source>Sync completed with errors.</source> <translation>åŒæ­¥å®Œæˆï¼Œä½†æœ‰éŒ¯èª¤ã€‚</translation> </message> <message> <location filename="../nixnote.cpp" line="1918"/> <source>Sync error. See message log for details</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync Complete</source> <translation>åŒæ­¥å®Œæˆ</translation> </message> <message> <location filename="../nixnote.cpp" line="1922"/> <source>Sync completed successfully.</source> <translation>åŒæ­¥æˆåŠŸå®Œæˆ</translation> </message> <message> <location filename="../nixnote.cpp" line="2002"/> <source>Untitled note</source> <translation>未命å記事</translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>Unsynchronized Note</source> <translation type="unfinished">æœªåŒæ­¥è¨˜äº‹</translation> </message> <message> <location filename="../nixnote.cpp" line="2342"/> <source>This note has never been synchronized with Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3872"/> <source>Error loading Webcam plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3887"/> <source>Error loading Hunspell plugin: </source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3913"/> <location filename="../nixnote.cpp" line="3965"/> <source>PDF Export</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3925"/> <location filename="../nixnote.cpp" line="3976"/> <source>Export complete</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3937"/> <source>Exporting Notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3938"/> <source>Exporting notes as PDF</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2391"/> <location filename="../nixnote.cpp" line="2398"/> <source>Error retrieving note.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2392"/> <location filename="../nixnote.cpp" line="2399"/> <source>Error retrieving note</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <location filename="../nixnote.cpp" line="2431"/> <source>Note Restored</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2422"/> <source>A new copy has been restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2431"/> <source>Note successfully restored.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="2434"/> <source>Note restored</source> <translation type="unfinished"></translation> </message> <message> <source>Note Not Found</source> <translation type="vanished">記事未找到</translation> </message> <message> <location filename="../nixnote.cpp" line="2650"/> <source>Note not found.</source> <translation>記事未找到</translation> </message> <message> <location filename="../nixnote.cpp" line="3054"/> <source>Switch to </source> <translation>切æ›åˆ°</translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex Database</source> <translation>é‡å»ºè³‡æ–™åº«ç´¢å¼•</translation> </message> <message> <location filename="../nixnote.cpp" line="3238"/> <source>Reindex the entire database?</source> <translation>é‡å»ºå…¨éƒ¨è³‡æ–™åº«ç´¢å¼•?</translation> </message> <message> <location filename="../nixnote.cpp" line="3247"/> <source>Notes will be reindexed.</source> <translation>å°‡é‡å»ºè¨˜äº‹æœ¬ç´¢å¼•</translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Plugin Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3268"/> <source>Webcam plugin not found or could not be loaded</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3281"/> <source>Unable to find webcam or capture image.</source> <translation>未找到網路相機或無法截圖</translation> </message> <message> <location filename="../nixnote.cpp" line="3282"/> <source>Webcam Error</source> <translation>網路相機錯誤</translation> </message> <message> <location filename="../nixnote.cpp" line="3432"/> <source>Note Reindexed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3444"/> <source>Delete </source> <translation>刪除</translation> </message> <message> <location filename="../nixnote.cpp" line="3447"/> <source>Permanently delete </source> <translation>永久刪除 </translation> </message> <message> <location filename="../nixnote.cpp" line="3451"/> <source>this note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../nixnote.cpp" line="3455"/> <source>Verify Delete</source> <translation>確定刪除</translation> </message> <message> <location filename="../nixnote.cpp" line="3816"/> <source>Press ESC to exit.</source> <translation>按 ESC 退出。</translation> </message> </context> <context> <name>NoteFormatter</name> <message> <location filename="../html/noteformatter.cpp" line="657"/> <source>File</source> <translation>檔案</translation> </message> <message> <location filename="../html/noteformatter.cpp" line="691"/> <source>Bytes</source> <translation>Bytes</translation> </message> <message> <location filename="../html/noteformatter.cpp" line="695"/> <source>KB</source> <translation>KB</translation> </message> </context> <context> <name>NoteHistorySelect</name> <message> <location filename="../dialog/notehistoryselect.cpp" line="32"/> <source>Note History</source> <translation>記事歷程紀錄</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="33"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="34"/> <source>Import</source> <translation>匯入</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="39"/> <source>Replace current note?</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="80"/> <source>Current copy on Evernote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="93"/> <source>Today</source> <translation>今日</translation> </message> <message> <location filename="../dialog/notehistoryselect.cpp" line="95"/> <source>Yesterday</source> <translation>昨日</translation> </message> </context> <context> <name>NoteProperties</name> <message> <location filename="../dialog/noteproperties.cpp" line="37"/> <source>Note Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/noteproperties.cpp" line="38"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>NotebookProperties</name> <message> <location filename="../dialog/notebookproperties.cpp" line="38"/> <source>Notebook</source> <translation>記事本</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="42"/> <source>Synchronized</source> <translation>åŒæ­¥</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="46"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="52"/> <source>Name</source> <translation type="unfinished">å稱</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="60"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="62"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/notebookproperties.cpp" line="135"/> <source>Add Notebook</source> <translation>建立記事本</translation> </message> </context> <context> <name>OAuthWindow</name> <message> <location filename="../oauth/oauthwindow.cpp" line="70"/> <source>Please Grant NixNote Access</source> <translation>請授權 NixNote 訪å•</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="81"/> <source>SSL Support not found. Aborting connection</source> <translation>未找到 SSL 支æ´ã€‚連接中斷</translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="132"/> <source>Error receiving temporary credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="176"/> <source>Error receiving permanent credentials</source> <translation type="unfinished"></translation> </message> <message> <location filename="../oauth/oauthwindow.cpp" line="219"/> <source>Error receiving authorization</source> <translation type="unfinished"></translation> </message> </context> <context> <name>PopplerViewer</name> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source>Page </source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/plugins/popplerviewer.cpp" line="79"/> <location filename="../gui/plugins/popplerviewer.cpp" line="122"/> <source> of </source> <translation type="unfinished"></translation> </message> </context> <context> <name>PreferencesDialog</name> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="30"/> <source>User Settings</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="49"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="50"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="92"/> <source>Appearance</source> <translation>外觀設定</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="98"/> <source>Locale</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="104"/> <source>Search</source> <translation>尋找</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="110"/> <source>Sync</source> <translation>åŒæ­¥</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="116"/> <source>Email</source> <translation>傳é€é›»å­éƒµä»¶</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="121"/> <source>Thumbnail</source> <translation type="unfinished">縮略圖</translation> </message> <message> <location filename="../dialog/preferences/preferencesdialog.cpp" line="127"/> <source>Advanced</source> <translation type="unfinished"></translation> </message> <message> <source>Debugging</source> <translation type="vanished">除錯</translation> </message> </context> <context> <name>QApplication</name> <message> <location filename="../dialog/screencapture.cpp" line="108"/> <source>Use your mouse to draw a rectangle to screenshot or exit pressing any key or using the right or middle mouse buttons.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/screencapture.cpp" line="145"/> <source>%1 x %2 pixels </source> <translation type="unfinished"></translation> </message> </context> <context> <name>QObject</name> <message> <location filename="../gui/ntableview.cpp" line="175"/> <source>Title</source> <translation>標題</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="176"/> <source>Author</source> <translation>作者</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="177"/> <source>Notebook</source> <translation>記事本</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="178"/> <source>Tags</source> <translation>標籤</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="179"/> <source>Date Created</source> <translation>建立日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="180"/> <source>Date Updated</source> <translation>更新日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="181"/> <source>Subject Date</source> <translation>主旨日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="182"/> <source>Deletion Date</source> <translation>刪除日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="183"/> <source>Reminder</source> <translation>æé†’</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="184"/> <source>Reminder Due</source> <translation>æé†’日期</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="185"/> <source>Reminder Completed</source> <translation>æé†’完æˆ</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="186"/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="187"/> <source>Source URL</source> <translation type="unfinished">æº URL</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="188"/> <source>Source Application</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="189"/> <source>Longitude</source> <translation>經度</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="190"/> <source>Latitude</source> <translation>緯度</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="191"/> <source>Altitude</source> <translation>æµ·æ‹”</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="192"/> <source>Has Encryption</source> <translation>是å¦åŒ…å«åР坆內容</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="193"/> <source>Has To-do</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="194"/> <source>Sync</source> <translation>åŒæ­¥</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="195"/> <source>Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/ntableview.cpp" line="196"/> <source>Thumbnail</source> <translation>縮略圖</translation> </message> <message> <location filename="../gui/ntableview.cpp" line="197"/> <source>Pinned</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderButton</name> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="35"/> <source>Mark as Done</source> <translation>標記æˆå·²å®Œæˆ</translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="36"/> <source>Change Date</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/reminderbutton.cpp" line="37"/> <source>Clear Reminder</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ReminderManager</name> <message> <location filename="../reminders/remindermanager.cpp" line="85"/> <source>Reminders Due</source> <translation>æé†’日期</translation> </message> </context> <context> <name>ReminderSetDialog</name> <message> <location filename="../dialog/remindersetdialog.cpp" line="47"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/remindersetdialog.cpp" line="48"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>RemoteQuery</name> <message> <location filename="../filters/remotequery.cpp" line="113"/> <location filename="../filters/remotequery.cpp" line="130"/> <source>Today</source> <translation>今日</translation> </message> </context> <context> <name>SavedSearchProperties</name> <message> <location filename="../dialog/savedsearchproperties.cpp" line="35"/> <source>Saved Search</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="42"/> <source>Name</source> <translation>å稱</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="43"/> <source>Query</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="51"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="53"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/savedsearchproperties.cpp" line="106"/> <source>Add Saved Search</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SearchPreferences</name> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="36"/> <source>Index Attachments</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="44"/> <source>Clear Notebook Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="48"/> <source>Clear Tag Selection on Search Text Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="52"/> <source>Clear Search Text on Notebook Changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="56"/> <source>Show Any Matching Tags When Selecting Multiple Tags</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="60"/> <source>Index PDFs locally</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="64"/> <source>Background Indexing (requires restart & may cause issues on some systems)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="68"/> <source>Experimental: Force search to lower case</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/searchpreferences.cpp" line="73"/> <source>Minimum Image Recognition Weight</source> <translation type="unfinished"></translation> </message> </context> <context> <name>ShortcutDialog</name> <message> <location filename="../dialog/shortcutdialog.cpp" line="41"/> <source>Defined Shortcuts</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/shortcutdialog.cpp" line="42"/> <source>Ok</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SpellCheckDialog</name> <message> <location filename="../dialog/spellcheckdialog.cpp" line="35"/> <source>Spell Check</source> <translation>拼字檢查</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="50"/> <source>Suggestion</source> <translation>建議</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="56"/> <source>Replace</source> <translation>替æ›</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="57"/> <source>Ignore</source> <translation>忽略</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="58"/> <source>Ignore All</source> <translation>全部忽略</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="59"/> <source>Add To Dictionary</source> <translation>添加到辭典</translation> </message> <message> <location filename="../dialog/spellcheckdialog.cpp" line="66"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>SpellChecker</name> <message> <source>Unable to find dictionaries. Is Huntspell installed?</source> <translation type="vanished">辭典未找到。是å¦å·²å®‰è£ Huntspell?</translation> </message> </context> <context> <name>SyncPreferences</name> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="34"/> <source>Sync automatically</source> <translation>è‡ªå‹•åŒæ­¥</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="38"/> <source>Every 15 minutes</source> <translation>æ¯15分é˜</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="39"/> <source>Every 30 minutes</source> <translation>æ¯30分é˜</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="40"/> <source>Every hour</source> <translation>æ¯å°æ™‚</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="41"/> <source>Every day</source> <translation>æ¯å¤©</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="43"/> <source>Sync on startup</source> <translation>啓用立å³åŒæ­¥è™•ç†</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="45"/> <source>Sync on shutdown</source> <translation>çµæŸæ™‚處ç†åŒæ­¥è®Šæ›´</translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="47"/> <source>Enable sync notifications</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="48"/> <source>Show successful syncs</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="49"/> <source>Restart sync on API limit (experimental)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="51"/> <source>Enable Proxy*</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="52"/> <source>Enable Socks5</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="53"/> <source>Proxy Hostname</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="54"/> <source>Proxy Port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="55"/> <source>Proxy Username</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="56"/> <source>Proxy Password</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="57"/> <source>*Note: Restart required</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/syncpreferences.cpp" line="73"/> <source>Popup message on sync errors.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>SyncRunner</name> <message> <location filename="../threads/syncrunner.cpp" line="134"/> <source>Beginning Sync</source> <translation>é–‹å§‹åŒæ­¥</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="142"/> <source>Downloading changes</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="192"/> <source>Sync Complete Successfully</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <location filename="../threads/syncrunner.cpp" line="267"/> <source>Download </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="238"/> <source>% complete for notebooks, tags, & searches.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="247"/> <source>Download complete for notebooks, tags, & searches. Downloading notes.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="267"/> <source>% complete.</source> <translation type="unfinished"> %已完æˆ</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="280"/> <source>Download complete.</source> <translation>下載完æˆ</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>Downloading </source> <translation>下載中</translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <source>% complete for tags in shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="721"/> <source>Downloading notes for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="743"/> <source>% complete for shared notebook </source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1149"/> <source>Error uploading note:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="1151"/> <source>Error uploading note with a missing title!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../threads/syncrunner.cpp" line="703"/> <location filename="../threads/syncrunner.cpp" line="721"/> <location filename="../threads/syncrunner.cpp" line="743"/> <source>.</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TableDialog</name> <message> <location filename="../dialog/tabledialog.cpp" line="30"/> <source>Insert Table</source> <translation type="unfinished">æ’入表格</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="34"/> <source>Percent</source> <translation type="unfinished">百分比</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="35"/> <source>Pixels</source> <translation type="unfinished">åƒç´ </translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="51"/> <source>Rows</source> <translation type="unfinished">列</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="53"/> <source>Columns</source> <translation type="unfinished">行</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="55"/> <source>Width</source> <translation type="unfinished">寬度</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="57"/> <source>Unit</source> <translation type="unfinished">元件</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="64"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/tabledialog.cpp" line="67"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> </context> <context> <name>TablePropertiesDialog</name> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="72"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="105"/> <source>Table Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="86"/> <source>Cancel</source> <translation type="unfinished">å–æ¶ˆ</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="87"/> <source>OK</source> <translation type="unfinished">確定</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="106"/> <source>Cell Properties</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="214"/> <source>Row 1 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="216"/> <source>Row 1 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="218"/> <source>Row 1 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="220"/> <source>Row 2 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="222"/> <source>Row 2 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="224"/> <source>Row 2 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="226"/> <source>Row 3 Cell 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="228"/> <source>Row 3 Cell 2</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="230"/> <source>Row 3 Cell 3</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="456"/> <source>Width</source> <translation type="unfinished">寬度</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="464"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="480"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="494"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="511"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="526"/> <source>Percent</source> <translation type="unfinished">百分比</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="465"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="479"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="493"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="510"/> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="525"/> <source>Pixels</source> <translation type="unfinished">åƒç´ </translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="476"/> <source>Top Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="490"/> <source>Bottom Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="507"/> <source>Left Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="522"/> <source>Right Margin</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="560"/> <source>Border Color</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="561"/> <source>Font Color</source> <translation type="unfinished">文字é¡è‰²</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="562"/> <source>Background Color</source> <translation type="unfinished">背景é¡è‰²</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="576"/> <source>Border Size</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="587"/> <source>Padding</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="597"/> <source>Top Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="606"/> <source>Bottom Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="615"/> <source>Left Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="624"/> <source>Right Border</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="636"/> <source>Horizontal Alignment</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="641"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="642"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="643"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="644"/> <source>Center</source> <translation type="unfinished">置中</translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="676"/> <source>Solid</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="677"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="678"/> <source>Dotted</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="679"/> <source>Dashed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="680"/> <source>Double</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="681"/> <source>Ridge</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="682"/> <source>Inset</source> <translation type="unfinished"></translation> </message> <message> <location filename="../gui/browserWidgets/table/tablepropertiesdialog.cpp" line="683"/> <source>Outset</source> <translation type="unfinished"></translation> </message> </context> <context> <name>TagEditorNewTag</name> <message> <location filename="../gui/browserWidgets/tageditornewtag.cpp" line="55"/> <source>Click to add tag...</source> <translation>單擊建立標籤……</translation> </message> </context> <context> <name>TagProperties</name> <message> <location filename="../dialog/tagproperties.cpp" line="36"/> <source>Tag</source> <translation>標籤</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="42"/> <source>Name</source> <translation>å稱</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="48"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="50"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/tagproperties.cpp" line="102"/> <source>Add Tag</source> <translation>建立標籤</translation> </message> </context> <context> <name>ThumbnailPreferences</name> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="14"/> <source>Disable thumbnail generation</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="15"/> <source>Images to generate per interval</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="16"/> <source>Minimum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../dialog/preferences/thumbnailpreferences.cpp" line="17"/> <source>Maximum scan interval (in seconds)</source> <translation type="unfinished"></translation> </message> </context> <context> <name>UrlEditor</name> <message> <location filename="../gui/browserWidgets/urleditor.cpp" line="45"/> <source>Click to set source URL...</source> <translation type="unfinished"></translation> </message> </context> <context> <name>WatchFolderAdd</name> <message> <location filename="../dialog/watchfolderadd.cpp" line="47"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="51"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="55"/> <source>Directory</source> <translation>目錄</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="63"/> <source>Keep</source> <translation>ä¿æŒ</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="64"/> <source>Delete</source> <translation>刪除</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="90"/> <source>Notebook</source> <translation>記事本</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="92"/> <source>After import</source> <translation>匯入後</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="94"/> <source>Include subdirectories</source> <translation>包å«å­ç›®éŒ„</translation> </message> <message> <location filename="../dialog/watchfolderadd.cpp" line="101"/> <source>Add Import Folder</source> <translation type="unfinished">建立匯入資料夾</translation> </message> </context> <context> <name>WatchFolderDialog</name> <message> <location filename="../dialog/watchfolderdialog.cpp" line="38"/> <source>OK</source> <translation>確定</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="42"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="50"/> <source>Auto Import Folders</source> <translation>自動匯入資料夾</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="62"/> <source>Add</source> <translation>建立</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="66"/> <source>Edit</source> <translation>編輯</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="71"/> <location filename="../dialog/watchfolderdialog.cpp" line="162"/> <source>Delete</source> <translation>刪除</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="112"/> <source>Directory</source> <translation>目錄</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="113"/> <source>Target Notebook</source> <translation>目的記事本</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="114"/> <location filename="../dialog/watchfolderdialog.cpp" line="159"/> <source>Keep</source> <translation>ä¿æŒ</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="115"/> <source>Include Subdirectories</source> <translation>包å«å­ç›®éŒ„</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="169"/> <source>Yes</source> <translation>是</translation> </message> <message> <location filename="../dialog/watchfolderdialog.cpp" line="172"/> <source>No</source> <translation>å¦</translation> </message> </context> </TS> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/uninstall.sh�������������������������������������������������������������������������0000775�0000000�0000000�00000000407�13156041044�0015630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh package_dir=$(cd `dirname $0` && pwd) if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi rm /usr/share/applications/nixnote2.desktop rm -rf /usr/share/nixnote2 rm /usr/bin/nixnote2 echo "Uninstall completed" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/���������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13156041044�0015272�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/crossmemorymapper.cpp������������������������������������������������������0000664�0000000�0000000�00000006525�13156041044�0021575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "crossmemorymapper.h" #include <iostream> CrossMemoryMapper::CrossMemoryMapper(QObject *parent) : QObject(parent) { } CrossMemoryMapper::CrossMemoryMapper(QString key, QObject *parent) : QObject(parent) { this->setKey(key); buffer = NULL; } void CrossMemoryMapper::setKey(QString key) { this->key = key; sharedMemory = new QSharedMemory(key, this); } CrossMemoryMapper::~CrossMemoryMapper() { if (buffer != NULL) free(buffer); if (key != "" && sharedMemory->isAttached()) sharedMemory->detach(); } bool CrossMemoryMapper::allocate(int size) { if (key == "") return false; if (!sharedMemory->create(size, QSharedMemory::ReadWrite)) { return false; } buffer = (char*)malloc(sharedMemory->size()); return true; } void CrossMemoryMapper::clearMemory() { lock(); memset(sharedMemory->data(), 0, sharedMemory->size()); unlock(); } bool CrossMemoryMapper::lock() { if (sharedMemory == NULL) return false; return sharedMemory->lock(); } bool CrossMemoryMapper::unlock() { if (sharedMemory == NULL) return false; return sharedMemory->unlock(); } bool CrossMemoryMapper::attach() { if (key == "") return false; if (sharedMemory == NULL) return false; if (buffer == NULL) buffer = (char*)malloc(sharedMemory->size()); return sharedMemory->attach(); } bool CrossMemoryMapper::detach() { sharedMemory->unlock(); return sharedMemory->detach(); } QByteArray CrossMemoryMapper::read() { if (!isAttached()) attach(); if (sharedMemory == NULL || !sharedMemory->isAttached() || buffer == NULL) return QByteArray(); if (buffer != NULL) free(buffer); buffer = (char*)malloc(sharedMemory->size()); memcpy(buffer, sharedMemory->data(), sharedMemory->size()); this->unlock(); clearMemory(); QByteArray data = QByteArray(QByteArray::fromRawData(buffer, sharedMemory->size())); return data; } void CrossMemoryMapper::write(QString value) { write(value.toAscii()); } void CrossMemoryMapper::write(QByteArray data) { QString svalue(data); this->lock(); void *memptr = sharedMemory->data(); memcpy(memptr, svalue.toStdString().c_str(), data.size()); this->unlock(); } bool CrossMemoryMapper::isAttached() { if (sharedMemory == NULL) return false; return sharedMemory->isAttached(); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/crossmemorymapper.h��������������������������������������������������������0000664�0000000�0000000�00000003176�13156041044�0021241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef CROSSMEMORYMAPPER_H #define CROSSMEMORYMAPPER_H #include <QObject> #include <QSharedMemory> class CrossMemoryMapper : public QObject { Q_OBJECT private: QString key; QSharedMemory *sharedMemory; char *buffer; public: explicit CrossMemoryMapper(QObject *parent = 0); explicit CrossMemoryMapper(QString key, QObject *parent = 0); ~CrossMemoryMapper(); void setKey(QString key); bool allocate(int size); bool detach(); bool attach(); void clearMemory(); bool unlock(); bool lock(); bool isAttached(); QByteArray read(); void write(QByteArray data); void write(QString data); signals: public slots: }; #endif // CROSSMEMORYMAPPER_H ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/debugtool.cpp��������������������������������������������������������������0000664�0000000�0000000�00000023516�13156041044�0017771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "debugtool.h" #include "global.h" DebugTool::DebugTool() { } //************************************ // Dump a tag to the debug log //************************************ void DebugTool::dumpTag(Tag tag) { QLOG_DEBUG() << "*** Dumping Tag ***"; dumpField(tag.guid, "guid"); dumpField(tag.name, "name"); dumpField(tag.parentGuid, "parent"); dumpField(tag.updateSequenceNum, "USN"); QLOG_DEBUG() << "*** Tag Dump complete ***"; } //************************************ // Dump a saved search to the debug log //************************************ void DebugTool::dumpSavedSearch(SavedSearch search) { QLOG_DEBUG() << "*** Dumping Saved Search ***"; dumpField(search.guid, "guid"); dumpField(search.name, "name"); dumpField(search.query, "query"); dumpField(search.updateSequenceNum, "USN"); if (search.format.isSet()) QLOG_DEBUG() << "format:" << search.format << ":"; else QLOG_DEBUG() << "format not found."; if (search.scope.isSet()) { SavedSearchScope scope = search.scope; dumpField(scope.includeAccount, "includeAccount"); dumpField(scope.includePersonalLinkedNotebooks, "includePersonalLinkedNotebooks"); dumpField(scope.includeBusinessLinkedNotebooks, "includeBusinessLinkedNotebooks"); } else QLOG_DEBUG() << "search scope not found."; QLOG_DEBUG() << "*** Saved Search Dump Complete ***"; } //************************************ // Dump a note to the debug log //************************************ void DebugTool::dumpNote(Note note) { QLOG_DEBUG() << "*** Dumping Note ***"; dumpField(note.guid, "guid"); dumpField(note.active, "active"); dumpField(note.title, "title"); dumpField(note.content, "content"); dumpField(note.contentHash, "contentHash", true); dumpField(note.contentLength, "contentLength"); dumpField(note.created, "created"); dumpField(note.updated, "updated"); dumpField(note.deleted, "deleted"); dumpField(note.updateSequenceNum, "USN"); dumpField(note.tagGuids, "tag guids"); dumpField(note.tagNames, "tag names"); if (!note.attributes.isSet()) { QLOG_DEBUG() << "no note attributes found."; } else { NoteAttributes attributes = note.attributes; dumpField(attributes.subjectDate, "subject date"); dumpField(attributes.latitude, "latitude"); dumpField(attributes.longitude, "longitude"); dumpField(attributes.altitude, "altitude"); dumpField(attributes.author, "author"); dumpField(attributes.source, "source"); dumpField(attributes.sourceURL, "sourceURL"); dumpField(attributes.sourceApplication, "sourceApplication"); dumpField(attributes.shareDate, "shareDate"); dumpField(attributes.reminderOrder, "reminderOrder"); dumpField(attributes.reminderDoneTime, "reminderDoneTime"); dumpField(attributes.reminderTime, "reminderTime"); dumpField(attributes.placeName, "placeName"); dumpField(attributes.contentClass, "contentClass"); dumpField(attributes.lastEditedBy, "lastEditedBy"); dumpField(attributes.creatorId, "creatorId"); dumpField(attributes.lastEditorId, "lastEditorId"); } if (note.resources.isSet()) { QList<Resource> resources = note.resources; QLOG_DEBUG() << resources.size() << " resources found"; for (int i=0; i<resources.size(); i++) { QLOG_DEBUG() << "resource #" << i; dumpResource(resources[i]); } } QLOG_DEBUG() << "*** Note Dump complete ***"; } //************************************ // Dump a resource to the debug log //************************************ void DebugTool::dumpResource(Resource r) { QLOG_DEBUG() << "*** Dumping Resource ***"; dumpField(r.guid, "guid"); dumpField(r.noteGuid, "noteGuid"); dumpField(r.mime, "mime"); dumpField(r.width, "width"); dumpField(r.height, "height"); dumpField(r.duration, "duration"); dumpField(r.active, "active"); dumpField(r.updateSequenceNum, "USN"); if (r.data.isSet()) { QLOG_DEBUG() << "resource data found:"; dumpData(r.data); } else QLOG_DEBUG() << "resource data not found."; if (r.recognition.isSet()) { QLOG_DEBUG() << "resource recognition data found:"; dumpData(r.data); } else QLOG_DEBUG() << "resource recognition data not found."; if (r.alternateData.isSet()) { QLOG_DEBUG() << "resource alternate data found:"; dumpData(r.alternateData); } else QLOG_DEBUG() << "resource alternate data not found."; QLOG_DEBUG() << "*** Resource Dump Complete ***"; } //****************************************** // Dump a generic data segment to the log //****************************************** void DebugTool::dumpData(Data d) { QLOG_DEBUG() << "*** Dumping Data Field ***"; dumpField(d.bodyHash, "bodyHash", true); dumpField(d.size, "size"); QLOG_DEBUG() << "*** Data Field Dump Complete ***"; } //************************************ // Dump a notebook to the log //************************************ void DebugTool::dumpNotebook(Notebook n) { QLOG_DEBUG() << "*** Dumping Notebook ***"; dumpField(n.guid, "guid"); dumpField(n.name, "name"); dumpField(n.updateSequenceNum, "USN"); dumpField(n.defaultNotebook, "defaultNotebook"); dumpField(n.serviceCreated, "serviceCreated"); dumpField(n.serviceUpdated, "serviceUpdate"); dumpField(n.stack, "stack"); dumpField(n.published, "published"); if (n.publishing.isSet()) { QLOG_DEBUG() << "publishing data:"; Publishing p = n.publishing; dumpField(p.uri, "uri"); QLOG_DEBUG() << "order:" << p.order << ":"; dumpField(p.publicDescription, "publicDescription"); } else QLOG_DEBUG() << "publishing data not found"; if (n.businessNotebook.isSet()) { QLOG_DEBUG() << "businessnotebook data:"; BusinessNotebook b = n.businessNotebook; dumpField(b.notebookDescription, "notebookDescription"); dumpField(b.recommended, "recommended"); int i = b.privilege; QLOG_DEBUG() << "privilege:" << i; } else { QLOG_DEBUG() << "businessnotebooek data not found."; } QLOG_DEBUG() << "*** Notebook Dump Complete ***"; } //******************************************************* //* The remainder of these methods are generic //* functions called by the functions above. They //* all work pretty much the same. They just accept a //* value and, if it is set, dump the contents to the //* debug log. //******************************************************* void DebugTool::dumpField(Optional<QString> field, QString name) { if (field.isSet()) QLOG_DEBUG() << name << ":" << field << ":"; else QLOG_DEBUG() << name << " is not set."; } void DebugTool::dumpField(Optional<bool> field, QString name) { if (field.isSet()) QLOG_DEBUG() << name << ":" << field << ":"; else QLOG_DEBUG() << name << " is not set."; } void DebugTool::dumpField(Optional<double> field, QString name) { if (field.isSet()) QLOG_DEBUG() << name << ":" << field << ":"; else QLOG_DEBUG() << name << " is not set."; } void DebugTool::dumpField(Optional<qint32> field, QString name) { if (field.isSet()) QLOG_DEBUG() << name << ":" << field << ":"; else QLOG_DEBUG() << name << " is not set."; } void DebugTool::dumpField(Optional<long long> field, QString name) { if (field.isSet()) QLOG_DEBUG() << name << ":" << field << ":"; else QLOG_DEBUG() << name << " is not set."; } void DebugTool::dumpField(Optional<short int> field, QString name) { if (field.isSet()) QLOG_DEBUG() << name << ":" << field << ":"; else QLOG_DEBUG() << name << " is not set."; } void DebugTool::dumpField(Optional<QByteArray> field, QString name, bool hexValue) { if (field.isSet()) { if (hexValue) { QByteArray hex = field; QLOG_DEBUG() << name << ":" << hex.toHex() << ":"; } else QLOG_DEBUG() << name << ":" << field << ":"; } else { QLOG_DEBUG() << name << " is not set."; } } void DebugTool::dumpField(Optional<QStringList> field, QString name) { if (!field.isSet()) { QLOG_DEBUG() << name << " is not set."; return; } QStringList fields = field; QLOG_DEBUG() << name << " has " << fields.size() << " entries."; for (int i=0; i<fields.size(); i++) { QLOG_DEBUG() << "#" << i << ":" << fields[i]; } } void DebugTool::dumpField(Optional< QList<QString> > field, QString name) { if (!field.isSet()) { QLOG_DEBUG() << name << " is not set."; return; } QList<QString> fields = field; QLOG_DEBUG() << name << " has " << fields.size() << " entries."; for (int i=0; i<fields.size(); i++) { QLOG_DEBUG() << "#" << i << ":" << fields[i]; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/debugtool.h����������������������������������������������������������������0000664�0000000�0000000�00000005054�13156041044�0017433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ //**************************************************** //* This is i generic utility to dump Evernote //* structures to the debug log. It is pretty //* basic and just dumps whatever it is given. //* If a value is not set, it says that it is not //* set. //***************************************************** #ifndef DEBUGTOOL_H #define DEBUGTOOL_H #include "qevercloud/include/QEverCloud.h" using namespace qevercloud; class DebugTool { private: // These are generic dumpField functions called by the other methods. void dumpField(Optional<QString> field, QString name); void dumpField(Optional<qint32> field, QString name); void dumpField(Optional<bool> field, QString name); void dumpField(Optional<short int> field, QString name); void dumpField(Optional<long long> field, QString name); void dumpField(Optional<QByteArray> field, QString name, bool hexValue=false); void dumpField(Optional<QStringList> field, QString name); void dumpField(Optional< QList< QString> > field, QString name); void dumpField(Optional<double> field, QString name); public: DebugTool(); void dumpTag(Tag tag); // Dump a tag to the log void dumpNote(Note note); // Dump a note to the log void dumpResource(Resource resource); // Dump a resource to the log void dumpData(Data data); // Dump a data segment (from a resource) to the log void dumpSavedSearch(SavedSearch search); // Dump a saved search to the log void dumpNotebook(Notebook notebook); // Dump a notebeook to the log }; #endif // DEBUGTOOL_H ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/encrypt.cpp����������������������������������������������������������������0000664�0000000�0000000�00000013770�13156041044�0017472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "encrypt.h" #include <QString> #include <algorithm> #include <stdexcept> #include "global.h" #include <QCryptographicHash> extern Global global; //#define MY_CIPHER_MODE EVP_rc2_cbc() // RC2 CBC mode using namespace std; EnCrypt::EnCrypt() { } int EnCrypt::decrypt(QString &result, QString text, QString passphrase) { return decrypt(result, text, passphrase, "RC2", 64); } int EnCrypt::decrypt(QString &result, QString text, QString passphrase, QString cipher, int length) { if (cipher == "RC2") return this->runner(result, text, passphrase, "decrypt-rc2", length); return this->Invaid_Method; } int EnCrypt::encrypt(QString &result, QString text, QString passphrase) { return encrypt(result, text, passphrase, "RC2", 64); } int EnCrypt::encrypt(QString &result, QString text, QString passphrase, QString cipher, int length) { if (cipher == "RC2") return this->runner(result, text, passphrase, "encrypt-rc2", length); return this->Invaid_Method; } int EnCrypt::runner(QString &result, QString text, QString passphrase, QString method, int keylen) { // Run the Java program to decrypt the text. This is an extremely ugly // hack, but I haven't been able to get anything else to work. QString jar = global.fileManager.getJavaDirPath("") + "crypto.jar"; QProcess javaProcess; QStringList args; args.append("-jar"); args.append(jar); args.append(method); args.append(passphrase); args.append(QString::number(keylen)); args.append(text); javaProcess.start("java", args); result.clear(); javaProcess.waitForFinished(); int rc = javaProcess.exitCode(); QLOG_DEBUG() << "Return Code: " << rc; if (rc == 0) result.append(javaProcess.readAllStandardOutput()); return rc; // tidyProcess.start("tidy -raw -asxhtml -q -m -u -utf8 ", QIODevice::ReadWrite|QIODevice::Unbuffered); // QLOG_DEBUG() << "Starting tidy " << tidyProcess.waitForStarted(); // tidyProcess.waitForStarted(); // tidyProcess.write(content); // tidyProcess.closeWriteChannel(); // tidyProcess.waitForFinished(); // QLOG_DEBUG() << "Stopping tidy " << tidyProcess.waitForFinished() << " Return Code: " << tidyProcess.state(); // QLOG_DEBUG() << "Tidy Errors:" << tidyProcess.readAllStandardError(); // content.clear(); // content.append(tidyProcess.readAllStandardOutput()); // if (content == "") { // formattingError = true; // return ""; // } // Below is a botan test // QByteArray hash = QCryptographicHash::hash(passphrase.toUtf8(),QCryptographicHash::Md5); // SymmetricKey key; // key.change(QString(hash.toHex()).toStdString()); // qDebug() << "Key:" << QString::fromStdString(key.as_string()); // try { // Keyed_Filter *cipher = get_cipher("RC2/ECB/NoPadding", DECRYPTION); // cipher->set_key(key); // Pipe pipe(new Base64_Decoder, cipher); // byte *in = (byte*)text.data(); // QLOG_DEBUG() << text.length(); // pipe.process_msg(in, text.length()); // SecureVector<byte> sv = pipe.read_all(); // QByteArray x1 = QByteArray::fromRawData((const char*)sv.begin(), sv.size()); // QLOG_DEBUG() << x1; // QLOG_DEBUG() << x1.toHex(); // QLOG_DEBUG() << x1.toBase64(); // QLOG_DEBUG() << QByteArray::fromBase64(x1); // QLOG_DEBUG() << "ptr"; // } catch(std::exception& ex) { // QLOG_DEBUG() << "Decrypt failed: " << QString(ex.what()); // } // return ""; // Below is an mcrypt trial // QLOG_DEBUG() << text; // QLOG_DEBUG() << hash.toHex(); // MCRYPT td; // int i; // void *key; // char *block_buffer; // int keysize=hash.length(); // int blocksize; // key = calloc(1, keysize); // memcpy(key, hash.data(), hash.length()); // char cypher[] = "rc2"; // char block[] = "ecb"; // td = mcrypt_module_open(cypher, NULL, block, NULL); // if (td == MCRYPT_FAILED) // return ""; // QByteArray ba; // ba.append(text); // ba = QByteArray::fromBase64(ba); // blocksize = mcrypt_enc_get_block_size(td); // block_buffer = (char *)malloc(ba.size()*blocksize); // memset(block_buffer, '\0', ba.size()*blocksize); // memcpy(block_buffer, ba.data(), ba.length()); // qDebug() << block_buffer; // i=mcrypt_generic_init(td, key, keysize, NULL); // if (i<0) { // mcrypt_perror(i); // return ""; // } // //mcrypt_generic (td, &block_buffer, 1); // int rc = mdecrypt_generic(td, block_buffer, ba.length()); // QLOG_DEBUG() << rc; // /* Deinit the encryption thread, and unload the module */ // mcrypt_generic_end(td); // QByteArray ba3; // ba3.append(block_buffer, ba.size()*blocksize); // QLOG_DEBUG() << ba3.toHex(); // QLOG_DEBUG() << QByteArray::fromBase64(ba3); // return ""; } //QByteArray EnCrypt::CRC32(QByteArray ba) { // boost::crc_32_type result; // result.process_bytes(ba.constData(), ba.size()); // qulonglong crc = result.checksum(); // QByteArray rc; // rc.setNum(crc,16); // return rc.mid(0,4).toUpper(); //} ��������nixnote2-2.0.2/utilities/encrypt.h������������������������������������������������������������������0000664�0000000�0000000�00000004005�13156041044�0017126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef ENCRYPT_H #define ENCRYPT_H #include <QString> #include <string> using namespace std; class EnCrypt { private: bool do_encrypt(const char *in, unsigned char *out, int *outlen, unsigned char *key, unsigned char *iv); bool do_decrypt(const unsigned char *in, unsigned char *out, int inlen, unsigned char *key, unsigned char *iv); string string_to_hex(const std::string& input); string hex_to_string(const std::string& input); int runner(QString &result, QString text, QString passphrase, QString method, int keylen); public: EnCrypt(); enum CryptoResults { Java_Not_Found = 255, Invalid_Arguments = 16, Invaid_Method = 14, Invalid_Key = 4 }; int encrypt(QString&result, QString text, QString passphrase, QString cipher, int length); int encrypt(QString &result, QString text, QString passphrase); int decrypt(QString &result, QString text, QString passphrase, QString cipher, int length); int decrypt(QString &result, QString text, QString passphrase); //QByteArray CRC32(QByteArray ba); }; #endif // ENCRYPT_H ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/mimereference.cpp����������������������������������������������������������0000664�0000000�0000000�00000117461�13156041044�0020616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "mimereference.h" MimeReference::MimeReference(QObject *parent) : QObject(parent) { table = new QHash<QString,QString>(); table->insert("application/vnd.hzn-3d-crossword",".x3d"); table->insert("video/3gpp",".3gp"); table->insert("video/3gpp2",".3g2"); table->insert("application/vnd.mseq",".mseq"); table->insert("application/vnd.3m.post-it-notes",".pwn"); table->insert("application/vnd.3gpp.pic-bw-large",".plb"); table->insert("application/vnd.3gpp.pic-bw-small",".psb"); table->insert("application/vnd.3gpp.pic-bw-var",".pvb"); table->insert("application/vnd.3gpp2.tcap",".tcap"); table->insert("application/x-7z-compressed",".7z"); table->insert("application/x-abiword",".abw"); table->insert("application/x-ace-compressed",".ace"); table->insert("application/vnd.americandynamics.acc",".acc"); table->insert("application/vnd.acucobol",".acu"); table->insert("application/vnd.acucorp",".atc"); table->insert("audio/adpcm",".adp"); table->insert("application/x-authorware-bin",".aab"); table->insert("application/x-authorware-map",".aam"); table->insert("application/x-authorware-seg",".aas"); table->insert("application/vnd.adobe.air-application-installer-package+zip",".air"); table->insert("application/x-shockwave-flash",".swf"); table->insert("application/vnd.adobe.fxp",".fxp"); table->insert("application/pdf",".pdf"); table->insert("application/vnd.cups-ppd",".ppd"); table->insert("application/x-director",".dir"); table->insert("application/vnd.adobe.xdp+xml",".xdp"); table->insert("application/vnd.adobe.xfdf",".xfdf"); table->insert("audio/x-aac",".aac"); table->insert("application/vnd.ahead.space",".ahead"); table->insert("application/vnd.airzip.filesecure.azf",".azf"); table->insert("application/vnd.airzip.filesecure.azs",".azs"); table->insert("application/vnd.amazon.ebook",".azw"); table->insert("application/vnd.amiga.ami",".ami"); table->insert("application/andrew-inset","N/A"); table->insert("application/vnd.android.package-archive",".apk"); table->insert("application/vnd.anser-web-certificate-issue-initiation",".cii"); table->insert("application/vnd.anser-web-funds-transfer-initiation",".fti"); table->insert("application/vnd.antix.game-component",".atx"); table->insert("application/vnd.apple.installer+xml",".mpkg"); table->insert("application/applixware",".aw"); table->insert("application/vnd.hhe.lesson-player",".les"); table->insert("application/vnd.aristanetworks.swi",".swi"); table->insert("text/x-asm",".s"); table->insert("application/atomcat+xml",".atomcat"); table->insert("application/atomsvc+xml",".atomsvc"); table->insert("application/atom+xml",".xml"); table->insert("application/pkix-attr-cert",".ac"); table->insert("audio/x-aiff",".aif"); table->insert("video/x-msvideo",".avi"); table->insert("application/vnd.audiograph",".aep"); table->insert("image/vnd.dxf",".dxf"); table->insert("model/vnd.dwf",".dwf"); table->insert("application/x-bcpio",".bcpio"); table->insert("application/octet-stream",".bin"); table->insert("image/bmp",".bmp"); table->insert("application/x-bittorrent",".torrent"); table->insert("application/vnd.rim.cod",".cod"); table->insert("application/vnd.blueice.multipass",".mpm"); table->insert("application/vnd.bmi",".bmi"); table->insert("application/x-sh",".sh"); table->insert("image/prs.btif",".btif"); table->insert("application/vnd.businessobjects",".rep"); table->insert("application/x-bzip",".bz"); table->insert("application/x-bzip2",".bz2"); table->insert("application/x-csh",".csh"); table->insert("text/x-c",".c"); table->insert("application/vnd.chemdraw+xml",".cdxml"); table->insert("text/css",".css"); table->insert("chemical/x-cdx",".cdx"); table->insert("chemical/x-cml",".cml"); table->insert("chemical/x-csml",".csml"); table->insert("application/vnd.contact.cmsg",".cdbcmsg"); table->insert("application/vnd.claymore",".cla"); table->insert("application/vnd.clonk.c4group",".c4g"); table->insert("image/vnd.dvb.subtitle",".sub"); table->insert("application/cdmi-capability",".cdmia"); table->insert("application/cdmi-container",".cdmic"); table->insert("application/cdmi-domain",".cdmid"); table->insert("application/cdmi-object",".cdmio"); table->insert("application/cdmi-queue",".cdmiq"); table->insert("application/vnd.cluetrust.cartomobile-config",".c11amc"); table->insert("application/vnd.cluetrust.cartomobile-config-pkg",".c11amz"); table->insert("image/x-cmu-raster",".ras"); table->insert("model/vnd.collada+xml",".dae"); table->insert("text/csv",".csv"); table->insert("application/mac-compactpro",".cpt"); table->insert("application/vnd.wap.wmlc",".wmlc"); table->insert("image/cgm",".cgm"); table->insert("x-conference/x-cooltalk",".ice"); table->insert("image/x-cmx",".cmx"); table->insert("application/vnd.xara",".xar"); table->insert("application/vnd.cosmocaller",".cmc"); table->insert("application/x-cpio",".cpio"); table->insert("application/vnd.crick.clicker",".clkx"); table->insert("application/vnd.crick.clicker.keyboard",".clkk"); table->insert("application/vnd.crick.clicker.palette",".clkp"); table->insert("application/vnd.crick.clicker.template",".clkt"); table->insert("application/vnd.crick.clicker.wordbank",".clkw"); table->insert("application/vnd.criticaltools.wbs+xml",".wbs"); table->insert("application/vnd.rig.cryptonote",".cryptonote"); table->insert("chemical/x-cif",".cif"); table->insert("chemical/x-cmdf",".cmdf"); table->insert("application/cu-seeme",".cu"); table->insert("application/prs.cww",".cww"); table->insert("text/vnd.curl",".curl"); table->insert("text/vnd.curl.dcurl",".dcurl"); table->insert("text/vnd.curl.mcurl",".mcurl"); table->insert("text/vnd.curl.scurl",".scurl"); table->insert("application/vnd.curl.car",".car"); table->insert("application/vnd.curl.pcurl",".pcurl"); table->insert("application/vnd.yellowriver-custom-menu",".cmp"); table->insert("application/dssc+der",".dssc"); table->insert("application/dssc+xml",".xdssc"); table->insert("application/x-debian-package",".deb"); table->insert("audio/vnd.dece.audio",".uva"); table->insert("image/vnd.dece.graphic",".uvi"); table->insert("video/vnd.dece.hd",".uvh"); table->insert("video/vnd.dece.mobile",".uvm"); table->insert("video/vnd.uvvu.mp4",".uvu"); table->insert("video/vnd.dece.pd",".uvp"); table->insert("video/vnd.dece.sd",".uvs"); table->insert("video/vnd.dece.video",".uvv"); table->insert("application/x-dvi",".dvi"); table->insert("application/vnd.fdsn.seed",".seed"); table->insert("application/x-dtbook+xml",".dtb"); table->insert("application/x-dtbresource+xml",".res"); table->insert("application/vnd.dvb.ait",".ait"); table->insert("application/vnd.dvb.service",".svc"); table->insert("audio/vnd.digital-winds",".eol"); table->insert("image/vnd.djvu",".djvu"); table->insert("application/xml-dtd",".dtd"); table->insert("application/vnd.dolby.mlp",".mlp"); table->insert("application/x-doom",".wad"); table->insert("application/vnd.dpgraph",".dpg"); table->insert("audio/vnd.dra",".dra"); table->insert("application/vnd.dreamfactory",".dfac"); table->insert("audio/vnd.dts",".dts"); table->insert("audio/vnd.dts.hd",".dtshd"); table->insert("image/vnd.dwg",".dwg"); table->insert("application/vnd.dynageo",".geo"); table->insert("application/ecmascript",".es"); table->insert("application/vnd.ecowin.chart",".mag"); table->insert("image/vnd.fujixerox.edmics-mmr",".mmr"); table->insert("image/vnd.fujixerox.edmics-rlc",".rlc"); table->insert("application/exi",".exi"); table->insert("application/vnd.proteus.magazine",".mgz"); table->insert("application/epub+zip",".epub"); table->insert("message/rfc822",".eml"); table->insert("application/vnd.enliven",".nml"); table->insert("application/vnd.is-xpr",".xpr"); table->insert("image/vnd.xiff",".xif"); table->insert("application/vnd.xfdl",".xfdl"); table->insert("application/emma+xml",".emma"); table->insert("application/vnd.ezpix-album",".ez2"); table->insert("application/vnd.ezpix-package",".ez3"); table->insert("image/vnd.fst",".fst"); table->insert("video/vnd.fvt",".fvt"); table->insert("image/vnd.fastbidsheet",".fbs"); table->insert("application/vnd.denovo.fcselayout-link",".fe_launch"); table->insert("video/x-f4v",".f4v"); table->insert("video/x-flv",".flv"); table->insert("image/vnd.fpx",".fpx"); table->insert("image/vnd.net-fpx",".npx"); table->insert("text/vnd.fmi.flexstor",".flx"); table->insert("video/x-fli",".fli"); table->insert("application/vnd.fluxtime.clip",".ftc"); table->insert("application/vnd.fdf",".fdf"); table->insert("text/x-fortran",".f"); table->insert("application/vnd.mif",".mif"); table->insert("application/vnd.framemaker",".fm"); table->insert("image/x-freehand",".fh"); table->insert("application/vnd.fsc.weblaunch",".fsc"); table->insert("application/vnd.frogans.fnc",".fnc"); table->insert("application/vnd.frogans.ltf",".ltf"); table->insert("application/vnd.fujixerox.ddd",".ddd"); table->insert("application/vnd.fujixerox.docuworks",".xdw"); table->insert("application/vnd.fujixerox.docuworks.binder",".xbd"); table->insert("application/vnd.fujitsu.oasys",".oas"); table->insert("application/vnd.fujitsu.oasys2",".oa2"); table->insert("application/vnd.fujitsu.oasys3",".oa3"); table->insert("application/vnd.fujitsu.oasysgp",".fg5"); table->insert("application/vnd.fujitsu.oasysprs",".bh2"); table->insert("application/x-futuresplash",".spl"); table->insert("application/vnd.fuzzysheet",".fzs"); table->insert("image/g3fax",".g3"); table->insert("application/vnd.gmx",".gmx"); table->insert("model/vnd.gtw",".gtw"); table->insert("application/vnd.genomatix.tuxedo",".txd"); table->insert("application/vnd.geogebra.file",".ggb"); table->insert("application/vnd.geogebra.tool",".ggt"); table->insert("model/vnd.gdl",".gdl"); table->insert("application/vnd.geometry-explorer",".gex"); table->insert("application/vnd.geonext",".gxt"); table->insert("application/vnd.geoplan",".g2w"); table->insert("application/vnd.geospace",".g3w"); table->insert("application/x-font-ghostscript",".gsf"); table->insert("application/x-font-bdf",".bdf"); table->insert("application/x-gtar",".gtar"); table->insert("application/x-texinfo",".texinfo"); table->insert("application/x-gnumeric",".gnumeric"); table->insert("application/vnd.google-earth.kml+xml",".kml"); table->insert("application/vnd.google-earth.kmz",".kmz"); table->insert("application/vnd.grafeq",".gqf"); table->insert("image/gif",".gif"); table->insert("text/vnd.graphviz",".gv"); table->insert("application/vnd.groove-account",".gac"); table->insert("application/vnd.groove-help",".ghf"); table->insert("application/vnd.groove-identity-message",".gim"); table->insert("application/vnd.groove-injector",".grv"); table->insert("application/vnd.groove-tool-message",".gtm"); table->insert("application/vnd.groove-tool-template",".tpl"); table->insert("application/vnd.groove-vcard",".vcg"); table->insert("video/h261",".h261"); table->insert("video/h263",".h263"); table->insert("video/h264",".h264"); table->insert("application/vnd.hp-hpid",".hpid"); table->insert("application/vnd.hp-hps",".hps"); table->insert("application/x-hdf",".hdf"); table->insert("audio/vnd.rip",".rip"); table->insert("application/vnd.hbci",".hbci"); table->insert("application/vnd.hp-jlyt",".jlt"); table->insert("application/vnd.hp-pcl",".pcl"); table->insert("application/vnd.hp-hpgl",".hpgl"); table->insert("application/vnd.yamaha.hv-script",".hvs"); table->insert("application/vnd.yamaha.hv-dic",".hvd"); table->insert("application/vnd.yamaha.hv-voice",".hvp"); table->insert("application/vnd.hydrostatix.sof-data",".sfd-hdstx"); table->insert("application/hyperstudio",".stk"); table->insert("application/vnd.hal+xml",".hal"); table->insert("text/html",".html"); table->insert("application/vnd.ibm.rights-management",".irm"); table->insert("application/vnd.ibm.secure-container",".sc"); table->insert("text/calendar",".ics"); table->insert("application/vnd.iccprofile",".icc"); table->insert("image/x-icon",".ico"); table->insert("application/vnd.igloader",".igl"); table->insert("image/ief",".ief"); table->insert("application/vnd.immervision-ivp",".ivp"); table->insert("application/vnd.immervision-ivu",".ivu"); table->insert("application/reginfo+xml",".rif"); table->insert("text/vnd.in3d.3dml",".3dml"); table->insert("text/vnd.in3d.spot",".spot"); table->insert("model/iges",".igs"); table->insert("application/vnd.intergeo",".i2g"); table->insert("application/vnd.cinderella",".cdy"); table->insert("application/vnd.intercon.formnet",".xpw"); table->insert("application/vnd.isac.fcs",".fcs"); table->insert("application/ipfix",".ipfix"); table->insert("application/pkix-cert",".cer"); table->insert("application/pkixcmp",".pki"); table->insert("application/pkix-crl",".crl"); table->insert("application/pkix-pkipath",".pkipath"); table->insert("application/vnd.insors.igm",".igm"); table->insert("application/vnd.ipunplugged.rcprofile",".rcprofile"); table->insert("application/vnd.irepository.package+xml",".irp"); table->insert("text/vnd.sun.j2me.app-descriptor",".jad"); table->insert("application/java-archive",".jar"); table->insert("application/java-vm",".class"); table->insert("application/x-java-jnlp-file",".jnlp"); table->insert("application/java-serialized-object",".ser"); table->insert("text/x-java-source",".java"); table->insert("application/javascript",".js"); table->insert("application/json",".json"); table->insert("application/vnd.joost.joda-archive",".joda"); table->insert("video/jpm",".jpm"); table->insert("image/jpeg",".jpg"); table->insert("application/vnd.kahootz",".ktz"); table->insert("application/vnd.chipnuts.karaoke-mmd",".mmd"); table->insert("application/vnd.kde.karbon",".karbon"); table->insert("application/vnd.kde.kchart",".chrt"); table->insert("application/vnd.kde.kformula",".kfo"); table->insert("application/vnd.kde.kivio",".flw"); table->insert("application/vnd.kde.kontour",".kon"); table->insert("application/vnd.kde.kpresenter",".kpr"); table->insert("application/vnd.kde.kspread",".ksp"); table->insert("application/vnd.kde.kword",".kwd"); table->insert("application/vnd.kenameaapp",".htke"); table->insert("application/vnd.kidspiration",".kia"); table->insert("application/vnd.kinar",".kne"); table->insert("application/vnd.kodak-descriptor",".sse"); table->insert("application/vnd.las.las+xml",".lasxml"); table->insert("application/x-latex",".latex"); table->insert("application/vnd.llamagraphics.life-balance.desktop",".lbd"); table->insert("application/vnd.llamagraphics.life-balance.exchange+xml",".lbe"); table->insert("application/vnd.jam",".jam"); table->insert("application/vnd.lotus-1-2-3","0.123"); table->insert("application/vnd.lotus-approach",".apr"); table->insert("application/vnd.lotus-freelance",".pre"); table->insert("application/vnd.lotus-notes",".nsf"); table->insert("application/vnd.lotus-organizer",".org"); table->insert("application/vnd.lotus-screencam",".scm"); table->insert("application/vnd.lotus-wordpro",".lwp"); table->insert("audio/vnd.lucent.voice",".lvp"); table->insert("audio/x-mpegurl",".m3u"); table->insert("video/x-m4v",".m4v"); table->insert("application/mac-binhex40",".hqx"); table->insert("application/vnd.macports.portpkg",".portpkg"); table->insert("application/vnd.osgeo.mapguide.package",".mgp"); table->insert("application/marc",".mrc"); table->insert("application/marcxml+xml",".mrcx"); table->insert("application/mxf",".mxf"); table->insert("application/vnd.wolfram.player",".nbp"); table->insert("application/mathematica",".ma"); table->insert("application/mathml+xml",".mathml"); table->insert("application/mbox",".mbox"); table->insert("application/vnd.medcalcdata",".mc1"); table->insert("application/mediaservercontrol+xml",".mscml"); table->insert("application/vnd.mediastation.cdkey",".cdkey"); table->insert("application/vnd.mfer",".mwf"); table->insert("application/vnd.mfmp",".mfm"); table->insert("model/mesh",".msh"); table->insert("application/mads+xml",".mads"); table->insert("application/mets+xml",".mets"); table->insert("application/mods+xml",".mods"); table->insert("application/metalink4+xml",".meta4"); table->insert("application/vnd.ms-powerpoint.template.macroenabled.12",".potm"); table->insert("application/vnd.ms-word.document.macroenabled.12",".docm"); table->insert("application/vnd.ms-word.template.macroenabled.12",".dotm"); table->insert("application/vnd.mcd",".mcd"); table->insert("application/vnd.micrografx.flo",".flo"); table->insert("application/vnd.micrografx.igx",".igx"); table->insert("application/vnd.eszigno3+xml",".es3"); table->insert("application/x-msaccess",".mdb"); table->insert("video/x-ms-asf",".asf"); table->insert("application/x-msdownload",".exe"); table->insert("application/vnd.ms-artgalry",".cil"); table->insert("application/vnd.ms-cab-compressed",".cab"); table->insert("application/vnd.ms-ims",".ims"); table->insert("application/x-ms-application",".application"); table->insert("application/x-msclip",".clp"); table->insert("image/vnd.ms-modi",".mdi"); table->insert("application/vnd.ms-fontobject",".eot"); table->insert("application/vnd.ms-excel",".xls"); table->insert("application/vnd.ms-excel.addin.macroenabled.12",".xlam"); table->insert("application/vnd.ms-excel.sheet.binary.macroenabled.12",".xlsb"); table->insert("application/vnd.ms-excel.template.macroenabled.12",".xltm"); table->insert("application/vnd.ms-excel.sheet.macroenabled.12",".xlsm"); table->insert("application/vnd.ms-htmlhelp",".chm"); table->insert("application/x-mscardfile",".crd"); table->insert("application/vnd.ms-lrm",".lrm"); table->insert("application/x-msmediaview",".mvb"); table->insert("application/x-msmoney",".mny"); table->insert("application/vnd.openxmlformats-officedocument.presentationml.presentation",".pptx"); table->insert("application/vnd.openxmlformats-officedocument.presentationml.slide",".sldx"); table->insert("application/vnd.openxmlformats-officedocument.presentationml.slideshow",".ppsx"); table->insert("application/vnd.openxmlformats-officedocument.presentationml.template",".potx"); table->insert("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".xlsx"); table->insert("application/vnd.openxmlformats-officedocument.spreadsheetml.template",".xltx"); table->insert("application/vnd.openxmlformats-officedocument.wordprocessingml.document",".docx"); table->insert("application/vnd.openxmlformats-officedocument.wordprocessingml.template",".dotx"); table->insert("application/x-msbinder",".obd"); table->insert("application/vnd.ms-officetheme",".thmx"); table->insert("application/onenote",".onetoc"); table->insert("audio/vnd.ms-playready.media.pya",".pya"); table->insert("video/vnd.ms-playready.media.pyv",".pyv"); table->insert("application/vnd.ms-powerpoint",".ppt"); table->insert("application/vnd.ms-powerpoint.addin.macroenabled.12",".ppam"); table->insert("application/vnd.ms-powerpoint.slide.macroenabled.12",".sldm"); table->insert("application/vnd.ms-powerpoint.presentation.macroenabled.12",".pptm"); table->insert("application/vnd.ms-powerpoint.slideshow.macroenabled.12",".ppsm"); table->insert("application/vnd.ms-project",".mpp"); table->insert("application/x-mspublisher",".pub"); table->insert("application/x-msschedule",".scd"); table->insert("application/x-silverlight-app",".xap"); table->insert("application/vnd.ms-pki.stl",".stl"); table->insert("application/vnd.ms-pki.seccat",".cat"); table->insert("application/vnd.visio",".vsd"); table->insert("video/x-ms-wm",".wm"); table->insert("audio/x-ms-wma",".wma"); table->insert("audio/x-ms-wax",".wax"); table->insert("video/x-ms-wmx",".wmx"); table->insert("application/x-ms-wmd",".wmd"); table->insert("application/vnd.ms-wpl",".wpl"); table->insert("application/x-ms-wmz",".wmz"); table->insert("video/x-ms-wmv",".wmv"); table->insert("video/x-ms-wvx",".wvx"); table->insert("application/x-msmetafile",".wmf"); table->insert("application/x-msterminal",".trm"); table->insert("application/msword",".doc"); table->insert("application/x-mswrite",".wri"); table->insert("application/vnd.ms-works",".wps"); table->insert("application/x-ms-xbap",".xbap"); table->insert("application/vnd.ms-xpsdocument",".xps"); table->insert("audio/midi",".mid"); table->insert("application/vnd.ibm.minipay",".mpy"); table->insert("application/vnd.ibm.modcap",".afp"); table->insert("application/vnd.jcp.javame.midlet-rms",".rms"); table->insert("application/vnd.tmobile-livetv",".tmo"); table->insert("application/x-mobipocket-ebook",".prc"); table->insert("application/vnd.mobius.mbk",".mbk"); table->insert("application/vnd.mobius.dis",".dis"); table->insert("application/vnd.mobius.plc",".plc"); table->insert("application/vnd.mobius.mqy",".mqy"); table->insert("application/vnd.mobius.msl",".msl"); table->insert("application/vnd.mobius.txf",".txf"); table->insert("application/vnd.mobius.daf",".daf"); table->insert("text/vnd.fly",".fly"); table->insert("application/vnd.mophun.certificate",".mpc"); table->insert("application/vnd.mophun.application",".mpn"); table->insert("video/mj2",".mj2"); table->insert("audio/mpeg",".mpga"); table->insert("video/vnd.mpegurl",".mxu"); table->insert("video/mpeg",".mpeg"); table->insert("application/mp21",".m21"); table->insert("audio/mp4",".mp4a"); table->insert("video/mp4",".mp4"); table->insert("application/mp4",".mp4"); table->insert("application/vnd.apple.mpegurl",".m3u8"); table->insert("application/vnd.musician",".mus"); table->insert("application/vnd.muvee.style",".msty"); table->insert("application/xv+xml",".mxml"); table->insert("application/vnd.nokia.n-gage.data",".ngdat"); table->insert("application/vnd.nokia.n-gage.symbian.install",".n-gage"); table->insert("application/x-dtbncx+xml",".ncx"); table->insert("application/x-netcdf",".nc"); table->insert("application/vnd.neurolanguage.nlu",".nlu"); table->insert("application/vnd.dna",".dna"); table->insert("application/vnd.noblenet-directory",".nnd"); table->insert("application/vnd.noblenet-sealer",".nns"); table->insert("application/vnd.noblenet-web",".nnw"); table->insert("application/vnd.nokia.radio-preset",".rpst"); table->insert("application/vnd.nokia.radio-presets",".rpss"); table->insert("text/n3",".n3"); table->insert("application/vnd.novadigm.edm",".edm"); table->insert("application/vnd.novadigm.edx",".edx"); table->insert("application/vnd.novadigm.ext",".ext"); table->insert("application/vnd.flographit",".gph"); table->insert("audio/vnd.nuera.ecelp4800",".ecelp4800"); table->insert("audio/vnd.nuera.ecelp7470",".ecelp7470"); table->insert("audio/vnd.nuera.ecelp9600",".ecelp9600"); table->insert("application/oda",".oda"); table->insert("application/ogg",".ogx"); table->insert("audio/ogg",".oga"); table->insert("video/ogg",".ogv"); table->insert("application/vnd.oma.dd2+xml",".dd2"); table->insert("application/vnd.oasis.opendocument.text-web",".oth"); table->insert("application/oebps-package+xml",".opf"); table->insert("application/vnd.intu.qbo",".qbo"); table->insert("application/vnd.openofficeorg.extension",".oxt"); table->insert("application/vnd.yamaha.openscoreformat",".osf"); table->insert("audio/webm",".weba"); table->insert("video/webm",".webm"); table->insert("application/vnd.oasis.opendocument.chart",".odc"); table->insert("application/vnd.oasis.opendocument.chart-template",".otc"); table->insert("application/vnd.oasis.opendocument.database",".odb"); table->insert("application/vnd.oasis.opendocument.formula",".odf"); table->insert("application/vnd.oasis.opendocument.formula-template",".odft"); table->insert("application/vnd.oasis.opendocument.graphics",".odg"); table->insert("application/vnd.oasis.opendocument.graphics-template",".otg"); table->insert("application/vnd.oasis.opendocument.image",".odi"); table->insert("application/vnd.oasis.opendocument.image-template",".oti"); table->insert("application/vnd.oasis.opendocument.presentation",".odp"); table->insert("application/vnd.oasis.opendocument.presentation-template",".otp"); table->insert("application/vnd.oasis.opendocument.spreadsheet",".ods"); table->insert("application/vnd.oasis.opendocument.spreadsheet-template",".ots"); table->insert("application/vnd.oasis.opendocument.text",".odt"); table->insert("application/vnd.oasis.opendocument.text-master",".odm"); table->insert("application/vnd.oasis.opendocument.text-template",".ott"); table->insert("image/ktx",".ktx"); table->insert("application/vnd.sun.xml.calc",".sxc"); table->insert("application/vnd.sun.xml.calc.template",".stc"); table->insert("application/vnd.sun.xml.draw",".sxd"); table->insert("application/vnd.sun.xml.draw.template",".std"); table->insert("application/vnd.sun.xml.impress",".sxi"); table->insert("application/vnd.sun.xml.impress.template",".sti"); table->insert("application/vnd.sun.xml.math",".sxm"); table->insert("application/vnd.sun.xml.writer",".sxw"); table->insert("application/vnd.sun.xml.writer.global",".sxg"); table->insert("application/vnd.sun.xml.writer.template",".stw"); table->insert("application/x-font-otf",".otf"); table->insert("application/vnd.yamaha.openscoreformat.osfpvg+xml",".osfpvg"); table->insert("application/vnd.osgi.dp",".dp"); table->insert("application/vnd.palm",".pdb"); table->insert("text/x-pascal",".p"); table->insert("application/vnd.pawaafile",".paw"); table->insert("application/vnd.hp-pclxl",".pclxl"); table->insert("application/vnd.picsel",".efif"); table->insert("image/x-pcx",".pcx"); table->insert("image/vnd.adobe.photoshop",".psd"); table->insert("application/pics-rules",".prf"); table->insert("image/x-pict",".pic"); table->insert("application/x-chat",".chat"); table->insert("application/pkcs10",".p10"); table->insert("application/x-pkcs12",".p12"); table->insert("application/pkcs7-mime",".p7m"); table->insert("application/pkcs7-signature",".p7s"); table->insert("application/x-pkcs7-certreqresp",".p7r"); table->insert("application/x-pkcs7-certificates",".p7b"); table->insert("application/pkcs8",".p8"); table->insert("application/vnd.pocketlearn",".plf"); table->insert("image/x-portable-anymap",".pnm"); table->insert("image/x-portable-bitmap",".pbm"); table->insert("application/x-font-pcf",".pcf"); table->insert("application/font-tdpfr",".pfr"); table->insert("application/x-chess-pgn",".pgn"); table->insert("image/x-portable-graymap",".pgm"); table->insert("image/png",".png"); table->insert("image/x-portable-pixmap",".ppm"); table->insert("application/pskc+xml",".pskcxml"); table->insert("application/vnd.ctc-posml",".pml"); table->insert("application/postscript",".ai"); table->insert("application/x-font-type1",".pfa"); table->insert("application/vnd.powerbuilder6",".pbd"); table->insert("application/pgp-encrypted",""); table->insert("application/pgp-signature",".pgp"); table->insert("application/vnd.previewsystems.box",".box"); table->insert("application/vnd.pvi.ptid1",".ptid"); table->insert("application/pls+xml",".pls"); table->insert("application/vnd.pg.format",".str"); table->insert("application/vnd.pg.osasli",".ei6"); table->insert("text/prs.lines.tag",".dsc"); table->insert("application/x-font-linux-psf",".psf"); table->insert("application/vnd.publishare-delta-tree",".qps"); table->insert("application/vnd.pmi.widget",".wg"); table->insert("application/vnd.quark.quarkxpress",".qxd"); table->insert("application/vnd.epson.esf",".esf"); table->insert("application/vnd.epson.msf",".msf"); table->insert("application/vnd.epson.ssf",".ssf"); table->insert("application/vnd.epson.quickanime",".qam"); table->insert("application/vnd.intu.qfx",".qfx"); table->insert("video/quicktime",".qt"); table->insert("application/x-rar-compressed",".rar"); table->insert("audio/x-pn-realaudio",".ram"); table->insert("audio/x-pn-realaudio-plugin",".rmp"); table->insert("application/rsd+xml",".rsd"); table->insert("application/vnd.rn-realmedia",".rm"); table->insert("application/vnd.realvnc.bed",".bed"); table->insert("application/vnd.recordare.musicxml",".mxl"); table->insert("application/vnd.recordare.musicxml+xml",".musicxml"); table->insert("application/relax-ng-compact-syntax",".rnc"); table->insert("application/vnd.data-vision.rdz",".rdz"); table->insert("application/rdf+xml",".rdf"); table->insert("application/vnd.cloanto.rp9",".rp9"); table->insert("application/vnd.jisp",".jisp"); table->insert("application/rtf",".rtf"); table->insert("text/richtext",".rtx"); table->insert("application/vnd.route66.link66+xml",".link66"); table->insert("application/rss+xml",".xml"); table->insert("application/shf+xml",".shf"); table->insert("application/vnd.sailingtracker.track",".st"); table->insert("image/svg+xml",".svg"); table->insert("application/vnd.sus-calendar",".sus"); table->insert("application/sru+xml",".sru"); table->insert("application/set-payment-initiation",".setpay"); table->insert("application/set-registration-initiation",".setreg"); table->insert("application/vnd.sema",".sema"); table->insert("application/vnd.semd",".semd"); table->insert("application/vnd.semf",".semf"); table->insert("application/vnd.seemail",".see"); table->insert("application/x-font-snf",".snf"); table->insert("application/scvp-vp-request",".spq"); table->insert("application/scvp-vp-response",".spp"); table->insert("application/scvp-cv-request",".scq"); table->insert("application/scvp-cv-response",".scs"); table->insert("application/sdp",".sdp"); table->insert("text/x-setext",".etx"); table->insert("video/x-sgi-movie",".movie"); table->insert("application/vnd.shana.informed.formdata",".ifm"); table->insert("application/vnd.shana.informed.formtemplate",".itp"); table->insert("application/vnd.shana.informed.interchange",".iif"); table->insert("application/vnd.shana.informed.package",".ipk"); table->insert("application/thraud+xml",".tfi"); table->insert("application/x-shar",".shar"); table->insert("image/x-rgb",".rgb"); table->insert("application/vnd.epson.salt",".slt"); table->insert("application/vnd.accpac.simply.aso",".aso"); table->insert("application/vnd.accpac.simply.imp",".imp"); table->insert("application/vnd.simtech-mindmapper",".twd"); table->insert("application/vnd.commonspace",".csp"); table->insert("application/vnd.yamaha.smaf-audio",".saf"); table->insert("application/vnd.smaf",".mmf"); table->insert("application/vnd.yamaha.smaf-phrase",".spf"); table->insert("application/vnd.smart.teacher",".teacher"); table->insert("application/vnd.svd",".svd"); table->insert("application/sparql-query",".rq"); table->insert("application/sparql-results+xml",".srx"); table->insert("application/srgs",".gram"); table->insert("application/srgs+xml",".grxml"); table->insert("application/ssml+xml",".ssml"); table->insert("application/vnd.koan",".skp"); table->insert("text/sgml",".sgml"); table->insert("application/vnd.stardivision.calc",".sdc"); table->insert("application/vnd.stardivision.draw",".sda"); table->insert("application/vnd.stardivision.impress",".sdd"); table->insert("application/vnd.stardivision.math",".smf"); table->insert("application/vnd.stardivision.writer",".sdw"); table->insert("application/vnd.stardivision.writer-global",".sgl"); table->insert("application/vnd.stepmania.stepchart",".sm"); table->insert("application/x-stuffit",".sit"); table->insert("application/x-stuffitx",".sitx"); table->insert("application/vnd.solent.sdkm+xml",".sdkm"); table->insert("application/vnd.olpc-sugar",".xo"); table->insert("audio/basic",".au"); table->insert("application/vnd.wqd",".wqd"); table->insert("application/vnd.symbian.install",".sis"); table->insert("application/smil+xml",".smi"); table->insert("application/vnd.syncml+xml",".xsm"); table->insert("application/vnd.syncml.dm+wbxml",".bdm"); table->insert("application/vnd.syncml.dm+xml",".xdm"); table->insert("application/x-sv4cpio",".sv4cpio"); table->insert("application/x-sv4crc",".sv4crc"); table->insert("application/sbml+xml",".sbml"); table->insert("text/tab-separated-values",".tsv"); table->insert("image/tiff",".tiff"); table->insert("application/vnd.tao.intent-module-archive",".tao"); table->insert("application/x-tar",".tar"); table->insert("application/x-tcl",".tcl"); table->insert("application/x-tex",".tex"); table->insert("application/x-tex-tfm",".tfm"); table->insert("application/tei+xml",".tei"); table->insert("text/plain",".txt"); table->insert("application/vnd.spotfire.dxp",".dxp"); table->insert("application/vnd.spotfire.sfs",".sfs"); table->insert("application/timestamped-data",".tsd"); table->insert("application/vnd.trid.tpt",".tpt"); table->insert("application/vnd.triscape.mxs",".mxs"); table->insert("text/troff",".t"); table->insert("application/vnd.trueapp",".tra"); table->insert("application/x-font-ttf",".ttf"); table->insert("text/turtle",".ttl"); table->insert("application/vnd.umajin",".umj"); table->insert("application/vnd.uoml+xml",".uoml"); table->insert("application/vnd.unity",".unityweb"); table->insert("application/vnd.ufdl",".ufd"); table->insert("text/uri-list",".uri"); table->insert("application/vnd.uiq.theme",".utz"); table->insert("application/x-ustar",".ustar"); table->insert("text/x-uuencode",".uu"); table->insert("text/x-vcalendar",".vcs"); table->insert("text/x-vcard",".vcf"); table->insert("application/x-cdlink",".vcd"); table->insert("application/vnd.vsf",".vsf"); table->insert("model/vrml",".wrl"); table->insert("application/vnd.vcx",".vcx"); table->insert("model/vnd.mts",".mts"); table->insert("model/vnd.vtu",".vtu"); table->insert("application/vnd.visionary",".vis"); table->insert("video/vnd.vivo",".viv"); table->insert("application/ccxml+xml","ccxml"); table->insert("application/voicexml+xml",".vxml"); table->insert("application/x-wais-source",".src"); table->insert("application/vnd.wap.wbxml",".wbxml"); table->insert("image/vnd.wap.wbmp",".wbmp"); table->insert("audio/x-wav",".wav"); table->insert("application/davmount+xml",".davmount"); table->insert("application/x-font-woff",".woff"); table->insert("application/wspolicy+xml",".wspolicy"); table->insert("image/webp",".webp"); table->insert("application/vnd.webturbo",".wtb"); table->insert("application/widget",".wgt"); table->insert("application/winhlp",".hlp"); table->insert("text/vnd.wap.wml",".wml"); table->insert("text/vnd.wap.wmlscript",".wmls"); table->insert("application/vnd.wap.wmlscriptc",".wmlsc"); table->insert("application/vnd.wordperfect",".wpd"); table->insert("application/vnd.wt.stf",".stf"); table->insert("application/wsdl+xml",".wsdl"); table->insert("image/x-xbitmap",".xbm"); table->insert("image/x-xpixmap",".xpm"); table->insert("image/x-xwindowdump",".xwd"); table->insert("application/x-x509-ca-cert",".der"); table->insert("application/x-xfig",".fig"); table->insert("application/xhtml+xml",".xhtml"); table->insert("application/xml",".xml"); table->insert("application/xcap-diff+xml",".xdf"); table->insert("application/xenc+xml",".xenc"); table->insert("application/patch-ops-error+xml",".xer"); table->insert("application/resource-lists+xml",".rl"); table->insert("application/rls-services+xml",".rs"); table->insert("application/resource-lists-diff+xml",".rld"); table->insert("application/xslt+xml",".xslt"); table->insert("application/xop+xml",".xop"); table->insert("application/x-xpinstall",".xpi"); table->insert("application/xspf+xml",".xspf"); table->insert("application/vnd.mozilla.xul+xml",".xul"); table->insert("chemical/x-xyz",".xyz"); table->insert("application/yang",".yang"); table->insert("application/yin+xml",".yin"); table->insert("application/vnd.zul",".zir"); table->insert("application/zip",".zip"); table->insert("application/vnd.handheld-entertainment+xml",".zmm"); table->insert("application/vnd.zzazz.deck+xml",".zaz"); } MimeReference::~MimeReference() { delete table; } QString MimeReference::getExtensionFromMime(QString key, QString filename) { if (!table->contains(key)) { if (filename == "") filename = key; int pos = filename.lastIndexOf("."); if (pos != -1) { filename = filename.mid(pos); return filename.toLower(); } else { int pos = filename.lastIndexOf("/"); if (pos != -1) { pos++; filename = filename.mid(pos); return "."+filename; } } } QString extension = table->value(key); if (filename.endsWith(".zip", Qt::CaseInsensitive)) extension = ".zip"; return extension; } QString MimeReference::getMimeFromExtension(QString fileExtension) { QString retVal = table->key(fileExtension.toLower()); if (retVal == "") { return "application/data"; } return retVal; } QString MimeReference::getExtensionFromMime(string key, string mime) { return this->getExtensionFromMime(QString::fromStdString(key), QString::fromStdString(mime)); } QString MimeReference::getMimeFromExtension(string fileExtension) { return this->getMimeFromExtension(QString::fromStdString(fileExtension)); } QString MimeReference::getMimeFromFileName(QString fileName) { int pos = fileName.lastIndexOf("."); if (pos != -1) fileName = fileName.mid(pos); return getMimeFromExtension(fileName); } QString MimeReference::getMimeFromFileName(string filename) { return getMimeFromFileName(QString::fromStdString(filename)); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/mimereference.h������������������������������������������������������������0000664�0000000�0000000�00000003166�13156041044�0020257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef MIMEREFERENCE_H #define MIMEREFERENCE_H #include <QObject> #include <QHash> #include <string> using namespace std; class MimeReference : public QObject { Q_OBJECT public: explicit MimeReference(QObject *parent = 0); ~MimeReference(); QHash<QString,QString> *table; QString getExtensionFromMime(QString mime, QString filename); QString getMimeFromExtension(QString fileExtension); QString getMimeFromExtension(string fileExtension); QString getMimeFromFileName(QString fileName); QString getMimeFromFileName(string filename); QString getExtensionFromMime(string extension, string filename); signals: public slots: }; #endif // MIMEREFERENCE_H ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/noteindexer.cpp������������������������������������������������������������0000664�0000000�0000000�00000020643�13156041044�0020327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "noteindexer.h" #include "global.h" #include "sql/notetable.h" #include "sql/nsqlquery.h" #include "sql/resourcetable.h" #include <QTextDocument> #include <QtXml> #if QT_VERSION < 0x050000 #include <poppler-qt4.h> #else #include <poppler-qt5.h> #endif extern Global global; using namespace Poppler; NoteIndexer::NoteIndexer(DatabaseConnection *db) { this->db = db; } void NoteIndexer::indexNote(qint32 lid) { NoteTable ntable(db); Note n; ntable.get(n, lid,false,false); if (n.title.isSet()) { QLOG_DEBUG() << "Indexing note: " << n.title; } QString content = ""; if (n.content.isSet()) content = n.content; // Start looking through the note qint32 startPos =content.indexOf(QChar('<')); qint32 endPos = content.indexOf(QChar('>'),startPos)+1; content.remove(startPos,endPos-startPos); // Remove encrypted text while (content.contains("<en-crypt")) { startPos = content.indexOf("<en-crypt"); endPos = content.indexOf("</en-crypt>") + 11; content = content.mid(0,startPos)+content.mid(endPos); } // Remove any XML tags while (content.contains(QChar('<'))) { startPos = content.indexOf(QChar('<')); endPos = content.indexOf(QChar('>'),startPos)+1; content.remove(startPos,endPos-startPos); }; // Get the content as an HTML doc. QTextDocument textDocument; textDocument.setHtml(content); QString title = ""; if (n.title.isSet()) title = n.title; content = textDocument.toPlainText() + " " + title; this->addTextIndex(lid, content); } void NoteIndexer::addTextIndex(int lid, QString content) { // Delete any old content NSqlQuery sql(db); sql.prepare("Delete from SearchIndex where lid=:lid and source=:source"); sql.bindValue(":lid", lid); sql.bindValue(":source", "text"); sql.exec(); // Add the new content. it is basically a text version of the note with a weight of 100. sql.prepare("Insert into SearchIndex (lid, weight, source, content) values (:lid, :weight, :source, :content)"); sql.bindValue(":lid", lid); sql.bindValue(":weight", 100); sql.bindValue(":source", "text"); if (!global.forceSearchLowerCase) sql.bindValue(":content", content); else sql.bindValue(":content", content.toLower()); sql.exec(); sql.prepare("Delete from DataStore where lid=:lid and key=:key"); sql.bindValue(":lid", lid); sql.bindValue(":key", NOTE_INDEX_NEEDED); sql.exec(); } void NoteIndexer::indexResource(qint32 lid) { // Since this can be called from multiple threads, we need to know which DB connection we are using. QLOG_DEBUG() << "Fetching resource for index using " << db->getConnectionName(); Resource r; ResourceTable resourceTable(db); resourceTable.get(r, lid, false); NSqlQuery sql(db); // Delete the old index QLOG_DEBUG() << "Deleting old resource from index"; sql.prepare("Delete from SearchIndex where lid=:lid"); sql.bindValue(":lid", lid); sql.exec(); QLOG_DEBUG() << "Adding attributes to index."; if (r.attributes.isSet()) { ResourceAttributes a = r.attributes; if (a.fileName.isSet()) { sql.prepare("Insert into SearchIndex (lid, weight, source, content) values (:lid, :weight, :source, :content)"); sql.bindValue(":lid", lid); sql.bindValue(":weight", 100); sql.bindValue(":source", "recognition"); sql.bindValue(":content", QString(a.fileName)); sql.exec(); } if (a.sourceURL.isSet()) { sql.prepare("Insert into SearchIndex (lid, weight, source, content) values (:lid, :weight, :source, :content)"); sql.bindValue(":lid", lid); sql.bindValue(":weight", 100); sql.bindValue(":source", "recognition"); sql.bindValue(":content", QString(a.sourceURL)); sql.exec(); } } QLOG_TRACE() << "Indexing recognition"; indexRecognition(lid, r); QString mime = ""; if (r.mime.isSet()) mime = r.mime; if (mime.toLower() == "application/pdf") this->indexPdf(lid); // else { // if (mime.startsWith("application", Qt::CaseInsensitive)) // indexAttachment(noteLid, r); // } QLOG_DEBUG() << "Resetting index needed."; sql.prepare("delete from DataStore where lid=:lid and key=:key"); sql.bindValue(":lid", lid); sql.bindValue(":key", RESOURCE_INDEX_NEEDED); sql.exec(); } // Index any resources void NoteIndexer::indexRecognition(qint32 reslid, Resource &r) { QLOG_TRACE_IN(); if (!r.noteGuid.isSet() || !r.guid.isSet()) return; if (reslid <= 0) return; NSqlQuery sql(db); // Make sure we have something to look through. Data recognition; if (r.recognition.isSet()) recognition = r.recognition; if (!recognition.body.isSet()) return; QDomDocument doc; QString emsg; doc.setContent(recognition.body, &emsg); // look for text tags QDomNodeList anchors = doc.documentElement().elementsByTagName("t"); QLOG_TRACE() << "Beginning insertion of recognition:"; QLOG_TRACE() << "Anchors found: " << anchors.length(); sql.exec("begin;"); #if QT_VERSION < 0x050000 for (unsigned int i=0; i<anchors.length(); i++) { #else for (int i=0; i<anchors.length(); i++) { #endif QLOG_TRACE() << "Anchor: " << i; QApplication::processEvents(); QDomElement enmedia = anchors.at(i).toElement(); QString weight = enmedia.attribute("w"); QString text = enmedia.text(); if (text != "") { // Add the new content. it is basically a text version of the note with a weight of 100. sql.prepare("Insert into SearchIndex (lid, weight, source, content) values (:lid, :weight, :source, :content)"); sql.bindValue(":lid", reslid); sql.bindValue(":weight", weight); sql.bindValue(":source", "recognition"); //sql.bindValue(":content", text); if (!global.forceSearchLowerCase) sql.bindValue(":content", text); else sql.bindValue(":content", text.toLower()); sql.exec(); } } QLOG_TRACE() << "Committing"; sql.exec("commit"); QLOG_TRACE_OUT(); } // Index any PDFs that are attached. Basically it turns the PDF into text and adds it the same // way as a note's body void NoteIndexer::indexPdf(qint32 reslid) { QLOG_TRACE_IN(); if (!global.indexPDFLocally) return; NSqlQuery sql(db); if (reslid <= 0) return; QString file = global.fileManager.getDbaDirPath() + QString::number(reslid) +".pdf"; QString text = ""; Poppler::Document *doc = Poppler::Document::load(file); if (doc == NULL || doc->isEncrypted() || doc->isLocked()) return; for (int i=0; i<doc->numPages(); i++) { QRectF rect; text = text + doc->page(i)->text(rect) + QString(" "); } QLOG_TRACE() << "Adding PDF"; // Add the new content. it is basically a text version of the note with a weight of 100. sql.prepare("Insert into SearchIndex (lid, weight, source, content) values (:lid, :weight, :source, :content)"); sql.bindValue(":lid", reslid); sql.bindValue(":weight", 100); sql.bindValue(":source", "recognition"); if (!global.forceSearchLowerCase) sql.bindValue(":content", text); else sql.bindValue(":content", text.toLower()); sql.exec(); QLOG_TRACE_OUT(); } ���������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/noteindexer.h��������������������������������������������������������������0000664�0000000�0000000�00000003066�13156041044�0017774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NOTEINDEXER_H #define NOTEINDEXER_H #include <QString> #include "sql/databaseconnection.h" #include <iostream> #include <string> #include <stdio.h> #include <QFileInfo> #include <QTextDocument> #include "qevercloud/include/QEverCloud.h" using namespace qevercloud; using namespace std; class NoteIndexer { private: DatabaseConnection *db; public: NoteIndexer(DatabaseConnection *db); void indexNote(qint32 lid); void addTextIndex(qint32 lid, QString content); void indexResource(qint32 lid); void indexRecognition(qint32 reslid, Resource &r); void indexPdf(qint32 reslid); }; #endif // NOTEINDEXER_H ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/nuuid.cpp������������������������������������������������������������������0000664�0000000�0000000�00000002171�13156041044�0017123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "nuuid.h" NUuid::NUuid(QObject *parent) : QObject(parent) { } QString NUuid::create() { QUuid uuid; return uuid.createUuid().toString().replace("{", "").replace("}", ""); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/nuuid.h��������������������������������������������������������������������0000664�0000000�0000000�00000002234�13156041044�0016570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef NUUID_H #define NUUID_H #include <QUuid> #include <QObject> class NUuid : public QObject { Q_OBJECT public: explicit NUuid(QObject *parent = 0); QString create(); signals: public slots: }; #endif // NUUID_H ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/pixelconverter.cpp���������������������������������������������������������0000664�0000000�0000000�00000004042�13156041044�0021047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "pixelconverter.h" PixelConverter::PixelConverter() { pointArray.insert(8,6); pointArray.insert(9,7); pointArray.insert(10,8); //Should really be 7.5 pointArray.insert(11,8); pointArray.insert(12,9); pointArray.insert(13,10); pointArray.insert(14,11); //Should really be 10.5 pointArray.insert(15,11); pointArray.insert(16,12); pointArray.insert(17,13); pointArray.insert(18,14); //should really be 14.5 pointArray.insert(19,14); pointArray.insert(20,15); pointArray.insert(21,15); pointArray.insert(22,16); pointArray.insert(23,17); pointArray.insert(24,18); pointArray.insert(26,20); pointArray.insert(29,22); pointArray.insert(32,24); pointArray.insert(35,26); pointArray.insert(36,27); pointArray.insert(37,28); pointArray.insert(38,29); pointArray.insert(40,30); pointArray.insert(42,32); pointArray.insert(45,34); pointArray.insert(48,36); } int PixelConverter::getPoints(int px) { if (px <=0) return -1; if (pointArray.contains(px)) return pointArray[px]; return px*3/4; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/pixelconverter.h�����������������������������������������������������������0000664�0000000�0000000�00000002215�13156041044�0020514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef PIXELCONVERTER_H #define PIXELCONVERTER_H #include <QHash> class PixelConverter { private: QHash<int,int> pointArray; public: PixelConverter(); int getPoints(int px); }; #endif // PIXELCONVERTER_H �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/spellchecker.cpp�����������������������������������������������������������0000664�0000000�0000000�00000007565�13156041044�0020457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "spellchecker.h" #include <QFile> #include <QLocale> #include <QTextStream> SpellChecker::SpellChecker(QObject *parent) : QObject(parent) { dictionaryPath.append("/usr/share/hunspell/"); dictionaryPath.append("/usr/share/myspell/"); dictionaryPath.append("/usr/share/myspell/dicts/"); dictionaryPath.append("/Library/Spelling/"); dictionaryPath.append("/opt/openoffice.org/basis3.0/share/dict/ooo/"); dictionaryPath.append("/opt/openoffice.org2.4/share/dict/ooo/"); dictionaryPath.append("/usr/lib/openoffice.org2.4/share/dict/ooo"); dictionaryPath.append("/opt/openoffice.org2.3/share/dict/ooo/"); dictionaryPath.append("/usr/lib/openoffice.org2.3/share/dict/ooo/"); dictionaryPath.append("/opt/openoffice.org2.2/share/dict/ooo/"); dictionaryPath.append("/usr/lib/openoffice.org2.2/share/dict/ooo/"); dictionaryPath.append("/opt/openoffice.org2.1/share/dict/ooo/"); dictionaryPath.append("/usr/lib/openoffice.org2.1/share/dict/ooo"); dictionaryPath.append("/opt/openoffice.org2.0/share/dict/ooo/"); dictionaryPath.append("/usr/lib/openoffice.org2.0/share/dict/ooo/"); error = false; } QString SpellChecker::findDictionary(QString file) { for (int i=0; i<dictionaryPath.size(); i++) { QFile f(dictionaryPath[i]+file); if (f.exists()) return dictionaryPath[i]+file; } return ""; } void SpellChecker::setup(QString programDictionary, QString customDictionary) { QString locale = QLocale::system().name(); dictionaryPath.prepend(programDictionary); dictionaryPath.prepend(customDictionary); QString aff = findDictionary(locale+".aff"); QString dic = findDictionary(locale+".dic"); if (dic=="" || aff == "") { error = true; errorMsg = tr("Unable to find dictionaries. Is Huntspell installed?"); return; } hunspell = new Hunspell(aff.toStdString().c_str(), dic.toStdString().c_str()); //Start adding custom words QFile f(customDictionary+"user.lst"); if (f.exists()) { f.open(QIODevice::ReadOnly); QTextStream in(&f); while ( !in.atEnd() ) { QString line = in.readLine(); hunspell->add(line.toStdString().c_str()); } f.close(); } } bool SpellChecker::spellCheck(QString word, QStringList &suggestions) { int isValid = hunspell->spell(word.toStdString().c_str()); suggestions.empty(); if (isValid) { return true; } char **wlst; int ns = hunspell->suggest(&wlst,word.toStdString().c_str()); for (int i=0; i < ns; i++) { suggestions.append(QString::fromStdString(wlst[i])); } return false; } void SpellChecker::addWord(QString dictionary, QString word) { hunspell->add(word.toStdString().c_str()); // Append to the end of the user dictionary //Start adding custom words QFile f(dictionary); f.open(QIODevice::Append); QTextStream out(&f); out << word; f.close(); } �������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/utilities/spellchecker.h�������������������������������������������������������������0000664�0000000�0000000�00000003145�13156041044�0020112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef SPELLCHECKER_H #define SPELLCHECKER_H #include <QObject> #include <QStringList> // Windows Check #ifndef _WIN32 #include <hunspell/hunspell.hxx> class SpellChecker : public QObject { Q_OBJECT private: QStringList dictionaryPath; QString findDictionary(QString file); Hunspell *hunspell; bool error; QString errorMsg; public: explicit SpellChecker(QObject *parent = 0); void setup(QString programDictionary, QString customDictionary); bool spellCheck(QString word, QStringList &suggestions); void addWord(QString dictionary, QString word); signals: public slots: }; #endif // end of windows check #endif // SPELLCHECKER_H ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/watcher/�����������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13156041044�0014714�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/watcher/filewatcher.cpp��������������������������������������������������������������0000664�0000000�0000000�00000025642�13156041044�0017726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "filewatcher.h" #include "global.h" #include "sql/configstore.h" #include "sql/notetable.h" #include "sql/notebooktable.h" #include "sql/resourcetable.h" #include "utilities/mimereference.h" #include "sql/filewatchertable.h" #include "xml/batchimport.h" #include "sql/tagtable.h" #include <QDirIterator> #if QT_VERSION < 0x050000 #include <QtScript/QScriptEngine> #else #include <QJSEngine> #endif extern Global global; FileWatcher::FileWatcher(QString dir, ScanType type, qint32 notebookLid, bool subdirs, QObject *parent) : QFileSystemWatcher(parent) { this->notebookLid = notebookLid; this->dir = dir; this->scanType = type; this->includeSubdirectories = subdirs; addDirectory(dir); connect(this, SIGNAL(directoryChanged(QString)), this, SLOT(saveDirectory(QString))); connect(this, SIGNAL(fileChanged(QString)), this, SLOT(saveFile(QString))); } void FileWatcher::saveDirectory(QString dir){ QStringList files; QStringList dirs; setupSubDirectories(dirs, files, dir); for (int i=0; i<files.size(); i++) { if (!saveFiles.contains(files[i]) || scanType == ImportDelete) { saveFiles.append(files[i]); saveFile(files[i]); } } } void FileWatcher::saveFile(QString file) { QFileInfo fileInfo(file); // If we have a dbi import file QLOG_DEBUG() << fileInfo.dir().absolutePath() + QDir::separator(); QLOG_DEBUG() << global.fileManager.getDbiDirPath(); if ((fileInfo.dir().absolutePath() + QDir::separator()) == global.fileManager.getDbiDirPath()) { BatchImport importer; importer.import(file); emit(nnexImported()); QFile f(file); if (!f.remove()) { QLOG_ERROR() << tr("Error removing file: ") << f.errorString(); } return; } // If we have a user-import file QFile f(file); f.open(QIODevice::ReadOnly); QByteArray data = f.readAll(); f.close(); if (f.size() == 0) return; Note newNote; NoteTable ntable(global.db); ConfigStore cs(global.db); qint32 lid = cs.incrementLidCounter(); QCryptographicHash md5hash(QCryptographicHash::Md5); QByteArray hash = md5hash.hash(data, QCryptographicHash::Md5); // * Start setting up the new note newNote.guid = QString::number(lid); newNote.title = file; NotebookTable bookTable(global.db); QString notebook; bookTable.getGuid(notebook, notebookLid); newNote.notebookGuid = notebook; newNote.active = true; newNote.created = QDateTime::currentMSecsSinceEpoch();; newNote.updated = newNote.created; newNote.updateSequenceNum = 0; NoteAttributes na; // Windows Check #ifndef _WIN32 na.sourceURL = "file://" + file; #else na.sourceURL = "file:///"+file; #endif // end Windows check na.subjectDate = newNote.created; newNote.attributes = na; qint32 noteLid = lid; // BEGIN EXIT POINT QString exitName = "ExitPoint_ImportKeep"; if (scanType == FileWatcher::ImportDelete) { exitName = "ExitPoint_ImportDelete"; } QHash<QString, ExitPoint*> *points; points = global.exitManager->exitPoints; if (points->contains(exitName) && points->value(exitName) != NULL && points->value(exitName)->getEnabled()) exitPoint(points->value(exitName), newNote); // END EXIT POINT QString newNoteBody = QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")+ QString("<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml2.dtd\">")+ QString("<en-note style=\"word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;\">"); if (newNote.content.isSet()) newNoteBody.append(newNote.content); MimeReference mimeRef; QString mime = mimeRef.getMimeFromFileName(file); QString enMedia =QString("<en-media hash=\"") +hash.toHex() +QString("\" border=\"0\"") +QString(" type=\"" +mime +"\" ") +QString("/>"); newNoteBody.append(enMedia + QString("</en-note>")); newNote.content = newNoteBody; ntable.add(lid, newNote, true); QString noteGuid = ntable.getGuid(lid); lid = cs.incrementLidCounter(); // Start creating the new resource Resource newRes; Data d; d.body = data; d.bodyHash = hash; d.size = data.size(); newRes.data = d; newRes.mime = mime; ResourceAttributes ra; ra.fileName = QFileInfo(f).fileName(); if (mime.startsWith("image", Qt::CaseInsensitive) || mime.endsWith("pdf", Qt::CaseInsensitive)) ra.attachment = false; else ra.attachment = true; newRes.active = true; newRes.guid = QString::number(lid); newRes.noteGuid = noteGuid; newRes.updateSequenceNum = 0; newRes.attributes = ra; ResourceTable restable(global.db); restable.add(lid, newRes, true, noteLid); emit(fileImported(noteLid, lid)); if (scanType == FileWatcher::ImportDelete) { bool retval = f.remove(); int count = 100; while (!retval && count > 0) { QLOG_ERROR() << tr("Error removing file:") << f.RemoveError; count--; } } } void FileWatcher::setupSubDirectories(QStringList &directories, QStringList &files, QString root) { QDirIterator it(root, QDirIterator::Subdirectories); while (it.hasNext()) { QString entry = it.next(); QFileInfo fileInfo; fileInfo.setFile(entry); if (fileInfo.isFile() && !files.contains(fileInfo.absoluteFilePath())) { files.append(fileInfo.absoluteFilePath()); } if (fileInfo.isDir() && !entry.endsWith("..") && !directories.contains(fileInfo.absoluteFilePath())) { directories.append(fileInfo.absoluteFilePath()); } } } void FileWatcher::setupDirectory(QStringList &files, QString root) { QDirIterator it(root); files.clear(); while (it.hasNext()) { QString entry = it.next(); QFileInfo fileInfo; fileInfo.setFile(entry); if (fileInfo.isFile() && !files.contains(fileInfo.absoluteFilePath())) { files.append(fileInfo.absoluteFilePath()); } } } void FileWatcher::addDirectory(QString root) { if (directories().contains(root)) return; QStringList dirs; QStringList files; if (includeSubdirectories) { setupSubDirectories(dirs, files, root); if (!dirs.isEmpty()) addPaths(dirs); if (!files.isEmpty()) addPaths(files); } else { setupDirectory(files, root); if (!root.isEmpty()) addPath(root); if (!files.isEmpty()) addPaths(files); } if (scanType == ImportDelete) { for (int i=0; i<files.size(); i++) { saveFile(files[i]); } } if (scanType == ImportKeep) saveFiles = files; } void FileWatcher::exitPoint(ExitPoint *exit, Note &n) { QLOG_TRACE_IN(); ExitPoint_FileImport *saveExit = new ExitPoint_FileImport(); #if QT_VERSION >= 0x050000 QJSEngine engine; QJSValue exit_s = engine.newQObject(saveExit); engine.globalObject().setProperty("note", exit_s); // Start loading values QLOG_INFO() << tr("Calling exit ") << exit->getExitName(); saveExit->setExitName(exit->getExitName()); saveExit->setTitle(n.title); NotebookTable bookTable(global.db); Notebook book; bookTable.get(book, n.notebookGuid); if (!book.name.isSet()) book.name = "unknown"; saveExit->setNotebook(book.name); saveExit->setCreationDate(n.created); saveExit->setUpdatedDate(n.updated); saveExit->setSubjectDate(n.attributes->subjectDate); // saveExit->setTags(n.tagNames); saveExit->setContents(""); saveExit->setFileName(n.attributes->sourceURL); // Set exit ready & call it. saveExit->setExitReady(); QJSValue retval = engine.evaluate(exit->getScript()); QLOG_INFO() << "Return value from exit: " << retval.toString(); #endif #if QT_VERSION < 0x050000 QScriptEngine scriptEngine; QScriptValue exit_qs = scriptEngine.newQObject(saveExit); scriptEngine.globalObject().setProperty("note", exit_qs); // Start loading values QLOG_INFO() << tr("Calling exit ") << exit->getExitName(); // Set exit ready & call it. saveExit->setExitReady(); QScriptValue retval = scriptEngine.evaluate(exit->getScript()); QLOG_INFO() << "Return value from exit: " << retval.toString(); #endif // Check for any changes. if (saveExit->isTitleModified()) { n.title = saveExit->getTitle(); } if (saveExit->isTagsModified()) { QStringList tagNames = saveExit->getTags(); QStringList newTagNames; QStringList newTagGuids; TagTable ttable(global.db); for (int i=0; i<tagNames.size(); i++) { QString tagName = tagNames[i]; QString tagGuid = ""; qint32 tagLid; tagLid = ttable.findByName(tagName,0); if (tagLid > 0) { if (ttable.getGuid(tagGuid,tagLid)) { newTagGuids.append(tagGuid); newTagNames.append(tagName); } else QLOG_ERROR() << tr("Tag was not found:") << tagName; } else QLOG_ERROR() << tr("Tag was not found:") << tagName; } n.tagGuids = newTagGuids; n.tagNames = newTagNames; } if (saveExit->isNotebookModified()) { NotebookTable ntable(global.db); QString notebookName = saveExit->getNotebook(); qint32 notebookLid = ntable.findByName(notebookName); if (notebookLid >0) { QString notebookGuid = ""; if (ntable.getGuid(notebookGuid, notebookLid)) n.notebookGuid = notebookGuid; else QLOG_ERROR() << tr("Notebook was not found:") << notebookName; } else QLOG_ERROR() << tr("Notebook was not found:") << notebookName; } if (saveExit->isContentsModified()) { QByteArray data = saveExit->getContents().toUtf8(); n.content = data; } QLOG_TRACE_OUT(); } ����������������������������������������������������������������������������������������������nixnote2-2.0.2/watcher/filewatcher.h����������������������������������������������������������������0000664�0000000�0000000�00000004052�13156041044�0017363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef FILEWATCHER_H #define FILEWATCHER_H #include <QFileSystemWatcher> #include <QStringList> #include <QFileInfo> #include "exits/exitpoint.h" #include "qevercloud/include/QEverCloud.h" using namespace qevercloud; class FileWatcher : public QFileSystemWatcher { Q_OBJECT public: enum ScanType { ImportDelete = 0, ImportKeep = 1 }; explicit FileWatcher(QString dir, ScanType type, qint32 notebookLid, bool subdirs=true, QObject *parent = 0); private: //void getDirectoryEntries(QStringList fileList, QString dir); QString dir; ScanType scanType; qint32 notebookLid; QList<QString> saveFiles; bool includeSubdirectories; void setupSubDirectories(QStringList &directories, QStringList &files, QString directory); void setupDirectory(QStringList &files, QString directory); void addDirectory(QString root); void exitPoint(ExitPoint *exit, Note &n); signals: void fileImported(qint32 noteLid, qint32 ressourceLid); void nnexImported(); public slots: void saveFile(QString file); void saveDirectory(QString dir); }; #endif // FILEWATCHER_H ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/watcher/filewatchermanager.cpp�������������������������������������������������������0000664�0000000�0000000�00000005414�13156041044�0021254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "filewatchermanager.h" #include "sql/filewatchertable.h" #include "global.h" extern Global global; FileWatcherManager::FileWatcherManager(QObject *parent) : QObject(parent) { } void FileWatcherManager::reset() { for (int i=importDelete.size()-1; i>=0; i--) { FileWatcher *fw = importDelete.takeAt(i); delete fw; } for (int i=importKeep.size()-1; i>=0; i--) { FileWatcher *fw = importKeep.takeAt(i); delete fw; } } void FileWatcherManager::signalImported(qint32 noteLid, qint32 resourceLid) { emit fileImported(noteLid, resourceLid); } void FileWatcherManager::signalImported() { emit fileImported(); } void FileWatcherManager::setup() { this->reset(); // Setup the dbi file for batch creation of notes FileWatcher *dbi = new FileWatcher(global.fileManager.getDbiDirPath(), FileWatcher::ImportDelete, 0, false, 0); connect(dbi, SIGNAL(nnexImported()), this, SLOT(signalImported())); importDelete.append(dbi); QList<qint32> lids; FileWatcherTable ft(global.db); ft.getAll(lids); for (int i=0; i<lids.size(); i++) { FileWatcher::ScanType type; QString dir; qint32 notebookLid; bool includeSubdirs; ft.get(lids[i], dir, type, notebookLid, includeSubdirs); FileWatcher *fw = new FileWatcher(dir, type, notebookLid, includeSubdirs); if (type == FileWatcher::ImportDelete) importDelete.append(fw); else importKeep.append(fw); connect(fw, SIGNAL(fileImported(qint32,qint32)), this, SLOT(signalImported(qint32,qint32))); } } void FileWatcherManager::dump() { for (int i=0; i<importKeep.size(); i++) { FileWatcher *fw = importKeep[i]; for (int j=0; j<fw->directories().size(); j++) { QLOG_DEBUG() << fw->directories().at(j); } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/watcher/filewatchermanager.h���������������������������������������������������������0000664�0000000�0000000�00000003050�13156041044�0020713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef FILEWATCHERMANAGER_H #define FILEWATCHERMANAGER_H #include <QObject> #include <QList> #include "watcher/filewatcher.h" class FileWatcherManager : public QObject { Q_OBJECT private: QList<FileWatcher*> importKeep; QList<FileWatcher*> importDelete; public: explicit FileWatcherManager(QObject *parent = 0); void reset(); void setup(); void dump(); signals: void fileImported(qint32 noteLid, qint32 resourceLid); void fileImported(); public slots: void signalImported(qint32 noteLid, qint32 resourceLid); void signalImported(); }; #endif // FILEWATCHERMANAGER_H ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/webcam/������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13156041044�0014515�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/webcam/cvimagewidget.cpp�������������������������������������������������������������0000664�0000000�0000000�00000005057�13156041044�0020047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ // Disclaimer!! A lot of this code is based on samples at: // http://dournac.org/info/canny_edge // http://opencv-srf.blogspot.com/2011/09/capturing-images-videos.html // http://develnoter.blogspot.com/ // http://umanga.wordpress.com/2010/04/19/how-to-covert-qt-qimage-into-opencv-iplimage-and-wise-versa/ #include "cvimagewidget.h" #include <opencv2/opencv.hpp> CVImageWidget::CVImageWidget(QWidget *parent) : QWidget(parent) { } QSize CVImageWidget::sizeHint() { return _qimage.size(); } QSize CVImageWidget::minimumSizeHint() { return _qimage.size(); } void CVImageWidget::showImage(const cv::Mat& image) { // Convert the image to the RGB888 format switch (image.type()) { case CV_8UC1: cvtColor(image, _tmp, CV_GRAY2RGB); break; case CV_8UC3: cvtColor(image, _tmp, CV_BGR2RGB); break; } // QImage needs the data to be stored continuously in memory assert(_tmp.isContinuous()); // Assign OpenCV's image buffer to the QImage. Note that the bytesPerLine parameter // (http://qt-project.org/doc/qt-4.8/qimage.html#QImage-6) is 3*width because each pixel // has three bytes. _qimage = QImage(_tmp.data, _tmp.cols, _tmp.rows, _tmp.cols*3, QImage::Format_RGB888); this->setFixedSize(image.cols, image.rows); repaint(); } void CVImageWidget::paintEvent(QPaintEvent* /*event*/) { // Display the image QPainter painter(this); painter.drawImage(QPoint(0,0), _qimage); painter.end(); } bool CVImageWidget::getImage(QImage &image) { if (_qimage.width() == 0 || _qimage.height() == 0) return false; image = _qimage; return true; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/webcam/cvimagewidget.h���������������������������������������������������������������0000664�0000000�0000000�00000003355�13156041044�0017513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ // Disclaimer!! A lot of this code is based on samples at: // http://dournac.org/info/canny_edge // http://opencv-srf.blogspot.com/2011/09/capturing-images-videos.html // http://develnoter.blogspot.com/ // http://umanga.wordpress.com/2010/04/19/how-to-covert-qt-qimage-into-opencv-iplimage-and-wise-versa/ #ifndef CVIMAGEWIDGET_H #define CVIMAGEWIDGET_H #include <QWidget> #include <QImage> #include <QPainter> #include <opencv2/opencv.hpp> class CVImageWidget : public QWidget { Q_OBJECT public: explicit CVImageWidget(QWidget *parent = 0); QSize sizeHint(); QSize minimumSizeHint(); bool getImage(QImage &image); public slots: void showImage(const cv::Mat& image); protected: void paintEvent(QPaintEvent* /*event*/); QImage _qimage; cv::Mat _tmp; }; #endif // CVIMAGEWIDGET_H �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/xml/���������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13156041044�0014057�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/xml/batchimport.cpp������������������������������������������������������������������0000664�0000000�0000000�00000034307�13156041044�0017106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "batchimport.h" #include <QStringList> #include <QString> #include "sql/resourcetable.h" #include "sql/notebooktable.h" #include "sql/notetable.h" #include "sql/tagtable.h" #include "sql/searchtable.h" #include "sql/usertable.h" #include "utilities/crossmemorymapper.h" #include "utilities/mimereference.h" #include "global.h" #include <QProgressDialog> #include <QMessageBox> #include <QPushButton> extern Global global; //*********************************************************** //* Constructor. If full == true then this is a restore. //* if full=false then this is considered an import. The //* only real difference is that an import automatically //* gets a new guid and is always considered "dirty" //* where an import will keep the guid and will obey the //* <dirty> tag in the note. //*********************************************************** BatchImport::BatchImport(QObject *parent) : QObject(parent) { } //*********************************************************** //* This is the main entry point for an import. It is passed //* the file which contains the export data. It then //* opens up the file, checks the validity of the data, and //* then begins to parse through all of the crap. //*********************************************************** void BatchImport::import(QString file) { fileName = file; qint32 newLid = -1; errorMessage = ""; lastError = 0; QFile xmlFile(fileName); if (!xmlFile.open(QIODevice::ReadOnly)) { lastError = 16; errorMessage = "Cannot open file."; return; } reader = new QXmlStreamReader(&xmlFile); while (!reader->atEnd()) { reader->readNext(); if (reader->hasError()) { errorMessage = reader->errorString(); QLOG_ERROR() << "************************* ERROR READING IMPORT " << errorMessage; lastError = 16; return; } if (reader->name().toString().toLower() == "noteadd" && reader->isStartElement()) { newLid = addNoteNode(); } } xmlFile.close(); QString id = file; int pos = id.lastIndexOf("."); if (pos>0) id = id.mid(0,pos); pos = id.lastIndexOf(QDir::separator()); if (pos>0) id = id.mid(pos+1); CrossMemoryMapper sharedMemory(id); if (!sharedMemory.attach()) return; QString response = QString::number(newLid); sharedMemory.write(response.toAscii()); sharedMemory.detach(); } //*********************************************************** //* Process a <note> tag //*********************************************************** qint32 BatchImport::addNoteNode() { qint32 newLid = -1; Note note; note.title = QString(tr("Untitled Note")); QUuid uuid; qint32 tempLid = 0; QString newGuid = uuid.createUuid().toString().replace("{", "").replace("}", ""); note.guid = newGuid; QStringList tagNames; QStringList tagGuids; QStringList resourceList; QString resourceDelimiter; QString newNoteBody = QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")+ QString("<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml2.dtd\">")+ QString("<en-note style=\"word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;\"><br/></en-note>"); note.active = true; note.content = newNoteBody; note.created = QDateTime::currentMSecsSinceEpoch(); note.updated = QDateTime::currentMSecsSinceEpoch(); bool atEnd = false; while(!atEnd) { QString name = reader->name().toString().toLower(); if (name == "lid" && !reader->isEndElement()) { tempLid = intValue(); } if (name == "title" && !reader->isEndElement()) { note.title = textValue(); } if (name == "created" && !reader->isEndElement()) { QString dateString = textValue(); //QDateTime date = QDateTime::fromString("2010-10-25T10:28:58.570Z", "yyyy-MM-ddTHH:mm:ss.zzzZ"); QDateTime date = QDateTime::fromString(dateString, "yyyy-MM-ddTHH:mm:ss.zzzZ"); note.created = date.toMSecsSinceEpoch(); } if (name == "updated" && !reader->isEndElement()) { QString dateString = textValue(); QDateTime date = QDateTime::fromString(dateString, "yyyy-MM-ddTHH:mm:ss.zzzZ"); note.updated = date.toMSecsSinceEpoch(); } if (name == "reminder" && !reader->isEndElement()) { QString dateString = textValue(); QDateTime date = QDateTime::fromString(dateString, "yyyy-MM-ddTHH:mm:ss.zzzZ"); if (date >= QDateTime::currentDateTime()) { if (!note.attributes.isSet()) { NoteAttributes na; note.attributes = na; } note.attributes->reminderTime = date.toMSecsSinceEpoch(); } } if (name == "notebook" && !reader->isEndElement()) { QString notebookName = textValue(); NotebookTable notebookTable(global.db); qint32 lid = notebookTable.findByName(notebookName); QString notebookGuid; // Do we need to add the notebook? if (lid == 0) { Notebook book; book.name = notebookName; QUuid uuid; QString newGuid = uuid.createUuid().toString().replace("{", "").replace("}", ""); book.guid = newGuid; notebookGuid = newGuid; lid = notebookTable.add(0, book, true, false); } else { notebookTable.getGuid(notebookGuid, lid); } note.notebookGuid = notebookGuid; } if (name == "content" && !reader->isEndElement()) { note.content = textValue(); } if (name == "attachmentdelimiter" && !reader->isEndElement()) { resourceDelimiter = textValue(); } if (name == "attachment" && !reader->isEndElement()) { resourceList.append(textValue()); } if (name == "tag" && !reader->isEndElement()) { QString tagName = textValue(); TagTable tagTable(global.db); qint32 tagLid = tagTable.findByName(tagName, 0); QString tagGuid; // Do we need to add the tag? if (tagLid == 0) { Tag tag; tag.name = tagName; QUuid uuid; tagGuid = uuid.createUuid().toString().replace("{", "").replace("}", ""); tag.guid = tagGuid; tagTable.add(0, tag, true, 0); } else { tagTable.getGuid(tagGuid, tagLid); } tagNames.append(tagName); tagGuids.append(tagGuid); } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "noteadd" && reader->isEndElement() && tempLid > 0) { // global.db = new DatabaseConnection("nixnote"); // Startup the database Note newNote; // Fetch the existing note NoteTable noteTable(global.db); if (!noteTable.get(newNote, tempLid, true, true)) { return -1; } // Append the text to the existing note newNote.content->replace("</en-note>", "<br/>"); // Chop off the beginning of the new text to remove the <en-note stuff int startOfNote = note.content->indexOf("<en-note"); note.content = note.content->mid(startOfNote+9); // Append the two notes newNote.content = newNote.content + note.content; // Start adding the resources qint32 noteLid = tempLid; if (resourceList.size() > 0) { note.resources = QList<Resource>(); for (int i=0; i<resourceList.size(); i++) { QString filename = resourceList[i]; QFile file(filename); if (file.exists()) { file.open(QIODevice::ReadOnly); QByteArray ba = file.readAll(); file.close(); MimeReference mimeRef; QString extension = filename; int endPos = filename.lastIndexOf("."); if (endPos != -1) extension = extension.mid(endPos); QString mime = mimeRef.getMimeFromExtension(extension); Resource newRes; bool attachment = true; if (mime == "application/pdf" || mime.startsWith("image/")) attachment = false; AddNote newNote; newNote.createResource(newRes, 0, ba, mime, attachment, QFileInfo(filename).fileName(), noteLid); QByteArray hash; if (newRes.data.isSet()) { Data d = newRes.data; if (d.bodyHash.isSet()) hash = d.bodyHash; } QString mediaString = "<en-media hash=\""+hash.toHex()+"\" type=\""+mime+"\"/>"; if (note.content->contains(resourceDelimiter)) { note.content = note.content->replace(note.content->indexOf(resourceDelimiter), resourceDelimiter.size(), mediaString); } else { note.content = note.content->replace("</en-note>","<br>"+mediaString+"</en-note>"); } note.resources->append(newRes); } } } noteTable.updateNoteContent(tempLid, newNote.content, true); noteTable.add(tempLid,newNote,true); return tempLid; } if (endName == "noteadd" && reader->isEndElement() && tempLid == 0) { atEnd = true; note.tagGuids = tagGuids; note.tagNames = tagNames; NoteTable ntable(global.db); if (!note.notebookGuid.isSet()) { NotebookTable bookTable(global.db); QString book = bookTable.getDefaultNotebookGuid(); note.notebookGuid = book; } // Start adding the resources qint32 noteLid = ntable.addStub(note.guid); if (resourceList.size() > 0) { note.resources = QList<Resource>(); for (int i=0; i<resourceList.size(); i++) { QString filename = resourceList[i]; QFile file(filename); if (file.exists()) { file.open(QIODevice::ReadOnly); QByteArray ba = file.readAll(); file.close(); MimeReference mimeRef; QString extension = filename; int endPos = filename.lastIndexOf("."); if (endPos != -1) extension = extension.mid(endPos); QString mime = mimeRef.getMimeFromExtension(extension); Resource newRes; bool attachment = true; if (mime == "application/pdf" || mime.startsWith("image/")) attachment = false; AddNote newNote; newNote.createResource(newRes, 0, ba, mime, attachment, QFileInfo(filename).fileName(), noteLid); QByteArray hash; if (newRes.data.isSet()) { Data d = newRes.data; if (d.bodyHash.isSet()) hash = d.bodyHash; } QString mediaString = "<en-media hash=\""+hash.toHex()+"\" type=\""+mime+"\"/>"; if (note.content->contains(resourceDelimiter)) { note.content = note.content->replace(note.content->indexOf(resourceDelimiter), resourceDelimiter.size(), mediaString); } else { note.content = note.content->replace("</en-note>","<br>"+mediaString+"</en-note>"); } note.resources->append(newRes); } } } ntable.expunge(noteLid); // delete the stub. newLid = ntable.add(0, note, true); } } return newLid; } QString BatchImport::textValue() { reader->readNext(); return reader->text().toString(); } qint32 BatchImport::intValue() { return textValue().toLong(); } long BatchImport::longValue() { return textValue().toLong(); } qlonglong BatchImport::longlongValue() { return textValue().toLongLong(); } double BatchImport::doubleValue() { return textValue().toDouble(); } bool BatchImport::booleanValue() { QString value = textValue(); value.toLower(); if (value == "1" || value == "true") return true; else return false; } short BatchImport::shortValue() { return textValue().toShort(); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/xml/batchimport.h��������������������������������������������������������������������0000664�0000000�0000000�00000003000�13156041044�0016535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2015 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef BATCHIMPORT_H #define BATCHIMPORT_H #include <QObject> #include <QXmlStreamReader> class BatchImport : public QObject { Q_OBJECT private: QString fileName; int lastError; QString errorMessage; QXmlStreamReader *reader; QString textValue(); bool booleanValue(); long longValue(); qlonglong longlongValue(); double doubleValue(); short shortValue(); int intValue(); public: explicit BatchImport(QObject *parent = 0); void import(QString file); qint32 addNoteNode(); signals: public slots: }; #endif // BATCHIMPORT_H nixnote2-2.0.2/xml/exportdata.cpp�������������������������������������������������������������������0000664�0000000�0000000�00000071070�13156041044�0016743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "exportdata.h" #include "global.h" #include "sql/usertable.h" #include "sql/tagtable.h" #include "sql/notebooktable.h" #include "sql/notetable.h" #include "sql/linkednotebooktable.h" #include "sql/sharednotebooktable.h" #include "sql/notebooktable.h" #include "sql/searchtable.h" #include <QProgressDialog> extern Global global; ExportData::ExportData(bool backup, bool cmdLine, QObject *parent) : QObject(parent) { this->backup = backup; lastError = 0; errorMessage = ""; this->cmdLine = cmdLine; lids.empty(); } void ExportData::backupData(QString filename) { quitNow = false; QFile xmlFile(filename); if (!xmlFile.open(QIODevice::WriteOnly)) { lastError = 16; errorMessage = tr("Cannot open file."); return; } if (!cmdLine) { progress = new QProgressDialog(); progress->setAutoClose(false); progress->setWindowModality(Qt::ApplicationModal); connect(progress, SIGNAL(canceled()), this, SLOT(abortBackup())); progress->setWindowTitle(tr("Export")); } writer = new QXmlStreamWriter(&xmlFile); writer->setAutoFormatting(true); writer->setCodec("UTF-8"); writer->writeStartDocument(); writer->writeDTD("<!DOCTYPE NixNote-Export>"); writer->writeStartElement("nixnote-export"); writer->writeAttribute("version", "2"); if (backup) writer->writeAttribute("exportType", "backup"); else writer->writeAttribute("exportType", "export"); writer->writeAttribute("application", "NixNote"); writer->writeAttribute("applicationVersion", "2.x"); if (backup) { NoteTable noteTable(global.db); noteTable.getAll(this->lids); if (!cmdLine) progress->setWindowTitle(tr("Backup")); writer->writeStartElement("Synchronization"); UserTable userTable(global.db); qlonglong lastSyncDate = userTable.getLastSyncDate(); qint32 number = userTable.getLastSyncNumber(); createNode("UpdateSequenceNumber", QString::number(number)); createNode("LastSequenceDate", QString::number(lastSyncDate)); writer->writeEndElement(); writeNotebooks(); writeTags(); writeSavedSearches(); writeLinkedNotebooks(); writeSharedNotebooks(); } writeNotes(); writer->writeEndElement(); writer->writeEndDocument(); if (!cmdLine) progress->hide(); xmlFile.close(); } void ExportData::writeTags() { QList<qint32> tags; TagTable ttable(global.db); QList<qint32> dirtyTags; ttable.getAllDirty(dirtyTags); ttable.getAll(tags); if (!cmdLine) { progress->setLabelText(tr("Tags")); progress->setMaximum(lids.size()); progress->show(); } for (int i=0; i<tags.size() && !quitNow; i++) { if (!cmdLine) progress->setValue(i+1); QCoreApplication::processEvents(); Tag tag; if (ttable.get(tag, tags[i])) { writer->writeStartElement("Tag"); if (tag.guid.isSet()) createNode("Guid", tag.guid); if (tag.name.isSet()) createNode("Name", tag.name); if (tag.parentGuid.isSet()) createNode("ParentGuid", tag.parentGuid); if (tag.updateSequenceNum.isSet()) createNode("UpdateSequenceNumber", tag.updateSequenceNum); createNode("Dirty", dirtyTags.contains(tags[i])); writer->writeEndElement(); } } } void ExportData::writeNotebooks() { QList<qint32> lids; NotebookTable table(global.db); QList<qint32> dirtyLids; table.getAllDirty(dirtyLids); table.getAll(lids); if (!cmdLine) { progress->setMaximum(lids.size()); progress->setLabelText(tr("Notebooks")); progress->setValue(0); progress->show(); } for (int i=0; i<lids.size() && !quitNow; i++) { Notebook book; if (!cmdLine) progress->setValue(i+1); QCoreApplication::processEvents(); if (table.get(book, lids[i])) { writer->writeStartElement("Notebook"); if (book.guid.isSet()) createNode("Guid", book.guid); if (book.name.isSet()) createNode("Name", book.name); if (book.updateSequenceNum.isSet()) createNode("UpdateSequenceNumber",book.updateSequenceNum); if (book.defaultNotebook.isSet()) createNode("DefaultNotebook", book.defaultNotebook); if (book.published.isSet()) createNode("Published", book.published); if (book.serviceCreated.isSet()) createTimestampNode("ServiceCreated", book.serviceCreated); if (book.serviceUpdated.isSet()) createTimestampNode("ServiceUpdated", book.serviceUpdated); if (book.updateSequenceNum.isSet()) createNode("UpdateSequenceNumber", book.updateSequenceNum); createNode("Dirty",dirtyLids.contains(lids[i])); if (book.businessNotebook.isSet()) { writer->writeStartElement("BusinessNotebook"); if (book.businessNotebook.value().notebookDescription.isSet()) createNode("NotebookDescription", book.businessNotebook.value().notebookDescription); if (book.businessNotebook.value().privilege.isSet()) createNode("NotebookDescription", book.businessNotebook.value().privilege); if (book.businessNotebook.value().recommended.isSet()) createNode("NotebookDescription", book.businessNotebook.value().recommended); writer->writeEndElement(); } if (book.publishing.isSet()) { writer->writeStartElement("Publishing"); if (book.publishing.value().uri.isSet()) createNode("Uri", book.publishing.value().uri); if (book.publishing.value().publicDescription.isSet()) createNode("PublicDescription", book.publishing.value().publicDescription); if (book.publishing.value().ascending.isSet()) createNode("Ascending", book.publishing.value().ascending); if (book.publishing.value().order.isSet()) createNode("Uri", QString::number(book.publishing.value().order)); writer->writeEndElement(); } if (book.sharedNotebookIds.isSet() && book.sharedNotebookIds.value().size() > 0) { writer->writeStartElement("SharedNotebookIds"); for (int i=0; i<book.sharedNotebookIds.value().size(); i++) { createNode("Id", QString::number(book.sharedNotebookIds.value().at(i))); } writer->writeEndElement(); } if (book.contact.isSet()) { writeUser(book.contact); } writer->writeEndElement(); } } } void ExportData::writeUser(User user) { writer->writeStartElement("User"); if (user.id.isSet()) createNode("Id", user.id); if (user.username.isSet()) createNode("Username", user.username); if (user.email.isSet()) createNode("Username", user.email); if (user.name.isSet()) createNode("Name", user.name); if (user.timezone.isSet()) createNode("Timezone", user.timezone); if (user.privilege.isSet()) createNode("Privilege", user.privilege); if (user.created.isSet()) createTimestampNode("Created", user.created); if (user.updated.isSet()) createTimestampNode("Created", user.updated); if (user.deleted.isSet()) createTimestampNode("Deleted", user.deleted); if (user.active.isSet()) createNode("Active", user.active); if (user.shardId.isSet()) createNode("Timezone", user.shardId); if (user.attributes.isSet()) { writer->writeStartElement("UserAttributes"); if (user.attributes.value().defaultLocationName.isSet()) createNode("DefaultLocationName", user.attributes.value().defaultLocationName); if (user.attributes.value().defaultLatitude.isSet()) createNode("DefaultLatitude", user.attributes.value().defaultLatitude); if (user.attributes.value().defaultLongitude.isSet()) createNode("DefaultLongitude", user.attributes.value().defaultLongitude); if (user.attributes.value().preactivation.isSet()) createNode("Preactivation", user.attributes.value().preactivation); if (user.attributes.value().incomingEmailAddress.isSet()) createNode("IncomingEmailAddress", user.attributes.value().incomingEmailAddress); if (user.attributes.value().comments.isSet()) createNode("comments", user.attributes.value().comments); if (user.attributes.value().dateAgreedToTermsOfService.isSet()) createTimestampNode("DateAgreedToTermsOfService", user.attributes.value().dateAgreedToTermsOfService); if (user.attributes.value().maxReferrals.isSet()) createNode("MaxReferrals", user.attributes.value().maxReferrals); if (user.attributes.value().referralCount.isSet()) createNode("ReferralCount", user.attributes.value().referralCount); if (user.attributes.value().refererCode.isSet()) createNode("ReferrerCode", user.attributes.value().refererCode); if (user.attributes.value().sentEmailDate.isSet()) createTimestampNode("SentEmailDate", user.attributes.value().sentEmailDate); if (user.attributes.value().sentEmailCount.isSet()) createNode("SentEmailCount", user.attributes.value().sentEmailCount); if (user.attributes.value().dailyEmailLimit.isSet()) createNode("DailyEmailLimit", user.attributes.value().dailyEmailLimit); if (user.attributes.value().emailOptOutDate.isSet()) createTimestampNode("EmailOptOutDate", user.attributes.value().emailOptOutDate); if (user.attributes.value().partnerEmailOptInDate.isSet()) createTimestampNode("PartnerEmailOptInDate", user.attributes.value().partnerEmailOptInDate); if (user.attributes.value().preferredCountry.isSet()) createNode("PreferredCountry", user.attributes.value().preferredCountry); if (user.attributes.value().preferredLanguage.isSet()) createNode("PreferredLanguage", user.attributes.value().preferredLanguage); if (user.attributes.value().clipFullPage.isSet()) createNode("ClipFullPage", user.attributes.value().clipFullPage); if (user.attributes.value().twitterUserName.isSet()) createNode("TwitterUserName", user.attributes.value().twitterUserName); if (user.attributes.value().twitterId.isSet()) createNode("TwitterId", user.attributes.value().twitterId); if (user.attributes.value().groupName.isSet()) createNode("GroupName", user.attributes.value().groupName); if (user.attributes.value().recognitionLanguage.isSet()) createNode("recognitionLanguage", user.attributes.value().recognitionLanguage); if (user.attributes.value().referralProof.isSet()) createNode("ReferralProof", user.attributes.value().referralProof); if (user.attributes.value().educationalDiscount.isSet()) createNode("EducationalDiscount", user.attributes.value().educationalDiscount); if (user.attributes.value().businessAddress.isSet()) createNode("BusinessAddress", user.attributes.value().businessAddress); if (user.attributes.value().hideSponsorBilling.isSet()) createNode("HideSponsorBilling", user.attributes.value().hideSponsorBilling); if (user.attributes.value().taxExempt.isSet()) createNode("TaxExempt", user.attributes.value().taxExempt); if (user.attributes.value().useEmailAutoFiling.isSet()) createNode("UseEmailAutoFiling", user.attributes.value().useEmailAutoFiling); if (user.attributes.value().reminderEmailConfig.isSet()) createNode("ReminderEmailConfig", user.attributes.value().reminderEmailConfig); writer->writeEndElement(); } if (user.premiumInfo.isSet()) { writer->writeStartElement("PremiumInfo"); if (user.premiumInfo.value().premiumExpirationDate.isSet()) createTimestampNode("PremiumExpirationDate",user.premiumInfo.value().premiumExpirationDate); if (user.premiumInfo.value().premiumUpgradable.isSet()) createNode("PremiumUpgradable", user.premiumInfo.value().premiumUpgradable); if (user.premiumInfo.value().sponsoredGroupName.isSet()) createNode("SponsorGroupName", user.premiumInfo.value().sponsoredGroupName); if (user.premiumInfo.value().sponsoredGroupRole.isSet()) createNode("SponsorGroupRole", user.premiumInfo.value().sponsoredGroupRole); writer->writeEndElement(); } if (user.businessUserInfo.isSet()) { writer->writeStartElement("BusinessUserInfo"); if (user.businessUserInfo.value().businessId.isSet()) createNode("BusenessId", user.businessUserInfo.value().businessId); if (user.businessUserInfo.value().businessName.isSet()) createNode("BusinessName", user.businessUserInfo.value().businessName); if (user.businessUserInfo.value().email.isSet()) createNode("Email", user.businessUserInfo.value().email); if (user.businessUserInfo.value().role.isSet()) createNode("Role", user.businessUserInfo.value().role); writer->writeEndElement(); } writer->writeEndElement(); } void ExportData::writeData(QString name, Data data) { writer->writeStartElement(name); if (data.body.isSet()) createNode("Body", data.body.value()); if (data.bodyHash.isSet()) { createNode("BodyHash", data.bodyHash); QByteArray ba; ba.append(data.bodyHash); } if (data.size.isSet()) createNode("Size", data.size); writer->writeEndElement(); } void ExportData::writeSavedSearches() { QList<qint32> lids; SearchTable table(global.db); QList<qint32> dirtyLids; table.getAllDirty(dirtyLids); table.getAll(lids); if (!cmdLine) { progress->setMaximum(lids.size()); progress->setLabelText(tr("Searches")); progress->setValue(0); progress->show(); } for (int i=0; i<lids.size() && !quitNow; i++) { SavedSearch s; if (!cmdLine) progress->setValue(i+1); QCoreApplication::processEvents(); table.get(s,lids[i]); writer->writeStartElement("SavedSearch"); if (s.guid.isSet()) createNode("Guid", s.guid); if (s.name.isSet()) createNode("Name", s.name); if (s.query.isSet()) createNode("Query", s.query); if (s.format.isSet()) createNode("Format", s.format); if (s.updateSequenceNum.isSet()) createNode("UpdateSequenceNumber", s.updateSequenceNum); if (s.scope.isSet()) { writer->writeStartElement("Scope"); if (s.scope.value().includeAccount.isSet()) createNode("IncludeAccount", s.scope.value().includeAccount); if (s.scope.value().includeBusinessLinkedNotebooks.isSet()) createNode("IncludeBusinessLinkedNotebooks", s.scope.value().includeBusinessLinkedNotebooks); if (s.scope.value().includePersonalLinkedNotebooks.isSet()) createNode("IncludePersonalLinkedNotebooks", s.scope.value().includePersonalLinkedNotebooks); writer->writeEndElement(); } writer->writeEndElement(); } } void ExportData::writeLinkedNotebooks() { QList<qint32> lids; LinkedNotebookTable table(global.db); table.getAll(lids); if (!cmdLine) { progress->setMaximum(lids.size()); progress->setLabelText(tr("Linked Notebooks")); progress->setValue(0); progress->show(); } for (int i=0; i<lids.size() && !quitNow; i++) { if (!cmdLine) progress->setValue(i+1); QCoreApplication::processEvents(); LinkedNotebook s; table.get(s,lids[i]); writer->writeStartElement("LinkedNotebook"); if (s.guid.isSet()) createNode("Guid", s.guid); if (s.businessId.isSet()) createNode("BusinessId", s.businessId); if (s.shardId.isSet()) createNode("ShardId", s.shardId); if (s.shareKey.isSet()) createNode("ShareKey", s.shareKey); if (s.updateSequenceNum.isSet()) createNode("UpdateSequenceNumber", s.updateSequenceNum); if (s.shareName.isSet()) createNode("ShareName", s.shareName); if (s.stack.isSet()) createNode("Stack", s.stack); if (s.uri.isSet()) createNode("Uri", s.uri); if (s.username.isSet()) createNode("UserName", s.username); writer->writeEndElement(); } } void ExportData::writeSharedNotebooks() { QList<qint32> lids; SharedNotebookTable table(global.db); table.getAll(lids); if (!cmdLine) { progress->setMaximum(lids.size()); progress->setLabelText(tr("Shared Notebooks")); progress->setValue(0); progress->show(); } for (int i=0; i<lids.size() && !quitNow; i++) { if (!cmdLine) progress->setValue(i+1); QCoreApplication::processEvents(); SharedNotebook s; QStringList users; table.getShareUsers(users, lids[i]); for (int j=0; j<users.size(); j++) { table.get(s,lids[i], users[j]); writer->writeStartElement("SharedNotebook"); if (s.allowPreview.isSet()) createNode("AllowPreview", s.allowPreview); if (s.email.isSet()) createNode("Email", s.email); if (s.id.isSet()) createNode("Id", QString::number(s.id)); if (s.notebookGuid.isSet()) createNode("NotebookGuid", s.notebookGuid); if (s.notebookModifiable.isSet()) createNode("NotebookModifiable", s.notebookModifiable); if (s.privilege.isSet()) createNode("Privilege", s.privilege); if (s.recipientSettings.isSet()) { writer->writeStartElement("RecipientSettings"); if (s.recipientSettings.value().reminderNotifyEmail.isSet()) createNode("ReminderNotifyEmail", s.recipientSettings.value().reminderNotifyEmail); if (s.recipientSettings.value().reminderNotifyInApp.isSet()) createNode("ReminderNotifyInApp", s.recipientSettings.value().reminderNotifyInApp); writer->writeEndElement(); } if (s.username.isSet()) createNode("Username", s.username); if (s.userId.isSet()) createNode("UserId", s.userId); if (s.requireLogin.isSet()) createNode("RequireLogin", s.requireLogin); if (s.serviceCreated.isSet()) createTimestampNode("ServiceCreated", s.serviceCreated); if (s.serviceUpdated.isSet()) createTimestampNode("ServiceUpdated", s.serviceUpdated); writer->writeEndElement(); } } } void ExportData::writeNotes() { NoteTable table(global.db); QList<qint32> dirtyLids; table.getAllDirty(dirtyLids); if (!cmdLine) { progress->setMaximum(lids.size()); progress->setLabelText(tr("Notes")); progress->setValue(0); } QCoreApplication::processEvents(); for (int i=0; i<lids.size() && !quitNow; i++) { if (!cmdLine) progress->setValue(i+1); QCoreApplication::processEvents(); Note n; table.get(n,lids[i], true,true); writer->writeStartElement("Note"); if (n.guid.isSet()) createNode("Guid", n.guid); if (n.title.isSet()) createNode("Title", n.title); if (n.content.isSet()) { writer->writeStartElement("Content"); writer->writeCDATA(n.content); writer->writeEndElement(); } if (n.contentHash.isSet()) createNode("ContentHash", n.contentHash); if (n.contentLength.isSet()) createNode("ContentLength", n.contentLength); if (n.created.isSet()) createTimestampNode("Created", n.created); if (n.updated.isSet()) createTimestampNode("Updated", n.updated); if (n.deleted.isSet()) createTimestampNode("Deleted", n.deleted); if (n.active.isSet()) createNode("Active", n.active); if (n.updateSequenceNum.isSet()) createNode("UpdateSequenceNumber", n.updateSequenceNum); if (n.notebookGuid.isSet()) createNode("NotebookGuid", n.notebookGuid); if (n.tagGuids.isSet() && n.tagNames.isSet() && n.tagNames.value().size() == n.tagGuids.value().size()) { for (int j=0; j<n.tagGuids.value().size(); j++) { writer->writeStartElement("Tag"); createNode("Guid", n.tagGuids.value()[j]); createNode("Name", n.tagNames.value()[j]); writer->writeEndElement(); } } if (n.resources.isSet()) { for (int j=0; j<n.resources.value().size(); j++) { writeResource(n.resources.value()[j]); } } if (n.attributes.isSet()) { writer->writeStartElement("Attributes"); if (n.attributes.value().subjectDate.isSet()) createTimestampNode("SubjectDate", n.attributes.value().subjectDate); if (n.attributes.value().latitude.isSet()) createNode("Latitude", n.attributes.value().latitude); if (n.attributes.value().longitude.isSet()) createNode("Longitude",n.attributes.value().longitude); if (n.attributes.value().altitude.isSet()) createNode("Altitude", n.attributes.value().altitude); if (n.attributes.value().author.isSet()) createNode("Author", n.attributes.value().author); if (n.attributes.value().source.isSet()) createNode("Source", n.attributes.value().source); if (n.attributes.value().sourceApplication.isSet()) createNode("SourceApplication", n.attributes.value().sourceApplication); if (n.attributes.value().sourceURL.isSet()) createNode("SourceUrl", n.attributes.value().sourceURL); if (n.attributes.value().shareDate.isSet()) createTimestampNode("ShareDate", n.attributes.value().shareDate); if (n.attributes.value().reminderOrder.isSet()) createNode("ReminderOrder",QString::number(n.attributes.value().reminderOrder)); if (n.attributes.value().reminderDoneTime.isSet()) createNode("ReminderDoneTime", QString::number(n.attributes.value().reminderDoneTime)); if (n.attributes.value().reminderTime.isSet()) createNode("ReminderTime", QString::number(n.attributes.value().reminderTime)); if (n.attributes.value().placeName.isSet()) createNode("PlaceName", n.attributes.value().placeName); if (n.attributes.value().contentClass.isSet()) createNode("ContentClass",n.attributes.value().contentClass); if (n.attributes.value().lastEditedBy.isSet()) createNode("LastEditedBy", n.attributes.value().lastEditedBy); if (n.attributes.value().creatorId.isSet()) createNode("CreatorId", n.attributes.value().creatorId); if (n.attributes.value().lastEditorId.isSet()) createNode("LastEditorId", n.attributes.value().lastEditorId); writer->writeEndElement(); } createNode("Dirty", dirtyLids.contains(lids[i])); writer->writeEndElement(); } } void ExportData::writeResource(Resource r) { writer->writeStartElement("NoteResource"); if (r.guid.isSet()) createNode("Guid", r.guid); if (r.noteGuid.isSet()) createNode("NoteGuid", r.noteGuid); if (r.data.isSet()) writeData("Data", r.data); if (r.mime.isSet()) createNode("Mime", r.mime); if (r.width.isSet()) createNode("Width", r.width); if (r.height.isSet()) createNode("Height",r.height); if (r.duration.isSet()) createNode("Duration", r.duration); if (r.active.isSet()) createNode("Active", r.active); if (r.recognition.isSet()) { writeData("Recognition", r.recognition); } if (r.attributes.isSet()) { writer->writeStartElement("ResourceAttributes"); if (r.attributes.value().sourceURL.isSet()) createNode("SourceUrl", r.attributes.value().sourceURL); if (r.attributes.value().timestamp.isSet()) createNode("Timestamp", QString::number(r.attributes.value().timestamp)); if (r.attributes.value().latitude.isSet()) createNode("Latitude", r.attributes.value().latitude); if (r.attributes.value().longitude.isSet()) createNode("Longitude", r.attributes.value().longitude); if (r.attributes.value().altitude.isSet()) createNode("Altitude", r.attributes.value().altitude); if (r.attributes.value().cameraMake.isSet()) createNode("CameraMake", r.attributes.value().cameraMake); if (r.attributes.value().cameraModel.isSet()) createNode("CameraModel", r.attributes.value().cameraModel); if (r.attributes.value().recoType.isSet()) createNode("RecoType", r.attributes.value().recoType); if (r.attributes.value().fileName.isSet()) createNode("FileName", r.attributes.value().fileName); if (r.attributes.value().attachment.isSet()) createNode("Attachment", r.attributes.value().attachment); writer->writeEndElement(); } if (r.updateSequenceNum.isSet()) createNode("UpdateSequenceNumber", r.updateSequenceNum); if (r.alternateData.isSet()) writeData("AlternateData", r.alternateData); writer->writeEndElement(); } void ExportData::createNode(QString nodeName, QString value) { writer->writeTextElement(nodeName, value); return; } void ExportData::createNode(QString nodeName, QByteArray value) { writer->writeTextElement(nodeName, value.toHex()); return; } void ExportData::createNode(QString nodeName, bool value) { if (value) writer->writeTextElement(nodeName, "true"); else writer->writeTextElement(nodeName, "false"); return; } void ExportData::createBinaryNode(QString nodeName, string value) { QByteArray ba; ba.append(value.data(), value.length()); QString sa; sa.append(ba.toHex()); createNode(nodeName, sa); return; } void ExportData::createNode(QString nodename, string value) { createNode(nodename, QString::fromStdString(value)); } void ExportData::createLongLongNode(QString nodename, qlonglong value) { createNode(nodename, QString::number(value)); } void ExportData::createNode(QString nodename, qint32 value) { createNode(nodename, QString::number(value)); } void ExportData::createTimestampNode(QString nodename, Timestamp value) { createNode(nodename, QString::number(value)); } void ExportData::createNode(QString nodename, double value) { createNode(nodename, QString::number(value)); } void ExportData::createNode(QString nodename, int64_t value) { createNode(nodename, QString::number(value)); } void ExportData::abortBackup() { quitNow = true; this->errorMessage = tr("Backup Canceled"); this->lastError = 1; progress->close(); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/xml/exportdata.h���������������������������������������������������������������������0000664�0000000�0000000�00000005027�13156041044�0016407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef EXPORTDATA_H #define EXPORTDATA_H #include <QObject> #include <QString> #include <QStringList> #include <QHash> #include <QtXml> #include <QProgressDialog> // Windows Check #ifdef _WIN32 typedef qint64 int64_t; #endif // End windows check using namespace std; #include "qevercloud/include/QEverCloud.h" using namespace qevercloud; class ExportData : public QObject { Q_OBJECT private: bool quitNow; void createNode(QString nodeName, QString value); void createNode(QString nodeName, string value); void createLongLongNode(QString nodeName, qlonglong value); void createNode(QString nodeName, qint32 value); void createNode(QString nodeName, QByteArray value); void createBinaryNode(QString nodeName, string value); void createTimestampNode(QString nodeName, Timestamp value); void createNode(QString nodeName, bool value); void createNode(QString nodeName, double value); void createNode(QString nodename, int64_t value); void writeTags(); void writeNotebooks(); void writeSavedSearches(); void writeLinkedNotebooks(); void writeSharedNotebooks(); void writeNotes(); void writeUser(User user); void writeData(QString name, Data data); void writeResource(Resource r); QProgressDialog *progress; public: bool backup; explicit ExportData(bool backup, bool cmdLine=false, QObject *parent = 0); void backupData(QString filename); int lastError; QString errorMessage; QXmlStreamWriter *writer; QList<qint32> lids; bool cmdLine; signals: public slots: void abortBackup(); }; #endif // EXPORTDATA_H ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/xml/importdata.cpp�������������������������������������������������������������������0000664�0000000�0000000�00000106576�13156041044�0016746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "importdata.h" #include <QStringList> #include <QString> #include "sql/resourcetable.h" #include "sql/notebooktable.h" #include "sql/notetable.h" #include "sql/tagtable.h" #include "sql/searchtable.h" #include "sql/usertable.h" #include "global.h" #include <QProgressDialog> #include <QMessageBox> #include <QPushButton> extern Global global; //*********************************************************** //* Constructor. If full == true then this is a restore. //* if full=false then this is considered an import. The //* only real difference is that an import automatically //* gets a new guid and is always considered "dirty" //* where an import will keep the guid and will obey the //* <dirty> tag in the note. //*********************************************************** ImportData::ImportData(bool full, bool cmdline, QObject *parent) : QObject(parent) { importTags = false; importNotebooks = false; backup = full; createTags = false; stopNow = false; this->cmdline = cmdline; // get the if (!full) { NotebookTable t(global.db); QString name = tr("Imported Notes"); qint32 lid=t.findByName(name); if (lid == 0) { // We have a new notebook to add Notebook book; book.name = name; bool isSynchronized = true; QUuid uuid; notebookGuid = uuid.createUuid().toString().replace("{","").replace("}",""); book.guid = notebookGuid; t.add(0,book,true, !isSynchronized); } else { t.getGuid(notebookGuid, lid); } } if (!this->cmdline) { progress = new QProgressDialog(); progress->setVisible(false); } } //*********************************************************** //* This is the main entry point for an import. It is passed //* the file which contains the export data. It then //* opens up the file, checks the validity of the data, and //* then begins to parse through all of the crap. //*********************************************************** void ImportData::import(QString file) { fileName = file; errorMessage = ""; lastError = 0; QFile xmlFile(fileName); QFile scanFile(fileName); if (!xmlFile.open(QIODevice::ReadOnly) || !scanFile.open(QIODevice::ReadOnly)) { lastError = 16; errorMessage = "Cannot open file."; return; } QTextStream *countReader = new QTextStream(&scanFile); int recCnt = 0; QMessageBox *mb = NULL; if (!cmdline) { mb = new QMessageBox(); mb->setWindowTitle(tr("Scanning File")); mb->setText(QString::number(recCnt) + tr(" notes found.")); QPushButton *cancelButton = mb->addButton(QMessageBox::Cancel); connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); mb->show(); QCoreApplication::processEvents(); } while (!countReader->atEnd() && !stopNow) { QString line = countReader->readLine(); if (line.contains("<note>", Qt::CaseInsensitive)) { recCnt++; if (!cmdline) { mb->setText(QString::number(recCnt) + tr(" notes found.")); QCoreApplication::processEvents(); } } } notebookData.clear(); if (!cmdline) { progress->setMaximum(recCnt); progress->setMinimum(0); if (backup) { progress->setWindowTitle(tr("Importing")); progress->setLabelText(tr("Importing Notes")); } else { progress->setWindowTitle(tr("Restore")); progress->setLabelText(tr("Restoring Notes")); } progress->setWindowModality(Qt::ApplicationModal); connect(progress, SIGNAL(canceled()), this, SLOT(cancel())); progress->setVisible(true); mb->close(); progress->show(); } recCnt = 0; reader = new QXmlStreamReader(&xmlFile); NSqlQuery query(global.db); query.exec("begin"); int commitCount = 100; while (!reader->atEnd() && !stopNow) { if (commitCount <= 0) { query.exec("commit"); commitCount = 100; } commitCount--; reader->readNext(); if (reader->hasError()) { errorMessage = reader->errorString(); QLOG_ERROR() << "************************* ERROR READING BACKUP " << errorMessage; lastError = 16; if (mb != NULL) delete mb; return; } if (reader->name().toString().toLower() == "nevernote-export" && reader->isStartElement()) { QXmlStreamAttributes attributes = reader->attributes(); QString version = attributes.value("version").toString(); QString type = attributes.value("exportType").toString(); QString application = attributes.value("application").toString(); if (version != "0.85" && version != "0.86" && version != "0.95") { lastError = 1; errorMessage = "Unknown backup version = " +version; if (mb != NULL) delete mb; return; } if (application.toLower() != "nevernote") { lastError = 2; errorMessage = "This backup is from an unknown application = " +application; if (mb != NULL) delete mb; return; } if (type.toLower() == "backup" && !backup) { lastError = 4; errorMessage = "This is backup file, not an export file"; if (!cmdline) progress->hide(); if (mb != NULL) delete mb; return; } if (type.toLower() == "export" && backup) { lastError = 5; errorMessage = "This is an export file, not a backup file"; if (mb != NULL) delete mb; return; } } if (reader->name().toString().toLower() == "synchronization" && reader->isStartElement() && backup) { processSynchronizationNode(); } if (reader->name().toString().toLower() == "note" && reader->isStartElement()) { processNoteNode(); recCnt++; if (!cmdline) progress->setValue(recCnt); } if (reader->name().toString().toLower() == "notebook" && reader->isStartElement() && (backup || importNotebooks)) { processNotebookNode(); } if (reader->name().toString().toLower() == "tag" && reader->isStartElement() && (backup || importTags)) { processTagNode(); } if (reader->name().toString().toLower() == "savedsearch" && reader->isStartElement() && backup) { processSavedSearchNode(); } if (reader->name().toString().toLower() == "linkednotebook" && reader->isStartElement() && backup) { processLinkedNotebookNode(); } if (reader->name().toString().toLower() == "SharedNotebook" && reader->isStartElement() && backup) { processSharedNotebookNode(); } } xmlFile.close(); query.exec("commit"); // Now we do what is a "ahem" hack. We need to // go through all of the notes & rebuild the NoteTable. This // is because we may have gotten notes & tags before the notebook // & tag names existed. There is probably a more efficient way // to do this, but since we don't really do this often this works // as well as any other way. NoteTable noteTable(global.db); for (qint32 i=0; i<noteList.size(); i++) { qint32 lid = noteTable.getLid(noteList[i]); if (lid > 0) { Note note; bool dirty = noteTable.isDirty(lid); noteTable.get(note, lid, false, false); noteTable.updateNoteList(lid, note, dirty, 0); } } query.exec("commit"); if (!this->cmdline) progress->hide(); if (mb != NULL) delete mb; } //*********************************************************** //* Process a <note> tag //*********************************************************** void ImportData::processNoteNode() { QLOG_DEBUG() << "Processing Note Node"; Note note; QUuid uuid; QString newGuid = uuid.createUuid().toString().replace("{", "").replace("}", ""); note.guid = newGuid; NoteMetaData meta; bool noteIsDirty = false; bool atEnd = false; while(!atEnd) { QString name = reader->name().toString().toLower(); QLOG_TRACE() << name; if (name == "guid" && !reader->isEndElement() && backup) { note.guid = textValue(); noteList.append(note.guid); } if (name == "updatesequencenumber" && !reader->isEndElement()) { note.updateSequenceNum = textValue().toLong(); } if (name == "title" && !reader->isEndElement()) { note.title = textValue(); } if (name == "created" && !reader->isEndElement()) { note.created = longLongValue(); } if (name == "updated" && !reader->isEndElement()) { note.updated = longLongValue(); } if (name == "deleted" && !reader->isEndElement()) { note.deleted = longLongValue(); } if (name == "active" && !reader->isEndElement()) { note.active = booleanValue(); } if (name == "notebookguid" && !reader->isEndElement()) { note.notebookGuid = textValue(); } if (name == "dirty" && !reader->isEndElement()) { noteIsDirty = booleanValue(); } if (name == "content" && !reader->isEndElement()) { note.content = textValue(); } if (name == "titlecolor" && !reader->isEndElement()) { meta.setColor(intValue()); } if (name == "notetags" && (createTags || backup) && !reader->isEndElement()) { QStringList names, guids; processNoteTagList(guids, names); QList<QString> tagGuids; QList<QString> tagNames; for (qint32 i=0; i<guids.size(); i++) { tagGuids.append(guids[i]); tagNames.append(names[i]); } note.tagNames = tagNames; note.tagGuids = tagGuids; } if (name == "noteattributes" && !reader->isEndElement()) { NoteAttributes na; if (!note.attributes.isSet()) { note.attributes = na; } processNoteAttributes(note.attributes); } if (name == "noteresource" && !reader->isEndElement()) { Resource newRes; processResource(newRes); newRes.noteGuid = note.guid; if (!backup) newRes.updateSequenceNum = 0; QList<Resource> resources; if (note.resources.isSet()) resources = note.resources; resources.append(newRes); note.resources = resources; } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "note" && reader->isEndElement()) atEnd = true; } // Loop through the resources & make sure they all have the // proper guid for this note QList<Resource> resources; if (note.resources.isSet()) resources = note.resources; for (int i=0; i<resources.size(); i++) { resources[i].noteGuid = note.guid; } note.resources = resources; NoteTable noteTable(global.db); if (backup) noteTable.add(0,note, noteIsDirty); else { note.updateSequenceNum = 0; if (notebookGuid != NULL) note.notebookGuid = notebookGuid; noteTable.add(0,note, true); if (metaData.contains(note.guid)) { QLOG_ERROR() << "ERROR IN IMPORTING DATA: Metadata not yet supported"; } } return; } //*********************************************************** //* Process a <noteresource> node. //*********************************************************** void ImportData::processResource(Resource &resource) { QLOG_DEBUG() << "Processing Resource Node"; bool atEnd = false; //bool isDirty = false; while(!atEnd) { if (reader->isStartElement()) { QString name = reader->name().toString().toLower(); if (name == "guid") { resource.guid = textValue(); } if (!backup) { QUuid uuid; QString g = uuid.createUuid().toString().replace("{","").replace("}",""); resource.guid = g; } if (name == "noteguid") { QString tx = textValue(); resource.noteGuid = tx; } if (name == "updatesequencenumber") { resource.updateSequenceNum = intValue(); } if (name == "active") { resource.active = booleanValue(); } if (name == "mime") { resource.mime = textValue(); } if (name == "duration") { resource.duration = shortValue(); } if (name == "height") { resource.height = shortValue(); } if (name == "width") { resource.width = shortValue(); } // if (name == "dirty") // isDirty = booleanValue(); if (name == "data") { Data data; resource.data = data; processData("Data", resource.data); } if (name == "alternatedata") { processData("AlternateData", resource.data); } if (name == "recognitiondata") { processData("RecognitionData", resource.recognition); } if (name == "noteresourceattributes") { ResourceAttributes ra; if (!resource.attributes.isSet()) { resource.attributes = ra; } processResourceAttributes(resource.attributes); } } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "noteresource" && reader->isEndElement()) atEnd = true; } } //*********************************************************** //* Process any type of data node //*********************************************************** void ImportData::processData(QString nodeName, Data &data) { QLOG_DEBUG() << "Processing Data Node"; nodeName.toLower(); bool atEnd = false; while(!atEnd) { if (reader->isStartElement()) { QString name = reader->name().toString().toLower(); // if (name == "size") { // data.size = intValue(); // data.__isset.size = true; // } if (name == "body") { QString x = textValue(); QByteArray bin = QByteArray::fromHex(x.toLocal8Bit()); data.body.clear(); data.body = bin; QCryptographicHash md5hash(QCryptographicHash::Md5); QByteArray hash = md5hash.hash(bin, QCryptographicHash::Md5); QLOG_DEBUG() << "Actual:" << hash.toHex(); data.bodyHash.clear(); data.bodyHash = hash; data.size = bin.size(); } // if (name == "bodyhash") { // QByteArray hexData = textValue().toLocal8Bit(); // QLOG_DEBUG() << hexData; // //QByteArray hexData; // //hexData.append(textValue()); // QByteArray binData = QByteArray::fromHex(hexData); // QLOG_DEBUG() << QByteArray::fromHex(hexData); // data.bodyHash.clear(); // data.bodyHash.append(binData.data(), binData.size()); // data.__isset.bodyHash = true; // } } reader->readNext(); QString nName = reader->name().toString().toLower(); if (nName == nodeName.toLower() && reader->isEndElement()) atEnd = true; } } //*********************************************************** //* Process a node that has the <noteresourceattribute> //*********************************************************** void ImportData::processResourceAttributes(ResourceAttributes &attributes) { QLOG_DEBUG() << "Processing Resource Attributes Node"; bool atEnd = false; while(!atEnd) { if (reader->isStartElement()) { QString name = reader->name().toString().toLower(); if (name == "cameramake") { attributes.cameraMake = textValue(); } if (name == "cameramodel") { attributes.cameraModel = textValue(); } if (name == "filename") { attributes.fileName = textValue(); } if (name == "recotype") { attributes.recoType = textValue(); } if (name == "sourceurl") { attributes.sourceURL = textValue(); } if (name == "altitude") { attributes.altitude = doubleValue(); } if (name == "longitude") { attributes.longitude = doubleValue(); } if (name == "altitude") { attributes.latitude = doubleValue(); } if (name == "timestamp") { attributes.timestamp = longValue(); } if (name == "attachment") { attributes.attachment = booleanValue(); } if (name == "clientwillindex") { attributes.clientWillIndex = booleanValue(); } } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "noteresourceattribute" && reader->isEndElement()) atEnd = true; } } //* Process the list of tags for a note void ImportData::processNoteTagList(QStringList &guidList, QStringList &names) { bool atEnd = false; while(!atEnd) { if (reader->isStartElement()) { QString name = reader->name().toString().toLower(); if (name == "guid") guidList.append(textValue()); } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "notetags" && reader->isEndElement()) atEnd = true; } // Now look for any matches with existing ones. If they don't // exist we create a dummy record TagTable tagTable(global.db); for (qint32 i=0; i<guidList.size(); i++) { qint32 lid = tagTable.getLid(guidList[i]); if (lid == 0) { Tag newTag; newTag.guid = guidList[i]; newTag.name = "newtag"; tagTable.add(0, newTag, false, 0); names.append(newTag.name); } else { Tag tag; tagTable.get(tag, lid); names.append(tag.name); } } } //*********************************************************** //* Process an <attributes> node //*********************************************************** void ImportData::processNoteAttributes(NoteAttributes &attributes) { QLOG_DEBUG() << "Processing Note Attribute Node"; bool atEnd = false; while(!atEnd) { if (reader->isStartElement()) { QString name = reader->name().toString().toLower(); if (name == "author" && !reader->isEndElement()) { attributes.author = textValue(); } if (name == "sourceurl" && !reader->isEndElement()) { attributes.sourceURL = textValue(); } if (name == "source" && !reader->isEndElement()) { attributes.source = textValue(); } if (name == "sourceapplication" && !reader->isEndElement()) { attributes.sourceApplication = textValue(); } if (name == "altitude" && !reader->isEndElement()) { attributes.altitude = doubleValue(); } if (name == "longitude" && !reader->isEndElement()) { attributes.longitude = doubleValue(); } if (name == "latitude" && !reader->isEndElement()) { attributes.latitude = doubleValue(); } if (name == "subjectdate" && !reader->isEndElement()) { attributes.subjectDate = longLongValue(); } } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "noteattributes" && reader->isEndElement()) atEnd = true; } return; } //*********************************************************** //* Process a <synchronization> node //*********************************************************** void ImportData::processSynchronizationNode() { QLOG_DEBUG() << "Processing Synchronization Node"; bool atEnd = false; UserTable userTable(global.db); while(!atEnd) { if (reader->isStartElement()) { QString name = reader->name().toString().toLower(); if (name == "updatesequencenumber") { userTable.updateLastSyncNumber(intValue()); } if (name == "lastsequencedate") userTable.updateLastSyncDate(longValue()); } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "synchronization" && reader->isEndElement()) atEnd = true; } } //*********************************************************** //* Process a <savedsearch> node. //*********************************************************** void ImportData::processSavedSearchNode() { QLOG_DEBUG() << "Processing Saved Search Node"; SavedSearch search; bool searchIsDirty = false; SearchTable searchTable(global.db); bool atEnd = false; // Keep going until we hit </savedsearch> while(!atEnd) { if (reader->isStartElement()) { QString name = reader->name().toString().toLower(); if (name == "guid") { search.guid = textValue(); } if (name == "name") { search.name = textValue(); } if (name == "updatesequencenumber") { search.updateSequenceNum = intValue(); } if (name == "query") { search.query = textValue(); } if (name == "dirty") { if (booleanValue()) searchIsDirty = true; } } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "savedsearch" && reader->isEndElement()) atEnd = true; } // Add this search to the table searchTable.add(0,search, searchIsDirty); return; } //*********************************************************** //* Process a shared notebook //*********************************************************** void ImportData::processLinkedNotebookNode() { QLOG_DEBUG() << "Processing Linked Notebook Node"; LinkedNotebook linkedNotebook; // bool linkedNotebookIsDirty = false; QLOG_ERROR() << "Linked notebook database support not implemented yet"; bool atEnd = false; while(!atEnd) { if (reader->isStartElement()) { QString name = reader->name().toString().toLower(); if (name == "guid") { linkedNotebook.guid = textValue(); } if (name == "shardid") { linkedNotebook.shardId = textValue(); } if (name == "updatesequencenumber") { linkedNotebook.updateSequenceNum = intValue(); } if (name == "sharekey") { linkedNotebook.shareKey = textValue(); } if (name == "sharename") { linkedNotebook.shareName = textValue(); } if (name == "uri") { linkedNotebook.uri = textValue(); } if (name == "username") { linkedNotebook.username = textValue(); } } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "linkednotebook" && reader->isEndElement()) atEnd = true; } return; } //*********************************************************** //* Import a shared notebook //*********************************************************** void ImportData::processSharedNotebookNode() { QLOG_DEBUG() << "Processing Shared Notebook Node"; SharedNotebook sharedNotebook; //bool sharedNotebookIsDirty = false; QLOG_ERROR() << "Shared notebook database support not implemented yet"; bool atEnd = false; while(!atEnd) { if (reader->isStartElement()) { QString name = reader->name().toString().toLower(); if (name == "id") { sharedNotebook.id = intValue(); } if (name == "userid") { sharedNotebook.userId = intValue(); } if (name == "email") { sharedNotebook.email = textValue(); } if (name == "notebookguid") { sharedNotebook.notebookGuid = textValue(); } if (name == "sharekey") { sharedNotebook.shareKey = textValue(); } if (name == "username") { sharedNotebook.username = textValue(); } if (name == "servicecreated") { sharedNotebook.serviceCreated = longValue(); } } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "sharednotebook" && reader->isEndElement()) atEnd = true; } return; } //*********************************************************** //* Process a <notebook> node //*********************************************************** void ImportData::processNotebookNode() { QLOG_DEBUG() << "Processing Notebook Node"; Notebook notebook; bool notebookIsDirty = false; bool notebookIsLocal = false; Publishing publishing; // bool notebookIsReadOnly = false; // notebookIcon = null; bool atEnd = false; // Loop through until we hit </notebook> while(!atEnd) { if (backup || importNotebooks) { if (reader->isStartElement()) { QString name = reader->name().toString().toLower(); if (name == "guid") { notebook.guid = textValue(); } if (name == "name") { notebook.name = textValue(); } if (name == "updatesequencenumber") { notebook.updateSequenceNum = intValue(); } if (name == "servicecreated") { notebook.serviceCreated = longValue(); } if (name == "serviceupdated") { notebook.serviceUpdated = longValue(); } if (name == "defaultnotebook") { notebook.defaultNotebook = booleanValue(); } if (name == "dirty") { if (booleanValue()) notebookIsDirty = true; } if (name == "localnotebook") { if (booleanValue()) notebookIsLocal = true; } if (name == "publishingpublicdescription") { publishing.publicDescription = textValue(); } if (name == "publishinguri") { publishing.uri = textValue(); } if (name == "publishingorder") { //notebook->publishing.order = // NoteSortOrder.; QLOG_DEBUG() << "!!!!!!!!!!!! PublishingOrder not completed in import"; } if (name == "PublishingAscending") { if (booleanValue()) publishing.ascending = true; else publishing.ascending = false; } if (name == "icon") { //byte[] b = textValue().getBytes(); // data binary //QByteArray hexData = new QByteArray(b); //QByteArray binData = new QByteArray(QByteArray.fromHex(hexData)); //notebookIcon = new QIcon(QPixmap.fromImage(QImage.fromData(binData))); } if (name == "stack") { notebook.stack = textValue(); } } } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "notebook" && reader->isEndElement()) atEnd = true; } notebook.publishing = publishing; // We are at the end. We should have a valid notebook now NotebookTable notebookTable(global.db); // Check if there is a notebook by this name already. // If one exists, we treat this as an update qint32 lid = notebookTable.findByName(notebook.name); if (lid <= 0) { lid = notebookTable.getLid(notebook.guid); } if (lid <= 0) { notebookTable.add(lid,notebook,notebookIsDirty, notebookIsLocal); } else { qint32 oldLid = notebookTable.getLid(notebook.guid); if (oldLid != lid) notebookTable.merge(oldLid, lid); notebookTable.sync(lid, notebook); // notebookTable.updateGuid(lid, notebook.guid); notebookTable.setDirty(lid, notebookIsDirty); } return; } //*********************************************************** //* This will take a <tag> node and parse out the values. //*********************************************************** void ImportData::processTagNode() { QLOG_DEBUG() << "Processing Tag Node"; Tag tag; bool tagIsDirty = false; bool atEnd = false; // Loop through until we are at the end of the </tag> while(!atEnd) { if (backup || importTags) { if (reader->isStartElement()) { QString name = reader->name().toString().toLower(); if (name == "guid") { tag.guid = textValue(); } if (name == "name") { tag.name = textValue(); } if (name == "updatesequencenumber") { tag.updateSequenceNum = intValue(); } if (name == "parentguid") { tag.parentGuid = textValue(); } if (name == "Dirty") { if (booleanValue()) tagIsDirty = true; else tagIsDirty = false; } } } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "tag" && reader->isEndElement()) atEnd = true; } // We have a good tag, now let's save it to the database TagTable tagTable(global.db); QString name(tag.name); // Check if we have a tag by this name already. If we // do then we treat this as an update. qint32 lid = tagTable.findByName(name,0); if (lid <= 0) { lid = tagTable.getLid(tag.guid); } if (lid <= 0) { tagTable.add(0, tag,tagIsDirty, 0); } else { // qint32 oldLid = tagTable.getLid(tag.guid); // if (oldLid != lid) // tagTable.merge(oldLid, lid); tagTable.sync(lid, tag, 0); // notebookTable.updateGuid(lid, notebook.guid); tagTable.setDirty(lid, tagIsDirty); } return; } //*********************************************************** //* take a node's value and return the text //*********************************************************** QString ImportData::textValue() { reader->readNext(); return reader->text().toString(); } //*********************************************************** //* take a node's value and return the integer value //*********************************************************** qint32 ImportData::intValue() { return textValue().toLong(); } //*********************************************************** //* take a node's value and return a long value //*********************************************************** long ImportData::longValue() { return textValue().toLong(); } //*********************************************************** //* take a node's value and return longlong. This is useful //* for date values. //*********************************************************** qlonglong ImportData::longLongValue() { return textValue().toLongLong(); } //*********************************************************** //* take a node's value and return a double value //*********************************************************** double ImportData::doubleValue() { return textValue().toDouble(); } //*********************************************************** //* take a node's value and return true/false based upon //* its value //*********************************************************** bool ImportData::booleanValue() { QString value = textValue(); value.toLower(); if (value == "1" || value == "true") return true; else return false; } //*********************************************************** //* Take a node's text & return the short value //*********************************************************** short ImportData::shortValue() { return textValue().toShort(); } //*********************************************************** //* Set the notebook GUID for any imported notes. This is //* only useful when importing a note. When doing a restore //* we don't use this. //*********************************************************** void ImportData::setNotebookGuid(QString g) { notebookGuid = g; } //*********************************************************** //* This is used to retrieve any errors that occur when //* tying to restore or import from a nnex file //*********************************************************** QString ImportData::getErrorMessage() { return errorMessage; } //********************************************************** //* The "Cancel" button was pressed //********************************************************** void ImportData::cancel() { stopNow = true; } ����������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/xml/importdata.h���������������������������������������������������������������������0000664�0000000�0000000�00000006120�13156041044�0016373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef IMPORTDATA_H #define IMPORTDATA_H #include <QString> #include <QStringList> #include <QHash> #include <QtXml> #include "sql/notemetadata.h" #include "global.h" using namespace std; #include <QProgressDialog> //*********************************************************** //*********************************************************** //* This class is used to import or restore data from an //* export file. Export files typically end in nnex. //*********************************************************** //*********************************************************** class ImportData : public QObject { Q_OBJECT private: QString fileName; QXmlStreamReader *reader; bool backup; QString notebookGuid; QProgressDialog *progress; QHash<QString,QString> noteMap; QHash<QString, NoteMetadata> metaData; QList<QString> noteList; QHash<QString, qint32> notebookData; void processNoteNode(); void processResource(Resource &resource); void processData(QString nodeName, Data &data); void processResourceAttributes(ResourceAttributes &attributes); void processNoteTagList(QStringList &guids, QStringList &names); void processNoteAttributes(NoteAttributes &attributes); void processSynchronizationNode(); void processSavedSearchNode(); void processLinkedNotebookNode(); void processSharedNotebookNode(); void processNotebookNode(); void processTagNode(); QString textValue(); qint32 intValue(); long longValue(); qlonglong longLongValue(); double doubleValue(); bool booleanValue(); short shortValue(); bool stopNow; public: qint32 lastError; QString errorMessage; bool importTags; bool importNotebooks; bool createTags; bool cmdline; ImportData(bool full, bool cmdline=false, QObject *parent=0); void import(QString file); void setNotebookGuid(QString g); QString getErrorMessage(); public slots: void cancel(); }; #endif // IMPORTDATA_H ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/xml/importenex.cpp�������������������������������������������������������������������0000664�0000000�0000000�00000042602�13156041044�0016761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2013 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #include "importenex.h" #include "sql/notebooktable.h" #include "sql/tagtable.h" #include "sql/notetable.h" #include "sql/nsqlquery.h" #include <QMessageBox> #include <QPushButton> extern Global global; ImportEnex::ImportEnex(QObject *parent) : QObject(parent) { importTags = false; importNotebooks = false; NotebookTable t(global.db); QString name = tr("Imported Notes"); qint32 lid=t.findByName(name); if (lid == 0) { // We have a new notebook to add Notebook book; book.name = name; bool isSynchronized = true; QUuid uuid; notebookGuid = uuid.createUuid().toString().replace("{","").replace("}",""); book.guid = notebookGuid; t.add(0,book,true, !isSynchronized); } else { t.getGuid(notebookGuid, lid); } TagTable tt(global.db); tt.getNameMap(tagList); progress = new QProgressDialog(); progress->setVisible(false); stopNow = false; } void ImportEnex::import(QString file) { fileName = file; errorMessage = ""; lastError = 0; QFile xmlFile(fileName); QFile scanFile(fileName); if (!xmlFile.open(QIODevice::ReadOnly) || !scanFile.open(QIODevice::ReadOnly)) { lastError = 16; errorMessage = "Cannot open file."; return; } reader = new QXmlStreamReader(&xmlFile); QTextStream *countReader = new QTextStream(&scanFile); int recCnt = 0; QMessageBox mb; mb.setWindowTitle(tr("Scanning File")); mb.setText(QString::number(recCnt) + tr(" notes found.")); QPushButton *cancelButton = mb.addButton(QMessageBox::Cancel); connect(cancelButton, SIGNAL(clicked()), this, SLOT(canceled())); mb.show(); QCoreApplication::processEvents(); while (!countReader->atEnd() && !stopNow) { QString line = countReader->readLine(); if (line.contains("<note>")) { recCnt++; mb.setText(QString::number(recCnt) + tr(" notes found.")); QCoreApplication::processEvents(); } } progress->setMaximum(recCnt); progress->setMinimum(0); progress->setWindowTitle(tr("Importing Notes")); progress->setLabelText(tr("Importing Notes")); progress->setWindowModality(Qt::ApplicationModal); connect(progress, SIGNAL(canceled()), this, SLOT(canceled())); progress->setVisible(true); mb.close(); progress->show(); NSqlQuery query(global.db); query.exec("begin"); recCnt = 0; while (!reader->atEnd() && !stopNow) { reader->readNext(); if (reader->hasError()) { errorMessage = reader->errorString(); QLOG_ERROR() << "************************* ERROR READING BACKUP " << errorMessage; lastError = 16; return; } if (reader->name().toString().toLower() == "en-export" && reader->isStartElement()) { QXmlStreamAttributes attributes = reader->attributes(); QString version = attributes.value("version").toString(); QString application = attributes.value("application").toString(); // Version 5.x & 6.x are for Windows if (version != "5.x" && version != "6.x" && version.toLower() != "evernote mac") { lastError = 1; errorMessage = "Unknown export version = " +version; return; } if (application.toLower() != "evernote/windows" && application.toLower() != "evernote") { lastError = 2; errorMessage = "This export is from an unknown application = " +application; return; } } if (reader->name().toString().toLower() == "note" && reader->isStartElement()) { recCnt++; progress->setValue(recCnt); QLOG_DEBUG() << "Importing Note " << recCnt; processNoteNode(); } } xmlFile.close(); query.exec("commit"); progress->hide(); } //*********************************************************** //* Process a <note> tag //*********************************************************** void ImportEnex::processNoteNode() { Note note; QUuid uuid; QString newGuid = uuid.createUuid().toString().replace("{", "").replace("}", ""); note.guid = newGuid; note.active = true; QList<Resource> resources; //QList<QString> tagNames; bool atEnd = false; while(!atEnd) { QString name = reader->name().toString().toLower(); if (name == "title" && !reader->isEndElement()) { note.title = textValue(); } if (name == "created" && !reader->isEndElement()) { note.created = datetimeValue(); } if (name == "updated" && !reader->isEndElement()) { note.updated = datetimeValue(); } if (name == "deleted" && !reader->isEndElement()) { note.deleted = datetimeValue(); } if (name == "active" && !reader->isEndElement()) { note.active = booleanValue(); } if (name == "content" && !reader->isEndElement()) { note.content = textValue(); } if (name == "note-attributes" && !reader->isEndElement()) { NoteAttributes na; note.attributes = na; processNoteAttributes(note.attributes); } if (name == "resource" && !reader->isEndElement()) { Resource newRes; processResource(newRes); newRes.noteGuid = note.guid; newRes.updateSequenceNum = 0; resources.append(newRes); } if (name == "tag" && !reader->isEndElement()) { if (!note.tagNames.isSet()) note.tagNames = QStringList(); note.tagNames->append(textValue()); } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "note" && reader->isEndElement()) atEnd = true; } // Loop through the resources & make sure they all have the // proper guid for this note for (int i=0; i<resources.size(); i++) { Resource *r = &resources[i]; r->noteGuid = note.guid; } // Loop through the tag names & find any matching tags. if (note.tagNames.isSet()) { note.tagGuids = QList< Guid >(); for (int i=0; i<note.tagNames->size(); i++) { QString tagGuid = tagList[note.tagNames->at(i)]; if (tagGuid != "") { note.tagGuids->append(tagGuid); } else { QUuid uuid; QString g = uuid.createUuid().toString().replace("{","").replace("}",""); Tag newTag; newTag.name = note.tagNames->at(i); newTag.guid = g; TagTable tt(global.db); tt.add(0, newTag, true, 0); tagList.insert(note.tagNames->at(i), g); note.tagGuids->append(g); } } } note.resources = resources; // note.tagNames = tagNames; NoteTable noteTable(global.db); note.updateSequenceNum = 0; note.notebookGuid = notebookGuid; if (note.created.isSet() == false) { note.created = QDateTime::currentDateTime().toMSecsSinceEpoch(); } if (note.updated.isSet() == false) { note.updated = note.created; } if (metaData.contains(note.guid)) { QLOG_ERROR() << "ERROR IN IMPORTING DATA: Metadata not yet supported"; } noteTable.add(0,note, true); return; } //*********************************************************** //* Process a <noteresource> node. //*********************************************************** void ImportEnex::processResource(Resource &resource) { bool atEnd = false; resource.active = true; while(!atEnd) { if (reader->isStartElement()) { QString name = reader->name().toString().toLower(); QUuid uuid; QString g = uuid.createUuid().toString().replace("{","").replace("}",""); resource.guid = g; if (name == "active") { resource.active = booleanValue(); } if (name == "mime") { resource.mime = textValue(); } if (name == "duration") { resource.duration = shortValue(); } if (name == "height") { resource.height = shortValue(); } if (name == "width") { resource.width = shortValue(); } if (name == "data") { Data d; resource.data = d; processData("Data", resource.data); } if (name == "alternate-data") { Data d; resource.alternateData = d; processData("AlternateData", resource.data); } if (name == "recognition-data") { Data d; resource.recognition = d; processData("RecognitionData", resource.recognition); } if (name == "resource-attributes") { ResourceAttributes ra; resource.attributes = ra; processResourceAttributes(resource.attributes); } } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "resource" && reader->isEndElement()) atEnd = true; } } //*********************************************************** //* Process any type of data node //*********************************************************** void ImportEnex::processData(QString nodeName, Data &data) { nodeName.toLower(); QString x = textValue(); QByteArray ba; ba.append(x); QByteArray bin = QByteArray::fromBase64(ba); data.body.clear(); data.body = bin; data.size = bin.length(); QCryptographicHash md5hash(QCryptographicHash::Md5); QByteArray hash = md5hash.hash(bin, QCryptographicHash::Md5); data.bodyHash = hash; } //*********************************************************** //* Process a node that has the <noteresourceattribute> //*********************************************************** void ImportEnex::processResourceAttributes(ResourceAttributes &attributes) { bool atEnd = false; while(!atEnd) { if (reader->isStartElement()) { QString name = reader->name().toString().toLower(); if (name == "camera-make") { attributes.cameraMake = textValue(); } if (name == "camera-model") { attributes.cameraModel = textValue(); } if (name == "file-name") { attributes.fileName = textValue(); } if (name == "reco-type") { attributes.recoType = textValue(); } if (name == "source-url") { attributes.sourceURL = textValue(); } if (name == "altitude") { attributes.altitude = doubleValue(); } if (name == "longitude") { attributes.longitude = doubleValue(); } if (name == "altitude") { attributes.latitude = doubleValue(); } if (name == "timestamp") { attributes.timestamp = longValue(); } if (name == "attachment") { attributes.attachment = booleanValue(); } } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "resource-attributes" && reader->isEndElement()) atEnd = true; } } //*********************************************************** //* Process an <attributes> node //*********************************************************** void ImportEnex::processNoteAttributes(NoteAttributes &attributes) { bool atEnd = false; while(!atEnd) { if (reader->isStartElement()) { QString name = reader->name().toString().toLower(); if (name == "author" && !reader->isEndElement()) { attributes.author = textValue(); } if (name == "source-url" && !reader->isEndElement()) { attributes.sourceURL = textValue(); } if (name == "source" && !reader->isEndElement()) { attributes.source = textValue(); } if (name == "source-application" && !reader->isEndElement()) { attributes.sourceApplication = textValue(); } if (name == "altitude" && !reader->isEndElement()) { attributes.altitude = doubleValue(); } if (name == "longitude" && !reader->isEndElement()) { attributes.longitude = doubleValue(); } if (name == "latitude" && !reader->isEndElement()) { attributes.latitude = doubleValue(); } if (name == "subject-date" && !reader->isEndElement()) { attributes.subjectDate = datetimeValue(); } } reader->readNext(); QString endName = reader->name().toString().toLower(); if (endName == "note-attributes" && reader->isEndElement()) atEnd = true; } return; } //*********************************************************** //* take a node's value and return the text //*********************************************************** QString ImportEnex::textValue() { reader->readNext(); return reader->text().toString(); } //*********************************************************** //* take a node's value and return the integer value //*********************************************************** qint32 ImportEnex::intValue() { return textValue().toLong(); } //*********************************************************** //* take a node's value and return a long value //*********************************************************** long ImportEnex::longValue() { return textValue().toLong(); } //*********************************************************** //* take a node's value and return longlong. This is useful //* for date values. //*********************************************************** qlonglong ImportEnex::longLongValue() { return textValue().toLongLong(); } //*********************************************************** //* take a node's value and return a double value //*********************************************************** double ImportEnex::doubleValue() { return textValue().toDouble(); } //*********************************************************** //* take a node's value and return true/false based upon //* its value //*********************************************************** bool ImportEnex::booleanValue() { QString value = textValue(); value.toLower(); if (value == "1" || value == "true") return true; else return false; } //*********************************************************** //* Take a node's text & return the short value //*********************************************************** short ImportEnex::shortValue() { return textValue().toShort(); } //*********************************************************** //* take a node's value and return a long value //*********************************************************** qlonglong ImportEnex::datetimeValue() { QString value = textValue(); QString year = value.mid(0,4); QString month = value.mid(4,2); QString day = value.mid(6,2); QString hour = value.mid(9,2); QString minute = value.mid(11,2); QString second = value.mid(13,2); QDate date; date.setDate(year.toInt(), month.toInt(), day.toInt()); QTime time; time.setHMS(hour.toInt(), minute.toInt(), second.toInt()); QDateTime dt; dt.setDate(date); dt.setTime(time); dt.setTimeSpec(Qt::UTC); return dt.toMSecsSinceEpoch(); } //*********************************************************** //* Set the notebook GUID for any imported notes. This is //* only useful when importing a note. When doing a restore //* we don't use this. //*********************************************************** void ImportEnex::setNotebookGuid(QString g) { notebookGuid = g; } //*********************************************************** //* This is used to retrieve any errors that occur when //* tying to restore or import from a nnex file //*********************************************************** QString ImportEnex::getErrorMessage() { return errorMessage; } void ImportEnex::canceled() { stopNow = true; } ������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/xml/importenex.h���������������������������������������������������������������������0000664�0000000�0000000�00000005703�13156041044�0016427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************************* NixNote - An open-source client for the Evernote service. Copyright (C) 2014 Randy Baumgarte This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************************/ #ifndef IMPORTENEX_H #define IMPORTENEX_H #include <QString> #include <QXmlStreamReader> #include <QString> #include <QStringList> #include <QHash> #include <QtXml> #include <QProgressDialog> #include "sql/notemetadata.h" #include "global.h" using namespace std; class ImportEnex : public QObject { Q_OBJECT private: void processNoteNode(); void processResource(Resource &resource); void setNotebookGuid(QString g); void processData(QString nodeName, Data &data); void processResourceAttributes(ResourceAttributes &attributes); void processNoteAttributes(NoteAttributes &attributes); QString fileName; QXmlStreamReader *reader; QString notebookGuid; QProgressDialog *progress; QHash<QString,QString> noteMap; QHash<QString, NoteMetadata> metaData; QList<QString> noteList; QHash<QString, QString> tagList; bool backup; bool stopNow; QString textValue(); qint32 intValue(); long longValue(); qlonglong longLongValue(); qlonglong datetimeValue(); double doubleValue(); bool booleanValue(); short shortValue(); public: ImportEnex(QObject *parent=0); qint32 lastError; QString errorMessage; bool importTags; bool importNotebooks; bool createTags; void import(QString file); QString getErrorMessage(); public slots: void canceled(); }; #endif // IMPORTENEX_H �������������������������������������������������������������nixnote2-2.0.2/xml/xmlhighlighter.cpp���������������������������������������������������������������0000664�0000000�0000000�00000023130�13156041044�0017601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/**************************************************************************** ** ** Copyright (C) 2006 J-P Nurmi. All rights reserved. ** ** The used XML syntax highlighting principles have been adapted from ** KXESyntaxHighlighter, which is part of KXML Editor 1.1.4, ** (C) 2003 by The KXMLEditor Team (http://kxmleditor.sourceforge.net). ** ** This file may be used under the terms of the GPL Version 2, June 1991. ** For details, see http://www.gnu.org/licenses/gpl.html ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include "xmlhighlighter.h" static const QColor DEFAULT_SYNTAX_CHAR = Qt::blue; static const QColor DEFAULT_ELEMENT_NAME = Qt::darkRed; static const QColor DEFAULT_COMMENT = Qt::darkGreen; static const QColor DEFAULT_ATTRIBUTE_NAME = Qt::red; static const QColor DEFAULT_ATTRIBUTE_VALUE = Qt::blue; static const QColor DEFAULT_ERROR = Qt::darkMagenta; static const QColor DEFAULT_OTHER = Qt::black; // Regular expressions for parsing XML borrowed from: // http://www.cs.sfu.ca/~cameron/REX.html static const QString EXPR_COMMENT = "<!--[^-]*-([^-][^-]*-)*->"; static const QString EXPR_COMMENT_BEGIN = "<!--"; static const QString EXPR_COMMENT_END = "[^-]*-([^-][^-]*-)*->"; static const QString EXPR_ATTRIBUTE_VALUE = "\"[^<\"]*\"|'[^<']*'"; static const QString EXPR_NAME = "([A-Za-z_:]|[^\\x00-\\x7F])([A-Za-z0-9_:.-]|[^\\x00-\\x7F])*"; XmlHighlighter::XmlHighlighter(QObject* parent) : QSyntaxHighlighter(parent) { init(); } XmlHighlighter::XmlHighlighter(QTextDocument* parent) : QSyntaxHighlighter(parent) { init(); } XmlHighlighter::XmlHighlighter(QTextEdit* parent) : QSyntaxHighlighter(parent) { init(); } XmlHighlighter::~XmlHighlighter() { } void XmlHighlighter::init() { fmtSyntaxChar.setForeground(DEFAULT_SYNTAX_CHAR); fmtElementName.setForeground(DEFAULT_ELEMENT_NAME); fmtComment.setForeground(DEFAULT_COMMENT); fmtAttributeName.setForeground(DEFAULT_ATTRIBUTE_NAME); fmtAttributeValue.setForeground(DEFAULT_ATTRIBUTE_VALUE); fmtError.setForeground(DEFAULT_ERROR); fmtOther.setForeground(DEFAULT_OTHER); } void XmlHighlighter::setHighlightColor(HighlightType type, QColor color, bool foreground) { QTextCharFormat format; if (foreground) format.setForeground(color); else format.setBackground(color); setHighlightFormat(type, format); } void XmlHighlighter::setHighlightFormat(HighlightType type, QTextCharFormat format) { switch (type) { case SyntaxChar: fmtSyntaxChar = format; break; case ElementName: fmtElementName = format; break; case Comment: fmtComment = format; break; case AttributeName: fmtAttributeName = format; break; case AttributeValue: fmtAttributeValue = format; break; case Error: fmtError = format; break; case Other: fmtOther = format; break; } rehighlight(); } void XmlHighlighter::highlightBlock(const QString& text) { int i = 0; int pos = 0; int brackets = 0; state = (previousBlockState() == InElement ? ExpectAttributeOrEndOfElement : NoState); if (previousBlockState() == InComment) { // search for the end of the comment QRegExp expression(EXPR_COMMENT_END); pos = expression.indexIn(text, i); if (pos >= 0) { // end comment found const int iLength = expression.matchedLength(); setFormat(0, iLength - 3, fmtComment); setFormat(iLength - 3, 3, fmtSyntaxChar); i += iLength; // skip comment } else { // in comment setFormat(0, text.length(), fmtComment); setCurrentBlockState(InComment); return; } } for (; i < text.length(); i++) { #if QT_VERSION < 0x050000 switch (text.at(i).toAscii()) #else switch (text.at(i).toLatin1()) #endif { case '<': brackets++; if (brackets == 1) { setFormat(i, 1, fmtSyntaxChar); state = ExpectElementNameOrSlash; } else { // wrong bracket nesting setFormat(i, 1, fmtError); } break; case '>': brackets--; if (brackets == 0) { setFormat(i, 1, fmtSyntaxChar); } else { // wrong bracket nesting setFormat( i, 1, fmtError); } state = NoState; break; case '/': if (state == ExpectElementNameOrSlash) { state = ExpectElementName; setFormat(i, 1, fmtSyntaxChar); } else { if (state == ExpectAttributeOrEndOfElement) { setFormat(i, 1, fmtSyntaxChar); } else { processDefaultText(i, text); } } break; case '=': if (state == ExpectEqual) { state = ExpectAttributeValue; setFormat(i, 1, fmtOther); } else { processDefaultText(i, text); } break; case '\'': case '\"': if (state == ExpectAttributeValue) { // search attribute value QRegExp expression(EXPR_ATTRIBUTE_VALUE); pos = expression.indexIn(text, i); if (pos == i) // attribute value found ? { const int iLength = expression.matchedLength(); setFormat(i, 1, fmtOther); setFormat(i + 1, iLength - 2, fmtAttributeValue); setFormat(i + iLength - 1, 1, fmtOther); i += iLength - 1; // skip attribute value state = ExpectAttributeOrEndOfElement; } else { processDefaultText(i, text); } } else { processDefaultText(i, text); } break; case '!': if (state == ExpectElementNameOrSlash) { // search comment QRegExp expression(EXPR_COMMENT); pos = expression.indexIn(text, i - 1); if (pos == i - 1) // comment found ? { const int iLength = expression.matchedLength(); setFormat(pos, 4, fmtSyntaxChar); setFormat(pos + 4, iLength - 7, fmtComment); setFormat(iLength - 3, 3, fmtSyntaxChar); i += iLength - 2; // skip comment state = NoState; brackets--; } else { // Try find multiline comment QRegExp expression(EXPR_COMMENT_BEGIN); // search comment start pos = expression.indexIn(text, i - 1); //if (pos == i - 1) // comment found ? if (pos >= i - 1) { setFormat(i, 3, fmtSyntaxChar); setFormat(i + 3, text.length() - i - 3, fmtComment); setCurrentBlockState(InComment); return; } else { processDefaultText(i, text); } } } else { processDefaultText(i, text); } break; default: const int iLength = processDefaultText(i, text); if (iLength > 0) i += iLength - 1; break; } } if (state == ExpectAttributeOrEndOfElement) { setCurrentBlockState(InElement); } } int XmlHighlighter::processDefaultText(int i, const QString& text) { // length of matched text int iLength = 0; switch(state) { case ExpectElementNameOrSlash: case ExpectElementName: { // search element name QRegExp expression(EXPR_NAME); const int pos = expression.indexIn(text, i); if (pos == i) // found ? { iLength = expression.matchedLength(); setFormat(pos, iLength, fmtElementName); state = ExpectAttributeOrEndOfElement; } else { setFormat(i, 1, fmtOther); } } break; case ExpectAttributeOrEndOfElement: { // search attribute name QRegExp expression(EXPR_NAME); const int pos = expression.indexIn(text, i); if (pos == i) // found ? { iLength = expression.matchedLength(); setFormat(pos, iLength, fmtAttributeName); state = ExpectEqual; } else { setFormat(i, 1, fmtOther); } } break; default: setFormat(i, 1, fmtOther); break; } return iLength; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nixnote2-2.0.2/xml/xmlhighlighter.h�����������������������������������������������������������������0000664�0000000�0000000�00000004132�13156041044�0017247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/**************************************************************************** ** ** Copyright (C) 2006 J-P Nurmi. All rights reserved. ** ** The used XML syntax highlighting principles have been adapted from ** KXESyntaxHighlighter, which is part of KXML Editor 1.1.4, ** (C) 2003 by The KXMLEditor Team (http://kxmleditor.sourceforge.net). ** ** This file may be used under the terms of the GPL Version 2, June 1991. ** For details, see http://www.gnu.org/licenses/gpl.html ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #ifndef XMLHIGHLIGHTER_H #define XMLHIGHLIGHTER_H #include <QSyntaxHighlighter> #include <QTextCharFormat> #include <QColor> #include <QTextEdit> class XmlHighlighter : public QSyntaxHighlighter { public: XmlHighlighter(QObject* parent); XmlHighlighter(QTextDocument* parent); XmlHighlighter(QTextEdit* parent); ~XmlHighlighter(); enum HighlightType { SyntaxChar, ElementName, Comment, AttributeName, AttributeValue, Error, Other }; void setHighlightColor(HighlightType type, QColor color, bool foreground = true); void setHighlightFormat(HighlightType type, QTextCharFormat format); protected: void highlightBlock(const QString& rstrText); int processDefaultText(int i, const QString& rstrText); private: void init(); QTextCharFormat fmtSyntaxChar; QTextCharFormat fmtElementName; QTextCharFormat fmtComment; QTextCharFormat fmtAttributeName; QTextCharFormat fmtAttributeValue; QTextCharFormat fmtError; QTextCharFormat fmtOther; enum ParsingState { NoState = 0, ExpectElementNameOrSlash, ExpectElementName, ExpectAttributeOrEndOfElement, ExpectEqual, ExpectAttributeValue }; enum BlockState { NoBlock = -1, InComment, InElement }; ParsingState state; }; #endif // XMLHIGHLIGHTER_H ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������