From 481005cc69a7e290eb7853111105d4d2f0a3614c Mon Sep 17 00:00:00 2001 From: filnet Date: Wed, 16 Jan 2013 22:30:16 +0100 Subject: [PATCH 01/39] OP-803 transparent refactoring - moved specific save/restore code from SplitterOrView to UAVGadgetView and made some methods private --- .../uavgadgetmanager/splitterorview.cpp | 15 ++----------- .../uavgadgetmanager/uavgadgetview.cpp | 21 +++++++++++++++++++ .../uavgadgetmanager/uavgadgetview.h | 8 +++++-- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/splitterorview.cpp b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/splitterorview.cpp index 183ffa185..2a3a02f64 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/splitterorview.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/splitterorview.cpp @@ -347,11 +347,7 @@ void SplitterOrView::saveState(QSettings* qSettings) const { static_cast(m_splitter->widget(1))->saveState(qSettings); qSettings->endGroup(); } else if (gadget()) { - qSettings->setValue("type", "uavGadget"); - qSettings->setValue("classId", gadget()->classId()); - qSettings->beginGroup("gadget"); - gadget()->saveState(qSettings); - qSettings->endGroup(); + m_view->saveState(qSettings); } } @@ -374,13 +370,6 @@ void SplitterOrView::restoreState(QSettings* qSettings) static_cast(m_splitter->widget(1))->restoreState(qSettings); qSettings->endGroup(); } else if (mode == "uavGadget") { - QString classId = qSettings->value("classId").toString(); - int index = m_view->indexOfClassId(classId); - m_view->listSelectionActivated(index); - if(qSettings->childGroups().contains("gadget")) { - qSettings->beginGroup("gadget"); - gadget()->restoreState(qSettings); - qSettings->endGroup(); - } + m_view->restoreState(qSettings); } } diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp index 13b2b3062..6deb3adc9 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp @@ -252,3 +252,24 @@ void UAVGadgetView::currentGadgetChanged(IUAVGadget *gadget) { m_activeLabel->setVisible(m_uavGadget == gadget); } + +void UAVGadgetView::saveState(QSettings* qSettings) +{ + qSettings->setValue("type", "uavGadget"); + qSettings->setValue("classId", gadget()->classId()); + qSettings->beginGroup("gadget"); + gadget()->saveState(qSettings); + qSettings->endGroup(); +} + +void UAVGadgetView::restoreState(QSettings* qSettings) +{ + QString classId = qSettings->value("classId").toString(); + int index = indexOfClassId(classId); + listSelectionActivated(index); + if(qSettings->childGroups().contains("gadget")) { + qSettings->beginGroup("gadget"); + gadget()->restoreState(qSettings); + qSettings->endGroup(); + } +} diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h index 494f456f0..2f2a12992 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h @@ -71,17 +71,21 @@ public: IUAVGadget *gadget() const; void setGadget(IUAVGadget *uavGadget); bool hasGadget(IUAVGadget *uavGadget) const; - int indexOfClassId(QString classId); + void showToolbar(bool show); + void saveState(QSettings* qSettings); + void restoreState(QSettings* qSettings); + public slots: void closeView(); - void listSelectionActivated(int index); private slots: + void listSelectionActivated(int index); void currentGadgetChanged(IUAVGadget *gadget); private: + int indexOfClassId(QString classId); void updateToolBar(); QPointer m_uavGadgetManager; From 1e3aeaf988a500a28ff8c84b61bf64d62dc10d28 Mon Sep 17 00:00:00 2001 From: filnet Date: Wed, 16 Jan 2013 23:43:22 +0100 Subject: [PATCH 02/39] OP-803 fix attempt --- .../plugins/coreplugin/uavgadgetdecorator.cpp | 4 ++-- .../coreplugin/uavgadgetinstancemanager.cpp | 8 +++++-- .../coreplugin/uavgadgetinstancemanager.h | 2 +- .../uavgadgetmanager/uavgadgetview.cpp | 22 +++++++++++++++++-- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetdecorator.cpp b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetdecorator.cpp index fd6d1164e..55d3a9a31 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetdecorator.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetdecorator.cpp @@ -45,8 +45,8 @@ UAVGadgetDecorator::UAVGadgetDecorator(IUAVGadget *gadget, QListaddItem(config->name()); connect(m_toolbar, SIGNAL(activated(int)), this, SLOT(loadConfiguration(int))); - if (m_configurations->count() > 0) - loadConfiguration(0); +// if (m_configurations->count() > 0) +// loadConfiguration(0); updateToolbar(); } diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp index 55dc239a8..3393dc4b5 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp @@ -253,13 +253,17 @@ void UAVGadgetInstanceManager::createOptionsPages() } -IUAVGadget *UAVGadgetInstanceManager::createGadget(QString classId, QWidget *parent) +IUAVGadget *UAVGadgetInstanceManager::createGadget(QString classId, QWidget *parent, bool loadDefaultConfiguration) { IUAVGadgetFactory *f = factory(classId); if (f) { QList *configs = configurations(classId); IUAVGadget *g = f->createGadget(parent); - IUAVGadget *gadget = new UAVGadgetDecorator(g, configs); + UAVGadgetDecorator *gadget = new UAVGadgetDecorator(g, configs); + if ((loadDefaultConfiguration && configs && configs->count()) > 0) { + gadget->loadConfiguration(configs->at(0)); + } + m_gadgetInstances.append(gadget); connect(this, SIGNAL(configurationAdded(IUAVGadgetConfiguration*)), gadget, SLOT(configurationAdded(IUAVGadgetConfiguration*))); connect(this, SIGNAL(configurationChanged(IUAVGadgetConfiguration*)), gadget, SLOT(configurationChanged(IUAVGadgetConfiguration*))); diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.h b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.h index fab30f284..a67953fc1 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.h +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.h @@ -61,7 +61,7 @@ public: ~UAVGadgetInstanceManager(); void readSettings(QSettings *qs); void saveSettings(QSettings *qs); - IUAVGadget *createGadget(QString classId, QWidget *parent); + IUAVGadget *createGadget(QString classId, QWidget *parent, bool loadDefaultConfiguration = true); void removeGadget(IUAVGadget *gadget); void removeAllGadgets(); bool canDeleteConfiguration(IUAVGadgetConfiguration *config); diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp index 6deb3adc9..6fef953d6 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp @@ -265,11 +265,29 @@ void UAVGadgetView::saveState(QSettings* qSettings) void UAVGadgetView::restoreState(QSettings* qSettings) { QString classId = qSettings->value("classId").toString(); + int index = indexOfClassId(classId); - listSelectionActivated(index); + if (index < 0) { + index = m_defaultIndex; + } + + classId = m_uavGadgetList->itemData(index).toString(); + + + IUAVGadget *newGadget; + UAVGadgetInstanceManager *im = ICore::instance()->uavGadgetInstanceManager(); if(qSettings->childGroups().contains("gadget")) { + newGadget = im->createGadget(classId, this, false); qSettings->beginGroup("gadget"); - gadget()->restoreState(qSettings); + newGadget->restoreState(qSettings); qSettings->endGroup(); } + else { + newGadget = im->createGadget(classId, this); + } + + IUAVGadget *gadgetToRemove = m_uavGadget; + setGadget(newGadget); + m_uavGadgetManager->setCurrentGadget(newGadget); + im->removeGadget(gadgetToRemove); } From a9d2679e3925be4e7cb8c50595f75e3fe23bef59 Mon Sep 17 00:00:00 2001 From: filnet Date: Sun, 20 Jan 2013 17:32:55 +0100 Subject: [PATCH 03/39] OP-803 minor cleanups --- .../src/plugins/coreplugin/uavgadgetdecorator.cpp | 7 ++++--- .../coreplugin/uavgadgetmanager/uavgadgetview.cpp | 9 +++------ .../plugins/coreplugin/uavgadgetmanager/uavgadgetview.h | 6 +++--- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetdecorator.cpp b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetdecorator.cpp index 55d3a9a31..9857831c0 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetdecorator.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetdecorator.cpp @@ -115,17 +115,18 @@ void UAVGadgetDecorator::updateToolbar() void UAVGadgetDecorator::saveState(QSettings* qSettings) { if (m_activeConfiguration) { - qSettings->setValue("activeConfiguration",m_activeConfiguration->name()); + qSettings->setValue("activeConfiguration", m_activeConfiguration->name()); } } -void UAVGadgetDecorator::restoreState(QSettings* qSetting) +void UAVGadgetDecorator::restoreState(QSettings* qSettings) { - QString configName = qSetting->value("activeConfiguration").toString(); + QString configName = qSettings->value("activeConfiguration").toString(); foreach (IUAVGadgetConfiguration *config, *m_configurations) { if (config->name() == configName) { m_activeConfiguration = config; loadConfiguration(config); + break; } } } diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp index 6fef953d6..3cf7a0387 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp @@ -230,14 +230,14 @@ void UAVGadgetView::updateToolBar() void UAVGadgetView::listSelectionActivated(int index) { - if (index < 0) // this could happen when called from SplitterOrView::restoreState() - index = m_defaultIndex; QString classId = m_uavGadgetList->itemData(index).toString(); if (m_uavGadget && (m_uavGadget->classId() == classId)) return; + UAVGadgetInstanceManager *im = ICore::instance()->uavGadgetInstanceManager(); - IUAVGadget *gadgetToRemove = m_uavGadget; IUAVGadget *gadget = im->createGadget(classId, this); + + IUAVGadget *gadgetToRemove = m_uavGadget; setGadget(gadget); m_uavGadgetManager->setCurrentGadget(gadget); im->removeGadget(gadgetToRemove); @@ -265,15 +265,12 @@ void UAVGadgetView::saveState(QSettings* qSettings) void UAVGadgetView::restoreState(QSettings* qSettings) { QString classId = qSettings->value("classId").toString(); - int index = indexOfClassId(classId); if (index < 0) { index = m_defaultIndex; } - classId = m_uavGadgetList->itemData(index).toString(); - IUAVGadget *newGadget; UAVGadgetInstanceManager *im = ICore::instance()->uavGadgetInstanceManager(); if(qSettings->childGroups().contains("gadget")) { diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h index 2f2a12992..aaf051ba7 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h @@ -67,15 +67,15 @@ public: UAVGadgetView(UAVGadgetManager *uavGadgetManager, IUAVGadget *uavGadget = 0, QWidget *parent = 0); virtual ~UAVGadgetView(); - void removeGadget(); IUAVGadget *gadget() const; void setGadget(IUAVGadget *uavGadget); bool hasGadget(IUAVGadget *uavGadget) const; + void removeGadget(); void showToolbar(bool show); - void saveState(QSettings* qSettings); - void restoreState(QSettings* qSettings); + void saveState(QSettings *qSettings); + void restoreState(QSettings *qSettings); public slots: void closeView(); From 03ad1e55f5812dc024ddf5990c52344902bb2753 Mon Sep 17 00:00:00 2001 From: Kevin Vertucio Date: Tue, 22 Jan 2013 00:26:27 -0500 Subject: [PATCH 04/39] converted "About Authors" and "About OpenPilot GCS" to QML added dependent QML files Signed-off-by: Kevin Vertucio --- .../src/plugins/coreplugin/CREDITS.html | 10 +- .../src/plugins/coreplugin/authorsdialog.cpp | 106 ++-- .../src/plugins/coreplugin/core.qrc | 4 + .../src/plugins/coreplugin/coreplugin.pro | 5 +- .../plugins/coreplugin/coreplugin.pro.user | 564 ++++++++++++++++++ .../src/plugins/coreplugin/mainwindow.cpp | 14 +- .../plugins/coreplugin/qml/AboutDialog.qml | 106 ++++ .../coreplugin/qml/FlickableWebView.qml | 196 ++++++ .../src/plugins/coreplugin/qml/TabWidget.qml | 102 ++++ .../src/plugins/coreplugin/qml/images/tab.png | Bin 0 -> 507 bytes 10 files changed, 1061 insertions(+), 46 deletions(-) create mode 100644 ground/openpilotgcs/src/plugins/coreplugin/coreplugin.pro.user create mode 100644 ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml create mode 100644 ground/openpilotgcs/src/plugins/coreplugin/qml/FlickableWebView.qml create mode 100644 ground/openpilotgcs/src/plugins/coreplugin/qml/TabWidget.qml create mode 100644 ground/openpilotgcs/src/plugins/coreplugin/qml/images/tab.png diff --git a/ground/openpilotgcs/src/plugins/coreplugin/CREDITS.html b/ground/openpilotgcs/src/plugins/coreplugin/CREDITS.html index 341e288f6..c80fe5325 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/CREDITS.html +++ b/ground/openpilotgcs/src/plugins/coreplugin/CREDITS.html @@ -1,6 +1,10 @@ -

This is a credits file of people that are or have been key contributors to the OpenPilot project. -Without the work of the people in this file OpenPilot would not be what it is today.

+ + +

This is a credits file of people that are or have been key contributors to the OpenPilot project.Without the work of the people in this file OpenPilot would not be what it is today.

It is sorted alphabetically by name

@@ -77,5 +81,5 @@ Mat Wellington Kendal Wells Dmitriy Zaitsev - + diff --git a/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp b/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp index a6cb6b8c5..67b3c28f6 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp @@ -42,6 +42,11 @@ #include #include #include + +#include +#include +#include +#include using namespace Core; using namespace Core::Internal; @@ -52,45 +57,78 @@ AuthorsDialog::AuthorsDialog(QWidget *parent) { // We need to set the window icon explicitly here since for some reason the // application icon isn't used when the size of the dialog is fixed (at least not on X11/GNOME) + setWindowIcon(QIcon(":/core/images/openpilot_logo_32.png")); - - setWindowTitle(tr("About OpenPilot Authors")); + setWindowTitle(tr("About OpenPilot")); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - QGridLayout *layout = new QGridLayout(this); - layout->setSizeConstraint(QLayout::SetFixedSize); + //This loads a QML doc containing a Tabbed view + QDeclarativeView *view = new QDeclarativeView(this); + view->setSource(QUrl("qrc:/core/qml/AboutDialog.qml")); - QString version = QLatin1String(GCS_VERSION_LONG); - version += QDate(2007, 25, 10).toString(Qt::SystemLocaleDate); - QString ideRev; -#ifdef GCS_REVISION - //: This gets conditionally inserted as argument %8 into the description string. - ideRev = tr("From revision %1
").arg(QString::fromLatin1(GCS_REVISION_STR).left(10)); -#endif - const QString description = tr( - "

The OpenPilot Project

" - "Proudly brought to you by this fine team:
" - ); + QString version = QLatin1String(GCS_VERSION_LONG); + version += QDate(2007, 25, 10).toString(Qt::SystemLocaleDate); + + QString ideRev; + #ifdef GCS_REVISION + //: This gets conditionally inserted as argument %8 into the description string. + ideRev = tr("From revision %1
").arg(QString::fromLatin1(GCS_REVISION_STR).left(10)); + #endif - QLabel *copyRightLabel = new QLabel(description); - copyRightLabel->setWordWrap(true); - copyRightLabel->setOpenExternalLinks(true); - copyRightLabel->setTextInteractionFlags(Qt::TextBrowserInteraction); + #ifdef UAVO_HASH + //: This gets conditionally inserted as argument %11 into the description string. + QByteArray uavoHashArray; + QString uavoHash = QString::fromLatin1(Core::Constants::UAVOSHA1_STR); + uavoHash.chop(2); + uavoHash.remove(0,2); + uavoHash=uavoHash.trimmed(); + bool ok; + foreach(QString str,uavoHash.split(",")) + { + uavoHashArray.append(str.toInt(&ok,16)); + } + QString gcsUavoHashStr; + foreach(char i, uavoHashArray) + { + gcsUavoHashStr.append(QString::number(i,16).right(2)); + } + QString uavoHashStr = gcsUavoHashStr; + #else + QString uavoHashStr = "N/A"; + #endif - QTextBrowser *creditsArea = new QTextBrowser(this); - creditsArea->setSource(QUrl("qrc:core/CREDITS.html")); - - QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close); - QPushButton *closeButton = buttonBox->button(QDialogButtonBox::Close); - QTC_ASSERT(closeButton, /**/); - buttonBox->addButton(closeButton, QDialogButtonBox::ButtonRole(QDialogButtonBox::RejectRole | QDialogButtonBox::AcceptRole)); - connect(buttonBox , SIGNAL(rejected()), this, SLOT(reject())); - - QLabel *logoLabel = new QLabel; - logoLabel->setPixmap(QPixmap(QLatin1String(":/core/images/openpilot_logo_128.png"))); - layout->addWidget(logoLabel , 0, 0, 1, 1); - layout->addWidget(copyRightLabel, 0, 1, 2, 4); - layout->addWidget(creditsArea, 3, 0, 2, 5); - layout->addWidget(buttonBox, 6, 0, 1, 5); + const QString description = tr( + "

OpenPilot Ground Control Station

" + "GCS Revision: %1
" + "UAVO Hash: %2
" + "
" + "Built from %3
" + "Built on %4 at %5
" + "Based on Qt %6 (%7 bit)
" + "
" + "© %8, 2010-%9. All rights reserved.
" + "
" + "This program is free software; you can redistribute it and/or modify
" + "it under the terms of the GNU General Public License as published by
" + "the Free Software Foundation; either version 3 of the License, or
" + "(at your option) any later version.
" + "
" + "The program is provided AS IS with NO WARRANTY OF ANY KIND, " + "INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A " + "PARTICULAR PURPOSE.
" + ).arg( + QString::fromLatin1(GCS_REVISION_STR).left(60), // %1 + uavoHashStr, // %2 + QLatin1String(GCS_ORIGIN_STR), // $3 + QLatin1String(__DATE__), // %4 + QLatin1String(__TIME__), // %5 + QLatin1String(QT_VERSION_STR), // %6 + QString::number(QSysInfo::WordSize), // %7 + QLatin1String(GCS_AUTHOR), // %8 + QLatin1String(GCS_YEAR_STR) // %9 + ); + //Expose the version description to the QML doc + view->rootContext()->setContextProperty("version", description); + } diff --git a/ground/openpilotgcs/src/plugins/coreplugin/core.qrc b/ground/openpilotgcs/src/plugins/coreplugin/core.qrc index 74579c457..09041270a 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/core.qrc +++ b/ground/openpilotgcs/src/plugins/coreplugin/core.qrc @@ -62,5 +62,9 @@ images/helpicon.svg images/cpu.png images/tx-rx.svg + qml/images/tab.png + qml/AboutDialog.qml + qml/FlickableWebView.qml + qml/TabWidget.qml diff --git a/ground/openpilotgcs/src/plugins/coreplugin/coreplugin.pro b/ground/openpilotgcs/src/plugins/coreplugin/coreplugin.pro index 902241988..62ee7f5f7 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/coreplugin.pro +++ b/ground/openpilotgcs/src/plugins/coreplugin/coreplugin.pro @@ -1,11 +1,12 @@ TEMPLATE = lib TARGET = Core DEFINES += CORE_LIBRARY -QT += xml \ +QT += declarative \ + xml \ network \ script \ svg \ - sql + sql include(../../openpilotgcsplugin.pri) include(../../libs/utils/utils.pri) include(../../shared/scriptwrapper/scriptwrapper.pri) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/coreplugin.pro.user b/ground/openpilotgcs/src/plugins/coreplugin/coreplugin.pro.user new file mode 100644 index 000000000..0bdc53354 --- /dev/null +++ b/ground/openpilotgcs/src/plugins/coreplugin/coreplugin.pro.user @@ -0,0 +1,564 @@ + + + + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + System + false + 4 + true + 1 + true + 0 + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + Qt4ProjectManager.Target.DesktopTarget + 0 + 0 + 0 + + ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-macos-generic-mach_o-64bit./usr/bin/gdb + + + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Qt 4.8.3 in PATH (System) Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /Users/kevin/Documents/Source/OpenPilot-Private/ground/openpilotgcs/src/plugins/coreplugin-build-desktop-Qt_4_8_3_in_PATH__System__Debug + 7 + true + + + ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-macos-generic-mach_o-64bit./usr/bin/gdb + + + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Qt 4.8.3 in PATH (System) Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + /Users/kevin/Documents/Source/OpenPilot-Private/ground/openpilotgcs/src/plugins/coreplugin-build-desktop-Qt_4_8_3_in_PATH__System__Release + 7 + true + + + ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-macos-generic-mach_o-64bit./usr/bin/gdb + + + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Desktop Qt 4.8.1 for GCC (Qt SDK) Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /Users/kevin/Documents/Source/OpenPilot-Private/ground/openpilotgcs/src/plugins/coreplugin-build-desktop-Desktop_Qt_4_8_1_for_GCC__Qt_SDK__Debug + 6 + true + + + ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-macos-generic-mach_o-64bit./usr/bin/gdb + + + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Desktop Qt 4.8.1 for GCC (Qt SDK) Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + /Users/kevin/Documents/Source/OpenPilot-Private/ground/openpilotgcs/src/plugins/coreplugin-build-desktop-Desktop_Qt_4_8_1_for_GCC__Qt_SDK__Release + 6 + true + + + ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-macos-generic-mach_o-64bit./usr/bin/gdb + + + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Desktop Qt 4.8.0 for GCC (Qt SDK) Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /Users/kevin/Documents/Source/OpenPilot-Private/ground/openpilotgcs/src/plugins/coreplugin-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Debug + 5 + true + + + ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-macos-generic-mach_o-64bit./usr/bin/gdb + + + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Desktop Qt 4.8.0 for GCC (Qt SDK) Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + /Users/kevin/Documents/Source/OpenPilot-Private/ground/openpilotgcs/src/plugins/coreplugin-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Release + 5 + true + + + ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-macos-generic-mach_o-64bit./usr/bin/gdb + + + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Desktop Qt 4.7.4 for GCC (Qt SDK) Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /Users/kevin/Documents/Source/OpenPilot-Private/ground/openpilotgcs/src/plugins/coreplugin-build-desktop-Desktop_Qt_4_7_4_for_GCC__Qt_SDK__Debug + 3 + true + + + ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-macos-generic-mach_o-64bit./usr/bin/gdb + + + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Desktop Qt 4.7.4 for GCC (Qt SDK) Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + /Users/kevin/Documents/Source/OpenPilot-Private/ground/openpilotgcs/src/plugins/coreplugin-build-desktop-Desktop_Qt_4_7_4_for_GCC__Qt_SDK__Release + 3 + true + + 8 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + No deployment + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + + + false + false + false + false + false + false + false + false + true + true + 0.01 + 0.01 + 10 + 10 + true + true + 25 + 25 + + + true + true + valgrind + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + + 2 + + false + + %{buildDir} + Custom Executable + + ProjectExplorer.CustomExecutableRunConfiguration + 3768 + true + false + false + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.EnvironmentId + {51e7adba-6ef9-490c-b046-228d3817bea8} + + + ProjectExplorer.Project.Updater.FileVersion + 10 + + diff --git a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp index 000156d70..f17b5f703 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp @@ -795,15 +795,15 @@ void MainWindow::registerDefaultActions() // About GCS Action #ifdef Q_WS_MAC - tmpaction = new QAction(QIcon(Constants::ICON_OPENPILOT), tr("About &OpenPilot GCS"), this); // it's convention not to add dots to the about menu + // tmpaction = new QAction(QIcon(Constants::ICON_OPENPILOT), tr("About &OpenPilot GCS"), this); // it's convention not to add dots to the about menu #else - tmpaction = new QAction(QIcon(Constants::ICON_OPENPILOT), tr("About &OpenPilot GCS..."), this); + // tmpaction = new QAction(QIcon(Constants::ICON_OPENPILOT), tr("About &OpenPilot GCS..."), this); #endif - cmd = am->registerAction(tmpaction, Constants::ABOUT_OPENPILOTGCS, m_globalContext); - mhelp->addAction(cmd, Constants::G_HELP_ABOUT); - tmpaction->setEnabled(true); + // cmd = am->registerAction(tmpaction, Constants::ABOUT_OPENPILOTGCS, m_globalContext); + // mhelp->addAction(cmd, Constants::G_HELP_ABOUT); + // tmpaction->setEnabled(true); #ifdef Q_WS_MAC - cmd->action()->setMenuRole(QAction::ApplicationSpecificRole); + // cmd->action()->setMenuRole(QAction::ApplicationSpecificRole); #endif connect(tmpaction, SIGNAL(triggered()), this, SLOT(aboutOpenPilotGCS())); @@ -818,7 +818,7 @@ void MainWindow::registerDefaultActions() connect(tmpaction, SIGNAL(triggered()), this, SLOT(aboutPlugins())); //Credits Action - tmpaction = new QAction(QIcon(Constants::ICON_PLUGIN), tr("About &Authors..."), this); + tmpaction = new QAction(QIcon(Constants::ICON_PLUGIN), tr("About &OpenPilot..."), this); cmd = am->registerAction(tmpaction, Constants::ABOUT_AUTHORS, m_globalContext); mhelp->addAction(cmd, Constants::G_HELP_ABOUT); tmpaction->setEnabled(true); diff --git a/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml b/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml new file mode 100644 index 000000000..b7cf20ee8 --- /dev/null +++ b/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml @@ -0,0 +1,106 @@ + /**************************************************************************** + ** + ** Copyright (C) 2011 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$ + ** + ****************************************************************************/ + + import QtQuick 1.1 + import QtWebKit 1.0 + + TabWidget { + id: tabs + width: 640; height: 480 + + Rectangle { + property string title: "OpenPilot GCS" + anchors.fill: parent + color: "#e3e3e3" + + Rectangle { + anchors.fill: parent; anchors.margins: 20 + color: "#e3e3e3" + Flickable { + anchors.fill: parent + anchors.centerIn: parent + Text { + id: versionLabel + width: parent.width - 20 + anchors.centerIn: parent; horizontalAlignment: Qt.AlignLeft + font.pixelSize: 12 + wrapMode: Text.WordWrap + text: version + } + } + } + } + + // Rectangle { + // property string title: "Plugins" + // anchors.fill: parent + // color: "#e3e3e3" + // + // Rectangle { + // anchors.fill: parent; anchors.margins: 20 + // color: "#7fff7f" + // Text { + // width: parent.width - 20 + // anchors.centerIn: parent; horizontalAlignment: Qt.AlignHCenter + // text: "Flower stems are green" + // font.pixelSize: 20 + // wrapMode: Text.WordWrap + // } + // } + // } + + Rectangle { + property string title: "Authors" + anchors.fill: parent; color: "#e3e3e3" + + Rectangle { + anchors.fill: parent; anchors.margins: 20 + color: "#e3e3e3" + + FlickableWebView { + id: webView + url: "../CREDITS.html" + // onProgressChanged: header.urlChanged = false + anchors { top: parent.top; left: parent.left; right: parent.right; bottom: parent.bottom } + } + } + } + } + \ No newline at end of file diff --git a/ground/openpilotgcs/src/plugins/coreplugin/qml/FlickableWebView.qml b/ground/openpilotgcs/src/plugins/coreplugin/qml/FlickableWebView.qml new file mode 100644 index 000000000..3043ce88a --- /dev/null +++ b/ground/openpilotgcs/src/plugins/coreplugin/qml/FlickableWebView.qml @@ -0,0 +1,196 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** 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, Nokia gives you certain additional +** rights. These rights are described in the Nokia 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. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +Flickable { + property alias title: webView.title + property alias icon: webView.icon + property alias progress: webView.progress + property alias url: webView.url + property alias back: webView.back + property alias stop: webView.stop + property alias reload: webView.reload + property alias forward: webView.forward + + id: flickable + width: parent.width + contentWidth: Math.max(parent.width,webView.width) + contentHeight: Math.max(parent.height,webView.height) + // anchors.top: headerSpace.bottom + anchors.bottom: parent.top + anchors.left: parent.left + anchors.right: parent.right + pressDelay: 200 + clip: true + + onWidthChanged : { + // Expand (but not above 1:1) if otherwise would be smaller that available width. + if (width > webView.width*webView.contentsScale && webView.contentsScale < 1.0) + webView.contentsScale = width / webView.width * webView.contentsScale; + } + + WebView { + id: webView + transformOrigin: Item.TopLeft + + function fixUrl(url) + { + if (url == "") return url + if (url[0] == "/") return "file://"+url + if (url.indexOf(":")<0) { + if (url.indexOf(".")<0 || url.indexOf(" ")>=0) { + // Fall back to a search engine; hard-code Wikipedia + return "http://en.wikipedia.org/w/index.php?search="+url + } else { + return "http://"+url + } + } + return url + } + + url: fixUrl(webBrowser.urlString) + smooth: false // We don't want smooth scaling, since we only scale during (fast) transitions + focus: true + + onAlert: console.log(message) + + function doZoom(zoom,centerX,centerY) + { + if (centerX) { + var sc = zoom*contentsScale; + scaleAnim.to = sc; + flickVX.from = flickable.contentX + flickVX.to = Math.max(0,Math.min(centerX-flickable.width/2,webView.width*sc-flickable.width)) + finalX.value = flickVX.to + flickVY.from = flickable.contentY + flickVY.to = Math.max(0,Math.min(centerY-flickable.height/2,webView.height*sc-flickable.height)) + finalY.value = flickVY.to + quickZoom.start() + } + } + + Keys.onLeftPressed: webView.contentsScale -= 0.1 + Keys.onRightPressed: webView.contentsScale += 0.1 + + preferredWidth: flickable.width + preferredHeight: flickable.height + contentsScale: 1 + onContentsSizeChanged: { + // zoom out + contentsScale = Math.min(1,flickable.width / contentsSize.width) + } + onUrlChanged: { + // got to topleft + flickable.contentX = 0 + flickable.contentY = 0 + // if (url != null) { header.editUrl = url.toString(); } + } + onDoubleClick: { + if (!heuristicZoom(clickX,clickY,2.5)) { + var zf = flickable.width / contentsSize.width + if (zf >= contentsScale) + zf = 2.0*contentsScale // zoom in (else zooming out) + doZoom(zf,clickX*zf,clickY*zf) + } + } + + SequentialAnimation { + id: quickZoom + + PropertyAction { + target: webView + property: "renderingEnabled" + value: false + } + ParallelAnimation { + NumberAnimation { + id: scaleAnim + target: webView + property: "contentsScale" + // the to property is set before calling + easing.type: Easing.Linear + duration: 200 + } + NumberAnimation { + id: flickVX + target: flickable + property: "contentX" + easing.type: Easing.Linear + duration: 200 + from: 0 // set before calling + to: 0 // set before calling + } + NumberAnimation { + id: flickVY + target: flickable + property: "contentY" + easing.type: Easing.Linear + duration: 200 + from: 0 // set before calling + to: 0 // set before calling + } + } + // Have to set the contentXY, since the above 2 + // size changes may have started a correction if + // contentsScale < 1.0. + PropertyAction { + id: finalX + target: flickable + property: "contentX" + value: 0 // set before calling + } + PropertyAction { + id: finalY + target: flickable + property: "contentY" + value: 0 // set before calling + } + PropertyAction { + target: webView + property: "renderingEnabled" + value: true + } + } + onZoomTo: doZoom(zoom,centerX,centerY) + } +} diff --git a/ground/openpilotgcs/src/plugins/coreplugin/qml/TabWidget.qml b/ground/openpilotgcs/src/plugins/coreplugin/qml/TabWidget.qml new file mode 100644 index 000000000..b6ce6bd41 --- /dev/null +++ b/ground/openpilotgcs/src/plugins/coreplugin/qml/TabWidget.qml @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2011 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$ +** +****************************************************************************/ + +import QtQuick 1.1 + +Item { + id: tabWidget + + // Setting the default property to stack.children means any child items + // of the TabWidget are actually added to the 'stack' item's children. + // See the "Property Binding" + // documentation for details on default properties. + default property alias content: stack.children + + property int current: 0 + + onCurrentChanged: setOpacities() + Component.onCompleted: setOpacities() + + function setOpacities() { + for (var i = 0; i < stack.children.length; ++i) { + stack.children[i].opacity = (i == current ? 1 : 0) + } + } + + Row { + id: header + + Repeater { + model: stack.children.length + delegate: Rectangle { + width: tabWidget.width / stack.children.length; height: 36 + + Rectangle { + width: parent.width; height: 1 + anchors { bottom: parent.bottom; bottomMargin: 1 } + color: "#acb2c2" + } + BorderImage { + anchors { fill: parent; leftMargin: 2; topMargin: 5; rightMargin: 1 } + border { left: 7; right: 7 } + source: "images/tab.png" + visible: tabWidget.current == index + } + Text { + horizontalAlignment: Qt.AlignHCenter; verticalAlignment: Qt.AlignVCenter + anchors.fill: parent + text: stack.children[index].title + elide: Text.ElideRight + font.bold: tabWidget.current == index + } + MouseArea { + anchors.fill: parent + onClicked: tabWidget.current = index + } + } + } + } + + Item { + id: stack + width: tabWidget.width + anchors.top: header.bottom; anchors.bottom: tabWidget.bottom + } +} \ No newline at end of file diff --git a/ground/openpilotgcs/src/plugins/coreplugin/qml/images/tab.png b/ground/openpilotgcs/src/plugins/coreplugin/qml/images/tab.png new file mode 100644 index 0000000000000000000000000000000000000000..ad8021605fa37dcbb166e7a1b6681c451531ee8a GIT binary patch literal 507 zcmVPx#0%A)?L;(MXkIcUS000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igM#0xunX zk)P23001I%MObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakAa8CUVIWOmV~41BLjV8) zQAtEWR4C7NlCe(1KoCUVuFpY%0wI9}9{>%4pWw@BsVPAM2`QA2ASKx6U5Y!~=frGj z&&8t~losM-cN@-niq88b?U;$p;JW5#-CCcp$RH8D~kwGbdc5 z@7xku58O174L7VX^oJuFl<7F27(2p-V|FMuS2oNM2@*$oBf&g6tc*gp$9~{RBKp0tGfOMdQvb)4i z;#K|<$buY{?Y)BJn39wCt14_%=wV)%RCELg-Jp=vTDqj*xq079p>$-7sFReF^bzc}rfIZsWCvmhAC x0;9ochfszPx!@6LykW%>!HQc%7MxO3^9RB*qNy5mp=SU9002ovPDHLkV1nx1%P{}| literal 0 HcmV?d00001 From 24068a66386f604d52c1fe7f2b2d671f25fc29ce Mon Sep 17 00:00:00 2001 From: Kevin Vertucio Date: Tue, 22 Jan 2013 14:05:02 -0500 Subject: [PATCH 05/39] set dialog windowFlags for a frameless window. Signed-off-by: Kevin Vertucio --- .../openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp | 6 +++--- .../src/plugins/coreplugin/qml/AboutDialog.qml | 8 +++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp b/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp index 67b3c28f6..dcdb6970a 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp @@ -58,9 +58,9 @@ AuthorsDialog::AuthorsDialog(QWidget *parent) // We need to set the window icon explicitly here since for some reason the // application icon isn't used when the size of the dialog is fixed (at least not on X11/GNOME) - setWindowIcon(QIcon(":/core/images/openpilot_logo_32.png")); - setWindowTitle(tr("About OpenPilot")); - setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + // setWindowIcon(QIcon(":/core/images/openpilot_logo_32.png")); + // setWindowTitle(tr("About OpenPilot")); + setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog); //This loads a QML doc containing a Tabbed view QDeclarativeView *view = new QDeclarativeView(this); view->setSource(QUrl("qrc:/core/qml/AboutDialog.qml")); diff --git a/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml b/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml index b7cf20ee8..a848fd9b7 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml +++ b/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml @@ -41,10 +41,12 @@ import QtQuick 1.1 import QtWebKit 1.0 + // This is a tabbed pane element. Add a nested Rectangle to add a tab. + TabWidget { id: tabs width: 640; height: 480 - + // This tab is for the GCS version information Rectangle { property string title: "OpenPilot GCS" anchors.fill: parent @@ -67,7 +69,7 @@ } } } - +// This is a stub for the Plugins if I can ever figure that out. // Rectangle { // property string title: "Plugins" // anchors.fill: parent @@ -85,7 +87,7 @@ // } // } // } - +// This tab is for the authors/contributors/credits Rectangle { property string title: "Authors" anchors.fill: parent; color: "#e3e3e3" From 0cfed606380bdf83bb56ba9592abca7c4675a06a Mon Sep 17 00:00:00 2001 From: Kevin Vertucio Date: Thu, 24 Jan 2013 07:09:36 -0500 Subject: [PATCH 06/39] added OP Icon to About GCS Version tab Signed-off-by: Kevin Vertucio --- .../src/plugins/coreplugin/authorsdialog.cpp | 6 +- .../plugins/coreplugin/qml/AboutDialog.qml | 136 +++++++++--------- 2 files changed, 75 insertions(+), 67 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp b/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp index dcdb6970a..67b3c28f6 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp @@ -58,9 +58,9 @@ AuthorsDialog::AuthorsDialog(QWidget *parent) // We need to set the window icon explicitly here since for some reason the // application icon isn't used when the size of the dialog is fixed (at least not on X11/GNOME) - // setWindowIcon(QIcon(":/core/images/openpilot_logo_32.png")); - // setWindowTitle(tr("About OpenPilot")); - setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog); + setWindowIcon(QIcon(":/core/images/openpilot_logo_32.png")); + setWindowTitle(tr("About OpenPilot")); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); //This loads a QML doc containing a Tabbed view QDeclarativeView *view = new QDeclarativeView(this); view->setSource(QUrl("qrc:/core/qml/AboutDialog.qml")); diff --git a/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml b/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml index a848fd9b7..a6200ba73 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml +++ b/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml @@ -41,68 +41,76 @@ import QtQuick 1.1 import QtWebKit 1.0 - // This is a tabbed pane element. Add a nested Rectangle to add a tab. - - TabWidget { - id: tabs - width: 640; height: 480 - // This tab is for the GCS version information - Rectangle { - property string title: "OpenPilot GCS" - anchors.fill: parent - color: "#e3e3e3" - - Rectangle { - anchors.fill: parent; anchors.margins: 20 - color: "#e3e3e3" - Flickable { - anchors.fill: parent - anchors.centerIn: parent - Text { - id: versionLabel - width: parent.width - 20 - anchors.centerIn: parent; horizontalAlignment: Qt.AlignLeft - font.pixelSize: 12 - wrapMode: Text.WordWrap - text: version - } - } - } - } -// This is a stub for the Plugins if I can ever figure that out. - // Rectangle { - // property string title: "Plugins" - // anchors.fill: parent - // color: "#e3e3e3" - // - // Rectangle { - // anchors.fill: parent; anchors.margins: 20 - // color: "#7fff7f" - // Text { - // width: parent.width - 20 - // anchors.centerIn: parent; horizontalAlignment: Qt.AlignHCenter - // text: "Flower stems are green" - // font.pixelSize: 20 - // wrapMode: Text.WordWrap - // } - // } - // } -// This tab is for the authors/contributors/credits - Rectangle { - property string title: "Authors" - anchors.fill: parent; color: "#e3e3e3" - - Rectangle { - anchors.fill: parent; anchors.margins: 20 - color: "#e3e3e3" - - FlickableWebView { - id: webView - url: "../CREDITS.html" - // onProgressChanged: header.urlChanged = false - anchors { top: parent.top; left: parent.left; right: parent.right; bottom: parent.bottom } + // This is a tabbed pane element. Add a nested Rectangle to add a tab. + + TabWidget { + id: tabs + width: 640; height: 480 + // This tab is for the GCS version information + Rectangle { + property string title: "OpenPilot GCS" + anchors.fill: parent + color: "#e3e3e3" + + Rectangle { + anchors.fill: parent; anchors.margins: 20 + color: "#e3e3e3" + Image { + source: "../images/openpilot_logo_128.png" + x: 0; y: 0 + z: 100 + fillMode: Image.PreserveAspectFit + } + Flickable { + anchors.fill: parent + anchors.centerIn: parent + Text { + id: versionLabel + x: 156; y: 0 + width: 430; height: 379 + horizontalAlignment: Qt.AlignLeft + font.pixelSize: 12 + wrapMode: Text.WordWrap + text: version + } } - } - } - } - \ No newline at end of file + } + } + // This is a stub for the Plugins. + // Rectangle { + // property string title: "Plugins" + // anchors.fill: parent + // color: "#e3e3e3" + // + // Rectangle { + // anchors.fill: parent; anchors.margins: 20 + // color: "#7fff7f" + // Text { + // width: parent.width - 20 + // anchors.centerIn: parent; horizontalAlignment: Qt.AlignHCenter + // text: "Flower stems are green" + // font.pixelSize: 20 + // wrapMode: Text.WordWrap + // } + // } + // } + // This tab is for the authors/contributors/credits + Rectangle { + property string title: "Authors" + anchors.fill: parent; color: "#e3e3e3" + + Rectangle { + anchors.fill: parent; anchors.margins: 20 + color: "#e3e3e3" + + FlickableWebView { + id: webView + z: 0 + url: "../CREDITS.html" + // onProgressChanged: header.urlChanged = false + anchors { top: parent.top; left: parent.left; right: parent.right; bottom: parent.bottom } + } + } + } + } + From bb999ae44f8a266dc30d59efb322c38c9e12896d Mon Sep 17 00:00:00 2001 From: Kevin Vertucio Date: Thu, 24 Jan 2013 08:04:55 -0500 Subject: [PATCH 07/39] cleanup formatting Signed-off-by: Kevin Vertucio --- .../plugins/coreplugin/qml/AboutDialog.qml | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml b/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml index a6200ba73..c8574c48b 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml +++ b/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml @@ -65,13 +65,14 @@ anchors.fill: parent anchors.centerIn: parent Text { - id: versionLabel - x: 156; y: 0 - width: 430; height: 379 - horizontalAlignment: Qt.AlignLeft - font.pixelSize: 12 - wrapMode: Text.WordWrap - text: version + id: versionLabel + x: 156; y: 0 + width: 430; height: 379 + horizontalAlignment: Qt.AlignLeft + font.pixelSize: 12 + wrapMode: Text.WordWrap + // @var version exposed in authorsdialog.cpp + text: version } } } @@ -88,7 +89,6 @@ // Text { // width: parent.width - 20 // anchors.centerIn: parent; horizontalAlignment: Qt.AlignHCenter - // text: "Flower stems are green" // font.pixelSize: 20 // wrapMode: Text.WordWrap // } @@ -96,19 +96,16 @@ // } // This tab is for the authors/contributors/credits Rectangle { - property string title: "Authors" - anchors.fill: parent; color: "#e3e3e3" - - Rectangle { - anchors.fill: parent; anchors.margins: 20 - color: "#e3e3e3" - - FlickableWebView { - id: webView - z: 0 - url: "../CREDITS.html" - // onProgressChanged: header.urlChanged = false - anchors { top: parent.top; left: parent.left; right: parent.right; bottom: parent.bottom } + property string title: "Authors" + anchors.fill: parent; color: "#e3e3e3" + Rectangle { + anchors.fill: parent; anchors.margins: 20 + color: "#e3e3e3" + FlickableWebView { + id: webView + z: 0 + url: "../CREDITS.html" + anchors { top: parent.top; left: parent.left; right: parent.right; bottom: parent.bottom } } } } From 813aaf5d852c73f8ea5fc9642b3baa6ae19fe800 Mon Sep 17 00:00:00 2001 From: filnet Date: Thu, 24 Jan 2013 03:53:24 +0100 Subject: [PATCH 08/39] OP-682 fixed two crashes on firmware uploader gadget. crash 1 : would happen when clicking Halt and then Boot as soon as the Boot button became enabled. crash 2 : would happen when clicking Boot and then quickly pressing then Open button. --- .../src/plugins/uploader/devicewidget.cpp | 2 ++ .../src/plugins/uploader/uploadergadgetwidget.cpp | 12 ++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp b/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp index e9d33e784..47433cebb 100644 --- a/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp +++ b/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp @@ -144,6 +144,8 @@ void deviceWidget::populate() void deviceWidget::freeze() { myDevice->description->setEnabled(false); + myDevice->pbLoad->setEnabled(false); + myDevice->youdont->setEnabled(false); myDevice->updateButton->setEnabled(false); myDevice->retrieveButton->setEnabled(false); } diff --git a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp index d4ef26ba6..94507ac7b 100755 --- a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp +++ b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp @@ -398,7 +398,7 @@ void UploaderGadgetWidget::systemReset() delete dfu; dfu = NULL; } - m_config->textBrowser->clear(); + clearLog(); log("Board Reset initiated."); goToBootloader(); } @@ -470,8 +470,10 @@ void UploaderGadgetWidget::commonSystemBoot(bool safeboot) // Freeze the tabs, they are not useful anymore and their buttons // will cause segfaults or weird stuff if we use them. for (int i=0; i< m_config->systemElements->count(); i++) { - deviceWidget *qw = (deviceWidget*)m_config->systemElements->widget(i); - qw->freeze(); + deviceWidget *qw = dynamic_cast(m_config->systemElements->widget(i)); + if (qw) { + qw->freeze(); + } } } currentStep = IAP_STATE_READY; @@ -479,6 +481,7 @@ void UploaderGadgetWidget::commonSystemBoot(bool safeboot) delete dfu; // Frees up the USB/Serial port too dfu = NULL; } + bool UploaderGadgetWidget::autoUpdateCapable() { return QDir(":/build").exists(); @@ -766,9 +769,9 @@ void UploaderGadgetWidget::uploadEnded(bool succeed) */ void UploaderGadgetWidget::log(QString str) { + qDebug() << str; m_config->textBrowser->append(str); m_config->textBrowser->repaint(); - } void UploaderGadgetWidget::clearLog() @@ -815,6 +818,7 @@ void UploaderGadgetWidget::error(QString errorString, int errorNumber) msgBox.exec(); m_config->boardStatus->setText(errorString); } + /** Shows a message box with an information string. From e8659cf9d5af1b11d30fa48d1877816dac0a2729 Mon Sep 17 00:00:00 2001 From: filnet Date: Sat, 26 Jan 2013 15:10:30 +0100 Subject: [PATCH 09/39] OP-682 added some comments --- .../src/plugins/uploader/uploadergadgetwidget.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp index 94507ac7b..4b258789b 100755 --- a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp +++ b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp @@ -470,8 +470,13 @@ void UploaderGadgetWidget::commonSystemBoot(bool safeboot) // Freeze the tabs, they are not useful anymore and their buttons // will cause segfaults or weird stuff if we use them. for (int i=0; i< m_config->systemElements->count(); i++) { + // OP-682 arriving here too "early" (before the devices are refreshed) was leading to a crash + // OP-682 the crash was due to an unchecked cast in the line below that would cast a RunningDeviceGadget to a DeviceGadget deviceWidget *qw = dynamic_cast(m_config->systemElements->widget(i)); if (qw) { + // OP-682 fixed a second crash by disabling *all* buttons in the device widget + // disabling the buttons is only half of the solution as even if the buttons are enabled + // the app should not crash qw->freeze(); } } From 3e9c81985001115536fbf2d4a55fbf1fc14c245d Mon Sep 17 00:00:00 2001 From: filnet Date: Mon, 28 Jan 2013 23:13:47 +0100 Subject: [PATCH 10/39] OP-803 more cleanups --- .../plugins/coreplugin/uavgadgetdecorator.cpp | 16 +++++++--------- .../coreplugin/uavgadgetinstancemanager.cpp | 13 +++++++++++-- .../uavgadgetmanager/uavgadgetview.cpp | 3 +++ 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetdecorator.cpp b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetdecorator.cpp index 9857831c0..78a98a210 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetdecorator.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetdecorator.cpp @@ -45,8 +45,6 @@ UAVGadgetDecorator::UAVGadgetDecorator(IUAVGadget *gadget, QListaddItem(config->name()); connect(m_toolbar, SIGNAL(activated(int)), this, SLOT(loadConfiguration(int))); -// if (m_configurations->count() > 0) -// loadConfiguration(0); updateToolbar(); } @@ -57,7 +55,7 @@ UAVGadgetDecorator::~UAVGadgetDecorator() } void UAVGadgetDecorator::loadConfiguration(int index) { - IUAVGadgetConfiguration* config = m_configurations->at(index); + IUAVGadgetConfiguration *config = m_configurations->at(index); loadConfiguration(config); } @@ -70,13 +68,13 @@ void UAVGadgetDecorator::loadConfiguration(IUAVGadgetConfiguration *config) } -void UAVGadgetDecorator::configurationChanged(IUAVGadgetConfiguration* config) +void UAVGadgetDecorator::configurationChanged(IUAVGadgetConfiguration *config) { if (config == m_activeConfiguration) loadConfiguration(config); } -void UAVGadgetDecorator::configurationAdded(IUAVGadgetConfiguration* config) +void UAVGadgetDecorator::configurationAdded(IUAVGadgetConfiguration *config) { if (config->classId() != classId()) return; @@ -85,7 +83,7 @@ void UAVGadgetDecorator::configurationAdded(IUAVGadgetConfiguration* config) updateToolbar(); } -void UAVGadgetDecorator::configurationToBeDeleted(IUAVGadgetConfiguration* config) +void UAVGadgetDecorator::configurationToBeDeleted(IUAVGadgetConfiguration *config) { if (config->classId() != classId()) return; @@ -97,7 +95,7 @@ void UAVGadgetDecorator::configurationToBeDeleted(IUAVGadgetConfiguration* confi updateToolbar(); } -void UAVGadgetDecorator::configurationNameChanged(IUAVGadgetConfiguration* config, QString oldName, QString newName) +void UAVGadgetDecorator::configurationNameChanged(IUAVGadgetConfiguration *config, QString oldName, QString newName) { if (config->classId() != classId()) return; @@ -112,14 +110,14 @@ void UAVGadgetDecorator::updateToolbar() m_toolbar->setEnabled(m_toolbar->count() > 1); } -void UAVGadgetDecorator::saveState(QSettings* qSettings) +void UAVGadgetDecorator::saveState(QSettings *qSettings) { if (m_activeConfiguration) { qSettings->setValue("activeConfiguration", m_activeConfiguration->name()); } } -void UAVGadgetDecorator::restoreState(QSettings* qSettings) +void UAVGadgetDecorator::restoreState(QSettings *qSettings) { QString configName = qSettings->value("activeConfiguration").toString(); foreach (IUAVGadgetConfiguration *config, *m_configurations) { diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp index 3393dc4b5..a20612c59 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp @@ -239,8 +239,9 @@ void UAVGadgetInstanceManager::createOptionsPages() m_pm->removeObject(m_optionsPages.takeLast()); } - foreach (IUAVGadgetConfiguration *config, m_configurations) - { + QMutableListIterator ite(m_configurations); + while (ite.hasNext()) { + IUAVGadgetConfiguration *config = ite.next(); IUAVGadgetFactory *f = factory(config->classId()); IOptionsPage *p = f->createOptionsPage(config); if (p) { @@ -249,6 +250,14 @@ void UAVGadgetInstanceManager::createOptionsPages() m_optionsPages.append(page); m_pm->addObject(page); } + else { + qWarning() + << "UAVGadgetInstanceManager::createOptionsPages - failed to create options page for configuration " + + config->classId() + ":" + config->name() + ", configuration will be removed."; + // The m_optionsPages list and m_configurations list must be in synch otherwise nasty issues happen later + // so if we fail to create an options page we must remove the associated configuration + ite.remove(); + } } } diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp index 3cf7a0387..5a380c576 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp @@ -230,6 +230,9 @@ void UAVGadgetView::updateToolBar() void UAVGadgetView::listSelectionActivated(int index) { + if (index < 0 || index >= m_uavGadgetList->count()) + index = m_defaultIndex; + QString classId = m_uavGadgetList->itemData(index).toString(); if (m_uavGadget && (m_uavGadget->classId() == classId)) return; From d03db9c6d1492b86cd8f9bee04c45d75ecf2079d Mon Sep 17 00:00:00 2001 From: filnet Date: Tue, 29 Jan 2013 23:12:55 +0100 Subject: [PATCH 11/39] OP-803 remove spurious commit --- .../plugins/coreplugin/uavgadgetinstancemanager.cpp | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp index a20612c59..3393dc4b5 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp @@ -239,9 +239,8 @@ void UAVGadgetInstanceManager::createOptionsPages() m_pm->removeObject(m_optionsPages.takeLast()); } - QMutableListIterator ite(m_configurations); - while (ite.hasNext()) { - IUAVGadgetConfiguration *config = ite.next(); + foreach (IUAVGadgetConfiguration *config, m_configurations) + { IUAVGadgetFactory *f = factory(config->classId()); IOptionsPage *p = f->createOptionsPage(config); if (p) { @@ -250,14 +249,6 @@ void UAVGadgetInstanceManager::createOptionsPages() m_optionsPages.append(page); m_pm->addObject(page); } - else { - qWarning() - << "UAVGadgetInstanceManager::createOptionsPages - failed to create options page for configuration " - + config->classId() + ":" + config->name() + ", configuration will be removed."; - // The m_optionsPages list and m_configurations list must be in synch otherwise nasty issues happen later - // so if we fail to create an options page we must remove the associated configuration - ite.remove(); - } } } From e27a07631e7a3615d5b83f328cebf9271f0767e8 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sun, 17 Feb 2013 02:02:12 +0100 Subject: [PATCH 12/39] op-848 MPU6000 support user configurabe accel/gyro scales and filter bandwidth. board definitions can override any of this settings for special applications. Also include cleanup from "magic numbers" and fix for inverted ranges --- flight/CopterControl/Makefile | 1 + flight/CopterControl/System/pios_board.c | 6 +- flight/PiOS/Common/pios_mpu6000.c | 261 +++++++++++++----- flight/PiOS/inc/pios_mpu6000.h | 7 +- flight/RevoMini/System/pios_board.c | 6 +- flight/RevoMini/UAVObjects.inc | 2 +- flight/Revolution/System/pios_board.c | 6 +- flight/Revolution/UAVObjects.inc | 1 + .../src/plugins/uavobjects/uavobjects.pro | 6 +- .../uavobjectdefinition/mpu6000settings.xml | 38 +++ 10 files changed, 245 insertions(+), 89 deletions(-) create mode 100644 shared/uavobjectdefinition/mpu6000settings.xml diff --git a/flight/CopterControl/Makefile b/flight/CopterControl/Makefile index 9b46bead1..dc20ea525 100644 --- a/flight/CopterControl/Makefile +++ b/flight/CopterControl/Makefile @@ -233,6 +233,7 @@ SRC += $(OPUAVSYNTHDIR)/ratedesired.c SRC += $(OPUAVSYNTHDIR)/baroaltitude.c SRC += $(OPUAVSYNTHDIR)/txpidsettings.c SRC += $(OPUAVSYNTHDIR)/airspeedactual.c +SRC += $(OPUAVSYNTHDIR)/mpu6000settings.c endif diff --git a/flight/CopterControl/System/pios_board.c b/flight/CopterControl/System/pios_board.c index 057767105..20f8e49a9 100644 --- a/flight/CopterControl/System/pios_board.c +++ b/flight/CopterControl/System/pios_board.c @@ -117,9 +117,9 @@ static const struct pios_mpu6000_cfg pios_mpu6000_cfg = { .interrupt_en = PIOS_MPU6000_INTEN_DATA_RDY, .User_ctl = PIOS_MPU6000_USERCTL_FIFO_EN | PIOS_MPU6000_USERCTL_DIS_I2C, .Pwr_mgmt_clk = PIOS_MPU6000_PWRMGMT_PLL_X_CLK, - .accel_range = PIOS_MPU6000_ACCEL_8G, - .gyro_range = PIOS_MPU6000_SCALE_500_DEG, - .filter = PIOS_MPU6000_LOWPASS_256_HZ, + .accel_range = PIOS_MPU6000_ACCEL_FROM_SETTINGS, + .gyro_range = PIOS_MPU6000_SCALE_FROM_SETTINGS, + .filter = PIOS_MPU6000_LOWPASS_FROM_SETTINGS, .orientation = PIOS_MPU6000_TOP_180DEG }; #endif /* PIOS_INCLUDE_MPU6000 */ diff --git a/flight/PiOS/Common/pios_mpu6000.c b/flight/PiOS/Common/pios_mpu6000.c index f62d09859..78ba7415d 100644 --- a/flight/PiOS/Common/pios_mpu6000.c +++ b/flight/PiOS/Common/pios_mpu6000.c @@ -31,7 +31,7 @@ /* Project Includes */ #include "pios.h" - +#include "mpu6000settings.h" #if defined(PIOS_INCLUDE_MPU6000) #include "fifo_buffer.h" @@ -48,6 +48,8 @@ struct mpu6000_dev { uint32_t slave_num; xQueueHandle queue; const struct pios_mpu6000_cfg * cfg; + enum pios_mpu6000_range gyro_range; + enum pios_mpu6000_accel_range accel_range; enum pios_mpu6000_dev_magic magic; }; @@ -62,6 +64,10 @@ static void PIOS_MPU6000_Config(struct pios_mpu6000_cfg const * cfg); static int32_t PIOS_MPU6000_SetReg(uint8_t address, uint8_t buffer); static int32_t PIOS_MPU6000_GetReg(uint8_t address); +static uint8_t getGyroRange(enum pios_mpu6000_range range); +static uint8_t getAccelRange(enum pios_mpu6000_accel_range accel); +static uint8_t getFilterSetting(enum pios_mpu6000_filter filter); + #define DEG_TO_RAD (M_PI / 180.0) #define GRAV 9.81f @@ -137,15 +143,24 @@ static void PIOS_MPU6000_Config(struct pios_mpu6000_cfg const * cfg) PIOS_MPU6000_Test(); + //initialize settings for acc/gyro Scale and filter + Mpu6000SettingsInitialize(); + // Reset chip - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_PWR_MGMT_REG, 0x80) != 0); + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_PWR_MGMT_REG, PIOS_MPU6000_PWRMGMT_IMU_RST) != 0); PIOS_DELAY_WaitmS(300); // Reset chip and fifo - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_USER_CTRL_REG, 0x80 | 0x01 | 0x02 | 0x04) != 0); + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_USER_CTRL_REG, + PIOS_MPU6000_USERCTL_GYRO_RST | + PIOS_MPU6000_USERCTL_SIG_COND | + PIOS_MPU6000_USERCTL_FIFO_RST) != 0); // Wait for reset to finish - while (PIOS_MPU6000_GetReg(PIOS_MPU6000_USER_CTRL_REG) & 0x07); + while (PIOS_MPU6000_GetReg(PIOS_MPU6000_USER_CTRL_REG) & + (PIOS_MPU6000_USERCTL_GYRO_RST | + PIOS_MPU6000_USERCTL_SIG_COND | + PIOS_MPU6000_USERCTL_FIFO_RST)); //Power management configuration while (PIOS_MPU6000_SetReg(PIOS_MPU6000_PWR_MGMT_REG, cfg->Pwr_mgmt_clk) != 0) ; @@ -158,8 +173,9 @@ static void PIOS_MPU6000_Config(struct pios_mpu6000_cfg const * cfg) // FIFO storage #if defined(PIOS_MPU6000_ACCEL) - // Set the accel scale - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_ACCEL_CFG_REG, cfg->accel_range) != 0); + // Set the accel range + dev->accel_range = getAccelRange(cfg->accel_range); + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_ACCEL_CFG_REG, dev->accel_range) != 0); while (PIOS_MPU6000_SetReg(PIOS_MPU6000_FIFO_EN_REG, cfg->Fifo_store | PIOS_MPU6000_ACCEL_OUT) != 0); #else @@ -170,10 +186,13 @@ static void PIOS_MPU6000_Config(struct pios_mpu6000_cfg const * cfg) while (PIOS_MPU6000_SetReg(PIOS_MPU6000_SMPLRT_DIV_REG, cfg->Smpl_rate_div) != 0) ; // Digital low-pass filter and scale - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_DLPF_CFG_REG, cfg->filter) != 0) ; + uint8_t filterSetting; + filterSetting = getFilterSetting(cfg->filter); + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_DLPF_CFG_REG, filterSetting) != 0) ; - // Digital low-pass filter and scale - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_GYRO_CFG_REG, cfg->gyro_range) != 0) ; + // Gyro range + dev->gyro_range = getGyroRange(cfg->gyro_range); + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_GYRO_CFG_REG, dev->gyro_range) != 0) ; // Interrupt configuration while (PIOS_MPU6000_SetReg(PIOS_MPU6000_USER_CTRL_REG, cfg->User_ctl) != 0) ; @@ -322,13 +341,14 @@ xQueueHandle PIOS_MPU6000_GetQueue() float PIOS_MPU6000_GetScale() { - switch (dev->cfg->gyro_range) { + switch (dev->gyro_range) { case PIOS_MPU6000_SCALE_250_DEG: return 1.0f / 131.0f; case PIOS_MPU6000_SCALE_500_DEG: return 1.0f / 65.5f; case PIOS_MPU6000_SCALE_1000_DEG: return 1.0f / 32.8f; + case PIOS_MPU6000_SCALE_FROM_SETTINGS: case PIOS_MPU6000_SCALE_2000_DEG: return 1.0f / 16.4f; } @@ -337,12 +357,13 @@ float PIOS_MPU6000_GetScale() float PIOS_MPU6000_GetAccelScale() { - switch (dev->cfg->accel_range) { + switch (dev->accel_range) { case PIOS_MPU6000_ACCEL_2G: return GRAV / 16384.0f; case PIOS_MPU6000_ACCEL_4G: return GRAV / 8192.0f; case PIOS_MPU6000_ACCEL_8G: + case PIOS_MPU6000_ACCEL_FROM_SETTINGS: return GRAV / 4096.0f; case PIOS_MPU6000_ACCEL_16G: return GRAV / 2048.0f; @@ -411,20 +432,20 @@ bool PIOS_MPU6000_IRQHandler(void) mpu6000_interval_us = PIOS_DELAY_DiffuS(timeval); timeval = PIOS_DELAY_GetRaw(); - if(!mpu6000_configured) + if (!mpu6000_configured) return false; mpu6000_count = PIOS_MPU6000_FifoDepth(); - if(mpu6000_count < sizeof(struct pios_mpu6000_data)) + if (mpu6000_count < sizeof(struct pios_mpu6000_data)) return false; - - if(PIOS_MPU6000_ClaimBus() != 0) + + if (PIOS_MPU6000_ClaimBus() != 0) return false; - - uint8_t mpu6000_send_buf[1+sizeof(struct pios_mpu6000_data)] = {PIOS_MPU6000_FIFO_REG | 0x80, 0, 0, 0, 0, 0, 0, 0, 0}; - uint8_t mpu6000_rec_buf[1+sizeof(struct pios_mpu6000_data)]; - - if(PIOS_SPI_TransferBlock(dev->spi_id, &mpu6000_send_buf[0], &mpu6000_rec_buf[0], sizeof(mpu6000_send_buf), NULL) < 0) { + + uint8_t mpu6000_send_buf[1 + sizeof(struct pios_mpu6000_data) ] = {PIOS_MPU6000_FIFO_REG | 0x80, 0, 0, 0, 0, 0, 0, 0, 0}; + uint8_t mpu6000_rec_buf[1 + sizeof(struct pios_mpu6000_data) ]; + + if (PIOS_SPI_TransferBlock(dev->spi_id, &mpu6000_send_buf[0], &mpu6000_rec_buf[0], sizeof(mpu6000_send_buf), NULL) < 0) { PIOS_MPU6000_ReleaseBus(); mpu6000_fails++; return false; @@ -437,85 +458,173 @@ bool PIOS_MPU6000_IRQHandler(void) // In the case where extras samples backed up grabbed an extra if (mpu6000_count >= (sizeof(data) * 2)) { mpu6000_fifo_backup++; - if(PIOS_MPU6000_ClaimBus() != 0) - return false; - - if(PIOS_SPI_TransferBlock(dev->spi_id, &mpu6000_send_buf[0], &mpu6000_rec_buf[0], sizeof(mpu6000_send_buf), NULL) < 0) { + if (PIOS_MPU6000_ClaimBus() != 0) + return false; + + if (PIOS_SPI_TransferBlock(dev->spi_id, &mpu6000_send_buf[0], &mpu6000_rec_buf[0], sizeof(mpu6000_send_buf), NULL) < 0) { PIOS_MPU6000_ReleaseBus(); mpu6000_fails++; return false; } - + PIOS_MPU6000_ReleaseBus(); } - + // Rotate the sensor to OP convention. The datasheet defines X as towards the right // and Y as forward. OP convention transposes this. Also the Z is defined negatively // to our convention #if defined(PIOS_MPU6000_ACCEL) // Currently we only support rotations on top so switch X/Y accordingly - switch(dev->cfg->orientation) { - case PIOS_MPU6000_TOP_0DEG: - data.accel_y = mpu6000_rec_buf[1] << 8 | mpu6000_rec_buf[2]; // chip X - data.accel_x = mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]; // chip Y - data.gyro_y = mpu6000_rec_buf[9] << 8 | mpu6000_rec_buf[10]; // chip X - data.gyro_x = mpu6000_rec_buf[11] << 8 | mpu6000_rec_buf[12]; // chip Y - break; - case PIOS_MPU6000_TOP_90DEG: - data.accel_y = -(mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]); // chip Y - data.accel_x = mpu6000_rec_buf[1] << 8 | mpu6000_rec_buf[2]; // chip X - data.gyro_y = -(mpu6000_rec_buf[11] << 8 | mpu6000_rec_buf[12]); // chip Y - data.gyro_x = mpu6000_rec_buf[9] << 8 | mpu6000_rec_buf[10]; // chip X - break; - case PIOS_MPU6000_TOP_180DEG: - data.accel_y = -(mpu6000_rec_buf[1] << 8 | mpu6000_rec_buf[2]); // chip X - data.accel_x = -(mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]); // chip Y - data.gyro_y = -(mpu6000_rec_buf[9] << 8 | mpu6000_rec_buf[10]); // chip X - data.gyro_x = -(mpu6000_rec_buf[11] << 8 | mpu6000_rec_buf[12]); // chip Y - break; - case PIOS_MPU6000_TOP_270DEG: - data.accel_y = mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]; // chip Y - data.accel_x = -(mpu6000_rec_buf[1] << 8 | mpu6000_rec_buf[2]); // chip X - data.gyro_y = mpu6000_rec_buf[11] << 8 | mpu6000_rec_buf[12]; // chip Y - data.gyro_x = -(mpu6000_rec_buf[9] << 8 | mpu6000_rec_buf[10]); // chip X - break; + switch (dev->cfg->orientation) { + case PIOS_MPU6000_TOP_0DEG: + data.accel_y = mpu6000_rec_buf[1] << 8 | mpu6000_rec_buf[2]; // chip X + data.accel_x = mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]; // chip Y + data.gyro_y = mpu6000_rec_buf[9] << 8 | mpu6000_rec_buf[10]; // chip X + data.gyro_x = mpu6000_rec_buf[11] << 8 | mpu6000_rec_buf[12]; // chip Y + break; + case PIOS_MPU6000_TOP_90DEG: + // -1 to bring it back to -32768 +32767 range + data.accel_y = -1 - (mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]); // chip Y + data.accel_x = mpu6000_rec_buf[1] << 8 | mpu6000_rec_buf[2]; // chip X + data.gyro_y = -1 - (mpu6000_rec_buf[11] << 8 | mpu6000_rec_buf[12]); // chip Y + data.gyro_x = mpu6000_rec_buf[9] << 8 | mpu6000_rec_buf[10]; // chip X + break; + case PIOS_MPU6000_TOP_180DEG: + data.accel_y = -1 - (mpu6000_rec_buf[1] << 8 | mpu6000_rec_buf[2]); // chip X + data.accel_x = -1 - (mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]); // chip Y + data.gyro_y = -1 - (mpu6000_rec_buf[9] << 8 | mpu6000_rec_buf[10]); // chip X + data.gyro_x = -1 - (mpu6000_rec_buf[11] << 8 | mpu6000_rec_buf[12]); // chip Y + break; + case PIOS_MPU6000_TOP_270DEG: + data.accel_y = mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]; // chip Y + data.accel_x = -1 - (mpu6000_rec_buf[1] << 8 | mpu6000_rec_buf[2]); // chip X + data.gyro_y = mpu6000_rec_buf[11] << 8 | mpu6000_rec_buf[12]; // chip Y + data.gyro_x = -1 - (mpu6000_rec_buf[9] << 8 | mpu6000_rec_buf[10]); // chip X + break; } - data.gyro_z = -(mpu6000_rec_buf[13] << 8 | mpu6000_rec_buf[14]); - data.accel_z = -(mpu6000_rec_buf[5] << 8 | mpu6000_rec_buf[6]); + data.gyro_z = -1 - (mpu6000_rec_buf[13] << 8 | mpu6000_rec_buf[14]); + data.accel_z = -1 - (mpu6000_rec_buf[5] << 8 | mpu6000_rec_buf[6]); data.temperature = mpu6000_rec_buf[7] << 8 | mpu6000_rec_buf[8]; #else data.gyro_x = mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]; data.gyro_y = mpu6000_rec_buf[5] << 8 | mpu6000_rec_buf[6]; - switch(dev->cfg->orientation) { - case PIOS_MPU6000_TOP_0DEG: - data.gyro_y = mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]; - data.gyro_x = mpu6000_rec_buf[5] << 8 | mpu6000_rec_buf[6]; - break; - case PIOS_MPU6000_TOP_90DEG: - data.gyro_y = -(mpu6000_rec_buf[5] << 8 | mpu6000_rec_buf[6]); // chip Y - data.gyro_x = mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]; // chip X - break; - case PIOS_MPU6000_TOP_180DEG: - data.gyro_y = -(mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]); - data.gyro_x = -(mpu6000_rec_buf[5] << 8 | mpu6000_rec_buf[6]); - break; - case PIOS_MPU6000_TOP_270DEG: - data.gyro_y = mpu6000_rec_buf[5] << 8 | mpu6000_rec_buf[6]; // chip Y - data.gyro_x = -(mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]); // chip X - break; + switch (dev->cfg->orientation) { + case PIOS_MPU6000_TOP_0DEG: + data.gyro_y = mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]; + data.gyro_x = mpu6000_rec_buf[5] << 8 | mpu6000_rec_buf[6]; + break; + case PIOS_MPU6000_TOP_90DEG: + data.gyro_y = -1 - (mpu6000_rec_buf[5] << 8 | mpu6000_rec_buf[6]); // chip Y + data.gyro_x = mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]; // chip X + break; + case PIOS_MPU6000_TOP_180DEG: + data.gyro_y = -1 - (mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]); + data.gyro_x = -1 - (mpu6000_rec_buf[5] << 8 | mpu6000_rec_buf[6]); + break; + case PIOS_MPU6000_TOP_270DEG: + data.gyro_y = mpu6000_rec_buf[5] << 8 | mpu6000_rec_buf[6]; // chip Y + data.gyro_x = -1 - (mpu6000_rec_buf[3] << 8 | mpu6000_rec_buf[4]); // chip X + break; } - data.gyro_z = -(mpu6000_rec_buf[7] << 8 | mpu6000_rec_buf[8]); + data.gyro_z = -1 - (mpu6000_rec_buf[7] << 8 | mpu6000_rec_buf[8]); data.temperature = mpu6000_rec_buf[1] << 8 | mpu6000_rec_buf[2]; #endif - + portBASE_TYPE xHigherPriorityTaskWoken; xQueueSendToBackFromISR(dev->queue, (void *) &data, &xHigherPriorityTaskWoken); - + mpu6000_irq++; - + mpu6000_time_us = PIOS_DELAY_DiffuS(timeval); - - return xHigherPriorityTaskWoken == pdTRUE; + + return xHigherPriorityTaskWoken == pdTRUE; +} + +/** + * @brief Return the gyro range setting based on config and/or mpu6000settings. + * \return the chosen gyro range + */ +static uint8_t getGyroRange(enum pios_mpu6000_range gyro) +{ + // if the setting is overridden by the board config then use the board value + if (gyro != PIOS_MPU6000_SCALE_FROM_SETTINGS) + return(uint8_t) gyro; + + uint8_t gyroSettings; + Mpu6000SettingsGyroScaleGet(&gyroSettings); + + switch (gyroSettings) { + case MPU6000SETTINGS_GYROSCALE_SCALE_250: + return PIOS_MPU6000_SCALE_250_DEG; + case MPU6000SETTINGS_GYROSCALE_SCALE_500: + return PIOS_MPU6000_SCALE_500_DEG; + case MPU6000SETTINGS_GYROSCALE_SCALE_1000: + return PIOS_MPU6000_SCALE_1000_DEG; + case MPU6000SETTINGS_GYROSCALE_SCALE_2000: + return PIOS_MPU6000_SCALE_2000_DEG; + default: + return PIOS_MPU6000_SCALE_2000_DEG; + } +} + +/** + * @brief Return the accel range setting based on config and/or mpu6000settings. + * \return the chosen accel range + */ +static uint8_t getAccelRange(enum pios_mpu6000_accel_range accel) +{ + // if the setting is overridden by the board config then use the board value + if (accel != PIOS_MPU6000_ACCEL_FROM_SETTINGS) + return (uint8_t) accel; + + uint8_t accelSetting; + Mpu6000SettingsAccelScaleGet(&accelSetting); + + switch (accelSetting) { + case MPU6000SETTINGS_ACCELSCALE_SCALE_2G: + return PIOS_MPU6000_ACCEL_2G; + case MPU6000SETTINGS_ACCELSCALE_SCALE_4G: + return PIOS_MPU6000_ACCEL_4G; + case MPU6000SETTINGS_ACCELSCALE_SCALE_8G: + return PIOS_MPU6000_ACCEL_8G; + case MPU6000SETTINGS_ACCELSCALE_SCALE_16G: + return PIOS_MPU6000_ACCEL_16G; + default: + return PIOS_MPU6000_ACCEL_8G; + } +} + +/** + * @brief Return the filter settings based on config and/or mpu6000settings. + * \return the chosen filter settings + */ +static uint8_t getFilterSetting(enum pios_mpu6000_filter filter) +{ + // if the setting is overridden by the board config then use the board value + if (filter != PIOS_MPU6000_LOWPASS_FROM_SETTINGS) + return(uint8_t) filter; + + uint8_t filterSetting; + Mpu6000SettingsFilterSettingGet(&filterSetting); + + switch (filterSetting) { + case MPU6000SETTINGS_FILTERSETTING_LOWPASS_256_HZ: + return PIOS_MPU6000_LOWPASS_256_HZ; + case MPU6000SETTINGS_FILTERSETTING_LOWPASS_188_HZ: + return PIOS_MPU6000_LOWPASS_188_HZ; + case MPU6000SETTINGS_FILTERSETTING_LOWPASS_98_HZ: + return PIOS_MPU6000_LOWPASS_98_HZ; + case MPU6000SETTINGS_FILTERSETTING_LOWPASS_42_HZ: + return PIOS_MPU6000_LOWPASS_42_HZ; + case MPU6000SETTINGS_FILTERSETTING_LOWPASS_20_HZ: + return PIOS_MPU6000_LOWPASS_20_HZ; + case MPU6000SETTINGS_FILTERSETTING_LOWPASS_10_HZ: + return PIOS_MPU6000_LOWPASS_10_HZ; + case MPU6000SETTINGS_FILTERSETTING_LOWPASS_5_HZ: + return PIOS_MPU6000_LOWPASS_5_HZ; + default: + return PIOS_MPU6000_LOWPASS_256_HZ; + } } #endif diff --git a/flight/PiOS/inc/pios_mpu6000.h b/flight/PiOS/inc/pios_mpu6000.h index 254f10192..88233e645 100644 --- a/flight/PiOS/inc/pios_mpu6000.h +++ b/flight/PiOS/inc/pios_mpu6000.h @@ -87,8 +87,10 @@ /* User control functionality */ #define PIOS_MPU6000_USERCTL_FIFO_EN 0X40 +#define PIOS_MPU6000_USERCTL_I2C_MST_EN 0x20 #define PIOS_MPU6000_USERCTL_DIS_I2C 0X10 -#define PIOS_MPU6000_USERCTL_FIFO_RST 0X02 +#define PIOS_MPU6000_USERCTL_FIFO_RST 0X04 +#define PIOS_MPU6000_USERCTL_SIG_COND 0X02 #define PIOS_MPU6000_USERCTL_GYRO_RST 0X01 /* Power management and clock selection */ @@ -100,6 +102,7 @@ #define PIOS_MPU6000_PWRMGMT_STOP_CLK 0X07 enum pios_mpu6000_range { + PIOS_MPU6000_SCALE_FROM_SETTINGS = 0xFF, PIOS_MPU6000_SCALE_250_DEG = 0x00, PIOS_MPU6000_SCALE_500_DEG = 0x08, PIOS_MPU6000_SCALE_1000_DEG = 0x10, @@ -107,6 +110,7 @@ enum pios_mpu6000_range { }; enum pios_mpu6000_filter { + PIOS_MPU6000_LOWPASS_FROM_SETTINGS = 0xFF, PIOS_MPU6000_LOWPASS_256_HZ = 0x00, PIOS_MPU6000_LOWPASS_188_HZ = 0x01, PIOS_MPU6000_LOWPASS_98_HZ = 0x02, @@ -117,6 +121,7 @@ enum pios_mpu6000_filter { }; enum pios_mpu6000_accel_range { + PIOS_MPU6000_ACCEL_FROM_SETTINGS = 0xFF, PIOS_MPU6000_ACCEL_2G = 0x00, PIOS_MPU6000_ACCEL_4G = 0x08, PIOS_MPU6000_ACCEL_8G = 0x10, diff --git a/flight/RevoMini/System/pios_board.c b/flight/RevoMini/System/pios_board.c index 6f772acdf..1e2bfae7a 100644 --- a/flight/RevoMini/System/pios_board.c +++ b/flight/RevoMini/System/pios_board.c @@ -181,9 +181,9 @@ static const struct pios_mpu6000_cfg pios_mpu6000_cfg = { .interrupt_en = PIOS_MPU6000_INTEN_DATA_RDY, .User_ctl = PIOS_MPU6000_USERCTL_FIFO_EN | PIOS_MPU6000_USERCTL_DIS_I2C, .Pwr_mgmt_clk = PIOS_MPU6000_PWRMGMT_PLL_X_CLK, - .accel_range = PIOS_MPU6000_ACCEL_8G, - .gyro_range = PIOS_MPU6000_SCALE_500_DEG, - .filter = PIOS_MPU6000_LOWPASS_256_HZ, + .accel_range = PIOS_MPU6000_ACCEL_FROM_SETTINGS, + .gyro_range = PIOS_MPU6000_SCALE_FROM_SETTINGS, + .filter = PIOS_MPU6000_LOWPASS_FROM_SETTINGS, .orientation = PIOS_MPU6000_TOP_180DEG }; #endif /* PIOS_INCLUDE_MPU6000 */ diff --git a/flight/RevoMini/UAVObjects.inc b/flight/RevoMini/UAVObjects.inc index d07660a8f..6165f3d67 100644 --- a/flight/RevoMini/UAVObjects.inc +++ b/flight/RevoMini/UAVObjects.inc @@ -94,7 +94,7 @@ UAVOBJSRCFILENAMES += altitudeholdsettings UAVOBJSRCFILENAMES += altitudeholddesired UAVOBJSRCFILENAMES += waypoint UAVOBJSRCFILENAMES += waypointactive - +UAVOBJSRCFILENAMES += mpu6000settings UAVOBJSRCFILENAMES += txpidsettings UAVOBJSRC = $(foreach UAVOBJSRCFILE,$(UAVOBJSRCFILENAMES),$(UAVOBJSYNTHDIR)/$(UAVOBJSRCFILE).c ) diff --git a/flight/Revolution/System/pios_board.c b/flight/Revolution/System/pios_board.c index 37c9810b3..85281b0c5 100644 --- a/flight/Revolution/System/pios_board.c +++ b/flight/Revolution/System/pios_board.c @@ -222,9 +222,9 @@ static const struct pios_mpu6000_cfg pios_mpu6000_cfg = { .interrupt_en = PIOS_MPU6000_INTEN_DATA_RDY, .User_ctl = PIOS_MPU6000_USERCTL_FIFO_EN | PIOS_MPU6000_USERCTL_DIS_I2C, .Pwr_mgmt_clk = PIOS_MPU6000_PWRMGMT_PLL_X_CLK, - .accel_range = PIOS_MPU6000_ACCEL_8G, - .gyro_range = PIOS_MPU6000_SCALE_500_DEG, - .filter = PIOS_MPU6000_LOWPASS_256_HZ, + .accel_range = PIOS_MPU6000_ACCEL_FROM_SETTINGS, + .gyro_range = PIOS_MPU6000_SCALE_FROM_SETTINGS, + .filter = PIOS_MPU6000_LOWPASS_FROM_SETTINGS, .orientation = PIOS_MPU6000_TOP_0DEG }; #endif /* PIOS_INCLUDE_MPU6000 */ diff --git a/flight/Revolution/UAVObjects.inc b/flight/Revolution/UAVObjects.inc index 545f6ecc7..8202dc1b2 100644 --- a/flight/Revolution/UAVObjects.inc +++ b/flight/Revolution/UAVObjects.inc @@ -94,6 +94,7 @@ UAVOBJSRCFILENAMES += altitudeholdsettings UAVOBJSRCFILENAMES += altitudeholddesired UAVOBJSRCFILENAMES += waypoint UAVOBJSRCFILENAMES += waypointactive +UAVOBJSRCFILENAMES += mpu6000settings UAVOBJSRC = $(foreach UAVOBJSRCFILE,$(UAVOBJSRCFILENAMES),$(UAVOBJSYNTHDIR)/$(UAVOBJSRCFILE).c ) UAVOBJDEFINE = $(foreach UAVOBJSRCFILE,$(UAVOBJSRCFILENAMES),-DUAVOBJ_INIT_$(UAVOBJSRCFILE) ) diff --git a/ground/openpilotgcs/src/plugins/uavobjects/uavobjects.pro b/ground/openpilotgcs/src/plugins/uavobjects/uavobjects.pro index d0aeeed1b..5b61364fc 100644 --- a/ground/openpilotgcs/src/plugins/uavobjects/uavobjects.pro +++ b/ground/openpilotgcs/src/plugins/uavobjects/uavobjects.pro @@ -99,7 +99,8 @@ HEADERS += $$UAVOBJECT_SYNTHETICS/accessorydesired.h \ $$UAVOBJECT_SYNTHETICS/oplinkstatus.h \ $$UAVOBJECT_SYNTHETICS/osdsettings.h \ $$UAVOBJECT_SYNTHETICS/waypoint.h \ - $$UAVOBJECT_SYNTHETICS/waypointactive.h + $$UAVOBJECT_SYNTHETICS/waypointactive.h \ + $$UAVOBJECT_SYNTHETICS/mpu6000settings.h SOURCES += $$UAVOBJECT_SYNTHETICS/accessorydesired.cpp \ $$UAVOBJECT_SYNTHETICS/baroaltitude.cpp \ @@ -178,4 +179,5 @@ SOURCES += $$UAVOBJECT_SYNTHETICS/accessorydesired.cpp \ $$UAVOBJECT_SYNTHETICS/oplinkstatus.cpp \ $$UAVOBJECT_SYNTHETICS/osdsettings.cpp \ $$UAVOBJECT_SYNTHETICS/waypoint.cpp \ - $$UAVOBJECT_SYNTHETICS/waypointactive.cpp + $$UAVOBJECT_SYNTHETICS/waypointactive.cpp \ + $$UAVOBJECT_SYNTHETICS/mpu6000settings.cpp diff --git a/shared/uavobjectdefinition/mpu6000settings.xml b/shared/uavobjectdefinition/mpu6000settings.xml new file mode 100644 index 000000000..7f07a87b9 --- /dev/null +++ b/shared/uavobjectdefinition/mpu6000settings.xml @@ -0,0 +1,38 @@ + + + Settings for the @ref MPU6000 sensor used on CC3D and Revolution + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 3986f93e681ad18dffb4dddd04c2011664911e1a Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sun, 17 Feb 2013 12:16:24 +0100 Subject: [PATCH 13/39] op-848 Splitted sample rate divider configuration for dlp and non_dlp settings (1kHz vs 8kHz sample rate). Minor clean up, used constants in place of some hardcoded values --- flight/CopterControl/System/pios_board.c | 4 +- flight/PiOS/Common/pios_mpu6000.c | 54 ++++++++++++------------ flight/PiOS/inc/pios_mpu6000.h | 7 ++- flight/RevoMini/System/pios_board.c | 6 ++- flight/Revolution/System/pios_board.c | 6 ++- 5 files changed, 44 insertions(+), 33 deletions(-) diff --git a/flight/CopterControl/System/pios_board.c b/flight/CopterControl/System/pios_board.c index 20f8e49a9..210d109b5 100644 --- a/flight/CopterControl/System/pios_board.c +++ b/flight/CopterControl/System/pios_board.c @@ -112,7 +112,9 @@ static const struct pios_mpu6000_cfg pios_mpu6000_cfg = { .exti_cfg = &pios_exti_mpu6000_cfg, .Fifo_store = PIOS_MPU6000_FIFO_TEMP_OUT | PIOS_MPU6000_FIFO_GYRO_X_OUT | PIOS_MPU6000_FIFO_GYRO_Y_OUT | PIOS_MPU6000_FIFO_GYRO_Z_OUT, // Clock at 8 khz, downsampled by 16 for 500 Hz - .Smpl_rate_div = 15, + .Smpl_rate_div_no_dlp = 15, + // Clock at 1 khz, downsampled by 2 for 500 Hz + .Smpl_rate_div_dlp = 1, .interrupt_cfg = PIOS_MPU6000_INT_CLR_ANYRD, .interrupt_en = PIOS_MPU6000_INTEN_DATA_RDY, .User_ctl = PIOS_MPU6000_USERCTL_FIFO_EN | PIOS_MPU6000_USERCTL_DIS_I2C, diff --git a/flight/PiOS/Common/pios_mpu6000.c b/flight/PiOS/Common/pios_mpu6000.c index 78ba7415d..5ba47685a 100644 --- a/flight/PiOS/Common/pios_mpu6000.c +++ b/flight/PiOS/Common/pios_mpu6000.c @@ -136,64 +136,66 @@ int32_t PIOS_MPU6000_Init(uint32_t spi_id, uint32_t slave_num, const struct pios * @brief Initialize the MPU6000 3-axis gyro sensor * \return none * \param[in] PIOS_MPU6000_ConfigTypeDef struct to be used to configure sensor. -* -*/ + * + */ static void PIOS_MPU6000_Config(struct pios_mpu6000_cfg const * cfg) { PIOS_MPU6000_Test(); - + //initialize settings for acc/gyro Scale and filter Mpu6000SettingsInitialize(); - + // Reset chip while (PIOS_MPU6000_SetReg(PIOS_MPU6000_PWR_MGMT_REG, PIOS_MPU6000_PWRMGMT_IMU_RST) != 0); PIOS_DELAY_WaitmS(300); - + // Reset chip and fifo - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_USER_CTRL_REG, - PIOS_MPU6000_USERCTL_GYRO_RST | - PIOS_MPU6000_USERCTL_SIG_COND | + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_USER_CTRL_REG, + PIOS_MPU6000_USERCTL_GYRO_RST | + PIOS_MPU6000_USERCTL_SIG_COND | PIOS_MPU6000_USERCTL_FIFO_RST) != 0); - + // Wait for reset to finish - while (PIOS_MPU6000_GetReg(PIOS_MPU6000_USER_CTRL_REG) & - (PIOS_MPU6000_USERCTL_GYRO_RST | - PIOS_MPU6000_USERCTL_SIG_COND | + while (PIOS_MPU6000_GetReg(PIOS_MPU6000_USER_CTRL_REG) & + (PIOS_MPU6000_USERCTL_GYRO_RST | + PIOS_MPU6000_USERCTL_SIG_COND | PIOS_MPU6000_USERCTL_FIFO_RST)); - + //Power management configuration - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_PWR_MGMT_REG, cfg->Pwr_mgmt_clk) != 0) ; + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_PWR_MGMT_REG, cfg->Pwr_mgmt_clk) != 0); // Interrupt configuration - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_INT_CFG_REG, cfg->interrupt_cfg) != 0) ; + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_INT_CFG_REG, cfg->interrupt_cfg) != 0); // Interrupt configuration - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_INT_EN_REG, cfg->interrupt_en) != 0) ; + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_INT_EN_REG, cfg->interrupt_en) != 0); // FIFO storage #if defined(PIOS_MPU6000_ACCEL) // Set the accel range dev->accel_range = getAccelRange(cfg->accel_range); while (PIOS_MPU6000_SetReg(PIOS_MPU6000_ACCEL_CFG_REG, dev->accel_range) != 0); - + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_FIFO_EN_REG, cfg->Fifo_store | PIOS_MPU6000_ACCEL_OUT) != 0); #else while (PIOS_MPU6000_SetReg(PIOS_MPU6000_FIFO_EN_REG, cfg->Fifo_store) != 0); #endif - - // Sample rate divider - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_SMPLRT_DIV_REG, cfg->Smpl_rate_div) != 0) ; - - // Digital low-pass filter and scale + // Digital low-pass filter uint8_t filterSetting; filterSetting = getFilterSetting(cfg->filter); - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_DLPF_CFG_REG, filterSetting) != 0) ; - + + // Sample rate divider, chosen upon digital filtering settings + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_SMPLRT_DIV_REG, + filterSetting == PIOS_MPU6000_LOWPASS_256_HZ ? + cfg->Smpl_rate_div_no_dlp : cfg->Smpl_rate_div_dlp) != 0); + + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_DLPF_CFG_REG, filterSetting) != 0); + // Gyro range dev->gyro_range = getGyroRange(cfg->gyro_range); - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_GYRO_CFG_REG, dev->gyro_range) != 0) ; - + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_GYRO_CFG_REG, dev->gyro_range) != 0); + // Interrupt configuration while (PIOS_MPU6000_SetReg(PIOS_MPU6000_USER_CTRL_REG, cfg->User_ctl) != 0) ; diff --git a/flight/PiOS/inc/pios_mpu6000.h b/flight/PiOS/inc/pios_mpu6000.h index 88233e645..6d92ada51 100644 --- a/flight/PiOS/inc/pios_mpu6000.h +++ b/flight/PiOS/inc/pios_mpu6000.h @@ -151,8 +151,11 @@ struct pios_mpu6000_cfg { const struct pios_exti_cfg * exti_cfg; /* Pointer to the EXTI configuration */ uint8_t Fifo_store; /* FIFO storage of different readings (See datasheet page 31 for more details) */ - uint8_t Smpl_rate_div; /* Sample rate divider to use (See datasheet page 32 for more details) */ - uint8_t interrupt_cfg; /* Interrupt configuration (See datasheet page 35 for more details) */ + + /* Sample rate divider to use (See datasheet page 32 for more details).*/ + uint8_t Smpl_rate_div_no_dlp; /* used when no dlp is applied (fs=8KHz)*/ + uint8_t Smpl_rate_div_dlp; /* used when dlp is on (fs=1kHz)*/ + uint8_t interrupt_cfg; /* Interrupt configuration (See datasheet page 35 for more details) */ uint8_t interrupt_en; /* Interrupt configuration (See datasheet page 35 for more details) */ uint8_t User_ctl; /* User control settings (See datasheet page 41 for more details) */ uint8_t Pwr_mgmt_clk; /* Power management and clock selection (See datasheet page 32 for more details) */ diff --git a/flight/RevoMini/System/pios_board.c b/flight/RevoMini/System/pios_board.c index 1e2bfae7a..68aec9ff8 100644 --- a/flight/RevoMini/System/pios_board.c +++ b/flight/RevoMini/System/pios_board.c @@ -175,8 +175,10 @@ static const struct pios_exti_cfg pios_exti_mpu6000_cfg __exti_config = { static const struct pios_mpu6000_cfg pios_mpu6000_cfg = { .exti_cfg = &pios_exti_mpu6000_cfg, .Fifo_store = PIOS_MPU6000_FIFO_TEMP_OUT | PIOS_MPU6000_FIFO_GYRO_X_OUT | PIOS_MPU6000_FIFO_GYRO_Y_OUT | PIOS_MPU6000_FIFO_GYRO_Z_OUT, - // Clock at 8 khz, downsampled by 8 for 1khz - .Smpl_rate_div = 11, + // Clock at 8 khz, downsampled by 12 for 666Hz + .Smpl_rate_div_no_dlp = 11, + // with dlp on output rate is 500Hz + .Smpl_rate_div_dlp = 1, .interrupt_cfg = PIOS_MPU6000_INT_CLR_ANYRD, .interrupt_en = PIOS_MPU6000_INTEN_DATA_RDY, .User_ctl = PIOS_MPU6000_USERCTL_FIFO_EN | PIOS_MPU6000_USERCTL_DIS_I2C, diff --git a/flight/Revolution/System/pios_board.c b/flight/Revolution/System/pios_board.c index 85281b0c5..45a9a08f8 100644 --- a/flight/Revolution/System/pios_board.c +++ b/flight/Revolution/System/pios_board.c @@ -216,8 +216,10 @@ static const struct pios_exti_cfg pios_exti_mpu6000_cfg __exti_config = { static const struct pios_mpu6000_cfg pios_mpu6000_cfg = { .exti_cfg = &pios_exti_mpu6000_cfg, .Fifo_store = PIOS_MPU6000_FIFO_TEMP_OUT | PIOS_MPU6000_FIFO_GYRO_X_OUT | PIOS_MPU6000_FIFO_GYRO_Y_OUT | PIOS_MPU6000_FIFO_GYRO_Z_OUT, - // Clock at 8 khz, downsampled by 8 for 1khz - .Smpl_rate_div = 11, + // Clock at 8 khz, downsampled by 12 for 666Hz + .Smpl_rate_div_no_dlp = 11, + // with dlp on output rate is 500Hz + .Smpl_rate_div_dlp = 1, .interrupt_cfg = PIOS_MPU6000_INT_CLR_ANYRD, .interrupt_en = PIOS_MPU6000_INTEN_DATA_RDY, .User_ctl = PIOS_MPU6000_USERCTL_FIFO_EN | PIOS_MPU6000_USERCTL_DIS_I2C, From 81d056d0d5785e7b48a04ac24288908051c476f5 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sun, 17 Feb 2013 12:32:44 +0100 Subject: [PATCH 14/39] OP-848 Added a note for the user on uavo tooltip to remember that it need board reboot for the setting to takes effect --- shared/uavobjectdefinition/mpu6000settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/uavobjectdefinition/mpu6000settings.xml b/shared/uavobjectdefinition/mpu6000settings.xml index 7f07a87b9..943243fa7 100644 --- a/shared/uavobjectdefinition/mpu6000settings.xml +++ b/shared/uavobjectdefinition/mpu6000settings.xml @@ -1,6 +1,6 @@ - Settings for the @ref MPU6000 sensor used on CC3D and Revolution + Settings for the @ref MPU6000 sensor used on CC3D and Revolution. Reboot the board for this to takes effect From d1c5da6c24fe3d8720bd968d0c301040ee910f10 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sun, 17 Feb 2013 22:28:41 +0100 Subject: [PATCH 15/39] Move PyMite makefile entries to Libraries/PyMyte/pymite.mk to simplify boards makefile. --- flight/Libraries/PyMite/pymite.mk | 41 +++++++++++++++++++++++++++++++ flight/RevoMini/Makefile | 38 ++-------------------------- flight/Revolution/Makefile | 34 ++----------------------- flight/SimPosix/Makefile | 35 ++------------------------ 4 files changed, 47 insertions(+), 101 deletions(-) create mode 100644 flight/Libraries/PyMite/pymite.mk diff --git a/flight/Libraries/PyMite/pymite.mk b/flight/Libraries/PyMite/pymite.mk new file mode 100644 index 000000000..02da15a5d --- /dev/null +++ b/flight/Libraries/PyMite/pymite.mk @@ -0,0 +1,41 @@ +# +# Rules to add PYMite to a PiOS target +# + +PYMITE = $(FLIGHTLIB)/PyMite +PYMITELIB = $(PYMITE)/lib +PYMITEPLAT = $(PYMITE)/platform/openpilot +PYMITETOOLS = $(PYMITE)/tools +PYMITEVM = $(PYMITE)/vm +PYMITEINC = $(PYMITEVM) +PYMITEINC += $(PYMITEPLAT) +PYMITEINC += $(OUTDIR) + +# List C source files here. (C dependencies are automatically generated.) +# use file-extension c for "c-only"-files + +## PyMite files and modules +SRC += $(OUTDIR)/pmlib_img.c +SRC += $(OUTDIR)/pmlib_nat.c +SRC += $(OUTDIR)/pmlibusr_img.c +SRC += $(OUTDIR)/pmlibusr_nat.c +PYSRC += $(wildcard ${PYMITEVM}/*.c) +PYSRC += $(wildcard ${PYMITEPLAT}/*.c) +PYSRC += ${foreach MOD, ${PYMODULES}, ${wildcard ${OPMODULEDIR}/${MOD}/*.c}} +SRC += $(PYSRC) + +EXTRAINCDIRS += $(PYMITEINC) + +# Generate intermediate code +gencode: ${OUTDIR}/pmlib_img.c ${OUTDIR}/pmlib_nat.c ${OUTDIR}/pmlibusr_img.c ${OUTDIR}/pmlibusr_nat.c ${OUTDIR}/pmfeatures.h + +$(PYSRC): gencode + +PYTHON = python + +# Generate code for PyMite +${OUTDIR}/pmlib_img.c ${OUTDIR}/pmlib_nat.c ${OUTDIR}/pmlibusr_img.c ${OUTDIR}/pmlibusr_nat.c ${OUTDIR}/pmfeatures.h: $(wildcard ${PYMITELIB}/*.py) $(wildcard ${PYMITEPLAT}/*.py) $(wildcard ${FLIGHTPLANLIB}/*.py) $(wildcard ${FLIGHTPLANS}/*.py) + @echo $(MSG_PYMITEINIT) $(call toprel, $@) + @$(PYTHON) $(PYMITETOOLS)/pmImgCreator.py -f $(PYMITEPLAT)/pmfeatures.py -c -s --memspace=flash -o $(OUTDIR)/pmlib_img.c --native-file=$(OUTDIR)/pmlib_nat.c $(PYMITELIB)/list.py $(PYMITELIB)/dict.py $(PYMITELIB)/__bi.py $(PYMITELIB)/sys.py $(PYMITELIB)/string.py $(wildcard $(FLIGHTPLANLIB)/*.py) + @$(PYTHON) $(PYMITETOOLS)/pmGenPmFeatures.py $(PYMITEPLAT)/pmfeatures.py > $(OUTDIR)/pmfeatures.h + @$(PYTHON) $(PYMITETOOLS)/pmImgCreator.py -f $(PYMITEPLAT)/pmfeatures.py -c -u -o $(OUTDIR)/pmlibusr_img.c --native-file=$(OUTDIR)/pmlibusr_nat.c $(FLIGHTPLANS)/test.py diff --git a/flight/RevoMini/Makefile b/flight/RevoMini/Makefile index 9ebf3f116..f2b97d08e 100644 --- a/flight/RevoMini/Makefile +++ b/flight/RevoMini/Makefile @@ -94,14 +94,6 @@ STMSPDSRCDIR = $(STMSPDDIR)/src STMSPDINCDIR = $(STMSPDDIR)/inc OPUAVOBJ = ../UAVObjects OPUAVOBJINC = $(OPUAVOBJ)/inc -PYMITE = $(FLIGHTLIB)/PyMite -PYMITELIB = $(PYMITE)/lib -PYMITEPLAT = $(PYMITE)/platform/openpilot -PYMITETOOLS = $(PYMITE)/tools -PYMITEVM = $(PYMITE)/vm -PYMITEINC = $(PYMITEVM) -PYMITEINC += $(PYMITEPLAT) -PYMITEINC += $(OUTDIR) FLIGHTPLANLIB = $(OPMODULEDIR)/FlightPlan/lib FLIGHTPLANS = $(OPMODULEDIR)/FlightPlan/flightplans HWDEFSINC = ../board_hw_defs/$(BOARD_NAME) @@ -113,19 +105,8 @@ include $(PIOSCOMMONLIB)/FreeRTOS/library.mk #include $(PIOSCOMMONLIB)/dosfs/library.mk include $(PIOSCOMMONLIB)/msheap/library.mk - -# List C source files here. (C dependencies are automatically generated.) -# use file-extension c for "c-only"-files - -## PyMite files and modules -SRC += $(OUTDIR)/pmlib_img.c -SRC += $(OUTDIR)/pmlib_nat.c -SRC += $(OUTDIR)/pmlibusr_img.c -SRC += $(OUTDIR)/pmlibusr_nat.c -PYSRC += $(wildcard ${PYMITEVM}/*.c) -PYSRC += $(wildcard ${PYMITEPLAT}/*.c) -PYSRC += ${foreach MOD, ${PYMODULES}, ${wildcard ${OPMODULEDIR}/${MOD}/*.c}} -SRC += $(PYSRC) +## PYMite support +#include $(FLIGHTLIB)/PyMite/pymite.mk ## MODULES SRC += ${foreach MOD, ${MODULES}, ${wildcard ${OPMODULEDIR}/${MOD}/*.c}} @@ -234,22 +215,8 @@ EXTRAINCDIRS += $(STMSPDINCDIR) EXTRAINCDIRS += $(CMSISDIR) EXTRAINCDIRS += $(OPUAVSYNTHDIR) EXTRAINCDIRS += $(BOOTINC) -EXTRAINCDIRS += $(PYMITEINC) EXTRAINCDIRS += $(HWDEFSINC) -# Generate intermediate code -gencode: ${OUTDIR}/pmlib_img.c ${OUTDIR}/pmlib_nat.c ${OUTDIR}/pmlibusr_img.c ${OUTDIR}/pmlibusr_nat.c ${OUTDIR}/pmfeatures.h - -$(PYSRC): gencode - -PYTHON = python - -# Generate code for PyMite -${OUTDIR}/pmlib_img.c ${OUTDIR}/pmlib_nat.c ${OUTDIR}/pmlibusr_img.c ${OUTDIR}/pmlibusr_nat.c ${OUTDIR}/pmfeatures.h: $(wildcard ${PYMITELIB}/*.py) $(wildcard ${PYMITEPLAT}/*.py) $(wildcard ${FLIGHTPLANLIB}/*.py) $(wildcard ${FLIGHTPLANS}/*.py) - @echo $(MSG_PYMITEINIT) $(call toprel, $@) - @$(PYTHON) $(PYMITETOOLS)/pmImgCreator.py -f $(PYMITEPLAT)/pmfeatures.py -c -s --memspace=flash -o $(OUTDIR)/pmlib_img.c --native-file=$(OUTDIR)/pmlib_nat.c $(PYMITELIB)/list.py $(PYMITELIB)/dict.py $(PYMITELIB)/__bi.py $(PYMITELIB)/sys.py $(PYMITELIB)/string.py $(wildcard $(FLIGHTPLANLIB)/*.py) - @$(PYTHON) $(PYMITETOOLS)/pmGenPmFeatures.py $(PYMITEPLAT)/pmfeatures.py > $(OUTDIR)/pmfeatures.h - @$(PYTHON) $(PYMITETOOLS)/pmImgCreator.py -f $(PYMITEPLAT)/pmfeatures.py -c -u -o $(OUTDIR)/pmlibusr_img.c --native-file=$(OUTDIR)/pmlibusr_nat.c $(FLIGHTPLANS)/test.py EXTRAINCDIRS += ${foreach MOD, ${MODULES} ${PYMODULES}, $(OPMODULEDIR)/${MOD}/inc} ${OPMODULEDIR}/System/inc # List any extra directories to look for library files here. @@ -390,7 +357,6 @@ LDFLAGS += $(addprefix -T,$(LINKER_SCRIPTS_APP)) # Define programs and commands. REMOVE = $(REMOVE_CMD) -f -PYTHON = python # List of all source files. ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC) diff --git a/flight/Revolution/Makefile b/flight/Revolution/Makefile index 67d7d04c6..c6f373086 100644 --- a/flight/Revolution/Makefile +++ b/flight/Revolution/Makefile @@ -117,14 +117,6 @@ OPUAVOBJ = ../UAVObjects OPUAVOBJINC = $(OPUAVOBJ)/inc BOOT = ../Bootloaders/INS BOOTINC = $(BOOT)/inc -PYMITE = $(FLIGHTLIB)/PyMite -PYMITELIB = $(PYMITE)/lib -PYMITEPLAT = $(PYMITE)/platform/openpilot -PYMITETOOLS = $(PYMITE)/tools -PYMITEVM = $(PYMITE)/vm -PYMITEINC = $(PYMITEVM) -PYMITEINC += $(PYMITEPLAT) -PYMITEINC += $(OUTDIR) FLIGHTPLANLIB = $(OPMODULEDIR)/FlightPlan/lib FLIGHTPLANS = $(OPMODULEDIR)/FlightPlan/flightplans HWDEFSINC = ../board_hw_defs/$(BOARD_NAME) @@ -136,20 +128,12 @@ include $(PIOSCOMMONLIB)/FreeRTOS/library.mk #include $(PIOSCOMMONLIB)/dosfs/library.mk include $(PIOSCOMMONLIB)/msheap/library.mk +## PYMite support +#include $(FLIGHTLIB)/PyMite/pymite.mk # List C source files here. (C dependencies are automatically generated.) # use file-extension c for "c-only"-files -## PyMite files and modules -SRC += $(OUTDIR)/pmlib_img.c -SRC += $(OUTDIR)/pmlib_nat.c -SRC += $(OUTDIR)/pmlibusr_img.c -SRC += $(OUTDIR)/pmlibusr_nat.c -PYSRC += $(wildcard ${PYMITEVM}/*.c) -PYSRC += $(wildcard ${PYMITEPLAT}/*.c) -PYSRC += ${foreach MOD, ${PYMODULES}, ${wildcard ${OPMODULEDIR}/${MOD}/*.c}} -SRC += $(PYSRC) - ## MODULES SRC += ${foreach MOD, ${OPTMODULES}, ${wildcard ${OPMODULEDIR}/${MOD}/*.c}} SRC += ${foreach MOD, ${MODULES}, ${wildcard ${OPMODULEDIR}/${MOD}/*.c}} @@ -249,22 +233,8 @@ EXTRAINCDIRS += $(STMSPDINCDIR) EXTRAINCDIRS += $(CMSISDIR) EXTRAINCDIRS += $(OPUAVSYNTHDIR) EXTRAINCDIRS += $(BOOTINC) -EXTRAINCDIRS += $(PYMITEINC) EXTRAINCDIRS += $(HWDEFSINC) -# Generate intermediate code -gencode: ${OUTDIR}/pmlib_img.c ${OUTDIR}/pmlib_nat.c ${OUTDIR}/pmlibusr_img.c ${OUTDIR}/pmlibusr_nat.c ${OUTDIR}/pmfeatures.h - -$(PYSRC): gencode - -PYTHON = python - -# Generate code for PyMite -${OUTDIR}/pmlib_img.c ${OUTDIR}/pmlib_nat.c ${OUTDIR}/pmlibusr_img.c ${OUTDIR}/pmlibusr_nat.c ${OUTDIR}/pmfeatures.h: $(wildcard ${PYMITELIB}/*.py) $(wildcard ${PYMITEPLAT}/*.py) $(wildcard ${FLIGHTPLANLIB}/*.py) $(wildcard ${FLIGHTPLANS}/*.py) - @echo $(MSG_PYMITEINIT) $(call toprel, $@) - @$(PYTHON) $(PYMITETOOLS)/pmImgCreator.py -f $(PYMITEPLAT)/pmfeatures.py -c -s --memspace=flash -o $(OUTDIR)/pmlib_img.c --native-file=$(OUTDIR)/pmlib_nat.c $(PYMITELIB)/list.py $(PYMITELIB)/dict.py $(PYMITELIB)/__bi.py $(PYMITELIB)/sys.py $(PYMITELIB)/string.py $(wildcard $(FLIGHTPLANLIB)/*.py) - @$(PYTHON) $(PYMITETOOLS)/pmGenPmFeatures.py $(PYMITEPLAT)/pmfeatures.py > $(OUTDIR)/pmfeatures.h - @$(PYTHON) $(PYMITETOOLS)/pmImgCreator.py -f $(PYMITEPLAT)/pmfeatures.py -c -u -o $(OUTDIR)/pmlibusr_img.c --native-file=$(OUTDIR)/pmlibusr_nat.c $(FLIGHTPLANS)/test.py EXTRAINCDIRS += ${foreach MOD, ${OPTMODULES} ${MODULES} ${PYMODULES}, $(OPMODULEDIR)/${MOD}/inc} ${OPMODULEDIR}/System/inc # List any extra directories to look for library files here. diff --git a/flight/SimPosix/Makefile b/flight/SimPosix/Makefile index 82c814c92..e2e7b777c 100644 --- a/flight/SimPosix/Makefile +++ b/flight/SimPosix/Makefile @@ -85,14 +85,6 @@ OPUAVOBJ = ../UAVObjects OPUAVOBJINC = $(OPUAVOBJ)/inc BOOT = BOOTINC = -PYMITE = $(FLIGHTLIB)/PyMite -PYMITELIB = $(PYMITE)/lib -PYMITEPLAT = $(PYMITE)/platform/openpilot -PYMITETOOLS = $(PYMITE)/tools -PYMITEVM = $(PYMITE)/vm -PYMITEINC = $(PYMITEVM) -PYMITEINC += $(PYMITEPLAT) -PYMITEINC += $(OUTDIR) FLIGHTPLANLIB = $(OPMODULEDIR)/FlightPlan/lib FLIGHTPLANS = $(OPMODULEDIR)/FlightPlan/flightplans HWDEFSINC = ../board_hw_defs/$(BOARD_NAME) @@ -104,20 +96,12 @@ include $(PIOSCOMMONLIB)/FreeRTOS/library.mk #include $(PIOSCOMMONLIB)/dosfs/library.mk #include $(PIOSCOMMONLIB)/msheap/library.mk +## PYMite support +#include $(FLIGHTLIB)/PyMite/pymite.mk # List C source files here. (C dependencies are automatically generated.) # use file-extension c for "c-only"-files -## PyMite files and modules -SRC += $(OUTDIR)/pmlib_img.c -SRC += $(OUTDIR)/pmlib_nat.c -SRC += $(OUTDIR)/pmlibusr_img.c -SRC += $(OUTDIR)/pmlibusr_nat.c -PYSRC += $(wildcard ${PYMITEVM}/*.c) -PYSRC += $(wildcard ${PYMITEPLAT}/*.c) -PYSRC += ${foreach MOD, ${PYMODULES}, ${wildcard ${OPMODULEDIR}/${MOD}/*.c}} -SRC += $(PYSRC) - ## MODULES SRC += ${foreach MOD, ${MODULES}, ${wildcard ${OPMODULEDIR}/${MOD}/*.c}} SRC += ${OUTDIR}/InitMods.c @@ -207,22 +191,8 @@ EXTRAINCDIRS += $(PIOSBOARDS) EXTRAINCDIRS += $(CMSISDIR) EXTRAINCDIRS += $(OPUAVSYNTHDIR) EXTRAINCDIRS += $(BOOTINC) -EXTRAINCDIRS += $(PYMITEINC) EXTRAINCDIRS += $(HWDEFSINC) -# Generate intermediate code -gencode: ${OUTDIR}/pmlib_img.c ${OUTDIR}/pmlib_nat.c ${OUTDIR}/pmlibusr_img.c ${OUTDIR}/pmlibusr_nat.c ${OUTDIR}/pmfeatures.h - -$(PYSRC): gencode - -PYTHON = python - -# Generate code for PyMite -${OUTDIR}/pmlib_img.c ${OUTDIR}/pmlib_nat.c ${OUTDIR}/pmlibusr_img.c ${OUTDIR}/pmlibusr_nat.c ${OUTDIR}/pmfeatures.h: $(wildcard ${PYMITELIB}/*.py) $(wildcard ${PYMITEPLAT}/*.py) $(wildcard ${FLIGHTPLANLIB}/*.py) $(wildcard ${FLIGHTPLANS}/*.py) - @echo $(MSG_PYMITEINIT) $(call toprel, $@) - @$(PYTHON) $(PYMITETOOLS)/pmImgCreator.py -f $(PYMITEPLAT)/pmfeatures.py -c -s --memspace=flash -o $(OUTDIR)/pmlib_img.c --native-file=$(OUTDIR)/pmlib_nat.c $(PYMITELIB)/list.py $(PYMITELIB)/dict.py $(PYMITELIB)/__bi.py $(PYMITELIB)/sys.py $(PYMITELIB)/string.py $(wildcard $(FLIGHTPLANLIB)/*.py) - @$(PYTHON) $(PYMITETOOLS)/pmGenPmFeatures.py $(PYMITEPLAT)/pmfeatures.py > $(OUTDIR)/pmfeatures.h - @$(PYTHON) $(PYMITETOOLS)/pmImgCreator.py -f $(PYMITEPLAT)/pmfeatures.py -c -u -o $(OUTDIR)/pmlibusr_img.c --native-file=$(OUTDIR)/pmlibusr_nat.c $(FLIGHTPLANS)/test.py EXTRAINCDIRS += ${foreach MOD, ${MODULES} ${PYMODULES}, $(OPMODULEDIR)/${MOD}/inc} ${OPMODULEDIR}/System/inc # List any extra directories to look for library files here. @@ -366,7 +336,6 @@ LDFLAGS += $(addprefix -T,$(LINKER_SCRIPTS_APP)) # Define programs and commands. REMOVE = $(REMOVE_CMD) -f -PYTHON = python # List of all source files. ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC) From adc9c008c48a3334667b187919fea2b73cfa6432 Mon Sep 17 00:00:00 2001 From: Philippe Renon Date: Mon, 18 Feb 2013 22:28:09 +0100 Subject: [PATCH 16/39] iOP-803 redid spurious commit in order to avoid undoing OP-805 (need to be more carefull or sleep more...) --- .../plugins/coreplugin/uavgadgetinstancemanager.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp index 3393dc4b5..a20612c59 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetinstancemanager.cpp @@ -239,8 +239,9 @@ void UAVGadgetInstanceManager::createOptionsPages() m_pm->removeObject(m_optionsPages.takeLast()); } - foreach (IUAVGadgetConfiguration *config, m_configurations) - { + QMutableListIterator ite(m_configurations); + while (ite.hasNext()) { + IUAVGadgetConfiguration *config = ite.next(); IUAVGadgetFactory *f = factory(config->classId()); IOptionsPage *p = f->createOptionsPage(config); if (p) { @@ -249,6 +250,14 @@ void UAVGadgetInstanceManager::createOptionsPages() m_optionsPages.append(page); m_pm->addObject(page); } + else { + qWarning() + << "UAVGadgetInstanceManager::createOptionsPages - failed to create options page for configuration " + + config->classId() + ":" + config->name() + ", configuration will be removed."; + // The m_optionsPages list and m_configurations list must be in synch otherwise nasty issues happen later + // so if we fail to create an options page we must remove the associated configuration + ite.remove(); + } } } From a48395c7a03be756373ea854a649f5985ac6b914 Mon Sep 17 00:00:00 2001 From: a*morale Date: Thu, 21 Jun 2012 01:57:26 +0200 Subject: [PATCH 17/39] Added the visualization of the error in BU the error is shown as a number of slow flashes followed by 10 fast flashes. The number of slow flashes indicate the error code: 1 - Self overwrite check failed; 2 - Board hardware revision mismatch; 3 - Flash erase failed; 4 - Flash programming failed; The error code sequence will be shown indfinitely should a error occurs. --- flight/Bootloaders/BootloaderUpdater/main.c | 37 ++++++++++++++------- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/flight/Bootloaders/BootloaderUpdater/main.c b/flight/Bootloaders/BootloaderUpdater/main.c index b7348dac4..d1fbc1666 100644 --- a/flight/Bootloaders/BootloaderUpdater/main.c +++ b/flight/Bootloaders/BootloaderUpdater/main.c @@ -34,7 +34,7 @@ /* Prototype of PIOS_Board_Init() function */ extern void PIOS_Board_Init(void); extern void FLASH_Download(); -void error(int); +void error(int,int); /* The ADDRESSES of the _binary_* symbols are the important * data. This is non-intuitive for _binary_size where you @@ -58,7 +58,7 @@ int main() { /// Self overwrite check uint32_t base_address = SCB->VTOR; if ((0x08000000 + embedded_image_size) > base_address) - error(PIOS_LED_HEARTBEAT); + error(PIOS_LED_HEARTBEAT,1); /// /* @@ -80,7 +80,7 @@ int main() { if ((pios_board_info_blob.magic != new_board_info_blob->magic) || (pios_board_info_blob.board_type != new_board_info_blob->board_type) || (pios_board_info_blob.board_rev != new_board_info_blob->board_rev)) { - error(PIOS_LED_HEARTBEAT); + error(PIOS_LED_HEARTBEAT,2); } /* Embedded bootloader looks like it's the right one for this HW, proceed... */ @@ -108,7 +108,7 @@ int main() { } if (fail == true) - error(PIOS_LED_HEARTBEAT); + error(PIOS_LED_HEARTBEAT,3); /// @@ -124,7 +124,7 @@ int main() { } } if (result == false) - error(PIOS_LED_HEARTBEAT); + error(PIOS_LED_HEARTBEAT,4); } /// for (uint8_t x = 0; x < 3; ++x) { @@ -145,11 +145,24 @@ int main() { } -void error(int led) { - for (;;) { - PIOS_LED_On(led); - PIOS_DELAY_WaitmS(500); - PIOS_LED_Off(led); - PIOS_DELAY_WaitmS(500); +void error(int led,int code) { + for(;;) + { + PIOS_DELAY_WaitmS(1000); + for (int x=0;x Date: Thu, 21 Feb 2013 01:34:17 +0100 Subject: [PATCH 18/39] OP-682 OP-850 fixed more uploader gadget crashes and button state issues --- .../src/plugins/uploader/devicewidget.cpp | 117 ++++++++++++------ .../src/plugins/uploader/devicewidget.h | 3 + .../plugins/uploader/uploadergadgetwidget.cpp | 31 +++++ .../plugins/uploader/uploadergadgetwidget.h | 3 +- 4 files changed, 113 insertions(+), 41 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp b/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp index 47433cebb..86504824f 100644 --- a/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp +++ b/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp @@ -143,11 +143,28 @@ void deviceWidget::populate() */ void deviceWidget::freeze() { - myDevice->description->setEnabled(false); - myDevice->pbLoad->setEnabled(false); - myDevice->youdont->setEnabled(false); - myDevice->updateButton->setEnabled(false); - myDevice->retrieveButton->setEnabled(false); + updateButtons(false); +} + +void deviceWidget::updateButtons(bool enabled) +{ + if (!enabled) { + myDevice->description->setEnabled(false); + myDevice->pbLoad->setEnabled(false); + myDevice->youdont->setEnabled(false); + myDevice->updateButton->setEnabled(false); + myDevice->retrieveButton->setEnabled(false); + } + else { + myDevice->description->setEnabled(true); + // Load button (i.e. chose file) is always enabled + myDevice->pbLoad->setEnabled(true); + myDevice->youdont->setEnabled(true); + // Update/Upload button is enabled if a file has be selected and the "You know what your doing" check box is checked + myDevice->updateButton->setEnabled(myDevice->youdont->isVisible() && myDevice->youdont->checkState() == Qt::Checked); + // Retreive/Download button is always enabled + myDevice->retrieveButton->setEnabled(true); + } } /** @@ -224,12 +241,7 @@ void deviceWidget::dfuStatus(QString str) void deviceWidget::confirmCB(int value) { - if(value==Qt::Checked) - { - myDevice->updateButton->setEnabled(true); - } - else - myDevice->updateButton->setEnabled(false); + updateButtons(true); } /** @@ -325,8 +337,6 @@ void deviceWidget::loadFirmware() myDevice->groupCustom->setVisible(true); } myDevice->statusIcon->setPixmap(px); - //myDevice->updateButton->setEnabled(true); - } /** @@ -334,10 +344,14 @@ void deviceWidget::loadFirmware() */ void deviceWidget::uploadFirmware() { - myDevice->updateButton->setEnabled(false); + // clear progress bar now + // this avoids displaying an error message and the progress at 100% at the same time + setProgress(0); + updateButtons(false); + if (!m_dfu->devices[deviceID].Writable) { status("Device not writable!", STATUSICON_FAIL); - myDevice->updateButton->setEnabled(true); + updateButtons(true); return; } @@ -361,7 +375,7 @@ void deviceWidget::uploadFirmware() // These firmwares are designed to be backwards compatible } else if (firmwareBoard != board) { status("Error: firmware does not match board", STATUSICON_FAIL); - myDevice->updateButton->setEnabled(true); + updateButtons(true); return; } // Check the firmware embedded in the file: @@ -369,7 +383,7 @@ void deviceWidget::uploadFirmware() QByteArray fileHash = QCryptographicHash::hash(loadedFW.left(loadedFW.length()-100), QCryptographicHash::Sha1); if (firmwareHash != fileHash) { status("Error: firmware file corrupt", STATUSICON_FAIL); - myDevice->updateButton->setEnabled(true); + updateButtons(true); return; } } else { @@ -378,16 +392,16 @@ void deviceWidget::uploadFirmware() descriptionArray.clear(); } - status("Starting firmware upload", STATUSICON_RUNNING); + emit uploadStarted(); + // We don't know which device was used previously, so we // are cautious and reenter DFU for this deviceID: - emit uploadStarted(); if(!m_dfu->enterDFU(deviceID)) { - status("Error:Could not enter DFU mode", STATUSICON_FAIL); - myDevice->updateButton->setEnabled(true); emit uploadEnded(false); + status("Error:Could not enter DFU mode", STATUSICON_FAIL); + updateButtons(true); return; } OP_DFU::Status ret=m_dfu->StatusRequest(); @@ -397,13 +411,14 @@ void deviceWidget::uploadFirmware() connect(m_dfu, SIGNAL(progressUpdated(int)), this, SLOT(setProgress(int))); connect(m_dfu, SIGNAL(operationProgress(QString)), this, SLOT(dfuStatus(QString))); connect(m_dfu, SIGNAL(uploadFinished(OP_DFU::Status)), this, SLOT(uploadFinished(OP_DFU::Status))); - bool retstatus = m_dfu->UploadFirmware(filename,verify, deviceID); - if(!retstatus ) { - status("Could not start upload", STATUSICON_FAIL); - myDevice->updateButton->setEnabled(true); + bool retstatus = m_dfu->UploadFirmware(filename, verify, deviceID); + if (!retstatus) { emit uploadEnded(false); + status("Could not start upload!", STATUSICON_FAIL); + updateButtons(true); return; } + status("Uploading, please wait...", STATUSICON_RUNNING); } @@ -412,29 +427,43 @@ void deviceWidget::uploadFirmware() */ void deviceWidget::downloadFirmware() { + // clear progress bar now + // this avoids displaying an error message and the progress at 100% at the same time + setProgress(0); + updateButtons(false); + if (!m_dfu->devices[deviceID].Readable) { myDevice->statusLabel->setText(QString("Device not readable!")); + status("Device not readable!", STATUSICON_FAIL); + updateButtons(true); return; } - myDevice->retrieveButton->setEnabled(false); filename = setSaveFileName(); - if (filename.isEmpty()) { status("Empty filename", STATUSICON_FAIL); + updateButtons(true); return; } - status("Downloading firmware from device", STATUSICON_RUNNING); + status("Starting firmware download", STATUSICON_RUNNING); + emit downloadStarted(); + connect(m_dfu, SIGNAL(progressUpdated(int)), this, SLOT(setProgress(int))); connect(m_dfu, SIGNAL(downloadFinished()), this, SLOT(downloadFinished())); + downloadedFirmware.clear(); // Empty the byte array bool ret = m_dfu->DownloadFirmware(&downloadedFirmware,deviceID); - if(!ret) { + + if (!ret) { + emit downloadEnded(false); status("Could not start download!", STATUSICON_FAIL); + updateButtons(true); return; } - status("Download started, please wait", STATUSICON_RUNNING); + + status("Downloading, please wait...", STATUSICON_RUNNING); + return; } /** @@ -444,10 +473,13 @@ void deviceWidget::downloadFinished() { disconnect(m_dfu, SIGNAL(downloadFinished()), this, SLOT(downloadFinished())); disconnect(m_dfu, SIGNAL(progressUpdated(int)), this, SLOT(setProgress(int))); - status("Download successful", STATUSICON_OK); + // Now save the result (use the utility function from OP_DFU) m_dfu->SaveByteArrayToFile(filename, downloadedFirmware); - myDevice->retrieveButton->setEnabled(true); + + emit downloadEnded(true); + status("Download successful", STATUSICON_OK); + updateButtons(true); } /** @@ -455,13 +487,14 @@ void deviceWidget::downloadFinished() */ void deviceWidget::uploadFinished(OP_DFU::Status retstatus) { - myDevice->updateButton->setEnabled(true); disconnect(m_dfu, SIGNAL(uploadFinished(OP_DFU::Status)), this, SLOT(uploadFinished(OP_DFU::Status))); disconnect(m_dfu, SIGNAL(progressUpdated(int)), this, SLOT(setProgress(int))); disconnect(m_dfu, SIGNAL(operationProgress(QString)), this, SLOT(dfuStatus(QString))); - if(retstatus != OP_DFU::Last_operation_Success) { - status(QString("Upload failed with code: ") + m_dfu->StatusToString(retstatus).toLatin1().data(), STATUSICON_FAIL); + + if (retstatus != OP_DFU::Last_operation_Success) { emit uploadEnded(false); + status(QString("Upload failed with code: ") + m_dfu->StatusToString(retstatus).toLatin1().data(), STATUSICON_FAIL); + updateButtons(true); return; } else if (!descriptionArray.isEmpty()) { @@ -469,9 +502,10 @@ void deviceWidget::uploadFinished(OP_DFU::Status retstatus) status(QString("Updating description"), STATUSICON_RUNNING); repaint(); // Make sure the text above shows right away retstatus = m_dfu->UploadDescription(descriptionArray); - if( retstatus != OP_DFU::Last_operation_Success) { - status(QString("Upload failed with code: ") + m_dfu->StatusToString(retstatus).toLatin1().data(), STATUSICON_FAIL); + if (retstatus != OP_DFU::Last_operation_Success) { emit uploadEnded(false); + status(QString("Upload failed with code: ") + m_dfu->StatusToString(retstatus).toLatin1().data(), STATUSICON_FAIL); + updateButtons(true); return; } @@ -480,16 +514,19 @@ void deviceWidget::uploadFinished(OP_DFU::Status retstatus) status(QString("Updating description"), STATUSICON_RUNNING); repaint(); // Make sure the text above shows right away retstatus = m_dfu->UploadDescription(myDevice->description->text()); - if( retstatus != OP_DFU::Last_operation_Success) { - status(QString("Upload failed with code: ") + m_dfu->StatusToString(retstatus).toLatin1().data(), STATUSICON_FAIL); + if (retstatus != OP_DFU::Last_operation_Success) { emit uploadEnded(false); + status(QString("Upload failed with code: ") + m_dfu->StatusToString(retstatus).toLatin1().data(), STATUSICON_FAIL); + updateButtons(true); return; } } + populate(); + emit uploadEnded(true); status("Upload successful", STATUSICON_OK); - + updateButtons(true); } /** diff --git a/ground/openpilotgcs/src/plugins/uploader/devicewidget.h b/ground/openpilotgcs/src/plugins/uploader/devicewidget.h index eaf8c6a0f..2c47cbfa2 100644 --- a/ground/openpilotgcs/src/plugins/uploader/devicewidget.h +++ b/ground/openpilotgcs/src/plugins/uploader/devicewidget.h @@ -71,10 +71,13 @@ private: void status(QString str, StatusIcon ic); bool populateBoardStructuredDescription(QByteArray arr); bool populateLoadedStructuredDescription(QByteArray arr); + void updateButtons(bool enabled); signals: void uploadStarted(); void uploadEnded(bool success); + void downloadStarted(); + void downloadEnded(bool success); public slots: void uploadFirmware(); void loadFirmware(); diff --git a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp index 4b258789b..1b6ae9f6b 100755 --- a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp +++ b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp @@ -120,6 +120,8 @@ void UploaderGadgetWidget::connectSignalSlot(QWidget *widget) { connect(qobject_cast(widget),SIGNAL(uploadStarted()),this,SLOT(uploadStarted())); connect(qobject_cast(widget),SIGNAL(uploadEnded(bool)),this,SLOT(uploadEnded(bool))); + connect(qobject_cast(widget),SIGNAL(downloadStarted()),this,SLOT(downloadStarted())); + connect(qobject_cast(widget),SIGNAL(downloadEnded(bool)),this,SLOT(downloadEnded(bool))); } FlightStatus *UploaderGadgetWidget::getFlightStatus() @@ -758,15 +760,44 @@ void UploaderGadgetWidget::cancel() void UploaderGadgetWidget::uploadStarted() { + m_config->haltButton->setEnabled(false); m_config->bootButton->setEnabled(false); m_config->safeBootButton->setEnabled(false); + m_config->resetButton->setEnabled(false); + m_config->rescueButton->setEnabled(false); } void UploaderGadgetWidget::uploadEnded(bool succeed) { Q_UNUSED(succeed); + // device is halted so no halt + m_config->haltButton->setEnabled(false); m_config->bootButton->setEnabled(true); m_config->safeBootButton->setEnabled(true); + // device is halted so no reset + m_config->resetButton->setEnabled(false); + m_config->rescueButton->setEnabled(true); +} + +void UploaderGadgetWidget::downloadStarted() +{ + m_config->haltButton->setEnabled(false); + m_config->bootButton->setEnabled(false); + m_config->safeBootButton->setEnabled(false); + m_config->resetButton->setEnabled(false); + m_config->rescueButton->setEnabled(false); +} + +void UploaderGadgetWidget::downloadEnded(bool succeed) +{ + Q_UNUSED(succeed); + // device is halted so no halt + m_config->haltButton->setEnabled(false); + m_config->bootButton->setEnabled(true); + m_config->safeBootButton->setEnabled(true); + // device is halted so no reset + m_config->resetButton->setEnabled(false); + m_config->rescueButton->setEnabled(true); } /** diff --git a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.h b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.h index 9f4702e2f..3e3b0f504 100755 --- a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.h +++ b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.h @@ -115,7 +115,8 @@ private slots: void cancel(); void uploadStarted(); void uploadEnded(bool succeed); - + void downloadStarted(); + void downloadEnded(bool succeed); }; #endif // UPLOADERGADGETWIDGET_H From e710f3bb9167350a219648d50eb5d959a9099c39 Mon Sep 17 00:00:00 2001 From: Fredrik Arvidsson Date: Tue, 26 Feb 2013 07:37:14 +0100 Subject: [PATCH 19/39] OP-856 Basic renaming from PRO to Revolution --- .../src/plugins/config/config.pro | 12 ++++---- .../src/plugins/config/configgadgetwidget.cpp | 30 +++++++++---------- ...o_hw_widget.cpp => configrevohwwidget.cpp} | 20 ++++++------- ...g_pro_hw_widget.h => configrevohwwidget.h} | 20 ++++++------- ...o_hw_settings.ui => configrevohwwidget.ui} | 6 ++-- 5 files changed, 44 insertions(+), 44 deletions(-) rename ground/openpilotgcs/src/plugins/config/{config_pro_hw_widget.cpp => configrevohwwidget.cpp} (70%) rename ground/openpilotgcs/src/plugins/config/{config_pro_hw_widget.h => configrevohwwidget.h} (78%) rename ground/openpilotgcs/src/plugins/config/{pro_hw_settings.ui => configrevohwwidget.ui} (95%) diff --git a/ground/openpilotgcs/src/plugins/config/config.pro b/ground/openpilotgcs/src/plugins/config/config.pro index 0bb6cdbcc..223ad0a13 100644 --- a/ground/openpilotgcs/src/plugins/config/config.pro +++ b/ground/openpilotgcs/src/plugins/config/config.pro @@ -17,7 +17,6 @@ HEADERS += configplugin.h \ configinputwidget.h \ configoutputwidget.h \ configvehicletypewidget.h \ - config_pro_hw_widget.h \ config_cc_hw_widget.h \ configccattitudewidget.h \ configpipxtremewidget.h \ @@ -39,7 +38,8 @@ HEADERS += configplugin.h \ config_global.h \ mixercurve.h \ dblspindelegate.h \ - configautotunewidget.h + configautotunewidget.h \ + configrevohwwidget.h SOURCES += configplugin.cpp \ configgadgetconfiguration.cpp \ configgadgetwidget.cpp \ @@ -50,7 +50,6 @@ SOURCES += configplugin.cpp \ configinputwidget.cpp \ configoutputwidget.cpp \ configvehicletypewidget.cpp \ - config_pro_hw_widget.cpp \ config_cc_hw_widget.cpp \ configccattitudewidget.cpp \ configstabilizationwidget.cpp \ @@ -73,10 +72,10 @@ SOURCES += configplugin.cpp \ cfg_vehicletypes/vehicleconfig.cpp \ mixercurve.cpp \ dblspindelegate.cpp \ - configautotunewidget.cpp + configautotunewidget.cpp \ + configrevohwwidget.cpp FORMS += airframe.ui \ cc_hw_settings.ui \ - pro_hw_settings.ui \ ccpm.ui \ stabilization.ui \ input.ui \ @@ -91,7 +90,8 @@ FORMS += airframe.ui \ txpid.ui \ pipxtreme.ui \ mixercurve.ui \ - autotune.ui + autotune.ui \ + configrevohwwidget.ui RESOURCES += configgadget.qrc diff --git a/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp b/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp index 6aea1ce17..61c63e794 100644 --- a/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp @@ -35,7 +35,7 @@ #include "configautotunewidget.h" #include "configcamerastabilizationwidget.h" #include "configtxpidwidget.h" -#include "config_pro_hw_widget.h" +#include "configrevohwwidget.h" #include "config_cc_hw_widget.h" #include "configpipxtremewidget.h" #include "configrevowidget.h" @@ -136,7 +136,7 @@ ConfigGadgetWidget::ConfigGadgetWidget(QWidget *parent) : QWidget(parent) } help = 0; - connect(ftw,SIGNAL(currentAboutToShow(int,bool*)),this,SLOT(tabAboutToChange(int,bool*)));//,Qt::BlockingQueuedConnection); + connect(ftw,SIGNAL(currentAboutToShow(int,bool*)), this, SLOT(tabAboutToChange(int,bool*))); // Connect to the PipXStatus object updates UAVObjectManager *objManager = pm->getObject(); @@ -173,20 +173,21 @@ void ConfigGadgetWidget::resizeEvent(QResizeEvent *event) void ConfigGadgetWidget::onAutopilotDisconnect() { ftw->setCurrentIndex(ConfigGadgetWidget::hardware); - ftw->removeTab(ConfigGadgetWidget::sensors); QIcon *icon = new QIcon(); icon->addFile(":/configgadget/images/ins_normal.png", QSize(), QIcon::Normal, QIcon::Off); icon->addFile(":/configgadget/images/ins_selected.png", QSize(), QIcon::Selected, QIcon::Off); QWidget *qwd = new DefaultAttitudeWidget(this); + ftw->removeTab(ConfigGadgetWidget::sensors); ftw->insertTab(ConfigGadgetWidget::sensors, qwd, *icon, QString("INS")); - ftw->removeTab(ConfigGadgetWidget::hardware); icon = new QIcon(); icon->addFile(":/configgadget/images/hardware_normal.png", QSize(), QIcon::Normal, QIcon::Off); icon->addFile(":/configgadget/images/hardware_selected.png", QSize(), QIcon::Selected, QIcon::Off); qwd = new DefaultHwSettingsWidget(this); + ftw->removeTab(ConfigGadgetWidget::hardware); ftw->insertTab(ConfigGadgetWidget::hardware, qwd, *icon, QString("Hardware")); + ftw->setCurrentIndex(ConfigGadgetWidget::hardware); emit autopilotDisconnected(); @@ -203,40 +204,39 @@ void ConfigGadgetWidget::onAutopilotConnect() { int board = utilMngr->getBoardModel(); if ((board & 0xff00) == 1024) { // CopterControl family - // Delete the INS panel, replace with CC Panel: - ftw->setCurrentIndex(ConfigGadgetWidget::hardware); - ftw->removeTab(ConfigGadgetWidget::sensors); QIcon *icon = new QIcon(); icon->addFile(":/configgadget/images/ins_normal.png", QSize(), QIcon::Normal, QIcon::Off); icon->addFile(":/configgadget/images/ins_selected.png", QSize(), QIcon::Selected, QIcon::Off); QWidget *qwd = new ConfigCCAttitudeWidget(this); - ftw->insertTab(ConfigGadgetWidget::sensors, qwd, *icon, QString("INS")); - ftw->removeTab(ConfigGadgetWidget::hardware); + ftw->removeTab(ConfigGadgetWidget::sensors); + ftw->insertTab(ConfigGadgetWidget::sensors, qwd, *icon, QString("CopterControl")); icon = new QIcon(); icon->addFile(":/configgadget/images/hardware_normal.png", QSize(), QIcon::Normal, QIcon::Off); icon->addFile(":/configgadget/images/hardware_selected.png", QSize(), QIcon::Selected, QIcon::Off); qwd = new ConfigCCHWWidget(this); + ftw->removeTab(ConfigGadgetWidget::hardware); ftw->insertTab(ConfigGadgetWidget::hardware, qwd, *icon, QString("Hardware")); + ftw->setCurrentIndex(ConfigGadgetWidget::hardware); } else if ((board & 0xff00) == 0x0900) { - // Revolution sensor calibration - ftw->setCurrentIndex(ConfigGadgetWidget::hardware); - ftw->removeTab(ConfigGadgetWidget::sensors); + // Revolution family QIcon *icon = new QIcon(); icon->addFile(":/configgadget/images/ins_normal.png", QSize(), QIcon::Normal, QIcon::Off); icon->addFile(":/configgadget/images/ins_selected.png", QSize(), QIcon::Selected, QIcon::Off); QWidget *qwd = new ConfigRevoWidget(this); - ftw->insertTab(ConfigGadgetWidget::sensors, qwd, *icon, QString("Revo")); - ftw->removeTab(ConfigGadgetWidget::hardware); + ftw->removeTab(ConfigGadgetWidget::sensors); + ftw->insertTab(ConfigGadgetWidget::sensors, qwd, *icon, QString("Revolution")); icon = new QIcon(); icon->addFile(":/configgadget/images/hardware_normal.png", QSize(), QIcon::Normal, QIcon::Off); icon->addFile(":/configgadget/images/hardware_selected.png", QSize(), QIcon::Normal, QIcon::On); - qwd = new ConfigProHWWidget(this); + qwd = new ConfigRevoHWWidget(this); + ftw->removeTab(ConfigGadgetWidget::hardware); ftw->insertTab(ConfigGadgetWidget::hardware, qwd, *icon, QString("Hardware")); + ftw->setCurrentIndex(ConfigGadgetWidget::hardware); } else { //Unknown board diff --git a/ground/openpilotgcs/src/plugins/config/config_pro_hw_widget.cpp b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp similarity index 70% rename from ground/openpilotgcs/src/plugins/config/config_pro_hw_widget.cpp rename to ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp index 0f050cbc2..f1abd4b62 100644 --- a/ground/openpilotgcs/src/plugins/config/config_pro_hw_widget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp @@ -1,13 +1,13 @@ /** ****************************************************************************** * - * @file configtelemetrywidget.h + * @file configrevohwwidget.cpp * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. * @addtogroup GCSPlugins GCS Plugins * @{ * @addtogroup ConfigPlugin Config Plugin * @{ - * @brief The Configuration Gadget used to update settings in the firmware + * @brief Revolution hardware configuration panel *****************************************************************************/ /* * This program is free software; you can redistribute it and/or modify @@ -24,7 +24,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "config_pro_hw_widget.h" +#include "configrevohwwidget.h" #include #include @@ -34,19 +34,19 @@ #include -ConfigProHWWidget::ConfigProHWWidget(QWidget *parent) : ConfigTaskWidget(parent) +ConfigRevoHWWidget::ConfigRevoHWWidget(QWidget *parent) : ConfigTaskWidget(parent) { - m_telemetry = new Ui_PRO_HW_Widget(); - m_telemetry->setupUi(this); + m_ui = new Ui_RevoHWWidget(); + m_ui->setupUi(this); - addApplySaveButtons(m_telemetry->saveTelemetryToRAM,m_telemetry->saveTelemetryToSD); - addUAVObjectToWidgetRelation("HwSettings","TelemetrySpeed",m_telemetry->telemetrySpeed); + addApplySaveButtons(m_ui->saveTelemetryToRAM, m_ui->saveTelemetryToSD); + addUAVObjectToWidgetRelation("HwSettings", "TelemetrySpeed", m_ui->telemetrySpeed); enableControls(false); populateWidgets(); refreshWidgetsValues(NULL); } -ConfigProHWWidget::~ConfigProHWWidget() +ConfigRevoHWWidget::~ConfigRevoHWWidget() { // Do nothing } @@ -55,6 +55,6 @@ ConfigProHWWidget::~ConfigProHWWidget() /** Request telemetry settings from the board */ -void ConfigProHWWidget::refreshValues() +void ConfigRevoHWWidget::refreshValues() { } diff --git a/ground/openpilotgcs/src/plugins/config/config_pro_hw_widget.h b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.h similarity index 78% rename from ground/openpilotgcs/src/plugins/config/config_pro_hw_widget.h rename to ground/openpilotgcs/src/plugins/config/configrevohwwidget.h index 021e19aaf..84aa3c075 100644 --- a/ground/openpilotgcs/src/plugins/config/config_pro_hw_widget.h +++ b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.h @@ -1,13 +1,13 @@ /** ****************************************************************************** * - * @file configtelemetrytwidget.h + * @file configrevohwwidget.h * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. * @addtogroup GCSPlugins GCS Plugins * @{ * @addtogroup ConfigPlugin Config Plugin * @{ - * @brief Telemetry configuration panel + * @brief Revolution hardware configuration panel *****************************************************************************/ /* * This program is free software; you can redistribute it and/or modify @@ -24,10 +24,10 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef CONFIGPROHWWIDGET_H -#define CONFIGPROHWWIDGET_H +#ifndef CONFIGREVOHWWIDGET_H +#define CONFIGREVOHWWIDGET_H -#include "ui_pro_hw_settings.h" +#include "ui_configrevohwwidget.h" #include "../uavobjectwidgetutils/configtaskwidget.h" #include "extensionsystem/pluginmanager.h" #include "uavobjectmanager.h" @@ -36,20 +36,20 @@ #include -class ConfigProHWWidget: public ConfigTaskWidget +class ConfigRevoHWWidget: public ConfigTaskWidget { Q_OBJECT public: - ConfigProHWWidget(QWidget *parent = 0); - ~ConfigProHWWidget(); + ConfigRevoHWWidget(QWidget *parent = 0); + ~ConfigRevoHWWidget(); private: - Ui_PRO_HW_Widget *m_telemetry; + Ui_RevoHWWidget *m_ui; private slots: virtual void refreshValues(); }; -#endif // CONFIGPROHWWIDGET_H +#endif // CONFIGREVOHWWIDGET_H diff --git a/ground/openpilotgcs/src/plugins/config/pro_hw_settings.ui b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui similarity index 95% rename from ground/openpilotgcs/src/plugins/config/pro_hw_settings.ui rename to ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui index 4c782357c..e8cc05dd1 100644 --- a/ground/openpilotgcs/src/plugins/config/pro_hw_settings.ui +++ b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui @@ -1,7 +1,7 @@ - PRO_HW_Widget - + RevoHWWidget + 0 @@ -29,7 +29,7 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Set the serial speed of your onboard telemetry modem here. It is the speed between the OpenPilot board and the onboard modem, and could be different from the radio link speed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Beware of not locking yourself out! You should only modify this setting when the OpenPilot board is connected through the USB port.</span></p></body></html> From de026a13fc5b92569a5191b8f8bb6d6ef221ba66 Mon Sep 17 00:00:00 2001 From: Fredrik Arvidsson Date: Thu, 28 Feb 2013 08:13:21 +0100 Subject: [PATCH 20/39] OP-856 Basic implementation of hardware settings page. --- .../src/plugins/config/configgadget.qrc | 1 + .../src/plugins/config/configgadgetwidget.cpp | 2 +- .../src/plugins/config/configrevohwwidget.cpp | 137 ++- .../src/plugins/config/configrevohwwidget.h | 8 + .../src/plugins/config/configrevohwwidget.ui | 890 ++++++++++++++++-- .../plugins/config/images/revolution_top.png | Bin 0 -> 157186 bytes 6 files changed, 926 insertions(+), 112 deletions(-) create mode 100644 ground/openpilotgcs/src/plugins/config/images/revolution_top.png diff --git a/ground/openpilotgcs/src/plugins/config/configgadget.qrc b/ground/openpilotgcs/src/plugins/config/configgadget.qrc index ff81d79fb..a5b006745 100644 --- a/ground/openpilotgcs/src/plugins/config/configgadget.qrc +++ b/ground/openpilotgcs/src/plugins/config/configgadget.qrc @@ -30,5 +30,6 @@ images/camstab_normal.png images/pipx-selected.png images/pipx-normal.png + images/revolution_top.png diff --git a/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp b/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp index 61c63e794..a0fc602b8 100644 --- a/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp @@ -232,7 +232,7 @@ void ConfigGadgetWidget::onAutopilotConnect() { icon = new QIcon(); icon->addFile(":/configgadget/images/hardware_normal.png", QSize(), QIcon::Normal, QIcon::Off); - icon->addFile(":/configgadget/images/hardware_selected.png", QSize(), QIcon::Normal, QIcon::On); + icon->addFile(":/configgadget/images/hardware_selected.png", QSize(), QIcon::Selected, QIcon::Off); qwd = new ConfigRevoHWWidget(this); ftw->removeTab(ConfigGadgetWidget::hardware); ftw->insertTab(ConfigGadgetWidget::hardware, qwd, *icon, QString("Hardware")); diff --git a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp index f1abd4b62..532dc3b48 100644 --- a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp @@ -27,11 +27,9 @@ #include "configrevohwwidget.h" #include -#include -#include -#include -#include -#include +#include +#include +#include "hwsettings.h" ConfigRevoHWWidget::ConfigRevoHWWidget(QWidget *parent) : ConfigTaskWidget(parent) @@ -39,18 +37,139 @@ ConfigRevoHWWidget::ConfigRevoHWWidget(QWidget *parent) : ConfigTaskWidget(paren m_ui = new Ui_RevoHWWidget(); m_ui->setupUi(this); + ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); + Core::Internal::GeneralSettings *settings = pm->getObject(); + if(!settings->useExpertMode()) { + m_ui->saveTelemetryToRAM->setEnabled(false); + m_ui->saveTelemetryToRAM->setVisible(false); + } + addApplySaveButtons(m_ui->saveTelemetryToRAM, m_ui->saveTelemetryToSD); - addUAVObjectToWidgetRelation("HwSettings", "TelemetrySpeed", m_ui->telemetrySpeed); - enableControls(false); + addUAVObjectToWidgetRelation("HwSettings","RM_FlexiPort",m_ui->cbFlexi); + addUAVObjectToWidgetRelation("HwSettings","RM_MainPort",m_ui->cbMain); + addUAVObjectToWidgetRelation("HwSettings","RM_RcvrPort",m_ui->cbRcvr); + + addUAVObjectToWidgetRelation("HwSettings","USB_HIDPort",m_ui->cbUSBHIDFunction); + addUAVObjectToWidgetRelation("HwSettings","USB_VCPPort",m_ui->cbUSBVCPFunction); + addUAVObjectToWidgetRelation("HwSettings","ComUsbBridgeSpeed",m_ui->cbUSBVCPSpeed); + + addUAVObjectToWidgetRelation("HwSettings","TelemetrySpeed",m_ui->cbFlexiTelemSpeed); + addUAVObjectToWidgetRelation("HwSettings","GPSSpeed",m_ui->cbFlexiGPSSpeed); + addUAVObjectToWidgetRelation("HwSettings","ComUsbBridgeSpeed",m_ui->cbFlexiComSpeed); + + addUAVObjectToWidgetRelation("HwSettings","TelemetrySpeed",m_ui->cbMainTelemSpeed); + addUAVObjectToWidgetRelation("HwSettings","GPSSpeed",m_ui->cbMainGPSSpeed); + addUAVObjectToWidgetRelation("HwSettings","ComUsbBridgeSpeed",m_ui->cbMainComSpeed); + + addUAVObjectToWidgetRelation("HwSettings","RadioPort",m_ui->cbModem); + setupCustomCombos(); + enableControls(true); populateWidgets(); - refreshWidgetsValues(NULL); + refreshWidgetsValues(); + forceConnectedState(); } ConfigRevoHWWidget::~ConfigRevoHWWidget() { - // Do nothing + // Do nothing } +void ConfigRevoHWWidget::setupCustomCombos() +{ + m_ui->cbUSBType->addItem(tr("HID"), USB_HID); + m_ui->cbUSBType->addItem(tr("VCP"), USB_VCP); + connect(m_ui->cbUSBType, SIGNAL(currentIndexChanged(int)), this, SLOT(usbTypeChanged(int))); + + m_ui->cbSonar->addItem(tr("Disabled")); + m_ui->cbSonar->setCurrentIndex(0); + m_ui->cbSonar->setEnabled(false); + + connect(m_ui->cbFlexi, SIGNAL(currentIndexChanged(int)), this, SLOT(flexiPortChanged(int))); + connect(m_ui->cbMain, SIGNAL(currentIndexChanged(int)), this, SLOT(mainPortChanged(int))); + +} + +void ConfigRevoHWWidget::refreshWidgetsValues(UAVObject *obj) +{ + ConfigTaskWidget::refreshWidgetsValues(obj); + HwSettings *hwSettings = HwSettings::GetInstance(getObjectManager()); + HwSettings::DataFields data = hwSettings->getData(); + if(data.USB_HIDPort != HwSettings::USB_HIDPORT_DISABLED){ + m_ui->cbUSBType->setCurrentIndex(m_ui->cbUSBType->findData(USB_HID)); + } + else { + m_ui->cbUSBType->setCurrentIndex(m_ui->cbUSBType->findData(USB_VCP)); + } + usbTypeChanged(m_ui->cbUSBType->currentIndex()); + mainPortChanged(0); + flexiPortChanged(0); +} + +void ConfigRevoHWWidget::usbTypeChanged(int index) +{ + Q_UNUSED(index); + + bool hid = m_ui->cbUSBType->itemData(m_ui->cbUSBType->currentIndex()) == USB_HID; + m_ui->cbUSBHIDFunction->setVisible(hid); + m_ui->cbUSBVCPFunction->setVisible(!hid); + + m_ui->lblUSBVCPSpeed->setVisible(!hid); + m_ui->cbUSBVCPSpeed->setVisible(!hid); +} + +void ConfigRevoHWWidget::flexiPortChanged(int index) +{ + Q_UNUSED(index); + + m_ui->cbFlexiTelemSpeed->setVisible(false); + m_ui->cbFlexiGPSSpeed->setVisible(false); + m_ui->cbFlexiComSpeed->setVisible(false); + m_ui->lblFlexiSpeed->setVisible(true); + + int value = m_ui->cbFlexi->currentIndex(); + switch(value) + { + case HwSettings::RM_FLEXIPORT_TELEMETRY: + m_ui->cbFlexiTelemSpeed->setVisible(true); + break; + case HwSettings::RM_FLEXIPORT_GPS: + m_ui->cbFlexiGPSSpeed->setVisible(true); + break; + case HwSettings::RM_FLEXIPORT_COMBRIDGE: + m_ui->cbFlexiComSpeed->setVisible(true); + break; + default: + m_ui->lblFlexiSpeed->setVisible(false); + break; + } +} + +void ConfigRevoHWWidget::mainPortChanged(int index) +{ + Q_UNUSED(index); + + m_ui->cbMainTelemSpeed->setVisible(false); + m_ui->cbMainGPSSpeed->setVisible(false); + m_ui->cbMainComSpeed->setVisible(false); + m_ui->lblMainSpeed->setVisible(true); + + int value = m_ui->cbMain->currentIndex(); + switch(value) + { + case HwSettings::RM_FLEXIPORT_TELEMETRY: + m_ui->cbMainTelemSpeed->setVisible(true); + break; + case HwSettings::RM_FLEXIPORT_GPS: + m_ui->cbMainGPSSpeed->setVisible(true); + break; + case HwSettings::RM_FLEXIPORT_COMBRIDGE: + m_ui->cbMainComSpeed->setVisible(true); + break; + default: + m_ui->lblMainSpeed->setVisible(false); + break; + } +} /** Request telemetry settings from the board diff --git a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.h b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.h index 84aa3c075..7e4bd4c16 100644 --- a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.h +++ b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.h @@ -45,10 +45,18 @@ public: ~ConfigRevoHWWidget(); private: + enum {USB_HID, USB_VCP}; Ui_RevoHWWidget *m_ui; + void setupCustomCombos(); + +protected slots: + void refreshWidgetsValues(UAVObject * obj = NULL); private slots: virtual void refreshValues(); + void usbTypeChanged(int index); + void flexiPortChanged(int index); + void mainPortChanged(int index); }; diff --git a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui index e8cc05dd1..6814108c9 100644 --- a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui +++ b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui @@ -6,8 +6,8 @@ 0 0 - 505 - 389 + 834 + 742 @@ -15,112 +15,798 @@ - - - QFrame::StyledPanel + + + 0 - - QFrame::Raised - - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Set the serial speed of your onboard telemetry modem here. It is the speed between the OpenPilot board and the onboard modem, and could be different from the radio link speed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Beware of not locking yourself out! You should only modify this setting when the OpenPilot board is connected through the USB port.</span></p></body></html> - - - - - - - - - - 11 - 75 - true - - - - Telemetry speed: + + + HW settings + + + + 0 + + + + + + + + + + 255 + 255 + 255 + + + + + + + 232 + 232 + 232 + + + + + + + + + 255 + 255 + 255 + + + + + + + 232 + 232 + 232 + + + + + + + + + 232 + 232 + 232 + + + + + + + 232 + 232 + 232 + + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + true + + + + + 0 + 0 + 806 + 654 + + + + 12 + + + + + Qt::Vertical + + + + 20 + 25 + + + + + + + + + 0 + 0 + + + + + 500 + 0 + + + + + 500 + 16777215 + + + + + 75 + true + + + + Changes on this page only take effect after board reset or power cycle + + + Qt::AlignCenter + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 120 + 10 + + + + + + + + Sonar Port + + + Qt::AlignCenter + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 50 + 10 + + + + + + + + + 0 + 0 + + + + Function + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + + + Main Port + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + + + + + + + 0 + 0 + + + + Receiver Port + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 25 + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 120 + + + + + + + + + 0 + 0 + + + + + 350 + 350 + + + + + + + :/configgadget/images/revolution_top.png + + + false + + + Qt::AlignCenter + + + Qt::NoTextInteraction + + + + + + + + 0 + 0 + + + + USB Type + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + + + + + + + + + Speed + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + + + false + + + + + + + Speed + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + + + + + + + + + Radio + + + Qt::AlignCenter + + + + + + + Flexi Port + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 120 + 10 + + + + + + + + Speed + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + + + 0 + + + + + true + + + + + + + + + + + + + + + 0 + + + + + true + + + + + + + + + + + + + + + true + + + + + + + 0 + + + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 120 + 10 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 120 + 10 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 120 + 10 + + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 16 + + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 22 + + + + + + + - - - - - Select the speed here. - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - 4 - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Send to OpenPilot but don't write in SD. -Beware of not locking yourself out! - - - Apply - - - - - - - Applies and Saves all settings to SD. -Beware of not locking yourself out! - - - Save - - - - - - + + + + + + + + 4 + + + + + Qt::Horizontal + + + + 369 + 20 + + + + + + + + + 0 + 0 + + + + + 25 + 25 + + + + + 25 + 25 + + + + Takes you to the wiki page + + + + + + + :/core/images/helpicon.svg:/core/images/helpicon.svg + + + + 25 + 25 + + + + true + + + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + + + + + 255 + 255 + 255 + + + + + + + 232 + 232 + 232 + + + + + + + + + 255 + 255 + 255 + + + + + + + 232 + 232 + 232 + + + + + + + + + 232 + 232 + 232 + + + + + + + 232 + 232 + 232 + + + + + + + + Send to OpenPilot but don't write in SD. +Beware of not locking yourself out! + + + false + + + + + + Apply + + + + 16 + 16 + + + + false + + + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Applies and Saves all settings to SD. +Beware of not locking yourself out! + + + false + + + + + + Save + + + + + - + + + + diff --git a/ground/openpilotgcs/src/plugins/config/images/revolution_top.png b/ground/openpilotgcs/src/plugins/config/images/revolution_top.png new file mode 100644 index 0000000000000000000000000000000000000000..633c424dfbe49ec5b8bdb963f54ad74416fa537f GIT binary patch literal 157186 zcmeF2byHl;6Yp`C1Ofz4a0wRN6Wj^z_7EWG;w(;r2e%Mx3BjG+a=u zU%-6@x9Uut>N)?Mnx5(T^mlrqzi22D;!)wDpr8;cE6Hi2prD%nui;?5^o(=*P`$iR zJ+u{NP^u0020! z@a(L(uJY)@>Cz$$z8gg*0qUQ*KnTK!gHBb`Se=cg4#~v(p1bfv05S&N- zwR-A+=j_}lQ>EsL{PWmYbhEw@6eONKIF=5|9uT$}*$vbwR$mgfpAKu!AM`xU5%B$6 zU{f-%!g6HX;@-c$$N9@%Ytrz8Wx@7k3G^f7)#miv)za5XJKN{R@~TV3otWV z1GPRpNbWj1INq@F^!aO7uBJFRINs`V@<4In9jy^oA3BPROB)-#t0h)U^vv3ujH7Nz zTmXfuC;TndRpcFID)&@dzLl@mB}mPy$kNh!E@?^UVFR6ir<1DJ8J|EGc%)wZC3NqB#MPro7VSP3NQvxOXVnAf;PCR9~co*_-l z&GpSpO+7zKN!=749!6>Q_WVFnQc+zwfBObY+uZz=7sC1e{bz&SjCE?M$?bk=wog#n z=im?YOi(H*!_Mx<#l;d%e2TG_WDw{t_@4avto}D3QVeFbaOZQmZxWB(PQ2kpp4Vpt z+uT8w+Hxq8Z(c>qK3CTBYYf63Dr-)PWOv;}kjtr1$ERc~f?cEre7hE6pYF`(*4%lF?< z+8|vU(B}C;&!9*>3uuFQGBPMDAFU3Hj5JkNR|mTzo-#P?AfV>t>Q$eOH3M!_5ud%WjJ7K9^*pD+dfSsJYVYEyXBnRI2*JJ#vYA+~D* z4FJz?d|wdz+7o$olkPqh(Dgek3zHMV4W}&?G8ISn$X9Nzx6}B(CQq1k6xm1Y(kOX=^ zcGKiLaCS)l_K*`y+#~b!it4mDh*6QK-yhl@6Gy!uGmTYh$`Zia`)CyK2X^7|r^)pB z6$>JOZgvlF2eNMf5<(L;-*s%vAX||#Qei>sD&T`#%6Yg&)m{d9@UwnNfgtZ>@rngf zetMF#();e!aLOy?jh|#M;iB^y6U|n{b%ieA0v_4ydGz_|8JfEl%}UqZ6Yjz5bFTJu zkq+4!7qj{Iq=iP zCGfnZIPq6z)M>?=r-wCR_+dVA-rv7+Pv%{h5b01#{vylXhq=4m6k>R}MSFaqD#a$q zqZoEn9Gnao>t6H8?Xo~V@X?_w4k5|w-@i`zNf{c3x0YXa5V)@ zN>69@?E+uTUGVR9xu?4)2E5wjMI>u3q=xSLek(B}k|GB@odqy0-H(WMiwIaS^YqFX z-F(0ff`r+LE<)=N_$8uX`U)>*wh*sasH*6am(sT27Wx-$?U0v0;8Gfl{C$YSbvyY= zC%#)d{z+Kec@257<6B93QTghAz%LF8cB{$sPL)1Pp&fSUdlvdBIar^^a3 z0W}L5vq%@=dsJ>5Vs9N4jredS!@HZ6>cWqmaTgcKRe+c`dC*8D`B;XQ@1*jvpJwHsZP4d29bj-2MT2M<+7Zj)iJ5=#f2I%OvOOKf3 z!+?kU`&nj3^6oP=BatRZ71zXi`LN~_;ZSs}Z_AV*`>**&2;pC$)hP8849pTUTeuXF3tMb++oEN_l8i)!Qf4on68kPw3dh=b^D*5;M|RECXIcpN<7*_4js4S?ME` zibXs(^-=pYYaADZ3JRI=VMXs)SV+R4VKSgf;Tsg8& zme_2v8F4pAoS2)-g=EY5xr=$p#4u|n_Er;JKiSS((eYv}HAcyo99rxP`G{kagPTUQ z!p&Mv+_?noQf3puJIr8})MJ`Mkd)z%mjC`U#;$L0Oa%7tR zbY+uE+QUPd=ZDVT$-Hsxee^PmGX z&o8VjE-C_>nrcr^in@&;Yd5=&5Sq;ur(?(*P*N+Sgv1rJ=o4WH7RHwge$4s)+Z!ae zR2K})iirc^#o+6W340G|eWnE_VW9;+_6*kXfF;e|C{ax0vXCrWpayVmUXYzj1Yx+j zO;LgDX93ti``*jzV{GCkDV&R!P~T*?Ty@EF0SbbYOM}}@UoqW&N1QJ_#f)EC3`Jr@ z_c3lrGslSS~e_m>cqW`W~Rs81-!b6BQ+ zFg!(p?r;!ro#OLo-Crw;2F|sd$fhhQE?*+N=fK&lu$M*nguGiBI`pz0qMJ&wyYCbv}t` zlgK7zzh&O!>heEA)lH>fGnBfXwZ>b<#1sYIt~J3Ht%=`Dy~oNDs?^(*3`SI-oz0uf zcWo@_F&&6Jo%=wy(+teJVt7pF-JiB&AbNN#u>IYy-wqC-;~#~QDwftuH4`H9pZ8S_ z*1w51+kg}Sr=xGcZ>?I|lqjzZKsgM(7S*dmj;w4O_^=~vP2p13 zj^|zfi$LEh1WA0z{G?&%1`;8Bk-NcmXWr~eWOSs3^S_ya`oSakN44Id-!nB7y#i3) zDQoN$d`|^Zx$IY3R}cZ^QtID#tzs-9|_AyDX{+PGogGZVFHLC!$0Tcgk5*#q03aHV|9!ZVF>UG0_& z6K~^t^AJsX--HmZIJ0x~XDri8p7wjoq~AE_F6c~^Rnv*PQX*YuPXV(QJB?!Dbl}{u zDJWm%^Dcr#IaJA%;oAE-CP%1+1Q^QfA`K04rJXdOe*RflhuJJe*5&_}f@eLl6R~Fv zzM8fPxSrd9Z$(14hFR&!Cf8!gIDZ}1AZDXi;7t%@teLp*e;XhZ44iYVKWnXC`FBX= zYEjV)Dr`M+K<9PY?){F^Ph$CifK;@{{B-U=;13(9z!W)c!LG-{e2NCf0;(t*55&_N z9(bjxiu9eA{Et5PxQ+tgbx`?8rbdih zo=oYgUN~AhB5+r7W(x}o=3f-g%+$Ayc!b!qDs3`9n_c|3eu}${3-=FNudr4tjz&Hp zZ%FT|#C9g>b{&=@J7sfPLBSM<7Ru_XEvvHZ~@<`=3&tT(T>!}nBex9BYp z>V-^MI6Vi@c4~I^=rw!7i?sLoZ31$P!(T4);uql-CEPW>>M=w+1@Muk#SqU$9%$W` zSW!-zfmf?qTh9C|i=+X}#U;zY$DW&?$w}YEjl4J&&^vJ46Th6C7<4g@c<%oAH6519 z!rl;p>Ho8Hx6V3;Obn_;(m9Jsq99ARqe{S9b&&K1=rbfv382JF{7ezPW+@LbhmMSVSR|>5Lh&swpC9R(G?gBKH0|nwq)6$rIp-3m1GT6&q9>v zc>7B0a)?lC|7i=z+O)q&y6^V6C*l;{sqwAc{k$H9L)MiD&>pvZ#frN}$)$4$^W0Ne8> zO%B7!a9cbWIr+X(*CTIo^0wzi?8D9rS8gwjYH}n3mg-3q6HZfzwso8qYZN{| z3U~S{Dt_ohTvxvVmhS9@>D7erywF0bY!KrVALO@!4pC9O$S?c@jFJT#$}lCw7l=mi z!_vKq*>S_(C&BPY@TmJMWrO2S#KFEB+}P&MQW9!i+S5vZiq3Pum7t-C;Yp3eY3}a% zkm~ox8@JH4pM4_HnjNFVy^e@*d$Q?z6R(n(CS)N6pg8U6_QTqB7+F? zR1jOsBxLF(60ulaTfFTsY3Q=MI#G#vFxjf!A`D4^s+a)Gt8Qu%NnLLy)4OhlS%W8s z8^ZDTae&Wsx9k22%&+?qTn=OR%caF8Utu*4!UmQqvNn#*FNp#KUF=e`xP)Q#GTj8C%jXm<%`$U83ZPI^7gyq^)XplQ{#(kcnZxu0$-+- zmW4s#);-{+^KFOSvj4@J*D+Oxfw6K0e@Dl<89cMm0fY5%1K3Unag{O9(b3`Yi9PZ> z4hSX^wmoe|rlsYysCQlcBrL#?@kbl3A{YyJc)Y*w8eG8#fzDwt*Us&|J$PJG`hj#n zV4&139FCAV%$4d`r%Fe~VLZ!dW^&n6@Af{)`v5|?LwMsKg!lG3G&l}f>5-o~Di{xM z3SLGS|8%iK{&Ps&q=r9nPWn@d8GJSuxy;D5wrLC0*WIeDhph{UMF#(yE~8Do^C@gk zM+$<;a>p;T_E+M;vc`KrSSP5q*@HLVJ2`kd4WJ^d2rzrVZtXuo!b@JHCm-Pcf&D&GD?<lwuB|F@Ge4gjWokJR}(Q2Oo@%K)b%X!hAmVHgW_r5;r*%IUSXE1uN zv@|j@H#ffEI)5Qs0e^=!6emzP`#XFC0}8Y%luD?zmX?-BXlN*YN^*+FPgRwfk01H# zWO`-r|J&JSi42dFd_zNXm(k}x7nJ+e(~u~DCx-`mR=+6GTaz~}T>ShDcEpH&S% zYf5E0JurYpN(2ah4uay+<;v8+!$XEg8okV`M zs9PE#PM%)#W5ArkZ`oPy^$h}}xu-D$#M1Vj!&N4c#C7L;8ikJlHa(rzj}pCbBVVKU z#wHPX&HbgFM4cHzL>po|w-qQTu7m5?M5VX}ss3 zQ)x3JdeVp7`~j!(`3{Qp9_;D`_KR7~l`bx_H5_iTbz?1;8+879cqp7*2sVVo?v5&J zE%UBi$3VsB+1n^t@rCb`r;q9wzUOPzjgjovpj}^FP+-f#)R&7xO#Ez;C`bU+(%Q{n z43-Qoit}Sp(YG)rb-*yqq|>T&-Rv^Y79V_nZE+>~Y`^0FaAh_`K3rYSaMbB#z(lRo z<~zeiDDrl5&!@LA$=0UuZ_PW}etAkZu3;HBtBCdVG+RzG3L8dl?h%x*FHUM~Dlytx zW=YXhc_Y&Tx@m=ZMacnJ94b0VN#y05+c`Y=%pg zw&M3kF?U`d&~Uix*N8s^s_8-6ExdTClch3BhSmMVR3I7IS>n(H;h>M1UY0zFa7 zFT9Oud?^J3GBPv$SOmEwM;#(IPF_~WjI4|-G^O#mL8)6`oYy%QZmxNd^$YZ{eK#>I zrT<3bR>#cSTi+RIIJEHLt8McRtY=@;6b^F@O)nm#_}u+DW^{y8qGBPqUR7C{lJ@oM z8w!86uUDXWS>`O^jeUMa&`qA{lw9deF7hc7?R>dG_(bkCr|5NR48{21-l*mlAox)i z^|w&Ri%p7rbx#pJN(VAQ&I{JpcAgC?a~b5M6;bNQ0Yfwt{_(B)oj6E%I}p%G^O0zR z9J*)hjA3JIl|Tf@8|(^Ylki455K!wE6Q=8$q{S&}#tmjsn84>{Bi6nDEO5sU)cVSj z@y5C&whGfLQ(r1hlWpc(mV-@)Nntp6H+9_RRciDxVjfRkFYfZsg+uZ)Br1s(L%d2%xX7kpDzW=MJ5bZ~wr zZAXEK=Jk-K^m7T?CP;EcP$R{A2KVE}(5>!0?2*Vz36W(mZ?OY`1u3cg9DGrNF%8+* zf}&q^VRf&Cw6sEF3wA=C_6wLSg(oxp+zYxr;5#jW>5`K29@@`u-rqBB)cNk~2?IKu zPdphJdXbq)8GQW?-qOo+^MW_(nvm7Av%Txmwyg4cUqGDZN*SU&dSl-v_14Qq@7n3a ztN4+@xeRSS8r$-L|V1o%k38X%BGB&8E#y7eGbvI5X8N>JrAvjHI%p<%RfA&3C&k*+&+68fzK}yfPIC` zs(EsTdN_+~VFPQTK*aZqZq*admgi7}eodz%2w zz3pmEga6h(=HqDv*6s3peZ$iw+UxTFVXS4vvaF!{x4nO|BuS=H@9ytQ@sKuSsq zM*yKhlODdFm70IU7eX=Paz5Y}!N2*vZAd-T{;iGc6@Aem$y`1zru~$yxXv7*^%vdG z_h?A`?o#R_2LV30MmKHb{C0e3x$E7e15HaHArY-<Bvu~Jx>+9v5mTGl-u4AF`vM0RO zwyZC>7J6)v>vx=dTp`*rZ-!hd9crqV^?Wkem-orB2AaopPTgyZ6~sUG5(kHBO5J~A z6|wIb^mFRrckyOG9U4;VJ~f(|-M^pFl%6VFRm0!06gv%IGV8tNpr9-a(*I&8FyP=K zy`&Bjd)%1e|2XLH?;oh}IcC!_9l!df$w`Wx9j=_@hm5>#oq0AiFxLW6l99oMZJ8oD zKRAi!dzCO6005fJtwhZvG&JC8zccAwZSCYiCCsNDI;tdKu$j3YI%-K7_aNy<0`b5L zUgHSiciajQ;@wr-&{DEy@iUeH-LK7=0$gSv4G0lFXRBe0O7}d$RmPXeu*Ud>Fkx@- zg)d)=VjEs@$}42g*P_~lhT{LY1NINQ;jISvZl(g2R{MS zv-F1Te=1)7ON&w5I*XBom19%GCqmKTD~g%0HpMLX$)FgFkBQhWG*+QY}0@B;#q9 zLZmxCQs=hMIvl2>X#kvh?{ssMAPH&gmKOU= z;etw&^eqUW>gC((;N-C9r-otR@l+t5?URd^7B{za2SspjAVUYRfzU!pWIA`lFj_q; zy)?(&*}0Ir+Ex@stKQaE-Rq-FT4?88)b7<`d{7ZA2!3*`Y4V2Mx0H$mBLvRd59&2Y ziV9hV4~IW?rh@B`bFiQ&9Q;op&&)bI^*O(ZcA;;8af$lNq^%bro&_?rVxJ^*orbbS zP@eHT>N1_0f#gnx()su-REr)B)YtZI&S~K50iJv)yAkage(EQB#gG5ErKJHa0uE+u zRwtgcoaFqOV!0t*AqT3XBa)R1h+b}H!TYejU_H)cz2DyQ$KxK_aY6;O`4Noomx;~k zu->*1EDE{U8CToCsaSo#UQ*58Ra0V)Vttu{|u!Bi3IiJTc!Jav@_(%Ei80m^BrekSybiw z8zqcWACw4wT7hXxxK)q~eb53;?hq`p(~YX*jblg`9#NP7Lf0BKK2sq}z+(50i3T>E}{`c<8x z*JZi>6@B|8yBjZ^Y;cQdj4JW^kE>WFb$=@@Ay5DiU&_A<&%$(~KOM5i{=Bz0ya={w ziTzu2l(>Od0C^3;94xrJLOI_5B2+|a>|7g8BrcZp+C(v{n9{ZQ!JZ;kFwtL{J1<{p zE$P*`YefErq1gicHi9ilpt{wUor6IH8;*$K z0opI>nzL841&+9o1AwJux?vcREPIjslO9!``OLzH!QIwC?sUQ{kCb|E^hhEf+@kr; z!(@{rciGUjt!jrbsn(CBCnf~d8%?ux2n;5QFt)qacjBCs5UEFufjH{8GjW%J(5Ahu zD)oPhZ4!9+tOI{rYin31m%pM{p&uq6m&LeR+HjalfntRre}$KGvPfZL^ia%Hev{K{zz3y3mgkYmr_&B4{Yadz^j-KG7mV!<+TNzIQ*Wh$UyT zXfBJnJ^g*heL1=T$#)!bM)WUw@M~sNEqN4MPyc|w6)Z+|6t=N^e!!{F`Po-HJ~u?2 ziV6|&0rva9`zJw;FDztz)~b}}T9M}JI4^H`(c=`hhtb10p*}>bPRikWSrkyQ@(yv* z`_H(iYUy{By)dzil0J&W&f06ES3fDsv-W&x<^eyuxJ(%Td6_T?owD`(E)C@kG-myq zFEdu_Ua7d|K;nJ)M4uo37m?{4cHOVf^;@h6$pw)?lm7%iib3TLe7)%?q`$3gEpD+0 zI(<6YUiyB2v#__m8XN}2R*o#6u0wG)5UmMX+3WGtR&r%yMeX6K^{9=h*uVat_n-1W zAUccbpTm4-PgUb7$;l)ji~75L)jr8~pY2BZZ=SGp)rl{tq-e_XCl`zi( zZPV!7O&8R#qpp&=G%J?$iH{Pum755h@7cO3L^9Jy)nHHE>CdluaXM^~_|^pgF_Pr~ ze@1RTti14USN1oS9LK~I+I-c|W9_EcZ$>4fZ!gBe_`%PnrHP0&D}n4gV#@&i?0t|y z9!U#N+U>}$N?GFLNKh1yyS#C-lDjrfv*_#e6Baq&ccPyQ1`FO66!kGMi|XGNSW;$) zDQpU^sClFFe>Vk#2X>Vp#G z`?n+w1XM9Vs`%3tI>B^mob)|oM!{;fguJg$ZkX5bLXC};6@N!wrqg*;L?W;rqdIqD zVCDAB*3)p>pT6?Zq(bzI-(@lQEn66)A#SF(&d@m-bPDClv`VQ7WP&o0&h;$G$H;{jIPTP*Wp5%w3S73 z@4@;6)FN$H9^|i7`{&Nc=5o`P=i%PyTsvB6G1t(m{67DqDQvF@zsH+2;N~a3^X2TQ zK+eDazD*~fu5Z&xeD~R?)s^t#B}-4ButHp6JqvZ(g#1LYYfK}6?bW21sA%Ke%4%r| z87u1Ndl}*?%!dET`+(6OZsbsWda}cAvxi4~+`%kWW$IYMsW3XJ9ZL<0!tIse4RGcA z&ziAYeZF+CD7Bax>nI2V?RPTPF>kMooL?Q28CvYos>Nt%n|aUl;jJ~w5Y=@W@L+2>A!?uj+tz_uXj^}Iks zM4nZ*g`KTkn#uUFo!9&K-9{j~bBin?D<3pT@uZ=s8bEC=e^!OT|5m1{saoNib+WYj zdaDc-s}o6I=!--P`ThI1!%151T$+I{lcF4zWHn)l?cvt~7Lu9ie$}^G#T?yXP2D3Q zC0sUB)h8BJmjJ3JQ`%?B1X}vSH$~xOu|<-l_QSsg?BDzvr;qj3QQ`H_UKNdlNgM)lznEqK1qZm%06!J5ZfO%9n{cI8XvR*Ld^sbjf>npNaF`N9a?9gh1nL z1<&bQb=tYwWbn4$i6g~EUHo;Ghvfab*YvDnug{?KBR&k#UJqv2aL|`7kBL!Lx`f{# z+Hw?v5)6J+jg!h^s79Dni>wj193Boi4A+-?+t$7_>JozZ+n-t#78D_huZphY;-Zry zH18#YR;rXXMoCk{n*2>xEWZD?FP7$v7>~)-e}n(K4OqU-HmS2b(@cO;7Qb-8A2$#X zTHxQ}j;2u{e{7!5@U?`DvfvFFWzV{W`Vs?U@6|fYYMcIp75ZzgH&ln*8}GWPYU(;? zFu_mpFudCOGn>}kV>{)l#fi9RtZ@cuO1JJHn37L-!W^<4QgX^ZmK3S zDV4O>@?5X6NMA|!Yc{Rv=2WE@K^FHiHKN}1&AfejETyXp4z`BUyi2aC_QY$Qx9FU+ z_`EbTqj!t4De*m~90d?X2v!*3;v5Z+ESB&|ndpU}qf?I(THgE$Y74n;1DQdWQ{Dv7 zvH|`m)nuS%9!Q~q)uaoD+o`d(dLu7j#i~mT_xm^~2iqAly-8U)llk#Av1~^xViwla zF2`B(rQCl6uS?qMgl!xbJ}a)n1J_g3On2L!2{+d0dKhJ-%PSq9v^Zyj%2XjkY8Thn z_o+vWOB?4{=4lhv0|N?i_2zD^^zLx@KfTwltqe|M3p|T^J+?}*_r46QteoUdO-&({ zNdUeoo}OVKmu|q47$*tTd0m6LcadyJt(uALxsC5l&uynbo8Mz8 z7(h?r@c6#VG42WXpp}d(k09x4l8%0TSl8 zbDJ0YRKQ}=YV)KPDfH$;#`;?Hb(uQBHu!6;`hHSgEZy~k-3CMgvcjITdXyqeTf zG%%D`zkf`%^^^Tp_)b>gT(Dfs$Ry2Dxz(zht|#k?w>o3cyW=t|@4Zx6%r4f}I%w6$ zJEUmt&{O?EfNQ&&H5}N6-`pD0CywHhhyKL|6>xC(8tv`(3owA9u&Ce6;9>)Ru1al)?`S5db?hyA=G!nrQ`0_?Y9elB< z^rap>Coq$d5Dv;Zo-kCVvO2>-H6x=k%q(bG%6lqe-vRaDeet76U>SQX(eKe(+0GB_ zT%7fpbCBb0`E5ejE%L{PZRT0MXGXemR&*3jd*<)A(mj6tFIYMZ`=jy^hQ}lwoYO^^;MA}832Ko)Sh#R2aH;e#@7hM1xPnoQ zO_D!?lPa3Q^?3|*p&X%FCN#0L1+KGc3jcj+A$CyN2_x>`R0$@izL9q}`cOO5%L^W$ z=kh}RR-z#r=q0vHg*LhTD(a!kQ((^akF#Z%wr}*3dhCW3tDNOlVm4A$FmxYXkGPDS z@8~kc(@!;0){?~+NKm6oxF%*^M!CJ++xBT;uASc9Lx=1Q;U6(=s2!GR+pt6%9qi^E zbx627_4Fngr+w{aw_{MR={{$*7;z5pNI ziUe<3{?Qa>fT4ae_QLGvn5NNq@J<-_&R=QhSu>#~(gn1oylh?pV{m=qmy|q{wsGea z5fNE|KyFW}Go>q$&aKX~^@`G~v%3EerTP?ceZ6qQ@cDwg;QBknDc~0r_ z(V?;5A23T5@t4R(;42Fk+FMJTfsZAg1Gs-&JU;5M10lhdKw51bu6NTpAiB?A^x9b> z(;fhl-D*r)Dg_e%4akOsC_Ycp&Ggwbsr`uQ;Q6z&H&KJ3V@-T=a`tzcyO1>*jmK97 z%s{5IeSJw%x=@@e;LZ=W5gAZL(T~>ax%b6=MR~DDtRAy|H;| zG}MQnhm%#?4H}P8PdL$c|Lg@knh?ldmBgr2R|dj?9P3h9;cec8-KmXlz(HcPo$b=t zc7WWF8En?gQ0zK*8}_B!#pYKDS1>8PWOhsf-SFTIp>@M|xW7kQKU2+xsP`bJ0=KE*};#XPTAAH_O!b({~APP9Z^ff*GcdfI~)~71snl-t1 zXMq6pipoJ|(RFccmq04h-iKbZX%Wj$(pS(8&8lZDW8;v2`HFu%obYYc&boS&t0{a~ z8H6(!BZ4kEPc79bzvcW}jzRkq;*y?IeLcp_NxBY;_loz*mFQlsvK|?2W6H7v#%V&^ zPMYWL&6PDY%>NTC&z+N(lha7Lx{UI>42%S*Z9sj zlpk8yH!r$Wd_dMLp9XZ;oT$gDU{9dVtRGyF!~0G=N#9CI$%6GIA_U`P3M`LMaM;jI zAJ_~@fL=YST~UNHSStKa2TRUqjlcR-kJ7bkj-9yP*`PBd^3mvF#CMGb?`D{GNTqhI zC8cFV_54tKvupQ`N0<ITJ|pE-NQq(C`xs?#tmQYgGra8E+P3B4X6IQe~i4X)=?^5`@Wi` zjntNB2N5_RZxL$Owi1dV^8_3)y3C@R%JRcnNKha^E>}ue1^ZRZa;A!z!dN?*nE3J3 z^4s{gsP@13uD6w=lbU_^{&Q-#X_u$2ab8h)IhR*HU&yQdYj_MQomul5m_1sTI3VzY z;T1@JPwVr43``zh*|Prc?}h`-;#1x7vVs0wb67-#1mxyhO~{7uQSHC)8{`CTXi!Zz zg+Xe+K-y}->`lFoPgy00B?>1Ex&1bFb~Z1XK|nW@#8vck`}P#C-`}6jwm9ylAl1F4 zXVBo2hBFJM+&FKw$-&9*o6S!iU%f-BQGOH~VX4i~K2Xnv$=+F(T9VLv{jPV`n+q+p zZn(B5fRK5%YKE1ef2$kzn10*TCdBYa53H6D$Kt;EV=P0(qh7_Xoh3W^K~hbrSZq3x$kLo^;5VMaznQxOaUBH<4EV3U2A3M-UCoia4qraU8k5 z2!7}5Xy7eZitF(#ANb<<5_r}?5pF(-NnP~XI~2drPdX_;)LyaSQKMHoYZkedHD`wEu;Io z({`hU$<55<>?@I-Ca>lXa>>durN1M5N`Ts;qU?RLoWAwq(J5BmHZ?QLp~Nu#Kh}mq zRLrHT#{k0Iw;Il2dy;9OBLJ<2J$inQ(Ajgp#g5J>R^7JpnMk2rKFL^-oMI%(;rf3c7Fb? z_>{Uoc!(Igzt3pJR&aBxGH*GO2uJnr^=S(|u9A%hqf{0y*d2`f^@yDq9w@c@uKQfZ za^m1d!>bMS^^hO50X8-bs!mR0%+VXmgZ(ZRENkA6+re^Sk)~wtC;qoFdmRA_85U(< z(29^w2*9C&;(R@CRE>x zw%dMXieY;F*HU2=#iNe|b%makMN>h;MaY1F@@M=fwA;qGm`?#tVRSxk=qYS~zI6Er z@PSmlR#Y6HL^O3%R!zWQQqvQ2fbN111D}1*+xjL#==7fZMWR7b0y)j9Z10LJld=y* zb4yE!+>y{G%N6}QZ9okQvCnkt(sUcTuA?L)2=*6ApEj) z$v!KmO`E=&)*-F2HWF>Du27T-2rEn4W?cIRuzy3hlpdwpWV5-wWh()!$0Vi&^!NHS z;x<^%9RJh4$;Ki7lGZvXR^HfQOyB0!5kVm>h<%FBL+k+-=hD_y{BWIoJrvd?=27kf z@5mB%Qx1FRtth(TY5V>AFhhHx^WV&{AE0AloL~Ja9o$MqO1g)!PJhBw z*Xji>+N>Z*8%rw>Os>qium7Z^u4?qH9l_HwHWmvffgE6b3`&4g(N>~Lwek7_fT-r2 z&O&!)Df7@xTKEX9`!A$CTnJZeyy4kZd-VB{}&z9`KD31ToM~nR{ztAfYB`Xqzn&N#kequ|{ z${;l%dX^1N_A)x~%>Tz%iZ2Mc)^mR%w-jRq0vTDeLR3>8>xL;zu*|wSHyW5>4-ckI z4A88)_BjeBgn6S@exXo8sD-Gyo{dvG=#5m8Z4&N>Q8BMe;eiWgQ$^M^Qd>_SmfdMg zb$*x_q`ub*Nq@NOyZe&8VeQNwjNwU0FZ9S z$X67^Wtg-@Ds8)x*d1O(4YdV||aec9!RdN|8U05(dPgFIT@jA^v;)k`_`2 z2Z*R1?I^m#whB2=VOCKo?@uH2a)1Zg*z2vuuXu8~yI#tdb$?O`dq*i5VF;tU9v#7_ zKQp}(=FuURFThw^HX$l z8$>a~nQj8m7mihU#?pvlaB;~_iB=K%IF$^^p=aE| z{v((2i?VSz?qN;8zyuDyW0*cYD^F=e`zz2}cfxuS<;)6s7(5f53*!wjNya-I8H)8v zJr;Z*-Aqk~VMq^j`-@A(PcP~_A$eaX*4Eb1aa5OF)n;xaxZBw5RUIAK4=yPzb)4SF z9JRC3f35k9`0kwG4c4HAYPwFV>M6fB5;MncFJa^fR{=rPKkL*IY))jTy~oD|KUE6wLMvKS$Gc{$!iEsD!~WeBsE z+j}Cu3e>vN6lQE%#>sIM=alSm?D$X+r0c|P8a_6qMzbjJirOHK0+&s;+kbJADwaCw z2N!21ysKLQ?5~OSLZD*nqUrG&XIl!}d#-9!2C`l(<{~=PgjeXOc2s+$K!P)uHj`!YoQTZRSUqGlI_nc3?B#rcI7RvuTL_NKy4M$#7!9FW}c~FpiHet zRK<{IkXrDcoGi^U*1&(pCL}l9%6$Wv@=-B_Gej)hLL`Ge1br)ZGw}65?JDiY4+{zP zI%yNvNfN6qKAr}HxtYl!Q?!hQ);!uZ47|1IO~MYWI64gb1>6+puGBhZEFxA#*DVV; ziPr`vHT@m}-+(jbV~1&HjCU)|&5H|lwY9c-`g*}UC<_b1L`oVOWywO%sr6?7%IZe? z6MrFy_x{kzneuY~Tyyi=|C?8l(P}Y=dzsNzbG3NE-I*Z=yZ5H+&-z_glBh7fq@=Am zdwcu6aQSd~%8aAJDLySdv@!hM`xR|=-Q1JAAPN9+PC;#=nlVl18E+~{aPNx!OOf`m zhCej;AFyRQRy7V8Xuk^CYY_f^(^XaK1XM8*UMdwq0YA+`7$-k#@aUW9o%Cz6!v%b{(o(D zyIeNogu71mkN@_Czp*yC_~&bj(KtrXJ<*c4*v3Y~X}kMg1tr^G!}V*UuYKWc0s(um zn%UgVw%HQ!NUm`<%jxLTrK{5d8zu`~L-5rhs)Xy-hx1M-0gFnGRgSZZ%a==jG~N@Q zaLSyoq_yg=)x~*9tNsrF_CN{0c4y8uXivb>k72l2#cq#U-z|Te7y3p3{~eKJ&xj;j zm7J1NoR^=UmztJZ5)m0*6&)QlU)u0n(w4tr{3dSGo_KX^KQ_;J9eH{8s?;0jlHnig zRL2_@+_gy#donviZ7I~|ZS_N!zs1`HEcaJr$nlK~NxljR4f3Jb*cXWVvpTW9O| zK6%oQ<#pMs@T?TJe^*+ScSyT~e;}m`8P0L`-E{!BM&!yf7ZeNdK6!FD-ncshPajUf znXL)fy)p&!W{no$9n}rILK*1-yq#mQchh)0ECBh~{zN>wKLKM01?zCzfUhU=bK+JbOUL0OWjAv|B@V4h#{Ok-*tsAYTjoS#`shrlKYkc6fJ?$XQBj(M z=K2B*ZZtGxprH}X1-N^AJ`V3}SKa;Gxzq8);}_MuZ03wf*sx)h0Cxy@aO#*bZJM71 z;Wew5tIcplMTyi^qt|7fwFM2EXB+Gxh*YR2__;jJMvch5otE?Ye~bGLSM`M zx8kR5)Uo~WyX2V``&*{1_U2973k`EluKgqzA0N|g$153mt)BE+9dB=*_KD>Ap7Ivp zb@LAXQt51--y)HxKD3LM-rwka4bQL)!+SezKbG%Ks{_yFzCmX1Q`($T@}<3QL4G<; z>>rN@4>#f5{(2nVT8+)iD>1Qi1cnT0l79&msl!Ma)US>lF<1a~Fz#3xgQKgXad=e} zhExS82vOqY@H-_b0<$M%V@l^>-7|O8sFCQft`o+O!pLFOI?No^QiX#XO0jQM9`>#- z!roOy*tMY*Lx4_f5O!h!Vk~iXFLaznJUi96-`yEp4cjq z1Y%@eF!HjaRT^U_W2+jB*_*B79U#&#RSkWORYMR}4Fx>_wTrF;y0%o?O%CANgO__7 zcrDN+jUF`wX=!mP=>`Rx$<7JmM|J^kV6v~2lenmqf+X!w`@8VJ+>x7`rP8dSLS0zGYeiWhj&97uq3x{-yp0Vtxb(>Vc8tXsNK___qMd%#an43*~1>*Yg)AjHt!R_ z)!%xb;T*#oo;|v^p1VeyV5%7i#;ou;*{R6ONkV>ZlH4aEEtL~k;rcEcC#5(q0YG1A ztl=R(NQm-6Mw|<>5?qm)Xu#Y^el-1Z(<92qjLgF5;iYIOO-EfxY8Qvn8;;KLZ6Zy#W8s1sC@(LN;kroXLSCLO7+&jx_JMvFQSUFHeyzmY1*Bb4 z>vxd&f3Gy`K)u7Y)JNdZ@<<$Alb{E95_k!?_J4DuARiA)$1C||uUz9^4Q{~$z8iSI zhpq)(i>S-J4&d5EfE_z}m@Z9j8PSN&aRzi1c9m^b-l%2Hrvx6LhvbGt;D#9f2i_=iuOh zU3mDR^ST0X>eLB%?zty)kLQIg>(*6?hbwyKV8 zfy8^Z8Rf0_ZJuqI@7wLoj^6;eL;H~Hck#pm#zj!K{RO12#>GWDRSiGZsgAd6uLhIB zER?R{N*CW#ucO-qT0F0O*2T+v#-A0#;vM|;edT)%mE`_Zzs#Jio(n2hpUWZvznpJA->>Q0Q)t|OzxEXM|C9i*kcc3@Zf=1w{9g49onP9if*rI)mwIKJi)`R_vBUQ zEBD{U+wIkn@9A&aBYE|6*s0_FDULc`>8&gs@Avm|j=b$} zOSI%oFWBvG^IAwkKgfq%>rb+IR%GQREryr$h}6oJW5ND?McQ;hsBVNq8%XaSX|dzu zKiZX!lEuP>Q}EQoTk-70<#^_SWqA6+QapYC0-^bM>c07S{NA~^@8lA+wbltx`(fFl z4(z|B4ac?(#EJE>IK3%G>8|xLII=n#J64on+~`JaIJCKSap44$3yLygkRRi!fNQ8f zN>YR1CzA6`H{O67h5AdQmhuqkAw;C_Fp;>kFhJg?jVb*&QI(M<&od*Dof$0v|2 zKNC5EwS8Yvl!U3H3ow0LF{&%Fx^%n*Ujmm(yxfb|V}KGTF!`*qrUE(jIY_TaK;7U{ z)D5zz+2PuYYV}%z+9o08c_r_7@9<2?dUicxxIsdLOAuEYiQp7JG}M<%o$~FHcxg}T zKHvuQ?QUDmI=X>PsMHkB3dLRMGE`KR-4w3jR8ks9EWZUs}^Nu=T!*``k z;)@9NLWB%mc~BvDEDH-XdpD4$S&rK2%D1&r$@_elS0l*>NCODR@?}%;`a_*~``$df zc`g@k$@PtUitxh80z7dz4^JP<$D^l4W89b~L`H;Q&7x-9z9t0+Z%)D;BK4iynuPmz zCJQCu>@9IPv?>l$#};elcXM~u-L43{g&ENn@b>Q_8+iNNbfc;psP2f5ivs<%XnKcO=JoA-1=Ux0i(bL-d0Zuwz^faTn)=qhnww#te!O$v<8i zqS5i%cD#N*uDUt8w+zv}z1(!?GJjt;)QF^)(pO{ZO?A<91gHATFuzEF*H$z5c^mbJt4O-ELFVKu z7g?|qCAqn|A&bCkNxH=j08HRzKCv^RNf^(z%S@9_H!l-~`RRy{7H|vjLVSFTzDwYp zHEXIKOuA~-GHlCBrKiPR6vsqwfBCtc@~Pz zt3h`c|08w0>@|hgeOxs@3aT-(C1}}`YkuAX%<@+YcnQMP zmr}wCjtfB9kUR|QtVQ#vats<(fu^=H)C?^|cybV2q|+QAWf~CUi-MYTlr?6fYET|3 zn{rW9n}O`|WO#+S!^Ka4(60~DvId~O&KnhVQ7EoWN5#M#4VzP*0*_$n`2738H>?lx zi@Z=dFa@3-Mx=4d*(*&R6Vc*wSkwX zX=G<-DBv2`6WqRf%p0|pS7`dSTx z6`dQ6o2?)D9xJUK2d}pNj1_6ttTA}#_z2v;D-n0BjmP2ri$(HSfklhvVc|m3+^*}Q zMZCX0?c2Kxd)K#M%j^hr49ijwVtTkqN^@N@23N)l@D5PW&9fxly4-N&XGWvHfGSU? z%}NeHU2VBYVCAT;uE5wat;otuLchK@>0Sb^@}E_O-e@TEMSYpS0B)xFz^N@6nAlOOQX+xN-b|bu`4DWpJf$Nf@ahpn(m@KaQCG>mD=J0G ztgI|VSy`R{R<>?$$-L5SBqbi!y^M@R8PX@~=IA-u$-*bdFg{v$LE~~{+BPRd^h05~ z7jk4oq2VQ5PEIOPQes8o9w3sdIq@SS(MRG)K)y(wJY_j2I|YS>nYvd7(`B2&@m?ni zX_ESQN2LoBpapKyxgoV;B}sS?S7+Pxeqf12U;^w z*Gq8YS#KP@g$8*FI5Y2VlFmv1S~@h=Q+|)c`)=O&8J^pZ8ojNl-#w3yqTjW=0cX2C z7~TeX6Sv`wPMBfYz722QwQ+!91%$6kC*lO&AM1>cH{`17LixnnRhDy_?b>Qr6LvZKDIBZ)Kg9E#lV9n~4 zShjQ_mMSf9xH{01o^<$*gV?>U4XdYwVq|lg>N=^PWqO;dBQUrkQYBt{a*Z^wAObZd zNh+q1TO?;0?o$e-{#B10QvOEexrq=#lYq?$P`=|OplKvlg1!K-t$(IOtMOYB zu6)1idqO5%#x%}I@J5m+_!^TwH@s^hrV8@b7>|7A3Dle*7)Ivf! z9&V@~5gv%4Lz?jHvybV53T{9|;3Xh);R*L@@R5I`dWM}3g&qPO$!-VAOCIu`qqg+) z6jfR9-u5?j-Uv-LP}&l1H*eaZ-5%`iD#`Pz?Ou7)ehhB}Bfe|V7$uHDTzv^oZx=0yweF2!mA-fMu?k-7kPK9&gCz`IL;_vT3<7}+Gi zD-D*$_5|Lhst63JibHXdFNzYpQ7FXg;Ieo$*JMh%-BDGRj)@}^Fm6Z`CJc+kq!F>0 z(ou-~yfoGAQj({XS1RCKQ5=c#qG%*0ME+z6)>auf(hr4me8%gb+7#TfxD-2Yu15Qa zGRa>fWf>s#l%cYlZt_CVrL~4J+2d))26T0!BA%#0faa;h0x&lCauXUGn7Nq2&qt(R z#-%!A7u6pV%*?W6?#aw|%(n@qx(U4u)2SjL=<u}c?RWV+Q0fpj(6Oalom8`^yi|a9Q95?ak5b!k)-}e*|6#|)`ojH_Uw{1tT)cR% z+Jo!vWWHwUdLVZt^X1{8Zl)c`w+MVBwQraD%zMVmd(H!#J9i5AoW=rDbUJD@}0 zx4U|DtyJ9-0V~#|No_cOYZGp}IR+c%M&sZf0`H0+1l*-dyFqt}0`CFr-7pI4riP+z zFo9PjUXf6FkmQj1c#LkT#fTvd7%{kBu0nDhJ8B3<4y_U}@I>pdQtV!lhy6>!v14v1 zHq8jZiW#{mE6uegcKV4#*IxkK8^db6F{sKH$s#4&p!gr5-T>R1di#wU7>SeXqjAsH zWK11fCLl^%*zb~f1*oKK`~^@LhQOzr#d8}(9a5VUK6*&N1YHU1E#S%{ko==liDpPgy^1YhcW zxiNX5?@hX2FDnP*GC*sz@4`a#Qv4h*f1vw2lg!KmUs!W4uDI5 zHCF?=-M~9vCEnXMci@)U;TSt2OB*az1JRLz7(FZnouivDs(pADb+nJb#LjlKjcgF$ z@{=3!HS;F@5hBpMyB0;7X! z;rl@Jx@5g;1F-$RymMHTQ(+-DVIDIsgS^?V8xYdBAI&ik!M_jOOWj= zU@RjN1v;M3=Aw4KF8yy*8()I30u`3b1QBEZ$Q(3;7-=Z#~@mSbATP=A~XaO1!;+ck9AT ztY6ZgbW1#BEp=&`(qs?-rU^GtIt1w8Ee+8KumNHni{L{o8P>P z`|i63NlEdTHf<7~eBx1DeDFMu9lafe1v!v+aN+)Yb>&TceKmgh%NJErOckI#apxhd zT(KC%g%akzGkEN=hw<2>k7!t$aLt`N3r{}zI39oe5^g`VUkW%*E2S;*awtlG4GRrW zvH_R(lzM|i+U?>)C>?tU0J|7FUP}TF4)oNx%*q}1&;)Tx+N>;6(c~G;&1Os;iW9r) zabQ&pHqMI@iFetx5-$OF@jNV=HVTX9Ova*Fo${<3d=2m(5XpHg_AiaZ)Y170Ml{IJ zN{__G`B_*!BNg+;regN!6s39NQn7M+E+&ksko5cNNxoy-$}oCF9@>ZIVC0}246M(W z{Etz+H7z9A=u3)HWN4cv5?2c1#<-)6B_G_tj1{# z=LIx)HXJwhCSdyc3gGzl7irE+N|{rXT?Ht4xFl_TrK6M~HuapgzL#nUm54>!rR1k) z)A4A0ubU)Zp6YDQuCtHI@8%7Nt17|*Tmx1{jnP}R(B&^cqWcP4Jb{HkZ$Q1T>XxZb z=E_07!y$T65l15g+MZNdo{w7=W??rTv_>BwnM6u))mm z-QcEav=#-~;5TGQvr4+ZdgnE~|GRgTe)X%@@$$>h>0%7NV@soUTP}>3rQ`DDXRvG6c1)Qv z0bhUp6`p$PF^nJEf)77jU)x?ZCULHTrxNKDg z)eZ^qQQBalqCy3b{q+4=(}v;n-Ui&UHU^vLN8{k$UcjqTu7K;JIha4P5Q}Dv!J?^c z7U0gqlEpUg9>kgb6L4&G4CYTR(eDv73iIM|6<$#cqrWCTKhwCKiI?`g1Tw~Jz|E+}47gdUG9Hxb%OkEtz>tw1{W-#% zIB}fTRjL_y7T&5=%SBr4lu=}o#aBN;Dh($ z^y#}~7&A&6^30jj@cHMTVa}YHGW>GGisg&(;)|E{w1%x)Hz`=3KYtE?{No?w{nxQ= z>v{p(S5PXF*=_r_;9&&f{1?YHm4Yp=hEg9rCW#Z3}m z4#4ag!*Txh!8o-w75i7GVCUv(m_2*CbUKp^iL}p(IBn_#Or1Cy)256U8fTsfO}DOF zx2(s>-J?|Rxq4ouq|HwnvWIjO0V2(&qP8+aiQ7b0m8PPiG#zCnnR?m*hu;dgBBj~0 z?;M))UU&CW;5GXOOdKA7sVxEMXbwPX@((N-cA)D4YHv_=r0YGipLYz5!08RqxNmzh zrj0AthR5`GOT0WMjuNk}Ub@QR>D)SOZ9_Jt|`z65E4k`Jq29>1L|%$yU&w- zsS9R&45z>-pxQ0Lc6V6*Dj|DFUQz0$zLZPI4NoGN^Btyz9h(7QBdzz~y=aMGR2kgl zhpG{ttikuVcgL zt%pvXJRJb=^GK!q>+dZAf^{JBeGDAWQnpXhKE|R@xYzlaoe5Hqxy5mKinDGQ*DB zjAW#PlDGuKo#tde#Z}eR9-xkws)n0yUfv~fveHly&)t+h5D9kG&5N~%+qnK_0nN)u zPL5Zd(1#!XPC)e~)h}JX{51adx6g3q^qq(b_rtzDI|P_tKx^x8ELu1hUR~?^T|5yaZp%zpNw;iza7d*@RFm?F_-< zalx23DId8x2^tSo3+?U0@%!Jui@$#QNBr)0?_%iCCXIjcq#-zV`$F8YZw79=bt-ON zHV(~A)u^f{6bZjrhK`)6&O>2A7P2x@!Q;!^t2+lqx6z5@dB*pdZ~TV+4zCLIa!+3G zIT=R)QQKMC%^FpN;f*SSQY;sEa7Qw8Y>|n}o=CGnPT;gam(S+mlV^vbqoqvaAy5w*RFCJMe+nP{@qN7h#!I?g zAJq*}Q6Wf3h|rB}5)-4;M2iOadAaFo%9WFqg3OFWJ@hapI!r2=NK^t894N7b1s^W>EVq8T>%2B6;v{k25clJV;jnM$kPf&rDA!<*1rc(8uq?PB|NSI zvq6CGv18V}v*Oe53xE)G)f~&8lCpeHh!zy&)n9pQH5qpvld@#IBpYxwT~acR9GILr4u+<9;&rCCa`62JJH$z|3( zqaxsFfGQuRjaD61G!ba0(kEGpV59XB=A>)x`FA_Y`dmddbu z60)L> zwt7UR1c}>Lr?4UF1e4sW{?7sosuSGZ`fGzxiBZC^F;en1GwkjX-UE}`k}zph3fhJw zAvM`rK=CsXLH2s&=*Rn!jmbE)wpgt&CX6;ZUjCCkIYxc1t>X=l|2H~bqb6V;v%D32 zrBPES8ye`UWn?-i>C^%REHy6$X#71je6DncHB~aos4Wn%FGO8U9%_ZJsmhlQDAE9c zln3iZQDLTxR>WV3;YobAqC8LPTo`z+8Bd6g3~|>}B_ge}(OCBgsQjJ{vaIK!)R& z$4N-dM~RPN=ucu;o7ecHPBHHoo}~8F%xmU3fm*_M^Hfa?P(Y`>H77w;SkSaNPR3d0 znAXH+kbi%pizhE}2v#`F$$pBfuB|=5Ok;zv!PagV%F|9)04mtu6`=wB5E?9?BG0LY zU^rGjUd_9dKsotE8$hl!<7Vd6+Zvti^>!b-hF2Z0q(z9sb=Bb##Da{Dmw-#P1D`1% zOWbp&*5UK#>W#!}1MlNG7(I~bmI~|BN2SxWI5(ulyCW&q14#*?ND?VGAwFEs(ux+z zmz9hAtDZc0O!sEUR%tg`XREgh054uROTmScH!+a`hzoZ?Y-nG^2vOoqjC4VKv=5>q zDe-cX6b{k48>HPRRnn7+uMN(Uc&SS?=1?~oQ!4om8?UW$AW>?ZGdc+K#s;BtSRm4_ zr{nz&wZZjxM{@LY1ljBH9Ziuq)1~7rlLjyUWetxxOr}1U9g#M80pA`vUIL2bv;MmP z1i>gs8aq2E4p}Kt1^N+msa|l^{9?UWv2Z9JJz9?^kJl(YcC;Fg9jU_ohlVN$>+smC zuTGe5Ts{<+j@06rJ8SUFUA1^hu1_4V$LYfhP*ReMlUHS^RQ*(9IU>1x^xKX`p;^L#`MZRdCS!{ zO;ZroyrG$${3rFTs_N*Lpu1HIW)x(?8=jYcjPrZ0h;Os6BkLp z)$4t&XEL%BVAr7QAiw@KY9rA-beX}iqTW97w3IJCYT$Ja*V&NY#^b8VC^C^)-07WeF_ z!rJAdC9GM4&qhUJr8SZbD=RCtRAjCAtn?fbQlBZ{>)B5l0voZ>J5t}Px?XoS40p^K z7bg^pal@l69q&&k8$`bgV0%+#H7*(M zt>fjtOXKz80tx|HZNNfaW>QGi6!NaoyVByp56k8@;GzBLIJq?!+m@DK%fei2ogI$# zGZImh6@@_08xSBA5#)(UBh#>HPO5|xseE%WE+0`$RLrB^Yy!=;-U=PcW4-%I$nk+kCo!dqosKKNC_U5@Mrfo zNvE8p>7?}ob+H_Vvn;8Hwf~hMMzVQc4NpnZ1~bDOAih3t>d^P`26!F)9eLi9dIGEQ z=k>?(_C1Myj8BA?tA#~{w^^{_bU);3YU>Wj5bJ6|ei~l5Z#+JKwi2K9pbC8UOd0H>w2H;r7t!Qu;MZCKad!{HdPcFn7|}D!ltZr5-Z)%hN@8 z?e1c{a;69)>LhL%5(S9FJG|N#FC0(Bn|G(aI4!PvmqP^NSg`Aj)(+c8a~ z-VoElNO=Aq|BL_1(Ez1*{www93PJ)rRCRE;uHYo!vMaR#Uqif4Pm2~QJXQcC%jkG} zPps)=S+5Bjz>!6EOg$<;WtCJ{?!l%lP5C$85#t5wIh&!qUFg02kY?ckrX_0*w9nAC*z5O$+%~41uDw2J&Fh-AtGa2;%~&nO`?c#|tAz#Wc;Vi5eExJEK6^4pfHnu83VnPj z2fsR>i`UQQ;?S}zsW zlcZtBsV;Wg)=hZgiATW`AE<)p(%D7?sU%ENUWmYJ^R}HX!Ha4QN7V%NZv^nx5tX>_ zwleJ7*o>LeIxu~5JLb$Bi~5>k)gf|NG_W=kj~*L{m+nf#^T$)9AtmG9ok>_aH61g? z=3vpB;b>}Z5GgWBzRP30?cSZ&Zi)G)-=y;{Gq)sxOXU%)t3MnFk; z#3J55c%W1y-n_1FmzHG7=%}^}c%Qx_Sq~y5NT1tXhRX76`A_LAWwa6%;g6j=x8RQ3 z_X;R26%f1G0yZ0b1$Z|RL@iL2dj(#CD?!c?NCoT&dVIcKK-*9^xGMN{`8xov1+Hu4 z+oV-%R_bnht5&a6z~!pURjXHYfp0e%K&Jm{dB+A{6R!zFe>#* z8I@cuDk?fiOc_6Z;{P>%{Dl0@&WZWsg*rPY+1I=Y6DH?QoH#XS^5p3`lc!A2o;r1A zmeBuDF#7N0s;X-ba7(wm+!S0s*M`45o{Ntk$;R&<$i$mx)3I+&Av)R{FutuCXC=&= z{rW1s-M=q>Er9SFky_pr>E+0XV$7X66pQDKz#C@^@YUs9ym7GusY&4o6Oi4yb)&9S z%g9JJ4bRfi5@1z@5Y)}9PFINc1YxQkILScimH?&090ex>j#X79Sh8d?rcE1OajcoyzBv>%5L?!eSZ<1n$K3YYe!;+MyhRN}pL>n!O|%(+>0 z)%m!5|1A9WLO$NVkcHnrkcIajs>J;#7a}7qRvWEOzVKTFT1t6BDsfR4NHZk28^Pn! zd3+96uz3sc4jw)N=^5!=p!j3SF?>%z{qfJnj2e!4vnL@TE=-2heI=b#BN#OUrCy`s zHR=MRx9w-?c=@j$D(!LAbnnzJU?g!nGWo^0#lSsx{Cc1Y~tlW2{T7!9fm z8HXL7-)A`HrEMj_=W2pyrOo!|l|l@yj^g73c=c2kQexe7r?72XRtxYxq8ob?WGU6y!*1RiovxWIvw_!E zInW%8I$j;3aw12Efu=IBfv`eQ`b`xHko!eMgomnqBZuPD&(aE^ygVOw?Hh-SdsA>> zR|4+d8i#eWqETC!jq=J0%$q+43l=Vv3d}tvLNsozY)ah#OaNNGWVSAKCh$(4I0h3& zRZ7E6#S2H1@#3j+?AS6>;^6TuUOKb>?0qxw+xzqI`wJQP;K5A%{^1HdaH<=4bw@3$ zv2+11D?4{x6VUC~&m51=y=4i!lz4}ZXpv4VUDNZ^h^A*hY<}hlyuF_hc<(-W5PNrR zkP$+pP6+CL396f>j+gedJ$1ag(G7vunxXe_>tpSeYk-#0GM5CCXPz)0Z1oEBWo&yf zHq41piMNfw+juSTc1gTKHt^1w(u^akVsK(Z0`_egjhvh`0lHWm+&xP=-xOTjoq+pq zn`Aip`YKRj^L9a^Kv^awY3<r z)Wb*0=xyhY%@{YfP3oO7`AV1i-a4!VJJz@0_|Ad2Q|PW+4RMbUK0CIfQ4hzQG`0qL zd8rD3YRMvbY4X8Xw(wr-htv%o!a7ds-Nu!}ab(9(rF~n+VeZsANq?5Ks{r$^jz@%x(+OwI|9Rplxu$RUp%FJ?d>sR<6^OR z=~5IG7fC!!leYkG{>AF*>SwaDGp}T3W+0=BGP~~0^PYTGR;J{2@p~<;?HLv<{nvNZ zHMIw12rm+^^ya5p@Zm$*_|1J8cr~%HDVP!xiNjQaTTDy{ z@^a!)Qk;WWo>?Z1h8uivLm!n!WSCwe9mBp`I&k!sQXJk?gahjev1V=#n(DHUD~++C zz5uy>;Wh!(+XrFI z%1LU1#MyhAF+F*1I(~gV7rztW{ZN4SgGVZG@yudmWyW8tYEa3<49Tf8q@>G(7AaBb zDk=}^N_|mPQ!5Q3QKb?R(-lv<(%5js#TaXc_*hc7Qe07x*CsMyc?t1hN;AB+wH23mm3uM^%sz(s=?Orawc3l zP`MI>xq*E((n+aYg@H(Te9#;xJcTYga@VLzIS&Hj%;tn(7_e@-*)}; zlDJ5`=SZr#J_on1Z4`;S829W7`mgT{@CIMa z72td9#7O-9!E6Bu0&kj1ylZABVn}m|1-$Y2ivTTwm(uRXLX>>pw}7{Gcr7-}uf&T- z)9}%Q8F=yBFg1CK2=&Fbt?TgBU!KAjFE-$BuZ+RxZ!Z&Cj?dm+i4We`g&9*v2ms0u z?!s35`OP)>^Xp6Tr`ML^<5!m84=*jkZ=YL&o0qhywE#iM059zjy-{D2g|+kZF?kG+ zU5QrUOcdZvN{UknjQUZ&SCE^C!n_1&d~wLjjzea8G@>GTqO0`$9s|&~?~Ph9LqmH5 zZ#P9nMxdj05HdN*l@_U%1zG7)D9%qnX<-tI3lfo@7B7;yv5}+>@Zw#QBtNt9t8?ji z_nr*=_Q7(Mc(XGT+?>vRV%1g=l6)drP|knXoeSUg9j2FiUPCJYI|;MxS_qy}MZQxGN(3&qg-Gz=D+ zG&BTLhKHfKHVs4SQp7I=Gg`t>Tal{iN=c5#;srCXX#R8@+`mfE%4z)YE@;P0>r?ELOohNRlqYmQ2skm zBx=bYAJ>0}&j2Bjq60+wj)@FLW=1M1%5pGzNFpW<3Bb6)p-7DNSK!^fZ6?la&&R2) z*|>9a77nk^#G$nr*uS<+!IXR1)|BU=BqtHYLcEgN2W4T;(j**Qm5SY~%21G>Ds{$4 zj_jPa+_C{3quaFX$Fx`D?wtiHQ9mG(^~F6#ok0M;C|A;h^6UYj3%e6>pM)cjE}b__ z=Q7Nyyl&v7{qTgbwYXz*1|Gv(z00Do$D-X!qp)>B3>Ht%6Y0M|-t)u& z*8vER2*7C{Xyyx@Xxg7VQ+*b8iZrxvYB4G+N>E&suSe%_ zAqPR1XMZsr<3?3rQb!>=+ww8CB@eAbv(Z?aBA^+g`ySAAjQVC<;w9MFlCC504r#8{ z6a#Z-iCwgim_`|HTJHp!J#cfMBqphPtakEUU#!IKRZPc6dcxv5y(8IPizC@dJCj7`%+ zFlT%g@-xG*dU`UpEzH2I@kKHekHCi6DY$iMCgxA6#>~!g>|PXweM@68YeE&~O)A6w zB~f~y=lJ$={U=JvYi?eMd+t7hOAnvLuALi@6dxjzYCn-~UEwY1qsoBm`2)O-9WV35 z-j7%RONbJ&=}64J0A}Pu9j{p)%+8cy&3_tIj8Vs!eBpC_1B}=U0rU} z6CC)Q#MORk-o|&iD1|$i2}tuKlg5Tp3~kC&8Zt0fBaFoNzuC}(3DoJi#HADb03HOLpeST-Ws<<8y zfIV?bI!$662?-9_^L)Z>SPrO~8pw zaZ1P5$7A2h6dYcgDEH)Jaa1JtBWq)EU~R6}d3I!!R0+855*H;_>TWy7)MCf-ECttH zizBgPQKYJKR?mpTrn!;WJTC$pXNP0ev`{RY9FA$@3z3`>ufQ7|5`qyeZK^7uUYPA7 zAi!UMH^Tu?uLru{MgPr!x1y^0ph#O+v$Ioh@ze~wbEzF~UTnq7_qX8rdq&{Y{*hR^ zU?gUA)?;;P7M8oZV2J?j3b~%lkzTwq84uK?Vb{c3tX(<+dp3>2n-@mlPtUgE`3L3- z;6(_S`JiLe5Pb65T3q>MDZYIn51&7kgLg#wJG!L|GpDucLIn=D(^F%RpAn4V1GBJl z{xJOVR1yC2Xcj(xtPE=waeoD)ULXjv5%PZcpgbJkoQ-vh>oI=ZD2yG`j!BcoDF}NB zIC=^&mX~DU$j%m=-kO0En^SOPT{3Q6l7JOcqcK^exZkfZ)g);1$JADWyc6Ok1TsvmZoP-T)W+5pd zLV?Lx0}$v1XlVb*l}9vYm+#pi%X>3aG!t0Hk7*$I3(yI0=Zi#NDiU{IRxBdJ1CXEY zhw>~p=OlWjUKn#@ZLFMOlM3`v+|OiitdjgVR_1geYRR*S~yZe`y<67-e<)6Njm!L9vb%M=mcGcr(T%5 zg^e6JOh+>Z)|cY0jj=c_Qs~_xjh?wB;p)z%XKJo5|(wjsj;x@9~nRMXwKvc99f?#pc;e2YhthNUYhXb{E0cAv<$EMc;e{FFJ?_F zySi~+Iu70(g99rmy~bke@^UG!LXC%jtEvJ?Yg~LJZk}6?Tjob$%iM5moD=MzS)E+RX5?veOQ^vLZ*VDtKxEhsib7LH=fz%?Ln0bb;6P_QvM3e0-m(|pyX^u9{hKzXUu*G`i^!A3@aU@F2|-W z+E}_UFMPcuZv@b}1DU70TnSKaW&)`oHLM5lk}_g_byFkz1ZhWbX(c6PM4>=`y}$o-Yo6`u`hNXF!mLAoQ}wAMg$3{3?0Hwg|3z@Q;R5g#9? zoAI~~=zldcBmKGj{M@g)LA5u?e)n?%Z*z0=QVW*;>$|Gz8U$civo`u;K{;j$muZ z01GFrh7Yba_Q3@8UchTAxB*{EL{wi;0%M%C0p`SCdRmHZtErp6uyIKmgZvH1aJHXj zV`iUPZ`D(0WF+bG<*ZDew410W4`*d1Oa5}x9)8zDfh2^0WZ}(oN4C>g!#Zx0FOT+ zaH=VqW!b`IuWBVhV7AMF8>S18a^jA=fl<=du;NFlS@%hhJSXt#u5i+^@Yr>CS7Wlr z(UFl1U6G#>)&q1&$wHK{b#hR`5Oi(eWqVn?WTD!&(tdsWvRv$69)*3&qpwbGP5LM) z(&sO21#Vx=9^(DQFJBn*#hY)={NnO6Q@?4h2tiI=T1S39fRFr~%?la*X0 ztOpv>`U>?iB=NPCcws`7D>|!OFs9u7%l1;AkJ?LoKD4Q=#OI^o1>XM{mhX<%qJBbs zF|x2PhUWE0bxL29C-y;Ojt|O{`lBG~7s!qLca$W1{4F;p<2xqTu1ECi_OC05`rXKU zwu8%wJsuxp=rKc{kBuqwd~9r)mt4Ji zT*sDsJ!;c9i+c0DX?%tEqq|ntT>SWtN4I_U*`4_>zj`{*g3y1>4IeRNO-)ta)vC%| zR9EHdEPS=xS5Zo<%#mk#daW$W)>S$cb_D+X>`?svu_io!rWRXQ)?-Y^FeD4WP+H;+V3d+;tBWvmYCA3*Xu_NK zHRA1uTCil^a0Oa6Zj$K?d@*TUJwAA}7N0zlg^w;~;l1-2cB|gBH6%8tBICj^&$~k(ycYrr!JPH zss&tLVhNUMr zMC-EI2FVLbgd~2?mX3{-NELxRqr^*+@>D5W?iGv$Yz=ss_cTuk#2Stu&Cb%|C7ep7 zBDHhptC^GP@Z{kfJawcHkKZ)}Pn;Nvr%t!x)ZqnE<~(6nfSVGt)FqmrQO8SFgxaEt zv`U^!aLozB1X6C|;;o=d@YK!8C9k^5LDI}E5jj!nHh`xPb9+jv5_nQEH#D+&`FD|u z3C{idl5P<2y#d_O%T_hyr-T~74e18nguom1Sa}}BM5&kIcqP%Kk!Fbln;KMqzi~k} zc8Juuepd8X)n#dK#{>@e`@-rQvAT5tzWn@NSeM}UT;8~+_&*+rQPwrlr*2L{8F<1U&%bP^Oa=hvm-G~N5M_lv$6!={PXbD zZ@)eEkFUNu{#yaye|@FilP8B%KYP0Q>T_qB@Z8-N$^GTiO?Z}cstM1W8i=P)HsZ;< z8u0kBdR#i%fDOw>>M)-T#|B>myrvP7Y~ZC-6D@!`xVa3iBdX9gq8#lbN(8`)P*ahC z92u6Gy$!q(9~XgSk=Qab5>Q-}iKd1^3?5jdmKAxqX&Prw;Pu0pQFVCfzOi`q{4l(H z?@+vOb}$|~HcC4YTMFgG#Jz_*@$i9MT-cL=GuzUzd43X_>N0h=v^jI8qoZRK;^Jbj zBk>y0Rp5<{lJpN$Y0gZp88Q-=+MtZiQP+Nmi}uI3mNX2kjt7tOCioT?=3>eG zF#_Tt)_VdV0x|>`ss_xO|GqkLvt{E9+_NiNCthw}pNCslmSgAA9NaQH4h?1T2owpA zv-q)LUYOYyi<>(Gu}+4N8y6Je_{MxZx;Ft2?a#-srULnnfQ^s=TGLsYZws&zGzq!{ zTb07en{=>zS+@3jcKO;s+qK~jLD&XfUjbf!Pb`@;2=AOP#BZcC{Ox@fJy3#2?^%Mh zRGz-TIz#DJ;&oU+!MrwgiaKKM{XpqkBvj$mPtwBl`*MSE>99;WP@Q1TUnA(!PFOb| z(#}cBNRNZ3j@RgP6?i4D-3Qzx9Ug)AM%^XO04af2Bwm89P_jh?UU!L`!)u;}X9Mp5 zAzj)$dj{(3Yqe8ZJv#%NXNP0S#ONV*{_0+c6~p;6GR}`qSO3r*o^{ zI+tJ2y*ESY9l0mZ=OnITd*e(RUOUBo4l;4;x*@7s(7kizYA@;K<}y@O z*jwz;_LI*@yr)elkKUmgA~uFLqv2|JPLm=^uLM$iD69K31RI?pk1z=h;i3zwHjG}7 zdp%Gk!j(VVn7p<+U%)n3r1ET(m1L=Hsy!^t%1pqlDNQ;-F{85-Q^uBH)QEhP79}Af zoT`x^m4etwaOK)}O|HepM5BFVlP>5`{hLU+1W(TDbC|2A+giX$J!6Ut^{2N5VO(p0 zuBdBnZort)tysN$G7{p#6+jfcMaFen13smPsFa}DcB$lc+TW%bc|}j z(8e+pC%Ec91({)eks*{B-Vb@v{ZT02Yp%)1XbE@gszJE4m$st$7(S>_ze6yi+JOH_ zo?yvNjQOPd;mWX`_qu^RK~Q*(SXeF!k^+i$het_QJ3t-Pbn|-Tj6aX6@y4>bgYoWt zg$lUu-JgN?h2DFx1drXj6d7r8nhr{eJ#@S>O5k(GXZ)Er%zvX3?$&P;?}FCMjfw*yBiAAqmUNi-h-%W z;6$D+@lwTLgD;PLpFU%%uIA#-cgv@zW9{@XEb5H>s=PS$?N|Zc$t5>nxd88%f1i%4 zS1sVplXP3aYb4(51ArrS0f`MP7RYpgu1y3Lx!T~;^`4L;;M&v;ybcntfZz2c-k!i) zk=XY~O1zHh2m9WVcqM)UuMNJAQg0XVO4^LHYe~Eg>F)yD>k_uk%NJtxs-;-JZY4HtT#b!Fn>Vk+_U)T+>#et7*RHMD zy?Yz>?%jcX`*vc_o^9B(cRTj)+o5#pt(yfJwvT8Lj3#5y{kN9 z!{<+lJII&3^rM+hS+FK95Wb&xp64SiA6zn6bdtZP@Lg`l1vX2rMn?LjtdIdsAcGt z?21jZ!mwgiDaMZ;j4|zlFnw|x)~=k4#CQQ-OKP-%hP;w|i<0-^1!J*kK@yfv4#kX# z26zWIlnKZVK&}997e!iEc|NeZ0HZrv1$YPJ(jEuk6`)e!RiNefEHIOyy>4Tvz}rv# zn5X1*n??(0^_U)!K7%=V7GNY_#--{c3y8JD3^ca73cT}%;MeyTD(EWkUdY7z7fTg* z(=FhouD&<$>T*`e1F9kHxXJT5JNUdj>0HZ7kdhpu`#!`)3_xL4pp3tS`~iL0>x zH*H03pSKmce@bdCbpN!a!0odk*?qqmoXN0;1_?E$_d#{i4X8@I0d;BpQIT*XN@D&E z#X@Dtu3zQmq+jg`s*WJ*_`J7&ChGDdJ|9`=`G?j*uRpXFDSg;p;{CxWB`>{plzM+K zy42_QW6FBa@5YoH8Y?ue!k6^^SRr1&gWeloN%G_Mx7}C0|BcXZJG<#OomKw7*?n`} zum1d}BWHjA!ClMWdG}<&i@!YOWx?oAcTXS9u73V_+SM2D%D_vfit+N9GQ50u8Gb2O zn_fIshUZU~;<*#0cwXr8UFF!jsYNGCrcN1)yU!fOxwFS{-}#fcaQ|t!p2CF-XK?9} z^LX-!2k_Jr7xen{Qx}CE!V{0nGr51}Y2lxI5YJz}gfpk^koc0N5lTaoAu0{)d3G8> z*K8Horwf3&Su-2B-QcNL)(x|D;}rrPPcGoWh#Ur+AuFv4?mRFX_v~xH$sJWVyty3P zmK9?DqzsH68jr?`V3AmFLQEu&uJ2wl+?xoz>zB4-_wsxkSe=W*>vC{>Z7fc#kH)Eu zF*vy)1}i28BQ!wLAw%`z3|F|TH=QZF3_dqt5*Tv?5F`~tjZUFZpF@3L-5FMu8N|) zYC#Xxf{_@hhA}J22(ldNb4brTqh!l`H`_Lnmo##?Pd%$#?UiZ-Zh|j~Dhi%3%n32B zy5r>G;^}30=4cL{JC=c0PiILdo`qkXFTtgAOOX0Kss?-CSXF`OJtqPs{oY<`uz%p- zKAb#tCl)N2i||l?46g9S?W>bPitJf-z%!0YMi_Cxl?`=&*kdsfqcxwm9LP+LGkA+FAkmJX$Vt93a^f{JIT)=C;TTo#jiFT` zf2k`=exn@%xINsYw(JhLbKZB+7`T0sXch* z?DpWjTNegA`q-WSw*{U5G56@9%<88Or(S*XXdy11T80PCY`T_CZ^DHhv>A8bxfO@@ zt;f+rTX5p&4yBXFb{ewoPv3bfp1ybp&pdPx7tZX$nd94W?&L1qdwMS}oV^XFk4ikp zx8eNhJ-GMOZnTf67l~GemLjooAKhR-GYlNy!dYagFfx49jm-sI&31y8Bu3!nsj3p* z)2**gP6Y^P@ECD>h}zg#flGJK#*24m;)#PvYRrDy%4jT{5P=CJ!Z5Ni9FgHZ0=!0| zx}K_m&*B7lH!f?#o@LoMv?>jUrLmvfn23jW$E!8P9S_R4 zom&5nyfL z4d9Yr0Y*1hDGOJ=BYu{}0D)7(%dnnOE4P4D;P!LJ%=S>Motuq0lWVbbRy~%_uEUv~ z6}WJ6fmuMJ!0XcuybAo3%n7z!JVG@>e|QV<&=!|_4RDP=0dCZ&HeJTc({QUwlF-?b zA(V~Ax&l;79*i5Ag|Q>DP*-El$Qv_UKzLZDol)aapU=n%fBC>!zdu_!MuMRRi# zrcR%#W>OsauoLEXp1Or8DI`$xzy9##|jSxc?oKSwoqqodIWV+Q(Q+#p|!8!VkjgINv7Z;<-- z?ITw+DOgqzg7!vVwAA}vZLSFTdu?&(A8U$2KdQ?2`@A~W{Yq`V8ybr}FsMvGx7ZU= zVeaTBokX9$oN(-;)TfWR=SZWhI05x#0jSLP{h}~C^tZVgk#8i&2fiN};__v9kO(4S zeUKc}59x_qKocbY>w+6^yaDbW9>~tkM`To#ZrbGK?R7ONIr-PQxjFy54ygVh8FR8h z|9#BK&hJXEzOX0h>izo)aQ?&woIkVgduac4o>_GI+GqFQy&tbUbqp^(eg`g|-G#Gv zZj)zw@bLMAxOCxmoV;T_?mo5|_nzD-e%mp=qZtul{(3YECEL&d8mSKu>7t)jY&N`* z02%6vACCkN)9oeA5@HU2d9=Hir;D0n5rlazngM1XX`t13^88%gxaXO}$-0Dd)7)q@ z)}*7Rst^-8Th#D9HZDfu3UL%DFhOcOwq$T7fy!TQO^V86LPb8BZTd z#4~rKVf(TYM1{-n-QOKGrO~)_v=Og~wD;Pnbi90L8eTY2fe5v+A=$kFkOB}v zOP=wVnl0-(MRH5W)&)_RJ-J)r%@N5qJEC6~WrYjLHB*M%^_7%(Td?Eip#r=qcxZni zMh-5L^c(90qe_r`k?+{*1T}jT@YUfy4-=)%UGgwMw`r6z(R0zLHx=@dXZ|83^K3Qd zz52^2MMoLZ0m{3^F1bG@jf}*U(X@;ylTk;RfM6MJSz3kDcg)dkF$vm6C1iBUd`Ing z*%8t7OFCO_GR}!GwX^kfM`Uyq3X2L*Sja<2^H3mUuDNO}o!><{5D5%i%Bn; zpTx`a6$|rYQBmNJ+!R-&#`Z^ScppTC+@us8+841A?ud@`)4adoh8u7Lf!Ey~Svh&g z%g;wnZVu8jG7uLZf0cRIE#3a0l-os8E(G5HJ_{%gZ%C;=wlVJN@hv$xcjx+R!1H>5 zdR@9M@b1I&mu|J3uWbHm^5iT#*Q5$l_ySsmj@O023|vPu`yV+VgU}x zP?!4^OrAIvo$Zx)XiqAhJDh~eca~zy`sr$sKp-v1OTmtf<8gS$FdW%F7zeiu#okS= zSh}cFtsEF9r9Mth5yWh1lz>E?_l)VIuws5Q7R;!{$YGTttrerBC=*%9A&3caM}UV6 z`#eQ@kp`I-7l_ojAQa}N3DA{bT4$qxZ#`~Z-Gqi3?i*`>m-%6USH2@dM(S1Bpeb#t ziiSFLb_8-yoi6tkCQtPNpK0eOWuU+LUXM8f|Pe{Ss@hO-!HVIQ&3_ z+W@cm9w+n$$jFa}fL6#zYEZc+M%GeIA>do;fm#9H%3L>O#B54;e0bdhmQMGnD0I5W!bL!&g8+Bt+e}m+A$1pTlL9qNHIHYz7Xj!qfN7 z$D3z!@uEnbj~+-CDKbtZUYe5?V)W>d7&dGOqD7kG1}T(8ZBlU5tB**bQCPNUI&Ryu z8GCoE#EeNTm_D`~7k8)P#iJ>B;Zzm2Zkhvb;%gR%bL5RWI)5|Fqf zTT()}F0D>Xh|oQ56XL^USZDOiw059G$n7&Z;YIZT^}@W;M9M=tCS4AzW@%>OhU$zJ z%;jBqhu>$%#Qh35i?4g&^7LBC7oBWV^DmlgF)z7dP5_m=h)Dw{crXu5K8iHX2{wPO zUSod9|52w)u;d97mOu6LTx~}EF)bb_2~w}@D??J|BNx>~N11IisZuZ#X9BdUKQ`uU zy61&TxwM(3$=3~VbCCw`a-)8eW=q!q?{%eJThcYu-Pn6dx;F4qZ4nvn2R8vYO1cEy zetmu+z-s`E0BEZK2#l0Wjk=+qsu~n{E6dd$oBKz&%jk>$nUR@<`i63)+PYE+Q;4#% zJd~8=ptv|kfGb|>1tnoVAs{NSiUdhhH-Z~i zfOSj2oSdYTX}&?LkRU%};lS@u`ld9l9g*ZM?-^b}n(6`R?D($=%Cv$I;AK1v+tgGg z(s#b3hk3!y(GO!~gs^tSIK;-#UYeZ~%ZN6)Ea$$OUz}J|+gsY&y7z&*NV~2AzODmq zM0lu&fNX{ZxZS|p19W?-8Lp9bg?fW7DK94(1IvPRj-h{Fqh6q-OVBj}070;O=uc_a z5qKvE@bctsnkedtDiLAQ(HM$|G+TJ`o+gXbA#-#U6vR_i*s)6e3!;^dAwK862th$Y zA`CDr>jd{J;Yg2dMXgbI(y!#7F>jQ5V0FS~;+ASWEmTs^(GV;MId z;wC!oaC3Lljc{D#-w4Je7Z;K0RkEiP-dE!AL{f4J!B&9$M$*;j=;&W2CnxA$|4G_G>c)bYhv7tE-`i6fh@3!FchdP%)M zhR&YYjd2}=jjBN^6ORZF3v@*ohqVH>B$}3m2Dxixqx44`-jE{-GteGXMlw`WE?EPsz z#0E$E+l07KBnt7Gln^FE>S)~#G9@_x-#+&^OjI?R*bwF^XL>0uzFK^lo^Qd_qzs>W` z>~DMPehHLz*=V>_HbnP=Am|$F5H;zNdx9=?>!Cq3$?IMguKomEk!&cnQ-7|eUjn*J zn}PuK!Bi7TnW*|e!jJ8!Ma!Th1#eQQNZ-q*WZ>AoX}Yvo)eq7z`A^jG61drUvXdkD zs^lx3hgk_|R+NQDgc=E#fSXS;YK9)5E7SvYd+2tr54s#O=jSA0P?<(EN1&y(MW_|6ZLMf)Z%4cMj~d;9jxnP#dh8gC88;SVg~rHz z`=~Yy8!-%n1~;K`V1wEZSJy~KS6!)kW}d84QB{SC%5EyRsH~z2rAn13E-goXVKH*@ z@|Ci3a*>*zuBWlY#m6HqAp!A;iAYFH65=&cL6@oq0xu=u8*jYvYI=J5{X>Ti+ZG!W z{XWeAwR85PzMj{fWc=ACcm!DJXQid(i#j^S{r5QnXy}NRLygT%SM&0-aA42c>w@C{ z2|9Ojw=~khYSo~?DxeS&B!CfUHe6wYrj4!|*GqvaAP8V^5{NxM!M8Hc7yH&X;J_^- zght}vEiJfh%Sh~8-;Sz^JOz)OoD>WiSd1Y}#TeXFf`Rn~y0o~wBwcNUV0n2MY~CWqFZ+Z+{)$D*#fe0Q}!?nY(B}~;0Z=_3Q%wYOm(dCT;G>)oUo)0*WJySh!Kc;053ZV0bNd@(Jxr?p5N1vh32za zs?EG7=rWAGZvsKrnDWWLNt_Hz5MsK=byQ>Om|T>W6v?ofr#lp4^MV2g;5AaPrd1a> zh@>s)tk~vI7t%5~HJ}tHA3h?RH7JIbA9S06+obqiVtGkh_3aItuBvN)bH~9}kXcvX+m0LUpic}q-k~jB436wJMhmWtXO39R#DH)r4F4dMg7vQg| z1|D>218-Vd+WiwIOjuf0R(2^WD&i^^0O{f>`F?NWz9rmignOSzNBH)jL4$oQNc!*L zrp=mrX#V1*S4&Hauz%O;>w==8@3Cm;q8}6H`gHE(9!#Iqii}hqTON+|lyKc>oRpCo zp_4R}UR9N#!&3uD1Oqc%^~BIBe~}uq@yCbr@X1%#+!-!TtfxYDHRH(rzXnKjkd7d z3Xv<-`oY)pMkRY!F&|w)Wpu0rU{wQ%q^Y_~0TyqM8&r2XX{bNW?@Yq&>kDw(TAqke zj3b*$aBNEn?%q{}L)+S=@dPOV@qYuPGt%KZhyDuW1XYoEY3r)01a979_IconEvjR5 zf=bAMuQV1l9lOa)KKfCOApaq0R6zA}7fIRJ(Hb4Dv8`oip~G2`npI`uYbN82s)9Uq zy5#vicl{P6TQiyFjTw^~uzf{2CXBAbnARFh8eM~Zt0lkp&(g&!W`iDyTk_Q`QI?K_ z`fCAP?s-8SKX(qJ8Jht;>4XI!az&E00k<1;yMfmRUmJM4rCod0y%+H6F*NCNO+`*- ztd_A+FLVPhX@Cy9yDbjvQ4#N1Cnty$TTxkIo(mwe!{ELXDJikY%S}XHPNIN&JaV$) zkS&yz5vx0ou@mx_x=jgMzo&q2bi6kBt7^lgPnV9@N9tWvNMEGH_D6Cwtr7ac+x-Sr zk@U56ynU{#AQCZ6$qew`a5XhG z?P6_h?cLEaF<(-Z!bK>Cs3N(R=tp%+L}d84xw&~~hYT6+V!_gXeK%wF{6h=qvN@DY8G~vy2Mfla(G#Tcn;Z2b=DRthrBLO)n z1Tr>yGeJdA=-%JJ@VxqX5p)Hh2&Pi`xxa$yO$D?lwfS<#EJ+W6N0$H#pm5hQf(Q46 zCErr(i!BS{F>S&ijP4kT(W6F~tI*_$qf`eP9vWx?6M>J?E_Jd5Lm3ft@dkj+WSBWX z(&$}{szEy?0xLTy0d7u2aw1H1xYEh!yAn2t3sdAh0xiR;wChVt1=>zirC{zU5mUWj zzHfF^Q$4$O1Qv*kv}@~y7tU(Jv&ZvsZd)SmSQUp;o8s~CZMishfalwZ#LNGo*;m_vJzb|xY7%44L;~-^406G zYA-b>%SsgK+xrH%s5OQFuK??J0WXQG_BhF#lM#l(oKO^I`5-Sd5Sgh#NQ~penUAJ{ zW@HM!zxa3kzr>_u2*}DvGFYYL_=JQ%NM3%KCQ>|!(!5ftMZNDWV%Us~^lzG*2hFo! z>A$|4F=zg4O1x#IB6)o;@c!r0eP{OIm3v0xy}MKK?&%c#`b-Lbdo~px-j|M#9!SUU zA1uN0xq}cILR};Ep5CgKppI8{lTulm8cXoT`FeaLU`x>b!-E<4@PQ1xDZtx4vRr!D zAS{^KjJNMC#;@;5$2;fJ6o5$&9;na_#HoKWU}Yp~l_~`Y2q>zf72aQ@T>=*+KV$CH zS9i5i{Ujwuf>EH68Wh|F5Z&GS3Gnt)sno}-KkBPfF>g{H#@^LYzImScc3ok{-)um=e93v&lE*8Kq}Vs?sK#)&m4x0FDxe91>5d5 zriLX*SK&mw2KkbBt!T7I={;1k6E#bc<+&y&$FXhOW=(`sSX7{dMSoph6N!lTmc&bU zGWOZ5QP?(`f|+{+!Rk_C$B?B5(9@q)U2X@yaEpo z4_K3uk&{bb-W<7q@^UNq{Ued4iZ844yTu`Q@X!>nNvFG)((wGae}mnHSx<{?jNj!UbA;yO)QI!{o+}L%m*P0lU5t9mmWi6 zC3L$GGiRZV$u!zEX?N$u9|J7h6sDgqlesfV%s;=9sflv_@#Q@H;H5l#|HF2C~|OdBs>cB**k$Gb`hhh7aV>%(<lO^A2T949^=yzhNbyf^91V1n*tkDNb>lSek=_5(9GymwlL+ne#==>dHI=@fZ* z^RahxojjyMHhefY&^2m}+5|~~&Ax7o34x&k|=DsW_1GioYxm7r$F ztMQ2kv(&!&>4&rM*^Alu%p=)&^1fzdrdyQQ3>PkASWc6I=6qHACEdy#1i{buUNi5I z&L5WwKQS)RsgohK3!Vv%1U#E}w(oM`8SH}0s;i9%gv zz7nlw(ekBTmu_Kn7c$(-sLa)dOdGK5r(Ofh#Kk}ek}(y#21U^Huv*or)-~fcAzb=H zbAO(T_F9@B)ZR-QE(tV%pGW0s_~ml4jy7SF=yhU_rWM&va%TPv{*4Un_LlEOmA~&Q zG?w^a-((7QY-+}~*%nzgVb7LEOpG;ZJ_CNf`ti!&c&&|>RhBulrrKqRdzu^MynzAw zu##}EA>KubcY$~p9&jOmWr&wZPfJ3QB~tCnG&Q&j=~4Bn&6=Z!pg@d_4r6#^Nbi@S zN)3YKy`iT9O${-z;n*^si-Qv++%R1p6w=*25;ix~8u#{CXZ$-`2P3h4FbvxUg0Z>P-~15F3F!ScP4_*&5FlxTeK?OVNtq6O#ySAwZU&!mqxtRU=N;aDfdTn z`35yXG?x0HuGk0pS>gH{GF2|IQizu?jO@$>(yho_KUbc&;jR44fInp<2fUS=>W$n~ zFNf;&M5fIHDHdOO>G>;hlX&A3EeLT$d3vv>NzUiZ<%#$Dknd@(uI>XyyxVr|xd9vR ze>0vvk5?{j#7FKc#Itwg;nCZ3arHzVKKpP!e)K$N`-_Em>vj05sz}IDXtj;G>fwO!HiVCLMra3_SIQn2) z&P|_N4 zcdYYRrFnKE!&#vu-9fm{Fo@SQGb~cP^AGugso`4UO+{X|4Q*Aia*c+m!LYL$lUz(( zR8w1xZQHk?pfF#_%XB3p@$zM85-)A0JI9k$;i}3V51pIpj{bdpx%DUcxoO`o$j|s; zNpaS%Yb(><+1L?*O+7(Ex&fH%5H;H#hLmKJc#QxG&NI}OCt|2M2!oCO=&28Wy{XFb zqsp?(ua*?$ez~w9^LrT?w%_MxMWC^40~$)bg?Qz9OG9C^Mmo$42JuoT@cx(PhpH;B z%-`@u~?=t>|nmQ&R&KnyNA?G1?(X45GkT8fRvz7wv7;YICGY z;lq$5>VX9tX|Eh?2*9zKD0DR>NFRNAt@0zc%CNB1*hdJ33B2hZ#m^zR(@jf5m1TIX z<^v%c4yQSc(=1&=szE~3>{G%KvZ38lUELT(NArVhr>Y~7utF~FgH%w*TVvsn*vT%EC~Y?Sb+v57g#* zps&IQW$AuM315R`#cJeP)}yOD2>lga=(T&zwH62ey0I|oM?_O$^bebgqJLPIANezT zM$kLW`RmYH=z->ZcYz3!R39XTt%5CdwLq4#UX<*M#=P|cceE7w|3_zqJjMiCtN9(P<A?S?Et z!*EQhJx*e!#06YKycHQ?NMq(M4!=3{7S&DvVP1=pxI<-9wU|SHweiZmP=b~=?SV88 z7-ojG8Wh2Fn>tZP8?U@H=(lUMY2$TxGsu0VeU_7TRHv%?WiA3oG8mg zy;lo1UVeA z8Az~6@`BztF{ZZO*ti(ER{=`6gz3l2@55Q~ZXZp;uHg`D9SD1?qS*3dYsC6L_GH|K ziLy0#?f27o=bZ!i_g`&?J=T-FkmE?=y(rN)w;Ais$-)g7 z$Mq1hE|`=4x$bNOU0EyV%*qc0t3fb1ITN8brWn;HmPtlRNa;}5dB1>MA!f}m6kAl~3pw~pM6QtdjyIR(rVQiCo zW-RlJeGE9(*{A)h=KAy3%$++_^v>(AJ@$wH`rXy<|Leb9z5GuU}VjowJR1a=Zy2zuJSp zyHt+PJe-72Kaz!yKiY^_F8AS{vs)1t8;+L7LVWnqethCe8$R`T8$NNl6(70Oj1NE3 ziigkdQH4kwF<&&iPfEJ-qM!QoPYLO!p< zx%Qe|$3hhf13d(*P?+G~v?QEfQVQu?w7xv_9y?W_0Ip(g?&{ndf4ch1mtKB6*g>T? z_m9N8Z5N4G6z}^nx%M7GuZFKZ*N^W$Zo@aOy$ zRMtGF=ETsnk2Ir*;*`%)lZ>iUADuY+_Vb1EU8Ue_k0;@y59Hw9!{s=E!qFor!w)8r+3M{kJ8CC9UTanGZ4k_;aw>N$iNUztQo$% z5n&sau<#h;} zTodNCn54_=T)G61v}HN}ce`T#K3;o27qGC6aILu}#EUoIy!x9LKm2&8gGz7i-;_DI zR`ULt8eVx1!4@RmS6>*w51&pF^0neymjzd>_`y?2_~+-7@S_*=uxC@93|mPc2H6oF)S%PDmENH1<5);}gnczAYwbl7Z zOG!{NB>|DB=*|_ac3mMJN823YYYtkrxs5}48M=oBlk5ya?&)d5=RUj>uRfiRFI=+X zxYt(JZv5pVrt1ibx|^^3X@UoKwncn_RKcP=LP5tKb0%9wiy*Q z4A(LvTiIe8FWbB?bPWp+CYdto%&@64gB17UKD^F|5SkPWn=jkkpE)vgdx)RBxHthP zBrEq!ZMgDz`f?G1)^>=Hufra@U9RxQX8 zVJcoj^)8UE4F81?Mez#pHoDYYqq(6{$hXXTqr~e9C*n0U~ZT)wYn2xT z|0doq`rI0RyiEB>HOu`yp_5|{zg)vl*EpVSjx?xvjmbNQjn`q1-8$WXFJ8^X$1hlL z^<?vz>LaZv?O~}j(X)=;Z3|=8viNv54NDy#>tTfFRmFa6ylkNS7 zc6^Ku_N6afD)`>_uB>?ZmCOHc2Zg@3f0GUy?;_%TUvP7( zmtGB5AJ~U;Cx&syp*|en+oQO2x(WZF#G8w~vxeQ1Hb6d{h8>aBDIqfP%_+EsOuO@{7zyr8eA24DNg1it%R8on;W@6SGL#YY}2 z!u~yjN{o#S#W;JY8rvsIG16O(VHuM5ciJ%|%PkvgaA12Y7?sCK9{#=Nb?DzN*Pz$t z`1{Ql1(#}qk!$02dRox-tjTYLDET+=`nk=VcneTBIfq$AULZPQ#$(x5Zwjhf$9AXRcZr@pgf&O-sl@*H84v~G0$hNYQe0iyKm2(ge?qqSRh>iNq3Rr zHOP0d+9j4JUWN_ZY!fAp7}r% zm^)m+xE>znkDAg5-KU|{@6GDs$e&geTmQjcX#I9kcI3ZgC#`=YJ#j6FESo#BlRXe0 zO}Dt!8uY-N3ufL0o-;Bs2$?B<$Vy)KPF_aH&+J91pRXv(`FKID?TeOJzh8z2t$rsw za229LR%<1S$S|gk^i=mTy0}F~MeBEAT;J+Bi`DWEa^GEQt~uZP>te39w(gLFmj3qt z3GqInHr}GV|9Km)v+{lRJYKpqgXiw4!j)5{c<5*mE*&qyE9Wcl_m5TJb64uIWxQO6 z+-h?b!qM_F0zUjCqpFH*eC3I9eE*pweESJ2zH!-tuM56(r4XG>S*j9uPFLX7r*iPM z%T|2mfkb>(@X2$Dc;c>V4WJ--sj3umF`~U_?=^<^W}8@O%e6Rcyd*dt%WLTsrTxVh zM(~v@srce!N%+E}N%*@_>A2hyHNV-aV^0_AI^RwA!*n4RjF~Wfj1#3i`X$Y_=RC-&`Yr(uvA$C5m@3DfP31VatpeLNb!xeP+I8vup%alLUm;!{+6y?eH?xz4 zg@+->nRHDvgJ6Ml1*&$J&eO1*;!RCWMt)wV{9Ow+-s>vfd9MbJ7JM8v*X;7r@Iq}> zCiYLp;UFswYw$!cw)O|lO?3vnGu-4q$8tYijtUa3c5i_!EBsNIm!N+qeQ!JF}8pE5HuoT?1p6y|E{K8VCyocmYxYG8JORs0cYEW}9Th=(MjqRf&ImE)_ozeD9eQeD|poeBw)-&S&C zm@Fr>_yRCY740o$c1se6NsL=U5k6-M&8p79avn#H4B4M4 zE;*6NfD~5r_475{%4km|0Y}HgAU{9PiFg;tcY%0KGlMJf63Y`W$-2F@Uh{g;os6Vv zk}a`rospi>BwfSSE9)MsLVU71kVvMKecZd#ME#Kv8AzWF8 z$cs0~OTA2Z4OF|gQt`^YiH(m(w%lvx&0xw)i^Zb%_1gPw;yT;1Ge4-r`xoYF_zOWl z-od^mgIq+>YUV4Fn!r@J^KE%JjqOx$W}BIyQgQ!@c3eEuh)Z`g;mV!$f;v2MM>A^5 z)0C)p%+%nUFErpEUaZ7-UZ}*kp0C6=pRdA87yFT&X;acAaZ*K^#71)AP@QcOpE<#0 zw1pTQikI$L8f_-1mY2YtN1L#1suqI--7@sQUd_cuY5;NQMhA@fR*w3AXvkOOXN6~ z`Y?V{TI%HGVi50w;x%B}bWQbZMAWU; zaAy8CnCQHsqFnlT%`0Jv^?|)85u<(i*fLp(SsArW4%56;h`x?obT((9y)hHD6*iV$E5ZU+X}KRN+=5h3T_(l4Au&o`a6U$A$ki)v!75Yj zt}w_~6|b%@fF#P11xHh%A>Q(mmEV|rpS17OtA?LTrAyLP;=T12y)M206BC&eI8G~T zgoK9ZeZGcNm2j_bc98FEuC})Ju!ENV_WzN1w+itVz3+a!H)rFeAMc4h?dY!yK~Hs{ zqPHdpJ%Vmo@2U<(ZbpmWX}ZQ6Kg>(rEt0##hhGl!KT?wW` z%hS6Uk?rE`P=gTL?wY&+pZYWHi5H{qFQyjL+sV43&rfZ~!$;8y8DBdzhUWwJJd}%YLCkTT{tk!tV(-9XJ zrBzXwEIdMfcYNXVd?Yl}wreU~woPd9O6J;KE#$ZQR=F>?VuROh@bb7-(?Gfj;jUWo zAtBli3F+P<#A@czT_9Ssy#Qk$ZsX_j8mNZZHi>pIJ|z3BLPS)Q+&kv0U?QJ2^1=@O zxz(EZdR$zL{CzhEA@H~DcKe`%mj3qtEhygiGP(Bt<>;k5**Bi=$M>JG;#-d;;#CK} zeZ_)rU$x-XtC`q2St<{kJWy1)0zU90Cna9T1Q>_68UW!?t*i=R5+w=4P=Ure$xJ7m zI3Ldw0y7~$7)+2ZpXPCZK^yYmw}SEW8$G;OC4!lR;Bm#m7d- zHZLIrA5HpxVqXg$Jl&2CQM>7>u{gKShASu1(9xWS;sPr!-qC<(9_&GRX*&A5?Re$U zEX>(S?s)9l)Kp_rhM9fpcg2@rlO=aPm+ON{Z67 z((%V1%2U;4FS6l@(;4{a1NrFdu0%;;3ZB1P+7A|JCbz-v5`5yp96Wv|3mIv#@>zBG z!~@G8Ibf=AS^mf*3MDHvQ)R9qyAJy%p-rYOXP ziWHjZOJ2}P$w_KAwIy*Wu*tfB6)0>;Rw3^MRhb5XM>3T;rz- z3kqHg@b`OtgY3hX8DFmYg4N^9brTGJ;){2~I~I%Oqjr168V4=??f+XK-oI|hFp2kz z&y3>BmvZo#2Qu-g3mJk;eCc93zW1aR-+v|>`)2Jr?4{X(YL|+Kc~Gf#XeKBv z$;Y-W6WF?WBW9<^bcnxw>lC(bnUwWO?B2B*dv|Za_}G9b#z-Y>k}hZ7O&hP;A445( zQ}P+}HeIJSZKEU+4l!xp<51lU@lCRXpsprQ9__q3t5K=!42_CBsr4_|(ySc zrU~DFF%OU2HGtNZQhe@-27LX=Jlu7(O)H5|9r9&K&kN0*CSyMiL?e?i%sNXg_8-V?rWgy=x ztM^j1nu&Nw!fry$rth%YbcJvYo35vWgc-)ol$EpvGn6?%>#XfNupgVYY@WyL=1rK{ zG^^W4%wrqJ&_CF(wbokOTG8CnjK-!$G&HhyS{-WZYEe^LBQTcLx-?KN?aHc3CG;{O z@#2zV6ciR9FF#lF;%1S|=gSR|)E6U_NJ~dbTAJ2XOG-{ra<>SvCnP2!CN2(0%*1AzIVaAOy^1f(*Z@=n4y1rY9AR4VCEaX+uMO zHR|dr(cDxg4}XL7*C;wWn$g+WB13<>s0Cwa&L!(snQDt(4H`T_MJt~}WjwENMXhRE zpe|jqKNU8I)Kt7wX7*e^9Ne6V`l=K|mBdEDURHpu)9pGurn0LlOU9=zmg1XFq~OVO zUAX_Az4+D()%gB%>3II3ZajN=7k>P)3jE}g^|*R*4?g$tGx)`)i}3R=bmFPY2b5rc z{i!S=*lzios_~7Nd+?i2XW?rvwqbg#R!Q==pUK9TpYO)lP!<05GcEX!zt6>&gos~x z_Avha%kB8hXLIqfC#UetlXv1*pKrjgzu1J2zHkDc{m60r`{yh1t1oxq^2LMr_Q!|y zv;N^D%@`Z3#+RRK!O#CL3txVr2c7NJ`05Mo`02+p@yRRA7#*s`m!59Gk6ud0GZ#9v z`o~wFuEe*VO2>thjXK0u8?bzj<|LX{u4M&e+KuH!Mn$Y<2)fd#?VRuu(ka1??PJ)p zdm|ot=ssM2>>->!bp(U`O{lEM(-$wlkMhz~v{wWO{Lxg)7ha*f2n$ed&(VFvPBnt`%G+s1Rk{X=BYQIA8RFeeTe5tJW_L7%~yj0dP zy(lyDiSl2+R@03#yqdu#=1W8&FB1M;G?N%^aWt8%Rh#bGwML#_dM9uq&z#INv!M~1 z@>ER@2Don6jAfJ{=ZT1n)a$(MRzvY7B_(~LwYBYha&pp7Y4g>;S4f&FoJ(`$XM%0k zUyF~A{e59!(U#V>&i{{tmj3qtP0VaDY`p5n>tf?I3HF9a_AfCz$gx7a&pomkPuy9L zhi|Wzp=$;1J6M5d?<&Q&uO@2{#h#H^Xx>=nxb>k*VwyyEG*u?zkvlqYx2UP(dmFKJ zqaDTh7PTufYRVb>!JF&cUSDp*{YPu?(5WUI-BE$)2q9j1$Z0-cLKx<3P?8sdW!*FN zn-$X3Hc407M*d#fCRvhvtrBl#-g=zc8ik3$Vo{^bXlrZ2YgxigO|8zFKF2p-IT7z%B+=Sl<@qX#~9*p!?;wPVO!Ec3l zzxaGVUVi2fe*Gl}@jfw$r=K{BUw)3n+l-Gqe;l8F<#tuPzgFTsfNy?uNE9!Lw*?~u zmH5)L&crL9{X(k{Zx%j&xlI(YLA?L`;S9X=a2t9$it&x-s_@X0b)J6m2zL?yXCzU(lu?qw8v7>^8OAFcjARd$MMR=W_J&k8J;_NiXlcyFKxY>E z+A`49oQAggWHeS=QCFUb>auv06ehx&7^yFOlAkf5w%|@?*j`twjn{4UEm-e)8zO^O zBQ<`ldNX7vc_1y(UERODJ#SSzuxaB}m^NN{nb51j+2%_^<=@1YTzHtDdZutPm9}_R zz2Nr6w%-3E*Re_~fiMcwm~ix*v)XLm$;!_Dx5UH*BqYQm-UV@@kXbfqeiTLokH9_+J5fRBp!O; zC_ev8x2WMEJom&=JbQINKKE1yzV^zP{4RFjV^@0d*(-7_Pxh*<`Pm0r@TtdY@v*Ce zXl*XVOOLeU)0b=T%mZEM?ySPo7dr8o%T=;p8(N!+@xnu0YF2sRbgQU;ns+St+{>g-$bw~YNG7yhw%0`A<$IIy_=yDEy)zD{H%H^XU9s3B4_vVSY9*SY^!2!N zrxkm)^<(Fb2^`!%jfYRyW8bbR96LCMJ5P?|p)>6`ux~R?9G#NyXDjYK-i_Oj?!cK7 zGotcqamSH996q=W)iMNsG}c!SHYgp1IJB=kH9wlc(bF z;9)Bc&ZJ{ges5-H+JpjW^{up2hpZZ|rg!>arFi_bVcdHgr##6qI~vnuv;u7ShZB-TLT?N2Ti^(VN6P z@qU2(co!+&W!%Z$XM65apdatlc$a3Wvc!kNnh*+GVwfOY+llcZ>e58_AWpgvwDtP> ztV48!KXNi-ktQTt-S5JtW{koIcVo+edJCS10!Fox;IA!}0={6fzza(jCLj?c;J^Ca`;Z5AHhJ zh|ROZIIyz^wUt>oyi=}gdKgD`cfwwlg@baA&9g%|u&n{L)p^*tbpSiJ^x@d9dX$ys zV*9oU9NN__*Ho{j29l_uXi2UH$*N6P$<}D|J~G#GfWLgt8c5-Tp}}@Md4Ch0IF*10 z560lwwoDB6x1!u$i16@WC2Ar&J6&Er_1Hd|C5ksxly8{4{KAFwVi6OuUOgeGdPz)5 zx|~#_+I39Mkw}g9I)sIbI^D7fhYlaawjJAX=*VHDq$aD4*HpYDF}3lk;;oY3SRlp* zOL25I7Ds2oMC}S3#Jg)G+$j0eAFRYXA;de<>@TA)7OnJG69m=sV#UjprUCMDi9~zl z1_jBt*}eg_MH{pLCe2&rxn3v};x!9aMur+?>P>}f5-&{`bU(~Wk!L5_Q|qc3#Opq1 zi*;AxrB85tD*;d6nSGz*9Y98U5)N!B#g>^qjLC4kq$nBtHrs_92QfL;jKX{y4sEZ+^wcnB z#_MFiRvZ%2oSquO)JP4cCi{de`>|=$n7n}6v1?n8ko2f5hvixtaA-%B?z?5GO>-mf zoUO&|%qV(0?8wTrV%L^dX%Ay|tOBLQ>6o4Bk`YW7wv3k{KR-iW4r4gDqZ6lh&qD?1(GgbPBbMMo+7K{zIvj6pbeMKP2<5cEjV>RUM#Z> z=|5FIa8yALr(=xjM4L9y(dfW z8vzju#A|pl(1Rf&G92~wb;!-jL1k41PM$uA@^ZT#qsn>Soos=46BDAaXIfrRQ{fJT zVb55^TVowD|5aaZ{Z)O19#hLA-wGstrRzLWC+^)5gn*znsiy zv{eNeq+99xPE&d4e^!;m{-h``@t+HGB7c*U7Wh_Crnf5I5+Pm|tjtLZ7DC)GZ(bm1 zGT=)kEja|asq0wUXD%<@_xHtlG2buBOZr-RYTOSJV*LIP73MJ)8{wv^H#U5=C||x@ z%-jrX)XRYrf2&s+#2yh5@e?6YrzAPf>eqGs8f83J^Fa%sFo^fB6}e_i%F&(dE6?`h zdr#OjCFHA*T6D?w_nx%j+fQVxeUu&nM!Py&F{Vs*4$itsDY7O6r)lNVWOWm5tjC(*iS&QK=b|LEfS; z^Kkym04^M_!99m7aAsc_j_UWIjSCrz(j6S=L_@tDQ-gWfvwIf( zJ@slH*fd^&{rk3~rKt?v9c4m%jo7to7EKLB=xMfL+omo|i9$|Dh(T{_nyA!KA>J-I zcQgh%b3{c?V0fTG>u!w=lwjA+Y4ms5<@f^3PBhE*NwhT;pti0In`U~kW5<-1L27L- z5tTZQ?OTUYSCfyv_AEJe3KOHvNS5pF?<$t-oIzc6t_G`&4%T4rZaH^H5zNd4F&9{BMG{fF=~xTa##g~ z?qpe6DQIe@w@Nwe6-7dXcC89gQc|ejt(qnR{B_9N(oFSThJyTb6c%Qpq?lVQTmpv7);ZEjc!@hA*%>5B>Ru{+pv?M3-hs8OTe{5~e`Ny`Ff*-dw=e^ci6^hPEAGBBaXx@gd zssN-~Lg4GQ1{=Iq!$&?NEN~sFi$v|p_IA6^Tw`g(FRF@DzE)YB_QlHL^e>hdrF|tg zBk^BSEkW;;WqQJ%<%zOP50nZKC&dTATU5QbsQdK}M27mHAl(l|X&xxc3HXo3s_aj; z)|WohR$um1YhCFxl_go9iH{2UU95apHc`ITsMU)2$aV5vtda8x5k~~W&)Wm;Yi@zZ znp@|REwSIr$;tZj0=X_CRwrD$O%-od**!h>NWWftlwY5qzudq;MYLkDGDZ;XH(V7f zi18b#URV;NHF17pwefzVg0VV5ZM-irUS}e~cVm5`@3>%NgMdrHgse|ASd3+(ED3X6 z`z^kcjaJ_~_O<$a{&NrfF9&u0W&b7|riPN`i1#m5ye8iD`17JVXG9fN;L#IyJa*EK zC(e}P#d`|z>SI=X>+wwNnqmM2hxhc`HQdQaz*LWXfSApSZ*nT$8zo-mUVZY8e7tyn z8SXh|_?S|;8cA}Pc!oAyBOwpdJ_h=cDAuT5QYYJ#c)33xcykhn0TzDq5n*Pq1&N$4 zRJ4`xT5XmHOb=!Wxs9QtvjwGPc|ug#LVlZt_$pCh&%g*1%Iw&pNoT4mvoStYFT>s` z8NO$srYr{28#_hu4yyA!iy>~B9YJqTi$?7=*QN>KO^EugQd?eUOTM(H&{SW5;-VA` z_lxq~GKtEv3=|Y*t5Tkt8Wo~Sk@II_W_lE(Bi*WK>nfA5dGiF?1?;lXKzGJMTV%o2n-Fh3XuKot-7?HhkcXbpeumF8{c|}| z+2Bn-UQVvby%Yk|7oHL?C%3rW@Z;5RWBG0k=X`nj%F8Y$CQ`o7KvA7;U>S6(LlQWB zMEM<(G}VV!?mKf1FykBDvIwf|`L=u~rjx(v&c$_-F-cg4((;0;!LB{KP%Y%jk&Ta# z5MK<;+rV_0Gn;0VcoP#Mv12?LdqzXBZ7}qmI(yvDVnf&eez0)$TQk)jZ~gqI8{hhm z-|l?tpMJRM9eeHug!=p+gb6Icx1cj;wO|d}GFKVMScQ(P)#%AvgWkN=ik>{Tw|a8d zzUhqaoV9=M%w99s&Ahq}bP0HDTgFN~Ppd3jW!Wx$UHUn)Pp+IR&;5<=JoncXx$dub z<+{Jop0(!fmh_cqPFsN{L1XF))TOLIwe2=kTLre2sIc6MvV>bu8ZWTAzm=W!-b@W7 zj_5WdFa1p#6Sk(X9p%U-k-gmJ4SHJtOOE3Q7myhlE!yhjD{?m^i z`#%mEz4?C|r)g@SjrXscB!{MkOBW8~>1+dqzjyGCRvJc|2{w&AOntoY{DRO}o} z(@7Z9%s|rRgOm^(0(+4a1vv@GOpVsC;Ak06E=9InH`^rM(xNmO(szhb9KzUWyUs+@ zTwnxb82+|&t5HIr2LqLv&q{SOGffR@UXcB%c8v$u2w~Q+Sb3OPXHC-_%EP@*hp=mv zOe_gum>J3v)jEXEjuuo@6k@zD2ivwyi^8oyWqBq>g?P7Zoq?UiTak^?ff^yiaZzsu z@lKAlVrZyWozdx<#6;s=osAl1+*Ff_Ss}dU#&RJcA;;!i%+8F7O3g!2K{5t=tK?iG zu$QEvK$PIfP%9=j4xy+p4R#^k$%#Sf>qIt*x5B2Tg^t!rxwk^RwOLBcjdc#+kwe}Jazffm!%hT?HV>xPEygWjQ36Lzr3eH zx+XcRf3%Ogjz;G1vk)Rlljl-X6Nmn?G}qMz>rk$Sz1Bm&3u3)vlr-N~1`|`X@ zdd_k1ZMCeB8AC})?*`Gy;&>eNxYHhd7CquU{n+W}S>emEot}U)W!8&hR zdBTJvF}s%jaa5mBNZY*j8>>FCkVJmI&#^S`@%(mOU$v+L1*=c|`OjD0cNkTyP|W#L;_lkv^VHtg&V1}hZs zfi%D&s2ggEBXDkCDo$)p#IE5OjJJiOFq2gm7L)E$#M{}Bif7KX;pL0HIDfnmF_8?H zq^*&JYY;0*fa@e4(|*YE zFrz&g*f`dO=H_}O-l486Y#bj#jSP`XMb!>;6=CDX5h2DLQK309#4pG2a6j_%vrt(Q zi=n=Hbau8OJR%fTrSU?P9cXN*26I-_Ri!HgvX?VR)z; z#RVzI%}v)b__UYi1Glw)vigrT#t*7#nx?G z(9+tBjLdZGKe!)bV?%mfUNYn+>6(*kj83DCm&9w-TnoW?N5t!SS+;+S30n8sh!F4Q zC5iWcEAhHkpjaS+g{84Bq^fYN3voD;>@|dI!g0Ja(Jq1zu2KGHfq1phrBCf z@j4UkyOFP>=34r#4&vo!-nO{rnm|d{Bwk$_*J@t3mH~47Eld9W z@^>%XM`=4@alf%{^vSksYp&s~x32!&L8CYSZ$a_CpYCK2YJ{6cx!oXMe)c?`cwjRg zI97{uhwM0a*p3H|R^X8nm5PUsM&e>4bF?fxjr zbd;=dknB<*@%Ge)rlLly%tCq8rsUwXJ7@DnJQj`s7VNF zBb0}iIb==Zr9z8fm}O+RE*Wx3#3#g}AlIg(nkhfNwDc6@=dhh8WXJgZB;@C&pr9~c z7S=Bi*W@r70;kSZ#^= zkTAg%E(C7bET*8Tsd-`HpKGW8Ogdo zs|YiP0Lhy#hs+Es6QJm}g8U5RWYJGGQtyLtPr?ut$xzZ@y2qPn_T{^ls`+?b5LW3=yv|GBil^5bYB-ig8$*j`KG zow=5HJr@+O`QSSfz|tULI3UF0O2F4Zj#0?^BEmJ{ATon^4Tb4SyiM05-uG1chamC# zI}tAx?_%QR^(-P@g>lW!xaMzm#yqJyE$6qH{pR{Y+a%sUzxmiZqIO^V;~%el@25X~ z^l=A`-uypP@&32^@j9#KWfU~s$;L<85f>v5Vnl!pX9Exy9juwfxXwCTOjj33yY2?M zk};}G9z0pEC`!QTT?OjTxpgQBL#;v*>7h!jOA)RKZf~hdz$3?t@x+~WoZXX$xCj=P zWTgcLYoy|$dmGIks%jm|$()o4kRfVJ48w+F{{I#+H{2Jk z{WlD`FEKGOI$6aujJ$vI#43cykp}&wNw6Gw7&cy-B8<_7VedDHmnjT6LQ(UN5GhR% z+AqhEbg7tWV>e7d#&)ioM68P1LB#V!EyT;dn3yOfh@9+nSP~;;n{lmt!E))fZVf_$ zebnuY`4y~|XzZI#Rrj$26Jc`$&9T3YkM#Y|zJhgsoUHWu+N~o|K*If9Iw|J z)7{XLxoQDfZm3IjLxpwaJjyLA^?XfPYh|C+Xv^_y$uC|;>0z`k6nSBs9TU7c?*hc>;IUYmF7rx1@?c?{V@ zzBW`I^0nde&;?W|zB(e%Wn~!g6=#e(qsm+l|FSd2sw2L9=iaK1{`NPQy1)C~i}?=v zeDD7@PH%o>o0k4@BHo)aFSv#ZFA+M-iM4k*rx`$zkrs!vLl3~qchR; zSYSDIC0BKGGC#|hG~+BgLtB02A=e=+td>yIWZWyDeI7*y8cg<#kOxW)s{Zj+)(*MeRaw6d6{wFjt*V>W_Z9# zLs~4IzZ0jj#Vp|`}fv4t0mz(3tkN-p)R$4EtrqDx~l4! zgO>jG|IOQYnXBQx_e1e6O}tEkb4|Yq*-m$|&po#lUwWbepTAs<&plR!zkjq!meu&I zEI)p+5n}`82Jxz0&rmWXKEqyU%v#en$HW_S>^4;qm5mM?sc1xZvNq2eM)0A4HPTt*0~)&%op=;;cqS;N$Xw+U8hG7@I@C-H{TJHp}E zZ!XPs6HE1(o)YFZSD5=Pwe8*DdYp6n-OhQv?MrSG#eYqo+3x_$@Y5HR8No<=N}QTq z%y20)2$2bh`0$gMjfpvfSRMO2wYg5>HO}QAS`sPS-0mPz^Rq~*O02rCteZqDZ7wza zr1q^5qV>?1s@j3sb_8P3t6}T*ZJJ$-qanKQo!%CMGg~8YYD)x;O^0LGaQIu(U15J3 zZwvYJNVEUkK%FmosyC=RnSl+cv&ZT0&-D(sHSa`+tU_ckOaHL$+8TN3uGee1^%fyoSu*iCeR+d|g5VzzATOJQ ze-{#c$C*%;)`P>Fh~XMt8WAPEYo^2bUNr5jOZW-6@KIK)N^2}cGaIwBY`QNf6d z4uvHl1}RC2NK3KkFqX%WR5^rIRVxHcr+&@TVEUKp5Z71Lmf_4#GWJn5!H1d(fDuAW zykcaABJsKl5s`R}3cn`dnB>Hz3D>sSx72=SpX+wl^`+X*Sgzm1yKR48;6%KdJHSnd zP+oL8l92C`Lw$2(Lwl`}ztsp-;Xd=G1=@GjZtzby}+}HQo)@ z=ru@)Sc7;$T*PX@S}h&LztK#V!xutiWF&HOvQbcw52m1GTFGlehOe)5Kj6gcV&ios z$?M_W%o0483Fo%UHY(yL9@>w4Zy&^&gFQHXphv3>KXjr|NZ2X_Y{BlqV6cq3POQ-m z>$^smtneEZx?X47nX9$1AX`&ER#ldQ{>g>;S&Aa*FDc4JWqA=AYRlERo|8I!h)KFs zz{VsF+q5UkQizvk2V*kLLA)H|I*35t^jtyl%7? z_A~nywz;;AeHYpb`xxsBO4}7T+y9k{kQ1N=>9Os)oo$*Xcn-~E$F{8Vyhdg_qpjO{tQw1k-Ha<+5VPR*;!3AeDYAPn}F;mFn;oZ6O%6I&B-csdSy#$vE# zAPUpn5!l!fhOyRA3^#|Ot1cQ9WvOy+e3fwZcO)8!=sul%s_x4yE+FpZgGcB5^J2%@V55j^k?^598T5e_nhI@*zanO$L)_kx& znfiwc`RarYKZiD5hPX;wA6PXtxU2Hv1E=ApBwcrAkaDE&(+7u@XAK*#L4*e3nCq@> zbA9o0v6;dI+s^wrV`2a0iFY~N%>M7TuWnz0WS4?Lyd;YiN@}bwK^W!(!)B{QM{=a; z!C?|mLe=)dc9O1PYA}u^)U+_aoqoecTgg-~Z;Ie&DY44u>oMHMWakTQE}84WOZusV z`5T~nU`R+XcJ4Na*K}Xw3!FaH^|gf)daZ-{lGo<)u=!#kgq+c2)=WSWBDhhlF%xx#~8x zojWUDniX#J5>n6Obi51UF7%(n zCm-#>r|(O^%V%Qo?C}`9d^#4NyO4k{J)D5gJ)Dlo!4mx;tJ{za0SOKl8;UmI;r)@g zYg;4^Z;ZffcL<8JjI@yN=EvJr6NzWfSn$fdNqAs?yoR&VbV1@(qV>mf?~=%5(ftogX9!L`AMY?76{6wnoSg)re~114p|n*Q?7cIJZ9y zCpX7n&qyRTwuPb~BS4AQBwJ_lH9_L-tck+Yr<3r~J*haq&w{vcAy`pNv;(Tm*Ov-= zl`Pk(Q~bfncsy}34j0c<f-Y8l0q7-86W z9S@mFg62bK!g;&7T#Thv^K!>8)#to)-tT`LE~HDS;uYexC4^wSzXaQ-YH;RoAMQBZ zi+fLw;OwzJ+t?^=0$zOT9ESRug`|WO{Eh0cENn^pk`}jQpO7vm!#LSu5-*i0 z-N5Q9(@{}kLt$<_^0MO*09-+%z8f8)!5z>{~E;f1>r@YI<^Tt1$NJrn6@ZYV{CJr6U}!xOAzfm9R18lMwOKi7mkkR zG7NOr$V>SV+;eghUVP?3j14woVyIeQuuqGI#$JI7NO`(Mq_cnL%fx=ZB4k>R@)V__!E-keMXMBwCYfU5U4; zIs*@!?#3f`4{1?H4qtVWh5n&J>dX&d`0cKhA7wbU&NSnpyNB_h;GUEH7#XNWi6{*g z9BdKA($H8Z%T^SX6eC9-BvxB6iFYZGcuco3v#otjZFAkV?Y!?&`z;68eU{zdBt|DJ z+INZV^H5?nhT7NmGYPt5-OZEa9hW{SYrcbX~8QBDVbUBe``0CzpOSPB7QpdUCdi%My|Eh2zTW6TW zOV5(5OdCpNv`|%92zyx$YO0FR+ERs%j#>=#w_QTGd@#o(0mE36NT+bm2E7YZN8ct*nO3j z2-4sSE#zqsI7waI935>Ft|Y$zhy8brX#*B;a&L_&Tp?kSx;c3#r2T)1_h$Z$Pi-+w z4gZ}X!_IIeWryM=@qYU8F?{C1JpA4H9DMA4!F}0U>iyNnEcnJ{!>b`E!0^L#w(-&j zlMfbum{bz)mI&QkC-JsdMd9l4WITH|9d{q9L`+nW4lgw{nCF+zp`v1rhNL(z9Nk`w zi+6Y7!Lwbs|708X?`Xuv(OPu1m!PY&9QAbtsI17<)QZ_zR*j}J-N{@@(Ybx2a6ZoU z9L580wy$+HTWbCNzzv_znQYCrV@Vq?6_JTsYN=2hX(Q?jtgMx5uf^wV`b3>B4Hnw9`6lygr@^wfPDR8!+3VcDX;>4jV7q zYU7o2&_|cSFr4E6N(pu49VUEN(;4!*Oi z109|14x4bRChlo$Za_mrJ?iUg)&5&uQ-!Lk3d8%2}IRbgH-rpFtwWx5q31GPfN{tn`G6XNBJD@_{=s9-r2A3S;5f@jX! z@c1b!E*?$9=HWC{SC`2THy=||3vB~S^(_kxvo+S0 zxXgZ+K36QakJ-N7vBbM=e^)F;ybhS|Wbv^PXlblOcSi%By!r?Z?jFZO7w$w~R|5vR zt8nMeR9rrmATP^ATs@J9ZT<3MbGGsN7&cw5tBuyV?QHWkw@aH?-lps1Zl*R}+IZo%dZX7HECdE&PmywqP zOqfLbt=e^te?kA7pL&tU3NTrycqZIFTjO^MR@t1e7wqv6j#!)bvRvvCg{INCwEhglorI} z=&nZWoTQdx zaFu3gQ$pNlnCi&$d58b9u`K?ITJ4l z$2E%0d7E>ev3@O4FW2VMb(;y-eg4PcM6&a6>ZdyyiI+a44K;=6>8Qe?{j(VAtJAu1 zJshVs&a8c3f$zP1jJuY^#k|en0AZ zChLZ(<$QtRwcy1*Rkt)_IoWvW*XyxDhWYg4HQc;tdZ3#aJsBDsYh<5QvcKW$&FUmJ zTO2Yo5|Npnfb`Tjq$bA-amFCY7A=GsDKBWFpf zRS)rBjp$GV5y5;xFdxIMqCjsEaB13WO;<3}rn|VUQI{U90K%k1MieKnou5sw1!vHG zjJD~dBpZSP107}vw>g{5_T}8%+;3Q{mbpYrA{HSrks-wjPVkxQ35f}^EkRx^Y5!7P zU6W?8(g)z*m>EE^gpK!R(mMXd5aRvF(%%g|JmH4~yI*`hGLu^zKit=Kr$h(@jE!1RjATB(7x zvSMOFMLC3sVhBcfsHpB`Cf7_-a_w_nciqPs&gU@Kow3w@*V}ig{`VEG#Ovr&Q-hE| zaNv3rX2+na)Qb9wWHePJqq8wXzWaQP_ZMqTx2=;k*fv#*=7s`00nok?B~9a%V&v+cZxs^e;fR&sA4fe{cdQ4C4K7F7JLl#q0pR8n({%AwN42 z+3C^9$%saNR-A(Eth87p#6<`>YycBb69F>(=d!vu3is?y$L*Ue*f|`Bv9?I$XBfn4 z60Ixwa!JM8S{Z{&$I|iSsbt)}T}U&`@ZDs*e;^B6%EO~1ET5B{xB(}&XW{ax3|zWB z9p?_FV*6MM20Js*T9<_W&H}VG=Af=B138&7NKc8>Y7NZdWD?$c1qsSrns9ErZd4gqPTd#QVVs88#K~vc!7>q$+~UM8RHcLrqC6?AaR-EJHWn^^O1vKW{ZR(ComR4MiE=c>JUl zPv2p~)sq%Ha4-R5UCEjgf+5$FljDM6jEoGSw6sK>)@kE?uf$7YTB`58!1;Wx+uk!w z@>~wC+Z`mk6igd0i;Xrnl%u<&9*2HPT2LHeYSaKFj&>8h*R0HGJ9M*B#y6?by42uZ(IU z)yzP$W~edE4*Xp)Sc3k#{QdMaMB((-2qj#FBTL!wO<_1T9fpGwq1Zbbf}KjdL0am4 zvLgr$)oG&2*Q=SqG&K=Bt>;2Hj%w{!0yj3js?t@kb@iKW%L$U0ey-o|X zD)B1WE;cpL?=!NEbQUR?-Pa6K}f-}b@E)j%8Xa;64X%%^tzOUc+3az0j|c;V7kT)nda zmrqyWF(+I)S&0XZ*P*?+P=9=;4=-Vae;UI^fUNkKNIqOT!z3lwesh~^`$llReVxy{+_v`xCaEsh=d!NE zD}=zhcG;PUC@D-uM@uD&@{>_tQ;h10Y$2pv8C_&!qCXpx1M)re=O8aL+@Vk%Hd`l~ zE|n^`X=IwL&wC~4cB8F|mTj-a+ZSxURJ*L@=B6+6<0p>c^qJFO)eXb^KzFj$GW=hm z!9J`)%pi%_*a+;NDH5WMRI(*bY>JrMI~Mh)$)1?s&-BK;wsSb*?Ons6hT`oN;_V8= zL`MJy+Y;nA95JtSsZ_a4O^!lWeWaFv?-kPRstNp4Yh~DfHk5_`M`Kyw8;zyDb0l4w z9O{L5YYV-Rl^P`1&(x3x*>Xvf0hM%0l0mw~S_*#spG&d>|GhXT?B8mX z#RF*xvY#M1ZY>gHjRf^fE6Hn%j)~Fl%|p(`a_=D_!M_v&ecOdlUDlVy2Tbu!Zdy85 zgA*xU)AxSC>D+WDd-cUZ{NvLp`1TbWUVY4lZ#-(lx34DQJC7&f8&`9%Y0NGUDOD~> zcOhNiJn^bs&O_ehzVZeRQ=+APisY&gh3xOQK}neQUzVI9iJP`Qo|7S>q#$1$_+K`_UkF?ZSwg0lHWLT)5e1?yZijR=4-*t(1 zDVX~$wRBxK+e_`|3Uj~Z_F3v2%kBG~@UFy5yQn8@i6O{Hi9l{fG>UWMP@12p#Y}6; zQ_xbMh4!W#K`zP);t>{Xd}l^r1HUVp3f3V#B^qtAPe*gUqP;0!3v<#Bo8NP8UItoP zYMfAwW}>+Yjg3`81ZfU?ui-<>iLap~D9e7aJxj z+07t*d2y2@S^9^*xpX75Sfa3JG6e@VhO+M3TvvVUzgMOO{O7rm4R4$r^n2sguMfQO z{qN1b{-w{4zg1o6i^R~|6dBPg&|R<=E!iHZOFY08>wv6lpRqnr=>D;L_7{Knr~mfwUH|o8k0pKYdylMk zQ0RO6XA`{zh&zu>;MAcp9NjaFBZBkCTk(~PR(#`f61EQ|B1lvulUMr* zXm$t=+#m|H1hXSW80*PGZ%Z1Qs*{9hW9IF+&Y&G`esV1=7!_q%*gD&Ro!fdbKGKBH zP|lLm>>%g&r31cU^CbZnrhDVc2`iquBN>;E+i?GW3;NrVP*PH;_T2G}qZl3S$G||p z5i*>cBg$wYSHp538QpyUV!}4po#DLy^{{ZxYqu#eF4cb{a6Z-~S?6`9J`%6zS|Q%p za5OhoqO-jopL*#G?l{ne=O5XQu8w;2bynldj&xi+Y{8`?7Cdq|Q9W4b+fC9{8!f-9 z4QtR>7lr_g?w4~B%X#R2&i%&yG28RSF8}-(-g@iGn{U2(M!TTJK)X$c7TW=3^HYN+9TJgk*SS8)dx5wb_T~Wxe2$>2&ch!gzolM2~doujk_O?k2e! z1iSS50@)fMff#*`ZAvIka2&6YwsV>HdGd7-9Eq+&&@QBB5bp{H@!o2bco*WWOS*NQ zcO?erpLmP z5Q6Ba00alqmh2;HcfrQ%OkPX17cZ|p#@z1Q@4DR;&dPXk|FwO~;b!(-1P7_kue*?~ zbK6wB!Tz3F)G<3P3dMQxs4TXirYs3ng2w7JA=_;9wdJC>Jr}Kwd5De-fe|^ziB%5! z`JH*`zNdGj;Pkcx+_^ImCpJZ6_ecnAF+$KDD^QvjiMrYfR9BaaLM@l2UD4N?i{mrl z=&9MD!3gwb;P=lNdj@w@Rh8m^s9*Y`GE{koGYsiE;<=ZXHR&4k6yjuCO-? zb1Xm3ja&cP6H^|zMB;sI3B~LAzYw>K;^o8d+BZ+QLL%2JoiI-zy6&=Ef_S^+^9dzh zA-rpemx|XY?>%ex1l)l|GnybkhRig@SMu5rz#;x+!J>wx!Sex3K# zsqNUVFEG8o#(gK8iT9m%uDd0QlU=?aJ9?Yb&`}j2zoB(H(Ug-Bg-Uy& z+WDQ)R+EM;z2Rssrwx~pU`CZ+CWhezn#~%k`4Z?OZdRn=B%7KV0=*5zTUCifhpA!r zXo!$+=v;GU?5_%~8-9OjqxYM4jcs`IpMNy^=Ffk=?ahDq*5o^7S>6cs`4GZ4dmFxaSSDyPD-LmY?^?0K*XYHGLZQQ3L$L+1|JkLLN<$3T#2%T+fWjB3yK7#Hjg*o-NtKrI5@-TugZ@2V|(tp z-*n`9{iZX|Ko^nk^_%W|uYd0;Sg+_M3fKR8U*Y;+D~i_ty1&RmZ&AC)((_ke;5b54LlX9F}=^CSCTCcpEE|aBN38PVKG6w&@12P8Q7!Oan=>CF!b{ zgAj0P!a7mKj>)wXDL8k)hJjYvc=J(Mn1kVw0rdBGqPwRPe39kkWU7sq#LMd;iMg5x zZUpABN>)yA-nP_!&i(H@O!8a~CaIe1&V9~s^lQlQ$`y!>3Pnpp8M-@aaPfgt*gD;X zyH4*zUso*#yDQbk`|u$v9zJZtxr13~ERT}!hAAECOUp1{!^O*DjhjylUM9=BicFN} zhv|!&QDDjPyUI-pK~jX*0wUL=xhxtRJL6DYo~a?fngvVB&H~ ztKq{s%fDKq?wpBt=R_LzZwysz9}NFcj^5+XCco%u5SJU7-)^3f9fl6a@dKqR95GilWr7 z5cUGwtJ%pRzqCYp%%#PyL3-R8WF)vDEq)!s17##2*Y6CTFFD>v_sL1}{zG+X>KB@8 zie7A~D|x=Ly6~l<9P3x3f<0dg^<9Yw{}qDU5D_3F5U_Q2;IZZw z!L4)2me}vhZ{DfAyGgXpOIH}=o1K+0S5swwc%-8;X{56ttV@bxKihneI0*JJ^^wJJ^)CX{af2cBomGn}(VbHV+dm30p>5;}>Cc0b9q~ z0vvSsKlg8*cz>?^HumTaiIz?ovXyt_tvAo zvqV*{5%#$d`l)FlJ&m-GOlVVEQ=t#EnHEwZ#OtblX=)g1498O^;_$*9i8#BzLen@J ze!WK3TBD?lr?i>XYMm&hNOZLoqNAk%&GorzUSM!Xe0(_K6Qa~ZLhZTgWx+z1i%kuG z36!K9Fx#&Cm~h_rFNN#*{^IkSgzMC%I~n~;IibaoPF8vx3UiZ?o)Uw+Y%A==si?AN zps6++tqs{i&e^D~%9a;ppkd!7ISMg)3Q;l@A`^Bqkqf`;i109EW!N-N0$s@%P{1Ia z%y@rTLe>i06xPtSs49p@Q&o}>L9(33kt3Js6-D)WxUbRhS|f+9oBHlj1$%nBU1Q@7 zmEYFnP$3RYh6_Tqy711S(07Jg!vEM_6Y<;D%CO(H*!}<9ticW}Sm~w9rqcDODGt#W zgloVSKbGc({<0`L^cPvlzQ0e7bAN}m*K9FskQD1CSc{0z zb#m;A`C4fvc&|f4d|{3Cf;DEX5WUyy=}E!=nvopwgT%OipN0mmeIsDQ3YZ8KP>8s> zt->w0d`OO8sU_Y0{QTs3VTiRCBiH^VJ3I5O<;eAV{UqKGlppUR;{7YycS`71E_IFO@F?C{*P*$d?aRRh8@~5A-79 zb%Lpa&B?W^r}Oaiokcivun7?n!D=%k0W8>f4JUk-m?Mcf7eKsoW zsVK}(L|#rJnDitrE)2|a78>HGOOtqcO(roeg44vCNk-1w&9=F1IXEA4Bl{CKy5C<6 zQ{kGV>$0S&fdmua>xJ~>NaSV4p}aU5wdJX3tIt835N&63E(SXDG2C5%p{@dSwiF>c zDokILw6l@~l?X+BGV&{22$%VALqmdvv_drqfuzechMw+jNR9Dz5U+!Lg?N+WL-j?w zPRNx}W1b%FLb3)(x(u3_Ctmq1=HO)l9n;1;Ju|79$oToKO$9hSn~0;+VK_V$hW+D4 zu*6JP07jbq&{N}s_6i@g+P%?I=B*KDO=TNUoSy(s`5XpLEF>>y5*v9r#Cel+7nO7` zO7|4i>W=ipwK6JOYxvv>;v?w;yill;xa~HhU?tZX1Q8zQhs2n5NQ`nrT*Mkgg|0?e z;7SDh3;d{XS0YFd=(}3}_O)8t-6Y=NkPu{MWor7!wDjf5yF0_&cI`e!mEr264qE!# z|3~6|&oQ9@aoco)nMVWGjOuFS{o9Yff^cO#}IdsIOgHeNTK$TM;^ z7%ocLNnUv5a4ep=!-6Zv6YCw_EQT2y9X?OI z&V;zsXYzFciINv5Y3V9mCD1CY9*E`fx zik%aMnCwkQZ<7u6<#DiC!j)V}w9YEmnS^QMZK|^2#I7>jv9A(4rz>S>Cg=BBsWx2( zQK$!n!^WE&zYcfpjK|ee>9}-z8ty-kjNy)C6c=WppdbUiy{%|#twVEjy{G^d4os0D zZP+rzyRclY-*vkQ_B-!$y|!zg^R}h>|64$Eb#1#qiC5HUbYw6ZYx2?4X2;!U_F{an z4!0lLjDfBSjP#b_)b?~-IA9Yb;qC)PsH(`(QI408AxAuFZx!N=i}uwzWDMa>l4YTc zMzWIqbp)d!vuhWKH!;`^iE3^zh?mNe>R1!g%q!ltnk2?m@ve7xHLMfG%gMEw*(vqo z4s}KFBPt< z;#Klpvl1R_Z$)&-YBeWN=@z7Vh$wK^@Lp^58U*>ui)GC%Sh?auLatP|hQeLILLb$y zo12>om_WJyuwXBQ2CqYqzq=AHM|&iE?q`th0`YP*5fKq8Ba2WGMDiOC418ONc+NHR z*o}bM$*QWVK4^-U*~$LOriN$Fsj1=Xmy+=J=PmfeJ&E}A{T94>ISJpsnv8EeX2XuY zAW@-fga}s(7^NgC!+#A9Zj8nQd!lf1Iuttx0x{a;hwRkgYlzkroJbpL48zkWV(`Kp zakzI^ti17=rHVsUPc>&~K3>{*Wl3*}taOH=7NWT!AN4gk$j(Saw5T-ZQ;m%Y6B6MB z9~HTgMlvMG_Zs3gVG_~e{sqh-$mA3EFsR0$_dx zYkUwgQ^Jvx9*Oj%a19+UE3%=YGzIllnL^CjXb@D`v*kMu089KBgh*nfNnj0ZiNUC= zt3qu}r7Ww}7dS7KKELafc=^K4i1$~*H9=EDL3)guI+#$O#Op4K(8v;IEKMR-HEh~= zg@kF|2omC&R^qMHYa#hk9n;eyCN>he@-ikevr>_qVujVlBr`_ha(YSdyr#lkj(FE- z*_~Ttba0E-Rbz@s+F*UWZiA-~vilm=L=(cj?L#iayFk9Co!5Dt;CfsHn)_ zmB>E_E&c8PTOeMV8vc5bYxLuN^1-b*f2;xbAF9N;!<9IHqzdPcR^fhGzjtpAx+(+p zEv!`pXb$jME5jiV9GptS`9lS`eM=^GjHO_>O@=&aQA?7oGZ^I1-)zI>)1`Rwu5#S9 zHy=@9%+JcnG{bYkh+Z;myfG0zm>9^zwn;lSjhA9-xELMHxu`79LQ!EVN{Ts2z{&ue za0?bC5GcbqM*xM8&QdT5X{mnKK3ACgI4@m~Gy9Bw<2s!C{#!v(HJ9ePbK42@6yU>5 zJ85=$EQ)dy!K65?b=er~Dn?IBj;P>#jQ15_dWa~*Xiqk534ZcjIr8Vy6d*52hVU{i zXH%sWwWaZ>x5uN&9*)v%e|>q9#A0JYkeLu*C|(D+URxN2_Uahq<|He*niFj1x?y?{ z@|89x^GrWpg5m6pT3r&`gB>$;QUU z2jb&me#Qh<=5J6*SigIt`00GVkS~)~MMi}Ep}45{cvn~N|8~&Q-~K<7cuR`&mM`!A zKLDnM92;tvp?L@*!u%A`5rK;EP(OjM41o+AuBu5H8gZhHHsAW%BJ^}sqov7?>Z$^i zmF8&qA6N5&bDK*NZ(%_?2KyT^I?{&D_G;M{;7EEd=lAmza%aLE!^T^Z<&7s!CE}Sg z7F<1)EK6wm=Ju9iAl2kcK#fiIBhCNr+HEq01 zAL(!>6EbEZo!QNsw9eYz{d=)*|2|pn(r3OUbUeB(F9MqYt)=kQBk4w(^xZ&RjzaMa*>^rtwhhV zK}=Fkl21-aK~i!uY)MH9tIeiJv|5p1u?YDmYKq6$xH!!?78Mh<9LM;P#S|;?FT-U$nj~!bF6G3%Q1pU=>l0 zK2~Sp^O2d6{^OdO8gBd1^k zPDUKE(qfR28Y^E?xMmx3_2cF6kB%T6Fovo;2W?zDH{H?bO2$0A0YbK#9@1M>_684FVmILA9y^{mn}xq`FN1e0g^V%(Rfv5&medPRBrdK29Irh^e7U9NgKDslgI#9W9cPPdXks znu14;W#G;O<)|)>)(KD&Aaf>o3;FUpY^~40{reJe*S2sRp9;mE;UG-32O=h16r0-$ zWTr+K#URVeU>BH6mL2M@4n%RLx0(`2xE``x>vkJF*4`!ryGluygrntvq^+)OLe5ln zB-Q4YMiCDF0@^@Bgt$VrZW+BSXb!A`_W#cTbH-ERL#Y;5eGA|iyaGmkZ3<6woukC%S7hD#Yq*GvaVP>rba5vYrqC=_G3D8nP# z03G0V4$1hi@_3_StWmg7%e!ky_ce05uHBqYYjP_hXFg6{4*l$PZqO-MX7%_gcM zQQq*((I5)fG4x}C93@_d%NWVWBtmDn_M2^!uw2)j_i^6l40D_Fc5{8HW0vZBH{9?s zB-rKFNxTlP26`T(Cdo@z6lY;x5{mLuG?5X#7uuRjFwk9&k^V~bc30`d6EQ8JVkGR@D5guNsK#RX~d8O&Cfs>|xK zB=pqrP(1d(emr`^t3lqMP)CAl$2yq;0EXg;k=%fmikV0b@c%UE&c8PQ{tV^)$snC z8eS2iedT$Q?J|T*rL1cCJU;!zM*Q7{0=#l>9$vm%a8DjSaV`trc+>)>h1{fmyc?8o zIg?G*Ymz02)KojwRb{BFtwfS2TUJ|*i;Ysm%kU?WNzxPJV6(=nBId(l5UZSz=VXos zlCBSDdU<~O3d`pS*~dlsVApgh9=dx37w#O~cc zY@TSr;k_f+v#kdQcJ|_~W8HZ8YzH1Z(}BY~s!&!Crz()-t5qY`%Lql>%;&~ z93H^oef`+Cvj>}JI)xl!lu#OLGBDj4h@l2w^w;{Juf_-6mEIU>^u=UPqMEC8vd)7p zT&!P4#cLF}G;6GpBx&nZQ-qMLF}Y@BC*$_u08jMR`D6EJ1P;$8s7u+wi7@OP3&GBz zV68eaCD%aLvcaYhbk)bAvMfa>+T4WjoL$M(qrr`R#zb0{)g3j3>rq$4UH!jixF%h2f(qL%* zdR55I1kCS>q|4Ipg@yUZ&dydd#`XPpm&gD0<6VjzZvwB}V4o}K$NR|nV>oeW6OQhm z#-Tk^IJ9>PcOU7(mmaZd0EPPT1}*mEWrUc$Gz-nOIjAX56ZK$2Q9+W%)SI?lGiuG* z-m7+A`GMzVC7`P%AN}olY6A=l6vFip<)Eeqeiny!o(R~m7Nu(AO~BJ<5^&{2JRUw2 zhsoX)lvk7?zo0;)mS$$gF*ZJiQhOQl3i1)_RQksxnFSJDXgl|t`x$);;l{2@bF$2Y zbN|Bn!nPa5dpX9$yB_CExK0GDrUrSKwG|LY^Z?6N5f?#!l8bM5GOG$(5~5I3ZC4Ko+F32uL?vCbFeb@2ILHUn zGln}EC#hJta{rVOKykzoM8OEQeL}puhl8dUf3~Ni1TOqaR2FEoIc!vuC`)%>!)kY zwYr8X6c%Ku4{vgcP0ImAMOoQRjh z-N=X_)KwRur=tctw~cC<_t~jFOpUi=izwEU2Rd-i?H#!9L{ovG+=O+sI@6}`GrGcIj9GZ?%!aY0{s-eUC z$3y3K4TrwHeK6#mtwQ*WVq@irVIf`yRP@yPp|+frhB*l+q$?_SwL|fS$jhX%I08*& zK3ZM4zSw)NwrIm!RRun8RphRpV~sTyxg_xxrgLXAYPV_4|CH15xyKv;$`F-?bN(hzJLM({NKpPST0G< z^~v`GNxa*4zkgMRX<9JWok{lw2v~^sQ%}y|(~nf(qvwk8%KgRo==lO%hlmO9S4z0~&W!Fj)>j(NB3?;9Md*YxA%C?+Ea{Yt6Ks6WKU05vElr_6gxmbw~cOu_EDTeX0NJRV8shE-y~`hP^oT8}`D4e=N)j z{9|E;mqEPgMwQ@HTY$RInJU*LUMlK@SbwA>xFa>u^R4`>s2^3?b3Rd9Rs2$UY1ZGR zCx`zeI^5&!Xdzyce51m6&%A}SSLy^DiPuB^eiAV!*Af!q|Ka+jf3Anj|4Y1oIb4YL zd8hSdK(B@!TLw^4kc7gVcogNvqa-g8#e%||SQKUi!y30izIfVO8M$UeuLT8oV|<_# z`)2YmJCKUOHVc}oVv%eOUy^K{!I0tR`h1)|GJrczjAHlpJ{dj*8#Z0Kl=*t8(pAMP zKi>FwQPf+S@!%buIDfhmcO7fRrl|&Wb~T}1)NWsYCptRnWjI91-7d9_?qqJ7ye32xZy{P6?KpX86#KWe z;hy8;qIf&7X|e++_c!Cd+naIjL@Q41Z$yPXQ;2h&k|`6HZ}4VGc21BwidS;PB3Lhk z%!xPl^JQufvykvQW*A#(WFK=UIj_`wy__uLl3C9}LpEUB_AP>~=;`f2dAVJ^G7LMf zsd(MhkJlvLg!oA87*AGvE>lAew?_UUHzoAfvyEZD-q;xat9$OO{q^~Ct^a<{*}6Y9 zminPMbu9{$*P>LG9mQTKN%2974E2fR@Ks2Y;eTDOFFJ}m(N^d&*IXFz+s1;3e{L*@ z{IM*Ff3C?1{4vft57<-IpeD=b zcWq^H-|j3={JP+49kOgLj{S!MoA)1c;#MOsVHNV?S0Xol6|zJfTS8VLA$TRyV!V(T zB82RBiz3?^^oyKqv)CnZBlccnpKL*0S=P4(>NB1kY{-0ah-l1uVxTg1s;@MpgXk|a zFi;lSF<36Jhqe!uhqe!vhsjb<5!OCj5iSU8(`BWijTouodW0+&Fj^JaI;u;Bv0g2G zglro#*9BuWQLT6Gt8f15SI*};sPixTH!v#1%K(a!_mg;U63-fbyhHuX@*@{z=)Yb= zgXwcgyIFwWdV#kP10Aqwqcd#0>L4xz$@~f&qK1XBdT^lDT%&XLe69x5#K5Hq2k}AAPw+CTT}pKpUb+gp>M2d?|yh!0>Q z^i}A|WrFg>Fq3jS5}VKU=B{>t>jrc`r^Md#NzNS!!wsx5Ap0`;xg0Ym>+dMCSH06E z=oEBht(vxZR=hy%K=;5FILBSlmSzQtn8*OsRpp|m zqa0hOS}-+Si#=P~v1Pg)ySH}Z%;7#!z=9L~IJ~SUaHvlw16G)uL#HeztF7ehmR*tBU{Rc^5SPI!%U zg<=#U19`S?+l;N-x2b(|k&RbgdaTRF$yS;QHV@gbbs!j{ZQ*a^Wm$fd6Yuldv$LLf zWZ4Q7{~NK6(m&T$n=nY%SQ=FlOlaFdwA#m|1115R#~W=fO+vqxoV&7}O8>9|g%EF> z5bt$suCW5ek^mP$=)N`AZi0Bz1B|ji4)AjqRiF?oD*ZEGg<^5dHNyP67s34d^`05` zap`sEwgKk~6fFDm&O2A%dE<@CKXuUP&Ho!zQ^Vfn-O2vKz=-R@>D){U`ITq-@trGH zeC=W)zVJW-J}>yvLk2$kP&zga6sz*ofC+hE2u`S|TaVh=M8T*#S-B1c7ZI;BoQbz7 z3QwI(!t-~g;p~BGgog(?9>{f$2X>_lVOQ&C(t({1_~1Z2#)g|@*`W5v;^Hji=B6Pd z(WxMUkMeAOoc(vTtcF(o+**FDt~}Jv-&Q+klL8 z8#Ydi%lDhEK|Ca6mU=f5q8l%K`t+)e*O_>SZP+HnJJxOxZ$^ywYgZ>c@bI)zb8T*p z#Jl6Bid~wdV6?e32-cZsT}gKl>C6+ZK>D1?YMyu<jAm|QbpxRP;wfq3b#-c(nBo({0h4U=*-zfg4j&X)b zya_RZXsXFZXHy|A-n|hgcGlw3**;7Sm0@siFfjlmXaVuoQ++( zwjngsA6AQDYB+N2h!(uuw|_4(Gm>SL<>oLmIBdK@evU-whN)rOD60&IU`v1K+f^m; zKh00{dF`2*b#oUcz2<)ZpHp*x{`3C1U;TU=%5og022s56{vU!2^W}keB1i`evY5w$ zsUgQ7$u}=X9*k$#8wHTd`_RhVu$FHO!MPO${rQbQ?tNl5}Zm zs7<;R)k3;e7S>#Ib1^k6Cf23erV}{pd%JLd)bXQHhx1y!YqD9UAcF~bubBs;HiorqWZXydIaOTn(0 zD(v4{hiM^p4khPnuK9V$X9=kb$jhJ*3v)2 zLp|v0>p@Xb0kU(l(;5iEH;==yxXGrS@M6H?oh3`F)*KsVi>u zbC-n6dHsDi=;T^_Y#7>_?3$b5g~w0f;Px(Dx_=k?yJ|4hU4c7yrr^?%1Uz~)5f^XI z!q`xQ-dE-T7#tcvV?!0nOEb|@5r(d6e{@y(qqE9Sz$M!Oy6hk-{n1w8H;=lKP*K3? zNJ&nR5lkkwZr!B5-W=`F{>ywOWo1Q3OHI~EI;MoAo!E$&WUdB(!;e=+T#1R1*tIbQ z`!|MY0`$r5$UoY%!+$m181akYx`sgUiG(0|smKCHyv|L=Y=rql;O<3Pk(g25Y#7tgl44&n*bwa0{|+AwOL_xwb&6H_}&I zmigKKYU`na8tb7!2Zm~G#KGY@+kxS_qyr=M$p=Oa>>q7N-apomvVW{GW&gN=eH)un ziM{h^PTf1voVItOMX_h1C4G;y_e{!Cuv^-@xtwgxaK)}ECrr0x?7V$zdH&CS`cS~P zzw^+C9Q66#|FO#OP7<$c$nZ6!``(IJUKh>;{Ooyr=IS6m|6nRUc25#sy2FMK-)Yk- z6yJEvg0Ee&V0&)}f_#~nd?oz6S7`#9(10~KyfFd~?vKN%O;Ol27>1$7Kx8D7cumD? zkgaO~g}Re9M&ij6iFp334fpMi)3lK4uExkU+K|;ANJYI~bB_-6R0u(rU}CTc!#(*Z zDX@sT3D=}6R!g*IC1Zh0PV`YNg@tgE?^;s>$;P#BDL9jpYrpf-wcmN2OV|GEVJWq} z6mDdnWnmJpW2x?BD_0=UZyoY8qfuUzh{oy+loceRzA_!{^%>}D%ECxjF2?)v6r;U` zniGSg91i>W@RpV4qaZg4&2~TZ)p#j-s~6ByWuTj=^g@>t8cO_;FUO`N$IEvYjEagf z9XXjcT!thYNpTo{ZY0k!YQ3$|HZz3HY+~eEIpX3XuyZn3eRz-1k9RU`Zn`_-^`?s0 zUse>w|7&?++|R0t!hcs)5b#c2A0{)i;PLbW zX0|hCFQfnUs#UAzESALYF7HnEZi+W!uBN8ugH!rvaBNzMcez{*FT1qgPw?C?n}jaJ z`;p6=@xuMpc;;?9o)tWIPq~8YPo2reNCW+NnU8ms0dEqo8;(wk`jMgMojYwfG?{>n z9Z|?ir90VT;&layx34hTcL{eT*OqKGY`h^5M?SOGj@b%MH0PkBDHry_1cU{z zS2r;Z_4z%~9-E(QLvz^z@%G&y@zxjnAt%FvWLvDBkI`oa=^7O%n0Hr0hBXJTLAE4g zZ40^4)G)hg2Gv^g&ljV8#W*$_joW9#acm|G2U+xTAb4)FBj}x>M*nwuYJAaI>4Wxi zZ!Q0$DEC243B4&;8_o!v;F7r!0%WvTnin!3u~wDmHD}LR|8{Za`nPhEJ?GLBjp`Fg zthpv2@do;`a)d#)X3hp<{WfgyU9VyAEc?SqH6iV{qQl(Z3=3TIR-o@fy|n-b>C!)% zzSc(RALio?fW=~g)n?V~X7LFLZ!n?x5~TXBU;u>>?+3?^mtGBqjdvNZ22+(@qkxye zjqXP{otN%po2Gh@nHGn%cq{fJ%N<(v9mL@G>kwKkU zQ+GAyg`geTAYGd+UZd3>zatBeok+ul!^xN#%0NSXu}<`ijrL$~$q1|l~rUMGsp015+!>J1Ba zM|t)-RlT)^UZ}`rw3;JQEy*bTlPcuPf|n6NtXM&nyFj|m#LN55^rx{=-iVJ}t0BUX zTJ~opLi|_C=u$=?3K2OzMnw(=OPItP7!-tzjCADYW@}K1QFF}<8Fp2;%PC&=rz`Q+ z)_#D9x2C@3Vp~UtDBgTLbnfqQ2HH4?r<0 z>;`i=XT_3V46O*)y8{Q1D-jXg2zuK z;laZe476HMT$F`^{B-p9wWGVM2^}3xC@9F1A5@CgTyrK~lWd&H>qcQ7=Y0H9>s-3_ zyJD$+bN}ldXX4$q-w4?{uba6V;)HnH8VWJkU4aMgIfPB)O*nJ=HjMXIVsg-qd-kN_ zv7?C!+Ily(1tQ3gA;Bw!c-M;JwHl@dXT>YHQN_!OBG$xcAzJ3*rRsGiUL)r(Bjk)s zX!HSggSVD=cb8FA05)&kgxcCFX?toe+QD8s_RnPC=xiL0%*5c}WHfdRM_{ru6vIuy z=&KJzcWnSVs{_zn5sLC+ixM~!;?NwhkSIsmLVWIPS0Oxbm6B~${yM5&O^{QP!Mbbi zT6c}4%OaJ`V8$dlCg~a>!)62|7aqmz z)R6vQOkZAlHK=JomQhh*@&G0wIVm1VmPlCRLt%*vg*71pR!b}r6QVUgFSD01+Zo-* z48L82bPa_o=N6UAb%M&5#NOF%$5?+UhI)$8+fjgmJj2FokPwRgE(s z#5qZh^YUileB6z!yH4gU1@jo^_EK=&?tIK&42R<7aN6J36Im%?GNg`0RjItxa$`|l z%DQA}LdcouYh%5#9E@~lqo+9y@zK5-0AWU%G2EDnmrB@~c$XvJ1>#*dPrP&mbJtw9 zwBOQ{zzV->l!({SXWU_4VE$X?f6%t9lQ1`L-K@mR$u^oQIMPZ@i9>sH0j4%KVsfkj zBZD>Q?kGiTV<8%Ab5U2FgW>|K+I9JxBk7uCyRdF#CtK^rtYf#rcl~XmN>`~ZH`B^m zac+nc#mYjJEC;k|rI8kLLG2pkOR&=L!n$FvWe71}9*owc@X>oJe-p```x%65knSxk z{UgWt`}@nYvtHFXUlL(qp+C1-Ew9JN#Uei50j|fz7%=;mfROjw<>mH`4qE!#|F>(# ze(BV<=(+n3W#akAPb`q4NsJ~rI+N**66^Iaf8GnaPU7ts;-$M-V1T#$AWL!L$acK= z%!5df2cfdO09P*Fjr3G2EhxTt(pI(z}P2$zINu+d^_hNBChJZTa_Bk7^$yAJe zoE_-0xiEQB!JTZ;ZJ`jr-na%Q1R7VAqwR(3Lylleo6Q1!z| zrg`FJohc!in*mAb+Wu?Z$egiwo2%!;!ZkSeo9j!pm+O09;ZVG)zT_S!TO-xvR92LZ ziqdp6)#an9HWMxN+30G?MQ?i^`a5#b)s%+lhz)Av)uiO2L`l38{j0EQA>^Om5y~IJ>&wok4egg%9SO-_N^b1HfyfY<{Y5c#X4-VZ7w-E=~Kl; zg)hkO>@{D9iO!rK;atfA*k%NwA!uZ@`L^7XJLBWyJ~*X+cF)=`o!%ZfckXb;0`Za* zmx42Cy7sxkvF(-T&f&SMcj2)IkK^HUNAb}8M--2oJBCXa3|u^aOxj1$)mE)ak#1sv z{@$Vvy7A)E4~RmIL~mCkUU=qVojkep;8`3#uuTYo<^UsXm?TW~YK9SW86fBJ_g*bO z(v>c1?uzKOagYkIw&J;X; zIvE#_*|23K1GP1!>Qc6O^AtACj%n#1x|8MPWFaOxTnX4DJd?zhTDop`?KAq9b|YJA zALqUsf$RQDo%?#Y+0S!^DqeY*<6^?m)?6vycRe1vcs~yB-H3-ToWXE^BgO`5aQB{c zJa){2%ePx_>1ZO_E96)osx!kZVA^m_uhN&y|*Y|D2qbDqW~1V_ud-PbLYm3+k+F4vG>~kZ1b&LxpHMTqOQIURn=9R;-{#%P=ls3 z^F?|_x~A|+O-oTpNqtySrz9CEDTyjcN%8uQ(XPrg>kQEt8XAn?;6MZh`l}hhPc%+n z(Kda2ec?{?6qiVD(S27UIsSWa0k-`GlN z(aCn2b4|2if;S>O?Dg)h&WWtd^l$t6dOa}t;as({;nc(3CYlDwRZ{>lJy1+^aVYE3fpuOFj%|q)K<=7`=1j2%s(txugmHLZd-e#fp4yB}BTX3Sti(W9 z6^43hFxp>_vHn_>bpv(SFw}^G>;wfbn>y5b3Eq1G-T*%j`IsV9)6Gmz#P!R^uzsu$ z%(ten6?hV~963b0uYs!3oE=usJn}uHV6|OEHiDq!wROimhG1_ zs{hk)SUy+4y9B2;`{VY(NLczxMo=jn~J^5mm+UXsb)dfyrU4 z=_tnDiC(N}&%$tLI!$2 zb4#;8w+Z!)4XCZF)%?hjoPU6Ou;{v-_14(ME zGz-{ZYn2U*MHt0Qz{%LXt5z^YyD>*_dkeY`mF3)Kdj`f~h(MYe7O7TDXs0CjpsgVt z&Gl)huS!9BYN)*Eo+=!);p(zNgb-&%und~seTK$6tJp@ZSuzt$)-wC`GndUQbAG1G zw(e2eQoe58|4gyK%jXpl?24pV=G^l^T%;#*(*lf*w>Sn()r4|9T594^T@nLtcc%Vf z-ZR>GrE-i6R*kpPrt!8GE%^$7?KNKuz65V+#wx_e1R>Dh!v&dy;zf7*oU zNkKD%y{W;Jt^8?h!5K3HuZM9&9G26k-GoY2E&b_lV$M@Wo_@&8z?^9`FBlVpHML9) zT*tucJQvT&(2w>e2MQtk&2RoYwa4@SE?>S}J09uJ8xk7w!}$34zYYwN%8MD4{r%zR zFIu<1sQ{)#%hbk=_{%oo;bH$!T3T9T!_vR~->&sJm#$3uJ-E6r7SG?L#!H*)X&p&6 zQ;a?K5z7f%J5bX{m*D;2)w6j0?jf8zGLC%{{n)pC00(vs;h<;X74Uv1Bf#Uo`G*suHtSCW4c(&Fu#d`vJnwa)INkHZ* z;GL%+Bm~*YNKO>+X0H_J8t`)Zb?~(STqfX6hz(X7GffK%=MlCKgO{CV(>7lE^_pat z2D}a!8XiVLVS#qU(c>Y=djWEjmZ7gP2qT@*7+M{L{+0;zG=^byZ3vnw0#R4ukJ7wg zB*rm0s;lnHdtr6389!cI>Yq7GL-b8`^@<3XhxC|5n)-)9&{LxpYVI|b zHuY+l_F}N&@lKbGTNyQZrY`dGSO#y8CGd1-=P)~$7wUPR_?GElV=8yrbh!_;6+cSsfo8w|%=!PB@)sTRYh26} zymOv{zn>?nD+98auYs=tu+f0O0$`Ey%vA!v5RHPzpy`CG6|a}Eds*>vKn^Qq%hW)) zs@7|>@lxX@cX1$pTx%oh!%AQL4;*(en$E6zqmX`X1U z1*oYkL`_u@>Z*%TUsH^R+7h%hR-m=1QY9@p)@HM199+|^CwOV6X*&%M z^+Q;wFG7O75gOtnAB-!)1C~gQKSwlzIdE~9r#_y{T47&awL*Zqav_`@1jI63B~3wo zR8CT6Mgp|~uOj4^%Q|_11fMxrvC0@khx09=vffTXx!M1^^oj1>g$Vul5s zqY=wGI$ANdZY?S+OEi7E$#!A+@fsVi1zx&YaR9}{K!}c9n;dXcA$TWxU9qLh1>^E9 z4K+HVx5fd?LeW~f5{*R;NKFdT<~yNF*jnJF_eM4Dixp!IU{5#K+qaVF8N~CZMKET8PhF1PgeXvDn|^XIxqpFFA&%+HD;j9UgqukM}PDvGLl)n>m4gHvl~n9S?80$ep0$Trm#8MuG05-*)A#Y^W) z@v_M4XX5bu0e?gWFgYcMOPXLe1Sh8s0$louT4o9Lh>+u{8A6V2m32MgE6`oBR6e|= zbEd8>Cdx-Dl2lZdrAXzHghctsg95z}AXj{*q%*{?hGc3N>DWVfoSp2=;eDY@`hG+Tw^1n1L*7TMpJVm)^Avc)RcHxXA)tm%~waR85=Lb z%bxo+of)F-dg_QZ%9bAYKdou>{->4--~ZTN<@28h8{Pge)W}T3ChuCCf_DYV^Zf;6 zPBv|K&Xk$K&({T|IUYK!xGHD)pDMDQ|FJa3=Wj~0MY5d#b7{u1KNXACTOisnN3^9y zGc)#5*>@Vg6oQw>^zv{(M9>mM1k8UB9kTSFQscdUmX#9xQBthuFGBqn|5ty{IS>2@ zUrl)VG~8VltIhda-!eJZ*a=6wG`&&e**);__WG4*zyI9PTz_G1yIJ7Yqd&iYwZXlSaz)KT@ z4V10*S@`T$EPi-11V6eJf*;=w!B3tE!?&-OAu`-^3Z&Nd1ga^s1C7U_Ib(qUo>_$n zXwi&U%-8Ztc8DySqb7*uGEW;XZN1D?+u2@>(f&LP_2i(hBNG(@;Pi}SBqYV5rmh+# zrTN<1?CbA~u!wM+y?kB3d*-X)Rk6$pGdtf*nLyI=EFEvNYs_Em#IwL=ZEHVom92UE zvbEhzvET0Nmi=pmUL}l9Mz5Cmm{6o7MM+Dj6!q0P=;^4EiY{APO*!ao%fx7R8rF&i z+}oNWm7b@(I}6qRs^C={Z>V}ZtS(ui(r!&{5H=v5Ha}RVh^ib1(UwD`CFNsG4K~jP z`t^>D4IwQxUYgR8@bz)k_ku%)9|c}k#vA)0HNoW;X)%trdi+aCrr+NcrUm^vCnf01 z%JTRx8)_4NJJ25T-`dI?&{!baYtB+sW-dW(?kWMI3sx*GAHU%36Vn zj3p0BGu{8bAT#pQg3RdesboZboS)+JH~ERn9uy}pLVm(RWW_8%TFff=Nh@NhXzxob zk^jZ4+0nsruS4b`HG0*5tSe1@vAw?Na(jL8r8b$C7bLzG9uCgeJcU4y zIq-H}f~E3*DPB_PtynrA^Pm0(7R>p^gQ&28A0;IGkL6rbQ$v2%p~iIQIZYWZbDA?n zvRvo1*hyQqn~@wN?INpl-KQnbV@`)mJMt(ppD$uf^F61e(2WFy44sr1A=+F765_)U8zarH$UxC10@Oi0 zD$*YzK^zLZT*cXOnLw3VhtYWHTEiD{sX&*uA$7qKF`Z!4a7`YpRn#g)qvdkrH9)(n z&Bm)XT6-s)Tj(XPWZg%EAJ>@=Gv znr3Qh5)K^Pqw#t7AJ~V@TQ&&bLj?Ftk~vq-EAW-~-o@1!!)r%O`u8AjtnUqHl1q%Q zc70Hm>-YER!OQ;X_L?PsJkqu7kH7ot?mzy=|2Y1~FMl!kr|g7fa9j5Og{w%A^EXf% z|Fp;)RL4A}Qe~6+ggIzTd|IU;ao!(A{-r))-oJ3#Ak+GUxqqmOe_GT3m{_|MIab`$ zsEU4ahCHRq8T(g`@rQ<_1-}>h=Z3@uzptkx%>R8=?9+d&h%y#2R-dui;)KRy@uv!7o0h7F^$|JJVG_P>p;pO}@@u?fkS+}&Lt zba&Tc$NGHi7)!^t(Nt_6O2Ni8Nm$ntkKxrZSkn@PzUD~uHbtPXF&t}}LTwU;uI5zH z3S1Pp3SNOOHDAtC8+i!4YFaShHGrjim(9!|K()Y2QI{+cZbLgBp=$;?EJb5&hGwO> zcfcRd9tg!7ry}s`$!I)tX&oXXf^=KvU!!m+Cu2Bp$gdmSy&MVMxo~z^q{pY0#Svy~ zwz|laWlp(|gFsRTRES2#bUwSbHsHp=BwXGTgA-dL(Ok~NoW96R@kNzrzj@hGd8LFP zGRz(Eu>m-G>J)bEKP=kvw2habvF2wJ3r4f8vzOVndDOC*$FyJeb<6GLQTxqYHkDevQsp?K_Bn}~}$V{mOx6t3=x#qsUAD9(@3 zij?4``xe2QA{uW^t^u#Y*Ajd9su{wVA}j#c2zb+z!x14GFTtzuUHCMzvQlvV!f6Z+ z_981gLm<2#EiDc59?HABlnMszuk+=7amL!QwJ0hs5{=gz<2~Wn(CLCTjqd+FH8J?t z>4A%X|J=X=oL#d7zyBxu)IXwJEcpMxVZr}0FF(Xalt z?cDpn?b?6j*#4uZNBRcG|2Ny>sb5T7qJnq*STin6MvE5bgR@(`adM*t^s$9 zw|io!$s21LywP9hg*EkF7;SdP#x^HxUhRyrZfWxQyG@%K78uim4yjyZf<$vldoN85 z>f=alL7MP1BTy?g_FtQ+!M0pAU3s}@ni^;it|?E^lJG$ zj}Vy8bSayCbeXl@etxD2!G1sc<(62-vfu7e%O16#{d)U(>$+!?M;+rY5~)zBVY)dj zQ6JvCj1ZLMMWVVS7R@!u=x)hES8DYriNQzr($Tv99=uNOA-MySTySMTx9$?+k-O7dU)`y0LUaiYhh{&^U@Cg+;pUzl@^VwM}g z+Jkmxc^W#Fm}5OE@7k<6*FB^aP9AG82#$+;IT8!H=n)#hn;)& z|5NY4=*i)=8>>ZXhDO&{500#>&dJMvJtQRH!Mf3A9N(6JL8eh?9 z{Y8t5MP_=u=A=qbjnny@%xJWhdSFeh8+w`&5FF@f1F10^812?{S}8EC=Duh)G#RMJ zfUL8?tAiA5;H5T9_!7F*d@b;5$CoT4c$tUm!nPnZm$+&gmgp#s6bnalQ@Lsz)N=Rl z8N#RcO7NpQG5EnV(fI6E6h6HXhPSR3AuByhjlK^mbLCs-^<@(!3mAJBq$FJ*cQE zM~u8oVd0_jF*>WZOt@Hpv*aQ0*p|&)&awP6*ID!SGIN{R_OX`Rue0Cg|DQq|@1l86 zBGA_r<;5AOugS;B!-Lqpr3Dv{4PtDl31cH|I6T>mGY6V*a&H5+j20m^Ia1#p1|z4| zI}^N}Hn9gVwO>M*0GdMxxocE(zQr5 z-Zi$IYj(*lMeDV|%Mafkw)SG+X%ibTX2SN-;I*J*pv$s7wCuIsDe#I|nTDs5T?%|> z1@Ek>f4)xJr5KGj$ENXGdDp7te2>z2r{GKZOTcT1-aqRe%p!7+zH*O6>~gL>_~Re1 z{mXy($E$z+@BjVfy*A8#^|$N5NsqPbH~p@*z5%N{JO5?l=1sq+$P4oO@eSj@9~m9~ z7xvZ;42bl%iY8Ytnp`EC8p}{$CmLT>5z5MoQCeCgHF*IFi}Fxdn2Umf926F0p{O83 zr&(DU$jC@TMy7~N(>ZS|XUaOR=a}@IoGj$zW+68>8zI5|cBTf}aSfc+qhN-qfih)k zkZntfQgLKQDT;G~6zYU1g>iT}Dv17;`*#oG2!5T|yeNb@xu=Xb{9^hAt^X#SJ2xVASA8@d8CJRUtGQlppR>ZBiT>^An@;~RX? zToEk)Ee*-ZiI~{F4SV-)$C`nD`QPc9-rd*N3$Ai4GeKuB1kY^CXUf-YXRWh9HgoxG z+ss@ybN$S1|F0B2iv@F^M6kanYO4y++)#%1Uq6APySnhg^=)WtDnn;Wk+jAlac7@D zo)NjZKL!K66>7_;2MwG1_TW|Mmf6V^d<}FJ!U9}N^R3G_;N{>AcBnFkAI(hcG^?wt z#-T&|aq`r0Y}&X^N4FUTVV+dV0$%|%hrw>yx*3&~6^ID;$Nu%PI3lgaLt|bKdg=rI zb9RKoKb-Dd`OiCB9sc=y-);Km&p+?~=WoB=@rRtm6$o@=DxD_~?U>nhEku6U z(<*tPPopGiKAO@Np(SmeN`3O;-`6HB`^RZn`j6F#OaG}XX2FA+_&KOcv}7*IW9K6; z&;ALOJP#4OX}(M;cJp1+)1O)*<*E58De(Bo)KsLq z(DNsUH|2ll@Bi*X_s1Wf&9ve5>wgU`odr1sCI3fzXU~I!$4=nLiBmWv)5FJ4;lPpO z*mw8{cJDuk$-VnAF}WL?C$?k#=B*f8zX4+#Hez&qJ%-2DVQ6$M28KtlW@s3Lqoe2_ z7)1Zz5PJIhWh(PSLt5s1pKV=l{~F!iT0S^3BF7oUum}TvD0rzMPl0zDvnqXFP>Dv7rp7ANRTrp_FF!Iy>tEZQjAOg&aA;>OCO222 zwjv2h@}Xy>MIt3BLO!?v?T8Es_LAnNhe>uRO;8JB7U(RQZJGUY`}L37)?Q}rH*+8R z<(53EJaf6VY_{drx_`}bdm(t~mgM8P3N@v%7+lT125CifWMJb^G4^b(!J!=uxOlh) zmyfpKlE{(CI^<-FazRh!O7vH+losSF^w+u~HquA5Xb#lisJyv4s;sIo z1ijTx=&4$XwlepBD9wxfVSaYvck{B6KFCUo{VYD(|35^9IHNFWF-lSvp){2d*PIX* zfDPh&o1?o;sga6)O8Cn__SqB_Un_bt^)Z*{lVp6=;rJhr-}=4@_O;`{!- z&i@?Zy9fy(^Hk!3=ONf{m1_4KzU<}cE|uLvJo&9};Hf9S`5-DH^m~a3asTbnaQ#|& zP+IbD%$=;YbKw6`-_ql#j7%Z4W~J^&C`vF({op3 zKM`)vWf!j9l;ho!@-^**pb6nCrUo@Fm@teFn;K-j$do-;fXm^P{3tAqm!=G^<0!Tb z>)LVaPzsK12*Kuo6l@(#6-kq3YYl=!80CMyXeo}UE%8TtLkj9^%TZfhIwf^A<)|#@ zxckMn4||aUy}Ue6KCWVvR~8~GCk;s{35bb{Mp$H+x{-N!dBDlpNyHHh7UCrz>;LJn zkhA#xKD2&D`BC%s%VyigermssefiHV{~r;8mm{NC!E&%dT5>q@v!hT^oQUf3OnDXs zQYn_8y{$^Ke6+V!YsJfon80N}0z(kSMu&*T8}_x}{R(_-TCaka8ZW^s@0it}z~^o~ zf4&P$4Mp?9GSPC`p~rBeOGVqJ#=B#3J8EmIrPB4q{;kE@LZW~C)k*ru`{3xf&mT8* z`26>QCZB&9YIMVBqZ39N9WhkzfZ+xsef8c53Sdm&c>>D08tazf7h@v5(N*V`xid3pK!cTGRrhMlL`?I6at_;>jnz zsRKKF{e0D1hrx0j932r99Q1c_aWQ{<7_>7rU8`)rOyxmYY4L;&S^u_v6O(&hIeX#! zpUz#lfQy$e=IIV4!uboAF6s1~tUGn~49>`QmYhC!PWC&m^W2~F zQ_Ey(zYpinT#)_bxZGBk$@x#qdUjU$dON|}(^)h_7nv9B(AB{P+DF)U1*!yZW_mQ% z^`#>&UZ?)s>hS3`b9WppK?1D$G@>tto}CucrnAq4z>*ju+&G zLrTahY3ePRlGHFq6lKL~r9gjV1~utv&%>TgrPwX9ZCw%CTk=s{Qi#l)Y;<&WqNB52 zqfjL#Cm}jEM$Y36H&@YkXMmTmnOU}$J-m+leHGgF+dOK1TE2R2d$E?;PiNcCS~uJL z*Dd>s*o|7VwkLQA1wVN%6=iuE2K3~yJ($?otJA)oW(@Q-;n=Q5Tt3nuT5ki6PnM$~ z!&jdVkCC07iK2omg*JU*I|Q^wmQI29E1IrM+bJ?%o984NZ!68UyC+dsU#k`6NPiKo?+wR|-M+Xc;Jv)V2j{l3 z)7k@j23#@G!z9#QmdHNF3 zm=~iUaS?Lk7a}KaAu{8ZAtcaM!>c~=t$(M!`ynC0(sE2tlUj64jDR=z5krP&TlTQf zkGHI>ckMsA_2AJHzd3#S_-~INJMd5Y_U*!fgL|js;GumucyJ#M9X@~~M-Jfd z;r&Kro@K7ze_)Tsa^@5W(iI$oGe z!=*i0xVk?VR}U7Wr7m4Q#$^iKDI2fA*Rt^vsMKf~Fy+$rVDvZmpfEoR1uEHSZK;C4 zzo)+VtJ^EFwlfR`X%6ZxMnF^I3sQki!(ft7_byEUh}3TIdGYL*rxM_ zS{2O*d)Fo5$e1?{j(TI)fG6sT{iPC!mF8`PoUZ}hT}^0fYeZUVBI4tt;pb-quMIL^ z6&n=oG+KKgS<7Y$18YBAet7$@-*rc@(yI9v$+u0F6_hBv1Xh(Hi6#uA`Eoo>X6~P`vZ;a3&ePvD_k5GO3T6n zon5O@T~&?y*H zy^Jm4iz@=&3){SLYNHnpjJRR4-xb@s314TdZ*#)BRu>GnGR$bWXr#6To1&STAm|*J zG*9lU05vNN-E~ZRdSX=;oLFo-8+eW0=)wkObJhg zq`c(YHeqbts6bKH*&xcP0$R7T!J6~7eYqdOOfl=MZESEquvbA#VOe1;Q&s?*h6?4y z^T)~c0eJIx0Ny$ig}&BQ`4G*>GKW=5;V5EE4gy|*t_9wjid4LCI1DE?1Yo=;37h(o zF}yknJ*&&$E0$xvnu1Ks% zqW@AvGhm7|BiYoXPjG!zDmIN2iIia7Kp|GwhNCiPC5qEmAS+ppkr0B|m>{+B1_XG> z$LRWJz&kAjkp1-QWac&&z$}2zc8o{uV=cE|Z@L>HSSObD$afHWwi;*$Eyl zOXb7&#=3RGXl<@WS#c%`a#N5k;3G&a$&v~(DN~{IjB4ZM&~}1XwBDr#y!+*SZ)|E1?RbfH@K%;*V#`Q2PVY#? z`8^ppBZ|iHi4^QxpMc5HIBXk?k#{!=W1=9mR)xv6Md`gD6bW96J$Narxo7kQwnzz>PBK5%hfuKRERhym?WHt?F*54_h#lb)-?lamvIkt-EX zWu6zR^E^S2ag14t7MYUUYTuj+`>856LPgCtf=Ig7|@$UI3ymcx7Z=49g>jLhV zjs)ZM!7gG}T|!XP+ovTL(l#ANJUG-Y~i^!K)7_pWWItD{FjAVP!v5G>Ef z$IC?nDtWj&+QbQ-TBbPbJOe#Zn2#?aJP5(EZ%s`FjvYIwFs1F-_@EQMqWKDRnNmtk z4NK<;gr8Ec24+-XORq`6OWUx#zw*Brb2nW8-_%%&Mv?luB2-uAp}Z^yrBX>06{blm zEKGfp*|IX`1^alsO!s5r@lrU?_mQx7cUy^wP^sj78G@9Z$^u-`a_8D$OQESj;j3am ztngJRn<+I|{x{wiR$??!FdQqrJM6V&hNYbI^f&YyEiK7YC5G20`#%T?4m=$n7k$sw z)#*?4G%;e*8>u-^p0kS8y5ln2I)6W(kJHmqmfEoOfB)ZW?|%Hn$3OYi6nH0hZo}@~ zJFsWZBzBAJ*tuOmco3)0oI+G|G*&q{Xi5?`mshWDM0-1%&MjzeVI=)Vw6r#>tXsF% zz?J}(DS>K%n9wH7X|iBh;cZ*5+lcJhvlDHt4f5jUVQps$-Z&nJw@yb+f!El0r#siw zM_9BCEA~QTO$I)^8iS9n2IHeE!T8>#AbjsiIG(*ahR{%dg>GhM67uuY5gZbrAHLNA z$Fw6nhCO)QoR&?2SG8UXydJAe+zEyO^Y-PL%fC(@wJiZe zjn}f5vhpKKW%HPTcPn=6 z*n)vIUFhv@6TnsIvu4Ff7-{86w=+GK*6GtBpj9y3g+N$r}NCjjX{7QYATm_Cn{Q&T<@ zid8oEoWL_soB|;C6```gu`~If@f1m#(Q2kEiBWy`T-=~B_+mdbP)N=r+y&rbVQunK?`wze{%YoKh(YLc*-Iri?|g|W4R=oGk5 zjO63Z69Qf}HKfT)VulS{HeSvf_cDf!H1T(v>$C9v>oNG`S};Dn9*oaKKDi!&=Wnc6 zjfXGdy0H!%-C2g_swgn)aHPEWl#KKQ)pn>=(3a*PFI}*|yLPClwrhiLqW=;^1iFE# zUerl`feCu85Y`W0G`EFwG?0o(6GQD`T9f8HO&&8f-ajY&F#g>9>>?k~tjnkOHB+-4 z=O11^z3g8re{Ns41la1}JyYd4iTQK??X;@GDiA}ux&U6dpDP0<5-ixw+#*T#q!((_1JV%q`O~!ZW0=+lhDzS zgs$ckspwPD(UhT@bY^-IN(vd)G*c9UEF>mG>Hp$&T4n|YT4K~XYPxKFF)tqjEKxCF z=i0>ft+;vXIxbu~hw~TC;Ox26qSTzk@e@a-1$j`u6>06syFa;WyMBXPwrtdBXEgC~ zfX2}900sv7(BI#K-o9@1^mL)SyAxeqt5w)}+rGLLt)dKZFh^5UJsKKnQD0w!+PW&y z)GJY4U5?7iGE`KQqP)ChN-C^r1*H^~6xpuIPHJRdR#;8-6=-g(LTghsR=3rntD^zE zT}|lMPR>@046MemNLYxUJkNRjMjuEeSx4s7RF(a^wA7@9X(@>!2@6w`jj)_*i77AQ zcDdOZPbjSZE&ZtRej*z0bI)GK#S15~Q#4*a@XhkTd;5CPKeQHK{_0ow+rRxA4cP7N z>nqT5(NRE)=6^%MvS8sNmH7*#i9UaU$b8KgwRfLDRG>;z1EEUWF(Ioko-#3*b!u`T zj4dE@`Mw?4x_J}_w^ZV-lYw~qOeA{cL!fP!u;tX6*FhEXkx>-94f*)aod$gGcD_J2 z1fSlF#`o@4JBY~MNtFAqo4%ooui!crNo5CEpeIN;E_0PGv~z@|<&bks$lwxJSnQBQJbSS zn4X@D_SQO_*p`mV+x>BEG7#5y2jb$c1SBPd2}~K4j;$N1XhoxCry1Wh_6rcatT^ax zz-`rn641#FUANaViWP&Q2vpI%5Y_geU`HVIeBi zjHSsgns9(kBR2Wdn7ESDz(A(TVd@+on{bG_r^dv!ru46+_DwU%RH8`{&Z~$PZRX8( zmQdRc4)Q~NSu{Fp0?}O?gx>lf3^avcxFrN@+rzNFGXfjCBjlTk#^yB{=&JNUd+|zi zlsP`=toB#%KK{v%Hr`Ku@+EHHx{N~ycVpYOO_-S2tl;fm(~mVHWBBElzZCHPElNrR zygojf(qqYD(FU3Ngw5*3OR#Ve(@)bjI$z;iQd+FQoi;NVjaGpxP$gV9ZCxUn|jL@i#8I8HT?}3?#aXY zR%eW__QUX+8qp5wt@dXC1Su!Tc)%o78&^V_q5>Z#iIh=)7UsZppo!sTb)1eNidff1C=kAa+=)x zW9vMyZ^#{MTb$5P7A%@y8L~3dOtYDGc2^f(sV1T$%8~&0XHOwc7_*cE`y3 z6eb|&xu3+Gr{x@Tzh%q`qRA4v)YMI?a(Vx3c3q7rZ8J5fmM+_BN1SY9zdg+(tfZ;s zb2;bP(z47|>}aHob>Wm3gO$>K+Qw^azVzoc_TG6q7{bgO+bgpn8+)y>;qv`6!vCXX z+j5qTz1Ng2_c99mQ7Ur1(O$9wUF9p#Ya7@xSi1_NjjOPs)e)Q9ov^jT3ER8fv9sF+ zlReJZ-RJsX_h8s#@LE4LH3)d`-noX;Cl6!$_RXsCZr!>GeFEP0u3r4)r$52(e)qR1 zDlUeHrs_EyD&VDtYk^cd(+<;n!Axm#ShsFOZE(~SDl5y; zCrzi`-mWRxuzpyy(h(fkQh_&51mUgIQL6E-S|!aod8tuOW?R%0JmZeG=qgKW0R0}DaLB}_-?-1f!{wLh&N8M11Sri!}R|#czI(* zAUYaT(b!NeO|~i{(rjb7slyLf5k!Pl2U!G+-?WzB#g{=?K@Mc|S zlj-X)wsp$Xwb+YnLoHZMKhkQ@`z*~@Mw4rlCU1Rh8N%f~TDD}qK+ddZ=HI1@1iS*h z^te?xv&9dmHhN-bzbo3RL!`-EDxgiV**qPjf^|~ub9Gxij&Dg-@DjSW_xR$7I3!DnYf(n{EwG{%&7SW)TYD~Qm*syq?-uR5Tt*wMvDZ%9 zY>l1RQMOyI?q!wv0cbCGLr=9E`fJ@WSnq-1Mh~oO@x-RpUf9~@jcwiD*wO2Q$v#i) z?RUX}LAM77)`mX@ul0NN+aGD?+H=p|#POs1RokVVcl-8jST{a~x`qZ^xOf4de)=); z^77&CAx#x;A5H(P`S#sCY<6E4I5;|K=Nm_qMv@8E-?;ygLpzcKNEG?2a}5=xvHdT~Q!X6a3{pk%~(yiL|5;bk@h> z)TU6;c75>7UO(Jn=9Rs1NJ$D8fJ&=Mk4sYn)5V)nk&XgxX4F-vIj@9^6N5diR888| zWu;1hzYk(!BXt`-KLS>tuRzh#dO6i~s`W0=Z74?TH4vs4H!`}8J*)w98O3P4jQ%$t zfdM|EtuuZ$we}cIxz*mxlv?Fzt}jJpSuV<$eygekElpJz?r)xwA(6qprYY&~s#6&o zXvF%VdTbc3$HtKcl})4at&TQg%i2b49c#q4bw+ls&BbAP|BtVAe{f=BWUUQ5kAJVd zE8zX{ukhmiJ2-Z9pF(%%&I#WBA_;s?(c;m3Ev@FRim=K|l4u7~6P^);dmF-Xob#K#8X%Ki*Idms>JHu>TB zxG#>4`QYHNHx7;ZqpLAVKOXau7(Y}Bm-V*9;ow>?>>2VWNyWDa9&V!9uMmJN zcp9z(CpYI6a9$-Eo&0}lU;HmF4h!^JzeU*EfcwM~9P9t@^t^P-(q_ADSnl$r0%G~^ zMvJ6}i;2xlQkpztP7img$A8!}UUNJG0 zi2duO!rYvSqg&Hd4s6LsTnsg8rg@^h)|d(?)L02vYRq3JQITP2Y^)LmBNRUJyyzuC z8!KBXylyk{jsJlaDq%bAS;2Qf%?vivgThr{Yk_uJ<23;0vo|ha^AQ>vAWBREQj(?e zNQp;nbs^StH=wt(4&AG3G}sU`b2l~Bps%|b6Px-lv9S-^HuhrM1|wT3>w8qT*rpH3 zh923@65D>Z{r7Gt$Jq^DxU|LV!Ihn{kHKsGRO9{emw5G+=WzPeA; ztCY8F-GqX|LZqgpVZ(-Tg(|gK^;i&ynocxho3(s-EnBTIF-!xOW$v?g?@nx7KaAR% z3W03`($iB-#Ig)CEiKMRb!CZYoEdoKXfR$o6@%{PRIFMdAJh_>7fiE{WB4f?Z_eP< z%$~}1Y{oM;o0=j-Q{gy&LXS}7h_tcMHe5f^h&zW8a91>&TL)rs9q2=Re58J~ z45;$r**tu7Ed<}W5QJ}^36yK`!~KK4curtE)|;-!oAP2%?L;&o0ZwO?8@BfPVNF|t zXzGbFO+;@;k(vq!U3LJe(>r4mPkB8U8yxLw1WZhrGl~n+5g!*RfOSPel)DaZ4iEK* zkC!u&oOEp>`nWGac1EnGq~Y}icrDj~197q83b0^5CluzV zBRs@U-LoP?Jy4XNiQoWf$p};vqnsxd=_#>N z39Nv>_bQD<7aJ9%$Bqc`(8Q)p47p6;m=F`7>DXfG#cGOf+3k<4#Hpm-`eg z_cly`?62-xgzwi0WB3ks96tn zYxi*e>`~Q130%6g(2rMT_f9n%Y@67koo<9NUBw7i%M)P=yfQT%X=ZAH*@Ex%ylk_7 z5))g-(9_+nuw`gScC_W?<)E-I9~I?A3g4FcTx=i7#N=2mN(w|{RPc&cE1E0;#w3W0 zTtz=mdRq{*tCou9tC7qW+ce-g@_|WNnxzCKZHyfE&krlae+9z)79ccWm3(AgIsk%A zLTV$)@{!#+Q;Tn3&BNPQa`DE+9K3uc6VIPW$L+%z80pPZm{a4O8hIrUTOsFfE?J4e zwh)bCMw@U$eKmS}+Ef!~=2`ZPbI^rm;}8hbHaumcn=2KC03kKbL&G2vo*WR68s{Y+ zODSSwLg6b~T1IlP+Bm5d6U2F$F{msr6b;!Kz8*^jeksVyO;=b2daux?Wok;C0AvBe zgIqOLI!9s=WQ=%KQ&}XC@>cMsB}br2)-zs)yJ)ZZIY}rh$(3U}i8!KM=JN%<)RF^z z9W+Zchei{C1RTq8(SCAY79ce-ME*x1;-kC;yvtA^$7-m~LqSFW{G>vmH_7UTEHsvd z$^Bevv^)Y=z@wm*V`>(O#YW53%q7ws=Y3}DN0W}qJ7Fa*T}iJ3eMjWEGfy7-0@(85 zdmybJE%P0b^{kY+ui2kv4nDA&{wB2({}a!>V%Y+$Zpy^ou@G$P@kMjFhgL$f!PZ`4 z!d$VX+ZRX112v}g>1~nNy|qr?H)EbM|C8?#=V@B7T2I!!c*w>(Pry3=Ni3N6guE-? z6p<<48-XvOOAvE=y1bQ@%6B7`b!l;qz_t>Dea+|*jkiPK+tOI3?qJ=WjTjkRjh$Nu zuyf0R0(i$}BLuMl>BF)^mOmu2&rUm;+`0y*CadwvVSl`G$nU`mM-v}|*ZRHo-p5~j z_OsvMjn|*YnNx=qyaX)+I}^TyEaA)fefxGB;8Lrdf~;t?0#OURQ^1ueAxq(MPPt4$ zEb9$;cVS}dIM(!cp^))=3v*FgTBsUuYfGK_3zkVaCp%43wMT@BcI53QS}b8YS5va{ z!!fl!dz_gcO+-x#3)Id=O@*CqYU33xmv&zbFDY6lJsUJ{n|z4OuSQLb>j_de*Xc^e zCSgW;v<7?6&xz9j?^zj<$V`hA4KPBqCqHf8u27E(ChD9g*TE0|X*3nB!s^-p(Kccc z9TkC?=t$I5m&mb~Ym=3>LIP!}b_&tSo*&k<&=EZ+)f=Tn>2i!11jxYu!+^ObrT2iQjmf-dCT#D@U81-?b-H;k@eoitH;v!Tt3<+=&4LD8itG|Mm z8ey?$tzp4ls^K!DF12lcAA)xkGDYLf&rQ{UMFektPKs!K@d9ZF1o*5Htu-A9vB3)U zuprUQMT?Dz@KNx_NBg5x)<=iA%ROI$jFc#pN~MsMdb07WS_T!RB6HG?fv&e_rE_33bB8b~o%F@x|eF z{y4TN6gxK7s+S94%m1sDx15ueirVevnbG{9nyBBR2#NwxGbxA!3JGR2;Qw**6BbAg0`tqnm;Y|q5-#Ja80Lx zw-RM##aPo>iW3t#IJrF=4JASP(NJ4)r1m0ErP+bnib>gSv-7T4sBoo?*MQj0#w!{x zwO=QJGCwi}vwVD(*8{=JDIu&L19oNOCv5Ajr}j+uHH9cOCTg+FX8VMei!BKZ2-5OgKjde}ASoe2wWIh5XMukl65~Ro zS?qy?C=V&eO9kMM0DpHRM0+DODN^>8X0*>THAN&Rgv<3VMX>L3)jSDDHm^hc9i$v4 zny$b8kBDFw4SN_L?W0gn5bZQKT`G)l#to)fBLF#42}OqciIz%jJ4^r?rsrZD)||9( zq{auxeOZFAKxbs9MIa^CM_L$*5gqP{JULcUG;_->RntRWdKfYjJX8Z_oZFVlXsl_8 zQ@b;PYY$!vPISrA_y@e-OQmH&|803bgrrHaZw4{2RiohKvyi&G*Ceqkba?FJ&C`d(1Q?9fI(vY4OrGD76!PZ{X6qDhF;@k)n z=S51T6C)L5lA0+j&DH{~mgV`=#>;tXxvYrQ{x8eb>>$bpeZ%KG{RCs(3V^=}#?ht5 ztKb#kvDlGzXwSMSIk_Sw&Wi#K0?0Vj_i&;b-2uB#pi1g;1n zYT(OJWfpk%8W?jum$7UE^fa8OwPAZv7|WE}HHTsL_jMUpEdgyqLygSWqNAf#N8Plq zZpWU@)yAFdgunU=IxLqa-{L2*No0!2AdYVwGU^ppx9LiP<)%{@NaSB@2lvfN-D=nx+hr01Bv1z;kYx*isUY4fAbO~1- zlKTiDV6!q)G+u)h1V}4bdDc@Jt-6qz@-%3TnSrpi%nioIOF!Kw)SsBpolBW(MnhUQ zUV^;6r2>cdtv9llGA;lf$HA|K@Tfxgk)n{c;5wqvrtF^_ost7KIlsRZuboW5>n9T) zynH(UF?g+?J$O$X+lR@?3AOPOoCGZatPr)8josF0u@+pZ`A%uXwkaV@xSDm-{=B-M zYRh}ooUv}*DAtXSVr0a4M~sXNVs!1W%AP&D@Y-uHg(r?;E*5$2Keh}Ap)2Yo76NRAFvg*ik(kt zla!C0S_*B&ghEV|Ki2mqNOQ3O^|i%ltjkAVa};W;iewp6oadpdF&>rWTwf&Rd^A@j zqOP_SjrGM?T@#MRs$|qu6{<<3r7{FHwzF0oXC%gSJX{wRz75TYKRk8Tx#O1P2(< z+Mr7~QoCKei2W0Ek((p)Ce{bnvmz#JXKK8Jujzm^UOgNfVLI0y)_7O9RN~0~4LGvT zlJzR~5VkbogEJufDB=2fKK$a7 zpZ-e2LY_T+Si#HCkc^pNX}c85>|lX)dbypJt3Z8t86nN>rl-_+ZLxZ7LKshJ!z>fn zvhB^ASMgWB{snHF8pKP-WAXBFX^Pf)z-a|xI!Da|4jQY0on_X531doN03BzC1!}uh zvx5MYnv}v+K0^BYx;UCl6c%*Zp+-k?0+p#$T%F7~d%9K;ysl0UZ%-SrcHr@2C7@+n z+5y=tWyf5jfU&0|ALZr6C@wBQX-OgadfOB%1cHO?rvMRn^Z1%Vh)`ywA^WE!h2hYq z3=H*_qr0O9gZ=f`w>}O1UDX(t`LW>!>|C3LuGQ7(?`;GVlCJO1#u}L)T+@uLgDDv8 z&Ou*S4U$D0-q;(9-u41?wU?`XdT4bby4#A;-&u-e(S%34($Lvjis7CjbgwSM+TH^6 zt}ey8{(N+{mtmlz5dGaX7#*y~P*1U}E5q1e9XeN6%D$=SXfDP`Pl;%{;pk~e!)hsS z7$`tOTnKvGveDC4f_1%_8c%k0vw*g<5Ss=vkr*E;_o)&aW!qh2=~78K>ph?im#qex zgJ_yzg+_ona+tVQfTk6q6{c#ga^K|n)3$F_p!%Fd99P;ZTY2X6wN?1aHcpPq%u*7U;&OovRB7Ub@LWZMWWl*}k()JsW6lkY#3o1z}7$o9!&`hvlLm(0k$7 zfsHCh1;8_9HVE6BCG6!8r*`Wphb`Gl8CN-C$-Z&)%6r?@UX2?U4?f6BPk0Po>qkG{ z&wln-w$3%WlT8S4&AfyoC+Tc1s9Q4LZ*LVhePFH|rSu7nxab36K_S{kea zKSZ_Z5}Y!xHeS(yMLymQsObySif;&CE1o6}+rWq=L}F60A7n7>vF8!l@kG zK9GO|+p4f{_YmH`oQL}-QgLEWBaR*z!E5KU@yxLzY~R|CvnMyBEDmfgL}6Y6uFLu>yW(+ZTL~t& zb>r5Nd@0A_;I=aC-q|nvXW`=BJWNjX;@F-}T;7w0%liwleyknm_LSiK_Gld6mW_hk z1RUL(jdK$*II%q!Ia#qdwIc@?w#P_Cl8w@$Bpj3NF71@^mVDVhUalnlv|SGG&|Rc2dzf$uni;>tK6# z2ywnAggQsXXhr|N0J&f(O;ja?~t8M-$Wxu^l1N|7~ zzy|bn)~e6&-Rs95gV+9Nf%mO9UH}83@7}fDPUAHIR*>4n(oR*oC0u2hf$F2-%k8as z-Inuq`%P)QGPQ^A_3M}MSHJohE}hzfE5}yj^07`dOS70CojS)WwCFr7kW7Yrf4Y!2A7xfrjU48`@`!MM6J7`OI>;^;)N#x!L! zSlyU--OFr4p9R3wcrDvwZdNqjy_Sm~JrjZ3r|NL>*hYMQFCRa-8-?p9ngp~P@Y&rg zeD+)c4(?xv>sKc6gF6ZM__=Z%+_w(Toi4-Yx5DtwRnfK!6Y?Oea3dSXkBsB| z$uWHQY7)MCGaq|*_TafQmH6OdFkU#Bjf#>K+&+?n?_3DRvnLBsT#%?0$OjigaP>eg zYAe%l|5PTvdnp8$4iwAwNqFmGCO*6zhU44wMB{bRXRFV287om~hO0(s{Ij)!66h+J z08tae~la8vI9-n_2;$vSKtD?@#CvQ)sd@mk;|XlKIL2~nZ$7;Fy0hVD>o>Wz@rNSw4<%GFDU zEviNHO{@?8M+RJ?J=d5UsKr_%)hrvY85+#%DJ=*=Pn{=P%iU0%?SaBfPZVZ(p&-)> zCAt3CG}eL>hc?fUO)8Iq@w6Ct8hLp6ahXoZ!D%@m$FdiWbR&4574T-JKKA3C`q9Sw zgD-xIx8J;vi|3DH*RBb5CnIzTU;|Kr@7`SsNqfzgnyNiet$8i$GTXMYovtTr_gmmL z!g;H+O|@Q`H`?!B+`MrGzxk`5s`f(pSfitY z@YbDP{Or{V{QRXX{QO=7etb6!pWaPHZ+E3?L8tfC;Ai)u@$=`x@q?Qo8YS)Kv2x8U z%;Tur60b!*Y)d<5=MT?MEv+Co4&S|1fG?hp#&hSJaOUI|{N%+#{Oq|X+&tBSOJ}8g zKL-Dqg!>h95r@ju*}rqe&{T zH!tPkhquE7(4`8)@806@=?Kx7D{=nBs6f6DKNRTSI$4KHr`O^0XEX50-CVhjjdJcy z_~e;XeDZ9eXhFSr^>UR${q+kunuX*3={$ULEfg=GD?p`y_4Nz60(C;3!>u!szxl!v=4yZE%Huq838+`@k&dHAf|BLhT%M1l}hyBI$w0w z%x2^Ls@5AD?t)G2uGl-^ii0C=I6Cf&?d!`B7~rX{eA6~wni-~TysGgkc&BZ=G&2yq zw0BqLIitVc5e>yo2n+Q_K%g%IgZvQ`9DvBEP>c?>F?R z=4Y;x`IA$!$xP*#lv6fY(^D_-t;cgWjz89T?SF56=aVmf_{Cr2jn|&H8$dzu8sJ)@ z(6s}vB{R(mR@s6rg&@^!WF2!(DR`x<+N~XY>2jt+iq-XO-;}B0&e?wLTzgYH*Bs?z zpyT^f`cdeILDPYJG|sj%KO(}>`0>hzDbRIXY3zH}xO^^mby}nyY-&?m$j-L;#>bN% zr_(AhW-sl+{E+GM%jj3m4)YYwaWNry_jV0_{bB^Zd_m-X1b!*gpFJOkq5dk3fX0N2 zfAw+deq;%oNNN;DDn1M0|Ls0$;q8imNBP zuzp>efVTiYzn_A$hr6(SONW3r7e9Wn1VaOj*gLrfKfRZPPw$mtd~LJB`lrt&;O!eV zC@D(Ay$h}Q$+Piz6dhjZNci`24vX{NP?L4)3GiW(PjIlZKC;EkVCjG|!w}jn8gH;f;%Vs4h=aSbuse z4liA(L`7*TUcFR`Pj5zvHeHIQ`W(D=sTiN!O2D~;4X7zkQB9iV!#k?s>%$cM#(Y3C z0-vM8Rw^m$*=U8T&yksJBB$-956vIls?)*VdaUWL$Md&N zKFG~_?8iIxd-FS=DtO=f_A9t_;e=?r0$$N{8NN}qR)MYwmKQxj zG*J3>ismU(9X>2g^_6U{Q!^5X8JjPGCPMRpfZ1qDrb9)Y?nR5G4VRrM>a`%6FQMur z9~-qJ!cRNeWJ)_Qfvp2DRm4 z;o3jJNNH&?%Qc5tY;2fb8)2%k8ElA`5czrc=gQQEJ2{q#EyD%aJd}?;8;jA`Rj!?G$M-hl2Y2E$ z`q}5VLPZ0N6c{(b+gmg`0l(TBX_I7=R>1Ed8W@41@Rf5?+}s=$nogpbvEpC{UZ|e{ zLo_qh?xr+4qnW!pJPlVzfstOX@w~8l`JJ6t3KSV&NA?x1-Q8&pf_<0BF$nvmQl5tp zACB&l=DnQT!*w}=eHKauHAl@dI?_)>D<#>7fK*88{aFT=RZp9WOn}F81q67>cBYxn zpgtzMvuSZKO+P!AxIQ&01kEKL=&kh-Z8=FQkTmUZqxS)|TSl!+z(u_w2jyJ^DdN@8KFxbUT&WdAB@7B5ENtwBR`9N)`7@L=RlVLDTiXqcn8j% z*den0D{}TY#e%Z^{8#1NpOX`o@YuF_Sw7U)I0fFvrUtv8YP`Sv8+`li7jgc~5e2W+ zxkjK`&?O9wX@D>_z_oz-5NK_HwU$qQr7{gxvH_q46riu8P(Gd#1P~mn zjK<56VmFT$;zA z3rCgF#>w;P&|0qN{`A-&cm!l>!jbKDe*uwY-==2H^BJJa`MIA|01QIoDlm7ZIY+d3 z4UH&5GYZAU#gx@%F545rR+)n<4(_PO=XcZa!@CLi{FT-C{I!0(czq2*L%iggm+3zI zj|3?zO73SWOlrE!=fya^qVX=3mW%vXULV)9GNF5+nkr;}Q=!^4UacVHe%byDD`CC2 zQh`j}S2>pDPNwc<`rldc*fe6j_dK>4W^M_AtgdiumB}^oePme&e$Xv$u~ZfUO=`DR zr=8JmO>{B~z7K1>^k^`-{pk6iKD-KJ+ekL;d^7&O>h&OHDkX&8`I9?svg2V9AX6+5 zPnXRyYu))N;eK{yJr1XK>+D6g8SZbwKu@EBHz)J4sbT8(<_DjC@%hhxgSX#&L6cqD zgVz$v25U_fzzSglT%DJ7EbCOt7L+Yf2n&$8j{6h5AAIK>3=H(3th@}_xp|t8N;O_v z5S`m^!5^MxkRog=6w53SEJS`s@nC=z(zc+%l$Ou3wcb^(*FeYwk*EEeS$EeBRbcaI zDK-w~Vsn=##yY~VrYm1GJq9Na5Y68S4Yk<#x%|$fXXhlnK672NHmjBKQ zOe(CYvfOLEcG=&UdgR{7ytWtw%CzyiI+_2+|4o-dS4Y`KU`(4Yfy{MG_^4%h-ny^A z*l5B8u`z=f@UpXao_6jM?)*Q|AuA9OxKtybg#`N|Ox`1Aq_$ul803dwSx(z;V4$~} zZ36t=;O9jfG{c8##$JW4!rA6-rlK}rLfSx>mFhrmBQBoWi3^Vs0rCX_D5r$;)Uuh| z%@F%zPS4A6>_v_{GGJo*-hbxQgS@QALx!h*Z_w26#c%Q6JFnovxns5I3bLNB%yuB!|s1Wex8}M44YXV*lprDPH zoojC#55k+r{V-T7FFHrAEqM|S%Q$k4nvQ8^61FU_U|C*z(+2=jGnFJf5K);<5kT~U{5=xz?Q>hIqFG+zOw?NMkeI~sLQPOx5Inch3ghF#@!h-C`23kTe0VhqFCP!amf>u))@LF) zAq33ZMLT(1lrK7)bFphYA8(wF#(S5d@b1MZymGA#tu2+SHw>sdG+j=XuAU5Yaw{|Tp+Gb`e02< z1j@?_H3^`0-dNy`2tiYQ8E);1!_S`$!>?ZG`cf0p^{g!9I<+~kkd|!-Zh^ZsJX-$; zO%+mU=>Bp%4J;(ECV0R9tnn3o_k0jeZSq5FL#}ACnF1sRYB%?jnjxdlt!dB3wHVb541j&4c8y<_Qk>3k_dg1q$kDa>qswZ`UaTV`9w z`=C>OCj4)#FnC`HOG^tiWd*W=Qp$3FcrUdD#be2_tr2c~&bqxkLoL(qn&;*{*Yk1S zoR9ZY{eI;bd>_nUi^cj*((RG)JQCylaAjXI?(Fx&xvk!4uZu-ic813ASiX$g8wm*s z(m+b%?e5so?}o`W?wA~K!^A)U5@LPS>|nq#4 zdb`lJx*glLZP9HkQv>I3DR{rokuYNe6<9k^iQMcs{Qx-P%lf#?zzI7WudL^Xs$L9I zW~a_I(Re=*@G{jq^Q+xE=!dQSk(yoD-_J{4V)^Lg1NC-aj-=Q?tZpjMUUq7{zkMwQ z@7~|25yC7RFPpF-A<|3Mti=${)^3hXVWuDDgQ)ZKP zK3t@ks~Vatb8%dxTCmz%+uA7^nhT8n09p0W-Dd0t%0&?u-beUZCc74VolAB z`w^nNHmkYLb5Z-%vRnt7*ECUB&28R8nlgBN+EH17sCF*bnjrUsgEf9ATIzcO-lOY% zMcWnd=F9@#!W{IsW#jBdADrLfiBlWBuzzzdvU5_9n-hob&N{TV)}yVh5tEzSar0=I zG{-&Uo)Y}5L_`B;3rGGBwR8S&u1iac#k%1ttRJbw#*BU>xHS6rsrt{jt{h^jG5Ss^dy zkZ!S8VTd z#f~)uFFhjywL^`j1j3h)uPuwfsDQV<(nVt*Gvh>vO=3h**fidQ%V&4bE&^VAv0ywK zsHe8meL1y>F0)N%k+p-Z(lTtuOLxyab|RXbrbkb@{VDv6+wkHOM7O|x)?+IX*>AH%1&;_=yy5QQ)EtG#qI z0B5&`qaZs%wH4;(Iye@L3tPPL{GmX6dLtCSz8`_Vemw;ryu1Oa$q@=6o|87-vj=K% zXmc_O^AeGkYVyP}25n<)o_xT@4ytf-Tnbm0721=pUIy~vx;Za~yR$Tt2|Zcw?zBKt z->_-UZJ1n;xw^PNw`Zy%9*-_(1fRRJz|h&43$&BUd8xwMfRp<>>C`e~&<4yH1iU}G z-sYpseFnsnv~}6yIXchIw4}r+eD*?x`Y-?Bc9^sf0@2-? zjl%pijbA{GniU{Z{*;$wVz46}F3K9QDA)fixs1$00o}0u`m1NK9Z`bV07j3mWg?B$EikY05e6YZD4)wrzc=PO#00NK~q1E-IT z;f<@+cPU1LOxk50Mc8vTr$FI2ww94th)!X;7Gv-ck(!Lm=|wrd^O45a$Uz9Z4l+ z%d0^(r-y93rfICu)csi|kPQT>!P6wc?J4}IxgE7SwO!imkd7=1P<_1|5$L@@-NFKV z9pzrIv&K^c(NJU4YqMP|&pmyu1e4Jc+4-kh;d0wR6?RO?wIn7+;s-BP;cs4x#&2JV z5&%cy``07!?EWAe*-#fat{ zE|nVN+PcX0Zm21a!l4mw_`91?h&(5!%(lRk<1{VN>_NMJZ?yw{`fRwu|H~I6@mDX) zHQg@}@Wz>YJ9TgPzYHu1Vf+8e`>M8LX)&->qV9Ioas}>$E$=Z~GgiCXsd8W zQ<*#VO>~ITv3FW7?8Q}?8rfr}0$>%E?Vvohd^XX2XO!*NtL(;@fLAqM0q@GdTu1ndSe@O{nos zCBL-6mdh>Za^9F4et}!3dNs@NYbPSm)s!qRIo)z-H+>RwY%y>()35+n{dm>3X5ues zP;~jIm^X{Qx6HP{5Q*V3PdBoN@Bj^9LSQpSKy>g@!~`wSz}?Z&!8$ZJN+d$IWgas} z(Xt5MsK`LPbE{ehP`rI6L|_vDH9^Y0fO`i5@&2V~tm!GU0nA=j z&*{x`J^0{q6ux^o6mQ+`z-uq;#hdqcqI-3*f?7L~t+L9x?G1F7uF&xGf^wOqkEch_jDC*9xub? zgC#gQS%As$OpNrGAT}-%tK`0fhld*Qy1ODiHVh$ta^IGTmdjx0Qi*c7Fms;qnR8xK zrZ1U`szN_Je=G{$xg3r6<$r#5I~t!nS1bUF(f^W{myY57N{sdAW4Je8JN@|I_`mtg z2}xFR^sX4~&BBIGAFS)oLQ;H){9j|nd1xp%O*Qg7*a6A)yjR)+v$e9U=dFW1q$S4f z_`aql32;vr;jN2Fc;!q2ZXSrinQh^i91O(zo@fo7$@|>al!r|{LD;?~5Icv1uyZH~ zJ4D#g79SV%kd2o^jAKF;A|ugFz#b^)5I83WAW1Z1N_t8NCN}lp`o(<$TqDInW`yDl$73|Dfs+y8&f?Ox_+T?UtsK8|Q;SZmy#oxXbr6bcgY*;-Y zUW&!qz8ukBmrrX>dMw%&S*BmCG+9-%qDEfw2j^%GiYEBWLVhYFaFtYgvhs zq7?l2tv>wjjTrpRTiN*4`(60*{a*a!ol(?O=V|jgB_$f)zgLU@{mmGWDE!@9$@sgs zGw_?YOR#RBShjJ{qVXqJJw7Gs)%TM z?7X5cY*JFRhP~|TtVFNKk?l2j`CLA7G9u)^EXUwrE1o;oh?mc#;oTd>Xp{Gc_f|XL zw8B}XaW(qb0d%<;Z=8$6XZH%x-k2%(W0~A@nrPTb$BN0k2kLLF9ud;=pg*!aTT_9_ zvy|g;J6a9+^%{6R@o^CX&@dz?g(4+6 zT!jf&6B9z^{x9s?n_o9UGqa6!PkdzTfD zmjJbmMzg`x>L}xsqM#ITTHqx-jrMDxYn82KsuA13d+6|isdJd)2yiVk14XtYc-gtO zd;2IVOOsJvoUB7x*}29KP&+(C7%Grjg*MaK+bqpc##f~a7oo)-X?DU{VBtq%0Y)`F z(O3vw^}CfOHJhByP9_CBp``GUkChrP?Wi;pB*q8hll!&!`!}QUzrPWM-@P8C5dNLW z)*dgoIn9T=v-$8Sw6U`6vdVOXxv9<9Q6b6?+fCNFx|pUhKW?=}IxUp{IY<8oJ8Bqm z()gmTLTPC>e)Rr!{QX;TdJTX7R*cH8-^fQ@O^!m1;QijS75M8{qw#lgjeqxsnf~UD zEUaBqV!+7%&2#Csn2Lr#ow5;2nV_{V)AsB}JE-0pmZhnz$6{v{@0;!O2F*xwh)Es zuBa+akZa6BVNo`+bJCHOl`7{<)uF}wKjGoQNJ~#ddPb7ky%Q2+j3mUsKfo7@b%dJ; z{dNVo%y`1A9IVK~LZxC0@tG1Pa19Rj(pK4)^}V=pY5&6_AhzWCln}ypK&B|9ZBt9^ z%l6xqyZygOVC=HuMMWQb*cfY zaJgA;X~hazLe(Zl)16+ob8-S>W5Zaxb_i=nhcpAl(9jwTiwq9-Vf(~p+`V%Hd$z8| zkuBLcv^hsJ8&Ko1vJBIdKz~V%Ybzh6h6@zfs_9{g09m$C_cD4t$cLudldW0EkA)wI zj?)(?sDJ88`nx`*zMNKvjIrejR9I$b$;$bf8t1e7HTd^$MT=0Qj5V6&Tk+UB5F-GR z4_1WRn~`7BWk=hwwMU#EtYzb+%h;4=CF=$78kSNj7B+clTV>Oq04NkleDd}-{QBh> z{QO=de(`)1e)~!^e(_2ksw=Z(|5b>O56AOo3Z=CWidRp^;)81mc<)j?K7J+(Lp=p@ z4FXb|os!%0yq1kv;i31(fYMs8*GlbMu9q%x3K&^O;PT#SrNzoiw0z!g-dA==^7`5A zRu?zhb0ByLorc;>(OApS+)$3z#&T?3TZ1Fp3N@D-{h}FEhp}(#YO+yVm5s{s4CLk{ zYlRRT5+I;T(Ci*QK3-_3NXFJKfleU(lAl0ItSjQ;qLG>$i+vk1P*;(l_nhy5dLGF6 zsih_)#3C(?9u_IMb1X+R-VAeZ@ciXg?A_jiH3O^B++2yOsshBsgzK?0GgHyi)2v<@yEc_#a$^a0Y$(RW zx?)t8C98I?Y3>&?$>kHG(aL)-|DmQV8bfVC=xYilB1-LM?b2z_xt|Tv=wBA$UwnW8Sf2tH~x@TOm@8^3r^1Lg%8m zFh{hM3~6q~AuS~Vz4eiJ^=J@YJ067o8dr@*#+++vZdhhZ#Vs0;6}y49-pCLKBu6Yl ze3S=bqJu?3)eo0;PX={~2=|-%VAv_grf^b17}8@`A~SXg(vyRcksgn9k+igUZPK!% z$n>VqQ#p5%;CJy1J!6KS0Ja(2r1INr)TmnxZfhA=GKR zWt21xk|Q6te&Djsks6|E^-rk{nCl5FHhXh&QgQ$0D9-JS!Nh1jwu$UqSAeSrOHf+G zVb%0U4#d%kbc}Y!ptH3MJ*z83%5iRYA^O?{&T@_RTBvny1wTzBv@6U1RlBCHmusi# zV~O!@AbixbME)1GdRBx>77CDL8?|4vLQ|jQIT}x4=^|UYCIy-Ccja+6j~3(F?g$(m z55k$vj9VOrvy<8I74W7ch2!422E1^#1b0srCdAh{RC?1$j?j1`o0w8Wre90t)>cjXO^nJ_cFxA#~?R1N8Z02 z4G7;@oh)FbzqPUPavSU3TmISfs<7es9AHP2gpe)(Pny5RbOWPImJI9@mwjP$d8+0Ej zGuJDe_u0fidVFNHXuK_W<=#1Vt~~~?^CgnG7r_TV?AwdMq1sX+LI1-so^2`g+>Y+FT>>Eki?{Xg$rfXm6>Nk0k?1 z(%kBjn)~I${&@YU9|mfq2`eBnv02Sv1OwY?jh0PuW;S?kzdx=YEytzfT{wNP6O$8N z*u1eznz5omH|C*KfRiUpxI%e>Crh$$W1t!@429y^1F^VvrXP22Y{R=RZpHhrOyKVI ztvXgBB0`=^4T+%gn`u=at#E((RQb=O`6M2%k+Gz{R=eR97SW7 zZB;XtWlYM+ATQKlsgotadpJuowfMM zv(fncW(YpL7J?5i1>?q{0`-&cXFvTUi^whQvJ(N*J*oqev@H|#F(^-%EEmxroZfuq*UkYHoST_NYFuZ$G% zx}&F7DxG8x#6`LzD%>3rp>9Zs@x{cZUIX4KIWz@gdofV9LD(M3j}U_Prkz;uwV$V~ zAML=%Kr3E*{=#E-GW#Dj-p?4T;jNc&`s5)6FM+5XYg5p*nGFP>7C05aHsD&qAm?Ts z=chsZ&^ESxcr0qx>&FMt-PtNlybR>!Ni(vt46Ut==;>-hg=hw;De>s2iNXtq!tlzm zFs!L{HFn))rkP9aLcvR0puGJ0F$?g{?kU0RC;VlfAl%*?h{*vTRF@^9pdcNUX_5Gj zZ2!r;IrwPq9DFSD*`oRQNM7#uy&N&okq71x+c{o>AKi_|U%irmcW>7rIWb(#1$9;V zxc~eu?NDN;SVn3zu3tNcpZ)Yx{Nm@IOC@$6S<-Z*-BisJBD5FNrt9P5j*t+4gog*I za6UB14N*Z$5gJI?uGHb9jB^k{?~A|{hzwYSsF0QFI~)+;qmazXO2+BKUFfX#)MGP# z0DVY%>cf$p5v>(aSf~%S4$FT|a}g-m?u{IOOJ6kl+cOpHgoSpN*=)Sj!dU?jq)Qgh z)ecJjM>qPq63PNniUI0ewNLZ>ZqD@7pcXt=wx>_>60^M{V^YxEVuIAuT%xvgIVaCe z`|8Pkjrh$garp9ua2+Yg;Ouu!6d^FcOFN!kJe7)9P6XoqkpSG0%Jjm755|WI;pguS zXL;82pC&jd^n)dE2{cbncli2v!q3+mz9Q_@^Y!sk?UJSmHBYFC!c*5<;?E?dLH?oy zlp!lETK)$I>ag{~XDRpD2432DS?RDJz<^gEZ29p@nUz?0m=A6oEyj1RgyHqmL6{tg zLU~!fJV)OtZI|HXwNT^jsrARMHLln{;*LXOjN9vry2=C{9!xtg1L!DtMF{u$iYNu| zaI-Vo%U7YHXa(vDR-ia-De_ZRV)xb#+`f7Uw-vav31Ms}1hGtwW-O2u(W$`J0NN~j zG?)orGqu1wI@pFcUcB_6FgNWnc&*5ZuUK@M`lshN4W5>>I z3Qx;+YiY9vrc$;5%d(msY;abHn=-ezz`J?VTJ-jGpr)=4Z5^HH=;=exnj!QL4xyr= zM8TV%9fyvFWOO$rBO}RAv|E}Mr1@vlbZKVLvGMW}vrPNs>0QNmMKt8+5BlQDb}tMy zI3hKH+D{xx;zRI}fcDEdPpkY~y&Q>g z!K#6Ft**hRpS&;4*dVoaj*WCFa648vp|PO~@4fq)R47Bn{ftdf5w+>cb&U)*$V<2% zZ@#b-uRp&7_n+B@Yo|JJdLkZUy(#eUa74O%>^ru0)r-j zK07Y3_SI2io7Xp>q9{ZGrZz~C>f#6_#Ruz`$Xt$c03Y9|9{@q=d!QI_WplSoHO|1DxP3`9+Bg1g- z?q!UxTO;?#YE{|n)@o{C2uj-P31oYBGII}Ercw|R?5W`W=tj7}Hw5>Ngvs?spu5@~ zbwvS)iVPNQc9A^u81yzpV_T0Gj;!;<(Q!{4TQBn){7_$&sAdsr_Y`Wo^F^y?$7FR` z4Ayo8V5Hp_gRQ<;)9i!Z25MG>sG&i8Te+|YrPl#;CdJ)doH`F0JD-{(b z85r#^!Mee6fpD~Z0Cw?sb;OSWv6gM%JvCX37Z3a5*?qpaw9N~{jgCkNU#d?11nxr0|D4d z173=&lnF=P4=cPN#n>p#HUurTH-bXJEAtizDTIlR&|`C2-KGSna{b&+*AucLW_zARDmmd;= z>@I4R{5#lwXKYY1Kl~pwn^=HlnZgQ>VwJg$$L6t2SV@~J9fvo| zF}a@SN>7W^j2dOdbQw(2X;wy@uH)d9y0S2};kvqrxH_S}zy<3E^VL6?g9O&LdZ9_0 z*hQ&J5Fa{U)80fzg~QL!=POX130O;JF6X|xcC5$nVD}VAc~7+>VaKCXNQ~gd3Xr19 z<-hWp)!ZP@f-Rf?e-DhTsm7k|?U>xwiLIM^uwh)Zz~NT)G0w_Pk^8U;#U(k?@~cO; z0Jvjym3$W!Xl<=TOG^b((-Nc-WlA6;gs+LuYhw0lc@YDr%e?ye8aps6#dRYc0^K7v zu>p7nh^K*UU~4~b58jy7yA9#3r!QI0{#8b6nLe}bNvw&-9$1HE&ydL@a*$4^=!QkjP_8vNpJ%^5A za{poMI&cJg_U^*w4a3+qUV>MT2I95zCNMd{yHa4wsRd#6_Z01eW%`+3*jI?xj{A$& z>xUbY-q_ORit@r3arpD_SduAc{_B*fQ{r6r+m_U*CU21sz zAPJ)l8+!5cw_5S57bEe5XTorMpPvo9W%{velrw@?KAPAVspRCtduD%(#+dk-fcKqC zDToepMrN`Pj!l-LyDd{HlSFl?N)Z|EDMEHeq*h2wez;?88hTseQC3=j(vm_{loev{ z#$t50WGXPU14*VP=7437Hh#UvhnZlR_Uq+(u485luID~lwrx)hobv|E++L35%ucHL zW~lG-xq8nS>p{Ux$jh;Le>jkYHgs2ZzR7hlm3oM@0&=q=Ooe2-H^o`L=xs zwQ}M;b+Bp5<{fdCd(F;1mL25&QD{=I0;Su7cd1+xJy(+DeNIdWLPC5H5=G*rWkyL& z2^ZK8;EoNv)^r-ev%}bE!Pfi?5YHwSh^=`Wj49LLz4V|k@3D<{>i61vA1Qe6-noX8 z$M-9E8KG>eXsiQ+gBTjyfM5RVSNPrU{uY&0RSI7JfI#_J-1LQ5v1*lw1D35=i6zUH zOO3k(3q?vwiq+g;4X_|^6}kklO*U>?kEEmo`1tu_blo_Po;ZnPCr{$=v18bO_^^6c zY}q)1JsZmK+Oa^qem)<4tEFkSk|qX*2qbWs_D7o1%sL_PWtk(wE*~hsTc-lFgYAVw zemK9y3)_1AG1%mX-U<(FkMlsoqIsy9_cZDk%*BpyXPnPifiw9I*dW_%>IufB?P2)d zt~Bcc;p@2^$Byj6<;$m0Sy6{#!B(4*9%nR{i%TT%`-vRzb*oO&56iL36Sew3O^rLt zacNf+whyObVki~6$I@_pe>(cx(!kMm1hfvyUTYLmN|67cHd|RoSgXq% z_m%mXWoo_(5B_fk=Mmt}o5zt>jP)>2v_|8FqVSb%HE8_`f|=$GdQ&hK0k@ILK!9XH zms3^@9`4TC^v@G0A07|Dou{->cj+x%?HIPWi&;Kb$; zbayss{{ii=>`UM^Zy7DZ+vmdY_LY3>*xHU4Z*RrBciZv$?LO?77{JTV?!X84R^#<& z`jDTSp!b-aziOtC{RvuQ7Bl7vD+`4Qlw;;;CZc(P!qIA)DoEZ}dNxc)CtHk$ig2v! z3c#8ce^i$QqoOF(CSjJfLjAsF{4aO={^9IJ&vRNT)1F!+F zF*W36r#yBivwouS{_^7=f2rU-b>bj)O7ov7c(!cWguebh^bU;RR|4L@`@7$%78?{C z0&gE5c?lP2?kDX*7U(WpzEWyn171q8fR~;T3S664gf%pnAf`-AY!NNG6uJ3%7+=3m zmKj$xOH1CpYpXQPMnyv_w}H3dA@CBm)OK}#8OPHb5EHyt4;JFxvjH0P{O!{Lc;jS% z0{Gf?Z=Buef&P{l&`*;uGxuLz9fnim-Z;0x9hbLw;I?SV?+Cb=lAZAw-nc5@jR}^0 z=A)&d6mPz9Uz_!8ID^z zTnxcS*Fy2p%_IzUW*YG7wGpnPOW&qg!VvVvOnwSk$MvD$nU zyzE@#D8i={tn6shcnLNz)5M{EzssHypfCa%y(6BMXKQTJt5&Tv;I#>_kFX{XOA2Ce zerFU;Z4SiVQ9o?y^~TWZNKq0>5fmh?u^B+M%J%bC*?yj$4dZM3(Are3?>OPdDYf1W zgY57O#cO90H2d;%m)GDsm!t5;r7VGU7hbu!Mq@_2do>ODS;2D6996jpNzsld%8S&| zba^>($jgpHZgxE4;usyz0N4VrrQw?S1)B1Qah(^dKkrjIWSIA|y}}8byWP-J?=D(y zu#V)5hzvtibcD2m;<0nvumJWb?utAF-`V8P0oW1?!ZVjCkZs_#i3MJIHRL_E@lO9< zfA6DTe*BYPDKL&7+b_`Fg6#s|&0992x33SKy=(C0mtQJ)D=I4y5EQJYgr$q-VBx%P zV2RYg3SALuyo;9z%tT7dN(7#!bB#lR4R}pQo4vi4o)SBEPKb7FOcC1gW|PSso3UYh z5PPZd9u34R=ZetXUaTM^bS4GB2ABUL`)WL%s~!HokMc;QqoUcXeRk<6~2Y?Y>euz+PDf&<); zot+AAPde()g_p-lLP4F%G?cbt#(m?ik|N{DLLzj`qOzqn_jc>U~ts>YMx|0e*ctuj=i z1x#aVpsmsX*D{lskd-toI81F%;XIqtoaeDPPjiDYO{`M015*uA(^XRfbFkUlfVrM& zkfgF$y2K2R)&UvvT*9OUQBjtP*x0BkX{kxXhS7R;$15pJ!twp9v2SMwc5Z3L&ds#~ z!+LadwShs!?E!1Kld1T6X?EZME|aOcl-ZUC_pUIin)i3E4>wNR3^Egvgahi+91Utvw3eyEkToFUw~6)H;Fg)OtGrPea)bwz}NN z)G|vGwn2E~SSQvFw&AUpEKPymYo09c`sH@J`!!30{7r7I--y z6yS=ez{Mhq5FO?rO}<1F6{e%0AQgGJ$;e2LLwK04Z08O)0fD!tqcqLgSrdw!j7Svc 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 Z_Wp%|^G|L*Ed)@1hWZcn>UA7q{tw{{AZ`Ev literal 0 HcmV?d00001 From 8a59b5c07a15376ff3d005dc7f801bc365ef912d Mon Sep 17 00:00:00 2001 From: Kevin Vertucio Date: Fri, 1 Mar 2013 08:53:04 -0500 Subject: [PATCH 21/39] clean up formatting from review comments Signed-off-by: Kevin Vertucio --- .../plugins/coreplugin/qml/AboutDialog.qml | 46 +++++++++---------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml b/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml index c8574c48b..a1be53bc5 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml +++ b/ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml @@ -41,29 +41,27 @@ import QtQuick 1.1 import QtWebKit 1.0 - // This is a tabbed pane element. Add a nested Rectangle to add a tab. - - TabWidget { - id: tabs - width: 640; height: 480 - // This tab is for the GCS version information - Rectangle { - property string title: "OpenPilot GCS" - anchors.fill: parent - color: "#e3e3e3" - - Rectangle { - anchors.fill: parent; anchors.margins: 20 - color: "#e3e3e3" + // This is a tabbed pane element. Add a nested Rectangle to add a tab. + TabWidget { + id: tabs + width: 640; height: 480 + // This tab is for the GCS version information + Rectangle { + property string title: "OpenPilot GCS" + anchors.fill: parent + color: "#e3e3e3" + + Rectangle { + anchors.fill: parent; anchors.margins: 20 + color: "#e3e3e3" Image { - source: "../images/openpilot_logo_128.png" - x: 0; y: 0 - z: 100 + source: "../images/openpilot_logo_128.png" + x: 0; y: 0; z: 100 fillMode: Image.PreserveAspectFit } Flickable { - anchors.fill: parent - anchors.centerIn: parent + anchors.fill: parent + anchors.centerIn: parent Text { id: versionLabel x: 156; y: 0 @@ -77,7 +75,7 @@ } } } - // This is a stub for the Plugins. + // This is a stub for the Plugins. // Rectangle { // property string title: "Plugins" // anchors.fill: parent @@ -106,8 +104,6 @@ z: 0 url: "../CREDITS.html" anchors { top: parent.top; left: parent.left; right: parent.right; bottom: parent.bottom } - } - } - } - } - + } + } + } \ No newline at end of file From c07142fa53394192cea67c605d297275cf4df417 Mon Sep 17 00:00:00 2001 From: Kevin Vertucio Date: Fri, 1 Mar 2013 08:59:02 -0500 Subject: [PATCH 22/39] fixed some grammatical errors and formatting Signed-off-by: Kevin Vertucio --- ground/openpilotgcs/src/plugins/coreplugin/CREDITS.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/CREDITS.html b/ground/openpilotgcs/src/plugins/coreplugin/CREDITS.html index c80fe5325..06d0e8754 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/CREDITS.html +++ b/ground/openpilotgcs/src/plugins/coreplugin/CREDITS.html @@ -4,9 +4,9 @@ pre { font-family: Helvetica, Arial, "MS Trebuchet", sans-serif; } -

This is a credits file of people that are or have been key contributors to the OpenPilot project.Without the work of the people in this file OpenPilot would not be what it is today.

+

This is a credits file of people that are or have been key contributors to the OpenPilot project. Without the work of the people in this list OpenPilot would not be what it is today.

-

It is sorted alphabetically by name

+

This list is sorted alphabetically by name

Connor Abbott
 David Ankers

From e4d516424e54923c3ac5e298f9c59fb3382d54fb Mon Sep 17 00:00:00 2001
From: Kevin Vertucio 
Date: Fri, 1 Mar 2013 09:10:26 -0500
Subject: [PATCH 23/39] fixed indentation and clean up formatting

Signed-off-by: Kevin Vertucio 
---
 .../src/plugins/coreplugin/authorsdialog.cpp  | 71 +++++++++----------
 1 file changed, 34 insertions(+), 37 deletions(-)

diff --git a/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp b/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp
index 67b3c28f6..2b631fa05 100644
--- a/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp
+++ b/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp
@@ -61,9 +61,9 @@ AuthorsDialog::AuthorsDialog(QWidget *parent)
     setWindowIcon(QIcon(":/core/images/openpilot_logo_32.png"));
     setWindowTitle(tr("About OpenPilot"));
     setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
-	//This loads a QML doc containing a Tabbed view
-   QDeclarativeView *view = new QDeclarativeView(this);
-   view->setSource(QUrl("qrc:/core/qml/AboutDialog.qml"));
+	// This loads a QML doc containing a Tabbed view
+	QDeclarativeView *view = new QDeclarativeView(this);
+	view->setSource(QUrl("qrc:/core/qml/AboutDialog.qml"));
 
 
 
@@ -71,52 +71,49 @@ AuthorsDialog::AuthorsDialog(QWidget *parent)
      version += QDate(2007, 25, 10).toString(Qt::SystemLocaleDate);
  
      QString ideRev;
- #ifdef GCS_REVISION
+#ifdef GCS_REVISION
       //: This gets conditionally inserted as argument %8 into the description string.
       ideRev = tr("From revision %1
").arg(QString::fromLatin1(GCS_REVISION_STR).left(10)); - #endif +#endif #ifdef UAVO_HASH //: This gets conditionally inserted as argument %11 into the description string. QByteArray uavoHashArray; QString uavoHash = QString::fromLatin1(Core::Constants::UAVOSHA1_STR); uavoHash.chop(2); - uavoHash.remove(0,2); - uavoHash=uavoHash.trimmed(); + uavoHash.remove(0, 2); + uavoHash = uavoHash.trimmed(); bool ok; - foreach(QString str,uavoHash.split(",")) - { - uavoHashArray.append(str.toInt(&ok,16)); + foreach(QString str, uavoHash.split(",")) { + uavoHashArray.append(str.toInt(&ok, 16)); } QString gcsUavoHashStr; - foreach(char i, uavoHashArray) - { - gcsUavoHashStr.append(QString::number(i,16).right(2)); + foreach(char i, uavoHashArray) { + gcsUavoHashStr.append(QString::number(i, 16).right(2)); } QString uavoHashStr = gcsUavoHashStr; - #else - QString uavoHashStr = "N/A"; - #endif - - const QString description = tr( - "

OpenPilot Ground Control Station

" - "GCS Revision: %1
" - "UAVO Hash: %2
" - "
" - "Built from %3
" - "Built on %4 at %5
" - "Based on Qt %6 (%7 bit)
" - "
" - "© %8, 2010-%9. All rights reserved.
" - "
" - "This program is free software; you can redistribute it and/or modify
" - "it under the terms of the GNU General Public License as published by
" - "the Free Software Foundation; either version 3 of the License, or
" - "(at your option) any later version.
" - "
" - "The program is provided AS IS with NO WARRANTY OF ANY KIND, " - "INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A " - "PARTICULAR PURPOSE.
" +#else + QString uavoHashStr = "N/A"; +#endif + const QString description = tr( + "

OpenPilot Ground Control Station

" + "GCS Revision: %1
" + "UAVO Hash: %2
" + "
" + "Built from %3
" + "Built on %4 at %5
" + "Based on Qt %6 (%7 bit)
" + "
" + "© %8, 2010-%9. All rights reserved.
" + "
" + "This program is free software; you can redistribute it and/or modify
" + "it under the terms of the GNU General Public License as published by
" + "the Free Software Foundation; either version 3 of the License, or
" + "(at your option) any later version.
" + "
" + "The program is provided AS IS with NO WARRANTY OF ANY KIND, " + "INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A " + "PARTICULAR PURPOSE.
" ).arg( QString::fromLatin1(GCS_REVISION_STR).left(60), // %1 uavoHashStr, // %2 @@ -128,7 +125,7 @@ AuthorsDialog::AuthorsDialog(QWidget *parent) QLatin1String(GCS_AUTHOR), // %8 QLatin1String(GCS_YEAR_STR) // %9 ); - //Expose the version description to the QML doc + // Expose the version description to the QML doc view->rootContext()->setContextProperty("version", description); } From 4c95e5c613d7f4ad7ecbc95b545731c11f727679 Mon Sep 17 00:00:00 2001 From: Kevin Vertucio Date: Fri, 1 Mar 2013 09:13:32 -0500 Subject: [PATCH 24/39] fixed indentation Signed-off-by: Kevin Vertucio --- .../src/plugins/coreplugin/core.qrc | 124 +++++++++--------- .../src/plugins/coreplugin/coreplugin.pro | 2 +- 2 files changed, 63 insertions(+), 63 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/core.qrc b/ground/openpilotgcs/src/plugins/coreplugin/core.qrc index 09041270a..85ca549e6 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/core.qrc +++ b/ground/openpilotgcs/src/plugins/coreplugin/core.qrc @@ -1,67 +1,67 @@ - images/openpilot_logo_256.png - images/openpilot_logo_128.png - images/openpilot_logo_64.png - images/openpilot_logo_32.png - images/clean_pane_small.png - images/clear.png - images/closebutton.png - images/dir.png - images/editcopy.png - images/editcut.png - images/editpaste.png - images/empty14.png - images/filenew.png - images/fileopen.png - images/filesave.png - images/find.png - images/findnext.png - images/inputfield.png - images/inputfield_disabled.png - images/linkicon.png - images/locked.png - images/magnifier.png - images/minus.png - images/next.png - images/panel_button.png - images/panel_button_checked.png - images/panel_button_checked_hover.png - images/panel_button_hover.png - images/panel_button_pressed.png - images/plus.png - images/prev.png - images/pushbutton.png - images/pushbutton_hover.png - images/pushbutton_pressed.png - images/redo.png - images/replace.png - images/reset.png - images/sidebaricon.png - images/splitbutton_horizontal.png - images/statusbar.png - images/undo.png - images/unknownfile.png - images/unlocked.png - images/extension.png - images/darkclosebutton.png - images/pluginicon.png - images/exiticon.png - images/optionsicon.png - images/helpicon.png - images/openpiloticon.png - CREDITS.html - images/ah.png - images/config.png - images/flight.png - images/home.png - images/joystick.png - images/scopes.png - images/world.png - images/cog.png - images/helpicon.svg - images/cpu.png - images/tx-rx.svg + images/openpilot_logo_256.png + images/openpilot_logo_128.png + images/openpilot_logo_64.png + images/openpilot_logo_32.png + images/clean_pane_small.png + images/clear.png + images/closebutton.png + images/dir.png + images/editcopy.png + images/editcut.png + images/editpaste.png + images/empty14.png + images/filenew.png + images/fileopen.png + images/filesave.png + images/find.png + images/findnext.png + images/inputfield.png + images/inputfield_disabled.png + images/linkicon.png + images/locked.png + images/magnifier.png + images/minus.png + images/next.png + images/panel_button.png + images/panel_button_checked.png + images/panel_button_checked_hover.png + images/panel_button_hover.png + images/panel_button_pressed.png + images/plus.png + images/prev.png + images/pushbutton.png + images/pushbutton_hover.png + images/pushbutton_pressed.png + images/redo.png + images/replace.png + images/reset.png + images/sidebaricon.png + images/splitbutton_horizontal.png + images/statusbar.png + images/undo.png + images/unknownfile.png + images/unlocked.png + images/extension.png + images/darkclosebutton.png + images/pluginicon.png + images/exiticon.png + images/optionsicon.png + images/helpicon.png + images/openpiloticon.png + CREDITS.html + images/ah.png + images/config.png + images/flight.png + images/home.png + images/joystick.png + images/scopes.png + images/world.png + images/cog.png + images/helpicon.svg + images/cpu.png + images/tx-rx.svg qml/images/tab.png qml/AboutDialog.qml qml/FlickableWebView.qml diff --git a/ground/openpilotgcs/src/plugins/coreplugin/coreplugin.pro b/ground/openpilotgcs/src/plugins/coreplugin/coreplugin.pro index 62ee7f5f7..56bfce82d 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/coreplugin.pro +++ b/ground/openpilotgcs/src/plugins/coreplugin/coreplugin.pro @@ -2,7 +2,7 @@ TEMPLATE = lib TARGET = Core DEFINES += CORE_LIBRARY QT += declarative \ - xml \ + xml \ network \ script \ svg \ From 9e870e6ae383a6f55b7f0dcb31c1cd39fa3ed2e4 Mon Sep 17 00:00:00 2001 From: Fredrik Arvidsson Date: Sun, 3 Mar 2013 14:17:37 +0100 Subject: [PATCH 25/39] OP-856 Added enabling/disabling of required modules depending on port configuration. Added rules for port configuration. --- .../src/plugins/config/configrevohwwidget.cpp | 118 ++++++++++- .../src/plugins/config/configrevohwwidget.h | 4 +- .../src/plugins/config/configrevohwwidget.ui | 195 +++++++++--------- 3 files changed, 209 insertions(+), 108 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp index 532dc3b48..e383b5221 100644 --- a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp @@ -30,6 +30,8 @@ #include #include #include "hwsettings.h" +#include +#include ConfigRevoHWWidget::ConfigRevoHWWidget(QWidget *parent) : ConfigTaskWidget(parent) @@ -45,6 +47,7 @@ ConfigRevoHWWidget::ConfigRevoHWWidget(QWidget *parent) : ConfigTaskWidget(paren } addApplySaveButtons(m_ui->saveTelemetryToRAM, m_ui->saveTelemetryToSD); + addUAVObjectToWidgetRelation("HwSettings","RM_FlexiPort",m_ui->cbFlexi); addUAVObjectToWidgetRelation("HwSettings","RM_MainPort",m_ui->cbMain); addUAVObjectToWidgetRelation("HwSettings","RM_RcvrPort",m_ui->cbRcvr); @@ -62,6 +65,9 @@ ConfigRevoHWWidget::ConfigRevoHWWidget(QWidget *parent) : ConfigTaskWidget(paren addUAVObjectToWidgetRelation("HwSettings","ComUsbBridgeSpeed",m_ui->cbMainComSpeed); addUAVObjectToWidgetRelation("HwSettings","RadioPort",m_ui->cbModem); + + connect(m_ui->cchwHelp,SIGNAL(clicked()),this,SLOT(openHelp())); + setupCustomCombos(); enableControls(true); populateWidgets(); @@ -86,6 +92,7 @@ void ConfigRevoHWWidget::setupCustomCombos() connect(m_ui->cbFlexi, SIGNAL(currentIndexChanged(int)), this, SLOT(flexiPortChanged(int))); connect(m_ui->cbMain, SIGNAL(currentIndexChanged(int)), this, SLOT(mainPortChanged(int))); + connect(m_ui->cbModem, SIGNAL(currentIndexChanged(int)), this, SLOT(modemPortChanged(int))); } @@ -105,6 +112,39 @@ void ConfigRevoHWWidget::refreshWidgetsValues(UAVObject *obj) flexiPortChanged(0); } +void ConfigRevoHWWidget::updateObjectsFromWidgets() +{ + ConfigTaskWidget::updateObjectsFromWidgets(); + + HwSettings *hwSettings = HwSettings::GetInstance(getObjectManager()); + HwSettings::DataFields data = hwSettings->getData(); + + // If any port is configured to be GPS port, enable GPS module if it is not enabled. + // Otherwise disable GPS module. + if(m_ui->cbFlexi->currentIndex() == HwSettings::RM_FLEXIPORT_GPS || m_ui->cbMain->currentIndex() == HwSettings::RM_MAINPORT_GPS) { + if(data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] != HwSettings::OPTIONALMODULES_ENABLED) { + data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] = HwSettings::OPTIONALMODULES_ENABLED; + } + } + else if(data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] != HwSettings::OPTIONALMODULES_DISABLED) { + data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] = HwSettings::OPTIONALMODULES_DISABLED; + } + + // If any port is configured to be ComBridge port, enable UsbComBridge module if it is not enabled. + // Otherwise disable UsbComBridge module. + if(m_ui->cbFlexi->currentIndex() == HwSettings::RM_FLEXIPORT_COMBRIDGE || m_ui->cbMain->currentIndex() == HwSettings::RM_MAINPORT_COMBRIDGE || + m_ui->cbUSBVCPFunction->currentIndex() == HwSettings::USB_VCPPORT_COMBRIDGE) { + if(data.OptionalModules[HwSettings::OPTIONALMODULES_COMUSBBRIDGE] != HwSettings::OPTIONALMODULES_ENABLED) { + data.OptionalModules[HwSettings::OPTIONALMODULES_COMUSBBRIDGE] = HwSettings::OPTIONALMODULES_ENABLED; + } + } + else if(data.OptionalModules[HwSettings::OPTIONALMODULES_COMUSBBRIDGE] != HwSettings::OPTIONALMODULES_DISABLED) { + data.OptionalModules[HwSettings::OPTIONALMODULES_COMUSBBRIDGE] = HwSettings::OPTIONALMODULES_DISABLED; + } + + hwSettings->setData(data); +} + void ConfigRevoHWWidget::usbTypeChanged(int index) { Q_UNUSED(index); @@ -115,8 +155,30 @@ void ConfigRevoHWWidget::usbTypeChanged(int index) m_ui->lblUSBVCPSpeed->setVisible(!hid); m_ui->cbUSBVCPSpeed->setVisible(!hid); + + if(hid){ + m_ui->cbUSBVCPFunction->setCurrentIndex(HwSettings::USB_VCPPORT_DISABLED); + m_ui->cbUSBHIDFunction->setCurrentIndex(HwSettings::USB_HIDPORT_USBTELEMETRY); + } + else { + m_ui->cbUSBHIDFunction->setCurrentIndex(HwSettings::USB_HIDPORT_DISABLED); + m_ui->cbUSBVCPFunction->setCurrentIndex(HwSettings::USB_VCPPORT_USBTELEMETRY); + } + + if(m_ui->cbFlexi->currentIndex() == HwSettings::RM_FLEXIPORT_COMBRIDGE) { + m_ui->cbFlexi->setCurrentIndex(HwSettings::RM_FLEXIPORT_DISABLED); + } + m_ui->cbFlexi->model()->setData(m_ui->cbFlexi->model()->index(HwSettings::RM_FLEXIPORT_COMBRIDGE, 0), + hid ? QVariant(0) : QVariant(1|32), Qt::UserRole - 1); + + if(m_ui->cbMain->currentIndex() == HwSettings::RM_MAINPORT_COMBRIDGE) { + m_ui->cbMain->setCurrentIndex(HwSettings::RM_MAINPORT_DISABLED); + } + m_ui->cbMain->model()->setData(m_ui->cbMain->model()->index(HwSettings::RM_MAINPORT_COMBRIDGE, 0), + hid ? QVariant(0) : QVariant(1|32), Qt::UserRole - 1); } + void ConfigRevoHWWidget::flexiPortChanged(int index) { Q_UNUSED(index); @@ -126,17 +188,28 @@ void ConfigRevoHWWidget::flexiPortChanged(int index) m_ui->cbFlexiComSpeed->setVisible(false); m_ui->lblFlexiSpeed->setVisible(true); - int value = m_ui->cbFlexi->currentIndex(); - switch(value) + switch(m_ui->cbFlexi->currentIndex()) { case HwSettings::RM_FLEXIPORT_TELEMETRY: m_ui->cbFlexiTelemSpeed->setVisible(true); + if(m_ui->cbMain->currentIndex() == HwSettings::RM_MAINPORT_TELEMETRY) { + m_ui->cbMain->setCurrentIndex(HwSettings::RM_MAINPORT_DISABLED); + } + if(m_ui->cbModem->currentIndex() == HwSettings::RADIOPORT_TELEMETRY) { + m_ui->cbModem->setCurrentIndex(HwSettings::RADIOPORT_DISABLED); + } break; case HwSettings::RM_FLEXIPORT_GPS: m_ui->cbFlexiGPSSpeed->setVisible(true); + if(m_ui->cbMain->currentIndex() == HwSettings::RM_MAINPORT_GPS) { + m_ui->cbMain->setCurrentIndex(HwSettings::RM_MAINPORT_DISABLED); + } break; case HwSettings::RM_FLEXIPORT_COMBRIDGE: m_ui->cbFlexiComSpeed->setVisible(true); + if(m_ui->cbMain->currentIndex() == HwSettings::RM_MAINPORT_COMBRIDGE) { + m_ui->cbMain->setCurrentIndex(HwSettings::RM_MAINPORT_DISABLED); + } break; default: m_ui->lblFlexiSpeed->setVisible(false); @@ -153,17 +226,28 @@ void ConfigRevoHWWidget::mainPortChanged(int index) m_ui->cbMainComSpeed->setVisible(false); m_ui->lblMainSpeed->setVisible(true); - int value = m_ui->cbMain->currentIndex(); - switch(value) + switch(m_ui->cbMain->currentIndex()) { - case HwSettings::RM_FLEXIPORT_TELEMETRY: + case HwSettings::RM_MAINPORT_TELEMETRY: m_ui->cbMainTelemSpeed->setVisible(true); + if(m_ui->cbFlexi->currentIndex() == HwSettings::RM_FLEXIPORT_TELEMETRY) { + m_ui->cbFlexi->setCurrentIndex(HwSettings::RM_FLEXIPORT_DISABLED); + } + if(m_ui->cbModem->currentIndex() == HwSettings::RADIOPORT_TELEMETRY) { + m_ui->cbModem->setCurrentIndex(HwSettings::RADIOPORT_DISABLED); + } break; - case HwSettings::RM_FLEXIPORT_GPS: + case HwSettings::RM_MAINPORT_GPS: m_ui->cbMainGPSSpeed->setVisible(true); + if(m_ui->cbFlexi->currentIndex() == HwSettings::RM_FLEXIPORT_GPS) { + m_ui->cbFlexi->setCurrentIndex(HwSettings::RM_FLEXIPORT_DISABLED); + } break; - case HwSettings::RM_FLEXIPORT_COMBRIDGE: + case HwSettings::RM_MAINPORT_COMBRIDGE: m_ui->cbMainComSpeed->setVisible(true); + if(m_ui->cbFlexi->currentIndex() == HwSettings::RM_FLEXIPORT_COMBRIDGE) { + m_ui->cbFlexi->setCurrentIndex(HwSettings::RM_FLEXIPORT_DISABLED); + } break; default: m_ui->lblMainSpeed->setVisible(false); @@ -171,9 +255,21 @@ void ConfigRevoHWWidget::mainPortChanged(int index) } } -/** - Request telemetry settings from the board - */ -void ConfigRevoHWWidget::refreshValues() +void ConfigRevoHWWidget::modemPortChanged(int index) { + Q_UNUSED(index); + + if(m_ui->cbModem->currentIndex()== HwSettings::RADIOPORT_TELEMETRY) { + if(m_ui->cbMain->currentIndex() == HwSettings::RM_MAINPORT_TELEMETRY) { + m_ui->cbMain->setCurrentIndex(HwSettings::RM_MAINPORT_DISABLED); + } + if(m_ui->cbFlexi->currentIndex() == HwSettings::RM_FLEXIPORT_TELEMETRY) { + m_ui->cbFlexi->setCurrentIndex(HwSettings::RM_FLEXIPORT_DISABLED); + } + } +} + +void ConfigRevoHWWidget::openHelp() +{ + QDesktopServices::openUrl( QUrl("http://wiki.openpilot.org/x/GgDBAQ", QUrl::StrictMode) ); } diff --git a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.h b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.h index 7e4bd4c16..6615411d5 100644 --- a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.h +++ b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.h @@ -51,12 +51,14 @@ private: protected slots: void refreshWidgetsValues(UAVObject * obj = NULL); + void updateObjectsFromWidgets(); private slots: - virtual void refreshValues(); void usbTypeChanged(int index); void flexiPortChanged(int index); void mainPortChanged(int index); + void modemPortChanged(int index); + void openHelp(); }; diff --git a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui index 6814108c9..b78c40975 100644 --- a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui +++ b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui @@ -93,6 +93,9 @@ + + border-color: rgb(255, 0, 0); + QFrame::NoFrame @@ -107,106 +110,14 @@ 0 0 - 806 - 654 + 810 + 665 12 - - - - Qt::Vertical - - - - 20 - 25 - - - - - - - - - 0 - 0 - - - - - 500 - 0 - - - - - 500 - 16777215 - - - - - 75 - true - - - - Changes on this page only take effect after board reset or power cycle - - - Qt::AlignCenter - - - true - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 10 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -260,7 +171,7 @@ - Function + USB Function Qt::AlignBottom|Qt::AlignHCenter @@ -368,7 +279,7 @@ - USB Type + USB Port Qt::AlignBottom|Qt::AlignHCenter @@ -602,6 +513,98 @@ + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + 75 + true + + + + Changes on this page only take effect after board reset or power cycle + + + Qt::AlignCenter + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + From e2e3089cf56b36b2bc5cb236f79af780d816f1bd Mon Sep 17 00:00:00 2001 From: Fredrik Arvidsson Date: Sun, 3 Mar 2013 16:56:52 +0100 Subject: [PATCH 26/39] OP-864 Made OpenPilotGCS.xml the default configuration on first start. If this file is missing for some reason the selection dialog will appear. The configuration can also be set as a command line option. --- .../src/plugins/coreplugin/mainwindow.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp index 000156d70..d21fe199d 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp @@ -91,6 +91,7 @@ using namespace Core; using namespace Core::Internal; static const char *uriListMimeFormatC = "text/uri-list"; +static const char *DEFAULT_CONFIG_FILENAME = "OpenPilotGCS.xml"; enum { debugMainWindow = 0 }; @@ -289,17 +290,17 @@ void MainWindow::extensionsInitialized() directory.cd("default_configurations"); qDebug() << "Looking for default config files in: " + directory.absolutePath(); - bool showDialog = true; + QString filename; if(!commandLine.isEmpty()) { if(QFile::exists(directory.absolutePath() + QDir::separator()+commandLine)) { filename = directory.absolutePath() + QDir::separator()+commandLine; qDebug() << "Load configuration from command line"; settings = new QSettings(filename, XmlConfig::XmlSettingsFormat); - showDialog = false; } - } - if(showDialog) { + } + if(!QFile::exists(directory.absolutePath() + QDir::separator() + DEFAULT_CONFIG_FILENAME)) { + qDebug() << "Default config file " << directory.absolutePath() << QDir::separator() << DEFAULT_CONFIG_FILENAME << " was not found."; importSettings *dialog = new importSettings(this); dialog->loadFiles(directory.absolutePath()); dialog->exec(); @@ -307,6 +308,11 @@ void MainWindow::extensionsInitialized() settings = new QSettings(filename, XmlConfig::XmlSettingsFormat); delete dialog; } + else { + qDebug() << "Default config file " << directory.absolutePath() << QDir::separator() << DEFAULT_CONFIG_FILENAME << " was not loaded."; + settings = new QSettings(directory.absolutePath() + QDir::separator() + + DEFAULT_CONFIG_FILENAME, XmlConfig::XmlSettingsFormat); + } qs = settings; qDebug() << "Load default config from resource " << filename; } From 4791f690ad6317c88add20a9239dfd3c3344c691 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sun, 3 Mar 2013 20:05:27 +0100 Subject: [PATCH 27/39] OP-848 Move the handling of the UAVO configuration outside of the PiOS layer a configuration helper header has been added to eliminate a lot of boilerplate code in *pios_board.c --- flight/CopterControl/System/pios_board.c | 8 +- flight/PiOS/Common/pios_mpu6000.c | 154 ++++++----------------- flight/PiOS/inc/pios_mpu6000.h | 4 +- flight/PiOS/inc/pios_mpu6000_config.h | 72 +++++++++++ flight/RevoMini/System/pios_board.c | 8 +- flight/Revolution/System/pios_board.c | 8 +- 6 files changed, 126 insertions(+), 128 deletions(-) create mode 100644 flight/PiOS/inc/pios_mpu6000_config.h diff --git a/flight/CopterControl/System/pios_board.c b/flight/CopterControl/System/pios_board.c index 210d109b5..e3eb5826b 100644 --- a/flight/CopterControl/System/pios_board.c +++ b/flight/CopterControl/System/pios_board.c @@ -79,6 +79,7 @@ uint32_t pios_usb_rctx_id; */ #if defined(PIOS_INCLUDE_MPU6000) #include "pios_mpu6000.h" +#include "pios_mpu6000_config.h" static const struct pios_exti_cfg pios_exti_mpu6000_cfg __exti_config = { .vector = PIOS_MPU6000_IRQHandler, .line = EXTI_Line3, @@ -119,9 +120,9 @@ static const struct pios_mpu6000_cfg pios_mpu6000_cfg = { .interrupt_en = PIOS_MPU6000_INTEN_DATA_RDY, .User_ctl = PIOS_MPU6000_USERCTL_FIFO_EN | PIOS_MPU6000_USERCTL_DIS_I2C, .Pwr_mgmt_clk = PIOS_MPU6000_PWRMGMT_PLL_X_CLK, - .accel_range = PIOS_MPU6000_ACCEL_FROM_SETTINGS, - .gyro_range = PIOS_MPU6000_SCALE_FROM_SETTINGS, - .filter = PIOS_MPU6000_LOWPASS_FROM_SETTINGS, + .accel_range = PIOS_MPU6000_ACCEL_8G, + .gyro_range = PIOS_MPU6000_SCALE_2000_DEG, + .filter = PIOS_MPU6000_LOWPASS_256_HZ, .orientation = PIOS_MPU6000_TOP_180DEG }; #endif /* PIOS_INCLUDE_MPU6000 */ @@ -819,6 +820,7 @@ void PIOS_Board_Init(void) { PIOS_Assert(0); } PIOS_MPU6000_Init(pios_spi_gyro_id,0,&pios_mpu6000_cfg); + PIOS_MPU6000_CONFIG_Configure(); init_test = PIOS_MPU6000_Test(); #endif /* PIOS_INCLUDE_MPU6000 */ diff --git a/flight/PiOS/Common/pios_mpu6000.c b/flight/PiOS/Common/pios_mpu6000.c index 5ba47685a..9ccbb644e 100644 --- a/flight/PiOS/Common/pios_mpu6000.c +++ b/flight/PiOS/Common/pios_mpu6000.c @@ -31,7 +31,6 @@ /* Project Includes */ #include "pios.h" -#include "mpu6000settings.h" #if defined(PIOS_INCLUDE_MPU6000) #include "fifo_buffer.h" @@ -50,6 +49,7 @@ struct mpu6000_dev { const struct pios_mpu6000_cfg * cfg; enum pios_mpu6000_range gyro_range; enum pios_mpu6000_accel_range accel_range; + enum pios_mpu6000_filter filter; enum pios_mpu6000_dev_magic magic; }; @@ -64,10 +64,6 @@ static void PIOS_MPU6000_Config(struct pios_mpu6000_cfg const * cfg); static int32_t PIOS_MPU6000_SetReg(uint8_t address, uint8_t buffer); static int32_t PIOS_MPU6000_GetReg(uint8_t address); -static uint8_t getGyroRange(enum pios_mpu6000_range range); -static uint8_t getAccelRange(enum pios_mpu6000_accel_range accel); -static uint8_t getFilterSetting(enum pios_mpu6000_filter filter); - #define DEG_TO_RAD (M_PI / 180.0) #define GRAV 9.81f @@ -143,9 +139,6 @@ static void PIOS_MPU6000_Config(struct pios_mpu6000_cfg const * cfg) PIOS_MPU6000_Test(); - //initialize settings for acc/gyro Scale and filter - Mpu6000SettingsInitialize(); - // Reset chip while (PIOS_MPU6000_SetReg(PIOS_MPU6000_PWR_MGMT_REG, PIOS_MPU6000_PWRMGMT_IMU_RST) != 0); PIOS_DELAY_WaitmS(300); @@ -173,29 +166,11 @@ static void PIOS_MPU6000_Config(struct pios_mpu6000_cfg const * cfg) // FIFO storage #if defined(PIOS_MPU6000_ACCEL) - // Set the accel range - dev->accel_range = getAccelRange(cfg->accel_range); - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_ACCEL_CFG_REG, dev->accel_range) != 0); - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_FIFO_EN_REG, cfg->Fifo_store | PIOS_MPU6000_ACCEL_OUT) != 0); #else while (PIOS_MPU6000_SetReg(PIOS_MPU6000_FIFO_EN_REG, cfg->Fifo_store) != 0); #endif - // Digital low-pass filter - uint8_t filterSetting; - filterSetting = getFilterSetting(cfg->filter); - - // Sample rate divider, chosen upon digital filtering settings - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_SMPLRT_DIV_REG, - filterSetting == PIOS_MPU6000_LOWPASS_256_HZ ? - cfg->Smpl_rate_div_no_dlp : cfg->Smpl_rate_div_dlp) != 0); - - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_DLPF_CFG_REG, filterSetting) != 0); - - // Gyro range - dev->gyro_range = getGyroRange(cfg->gyro_range); - while (PIOS_MPU6000_SetReg(PIOS_MPU6000_GYRO_CFG_REG, dev->gyro_range) != 0); - + PIOS_MPU6000_ConfigureRanges(cfg->gyro_range, cfg->accel_range, cfg->filter); // Interrupt configuration while (PIOS_MPU6000_SetReg(PIOS_MPU6000_USER_CTRL_REG, cfg->User_ctl) != 0) ; @@ -212,6 +187,42 @@ static void PIOS_MPU6000_Config(struct pios_mpu6000_cfg const * cfg) mpu6000_configured = true; } +/** + * @brief Configures Gyro, accel and Filter ranges/setings + * @return 0 if successful, -1 if device has not been initialized + */ +int32_t PIOS_MPU6000_ConfigureRanges( + enum pios_mpu6000_range gyroRange, + enum pios_mpu6000_accel_range accelRange, + enum pios_mpu6000_filter filterSetting + ) +{ + if(dev == NULL) + return -1; + PIOS_SPI_SetClockSpeed(dev->spi_id, PIOS_SPI_PRESCALER_256); + // update filter settings + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_DLPF_CFG_REG, filterSetting) != 0); + + // Sample rate divider, chosen upon digital filtering settings + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_SMPLRT_DIV_REG, + filterSetting == PIOS_MPU6000_LOWPASS_256_HZ ? + dev->cfg->Smpl_rate_div_no_dlp : dev->cfg->Smpl_rate_div_dlp) != 0); + + dev->filter = filterSetting; + + // Gyro range + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_GYRO_CFG_REG, gyroRange) != 0); + + dev->gyro_range = gyroRange; +#if defined(PIOS_MPU6000_ACCEL) + // Set the accel range + while (PIOS_MPU6000_SetReg(PIOS_MPU6000_ACCEL_CFG_REG, accelRange) != 0); + + dev->accel_range = accelRange; +#endif + PIOS_SPI_SetClockSpeed(dev->spi_id, PIOS_SPI_PRESCALER_16); + return 0; +} /** * @brief Claim the SPI bus for the accel communications and select this chip @@ -350,7 +361,6 @@ float PIOS_MPU6000_GetScale() return 1.0f / 65.5f; case PIOS_MPU6000_SCALE_1000_DEG: return 1.0f / 32.8f; - case PIOS_MPU6000_SCALE_FROM_SETTINGS: case PIOS_MPU6000_SCALE_2000_DEG: return 1.0f / 16.4f; } @@ -365,7 +375,6 @@ float PIOS_MPU6000_GetAccelScale() case PIOS_MPU6000_ACCEL_4G: return GRAV / 8192.0f; case PIOS_MPU6000_ACCEL_8G: - case PIOS_MPU6000_ACCEL_FROM_SETTINGS: return GRAV / 4096.0f; case PIOS_MPU6000_ACCEL_16G: return GRAV / 2048.0f; @@ -542,93 +551,6 @@ bool PIOS_MPU6000_IRQHandler(void) return xHigherPriorityTaskWoken == pdTRUE; } -/** - * @brief Return the gyro range setting based on config and/or mpu6000settings. - * \return the chosen gyro range - */ -static uint8_t getGyroRange(enum pios_mpu6000_range gyro) -{ - // if the setting is overridden by the board config then use the board value - if (gyro != PIOS_MPU6000_SCALE_FROM_SETTINGS) - return(uint8_t) gyro; - - uint8_t gyroSettings; - Mpu6000SettingsGyroScaleGet(&gyroSettings); - - switch (gyroSettings) { - case MPU6000SETTINGS_GYROSCALE_SCALE_250: - return PIOS_MPU6000_SCALE_250_DEG; - case MPU6000SETTINGS_GYROSCALE_SCALE_500: - return PIOS_MPU6000_SCALE_500_DEG; - case MPU6000SETTINGS_GYROSCALE_SCALE_1000: - return PIOS_MPU6000_SCALE_1000_DEG; - case MPU6000SETTINGS_GYROSCALE_SCALE_2000: - return PIOS_MPU6000_SCALE_2000_DEG; - default: - return PIOS_MPU6000_SCALE_2000_DEG; - } -} - -/** - * @brief Return the accel range setting based on config and/or mpu6000settings. - * \return the chosen accel range - */ -static uint8_t getAccelRange(enum pios_mpu6000_accel_range accel) -{ - // if the setting is overridden by the board config then use the board value - if (accel != PIOS_MPU6000_ACCEL_FROM_SETTINGS) - return (uint8_t) accel; - - uint8_t accelSetting; - Mpu6000SettingsAccelScaleGet(&accelSetting); - - switch (accelSetting) { - case MPU6000SETTINGS_ACCELSCALE_SCALE_2G: - return PIOS_MPU6000_ACCEL_2G; - case MPU6000SETTINGS_ACCELSCALE_SCALE_4G: - return PIOS_MPU6000_ACCEL_4G; - case MPU6000SETTINGS_ACCELSCALE_SCALE_8G: - return PIOS_MPU6000_ACCEL_8G; - case MPU6000SETTINGS_ACCELSCALE_SCALE_16G: - return PIOS_MPU6000_ACCEL_16G; - default: - return PIOS_MPU6000_ACCEL_8G; - } -} - -/** - * @brief Return the filter settings based on config and/or mpu6000settings. - * \return the chosen filter settings - */ -static uint8_t getFilterSetting(enum pios_mpu6000_filter filter) -{ - // if the setting is overridden by the board config then use the board value - if (filter != PIOS_MPU6000_LOWPASS_FROM_SETTINGS) - return(uint8_t) filter; - - uint8_t filterSetting; - Mpu6000SettingsFilterSettingGet(&filterSetting); - - switch (filterSetting) { - case MPU6000SETTINGS_FILTERSETTING_LOWPASS_256_HZ: - return PIOS_MPU6000_LOWPASS_256_HZ; - case MPU6000SETTINGS_FILTERSETTING_LOWPASS_188_HZ: - return PIOS_MPU6000_LOWPASS_188_HZ; - case MPU6000SETTINGS_FILTERSETTING_LOWPASS_98_HZ: - return PIOS_MPU6000_LOWPASS_98_HZ; - case MPU6000SETTINGS_FILTERSETTING_LOWPASS_42_HZ: - return PIOS_MPU6000_LOWPASS_42_HZ; - case MPU6000SETTINGS_FILTERSETTING_LOWPASS_20_HZ: - return PIOS_MPU6000_LOWPASS_20_HZ; - case MPU6000SETTINGS_FILTERSETTING_LOWPASS_10_HZ: - return PIOS_MPU6000_LOWPASS_10_HZ; - case MPU6000SETTINGS_FILTERSETTING_LOWPASS_5_HZ: - return PIOS_MPU6000_LOWPASS_5_HZ; - default: - return PIOS_MPU6000_LOWPASS_256_HZ; - } -} - #endif /** diff --git a/flight/PiOS/inc/pios_mpu6000.h b/flight/PiOS/inc/pios_mpu6000.h index 6d92ada51..6f5e6772a 100644 --- a/flight/PiOS/inc/pios_mpu6000.h +++ b/flight/PiOS/inc/pios_mpu6000.h @@ -102,7 +102,6 @@ #define PIOS_MPU6000_PWRMGMT_STOP_CLK 0X07 enum pios_mpu6000_range { - PIOS_MPU6000_SCALE_FROM_SETTINGS = 0xFF, PIOS_MPU6000_SCALE_250_DEG = 0x00, PIOS_MPU6000_SCALE_500_DEG = 0x08, PIOS_MPU6000_SCALE_1000_DEG = 0x10, @@ -110,7 +109,6 @@ enum pios_mpu6000_range { }; enum pios_mpu6000_filter { - PIOS_MPU6000_LOWPASS_FROM_SETTINGS = 0xFF, PIOS_MPU6000_LOWPASS_256_HZ = 0x00, PIOS_MPU6000_LOWPASS_188_HZ = 0x01, PIOS_MPU6000_LOWPASS_98_HZ = 0x02, @@ -121,7 +119,6 @@ enum pios_mpu6000_filter { }; enum pios_mpu6000_accel_range { - PIOS_MPU6000_ACCEL_FROM_SETTINGS = 0xFF, PIOS_MPU6000_ACCEL_2G = 0x00, PIOS_MPU6000_ACCEL_4G = 0x08, PIOS_MPU6000_ACCEL_8G = 0x10, @@ -167,6 +164,7 @@ struct pios_mpu6000_cfg { /* Public Functions */ extern int32_t PIOS_MPU6000_Init(uint32_t spi_id, uint32_t slave_num, const struct pios_mpu6000_cfg * new_cfg); +extern int32_t PIOS_MPU6000_ConfigureRanges(enum pios_mpu6000_range gyroRange, enum pios_mpu6000_accel_range accelRange,enum pios_mpu6000_filter filterSetting); extern xQueueHandle PIOS_MPU6000_GetQueue(); extern int32_t PIOS_MPU6000_ReadGyros(struct pios_mpu6000_data * buffer); extern int32_t PIOS_MPU6000_ReadID(); diff --git a/flight/PiOS/inc/pios_mpu6000_config.h b/flight/PiOS/inc/pios_mpu6000_config.h new file mode 100644 index 000000000..f75ca0f7f --- /dev/null +++ b/flight/PiOS/inc/pios_mpu6000_config.h @@ -0,0 +1,72 @@ +/** + ****************************************************************************** + * @addtogroup PIOS PIOS Core hardware abstraction layer + * @{ + * @addtogroup PIOS_MPU6000 OpenPilot layer configuration utilities + * @brief provides mpu6000 configuration helpers function + * @{ + * + * @file PIOS_MPU6000_CONFIG.h + * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2013. + * @brief MPU6000 3-axis gyor function headers + * @see The GNU Public License (GPL) Version 3 + * + ****************************************************************************** + */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef PIOS_MPU6000_CONFIG_H +#define PIOS_MPU6000_CONFIG_H + +#include "mpu6000settings.h" +#include "pios_mpu6000.h" + +#define PIOS_MPU6000_CONFIG_MAP_GYROSCALE(x) (x == MPU6000SETTINGS_GYROSCALE_SCALE_250 ? PIOS_MPU6000_SCALE_250_DEG : \ + x == MPU6000SETTINGS_GYROSCALE_SCALE_500 ? PIOS_MPU6000_SCALE_500_DEG : \ + x == MPU6000SETTINGS_GYROSCALE_SCALE_1000 ? PIOS_MPU6000_SCALE_1000_DEG : \ + PIOS_MPU6000_SCALE_2000_DEG) + +#define PIOS_MPU6000_CONFIG_MAP_ACCELSCALE(x) (x == MPU6000SETTINGS_ACCELSCALE_SCALE_2G ? PIOS_MPU6000_ACCEL_2G : \ + x == MPU6000SETTINGS_ACCELSCALE_SCALE_4G ? PIOS_MPU6000_ACCEL_4G : \ + x == MPU6000SETTINGS_ACCELSCALE_SCALE_16G ? PIOS_MPU6000_ACCEL_16G : \ + PIOS_MPU6000_ACCEL_8G) + +#define PIOS_MPU6000_CONFIG_MAP_FILTERSETTING(x) (x == MPU6000SETTINGS_FILTERSETTING_LOWPASS_188_HZ ? PIOS_MPU6000_LOWPASS_188_HZ : \ + x == MPU6000SETTINGS_FILTERSETTING_LOWPASS_98_HZ ? PIOS_MPU6000_LOWPASS_98_HZ : \ + x == MPU6000SETTINGS_FILTERSETTING_LOWPASS_42_HZ ? PIOS_MPU6000_LOWPASS_42_HZ : \ + x == MPU6000SETTINGS_FILTERSETTING_LOWPASS_20_HZ ? PIOS_MPU6000_LOWPASS_20_HZ : \ + x == MPU6000SETTINGS_FILTERSETTING_LOWPASS_10_HZ ? PIOS_MPU6000_LOWPASS_10_HZ : \ + x == MPU6000SETTINGS_FILTERSETTING_LOWPASS_5_HZ ? PIOS_MPU6000_LOWPASS_5_HZ : \ + PIOS_MPU6000_LOWPASS_256_HZ) +/** + * @brief Updates MPU6000 config based on Mpu6000Settings UAVO + * @returns 0 if succeed or -1 otherwise + */ +int32_t PIOS_MPU6000_CONFIG_Configure() +{ + Mpu6000SettingsInitialize(); + Mpu6000SettingsData mpu6000settings; + Mpu6000SettingsGet(&mpu6000settings); + return PIOS_MPU6000_ConfigureRanges( + PIOS_MPU6000_CONFIG_MAP_GYROSCALE (mpu6000settings.GyroScale), + PIOS_MPU6000_CONFIG_MAP_ACCELSCALE(mpu6000settings.AccelScale), + PIOS_MPU6000_CONFIG_MAP_FILTERSETTING(mpu6000settings.FilterSetting) + ); +} + +#endif /* PIOS_MPU6000_CONFIG_H */ + diff --git a/flight/RevoMini/System/pios_board.c b/flight/RevoMini/System/pios_board.c index 68aec9ff8..380f5fe59 100644 --- a/flight/RevoMini/System/pios_board.c +++ b/flight/RevoMini/System/pios_board.c @@ -141,6 +141,7 @@ static const struct pios_ms5611_cfg pios_ms5611_cfg = { */ #if defined(PIOS_INCLUDE_MPU6000) #include "pios_mpu6000.h" +#include "pios_mpu6000_config.h" static const struct pios_exti_cfg pios_exti_mpu6000_cfg __exti_config = { .vector = PIOS_MPU6000_IRQHandler, .line = EXTI_Line4, @@ -183,9 +184,9 @@ static const struct pios_mpu6000_cfg pios_mpu6000_cfg = { .interrupt_en = PIOS_MPU6000_INTEN_DATA_RDY, .User_ctl = PIOS_MPU6000_USERCTL_FIFO_EN | PIOS_MPU6000_USERCTL_DIS_I2C, .Pwr_mgmt_clk = PIOS_MPU6000_PWRMGMT_PLL_X_CLK, - .accel_range = PIOS_MPU6000_ACCEL_FROM_SETTINGS, - .gyro_range = PIOS_MPU6000_SCALE_FROM_SETTINGS, - .filter = PIOS_MPU6000_LOWPASS_FROM_SETTINGS, + .accel_range = PIOS_MPU6000_ACCEL_8G, + .gyro_range = PIOS_MPU6000_SCALE_2000_DEG, + .filter = PIOS_MPU6000_LOWPASS_256_HZ, .orientation = PIOS_MPU6000_TOP_180DEG }; #endif /* PIOS_INCLUDE_MPU6000 */ @@ -732,6 +733,7 @@ void PIOS_Board_Init(void) { #if defined(PIOS_INCLUDE_MPU6000) PIOS_MPU6000_Init(pios_spi_gyro_id,0, &pios_mpu6000_cfg); + PIOS_MPU6000_CONFIG_Configure(); #endif } diff --git a/flight/Revolution/System/pios_board.c b/flight/Revolution/System/pios_board.c index 45a9a08f8..6f61c6625 100644 --- a/flight/Revolution/System/pios_board.c +++ b/flight/Revolution/System/pios_board.c @@ -182,6 +182,7 @@ static const struct pios_bma180_cfg pios_bma180_cfg = { */ #if defined(PIOS_INCLUDE_MPU6000) #include "pios_mpu6000.h" +#include "pios_mpu6000_config.h" static const struct pios_exti_cfg pios_exti_mpu6000_cfg __exti_config = { .vector = PIOS_MPU6000_IRQHandler, .line = EXTI_Line8, @@ -224,9 +225,9 @@ static const struct pios_mpu6000_cfg pios_mpu6000_cfg = { .interrupt_en = PIOS_MPU6000_INTEN_DATA_RDY, .User_ctl = PIOS_MPU6000_USERCTL_FIFO_EN | PIOS_MPU6000_USERCTL_DIS_I2C, .Pwr_mgmt_clk = PIOS_MPU6000_PWRMGMT_PLL_X_CLK, - .accel_range = PIOS_MPU6000_ACCEL_FROM_SETTINGS, - .gyro_range = PIOS_MPU6000_SCALE_FROM_SETTINGS, - .filter = PIOS_MPU6000_LOWPASS_FROM_SETTINGS, + .accel_range = PIOS_MPU6000_ACCEL_8G, + .gyro_range = PIOS_MPU6000_SCALE_2000_DEG, + .filter = PIOS_MPU6000_LOWPASS_256_HZ, .orientation = PIOS_MPU6000_TOP_0DEG }; #endif /* PIOS_INCLUDE_MPU6000 */ @@ -874,6 +875,7 @@ void PIOS_Board_Init(void) { case 0x02: #if defined(PIOS_INCLUDE_MPU6000) PIOS_MPU6000_Init(pios_spi_gyro_id,0, &pios_mpu6000_cfg); + PIOS_MPU6000_CONFIG_Configure(); #endif break; default: From 2f3493f4b8982864e7b553a7e2a65789164ddc7d Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sun, 3 Mar 2013 21:45:29 +0100 Subject: [PATCH 28/39] OP848 Fixes typos on header files comments --- flight/PiOS/inc/pios_mpu6000.h | 2 +- flight/PiOS/inc/pios_mpu6000_config.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/flight/PiOS/inc/pios_mpu6000.h b/flight/PiOS/inc/pios_mpu6000.h index 6f5e6772a..1be368575 100644 --- a/flight/PiOS/inc/pios_mpu6000.h +++ b/flight/PiOS/inc/pios_mpu6000.h @@ -8,7 +8,7 @@ * * @file PIOS_MPU6000.h * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012. - * @brief MPU6000 3-axis gyor function headers + * @brief MPU6000 3-axis gyro function headers * @see The GNU Public License (GPL) Version 3 * ****************************************************************************** diff --git a/flight/PiOS/inc/pios_mpu6000_config.h b/flight/PiOS/inc/pios_mpu6000_config.h index f75ca0f7f..59e355c9a 100644 --- a/flight/PiOS/inc/pios_mpu6000_config.h +++ b/flight/PiOS/inc/pios_mpu6000_config.h @@ -8,7 +8,7 @@ * * @file PIOS_MPU6000_CONFIG.h * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2013. - * @brief MPU6000 3-axis gyor function headers + * @brief MPU6000 UAVO-based configuration functions * @see The GNU Public License (GPL) Version 3 * ****************************************************************************** From 99ae18990e54ff8941a656084f0c75076019d2a8 Mon Sep 17 00:00:00 2001 From: Fredrik Arvidsson Date: Mon, 4 Mar 2013 08:04:55 +0100 Subject: [PATCH 29/39] OP-856 Removed redundant code. Changed image of Revolution board to one with white PCB. --- .../src/plugins/config/configrevohwwidget.cpp | 12 ++++-------- .../plugins/config/images/revolution_top.png | Bin 157186 -> 182625 bytes 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp index e383b5221..52b03f926 100644 --- a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp @@ -122,11 +122,9 @@ void ConfigRevoHWWidget::updateObjectsFromWidgets() // If any port is configured to be GPS port, enable GPS module if it is not enabled. // Otherwise disable GPS module. if(m_ui->cbFlexi->currentIndex() == HwSettings::RM_FLEXIPORT_GPS || m_ui->cbMain->currentIndex() == HwSettings::RM_MAINPORT_GPS) { - if(data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] != HwSettings::OPTIONALMODULES_ENABLED) { - data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] = HwSettings::OPTIONALMODULES_ENABLED; - } + data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] = HwSettings::OPTIONALMODULES_ENABLED; } - else if(data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] != HwSettings::OPTIONALMODULES_DISABLED) { + else { data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] = HwSettings::OPTIONALMODULES_DISABLED; } @@ -134,11 +132,9 @@ void ConfigRevoHWWidget::updateObjectsFromWidgets() // Otherwise disable UsbComBridge module. if(m_ui->cbFlexi->currentIndex() == HwSettings::RM_FLEXIPORT_COMBRIDGE || m_ui->cbMain->currentIndex() == HwSettings::RM_MAINPORT_COMBRIDGE || m_ui->cbUSBVCPFunction->currentIndex() == HwSettings::USB_VCPPORT_COMBRIDGE) { - if(data.OptionalModules[HwSettings::OPTIONALMODULES_COMUSBBRIDGE] != HwSettings::OPTIONALMODULES_ENABLED) { - data.OptionalModules[HwSettings::OPTIONALMODULES_COMUSBBRIDGE] = HwSettings::OPTIONALMODULES_ENABLED; - } + data.OptionalModules[HwSettings::OPTIONALMODULES_COMUSBBRIDGE] = HwSettings::OPTIONALMODULES_ENABLED; } - else if(data.OptionalModules[HwSettings::OPTIONALMODULES_COMUSBBRIDGE] != HwSettings::OPTIONALMODULES_DISABLED) { + else { data.OptionalModules[HwSettings::OPTIONALMODULES_COMUSBBRIDGE] = HwSettings::OPTIONALMODULES_DISABLED; } diff --git a/ground/openpilotgcs/src/plugins/config/images/revolution_top.png b/ground/openpilotgcs/src/plugins/config/images/revolution_top.png index 633c424dfbe49ec5b8bdb963f54ad74416fa537f..a98e7e3773a8dc02e91aec7f5eaf0439c9436ae6 100644 GIT binary patch literal 182625 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%0DW!@A|B z*t9MgYgeTqCrK0G0eWJF&Aa-^zCQzHh%49B#b!U+SHmA!@C)iocgTB@*1bW*bz}o^Q`mG@{D+s%YzM$URJz4oaDVl()9S<=Zu1s28&#dbu9Gr`xEUb7WKg50pWB@er{)e~^* z$m!M*a97~)zE%Qm8;t`TJ-WhEto$OIjI(Cu5my|lN&l)-LYYH0Jip&qOXts*92XT?Xos) z;!s76056w~?+-O_oR`2`Q=3HwC>49AFCcLjVFn*h2l_nNBfy_iwR#bFBT!n9fHG2PzN8Xz)bCU2JH?NW zM`L*?_O3M{8NS)R)_bcAL;wALy2U)+7e5|5c^sQJt|9Oil8S|66|2(-pe%Wx7e&+% zP+8)JnGCG#Y6V~gcxBVaS-D6c=V8COVX$YXN(Lt)rto9G%GR5RBRJ zdU`mcI6o4XPB!4yr8X%aFW+3d)hlAV_ipSE(7jEdx(!TqXdY!Joc7L1SFhl8ark8$JtB%<|PiJiVHMM;F5I=zJLN zoe9B>V*$8)&=2SL`r_h|L;`;ofpVvqK6d)lW*j+0myP6LRy8LeJ6RjC93G&*i4`3c zgrf&rafiO}5AN<23ppM?JdCH04&%ksqj>)G1Rgy&MEeNDclYDQ6}lYV;)0!>);P4g z5PNr&p}Eo+2@(1PCP%S~$;EaqU8buLXf5f|&jmit^I&bJ3U5zq+Urskf(eHDl-&L3sj^*_kNKOcZzppd8yQ;|1uEz0$ zt4KU`Zxv1->maQo*mmLqU2$AFzZq9AbmQ8^9^Aazi`&DC>PEf_xqg+k8&@uG7mIHACK|6a+q-84*0#8z zrbq_~kt$fcXvVOxW$~PBZs*UNfwX8<)a0pSMLAt|SLt9?qZPV0iGa7o9ixq8~ zH%pFJ9^-9mFGEvPA(k)Cr|%lCddwlmn}O1@RC2sY$jXi*V-zV1GlU~iz&AuFAu*KR z%Mkh>1|f-*oDhtx)CgqLv6*yidQvFTNSQR2l@>{kHXh~loaF>`R#^dy04jrVzr?<` z$K;PwR8v(rj&3v~8UMVe%V&!WL;wALqy-c&!~zPA@s^eph{Y4^Xa#(Q6dAC^Ox_xHClC|6aM5O}i@7aIXLSDu6DEN)zdh4>>b zCXCL!-thKvCAh@n%IRj@xza%{cPl}6yI8TtH`Jco+l9OI#kzNMCmz$6=<_EB@Wqq; zcuBDR>WkB)Q+Q2o_bUP~1D6Y1e#aGs39x_p{wn^$1uF@-T+s3_1Y#bOst=zNg)RT` z{Uv<&B^XU~s|DQ>S{o)wiZok^dB zke3~S&1>V(Nc+9WdGqS9&8ve@mZ=L*cU#ogq+rYXcob!rlKZvCy45Avx2pw}1eM5e z`a5?t;}SVh&WFJvor`BS()I?@|IOZCM%R@r`@Z0}*Zrl(=y%V(xBK0D&faG;*DfYk zm6@3tWtN#_%OZ=(VwNmsW@eTwW@gDUGu!p=h{!c1*}LkT^ZKi|#)y$QbIt`?Yt3K& zGcqzVMq;MhxbtOLl68}@n(gn&r_V1>I=A70V)>j$*@pS^uE5wxg|rRPIko}n0QoWf zy#*K?pwGUqh(;pW=xEDAM>}vuAuxznky^vc+wvd4 zYiVVG%f@G5aOpTM3V4qZc=ZLiYz$;4J43i%HJ)KcaC0<*tHWiu*c-x`&F+$zlkG)Z z)tRG>0UWK_2*f($`p=rp1zepngDLZOIfk;h#=Y!om$(AXh zWb9%X7w{JAq8bQjqlLIVULq=%;mg~(GkhQ4uft7IAv>mo|v(%NCO13nUi#tg{nxU@vA~M6* z;^MhI)G?T$D(5Joeb?a3i9Lu2HbvaEO|UdvMBl-FBt%(BD4d_udYnFWklwc~^5S;D z$zlU3CVdp=I3X)~E3Aw+!Q#p}l;t}jD{3it<7PuIx5w zs!K#`V=|32l1SY$bdvVP^JE*V#N2xv#>GcZGBxD|;WJ0!%rBRQGF3VB~PU&JT)%9ijP8KHcR)Cyaw!QU>`3j*t4W^S@AM>T?nwA&L≷bbxe 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 bf6+?dchC87u&)=IFQ3<`+r|7J=!|Ff literal 157186 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%0AQgGJ$;e2LLwK04Z08O)0fD!tqcqLgSrdw!j7Svc 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 Z_Wp%|^G|L*Ed)@1hWZcn>UA7q{tw{{AZ`Ev From 82a89700e1f30dc11a4e6f4f733c3453efbde9a7 Mon Sep 17 00:00:00 2001 From: Fredrik Arvidsson Date: Mon, 4 Mar 2013 18:36:23 +0100 Subject: [PATCH 30/39] OP-864 Fixed sloppy errors (hopefully). --- .../src/plugins/coreplugin/mainwindow.cpp | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp index d21fe199d..837ec410c 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp @@ -268,7 +268,6 @@ void MainWindow::modeChanged(Core::IMode */*mode*/) void MainWindow::extensionsInitialized() { QSettings *qs = m_settings; - QSettings *settings; QString commandLine; if ( ! qs->allKeys().count() ) { foreach(QString str, qApp->arguments()) { @@ -289,33 +288,31 @@ void MainWindow::extensionsInitialized() #endif directory.cd("default_configurations"); - qDebug() << "Looking for default config files in: " + directory.absolutePath(); + qDebug() << "Looking for configuration files in: " << directory.absolutePath(); QString filename; - if(!commandLine.isEmpty()) { - if(QFile::exists(directory.absolutePath() + QDir::separator()+commandLine)) { - filename = directory.absolutePath() + QDir::separator()+commandLine; - qDebug() << "Load configuration from command line"; - settings = new QSettings(filename, XmlConfig::XmlSettingsFormat); - } - } - if(!QFile::exists(directory.absolutePath() + QDir::separator() + DEFAULT_CONFIG_FILENAME)) { - qDebug() << "Default config file " << directory.absolutePath() << QDir::separator() << DEFAULT_CONFIG_FILENAME << " was not found."; + if(!commandLine.isEmpty() && QFile::exists(directory.absolutePath() + QDir::separator() + commandLine)) { + filename = directory.absolutePath() + QDir::separator() + commandLine; + qDebug() << "Configuration file " << filename << " specified on command line will be loaded."; + } + else if(QFile::exists(directory.absolutePath() + QDir::separator() + DEFAULT_CONFIG_FILENAME)) { + filename = directory.absolutePath() + QDir::separator() + DEFAULT_CONFIG_FILENAME; + qDebug() << "Default configuration file " << filename << " will be loaded."; + } + else { + qDebug() << "Default configuration file " << directory.absolutePath() << QDir::separator() << DEFAULT_CONFIG_FILENAME << " was not found."; importSettings *dialog = new importSettings(this); dialog->loadFiles(directory.absolutePath()); dialog->exec(); filename = dialog->choosenConfig(); - settings = new QSettings(filename, XmlConfig::XmlSettingsFormat); delete dialog; + qDebug() << "Configuration file " << filename << " was selected and will be loaded."; } - else { - qDebug() << "Default config file " << directory.absolutePath() << QDir::separator() << DEFAULT_CONFIG_FILENAME << " was not loaded."; - settings = new QSettings(directory.absolutePath() + QDir::separator() + - DEFAULT_CONFIG_FILENAME, XmlConfig::XmlSettingsFormat); - } - qs = settings; - qDebug() << "Load default config from resource " << filename; + + qs = new QSettings(filename, XmlConfig::XmlSettingsFormat); + qDebug() << "Configuration file " << filename << " was loaded."; } + qs->beginGroup("General"); m_config_description=qs->value("Description", "none").toString(); m_config_details=qs->value("Details", "none").toString(); From b6746259c869adf470e5f47a67578c7cea0171b3 Mon Sep 17 00:00:00 2001 From: Fredrik Arvidsson Date: Mon, 4 Mar 2013 20:38:16 +0100 Subject: [PATCH 31/39] OP-864 Fixed some debug logging cosmetic problems. --- .../src/plugins/coreplugin/mainwindow.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp index 837ec410c..4cc506ab8 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp @@ -288,29 +288,29 @@ void MainWindow::extensionsInitialized() #endif directory.cd("default_configurations"); - qDebug() << "Looking for configuration files in: " << directory.absolutePath(); + qDebug() << "Looking for configuration files in:" << directory.absolutePath(); QString filename; if(!commandLine.isEmpty() && QFile::exists(directory.absolutePath() + QDir::separator() + commandLine)) { filename = directory.absolutePath() + QDir::separator() + commandLine; - qDebug() << "Configuration file " << filename << " specified on command line will be loaded."; + qDebug() << "Configuration file" << filename << "specified on command line will be loaded."; } else if(QFile::exists(directory.absolutePath() + QDir::separator() + DEFAULT_CONFIG_FILENAME)) { filename = directory.absolutePath() + QDir::separator() + DEFAULT_CONFIG_FILENAME; - qDebug() << "Default configuration file " << filename << " will be loaded."; + qDebug() << "Default configuration file" << filename << "will be loaded."; } else { - qDebug() << "Default configuration file " << directory.absolutePath() << QDir::separator() << DEFAULT_CONFIG_FILENAME << " was not found."; + qDebug() << "Default configuration file " << directory.absolutePath() << QDir::separator() << DEFAULT_CONFIG_FILENAME << "was not found."; importSettings *dialog = new importSettings(this); dialog->loadFiles(directory.absolutePath()); dialog->exec(); filename = dialog->choosenConfig(); delete dialog; - qDebug() << "Configuration file " << filename << " was selected and will be loaded."; + qDebug() << "Configuration file" << filename << "was selected and will be loaded."; } qs = new QSettings(filename, XmlConfig::XmlSettingsFormat); - qDebug() << "Configuration file " << filename << " was loaded."; + qDebug() << "Configuration file" << filename << "was loaded."; } qs->beginGroup("General"); From 1d9deae77dd3662382cd76d8e6b14e0fbcfe87be Mon Sep 17 00:00:00 2001 From: Philippe Renon Date: Wed, 6 Mar 2013 22:01:05 +0100 Subject: [PATCH 32/39] OP-682 fixed regression that prevented uploading of valid fw + renamed youdont check box to confirmCheckBox + minor cleanups --- .../src/plugins/uploader/devicewidget.cpp | 63 +++++++++---------- .../src/plugins/uploader/devicewidget.h | 4 +- .../src/plugins/uploader/devicewidget.ui | 4 +- 3 files changed, 33 insertions(+), 38 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp b/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp index 86504824f..081a847c2 100644 --- a/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp +++ b/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp @@ -35,12 +35,12 @@ deviceWidget::deviceWidget(QWidget *parent) : // Initialization of the Device icon display myDevice->verticalGroupBox_loaded->setVisible(false); myDevice->groupCustom->setVisible(false); - myDevice->youdont->setVisible(false); + myDevice->confirmCheckBox->setVisible(false); myDevice->gVDevice->setScene(new QGraphicsScene(this)); connect(myDevice->retrieveButton, SIGNAL(clicked()), this, SLOT(downloadFirmware())); connect(myDevice->updateButton, SIGNAL(clicked()), this, SLOT(uploadFirmware())); connect(myDevice->pbLoad, SIGNAL(clicked()), this, SLOT(loadFirmware())); - connect(myDevice->youdont, SIGNAL(stateChanged(int)), this, SLOT(confirmCB(int))); + connect(myDevice->confirmCheckBox, SIGNAL(stateChanged(int)), this, SLOT(confirmCB(int))); QPixmap pix = QPixmap(QString(":uploader/images/view-refresh.svg")); myDevice->statusIcon->setPixmap(pix); @@ -151,17 +151,17 @@ void deviceWidget::updateButtons(bool enabled) if (!enabled) { myDevice->description->setEnabled(false); myDevice->pbLoad->setEnabled(false); - myDevice->youdont->setEnabled(false); + myDevice->confirmCheckBox->setEnabled(false); myDevice->updateButton->setEnabled(false); myDevice->retrieveButton->setEnabled(false); } else { myDevice->description->setEnabled(true); - // Load button (i.e. chose file) is always enabled + // Load button (i.e. choose file) is always enabled myDevice->pbLoad->setEnabled(true); - myDevice->youdont->setEnabled(true); - // Update/Upload button is enabled if a file has be selected and the "You know what your doing" check box is checked - myDevice->updateButton->setEnabled(myDevice->youdont->isVisible() && myDevice->youdont->checkState() == Qt::Checked); + myDevice->confirmCheckBox->setEnabled(true); + // Update/Upload button is enabled if the "I know what I'm doing!" check box is checked + myDevice->updateButton->setEnabled(myDevice->confirmCheckBox->checkState() == Qt::Checked); // Retreive/Download button is always enabled myDevice->retrieveButton->setEnabled(true); } @@ -275,6 +275,9 @@ void deviceWidget::loadFirmware() filename = setOpenFileName(); + myDevice->confirmCheckBox->setVisible(false); + myDevice->confirmCheckBox->setChecked(false); + if (filename.isEmpty()) { status("Empty filename", STATUSICON_FAIL); return; @@ -287,52 +290,42 @@ void deviceWidget::loadFirmware() } loadedFW = file.readAll(); - myDevice->youdont->setVisible(false); - myDevice->youdont->setChecked(false); + QByteArray desc = loadedFW.right(100); QPixmap px; - if(loadedFW.length()>m_dfu->devices[deviceID].SizeOfCode) + if (loadedFW.length()>m_dfu->devices[deviceID].SizeOfCode) { myDevice->lblCRCL->setText(tr("Can't calculate, file too big for device")); - else + } + else { myDevice->lblCRCL->setText( QString::number(DFUObject::CRCFromQBArray(loadedFW,m_dfu->devices[deviceID].SizeOfCode))); + } //myDevice->lblFirmwareSizeL->setText(QString("Firmware size: ")+QVariant(loadedFW.length()).toString()+ QString(" bytes")); if (populateLoadedStructuredDescription(desc)) { - myDevice->youdont->setChecked(true); + myDevice->confirmCheckBox->setChecked(true); myDevice->verticalGroupBox_loaded->setVisible(true); myDevice->groupCustom->setVisible(false); - if(myDevice->lblCRC->text()==myDevice->lblCRCL->text()) - { - myDevice->statusLabel->setText(tr("The board has the same firmware as loaded. No need to update")); + if (myDevice->lblCRC->text() == myDevice->lblCRCL->text()) { + myDevice->statusLabel->setText(tr("The board has the same firmware as loaded. No need to update.")); px.load(QString(":/uploader/images/warning.svg")); - } - else if(myDevice->lblDevName->text()!=myDevice->lblBrdNameL->text()) - { + } else if (myDevice->lblDevName->text() != myDevice->lblBrdNameL->text()) { myDevice->statusLabel->setText(tr("WARNING: the loaded firmware is for different hardware. Do not update!")); px.load(QString(":/uploader/images/error.svg")); - } - else if(QDateTime::fromString(onBoardDescription.gitDate)>QDateTime::fromString(LoadedDescription.gitDate)) - { + } else if (QDateTime::fromString(onBoardDescription.gitDate) > QDateTime::fromString(LoadedDescription.gitDate)) { myDevice->statusLabel->setText(tr("The board has newer firmware than loaded. Are you sure you want to update?")); px.load(QString(":/uploader/images/warning.svg")); - } - else if(!LoadedDescription.gitTag.startsWith("RELEASE",Qt::CaseSensitive)) - { - myDevice->statusLabel->setText(tr("The loaded firmware is untagged or custom build. Update only if it was received from a trusted source (official website or your own build)")); + } else if (!LoadedDescription.gitTag.startsWith("RELEASE", Qt::CaseSensitive)) { + myDevice->statusLabel->setText(tr("The loaded firmware is untagged or custom build. Update only if it was received from a trusted source (official website or your own build).")); px.load(QString(":/uploader/images/warning.svg")); - } - else - { - myDevice->statusLabel->setText(tr("This is the tagged officially released OpenPilot firmware")); + } else { + myDevice->statusLabel->setText(tr("This is the tagged officially released OpenPilot firmware.")); px.load(QString(":/uploader/images/gtk-info.svg")); } - } - else - { - myDevice->statusLabel->setText(tr("WARNING: the loaded firmware was not packaged with the OpenPilot format. Do not update unless you know what you are doing")); + } else { + myDevice->statusLabel->setText(tr("WARNING: the loaded firmware was not packaged with the OpenPilot format. Do not update unless you know what you are doing.")); px.load(QString(":/uploader/images/error.svg")); - myDevice->youdont->setChecked(false); - myDevice->youdont->setVisible(true); + myDevice->confirmCheckBox->setChecked(false); + myDevice->confirmCheckBox->setVisible(true); myDevice->verticalGroupBox_loaded->setVisible(false); myDevice->groupCustom->setVisible(true); } diff --git a/ground/openpilotgcs/src/plugins/uploader/devicewidget.h b/ground/openpilotgcs/src/plugins/uploader/devicewidget.h index 2c47cbfa2..bc44b8883 100644 --- a/ground/openpilotgcs/src/plugins/uploader/devicewidget.h +++ b/ground/openpilotgcs/src/plugins/uploader/devicewidget.h @@ -49,7 +49,7 @@ class UPLOADER_EXPORT deviceWidget : public QWidget { Q_OBJECT public: - deviceWidget( QWidget *parent = 0); + deviceWidget(QWidget *parent = 0); void setDeviceID(int devID); void setDfu(DFUObject* dfu); void populate(); @@ -57,6 +57,7 @@ public: typedef enum { STATUSICON_OK, STATUSICON_RUNNING, STATUSICON_FAIL, STATUSICON_INFO} StatusIcon; QString setOpenFileName(); QString setSaveFileName(); + private: deviceDescriptorStruct onBoardDescription; deviceDescriptorStruct LoadedDescription; @@ -78,6 +79,7 @@ signals: void uploadEnded(bool success); void downloadStarted(); void downloadEnded(bool success); + public slots: void uploadFirmware(); void loadFirmware(); diff --git a/ground/openpilotgcs/src/plugins/uploader/devicewidget.ui b/ground/openpilotgcs/src/plugins/uploader/devicewidget.ui index 4fea11eb5..b7c7849da 100644 --- a/ground/openpilotgcs/src/plugins/uploader/devicewidget.ui +++ b/ground/openpilotgcs/src/plugins/uploader/devicewidget.ui @@ -101,9 +101,9 @@ - + - I know what I'm doing + I know what I'm doing! true From 99096ff9365ae0f4c81df8677deceb4d3d92980a Mon Sep 17 00:00:00 2001 From: sambas Date: Sat, 10 Nov 2012 10:01:31 +0200 Subject: [PATCH 33/39] Servo Out 6 fix --- flight/board_hw_defs/revomini/board_hw_defs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flight/board_hw_defs/revomini/board_hw_defs.c b/flight/board_hw_defs/revomini/board_hw_defs.c index 7375d367a..538131b91 100644 --- a/flight/board_hw_defs/revomini/board_hw_defs.c +++ b/flight/board_hw_defs/revomini/board_hw_defs.c @@ -1281,13 +1281,13 @@ static const struct pios_tim_channel pios_tim_servoport_all_pins[] = { .pin = { .gpio = GPIOA, .init = { - .GPIO_Pin = GPIO_Pin_1, + .GPIO_Pin = GPIO_Pin_0, .GPIO_Speed = GPIO_Speed_2MHz, .GPIO_Mode = GPIO_Mode_AF, .GPIO_OType = GPIO_OType_PP, .GPIO_PuPd = GPIO_PuPd_UP }, - .pin_source = GPIO_PinSource1, + .pin_source = GPIO_PinSource0, }, .remap = GPIO_AF_TIM5, }, From 98e12d192a8d7d9b7f93c7d0a03ece8af5ddc1b8 Mon Sep 17 00:00:00 2001 From: Kevin Vertucio Date: Fri, 8 Mar 2013 11:25:57 -0500 Subject: [PATCH 34/39] removed extraneous commented code Signed-off-by: Kevin Vertucio --- .../openpilotgcs/src/plugins/coreplugin/CREDITS.html | 2 +- .../openpilotgcs/src/plugins/coreplugin/mainwindow.cpp | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/CREDITS.html b/ground/openpilotgcs/src/plugins/coreplugin/CREDITS.html index 06d0e8754..a71f7570a 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/CREDITS.html +++ b/ground/openpilotgcs/src/plugins/coreplugin/CREDITS.html @@ -4,7 +4,7 @@ pre { font-family: Helvetica, Arial, "MS Trebuchet", sans-serif; } -

This is a credits file of people that are or have been key contributors to the OpenPilot project. Without the work of the people in this list OpenPilot would not be what it is today.

+

This is a credits file of people that are or have been key contributors to the OpenPilot project. Without the work of the people in this list, OpenPilot would not be what it is today.

This list is sorted alphabetically by name

diff --git a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp index f17b5f703..be0b26030 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp @@ -795,15 +795,13 @@ void MainWindow::registerDefaultActions() // About GCS Action #ifdef Q_WS_MAC - // tmpaction = new QAction(QIcon(Constants::ICON_OPENPILOT), tr("About &OpenPilot GCS"), this); // it's convention not to add dots to the about menu + #else - // tmpaction = new QAction(QIcon(Constants::ICON_OPENPILOT), tr("About &OpenPilot GCS..."), this); + #endif - // cmd = am->registerAction(tmpaction, Constants::ABOUT_OPENPILOTGCS, m_globalContext); - // mhelp->addAction(cmd, Constants::G_HELP_ABOUT); - // tmpaction->setEnabled(true); + #ifdef Q_WS_MAC - // cmd->action()->setMenuRole(QAction::ApplicationSpecificRole); + #endif connect(tmpaction, SIGNAL(triggered()), this, SLOT(aboutOpenPilotGCS())); From f1214df633d8cbd19ddf42036541ea27fdf722d0 Mon Sep 17 00:00:00 2001 From: Oleg Semyonov Date: Sun, 10 Mar 2013 00:57:41 +0200 Subject: [PATCH 35/39] OP-792: Remove unused yet GUI in addition to flight modes This reverts commit 0e9d7137ff671ee9ec44f59914ba1d695a4139b0. Conflicts: ground/openpilotgcs/src/plugins/config/configgadgetwidget.h OP-792 #comment Now this feature is removed from GUI too --- .../openpilotgcs/src/plugins/config/config.pro | 16 +++------------- .../src/plugins/config/configgadgetwidget.cpp | 7 ------- .../src/plugins/config/configgadgetwidget.h | 2 +- 3 files changed, 4 insertions(+), 21 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/config.pro b/ground/openpilotgcs/src/plugins/config/config.pro index 0bb6cdbcc..af6f3e1ed 100644 --- a/ground/openpilotgcs/src/plugins/config/config.pro +++ b/ground/openpilotgcs/src/plugins/config/config.pro @@ -38,8 +38,7 @@ HEADERS += configplugin.h \ configrevowidget.h \ config_global.h \ mixercurve.h \ - dblspindelegate.h \ - configautotunewidget.h + dblspindelegate.h SOURCES += configplugin.cpp \ configgadgetconfiguration.cpp \ configgadgetwidget.cpp \ @@ -72,8 +71,7 @@ SOURCES += configplugin.cpp \ outputchannelform.cpp \ cfg_vehicletypes/vehicleconfig.cpp \ mixercurve.cpp \ - dblspindelegate.cpp \ - configautotunewidget.cpp + dblspindelegate.cpp FORMS += airframe.ui \ cc_hw_settings.ui \ pro_hw_settings.ui \ @@ -90,13 +88,5 @@ FORMS += airframe.ui \ revosensors.ui \ txpid.ui \ pipxtreme.ui \ - mixercurve.ui \ - autotune.ui + mixercurve.ui RESOURCES += configgadget.qrc - - - - - - - diff --git a/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp b/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp index 6aea1ce17..ad2b9ed8a 100644 --- a/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp @@ -32,7 +32,6 @@ #include "configinputwidget.h" #include "configoutputwidget.h" #include "configstabilizationwidget.h" -#include "configautotunewidget.h" #include "configcamerastabilizationwidget.h" #include "configtxpidwidget.h" #include "config_pro_hw_widget.h" @@ -103,12 +102,6 @@ ConfigGadgetWidget::ConfigGadgetWidget(QWidget *parent) : QWidget(parent) qwd = new ConfigStabilizationWidget(this); ftw->insertTab(ConfigGadgetWidget::stabilization, qwd, *icon, QString("Stabilization")); - icon = new QIcon(); - icon->addFile(":/configgadget/images/autotune_normal.png", QSize(), QIcon::Normal, QIcon::Off); - icon->addFile(":/configgadget/images/autotune_selected.png", QSize(), QIcon::Selected, QIcon::Off); - qwd = new ConfigAutotuneWidget(this); - ftw->insertTab(ConfigGadgetWidget::autotune, qwd, *icon, QString("Autotune")); - icon = new QIcon(); icon->addFile(":/configgadget/images/camstab_normal.png", QSize(), QIcon::Normal, QIcon::Off); icon->addFile(":/configgadget/images/camstab_selected.png", QSize(), QIcon::Selected, QIcon::Off); diff --git a/ground/openpilotgcs/src/plugins/config/configgadgetwidget.h b/ground/openpilotgcs/src/plugins/config/configgadgetwidget.h index 304c557b4..24209e1cf 100644 --- a/ground/openpilotgcs/src/plugins/config/configgadgetwidget.h +++ b/ground/openpilotgcs/src/plugins/config/configgadgetwidget.h @@ -48,7 +48,7 @@ class ConfigGadgetWidget: public QWidget public: ConfigGadgetWidget(QWidget *parent = 0); ~ConfigGadgetWidget(); - enum widgetTabs {hardware=0, aircraft, input, output, sensors, stabilization, camerastabilization, txpid, oplink, autotune}; + enum widgetTabs {hardware=0, aircraft, input, output, sensors, stabilization, camerastabilization, txpid, oplink}; void startInputWizard(); public slots: From e0bd933baab5f77dbac32492a6518f3fad7d7118 Mon Sep 17 00:00:00 2001 From: Fredrik Arvidsson Date: Sun, 10 Mar 2013 18:51:15 +0100 Subject: [PATCH 36/39] OP-856 Changed USB GUI. Changed the rules for validation of configurations. --- .../src/plugins/config/configrevohwwidget.cpp | 90 +-- .../src/plugins/config/configrevohwwidget.h | 4 +- .../src/plugins/config/configrevohwwidget.ui | 528 ++++++++++-------- 3 files changed, 349 insertions(+), 273 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp index 52b03f926..6564819a7 100644 --- a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.cpp @@ -82,9 +82,8 @@ ConfigRevoHWWidget::~ConfigRevoHWWidget() void ConfigRevoHWWidget::setupCustomCombos() { - m_ui->cbUSBType->addItem(tr("HID"), USB_HID); - m_ui->cbUSBType->addItem(tr("VCP"), USB_VCP); - connect(m_ui->cbUSBType, SIGNAL(currentIndexChanged(int)), this, SLOT(usbTypeChanged(int))); + connect(m_ui->cbUSBHIDFunction, SIGNAL(currentIndexChanged(int)), this, SLOT(usbHIDPortChanged(int))); + connect(m_ui->cbUSBVCPFunction, SIGNAL(currentIndexChanged(int)), this, SLOT(usbVCPPortChanged(int))); m_ui->cbSonar->addItem(tr("Disabled")); m_ui->cbSonar->setCurrentIndex(0); @@ -99,15 +98,7 @@ void ConfigRevoHWWidget::setupCustomCombos() void ConfigRevoHWWidget::refreshWidgetsValues(UAVObject *obj) { ConfigTaskWidget::refreshWidgetsValues(obj); - HwSettings *hwSettings = HwSettings::GetInstance(getObjectManager()); - HwSettings::DataFields data = hwSettings->getData(); - if(data.USB_HIDPort != HwSettings::USB_HIDPORT_DISABLED){ - m_ui->cbUSBType->setCurrentIndex(m_ui->cbUSBType->findData(USB_HID)); - } - else { - m_ui->cbUSBType->setCurrentIndex(m_ui->cbUSBType->findData(USB_VCP)); - } - usbTypeChanged(m_ui->cbUSBType->currentIndex()); + usbVCPPortChanged(0); mainPortChanged(0); flexiPortChanged(0); } @@ -141,39 +132,56 @@ void ConfigRevoHWWidget::updateObjectsFromWidgets() hwSettings->setData(data); } -void ConfigRevoHWWidget::usbTypeChanged(int index) +void ConfigRevoHWWidget::usbVCPPortChanged(int index) { Q_UNUSED(index); - bool hid = m_ui->cbUSBType->itemData(m_ui->cbUSBType->currentIndex()) == USB_HID; - m_ui->cbUSBHIDFunction->setVisible(hid); - m_ui->cbUSBVCPFunction->setVisible(!hid); + bool vcpComBridgeEnabled = m_ui->cbUSBVCPFunction->currentIndex() == HwSettings::USB_VCPPORT_COMBRIDGE; - m_ui->lblUSBVCPSpeed->setVisible(!hid); - m_ui->cbUSBVCPSpeed->setVisible(!hid); + m_ui->lblUSBVCPSpeed->setVisible(vcpComBridgeEnabled); + m_ui->cbUSBVCPSpeed->setVisible(vcpComBridgeEnabled); - if(hid){ - m_ui->cbUSBVCPFunction->setCurrentIndex(HwSettings::USB_VCPPORT_DISABLED); - m_ui->cbUSBHIDFunction->setCurrentIndex(HwSettings::USB_HIDPORT_USBTELEMETRY); - } - else { - m_ui->cbUSBHIDFunction->setCurrentIndex(HwSettings::USB_HIDPORT_DISABLED); - m_ui->cbUSBVCPFunction->setCurrentIndex(HwSettings::USB_VCPPORT_USBTELEMETRY); - } - - if(m_ui->cbFlexi->currentIndex() == HwSettings::RM_FLEXIPORT_COMBRIDGE) { + if(!vcpComBridgeEnabled && m_ui->cbFlexi->currentIndex() == HwSettings::RM_FLEXIPORT_COMBRIDGE) { m_ui->cbFlexi->setCurrentIndex(HwSettings::RM_FLEXIPORT_DISABLED); } m_ui->cbFlexi->model()->setData(m_ui->cbFlexi->model()->index(HwSettings::RM_FLEXIPORT_COMBRIDGE, 0), - hid ? QVariant(0) : QVariant(1|32), Qt::UserRole - 1); + !vcpComBridgeEnabled ? QVariant(0) : QVariant(1|32), Qt::UserRole - 1); - if(m_ui->cbMain->currentIndex() == HwSettings::RM_MAINPORT_COMBRIDGE) { + if(!vcpComBridgeEnabled && m_ui->cbMain->currentIndex() == HwSettings::RM_MAINPORT_COMBRIDGE) { m_ui->cbMain->setCurrentIndex(HwSettings::RM_MAINPORT_DISABLED); } m_ui->cbMain->model()->setData(m_ui->cbMain->model()->index(HwSettings::RM_MAINPORT_COMBRIDGE, 0), - hid ? QVariant(0) : QVariant(1|32), Qt::UserRole - 1); + !vcpComBridgeEnabled ? QVariant(0) : QVariant(1|32), Qt::UserRole - 1); + + //_DEBUGCONSOLE modes are mutual exclusive + if(m_ui->cbUSBVCPFunction->currentIndex() == HwSettings::USB_VCPPORT_DEBUGCONSOLE) { + if(m_ui->cbMain->currentIndex() == HwSettings::RM_MAINPORT_DEBUGCONSOLE) { + m_ui->cbMain->setCurrentIndex(HwSettings::RM_MAINPORT_DISABLED); + } + if(m_ui->cbFlexi->currentIndex() == HwSettings::RM_FLEXIPORT_DEBUGCONSOLE) { + m_ui->cbFlexi->setCurrentIndex(HwSettings::RM_FLEXIPORT_DISABLED); + } + } + + //_USBTELEMETRY modes are mutual exclusive + if(m_ui->cbUSBVCPFunction->currentIndex() == HwSettings::USB_VCPPORT_USBTELEMETRY) { + if(m_ui->cbUSBHIDFunction->currentIndex() == HwSettings::USB_HIDPORT_USBTELEMETRY) { + m_ui->cbUSBHIDFunction->setCurrentIndex(HwSettings::USB_HIDPORT_DISABLED); + } + } } +void ConfigRevoHWWidget::usbHIDPortChanged(int index) +{ + Q_UNUSED(index); + + //_USBTELEMETRY modes are mutual exclusive + if(m_ui->cbUSBHIDFunction->currentIndex() == HwSettings::USB_HIDPORT_USBTELEMETRY) { + if(m_ui->cbUSBVCPFunction->currentIndex() == HwSettings::USB_VCPPORT_USBTELEMETRY) { + m_ui->cbUSBVCPFunction->setCurrentIndex(HwSettings::USB_VCPPORT_DISABLED); + } + } +} void ConfigRevoHWWidget::flexiPortChanged(int index) { @@ -207,10 +215,19 @@ void ConfigRevoHWWidget::flexiPortChanged(int index) m_ui->cbMain->setCurrentIndex(HwSettings::RM_MAINPORT_DISABLED); } break; + case HwSettings::RM_FLEXIPORT_DEBUGCONSOLE: + m_ui->cbFlexiComSpeed->setVisible(true); + if(m_ui->cbMain->currentIndex() == HwSettings::RM_MAINPORT_DEBUGCONSOLE) { + m_ui->cbMain->setCurrentIndex(HwSettings::RM_MAINPORT_DISABLED); + } + if(m_ui->cbUSBVCPFunction->currentIndex() == HwSettings::USB_VCPPORT_DEBUGCONSOLE) { + m_ui->cbUSBVCPFunction->setCurrentIndex(HwSettings::USB_VCPPORT_DISABLED); + } + break; default: m_ui->lblFlexiSpeed->setVisible(false); break; - } + } } void ConfigRevoHWWidget::mainPortChanged(int index) @@ -245,6 +262,15 @@ void ConfigRevoHWWidget::mainPortChanged(int index) m_ui->cbFlexi->setCurrentIndex(HwSettings::RM_FLEXIPORT_DISABLED); } break; + case HwSettings::RM_MAINPORT_DEBUGCONSOLE: + m_ui->cbMainComSpeed->setVisible(true); + if(m_ui->cbFlexi->currentIndex() == HwSettings::RM_FLEXIPORT_DEBUGCONSOLE) { + m_ui->cbFlexi->setCurrentIndex(HwSettings::RM_FLEXIPORT_DISABLED); + } + if(m_ui->cbUSBVCPFunction->currentIndex() == HwSettings::USB_VCPPORT_DEBUGCONSOLE) { + m_ui->cbUSBVCPFunction->setCurrentIndex(HwSettings::USB_VCPPORT_DISABLED); + } + break; default: m_ui->lblMainSpeed->setVisible(false); break; diff --git a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.h b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.h index 6615411d5..7e6ed51f4 100644 --- a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.h +++ b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.h @@ -45,7 +45,6 @@ public: ~ConfigRevoHWWidget(); private: - enum {USB_HID, USB_VCP}; Ui_RevoHWWidget *m_ui; void setupCustomCombos(); @@ -54,7 +53,8 @@ protected slots: void updateObjectsFromWidgets(); private slots: - void usbTypeChanged(int index); + void usbVCPPortChanged(int index); + void usbHIDPortChanged(int index); void flexiPortChanged(int index); void mainPortChanged(int index); void modemPortChanged(int index); diff --git a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui index b78c40975..199d2e817 100644 --- a/ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui +++ b/ground/openpilotgcs/src/plugins/config/configrevohwwidget.ui @@ -119,34 +119,99 @@ 12
- - - - - Qt::Horizontal + + + + + + 0 + 0 + - - QSizePolicy::Minimum - - - - 120 - 10 - - - - - - - Sonar Port + USB VCP Function - Qt::AlignCenter + Qt::AlignBottom|Qt::AlignHCenter - + + + + Speed + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + + + false + + + + + + + + 0 + 0 + + + + Speed + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + + + + + + + + + + 0 + 0 + + + + USB HID Function + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + + + + + + true + + + + + + + Main Port + + + Qt::AlignBottom|Qt::AlignHCenter + + + + Qt::Horizontal @@ -162,8 +227,58 @@ - - + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 120 + 10 + + + + + + + + + 0 + 0 + + + + + 350 + 350 + + + + + + + :/configgadget/images/revolution_top.png + + + false + + + Qt::AlignCenter + + + Qt::NoTextInteraction + + + + + + + + 0 @@ -171,26 +286,121 @@ - USB Function + Sonar Port Qt::AlignBottom|Qt::AlignHCenter - - - - Main Port - - - Qt::AlignBottom|Qt::AlignHCenter - - - - + + + + + 0 + + + + + true + + + + + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 120 + 10 + + + + + + + + Flexi Port + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + + + 0 + + + + + true + + + + + + + + + + + + + + + + + + Radio + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + + + Speed + + + Qt::AlignBottom|Qt::AlignHCenter + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 120 + 10 + + + + @@ -239,199 +449,7 @@ - - - - - 0 - 0 - - - - - 350 - 350 - - - - - - - :/configgadget/images/revolution_top.png - - - false - - - Qt::AlignCenter - - - Qt::NoTextInteraction - - - - - - - - 0 - 0 - - - - USB Port - - - Qt::AlignBottom|Qt::AlignHCenter - - - - - - - - - - - - - Speed - - - Qt::AlignBottom|Qt::AlignHCenter - - - - - - - false - - - - - - - Speed - - - Qt::AlignBottom|Qt::AlignHCenter - - - - - - - - - - - - - Radio - - - Qt::AlignCenter - - - - - - - Flexi Port - - - Qt::AlignBottom|Qt::AlignHCenter - - - - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - - - 120 - 10 - - - - - - - - Speed - - - Qt::AlignBottom|Qt::AlignHCenter - - - - - - - 0 - - - - - true - - - - - - - - - - - - - - - 0 - - - - - true - - - - - - - - - - - - - - - true - - - - - - - 0 - - - - - - - - - - + Qt::Horizontal @@ -447,7 +465,7 @@ - + Qt::Horizontal @@ -463,18 +481,34 @@ - - + + - Qt::Horizontal + Qt::Vertical - QSizePolicy::Minimum + QSizePolicy::Fixed - 120 - 10 + 20 + 13 + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 @@ -485,12 +519,12 @@ Qt::Vertical - QSizePolicy::Minimum + QSizePolicy::Fixed 20 - 16 + 13 @@ -501,12 +535,28 @@ Qt::Vertical - QSizePolicy::Minimum + QSizePolicy::Fixed 20 - 22 + 20 + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 13 From fcbfb53a8799196a38b554a2e8d76a0e38451a90 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sun, 10 Mar 2013 21:03:40 +0100 Subject: [PATCH 37/39] Bootloader error visualization: Fixed indentation/spaces +review OPReview-400 --- flight/Bootloaders/BootloaderUpdater/main.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/flight/Bootloaders/BootloaderUpdater/main.c b/flight/Bootloaders/BootloaderUpdater/main.c index d1fbc1666..ff803f4a6 100644 --- a/flight/Bootloaders/BootloaderUpdater/main.c +++ b/flight/Bootloaders/BootloaderUpdater/main.c @@ -34,7 +34,7 @@ /* Prototype of PIOS_Board_Init() function */ extern void PIOS_Board_Init(void); extern void FLASH_Download(); -void error(int,int); +void error(int, int); /* The ADDRESSES of the _binary_* symbols are the important * data. This is non-intuitive for _binary_size where you @@ -58,7 +58,7 @@ int main() { /// Self overwrite check uint32_t base_address = SCB->VTOR; if ((0x08000000 + embedded_image_size) > base_address) - error(PIOS_LED_HEARTBEAT,1); + error(PIOS_LED_HEARTBEAT, 1); /// /* @@ -80,7 +80,7 @@ int main() { if ((pios_board_info_blob.magic != new_board_info_blob->magic) || (pios_board_info_blob.board_type != new_board_info_blob->board_type) || (pios_board_info_blob.board_rev != new_board_info_blob->board_rev)) { - error(PIOS_LED_HEARTBEAT,2); + error(PIOS_LED_HEARTBEAT, 2); } /* Embedded bootloader looks like it's the right one for this HW, proceed... */ @@ -108,7 +108,7 @@ int main() { } if (fail == true) - error(PIOS_LED_HEARTBEAT,3); + error(PIOS_LED_HEARTBEAT, 3); /// @@ -124,7 +124,7 @@ int main() { } } if (result == false) - error(PIOS_LED_HEARTBEAT,4); + error(PIOS_LED_HEARTBEAT, 4); } /// for (uint8_t x = 0; x < 3; ++x) { @@ -145,11 +145,11 @@ int main() { } -void error(int led,int code) { +void error(int led, int code) { for(;;) { PIOS_DELAY_WaitmS(1000); - for (int x=0;x Date: Sun, 10 Mar 2013 23:41:34 +0100 Subject: [PATCH 38/39] Bootloader error visualization: Fixed indentation/spaces/2 +review OPReview-400 --- flight/Bootloaders/BootloaderUpdater/main.c | 29 ++++++++++----------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/flight/Bootloaders/BootloaderUpdater/main.c b/flight/Bootloaders/BootloaderUpdater/main.c index ff803f4a6..ff2c5ae2e 100644 --- a/flight/Bootloaders/BootloaderUpdater/main.c +++ b/flight/Bootloaders/BootloaderUpdater/main.c @@ -47,7 +47,8 @@ const uint32_t * embedded_image_start = (uint32_t *) &(_binary_start); const uint32_t * embedded_image_end = (uint32_t *) &(_binary_end); const uint32_t embedded_image_size = (uint32_t) &(_binary_size); -int main() { +int main() +{ PIOS_SYS_Init(); PIOS_Board_Init(); @@ -70,7 +71,7 @@ int main() { */ /* Calculate how far the board_info_blob is from the beginning of the bootloader */ - uint32_t board_info_blob_offset = (uint32_t)&pios_board_info_blob - (uint32_t)0x08000000; + uint32_t board_info_blob_offset = (uint32_t) &pios_board_info_blob - (uint32_t)0x08000000; /* Use the same offset into our embedded bootloader image */ struct pios_board_info * new_board_info_blob = (struct pios_board_info *) @@ -114,13 +115,13 @@ int main() { /// /// Bootloader programing - for (uint32_t offset = 0; offset < embedded_image_size/sizeof(uint32_t); ++offset) { + for (uint32_t offset = 0; offset < embedded_image_size / sizeof(uint32_t); ++offset) { bool result = false; PIOS_LED_Toggle(PIOS_LED_HEARTBEAT); for (uint8_t retry = 0; retry < MAX_WRI_RETRYS; ++retry) { if (result == false) { result = (FLASH_ProgramWord(0x08000000 + (offset * 4), embedded_image_start[offset]) - == FLASH_COMPLETE) ? true : false; + == FLASH_COMPLETE) ? true : false; } } if (result == false) @@ -128,10 +129,10 @@ int main() { } /// for (uint8_t x = 0; x < 3; ++x) { - PIOS_LED_On(PIOS_LED_HEARTBEAT); - PIOS_DELAY_WaitmS(1000); - PIOS_LED_Off(PIOS_LED_HEARTBEAT); - PIOS_DELAY_WaitmS(1000); + PIOS_LED_On(PIOS_LED_HEARTBEAT); + PIOS_DELAY_WaitmS(1000); + PIOS_LED_Off(PIOS_LED_HEARTBEAT); + PIOS_DELAY_WaitmS(1000); } /// Invalidate the bootloader updater so we won't run @@ -145,20 +146,18 @@ int main() { } -void error(int led, int code) { - for(;;) - { +void error(int led, int code) +{ + for (;;) { PIOS_DELAY_WaitmS(1000); - for (int x=0; x Date: Mon, 11 Mar 2013 15:35:08 -0400 Subject: [PATCH 39/39] added autogenerated version info file Signed-off-by: Kevin Vertucio --- ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp b/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp index 2b631fa05..0978a4638 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/authorsdialog.cpp @@ -28,6 +28,8 @@ #include "authorsdialog.h" +// autogenerated version info string +#include "../../../../../build/ground/openpilotgcs/gcsversioninfo.h" #include "coreconstants.h" #include "icore.h"