From 3fe920463b4c6a43f66a7b7c51d71184703d30ba Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com> Date: Mon, 23 Sep 2013 15:40:40 +0200 Subject: [PATCH] Add example of JNI API This example adds a custom class to the project and calls into it with JNI to set a notification message in the status area. Change-Id: I74d7a87c0511b98608422788c1c282e9af57c074 Reviewed-by: Christian Stromme <christian.stromme@digia.com> --- examples/androidextras/androidextras.pro | 5 + .../android-sources/AndroidManifest.xml | 38 +++++++ .../notification/NotificationClient.java | 71 ++++++++++++ .../notification/androidjnibindings.cpp | 68 +++++++++++ .../notification/androidjnibindings.h | 61 ++++++++++ .../notification/images/happy.png | Bin 0 -> 2804 bytes .../androidextras/notification/images/sad.png | Bin 0 -> 2447 bytes examples/androidextras/notification/main.cpp | 62 ++++++++++ examples/androidextras/notification/main.qrc | 7 ++ .../notification/notification.pro | 24 ++++ .../notification/notificationclient.cpp | 74 ++++++++++++ .../notification/notificationclient.h | 67 +++++++++++ .../androidextras/notification/qml/main.qml | 106 ++++++++++++++++++ examples/examples.pro | 2 + src/androidextras/doc/images/notification.png | Bin 0 -> 26373 bytes .../doc/qtandroidextras.qdocconf | 2 +- 16 files changed, 586 insertions(+), 1 deletion(-) create mode 100644 examples/androidextras/androidextras.pro create mode 100644 examples/androidextras/notification/android-sources/AndroidManifest.xml create mode 100644 examples/androidextras/notification/android-sources/src/org/qtproject/example/notification/NotificationClient.java create mode 100644 examples/androidextras/notification/androidjnibindings.cpp create mode 100644 examples/androidextras/notification/androidjnibindings.h create mode 100644 examples/androidextras/notification/images/happy.png create mode 100644 examples/androidextras/notification/images/sad.png create mode 100644 examples/androidextras/notification/main.cpp create mode 100644 examples/androidextras/notification/main.qrc create mode 100644 examples/androidextras/notification/notification.pro create mode 100644 examples/androidextras/notification/notificationclient.cpp create mode 100644 examples/androidextras/notification/notificationclient.h create mode 100644 examples/androidextras/notification/qml/main.qml create mode 100644 examples/examples.pro create mode 100644 src/androidextras/doc/images/notification.png diff --git a/examples/androidextras/androidextras.pro b/examples/androidextras/androidextras.pro new file mode 100644 index 0000000..31640ad --- /dev/null +++ b/examples/androidextras/androidextras.pro @@ -0,0 +1,5 @@ +TEMPLATE = subdirs +android { + SUBDIRS += notification + EXAMPLE_FILES += notification +} diff --git a/examples/androidextras/notification/android-sources/AndroidManifest.xml b/examples/androidextras/notification/android-sources/AndroidManifest.xml new file mode 100644 index 0000000..a7f10eb --- /dev/null +++ b/examples/androidextras/notification/android-sources/AndroidManifest.xml @@ -0,0 +1,38 @@ +<?xml version='1.0' encoding='utf-8'?> +<manifest android:versionCode="1" package="org.qtproject.example" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0"> + <application android:icon="@drawable/icon" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="@string/app_name"> + <activity android:name="org.qtproject.example.notification.NotificationClient" android:label="@string/app_name" android:screenOrientation="unspecified" android:configChanges="orientation|locale|fontScale|keyboard|keyboardHidden|navigation"> + <intent-filter> + <action android:name="android.intent.action.MAIN"/> + <category android:name="android.intent.category.LAUNCHER"/> + </intent-filter> + <meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/> + <meta-data android:name="android.app.repository" android:value="@string/repository"/> + <meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/> + <meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/> + <meta-data android:name="android.app.lib_name" android:value="@string/app_lib_name"/> + <!-- Deploy Qt libs as part of package --> + <meta-data android:name="android.app.bundle_local_qt_libs" android:value="1"/> + <meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/> + <meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/> + <!-- Run with local libs --> + <meta-data android:name="android.app.use_local_qt_libs" android:value="1"/> + <meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/> + <meta-data android:name="android.app.load_local_libs" android:value="@string/local_libs"/> + <meta-data android:name="android.app.load_local_jars" android:value="@string/local_jars"/> + <meta-data android:name="android.app.static_init_classes" android:value="@string/init_classes"/> + <!-- Messages maps --> + <meta-data android:name="android.app.ministro_not_found_msg" android:value="@string/ministro_not_found_msg"/> + <meta-data android:name="android.app.ministro_needed_msg" android:value="@string/ministro_needed_msg"/> + <meta-data android:name="android.app.fatal_error_msg" android:value="@string/fatal_error_msg"/> + <!-- Messages maps --> + <!-- Splash screen --> + <meta-data android:name="android.app.splash_screen" android:resource="@layout/splash"/> + <!-- Splash screen --> + </activity> + </application> + <!-- %%INSERT_USES_SDK%% --> + <supports-screens android:normalScreens="true" android:anyDensity="true" android:smallScreens="true" android:largeScreens="true"/> + <uses-permission android:name="android.permission.INTERNET"/> + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> +</manifest> diff --git a/examples/androidextras/notification/android-sources/src/org/qtproject/example/notification/NotificationClient.java b/examples/androidextras/notification/android-sources/src/org/qtproject/example/notification/NotificationClient.java new file mode 100644 index 0000000..9901fda --- /dev/null +++ b/examples/androidextras/notification/android-sources/src/org/qtproject/example/notification/NotificationClient.java @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWinExtras module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +package org.qtproject.example.notification; + +import android.app.Notification; +import android.app.NotificationManager; +import android.content.Context; + +public class NotificationClient extends org.qtproject.qt5.android.bindings.QtActivity +{ + private static NotificationManager m_notificationManager; + private static Notification.Builder m_builder; + private static NotificationClient m_instance; + + public NotificationClient() + { + m_instance = this; + } + + public static void notify(String s) + { + if (m_notificationManager == null) { + m_notificationManager = (NotificationManager)m_instance.getSystemService(Context.NOTIFICATION_SERVICE); + m_builder = new Notification.Builder(m_instance); + m_builder.setSmallIcon(R.drawable.icon); + m_builder.setContentTitle("A message from Qt!"); + } + + m_builder.setContentText(s); + m_notificationManager.notify(1, m_builder.build()); + } +} diff --git a/examples/androidextras/notification/androidjnibindings.cpp b/examples/androidextras/notification/androidjnibindings.cpp new file mode 100644 index 0000000..98280c2 --- /dev/null +++ b/examples/androidextras/notification/androidjnibindings.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWinExtras module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "androidjnibindings.h" + +jint JNICALL JNI_OnLoad(JavaVM *vm, void *) +{ + JNIEnv *env; + if (vm->GetEnv(reinterpret_cast<void **>(&env), JNI_VERSION_1_4) != JNI_OK) { + qFatal("Couldn't initialize environment!"); + return -1; + } + + AndroidJNIBindings::detectNotificationClientClass(env); + + return JNI_VERSION_1_4; +} + +jclass AndroidJNIBindings::m_notificationClientClass = 0; +void AndroidJNIBindings::detectNotificationClientClass(JNIEnv *environment) +{ + jclass clazz = environment->FindClass("org/qtproject/example/notification/NotificationClient"); + if (clazz == 0) { + environment->ExceptionDescribe(); + environment->ExceptionClear(); + return; + } + + m_notificationClientClass = reinterpret_cast<jclass>(environment->NewGlobalRef(clazz)); +} diff --git a/examples/androidextras/notification/androidjnibindings.h b/examples/androidextras/notification/androidjnibindings.h new file mode 100644 index 0000000..64cca54 --- /dev/null +++ b/examples/androidextras/notification/androidjnibindings.h @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWinExtras module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ANDROIDJNIBINDINGS_H +#define ANDROIDJNIBINDINGS_H + +#include <QtAndroidExtras/QJNIObject> + +class AndroidJNIBindings +{ +public: + static jclass notificationClientClass() + { + return m_notificationClientClass; + } + + static void detectNotificationClientClass(JNIEnv *environment); + +private: + static jclass m_notificationClientClass; +}; + +#endif // ANDROIDJNIBINDINGS_H diff --git a/examples/androidextras/notification/images/happy.png b/examples/androidextras/notification/images/happy.png new file mode 100644 index 0000000000000000000000000000000000000000..d1c146090dc00c4e90f38895afd71dbc44d93bff GIT binary patch literal 2804 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 GLSTY_em*t; literal 0 HcmV?d00001 diff --git a/examples/androidextras/notification/images/sad.png b/examples/androidextras/notification/images/sad.png new file mode 100644 index 0000000000000000000000000000000000000000..00026bd23bcf64bda06d1ae4196bb8321bef4e29 GIT binary patch literal 2447 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 N002ovPDHLkV1j3=mi7Pu literal 0 HcmV?d00001 diff --git a/examples/androidextras/notification/main.cpp b/examples/androidextras/notification/main.cpp new file mode 100644 index 0000000..8ed8d30 --- /dev/null +++ b/examples/androidextras/notification/main.cpp @@ -0,0 +1,62 @@ + +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWinExtras module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include <QtQuick> + +#include "notificationclient.h" + +int main(int argc, char **argv) +{ + QGuiApplication app(argc, argv); + + QQuickView view; + + NotificationClient *notificationClient = new NotificationClient(&view); + view.engine()->rootContext()->setContextProperty(QLatin1String("notificationClient"), + notificationClient); + view.setResizeMode(QQuickView::SizeRootObjectToView); + view.setSource(QUrl(QStringLiteral("qrc:/qml/main.qml"))); + view.show(); + + return app.exec(); +} diff --git a/examples/androidextras/notification/main.qrc b/examples/androidextras/notification/main.qrc new file mode 100644 index 0000000..10190c9 --- /dev/null +++ b/examples/androidextras/notification/main.qrc @@ -0,0 +1,7 @@ +<RCC> + <qresource prefix="/"> + <file>qml/main.qml</file> + <file>images/happy.png</file> + <file>images/sad.png</file> + </qresource> +</RCC> diff --git a/examples/androidextras/notification/notification.pro b/examples/androidextras/notification/notification.pro new file mode 100644 index 0000000..9d57ca3 --- /dev/null +++ b/examples/androidextras/notification/notification.pro @@ -0,0 +1,24 @@ +QT += quick androidextras + +ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources +ANDROID_PACKAGE = org.qtproject.example.notification +ANDROID_MINIMUM_VERSION = 16 +ANDROID_TARGET_VERSION = 16 +ANDROID_APP_NAME = Qt Notifier + +SOURCES += \ + main.cpp \ + notificationclient.cpp \ + androidjnibindings.cpp + +OTHER_FILES += \ + qml/main.qml \ + android-sources/src/org/qtproject/example/notification/NotificationClient.java \ + android-sources/AndroidManifest.xml + +RESOURCES += \ + main.qrc + +HEADERS += \ + notificationclient.h \ + androidjnibindings.h diff --git a/examples/androidextras/notification/notificationclient.cpp b/examples/androidextras/notification/notificationclient.cpp new file mode 100644 index 0000000..d9cbf84 --- /dev/null +++ b/examples/androidextras/notification/notificationclient.cpp @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWinExtras module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "notificationclient.h" +#include "androidjnibindings.h" + +#include <QtAndroidExtras/QJNIObject> + +NotificationClient::NotificationClient(QObject *parent) + : QObject(parent) +{ + connect(this, SIGNAL(notificationChanged()), this, SLOT(updateAndroidNotification())); +} + +void NotificationClient::setNotification(const QString ¬ification) +{ + if (m_notification == notification) + return; + + m_notification = notification; + emit notificationChanged(); +} + +QString NotificationClient::notification() const +{ + return m_notification; +} + +void NotificationClient::updateAndroidNotification() +{ + QJNIObject javaNotification = QJNIObject::fromString(m_notification); + QJNIObject::callStaticMethod<void>(AndroidJNIBindings::notificationClientClass(), + "notify", + "(Ljava/lang/String;)V", + javaNotification.object<jstring>()); +} diff --git a/examples/androidextras/notification/notificationclient.h b/examples/androidextras/notification/notificationclient.h new file mode 100644 index 0000000..6b48fc7 --- /dev/null +++ b/examples/androidextras/notification/notificationclient.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWinExtras module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef NOTIFICATIONCLIENT_H +#define NOTIFICATIONCLIENT_H + +#include <QObject> + +class NotificationClient : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString notification READ notification WRITE setNotification NOTIFY notificationChanged) +public: + explicit NotificationClient(QObject *parent = 0); + + void setNotification(const QString ¬ification); + QString notification() const; + +signals: + void notificationChanged(); + +private slots: + void updateAndroidNotification(); + +private: + QString m_notification; +}; + +#endif // NOTIFICATIONCLIENT_H diff --git a/examples/androidextras/notification/qml/main.qml b/examples/androidextras/notification/qml/main.qml new file mode 100644 index 0000000..e265f1b --- /dev/null +++ b/examples/androidextras/notification/qml/main.qml @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWinExtras module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + width: 500 + height: 500 + color: "white" + + Column { + anchors.fill: parent + spacing: (height - happyButton.height - sadButton.height - title.height) / 3 + + Text { + id: title + color: "black" + font.pixelSize: parent.width / 20 + text: "How are you feeling?" + width: parent.width + horizontalAlignment: Text.AlignHCenter + } + + Image { + id: happyButton + height: parent.height / 5 + fillMode: Image.PreserveAspectFit + source: "../images/happy.png" + anchors.horizontalCenter: parent.horizontalCenter + smooth: true + + Behavior on scale { + PropertyAnimation { + duration: 100 + } + } + + MouseArea { + anchors.fill: parent + onClicked: notificationClient.notification = "User is happy!" + onPressed: happyButton.scale = 0.9 + onReleased: happyButton.scale = 1.0 + } + } + + Image { + id: sadButton + height: parent.height / 5 + fillMode: Image.PreserveAspectFit + source: "../images/sad.png" + anchors.horizontalCenter: parent.horizontalCenter + smooth: true + + Behavior on scale { + PropertyAnimation { + duration: 100 + } + } + + MouseArea { + anchors.fill: parent + onClicked: notificationClient.notification = "User is sad :(" + onPressed: sadButton.scale = 0.9 + onReleased: sadButton.scale = 1.0 + } + } + } +} diff --git a/examples/examples.pro b/examples/examples.pro new file mode 100644 index 0000000..467ccc4 --- /dev/null +++ b/examples/examples.pro @@ -0,0 +1,2 @@ +TEMPLATE = subdirs +android:SUBDIRS += androidextras diff --git a/src/androidextras/doc/images/notification.png b/src/androidextras/doc/images/notification.png new file mode 100644 index 0000000000000000000000000000000000000000..4ba7818cc26485aaa57a9adfb229f8fc17fd9200 GIT binary patch literal 26373 zcma%jby$^K_w80uK%|tC6hs81J4HIAySt=2MHIJ!bayC7hXT^wDkZTA0cnu#7Pyn| zKEHdP``7(=&cP$@^X_-AcdjwV9Ahj$C@V^1-zL3{Kp?PXWh7J)h-;q_i0kzj*Wo9u z;`*5I%QaV3X)#1eANdOW2GdDK#}$FVx_9;OHAHeM3H%V<O;$k?eF~Ep2jli@z9muw z;sHWdLR8)B_j;P=OG4Dh(NTKRkdnX(<_m%wGORR`0ztPYKjys-)@mWHrxzkp7G)rw zh{M`_a2(X|n&4VCW{}K-{Xau8GSu((hjQ1?FG^!(BYnisM~_}Dr1vBxmFJ#Y7FUcK zl2OB(|F>V&g3V6wIjgykPfjGIrSFLe>1U|ws;WlE#Jt73jfshQ`*!Ow;}1qArk?KZ zJtxQO`tV|DCgMr!iFc|#PxQvht@`_)p7mIkdsjCybr))VN$0e}5&Qe$ak|$^c7j*B zr_pQ(Yoqp8<CZjf4-&KR`C7LXn&7$daw`LtQRb(kHk|+d{nM?masPMhoYL!|_ZxxW zP0dkAaUmbgQ{dp>aInC#(5cid_NbdOuy3fZ-`(4@&<PI;`Z{ih#M7vFB<oV6ziL&8 zV#EkItIVYLxmXJ$s(W>QDtvJ~e|~y^g^lfZIBw;CexRjP$w3-M#_O;?Qk*hitxhbE z*4NtF%Al50q*t{`syG=*Eq?dz-P6MjG9seGF|&yCljRI-hcfGd%;j|7K68%zEp*xF zpWWR?uTB;<3N>4Xu1}(v^eUOy*nYLeVN&ZBR~poLqzlIJ63OL%`Lb2F)mZ1Tp(`7W zCq^2UV>?<BLc|RBD%5ZE_LI+zc89^wvSyv3AA*B#V_~^Ez6tyih5t~hNV`<*%jiR- z<`+Z1<870=sXt{F-O`lav~+Y!rCpSJ`s;tZ=EIOkWL{q0uV25U?r&R`pY$YgDx~m8 zVw@k08o^us?CrH5DH^}0B!qwOUb)NS&)K%Xi2IzkC`o2E-{H}8mo4jN(f{1AVay($ znD8CWQ|St)P$RC@FPW<I#3ko*+FR<49h`XRAs&bm78cgvwldiA7QH`}KPD=Q-S2dN zsW-*9%>HO|Dk+{>r_6kJ;m78es2?$pJ=aE<xw%n$OE_daOpJ_-yu6-Ue;RU?GWx!M zPZacYFgG_p*IPL_{r2tK%*;%03NPGKPEnEkxy|oyFS4Y<bW2S;{tjgIrwJZy`CpQy z-=8Vz6c4N37)VhPIUhDyQ4bCdHuT-7=oh)1oOPPKRqDGxAZ`2GC*3Y@!1{1~{4Ji( z*+!Mf@yy%gC-5mgs`PH43biU84dp61Iu*Vc%DIV-o|~O5y!-tjcauSdO<Ysc<zV*n zY47E<qiO$351j*qleqb2UxcWd9QLiY1fy3vqbjtI9_cW}+k`(9ELr0h*vz3s{X5y? z4;OTvlPH$+>`vsiB@)Zit8#EJ-iB)FE-M;cGcz@vNxHUaSUOMoW5dQuQc}`Dkt;hE zFFH9{w|8BcphM%Wl=mEODes6imtwlmeQGYB{l61l==*D<5#ybY9z8lJs<fY|{3IS2 zPATlOIa#wkhVXpo*m#oTYh}?EkJB|pB=TPMr?dX~riTLc#cJV~#?#fpl+8{<vLapt zb!>Y2AMIHYukDY9UoQPGw=Us|23DMzSy}jEn+;PHt*ZCP?p$7Lrs#%ewiTa~+-oU{ z7Z4C&`0B($g+OC=p3k8>o;eVQqIRqCj6gEqvKpoSOfG*pd_#e_Zg082Fo`35sL{_? z6z}EBmnBX2Q+Vuswp-B22<n1@Fx<L_!VxpKT&j>M?42HUe(+=gAL1>%C##(o7Z+ny zvj)8W9q;hFF2Sc&!b94ecd)awtEi};)>}e|S$!OyPf3)n4d>qzqvzyQGvF|8eoe%z zi-v}#T|6>5IVo~+oW(L4tur51_G2yc<A1(dP^U**5qPI_A*@%+?t~^f!`J5;a?5No zZ(%|&%Tq~cN5a%}&UdS!3RV>=87si)czd?OcC@p-{pIm&;N}vg+23EESR3}EZ6-}Z z8M5Ky>s33=ZV(GPIyxeiU%X%tvtIZfC35-CRbfXLfXwzwgXTurR475p>3w0JZx1j! zIy#Cf5KfOd9skr*i@*1>zO5|BO{%cmmo`3w6#Q9z1~=FEZ?}7^>GGoC=ucMcty{Ok z?{h8{SN$pAQ4OH(E}L@jq+*d`uo(YN**Y~mZ-NagH<Zk63pH=qn~Z{j`2PJnY<oZ$ zhF}i&)#09=9-H|o2Vr<3(ijbgzilHuuTP!?W&U;ITMxT7Wx~J^t6HpC=X<m{JUkrt zL@Qm$8+K|;3a=v(+8gX=c?Yufed5(CW@Z^LcV*L;yF%}mzdUhqH&ImVt94(4YT@MI zNanGxHEs#eGW1^bNIL?^dxu1l3wdn=vb{yetk$d6iw?B4k8Uw0;de22apCB429&et zV{l!e&wd`yG!D>(?RcV~^ljGr6~N4<TyAty()cHFbmT9%6-O=JzsEcC8D4XkxkD#2 zZ*g1qZXkHcc<4NTeH3M2V8|;_dxs~6VRGLib`ZWU&d+SQlF14^c@5TCj2i2G4pwU$ zg<t*Sd!l&|;s0-bB;)7|)_1R8L>dE|Qs|f`{2tot&fjifi+!al`#$IE<K=t1yQ{<; zDZM=A-|@nvvYsZ&;}P;Ea{Lj!Y6*I4Mkasiy`LwrPzd|%XG(@REPCT&V_SI3-lLP3 zk(WnGV^r($z4}+p)J+-g|1ow~$Uktu^Y_MKgYQv^LEVVB;EUd5Zkrv!LR4}_hEeg` zR@2f+eA6z8s+PV$$EI_SmBDQL-`{HD9#5HbWM^knBjcHL%IwC=Ivt)uneXrK+sJzF z?CeBEMNL%N*O~ITPR_Kvt#X{+Gz`h~zr09FO0sc@RLor){W1*&x_Zi7K0cWx9pSO@ zn?mH(OQ^M?GubbrM*yK_UEz-vQ{kT71k&8?9k@vA+}B2GT$f=7r3rc#SQwz+A(^@O zwk_1;x~%BvxCNJB7ynpaU;pvr1K4(W$VR`jvUf;4_d<9%kL^g2?mz0skC$Nup`pfD z)ck(ZZpQ=Q?ss`{P89NpkFOeb7SpqsgoK2Yl<w0O_RjOOBTq+?Y&YmE0Q6Rbp7hxX ztVS#h3^mYArZv|`ige1MuIow{KYaL*PDT_v81eK}=G^sUcd<gMZ4;yP2@{h9hPSsj zs)>|ST7hn;SZD>V#Yq|_D=W*|^lz8j?xF>q%G|;tjGTYaZ?=odpBx{5mc`@7tvkoZ z^AQQmdP@%9`cioN7hMiECK4o{z^8k9zCYyC?f~uW=FOXD&}8;{d7(Z1Y4Z1%TY;{& z;c*sDA!z7#fb#s~z5FSVvf%m3#p&7?ST^X4u(0#cU;WpLs}hUPce<#kp1#!9kcB-4 z4+mDTH(mJb*C%ljGgj6wP)(QcT29Lzul3R{Jh3vSqm79pc$`J6tFX3|{{MFVH27xl zyGq67`kfu73Hy3L>0x|=AJ$pj>PhA<RLXb?<Um$Y(P5&p_*A^Kv~*x#0G{hr!T0Y` z`Rxz9xq&`BdL!Fyw8Q}Vqgw=}@EGpN*;$nh$_APt<%lZUCKpvbOWR-4#s;-XZA$^z zy!sP6(?W^ak<f|C-v<XekrNXUjX?3<d#w2N5kL!fk~~T%1elvCbndqI*o8}<umZL> z>$b{v(GK=T^c)wLmm^5IZ&QEs+L>!_Zyy^QgFR=2ho%{9*%EN`>~LdkAWOP<el^`^ zl|h97<z-#vFtya5(PY+zqZ41DyV3d%t3O>>&prllP0PqH&d*^Wv!gSNOyu9Tc*PeX zetz%S)^||KYNJX@N*Np$a=lo(+S<qaLrVUa=SOxQA|ha6{3iD>C;hEq#bW3blG#kI zm$O^-rRwPG>)U5+itJCi_BWg#P8`*bnS^?$I}Yznj<Jm}(>-|b(R*)cbH`aOzt_^t zQ(Z<zW++EtYNG$n33MJBWNTYnTWf2<1{*7D#LaWZ@-cSSFRsgdJ!g5g701V3hjx?6 zLk*@K!9Xo7tgO1ax{UVhKMkz_G9NC)C>5CUzWR5308K5GPsKnQ_95&RcwW#)fv~C# z#oZLuhMq#^SiduFm0{5MvgU&76pG0IcozLoC*FdN2wFp39jmg^XmBR|rU~-uSzrF! zOCR-=mzDh#TWNy|My>3Ur!Nz;8VbRd%y@PBf&1zPp}pUF`)TB$ShMgkt7IIY{Vn15 zzRy;!U%%cNdS6W`G;@g#x<EsW^mmW75qo${9(4wO`}EncpL};Zh}k<~&v?OBAe1zj zHVu6wt6SwjQJBPKH}=*4VlTsv<bDCE=uR*1^uMjki><V|P7c`;X+I<14Q}MG!;J~Y zmYR#BrpxnTH6;yob+^C2W(DeupeD~ch>hyuF%(!-ng6(Z#NiJ$CJ%_jM}9RT2zqWd zT^z6;6h=o!e`&fn4WxSI1+94PGH!j{?qF{|LL?lo)@vt|sar9(9CiqRB7m~Y^XG+y z`mMW*-Cbd1RVHok0oFFgO6TV~LTvKYb>h)+DSK4?@x-LV$@%>+UUE0h3`kQEN;*$B z`W<{@qo@CypPOzP{gXpXhiTHX+?kvhAHT)08>-+8p5Pz9BLh$3vy97sk30FexV}Lv zvk`iO7abYdylc$fDd@3o>?{>N56j9$ssM#&2qOi+`e8b89njfPL*L^1`pG?ob&s<& zCJ(#n!n3TdQ*BiLD%q59=VD`V9r1Tn4bs`jDfLo8mjw*5yquJI2O8nC^>U0)wTvfI z&tUWb)S<An7~YR2eeQDgwL4a7hA#%~htFl<d-n5$$+)@MKq||fVc78B;F)epVRs&v z_dlKYeg*u5(gv`?-l`{Y2cAW~hfc0y+Iw88KR|TUaurb(akR3qkOt+J3V_<Yj(`5O z;fip*7?fxzO@`l<1OxV?2F9TG19(C4?)~xI0_gs7LFD7@UEw&LzVR96fdcA$l+7r- zK;&{y1mlxtv2Kz)-H|n2`2|c;V&dWobTKW)*3*p*KIpLXb?r&W+=B3IMoXsPy71xy z0L8TfpZ@7(PgW$J*26b<3MS0P+5LX>^t{}t7`=ibXe-H2zRFb62Zy=Gl0Jw11Jf2U z^4ASqp<j7o+wKh?fp*5T7@RJpI9>oQ!0fq>#aeI7lY$~NH8rJq_z-Gqvc}bl$MUT4 zY|~6K4^{mqmO%~Pees7cpMbz=ZpJGhHl*dzBsSh(0N6A5oaZ7$F7j;mfbfQ6<D4{I zo;AVbaI`g@@yLV4u)f-|r{vqW*!%iCDZMdKtt%@l6+|ICBzLY*IA1LnItx5IkIhL2 zm_TjEO-u76w|x&*4}Lt(fIal)!wlSwZDSbJWF~1J09_jl9Z<jMxL?nNy_Xk;rjjNn zKhG5vF&!pek^hZ}D&2pt0Nm{OY=DVQ-H=_E&5FeVM)RI43%aIs1Z8$C9WCwEh;#9~ zIDMMk_i+6KaPK>JxJd4xR(pC<`CVZ;V@U|XHk&NBidb#Qe}9z3X~p9(c?=MaqLScD zl7~%b2uv2b-gq>0q}qs*I-q|Bu5$LUS%4m|W>CF4{xo1+ByvAUH8~|EB__sI+=d1& zz4Qj1(rfp}<IBB_%i(feMa6JnJ2yNFCVI;O9raQR-6q}@iT;{WjyyN4T*niGajm|p z%2Q0N6`E^sNXWf=_gr0EbSv#Z0Z@u};IJ8{KjKg>xQ7(_KCl-_A?WcHclss3(ez8T z%b)Np_nr6xGwF?>E5mN9^x84iiJ!v413X*>Ahoz*s?E06{N@G##3nl*(GNK}In_N* znBjeaZY?aBAGyDRso0`B-Vc7+j5r6vsa32Smyxlxyi80?>^a+dGjwNrwhd}#g>vo$ z>eC4JH9UiIJd(9k4dFB?jnKSh{-WgxNf_S^>tSiyV30XbU-3FXX`wz#Dy`!4ljC>< zPEKqKZOzXQ<*6zPq;2Ae<oTF-Fx}EplKAqw>hH+s^si;flz*HaN{6olf2*2))xDaQ z*Buibo$kGqq`PKOhAy5pz*X&PWHfzi)Lht)#7wE+jn5$S-}(8rJ7F3A7v3NjJkcyN zCT%~w1hh()r_)%uA{M~8aLIVq0R{GUcAOnIpx97ei=p>9dF+2Luy}l_-<7koTfYKZ zRO|#i>EV2}<^GJz<qZG$goLx>W6%zkVf{$MEMdXK-``OY48j+KhUmdZ4(+^rVnZs6 zU07I{n)=O@Fo-Zf09P9_N7rCq77SPqljs<rZ(iKuAh`p7An14ct=1f{9|&4mRTXa? z@8RauniJnJzjs4J!}t<u7#$0X;?(xlkT0|s`upw?3%(pfh*zzZDdp3bW7E@3fG`z` zO78t=>mWY?;{Np}!7*F+cI>o&6ZfKQVxz#Kc`kaj3Ma5_$|2H1$8S$IdcldW;Qq5P zACqa-$095&C9p$4*D)<ked<@+(vJ1<6`&FdA0L~s8f8<VTkJIW-wI=h>Xa7j_>pTM zccJ3}>d!DC5KjGVEer_6jHAi8irg2LJtThS-=F@YGxytcZX#y-?g=u`{4{aV^($g2 z4%xolI-IvG$irLlf&11ehEN24F+oG&@_{G`HL|c#G)P&KhoJjzw1JEZ^^Xq{k2TF{ zYa`926$ObXWZb^`NBw=4d9N;2#=}HI!|@rmUw8tiBJ~}jCkVuMg|a;30X@4vJSxj# z<YEN2H%ru9)y^#G{2i}7lpqK$_<5=3Vj+cl=pXy_W-N_7rX+?d`Jhd{W=IrqAxu1C z5-nvi7MR_4<J#pI2-0L+XjCN1us*OXe0z{fI9@!aB5J@>B%}4}7H_9+yAZ2@LC}rT z8;BX3?!MU#JZu^@f^_kymRb*IDG}E6-dPm}*I3g~+dhdbIjZcS`LA_U&lxhm4L)AF z*@LAWNH0d7U6d(A7poe8*Md}*?PMWy(aCQMPSso}dpIEZ=&{G|$f5W8Je6oF0rVy@ z5l%tBk{R=O@N#snBR<xSeYk~hLihZ8-u&-QQoo+Kdum_#5w>wP0_s}@k4VgrY^|%b zj)|(lh2-*-W<RNs^h%LZ(h8P1?~L{N-`;wJR=57$@Xb2WYF;xAmiu@qt?3U*+Q;z{ zG=il}4|P75Aqg;l(5MnfFi5dA-9;cOf+=PRk^B-Efu#va5qCy*$t_jgvn(^~=l&Ts zRLMP#Ym4iA*h)anlYrOx-B{`tC(bhxlVJKB<j=c=6yGhRGlQP=3Jbdbh9`$3c$Y#u z3WJ*OG4`np0+C1UQNU*HMX-=NfT^z#ReN)oE=Yq4LoAUd6pi_@b^bu^;6)Yzbufk~ z(zrlbQZ)L;^Sh@fp6!@U7S|AYEFN*mt$Sk=&93CN4Lc>e1Vl!U-aCZQizUwEiv`^c zW#jfSNyF6Y<pfcBhQ;G=aB!X)#~+hxuk=&s40RM4I>>FgJIMoH48XM%*6AAt3xlic z*nhjnajD4&UPFAOF0H%uH!g}OuEtYCoK5IZ)sfG5{2D?zh0NEUR9d67Es-PN46_pr zUyLC;_CaN;#Yd;OBzj)G1Ga!f3ealh*9(~FL)i(v`W{8Max5>p5C?|!-Z0Bbk>FuJ zOL4n}{3@pJQB&Wlp>Ee-86+92ii4#;)mBrmSoiBUjR!B|<68&>UY&qNkg6Pm#rX~7 zuS^$)@@5U)mOx+Wqu`AZMyAFO49)%PW`m^P>Tf-ih@@du%r$kDA++cV5Ym$iU$jel zXhh9Xu&!3k_zBlc9;1cCq<uG<A)gCXl1HYcq#aHZ9@u>w(d-_SmNIA}_aaF{@ki+* zF|~++e1BevFzC^tHiRows=0(gkrD=v!Y5za>Xsb5)I9kib|(2QDAv?HPYU%KTY}z0 zwte%#ZEA&caW~yCF^Lb=w34(kpOC*8KNYQXiaD-h2db{R)JUkblce-ovK7AZ)mc}c z$1;<^U}j8E`mD=BlzAM9qvS?<>Xc#_b@2&<+VUMLmRbz6Ri^p(12emi)CKuR=d(-k zRw4H|yTj|u$*3hzf?^n5CYisAUTXQIt99R}T%G>%;@MXTgEAW3_U@Yay^~6=&^69Y zq4q@=lh6uX=1KGeBOhoY(5((uh5}W87wK^7#5+31(8@;Bewbnlcwo(ye0q@Zp+YKa z)|>6@ve7F!r^OtDx&TkzG%A8luiyOp5%&wh{QkeWwL;`8#6KMv!spd*Y!_tA@=1)l zw3__UqWVqub^3;h64&0E4PHHeJHFWDmR5qq;4Zn<Ai1Kgvg>r9K;Y96VHk21y4<j+ z?k}ODN3yJjhwd^UBd;W|x42IuX)!n7p0b|9#0zuR+5XB9OyRjh-oA08-Q8;&Rnv`5 zvtl5f8XEoqy7Z8S<~wRi6^VD$9n5an^y*4@z}z={Gsf)|sNvVl^O!$vmd~~2{uHf; z{+BK)n*r2wN4nU&0PV%dyMgA+-}L30Qk`dAJW4Cnsa-5Y=_T+p$%&GEs#Zwj@fIf( z+sGy@qVR0oqsv@$l$A#l&(0MZg>q3&0&j+Hr^ZXedi97CcTZ3IgG>l)e0y&%Yvy!B zL0LI6BV!t7l~*vd?(e&aR@<BHB!+nd{gei7xRRTJgMsn)KW2l_%VQ@PsWqsxVu1(l zLes?w6rZ}1dD*6JSC^(IxdVzye6S>}4$m38BangYdwcrr@2b^){^qLcXXWuZ#=ZhR zcb+YM7l)|ck{3iIquiASdml++`et(E^pRRGb0ekgRlQ3Vi^MEO9(}@7*JaTfBX~0} zC_TMp#%3gYYyVlS&;YZf3gxTg+0<0>G{sTSm)qMVstH%cvIg+P9O~AB@#efQK%)S4 zrTfX3`c_g8P-BRVUX}vmgr7Z!`&Uy{9mCQ94cFVdrQ$|OM;L79U}ldK?XobL$#Z<> zi-A|lL5>exu$DD6tup0m%D0vOoKhrp_i5REzjt~1(EU90AfxBv!2igAkC7qTM#?0V zzo+ZeBN+GZN-?&WM&lRSn9SQhRzF*Ay<Tc5l`1ZklE_IfvWO6%Cy?|81psE6Q<Rob z!`WutL7ioAX0<*GGIGknaiVeqv=?^)3g6?TIxg#9AJc_>f7?|ir<V<_tOJ*adeKSD z|LyQdc6BJXA10smwKctB>}XnNa$cty;6LcM10Doto>i4G38wYIh>uOmC6hIvenv#C zuA(vkb`;3EiM^Jx(dIfOhig13%rrD}QPPwz{?ym>S{8O!y4UF2iK`Gus+dbN2WNIK z(jYMc*x)|K#<VMIGU+qv4_Ah)nqOaA$19NRrO(C*d`M4k4dn!qp&B!5A?i1%h@x+A z$wsRu<jOLDagm@|2$WY#MMFQa)T%%IEjn)FPA3^tWLI+6t0)6Lgf)_^+gUqSw$Fn7 zi_9+1DNe)XC*_Q1lzW>ux5k<jJCY53wzXU0T}CaCpSPb~Tv+O|mVZ0hFX_Md$B_LX z>t{@{&9$Wow8OCN;I2folOKv7V&g;VgMLd+E;}AB@^3Phx{`eoEp$o{ReE0!Gi3OD z_2<u@Pxh9pz)8767q2oPvps!%;laT$sm}qSd<rTI$kH%sXsWBrrwi5O<ynISai#5; zn3w>YL=~qhE>}Cx%RPTCa<UKuRE?03klCPC-JY4+97HSF?^p1U;@Eh#hd^&v%Nod| z>w!@qCM87>^f1q9KVCt>GmuTxv)`zmg5#19AKwSh8s0`nN2gG;*d>BTLRuPZ9++d! zL0%W|SRVtnEeMJ^m<Qs1yW-;FAeGfRPB+5n<^V5(`vw1jyZ;%yyNAaiYzwb+C0W@Y z{r&zYiwPDw7a5l)8K8|Rr1G%~3i^Vm4W_6(k;v)athu>4kS(o2%mk(K%9}{0B_JWu zR#i3SNr5p3{D#BB2}jsBz94Cl%=e`Ug5JiW{dEQk5FD~(K4;Tn6?GMYD<x)orX^V? zp1cbzwFNNx?n$zP2J!W)6F>{dJ1`yc@{Zb6w7R~^6~(}p91!kncH$$ycJ12Jr%$;z zaOLuux>*vQtHj!{zB-h1U?X|tb!E2Jy-n?Qp%213z$X1w5EwB~XZb=&Otz+Q+igIx z&Q3JZ6v-gTPF?%YH2-6Jg~)k(@Hv?k&RK%uFPbWSqH>-GzjF;dI!>-nNQR<?U{9<M zXN<aq+sp$hbriLY*(d5|p__f}vV_f5V8vxKoOk(eS;T!KFiFzr<xU3-?2!oxU1DM| z&0&|D!qm>zshGQWrP1$pvrd5JH@e1<eKo#cf#vsy5g?eMn~_serpLx|fl!Y7^!W9B zHH$&5d@5flsPa8~b9|ey$wB+N&tV?)0As#0Yz@YD2?;b`<+lL=SGWoVp_IfSsS?`} zLhQLZoDUTSPnGGo8pM(-krW&d60^XzowYAbV6A<FG8XE863hX0yEEUFo0Fs2P<2)1 zV3&CO{q<(qn=TFHX=i8WGN!r=G!V)oBO?I{z)Inuqw6#+wXV<&pO;X%gM~%LX8g>{ z%S%%7on|4*nhV6a7h+;!fL35!;E6RhHiE8USmR<LCU$+zhT5>u;D53J(irxjjhybU z=vCUydOu}iS_fwYtf)aSjE<Xc;F?=n-W8JyCE0<J0k2>Yq%IUoAX9g-ZiO!N!QzA! zsBSZwS1W^$L`0gbV493kdb)FX2=atw`Th1qMXb<$n781Qg3kuZceyr`{Ov1gFoLQ- zpcTp%2J1MVVoYjKm<?*(K7@t}fyE2YsL!EbdwbhqsumUycB$Xdl;^=wC9mDM3X(4r zQ`AC}|ETQq=wCseFx=f;VzvmIJFN)>r9DXrjtbf8Ef^1x7}?h&9tM0fQE+=SQkJD- zrFxs?D-QM{!Z?(@b)b=A7fUSR()r|A=SxY863hL)@zxzGk(1`EYjjjNt_6?ioph-T zWP%t*l&DOHz4lV2;>=K+55JjgTr7)Rp7aTBv6Y@(oNd8ie3Hz1-}9xP-<4>vyX%rQ zV9k*P5|$_6iEIqr!TR`+H5cifTd+DHI0Oa;a%Q{M=({fUB!T!9^-y~3Hi#~u%67uK z7i&I=X$6riJ2$u75!7m!^<fCL=1GxMk(ZGft9H&}>b~{1#h5KNA)#rz6$>zX$@|ZW z+m)^g2&7pU=Lh5NQ-C(Z2A|S|i9D68D`WNLj%3V_cFF^AU~;mv^OHiM-c@vT#zB>W z*aTdTGz|2_vT?h&x3CMmXDrLdt+{BB@^mpj%vFcn5<lXJ!OJuY4-O9emXfSM+W<Mn zmWvb|tnNi9ay3xYp}a~q?NJ39VE^y#?n2H1EJ@fjep?MkQemVT+S;%Py_S1a{{K`| zRR=+h)BTb>ZdU>+f`jYq;?2|3RAzP@Nr_>0JSn0pn-ZSU^8}Lo9_u7^)TnnckCpzw z8vsyFgGQR;7OOh4`~eT%qo$^YG^}%~3~ZTq@7^iqs;R`@3QK?A5ze2dNL-`NSR-LG zNLI(YW;}TR2|AztqY!o4!|p@*D8AB(mw3p`2UH4QGo+#yC(8onb(R+jmI?|_{)&at z*XPO8Gu->PuTa<FcHikzyi|dPyI#uOmm!-j%&2bW+NJf*;rvm<ncLb?*SAw+naOUc zmLr?;FW0htPgipH_VysF(Dv#aHaYMw5<VwmVau<X^k5uqe#uEqO$E&G_4O^p0)rDz z3^t!Q2Dj}<Pgj=}7#>W-fji(JVg=yg<G*1C!FnCQ8w6sFY!*hw;LuQL@Oa1@=s0)C zc;vr~7FxQ4<Ot|ZD9N7Eiz~F<3=-F5gBRUPI}s%)11Q4{k2)U*cY!HroZ}e*4?;<~ zSHpP!u#w!cX}fc)4PXj@aNgTeN>=v6l!MlEE!<C5?9#$Qbp&$O`vSxqcr*2_K2TIt z-R;;r*Z=cp?ngsVSBhx@273M&`vud4d})2)#z5ufdtzmC(a->;12pY2X8Y?VP^k=N z#Kwdc9$NT(AA~q!V;3lq9VCEuo8#rV)zxD$(}bjrzHCeEE<ti8r4sbqFYcseZt~h- z+vFmB?M)Ka>0K6-CD;pYFHlQhu>a+E<m|`%Hl~}bA1O+ofA~b`vBZfq_W@P{!MnBq z!>oD!bWMRmt#mX>tf#fcR0dAjw&D`V(%0PS8P*Bi2Vl+=>s2Whq6!>Cp%|S()#{lp zGT133jP25nru7t688yjihXEl7PXIJI)Si;6rJuUGI{1Y-AX#<+Y<>TJ3^E-tv#xom zHkxQN3An<zBLBXE$PLOYG+I5_128iXO3qH2Cd3Xxz6TJnZFH2_Y<+PtyFeV|u%B^H z3LgdK-FwU~;sy;J<<@J?kp>3&@Ad$^LD<!?u>_zpo@0dW0A}b_*kliTRh9M^J@1-z zs&;%N8~ww)U_81&zW>%~S^)(seK&<nZ*HjSZ}7W82Di%as|1cz#sp!26VMx_vYbJk z2fxwky<V~ByXB@QTw_dP7)zzkGbI=A2A(`)ZF;bUXtY7BqC}(!=E|yrZP*{MbFA>O z-mvl%!0HY`nOOb(xvfn=MnXwU5@+D@L7b#+R9ckeVNZa<=p_d(3>m*G3V)bGLufc_ z1tqv{%7G)v;k!0{v8HW>F1&Mp5$DmKH}r_Z*~J8-3-H?K=I6okcLjE_u&@C6BBbzT z850PJOdz3w1#s1t!R1ehjots76~RGuLUnoE75(TrsJ3M=m@PFP{2efxYyV(ZrCS_- zQ?y_u>a4?O_8qZ{t7~CJO;OSM?^`7Qi9i%L+>WNrZ(yNpMJue#Uw3-(;sx}{Vv7eL z)a!iA9hsNJ$o~8p@bvAk$scdPfd0s=S6O7#^puei2!#s7005o=9bq(iFBF&VuKZwu z;6ul!zi58y&l2NDM|LK(Gcz?<iVta>$ffZI*Z9iQpL~gAW=Sz{`CCz2=qdK_pZHvW zc==BbISPxL@iZ|b#>1oq`Ha-a2k-DSKfHdZ{welXr}|gl`7mD49Gi~kuskQa7G1#l zaD<>rcLHk@wH6CAbFUo_?3fX5qTWT97ZtxDvIbvJ$*XR)i`@xS0&YPEj4+He7-oP^ z9~D&!hH!IpGd3u*zbkAZ&!Cv=3i>LiRiA#n7kl|3z8Em#f=>pTnj_y{s99o;{2mX$ zV+3_nQSopgZp{RPj-USo41^-ek&j#g0s_LqX?6Gq>fEHgfH1dkDfQRXmBIUm8!OJs zV@v7fp7sY+-g716%zSgpC<)LQHp0AjBQS7ybLi;f_1=5f_2&9-nP>PEHS^jeX_Nk< zDa86GD$oDPj>}%dqmEXq9Nzt>{F#uiA^dSHAFWkVL*^32{lAN&)GSOw+VXPKr3*)_ z{vs8HJu0H~&b&rx!QAEh`=6et;4Iq<$2V=b&6X4e-@CiRmGE=XC5(jKbRbjmiB`$K zA7Q|!UV&o(JG2<3-gpawdALZt=e(}{7;1s8VDBWrVyx@s=sc7Ph1nVl7nheb4E|5^ z<*<3a21CbEZ9}iwci_PmYjy`50cw;Qez7{EMP9jA?mN)uIo<v$dkTiQKm1zA5IhG| zZu-@ky=?R(nWlZUVb+ZIE1-&&<uyPDHm#HhIzSocI(%g@V$oapaljgqc2o7<uKxa) z$?PBDB_Q%^S7c4y6?t+wyms)>&69&Dq{Eu4V4MPeHD;Tf3CCBex0TKDAf_gG;jIAU zu2ELdU8%$eVt5*PbI}{z%*?@&QqO#_>5u}C2A0b1Rn;ZQzBbGXiNLV_qdt~Vx;CWH z&67H*V){hO*KR!7BY*Ct^B~oIql=`SgN!7j%eaG$(pGz#Qs3iMh#pEhIc<YWQ}`nC z0mej?V?=1Ex_$OqyEPXm-AkbQ57|@%XX1$wNV1cL6_H60bW~SYUxFjsV{1136bxjH zPXI}onVHZn8ZIx+NX!l<z@i7&;CXaAQ&|_KuY7(cG!Cdtbt>o?R?<>Z5IfV2x2Uv- zz88o~)wgiR>>t3k@cu7xJ50Sd%O|kFMoN)|Fp~%ipTn?bLSbKoZvP|t5qZ}J08uG^ zbFEzuJZx}(9RYlBZ{Jq!50%O~0YT)O?gk8sCAG6Ktx07?rM;}ArJ=drdGpT?m3kN_ z6Xod+e*<*|H>XHzLrOTBvZj=TTIUl>lxi?qIu_f>$YPwa1cQdT>X|iKdYdk`bQI0c zXal#}hydj+JIa-c@9nMuABR@GD7t1z#SIuFSupi5T4iR*Z;J-)y^No@iAD4eZi<P! z=(iR?3)}>J#uRA(2k01l;VEn;t*fX)PEJmk+~VWnP^D&FFtc5Py$w<gS(h`|Bm7{t zLD#Ob8&}oV9s?Kc`1lxDB!|LPE(&s%U_GC}h@;084@oohn>XDze#cSF7ibh-C0<~T zhrW$Y^-{SIrI^HF0ZV2xp13lU%L>#RW)m<~Y_1j^hXP8J01vNO(H#a+Fo7X2(uGCL zvOZZe)Zgz2vH>u1FoTo@waKukKf`5#gVe#O_#T@KCTz0^;ibjJtIU{9jqm7N#av$q z;=TfE1VoM!2rW>?PoF-4>u+44J-l!ubO&r#JDv$JzT)EJ4_mQV|GL$}@a+n867I&< z?hbx6x9PH*fSQ_`k@sR8JlT%+b^>Bz$ggzv_iuq%mkzcd_I=E^1AERv^LW&B6r;rz zo}*qdioU3zo1w}z3IeI7)4l~lgOAsnvaIen3{89-7~MC=R2l5Xx%BcO)#4scIJ+&m zICwEcn5)`R()+ttA#qT+GDfp{wK9faXMeFtGhMsV<TAgW{ON2<SB}W;W#$c<n^k$< zQNq4PeXDOz*7$p7e+SpE$xn9SrVS_A;C=(HU!M9w_v|eoHE=EP&kOv3Hs82@9X#E< z0-<a!HnvDSRek;S^dk~NLidwhi@>%|EO)T6DW1OcQda);;ojrB_wI#+grLI3(iDj) zD1`0C*kXRTfnEgpCQu#<E)oW;p(8#D;kpV0!MInZTfEvvPDXYH8KgS>t4>;qjDR^R zH1tlTt5^^?r7#vsNVG#);Zg{20mFe<-&Os@Jw`$$xq<8fPZPL11PdnMj#q!Gn_@Qe z^Yi!cn7d2YH#E3HgFWB|ehPPE+Kv$>RSr}Gd`?Y?kbHkHuj<-+2X`PQSiOv^CMPZ? zrq7b#!)Rkj=dp{9Lry|Pl@SwjHGzX9aR$}e7Kp3$E>v}OexB0=`ZMYjG8=ee+V4FK z>TWtbkL&|S4)VDTU+}~(E-s)iLjt_}$B!tBq<KD&m<I<{kGg-pH>@_2Ub-y6{mvas zAsN(_H%vppXC>%WLi3aLU%Azi&~RCuq1y9F1I^Fh%5HS`*SDFJEPaVrmqG8-4yUWD z?W{->{)b9u7ASWn(BgSKH=Ze67~x;xF+E#P{>iXZugk=+*P&*0(Wq*yM%rmr;4Clv z)lPD^uufk19kmc6RF6ddrQXsz_N}7d4oN&UdgCb4Ec)9MoYdw}yFeGANOS58%R?31 zA0K4ICu8TWNt8Y;sOUvi?*3~Z`A1#Rh|}f#=g%LIr@Fs?hpvV6?acQ%B(2|X-WaS) zu0r~z-zwl&YODCe`F*~$wA#iqRq@wIgOaWio%&*%JYIfsNbV9N`5gNpZSYIxsv^=) zwjbZ6Gas2#pT#VD#}k75{-woH2i>%|ju7pQ`;So}7D$zbbhJ{ss}Kl6UIw%^_(yXB zv&(r?aOYn=%0F`qA5|+`-1T=>Bd-$YjBvy&q+<}U2-ISY=aNg_hA4d{53EU_t%@aP zm5mPntj+ri-m9{xCIW6Qu}_q5S__m>M2|b=w`ShgZ&ocr<_hGmZxEM(jetWTaEC&` z4dMlWGPQxW93h$2)&n$=oHIVmf}sp4_))5~_mYOm5*@WMoP`508!UKd?D-*}>^$Ge z5PTOZC_4HsAz=k{Cf~+WA$kg@8%%;Y4~clQVr$Kb3z%QTC}4%Wm|{3as>&succL}} zHRIdf7P_SUJvfC(6WIIm4FbHh#l(nBi*6h(4Pkt*P<&PT(z;alFueu5CB8S<8wE8u zpMsQw@#omO_Fnc@lYNrODHHo_i}mB0@h+nIpr(|-nS8{Wty7!s^Q1{WPw3^(V3NH= zt!@^LQ4TS}n~?f?GkROhzMsls?~y5<AOhjgFs6b;ySBnj-YKK9V5*nI=&>2+%@;n8 zH^=s6@lHi>oLJOn<<Qdi_x1xycwFDgwKFi{;4<O=e$5O=BYx4Bnz`i6@;8LHkrNT} zH)YC{km9Nr`zF$~n~1U|+QvQ5`IITo)+u0UJG^4M)Ta#YOdErq4zZN@rh6Jk&{pDh ztgh#;dy{Jf*AY&I9pN|U(QwGzQ#EJw%MvwS%F=yiQHtpz&FVxS&<$mkrB;k`O60V5 z`{Tpud2oy_moG1oYllzR<=(lznh=t_)2{n4bTooi77TZQrakjzCakN#ENDzs&$k=~ zy%DeLI>Rh*0~Fu-$=5%RDwErl7?*V3&}ku6v>iF7)^9s*{r-qLP{tc)t-`0gF}}>1 zCx4PI&Wq@4p{GY_t(uvH%FE?6PskoGHAZUie`#Vm<9^WX0<k-gJB1qVl8-_rb%Oia zNBUq0p4&9NI)AqH+LsXb_BCU9{E-*c2&&#})0!Sl6=fCj1(bwZxiO9uso`=KmJ|VX z&rd=lXF&s&jwNL`(y*#Ov`*Le^mIm<^>SM^v^Q(lbw+2oYfJ4YZ-hzBZ@vYvE+2o{ zR>ySUa}JWPzO8JxARZ6tQF?#Jjpj1j?=jgjUphn^uXhg92`DY3y36z>8{+23bd&uH z!zXc#HRLv;`82#l%ky}bBQfO`(xuubha&r1kB;(E&z@bi_BnRRmbQ?yNSfl~l*Bkg zgTP>BXFl>(ggg%?6Lq^ol~&4Z7>ZaW1m|lnp=9aA#(~n=l1q)b4kRNgE(B~-YJbf- z0b0gPT4lu0eozotcH#rL6)0sQli2uE4!MM3$CjcS7bEc$zPI*upSBwn;(t|eTUQd{ z|J*BXC~!|wOG~3wyPNFB{;bcRg~%s(s?x)zA#Y<R2;`mbl{<FNXg5lQ7s_|swNgyt z%xHUg;}*H4<V0Zsr>1+8X60u?-paDapDU%4UsOqD-RE`Chv3#t(eK^eF#p=y*f178 z83maKdO>sZGl(Q7CRY2Md1!v{Tpue14nP7ePFFYC_nLX`5I?jbpn#C1yJ0p7tO1aM z`^6wKu3x{@RI->m9|&Y;I0YFwxxS%cBj5md5oJ;TfU?{daLa3IY8qM*0+k&k3OHIa zV4Vt75`+(k51GXLh|S1of>aPtMdUBAmh`?^M**+ORiX-?9~>G2t=~7Kg9AnsP+9sj zL^9%nwhs@}fsX+fser^7+I??C`#OC#xzr!Jr%cb*?xuB>_r;Ghqea=YzF}Wta~!#e z^sbm;izvuJn`f)lXC#ad4tRh(L-P!F=ryAp_}Nlshvyh|K4+nqBmbzcc;<EiwI2CW zMXF)5uEY~;Y578_4ORDThqg)^11uvLGN2oSQUe)NVG)tbB&&3jIYKfrL5Im|NH5m! z{(N%fgMr)zxZTV%yyA8x`J5iC!G<uj$3f>&P3xGK3Mco5!5H#@8z4Z1M?_Ewde|xS zY7k_Dd;y%z3luqRY+NcTD!CO9Re2%V2ht6Q6c7x<1y$Dv4z-|o;EJz+`-2YK*fyI8 z5!WXkLF_nKSdiQT7HL@PmJiM&5JOCAkhRFW;NVty-*jFcJyKbi6Z=~8^z-$^4)ei1 zW|{*6h8l}^zN)wyd_}8FqYla6eQj^d{j0@DjrVJF)>gIFe6yxnO0r3O{H**?)KFnE zjG^+RV^{6u&<)3x<Y9Unfr@MtfgFA2rpTvxg=_CIMEsCL**{pCiCquMvhtg~soie; z%r^@K0iJ`C6WB?b;xbf%3!Giz!9DpX`nIgR9P)x)&Xdr<KplW2dM9JbJuxCy!<WFL zii(PAX+fLO!b3v#hauPnra3su6bD73pR{}eBo_p5aFdvf8dJv|FsOl}fIPP~S#yv2 ziZBBwMuMXIC277IX3VnFPEfN6so|{D`?TAIs9H$0LFK2XH$s*Zj5s4BBiZONf>I=& zPCS%*p}-7p0j)4%ve?0HF_a%^eRG&ghV1WS5F;*M`FLi;PrVE^EDCICSZGS;mG-WR zIDC<z=@V&sQ-$TxL{zfHfSLHEChpTeD<(XIMRi6x>)(GA@afFf_PEw-D(?#@W~zQ@ zm}IC?&o+z5G-T^Mb<Y`&{q!TsuY%f8;d*_;;j({<<MZqw{pFgEv0y~`0j&pW4FPX2 zh%u&ErN`A0pqYTaYo`E&K_?znxg%ucFZ>7kFRa4gb5_tz)~B097#Q+PFk>dsOYe$} zWq=}^z+$ip5~q_BTmRmhH*Yp)`Q7iS5HMuJ(E^~Bl3Jq;CLNRWb93QTB8`xXgJBRI z9sNo0T_U1N@I8I%eG$iGAEx4vCOBtF+#B<u{*<NUKZP3RC!dPMD82siMVAtz3sWI9 z%0Ntdo7|tt^Rg7{X71p|pX8v&RHXmhs!U4XC=A4{++&bRr12^7@+?^-|Ag$S*ZgRi z_3WmVrHMz)lq$1Kze$TU*>J%J&(B(VlzWzGQO2XCG&efOV&2?CEt%w>Yycv}#KhFW zae@EsjKYbDD-VJRlZBO)m780`Kqs2E|1ss~*uD%A5lD5yX@FEV6Nn6SK;SSnDr)w_ z-gojr7*+L(M}VzQY<PeJpt~Gyf)W^a3qduSmSdEiSSzOTwJg0LkQ{KR+M23MnCBxJ zeZt5XAbtJ#EZ9H;5hfmFjYdvf($7f1x<F7OSjNo4x7t!2E)|xJTCeB0$7vO`YoALj ze@(1T`Dv39S~zCVDuJuNzA=Fos#N&}u4$~H3tu+h4;n%<B!iePHqPPb@rl#T?3?JE zitT}&+&jDCc`gA^;-nQ)F@5d2OOc<SI13JMJF&|~-?{a+?k60|ETt7pU!JJ2y)ra_ zgF~eB6A(c#LoqQh0PW2T@<8uYy&2A6T->2<3j@pi^0Fty6ago02e3KMwZq{>2M~VK zNz|fgArsPNS$-u1fPJ763pRSc-+N~F$E0EJ=lL`l8g-G>LPDwc6W2K);|{H2V8v}| zX{oF*2XvAm?UrEER<&#Y{LDOJO~b`wX~MG%r5e?qt63vF*XMqq(0McJV(A#71@a3| z-CpqfeLgz(n@>;t<=VO*_*nS7`74nqJ9%ep7KWCt2a=JWa5<ddpQdrQISW~~#KVtx z{`PCuS%$2|g1cv1R?)jZg9+vMde(7qG<uUZqU|4rKd*^*Rs7M5DB|r8Up|3B8cqa( zkROssA8e|utPI&_Xd(Tvb5}<*c<d5a2{Q}w2|@ONF}4t(Q78V9Z19H<aGq7n;o#$1 zLNSbGDp^usZ<S(}YOl&>O-hB94p`G7zrjQYe%YqnXqm<H%6?GtsF65SPkWrnyHi5K z!s2K@;0;0ttDAbYImz#_1X=+Rd=V2T#KyLJ^l@>~(xRp6%sASQo9GkPWU0@*@OoY8 zT0c7LN~ouJo<F*pzVbBF{@8DIoxecm4gD;?-NHe^hB#&i!NXAc%)8EuI?)je_C551 zE2?&zO_n^{#hD8A&5J~z?Vs+2$goyn+T#D+a2zIO%jAgD51yjdu~(JN-y5{>)yyw^ zUAvevy!UNa=o0d?^3XTHSR@LO#6wF{Oh`*R?`Cb<7Ge#a1Cc`-EJg6o1k)6uNk>Js z6n&cZzZ9mSF$F;$V$Q~F%5uE+zuh1K;v-M(Iphd|;;TcFa0R;x-2<P7?!~Lq3%0-C zqON<}^+S3TUcg$v-3l_J_U4~=Si}Ku-)d;A4rX^lxB`=!G;9gZO%}Dt7eSbW86%*@ zIMTu!{1zLv^73+^vB39W+D>$QB0D&wB;p5xJsi}9TAPgF5~|a#Ku;9T3>GWD-O;wp zY(ccqR*Wt*Wv^Wq<VBUmYs8Jh(d+elFD{1B8HAUqJkF9}P)1AjWBO(3T<qtuB**MN zwC@CJnt9^1j}|$oYmL8rOl%IKqw^2XQXID=3}I})tK!V4PAie=aJ%qmPGr?vbxR|I zwbShr6hRr&<HwJ+o*1*rs=|4t9!pm_xnTO>O|?!qIzvUZ<-`a6u6FiIIffL^iV@CE zALhjNuj6c>9UB@Nrbk7oxZWGt=(cn;_Al_YtQ`S92Cs+s4eAfrca9AQBQTp8uxPot zxyi}hPU#I%6@V}blq{SjssryDE@G4L&L<R3Ncc!ebpq2sU0@%LTyLJ{vGj}+kz|<j zCMPR6;66$3`Fb8zOI=0dYThL+C{<~1YGXQ*5-RXEepDUH(j?SE@|#??WOxX1w^BO8 zX?c58SI$cfEhqm6-Z;MZy;yHVu#0_rFs&20T+Ja((EX(IxS)uCL}9=fbuWA#0x#nh z`BIJ0-ltMNzoJ7z2K@bosJ*@LUQeBWhjS{>KlfGjip9+{&y2xgzkd0qF{L_mY?QDb z6H(=|O}RH_KxA6l#w(_EcNDC^*RNmUBw-Deu`v2|guh^EVcBqEVbFQQNxFUgeAb=u zcP|PRUp78`B=GB3rn`1XpNjo&WK|IlGn3eN7Om7Lazaio>}#}T81i!*Q0YH@cEouo zaO)HX_kYsOCEfk|tYmg#t*5>ry?5=mCaO`_>P5jxoK#j4L@k~@yUO_h9}%5--GnQ& zI@53JqI*pmZKd@_#r5gtcAvO_0Q_tWGxI^LH;u`Wh(5-6yQdy5p1VJ8=T`XYqi2mY zGqF`rz81^Ae)f*DLr^8mNu&5)&Mf0lF^dhpBZcB=?XzDO%sKiGkP9Hc2{cupY<j<c zS6*K5kXDI>*8Yf&uC<*2q3uDbbAQuy+=eYz^m_sa^5_3#0Y<UVk0ZZ@bS&=<y8hff zm;Xb0QE*Bl&_ZGw9I|hdX3KAcihAa_jn=up#qsv$nwYTPsax@vV4&ylr5kq@j^N!z z-e_*H8Aow7D#vmDaMq4ju_<{=Lr#b{LPIOX`gf9w5ogb*Wg**EEU(ohES{5E0yA1T z_1DD1osqfEj+ZR)2Es%R=iMfq)(ED$HK%-f6b9dSqkE(eVq*z66odsHGzLbrgcOo0 zb#^}gi{@J7*hTkVCeS=C|0UnnD3(QFTKjFS>xkDWKf}Jg<_kTqKjv|k!u)W?5&k%b zvcO4~y{q&(83uJQeS|lK<83YpNw2Oz--_*#TieH-3j%pJgj!6mA!aN;7%X!2kfUsC z5|#Z5NyJ4ZTa?atC}l)UT*vu)sF7pGfj|EVhR^fA5odZc-<cPaoF#3H0l{wGA7RCJ z5cuuX3$}BDRa}_$%njT7mz&44syYL0_P*~<(F`jr7p*p>6!7)9Pj5dA{TP7{H~Yv# zO9GubUApB}@@8@U;L9{`$v}TWHO;x7)gnw!hk3tGFJz7W#TVnim+UY}_$il`KrkGn zLrO16qP6B!Ty*_4zEq;F9NV2uG{g*DutD}?Jsrlh)8uz0N8aP9a<61HO*KzX24~`_ zOJ^IYEz>@<4NInal(y2v#n#-G7@wWJ&>^OwCZTS1mPs>=*I*(t_^uo5qQ-#hU4}qR z3YFH`3=>NdP`^`t8y<nh$=xPH?SaMbUAb@^S0vDGawyVXx~d%a@KFhgLoABQGNn2< z)C7qk8XRg7^^+!AlBvepoBF40i}!tub{zPyo1G*30)#w|aF+OboU2(r)pKlzsOocj z-^>Xz4W<`Gn#$$`2S7BMgN7qsV*T6Q=a^-&rnZ>H^sS0mcMX2s$3iqS6V&N;7Si<4 zeOK8Kp?epk+^!PLra?~~bXT504pRd|m9{`eM&&D$$$%^cVO}Ph&hyA@w27a23lg!$ za`@SCRCtmECU+X(FUy#e>+ZA1BdO)spl)S4mcq<N!w(1wz-S2$(DzvVMw3fXW4C_8 zV;n-_shX>0W;7;Z?9{Q0L3k1j(wM~xsu0d!y<1m6N;mqz92Ht!7(A&e@x;s_@vi32 zdn&;gEoDJW*~7X4Opm^+25c<K5Jl0N(ojoEm4y=Ce0UQA&7!eRNX__vZd#lq8)%4U z^X)kI<k{_Irtrjur*23t1V7fTiByH$Gl@z8eGq+IdVZT+u?1YqF8jNt+y>ESnN+x3 zPBiiZ5^h>D$e1pElW<#|n8c0;fhf^hm(QlFi+GDsR-jvP$L3?fvHFFycO^+T3!}i- zAt?i#1sCJouwak%Z!`%M{2SUX#yX#aLuv746)meZEILp$#?`7kU*^4>vUBg$cpwn^ z%s9Psa|OuGhaW!5FBAliqY8NQ@IxFs+22rLAf91&;}{sACT|R_#D@?gAntr43I4{B z*JH3o|M%OZ4#rCv`7|@lEh#qX-9dJAPT?B}r<;;0XmzyHYFYSvicGBN5chAUkjsB9 z)bph-B>aOik~*IR@wyP3n(yZSb1h*E3{fvE#OtOvWB58Xx%=T+v3KQ+7g!Jot&lXD zn$3LC^Hecdmgel6h>yu*AC88vIoD^>W2{2F+=-iyo^3l_kZ#)qa_J`HZ@3VMZBK-% z66|7le?+zCq;|w72*sMPkRcG8Xo=+BhF$Gy-Qh3Dv)P>C^Hou4ga~QT_O+eY7BZw- zgUDB>qgD9KppLB2=CL(70^wN{xBP*j^UWZ<S(To5di6K4^STGfJUMg<0w}x}q+Mvi zeoK6tx=eL8nK_IUK@ev53|P}GJkf}FhMAt1W3x#8_akKL!`as+i)(Iis#Kr8D^IpS zmqSN1r)7DfnCeaqlt@IcA)2SJm%N(Y|8*ad?9~VA_p;&VpF|V1H`bqFcw>9rPN|<I zfK@(=>oY00JImLtl@azCeYPsgJ-bgSq=^xXEWd+jwwGpM_-bdgS!03D4wB^s5f@uP zz&sxY3T{8Q?i*#0Mw>&C@8NB${nlHYsXFj^o3eAN3gnh$YaWvm5Db4bH$2gbFR}O| zS=rJ1e4uXPsQ=ZR!?cM0+{7!a^9@D(&VXAQ?^a2Bt`iB3O~;8^sb@(>zP*lU-sm)# z5n|G$@oF^cCxn%mA;L0hb6`z{b1oM+|EU~Pba*KL|8G|d*xV5DK=y7b)XAo|lc?ym z|NNI<cesKdHk_Vuym9r>o~^^>{)=x{W$>R`_%FTzvLO)v<+m$E81Y|z`!8<u|Gwn^ z+;Fum{tN+v7gr9ylY|<F8pjNWn(`rzNhp1G(1Xv)a(FZtaPFzosTJ;GhQ*DPo{%tG zJC<YpaH>pIB34zWrYKTXZk^m}j?Z5dV}>8T@sRk~R163$N0i>8zP^l8eSfCDUWgB? zIjn2}uQirNOl~8bHgNvyRO4Ian`YQ06Lwj#s*EN@-0=5P>>FUe-xS))+QjZ-fQLA# zvdP#%q9#X}{mXPpU$+v?Ot|yq{883}h26ch1q;ef=T{^`da#t$Lw5wk)``|mqX)Aw zoJq25d4AGoV^AZ_{V($kbEMfv%<j-pUR@BMhho`@vQ~fJQIetIO(jXTI$pqy8<wjF z_6(1V7q30=Xts|Nkofttk-6~r7WKvZHT-M>>eVgYfvz(K3HC%!L=c6O-W>t?pmUc2 z@|1^BZNF2F^pL@pLo;;OhWLx#a^gY}Rw=LGbznRRK2W{z(&_6s&dJSDlXI($rxp$2 zv-?P5Cp4q`8lT|V{B$J7z15#JTypWOQ`fV_F-&@D^z*$>Se1*6;jGsGs_s0an%dSi zY{#-iK|rL40s_(l0zxRdX$k@&gkA&`M7lsiM^TEjY>FV#1f+!;dPhk}q<08?1JVPb zh7t&OGR_%ioO|vbXN>#jj(hkOGUi%quDQN7=l5m3@3Wj4k4HQUS{%#oxfgRDJ>IH$ zIy{PRmVu$J)8|#y)#I+XmeX1_lo8dnpX9+7L{->=3Hq?d+!25Dy!Otqos>>eZEN+% zGQV@7xyQsTeD2=r$}0r%ZqY8S`8d~)eE~tH*<EdK>nsMk+{ONug%wQc>`i`lTveHp z{2M|_yogj-Uxl61y)RWPUcu^Z)UH<xsDTL@FPeLu(r;-meudEHi$f6%nT!&pKJ4(9 zQvpp!lM~6o`ml+xn@9C_1#;Hh+$S+#&oBMp-?*Pa{%YyF)XnLI>X*@7m*zJL9$9j| zS;U4c-ySm??VI4**=1Ok9+A27sbU)Km0TUk$H#vk!fWy9cX)LD4vYT|@-pPshY!RL zR~u9D3ekTMvE_r*)g9A5>geRihNlL1`=pjo?K*Cxx5Ugusi&9iV7XDUVclzR^WG=1 zzHEIn=~@}4$_69#HWo?iehjCJX2a<|gDuRZ40NLLoQk$}@Q}EmVYGSit(dO7kg7uY zoyzu6CmV0{ZKD!r3%q~`!XqX0k#M&Ee%~BY0gf;z6}5NlkZoX%&v-{TS<5!~nAx$j zOs)d+BNno;j^DdQm<!|ZTOj-V`O>h&&9-n^-$WmPfyN)hHFP$M()lo6C((*M!S2>G zS<*OeL|l^#1#g9R*pTw`$)87ZD2rJ%NzVU<pAoaRx1V<rv~#RZyv&THZH`C8yNN%8 zZv5PG!N<!)($V1|cs66P*{bLi4rBypf=oI1sWH}pmCnU-F4pOj)|c2No`#hbe<rl_ zlXoc%&t2c1lI!Vx(>2$A2!#e#ISZCoOB?JOQL<BOfI#*B>TdMNh=CIlCn@Pw)X<Bz zE>Kt}(c{_8pJ`9IQMjmU7E-bCsU0Jr^V&J6d_yU@-;5E4!fi~W(R|UOu_^I|b|iaa zLG`Am={LvF_nBCwUZ);CgE^iKG@X`(689OkB{-B<<Sytls4@6S_Yud7ASy~tPn(Lf z6{ab9N-*x{>NsI^7j11EB0eYRz4OAirJ4yE&mG@Ex)Aoz;wXE^WGRCq$=b~AMkC2C zEA?~W8hUPVN0EFbAMp}!8+BdWt*9Uqjgu<y1!H2m&$stg+$<{TD9=HL5cYkhYaN$Y z-(`!Wqog&fPNNl5m3qFehP=K-udJP-qtz`(9=3=N_;Khr5O@vdGkA@8I1RapedV;v zm4FE#q&bCSUp#GGd4Gp9NazNZ);D7Ox&LWJRje3K$H|LVp<52u(7o?HCmSIUy0(&M zY+p~H6*=sp?{S(s4fc;Bdhez;Ij!zfB3#0mt)AuI1sg!%kuUY_DU7AIF&sfPyj123 ziYu}hLzqKeZ;3#}RNX1i#`8YR(6a?@u7=ImQgEU1F~~+OQB1j5^>j@P3|&3~8&~*4 zqA0;iKU&7Kb|E&-*wxWCgp>W}-2#a9p_jtV$+>Q48DGoC`!Dq9!3c_`l;qR5@h?9K zhv1mStyG#1vW+ewv^hR2aHS$A%%dv>Giqkzah6s>GX{EZuB@t@L1V63fW~S(yzZAn zQ3q?iQ;0(fZh!w>mD@uYJN{s=tH377@HS_lFC1mT@2NXASv`9J94Vt_$(n9OtSZLG zOe7iRepqhjtCgv6r3Zz2nGkRG+G&J&mm1%wI#9#{hfQ@^oP9?~<Ey3{6;{XcI_}J> z+rXfZYGMiOP^yBz4$^!*wYKrFa(l=`pKD__jnEsd6aM&(Fa#Xuehgz&4r)nN`<Hw2 zL`@;};ChC<;i?%Wqg-3}V1Yrca^uoYG)LjSIU<sLC_>|+-H+bBC5Vx^3T1$axhToV zy{uhas&ZLRq}pPQonDGmd%(QCUxhQ+$>gEp945S_D2Jq?BwzRK52xu(d5Vqn_QyRA zZUwpDf-fL%WE#UfHKs6~BIn+v_`+uue2O+=w8q+wT((s?W`*)djgKPeCWnHl1Tjjh z1ek@|lMETpm}@?dfMEEGo^Ib5Oq(aB9{l1JJiBEtW@leJB8E1hCU?rY;Xd>A&P0ls zR`>cMv>mBB1rR)o!tInt2FaV<6L?MeLu|6EI_6-nfHzrJW`3}y5ShU;pgWoLM04(h zpjYL|O`hR}+0SkLQYNcjZ8duNqO%9_{*E5j4^@=Z)Y>J61~n7);?#`eUV53;i*`%c z9V*E694urMaBdXnwE2-sWmeuSKZR-B;YH>gMr=`iZ66Xt*u8i|M}`V1e#|dx!Yi=M zj1a^T9!EnZ(4XPwjO4m*Dtkb%Qm4Hy8l`4vO0Hsz^l+=DpqFqOQ>yBvNZH<+7mp=F zu`a*7=V@!_Mn(#gbq79+Tk4LV#$gREf#KYlN)EXYux+>8b^Suks)Rt&)k=Fq>YP8y zywb6)1y>>T=@a~Art4h7OG>1AY@AVGn6Pg1PR3l;tCneEm`FvfV{D6kbwfG)gDajr zqrv5o*a+F7Bm8mr&Fvfq*l(+&*!KjBR~pu)JD8yDp<J)gPMhWuY=^4<q550{B~dc} zir4l}iSo|C>z9u@5v@9R^XwLN2Mj*e&>`?M6w-v>gSP|#-ZHMR=o5O_{VKeEym6$W z#X7@==|zf9dL|n3%89gE$eo!v7(&+>UK*SX_wuyOWeloucz`jmcXQ}C3diG0emx`> z+eBYi>0p(b_=1RM5Kcc_+To_Ro>e0yoGs8u3~=A}JFNMdc}G-*pPyKxjqb^?guyy1 zwFD;pea1E`6jY0xHO*z*bv3pN;_kkjyJ#6K2gSxjXf!S?cs!I?@C&egGSw)Aw}I6{ zPaDF71hk{&Gi#QzThaPgp~Uqu#z@9p>K6@-#-Fw7m5IHpj*9PJSiad_OSD4!)=-(= z5-gBNQuymXx*Es(#fCQZnb8qwucP}>kC?+ESk2sh#UR7XiS6$Q7FT(+!XYRN;UjBr zig;n|z4KC`At3`D+`2I3-|5=WcF$T`?qp7C-a*ns0xyU?Ad2SjR^YG!&N`Bm8j^op zM?IagL;AbWB9;&(&Nv8!E0P&s5u6!~#{w?F;@!9#JoKVpPNOjsKgDntGW3QHvF-|M z^|O9ex99qsXJ~lngRwI-BYL^7e?sR#&h-Fd=5BZf<V45G@-6sr%6?o9fGii(0wCA^ z$A|yf;$NHobBn*;+22}#z5a94|Br|Ji-Gt@m;dqMFV6pOWA>LV{@ZE(ON;-6!~Nd| z!uO#+Fq{wkbr`Lbup!J*O*BTk*XhRhi%x*RHkD!gc<}WuNw{U6$#a6n?<t2Xj+;Iv zx`ivc<#7cp_w@~{i<9<z9Q(nxuU<XB`?bpV8iX^FBfs;-&F%LRDYde_CKha!?oW6* z^(^vjjPI=PD)CBYr5|`ln)1@y`<?-}axv|6I2tzIQLr=n#%Yhb^r$q@e&tnNR&vbP z@8g03?8pf9tVk9;KQyzd#EV!O%ixEfr3FGu5-RXw33yD7;WtrniFzMq#*c!vsFH(& zl9E!Pm<2KVGa>9`*}ROIPjMZthhQ;NCeY<C;gb%7^i5OM*tzISe840Z9PGx)6Dq?Z zHSudM-k!aK(V>hF_l;h)e{jsv@GksUT9L?4!Ba%PaID9~^<@_8>b)!B=+N4*4rVK* zH+u*c7Lh9fDs&mGu}oOn(`GVOPrUK2mzQm59x9R$UE8vr(|dVKtk$y|B<H$QSX%F| zZVnFq6a8CZe68EA@53QH;Uhy%ySA$2%mOYoFmWH<u$tWnlax3zdhxdNq$Dn60jE(p zTR$6!G(28>5D$y}FhQ&|4fjz~LEBPF+N`SlV9q+BV^EalQqfAbIY6OM=ib#g{-V@) z$7sN|eci|T&R;}kk4BK1athMc)dt?Cv3rHtS@j5@=i>aYG)0&TB}1$igNN}qhwFR{ zsc%n5&mSnxTEys-%-He5lcec9Hwz-OQ^xAvWFi*Qa$URF;osl26t&wlZw{4J$e9@W zMLojqKj?BvVfTU%TjwY3#+*B7wOAeP*NVVXR20l?s?V3~;zt>USdk-k+!XJX_*7G7 zmIoyz&IT4eN%~y1+1Udd=%k%5%~)DRO3&Pvy_AJs2zF>zlc+p!qVo<u+Q+f7=jnSV zr%K*CQ`9gxvB_*0SGV=MvCX2=uNmaHGRYbdt&*3!s2|5T|L82pwiJr(?2f{geM?Gh zZN0tA#vN<OWV6_x%(f%~wWQb{jz>Pn{@QS|aXmtEG2VjnZJg2LuBhIYZyQ-G1GdS& z*;#W(&D>aNGC{Ws`Rqg5lZ0n1VZM8xrUu9sF)`!6i5nY}q<C<D(qd_qt-{w2%NrU? z5=qi)-?7BJ*JRe~m4Y{*lJMqF5;Xo?1BofEQL0(irh0O(b=xamHhtJd`so4z3!?U* zq*^NA`FsBN&@FrMxf5r-(i_&*h7MoZxDuLr2%_CtS+`<7s;L)zVZp<nbdh9Dc00d^ zNjhGXkts`WLb0q8Di+DA>Algm5(7u=a;LhlC3yv;v|9}9=)36@{N7`a?~e=_h$Lj0 z%W=q}P}eHSxyySeO$127LN6jI)$eTuLq&rxV>+~Bmsb{YE4POujLtsvWteR$j_3t> z?)hrF<=y35)KR7~_k&Nif?!<fVk?4amM5(%U*2?Rlf|l?LMxi*?rVQ$P2%FUdh%_U zuQhl7?=?g951(QkiKp5FY<3qx6+*8({KIFu5G6vdOozq@J1<>;8(u>=n`d4P$w9S! zImHFt5`r5~v^cM6zNkHj0u#@wm^a3dJxE9E0kL~1@^e*)M2JmEMaau1NfKu*gXM9; z5}&n(C3tu&Z^XRN0Nr&;4Ee;rTC53+xf`Q)LkKs@$>f-5Z)iKnP=oI=AeQhv=88fQ z$+OuNLLWaE){pp8I%pyE$i!OG1jFt=GG70Bg9VYWtF0RUA#H9`dq=;TNqBdXT;ksr z68g9}>$n$VcXU+e-jIkmEu3Y^o6Ma`8}XyVCs_q@uWcvhJ}){P^&0HnN)Y2xy^jfo z#+w_uV(Dy$#%(vkAq^bOmV<+2<(6M`C~2;`1VMN?yQ>0}_-w*-q}v15MG{O$RX9l6 zpZB9AUUsS<j%wMOcKA*!E4rR%j%0y|F`a=n*y%8!%D3eaC~A%`HD~(HG!6O-=oK%D zbGpFD^~<Af3>RaCkbZ~R=4!e<GgFY2rD3$@sH-EpZMcuSf+_z?Q#tPl2lXoVUx=-q z#p)vn&w02@h78xbFJ7LP9%VH4>jJn?oyo0V%KH=@#%CApQTwauW0)%vjbtO$DS@Mz zxG49G>B(J{XG+uS$<(U(T*yXyz@Wic&C1|8x*Os^5nWayP?*1%g;*z?bf=7Epm5Hm zKrPCkXgq2T=CoesT1s#IwjO!kZiorzc-_pzy+;`~J6o|7*E7}``NsaRhQ%s8%0w7o za_5c?d}BgP{Pxz=Me=Ad>|4UmoL+RWFK+1$(t=3*X;waGjDpsiqfx?UNwrI@5-73d zlBqr$-AJ}6qJ86Np>+of()jXa>WYG$$7Tf4eQ3bMS^Lwx!_iaRH!>^5A7+YkTeuL3 zOAl^xTdE>Q&LfybtX>R@A;^q&{K3PUa}n&7{!Kd)=i&33%eat`by;@#F>2*xICc6G zDPU7y1|q&mfu-!sY8wsYq#v-sQhVP;v4^U|FrV_Y#Bd{pBB(DdN|W;2rMe?t`-|%> zWl`x3l#Wow)qHh5Q-9wTM3z2$FO%wLWzOVsU-+bD@U)YVP~yCUWBuf32jMywwgmUZ zr37&SEt%@N1=8yreq4@2qL#c19*IOW#2bKIxK*v|&oP-Tw)n8L`SFkZ0>Tl^DhQ2m zRKuYjIjn2^_r*|Z+yE{Fb>S4df_%^3pX<9HdZV54RPq@>$&RV&WVXuxvLvk?OFEd| zm|aaWUOL*?@_-E&AQXw(q>D&nkF`hRbP|;}tk%gN!Qz9TGUfDh?pRBNRVGm>!#1lJ zWVkx_xg03U2zmg=-)KGq*1$t(ozCU9)&}EeZ=Ov>-kCgfRIb7DCvglNWnKbb>ln#s ze9{SdNbEj}G1Sh@ZIHM*sRhe;bk15PmnHL=s;>T_uI}gW0R)Q&bI~dh2JT!(;!*eA zo=4K>yngJp^z(~(SPlzM@hv#>=O4)ot9&*q;?q)$vy)-zR9~ASzE*v`gW{|?JxJUd z{2F0pC2o`09ZVM=(nBWCOG%D%M)U0xpTU%yM!rDRdM6p+ec+Oj|76yJsi|wR!*-sE zNgECbyk4wxTOvT*k+I*7%wTufnTIW$e_OlPI%oFUaZll4_wy(DS0b*_b-9ppS>UEJ z?sXx}D~VtgUWmS~JZw)c&x!++Vxa4~*Zs-?A>KRCIL15{a!mA=RK(-+uAsd6ZTfaf z=$S$aC`#aVb9AsG=XK@E1f4eiyCMow$+BWMQ~4}et@yyx6LR#1?YA!=!5E_4Ixl(d zhf$aDV(@ZPaWguP&D%}3A$2A^Qo4K{dplCR>5=8K(7B&%V57n@hw34nslum$>!wpP zIZrW7G$peIEVgX>bW$WGg@#zi<T@4OnW2u#i<ydz)BV?uE02H4k^feS{HJHpA?#e; z>24=ZoO3;XN5J1}tpDAaUWGE9{QHLFn{z>|j?ckEoPYE8_D35t=J)R@)5YgSPekaz z=m5=n3%Cw_+9CLmpFo>(EQt*Y3M!mDu{8t#39@chNqYi7Q2H(9W=FD03CFj&N0R72 zVu7cN3J`S1ti<y2PiN0sR#GCNt5rY%D}O%VST_Xzd+vMXn=Ze5_d^<uRQbbh#VZ~2 zn<?|nmXNMZfZT<RR%Aa(h<?QFGpWT*zwY6)KHUt^)<<Bk8+)>0j#A(H76HOr>NgCh zytN<`lvKAF)c)1`C$5uOM_+%Z&79inJ`Q{ooeAQ>^O(0nd%#o!L~onGy-JJeb~hcZ zm|5QiJ3s)4Op$qG!zOfjX{i&qoB&s0Y_m@Ex0sf1FAV`LuNAnb2K)Q5*osOKAplIc zgef+Fs$fLj*yhv2ggN2wO*x~gb|$<5L_k#)58k%W7L#Vatmh#QEaAi?*G}oF57*f6 zE%Td^GeAfRj9ptmnRoy|l?cg&Vh8W04;K`6e_WxJ{`JQbo@-|wiY08xl7J`IZ~7ze z$mnQbvX`6=z>(xLE_qJK?TlRux{YQfcGVjQk|~o%6PvQ56+pz9++pp>vz6*0>o;PX zo$N9FabRE|Fdc|y3k=ZHfN^S6^5U_vvGEm-?EHLtAn3A5b{_;rWbuS>luTqFfv|f3 zM6^3&uG$Rf9GYImD{>5HPNG@+?ME9nJE1`T*t@uO4B4^m<B=Tmdp)MD$}Rzb9H(jT ze-&K@wz*+|Z~=G<fU|Ad-`^ki`vu1O*v<x!<-o!D)4KE+im?U4qyaDz05y?+)$#7t z+Ij*oz5~>z65fSL(4hGB0IE=@pmX@?d^TtA-u5a2URF^dDJdD<sd-Fa{tU4KKm^&F zUGtk9K5IY3yJP{Le50XD2I}tvE};TIIrD0zB&lVBc**Vqy6URMti*=Su*1a318X`& zyF+E*v8nDn-Z3ZH1_7MOH{k?}hgb8B%9p^k5SjLR!^Znb&6m124-mShXv?$cO98i1 zyDH1dWWfsrKy*dAN!wH*!|FHj`uPSfL#Bw2KfgVW5e5>skr5;Em??ns6fQIQ_gl3C zd`Z6qT(RqE*f<AuEf`>BjN-}xO4M2`fwSQR5B-I<67V(zKfuyG?)9-`eCWW?2K)eA zx7DkDJUnVMHMtYVT$B;JqGS+3ChzHjEEtrV$1k%Z!4nL^AO5#pf+ob*aI8)T<0QZM zmKW3OyNvoK+WDrk6%N^bi^r@G5a{wV;o^FQCe^^8jYF{UvU>z#9F={(10mUQj41k5 z8!8fyRAGP~0dVOYzyb=5bRBi5WL#$~FDO_ktX=g2z#-G2`ac6Mc??=yAv>N(QNucl z6a&)ws8gd{)FVKZ1dN74{?+$gfUM1|1A|Gxi3Zj%f{w`2X;JI=G<VWDyBx>M03YcG z9E(D2GT>&g259Cn8ic7n3`qYph@xfQGO?OYWkG8rUceI!g#O!nq1Nr6U0UyE6C-pk zd`+~__wR}Y64(5+n2_6kVc7ti0YKhbu&~-rHauMv@KhH&-Sk#+p)rBVw(1fD<YHCe zibsC%lzB!(>HW=iady0mX{GZip<){A7jZDGz+<?FN<E39=#YjU-)g;KljH&d%rI^n zU^GkaiQZFzn_n|uhB98KMFHuZ1i&wc$`su!70h$hHTUQNHrM>zT<L|c@1NzyLgoPN zD@DOy-WZ7j(qWh2jQ549ELIIQ9+kCfPQlkV-4ES>_@8)hL2w)lRyrU5;HewHZ82mq z>^E+uZ))nhT0OttFj-wvIqKiD{ZYSay90Q5DS&>n7Ax=>+#O)Ds4JZ%4`|hjjL;V8 z3Hy9E$Z|cEhXS{-o{M=I^YCTgl=*?7Aw;8hQ^gAK7nYZm0eA^3AjQt?=@qN4e*7N6 zytKS5*R_nyKzDR>*bnS(D1Qq4H>-fxpGT+f8F5<Jr(FV4ixVdvD{Cqh{{B4RzW~LU Bwv_+? literal 0 HcmV?d00001 diff --git a/src/androidextras/doc/qtandroidextras.qdocconf b/src/androidextras/doc/qtandroidextras.qdocconf index 9e123bb..02e5390 100644 --- a/src/androidextras/doc/qtandroidextras.qdocconf +++ b/src/androidextras/doc/qtandroidextras.qdocconf @@ -29,7 +29,7 @@ tagfile = ../../../doc/qtandroidextras/qtandroidextras.tags depends += qtcore headerdirs += .. sourcedirs += .. -exampledirs += ../../../examples/qtandroidextras \ +exampledirs += ../../../examples/androidextras \ ../ \ snippets -- GitLab