pax_global_header00006660000000000000000000000064132516413230014512gustar00rootroot0000000000000052 comment=46e26ec42b1a288289f999bf2a84e23dc9d6d9ff deepin-deb-installer-1.2.4/000077500000000000000000000000001325164132300155055ustar00rootroot00000000000000deepin-deb-installer-1.2.4/.gitignore000066400000000000000000000003561325164132300175010ustar00rootroot00000000000000# Compiled Object files *.slo *.lo *.o # Compiled Dynamic libraries *.so *.dylib # Compiled Static libraries *.lai *.la *.a build*/ *.core *.autosave *.user* # qm file is auto generate from .ts file *.qm .vscode/ # vim tmp file *.swp deepin-deb-installer-1.2.4/.tx/000077500000000000000000000000001325164132300162165ustar00rootroot00000000000000deepin-deb-installer-1.2.4/.tx/config000066400000000000000000000004021325164132300174020ustar00rootroot00000000000000[main] host = https://www.transifex.com minimum_perc = 80 mode = developer [deepin-package-manager.deepin-deb-installer] file_filter = translations/deepin-deb-installer_.ts source_file = translations/deepin-deb-installer.ts source_lang = en type = QT deepin-deb-installer-1.2.4/CHANGELOG.md000066400000000000000000000005641325164132300173230ustar00rootroot00000000000000 ## 1.2.4 (2018-03-13) #### Bug Fixes * Adapt lintian ([91b40e71](91b40e71)) # 1.2.3 - Compatibility with old dtk. # 1.2.2 - Fix some Deb packages conflict with DDE but dont detected correctly. # 1.2.1 - Update translate files. # 1.2 - HiDPI support. # 1.1 - Support remove packages before execute install. - Support back when operate finshed. deepin-deb-installer-1.2.4/CMakeLists.txt000066400000000000000000000041221325164132300202440ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) if (NOT DEFINED VERSION) set(VERSION 1.2.2) endif () project(deepin-deb-installer) #set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") if (NOT (${CMAKE_BUILD_TYPE} MATCHES "Debug")) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") # generate qm files execute_process(COMMAND bash "translate_generation.sh" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) else () set(CMAKE_CXX_COMPILER "clang++") endif () configure_file(environments.h.in environments.h @ONLY) # Sources files file(GLOB SRCS "*.h" "*.cpp" "widgets/*.h" "widgets/*.cpp") # Find the library find_package(PkgConfig REQUIRED) find_package(Qt5Widgets REQUIRED) find_package(Qt5Concurrent REQUIRED) find_package(QApt REQUIRED) find_package(DtkWidget REQUIRED) # Tell CMake to create the executable add_executable(deepin-deb-installer ${SRCS} resources/resources.qrc) target_include_directories(deepin-deb-installer PUBLIC ${DtkWidget_INCLUDE_DIRS} ${OBJECT_BINARY_DIR}) target_link_libraries(deepin-deb-installer QApt ${DtkWidget_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Concurrent_LIBRARIES} ) # Install settings if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX /usr) endif () # Install qm files file(GLOB QM_FILES "translations/*.qm") install(FILES ${QM_FILES} DESTINATION share/deepin-deb-installer/translations) # install manual files install(DIRECTORY dmanual/ DESTINATION share/dman/deepin-deb-installer) # Install icons foreach (ICON_SIZE 16 24 32 48 64 96 128 256) install(FILES resources/images/deepin-deb-installer-${ICON_SIZE}px.svg RENAME deepin-deb-installer.svg DESTINATION share/icons/hicolor/${ICON_SIZE}x${ICON_SIZE}/apps) endforeach () install(TARGETS deepin-deb-installer DESTINATION bin) install(FILES deepin-deb-installer.desktop DESTINATION share/applications) install(FILES deepin-deb-installer.applications DESTINATION share/application-registry) deepin-deb-installer-1.2.4/debian/000077500000000000000000000000001325164132300167275ustar00rootroot00000000000000deepin-deb-installer-1.2.4/debian/changelog000066400000000000000000000002411325164132300205760ustar00rootroot00000000000000deepin-deb-installer (1.0.0-1) unstable; urgency=medium * Initial release -- Deepin Packages Builder Thu, 29 Jun 2017 11:33:08 +0800 deepin-deb-installer-1.2.4/debian/compat000066400000000000000000000000021325164132300201250ustar00rootroot000000000000009 deepin-deb-installer-1.2.4/debian/control000066400000000000000000000011141325164132300203270ustar00rootroot00000000000000Source: deepin-deb-installer Section: utils Priority: optional Maintainer: Deepin Packages Builder Build-Depends: debhelper (>= 9), cmake, pkg-config, libqt5widgets5, libqt5concurrent5, libqapt-dev, libdtkwidget-dev, qt5-default, qttools5-dev-tools Standards-Version: 3.9.8 Homepage: https://www.deepin.com/ Package: deepin-deb-installer Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, libqapt3-runtime Description: deepin deb installer tool Deepin Package Manager is used to help users install and remove local software, supports to bulk install. deepin-deb-installer-1.2.4/debian/copyright000066400000000000000000000016561325164132300206720ustar00rootroot00000000000000Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: deepin-deb-installer Files: * Copyright: 2017 Deepin Technology Co., Ltd. License: GPL-3+ This package is free software; you can 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 package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". deepin-deb-installer-1.2.4/debian/postinst000077500000000000000000000002541325164132300205410ustar00rootroot00000000000000#!/bin/sh set -e # set to default sed -i -E 's/(application\/x-deb=).*$/\1deepin-deb-installer.desktop/' /usr/share/applications/mimeapps.list || true #DEBHELPER# exit 0 deepin-deb-installer-1.2.4/debian/rules000077500000000000000000000005221325164132300200060ustar00rootroot00000000000000#!/usr/bin/make -f # See debhelper(7) (uncomment to enable) # output every command that modifies files on the build system. #export DH_VERBOSE = 1 VERSION ?= $(shell dpkg-parsechangelog -ldebian/changelog -SVersion | awk -F'-' '{print $$1}') %: dh $@ --parallel override_dh_auto_configure: dh_auto_configure -- -DVERSION=$(VERSION) deepin-deb-installer-1.2.4/debian/source/000077500000000000000000000000001325164132300202275ustar00rootroot00000000000000deepin-deb-installer-1.2.4/debian/source/format000066400000000000000000000000151325164132300214360ustar00rootroot000000000000003.0 (native) deepin-deb-installer-1.2.4/debinstaller.cpp000066400000000000000000000161161325164132300206660ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "debinstaller.h" #include "filechoosewidget.h" #include "singleinstallpage.h" #include "multipleinstallpage.h" #include "deblistmodel.h" #include "uninstallconfirmpage.h" #include #include #include #include #include #include #include #include #include #include #include #include using QApt::DebFile; DWIDGET_USE_NAMESPACE DebInstaller::DebInstaller(QWidget *parent) : DMainWindow(parent), m_fileListModel(new DebListModel(this)), m_centralLayout(new QStackedLayout), m_fileChooseWidget(new FileChooseWidget) { m_centralLayout->addWidget(m_fileChooseWidget); m_centralLayout->setContentsMargins(0, 0, 0, 0); m_centralLayout->setSpacing(0); QWidget *wrapWidget = new QWidget; wrapWidget->setLayout(m_centralLayout); // wrapWidget->setStyleSheet("background-color: red;"); DTitlebar *tb = titlebar(); tb->setIcon(QIcon::fromTheme("deepin-deb-installer")); tb->setTitle(QString()); #if DTK_VERSION >= 0x02000600 tb->setBackgroundTransparent(true); #endif setCentralWidget(wrapWidget); setAcceptDrops(true); setFixedSize(480, 380); setWindowTitle(tr("Deepin Package Manager")); setWindowIcon(QIcon::fromTheme("deepin-deb-installer")); move(qApp->primaryScreen()->geometry().center() - geometry().center()); connect(m_fileChooseWidget, &FileChooseWidget::packagesSelected, this, &DebInstaller::onPackagesSelected); connect(m_fileListModel, &DebListModel::lockForAuth, this, &DebInstaller::onAuthing); connect(m_fileListModel, &DebListModel::appendOutputInfo, this, [=](const QString &output) { qDebug() << output.trimmed(); }); } DebInstaller::~DebInstaller() { } void DebInstaller::keyPressEvent(QKeyEvent *e) { switch (e->key()) { #ifdef QT_DEBUG case Qt::Key_Escape: qApp->quit(); break; #endif default:; } } void DebInstaller::dragEnterEvent(QDragEnterEvent *e) { auto * const mime = e->mimeData(); if (!mime->hasUrls()) return e->ignore(); for (const auto &item : mime->urls()) { const QFileInfo info(item.path()); if (info.isDir()) return e->accept(); if (info.isFile() && info.suffix() == "deb") return e->accept(); } e->ignore(); } void DebInstaller::dropEvent(QDropEvent *e) { auto * const mime = e->mimeData(); if (!mime->hasUrls()) return e->ignore(); e->accept(); // find .deb files QStringList file_list; for (const auto &url : mime->urls()) { if (!url.isLocalFile()) continue; const QString local_path = url.toLocalFile(); const QFileInfo info(local_path); if (info.isFile() && info.suffix() == "deb") file_list << local_path; else if (info.isDir()) { for (auto deb : QDir(local_path).entryInfoList(QStringList() << "*.deb", QDir::Files)) file_list << deb.absoluteFilePath(); } } onPackagesSelected(file_list); } void DebInstaller::onPackagesSelected(const QStringList &packages) { for (const auto &package : packages) { DebFile *p = new DebFile(package); if (!p->isValid()) { qWarning() << "package invalid: " << package; delete p; continue; } m_fileListModel->appendPackage(p); } refreshInstallPage(); } void DebInstaller::showUninstallConfirmPage() { Q_ASSERT(m_centralLayout->count() == 2); const QModelIndex index = m_fileListModel->first(); UninstallConfirmPage *p = new UninstallConfirmPage; p->setPackage(index.data().toString()); p->setRequiredList(index.data(DebListModel::PackageReverseDependsListRole).toStringList()); m_centralLayout->addWidget(p); m_centralLayout->setCurrentIndex(2); connect(p, &UninstallConfirmPage::accepted, this, &DebInstaller::onUninstallAccepted); connect(p, &UninstallConfirmPage::canceled, this, &DebInstaller::onUninstallCalceled); } void DebInstaller::onUninstallAccepted() { SingleInstallPage *p = backToSinglePage(); p->uninstallCurrentPackage(); } void DebInstaller::onUninstallCalceled() { backToSinglePage(); } void DebInstaller::onAuthing(const bool authing) { setEnabled(!authing); } void DebInstaller::reset() { Q_ASSERT(m_centralLayout->count() == 2); Q_ASSERT(!m_lastPage.isNull()); titlebar()->setTitle(QString()); m_fileListModel->reset(); m_lastPage->deleteLater(); m_centralLayout->setCurrentIndex(0); } void DebInstaller::removePackage(const int index) { m_fileListModel->removePackage(index); refreshInstallPage(); } void DebInstaller::refreshInstallPage() { // clear widgets if needed if (!m_lastPage.isNull()) m_lastPage->deleteLater(); const int packageCount = m_fileListModel->preparedPackages().size(); // no packages found if (packageCount == 0) return; if (packageCount == 1) { // single package install titlebar()->setTitle(QString()); SingleInstallPage *singlePage = new SingleInstallPage(m_fileListModel); connect(singlePage, &SingleInstallPage::back, this, &DebInstaller::reset); connect(singlePage, &SingleInstallPage::requestUninstallConfirm, this, &DebInstaller::showUninstallConfirmPage); m_lastPage = singlePage; m_centralLayout->addWidget(singlePage); } else { // multiple packages install titlebar()->setTitle(tr("Bulk Install")); MultipleInstallPage *multiplePage = new MultipleInstallPage(m_fileListModel); connect(multiplePage, &MultipleInstallPage::back, this, &DebInstaller::reset); connect(multiplePage, &MultipleInstallPage::requestRemovePackage, this, &DebInstaller::removePackage); m_lastPage = multiplePage; m_centralLayout->addWidget(multiplePage); } // switch to new page. m_centralLayout->setCurrentIndex(1); } SingleInstallPage *DebInstaller::backToSinglePage() { Q_ASSERT(m_centralLayout->count() == 3); QWidget *confirmPage = m_centralLayout->widget(2); m_centralLayout->removeWidget(confirmPage); confirmPage->deleteLater(); SingleInstallPage *p = qobject_cast(m_centralLayout->widget(1)); Q_ASSERT(p); return p; } deepin-deb-installer-1.2.4/debinstaller.h000066400000000000000000000033501325164132300203270ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef DEBINSTALLER_H #define DEBINSTALLER_H #include #include #include class FileChooseWidget; class DebListModel; class SingleInstallPage; class DebInstaller : public Dtk::Widget::DMainWindow { Q_OBJECT public: DebInstaller(QWidget *parent = 0); ~DebInstaller(); protected: void keyPressEvent(QKeyEvent *e); void dragEnterEvent(QDragEnterEvent *e); void dropEvent(QDropEvent *e); private slots: void onPackagesSelected(const QStringList &packages); void showUninstallConfirmPage(); void onUninstallAccepted(); void onUninstallCalceled(); void onAuthing(const bool authing); void reset(); void removePackage(const int index); private: void refreshInstallPage(); SingleInstallPage *backToSinglePage(); private: QPointer m_lastPage; DebListModel *m_fileListModel; QStackedLayout *m_centralLayout; FileChooseWidget *m_fileChooseWidget; }; #endif // DEBINSTALLER_H deepin-deb-installer-1.2.4/deblistmodel.cpp000066400000000000000000000350011325164132300206570ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "deblistmodel.h" #include "packagesmanager.h" #include #include #include #include #include #include #include #include using namespace QApt; bool isDpkgRunning() { QProcess proc; proc.start("ps", QStringList() << "-e" << "-o" << "comm"); proc.waitForFinished(); const QString output = proc.readAllStandardOutput(); for (const auto &item : output.split('\n')) if (item == "dpkg") return true; return false; } const QString workerErrorString(const int e) { switch (e) { case FetchError: case DownloadDisallowedError: return QApplication::translate("DebListModel", "Installation failed, please check your network connection"); case NotFoundError: return QApplication::translate("DebListModel", "Installation failed, please check updates in Control Center"); case DiskSpaceError: return QApplication::translate("DebListModel", "Installation failed, insufficient disk space"); } return QApplication::translate("DebListModel", "Installation Failed"); } DebListModel::DebListModel(QObject *parent) : QAbstractListModel(parent), m_workerStatus(WorkerPrepare), m_packagesManager(new PackagesManager(this)) { } bool DebListModel::isReady() const { return m_packagesManager->isBackendReady(); } const QList DebListModel::preparedPackages() const { return m_packagesManager->m_preparedPackages; } QModelIndex DebListModel::first() const { return index(0); } int DebListModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); return m_packagesManager->m_preparedPackages.size(); } QVariant DebListModel::data(const QModelIndex &index, int role) const { const int r = index.row(); const DebFile *deb = m_packagesManager->package(r); switch (role) { case WorkerIsPrepareRole: return isWorkerPrepare(); case ItemIsCurrentRole: return m_currentIdx == index; case PackageNameRole: return deb->packageName(); case PackagePathRole: return deb->filePath(); case PackageVersionRole: return deb->version(); case PackageVersionStatusRole: return m_packagesManager->packageInstallStatus(r); case PackageDependsStatusRole: return m_packagesManager->packageDependsStatus(r).status; case PackageInstalledVersionRole: return m_packagesManager->packageInstalledVersion(r); case PackageAvailableDependsListRole: return m_packagesManager->packageAvailableDepends(r); case PackageReverseDependsListRole: return m_packagesManager->packageReverseDependsList(deb->packageName(), deb->architecture()); case PackageDescriptionRole: return deb->shortDescription(); case PackageFailReasonRole: return packageFailedReason(r); case PackageOperateStatusRole: if (m_packageOperateStatus.contains(r)) return m_packageOperateStatus[r]; else return Prepare; case Qt::SizeHintRole: return QSize(0, 60); default:; } return QVariant(); } void DebListModel::installAll() { Q_ASSERT_X(m_workerStatus == WorkerPrepare, Q_FUNC_INFO, "installer status error"); if (m_workerStatus != WorkerPrepare) return; m_workerStatus = WorkerProcessing; m_operatingIndex = 0; // emit workerStarted(); // start first installNextDeb(); } void DebListModel::uninstallPackage(const int idx) { Q_ASSERT(idx == 0); Q_ASSERT_X(m_workerStatus == WorkerPrepare, Q_FUNC_INFO, "installer status error"); m_workerStatus = WorkerProcessing; m_operatingIndex = idx; DebFile *deb = m_packagesManager->package(m_operatingIndex); const QStringList rdepends = m_packagesManager->packageReverseDependsList(deb->packageName(), deb->architecture()); Backend *b = m_packagesManager->m_backendFuture.result(); for (const auto &r : rdepends) b->markPackageForRemoval(r); b->markPackageForRemoval(deb->packageName() + ':' + deb->architecture()); // uninstall qDebug() << Q_FUNC_INFO << "starting to remove package: " << deb->packageName() << rdepends; refreshOperatingPackageStatus(Operating); Transaction *trans = b->commitChanges(); connect(trans, &Transaction::progressChanged, this, &DebListModel::transactionProgressChanged); connect(trans, &Transaction::statusDetailsChanged, this, &DebListModel::appendOutputInfo); connect(trans, &Transaction::statusChanged, this, &DebListModel::onTransactionStatusChanged); connect(trans, &Transaction::errorOccurred, this, &DebListModel::onTransactionErrorOccurred); connect(trans, &Transaction::finished, this, &DebListModel::uninstallFinished); connect(trans, &Transaction::finished, trans, &Transaction::deleteLater); m_currentTransaction = trans; trans->run(); } void DebListModel::removePackage(const int idx) { Q_ASSERT_X(m_workerStatus == WorkerPrepare, Q_FUNC_INFO, "installer status error"); m_packagesManager->removePackage(idx); } void DebListModel::appendPackage(DebFile *package) { Q_ASSERT_X(m_workerStatus == WorkerPrepare, Q_FUNC_INFO, "installer status error"); m_packagesManager->appendPackage(package); } void DebListModel::onTransactionErrorOccurred() { Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); Transaction *trans = static_cast(sender()); const QApt::ErrorCode e = trans->error(); Q_ASSERT(e); qWarning() << Q_FUNC_INFO << e << workerErrorString(e); qWarning() << trans->errorDetails() << trans->errorString(); if (trans->isCancellable()) trans->cancel(); if (e == AuthError) { trans->deleteLater(); qDebug() << "reset env to prepare"; // reset env emit lockForAuth(false); m_workerStatus = WorkerPrepare; return; } // DO NOT install next, this action will finished and will be install next automatic. trans->setProperty("exitStatus", QApt::ExitFailed); } void DebListModel::onTransactionStatusChanged(TransactionStatus stat) { switch (stat) { case TransactionStatus::AuthenticationStatus: emit lockForAuth(true); break; case TransactionStatus::WaitingStatus: emit lockForAuth(false); break; default:; } } void DebListModel::reset() { Q_ASSERT_X(m_workerStatus == WorkerFinished, Q_FUNC_INFO, "worker status error"); m_workerStatus = WorkerPrepare; m_operatingIndex = 0; m_packageOperateStatus.clear(); m_packageFailReason.clear(); m_packagesManager->reset(); } void DebListModel::bumpInstallIndex() { Q_ASSERT_X(m_currentTransaction.isNull(), Q_FUNC_INFO, "previous transaction not finished"); // install finished if (++m_operatingIndex == m_packagesManager->m_preparedPackages.size()) { qDebug() << "congraulations, install finished !!!"; m_workerStatus = WorkerFinished; emit workerFinished(); emit workerProgressChanged(100); emit transactionProgressChanged(100); return; } // install next installNextDeb(); } void DebListModel::refreshOperatingPackageStatus(const DebListModel::PackageOperationStatus stat) { m_packageOperateStatus[m_operatingIndex] = stat; const QModelIndex idx = index(m_operatingIndex); emit dataChanged(idx, idx); } QString DebListModel::packageFailedReason(const int idx) const { const auto stat = m_packagesManager->packageDependsStatus(idx); if (stat.isBreak()) { if (!stat.package.isEmpty()) return tr("Broken Dependencies: %1").arg(stat.package); if (m_packagesManager->isArchError(idx)) return tr("Unmatched package architecture"); const auto conflict = m_packagesManager->packageConflictStat(idx); if (!conflict.is_ok()) return tr("Broken Dependencies: %1").arg(conflict.unwrap()); // return tr("Conflicts: %1").arg(conflict.unwrap()); Q_UNREACHABLE(); } Q_ASSERT(m_packageOperateStatus.contains(idx)); Q_ASSERT(m_packageOperateStatus[idx] == Failed); Q_ASSERT(m_packageFailReason.contains(idx)); return workerErrorString(m_packageFailReason[idx]); } void DebListModel::onTransactionFinished() { Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); Transaction *trans = static_cast(sender()); // prevent next signal disconnect(trans, &Transaction::finished, this, &DebListModel::onTransactionFinished); // report new progress emit workerProgressChanged(100. * (m_operatingIndex + 1) / m_packagesManager->m_preparedPackages.size()); DebFile *deb = m_packagesManager->package(m_operatingIndex); qDebug() << "install" << deb->packageName() << "finished with exit status:" << trans->exitStatus(); if (trans->exitStatus()) { qWarning() << trans->error() << trans->errorDetails() << trans->errorString(); m_packageFailReason[m_operatingIndex] = trans->error(); refreshOperatingPackageStatus(Failed); emit appendOutputInfo(trans->errorString()); } else if (m_packageOperateStatus.contains(m_operatingIndex) && m_packageOperateStatus[m_operatingIndex] != Failed) { refreshOperatingPackageStatus(Success); } // delete trans; trans->deleteLater(); m_currentTransaction = nullptr; bumpInstallIndex(); } void DebListModel::onDependsInstallTransactionFinished() { Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); Transaction *trans = static_cast(sender()); const auto ret = trans->exitStatus(); DebFile *deb = m_packagesManager->package(m_operatingIndex); qDebug() << "install" << deb->packageName() << "dependencies finished with exit status:" << ret; if (ret) qWarning() << trans->error() << trans->errorDetails() << trans->errorString(); if (ret) { // record error m_packageFailReason[m_operatingIndex] = trans->error(); refreshOperatingPackageStatus(Failed); emit appendOutputInfo(trans->errorString()); } // delete trans; trans->deleteLater(); m_currentTransaction = nullptr; // check current operate exit status to install or install next if (ret) bumpInstallIndex(); else installNextDeb(); } void DebListModel::installNextDeb() { Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); Q_ASSERT_X(m_currentTransaction.isNull(), Q_FUNC_INFO, "previous transaction not finished"); if (isDpkgRunning()) { qDebug() << "dpkg running, waitting..."; QTimer::singleShot(1000 * 5, this, &DebListModel::installNextDeb); return; } // fetch next deb DebFile *deb = m_packagesManager->package(m_operatingIndex); auto * const backend = m_packagesManager->m_backendFuture.result(); Transaction *trans = nullptr; // reset package depends status m_packagesManager->resetPackageDependsStatus(m_operatingIndex); // check available dependencies const auto dependsStat = m_packagesManager->packageDependsStatus(m_operatingIndex); if (dependsStat.isBreak()) { refreshOperatingPackageStatus(Failed); bumpInstallIndex(); return; } else if (dependsStat.isAvailable()) { Q_ASSERT_X(m_packageOperateStatus[m_operatingIndex] == Prepare, Q_FUNC_INFO, "package operate status error when start install availble dependencies"); const QStringList availableDepends = m_packagesManager->packageAvailableDepends(m_operatingIndex); for (auto const &p : availableDepends) backend->markPackageForInstall(p); qDebug() << Q_FUNC_INFO << "install" << deb->packageName() << "dependencies: " << availableDepends; trans = backend->commitChanges(); connect(trans, &Transaction::finished, this, &DebListModel::onDependsInstallTransactionFinished); } else { qDebug() << Q_FUNC_INFO << "starting to install package: " << deb->packageName(); trans = backend->installFile(*deb); connect(trans, &Transaction::progressChanged, this, &DebListModel::transactionProgressChanged); connect(trans, &Transaction::finished, this, &DebListModel::onTransactionFinished); } // NOTE: DO NOT remove this. // see: https://bugs.kde.org/show_bug.cgi?id=382272 trans->setLocale(".UTF-8"); connect(trans, &Transaction::statusDetailsChanged, this, &DebListModel::appendOutputInfo); connect(trans, &Transaction::statusDetailsChanged, this, &DebListModel::onTransactionOutput); connect(trans, &Transaction::statusChanged, this, &DebListModel::onTransactionStatusChanged); connect(trans, &Transaction::errorOccurred, this, &DebListModel::onTransactionErrorOccurred); m_currentTransaction = trans; m_currentTransaction->run(); } void DebListModel::onTransactionOutput() { Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); Transaction *trans = static_cast(sender()); Q_ASSERT(trans == m_currentTransaction.data()); refreshOperatingPackageStatus(Operating); disconnect(trans, &Transaction::statusDetailsChanged, this, &DebListModel::onTransactionOutput); } void DebListModel::uninstallFinished() { Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); qDebug() << Q_FUNC_INFO; m_workerStatus = WorkerFinished; refreshOperatingPackageStatus(Success); emit workerFinished(); } void DebListModel::setCurrentIndex(const QModelIndex &idx) { if (m_currentIdx == idx) return; const QModelIndex index = m_currentIdx; m_currentIdx = idx; emit dataChanged(index, index); emit dataChanged(m_currentIdx, m_currentIdx); } deepin-deb-installer-1.2.4/deblistmodel.h000066400000000000000000000074221325164132300203320ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef DEBLISTMODEL_H #define DEBLISTMODEL_H #include #include #include #include #include #include class PackagesManager; class DebListModel : public QAbstractListModel { Q_OBJECT public: explicit DebListModel(QObject *parent = 0); enum PackageRole { PackageNameRole = Qt::DisplayRole, UnusedRole = Qt::UserRole, WorkerIsPrepareRole, ItemIsCurrentRole, PackageVersionRole, PackagePathRole, PackageInstalledVersionRole, PackageDescriptionRole, PackageVersionStatusRole, PackageDependsStatusRole, PackageAvailableDependsListRole, PackageFailReasonRole, PackageOperateStatusRole, PackageReverseDependsListRole, }; enum WorkerStatus { WorkerPrepare, WorkerProcessing, WorkerFinished, }; enum PackageInstallStatus { NotInstalled, InstalledSameVersion, InstalledEarlierVersion, InstalledLaterVersion, }; enum PackageDependsStatus { DependsOk, DependsAvailable, DependsBreak, }; enum PackageOperationStatus { Prepare, Operating, Success, Failed, }; void reset(); bool isReady() const; bool isWorkerPrepare() const { return m_workerStatus == WorkerPrepare; } const QList preparedPackages() const; QModelIndex first() const; int rowCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role) const override; signals: // void workerStarted() const; void lockForAuth(const bool lock) const; void workerFinished() const; void workerProgressChanged(const int progress) const; void transactionProgressChanged(const int progress) const; void appendOutputInfo(const QString &info) const; void packageOperationChanged(const QModelIndex &index, int status) const; void packageDependsChanged(const QModelIndex &index, int status) const; public slots: void setCurrentIndex(const QModelIndex &idx); void installAll(); void uninstallPackage(const int idx); void removePackage(const int idx); void appendPackage(QApt::DebFile *package); void onTransactionErrorOccurred(); void onTransactionStatusChanged(QApt::TransactionStatus stat); private: void bumpInstallIndex(); void onTransactionOutput(); void onTransactionFinished(); void onDependsInstallTransactionFinished(); void installNextDeb(); void uninstallFinished(); void refreshOperatingPackageStatus(const PackageOperationStatus stat); QString packageFailedReason(const int idx) const; private: int m_workerStatus; int m_operatingIndex; QModelIndex m_currentIdx; PackagesManager *m_packagesManager; QPointer m_currentTransaction; QHash m_packageOperateStatus; QHash m_packageFailReason; }; #endif // DEBLISTMODEL_H deepin-deb-installer-1.2.4/deepin-deb-installer.applications000066400000000000000000000003131325164132300241010ustar00rootroot00000000000000 Deepin deb installer command=deepin-deb-installer name=Install Package (Deepin deb installer) can_open_multiple_files=true expects_uris=false requires_terminal=false mime_types=application/x-deb deepin-deb-installer-1.2.4/deepin-deb-installer.desktop000066400000000000000000000011401325164132300230630ustar00rootroot00000000000000[Desktop Entry] Name=Deepin Package Manager Name[zh_CN]=深度软件包管理器 GenericName=Deepin Package Manager GenericName[zh_CN]=深度软件包管理器 Comment=Deepin Package Manager is used to help users install and remove local software, supports to bulk install. Comment[zh_CN]=深度软件包管理器用于帮助用户安装和卸载本地软件,支持批量安装。 Exec=deepin-deb-installer %f Icon=deepin-deb-installer Terminal=false Type=Application Categories=System; MimeType=application/vnd.debian.binary-package;application/x-deb; StartupNotify=true Keywords=package;apt;dpkg;install deepin-deb-installer-1.2.4/dmanual/000077500000000000000000000000001325164132300171265ustar00rootroot00000000000000deepin-deb-installer-1.2.4/dmanual/common/000077500000000000000000000000001325164132300204165ustar00rootroot00000000000000deepin-deb-installer-1.2.4/dmanual/common/deepin-deb-installer-48px.svg000066400000000000000000000353431325164132300257370ustar00rootroot00000000000000 软件包安装器-48px Created with Sketch. deepin-deb-installer-1.2.4/dmanual/common/icon_commoncoperat.svg000066400000000000000000000056761325164132300250330ustar00rootroot00000000000000 ]> deepin-deb-installer-1.2.4/dmanual/common/icon_commoncoperat_small.svg000066400000000000000000000054071325164132300262130ustar00rootroot00000000000000 ]> deepin-deb-installer-1.2.4/dmanual/common/icon_optionsetting.svg000066400000000000000000000036771325164132300250720ustar00rootroot00000000000000 选项设置-64px Created with Sketch. deepin-deb-installer-1.2.4/dmanual/common/icon_optionsetting_small.svg000066400000000000000000000035751325164132300262570ustar00rootroot00000000000000 选项设置-24px Created with Sketch. deepin-deb-installer-1.2.4/dmanual/common/icon_overview.svg000066400000000000000000000014021325164132300240120ustar00rootroot00000000000000 deepin-deb-installer-1.2.4/dmanual/common/icon_overview_small.svg000066400000000000000000000015021325164132300252030ustar00rootroot00000000000000 deepin-deb-installer-1.2.4/dmanual/en_US/000077500000000000000000000000001325164132300201375ustar00rootroot00000000000000deepin-deb-installer-1.2.4/dmanual/en_US/icon/000077500000000000000000000000001325164132300210675ustar00rootroot00000000000000deepin-deb-installer-1.2.4/dmanual/en_US/icon/Esc.svg000066400000000000000000000040521325164132300223230ustar00rootroot00000000000000 deepin-deb-installer-1.2.4/dmanual/en_US/icon/F1.svg000066400000000000000000000017141325164132300220610ustar00rootroot00000000000000 deepin-deb-installer-1.2.4/dmanual/en_US/icon/arrow_down.svg000066400000000000000000000014421325164132300237720ustar00rootroot00000000000000 deepin-deb-installer-1.2.4/dmanual/en_US/icon/arrow_up.svg000066400000000000000000000014341325164132300234500ustar00rootroot00000000000000 deepin-deb-installer-1.2.4/dmanual/en_US/icon/deepin-deb-installer-48px.svg000066400000000000000000000353431325164132300264100ustar00rootroot00000000000000 软件包安装器-48px Created with Sketch. deepin-deb-installer-1.2.4/dmanual/en_US/icon/icon_menu.svg000066400000000000000000000016661325164132300235750ustar00rootroot00000000000000 deepin-deb-installer-1.2.4/dmanual/en_US/icon/notes.svg000066400000000000000000000072531325164132300227470ustar00rootroot00000000000000 deepin-deb-installer-1.2.4/dmanual/en_US/icon/tips.svg000066400000000000000000000052441325164132300225740ustar00rootroot00000000000000 deepin-deb-installer-1.2.4/dmanual/en_US/index.md000066400000000000000000000066071325164132300216010ustar00rootroot00000000000000# Deepin Package Manager |../common/deepin-deb-installer-48px.svg| ## Overview|../common/icon_overview.svg| Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. ## Basic Operations|../common/icon_commoncoperat.svg| ### Run Deepin Package Manager - Double click on a .deb package to run. - Click on the icon of Deepin Package Manager to run. ![1|add](png/add.png) ### Single Install 1. On Deepin Package Manager interface, click on **Select File** to add a .deb package. 2. The application will detect the package status: - Newly installed, select **Install** to continue. - Other version installed, select **Renstall** to continue or **Remove** to uninstall. 3. Password required to continue when clicking on **Install** or **Renstall**. 4. Click on ![arrow_up](icon/arrow_up.svg) or ![arrow_down](icon/arrow_down.svg) to display or collapse the installing process. 5. Click on **Back** to newly add or click on **OK** to exit. > ![notes](icon/notes.svg): You can also drag and drop file to Deepin Package Manager to add. ![1|single-install](png/single-install.png) ### Bulk Install 1. On Deepin Package Manager interface, click on **Select File** to add .deb packages. 2. Click on the top right Delete button if you want to delete one. 3. Password required to continue when clicking on **Install**. 4. Click on ![arrow_up](icon/arrow_up.svg) or ![arrow_down](icon/arrow_down.svg) to display or collapse the installing process. 5. The installation status will be displayed on the right of each package, such as installed, installing and failed. 6. Click on **Back** to newly add or click on **OK** to exit. > ![notes](icon/notes.svg): No more file can be added after you successfully added multiple files in one time. ![1|bulk-install](png/bulk-install.png) ### Unable to Install 1. On Deepin Package Manager interface, click on **Select File** to add a .deb package. 2. View the reason unable to install: broken dependencies or unmatched package architecture. 3. Click on **Back** to newly add or click on **OK** to exit. ![1|unable](png/unable.png) ### Uninstall 1. On Deepin Package Manager interface, click on **Select File** to add a .deb package. 2. The application will detect the package status: - Newly installed, select **Install** to continue. - Other version installed, select **Renstall** to continue or **Remove** to uninstall. 3. Click on **Remove**, then there will be a prompt and click on **Confirm** to unistall. 4. Click on ![arrow_up](icon/arrow_up.svg) or ![arrow_down](icon/arrow_down.svg) to display or collapse the uninstall process. 5. Click on **Back** to newly add or click on **OK** to exit. ![1|remove](png/remove.png) ## Main Menu|../common/icon_optionsetting.svg| ### Help You can click to view the manual, which will help you further know and use Deepin Package Manager. 1. On Deepin Package Manager interface, click on ![icon_menu](icon/icon_menu.svg). 2. Click on **Help**. 3. View the manual. ![1|heip](png/help.png) ### About You can click to view the version description. 1. On Deepin Package Manager interface, click on ![icon_menu](icon/icon_menu.svg). 2. Click on **About**. 3. View the version description. ![0|about](png/about.png) ### Exit You can click to exit Deepin Package Manager. 1. On Deepin Package Manager interface, click on ![icon_menu](icon/icon_menu.svg). 2. Click on **Exit** to exit. deepin-deb-installer-1.2.4/dmanual/en_US/png/000077500000000000000000000000001325164132300207235ustar00rootroot00000000000000deepin-deb-installer-1.2.4/dmanual/en_US/png/about.png000066400000000000000000000557361325164132300225630ustar00rootroot00000000000000PNG  IHDRa2wutEXtSoftwareAdobe ImageReadyqe<(iTXtXML:com.adobe.xmp 1WXLIDATx`ǿ{5$@H E@ETxgÊ C]*S,ػA$~}o3{r ]rپsofvFC#$ B $ Ӷ ҡ!+Ikb}('B!1q~։ !$ʈB\ ?cͫQLőP]D!$Z>2%( EO8#%B!E9+ĒE+U̐Sbx![N2)).-BF!h)!P?ϝwyy֭Zd5!ht][nylK^G(RBg-BDR'O<'-d&!O:gypdeT. E͛9IK!lٲˤbFHQ,"RMc qBC0tIw Y' %T+2ltxB Bi,%)'^%"%b"BdT#+"("B!IDZ܈(!%lR@NSbHRr A9Y=BEDHx($jhF"c!tB/,yFN*:2"$')( Q##BBPRPC:,:r2E _%rNv2>u)B("B(vAXLƖ AaI+PQ̪b;FF M>(Z:(1ZP1Eb~63u ;!O#"r *hh)H5&%!Xí݌ d~67\є*? (Z2I@H='>Eƒ"YvP"XXz_H *=dXUԔ氅zZ$aIO5#ŐVpg9R*yF>n ]FDJ|9 edUWiJ. `x KI/WbQExZ!iDOڴ&']Ҧ9l. \ސ2edQr[vdfJ"!D4<#Qg3m[`(RJd$(Y 0V)"[#q@WVoBbWEf3ok eȨJTPD'NNHj4@0׶5O @F>2S!dd[ŐgZ`Q֩j5*& ; %""d?p]ZWԊB=/3TFnONvKr2BˇE*lm2[` N#S@""dTpEk1!%NP82%U-%J-6 V՘AjaOJEDHPdl 𹡫1"VzkGݣQOCOE]"Lmd8 _Rd,/jP8%>R-:[&#<~IMJLfd[ (ؙ{^JTVVDZvxHp.݊`p μRT~A(S# 9$"]&aÚPSͨ:BRb2d & !S>*|Lwܣz<Ђ ˛C4*?R) {-T,X)P~[T}QյD<^U=8D52r,#""o|YG HMumhՌⰣeE,Eà-Ϫfht4ΈғV)$&iTyRt]WkWD("BGMf~-ע2^4C8@ĞZ9d*F7+B+[f ]@u âZi^XCU=Zۍ^D#Sr:F$DEDM IɧaDRx|yj8o]CF.!A Zdp#))߮CpYQަGD;[5P^Uĕl^QˢJ@#nQ#Bc6amyо;H OEjRB2s42^EDnFeJHjR2[)9E6et]9P]D7.#.~ӀO5~J}HWlƎ_:jIg4Së:*~4g6VbR٪R"!jUfIFd-77Z!J]з8>܎_=ta }6w4EdJ&68CQ%Մ="1ߩR&""d?nGR )$5>T ~'jG VFNT 1?B yLTSQ9RT"w5V=PC $'V]m@=-V2V}B5_KLLd7@""dwI,3!Ң VQj)-uJF\?X'KN8ڷ_X[ۛ»h-:8vCUuѹ [֪ K2#蟡 _*Q@ca(XJ@nFhiȼe9{0Z\3 G $!PnM[S4^dլ6os["a5=`*>Ys,!s5~ {MViHz{v0"\W1]ciHJJ)!J0""d)𻒹*!90 ͨ3ܟ.Vc*> fL̅w@1}ҷ )F(S8e@ܦx"c")LjFil)r(N5L`mB1;2USn|\c!%ce /l*B QrOd{9[-ꢧk=Tm40mZ٠C`MO-)2_nUlIEDH#"!7\dH}"z+0ᙩH>?R ^TߣEH ]w2:)q\c<Y9lFttyuj%Wg/ hmWR""d_D4sH.k,s'䴈IEN ?NȮb1 /,n; o [T:fuEU%9<72Ix0R {N Cl$/}˒/+'x#&4bXQ 8VVwA㳥Y"ғ.mxD7-ߡPUaIZ-Hꚃ!񠜐|qi+rR$DQB!1*RC2|\Y[C{?zWFQJz(kKG߮c 1 IAkOEBjRjh]d'lM("B"*DDu *<⪊T1[`k*>[/i;N?im8_t =8Di"BrUV:nQ-1GUWႳe:NGkC4>'ưii5( ?ȾvSǕ^|F=iW5߮خ!{tCw)pyܰFKXg(ˬQ_%D("OK)=&FP `-Ȗsov8é]B%FUKvucv$d0QB""iGHՃ1F@JHf%CWW[QQalbP1&%)ylcᙽJu"\hnK&*%>ZՌ )V=\.clJYo)%Î#$=FĂY43+buj1+#!M_F6 ~id@4ȣɨ$%Ye_Ӑ"|\b[bP¨GJZi" \jHpxWˤ\ [S?P~˂hUqWcߪH@ x7Gu4j$?'BF#*"6UXaFtQB +Ă)j>d"II#Je%#?IMu3Ņ:exIFbiv'-R ]v}""d߈l拨qrBѪNC9Sbڨߔ̚(IES9i6X4KTڵΤjUWV/ b|Z8a.7ł )t dz6nmQB""d rG !,C3ԘAEI  hFќԺ*98]Gڿ2݁IuSo(4S*J8yLmRhTDierA*ALB .-tճz2"!FD2$!+P1^4_ ߭4#RPR*\Ɂ?lF-[XcO5h+Yzq]> _e4!Tcmb0yX:e}U vCBF rWv9 iX,pجF6{$It! ?҂;h+]YNU0:6 ߳Ԃn˨ܢAUErg._EWsz-8rϐjr2D("Bh(ԀbDA6kQNىhm!Uas$UՈ )܂s ݡviVC~v@N\˒qNJ ڪa`+`إK\v& Ő:Wu C(#B1$#j]ԫ2r%$g80%BBCQP IяҌ# R5r0UCf8Qq6khP%Y})zf|ED>)2Z0Q[˧fUw=TNSST}@݊n:ܺf4O3:Sb5搊ғQ CSՓY'%%8B"!T݊2L!Ed)ꌾfq1|Cx;kujl!F3Z3zWuR>긑Q*>TDJ }%L1j#Bٱi񆪋ɴe5O3JS~2 "!C$dFL!G ZgHE`gxRhq{1BYK]zld(PDB2#%";8L-733G_lP_تx0֘F9ԬY3#2RQIt`'!m)ɩ(( PDBLԼJHJfݍ_]c))cDEDEK|UIIcEvri0c)ٙ(!B("B)ŌI"A%x޷Z/))NABrGHUʨEII5hPL,!N4ٸ!$>&!䣄5(9)(>.HmfvCˆFGH*R/*z)6N KMAaDD_̗bd=Lyt86&!,X ;FjR1_U#ˆ&x/Ū: /;UZEoC ˆ=! 8J.#E,!CLP@4BK4![#$B#"B!!BB!BED!PDB("B!""BB!!B!PD4E4ЙPD.oC6h&4iŰ'>Ie%\y;-8߁7G/wB1bxeYY 1w0n_䯹ЙX;`*o#)P 8(>c/}7/ƽ#:B߅06~t5]>[_ԊPe1VF/l4{kiϷDǓxѷK{t2Y#"d;~"޵_v^0 -e .đWZ~84l}}ˆ*"L?< y;O+SݷPpn[Hs&z.R]3OK;u?_j|Ҋ_^0h!vzU'sxb]ŸJ㷥d}.b)B<_٨c7N_ku\9 8hyF|7D0xd({qow/~0:s1QQ^N%xipHڃGSD a]N rJS2#W'ߎoww]W/+r)-Ēv]&g#v\؇Ƭ:Vk+߱HDYbT/Eex^EAⶅs1Dy-[m'F?VJnrڋs_/5ωӻOQloRiNzquN9Ug5AQFWʭ+gPg_fA"Lքmw';Hܾ#6){ 咰SÎI;b*W $nEI#{w =~/%U_ub =Oǩ},(aVW^dmcDPt#Gb8bxuxpϵgAzhSli98e%ŧ@t=ټ،W~hs;VoÈZ o `=pFǟ M wx[i102eg7|k:i,Esd#PR&"E-ظYo[T5Nmz-\3-K6:O}ח/udGyYFjeא:݂k^LAn?N=l iE՛}g9*x@y26la=+:{2\}df̻A vBX䠭B5컩%<~/ Zf=lԐiAܕȞPr& #A_xXK3tȖѢUU c< [2F=+f^G4"vka[> Ro눋nOL<O/^4ygQd)c>{ y7bBL 㳱*u:$ƛ?֎1K`fEʏ?ųsW#5Eq||pI(|$ z|p fs1J}زp.^xk< 6򻩗d =q!n0nU ]/+; =[B= nwh""qux)xޚ9zјFq7kiøk4dXsu&>1W s&7NםwSs?_kKtvn}X06GT4i Gljmॶ`\]XH=4"{%" =<9YrZĤ:PoЏƨ ڰwǻI#E?YN4_%_Nv2~ZJGČv)~`F4,#dNH! nZ"UWB8{.L#v!-sJimaE+OE'6AfఎBȞ !4m("B!!B!PDBED!""B("B!!BfބWטe0}l c"֖mԙ8,oxtr2'9uЅ.WS ?]cp@Ɋ0ﱱ"-)ǟze O-(sq ]X]O oa4-M?K \Dˁgn)]cp{|i%:&\ Q/">xdm] h,tHC_+fD -R/"0)9SnNn?6\w%LVWbCu~fkh>’]08aAn2f"sKit.nk6.Ê X]w EEGJDZ68CE]Zס8Wȃ[1xAȌF`JArOOF3ѯ12; 7X'pbh*0})ꕠIdঁ@ϖ!|^`qYidw6l_Z \_CD 4mXGD,A~ݮIH1{E%MF^o4NB #KzݤN修I.ᴃjKex|$vXQ$У"ˆF:({tJ?d,;MNYmdшP݋5Y“*ܺz@ekoR\]ӫnB:Spm_uy(e6Gbfdֹ8m._% [aDD.b%? _csҾ\-d{c[E(JK%.sN骆pa 3BR,mհ]v_GM k<Á:6]VO]3~1/߉[67ݼ-'!kjn\CoUS qg8 |^[օqc?/S0rL<؉Yc;({w } G^g H^6‡ />(B>-6LqHo'Ȍx~@~푎UsZcؗzHYw:V˧åxemV(y%{1r|ev[+w19VG YŘ/F-0=مZs]wX}myk\"9p{ ,_TbA N^dadkdLH@f_Cm贛׋&j:V8_-ISG^@PY9Kum"zwklN8Ǘa c'[Jwk^'cq"T+2\%[AP-5MY"|:'8JV_]UHQ T~\aA81X(f%<"Աkňt-"uH^F?$tyS6w№><岤=(Y\>wt/~ۇr?Ћpb딈32XI8܌lv8=֔9yHǾ@=:^X3 pr;f]#Qj6L9ή(Ǒ!BS׮NFxo:/*F5N/C~W'r8ʁCۗwy+߉0PDd"ÍqF,:.X'r1|&!c [:^@dgW؎rvLyŚ =y-pŔ",@ӓ]JˆVPUF2jGjGX 6ցrAf$܋W6y0PoY2 r;p H,у姆g8pj;tFZ G$\\֣lHXؚ[ZFbWCng;xO=o-/X".'Uҋz&QDQ16AeGӒ̀j>J)]sGgBIVu+uub80s 8l@:N=ȋX9P{eH3҃/ǔؙ,qDya8;ZayLU^kr꤀%W3c蜊On7K1`0tt3<|w6>(b2y>g3N^ 85Uf:rAmS1>bbO\>lv_:x"tR76ad ZNt͋~ձd 5M,>5XkE+2Ph2r KjKZy/K3 'k}H2;e^~w .k d! aGؼ%dMIY ɇvJ/f3d. `izzo‚!^\h%4 M.swt/~ۇ~<e]-#?:χҏ'?XԿF?Q}naj? y y~|>_~Nme!2:CG wVC2<+N/ӛDzb<)/߉ |*,tYXUojÔrya.,=Ixdt -{:9_GvQfV0vk7NOǠ5wN'mDZ/zAEMn:]~)F3rNf9\~5yQ1:%O/C~W'r- wMWSR1pM :%^}vgc'>h F\4E82FLBdiwq :h0L9_NGL!{ ?Vx{0|xxt9~%,/D2ȨEsBdX4G!iCB!PDBED!""B("B!!BB!BED!PDB("B!""BB!!B!PD{|\׷Æ`Ѹƽ%åb`氃{<1SqP.yߕ paWPÿF] G )o0a?; }[Oc;nj: up- >=U2ľGc;阽k̚t*&;5#p #1rH}d]_ Y|qNj&} bśZѧ?^7M5;q)ψF/V@Uq׋|_ws~*] qT}gq8n\KwO5~{lޗ!4Uqޠ Ĝ~Z1xWl5F#3NOV~/xR7 z꼆H9B\N#-æ=r QGa5-k/ŗ܃W~!%Edž 췅È"af c'ķ>*k{ '{ٷZhZh< O2K\x">m)]4 _@{[G=Ǯ%LuߚUCq{Fܕ|r-ZXU545ZZ8~O)=bu߿#jR’bB; FE㍵m9SP-V-(1n&yxCqxmWYl͑??ǗkuNN~ߕ 5۱9;~!Z{A}/J OX9MQ'7㶅pʰ\î\boN=˪k^[ vWz4eDNZXoxң\=*t8؀k/< 5,p#Oqg e'h^Gai ^ No-]p%vt7:9Gɡ%.}\6r|ϟf6t9?χ{Iaif^ל6!gg䦄q;iv$2N9S5u9ohzQLo@ezFʵ4캌kwO7~u<ض8].c0kɘyFph b̿S@'2wg 7s-էG2Jv1r빽kh7j{Ѿ>V!LZ#&{xr !GQa V1XĄB!!+$a,m@×/!e(Ġ3C(ES0i"0hK@#$# {{^87noݽ`AL)}?hCU ;1ZsSmx] AkF,L.~.޻Mرzd|K6py9:?ϙ)uhCɈ c&5Z61AnݔRYV 1>-vU{#cDF% iנVZsAt{kVI|ooZPzi>>^Zj牣|$~ &X͘:sTB~? "*wPZn[brpg8ixsn,VT/b˩f5'5Or5gtS6f?.=0F{T-'Cz(AeYغ~,j>\@m ʥЧmLzb-Ǿe8g{/b0~.WC_i.}"NL߃Ӯ;kbӖuHd jm- ‹x!oNGavO1~.)@{5.vatm4Ҏ_NهߧuBӗˑ1R>(+qV05xMl'LXk<oԖ7㑃y>2J3JHy KŠEcY<ɟ\\q7$mU-:!UXae#;hJ.YosHAR~]_^_V_Rʿ\I?Qd<"VQP+fŋ׉-r<%ީtoY"nGr?'&TF+',(p%%Z (DabFv.q*/] _ 1ja&'8-YH1<%#mI nMa:FF-9t>Lw\綊I|{4Y2% DlXa\~]?-naAhS6_&$W_v}qz;g"k#+'c21dNl><WXo=!-߈h>5m)0*w!r~j|RыkQNvF^ps;hkLk  Cg>K6H?%GK-SB'^#)oX~=Hel?)uolrF}f՟a"n܉a}GHLLY5[N5FF9hmu<HB(.Xp2:`n8P7/8pvclϊ mIp}|jMa6FZrXke :22>]{yB_)Gߜr|m`^zfAͶ<}\1 _| اavZ +ĈbtJKE{0r@83dϲ")@n/QLZx ZSn'K N`3PۃϾAu;lϓ_˔:c{d[9#LR~=ΧC3QR>C6mX&I\n&pi }g_;G4ޯČ^WyNܗ˫6"qhs?k8;â'~IK1Dk Lѻ|i6}k[D .\z-FnA2ObxkU&"75Gt(*s2~㣛g2kqFDt[q3b G5ѭ5ZȰ 61ADDD """DDDD """b1ADDD """DDDD """b1ADDD ""DCDDD$8#""fFSY< g gD0%/W.ݸq$"";Eh6deF_pHȎjxҌH,<uYE+YfjO A(Gx]t:#8DDd@WM67Nb\/ :N]½3*̊!01Fّay$ mَ|B޼&daCadH>_A$ $N>d+l4t$y?_IENDB`deepin-deb-installer-1.2.4/dmanual/en_US/png/add.png000066400000000000000000000463711325164132300221740ustar00rootroot00000000000000PNG  IHDRlqjtEXtSoftwareAdobe ImageReadyqe<(iTXtXML:com.adobe.xmp ^IgIDATx$WyWUI;V9"$DaG|̳`l}]x3ƀAp d @XA ]j6OPUzjjgfs>\Z~9qǑ}d?#4*ጷ !mDp g{a{ ws^;=OY$"tdsgH>z8;ɻӆ[6R&Bg7l&ȃ>kDay\`j.* ug$O$y;-qH|ɕW^Xj%rƽ8͛7|?ed##s/JO$󶷽ɟ'x3 B[ pQ _k׮[> <%?N9rgDީ"N)>u!mbN"?ke_}iΘ2D~M;2c_K/Ug>Yx<~D>|)ї/[`eCI%}ܴSj/Vg_ Axl _ȕW^ie.玟lФ/)E%ªeOϋ>2Hӗ4\.[|Yb\uUd 5X)9,*boFٶmaay˞Tgޒ޲g +=/}1+g?}Mw66kذq KM!88>aov,{;w1+r쨾Z&ۆ}GZ6ij}Džȣܙ!,}c]muGVU5W42.%9m6/ؖ3VrWj:Ɋ*^j+[9 åf`|Y^\yJdH+eÄ'YRd]uz= pe|Y~x^֭[u]YlفH"mWo~j D'm8vA0DkPRk~}6*Jj\h>8E0 A9"D"D"D"D"D"@"@"@ r@ r@9 r@9 r@9 r@9 r@9 r@9 rD9 rD9 rD9"0 =O^{pR83]aܱO2s@p#c[YGA~/D<.x]o%NoUH`M}>>NGR im+#kQ{vW1ڜ'G6D_OG~DIMnelv Hkߟ&S*v{&_v9"}cJa7uJ;g#t<{F9I (ȑ9"yDSѸZՕܜx fǛc"{F\w*(r׈=ޫ%w7yl2@0k$=C'NwyTr5-Sr G&$Q{D&z/,IKf#sD%oIt \'yI MK|"qP hָNAZ? 7}ꕒxIiW3U沣@|a},bA{e4- 9 mO HgL9Kyx+fU{w}lXv]f#yP72r[-kxZ24 Z;%7Xc06#t#vj`S)Y"Ev_[Z4TM;%0RwURԻVFC|qfs׈߃9'9t8$]wq;΋ $[IQeNj"|qRZ}],7ѽ?6EȼW*KO}zl״ pSg*2t~ސcdqĞ AƳbב:*<ZlC3z%H@GvCTzU"/KzpaQ@TY#ID퓿 A˟syaǤ`>1 r5*oG:*tg_`svVRZ\ɺ4춑MZRK5 l!n4)\hw>"Q hy]<t*"Óz`8w2+=M,y.'tdJ;J=}>}L}/kn+ }v JY*Ge\]H4NH\ fXl\dZ4݋S ]ۗ@/oQ_x R@,hrˠJ4*wz40WۏQI{FڲSY9ܕN9k[XZ4eLE^ڑ,bLv$7ZD4D=y6~LX3F5{GR]}X%[MG,GMv~F]GڭVmնciߴK.V6xQ'D_ZqO_Zf ̹UJEvȸw;2*EדF\+uZ*OF6oNEq;Ũ9X -΢'Z"NWo3QjTMnM FB)8]ew '/56!\ q׆@jųDډU^~=HI=GGGH4_aZvїd 0r4Qfmw4- '6vkڽd^GwIR9wm44﵇Z}%nɛ LC]Fd,yf>зfw-BDA;N6l6kIc$E'ZP(1-?;"8ly*M'Veu$#SˏDM&4WER8et?MFEIqMDo h=%In2>zZ{7v9*D&*FaI׻>;D%WXگLSVMáOj?_>Tr2yRV;Y@\-2V͋0nhSwF#3̧ę!T;/rGD }:e,&E`H:|?>aFruUK.>|4t?L GvJ\Ѷ[,GIFY}5IprvyRpCwJ;+h}_[rt>-l"$oEV'f: iek,r8cȼt@V+~-]ON' @@D~VqcvS^+;+Rc%}*p=Ssd\][yybRyY2+EIqaT`L|\ Jg7Y<*1qth"`vr#y2SRK& ՈxulMBWIe_#uD'UQIQӵj'}ӢBQϗd]:\:֣=NkF@sbXz^w_ﱒmMm-H}ϖW\,|dK?7oYYt.}[9krAV\%m|T&NZ`"㢕\k"}{Ȍ idtV-[("4qd޸N5K;g_#v@9_M/qTTejMmKs|RZ\f+cnGqϞZwNcN˞,s?&HЬE %)>lY߯WSj>A2x,jznwzs]W._)6nKQqqz|N  ꓷڃxTEGRU=;V!ϖ~t@q$azzYR'.UT޺:ۮ iB-mSzodw˦7 v6Yv37B.wI_kYUBOM*}R(ma5(Vꗖ!i1d3JͷOٯ|"Jkq0H1:OCKbKFb~m=K/ѯ TϮK^jd;dbNۗvU}̹?<6b]6Ӣi[&%n¥Êi9zVɹunI 9 D(PIhQ^(-dÎN9ƮFU"]i?xǍ=;MˠyҺcXpxP[1dkY&ܶSrJUAmڀ[~Z[;G'ՒZ =]uU,B0}^v2!Os*j`"8~)JLV7kE%j;/UR2Y4`0RHOlRnrIZe4bﮊ3RvU.+ڮ֨+\k降*[w #쓕4}}%s4j"*yeq;yV5ƵVYÉ-U-Nh_x[d`*"+&eҿbkU+3+uu:t3,QK4Z[#]ϴ'(ųW׭P#q=8s&œ_96694k+RYX}iD}y V3{?}ﺺl$^"8N1NO&o`VvJZ^/9y,?},ZL5Æ#QԤL@(&e⷏HT)۔+2?HG=SZc{9z66b^"{>b1e2]lf m\%/XKDus^d>2W4 -nUY t<-uʥd{^#K[&,?>bX4] _J׳Ε?_Ƙ=Fɋ-F{|X1s+>i\+[]̗p%]S)x^\3>0Qxa[~ƹ6og]C=MgA4k 8O(^j+[Xj;Up, <}Z%}LGtit Qbщ5iyt?alz?HN&.b-{SO:ElFƁzg%ҵu:qIwK.O>վ皆zIR9$[& fDFl&NT:pH"m7Ou.h3"r8! dH(U _X]C飨]'| t1Pf`5mlFDJu&M<{R;meT ^&͌K؝ >GµKu$ rD(<]3-iP stx2ӾfEq E;Ŭq&ίeetc+WTK[g]֖u2Ms-ȣKNoIZQU;1w`Mϓ⾨[$׉gRv``%7S# #r8N#tviu\zQyGsQ>~&[-[ ɝ2rC2OoL}v{yOM@ۏ{d4+p^dԹ#RZ> yt??o;2g?v\wz_zКFju{#r8LWlKu.~Ǚv} ڦm*9vȮL. &ĕh)d 9CuBi|qKIG_z_d[-k}'BߗԺNK rD'XDi$BoSև>Tf+&3%[jiѫooZo]f-Tmiפ}a?n~sϒҗ;5 OjTrF"GcݟNEO:eD2ރx{Yl\ش]FUFq6Ǎvn\*nG([( æt#oYk*hI}}QlF+"Gs ]IֻV'k|ľ}?*fTh/?$_QF؛^4R/Fk$Hy>*u+e?Q_iY;Ü}>"Zmx=8S9 =_ijBϋicߟyT  U4Jo$?K]y,oҲKi<}f_ $RDyO 1;3|罟wNm]GzG7|@^byP gj\;-^s\ou6J r"d]detTJ>ݼ@o>u'sM'R, lng}Жm116.//^ &(l7uQёQ)-)KvuZFi5 ̩y=24lwDzzebdLFutM'ikAmL/s`D9> =Ul unYfCk|^ sxxX&&&R`zI?uh<ҩߢעB@:^'R<Ɓ+oGm9a#-RdvZ^*FQ-wQŞ70.{Ğnk$^Mwϗ|VEMftSGWo*k8WZ&n **SuܓTzZ$jO r'-ۖy湡d"]F^>f[E-9FϥTktDoxtC kcdz&zBȞ KE9 eP]zOީB]٫̧E{WviF\ȤmEs sg/9˸vUv|U-Yr#oGEa{ r.$2N h߱񶬩&Bepl̑+{C+jvsVऄ.)`*rzZH<jE^B4keБ-'A#%w2.r2%mck ޼%GNuݾyq8u+GAuJrdz! XS'Р'@zJ" ʁ)cqEn_ZRZE#ݳB4<g%Vq-~MONIGPƍ ST7+@̿ w I ]YX627b_l *0Q\Ƴ%m8"8B"Oy*4Mdf嶝e͡TFP_Bt Q ;%i͋³o|Ad@5(xr/~5j| dۄ>aK\%/[[&"~i>qe 4Qnp}#E;MQrF_ n5caw{\G_e>hyD7n7;]:عE#ރ0-.@4mj$zRvAd50Th)Ը/ e)6> m}/l no=xV "8 YF^QҮ(m>yHi]X$uM0|lԓq# _]+zwkS횚_\q]:MVm>Sb~uOVe|bf 489 )P2nhE״ 8"dU9̣"'I=5]~m$x[5>tL$l"^o<_T@L~/ZSעtj`d t~vujے/bXl}9$zs GN+˺|g/PJf{}Y[+sdK~GeQazG<>KRk^-.yTFGh;K ~F,|Ͷy̵FġL!OdvvQW"CMMk 1]|Ul4.7Hv&_Sw<2ڨ{l/*\o_ēdܴ4W\)yx/bj ]R*,~Fv9fȔ8 owRFк5|n_J&^H<>nx2Tytĕr8C;MU)R5r,\xa'xzu%7PrS—4;`@ dϤiF-ܳӷ}'}or‚$vєZ_QIY'*@G$OuLiASbORB(gq߶9<0JٜfYW OnɄK=ۯȒ=-&Jl{G5mؚ~5BG: k[j)2>1nqỶj ݄MM+qޒ#jܸ!,k$z)tx={eѲm.cn9yYl%/fkS&ZVTI0M/qݑ #Qy|uYh o7[ tX?ʚâl,\uWwEQjjN삊ܱku^zYofQ͆#ΣZ-YtzGajz4"]G e1WvN8R1Q޺rwUG}Z:U3iZ^SZ!3hcDX6x [}(;2P+ˮiG}b҆E9=-9ߕ.eYv1ٯ_M__ݗ]29a%=Z%~򮮮Г zo%n# vDSYWִڱ#Kł=[AM炟g>sn~kſD >O>4+EmV{qf?F<9{[Q,is]E-X]I:c9mDy٧JU<'zhfunyB_6(}ð+#Fkj&r*xZ(V:#]YՊ&0qbp+ Jܲ-a`4}CKku \#pDLLN]E=00`9HuQ[F2C:R[/BOޣn:G<T Z՗`"j씵 LΣtUlD#9sXHWgdPM OcTY\sVt`=xMR*l{…sHQ]ZєA6 -+tnie=FBwү+jQz\uwhd*v>B'#ɃLVQ`|Yz]LG/@`kx&?TzzUjc @G̕kVپ`tFyBW٥#لޖ8qm@k R6N3"]QD/A;wr!gi+Kޒ05?\Wߤˬu@C਒x"n+/VK&"KSw^:>5%Zuz/:Skw}hYEf/ZS?KtԦbϦ 1=zPFg =II?cMMG:2 6"{:wAmI1_%}91Qjs"t0&T&BγNOV8K/˨?] {~ƑQmXuPCFjNuS '"N MM5MΗ|G6OT-z H4-8ߗnx$-J qEЧN ^eig PFjz>vZF@ g($%~?wj#chh^J<]BFQ0K4}h`n,$]zr j@ǥϾVABOKK0;<%U[@=~i R>Nєz:J>TL p}MUD3knWg?4'uQ h:=ۘ@zzYRm2QKpN ߩ~@DžUj.*Bm ݁5oP[2eN ܨ`.*QJ5́=~\V8"BO?MtdlEeUyuRnU+1 > }9)'B*_gkԦ^h݇9@tZB׾d5Y;n"8[N^Wؘ<~Wqy^+FC.B]vɓdn "84T*Yf}~Ygɲe_ʗ/_.!ox?G?Qw#wyڵko~Vru7l?yϓkV>Hww?O?FW]u\p6 jO}/W*ʕ+;;CĄ=_ߥwپ}x+SOm>W~?|yk^#b}M6>9O?\~3o<6ӆU׿k&/{~m4|[ߒK}o|^Koo/ฅ>r8袋l]MOľ9XzoWROJO  !+}rWs&ף۶m6}}ǎ/}I.zڳg˿yw>~S*z=׻.ymC$7E}/J~c_fI'?Gy׆o}_l 7}46B;/Oh߸Fh*ΟgZ)i}6>lTh'=6N;4+Nh)gU9^(_ϣѪL~gM,X@^٬ 0]z^mhQ>}ߔg=K,Ybvv6j}֭yf^Z^җFs׌I'$_|ژI2/x SNSߞa/~N6_x:pA`#t*\OШVbNU<liǪH;E?я[o#ӽNc4Z-}Nߡג~OtKVT}ZtD^~g>{4yQkKo~=XhQosjF!sMӟ@0ڿB934Aj7n(~\#KE=B>[~FsOo9Ȣ}NG'hRԨsrrr1זkZqH0A3ҷYSN,z/ժ%/t%7jC??H8 =*7rmd}"45e5'>Ѧo5WQuewggCzP.;tWzES}=^i!=HN?Zn1n_ Y}En;&@%z;:Fm}!DKuzzwȷm~f3:xqtR[1ʦlwpfg'>1-{,St,#̶<xS[HDkO>dqjzZGScDhVǓ>oȦ^`Nj(u0"D"D"@(p `Y>{? ဨ|? (h6/R8쒾l۵gf- r@9 r@9 r@9 r@9 r@9 r㝏EoeK(?4eD[pP> _@Ց?Z_D|}/;Õ_ ˽o DGE^quKv+̓-#lC*q7\+%OgiꟄU%5G^#n,0_?ݓeݺgXh(/򬵎|B|t@>q[ P^w+4 XS=?m=yl\y/xcAvgOgz3`(o/lG>"O0C9auM׶7im5_k/lǍ}r+ B+v}?#֫{/9ݕܳ1#m*V Lm,A{վT u^z#D?U7y/9r#(gx/d2}(:۵r;V}+_;?3tϸ,ѽREn_y5Pza2O&*@9';&qW@.JK}gQ6vH$ _132}Q4KM@C'S$6|pN00lW r㖕=|,y`Whߧ>}*)qg.rF1m8sսOgJ;;پ}gqZP(~W]uսDmԝX䉴xo*0 kk pQ9H\ț:2o st9q=%y/~:zK;֚%oSp ~'HOMEi#tunֱ~NH`'ζ#r<̈<-CDfE> 8iuz8;lDz y#rdD<̉g֝́Nj_{:Z`e):$0OYwt8BwKQ'DgI;ɺ<4 uyCN$FV.Z|i 0|>9"jIENDB`deepin-deb-installer-1.2.4/dmanual/en_US/png/bulk-install.png000066400000000000000000000450051325164132300240360ustar00rootroot00000000000000PNG  IHDRlqjtEXtSoftwareAdobe ImageReadyqe<(iTXtXML:com.adobe.xmp ԙFsIDATxTW; "{m{,b,K$Y=D15b^Фof) zsNyof7 -Q! DDD'ޜrY(<3R"z,0܉=ŔL_2YL:ÜB\onB .DDDb6ClBU7ykYܝ"%""zqJ,$L׸1#E6!{]kDDD/F̔Y}!s(^*E07"DDD"S-DDD7ȟx1sgt"""zyFCSY  t""bg˪Zr?ZKjC`/?ADfZ. >o! (]=ȳ^,EԇUߏBTr'"N slS*ӂh>6ll g*~*\-?ܹswyr9xtz$I-)4& UӞD:ix1 sz%"e#x]iPЖO{;|b /kQ6UV6>Nrر ,xRP!61qR$zbo?^)Th8kSw14-^fO1b/>ozFAѤVTP]=hQƣX<%֬Pz'Üc0Fxc_V EuP^ԪFn -^3...Xp!.]5k<}^H\nG4˿) D'PLb '15" 5t+bQL b/9IMؼ }Ye9>2SzB[vn u֯Hk߶(R hhQ5Ki-={Ν;/,_Xz&\OB IG9)ȑ;@.޺2m0*mMrͦD0n+F B׎gvxE-xdՋfǙ?a*5P$J=m SSG{n#kݺ5&Na^~}/4h qFhEejm͹w+B:oMw:G_iO@|R))&>Dov4uzxbaa&GwWnjޝ^.gs6G" CVgY\C '3;ȑ#X|9F kk,o{^HSVVXb;<-y Dg-v/o%{I8&uƖX!ӎ!6=W_ōc0ӟ#_#[D &X8 CXjVt#6Al ]AѠI꠾/qG7n/"__TQ)(Np4?f45L8u"’p13FDtы<, hQ<龳 ܊ uE 5xVo߾mYB4!ڔAn_WzY`N%lU""T JPLcO Ws䞞پ&_6Ywմs'""ۺDDD r"""z\Nx;cDDDz\TZDm3MLeu>} [xu˹cqx| NZѥ4Ozr=M""z\#~S*,q0OOA-=e(J8?/k9T9O>mVn%ܹ[;ok$rܼ{DpFEvDDj`xiX=L(a"}+MX; 8 ƤđMQp=ꡤ<3׫qWy<#*S%MuLįb@%˳`\XM^ /0(<gB ̭Pq qhquh p nU~2 /¹􋓸 ݥEc&h5?$\|t\/w ?^wԸ"܇k qq g/&lGDD A3xUDv;VK?7]L)OCXӧ 7FH?:'\6MRA5s+||fv*7~c.R>1 Tts LE PJDCia,,`ia@\LLQީ^->+?4Al*J+ōǵѶY7(n@'SS|7F#7ֹ~MJmXXYo%03A:QoٯWgֽG;glfzDDϟVE\\aɔJ%`ii u 7+ ]`{G"zn=hXf 0{JO33 ^_ -Bj9rS{Uʴ0Tϱ`{_Ѷ8\qU"`[m-&(k*U҅57xY^<\ϏyQQQ ְO;ˁEy)J㧝Ptx[FC|K18͔BZ޳igo/]ǁXzlÁiH %~whƶ0J4n;qX#quꠜ޽_vp ۂfg +K0o7U7Qa"Ce [KK.VN 1j?|} E5|&گADz4W|mn0E1Z;5*%45M">4>vttJ8P(-q9###+VL! ji0+iGipF"\(rT1-2vw D4$$Ud~yy#Ul)j,ʝoy*EK?oJE̔ʢ`Azx.b%' Qc*5EVT77[ATW,^<=mN#-jL.AXibQgM,SՎ;^zUyإ8N5h&(Eh:ۉ]Ǜx-!49ƞZ()ݫ+=r&!޿?y^ٖrYv)m ! ( L4ϓ9IJJBm'ۡ{l>uW<?>gJh4=bz 0uy6Q"_ӷu:Ka<]3m山]U &ےAn e׺\g7@Oh/EЅEц ϿGFvBй>ʫ4m5{J*2d?M6_MnJ+_// eؾSכ}\Y꒎qG)O‰PHaím;n>`=g)m`/p!"*h3G~|֬Y1777 B䆸DhO{nݲV|̺!>,>ADT(wgsE^ :gTZ58{R?Vʯ݋̸PX=1Q?LDDN$dZ]td#nubt>?e5s]OƔY8\r핞{-_ 3ck8)eE 1 k,Q$ >Y=MG57 hobJ p:Pe2Ğ܇s6.Wd< }+ J/|ݻ0u- K qj_\AI_7X:6fMЛm4 -Fd^9GnYPlJtAQ3ib ŽQѻMFq 8|Сawf PNxw3ٌ#,X!;?tx|5|ȱUϴϸL|-S] 5Jv^x'Pk`xD15L}+g ^ ?nA/*;÷#EXҜE=k9e}6aς|4v׳IJ㢴PA{Ò?=&DI~-5 EQZYN47w-'E 2PRyu"2">2T JqyN\s邩^\և\C߄"r`LP0x<c[LssV5Ohwv~RڕPpEF2^SYY S..k8]# _cBN#3Qfk2l: <[|1?6}߂^sA::| I(*ͼ`!d ɶi||AI8!O#^V{җ7[9&ȍ3f'M,sV%a8u -Ӣ#jF#<>a@s/izuñ'3l 퉑{x(5+ +cī0u|?MБi2Jm@1 =,m:qӬP1fVw:12u8o~՝h.@wmjtG,VPw{:7ʍҁ]j-\xރ&HG`|l o聮?~Z=%bl2M#ǝĊl|rG@*<=Q%e܍+S{9a?q.

0tiݟm5  HN 2-`eqioQ^ʮ#@xNQE8Rԕ<^g[m|p{H'Ml~-ZF vfܾLֿtk>['a 'akѮ2W4N#~&Nwf|1^SGLZF 98qϴ *`er~eI% ? ].Ҹ3\!FP4$#M ,455|}Kq&y[Cܽ!o‘h☗^q:#8x,5W@B.bo|2c,Jq3DI)eqz7ZQCUȱ+w[yơz 4H۶ +[})=QM:i2ci[Bt}2LweJU|R]>t<9;x>L]պ(Ҧ$XZ<>qⓗ b0px ģR ?voKhJgU~ tb|uԬ[|!(±w,y0YUJZu`Mv O Ճ\5'/nHu h_wHdM4i~;̴ js\'|+Uk&V2nI/)/!&An=:̃B8X/ବ~fy>,( OY-1q(+E3iµ<^ h= 3OzG:3)(ј O=ăCwIȇ2UXRxa\^54r[\>f;pT *We5JxAbտuze[3uTrs1xT`Vƾ#R@f6Q&| 86cʆbP4ZbR4jzl8MOQbB5|qYԭzU Wa{(}\l9%?H=?AP/~TovTR_ i>͗TBRq_K{y *O)K7 Jʰ'bchn;syKZN*R(GDR(vDG\XV>v -> Xd7FFkӔE[qV'6e|2}XǼs\C=qf,=z1r]ZEIlж?.Rg5Qc_pNcHzp ~FP&Ӛi|Q#t'k)hSg ;)]E8u5e[VyJ<+k8z8IvKf'xgS:4섥\#H?rAFfPcz@aX|:O4~#[#1;b 4pBQ['Ģ`dJ`U9EFxz?#r&T#2t61S\PcF4 #FC+ʍ9 lMVx֕:I,8\<ێ@_fP,xÈY ޵j?U1 p8>=^D*{xZ*%lۣg%tuS`t a\<ԿTv Q6(׶WR:)0=꡶1֡P>q .5ON_zuM!טè1kX8㏦=ٝ.ȉ` "'""bDDD '""bDDD r"""bsƯh̓kښA$""z>صNDD '"""91ȉDDD '"""91ȉDDD '"""9DDD '"""9eE9j4Q|\N kHz}m;\ ˧z5F9pvv{jd]"\lq]b5jZ.[fLZ\]6w7RL 4 =q 1 EppG@s|zM#~S*,q>0(_>_NZ z0ܽ{ ;*0ا<Fm.fhþEP>]ƖEzy>,!3A͞\rV :]b[O5D"y>3 < 1PTὅvp pr УG='bzP:6fr!v=7~\~!R7eqx߂+95K4|x_^r߁,0b-8NR bOkl˔!ql1 *c_a3{!N~eW7FgXk`V'@!bW %;OĄ6p4]Ԯ$nBwBrj)ZkPҤ dM|%hʐ}A =agn{Oi+ VΕei$ߞ&,ZHc^Ǭf,x;EJp1#<ǷGXN 7t((3 عVDץЅk@i]4Zh|Ztgn 7)J3JU_Y_xXCl9Tg#$PdqzINr]n*R leU `irNochXزv ָ x%-KJOD 9gH?:'fK8)~?vk;a(o ?=x;ϭ >?~ ~Spس;͵]w0 -0xhK+|?rlZΚ0qؾ=f;}Q,]>v, nM{pc.R>1 TŞòէ3ѡ¸}˻\o ]Jؔ5_߃"d_..'J-q/fX|.Xz[ԕ&l_΅ٕqd,OMr1]WȹO_|3N`].q1,3릿}7q43qY4J(=߃O?xfD7}`)*j FoCct.Wc)6׉ *봲rJan97! ]8FV!PLJn=鑴v}\ħN^Zo<4E_}F￑߫f/ uX!,.[pi _'ϛZb=s˾D[ٷYz܏\t`8hJ;qxgťLؚ/LPΘea<5*J+Yh۬G7K^= t f?^a]_΃]Ot;-S[rǸ~4}^h=a4voӈQAt"#:N{}SX~(v{GX{3xnYBŮдS:TDCoZkBWGuaZt<\9mX!Lo< "y3+ ]`{G"zn=hXf 0s*e[!d~]O`N;˕,\k>R%4 7[Jg7E0*)7E;I_/qFq!-hRޟZ듘$y{qπuV/9bH_X&S\Y.[Ywh[ IAWZvmʔLGvQ)Pޘ#gwB}{ ^3H'ob&(.C2 %]i{+ ͔ڹ t#Vx`8t,f?5T<@1ȟ')?턢B06\iM;|{zAK CjA96;F[|wL:R:(Ѹ9ZđcKg7#3kt4M,v#ClZv ]k41YOF^-cTt1YL N ({c-_!U1U5u3ʕLRf-xvc0^C>5ޥLEDY@TwKč?`@ +s>jcN7^pޡ;v z7/|Xk?8[KKcqR6f>65 r>+KoVոWOȫ gszb|,>nsau vnλo ڛ۰lI-cgs4uǏCkHN DRF^tHk"+U lB<aJ $ ןG[Y?ږWʀaFgaї3197I G\;mCCBjlLJ]&l)q١1F,N/6u;* źďkaD]ڪ5q8|un$LDǫ'kN`h8K%]6c zrKMgqlX+Na-=QqE8`f :.EcOW|Sx]SYý||*'/+R>m+xԂ,.tBYWWu5EO7DzGT>~>(,hFUT[ 芶uqA Ҩg\`ITp۵/LE'i83}%%%!ԶӓPL=b6ɺA?px3z%4Mu\c.R="B'ٖǐ* aHkG2 b, f<` 廈?|H<ڰ;g  W(ڸӴʢ6PtDԏ;ROaNBlZ&""yAbK-!j'ZZ1IWWȪwHDDyV(Ef\ ks(,B3~Z&""yZL(zg0$ Z&"WVd(\b8MC_cMKYDD /h=qw`PYo &DD+]QKöC]p"CY;\7h$""yatrش ?"1 1Q]jgS{#x^D^|1{lɇK__r11%xgqNg7Ec u;_ᣰ>ӿW`ĨUg>=܆ʤP!&wz͂eX5Ї<A8^M ܒ@Gn{Ixfx0Tn0z)zeZ,;O#vǩx޷бgyNu𚭫&~4 dr*XQ٭OK3xCX^Oq"{x(5+ +cī0u|?M.&`t7@:0t3\!FPp+ۙ~;54QV3YO^18~w?P'FhD}O¤No/rSVCVWta?qF7i\vCT(suAr9–\xکL]0!w]DhNۻ=NƍDC[x N> kMm3Pt ZؿV-G:[m8s8pe3NݿcWZ-&_C4ݶ|q5J' I:>j/mi 8s GǢI;pKz]R{My 1 "Nd;'r&7l'cǿ8kUmf,/JOTV؅ ׺{/@L#\=~;t p Q >qxiUb(#ܯ1IJY T:QdxriŭP=f֤[֨|ӭ]l `g.[Xvĵ f?C?S䢾3UP+#OЕه:Zl9n}~Ҿ(y0J2Eĉcżi]EX1A&9zV "`ߞ[(׺B[T !aKs6btuwrUet˧czi/rk^#0'ְJ YYM{KŐX)a4z[-O.|:٪,zv)@:pJl'q$ ^`wǢo-MƐRv Q6(׶WR:M|ܖ:4섥\#Hy9BCs.>)ɹLr(Ƭac,Jy#q$>oW J,l"4!٢M'vTHdF4ngJI q"zeg_ǖ)3+v M|D a:Q6vDDD r"""bANDDD r"""bANDDD r"""b1ȉANDDD r"""b1ȉANDDD r"""b1ȉANDDD r"""91ȉANDDD r"""91ȉANDDD r"""91ȉANDD '"""91ȉANDD '"""91ȉDDD '"""91ȉDDD '"""91ȉDDD '"""9DDD '"""9DDD '"""9DDD '""bDDD '""be8""ODDTޞ%ODDصNDD '"""91ȉDDD '"""91ȉDDD '"""9DDD '"""9DDD '"""9DDD '""bDDD '""bDDD '""bDDD r"""bDDD r"""bANDDD r"""bANDDD r"""bANDDD r"""b1ȉANDDD r"""b1ȉANDDD r"""b1ȉANDDD r""׏E@5sF " +k/C+pF rFI`͛j8 ,B,$BP=*Nf,b-q7VQF:G;/% ^+FN;}Lþj:(uK 'zٝ)n!^U㋒ُ1`!=ntn.0vſ%`$lsUaa%%Сf=l@i7j +A&eA2$ GYTXӝ\[BU!Lz( ڔAnٵNDDT1ȉDDD '"""9DDD '"""9P^@HU_xbj:+>Tǂx\4HudAkߵNU:6*:(Q܂C|a=NuҰ@AN:8 ./-ų0^8)DDD7)DDD29DDD '""bDDD '""bDDD r"""bDDD r"""bDDDI,"""Jd5iNDDTZl^ DDDr["lg~ٹ(6>) cLt% XH[c'tn[%:Ԥ-*!G͛L,{N uy_.oe>ՍvCQVԍ)#~~p?Zk3p:烟g_2MG}}BD~/w0 -`OIDATxU7;ޤ^ (  R*"J{JoYnvMaCyͭsN9wիWG1.O;{u>`&jqk,cx~=zߦ: | Z*TASXt@9,|t6o.zVh98wW!{oMԷhAkpyРOwYg^z{9bĈkzz[2WUjhB9蠃;̳&yfxanu/=t2og{-mBg^}2zUB^ziG[]Qu&n}Mi`NxoAWBtb)_Iu K}WQUyzOSo=:䡫`'KBW/>wWz[\``g) s_oyv"v `,z7ޟѧO24ӔX{2lذ 7U?,4=_XfǠk;tKq0CXkk^~wno@xc\ {=O^}|UxD16bĈ/7| : L}Kg54EOAy;[:΋}O/o|=孿exp|Ux@7$4<2ӌ3޽] &7Ç/oF)/2ˬ &S.4g)Q޺?坛(^To2jKݬ̴fc.)k 7(34&S}) (`Xg(^tpbtieȭW\}wˌ{nR?nM*4\C'Jlp0sT^']QF^{SR{Ky;dNGiV_<.XO׎pR^#QFm?z9@.a_Yg2sV=ꫯ._~LL3UyK f}k){=[OW5eI>PF @@2^{U{ri{/lIYy+X$goTK ,NrVk}CH0ww0A=ܳyWUo]raozΤr:,2fvA‡`qo{>SX{c4MY\dn2TS?p|6lx+cV^y_^nenr)W vW]m +,zDi^xasؒK.Y=+|eypOSOu.h2dHy'(38XtG2M2೻muukrߨ|>=zrw\[oUzr뭷s=K=vq ,PKI׿|]w]9r]wۃi^vaSNk9ꨣwNul8m6|y7([oUqtҟDI@^kf[.ku饗-آ\yc_onʄc~vmϛTzH.老 8ǝ?qc[Z̷Tڞg d95A?mǶaȍ'_aÆMР(s5Wu3)ryً&oT=wʦml|0iyh ʙgurFnhE| 1zı\?p6hW<Yd2xr[one%n;s]}޶n[_~/\wu{e?e6+L3Mַ\vdj_U/&r˹[n)guV~vᇷjo~UoϴzeV*m]n[mUm٪rgYzM|׬)1S^{z .X-Sʍ2 */+L*VY|2O8"Je]ygmUd䚠-XiʺSЁe;Cʕg܀.3ZO_k϶e}.W\y[t7ިzjk59og{ q7hР*L)8XoutM\&[t۷*tE׿^׿,re})?я\Y73駟G$Kˆ|,笳Z %& ;vۣ mQlcsR~xpʎ;Pmdk9~_*gi*]ƛV?3>[nj(B)?Mc?زPP.eJm˛-Z>7ٶO)OvY\ c ?lʧ?* ',rjG{v ee+O_{xbya>]?ldOo~[;EŒ ?jGRopŸmV/eZkVW"ܽ޻;啴M7T9=Xsn˹yl7@z.!A*$Zvtٍ7Xg.7+V-n;o>URʿ /pK-T3)+EGԧh]ެ˄ooS`>IʋăOrYx%*=}.˭rYjewMN*blqu2Xe#OIM;Җ#U7sUvr+_!ēO>mk&X:'?.盯Vt mYG p>տ 10Z>䐟mc/y>lz[~ʎ;UXRx㍪wg~UPTcmn??T UƏ~*l|\ƺu)g*m)9T6;λ*Ç B]v޹7䐟~Ѹ.YTf7tӪzsR NwB߹*=wEҟVTx>eI$yIr> r>U?A‰2HϯOTzC>PeSM%xo]>{%-=2/Ky;[AO)=PO^e/QʖI?T7駟QpUe5?AeW{~Q=w뭷*JmWRn۲_[e~lNr$um]vn{=*W*7xcIջm˿_NeL0_[Ew5VZrGN7owkj??|l/&Rܦm=+?hygc9Η[ne;b-Z?찶qU7ZNrz/}^]y ;UAN^糟ݤ.H_NVlUpeBKZ$(xBT$i&_#]}s#Ͽ,]GwZ &<wީ˾O*lr~?֖1dހVXq#seK x9T; ր!s|sk. ^>{&[y.2!'d~9\)\r' cHGTM0d Ϊ yRI& Z쮻ry^)g4*"Ii?xH e.SMs'b7U̧߲>]\zُL9r~۩Guq;׿вW^-s9g[%v}?.۽k,7Xݫgps2H ?䧧Eܹu#{G3ϼU㏗*4ssu1:MQ _Dq#{$;. :'`Ô7߼'Cғ_zlUVzl+L\tEU" Z[>Ujފ$/(>xM缣=?7E]:4JoeU7WSzD&AZve^o O (g N뮷ncY*M)4tw{nu|1 "zǪ8pt,jp դ~?.i-g"u]j<vW9/[zԏu~nw*ӟ'9Rn0 5y3磔gR}Z2@|u3@)^}觥?兄?磔2!{キ  +137˚Zބ嘞 dVWH2>qLm\owXv~b(e,NQ\g%@k|MX;{ǩ R 0T|[zvlrY=aN~Uϣ*T$r՘>oHvm^?~/ m'tO7r2eXco72i!s9F~r; WXbŪ$߰}ЂtM[ _2m>|Dfz|7w_xW>m1%U\վMe{L}nB-(stva|;UxЕ !j)K^OTsl}h}?Uq߃aJQu}J}^nxO߈Rfx9ᩩʐ#S |6!W1GeeF񥗬:BPG&Tf}2jL 7ǁ =k_[v܀ae.wѧ,2$w{{]VqXLJ.V2{',]֫Аr}M--.s,՜[^|M'r-a\sMu:4d{NJ`Kar4I*8Xa'*<5WYvaeIJF7MRfX)ʋ./۫,6ސ 5r<|rLp[Ge^Yg}Q1Y.ۗ /wSMT<g d,V͓m҃7fZ82h|tr'VZ Z-\r% ݥ]^ׯ,ܲՕrLo/r˭ZI0L#N L^391@#Hp4@q{̲k >fz{=Fh$8 Fh$8 Fh$8 Fh$8 Fh$8 Fh$8 Fh$8 Fh$8 Fh$8 F}/wygygˠAoQr2tӕy晧,ef>fzEmiM16UnÇت<ʵ^[n; /pxˌ3hLzp??66Bpbذa媫Z'zl?e]H C-g}vyBj",b| CP$4]q{W<̲뮻Jnɡ{$-2eu)}cLf|(RvM&Q?|[|l*34SUɜ Z_\򕯔ۀɡ{z_}?&L#0ˈ#:ܗa;C8p`=x}2<:t(8@s!ty|>k!4tafmʑG9ZσzHpӆ'L*\zW__O34:=qƤ= Ycowy_ӿLvq+a饗xw4h2'6a[l29fqF+`'8ɕ;j^κ辦zC(| W^yeyG?c]dE .2W7`0^^rM7ukK/fӧB'x{bcLxrYg~Xc2p@+ >믿:ɶn[uuh0S[9L4#6SM7t84aC. /TU:Yg;Dvidhd뭷.W_}uYuUV̰aE]T.}˖[nYAYz]^q!|/Vc/*tXotMgCKxLtZO}f83c={4C"aw{Y2bxle1Ӌ#FN:Je 7lBO><~駯ztW^)'xb *N9唲N;`09"dꩧk .24{>Z>Cr jC-w^yP1=&Ci?zh\sUvuҷ觐ᄏ$AC&Bja y|A7\]A'$..oVy窫tuЕgyfc-4)l射Lv&W|pgXs+L$vm'|0!r-x~ʒK.Yn.%?W]uU5 )A*3iij|50a4;0>fu2S93}*Es1NxG˅^8ھ !\FopvZywG{/~zWbEAo뮻b&<̥!s&L,b1YӋtgQ*dРAs-!`w. +,uuzWU橧cb)l=%3z a8\UH~{5<-s0Qdw޹tȐ!UςK馛/^o>+XLSL1EY`rU>Ϋ„|͂Ԣ.Zzr)t_]1&;a|@\.8stX&H|׭$|`C-?p:c3l T='8>|x93|l5(묳zVP>?ow=^yǦn:+#D*h?c}m.820 f=LMLĆ=_{UWUWNJH߿ 0A,䒍]p\1w[_KX!C&S ,hs9~bﭷsp '_ 8ׯ ~V^ye?mWקOfN;s{キu_|t UCѓg@7;;|xYd+NZi'?I+NGLpbel0hz7ޯիWYwul`ei UC:Ty]w($zـjVkrWt9)b\!hAΞ9`+oۭOmQr>|V#g)/R7,{lkx+R㏗zL1ewEW^Yc>r˕7߼x婧*;oҗ4ѷ[o\r%_uG-rJ q@o+ˠA bnrqǕ_,_tMWjjYb%Je]VU&ÇW;cUwYfi˗Z<>UWu|Ǘo}Yn`bsOgZc뮻?==PYr%[lQӡr;|_O|,&駟zOkGQOH0y*#ko2dH9S˵^[s7(=\Yfe:ܿ& 7оD73VUgUJJ ++r{E =<Ȳ6TC# yMz9޽Y_W;P\?VB?#T]ųl뮻ngy 7P⊲N;UsgT]5eeg6SWnkar7#!ғuA믿zn'O~}YiEB{キvLT>:s~ZCׯ_tMiկ'}f_eYk]}N m馛TBTXcUW^3pX}|Cn 1s 6ؠ>U2ҋ#TȾoU}*i TcIzzvY9-˚eɾRJ`m4WA˶Ov?Y O2)acy#(lؑ\gu0,"4,s-?2<)ǥV=_oFg)?pu4x˟j9s,h]?iz뭫 z.Ch|ZRqH+8R]뮑u!Ϯ*)$BR*;k GxR0)Vi==餓MmZ_|}gx2OBxCR8ʭπ&RζZ(N=ܗt ٩˙gY >O$h+f UiNlQkeyRᯟWK0#o\U*\tE{$TH0yRiguVdD7SqO0 /O?߿8$ЬrTRq˾_WƲG MrL>],Rչ)]~8Q UaV?!ԥe"T Vnucf iaIa?HυTSԧ>iM2 #aB =u`@ K+bk/ZzAuyT:"aAZ>JBZf R 0RL)0&i;C:ܗVa ,VK_jO+v*u%sk~W}GM );};N*<4=w]5!GS1{ 9Z屵B zZȶ!64"Cl›J%7]WgBۭ2CDz $<ȾSn]JLZ;WrMౖ4u:1%-QsW+t\&?9WeJX q'Oze;L8ߺ ;k=sn{tG4&DErNֺu(YCKa:"Ѥ.ϭTDZ)d|פW@*骜SP %:]Ҥ_\)fL3SKOT 6P,_GBt: ݑ8__~ d&-+iY<:3 ݄SY<gڽu;&i+hȴ?*t!Y=crdı]ɾ Jpt R1K/t?s&ƥDo<@.Cr^=_w䈌Q^$c;jRHtl|0j3rS~Г0#:BKgZ{[nMkb]]YJ+L ;i2>+.@qz=Tp36?_*]wyOtGEbaʾ"t.䷶fT<2Z|bvܝ;u䘓UxsLf^>ǜr;`t-N!?RP#LuTRȲ%5ؤ|UWU||g6'kg#=6Vo R6A^Oi]e]F{~a-f=GӢ0-sd{:ڇ\*.uS.rqUǂ|V|׽{6tVǖ#{fg7TW-g \+aG*.ap0UvՃɸLR)6mY snI})+|r,'?zeIsg~o1o_zZrϥV[mFֽ:1N7tMd.qM0JE*\M"ֲlJ)u#5 s+bBR[WLT^*d2TsH;]3HnuzVep1\ y* +1M8{G/fH!>b>;[WgRyN'B*@ u UIDATxTU-jN.L>[1 >nXv̞ܙe?fg8{=oVVV2A!Rt;-!B!VT➛'{%qB!VOwVbuO&)DUVv!!/**ƻlnyyymļu,u+_]aa#!`jX2P*o?0`{sD>|x lBsˋnս 6Yխ[W>!L>SڷooC-!Ao֬Y9 Y^:ƼEֲBB!A1Omʔ)&&˗ڬVhxrk\7'QBBЙz￿ 4Ɗy^g:D҄UB[p-͵S`rƅb1ao֞|I aÆI'X!qm܂r !n"O3BʳJ;o snٔYֱ^5^ѢQѮZ:BЖaÆ3_ᆱZ_|FWՍD"mȊ8ҥKme,̶KqNĖDlyQ/αu"[~14RBJ;=Oq9O6&>ydζmۮHwnӐVPH yY !XDȳULB!DEB.B`*u\|Fu!ʄИ'B(GȄBCcB!\!r!BHȅB B!$B! !BB.BHȅB!!B!\! !BB.B B!$B!\!r!BHȅB!!B!$B! !BB.BHȅB!!B!\!r!BB.B B!$B! !r!BHȅB!!B!$B! !BB.B B!!B!\!r!BB.B B!$B! !r!BHȅB!!B!\! !BB.B B!!B!\!r!BHȅB B!$B! !BB.BHȅB!!B!\! !BB.B B!$B!\!r!BHȅB!!B!$B! !BB.BHȅBQU $}]dee%}-r! EEEU :lqNBB.DA mz!/PJ;wYNNsyB *]!"+8 wʊ!\*G@/_^"i !$BW W%s!\ s!\\!!rype]BB.DҨ |Ȑ!v-&K/ԦLJIYge~{.ʶnk}*IHȅJ1/Xb>k,UN;V[mU>`[kTIBB.DUp&o}'6}vwؕW^w.rW6[n>>#wܹ]O2gdž=kvGkm;찃}7n_ ۗ[la={ZϞ=vqG{~ͽ0auQ֥Kl_ԏKHȅ<|q9Dg+$=G^^BO?tСwz-[`{N|M'Oc 0Yg{'lٲenz 'xm֞y}bE] NpEn;… 0*,Yb#F|IK./Xc gԄtط~klr)Nй歷K|/;s\yqNЃfvFb.\ CAF >W+^9~ĽWoM6֭[79sf5j<ƍ;Y}6mj~{}a9(vM7k~[o=D@kjIV\k|Vg[OV4?.)ERJgObjqN[h b}d+&M8A>| 59"G9/v޼yN]|m/7Aᮻ*a@̝;wۇxK&LK.5\&Ou]:165k,Y֭Mz |!@Xt -[,/_g?777_$QQʱ<~bǎr!M[nXߴ &LE 6ظ괟_F?st71mU68~wWx0kcƌq!FL _1{wJÆ+uxLM 8~]K8}w.axxQcǻ׍#& [qWOPc=fǏweʓ3H4.&MMBXZ?~SgۜFԳt.&vva<߲ԍyW{f쪜~yc<=# x1lf&q!nxcǎuvǣ U :ur!э6l0믿\D᧟~r"4!x&7uPhx1l}Qr'l^]w]7Y-h,dcޔ;: щϽ0FmD#k{wXG.D 2VgV8gͺ%}p/)ovaikvԅ˂3olGvwƿe^#L X̸6F ̂ϲg!C=d<Ѝ d9s8q[H2{~w:w wqS.F0P&ff !\T5S!!+lydi_e7~{խ[:w\!h׮mF__/_|Ѻtb&c9rrr2:e]fsM*~m#k2,;uT;Q2|]if]wu6|pׯ_s裏zxB ZF >)S8}M7ub7{l{-Z? 4ȕQ~~yv'?G,Yʎkˁڧ~j:t 7ܰƽ|gֱcRFNO衇\}ǮJӏK#՛'iyZx=AM9٢=s^9B# I<`'O<2w^E91;裝gp?~ ;Νczoc"@~0D([*f̘ajժgu"2xxrKD Cof'v7rNȟ~i'G Bx׺ڷo^' ʉi+]9 C qc=f^x=,10{o7$c|N{뭷줓N  5: !!՞fz[v%߽t~h,yj$:BۨQ#[{'G  ܾẍ8?^ƍ3yxk'Oe]ܱ07o=PobO믿믿Q.Ru]`D1cƸln&Wf\K*Yă^o!ƩO=Tg` aL819F+^/gqGзow("'\s=g[llP\nf?3P8|P'DcfwL#D:ZUcA6i`? gη܎-vT%+/ǍH>m6wUGKzdXć+mYvIT m:"'4u]} ƌ vm焤}ݷ]/f_=**lJlɏ9Ͷ%eSNl5a?kn3n|lF yӦM(b^1 NB*yvp?_j>a렰#ˇISʆ ƒ#38Am i:uNt"]L g"CC3 Cc/O0>i$g,A%>co0^83e՟ NZmpFl3xNNAlm:Ϝ i.YJ_cwngOEV`?zl'kPԶm[N 8V2R$O6Kp,؏v#W^qc~cH3%df\#Vacsm{jx${zDF\y0_3vNh˳>k͚5sg:2o"(1NBa`PȜ QNY~'|n\E [KBe/ zђeQŏz5ֱec&[\ƴH0Z0\N'G=lD_w^*3t#(W|/0H1y}e&Ls2oQ3c|֬Y.N ~ Aq=D3+ F>|ꌱm&GZkγ:yCb\q,yf1'ҁaÜ( ={΄:.D:b7WՍD**7Àt@oy F|BV _hk.}震F1FO5켩ͺUkq6GI]l_Sl=wICh-BQ "=14o-"!U&U\Q[\=BQ !r!BHȅB!!B!$B~p@T&kzBB.DLY~ռgYqk !jI`+?zFóZ,Mʲ/ABTsNh\Ӭ!W'F >U. HEyAy^ٸFBHȅ("A1כBHj-G!|[B!$B! !BB.BHȅB!!B!\!r!BB.B B!$B!\!r!BHȅB!!B!$B! !BB.B B!!B!\!r!BB.B X5jo.\X_ܹg͚Hٳo߾:؉'Xc㏷.l=s*[!!!nN`:wl}gqKy|駟.s=އ~[nY-pĉ[o{xl+ع[.**zFG$m>3_~i?smM,C!!_@;vhsK|m^O_},Y Vz}J/Yنw뺲2eJ2 Ic=!ѣC;c WԛorQN萦Mf4ŋ@]IǎH4>cWdp:]پUroty;뮋/F:W_}uW]u6:-G`"?^p1|i cnݺ>ba}w?R:U A>Sܾo36(K)U]ݷ2:S]}",<Ν; 'EY # w3:02\z饶;;c{ྀ|{&Mre;:aGw}y$n6mڸc{#%#p;+;oҥ|r7ܶm[>v}woR1 F~~aÆ,DcCQǀ1c8hg+Un)E+2LC[abp. ~3 նjKVE4nl+M D-M0!8"&#Q =YSD-Hhl7^q%>Xs̙|{v9ҽ?nܸю,ODzn5D;SO=Uz޽{sAES^Ǝ/E]}-[;?Sd5ֈ~h'U/5\⟍1"~aD=OT닊H$*hg_{'*)hvRU}?~s/XM/uԳtE%ұcG}?NTC=jD.kf$*(|HT"QC,^Ϟ=#QqoQ(YT㥪Gʲk׮Ϣ%jFVhS\T#Q(^`m<{l\mޗGԠ_WMUOD HԃNZQ''YR_D F5iF+l;+WLՁsBkl3GK >E?>KUV4m4ڿ&=g{x,+*.T юR{l2oʇQR F ^2^ ^M7<0 ÐǏ);ńL,lި&BI&9s渰4c|c,Cؔ*r˔eHþQODJЂ k#$Sݿ/ړp9цcnHc nsOpKue5^3'B 17c on wrv'ƌ7E JeB<4~+:*% e_~Ȍ1?a Y0[g't{OU6'׊̌g{P)%.Lu&ʱ%a/By_7vpHFX]zxSOPL(_Sxv*xb!T2lX\_@\,g~"={߄# aBN$v1vw) qhkaeH!Ie=/ U.n 7^;p3v򊷺Q TT?a+B)JBg7N4 b`2$#D-э=<*QPk %+I23@Ǚ.BZ ^+rQka|? bf]7 D-ZB!H kBQ !rL߯TeP\bke/֖joBHE$? K~U" mǪݮ~BT$^$?V:蠃JԒ]ٟTVj}̄vݞffVS#9 !9%},#ʒ,M1h>ܓ?'+'Nw`[  5uI _,̵ gqLb3Kyĭ?Ь&Fe͗>!ibҦ׊~?U`^dY1p⊀-dyeBB^`qAk:::B[DY֕erv)O^F'at:8giX,ɰ:ksOa9>ǥH7;ӑIyбs   CbzHtx~d7'"A] y䢒arOIv$2#ad#٢|n:640|c<ǧM ztaٚILH‹7d|V͛7wYbܼ;G|DM >,vYΕI.pLٰaCi,t x~(;X\ 92-TR!m1o`j__`vˌ31,gw:uΛ*$kpDĀTx1xLnBx^`px 3p1eJScbH7x/aOOre3dz0:ė% +兛2˜>|kQ'}$Dh 0 ,]h&I2͐CQ!al!L`;lh*~o/.W3Kv:bcߛ>g73 ݉s}(DxD:_epX0/tτ!"DWtV;ս"&N'd!B~l> #? &1!G8J \aFOMQ~ছnr !b4=eild 8L-} CS1x U3.Ag#eiu3X\۪ߛ/(jLVE4n lb5$Fz G>Q6j+\۷odРAG$\WYY 2$W8cuhSBAbMnZ5ΒG.D'M6+, N*nuЦPh]m>} vf|Ws1^-QmJuS>r!: ! B!!b`.Cg{9c5$= N$7=wZ|.BB.V ۭj3,ɳ$l)B4ƺ㧞z[,qUѦXǞVV6rQ&*`fA%m`RVqcA~Y$)V( .>Saa5󅐐0rfʳ r]\ˬғ"sU)ٔŒ~{$#א Q LGBtz>z28(X [,Nf))٥.bw\6`ّ擵 Isa9)S Ynl˲ S,,ɱXMcS>S>DI,[ʽP6r{82iauA@YS\7Ӓ)$*UY{9-`%3OP% m4כsuГiqVEmWD9腐p2əF\a˚{N!m*BAąNʧ t i!9V0DX^x 5i/Y/;+\ۈ;9Թ'qeJ6Ř\wXditƠdUc9Q(e@F2NsLC1JH/ֆ`i_ gLaL|Ȑ!5א::eRYLlSi<2 PGl3Ntm.0HqrNzd%1Gk7S !!%sf褓NJ#>5V?"9>Gs/q?ӡy|c-Yc!2xāVөM81?g?͵bO:D nYk{帤7nۏ=8nd;u'D ϔ7 ܉v09/{A` -3GEBʔh6Iaq~08ƾX8Q`=`t`X5IJLCLED0 Tb{OUV,fx9=kD0fq@;tgh!U(%Q ,clE!$䵈LrfCR9 2èapoBE}:ѣу}7λ}hk( +3gv%Cʎ.NHGisf#,Xxt>A|kf&oc}ec˽LlAL g3^8?מxtlP&1{b<`С0N;4ҁAX))F k1+/hG@ܹ/"\y!^}(L"Iye1tĈ^0|f#mv(*o)YLf`)3 <~+<Μ 0s\3Q6g NdPҔj cxx_NJ ]Q-:l QA utڤ)#椚TVWreP>s jrBv$"cBHP>CRɅX vօBj*G.Bf$B!\_y̆SxD`L|Dɮ xGXԄBB^E+J#z X"3Y߲ Y^00g+K0?4Kb!$u _T,EJR!\> +w*A⌊rVcջJ0?4 /,kUcVv5eXM!!Q 8-G3x},Y޼r5n%-:'OH,iylx,ɵbw-ҝuue0mXUX>$jd2Cl}2K:͂6>+M:!'%FB+|ZSN q%aP_$9~ie%!BB. ,ɲ EՌ0N |$ي 5܉0 l TfPַFxÒxˈ=٬A >_u2 ?ݵkפle^B鄜+w:, $a!!Kgn" zxX3fpˊfeC1K^v!\ڍHd"\LeS Ks5s5"$@B+/~$LƐfg  U{^bRٴ|Bde7Κ$`"dP0K(aa|rld$ 'Lv9kncTe`}nG\uUΛf 9bl-L. !\T 9Yf"8d14rB|oӧ/Ms ˖-˸OD Ig?Pp?Ib{'FB>}/^:FJYsgZ/څ? rQ^mPyxpiauBÄƻ9wH666ƩIteF5 >t*crS& 0ȈpSN$YrBBV>r]BrxIGiNĕZ:#!_a̙oe˖x< CgӡBkWh]!"|B!DmFB.BHȅB!!B!\! !BB.B B!$B!\!r!BHȅB B!$B! !BB.BHȅB!!B!\!r!BB.B B!$B!\!r!BHȅB!!B!$B! !BB.B B!!B!\!r!BB.B B!$B! !r!BHȅB!!B!$B쩧TUY孃n36Le6袪9qǙ}@dL@جYf=gficof뛭VͽHNݬS'kz6s꿄|Nk-!79y͟ovA^}լG-YYfo3T*MͶάn:_䘝|rL3;/1C)8…~dOٳcQ/g52;u?Yf~>Ͷ#YǬcǘǏvzn8wko5\2>lܘ(&5hBza9=嗯ڮbk>cC?v^34)}nfݷB 1[,I-Y+Bl1oQ;c^/͙c֪Ul_<@οf-[Ʈ{pilv-v^ɽuk5A7bVz^{}mN=5Vu5qωeKG8YQٖ[ʖ{ 2Bl9/qf;cǦ;w)O[o-)'lm1+E18#}{92zҟQe>cQ#cH+쳰( SFx-Zg)GDqL;7 mW̎?>VaPݻh!~K~*,|֋cc?=:.@|쪫bBp{[bBtС+1=XjXww!ֱaX |ŏ__y*p>ĕp/˜5j>_}eַoizb 7wbGkJV%80v? cUq anbuA8_*>lJq ~y壏ƌTFI">ocI~ϸ6;4?>&V8_p١Sϗߡ.0"9ef;gDvٙg T PdjB:DP}۰a"|D^VLBxE|poDqd  8hD⋘qѳ!O 0f+C b{UlBH9mF' RF2t)gsK@BB.J$2oފN|Bp/f2$ԁbؘ2\ 2]0}ro-UxAI}e=%o\1L@L' #@qDax嚟B2Oˀz=&YfF`ډJ!!I!ӱ"(\x(x CCؘu9fxk#d|xc2Ό 0 B3c3fB+KX]SMʂx*00 o+# 8`&bȱP0SF 0?azN${%GiˉeIʉ  Ò(A2O%F 9- Z{B&} !!qxobS?k19#}G7ͣKc6l_6s:NC\BLD3"foisNaŃe"JG(4EkJ,[ʋ}G D8 g,up4( l1`B"Gؚ肇_5xu胿GA +hQ~#L,I2qB>@` 3#n9^0L6!\8ONP.=30aq>Š`<ފY1 BxΈOf <kdYLY_(&1&5%-cLbebqX+F~;B,g.Ap|ab?{^x! cdaaD 5PCpDC$9T0:LUছbm~=T0&O}C0XSL|L$:¤`$mo?U"E0zr[^V7n#UTB!DtFHgit+( [D !5 B!!B!\!r!BB.B B!$B! !r!BHȅB!!B!$B!(i-cpB T 5iӦgMHתv%jiҘ"&L`ճVZYv-5?͜9#ڕeJd,iӘ#E8m6mT͛[NNծDiWby]KG$j 6tuv%jSr9)Ys"v%jSrM@Rݪ] խ\!r!BHȅB!!B!$B! !BB.B B}Q;#ٺuf-R y|ͮcի|→`D۷kO[lnvۜ9s~ZO? r馛?n_sUs^￷[n%wv[|}N<{L/$bQFN̷~{0`M:fϞ>{ꩧl}wn&[|{NSOu[=lwy8 w>}\89:,wiӦٖ[niF /N;78A!m։r޽]o%B6og}^~6h ׯxcƌq͚5˵ε .F]4nok/fm{9!$2w\{뭷E֤I쮻>yT=_}/bj]vua{1b;Ή'hw} wy.k׷~;~L^ΐ'ܺdUI5H$b&Mrҵ y[[ou="T?l0lv_-[{//)A Ӿ~aU_|Q7ްwc9#tOgZ~};c>|;"3.,,t^Yfsp ۲eTa5#m}ƍ;#ҵ ;m֮=qƹ1'OcCӦ3M{˜6}QG3&Lw(;³fzM6O<ߙ'jsuGy+ۦ'1x`kƍs3, '\"/Detd ly[H$&TQUoڵkPݪ] mэF0EZB!j0r!BB.B B!$B!\!r!BHE.\BPݪ] խ\TX'}ꔺU] HB^^[T.X.U] HkA6ܹs]mQ=&BǏV]Ek2E5h@RC됰'SulծԮDtڵ%B!D rօB\! !BB.B B!!B!\!r!BHȅB B!$B! !r!BHȅB!!B!\! !BB.B B!$B!j"BQD !G.\!Azv&BHN'~AB.BT!/˩B/-YdQ!<.](7G^ݖ_HBc„ _ZGIeee-[]l|BAs^48NuVV4jԨӦMK.橘Beɒ%ƍ_~СCj4Nta`+%YBE;x)r7A$/;K-BT8bO1.ނb$D~QK"S,A]!v)<8!.*~U|d/>(t!"'jn&,d4N"KȅB̅< AA/ #B pp B!DE=FD<( !+' ^GxBY ;fދ?DȅBQ~1D ?"#3IDATxxTegR{UEAlX Tv]+E׶]E].*^{E ;Kx2$$b2ԙ[漡P(deT {pTnlEhTXDRu;D =V$X:aօx8B0É<^xǛp'qz0OSR%uP8czy0p=FT>PܛiM(bx0ȣۺ!xaÆ3rm۶= ===} @\hwu׃ƍ Qa qw;#\t?]x3f͚힒Ʈ)c7ncjժND r o3gΜ:vx1wɝ:uޟrHyt[w@tv)]vz 5$ `zmT:Qy'~Jf!ή`J "D%A@Py4@O&p+m jy%xWwU#ȋevkW"!!/+ܪ_U>U:o~0%y'i 7deM2BM-2st%8Bi)'o|c{SuYi/}TUP"^-3,m>i7[-–;V(P (g55߆ n\!>yd{kN<'7e[ځ[74j۩q^MrZzz:>VuiZnmcǎ-oԨQ 9Z+u>Q:a駟ҥK+-+-muf-ئlγ^e0a]s5Vnݘm'''^}t]VGVTG׈ R* Lٙɖd4;dmkX}o6ysgDƏ_c[ͼvv 'TtUSj[xXXvv-Y$[dÖY^A~ݜleXPhzxw@%'Ol޼y.c/YĒe˖=i"ԛr ޮA^V9`GR Ob7P}Tcz֔K[UrYWnA7A. C99 AAr@  9 AAr@  9 AAr@  9 AAr@@  9 AAr@@  9 AAr@@  9 AAr@@ ]!Ǽ]BP@ew]OIIIn2 s9PF |[qJJ[vsYʽC-99م9%smnJqXr|-j G qh^^^W?K ȁ sUoO9؆ I ȁj0@5 Ҿ}{{*uc= m03fs=[:QFҥK9(ra իWۇ~XH*r\% {キ}'bŊO>~y7;^onv7ް[nꫯ"Yf=1U%h"[.4y޽vWZVVᄈO>vuWg}'zm_p;9m=wݮ"5Aܲ;vh_~=3֣GmlĈgaW]uBc h߭gϞnzkSN}K.6m믿ylÆ 5 C9~m۸q }[oe7ovϙ0aװal]vqpWV-o>jd C'Znɖ/_^/=#nvi'W駟qƹv_}׿K.P5Or?s?t"uSҤIINx7՚yVN>(W\k5B(-v>e~8 6xЬ\bfRkԾu[wym#W~z'[ ׭vEkڢebݺuM6VH*ZYaW/OIIqa={.1cqЉP Gv2dHvpٚWÆ WqKf͚W\Yd[UsN΢\znT.:I"'0Z?I@q?kϿXJF[y,w L/uOOv-g[1k_FNVQ l$E6yd;s]u?쪐Ĕb΋;Q[\=X]xbW2^v]xᅮm_fb$Ev}*_vey F1{YgQGnomAjkNt^yk׮?0k,uSO p'/j"Q/T-@IZG= mk.󖭱&يme`fUT'}KIWBMa /G%;jZP@Mm۶ݪ|]۹0.W5 -?--N|_ƍ]Y'}]׆ZsO?ćȁgloZL[}˶w*zdnlGrewxh 6arV Pj1$A%ZuҼ=*mW')q{fskgW{|~l3W_BOTUŬnH\Ԗ+./jW_~ŵ[>jԮI'^h}T^>[t|T΁ mӔR t˫7MeW(D[ZᱲͰG.>U5}^ڽqRmۊkǗiyum*I?S0abĉzoum@tOoRU7N)7Z=;Y3?\b˦5l鈔G[HbGVE?;2e+ū>! Gg{=ז^w>Z}ju#N&#K,V;e& U9BցSJT+ZX^{زY8xn[׶67y+Z/K,a ;{n^߶kr`?ɴu6yonxu<'FKnְ̝j Q˲g/uQ$cIagG ȁ!gc_,aFIUOdG ȁ`s7e|L'O5WUb_#v)oʶ]Z|lCoYϱPzjRwnnMolYAS ʙ[똿ϙ69]v=})Z[tg]>beWv"^V6}%7gEK9yM[5<(kpfo $ۦg۪;&SAlo9Yfr~Z\GIn\rt5UvܥV,nS.ZE ȁf;\rve?biZY3@up-x5,۝ Z_x̍jOGC@u5u2n٫-Mv NWoe#Yvmb^ݭ=z}EtCeO岌SړO>Yamܸqv[㎳iӦ|?`{vQGٌ3{ڵn﫮*N;d| @u7my8_e.ffͲtԩS,UV֥K ۆK /`^z־}{;s]GaìM66qDs=/ĝ_o֭^;b{ᇋ-ؑpA`;֭M<مW]vd[f+oY&MOvڹyӧ;ڀ쥗^_սV 2̙c3gδU+Aq=,wOoG7D銑wy!ޖ)ء$v-Akk1\[ҪEKҺ]aÆg0WJry)*hRڈd١]aeTWu0ZN[mҿ+c>GmW+WZf\u?詧r5LbǏw( Qoa`V j]/ᜪѳ]믿n۶e˖?;̅sXOJ Iy}u=z:ڵhµ/^8:ꫮ:)ՙ_~[UmOz-ȑ_t͞=;;õ^j3}9[󖯵m+_Y87Ϛ\7yzAVfb9?/ԝмBs|MJo+Ĭa\:PUpSN=]!9i$fRСCQxXWZj>C\)<7w ӿ/]{]?IGvvvykJ^U&EB[4%)*z_6JÎ6M\zj]U x9hw7|q\zغ>vmߞjuj}͚­+A~;rT. ]KW?@F$7.M+@%t#n%ri+`jCSZ?+*"ȱJRoU+AI9({yU_X #l;  Arr@ 99 Arr@ 99 Qso#jiӦY֭-33̯1cve{ǪovU{W˝5kWNckuQ7n\n6c=_?~O?dmذB OSN9%w)V[{΋/ 7`OX͛Y:u($U2KUZP"GmȤ/U+v^{omv}Ag}fGy{L'+V(U{+cgq]uUԩS';c~W_^zY.]k-kmv_oYYY|N?t:tuֻmzki}b oF >Stk_}?;;Ղ| >ٗ^z9U?i& (ªOy:!vZ]waÆFu4hۖX[Ϟ=cǎvꩧҥKuYl2/O>d˗/wN" ,3<{z"C̙݉3}W^y{v'[o#:Z~y=s|(@*P5 .Gyᰝs9VV-{饗Vp S;=yf^zN;O?A_u{#nnfw꾐֯_s[T?}YF /4O>|A}vWҲ&NhO>[je/v>COi/ ǎJ8yd뮻w%:>ĚWhmi͚5815+)nw _~y5in^Ѽx<:-ZpeM06lh?lʔ)=CiZȼJzo*,EOݯ#\r{_}M0|sd:˲,;:##<"'tIZl}wR꘎3ݯ^u馛;>K/{NtR3}tkIޔM)ÛzS3oj=G;k{t^) }aF7k,^G}&("B/알}ep a2dH/<}wRp 6{_H/Bo& m)ܣo }a$_ܾ;wneϘ1#은ᄚ2 { {_ny {AYg6>E$k^mHݺu ? {D-n[~ԩS7[;#|x#{'\X̙yA£F*_tWBwi-;N#{aĵtޚG4t{[&M9֨^LnXѵ 3;82G%Ui w5r[%QuTUһIkRstsٮjSUu55jC%''n\U֭JURiӦMfu.;KIIF u_RiNKujRju[Dz3U# 6jD'چx}J:V\TOKf"=H:bBUD|$Fp״i"=zƪ.[lY,ˎVSjTV5_I뢒.:sJ^}41~Q٭C6bjP畮|iSUxg>Cze63}FQ0q`T]SW)ěWhmz/b6TU˪J^' TU ѣGXݷkn/,OT^7ޏKzO4hY7qoͲ㽯ׯgOSÉڧ>K:I {%qi#Gexn\$T Np_ uֹ/esG F)Ə_ꟹ)6;6Xmt:Mi]QJj+ԗW_j7UoVvm.݆D /TVmgjk2znZ~w"G62~|5+DouR1i$wV~5}ݲAOPg4Ev]?  U}| kUC(B4߲R)V'' =w|Fhޮ$^裏gqy4$W'uw Jz',\TױrT>*UwAU S[U矻 ͣ4Tї/UŢ/1u:4x!DzbJ]EB_Ş"?5q΍BTf&[8]LFוt.|Lj4 @Ej,zlh[]"Zѣԩ.N5Z+djZߺ.v^Tа>] (WC W j>JS—.ϨB%E _RWVe@զX*/x庌^ҷ)tHI4zжK~`6&Aۢ^ ;m.k`fߺ%R} ׀!%ƍa@WWרg ]ZmqVкT,;pU}ȑ7 b]RTԘȺc)im['yGW[k[5v,ܪ+ b:I N4pIc~y˭jwYZ'0@yjĨVM|BW+Tt޼y奡A- 5 @ݤ0V{ϼ`j}qύE5kc۷+5B\*Gu} U $m׵*'#J`Ŀj|T;랗DP|FHbS3uubu T̈́^AGY>UPqw1岐Y:o)HJ2HU**l5.A!b):PB^t{L n5-Ѭ4U-ֵ@ՖoT5WU{i̢ 5脈 @`7WХ5?C[%*1ХqЃu\lNM)Lõ':urm}v"L4XuzG*1ɑ%DyU;*ø% ]VΝ;וUV Y Qg:ޱem[4:$DCMjVG8ǣu*q y饗Bt M N~/s棡e-f46tYZO>FUN,1LPJ9b)zeh=\mڮ IXN;ZhJW<~^+H'&:IvAۣ1KZ.ҕ׸jsVJ_EIN:ĠM i[MWlOtvC3e袋\gGyҖ۱N:U4Z&# Arr@ 99 Arr@ 99 Arr@ 99 Arr@ 99 Arr@ 99 Arr@ 99 Arr@ 99 AAr@ 99 AAr@TM)^o̷UYavF5G2Fr` MBjlkx8A@<@/S"Gy8'D+V`C=\BǫVGȃ|bAT)=)* r--*c(ZE=1/sA>x8VGyP8!NP8AN X%c6!y{rb,V wR֙ L 0}|IENDB`deepin-deb-installer-1.2.4/dmanual/en_US/png/unable.png000066400000000000000000000416651325164132300227130ustar00rootroot00000000000000PNG  IHDRlqjtEXtSoftwareAdobe ImageReadyqe<(iTXtXML:com.adobe.xmp @#IDATxxSOҦ (KFA SPqUqWW{@^p" ( lSVKWIRHC-mywNf)RaȖ|1 .ze[B o#(6|j/hG `ma0`!nI;@P8nC&G0g8{KVP|@^#=W)Un[_pϑU|>@Ir{b܎Lv˹~^n<{۩aw[ŭ. Ee{OG׮"[CU' 6(Veemڭr=Zz&8<\Gr(B>tR\/TCɓUzu 2Hcj Q~7QF;]r?19s c5J#GV7zWTr 3ao9d`[ feg+5](!nIry RNz7jߗhEҵmPvV&+yƍsB HzrcCJζ)!n]ubݪc(켻 ƻuA\U!#|umܸ[>UV apsPy(Q!,6FnUq+ϲ@V%SO=5cVϼ8 oU>5.\l䁾.9(An}n?O8( yTT%j4]SǦCK^ӽ%.cP2f7+튩&nڧ݇:6Fd/7S?t4A@簭0{^Z=sǯJ:b{i卵m/ A[ ߥ;l}_~E wΑZi>/cfN/YOFw.szER ՉA{kk-_4OO&|&?~tɽ :mzc hרA>Fs q#6[CvSl\U;a`Wpfznν*_zD`ǿ%3#[)u~ezkojyșfnn9Q@9ggԐV]ՈgTޮYO5[4޳Fl_UB;M\LM; ȁvɝ<V|,U4$8iN3} T˂~{ s}A([(:A:sv~X)Ue@՝vLx]l|j'kUGa˭ß/RT66O|,+@!~\ >oV_j8E׮d;i8%qR:,Q*w!N͐sNBA4,Qe< J]7$G|CA6YhTmpւ@.[[u޾;@LƢux߬GU@ ȁĵ?EnyYjzKOS[\/s4sCvc]TeH]ٹvnZM6ph=`Rf}ԣڞJ;+S~,򩺩_sZm;цHxA@{H)W_Z4U[t4ʳy:7ow:-Vo@(U|Z|>m=EMom_s_쏅zg=>aָ?su,UFҤ[_ 8ٲb׬֜0ޢUkԼE۹m հ~V :qcTjp`d>"l%)&});6i+cTB_ k*ڜ)WCi 8_vfS1*kGNSP%?<7VūhWJxj?v5R֕Z\WԴbPڒ6\^_j+&{>xz_.iu4k\nf?bZƮл,U;RxCѧs~4lԶ`ӬsFk֬إgtDl5:cHu=+5 V׸pKmoYw5-EjstC5M?n4- 8= a5}\w'(mGܹzX^K-94m6oXOVULUq#cfN/YCk8R~zW3_~\_ܣz^5]_%ͷwUeSF1C4L3>\oՈr^o~Zu.g>~x1jȾG6;j/WW-{{5x8(w!C/kg7⧟Q]{HPT\|8`'5|4^L ȁbU)A_E]EV)mtOul??6[ߪS/4cr6OߥW*omk$W=}cӪ55紺k;]i%6$+ԮW'5M'[`xmڴKRۖT% \[iK6~'bkwP?h uo3ZWeR ٪7P~ /A++#m!]{-}1UjkU?]"~\:ŕ;#s\yAlW\|>?P?F.E?'c{Ï ȁbU=a5Q^dPN?NaχܬOoNR>Y|6j+=5˭2Lĵk|ꔷPj.Բ9 Ityea[zȶ{8uٵ^+7Iݯ=͡hۑT~=z=wk:1AnZFޭuC+c95Qm%5ѩ OfE<=D p2ȭFnvԮ tՁ?nemIsм WTW 0~t.,VfV|Ԭjj{ع\/ڭLϬZJ {Z=ǣ4өג9w-o;贆qa3آsj[fS%R%v|7]Ti2'/SL^+5W>vt-.T3睥^s?ȅp'HMϡ:<{rtno#5k;zNvAW\޿\3>\nQQJhp.jӜZ ٯOg>If:K:fӶkoeQbNvZ糲|o0rTA~""y7# ArrpQ%^c//ȣ?8GW@=r>6)˥Leddxfeey7xq)r8U\\/ !VhO?k`͟58Fu^oI5Xr7C m0/ qR9dy>r@ 99 AAr@ 99 AAr@#snj>Dp84ScьFؗD]DGl>J.zzmD;8.4AdMc>]* y'[0_(=r-o5LYkz G+LY(h:*z(' {r9l%l\%iA^r9 }KCC~Tc3thqkmo1ҭ56~BGWAm_+WƸ6W6|na\_hSZ1_|Y@Ge~fnt1dj#ͼawưWxn.{8hcfJurZa&~iƥSz֧s v[ 7 m׸J澃eežL8_f=ΡL\P+NڔM1jp@u>v2rm?ݽz^~sJVjeӁvF:]p:|>b:5ѯk b-U_pJq %I[xﲇx,myuT-[ZM<5OR:j]K~a /jYSڪoVg@Fݗ}ŁxVqټrpe=L/|/ Xi3]f?z%q\U;NfNQ#~E77UW4::ͯԨ+O>Vv7V=0i,r:C];v1+r#>>qs4m/eĎ ,lCkl=r1%Ls!PhYUYBWҝFSn-+`Ey{m:BC 9'^~qjm5qmq}\#/ZwP5_h_NuR|Ѧ~[;VMڛYtm`F1>ڛ>lкR}4tөK\oY(=j37 !-}3{C-~J#}|c}muh}uLM[E>XJ=:U3CVq>;şWu Է{ G>[]ݧ{3"~}h+_Y3WVcdiϴf-ӜYd=v>\P*{=cm6{Y0cVk_mg}w@Fnx{w-}pyu9n+5Hnת{Rڶw~FhN:~ZxJUAFKτٵyEgv>\sWK&ェZev>K=^ɶnQ-ij9 ;N\P <[c^Ԅ++|E6P?s:u^YI}RWn=Zi"cFR=Na||[eAz֣fG5}|y'uEg5Ɯjk]۩åUy$n1[|Y@ٔ6ϳJa'f;5)_1~m5Z hy>;78|Ca5a1MU?ӘvwtUMgQ ,z]cNtHi֗bڼo08*Fn#,6}VnfUqw=?([ԂȖRFNE4 {Z4(rr@aY>ԮK1>^YGxG8(ȲXƿ(P1;'OzDOOh˓ߛZpg+ϧY9uOt Oxl5Adeh۶459tOQQ׹k3Z]NHۮMmQT]$ӰӶGo S^pAj'?FpFV0jYuv\u#:޶SQ1;wj<uF0FVz2q_J\/誆|wsokU:ү[Y`Qk })I_ VDo5o'b9 TE>]a(!\ynSӁ5 nta7g:..|YP:=4i!]3wۺ{=5m(D[hZG6_-ϺݑH8KW zH>\>>ש3QNlHn_r\#G=Gy֟x2{ͯB9vaD\G9q 3DX{;{<[9sGL0>qy~< VӺZ^~*}C}/ on'a!, tqy5C.Դ՘^ta7XOQ;OC;_n'a! ?$ LS[\ԫêoP$sXvף "JKHS4w¦okJY qŸ2ּh/kFLa{Ƀ'?5yuzec%uY]/(svNPBCSe99 0ꑗեJ9&m9)S>}Кajv%GZY MЅ[urwRKQ,Om,6SawưWxn.{8hcfJoa\_"kc<2+.z;T¨wk 3c}.2zƅziXPX~#?z\5OalpW SGy,LaY`|u#_-iiFk6nѿ@ـ6)K :m.IzL-= awֻt| y"]>jTo TowCDg!S{dh#2}Ytvu\WHÑK0:.bjjfwsV/gZԻt?Yvk;U3j 5("^ci79z*E#>/`pjB#U2 X׻0꬇̱\Ae-ӜY<v>\P* dV}##n緦zu`$/}KK쿜{ZVts<ێ2yUGLl䞧PjBIXкޅQg=]NS5w<~F.Nvĵ#wm=p實zu`X9?+߻k˻t\AȖgQmBbjU)#,z]9EgunE4)DZՑ yuyϊ;Ors5B#4޳prV5JTԂȖRFNE4 9@ iNP 99 Arr@ 99 Arr@ 99 Arr@ 99 AAr@ 99 AAr@ 99 AAr@ 99 AAr kt]_}Wkx ߴQOs\feif_.2)ۻDs3bִn6~>RzCixUbqӛts>l2 ['MTUa_y2zj:WHw6䳽zJu_ Vy[Zq\Gz܆}g6ؙ}|UZb"i|08sH0JP_7’0n06f;q4q c6c?35np.40fm>|͕s}aƻo cܛi8G ņqX{;uyeswx9o^R3yal>v{ c0va7<`.5#Yӆq;r{?0彽|ݘqdPV4!sKVqkN~Xf5a|71Pȶ^bHxK؟inw;s<gicøeZjޞh h ؗɕ|l+mQ2N>eH;_?-t9SNu?Uk(u=ܨf|nai [-z~s=cl\.%]սc+zit]9/ r =u9X9kzyIzmC uKM>0{z׷P{غ`f>gSI*y7RŒk9.l\YF+s﹈W[Wl/x{Dž٦griiZG sj:zm6[hl.{OLݳ6/Wy#g͉T9[z\=6{;n=9_g o>znE=._آ72˫clᄛau̪[ny@iEFWMHfO]!~ o=3{qH GߘJLZ/Y9OԶfgm5Nv^#nT98/](޸FMn(oE/G[Xm˚A=V2Fs} .BL+pcwdy_hv董L;5-M4osn(̮t@iҸ̞ZJx:]+=<^jt]'閽һ^5߽mևچDyq<)}l0^oi`l['Xv3GT@nGyihūf;9#5_{5g^7IfΫfMy9e 5m#\_ 5.\,\̶9TOy;78|Ca5a1MSc͞fƗyr=ћ[wgu:?\~u F^Ov0#bbK q4:pKf<-byD"NΩuJhHsj  9  ArV>|XʕAJ!kUTIC+VdBݮP8e2d͊Ses4RJJۧN; enB!/#/C=qͶf͚4F`T(OO*!! efB𺌰vJDŽ%11ѳnٮP+sgcSlW(KrXlW` 9  Ar@@ǽYo\IT^Գ׹xDM#EFGi[ߩ4/ms7kRW^%zte{}v ]O QA?6O~&vަ.Z-S+^Ew}˞A_:?K<\A{}bi@@+e߳]Cw?MPeM7wb>yC?d/Oy-t} ȁvjg@:a֦a4x |3g}o+={gtrUO_w?89eo\U1I|#a3ծZ6趸m&>.Xu`Pr?4NdyaȕqXYhܣT=֬iݧ&ؕf𞖟sڥIwNW5O9QY,_,+]p )JK=Qka_ܵK3zQԫywm5kxTuku5*GcbgHzx0[%٫[).+%ݠ{_{3jtP,򞜌!0氘*vܩڵk[+nVHi%e`pl @)F@ 9򐚚J#nٮ%QZUTIYYY4DcSkݲ],mW PJJ Q8NϺeBYڮ@#+j߾}:t\.}u[+ Z/c^Tr):iJʛ-NXH[989@)F@ 9  Arr@ 9 8Iܠ8 z$=rz=NlpAr:h<9%'ȏp֏(###vdffG6-[Ҥ͛7/2ؗȍ f>/:geV \e>)[dɒݻwܴi 543+###mƍ?_W_]efՉv DŽ9m Q!7X]0m @9gY} #> 4sę~! };<3?":Ĉݾmߟ31_/? tx`f+Hܭ vcāG !7NyA=r#0 ;`iu F괺#t'z&8 W@ңg g)WlA zB\!›k_+DPa;"ԧO, q/CA{y4 @{BC0 xR c{! -d,IENDB`deepin-deb-installer-1.2.4/dmanual/zh_CN/000077500000000000000000000000001325164132300201275ustar00rootroot00000000000000deepin-deb-installer-1.2.4/dmanual/zh_CN/icon/000077500000000000000000000000001325164132300210575ustar00rootroot00000000000000deepin-deb-installer-1.2.4/dmanual/zh_CN/icon/arrowdown_icon.svg000066400000000000000000000014421325164132300246330ustar00rootroot00000000000000 deepin-deb-installer-1.2.4/dmanual/zh_CN/icon/arrowup_icon.svg000066400000000000000000000014341325164132300243110ustar00rootroot00000000000000 deepin-deb-installer-1.2.4/dmanual/zh_CN/icon/attention.svg000077500000000000000000000135271325164132300236200ustar00rootroot00000000000000 image/svg+xmldeepin-deb-installer-1.2.4/dmanual/zh_CN/icon/icon_menu.svg000066400000000000000000000047771325164132300235730ustar00rootroot00000000000000 image/svg+xml img_upload img_upload Created with Sketch. deepin-deb-installer-1.2.4/dmanual/zh_CN/icon/notes.svg000066400000000000000000000134371325164132300227400ustar00rootroot00000000000000 image/svg+xml img_upload img_upload Created with Sketch. deepin-deb-installer-1.2.4/dmanual/zh_CN/index.md000066400000000000000000000077111325164132300215660ustar00rootroot00000000000000# 深度软件包管理器|../common/deepin-deb-installer-48px.svg| ## 概述|../common/icon_overview.svg| 深度软件包管理器是一款deb包管理工具,方便用户安装商店以外的自定义应用。界面简单易用,支持批量安装、版本信息识别和依赖自动补全等功能,只要您获取正确的deb包就能快速地安装在深度操作系统上。 ## 操作介绍|../common/icon_commoncoperat.svg| ### 打开方式 您可以使用一下方法打开深度软件包管理器: - 使用鼠标双击deb包,深度软件包管理器会自动启动并准备安装该软件包。 - 从启动器中点击应用图标,深度软件包管理器启动后可以选择文件或者直接将deb包拖拽到界面上。 ![0|run](png/run.png) ### 安装 深度软件包管理器可以安装单个应用,也可以批量安装多个应用。 #### 单个安装 1. 在深度软件包管理器界面,点击 **选择文件** 。 2. 选择需要安装的软件包,点击 **打开**。 3. 点击 **安装**。 4. 如果弹出授权窗口,请输入密码授权。 5. 安装过程中可以点击 ![arrowdown_icon](icon/arrowdown_icon.svg)或![arrowup_icon](icon/arrowup_icon.svg)展开或收起安装进程信息。 6. 安装成功之后,点击 **完成** 退出,或者点击 **返回** 继续安装其他应用。 ![0|single](png/single.png) >![notes](icon/notes.svg):深度软件包管理器会自动检测您的安装包,如果本地已经安装过该应用,会显示已安装和准备安装的版本信息,此时可以选择 **卸载** 或 **重新安装** 操作。 #### 多个安装 深度软件包管理器可以通过拖拽和选择文件的方式一次性批量添加多个软件包,安装步骤请参考 [单个安装](单个安装),多个安装时请注意一下要点: - 批量添加成功后不能继续追加。 - 批量安装同样也可以查看安装进程。 - 批量安装时按钮只显示 **安装** 按钮。本地已安装其他版本的软件包执行安装操作,本地已安装相同版本的软件包执行重新安装操作。 - 批量安装时将鼠标移动到一个应用栏上,可以点击应用行右侧的×将该安装包从安装列表移除。 ![0|mult](png/mult.png) #### 无法安装 深度软件包管理器可以自动识别无法安装的包,有效规避安装后无法使用的问题。 请留意界面提示并确定,常见的原因有: - 软件包架构不匹配。 - 依赖关系不满足。 ![0|cant](png/cant.png) ### 卸载 当一个安装包在您的计算机上已存在相同或其他版本时,可以使用深度软件包管理器执行卸载操作。 1. 在深度软件包管理器界面,点击 **选择文件** 。 2. 选择计算机上已有安装版本的软件包,点击 **打开**。 3. 点击 **卸载**。 4. 如果弹出授权窗口,请输入密码授权。 5. 请注意界面上的卸载提示,然后点击 **确认卸载**。 6. 卸载成功后点击 **确定**。 ![0|uninstall](png/uninstall.png) > ![attention](icon/attention.svg):卸载某些应用可能会对系统或其他软件产生影响,请谨慎操作。 ## 主菜单|../common/icon_optionsetting.svg| ### 帮助 您可以点击帮助获取深度软件包管理器的帮助手册,通过帮助进一步让您了解和使用深度软件包管理器。 1. 在深度软件包管理器界面,点击 ![icon_menu](icon/icon_menu.svg)。 2. 点击 **帮助**。 3. 查看关于深度软件包管理器的帮助手册。 ![1|help](png/help.png) ### 关于 您可以点击关于查看深度软件包管理器的版本介绍。 1. 在深度软件包管理器界面,点击 ![icon_menu](icon/icon_menu.svg)。 2. 点击 **关于**。 3. 查看关于深度软件包管理器的版本和介绍。 ![0|about](png/about.png) ### 退出 您可以进入菜单栏点击退出深度软件包管理器。 1. 在深度软件包管理器界面,点击 ![icon_menu](icon/icon_menu.svg)。 2. 点击 **退出**。 deepin-deb-installer-1.2.4/dmanual/zh_CN/png/000077500000000000000000000000001325164132300207135ustar00rootroot00000000000000deepin-deb-installer-1.2.4/dmanual/zh_CN/png/about.png000066400000000000000000000702011325164132300225330ustar00rootroot00000000000000PNG  IHDRhxtEXtSoftwareAdobe ImageReadyqe<(iTXtXML:com.adobe.xmp mlIDATxچIAzA bł ŊW*X Ec v ҫe9n6]XDy{Lf&Cr||sA$ԐBșQUpҡ!T-©JNՉH:cr""\$jJ2"3WBr#J"J>U BH|K*P‹!3OB"W8Bţe9Vkp!C)$,C$ ('TBzEBi#G8y仓{h^kB!|>[nnުkAQNB%>"5i5jTӧJәx !DB8"&&ZzuOu"HPfggOOKK;B񒝝V1g`)iz" *xI !ԄԔʟ&<:EU!9!NHUJFx) !Y'ɨBT]D$QDBN"p("B9yװ`fΜ UZ.p!B9ø;TЊ+pdwpED!g uٳ+H믿QDHDh `1ɲ\K)kB!g9r$6mKHQLWd)J5Bad}ĠAj U!dB!U"~wjBU *B">!g$Æ ;(FDB*!B>쳓vdh fYә@!g{UOH$0t:ԪUx$#.'+Bl&N&M\'" !PDB("B!!BB!BED!PDB("B!""BB!!B!PDBED!""B("B!!BB!BED!PDB("B!""rb% ",v$bB H,=DEDɓ/ ]U)f@,)Du("""&Zk!l$QXEbFHFR 4H*('B("B"GFHts>[UHE@f$I5 )HLtRHTM!""r<QI$U#1A ܒg"#UN1bI\, (!e)A:.R>PDT)8䃠W#$eULR^)d5L-kcdDHJ`¥rj!M$cV?/ˆ* bBBUiZW)>>剮^r}22"!gTdx US7)\mr4l- }IprHI2tYХCұQoA)JtCBG_bWԌrQTRhJWe¯ե32"/9s##Y9pNxi~bBBP GC/& iAb.!UZeCRHI<< Q:""䌔֌V!$ DWx(2Q/ \IhSŔ` I|tu`hٟ H/( MF:,w8?LD`$BrFDC38M2ނ((RDLr[BvyUAׁ^NMkڭ9;33˂"-[|{oʨLTPD;LVd rZ$B!)6дD>*Jc,? Y;RrroA1tb:YjBH8 U]dp\B("BeRўK" aʕb E*Fyǹ!yf CDwg"`7) Bop5yؤI>!S~+#GRԠ~/L1tNH੟]\|bohaSdJ("BRR;ZNQЧ'B( }J* I V*u!()4(="'ۣ&!Hel8'@.Iϣ畏I,LKHPDΑH)K^5{@/nBqV5NLV낣gc;HotC6㨃(;T_{]@Pp !,UZyxa`TK("BN+ >"m 8SNZ9@ߏ!0)́hQ"xxōV2&tJ$=+DBHKWXm0d E2$Uî*)1j"!B+emEC(dv#D^_ ) Km:)54l8Z:\1焀f BKH~T"sir)h`UUe}3GJEN,q/Jez?m1hG#}3pHr2GVGF% L*($!-@ LBWkrⓡiڣ:Dmpmρ<%j&W8`BZY|V諐A"9^=DDLaDTITBDA#m,s9GDR.r`/~!#pg#OZ~Cy}OC]QgCȝ2Cy$!V-97yn%rHɚO)oQ AQ!$-[\#MLPDdD*$';W \PM/s"H~+"Q̿Hr320-0YZjԤWGpPƪ2^T'WaHb=KJFZeE6)jl9'M("B$@DXky|>U aR$wpۍ?f7E%C1gH1=E.urG2WyN2n}BLBx.!H͖PD Q&& 9 41Cxj,/銘=+FǿdDˡ\UE#]!Us\u>"Y xt_]eU;Jqkk˅9IUqUWcU,91pRDE7<07HG߁gau!1NAOD gFhgX/9PP̳ N$%.dFB""$HF4.RdԤ>]`_}SaIՅgK8~ކ?ùj|E7,EeG0Zf[U$ռRE@kv-"ENY7QB4kk,f 5T浪&+MHUUq6~anJ׺}.H4pMHjfHOQ J=JMjp—WWD@&N) r JR.xRdv2iB OV.WW_l"!u\q+<X` # s U7t,Fr L&i*$i{jQR5^E+L$ H4El-=eav=<su?tMHAyzvW7EU)UG ΈQ65f 8ԤiXR)_6K0$h66TEdSߪ֩>x}OGFDBQ\.7dI`T#&.K>FTvQI1;y\jX2 G!"}xq@ZJYFA~_`*m p!6>)ac("4%u"T((s#Xh i#K9#Pah !$xW]$[ZZ GK1hEHJl[ษr [9N)]Jr^B("BNHK-pI*J4q*шX mQBB W4B覲Ȅa)A~Me=ؒEG%.pi\tj_JO` j"A hK9 ; %.p_> OPHvm"iQPII +ݧ) Nk^e`ɨmJ]ɨgBԦVGBi}C~!FDQVHՏ% ʶ鰽@V*2hE8NMD9NH@DA"$=o~%-!b vŎ&Kl{8W!t8' %d|H0+7077S[BR/EF<>/qHJ$"+a_NN_>),"ԔJDr\?JCzlJD$Gq,s^:) J# SdfS_F8M_Qhd˰{dd9DFBBS"Φ).:LUlPGEMh=AJ<(!V/-FE>)!͇V<􊙚$0]ǡSu&^lӆ9VbA"&7$5_$qߏGJ*8.p"b>5.\rrPFɭ9G **tnv]^)'2TFGS@""t :5 2{AD+ l h3$`]8?rzd{~FTEP.eSYĤz; :"2zȖ#)QNN8W>D 6C(#BrJF}bl"B2# MHaD 9 ?$oH͘,zl"A{EHPusB\z mS$4O4 @ӠKǾ Yֲ(BrEEĔduѼ|J^ SYHё45x&Lf,F=Z&Ij:w@|:!.ҜC"J6æDE_V4#9hA|bbb ($Br I(CRAۡB*+6ש7_'aї:Qd!$1jњ:"hS#C!!]L95!RŁM+7TL&K'bZ&IeD("B }.ӄ$"1iG@kkcӏÎ^";ZRؿ! BrIDlB0^N@O}5|-QXi뵩űE`9(!Br)..NDT! 9hɅdBD[Br" "!b!G&bYhw#WWS"EJB@q9âpIh7 )#m.".\.5v,!;-"""RIT/HJ ֲ$!!gxT6h)DR$#ƅ8\!U% $|DRJ塁FiP>0""ͦB,n 7^'%Jh#!B"$XQ§)όcz6!9aEJh"!i7$ˆ&'n}@XvOdƅ"!Y݃$›(!B("BNM1AR34G :PB0""o!!PDBED!""B("B!!BB!BED!PDB("B!""B َR_y]< ,˗k:?r?qp$}9vmf~?J*ߟxߎ|xz65Kԣ}k=xߐ+cIpr\$.{ {1L؝1+C &h]/1Kj_^.ùtxN̳_xן(T+غ|.>9X L X u y` 9S0}gxnBDxE_Yȍ ??dqC۰x;Xر+Zu(FX0ŚMG+^_Kh LYics)x7 .+¤h[whcX\I"0܃o᱑3{;>ͷ3.? __} J;&s%^ ~1P&6GVضÁ.m1j4B%M =^~ ~~ƙjXN74̽ ~^)Ǔ\u:Ua]>r܉N<*e6\&W본^SʥSƝgA/Ƃ.M{W WnhEF]Y/B{19B>3O/} >Ţ,lq|{[U׷ /_oGrJ1u_/XJuYH5CȰX56Hu.X7<-.~+xh VfۮE9#]L>k&~6P*v`꣈ -j #cc>|SX5foۋ=>w_.FaRwK7h:6# ym1sKb֞Ob'}m¡ǧw5N3:u/?G`Zy~ (|9ZD ÏuaPU{th&>nMRRD""%Ren\& Y#18e#^$_ ]RMwEii,/MØ9M1kW35`ZmKrG~w". [ɸmvh2"(R~G{Qu@ e":R![n. R`*u&?b[ח/~h\~4)=\H AMN#X &:a`7{V׷{.}wo65WM(}3YlHf=їۍݯH,VX;ѥ_mպ3Gsċ}ykDi>^YBkrr+:`ij`l0D'")X_i9ߍz@wʛᒻU:Yl{4x>4NgϻSϭo{~MEDN"̏;b5۹ěFZb鞷:tH|VJTy7(1}.W:L,PEހ<@3X֗K7I#xEDJU,A[C1㕟Pkx im2ai s'`ʷ!l_nC€70jp5Y)&4~1ctm3pЩXw17."i}8šdlves0j@'쬪m_~e:ƗZB ^JD$N/? η/ P)#^ *dرQxܻ`\:,7u/E$=hDBEA߳F]nǕI?ca^^g<,Tu_a]ic=ǽɻ.Ccơ鸢>G9Dz_6= /[>~ƓM1k OW#pQRv,|G`;m!_Y^W@߷?:zbEŢ#pӈ~7oqF^ {6/1SߊIґEOB;lUYҐjW`\?Ǒh2 ]GbsY߇Nkf{=+_mkoEVQ+dcStxA\ָ>pRtLw hnPD$(5MY_ǧnСѼ<;H9pcq׎;7>=8>4Uhh yaDffrJU6/>jEK}~>vI>qԂV߁ o 3,fa.#Vz _ꕘ:<,=J =vT:j/⹹tnp9`wH/Qa}Į cݺ$Y0٨S$%_ (j|K8zeuˆ3ۏm[aDW^z> aaI!(׭tACLR ]14"9Iwbֲ[6/܍. pVV+q[~_ ZD%+/{Qb2*Fr쉹ʼnuKAOO+O ^M J9V h %Ĵ##2jůĢw!(g7#:b=RŠIh'rMs@bRBć? 0OW- Â3qEg]tA)>2Hp6>Ys+čK%!;9 >,{SHXvӤ`>:BQ5bËBe"2~R}BeE><]{dڂL"'ۡC`ͪm\/Ţvm.2?[Oߊ=-ϖc|+ ˡMsJ+z(^RDVJYD;57`ܳ -5K-\K9P6(&M]#uKs`pܥ>ㆱbR<xB("Wǡy1dNw,z̾f &Z*ODN)R퉼B 53;;. oUVB2TlG+:dE<X#*.>\KUK*=Cڎr- jR͈ s'?w1v|&^|q6>^}x䉛0o+6曑֬%jybB^ɓMw0nk0>Wt9""' 5{/?uǎ ڡwu;z>ǤIK؟,=}x[vhi  WDw9F\ [$Mp¡Gc8|>}#9#}{.w(_߉kp8)H{UP7rƥ՝6c)u>T*A'U_ac>,I,sw=~85O/Z4nk2:e_ÿJtw.pxRi B%17 ;".|z\9:ީq ]څپ ;䦸M&# Ic$`9$,u'?sCvY5Fyvx8z=t~ i>+DI>%M1)1/\ꗖS ~],nt^v+ćvŇo-2b)؅_Zn/vODt9צq7Wcn`9زоay((K\~A4V} gߏ߾R+ÍԤ97oQ>S:yL ,~岙ٹ3tq%W[,t_Ļm]O i 'lX!Yz>9(v%F !Anj ƴ6٫W>");%`,$~sEDN>{i|s>brWb0{;R0F4fc1|mp=_LnC`]]khRkG/ߌgC򏪔 7WyhW(["Ipzx;rLy`zE\h.$ oǚMѰy]}L+ַPÊtGS!apot"t6isZ]RF[d8exիBDCLvhS;ԙ]6Sݓ[1C.Qۏl1""'C⫭H6Ûfv} h> kWUvͮ/B۾כspp֍z,ïG\î8Н@܋-_/ 1߀hܬ+n kQuYI;ٝ1a\<;cK>9lr7vZOש b08 IǷ ؈V%KP8p~!ypL+hS? +=ćCůs`cL&ߖ PԠ,rRRB9tUDkzRdh!BB!PDBED!""B("B!!BB!BED!PDB("B(Ǝ/<ݎN-|c.u@}[ޡjOwLϊt߁ ׀)9 䴦mfdv{ڣQ bsF*__Gۄ>ZR;.>]Ӕ 0csUS\#5omEZmzUFK6st=[v A;mܟG h|ލ.ٌBqaЙcR n vwzˆvԱ yըdfLjgx][Ƽ7vc7yhw(}I -œuxcx Sx܉ůmq^|?u h9N纖z;(ÇU ǐڡcRlt>َ!a[5~pvGt.fÆ,Dfuu8]s4LBg,=uE6CT)[5~w!=ѤN=>\`? M ]umƝIZHsqϔI!/h#Ms47Q< ی iw κ>4sۀY+n 121X^7~O.ns\]a QanM-bb-/Y, àQDED&B5g1;gᎆUq0Ec}veF΃qWf>f6bNJOJ(JS$cG~֤DXRsri*Jl 2l:)56ѵ?~Ţ6!˚v"9|+20(bC*H/KmYá9B|.eHTx3͜eŽ.{కfw'+m.^wU!Mbў|ظC-E5Kυ7.Z})ȢwoFM`Z~GT}tM*DO5F,/O.! "GYo87ʅ?abg }_V{߫ܮ t hևceYNW^*B!' JVOB̦9B!(!BED!PDB("B!""BB!!B!{p_/8T'%DOfaxpV#ˆS .̏f}d`Fb7 EDqQs g N4G)iɋ@("BN؜ :i_3#u$V I}12~,W%fk:P/Wg_xu%W`uXG~է`ub@'?M[3H_c1v [^>x/`K|zQ?2Ƭ)A:=v)|Ob ~&O߾ή-R9a9e+DŽNLBw\BMJ~k&! 2,!)#e-*?V*̵S#Sk&0yaDDȉ[f@ ~C8e n?' JR |ن(ahVM{P#kQ/F*h:{B "GH岚&^=?М1NN.iR$JԷ^9חs!gR3U$^F5i^~01$ kQq_⸳.[+`mTsؚ'm2"ˆ^4TI7jU,W}F}^  ׫vފoԎ}V<5)q3$O] uG% ,pDEIZ#+ lpwxĸm[+c?K!'  Wo}-)#X6" @R]ChJYxؽI4p̰֫aJJ{jP;xvlDb@} WyOkN/ g"֬%|qj5"sUD IQƎ RDԅMsEo/48 +`nmw}*nj))qg]P0FY't>n&ˆv ӿ\*!-fbSXrZ>n4MVz,r!!=^|mt|Gk^n_76$|C1|~Y+ iZ۝ޣJkP{szeEwg-8 +_H0Ӎ0""0UtVK$QHX4E+ Eu\IܩѲ1~J=QC).2ֺiWz #"B4"yۣq?:ĵ/mHs1[JhXӦbѮ<$<]R*0ݢqvb}ZU=<||aaDDI"9ڀ&džBd i4iD+DXxm8nݖ`箣m*kf7u8pj]6]3ٓb-TUo[iY 5M l ןc05j _Z~& qOгv톾`熾 SG6)`1˲5TԜL9GRF&JOB̦9B!(!+REN׃HB_)B9!PDB("B!""Br7'/!!-@ %X!81l[#g:ɬGfiAB& &#n=iC̙g(R,o*_ <<>q2+bGs1\41 0~s6^7e!uT.\A|u^Fߚ0fRj_r`~D&8}6F,s`\4! '㜪ԃfYH(u'2 09p{.e1"IB3Zhsc^C.D!^xJ-~tdBN'wİv7&n{q"Ǿݢp_CYcc)&o7b]Ѐ:AeW_ͺ@%<߂gYS`uUMl]lAV:ۀ쉐4a[W; 76(^1x6+J5(oF$e"׀+Xѳ/rm2<:D& 9>xi Ê^BՈ㝙Hqq= 'y|arbӬC^:]LXJ/|;df'fbHS wb_(Ɛ^[Q[FDdzQl6uJ4;EW;M^,06$X\~Zx0YC&2NzL=.0a:ļ͘lF|F 'i'%e۳p}LuE?9\'hfzGB>S.ELˋ"t WvawLq$Jfas;3.ƳH`FN.qᾇʯ]qSϽ^EXS SwuxR,٥D[X _V.Mߕnю۰U,X{%̓0-bq{*vre&_OKt 2?""g*\T8?Q|QG :˚Nv~?J(3ot1|\EM\a2bcIx ޅE K~h?):1hԟ ?o< .6,}ю]>~?'#@OҰ|W[ڽ/heOFb~ڍOĆg#d919C8d%Za>/4WQTό y}?EDBZ,.,xW˾ %bMX9ixQ*{IT׏d\GHFLz!7*_t|LEl^0z<JPDn'&S} m ݆xkō.KFm,v _:jE]uȶ3[h/%2"|;\5N!!_`h\4[ m8wOP"%""tV.#k-=QbJ=7v?]=f>łrB% )IwGlcۏL/Q[X+~Jގ~,ܮǓcp<12lN,2 !9q|v\x):<"j{A4 .5|M I Ÿ|qJ)#B* ;MRbe9])kx9qdY3Q2] 1 _H4Ge5 *("B!!B!PDBED!""B("B!!BB!BED!PDB("B!""BB!џWzx%ːyEG4Rw=s}("!X֗8a=qע*>xn:\\vuruȅxyMIO%r܎>w~~+cCp# m+;>_u'ӯDL[e1uQ~v/ݑV|ØcI}/ cWoEsry7^4~n8p ^(܁+?1>,>-޻%\G8v/cpXC'3#މEEߛ緉8}7=1]spuDZOw(ێW]ik*op ʍ0?b=pٿÿMȥ<'Z,Tv$`D||pS?Lp%zԻ]< a0Z0Of7nFvn;7۸|~1;PdFe|eh~supv8J?{նk (ػbWTEEk-Qcînbowf :"(ߛ?su֚r=~9 sg"G<S^B=ԯ" *N~mUEӐVԃ=֟fJ',lXcUy;l'CFܕjeZ҈J/Ҩe6jQ!Kr*Lx*5[c ) u`4O6$D /x.m֨8>?raO~#Hmhr%l>;b}|iYBrDE?U FXG3h0-Gg [tqc12C1~hw բ8o )d,r&l*UJCŽx[tϕ@5)Pg <ɘMh`0Nb:tNC.ҷc(K5E|E@bsϸ@EQiǛc`@{GR7CMxHg |c*7=zס&'#+q7Tx E6Gybv9Z蟂*;C6\F+AEN(ƍ^=yc͍2Pe9r^ =sy1oX|'S}هUkޗ|3wfDEyk> M!Ǽ®j44RȷVi0V>9JĹJ{( ,צ XטʆX5=&{3ꯥ䔺6p.b7 =sELWn7L+׺q`ESyRna!v\:BUGk=*m96Z&EeϫuMt΢F7:&7}v?`x/}]/>\c )ɛ3,zBqN/Tߏ-.sbc -z+:w鴮oR?d*ϟb\cko˴_COR"FQ\J(AV,%28㴆d)ڭ[ >m:ZߌemVDKјZ9FV,f10jpjϋ'yбM_MwJEb$$DGjh(ih#:OvG=[:% ;,ckvtY)/*,?#bޅص͗+Kms1(e@|#z&hO4wU;e瓌\U%F2,8Wq2ely%QyY'{Odc/K߈F#iu\(QyDPJjByPlCPT4Wf֥[*\2wߚ$9"] 777kVgˠ]k?)KZcnN]R]aEk۹e?0k `^(;賌Fmѝ5~Z4G4tJC5&qr\)^!r$}Uc/.$X{7GF`4(Fe!Mv:ay՛,>swyQ|T\_Vnf4*E3Rl. ȐrLL.6ߟKSQiHirZoQz Շj!0C*<2|rcߢ"ݧeeOeP'dD#+6h=ŁloЇF f9c>*9`T[aW{.4Gӫwc ,vgD&'yg:mGRۙZ >%L?N{]p7+,<[_ࠊ1-69-*Z ?WײS^>"}ЛU,*/-&'m;+{`kT9*%K(bCwq,̗~nZ)_+E!iӰ_Mθͨ18ˎݳ3%3YSt~Y1m'JmT)E`--#r V^MmsíW;<[7+[??Xw#?{AqZͷC_.Ug}9 }w2)" z_e̸RVWcrc3U\ 45q ~=CQ=ngA 6+ .QG΅cd\LEo"% MIog2!|ЕK\0Ix=1ZS0~A՘k0hIձڭؘfugT:CI[x*grapfT̟Z]=aaoA=sb]yO`sD1q|*,-g9s),`lL0*ֶY@x',yr(CR:[(iK~ML БP{vp+Kj Z)bg73?9Cwdюe~FH۳ J@7zY02%j u\m9vi1\Sܕv%waW"ŕ7Gk7nͳ~Gqjj4Ҥ6lNv8Ϧszp6gʎzzԐ8o`/w6/9%2 Ǹ)\)'W-4m&** yɷ*!~zkٿyב|?wn{w{L ԟ{۷O1є7l㥵(?rx0m ۱ mI@]?-x3[7Μ /ٟ)J1 UJ# @g@uYv 2xɭ[uwAb|wƉ:e3Njt50ǎ!cuIJqrrh]<:E1R|kѩ؁{gҤ6\ՍPՔ/Ĩ EdNp]^f 7%]͍] MV q /_> T# ug~7#~Uuy&=q(N.V6ZcQ&GKzycxt/ܹIIoHA5_R7k}M|Cww}?So Z\{)Mۓx7& )O<]͈q(9erf0~ePisq&7HHW5+.S{&ԓN|e^IcSw;|v YbJk' \]ړ>4M<6g%Ƕnt_xӊgccNCUowv5$SC*9iy }]R=61 t/C?clJkil[ԚYФT|OϣAvڭ\^?ٮ-Q!yJ;5S5ؘ+[2mv&sD,+i;RBWlc>IetNt^8o}z*!mf10ۘ:E|ZfUY+G*uI"/X&xe76g{kXOĭqnH_¾a)o>s9NGf-u_va؎kJJ`\ev/0"tkI1 o`㴿-d{#Rِ2{UĊU)GqD19;뱑. Om_? RFtmɖ\mN&18z,⽋&3X9k? /g4 +2ٲ Dp}ǥfCqQ=F}%M.@۩E&M5ddݳ)V3&s(g"Hˠl#cAlDӕzc)?Q%JcQ$xi$/dʛ|_?=ϭӱAThFrEBȦ4laEGYgDYĜߊsxũCY:<':,y^,IIZ/MAKaOfqJS(XQ㋠z>Cr*M=d}_~i;46 5e5o3s} .n^+[Gߘ[2Qƶ%X7m +P$>5(]d_Hfm$F+3%bbR*&mVРLJa<)RY)}2C՞1^H&ʤWcI-Nb˪P-eh mNuxTSu:7Jf WZ1ٿҤkl6y *5 2iQ^4<湍m /e0=7rqF[sGmB7; @6psdϊb+2PAvNNNRN:ʱ+ϴI[3wyF}THZm\$.metuO?Κ*P!b=N&4!rIlNT#8(L Tڿ/WdL/6Ǟ-/CیM5tG]?3r51. Rq J&nHz;!p/70ҭǜ4[}+2Uƭ"YU"vUiLdD_Z˪5XL>M7Q\9:#;{o`x7ŅEm0ZdW1-Q*^ʢmP4nm=0W˿*O-ťZQX޼R~y2T ͝W@ mqVS&هh6h\ݛv^oy-wP|ؓp:'] y{n!yQ@\H+Othφ>Fq1.]uyUӔ2~MyøxЏlQ> b;Uh8ݵK|ji{ hZV Sej4,irT@m 9;چT: V ^QdP*.Ϊ6KNiUMw=mTAe6څ5b6׎;qYQ^,\Ӓ9 :}xsL %9a~hKMʭrCЙڱl3pNkX2?wڳdT贄5Ig*XK.ɾcۙr{11"[Yd;&W;~pKydļZmKɗIS}4HOп}^~V;Zgcõ p`dXH^ˤ3Lj,6h4fT64h~A$ě~+Ѵ*)ϟKvcDgd"C V/RFTzA͛ Ӣ yhQz@T8VvfczoL j+(l등F}v(&*/1uVՇ ̊RMjcȔTi~c'D ?J$HA "D  AHn.̠>AȪ9AH;eh=2-vJJjL/J5 §$~B U$5'X {C3O/<\qvÌKz.A#OWOH '' 6]O'4U":AH\d?I$~B]v5Bj[ :c쿛_]ӫ+,AH2l'ˑU PYkf$t?5{LG>yʋ]*RZnA*dHt?5^Q\ٸ ya6ς6:6LWh6b$͝m O H2قH%7F=AAHA!A"AAHADA"AA!ADAAHA!A"AAHADA"AA!ADAAHA!A"AAHADA"AA[(U$ EAo8 A!yh _c:#"AOts zA%7GdP6]``YRAkxiI1͠RƌPqE!R BR0iI;L}$He? !'fTVR͂ B8 sC>%U):Mi6qUR݂ BELsDѦq$mpQ"-K$ oN|ͰqB&r`CcU,_dj e)B"H ~5"&d /8YPbnHHKR 8"c|!2Zx%$@A%)1#$ \: OzlLQ}SQe  -FDȘDDDHISHDhyĄ(!gDGDHA(11~frGUHHA!Q1*XO(у gCk tnlIENDB`deepin-deb-installer-1.2.4/dmanual/zh_CN/png/cant.png000066400000000000000000000503011325164132300223450ustar00rootroot00000000000000PNG  IHDRlqjtEXtSoftwareAdobe ImageReadyqe<(iTXtXML:com.adobe.xmp 0FIM/IDATx\q썈q+.p2sJ-Y3sN˽riܸ*"@6D{= =3>yH$RG ""q6{fCp7AYp'""%Y@73t9ыυ6г$K o, p"" tM6T oVDDDj#?g|YO smpKE%o'uU߈(oi;I $.`(3ykC\&B=zHɒ%ZXXذVJJJ½{NM6me.0%3gY5rCCO>3o޼>fffj""Xgg2ZjѣSgΜy rZaj x /qDDD#88e~*r:LJ}zP}_6SDkOs}غveiFqÙjM5`Ș|&D.EҺܼB N=}nu@g .!R"Eڠ0h }ڻ sUyUoD?!ШTH> u|rjNDD}TMLAxL2*tOӺv/Epֽ= 5j}Zd ѵk[h\]]ѥK| f7m?KV1'F '"zamJ۶m1`\~|oCxBl-\4⒕HJNMepwwҥKb lڴwrr6ȩuݏF7xIm H FkO>}k֬_~ [[[7AnenS#d^.r̸KK즽\. ݻO{L;-4y:,ڛܲؖ;w{ }v5,j4V)%0j`%Y&@A Um}Ly7+XZZވ^uݺuKkoŊ/!]xGnRm$`-B;Љ^UȽ> KMǺ}EiGݿAJ`oį1%""ʪ^`DDD9 i21 эtv\ڷU,aT;Os#""*Ü1ȉANDDD r"""91ȉANDDD r"""91ȉANDD '"""91ȉANDD '"""91ȉANDD '"""91ȉDDD '"""91ȉDDD '"""91ȉDDD '"""9DDD '"""9DDD '""bDDD '""bDDD '""bDDD r"""bDDD r"""b1cF H$?1ȉrjZsNRnΓaND r\҆JO ~(T6ZC>#d2]2'kZV C\A"_Ϳ qm*aaND r s6*J91ȉ^, Ch0Wqr/4*6Œ5g|S"qnl/Upr*}OITu|=/s{B.h\ޱ[/@قc<}Hb.zǰ~܌ƹ<6*9 P}A&}yfuQc~Xrh ')5H>=emWq/_FmK7p5:DP؆)aita:q#:2MQ&ED "Y| lEag.m!Nap&b0ˎ(o[+;C\~ ;b]aLma:aAq7:+"'fW|Q֖P>k(2J;vapz6Zb޾_ _w  ?iկQk/1? `c$u1` Nۇ|aS#Fve)!;1|. U.^g[лdeJigb&Ca5>8=<`fiG [x8̩)=krBvUQtmur +\rYg +wрgD(ad'9IVMܫшY'qIpZuGEa_Lĝ_C#>7ox7kosmjiչs#>n=dQ>+D[,PT0 xL#ui=um) QkKa_,\A5c0s4tk| 4:Ŵ:b0|5~:brM[O>"5Y1'(BZ^;׊ ΟEʥݍnE#R Wݦ3#'`jz$Evz kWo#b aW~&ܮ!%ND rEy˹ aHW }yۣĆQx0r9R.a'Q]DiN]N0I'J!sӅF.}m5!JD 'c .ɸUu#3?8VRKw"14I8"zxj(@"QeQ'$#f8CDMHwNfgU1d1ei`+v1ȉ^5;  |!D 'zh?%p_s։D7ppݍoˊؿ:Dʁ}Q ήAJHpaW^g6n]C@TgD&1t_U}Ù_ {"Tej9!I`ڹ܊«\*'5X ⶞@򙛯h4zᣇaPnԺ9jUFi'94$&$ !Ð@HD(_chSϙ]@e_nĵDSbh_ >՛״S,]mRtY.IĊ eC"AMUŘQIu>b]m1IaL=.¶ X?s Q)üzeH&f2 BѸ ^ja;( GOl۪ Uݲ7z6G?I]ÖJ(>T=w <-CE^xkY144-ܟW/ہPYbնۧQJuqdyZ @qYNQ~`,έ L PTr󎌮Q⟥`m걌9SԝMA1[l/=4N%3[I*àaEN:u ]g۶uァAob7y0mhVs0m_2|ްwQ*,7)sp/nk6qЬ??Wx2G_:DZ0+"LˆB-ujYJm!x \GiHH,͑rb~އG#ش{]!zKzU*U18njHbB+xT.̟ l脖Ԁá"芠nFZKGr6hbcp͡3EM1SK Vitam봉K?# EB#*xx>&ⓅP{ U FmWWl%RwZ!ى૕x/w&9U5\_U8qG&at;/H4j$'%Cf] *[}8kFmjĊ-(۱#j9=5ȊGvoGW$ j#'GbOQ +c] ik[*qhdtwJw[L9QȵA"dŝaw¬!\ Fd~н~R?:>  T$RK{M8)lPN~[GGլ9ss|ZBW]PD3"锖a }@ڗ(޼?6*FDWlAaLY/F'^/>za4%9|L4[Vo X 7 v0 )\$ڢ,`%4DZ+w}=ijP.c7*&zܢҖ }Q[~Ox}Hu7Ͻ,xdW Cxd2)uB0REd2m8ֽQ I)Jt*ڵ:`["%0:"nuI>e[CcϺ@OPB-p: aI\G̙Qa_>flfCpY|;k~ DΣPLְ6p|9Fiý#1ȉ^ w1ؼUQ~Uߑ×yx{@T ]U~#Cʿ2#@Q$xp<|Q/5EܸTVpMVM\TeԁX4Ef9>T%ʣ~\[]ЩDI 5ސ 8H5wR8G4AQ(״N /1aU}]q8c:X_,C&#kaMc:}hGB9*vC| \VTTZƍ^ |V^xYȟ+qի;Z5C\r3v%E'Fo;o 끾ܐ9Tb?OYkFK l~ 'kkYK2RuӗdQOC+| |Q?jĪQw)B^ -3BwÄsbJё9nmTGYɲ{0ۨ]Z}66~FF*dz&f#>q'kƠG~a ~L9V`n>?u+uN7{j^U;am5 Z1vwTȦ=%# 5]jj[3>V͸l; ]hl77Z>_ԷG^kq`C8Ulػ_?!Hzk8oƬP&gpe5Gs;1]S0bg|y?v-ʎ> 4|>\Tk0jQ$e|yVP91hvg>&oSv&l>ڝR ᒃl씊bٍ"X5ҧ%)(n=Q)pqn8g^ |e!>z~ک7<%1Ansn0S e?~!8p gl _sWc'rg_G,}9k֬[.nrlE3VaA56,2"2}x +P,Ժݶu}z_ضׅKJMX(d(w,X9%|gG[{b{'vC{1!.7,B'gؘI sѣ3 n'hN iI~|0ε/G#TeFyQBj ZM~* ,Ūg~qBƅX,lS*|A{c3F;-Zq#x}q>Ӱh'Pi$?K`OG&cP{oF2Pk{s>V=| ?NvO*KB22~El*QL q5lw;5E3ee`u.mME9%pԟ<Aiˎ(}N_]22/ۇmqo0ܒsĺjj[C־֜m!VRڨi} {]Exh  wpПb)HHT!<$żP:oal26l]ߨ;&︅Ҫh-'$'"r^F o!X'tcMK_T{Lߋ; bBC ..6wDr߆𷿄!8q"5D@ 8x'C۠6)4} rp wà,nٍ嘃M ~hܵU_9%RH&*1LTei~q. -TjvԷo!kAFqr~?nNW ^)\\] /3o"44m9ojEQ vQx}tgi6(fu*>ò'xhIBm'p`bm] liuhO$̼8"VvGPd~;%]ٰusAUQNԳBU8zs1^{ѻӍ,GbP%RTܽiRp{4*meY9Xr.e(56/ۇ$g|&MSn; vck`)|Fٳ FBi }_1e>AK"({h؅y?ǵ8t!veE^Lg|aq;#1Cz Any;)>nބerlnu9_Yk1` &OhvG#'xffWBnIXx2>l-6/h d/oSrzJ6zfLن!!w>&t 9rC9P}W/p4'+N޸;cNst=}|]ek8$u.G0(X{j#mt=3Mdnx,WSjL+ ߶C סG}ϋ׵!jը*Sı9&nE8Xϭ#/{Fc>{~e m AS_CX~1p%X|GgPet,yo= }pU+Y"$H qKu UWo1NLq0`ܚPLx5VK1GqoJffW%EYn?sNT"`5n?=M,Gs e| 3,_ctVxo%Tk1}Y> {-f*ʍx>d9gss]dM9r0L}TZtguy`hp]"7B5um(+zUp4879Eߴo>n+Ncz#y#~b?j@i*àaE^bb8~mT4/^̑P̎sC1]q^ "Z:Q! iZ'""z1ȉDDD iP uUZ}t:T/ /1%R^-`\B3?0ܿ%20Դ^D_{l~Wv'm~M$9=lŞ["~e^|>Y@HD':aPR:KɈx'>0/61Zr=Zswylj(RP+;ȓe|$.zk?zR",:zB1fi.XrKis;_{^9컂LA]ϣ^fu)$BV? Pۇ=Oetor+"pr8n*>Uа4Xء&JĩuQw,@[0_E.MF|]N*Y#|w{TbGiڙ5Op`d]T7gO`\.;Y\Tk0jQ$ɼ5Gs;1'ŧĢEh>i9V d5#vgcׂ~h76FA;1y]Ͷ0gC1um>+P˟vjڐI Ĵ^q }3fu2Z#<؆ooy8|d#o8?:4BtH8H8lf|fm>k_aɯ"|ЎEpzkil#GX-|='*{0uƏeYfdyWI껴=c!=ytA-_4UN"r3Mkte]Jvqe+m1wn{q>V iXZ' \?u 5' 9f>÷h};BXpCF/xxg$#!QTx\Z5mdD$ȝB+ؤmkl26l]ߨ;&︅ܴ[JowB[- Ri.Gs35RS.7J[l~~J*FMKس*C`(Ԁŧqd߇D?FeQwGBPGzJQ16yMH=ۣk;ر_\ߏG&:Vp<0'NDf(y d(|ԃ^OMΗ춥L!'Qn/2XRU'>s0~ / /{Vnބwxʊ (&-ˢC(>aY8x"hH$C [fhcշSZv^Yk1` &O~D| Ƨaϊ*vaޏq-*,]];ۍgf, - k3sX|NJ}M,lߊqy >nc>'Ӗ@tޅSbH.?Eu-u(2wi3¬JmY? W`abn d2 wE˘mk/EmT6._QU_ߦ˙zM?x#OR?؏’F&kI|LCѢL Bo= }pUM*W6eN}cZ23k1:K_`^ VGGM32e:zB oY Bal`]Ǡ_EKxĄGDa+Bv+[GL_1B6}0'41kCԪQ U*zç~/,:|X>|%Q uVxoETٴ%M0q ߚ^oBNChԪ֡le$ 1nw}&zV+cfۄډ2ȏpMeb^L9][ V6M r]C8T S5dZ .Mobp^סF>hmeڭL [bB\د8ǖ7Pʐט#0Z'|߯+zI11HN@HX RRcpaa }yk'>Ճ?bf :y!N &"vŤ&ƝsCA1]pK_cn4>3zW-7F9rZ'""z1ȉDDD '"""9DDD '"""9DDD '""bDDD '""bDDD '""bDDD r"""bDDD r"""bDDD r"""bANDDD r"""bANDDD r"""b1ȉANDDD r"""b1ȉANDDD r"""b1ȉANDDD r"""91ȉANDDD r"""91ȉANDDD r"""91ȉANDD '"""91ȉANDD '"""91ȉANDD '"""91ȉDDD '"""91ȉDDD '"""9DDD '"""9 /R r.`q@{^`J /s c1?- ?_, 7gm$'c?9 Z ŁBÁInOD:frJ$Z wjq ~G<ȌEa.$U 0=p H:ŴC,+\b'[Ӏ}` [we`DQ@Z߶KoF|,>D%6OlF82SAYJ Xy ߈ ϷjM1ȉ^_G O]T=\Z@-:qЩH`< >S8(EJz uhc*Z`AA~y-xMni/m50}2P H4?Omm/OlZusbZ}+gvq2fW?"9%B6@̏ƊJT_[zQ"DW'E@* o,h`.$6dWEuUn 8X?Da,-NFN'XjObzb'ļ1ȉ '>xE*ur"ڈ] X-G-GEPxJ͞YзRD ؖa"S<,Ӛi-\=BT،"6B[|j Y-H]EދJ]!'2TQE۾ {k]vqlnqm.K.1bgiT>NSٍ(m10PYk#QJEX <4_;JW_q 3~,ʿ%`CkkDxVIG#B-U3s@"ԓn>Vg{wZ<έISyxm1x^9qP7n-AzD9,lj~#vMT\X0ڗcSRGTbx|]_gآDvJXq>zV-(*f/TV"Uz~@"3}g"EE=+R<1[p{1_;REª0RmmAȎY-QYVKEӷxg1fi]Ayx0p1ȉrLT{EyNlq;} Ul*p20BT[`rNDyQ][Im!+fD-moEH@hqMDA m."4J+8q"ӇyY.sq}Eo``"?k"׽}8h?ND r{n;{¤߁DpMjX&7"LH4E=a\QDAżWvvjwvk. |$~? X5Ndk%Goj=EH/ؓO"\KA}75';WIR_SH>vV?:x"UANWDXj/"G:(ecbT.b-a"VgTSmVtBPמmf@#w ?hQ9}"䢴6uZGb_lfb=3>1K#(Z9<. ~(ƫ0%"s(P p| k~"Gyq#ʮo57ˤ BѸ (FbmVF25[md^&*!'Q=ho}vPe4ȉ^lz,5\m3^i@"""91ȉANDD '"""91ȉANDD '""BGBB_kkkv+H!^?k5rXZZR)O c+Wv8YoR%ٺ3^ڪ2LWIpfׄvVLz-[W:W '#O{~T(+z+b˖q2ȉANDDD r"""b1ȉANDDDyF:CZpN;T+s7n=z?1ܐ$4LW",xWj5&OHol쫿۸fװf(D](͓:},.7 V]w='Wwx4P?\A]evkx%|if){kK֒zXvB"܋ƴ5__i 8E[y,!L.T^&9~Q vcl`kĩi0;nݓY\ƾBxPOލGCc mJ "R N 3'.ƍнwSjn#?O]4HC¡+qR!q7LL `.~WkػĊ(MEQGUĻ"j@w9 f9t lz?4HI[zE RdGieT '2}N9-1K15i<*-2.Cv?4:MdfQT0TFKP$OAfiYR⏿"k!&!A":T0if.TF붾}~wC=ۼ}}罿7wy#]`7ǷU-XCCz.^:.{:k7YWI1ҡh>.XԪ=xDQ:'ᩤRtSO֮Mj>ֶnMjͬ_iNe0Җ Iڰ@KwSWuGU?Ew^Hܧh*et0eeLJ?GoW kky MpЬūrg-iPدsz3|q.9Ֆ''MzY=frQ xM4}wV+,ֆ@\GVE4I>̉J::kLWrVy.ݧ+ʐ&* kƒmjWi ܶ;gm/&눯hՌHtM폨lPּί+wgtrF흲\-Bѧ'{CV-{5]O)cYO3_B?s!ǘ3lPo2ʳ6U󪫫+ݿ@&t)gŢzlKrdL&SLt9֤ %ҍՓz]DzQ&0ꂡw0#ĉ7@!B9nX,&r^ǖT(Je~Lǖ t^C0T__Qfcyr:@᡺ZhTd2lHLLӧOEx<>p$BH&ln%Rn3go&rce È577oK&}l+n^!_; 6|Vرc}===oD"ifnx cV\IDATxtT7A:(("bGE,DWPkk~vQP@"("@(H^<;9dv2kJ2s239s߽wRRRR;sqj'%xwy_pIlg 3 3u$ew[`DB,/,] bÂKlh);e;'EĆ*)={<GE/>`]K~fEO˸U*R*/Y|d#دNjWdYW_qU!%))T)H[v Arw?\9 ؿF[]Z,J )KK)uŀ 8`6Tq!^pe,% ~ 39U$iթe))Y$u5;龜Ԙ4<]~d+^թ],\diii@-Z6nܘ9 6o \hP'=4moȔ [D+ U~"A !/0TӘҥK%ڵ_'6<] rl3!ta U{An'BTPKy1Ot"М /*u`,!s-hByķB^ھ=6n\ WBmW؇d7_ƒ 1Tx|;Tብ->hTɮ]3v ! C9V{i $@q@x@bKR7mOXRjmw{,2<@vi+W,ZIIMҥJ[*ZRRoieĒda_ml㸟l'[dv` V\9KNf2ٱc]l+ \j T%iG|o&βkЁɇY--m}>7}κuk|@beʔUVOrY9S6bk'ɲ]ƇXrןg qаg@πl>T{6KVUѶsָm4~!|`_V`%29Fs"^P]S+޴-n/[?2}~~V|kt ;-cn}dU/ ‚:˚5kfUVu-]Ծ OxCpUB,--͍U8T%%`!|'v۪ٚuk[OVVaR%Jk_enom}kg]ƪUc~iv%mҤɹ>4n>ȁ!vy-cs%\SD k"[bmذ!m+UMO{φnkw ~?lڴ)^k踪sw} _֭[S+trK,*;mJ8; ?E]d+VthѢ.zn;vtwqGGVlY={v .\|?+T8`\[Rc2.;2.;C}YlI׬4t:+2[n;m䋿Zժo~7;zC3Q" &G66\bӦh?,Wϵcs[o[dmڴXV-/nvF.k&9S;@^ %t%K[n`'j`;cLwP SH"v5WGWoKQ6r=ڟk ON:X$ *:mլY֭fxGe-/ Ж/_v}l}kGMr\`|ԩPg ~UAҥ"2ĥLtk @jUFV=r)VWkq۴xnSCXVZm}vU+t~i;Ow.\j׮m۷w?6oɱ K._^{6 U޸s0틠F0,?_r!DAO>$sQ`g};?i{}pwV<@s "9azPPuoyL'.n)U 4E [z߱bJhqc{5RRDe :LfUYBfϞ'_ ,Xpݥ} k#9s`Wtk@;bŮU(n٪os>odڪ0~\6|=c:r>Νwm5vymVJ,MM.kҤχ@^taA>~ܹ6jtkD{akq4SNn[re~8LNjbY^WIKNhV\e_}~W5{-[5j9z)>#Ovʺ^% ڶkoșs0 2ĻnSC^ێ=::t;Q>?]߲eKK>k,x3f̰K/ݧ<3?UI㏻ 7`Gu{u 4Ք:Q'(]믻`(0y6[2_ #,+J*B v}pwoK {NaWYeV?Svm[soVppꩧz,mzH^m'MuX$ifNwxM9XqDC6]ڏjDmSGwIO|5{5<_͝7/r}ݮs}reylR~ u.m͚63 y9005[oaoNzonq AR!HK{@>0zږ,]Ӑ#<}?ydu!Cfz$P qmRR {q+Y[;WU_uQW O`XXsS=U6mX~ʕė^UZXzu[-,kqAuǽ=nј]]wmz5dpW¥Үd<\~;џUlxA9gzfd:!j@Lݺ;q  P!^/b/|eEԌ4ջ[VPO8!nTAk֮q9بW=\WV-q;.mW#X{a=#߰3hAvw@0|rDJC4bC0Gpszc 9#TSLu!=x,0vm9r2QEj`DΝ;GKհVɽzE d㫑, ~VU @a|=U 4ԋC?a@)?uO;4W+A=F}8P:u+ŋ}ݗ)$%ԙ Y&+tQAWP  0` '2aMT*ͮΓ!'59o`ѤwOhb"i!ht+[|V9 GLT/n}\@NN85?7"]Ib5|-(Ty֬m.q.իWG/9855kq TlWMKy]prm!'(U 41Q@=}wk߾Arn W(L?]|84H3:P55jx|rqc*U$t>pCT}uC7?D[-{A+:+|ΩZ RG+\tmKR! B@U@s یsZnĠw=@T];x*+|@+W_i+99i.u=n#mj* ޾OKC/odraI5 U*`й4A&bT` cޜ]^ki|F䐓O< @cǺN.M@(:/xs8P狎zjBAz鞓UM0A#8ښ17pn>EǪ2Px=:t~#ydVnBi:$ߕ!`8Vns~lG5 J_5:tzvcݯf5p*.42t=DzEOȇe/;}\p!@';Y p) QB$0Zc'NLa 8t fe˖q(C_͵,Ӳ|:xBcwĉO  5<ڷ4KCMq[=rQruVg? N^?+V /}pPfDAA…9q[lbSO~7(A;ު Bc h4~;^ݺ䓛dj7ݺ].ľӕ'RS'`j w hq=l> yVh.;V~ᅭGp;<*VcX92:TjثcO݅Ps *tZ AMUmjǮ@|=FW ܜ:v  F(Wyn &CԲ;zyP1z(Z!."ڶCg+Up>?0Dv [WكwݜFY0;昣Pj+(a ktn!z8ұwt[ swСC]QbEtA/O= P@OBMMUkN-\T-sm\C3_Ae^*]HK/yL&Sf>.Rcz}*~W%ԋYA'ބzXP`E ^5C5"ݜ".U*8S;x:=Æzߦ啴<(,x䑇סC?ǟx2X!5Wwvmۺa Z"*ſZ@/K&l([| A4bUWO$*UACI3sOI (ɬ*FN@C}s i]QXfjkXC< 4T=11"& 13\aF*KY!@x5*X:q}VVͮZpp"|JHu|OwK0`9hBEM7cLϟ>WOxJ >bՊ̴,?eexRJUQLd qLmh۶]־}࣏eYYC?ƛgn#1B vFj`zd,.8)^p2x+% 欐9X~+dsdΎrCb.9{T ͊s}D1@*vU* A?+=?iB PwĈQ믧Tѭ|=>`A]rK`MP9}L_ CE«!' OUAJ[͓Kph:wwO>] 8e3{N뵢B-ר@:\ f+Q>r@jg'c)VDIvVzuW!c\\xEsJs+_ճ`_gc{z2Aࢋ.tC@Θ; 8Xf' ɉN<7?qCۃ P>:iS{I 'E[pE۵^cUѢK+;ZǎWzRs/;5)g<*U pxAvT%r&d>Rpzp%`…q_/ _v*WNpbф&> bkt MY]K Vwo`D`qVjkVJԦNf]t_u~=~ة&v@O?O=i~4ȞWϱ=_PyB#hVr4ͫ`9 в2ZQ3j MOv=eO;cjyWu& ̉:A6!.<;Ra7͝1 eh"A߻˶h^xV\ztG{UR!Ҹ V(Rm0רafF^/ZsU2sY.`kTAKΞ=':f@ 깈]9$/Tvm7)b -jݜÖeGM*֒pjP*D&w7zGbPovk4rJS7!XG7h`G}]=ݮI4;&D2Rm5rji<.w AU5?z{zw'Fݺٱw Z A!*>f|an*X7?L ֪dvZz)LCP|3'7Ujkx[zd6 &تsN-<}t#\Ȥ׫>U@[lWP%@@KdLP`J4Sq@-y繊puJ1Rej @i@ZR3` oNrvwkRӒL St䶍if K Sjѝ)vW|kۼC+ u*aQĉH3F*a׶LP !> 7B6Oږ/[斢93K+[kvjh~nBN=*;k~fInn~!&k>]zi[׃ ÍX *o韥?7Cb7`Ļ]+"7L?.e<M,+ѰK:ݾmHs,̙BF.q5?7-"d!WpYX$ZBss{ [wݙi-aϻ"(M4g鼧r*Vz : 9P&ܧqRCխvT4mf1qm+%fO&,9֨t]]s/md[d=l֥7ZJ{ mAU biyxUZ.S7pn@?(ۉ=lp[`aR䅭[F&\|zngͶ!C+(Px0YfW_@֭O18xиi}o>D4W_'w佛n}7&v0-ݨI K/H^m >K}}z ^}ٶmt(wر_ZZqL1S"ՙ?IJJJuI ] e\&Z'/'e{ Ң"VN1L;ғFl+-f(dK?$١%vؒIvA[l[-!8h~jc^!94zKe[%-tٹOUԍ4m{y `[v\=X1 D췫*4,.`% "8^x|L]y.fīP'sW0Tx/Ep"8^x/Ep"8^x/EpWj"͞5=~&99z*"8^x/Ep"8^x/Ep"8^x/Ep"8^x/Ep"8^x ضmM6~w[f] .l%K5j!b*UbGgD_#ХPƥ.;vˮ)r q٤IlӦMn[n]kѢ+WHNN%-$8nfcƌqׯWϭv֩S'I@onYf%;BK^z@ 8` &LB3z\uV߿o@s`PtժWAK.ɓ'ǽZjV|yjaT6l]}Ֆ^ 'ZOs4jȚ5kf)))B`5e۹sg4 .Zjezk8âE2mdwYP_s;묳g m0_~&\4٢YfY*`ٹs曶e˖u'p5ogȑG#}$8(^x( )]4X.]h@aBp{]اzҤIciNo1mZpqo;S%7԰7ACrow˕+?VV_~ֻwo~ 4٘7o1"@kl4RRR|qoJyIDBXQ+=ӰaC7D-5ڷooFr+d0@pmŊ6`۱cGEUTa'U'̟?߆ - !XHZh>Zo߾e˖,m۶}Q@>vZꫯܲPKCjE-xPQE 8Y}֬Y)LdiHՃ:='_' .]z{gf|EC~mꨣٳg۠A\ĉ "^u!X6mO>qo4_v 0`ҋUT{&H?I{ m6wܸUXoJ*ҥK޶fw;<߶cv)Xf+=v*6?ٰaCBrJm%Kd'%TWrs]-јݲeʔa@Pq%59s1cƸ Kf%<ѠAm%Kd^+&|w6i$va\ P@թS'UVӒgMkV~}U-Zia /ާ;gMX˖-o߾qo 3fpDuY.< _ߞ#a ܉'=S^=kܸq '`s ;FFx|Ă`:s3OJJ389v& f͚Y&Me(xD_#ХPƥ.;vˮBnYҧMo.uң@'=*{-XFwRD̠A\7eKe[%-tIpح4?l-_6nxV|y]PfMv ۶mB Y!98`Up}#/Ep"8^x/Ep"8^x/Ep"85a{w}O2ž۶m\￷?0uׯ?3EI&ٴi2oKi6p@۱cGBϝ;׽_6{\… >nƍmԨQnݺ,ٰar)]=iӦMvZYfEo;lĉY~箻ElJ38#}ϙ3ի;ZժU(0ڏmѾhѢ,^r%vm8=ڎ;8kԨϡCYgeիWYt}駖d+VJ*;_}kx?ؐ!Cۖ+Wn&l߾5oVaA`޼yx衇Z…u[nuX pF9s{^qo>{VÆ qƮqPLjT\َ8IMjlVJkР>?wޱ.]XŊ(Ў?xkѢEcyU@j*#uhЧO>֩S'PBR9PvmpC-FUBYjk0F {,wcK[n"E_loNgQҗ_~ $nJzj͛v= ˗5jp@',3fp="PPPnL5*TyǪUlΝՈ@5)[*T[z/^}WKvoٲ Opoc, jw~:4kN9LשS5[o٫j^xկ_?}?=o9]>WG\!?XlY@z/_X@Hsz+z}PTOO>zvA>\i 1]¦O. ofq@p˗|Y߫񯱒_cq*VPX,ӲeK׳rk{Y4[n!8~MAuC4_AxUJ7n ;<7Ye  (vA6mD.Q} RpXdOn x3A*}>`_caPY,vApհ"_֩Sq t QՀ.v{>o8 Q/RvK/Yz\%ͅ9|4ρ*4Z!رc]F=ؗ) 7A(xˎ{=㪎 U/u}lh :jP}{> 8vS=:DF95R%ZG88ኅdQj|w$Hj2 D*W!pgG>xzj%K怂= ajZ@+(Ph1z0 ^K P({v_  Jpg+Y q ]0\HA*O>vŋn_\SC=c1@p*Th qT`a P`騗_~}}7ۻŠTa 8Rߩjh []AD]vu%rDˡjҤIZ.vy8 } TPh~lp0|FhʟO h*ϚTaJUqI$rp ԘWЦJZj+ ދ >TбTU RX 8v`(jJϚ(^{- @pɋ&hW:I5tRNhbN3qjp뼇uigdk4T@e TN9y /dY:c4@sXhfuO7sפPJʱ% &]vYQZ~oW]u{I>sK.u *8VC뻋J,K(z>i}lF~'ADh۱Kj4 )T@?D4@4!2\afrչ_DUCz/U阩UUѤ tDSx4)NP'Å3@"*ENFԐQ@DOTϢ: z4 )ɮ&MƄ.ZA5MU TԃUrCc0<$\WʪWՑ. qzߨOV ӱT|{S=-[V& N:e;@pikRĀz0KѪU+W՘ьjdG$jHဆ(HPz?4A+(h& $4z\**T?իO?uQرc䂯(˫G#p.}Mosj ?R#hA p 4( t:&jOyWD#t+Tx]$o"+ 8^F 7U]u 4Aײm1Uh% q>:!8NK0*,{F!> _j*Q&Pz l[߾} /tK{Uh5 RS]硰@KNa]eDMv jj#cR7} $"))KJR(uرc. yAfPQ:@`SfѤFH^~"M~ZӲl~`P@=zD;ZDG5M(;JTeO0D +D*i.R 0> c-_Idd3g΄ 9nQ&An4A^?{zzg 9HxI??ykݙ9EJDDxxxHSԘI!y݄ĉ.SSS y#/=J!΢$""zL2y xv5rrQv5DDDo3cg t"""zw2JCV5 ZmK.b> 4%9K=Sl]߉tҔN\L^-kR4 $ sIŐ/n.aǬL&Cw<ƭ@0t+<ނɳ#bFT> tSY]}U/}ٍR?LFK>S(:‚!#']4+{q>J\$"taKЩR:MNVwC\zZ9g5Fp:asʓ R wK$D.Q!!%넠CbT;|Ӆ OOqB"*ΝNXߎ_.Ab{  /YZڻKѩ4?ECx1pO?hXKaom0ZDWrh ^Z2Ըo#^甦+5v(2OIS l%WA1g tNb"#ٯW aUT)~ϟϷo/[p!ѶmۂOp1i9 ӈN l- r*P+ A@/l*[pĊM4'aۢh{xelש\l]ow2bJt'*|4'^)KQy 6lQ K>ډ-Yk|Y &XYkO@jYzßp h1K;ޕ8CS;|^bf'2|P[o(@۰g [5ݘh'NӚy:uf 8_J*pZO[*.-)+ JuCqLvxѳ'9$&'jBЉaQM J= B/O3-az/,جFQ2e`5i_os&x$(DJcO܈B}OFӧOcʕoaee p6M%54 Kʓit' /[."?~vK{v  g.Q!M]ZT[ta:V>`-CN`Xpwf\j`8QeV1yf7 Y.Jb5䪟>&Q~֪p6"N{gk-ʢO_RkF Rk88ئ\ѭP׭Ƴ:[>E0|Z z4*|4<Ʀ 0yNAڈe%Pޝ̒h ռ-moӇ95k<+g㤈Vp-Q;bAbpЊ`+ϊ_JN VCC}kwPd=1j9<\31+'nb1E.އ* @߅ѧ=m[Aea8 JTm%Uq&F+3~̅CB4n^̽ko[ڵѲe˗?[_zQ|NJ!׈p7IB{[q9^DL,66 v5kT$ZvścCP,~ τCm~6dcP~=g4DMШpst51 / no֨[իWCP"m,ZU ס87"Qކtw NPK/mu ANPIMy:{Cم8e qAAK ՉZׇEl :w67""0'""kDDD r"""bANDDD r"""bANDDD r"""b1ȉANDDD r"""b1ȉANDDD r"""b1ȉANDDD r"""91ȉANDDD r"""91ȉANDDD r"""91ȉANDD '"""91ȉANDD '""]4::%ODDje^WTT6mdxݦM888J*։rxӿ~DDDL_3ȉBk91ȉDDD '"""91ȉDDD '"""9DDD '"""9eC{:ءꤋPsYr^Ɛ_^1ȍp0kJ]B ӠɤFrBT.1aR $B[J nmNuLN}e)ހڷ~&g\Q r*O.̓/ѲFi:xX|IlYA-9jC1T2ctFvkn+R_3Q/*du /'[C-|R kVE]vNɸcIH8;夦>=PܞR }fqᯰW0ҲpZ&<~R8v [Žm׺[Àezu}o8Gݡ["N,4YlgNR3_fk%o43x˱A#EYf=Z776$6oؕhiSjX M8H݋~,~ZkSW8z`/Em[ M-caeBD4!.y0%򹻑\ %^qM"-[]ѿ'#"9{8:p .b0 G1qSݫo'D>a49Cxy-Ot;ǝ[Xٷ,dYk: Gosk>C48NIQnMXĈm03Z6nSgfo t.Kóu9yifeqN?J6+pt^?L=Q jܽ|I>ߋ`SJ8q|tWbtop,NbPs=ܟ>?_֤[85=LgU4X B߶aU <ieE-# / QW42ΝBe2aQHup.֭?5Bl7DR)D J=*v14BW׬zv,k$Ǥk%] ,b*A8~p(/"r\+BkLٍlln83A8v ¥q/|b/cHt1\Gy|QkbM{ۼZ UP~#GQި9BR^aM/dթHz v GDB6F\yGy\a`RN"k/YEcE"EV~/lj'3EOS=8WDLS71y>=SJP$RQ/T'2sd^S YSRTExx8BCC o~ ̷7gЯ({5!vERt\a*uxW?NjGX-<@ЭDJ(B&` =|pu~ Zn8`*"y -n܌Gn4l|c^T$374+LYu4BX~<k7G:epl]TH"k#^R!8D {q_V/m<_'F rg]ܭ N{sD2Ȅ5:jhmY1=&& ʒӿMO?LA:6 ߵ7yNB IaG-<$53Ԃ/jFRH&ޑuXvG_= l05GӜ'~zt X~pr,ԯ67?];½pt+}P3 ݇qݱỬ[#LQi8lRbPxݦ įm`@Q_jҡP~aq X#A5ſ Peku|Z0N6tbNp^cAPe2f~U\?.P24E(M|rQh9Q PH(K8XAd;F}`htyPE<? QYjx5+T ڛEY{ؿ>W%aǤW)FDl\ӧO !6}KR\?+_fe<8 nmd~4aw+2(EV|MUEp4 {҉iM:ԂYalĸ[Zc7>iΖovGSmD_ _aF3+]%JBKswƠ {ٓ ų=eFYTI!>u0a2ܷj񳻣4mBGgww~cr]r%~`=]Cܹß'am/_s8$7ˢ5n~bI6HWP9h Zvk 8tjg((QC\t AIYLB P=`NFV0#K-7-#F ͒Q4ܬ?}qQX` 3bW~ c/H칧P Zȑ#_|޼y1333Ԡ6QՃVͪ"v4g^TI8(;eq\rXp!zi_~UTI7~+~ʗM+ae qO'"8q#G g`׫QUVDDTf5˗,XEa͘?~5*>G\Įghfh:'N$F˸`2 >ߑ>^̾iӦtя G^x2` ^`bg-'KVq'"*,,, Æ K7{N\.O}<˗M ҕ#-8"7K?~WyAGY/l5^LD􁳵5kYv;1n%[Ty2܋>`/(wi]}<^+*3}~=:u B> ލ`ٰ"䴒cnXvU ũm;p!B)?-w^_0 ׽0C~zZy2B{΃E w/ci!+q La/ EBo8 1bu)FvMQA,hVk7,y0N{EꢂKrW˝] |?x8"R!P.J)OW3ǸOZxxg8; ίLD >;`ޢK(q:ZjDڰ88*}=ZØ9`#\GCñ}$fu) ,&cE!N<9Yhow܀#AQ;qLH-lah&t<-sn\b8g5#VŰkh=ՓXbaVcnR5`?<:q+SOc[s'g.÷!p_@tl7Z>;Qʼ e쇈p5\FѷMYXgd^nM#`<|Ց2/OmCXqMr\r ]KEe^i زr=] Ω,jvEJN/>&e{n[TٶBD̈́E{ڧ'M_/dِ-|ʹ#6hcݫJ 5Db ܖAB7vo ǏE/5Κ]4YP4x:U(naMnT\˾;qhcɦ+PJJa=qʰLRιKH `lA1jx|Y\!Cs۷Gbֺ 1k ZI>E1+)d"#/0퉄O |[W` m׳/7cQV(og_6@<*wJⱘWZ=oo4 8!Ǝǀɡ/}g.\5ϑ׷.G~o#;_FsT%₃J#>_L@~Н݊}IRMԣ8V;;C8>qɩlOfS>5*]슺]:tIV/gC͐r4~Y4AW\|,'\gnpAaHUM_HV_r,,aqwr,~Ɏ% (鉜kVM}!V9 qeQà<_IPH D2Xx@6#{o S0d 5rTXJcE>O)7iqԈ ϡl^a$B Y^$)f(Ux)C=8T,w \k^/DT\E5<6'e e̡kǬ51,jMLAK[X}a!Qtq1Ţ" uu}=Lb#T8vCIɰpry&GA5rlVqi%~ڤD)Q;g>?ۡj-_[e"LcYح)LŔ0Cjm1jS<>'~WX{G&-Jvٕ[\9"dW6::AHat)DN.p4yO"zL{N_#?ojj~qENѡ3߀ :lewcMxhJz"\tAi+)JF¡8/+Tofq){Wa[pq4"ADDe*yX?œG=hUڨ$?BLu?XŬXO :ޑX|E_1Sr8dϋE1˔p,6E)1,]%$/: +6bƘh 'C{.75jb?9-:]XJ@v%Ͱf] ǎGu?g͟Vnذr j}B[ӍP$YG=5}[Ta Bl-ѸrzPŸyeW6zn(jɦ Ӭ1KXs5r)$1't*ĚC.O/(=#Fl"Ѕ /NӱFAG>A_ K`iKT?^Bi(޷u~Q> '""bDDD r"""bDDD 5r9 bsclZ'""bDDD r"""bDDD r"""bANDDD r"""b3rMZrO;=bGBc_ `1_DVӰ|\{wj$(5?4s\sw]b0 ÃPLl\3Ԣw`L (b5b(RiSbXBWB_Q!tZv8K+o43xd9yUox^d8$2ؠiCꢬo3T wVY&9<¼7V3׋{8:p .b0 h4: n~Ÿa#{:jZXƈχ`KK q̡Zvͣ0li&7GB&}GT jw/_E Ê`S4\]ƕ?UDD 7Io0uP*¿B[g៭Q n _kLj}hUbm744-kC>-'LO ^+X|4*qur)Ü^ѣ&W/ ){HrDD |"8 +7 3]<^PfM*^DYxLd͈-L `ncmc $CLK#ְNZAn4o1oϠ_Qt$Y7֭kBl, \39#` =|pu~ Z.b5i)E^;$/ =lXg]t{? 5whmb})(WpSw+a~cM|"koZC4:$Žp"S B{͇|LG/cLda Rl TJ\jprHRޞ2OÌ];BMG{ h[8x?xeWKǣ"Z,ZTZ}.9i-"*j 1xe +lǨWu :ɟ@G Dd ;WXDnhtyPE<? QYkFp#"fh0/ә6t VePYb-S+ʹKiw49FUѨ=QfVHaTr?%oCm3wǐr@ ֖P*.r?f~؅Pamco>ZVZ}$]ƴZnpJ=mq%b@L8ssѦ\QxxxDKzOf$?&ІN0'k #+dNDDo^+}{Nt:Н˙FGG>7ݱir3J>?CtM v(y,څ+^_2n-LMMQL>=#F*rU. _Cit|j?bN20X'H:uX 7:4{X2mߥ;XCK>7{ne""*5rmﭚU|ܑ.JSA>QǤ_ +3X^ q+Z -~vY/hj\Įghfh:'N$F˸AIS"fր[QĸnQ5ܭ/sYNBSa׻,V,h տ0_Ot=ilcnXvUX7MSvB oSX4t4i胐J+OFhy[|4Q7xx/}*-6Ѵy6Hݸ1EZкhVԴӾ~O8AX iag6cS(h+8@U">:b.GD  4'no^h]DDa7`m,=l ߧey " ƆwQmG .a#غ0*B<Q V{zv9h8ۏ\lj,U]?;#"9e鈵^8q gcͭ?J7Tm Ň㸛nѹ#GGG+w6{3l눟еTά]5oCnйY^UlYCTu%4{vWX9=6)GiT45 nƼGp%,t5'H&,%]-IyK)Fjs\cߞH·}u>8k1E1+)d3.9jx h\bIFڦi'{<_& ],.BٶYO'$" Q:ϧiZUHCka &䈓\YN=^U< + ?>F+ݥ|4@G'q&TnZZAf"VH8 mr/ F]Ѭ}=gwGQ5U7Z U`ak`Dh=/,% YuFj|J§F]QK. ,1=``.5( Qwj+7@m:d mL7݄8h-}A:aڞDTM&&&- UBt:]LS$ div.DŽ5L!*/q lD(RX"AR#2< ȳ# "u":)v^p6}qwq1<"I:^k̃HcHv,)tihVɦ.bK"IrN[*:W芑a) wE`B-HhUsޗ:Þl|0v:F 'l{y=Ab-ZZmV7!vnozJU-S<{_t-,LS nM1fzx={9$6Oc>u x 'G[qi%~ڤD)Q;gmNCWY#P ֤V*9TkU?ӯc<۽X^[G;b" Ы DR.}49w96hb䐺( Up6$ׅapgHy}vk,BvSpxt Z@'9~(Ļ=/~=ĕK)dx8N`祦WoD)U.JLfCo%LVl14#^;x.]a`7 e>EPܺ)|E0q={UE;!_ػ_o-MGqnB5`r`!G<2lBq?k1k/1HGOqh 'VGPZEs315mxSpH5lUK f?R~ҩB}^ Ej~Ȉ$I~_o18OYbP &&qk#5$E0O6Pjƞyqs,7Q[ fbמXKߡ~T(W_M.!Vk'Cw7[)H{\Dlyt>u Gڧ΂4""yB;ߴi9 uH$$:GiS B{͇|LG/\Rs{#V'F>e%+HL!½PmIQx{ʠ>3~Ԣt pʾYh9Q PH(K8XAd;F}'\F.R06LaHp+:J8IsW4tG f뀢-xQxu^#XR|ac >_ РR48yc}1_0GE;9y-4Q~߯(z| /F {@ w9돣'0r/N{QLŮqihMt<p%h5SML-7p퍝AC\|qG &jsѦgKkkG1D즸$hrze3U3~=; )wFVoH'"zڗ8M'Md:ULaoopJwlڿ|b ϐo;J^1v!|[ S\["xvEWB'7141Au|gO>}z#FU2]R!tN 1w q_qU, U$ :,CGsA Mٶ |j$f;/Ǧ?|]{5Έ])w q˫#1|!a\#4V%""bGAD{fU`DR t<|ɼ,:%tq/#WǤ_ +3X^ q+Z -~vY/hjS"fր[QĸnQ5ʼ4KDDD WR !O]FlXmaR{ 6J:bO>ECGcmէa,l0C ũm;p!53t[7%:SNyU}_&bZy2B{@~;Xэ;!9~O=^嗽q7stPhE*էa45c!WjĿq>DM\n馓ݺbf4+w5<߃'k*x[:s q+;[;π4 F>gvN⫦})']z~>A^ift;~6o#qq",KCNxMά]5oCnǦ|n)1Wɸ;}f7 -+еpʢv`W./Y,KJc4nd;O[+n5J逞m+1c36.[A0+1{v@ Tv Goòxq'ֆ=Yn\6ܾm'sSiݱ쮉X|:Y}vLyMZa~&}9\r]\tg ؟~YT82tU .E%s:Ocò)',K;n(H U@ÎѸ-L ˴:!!\ QomSvLJNvڭlphQ(Ε祱v[ c\JY-7nV'ȶn3ퟲn|daVjnh(>U$7wUw']C>QYvS0ogpEM5ʵ싱v?l|'^'mr4L)YI!CШ^mǂg󙎯?%aqBV_B6Xd ӾL_QI5/5M~!Or2ruOfj͛9iIIݫm\_5@)[IiJrZݝLqUuh9I{)tMYF r|2\q{Lm\L{VUѱ~EՐ)ۥ*ex~*Sa$Xx햤afaꛓVGui)*^]̈́T/z]U ).RRh&~nP)m^ }X=Roy5-zuu?h,#]coK /PQ\/#IOjf1e'|&TKw9MVWk`P&#S17%jPPstnԸRtUЎmGZw\jeۧ`0 Ժep{9=:t9_+~pV5y oh9~t ]W+o=*:h ;N~e'%^d$ZpkmSҕtI,IN۷_VV?ukpB';;IU85 Tq۪5F,3vjnmZ_ 7݊5`YCW\+T&%XMǹ46ϖhî=ںl,h1t7,#)g~ΊJUB5nQCY#'j\-Z Y&nk1]̞ꑺOkKkUz?cǽn'D'ǩkufY-a-*VӐ ?vz+51i^LhG/}4A q;e[Y}jx1/"/>R;ePTT#㳥#oRFM͟?B_֍%(~~p虳4)'|bT5ײ_2[sk[P_EwoPw?ήm_;J⭋TɢwT>N]#/~tn* >çj?_ݷO< 0M:ܦUXXͺ\Ͼ~W=P~KM{ ۤ&?[;4gYN؝Su'T86,ry3Z׋Ә=xK4Rnׂ_ѯ}ŝ{Дh؆51Jv5Nc=v6'G:yۙUlγ甭Ot=A起eھz/648%)CԃE)JvQ j9T vkv q:/ =~ ͢%оo 9  @3~?c6W^1+| p%}[c6sκۿ3s΂j S8=x9 AAr@  9 AAr@  9 AAr@  9 AAr@@  9 AAr@@  9 AAr@xhtT6䗦kl И.3rØFPW]  [WakSi@G艇{qsyiv#=£tlfS.p(PG'<aۛu ȁv.|O';ޣ9 Arr@@g,aqHo?M OhjD?XO7ٲhF pXdF1dT*j+|:lηk[NJg e|O%ք,Z鷑 jc~;իIn=RhrvEP+mohM:uݑ% / ]3«{8@8L[kXZ씿pֱ>5cGHsWj&֝ԻKקX{_7n[8m.!>[zT7z p|lCۣ'{xCH >&oKӤ-_9fh\^y.~&,HcZpraw/xA/'7{zc6!y[>f&8{ﹸ=3ڶVJöy;/dS$ EIENDB`deepin-deb-installer-1.2.4/dmanual/zh_CN/png/run.png000066400000000000000000000473441325164132300222410ustar00rootroot00000000000000PNG  IHDR%L\tEXtSoftwareAdobe ImageReadyqe<(iTXtXML:com.adobe.xmp KRIDATx$Wu}yWPI #&`1` ~r ED+"H(KH]iwqvbOUS[=3t{Ϲ8#3% Cqv0SdžRon9'@{,IO#ug:qgv=Lp=lp&3Og #qw3KN{q6G'Iea9>3+pg8ud;-ֹ촼=#yzիNy˗],; jut͚57W\qmo{a;Dݱ_מO|;6ٳg z7r-SwJxˏ>]|_s15~^g~(<ٜoyY|{+V6ۜzTޏS>ooHXDm*9~0 ջKe} 9ݎ̒GzNkZOGF]~Xh\uU/}I=&&̓WHsΑZ7;a Zv{O.U*Ӵ*_otuuet(e}>~N @u[5mu#DoHe=c9ewēPrH ea1ӻ'9\M@Z ֒6x\.xP$4>/PW=YQes͕@.]? m 9}Ӟ4wN$}Jѐ{9Fc'-#ÂfLi'o !-A>h6-ڵ:~ X7$݇:@@ p@8 p@8 p@8 p8@ p8@ p@]0t;L='9q&Ua p#^7En٧8qdt#2h% qpF6MZ:R\]kE;z8IF&{KQ{$9m Fq"q'9%bGe{57Oyi}m=k@֝ʦ YtgIi\kEy43)ۥh-CT pCaf#o2/Qiqgwc.f佨2Tp"oS| $hm-v` =߿NYB[q\Ҷ?4&HhU1q:1G_zuWN LxP"ѰfwyM`izT]e_O:=G Gj9ixfС#qpG͔n äɊksv\7/ 7_ͦī3Vk^#r#tq?m|ΦݹRX6Orsz}Mjt3HPnM6=IͯSN ڽL<}$<FˡHs[}6/j*rg [&՝h9wRXPmM7CeѬA.8().m?,աrq59u{%qiH<nK4R;%NdǓwR23ɑ:owkI/7YYKx/R)([[6'uՆ#⍡^(}?bN\f )Q4M"w^ :EhOZO &jvZggs_ctTj#;Ѷ\))8^wHS;4 ;/Ȯ]Ğ)u%`Omj#veGmz>0GXpϑܪ§& F5mИ.?jkMyKlst"r\?F(3Bף :n/=/\eDPG"4-Tm$s9wB5i<^*?,s-e3%7W*7= D6 M "5_L7B{'/2NK*yn;Ryc%4bݰYrł|ntۜ5)Cc2t [h.OŴ n>[)t{Z쭩tvw;i+*;(QMZd}{FtӀuutryBFn/r4؞X9\$-np~ZEZ|}'>)|OΥq%sMIt 3n-J5N6Hw_tCk}\gH|њ gK5-3=kmzZ=J/LD[±ϳ/ڥ,tQظulQwKvlp%:=xRay) D@2Di둤y[;3!(x 4z.Gėlw5uR)i'k-vYc\#uMk=Zݍ"[ƃbN Ui둤ϥ̀FnMӴx"Wi'h-:L||Sk+~RPY4Ool(g._/rd5Ns;tA[ņ/k-0&b]vRM͂R"b8I4@'Iu^;)HJJ@q$DL(5%{GF%qSF~)d^Gޓ>S?Gy*T;&MWOa9ֈGչЦhÖd qu p8 JVmZN'\4MQ ؉S3ю}TETkpJ)Lm2[m#s$X_姲ι2oBi*hqZ2ND\Qig򥬈=Sx+Jc%s*n=S}xL[yb1)u"3$?g"[00".WL+9 EMxpY##]ɛW緝H|FqvhFѨ[:g{̀$KDzZGC,֟Ne'6OUvyShm2RJQ¥} =2$/:_Vъ rT7n3reEgJ?\ [/ } +i6˾m+emRɢK5Je, ݸ 9gw"!;4@Lj[j{\6ڒuߺd,YYw;BpՔYs.uڲL`iD*Șƥaը7>*{L ۴yE:?K~-R]I^S-xhj< _9ҏ\*ztw{e&'MNob3⅋euR?f|['z09w+RY[*량y$mWU[kl'pFޭ\k&2Oo MJ[_R۽?ISsΓy.YJyZy=ќzn8*/~kw{%\wz$Wۆ,^>H#/ݿ챍Xf"zoќK!QJߜ\U 5h,H\ׄ'y۝ x߳d{3:efԆGf ~LZDoH2clOyP]TG%07hW_&',>*D֥pK5jJ溬I#qx"c2>0,j-H0nco𝑈ZѴO_%C^-6ڶQw*y?6.~ 6lc2m'߽Q‘jԴ 0(SN4α5QtSdm1U $iN+ty* {ϺݮuAw×@w3300ll_;D4X)x1p;٨wt &Ng)G-z-Ӊ]T>BQ6iɪDGހ8WheF鶛i!g-gj}uÌvntAl,/n.o]+#^s<,{r/e{}UeMI'Qp(=֢)hyO ϲԂtL"I\2#p8L"v;%y#^\d9d2U^lE~G*w<,#(#_#+Tashj>ӏ OyZb׵VSD׭s;+tDYw5+#p8E%dʴwFYO RAt n`6F+2;ddǷ}vbs %Fa=ʈfϽF/y]:Movsi dW1ݲ3ړėʭ7#ubזѾEZWG$rIߋϋ^k>gDRSN?f%#*VgEt̡:h)xi7ʇGeGwo!PĢ^z{Kn n'ݽ9ح<8dwX{{2<*#FZsI:[ڞ&7ٽpȓ%XRQ JPhi9*:TCCCRTT.h7gzG'RHWb9qx7m$Ք@H=Ȭb`g5؈+ ;W"OM/Gv] ݢFRVk]u;+CZSJ7y&ZQ/t=ni]]47B_<͉TaCS϶E` <穈jR7N#/ldM!ty:JX}m2>*hiV1P1Q$ڬ53}OU*j!_ z ")k=X3yMȆɛ+;r횆\<'Mޙy;L h"] `p fN:j,K0MB97-FplLDHԱ0O[=;?gmؿ|,BD#y>^ޓH7JG"Osg"i ]盌$dȽ\knowmJ]S+{hQF~G!.Q{L6Ygv{}ՓEy,f TkC9a#@8#톹J#z7hqgE{<)b oxԜ$?g7ŏ2]F~nsu[#uD&5 sȨ1j3(-=Gean5Ѿ.QW%6Qj;DWo5PsdEoQV7k}^ `w9s} vW7#j2X ۑ'F|2rz%/Hu\}3jiĿj}^ s<>"ݡp(&bp5c"]f_;PMdwCYd|}F۫o^w@:m-meDfV.ʳW"6 9Ds"?3Ϙ2fFsKy/b޿zrR(mZ`Dߊv[zDŽ0nvFzJ|._ &^H|Dwldɣ·FJ<:F]*|))sz㤻0s@Dl^] m <奧X/^|tFuLsГ{9ʱ}ADgN'>MsK~^wdpԆ^_t?B}9!Ow95weaGk?~&;ϾHXu?b"#L]K^ X]7Mlu`p,On~.+{]YenWP$崃Аt7y۵ڿ 򨧸vSK%݉0UQUk%P>2#%T׺cB9h[ݧIZ1 ;ˈ7öx_c"׭HgQ 6lT^(z֐}n6hiF4֭Ku_ɻhɼЗ&:6 kE{Tآ<\7+lԿvg+q&4Sxr\7H?ٜEv5k~' @%u>UMˏyI)vi&Z׆6/QeW2lDyB5GyZʢF{-Ts]U 9;k"H\Ůq{& wea"sw"e+*~;A5w0.*y:ua5ށl8Ri;V_3b@Kς09ia Ul#SrPHz]Yޣۤz~S UsfJgޱEx*omŚU*oٳ78pg.۷KWwd"W둖YȣȝE( 2R;4zUkexUs =Ls4oiN%]%7V5IOSNuX>&R78@$,\i$%r\:"JMGQTh^N#{}WKAKЌݤm83Թm>wZ!opЋ\QM)'sz|즖`5MΗGk~Y$5p-ؽϗp$~mВB o}'UrĮ\ŧ"WIg Xwr5 :-ǴvKΓ{$暑A{*t @pЊ5:NW_*q-KV'"WY&t&=HHmQ)V@n]ŬkyZͿ$wz0[M[Tp؋\S*s<<U4X-YiT p`4 Vf5;][T @S҉UZ8S5YgI[TF|5'"UBO6ߵXM=g{@ x:U'JW%"o<(^ ִXNo*8ck\אݺ[>Oo@D>f0k5e7Hf0r5MRۚ6go8EnFڌE*'n}= 6ѵ*qMX $vnYFh<-k  y"68@ p@8 p@8 p@8 p}࠼Fa; _BoذA>OoxxX>xk{1׿}۶mj5ehhHn*aWy^UW]%ovT*5[ӟ~zy<{_rܲe}߷RM[y?,6mjBwGr\nyM*Ї:+?w!x3^y⺮w}|ƞW/sϕB s~Ρ {FGGTD*Fw}_?wmSS޻mgGG?g_KggD^x\tEo[+yGOJ_5_},s/9S|_|>/vlܸ^/KYvkH8>\76"=3/MG/Z歷O}?e]fyK_*O~ͳo&k__}vyh9~G?Q);|FMݫt @?NK_p m%s?_wS̙T`s饗ZA]T#?RVm[yfyы^de~[j}W=+ZE݊F ӟdɒ%654>*/| @Ůs+VիW׾5:TnYpF餓l| 7(_#Y=c#d𲗽ʻ7M5koz$U-P{r)6ε O?s2=˖-6կhFA Gq;TɼFVjjY ٖ.]j5V4"W!k?A$(XU05rW)|y[b_}5=϶횦A5E-XΑOVƧ3:׮\}6z9yDJXlΉk] p}Ee+:Ϭ˻tNW#TF*٤Z[#fMstuOS?SmZsRiv`)w'hSktߌt}2裏keyM둠ѱu{5bO/կ~e;=׿FtU; pVfuMxʕ5:׹?=yL~5 "}F*yMgkt:(x衇ld`Aכk4?)4*t]dNի̿o˂ l&!??Kxe&x;r_$|+ }tXزPkR9pŋF*iMkU@ᨣQkׂ|)$:~JrN׫5k'wpY½d~&@%)Q6>Q!iA54.ydMׁb]5 qmڢhГ(]VZeO;3lkv:R`Eo|ÊLe MS w][F*TgS{nf[Uh<=\C*MpFZ*hm Ek9~}t-J^uN[ׇغ\`D8zNv lj᥎||_渍 `uǒ^0Fsjz|#$8c@@=9Y&ky-݇@KT]Z^PEK(a8U39a:3G=>2p8 p@8 p88#EBN=nd~O_h-U{U yd R4S^X]Yh#"V/֗;@-\|H[D|y[hEŽC"9;g6oƿ$WׁSw@lPT38P?Nvt9rЊ6g|!NoK9o?˕yO|rR׽W|wv'^{+~g[y@8[S E!~Q${襎||0o_#s;rאo<HG|.߹$'.~MUg{ k4?nKbd[5 w˗L5~ha\+7Kwf*!ޒhnVQ?u#*Q_v+{3xDi)wshj^W<ɵ<?EB{r\hN `ʜPMCV!/dEӔFZ_Y 9w+oz+|$^=`y:I0=ZN*5Gix'-t+!_KΧezwD70/M'&tG_^+y+`4[#^'o4Qyvc磕$Sܶh[h%#,= *;pB[-glz1#^|+G~aEd^j]z+/+_zn&  3rvmwYs p1ڬ4D=v=<ʺa-ȹ+å99?i vpdO.\8L\vyuRRڼsz훌29,^6\4*_΍ѹ.isZNK580 `?ʬb.h޺# pș*t/y+pC#8@ p@8 p@8 p@8 p88@|8C"BHpGDADy Lf93o}SЛ/{TձD9jW`ߤ<<8qF?O~ƌZj=|e}Fݛ!I"̓N#ۆ7nxUvuu Je}ﻮ{5hS2wb'vË\|;0w*Fyx]ě"e =>fN\M݋e`zY6}4ڜ8o; 'o榢9@_[]V?#$-7͉[G iy8[y&[ě~Br_IiD.}FiDn8 \Zu;̈wH;-OtR5ev^v*v26F3t8cNYxYF&vx8NlY83%4IJɹ9g;L ct.IENDB`deepin-deb-installer-1.2.4/dmanual/zh_CN/png/single.png000066400000000000000000000325721325164132300227130ustar00rootroot00000000000000PNG  IHDR%L\tEXtSoftwareAdobe ImageReadyqe<(iTXtXML:com.adobe.xmp 1IDATxTUlHH(b@y,TG PAT,lADzHInf?ly;w=sΝ +P(d(lƆ.VǁB^e;Nu,C1.<@>ANc7uyx^Bp/o/#!W7z @HJJñuHE7R9 *@x <@ \WFwtk [n" pi0|ohN9S7.6 ϳ-ޮ-99 N(g:wi5w,l㘯¹#ls݊Ĺ914˼X3R%4iu mt _qLw$Bʡ;y/Rn_íVZֻw\ :֭kgqFٿf%޷$f/^^yլZi?k:kݰ?P&,[.bׯ_WxO8Fa5kp^R'KF-miךm;}6jئ[ < ҨQ#{mȑ6nܸ" 2S{Ն3[ӺUwzE jTrLjP*-[ˋ$ Sx0\5V cԪA@9( <ҳgO{֭3Ʈb=iAfqx,~ʗVZmO?٨Q즛n*UĜVRr״M>7e6'֘ӥCQC|yc، V'1d[%ęU Y5LβNU9LǯM^MlSWXN>dB<@Ȗ[ A[gu{tjv%5^Ҏ8իW1o/ċ,]hgfڌ%pE޺Rf7A- +9QP@];\|: ` B8  pp@88 p@@8  pp@8 p@@888  pp@88 p@@ "MP(tI1Op"ioq[ܢ$G!)mRĞE=,s->>ޅ881p322J<ʭqkKDx+8333K<=U!a4!8v4Յ^q ^’Tiewމ_~=ۇbz96md֭s:n8[|y1zhxږ-[Ju>nܸ78oCB|T!~qYnݻ>c5j԰!Cgap݋/huqO/OlÆ v]w^yc{nnjB]O]^5^}U_.tURԝ>Dg͚e5r+VpdkР}yu{a~ꫯ|ЪUf^x;E^umY~G8閜ch(O:$kݺRRRu<.rk׮xn}E '|,oޭ{[oA4\s덈mrE.c9>t֣ k׮<Эףmǔ:nkk~4k֬{/[.]kSOʶm]mou9z)]qwg槟~ryl@ķH/ng?\:u j=ڵmΜ9bn޽~y>n{[ժU +r2Wc0շ&Ʃnzm`}]ԩ5y3qD6Æ sիWVM0sO7ৰTcA=~xr<>krn5!52z9#"7ۼy QQpѤoƀ&qv뭷ZϹsСC#tﵶ>{|} sᇻQ/5lN9[t̨ۖw zږfUVɣ9 >>BG١ .G!uk\(;]Ѵ"fTb^zpQHyaJIPUG;qav#Ϗ!/,mBF!n~Gם0`[?UZ7s 6 X_~BmU9zUw}񢆏̙3#믿\oGthj.XjxRjB*Z ցZ͚5s=Wo7=zbZl> v+WvϡF3(ՍќGЂ;u&>vApyM~ܙޒ^hw= 7mzGѷ ղSF^;s:[g摶t֖4~pxWi{wqH/8@}TڱjWT}XݕU5rW\uUK^՞.ק/QkAU`|Q7W͛&ij(8TѪ*馛\ŧX]Ƣ&yASi& Z/&Y]z~9Pװ^I ;3c]1Pω\ WwTFUWC={vk^xĎui\ϫF7"׶԰|h a -\z 8ةn[.pVآ->6׽#lEIAUS UhOք"_׫WC;Pu q+d0y PQզc5:GEx^&dXs*֛.cBZ!.hbj`b?UVغXTj[~zԫhآ_~ָnpǕW^֣`u;UT=޹붵G,z^WoeixA *5ڼ^'zϽuVUjgEO^cǎn2f4<Ⱦv;|@`xߒ$?46ծO;hԥ; Uq W:5. $ڧ޷ܡ竻y4,nt*6UwOmժUReP6S(j\ƺLAU.XчhZ-*՘~:5PjP*9OM^%D"Ss+vq׶Gc~պ, %Ώh/d5Wp1b.ؼh /GHp=ߖ_l_ֵq,vUk]fqku.[ E"qVvJk]~_dk|o{˱?e\o.$6o-1w njju[lIrҁ:}cemy\rpf[c'.trKWrbK|\o0ȴ`ʆ\rTJeC-=zHW_ ]2!GV[,E׭{nts]جչ,[zC@͓Z7~wmWVgi냫6ؚGv?Z_e,[Sq Qdg/ߚfKV@Ϯ 6(OV\>ԒZ5`c"U䌇X @,>U?h6(/RͳƣoƵzj{m̙-[… ~^|E[vmgnad(6mܗTh oc96ol\rmkV*3_a@@`eb7b_~qSO ׬{EӧO67n{>7p 7Xǎ&Mۨ"W%Gy,Xz2>kذ{VZٔ)SaBM8ѭ{ڵ]Ca~.1cO454-[V7tԼxY%ehGΧ^b~; 7 |-]t5j뮻Β\)T]aǬ/(=o<~䝹_ thTZݷ իۘ1c߇z(rӧOwp?S\CW^qTNWXp&KأYF @I 1ލyN2/~nuwןjq+XlkɄlèGҳ-_(SiµuniԨu>g[xhi+])5]?x{']d͚59uZEoM6YJΫAO>\ UmGQKQzyX{W_娣_~vF;Yƒ5nyfoZY JGPVV87ڒSv@R,u|[~鳶n0ږf kٶXMKuiTAܫW/WQL6͍U;z#UjKpN:ߣӺOzݮnݺ+==G~뭷ysi[Ie_tP vBb\V_ *=:XBz`eGL4CN0˲6osC;S]! hl/zO?亁ux&M:mР qVYWaܹ]]~۝|9nBJJ![&ǗlG"se3S[\iȴڷPfВZ6pgެB>w%6~,uR_b {bTŭdU.VX6 8Md-"d.9djEU_~E:qׯwlذuѡ C- _n%qvSO=\ѣ oڷoov=vwؐ!C[nn.GոS|5kڝwYmmh'hkoi3k_7-_fuPݘ lo]ead['ϰE+K5i[UG3r9UQ{\۴ݫ lfc{1 ]AF5:֌zuy՝=x`jxoNu@hX`ѢE*z<5tf͚& pMk]HkgU!d kZo֬;M PۛZ}Kb\?LcSTQWuy7e?#E1]&O7n"%Mby`ùsxI T^F-!x*wkkLUX pЁqr]vPR8 G4vn 9{뛬*zprݺv5a;oӗzW_+Z\_8(En_.FoӡS Pn@u%pnUnY2UQ} (շe}}cePp@@88 pp@8  rSO=ğwܸq?7X---\Xž~i׏ɓO໾}|#FX۶mm%5rKllٲȎ(v;&M*a(r2{l{WmڵExYYYJYd}kf-[,{Gxb{W좋.?ԶرcX#|8v̙3.ێ8w١j/r6'|Ξ6mW^.2d5k̶l?cֻwow;ڴic'p}yCժUv>lrT~z֭)]uo~WAp[ǎ].Se{7k׮vx^zo{y6k֬B<#v饗ڭjwq6o޼^;m۶cDwASW{:_y啶iӦm#Usr!wU>r]|jQw[oetmklݺu6ew_GϧFn|pJ=u5v^>>7nT:~_DW6lێj Kʕ+su!{x{uq+lw^c +oU!}a®aÆnYgNvz VynHׁƏeѢEAmi^vmWe;3!!U#? 1Thgj*5A~QG*!U6-ZpՓ*4Uuֵӧ@=S";/Uvdu{TΝmv'DSG;/5ktJM*z=r[Et/z:o?뮻\CFja#WKubvWʿ]3\QW土dؿըQîjw]{Pà]vvgǏEϯR,Zwcsi]V-KLLx}^Ι35]R_wW !{}ꫯ"(5 K]֭]ը*LR7\!_kǬRҠA;j.\1v[S ]먐ӄ;ߺuNg}_;eon&MeȑPDF=ѓ[/aJ/Thh[zy<#q?mUvK\*zzΏzlTU9 `06zz/+ DWY ~ q'L!ƞgɒ%!jxdܹ9|V%F]1V;1oLQ;tMp?L=` Ё7ެy  {_o;PTXJZt;]';_ X,^f\|VJ7J;\uj稝 a*\],^pk+T3Ya;Bݛz~v+sqa,Ӥ*ZGјB\@),M:k^Wէ Q~WaWjD)5裏x?/Kз";u;:uȋ5_CibG4K8iҒK:h&׸4LXt(c\`:(pp@8  p@@88 p@8  pp@88 p@@ pp@8 p@@88 pp@8  p@@88 p@8  ^q6A[bccjK8vve ]^ӭmx?DS!)f ; v4' ؕ+oUmwMdc"jxO2cحN[w5gw-@(ymW1`+18 pp@@ۜav [weI/3li'DC,} r\[Bv҄t6B> !ےʫox-Kr(^+hFqVr 6Ϡm4K a{gd1#]턦q@%%|R3o @94$kU=`6?2큃-9waq^5ۏ$۫F |D?)`s،pF3ɿ[eߧdp5c;4Ѻ5>M|wcY֪zu}'> !}M=4-3m[f(Vd@(rߜ6;^\dZ&q֭QzԿ7\7N˰A7^n4ncl,{Q}KVtĆm]GE8MlR`kp@bjW3`օL>9.K8{gA&b3w}V[{\[v;`lUMȴZ[=W SYIllzd{{~~~ 嗺իBxcwwP¹Bg r8  pp@88 pPbP*BT87"㊐oء@x<ί =r-lG_ZZւTY%}…?I(~AٛC1@ 駟nlbPQAw:ǒ5mڴM)))߶lٲn*U'(۶m:w)}Ĉ3٬9[ry ;^ⳗE]) U>`sPdʙٕ3t>{xV^x\T'=w}@akZ2;+V+cUⱂ;w[xn,XA౪%VMPp<+F[$-*bTy7x <9.FnQ!t(sxtv 5ĶbeK%A *.quʹ(*"Ǽ5&t!QC;><36$ڴ8-%Ѫ'lsF%XJ\BʴC+8LϷM^MlS)SN?Ѥ{%$$G*<--[ʭHۇ/pVpxx{C.矘4|߬^zQ94?]~兺SN͛m4}t{798PU`ӗXRRn??ɓ'/?VlY;#]e^vI'u?#\WTJ.n9^ծS޺n„ ^z)zuQv駳 /Ҿ+ 8PM둛5kaGW6cʅ^h55?rjj5l={׬M6'e˖-9=.K/:u|9س>kSLq=1j𩱧i{K^՞.קQknU`|Q7Wo7KMVD(FVU]w*>U25p4K MuM+5M:{!4qMrk΁Nj Um;VCMǏ]z]su:Xol i5]WC~_rk[Wk6CM|ˉ^z5s [\y啮ָG]zngQj*Tǻܶ㨗3 ^WoeixA *5ڼ^'zϽuVUjW>EOժU+7P|r&i=_z/䋋 hI-IۗRVpΦ*tN]z+uݥǨR7tʼn{\Yss}vZ{Z\Ry[qНzQf~v{Tx>T:Tek)5.c] <@utZ4~Quj>75PjOP(:OMH۾d8MXKن_ْ.X,|8ުv?J+\dfM埬J.Q#B]̑@1p䛚 Vg`ڪvkU iﺟ.EE;EMq-B|w-+{T [vKؖۺTa<}?rTl_K,rY7 w햨D7I=HsmVlB~o>y6YB;= Tt#vr-Qf h*|3(PtX>z8W.ʖUaCe[p:2fe%cT6Ķ4;Y)a U*X#t[D'YKZ\b|z| 3Gaia'h 'b,muݗ$T`iKVO\.t}$%[)h 8Mf*EDZ1GqƁOrCG6(.E.r'bBviul.? 8y[ÛZ=,^b}ZFegvm޼͛gSN>^y[fMn݅Ȱddn>Q-|iKE~ɚ4iB;==]~7bŊVfMU|1 ś{{Sݹ! ֠A{ꫯN;ZnmUVu/iiin^-|{V^=?bnܸqvG2bĈO>vAى'h3f̈zM6ٵ^k͛7.V\Yd޿n (So>fr϶;wذaW\TkѢ}w1o[nz͚5s秞w}׽FK.ąxrYe (4h|Y_$z={מb'LWpR].z|ʼn"%/r8T-^؅?o&WjU? L۲e ҥKg{|=AN\1o3rHk׮o>|ld>ܺtb[ ??| 6ozѣj__*rUݻ͝;d|VN쳏M2=z/4lѫW/4i[jժ¾ko~-'Ov %Ky{ ]7Uv*\W}++u`m, c\ V?6mXʕ]裏n.Tlk/00aBjrqo~]… ݐ&.*Tp͍RJ6zh'M 3gUuY!믻*p`ZZA,cFKܫYZp7/8)ZkK_ֽU"[qo|_m>iG|a.ig/|PLaY צMnݺn9slָqcVWp,vСU.JV^\qF+[le5hv|ePQvl-^2eI'd_|۞z_?x{O*p`W?PK[6O,}H7\^݁ [tcV6hqu?v8x1%TUO-SX~ uiTA|gj|֭.D6ӧOwcfUcƌ;/K( )UhEE]G:?u5jd{m۶>BV]o5j7\YRwBպ' IjYƪwU + .P[7cKlX.s}Iuj>?ȴM[lq?TQjĉݘWQO6u2MLڵk,nUEzȮr=N?,p^ݬt !~|nGDP`VI?[BN_+N@ZU< gXr:-[ެtƶ%Ԡ u8|ٲe.wPŨ[ɪ]mphZ^E\r)Jr\Tի Y?|uֹE֯_Ќ_~Mө^ք/Ujx7nG}u o}*#tomB{MVLrGiCu1pU6-`*B[:—uzTkFׯ k5~xE1]&O;v"%Mby`'ùupYUziۗ  AGbTv;( 'un pNnlƕJڱ@cOp}U({n8=xidiQt1}>Z?Gv95I(aid 1:@z ~ZWG_ p-7Sb[}+!^7@c qB> pp@8 p@@88 Q<3vg;־"}kkԨe˖?oiiiv/O%oofy?zԭ[--[nݺْ%K8JO<ȿ@mV[6lY&_O!33@!Kd>{1>|5iҤG;ڂ _k&LPhc̘1},Nݮ];1c*pٳg 7`suQkos駻ӧJyժUXÆ mO?mw/ܚ5kfr}w1סB q۴ic\rOY*KYnkdm}ݮ:e?|իP 8#UVVשvGۍ7ޘpUsK.uUU-o]~뭷w-z]֦Lnu1pԨO>r!n[!N&Nk6~}ֿ nذnj[c=&N~^oРAn; /t+V.̅UW]ŭ:u1X7>cPaWNw /0箲S%+Znm{?8O8رTRU *5r4Y*/os=n}vŎ?x;蠃gϞ!J5~{ݪصոo?=m5Ƭ@T5}gW圓RJ5kU\nw]{PàEֹsg^Eo,y9VjIIIqG9s\O%5FW !tI}/(5 ]ӦM]ը*LR7\!W_}.RRv,j͛1uvܹ[S ]먐ӄ;]NIIqSe駟A;_[~n:th8E=QũQϫ@䤫;vgUzDE푗Lj)]T{kuac˪9'QUT+322FSEde5J]=K:ᣏ>r!D2ji}-Z_ }P&g:/ Rfu )wjS75~E*8Uj@ 2zU辱UwUɫ W Y&x\\>z~p 56^yR7[}Youٟ(.جRF~WmDն~(;u2~}5J? ԩ阮zbUƊƽl4MZUـIv+rPO@~f7 r8P h֪U(XCո jYZV̙qmMT;}ơoUBP# /]2~٧ՅY}k,^ަڅ5CUԘPC P^+(0>ţq];^V(V0w츣 P*$UMk~5ILyU;&)ԛ4Qg4鹽.tNwV-;ukuS_QCeϋ. ,SC@Q& +B7k^_CմnX?Mfg-]z40MdSKn7Ca}҅~Y_O.ZWck"G2~h_(pU+쵈S]<(P MMҤ4ʌ xu +uĉPևߎ^G BԬr- ;\34W{Uo#+>}z"{7n \],ZdּGpuא5.)%q%$m_JZe: (5IwY;/ ouS#$z] E_,mۗ  X^y}^֍ Fp@@88(,dӦMyflٲlbH_ʕ-))*U~_J XҥFOJqf7nիW۾~_!O̷)"ŒUZBBʕ+~_!Ф.QJ˻ %iJ͒G<ٯP+ab-xo p@A.(2RSSTRlIFFmݺ5ˢ)cAB2|xbk׮;ؓ%dߋ/hO?tr׮]޲^{%ȑ#Np)b'|]|G}d?mذ!}&Ol_~<:믿~?l)))ٞKvҭ[7ѣl۶kl̙}Q5joQ)tUAm6|af} 2Znm\r -[u>AWUg}f .|#)AZ [[B۳>Gy$o]CᄈVZNJ+99ٞz)=z45:U sߵ^^!mf_ KZ͚5;"_o֬YV^=3?˓&MAˏ?x Q"̛7:vh 6_u{[J})>ӅWQ_ΝS.-[t@W>c_,cǎ}ϟotOs̱ /0|۳:7nlݻw޽{Gѣ5k 8JӧnJU 뮻]oN+p_y{w]s5o܍ۄw ҥK֭[H&N.Xž|I;餓\p+5oBc>3\?FݮJz{ΪUoї62w\0`p;:8tGv]ʷ~kw}VL;;C\BDɢ> j أ>]Wگh]/vQ-bsJ-~ڗ"\z6{l\A ׅZݺuy@>|OU͚$(:UW:psʔ)oƍs_~ y<  5|FwÆ uo>s]F67|̵O]pvyh]/>cq!{(@cWQo*jٲeٿ:8{?XlcuUR:`viSyTU )խA~͘1#|9IlR?4BmnGT˅wMѩeZԐT9/k(i=OxGɦJGݗ:2a?w֢Z_'y]4.靋5CU&/z>Q}ƣ\ ԩ ͷEUnMTu ?~3f?u6|NKUeSotLr?:UGG:8*mA]Pө@{5mڔ \h^nCNznTz-Zp~4Lr}ԩSݜ 5 `$Ir>@i:uX&MM0믿O of-~8޽ˍs&ǩڏOnۻVEc\2xyzzP#T몙j\j<v࿊ 1$K^+LgS]d)ߞHJUa%P ݓƣ/Pa ey}-*pk70?(8vN-xo p3b#DQr=W(pC$(YaBIگ@çRJ ֯_>ſBR"S-J~G ϩEU{QCuoB**Y++J8Q80B" pp@8 p@@sD8%T1-p;%Vw (ϖ9ue˖ܪTe_=oΜ9S38Ox ʒo߾nݺ }({x O=.ƒ?n\p7{w *JNNNb3?6oޜ2{)wÆ f%[mp// ۗl (r|PN^yk " pv--"RgBaieQ|Ǫcw ZGx0Mo+UG k] X!$hxPu] <?wz6?eiIENDB`deepin-deb-installer-1.2.4/environments.h.in000066400000000000000000000001651325164132300210140ustar00rootroot00000000000000#ifndef __ENVIRONMENTS_H_ #define __ENVIRONMENTS_H_ #define VERSION "@VERSION@" #endif // __ENVIRONMENTS_H_ deepin-deb-installer-1.2.4/filechoosewidget.cpp000066400000000000000000000067401325164132300215440ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "filechoosewidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE FileChooseWidget::FileChooseWidget(QWidget *parent) : QWidget(parent) { const auto ratio = devicePixelRatioF(); QPixmap iconPix = DSvgRenderer::render(":/images/icon.svg", QSize(140, 140) * ratio); iconPix.setDevicePixelRatio(ratio); QLabel *iconImage = new QLabel; iconImage->setFixedSize(140, 140); iconImage->setPixmap(iconPix); QLabel *dndTips = new QLabel; dndTips->setText(tr("Drag and drop file here")); dndTips->setAlignment(Qt::AlignCenter); dndTips->setStyleSheet("QLabel {" "color: #6a6a6a;" "}"); QVBoxLayout *centerWrapLayout = new QVBoxLayout; centerWrapLayout->addWidget(iconImage); centerWrapLayout->setAlignment(iconImage, Qt::AlignTop | Qt::AlignHCenter); centerWrapLayout->addSpacing(20); centerWrapLayout->addWidget(dndTips); centerWrapLayout->setSpacing(0); centerWrapLayout->setContentsMargins(0, 0, 0, 15); QWidget *centerWidget = new QFrame; centerWidget->setFixedWidth(240); centerWidget->setLayout(centerWrapLayout); centerWidget->setObjectName("CenterWidget"); centerWidget->setStyleSheet("#CenterWidget {" "border:none;" "}"); QLabel *split_line = new QLabel; split_line->setPixmap(QPixmap(":/images/split_line.svg")); split_line->setAlignment(Qt::AlignCenter); m_fileChooseBtn = new DLinkButton; m_fileChooseBtn->setText(tr("Select File")); QVBoxLayout *centralLayout = new QVBoxLayout; centralLayout->addStretch(); centralLayout->addWidget(centerWidget); centralLayout->setAlignment(centerWidget, Qt::AlignTop | Qt::AlignCenter); centralLayout->addWidget(split_line); centralLayout->addSpacing(20); centralLayout->addWidget(m_fileChooseBtn); centralLayout->setAlignment(m_fileChooseBtn, Qt::AlignCenter); centralLayout->setSpacing(0); centralLayout->setContentsMargins(0, 0, 0, 60); setLayout(centralLayout); connect(m_fileChooseBtn, &QPushButton::clicked, this, &FileChooseWidget::chooseFiles); } void FileChooseWidget::chooseFiles() { QFileDialog dialog; dialog.setFileMode(QFileDialog::ExistingFiles); dialog.setNameFilter("Debian Pakcage Files (*.deb)"); if (dialog.exec() != QDialog::Accepted) return; const QStringList selected_files = dialog.selectedFiles(); emit packagesSelected(selected_files); } deepin-deb-installer-1.2.4/filechoosewidget.h000066400000000000000000000022671325164132300212110ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef FILECHOOSEWIDGET_H #define FILECHOOSEWIDGET_H #include #include class QPushButton; class FileChooseWidget : public QWidget { Q_OBJECT public: explicit FileChooseWidget(QWidget *parent = nullptr); signals: void packagesSelected(const QStringList files) const; private slots: void chooseFiles(); private: Dtk::Widget::DLinkButton *m_fileChooseBtn; }; #endif // FILECHOOSEWIDGET_H deepin-deb-installer-1.2.4/infocontrolbutton.cpp000066400000000000000000000046271325164132300220120ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "infocontrolbutton.h" #include #include #include #include InfoControlButton::InfoControlButton(const QString &expandTips, const QString &shrinkTips, QWidget *parent) : QWidget(parent), m_expand(false), m_expandTips(expandTips), m_shrinkTips(shrinkTips), m_arrowIcon(new QLabel), m_tipsText(new QLabel) { m_arrowIcon->setAlignment(Qt::AlignCenter); m_arrowIcon->setPixmap(QIcon(":/images/arrow_up.svg").pixmap(21, 8)); m_tipsText->setAlignment(Qt::AlignCenter); m_tipsText->setText(expandTips); m_tipsText->setStyleSheet("QLabel {" "color: #6a6a6a;" "}"); QVBoxLayout *centralLayout = new QVBoxLayout; centralLayout->addSpacing(2); centralLayout->addWidget(m_arrowIcon); centralLayout->addStretch(); centralLayout->addWidget(m_tipsText); centralLayout->setSpacing(0); centralLayout->setContentsMargins(0, 0, 0, 0); setLayout(centralLayout); setFixedSize(200, 33); } void InfoControlButton::mouseReleaseEvent(QMouseEvent *e) { QWidget::mouseReleaseEvent(e); onMouseRelease(); } void InfoControlButton::onMouseRelease() { if (m_expand) emit shrink(); else emit expand(); m_expand = !m_expand; if (!m_expand) { m_arrowIcon->setPixmap(QIcon(":/images/arrow_up.svg").pixmap(21, 8)); m_tipsText->setText(m_expandTips); setFixedSize(200, 33); } else { m_arrowIcon->setPixmap(QIcon(":/images/arrow_down.svg").pixmap(21, 8)); m_tipsText->setText(m_shrinkTips); setFixedSize(200, 28); } } deepin-deb-installer-1.2.4/infocontrolbutton.h000066400000000000000000000025011325164132300214440ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef INFOCONTROLBUTTON_H #define INFOCONTROLBUTTON_H #include #include class InfoControlButton : public QWidget { Q_OBJECT public: explicit InfoControlButton(const QString &expandTips, const QString &shrinkTips, QWidget *parent = 0); signals: void expand(); void shrink(); protected: void mouseReleaseEvent(QMouseEvent *); private slots: void onMouseRelease(); private: bool m_expand; QString m_expandTips; QString m_shrinkTips; QLabel *m_arrowIcon; QLabel *m_tipsText; }; #endif // INFOCONTROLBUTTON_H deepin-deb-installer-1.2.4/main.cpp000066400000000000000000000052471325164132300171450ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "debinstaller.h" #include "environments.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE #ifdef DUTIL_USE_NAMESPACE DUTIL_USE_NAMESPACE #else DCORE_USE_NAMESPACE #endif int main(int argc, char *argv[]) { DApplication::loadDXcbPlugin(); DApplication app(argc, argv); app.setOrganizationName("deepin"); app.setApplicationName("deepin-deb-installer"); app.setApplicationVersion(VERSION); app.setApplicationAcknowledgementPage("https://www.deepin.org/acknowledgments/deepin-package-manager/"); app.setProductIcon(QIcon(":/images/icon.svg")); app.setAttribute(Qt::AA_UseHighDpiPixmaps); app.setAttribute(Qt::AA_EnableHighDpiScaling); // app.loadTranslator(QList() << QLocale("zh_CN")); app.loadTranslator(); app.setProductName(QApplication::translate("main", "Deepin Package Manager")); app.setApplicationDescription(QApplication::translate("main", "Deepin Package Manager is an application used to help users install and remove local software, supports bulk install.")); app.setTheme("light"); DLogManager::registerConsoleAppender(); DLogManager::registerFileAppender(); qDebug() << qApp->applicationName() << "started, version = " << qApp->applicationVersion(); // command line arguments QCommandLineParser parser; parser.setApplicationDescription("Deepin deb package manager."); parser.addHelpOption(); parser.addVersionOption(); parser.addPositionalArgument("filename", "Deb package path.", "file [file..]"); parser.process(app); const QStringList file_list = parser.positionalArguments(); qDebug() << file_list; DebInstaller w; w.show(); // select files from args if (!file_list.isEmpty()) QMetaObject::invokeMethod(&w, "onPackagesSelected", Qt::QueuedConnection, Q_ARG(QStringList, file_list)); return app.exec(); } deepin-deb-installer-1.2.4/multipleinstallpage.cpp000066400000000000000000000133101325164132300222660ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "multipleinstallpage.h" #include "packagelistview.h" #include "packageslistdelegate.h" #include "deblistmodel.h" #include "workerprogress.h" #include "widgets/bluebutton.h" #include "widgets/graybutton.h" #include #include #include #include #include MultipleInstallPage::MultipleInstallPage(DebListModel *model, QWidget *parent) : QWidget(parent), m_debListModel(model), m_appsView(new PackagesListView), m_infoArea(new QTextEdit), m_infoControlButton(new InfoControlButton(tr("Display details"), tr("Collapse"))), m_installProgress(new WorkerProgress), m_progressAnimation(new QPropertyAnimation(m_installProgress, "value", this)), m_installButton(new BlueButton), m_acceptButton(new GrayButton), m_backButton(new GrayButton) { PackagesListDelegate *delegate = new PackagesListDelegate; m_appsView->setModel(model); m_appsView->setFixedHeight(213); m_appsView->setItemDelegate(delegate); m_appsView->setStyleSheet("QListView {" "border: 1px solid #eee;" "margin: 30px 0 2px 0;" "}"); m_installButton->setText(tr("Install")); m_acceptButton->setText(tr("Done")); m_acceptButton->setVisible(false); m_backButton->setText(tr("Back")); m_backButton->setVisible(false); m_infoArea->setReadOnly(true); m_infoArea->setVisible(false); m_infoArea->setAcceptDrops(false); m_infoArea->setFixedHeight(186); m_infoArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_infoArea->setStyleSheet("QTextEdit {" "color: #609dc9;" "border: 1px solid #eee;" "margin: 2px 0 0 0;" "}"); m_infoControlButton->setVisible(false); m_installProgress->setVisible(false); QHBoxLayout *btnsLayout = new QHBoxLayout; btnsLayout->addStretch(); btnsLayout->addWidget(m_installButton); btnsLayout->addWidget(m_backButton); btnsLayout->addWidget(m_acceptButton); btnsLayout->setSpacing(10); btnsLayout->addStretch(); btnsLayout->setContentsMargins(0, 0, 0, 0); QVBoxLayout *centralLayout = new QVBoxLayout; centralLayout->addWidget(m_appsView); centralLayout->addWidget(m_infoControlButton); centralLayout->setAlignment(m_infoControlButton, Qt::AlignHCenter); centralLayout->addWidget(m_infoArea); centralLayout->addStretch(); centralLayout->addWidget(m_installProgress); centralLayout->setAlignment(m_installProgress, Qt::AlignHCenter); centralLayout->addLayout(btnsLayout); centralLayout->setSpacing(0); centralLayout->setContentsMargins(20, 0, 20, 30); setLayout(centralLayout); connect(m_infoControlButton, &InfoControlButton::expand, this, &MultipleInstallPage::showInfo); connect(m_infoControlButton, &InfoControlButton::shrink, this, &MultipleInstallPage::hideInfo); connect(m_installButton, &QPushButton::clicked, m_debListModel, &DebListModel::installAll); connect(m_backButton, &QPushButton::clicked, this, &MultipleInstallPage::back); connect(m_acceptButton, &QPushButton::clicked, qApp, &QApplication::quit); connect(m_appsView, &PackagesListView::clicked, this, &MultipleInstallPage::onItemClicked); connect(m_appsView, &PackagesListView::entered, m_debListModel, &DebListModel::setCurrentIndex); connect(model, &DebListModel::workerProgressChanged, this, &MultipleInstallPage::onProgressChanged); connect(model, &DebListModel::appendOutputInfo, this, &MultipleInstallPage::onOutputAvailable); } void MultipleInstallPage::onWorkerFinshed() { m_acceptButton->setVisible(true); m_backButton->setVisible(true); m_installProgress->setVisible(false); } void MultipleInstallPage::onOutputAvailable(const QString &output) { m_infoArea->append(output.trimmed()); // change to install if (m_installButton->isVisible()) { m_installButton->setVisible(false); m_installProgress->setVisible(true); m_infoControlButton->setVisible(true); } } void MultipleInstallPage::onProgressChanged(const int progress) { m_progressAnimation->setStartValue(m_installProgress->value()); m_progressAnimation->setEndValue(progress); m_progressAnimation->start(); // finished if (progress == 100) { onOutputAvailable(QString()); QTimer::singleShot(m_progressAnimation->duration(), this, &MultipleInstallPage::onWorkerFinshed); } } void MultipleInstallPage::onItemClicked(const QModelIndex &index) { if (!m_debListModel->isWorkerPrepare()) return; const int r = index.row(); emit requestRemovePackage(r); } void MultipleInstallPage::showInfo() { m_appsView->setVisible(false); m_infoArea->setVisible(true); } void MultipleInstallPage::hideInfo() { m_appsView->setVisible(true); m_infoArea->setVisible(false); } deepin-deb-installer-1.2.4/multipleinstallpage.h000066400000000000000000000034761325164132300217470ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef MULTIPLEINSTALLPAGE_H #define MULTIPLEINSTALLPAGE_H #include "infocontrolbutton.h" #include #include #include #include #include class PackagesListView; class DebListModel; class MultipleInstallPage : public QWidget { Q_OBJECT public: explicit MultipleInstallPage(DebListModel *model, QWidget *parent = 0); signals: void back() const; void requestRemovePackage(const int index) const; private slots: void onWorkerFinshed(); void onOutputAvailable(const QString &output); void onProgressChanged(const int progress); void onItemClicked(const QModelIndex &index); void showInfo(); void hideInfo(); private: DebListModel *m_debListModel; PackagesListView *m_appsView; QTextEdit *m_infoArea; InfoControlButton *m_infoControlButton; QProgressBar *m_installProgress; QPropertyAnimation *m_progressAnimation; QPushButton *m_installButton; QPushButton *m_acceptButton; QPushButton *m_backButton; }; #endif // MULTIPLEINSTALLPAGE_H deepin-deb-installer-1.2.4/packagelistview.cpp000066400000000000000000000021431325164132300213730ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "packagelistview.h" PackagesListView::PackagesListView(QWidget *parent) : QListView(parent) { setVerticalScrollMode(ScrollPerPixel); setSelectionMode(NoSelection); setAutoScroll(false); setMouseTracking(true); } void PackagesListView::leaveEvent(QEvent *e) { QListView::leaveEvent(e); emit entered(QModelIndex()); } deepin-deb-installer-1.2.4/packagelistview.h000066400000000000000000000020171325164132300210400ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef PACKAGESLISTVIEW_H #define PACKAGESLISTVIEW_H #include class PackagesListView : public QListView { Q_OBJECT public: explicit PackagesListView(QWidget *parent = 0); protected: void leaveEvent(QEvent *e); }; #endif // PACKAGESLISTVIEW_H deepin-deb-installer-1.2.4/packageslistdelegate.cpp000066400000000000000000000142041325164132300223570ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "packageslistdelegate.h" #include "deblistmodel.h" #include #include #include DWIDGET_USE_NAMESPACE PackagesListDelegate::PackagesListDelegate(QObject *parent) : QAbstractItemDelegate(parent) { const QIcon icon = QIcon::fromTheme("application-vnd.debian.binary-package", QIcon::fromTheme("debian-swirl")); const auto ratio = qApp->devicePixelRatio(); m_packageIcon = icon.pixmap(32, 32); m_removeIcon = DSvgRenderer::render(":/images/active_tab_close_normal.svg", QSize(16, 16) * ratio); m_removeIcon.setDevicePixelRatio(ratio); } void PackagesListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { // painter->fillRect(option.rect, Qt::gray); const int content_x = 45; // draw top border if (index.row()) { const QPoint start(content_x, option.rect.top()); const QPoint end(option.rect.right() - 10, option.rect.top()); painter->setPen(QColor(0, 0, 0, 255 * .05)); painter->setRenderHint(QPainter::Antialiasing, false); painter->drawLine(start, end); } painter->setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform); // draw package icon const int x = 5; const int y = option.rect.top() + (option.rect.height() - m_packageIcon.height() / m_packageIcon.devicePixelRatio()) / 2; painter->drawPixmap(x, y, m_packageIcon); // draw package name QRect name_rect = option.rect; name_rect.setLeft(content_x); name_rect.setHeight(name_rect.height() / 2); const QString name = index.data(DebListModel::PackageNameRole).toString(); const QFont old_font = painter->font(); QFont f = old_font; f.setWeight(QFont::DemiBold); painter->setFont(f); const QString name_str = painter->fontMetrics().elidedText(name, Qt::ElideRight, 306); const QRectF name_bounding_rect = painter->boundingRect(name_rect, name_str, Qt::AlignLeft | Qt::AlignBottom); painter->setPen(Qt::black); painter->drawText(name_rect, name_str, Qt::AlignLeft | Qt::AlignBottom); painter->setFont(old_font); // draw package version const int version_x = name_bounding_rect.right() + 8; QRect version_rect = name_rect; version_rect.setLeft(version_x); version_rect.setRight(option.rect.right() - 85); const QString version = index.data(DebListModel::PackageVersionRole).toString(); const QString version_str = painter->fontMetrics().elidedText(version, Qt::ElideRight, version_rect.width()); painter->drawText(version_rect, version_str, Qt::AlignLeft | Qt::AlignBottom); // install status const int operate_stat = index.data(DebListModel::PackageOperateStatusRole).toInt(); if (operate_stat != DebListModel::Prepare) { QRect install_status_rect = option.rect; install_status_rect.setRight(option.rect.right() - 15); install_status_rect.setLeft(option.rect.right() - 80); switch (operate_stat) { case DebListModel::Operating: painter->setPen(QColor(124, 124, 124)); painter->drawText(install_status_rect, tr("Installing"), Qt::AlignVCenter | Qt::AlignRight); break; case DebListModel::Success: painter->setPen(QColor(65, 117, 5)); painter->drawText(install_status_rect, tr("Installed"), Qt::AlignVCenter | Qt::AlignRight); break; default: painter->setPen(QColor(255, 109, 109)); painter->drawText(install_status_rect, tr("Failed"), Qt::AlignVCenter | Qt::AlignRight); break; } } else if (index.data(DebListModel::WorkerIsPrepareRole).toBool() && index.data(DebListModel::ItemIsCurrentRole).toBool()) { // draw remove icon const int x = option.rect.right() - m_removeIcon.width() / m_removeIcon.devicePixelRatio() - 10; const int y = option.rect.top() + (option.rect.height() - m_removeIcon.height() / m_removeIcon.devicePixelRatio()) / 2; painter->drawPixmap(x, y, m_removeIcon); } // draw package info QString info_str; QRect info_rect = option.rect; info_rect.setLeft(content_x); info_rect.setTop(name_rect.bottom() + 1 + 3); const int install_stat = index.data(DebListModel::PackageVersionStatusRole).toInt(); if (operate_stat == DebListModel::Failed) { info_str = index.data(DebListModel::PackageFailReasonRole).toString(); painter->setPen(QColor(255, 109, 109)); } else if (install_stat != DebListModel::NotInstalled) { if (install_stat == DebListModel::InstalledSameVersion) { info_str = tr("Same version installed"); painter->setPen(QColor(65, 117, 5)); } else { info_str = tr("Other version installed: %1").arg(index.data(DebListModel::PackageInstalledVersionRole).toString()); painter->setPen(QColor(255, 109, 109)); } } else { info_str = index.data(DebListModel::PackageDescriptionRole).toString(); painter->setPen(QColor(90, 90, 90)); } info_str = painter->fontMetrics().elidedText(info_str, Qt::ElideRight, 306); painter->drawText(info_rect, info_str, Qt::AlignLeft | Qt::AlignTop); } QSize PackagesListDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { Q_UNUSED(option); return index.data(Qt::SizeHintRole).toSize(); } deepin-deb-installer-1.2.4/packageslistdelegate.h000066400000000000000000000024271325164132300220300ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef PACKAGESLISTDELEGATE_H #define PACKAGESLISTDELEGATE_H #include class PackagesListDelegate : public QAbstractItemDelegate { Q_OBJECT public: explicit PackagesListDelegate(QObject *parent = 0); private: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; private: QPixmap m_packageIcon; QPixmap m_removeIcon; }; #endif // PACKAGESLISTDELEGATE_H deepin-deb-installer-1.2.4/packagesmanager.cpp000066400000000000000000000617201325164132300213300ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "packagesmanager.h" #include "deblistmodel.h" #include #include #include using namespace QApt; QString relationName(const RelationType type) { switch (type) { case LessOrEqual: return "<="; case GreaterOrEqual: return ">="; case LessThan: return "<"; case GreaterThan: return ">"; case Equals: return "="; case NotEqual: return "!="; default:; } return QString(); } bool isArchMatches(QString sysArch, const QString &packageArch, const int multiArchType) { Q_UNUSED(multiArchType); if (sysArch.startsWith(':')) sysArch.remove(0, 1); if (sysArch == "all" || sysArch == "any") return true; // if (multiArchType == MultiArchForeign) // return true; return sysArch == packageArch; } QString resolvMultiArchAnnotation(const QString &annotation, const QString &debArch, const int multiArchType = InvalidMultiArchType) { if (annotation == "native" || annotation == "any") return QString(); if (multiArchType == MultiArchForeign) return QString(); QString arch; if (annotation.isEmpty()) arch = debArch; else arch = annotation; if (!arch.startsWith(':') && !arch.isEmpty()) return arch.prepend(':'); else return arch; } bool dependencyVersionMatch(const int result, const RelationType relation) { switch (relation) { case LessOrEqual: return result <= 0; case GreaterOrEqual: return result >= 0; case LessThan: return result < 0; case GreaterThan: return result > 0; case Equals: return result == 0; case NotEqual: return result != 0; default:; } return true; } Backend *init_backend() { Backend *b = new Backend; if (b->init()) return b; qFatal("%s", b->initErrorMessage().toStdString().c_str()); return nullptr; } PackagesManager::PackagesManager(QObject *parent) : QObject(parent) { m_backendFuture = QtConcurrent::run(init_backend); } bool PackagesManager::isBackendReady() { return m_backendFuture.isFinished(); } bool PackagesManager::isArchError(const int idx) { Backend *b = m_backendFuture.result(); DebFile *deb = m_preparedPackages[idx]; const QString arch = deb->architecture(); if (arch == "all" || arch == "any") return false; return !b->architectures().contains(deb->architecture()); } const ConflictResult PackagesManager::packageConflictStat(const int index) { auto *p = m_preparedPackages[index]; return isConflictSatisfy(p->architecture(), p->conflicts()); } const ConflictResult PackagesManager::isConflictSatisfy(const QString &arch, Package *package) { const QString &name = package->name(); qDebug() << "check conflict for package" << name << arch; const auto ret_installed = isInstalledConflict(name, package->version(), package->architecture()); if (!ret_installed.is_ok()) return ret_installed; // if (!ret_installed.is_ok()) // { // bool found_provider = false; // // check providers // Backend *b = m_backendFuture.result(); // for (auto *ap : b->availablePackages()) // { // if (ap->providesList().contains(name)) // { // found_provider = true; // break; // } // } // // not found providers, return error // if (!found_provider) // return ret_installed; // } qDebug() << "check conflict for local installed package is ok."; const auto ret_package = isConflictSatisfy(arch, package->conflicts()); qDebug() << "check finished, conflict is satisfy:" << package->name() << bool(ret_package.is_ok()); return ret_package; } const ConflictResult PackagesManager::isInstalledConflict(const QString &packageName, const QString &packageVersion, const QString &packageArch) { static QList> sysConflicts; if (sysConflicts.isEmpty()) { Backend *b = m_backendFuture.result(); for (Package *p : b->availablePackages()) { if (!p->isInstalled()) continue; const auto &conflicts = p->conflicts(); if (conflicts.isEmpty()) continue; for (const auto &conflict_list : conflicts) for (const auto &conflict : conflict_list) sysConflicts << QPair(p->name(), conflict); } } for (const auto &info : sysConflicts) { const auto &conflict = info.second; const auto &pkgName = conflict.packageName(); const auto &pkgVersion = conflict.packageVersion(); const auto &pkgArch = conflict.multiArchAnnotation(); if (pkgName != packageName) continue; qDebug() << pkgName << pkgVersion << pkgArch; // pass if arch not match if (!pkgArch.isEmpty() && pkgArch != packageArch && pkgArch != "any" && pkgArch != "native") continue; if (pkgVersion.isEmpty()) return ConflictResult::err(info.first); const int relation = Package::compareVersion(packageVersion, conflict.packageVersion()); // match, so is bad if (dependencyVersionMatch(relation, conflict.relationType())) return ConflictResult::err(info.first); } return ConflictResult::ok(QString()); } const ConflictResult PackagesManager::isConflictSatisfy(const QString &arch, const QList &conflicts) { for (const auto &conflict_list : conflicts) { for (const auto &conflict : conflict_list) { const QString name = conflict.packageName(); Package *p = packageWithArch(name, arch, conflict.multiArchAnnotation()); if (!p || !p->isInstalled()) continue; // arch error, conflicts if (!isArchMatches(arch, p->architecture(), p->multiArchType())) { qDebug() << "conflicts package installed: " << arch << p->name() << p->architecture() << p->multiArchTypeString(); return ConflictResult::err(name); } const QString conflict_version = conflict.packageVersion(); const QString installed_version = p->installedVersion(); const auto type = conflict.relationType(); const auto result = Package::compareVersion(installed_version, conflict_version); // not match, ok if (!dependencyVersionMatch(result, type)) continue; // test package const QString mirror_version = p->availableVersion(); if (mirror_version == installed_version) continue; // mirror version is also break const auto mirror_result = Package::compareVersion(mirror_version, conflict_version); if (dependencyVersionMatch(mirror_result, type)) { qDebug() << "conflicts package installed: " << arch << p->name() << p->architecture() << p->multiArchTypeString() << mirror_version << conflict_version; return ConflictResult::err(name); } } } return ConflictResult::ok(QString()); } int PackagesManager::packageInstallStatus(const int index) { if (m_packageInstallStatus.contains(index)) return m_packageInstallStatus[index]; const QString packageName = m_preparedPackages[index]->packageName(); const QString packageArch = m_preparedPackages[index]->architecture(); Backend *b = m_backendFuture.result(); Package *p = b->package(packageName + ":" + packageArch); int ret = DebListModel::NotInstalled; do { if (!p) break; const QString installedVersion = p->installedVersion(); if (installedVersion.isEmpty()) break; const QString packageVersion = m_preparedPackages[index]->version(); const int result = Package::compareVersion(packageVersion, installedVersion); if (result == 0) ret = DebListModel::InstalledSameVersion; else if (result < 0) ret = DebListModel::InstalledLaterVersion; else ret = DebListModel::InstalledEarlierVersion; } while (false); m_packageInstallStatus.insert(index, ret); return ret; } PackageDependsStatus PackagesManager::packageDependsStatus(const int index) { if (m_packageDependsStatus.contains(index)) return m_packageDependsStatus[index]; if (isArchError(index)) return PackageDependsStatus::_break(QString()); DebFile *deb = m_preparedPackages[index]; const QString architecture = deb->architecture(); PackageDependsStatus ret = PackageDependsStatus::ok(); // conflicts const ConflictResult debConflitsResult = isConflictSatisfy(architecture, deb->conflicts()); if (!debConflitsResult.is_ok()) { qDebug() << "depends break because conflict" << deb->packageName(); ret.package = debConflitsResult.unwrap(); ret.status = DebListModel::DependsBreak; } else { const ConflictResult localConflictsResult = isInstalledConflict(deb->packageName(), deb->version(), architecture); if (!localConflictsResult.is_ok()) { qDebug() << "depends break because conflict with local package" << deb->packageName(); ret.package = localConflictsResult.unwrap(); ret.status = DebListModel::DependsBreak; } else { qDebug() << "depends:"; qDebug() << "Check for package" << deb->packageName(); QSet choose_set; choose_set << deb->packageName(); ret = checkDependsPackageStatus(choose_set, deb->architecture(), deb->depends()); } } if (ret.isBreak()) Q_ASSERT(!ret.package.isEmpty()); m_packageDependsStatus[index] = ret; qDebug() << "Check finished for package" << deb->packageName() << ret.status; if (ret.status == DebListModel::DependsAvailable) { const auto list = packageAvailableDepends(index); qDebug() << "available depends:" << list.size() << list; } return ret; } const QString PackagesManager::packageInstalledVersion(const int index) { Q_ASSERT(m_packageInstallStatus.contains(index)); Q_ASSERT(m_packageInstallStatus[index] == DebListModel::InstalledEarlierVersion || m_packageInstallStatus[index] == DebListModel::InstalledLaterVersion); Backend *b = m_backendFuture.result(); Package *p = b->package(m_preparedPackages[index]->packageName()); return p->installedVersion(); } const QStringList PackagesManager::packageAvailableDepends(const int index) { Q_ASSERT(m_packageDependsStatus.contains(index)); Q_ASSERT(m_packageDependsStatus[index].isAvailable()); DebFile *deb = m_preparedPackages[index]; QSet choose_set; const QString debArch = deb->architecture(); const auto &depends = deb->depends(); packageCandidateChoose(choose_set, debArch, depends); // TODO: check upgrade from conflicts return choose_set.toList(); } void PackagesManager::packageCandidateChoose(QSet &choosed_set, const QString &debArch, const QList &dependsList) { for (auto const &candidate_list : dependsList) packageCandidateChoose(choosed_set, debArch, candidate_list); } void PackagesManager::packageCandidateChoose(QSet &choosed_set, const QString &debArch, const DependencyItem &candidateList) { bool choosed = false; for (const auto &info : candidateList) { Package *dep = packageWithArch(info.packageName(), debArch, info.multiArchAnnotation()); if (!dep) continue; const auto choosed_name = dep->name() + resolvMultiArchAnnotation(QString(), dep->architecture()); if (choosed_set.contains(choosed_name)) { choosed = true; break; } // TODO: upgrade? if (!dep->installedVersion().isEmpty()) return; if (!isConflictSatisfy(debArch, dep->conflicts()).is_ok()) { qDebug() << "conflict error in choose candidate" << dep->name(); continue; } // pass if break QSet set = choosed_set; set << choosed_name; const auto stat = checkDependsPackageStatus(set, dep->architecture(), dep->depends()); if (stat.isBreak()) { qDebug() << "depends error in choose candidate" << dep->name(); continue; } choosed = true; choosed_set << choosed_name; packageCandidateChoose(choosed_set, debArch, dep->depends()); break; } Q_ASSERT(choosed); } const QStringList PackagesManager::packageReverseDependsList(const QString &packageName, const QString &sysArch) { Package *p = packageWithArch(packageName, sysArch); Q_ASSERT(p); QSet ret { packageName }; QQueue testQueue; for (const auto &item : p->requiredByList().toSet()) testQueue.append(item); while (!testQueue.isEmpty()) { const auto item = testQueue.first(); testQueue.pop_front(); if (ret.contains(item)) continue; Package *p = packageWithArch(item, sysArch); if (!p || !p->isInstalled()) continue; if (p->recommendsList().contains(packageName)) continue; ret << item; // append new reqiure list for (const auto &r : p->requiredByList()) { if (ret.contains(r) || testQueue.contains(r)) continue; testQueue.append(r); } } // remove self ret.remove(packageName); return ret.toList(); } void PackagesManager::reset() { m_preparedPackages.clear(); m_packageInstallStatus.clear(); m_packageDependsStatus.clear(); m_appendedPackagesMd5.clear(); m_backendFuture.result()->reloadCache(); } void PackagesManager::resetPackageDependsStatus(const int index) { if (!m_packageDependsStatus.contains(index)) return; // reload backend cache m_backendFuture.result()->reloadCache(); m_packageDependsStatus.remove(index); } void PackagesManager::removePackage(const int index) { DebFile *deb = m_preparedPackages[index]; const auto md5 = deb->md5Sum(); m_appendedPackagesMd5.remove(md5); m_preparedPackages.removeAt(index); m_packageInstallStatus.clear(); m_packageDependsStatus.clear(); } void PackagesManager::appendPackage(DebFile *debPackage) { const auto md5 = debPackage->md5Sum(); if (m_appendedPackagesMd5.contains(md5)) return; m_preparedPackages << debPackage; m_appendedPackagesMd5 << md5; } const PackageDependsStatus PackagesManager::checkDependsPackageStatus(QSet &choosed_set, const QString &architecture, const QList &depends) { PackageDependsStatus ret = PackageDependsStatus::ok(); for (const auto &candicate_list : depends) { const auto r = checkDependsPackageStatus(choosed_set, architecture, candicate_list); ret.maxEq(r); if (ret.isBreak()) break; } return ret; } const PackageDependsStatus PackagesManager::checkDependsPackageStatus(QSet &choosed_set, const QString &architecture, const DependencyItem &candicate) { PackageDependsStatus ret = PackageDependsStatus::_break(QString()); for (const auto &info : candicate) { const auto r = checkDependsPackageStatus(choosed_set, architecture, info); ret.minEq(r); if (!ret.isBreak()) break; } return ret; } const PackageDependsStatus PackagesManager::checkDependsPackageStatus(QSet &choosed_set, const QString &architecture, const DependencyInfo &dependencyInfo) { const QString package_name = dependencyInfo.packageName(); Package *p = packageWithArch(package_name, architecture, dependencyInfo.multiArchAnnotation()); if (!p) { qDebug() << "depends break because package" << package_name << "not available"; return PackageDependsStatus::_break(package_name); } qDebug() << DependencyInfo::typeName(dependencyInfo.dependencyType()) << package_name << p->architecture() << relationName(dependencyInfo.relationType()) << dependencyInfo.packageVersion(); // if (dependencyInfo.packageVersion().isEmpty()) // return PackageDependsStatus::ok(); const RelationType relation = dependencyInfo.relationType(); const QString &installedVersion = p->installedVersion(); if (!installedVersion.isEmpty()) { const int result = Package::compareVersion(installedVersion, dependencyInfo.packageVersion()); if (dependencyVersionMatch(result, relation)) return PackageDependsStatus::ok(); else { const QString &mirror_version = p->availableVersion(); if (mirror_version != installedVersion) { const auto mirror_result = Package::compareVersion(mirror_version, dependencyInfo.packageVersion()); if (dependencyVersionMatch(mirror_result, relation)) { qDebug() << "availble by upgrade package" << p->name() << p->architecture() << "from" << installedVersion << "to" << mirror_version; return PackageDependsStatus::available(); } } qDebug() << "depends break by" << p->name() << p->architecture() << dependencyInfo.packageVersion(); qDebug() << "installed version not match" << installedVersion; return PackageDependsStatus::_break(p->name()); } } else { const int result = Package::compareVersion(p->version(), dependencyInfo.packageVersion()); if (!dependencyVersionMatch(result, relation)) { qDebug() << "depends break by" << p->name() << p->architecture() << dependencyInfo.packageVersion(); qDebug() << "available version not match" << p->version(); return PackageDependsStatus::_break(p->name()); } // is that already choosed? if (choosed_set.contains(p->name())) return PackageDependsStatus::ok(); // check arch conflicts if (p->multiArchType() == MultiArchSame) { Backend *b = backend(); for (const auto &arch : b->architectures()) { if (arch == p->architecture()) continue; Package *tp = b->package(p->name() + ":" + arch); if (tp && tp->isInstalled()) { qDebug() << "multi arch installed: " << p->name() << p->version() << p->architecture() << "with" << tp->name() << tp->version() << tp->architecture(); return PackageDependsStatus::_break(p->name() + ":" + p->architecture()); } } } // let's check conflicts if (!isConflictSatisfy(architecture, p).is_ok()) { qDebug() << "depends break because conflict, ready to find providers" << p->name(); Backend *b = m_backendFuture.result(); for (auto *ap : b->availablePackages()) { if (!ap->providesList().contains(p->name())) continue; // is that already provide by another package? if (ap->isInstalled()) { qDebug() << "find a exist provider: " << ap->name(); return PackageDependsStatus::ok(); } // provider is ok, switch to provider. if (isConflictSatisfy(architecture, ap).is_ok()) { qDebug() << "switch to depends a new provider: " << ap->name(); choosed_set << ap->name(); return PackageDependsStatus::ok(); } } qDebug() << "providers not found, still break: " << p->name(); return PackageDependsStatus::_break(p->name()); } // now, package dependencies status is available or break, // time to check depends' dependencies, but first, we need // to add this package to choose list choosed_set << p->name(); qDebug() << "Check indirect dependencies for package" << p->name(); const auto r = checkDependsPackageStatus(choosed_set, p->architecture(), p->depends()); if (r.isBreak()) { choosed_set.remove(p->name()); qDebug() << "depends break by direct depends" << p->name() << p->architecture() << r.package; return PackageDependsStatus::_break(p->name()); } // const auto &depends = p->depends(); // for (auto const &item : depends) // { // PackageDependsStatus rs = PackageDependsStatus::_break(QString()); // for (auto const &info : item) // { // const QString arch = resolvMultiArchAnnotation(info.multiArchAnnotation(), p->architecture(), p->multiArchType()); // const auto r = checkDependsPackageStatus(choosed_set, arch, info); // rs.minEq(r); // } // if (rs.isBreak()) // { // // we are break, remove self // choosed_set.remove(p->name()); // qDebug() << "depends break by direct depends" << p->name() << p->architecture() << dependencyInfo.packageVersion(); // return PackageDependsStatus::_break(p->name()); // } // } qDebug() << "Check finshed for package" << p->name(); return PackageDependsStatus::available(); } } Package *PackagesManager::packageWithArch(const QString &packageName, const QString &sysArch, const QString &annotation) { qDebug() << "package with arch" << packageName << sysArch << annotation; Backend *b = m_backendFuture.result(); Package *p = b->package(packageName + resolvMultiArchAnnotation(annotation, sysArch)); do { if (!p) p = b->package(packageName); if (!p) break; const QString arch = resolvMultiArchAnnotation(annotation, sysArch, p->multiArchType()); // if (!arch.isEmpty()) // reset to check foreign arch p = b->package(packageName + arch); } while(false); if (p) return p; qDebug() << "check virtual package providers for package" << packageName << sysArch << annotation; // check virtual package providers for (auto *ap : b->availablePackages()) if (ap->name() != packageName && ap->providesList().contains(packageName)) return packageWithArch(ap->name(), sysArch, annotation); return nullptr; } PackageDependsStatus PackageDependsStatus::ok() { return { DebListModel::DependsOk, QString() }; } PackageDependsStatus PackageDependsStatus::available() { return { DebListModel::DependsAvailable, QString() }; } PackageDependsStatus PackageDependsStatus::_break(const QString &package) { return { DebListModel::DependsBreak, package }; } PackageDependsStatus::PackageDependsStatus() : PackageDependsStatus(DebListModel::DependsOk, QString()) { } PackageDependsStatus::PackageDependsStatus(const int status, const QString &package) : status(status), package(package) { } PackageDependsStatus PackageDependsStatus::operator =(const PackageDependsStatus &other) { status = other.status; package = other.package; return *this; } PackageDependsStatus PackageDependsStatus::max(const PackageDependsStatus &other) { if (other.status > status) *this = other; return *this; } PackageDependsStatus PackageDependsStatus::maxEq(const PackageDependsStatus &other) { if (other.status >= status) *this = other; return *this; } PackageDependsStatus PackageDependsStatus::min(const PackageDependsStatus &other) { if (other.status < status) *this = other; return *this; } PackageDependsStatus PackageDependsStatus::minEq(const PackageDependsStatus &other) { if (other.status <= status) *this = other; return *this; } bool PackageDependsStatus::isBreak() const { return status == DebListModel::DependsBreak; } bool PackageDependsStatus::isAvailable() const { return status == DebListModel::DependsAvailable; } deepin-deb-installer-1.2.4/packagesmanager.h000066400000000000000000000100651325164132300207710ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef PACKAGESMANAGER_H #define PACKAGESMANAGER_H #include "result.h" #include #include #include #include typedef Result ConflictResult; class PackageDependsStatus { public: static PackageDependsStatus ok(); static PackageDependsStatus available(); static PackageDependsStatus _break(const QString &package); PackageDependsStatus(); PackageDependsStatus(const int status, const QString &package); PackageDependsStatus operator =(const PackageDependsStatus &other); PackageDependsStatus max(const PackageDependsStatus &other); PackageDependsStatus maxEq(const PackageDependsStatus &other); PackageDependsStatus min(const PackageDependsStatus &other); PackageDependsStatus minEq(const PackageDependsStatus &other); bool isBreak() const; bool isAvailable() const; public: int status; QString package; }; class DebListModel; class PackagesManager : public QObject { Q_OBJECT friend class DebListModel; public: explicit PackagesManager(QObject *parent = 0); bool isBackendReady(); bool isArchError(const int idx); const ConflictResult packageConflictStat(const int index); const ConflictResult isConflictSatisfy(const QString &arch, QApt::Package *package); const ConflictResult isInstalledConflict(const QString &packageName, const QString &packageVersion, const QString &packageArch); const ConflictResult isConflictSatisfy(const QString &arch, const QList &conflicts); int packageInstallStatus(const int index); PackageDependsStatus packageDependsStatus(const int index); const QString packageInstalledVersion(const int index); const QStringList packageAvailableDepends(const int index); void packageCandidateChoose(QSet &choosed_set, const QString &debArch, const QList &dependsList); void packageCandidateChoose(QSet &choosed_set, const QString &debArch, const QApt::DependencyItem &candidateItem); const QStringList packageReverseDependsList(const QString &packageName, const QString &sysArch); void reset(); void resetPackageDependsStatus(const int index); void removePackage(const int index); void appendPackage(QApt::DebFile *debPackage); QApt::DebFile * const package(const int index) const { return m_preparedPackages[index]; } QApt::Backend * const backend() const { return m_backendFuture.result(); } private: const PackageDependsStatus checkDependsPackageStatus(QSet &choosed_set,const QString &architecture, const QList &depends); const PackageDependsStatus checkDependsPackageStatus(QSet &choosed_set,const QString &architecture, const QApt::DependencyItem &candicate); const PackageDependsStatus checkDependsPackageStatus(QSet &choosed_set,const QString &architecture, const QApt::DependencyInfo &dependencyInfo); QApt::Package * packageWithArch(const QString &packageName, const QString &sysArch, const QString &annotation = QString()); private: QFuture m_backendFuture; QList m_preparedPackages; QHash m_packageInstallStatus; QHash m_packageDependsStatus; QSet m_appendedPackagesMd5; }; #endif // PACKAGESMANAGER_H deepin-deb-installer-1.2.4/resources/000077500000000000000000000000001325164132300175175ustar00rootroot00000000000000deepin-deb-installer-1.2.4/resources/images/000077500000000000000000000000001325164132300207645ustar00rootroot00000000000000deepin-deb-installer-1.2.4/resources/images/active_tab_close_hover.svg000066400000000000000000000026761325164132300262110ustar00rootroot00000000000000 active_tab_close_hover Created with Sketch. deepin-deb-installer-1.2.4/resources/images/active_tab_close_normal.svg000066400000000000000000000030551325164132300263460ustar00rootroot00000000000000 active_tab_close_normal Created with Sketch. deepin-deb-installer-1.2.4/resources/images/active_tab_close_press.svg000066400000000000000000000026261325164132300262150ustar00rootroot00000000000000 active_tab_close_press Created with Sketch. deepin-deb-installer-1.2.4/resources/images/arrow_down.svg000066400000000000000000000014641325164132300236730ustar00rootroot00000000000000 下箭头 Created with Sketch. deepin-deb-installer-1.2.4/resources/images/arrow_up.svg000066400000000000000000000014471325164132300233510ustar00rootroot00000000000000 上箭头 Created with Sketch. deepin-deb-installer-1.2.4/resources/images/deepin-deb-installer-128px.svg000066400000000000000000001117471325164132300263670ustar00rootroot00000000000000 软件包安装器-128px Created with Sketch. deepin-deb-installer-1.2.4/resources/images/deepin-deb-installer-16px.svg000066400000000000000000000324501325164132300262740ustar00rootroot00000000000000 软件包安装器-16px Created with Sketch. deepin-deb-installer-1.2.4/resources/images/deepin-deb-installer-24px.svg000066400000000000000000000343141325164132300262740ustar00rootroot00000000000000 软件包安装器-24px Created with Sketch. deepin-deb-installer-1.2.4/resources/images/deepin-deb-installer-256px.svg000066400000000000000000001720761325164132300263730ustar00rootroot00000000000000 软件包安装器-256px Created with Sketch. deepin-deb-installer-1.2.4/resources/images/deepin-deb-installer-32px.svg000066400000000000000000000344421325164132300262750ustar00rootroot00000000000000 软件包安装器-32px Created with Sketch. deepin-deb-installer-1.2.4/resources/images/deepin-deb-installer-48px.svg000066400000000000000000000353431325164132300263050ustar00rootroot00000000000000 软件包安装器-48px Created with Sketch. deepin-deb-installer-1.2.4/resources/images/deepin-deb-installer-64px.svg000066400000000000000000000552001325164132300262750ustar00rootroot00000000000000 软件包安装器-64px Created with Sketch. deepin-deb-installer-1.2.4/resources/images/deepin-deb-installer-96px.svg000066400000000000000000001061141325164132300263030ustar00rootroot00000000000000 软件包安装器-96px Created with Sketch. deepin-deb-installer-1.2.4/resources/images/icon.svg000066400000000000000000002667461325164132300224620ustar00rootroot00000000000000 主图标 Created with Sketch. deepin-deb-installer-1.2.4/resources/images/split_line.svg000066400000000000000000000012471325164132300236530ustar00rootroot00000000000000 split_line Created with Sketch. deepin-deb-installer-1.2.4/resources/resources.qrc000066400000000000000000000006031325164132300222370ustar00rootroot00000000000000 images/active_tab_close_hover.svg images/active_tab_close_normal.svg images/active_tab_close_press.svg images/arrow_down.svg images/arrow_up.svg images/icon.svg images/split_line.svg deepin-deb-installer-1.2.4/result.h000066400000000000000000000026271325164132300172030ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef RESULT_H #define RESULT_H template class Result { public: static Result ok(const T &value); static Result err(const T &value); Result(const bool stat, const T &value); bool is_ok() const { return m_ok; } T unwrap() const { return m_value; } private: bool m_ok; T m_value; }; template Result Result::ok(const T &value) { return { true, value }; } template Result Result::err(const T &value) { return { false, value }; } template Result::Result(const bool stat, const T &value) : m_ok(stat), m_value(value) { } #endif // RESULT_H deepin-deb-installer-1.2.4/singleinstallpage.cpp000066400000000000000000000322071325164132300217220ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "singleinstallpage.h" #include "deblistmodel.h" #include "workerprogress.h" #include "widgets/bluebutton.h" #include "widgets/graybutton.h" #include #include #include #include #include #include #include using QApt::DebFile; using QApt::Transaction; DWIDGET_USE_NAMESPACE const QString holdTextInRect(const QFontMetrics &fm, const QString &text, const QRect &rect) { const int textFlag = Qt::TextWordWrap | Qt::AlignLeft | Qt::AlignTop; if (rect.contains(fm.boundingRect(rect, textFlag, text))) return text; QString str(text + "..."); while (true) { if (str.size() < 4) break; QRect boundingRect = fm.boundingRect(rect, textFlag, str); if (rect.contains(boundingRect)) break; str.remove(str.size() - 4, 1); } return str; } SingleInstallPage::SingleInstallPage(DebListModel *model, QWidget *parent) : QWidget(parent), m_operate(Install), m_workerStarted(false), m_packagesModel(model), m_itemInfoWidget(new QWidget), m_packageIcon(new QLabel), m_packageName(new QLabel), m_packageVersion(new QLabel), m_packageDescription(new QLabel), m_tipsLabel(new QLabel), m_progress(new WorkerProgress), m_workerInfomation(new QTextEdit), m_strengthWidget(new QWidget), m_infoControlButton(new InfoControlButton(tr("Display details"), tr("Collapse"))), m_installButton(new BlueButton), m_uninstallButton(new GrayButton), m_reinstallButton(new GrayButton), m_confirmButton(new GrayButton), m_backButton(new GrayButton), m_doneButton(new BlueButton) { m_packageIcon->setText("icon"); m_packageIcon->setFixedSize(64, 64); m_packageName->setAlignment(Qt::AlignBottom | Qt::AlignLeft); m_packageVersion->setAlignment(Qt::AlignTop | Qt::AlignLeft); m_tipsLabel->setAlignment(Qt::AlignCenter); m_tipsLabel->setStyleSheet("QLabel {" "color: #ff5a5a;" "}"); m_progress->setVisible(false); m_infoControlButton->setVisible(false); m_workerInfomation->setReadOnly(true); m_workerInfomation->setVisible(false); m_workerInfomation->setAcceptDrops(false); m_workerInfomation->setFixedHeight(210); m_workerInfomation->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); m_workerInfomation->setStyleSheet("QTextEdit {" "color: #609dc9;" "border: 1px solid #eee;" "margin: 6px 0 0px 0;" "}"); m_installButton->setText(tr("Install")); m_installButton->setVisible(false); m_uninstallButton->setText(tr("Remove")); m_uninstallButton->setVisible(false); m_reinstallButton->setText(tr("Reinstall")); m_reinstallButton->setVisible(false); m_confirmButton->setText(tr("OK")); m_confirmButton->setVisible(false); m_backButton->setText(tr("Back")); m_backButton->setVisible(false); m_doneButton->setText(tr("Done")); m_doneButton->setVisible(false); m_packageDescription->setWordWrap(true); m_packageDescription->setFixedHeight(50); m_packageDescription->setFixedWidth(320); m_packageDescription->setAlignment(Qt::AlignLeft | Qt::AlignTop); QLabel *packageName = new QLabel; packageName->setText(tr("Name: ")); packageName->setAlignment(Qt::AlignBottom | Qt::AlignLeft); packageName->setStyleSheet("QLabel {" "color: #797979;" "}"); QLabel *packageVersion = new QLabel; packageVersion->setText(tr("Version: ")); packageVersion->setAlignment(Qt::AlignTop | Qt::AlignLeft); packageVersion->setStyleSheet("QLabel {" "color: #797979;" "}"); QGridLayout *itemInfoLayout = new QGridLayout; itemInfoLayout->addWidget(packageName, 0, 0); itemInfoLayout->addWidget(m_packageName, 0, 1); itemInfoLayout->addWidget(packageVersion, 1, 0); itemInfoLayout->addWidget(m_packageVersion, 1, 1); itemInfoLayout->setSpacing(0); itemInfoLayout->setVerticalSpacing(10); itemInfoLayout->setMargin(0); QHBoxLayout *itemBlockLayout = new QHBoxLayout; itemBlockLayout->addStretch(); itemBlockLayout->addWidget(m_packageIcon); itemBlockLayout->addLayout(itemInfoLayout); itemBlockLayout->addStretch(); itemBlockLayout->setSpacing(10); itemBlockLayout->setContentsMargins(0, 0, 0, 0); QHBoxLayout *btnsLayout = new QHBoxLayout; btnsLayout->addStretch(); btnsLayout->addWidget(m_installButton); btnsLayout->addWidget(m_uninstallButton); btnsLayout->addWidget(m_reinstallButton); btnsLayout->addWidget(m_backButton); btnsLayout->addWidget(m_confirmButton); btnsLayout->addWidget(m_doneButton); btnsLayout->addStretch(); btnsLayout->setSpacing(30); btnsLayout->setContentsMargins(0, 0, 0, 0); QVBoxLayout *itemLayout = new QVBoxLayout; itemLayout->addSpacing(45); itemLayout->addLayout(itemBlockLayout); itemLayout->addSpacing(20); itemLayout->addWidget(m_packageDescription); itemLayout->addStretch(); itemLayout->setMargin(0); itemLayout->setSpacing(0); m_itemInfoWidget->setLayout(itemLayout); m_itemInfoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_itemInfoWidget->setVisible(false); m_strengthWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_strengthWidget->setVisible(false); QVBoxLayout *centralLayout = new QVBoxLayout; centralLayout->addWidget(m_itemInfoWidget); centralLayout->setAlignment(m_itemInfoWidget, Qt::AlignHCenter); centralLayout->addWidget(m_infoControlButton); centralLayout->setAlignment(m_infoControlButton, Qt::AlignHCenter); centralLayout->addWidget(m_workerInfomation); centralLayout->addWidget(m_strengthWidget); centralLayout->addWidget(m_tipsLabel); centralLayout->addWidget(m_progress); centralLayout->setAlignment(m_progress, Qt::AlignHCenter); centralLayout->addSpacing(8); centralLayout->addLayout(btnsLayout); centralLayout->setSpacing(0); centralLayout->setContentsMargins(20, 0, 20, 30); setLayout(centralLayout); connect(m_infoControlButton, &InfoControlButton::expand, this, &SingleInstallPage::showInfomation); connect(m_infoControlButton, &InfoControlButton::shrink, this, &SingleInstallPage::hideInfomation); connect(m_installButton, &QPushButton::clicked, this, &SingleInstallPage::install); connect(m_reinstallButton, &QPushButton::clicked, this, &SingleInstallPage::install); connect(m_uninstallButton, &QPushButton::clicked, this, &SingleInstallPage::requestUninstallConfirm); connect(m_backButton, &QPushButton::clicked, this, &SingleInstallPage::back); connect(m_confirmButton, &QPushButton::clicked, qApp, &QApplication::quit); connect(m_doneButton, &QPushButton::clicked, qApp, &QApplication::quit); connect(model, &DebListModel::appendOutputInfo, this, &SingleInstallPage::onOutputAvailable); connect(model, &DebListModel::transactionProgressChanged, this, &SingleInstallPage::onWorkerProgressChanged); if (m_packagesModel->isReady()) setPackageInfo(); else QTimer::singleShot(120, this, &SingleInstallPage::setPackageInfo); } void SingleInstallPage::install() { m_operate = Install; m_packagesModel->installAll(); } void SingleInstallPage::uninstallCurrentPackage() { m_operate = Uninstall; m_packagesModel->uninstallPackage(0); } void SingleInstallPage::showInfomation() { m_workerInfomation->setVisible(true); m_strengthWidget->setVisible(true); m_itemInfoWidget->setVisible(false); } void SingleInstallPage::hideInfomation() { m_workerInfomation->setVisible(false); m_strengthWidget->setVisible(false); m_itemInfoWidget->setVisible(true); } void SingleInstallPage::showInfo() { m_infoControlButton->setVisible(true); m_progress->setVisible(true); m_progress->setValue(0); m_tipsLabel->clear(); m_installButton->setVisible(false); m_reinstallButton->setVisible(false); m_uninstallButton->setVisible(false); m_confirmButton->setVisible(false); m_doneButton->setVisible(false); m_backButton->setVisible(false); } void SingleInstallPage::onOutputAvailable(const QString &output) { m_workerInfomation->append(output.trimmed()); // pump progress if (m_progress->value() < 90) m_progress->setValue(m_progress->value() + 10); if (!m_workerStarted) { m_workerStarted = true; showInfo(); } } void SingleInstallPage::onWorkerFinished() { m_progress->setVisible(false); m_uninstallButton->setVisible(false); m_reinstallButton->setVisible(false); m_backButton->setVisible(true); const QModelIndex index = m_packagesModel->first(); const int stat = index.data(DebListModel::PackageOperateStatusRole).toInt(); if (stat == DebListModel::Success) { m_doneButton->setVisible(true); m_doneButton->setFocus(); if (m_operate == Install) m_tipsLabel->setText(tr("Installed successfully")); else m_tipsLabel->setText(tr("Uninstalled successfully")); m_tipsLabel->setStyleSheet("QLabel {" "color: #47790c;" "}"); } else if (stat == DebListModel::Failed) { m_confirmButton->setVisible(true); m_confirmButton->setFocus(); if (m_operate == Install) m_tipsLabel->setText(index.data(DebListModel::PackageFailReasonRole).toString()); else m_tipsLabel->setText(tr("Uninstall Failed")); } else { Q_UNREACHABLE(); } } void SingleInstallPage::onWorkerProgressChanged(const int progress) { if (progress < m_progress->value()) return; m_progress->setValue(progress); if (progress == m_progress->maximum()) QTimer::singleShot(100, this, &SingleInstallPage::onWorkerFinished); } void SingleInstallPage::setPackageInfo() { qApp->processEvents(); DebFile *package = m_packagesModel->preparedPackages().first(); const QIcon icon = QIcon::fromTheme("application-vnd.debian.binary-package", QIcon::fromTheme("debian-swirl")); const QPixmap iconPix = icon.pixmap(m_packageIcon->size()); m_itemInfoWidget->setVisible(true); m_packageIcon->setPixmap(iconPix); m_packageName->setText(package->packageName()); m_packageVersion->setText(package->version()); // set package description // const QRegularExpression multiLine("\n+", QRegularExpression::MultilineOption); // const QString description = package->longDescription().replace(multiLine, "\n"); const QString description = package->longDescription(); const QRect boundingRect = QRect(0, 0, m_packageDescription->width(), m_packageDescription->maximumHeight()); const QFontMetrics fm(m_packageDescription->font()); m_packageDescription->setText(holdTextInRect(fm, description, boundingRect)); // package install status const QModelIndex index = m_packagesModel->index(0); const int installStat = index.data(DebListModel::PackageVersionStatusRole).toInt(); const bool installed = installStat != DebListModel::NotInstalled; const bool installedSameVersion = installStat == DebListModel::InstalledSameVersion; m_installButton->setVisible(!installed); m_uninstallButton->setVisible(installed); m_reinstallButton->setVisible(installed); m_confirmButton->setVisible(false); m_doneButton->setVisible(false); m_backButton->setVisible(false); if (installed) { if (installedSameVersion) m_tipsLabel->setText(tr("Same version installed")); else m_tipsLabel->setText(tr("Other version installed: %1").arg(index.data(DebListModel::PackageInstalledVersionRole).toString())); return; } // package depends status const int dependsStat = index.data(DebListModel::PackageDependsStatusRole).toInt(); if (dependsStat == DebListModel::DependsBreak) { m_tipsLabel->setText(index.data(DebListModel::PackageFailReasonRole).toString()); m_installButton->setVisible(false); m_reinstallButton->setVisible(false); m_confirmButton->setVisible(true); m_backButton->setVisible(true); } } deepin-deb-installer-1.2.4/singleinstallpage.h000066400000000000000000000043721325164132300213710ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef SINGLEINSTALLPAGE_H #define SINGLEINSTALLPAGE_H #include "infocontrolbutton.h" #include #include #include #include #include #include #include class DebListModel; class SingleInstallPage : public QWidget { Q_OBJECT public: explicit SingleInstallPage(DebListModel *model, QWidget *parent = 0); signals: void back() const; void requestUninstallConfirm() const; public slots: void uninstallCurrentPackage(); private: enum Operate { Install, Uninstall, }; private: void setPackageInfo(); private slots: void install(); void showInfomation(); void hideInfomation(); void showInfo(); void onOutputAvailable(const QString &output); void onWorkerFinished(); void onWorkerProgressChanged(const int progress); private: int m_operate; bool m_workerStarted; DebListModel *m_packagesModel; QWidget *m_itemInfoWidget; QLabel *m_packageIcon; QLabel *m_packageName; QLabel *m_packageVersion; QLabel *m_packageDescription; QLabel *m_tipsLabel; QProgressBar *m_progress; QTextEdit *m_workerInfomation; QWidget *m_strengthWidget; InfoControlButton *m_infoControlButton; QPushButton *m_installButton; QPushButton *m_uninstallButton; QPushButton *m_reinstallButton; QPushButton *m_confirmButton; QPushButton *m_backButton; QPushButton *m_doneButton; }; #endif // SINGLEINSTALLPAGE_H deepin-deb-installer-1.2.4/translate_generation.sh000077500000000000000000000003501325164132300222520ustar00rootroot00000000000000#!/bin/bash # this file is used to auto-generate .qm file from .ts file. # author: shibowen at linuxdeepin.com ts_list=(`ls translations/*.ts`) for ts in "${ts_list[@]}" do printf "\nprocess ${ts}\n" lrelease "${ts}" done deepin-deb-installer-1.2.4/translations/000077500000000000000000000000001325164132300202265ustar00rootroot00000000000000deepin-deb-installer-1.2.4/translations/deepin-deb-installer.ts000066400000000000000000000210701325164132300245650ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Bulk Install DebListModel Installation failed, please check your network connection Installation failed, please check updates in Control Center Installation failed, insufficient disk space Installation Failed Broken Dependencies: %1 Unmatched package architecture FileChooseWidget Drag and drop file here Select File MultipleInstallPage Collapse Display details Install Done Back PackagesListDelegate Installing Installed Failed Same version installed Other version installed: %1 SingleInstallPage Collapse Display details Install Remove Reinstall OK Back Done Version: Installed successfully Uninstalled successfully Other version installed: %1 Uninstall Failed Name: Same version installed UninstallConfirmPage Display related packages Collapse Cancel Confirm Are you sure to uninstall %1? All dependencies will also be removed main Deepin Package Manager Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_am_ET.ts000066400000000000000000000224211325164132300256330ustar00rootroot00000000000000 DebInstaller Deepin Package Manager ዲፕኢን የ ጥቅል አስተዳዳሪ Bulk Install መግጠሚያ DebListModel Installation failed, please check your network connection መግጠም አልተቻለም: እባክዎን የ ኔትዎርክ ግንኙነት ይመርምሩ Installation failed, please check updates in Control Center መግጠም አልተቻለም: እባክዎን ማሻሻያውን በ መቆጣጠሪያ ማእከል ውስጥ ይመርምሩ Installation failed, insufficient disk space መግጠም አልተቻለም: በቂ ነፃ የ ዲስክ ቦታ የለም Installation Failed መግጠሙ አልተሳካም Broken Dependencies: %1 የ ተሰበሩ ጥገኞች: %1 Unmatched package architecture የ ማይመሳሰል ጥቅል ግንባታ FileChooseWidget Drag and drop file here ፋይል ይጎቱ እና እዚህ ይጣሉ Select File ፋይል ይምረጡ MultipleInstallPage Collapse ማሳነሻ Display details ዝርዝር ማሳያ Install መግጠሚያ Done Back ወደ ኋላ PackagesListDelegate Installing በ መግጠም ላይ Installed ተገጥሟል Failed ወድቋል Same version installed ተመሳሳይ እትም ተገጥሟል Other version installed: %1 ሌላ እትም ተገጥሟል: %1 SingleInstallPage Collapse ማሳነሻ Display details ዝርዝር ማሳያ Install መግጠሚያ Remove ማስወገጃ Reinstall እንደገና መግጠሚያ OK እሺ Back ወደ ኋላ Done Version: እትም: Installed successfully ተሳክቶ ተገጥሟል Uninstalled successfully ተሳክቶ ጠፍቷል Other version installed: %1 ሌላ እትም ተገጥሟል: %1 Uninstall Failed ማጥፋት አልተቻለም Name: ስም: Same version installed ተመሳሳይ እትም ተገጥሟል UninstallConfirmPage Display related packages የ ተዛመደ ጥቅል መግጠሚያ Collapse ማሳነሻ Cancel መሰረዣ Confirm ማረጋገጫ Are you sure to uninstall %1? All dependencies will also be removed እርስዎ በ እርግጥ ማጥፋት ይፈልጋሉ %1? ሁሉም ጥገኞች አብረው ይጠፋሉ main Deepin Package Manager ዲፕኢን የ ጥቅል አስተዳዳሪ Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. የ ዲፕኢን ጥቅል አስተዳዳሪ መተግበሪያ ነው: ተጠቃሚዎችን የሚረዳ ሶፍትዌር ለ መግጠም እና ለ ማስወገድ: ሶፍትዌር ለ መግጠም ይረዳል deepin-deb-installer-1.2.4/translations/deepin-deb-installer_ar.ts000066400000000000000000000220601325164132300252470ustar00rootroot00000000000000 DebInstaller Deepin Package Manager مدير حزم ديبين Bulk Install تثبيت جماعي DebListModel Installation failed, please check your network connection تعذر التثبيت، يرجى التحقق من الاتصال بالشبكة Installation failed, please check updates in Control Center تعذر التثبيت، يرجى التحقق من التحديثات في مركز التحكم Installation failed, insufficient disk space تعذر التثبيت، مساحة القرص غير كافية Installation Failed تعذر التثبيت Broken Dependencies: %1 الاعتماديات المعطوبة : %1 Unmatched package architecture معمارية الحزمة غير مطابقة FileChooseWidget Drag and drop file here قم بسحب وإفلات الملف هنا Select File تحديد ملف MultipleInstallPage Collapse طي Display details عرض التفاصيل Install تثبيت Done Back رجوع PackagesListDelegate Installing يتم التثبيت Installed مثبت Failed فشل Same version installed الإصدار نفسه مثبت Other version installed: %1 إصدار آخر مثبت : %1 SingleInstallPage Collapse طي Display details عرض التفاصيل Install تثبيت Remove إزالة Reinstall إعادة التثبيت OK موافق Back رجوع Done Version: الإصدار : Installed successfully تم التثبيت بنجاح Uninstalled successfully تم إلغاء التثبيت بنجاح Other version installed: %1 إصدار آخر مثبت : %1 Uninstall Failed فشل إزالة التثبيت Name: الاسم: Same version installed الإصدار نفسه مثبت UninstallConfirmPage Display related packages عرض الحزم المتعلقة Collapse طي Cancel إلغاء Confirm تأكيد Are you sure to uninstall %1? All dependencies will also be removed هل أنت متأكد من إزالة %1 ؟ كافة الاعتماديات ستحذف معاً main Deepin Package Manager مدير حزم ديبين Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. مدير حزم ديبين : تطبيق لمساعدة المستخدمين في تثبيت وإزالة البرمجيات المحلية مع دعم التثبيت الجماعي . deepin-deb-installer-1.2.4/translations/deepin-deb-installer_ast.ts000066400000000000000000000214551325164132300254430ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Xestor Deepin de paquetes Bulk Install Instalación masiva DebListModel Installation failed, please check your network connection Falló la instalación, comprueba la to conexón d'internet Installation failed, please check updates in Control Center Falló la instalación, comprueba los anovamientos nel Centru de control Installation failed, insufficient disk space Falló la instalación, espaciu insuficiente en discu Installation Failed Falló la instalación Broken Dependencies: %1 Dependencies rotes: %1 Unmatched package architecture Arquitectura de paquete que nun concasa FileChooseWidget Drag and drop file here Arrastra y suelta'l ficheru equí Select File Esbillar ficheru MultipleInstallPage Collapse Contrayer Display details Amosar detalles Install Instalar Done Back Atrás PackagesListDelegate Installing Instalando Installed Instalóse Failed Falló Same version installed Instalada la mesma versión Other version installed: %1 Instalada otra versión: %1 SingleInstallPage Collapse Contrayer Display details Amosar detalles Install Instalar Remove Desaniciar Reinstall Reinstalar OK Aceutar Back Atrás Done Version: Versión: Installed successfully Instalóse con ésitu Uninstalled successfully Desinstalóse con ésitu Other version installed: %1 Instalóse otra versión: %1 Uninstall Failed Falló la desinstalación Name: Nome: Same version installed Instalóse la mesma versión UninstallConfirmPage Display related packages Amosar los paquetes venceyaos Collapse Contrayer Cancel Encaboxar Confirm Confirmar Are you sure to uninstall %1? All dependencies will also be removed ¿De xuru que quies desinstalar %1? Tamién se desaniciarán toles dependencies main Deepin Package Manager Xestor Deepin de paquetes Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. El xestor Deepin de paquetes ye una aplicación p'ayudar a los usuarios a desaniciar sofware llocal, amás de sofitar instalación masiva deepin-deb-installer-1.2.4/translations/deepin-deb-installer_bg.ts000066400000000000000000000232611325164132300252410ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Deepin Мениджър на пакети Bulk Install Групова инсталация DebListModel Installation failed, please check your network connection Инсталацията е неуспешна, моля, проверете вашата връзка към мрежата Installation failed, please check updates in Control Center Инсталацията е неуспешна, моля, проверете за обновление в контролния център Installation failed, insufficient disk space Инсталацията е неуспешна, няма достатъчно място на диска Installation Failed Инсталацията е неуспешна Broken Dependencies: %1 Счупени зависимости: %1 Unmatched package architecture Неподходяща архитектура на пакета FileChooseWidget Drag and drop file here Издърпайте и поставете файла тук Select File Избор на файл MultipleInstallPage Collapse Сриване Display details Показване на подробности Install Инсталиране Done Back Назад PackagesListDelegate Installing Инсталиране Installed Инсталирано Failed Неуспешно Same version installed Същата версия е инсталирана Other version installed: %1 Инсталирана е друга версия: %1 SingleInstallPage Collapse Сриване Display details Показване на подробности Install Инсталиране Remove Премахване Reinstall Преинсталиране OK ОК Back Назад Done Version: Версия: Installed successfully Инсталирането е успешно Uninstalled successfully Деинсталирането е успешно Other version installed: %1 Инсталирана е друга версия: %1 Uninstall Failed Деинсталирането е неуспешно Name: Име: Same version installed Същата версия е инсталирана UninstallConfirmPage Display related packages Покажи свързаните пакети Collapse Сриване Cancel Отказ Confirm Потвърждение Are you sure to uninstall %1? All dependencies will also be removed Сигурен ли сте, че искате да деинсталирате %1? Всички зависимости също ще бъдат премахнати main Deepin Package Manager Deepin Инсталатор на пакети Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Deepin Инсталатор на пакети е приложение, което помага на потребителите да инсталират и премахват софтуер. Поддържа и групова инсталация. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_ca.ts000066400000000000000000000220051325164132300252270ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Gestor de paquets del Deepin Bulk Install Instal·lació en bloc DebListModel Installation failed, please check your network connection Ha fallat la instal·lació. Si us plau, comproveu la connexió de xarxa. Installation failed, please check updates in Control Center Ha fallat la instal·lació. Si us plau, comproveu les actualitzacions al Centre de control. Installation failed, insufficient disk space Ha fallat la instal·lació. Espai de disc insuficient. Installation Failed Ha fallat la instal·lació. Broken Dependencies: %1 Dependències trencades: %1 Unmatched package architecture L'arquitectura del paquet no coincideix. FileChooseWidget Drag and drop file here Arrossegeu el fitxer i deixeu-lo anar aquí. Select File Selecciona el fitxer MultipleInstallPage Collapse Replega Display details Mostra'n els detalls Install Instal·la Done Back Enrere PackagesListDelegate Installing S'instal·la Installed Instal·lat Failed Ha fallat Same version installed N'hi ha instal·lada la mateixa versió. Other version installed: %1 N'hi ha una altra versió instal·lada: %1 SingleInstallPage Collapse Replega Display details Mostra'n els detalls Install Instal·la Remove Elimina Reinstall Reinstal·la OK D'acord Back Enrere Done Version: Versió: Installed successfully Instal·lació correcta Uninstalled successfully Desinstal·lació correcta Other version installed: %1 N'hi ha una altra versió instal·lada: %1 Uninstall Failed Ha fallat la instal·lació. Name: Nom: Same version installed N'hi ha instal·lada la mateixa versió. UninstallConfirmPage Display related packages Mostra els paquets que s'hi relacionen. Collapse Replega Cancel Cancel·la Confirm Confirmeu-ho Are you sure to uninstall %1? All dependencies will also be removed Segur que voleu desinstal·lar %1? També se n'eliminaran totes les dependències. main Deepin Package Manager Gestor de paquets del Deepin Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. El Gestor de paquets del Deepin és una aplicació usada per ajudar els usuaris a instal·lar i eliminar programari local. Admet instal·lacions en bloc. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_cs.ts000066400000000000000000000215031325164132300252530ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Správce balíčků Bulk Install Hromadná instalace DebListModel Installation failed, please check your network connection Instalace selhala. Zkontrolujte, prosím, internetové připojení Installation failed, please check updates in Control Center Instalace selhala. Zkontrolujte, prosím, v ovládacím středisku aktualizace Installation failed, insufficient disk space Instalace selhala. Na disku není dost místa Installation Failed Instalace selhala Broken Dependencies: %1 Rozbité závislosti: %1 Unmatched package architecture Nehodící se architektura balíčku FileChooseWidget Drag and drop file here Táhněte soubor a upusťte jej zde Select File Vybrat soubor MultipleInstallPage Collapse Složit Display details Zobrazit podrobnosti Install Instalovat Done Back Zpět PackagesListDelegate Installing Instaluje se Installed Nainstalováno Failed Selhalo Same version installed Stejná verze již byla nainstalována Other version installed: %1 Je nainstalována jiná verze: %1 SingleInstallPage Collapse Složit Display details Zobrazit podrobnosti Install Instalovat Remove Odstranit Reinstall Nainstalovat znovu OK OK Back Zpět Done Version: Verze: Installed successfully Nainstalováno úspěšně Uninstalled successfully Odinstalováno úspěšně Other version installed: %1 Je nainstalována jiná verze: %1 Uninstall Failed Odinstalování selhalo Name: Název: Same version installed Nainstalována ta samá verze UninstallConfirmPage Display related packages Zobrazit související balíčky Collapse Složit Cancel Zrušit Confirm Potvrdit Are you sure to uninstall %1? All dependencies will also be removed Jste si jistý, že chcete odinstalovat %1? Budou odstraněny i všechny závislosti main Deepin Package Manager Správce balíčků Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Správce balíčků se používá k pomoci uživatelům instalovat a odebírat místní programové vybavení, podporuje hromadnou instalaci. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_da.ts000066400000000000000000000213561325164132300252400ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Deepin pakkehåndtering Bulk Install Masseinstallation DebListModel Installation failed, please check your network connection Installation mislykkedes, tjek venligst din netværksforbindelse Installation failed, please check updates in Control Center Installation mislykkedes, tjek venligst opdateringer i kontrolcenter Installation failed, insufficient disk space Installation mislykkedes, utilstrækkelig diskplads Installation Failed Installation mislykkedes Broken Dependencies: %1 Ødelagte afhængigheder: %1 Unmatched package architecture Ikke-matchet pakkearkitektur FileChooseWidget Drag and drop file here Træk-og-slip filer her Select File Vælg fil MultipleInstallPage Collapse Sammenfold Display details Vis detaljer Install Installer Done Back Tilbage PackagesListDelegate Installing Installerer Installed Installeret Failed Mislykkedes Same version installed Samme version installeret Other version installed: %1 Anden version installeret: %1 SingleInstallPage Collapse Sammenfold Display details Vis detaljer Install Installer Remove Fjern Reinstall Geninstaller OK OK Back Tilbage Done Version: Version: Installed successfully Installeret Uninstalled successfully Afinstalleret Other version installed: %1 Anden version installeret: %1 Uninstall Failed Afinstallation mislykkedes Name: Navn: Same version installed Samme version installeret UninstallConfirmPage Display related packages Vis relaterede pakker Collapse Sammenfold Cancel Annuller Confirm Bekræft Are you sure to uninstall %1? All dependencies will also be removed Er du sikker på, at du vil afinstallere %1? Alle afhængigheder vil også blive fjernet main Deepin Package Manager Deepin pakkehåndtering Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Deepin pakkehåndtering er et program som hjælper brugere med at installere og fjerne lokal software og som understøtter masseinstallation. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_de.ts000066400000000000000000000216521325164132300252430ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Deepin Paketverwaltung Bulk Install Installation mit Stapelverarbeitung DebListModel Installation failed, please check your network connection Installation fehlgeschlagen, bitte prüfen sie Ihre Internetverbindung Installation failed, please check updates in Control Center Installation fehlgeschlagen, bitte prüfen Sie in der Systemverwaltung auf Updates Installation failed, insufficient disk space Installation fehlgeschlagen, zu wenig Speicherplatz Installation Failed Installation fehlgeschlagen Broken Dependencies: %1 Fehlende Abhängigkeiten: %1 Unmatched package architecture Falsche Paket-Architektur FileChooseWidget Drag and drop file here Datei hier her ziehen und loslassen Select File Datei auswählen MultipleInstallPage Collapse Ausblenden Display details Details anzeigen Install Installieren Done Back Zurück PackagesListDelegate Installing Installiere Installed Installiert Failed Fehlgeschlagen Same version installed Gleiche Version bereits installiert Other version installed: %1 Andere Version bereits installiert: %1 SingleInstallPage Collapse Ausblenden Display details Details anzeigen Install Installieren Remove Entfernen Reinstall Neu installieren OK OK Back Zurück Done Version: Version: Installed successfully Erfolgreich installiert Uninstalled successfully Erfolgreich deinstalliert Other version installed: %1 Andere Version installiert: %1 Uninstall Failed Deinstallation fehlgeschlagen Name: Name: Same version installed Gleiche Version installiert UninstallConfirmPage Display related packages Dazugehörige Pakete anzeigen Collapse Ausblenden Cancel Abbrechen Confirm Bestätigen Are you sure to uninstall %1? All dependencies will also be removed Sind Sie sicher, dass Sie %1 deinstallieren möchten? Alle Abhängigkeiten werden ebenfalls deinstalliert main Deepin Package Manager Deepin Package Manager Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Deepin Package Manager ist eine Anwendung, die Benutzern beim installieren und entfernen von Softwarepaketen hilft und Installationen mit Stapelverarbeitung unterstützt. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_es.ts000066400000000000000000000214211325164132300252540ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Gestor de paquetes Deepin Bulk Install Instalación en lote DebListModel Installation failed, please check your network connection Error en la instalación, comprueba tu conexión de red Installation failed, please check updates in Control Center Error en la instalación: compruebe las actualizaciones en el Centro de Control Installation failed, insufficient disk space Error de instalación, espacio insuficiente en disco Installation Failed Instalación fallida Broken Dependencies: %1 Dependencias rotas: %1 Unmatched package architecture Difiere la arquitectura del paquete FileChooseWidget Drag and drop file here Arrastra y suelta aquí Select File Seleccionar archivo MultipleInstallPage Collapse Colapso Display details Mostrar detalles Install Instalar Done Hecho Back Atrás PackagesListDelegate Installing Instalando Installed Instalado Failed Ha fallado Same version installed Misma versión instalada Other version installed: %1 Otra versión instalada: %1 SingleInstallPage Collapse Colapso Display details Mostrar detalles Install Instalar Remove Remover Reinstall Reinstalar OK Aceptar Back Atrás Done Hecho Version: Versión: Installed successfully Instalación exitosa Uninstalled successfully Desinstalación exitosa Other version installed: %1 Otra versión instalada: %1 Uninstall Failed Desinstalación fallida Name: Nombre: Same version installed La misma versión está instalada UninstallConfirmPage Display related packages Mostrar paquetes relacionados Collapse Colapso Cancel Cancelar Confirm Confirmar Are you sure to uninstall %1? All dependencies will also be removed ¿Está seguro de desinstalar %1? Todas las dependencias también se eliminarán main Deepin Package Manager Gestor de paquetes Deepin Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. El Gestor de paquetes Deepin es una aplicación para ayudar a los usuarios a agregar y quitar software local, soporta instalación en lote. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_es_419.ts000066400000000000000000000214221325164132300256520ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Gestor de paquetes Deepin Bulk Install Instalación en lote DebListModel Installation failed, please check your network connection Error en la instalación, comprueba tu conexión de red Installation failed, please check updates in Control Center Error en la instalación: compruebe las actualizaciones en el Centro de Control Installation failed, insufficient disk space Error de instalación, espacio insuficiente en disco Installation Failed Instalación fallida Broken Dependencies: %1 Dependencias rotas: %1 Unmatched package architecture Difiere la arquitectura del paquete FileChooseWidget Drag and drop file here Arrastra y suelta aquí Select File Seleccionar archivo MultipleInstallPage Collapse Colapso Display details Mostrar detalles Install Instalar Done Back Volver PackagesListDelegate Installing Instalando Installed Instalado Failed Ha fallado Same version installed Misma versión instalada Other version installed: %1 Otra versión instalada: %1 SingleInstallPage Collapse Colapso Display details Mostrar detalles Install Instalar Remove Remover Reinstall Reinstalar OK Aceptar Back Volver Done Version: Versión: Installed successfully Instalación exitosa Uninstalled successfully Desinstalación exitosa Other version installed: %1 Otra versión instalada: %1 Uninstall Failed Desinstalación fallida Name: Nombre: Same version installed La misma versión está instalada UninstallConfirmPage Display related packages Mostrar paquetes relacionados Collapse Colapso Cancel Cancelar Confirm Confirmar Are you sure to uninstall %1? All dependencies will also be removed ¿Está seguro de desinstalar %1? Todas las dependencias también se eliminarán main Deepin Package Manager Gestor de paquetes Deepin Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Gestor de paquetes Deepin es una aplicación para ayudar a los usuarios a agregar y quitar software local, soporta instalación en lote. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_fr.ts000066400000000000000000000216661325164132300252670ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Gestionnaire de paquets Deepin Bulk Install Installation Multiple DebListModel Installation failed, please check your network connection Échec de l'installation, veuillez vérifier votre connexion réseau Installation failed, please check updates in Control Center Échec de l'installation, veuillez vérifier les mises à jour dans le Centre de contrôle Installation failed, insufficient disk space Échec de l'installation, espace disque insuffisant Installation Failed Échec de l'installation Broken Dependencies: %1 Dépendances cassées: : %1 Unmatched package architecture Architecture de paquet différente FileChooseWidget Drag and drop file here Glisser-déposer les fichiers ici Select File Sélectionner un fichier MultipleInstallPage Collapse Réduire Display details Afficher les détails Install Installer Done Back Précédent PackagesListDelegate Installing Installation Installed Installé Failed Échec Same version installed Version identique installée Other version installed: %1 Autre version installée : %1 SingleInstallPage Collapse Réduire Display details Afficher les détails Install Installer Remove Supprimer Reinstall Réinstaller OK OK Back Précédent Done Version: Version : Installed successfully Installé avec succès Uninstalled successfully Désinstallé avec succès Other version installed: %1 Autre version installée : %1 Uninstall Failed Échec de la désinstallation Name: Nom : Same version installed Version identique installée UninstallConfirmPage Display related packages Afficher les paquets associés Collapse Réduire Cancel Annuler Confirm Confirmer Are you sure to uninstall %1? All dependencies will also be removed Souhaitez-vous vraiment désinstaller %1 ? Toutes les dépendances seront également supprimées main Deepin Package Manager Gestionnaire de paquets Deepin Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Le Gestionnaire de Paquets de Deepin est une application pour aider les utilisateurs à gérer les logiciels installés, il supporte également l'installation multiple. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_gl_ES.ts000066400000000000000000000210171325164132300256370ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Xestor de paquetes Bulk Install Instalar en bloque DebListModel Installation failed, please check your network connection Fallo ao instalar, verifica a conexión de rede Installation failed, please check updates in Control Center Fallo ao instalar, verifica as actualizacións no Centro de Control Installation failed, insufficient disk space Fallo ao instalar, sen espazo abondo no disco Installation Failed Fallo ao instalar Broken Dependencies: %1 Dependencias rotas: %1 Unmatched package architecture A arquitectura do paquete non coincide FileChooseWidget Drag and drop file here Select File Seleccionar ficheiro MultipleInstallPage Collapse Contraer Display details Amosar detalles Install Instalar Done Back PackagesListDelegate Installing Instalando Installed Instalado Failed Fallo Same version installed Other version installed: %1 SingleInstallPage Collapse Contraer Display details Amosar detalles Install Instalar Remove Eliminar Reinstall Reinstalar OK Aceptar Back Done Version: Versión: Installed successfully Instalado con éxito Uninstalled successfully Desinstalado con éxito Other version installed: %1 Outra versión instalada: %1 Uninstall Failed Fallo ao desinstalar Name: Same version installed Mesma versión instalada UninstallConfirmPage Display related packages Amosar paquetes relacionados Collapse Contraer Cancel Cancelar Confirm Confirmar Are you sure to uninstall %1? All dependencies will also be removed Tes a certeza de querer desinstalar %1? Eliminaranse tódalas dependencias main Deepin Package Manager Xestor de paquetes Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_he.ts000066400000000000000000000214361325164132300252470ustar00rootroot00000000000000 DebInstaller Deepin Package Manager מנהל החבילות של Deepin Bulk Install התקנה קבוצתית DebListModel Installation failed, please check your network connection ההתקנה נכשלה, נא לבדוק את החיבור שלך לרשת Installation failed, please check updates in Control Center ההתקנה נכשלה, נא לבדוק אם יש עדכונים במרכז הבקרה Installation failed, insufficient disk space ההתקנה נכשלה, אין מספיק מקום בכונן Installation Failed ההתקנה נכשלה Broken Dependencies: %1 תלויות פגומות: %1 Unmatched package architecture ארכיטקטורת החבילה אינה תואמת FileChooseWidget Drag and drop file here ניתן לגרור לכאן קבצים Select File בחירת קובץ MultipleInstallPage Collapse צמצום Display details הצגת פרטים Install התקנה Done Back חזרה PackagesListDelegate Installing בהתקנה Installed מותקן Failed נכשל Same version installed אותה הגרסה מותקנת Other version installed: %1 גרסה אחרת מותקנת: %1 SingleInstallPage Collapse צמצום Display details הצגת פרטים Install התקנה Remove הסרה Reinstall התקנה מחדש OK אישור Back חזרה Done Version: גרסה: Installed successfully הותקן בהצלחה Uninstalled successfully הוסר בהצלחה Other version installed: %1 גרסה אחר מותקנת: %1 Uninstall Failed ההסרה נכשלה Name: שם: Same version installed הותקנה אותה הגרסה UninstallConfirmPage Display related packages הצגת חבילות קשורות Collapse צמצום Cancel ביטול Confirm אישור Are you sure to uninstall %1? All dependencies will also be removed להסיר את %1? כל התלויות יוסרו גם כן. main Deepin Package Manager מנהל החבילות של Deepin Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_hr.ts000066400000000000000000000214111325164132300252550ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Deepin upravitelj paketima Bulk Install Skupno instaliranje DebListModel Installation failed, please check your network connection Neuspjela instalacija, molim provjerite vašu mrežnu vezu Installation failed, please check updates in Control Center Neuspjela instalacija, molim provjerite za ažuriranja u Kontrolnom centru Installation failed, insufficient disk space Neuspjela instalacija, nedovoljno slobodnog prostor na disku Installation Failed Neuspjela instalacija Broken Dependencies: %1 Slomljene međuzavisnosti: %1 Unmatched package architecture FileChooseWidget Drag and drop file here Povuci i pusti datoteku ovdje Select File Odaberi datoteku MultipleInstallPage Collapse Display details Prikaži pojedinosti Install Instaliraj Done Back Natrag PackagesListDelegate Installing Instaliram Installed Instalirano Failed Neuspjelo Same version installed Instalirana je ista inačica Other version installed: %1 Instalirana je druga inačica: %1 SingleInstallPage Collapse Display details Prikaži pojedinosti Install Instaliraj Remove Ukloni Reinstall Ponovno instaliraj OK U redu Back Natrag Done Version: Inačica: Installed successfully Uspješno instalirano Uninstalled successfully Uspješno deinstalirano Other version installed: %1 Instalirana je druga inačica: %1 Uninstall Failed Neuspjela deinstalacija Name: Ime: Same version installed Instalirana je ista inačica UninstallConfirmPage Display related packages Collapse Cancel Otkaži Confirm Potvrdi Are you sure to uninstall %1? All dependencies will also be removed Jeste li sigurni da želite deinstalirati %1? Sve zavisnosti će također biti uklonjene main Deepin Package Manager Deepin upravitelj paketima Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Deepin upravitelj paketima je aplikacija koja služi korisnicima da instaliraju i uklone lokalni software, podržavajući skupno instaliranje deepin-deb-installer-1.2.4/translations/deepin-deb-installer_hu.ts000066400000000000000000000215501325164132300252640ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Deepin csomagkezelő Bulk Install Csoportos telepítés DebListModel Installation failed, please check your network connection Telepítés sikertelen, kérem ellenőrizze a hálózati kapcsolatot Installation failed, please check updates in Control Center Telepítés sikertelen, kérem ellenőrizze a frissítéseket a Vezérlőpultban Installation failed, insufficient disk space Telepítés sikertelen, nincs elég hely a lemezen Installation Failed Telepítés sikertelen Broken Dependencies: %1 Hibás függőségek: %1 Unmatched package architecture Nem megfelelő csomag architektúra FileChooseWidget Drag and drop file here Húzzon egy fájlt ide Select File Fájl kiválasztása MultipleInstallPage Collapse Összecsuk Display details Részletek megjelenítése Install Telepítés Done Back Vissza PackagesListDelegate Installing Telepítés Installed Telepítve Failed Sikertelen Same version installed Ez a verzió már telepítve van Other version installed: %1 Más verzió telepítve: %1 SingleInstallPage Collapse Összecsuk Display details Részletek megjelenítése Install Telepítés Remove Eltávolítás Reinstall Újratelepítés OK OK Back Vissza Done Version: Verzió: Installed successfully Sikeresen telepítve Uninstalled successfully Sikertelen telepítés Other version installed: %1 Más verzió telepítve: %1 Uninstall Failed Eltávolítás sikertelen Name: Név: Same version installed Ez a verzió már telepítve van UninstallConfirmPage Display related packages Kapcsolódó csomagok megjelenítése Collapse Összecsuk Cancel Mégse Confirm Megerősítés Are you sure to uninstall %1? All dependencies will also be removed Biztosan eltávolítja ezt %1 ? A csomag minden függősége eltávolításra kerül main Deepin Package Manager Deepin csomagkezelő Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. A Deepin csomagkezelő alkalmazás segít a felhasználónak a szoftverek telepítésében és eltávolításában. Támogatja a csoportos telepítést is. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_id.ts000066400000000000000000000212321325164132300252410ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Manajer Paket Deepin Bulk Install Instal Jumlah Besar DebListModel Installation failed, please check your network connection Instalasi gagal, mohon periksa koneksi jaringan Anda Installation failed, please check updates in Control Center Instalasi gagal, mohon periksa pembaruan dalam Pusat Kontrol Installation failed, insufficient disk space Instalasi gagal, ruang diska tidak mencukupi Installation Failed Instalasi Gagal Broken Dependencies: %1 Dependesi rusak: %1 Unmatched package architecture Paket arsitektur tidak cocok FileChooseWidget Drag and drop file here Seret dan lepas berkas di sini Select File Pilih Berkas MultipleInstallPage Collapse Jatuhkan Display details Tampilkan detail Install Instal Done Back Kembali PackagesListDelegate Installing Menginstal Installed Diinstal Failed Gagal Same version installed Versi sama diinstal Other version installed: %1 Versi lain diinstal: %1 SingleInstallPage Collapse Jatuhkan Display details Tampilkan detail Install Instal Remove Hapus Reinstall Instal ulang OK OK Back Kembali Done Version: Versi: Installed successfully Instal berhasil Uninstalled successfully Lepas berhasil Other version installed: %1 Versi lain diinstal: %1 Uninstall Failed Lepaskan gagal Name: Nama: Same version installed Versi sama diinstal UninstallConfirmPage Display related packages Tampilkan paket terhubung Collapse Jatuhkan Cancel Batal Confirm Konfirmasi Are you sure to uninstall %1? All dependencies will also be removed Apakah Anda yakin ingin melepaskan %1? Semua dependensi juga akan dihapus main Deepin Package Manager Manajer Paket Deepin Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Manajer Paket Deepin adalah aplikasi yang digunakan untuk membantu pengguna menginstal dan menghapus perangkat lunak lokal, mendukung instal jumlah banyak. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_it.ts000066400000000000000000000216571325164132300252740ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Deepin Package Manager Bulk Install Installazione di massa DebListModel Installation failed, please check your network connection Installazione fallita, controlla la connessione ad internet Installation failed, please check updates in Control Center Installazione fallita, controlla gli aggiornamenti dal Control Center Installation failed, insufficient disk space Installazione fallita, spazio libero insufficiente Installation Failed Installazione fallita Broken Dependencies: %1 Dipendenza danneggiata: %1 Unmatched package architecture Architettura pacchetti non compatibile FileChooseWidget Drag and drop file here Trascina qui i file da installare Select File Seleziona i file manualmente MultipleInstallPage Collapse Non mostrare i dettagli Display details Visualizza dettagli Install Installa Done Fatto Back Indietro PackagesListDelegate Installing Installazione.. Installed Installato Failed Fallita Same version installed Medesima versione installata Other version installed: %1 Versione differente installata: %1 SingleInstallPage Collapse Non mostrare i dettagli Display details Visualizza i dettagli Install Installa Remove Rimuovi Reinstall Aggiorna OK OK Back Indietro Done Fatto Version: Versione: Installed successfully Installazione riuscita Uninstalled successfully Disinstallazione riuscita Other version installed: %1 Differente versione installata: %1 Uninstall Failed Disinstallazione fallita Name: Nome: Same version installed Medesima versione già installata UninstallConfirmPage Display related packages Visualizza pacchetti collegati Collapse Non mostrare i dettagli Cancel Annulla Confirm Conferma Are you sure to uninstall %1? All dependencies will also be removed Sicuro di voler disinstallare %1? Tutte le dipendenze saranno rimosse main Deepin Package Manager Gestore Pacchetti di Deepin Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Deepin Package Manager é un'utile applicazione che aiuta ad installare e rimuovere le applicazioni locali, supportandone l'installazione di massa. Localizzazione italiana a cura di Massimo A. Carofano. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_lt.ts000066400000000000000000000214271325164132300252720ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Deepin paketų tvarkytuvė Bulk Install Masinis įdiegimas DebListModel Installation failed, please check your network connection Įdiegimas nepavyko, prašome patikrinti savo tinklo ryšį Installation failed, please check updates in Control Center Įdiegimas nepavyko, prašome patikrinti atnaujinimus Valdymo centre Installation failed, insufficient disk space Įdiegimas nepavyko, trūksta vietos diske Installation Failed Įdiegimas nepavyko Broken Dependencies: %1 Sugadintos priklausomybės: %1 Unmatched package architecture Neatitinkanti paketo architektūra FileChooseWidget Drag and drop file here Vilkite failą čia Select File Pasirinkti failą MultipleInstallPage Collapse Suskleisti Display details Rodyti išsamiau Install Įdiegti Done Back Atgal PackagesListDelegate Installing Įdiegiama Installed Įdiegta Failed Nepavyko Same version installed Įdiegta ta pati versija Other version installed: %1 Įdiegta kita versija: %1 SingleInstallPage Collapse Suskleisti Display details Rodyti išsamiau Install Įdiegti Remove Šalinti Reinstall Įdiegti iš naujo OK Gerai Back Atgal Done Version: Versija: Installed successfully Sėkmingai įdiegta Uninstalled successfully Sėkmingai pašalinta Other version installed: %1 Įdiegta kita versija: %1 Uninstall Failed Šalinimas nepavyko Name: Pavadinimas: Same version installed Įdiegta ta pati versija UninstallConfirmPage Display related packages Rodyti susijusius paketus Collapse Suskleisti Cancel Atsisakyti Confirm Patvirtinti Are you sure to uninstall %1? All dependencies will also be removed Ar tikrai norite pašalinti %1? Tuo pačiu bus pašalintos ir visos priklausomybės main Deepin Package Manager Deepin paketų tvarkytuvė Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Deepin paketų tvarkytuvė yra programa, naudojama padėti naudotojams įdiegti ir šalinti vietinę programinę įrangą, ši programa palaiko masinį įdiegimą. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_ms.ts000066400000000000000000000212611325164132300252660ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Pengurus Pakej Deepin Bulk Install Pasang Pukal DebListModel Installation failed, please check your network connection Pemasangan gagal, sila periksa sambungan rangkaian anda Installation failed, please check updates in Control Center Pemasangan gagal, sila periksa kemaskini dalam Pusat Kawalanrangkaian anda Installation failed, insufficient disk space Pemasangan gagal, ruang cakera tidak mencukupi Installation Failed Pemasangan Gagal Broken Dependencies: %1 Dependensi Rosak: %1 Unmatched package architecture Senibina pakej tidak sepadan FileChooseWidget Drag and drop file here Seret dan lepas fail di sini Select File Pilih Fail MultipleInstallPage Collapse Kuncup Display details Papar perincian Install Pasang Done Back Undur PackagesListDelegate Installing Memasang Installed Dipasang Failed Gagal Same version installed Versi serupa telah dipasang Other version installed: %1 Versi lain dipasang: %1 SingleInstallPage Collapse Kuncup Display details Papar perincian Install Pasang Remove Buang Reinstall Pasang Semula OK OK Back Undur Done Version: Versi: Installed successfully Berjaya dipasang Uninstalled successfully Berjaya dinyahpasang Other version installed: %1 Versi lain dipasang: %1 Uninstall Failed Nyahpasang Gagal Name: Nama: Same version installed Versi serupa telah dipasang UninstallConfirmPage Display related packages Papar pakej berkaitan Collapse Kuncup Cancel Batal Confirm Sahkan Are you sure to uninstall %1? All dependencies will also be removed Anda pasti mahu menyahpasang %1? Semua dependensinya juga akan dibuang main Deepin Package Manager Pengurus Pakej Deepin Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Pengurus Pakej Deepin ialah aplikasi yang digunakan untuk membantu pengguna memasang dan membuang perisian setempat, selain itu ia menyokong pemasangan secara pukal. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_nl.ts000066400000000000000000000216261325164132300252650ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Deepin Pakketbeheerder Bulk Install Alles installeren DebListModel Installation failed, please check your network connection Installatie mislukt, controleer alstublieft uw netwerkverbinding Installation failed, please check updates in Control Center Installatie mislukt, controleer updates in het Controlecentrum Installation failed, insufficient disk space Installatie mislukt, onvoldoende schijfruimte Installation Failed Installatie mislukt Broken Dependencies: %1 Gebroken afhankelijkheden: %1 Unmatched package architecture Pakketarchitectuur komt niet overeen FileChooseWidget Drag and drop file here Bestanden slepen en hier neerzetten Select File Bestand selecteren MultipleInstallPage Collapse Samenvouwen Display details Details tonen Install Installeren Done Back Terug PackagesListDelegate Installing Installeren Installed Geïnstalleerd Failed Mislukt Same version installed Dezelfde versie geïnstalleerd Other version installed: %1 Andere versie geïnstalleerd: %1 SingleInstallPage Collapse Samenvouwen Display details Details tonen Install Installeren Remove Verwijderen Reinstall Opnieuw installeren OK OK Back Terug Done Version: Versie: Installed successfully Succesvol geïnstalleerd Uninstalled successfully Succesvol verwijderd Other version installed: %1 Andere versie geïnstalleerd: %1 Uninstall Failed Opnieuw installeren mislukt Name: Naam: Same version installed Dezelfde versie geïnstalleerd UninstallConfirmPage Display related packages Gerelateerde pakketten tonen Collapse Samenvouwen Cancel Annuleren Confirm Bevestigen Are you sure to uninstall %1? All dependencies will also be removed Weet u zeker dat u %1 wilt verwijderen? Alle bestanden die hier afhankelijk van zijn worden ook verwijderd main Deepin Package Manager Deepin Pakketbeheerder Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Deepin Pakketbeheerder is een applicatie die gebruikers helpt bij het installeren en verwijderen van lokale software. Daarnaast ondersteunt het ook de mogelijkheid om meedere installaties tegelijkertijd uit te voeren. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_pl.ts000066400000000000000000000215001325164132300252560ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Zarządzanie pakietami Deepin Bulk Install Instalacja zbiorcza DebListModel Installation failed, please check your network connection Błąd instalacji, prosimy sprawdzić połączenie sieciowe Installation failed, please check updates in Control Center Błąd instalacji, prosimy sprawdzić aktualizacje w Centrum sterowania Installation failed, insufficient disk space Błąd instalacji: niewystarczająca ilość miejsca na dysku Installation Failed Błąd instalacji Broken Dependencies: %1 Niespełnione zależności: %1 Unmatched package architecture Niepasująca architektura pakietu FileChooseWidget Drag and drop file here Przeciągnij i upuść tutaj plik Select File Wybierz plik MultipleInstallPage Collapse Zwiń Display details Wyświetl szczegóły Install Zainstaluj Done Back Wstecz PackagesListDelegate Installing Instalowanie Installed Zainstalowane Failed Błąd Same version installed Zainstalowana taka sama wersja Other version installed: %1 Zainstalowana inna wersja: %1 SingleInstallPage Collapse Zwiń Display details Wyświetl szczegóły Install Zainstaluj Remove Usuń Reinstall Przeinstaluj OK OK Back Wstecz Done Version: Wersja: Installed successfully Pomyślnie zainstalowano Uninstalled successfully Pomyślnie odinstalowano Other version installed: %1 Zainstalowana inna wersja: %1 Uninstall Failed Błąd odinstalowania Name: Nazwa: Same version installed Zainstalowana taka sama wersja UninstallConfirmPage Display related packages Wyświetl pakiety powiązane Collapse Zwiń Cancel Anuluj Confirm Potwierdź Are you sure to uninstall %1? All dependencies will also be removed Czy na pewno chcesz odinstalować %1? Zostaną usunięte również wszystkie zależności. main Deepin Package Manager Zarządzanie pakietami Deepin Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Zarządzanie pakietami Deepin to program, który pomaga użytkownikom instalować i usuwać lokalne oprogramowanie, obsługuje instalację zbiorczą. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_pt.ts000066400000000000000000000215311325164132300252720ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Deepin Package Manager Bulk Install Instalação em massa DebListModel Installation failed, please check your network connection A instalação falhou, por favor, verifique a sua ligação à Internet Installation failed, please check updates in Control Center A instalação falhou, por favor, verifique as atualizações no 'Centro de Controlo' Installation failed, insufficient disk space Instalação falhou, espaço insuficiente em disco Installation Failed Instalação falhou Broken Dependencies: %1 Dependências não satisfeitas: %1 Unmatched package architecture Arquitetura do pacote não compatível FileChooseWidget Drag and drop file here Arraste e largue aqui o ficheiro Select File Selecionar Ficheiro MultipleInstallPage Collapse Ocultar Display details Mostrar detalhes Install Instalar Done Back Anterior PackagesListDelegate Installing A Instalar Installed Instalado Failed Falhou Same version installed A mesma versão já está instalada Other version installed: %1 Outra versão instalada: %1 SingleInstallPage Collapse Ocultar Display details Exibir detalhes Install Instalar Remove Remover Reinstall Reinstalar OK OK Back Anterior Done Version: Versão: Installed successfully Instalado com sucesso Uninstalled successfully Desinstalado com sucesso Other version installed: %1 Outra versão instalada: %1 Uninstall Failed A desinstalação falhou Name: Nome: Same version installed A mesma versão já está instalada UninstallConfirmPage Display related packages Mostrar pacotes relacionados Collapse Ocultar Cancel Cancelar Confirm Confirmar Are you sure to uninstall %1? All dependencies will also be removed Tem a certeza que deseja desinstalar %1? Também serão removidas todas as dependências main Deepin Package Manager Deepin Package Manager Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. O Deepin Package Manager é uma aplicação utilizada para ajudar os utilizadores a instalar e remover software local, suporta instalações em massa. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_pt_BR.ts000066400000000000000000000215271325164132300256620ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Gerenciador de Pacotes do Deepin Bulk Install Instalação em massa DebListModel Installation failed, please check your network connection Falha na instalação, verifique sua conexão com a internet Installation failed, please check updates in Control Center Falha na instalação, verifique se há atualizações pendentes na Central de Controle Installation failed, insufficient disk space Falha na instalação, espaço em disco insuficiente Installation Failed Falha na instalação. Broken Dependencies: %1 Dependências quebradas: %1 Unmatched package architecture Arquitetura de pacotes incompatíveis FileChooseWidget Drag and drop file here Arraste e solte o arquivo aqui Select File Selecionar arquivo MultipleInstallPage Collapse Ocultar detalhes Display details Exibir detalhes Install Instalar Done Back Voltar PackagesListDelegate Installing Instalando Installed Instalado Failed Falhou Same version installed A mesma versão está instalada Other version installed: %1 Outra versão está instalada: %1 SingleInstallPage Collapse Ocultar detalhes Display details Exibir detalhes Install Instalar Remove Remover Reinstall Reinstalar OK OK Back Voltar Done Version: Versão: Installed successfully Instalado com sucesso Uninstalled successfully Desinstalado com sucesso Other version installed: %1 Outra versão instalada: %1 Uninstall Failed Falha na desinstalação Name: Nome: Same version installed Mesma versão instalada UninstallConfirmPage Display related packages Exibir pacotes relacionados Collapse Ocultar detalhes Cancel Cancelar Confirm Confirmar Are you sure to uninstall %1? All dependencies will also be removed Deseja desinstalar %1? Todas as dependências também serão removidas main Deepin Package Manager Gerenciador de Pacotes do Deepin Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. O Gerenciador de Pacotes do Deepin é um aplicativo usado para ajudar os usuários a instalar e remover aplicativos locais e suporta a instalação em massa. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_ru.ts000066400000000000000000000230611325164132300252750ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Менеджер Пакетов Deepin Bulk Install Массовая Установка DebListModel Installation failed, please check your network connection Установка не удалась, проверьте ваше интернет подключение Installation failed, please check updates in Control Center Установка не удалась, пожалуйста проверьте обновления в Центре Управления Installation failed, insufficient disk space Установка не удалась, недостаточно места на диске Installation Failed Ошибка Установки Broken Dependencies: %1 Нарушены Зависимости: %1 Unmatched package architecture Архитектура пакета некорректна FileChooseWidget Drag and drop file here Перетащите файл сюда Select File Выберите Файл MultipleInstallPage Collapse Свернуть Display details Показать детали Install Установка Done Готово Back Назад PackagesListDelegate Installing Установка Installed Установлено Failed Не удалось Same version installed Эта версия уже установлена Other version installed: %1 Другая версия установлена: %1 SingleInstallPage Collapse Свернуть Display details Показать детали Install Установить Remove Удалить Reinstall Переустановить OK OK Back Назад Done Готово Version: Версия: Installed successfully Установка успешно завершена Uninstalled successfully Удаление успешно завершено Other version installed: %1 Другая версия установлена: %1 Uninstall Failed Ошибка Удаления Name: Наименование: Same version installed Эта версия уже установлена UninstallConfirmPage Display related packages Показать связанные пакеты Collapse Свернуть Cancel Отмена Confirm Подтвердить Are you sure to uninstall %1? All dependencies will also be removed Вы действительно хотите удалить %1? Все зависимости также будут удалены. main Deepin Package Manager Менеджер Пакетов Deepin Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Менеджер Пакетов Deepin используется для помощи пользователям в установке и удалении программного обеспечения, с поддержкой массовой установки. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_sk.ts000066400000000000000000000215401325164132300252640ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Deepin Správca balíčkov Bulk Install Hromadná inštalácia DebListModel Installation failed, please check your network connection Inštalácia zlyhala, skontrolujte pripojenie k sieti Installation failed, please check updates in Control Center Inštalácia zlyhala, skontrolujte aktualizácie v Ovládacom centre Installation failed, insufficient disk space Inštalácia zlyhala, nedostatočné miesto na disku Installation Failed Inštalácia zlyhala Broken Dependencies: %1 Rozbité závislosti: %1 Unmatched package architecture Nezabezpečená architektúra balíčkov FileChooseWidget Drag and drop file here Tu pretiahnite a pustite súbor Select File Vybrať súbor MultipleInstallPage Collapse Zbaliť Display details Zobraziť podrobnosti Install Inštalovať Done Back Späť PackagesListDelegate Installing Inštalujem Installed Nainštalované Failed Neúspešné Same version installed Rovnaká verzia je nainštalovaná Other version installed: %1 Iná inštalovaná verzia: %1 SingleInstallPage Collapse Zbaliť Display details Zobraziť podrobnosti Install Inštalovať Remove Odstrániť Reinstall Reinštalovať OK OK Back Späť Done Version: Verzia: Installed successfully Úspešne nainštalované Uninstalled successfully Úspešne odinštalované Other version installed: %1 Nainštalovaná iná verzia: %1 Uninstall Failed Odinštalovanie zlyhalo Name: Názov: Same version installed Rovnaká verzia je nainštalovaná UninstallConfirmPage Display related packages Zobraziť súvisiace balíčky Collapse Zbaliť Cancel Zrušiť Confirm Potvrdiť Are you sure to uninstall %1? All dependencies will also be removed Naozaj chcete odinštalovať %1? Všetky závislosti budú tiež odstránené main Deepin Package Manager Deepin Správca balíčkov Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Deepin Správca balíčkov je aplikácia používaná na pomoc používateľom pri inštalácii a odstraňovaní lokálneho softvéru, podporuje hromadnú inštaláciu. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_sl.ts000066400000000000000000000214021325164132300252620ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Upravitelj paketov Deepin Bulk Install Bulk namestitev DebListModel Installation failed, please check your network connection Namestitev ni uspela, prosim preverite vašo omrežno povezavo Installation failed, please check updates in Control Center Namestitev ni uspela, prosim preverite posodobitve v Nadzornem centru Installation failed, insufficient disk space Namestitev ni uspela, ni dovolj prostora na disku Installation Failed Namestitev ni uspela Broken Dependencies: %1 Okvarjeni odvisni podatki: %1 Unmatched package architecture Neskladna paketna arhitektura FileChooseWidget Drag and drop file here Tukaj povlecite in spustite datoteko Select File Izberi datoteko MultipleInstallPage Collapse Skrij Display details Prikaži podrobnosti Install Namesti Done Back Nazaj PackagesListDelegate Installing Nameščam Installed Nameščeno Failed Ni uspelo Same version installed Ista različica že nameščena Other version installed: %1 Druga različica nameščena: %1 SingleInstallPage Collapse Skrij Display details Prikaži podrobnosti Install Namesti Remove Odstrani Reinstall Ponovno namesti OK V redu Back Nazaj Done Version: Različica: Installed successfully Uspešno nameščeno Uninstalled successfully Uspešno odstranjeno Other version installed: %1 Druga različica nameščena: %1 Uninstall Failed Odstranjevanje neuspešno Name: Ime: Same version installed Ista različica že nameščena UninstallConfirmPage Display related packages Prikaži podobne pakete Collapse Skrij Cancel Prekliči Confirm Potrdi Are you sure to uninstall %1? All dependencies will also be removed Res hočete odstraniti %1? Tudi vsi odvisni podatki bodo odstranjeni main Deepin Package Manager Upravitelj paketov Deepin Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Upravitelj paketov Deepin je aplikacija, ki pomaga uporabnikom namestiti in odstraniti lokalne programe. Podpira bulk namestitev. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_tr.ts000066400000000000000000000215041325164132300252740ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Deepin Paket Yönetici Bulk Install Toplu Yükleme DebListModel Installation failed, please check your network connection Kurulum başarısız oldu, lütfen ağ bağlantınızı kontrol ediniz. Installation failed, please check updates in Control Center Kurulum başarısız oldu, lütfen Kontrol Merkezinde güncelleştirmeleri kontrol ediniz Installation failed, insufficient disk space Kurulum başarısız, yetersiz disk alanı Installation Failed Yükleme başarısız Broken Dependencies: %1 Kırık Bağımlılıklar: %1 Unmatched package architecture Benzersiz paket mimarisi FileChooseWidget Drag and drop file here Dosyayı buraya sürükleyip ve bırakınız Select File Dosya Seç MultipleInstallPage Collapse Çöküş Display details Ayrıntıları göster Install Yükle Done Back Geri PackagesListDelegate Installing Yükleniyor Installed Yüklendi Failed Başarısız oldu Same version installed Aynı sürüm yüklendi Other version installed: %1 Diğer sürüm yüklendi: %1 SingleInstallPage Collapse Çöküş Display details Ayrıntıları göster Install Yükle Remove Kaldır Reinstall Tekrar yükle OK TAMAM Back Geri Done Version: Sürüm: Installed successfully Başarıyla yüklendi Uninstalled successfully Başarıyla kaldırıldı Other version installed: %1 Diğer sürüm yüklü: % 1 Uninstall Failed Kaldırma Başarısız Oldu Name: İsim: Same version installed Aynı sürüm yüklü UninstallConfirmPage Display related packages İlgili paketleri göster Collapse Çöküş Cancel İptal et Confirm Doğrula Are you sure to uninstall %1? All dependencies will also be removed %1'i kaldırmak istediğinizden emin misiniz? Tüm bağımlılıklar da kaldırılacaktır main Deepin Package Manager Deepin Paket Yönetici Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Deepin Paket Yönetici, kullanıcıların yerel yazılımı yüklemesine ve kaldırmasına yardımcı olan, toplu kurulumu destekleyen bir uygulamadır. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_uk.ts000066400000000000000000000230401325164132300252630ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Менеджер пакунків Deepin Bulk Install Масова інсталяція DebListModel Installation failed, please check your network connection Не вдалося встановити, перевірте підключення до мережі Installation failed, please check updates in Control Center Не вдалося встановити, перевірте оновлення в Центрі керування Installation failed, insufficient disk space Помилка встановлення, недостатньо місця на диску Installation Failed Не вдалося встановити Broken Dependencies: %1 Поламані залежності: %1 Unmatched package architecture Неперевершена архітектура пакету FileChooseWidget Drag and drop file here Перетягніть файл сюди Select File Вибрати Файл MultipleInstallPage Collapse Згорнути Display details Покзати деталі Install Встановити Done Back Назад PackagesListDelegate Installing Встановлення Installed Встановлено Failed Помилка Same version installed Одна і та сама версія встановлена Other version installed: %1 Інша версія встановлена: %1 SingleInstallPage Collapse Згорнути Display details Покзати деталі Install Встановити Remove Видалити Reinstall Перевстановити OK Гаразд Back Назад Done Version: Версія: Installed successfully Встановлено успішно Uninstalled successfully Видалено успішно Other version installed: %1 Інша версія встановлена: %1 Uninstall Failed Не вдалося видалити  Name: Ім'я: Same version installed Одна і та сама версія встановлена UninstallConfirmPage Display related packages Покзати пов'язані пакети Collapse Згорнути Cancel Скасувати Confirm Підтвердити Are you sure to uninstall %1? All dependencies will also be removed Ви впевнені що хочете видалити %1? Всі залежності також будуть видалені main Deepin Package Manager Менеджер пакунків Deepin Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Менеджер пакунків Deepin - це програма, яка допомагає користувачам встановлювати та видаляти локальне програмне забезпечення, підтримує масові установки. deepin-deb-installer-1.2.4/translations/deepin-deb-installer_zh_CN.ts000066400000000000000000000210751325164132300256530ustar00rootroot00000000000000 DebInstaller Deepin Package Manager 深度软件包管理器 Bulk Install 批量安装 DebListModel Installation failed, please check your network connection 安装失败,请检查您的网络连接 Installation failed, please check updates in Control Center 安装失败,请在控制中心检查更新 Installation failed, insufficient disk space 安装失败,磁盘空间不足 Installation Failed 安装失败 Broken Dependencies: %1 依赖关系不满足:%1 Unmatched package architecture 软件包架构不匹配 FileChooseWidget Drag and drop file here 拖拽软件包到此 Select File 选择文件 MultipleInstallPage Collapse 收起 Display details 显示详细信息 Install 安装 Done 完成 Back 返回 PackagesListDelegate Installing 正在安装 Installed 已安装 Failed 安装失败 Same version installed 已安装相同版本 Other version installed: %1 已安装其他版本:%1 SingleInstallPage Collapse 收起 Display details 显示详细信息 Install 安装 Remove 卸载 Reinstall 重新安装 OK 确定 Back 返回 Done 完成 Version: 版本: Installed successfully 安装成功 Uninstalled successfully 卸载成功 Other version installed: %1 已安装其他版本:%1 Uninstall Failed 卸载失败 Name: 名称: Same version installed 已安装相同版本 UninstallConfirmPage Display related packages 显示相关软件包 Collapse 收起 Cancel 取消 Confirm 确认卸载 Are you sure to uninstall %1? All dependencies will also be removed 您确定要卸载%1 吗? 所有依赖也会被一起移除 main Deepin Package Manager 深度软件包管理器 Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. 深度软件包管理器用于帮助用户安装和卸载本地软件,支持批量安装。 deepin-deb-installer-1.2.4/translations/deepin-deb-installer_zh_TW.ts000066400000000000000000000210761325164132300257060ustar00rootroot00000000000000 DebInstaller Deepin Package Manager Deepin 軟體管理器 Bulk Install 批量安裝 DebListModel Installation failed, please check your network connection 安裝失敗,請檢查網路連線 Installation failed, please check updates in Control Center 安裝失敗,請於控制中心檢查更新 Installation failed, insufficient disk space 安裝失敗,磁碟機空間不足 Installation Failed 安裝失敗 Broken Dependencies: %1 缺少的依賴軟體:%1 Unmatched package architecture 軟體套件結構不符合規範 FileChooseWidget Drag and drop file here 拖拽檔案到此 Select File 選擇檔案 MultipleInstallPage Collapse 隱藏細節 Display details 顯示細節 Install 安裝 Done Back 返回 PackagesListDelegate Installing 正在安裝 Installed 已安裝 Failed 安裝失敗 Same version installed 已安裝相同版本 Other version installed: %1 已安裝其他版本:%1 SingleInstallPage Collapse 隱藏細節 Display details 顯示細節 Install 安裝 Remove 移除 Reinstall 重新安裝 OK 確定 Back 返回 Done Version: 版本: Installed successfully 安裝成功 Uninstalled successfully 移除成功 Other version installed: %1 已安裝其他版本:%1 Uninstall Failed 移除失敗 Name: 名稱: Same version installed 已安裝相同版本 UninstallConfirmPage Display related packages 顯示依賴的軟體套件 Collapse 隱藏細節 Cancel 取消 Confirm 確定 Are you sure to uninstall %1? All dependencies will also be removed 確定移除 %1? 所有依賴的軟體也會移除 main Deepin Package Manager Deepin 軟體管理器 Deepin Package Manager is an application used to help users install and remove local software, supports bulk install. Deepin 軟體管理器能協助使用者安裝與移除電腦上的軟體,並支援批量安裝。 deepin-deb-installer-1.2.4/uninstallconfirmpage.cpp000066400000000000000000000105541325164132300224420ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "uninstallconfirmpage.h" #include #include UninstallConfirmPage::UninstallConfirmPage(QWidget *parent) : QWidget(parent), m_icon(new QLabel), m_tips(new QLabel), m_infoWrapperWidget(new QWidget), m_infoControl(new InfoControlButton(tr("Display related packages"), tr("Collapse"))), m_dependsInfomation(new QTextEdit), m_cancelBtn(new QPushButton), m_confirmBtn(new QPushButton) { const QIcon icon = QIcon::fromTheme("application-vnd.debian.binary-package", QIcon::fromTheme("debian-swirl")); m_icon->setFixedSize(64, 64); m_icon->setPixmap(icon.pixmap(64, 64)); m_tips->setAlignment(Qt::AlignCenter); m_tips->setStyleSheet("QLabel {" "padding: 20px 0 0 0;" "}"); m_cancelBtn->setText(tr("Cancel")); m_cancelBtn->setFixedSize(120, 36); m_confirmBtn->setText(tr("Confirm")); m_confirmBtn->setFixedSize(120, 36); m_dependsInfomation->setReadOnly(true); m_dependsInfomation->setVisible(false); m_dependsInfomation->setAcceptDrops(false); m_dependsInfomation->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_dependsInfomation->setStyleSheet("QTextEdit {" "color: #609dc9;" "border: 1px solid #eee;" "margin: 0 0 20px 0;" "}"); QHBoxLayout *btnsLayout = new QHBoxLayout; btnsLayout->addStretch(); btnsLayout->addWidget(m_cancelBtn); btnsLayout->addWidget(m_confirmBtn); btnsLayout->addStretch(); btnsLayout->setSpacing(30); btnsLayout->setMargin(0); QVBoxLayout *centerWrapperLayout = new QVBoxLayout; centerWrapperLayout->addStretch(); centerWrapperLayout->addWidget(m_icon); centerWrapperLayout->addSpacing(15); centerWrapperLayout->setAlignment(m_icon, Qt::AlignHCenter); centerWrapperLayout->addWidget(m_tips); centerWrapperLayout->addStretch(); centerWrapperLayout->setSpacing(0); centerWrapperLayout->setMargin(0); m_infoWrapperWidget->setLayout(centerWrapperLayout); QVBoxLayout *centralLayout = new QVBoxLayout; centralLayout->addWidget(m_infoWrapperWidget); centralLayout->addWidget(m_infoControl); centralLayout->setAlignment(m_infoControl, Qt::AlignHCenter); centralLayout->addSpacing(15); centralLayout->addWidget(m_dependsInfomation); centralLayout->addLayout(btnsLayout); centralLayout->setSpacing(0); centralLayout->setContentsMargins(20, 0, 20, 30); setLayout(centralLayout); connect(m_cancelBtn, &QPushButton::clicked, this, &UninstallConfirmPage::canceled); connect(m_confirmBtn, &QPushButton::clicked, this, &UninstallConfirmPage::accepted); connect(m_infoControl, &InfoControlButton::expand, this, &UninstallConfirmPage::showDetail); connect(m_infoControl, &InfoControlButton::shrink, this, &UninstallConfirmPage::hideDetail); } void UninstallConfirmPage::setPackage(const QString &name) { QString tips(tr("Are you sure to uninstall %1?\nAll dependencies will also be removed")); m_tips->setText(tips.arg(name)); } void UninstallConfirmPage::setRequiredList(const QStringList &requiredList) { m_infoControl->setVisible(!requiredList.isEmpty()); m_dependsInfomation->setText(requiredList.join(", ")); } void UninstallConfirmPage::showDetail() { m_infoWrapperWidget->setVisible(false); m_dependsInfomation->setVisible(true); } void UninstallConfirmPage::hideDetail() { m_infoWrapperWidget->setVisible(true); m_dependsInfomation->setVisible(false); } deepin-deb-installer-1.2.4/uninstallconfirmpage.h000066400000000000000000000030171325164132300221030ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef UNINSTALLCONFIRMPAGE_H #define UNINSTALLCONFIRMPAGE_H #include "infocontrolbutton.h" #include #include #include #include class UninstallConfirmPage : public QWidget { Q_OBJECT public: explicit UninstallConfirmPage(QWidget *parent = 0); void setPackage(const QString &name); void setRequiredList(const QStringList &requiredList); signals: void accepted() const; void canceled() const; private slots: void showDetail(); void hideDetail(); private: QLabel *m_icon; QLabel *m_tips; QWidget *m_infoWrapperWidget; InfoControlButton *m_infoControl; QTextEdit *m_dependsInfomation; QPushButton *m_cancelBtn; QPushButton *m_confirmBtn; }; #endif // UNINSTALLCONFIRMPAGE_H deepin-deb-installer-1.2.4/widgets/000077500000000000000000000000001325164132300171535ustar00rootroot00000000000000deepin-deb-installer-1.2.4/widgets/bluebutton.cpp000066400000000000000000000027171325164132300220510ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "bluebutton.h" BlueButton::BlueButton(QWidget *parent) : QPushButton(parent) { setFixedSize(120, 36); setStyleSheet("BlueButton {" "color: #2ca7f8;" "border: 1px solid #2ca7f8;" "border-radius: 4px;" "}" "" "BlueButton:hover {" "color: white;" "background-color: qlineargradient(x1:0 y1:0, x2:0 y2:1, stop:0 #8ccfff, stop:1 #4bb8ff);" "}" "" "BlueButton:pressed {" "background-color: qlineargradient(x1:0 y1:0, x2:0 y2:1, stop:0 #0b8cff, stop:1 #0aa1ff);" "}"); } deepin-deb-installer-1.2.4/widgets/bluebutton.h000066400000000000000000000017111325164132300215070ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef BLUEBUTTON_H #define BLUEBUTTON_H #include class BlueButton : public QPushButton { Q_OBJECT public: explicit BlueButton(QWidget *parent = 0); }; #endif // BLUEBUTTON_H deepin-deb-installer-1.2.4/widgets/graybutton.cpp000066400000000000000000000027311325164132300220600ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "graybutton.h" GrayButton::GrayButton(QWidget *parent) : QPushButton(parent) { setFixedSize(120, 36); setStyleSheet("GrayButton {" "color: #303030;" "border: 1px solid rgba(0, 0, 0, .1);" "border-radius: 4px;" "}" "" "GrayButton:hover {" "color: white;" "background-color: qlineargradient(x1:0 y1:0, x2:0 y2:1, stop:0 #8ccfff, stop:1 #4bb8ff);" "}" "" "GrayButton:pressed {" "background-color: qlineargradient(x1:0 y1:0, x2:0 y2:1, stop:0 #0b8cff, stop:1 #0aa1ff);" "}"); } deepin-deb-installer-1.2.4/widgets/graybutton.h000066400000000000000000000017111325164132300215220ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef GRAYBUTTON_H #define GRAYBUTTON_H #include class GrayButton : public QPushButton { Q_OBJECT public: explicit GrayButton(QWidget *parent = 0); }; #endif // GRAYBUTTON_H deepin-deb-installer-1.2.4/workerprogress.cpp000066400000000000000000000022641325164132300213130ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "workerprogress.h" WorkerProgress::WorkerProgress(QWidget *parent) : QProgressBar(parent) { setMinimum(0); setMaximum(100); setFixedHeight(8); setFixedWidth(240); setTextVisible(false); setStyleSheet("QProgressBar {" "border: 1px solid rgba(0, 0, 0, .03);" "border-radius: 4px;" "background-color: rgba(0, 0, 0, .05);" "}"); } deepin-deb-installer-1.2.4/workerprogress.h000066400000000000000000000017371325164132300207640ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * This program is free software: you can 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 * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef WORKERPROGRESS_H #define WORKERPROGRESS_H #include class WorkerProgress : public QProgressBar { Q_OBJECT public: explicit WorkerProgress(QWidget *parent = 0); }; #endif // WORKERPROGRESS_H